bitboss-ui 3.0.0-beta.63 → 3.0.0-beta.65

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 (396) hide show
  1. package/README.md +25 -20
  2. package/bin/bitboss-ui.mjs +73 -7
  3. package/dist/ai/BbAlert.md +10 -1
  4. package/dist/ai/BbBadge.md +35 -3
  5. package/dist/ai/BbBadgeButton.md +4 -2
  6. package/dist/ai/BbBaseButton.md +9 -3
  7. package/dist/ai/BbBreadcrumbs.md +2 -2
  8. package/dist/ai/BbButton.md +113 -8
  9. package/dist/ai/BbCheckbox.md +1 -1
  10. package/dist/ai/BbCheckboxGroup.md +94 -6
  11. package/dist/ai/BbColorInput.md +4 -1
  12. package/dist/ai/BbColorPalette.md +2 -1
  13. package/dist/ai/BbConfirm.md +7 -3
  14. package/dist/ai/BbDatePicker.md +2 -1
  15. package/dist/ai/BbDatePickerInput.md +4 -1
  16. package/dist/ai/BbDialog.md +12 -11
  17. package/dist/ai/BbDropdown.md +189 -38
  18. package/dist/ai/BbDropdownButton.md +27 -7
  19. package/dist/ai/BbForm.md +55 -22
  20. package/dist/ai/BbHost.md +2 -2
  21. package/dist/ai/BbHoverCard.md +7 -3
  22. package/dist/ai/BbIcon.md +12 -6
  23. package/dist/ai/BbIndicator.md +11 -1
  24. package/dist/ai/BbNumberInput.md +4 -1
  25. package/dist/ai/BbOffCanvas.md +37 -3
  26. package/dist/ai/BbPopover.md +2 -1
  27. package/dist/ai/BbRadio.md +1 -1
  28. package/dist/ai/BbRadioGroup.md +102 -10
  29. package/dist/ai/BbSelect.md +52 -17
  30. package/dist/ai/BbSelectPopover.md +93 -26
  31. package/dist/ai/BbSwitch.md +1 -1
  32. package/dist/ai/BbSwitchGroup.md +30 -3
  33. package/dist/ai/BbTable.md +17 -10
  34. package/dist/ai/BbTabs.md +8 -3
  35. package/dist/ai/BbTabsList.md +4 -1
  36. package/dist/ai/BbTag.md +5 -2
  37. package/dist/ai/BbTextInput.md +4 -1
  38. package/dist/ai/BbTextarea.md +4 -1
  39. package/dist/ai/BbTimePicker.md +2 -1
  40. package/dist/ai/BbTimePickerInput.md +4 -1
  41. package/dist/ai/BbToast.md +9 -3
  42. package/dist/ai/BbTooltip.md +71 -9
  43. package/dist/ai/ChipsBox.md +1 -1
  44. package/dist/ai/CommonField.md +1 -1
  45. package/dist/ai/OptionsContainer.md +42 -0
  46. package/dist/ai/changelog.json +494 -6
  47. package/dist/ai/components.json +50 -48
  48. package/dist/ai/composables/useBbConfig.md +8 -1
  49. package/dist/ai/composables/useConfirm.md +39 -1
  50. package/dist/ai/design-tokens.json +6 -6
  51. package/dist/ai/guides/agent-contract.md +2 -2
  52. package/dist/ai/guides/ai-router.md +24 -23
  53. package/dist/ai/guides/app-layout.md +5 -0
  54. package/dist/ai/guides/component-picker.md +9 -2
  55. package/dist/ai/guides/design-language.md +24 -24
  56. package/dist/ai/guides/design-tokens.md +15 -8
  57. package/dist/ai/guides/icons-policy.md +9 -2
  58. package/dist/ai/guides/inertia-helpers.md +1183 -301
  59. package/dist/ai/guides/installation-and-plugin-setup.md +12 -2
  60. package/dist/ai/guides/migration/adoption-checklist.md +235 -0
  61. package/dist/ai/guides/migration/components/bb-checkbox-group.md +16 -15
  62. package/dist/ai/guides/migration/components/bb-dialog.md +9 -9
  63. package/dist/ai/guides/migration/components/bb-dropdown.md +7 -2
  64. package/dist/ai/guides/migration/components/bb-popover.md +4 -2
  65. package/dist/ai/guides/migration/components/bb-select.md +19 -0
  66. package/dist/ai/guides/migration/components/bb-table.md +1 -0
  67. package/dist/ai/guides/migration/components/bb-toast.md +4 -0
  68. package/dist/ai/guides/migration/components/bb-tooltip.md +15 -12
  69. package/dist/ai/guides/migration/components/use-confirm.md +25 -2
  70. package/dist/ai/guides/migration/v2-to-v3.md +211 -9
  71. package/dist/ai/guides/migration/v3-beta-css-classes.md +7 -3
  72. package/dist/ai/guides/options-items-playbook.md +2 -1
  73. package/dist/ai/guides/passthrough.md +149 -85
  74. package/dist/ai/guides/preset-components.md +140 -15
  75. package/dist/ai/helpers/definePreset.json +7 -0
  76. package/dist/ai/helpers/definePreset.ts +123 -11
  77. package/dist/ai/helpers/inertia/manifest.json +151 -62
  78. package/dist/ai/helpers/inertia/messages.ts +33 -0
  79. package/dist/ai/helpers/inertia/useConfirmOnRouteLeave.ts +120 -20
  80. package/dist/ai/helpers/inertia/useHasChanged.ts +34 -16
  81. package/dist/ai/helpers/inertia/useLazyProp.ts +102 -36
  82. package/dist/ai/helpers/inertia/useLazyPropGetter.ts +3 -1
  83. package/dist/ai/helpers/inertia/usePaginatedResponseContext.ts +154 -34
  84. package/dist/ai/helpers/inertia/usePromiseForm.ts +121 -14
  85. package/dist/ai/helpers/inertia/useQuery.ts +133 -11
  86. package/dist/ai/helpers/inertia/useQueryObject.ts +74 -67
  87. package/dist/ai/helpers/inertia/useResourceContext.ts +60 -14
  88. package/dist/ai/helpers/inertia/useRouteQuery.ts +38 -27
  89. package/dist/ai/helpers/inertia/useScreenSizes.ts +9 -7
  90. package/dist/ai/helpers/inertia/useTableContext.ts +5 -2
  91. package/dist/ai/helpers/inertia/utils.ts +14 -0
  92. package/dist/ai/index.md +1 -0
  93. package/dist/ai/manifest/common.json +0 -1
  94. package/dist/ai/manifest/components/BbAlert.json +7 -2
  95. package/dist/ai/manifest/components/BbBadge.json +13 -4
  96. package/dist/ai/manifest/components/BbBadge.tree.json +2 -0
  97. package/dist/ai/manifest/components/BbBadgeButton.json +4 -2
  98. package/dist/ai/manifest/components/BbBaseButton.json +4 -2
  99. package/dist/ai/manifest/components/BbBreadcrumbs.tree.json +1 -1
  100. package/dist/ai/manifest/components/BbButton.json +14 -3
  101. package/dist/ai/manifest/components/BbButton.tree.json +5 -1
  102. package/dist/ai/manifest/components/BbCheckboxGroup.json +13 -8
  103. package/dist/ai/manifest/components/BbCheckboxGroup.tree.json +11 -1
  104. package/dist/ai/manifest/components/BbColorInput.json +18 -15
  105. package/dist/ai/manifest/components/BbColorPalette.json +1 -1
  106. package/dist/ai/manifest/components/BbConfirm.json +4 -2
  107. package/dist/ai/manifest/components/BbConfirm.tree.json +1 -1
  108. package/dist/ai/manifest/components/BbDatePicker.json +1 -1
  109. package/dist/ai/manifest/components/BbDatePickerInput.json +17 -14
  110. package/dist/ai/manifest/components/BbDialog.tree.json +2 -1
  111. package/dist/ai/manifest/components/BbDropdown.json +24 -19
  112. package/dist/ai/manifest/components/BbDropdown.tree.json +9 -2
  113. package/dist/ai/manifest/components/BbDropdownButton.json +33 -20
  114. package/dist/ai/manifest/components/BbDropdownButton.tree.json +2 -2
  115. package/dist/ai/manifest/components/BbForm.json +2 -2
  116. package/dist/ai/manifest/components/BbHost.tree.json +1 -1
  117. package/dist/ai/manifest/components/BbHoverCard.json +1 -1
  118. package/dist/ai/manifest/components/BbIndicator.json +8 -2
  119. package/dist/ai/manifest/components/BbNumberInput.json +5 -2
  120. package/dist/ai/manifest/components/BbOffCanvas.json +2 -2
  121. package/dist/ai/manifest/components/BbOffCanvas.tree.json +1 -1
  122. package/dist/ai/manifest/components/BbPopover.json +1 -1
  123. package/dist/ai/manifest/components/BbRadioGroup.json +17 -12
  124. package/dist/ai/manifest/components/BbRadioGroup.tree.json +8 -1
  125. package/dist/ai/manifest/components/BbSelect.json +21 -18
  126. package/dist/ai/manifest/components/BbSelect.tree.json +2 -2
  127. package/dist/ai/manifest/components/BbSelectPopover.json +10 -10
  128. package/dist/ai/manifest/components/BbSelectPopover.tree.json +3 -2
  129. package/dist/ai/manifest/components/BbSwitchGroup.json +1 -1
  130. package/dist/ai/manifest/components/BbSwitchGroup.tree.json +3 -1
  131. package/dist/ai/manifest/components/BbTable.tree.json +14 -1
  132. package/dist/ai/manifest/components/BbTabs.json +9 -6
  133. package/dist/ai/manifest/components/BbTabs.tree.json +1 -1
  134. package/dist/ai/manifest/components/BbTabsList.json +6 -3
  135. package/dist/ai/manifest/components/BbTag.json +19 -16
  136. package/dist/ai/manifest/components/BbTag.tree.json +1 -1
  137. package/dist/ai/manifest/components/BbTextInput.json +6 -3
  138. package/dist/ai/manifest/components/BbTextarea.json +6 -3
  139. package/dist/ai/manifest/components/BbTimePicker.json +1 -1
  140. package/dist/ai/manifest/components/BbTimePickerInput.json +10 -7
  141. package/dist/ai/manifest/components/BbToast.json +7 -2
  142. package/dist/ai/manifest/components/BbToast.tree.json +4 -2
  143. package/dist/ai/manifest/components/BbTooltip.json +6 -5
  144. package/dist/ai/manifest/components/ChipsBox.tree.json +1 -1
  145. package/dist/ai/manifest/components/CommonField.json +1 -1
  146. package/dist/ai/manifest/components/OptionsContainer.json +3 -1
  147. package/dist/ai/manifest/components/OptionsContainer.tree.json +38 -0
  148. package/dist/ai/manifest/index.json +3 -3
  149. package/dist/ai/manifest/meta.json +5 -3
  150. package/dist/ai/manifest/types.advanced.json +5 -2
  151. package/dist/ai/manifest/types.api.json +9 -7
  152. package/dist/ai/recipes/inertia/approvals-inbox.md +1 -1
  153. package/dist/ai/recipes/inertia/inline-edit-workspace.md +1 -1
  154. package/dist/ai/recipes/inertia/layout-scaffold.md +19 -6
  155. package/dist/ai/recipes/inertia/ownership-atlas.md +1 -1
  156. package/dist/ai/recipes/inertia/records-workspace.md +50 -14
  157. package/dist/ai/recipes/inertia/upload-center.md +1 -1
  158. package/dist/ai/recipes/nuxt/layout-scaffold.md +19 -6
  159. package/dist/ai/recipes/nuxt/records-workspace.md +42 -12
  160. package/dist/ai/recipes/vue/layout-scaffold.md +19 -6
  161. package/dist/ai/recipes/vue/records-workspace.md +42 -12
  162. package/dist/ai/source/BbAlert.md +94 -76
  163. package/dist/ai/source/BbBadge.md +174 -72
  164. package/dist/ai/source/BbBadgeButton.md +130 -65
  165. package/dist/ai/source/BbBaseButton.md +46 -124
  166. package/dist/ai/source/BbBaseCheckboxIcon.md +38 -0
  167. package/dist/ai/source/BbBaseRadioIcon.md +18 -0
  168. package/dist/ai/source/BbBaseSwitchIcon.md +51 -0
  169. package/dist/ai/source/BbButton.md +153 -36
  170. package/dist/ai/source/BbCheckboxGroup.md +142 -18
  171. package/dist/ai/source/BbColorInput.md +240 -204
  172. package/dist/ai/source/BbColorPalette.md +7 -4
  173. package/dist/ai/source/BbConfirm.md +34 -11
  174. package/dist/ai/source/BbConfirmPortal.md +24 -9
  175. package/dist/ai/source/BbDatePicker.md +11 -7
  176. package/dist/ai/source/BbDatePickerInput.md +306 -269
  177. package/dist/ai/source/BbDialog.md +49 -14
  178. package/dist/ai/source/BbDropdown.md +314 -197
  179. package/dist/ai/source/BbDropdownButton.md +197 -31
  180. package/dist/ai/source/BbDropdownGroup.md +274 -176
  181. package/dist/ai/source/BbForm.md +50 -6
  182. package/dist/ai/source/BbHoverCard.md +12 -5
  183. package/dist/ai/source/BbIcon.md +4 -3
  184. package/dist/ai/source/BbIndicator.md +73 -52
  185. package/dist/ai/source/BbNumberInput.md +293 -257
  186. package/dist/ai/source/BbOffCanvas.md +55 -29
  187. package/dist/ai/source/BbPopover.md +14 -10
  188. package/dist/ai/source/BbRadioGroup.md +413 -297
  189. package/dist/ai/source/BbSelect.md +549 -435
  190. package/dist/ai/source/BbSelectPopover.md +153 -34
  191. package/dist/ai/source/BbSwitchGroup.md +70 -10
  192. package/dist/ai/source/BbTable.md +369 -37
  193. package/dist/ai/source/BbTabs.md +115 -39
  194. package/dist/ai/source/BbTabsList.md +106 -38
  195. package/dist/ai/source/BbTabsPanels.md +96 -36
  196. package/dist/ai/source/BbTabsRoot.md +96 -36
  197. package/dist/ai/source/BbTag.md +267 -233
  198. package/dist/ai/source/BbTextInput.md +261 -225
  199. package/dist/ai/source/BbTextarea.md +251 -215
  200. package/dist/ai/source/BbTimePicker.md +11 -7
  201. package/dist/ai/source/BbTimePickerInput.md +257 -220
  202. package/dist/ai/source/BbToast.md +73 -32
  203. package/dist/ai/source/BbToastPortal.md +65 -30
  204. package/dist/ai/source/BbTooltip.md +148 -113
  205. package/dist/ai/source/CommonPopover.md +6 -1
  206. package/dist/ai/source/FlatListBox.md +19 -9
  207. package/dist/ai/source/GroupedListBox.md +19 -9
  208. package/dist/ai/source/OptionsContainer.md +25 -9
  209. package/dist/components/BbAlert/BbAlert.vue_vue_type_script_setup_true_lang.js +61 -36
  210. package/dist/components/BbAlert/types.d.ts +9 -5
  211. package/dist/components/BbAlert/types.js +8 -3
  212. package/dist/components/BbBadge/BadgeBodyContent.vue.d.ts +3 -3
  213. package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +26 -17
  214. package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +103 -50
  215. package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +20 -15
  216. package/dist/components/BbBadge/badgeButtonContext.d.ts +12 -1
  217. package/dist/components/BbBadge/types.d.ts +45 -15
  218. package/dist/components/BbBadge/types.js +12 -3
  219. package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +89 -126
  220. package/dist/components/BbBaseButton/types.d.ts +23 -4
  221. package/dist/components/BbBaseButton/types.js +7 -1
  222. package/dist/components/BbBaseButton/useLinkState.d.ts +41 -0
  223. package/dist/components/BbBaseButton/useLinkState.js +70 -0
  224. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +130 -74
  225. package/dist/components/BbButton/types.d.ts +50 -13
  226. package/dist/components/BbButton/types.js +10 -3
  227. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +148 -95
  228. package/dist/components/BbCheckboxGroup/types.d.ts +34 -11
  229. package/dist/components/BbCheckboxGroup/types.js +9 -4
  230. package/dist/components/BbCollapsible/BbCollapsible.vue.d.ts +1 -1
  231. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +134 -93
  232. package/dist/components/BbColorInput/types.d.ts +11 -4
  233. package/dist/components/BbColorInput/types.js +9 -3
  234. package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +82 -59
  235. package/dist/components/BbConfirm/types.d.ts +9 -4
  236. package/dist/components/BbConfirm/types.js +8 -3
  237. package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +1 -1
  238. package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +68 -67
  239. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +1 -1
  240. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +259 -215
  241. package/dist/components/BbDatePickerInput/types.d.ts +12 -5
  242. package/dist/components/BbDatePickerInput/types.js +9 -3
  243. package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +223 -219
  244. package/dist/components/BbDialog/useDialogStack.d.ts +1 -1
  245. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +104 -89
  246. package/dist/components/BbDropdown/BbDropdown.vue.d.ts +1 -0
  247. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +323 -285
  248. package/dist/components/BbDropdown/BbDropdownList.vue.d.ts +1 -0
  249. package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +411 -319
  250. package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +100 -98
  251. package/dist/components/BbDropdown/DropdownRow.vue.d.ts +4 -3
  252. package/dist/components/BbDropdown/DropdownRow.vue_vue_type_script_setup_true_lang.js +49 -28
  253. package/dist/components/BbDropdown/normalizeGroups.d.ts +6 -0
  254. package/dist/components/BbDropdown/normalizeGroups.js +21 -15
  255. package/dist/components/BbDropdown/types.d.ts +59 -12
  256. package/dist/components/BbDropdown/types.js +16 -3
  257. package/dist/components/BbDropdown/useDropdownContext.d.ts +6 -0
  258. package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +2 -1
  259. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +179 -68
  260. package/dist/components/BbDropdownButton/types.d.ts +44 -16
  261. package/dist/components/BbDropdownButton/types.js +28 -3
  262. package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +111 -89
  263. package/dist/components/BbForm/formSchema.d.ts +13 -0
  264. package/dist/components/BbHoverCard/BbHoverCard.vue_vue_type_script_setup_true_lang.js +100 -100
  265. package/dist/components/BbIndicator/BbIndicator.vue_vue_type_script_setup_true_lang.js +40 -25
  266. package/dist/components/BbIndicator/types.d.ts +9 -5
  267. package/dist/components/BbIndicator/types.js +8 -3
  268. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +243 -202
  269. package/dist/components/BbNumberInput/types.d.ts +12 -5
  270. package/dist/components/BbNumberInput/types.js +9 -3
  271. package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +1 -1
  272. package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +401 -399
  273. package/dist/components/BbOffCanvas/types.d.ts +6 -2
  274. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +81 -80
  275. package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +158 -105
  276. package/dist/components/BbRadioGroup/types.d.ts +21 -7
  277. package/dist/components/BbRadioGroup/types.js +9 -4
  278. package/dist/components/BbSelect/BbSelect.vue.d.ts +4 -3
  279. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +181 -137
  280. package/dist/components/BbSelect/types.d.ts +36 -22
  281. package/dist/components/BbSelect/types.js +22 -3
  282. package/dist/components/BbSelectPopover/BbSelectPopover.vue.d.ts +4 -4
  283. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +600 -577
  284. package/dist/components/BbSelectPopover/knownItems.d.ts +5 -0
  285. package/dist/components/BbSelectPopover/types.d.ts +46 -12
  286. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.d.ts +1 -1
  287. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +2 -2
  288. package/dist/components/BbSwitchGroup/types.d.ts +14 -4
  289. package/dist/components/BbSwitchGroup/types.js +8 -3
  290. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +1102 -995
  291. package/dist/components/BbTable/estimatedFloors.golden.d.ts +25 -0
  292. package/dist/components/BbTable/measuredFloors.d.ts +46 -0
  293. package/dist/components/BbTable/measuredFloors.js +322 -0
  294. package/dist/components/BbTable/measuredFloorsTestKit.d.ts +27 -0
  295. package/dist/components/BbTable/textRuler.d.ts +71 -0
  296. package/dist/components/BbTable/textRuler.js +121 -0
  297. package/dist/components/BbTable/utils.d.ts +113 -6
  298. package/dist/components/BbTable/utils.js +118 -65
  299. package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +53 -35
  300. package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +62 -45
  301. package/dist/components/BbTabs/types.d.ts +26 -11
  302. package/dist/components/BbTabs/types.js +23 -8
  303. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +205 -164
  304. package/dist/components/BbTag/types.d.ts +11 -4
  305. package/dist/components/BbTag/types.js +9 -3
  306. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +98 -57
  307. package/dist/components/BbTextInput/types.d.ts +12 -5
  308. package/dist/components/BbTextInput/types.js +9 -3
  309. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +137 -96
  310. package/dist/components/BbTextarea/types.d.ts +12 -5
  311. package/dist/components/BbTextarea/types.js +9 -3
  312. package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +105 -104
  313. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +241 -197
  314. package/dist/components/BbTimePickerInput/types.d.ts +12 -5
  315. package/dist/components/BbTimePickerInput/types.js +9 -3
  316. package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +74 -32
  317. package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +47 -47
  318. package/dist/components/BbToast/types.d.ts +10 -5
  319. package/dist/components/BbToast/types.js +18 -3
  320. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +85 -71
  321. package/dist/components/BbTooltip/types.d.ts +13 -8
  322. package/dist/components/BbTooltip/types.js +8 -3
  323. package/dist/components/CommonField/CommonField.vue.d.ts +1 -1
  324. package/dist/components/CommonPopover/CommonPopover.vue.d.ts +1 -1
  325. package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +69 -69
  326. package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +53 -50
  327. package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +146 -143
  328. package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +7 -2
  329. package/dist/components/OptionsContainer/types.d.ts +14 -3
  330. package/dist/composables/useBbConfig.d.ts +1 -0
  331. package/dist/composables/useBbConfig.js +11 -7
  332. package/dist/composables/useBbFormContext.d.ts +4 -3
  333. package/dist/composables/useBbTabsContext.js +99 -85
  334. package/dist/composables/useChoiceIndicator.d.ts +58 -0
  335. package/dist/composables/useChoiceIndicator.js +197 -0
  336. package/dist/composables/useConfirm.d.ts +4 -4
  337. package/dist/composables/usePassthrough.d.ts +54 -1
  338. package/dist/composables/usePassthrough.js +100 -71
  339. package/dist/directives/bbTooltip.d.ts +12 -6
  340. package/dist/directives/createPopoverDirective.js +1 -1
  341. package/dist/index.d.ts +3 -1
  342. package/dist/llms-full.txt +3467 -801
  343. package/dist/llms-medium.txt +71 -53
  344. package/dist/llms.txt +2 -1
  345. package/dist/passthrough-deduper.js +6 -3
  346. package/dist/project-dts.d.ts +24 -0
  347. package/dist/project-dts.js +43 -17
  348. package/dist/styles.css +2 -2
  349. package/dist/types/AlertVariant.d.ts +14 -0
  350. package/dist/types/AlertVariant.js +9 -0
  351. package/dist/types/BadgeVariant.d.ts +14 -0
  352. package/dist/types/BadgeVariant.js +9 -0
  353. package/dist/types/ButtonVariant.d.ts +16 -0
  354. package/dist/types/ButtonVariant.js +11 -0
  355. package/dist/types/CheckboxVariant.d.ts +38 -0
  356. package/dist/types/CheckboxVariant.js +4 -0
  357. package/dist/types/CommonProps.d.ts +4 -3
  358. package/dist/types/Config.d.ts +7 -0
  359. package/dist/types/ConfirmVariant.d.ts +12 -0
  360. package/dist/types/ConfirmVariant.js +4 -0
  361. package/dist/types/DropdownItemVariant.d.ts +12 -0
  362. package/dist/types/DropdownItemVariant.js +4 -0
  363. package/dist/types/IndicatorVariant.d.ts +15 -0
  364. package/dist/types/IndicatorVariant.js +10 -0
  365. package/dist/types/InputVariant.d.ts +13 -0
  366. package/dist/types/InputVariant.js +8 -0
  367. package/dist/types/RadioVariant.d.ts +38 -0
  368. package/dist/types/RadioVariant.js +4 -0
  369. package/dist/types/TabsVariant.d.ts +13 -0
  370. package/dist/types/TabsVariant.js +8 -0
  371. package/dist/types/ToastVariant.d.ts +15 -0
  372. package/dist/types/ToastVariant.js +10 -0
  373. package/dist/types/TooltipVariant.d.ts +12 -0
  374. package/dist/types/TooltipVariant.js +4 -0
  375. package/dist/types/passthrough.d.ts +83 -15
  376. package/dist/types/passthrough.js +2 -2
  377. package/dist/types/ptComponentMap.d.ts +35 -23
  378. package/dist/utilities/functions/extractDomContainer.d.ts +20 -1
  379. package/dist/utilities/functions/extractDomContainer.js +8 -3
  380. package/dist/utils/focusVisibility.d.ts +6 -0
  381. package/dist/utils/focusVisibility.js +4 -1
  382. package/dist/utils/passthroughDeduper.d.ts +14 -0
  383. package/dist/utils/versionCheck.js +1 -1
  384. package/dist/vite-plugin.d.ts +64 -7
  385. package/dist/vite.js +385 -259
  386. package/llms.txt +2 -1
  387. package/package.json +5 -4
  388. package/scripts/lib/adoption-checklist.json +312 -0
  389. package/scripts/lib/eslint-plugin.d.ts +13 -0
  390. package/scripts/lib/eslint-plugin.mjs +75 -11
  391. package/scripts/lib/helpers-add.mjs +26 -2
  392. package/scripts/lib/idiom-scan.mjs +65 -0
  393. package/scripts/lib/mcp-config.mjs +203 -9
  394. package/scripts/lib/migrate-fix.mjs +42 -1
  395. package/scripts/lib/project-variant-dts.mjs +18 -0
  396. package/scripts/lib/validate-bb-markup.mjs +99 -2
@@ -141,6 +141,7 @@ import {
141
141
  formControlPtActive,
142
142
  TEXT_CONTROL_NATIVE_ATTRS,
143
143
  usePassthrough,
144
+ variantPt,
144
145
  } from '@/composables/usePassthrough';
145
146
  import { isNotEmpty } from '@/utilities/functions/isNotEmpty';
146
147
  import {
@@ -150,7 +151,11 @@ import {
150
151
  type BbTextareaSlots,
151
152
  } from './types';
152
153
 
153
- defineOptions({ inheritAttrs: false });
154
+ defineOptions({
155
+ // An app's own variants as declared `pt:<part>:<name>` props (Q76.7).
156
+ mixins: [variantPt(BB_TEXTAREA_PT)],
157
+ inheritAttrs: false,
158
+ });
154
159
  const declaredProps = defineProps<BbTextareaProps<E>>();
155
160
 
156
161
  const declaredEmit = defineEmits<BbTextareaEvents<E>>();
@@ -222,6 +227,11 @@ const passthrough = usePassthrough({
222
227
  nearLimit: () => characterCounter.value?.state === 'near',
223
228
  atLimit: () => characterCounter.value?.state === 'limit',
224
229
  },
230
+ variant: {
231
+ ...BB_TEXTAREA_PT.variant,
232
+ // CommonFieldInput's default.
233
+ current: () => props.variant ?? 'outline',
234
+ },
225
235
  });
226
236
 
227
237
  // `rows` + `auto-grow` are compatible: `rows` seeds the starting/minimum height
@@ -394,7 +404,12 @@ function resetTextareaHeight() {
394
404
 
395
405
  ```ts
396
406
  import type { Responsive } from '@/types/ResponsiveSize';
397
- import type { InputVariantType } from '@/types/InputVariant';
407
+ import {
408
+ INPUT_VARIANTS,
409
+ type InputVariantBuiltIn,
410
+ type InputVariantRegistry,
411
+ type InputVariantType,
412
+ } from '@/types/InputVariant';
398
413
  import type { HTMLAttributes, InputHTMLAttributes } from 'vue';
399
414
  import type { FieldCrossAlign, FieldLayout } from '@/types/FieldLayout';
400
415
  import type { IconType } from '@/types/Icon';
@@ -408,6 +423,7 @@ import {
408
423
  type PtMap,
409
424
  type PtValue,
410
425
  type TextControlPtPart,
426
+ type PtVariantAttrs,
411
427
  } from '@/types/passthrough';
412
428
  import type { FormFieldProps } from '@/composables/useFormBinding';
413
429
  import type {
@@ -438,7 +454,19 @@ export const BB_TEXTAREA_PT = {
438
454
  ...COUNTER_PT_STATES,
439
455
  ...FORM_CONTROL_PT_STATES.slice(1),
440
456
  ],
457
+ // The input `variant` is a state on the field's parts (Q76.7), below
458
+ // the real states; a picker's panel and rows are not the field's.
459
+ variant: {
460
+ names: INPUT_VARIANTS,
461
+ option: 'inputVariants',
462
+ parts: TEXT_CONTROL_PT_PARTS,
463
+ },
441
464
  } as const satisfies {
465
+ variant: {
466
+ names: readonly InputVariantBuiltIn[];
467
+ option: string;
468
+ parts: readonly TextControlPtPart[];
469
+ };
442
470
  parts: readonly BbTextareaPtPart[];
443
471
  states: readonly BbTextareaPtState[];
444
472
  };
@@ -454,219 +482,227 @@ type AppPolicy = RegisteredNullValue<'BbTextarea'>;
454
482
  export type BbTextareaProps<E extends NullValuePolicy = AppPolicy> = {
455
483
  [K in
456
484
  | `pt:${BbTextareaPtPart}`
457
- | `pt:${BbTextareaPtPart}:${BbTextareaPtState}`]?: PtValue;
458
- } & {
459
- /**
460
- * Passthrough, object form: `{ box: '…', 'box:errors': '…' }` — the same
461
- * keys as the `pt:*` attributes without the prefix. See the `pt:<part>` row.
462
- */
463
- pt?: PtMap<BbTextareaPtPart, BbTextareaPtState>;
464
- /**
465
- * Name of the icon to be added at the end of the input.
466
- */
467
-
468
- 'append:icon'?: IconType;
469
-
470
- /**
471
- * Guides to the browser as to the type of information expected in the field.
472
- */
473
- autocomplete?: InputHTMLAttributes['autocomplete'];
474
-
475
- /**
476
- * Focuses the field when it mounts (a dialog already open included), unless the user is typing in another field.
477
- */
478
- autofocus?: InputHTMLAttributes['autofocus'];
479
-
480
- /**
481
- * Expands the textarea to match its content. Empty, it is one BbTextInput
482
- * tall (text on the same line); it never shrinks below that, or below `rows`.
483
- */
484
- autoGrow?: boolean;
485
-
486
- /**
487
- * Displays a clear button when the input has a value and is being interacted with.
488
- */
489
- clearable?: boolean;
490
-
491
- /**
492
- * Shows a character count at the end of the hint row: `42`, or `42 / 140`
493
- * with the native `maxlength` (which also stops input). It brightens from
494
- * 90 % and takes the warning colour at the limit; screen readers hear it
495
- * only when it crosses 90 % or the limit.
496
- */
497
- counter?: boolean;
498
-
499
- /**
500
- * Compact density: the field uses the `-compact` twins of `--bb-input-h`,
501
- * `--bb-input-py` and `--bb-label-spacing-y`, so a `--bb-input-h` set on
502
- * the component is ignored while it is on. Size a compact field with
503
- * `--bb-input-h-compact` (and `--bb-input-py-compact`).
504
- */
505
- compact?: boolean;
506
-
507
- /**
508
- * The field box's look, with `BbButton`'s names and tokens. Colours only,
509
- * so a form never reflows; `'ghost'` has no border in any state, `'none'`
510
- * no look at all (you own hover, focus and the states). Register more with
511
- * the plugin's `inputVariants`.
512
- *
513
- * @defaultValue `'outline'`
514
- */
515
- variant?: InputVariantType;
516
-
517
- /**
518
- * Text between the label and the input. Unlike the hint it is always
519
- * visible; it joins the input's `aria-describedby` after any `errors` /
520
- * `warnings`, before the `hint`.
521
- */
522
- description?: string;
523
-
524
- /**
525
- * How label and input sit together: `'vertical'`, `'horizontal'` (50/50),
526
- * `'auto'`, `'label-fill'`, `'input-fill'`, a ratio like `'xx xxxxx'`, or a
527
- * per-breakpoint map (`{ default: 'vertical', md: 'xx xxxxx' }`).
528
- */
529
- layout?: Responsive<FieldLayout>;
530
-
531
- /**
532
- * Vertical position of the label block in a side-by-side row; not
533
- * `labelPosition`, the horizontal one. Omitted, the label's first line
534
- * meets the control's.
535
- */
536
- labelAlign?: FieldCrossAlign;
537
-
538
- /**
539
- * Vertical position of the control in a side-by-side row; not
540
- * `inputPosition`, the horizontal one. Omitted, the control's first line
541
- * meets the label's.
542
- */
543
- inputAlign?: FieldCrossAlign;
544
-
545
- /**
546
- * Disables the component.
547
- */
548
- disabled?: boolean;
549
-
550
- /**
551
- * Error messages under the field, a string or array, in an
552
- * `aria-live="polite"` region and first in the control's
553
- * `aria-describedby`, so they are re-read when it regains focus.
554
- */
555
- errors?: string | string[];
556
-
557
- /**
558
- * Define if the component should be in an error state.
559
- * It usually attaches a CSS class for styling purposes.
560
- */
561
- hasErrors?: boolean;
562
-
563
- /**
564
- * Warning messages under the field, a string or array: amber, in their own
565
- * `aria-live` region and in the control's `aria-describedby` after the
566
- * errors. Non-empty turns on the warning state; errors win when both are
567
- * set.
568
- */
569
- warnings?: string | string[];
570
-
571
- /**
572
- * Define if the component should be in a warning state.
573
- * Same chrome as errors with `--bb-warn`; errors take priority.
574
- */
575
- hasWarnings?: boolean;
576
-
577
- /**
578
- * Visually hides the label of the input while maintaining accessibility.
579
- */
580
- hideLabel?: boolean;
581
-
582
- /**
583
- * Text box to be displayed near the input, usually to indicate instructions.
584
- */
585
- hint?: string;
586
-
587
- /**
588
- * The `id` of the native control; the label's `for` and the description
589
- * and message ids derive from it. Generated when omitted.
590
- */
591
- id?: HTMLAttributes['id'];
592
-
593
- /**
594
- * Text content of the label of the element.
595
- */
596
- label: string;
597
-
598
- /**
599
- * Label rendering mode. `'outside'` (default) sits the label above/beside the
600
- * field; `'floating'`/`'inside'` overlay it, like the other text inputs.
601
- */
602
- labelMode?: 'outside' | 'floating' | 'inside';
603
-
604
- /**
605
- * Sets the text alignment of the label.
606
- */
607
- labelPosition?: 'left' | 'center' | 'right';
608
-
609
- /**
610
- * Sets the component in a loading state, usually triggering some visual styles.
611
- */
612
- loading?: boolean;
613
-
614
- /**
615
- * Used by v-model.
616
- */
617
- modelValue?: string | null;
618
-
619
- /**
620
- * Defines the name of the input.
621
- */
622
- name?: InputHTMLAttributes['name'];
623
-
624
- /**
625
- * What the field emits once the user empties it (typing it empty, the
626
- * clear button): `'null'` emits `null`, `'string'` emits `''`.
627
- * Unset, the app's `formControls.textareaNullValue` applies (`'null'` by
628
- * default). Also types the `update:modelValue` payload: with `'string'`
629
- * it is `string`.
630
- */
631
- nullValue?: E;
632
-
633
- /**
634
- * Keeps the hint displayed.
635
- */
636
- persistentHint?: boolean;
637
-
638
- /**
639
- * Text shown while the field is empty.
640
- */
641
- placeholder?: InputHTMLAttributes['placeholder'];
642
-
643
- /**
644
- * Name of the icon to be added at the start of the input.
645
- */
646
-
647
- 'prepend:icon'?: IconType;
648
-
649
- /**
650
- * Sets the input in a readonly state.
651
- */
652
- readonly?: boolean;
653
-
654
- /**
655
- * Sets the input as required. Outside a BbForm it forwards to the native textarea; inside one it only marks the field (asterisk, aria-required) and nothing enforces it: use `rules="required"` or the form schema.
656
- */
657
- required?: boolean;
658
-
659
- /**
660
- * Reverses the layout. Applicable in every direction the order of the label and
661
- * the input is swapped.
662
- */
663
- reverse?: boolean;
664
-
665
- /**
666
- * Sets the number of visible text lines for the control.
667
- */
668
- rows?: string | number;
669
- } & FormFieldProps<string | null>;
485
+ | `pt:${BbTextareaPtPart}:${BbTextareaPtState}`
486
+ | `pt:${TextControlPtPart}:${InputVariantBuiltIn}`]?: PtValue;
487
+ } & /* @vue-ignore */ PtVariantAttrs<
488
+ TextControlPtPart,
489
+ keyof InputVariantRegistry
490
+ > & {
491
+ /**
492
+ * Passthrough, object form: `{ box: '…', 'box:errors': '…' }` — the same
493
+ * keys as the `pt:*` attributes without the prefix. See the `pt:<part>` row.
494
+ */
495
+ /* eslint-disable @typescript-eslint/consistent-indexed-object-style -- mapped, never Record (T23) */
496
+ pt?: PtMap<BbTextareaPtPart, BbTextareaPtState> & {
497
+ [K in `${TextControlPtPart}:${InputVariantBuiltIn | keyof InputVariantRegistry}`]?: PtValue;
498
+ };
499
+ /* eslint-enable @typescript-eslint/consistent-indexed-object-style */
500
+ /**
501
+ * Name of the icon to be added at the end of the input.
502
+ */
503
+
504
+ 'append:icon'?: IconType;
505
+
506
+ /**
507
+ * Guides to the browser as to the type of information expected in the field.
508
+ */
509
+ autocomplete?: InputHTMLAttributes['autocomplete'];
510
+
511
+ /**
512
+ * Focuses the field when it mounts (a dialog already open included), unless the user is typing in another field.
513
+ */
514
+ autofocus?: InputHTMLAttributes['autofocus'];
515
+
516
+ /**
517
+ * Expands the textarea to match its content. Empty, it is one BbTextInput
518
+ * tall (text on the same line); it never shrinks below that, or below `rows`.
519
+ */
520
+ autoGrow?: boolean;
521
+
522
+ /**
523
+ * Displays a clear button when the input has a value and is being interacted with.
524
+ */
525
+ clearable?: boolean;
526
+
527
+ /**
528
+ * Shows a character count at the end of the hint row: `42`, or `42 / 140`
529
+ * with the native `maxlength` (which also stops input). It brightens from
530
+ * 90 % and takes the warning colour at the limit; screen readers hear it
531
+ * only when it crosses 90 % or the limit.
532
+ */
533
+ counter?: boolean;
534
+
535
+ /**
536
+ * Compact density: the field uses the `-compact` twins of `--bb-input-h`,
537
+ * `--bb-input-py` and `--bb-label-spacing-y`, so a `--bb-input-h` set on
538
+ * the component is ignored while it is on. Size a compact field with
539
+ * `--bb-input-h-compact` (and `--bb-input-py-compact`).
540
+ */
541
+ compact?: boolean;
542
+
543
+ /**
544
+ * The field box's look, with `BbButton`'s names and tokens. Colours only,
545
+ * so a form never reflows; `'ghost'` has no border in any state, `'none'`
546
+ * no look at all (you own hover, focus and the states). Register more with
547
+ * the plugin's `inputVariants`.
548
+ *
549
+ * @defaultValue `'outline'`
550
+ */
551
+ variant?: InputVariantType;
552
+
553
+ /**
554
+ * Text between the label and the input. Unlike the hint it is always
555
+ * visible; it joins the input's `aria-describedby` after any `errors` /
556
+ * `warnings`, before the `hint`.
557
+ */
558
+ description?: string;
559
+
560
+ /**
561
+ * How label and input sit together: `'vertical'`, `'horizontal'` (50/50),
562
+ * `'auto'`, `'label-fill'`, `'input-fill'`, a ratio like `'xx xxxxx'`, or a
563
+ * per-breakpoint map (`{ default: 'vertical', md: 'xx xxxxx' }`).
564
+ */
565
+ layout?: Responsive<FieldLayout>;
566
+
567
+ /**
568
+ * Vertical position of the label block in a side-by-side row; not
569
+ * `labelPosition`, the horizontal one. Omitted, the label's first line
570
+ * meets the control's.
571
+ */
572
+ labelAlign?: FieldCrossAlign;
573
+
574
+ /**
575
+ * Vertical position of the control in a side-by-side row; not
576
+ * `inputPosition`, the horizontal one. Omitted, the control's first line
577
+ * meets the label's.
578
+ */
579
+ inputAlign?: FieldCrossAlign;
580
+
581
+ /**
582
+ * Disables the component.
583
+ */
584
+ disabled?: boolean;
585
+
586
+ /**
587
+ * Error messages under the field, a string or array, in an
588
+ * `aria-live="polite"` region and first in the control's
589
+ * `aria-describedby`, so they are re-read when it regains focus.
590
+ */
591
+ errors?: string | string[];
592
+
593
+ /**
594
+ * Define if the component should be in an error state.
595
+ * It usually attaches a CSS class for styling purposes.
596
+ */
597
+ hasErrors?: boolean;
598
+
599
+ /**
600
+ * Warning messages under the field, a string or array: amber, in their own
601
+ * `aria-live` region and in the control's `aria-describedby` after the
602
+ * errors. Non-empty turns on the warning state; errors win when both are
603
+ * set.
604
+ */
605
+ warnings?: string | string[];
606
+
607
+ /**
608
+ * Define if the component should be in a warning state.
609
+ * Same chrome as errors with `--bb-warn`; errors take priority.
610
+ */
611
+ hasWarnings?: boolean;
612
+
613
+ /**
614
+ * Visually hides the label of the input while maintaining accessibility.
615
+ */
616
+ hideLabel?: boolean;
617
+
618
+ /**
619
+ * Text box to be displayed near the input, usually to indicate instructions.
620
+ */
621
+ hint?: string;
622
+
623
+ /**
624
+ * The `id` of the native control; the label's `for` and the description
625
+ * and message ids derive from it. Generated when omitted.
626
+ */
627
+ id?: HTMLAttributes['id'];
628
+
629
+ /**
630
+ * Text content of the label of the element.
631
+ */
632
+ label: string;
633
+
634
+ /**
635
+ * Label rendering mode. `'outside'` (default) sits the label above/beside the
636
+ * field; `'floating'`/`'inside'` overlay it, like the other text inputs.
637
+ */
638
+ labelMode?: 'outside' | 'floating' | 'inside';
639
+
640
+ /**
641
+ * Sets the text alignment of the label.
642
+ */
643
+ labelPosition?: 'left' | 'center' | 'right';
644
+
645
+ /**
646
+ * Sets the component in a loading state, usually triggering some visual styles.
647
+ */
648
+ loading?: boolean;
649
+
650
+ /**
651
+ * Used by v-model.
652
+ */
653
+ modelValue?: string | null;
654
+
655
+ /**
656
+ * Defines the name of the input.
657
+ */
658
+ name?: InputHTMLAttributes['name'];
659
+
660
+ /**
661
+ * What the field emits once the user empties it (typing it empty, the
662
+ * clear button): `'null'` emits `null`, `'string'` emits `''`.
663
+ * Unset, the app's `formControls.textareaNullValue` applies (`'null'` by
664
+ * default). Also types the `update:modelValue` payload: with `'string'`
665
+ * it is `string`.
666
+ */
667
+ nullValue?: E;
668
+
669
+ /**
670
+ * Keeps the hint displayed.
671
+ */
672
+ persistentHint?: boolean;
673
+
674
+ /**
675
+ * Text shown while the field is empty.
676
+ */
677
+ placeholder?: InputHTMLAttributes['placeholder'];
678
+
679
+ /**
680
+ * Name of the icon to be added at the start of the input.
681
+ */
682
+
683
+ 'prepend:icon'?: IconType;
684
+
685
+ /**
686
+ * Sets the input in a readonly state.
687
+ */
688
+ readonly?: boolean;
689
+
690
+ /**
691
+ * Sets the input as required. Outside a BbForm it forwards to the native textarea; inside one it only marks the field (asterisk, aria-required) and nothing enforces it: use `rules="required"` or the form schema.
692
+ */
693
+ required?: boolean;
694
+
695
+ /**
696
+ * Reverses the layout. Applicable in every direction the order of the label and
697
+ * the input is swapped.
698
+ */
699
+ reverse?: boolean;
700
+
701
+ /**
702
+ * Sets the number of visible text lines for the control.
703
+ */
704
+ rows?: string | number;
705
+ } & FormFieldProps<string | null>;
670
706
 
671
707
  export type BbTextareaEvents<E extends NullValuePolicy = AppPolicy> = {
672
708
  /**
@@ -138,7 +138,10 @@ import {
138
138
  } from 'vue';
139
139
  import { useId } from '@/composables/useId';
140
140
  import { createReusableTemplate } from '@vueuse/core';
141
- import { extractDomContainer } from '@/utilities/functions/extractDomContainer';
141
+ import {
142
+ extractDomContainer,
143
+ type DomHost,
144
+ } from '@/utilities/functions/extractDomContainer';
142
145
  import { useLocale } from '@/composables/useLocale';
143
146
  import { useLogger } from '@/composables/useLogger';
144
147
  import { useEscapeStackEntry } from '@/composables/useEscapeStackEntry';
@@ -158,6 +161,7 @@ import type {
158
161
  } from './types';
159
162
  import { BB_TIME_PICKER_PT } from './types';
160
163
  import { usePassthrough } from '@/composables/usePassthrough';
164
+ import { firstFocusableMatch } from '@/utils/focusVisibility';
161
165
  import { withoutPt } from '@/utils/passthrough';
162
166
  export type {
163
167
  BbTimePickerProps,
@@ -284,8 +288,8 @@ const rangeGroupLabel = computed(
284
288
 
285
289
  // ---- Activator / anchor plumbing (mirrors BbDatePicker) -------------------------
286
290
 
287
- const activatorEl = ref<HTMLElement | undefined>();
288
- const anchorEl = ref<HTMLElement | undefined>();
291
+ const activatorEl = ref<DomHost | undefined>();
292
+ const anchorEl = ref<DomHost | undefined>();
289
293
  const hasExternalActivator = computed(() => props.activator != null);
290
294
 
291
295
  const setActivatorRef = (reference: unknown) => {
@@ -345,10 +349,10 @@ watch(isOpen, async (val) => {
345
349
  document.addEventListener('click', onClickDocument, { passive: true });
346
350
  }
347
351
  await nextTick();
348
- document
349
- .getElementById(panelId)
350
- ?.querySelector<HTMLElement>('[tabindex="0"]')
351
- ?.focus();
352
+ firstFocusableMatch(
353
+ document.getElementById(panelId),
354
+ '[tabindex="0"]'
355
+ )?.focus();
352
356
  } else {
353
357
  document.removeEventListener('click', onClickDocument);
354
358
  previousFocus?.focus();