## toolbar (`poetry_toolbar`)

A horizontal group of controls that acts as one keyboard tab stop - Tab passes over the group, Arrow keys move between its controls.

Class: Poetry::Ui::Toolbar::Component - BEM block `poetry-ui-toolbar`.
Slot REQUIRED: with_button (at least one control (with_button / with_input)) - a call without it raises.
- `orientation:` (symbol) - one of horizontal|vertical, default "horizontal" - The strip's axis; :vertical stacks the controls and flips the arrow keys.
- `label:` (string) - required - The toolbar's accessible name. Required.
- `loop:` (boolean) - default true - Whether arrow navigation wraps at the ends.
Slots: items (The control slots: with_button (a real Button - tag: :a makes it a link), with_input (search/filter), with_separator (its orientation flips automatically).; many; types button|input|separator - one with_<type> setter each, options as keywords).
- PART `toolbar` - The role=toolbar root - one Tab stop; arrow keys rove across the slotted controls (roving-focus, with the caret guard protecting inputs) | states: data-orientation=horizontal|vertical (always - which arrows rove)
- WIRING `poetry--core--roving-focus`: values loop, manageTabindex, orientation; actions keydown; events poetry--core--roving-focus:entry
- RULE: A Toolbar is ONE Tab stop: arrows move between its controls - use it for grouped actions over a surface (table bulk actions, editor strips), never as page navigation.
- RULE: Compose through the typed slots: with_button (a real poetry Button - tag: :a makes it a link), with_input (search/filter - the caret keeps its arrow keys), with_separator (orientation flips automatically).
- RULE: label: is the toolbar's accessible name and is required - screen readers announce it on entry.
- RULE: A ToggleGroup composed inside keeps its own arrow navigation (its items rove locally); place it between separators so the seam reads as a group.
