bitboss-ui 3.0.0-beta.47 → 3.0.0-beta.49

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 (398) hide show
  1. package/README.md +24 -7
  2. package/bin/bitboss-ui-mcp.mjs +15 -3
  3. package/bin/bitboss-ui.mjs +167 -14
  4. package/dist/ai/BbAccordion.md +1 -1
  5. package/dist/ai/BbAvatar.md +1 -1
  6. package/dist/ai/BbBreadcrumbs.md +65 -65
  7. package/dist/ai/BbButton.md +28 -8
  8. package/dist/ai/BbCheckbox.md +0 -2
  9. package/dist/ai/BbCheckboxGroup.md +13 -20
  10. package/dist/ai/BbCollapsible.md +1 -1
  11. package/dist/ai/BbColorPalette.md +1 -1
  12. package/dist/ai/BbConfirm.md +8 -0
  13. package/dist/ai/BbConfirmPortal.md +1 -1
  14. package/dist/ai/BbDatePickerInput.md +4 -2
  15. package/dist/ai/BbDialog.md +1 -8
  16. package/dist/ai/BbDropdown.md +231 -220
  17. package/dist/ai/BbDropdownButton.md +65 -65
  18. package/dist/ai/BbDropdownGroup.md +2 -2
  19. package/dist/ai/BbDropzone.md +10 -10
  20. package/dist/ai/BbForm.md +43 -52
  21. package/dist/ai/BbHoverCard.md +19 -7
  22. package/dist/ai/BbHoverCardPortal.md +1 -1
  23. package/dist/ai/BbNumberInput.md +88 -21
  24. package/dist/ai/BbPopover.md +47 -40
  25. package/dist/ai/BbPopoverPortal.md +1 -1
  26. package/dist/ai/BbProgress.md +48 -22
  27. package/dist/ai/BbRadioGroup.md +13 -19
  28. package/dist/ai/BbSelect.md +16 -36
  29. package/dist/ai/BbSelectPopover.md +14 -30
  30. package/dist/ai/BbSmoothHeight.md +0 -2
  31. package/dist/ai/BbSwitchGroup.md +13 -20
  32. package/dist/ai/BbTable.md +11 -10
  33. package/dist/ai/BbTabs.md +107 -106
  34. package/dist/ai/BbTabsList.md +2 -2
  35. package/dist/ai/BbTabsPanels.md +1 -1
  36. package/dist/ai/BbTabsRoot.md +3 -3
  37. package/dist/ai/BbTooltip.md +29 -13
  38. package/dist/ai/BbTree.md +14 -11
  39. package/dist/ai/CommonPopover.md +1 -1
  40. package/dist/ai/changelog.json +297 -6
  41. package/dist/ai/components.json +50 -45
  42. package/dist/ai/composables/useBbDropdownContext.md +16 -16
  43. package/dist/ai/composables/useBbFormField.md +5 -1
  44. package/dist/ai/composables/useBbTabsContext.md +14 -14
  45. package/dist/ai/guides/agent-contract.md +27 -27
  46. package/dist/ai/guides/ai-router.md +1 -1
  47. package/dist/ai/guides/component-picker.md +3 -3
  48. package/dist/ai/guides/fetch-items-playbook.md +1 -1
  49. package/dist/ai/guides/icons-policy.md +10 -10
  50. package/dist/ai/guides/inertia-helpers.md +120 -67
  51. package/dist/ai/guides/installation-and-plugin-setup.md +45 -15
  52. package/dist/ai/guides/migration/components/bb-breadcrumbs.md +3 -2
  53. package/dist/ai/guides/migration/components/bb-checkbox-group.md +16 -16
  54. package/dist/ai/guides/migration/components/bb-dropdown-button.md +9 -8
  55. package/dist/ai/guides/migration/components/bb-dropdown.md +15 -14
  56. package/dist/ai/guides/migration/components/bb-radio-group.md +2 -1
  57. package/dist/ai/guides/migration/components/bb-select-popover.md +6 -1
  58. package/dist/ai/guides/migration/components/bb-select.md +10 -2
  59. package/dist/ai/guides/migration/components/bb-switch-group.md +2 -1
  60. package/dist/ai/guides/migration/components/bb-tabs.md +9 -8
  61. package/dist/ai/guides/migration/components/bb-tooltip.md +1 -1
  62. package/dist/ai/guides/migration/v2-to-v3.md +143 -28
  63. package/dist/ai/guides/migration/v3-beta-css-classes.md +29 -27
  64. package/dist/ai/guides/migration/v3-beta-tooling.md +11 -0
  65. package/dist/ai/guides/options-items-playbook.md +30 -24
  66. package/dist/ai/guides/passthrough.md +4 -4
  67. package/dist/ai/guides/preset-components.md +18 -3
  68. package/dist/ai/guides/typescript-generic-components.md +1 -1
  69. package/dist/ai/guides/validated-forms.md +11 -22
  70. package/dist/ai/guides/validation-providers.md +4 -3
  71. package/dist/ai/helpers/inertia/manifest.json +636 -0
  72. package/dist/ai/helpers/inertia/types.ts +15 -0
  73. package/dist/ai/helpers/inertia/useAsyncFn.ts +110 -0
  74. package/dist/ai/helpers/inertia/useConfirmOnRouteLeave.ts +102 -0
  75. package/dist/ai/helpers/inertia/useDeleteCmd.ts +30 -0
  76. package/dist/ai/helpers/inertia/useHasChanged.ts +36 -0
  77. package/dist/ai/helpers/inertia/useIndexById.ts +23 -0
  78. package/dist/ai/helpers/inertia/useLazyProp.ts +148 -0
  79. package/dist/ai/helpers/inertia/useLazyPropGetter.ts +50 -0
  80. package/dist/ai/helpers/inertia/useLoading.ts +20 -0
  81. package/dist/ai/helpers/inertia/usePaginatedResponseContext.ts +88 -0
  82. package/dist/ai/helpers/inertia/usePromiseForm.ts +62 -0
  83. package/dist/ai/helpers/inertia/useProp.ts +63 -0
  84. package/dist/ai/helpers/inertia/useQuery.ts +19 -0
  85. package/dist/ai/helpers/inertia/useQueryObject.ts +116 -0
  86. package/dist/ai/helpers/inertia/useResourceContext.ts +69 -0
  87. package/dist/ai/helpers/inertia/useRouteQuery.ts +54 -0
  88. package/dist/ai/helpers/inertia/useScreenSizes.ts +23 -0
  89. package/dist/ai/helpers/inertia/useTableContext.ts +34 -0
  90. package/dist/ai/helpers/inertia/useTableSelectionContext.ts +48 -0
  91. package/dist/ai/helpers/inertia/useUntil.ts +33 -0
  92. package/dist/ai/helpers/inertia/utils.ts +24 -0
  93. package/dist/ai/index.md +6 -6
  94. package/dist/ai/manifest/components/BbAccordion.json +1 -1
  95. package/dist/ai/manifest/components/BbBreadcrumbs.json +10 -6
  96. package/dist/ai/manifest/components/BbBreadcrumbs.tree.json +1 -1
  97. package/dist/ai/manifest/components/BbButton.json +2 -1
  98. package/dist/ai/manifest/components/BbButton.tree.json +1 -1
  99. package/dist/ai/manifest/components/BbCheckboxGroup.json +2 -2
  100. package/dist/ai/manifest/components/BbCollapsible.json +1 -1
  101. package/dist/ai/manifest/components/BbColorPalette.json +1 -1
  102. package/dist/ai/manifest/components/BbConfirmPortal.json +5 -2
  103. package/dist/ai/manifest/components/BbDropdown.json +23 -20
  104. package/dist/ai/manifest/components/BbDropdown.tree.json +2 -2
  105. package/dist/ai/manifest/components/BbDropdownButton.json +22 -19
  106. package/dist/ai/manifest/components/BbDropdownButton.tree.json +1 -1
  107. package/dist/ai/manifest/components/BbDropdownGroup.json +2 -2
  108. package/dist/ai/manifest/components/BbForm.json +1 -0
  109. package/dist/ai/manifest/components/BbHoverCard.json +1 -1
  110. package/dist/ai/manifest/components/BbHoverCardPortal.json +2 -2
  111. package/dist/ai/manifest/components/BbNumberInput.json +6 -1
  112. package/dist/ai/manifest/components/BbNumberInput.tree.json +2 -1
  113. package/dist/ai/manifest/components/BbPopover.json +2 -1
  114. package/dist/ai/manifest/components/BbPopoverPortal.json +2 -2
  115. package/dist/ai/manifest/components/BbProgress.json +6 -6
  116. package/dist/ai/manifest/components/BbProgress.tree.json +1 -0
  117. package/dist/ai/manifest/components/BbRadioGroup.json +2 -2
  118. package/dist/ai/manifest/components/BbSelect.json +2 -2
  119. package/dist/ai/manifest/components/BbSelect.tree.json +2 -2
  120. package/dist/ai/manifest/components/BbSelectPopover.json +2 -2
  121. package/dist/ai/manifest/components/BbSelectPopover.tree.json +1 -1
  122. package/dist/ai/manifest/components/BbSwitchGroup.json +2 -2
  123. package/dist/ai/manifest/components/BbTabs.json +8 -7
  124. package/dist/ai/manifest/components/BbTabsList.json +3 -3
  125. package/dist/ai/manifest/components/BbTabsPanels.json +1 -1
  126. package/dist/ai/manifest/components/BbTabsRoot.json +6 -5
  127. package/dist/ai/manifest/components/BbTag.tree.json +1 -1
  128. package/dist/ai/manifest/components/BbTooltip.json +2 -2
  129. package/dist/ai/manifest/components/ChipsBox.tree.json +1 -1
  130. package/dist/ai/manifest/components/CommonPopover.json +1 -1
  131. package/dist/ai/manifest/index.json +2 -2
  132. package/dist/ai/manifest/meta.json +5 -0
  133. package/dist/ai/manifest/types.advanced.json +10 -9
  134. package/dist/ai/manifest/types.api.json +8 -5
  135. package/dist/ai/manifest/types.wrapper.json +1 -0
  136. package/dist/ai/recipes/inertia/approvals-inbox.md +16 -18
  137. package/dist/ai/recipes/inertia/inline-edit-workspace.md +23 -33
  138. package/dist/ai/recipes/inertia/layout-scaffold.md +16 -16
  139. package/dist/ai/recipes/inertia/onboarding.md +6 -10
  140. package/dist/ai/recipes/inertia/ownership-atlas.md +15 -18
  141. package/dist/ai/recipes/inertia/record-form.md +11 -11
  142. package/dist/ai/recipes/inertia/records-workspace.md +38 -41
  143. package/dist/ai/recipes/inertia/settings-workspace.md +26 -38
  144. package/dist/ai/recipes/inertia/upload-center.md +31 -39
  145. package/dist/ai/recipes/inertia/wizard-form.md +10 -19
  146. package/dist/ai/recipes/nuxt/approvals-inbox.md +7 -8
  147. package/dist/ai/recipes/nuxt/inline-edit-workspace.md +14 -24
  148. package/dist/ai/recipes/nuxt/layout-scaffold.md +16 -16
  149. package/dist/ai/recipes/nuxt/onboarding.md +2 -6
  150. package/dist/ai/recipes/nuxt/ownership-atlas.md +7 -9
  151. package/dist/ai/recipes/nuxt/record-form.md +5 -5
  152. package/dist/ai/recipes/nuxt/records-workspace.md +29 -31
  153. package/dist/ai/recipes/nuxt/settings-workspace.md +22 -34
  154. package/dist/ai/recipes/nuxt/upload-center.md +22 -29
  155. package/dist/ai/recipes/nuxt/wizard-form.md +3 -11
  156. package/dist/ai/recipes/vue/approvals-inbox.md +7 -8
  157. package/dist/ai/recipes/vue/inline-edit-workspace.md +14 -24
  158. package/dist/ai/recipes/vue/layout-scaffold.md +16 -16
  159. package/dist/ai/recipes/vue/onboarding.md +2 -6
  160. package/dist/ai/recipes/vue/ownership-atlas.md +7 -9
  161. package/dist/ai/recipes/vue/record-form.md +5 -5
  162. package/dist/ai/recipes/vue/records-workspace.md +29 -31
  163. package/dist/ai/recipes/vue/settings-workspace.md +22 -34
  164. package/dist/ai/recipes/vue/upload-center.md +22 -29
  165. package/dist/ai/recipes/vue/wizard-form.md +3 -11
  166. package/dist/ai/source/BbAccordion.md +1 -1
  167. package/dist/ai/source/BbAlert.md +3 -3
  168. package/dist/ai/source/BbBadge.md +14 -10
  169. package/dist/ai/source/BbBadgeButton.md +17 -12
  170. package/dist/ai/source/BbBaseButton.md +1 -1
  171. package/dist/ai/source/BbBaseRadioIcon.md +1 -0
  172. package/dist/ai/source/BbBaseSwitchIcon.md +1 -0
  173. package/dist/ai/source/BbBreadcrumbs.md +63 -42
  174. package/dist/ai/source/BbButton.md +84 -38
  175. package/dist/ai/source/BbCalendar.md +17 -16
  176. package/dist/ai/source/BbCheckbox.md +3 -2
  177. package/dist/ai/source/BbCheckboxGroup.md +11 -4
  178. package/dist/ai/source/BbCollapsible.md +2 -1
  179. package/dist/ai/source/BbColorInput.md +10 -9
  180. package/dist/ai/source/BbColorPalette.md +2 -1
  181. package/dist/ai/source/BbConfirm.md +18 -1
  182. package/dist/ai/source/BbConfirmPortal.md +20 -6
  183. package/dist/ai/source/BbDatePicker.md +2 -2
  184. package/dist/ai/source/BbDatePickerInput.md +47 -20
  185. package/dist/ai/source/BbDialog.md +5 -5
  186. package/dist/ai/source/BbDropdown.md +231 -158
  187. package/dist/ai/source/BbDropdownButton.md +19 -12
  188. package/dist/ai/source/BbDropdownGroup.md +127 -93
  189. package/dist/ai/source/BbForm.md +25 -1
  190. package/dist/ai/source/BbHoverCard.md +30 -3
  191. package/dist/ai/source/BbHoverCardPortal.md +18 -3
  192. package/dist/ai/source/BbIndicator.md +4 -0
  193. package/dist/ai/source/BbNumberInput.md +855 -19
  194. package/dist/ai/source/BbOffCanvas.md +27 -11
  195. package/dist/ai/source/BbPagination.md +3 -3
  196. package/dist/ai/source/BbPopover.md +185 -12
  197. package/dist/ai/source/BbPopoverPortal.md +30 -3
  198. package/dist/ai/source/BbProgress.md +82 -18
  199. package/dist/ai/source/BbRadioGroup.md +12 -5
  200. package/dist/ai/source/BbRating.md +11 -9
  201. package/dist/ai/source/BbSelect.md +16 -10
  202. package/dist/ai/source/BbSelectPopover.md +29 -23
  203. package/dist/ai/source/BbSlider.md +12 -6
  204. package/dist/ai/source/BbSwitch.md +3 -2
  205. package/dist/ai/source/BbSwitchGroup.md +5 -2
  206. package/dist/ai/source/BbTable.md +102 -18
  207. package/dist/ai/source/BbTabs.md +30 -24
  208. package/dist/ai/source/BbTabsList.md +29 -23
  209. package/dist/ai/source/BbTabsPanels.md +29 -23
  210. package/dist/ai/source/BbTabsRoot.md +28 -22
  211. package/dist/ai/source/BbTag.md +10 -9
  212. package/dist/ai/source/BbTextInput.md +5 -4
  213. package/dist/ai/source/BbTextarea.md +6 -5
  214. package/dist/ai/source/BbTimePicker.md +1 -1
  215. package/dist/ai/source/BbTimePickerInput.md +46 -9
  216. package/dist/ai/source/BbToast.md +10 -7
  217. package/dist/ai/source/BbToastPortal.md +10 -7
  218. package/dist/ai/source/BbTooltip.md +88 -11
  219. package/dist/ai/source/BbTree.md +21 -3
  220. package/dist/ai/source/CommonField.md +6 -4
  221. package/dist/ai/source/CommonFieldInput.md +15 -10
  222. package/dist/ai/source/CommonPopover.md +8 -1
  223. package/dist/ai/source/CommonTimeSelector.md +5 -4
  224. package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +10 -8
  225. package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +8 -8
  226. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +45 -45
  227. package/dist/components/BbBreadcrumbs/types.d.ts +25 -17
  228. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +88 -70
  229. package/dist/components/BbButton/toggleRoving.d.ts +6 -0
  230. package/dist/components/BbButton/toggleRoving.js +45 -0
  231. package/dist/components/BbButton/types.d.ts +12 -4
  232. package/dist/components/BbButton/types.js +5 -1
  233. package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +178 -178
  234. package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +15 -15
  235. package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +28 -28
  236. package/dist/components/BbCalendar/useCalendarGrid.js +141 -139
  237. package/dist/components/BbCalendar/useDayjsLocale.d.ts +38 -15
  238. package/dist/components/BbCalendar/useDayjsLocale.js +31 -30
  239. package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +48 -48
  240. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +81 -80
  241. package/dist/components/BbCheckboxGroup/types.d.ts +6 -2
  242. package/dist/components/BbCollapsible/types.d.ts +2 -1
  243. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +69 -69
  244. package/dist/components/BbColorPalette/types.d.ts +2 -1
  245. package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +2 -5
  246. package/dist/components/BbConfirm/types.d.ts +15 -0
  247. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +363 -349
  248. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +91 -86
  249. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +298 -289
  250. package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +322 -356
  251. package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +17 -15
  252. package/dist/components/BbDropdown/DropdownRow.vue.d.ts +40 -0
  253. package/dist/components/BbDropdown/DropdownRow.vue.js +5 -0
  254. package/dist/components/BbDropdown/DropdownRow.vue_vue_type_script_setup_true_lang.js +60 -0
  255. package/dist/components/BbDropdown/normalizeGroups.d.ts +8 -2
  256. package/dist/components/BbDropdown/normalizeGroups.js +60 -46
  257. package/dist/components/BbDropdown/types.d.ts +120 -88
  258. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +11 -2
  259. package/dist/components/BbDropdownButton/types.d.ts +2 -2
  260. package/dist/components/BbForm/BbForm.vue.d.ts +9 -0
  261. package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +114 -105
  262. package/dist/components/BbForm/BbFormCustomField.js +1 -1
  263. package/dist/components/BbForm/bindFormField.js +2 -1
  264. package/dist/components/BbForm/formFields.d.ts +5 -0
  265. package/dist/components/BbHoverCard/BbHoverCard.vue_vue_type_script_setup_true_lang.js +145 -142
  266. package/dist/components/BbHoverCard/BbHoverCardPortal.vue.d.ts +2 -2
  267. package/dist/components/BbHoverCard/types.d.ts +14 -1
  268. package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +0 -1
  269. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +452 -125
  270. package/dist/components/BbNumberInput/numberDisplay.d.ts +256 -0
  271. package/dist/components/BbNumberInput/numberDisplay.js +499 -0
  272. package/dist/components/BbNumberInput/types.d.ts +54 -1
  273. package/dist/components/BbNumberInput/warroom/corpus.d.ts +58 -0
  274. package/dist/components/BbNumberInput/warroom/currency-verify.rows.d.ts +28 -0
  275. package/dist/components/BbNumberInput/warroom/currency.rows.d.ts +2 -0
  276. package/dist/components/BbNumberInput/warroom/harness.d.ts +217 -0
  277. package/dist/components/BbNumberInput/warroom/oracle.d.ts +150 -0
  278. package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +7 -7
  279. package/dist/components/BbPopover/BbPopover.vue.d.ts +1 -0
  280. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +207 -162
  281. package/dist/components/BbPopover/BbPopoverPortal.vue.d.ts +2 -2
  282. package/dist/components/BbPopover/types.d.ts +26 -1
  283. package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +15 -7
  284. package/dist/components/BbProgress/types.d.ts +23 -7
  285. package/dist/components/BbProgress/types.js +1 -1
  286. package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +102 -101
  287. package/dist/components/BbRadioGroup/types.d.ts +6 -2
  288. package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +63 -63
  289. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +156 -154
  290. package/dist/components/BbSelect/types.d.ts +6 -2
  291. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +2 -1
  292. package/dist/components/BbSelectPopover/types.d.ts +6 -2
  293. package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +153 -153
  294. package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +62 -62
  295. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +131 -130
  296. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +711 -676
  297. package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +1 -1
  298. package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +1 -1
  299. package/dist/components/BbTabs/types.d.ts +28 -22
  300. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +76 -76
  301. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +58 -58
  302. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +82 -82
  303. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +246 -236
  304. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +99 -86
  305. package/dist/components/BbTooltip/tooltipWarmup.d.ts +23 -0
  306. package/dist/components/BbTooltip/tooltipWarmup.js +7 -0
  307. package/dist/components/BbTooltip/types.d.ts +10 -3
  308. package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +29 -21
  309. package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +10 -7
  310. package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +37 -36
  311. package/dist/components/CommonPopover/types.d.ts +2 -1
  312. package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +9 -9
  313. package/dist/composables/formSubmitLock.d.ts +6 -0
  314. package/dist/composables/formSubmitLock.js +4 -0
  315. package/dist/composables/useBaseOptions.d.ts +7 -1
  316. package/dist/composables/useBaseOptions.js +32 -32
  317. package/dist/composables/useBbDropdownContext.d.ts +8 -8
  318. package/dist/composables/useBbFormField.d.ts +9 -0
  319. package/dist/composables/useBbFormField.js +5 -3
  320. package/dist/composables/useBbTabsContext.d.ts +10 -10
  321. package/dist/composables/useBbTabsContext.js +18 -18
  322. package/dist/composables/useFormBinding.d.ts +11 -0
  323. package/dist/composables/useFormBinding.js +15 -13
  324. package/dist/composables/useItemText.d.ts +5 -1
  325. package/dist/composables/useItemText.js +8 -3
  326. package/dist/composables/useItemValue.d.ts +5 -1
  327. package/dist/composables/useItemValue.js +8 -3
  328. package/dist/composables/useLocale.js +10 -9
  329. package/dist/deprecation/ai-deprecations.json.d.ts +130 -0
  330. package/dist/deprecation/ai-deprecations.json.js +1 -1
  331. package/dist/deprecation/removedProps.js +1 -1
  332. package/dist/directives/bbDropdown.js +1 -1
  333. package/dist/directives/directivePortal.d.ts +13 -7
  334. package/dist/directives/directivePortal.js +1 -4
  335. package/dist/i18n/index.d.ts +7 -12
  336. package/dist/i18n/locales/cs.json +11 -14
  337. package/dist/i18n/locales/da.json +13 -16
  338. package/dist/i18n/locales/de-CH.json +137 -0
  339. package/dist/i18n/locales/de.json +14 -17
  340. package/dist/i18n/locales/el.json +10 -13
  341. package/dist/i18n/locales/en-GB.json +137 -0
  342. package/dist/i18n/locales/en.json +8 -11
  343. package/dist/i18n/locales/es-MX.json +137 -0
  344. package/dist/i18n/locales/es.json +16 -19
  345. package/dist/i18n/locales/fi.json +8 -11
  346. package/dist/i18n/locales/fr.json +23 -26
  347. package/dist/i18n/locales/hu.json +8 -11
  348. package/dist/i18n/locales/it.json +12 -15
  349. package/dist/i18n/locales/ja.json +13 -16
  350. package/dist/i18n/locales/ko.json +10 -13
  351. package/dist/i18n/locales/nb.json +13 -16
  352. package/dist/i18n/locales/nl.json +21 -24
  353. package/dist/i18n/locales/pl.json +10 -13
  354. package/dist/i18n/locales/{pt.json → pt-BR.json} +19 -22
  355. package/dist/i18n/locales/pt-PT.json +137 -0
  356. package/dist/i18n/locales/ro.json +22 -25
  357. package/dist/i18n/locales/ru.json +11 -14
  358. package/dist/i18n/locales/sv.json +16 -19
  359. package/dist/i18n/locales/tr.json +14 -17
  360. package/dist/i18n/locales/uk.json +11 -14
  361. package/dist/i18n/locales/{zh-cn.json → zh-CN.json} +10 -13
  362. package/dist/i18n/locales/zh-HK.json +137 -0
  363. package/dist/i18n/locales/zh-TW.json +137 -0
  364. package/dist/i18n/regionHints.d.ts +16 -0
  365. package/dist/i18n/regionHints.js +49 -0
  366. package/dist/i18n/regions.d.ts +286 -0
  367. package/dist/i18n/regions.js +265 -0
  368. package/dist/index.d.ts +4 -4
  369. package/dist/index.js +4 -4
  370. package/dist/llms-full.txt +1914 -1714
  371. package/dist/llms-medium.txt +76 -46
  372. package/dist/llms.txt +7 -7
  373. package/dist/locale-blueprint.json +16 -13
  374. package/dist/styles.css +2 -2
  375. package/dist/types/passthrough.d.ts +1 -1
  376. package/dist/types/ptComponentMap.d.ts +2 -2
  377. package/dist/utilities/functions/slotKey.d.ts +2 -2
  378. package/dist/utils/versionCheck.js +1 -1
  379. package/dist/vite-plugin.d.ts +22 -19
  380. package/dist/vite.js +309 -297
  381. package/llms.txt +7 -7
  382. package/package.json +5 -3
  383. package/scripts/lib/agent-manifest.mjs +2 -1
  384. package/scripts/lib/eslint-disable.mjs +17 -4
  385. package/scripts/lib/eslint-plugin.d.ts +9 -1
  386. package/scripts/lib/eslint-plugin.mjs +256 -6
  387. package/scripts/lib/helper-canon.mjs +176 -0
  388. package/scripts/lib/helpers-add.mjs +1303 -0
  389. package/scripts/lib/local-components.mjs +33 -4
  390. package/scripts/lib/locale-check.mjs +165 -0
  391. package/scripts/lib/portal-names.mjs +458 -0
  392. package/scripts/lib/redundant-item-accessor.mjs +398 -0
  393. package/scripts/lib/renamed-item-field.mjs +343 -0
  394. package/scripts/lib/slot-key.mjs +2 -2
  395. package/scripts/lib/slot-renames.mjs +1 -1
  396. package/scripts/lib/unimported-components.mjs +5 -2
  397. package/scripts/lib/validate-bb-markup.mjs +123 -56
  398. package/dist/i18n/index.js +0 -27
package/README.md CHANGED
@@ -327,13 +327,13 @@ part you need.
327
327
 
328
328
  ### CLI commands
329
329
 
330
- | Command | What it does |
331
- | ------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
332
- | `npx bitboss-ui ai-init [--update] [--no-mcp]` | Writes the agent pointer files and registers the MCP server (installs its optional peers). |
333
- | `npx bitboss-ui check [paths… \| --changed] [--fix] [--json]` | Validates `Bb*` markup in `.vue` / `.md` files against the installed version; `--fix` applies the v2 → v3 renames first; `--changed` checks only the files git sees changed vs HEAD (plus untracked). |
334
- | `npx bitboss-ui changelog --since <version> [--until <version>] [--json]` | Lists the **breaking** changes between the version you are on and the installed one — what breaks if you bump. |
335
- | `npx bitboss-ui mcp` | Starts the MCP server on stdio (harnesses launch it for you after `ai-init`). |
336
- | `npx bitboss-ui --help` | Every command and flag. |
330
+ | Command | What it does |
331
+ | ------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
332
+ | `npx bitboss-ui ai-init [--update] [--no-mcp]` | Writes the agent pointer files and registers the MCP server (installs its optional peers). |
333
+ | `npx bitboss-ui check [paths… \| --changed] [--fix] [--json]` | Validates `Bb*` markup in `.vue` / `.md` files against the installed version; `--fix` applies the library's renames first (v2 → v3, and between 3.0 betas); `--changed` checks only the files git sees changed vs HEAD (plus untracked). |
334
+ | `npx bitboss-ui changelog --since <version> [--until <version>] [--json]` | Lists the **breaking** changes between the version you are on and the installed one — what breaks if you bump. |
335
+ | `npx bitboss-ui mcp` | Starts the MCP server on stdio (harnesses launch it for you after `ai-init`). |
336
+ | `npx bitboss-ui --help` | Every command and flag. |
337
337
 
338
338
  ### ESLint plugin
339
339
 
@@ -533,6 +533,23 @@ const draft = reactive({ name: '' });
533
533
 
534
534
  `bitboss-ui check` reports the same as `form-v-model`.
535
535
 
536
+ #### Item fields: `no-renamed-item-field` and `no-redundant-item-accessor`
537
+
538
+ Dropdown, tab and breadcrumb items take `value` and `label` (dropdown groups:
539
+ `id`). `bitboss-ui/no-renamed-item-field` (error) rewrites an item literal still
540
+ spelled the old way: `{ key: 'edit', text: 'Edit' }` → `{ value: 'edit', label:
541
+ 'Edit' }` on a `BbDropdown` / `BbDropdownButton` row or a crumb, a tab's `key` →
542
+ `value`, a dropdown group's `key` → `id`.
543
+
544
+ Object items are read by their own `label` (else `text`) and `value`, so an
545
+ accessor naming those fields restates the default.
546
+ `bitboss-ui/no-redundant-item-accessor` (warn) deletes it: `item-text="label"`,
547
+ `item-value="value"`, and `item-text="text"` when no item has a `label`. It only
548
+ reports what removing cannot change.
549
+
550
+ `bitboss-ui check` reports the same as `renamed-item-field` and
551
+ `redundant-item-accessor`.
552
+
536
553
  #### Rating star colours: `no-star-color`
537
554
 
538
555
  `bitboss-ui/no-star-color` flags any colour utility in `BbRating`'s `pt:item`,
@@ -2852,7 +2852,7 @@ const SERVER_INSTRUCTIONS = [
2852
2852
  '- Which component: search_components (empty query = the whole catalog). One component: get_component({ name }), one line per member; members: [names] for whole rows, sections for prose.',
2853
2853
  '- A type in a props table (BbTableColumn, ButtonVariantType): get_component({ name }) returns its definition and values.',
2854
2854
  '- After writing markup: validate. Before custom CSS: list_tokens.',
2855
- '- An old name (v2 or earlier-beta prop, slot, pt key, class) that stopped working: search_docs(the old name). What a bump breaks: list_changes({ since: <your version> }), one line per change.',
2855
+ '- An old name (v2 or earlier-beta prop, slot, item field, pt key, class) that stopped working: search_docs(the old name). What a bump breaks: list_changes({ since: <your version> }), one line per change.',
2856
2856
  "- pt in <script> (a const, a wrapper's prop): type it <Name>Props['pt']; Pt* types are not exported.",
2857
2857
  '- Composables: get_composable. Whole pages: list_recipes, get_recipe (prose + files). Long docs answer with an outline: pass sections.',
2858
2858
  ].join('\n');
@@ -3018,9 +3018,21 @@ function buildServer() {
3018
3018
  .optional()
3019
3019
  .describe("Only this component's breaks, e.g. 'BbSelect'."),
3020
3020
  surface: z
3021
- .enum(['prop', 'slot', 'pt', 'cssVar', 'class', 'option', 'method'])
3021
+ .enum([
3022
+ 'prop',
3023
+ 'slot',
3024
+ 'pt',
3025
+ 'cssVar',
3026
+ 'class',
3027
+ 'option',
3028
+ 'method',
3029
+ 'event',
3030
+ 'item',
3031
+ ])
3022
3032
  .optional()
3023
- .describe('Only renames of this surface.'),
3033
+ .describe(
3034
+ 'Only renames of this surface (`item` = a field of an `items` entry, e.g. a dropdown row `key` → `value`).'
3035
+ ),
3024
3036
  kind: z
3025
3037
  .enum(['rename', 'behaviour'])
3026
3038
  .optional()
@@ -37,6 +37,9 @@
37
37
  * it may never have been one anywhere. `printFindingLegend` says
38
38
  * so in the output, because two migrating fleets each spent real
39
39
  * time discovering it the hard way.
40
+ * add Copy Inertia helpers into the app as files it owns
41
+ * (scripts/lib/helpers-add.mjs); `helpers list|diff|update`
42
+ * reports on them and refreshes the ones the app has not edited.
40
43
  * changelog Breaking changes between two releases — `--since <version>`
41
44
  * answers "what breaks if I bump", without MCP. Reads the
42
45
  * installed `dist/ai/changelog.json`.
@@ -78,6 +81,11 @@ import {
78
81
  import { applyBitbossFixes } from '../scripts/lib/check-fix.mjs';
79
82
  import { stringControlsFor } from '../scripts/lib/text-null-value.mjs';
80
83
  import { projectResolution } from '../scripts/lib/unimported-components.mjs';
84
+ import {
85
+ MAY_HAVE_PORTALS,
86
+ portalFindings,
87
+ projectPortalIndex,
88
+ } from '../scripts/lib/portal-names.mjs';
81
89
  import { cssClassFindings } from '../scripts/lib/css-class-check.mjs';
82
90
  import {
83
91
  cssLocalFindings,
@@ -88,6 +96,7 @@ import {
88
96
  HAND_IMPORTED_STYLES_EXTENSIONS,
89
97
  handImportedStylesFindings,
90
98
  } from '../scripts/lib/hand-imported-styles.mjs';
99
+ import { unknownLocaleFindings } from '../scripts/lib/locale-check.mjs';
91
100
  import { syncProjectVariantDts } from '../scripts/lib/project-variant-dts.mjs';
92
101
  import { refuseLinkedTarget } from '../scripts/lib/linked-target.mjs';
93
102
  import {
@@ -143,7 +152,7 @@ function coreRules(version) {
143
152
  3. **Prefer \`Bb*\` consumer components**; never use entries marked "Reference Only - Internal" unless the user explicitly asks for internals. (\`BbBaseButton\` and the \`BbBase*Icon\` glyphs are consumer API; the \`Common*\` building blocks are not.)
144
153
  4. **Never invent prop/event/slot names** — open \`${KNOWLEDGE_BASE}/<ComponentName>.md\` (Usage & Guidelines first) or its API file \`${KNOWLEDGE_BASE}/manifest/components/<ComponentName>.json\` (one member per line; the list is \`${KNOWLEDGE_BASE}/manifest/index.json\`). Never read \`components.json\` whole: it is the 1.2 MB file the tools use.
145
154
  5. **Icons**: discover names first; never invent them (\`${KNOWLEDGE_BASE}/guides/icons-policy.md\`).
146
- 6. **Item-driven components**: declarative \`items\` / \`item-text\` / \`item-value\`, \`dependencies\`, \`enforce-coherence\` — no manual watchers for coherence.
155
+ 6. **Item-driven components**: declarative \`items\` (an object row reads its own \`label\` and \`value\`; \`item-text\` / \`item-value\` only for other field names, never to restate those two), \`dependencies\`, \`enforce-coherence\` — no manual watchers for coherence.
147
156
  7. **Whole pages**: one recipe under \`${KNOWLEDGE_BASE}/recipes/{vue|nuxt|inertia}/\` (see the router table).
148
157
  8. **CSS near components**: \`${KNOWLEDGE_BASE}/guides/design-language.md\`. Paint as data is \`${KNOWLEDGE_BASE}/design-tokens.json\` and \`design-tokens.manifest.yaml\` (DESIGN.md-shaped). Grep \`--bb-*\`, not \`--color-*\` or \`--radius-*\`. A repo-root DESIGN.md is not this library. Two token tiers, and reaching for the wrong one is why apps end up re-skinning by class: \`--bb-*\` is the small GLOBAL theme tier (brand knobs, no numeric ramp — there is no \`--bb-primary-800\`), while each component declares its own **unprefixed** \`--*\` tokens for its look (\`.bb-table { --cell-h: 32px }\`). A missing \`--bb-*\` name is not a gap in the library — it means the knob you want is a component token. Set it on the element that DECLARES it (grep \`${KNOWLEDGE_BASE}/source/<ComponentName>.md\`); a value set further out is masked, not inherited. Prefer tokens, variants and \`pt\`; CSS on \`.bb-*__*\` internals is allowed for fine-tuning but unsupported: it can break on upgrade. \`.bb-common-*\` / \`.bb-field*\` internals: expect it to break. (\`.bb-base-button\` and the three \`.bb-base-*-icon\` glyph classes are consumer API — a supported hook, not an internal.) An override on an internal is a signal to check for a \`pt\` part or request one. A Tailwind utility on a \`Bb*\` component that does nothing is rule 9, not a library bug. One primary action per view region.
149
158
  9. **Tailwind v4 app: turn on cascade layers when you set bitboss-ui up**, not later when a class "doesn't work". In the build plugin: \`import { bitbossUi, TAILWIND_V4_LAYERS } from 'bitboss-ui/vite'\` and \`bitbossUi({ cssLayers: TAILWIND_V4_LAYERS })\` (Nuxt: \`bitboss: { cssLayers: TAILWIND_V4_LAYERS }\`, same import). Tailwind v4 emits layered CSS; without this the library's CSS is unlayered and beats every utility you put on a \`Bb*\` component or a \`pt:*\` part, whatever the specificity. With it, your utilities win. You still need the runtime plugin (\`app.use(bitbossUiPlugin)\`; Nuxt does it for you): it is what injects the sheet, into that layer. **Do not also \`@import 'bitboss-ui/styles.css'\`**: a hand import adds a second, unlayered copy and undoes the setting. Tailwind v3 or plain CSS: leave it unset. Details: \`${KNOWLEDGE_BASE}/guides/installation-and-plugin-setup.md\` § Cascade layers.
@@ -152,8 +161,9 @@ function coreRules(version) {
152
161
  12. **Never name your own components \`Bb…\`** — that prefix is bitboss-ui's. Use your app's prefix (\`App…\`, \`Acme…\`). \`check\` leaves an app's own \`Bb*\` component alone but warns: a future bitboss-ui component could take the name.
153
162
  13. **Set \`locale\` explicitly** in the build plugin (\`bitbossUi({ locale: 'it' })\` / nuxt \`bitboss: { locale: 'it' }\`) for any app that is not English: the built-in strings default to English (\`'en'\`, since 3.0.0-beta.41; it was \`'it'\`).
154
163
  14. **After writing bitboss-ui markup**, run \`npx bitboss-ui check\` — validates \`Bb*\` usage against the installed \`components.json\` and catches invented/removed props before review. In an edit loop, \`npx bitboss-ui check --changed\` checks only the files git sees changed; run the full check before you finish.
164
+ 15. **Inertia apps: install the app-side helpers with \`npx bitboss-ui add <name>\`** (\`useQueryObject\`, \`usePromiseForm\`, \`useTableContext\`, …; \`npx bitboss-ui helpers list\` names them). Never paste them from the guide. If \`add\` or \`helpers update\` refuses, stop and show the user its output and \`npx bitboss-ui helpers diff <name>\`; never edit \`bitboss-ui.lock.json\`, and never delete a helper file to get past a refusal.
155
165
 
156
- After upgrading bitboss-ui, re-run: \`npx bitboss-ui ai-init\``;
166
+ After upgrading bitboss-ui, re-run: \`npx bitboss-ui ai-init\` (Inertia apps: then \`npx bitboss-ui helpers update\`)`;
157
167
  }
158
168
 
159
169
  // A blank line after the start marker and before the end marker: an HTML
@@ -1083,6 +1093,43 @@ async function checkCommand(
1083
1093
  }
1084
1094
  }
1085
1095
 
1096
+ // Q63.8: portal names, judged against the whole project's declarations
1097
+ // and call sites (scripts too: `confirm({ portal })` lives there). A full
1098
+ // run reads every source file; explicit paths / `--changed`, only those.
1099
+ // Markdown fences are never read: a doc names portals it never declares.
1100
+ {
1101
+ const portalIndex = projectPortalIndex(projectRoot);
1102
+ const PORTAL_SOURCE = /\.(?:vue|[cm]?[jt]sx?)$/;
1103
+ const TEST_FILE = /\.(?:test|spec)(?:-d)?\.[cm]?[jt]sx?$/;
1104
+ const portalScope = (
1105
+ changed ? changed.all : globs.length ? files : projectSources
1106
+ ).filter(
1107
+ (path) =>
1108
+ PORTAL_SOURCE.test(path) &&
1109
+ !path.endsWith('.d.ts') &&
1110
+ !TEST_FILE.test(path)
1111
+ );
1112
+ for (const path of portalScope) {
1113
+ let content;
1114
+ try {
1115
+ content = readText(path);
1116
+ } catch {
1117
+ continue;
1118
+ }
1119
+ if (!MAY_HAVE_PORTALS.test(content)) continue;
1120
+ const isDisabled = disabledChecker(content);
1121
+ for (const finding of portalFindings(content, path, portalIndex)) {
1122
+ if (isDisabled(finding.line, ruleForFinding(finding))) {
1123
+ suppressed++;
1124
+ continue;
1125
+ }
1126
+ const entry = { file: relative(projectRoot, path), ...finding };
1127
+ if (finding.severity === 'warning') warnings.push(entry);
1128
+ else findings.push(entry);
1129
+ }
1130
+ }
1131
+ }
1132
+
1086
1133
  for (const [name, file] of projectLocal) warnLocal(name, file);
1087
1134
  // Q60.6: a `vue-tsc` below 3, read from package.json. One line, never
1088
1135
  // fatal. (A missing `checkUnknownComponents` is no longer warned about:
@@ -1105,6 +1152,16 @@ async function checkCommand(
1105
1152
  readText
1106
1153
  )
1107
1154
  );
1155
+ // A locale the library does not ship, in the build config and in
1156
+ // `setConfig({ locale })` (owner 2026-10-07: `en-UK` → `en-GB`).
1157
+ findings.push(
1158
+ ...unknownLocaleFindings(
1159
+ projectRoot,
1160
+ styleScan.map((path) => ({ path, relPath: relative(projectRoot, path) })),
1161
+ manifest,
1162
+ readText
1163
+ )
1164
+ );
1108
1165
  // Q46.5: `.bb-*` selectors in the app's stylesheets (the `.vue` `<style>`
1109
1166
  // blocks are read by the validator above).
1110
1167
  for (const path of styleScan) {
@@ -1298,6 +1355,37 @@ Commands:
1298
1355
  tsconfig unless it is already named (Nuxt: says where).
1299
1356
  \`--no-mcp\` skips the server and the install. Idempotent —
1300
1357
  safe to re-run after upgrades.
1358
+ add <id…> | --all [--dir <path>] [--dry-run] [--json]
1359
+ Copy Inertia helpers (\`helpers list\`; --all for every
1360
+ one) into the app as
1361
+ files it owns, with every file they import, and record
1362
+ them in bitboss-ui.lock.json. Creates missing files and
1363
+ adopts identical ones; never changes an existing file.
1364
+ Prints the install line for missing npm packages; never
1365
+ runs it. First run: --dir, else
1366
+ resources/js/composables/inertia-helpers (Laravel) or
1367
+ src/composables/inertia-helpers.
1368
+ helpers [list] [--json]
1369
+ Every helper id, what it does, its files and packages,
1370
+ and its state in this app.
1371
+ helpers diff [id…] [--json]
1372
+ The state of every installed helper file; with ids, the
1373
+ difference between your copy and this bitboss-ui's.
1374
+ Exit 1 when something differs. Comments never count as
1375
+ edits: a stale file's comments are replaced by update.
1376
+ helpers update [id…] [--dry-run] [--json]
1377
+ Replace helper files that hold an older bitboss-ui
1378
+ version (formatting does not matter); keep the files
1379
+ you edited; refuse a group of helpers where you edited a
1380
+ file bitboss-ui also changed. \`npm update bitboss-ui\`
1381
+ does not touch your copies: run this after upgrading.
1382
+ add/helpers exit codes: 0 done or nothing to do; 1 usage
1383
+ error or diff found a difference; 2 refused (add wrote
1384
+ nothing); 3 a precondition failed, nothing written; 4 a
1385
+ write failed and was rolled back. No --force: to take
1386
+ bitboss-ui's copy over your edit, delete the file and
1387
+ run add again. --yes is accepted and does nothing (the
1388
+ commands never prompt).
1301
1389
  check [glob…] [--changed] [--json] [--allow-empty] [--allow-component <Name>]
1302
1390
  [--no-hints] [--manifest <path>] [--fix]
1303
1391
  Validate \`Bb*\` markup in .vue/.md files against the
@@ -1330,8 +1418,8 @@ Commands:
1330
1418
  under \`--manifest\`.
1331
1419
 
1332
1420
  \`--fix\` first applies the ESLint plugin's fixes (the
1333
- registered v2→v3 renames, polarity flips and value
1334
- remaps) to the matched .vue files with ONLY the
1421
+ registered renames — v2→v3 and between 3.0 betas, item
1422
+ fields included — polarity flips and value remaps) to the matched .vue files with ONLY the
1335
1423
  bitboss-ui rules — your own ESLint config is not used —
1336
1424
  then reports what is left. Needs \`eslint\` and
1337
1425
  \`vue-eslint-parser\` in the project.
@@ -1388,9 +1476,18 @@ Commands:
1388
1476
  \`dist/\`), \`not-exported-type\` (a \`Pt*\` pt type
1389
1477
  imported from bitboss-ui: type pt through
1390
1478
  \`<Component>Props['pt']\` instead),
1391
- \`missing-key\` / \`duplicate-row-text\` (a
1392
- BbDropdown row or group that needs a \`key\`: selectable,
1393
- or identical keyless text in one group),
1479
+ \`missing-value\` / \`missing-id\` /
1480
+ \`duplicate-row-label\` (a BbDropdown row in a
1481
+ selectable group without a \`value\`, a selectable
1482
+ group without an \`id\`, or two value-less rows with
1483
+ the same \`label\` in one group; before
1484
+ 3.0.0-beta.49 \`missing-key\` / \`duplicate-row-text\`),
1485
+ \`renamed-item-field\` (a dropdown row \`key\` /
1486
+ \`text\`, a dropdown group \`key\`, a tab \`key\` or a
1487
+ crumb \`key\` / \`text\` in an inline or same-file
1488
+ items array: rows and crumbs take \`value\` /
1489
+ \`label\`, tabs \`value\`, groups \`id\`; \`--fix\`
1490
+ rewrites it),
1394
1491
  \`unknown-variant\` (a variant name from another
1395
1492
  library, e.g. \`danger\` on BbAlert / BbBadge; the
1396
1493
  message names ours),
@@ -1410,6 +1507,13 @@ Commands:
1410
1507
  \`v-bb-hover-card="user-card"\` without the inner
1411
1508
  quotes: an expression, not a portal name; write
1412
1509
  \`"'user-card'"\`),
1510
+ \`unknown-portal\` (\`v-bb-hover-card\` /
1511
+ \`v-bb-popover\` / \`confirm()\` names a portal no
1512
+ \`<…Portal name>\` in the project declares; did-you-mean
1513
+ in the message), \`portal-family-mismatch\` (a
1514
+ hover-card portal opened by \`v-bb-popover\`, or the
1515
+ other way round; literal names only, a \`:name\`
1516
+ binding or a non-literal call site is never judged),
1413
1517
  \`positional-provider\` (an \`items\` provider with
1414
1518
  positional arguments: it receives one object,
1415
1519
  \`({ query, reason, modelValue, signal })\`),
@@ -1439,17 +1543,23 @@ Commands:
1439
1543
  \`--fix\` rewrites it), \`missing-partner-prop\`,
1440
1544
  \`partner-prop\`,
1441
1545
  \`validated-only-prop\`, \`object-items-without-text\`
1442
- (object \`items\` with no \`item-text\`; reads only
1546
+ (object \`items\` with neither a \`label\` nor a
1547
+ \`text\` field and no \`item-text\`; reads only
1443
1548
  an inline array, or a \`const\` array, \`ref([…])\` or
1444
1549
  \`reactive([…])\` in the same file's
1445
- \`<script setup>\`), \`reserved-key\` (a key
1446
- whose slot name is one of the component's own slots,
1447
- e.g. a BbTable column keyed \`actions\`; read from the
1448
- manifest, same-file keys only), \`hand-imported-styles\`
1550
+ \`<script setup>\`), \`reserved-key\` (a column
1551
+ \`key\` or item \`value\` whose slot name is one of
1552
+ the component's own slots, e.g. a BbTable column keyed
1553
+ \`actions\`; read from the manifest, same-file items
1554
+ only), \`hand-imported-styles\`
1449
1555
  (\`bitboss-ui/styles.css\` imported in CSS, a script or
1450
1556
  Nuxt's \`css\` while \`injectStyles\` is on: delete it;
1451
1557
  read only when vite.config / nuxt.config says so),
1452
- \`unknown-class\` (a selector on a \`.bb-*\` class the
1558
+ \`unknown-locale\` (a \`locale\` / \`enabledLocales\`
1559
+ literal in vite.config / nuxt.config, or a
1560
+ \`setConfig({ locale })\`, that bitboss-ui does not
1561
+ ship; \`suggestion\` is the nearest one: en-UK →
1562
+ en-GB), \`unknown-class\` (a selector on a \`.bb-*\` class the
1453
1563
  library does not render, in a stylesheet or a
1454
1564
  \`<style>\` block; \`suggestion\` is the nearest real
1455
1565
  one), \`renamed-class\` (a class the library renamed;
@@ -1470,7 +1580,9 @@ Commands:
1470
1580
  component uses the \`Bb\` prefix; rename it),
1471
1581
  \`single-reason\` (an \`items\` provider that tests
1472
1582
  \`reason\` against one cause other than \`'search'\`;
1473
- check \`reason !== 'search'\`), \`vue-tsc-major\`
1583
+ check \`reason !== 'search'\`), \`unused-portal\` (a
1584
+ \`<…Portal name>\` nothing opens: no call site and the
1585
+ name in no string of the project), \`vue-tsc-major\`
1474
1586
  (\`vue-tsc\` below 3 in package.json: the generic
1475
1587
  components' props go unchecked).
1476
1588
  changelog [--since <version>] [--until <version>] [--json]
@@ -1615,6 +1727,47 @@ switch (command) {
1615
1727
  await main();
1616
1728
  break;
1617
1729
  }
1730
+ case 'add':
1731
+ case 'helpers': {
1732
+ const { values, positionals } = parseCommandArgs(
1733
+ command,
1734
+ commandArgs,
1735
+ {
1736
+ json: { type: 'boolean' },
1737
+ 'dry-run': { type: 'boolean' },
1738
+ yes: { type: 'boolean', short: 'y' },
1739
+ ...(command === 'add'
1740
+ ? { dir: { type: 'string' }, all: { type: 'boolean' } }
1741
+ : {}),
1742
+ },
1743
+ { allowPositionals: true }
1744
+ );
1745
+ const [sub, ...rest] =
1746
+ command === 'add' ? ['add', ...positionals] : positionals;
1747
+ const subcommand = command === 'add' ? 'add' : (sub ?? 'list');
1748
+ if (subcommand === 'list' && values['dry-run']) {
1749
+ console.error(
1750
+ '[bitboss-ui] helpers list: --dry-run applies to add and update'
1751
+ );
1752
+ process.exit(1);
1753
+ }
1754
+ const { runHelpers } = await import('../scripts/lib/helpers-add.mjs');
1755
+ const result = await runHelpers({
1756
+ command: subcommand,
1757
+ ids: command === 'add' ? positionals : rest,
1758
+ options: {
1759
+ dir: values.dir,
1760
+ dryRun: values['dry-run'] ?? false,
1761
+ all: values.all ?? false,
1762
+ },
1763
+ cwd: process.cwd(),
1764
+ packageRoot: PACKAGE_ROOT,
1765
+ });
1766
+ if (values.json) console.log(JSON.stringify(result.report));
1767
+ else (result.stderr ? console.error : console.log)(result.lines.join('\n'));
1768
+ process.exitCode = result.code;
1769
+ break;
1770
+ }
1618
1771
  case 'help':
1619
1772
  case '--help':
1620
1773
  case '-h':
@@ -643,7 +643,7 @@ A `pt` value written in `<script>` (a constant, a preset, a wrapper's
643
643
  | Prop | Type | Default | Required | Description |
644
644
  | --- | --- | --- | --- | --- |
645
645
  | `pt:<part>`, `pt:<part>:<state>`, `pt` | `PtValue` | | | Passthrough — a class list, or `{ class, style, attrs }`, bound to one named part of the component; the state form applies only while that state is on. Parts: `header`, `panel`, `root`. States: `open`. What each one is: _Passthrough parts and states_ below. `pt` is the object form with the same keys minus the prefix (`{ icon: '…', 'icon:loading': '…' }`). See `guides/passthrough.md`. In `<script>` a `pt` value is typed `BbAccordionProps['pt']` (`PtValue` is not exported): § Typing `pt` in `<script>`. |
646
- | `eager` | `boolean \| undefined` | `false` | | Prevents rendering content before it's made visible. |
646
+ | `eager` | `boolean \| undefined` | `false` | | Renders the content at mount, while closed, instead of on the first open. Closed content is `inert` and `aria-hidden` either way. |
647
647
  | `headingLevel` | `1 \| 2 \| 3 \| 4 \| 5 \| 6 \| undefined` | | | Wraps the header button in a heading of this level (`<h1>`–`<h6>`), the APG accordion shape, so the header joins the page's outline. Match the level to where the accordion sits (a section under an `<h2>` takes `3`). No visual change: the heading's margins and font are reset. Omitted, there is no heading. |
648
648
  | `id` | `string \| undefined` | | | The root's `id`; the header button's id (`<id>_header`) derives from it. Generated when omitted. |
649
649
  | `modelValue` | `boolean \| undefined` | `false` | | Used by v-model to trigger opening / closing the collapsible. An accordion with no `v-model` starts closed. |
@@ -257,7 +257,7 @@ const hiddenCount = computed(() => reviewers.length - maxVisible);
257
257
  }
258
258
 
259
259
  .stack :deep(.bb-avatar + .bb-avatar) {
260
- margin-left: -12px;
260
+ margin-inline-start: -12px;
261
261
  }
262
262
  </style>
263
263
  ```