bitboss-ui 3.0.0-beta.3 → 3.0.0-beta.30

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 (771) hide show
  1. package/README.md +190 -35
  2. package/bin/bitboss-ui-mcp.mjs +472 -16
  3. package/bin/bitboss-ui.mjs +300 -23
  4. package/dist/ai/BbAccordion.md +150 -32
  5. package/dist/ai/BbAlert.md +124 -21
  6. package/dist/ai/BbAsterisk.md +53 -1
  7. package/dist/ai/BbAvatar.md +179 -27
  8. package/dist/ai/BbBadge.md +221 -35
  9. package/dist/ai/BbBadgeButton.md +68 -16
  10. package/dist/ai/BbBaseButton.md +123 -46
  11. package/dist/ai/BbBaseCheckboxIcon.md +114 -26
  12. package/dist/ai/BbBaseRadioIcon.md +111 -26
  13. package/dist/ai/BbBaseSwitchIcon.md +119 -28
  14. package/dist/ai/BbBreadcrumbs.md +192 -43
  15. package/dist/ai/BbButton.md +323 -76
  16. package/dist/ai/BbCalendar.md +548 -0
  17. package/dist/ai/BbCheckbox.md +216 -56
  18. package/dist/ai/BbCheckboxGroup.md +267 -30
  19. package/dist/ai/BbCollapsible.md +154 -39
  20. package/dist/ai/BbColorInput.md +280 -44
  21. package/dist/ai/BbColorPalette.md +227 -45
  22. package/dist/ai/BbConfirm.md +201 -41
  23. package/dist/ai/BbDatePicker.md +214 -25
  24. package/dist/ai/BbDatePickerInput.md +289 -54
  25. package/dist/ai/BbDialog.md +464 -73
  26. package/dist/ai/BbDropdown.md +699 -54
  27. package/dist/ai/BbDropdownButton.md +172 -43
  28. package/dist/ai/BbDropdownGroup.md +9 -1
  29. package/dist/ai/BbDropzone.md +122 -16
  30. package/dist/ai/BbForm.md +49 -14
  31. package/dist/ai/BbIcon.md +92 -31
  32. package/dist/ai/BbIndicator.md +73 -10
  33. package/dist/ai/BbNumberInput.md +211 -45
  34. package/dist/ai/BbOffCanvas.md +357 -66
  35. package/dist/ai/BbPagination.md +165 -26
  36. package/dist/ai/BbPopover.md +201 -34
  37. package/dist/ai/BbProgress.md +96 -55
  38. package/dist/ai/BbPtScope.md +136 -0
  39. package/dist/ai/BbRadio.md +205 -26
  40. package/dist/ai/BbRadioGroup.md +346 -39
  41. package/dist/ai/BbRating.md +130 -25
  42. package/dist/ai/BbSelect.md +583 -77
  43. package/dist/ai/BbSelectPopover.md +359 -82
  44. package/dist/ai/BbSlider.md +226 -51
  45. package/dist/ai/BbSmoothHeight.md +136 -32
  46. package/dist/ai/BbSpinner.md +166 -74
  47. package/dist/ai/BbSwitch.md +219 -31
  48. package/dist/ai/BbSwitchGroup.md +267 -29
  49. package/dist/ai/BbTable.md +1310 -162
  50. package/dist/ai/BbTabs.md +568 -101
  51. package/dist/ai/BbTabsList.md +56 -2
  52. package/dist/ai/BbTabsPanes.md +33 -1
  53. package/dist/ai/BbTabsRoot.md +61 -10
  54. package/dist/ai/BbTag.md +220 -42
  55. package/dist/ai/BbTextInput.md +429 -55
  56. package/dist/ai/BbTextarea.md +263 -51
  57. package/dist/ai/BbTimePicker.md +125 -11
  58. package/dist/ai/BbTimePickerInput.md +236 -22
  59. package/dist/ai/BbToast.md +183 -38
  60. package/dist/ai/BbToastPortal.md +28 -1
  61. package/dist/ai/BbTooltip.md +170 -30
  62. package/dist/ai/BbTree.md +225 -73
  63. package/dist/ai/ChipsBox.md +41 -1
  64. package/dist/ai/ClearableButton.md +12 -0
  65. package/dist/ai/CommaBox.md +1 -0
  66. package/dist/ai/{BbBaseInputContainer.md → CommonField.md} +19 -17
  67. package/dist/ai/CommonFieldInput.md +90 -0
  68. package/dist/ai/CommonPopover.md +12 -7
  69. package/dist/ai/CommonTimeSelector.md +61 -0
  70. package/dist/ai/ErrorIcon.md +20 -0
  71. package/dist/ai/FlatListBox.md +33 -5
  72. package/dist/ai/GroupedListBox.md +33 -5
  73. package/dist/ai/ListBox.md +37 -4
  74. package/dist/ai/OptionsContainer.md +6 -5
  75. package/dist/ai/WarningIcon.md +20 -0
  76. package/dist/ai/changelog.json +1183 -44
  77. package/dist/ai/components.json +41195 -9996
  78. package/dist/ai/composables/useBbConfig.md +72 -11
  79. package/dist/ai/composables/useConfirm.md +10 -5
  80. package/dist/ai/composables/useToast.md +4 -2
  81. package/dist/ai/guides/agent-contract.md +95 -10
  82. package/dist/ai/guides/ai-router.md +54 -26
  83. package/dist/ai/guides/app-layout.md +3 -1
  84. package/dist/ai/guides/component-picker.md +24 -18
  85. package/dist/ai/guides/design-language.md +217 -61
  86. package/dist/ai/guides/design-tokens.md +448 -105
  87. package/dist/ai/guides/fetch-items-playbook.md +1 -1
  88. package/dist/ai/guides/icons-policy.md +50 -19
  89. package/dist/ai/guides/inline-edit-playbook.md +1 -1
  90. package/dist/ai/guides/installation-and-plugin-setup.md +618 -42
  91. package/dist/ai/guides/migration/components/bb-accordion.md +29 -0
  92. package/dist/ai/guides/migration/components/bb-alert.md +2 -2
  93. package/dist/ai/guides/migration/components/bb-avatar.md +13 -14
  94. package/dist/ai/guides/migration/components/bb-breadcrumbs.md +8 -7
  95. package/dist/ai/guides/migration/components/bb-button.md +80 -20
  96. package/dist/ai/guides/migration/components/bb-checkbox-group.md +61 -28
  97. package/dist/ai/guides/migration/components/bb-checkbox.md +45 -10
  98. package/dist/ai/guides/migration/components/bb-collapsible.md +5 -5
  99. package/dist/ai/guides/migration/components/bb-color-palette.md +9 -9
  100. package/dist/ai/guides/migration/components/bb-date-picker-input.md +39 -29
  101. package/dist/ai/guides/migration/components/bb-dialog.md +68 -35
  102. package/dist/ai/guides/migration/components/bb-dropdown.md +29 -8
  103. package/dist/ai/guides/migration/components/bb-offcanvas.md +29 -13
  104. package/dist/ai/guides/migration/components/bb-popover.md +12 -11
  105. package/dist/ai/guides/migration/components/bb-rating.md +52 -17
  106. package/dist/ai/guides/migration/components/bb-select-popover.md +8 -0
  107. package/dist/ai/guides/migration/components/bb-select.md +18 -2
  108. package/dist/ai/guides/migration/components/bb-table.md +560 -28
  109. package/dist/ai/guides/migration/components/bb-tabs.md +56 -14
  110. package/dist/ai/guides/migration/components/bb-text-input.md +12 -12
  111. package/dist/ai/guides/migration/components/bb-tooltip.md +18 -0
  112. package/dist/ai/guides/migration/v2-to-v3.md +526 -192
  113. package/dist/ai/guides/options-items-playbook.md +57 -1
  114. package/dist/ai/guides/passthrough.md +725 -0
  115. package/dist/ai/guides/ssr-prefill.md +120 -0
  116. package/dist/ai/guides/validated-forms.md +5 -0
  117. package/dist/ai/index.md +24 -36
  118. package/dist/ai/recipes/inertia/approvals-inbox.md +3 -4
  119. package/dist/ai/recipes/inertia/inline-edit-workspace.md +10 -11
  120. package/dist/ai/recipes/inertia/layout-scaffold.md +5 -1
  121. package/dist/ai/recipes/inertia/onboarding.md +2 -2
  122. package/dist/ai/recipes/inertia/ownership-atlas.md +66 -44
  123. package/dist/ai/recipes/inertia/record-form.md +5 -6
  124. package/dist/ai/recipes/inertia/records-workspace.md +133 -12
  125. package/dist/ai/recipes/inertia/upload-center.md +8 -9
  126. package/dist/ai/recipes/inertia/wizard-form.md +68 -5
  127. package/dist/ai/recipes/nuxt/approvals-inbox.md +3 -4
  128. package/dist/ai/recipes/nuxt/inline-edit-workspace.md +10 -11
  129. package/dist/ai/recipes/nuxt/layout-scaffold.md +5 -1
  130. package/dist/ai/recipes/nuxt/onboarding.md +2 -2
  131. package/dist/ai/recipes/nuxt/record-form.md +5 -6
  132. package/dist/ai/recipes/nuxt/records-workspace.md +135 -12
  133. package/dist/ai/recipes/nuxt/upload-center.md +8 -9
  134. package/dist/ai/recipes/nuxt/wizard-form.md +68 -5
  135. package/dist/ai/recipes/vue/approvals-inbox.md +3 -4
  136. package/dist/ai/recipes/vue/inline-edit-workspace.md +10 -11
  137. package/dist/ai/recipes/vue/layout-scaffold.md +5 -1
  138. package/dist/ai/recipes/vue/onboarding.md +2 -2
  139. package/dist/ai/recipes/vue/record-form.md +10 -10
  140. package/dist/ai/recipes/vue/records-workspace.md +129 -12
  141. package/dist/ai/recipes/vue/upload-center.md +8 -9
  142. package/dist/ai/recipes/vue/wizard-form.md +65 -5
  143. package/dist/ai/source/BbAccordion.md +83 -21
  144. package/dist/ai/source/BbAlert.md +188 -60
  145. package/dist/ai/source/BbAsterisk.md +54 -4
  146. package/dist/ai/source/BbAvatar.md +63 -16
  147. package/dist/ai/source/BbBadge.md +193 -59
  148. package/dist/ai/source/BbBadgeButton.md +108 -41
  149. package/dist/ai/source/BbBaseButton.md +103 -9
  150. package/dist/ai/source/BbBaseCheckboxIcon.md +151 -36
  151. package/dist/ai/source/BbBaseRadioIcon.md +121 -17
  152. package/dist/ai/source/BbBaseSwitchIcon.md +138 -28
  153. package/dist/ai/source/BbBreadcrumbs.md +241 -57
  154. package/dist/ai/source/BbButton.md +457 -165
  155. package/dist/ai/source/BbCalendar.md +1617 -0
  156. package/dist/ai/source/BbCheckbox.md +433 -59
  157. package/dist/ai/source/BbCheckboxGroup.md +722 -77
  158. package/dist/ai/source/BbCollapsible.md +90 -8
  159. package/dist/ai/source/BbColorInput.md +505 -58
  160. package/dist/ai/source/BbColorPalette.md +1160 -51
  161. package/dist/ai/source/BbConfirm.md +134 -4
  162. package/dist/ai/source/BbConfirmPortal.md +83 -0
  163. package/dist/ai/source/BbDatePicker.md +447 -367
  164. package/dist/ai/source/BbDatePickerInput.md +1970 -106
  165. package/dist/ai/source/BbDialog.md +435 -45
  166. package/dist/ai/source/BbDropdown.md +693 -130
  167. package/dist/ai/source/BbDropdownButton.md +279 -68
  168. package/dist/ai/source/BbDropdownGroup.md +535 -64
  169. package/dist/ai/source/BbDropzone.md +93 -14
  170. package/dist/ai/source/BbForm.md +93 -5
  171. package/dist/ai/source/BbIcon.md +114 -48
  172. package/dist/ai/source/BbIndicator.md +85 -42
  173. package/dist/ai/source/BbNumberInput.md +574 -73
  174. package/dist/ai/source/BbOffCanvas.md +789 -249
  175. package/dist/ai/source/BbPagination.md +124 -19
  176. package/dist/ai/source/BbPopover.md +226 -77
  177. package/dist/ai/source/BbProgress.md +53 -5
  178. package/dist/ai/source/BbPtScope.md +54 -0
  179. package/dist/ai/source/BbRadio.md +369 -52
  180. package/dist/ai/source/BbRadioGroup.md +707 -91
  181. package/dist/ai/source/BbRating.md +645 -73
  182. package/dist/ai/source/BbSelect.md +939 -76
  183. package/dist/ai/source/BbSelectPopover.md +611 -66
  184. package/dist/ai/source/BbSlider.md +1205 -81
  185. package/dist/ai/source/BbSmoothHeight.md +48 -2
  186. package/dist/ai/source/BbSpinner.md +62 -6
  187. package/dist/ai/source/BbSwitch.md +277 -55
  188. package/dist/ai/source/BbSwitchGroup.md +568 -77
  189. package/dist/ai/source/BbTable.md +5729 -1779
  190. package/dist/ai/source/BbTabs.md +176 -87
  191. package/dist/ai/source/BbTabsList.md +207 -88
  192. package/dist/ai/source/BbTabsPanes.md +179 -83
  193. package/dist/ai/source/BbTabsRoot.md +171 -82
  194. package/dist/ai/source/BbTag.md +670 -76
  195. package/dist/ai/source/BbTextInput.md +439 -59
  196. package/dist/ai/source/BbTextarea.md +483 -54
  197. package/dist/ai/source/BbTimePicker.md +302 -56
  198. package/dist/ai/source/BbTimePickerInput.md +1143 -91
  199. package/dist/ai/source/BbToast.md +121 -36
  200. package/dist/ai/source/BbToastPortal.md +77 -27
  201. package/dist/ai/source/BbTooltip.md +147 -22
  202. package/dist/ai/source/BbTree.md +55 -3
  203. package/dist/ai/source/ChipsBox.md +12 -2
  204. package/dist/ai/source/CommaBox.md +10 -2
  205. package/dist/ai/source/{BbBaseInputContainer.md → CommonField.md} +318 -210
  206. package/dist/ai/source/CommonFieldInput.md +799 -0
  207. package/dist/ai/source/CommonPopover.md +107 -22
  208. package/dist/ai/source/CommonTimeSelector.md +642 -0
  209. package/dist/ai/source/ErrorIcon.md +2 -2
  210. package/dist/ai/source/FlatListBox.md +172 -11
  211. package/dist/ai/source/GroupedListBox.md +198 -11
  212. package/dist/ai/source/GuidesComponent.md +14 -7
  213. package/dist/ai/source/ListBox.md +29 -2
  214. package/dist/ai/source/OptionsContainer.md +197 -26
  215. package/dist/ai/source/WarningIcon.md +2 -2
  216. package/dist/components/BbAccordion/BbAccordion.vue_vue_type_script_setup_true_lang.js +49 -32
  217. package/dist/components/BbAccordion/types.d.ts +32 -1
  218. package/dist/components/BbAccordion/types.js +11 -0
  219. package/dist/components/BbAlert/BbAlert.vue_vue_type_script_setup_true_lang.js +45 -29
  220. package/dist/components/BbAlert/types.d.ts +35 -1
  221. package/dist/components/BbAlert/types.js +13 -0
  222. package/dist/components/BbAsterisk/BbAsterisk.vue.d.ts +3 -1
  223. package/dist/components/BbAsterisk/BbAsterisk.vue_vue_type_script_setup_true_lang.js +23 -8
  224. package/dist/components/BbAsterisk/types.d.ts +18 -0
  225. package/dist/components/BbAsterisk/types.js +7 -0
  226. package/dist/components/BbAvatar/BbAvatar.vue.d.ts +1 -1
  227. package/dist/components/BbAvatar/BbAvatar.vue_vue_type_script_setup_true_lang.js +57 -44
  228. package/dist/components/BbAvatar/types.d.ts +23 -0
  229. package/dist/components/BbAvatar/types.js +7 -0
  230. package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +22 -16
  231. package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +95 -52
  232. package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +3 -0
  233. package/dist/components/BbBadge/badgeButtonContext.d.ts +25 -8
  234. package/dist/components/BbBadge/types.d.ts +44 -3
  235. package/dist/components/BbBadge/types.js +13 -0
  236. package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +110 -97
  237. package/dist/components/BbBaseButton/RouterComponent.vue_vue_type_script_setup_true_lang.js +11 -11
  238. package/dist/components/BbBaseButton/types.d.ts +28 -0
  239. package/dist/components/BbBaseButton/types.js +9 -2
  240. package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue_vue_type_script_setup_true_lang.js +50 -18
  241. package/dist/components/BbBaseCheckboxIcon/types.d.ts +31 -2
  242. package/dist/components/BbBaseCheckboxIcon/types.js +8 -0
  243. package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue_vue_type_script_setup_true_lang.js +45 -15
  244. package/dist/components/BbBaseRadioIcon/types.d.ts +31 -2
  245. package/dist/components/BbBaseRadioIcon/types.js +8 -0
  246. package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue_vue_type_script_setup_true_lang.js +48 -16
  247. package/dist/components/BbBaseSwitchIcon/types.d.ts +31 -2
  248. package/dist/components/BbBaseSwitchIcon/types.js +8 -0
  249. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +151 -110
  250. package/dist/components/BbBreadcrumbs/types.d.ts +35 -0
  251. package/dist/components/BbBreadcrumbs/types.js +12 -0
  252. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +104 -77
  253. package/dist/components/BbButton/types.d.ts +49 -2
  254. package/dist/components/BbButton/types.js +12 -0
  255. package/dist/components/BbCalendar/BbCalendar.vue.d.ts +34 -0
  256. package/dist/components/BbCalendar/BbCalendar.vue.js +6 -0
  257. package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +576 -0
  258. package/dist/components/BbCalendar/CalendarMonthPanel.vue.js +5 -0
  259. package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +124 -0
  260. package/dist/components/BbCalendar/CalendarYearPanel.vue.js +5 -0
  261. package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +126 -0
  262. package/dist/components/BbCalendar/calendarHost.d.ts +29 -0
  263. package/dist/components/BbCalendar/calendarHost.js +10 -0
  264. package/dist/components/BbCalendar/types.d.ts +211 -0
  265. package/dist/components/BbCalendar/types.js +28 -0
  266. package/dist/components/{BbBaseDatePicker/useDatePickerContext.d.ts → BbCalendar/useCalendarContext.d.ts} +10 -7
  267. package/dist/components/BbCalendar/useCalendarContext.js +11 -0
  268. package/dist/components/BbCalendar/useCalendarGrid.d.ts +208 -0
  269. package/dist/components/BbCalendar/useCalendarGrid.js +269 -0
  270. package/dist/components/BbCalendar/useDayGrid.d.ts +79 -0
  271. package/dist/components/BbCalendar/useDayGrid.js +203 -0
  272. package/dist/components/BbCheckbox/BbCheckbox.vue.d.ts +1 -1
  273. package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +194 -67
  274. package/dist/components/BbCheckbox/types.d.ts +164 -9
  275. package/dist/components/BbCheckbox/types.js +8 -0
  276. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue.d.ts +3 -3
  277. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +310 -80
  278. package/dist/components/BbCheckboxGroup/types.d.ts +152 -8
  279. package/dist/components/BbCheckboxGroup/types.js +10 -0
  280. package/dist/components/BbCollapsible/BbCollapsible.vue.d.ts +2 -1
  281. package/dist/components/BbCollapsible/BbCollapsible.vue_vue_type_script_setup_true_lang.js +41 -19
  282. package/dist/components/BbCollapsible/types.d.ts +44 -1
  283. package/dist/components/BbCollapsible/types.js +7 -0
  284. package/dist/components/BbColorInput/BbColorInput.vue.d.ts +11 -1
  285. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +306 -81
  286. package/dist/components/BbColorInput/types.d.ts +204 -6
  287. package/dist/components/BbColorInput/types.js +24 -0
  288. package/dist/components/BbColorPalette/BbColorPalette.vue.d.ts +10 -2
  289. package/dist/components/BbColorPalette/BbColorPalette.vue_vue_type_script_setup_true_lang.js +508 -104
  290. package/dist/components/BbColorPalette/types.d.ts +69 -3
  291. package/dist/components/BbColorPalette/types.js +12 -0
  292. package/dist/components/BbConfirm/BbConfirm.vue.d.ts +2 -1
  293. package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +116 -76
  294. package/dist/components/BbConfirm/types.d.ts +49 -0
  295. package/dist/components/BbConfirm/types.js +17 -0
  296. package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +16 -10
  297. package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +291 -218
  298. package/dist/components/BbDatePicker/types.d.ts +95 -15
  299. package/dist/components/BbDatePicker/types.js +32 -0
  300. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +14 -2
  301. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +1148 -82
  302. package/dist/components/BbDatePickerInput/types.d.ts +198 -11
  303. package/dist/components/BbDatePickerInput/types.js +38 -0
  304. package/dist/components/BbDialog/BbDialog.vue.d.ts +4 -4
  305. package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +218 -136
  306. package/dist/components/BbDialog/types.d.ts +86 -2
  307. package/dist/components/BbDialog/types.js +16 -0
  308. package/dist/components/BbDialog/useDialogStack.d.ts +12 -0
  309. package/dist/components/BbDialog/useDialogStack.js +9 -2
  310. package/dist/components/BbDropdown/AdaptiveDropdown.vue.d.ts +2 -0
  311. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +103 -96
  312. package/dist/components/BbDropdown/BbDropdown.vue.d.ts +10 -2
  313. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +346 -281
  314. package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +285 -257
  315. package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +100 -89
  316. package/dist/components/BbDropdown/normalizeGroups.js +34 -31
  317. package/dist/components/BbDropdown/types.d.ts +161 -8
  318. package/dist/components/BbDropdown/types.js +20 -2
  319. package/dist/components/BbDropdown/useDropdownContext.d.ts +7 -1
  320. package/dist/components/BbDropdown/useDropdownGroupRegistry.d.ts +1 -0
  321. package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +13 -3
  322. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +122 -35
  323. package/dist/components/BbDropdownButton/types.d.ts +94 -1
  324. package/dist/components/BbDropdownButton/types.js +30 -0
  325. package/dist/components/BbDropzone/BbDropzone.vue_vue_type_script_setup_true_lang.js +169 -138
  326. package/dist/components/BbDropzone/types.d.ts +32 -1
  327. package/dist/components/BbDropzone/types.js +16 -0
  328. package/dist/components/BbIcon/BbIcon.vue_vue_type_script_setup_true_lang.js +58 -48
  329. package/dist/components/BbIcon/iconCache.d.ts +63 -0
  330. package/dist/components/BbIcon/iconCache.js +35 -0
  331. package/dist/components/BbIcon/types.d.ts +22 -2
  332. package/dist/components/BbIcon/types.js +7 -0
  333. package/dist/components/BbIndicator/BbIndicator.vue_vue_type_script_setup_true_lang.js +33 -20
  334. package/dist/components/BbIndicator/types.d.ts +24 -0
  335. package/dist/components/BbIndicator/types.js +7 -0
  336. package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +6 -1
  337. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +272 -80
  338. package/dist/components/BbNumberInput/types.d.ts +178 -11
  339. package/dist/components/BbNumberInput/types.js +8 -0
  340. package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +4 -4
  341. package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +294 -207
  342. package/dist/components/BbOffCanvas/types.d.ts +73 -5
  343. package/dist/components/BbOffCanvas/types.js +15 -0
  344. package/dist/components/BbPagination/BbPagination.vue.d.ts +1 -1
  345. package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +119 -96
  346. package/dist/components/BbPagination/types.d.ts +32 -0
  347. package/dist/components/BbPagination/types.js +11 -0
  348. package/dist/components/BbPopover/BbPopover.vue.d.ts +5 -5
  349. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +184 -154
  350. package/dist/components/BbPopover/types.d.ts +48 -2
  351. package/dist/components/BbPopover/types.js +14 -0
  352. package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +27 -15
  353. package/dist/components/BbProgress/types.d.ts +21 -0
  354. package/dist/components/BbProgress/types.js +7 -0
  355. package/dist/components/BbPtScope/BbPtScope.vue.d.ts +12 -0
  356. package/dist/components/BbPtScope/BbPtScope.vue.js +5 -0
  357. package/dist/components/BbPtScope/BbPtScope.vue_vue_type_script_setup_true_lang.js +13 -0
  358. package/dist/components/BbPtScope/types.d.ts +15 -0
  359. package/dist/components/BbRadio/BbRadio.vue.d.ts +1 -1
  360. package/dist/components/BbRadio/BbRadio.vue_vue_type_script_setup_true_lang.js +166 -56
  361. package/dist/components/BbRadio/types.d.ts +137 -9
  362. package/dist/components/BbRadio/types.js +8 -0
  363. package/dist/components/BbRadioGroup/BbRadioGroup.vue.d.ts +2 -2
  364. package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +292 -82
  365. package/dist/components/BbRadioGroup/types.d.ts +155 -10
  366. package/dist/components/BbRadioGroup/types.js +10 -0
  367. package/dist/components/BbRating/BbRating.vue.d.ts +4 -2
  368. package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +245 -73
  369. package/dist/components/BbRating/types.d.ts +152 -6
  370. package/dist/components/BbRating/types.js +21 -0
  371. package/dist/components/BbSelect/BbSelect.vue.d.ts +3 -3
  372. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +474 -75
  373. package/dist/components/BbSelect/types.d.ts +174 -8
  374. package/dist/components/BbSelect/types.js +26 -0
  375. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +460 -349
  376. package/dist/components/BbSelectPopover/types.d.ts +114 -4
  377. package/dist/components/BbSelectPopover/types.js +24 -0
  378. package/dist/components/BbSlider/BbSlider.vue.d.ts +10 -4
  379. package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +396 -92
  380. package/dist/components/BbSlider/types.d.ts +175 -6
  381. package/dist/components/BbSlider/types.js +21 -0
  382. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.d.ts +1 -1
  383. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue_vue_type_script_setup_true_lang.js +60 -48
  384. package/dist/components/BbSmoothHeight/types.d.ts +19 -0
  385. package/dist/components/BbSmoothHeight/types.js +7 -0
  386. package/dist/components/BbSpinner/BbSpinner.vue_vue_type_script_setup_true_lang.js +27 -14
  387. package/dist/components/BbSpinner/types.d.ts +22 -1
  388. package/dist/components/BbSpinner/types.js +7 -0
  389. package/dist/components/BbSwitch/BbSwitch.vue.d.ts +1 -1
  390. package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +202 -75
  391. package/dist/components/BbSwitch/types.d.ts +25 -10
  392. package/dist/components/BbSwitch/types.js +5 -0
  393. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue.d.ts +2 -2
  394. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +310 -80
  395. package/dist/components/BbSwitchGroup/types.d.ts +29 -6
  396. package/dist/components/BbSwitchGroup/types.js +5 -0
  397. package/dist/components/BbTable/BbTable.vue.d.ts +10 -4
  398. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +1577 -654
  399. package/dist/components/BbTable/BbTableDataRow.d.ts +169 -0
  400. package/dist/components/BbTable/BbTableDataRow.js +133 -0
  401. package/dist/components/BbTable/BbTableExpandRow.d.ts +73 -0
  402. package/dist/components/BbTable/BbTableExpandRow.js +52 -0
  403. package/dist/components/BbTable/BbTableSelectToggle.d.ts +103 -0
  404. package/dist/components/BbTable/BbTableSelectToggle.js +114 -0
  405. package/dist/components/BbTable/types.d.ts +366 -111
  406. package/dist/components/BbTable/types.js +18 -0
  407. package/dist/components/BbTable/utils.d.ts +92 -4
  408. package/dist/components/BbTable/utils.js +71 -36
  409. package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +32 -20
  410. package/dist/components/BbTabs/BbTabsList.vue.d.ts +3 -10
  411. package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +39 -33
  412. package/dist/components/BbTabs/BbTabsPanes.vue_vue_type_script_setup_true_lang.js +14 -13
  413. package/dist/components/BbTabs/BbTabsRoot.vue_vue_type_script_setup_true_lang.js +12 -1
  414. package/dist/components/BbTabs/types.d.ts +72 -9
  415. package/dist/components/BbTabs/types.js +11 -0
  416. package/dist/components/BbTag/BbTag.vue.d.ts +7 -4
  417. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +350 -88
  418. package/dist/components/BbTag/types.d.ts +90 -5
  419. package/dist/components/BbTag/types.js +8 -0
  420. package/dist/components/BbTextInput/BbTextInput.vue.d.ts +4 -2
  421. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +245 -80
  422. package/dist/components/BbTextInput/types.d.ts +147 -6
  423. package/dist/components/BbTextInput/types.js +8 -0
  424. package/dist/components/BbTextarea/BbTextarea.vue.d.ts +1 -1
  425. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +273 -91
  426. package/dist/components/BbTextarea/types.d.ts +134 -6
  427. package/dist/components/BbTextarea/types.js +8 -0
  428. package/dist/components/BbTimePicker/BbTimePicker.vue.d.ts +10 -2
  429. package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +152 -103
  430. package/dist/components/BbTimePicker/types.d.ts +65 -3
  431. package/dist/components/BbTimePicker/types.js +12 -0
  432. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue.d.ts +12 -2
  433. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +705 -83
  434. package/dist/components/BbTimePickerInput/types.d.ts +128 -12
  435. package/dist/components/BbTimePickerInput/types.js +23 -0
  436. package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +51 -25
  437. package/dist/components/BbToast/BbToastMessage.vue.d.ts +3 -0
  438. package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +48 -47
  439. package/dist/components/BbToast/BbToastRegion.vue.d.ts +3 -0
  440. package/dist/components/BbToast/BbToastRegion.vue_vue_type_script_setup_true_lang.js +72 -64
  441. package/dist/components/BbToast/types.d.ts +28 -0
  442. package/dist/components/BbToast/types.js +13 -0
  443. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +100 -84
  444. package/dist/components/BbTooltip/types.d.ts +40 -2
  445. package/dist/components/BbTooltip/types.js +7 -0
  446. package/dist/components/BbTree/BbTree.vue.d.ts +11 -1
  447. package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +44 -28
  448. package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +13 -12
  449. package/dist/components/BbTree/context.d.ts +4 -1
  450. package/dist/components/BbTree/types.d.ts +30 -1
  451. package/dist/components/BbTree/types.js +7 -0
  452. package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +9 -7
  453. package/dist/components/ChipsBox/types.d.ts +6 -0
  454. package/dist/components/ClearableButton/ClearableButton.vue_vue_type_script_setup_true_lang.js +5 -5
  455. package/dist/components/CommaBox/CommaBox.vue_vue_type_script_setup_true_lang.js +11 -7
  456. package/dist/components/CommaBox/types.d.ts +6 -0
  457. package/dist/components/{BbBaseInputContainer/BbBaseInputContainer.vue.d.ts → CommonField/CommonField.vue.d.ts} +4 -4
  458. package/dist/components/{BbBaseRadio/BbBaseRadio.vue.js → CommonField/CommonField.vue.js} +2 -2
  459. package/dist/components/CommonField/CommonField.vue_vue_type_script_setup_true_lang.js +178 -0
  460. package/dist/components/CommonField/messageHeightMatrix.d.ts +2 -0
  461. package/dist/components/{BbBaseInputContainer → CommonField}/types.d.ts +33 -10
  462. package/dist/components/{CommonInputWrapper/CommonInputWrapper.vue.d.ts → CommonFieldInput/CommonFieldInput.vue.d.ts} +5 -4
  463. package/dist/components/{BbBaseRadioGroup/BbBaseRadioGroup.vue.js → CommonFieldInput/CommonFieldInput.vue.js} +2 -2
  464. package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +116 -0
  465. package/dist/components/CommonFieldInput/boxBorderMatrix.d.ts +10 -0
  466. package/dist/components/{CommonInputWrapper → CommonFieldInput}/types.d.ts +25 -6
  467. package/dist/components/CommonPopover/CommonPopover.vue.d.ts +11 -2
  468. package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +65 -53
  469. package/dist/components/CommonPopover/types.d.ts +27 -8
  470. package/dist/components/{BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.d.ts → CommonTimeSelector/CommonTimeSelector.vue.d.ts} +4 -1
  471. package/dist/components/{BbBaseColorPalette/BbBaseColorPalette.vue.js → CommonTimeSelector/CommonTimeSelector.vue.js} +2 -2
  472. package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +207 -0
  473. package/dist/components/CommonTimeSelector/types.d.ts +6 -0
  474. package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +163 -100
  475. package/dist/components/FlatListBox/types.d.ts +15 -0
  476. package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +190 -127
  477. package/dist/components/GroupedListBox/types.d.ts +15 -0
  478. package/dist/components/ListBox/ListBox.vue_vue_type_script_setup_true_lang.js +82 -66
  479. package/dist/components/ListBox/types.d.ts +15 -0
  480. package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +89 -35
  481. package/dist/components/OptionsContainer/types.d.ts +37 -5
  482. package/dist/composables/useBaseOptions.d.ts +12 -1
  483. package/dist/composables/useBaseOptions.js +63 -31
  484. package/dist/composables/useBbConfig.d.ts +27 -6
  485. package/dist/composables/useBbConfig.js +8 -2
  486. package/dist/composables/useBbDropdownContext.d.ts +5 -0
  487. package/dist/composables/useBbTabsContext.d.ts +16 -2
  488. package/dist/composables/useBbTabsContext.js +157 -145
  489. package/dist/composables/useConfig.d.ts +59 -0
  490. package/dist/composables/useConfig.js +11 -0
  491. package/dist/composables/useConfirm.d.ts +33 -2
  492. package/dist/composables/useConfirm.js +43 -40
  493. package/dist/composables/useItemsGetter.d.ts +11 -0
  494. package/dist/composables/useItemsGetter.js +44 -18
  495. package/dist/composables/useLocale.js +10 -7
  496. package/dist/composables/useMobile.js +5 -5
  497. package/dist/composables/usePassthrough.d.ts +206 -0
  498. package/dist/composables/usePassthrough.js +224 -0
  499. package/dist/composables/usePrefill.d.ts +22 -2
  500. package/dist/composables/usePrefill.js +35 -19
  501. package/dist/composables/useSafeAreaInternal.js +1 -1
  502. package/dist/composables/useSegmentedFields.d.ts +2 -2
  503. package/dist/composables/useSsrState.d.ts +20 -0
  504. package/dist/composables/useSsrState.js +13 -0
  505. package/dist/composables/useTableWidthContext.d.ts +24 -4
  506. package/dist/composables/useTableWidthContext.js +31 -28
  507. package/dist/composables/useToast.d.ts +18 -1
  508. package/dist/composables/useToast.js +22 -18
  509. package/dist/composables/useToggleInput.d.ts +44 -0
  510. package/dist/composables/useToggleInput.js +39 -0
  511. package/dist/composables/useViewportWidth.d.ts +20 -6
  512. package/dist/composables/useViewportWidth.js +8 -7
  513. package/dist/deprecation/ai-deprecations.json.d.ts +352 -11
  514. package/dist/deprecation/ai-deprecations.json.js +1 -1
  515. package/dist/directives/bbDropdown.d.ts +15 -4
  516. package/dist/directives/bbDropdown.js +31 -9
  517. package/dist/directives/createPopoverDirective.d.ts +62 -0
  518. package/dist/directives/createPopoverDirective.js +92 -37
  519. package/dist/i18n/locales/cs.json +6 -3
  520. package/dist/i18n/locales/da.json +6 -3
  521. package/dist/i18n/locales/de.json +6 -3
  522. package/dist/i18n/locales/el.json +6 -3
  523. package/dist/i18n/locales/en.json +6 -3
  524. package/dist/i18n/locales/es.json +6 -3
  525. package/dist/i18n/locales/fi.json +6 -3
  526. package/dist/i18n/locales/fr.json +6 -3
  527. package/dist/i18n/locales/hu.json +6 -3
  528. package/dist/i18n/locales/it.json +6 -3
  529. package/dist/i18n/locales/ja.json +6 -3
  530. package/dist/i18n/locales/ko.json +6 -3
  531. package/dist/i18n/locales/nb.json +6 -3
  532. package/dist/i18n/locales/nl.json +6 -3
  533. package/dist/i18n/locales/pl.json +6 -3
  534. package/dist/i18n/locales/pt.json +6 -3
  535. package/dist/i18n/locales/ro.json +6 -3
  536. package/dist/i18n/locales/ru.json +6 -3
  537. package/dist/i18n/locales/sv.json +6 -3
  538. package/dist/i18n/locales/tr.json +6 -3
  539. package/dist/i18n/locales/uk.json +6 -3
  540. package/dist/i18n/locales/zh-cn.json +6 -3
  541. package/dist/icon-scan.d.ts +276 -0
  542. package/dist/icon-scan.js +485 -0
  543. package/dist/icons-whitelist.d.ts +5 -4
  544. package/dist/index.d.ts +25 -4
  545. package/dist/index.js +71 -67
  546. package/dist/input-variants.d.ts +18 -0
  547. package/dist/llms-full.txt +19105 -4677
  548. package/dist/llms-medium.txt +1027 -174
  549. package/dist/llms.txt +13 -10
  550. package/dist/locale-blueprint.json +6 -3
  551. package/dist/nuxt-auto-imports.d.ts +100 -0
  552. package/dist/nuxt-auto-imports.js +55 -0
  553. package/dist/nuxt-module.d.ts +26 -1
  554. package/dist/nuxt.js +26 -9
  555. package/dist/passthrough-deduper.js +5 -0
  556. package/dist/plugin.d.ts +10 -1
  557. package/dist/plugin.js +21 -19
  558. package/dist/pt-scope-registry.d.ts +15 -0
  559. package/dist/runtime/nuxt-plugin.js +29 -21
  560. package/dist/styles.css +1 -1
  561. package/dist/tabs-variants.d.ts +18 -0
  562. package/dist/types/ColumnName.d.ts +1 -1
  563. package/dist/types/CommonProps.d.ts +2 -2
  564. package/dist/types/Config.d.ts +47 -0
  565. package/dist/types/InputVariant.d.ts +22 -0
  566. package/dist/types/ItemProps.d.ts +50 -0
  567. package/dist/types/Option.d.ts +6 -0
  568. package/dist/types/PtScope.d.ts +13 -0
  569. package/dist/types/TabsVariant.d.ts +17 -0
  570. package/dist/types/passthrough.d.ts +332 -0
  571. package/dist/types/passthrough.js +78 -0
  572. package/dist/types/ptComponentMap.d.ts +60 -0
  573. package/dist/utilities/functions/hasVnodeListener.d.ts +16 -0
  574. package/dist/utilities/functions/hasVnodeListener.js +12 -0
  575. package/dist/utilities/functions/itemProps.d.ts +46 -0
  576. package/dist/utilities/functions/itemProps.js +47 -0
  577. package/dist/utilities/functions/slotKey.d.ts +5 -5
  578. package/dist/utilities/functions/slotKey.js +1 -1
  579. package/dist/utilities/functions/toggleInput.d.ts +98 -0
  580. package/dist/utilities/functions/toggleInput.js +56 -0
  581. package/dist/utilities/misc/listboxMetrics.d.ts +9 -3
  582. package/dist/utilities/misc/listboxMetrics.js +5 -2
  583. package/dist/utilities/misc/ssrStateInjectionKey.d.ts +42 -0
  584. package/dist/utilities/misc/ssrStateInjectionKey.js +4 -0
  585. package/dist/utils/cssLayers.d.ts +91 -0
  586. package/dist/utils/cssLayers.js +43 -0
  587. package/dist/utils/injectLibraryStyles.d.ts +3 -1
  588. package/dist/utils/injectLibraryStyles.js +24 -23
  589. package/dist/utils/passthrough.d.ts +63 -0
  590. package/dist/utils/passthrough.js +96 -0
  591. package/dist/utils/passthroughDeduper.d.ts +2 -0
  592. package/dist/utils/passthroughTestKit.d.ts +54 -0
  593. package/dist/utils/ptScope.d.ts +8 -0
  594. package/dist/utils/ptScope.js +4 -0
  595. package/dist/utils/swipeTestKit.d.ts +9 -0
  596. package/dist/validated/BbCheckbox.vue.d.ts +3 -1
  597. package/dist/validated/BbCheckbox.vue_vue_type_script_setup_true_lang.js +82 -23
  598. package/dist/validated/BbCheckboxGroup.vue.d.ts +125 -2
  599. package/dist/validated/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +113 -25
  600. package/dist/validated/BbColorInput.vue.d.ts +9 -7
  601. package/dist/validated/BbColorInput.vue_vue_type_script_setup_true_lang.js +145 -25
  602. package/dist/validated/BbDatePickerInput.vue.d.ts +11 -9
  603. package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +417 -27
  604. package/dist/validated/BbDropzone.vue_vue_type_script_setup_true_lang.js +17 -1
  605. package/dist/validated/BbForm.vue_vue_type_script_setup_true_lang.js +45 -27
  606. package/dist/validated/BbNumberInput.vue.d.ts +9 -7
  607. package/dist/validated/BbNumberInput.vue_vue_type_script_setup_true_lang.js +115 -25
  608. package/dist/validated/BbRadioGroup.vue.d.ts +124 -2
  609. package/dist/validated/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +113 -25
  610. package/dist/validated/BbRating.vue.d.ts +6 -4
  611. package/dist/validated/BbRating.vue_vue_type_script_setup_true_lang.js +69 -22
  612. package/dist/validated/BbSelect.vue.d.ts +235 -2
  613. package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +217 -32
  614. package/dist/validated/BbSlider.vue.d.ts +9 -7
  615. package/dist/validated/BbSlider.vue_vue_type_script_setup_true_lang.js +72 -25
  616. package/dist/validated/BbSwitch.vue.d.ts +3 -1
  617. package/dist/validated/BbSwitch.vue_vue_type_script_setup_true_lang.js +82 -23
  618. package/dist/validated/BbSwitchGroup.vue.d.ts +125 -2
  619. package/dist/validated/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +113 -25
  620. package/dist/validated/BbTag.vue.d.ts +9 -7
  621. package/dist/validated/BbTag.vue_vue_type_script_setup_true_lang.js +122 -25
  622. package/dist/validated/BbTextInput.vue.d.ts +9 -7
  623. package/dist/validated/BbTextInput.vue_vue_type_script_setup_true_lang.js +115 -25
  624. package/dist/validated/BbTextarea.vue.d.ts +9 -7
  625. package/dist/validated/BbTextarea.vue_vue_type_script_setup_true_lang.js +115 -25
  626. package/dist/validated/BbTimePickerInput.vue.d.ts +9 -7
  627. package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +175 -25
  628. package/dist/validated/index.d.ts +3 -0
  629. package/dist/validated/useValidatedField.js +25 -23
  630. package/dist/vite-plugin.d.ts +230 -23
  631. package/dist/vite.js +515 -301
  632. package/llms.txt +14 -11
  633. package/package.json +15 -11
  634. package/scripts/lib/component-tree.ts +611 -0
  635. package/scripts/lib/ensure-manifest.mjs +28 -5
  636. package/scripts/lib/eslint-plugin.d.ts +58 -1
  637. package/scripts/lib/eslint-plugin.mjs +899 -17
  638. package/scripts/lib/hand-roll-hints.mjs +50 -6
  639. package/scripts/lib/html-attributes.mjs +133 -0
  640. package/scripts/lib/mcp-config.mjs +38 -34
  641. package/scripts/lib/public-type-exports.mjs +246 -0
  642. package/scripts/lib/validate-bb-markup.mjs +312 -33
  643. package/dist/ai/BbBaseCheckbox.md +0 -49
  644. package/dist/ai/BbBaseCheckboxGroup.md +0 -64
  645. package/dist/ai/BbBaseColorInput.md +0 -65
  646. package/dist/ai/BbBaseColorPalette.md +0 -39
  647. package/dist/ai/BbBaseDatePicker.md +0 -43
  648. package/dist/ai/BbBaseDatePickerInput.md +0 -73
  649. package/dist/ai/BbBaseNumberInput.md +0 -71
  650. package/dist/ai/BbBaseRadio.md +0 -46
  651. package/dist/ai/BbBaseRadioGroup.md +0 -64
  652. package/dist/ai/BbBaseRating.md +0 -52
  653. package/dist/ai/BbBaseSelect.md +0 -88
  654. package/dist/ai/BbBaseSlider.md +0 -56
  655. package/dist/ai/BbBaseSwitch.md +0 -49
  656. package/dist/ai/BbBaseSwitchGroup.md +0 -64
  657. package/dist/ai/BbBaseTag.md +0 -68
  658. package/dist/ai/BbBaseTextInput.md +0 -75
  659. package/dist/ai/BbBaseTextarea.md +0 -62
  660. package/dist/ai/BbBaseTimePickerInput.md +0 -62
  661. package/dist/ai/CommonInputWrapper.md +0 -42
  662. package/dist/ai/source/BbBaseCheckbox.md +0 -461
  663. package/dist/ai/source/BbBaseCheckboxGroup.md +0 -554
  664. package/dist/ai/source/BbBaseColorInput.md +0 -431
  665. package/dist/ai/source/BbBaseColorPalette.md +0 -942
  666. package/dist/ai/source/BbBaseDatePicker.md +0 -1448
  667. package/dist/ai/source/BbBaseDatePickerInput.md +0 -1940
  668. package/dist/ai/source/BbBaseNumberInput.md +0 -617
  669. package/dist/ai/source/BbBaseRadio.md +0 -381
  670. package/dist/ai/source/BbBaseRadioGroup.md +0 -539
  671. package/dist/ai/source/BbBaseRating.md +0 -607
  672. package/dist/ai/source/BbBaseSelect.md +0 -945
  673. package/dist/ai/source/BbBaseSlider.md +0 -1144
  674. package/dist/ai/source/BbBaseSwitch.md +0 -246
  675. package/dist/ai/source/BbBaseSwitchGroup.md +0 -302
  676. package/dist/ai/source/BbBaseTag.md +0 -694
  677. package/dist/ai/source/BbBaseTextInput.md +0 -511
  678. package/dist/ai/source/BbBaseTextarea.md +0 -504
  679. package/dist/ai/source/BbBaseTimePickerInput.md +0 -1037
  680. package/dist/ai/source/CommonInputWrapper.md +0 -584
  681. package/dist/assets/svgs/sort.svg_raw.js +0 -4
  682. package/dist/components/BbBadge/BadgeAppendIcon.vue.d.ts +0 -3
  683. package/dist/components/BbBadge/BadgeAppendIcon.vue.js +0 -5
  684. package/dist/components/BbBadge/BadgeAppendIcon.vue_vue_type_script_setup_true_lang.js +0 -22
  685. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.d.ts +0 -40
  686. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.js +0 -6
  687. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue_vue_type_script_setup_true_lang.js +0 -145
  688. package/dist/components/BbBaseCheckbox/types.d.ts +0 -224
  689. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.d.ts +0 -19
  690. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.js +0 -6
  691. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue_vue_type_script_setup_true_lang.js +0 -190
  692. package/dist/components/BbBaseCheckboxGroup/types.d.ts +0 -257
  693. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.d.ts +0 -43
  694. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.js +0 -6
  695. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue_vue_type_script_setup_true_lang.js +0 -184
  696. package/dist/components/BbBaseColorInput/types.d.ts +0 -219
  697. package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue.d.ts +0 -13
  698. package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue_vue_type_script_setup_true_lang.js +0 -395
  699. package/dist/components/BbBaseColorPalette/types.d.ts +0 -40
  700. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.d.ts +0 -20
  701. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.js +0 -6
  702. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue_vue_type_script_setup_true_lang.js +0 -407
  703. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.d.ts +0 -47
  704. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.js +0 -5
  705. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue_vue_type_script_setup_true_lang.js +0 -318
  706. package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.js +0 -5
  707. package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue_vue_type_script_setup_true_lang.js +0 -115
  708. package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.js +0 -5
  709. package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue_vue_type_script_setup_true_lang.js +0 -116
  710. package/dist/components/BbBaseDatePicker/types.d.ts +0 -108
  711. package/dist/components/BbBaseDatePicker/useDatePickerContext.js +0 -11
  712. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.d.ts +0 -31
  713. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.js +0 -6
  714. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue_vue_type_script_setup_true_lang.js +0 -737
  715. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.js +0 -6
  716. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue_vue_type_script_setup_true_lang.js +0 -204
  717. package/dist/components/BbBaseDatePickerInput/types.d.ts +0 -325
  718. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.js +0 -6
  719. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue_vue_type_script_setup_true_lang.js +0 -190
  720. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.d.ts +0 -52
  721. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.js +0 -6
  722. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue_vue_type_script_setup_true_lang.js +0 -215
  723. package/dist/components/BbBaseNumberInput/types.d.ts +0 -211
  724. package/dist/components/BbBaseRadio/BbBaseRadio.vue.d.ts +0 -33
  725. package/dist/components/BbBaseRadio/BbBaseRadio.vue_vue_type_script_setup_true_lang.js +0 -113
  726. package/dist/components/BbBaseRadio/types.d.ts +0 -179
  727. package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue.d.ts +0 -19
  728. package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue_vue_type_script_setup_true_lang.js +0 -179
  729. package/dist/components/BbBaseRadioGroup/types.d.ts +0 -223
  730. package/dist/components/BbBaseRating/BbBaseRating.vue.d.ts +0 -38
  731. package/dist/components/BbBaseRating/BbBaseRating.vue.js +0 -6
  732. package/dist/components/BbBaseRating/BbBaseRating.vue_vue_type_script_setup_true_lang.js +0 -192
  733. package/dist/components/BbBaseRating/types.d.ts +0 -176
  734. package/dist/components/BbBaseSelect/BbBaseSelect.vue.d.ts +0 -19
  735. package/dist/components/BbBaseSelect/BbBaseSelect.vue.js +0 -6
  736. package/dist/components/BbBaseSelect/BbBaseSelect.vue_vue_type_script_setup_true_lang.js +0 -311
  737. package/dist/components/BbBaseSelect/types.d.ts +0 -297
  738. package/dist/components/BbBaseSlider/BbBaseSlider.vue.d.ts +0 -35
  739. package/dist/components/BbBaseSlider/BbBaseSlider.vue.js +0 -6
  740. package/dist/components/BbBaseSlider/BbBaseSlider.vue_vue_type_script_setup_true_lang.js +0 -340
  741. package/dist/components/BbBaseSlider/types.d.ts +0 -200
  742. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue.d.ts +0 -35
  743. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue.js +0 -6
  744. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue_vue_type_script_setup_true_lang.js +0 -146
  745. package/dist/components/BbBaseSwitch/types.d.ts +0 -10
  746. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.d.ts +0 -19
  747. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.js +0 -6
  748. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue_vue_type_script_setup_true_lang.js +0 -190
  749. package/dist/components/BbBaseSwitchGroup/types.d.ts +0 -8
  750. package/dist/components/BbBaseTag/BbBaseTag.vue.d.ts +0 -50
  751. package/dist/components/BbBaseTag/BbBaseTag.vue.js +0 -6
  752. package/dist/components/BbBaseTag/BbBaseTag.vue_vue_type_script_setup_true_lang.js +0 -266
  753. package/dist/components/BbBaseTag/types.d.ts +0 -160
  754. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.d.ts +0 -45
  755. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.js +0 -6
  756. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue_vue_type_script_setup_true_lang.js +0 -200
  757. package/dist/components/BbBaseTextInput/types.d.ts +0 -209
  758. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.d.ts +0 -39
  759. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.js +0 -6
  760. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue_vue_type_script_setup_true_lang.js +0 -187
  761. package/dist/components/BbBaseTextarea/types.d.ts +0 -170
  762. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.d.ts +0 -27
  763. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.js +0 -6
  764. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue_vue_type_script_setup_true_lang.js +0 -519
  765. package/dist/components/BbBaseTimePickerInput/types.d.ts +0 -151
  766. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue.js +0 -6
  767. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue_vue_type_script_setup_true_lang.js +0 -107
  768. /package/dist/components/{BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.d.ts → BbCalendar/CalendarMonthPanel.vue.d.ts} +0 -0
  769. /package/dist/components/{BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.d.ts → BbCalendar/CalendarYearPanel.vue.d.ts} +0 -0
  770. /package/dist/{components/BbBaseDatePicker/typeahead.d.ts → composables/useTypeahead.d.ts} +0 -0
  771. /package/dist/{components/BbBaseDatePicker/typeahead.js → composables/useTypeahead.js} +0 -0
@@ -20,6 +20,7 @@
20
20
  class="bb-listbox"
21
21
  :class="{
22
22
  'bb-listbox--compact': compact,
23
+ 'bb-listbox--described': described,
23
24
  'bb-listbox--loading': loading,
24
25
  'bb-listbox--multiple': multiple,
25
26
  'bb-listbox--no-data': !hasOptions,
@@ -30,7 +31,8 @@
30
31
  '--option-height': `${resolvedOptionHeight}px`,
31
32
  '--option-font-size': resolvedOptionFontSize,
32
33
  }"
33
- @click.stop="handleClick"
34
+ @click.capture="handleClick"
35
+ @click.stop
34
36
  @mousedown.prevent
35
37
  >
36
38
  <span class="bb-listbox__outer-container scrollbar-border">
@@ -46,6 +48,7 @@
46
48
  noDataText || t('common.noDataText').value
47
49
  }}</slot>
48
50
  </span>
51
+ <!-- eslint-disable vue/attributes-order -- `pt` binds LAST so a consumer listener runs after ours (PASSTHROUGH.md T17) -->
49
52
  <span
50
53
  v-else
51
54
  :id="id"
@@ -58,12 +61,23 @@
58
61
  }"
59
62
  tabindex="-1"
60
63
  @mouseleave="handleMouseleave"
64
+ v-bind="passthrough?.list"
61
65
  >
62
66
  <span
63
67
  v-for="row in virtualRows"
64
68
  :id="getOptionId(optionsMeta[row.index].valueHash)"
65
69
  :key="optionsMeta[row.index].valueHash"
70
+ :aria-describedby="
71
+ namesOwnRow(optionsMeta[row.index].description)
72
+ ? optionDescriptionId(optionsMeta[row.index].valueHash)
73
+ : undefined
74
+ "
66
75
  :aria-disabled="optionsMeta[row.index].disabled ? true : undefined"
76
+ :aria-labelledby="
77
+ namesOwnRow(optionsMeta[row.index].description)
78
+ ? optionLabelId(optionsMeta[row.index].valueHash)
79
+ : undefined
80
+ "
67
81
  :aria-posinset="row.index + 1"
68
82
  :aria-selected="optionsMeta[row.index].selected"
69
83
  :aria-setsize="props.options.length"
@@ -79,8 +93,37 @@
79
93
  transform: `translateY(${row.start}px)`,
80
94
  }"
81
95
  @mouseenter.stop="handleMouseenter(row.index)"
96
+ v-bind="
97
+ passthrough?.part?.(
98
+ 'option',
99
+ {
100
+ selected: optionsMeta[row.index].selected,
101
+ disabled: optionsMeta[row.index].disabled || undefined,
102
+ },
103
+ optionsMeta[row.index].item
104
+ )
105
+ "
82
106
  >
107
+ <!-- Icons sit OUTSIDE the `option` slot, like the check: the slot
108
+ replaces the row's text, never what `itemProps` decorates it with. -->
109
+ <BbIcon
110
+ v-if="optionsMeta[row.index]['prepend:icon']"
111
+ aria-hidden="true"
112
+ class="bb-listbox__option-prepend-icon"
113
+ :icon="optionsMeta[row.index]['prepend:icon']!"
114
+ v-bind="
115
+ passthrough?.part?.(
116
+ 'item-icon',
117
+ {
118
+ selected: optionsMeta[row.index].selected,
119
+ disabled: optionsMeta[row.index].disabled || undefined,
120
+ },
121
+ optionsMeta[row.index].item
122
+ )
123
+ "
124
+ />
83
125
  <slot
126
+ :description="optionsMeta[row.index].description"
84
127
  :disabled="optionsMeta[row.index].disabled"
85
128
  :focused="focusedIndex === row.index"
86
129
  :index="row.index"
@@ -90,15 +133,88 @@
90
133
  :text="optionsMeta[row.index].text"
91
134
  :value="optionsMeta[row.index].value"
92
135
  >
93
- <span class="bb-listbox__option-label">{{
94
- optionsMeta[row.index].text
95
- }}</span>
96
- <BbIcon
97
- aria-hidden="true"
98
- class="bb-listbox__option-check"
99
- :icon="checkIcon"
100
- />
136
+ <span
137
+ v-if="optionsMeta[row.index].description"
138
+ class="bb-listbox__option-content"
139
+ >
140
+ <span
141
+ :id="optionLabelId(optionsMeta[row.index].valueHash)"
142
+ class="bb-listbox__option-label"
143
+ v-bind="
144
+ passthrough?.part?.(
145
+ 'item-text',
146
+ {
147
+ selected: optionsMeta[row.index].selected,
148
+ disabled: optionsMeta[row.index].disabled || undefined,
149
+ },
150
+ optionsMeta[row.index].item
151
+ )
152
+ "
153
+ >{{ optionsMeta[row.index].text }}</span
154
+ >
155
+ <span
156
+ :id="optionDescriptionId(optionsMeta[row.index].valueHash)"
157
+ class="bb-listbox__option-description"
158
+ v-bind="
159
+ passthrough?.part?.(
160
+ 'item-description',
161
+ {
162
+ selected: optionsMeta[row.index].selected,
163
+ disabled: optionsMeta[row.index].disabled || undefined,
164
+ },
165
+ optionsMeta[row.index].item
166
+ )
167
+ "
168
+ >{{ optionsMeta[row.index].description }}</span
169
+ >
170
+ </span>
171
+ <span
172
+ v-else
173
+ class="bb-listbox__option-label"
174
+ v-bind="
175
+ passthrough?.part?.(
176
+ 'item-text',
177
+ {
178
+ selected: optionsMeta[row.index].selected,
179
+ disabled: optionsMeta[row.index].disabled || undefined,
180
+ },
181
+ optionsMeta[row.index].item
182
+ )
183
+ "
184
+ >{{ optionsMeta[row.index].text }}</span
185
+ >
101
186
  </slot>
187
+ <!-- The check takes the append icon's place on the selected row. -->
188
+ <BbIcon
189
+ v-if="
190
+ optionsMeta[row.index]['append:icon'] &&
191
+ !optionsMeta[row.index].selected
192
+ "
193
+ aria-hidden="true"
194
+ class="bb-listbox__option-append-icon"
195
+ :icon="optionsMeta[row.index]['append:icon']!"
196
+ v-bind="
197
+ passthrough?.part?.(
198
+ 'item-icon',
199
+ {
200
+ selected: optionsMeta[row.index].selected,
201
+ disabled: optionsMeta[row.index].disabled || undefined,
202
+ },
203
+ optionsMeta[row.index].item
204
+ )
205
+ "
206
+ />
207
+ <!-- OUTSIDE the slot, mirroring BbDropdown's trailing region: the
208
+ `option` slot replaces the row's TEXT, never its selection state.
209
+ Nested inside, any custom row silently lost the check and had to
210
+ redraw it from the `selected` prop. Free to sit here: the glyph is
211
+ absolutely positioned (BbSelectPopover/index.css), so it costs the
212
+ slot no width and only a selected row pads short of it. -->
213
+ <BbIcon
214
+ aria-hidden="true"
215
+ class="bb-listbox__option-check"
216
+ :icon="checkIcon"
217
+ />
102
218
  </span>
103
219
  </span>
104
220
  <slot name="options:append"></slot>
@@ -137,7 +253,7 @@ const props = withDefaults(defineProps<FlatListBoxProps<Item>>(), {
137
253
 
138
254
  const emit = defineEmits<FlatListBoxEvents>();
139
255
 
140
- defineSlots<FlatListBoxSlots<Item>>();
256
+ const slots = defineSlots<FlatListBoxSlots<Item>>();
141
257
 
142
258
  const { t } = useLocale();
143
259
 
@@ -153,7 +269,7 @@ const { touch } = useTouchRowLadder();
153
269
  // otherwise the touch ladder applies (see `listboxMetrics`).
154
270
  const resolvedOptionHeight = computed(() => {
155
271
  if (props.optionHeight) return props.optionHeight;
156
- return listboxOptionHeight(touch.value, !!props.compact);
272
+ return listboxOptionHeight(touch.value, !!props.compact, !!props.described);
157
273
  });
158
274
  const resolvedOptionFontSize = computed(() =>
159
275
  listboxOptionFontSize(touch.value)
@@ -177,6 +293,9 @@ const optionsMeta = computed(() =>
177
293
  props.options.map((o, index) => ({
178
294
  index,
179
295
  text: o.text,
296
+ description: o.description,
297
+ 'prepend:icon': o['prepend:icon'],
298
+ 'append:icon': o['append:icon'],
180
299
  value: o.value,
181
300
  valueHash: o.valueHash,
182
301
  item: o.item,
@@ -191,6 +310,22 @@ const optionsMeta = computed(() =>
191
310
  const uid = useId();
192
311
  const getOptionId = (hash: Option['valueHash']) =>
193
312
  `${uid}-listbox-option-${hash}`;
313
+
314
+ /**
315
+ * A described row's text and description ids. The option's name is otherwise
316
+ * its whole content ("Ada Lovelace ada@example.com"): with the default row
317
+ * markup the option is `aria-labelledby` its label and `aria-describedby` its
318
+ * description. A consumer `#option` slot renders its own content, so the ids
319
+ * would point at nothing — `slots.option` is only present when a consumer
320
+ * passed one, because every forwarding layer declares it behind
321
+ * `v-if="$slots.option"`. Read per render: `$slots` is not reactive.
322
+ */
323
+ const optionLabelId = (hash: Option['valueHash']) =>
324
+ `${getOptionId(hash)}__label`;
325
+ const optionDescriptionId = (hash: Option['valueHash']) =>
326
+ `${getOptionId(hash)}__description`;
327
+ const namesOwnRow = (description: string | undefined) =>
328
+ !!description && !slots.option;
194
329
  const activeDescendantId = computed(() => {
195
330
  if (isNil(focusedIndex.value)) return undefined;
196
331
  const option = optionsMeta.value[focusedIndex.value];
@@ -254,6 +389,13 @@ const confirmOption = () => {
254
389
  }
255
390
  };
256
391
 
392
+ /**
393
+ * Bound in the CAPTURE phase: the click is delegated from the option rows to
394
+ * this container, and a consumer listener bound on a row through `pt:option`
395
+ * fires at the target — before a bubble-phase listener here. Capture runs
396
+ * first, so ours-first (PASSTHROUGH.md T17) holds for delegated handlers
397
+ * too; the separate `@click.stop` keeps the click from leaving the listbox.
398
+ */
257
399
  const handleClick = (event: MouseEvent) => {
258
400
  event.preventDefault();
259
401
  if (
@@ -330,8 +472,19 @@ defineExpose({
330
472
 
331
473
  ```ts
332
474
  import type { Option } from '@/types/Option';
475
+ import type { PtBindings } from '@/types/passthrough';
333
476
 
334
477
  export type FlatListBoxProps<Item = any> = {
478
+ /**
479
+ * Passthrough resolver handed down by the select popover: `list` is the
480
+ * `role="listbox"` node (bound whole); `option` is one option, resolved per
481
+ * node with its own `selected` / `disabled`. Internal.
482
+ */
483
+ passthrough?: PtBindings<
484
+ 'list' | 'option' | 'item-text' | 'item-icon' | 'item-description',
485
+ 'selected' | 'disabled'
486
+ >;
487
+
335
488
  /**
336
489
  * Id applied to the `role="listbox"` element itself (not the wrapper), so
337
490
  * a combobox's `aria-controls` reference resolves to the listbox role.
@@ -376,6 +529,12 @@ export type FlatListBoxProps<Item = any> = {
376
529
  * 44px / 36px on mobile viewports). An explicit value wins on every viewport.
377
530
  */
378
531
  optionHeight?: number;
532
+ /**
533
+ * Every row carries a one-line description under its label (the owner's
534
+ * `itemProps` declares a `description`). Rows get a fixed two-line height and the
535
+ * description ellipsizes; an explicit `optionHeight` still wins.
536
+ */
537
+ described?: boolean;
379
538
  };
380
539
 
381
540
  export type FlatListBoxEvents = {
@@ -412,6 +571,8 @@ export type FlatListBoxOptionSlotProps<Item = any> = {
412
571
  text: string;
413
572
  /** The resolved value for this option. */
414
573
  value: any;
574
+ /** The resolved `itemProps.description` for this option, when it has one. */
575
+ description: string | undefined;
415
576
  };
416
577
 
417
578
  export type FlatListBoxSlots<Item = any> = {
@@ -15,6 +15,7 @@
15
15
  class="bb-listbox bb-listbox--grouped"
16
16
  :class="{
17
17
  'bb-listbox--compact': compact,
18
+ 'bb-listbox--described': described,
18
19
  'bb-listbox--loading': loading,
19
20
  'bb-listbox--multiple': multiple,
20
21
  'bb-listbox--no-data': !hasOptions,
@@ -26,7 +27,8 @@
26
27
  '--group-header-height': `${resolvedHeaderHeight}px`,
27
28
  '--option-font-size': resolvedOptionFontSize,
28
29
  }"
29
- @click.stop="handleClick"
30
+ @click.capture="handleClick"
31
+ @click.stop
30
32
  @mousedown.prevent
31
33
  >
32
34
  <span class="bb-listbox__outer-container scrollbar-border">
@@ -42,6 +44,7 @@
42
44
  noDataText || t('common.noDataText').value
43
45
  }}</slot>
44
46
  </span>
47
+ <!-- eslint-disable vue/attributes-order -- `pt` binds LAST so a consumer listener runs after ours (PASSTHROUGH.md T17) -->
45
48
  <span
46
49
  v-else
47
50
  :id="id"
@@ -52,6 +55,7 @@
52
55
  :style="{ height: `${totalSize}px` }"
53
56
  tabindex="-1"
54
57
  @mouseleave="handleMouseleave"
58
+ v-bind="passthrough?.list"
55
59
  >
56
60
  <span
57
61
  v-for="row in virtualRows"
@@ -89,11 +93,25 @@
89
93
  v-for="option in groupMetaIndexedByIndex[row.index].options"
90
94
  :id="getOptionId(option.valueHash)"
91
95
  :key="option.valueHash"
96
+ :aria-describedby="
97
+ namesOwnRow(
98
+ optionsMetaIndexedById[option.valueHash].description
99
+ )
100
+ ? optionDescriptionId(option.valueHash)
101
+ : undefined
102
+ "
92
103
  :aria-disabled="
93
104
  optionsMetaIndexedById[option.valueHash].disabled
94
105
  ? true
95
106
  : undefined
96
107
  "
108
+ :aria-labelledby="
109
+ namesOwnRow(
110
+ optionsMetaIndexedById[option.valueHash].description
111
+ )
112
+ ? optionLabelId(option.valueHash)
113
+ : undefined
114
+ "
97
115
  :aria-posinset="
98
116
  optionsMetaIndexedById[option.valueHash].indexInGroup + 1
99
117
  "
@@ -116,8 +134,46 @@
116
134
  optionsMetaIndexedById[option.valueHash].globalIndex
117
135
  )
118
136
  "
137
+ v-bind="
138
+ passthrough?.part?.(
139
+ 'option',
140
+ {
141
+ selected: optionsMetaIndexedById[option.valueHash].selected,
142
+ disabled:
143
+ optionsMetaIndexedById[option.valueHash].disabled ||
144
+ undefined,
145
+ },
146
+ optionsMetaIndexedById[option.valueHash].item
147
+ )
148
+ "
119
149
  >
150
+ <!-- Icons sit OUTSIDE the `option` slot, like the check: the slot
151
+ replaces the row's text, never what `itemProps` decorates it with. -->
152
+ <BbIcon
153
+ v-if="optionsMetaIndexedById[option.valueHash]['prepend:icon']"
154
+ aria-hidden="true"
155
+ class="bb-listbox__option-prepend-icon"
156
+ :icon="
157
+ optionsMetaIndexedById[option.valueHash]['prepend:icon']!
158
+ "
159
+ v-bind="
160
+ passthrough?.part?.(
161
+ 'item-icon',
162
+ {
163
+ selected:
164
+ optionsMetaIndexedById[option.valueHash].selected,
165
+ disabled:
166
+ optionsMetaIndexedById[option.valueHash].disabled ||
167
+ undefined,
168
+ },
169
+ optionsMetaIndexedById[option.valueHash].item
170
+ )
171
+ "
172
+ />
120
173
  <slot
174
+ :description="
175
+ optionsMetaIndexedById[option.valueHash].description
176
+ "
121
177
  :disabled="!!optionsMetaIndexedById[option.valueHash].disabled"
122
178
  :focused="
123
179
  focusedIndex ===
@@ -130,15 +186,98 @@
130
186
  :text="optionsMetaIndexedById[option.valueHash].text"
131
187
  :value="optionsMetaIndexedById[option.valueHash].value"
132
188
  >
133
- <span class="bb-listbox__option-label">{{
134
- optionsMetaIndexedById[option.valueHash].text
135
- }}</span>
136
- <BbIcon
137
- aria-hidden="true"
138
- class="bb-listbox__option-check"
139
- :icon="checkIcon"
140
- />
189
+ <span
190
+ v-if="optionsMetaIndexedById[option.valueHash].description"
191
+ class="bb-listbox__option-content"
192
+ >
193
+ <span
194
+ :id="optionLabelId(option.valueHash)"
195
+ class="bb-listbox__option-label"
196
+ v-bind="
197
+ passthrough?.part?.(
198
+ 'item-text',
199
+ {
200
+ selected:
201
+ optionsMetaIndexedById[option.valueHash].selected,
202
+ disabled:
203
+ optionsMetaIndexedById[option.valueHash].disabled ||
204
+ undefined,
205
+ },
206
+ optionsMetaIndexedById[option.valueHash].item
207
+ )
208
+ "
209
+ >{{ optionsMetaIndexedById[option.valueHash].text }}</span
210
+ >
211
+ <span
212
+ :id="optionDescriptionId(option.valueHash)"
213
+ class="bb-listbox__option-description"
214
+ v-bind="
215
+ passthrough?.part?.(
216
+ 'item-description',
217
+ {
218
+ selected:
219
+ optionsMetaIndexedById[option.valueHash].selected,
220
+ disabled:
221
+ optionsMetaIndexedById[option.valueHash].disabled ||
222
+ undefined,
223
+ },
224
+ optionsMetaIndexedById[option.valueHash].item
225
+ )
226
+ "
227
+ >{{
228
+ optionsMetaIndexedById[option.valueHash].description
229
+ }}</span
230
+ >
231
+ </span>
232
+ <span
233
+ v-else
234
+ class="bb-listbox__option-label"
235
+ v-bind="
236
+ passthrough?.part?.(
237
+ 'item-text',
238
+ {
239
+ selected:
240
+ optionsMetaIndexedById[option.valueHash].selected,
241
+ disabled:
242
+ optionsMetaIndexedById[option.valueHash].disabled ||
243
+ undefined,
244
+ },
245
+ optionsMetaIndexedById[option.valueHash].item
246
+ )
247
+ "
248
+ >{{ optionsMetaIndexedById[option.valueHash].text }}</span
249
+ >
141
250
  </slot>
251
+ <!-- The check takes the append icon's place on the selected row. -->
252
+ <BbIcon
253
+ v-if="
254
+ optionsMetaIndexedById[option.valueHash]['append:icon'] &&
255
+ !optionsMetaIndexedById[option.valueHash].selected
256
+ "
257
+ aria-hidden="true"
258
+ class="bb-listbox__option-append-icon"
259
+ :icon="optionsMetaIndexedById[option.valueHash]['append:icon']!"
260
+ v-bind="
261
+ passthrough?.part?.(
262
+ 'item-icon',
263
+ {
264
+ selected:
265
+ optionsMetaIndexedById[option.valueHash].selected,
266
+ disabled:
267
+ optionsMetaIndexedById[option.valueHash].disabled ||
268
+ undefined,
269
+ },
270
+ optionsMetaIndexedById[option.valueHash].item
271
+ )
272
+ "
273
+ />
274
+ <!-- Outside the slot — see the note in FlatListBox: `option`
275
+ replaces the row's text, not its selection state. -->
276
+ <BbIcon
277
+ aria-hidden="true"
278
+ class="bb-listbox__option-check"
279
+ :icon="checkIcon"
280
+ />
142
281
  </span>
143
282
  </span>
144
283
  </span>
@@ -179,7 +318,7 @@ const props = withDefaults(defineProps<GroupedListBoxProps>(), {
179
318
 
180
319
  const emit = defineEmits<GroupedListBoxEvents>();
181
320
 
182
- defineSlots<GroupedListBoxSlots<Item>>();
321
+ const slots = defineSlots<GroupedListBoxSlots<Item>>();
183
322
 
184
323
  const { t } = useLocale();
185
324
 
@@ -195,7 +334,7 @@ const { touch } = useTouchRowLadder();
195
334
  // every viewport; otherwise the touch ladder applies (see `listboxMetrics`).
196
335
  const resolvedOptionHeight = computed(() => {
197
336
  if (props.optionHeight) return props.optionHeight;
198
- return listboxOptionHeight(touch.value, !!props.compact);
337
+ return listboxOptionHeight(touch.value, !!props.compact, !!props.described);
199
338
  });
200
339
 
201
340
  const resolvedHeaderHeight = computed(() => {
@@ -255,6 +394,9 @@ const optionsMeta = computed(() => {
255
394
 
256
395
  const item = o.item;
257
396
  const text = o.text;
397
+ const description = o.description;
398
+ const prependIcon = o['prepend:icon'];
399
+ const appendIcon = o['append:icon'];
258
400
  const value = o.value;
259
401
  // No `focused` field here on purpose: focus is bound directly in the
260
402
  // template (`focusedIndex === globalIndex`), so arrow keys and
@@ -269,6 +411,9 @@ const optionsMeta = computed(() => {
269
411
  disabled,
270
412
  item: item,
271
413
  text: text,
414
+ description,
415
+ 'prepend:icon': prependIcon,
416
+ 'append:icon': appendIcon,
272
417
  value: value,
273
418
  valueHash: o.valueHash,
274
419
  };
@@ -286,6 +431,22 @@ const optionsMetaIndexedById = computed(() => indexBy(optionsMeta.value, 'id'));
286
431
  const uid = useId();
287
432
  const getOptionId = (hash: Option['valueHash']) =>
288
433
  `${uid}-listbox-option-${hash}`;
434
+
435
+ /**
436
+ * A described row's text and description ids. The option's name is otherwise
437
+ * its whole content ("Ada Lovelace ada@example.com"): with the default row
438
+ * markup the option is `aria-labelledby` its label and `aria-describedby` its
439
+ * description. A consumer `#option` slot renders its own content, so the ids
440
+ * would point at nothing — `slots.option` is only present when a consumer
441
+ * passed one, because every forwarding layer declares it behind
442
+ * `v-if="$slots.option"`. Read per render: `$slots` is not reactive.
443
+ */
444
+ const optionLabelId = (hash: Option['valueHash']) =>
445
+ `${getOptionId(hash)}__label`;
446
+ const optionDescriptionId = (hash: Option['valueHash']) =>
447
+ `${getOptionId(hash)}__description`;
448
+ const namesOwnRow = (description: string | undefined) =>
449
+ !!description && !slots.option;
289
450
  const activeDescendantId = computed(() => {
290
451
  if (isNil(focusedIndex.value)) return undefined;
291
452
  const focusedOption = optionsMeta.value[focusedIndex.value];
@@ -405,6 +566,13 @@ const confirmOption = () => {
405
566
  }
406
567
  };
407
568
 
569
+ /**
570
+ * Bound in the CAPTURE phase: the click is delegated from the option rows to
571
+ * this container, and a consumer listener bound on a row through `pt:option`
572
+ * fires at the target — before a bubble-phase listener here. Capture runs
573
+ * first, so ours-first (PASSTHROUGH.md T17) holds for delegated handlers
574
+ * too; the separate `@click.stop` keeps the click from leaving the listbox.
575
+ */
408
576
  const handleClick = (event: MouseEvent) => {
409
577
  event.preventDefault();
410
578
  if (
@@ -482,8 +650,19 @@ defineExpose({
482
650
 
483
651
  ```ts
484
652
  import type { GroupedOptions, Option } from '@/types/Option';
653
+ import type { PtBindings } from '@/types/passthrough';
485
654
 
486
655
  export type GroupedListBoxProps = {
656
+ /**
657
+ * Passthrough resolver handed down by the select popover: `list` is the
658
+ * `role="listbox"` node (bound whole); `option` is one option, resolved per
659
+ * node with its own `selected` / `disabled`. Internal.
660
+ */
661
+ passthrough?: PtBindings<
662
+ 'list' | 'option' | 'item-text' | 'item-icon' | 'item-description',
663
+ 'selected' | 'disabled'
664
+ >;
665
+
487
666
  /**
488
667
  * Id applied to the `role="listbox"` element itself (not the wrapper), so
489
668
  * a combobox's `aria-controls` reference resolves to the listbox role.
@@ -527,6 +706,12 @@ export type GroupedListBoxProps = {
527
706
  * 44px / 36px on mobile viewports). An explicit value wins on every viewport.
528
707
  */
529
708
  optionHeight?: number;
709
+ /**
710
+ * Every row carries a one-line description under its label (the owner's
711
+ * `itemProps` declares a `description`). Rows get a fixed two-line height and the
712
+ * description ellipsizes; an explicit `optionHeight` still wins.
713
+ */
714
+ described?: boolean;
530
715
  /**
531
716
  * Duration of open/close transition in milliseconds.
532
717
  *
@@ -569,6 +754,8 @@ export type GroupedListBoxOptionSlotProps<Item = any> = {
569
754
  text: string;
570
755
  /** The resolved value for this option. */
571
756
  value: any;
757
+ /** The resolved `itemProps.description` for this option, when it has one. */
758
+ description: string | undefined;
572
759
  };
573
760
 
574
761
  /** Props exposed by the `group` slot. */
@@ -250,6 +250,13 @@ watch(selectedExamplePath, (examplePath) => {
250
250
  </script>
251
251
 
252
252
  <style scoped lang="postcss">
253
+ /*
254
+ * Tailwind v4: an SFC \3c style> block is its own PostCSS pass, so `@apply`
255
+ * cannot see the theme or the class-based `dark` variant without this.
256
+ * Emits nothing itself — it only makes the utilities resolvable.
257
+ */
258
+ @reference '../../assets/css/index.css';
259
+
253
260
  .guides-component {
254
261
  @apply overflow-hidden border text-[color:var(--bb-text)];
255
262
  background: var(--bb-panel);
@@ -278,7 +285,7 @@ watch(selectedExamplePath, (examplePath) => {
278
285
  }
279
286
 
280
287
  .guides-component__code {
281
- @apply rounded px-1 py-0.5 font-mono text-[13px];
288
+ @apply rounded-sm px-1 py-0.5 font-mono text-[13px];
282
289
  background: var(--bb-muted);
283
290
  color: var(--bb-text);
284
291
  }
@@ -288,12 +295,12 @@ watch(selectedExamplePath, (examplePath) => {
288
295
  }
289
296
 
290
297
  .guides-component__select-label {
291
- @apply text-[11px] font-semibold uppercase tracking-[0.06em];
298
+ @apply text-[11px] font-semibold tracking-[0.06em] uppercase;
292
299
  color: var(--bb-text-muted);
293
300
  }
294
301
 
295
302
  .guides-component__select {
296
- @apply w-full px-3 py-2 text-sm outline-none;
303
+ @apply w-full px-3 py-2 text-sm outline-hidden;
297
304
  background: var(--bb-panel);
298
305
  border: var(--bb-border-w) solid var(--bb-border);
299
306
  border-radius: var(--bb-radius);
@@ -311,7 +318,7 @@ watch(selectedExamplePath, (examplePath) => {
311
318
  }
312
319
 
313
320
  .guides-component__tab {
314
- @apply whitespace-nowrap px-2.5 py-1.5 text-[13px] transition-colors;
321
+ @apply px-2.5 py-1.5 text-[13px] whitespace-nowrap transition-colors;
315
322
  border-radius: var(--bb-radius);
316
323
  color: var(--bb-text-muted);
317
324
  }
@@ -343,7 +350,7 @@ watch(selectedExamplePath, (examplePath) => {
343
350
  }
344
351
 
345
352
  .guides-component__preview-card {
346
- @apply border-b lg:border-b-0 lg:border-r;
353
+ @apply border-b lg:border-r lg:border-b-0;
347
354
  border-color: var(--bb-border);
348
355
  }
349
356
 
@@ -352,7 +359,7 @@ watch(selectedExamplePath, (examplePath) => {
352
359
  }
353
360
 
354
361
  .guides-component__preview-title {
355
- @apply text-[11px] font-semibold uppercase tracking-[0.06em];
362
+ @apply text-[11px] font-semibold tracking-[0.06em] uppercase;
356
363
  color: var(--bb-text-muted);
357
364
  }
358
365
 
@@ -369,7 +376,7 @@ watch(selectedExamplePath, (examplePath) => {
369
376
  }
370
377
 
371
378
  .guides-component__source {
372
- @apply m-0 max-h-[28rem] overflow-auto p-3 font-mono text-[13px] leading-relaxed;
379
+ @apply m-0 max-h-112 overflow-auto p-3 font-mono text-[13px] leading-relaxed;
373
380
  background: color-mix(in oklab, var(--bb-text) 90%, transparent);
374
381
  border-radius: var(--bb-radius);
375
382
  color: color-mix(in oklab, var(--bb-panel) 90%, white);