bitboss-ui 3.0.0-beta.59 → 3.0.0-beta.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/ai/BbSelect.md +2 -0
  2. package/dist/ai/BbSelectPopover.md +64 -18
  3. package/dist/ai/changelog.json +13 -3
  4. package/dist/ai/components.json +4 -4
  5. package/dist/ai/guides/agent-contract.md +3 -1
  6. package/dist/ai/guides/coherence-playbook.md +3 -3
  7. package/dist/ai/guides/fetch-items-playbook.md +3 -3
  8. package/dist/ai/helpers/inertia/manifest.json +1 -1
  9. package/dist/ai/manifest/components/BbSelectPopover.json +2 -0
  10. package/dist/ai/manifest/index.json +2 -2
  11. package/dist/ai/manifest/types.api.json +1 -1
  12. package/dist/ai/source/BbSelect.md +23 -34
  13. package/dist/ai/source/BbSelectPopover.md +141 -30
  14. package/dist/ai/source/FlatListBox.md +23 -0
  15. package/dist/ai/source/GroupedListBox.md +30 -0
  16. package/dist/ai/source/ListBox.md +6 -0
  17. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +201 -207
  18. package/dist/components/BbSelect/types.d.ts +2 -6
  19. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +624 -591
  20. package/dist/components/BbSelectPopover/knownItems.d.ts +6 -6
  21. package/dist/components/BbSelectPopover/types.d.ts +13 -0
  22. package/dist/components/FlatListBox/FlatListBox.vue.d.ts +2 -0
  23. package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +106 -97
  24. package/dist/components/GroupedListBox/GroupedListBox.vue.d.ts +2 -0
  25. package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +22 -10
  26. package/dist/components/ListBox/ListBox.vue.d.ts +2 -0
  27. package/dist/components/ListBox/ListBox.vue_vue_type_script_setup_true_lang.js +3 -1
  28. package/dist/components/ListBox/types.d.ts +4 -0
  29. package/dist/llms-full.txt +74 -24
  30. package/dist/llms-medium.txt +3 -1
  31. package/dist/styles.css +1 -1
  32. package/dist/utils/versionCheck.js +1 -1
  33. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "library": "bitboss-ui",
4
- "version": "3.0.0-beta.59",
5
- "generatedAt": "2026-10-18T22:17:58.686Z",
4
+ "version": "3.0.0-beta.60",
5
+ "generatedAt": "2026-10-19T10:31:15.040Z",
6
6
  "legend": {
7
7
  "referenceOnly": "true = internal building block, documented so trees and sources can be read. Never write it in a template; most are not exported.",
8
8
  "types[].usage": "api = the type of a prop, event or slot value you pass; wrapper = a component Props/Events/Slots type (its component entry lists every field); advanced = everything else. An api type named <component>Props (BbOffCanvasProps) is that component's props: read its component entry.",
@@ -375,7 +375,7 @@
375
375
  {"name":"BbSelectEvents","usage":"wrapper","component":"BbSelect","usedBy":[]},
376
376
  {"name":"BbSelectItemProps","usage":"api","component":null,"usedBy":[{"component":"BbSelect","surface":"prop","name":"itemProps"},{"component":"BbSelectPopover","surface":"prop","name":"itemProps"}],"definition":"type BbSelectItemProps<T = any> = ItemProps<T, SelectItemFields>;","fields":["description?: ItemAccessor<T, string | null | undefined>","prepend:icon?: ItemAccessor<T, string | null | undefined>","append:icon?: ItemAccessor<T, string | null | undefined>"]},
377
377
  {"name":"BbSelectItemsContext","usage":"api","component":null,"usedBy":[{"component":"BbSelect","surface":"prop","name":"items"}],"definition":"type BbSelectItemsContext<M = any> = BbItemsProviderContext<M> & { query: string; reason: 'search' | 'initial' | 'dependencies' | 'model' | 'reopen'; };"},
378
- {"name":"BbSelectKnownItem","usage":"api","component":"BbSelect","usedBy":[{"component":"BbSelect","surface":"prop","name":"knownItems"}],"definition":"type BbSelectKnownItem = { value: unknown; label: string; };"},
378
+ {"name":"BbSelectKnownItem","usage":"api","component":"BbSelect","usedBy":[{"component":"BbSelect","surface":"prop","name":"knownItems"},{"component":"BbSelectPopover","surface":"prop","name":"knownItems"}],"definition":"type BbSelectKnownItem = { value: unknown; label: string; };"},
379
379
  {"name":"BbSelectPopoverEvents","usage":"wrapper","component":"BbSelectPopover","usedBy":[]},
380
380
  {"name":"BbSelectPopoverItemsContext","usage":"api","component":null,"usedBy":[{"component":"BbSelectPopover","surface":"prop","name":"items"}],"definition":"type BbSelectPopoverItemsContext<M = any> = BbSelectItemsContext<M>;"},
381
381
  {"name":"BbSelectPopoverProps","usage":"wrapper","component":"BbSelectPopover","usedBy":[]},
@@ -535,7 +535,7 @@
535
535
  {"name":"BbRadioGroup","group":"Selection","description":"Coordinates exclusive selection among radio options.","referenceOnly":false,"hasGuide":true,"contract":"ai/BbRadioGroup.md","source":"ai/source/BbRadioGroup.md","props":[{"name":"autofocus","type":"Booleanish | undefined","required":false,"description":"Focuses the field when it mounts (a dialog already open included), unless the user is typing in another field."},{"name":"compact","type":"boolean | undefined","required":false,"default":"false","description":"Compact density. Swaps `--bb-label-spacing-y` for `--bb-label-spacing-y-compact`, so tune a compact group's label gap with the `-compact` token, not the base one."},{"name":"dependencies","type":"unknown[] | undefined","required":false,"description":"Defines an array of dependencies that will trigger actions in the component upon change."},{"name":"depsDebounceTime","type":"number | undefined","required":false,"description":"Timeout used to debounce response to changes to dependencies."},{"name":"description","type":"string | undefined","required":false,"description":"Text between the label and the input. Unlike the hint it is always visible; it joins the input's `aria-describedby` after any `errors` / `warnings`, before the `hint`."},{"name":"disabled","type":"boolean | undefined","required":false,"default":"false","description":"Disables the component."},{"name":"emptyText","type":"string | undefined","required":false,"description":"String displayed when there are no items to display."},{"name":"enforceCoherence","type":"boolean | undefined","required":false,"default":"false","description":"After every applied, successful load (an empty one included), drops the model values the options no longer contain (a single value resets to `null`). A failed load never prunes."},{"name":"errors","type":"string | string[] | undefined","required":false,"description":"Error messages under the field, a string or array, in an `aria-live=\"polite\"` region and first in the control's `aria-describedby`, so they are re-read when it regains focus."},{"name":"failedText","type":"string | undefined","required":false,"default":"the localized `common.failedText` (\"Couldn't load items\")","description":"String displayed in the empty state while the latest load FAILED (the `items` provider threw): the twin of `emptyText` for that case."},{"name":"formless","type":"boolean | undefined","required":false,"default":"false","description":"Keep this control out of the enclosing `BbForm` entirely: not submitted, not dirty, not reset, not validated. For a control that is not form data (a filter, a \"show advanced\" switch)."},{"name":"hasErrors","type":"boolean | undefined","required":false,"default":"false","description":"Define if the component should be in an error state. It usually attaches a CSS class for styling purposes."},{"name":"hasWarnings","type":"boolean | undefined","required":false,"default":"false","description":"Define if the component should be in a warning state. Same chrome as errors with `--bb-warn`; errors take priority."},{"name":"hideLabel","type":"boolean | undefined","required":false,"default":"false","description":"Visually hides each option's label text (the text rendered next to every input) while keeping it accessible to screen readers. Does not affect the fieldset legend — use `hideLegend` for that."},{"name":"hideLegend","type":"boolean | undefined","required":false,"default":"false","description":"Visually hides the legend of the fieldset while maintaining accessibility."},{"name":"hint","type":"string | undefined","required":false,"description":"Text box to be displayed near the input, usually to indicate instructions."},{"name":"id","type":"string | undefined","required":false,"description":"Prefix for the ids of each option's input and of the label, description and message. Generated when omitted."},{"name":"inputAlign","type":"FieldCrossAlign | undefined","required":false,"values":["top","center","bottom"],"description":"Vertical position of the control in a side-by-side row; not `inputPosition`, the horizontal one. Omitted, the control's first line meets the label's."},{"name":"inputPosition","type":"\"left\" | \"center\" | \"right\" | undefined","required":false,"default":"\"left\"","description":"Sets the alignment of the input. Since inputs are inline block they can be aligned just as text can."},{"name":"itemInputAlign","type":"FieldCrossAlign | undefined","required":false,"values":["top","center","bottom"],"description":"Vertical position of each option's control in its row; `'center'` is the middle of the label plus its description. Omitted, it sits on the label's first line."},{"name":"itemLabelAlign","type":"FieldCrossAlign | undefined","required":false,"values":["top","center","bottom"],"description":"Vertical position of each option's label in its row. Omitted, it stays as it is."},{"name":"itemLayout","type":"FieldLayout | undefined","required":false,"default":"'auto'","description":"How each row's input and label sit together, in the `layout` keywords: `'auto'`, `'vertical'`, `'horizontal'`, `'label-fill'`, `'input-fill'`, or a two-word ratio pattern like `'xx xxxxx'`."},{"name":"itemProps","type":"BbOptionGroupItemProps<T> | undefined","required":false,"description":"ADDITIONAL row fields, never the text or value: `description`, a muted line under the label (it may wrap; announced as the option's description). An object of paths or getters, or a function of the item; nothing is read implicitly."},{"name":"itemReverse","type":"boolean | undefined","required":false,"default":"false","description":"Swaps each row's input and label from their natural order (input first), in every `item-layout`. `reverse` swaps the legend and the options instead."},{"name":"items","type":"T[] | ((context: BbRadioGroupItemsContext) => T[] | Promise<T[]>)","required":true,"description":"The options: an array, or a provider called with a `BbRadioGroupItemsContext` (`reason`, `modelValue`, `signal`), sync or async. A provider fails by THROWING, never by returning `[]`: the rows clear and `#empty` gets the `error`."},{"name":"itemText","type":"ItemAccessor<T, string> | undefined","required":false,"default":"own `label`, else `text`, else `JSON.stringify(item)`","description":"Defines a path that returns a property of the object to use as text or a function that returns a string.\n\nUnset: own `label`, else `text` (`{ label, value }` needs no accessor)."},{"name":"itemValue","type":"ItemAccessor<T> | undefined","required":false,"default":"own `value`, else the whole item","description":"Defines a path that returns a property of the object to use as value or a function that returns any value.\n\nUnset: own `value`, even `null`."},{"name":"labelAlign","type":"FieldCrossAlign | undefined","required":false,"values":["top","center","bottom"],"description":"Vertical position of the label block in a side-by-side row; not `labelPosition`, the horizontal one. Omitted, the label's first line meets the control's."},{"name":"layout","type":"Responsive<FieldLayout> | undefined","required":false,"description":"How label and input sit together: `'vertical'`, `'horizontal'` (50/50), `'auto'`, `'label-fill'`, `'input-fill'`, a ratio like `'xx xxxxx'`, or a per-breakpoint map (`{ default: 'vertical', md: 'xx xxxxx' }`)."},{"name":"legend","type":"string","required":true,"description":"Text content of the legend."},{"name":"legendMode","type":"\"outside\" | \"inside\" | undefined","required":false,"description":"Legend rendering mode. `'outside'` renders the legend above the fieldset in the normal flow; `'inside'` overlays the legend inside the fieldset border. Floating mode is not supported for radio groups."},{"name":"legendPosition","type":"\"left\" | \"center\" | \"right\" | undefined","required":false,"description":"Sets the text alignment of the label."},{"name":"listLayout","type":"ListLayout | undefined","required":false,"default":"'horizontal'","values":["horizontal","vertical","vertical-stretch","tiles"],"description":"How the rows sit in the list: `'horizontal'` (on a line, wrapping), `'vertical'` (stacked), `'vertical-stretch'` (stacked, as wide as the list) or `'tiles'` (equal boxes; `--tile-min-width` on `pt:list` sets the narrowest). Layout only: the cards are `pt` (guide § Radio cards)."},{"name":"loadingText","type":"string | undefined","required":false,"description":"String displayed while items are being loaded."},{"name":"modelValue","type":"any","required":false,"description":"Used by v-model. Can be any serializable type."},{"name":"modelValueDebounceTime","type":"number | undefined","required":false,"description":"Timeout used to debounce response to changes to modelValue."},{"name":"name","type":"string | undefined","required":false,"description":"Name of the option inputs. Optional: a generated one, unique per group and stable, groups them. Pass one only when a native (non-JS) form post must submit the value under a known key."},{"name":"persistentHint","type":"boolean | undefined","required":false,"default":"false","description":"Keeps the hint displayed."},{"name":"pt","type":"GroupPtMap<T> | undefined","required":false,"description":"Passthrough, object form: the same keys as the `pt:*` attributes without the prefix. See the `pt:<part>` row."},{"name":"pt:description","type":"PtValue | undefined","required":false},{"name":"pt:description:disabled","type":"PtValue | undefined","required":false},{"name":"pt:description:errors","type":"PtValue | undefined","required":false},{"name":"pt:description:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:description:loading","type":"PtValue | undefined","required":false},{"name":"pt:description:readonly","type":"PtValue | undefined","required":false},{"name":"pt:description:warnings","type":"PtValue | undefined","required":false},{"name":"pt:hint","type":"PtValue | undefined","required":false},{"name":"pt:hint:disabled","type":"PtValue | undefined","required":false},{"name":"pt:hint:errors","type":"PtValue | undefined","required":false},{"name":"pt:hint:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:hint:loading","type":"PtValue | undefined","required":false},{"name":"pt:hint:readonly","type":"PtValue | undefined","required":false},{"name":"pt:hint:warnings","type":"PtValue | undefined","required":false},{"name":"pt:icon","type":"PtValue | ((ctx: PtItemCtx<T, GroupPtState>) => PtItemResult) | undefined","required":false},{"name":"pt:icon:checked","type":"PtValue | undefined","required":false},{"name":"pt:icon:disabled","type":"PtValue | undefined","required":false},{"name":"pt:icon:errors","type":"PtValue | undefined","required":false},{"name":"pt:icon:focused","type":"PtValue | undefined","required":false},{"name":"pt:icon:focusVisible","type":"PtValue | undefined","required":false},{"name":"pt:icon:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:icon:loading","type":"PtValue | undefined","required":false},{"name":"pt:icon:readonly","type":"PtValue | undefined","required":false},{"name":"pt:icon:warnings","type":"PtValue | undefined","required":false},{"name":"pt:item","type":"PtValue | ((ctx: PtItemCtx<T, GroupPtState>) => PtItemResult) | undefined","required":false},{"name":"pt:item:checked","type":"PtValue | undefined","required":false},{"name":"pt:item:disabled","type":"PtValue | undefined","required":false},{"name":"pt:item:errors","type":"PtValue | undefined","required":false},{"name":"pt:item:focused","type":"PtValue | undefined","required":false},{"name":"pt:item:focusVisible","type":"PtValue | undefined","required":false},{"name":"pt:item:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:item:loading","type":"PtValue | undefined","required":false},{"name":"pt:item:readonly","type":"PtValue | undefined","required":false},{"name":"pt:item:warnings","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription","type":"PtValue | ((ctx: PtItemCtx<T, GroupPtState>) => PtItemResult) | undefined","required":false},{"name":"pt:itemDescription:checked","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription:disabled","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription:errors","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription:focused","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription:focusVisible","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription:loading","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription:readonly","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription:warnings","type":"PtValue | undefined","required":false},{"name":"pt:label","type":"PtValue | ((ctx: PtItemCtx<T, GroupPtState>) => PtItemResult) | undefined","required":false},{"name":"pt:label:checked","type":"PtValue | undefined","required":false},{"name":"pt:label:disabled","type":"PtValue | undefined","required":false},{"name":"pt:label:errors","type":"PtValue | undefined","required":false},{"name":"pt:label:focused","type":"PtValue | undefined","required":false},{"name":"pt:label:focusVisible","type":"PtValue | undefined","required":false},{"name":"pt:label:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:label:loading","type":"PtValue | undefined","required":false},{"name":"pt:label:readonly","type":"PtValue | undefined","required":false},{"name":"pt:label:warnings","type":"PtValue | undefined","required":false},{"name":"pt:legend","type":"PtValue | undefined","required":false},{"name":"pt:legend:disabled","type":"PtValue | undefined","required":false},{"name":"pt:legend:errors","type":"PtValue | undefined","required":false},{"name":"pt:legend:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:legend:loading","type":"PtValue | undefined","required":false},{"name":"pt:legend:readonly","type":"PtValue | undefined","required":false},{"name":"pt:legend:warnings","type":"PtValue | undefined","required":false},{"name":"pt:list","type":"PtValue | undefined","required":false},{"name":"pt:list:disabled","type":"PtValue | undefined","required":false},{"name":"pt:list:errors","type":"PtValue | undefined","required":false},{"name":"pt:list:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:list:loading","type":"PtValue | undefined","required":false},{"name":"pt:list:readonly","type":"PtValue | undefined","required":false},{"name":"pt:list:warnings","type":"PtValue | undefined","required":false},{"name":"pt:message","type":"PtValue | undefined","required":false},{"name":"pt:message:disabled","type":"PtValue | undefined","required":false},{"name":"pt:message:errors","type":"PtValue | undefined","required":false},{"name":"pt:message:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:message:loading","type":"PtValue | undefined","required":false},{"name":"pt:message:readonly","type":"PtValue | undefined","required":false},{"name":"pt:message:warnings","type":"PtValue | undefined","required":false},{"name":"pt:root","type":"PtValue | undefined","required":false},{"name":"pt:root:disabled","type":"PtValue | undefined","required":false},{"name":"pt:root:errors","type":"PtValue | undefined","required":false},{"name":"pt:root:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:root:loading","type":"PtValue | undefined","required":false},{"name":"pt:root:readonly","type":"PtValue | undefined","required":false},{"name":"pt:root:warnings","type":"PtValue | undefined","required":false},{"name":"readonly","type":"boolean | undefined","required":false,"default":"false","description":"Sets the input in a readonly state."},{"name":"required","type":"boolean | undefined","required":false,"default":"false","description":"Sets the input as required."},{"name":"reverse","type":"boolean | undefined","required":false,"default":"false","description":"Reverses the layout. Applicable in every direction the order of the label and the input is swapped."},{"name":"rules","type":"RuleExpression<any>","required":false,"description":"vee-validate rules for this field. Only inside a `BbForm`."},{"name":"selectable","type":"boolean | ((item: T) => boolean) | undefined","required":false,"default":"true","description":"Defines whether options are selectable. Can be a global boolean that affects all options or a function that accepts an item and returns a boolean that only affects that item. Non-selectable options are rendered disabled."},{"name":"validationLabel","type":"string | undefined","required":false,"description":"The field's name in validation messages (`{field}`): \"Email is not valid\". Defaults to the `label` (or `legend`), then \"This field\"; never the `name`. Set it when the label is hidden or reads badly in a sentence (icon-only, a question). `BbForm` only."},{"name":"validationMode","type":"ValidationMode | undefined","required":false,"values":["aggressive","balanced","lazy","submit-only","submit-live"],"description":"When the field validates: `aggressive` (each change), `balanced` (on leave, then live while in error), `lazy` (on leave), `submit-only`, `submit-live`. Unset: the `BbForm`'s `validation-mode`, then `formControls.validationMode` (`'balanced'`). `BbForm` only."},{"name":"warnings","type":"string | string[] | undefined","required":false,"description":"Warning messages under the field, a string or array: amber, in their own `aria-live` region and in the control's `aria-describedby` after the errors. Non-empty turns on the warning state; errors win when both are set."}],"events":[{"name":"active","signature":"(): void","description":"Emitted when the group becomes active (focus/click enters it)."},{"name":"blur","signature":"(event: FocusEvent): void","description":"Emitted when one of the generated radio inputs loses focus. Forwards the original DOM `FocusEvent`."},{"name":"change","signature":"(event: Event): void","description":"Emitted when a radio option is selected. Forwards the original DOM `Event` from the radio input."},{"name":"click","signature":"(event: MouseEvent): void","description":"Emitted when one of the generated radio inputs is clicked. Forwards the original DOM `MouseEvent`."},{"name":"focus","signature":"(event: FocusEvent): void","description":"Emitted when one of the generated radio inputs receives focus. Forwards the original DOM `FocusEvent`."},{"name":"inactive","signature":"(): void","description":"Emitted when focus/click moves outside the group after it was active. Useful for validation-on-blur flows at group level."},{"name":"input","signature":"(event: Event): void","description":"Emitted on native input events from generated radio inputs. Forwards the original DOM `Event`."},{"name":"keydown","signature":"(event: KeyboardEvent): void","description":"Emitted for keyboard interaction on generated radio inputs. Forwards the original DOM `KeyboardEvent`."},{"name":"mousedown","signature":"(event: MouseEvent): void","description":"Emitted when a pointing device button is pressed over a radio input. Forwards the original DOM `MouseEvent`."},{"name":"mouseup","signature":"(event: MouseEvent): void","description":"Emitted when a pointing device button is released over a radio input. Forwards the original DOM `MouseEvent`."},{"name":"update:modelValue","signature":"(value: any): void","description":"Emitted with the newly selected value when the selection changes."}],"slots":[{"name":"append","type":"object","description":"Content rendered after the last option, inside the options container."},{"name":"description","type":"BbRadioGroupDescriptionSlotProps","fields":["text: string","hasErrors: boolean","hasWarnings: boolean"],"description":"Replaces the description text. Provided alone (no `description` prop) it still renders the description region and wires it into `aria-describedby`."},{"name":"empty","type":"{ error: unknown; }","description":"Content shown when no options are available (replaces the default \"no data\" text). `error` is what the latest failed load rejected with, untouched, and `null` when nothing failed — a failed load clears the rows, so this slot is where it shows."},{"name":"icon","type":"BbRadioGroupIconSlotProps<T>","fields":["disabled: boolean","readonly: boolean","checked: boolean","focused: boolean","focusVisible: boolean","id: string","name: string","hasErrors: boolean","hasWarnings: boolean","parsedValue: string","value: any","item: T","text: string"],"description":"Replaces the default radio dot icon for each option. Receives the radio state plus the source item and its display text."},{"name":"label","type":"BbRadioGroupLabelSlotProps<T>","fields":["item: T","text: string","checked: boolean","description: string"],"description":"Replaces the default label text for each option."},{"name":"legend","type":"BbRadioGroupLegendSlotProps","fields":["showAsterisk?: boolean","text: string","hasErrors: boolean","hasWarnings: boolean"],"description":"Replaces the default fieldset legend text for the group."},{"name":"loading","type":"object","description":"Content shown while options are loading (replaces the default loading text)."},{"name":"prepend","type":"object","description":"Content rendered before the first option, inside the options container."}],"exposed":[],"models":[{"name":"modelValue","type":"any"}],"cssProps":[{"name":"--gap","value":"24px","selector":".bb-radio-group__list","description":"Space between rows on one line."},{"name":"--row-gap","value":"10px","selector":".bb-radio-group__list","description":"Space between wrapped lines."},{"name":"--tile-min-width","value":"96px","selector":".bb-radio-group__list","description":"How narrow a tile may get before the tiles wrap (`tiles` only)."}],"pt":{"parts":[{"name":"root","description":"The group's container (the fieldset)."},{"name":"legend","description":"The group's heading — the fieldset `<legend>` (the `legend` prop)."},{"name":"description","description":"The muted line under the legend (the `description` prop)."},{"name":"message","description":"The errors / warnings line. A node of its own: it can show at the same time as `hint`."},{"name":"hint","description":"The helper line (the `hint` prop), shown on focus, or always with `persistent-hint`."},{"name":"list","description":"The node that lays the rows out (flex + wrap, gaps on `--gap` / `--row-gap`): `pt:list=\"grid grid-cols-3\"` re-lays them, `pt:list=\"[--gap:8px]\"` tightens them. Takes the group-wide states only."},{"name":"item","description":"One option row — a broadcast, resolved per option with its own `checked` / `disabled` / focus. Takes a per-item function."},{"name":"icon","description":"One row's drawn glyph — the default one: a consumer `icon` slot replaces it. Takes a per-item function."},{"name":"label","description":"One option's label text (the `label` slot's default). Takes a per-item function."},{"name":"itemDescription","description":"One option's muted second line, its description. Takes a per-item function."}],"states":[{"name":"hasValue","description":"Component-wide: at least one option is chosen."},{"name":"checked","description":"Per row, on `item`, `icon`, `label` and `itemDescription`: that option is chosen. Never on a field part."},{"name":"readonly","description":"Component-wide: the group is `readonly`."},{"name":"disabled","description":"Component-wide while the group is `disabled`; also per row, on the row parts of an option that is disabled on its own."},{"name":"warnings","description":"Component-wide: the group shows warnings and no errors."},{"name":"errors","description":"Component-wide: the group shows errors."},{"name":"focused","description":"Per row, on the row parts: that option's input has focus — any focus, mouse included."},{"name":"focusVisible","description":"Per row, on the row parts: that option's focus is keyboard-visible — where a focus ring belongs."},{"name":"loading","description":"Component-wide: the items are being fetched."}]},"tree":{"bindings":[{"part":"icon","target":"BbBaseRadioIcon"}],"nodes":[{"name":"CommonField","kind":"internal","vocabulary":"BbRadioGroup","bindings":[{"part":"root","target":"div.bb-field"},{"part":"label","target":"component"},{"part":"description","target":"span.bb-field__description"},{"part":"hint","target":"span.bb-field__hint"},{"part":"counter","target":"span.bb-field__counter"},{"part":"message","target":"div.bb-field__message"}],"cssProps":[{"name":"--ctrl-line","documented":true,"readBy":["bb-field__label","bb-field__input-wrapper"]}],"children":[{"name":"BbAsterisk","kind":"public"}]},{"name":"OptionsContainer","kind":"internal","vocabulary":"BbRadioGroup","bindings":[{"part":"list","target":"span"},{"part":"item","target":"label"},{"part":"label","target":"span"},{"part":"itemDescription","target":"span"}]},{"name":"BbBaseRadioIcon","kind":"public","cssProps":[{"name":"--accent","documented":false,"readBy":["bb-base-radio-icon","bb-base-radio-icon--errors","bb-base-radio-icon--warnings","bb-base-radio-icon--disabled"]},{"name":"--size","documented":false,"readBy":["bb-base-radio-icon"]},{"name":"--space","documented":false,"readBy":["bb-base-radio-icon"]},{"name":"--ring-color","documented":false,"readBy":["bb-base-radio-icon--focus-visible"]},{"name":"--elev","documented":true,"readBy":["bb-base-radio-icon","bb-base-radio-icon--focus-visible"]},{"name":"--bg","documented":true,"readBy":["bb-base-radio-icon"]},{"name":"--border-color","documented":false,"readBy":["bb-base-radio-icon"]}]}]},"css":{"classes":{"bb-radio-group":["","__empty","__item","__item--*","__item--aligned","__item--description","__item--disabled","__item--focus-visible","__item--focused","__item--input-align-*","__item--input-align-bottom","__item--input-align-center","__item--input-align-top","__item--label-align-*","__item--label-align-bottom","__item--label-align-center","__item--label-align-top","__item--reverse","__item--selected","__item--vertical","__item-description","__label","__list","__list--*","__list--errors","__list--tiles","__list--warnings","__loading"]},"locals":["--color-gray-200","--gap","--hit","--ly-lj","--ly-ls","--ly-x","--row-gap","--size","--tap-row-gap","--tile-min-width"]},"attrTargets":["div"],"removed":[{"name":"color","new":null,"since":"3.0.0-beta.15","migration":"ai/guides/migration/components/bb-checkbox-group.md","silent":true,"fix":{"kind":"manual"}},{"name":"labelPosition","new":"legendPosition","since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-checkbox-group.md","silent":true,"fix":{"kind":"rename"}},{"name":"hasWarning","new":"hasWarnings","since":"3.0.0-beta.26","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"rename"}},{"name":"direction","new":"layout","since":"3.0.0-beta.33","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"rename"}},{"name":"inputDirection","new":"listLayout","since":"3.0.0-beta.33","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"rename","valueMap":{"horizontal":"horizontal","vertical":"vertical-stretch"}}},{"name":"noDataText","new":"emptyText","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"rename"}},{"name":"no-data","new":"empty","surface":"slot","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"rename"}},{"name":"vid","new":null,"hint":"a display name (v2: `vid=\"Email address\"`) is now `validation-label`; a field path (3.0 betas: `vid=\"address.city\"`) is now `name` (brackets for a native post: `address[city]`). `check --fix` picks by the value","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"byValue","display":"validationLabel","key":"name"}},{"name":"validateOn","new":"validationMode","hint":"an array of events became one mode (`aggressive` | `balanced` | `lazy` | `submit-only` | `submit-live`). The old defaults (`['blur']`, `['inactive']`, a toggle's `['update:modelValue', 'change', 'blur']`) are `balanced`, the new default: delete the prop. A text field on `['update:modelValue']` is `validation-mode=\"aggressive\"`. Set it once on `<BbForm validation-mode>` instead of per field","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"manual"}}],"renamed":[{"from":"labelPosition","to":"legendPosition","since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-checkbox-group.md","fix":{"kind":"rename"}},{"from":"hasWarning","to":"hasWarnings","since":"3.0.0-beta.26","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"rename"}},{"from":"direction","to":"layout","since":"3.0.0-beta.33","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"rename"}},{"from":"inputDirection","to":"listLayout","since":"3.0.0-beta.33","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"rename","valueMap":{"horizontal":"horizontal","vertical":"vertical-stretch"}}},{"from":"noDataText","to":"emptyText","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"rename"}},{"from":"no-data","to":"empty","surface":"slot","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"rename"}},{"from":"validateOn","to":"validationMode","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"manual"}}]},
536
536
  {"name":"BbRating","group":"Selection","description":"Collects scalar ratings through interactive icons.","referenceOnly":false,"hasGuide":true,"contract":"ai/BbRating.md","source":"ai/source/BbRating.md","props":[{"name":"autofocus","type":"Booleanish | undefined","required":false,"description":"Focuses the field when it mounts (a dialog already open included), unless the user is typing in another field."},{"name":"clearable","type":"boolean | undefined","required":false,"default":"false","description":"Allows clearing the selected rating by clicking the current value."},{"name":"compact","type":"boolean | undefined","required":false,"default":"false","description":"Compact density. Swaps `--bb-label-spacing-y` for `--bb-label-spacing-y-compact`, so tune a compact group's label gap with the `-compact` token, not the base one."},{"name":"description","type":"string | undefined","required":false,"description":"Text between the label and the input. Unlike the hint it is always visible; it joins the input's `aria-describedby` after any `errors` / `warnings`, before the `hint`."},{"name":"disabled","type":"boolean | undefined","required":false,"default":"false","description":"Disables the component."},{"name":"errors","type":"string | string[] | undefined","required":false,"description":"Error messages under the field, a string or array, in an `aria-live=\"polite\"` region and first in the control's `aria-describedby`, so they are re-read when it regains focus."},{"name":"formless","type":"boolean | undefined","required":false,"default":"false","description":"Keep this control out of the enclosing `BbForm` entirely: not submitted, not dirty, not reset, not validated. For a control that is not form data (a filter, a \"show advanced\" switch)."},{"name":"hasErrors","type":"boolean | undefined","required":false,"default":"false","description":"Define if the component should be in an error state. It usually attaches a CSS class for styling purposes."},{"name":"hasWarnings","type":"boolean | undefined","required":false,"default":"false","description":"Define if the component should be in a warning state. Same chrome as errors with `--bb-warn`; errors take priority."},{"name":"hideLegend","type":"boolean | undefined","required":false,"default":"false","description":"Visually hides the legend of the fieldset while maintaining accessibility."},{"name":"hint","type":"string | undefined","required":false,"description":"Text box to be displayed near the input, usually to indicate instructions."},{"name":"id","type":"string | undefined","required":false,"description":"Prefix for the ids of each option's input and of the label, description and message. Generated when omitted."},{"name":"inputAlign","type":"FieldCrossAlign | undefined","required":false,"values":["top","center","bottom"],"description":"Vertical position of the control in a side-by-side row; not `inputPosition`, the horizontal one. Omitted, the control's first line meets the label's."},{"name":"inputPosition","type":"\"left\" | \"center\" | \"right\" | undefined","required":false,"default":"\"left\"","description":"Sets the alignment of the input. Since inputs are inline block they can be aligned just as text can."},{"name":"labelAlign","type":"FieldCrossAlign | undefined","required":false,"values":["top","center","bottom"],"description":"Vertical position of the label block in a side-by-side row; not `labelPosition`, the horizontal one. Omitted, the label's first line meets the control's."},{"name":"layout","type":"Responsive<FieldLayout> | undefined","required":false,"description":"How label and input sit together: `'vertical'`, `'horizontal'` (50/50), `'auto'`, `'label-fill'`, `'input-fill'`, a ratio like `'xx xxxxx'`, or a per-breakpoint map (`{ default: 'vertical', md: 'xx xxxxx' }`)."},{"name":"legend","type":"string","required":true,"description":"Text content of the legend."},{"name":"legendMode","type":"\"outside\" | \"inside\" | undefined","required":false,"description":"Legend rendering mode. `'outside'` renders the legend above the fieldset in the normal flow; `'inside'` overlays the legend inside the fieldset border. Floating mode is not supported for rating groups."},{"name":"legendPosition","type":"\"left\" | \"center\" | \"right\" | undefined","required":false,"description":"Sets the text alignment of the legend."},{"name":"modelValue","type":"number | null | undefined","required":false,"description":"Used by v-model."},{"name":"name","type":"string | undefined","required":false,"description":"Name of the star radio inputs. Optional: the stars live in one component instance, so an omitted name falls back to a generated one that groups them correctly. Pass one only when a native (non-JS) form post must submit the value under a known key."},{"name":"persistentHint","type":"boolean | undefined","required":false,"default":"false","description":"Keeps the hint displayed."},{"name":"pt","type":"PtMap<BbRatingPtPart, BbRatingPtState> | undefined","required":false,"description":"Passthrough, object form: the same keys as the `pt:*` attributes without the prefix. See the `pt:<part>` row."},{"name":"pt:description","type":"PtValue | undefined","required":false},{"name":"pt:description:disabled","type":"PtValue | undefined","required":false},{"name":"pt:description:errors","type":"PtValue | undefined","required":false},{"name":"pt:description:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:description:readonly","type":"PtValue | undefined","required":false},{"name":"pt:description:selected","type":"PtValue | undefined","required":false},{"name":"pt:description:warnings","type":"PtValue | undefined","required":false},{"name":"pt:hint","type":"PtValue | undefined","required":false},{"name":"pt:hint:disabled","type":"PtValue | undefined","required":false},{"name":"pt:hint:errors","type":"PtValue | undefined","required":false},{"name":"pt:hint:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:hint:readonly","type":"PtValue | undefined","required":false},{"name":"pt:hint:selected","type":"PtValue | undefined","required":false},{"name":"pt:hint:warnings","type":"PtValue | undefined","required":false},{"name":"pt:item","type":"PtValue | undefined","required":false},{"name":"pt:item:disabled","type":"PtValue | undefined","required":false},{"name":"pt:item:errors","type":"PtValue | undefined","required":false},{"name":"pt:item:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:item:readonly","type":"PtValue | undefined","required":false},{"name":"pt:item:selected","type":"PtValue | undefined","required":false},{"name":"pt:item:warnings","type":"PtValue | undefined","required":false},{"name":"pt:label","type":"PtValue | undefined","required":false},{"name":"pt:label:disabled","type":"PtValue | undefined","required":false},{"name":"pt:label:errors","type":"PtValue | undefined","required":false},{"name":"pt:label:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:label:readonly","type":"PtValue | undefined","required":false},{"name":"pt:label:selected","type":"PtValue | undefined","required":false},{"name":"pt:label:warnings","type":"PtValue | undefined","required":false},{"name":"pt:message","type":"PtValue | undefined","required":false},{"name":"pt:message:disabled","type":"PtValue | undefined","required":false},{"name":"pt:message:errors","type":"PtValue | undefined","required":false},{"name":"pt:message:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:message:readonly","type":"PtValue | undefined","required":false},{"name":"pt:message:selected","type":"PtValue | undefined","required":false},{"name":"pt:message:warnings","type":"PtValue | undefined","required":false},{"name":"pt:root","type":"PtValue | undefined","required":false},{"name":"pt:root:disabled","type":"PtValue | undefined","required":false},{"name":"pt:root:errors","type":"PtValue | undefined","required":false},{"name":"pt:root:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:root:readonly","type":"PtValue | undefined","required":false},{"name":"pt:root:selected","type":"PtValue | undefined","required":false},{"name":"pt:root:warnings","type":"PtValue | undefined","required":false},{"name":"readonly","type":"boolean | undefined","required":false,"default":"false","description":"Sets the input in a readonly state."},{"name":"required","type":"boolean | undefined","required":false,"default":"false","description":"Sets the input as required."},{"name":"reverse","type":"boolean | undefined","required":false,"default":"false","description":"Reverses the layout. Applicable in every direction the order of the label and the input is swapped."},{"name":"rules","type":"RuleExpression<number | null>","required":false,"description":"vee-validate rules for this field. Only inside a `BbForm`."},{"name":"size","type":"number | CssSize | keyof Sizes | undefined","required":false,"default":"'md'","description":"Defines the component size.\n\nAccepted values:\n- A key from the provided size map (`keyof T`), e.g. `'sm' | 'md' | 'lg'`\n- A custom CSS size string (e.g. `'20px'`, `'1.5rem'`, `'2em'`)\n- A number, typically interpreted as pixels by size parsers"},{"name":"stars","type":"number | undefined","required":false,"default":"5","description":"Maximum number of stars to render and maximum value of the component."},{"name":"validationLabel","type":"string | undefined","required":false,"description":"The field's name in validation messages (`{field}`): \"Email is not valid\". Defaults to the `label` (or `legend`), then \"This field\"; never the `name`. Set it when the label is hidden or reads badly in a sentence (icon-only, a question). `BbForm` only."},{"name":"validationMode","type":"ValidationMode | undefined","required":false,"values":["aggressive","balanced","lazy","submit-only","submit-live"],"description":"When the field validates: `aggressive` (each change), `balanced` (on leave, then live while in error), `lazy` (on leave), `submit-only`, `submit-live`. Unset: the `BbForm`'s `validation-mode`, then `formControls.validationMode` (`'balanced'`). `BbForm` only."},{"name":"warnings","type":"string | string[] | undefined","required":false,"description":"Warning messages under the field, a string or array: amber, in their own `aria-live` region and in the control's `aria-describedby` after the errors. Non-empty turns on the warning state; errors win when both are set."}],"events":[{"name":"active","signature":"(): void","description":"Emitted when the rating becomes active (focus/click enters it)."},{"name":"blur","signature":"(event: FocusEvent): void","description":"Emitted when a star input loses focus. Forwards the original DOM `FocusEvent`."},{"name":"change","signature":"(event: Event): void","description":"Emitted when the selected rating changes. Forwards the original DOM `Event`."},{"name":"click","signature":"(event: MouseEvent): void","description":"Emitted when a star input receives a click. Forwards the original DOM `MouseEvent`."},{"name":"focus","signature":"(event: FocusEvent): void","description":"Emitted when a star input gains focus. Forwards the original DOM `FocusEvent`."},{"name":"inactive","signature":"(): void","description":"Emitted when focus/click moves outside the rating after it was active."},{"name":"input","signature":"(event: Event): void","description":"Emitted on native input events from the star inputs. Forwards the original DOM `Event`."},{"name":"keydown","signature":"(event: KeyboardEvent): void","description":"Emitted for keyboard interaction on a star input. Forwards the original DOM `KeyboardEvent`."},{"name":"mousedown","signature":"(event: MouseEvent): void","description":"Emitted when a pointing device button is pressed over a star input. Forwards the original DOM `MouseEvent`."},{"name":"mouseup","signature":"(event: MouseEvent): void","description":"Emitted when a pointing device button is released over a star input. Forwards the original DOM `MouseEvent`."},{"name":"update:modelValue","signature":"(value: number | null): void","description":"Emitted with the selected rating (1 to `stars`) when clicked. Emits `null` only when `clearable` is enabled and the already-selected star is clicked."}],"slots":[{"name":"append","type":"object","description":"Content rendered after the row of rating stars."},{"name":"description","type":"BbRatingDescriptionSlotProps","fields":["text: string","hasErrors: boolean","hasWarnings: boolean"],"description":"Replaces the description text. Provided alone (no `description` prop) it still renders the description region and wires it into `aria-describedby`."},{"name":"icon","type":"BbRatingIconSlotProps","fields":["checked: boolean","disabled: boolean","id?: string","size: CssSize","value: number"],"description":"Replaces the default star SVG for each rating option."},{"name":"legend","type":"BbRatingLegendSlotProps","fields":["showAsterisk?: boolean","text: string","hasErrors: boolean","hasWarnings: boolean"],"description":"Replaces the default fieldset legend text rendered above the rating stars."},{"name":"prepend","type":"object","description":"Content rendered before the row of rating stars."}],"exposed":[],"models":[{"name":"modelValue","type":"number | null | undefined"}],"cssProps":[{"name":"--accent","value":"var(--bb-primary)","selector":".bb-rating","description":"a filled star, and the hover preview"},{"name":"--empty","value":"var(--bb-panel)","selector":".bb-rating","description":"an unfilled star"},{"name":"--border-color","value":"var(--bb-text-faint)","selector":".bb-rating","description":"Every star's outline. `--bb-text-faint`, not `--bb-border` (Q56.21b): an empty star is `--empty` (the panel) inside it, so the outline alone draws the star, and a hairline read ~1.5:1 — under 3:1 in both schemes."},{"name":"--space","value":"0px","selector":".bb-rating","description":"Gap between stars. On the root (Q56.21a) so `pt:root` reaches it; the star row inherits it. Named `--space`, not `--spacing`: Tailwind v4 builds its whole spacing scale on a variable of that name, and a local of the same name zeroed every spacing utility used inside the slots."},{"name":"--ring-color","value":"var(--bb-ring)","selector":".bb-rating__stars","description":"focus ring around the focused star"},{"name":"--size","value":"24px","selector":".bb-rating__stars","description":"one star's box; overridden inline from the `size` prop"}],"pt":{"parts":[{"name":"root","description":"The rating's container: the legend, the stars and the lines under them."},{"name":"label","description":"The rating's name — the fieldset `<legend>`, from the `legend` prop (the part keeps the family's word)."},{"name":"description","description":"The muted line under the legend (the `description` prop)."},{"name":"message","description":"The errors / warnings line. A node of its own: it can show at the same time as `hint`."},{"name":"hint","description":"The helper line (the `hint` prop)."},{"name":"item","description":"One star, the choice you click: the hidden radio, its screen-reader text and the glyph — a broadcast resolved per star. The hook for the hit area, the focus ring, spacing and the disabled cursor. NOT for colour: a `text-*` class here freezes the hover preview and the error tint; set `--accent` / `--empty` / `--border-color` on `root`. The glyph has no part of its own (dropped 2026-09-23, before any release): its size is the `size` prop, its colour the variables."}],"states":[{"name":"hasValue","description":"Component-wide: a rating is set."},{"name":"selected","description":"Per node, on `item`: a filled star."},{"name":"readonly","description":"Component-wide: the rating is `readonly`."},{"name":"disabled","description":"Component-wide while the rating is `disabled`; also per node, on `item`: a star that cannot be picked."},{"name":"warnings","description":"Component-wide: the rating shows warnings and no errors."},{"name":"errors","description":"Component-wide: the rating shows errors."}]},"tree":{"bindings":[{"part":"item","target":"label.bb-rating__item"}],"nodes":[{"name":"BbIcon","kind":"public","cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"CommonField","kind":"internal","vocabulary":"BbRating","bindings":[{"part":"root","target":"div.bb-field"},{"part":"label","target":"component"},{"part":"description","target":"span.bb-field__description"},{"part":"hint","target":"span.bb-field__hint"},{"part":"counter","target":"span.bb-field__counter"},{"part":"message","target":"div.bb-field__message"}],"cssProps":[{"name":"--ctrl-line","documented":true,"readBy":["bb-field__label","bb-field__input-wrapper"]}],"children":[{"name":"BbAsterisk","kind":"public"}]}]},"css":{"classes":{"bb-rating":["","__icon","__item","__item--disabled","__item--empty","__item--filled","__item--readonly","__label-text","__options","__stars","__stars--disabled","__stars--errors","__stars--forced-clear","__stars--has-value","__stars--readonly","__stars--warnings"]},"locals":["--accent","--bg","--border-color","--color-gray-200","--empty","--hit","--ly-lj","--ly-x","--ring-color","--size","--space","--star-size","--tap-gap"]},"attrTargets":["div"],"removed":[{"name":"color","new":null,"since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-rating.md","silent":true,"fix":{"kind":"manual"}},{"name":"hasWarning","new":"hasWarnings","since":"3.0.0-beta.26","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"rename"}},{"name":"direction","new":"layout","since":"3.0.0-beta.33","migration":"ai/guides/migration/components/bb-rating.md","silent":true,"fix":{"kind":"rename"}},{"name":"vid","new":null,"hint":"a display name (v2: `vid=\"Email address\"`) is now `validation-label`; a field path (3.0 betas: `vid=\"address.city\"`) is now `name` (brackets for a native post: `address[city]`). `check --fix` picks by the value","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"byValue","display":"validationLabel","key":"name"}},{"name":"validateOn","new":"validationMode","hint":"an array of events became one mode (`aggressive` | `balanced` | `lazy` | `submit-only` | `submit-live`). The old defaults (`['blur']`, `['inactive']`, a toggle's `['update:modelValue', 'change', 'blur']`) are `balanced`, the new default: delete the prop. A text field on `['update:modelValue']` is `validation-mode=\"aggressive\"`. Set it once on `<BbForm validation-mode>` instead of per field","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"manual"}}],"renamed":[{"from":"hasWarning","to":"hasWarnings","since":"3.0.0-beta.26","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"rename"}},{"from":"direction","to":"layout","since":"3.0.0-beta.33","migration":"ai/guides/migration/components/bb-rating.md","fix":{"kind":"rename"}},{"from":"validateOn","to":"validationMode","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"manual"}}]},
537
537
  {"name":"BbSelect","group":"Selection","description":"Selects one or many options from structured data.","referenceOnly":false,"hasGuide":true,"contract":"ai/BbSelect.md","source":"ai/source/BbSelect.md","props":[{"name":"adaptive","type":"boolean | undefined","required":false,"default":"`config.adaptive` (`true`)","description":"When `true`, the options panel opens as a bottom off-canvas sheet on mobile viewports instead of a floating popover; on desktop it stays a popover.\n\nWhen unset, falls back to the global `config.adaptive`."},{"name":"append:icon","type":"string | undefined","required":false,"default":"the chevron-down glyph","description":"Name of the icon to be added at the end of the input."},{"name":"autocomplete","type":"string | undefined","required":false,"description":"Guides to the browser as to the type of information expected in the field."},{"name":"autofocus","type":"Booleanish | undefined","required":false,"description":"Focuses the field when it mounts (a dialog already open included), unless the user is typing in another field."},{"name":"clearable","type":"boolean | undefined","required":false,"default":"false","description":"Displays a clear button when the input has a value and is being interacted with."},{"name":"comma","type":"boolean | undefined","required":false,"default":"false","description":"Sets the display model for selected values to a list of comma separated string. In this mode the user cannot deselect an option by pressing the close button."},{"name":"compact","type":"boolean | undefined","required":false,"default":"false","description":"Compact density: the field uses the `-compact` twins of `--bb-input-h`, `--bb-input-py` and `--bb-label-spacing-y`, so a `--bb-input-h` set on the component is ignored while it is on. Size a compact field with `--bb-input-h-compact` (and `--bb-input-py-compact`)."},{"name":"dependencies","type":"unknown[] | undefined","required":false,"description":"Defines an array of dependencies that will trigger actions in the component upon change."},{"name":"depsDebounceTime","type":"number | undefined","required":false,"default":"0","description":"Timeout used to debounce response to changes to dependencies."},{"name":"description","type":"string | undefined","required":false,"description":"Text between the label and the input. Unlike the hint it is always visible; it joins the input's `aria-describedby` after any `errors` / `warnings`, before the `hint`."},{"name":"disabled","type":"boolean | undefined","required":false,"default":"false","description":"Disables the component."},{"name":"disableWriting","type":"boolean | \"auto\" | \"mobile\" | \"desktop\" | undefined","required":false,"default":"'auto'","description":"Hides the panel's search field: `true` everywhere, `'mobile'` / `'desktop'` on that platform only. `'auto'` hides it, per open, for an array `items` shorter than the plugin's `autoDisableWritingThreshold` (6); never for a provider or with an `option:add` listener."},{"name":"emptyText","type":"string | undefined","required":false,"description":"String displayed when there are no items to display."},{"name":"enforceCoherence","type":"boolean | undefined","required":false,"default":"false","description":"After every successful load that is not a search, removes the picks the fetched rows do not contain (a single model resets to `null`). A `stash` does not count, `known-items` vouch until a parent change; a search or a failed load never prunes."},{"name":"errors","type":"string | string[] | undefined","required":false,"description":"Error messages under the field, a string or array, in an `aria-live=\"polite\"` region and first in the control's `aria-describedby`, so they are re-read when it regains focus."},{"name":"failedText","type":"string | undefined","required":false,"default":"the localized `common.failedText` (\"Couldn't load items\")","description":"String displayed in the empty state while the latest load FAILED (the provider threw): the twin of `emptyText` for that case."},{"name":"filterBy","type":"false | string[] | undefined","required":false,"default":"[]","description":"What typing filters on: empty = the display text and description; item paths = those fields (`['name', 'email']`); `false` = no filtering. Use `false` when the provider matched the query on the server, or its email/accent matches show as \"No results\"."},{"name":"formless","type":"boolean | undefined","required":false,"default":"false","description":"Keep this control out of the enclosing `BbForm` entirely: not submitted, not dirty, not reset, not validated. For a control that is not form data (a filter, a \"show advanced\" switch)."},{"name":"groupBy","type":"string | ((item: T) => string | number | symbol) | undefined","required":false,"description":"Path to item property for grouping options."},{"name":"hasErrors","type":"boolean | undefined","required":false,"default":"false","description":"Define if the component should be in an error state. It usually attaches a CSS class for styling purposes."},{"name":"hasWarnings","type":"boolean | undefined","required":false,"default":"false","description":"Define if the component should be in a warning state. Same chrome as errors with `--bb-warn`; errors take priority."},{"name":"headerHeight","type":"number | undefined","required":false,"description":"Height of group headers in the listbox (px). Defaults to 32px (24px compact; 36px / 32px on mobile viewports). Only applies when `groupBy` is set. An explicit value wins on every viewport."},{"name":"hideLabel","type":"boolean | undefined","required":false,"default":"false","description":"Visually hides the label of the input while maintaining accessibility."},{"name":"hint","type":"string | undefined","required":false,"description":"Text box to be displayed near the input, usually to indicate instructions."},{"name":"id","type":"string | undefined","required":false,"description":"The `id` of the native control; the label's `for` and the description and message ids derive from it. Generated when omitted."},{"name":"inputAlign","type":"FieldCrossAlign | undefined","required":false,"values":["top","center","bottom"],"description":"Vertical position of the control in a side-by-side row; not `inputPosition`, the horizontal one. Omitted, the control's first line meets the label's."},{"name":"itemHeight","type":"number | undefined","required":false,"default":"28","description":"Height of the options in the listbox (px). Defaults to 28px (24px compact; 44px / 36px on mobile viewports). An explicit value wins on every viewport."},{"name":"itemProps","type":"BbSelectItemProps<T> | undefined","required":false,"description":"ADDITIONAL row fields, never the text or value: `description` (a muted line under the label), `prepend:icon`, `append:icon`. An object of paths or getters per field, or a function of the item. Nothing is read implicitly; none shows in the trigger or the chips."},{"name":"items","type":"T[] | ((context: BbSelectItemsContext) => T[] | Promise<T[]>)","required":true,"description":"The options: an array, or a provider called with a `BbSelectItemsContext` (`query`, `reason`, `modelValue`, `signal`), sync or async. Branch on `reason !== 'search'` to resolve the selection by id. A provider fails by THROWING, never by returning `[]`."},{"name":"itemText","type":"ItemAccessor<T, string> | undefined","required":false,"default":"own `label`, else `text`, else `JSON.stringify(item)`","description":"Defines a path that returns a property of the object to use as text or a function that returns a string.\n\nUnset: own `label`, else `text` (`{ label, value }` needs no accessor)."},{"name":"itemValue","type":"ItemAccessor<T> | undefined","required":false,"default":"own `value`, else the whole item","description":"Defines a path that returns a property of the object to use as value or a function that returns any value.\n\nUnset: own `value`, even `null`."},{"name":"knownItems","type":"(BbSelectKnownItem | null | undefined)[] | undefined","required":false,"description":"`{ value, label }` rows naming the value the app already holds, whatever the options' shape: no request until the first open (`prefill: true` still loads). Not options; the options' accessors never run on them; slots get the row as `item` until the list brings its own."},{"name":"label","type":"string","required":true,"description":"Text content of the label of the element."},{"name":"labelAlign","type":"FieldCrossAlign | undefined","required":false,"values":["top","center","bottom"],"description":"Vertical position of the label block in a side-by-side row; not `labelPosition`, the horizontal one. Omitted, the label's first line meets the control's."},{"name":"labelMode","type":"\"outside\" | \"floating\" | \"inside\" | undefined","required":false,"description":"Label rendering mode."},{"name":"labelPosition","type":"\"left\" | \"center\" | \"right\" | undefined","required":false,"description":"Sets the text alignment of the label."},{"name":"layout","type":"Responsive<FieldLayout> | undefined","required":false,"description":"How label and input sit together: `'vertical'`, `'horizontal'` (50/50), `'auto'`, `'label-fill'`, `'input-fill'`, a ratio like `'xx xxxxx'`, or a per-breakpoint map (`{ default: 'vertical', md: 'xx xxxxx' }`)."},{"name":"loading","type":"boolean | undefined","required":false,"default":"false","description":"Sets the component in a loading state, usually triggering some visual styles."},{"name":"loadingText","type":"string | undefined","required":false,"description":"String displayed while items are being loaded."},{"name":"max","type":"number | undefined","required":false,"description":"Maximum number of selectable items when the multiple flag is set."},{"name":"maxSelectedLabels","type":"number | undefined","required":false,"default":"Infinity","description":"Maximum number of labels shown before collapsing to a count summary. Unset, the labels collapse only when they overflow the field."},{"name":"modelValue","type":"any","required":false,"description":"Used by v-model. Can be any serializable type."},{"name":"modelValueDebounceTime","type":"number | undefined","required":false,"default":"0","description":"Timeout used to debounce response to changes to modelValue."},{"name":"multiple","type":"boolean | undefined","required":false,"default":"false","description":"Allows the selection of multiple items."},{"name":"name","type":"string | undefined","required":false,"description":"Defines the name of the input."},{"name":"offCanvasProps","type":"Partial<BbOffCanvasProps> | undefined","required":false,"description":"Props for the phone sheet (the `BbOffCanvas` that `adaptive` renders on mobile), spread over its defaults. A `pt` inside it styles only the sheet (passthrough guide § Inside the sheet)."},{"name":"persistentHint","type":"boolean | undefined","required":false,"default":"false","description":"Keeps the hint displayed."},{"name":"placeholder","type":"string | undefined","required":false,"description":"Text shown in the field while nothing is picked (an empty list has `emptyText`)."},{"name":"prefill","type":"boolean | \"interaction\" | undefined","required":false,"default":"'interaction'","description":"When the options first load: `'interaction'` on first open, `true` on mount, `false` only once the user types (on open with `disable-writing`). An array `items` or a seeded model always loads at once."},{"name":"prepend:icon","type":"string | undefined","required":false,"description":"Name of the icon to be added at the start of the input."},{"name":"pt","type":"PtItemMap<BbSelectPtPart, BbSelectOptionPtPart, BbSelectPtState, T> | undefined","required":false,"description":"Passthrough, object form: the same keys as the `pt:*` attributes without the prefix. See the `pt:<part>` row."},{"name":"pt:activator","type":"PtValue | undefined","required":false},{"name":"pt:activator:disabled","type":"PtValue | undefined","required":false},{"name":"pt:activator:errors","type":"PtValue | undefined","required":false},{"name":"pt:activator:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:activator:loading","type":"PtValue | undefined","required":false},{"name":"pt:activator:open","type":"PtValue | undefined","required":false},{"name":"pt:activator:readonly","type":"PtValue | undefined","required":false},{"name":"pt:activator:selected","type":"PtValue | undefined","required":false},{"name":"pt:activator:warnings","type":"PtValue | undefined","required":false},{"name":"pt:badge","type":"PtValue | ((ctx: PtItemCtx<T, BbSelectPtState>) => PtItemResult) | undefined","required":false},{"name":"pt:badge:disabled","type":"PtValue | undefined","required":false},{"name":"pt:badge:errors","type":"PtValue | undefined","required":false},{"name":"pt:badge:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:badge:loading","type":"PtValue | undefined","required":false},{"name":"pt:badge:open","type":"PtValue | undefined","required":false},{"name":"pt:badge:readonly","type":"PtValue | undefined","required":false},{"name":"pt:badge:selected","type":"PtValue | undefined","required":false},{"name":"pt:badge:warnings","type":"PtValue | undefined","required":false},{"name":"pt:box","type":"PtValue | undefined","required":false},{"name":"pt:box:disabled","type":"PtValue | undefined","required":false},{"name":"pt:box:errors","type":"PtValue | undefined","required":false},{"name":"pt:box:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:box:loading","type":"PtValue | undefined","required":false},{"name":"pt:box:open","type":"PtValue | undefined","required":false},{"name":"pt:box:readonly","type":"PtValue | undefined","required":false},{"name":"pt:box:selected","type":"PtValue | undefined","required":false},{"name":"pt:box:warnings","type":"PtValue | undefined","required":false},{"name":"pt:clear","type":"PtValue | undefined","required":false},{"name":"pt:clear:disabled","type":"PtValue | undefined","required":false},{"name":"pt:clear:errors","type":"PtValue | undefined","required":false},{"name":"pt:clear:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:clear:loading","type":"PtValue | undefined","required":false},{"name":"pt:clear:open","type":"PtValue | undefined","required":false},{"name":"pt:clear:readonly","type":"PtValue | undefined","required":false},{"name":"pt:clear:selected","type":"PtValue | undefined","required":false},{"name":"pt:clear:warnings","type":"PtValue | undefined","required":false},{"name":"pt:comma","type":"PtValue | ((ctx: PtItemCtx<T, BbSelectPtState>) => PtItemResult) | undefined","required":false},{"name":"pt:comma:disabled","type":"PtValue | undefined","required":false},{"name":"pt:comma:errors","type":"PtValue | undefined","required":false},{"name":"pt:comma:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:comma:loading","type":"PtValue | undefined","required":false},{"name":"pt:comma:open","type":"PtValue | undefined","required":false},{"name":"pt:comma:readonly","type":"PtValue | undefined","required":false},{"name":"pt:comma:selected","type":"PtValue | undefined","required":false},{"name":"pt:comma:warnings","type":"PtValue | undefined","required":false},{"name":"pt:description","type":"PtValue | undefined","required":false},{"name":"pt:description:disabled","type":"PtValue | undefined","required":false},{"name":"pt:description:errors","type":"PtValue | undefined","required":false},{"name":"pt:description:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:description:loading","type":"PtValue | undefined","required":false},{"name":"pt:description:open","type":"PtValue | undefined","required":false},{"name":"pt:description:readonly","type":"PtValue | undefined","required":false},{"name":"pt:description:selected","type":"PtValue | undefined","required":false},{"name":"pt:description:warnings","type":"PtValue | undefined","required":false},{"name":"pt:footer","type":"PtValue | undefined","required":false},{"name":"pt:footer:disabled","type":"PtValue | undefined","required":false},{"name":"pt:footer:errors","type":"PtValue | undefined","required":false},{"name":"pt:footer:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:footer:loading","type":"PtValue | undefined","required":false},{"name":"pt:footer:open","type":"PtValue | undefined","required":false},{"name":"pt:footer:readonly","type":"PtValue | undefined","required":false},{"name":"pt:footer:selected","type":"PtValue | undefined","required":false},{"name":"pt:footer:warnings","type":"PtValue | undefined","required":false},{"name":"pt:header","type":"PtValue | undefined","required":false},{"name":"pt:header:disabled","type":"PtValue | undefined","required":false},{"name":"pt:header:errors","type":"PtValue | undefined","required":false},{"name":"pt:header:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:header:loading","type":"PtValue | undefined","required":false},{"name":"pt:header:open","type":"PtValue | undefined","required":false},{"name":"pt:header:readonly","type":"PtValue | undefined","required":false},{"name":"pt:header:selected","type":"PtValue | undefined","required":false},{"name":"pt:header:warnings","type":"PtValue | undefined","required":false},{"name":"pt:hint","type":"PtValue | undefined","required":false},{"name":"pt:hint:disabled","type":"PtValue | undefined","required":false},{"name":"pt:hint:errors","type":"PtValue | undefined","required":false},{"name":"pt:hint:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:hint:loading","type":"PtValue | undefined","required":false},{"name":"pt:hint:open","type":"PtValue | undefined","required":false},{"name":"pt:hint:readonly","type":"PtValue | undefined","required":false},{"name":"pt:hint:selected","type":"PtValue | undefined","required":false},{"name":"pt:hint:warnings","type":"PtValue | undefined","required":false},{"name":"pt:icon","type":"PtValue | undefined","required":false},{"name":"pt:icon:disabled","type":"PtValue | undefined","required":false},{"name":"pt:icon:errors","type":"PtValue | undefined","required":false},{"name":"pt:icon:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:icon:loading","type":"PtValue | undefined","required":false},{"name":"pt:icon:open","type":"PtValue | undefined","required":false},{"name":"pt:icon:readonly","type":"PtValue | undefined","required":false},{"name":"pt:icon:selected","type":"PtValue | undefined","required":false},{"name":"pt:icon:warnings","type":"PtValue | undefined","required":false},{"name":"pt:input","type":"PtValue | undefined","required":false},{"name":"pt:input:disabled","type":"PtValue | undefined","required":false},{"name":"pt:input:errors","type":"PtValue | undefined","required":false},{"name":"pt:input:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:input:loading","type":"PtValue | undefined","required":false},{"name":"pt:input:open","type":"PtValue | undefined","required":false},{"name":"pt:input:readonly","type":"PtValue | undefined","required":false},{"name":"pt:input:selected","type":"PtValue | undefined","required":false},{"name":"pt:input:warnings","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription","type":"PtValue | ((ctx: PtItemCtx<T, BbSelectPtState>) => PtItemResult) | undefined","required":false},{"name":"pt:itemDescription:disabled","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription:errors","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription:loading","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription:open","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription:readonly","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription:selected","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription:warnings","type":"PtValue | undefined","required":false},{"name":"pt:itemIcon","type":"PtValue | ((ctx: PtItemCtx<T, BbSelectPtState>) => PtItemResult) | undefined","required":false},{"name":"pt:itemIcon:disabled","type":"PtValue | undefined","required":false},{"name":"pt:itemIcon:errors","type":"PtValue | undefined","required":false},{"name":"pt:itemIcon:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:itemIcon:loading","type":"PtValue | undefined","required":false},{"name":"pt:itemIcon:open","type":"PtValue | undefined","required":false},{"name":"pt:itemIcon:readonly","type":"PtValue | undefined","required":false},{"name":"pt:itemIcon:selected","type":"PtValue | undefined","required":false},{"name":"pt:itemIcon:warnings","type":"PtValue | undefined","required":false},{"name":"pt:itemText","type":"PtValue | ((ctx: PtItemCtx<T, BbSelectPtState>) => PtItemResult) | undefined","required":false},{"name":"pt:itemText:disabled","type":"PtValue | undefined","required":false},{"name":"pt:itemText:errors","type":"PtValue | undefined","required":false},{"name":"pt:itemText:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:itemText:loading","type":"PtValue | undefined","required":false},{"name":"pt:itemText:open","type":"PtValue | undefined","required":false},{"name":"pt:itemText:readonly","type":"PtValue | undefined","required":false},{"name":"pt:itemText:selected","type":"PtValue | undefined","required":false},{"name":"pt:itemText:warnings","type":"PtValue | undefined","required":false},{"name":"pt:label","type":"PtValue | undefined","required":false},{"name":"pt:label:disabled","type":"PtValue | undefined","required":false},{"name":"pt:label:errors","type":"PtValue | undefined","required":false},{"name":"pt:label:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:label:loading","type":"PtValue | undefined","required":false},{"name":"pt:label:open","type":"PtValue | undefined","required":false},{"name":"pt:label:readonly","type":"PtValue | undefined","required":false},{"name":"pt:label:selected","type":"PtValue | undefined","required":false},{"name":"pt:label:warnings","type":"PtValue | undefined","required":false},{"name":"pt:list","type":"PtValue | undefined","required":false},{"name":"pt:list:disabled","type":"PtValue | undefined","required":false},{"name":"pt:list:errors","type":"PtValue | undefined","required":false},{"name":"pt:list:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:list:loading","type":"PtValue | undefined","required":false},{"name":"pt:list:open","type":"PtValue | undefined","required":false},{"name":"pt:list:readonly","type":"PtValue | undefined","required":false},{"name":"pt:list:selected","type":"PtValue | undefined","required":false},{"name":"pt:list:warnings","type":"PtValue | undefined","required":false},{"name":"pt:message","type":"PtValue | undefined","required":false},{"name":"pt:message:disabled","type":"PtValue | undefined","required":false},{"name":"pt:message:errors","type":"PtValue | undefined","required":false},{"name":"pt:message:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:message:loading","type":"PtValue | undefined","required":false},{"name":"pt:message:open","type":"PtValue | undefined","required":false},{"name":"pt:message:readonly","type":"PtValue | undefined","required":false},{"name":"pt:message:selected","type":"PtValue | undefined","required":false},{"name":"pt:message:warnings","type":"PtValue | undefined","required":false},{"name":"pt:option","type":"PtValue | ((ctx: PtItemCtx<T, BbSelectPtState>) => PtItemResult) | undefined","required":false},{"name":"pt:option:disabled","type":"PtValue | undefined","required":false},{"name":"pt:option:errors","type":"PtValue | undefined","required":false},{"name":"pt:option:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:option:loading","type":"PtValue | undefined","required":false},{"name":"pt:option:open","type":"PtValue | undefined","required":false},{"name":"pt:option:readonly","type":"PtValue | undefined","required":false},{"name":"pt:option:selected","type":"PtValue | undefined","required":false},{"name":"pt:option:warnings","type":"PtValue | undefined","required":false},{"name":"pt:panel","type":"PtValue | undefined","required":false},{"name":"pt:panel:disabled","type":"PtValue | undefined","required":false},{"name":"pt:panel:errors","type":"PtValue | undefined","required":false},{"name":"pt:panel:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:panel:loading","type":"PtValue | undefined","required":false},{"name":"pt:panel:open","type":"PtValue | undefined","required":false},{"name":"pt:panel:readonly","type":"PtValue | undefined","required":false},{"name":"pt:panel:selected","type":"PtValue | undefined","required":false},{"name":"pt:panel:warnings","type":"PtValue | undefined","required":false},{"name":"pt:prefix","type":"PtValue | undefined","required":false},{"name":"pt:prefix:disabled","type":"PtValue | undefined","required":false},{"name":"pt:prefix:errors","type":"PtValue | undefined","required":false},{"name":"pt:prefix:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:prefix:loading","type":"PtValue | undefined","required":false},{"name":"pt:prefix:open","type":"PtValue | undefined","required":false},{"name":"pt:prefix:readonly","type":"PtValue | undefined","required":false},{"name":"pt:prefix:selected","type":"PtValue | undefined","required":false},{"name":"pt:prefix:warnings","type":"PtValue | undefined","required":false},{"name":"pt:root","type":"PtValue | undefined","required":false},{"name":"pt:root:disabled","type":"PtValue | undefined","required":false},{"name":"pt:root:errors","type":"PtValue | undefined","required":false},{"name":"pt:root:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:root:loading","type":"PtValue | undefined","required":false},{"name":"pt:root:open","type":"PtValue | undefined","required":false},{"name":"pt:root:readonly","type":"PtValue | undefined","required":false},{"name":"pt:root:selected","type":"PtValue | undefined","required":false},{"name":"pt:root:warnings","type":"PtValue | undefined","required":false},{"name":"pt:sheet","type":"PtValue | undefined","required":false},{"name":"pt:sheet:disabled","type":"PtValue | undefined","required":false},{"name":"pt:sheet:errors","type":"PtValue | undefined","required":false},{"name":"pt:sheet:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:sheet:loading","type":"PtValue | undefined","required":false},{"name":"pt:sheet:open","type":"PtValue | undefined","required":false},{"name":"pt:sheet:readonly","type":"PtValue | undefined","required":false},{"name":"pt:sheet:selected","type":"PtValue | undefined","required":false},{"name":"pt:sheet:warnings","type":"PtValue | undefined","required":false},{"name":"pt:spinner","type":"PtValue | undefined","required":false},{"name":"pt:spinner:disabled","type":"PtValue | undefined","required":false},{"name":"pt:spinner:errors","type":"PtValue | undefined","required":false},{"name":"pt:spinner:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:spinner:loading","type":"PtValue | undefined","required":false},{"name":"pt:spinner:open","type":"PtValue | undefined","required":false},{"name":"pt:spinner:readonly","type":"PtValue | undefined","required":false},{"name":"pt:spinner:selected","type":"PtValue | undefined","required":false},{"name":"pt:spinner:warnings","type":"PtValue | undefined","required":false},{"name":"pt:suffix","type":"PtValue | undefined","required":false},{"name":"pt:suffix:disabled","type":"PtValue | undefined","required":false},{"name":"pt:suffix:errors","type":"PtValue | undefined","required":false},{"name":"pt:suffix:hasValue","type":"PtValue | undefined","required":false},{"name":"pt:suffix:loading","type":"PtValue | undefined","required":false},{"name":"pt:suffix:open","type":"PtValue | undefined","required":false},{"name":"pt:suffix:readonly","type":"PtValue | undefined","required":false},{"name":"pt:suffix:selected","type":"PtValue | undefined","required":false},{"name":"pt:suffix:warnings","type":"PtValue | undefined","required":false},{"name":"queryDebounceTime","type":"number | undefined","required":false,"default":"500","description":"Time to wait when the user stops writing in the input before querying data."},{"name":"readonly","type":"boolean | undefined","required":false,"default":"false","description":"Sets the input in a readonly state."},{"name":"required","type":"boolean | undefined","required":false,"default":"false","description":"Sets the input as required."},{"name":"reverse","type":"boolean | undefined","required":false,"default":"false","description":"Reverses the layout. Applicable in every direction the order of the label and the input is swapped."},{"name":"rules","type":"RuleExpression<any>","required":false,"description":"vee-validate rules for this field. Only inside a `BbForm`."},{"name":"selectable","type":"boolean | ((item: T) => boolean) | undefined","required":false,"default":"true","description":"Defines whether options are selectable. Can be a global boolean that affects all options or a function that accepts an item and returns a boolean that only affects that item. Non-selectable options are rendered disabled."},{"name":"selectedLabelsFn","type":"((count: number) => string) | undefined","required":false,"description":"Function that returns a string to be displayed when the number of selected labels is greater than `maxSelectedLabels`."},{"name":"stash","type":"boolean | undefined","required":false,"default":"false","description":"Keeps picked options named across searches: a pick stays resolvable (its chip keeps its text) when a later search or a failed load no longer returns it. It follows the model, and does not keep a pick valid: `enforce-coherence` still prunes it."},{"name":"transitionDuration","type":"number | undefined","required":false,"default":"250","description":"How long the transition has to last in milliseconds."},{"name":"validationLabel","type":"string | undefined","required":false,"description":"The field's name in validation messages (`{field}`): \"Email is not valid\". Defaults to the `label` (or `legend`), then \"This field\"; never the `name`. Set it when the label is hidden or reads badly in a sentence (icon-only, a question). `BbForm` only."},{"name":"validationMode","type":"ValidationMode | undefined","required":false,"values":["aggressive","balanced","lazy","submit-only","submit-live"],"description":"When the field validates: `aggressive` (each change), `balanced` (on leave, then live while in error), `lazy` (on leave), `submit-only`, `submit-live`. Unset: the `BbForm`'s `validation-mode`, then `formControls.validationMode` (`'balanced'`). `BbForm` only."},{"name":"variant","type":"InputVariantType | undefined","required":false,"default":"'outline'","values":["outline","secondary","none","ghost"],"description":"The field box's look, with `BbButton`'s names and tokens. Colours only, so a form never reflows; `'ghost'` has no border in any state, `'none'` no look at all (you own hover, focus and the states). Register more with the plugin's `inputVariants`."},{"name":"warnings","type":"string | string[] | undefined","required":false,"description":"Warning messages under the field, a string or array: amber, in their own `aria-live` region and in the control's `aria-describedby` after the errors. Non-empty turns on the warning state; errors win when both are set."}],"events":[{"name":"active","signature":"(): void","description":"Emitted when the select becomes active (focus enters it)."},{"name":"blur","signature":"(event: FocusEvent): void","description":"Emitted when the activator loses focus. Forwards the original DOM `FocusEvent`."},{"name":"change","signature":"(event: Event): void","description":"Emitted on the native `change` event. Forwards the original DOM `Event`."},{"name":"click","signature":"(event: MouseEvent): void","description":"Emitted when the activator is clicked. Forwards the original DOM `MouseEvent`."},{"name":"focus","signature":"(event: FocusEvent): void","description":"Emitted when the activator receives focus. Forwards the original DOM `FocusEvent`."},{"name":"hidden","signature":"(): void","description":"Emitted once the options surface has finished closing."},{"name":"hide","signature":"(): void","description":"Emitted as soon as the options surface starts to close."},{"name":"inactive","signature":"(): void","description":"Emitted when focus moves outside the whole select after it was active."},{"name":"input","signature":"(event: Event): void","description":"Emitted on native `input` events from the search field. Forwards the DOM `Event`."},{"name":"option:add","signature":"(text: string): void","description":"Emitted with the typed text when the user confirms a value that is not in the list (Enter in the search field). Binding it keeps the search field writable, which makes the select creatable."},{"name":"show","signature":"(): void","description":"Emitted as soon as the options surface starts to open (the popover, or the sheet on a phone)."},{"name":"shown","signature":"(): void","description":"Emitted once the options surface is open and its open transition has finished."},{"name":"update:modelValue","signature":"(value: any): void","description":"Emitted with the new value whenever `v-model` changes."}],"slots":[{"name":"append","type":"{ query: string; focus: () => void; close: () => Promise<void>; }","description":"Content appended inside the input field, after the value area."},{"name":"append:outer","type":"{ query: string; close: () => Promise<void>; }","description":"Content appended outside the input field wrapper."},{"name":"chip","type":"BbSelectChipSlotProps<T>","fields":["item: T","text: string","value: any","disabled: boolean","deselect: () => void"],"description":"Replaces the default badge rendered for each selection in `multiple` mode. Not called in `comma` mode, nor for the collapsed \"+N\" summary."},{"name":"description","type":"BbSelectDescriptionSlotProps","fields":["text: string","hasErrors: boolean","hasWarnings: boolean"],"description":"Replaces the description text. Provided alone (no `description` prop) it still renders the description region and wires it into `aria-describedby`."},{"name":"empty","type":"{ query: string; focus: () => void; error: unknown; }","description":"Content shown when no options match the query or the list is empty. `error` is what the latest failed load threw, untouched (`null` when none)."},{"name":"footer","type":"BbSelectPanelSlotProps","fields":["close: () => Promise<void>","clear: () => void","focus: () => void","query: string","selectedOptions: BbSelectResolvedOption[]"],"description":"Content pinned to the bottom of the options panel, below the options list. Rendered in both the desktop popover and the adaptive sheet."},{"name":"group","type":"BbSelectGroupSlotProps<T>","fields":["text: string","item: T","index: number","length: number","disabled: boolean"],"description":"Replaces the default group header rendered above grouped options."},{"name":"header","type":"BbSelectPanelSlotProps","fields":["close: () => Promise<void>","clear: () => void","focus: () => void","query: string","selectedOptions: BbSelectResolvedOption[]"],"description":"Content pinned to the top of the options panel, above the search field. Rendered in both the desktop popover and the adaptive sheet."},{"name":"label","type":"BbSelectLabelSlotProps","fields":["showAsterisk?: boolean","text: string","hasErrors: boolean","hasWarnings: boolean"],"description":"Replaces the default label text rendered above the input."},{"name":"loading","type":"{ query: string; }","description":"Content shown inside the options dropdown while items are loading."},{"name":"option","type":"BbSelectOptionSlotProps<T>","fields":["disabled: boolean","focused: boolean","index: number","hasErrors?: boolean","item: T","loading: boolean","selected: boolean","text: string","value: any","description: string"],"description":"Replaces the default rendering of each option row in the dropdown."},{"name":"prefix","type":"object","description":"Content rendered as an inline prefix inside the input field."},{"name":"prepend","type":"{ query: string; focus: () => void; close: () => Promise<void>; }","description":"Content prepended inside the input field, before the value area."},{"name":"prepend:outer","type":"{ query: string; close: () => Promise<void>; }","description":"Content prepended outside the input field wrapper."},{"name":"suffix","type":"object","description":"Content rendered as an inline suffix inside the input field."}],"exposed":[],"models":[{"name":"modelValue","type":"any"}],"cssProps":[{"name":"--compensation-multiplier","value":"0.3","selector":".bb-select__field","description":"Fraction of the shell's inner padding the chips row is pulled back by when no prepend icon precedes it (see the negative margin below)."},{"name":"--border-color","value":"per variant","selector":"pt:box","description":"The resting border, at the fixed --bb-border-w. Errors and warnings paint their frame over it, so `pt:box=\"[--border-color:…]\"` recolours the rest without hiding the state; a plain `border-*` utility on the base pt:box would hide it (ESLint `no-box-border-color`)."}],"pt":{"parts":[{"name":"root","description":"The field's outer container: the label, the box and the lines under it; a `class` on the component lands here. (The options surface is `panel`.)"},{"name":"label","description":"The label text above the box (the `label` prop)."},{"name":"description","description":"The muted line under the label (the `description` prop)."},{"name":"message","description":"The errors / warnings line under the box. A node of its own: it can show at the same time as `hint`."},{"name":"hint","description":"The helper line (the `hint` prop), shown on focus, or always with `persistent-hint`."},{"name":"box","description":"The bordered box around the input — border, background and radius; the `variant` paints here."},{"name":"activator","description":"The button you act on to open the options — the field's control (not a text field: `data-test` fits here, `autocomplete` does not). The chevron is chrome. It is `activator`, not the family's `input`: the field itself is a button (the date / time inputs' trigger is the same word)."},{"name":"input","description":"The search field inside the options surface, when it shows one (see `disable-writing`) — handed to the `BbSelectPopover` as its own `pt:input`. Its ✕ is chrome."},{"name":"icon","description":"The content icons, prepend and append — a broadcast. Chrome (the clear ✕, a chevron, the error / warning glyph) is never in it."},{"name":"spinner","description":"The spinner inside the box while `loading`."},{"name":"prefix","description":"The `#prefix` slot's wrapper, inside the box before the input."},{"name":"suffix","description":"The `#suffix` slot's wrapper, inside the box after the input."},{"name":"clear","description":"The ✕ in the field that empties the selection (`clearable`) — one node, never a chip's own ✕."},{"name":"panel","description":"The options surface — the popover's painted bubble on desktop, the sheet itself on a phone."},{"name":"sheet","description":"The bottom sheet the options open in on a phone only."},{"name":"header","description":"The band around your `#header` slot: at the top of the flyout on desktop, the sheet's header on a phone."},{"name":"footer","description":"The band around your `#footer` slot: at the bottom of the flyout on desktop, the sheet's footer on a phone."},{"name":"list","description":"The `role=\"listbox\"` node that holds the options. Virtualised: its height is written inline and its rows are positioned by the list, which limits what a layout utility can do there. The listbox's groups and the chips are not parts."},{"name":"option","description":"One listbox option — a broadcast resolved per option. Also takes a per-item function, called with the option's raw item."},{"name":"itemText","description":"An option's label — resolved with that option's states. A custom `#option` slot replaces it. Also takes a per-item function."},{"name":"itemIcon","description":"An option's prepend / append icons (`itemProps`) — resolved with that option's states. Also takes a per-item function."},{"name":"itemDescription","description":"An option's second line (its description) — resolved with that option's states. A custom `#option` slot replaces it. Also takes a per-item function."},{"name":"badge","description":"Each selected value's `BbBadge` root with `multiple` — a broadcast resolved per value, on the field's chips and on the phone sheet's. The badge's own ✕ is chrome, never `clear`. In the field, not rendered when the `#chip` slot replaces it, nor in `comma` mode; the sheet's chips are always badges."},{"name":"comma","description":"Each selected value with `multiple` and `comma` — a broadcast resolved per value."}],"states":[{"name":"hasValue","description":"Component-wide: the control holds a value, by its own rule (`0` counts on `BbNumberInput`, `''` on `BbColorInput`)."},{"name":"selected","description":"Per node, on `option` and its `item-*` parts: a chosen option."},{"name":"readonly","description":"Component-wide: the control is `readonly` — shown, focusable, not editable."},{"name":"disabled","description":"Component-wide while the select is `disabled`; also per node, on `option` and its `item-*` parts: an option that is disabled."},{"name":"warnings","description":"Component-wide: the control is in its warning state (`warnings` / `has-warnings`) and not in an error state — errors win, so the two are never on together."},{"name":"errors","description":"Component-wide: the control is in its error state (`errors` / `has-errors`, or its validation) — the message line and the box turn red."},{"name":"open","description":"Component-wide: the options surface is showing."},{"name":"loading","description":"Component-wide: `loading` is on; the box shows its `spinner`."}]},"tree":{"bindings":[{"part":"badge","target":"CommonField"},{"part":"activator","target":"input.bb-select__activator"},{"part":"badge","target":"input.bb-select__activator"},{"part":"comma","target":"span.bb-select__comma"},{"part":"badge","target":"span.bb-select__comma"},{"part":"badge","target":"BbBadge"},{"part":"controlAttrs","target":"input"},{"part":"badge","target":"input"}],"forwards":[{"to":"BbSelectPopover","mapping":"{ panel: 'panel', sheet: 'sheet', header: 'header', footer: 'footer', input: 'input', list: 'list', option: 'option', itemText: 'itemText', itemIcon: 'itemIcon', itemDescription: 'itemDescription' }"}],"nodes":[{"name":"CommonField","kind":"internal","vocabulary":"BbSelect","bindings":[{"part":"root","target":"div.bb-field"},{"part":"label","target":"component"},{"part":"description","target":"span.bb-field__description"},{"part":"hint","target":"span.bb-field__hint"},{"part":"counter","target":"span.bb-field__counter"},{"part":"message","target":"div.bb-field__message"}],"cssProps":[{"name":"--ctrl-line","documented":true,"readBy":["bb-field__label","bb-field__input-wrapper"]}],"children":[{"name":"BbAsterisk","kind":"public"}]},{"name":"CommonFieldInput","kind":"internal","vocabulary":"BbSelect","bindings":[{"part":"box","target":"span.bb-field-input__box"},{"part":"prefix","target":"span.bb-field-input__prefix"},{"part":"icon","target":"BbIcon"},{"part":"clear","target":"ClearableButton"},{"part":"spinner","target":"BbSpinner"},{"part":"suffix","target":"span.bb-field-input__suffix"}],"cssProps":[{"name":"--bg","documented":true,"readBy":["bb-field-input","bb-field-input__box"]},{"name":"--bg-hover","documented":true,"readBy":["bb-field-input__box"]},{"name":"--bg-focus","documented":true,"readBy":["bb-field-input__box"]},{"name":"--bg-disabled","documented":true,"readBy":["bb-field-input__box"]},{"name":"--fg-disabled","documented":true,"readBy":["bb-field-input__box","bb-field-input__prefix","bb-field-input__suffix","bb-field-input__prepend-icon","bb-field-input__append-icon"]},{"name":"--border-color","documented":true,"readBy":["bb-field-input","bb-field-input__box"]},{"name":"--border-focus","documented":true,"readBy":["bb-field-input__box"]},{"name":"--ring-size","documented":true,"readBy":["bb-field-input__box"]},{"name":"--ring-color","documented":true,"readBy":["bb-field-input__box"]},{"name":"--elev","documented":true,"readBy":["bb-field-input__box"]},{"name":"--frost","documented":true,"readBy":["bb-field-input__box"]},{"name":"--inside-label-clearance","documented":true,"readBy":["bb-field-input__box","bb-field-input__prefix","bb-field-input__suffix"]}],"children":[{"name":"ErrorIcon","kind":"internal","cssProps":[{"name":"--accent","documented":false,"readBy":["bb-error-icon"]}],"children":[{"name":"BbIcon","kind":"public","cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]}]},{"name":"WarningIcon","kind":"internal","cssProps":[{"name":"--accent","documented":false,"readBy":["bb-warning-icon"]}],"children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]}]},{"name":"ClearableButton","kind":"internal","children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]}]},{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"BbSpinner","kind":"public","children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]}]}]},{"name":"BbBadge","kind":"public","vocabulary":"BbBadge","bindings":[{"part":"spinner","target":"BbSpinner"},{"part":"icon","target":"BbIcon"},{"part":"clear","target":"button.bb-badge__clear"}],"cssProps":[{"name":"--bg","documented":true,"readBy":["bb-badge"]},{"name":"--fg","documented":true,"readBy":["bb-badge","bb-badge__clear"]},{"name":"--bw","documented":true,"readBy":["bb-badge","bb-badge__clear"]},{"name":"--border-color","documented":false,"readBy":["bb-badge"]},{"name":"--ring-color","documented":true,"readBy":["bb-badge","bb-badge__clear","bb-badge__body","bb-badge--highlighted"]},{"name":"--ring-size","documented":true,"readBy":["bb-badge","bb-badge__clear","bb-badge__body","bb-badge--highlighted"]},{"name":"--min-size-md","documented":true,"readBy":["bb-badge"]},{"name":"--min-size","documented":true,"readBy":["bb-badge"]},{"name":"--elev","documented":true,"readBy":["bb-badge","bb-badge__clear","bb-badge__body","bb-badge--highlighted"]},{"name":"--r","documented":true,"readBy":["bb-badge","bb-badge__body","bb-badge__trailing","bb-badge__clear"]},{"name":"--fs","documented":true,"readBy":["bb-badge"]},{"name":"--icon-size","documented":true,"readBy":["bb-badge__icon","bb-badge__prepend-icon","bb-badge__append-icon","bb-badge__clear"]},{"name":"--gap","documented":true,"readBy":["bb-badge","bb-badge__body","bb-badge__trailing","bb-badge__clear"]},{"name":"--px","documented":true,"readBy":["bb-badge","bb-badge--icon","bb-badge__prepend-icon","bb-badge__append-icon","bb-badge--clearable"]},{"name":"--clear-size","documented":true,"readBy":["bb-badge__clear","bb-icon"]},{"name":"--bg-disabled","documented":true,"readBy":["bb-badge__body","bb-base-button--disabled","bb-badge--loading"]},{"name":"--fg-disabled","documented":true,"readBy":["bb-badge__body","bb-base-button--disabled","bb-badge--loading"]},{"name":"--border-disabled","documented":true,"readBy":["bb-badge__body","bb-base-button--disabled","bb-badge--loading"]},{"name":"--pad-left","documented":true,"readBy":["bb-badge__body"]},{"name":"--pad-right","documented":false,"readBy":["bb-badge__body","bb-badge__clear"]},{"name":"--size","documented":false}],"children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"BbSpinner","kind":"public","repeated":true},{"name":"BadgeBodyContent","kind":"internal","children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"BbSpinner","kind":"public","repeated":true}]}]},{"name":"BbSelectPopover","kind":"public","vocabulary":"BbSelectPopover","bindings":[{"part":"input","target":"input.bb-select-popover__input"},{"part":"clear","target":"ClearableButton"},{"part":"panel","target":"CommonPopover"},{"part":"root","target":"CommonPopover"},{"part":"header","target":"div.bb-select-popover__header"},{"part":"footer","target":"div.bb-select-popover__footer"}],"forwards":[{"to":"BbOffCanvas","mapping":"{ header: 'header', footer: 'footer', panel: 'root', sheet: 'root' }"}],"cssProps":[{"name":"--bg","documented":false,"readBy":["bb-listbox__outer-container"]},{"name":"--min-size","documented":false},{"name":"--px","documented":false},{"name":"--clear-size","documented":false}],"children":[{"name":"BbBadge","kind":"public","repeated":true,"cssProps":[{"name":"--bg","documented":true,"readBy":["bb-badge"]},{"name":"--fg","documented":true,"readBy":["bb-badge","bb-badge__clear"]},{"name":"--bw","documented":true,"readBy":["bb-badge","bb-badge__clear"]},{"name":"--border-color","documented":false,"readBy":["bb-badge"]},{"name":"--ring-color","documented":true,"readBy":["bb-badge","bb-badge__clear","bb-badge__body","bb-badge--highlighted"]},{"name":"--ring-size","documented":true,"readBy":["bb-badge","bb-badge__clear","bb-badge__body","bb-badge--highlighted"]},{"name":"--min-size-md","documented":true,"readBy":["bb-badge"]},{"name":"--min-size","documented":true,"readBy":["bb-badge"]},{"name":"--elev","documented":true,"readBy":["bb-badge","bb-badge__clear","bb-badge__body","bb-badge--highlighted"]},{"name":"--r","documented":true,"readBy":["bb-badge","bb-badge__body","bb-badge__trailing","bb-badge__clear"]},{"name":"--fs","documented":true,"readBy":["bb-badge"]},{"name":"--icon-size","documented":true,"readBy":["bb-badge__icon","bb-badge__prepend-icon","bb-badge__append-icon","bb-badge__clear"]},{"name":"--gap","documented":true,"readBy":["bb-badge","bb-badge__body","bb-badge__trailing","bb-badge__clear"]},{"name":"--px","documented":true,"readBy":["bb-badge","bb-badge--icon","bb-badge__prepend-icon","bb-badge__append-icon","bb-badge--clearable"]},{"name":"--clear-size","documented":true,"readBy":["bb-badge__clear","bb-icon"]},{"name":"--bg-disabled","documented":true,"readBy":["bb-badge__body","bb-base-button--disabled","bb-badge--loading"]},{"name":"--fg-disabled","documented":true,"readBy":["bb-badge__body","bb-base-button--disabled","bb-badge--loading"]},{"name":"--border-disabled","documented":true,"readBy":["bb-badge__body","bb-base-button--disabled","bb-badge--loading"]},{"name":"--pad-left","documented":true,"readBy":["bb-badge__body"]},{"name":"--pad-right","documented":false,"readBy":["bb-badge__body","bb-badge__clear"]},{"name":"--size","documented":false}]},{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"BbOffCanvas","kind":"public","vocabulary":"BbOffCanvas","bindings":[{"part":"header","target":"div.bb-offcanvas__header"},{"part":"title","target":"span.bb-offcanvas__title"},{"part":"description","target":"p.bb-offcanvas__description"},{"part":"close","target":"CloseButton"},{"part":"content","target":"div.bb-offcanvas__content"},{"part":"footer","target":"div.bb-offcanvas__footer"}],"cssProps":[{"name":"--translate-x","documented":false,"readBy":["bb-offcanvas"]},{"name":"--translate-y","documented":false,"readBy":["bb-offcanvas"]},{"name":"--translate","documented":false,"readBy":["bb-offcanvas"]},{"name":"--stack-x","documented":true,"readBy":["bb-offcanvas"]},{"name":"--stack-y","documented":false,"readBy":["bb-offcanvas"]},{"name":"--snap-y","documented":true,"readBy":["bb-offcanvas","bb-offcanvas__footer","bb-offcanvas--snap","bb-offcanvas--bottom"]},{"name":"--snap-floor","documented":false,"readBy":["bb-offcanvas__footer"]},{"name":"--stack-fill","documented":true,"readBy":["bb-offcanvas","bb-offcanvas--right","bb-offcanvas--left","bb-offcanvas--top","bb-offcanvas--bottom"]},{"name":"--stack-transition-duration","documented":true,"readBy":["bb-offcanvas"]},{"name":"--px","documented":true,"readBy":["bb-offcanvas__header","bb-close-button","bb-offcanvas__content","bb-offcanvas__footer"]},{"name":"--py","documented":false,"readBy":["bb-offcanvas__footer","bb-offcanvas__content","bb-offcanvas__header","bb-close-button"]},{"name":"--handle-w","documented":true,"readBy":["bb-offcanvas__handle"]},{"name":"--handle-h","documented":true,"readBy":["bb-offcanvas__handle"]},{"name":"--handle-bg","documented":true,"readBy":["bb-offcanvas__handle"]},{"name":"--transition-timing-function","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--open"]},{"name":"--bg","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--snap","bb-offcanvas--bottom"]},{"name":"--fg","documented":false,"readBy":["bb-offcanvas"]},{"name":"--safe-top","documented":true,"readBy":["bb-offcanvas","bb-offcanvas--left","bb-offcanvas--right","bb-offcanvas--top","bb-offcanvas--fullscreen"]},{"name":"--safe-right","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--right","bb-offcanvas--top","bb-offcanvas--bottom","bb-offcanvas--fullscreen"]},{"name":"--safe-bottom","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--left","bb-offcanvas--right","bb-offcanvas--bottom","bb-offcanvas--fullscreen"]},{"name":"--safe-left","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--left","bb-offcanvas--top","bb-offcanvas--bottom","bb-offcanvas--fullscreen"]},{"name":"--inset-top","documented":false,"readBy":["bb-offcanvas__content","bb-offcanvas__header"]},{"name":"--inset-right","documented":false,"readBy":["bb-offcanvas__header","bb-offcanvas__content","bb-offcanvas__footer"]},{"name":"--inset-bottom","documented":false,"readBy":["bb-offcanvas__footer","bb-offcanvas__content"]},{"name":"--inset-left","documented":false,"readBy":["bb-offcanvas__header","bb-offcanvas__content","bb-offcanvas__footer"]},{"name":"--close-size","documented":true,"readBy":["bb-close-button"]},{"name":"--gap","documented":false,"readBy":["bb-offcanvas__footer"]}],"children":[{"name":"CloseButton","kind":"internal","cssProps":[{"name":"--size","documented":true,"readBy":["bb-close-button"]},{"name":"--p","documented":true,"readBy":["bb-close-button"]}]}]},{"name":"ClearableButton","kind":"internal","repeated":true},{"name":"CommonPopover","kind":"internal"},{"name":"ErrorIcon","kind":"internal","repeated":true,"cssProps":[{"name":"--accent","documented":false,"readBy":["bb-error-icon"]}]},{"name":"WarningIcon","kind":"internal","repeated":true,"cssProps":[{"name":"--accent","documented":false,"readBy":["bb-warning-icon"]}]},{"name":"ListBox","kind":"internal","children":[{"name":"FlatListBox","kind":"internal","vocabulary":"BbSelectPopover","bindings":[{"part":"list","target":"span.bb-listbox__list"},{"part":"option","target":"span.bb-listbox__option"},{"part":"itemIcon","target":"BbIcon"},{"part":"itemText","target":"span.bb-listbox__item-text"},{"part":"itemDescription","target":"span.bb-listbox__item-description"}],"children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"ErrorIcon","kind":"internal","repeated":true,"cssProps":[{"name":"--accent","documented":false,"readBy":["bb-error-icon"]}]}]},{"name":"GroupedListBox","kind":"internal","vocabulary":"BbSelectPopover","bindings":[{"part":"list","target":"span.bb-listbox__list"},{"part":"option","target":"span.bb-listbox__option"},{"part":"itemIcon","target":"BbIcon"},{"part":"itemText","target":"span.bb-listbox__item-text"},{"part":"itemDescription","target":"span.bb-listbox__item-description"}],"children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"ErrorIcon","kind":"internal","repeated":true,"cssProps":[{"name":"--accent","documented":false,"readBy":["bb-error-icon"]}]}]}]},{"name":"BbSmoothHeight","kind":"public"}]}]},"css":{"classes":{"bb-select":["","__activator","__badge","__chips-row","__chips-row--chips","__chips-row--hidden","__comma","__display-value","__field","__field--disabled","__field--readonly","__field--shown","__max-reached","__placeholder","__value"]},"locals":["--color-gray-200","--compensation-multiplier"]},"attrTargets":["div","input"],"removed":[{"name":"allowWriting","new":"disableWriting","since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-select.md","silent":true,"fix":{"kind":"invert","valueMap":{"not-mobile":"mobile"}}},{"name":"showChevron","new":null,"since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-select.md","silent":true,"fix":{"kind":"remove"}},{"name":"updateOnAnimationFrame","new":null,"since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-select.md","silent":true,"fix":{"kind":"remove"}},{"name":"hasWarning","new":"hasWarnings","since":"3.0.0-beta.26","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"rename"}},{"name":"direction","new":"layout","since":"3.0.0-beta.33","migration":"ai/guides/migration/components/bb-select.md","silent":true,"fix":{"kind":"rename"}},{"name":"noDataText","new":"emptyText","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"rename"}},{"name":"no-data","new":"empty","surface":"slot","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"rename"}},{"name":"prepend-outer","new":"prepend:outer","surface":"slot","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"rename"}},{"name":"append-outer","new":"append:outer","surface":"slot","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"rename"}},{"name":"vid","new":null,"hint":"a display name (v2: `vid=\"Email address\"`) is now `validation-label`; a field path (3.0 betas: `vid=\"address.city\"`) is now `name` (brackets for a native post: `address[city]`). `check --fix` picks by the value","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"byValue","display":"validationLabel","key":"name"}},{"name":"validateOn","new":"validationMode","hint":"an array of events became one mode (`aggressive` | `balanced` | `lazy` | `submit-only` | `submit-live`). The old defaults (`['blur']`, `['inactive']`, a toggle's `['update:modelValue', 'change', 'blur']`) are `balanced`, the new default: delete the prop. A text field on `['update:modelValue']` is `validation-mode=\"aggressive\"`. Set it once on `<BbForm validation-mode>` instead of per field","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"manual"}}],"renamed":[{"from":"allowWriting","to":"disableWriting","since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-select.md","fix":{"kind":"invert","valueMap":{"not-mobile":"mobile"}}},{"from":"hasWarning","to":"hasWarnings","since":"3.0.0-beta.26","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"rename"}},{"from":"direction","to":"layout","since":"3.0.0-beta.33","migration":"ai/guides/migration/components/bb-select.md","fix":{"kind":"rename"}},{"from":"noDataText","to":"emptyText","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"rename"}},{"from":"no-data","to":"empty","surface":"slot","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"rename"}},{"from":"prepend-outer","to":"prepend:outer","surface":"slot","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"rename"}},{"from":"append-outer","to":"append:outer","surface":"slot","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"rename"}},{"from":"validateOn","to":"validationMode","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"manual"}}]},
538
- {"name":"BbSelectPopover","group":"Selection","description":"Provides popover-driven option selection and search.","referenceOnly":false,"hasGuide":true,"contract":"ai/BbSelectPopover.md","source":"ai/source/BbSelectPopover.md","props":[{"name":"activator","type":"Record<string, any> | HTMLElement | null | undefined","required":false,"description":"External activator element or component ref. When provided, the activator slot is not rendered and event listeners are attached programmatically to the referenced element."},{"name":"adaptive","type":"boolean | undefined","required":false,"default":"`config.adaptive` (`true`)","description":"On mobile, the panel opens as a bottom sheet instead of a floating popover, with the same search and list. Unset, the global `config.adaptive` applies."},{"name":"anchor","type":"Record<string, any> | HTMLElement | null | undefined","required":false,"default":"null","description":"Override the element used for popover positioning and width measurement. Useful when the focusable activator is narrower than its visual container (e.g. a button inside a wrapper). Falls back to `activatorEl` when omitted."},{"name":"ariaDescribedby","type":"string | string[] | undefined","required":false,"description":"Space-separated IDREF(s) that describe this field for assistive technologies. Accepts either a string or array of ids."},{"name":"ariaInvalid","type":"boolean | undefined","required":false,"default":"undefined","description":"Explicit invalid state for accessibility semantics. Falls back to `hasErrors` when not provided."},{"name":"autocomplete","type":"string | undefined","required":false,"default":"\"off\"","description":"Browser autocomplete hint for the popover search input."},{"name":"boundary","type":"string | Record<string, any> | HTMLElement | null | undefined","required":false,"description":"Constrains the popover to a specific boundary element: it stays inside it alongside its trigger (sideways for a popover above or below); away from the trigger it may pass the edge, and it flips at the viewport only."},{"name":"clearable","type":"boolean | undefined","required":false,"default":"false","description":"Shows a clear button in the search field, in the lens' place while there is a query or a selection; it resets both. None without a search field. Leave it off when the activator already clears (as BbSelect's does)."},{"name":"compact","type":"boolean | undefined","required":false,"default":"false","description":"Apply the compact density variant."},{"name":"dependencies","type":"unknown[] | undefined","required":false,"default":"[]","description":"Additional dependencies that trigger item reloading when changed."},{"name":"depsDebounceTime","type":"number | undefined","required":false,"default":"0","description":"Debounce delay (ms) for dependency-triggered reloads."},{"name":"disabled","type":"boolean | undefined","required":false,"default":"false","description":"Disables the component."},{"name":"disableFlip","type":"boolean | undefined","required":false,"default":"false","description":"Disables the automatic flip to the opposite side when the popover would overflow (flipping is on by default)."},{"name":"disableWriting","type":"boolean | \"auto\" | \"mobile\" | \"desktop\" | undefined","required":false,"default":"'auto'","description":"Hides the panel's search field: `true` everywhere, `'mobile'` / `'desktop'` on that platform only. `'auto'` hides it, per open, for an array `items` shorter than the plugin's `autoDisableWritingThreshold` (6); never for a provider or with an `option:add` listener."},{"name":"emptyText","type":"string | undefined","required":false,"description":"Message displayed when no items are available."},{"name":"enforceCoherence","type":"boolean | undefined","required":false,"default":"false","description":"Drops the picks the items no longer contain (single: `null`). Checked after every applied, successful load whose `reason` is not `'search'` (an empty one included), against the FETCHED rows only (a `stash` does not count); a search or failed load never prunes."},{"name":"failedText","type":"string | undefined","required":false,"default":"the localized `common.failedText` (\"Couldn't load items\")","description":"Message displayed in the empty state while the latest load FAILED (the provider threw): the twin of `emptyText` for that case."},{"name":"filterBy","type":"false | string[] | undefined","required":false,"default":"[]","description":"What typing filters on: empty = the display text and description; item paths = those fields (`['name', 'email']`); `false` = no filtering. Use `false` when the provider matched the query on the server, or its email/accent matches show as \"No results\"."},{"name":"groupBy","type":"string | ((item: Item) => string | number | symbol) | undefined","required":false,"description":"Path to item property for grouping options."},{"name":"hasErrors","type":"boolean | undefined","required":false,"default":"false","description":"Marks the component as being in error state."},{"name":"hasWarnings","type":"boolean | undefined","required":false,"default":"false","description":"Marks the component as being in a warning state. Visually mirrors `hasErrors` but uses `--bb-warn` chrome; errors take priority when both are set."},{"name":"headerHeight","type":"number | undefined","required":false,"description":"Height of group headers in the listbox (px). Defaults to 32px (24px compact; 36px / 32px on mobile viewports). Only applies when `groupBy` is set. An explicit value wins on every viewport."},{"name":"id","type":"string | undefined","required":false,"description":"Seeds the ids the popover sets: its listbox is `<id>_listbox` (the activator's `aria-controls`) and each option's id derives from it. Generated when omitted."},{"name":"itemHeight","type":"number | undefined","required":false,"default":"28","description":"Height of the options in the listbox (px). Defaults to 28px (24px compact; 44px / 36px on mobile viewports). An explicit value wins on every viewport."},{"name":"itemProps","type":"BbSelectItemProps<Item> | undefined","required":false,"description":"ADDITIONAL row fields, never the text or value: `description` (a muted line under the label), `prepend:icon`, `append:icon`. An object of paths or getters per field, or a function of the item. Nothing is read implicitly; none shows in the trigger or the chips."},{"name":"items","type":"Item[] | ((context: BbSelectPopoverItemsContext) => Item[] | Promise<Item[]>)","required":true,"default":"[]","description":"The options: an array, or a sync or async provider given a `BbSelectPopoverItemsContext` (`query`, `reason`, `modelValue`, `signal`). Branch on `reason !== 'search'` to resolve the selection by id. A provider fails by THROWING, never by returning `[]`."},{"name":"itemText","type":"ItemAccessor<Item, string> | undefined","required":false,"default":"own `label`, else `text`, else `JSON.stringify(item)`","description":"Path to item property for display text or function to extract it.\n\nUnset: own `label`, else `text` (`{ label, value }` needs no accessor)."},{"name":"itemValue","type":"ItemAccessor<Item> | undefined","required":false,"default":"own `value`, else the whole item","description":"Path to item property for value or function to extract it.\n\nUnset: own `value`, even `null`."},{"name":"loading","type":"boolean | undefined","required":false,"default":"false","description":"Display the loading state styles."},{"name":"loadingText","type":"string | undefined","required":false,"description":"Message shown while items are being loaded."},{"name":"max","type":"number | undefined","required":false,"default":"Infinity","description":"Maximum number of selectable items (limits selection when `multiple` is true)."},{"name":"modelValue","type":"any","required":true,"description":"v-model value. Single value for single select, array for multiple select."},{"name":"modelValueDebounceTime","type":"number | undefined","required":false,"default":"0","description":"Debounce delay (ms) for modelValue change handling."},{"name":"multiple","type":"boolean | undefined","required":false,"default":"false","description":"Enable multiple item selection. When true, modelValue must be an array."},{"name":"offCanvasProps","type":"Partial<BbOffCanvasProps> | undefined","required":false,"description":"Props for the phone sheet (the `BbOffCanvas` that `adaptive` renders on mobile), spread over its defaults. A `pt` inside it styles only the sheet (passthrough guide § Inside the sheet)."},{"name":"offset","type":"number | undefined","required":false,"default":"4","description":"Distance (px) between the activator and the popover."},{"name":"padding","type":"number | undefined","required":false,"default":"10","description":"Minimum page padding used by floating shift middleware."},{"name":"placement","type":"Placement | undefined","required":false,"default":"\"bottom\"","values":["top","bottom","left","right","top-start","top-end","right-start","right-end","bottom-start","bottom-end","left-start","left-end"],"description":"Floating placement of the popover."},{"name":"prefill","type":"boolean | \"interaction\" | undefined","required":false,"default":"\"interaction\"","description":"When the options first load: `'interaction'` on first open, `true` on mount (and in SSR), `false` once the user types (on open with `disable-writing` or a non-empty model). An array `items` always resolves on mount; else a seeded model's text waits for the first open."},{"name":"pt","type":"PtItemMap<BbSelectPopoverPtPart, BbSelectPopoverOptionPtPart, BbSelectPopoverPtState, Item> | undefined","required":false,"description":"Passthrough, object form: the same keys as the `pt:*` attributes without the prefix. See the `pt:<part>` row."},{"name":"pt:clear","type":"PtValue | undefined","required":false},{"name":"pt:clear:disabled","type":"PtValue | undefined","required":false},{"name":"pt:clear:open","type":"PtValue | undefined","required":false},{"name":"pt:clear:selected","type":"PtValue | undefined","required":false},{"name":"pt:footer","type":"PtValue | undefined","required":false},{"name":"pt:footer:disabled","type":"PtValue | undefined","required":false},{"name":"pt:footer:open","type":"PtValue | undefined","required":false},{"name":"pt:footer:selected","type":"PtValue | undefined","required":false},{"name":"pt:header","type":"PtValue | undefined","required":false},{"name":"pt:header:disabled","type":"PtValue | undefined","required":false},{"name":"pt:header:open","type":"PtValue | undefined","required":false},{"name":"pt:header:selected","type":"PtValue | undefined","required":false},{"name":"pt:input","type":"PtValue | undefined","required":false},{"name":"pt:input:disabled","type":"PtValue | undefined","required":false},{"name":"pt:input:open","type":"PtValue | undefined","required":false},{"name":"pt:input:selected","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription","type":"PtValue | ((ctx: PtItemCtx<Item, BbSelectPopoverPtState>) => PtItemResult) | undefined","required":false},{"name":"pt:itemDescription:disabled","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription:open","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription:selected","type":"PtValue | undefined","required":false},{"name":"pt:itemIcon","type":"PtValue | ((ctx: PtItemCtx<Item, BbSelectPopoverPtState>) => PtItemResult) | undefined","required":false},{"name":"pt:itemIcon:disabled","type":"PtValue | undefined","required":false},{"name":"pt:itemIcon:open","type":"PtValue | undefined","required":false},{"name":"pt:itemIcon:selected","type":"PtValue | undefined","required":false},{"name":"pt:itemText","type":"PtValue | ((ctx: PtItemCtx<Item, BbSelectPopoverPtState>) => PtItemResult) | undefined","required":false},{"name":"pt:itemText:disabled","type":"PtValue | undefined","required":false},{"name":"pt:itemText:open","type":"PtValue | undefined","required":false},{"name":"pt:itemText:selected","type":"PtValue | undefined","required":false},{"name":"pt:list","type":"PtValue | undefined","required":false},{"name":"pt:list:disabled","type":"PtValue | undefined","required":false},{"name":"pt:list:open","type":"PtValue | undefined","required":false},{"name":"pt:list:selected","type":"PtValue | undefined","required":false},{"name":"pt:option","type":"PtValue | ((ctx: PtItemCtx<Item, BbSelectPopoverPtState>) => PtItemResult) | undefined","required":false},{"name":"pt:option:disabled","type":"PtValue | undefined","required":false},{"name":"pt:option:open","type":"PtValue | undefined","required":false},{"name":"pt:option:selected","type":"PtValue | undefined","required":false},{"name":"pt:panel","type":"PtValue | undefined","required":false},{"name":"pt:panel:disabled","type":"PtValue | undefined","required":false},{"name":"pt:panel:open","type":"PtValue | undefined","required":false},{"name":"pt:panel:selected","type":"PtValue | undefined","required":false},{"name":"pt:root","type":"PtValue | undefined","required":false},{"name":"pt:root:disabled","type":"PtValue | undefined","required":false},{"name":"pt:root:open","type":"PtValue | undefined","required":false},{"name":"pt:root:selected","type":"PtValue | undefined","required":false},{"name":"pt:sheet","type":"PtValue | undefined","required":false},{"name":"pt:sheet:disabled","type":"PtValue | undefined","required":false},{"name":"pt:sheet:open","type":"PtValue | undefined","required":false},{"name":"pt:sheet:selected","type":"PtValue | undefined","required":false},{"name":"queryDebounceTime","type":"number | undefined","required":false,"default":"500","description":"Debounce delay (ms) before triggering search queries after user input stops."},{"name":"readonly","type":"boolean | undefined","required":false,"default":"false","description":"Prevents opening the popover while keeping the activator accessible."},{"name":"searchInputAriaLabel","type":"string | undefined","required":false,"default":"`t('select.searchLabel')` (`'Search options'`)","description":"Accessible label used by the search input rendered inside the popover. Falls back to the localized `select.searchLabel` key when omitted."},{"name":"selectable","type":"boolean | ((item: Item) => boolean) | undefined","required":false,"default":"true","description":"Defines whether options are selectable. Can be a global boolean that affects all options or a function that accepts an item and returns a boolean that only affects that item. Non-selectable options are rendered disabled."},{"name":"stash","type":"boolean | undefined","required":false,"default":"false","description":"Keeps picked options named across searches: a pick stays resolvable when a later search or a failed load no longer returns it. It follows the model, and does not keep a pick valid: `enforce-coherence` still prunes it."},{"name":"transitionDuration","type":"number | undefined","required":false,"default":"250","description":"Transition duration (ms) for popover show/hide animations."},{"name":"width","type":"string | number | undefined","required":false,"default":"\"200\"","description":"Width of the popover in pixels, percentage, or `'auto'`. A bare number is read as pixels — the default is the string `'200'`, not the number `200`."}],"events":[{"name":"active","signature":"(): void","description":"Emitted when the component becomes active (focus enters it)."},{"name":"blur","signature":"(event: FocusEvent): void","description":"Emitted when the activator loses focus."},{"name":"change","signature":"(event: Event): void","description":"Emitted when the value changes via native change event."},{"name":"click","signature":"(event: MouseEvent): void","description":"Emitted when the activator is clicked."},{"name":"focus","signature":"(event: FocusEvent): void","description":"Emitted when the activator receives focus."},{"name":"hidden","signature":"(): void","description":"Emitted once the options surface has finished closing."},{"name":"hide","signature":"(): void","description":"Emitted as soon as the options surface starts to close."},{"name":"inactive","signature":"(): void","description":"Emitted when focus moves outside the entire component after it was active."},{"name":"input","signature":"(event: Event): void","description":"Emitted on native input events from the search input."},{"name":"option:add","signature":"(text: string): void","description":"Emitted when the user types a new value and confirms it (Enter key) while writing is enabled (i.e. `disableWriting` does not suppress the search input for the current surface)."},{"name":"show","signature":"(): void","description":"Emitted as soon as the options surface starts to open (the popover, or the sheet on a phone)."},{"name":"shown","signature":"(): void","description":"Emitted once the options surface is open and its open transition has finished."},{"name":"update:modelValue","signature":"(value: any): void","description":"Emitted with the next selection value whenever selection changes."}],"slots":[{"name":"activator","type":"BbSelectPopoverActivatorSlotProps","fields":["clear: () => void","close: () => Promise<void>","focus: () => void","disabled: boolean","loading: boolean","open: () => Promise<void>","props: { ref: (reference: unknown) => void; }","query: string","readonly: boolean","selectedOptions: BbSelectResolvedOption<any>[]","shown: boolean","text: string","toggle: () => Promise<void>"],"description":"Replaces the default trigger element that opens the select popover."},{"name":"empty","type":"{ query: string; focus: () => void; error: unknown; }","description":"Content shown when no options match the query or the list is empty. `error` is what the latest failed load threw, untouched (`null` when none)."},{"name":"footer","type":"BbSelectPopoverPanelSlotProps","fields":["close: () => Promise<void>","clear: () => void","focus: () => void","query: string","selectedOptions: BbSelectResolvedOption<any>[]"],"description":"Content pinned to the bottom of the panel, below the options list. Rendered in both the desktop popover and the adaptive sheet."},{"name":"group","type":"BbSelectPopoverGroupSlotProps<Item>","fields":["disabled: boolean","index: number","item: Item","length: number","text: string"],"description":"Replaces the default group header rendered above grouped options."},{"name":"header","type":"BbSelectPopoverPanelSlotProps","fields":["close: () => Promise<void>","clear: () => void","focus: () => void","query: string","selectedOptions: BbSelectResolvedOption<any>[]"],"description":"Content pinned to the top of the panel, above the search field. Rendered in both the desktop popover and the adaptive sheet."},{"name":"loading","type":"{ query: string; }","description":"Content shown inside the options dropdown while items are loading."},{"name":"option","type":"BbSelectPopoverOptionSlotProps<Item>","fields":["disabled: boolean","focused: boolean","index: number","item: Item","loading: boolean","selected: boolean","text: string","value: any","description: string"],"description":"Replaces the default rendering of each option row in the dropdown."}],"exposed":[],"models":[{"name":"modelValue","type":"any"}],"cssProps":[{"name":"--bg","value":"var(--bb-panel)","selector":".bb-listbox__outer-container"},{"name":"--min-size","value":"2.125rem","selector":".bb-select-popover__sheet-chip"},{"name":"--px","value":"0.75rem","selector":".bb-select-popover__sheet-chip"},{"name":"--clear-size","value":"1.25rem","selector":".bb-select-popover__sheet-chip"}],"pt":{"parts":[{"name":"root","description":"The floating element — an invisible positioning wrapper; a `class` on the component lands here. No node on the phone sheet: style what you see with `panel`."},{"name":"panel","description":"The options surface you see — the popover's painted bubble on desktop, the sheet itself on a phone."},{"name":"sheet","description":"The bottom sheet the surface becomes on a phone (the `BbOffCanvas` root) — never the desktop surface. Applied after `panel`, so it wins a conflict there."},{"name":"input","description":"The search field."},{"name":"clear","description":"The ✕ that empties the search field."},{"name":"list","description":"The `role=\"listbox\"` node that holds the options. Virtualised: its height is written inline and its rows are positioned by the list, which limits what a layout utility can do there. The listbox's groups and the chips are not parts."},{"name":"option","description":"One listbox option — a broadcast resolved per option. Also takes a per-item function, called with the option's raw item."},{"name":"itemText","description":"An option's label — resolved with that option's states. A custom `#option` slot replaces it. Also takes a per-item function."},{"name":"itemIcon","description":"An option's prepend / append icons (`itemProps`) — resolved with that option's states. Also takes a per-item function."},{"name":"itemDescription","description":"An option's second line (its description) — resolved with that option's states. A custom `#option` slot replaces it. Also takes a per-item function."},{"name":"header","description":"The flyout's header band."},{"name":"footer","description":"The flyout's footer band."}],"states":[{"name":"selected","description":"Per node, on `option` and its `item-*` parts: a chosen option."},{"name":"disabled","description":"Per node, on `option` and its `item-*` parts: an option that is disabled."},{"name":"open","description":"Component-wide: the options surface is showing."}]},"tree":{"bindings":[{"part":"input","target":"input.bb-select-popover__input"},{"part":"clear","target":"ClearableButton"},{"part":"panel","target":"CommonPopover"},{"part":"root","target":"CommonPopover"},{"part":"header","target":"div.bb-select-popover__header"},{"part":"footer","target":"div.bb-select-popover__footer"}],"forwards":[{"to":"BbOffCanvas","mapping":"{ header: 'header', footer: 'footer', panel: 'root', sheet: 'root' }"}],"nodes":[{"name":"BbBadge","kind":"public","vocabulary":"BbBadge","bindings":[{"part":"spinner","target":"BbSpinner"},{"part":"icon","target":"BbIcon"},{"part":"clear","target":"button.bb-badge__clear"}],"cssProps":[{"name":"--bg","documented":true,"readBy":["bb-badge"]},{"name":"--fg","documented":true,"readBy":["bb-badge","bb-badge__clear"]},{"name":"--bw","documented":true,"readBy":["bb-badge","bb-badge__clear"]},{"name":"--border-color","documented":false,"readBy":["bb-badge"]},{"name":"--ring-color","documented":true,"readBy":["bb-badge","bb-badge__clear","bb-badge__body","bb-badge--highlighted"]},{"name":"--ring-size","documented":true,"readBy":["bb-badge","bb-badge__clear","bb-badge__body","bb-badge--highlighted"]},{"name":"--min-size-md","documented":true,"readBy":["bb-badge"]},{"name":"--min-size","documented":true,"readBy":["bb-badge"]},{"name":"--elev","documented":true,"readBy":["bb-badge","bb-badge__clear","bb-badge__body","bb-badge--highlighted"]},{"name":"--r","documented":true,"readBy":["bb-badge","bb-badge__body","bb-badge__trailing","bb-badge__clear"]},{"name":"--fs","documented":true,"readBy":["bb-badge"]},{"name":"--icon-size","documented":true,"readBy":["bb-badge__icon","bb-badge__prepend-icon","bb-badge__append-icon","bb-badge__clear"]},{"name":"--gap","documented":true,"readBy":["bb-badge","bb-badge__body","bb-badge__trailing","bb-badge__clear"]},{"name":"--px","documented":true,"readBy":["bb-badge","bb-badge--icon","bb-badge__prepend-icon","bb-badge__append-icon","bb-badge--clearable"]},{"name":"--clear-size","documented":true,"readBy":["bb-badge__clear","bb-icon"]},{"name":"--bg-disabled","documented":true,"readBy":["bb-badge__body","bb-base-button--disabled","bb-badge--loading"]},{"name":"--fg-disabled","documented":true,"readBy":["bb-badge__body","bb-base-button--disabled","bb-badge--loading"]},{"name":"--border-disabled","documented":true,"readBy":["bb-badge__body","bb-base-button--disabled","bb-badge--loading"]},{"name":"--pad-left","documented":true,"readBy":["bb-badge__body"]},{"name":"--pad-right","documented":false,"readBy":["bb-badge__body","bb-badge__clear"]},{"name":"--size","documented":false}],"children":[{"name":"BbIcon","kind":"public","cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"BbSpinner","kind":"public","children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]}]},{"name":"BadgeBodyContent","kind":"internal","children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"BbSpinner","kind":"public","repeated":true}]}]},{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"BbOffCanvas","kind":"public","vocabulary":"BbOffCanvas","bindings":[{"part":"header","target":"div.bb-offcanvas__header"},{"part":"title","target":"span.bb-offcanvas__title"},{"part":"description","target":"p.bb-offcanvas__description"},{"part":"close","target":"CloseButton"},{"part":"content","target":"div.bb-offcanvas__content"},{"part":"footer","target":"div.bb-offcanvas__footer"}],"cssProps":[{"name":"--translate-x","documented":false,"readBy":["bb-offcanvas"]},{"name":"--translate-y","documented":false,"readBy":["bb-offcanvas"]},{"name":"--translate","documented":false,"readBy":["bb-offcanvas"]},{"name":"--stack-x","documented":true,"readBy":["bb-offcanvas"]},{"name":"--stack-y","documented":false,"readBy":["bb-offcanvas"]},{"name":"--snap-y","documented":true,"readBy":["bb-offcanvas","bb-offcanvas__footer","bb-offcanvas--snap","bb-offcanvas--bottom"]},{"name":"--snap-floor","documented":false,"readBy":["bb-offcanvas__footer"]},{"name":"--stack-fill","documented":true,"readBy":["bb-offcanvas","bb-offcanvas--right","bb-offcanvas--left","bb-offcanvas--top","bb-offcanvas--bottom"]},{"name":"--stack-transition-duration","documented":true,"readBy":["bb-offcanvas"]},{"name":"--px","documented":true,"readBy":["bb-offcanvas__header","bb-close-button","bb-offcanvas__content","bb-offcanvas__footer"]},{"name":"--py","documented":false,"readBy":["bb-offcanvas__footer","bb-offcanvas__content","bb-offcanvas__header","bb-close-button"]},{"name":"--handle-w","documented":true,"readBy":["bb-offcanvas__handle"]},{"name":"--handle-h","documented":true,"readBy":["bb-offcanvas__handle"]},{"name":"--handle-bg","documented":true,"readBy":["bb-offcanvas__handle"]},{"name":"--transition-timing-function","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--open"]},{"name":"--bg","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--snap","bb-offcanvas--bottom"]},{"name":"--fg","documented":false,"readBy":["bb-offcanvas"]},{"name":"--safe-top","documented":true,"readBy":["bb-offcanvas","bb-offcanvas--left","bb-offcanvas--right","bb-offcanvas--top","bb-offcanvas--fullscreen"]},{"name":"--safe-right","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--right","bb-offcanvas--top","bb-offcanvas--bottom","bb-offcanvas--fullscreen"]},{"name":"--safe-bottom","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--left","bb-offcanvas--right","bb-offcanvas--bottom","bb-offcanvas--fullscreen"]},{"name":"--safe-left","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--left","bb-offcanvas--top","bb-offcanvas--bottom","bb-offcanvas--fullscreen"]},{"name":"--inset-top","documented":false,"readBy":["bb-offcanvas__content","bb-offcanvas__header"]},{"name":"--inset-right","documented":false,"readBy":["bb-offcanvas__header","bb-offcanvas__content","bb-offcanvas__footer"]},{"name":"--inset-bottom","documented":false,"readBy":["bb-offcanvas__footer","bb-offcanvas__content"]},{"name":"--inset-left","documented":false,"readBy":["bb-offcanvas__header","bb-offcanvas__content","bb-offcanvas__footer"]},{"name":"--close-size","documented":true,"readBy":["bb-close-button"]},{"name":"--gap","documented":false,"readBy":["bb-offcanvas__footer"]}],"children":[{"name":"CloseButton","kind":"internal","cssProps":[{"name":"--size","documented":true,"readBy":["bb-close-button"]},{"name":"--p","documented":true,"readBy":["bb-close-button"]}]}]},{"name":"ClearableButton","kind":"internal","children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]}]},{"name":"CommonPopover","kind":"internal"},{"name":"ErrorIcon","kind":"internal","cssProps":[{"name":"--accent","documented":false,"readBy":["bb-error-icon"]}],"children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]}]},{"name":"WarningIcon","kind":"internal","cssProps":[{"name":"--accent","documented":false,"readBy":["bb-warning-icon"]}],"children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]}]},{"name":"ListBox","kind":"internal","children":[{"name":"FlatListBox","kind":"internal","vocabulary":"BbSelectPopover","bindings":[{"part":"list","target":"span.bb-listbox__list"},{"part":"option","target":"span.bb-listbox__option"},{"part":"itemIcon","target":"BbIcon"},{"part":"itemText","target":"span.bb-listbox__item-text"},{"part":"itemDescription","target":"span.bb-listbox__item-description"}],"children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"ErrorIcon","kind":"internal","repeated":true,"cssProps":[{"name":"--accent","documented":false,"readBy":["bb-error-icon"]}]}]},{"name":"GroupedListBox","kind":"internal","vocabulary":"BbSelectPopover","bindings":[{"part":"list","target":"span.bb-listbox__list"},{"part":"option","target":"span.bb-listbox__option"},{"part":"itemIcon","target":"BbIcon"},{"part":"itemText","target":"span.bb-listbox__item-text"},{"part":"itemDescription","target":"span.bb-listbox__item-description"}],"children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"ErrorIcon","kind":"internal","repeated":true,"cssProps":[{"name":"--accent","documented":false,"readBy":["bb-error-icon"]}]}]}]},{"name":"BbSmoothHeight","kind":"public"}]},"css":{"classes":{"bb-listbox":["","--compact","--described","--empty","--grouped","--loading","--multiple","--open","__empty","__failed","__failed--divided","__failed-icon","__failed-text","__group","__group-header","__group-header-label","__inner-container","__item-description","__item-icon","__item-text","__list","__loading","__loading--below","__option","__option--disabled","__option--focused","__option--selected","__option-append-icon","__option-check","__option-content","__option-prepend-icon","__outer-container"],"bb-select-known-items":[""],"bb-select-popover":["","--clearable-active","--errors","--loading","--reloading","--sheet","--warnings","__clear","__focus-proxy","__footer","__header","__input","__panel","__search-container","__search-error-icon","__search-icon","__search-strip","__search-warning-icon","__sheet","__sheet-chip","__sheet-chips","__sheet-selection"],"bb-select-popover-escape":[""],"bb-select-sheet-chip-attrs":[""]},"locals":["--bg","--close-size","--color-gray-200","--group-header-height","--option-font-size","--option-h","--option-height","--py","--transition-duration","--w"]},"removed":[{"name":"allowWriting","new":"disableWriting","since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-select-popover.md","silent":true,"fix":{"kind":"invert","valueMap":{"not-mobile":"mobile"}}},{"name":"arrowPadding","new":null,"since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-select-popover.md","silent":true,"fix":{"kind":"remove"}},{"name":"flip","new":"disableFlip","since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-select-popover.md","silent":true,"fix":{"kind":"invert"}},{"name":"hideArrow","new":null,"since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-select-popover.md","silent":true,"fix":{"kind":"remove"}},{"name":"showArrow","new":null,"since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-select-popover.md","silent":true,"fix":{"kind":"remove"}},{"name":"hasWarning","new":"hasWarnings","since":"3.0.0-beta.26","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"rename"}},{"name":"noDataText","new":"emptyText","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"rename"}},{"name":"no-data","new":"empty","surface":"slot","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"rename"}}],"renamed":[{"from":"allowWriting","to":"disableWriting","since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-select-popover.md","fix":{"kind":"invert","valueMap":{"not-mobile":"mobile"}}},{"from":"flip","to":"disableFlip","since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-select-popover.md","fix":{"kind":"invert"}},{"from":"hasWarning","to":"hasWarnings","since":"3.0.0-beta.26","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"rename"}},{"from":"noDataText","to":"emptyText","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"rename"}},{"from":"no-data","to":"empty","surface":"slot","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"rename"}}]},
538
+ {"name":"BbSelectPopover","group":"Selection","description":"Provides popover-driven option selection and search.","referenceOnly":false,"hasGuide":true,"contract":"ai/BbSelectPopover.md","source":"ai/source/BbSelectPopover.md","props":[{"name":"activator","type":"Record<string, any> | HTMLElement | null | undefined","required":false,"description":"External activator element or component ref. When provided, the activator slot is not rendered and event listeners are attached programmatically to the referenced element."},{"name":"adaptive","type":"boolean | undefined","required":false,"default":"`config.adaptive` (`true`)","description":"On mobile, the panel opens as a bottom sheet instead of a floating popover, with the same search and list. Unset, the global `config.adaptive` applies."},{"name":"anchor","type":"Record<string, any> | HTMLElement | null | undefined","required":false,"default":"null","description":"Override the element used for popover positioning and width measurement. Useful when the focusable activator is narrower than its visual container (e.g. a button inside a wrapper). Falls back to `activatorEl` when omitted."},{"name":"ariaDescribedby","type":"string | string[] | undefined","required":false,"description":"Space-separated IDREF(s) that describe this field for assistive technologies. Accepts either a string or array of ids."},{"name":"ariaInvalid","type":"boolean | undefined","required":false,"default":"undefined","description":"Explicit invalid state for accessibility semantics. Falls back to `hasErrors` when not provided."},{"name":"autocomplete","type":"string | undefined","required":false,"default":"\"off\"","description":"Browser autocomplete hint for the popover search input."},{"name":"boundary","type":"string | Record<string, any> | HTMLElement | null | undefined","required":false,"description":"Constrains the popover to a specific boundary element: it stays inside it alongside its trigger (sideways for a popover above or below); away from the trigger it may pass the edge, and it flips at the viewport only."},{"name":"clearable","type":"boolean | undefined","required":false,"default":"false","description":"Shows a clear button in the search field, in the lens' place while there is a query or a selection; it resets both. None without a search field. Leave it off when the activator already clears (as BbSelect's does)."},{"name":"compact","type":"boolean | undefined","required":false,"default":"false","description":"Apply the compact density variant."},{"name":"dependencies","type":"unknown[] | undefined","required":false,"default":"[]","description":"Additional dependencies that trigger item reloading when changed."},{"name":"depsDebounceTime","type":"number | undefined","required":false,"default":"0","description":"Debounce delay (ms) for dependency-triggered reloads."},{"name":"disabled","type":"boolean | undefined","required":false,"default":"false","description":"Disables the component."},{"name":"disableFlip","type":"boolean | undefined","required":false,"default":"false","description":"Disables the automatic flip to the opposite side when the popover would overflow (flipping is on by default)."},{"name":"disableWriting","type":"boolean | \"auto\" | \"mobile\" | \"desktop\" | undefined","required":false,"default":"'auto'","description":"Hides the panel's search field: `true` everywhere, `'mobile'` / `'desktop'` on that platform only. `'auto'` hides it, per open, for an array `items` shorter than the plugin's `autoDisableWritingThreshold` (6); never for a provider or with an `option:add` listener."},{"name":"emptyText","type":"string | undefined","required":false,"description":"Message displayed when no items are available."},{"name":"enforceCoherence","type":"boolean | undefined","required":false,"default":"false","description":"Drops the picks the items no longer contain (single: `null`). Checked after every applied, successful load whose `reason` is not `'search'` (an empty one included), against the FETCHED rows only (a `stash` does not count); a search or failed load never prunes."},{"name":"failedText","type":"string | undefined","required":false,"default":"the localized `common.failedText` (\"Couldn't load items\")","description":"Message displayed in the empty state while the latest load FAILED (the provider threw): the twin of `emptyText` for that case."},{"name":"filterBy","type":"false | string[] | undefined","required":false,"default":"[]","description":"What typing filters on: empty = the display text and description; item paths = those fields (`['name', 'email']`); `false` = no filtering. Use `false` when the provider matched the query on the server, or its email/accent matches show as \"No results\"."},{"name":"groupBy","type":"string | ((item: Item) => string | number | symbol) | undefined","required":false,"description":"Path to item property for grouping options."},{"name":"hasErrors","type":"boolean | undefined","required":false,"default":"false","description":"Marks the component as being in error state."},{"name":"hasWarnings","type":"boolean | undefined","required":false,"default":"false","description":"Marks the component as being in a warning state. Visually mirrors `hasErrors` but uses `--bb-warn` chrome; errors take priority when both are set."},{"name":"headerHeight","type":"number | undefined","required":false,"description":"Height of group headers in the listbox (px). Defaults to 32px (24px compact; 36px / 32px on mobile viewports). Only applies when `groupBy` is set. An explicit value wins on every viewport."},{"name":"id","type":"string | undefined","required":false,"description":"Seeds the ids the popover sets: its listbox is `<id>_listbox` (the activator's `aria-controls`) and each option's id derives from it. Generated when omitted."},{"name":"itemHeight","type":"number | undefined","required":false,"default":"28","description":"Height of the options in the listbox (px). Defaults to 28px (24px compact; 44px / 36px on mobile viewports). An explicit value wins on every viewport."},{"name":"itemProps","type":"BbSelectItemProps<Item> | undefined","required":false,"description":"ADDITIONAL row fields, never the text or value: `description` (a muted line under the label), `prepend:icon`, `append:icon`. An object of paths or getters per field, or a function of the item. Nothing is read implicitly; none shows in the trigger or the chips."},{"name":"items","type":"Item[] | ((context: BbSelectPopoverItemsContext) => Item[] | Promise<Item[]>)","required":true,"default":"[]","description":"The options: an array, or a sync or async provider given a `BbSelectPopoverItemsContext` (`query`, `reason`, `modelValue`, `signal`). Branch on `reason !== 'search'` to resolve the selection by id. A provider fails by THROWING, never by returning `[]`."},{"name":"itemText","type":"ItemAccessor<Item, string> | undefined","required":false,"default":"own `label`, else `text`, else `JSON.stringify(item)`","description":"Path to item property for display text or function to extract it.\n\nUnset: own `label`, else `text` (`{ label, value }` needs no accessor)."},{"name":"itemValue","type":"ItemAccessor<Item> | undefined","required":false,"default":"own `value`, else the whole item","description":"Path to item property for value or function to extract it.\n\nUnset: own `value`, even `null`."},{"name":"knownItems","type":"(BbSelectKnownItem | null | undefined)[] | undefined","required":false,"description":"`{ value, label }` rows naming the value the app already holds, whatever the options' shape: the activator's `text` with no request until the first open (`prefill: true` still loads). Not options; the options' accessors never run on them; slots get the row as `item` until the list brings its own."},{"name":"loading","type":"boolean | undefined","required":false,"default":"false","description":"Display the loading state styles."},{"name":"loadingText","type":"string | undefined","required":false,"description":"Message shown while items are being loaded."},{"name":"max","type":"number | undefined","required":false,"default":"Infinity","description":"Maximum number of selectable items (limits selection when `multiple` is true)."},{"name":"modelValue","type":"any","required":true,"description":"v-model value. Single value for single select, array for multiple select."},{"name":"modelValueDebounceTime","type":"number | undefined","required":false,"default":"0","description":"Debounce delay (ms) for modelValue change handling."},{"name":"multiple","type":"boolean | undefined","required":false,"default":"false","description":"Enable multiple item selection. When true, modelValue must be an array."},{"name":"offCanvasProps","type":"Partial<BbOffCanvasProps> | undefined","required":false,"description":"Props for the phone sheet (the `BbOffCanvas` that `adaptive` renders on mobile), spread over its defaults. A `pt` inside it styles only the sheet (passthrough guide § Inside the sheet)."},{"name":"offset","type":"number | undefined","required":false,"default":"4","description":"Distance (px) between the activator and the popover."},{"name":"padding","type":"number | undefined","required":false,"default":"10","description":"Minimum page padding used by floating shift middleware."},{"name":"placement","type":"Placement | undefined","required":false,"default":"\"bottom\"","values":["top","bottom","left","right","top-start","top-end","right-start","right-end","bottom-start","bottom-end","left-start","left-end"],"description":"Floating placement of the popover."},{"name":"prefill","type":"boolean | \"interaction\" | undefined","required":false,"default":"\"interaction\"","description":"When the options first load: `'interaction'` on first open, `true` on mount (and in SSR), `false` once the user types (on open with `disable-writing` or a non-empty model). An array `items` always resolves on mount; else a seeded model's text waits for the first open."},{"name":"pt","type":"PtItemMap<BbSelectPopoverPtPart, BbSelectPopoverOptionPtPart, BbSelectPopoverPtState, Item> | undefined","required":false,"description":"Passthrough, object form: the same keys as the `pt:*` attributes without the prefix. See the `pt:<part>` row."},{"name":"pt:clear","type":"PtValue | undefined","required":false},{"name":"pt:clear:disabled","type":"PtValue | undefined","required":false},{"name":"pt:clear:open","type":"PtValue | undefined","required":false},{"name":"pt:clear:selected","type":"PtValue | undefined","required":false},{"name":"pt:footer","type":"PtValue | undefined","required":false},{"name":"pt:footer:disabled","type":"PtValue | undefined","required":false},{"name":"pt:footer:open","type":"PtValue | undefined","required":false},{"name":"pt:footer:selected","type":"PtValue | undefined","required":false},{"name":"pt:header","type":"PtValue | undefined","required":false},{"name":"pt:header:disabled","type":"PtValue | undefined","required":false},{"name":"pt:header:open","type":"PtValue | undefined","required":false},{"name":"pt:header:selected","type":"PtValue | undefined","required":false},{"name":"pt:input","type":"PtValue | undefined","required":false},{"name":"pt:input:disabled","type":"PtValue | undefined","required":false},{"name":"pt:input:open","type":"PtValue | undefined","required":false},{"name":"pt:input:selected","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription","type":"PtValue | ((ctx: PtItemCtx<Item, BbSelectPopoverPtState>) => PtItemResult) | undefined","required":false},{"name":"pt:itemDescription:disabled","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription:open","type":"PtValue | undefined","required":false},{"name":"pt:itemDescription:selected","type":"PtValue | undefined","required":false},{"name":"pt:itemIcon","type":"PtValue | ((ctx: PtItemCtx<Item, BbSelectPopoverPtState>) => PtItemResult) | undefined","required":false},{"name":"pt:itemIcon:disabled","type":"PtValue | undefined","required":false},{"name":"pt:itemIcon:open","type":"PtValue | undefined","required":false},{"name":"pt:itemIcon:selected","type":"PtValue | undefined","required":false},{"name":"pt:itemText","type":"PtValue | ((ctx: PtItemCtx<Item, BbSelectPopoverPtState>) => PtItemResult) | undefined","required":false},{"name":"pt:itemText:disabled","type":"PtValue | undefined","required":false},{"name":"pt:itemText:open","type":"PtValue | undefined","required":false},{"name":"pt:itemText:selected","type":"PtValue | undefined","required":false},{"name":"pt:list","type":"PtValue | undefined","required":false},{"name":"pt:list:disabled","type":"PtValue | undefined","required":false},{"name":"pt:list:open","type":"PtValue | undefined","required":false},{"name":"pt:list:selected","type":"PtValue | undefined","required":false},{"name":"pt:option","type":"PtValue | ((ctx: PtItemCtx<Item, BbSelectPopoverPtState>) => PtItemResult) | undefined","required":false},{"name":"pt:option:disabled","type":"PtValue | undefined","required":false},{"name":"pt:option:open","type":"PtValue | undefined","required":false},{"name":"pt:option:selected","type":"PtValue | undefined","required":false},{"name":"pt:panel","type":"PtValue | undefined","required":false},{"name":"pt:panel:disabled","type":"PtValue | undefined","required":false},{"name":"pt:panel:open","type":"PtValue | undefined","required":false},{"name":"pt:panel:selected","type":"PtValue | undefined","required":false},{"name":"pt:root","type":"PtValue | undefined","required":false},{"name":"pt:root:disabled","type":"PtValue | undefined","required":false},{"name":"pt:root:open","type":"PtValue | undefined","required":false},{"name":"pt:root:selected","type":"PtValue | undefined","required":false},{"name":"pt:sheet","type":"PtValue | undefined","required":false},{"name":"pt:sheet:disabled","type":"PtValue | undefined","required":false},{"name":"pt:sheet:open","type":"PtValue | undefined","required":false},{"name":"pt:sheet:selected","type":"PtValue | undefined","required":false},{"name":"queryDebounceTime","type":"number | undefined","required":false,"default":"500","description":"Debounce delay (ms) before triggering search queries after user input stops."},{"name":"readonly","type":"boolean | undefined","required":false,"default":"false","description":"Prevents opening the popover while keeping the activator accessible."},{"name":"searchInputAriaLabel","type":"string | undefined","required":false,"default":"`t('select.searchLabel')` (`'Search options'`)","description":"Accessible label used by the search input rendered inside the popover. Falls back to the localized `select.searchLabel` key when omitted."},{"name":"selectable","type":"boolean | ((item: Item) => boolean) | undefined","required":false,"default":"true","description":"Defines whether options are selectable. Can be a global boolean that affects all options or a function that accepts an item and returns a boolean that only affects that item. Non-selectable options are rendered disabled."},{"name":"stash","type":"boolean | undefined","required":false,"default":"false","description":"Keeps picked options named across searches: a pick stays resolvable when a later search or a failed load no longer returns it. It follows the model, and does not keep a pick valid: `enforce-coherence` still prunes it."},{"name":"transitionDuration","type":"number | undefined","required":false,"default":"250","description":"Transition duration (ms) for popover show/hide animations."},{"name":"width","type":"string | number | undefined","required":false,"default":"\"200\"","description":"Width of the popover in pixels, percentage, or `'auto'`. A bare number is read as pixels — the default is the string `'200'`, not the number `200`."}],"events":[{"name":"active","signature":"(): void","description":"Emitted when the component becomes active (focus enters it)."},{"name":"blur","signature":"(event: FocusEvent): void","description":"Emitted when the activator loses focus."},{"name":"change","signature":"(event: Event): void","description":"Emitted when the value changes via native change event."},{"name":"click","signature":"(event: MouseEvent): void","description":"Emitted when the activator is clicked."},{"name":"focus","signature":"(event: FocusEvent): void","description":"Emitted when the activator receives focus."},{"name":"hidden","signature":"(): void","description":"Emitted once the options surface has finished closing."},{"name":"hide","signature":"(): void","description":"Emitted as soon as the options surface starts to close."},{"name":"inactive","signature":"(): void","description":"Emitted when focus moves outside the entire component after it was active."},{"name":"input","signature":"(event: Event): void","description":"Emitted on native input events from the search input."},{"name":"option:add","signature":"(text: string): void","description":"Emitted when the user types a new value and confirms it (Enter key) while writing is enabled (i.e. `disableWriting` does not suppress the search input for the current surface)."},{"name":"show","signature":"(): void","description":"Emitted as soon as the options surface starts to open (the popover, or the sheet on a phone)."},{"name":"shown","signature":"(): void","description":"Emitted once the options surface is open and its open transition has finished."},{"name":"update:modelValue","signature":"(value: any): void","description":"Emitted with the next selection value whenever selection changes."}],"slots":[{"name":"activator","type":"BbSelectPopoverActivatorSlotProps","fields":["clear: () => void","close: () => Promise<void>","focus: () => void","disabled: boolean","loading: boolean","open: () => Promise<void>","props: { ref: (reference: unknown) => void; }","query: string","readonly: boolean","selectedOptions: BbSelectResolvedOption<any>[]","shown: boolean","text: string","toggle: () => Promise<void>"],"description":"Replaces the default trigger element that opens the select popover."},{"name":"empty","type":"{ query: string; focus: () => void; error: unknown; }","description":"Content shown when no options match the query or the list is empty. `error` is what the latest failed load threw, untouched (`null` when none)."},{"name":"footer","type":"BbSelectPopoverPanelSlotProps","fields":["close: () => Promise<void>","clear: () => void","focus: () => void","query: string","selectedOptions: BbSelectResolvedOption<any>[]"],"description":"Content pinned to the bottom of the panel, below the options list. Rendered in both the desktop popover and the adaptive sheet."},{"name":"group","type":"BbSelectPopoverGroupSlotProps<Item>","fields":["disabled: boolean","index: number","item: Item","length: number","text: string"],"description":"Replaces the default group header rendered above grouped options."},{"name":"header","type":"BbSelectPopoverPanelSlotProps","fields":["close: () => Promise<void>","clear: () => void","focus: () => void","query: string","selectedOptions: BbSelectResolvedOption<any>[]"],"description":"Content pinned to the top of the panel, above the search field. Rendered in both the desktop popover and the adaptive sheet."},{"name":"loading","type":"{ query: string; }","description":"Content shown inside the options dropdown while items are loading."},{"name":"option","type":"BbSelectPopoverOptionSlotProps<Item>","fields":["disabled: boolean","focused: boolean","index: number","item: Item","loading: boolean","selected: boolean","text: string","value: any","description: string"],"description":"Replaces the default rendering of each option row in the dropdown."}],"exposed":[],"models":[{"name":"modelValue","type":"any"}],"cssProps":[{"name":"--bg","value":"var(--bb-panel)","selector":".bb-listbox__outer-container"},{"name":"--min-size","value":"2.125rem","selector":".bb-select-popover__sheet-chip"},{"name":"--px","value":"0.75rem","selector":".bb-select-popover__sheet-chip"},{"name":"--clear-size","value":"1.25rem","selector":".bb-select-popover__sheet-chip"}],"pt":{"parts":[{"name":"root","description":"The floating element — an invisible positioning wrapper; a `class` on the component lands here. No node on the phone sheet: style what you see with `panel`."},{"name":"panel","description":"The options surface you see — the popover's painted bubble on desktop, the sheet itself on a phone."},{"name":"sheet","description":"The bottom sheet the surface becomes on a phone (the `BbOffCanvas` root) — never the desktop surface. Applied after `panel`, so it wins a conflict there."},{"name":"input","description":"The search field."},{"name":"clear","description":"The ✕ that empties the search field."},{"name":"list","description":"The `role=\"listbox\"` node that holds the options. Virtualised: its height is written inline and its rows are positioned by the list, which limits what a layout utility can do there. The listbox's groups and the chips are not parts."},{"name":"option","description":"One listbox option — a broadcast resolved per option. Also takes a per-item function, called with the option's raw item."},{"name":"itemText","description":"An option's label — resolved with that option's states. A custom `#option` slot replaces it. Also takes a per-item function."},{"name":"itemIcon","description":"An option's prepend / append icons (`itemProps`) — resolved with that option's states. Also takes a per-item function."},{"name":"itemDescription","description":"An option's second line (its description) — resolved with that option's states. A custom `#option` slot replaces it. Also takes a per-item function."},{"name":"header","description":"The flyout's header band."},{"name":"footer","description":"The flyout's footer band."}],"states":[{"name":"selected","description":"Per node, on `option` and its `item-*` parts: a chosen option."},{"name":"disabled","description":"Per node, on `option` and its `item-*` parts: an option that is disabled."},{"name":"open","description":"Component-wide: the options surface is showing."}]},"tree":{"bindings":[{"part":"input","target":"input.bb-select-popover__input"},{"part":"clear","target":"ClearableButton"},{"part":"panel","target":"CommonPopover"},{"part":"root","target":"CommonPopover"},{"part":"header","target":"div.bb-select-popover__header"},{"part":"footer","target":"div.bb-select-popover__footer"}],"forwards":[{"to":"BbOffCanvas","mapping":"{ header: 'header', footer: 'footer', panel: 'root', sheet: 'root' }"}],"nodes":[{"name":"BbBadge","kind":"public","vocabulary":"BbBadge","bindings":[{"part":"spinner","target":"BbSpinner"},{"part":"icon","target":"BbIcon"},{"part":"clear","target":"button.bb-badge__clear"}],"cssProps":[{"name":"--bg","documented":true,"readBy":["bb-badge"]},{"name":"--fg","documented":true,"readBy":["bb-badge","bb-badge__clear"]},{"name":"--bw","documented":true,"readBy":["bb-badge","bb-badge__clear"]},{"name":"--border-color","documented":false,"readBy":["bb-badge"]},{"name":"--ring-color","documented":true,"readBy":["bb-badge","bb-badge__clear","bb-badge__body","bb-badge--highlighted"]},{"name":"--ring-size","documented":true,"readBy":["bb-badge","bb-badge__clear","bb-badge__body","bb-badge--highlighted"]},{"name":"--min-size-md","documented":true,"readBy":["bb-badge"]},{"name":"--min-size","documented":true,"readBy":["bb-badge"]},{"name":"--elev","documented":true,"readBy":["bb-badge","bb-badge__clear","bb-badge__body","bb-badge--highlighted"]},{"name":"--r","documented":true,"readBy":["bb-badge","bb-badge__body","bb-badge__trailing","bb-badge__clear"]},{"name":"--fs","documented":true,"readBy":["bb-badge"]},{"name":"--icon-size","documented":true,"readBy":["bb-badge__icon","bb-badge__prepend-icon","bb-badge__append-icon","bb-badge__clear"]},{"name":"--gap","documented":true,"readBy":["bb-badge","bb-badge__body","bb-badge__trailing","bb-badge__clear"]},{"name":"--px","documented":true,"readBy":["bb-badge","bb-badge--icon","bb-badge__prepend-icon","bb-badge__append-icon","bb-badge--clearable"]},{"name":"--clear-size","documented":true,"readBy":["bb-badge__clear","bb-icon"]},{"name":"--bg-disabled","documented":true,"readBy":["bb-badge__body","bb-base-button--disabled","bb-badge--loading"]},{"name":"--fg-disabled","documented":true,"readBy":["bb-badge__body","bb-base-button--disabled","bb-badge--loading"]},{"name":"--border-disabled","documented":true,"readBy":["bb-badge__body","bb-base-button--disabled","bb-badge--loading"]},{"name":"--pad-left","documented":true,"readBy":["bb-badge__body"]},{"name":"--pad-right","documented":false,"readBy":["bb-badge__body","bb-badge__clear"]},{"name":"--size","documented":false}],"children":[{"name":"BbIcon","kind":"public","cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"BbSpinner","kind":"public","children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]}]},{"name":"BadgeBodyContent","kind":"internal","children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"BbSpinner","kind":"public","repeated":true}]}]},{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"BbOffCanvas","kind":"public","vocabulary":"BbOffCanvas","bindings":[{"part":"header","target":"div.bb-offcanvas__header"},{"part":"title","target":"span.bb-offcanvas__title"},{"part":"description","target":"p.bb-offcanvas__description"},{"part":"close","target":"CloseButton"},{"part":"content","target":"div.bb-offcanvas__content"},{"part":"footer","target":"div.bb-offcanvas__footer"}],"cssProps":[{"name":"--translate-x","documented":false,"readBy":["bb-offcanvas"]},{"name":"--translate-y","documented":false,"readBy":["bb-offcanvas"]},{"name":"--translate","documented":false,"readBy":["bb-offcanvas"]},{"name":"--stack-x","documented":true,"readBy":["bb-offcanvas"]},{"name":"--stack-y","documented":false,"readBy":["bb-offcanvas"]},{"name":"--snap-y","documented":true,"readBy":["bb-offcanvas","bb-offcanvas__footer","bb-offcanvas--snap","bb-offcanvas--bottom"]},{"name":"--snap-floor","documented":false,"readBy":["bb-offcanvas__footer"]},{"name":"--stack-fill","documented":true,"readBy":["bb-offcanvas","bb-offcanvas--right","bb-offcanvas--left","bb-offcanvas--top","bb-offcanvas--bottom"]},{"name":"--stack-transition-duration","documented":true,"readBy":["bb-offcanvas"]},{"name":"--px","documented":true,"readBy":["bb-offcanvas__header","bb-close-button","bb-offcanvas__content","bb-offcanvas__footer"]},{"name":"--py","documented":false,"readBy":["bb-offcanvas__footer","bb-offcanvas__content","bb-offcanvas__header","bb-close-button"]},{"name":"--handle-w","documented":true,"readBy":["bb-offcanvas__handle"]},{"name":"--handle-h","documented":true,"readBy":["bb-offcanvas__handle"]},{"name":"--handle-bg","documented":true,"readBy":["bb-offcanvas__handle"]},{"name":"--transition-timing-function","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--open"]},{"name":"--bg","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--snap","bb-offcanvas--bottom"]},{"name":"--fg","documented":false,"readBy":["bb-offcanvas"]},{"name":"--safe-top","documented":true,"readBy":["bb-offcanvas","bb-offcanvas--left","bb-offcanvas--right","bb-offcanvas--top","bb-offcanvas--fullscreen"]},{"name":"--safe-right","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--right","bb-offcanvas--top","bb-offcanvas--bottom","bb-offcanvas--fullscreen"]},{"name":"--safe-bottom","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--left","bb-offcanvas--right","bb-offcanvas--bottom","bb-offcanvas--fullscreen"]},{"name":"--safe-left","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--left","bb-offcanvas--top","bb-offcanvas--bottom","bb-offcanvas--fullscreen"]},{"name":"--inset-top","documented":false,"readBy":["bb-offcanvas__content","bb-offcanvas__header"]},{"name":"--inset-right","documented":false,"readBy":["bb-offcanvas__header","bb-offcanvas__content","bb-offcanvas__footer"]},{"name":"--inset-bottom","documented":false,"readBy":["bb-offcanvas__footer","bb-offcanvas__content"]},{"name":"--inset-left","documented":false,"readBy":["bb-offcanvas__header","bb-offcanvas__content","bb-offcanvas__footer"]},{"name":"--close-size","documented":true,"readBy":["bb-close-button"]},{"name":"--gap","documented":false,"readBy":["bb-offcanvas__footer"]}],"children":[{"name":"CloseButton","kind":"internal","cssProps":[{"name":"--size","documented":true,"readBy":["bb-close-button"]},{"name":"--p","documented":true,"readBy":["bb-close-button"]}]}]},{"name":"ClearableButton","kind":"internal","children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]}]},{"name":"CommonPopover","kind":"internal"},{"name":"ErrorIcon","kind":"internal","cssProps":[{"name":"--accent","documented":false,"readBy":["bb-error-icon"]}],"children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]}]},{"name":"WarningIcon","kind":"internal","cssProps":[{"name":"--accent","documented":false,"readBy":["bb-warning-icon"]}],"children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]}]},{"name":"ListBox","kind":"internal","children":[{"name":"FlatListBox","kind":"internal","vocabulary":"BbSelectPopover","bindings":[{"part":"list","target":"span.bb-listbox__list"},{"part":"option","target":"span.bb-listbox__option"},{"part":"itemIcon","target":"BbIcon"},{"part":"itemText","target":"span.bb-listbox__item-text"},{"part":"itemDescription","target":"span.bb-listbox__item-description"}],"children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"ErrorIcon","kind":"internal","repeated":true,"cssProps":[{"name":"--accent","documented":false,"readBy":["bb-error-icon"]}]}]},{"name":"GroupedListBox","kind":"internal","vocabulary":"BbSelectPopover","bindings":[{"part":"list","target":"span.bb-listbox__list"},{"part":"option","target":"span.bb-listbox__option"},{"part":"itemIcon","target":"BbIcon"},{"part":"itemText","target":"span.bb-listbox__item-text"},{"part":"itemDescription","target":"span.bb-listbox__item-description"}],"children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"ErrorIcon","kind":"internal","repeated":true,"cssProps":[{"name":"--accent","documented":false,"readBy":["bb-error-icon"]}]}]}]},{"name":"BbSmoothHeight","kind":"public"}]},"css":{"classes":{"bb-listbox":["","--compact","--described","--empty","--grouped","--loading","--multiple","--open","__empty","__failed","__failed--divided","__failed-icon","__failed-text","__group","__group-header","__group-header-label","__inner-container","__item-description","__item-icon","__item-text","__list","__loading","__loading--below","__option","__option--disabled","__option--focused","__option--selected","__option-append-icon","__option-check","__option-content","__option-prepend-icon","__outer-container"],"bb-select-known-items":[""],"bb-select-popover":["","--clearable-active","--errors","--loading","--reloading","--sheet","--warnings","__clear","__focus-proxy","__footer","__header","__input","__panel","__search-container","__search-error-icon","__search-icon","__search-strip","__search-warning-icon","__sheet","__sheet-chip","__sheet-chips","__sheet-selection"],"bb-select-popover-escape":[""],"bb-select-sheet-chip-attrs":[""]},"locals":["--bg","--close-size","--color-gray-200","--group-header-height","--option-font-size","--option-h","--option-height","--py","--transition-duration","--w"]},"removed":[{"name":"allowWriting","new":"disableWriting","since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-select-popover.md","silent":true,"fix":{"kind":"invert","valueMap":{"not-mobile":"mobile"}}},{"name":"arrowPadding","new":null,"since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-select-popover.md","silent":true,"fix":{"kind":"remove"}},{"name":"flip","new":"disableFlip","since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-select-popover.md","silent":true,"fix":{"kind":"invert"}},{"name":"hideArrow","new":null,"since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-select-popover.md","silent":true,"fix":{"kind":"remove"}},{"name":"showArrow","new":null,"since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-select-popover.md","silent":true,"fix":{"kind":"remove"}},{"name":"hasWarning","new":"hasWarnings","since":"3.0.0-beta.26","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"rename"}},{"name":"noDataText","new":"emptyText","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"rename"}},{"name":"no-data","new":"empty","surface":"slot","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"rename"}}],"renamed":[{"from":"allowWriting","to":"disableWriting","since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-select-popover.md","fix":{"kind":"invert","valueMap":{"not-mobile":"mobile"}}},{"from":"flip","to":"disableFlip","since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-select-popover.md","fix":{"kind":"invert"}},{"from":"hasWarning","to":"hasWarnings","since":"3.0.0-beta.26","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"rename"}},{"from":"noDataText","to":"emptyText","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"rename"}},{"from":"no-data","to":"empty","surface":"slot","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"rename"}}]},
539
539
  {"name":"BbSlider","group":"Selection","description":"Selects numeric values across a bounded range.","referenceOnly":false,"hasGuide":true,"contract":"ai/BbSlider.md","source":"ai/source/BbSlider.md","props":[{"name":"autofocus","type":"Booleanish | undefined","required":false,"description":"Focuses the field when it mounts (a dialog already open included), unless the user is typing in another field."},{"name":"compact","type":"boolean | undefined","required":false,"default":"false","description":"Compact density. The track's height follows `--bb-input-h-compact` and the label gap `--bb-label-spacing-y-compact`, so a `--bb-input-h` or `--bb-label-spacing-y` you set on the component is ignored while `compact` is on: set the `-compact` tokens instead."},{"name":"description","type":"string | undefined","required":false,"description":"Text between the label and the input. Unlike the hint it is always visible; it joins the input's `aria-describedby` after any `errors` / `warnings`, before the `hint`."},{"name":"disabled","type":"boolean | undefined","required":false,"default":"false","description":"Disables the component."},{"name":"disableThumbTranslate","type":"boolean | undefined","required":false,"default":"false","description":"Disables the proportional thumb translation that keeps the thumb on track (enabled by default). Set it when displaying ticks so they align with less effort."},{"name":"errors","type":"string | string[] | undefined","required":false,"description":"Error messages under the field, a string or array, in an `aria-live=\"polite\"` region and first in the control's `aria-describedby`, so they are re-read when it regains focus."},{"name":"formless","type":"boolean | undefined","required":false,"default":"false","description":"Keep this control out of the enclosing `BbForm` entirely: not submitted, not dirty, not reset, not validated. For a control that is not form data (a filter, a \"show advanced\" switch)."},{"name":"hasErrors","type":"boolean | undefined","required":false,"default":"false","description":"Define if the component should be in an error state. It usually attaches a CSS class for styling purposes."},{"name":"hasWarnings","type":"boolean | undefined","required":false,"default":"false","description":"Define if the component should be in a warning state. Same chrome as errors with `--bb-warn`; errors take priority."},{"name":"hideLabel","type":"boolean | undefined","required":false,"default":"false","description":"Visually hides the label of the input while maintaining accessibility."},{"name":"hint","type":"string | undefined","required":false,"description":"Text box to be displayed near the input, usually to indicate instructions."},{"name":"id","type":"string | undefined","required":false,"description":"The `id` of the native control; the label's `for` and the description and message ids derive from it. Generated when omitted."},{"name":"inputAlign","type":"FieldCrossAlign | undefined","required":false,"values":["top","center","bottom"],"description":"Vertical position of the control in a side-by-side row; not `inputPosition`, the horizontal one. Omitted, the control's first line meets the label's."},{"name":"label","type":"string","required":true,"description":"Text content of the label of the element."},{"name":"labelAlign","type":"FieldCrossAlign | undefined","required":false,"values":["top","center","bottom"],"description":"Vertical position of the label block in a side-by-side row; not `labelPosition`, the horizontal one. Omitted, the label's first line meets the control's."},{"name":"labelMode","type":"\"outside\" | \"inside\" | undefined","required":false,"description":"Label rendering mode. Sliders do not support `floating` labels."},{"name":"labelPosition","type":"\"left\" | \"center\" | \"right\" | undefined","required":false,"description":"Sets the text alignment of the label."},{"name":"layout","type":"Responsive<FieldLayout> | undefined","required":false,"description":"How label and input sit together: `'vertical'`, `'horizontal'` (50/50), `'auto'`, `'label-fill'`, `'input-fill'`, a ratio like `'xx xxxxx'`, or a per-breakpoint map (`{ default: 'vertical', md: 'xx xxxxx' }`)."},{"name":"max","type":"number | undefined","required":false,"default":"100","description":"Maximum value cap."},{"name":"maxPrecision","type":"number | undefined","required":false,"default":"2","description":"Maximum decimal places to retain in emitted values."},{"name":"min","type":"number | undefined","required":false,"default":"0","description":"Minimum value cap."},{"name":"modelValue","type":"number | number[] | null | undefined","required":false,"default":"0","description":"Used by v-model."},{"name":"name","type":"string | undefined","required":false,"description":"Defines the name of the input."},{"name":"persistentHint","type":"boolean | undefined","required":false,"default":"false","description":"Keeps the hint displayed."},{"name":"pt","type":"PtMap<BbSliderPtPart, BbSliderPtState> | undefined","required":false,"description":"Passthrough, object form: the same keys as the `pt:*` attributes without the prefix. See the `pt:<part>` row."},{"name":"pt:bar","type":"PtValue | undefined","required":false},{"name":"pt:bar:active","type":"PtValue | undefined","required":false},{"name":"pt:bar:disabled","type":"PtValue | undefined","required":false},{"name":"pt:bar:errors","type":"PtValue | undefined","required":false},{"name":"pt:bar:inRange","type":"PtValue | undefined","required":false},{"name":"pt:bar:readonly","type":"PtValue | undefined","required":false},{"name":"pt:bar:warnings","type":"PtValue | undefined","required":false},{"name":"pt:box","type":"PtValue | undefined","required":false},{"name":"pt:box:active","type":"PtValue | undefined","required":false},{"name":"pt:box:disabled","type":"PtValue | undefined","required":false},{"name":"pt:box:errors","type":"PtValue | undefined","required":false},{"name":"pt:box:inRange","type":"PtValue | undefined","required":false},{"name":"pt:box:readonly","type":"PtValue | undefined","required":false},{"name":"pt:box:warnings","type":"PtValue | undefined","required":false},{"name":"pt:description","type":"PtValue | undefined","required":false},{"name":"pt:description:active","type":"PtValue | undefined","required":false},{"name":"pt:description:disabled","type":"PtValue | undefined","required":false},{"name":"pt:description:errors","type":"PtValue | undefined","required":false},{"name":"pt:description:inRange","type":"PtValue | undefined","required":false},{"name":"pt:description:readonly","type":"PtValue | undefined","required":false},{"name":"pt:description:warnings","type":"PtValue | undefined","required":false},{"name":"pt:hint","type":"PtValue | undefined","required":false},{"name":"pt:hint:active","type":"PtValue | undefined","required":false},{"name":"pt:hint:disabled","type":"PtValue | undefined","required":false},{"name":"pt:hint:errors","type":"PtValue | undefined","required":false},{"name":"pt:hint:inRange","type":"PtValue | undefined","required":false},{"name":"pt:hint:readonly","type":"PtValue | undefined","required":false},{"name":"pt:hint:warnings","type":"PtValue | undefined","required":false},{"name":"pt:label","type":"PtValue | undefined","required":false},{"name":"pt:label:active","type":"PtValue | undefined","required":false},{"name":"pt:label:disabled","type":"PtValue | undefined","required":false},{"name":"pt:label:errors","type":"PtValue | undefined","required":false},{"name":"pt:label:inRange","type":"PtValue | undefined","required":false},{"name":"pt:label:readonly","type":"PtValue | undefined","required":false},{"name":"pt:label:warnings","type":"PtValue | undefined","required":false},{"name":"pt:message","type":"PtValue | undefined","required":false},{"name":"pt:message:active","type":"PtValue | undefined","required":false},{"name":"pt:message:disabled","type":"PtValue | undefined","required":false},{"name":"pt:message:errors","type":"PtValue | undefined","required":false},{"name":"pt:message:inRange","type":"PtValue | undefined","required":false},{"name":"pt:message:readonly","type":"PtValue | undefined","required":false},{"name":"pt:message:warnings","type":"PtValue | undefined","required":false},{"name":"pt:root","type":"PtValue | undefined","required":false},{"name":"pt:root:active","type":"PtValue | undefined","required":false},{"name":"pt:root:disabled","type":"PtValue | undefined","required":false},{"name":"pt:root:errors","type":"PtValue | undefined","required":false},{"name":"pt:root:inRange","type":"PtValue | undefined","required":false},{"name":"pt:root:readonly","type":"PtValue | undefined","required":false},{"name":"pt:root:warnings","type":"PtValue | undefined","required":false},{"name":"pt:thumb","type":"PtValue | undefined","required":false},{"name":"pt:thumb:active","type":"PtValue | undefined","required":false},{"name":"pt:thumb:disabled","type":"PtValue | undefined","required":false},{"name":"pt:thumb:errors","type":"PtValue | undefined","required":false},{"name":"pt:thumb:inRange","type":"PtValue | undefined","required":false},{"name":"pt:thumb:readonly","type":"PtValue | undefined","required":false},{"name":"pt:thumb:warnings","type":"PtValue | undefined","required":false},{"name":"pt:tick","type":"PtValue | undefined","required":false},{"name":"pt:tick:active","type":"PtValue | undefined","required":false},{"name":"pt:tick:disabled","type":"PtValue | undefined","required":false},{"name":"pt:tick:errors","type":"PtValue | undefined","required":false},{"name":"pt:tick:inRange","type":"PtValue | undefined","required":false},{"name":"pt:tick:readonly","type":"PtValue | undefined","required":false},{"name":"pt:tick:warnings","type":"PtValue | undefined","required":false},{"name":"pt:ticks","type":"PtValue | undefined","required":false},{"name":"pt:ticks:active","type":"PtValue | undefined","required":false},{"name":"pt:ticks:disabled","type":"PtValue | undefined","required":false},{"name":"pt:ticks:errors","type":"PtValue | undefined","required":false},{"name":"pt:ticks:inRange","type":"PtValue | undefined","required":false},{"name":"pt:ticks:readonly","type":"PtValue | undefined","required":false},{"name":"pt:ticks:warnings","type":"PtValue | undefined","required":false},{"name":"pt:track","type":"PtValue | undefined","required":false},{"name":"pt:track:active","type":"PtValue | undefined","required":false},{"name":"pt:track:disabled","type":"PtValue | undefined","required":false},{"name":"pt:track:errors","type":"PtValue | undefined","required":false},{"name":"pt:track:inRange","type":"PtValue | undefined","required":false},{"name":"pt:track:readonly","type":"PtValue | undefined","required":false},{"name":"pt:track:warnings","type":"PtValue | undefined","required":false},{"name":"range","type":"boolean | undefined","required":false,"default":"false","description":"Set the input as range. modelValue must be an array."},{"name":"readonly","type":"boolean | undefined","required":false,"default":"false","description":"Sets the input in a readonly state."},{"name":"reverse","type":"boolean | undefined","required":false,"default":"false","description":"Reverses the layout. Applicable in every direction the order of the label and the input is swapped."},{"name":"rules","type":"RuleExpression<number | number[] | null>","required":false,"description":"vee-validate rules for this field. Only inside a `BbForm`."},{"name":"step","type":"number | undefined","required":false,"default":"1","description":"The step attribute specifies the granularity that the value must adhere to."},{"name":"ticks","type":"boolean | undefined","required":false,"default":"false","description":"Displays ticks on step."},{"name":"validationLabel","type":"string | undefined","required":false,"description":"The field's name in validation messages (`{field}`): \"Email is not valid\". Defaults to the `label` (or `legend`), then \"This field\"; never the `name`. Set it when the label is hidden or reads badly in a sentence (icon-only, a question). `BbForm` only."},{"name":"validationMode","type":"ValidationMode | undefined","required":false,"values":["aggressive","balanced","lazy","submit-only","submit-live"],"description":"When the field validates: `aggressive` (each change), `balanced` (on leave, then live while in error), `lazy` (on leave), `submit-only`, `submit-live`. Unset: the `BbForm`'s `validation-mode`, then `formControls.validationMode` (`'balanced'`). `BbForm` only."},{"name":"warnings","type":"string | string[] | undefined","required":false,"description":"Warning messages under the field, a string or array: amber, in their own `aria-live` region and in the control's `aria-describedby` after the errors. Non-empty turns on the warning state; errors win when both are set."}],"events":[{"name":"active","signature":"(): void","description":"Emitted when the slider gains focus and becomes interactive."},{"name":"focus","signature":"(event: FocusEvent): void","description":"Emitted when a thumb gains focus. Forwards the original DOM `FocusEvent`."},{"name":"inactive","signature":"(): void","description":"Emitted when focus/click moves outside the slider after it was active."},{"name":"keydown","signature":"(event: KeyboardEvent): void","description":"Emitted for keyboard interaction on a thumb. Forwards the original DOM `KeyboardEvent`."},{"name":"pointerdown","signature":"(event: PointerEvent): void","description":"Emitted when a pointer device is pressed on a thumb. Forwards the original DOM `PointerEvent`."},{"name":"pointermove","signature":"(event: PointerEvent): void","description":"Emitted as a pointer device moves while dragging a thumb. Forwards the original DOM `PointerEvent`."},{"name":"pointerup","signature":"(event: PointerEvent): void","description":"Emitted when a pointer device is released after dragging. Forwards the original DOM `PointerEvent`."},{"name":"update:modelValue","signature":"(value: number | number[]): void","description":"Emitted with new value(s) whenever the slider position changes. Single number for single slider, array for range mode."}],"slots":[{"name":"append","type":"BbSliderStepSlotProps","fields":["increase: () => void","decrease: () => void","disabled: boolean"],"description":"Content rendered after the slider track, typically used to add a max-value label or button."},{"name":"description","type":"BbSliderDescriptionSlotProps","fields":["text: string","hasErrors: boolean","hasWarnings: boolean"],"description":"Replaces the description text. Provided alone (no `description` prop) it still renders the description region and wires it into `aria-describedby`."},{"name":"label","type":"BbSliderLabelSlotProps","fields":["showAsterisk?: boolean","text: string","hasErrors: boolean","hasWarnings: boolean"],"description":"Replaces the default label text rendered above the slider."},{"name":"prepend","type":"BbSliderStepSlotProps","fields":["increase: () => void","decrease: () => void","disabled: boolean"],"description":"Content rendered before the slider track, typically used to add a min-value label or button."},{"name":"thumb","type":"BbSliderThumbSlotProps","fields":["value: number","percent: number","focused: boolean"],"description":"Fallback thumb used for non-range sliders (or inside `thumb:higher`/`thumb:lower` when not overridden separately)."},{"name":"thumb:higher","type":"BbSliderThumbSlotProps","fields":["value: number","percent: number","focused: boolean"],"description":"Replaces the default higher-value thumb in range mode (`range: true`)."},{"name":"thumb:lower","type":"BbSliderThumbSlotProps","fields":["value: number","percent: number","focused: boolean"],"description":"Replaces the default lower-value thumb in range mode (`range: true`)."},{"name":"tick","type":"BbSliderTickSlotProps","fields":["value: number","percent: number","active: boolean"],"description":"Replaces the default tick mark rendered at each step when ticks are enabled."}],"exposed":[],"models":[{"name":"modelValue","type":"number | number[] | null | undefined"}],"cssProps":[{"name":"--thumb","value":"12px","selector":".bb-slider__body","description":"thumb diameter (square, then `border-radius: 50%`)"},{"name":"--track","value":"4px","selector":".bb-slider__body","description":"rail thickness"},{"name":"--track-color","value":"var(--bb-track)","selector":".bb-slider__body","description":"The recessed rail surface — the same token the switch track reads, which is what design-tokens.md has always documented it as (\"switch/slider rails\"). It was `--bb-muted` (6% of text), a chrome wash so faint the unfilled rail barely read, and a theme that set `--bb-track` moved the switch and nothing else."},{"name":"--py","value":"calc((var(--thumb) - var(--track)) / 2)","selector":".bb-slider__body","description":"Room above and below the rail for the thumb's overhang."},{"name":"--control-h","value":"var(--bb-input-h)","selector":".bb-slider__body","description":"Row height; --compact swaps in the compact input height."},{"name":"--px","value":"0px","selector":".bb-slider__body","description":"inner left/right padding of the box"},{"name":"--track-inset","value":"0px","selector":".bb-slider__body","description":"How far the rail and the tick row are held off both ends."},{"name":"--inside-label-clearance","value":"0px","selector":".bb-slider__body","description":"height added for the label line"},{"name":"--inside-label-track-offset","value":"0px","selector":".bb-slider__body","description":"How far rail and thumbs drop from centre to clear that line."},{"name":"--bg","value":"transparent","selector":".bb-slider__body","description":"the box's fill"},{"name":"--bg-disabled","value":"transparent","selector":".bb-slider__body","description":"fill while disabled"},{"name":"--bw","value":"0px","selector":".bb-slider__body","description":"border width"},{"name":"--border-color","value":"var(--bb-field-border)","selector":".bb-slider__body","description":"resting border"},{"name":"--border-focus","value":"var(--bb-border)","selector":".bb-slider__body","description":"Border while a thumb is focused or held; the errors and warnings blocks below paint the resting border with it too."},{"name":"--elev","value":"0px 0px 0px 0px transparent","selector":".bb-slider__body","description":"resting lift of the box"},{"name":"--ring-size","value":"0px","selector":".bb-slider__body","description":"Width of the box's focus ring; its colour is --ring-color below. The thumb's halo keeps --bb-ring-size, so a bare slider still has one."},{"name":"--accent","value":"var(--bb-primary)","selector":".bb-slider__body","description":"The bar (`__bar`, the selected span, sized from JS), and the base of --ring-color below."},{"name":"--ring-color","value":"color-mix( in oklab, var(--accent) var(--bb-ring-opacity), transparent )","selector":".bb-slider__body","description":"Halo around the thumb on hover and focus; errors and warnings re-point it."},{"name":"--r","value":"var(--bb-radius)","selector":".bb-slider__body","description":"Rail rounding: all four corners of the rail, the leading pair on the selected span."},{"name":"--centre","value":"calc( (var(--control-h) + var(--inside-label-clearance)) / 2 - var(--bw) + var(--inside-label-track-offset) )","selector":".bb-slider__box","description":"The rail's centre line, from the top of the box's padding box: the middle of the control row. A fixed offset, not 50%, so the rail and the thumbs stay put when the tick row below grows the box. Declared here, on the box, so a --bw or --control-h set through pt:box is the one it reads."},{"name":"--bg","value":"var(--bb-panel)","selector":".bb-slider__thumb"},{"name":"--elev","value":"var(--bb-elev-sm)","selector":".bb-slider__thumb","description":"Small-chrome resting lift, DECLARED here so it is sealed: an ancestor that sets `--elev` for its own plate must not reach in and lift this. Same tier and same name as the checkbox and radio glyphs."},{"name":"--border-color","value":"per variant","selector":"pt:box","description":"The resting border, at the fixed --bb-border-w. Errors and warnings paint their frame over it, so `pt:box=\"[--border-color:…]\"` recolours the rest without hiding the state; a plain `border-*` utility on the base pt:box would hide it (ESLint `no-box-border-color`)."}],"pt":{"parts":[{"name":"root","description":"The slider's container: the label, the track and the lines under them."},{"name":"label","description":"The label text (the `label` prop)."},{"name":"description","description":"The muted line under the label (the `description` prop)."},{"name":"message","description":"The errors / warnings line. A node of its own: it can show at the same time as `hint`."},{"name":"hint","description":"The helper line (the `hint` prop)."},{"name":"box","description":"The box around the rail, ticks and thumbs: bare by default, the bordered field look in inside-label mode. The slider's look locals (`--accent`, `--track-color`, `--thumb`, `--track`, `--bg`, `--bw`, …) set here reach everything inside."},{"name":"track","description":"The rail the thumbs slide on: its full length, painted with `--track-color`."},{"name":"bar","description":"The coloured bar on the rail: from the start to the value, or between the two thumbs in `range` mode. Painted with `--accent`; its size and position are set from the value (the same word as BbProgress's fill)."},{"name":"ticks","description":"The row that holds the tick marks (`ticks` prop)."},{"name":"tick","description":"Every tick mark; a broadcast, resolved per tick with its own `inRange`. Its content is the `tick` slot."},{"name":"thumb","description":"Every handle — one, or two in `range` mode; a broadcast."}],"states":[{"name":"inRange","description":"Per node, on `tick`: the tick sits inside the selected span (under the `bar`)."},{"name":"readonly","description":"Component-wide: the slider is `readonly`."},{"name":"disabled","description":"Component-wide: the slider is `disabled`."},{"name":"warnings","description":"Component-wide: the slider shows warnings and no errors."},{"name":"errors","description":"Component-wide: the slider shows errors."},{"name":"active","description":"Component-wide: the slider is engaged — a thumb focused or dragged, until focus and pointer leave it."}]},"tree":{"bindings":[{"part":"box","target":"span.bb-slider__box"},{"part":"ticks","target":"span.bb-slider__ticks"},{"part":"tick","target":"span.bb-slider__tick"},{"part":"track","target":"span.bb-slider__track"},{"part":"bar","target":"span"},{"part":"thumb","target":"span.bb-slider__thumb"}],"nodes":[{"name":"CommonField","kind":"internal","vocabulary":"BbSlider","bindings":[{"part":"root","target":"div.bb-field"},{"part":"label","target":"component"},{"part":"description","target":"span.bb-field__description"},{"part":"hint","target":"span.bb-field__hint"},{"part":"counter","target":"span.bb-field__counter"},{"part":"message","target":"div.bb-field__message"}],"cssProps":[{"name":"--ctrl-line","documented":true,"readBy":["bb-field__label","bb-field__input-wrapper"]}],"children":[{"name":"BbAsterisk","kind":"public"}]}]},"css":{"classes":{"bb-slider":["","__bar","__body","__body--compact","__body--disabled","__body--errors","__body--readonly","__body--warnings","__box","__thumb","__thumb--focused","__thumb--higher","__thumb--lower","__thumb-container","__tick","__tick--in-range","__ticks","__track"]},"locals":["--accent","--bg","--bg-disabled","--border-color","--border-focus","--bw","--centre","--color-gray-200","--control-h","--elev","--hit","--inside-label-clearance","--inside-label-track-offset","--px","--py","--r","--ring-color","--ring-size","--thumb","--track","--track-color","--track-inset"]},"attrTargets":["div"],"removed":[{"name":"color","new":null,"since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-slider.md","silent":true,"fix":{"kind":"manual"}},{"name":"thumbTranslate","new":"disableThumbTranslate","since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-slider.md","silent":true,"fix":{"kind":"invert"}},{"name":"hasWarning","new":"hasWarnings","since":"3.0.0-beta.26","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"rename"}},{"name":"direction","new":"layout","since":"3.0.0-beta.33","migration":"ai/guides/migration/components/bb-slider.md","silent":true,"fix":{"kind":"rename"}},{"name":"vid","new":null,"hint":"a display name (v2: `vid=\"Email address\"`) is now `validation-label`; a field path (3.0 betas: `vid=\"address.city\"`) is now `name` (brackets for a native post: `address[city]`). `check --fix` picks by the value","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"byValue","display":"validationLabel","key":"name"}},{"name":"validateOn","new":"validationMode","hint":"an array of events became one mode (`aggressive` | `balanced` | `lazy` | `submit-only` | `submit-live`). The old defaults (`['blur']`, `['inactive']`, a toggle's `['update:modelValue', 'change', 'blur']`) are `balanced`, the new default: delete the prop. A text field on `['update:modelValue']` is `validation-mode=\"aggressive\"`. Set it once on `<BbForm validation-mode>` instead of per field","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"manual"}},{"name":"required","new":null,"hint":"a slider's role cannot carry `required`, so it carries none (like BbCheckboxGroup / BbSwitchGroup). Delete the prop; inside a BbForm a `required` rule or the schema still validates it and shows the asterisk","since":"3.0.0-beta.42","migration":"ai/guides/migration/components/bb-slider.md","silent":true,"fix":{"kind":"manual"}}],"renamed":[{"from":"thumbTranslate","to":"disableThumbTranslate","since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-slider.md","fix":{"kind":"invert"}},{"from":"hasWarning","to":"hasWarnings","since":"3.0.0-beta.26","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"rename"}},{"from":"direction","to":"layout","since":"3.0.0-beta.33","migration":"ai/guides/migration/components/bb-slider.md","fix":{"kind":"rename"}},{"from":"validateOn","to":"validationMode","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","fix":{"kind":"manual"}}]},
540
540
  {"name":"BbSmoothHeight","group":"Layout & Utility","description":"Animates height transitions for dynamic content.","referenceOnly":false,"hasGuide":true,"contract":"ai/BbSmoothHeight.md","source":"ai/source/BbSmoothHeight.md","props":[{"name":"disabled","type":"boolean | undefined","required":false,"default":"false","description":"Disable smooth-height behavior and allow natural content height."},{"name":"mutationOptions","type":"MutationObserverInit | undefined","required":false,"default":"{ childList: true }","description":"Options to pass to the MutationObserver."},{"name":"pt","type":"PtMap<\"root\", never> | undefined","required":false,"description":"Passthrough, object form: the same keys as the `pt:*` attributes without the prefix. See the `pt:<part>` row."},{"name":"pt:root","type":"PtValue | undefined","required":false},{"name":"resizeOptions","type":"ResizeObserverOptions | undefined","required":false,"description":"Options to pass to the ResizeObserver."},{"name":"strategy","type":"\"resize\" | \"mutation\" | undefined","required":false,"default":"\"resize\"","description":"Define which strategy to use. By default `'resize'` is used, which means the component will update on resizing. You can also define `'mutation'` to use a MutationObserver."},{"name":"tag","type":"LayoutTag | undefined","required":false,"default":"\"div\"","values":["div","span"],"description":"Element rendered as the component's wrapper."},{"name":"transitionDuration","type":"number | undefined","required":false,"default":"250","description":"How long the transition has to last in milliseconds"}],"events":[],"slots":[{"name":"default","type":"object","description":"Content whose height changes are animated with a smooth transition."}],"exposed":[],"models":[],"pt":{"parts":[{"name":"root","description":"The box whose height animates."}],"states":[]},"css":{"classes":{"bb-smooth-height":["","--disabled","__content"]},"locals":["--color-gray-200","--transition-duration"]}},
541
541
  {"name":"BbSpinner","group":"Feedback","description":"Indicates ongoing loading or pending operations.","referenceOnly":false,"hasGuide":true,"contract":"ai/BbSpinner.md","source":"ai/source/BbSpinner.md","props":[{"name":"label","type":"string | undefined","required":false,"description":"Accessible loading announcement. When set, the spinner is wrapped in a `role=\"status\"` element containing this text rendered `bb-sr-only`, so screen readers announce the loading state. When omitted the markup is unchanged and the spinner is purely decorative."},{"name":"pt","type":"PtMap<\"root\", never> | undefined","required":false,"description":"Passthrough, object form: the same keys as the `pt:*` attributes without the prefix. See the `pt:<part>` row."},{"name":"pt:root","type":"PtValue | undefined","required":false},{"name":"size","type":"number | CssSize | keyof Sizes | undefined","required":false,"default":"\"md\"","description":"Defines the component size.\n\nAccepted values:\n- A key from the provided size map (`keyof T`), e.g. `'sm' | 'md' | 'lg'`\n- A custom CSS size string (e.g. `'20px'`, `'1.5rem'`, `'2em'`)\n- A number, typically interpreted as pixels by size parsers"}],"events":[],"slots":[],"exposed":[],"models":[],"pt":{"parts":[{"name":"root","description":"The spinning glyph. With a `label`, the status wrapper around it is not a part."}],"states":[]},"tree":{"nodes":[{"name":"BbIcon","kind":"public","cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]}]},"css":{"classes":{"bb-spinner":["","__circle","__circle--1","__circle--10","__circle--11","__circle--2","__circle--3","__circle--4","__circle--5","__circle--6","__circle--7","__circle--8","__circle--9"]},"locals":["--color-gray-200","--size"]},"attrTargets":["svg"],"removed":[{"name":"color","new":null,"since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-spinner.md","silent":true,"fix":{"kind":"manual"}}]},