ChromeId:
| "selection.outline"
| "selection.resize-handles"
| "selection.rotation-handle"
| "action.marquee"
| "action.lasso"
| "action.move-ghosts"
| "action.insert-preview"
| "action.commands"
| "snap.guides"
| "snap.targets"
| "grid"
| string & {}
Stable identifier for one user-visible chrome element. The same id gates both paint and hit-test — there is no separate
affordance.X/selection.Xsplit — so toggling a rule cannot leave a visually-present but un-hittable handle (or vice versa).Naming convention by lifecycle:
selection.*— chrome reflecting committed selection state (persists between actions).action.*— chrome that only exists during an in-flight action (vanishes on commit / cancel).snap.*— snapping system chrome (guides, target highlights).grid,debug.*— environment chrome.The intersection
(string & {})keeps the union open so consumers can register their own ids; the kit's built-ins are listed explicitly for autocomplete.