Sub-issue of #109.
Goal
Add a searchable, keyboard-navigable Combobox to template/src/shared/ui/ so HealthBar (109f) and future widgets can use it.
Scope
- Wrap
bits-ui Combobox (already a transitive dep via shadcn-svelte primitives).
- Public surface mirrors existing primitives:
Combobox.svelte — root with bind:value, bind:open
ComboboxTrigger.svelte, ComboboxContent.svelte, ComboboxItem.svelte, ComboboxInput.svelte
- Variants:
default, mono (for HealthBar — matches font-mono header style)
- Sizes:
sm, md
class?: string forwarded to root, Snippet-based slots
- Showcase on
/playground — every variant × size combo, light + dark + orch themes.
- Plain CSS + tokens from
app/styles/app.css (rule 24).
- Re-exported from
shared/ui/index.ts.
Forgeplan
Acceptance
/playground shows Combobox section with 2 variants × 2 sizes, search + keyboard nav working.
- A11y:
role=combobox, aria-expanded, aria-controls, focus-visible ring, escape-closes.
- Type-check 0 errors, smoke green.
- Rule 24 grep clean (no
:global(.combobox-*) anywhere outside shared/ui/).
Depends on
- (none — parallel with 109a–d)
Sub-issue of #109.
Goal
Add a searchable, keyboard-navigable Combobox to
template/src/shared/ui/so HealthBar (109f) and future widgets can use it.Scope
bits-uiCombobox (already a transitive dep via shadcn-svelte primitives).Combobox.svelte— root withbind:value,bind:openComboboxTrigger.svelte,ComboboxContent.svelte,ComboboxItem.svelte,ComboboxInput.sveltedefault,mono(for HealthBar — matches font-mono header style)sm,mdclass?: stringforwarded to root,Snippet-based slots/playground— every variant × size combo, light + dark + orch themes.app/styles/app.css(rule 24).shared/ui/index.ts.Forgeplan
Acceptance
/playgroundshows Combobox section with 2 variants × 2 sizes, search + keyboard nav working.role=combobox,aria-expanded,aria-controls, focus-visible ring, escape-closes.:global(.combobox-*)anywhere outsideshared/ui/).Depends on