bitboss-ui 3.0.0-beta.5 → 3.0.0-beta.51

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 (1286) hide show
  1. package/README.md +467 -99
  2. package/bin/bitboss-ui-mcp.mjs +2685 -124
  3. package/bin/bitboss-ui.mjs +1054 -80
  4. package/dist/ai/BbAccordion.md +202 -58
  5. package/dist/ai/BbAlert.md +150 -32
  6. package/dist/ai/BbAsterisk.md +67 -4
  7. package/dist/ai/BbAvatar.md +202 -56
  8. package/dist/ai/BbBadge.md +256 -50
  9. package/dist/ai/BbBadgeButton.md +77 -21
  10. package/dist/ai/BbBaseButton.md +137 -51
  11. package/dist/ai/BbBaseCheckboxIcon.md +166 -39
  12. package/dist/ai/BbBaseRadioIcon.md +164 -40
  13. package/dist/ai/BbBaseSwitchIcon.md +171 -41
  14. package/dist/ai/BbBreadcrumbs.md +280 -104
  15. package/dist/ai/BbButton.md +448 -111
  16. package/dist/ai/BbCalendar.md +688 -0
  17. package/dist/ai/BbCheckbox.md +258 -82
  18. package/dist/ai/BbCheckboxGroup.md +597 -83
  19. package/dist/ai/BbCollapsible.md +161 -40
  20. package/dist/ai/BbColorInput.md +331 -83
  21. package/dist/ai/BbColorPalette.md +273 -67
  22. package/dist/ai/BbConfirm.md +228 -51
  23. package/dist/ai/BbConfirmPortal.md +2 -2
  24. package/dist/ai/BbDatePicker.md +275 -40
  25. package/dist/ai/BbDatePickerInput.md +364 -112
  26. package/dist/ai/BbDialog.md +512 -108
  27. package/dist/ai/BbDropdown.md +1339 -206
  28. package/dist/ai/BbDropdownButton.md +290 -107
  29. package/dist/ai/BbDropdownGroup.md +6 -6
  30. package/dist/ai/BbDropzone.md +380 -72
  31. package/dist/ai/BbForm.md +1496 -46
  32. package/dist/ai/BbHoverCard.md +527 -0
  33. package/dist/ai/BbHoverCardPortal.md +29 -0
  34. package/dist/ai/BbIcon.md +125 -40
  35. package/dist/ai/BbIndicator.md +79 -12
  36. package/dist/ai/BbNumberInput.md +352 -101
  37. package/dist/ai/BbOffCanvas.md +403 -96
  38. package/dist/ai/BbPagination.md +204 -34
  39. package/dist/ai/BbPopover.md +360 -64
  40. package/dist/ai/BbPopoverPortal.md +29 -0
  41. package/dist/ai/BbProgress.md +182 -90
  42. package/dist/ai/BbPtScope.md +136 -0
  43. package/dist/ai/BbRadio.md +242 -43
  44. package/dist/ai/BbRadioGroup.md +558 -111
  45. package/dist/ai/BbRating.md +256 -62
  46. package/dist/ai/BbSelect.md +1123 -290
  47. package/dist/ai/BbSelectPopover.md +677 -192
  48. package/dist/ai/BbSlider.md +285 -80
  49. package/dist/ai/BbSmoothHeight.md +144 -37
  50. package/dist/ai/BbSpinner.md +179 -81
  51. package/dist/ai/BbSwitch.md +276 -63
  52. package/dist/ai/BbSwitchGroup.md +421 -87
  53. package/dist/ai/BbTable.md +2207 -357
  54. package/dist/ai/BbTabs.md +992 -231
  55. package/dist/ai/BbTabsList.md +81 -7
  56. package/dist/ai/BbTabsPanels.md +77 -0
  57. package/dist/ai/BbTabsRoot.md +18 -16
  58. package/dist/ai/BbTag.md +272 -81
  59. package/dist/ai/BbTextInput.md +539 -107
  60. package/dist/ai/BbTextarea.md +415 -139
  61. package/dist/ai/BbTimePicker.md +170 -27
  62. package/dist/ai/BbTimePickerInput.md +292 -50
  63. package/dist/ai/BbToast.md +287 -40
  64. package/dist/ai/BbToastPortal.md +3 -3
  65. package/dist/ai/BbTooltip.md +231 -46
  66. package/dist/ai/BbTree.md +272 -94
  67. package/dist/ai/ChipsBox.md +46 -2
  68. package/dist/ai/ClearableButton.md +12 -0
  69. package/dist/ai/CommaBox.md +2 -1
  70. package/dist/ai/CommonField.md +75 -0
  71. package/dist/ai/CommonFieldInput.md +91 -0
  72. package/dist/ai/CommonPopover.md +17 -12
  73. package/dist/ai/CommonTimeSelector.md +63 -0
  74. package/dist/ai/ErrorIcon.md +20 -0
  75. package/dist/ai/FlatListBox.md +42 -11
  76. package/dist/ai/GroupedListBox.md +43 -12
  77. package/dist/ai/ListBox.md +47 -11
  78. package/dist/ai/OptionsContainer.md +17 -10
  79. package/dist/ai/WarningIcon.md +20 -0
  80. package/dist/ai/changelog.json +5763 -141
  81. package/dist/ai/components.json +477 -16271
  82. package/dist/ai/composables/useBbConfig.md +72 -11
  83. package/dist/ai/composables/useBbDropdownContext.md +168 -0
  84. package/dist/ai/composables/useBbFormContext.md +51 -24
  85. package/dist/ai/composables/useBbFormField.md +183 -0
  86. package/dist/ai/composables/useBbTableContext.md +41 -19
  87. package/dist/ai/composables/useBbTabsContext.md +14 -14
  88. package/dist/ai/composables/useConfirm.md +16 -8
  89. package/dist/ai/composables/useCountdown.md +1 -1
  90. package/dist/ai/composables/useId.md +10 -10
  91. package/dist/ai/composables/useMobile.md +17 -10
  92. package/dist/ai/composables/useToast.md +25 -19
  93. package/dist/ai/design-tokens.json +967 -0
  94. package/dist/ai/design-tokens.manifest.yaml +175 -0
  95. package/dist/ai/guides/agent-contract.md +185 -23
  96. package/dist/ai/guides/ai-router.md +87 -43
  97. package/dist/ai/guides/app-layout.md +8 -4
  98. package/dist/ai/guides/coherence-playbook.md +25 -21
  99. package/dist/ai/guides/component-picker.md +61 -46
  100. package/dist/ai/guides/design-language.md +282 -99
  101. package/dist/ai/guides/design-tokens.md +600 -117
  102. package/dist/ai/guides/fetch-items-playbook.md +127 -81
  103. package/dist/ai/guides/icons-policy.md +75 -45
  104. package/dist/ai/guides/inertia-helpers.md +201 -82
  105. package/dist/ai/guides/inline-edit-playbook.md +13 -6
  106. package/dist/ai/guides/installation-and-plugin-setup.md +941 -88
  107. package/dist/ai/guides/migration/components/bb-accordion.md +37 -0
  108. package/dist/ai/guides/migration/components/bb-alert.md +2 -2
  109. package/dist/ai/guides/migration/components/bb-avatar.md +13 -14
  110. package/dist/ai/guides/migration/components/bb-badge.md +5 -5
  111. package/dist/ai/guides/migration/components/bb-breadcrumbs.md +13 -10
  112. package/dist/ai/guides/migration/components/bb-button.md +80 -20
  113. package/dist/ai/guides/migration/components/bb-checkbox-group.md +116 -29
  114. package/dist/ai/guides/migration/components/bb-checkbox.md +53 -10
  115. package/dist/ai/guides/migration/components/bb-chip.md +6 -6
  116. package/dist/ai/guides/migration/components/bb-collapsible.md +5 -5
  117. package/dist/ai/guides/migration/components/bb-color-input.md +5 -5
  118. package/dist/ai/guides/migration/components/bb-color-palette.md +16 -9
  119. package/dist/ai/guides/migration/components/bb-date-picker-input.md +51 -38
  120. package/dist/ai/guides/migration/components/bb-dialog.md +69 -36
  121. package/dist/ai/guides/migration/components/bb-dropdown-button.md +15 -8
  122. package/dist/ai/guides/migration/components/bb-dropdown.md +33 -9
  123. package/dist/ai/guides/migration/components/bb-dropzone.md +8 -0
  124. package/dist/ai/guides/migration/components/bb-icon.md +7 -7
  125. package/dist/ai/guides/migration/components/bb-intersection.md +1 -1
  126. package/dist/ai/guides/migration/components/bb-offcanvas.md +29 -31
  127. package/dist/ai/guides/migration/components/bb-pagination.md +10 -0
  128. package/dist/ai/guides/migration/components/bb-popover.md +19 -11
  129. package/dist/ai/guides/migration/components/bb-radio-group.md +15 -0
  130. package/dist/ai/guides/migration/components/bb-rating.md +61 -24
  131. package/dist/ai/guides/migration/components/bb-select-popover.md +20 -2
  132. package/dist/ai/guides/migration/components/bb-select.md +39 -8
  133. package/dist/ai/guides/migration/components/bb-slider.md +19 -6
  134. package/dist/ai/guides/migration/components/bb-switch-group.md +15 -0
  135. package/dist/ai/guides/migration/components/bb-table.md +586 -33
  136. package/dist/ai/guides/migration/components/bb-tabs.md +94 -43
  137. package/dist/ai/guides/migration/components/bb-tag.md +9 -7
  138. package/dist/ai/guides/migration/components/bb-text-input.md +12 -12
  139. package/dist/ai/guides/migration/components/bb-toast.md +2 -2
  140. package/dist/ai/guides/migration/components/bb-tooltip.md +19 -1
  141. package/dist/ai/guides/migration/components/bb-tree.md +11 -9
  142. package/dist/ai/guides/migration/components/use-confirm.md +9 -1
  143. package/dist/ai/guides/migration/from-async-validator.md +1252 -0
  144. package/dist/ai/guides/migration/v2-to-v3.md +1217 -277
  145. package/dist/ai/guides/migration/v3-beta-css-classes.md +753 -0
  146. package/dist/ai/guides/migration/v3-beta-tooling.md +213 -0
  147. package/dist/ai/guides/options-items-playbook.md +177 -22
  148. package/dist/ai/guides/page-shell.md +13 -7
  149. package/dist/ai/guides/passthrough.md +968 -0
  150. package/dist/ai/guides/preset-components.md +387 -0
  151. package/dist/ai/guides/ssr-prefill.md +150 -0
  152. package/dist/ai/guides/typescript-generic-components.md +87 -0
  153. package/dist/ai/guides/validated-forms.md +531 -53
  154. package/dist/ai/guides/validation-libraries.md +179 -0
  155. package/dist/ai/guides/validation-providers.md +127 -0
  156. package/dist/ai/helpers/inertia/manifest.json +636 -0
  157. package/dist/ai/helpers/inertia/types.ts +15 -0
  158. package/dist/ai/helpers/inertia/useAsyncFn.ts +110 -0
  159. package/dist/ai/helpers/inertia/useConfirmOnRouteLeave.ts +102 -0
  160. package/dist/ai/helpers/inertia/useDeleteCmd.ts +30 -0
  161. package/dist/ai/helpers/inertia/useHasChanged.ts +36 -0
  162. package/dist/ai/helpers/inertia/useIndexById.ts +23 -0
  163. package/dist/ai/helpers/inertia/useLazyProp.ts +148 -0
  164. package/dist/ai/helpers/inertia/useLazyPropGetter.ts +50 -0
  165. package/dist/ai/helpers/inertia/useLoading.ts +20 -0
  166. package/dist/ai/helpers/inertia/usePaginatedResponseContext.ts +88 -0
  167. package/dist/ai/helpers/inertia/usePromiseForm.ts +62 -0
  168. package/dist/ai/helpers/inertia/useProp.ts +63 -0
  169. package/dist/ai/helpers/inertia/useQuery.ts +19 -0
  170. package/dist/ai/helpers/inertia/useQueryObject.ts +116 -0
  171. package/dist/ai/helpers/inertia/useResourceContext.ts +69 -0
  172. package/dist/ai/helpers/inertia/useRouteQuery.ts +54 -0
  173. package/dist/ai/helpers/inertia/useScreenSizes.ts +23 -0
  174. package/dist/ai/helpers/inertia/useTableContext.ts +34 -0
  175. package/dist/ai/helpers/inertia/useTableSelectionContext.ts +48 -0
  176. package/dist/ai/helpers/inertia/useUntil.ts +33 -0
  177. package/dist/ai/helpers/inertia/utils.ts +24 -0
  178. package/dist/ai/index.md +62 -57
  179. package/dist/ai/manifest/components/BbAccordion.json +42 -0
  180. package/dist/ai/manifest/components/BbAccordion.tree.json +26 -0
  181. package/dist/ai/manifest/components/BbAlert.json +52 -0
  182. package/dist/ai/manifest/components/BbAlert.removed.json +7 -0
  183. package/dist/ai/manifest/components/BbAlert.tree.json +80 -0
  184. package/dist/ai/manifest/components/BbAsterisk.json +26 -0
  185. package/dist/ai/manifest/components/BbAsterisk.tree.json +13 -0
  186. package/dist/ai/manifest/components/BbAvatar.json +35 -0
  187. package/dist/ai/manifest/components/BbAvatar.removed.json +6 -0
  188. package/dist/ai/manifest/components/BbAvatar.tree.json +39 -0
  189. package/dist/ai/manifest/components/BbBadge.json +47 -0
  190. package/dist/ai/manifest/components/BbBadge.removed.json +6 -0
  191. package/dist/ai/manifest/components/BbBadge.tree.json +86 -0
  192. package/dist/ai/manifest/components/BbBadgeButton.json +67 -0
  193. package/dist/ai/manifest/components/BbBadgeButton.tree.json +32 -0
  194. package/dist/ai/manifest/components/BbBaseButton.json +69 -0
  195. package/dist/ai/manifest/components/BbBaseButton.tree.json +25 -0
  196. package/dist/ai/manifest/components/BbBaseCheckboxIcon.json +43 -0
  197. package/dist/ai/manifest/components/BbBaseCheckboxIcon.removed.json +6 -0
  198. package/dist/ai/manifest/components/BbBaseCheckboxIcon.tree.json +41 -0
  199. package/dist/ai/manifest/components/BbBaseRadioIcon.json +41 -0
  200. package/dist/ai/manifest/components/BbBaseRadioIcon.removed.json +6 -0
  201. package/dist/ai/manifest/components/BbBaseRadioIcon.tree.json +36 -0
  202. package/dist/ai/manifest/components/BbBaseSwitchIcon.json +43 -0
  203. package/dist/ai/manifest/components/BbBaseSwitchIcon.removed.json +6 -0
  204. package/dist/ai/manifest/components/BbBaseSwitchIcon.tree.json +44 -0
  205. package/dist/ai/manifest/components/BbBreadcrumbs.json +52 -0
  206. package/dist/ai/manifest/components/BbBreadcrumbs.removed.json +7 -0
  207. package/dist/ai/manifest/components/BbBreadcrumbs.tree.json +45 -0
  208. package/dist/ai/manifest/components/BbButton.json +95 -0
  209. package/dist/ai/manifest/components/BbButton.removed.json +10 -0
  210. package/dist/ai/manifest/components/BbButton.tree.json +206 -0
  211. package/dist/ai/manifest/components/BbCalendar.json +81 -0
  212. package/dist/ai/manifest/components/BbCalendar.removed.json +8 -0
  213. package/dist/ai/manifest/components/BbCalendar.tree.json +99 -0
  214. package/dist/ai/manifest/components/BbCheckbox.json +92 -0
  215. package/dist/ai/manifest/components/BbCheckbox.removed.json +10 -0
  216. package/dist/ai/manifest/components/BbCheckbox.tree.json +22 -0
  217. package/dist/ai/manifest/components/BbCheckboxGroup.json +122 -0
  218. package/dist/ai/manifest/components/BbCheckboxGroup.removed.json +14 -0
  219. package/dist/ai/manifest/components/BbCheckboxGroup.tree.json +61 -0
  220. package/dist/ai/manifest/components/BbCollapsible.json +32 -0
  221. package/dist/ai/manifest/components/BbCollapsible.tree.json +17 -0
  222. package/dist/ai/manifest/components/BbColorInput.json +124 -0
  223. package/dist/ai/manifest/components/BbColorInput.removed.json +12 -0
  224. package/dist/ai/manifest/components/BbColorInput.tree.json +37 -0
  225. package/dist/ai/manifest/components/BbColorPalette.json +63 -0
  226. package/dist/ai/manifest/components/BbColorPalette.removed.json +13 -0
  227. package/dist/ai/manifest/components/BbColorPalette.tree.json +55 -0
  228. package/dist/ai/manifest/components/BbConfirm.json +34 -0
  229. package/dist/ai/manifest/components/BbConfirm.tree.json +30 -0
  230. package/dist/ai/manifest/components/BbConfirmPortal.json +21 -0
  231. package/dist/ai/manifest/components/BbDatePicker.json +102 -0
  232. package/dist/ai/manifest/components/BbDatePicker.removed.json +9 -0
  233. package/dist/ai/manifest/components/BbDatePicker.tree.json +54 -0
  234. package/dist/ai/manifest/components/BbDatePickerInput.json +152 -0
  235. package/dist/ai/manifest/components/BbDatePickerInput.removed.json +18 -0
  236. package/dist/ai/manifest/components/BbDatePickerInput.tree.json +50 -0
  237. package/dist/ai/manifest/components/BbDialog.json +69 -0
  238. package/dist/ai/manifest/components/BbDialog.removed.json +10 -0
  239. package/dist/ai/manifest/components/BbDialog.tree.json +74 -0
  240. package/dist/ai/manifest/components/BbDropdown.json +93 -0
  241. package/dist/ai/manifest/components/BbDropdown.removed.json +12 -0
  242. package/dist/ai/manifest/components/BbDropdown.tree.json +122 -0
  243. package/dist/ai/manifest/components/BbDropdownButton.json +97 -0
  244. package/dist/ai/manifest/components/BbDropdownButton.removed.json +13 -0
  245. package/dist/ai/manifest/components/BbDropdownButton.tree.json +28 -0
  246. package/dist/ai/manifest/components/BbDropdownGroup.json +25 -0
  247. package/dist/ai/manifest/components/BbDropzone.json +63 -0
  248. package/dist/ai/manifest/components/BbDropzone.removed.json +8 -0
  249. package/dist/ai/manifest/components/BbDropzone.tree.json +36 -0
  250. package/dist/ai/manifest/components/BbForm.json +39 -0
  251. package/dist/ai/manifest/components/BbForm.removed.json +6 -0
  252. package/dist/ai/manifest/components/BbHoverCard.json +63 -0
  253. package/dist/ai/manifest/components/BbHoverCard.tree.json +31 -0
  254. package/dist/ai/manifest/components/BbHoverCardPortal.json +21 -0
  255. package/dist/ai/manifest/components/BbIcon.json +29 -0
  256. package/dist/ai/manifest/components/BbIcon.removed.json +7 -0
  257. package/dist/ai/manifest/components/BbIcon.tree.json +19 -0
  258. package/dist/ai/manifest/components/BbIndicator.json +39 -0
  259. package/dist/ai/manifest/components/BbIndicator.tree.json +67 -0
  260. package/dist/ai/manifest/components/BbNumberInput.json +120 -0
  261. package/dist/ai/manifest/components/BbNumberInput.removed.json +11 -0
  262. package/dist/ai/manifest/components/BbNumberInput.tree.json +28 -0
  263. package/dist/ai/manifest/components/BbOffCanvas.json +67 -0
  264. package/dist/ai/manifest/components/BbOffCanvas.removed.json +8 -0
  265. package/dist/ai/manifest/components/BbOffCanvas.tree.json +115 -0
  266. package/dist/ai/manifest/components/BbPagination.json +55 -0
  267. package/dist/ai/manifest/components/BbPagination.removed.json +9 -0
  268. package/dist/ai/manifest/components/BbPagination.tree.json +69 -0
  269. package/dist/ai/manifest/components/BbPopover.json +69 -0
  270. package/dist/ai/manifest/components/BbPopover.removed.json +16 -0
  271. package/dist/ai/manifest/components/BbPopover.tree.json +36 -0
  272. package/dist/ai/manifest/components/BbPopoverPortal.json +21 -0
  273. package/dist/ai/manifest/components/BbProgress.json +31 -0
  274. package/dist/ai/manifest/components/BbProgress.tree.json +26 -0
  275. package/dist/ai/manifest/components/BbPtScope.json +21 -0
  276. package/dist/ai/manifest/components/BbRadio.json +83 -0
  277. package/dist/ai/manifest/components/BbRadio.removed.json +8 -0
  278. package/dist/ai/manifest/components/BbRadio.tree.json +22 -0
  279. package/dist/ai/manifest/components/BbRadioGroup.json +121 -0
  280. package/dist/ai/manifest/components/BbRadioGroup.removed.json +14 -0
  281. package/dist/ai/manifest/components/BbRadioGroup.tree.json +61 -0
  282. package/dist/ai/manifest/components/BbRating.json +93 -0
  283. package/dist/ai/manifest/components/BbRating.removed.json +10 -0
  284. package/dist/ai/manifest/components/BbRating.tree.json +55 -0
  285. package/dist/ai/manifest/components/BbSelect.json +161 -0
  286. package/dist/ai/manifest/components/BbSelect.removed.json +16 -0
  287. package/dist/ai/manifest/components/BbSelect.tree.json +53 -0
  288. package/dist/ai/manifest/components/BbSelectPopover.json +114 -0
  289. package/dist/ai/manifest/components/BbSelectPopover.removed.json +13 -0
  290. package/dist/ai/manifest/components/BbSelectPopover.tree.json +112 -0
  291. package/dist/ai/manifest/components/BbSlider.json +100 -0
  292. package/dist/ai/manifest/components/BbSlider.removed.json +12 -0
  293. package/dist/ai/manifest/components/BbSlider.tree.json +89 -0
  294. package/dist/ai/manifest/components/BbSmoothHeight.json +31 -0
  295. package/dist/ai/manifest/components/BbSmoothHeight.tree.json +16 -0
  296. package/dist/ai/manifest/components/BbSpinner.json +28 -0
  297. package/dist/ai/manifest/components/BbSpinner.removed.json +6 -0
  298. package/dist/ai/manifest/components/BbSpinner.tree.json +31 -0
  299. package/dist/ai/manifest/components/BbSwitch.json +92 -0
  300. package/dist/ai/manifest/components/BbSwitch.removed.json +10 -0
  301. package/dist/ai/manifest/components/BbSwitch.tree.json +22 -0
  302. package/dist/ai/manifest/components/BbSwitchGroup.json +122 -0
  303. package/dist/ai/manifest/components/BbSwitchGroup.removed.json +14 -0
  304. package/dist/ai/manifest/components/BbSwitchGroup.tree.json +61 -0
  305. package/dist/ai/manifest/components/BbTable.json +153 -0
  306. package/dist/ai/manifest/components/BbTable.removed.json +16 -0
  307. package/dist/ai/manifest/components/BbTable.tree.json +231 -0
  308. package/dist/ai/manifest/components/BbTabs.json +77 -0
  309. package/dist/ai/manifest/components/BbTabs.removed.json +12 -0
  310. package/dist/ai/manifest/components/BbTabs.tree.json +88 -0
  311. package/dist/ai/manifest/components/BbTabsList.json +43 -0
  312. package/dist/ai/manifest/components/BbTabsList.removed.json +8 -0
  313. package/dist/ai/manifest/components/BbTabsList.tree.json +94 -0
  314. package/dist/ai/manifest/components/BbTabsPanels.json +32 -0
  315. package/dist/ai/manifest/components/BbTabsPanels.tree.json +69 -0
  316. package/dist/ai/manifest/components/BbTabsRoot.json +53 -0
  317. package/dist/ai/manifest/components/BbTabsRoot.removed.json +13 -0
  318. package/dist/ai/manifest/components/BbTag.json +120 -0
  319. package/dist/ai/manifest/components/BbTag.removed.json +13 -0
  320. package/dist/ai/manifest/components/BbTag.tree.json +40 -0
  321. package/dist/ai/manifest/components/BbTextInput.json +118 -0
  322. package/dist/ai/manifest/components/BbTextInput.removed.json +14 -0
  323. package/dist/ai/manifest/components/BbTextInput.tree.json +27 -0
  324. package/dist/ai/manifest/components/BbTextarea.json +116 -0
  325. package/dist/ai/manifest/components/BbTextarea.removed.json +11 -0
  326. package/dist/ai/manifest/components/BbTextarea.tree.json +37 -0
  327. package/dist/ai/manifest/components/BbTimePicker.json +76 -0
  328. package/dist/ai/manifest/components/BbTimePicker.tree.json +37 -0
  329. package/dist/ai/manifest/components/BbTimePickerInput.json +125 -0
  330. package/dist/ai/manifest/components/BbTimePickerInput.removed.json +11 -0
  331. package/dist/ai/manifest/components/BbTimePickerInput.tree.json +44 -0
  332. package/dist/ai/manifest/components/BbToast.json +37 -0
  333. package/dist/ai/manifest/components/BbToast.removed.json +9 -0
  334. package/dist/ai/manifest/components/BbToast.tree.json +91 -0
  335. package/dist/ai/manifest/components/BbToastPortal.json +18 -0
  336. package/dist/ai/manifest/components/BbTooltip.json +54 -0
  337. package/dist/ai/manifest/components/BbTooltip.removed.json +9 -0
  338. package/dist/ai/manifest/components/BbTooltip.tree.json +41 -0
  339. package/dist/ai/manifest/components/BbTree.json +46 -0
  340. package/dist/ai/manifest/components/BbTree.removed.json +8 -0
  341. package/dist/ai/manifest/components/BbTree.tree.json +31 -0
  342. package/dist/ai/manifest/components/ChipsBox.json +32 -0
  343. package/dist/ai/manifest/components/ChipsBox.tree.json +11 -0
  344. package/dist/ai/manifest/components/ClearableButton.json +19 -0
  345. package/dist/ai/manifest/components/ClearableButton.tree.json +19 -0
  346. package/dist/ai/manifest/components/CommaBox.json +30 -0
  347. package/dist/ai/manifest/components/CommonField.json +56 -0
  348. package/dist/ai/manifest/components/CommonField.tree.json +110 -0
  349. package/dist/ai/manifest/components/CommonFieldInput.json +47 -0
  350. package/dist/ai/manifest/components/CommonFieldInput.tree.json +95 -0
  351. package/dist/ai/manifest/components/CommonPopover.json +44 -0
  352. package/dist/ai/manifest/components/CommonPopover.tree.json +26 -0
  353. package/dist/ai/manifest/components/CommonTimeSelector.json +31 -0
  354. package/dist/ai/manifest/components/CommonTimeSelector.tree.json +43 -0
  355. package/dist/ai/manifest/components/ErrorIcon.json +17 -0
  356. package/dist/ai/manifest/components/ErrorIcon.tree.json +22 -0
  357. package/dist/ai/manifest/components/FlatListBox.json +43 -0
  358. package/dist/ai/manifest/components/FlatListBox.tree.json +16 -0
  359. package/dist/ai/manifest/components/GroupedListBox.json +45 -0
  360. package/dist/ai/manifest/components/GroupedListBox.tree.json +16 -0
  361. package/dist/ai/manifest/components/GuidesComponent.json +17 -0
  362. package/dist/ai/manifest/components/ListBox.json +43 -0
  363. package/dist/ai/manifest/components/ListBox.tree.json +9 -0
  364. package/dist/ai/manifest/components/OptionsContainer.json +45 -0
  365. package/dist/ai/manifest/components/WarningIcon.json +17 -0
  366. package/dist/ai/manifest/components/WarningIcon.tree.json +22 -0
  367. package/dist/ai/manifest/index.json +122 -0
  368. package/dist/ai/manifest/meta.json +506 -0
  369. package/dist/ai/manifest/types.advanced.json +66 -0
  370. package/dist/ai/manifest/types.api.json +52 -0
  371. package/dist/ai/manifest/types.wrapper.json +119 -0
  372. package/dist/ai/recipes/inertia/approvals-inbox.md +206 -139
  373. package/dist/ai/recipes/inertia/inline-edit-workspace.md +218 -143
  374. package/dist/ai/recipes/inertia/layout-scaffold.md +93 -58
  375. package/dist/ai/recipes/inertia/onboarding.md +114 -87
  376. package/dist/ai/recipes/inertia/ownership-atlas.md +322 -322
  377. package/dist/ai/recipes/inertia/record-form.md +421 -224
  378. package/dist/ai/recipes/inertia/records-workspace.md +600 -219
  379. package/dist/ai/recipes/inertia/settings-workspace.md +3098 -0
  380. package/dist/ai/recipes/inertia/upload-center.md +189 -177
  381. package/dist/ai/recipes/inertia/wizard-form.md +233 -100
  382. package/dist/ai/recipes/nuxt/approvals-inbox.md +272 -158
  383. package/dist/ai/recipes/nuxt/inline-edit-workspace.md +298 -166
  384. package/dist/ai/recipes/nuxt/layout-scaffold.md +94 -59
  385. package/dist/ai/recipes/nuxt/onboarding.md +178 -117
  386. package/dist/ai/recipes/nuxt/ownership-atlas.md +1406 -0
  387. package/dist/ai/recipes/nuxt/record-form.md +507 -223
  388. package/dist/ai/recipes/nuxt/records-workspace.md +653 -206
  389. package/dist/ai/recipes/nuxt/settings-workspace.md +3189 -0
  390. package/dist/ai/recipes/nuxt/upload-center.md +282 -190
  391. package/dist/ai/recipes/nuxt/wizard-form.md +251 -102
  392. package/dist/ai/recipes/vue/approvals-inbox.md +248 -146
  393. package/dist/ai/recipes/vue/inline-edit-workspace.md +278 -157
  394. package/dist/ai/recipes/vue/layout-scaffold.md +93 -58
  395. package/dist/ai/recipes/vue/onboarding.md +112 -83
  396. package/dist/ai/recipes/vue/ownership-atlas.md +1360 -0
  397. package/dist/ai/recipes/vue/record-form.md +252 -130
  398. package/dist/ai/recipes/vue/records-workspace.md +609 -191
  399. package/dist/ai/recipes/vue/settings-workspace.md +3130 -0
  400. package/dist/ai/recipes/vue/upload-center.md +229 -176
  401. package/dist/ai/recipes/vue/wizard-form.md +190 -85
  402. package/dist/ai/source/BbAccordion.md +129 -32
  403. package/dist/ai/source/BbAlert.md +214 -70
  404. package/dist/ai/source/BbAsterisk.md +54 -4
  405. package/dist/ai/source/BbAvatar.md +73 -16
  406. package/dist/ai/source/BbBadge.md +303 -105
  407. package/dist/ai/source/BbBadgeButton.md +257 -87
  408. package/dist/ai/source/BbBaseButton.md +120 -38
  409. package/dist/ai/source/BbBaseCheckboxIcon.md +153 -36
  410. package/dist/ai/source/BbBaseRadioIcon.md +124 -18
  411. package/dist/ai/source/BbBaseSwitchIcon.md +146 -33
  412. package/dist/ai/source/BbBreadcrumbs.md +437 -95
  413. package/dist/ai/source/BbButton.md +696 -198
  414. package/dist/ai/source/BbCalendar.md +1869 -0
  415. package/dist/ai/source/BbCheckbox.md +516 -78
  416. package/dist/ai/source/BbCheckboxGroup.md +1120 -113
  417. package/dist/ai/source/BbCollapsible.md +95 -11
  418. package/dist/ai/source/BbColorInput.md +626 -79
  419. package/dist/ai/source/BbColorPalette.md +1323 -70
  420. package/dist/ai/source/BbConfirm.md +167 -8
  421. package/dist/ai/source/BbConfirmPortal.md +109 -9
  422. package/dist/ai/source/BbDatePicker.md +529 -408
  423. package/dist/ai/source/BbDatePickerInput.md +2163 -154
  424. package/dist/ai/source/BbDialog.md +553 -97
  425. package/dist/ai/source/BbDropdown.md +1371 -366
  426. package/dist/ai/source/BbDropdownButton.md +434 -93
  427. package/dist/ai/source/BbDropdownGroup.md +1026 -230
  428. package/dist/ai/source/BbDropzone.md +230 -54
  429. package/dist/ai/source/BbForm.md +982 -21
  430. package/dist/ai/source/BbHoverCard.md +973 -0
  431. package/dist/ai/source/BbHoverCardPortal.md +312 -0
  432. package/dist/ai/source/BbIcon.md +139 -53
  433. package/dist/ai/source/BbIndicator.md +121 -60
  434. package/dist/ai/source/BbNumberInput.md +1579 -102
  435. package/dist/ai/source/BbOffCanvas.md +1053 -280
  436. package/dist/ai/source/BbPagination.md +238 -50
  437. package/dist/ai/source/BbPopover.md +501 -126
  438. package/dist/ai/source/BbPopoverPortal.md +370 -0
  439. package/dist/ai/source/BbProgress.md +155 -30
  440. package/dist/ai/source/BbPtScope.md +54 -0
  441. package/dist/ai/source/BbRadio.md +417 -74
  442. package/dist/ai/source/BbRadioGroup.md +1101 -133
  443. package/dist/ai/source/BbRating.md +782 -96
  444. package/dist/ai/source/BbSelect.md +1149 -133
  445. package/dist/ai/source/BbSelectPopover.md +1173 -235
  446. package/dist/ai/source/BbSlider.md +1429 -113
  447. package/dist/ai/source/BbSmoothHeight.md +59 -4
  448. package/dist/ai/source/BbSpinner.md +62 -6
  449. package/dist/ai/source/BbSwitch.md +322 -60
  450. package/dist/ai/source/BbSwitchGroup.md +869 -84
  451. package/dist/ai/source/BbTable.md +8121 -1961
  452. package/dist/ai/source/BbTabs.md +391 -124
  453. package/dist/ai/source/BbTabsList.md +520 -159
  454. package/dist/ai/source/BbTabsPanels.md +629 -0
  455. package/dist/ai/source/BbTabsRoot.md +342 -113
  456. package/dist/ai/source/BbTag.md +869 -105
  457. package/dist/ai/source/BbTextInput.md +612 -85
  458. package/dist/ai/source/BbTextarea.md +628 -81
  459. package/dist/ai/source/BbTimePicker.md +382 -72
  460. package/dist/ai/source/BbTimePickerInput.md +1340 -120
  461. package/dist/ai/source/BbToast.md +259 -80
  462. package/dist/ai/source/BbToastPortal.md +219 -72
  463. package/dist/ai/source/BbTooltip.md +295 -42
  464. package/dist/ai/source/BbTree.md +109 -14
  465. package/dist/ai/source/ChipsBox.md +25 -5
  466. package/dist/ai/source/CommaBox.md +21 -6
  467. package/dist/ai/source/CommonField.md +1700 -0
  468. package/dist/ai/source/CommonFieldInput.md +879 -0
  469. package/dist/ai/source/CommonPopover.md +153 -56
  470. package/dist/ai/source/CommonTimeSelector.md +743 -0
  471. package/dist/ai/source/ErrorIcon.md +2 -2
  472. package/dist/ai/source/FlatListBox.md +218 -18
  473. package/dist/ai/source/GroupedListBox.md +266 -45
  474. package/dist/ai/source/GuidesComponent.md +14 -7
  475. package/dist/ai/source/ListBox.md +57 -8
  476. package/dist/ai/source/OptionsContainer.md +343 -61
  477. package/dist/ai/source/WarningIcon.md +2 -2
  478. package/dist/assets/css/reset.css_inline.js +1 -1
  479. package/dist/assets/svgs/star.svg_raw.js +4 -0
  480. package/dist/components/BbAccordion/BbAccordion.vue_vue_type_script_setup_true_lang.js +59 -38
  481. package/dist/components/BbAccordion/types.d.ts +42 -3
  482. package/dist/components/BbAccordion/types.js +11 -0
  483. package/dist/components/BbAlert/BbAlert.vue.d.ts +1 -3
  484. package/dist/components/BbAlert/BbAlert.vue_vue_type_script_setup_true_lang.js +46 -30
  485. package/dist/components/BbAlert/types.d.ts +40 -9
  486. package/dist/components/BbAlert/types.js +13 -0
  487. package/dist/components/BbAsterisk/BbAsterisk.vue.d.ts +3 -1
  488. package/dist/components/BbAsterisk/BbAsterisk.vue_vue_type_script_setup_true_lang.js +23 -8
  489. package/dist/components/BbAsterisk/types.d.ts +18 -0
  490. package/dist/components/BbAsterisk/types.js +7 -0
  491. package/dist/components/BbAvatar/BbAvatar.vue.d.ts +2 -4
  492. package/dist/components/BbAvatar/BbAvatar.vue_vue_type_script_setup_true_lang.js +57 -44
  493. package/dist/components/BbAvatar/types.d.ts +23 -0
  494. package/dist/components/BbAvatar/types.js +7 -0
  495. package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +24 -18
  496. package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +96 -53
  497. package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +32 -11
  498. package/dist/components/BbBadge/badgeButtonContext.d.ts +25 -8
  499. package/dist/components/BbBadge/types.d.ts +44 -9
  500. package/dist/components/BbBadge/types.js +13 -0
  501. package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +109 -96
  502. package/dist/components/BbBaseButton/RouterComponent.vue_vue_type_script_setup_true_lang.js +11 -11
  503. package/dist/components/BbBaseButton/types.d.ts +44 -28
  504. package/dist/components/BbBaseButton/types.js +9 -2
  505. package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue_vue_type_script_setup_true_lang.js +50 -18
  506. package/dist/components/BbBaseCheckboxIcon/types.d.ts +31 -2
  507. package/dist/components/BbBaseCheckboxIcon/types.js +8 -0
  508. package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue_vue_type_script_setup_true_lang.js +45 -15
  509. package/dist/components/BbBaseRadioIcon/types.d.ts +31 -2
  510. package/dist/components/BbBaseRadioIcon/types.js +8 -0
  511. package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue_vue_type_script_setup_true_lang.js +48 -16
  512. package/dist/components/BbBaseSwitchIcon/types.d.ts +31 -2
  513. package/dist/components/BbBaseSwitchIcon/types.js +8 -0
  514. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +197 -140
  515. package/dist/components/BbBreadcrumbs/types.d.ts +62 -12
  516. package/dist/components/BbBreadcrumbs/types.js +12 -0
  517. package/dist/components/BbButton/BbButton.vue.d.ts +5 -0
  518. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +145 -101
  519. package/dist/components/BbButton/toggleRoving.d.ts +6 -0
  520. package/dist/components/BbButton/toggleRoving.js +45 -0
  521. package/dist/components/BbButton/types.d.ts +123 -13
  522. package/dist/components/BbButton/types.js +16 -0
  523. package/dist/components/BbCalendar/BbCalendar.vue.d.ts +33 -0
  524. package/dist/components/BbCalendar/BbCalendar.vue.js +6 -0
  525. package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +614 -0
  526. package/dist/components/BbCalendar/CalendarMonthPanel.vue.js +5 -0
  527. package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +126 -0
  528. package/dist/components/BbCalendar/CalendarYearPanel.vue.js +5 -0
  529. package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +129 -0
  530. package/dist/components/BbCalendar/calendarHost.d.ts +29 -0
  531. package/dist/components/BbCalendar/calendarHost.js +10 -0
  532. package/dist/components/BbCalendar/types.d.ts +216 -0
  533. package/dist/components/BbCalendar/types.js +29 -0
  534. package/dist/components/{BbBaseDatePicker/useDatePickerContext.d.ts → BbCalendar/useCalendarContext.d.ts} +10 -7
  535. package/dist/components/BbCalendar/useCalendarContext.js +11 -0
  536. package/dist/components/BbCalendar/useCalendarGrid.d.ts +211 -0
  537. package/dist/components/BbCalendar/useCalendarGrid.js +282 -0
  538. package/dist/components/BbCalendar/useDayGrid.d.ts +82 -0
  539. package/dist/components/BbCalendar/useDayGrid.js +247 -0
  540. package/dist/components/BbCalendar/useDayjsLocale.d.ts +64 -0
  541. package/dist/components/BbCalendar/useDayjsLocale.js +35 -0
  542. package/dist/components/BbCalendar/useToday.d.ts +23 -0
  543. package/dist/components/BbCalendar/useToday.js +21 -0
  544. package/dist/components/BbCheckbox/BbCheckbox.vue.d.ts +7 -7
  545. package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +224 -72
  546. package/dist/components/BbCheckbox/types.d.ts +199 -23
  547. package/dist/components/BbCheckbox/types.js +8 -0
  548. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue.d.ts +15 -3
  549. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +350 -106
  550. package/dist/components/BbCheckboxGroup/types.d.ts +241 -38
  551. package/dist/components/BbCheckboxGroup/types.js +10 -0
  552. package/dist/components/BbCollapsible/BbCollapsible.vue.d.ts +2 -1
  553. package/dist/components/BbCollapsible/BbCollapsible.vue_vue_type_script_setup_true_lang.js +41 -19
  554. package/dist/components/BbCollapsible/types.d.ts +42 -3
  555. package/dist/components/BbCollapsible/types.js +7 -0
  556. package/dist/components/BbColorInput/BbColorInput.vue.d.ts +17 -7
  557. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +339 -87
  558. package/dist/components/BbColorInput/types.d.ts +223 -23
  559. package/dist/components/BbColorInput/types.js +24 -0
  560. package/dist/components/BbColorPalette/BbColorPalette.vue.d.ts +10 -2
  561. package/dist/components/BbColorPalette/BbColorPalette.vue_vue_type_script_setup_true_lang.js +530 -108
  562. package/dist/components/BbColorPalette/types.d.ts +74 -11
  563. package/dist/components/BbColorPalette/types.js +12 -0
  564. package/dist/components/BbConfirm/BbConfirm.vue.d.ts +2 -1
  565. package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +125 -76
  566. package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +3 -5
  567. package/dist/components/BbConfirm/types.d.ts +64 -0
  568. package/dist/components/BbConfirm/types.js +17 -0
  569. package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +15 -10
  570. package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +324 -224
  571. package/dist/components/BbDatePicker/types.d.ts +111 -43
  572. package/dist/components/BbDatePicker/types.js +33 -0
  573. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +16 -4
  574. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +1225 -88
  575. package/dist/components/BbDatePickerInput/dateFieldLayout.d.ts +23 -0
  576. package/dist/components/BbDatePickerInput/dateFieldLayout.js +38 -0
  577. package/dist/components/BbDatePickerInput/types.d.ts +238 -52
  578. package/dist/components/BbDatePickerInput/types.js +39 -0
  579. package/dist/components/BbDialog/BbDialog.vue.d.ts +3 -3
  580. package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +230 -133
  581. package/dist/components/BbDialog/types.d.ts +94 -31
  582. package/dist/components/BbDialog/types.js +16 -0
  583. package/dist/components/BbDialog/useDialogStack.d.ts +12 -0
  584. package/dist/components/BbDialog/useDialogStack.js +9 -2
  585. package/dist/components/BbDropdown/AdaptiveDropdown.vue.d.ts +2 -0
  586. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +134 -106
  587. package/dist/components/BbDropdown/BbDropdown.vue.d.ts +10 -2
  588. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +463 -337
  589. package/dist/components/BbDropdown/BbDropdownGroup.vue.d.ts +16 -5
  590. package/dist/components/BbDropdown/BbDropdownGroup.vue_vue_type_script_setup_true_lang.js +48 -19
  591. package/dist/components/BbDropdown/BbDropdownList.vue.d.ts +10 -4
  592. package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +388 -335
  593. package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +152 -122
  594. package/dist/components/BbDropdown/DropdownRow.vue.d.ts +40 -0
  595. package/dist/components/BbDropdown/DropdownRow.vue.js +5 -0
  596. package/dist/components/BbDropdown/DropdownRow.vue_vue_type_script_setup_true_lang.js +60 -0
  597. package/dist/components/BbDropdown/normalizeGroups.d.ts +8 -2
  598. package/dist/components/BbDropdown/normalizeGroups.js +70 -32
  599. package/dist/components/BbDropdown/types.d.ts +440 -129
  600. package/dist/components/BbDropdown/types.js +21 -2
  601. package/dist/components/BbDropdown/useDropdownContext.d.ts +14 -4
  602. package/dist/components/BbDropdown/useDropdownGroupRegistry.d.ts +62 -0
  603. package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +18 -3
  604. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +193 -43
  605. package/dist/components/BbDropdownButton/types.d.ts +136 -11
  606. package/dist/components/BbDropdownButton/types.js +35 -0
  607. package/dist/components/BbDropzone/BbDropzone.vue.d.ts +2 -2
  608. package/dist/components/BbDropzone/BbDropzone.vue_vue_type_script_setup_true_lang.js +211 -143
  609. package/dist/components/BbDropzone/types.d.ts +65 -21
  610. package/dist/components/BbDropzone/types.js +17 -0
  611. package/dist/components/BbForm/BbForm.vue.d.ts +94 -0
  612. package/dist/{validated → components/BbForm}/BbForm.vue.js +1 -1
  613. package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +360 -0
  614. package/dist/components/BbForm/BbFormCustomField.d.ts +14 -0
  615. package/dist/components/BbForm/BbFormCustomField.js +55 -0
  616. package/dist/components/BbForm/bindFormField.d.ts +57 -0
  617. package/dist/components/BbForm/bindFormField.js +88 -0
  618. package/dist/components/BbForm/formFields.d.ts +77 -0
  619. package/dist/components/BbForm/formFields.js +11 -0
  620. package/dist/components/BbForm/formSchema.d.ts +56 -0
  621. package/dist/components/BbForm/formSchema.js +196 -0
  622. package/dist/components/BbForm/standardSchema.d.ts +59 -0
  623. package/dist/components/BbHoverCard/BbHoverCard.vue.d.ts +43 -0
  624. package/dist/components/{BbBaseRadio/BbBaseRadio.vue.js → BbHoverCard/BbHoverCard.vue.js} +2 -2
  625. package/dist/components/BbHoverCard/BbHoverCard.vue_vue_type_script_setup_true_lang.js +300 -0
  626. package/dist/components/BbHoverCard/BbHoverCardPortal.vue.d.ts +23 -0
  627. package/dist/components/BbHoverCard/BbHoverCardPortal.vue.js +5 -0
  628. package/dist/components/BbHoverCard/BbHoverCardPortal.vue_vue_type_script_setup_true_lang.js +13 -0
  629. package/dist/components/BbHoverCard/hoverCardFocus.d.ts +29 -0
  630. package/dist/components/BbHoverCard/hoverCardFocus.js +29 -0
  631. package/dist/components/BbHoverCard/types.d.ts +186 -0
  632. package/dist/components/BbHoverCard/types.js +13 -0
  633. package/dist/components/BbIcon/BbIcon.vue.d.ts +1 -3
  634. package/dist/components/BbIcon/BbIcon.vue_vue_type_script_setup_true_lang.js +59 -48
  635. package/dist/components/BbIcon/iconCache.d.ts +63 -0
  636. package/dist/components/BbIcon/iconCache.js +35 -0
  637. package/dist/components/BbIcon/types.d.ts +22 -2
  638. package/dist/components/BbIcon/types.js +7 -0
  639. package/dist/components/BbIndicator/BbIndicator.vue_vue_type_script_setup_true_lang.js +34 -21
  640. package/dist/components/BbIndicator/types.d.ts +24 -0
  641. package/dist/components/BbIndicator/types.js +7 -0
  642. package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +11 -8
  643. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +670 -87
  644. package/dist/components/BbNumberInput/numberDisplay.d.ts +256 -0
  645. package/dist/components/BbNumberInput/numberDisplay.js +499 -0
  646. package/dist/components/BbNumberInput/platform.d.ts +7 -0
  647. package/dist/components/BbNumberInput/platform.js +7 -0
  648. package/dist/components/BbNumberInput/types.d.ts +262 -30
  649. package/dist/components/BbNumberInput/types.js +8 -0
  650. package/dist/components/BbNumberInput/warroom/corpus.d.ts +58 -0
  651. package/dist/components/BbNumberInput/warroom/currency-verify.rows.d.ts +28 -0
  652. package/dist/components/BbNumberInput/warroom/currency.rows.d.ts +2 -0
  653. package/dist/components/BbNumberInput/warroom/harness.d.ts +217 -0
  654. package/dist/components/BbNumberInput/warroom/oracle.d.ts +150 -0
  655. package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +4 -6
  656. package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +311 -204
  657. package/dist/components/BbOffCanvas/hostCloseLabel.d.ts +3 -0
  658. package/dist/components/BbOffCanvas/hostCloseLabel.js +8 -0
  659. package/dist/components/BbOffCanvas/types.d.ts +81 -13
  660. package/dist/components/BbOffCanvas/types.js +15 -0
  661. package/dist/components/BbPagination/BbPagination.vue.d.ts +2 -2
  662. package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +146 -110
  663. package/dist/components/BbPagination/types.d.ts +45 -15
  664. package/dist/components/BbPagination/types.js +13 -0
  665. package/dist/components/BbPopover/BbPopover.vue.d.ts +5 -4
  666. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +288 -193
  667. package/dist/components/BbPopover/BbPopoverPortal.vue.d.ts +23 -0
  668. package/dist/components/BbPopover/BbPopoverPortal.vue.js +5 -0
  669. package/dist/components/BbPopover/BbPopoverPortal.vue_vue_type_script_setup_true_lang.js +13 -0
  670. package/dist/components/BbPopover/types.d.ts +71 -17
  671. package/dist/components/BbPopover/types.js +14 -0
  672. package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +38 -17
  673. package/dist/components/BbProgress/types.d.ts +40 -0
  674. package/dist/components/BbProgress/types.js +7 -0
  675. package/dist/components/BbPtScope/BbPtScope.vue.d.ts +12 -0
  676. package/dist/components/BbPtScope/BbPtScope.vue.js +5 -0
  677. package/dist/components/BbPtScope/BbPtScope.vue_vue_type_script_setup_true_lang.js +13 -0
  678. package/dist/components/BbPtScope/types.d.ts +15 -0
  679. package/dist/components/BbRadio/BbRadio.vue.d.ts +7 -7
  680. package/dist/components/BbRadio/BbRadio.vue_vue_type_script_setup_true_lang.js +178 -59
  681. package/dist/components/BbRadio/types.d.ts +174 -29
  682. package/dist/components/BbRadio/types.js +8 -0
  683. package/dist/components/BbRadioGroup/BbRadioGroup.vue.d.ts +14 -2
  684. package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +333 -108
  685. package/dist/components/BbRadioGroup/types.d.ts +246 -46
  686. package/dist/components/BbRadioGroup/types.js +10 -0
  687. package/dist/components/BbRating/BbRating.vue.d.ts +10 -8
  688. package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +269 -78
  689. package/dist/components/BbRating/types.d.ts +195 -23
  690. package/dist/components/BbRating/types.js +21 -0
  691. package/dist/components/BbSelect/BbSelect.vue.d.ts +17 -3
  692. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +565 -108
  693. package/dist/components/BbSelect/types.d.ts +263 -51
  694. package/dist/components/BbSelect/types.js +41 -0
  695. package/dist/components/BbSelectPopover/BbSelectPopover.vue.d.ts +15 -1
  696. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +587 -362
  697. package/dist/components/BbSelectPopover/sheetChipAttrs.d.ts +18 -0
  698. package/dist/components/BbSelectPopover/sheetChipAttrs.js +5 -0
  699. package/dist/components/BbSelectPopover/types.d.ts +141 -45
  700. package/dist/components/BbSelectPopover/types.js +24 -0
  701. package/dist/components/BbSlider/BbSlider.vue.d.ts +13 -8
  702. package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +477 -97
  703. package/dist/components/BbSlider/types.d.ts +221 -27
  704. package/dist/components/BbSlider/types.js +26 -0
  705. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.d.ts +1 -1
  706. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue_vue_type_script_setup_true_lang.js +60 -48
  707. package/dist/components/BbSmoothHeight/types.d.ts +19 -0
  708. package/dist/components/BbSmoothHeight/types.js +7 -0
  709. package/dist/components/BbSpinner/BbSpinner.vue.d.ts +1 -3
  710. package/dist/components/BbSpinner/BbSpinner.vue_vue_type_script_setup_true_lang.js +27 -14
  711. package/dist/components/BbSpinner/types.d.ts +22 -1
  712. package/dist/components/BbSpinner/types.js +7 -0
  713. package/dist/components/BbSwitch/BbSwitch.vue.d.ts +7 -7
  714. package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +230 -78
  715. package/dist/components/BbSwitch/types.d.ts +25 -10
  716. package/dist/components/BbSwitch/types.js +5 -0
  717. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue.d.ts +14 -2
  718. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +350 -106
  719. package/dist/components/BbSwitchGroup/types.d.ts +36 -8
  720. package/dist/components/BbSwitchGroup/types.js +5 -0
  721. package/dist/components/BbTable/BbTable.vue.d.ts +36 -56
  722. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +2331 -684
  723. package/dist/components/BbTable/BbTableDataRow.d.ts +204 -0
  724. package/dist/components/BbTable/BbTableDataRow.js +188 -0
  725. package/dist/components/BbTable/BbTableEdgeRow.d.ts +112 -0
  726. package/dist/components/BbTable/BbTableEdgeRow.js +65 -0
  727. package/dist/components/BbTable/BbTableExpandRow.d.ts +84 -0
  728. package/dist/components/BbTable/BbTableExpandRow.js +62 -0
  729. package/dist/components/BbTable/BbTableSelectToggle.d.ts +128 -0
  730. package/dist/components/BbTable/BbTableSelectToggle.js +131 -0
  731. package/dist/components/BbTable/gridWidgets.d.ts +30 -0
  732. package/dist/components/BbTable/gridWidgets.js +14 -0
  733. package/dist/components/BbTable/types.d.ts +520 -190
  734. package/dist/components/BbTable/types.js +34 -0
  735. package/dist/components/BbTable/useRowReorder.d.ts +54 -0
  736. package/dist/components/BbTable/useRowReorder.js +429 -0
  737. package/dist/components/BbTable/utils.d.ts +153 -4
  738. package/dist/components/BbTable/utils.js +165 -37
  739. package/dist/components/BbTable/warroom/harness.d.ts +253 -0
  740. package/dist/components/BbTabs/BbTabs.vue.d.ts +3 -1
  741. package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +66 -26
  742. package/dist/components/BbTabs/BbTabsList.vue.d.ts +3 -10
  743. package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +143 -81
  744. package/dist/components/BbTabs/BbTabsPanels.vue.d.ts +12 -0
  745. package/dist/components/{BbBaseSwitch/BbBaseSwitch.vue.js → BbTabs/BbTabsPanels.vue.js} +2 -2
  746. package/dist/components/BbTabs/BbTabsPanels.vue_vue_type_script_setup_true_lang.js +59 -0
  747. package/dist/components/BbTabs/BbTabsRoot.vue.d.ts +3 -1
  748. package/dist/components/BbTabs/BbTabsRoot.vue_vue_type_script_setup_true_lang.js +6 -1
  749. package/dist/components/BbTabs/types.d.ts +210 -46
  750. package/dist/components/BbTabs/types.js +34 -0
  751. package/dist/components/BbTag/BbTag.vue.d.ts +13 -10
  752. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +404 -93
  753. package/dist/components/BbTag/types.d.ts +156 -31
  754. package/dist/components/BbTag/types.js +22 -0
  755. package/dist/components/BbTextInput/BbTextInput.vue.d.ts +31 -37
  756. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +312 -107
  757. package/dist/components/BbTextInput/types.d.ts +201 -26
  758. package/dist/components/BbTextInput/types.js +12 -0
  759. package/dist/components/BbTextarea/BbTextarea.vue.d.ts +31 -37
  760. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +342 -114
  761. package/dist/components/BbTextarea/types.d.ts +191 -26
  762. package/dist/components/BbTextarea/types.js +12 -0
  763. package/dist/components/BbTimePicker/BbTimePicker.vue.d.ts +12 -4
  764. package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +199 -122
  765. package/dist/components/BbTimePicker/types.d.ts +80 -9
  766. package/dist/components/BbTimePicker/types.js +18 -0
  767. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue.d.ts +14 -4
  768. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +779 -86
  769. package/dist/components/BbTimePickerInput/types.d.ts +170 -35
  770. package/dist/components/BbTimePickerInput/types.js +25 -0
  771. package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +63 -25
  772. package/dist/components/BbToast/BbToastMessage.vue.d.ts +4 -1
  773. package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +79 -76
  774. package/dist/components/BbToast/BbToastPortal.vue.d.ts +1 -0
  775. package/dist/components/BbToast/BbToastRegion.vue.d.ts +4 -1
  776. package/dist/components/BbToast/BbToastRegion.vue_vue_type_script_setup_true_lang.js +72 -64
  777. package/dist/components/BbToast/types.d.ts +54 -1
  778. package/dist/components/BbToast/types.js +28 -0
  779. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +127 -92
  780. package/dist/components/BbTooltip/tooltipWarmup.d.ts +23 -0
  781. package/dist/components/BbTooltip/tooltipWarmup.js +7 -0
  782. package/dist/components/BbTooltip/types.d.ts +42 -5
  783. package/dist/components/BbTooltip/types.js +7 -0
  784. package/dist/components/BbTree/BbTree.vue.d.ts +15 -3
  785. package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +57 -29
  786. package/dist/components/BbTree/BbTreeLevel.vue.d.ts +1 -1
  787. package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +24 -20
  788. package/dist/components/BbTree/context.d.ts +9 -1
  789. package/dist/components/BbTree/types.d.ts +40 -5
  790. package/dist/components/BbTree/types.js +7 -0
  791. package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +46 -44
  792. package/dist/components/ChipsBox/types.d.ts +7 -0
  793. package/dist/components/ClearableButton/ClearableButton.vue_vue_type_script_setup_true_lang.js +5 -5
  794. package/dist/components/CommaBox/CommaBox.vue_vue_type_script_setup_true_lang.js +11 -7
  795. package/dist/components/CommaBox/types.d.ts +7 -0
  796. package/dist/components/{BbBaseInputContainer/BbBaseInputContainer.vue.d.ts → CommonField/CommonField.vue.d.ts} +5 -5
  797. package/dist/components/{BbTabs/BbTabsPanes.vue.js → CommonField/CommonField.vue.js} +2 -2
  798. package/dist/components/CommonField/CommonField.vue_vue_type_script_setup_true_lang.js +231 -0
  799. package/dist/components/CommonField/messageHeightMatrix.d.ts +2 -0
  800. package/dist/components/{BbBaseInputContainer → CommonField}/types.d.ts +87 -32
  801. package/dist/components/{CommonInputWrapper/CommonInputWrapper.vue.d.ts → CommonFieldInput/CommonFieldInput.vue.d.ts} +5 -4
  802. package/dist/components/{BbBaseRadioGroup/BbBaseRadioGroup.vue.js → CommonFieldInput/CommonFieldInput.vue.js} +2 -2
  803. package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +121 -0
  804. package/dist/components/CommonFieldInput/boxBorderMatrix.d.ts +10 -0
  805. package/dist/components/{CommonInputWrapper → CommonFieldInput}/types.d.ts +26 -8
  806. package/dist/components/CommonPopover/CommonPopover.vue.d.ts +11 -2
  807. package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +80 -65
  808. package/dist/components/CommonPopover/types.d.ts +41 -31
  809. package/dist/components/CommonTimeSelector/CommonTimeSelector.vue.d.ts +48 -0
  810. package/dist/components/{BbBaseColorPalette/BbBaseColorPalette.vue.js → CommonTimeSelector/CommonTimeSelector.vue.js} +2 -2
  811. package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +241 -0
  812. package/dist/components/CommonTimeSelector/types.d.ts +6 -0
  813. package/dist/components/CommonTimeSelector/useMeridiem.d.ts +19 -0
  814. package/dist/components/CommonTimeSelector/useMeridiem.js +41 -0
  815. package/dist/components/FlatListBox/FlatListBox.vue.d.ts +5 -1
  816. package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +176 -98
  817. package/dist/components/FlatListBox/types.d.ts +33 -2
  818. package/dist/components/GroupedListBox/GroupedListBox.vue.d.ts +5 -1
  819. package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +237 -146
  820. package/dist/components/GroupedListBox/types.d.ts +33 -2
  821. package/dist/components/ListBox/ListBox.vue.d.ts +5 -1
  822. package/dist/components/ListBox/ListBox.vue_vue_type_script_setup_true_lang.js +100 -69
  823. package/dist/components/ListBox/types.d.ts +33 -2
  824. package/dist/components/OptionsContainer/OptionsContainer.vue.d.ts +1 -1
  825. package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +117 -37
  826. package/dist/components/OptionsContainer/types.d.ts +76 -10
  827. package/dist/components/Transitions/ScaleFade.vue_vue_type_script_setup_true_lang.js +8 -8
  828. package/dist/components/Transitions/Slide.vue.js +1 -1
  829. package/dist/composables/formSubmitLock.d.ts +8 -0
  830. package/dist/composables/formSubmitLock.js +4 -0
  831. package/dist/composables/ssrMarker.d.ts +15 -0
  832. package/dist/composables/ssrMarker.js +19 -0
  833. package/dist/composables/useBaseOptions.d.ts +18 -1
  834. package/dist/composables/useBaseOptions.js +83 -37
  835. package/dist/composables/useBbConfig.d.ts +27 -6
  836. package/dist/composables/useBbConfig.js +8 -2
  837. package/dist/composables/useBbDropdownContext.d.ts +13 -8
  838. package/dist/composables/useBbFormContext.d.ts +142 -8
  839. package/dist/composables/useBbFormContext.js +62 -30
  840. package/dist/composables/useBbFormField.d.ts +69 -0
  841. package/dist/composables/useBbFormField.js +58 -0
  842. package/dist/composables/useBbTableContext.d.ts +45 -1
  843. package/dist/composables/useBbTableContext.js +93 -87
  844. package/dist/composables/useBbTabsContext.d.ts +24 -18
  845. package/dist/composables/useBbTabsContext.js +154 -112
  846. package/dist/composables/useCharacterCounter.d.ts +33 -0
  847. package/dist/composables/useCharacterCounter.js +29 -0
  848. package/dist/composables/useClosingInert.d.ts +4 -4
  849. package/dist/composables/useCoarsePointer.js +7 -10
  850. package/dist/composables/useCoherence.js +1 -1
  851. package/dist/composables/useConfig.d.ts +59 -0
  852. package/dist/composables/useConfig.js +15 -0
  853. package/dist/composables/useConfirm.d.ts +39 -7
  854. package/dist/composables/useConfirm.js +50 -41
  855. package/dist/composables/useEscapeStackEntry.d.ts +13 -0
  856. package/dist/composables/useEscapeStackEntry.js +16 -0
  857. package/dist/composables/useFormBinding.d.ts +132 -0
  858. package/dist/composables/useFormBinding.js +46 -0
  859. package/dist/composables/useHydrated.d.ts +30 -0
  860. package/dist/composables/useHydrated.js +31 -7
  861. package/dist/composables/useId.d.ts +4 -3
  862. package/dist/composables/useId.js +1 -7
  863. package/dist/composables/useItemText.d.ts +5 -1
  864. package/dist/composables/useItemText.js +8 -3
  865. package/dist/composables/useItemValue.d.ts +5 -1
  866. package/dist/composables/useItemValue.js +8 -3
  867. package/dist/composables/useItemsGetter.d.ts +73 -2
  868. package/dist/composables/useItemsGetter.js +81 -21
  869. package/dist/composables/useKeyboardInset.d.ts +28 -0
  870. package/dist/composables/useKeyboardInset.js +32 -0
  871. package/dist/composables/useLocale.js +13 -9
  872. package/dist/composables/useMobile.js +7 -10
  873. package/dist/composables/useOverlayYield.d.ts +23 -0
  874. package/dist/composables/useOverlayYield.js +20 -0
  875. package/dist/composables/usePassthrough.d.ts +228 -0
  876. package/dist/composables/usePassthrough.js +247 -0
  877. package/dist/composables/usePrefill.d.ts +26 -5
  878. package/dist/composables/usePrefill.js +36 -19
  879. package/dist/composables/useSafeAreaInternal.js +1 -1
  880. package/dist/composables/useSegmentedFields.d.ts +2 -2
  881. package/dist/composables/useSegmentedFields.js +4 -4
  882. package/dist/composables/useServerPrefetch.d.ts +28 -0
  883. package/dist/composables/useServerPrefetch.js +9 -0
  884. package/dist/composables/useSsrState.d.ts +28 -0
  885. package/dist/composables/useSsrState.js +13 -0
  886. package/dist/composables/useTableWidthContext.d.ts +24 -4
  887. package/dist/composables/useTableWidthContext.js +31 -28
  888. package/dist/composables/useToast.d.ts +18 -1
  889. package/dist/composables/useToast.js +31 -18
  890. package/dist/composables/useToggleInput.d.ts +44 -0
  891. package/dist/composables/useToggleInput.js +39 -0
  892. package/dist/composables/useViewportWidth.d.ts +5 -25
  893. package/dist/composables/useViewportWidth.js +14 -7
  894. package/dist/deprecation/ai-deprecations.json.d.ts +2259 -263
  895. package/dist/deprecation/ai-deprecations.json.js +1 -1
  896. package/dist/deprecation/removedProps.js +9 -4
  897. package/dist/directives/bbDropdown.d.ts +15 -4
  898. package/dist/directives/bbDropdown.js +42 -10
  899. package/dist/directives/bbHoverCard.d.ts +59 -0
  900. package/dist/directives/bbHoverCard.js +33 -0
  901. package/dist/directives/bbPopover.d.ts +60 -0
  902. package/dist/directives/bbPopover.js +40 -0
  903. package/dist/directives/bbTooltip.d.ts +8 -0
  904. package/dist/directives/createPopoverDirective.d.ts +86 -0
  905. package/dist/directives/createPopoverDirective.js +111 -33
  906. package/dist/directives/directivePortal.d.ts +75 -0
  907. package/dist/directives/directivePortal.js +37 -0
  908. package/dist/directives/renderingInstance.d.ts +2 -0
  909. package/dist/directives/renderingInstance.js +25 -0
  910. package/dist/i18n/index.d.ts +14 -25
  911. package/dist/i18n/locales/cs.json +36 -19
  912. package/dist/i18n/locales/da.json +39 -22
  913. package/dist/i18n/locales/de-CH.json +144 -0
  914. package/dist/i18n/locales/de.json +38 -21
  915. package/dist/i18n/locales/el.json +36 -19
  916. package/dist/i18n/locales/en-GB.json +144 -0
  917. package/dist/i18n/locales/en.json +33 -16
  918. package/dist/i18n/locales/es-MX.json +144 -0
  919. package/dist/i18n/locales/es.json +41 -24
  920. package/dist/i18n/locales/fi.json +34 -17
  921. package/dist/i18n/locales/fr.json +43 -26
  922. package/dist/i18n/locales/hu.json +34 -17
  923. package/dist/i18n/locales/it.json +37 -20
  924. package/dist/i18n/locales/ja.json +39 -22
  925. package/dist/i18n/locales/ko.json +36 -19
  926. package/dist/i18n/locales/nb.json +39 -22
  927. package/dist/i18n/locales/nl.json +47 -30
  928. package/dist/i18n/locales/pl.json +35 -18
  929. package/dist/i18n/locales/{pt.json → pt-BR.json} +43 -26
  930. package/dist/i18n/locales/pt-PT.json +144 -0
  931. package/dist/i18n/locales/ro.json +47 -30
  932. package/dist/i18n/locales/ru.json +35 -18
  933. package/dist/i18n/locales/sv.json +42 -25
  934. package/dist/i18n/locales/tr.json +40 -23
  935. package/dist/i18n/locales/uk.json +35 -18
  936. package/dist/i18n/locales/{zh-cn.json → zh-CN.json} +36 -19
  937. package/dist/i18n/locales/zh-HK.json +144 -0
  938. package/dist/i18n/locales/zh-TW.json +144 -0
  939. package/dist/i18n/regionHints.d.ts +16 -0
  940. package/dist/i18n/regionHints.js +49 -0
  941. package/dist/i18n/regions.d.ts +286 -0
  942. package/dist/i18n/regions.js +265 -0
  943. package/dist/icon-scan.d.ts +276 -0
  944. package/dist/icon-scan.js +485 -0
  945. package/dist/icons-whitelist.d.ts +5 -4
  946. package/dist/index.d.ts +61 -23
  947. package/dist/index.js +84 -72
  948. package/dist/llms-full.txt +100680 -60206
  949. package/dist/llms-medium.txt +1652 -390
  950. package/dist/llms.txt +41 -23
  951. package/dist/locale-blueprint.json +41 -18
  952. package/dist/nuxt-auto-imports.d.ts +76 -0
  953. package/dist/nuxt-auto-imports.js +32 -0
  954. package/dist/nuxt-module.d.ts +30 -15
  955. package/dist/nuxt.js +35 -9
  956. package/dist/passthrough-deduper.js +5 -0
  957. package/dist/plugin.d.ts +10 -1
  958. package/dist/plugin.js +33 -19
  959. package/dist/project-dts.d.ts +92 -0
  960. package/dist/project-dts.js +173 -0
  961. package/dist/reset.css +1 -1
  962. package/dist/runtime/nuxt-plugin.js +36 -21
  963. package/dist/styles.css +3 -2
  964. package/dist/types/AlertVariant.d.ts +10 -1
  965. package/dist/types/BadgeVariant.d.ts +16 -5
  966. package/dist/types/ButtonVariant.d.ts +12 -1
  967. package/dist/types/ColumnName.d.ts +30 -3
  968. package/dist/types/CommonProps.d.ts +15 -5
  969. package/dist/types/Config.d.ts +112 -1
  970. package/dist/types/ConfirmVariant.d.ts +8 -1
  971. package/dist/types/DropdownItemVariant.d.ts +8 -1
  972. package/dist/types/FieldLayout.d.ts +39 -0
  973. package/dist/types/FieldLayout.js +8 -0
  974. package/dist/types/IndicatorVariant.d.ts +11 -1
  975. package/dist/types/InputVariant.d.ts +30 -0
  976. package/dist/types/ItemProps.d.ts +50 -0
  977. package/dist/types/ItemsProvider.d.ts +94 -0
  978. package/dist/types/Option.d.ts +6 -0
  979. package/dist/types/PtScope.d.ts +15 -0
  980. package/dist/types/RegistryKey.d.ts +10 -0
  981. package/dist/types/TabsVariant.d.ts +25 -0
  982. package/dist/types/ToastVariant.d.ts +12 -2
  983. package/dist/types/TooltipVariant.d.ts +8 -1
  984. package/dist/types/passthrough.d.ts +378 -0
  985. package/dist/types/passthrough.js +78 -0
  986. package/dist/types/ptComponentMap.d.ts +63 -0
  987. package/dist/utilities/functions/animationsSettled.d.ts +7 -0
  988. package/dist/utilities/functions/animationsSettled.js +6 -0
  989. package/dist/utilities/functions/elementLabel.d.ts +8 -0
  990. package/dist/utilities/functions/elementLabel.js +6 -0
  991. package/dist/utilities/functions/hasVnodeListener.d.ts +16 -0
  992. package/dist/utilities/functions/hasVnodeListener.js +12 -0
  993. package/dist/utilities/functions/isImeComposing.d.ts +7 -0
  994. package/dist/utilities/functions/isImeComposing.js +4 -0
  995. package/dist/utilities/functions/itemProps.d.ts +46 -0
  996. package/dist/utilities/functions/itemProps.js +47 -0
  997. package/dist/utilities/functions/parseSize.d.ts +2 -1
  998. package/dist/utilities/functions/readableValue.d.ts +6 -0
  999. package/dist/utilities/functions/readableValue.js +4 -0
  1000. package/dist/utilities/functions/settlesVisible.d.ts +20 -0
  1001. package/dist/utilities/functions/settlesVisible.js +18 -0
  1002. package/dist/utilities/functions/slotKey.d.ts +13 -8
  1003. package/dist/utilities/functions/slotKey.js +78 -2
  1004. package/dist/utilities/functions/snapToStep.js +2 -1
  1005. package/dist/utilities/functions/throttle.d.ts +1 -4
  1006. package/dist/utilities/functions/throttle.js +1 -4
  1007. package/dist/utilities/functions/toggleInput.d.ts +114 -0
  1008. package/dist/utilities/functions/toggleInput.js +61 -0
  1009. package/dist/utilities/functions/warnRemovedAttrs.d.ts +39 -1
  1010. package/dist/utilities/functions/warnRemovedAttrs.js +85 -14
  1011. package/dist/utilities/misc/listboxMetrics.d.ts +9 -3
  1012. package/dist/utilities/misc/listboxMetrics.js +5 -2
  1013. package/dist/utilities/misc/ssrStateInjectionKey.d.ts +47 -0
  1014. package/dist/utilities/misc/ssrStateInjectionKey.js +4 -0
  1015. package/dist/utilities/misc/ssrValue.d.ts +20 -0
  1016. package/dist/utilities/misc/ssrValue.js +7 -0
  1017. package/dist/utils/cssLayers.d.ts +91 -0
  1018. package/dist/utils/cssLayers.js +43 -0
  1019. package/dist/utils/focusVisibility.d.ts +9 -0
  1020. package/dist/utils/focusVisibility.js +12 -0
  1021. package/dist/utils/injectLibraryStyles.d.ts +3 -1
  1022. package/dist/utils/injectLibraryStyles.js +24 -23
  1023. package/dist/utils/overlayEscapeStack.d.ts +39 -1
  1024. package/dist/utils/overlayEscapeStack.js +19 -8
  1025. package/dist/utils/passthrough.d.ts +67 -0
  1026. package/dist/utils/passthrough.js +100 -0
  1027. package/dist/utils/passthroughDeduper.d.ts +2 -0
  1028. package/dist/utils/ptScope.d.ts +8 -0
  1029. package/dist/utils/ptScope.js +4 -0
  1030. package/dist/utils/versionCheck.d.ts +19 -0
  1031. package/dist/utils/versionCheck.js +18 -0
  1032. package/dist/vite-plugin.d.ts +324 -71
  1033. package/dist/vite.js +577 -385
  1034. package/llms.txt +42 -24
  1035. package/package.json +75 -38
  1036. package/scripts/README.md +35 -33
  1037. package/scripts/lib/agent-manifest.mjs +543 -0
  1038. package/scripts/lib/check-fix.mjs +129 -0
  1039. package/scripts/lib/collapsible-trigger-aria.mjs +116 -0
  1040. package/scripts/lib/component-attr-targets.ts +123 -0
  1041. package/scripts/lib/component-tree.ts +648 -0
  1042. package/scripts/lib/css-class-check.mjs +329 -0
  1043. package/scripts/lib/css-class-surface.mjs +292 -0
  1044. package/scripts/lib/css-color-resolve.mjs +296 -0
  1045. package/scripts/lib/css-local-check.mjs +432 -0
  1046. package/scripts/lib/design-token-manifest.mjs +506 -0
  1047. package/scripts/lib/doc-sections.mjs +250 -0
  1048. package/scripts/lib/dropdown-default-slot.mjs +118 -0
  1049. package/scripts/lib/ensure-manifest.mjs +106 -10
  1050. package/scripts/lib/eslint-disable.mjs +173 -0
  1051. package/scripts/lib/eslint-plugin.d.ts +90 -1
  1052. package/scripts/lib/eslint-plugin.mjs +2499 -33
  1053. package/scripts/lib/example-checks.mjs +337 -0
  1054. package/scripts/lib/form-v-model.mjs +190 -0
  1055. package/scripts/lib/guide-claims.mjs +452 -0
  1056. package/scripts/lib/hand-imported-styles.mjs +362 -0
  1057. package/scripts/lib/hand-roll-hints.mjs +50 -6
  1058. package/scripts/lib/helper-canon.mjs +176 -0
  1059. package/scripts/lib/helpers-add.mjs +1303 -0
  1060. package/scripts/lib/html-attributes.mjs +353 -0
  1061. package/scripts/lib/items-provider-context.mjs +842 -0
  1062. package/scripts/lib/linked-target.mjs +30 -0
  1063. package/scripts/lib/local-components.mjs +206 -0
  1064. package/scripts/lib/locale-check.mjs +182 -0
  1065. package/scripts/lib/manifest-pointers.mjs +71 -0
  1066. package/scripts/lib/mcp-config.mjs +93 -58
  1067. package/scripts/lib/migrate-fix.mjs +62 -3
  1068. package/scripts/lib/portal-names.mjs +458 -0
  1069. package/scripts/lib/project-variant-dts.mjs +208 -0
  1070. package/scripts/lib/public-type-exports.mjs +273 -0
  1071. package/scripts/lib/reactive-v-model.mjs +221 -0
  1072. package/scripts/lib/recipe-excerpts.mjs +98 -0
  1073. package/scripts/lib/redundant-item-accessor.mjs +398 -0
  1074. package/scripts/lib/renamed-item-field.mjs +343 -0
  1075. package/scripts/lib/required-in-form.mjs +240 -0
  1076. package/scripts/lib/slot-key.mjs +147 -0
  1077. package/scripts/lib/slot-renames.mjs +45 -0
  1078. package/scripts/lib/squashed-slot-words.mjs +133 -0
  1079. package/scripts/lib/text-null-value.mjs +260 -0
  1080. package/scripts/lib/toolchain-check.mjs +217 -0
  1081. package/scripts/lib/unimported-components.mjs +263 -0
  1082. package/scripts/lib/validate-bb-markup.mjs +2945 -97
  1083. package/scripts/lib/wrapper-props.mjs +188 -0
  1084. package/dist/ai/BbBaseCheckbox.md +0 -49
  1085. package/dist/ai/BbBaseCheckboxGroup.md +0 -64
  1086. package/dist/ai/BbBaseColorInput.md +0 -65
  1087. package/dist/ai/BbBaseColorPalette.md +0 -39
  1088. package/dist/ai/BbBaseDatePicker.md +0 -43
  1089. package/dist/ai/BbBaseDatePickerInput.md +0 -73
  1090. package/dist/ai/BbBaseInputContainer.md +0 -48
  1091. package/dist/ai/BbBaseNumberInput.md +0 -71
  1092. package/dist/ai/BbBaseRadio.md +0 -46
  1093. package/dist/ai/BbBaseRadioGroup.md +0 -64
  1094. package/dist/ai/BbBaseRating.md +0 -52
  1095. package/dist/ai/BbBaseSelect.md +0 -88
  1096. package/dist/ai/BbBaseSlider.md +0 -56
  1097. package/dist/ai/BbBaseSwitch.md +0 -49
  1098. package/dist/ai/BbBaseSwitchGroup.md +0 -64
  1099. package/dist/ai/BbBaseTag.md +0 -68
  1100. package/dist/ai/BbBaseTextInput.md +0 -75
  1101. package/dist/ai/BbBaseTextarea.md +0 -62
  1102. package/dist/ai/BbBaseTimePickerInput.md +0 -62
  1103. package/dist/ai/BbTabsPanes.md +0 -27
  1104. package/dist/ai/CommonInputWrapper.md +0 -42
  1105. package/dist/ai/recipes/inertia/command-palette.md +0 -311
  1106. package/dist/ai/recipes/nuxt/command-palette.md +0 -300
  1107. package/dist/ai/recipes/vue/command-palette.md +0 -297
  1108. package/dist/ai/source/BbBaseCheckbox.md +0 -461
  1109. package/dist/ai/source/BbBaseCheckboxGroup.md +0 -554
  1110. package/dist/ai/source/BbBaseColorInput.md +0 -431
  1111. package/dist/ai/source/BbBaseColorPalette.md +0 -942
  1112. package/dist/ai/source/BbBaseDatePicker.md +0 -1448
  1113. package/dist/ai/source/BbBaseDatePickerInput.md +0 -1940
  1114. package/dist/ai/source/BbBaseInputContainer.md +0 -1211
  1115. package/dist/ai/source/BbBaseNumberInput.md +0 -617
  1116. package/dist/ai/source/BbBaseRadio.md +0 -381
  1117. package/dist/ai/source/BbBaseRadioGroup.md +0 -539
  1118. package/dist/ai/source/BbBaseRating.md +0 -607
  1119. package/dist/ai/source/BbBaseSelect.md +0 -945
  1120. package/dist/ai/source/BbBaseSlider.md +0 -1144
  1121. package/dist/ai/source/BbBaseSwitch.md +0 -246
  1122. package/dist/ai/source/BbBaseSwitchGroup.md +0 -302
  1123. package/dist/ai/source/BbBaseTag.md +0 -694
  1124. package/dist/ai/source/BbBaseTextInput.md +0 -511
  1125. package/dist/ai/source/BbBaseTextarea.md +0 -504
  1126. package/dist/ai/source/BbBaseTimePickerInput.md +0 -1037
  1127. package/dist/ai/source/BbTabsPanes.md +0 -377
  1128. package/dist/ai/source/CommonInputWrapper.md +0 -584
  1129. package/dist/alert-variants.d.ts +0 -19
  1130. package/dist/assets/svgs/sort.svg_raw.js +0 -4
  1131. package/dist/badge-variants.d.ts +0 -19
  1132. package/dist/button-variants.d.ts +0 -21
  1133. package/dist/components/BbBadge/BadgeAppendIcon.vue.d.ts +0 -3
  1134. package/dist/components/BbBadge/BadgeAppendIcon.vue.js +0 -5
  1135. package/dist/components/BbBadge/BadgeAppendIcon.vue_vue_type_script_setup_true_lang.js +0 -22
  1136. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.d.ts +0 -40
  1137. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.js +0 -6
  1138. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue_vue_type_script_setup_true_lang.js +0 -145
  1139. package/dist/components/BbBaseCheckbox/types.d.ts +0 -224
  1140. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.d.ts +0 -19
  1141. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.js +0 -6
  1142. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue_vue_type_script_setup_true_lang.js +0 -190
  1143. package/dist/components/BbBaseCheckboxGroup/types.d.ts +0 -257
  1144. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.d.ts +0 -43
  1145. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.js +0 -6
  1146. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue_vue_type_script_setup_true_lang.js +0 -184
  1147. package/dist/components/BbBaseColorInput/types.d.ts +0 -219
  1148. package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue.d.ts +0 -13
  1149. package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue_vue_type_script_setup_true_lang.js +0 -395
  1150. package/dist/components/BbBaseColorPalette/types.d.ts +0 -40
  1151. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.d.ts +0 -20
  1152. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.js +0 -6
  1153. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue_vue_type_script_setup_true_lang.js +0 -407
  1154. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.d.ts +0 -47
  1155. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.js +0 -5
  1156. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue_vue_type_script_setup_true_lang.js +0 -318
  1157. package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.js +0 -5
  1158. package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue_vue_type_script_setup_true_lang.js +0 -115
  1159. package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.js +0 -5
  1160. package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue_vue_type_script_setup_true_lang.js +0 -116
  1161. package/dist/components/BbBaseDatePicker/types.d.ts +0 -108
  1162. package/dist/components/BbBaseDatePicker/useDatePickerContext.js +0 -11
  1163. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.d.ts +0 -31
  1164. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.js +0 -6
  1165. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue_vue_type_script_setup_true_lang.js +0 -737
  1166. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.d.ts +0 -30
  1167. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.js +0 -6
  1168. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue_vue_type_script_setup_true_lang.js +0 -204
  1169. package/dist/components/BbBaseDatePickerInput/types.d.ts +0 -325
  1170. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.js +0 -6
  1171. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue_vue_type_script_setup_true_lang.js +0 -190
  1172. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.d.ts +0 -52
  1173. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.js +0 -6
  1174. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue_vue_type_script_setup_true_lang.js +0 -215
  1175. package/dist/components/BbBaseNumberInput/types.d.ts +0 -211
  1176. package/dist/components/BbBaseRadio/BbBaseRadio.vue.d.ts +0 -33
  1177. package/dist/components/BbBaseRadio/BbBaseRadio.vue_vue_type_script_setup_true_lang.js +0 -113
  1178. package/dist/components/BbBaseRadio/types.d.ts +0 -179
  1179. package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue.d.ts +0 -19
  1180. package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue_vue_type_script_setup_true_lang.js +0 -179
  1181. package/dist/components/BbBaseRadioGroup/types.d.ts +0 -223
  1182. package/dist/components/BbBaseRating/BbBaseRating.vue.d.ts +0 -38
  1183. package/dist/components/BbBaseRating/BbBaseRating.vue.js +0 -6
  1184. package/dist/components/BbBaseRating/BbBaseRating.vue_vue_type_script_setup_true_lang.js +0 -192
  1185. package/dist/components/BbBaseRating/types.d.ts +0 -176
  1186. package/dist/components/BbBaseSelect/BbBaseSelect.vue.d.ts +0 -19
  1187. package/dist/components/BbBaseSelect/BbBaseSelect.vue.js +0 -6
  1188. package/dist/components/BbBaseSelect/BbBaseSelect.vue_vue_type_script_setup_true_lang.js +0 -311
  1189. package/dist/components/BbBaseSelect/types.d.ts +0 -297
  1190. package/dist/components/BbBaseSlider/BbBaseSlider.vue.d.ts +0 -35
  1191. package/dist/components/BbBaseSlider/BbBaseSlider.vue.js +0 -6
  1192. package/dist/components/BbBaseSlider/BbBaseSlider.vue_vue_type_script_setup_true_lang.js +0 -340
  1193. package/dist/components/BbBaseSlider/types.d.ts +0 -200
  1194. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue.d.ts +0 -35
  1195. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue_vue_type_script_setup_true_lang.js +0 -146
  1196. package/dist/components/BbBaseSwitch/types.d.ts +0 -10
  1197. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.d.ts +0 -19
  1198. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.js +0 -6
  1199. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue_vue_type_script_setup_true_lang.js +0 -190
  1200. package/dist/components/BbBaseSwitchGroup/types.d.ts +0 -8
  1201. package/dist/components/BbBaseTag/BbBaseTag.vue.d.ts +0 -50
  1202. package/dist/components/BbBaseTag/BbBaseTag.vue.js +0 -6
  1203. package/dist/components/BbBaseTag/BbBaseTag.vue_vue_type_script_setup_true_lang.js +0 -266
  1204. package/dist/components/BbBaseTag/types.d.ts +0 -160
  1205. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.d.ts +0 -45
  1206. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.js +0 -6
  1207. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue_vue_type_script_setup_true_lang.js +0 -200
  1208. package/dist/components/BbBaseTextInput/types.d.ts +0 -209
  1209. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.d.ts +0 -39
  1210. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.js +0 -6
  1211. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue_vue_type_script_setup_true_lang.js +0 -187
  1212. package/dist/components/BbBaseTextarea/types.d.ts +0 -170
  1213. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.d.ts +0 -27
  1214. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.js +0 -6
  1215. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue_vue_type_script_setup_true_lang.js +0 -519
  1216. package/dist/components/BbBaseTimePickerInput/types.d.ts +0 -151
  1217. package/dist/components/BbTabs/BbTabsPanes.vue.d.ts +0 -16
  1218. package/dist/components/BbTabs/BbTabsPanes.vue_vue_type_script_setup_true_lang.js +0 -35
  1219. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue.js +0 -6
  1220. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue_vue_type_script_setup_true_lang.js +0 -107
  1221. package/dist/confirm-variants.d.ts +0 -17
  1222. package/dist/dropdown-item-variants.d.ts +0 -17
  1223. package/dist/i18n/index.js +0 -27
  1224. package/dist/indicator-variants.d.ts +0 -20
  1225. package/dist/locale-registry.d.ts +0 -37
  1226. package/dist/toast-variants.d.ts +0 -20
  1227. package/dist/tooltip-variants.d.ts +0 -17
  1228. package/dist/types/InputDirection.d.ts +0 -15
  1229. package/dist/validated/BbCheckbox.vue.d.ts +0 -29
  1230. package/dist/validated/BbCheckbox.vue.js +0 -5
  1231. package/dist/validated/BbCheckbox.vue_vue_type_script_setup_true_lang.js +0 -75
  1232. package/dist/validated/BbCheckboxGroup.vue.d.ts +0 -34
  1233. package/dist/validated/BbCheckboxGroup.vue.js +0 -5
  1234. package/dist/validated/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +0 -82
  1235. package/dist/validated/BbColorInput.vue.d.ts +0 -37
  1236. package/dist/validated/BbColorInput.vue.js +0 -5
  1237. package/dist/validated/BbColorInput.vue_vue_type_script_setup_true_lang.js +0 -75
  1238. package/dist/validated/BbDatePickerInput.vue.d.ts +0 -41
  1239. package/dist/validated/BbDatePickerInput.vue.js +0 -5
  1240. package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +0 -90
  1241. package/dist/validated/BbDropzone.vue.d.ts +0 -24
  1242. package/dist/validated/BbDropzone.vue.js +0 -5
  1243. package/dist/validated/BbDropzone.vue_vue_type_script_setup_true_lang.js +0 -45
  1244. package/dist/validated/BbForm.vue.d.ts +0 -28
  1245. package/dist/validated/BbForm.vue_vue_type_script_setup_true_lang.js +0 -42
  1246. package/dist/validated/BbNumberInput.vue.d.ts +0 -36
  1247. package/dist/validated/BbNumberInput.vue.js +0 -5
  1248. package/dist/validated/BbNumberInput.vue_vue_type_script_setup_true_lang.js +0 -72
  1249. package/dist/validated/BbRadioGroup.vue.d.ts +0 -34
  1250. package/dist/validated/BbRadioGroup.vue.js +0 -5
  1251. package/dist/validated/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +0 -78
  1252. package/dist/validated/BbRating.vue.d.ts +0 -30
  1253. package/dist/validated/BbRating.vue.js +0 -5
  1254. package/dist/validated/BbRating.vue_vue_type_script_setup_true_lang.js +0 -63
  1255. package/dist/validated/BbSelect.vue.d.ts +0 -46
  1256. package/dist/validated/BbSelect.vue.js +0 -5
  1257. package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +0 -109
  1258. package/dist/validated/BbSlider.vue.d.ts +0 -36
  1259. package/dist/validated/BbSlider.vue.js +0 -5
  1260. package/dist/validated/BbSlider.vue_vue_type_script_setup_true_lang.js +0 -69
  1261. package/dist/validated/BbSwitch.vue.d.ts +0 -29
  1262. package/dist/validated/BbSwitch.vue.js +0 -5
  1263. package/dist/validated/BbSwitch.vue_vue_type_script_setup_true_lang.js +0 -75
  1264. package/dist/validated/BbSwitchGroup.vue.d.ts +0 -34
  1265. package/dist/validated/BbSwitchGroup.vue.js +0 -5
  1266. package/dist/validated/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +0 -82
  1267. package/dist/validated/BbTag.vue.d.ts +0 -36
  1268. package/dist/validated/BbTag.vue.js +0 -5
  1269. package/dist/validated/BbTag.vue_vue_type_script_setup_true_lang.js +0 -72
  1270. package/dist/validated/BbTextInput.vue.d.ts +0 -36
  1271. package/dist/validated/BbTextInput.vue.js +0 -5
  1272. package/dist/validated/BbTextInput.vue_vue_type_script_setup_true_lang.js +0 -72
  1273. package/dist/validated/BbTextarea.vue.d.ts +0 -36
  1274. package/dist/validated/BbTextarea.vue.js +0 -5
  1275. package/dist/validated/BbTextarea.vue_vue_type_script_setup_true_lang.js +0 -70
  1276. package/dist/validated/BbTimePickerInput.vue.d.ts +0 -37
  1277. package/dist/validated/BbTimePickerInput.vue.js +0 -5
  1278. package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +0 -81
  1279. package/dist/validated/index.d.ts +0 -43
  1280. package/dist/validated/useValidatedField.d.ts +0 -93
  1281. package/dist/validated/useValidatedField.js +0 -51
  1282. package/dist/validated.js +0 -21
  1283. /package/dist/components/{BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.d.ts → BbCalendar/CalendarMonthPanel.vue.d.ts} +0 -0
  1284. /package/dist/components/{BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.d.ts → BbCalendar/CalendarYearPanel.vue.d.ts} +0 -0
  1285. /package/dist/{components/BbBaseDatePicker/typeahead.d.ts → composables/useTypeahead.d.ts} +0 -0
  1286. /package/dist/{components/BbBaseDatePicker/typeahead.js → composables/useTypeahead.js} +0 -0
@@ -6,152 +6,404 @@
6
6
 
7
7
  ```vue
8
8
  <template>
9
- <BaseInputContainer
9
+ <CommonField
10
10
  :id="id"
11
11
  class="bb-select"
12
12
  :clearable="isClearable"
13
13
  :compact="compact"
14
14
  :description="description"
15
- :direction="direction"
16
15
  :disabled="disabled"
17
- :errors="errors"
16
+ :errors="fieldErrors"
18
17
  :has-errors="hasErrors"
19
18
  :has-value="hasValue"
20
- :has-warning="hasWarning"
19
+ :has-warnings="hasWarnings"
21
20
  :hide-label="hideLabel"
22
21
  :hint="hint"
22
+ :input-align="inputAlign"
23
23
  :label="label"
24
+ :label-align="labelAlign"
24
25
  :label-mode="resolvedLabelMode"
25
26
  :label-position="labelPosition"
27
+ :layout="layout"
26
28
  :loading="loading"
27
29
  :mobile="isMobile"
28
- :model-value="modelValue"
29
30
  :name="name"
30
- :readonly="readonly"
31
+ :passthrough="passthrough"
32
+ :readonly="fieldReadonly"
31
33
  :reverse="reverse"
34
+ :show-asterisk="showAsterisk"
32
35
  :show-hint="showHint"
33
36
  :warnings="warnings"
37
+ v-bind="passthrough.forwardAttrs"
34
38
  >
35
39
  <template #label="data"><slot name="label" v-bind="data"></slot></template>
36
- <template #input="{ id, hasErrors, hasWarning, ariaDescribedby }">
37
- <BaseSelect
38
- :id="id"
40
+ <template v-if="$slots.description" #description="data"
41
+ ><slot name="description" v-bind="data"></slot
42
+ ></template>
43
+ <template
44
+ #input="{
45
+ id: fieldId,
46
+ hasErrors: fieldHasErrors,
47
+ hasWarnings: fieldHasWarnings,
48
+ ariaDescribedby,
49
+ }"
50
+ >
51
+ <BbSelectPopover
52
+ :id="fieldId"
39
53
  :adaptive="adaptive"
40
- :append:icon="props['append:icon']"
54
+ :anchor="wrapperRef"
41
55
  :aria-describedby="ariaDescribedby"
56
+ :aria-invalid="fieldHasErrors || undefined"
42
57
  :autocomplete="autocomplete"
43
- :autofocus="autofocus"
44
- :clearable="clearable"
45
- :comma="comma"
46
58
  :compact="compact"
47
59
  :dependencies="dependencies"
48
60
  :deps-debounce-time="depsDebounceTime"
49
61
  :disable-writing="disableWriting"
50
62
  :disabled="disabled"
63
+ :empty-text="emptyText"
51
64
  :enforce-coherence="enforceCoherence"
65
+ :failed-text="failedText"
52
66
  :filter-by="Array.isArray(filterBy) ? filterBy : undefined"
53
67
  :group-by="groupBy"
54
- :has-errors="hasErrors"
55
- :has-warning="hasWarning"
56
68
  :header-height="headerHeight"
57
69
  :item-height="itemHeight"
70
+ :item-props="itemProps"
58
71
  :item-text="itemText"
59
72
  :item-value="itemValue"
60
73
  :items="items"
61
74
  :loading="loading"
62
75
  :loading-text="loadingText"
63
76
  :max="max"
64
- :max-selected-labels="maxSelectedLabels"
65
- :model-value="modelValue"
77
+ :model-value="fieldModel"
66
78
  :model-value-debounce-time="modelValueDebounceTime"
67
79
  :multiple="multiple"
68
- :name="name"
69
- :no-data-text="noDataText"
70
- :off-canvas-props="offCanvasProps"
71
- :placeholder="placeholder"
72
- :prefill="prefill"
73
- :prepend:icon="props['prepend:icon']"
80
+ :off-canvas-props="resolvedOffCanvasProps"
81
+ :prefill="computedPrefill"
82
+ :pt="popoverPt()"
74
83
  :query-debounce-time="queryDebounceTime"
75
- :readonly="readonly"
76
- :required="required"
84
+ :readonly="fieldReadonly"
77
85
  :selectable="selectable"
78
- :selected-labels-fn="selectedLabelsFn"
79
86
  :stash="stash"
80
87
  :transition-duration="transitionDuration"
81
- v-bind="eventListeners"
88
+ width="100%"
89
+ v-bind="popoverListeners()"
82
90
  >
91
+ <template
92
+ #activator="{
93
+ props: activatorProps,
94
+ shown,
95
+ loading: activatorLoading,
96
+ text,
97
+ selectedOptions,
98
+ clear,
99
+ query,
100
+ focus,
101
+ close,
102
+ toggle,
103
+ }"
104
+ >
105
+ <CommonFieldInput
106
+ ref="wrapperRef"
107
+ :active="shown"
108
+ :append:icon="appendIcon"
109
+ class="bb-select__field"
110
+ :class="{
111
+ 'bb-select__field--shown': shown,
112
+ 'bb-select__field--disabled': disabled,
113
+ 'bb-select__field--readonly': fieldReadonly,
114
+ }"
115
+ :clearable="clearable"
116
+ :compact="compact"
117
+ :disabled="disabled"
118
+ :has-errors="fieldHasErrors"
119
+ :has-value="hasValue"
120
+ :has-warnings="fieldHasWarnings"
121
+ :loading="activatorLoading"
122
+ :passthrough="boxRowPassthrough(activatorLoading)"
123
+ :prepend:icon="declaredProps['prepend:icon']"
124
+ :readonly="fieldReadonly"
125
+ :variant="variant"
126
+ @click:clear="
127
+ () => {
128
+ clear();
129
+ nextTick(refocusActivator);
130
+ }
131
+ "
132
+ @container:click="toggle"
133
+ >
134
+ <!-- The activator input is a transparent overlay: its own value stays
135
+ empty (the visible face is this span), so the resolved selection must
136
+ reach AT through the name — label + selection node (below), the
137
+ button-select labelling pattern. aria-valuetext is not supported on
138
+ the combobox role, so it cannot be the value channel. -->
139
+ <span
140
+ :id="`${fieldId}__value`"
141
+ ref="valueRef"
142
+ class="bb-select__value"
143
+ >
144
+ <!-- eslint-disable vue/attributes-order -- `pt` binds LAST so a consumer listener runs after ours (PASSTHROUGH.md T17) -->
145
+ <input
146
+ :id="fieldId"
147
+ :aria-labelledby="`${fieldId}__label ${fieldId}__selection`"
148
+ :aria-readonly="fieldReadonly || undefined"
149
+ :aria-required="activatorAriaRequired"
150
+ :autofocus="autofocus"
151
+ class="bb-select__activator"
152
+ :disabled="disabled"
153
+ type="button"
154
+ v-bind="
155
+ mergeProps(
156
+ activatorProps,
157
+ passthrough.part('activator', { loading: activatorLoading })
158
+ )
159
+ "
160
+ />
161
+ <!-- eslint-enable vue/attributes-order -->
162
+
163
+ <template v-if="multiple">
164
+ <span
165
+ v-if="usesOverflowCollapse || !isCollapsed"
166
+ ref="chipsContainerRef"
167
+ class="bb-select__chips-row"
168
+ :class="{
169
+ 'bb-select__chips-row--hidden': isCollapsed,
170
+ 'bb-select__chips-row--chips':
171
+ !comma && !!selectedOptions.length,
172
+ }"
173
+ >
174
+ <template v-if="comma">
175
+ <!-- eslint-disable vue/attributes-order -- `pt` binds LAST so a consumer listener runs after ours (PASSTHROUGH.md T17) -->
176
+ <span
177
+ v-for="item in selectedOptions"
178
+ :key="hash(item.value)"
179
+ class="bb-select__comma"
180
+ v-bind="passthrough.part('comma', {}, item.item)"
181
+ >
182
+ <!-- eslint-enable vue/attributes-order -->
183
+ {{ item.text }}
184
+ </span>
185
+ </template>
186
+ <!-- One badge per selection: removable (clearable) when
187
+ deselection is allowed, non-removable otherwise. The `chip`
188
+ slot replaces the badge outright (the badge below is its
189
+ fallback), so a consumer can render their own chip — a colored
190
+ tag, an avatar row — without reaching for `prepend`. No wrapper
191
+ element around it: the row itself supplies the spacing (see
192
+ `--chips` in index.css), so custom content needs none of our
193
+ class names to sit correctly. -->
194
+ <template v-else>
195
+ <!-- `v-for` on a `<template>`, not on the `<slot>` itself: a
196
+ `key` bound on a slot outlet is passed through as a slot
197
+ PROP. The template renders no element of its own. -->
198
+ <template
199
+ v-for="item in selectedOptions"
200
+ :key="hash(item.value)"
201
+ >
202
+ <slot
203
+ :deselect="() => onChipUnselected(item)"
204
+ :disabled="!canDeselectChips"
205
+ :item="item.item"
206
+ name="chip"
207
+ :text="item.text"
208
+ :value="item.value"
209
+ >
210
+ <BbBadge
211
+ class="bb-select__badge"
212
+ :clearable="canDeselectChips"
213
+ size="lg"
214
+ variant="secondary"
215
+ v-bind="passthrough.part('badge', {}, item.item)"
216
+ @click:clear.stop="onChipUnselected(item)"
217
+ >
218
+ {{ item.text }}
219
+ </BbBadge>
220
+ </slot>
221
+ </template>
222
+ </template>
223
+ </span>
224
+ <span v-if="isCollapsed" class="bb-select__max-reached">
225
+ {{ collapsedSummaryText }}
226
+ </span>
227
+ <!-- Nothing picked: the placeholder, in chips and comma mode alike,
228
+ gone with the first pick (owner ruling Q53.4, 2026-09-24). -->
229
+ <span
230
+ v-if="!selectedOptions.length && placeholder"
231
+ class="bb-select__display-value bb-select__placeholder"
232
+ >
233
+ {{ placeholder }}
234
+ </span>
235
+ </template>
236
+ <span
237
+ v-else
238
+ class="bb-select__display-value"
239
+ :class="[{ 'bb-select__placeholder': !text }]"
240
+ >
241
+ {{ text || placeholder }}
242
+ </span>
243
+ </span>
244
+ <!-- The value half of the activator's accessible name. A node of its
245
+ own, OUTSIDE `__value`, for two reasons. (1) Correctness: every node an
246
+ aria-labelledby chain points at is flattened with name-from-content,
247
+ which descends into nested interactive content — pointing at `__value`
248
+ swept up each chip's ✕ button aria-label, so a three-pick select
249
+ announced "Country Italy Remove France Remove Spain Remove" on every
250
+ focus. (2) `__value` stays the *visible* face and nothing else: it is
251
+ read back as the resolved label (innerText) by the fixture e2e specs,
252
+ so a visually-hidden copy nested inside it would double every reading.
253
+ The chips keep their ✕ buttons — those are real tab stops and must stay
254
+ named; the activator's name just stops reading them. `hidden`, not
255
+ bb-sr-only (Q63.2): read through aria-labelledby (accname 2B), never
256
+ a second, page-text copy of the visible value in browse mode. -->
257
+ <span :id="`${fieldId}__selection`" hidden>{{
258
+ accessibleSelectionText(text)
259
+ }}</span>
260
+ <template #append:outer
261
+ ><slot name="append:outer" v-bind="{ query, close }"
262
+ /></template>
263
+ <template #append
264
+ ><slot name="append" v-bind="{ query, focus, close }"
265
+ /></template>
266
+ <template v-if="$slots.prefix" #prefix
267
+ ><slot name="prefix"
268
+ /></template>
269
+ <template v-if="$slots.suffix" #suffix
270
+ ><slot name="suffix"
271
+ /></template>
272
+ <template #prepend
273
+ ><slot name="prepend" v-bind="{ query, focus, close }"
274
+ /></template>
275
+ <template #prepend:outer
276
+ ><slot name="prepend:outer" v-bind="{ query, close }"
277
+ /></template>
278
+ </CommonFieldInput>
279
+
280
+ <!-- The value channel: `form` (the one native attribute a hidden input
281
+ reads) routes here from the consumer's attributes. -->
282
+ <input
283
+ v-for="input in hiddenInputs"
284
+ :key="input.value"
285
+ v-bind="mergeProps(input, passthrough.controlAttrs)"
286
+ />
287
+ </template>
288
+
83
289
  <template v-if="$slots.header" #header="data">
84
290
  <slot name="header" v-bind="data" />
85
291
  </template>
86
292
  <template v-if="$slots.footer" #footer="data">
87
293
  <slot name="footer" v-bind="data" />
88
294
  </template>
89
- <template #append-outer="data">
90
- <slot name="append-outer" v-bind="data" />
91
- </template>
92
- <template #append="data">
93
- <slot name="append" v-bind="data" />
94
- </template>
95
- <template v-if="$slots.prefix" #prefix>
96
- <slot name="prefix" />
97
- </template>
98
- <template v-if="$slots.suffix" #suffix>
99
- <slot name="suffix" />
100
- </template>
101
- <template #prepend="data">
102
- <slot name="prepend" v-bind="data" />
103
- </template>
104
- <template #prepend-outer="data">
105
- <slot name="prepend-outer" v-bind="data" />
106
- </template>
107
295
  <template #loading="data">
108
296
  <slot name="loading" v-bind="data" />
109
297
  </template>
110
- <template #no-data="data">
111
- <slot name="no-data" v-bind="data" />
298
+ <template #empty="data">
299
+ <slot name="empty" v-bind="data" />
112
300
  </template>
113
- <template #option="data">
114
- <slot name="option" v-bind="data" />
301
+ <template v-if="$slots.option" #option="data">
302
+ <slot :has-errors="fieldHasErrors" name="option" v-bind="data" />
115
303
  </template>
116
304
  <template #group="data">
117
305
  <slot name="group" v-bind="data" />
118
306
  </template>
119
- </BaseSelect>
307
+ </BbSelectPopover>
120
308
  </template>
121
- </BaseInputContainer>
309
+ </CommonField>
122
310
  </template>
123
311
 
124
312
  <script setup lang="ts" generic="T = any">
125
- import { computed, ref } from 'vue';
126
- import BaseInputContainer from '../BbBaseInputContainer/BbBaseInputContainer.vue';
127
- import BaseSelect from '../BbBaseSelect/BbBaseSelect.vue';
313
+ import {
314
+ computed,
315
+ getCurrentInstance,
316
+ mergeProps,
317
+ nextTick,
318
+ onMounted,
319
+ onUnmounted,
320
+ ref,
321
+ useAttrs,
322
+ watch,
323
+ } from 'vue';
324
+ import CommonField from '../CommonField/CommonField.vue';
325
+ import CommonFieldInput from '../CommonFieldInput/CommonFieldInput.vue';
326
+ import BbBadge from '../BbBadge/BbBadge.vue';
327
+ import BbSelectPopover from '../BbSelectPopover/BbSelectPopover.vue';
328
+ import {
329
+ BB_SELECT_POPOVER_PT,
330
+ type BbSelectResolvedOption,
331
+ } from '../BbSelectPopover/types';
128
332
  import { useMobile } from '@/composables/useMobile';
129
- import { config } from 'virtual:bitboss-ui/config';
333
+ import { useConfig } from '@/composables/useConfig';
334
+ import { useFormBinding } from '@/composables/useFormBinding';
335
+ import { useLocale } from '@/composables/useLocale';
336
+ import {
337
+ formControlPtActive,
338
+ SELECT_CONTROL_NATIVE_ATTRS,
339
+ usePassthrough,
340
+ } from '@/composables/usePassthrough';
130
341
  import { removedPropsFor } from '@/deprecation/removedProps';
131
342
  import { warnRemovedAttrs } from '@/utilities/functions/warnRemovedAttrs';
343
+ import { hasVnodeListener } from '@/utilities/functions/hasVnodeListener';
132
344
  import { isNotEmpty } from '@/utilities/functions/isNotEmpty';
133
- import type { BbSelectProps, BbSelectEvents, BbSelectSlots } from './types';
134
-
135
- // `adaptive` is declared with a `undefined` default (not omitted) so it stays
136
- // three-state when forwarded to BaseSelect: it disables Vue's absent→`false`
137
- // Boolean cast (which would forward an explicit `false` and defeat the global
138
- // `config.adaptive`), while keeping the Boolean type so the valueless `adaptive`
139
- // shorthand still resolves to `true`.
140
- const props = withDefaults(defineProps<BbSelectProps<T>>(), {
345
+ import { throttle } from '@/utilities/functions/throttle';
346
+ import { when } from '@/utilities/functions/when';
347
+ import { hash } from '@/utilities/functions/hash';
348
+ import { reject } from '@/utilities/functions/reject';
349
+ import chevronDownSvg from '@/assets/svgs/chevron_down.svg?raw';
350
+ import { provideSheetChipAttrs } from '../BbSelectPopover/sheetChipAttrs';
351
+ import {
352
+ BB_SELECT_PT,
353
+ type BbSelectProps,
354
+ type BbSelectEvents,
355
+ type BbSelectSlots,
356
+ } from './types';
357
+
358
+ defineOptions({ inheritAttrs: false });
359
+ const declaredProps = withDefaults(defineProps<BbSelectProps<T>>(), {
360
+ // `undefined` (declared, not omitted) keeps `adaptive` three-state all the
361
+ // way to BbSelectPopover: it disables Vue's absent→`false` Boolean cast
362
+ // (which would pass an explicit `false` and defeat the global
363
+ // `config.adaptive`), while keeping the Boolean type so the valueless
364
+ // `adaptive` shorthand still resolves to `true`.
141
365
  adaptive: undefined,
366
+ // Same three-state reason as `adaptive`: an absent `disable-writing` must
367
+ // reach the popover as `undefined` so it can mean `'auto'` there; the
368
+ // valueless shorthand still casts to `true`.
369
+ disableWriting: undefined,
142
370
  // Same three-state reason as `adaptive`: `prefill` is typed
143
371
  // `boolean | 'interaction'`, so leaving it out lets Vue's absent→`false`
144
- // Boolean cast forward an explicit `false` and defeat BaseSelect's
145
- // `'interaction'` default — which is how every BbSelect silently ran with
146
- // `prefill: false`. Harmless while `false` behaved like `'interaction'`;
147
- // load-bearing now that `false` means search-first.
372
+ // Boolean cast turn "not set" into an explicit `false` — which is how every
373
+ // BbSelect once silently ran with `prefill: false`. Harmless while `false`
374
+ // behaved like `'interaction'`; load-bearing now that `false` means
375
+ // search-first. Unset resolves to `'interaction'` in `computedPrefill`.
148
376
  prefill: undefined,
149
377
  selectable: true,
150
378
  });
151
379
 
152
- const emit = defineEmits<BbSelectEvents>();
380
+ const declaredEmit = defineEmits<BbSelectEvents>();
153
381
 
154
382
  defineSlots<BbSelectSlots<T>>();
383
+ // Inside a BbForm the field joins it (Q54.4): `props` / `emit` are bound.
384
+ const {
385
+ props,
386
+ emit,
387
+ showAsterisk,
388
+ errors: fieldErrors,
389
+ ariaRequired: fieldAriaRequired,
390
+ required: fieldRequired,
391
+ model: fieldModel,
392
+ readonly: fieldReadonly,
393
+ } = useFormBinding(declaredProps, declaredEmit, {
394
+ componentName: 'BbSelect',
395
+ identifierFallback: () => declaredProps.label,
396
+ leaveOn: 'inactive',
397
+ });
398
+ // Outside a form the binding leaves `required` to the native attribute, but
399
+ // the combobox is an `input type="button"` overlay and `required` only lands
400
+ // on the hidden form inputs: say it to AT on the combobox itself.
401
+ const activatorAriaRequired = computed(
402
+ () => fieldAriaRequired.value ?? (fieldRequired.value ? true : undefined)
403
+ );
404
+
405
+ const config = useConfig();
406
+ const { t } = useLocale();
155
407
 
156
408
  if (process.env.NODE_ENV !== 'production')
157
409
  warnRemovedAttrs('BbSelect', removedPropsFor('BbSelect'));
@@ -159,16 +411,301 @@ if (process.env.NODE_ENV !== 'production')
159
411
  const active = ref(false);
160
412
  const { isMobile } = useMobile();
161
413
  const showHint = computed(() => props.persistentHint || active.value);
162
- const isClearable = computed(
163
- () => Boolean(props.clearable) && isNotEmpty(props.modelValue)
164
- );
165
414
  const hasValue = computed(() => isNotEmpty(props.modelValue));
415
+ const isClearable = computed(() => Boolean(props.clearable) && hasValue.value);
166
416
  const resolvedLabelMode = computed(
167
417
  () => props.labelMode ?? config.defaultInputLabelMode
168
418
  );
169
419
 
170
420
  /**
171
- * These events are just propagated
421
+ * Whether the options surface is showing: on from the popover's `show` to its
422
+ * `hide`. The `active` event also fires on plain focus, so it cannot stand in.
423
+ */
424
+ const open = ref(false);
425
+
426
+ /**
427
+ * Passthrough (plans/passthrough/BbSelect.md). `panel` and `option` are the popover's: their raw entries are forwarded to it under the same words (`panel` → its `panel`, the painted bubble), so `option:selected` is resolved per option where the selection is known.
428
+ */
429
+ const passthrough = usePassthrough({
430
+ component: 'BbSelect',
431
+ attrs: useAttrs(),
432
+ controlAttrs: SELECT_CONTROL_NATIVE_ATTRS,
433
+ props,
434
+ parts: BB_SELECT_PT.parts,
435
+ states: BB_SELECT_PT.states,
436
+ active: {
437
+ ...formControlPtActive(props, () => hasValue.value),
438
+ open: () => open.value,
439
+ },
440
+ });
441
+
442
+ /**
443
+ * The popover's `pt`. The option rows go with every popover state: it
444
+ * resolves `disabled` per option (and every option is disabled when this
445
+ * control is). The surface (`panel`, `sheet`, `input`, `list`) goes WITHOUT `disabled`:
446
+ * the popover has no component-level `disabled`, so an entry handed over
447
+ * under its own word never resolved there — left out of the child's states,
448
+ * it is resolved here, from this control's `disabled` (a family state,
449
+ * component-wide on every part).
450
+ */
451
+ // The phone sheet lists the selection as chips too; they take `pt:badge`
452
+ // exactly as the field's chips do (Q56.13).
453
+ provideSheetChipAttrs((item) => passthrough.part('badge', {}, item));
454
+
455
+ const popoverPt = () => ({
456
+ ...passthrough.forward(
457
+ ['panel', 'sheet', 'header', 'footer', 'input', 'list'],
458
+ BB_SELECT_POPOVER_PT.states.filter((state) => state !== 'disabled')
459
+ ),
460
+ ...passthrough.forward(
461
+ ['option', 'itemText', 'itemIcon', 'itemDescription'],
462
+ BB_SELECT_POPOVER_PT.states
463
+ ),
464
+ });
465
+
466
+ /**
467
+ * The box row's parts inside the activator slot, where the popover's own fetch
468
+ * is known: `loading` there is the `loading` prop OR the items the popover is
469
+ * fetching, so `pt:box:loading` / `pt:spinner:loading` / … follow the spinner.
470
+ * The frame (`root`, `label`, `hint`, `message`) sits outside the slot and
471
+ * follows the `loading` prop only — the popover's internal fetch is not public
472
+ * state. `part()` caches one binding per state combination.
473
+ */
474
+ const BOX_ROW_PARTS = [
475
+ 'box',
476
+ 'icon',
477
+ 'spinner',
478
+ 'clear',
479
+ 'prefix',
480
+ 'suffix',
481
+ ] as const;
482
+ const boxRowPassthrough = (activatorLoading: boolean) =>
483
+ Object.fromEntries(
484
+ BOX_ROW_PARTS.map((part) => [
485
+ part,
486
+ passthrough.part(part, { loading: activatorLoading }),
487
+ ])
488
+ );
489
+
490
+ /**
491
+ * Sheet chrome: default the adaptive off-canvas title to the field label.
492
+ * Consumer `offCanvasProps` spread last so an explicit `title` (or any other
493
+ * sheet prop) still wins — same shape as BbSelectPopover's `offcanvasBindings`.
494
+ */
495
+ const resolvedOffCanvasProps = computed(() => ({
496
+ title: props.label,
497
+ ...props.offCanvasProps,
498
+ }));
499
+
500
+ /** The chevron unless the consumer sets their own append icon. */
501
+ const appendIcon = computed(() =>
502
+ props['append:icon'] === undefined ? chevronDownSvg : props['append:icon']
503
+ );
504
+
505
+ /** No cap on the chip labels unless `maxSelectedLabels` is set. */
506
+ const resolvedMaxSelectedLabels = computed(() =>
507
+ props.maxSelectedLabels === undefined ? Infinity : props.maxSelectedLabels
508
+ );
509
+
510
+ /**
511
+ * A select with a value always prefills (the popover resolves the labels of
512
+ * the selection); without one it follows `prefill`, `'interaction'` unless set.
513
+ */
514
+ const computedPrefill = computed(() => {
515
+ if (hasValue.value) return true;
516
+ return props.prefill ?? 'interaction';
517
+ });
518
+
519
+ const wrapperRef = ref<InstanceType<typeof CommonFieldInput>>();
520
+ const valueRef = ref<HTMLElement>();
521
+ const chipsContainerRef = ref<HTMLElement>();
522
+
523
+ const selectedCount = computed(() => {
524
+ if (!props.multiple) return 0;
525
+ if (!Array.isArray(props.modelValue)) return props.modelValue != null ? 1 : 0;
526
+ return props.modelValue.length;
527
+ });
528
+
529
+ const usesCountLimit = computed(
530
+ () => resolvedMaxSelectedLabels.value !== Infinity
531
+ );
532
+ const usesOverflowCollapse = computed(() => !usesCountLimit.value);
533
+ const isOverflowing = ref(false);
534
+ const chipsLeftInsetCompensation = ref(0);
535
+ const hasMeasuredChipsInsetCompensation = ref(false);
536
+ const isCollapsed = computed(() => {
537
+ if (selectedCount.value <= 1) return false;
538
+ if (usesCountLimit.value) {
539
+ return selectedCount.value > resolvedMaxSelectedLabels.value;
540
+ }
541
+ return isOverflowing.value;
542
+ });
543
+
544
+ const canDeselectChips = computed(() => !props.disabled && !props.readonly);
545
+
546
+ const onChipUnselected = (option: BbSelectResolvedOption) => {
547
+ if (!canDeselectChips.value) return;
548
+ if (props.multiple) {
549
+ const valueToEmit = reject(props.modelValue, option.value);
550
+ emit('update:modelValue', valueToEmit);
551
+ } else {
552
+ emit('update:modelValue', null);
553
+ }
554
+ };
555
+
556
+ const refocusActivator = () => {
557
+ (wrapperRef.value?.$el as HTMLElement | undefined)
558
+ ?.querySelector<HTMLButtonElement>('.bb-select__activator')
559
+ ?.focus();
560
+ };
561
+
562
+ const collapsedSummaryText = computed(() => {
563
+ if (props.selectedLabelsFn) {
564
+ return props.selectedLabelsFn(selectedCount.value);
565
+ }
566
+ return t('select.multipleMaxReached', selectedCount.value).value;
567
+ });
568
+
569
+ /**
570
+ * The selection half of the activator's accessible name, mirroring what the
571
+ * control visually shows — `text` is already the ", "-joined display text of
572
+ * every selection (single or multiple), a collapsed row shows its summary
573
+ * instead, and a single select falls back to the placeholder exactly like
574
+ * `__display-value` does. Multiple with nothing picked shows the placeholder
575
+ * too (Q53.4), so it names the empty state the same way.
576
+ */
577
+ const accessibleSelectionText = (text: string) => {
578
+ if (props.multiple && isCollapsed.value) return collapsedSummaryText.value;
579
+ return text || props.placeholder || '';
580
+ };
581
+
582
+ const resetChipsInsetCompensation = () => {
583
+ hasMeasuredChipsInsetCompensation.value = false;
584
+ chipsLeftInsetCompensation.value = 0;
585
+ };
586
+
587
+ const updateChipsInsetCompensation = () => {
588
+ if (hasMeasuredChipsInsetCompensation.value || !chipsContainerRef.value) {
589
+ return;
590
+ }
591
+ const chipsStyles = getComputedStyle(chipsContainerRef.value);
592
+ const chipsMarginLeft = Number.parseFloat(chipsStyles.marginLeft || '0');
593
+ chipsLeftInsetCompensation.value = Math.max(0, -chipsMarginLeft);
594
+ hasMeasuredChipsInsetCompensation.value = true;
595
+ };
596
+
597
+ const checkOverflow = () => {
598
+ if (
599
+ !usesOverflowCollapse.value ||
600
+ !chipsContainerRef.value ||
601
+ !valueRef.value ||
602
+ selectedCount.value <= 1
603
+ ) {
604
+ isOverflowing.value = false;
605
+ return;
606
+ }
607
+ updateChipsInsetCompensation();
608
+ const availableWidth =
609
+ valueRef.value.clientWidth + chipsLeftInsetCompensation.value;
610
+ // clientWidth/scrollWidth are integer-rounded while availableWidth is
611
+ // fractional (the negative chips margin is sub-pixel), so compare with a 1px
612
+ // tolerance — otherwise rounding alone reports a phantom overflow and the row
613
+ // collapses to the summary even with plenty of room.
614
+ isOverflowing.value =
615
+ chipsContainerRef.value.scrollWidth > availableWidth + 1;
616
+ };
617
+
618
+ const scheduleOverflowCheck = throttle(checkOverflow, 100, {
619
+ leading: true,
620
+ trailing: true,
621
+ });
622
+
623
+ let resizeObserver: ResizeObserver | null = null;
624
+
625
+ /**
626
+ * Overflow collapsing is only in play while `maxSelectedLabels` is `Infinity`
627
+ * (otherwise the count limit decides), so the observer follows that flag rather
628
+ * than being wired once at mount: a select that mounts with a finite limit and
629
+ * later has it raised to `Infinity` would otherwise never get an observer at
630
+ * all, leaving `isOverflowing` false forever and the chips row spilling out of
631
+ * the control until the component remounts.
632
+ */
633
+ const syncOverflowObserver = () => {
634
+ resizeObserver?.disconnect();
635
+ resizeObserver = null;
636
+ if (!usesOverflowCollapse.value) return;
637
+
638
+ resizeObserver = new ResizeObserver(scheduleOverflowCheck);
639
+ if (valueRef.value) resizeObserver.observe(valueRef.value);
640
+ nextTick(() => {
641
+ scheduleOverflowCheck();
642
+ });
643
+ };
644
+
645
+ onMounted(syncOverflowObserver);
646
+ watch(usesOverflowCollapse, syncOverflowObserver, { flush: 'post' });
647
+
648
+ onUnmounted(() => {
649
+ resizeObserver?.disconnect();
650
+ scheduleOverflowCheck.cancel();
651
+ });
652
+
653
+ watch(
654
+ () => [props.modelValue, resolvedMaxSelectedLabels.value] as const,
655
+ () => {
656
+ if (!usesOverflowCollapse.value) return;
657
+ nextTick(() => {
658
+ scheduleOverflowCheck();
659
+ });
660
+ }
661
+ );
662
+
663
+ watch(
664
+ () => [props.compact, props.comma, props['prepend:icon']] as const,
665
+ () => {
666
+ if (!usesOverflowCollapse.value) return;
667
+ resetChipsInsetCompensation();
668
+ nextTick(() => {
669
+ scheduleOverflowCheck();
670
+ });
671
+ }
672
+ );
673
+
674
+ const makeInputValue = when(
675
+ (item: unknown) => typeof item !== 'string',
676
+ JSON.stringify
677
+ );
678
+
679
+ // Empty selection (null/undefined/[]) posts NO field — mirroring a native
680
+ // <select multiple> with nothing chosen — instead of the literal "null".
681
+ // Note `required` on input[type=hidden] is barred from constraint validation
682
+ // by the HTML spec; it is kept for form-introspection only.
683
+ const hiddenInputs = computed(() =>
684
+ (props.multiple
685
+ ? ([] as any[]).concat(props.modelValue ?? [])
686
+ : [props.modelValue]
687
+ )
688
+ .filter((current) => current !== null && current !== undefined)
689
+ .map((current) => ({
690
+ disabled: props.disabled,
691
+ name: props.name,
692
+ required: props.required,
693
+ type: 'hidden',
694
+ value: makeInputValue(current),
695
+ }))
696
+ );
697
+
698
+ /**
699
+ * The popover's events, re-emitted; focus / active drive the hint and
700
+ * show / hide drive `open`.
701
+ *
702
+ * `option:add` is the exception: forwarded ONLY when the consumer bound it on
703
+ * this select. The popover decides `disable-writing="auto"` off its own vnode
704
+ * props — a creatable select keeps its search field — so an unconditional
705
+ * forward would make every BbSelect look creatable to it. Read at render
706
+ * (`popoverListeners()`), so a conditionally bound listener is seen as it is
707
+ * now; the two objects are prebuilt so the popover's props keep their identity
708
+ * across renders.
172
709
  */
173
710
  const eventListeners = {
174
711
  onBlur: (event: FocusEvent) => {
@@ -177,7 +714,6 @@ const eventListeners = {
177
714
  },
178
715
  onChange: (event: Event) => emit('change', event),
179
716
  onClick: (event: MouseEvent) => emit('click', event),
180
- 'onOption:add': (text: string) => emit('option:add', text),
181
717
  onFocus: (event: FocusEvent) => {
182
718
  active.value = true;
183
719
  emit('focus', event);
@@ -186,6 +722,16 @@ const eventListeners = {
186
722
  active.value = true;
187
723
  emit('active');
188
724
  },
725
+ onShow: () => {
726
+ open.value = true;
727
+ emit('show');
728
+ },
729
+ onShown: () => emit('shown'),
730
+ onHide: () => {
731
+ open.value = false;
732
+ emit('hide');
733
+ },
734
+ onHidden: () => emit('hidden'),
189
735
  onInactive: () => {
190
736
  active.value = false;
191
737
  emit('inactive');
@@ -193,6 +739,15 @@ const eventListeners = {
193
739
  onInput: (event: Event) => emit('input', event),
194
740
  'onUpdate:modelValue': (value: any) => emit('update:modelValue', value),
195
741
  };
742
+ const eventListenersWithAdd = {
743
+ ...eventListeners,
744
+ 'onOption:add': (text: string) => emit('option:add', text),
745
+ };
746
+ const instance = getCurrentInstance();
747
+ const popoverListeners = () =>
748
+ hasVnodeListener(instance, 'option:add')
749
+ ? eventListenersWithAdd
750
+ : eventListeners;
196
751
  </script>
197
752
 
198
753
  <style lang="postcss">
@@ -203,15 +758,201 @@ const eventListeners = {
203
758
  ## Types
204
759
 
205
760
  ```ts
761
+ import type { BbSelectItemProps } from '@/types/ItemProps';
762
+ import type { InputVariantType } from '@/types/InputVariant';
763
+ import type {
764
+ PtNoInfer,
765
+ FormControlPtState,
766
+ PtItemCtx,
767
+ PtItemMap,
768
+ PtItemResult,
769
+ PtValue,
770
+ } from '@/types/passthrough';
206
771
  import type { HTMLAttributes, InputHTMLAttributes } from 'vue';
207
- import type { InputDirection } from '@/types/InputDirection';
772
+ import type { FieldCrossAlign, FieldLayout } from '@/types/FieldLayout';
208
773
  import type { ItemAccessor } from '@/types/ItemAccessor';
774
+ import type { BbSelectItemsContext } from '@/types/ItemsProvider';
209
775
  import type { IconType } from '@/types/Icon';
210
- import type { BaseSelectEvents } from '../BbBaseSelect/types';
211
776
  import type { BbSelectResolvedOption } from '../BbSelectPopover/types';
212
777
  import type { BbOffCanvasProps } from '../BbOffCanvas/types';
778
+ import type { FormFieldProps } from '@/composables/useFormBinding';
779
+
780
+ /**
781
+ * Passthrough parts of `BbSelect` (plans/passthrough/BbSelect.md): the text-
782
+ * control family parts, plus the options surface's, forwarded to its
783
+ * `BbSelectPopover`.
784
+ *
785
+ * Per-item functions: on the instance, an option part (`option`, `itemText`, `itemIcon`, `itemDescription`) and a selection part (`badge`, `comma` — called here, per selected value, with its raw item) also accept `({ item, selected, … }) => PtValue | false | null | undefined` — `item` is the raw item of that option, and every state a boolean beside it, on for it (`selected`, `disabled`, …) — in the `pt` object or the `:pt:<part>` attribute, never on a `<part>:<state>` key and never in the global map or a scope (they ship as JSON). The function travels to the popover with the part and is called there, per option; its result is merged last, after every state entry, through the same deduper; a falsy result leaves the option as it was. See the passthrough guide, _Per-item functions_.
786
+ *
787
+ * @describedBy BbSelectPopoverPtPart
788
+ * @describedBy TextControlPtPart
789
+ * @part root - The field's outer container: the label, the box and the lines
790
+ * under it; a `class` on the component lands here. (The options surface is
791
+ * `panel`.)
792
+ * @part clear - The ✕ in the field that empties the selection (`clearable`) —
793
+ * one node, never a chip's own ✕.
794
+ * @part activator - The button you act on to open the options — the field's
795
+ * control (not a text field: `data-test` fits here, `autocomplete` does
796
+ * not). The chevron is chrome. It is `activator`, not the family's `input`:
797
+ * the field itself is a button (the date / time inputs' trigger is the same
798
+ * word).
799
+ * @part input - The search field inside the options surface, when it shows
800
+ * one (see `disable-writing`) — handed to the `BbSelectPopover` as its own
801
+ * `pt:input`. Its ✕ is chrome.
802
+ * @part panel - The options surface — the popover's painted bubble on
803
+ * desktop, the sheet itself on a phone.
804
+ * @part sheet - The bottom sheet the options open in on a phone only.
805
+ * @part header - The band around your `#header` slot: at the top of the
806
+ * flyout on desktop, the sheet's header on a phone.
807
+ * @part footer - The band around your `#footer` slot: at the bottom of the
808
+ * flyout on desktop, the sheet's footer on a phone.
809
+ * @part badge - Each selected value's `BbBadge` root with `multiple` — a
810
+ * broadcast resolved per value, on the field's chips and on the phone
811
+ * sheet's. The badge's own ✕ is chrome, never `clear`. In the field, not
812
+ * rendered when the `#chip` slot replaces it, nor in `comma` mode; the
813
+ * sheet's chips are always badges.
814
+ * @part comma - Each selected value with `multiple` and `comma` — a broadcast
815
+ * resolved per value.
816
+ */
817
+ export type BbSelectPtPart =
818
+ | 'root'
819
+ | 'label'
820
+ | 'description'
821
+ | 'message'
822
+ | 'hint'
823
+ | 'box'
824
+ | 'activator'
825
+ | 'input'
826
+ | 'icon'
827
+ | 'spinner'
828
+ | 'prefix'
829
+ | 'suffix'
830
+ | 'clear'
831
+ | 'panel'
832
+ | 'sheet'
833
+ | 'header'
834
+ | 'footer'
835
+ | 'list'
836
+ | 'option'
837
+ | 'itemText'
838
+ | 'itemIcon'
839
+ | 'itemDescription'
840
+ | 'badge'
841
+ | 'comma';
842
+ /** The field and surface parts — they take a `PtValue` only. */
843
+ export type BbSelectFieldPtPart =
844
+ | 'root'
845
+ | 'label'
846
+ | 'description'
847
+ | 'message'
848
+ | 'hint'
849
+ | 'box'
850
+ | 'activator'
851
+ | 'input'
852
+ | 'icon'
853
+ | 'spinner'
854
+ | 'prefix'
855
+ | 'suffix'
856
+ | 'clear'
857
+ | 'panel'
858
+ | 'sheet'
859
+ | 'header'
860
+ | 'footer'
861
+ | 'list';
862
+ /**
863
+ * The option parts and the selection parts — broadcasts resolved per option
864
+ * or per selected value; their base key also takes a per-item function.
865
+ */
866
+ export type BbSelectOptionPtPart =
867
+ | 'option'
868
+ | 'itemText'
869
+ | 'itemIcon'
870
+ | 'itemDescription'
871
+ | 'badge'
872
+ | 'comma';
873
+ /**
874
+ * Passthrough states of `BbSelect`, true while the matching `--` modifier is on.
875
+ *
876
+ * @state selected - Per node, on `option` and its `item-*` parts: a chosen
877
+ * option.
878
+ * @state disabled - Component-wide while the select is `disabled`; also per
879
+ * node, on `option` and its `item-*` parts: an option that is disabled.
880
+ * @state open - Component-wide: the options surface is showing.
881
+ */
882
+ export type BbSelectPtState = FormControlPtState | 'open' | 'selected';
883
+ /** The runtime lists the resolver is wired with — kept next to the types so the two cannot drift. */
884
+ export const BB_SELECT_PT = {
885
+ parts: [
886
+ // The family's words with `activator` where the text controls say
887
+ // `input` — BbSelect's control is a button that opens the options;
888
+ // its `input` is the popover's search field.
889
+ 'root',
890
+ 'label',
891
+ 'description',
892
+ 'message',
893
+ 'hint',
894
+ 'box',
895
+ 'activator',
896
+ 'input',
897
+ 'icon',
898
+ 'spinner',
899
+ 'prefix',
900
+ 'suffix',
901
+ 'clear',
902
+ 'panel',
903
+ 'sheet',
904
+ 'header',
905
+ 'footer',
906
+ 'list',
907
+ 'option',
908
+ 'itemText',
909
+ 'itemIcon',
910
+ 'itemDescription',
911
+ 'badge',
912
+ 'comma',
913
+ ],
914
+ states: [
915
+ 'hasValue',
916
+ 'selected',
917
+ 'readonly',
918
+ 'disabled',
919
+ 'warnings',
920
+ 'errors',
921
+ 'open',
922
+ 'loading',
923
+ ],
924
+ } as const satisfies {
925
+ parts: readonly BbSelectPtPart[];
926
+ states: readonly BbSelectPtState[];
927
+ };
213
928
 
929
+ // Spelled INLINE with this component's own unions (Vue's SFC type resolver
930
+ // does not substitute a generic alias's type parameters — PASSTHROUGH.md T20).
931
+ // Two mapped types, never `Partial<Record<…>>`: the lint autofix rewrites one
932
+ // into the other and the SFC resolver reads only the mapped spelling (T23).
933
+ /* eslint-disable @typescript-eslint/consistent-indexed-object-style */
214
934
  export type BbSelectProps<T> = {
935
+ [K in
936
+ | `pt:${BbSelectFieldPtPart}`
937
+ | `pt:${BbSelectPtPart}:${BbSelectPtState}`]?: PtValue;
938
+ } & {
939
+ // The option parts also take a per-item function, typed on this select's
940
+ // item — a literal function type, not `PtItemFn` (T23).
941
+ [K in `pt:${BbSelectOptionPtPart}`]?:
942
+ | PtValue
943
+ | ((ctx: PtItemCtx<PtNoInfer<T>, BbSelectPtState>) => PtItemResult);
944
+ } & {
945
+ /* eslint-enable @typescript-eslint/consistent-indexed-object-style */
946
+ /**
947
+ * Passthrough, object form: the same keys as the `pt:*` attributes
948
+ * without the prefix. See the `pt:<part>` row.
949
+ */
950
+ pt?: PtItemMap<
951
+ BbSelectPtPart,
952
+ BbSelectOptionPtPart,
953
+ BbSelectPtState,
954
+ PtNoInfer<T>
955
+ >;
215
956
  /**
216
957
  * When `true`, the options panel opens as a bottom off-canvas sheet on mobile
217
958
  * viewports instead of a floating popover; on desktop it stays a popover.
@@ -229,21 +970,27 @@ export type BbSelectProps<T> = {
229
970
  description?: string;
230
971
 
231
972
  /**
232
- * Extra props forwarded to the `BbOffCanvas` sheet when `adaptive` is active on mobile.
973
+ * Props for the phone sheet (the `BbOffCanvas` that `adaptive` renders on
974
+ * mobile), spread over its defaults. A `pt` inside it styles only the sheet
975
+ * (passthrough guide § Inside the sheet).
233
976
  */
234
977
  offCanvasProps?: Partial<BbOffCanvasProps>;
235
978
 
236
979
  /**
237
- * Controls whether the search input is shown inside the dropdown panel.
238
- * Use `'mobile'` / `'desktop'` to hide it on that platform only.
239
- * @defaultValue `false`
980
+ * Hides the panel's search field: `true` everywhere, `'mobile'` /
981
+ * `'desktop'` on that platform only. `'auto'` hides it for an array `items`
982
+ * shorter than the plugin's `autoDisableWritingThreshold` (6), decided per
983
+ * open; never for a provider, nor with an `option:add` listener.
984
+ *
985
+ * @defaultValue `'auto'`
240
986
  */
241
- disableWriting?: boolean | 'mobile' | 'desktop';
987
+ disableWriting?: boolean | 'mobile' | 'desktop' | 'auto';
242
988
 
243
989
  /**
244
990
  * Name of the icon to be added at the end of the input.
991
+ *
992
+ * @defaultValue the chevron-down glyph
245
993
  */
246
-
247
994
  'append:icon'?: IconType;
248
995
 
249
996
  /**
@@ -268,10 +1015,24 @@ export type BbSelectProps<T> = {
268
1015
  comma?: boolean;
269
1016
 
270
1017
  /**
271
- * Sets the component in a compact mode.
1018
+ * Compact density. Swaps `--bb-input-h`, `--bb-input-py` and
1019
+ * `--bb-label-spacing-y` for their `-compact` twins on the field, so a
1020
+ * `--bb-input-h` you set on the component is ignored while `compact` is on:
1021
+ * size a compact field with `--bb-input-h-compact` (and
1022
+ * `--bb-input-py-compact`) instead.
272
1023
  */
273
1024
  compact?: boolean;
274
1025
 
1026
+ /**
1027
+ * Visual variant of the field box, with the `BbButton` names and tokens.
1028
+ * Colours only, so a form never reflows; `'ghost'` has no border in any
1029
+ * state, and `'none'` takes no look at all (you own hover, focus and the
1030
+ * states). Register more with the plugin's `inputVariants`.
1031
+ *
1032
+ * @defaultValue `'outline'`
1033
+ */
1034
+ variant?: InputVariantType;
1035
+
275
1036
  /**
276
1037
  * Defines an array of dependencies that will trigger actions in the component upon change.
277
1038
  */
@@ -279,14 +1040,32 @@ export type BbSelectProps<T> = {
279
1040
 
280
1041
  /**
281
1042
  * Timeout used to debounce response to changes to dependencies.
1043
+ *
1044
+ * @defaultValue `0`
282
1045
  */
283
1046
  depsDebounceTime?: number;
284
1047
 
285
1048
  /**
286
- * Direction of the layout of the component. Can either be a predefined value or a
287
- * pattern separated by a space like `xx xxxxx`.
1049
+ * How the label and the input sit together: `'vertical'`, `'horizontal'` (50/50),
1050
+ * `'auto'`, `'label-fill'` (the label takes the free space, the input keeps
1051
+ * its size), `'input-fill'` (the other way round), or a two-word ratio
1052
+ * pattern like `'xx xxxxx'`.
1053
+ */
1054
+ layout?: FieldLayout;
1055
+
1056
+ /**
1057
+ * Vertical position of the label block in a side-by-side row; not
1058
+ * `labelPosition`, the horizontal one. Omitted, the label's first line
1059
+ * meets the control's.
1060
+ */
1061
+ labelAlign?: FieldCrossAlign;
1062
+
1063
+ /**
1064
+ * Vertical position of the control in a side-by-side row; not
1065
+ * `inputPosition`, the horizontal one. Omitted, the control's first line
1066
+ * meets the label's.
288
1067
  */
289
- direction?: InputDirection;
1068
+ inputAlign?: FieldCrossAlign;
290
1069
 
291
1070
  /**
292
1071
  * Disables the component.
@@ -294,25 +1073,23 @@ export type BbSelectProps<T> = {
294
1073
  disabled?: boolean;
295
1074
 
296
1075
  /**
297
- * If coherence is enforced the input cannot have a modelValue that is incoherent
298
- * with its current items. modelValue will be reset upon incoherence.
1076
+ * After every successful load that is not a search, removes the picks the
1077
+ * fetched rows do not contain (a single model resets to `null`). A `stash`
1078
+ * does not count; a search or a failed load never prunes.
299
1079
  */
300
1080
  enforceCoherence?: boolean;
301
1081
 
302
1082
  /**
303
- * Can be a string or an array of string containing the messages to display.
304
- * They render in an `aria-live="polite"` region (announced when they appear)
305
- * and, while the list is non-empty, are referenced FIRST from the control's
306
- * `aria-describedby`, so the reason the field is invalid is re-read whenever
307
- * the control regains focus.
1083
+ * Error messages under the field, a string or string array. They render in
1084
+ * an `aria-live="polite"` region and are referenced first from the
1085
+ * control's `aria-describedby`, so they are re-read when it regains focus.
308
1086
  */
309
1087
  errors?: string | string[];
310
1088
 
311
1089
  /**
312
- * Property paths used to filter options when the user types in the search input.
313
- * When empty (default) options are matched against their display text.
314
- * When non-empty the provided paths are searched instead of the display text.
315
- * To disable filtering entirely set `disableWriting` so the user cannot type a query.
1090
+ * Item paths searched instead of the display text when the user types
1091
+ * (empty: the display text). To turn filtering off, hide the field with
1092
+ * `disableWriting`.
316
1093
  *
317
1094
  * @defaultValue `[]`
318
1095
  */
@@ -330,11 +1107,10 @@ export type BbSelectProps<T> = {
330
1107
  hasErrors?: boolean;
331
1108
 
332
1109
  /**
333
- * Warning messages to display beneath the field, in their own `aria-live`
334
- * region and amber (`--bb-text-warn`). A string or array; a non-empty list
335
- * implies the warning state. Errors suppress warnings when both are set.
336
- * While displayed they are also referenced from the control's
337
- * `aria-describedby`, after any errors and before the description/hint.
1110
+ * Warning messages under the field, a string or string array: amber, in
1111
+ * their own `aria-live` region, and in the control's `aria-describedby`
1112
+ * after the errors. A non-empty list implies the warning state; errors win
1113
+ * when both are set.
338
1114
  */
339
1115
  warnings?: string | string[];
340
1116
 
@@ -342,7 +1118,7 @@ export type BbSelectProps<T> = {
342
1118
  * Define if the component should be in a warning state.
343
1119
  * Same chrome as errors with `--bb-warn`; errors take priority.
344
1120
  */
345
- hasWarning?: boolean;
1121
+ hasWarnings?: boolean;
346
1122
 
347
1123
  /**
348
1124
  * Visually hides the label of the input while maintaining accessibility.
@@ -355,17 +1131,18 @@ export type BbSelectProps<T> = {
355
1131
  hint?: string;
356
1132
 
357
1133
  /**
358
- * The identifier of the component.
1134
+ * The `id` of the native control; the label's `for` and the description
1135
+ * and message ids derive from it. Generated when omitted.
359
1136
  */
360
1137
  id?: HTMLAttributes['id'];
361
1138
 
362
1139
  /**
363
- * Used to retrieve items; can be an array or a function.
1140
+ * The options: an array, or a provider called with a
1141
+ * ``BbSelectItemsContext`` (`query`, `reason`, `modelValue`, `signal`),
1142
+ * sync or async. Branch on `reason !== 'search'` to resolve the selection
1143
+ * by id. A provider fails by THROWING, never by returning `[]`.
364
1144
  */
365
- items:
366
- | T[]
367
- | ((query: string, prefill: boolean, modelValue: any) => Promise<T[]>)
368
- | ((query: string, prefill: boolean, modelValue: any) => T[]);
1145
+ items: T[] | ((context: BbSelectItemsContext) => T[] | Promise<T[]>);
369
1146
 
370
1147
  /**
371
1148
  * Height of group headers in the listbox (px). Defaults to 32px (24px
@@ -386,12 +1163,28 @@ export type BbSelectProps<T> = {
386
1163
  /**
387
1164
  * Defines a path that returns a property of the object to use as text or a function
388
1165
  * that returns a string.
1166
+ *
1167
+ * Unset: own `label`, else `text` (`{ label, value }` needs no accessor).
1168
+ *
1169
+ * @defaultValue own `label`, else `text`, else `JSON.stringify(item)`
389
1170
  */
390
1171
  itemText?: ItemAccessor<T, string>;
391
1172
 
1173
+ /**
1174
+ * ADDITIONAL row fields, never the text or value: `description` (a muted
1175
+ * line under the label), `prepend:icon`, `append:icon`. An object of paths
1176
+ * or getters per field, or a function of the item. Nothing is read
1177
+ * implicitly, and none shows in the trigger or the chips.
1178
+ */
1179
+ itemProps?: BbSelectItemProps<T>;
1180
+
392
1181
  /**
393
1182
  * Defines a path that returns a property of the object to use as value or a function
394
1183
  * that returns any value.
1184
+ *
1185
+ * Unset: own `value`, even `null`.
1186
+ *
1187
+ * @defaultValue own `value`, else the whole item
395
1188
  */
396
1189
  itemValue?: ItemAccessor<T>;
397
1190
 
@@ -427,16 +1220,21 @@ export type BbSelectProps<T> = {
427
1220
 
428
1221
  /**
429
1222
  * Maximum number of labels shown before collapsing to a count summary.
1223
+ * Unset, the labels collapse only when they overflow the field.
1224
+ *
1225
+ * @defaultValue `Infinity`
430
1226
  */
431
1227
  maxSelectedLabels?: number;
432
1228
 
433
1229
  /**
434
1230
  * Used by v-model. Can be any serializable type.
435
1231
  */
436
- modelValue: any;
1232
+ modelValue?: any;
437
1233
 
438
1234
  /**
439
1235
  * Timeout used to debounce response to changes to modelValue.
1236
+ *
1237
+ * @defaultValue `0`
440
1238
  */
441
1239
  modelValueDebounceTime?: number;
442
1240
 
@@ -453,7 +1251,15 @@ export type BbSelectProps<T> = {
453
1251
  /**
454
1252
  * String displayed when there are no items to display.
455
1253
  */
456
- noDataText?: string;
1254
+ emptyText?: string;
1255
+
1256
+ /**
1257
+ * String displayed in the empty state while the latest load FAILED (the
1258
+ * provider threw): the twin of `emptyText` for that case.
1259
+ *
1260
+ * @defaultValue the localized `common.failedText` ("Couldn't load items")
1261
+ */
1262
+ failedText?: string;
457
1263
 
458
1264
  /**
459
1265
  * Keeps the hint displayed.
@@ -461,21 +1267,16 @@ export type BbSelectProps<T> = {
461
1267
  persistentHint?: boolean;
462
1268
 
463
1269
  /**
464
- * String displayed when there's no data.
1270
+ * Text shown in the field while nothing is picked (an empty list has
1271
+ * `emptyText`).
465
1272
  */
466
1273
  placeholder?: InputHTMLAttributes['placeholder'];
467
1274
 
468
1275
  /**
469
- * Controls when items are pre-loaded.
470
- * `'interaction'` loads on the first user interaction, `true` loads
471
- * immediately on mount, `false` is *search-first*: with a provider, nothing
472
- * is fetched until the user types — opening alone does not load, and the
473
- * panel shows a "search to begin" hint meanwhile.
474
- *
475
- * `false` falls back to loading on open when the user could not otherwise
476
- * reach the options: array `items` (resolved on mount regardless), or
477
- * `disable-writing` (no search field to type into). When the input has a
478
- * value, it always loads immediately so the selection's text can render.
1276
+ * When the options first load: `'interaction'` on first open, `true` on
1277
+ * mount, `false` only once the user types (on open with
1278
+ * `disable-writing`). An array `items` or a seeded model always loads at
1279
+ * once.
479
1280
  *
480
1281
  * @defaultValue `'interaction'`
481
1282
  */
@@ -494,6 +1295,8 @@ export type BbSelectProps<T> = {
494
1295
 
495
1296
  /**
496
1297
  * Time to wait when the user stops writing in the input before querying data.
1298
+ *
1299
+ * @defaultValue `500`
497
1300
  */
498
1301
  queryDebounceTime?: number;
499
1302
 
@@ -524,18 +1327,63 @@ export type BbSelectProps<T> = {
524
1327
  selectedLabelsFn?: (count: number) => string;
525
1328
 
526
1329
  /**
527
- * Adds a stash to accumulate selected values across searches.
1330
+ * Keeps picked options named across searches: a pick stays resolvable (its
1331
+ * chip keeps its text) when a later search or a failed load no longer
1332
+ * returns it. It follows the model, and does not keep a pick valid:
1333
+ * `enforce-coherence` still prunes it.
528
1334
  */
529
1335
  stash?: boolean;
530
1336
 
531
1337
  /**
532
1338
  * How long the transition has to last in milliseconds.
1339
+ *
1340
+ * @defaultValue `250`
533
1341
  */
534
1342
  transitionDuration?: number;
535
- };
1343
+ } & FormFieldProps<any>;
536
1344
 
537
1345
  /** Re-export for consumers importing events type from BbSelect. */
538
- export type BbSelectEvents = BaseSelectEvents;
1346
+ export type BbSelectEvents = {
1347
+ /** Emitted as soon as the options surface starts to open (the popover, or the sheet on a phone). */
1348
+ (e: 'show'): void;
1349
+ /** Emitted once the options surface is open and its open transition has finished. */
1350
+ (e: 'shown'): void;
1351
+ /** Emitted as soon as the options surface starts to close. */
1352
+ (e: 'hide'): void;
1353
+ /** Emitted once the options surface has finished closing. */
1354
+ (e: 'hidden'): void;
1355
+ /** Emitted when the activator loses focus. Forwards the original DOM `FocusEvent`. */
1356
+ (e: 'blur', event: FocusEvent): void;
1357
+ /** Emitted on the native `change` event. Forwards the original DOM `Event`. */
1358
+ (e: 'change', event: Event): void;
1359
+ /** Emitted when the select becomes active (focus enters it). */
1360
+ (e: 'active'): void;
1361
+ /** Emitted when the activator is clicked. Forwards the original DOM `MouseEvent`. */
1362
+ (e: 'click', event: MouseEvent): void;
1363
+ /** Emitted when the activator receives focus. Forwards the original DOM `FocusEvent`. */
1364
+ (e: 'focus', event: FocusEvent): void;
1365
+ /** Emitted when focus moves outside the whole select after it was active. */
1366
+ (e: 'inactive'): void;
1367
+ /** Emitted on native `input` events from the search field. Forwards the DOM `Event`. */
1368
+ (e: 'input', event: Event): void;
1369
+ (e: 'update:modelValue', value: any): void;
1370
+ /**
1371
+ * Emitted with the typed text when the user confirms a value that is not in
1372
+ * the list (Enter in the search field). Binding it keeps the search field
1373
+ * writable, which makes the select creatable.
1374
+ */
1375
+ (e: 'option:add', text: string): void;
1376
+ };
1377
+
1378
+ /** Props exposed by the `description` slot. */
1379
+ export type BbSelectDescriptionSlotProps = {
1380
+ /** The `description` prop value (empty when only the slot is provided). */
1381
+ text: string;
1382
+ /** Whether the field is in an error state. */
1383
+ hasErrors: boolean;
1384
+ /** Whether the field is in a warning state (suppressed when errors win). */
1385
+ hasWarnings: boolean;
1386
+ };
539
1387
 
540
1388
  /** Props exposed by the `label` slot. */
541
1389
  export type BbSelectLabelSlotProps = {
@@ -544,7 +1392,7 @@ export type BbSelectLabelSlotProps = {
544
1392
  /** Whether the input is in an error state. */
545
1393
  hasErrors: boolean;
546
1394
  /** Whether the input is in a warning state (suppressed when errors win). */
547
- hasWarning: boolean;
1395
+ hasWarnings: boolean;
548
1396
  };
549
1397
 
550
1398
  /** Props exposed by the `option` slot. */
@@ -567,6 +1415,8 @@ export type BbSelectOptionSlotProps<T> = {
567
1415
  text: string;
568
1416
  /** The resolved value for this option. */
569
1417
  value: any;
1418
+ /** The resolved `itemProps.description` for this option, when it has one. */
1419
+ description: string | undefined;
570
1420
  };
571
1421
 
572
1422
  /** Props exposed by the `group` slot. */
@@ -583,6 +1433,26 @@ export type BbSelectGroupSlotProps<T> = {
583
1433
  disabled: boolean;
584
1434
  };
585
1435
 
1436
+ /**
1437
+ * Props exposed by the `chip` slot — called once per selected value in
1438
+ * `multiple` mode, in place of the default badge.
1439
+ */
1440
+ export type BbSelectChipSlotProps<T> = {
1441
+ /** The selected item, exactly as it was supplied in `items`. */
1442
+ item: T;
1443
+ /** The item's resolved display text (what the default badge prints). */
1444
+ text: string;
1445
+ /** The item's resolved value — what sits in the v-model. */
1446
+ value: any;
1447
+ /**
1448
+ * `true` while the select is disabled or readonly: the chip must not offer a
1449
+ * way to remove itself, and `deselect` is a no-op.
1450
+ */
1451
+ disabled: boolean;
1452
+ /** Drops this value from the selection. No-op while `disabled`. */
1453
+ deselect: () => void;
1454
+ };
1455
+
586
1456
  /**
587
1457
  * Props exposed by the `header` / `footer` panel slots — identical whether the
588
1458
  * select renders as a desktop popover or an adaptive bottom sheet.
@@ -622,7 +1492,7 @@ export type BbSelectSlots<T> = {
622
1492
  /**
623
1493
  * Content appended outside the input field wrapper.
624
1494
  */
625
- 'append-outer'?: (props: {
1495
+ 'append:outer'?: (props: {
626
1496
  query: string;
627
1497
  close: () => Promise<void>;
628
1498
  }) => any;
@@ -630,14 +1500,21 @@ export type BbSelectSlots<T> = {
630
1500
  * Replaces the default label text rendered above the input.
631
1501
  */
632
1502
  label?: (props: BbSelectLabelSlotProps) => any;
1503
+ /**
1504
+ * Replaces the description text. Provided alone (no `description` prop) it still
1505
+ * renders the description region and wires it into `aria-describedby`.
1506
+ */
1507
+ description?: (props: BbSelectDescriptionSlotProps) => any;
633
1508
  /**
634
1509
  * Content shown inside the options dropdown while items are loading.
635
1510
  */
636
1511
  loading?: (props: { query: string }) => any;
637
1512
  /**
638
1513
  * Content shown when no options match the query or the list is empty.
1514
+ * `error` is what the latest failed load threw, untouched (`null` when
1515
+ * none).
639
1516
  */
640
- 'no-data'?: (props: { query: string; focus: () => void }) => any;
1517
+ empty?: (props: { query: string; focus: () => void; error: unknown }) => any;
641
1518
  /**
642
1519
  * Replaces the default rendering of each option row in the dropdown.
643
1520
  */
@@ -646,6 +1523,11 @@ export type BbSelectSlots<T> = {
646
1523
  * Replaces the default group header rendered above grouped options.
647
1524
  */
648
1525
  group?: (props: BbSelectGroupSlotProps<T>) => any;
1526
+ /**
1527
+ * Replaces the default badge rendered for each selection in `multiple` mode.
1528
+ * Not called in `comma` mode, nor for the collapsed "+N" summary.
1529
+ */
1530
+ chip?: (props: BbSelectChipSlotProps<T>) => any;
649
1531
  /**
650
1532
  * Content rendered as an inline prefix inside the input field.
651
1533
  */
@@ -661,7 +1543,7 @@ export type BbSelectSlots<T> = {
661
1543
  /**
662
1544
  * Content prepended outside the input field wrapper.
663
1545
  */
664
- 'prepend-outer'?: (props: {
1546
+ 'prepend:outer'?: (props: {
665
1547
  query: string;
666
1548
  close: () => Promise<void>;
667
1549
  }) => any;
@@ -676,13 +1558,147 @@ export type BbSelectSlots<T> = {
676
1558
 
677
1559
  ```css
678
1560
  .bb-select {
679
- /* Fill the grid control column (which sizes children to content). */
680
- .bb-base-select {
681
- width: 100%;
1561
+ /* The box row of the select: the activator overlay, the value face and the
1562
+ chips row live inside it. */
1563
+ &__field {
1564
+ color: var(--bb-text);
1565
+ font-size: var(--bb-input-fs);
1566
+ user-select: none;
1567
+ /* Fraction of the shell's inner padding the chips row is pulled back by
1568
+ when no prepend icon precedes it (see the negative margin below). */
1569
+ --compensation-multiplier: 0.3;
1570
+
1571
+ &.bb-field-input--compact {
1572
+ --compensation-multiplier: 0.5;
1573
+ }
1574
+
1575
+ &--disabled {
1576
+ color: var(--bb-text-muted);
1577
+
1578
+ .bb-select__activator {
1579
+ cursor: not-allowed;
1580
+ }
1581
+ }
1582
+
1583
+ &--readonly {
1584
+ .bb-select__activator {
1585
+ cursor: default;
1586
+ }
1587
+ }
1588
+
1589
+ /* If there is no prepend icon, add a negative margin to the chips row so
1590
+ it smoothly couples with the border */
1591
+ &:not(:has(.bb-field-input__prepend-icon)) {
1592
+ .bb-select__chips-row--chips {
1593
+ margin-inline-start: calc(
1594
+ var(--bb-input-px) * var(--compensation-multiplier) * -1
1595
+ );
1596
+ }
1597
+ }
1598
+ }
1599
+
1600
+ &__activator {
1601
+ background: none;
1602
+ border: none;
1603
+ cursor: pointer;
1604
+ inset: 0;
1605
+ padding: 0;
1606
+ position: absolute;
1607
+
1608
+ &:focus-visible {
1609
+ outline: 2px solid transparent;
1610
+ }
1611
+ }
1612
+
1613
+ &__value {
1614
+ align-items: center;
1615
+ align-self: stretch;
1616
+ display: flex;
1617
+ flex: 1 1 auto;
1618
+ flex-wrap: nowrap;
1619
+ gap: 0.25rem;
1620
+ min-width: 0;
1621
+ pointer-events: none;
1622
+ position: relative;
1623
+ text-align: start;
1624
+
1625
+ & input[type='button'] {
1626
+ pointer-events: auto;
1627
+ }
1628
+ }
1629
+
1630
+ &__chips-row {
1631
+ align-items: center;
1632
+ bottom: 0;
1633
+ display: flex;
1634
+ flex: 1 1 auto;
1635
+ flex-wrap: nowrap;
1636
+ inset-inline-end: 0;
1637
+ inset-inline-start: 0;
1638
+ min-width: 0;
1639
+ overflow: hidden;
1640
+ /* Sits above the absolute activator overlay (later in DOM), so re-enable
1641
+ hit-testing: chip ✕ buttons become clickable, and clicks on the empty gaps
1642
+ bubble to CommonFieldInput's container:click to still toggle the popover.
1643
+ The activator stays behind purely as the keyboard/focus target. */
1644
+ pointer-events: auto;
1645
+ position: absolute;
1646
+ top: 0;
1647
+
1648
+ &--hidden {
1649
+ pointer-events: none;
1650
+ visibility: hidden;
1651
+ }
1652
+
1653
+ /* Chips mode with at least one selection — never comma mode, which
1654
+ separates with its own `,` and wants no gap. The `chip` slot lets a
1655
+ consumer render their own element in place of our badge, so the layout
1656
+ a chip needs (no shrinking, the gap between chips, and the negative
1657
+ inset coupling above) lives HERE, on the row, rather than on a
1658
+ `__chip` class custom content would have to know to apply. */
1659
+ &--chips {
1660
+ gap: 0.25rem;
1661
+
1662
+ > * {
1663
+ flex-shrink: 0;
1664
+ }
1665
+ }
1666
+ }
1667
+
1668
+ &__comma {
1669
+ flex-shrink: 0;
1670
+ overflow: hidden;
1671
+ text-overflow: ellipsis;
1672
+ white-space: nowrap;
1673
+
1674
+ &:not(:last-child)::after {
1675
+ content: ',\00a0';
1676
+ }
1677
+ }
1678
+
1679
+ &__display-value {
1680
+ flex: 1 1 auto;
1681
+ min-width: 0;
1682
+ overflow: hidden;
1683
+ text-overflow: ellipsis;
1684
+ white-space: nowrap;
1685
+ }
1686
+
1687
+ &__placeholder {
1688
+ color: var(--bb-text-muted);
1689
+ opacity: 1;
1690
+ transition: opacity var(--bb-transition-fast) var(--bb-ease);
1691
+ }
1692
+
1693
+ &__max-reached {
1694
+ flex: 1 1 auto;
1695
+ overflow: hidden;
1696
+ text-overflow: ellipsis;
1697
+ white-space: nowrap;
682
1698
  }
683
1699
 
684
- &.bb-base-input-container--floating-label:not(:focus-within) {
685
- .bb-base-select__placeholder {
1700
+ &.bb-field--floating-label:not(:focus-within) {
1701
+ .bb-select__placeholder {
686
1702
  opacity: 0;
687
1703
  }
688
1704
  }