every tool reachable.
Tab enters once. Arrow keys move within the set. Home and End jump to the edges.
tools should remember what the hand chose. focus leaves briefly; toggles stay marked until the state changes.
npx shadcn@latest add berkantay/cheez/marked-toolbartools should feel close to the thought.
use left and right arrows inside the toolbar<MarkedToolbar aria-label="formatting" tone="orange" size="medium">
<MarkedToolbarGroup>
<MarkedToolbarButton pressed={bold} onPressedChange={setBold}>bold</MarkedToolbarButton>
<MarkedToolbarButton pressed={italic} onPressedChange={setItalic}>italic</MarkedToolbarButton>
</MarkedToolbarGroup>
<MarkedToolbarSeparator />
<MarkedToolbarInput aria-label="zoom" defaultValue="100%" />
<MarkedToolbarLink href="/help">help</MarkedToolbarLink>
</MarkedToolbar>Tab enters once. Arrow keys move within the set. Home and End jump to the edges.
| part | prop | type | default | purpose |
|---|---|---|---|---|
| Root | orientation | "horizontal" | "vertical" | "horizontal" | roving focus direction |
| Root | loopFocus | boolean | true | wrap focus at each end |
| Root | disabled | boolean | false | disable every control |
| Root | tone | MarkedToolbarTone | "orange" | outer frame ink |
| Root | size | small | medium | large | "medium" | control density |
| Root | character | CheezCharacter | "calm" | drawing pressure |
| Button | pressed | boolean | — | persistent toggle state |
| Button | onPressedChange | function | — | toggle callback |
| Button | focusableWhenDisabled | boolean | true | keep disabled item discoverable |
| Button | tone | "default" | "danger" | "default" | destructive treatment |
| Link | href | string | — | native destination |
| Input | defaultValue | string | — | toolbar-native text field |
| Separator | orientation | Orientation | opposite root | semantic group boundary |