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

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 (377) 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 +416 -6
  47. package/dist/ai/components.json +50 -48
  48. package/dist/ai/composables/useConfirm.md +39 -1
  49. package/dist/ai/design-tokens.json +6 -6
  50. package/dist/ai/guides/agent-contract.md +2 -2
  51. package/dist/ai/guides/ai-router.md +24 -23
  52. package/dist/ai/guides/app-layout.md +5 -0
  53. package/dist/ai/guides/component-picker.md +9 -2
  54. package/dist/ai/guides/design-language.md +24 -24
  55. package/dist/ai/guides/design-tokens.md +15 -8
  56. package/dist/ai/guides/icons-policy.md +9 -2
  57. package/dist/ai/guides/inertia-helpers.md +79 -49
  58. package/dist/ai/guides/installation-and-plugin-setup.md +12 -2
  59. package/dist/ai/guides/migration/adoption-checklist.md +235 -0
  60. package/dist/ai/guides/migration/components/bb-checkbox-group.md +16 -15
  61. package/dist/ai/guides/migration/components/bb-dialog.md +9 -9
  62. package/dist/ai/guides/migration/components/bb-dropdown.md +7 -2
  63. package/dist/ai/guides/migration/components/bb-popover.md +4 -2
  64. package/dist/ai/guides/migration/components/bb-select.md +19 -0
  65. package/dist/ai/guides/migration/components/bb-table.md +1 -0
  66. package/dist/ai/guides/migration/components/bb-toast.md +4 -0
  67. package/dist/ai/guides/migration/components/bb-tooltip.md +15 -12
  68. package/dist/ai/guides/migration/components/use-confirm.md +25 -2
  69. package/dist/ai/guides/migration/v2-to-v3.md +163 -9
  70. package/dist/ai/guides/migration/v3-beta-css-classes.md +7 -3
  71. package/dist/ai/guides/options-items-playbook.md +2 -1
  72. package/dist/ai/guides/passthrough.md +147 -85
  73. package/dist/ai/guides/preset-components.md +140 -15
  74. package/dist/ai/helpers/definePreset.json +7 -0
  75. package/dist/ai/helpers/definePreset.ts +123 -11
  76. package/dist/ai/helpers/inertia/manifest.json +15 -9
  77. package/dist/ai/helpers/inertia/useConfirmOnRouteLeave.ts +4 -4
  78. package/dist/ai/helpers/inertia/usePaginatedResponseContext.ts +39 -24
  79. package/dist/ai/helpers/inertia/useRouteQuery.ts +10 -4
  80. package/dist/ai/index.md +1 -0
  81. package/dist/ai/manifest/common.json +0 -1
  82. package/dist/ai/manifest/components/BbAlert.json +7 -2
  83. package/dist/ai/manifest/components/BbBadge.json +13 -4
  84. package/dist/ai/manifest/components/BbBadge.tree.json +2 -0
  85. package/dist/ai/manifest/components/BbBadgeButton.json +4 -2
  86. package/dist/ai/manifest/components/BbBaseButton.json +4 -2
  87. package/dist/ai/manifest/components/BbBreadcrumbs.tree.json +1 -1
  88. package/dist/ai/manifest/components/BbButton.json +14 -3
  89. package/dist/ai/manifest/components/BbButton.tree.json +5 -1
  90. package/dist/ai/manifest/components/BbCheckboxGroup.json +13 -8
  91. package/dist/ai/manifest/components/BbCheckboxGroup.tree.json +11 -1
  92. package/dist/ai/manifest/components/BbColorInput.json +18 -15
  93. package/dist/ai/manifest/components/BbColorPalette.json +1 -1
  94. package/dist/ai/manifest/components/BbConfirm.json +4 -2
  95. package/dist/ai/manifest/components/BbConfirm.tree.json +1 -1
  96. package/dist/ai/manifest/components/BbDatePicker.json +1 -1
  97. package/dist/ai/manifest/components/BbDatePickerInput.json +17 -14
  98. package/dist/ai/manifest/components/BbDialog.tree.json +2 -1
  99. package/dist/ai/manifest/components/BbDropdown.json +24 -19
  100. package/dist/ai/manifest/components/BbDropdown.tree.json +9 -2
  101. package/dist/ai/manifest/components/BbDropdownButton.json +33 -20
  102. package/dist/ai/manifest/components/BbDropdownButton.tree.json +2 -2
  103. package/dist/ai/manifest/components/BbForm.json +2 -2
  104. package/dist/ai/manifest/components/BbHost.tree.json +1 -1
  105. package/dist/ai/manifest/components/BbHoverCard.json +1 -1
  106. package/dist/ai/manifest/components/BbIndicator.json +8 -2
  107. package/dist/ai/manifest/components/BbNumberInput.json +5 -2
  108. package/dist/ai/manifest/components/BbOffCanvas.json +2 -2
  109. package/dist/ai/manifest/components/BbOffCanvas.tree.json +1 -1
  110. package/dist/ai/manifest/components/BbPopover.json +1 -1
  111. package/dist/ai/manifest/components/BbRadioGroup.json +17 -12
  112. package/dist/ai/manifest/components/BbRadioGroup.tree.json +8 -1
  113. package/dist/ai/manifest/components/BbSelect.json +21 -18
  114. package/dist/ai/manifest/components/BbSelect.tree.json +2 -2
  115. package/dist/ai/manifest/components/BbSelectPopover.json +10 -10
  116. package/dist/ai/manifest/components/BbSelectPopover.tree.json +3 -2
  117. package/dist/ai/manifest/components/BbSwitchGroup.json +1 -1
  118. package/dist/ai/manifest/components/BbSwitchGroup.tree.json +3 -1
  119. package/dist/ai/manifest/components/BbTable.tree.json +14 -1
  120. package/dist/ai/manifest/components/BbTabs.json +9 -6
  121. package/dist/ai/manifest/components/BbTabs.tree.json +1 -1
  122. package/dist/ai/manifest/components/BbTabsList.json +6 -3
  123. package/dist/ai/manifest/components/BbTag.json +19 -16
  124. package/dist/ai/manifest/components/BbTag.tree.json +1 -1
  125. package/dist/ai/manifest/components/BbTextInput.json +6 -3
  126. package/dist/ai/manifest/components/BbTextarea.json +6 -3
  127. package/dist/ai/manifest/components/BbTimePicker.json +1 -1
  128. package/dist/ai/manifest/components/BbTimePickerInput.json +10 -7
  129. package/dist/ai/manifest/components/BbToast.json +7 -2
  130. package/dist/ai/manifest/components/BbToast.tree.json +4 -2
  131. package/dist/ai/manifest/components/BbTooltip.json +6 -5
  132. package/dist/ai/manifest/components/ChipsBox.tree.json +1 -1
  133. package/dist/ai/manifest/components/CommonField.json +1 -1
  134. package/dist/ai/manifest/components/OptionsContainer.json +3 -1
  135. package/dist/ai/manifest/components/OptionsContainer.tree.json +38 -0
  136. package/dist/ai/manifest/index.json +3 -3
  137. package/dist/ai/manifest/meta.json +5 -3
  138. package/dist/ai/manifest/types.advanced.json +5 -2
  139. package/dist/ai/manifest/types.api.json +9 -7
  140. package/dist/ai/recipes/inertia/layout-scaffold.md +19 -6
  141. package/dist/ai/recipes/inertia/records-workspace.md +49 -13
  142. package/dist/ai/recipes/nuxt/layout-scaffold.md +19 -6
  143. package/dist/ai/recipes/nuxt/records-workspace.md +42 -12
  144. package/dist/ai/recipes/vue/layout-scaffold.md +19 -6
  145. package/dist/ai/recipes/vue/records-workspace.md +42 -12
  146. package/dist/ai/source/BbAlert.md +94 -76
  147. package/dist/ai/source/BbBadge.md +174 -72
  148. package/dist/ai/source/BbBadgeButton.md +130 -65
  149. package/dist/ai/source/BbBaseButton.md +46 -124
  150. package/dist/ai/source/BbBaseCheckboxIcon.md +38 -0
  151. package/dist/ai/source/BbBaseRadioIcon.md +18 -0
  152. package/dist/ai/source/BbBaseSwitchIcon.md +51 -0
  153. package/dist/ai/source/BbButton.md +153 -36
  154. package/dist/ai/source/BbCheckboxGroup.md +142 -18
  155. package/dist/ai/source/BbColorInput.md +240 -204
  156. package/dist/ai/source/BbColorPalette.md +7 -4
  157. package/dist/ai/source/BbConfirm.md +34 -11
  158. package/dist/ai/source/BbConfirmPortal.md +24 -9
  159. package/dist/ai/source/BbDatePicker.md +11 -7
  160. package/dist/ai/source/BbDatePickerInput.md +306 -269
  161. package/dist/ai/source/BbDialog.md +49 -14
  162. package/dist/ai/source/BbDropdown.md +314 -197
  163. package/dist/ai/source/BbDropdownButton.md +197 -31
  164. package/dist/ai/source/BbDropdownGroup.md +274 -176
  165. package/dist/ai/source/BbForm.md +50 -6
  166. package/dist/ai/source/BbHoverCard.md +12 -5
  167. package/dist/ai/source/BbIcon.md +4 -3
  168. package/dist/ai/source/BbIndicator.md +73 -52
  169. package/dist/ai/source/BbNumberInput.md +293 -257
  170. package/dist/ai/source/BbOffCanvas.md +55 -29
  171. package/dist/ai/source/BbPopover.md +14 -10
  172. package/dist/ai/source/BbRadioGroup.md +413 -297
  173. package/dist/ai/source/BbSelect.md +549 -435
  174. package/dist/ai/source/BbSelectPopover.md +128 -33
  175. package/dist/ai/source/BbSwitchGroup.md +70 -10
  176. package/dist/ai/source/BbTable.md +369 -37
  177. package/dist/ai/source/BbTabs.md +115 -39
  178. package/dist/ai/source/BbTabsList.md +106 -38
  179. package/dist/ai/source/BbTabsPanels.md +96 -36
  180. package/dist/ai/source/BbTabsRoot.md +96 -36
  181. package/dist/ai/source/BbTag.md +267 -233
  182. package/dist/ai/source/BbTextInput.md +261 -225
  183. package/dist/ai/source/BbTextarea.md +251 -215
  184. package/dist/ai/source/BbTimePicker.md +11 -7
  185. package/dist/ai/source/BbTimePickerInput.md +257 -220
  186. package/dist/ai/source/BbToast.md +73 -32
  187. package/dist/ai/source/BbToastPortal.md +65 -30
  188. package/dist/ai/source/BbTooltip.md +148 -113
  189. package/dist/ai/source/CommonPopover.md +6 -1
  190. package/dist/ai/source/FlatListBox.md +19 -9
  191. package/dist/ai/source/GroupedListBox.md +19 -9
  192. package/dist/ai/source/OptionsContainer.md +25 -9
  193. package/dist/components/BbAlert/BbAlert.vue_vue_type_script_setup_true_lang.js +61 -36
  194. package/dist/components/BbAlert/types.d.ts +9 -5
  195. package/dist/components/BbAlert/types.js +8 -3
  196. package/dist/components/BbBadge/BadgeBodyContent.vue.d.ts +3 -3
  197. package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +26 -17
  198. package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +103 -50
  199. package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +20 -15
  200. package/dist/components/BbBadge/badgeButtonContext.d.ts +12 -1
  201. package/dist/components/BbBadge/types.d.ts +45 -15
  202. package/dist/components/BbBadge/types.js +12 -3
  203. package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +89 -126
  204. package/dist/components/BbBaseButton/types.d.ts +23 -4
  205. package/dist/components/BbBaseButton/types.js +7 -1
  206. package/dist/components/BbBaseButton/useLinkState.d.ts +41 -0
  207. package/dist/components/BbBaseButton/useLinkState.js +70 -0
  208. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +130 -74
  209. package/dist/components/BbButton/types.d.ts +50 -13
  210. package/dist/components/BbButton/types.js +10 -3
  211. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +148 -95
  212. package/dist/components/BbCheckboxGroup/types.d.ts +34 -11
  213. package/dist/components/BbCheckboxGroup/types.js +9 -4
  214. package/dist/components/BbCollapsible/BbCollapsible.vue.d.ts +1 -1
  215. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +134 -93
  216. package/dist/components/BbColorInput/types.d.ts +11 -4
  217. package/dist/components/BbColorInput/types.js +9 -3
  218. package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +82 -59
  219. package/dist/components/BbConfirm/types.d.ts +9 -4
  220. package/dist/components/BbConfirm/types.js +8 -3
  221. package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +1 -1
  222. package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +68 -67
  223. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +1 -1
  224. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +259 -215
  225. package/dist/components/BbDatePickerInput/types.d.ts +12 -5
  226. package/dist/components/BbDatePickerInput/types.js +9 -3
  227. package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +223 -219
  228. package/dist/components/BbDialog/useDialogStack.d.ts +1 -1
  229. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +104 -89
  230. package/dist/components/BbDropdown/BbDropdown.vue.d.ts +1 -0
  231. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +323 -285
  232. package/dist/components/BbDropdown/BbDropdownList.vue.d.ts +1 -0
  233. package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +411 -319
  234. package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +100 -98
  235. package/dist/components/BbDropdown/DropdownRow.vue.d.ts +4 -3
  236. package/dist/components/BbDropdown/DropdownRow.vue_vue_type_script_setup_true_lang.js +49 -28
  237. package/dist/components/BbDropdown/normalizeGroups.d.ts +6 -0
  238. package/dist/components/BbDropdown/normalizeGroups.js +21 -15
  239. package/dist/components/BbDropdown/types.d.ts +59 -12
  240. package/dist/components/BbDropdown/types.js +16 -3
  241. package/dist/components/BbDropdown/useDropdownContext.d.ts +6 -0
  242. package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +2 -1
  243. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +179 -68
  244. package/dist/components/BbDropdownButton/types.d.ts +44 -16
  245. package/dist/components/BbDropdownButton/types.js +28 -3
  246. package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +111 -89
  247. package/dist/components/BbForm/formSchema.d.ts +13 -0
  248. package/dist/components/BbHoverCard/BbHoverCard.vue_vue_type_script_setup_true_lang.js +100 -100
  249. package/dist/components/BbIndicator/BbIndicator.vue_vue_type_script_setup_true_lang.js +40 -25
  250. package/dist/components/BbIndicator/types.d.ts +9 -5
  251. package/dist/components/BbIndicator/types.js +8 -3
  252. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +243 -202
  253. package/dist/components/BbNumberInput/types.d.ts +12 -5
  254. package/dist/components/BbNumberInput/types.js +9 -3
  255. package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +1 -1
  256. package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +401 -399
  257. package/dist/components/BbOffCanvas/types.d.ts +6 -2
  258. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +81 -80
  259. package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +158 -105
  260. package/dist/components/BbRadioGroup/types.d.ts +21 -7
  261. package/dist/components/BbRadioGroup/types.js +9 -4
  262. package/dist/components/BbSelect/BbSelect.vue.d.ts +4 -3
  263. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +181 -137
  264. package/dist/components/BbSelect/types.d.ts +36 -22
  265. package/dist/components/BbSelect/types.js +22 -3
  266. package/dist/components/BbSelectPopover/BbSelectPopover.vue.d.ts +4 -4
  267. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +543 -532
  268. package/dist/components/BbSelectPopover/knownItems.d.ts +5 -0
  269. package/dist/components/BbSelectPopover/types.d.ts +46 -12
  270. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.d.ts +1 -1
  271. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +2 -2
  272. package/dist/components/BbSwitchGroup/types.d.ts +14 -4
  273. package/dist/components/BbSwitchGroup/types.js +8 -3
  274. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +1102 -995
  275. package/dist/components/BbTable/estimatedFloors.golden.d.ts +25 -0
  276. package/dist/components/BbTable/measuredFloors.d.ts +46 -0
  277. package/dist/components/BbTable/measuredFloors.js +322 -0
  278. package/dist/components/BbTable/measuredFloorsTestKit.d.ts +27 -0
  279. package/dist/components/BbTable/textRuler.d.ts +71 -0
  280. package/dist/components/BbTable/textRuler.js +121 -0
  281. package/dist/components/BbTable/utils.d.ts +113 -6
  282. package/dist/components/BbTable/utils.js +118 -65
  283. package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +53 -35
  284. package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +62 -45
  285. package/dist/components/BbTabs/types.d.ts +26 -11
  286. package/dist/components/BbTabs/types.js +23 -8
  287. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +205 -164
  288. package/dist/components/BbTag/types.d.ts +11 -4
  289. package/dist/components/BbTag/types.js +9 -3
  290. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +98 -57
  291. package/dist/components/BbTextInput/types.d.ts +12 -5
  292. package/dist/components/BbTextInput/types.js +9 -3
  293. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +137 -96
  294. package/dist/components/BbTextarea/types.d.ts +12 -5
  295. package/dist/components/BbTextarea/types.js +9 -3
  296. package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +105 -104
  297. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +241 -197
  298. package/dist/components/BbTimePickerInput/types.d.ts +12 -5
  299. package/dist/components/BbTimePickerInput/types.js +9 -3
  300. package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +74 -32
  301. package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +47 -47
  302. package/dist/components/BbToast/types.d.ts +10 -5
  303. package/dist/components/BbToast/types.js +18 -3
  304. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +85 -71
  305. package/dist/components/BbTooltip/types.d.ts +13 -8
  306. package/dist/components/BbTooltip/types.js +8 -3
  307. package/dist/components/CommonField/CommonField.vue.d.ts +1 -1
  308. package/dist/components/CommonPopover/CommonPopover.vue.d.ts +1 -1
  309. package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +69 -69
  310. package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +53 -50
  311. package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +146 -143
  312. package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +7 -2
  313. package/dist/components/OptionsContainer/types.d.ts +14 -3
  314. package/dist/composables/useBbFormContext.d.ts +4 -3
  315. package/dist/composables/useBbTabsContext.js +99 -85
  316. package/dist/composables/useChoiceIndicator.d.ts +58 -0
  317. package/dist/composables/useChoiceIndicator.js +197 -0
  318. package/dist/composables/useConfirm.d.ts +4 -4
  319. package/dist/composables/usePassthrough.d.ts +54 -1
  320. package/dist/composables/usePassthrough.js +100 -71
  321. package/dist/directives/bbTooltip.d.ts +12 -6
  322. package/dist/directives/createPopoverDirective.js +1 -1
  323. package/dist/index.d.ts +3 -1
  324. package/dist/llms-full.txt +2300 -543
  325. package/dist/llms-medium.txt +71 -53
  326. package/dist/llms.txt +2 -1
  327. package/dist/passthrough-deduper.js +6 -3
  328. package/dist/project-dts.d.ts +24 -0
  329. package/dist/project-dts.js +43 -17
  330. package/dist/styles.css +2 -2
  331. package/dist/types/AlertVariant.d.ts +14 -0
  332. package/dist/types/AlertVariant.js +9 -0
  333. package/dist/types/BadgeVariant.d.ts +14 -0
  334. package/dist/types/BadgeVariant.js +9 -0
  335. package/dist/types/ButtonVariant.d.ts +16 -0
  336. package/dist/types/ButtonVariant.js +11 -0
  337. package/dist/types/CheckboxVariant.d.ts +38 -0
  338. package/dist/types/CheckboxVariant.js +4 -0
  339. package/dist/types/CommonProps.d.ts +4 -3
  340. package/dist/types/Config.d.ts +7 -0
  341. package/dist/types/ConfirmVariant.d.ts +12 -0
  342. package/dist/types/ConfirmVariant.js +4 -0
  343. package/dist/types/DropdownItemVariant.d.ts +12 -0
  344. package/dist/types/DropdownItemVariant.js +4 -0
  345. package/dist/types/IndicatorVariant.d.ts +15 -0
  346. package/dist/types/IndicatorVariant.js +10 -0
  347. package/dist/types/InputVariant.d.ts +13 -0
  348. package/dist/types/InputVariant.js +8 -0
  349. package/dist/types/RadioVariant.d.ts +38 -0
  350. package/dist/types/RadioVariant.js +4 -0
  351. package/dist/types/TabsVariant.d.ts +13 -0
  352. package/dist/types/TabsVariant.js +8 -0
  353. package/dist/types/ToastVariant.d.ts +15 -0
  354. package/dist/types/ToastVariant.js +10 -0
  355. package/dist/types/TooltipVariant.d.ts +12 -0
  356. package/dist/types/TooltipVariant.js +4 -0
  357. package/dist/types/passthrough.d.ts +83 -15
  358. package/dist/types/passthrough.js +2 -2
  359. package/dist/types/ptComponentMap.d.ts +35 -23
  360. package/dist/utilities/functions/extractDomContainer.d.ts +20 -1
  361. package/dist/utilities/functions/extractDomContainer.js +8 -3
  362. package/dist/utils/focusVisibility.d.ts +6 -0
  363. package/dist/utils/focusVisibility.js +4 -1
  364. package/dist/utils/passthroughDeduper.d.ts +14 -0
  365. package/dist/utils/versionCheck.js +1 -1
  366. package/dist/vite-plugin.d.ts +64 -7
  367. package/dist/vite.js +385 -259
  368. package/llms.txt +2 -1
  369. package/package.json +3 -3
  370. package/scripts/lib/adoption-checklist.json +312 -0
  371. package/scripts/lib/eslint-plugin.d.ts +13 -0
  372. package/scripts/lib/eslint-plugin.mjs +75 -11
  373. package/scripts/lib/idiom-scan.mjs +65 -0
  374. package/scripts/lib/mcp-config.mjs +203 -9
  375. package/scripts/lib/migrate-fix.mjs +42 -1
  376. package/scripts/lib/project-variant-dts.mjs +18 -0
  377. package/scripts/lib/validate-bb-markup.mjs +99 -2
@@ -21,11 +21,21 @@
21
21
  :pt="
22
22
  passthrough.forward(
23
23
  { main: 'root', icon: 'icon', spinner: 'spinner', text: 'text' },
24
- BB_BUTTON_PT.states
24
+ BUTTON_STATES
25
25
  )
26
26
  "
27
27
  >
28
28
  <template v-if="slots.default" #default><slot /></template>
29
+ <!-- The main button's icon slots (Q81.4), with its states. -->
30
+ <template v-if="slots.icon" #icon="scope"
31
+ ><slot name="icon" v-bind="scope"
32
+ /></template>
33
+ <template v-if="slots['prepend:icon']" #prepend:icon="scope"
34
+ ><slot name="prepend:icon" v-bind="scope"
35
+ /></template>
36
+ <template v-if="slots['append:icon']" #append:icon="scope"
37
+ ><slot name="append:icon" v-bind="scope"
38
+ /></template>
29
39
  </BbButton>
30
40
 
31
41
  <BbDropdown
@@ -33,6 +43,7 @@
33
43
  :id="id"
34
44
  :adaptive="adaptive"
35
45
  :anchor="root"
46
+ :close-on-select="closeOnSelect"
36
47
  :compact="compact"
37
48
  :disabled="disabled"
38
49
  :eager="eager"
@@ -85,9 +96,12 @@
85
96
  <script setup lang="ts">
86
97
  import { computed, ref, useAttrs, useTemplateRef } from 'vue';
87
98
  import BbButton from '../BbButton/BbButton.vue';
99
+ import { useLinkState } from '../BbBaseButton/useLinkState';
88
100
  import BbDropdown from '../BbDropdown/BbDropdown.vue';
89
101
  import { BB_BUTTON_PT } from '../BbButton/types';
90
102
  import { BB_DROPDOWN_PT } from '../BbDropdown/types';
103
+ import { BUTTON_VARIANTS } from '@/types/ButtonVariant';
104
+ import { DROPDOWN_ITEM_VARIANTS } from '@/types/DropdownItemVariant';
91
105
  import { useLocale } from '@/composables/useLocale';
92
106
  import { removedPropsFor } from '@/deprecation/removedProps';
93
107
  import { warnRemovedAttrs } from '@/utilities/functions/warnRemovedAttrs';
@@ -98,18 +112,28 @@ import {
98
112
  type BbDropdownButtonProps,
99
113
  type BbDropdownButtonSlots,
100
114
  } from './types';
101
- import { usePassthrough } from '@/composables/usePassthrough';
115
+ import {
116
+ registeredVariantNames,
117
+ usePassthrough,
118
+ variantPt,
119
+ } from '@/composables/usePassthrough';
102
120
  export type {
103
121
  BbDropdownButtonEvents,
104
122
  BbDropdownButtonProps,
105
123
  BbDropdownButtonSlots,
106
124
  };
107
125
 
108
- defineOptions({ inheritAttrs: false });
126
+ defineOptions({
127
+ // An app's own variants as declared `pt:<part>:<name>` props (Q76.7).
128
+ mixins: [variantPt(BB_DROPDOWN_BUTTON_PT)],
129
+ inheritAttrs: false,
130
+ });
109
131
  const props = withDefaults(defineProps<BbDropdownButtonProps>(), {
110
132
  // Three-state, as on BbDropdown: `undefined` lets the menu fall back to the
111
133
  // global `config.adaptive`; a Boolean default would pin it to `false`.
112
134
  adaptive: undefined,
135
+ // Unset closes after a single-choice change: a Boolean default would pin it.
136
+ closeOnSelect: undefined,
113
137
  size: 'md',
114
138
  variant: 'primary',
115
139
  });
@@ -125,7 +149,14 @@ const slots = defineSlots<BbDropdownButtonSlots>();
125
149
  */
126
150
  // A function, not a computed: the slots object is not reactive, and a
127
151
  // conditional consumer slot must be re-read on every render.
128
- const OWN_SLOTS = new Set(['activator', 'default', 'dropdown']);
152
+ const OWN_SLOTS = new Set([
153
+ 'activator',
154
+ 'default',
155
+ 'dropdown',
156
+ 'icon',
157
+ 'prepend:icon',
158
+ 'append:icon',
159
+ ]);
129
160
  const forwardedSlots = () =>
130
161
  Object.keys(slots).filter((name) => !OWN_SLOTS.has(name));
131
162
 
@@ -146,6 +177,7 @@ const hasMenu = () => menuItems().length > 0 || !!slots.dropdown;
146
177
  */
147
178
  const NOT_MAIN = new Set([
148
179
  'adaptive',
180
+ 'closeOnSelect',
149
181
  'compact',
150
182
  'eager',
151
183
  'id',
@@ -183,6 +215,12 @@ const splitAttrs = () => {
183
215
  return { main, root };
184
216
  };
185
217
 
218
+ /**
219
+ * The main button's link state, for the parts resolved here (`root`, `toggle`,
220
+ * the menu surface); the main button resolves its own parts itself.
221
+ */
222
+ const linkState = useLinkState(props);
223
+
186
224
  /**
187
225
  * Passthrough (plans/passthrough/BbDropdownButton.md). `icon` / `spinner` / `text` are forwarded to the main button as its own `pt`; `panel` / `input` / `item` and the rows' `itemText` / `itemIcon` / `itemDescription` to the dropdown under the same words.
188
226
  */
@@ -196,8 +234,29 @@ const passthrough = usePassthrough({
196
234
  loading: () => !!props.loading,
197
235
  disabled: () => !!props.disabled,
198
236
  open: () => dropdownOpen.value,
237
+ activeLink: () => linkState.value.activeLink,
238
+ exactActiveLink: () => linkState.value.exactActiveLink,
199
239
  },
240
+ variant: [
241
+ { ...BB_DROPDOWN_BUTTON_PT.variant[0], current: () => props.variant },
242
+ BB_DROPDOWN_BUTTON_PT.variant[1],
243
+ ],
200
244
  });
245
+ /**
246
+ * Both buttons and the menu resolve the variants themselves (Q76.7), so every
247
+ * registered name passes on under its own word.
248
+ */
249
+ const BUTTON_STATES = [
250
+ ...BB_BUTTON_PT.states,
251
+ ...registeredVariantNames(BUTTON_VARIANTS, 'buttonVariants'),
252
+ ];
253
+ const ENTRY_STATES = [
254
+ ...BB_DROPDOWN_PT.states,
255
+ ...registeredVariantNames(DROPDOWN_ITEM_VARIANTS, 'dropdownItemVariants'),
256
+ ];
257
+
258
+ /** Resolved here for every part but the main button's and the entries. */
259
+ const LINK_STATES: readonly string[] = ['activeLink', 'exactActiveLink'];
201
260
 
202
261
  /**
203
262
  * The menu's `pt`. The rows go with every dropdown state: the dropdown
@@ -213,16 +272,22 @@ const passthrough = usePassthrough({
213
272
  * `pt:toggle:loading` means this control's `loading` — so it is resolved here.
214
273
  */
215
274
  const toggleButtonPt = () =>
216
- passthrough.forward({ toggle: 'root' }, ['disabled']);
275
+ passthrough.forward({ toggle: 'root' }, [
276
+ 'disabled',
277
+ ...registeredVariantNames(BUTTON_VARIANTS, 'buttonVariants'),
278
+ ]);
217
279
 
218
280
  const menuPt = () => ({
219
281
  ...passthrough.forward(
220
282
  ['panel', 'sheet', 'header', 'footer', 'input'],
221
- BB_DROPDOWN_PT.states.filter((state) => state !== 'disabled')
283
+ // The link states too: the surface's are the main button's, from here.
284
+ BB_DROPDOWN_PT.states.filter(
285
+ (state) => state !== 'disabled' && !LINK_STATES.includes(state)
286
+ )
222
287
  ),
223
288
  ...passthrough.forward(
224
289
  ['item', 'itemText', 'itemIcon', 'itemDescription'],
225
- BB_DROPDOWN_PT.states
290
+ ENTRY_STATES
226
291
  ),
227
292
  });
228
293
 
@@ -269,9 +334,24 @@ import type {
269
334
  PtItemFn,
270
335
  PtItemResult,
271
336
  PtValue,
337
+ PtVariantAttrs,
272
338
  } from '@/types/passthrough';
273
- import type { ButtonVariantType } from '@/types/ButtonVariant';
274
- import type { BbButtonOwnProps, BbButtonProps } from '../BbButton/types';
339
+ import {
340
+ BUTTON_VARIANTS,
341
+ type ButtonVariantBuiltIn,
342
+ type ButtonVariantRegistry,
343
+ type ButtonVariantType,
344
+ } from '@/types/ButtonVariant';
345
+ import {
346
+ DROPDOWN_ITEM_VARIANTS,
347
+ type DropdownItemVariantBuiltIn,
348
+ type DropdownItemVariantRegistry,
349
+ } from '@/types/DropdownItemVariant';
350
+ import type {
351
+ BbButtonIconSlotProps,
352
+ BbButtonOwnProps,
353
+ BbButtonProps,
354
+ } from '../BbButton/types';
275
355
 
276
356
  /**
277
357
  * Passthrough parts of `BbDropdownButton` (plans/passthrough/BbDropdownButton.md):
@@ -284,7 +364,7 @@ import type { BbButtonOwnProps, BbButtonProps } from '../BbButton/types';
284
364
  * resolve there (the flyout box on desktop, the sheet's menu on a phone). `loading` / `disabled` follow the props; `open` follows the
285
365
  * menu; `selected` exists on the entry parts only.
286
366
  *
287
- * Per-item functions: on the instance, an entry part (`item`, `itemText`, `itemIcon`, `itemDescription`) also accepts `({ item, selected, … }) => PtValue | false | null | undefined` — `item` is the menu entry, and every state a boolean beside it, on for it (`selected`, `disabled`, …) — in the `pt` object or the `:pt:<part>` attribute, never on a `<part>:<state>` key and never in the global map or a scope (they ship as JSON). The function is handed to the `BbDropdown` with the part and called there, per entry; its result is merged last, after every state entry, through the same deduper; a falsy result leaves the entry as it was. See the passthrough guide, _Per-item functions_.
367
+ * Per-item functions: on the instance, an entry part (`item`, `itemText`, `itemIcon`, `itemDescription`) also accepts `({ item, selected, … }) => PtValue | false | null | undefined` — `item` is the menu entry, every state a boolean beside it, on for it (`selected`, `disabled`, …), and the entry's `variant` as a string (`default` when it has none) — in the `pt` object or the `:pt:<part>` attribute, never on a `<part>:<state>` key and never in the global map or a scope (they ship as JSON). The function is handed to the `BbDropdown` with the part and called there, per entry; its result is merged last, after every state entry, through the same deduper; a falsy result leaves the entry as it was. See the passthrough guide, _Per-item functions_.
288
368
  */
289
369
  export type BbDropdownButtonPtPart =
290
370
  | BbDropdownButtonOwnPtPart
@@ -337,15 +417,18 @@ export type BbDropdownButtonItemPtPart =
337
417
  | 'itemDescription';
338
418
  /**
339
419
  * Passthrough states of `BbDropdownButton`: `loading` / `disabled` follow the
340
- * props and `open` the menu, on every part; `selected` (a selectable group's
341
- * checked entry, resolved by the `BbDropdown`) is declared on the entry parts
342
- * only — `pt:root:selected` is a type error, not a silent no-op.
420
+ * props, `open` the menu and `activeLink` / `exactActiveLink` the main
421
+ * button's link, on every part; `selected` (a selectable group's checked
422
+ * entry, resolved by the `BbDropdown`) is declared on the entry parts only —
423
+ * `pt:root:selected` is a type error, not a silent no-op.
343
424
  *
344
425
  * @state selected - Per node, on the entry parts only (`item`, `itemText`,
345
426
  * `itemIcon`, `itemDescription`): a selectable group's checked entry.
346
427
  * `pt:root:selected` is a type error, not a silent no-op.
347
428
  */
348
429
  export type BbDropdownButtonPtState =
430
+ | 'activeLink'
431
+ | 'exactActiveLink'
349
432
  | 'selected'
350
433
  | 'loading'
351
434
  | 'disabled'
@@ -358,8 +441,19 @@ export type BbDropdownButtonPtState =
358
441
  * @state disabled - Component-wide while the control is `disabled`; also per
359
442
  * node, on the entry parts: a menu entry that is disabled.
360
443
  * @state open - Component-wide: the menu is open.
444
+ * @state activeLink - Component-wide while the main button is a link to the
445
+ * current page or one of its ancestors (its `activeClass` is on); also per
446
+ * node, on the entry parts: a menu entry whose link is. The weakest state.
447
+ * @state exactActiveLink - Component-wide while the main button is a link to
448
+ * the current page itself (its `exactActiveClass` is on); also per node, on
449
+ * the entry parts.
361
450
  */
362
- export type BbDropdownButtonWidePtState = 'loading' | 'disabled' | 'open';
451
+ export type BbDropdownButtonWidePtState =
452
+ | 'activeLink'
453
+ | 'exactActiveLink'
454
+ | 'loading'
455
+ | 'disabled'
456
+ | 'open';
363
457
  /** The runtime lists the resolver is wired with — kept next to the types so the two cannot drift. */
364
458
  export const BB_DROPDOWN_BUTTON_PT = {
365
459
  parts: [
@@ -379,16 +473,57 @@ export const BB_DROPDOWN_BUTTON_PT = {
379
473
  'itemIcon',
380
474
  'itemDescription',
381
475
  ],
382
- states: ['selected', 'disabled', 'open', 'loading'],
476
+ states: [
477
+ 'activeLink',
478
+ 'exactActiveLink',
479
+ 'selected',
480
+ 'disabled',
481
+ 'open',
482
+ 'loading',
483
+ ],
383
484
  /** `itemStates` are declared on `itemParts` only — the control's own parts never have them. */
384
485
  itemParts: ['item', 'itemText', 'itemIcon', 'itemDescription'],
385
486
  itemStates: ['selected'],
487
+ // Two variants as states (Q76.7), below the real ones: the button's on the
488
+ // control's parts, and each menu entry's on the entry parts.
489
+ variant: [
490
+ {
491
+ names: BUTTON_VARIANTS,
492
+ option: 'buttonVariants',
493
+ parts: ['root', 'main', 'toggle', 'icon', 'spinner', 'text'],
494
+ },
495
+ {
496
+ names: DROPDOWN_ITEM_VARIANTS,
497
+ option: 'dropdownItemVariants',
498
+ parts: ['item', 'itemText', 'itemIcon', 'itemDescription'],
499
+ },
500
+ ],
386
501
  } as const satisfies {
387
502
  parts: readonly BbDropdownButtonPtPart[];
388
503
  states: readonly BbDropdownButtonPtState[];
389
504
  itemParts: readonly BbDropdownButtonItemPtPart[];
390
505
  itemStates: readonly BbDropdownButtonPtState[];
506
+ variant: readonly [
507
+ {
508
+ names: readonly ButtonVariantBuiltIn[];
509
+ option: string;
510
+ parts: readonly BbDropdownButtonControlPtPart[];
511
+ },
512
+ {
513
+ names: readonly DropdownItemVariantBuiltIn[];
514
+ option: string;
515
+ parts: readonly BbDropdownButtonItemPtPart[];
516
+ },
517
+ ];
391
518
  };
519
+ /** The split control's own parts: the ones its button `variant` styles. Spelled flat (T20). */
520
+ export type BbDropdownButtonControlPtPart =
521
+ | 'root'
522
+ | 'main'
523
+ | 'toggle'
524
+ | 'icon'
525
+ | 'spinner'
526
+ | 'text';
392
527
 
393
528
  /**
394
529
  * The object form of the split control's `pt`: the same keys as its `pt:*`
@@ -400,13 +535,19 @@ export type BbDropdownButtonPtMap = {
400
535
  [K in
401
536
  | BbDropdownButtonOwnPtPart
402
537
  | `${BbDropdownButtonPtPart}:${BbDropdownButtonWidePtState}`
403
- | `${BbDropdownButtonItemPtPart}:selected`]?: PtValue;
538
+ | `${BbDropdownButtonItemPtPart}:selected`
539
+ | `${BbDropdownButtonControlPtPart}:${ButtonVariantBuiltIn | keyof ButtonVariantRegistry}`
540
+ | `${BbDropdownButtonItemPtPart}:${DropdownItemVariantBuiltIn | keyof DropdownItemVariantRegistry}`]?: PtValue;
404
541
  } & {
405
542
  // An entry part's base key also takes a per-item function, called with
406
543
  // the menu entry by the `BbDropdown` it is handed to.
407
544
  [K in BbDropdownButtonItemPtPart]?:
408
545
  | PtValue
409
- | PtItemFn<InternalItem, BbDropdownButtonPtState>;
546
+ | PtItemFn<
547
+ InternalItem,
548
+ BbDropdownButtonPtState,
549
+ DropdownItemVariantBuiltIn | keyof DropdownItemVariantRegistry
550
+ >;
410
551
  };
411
552
  /* eslint-enable @typescript-eslint/consistent-indexed-object-style */
412
553
 
@@ -418,22 +559,38 @@ export type BbDropdownButtonProps = {
418
559
  [K in
419
560
  | `pt:${BbDropdownButtonOwnPtPart}`
420
561
  | `pt:${BbDropdownButtonPtPart}:${BbDropdownButtonWidePtState}`
421
- | `pt:${BbDropdownButtonItemPtPart}:selected`]?: PtValue;
422
- } & {
423
- // A literal function type, not `PtItemFn` (T23).
424
- [K in `pt:${BbDropdownButtonItemPtPart}`]?:
425
- | PtValue
426
- | ((ctx: PtItemCtx<InternalItem, BbDropdownButtonPtState>) => PtItemResult);
427
- } & {
428
- /* eslint-enable @typescript-eslint/consistent-indexed-object-style */
429
- /**
430
- * Passthrough, object form: the same keys as the `pt:*` attributes
431
- * without the prefix. See the `pt:<part>` row.
432
- */
433
- pt?: BbDropdownButtonPtMap;
434
- } & Pick<
562
+ | `pt:${BbDropdownButtonItemPtPart}:selected`
563
+ | `pt:${BbDropdownButtonControlPtPart}:${ButtonVariantBuiltIn}`
564
+ | `pt:${BbDropdownButtonItemPtPart}:${DropdownItemVariantBuiltIn}`]?: PtValue;
565
+ } & /* @vue-ignore */ PtVariantAttrs<
566
+ BbDropdownButtonControlPtPart,
567
+ keyof ButtonVariantRegistry
568
+ > &
569
+ /* @vue-ignore */ PtVariantAttrs<
570
+ BbDropdownButtonItemPtPart,
571
+ keyof DropdownItemVariantRegistry
572
+ > & {
573
+ // A literal function type, not `PtItemFn` (T23).
574
+ [K in `pt:${BbDropdownButtonItemPtPart}`]?:
575
+ | PtValue
576
+ | ((
577
+ ctx: PtItemCtx<
578
+ InternalItem,
579
+ BbDropdownButtonPtState,
580
+ DropdownItemVariantBuiltIn | keyof DropdownItemVariantRegistry
581
+ >
582
+ ) => PtItemResult);
583
+ } & {
584
+ /* eslint-enable @typescript-eslint/consistent-indexed-object-style */
585
+ /**
586
+ * Passthrough, object form: the same keys as the `pt:*` attributes
587
+ * without the prefix. See the `pt:<part>` row.
588
+ */
589
+ pt?: BbDropdownButtonPtMap;
590
+ } & Pick<
435
591
  BbDropdownProps,
436
592
  | 'adaptive'
593
+ | 'closeOnSelect'
437
594
  | 'compact'
438
595
  | 'eager'
439
596
  | 'id'
@@ -573,6 +730,15 @@ export type BbDropdownButtonSlots = {
573
730
  * The main button's label (falls back to `text`).
574
731
  */
575
732
  default?: () => any;
733
+ /**
734
+ * The main button's icon, replacing the `icon` prop; inside its `icon` part
735
+ * (`pt:icon`, `--icon-size`, the loading spinner), with its states.
736
+ */
737
+ icon?: (props: BbButtonIconSlotProps) => any;
738
+ /** The main button's leading icon, replacing `prepend:icon`. */
739
+ 'prepend:icon'?: (props: BbButtonIconSlotProps) => any;
740
+ /** The main button's trailing icon, replacing `append:icon`. */
741
+ 'append:icon'?: (props: BbButtonIconSlotProps) => any;
576
742
  /**
577
743
  * Menu companions, forwarded into the dropdown: a `<BbDropdownGroup>`
578
744
  * binding a group of `items` by id. A `#dropdown` slot keeps the toggle even