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
@@ -0,0 +1,343 @@
1
+ /**
2
+ * `renamed-item-field` (Q64.2–Q64.5, owner 2026-10-07): the fields of the
3
+ * item objects the library reads were renamed, so a v2 or early-v3 item keeps
4
+ * rendering but silently loses its identity — a dropdown row with `key` is a
5
+ * value-less action row (disabled in a selectable group), a group with `key`
6
+ * is not selectable, a tab with `key` has no value, a crumb with `text` has no
7
+ * label. No runtime alias reads the old spelling: this finding, `check --fix`
8
+ * and the ESLint rule `bitboss-ui/no-renamed-item-field` rewrite it.
9
+ *
10
+ * - BbDropdown, BbDropdownButton and `v-bb-dropdown` rows: `key` → `value`,
11
+ * `text` → `label`; groups: `key` → `id`.
12
+ * - BbTabs / BbTabsRoot items: `key` → `value`.
13
+ * - BbBreadcrumbs items: `key` → `value`, `text` → `label`.
14
+ *
15
+ * Reach: object literals inside an `items` array the file spells — inline in
16
+ * the template, or a `<script setup>` const (`scriptSetupArrayConsts`) bound
17
+ * by name — including a dropdown's groups, nested arrays and submenus. Never
18
+ * the rows of a mapped (pipeline) group, which are app data read through
19
+ * `itemText` / `itemValue`. An object that already spells the new field, or
20
+ * spreads another object, is reported without a fix (rename it by hand).
21
+ * Items built elsewhere (a `computed`, an import, a fetch) are out of reach:
22
+ * typed ones fail `vue-tsc` (the old field is `never`).
23
+ *
24
+ * The rows below mirror `src/deprecation/ai-deprecations.json`'s
25
+ * `surface: 'item'` entries (`renamed-item-field.node.test.mjs` keeps them in
26
+ * step).
27
+ */
28
+ import { babelParse, parse } from 'vue/compiler-sfc';
29
+ import { libraryAliases, localBbImports } from './local-components.mjs';
30
+
31
+ const NODE_ELEMENT = 1;
32
+ const PROP_DIRECTIVE = 7;
33
+
34
+ /** The version the renames shipped in. */
35
+ export const ITEM_FIELD_SINCE = '3.0.0-beta.49';
36
+
37
+ const DROPDOWN = {
38
+ row: { key: 'value', text: 'label' },
39
+ group: { key: 'id' },
40
+ nested: true,
41
+ };
42
+
43
+ /**
44
+ * component → `{ row, group?, nested? }`: the renames of a row object and of
45
+ * a group object (old field → new field), and whether rows hold groups,
46
+ * nested arrays and submenus (the dropdown family).
47
+ */
48
+ export const ITEM_FIELD_RENAMES = {
49
+ BbDropdown: DROPDOWN,
50
+ BbDropdownButton: DROPDOWN,
51
+ BbTabs: { row: { key: 'value' } },
52
+ BbTabsRoot: { row: { key: 'value' } },
53
+ BbBreadcrumbs: { row: { key: 'value', text: 'label' } },
54
+ };
55
+
56
+ /** The directive whose value holds BbDropdown's items. */
57
+ const DROPDOWN_DIRECTIVE = 'bb-dropdown';
58
+
59
+ const NOUN = {
60
+ BbDropdown: { row: 'a BbDropdown row', group: 'a BbDropdown group' },
61
+ BbDropdownButton: {
62
+ row: 'a BbDropdownButton row',
63
+ group: 'a BbDropdownButton group',
64
+ },
65
+ BbTabs: { row: 'a BbTabs item' },
66
+ BbTabsRoot: { row: 'a BbTabsRoot item' },
67
+ BbBreadcrumbs: { row: 'a BbBreadcrumbs item' },
68
+ };
69
+
70
+ export const RENAMED_ITEM_FIELD_MESSAGES = {
71
+ rename: (noun, from, to) =>
72
+ `\`${from}\` on ${noun} is \`${to}\` since ${ITEM_FIELD_SINCE} — the old field is ignored, so the item ${
73
+ to === 'value'
74
+ ? 'has no value (no `v-model` value, no slot of its own)'
75
+ : to === 'id'
76
+ ? 'has no id (not selectable, no `<BbDropdownGroup>` binding, no slots)'
77
+ : 'has no label'
78
+ }. Rename it.`,
79
+ manual: (noun, from, to) =>
80
+ `\`${from}\` on ${noun} is \`${to}\` since ${ITEM_FIELD_SINCE}, but this object ${
81
+ to
82
+ ? `already has \`${to}\` or spreads another object`
83
+ : 'spreads another object'
84
+ }: rename it by hand.`,
85
+ };
86
+
87
+ export const RENAMED_ITEM_FIELD_HINT =
88
+ 'rows and crumbs are `{ label, value }`, tabs `{ value, label }`, dropdown groups `{ id, label, items }`';
89
+
90
+ const pascal = (tag) =>
91
+ tag.includes('-')
92
+ ? tag.replace(/(?:^|-)([a-z0-9])/g, (_, c) => c.toUpperCase())
93
+ : tag;
94
+
95
+ const unwrap = (node) => {
96
+ let current = node;
97
+ while (
98
+ current &&
99
+ [
100
+ 'TSAsExpression',
101
+ 'TSSatisfiesExpression',
102
+ 'TSNonNullExpression',
103
+ 'TSTypeAssertion',
104
+ 'ParenthesizedExpression',
105
+ ].includes(current.type)
106
+ )
107
+ current = current.expression;
108
+ return current;
109
+ };
110
+
111
+ const keyName = (property) =>
112
+ (property.type === 'ObjectProperty' || property.type === 'ObjectMethod') &&
113
+ !property.computed
114
+ ? property.key.type === 'Identifier'
115
+ ? property.key.name
116
+ : property.key.type === 'StringLiteral'
117
+ ? property.key.value
118
+ : undefined
119
+ : undefined;
120
+
121
+ const propertyOf = (object, key) =>
122
+ object.properties.find((p) => keyName(p) === key);
123
+
124
+ const isFunctionNode = (node) =>
125
+ node?.type === 'ObjectMethod' ||
126
+ node?.type === 'ArrowFunctionExpression' ||
127
+ node?.type === 'FunctionExpression';
128
+
129
+ const isTrue = (node) => {
130
+ const value = unwrap(node);
131
+ return (
132
+ (value?.type === 'BooleanLiteral' || value?.type === 'Literal') &&
133
+ value.value === true
134
+ );
135
+ };
136
+
137
+ /** Resolves an `items` expression to an ArrayExpression, or null. */
138
+ const arrayOf = (node, arrays) => {
139
+ const value = unwrap(node);
140
+ if (value?.type === 'ArrayExpression') return value;
141
+ if (value?.type === 'Identifier') return arrays?.get(value.name) ?? null;
142
+ return null;
143
+ };
144
+
145
+ const parseExpression = (content) => {
146
+ try {
147
+ const program = babelParse(`(${content})`, {
148
+ sourceType: 'module',
149
+ plugins: ['typescript'],
150
+ }).program;
151
+ return program.body[0]?.expression ?? null;
152
+ } catch {
153
+ return null;
154
+ }
155
+ };
156
+
157
+ /**
158
+ * Whether a dropdown entry is a group: `group: true`, `selectable` or
159
+ * `multiple` written, or a function `items` (a pipeline group) — the same
160
+ * rule as the component's `isGroup`.
161
+ */
162
+ const isDropdownGroup = (entry) => {
163
+ if (isTrue(propertyOf(entry, 'group')?.value)) return true;
164
+ if (propertyOf(entry, 'selectable') || propertyOf(entry, 'multiple'))
165
+ return true;
166
+ const items = propertyOf(entry, 'items');
167
+ return isFunctionNode(items) || isFunctionNode(unwrap(items?.value));
168
+ };
169
+
170
+ /** A mapped group's rows are app data, read through its mappers. */
171
+ const isMappedGroup = (entry) =>
172
+ ['itemText', 'itemValue', 'itemProps', 'max'].some((name) =>
173
+ propertyOf(entry, name)
174
+ );
175
+
176
+ /**
177
+ * @param {string} code a whole SFC (ranges are offsets into it) or a snippet
178
+ * @param {{ templateAst?: any, arrays?: Map<string, any>, library?: Parameters<typeof localBbImports>[1] }} [options]
179
+ * `arrays`: the file's script-setup array consts (`scriptSetupArrayConsts`)
180
+ * `library`: what counts as the library besides `bitboss-ui` (`isLibrarySource`)
181
+ * @returns {Array<{ component: string, attr: string, kind: 'renamed-item-field', line: number, message: string, hint: string, from: string, to: string, range?: [number, number], edit?: { range: [number, number], text: string } }>}
182
+ */
183
+ export function renamedItemFieldFindings(code, options = {}) {
184
+ if (!/\b(key|text)\b/.test(code)) return [];
185
+ let descriptor = null;
186
+ try {
187
+ ({ descriptor } = parse(code, { sourceMap: false }));
188
+ } catch {
189
+ descriptor = null;
190
+ }
191
+ const ast = options.templateAst ?? descriptor?.template?.ast;
192
+ if (!ast) return [];
193
+ // Offsets are only trusted on the file's own template AST.
194
+ const ranged =
195
+ !options.templateAst || options.templateAst === descriptor?.template?.ast;
196
+ const arrays = options.arrays;
197
+ const aliases = libraryAliases(code);
198
+ const own = localBbImports(code, options.library);
199
+ const scriptOffset = descriptor?.scriptSetup?.loc.start.offset ?? 0;
200
+ const scriptLine = descriptor?.scriptSetup?.loc.start.line ?? 1;
201
+ const findings = [];
202
+ const seenObjects = new Set();
203
+
204
+ /** One object's renames (a row or a group). */
205
+ const checkObject = (object, component, level, base, attr) => {
206
+ if (seenObjects.has(object)) return;
207
+ seenObjects.add(object);
208
+ const renames = ITEM_FIELD_RENAMES[component][level] ?? {};
209
+ const spreads = object.properties.some((p) => p.type === 'SpreadElement');
210
+ const noun = NOUN[component][level];
211
+ for (const [from, to] of Object.entries(renames)) {
212
+ const property = propertyOf(object, from);
213
+ if (!property || property.type !== 'ObjectProperty') continue;
214
+ const fixable = !spreads && !propertyOf(object, to);
215
+ const key = property.key;
216
+ const keyText =
217
+ key.type === 'StringLiteral'
218
+ ? code.slice(base.offset + key.start, base.offset + key.end)
219
+ : null;
220
+ findings.push({
221
+ component,
222
+ attr,
223
+ kind: 'renamed-item-field',
224
+ from,
225
+ to,
226
+ line: base.line + property.loc.start.line - 1,
227
+ message: fixable
228
+ ? RENAMED_ITEM_FIELD_MESSAGES.rename(noun, from, to)
229
+ : RENAMED_ITEM_FIELD_MESSAGES.manual(noun, from, to),
230
+ hint: RENAMED_ITEM_FIELD_HINT,
231
+ ...(base.offset !== null
232
+ ? {
233
+ range: [base.offset + property.start, base.offset + property.end],
234
+ ...(fixable
235
+ ? {
236
+ edit: property.shorthand
237
+ ? {
238
+ // `{ key }` → `{ value: key }`
239
+ range: [
240
+ base.offset + property.start,
241
+ base.offset + property.end,
242
+ ],
243
+ text: `${to}: ${from}`,
244
+ }
245
+ : {
246
+ range: [
247
+ base.offset + key.start,
248
+ base.offset + key.end,
249
+ ],
250
+ text: keyText
251
+ ? `${keyText[0]}${to}${keyText[0]}`
252
+ : to,
253
+ },
254
+ }
255
+ : {}),
256
+ }
257
+ : {}),
258
+ });
259
+ }
260
+ };
261
+
262
+ /** The rows of one array (and, for the dropdown family, what they hold). */
263
+ const checkArray = (array, component, base, attr) => {
264
+ const nested = ITEM_FIELD_RENAMES[component].nested;
265
+ for (const raw of array.elements) {
266
+ const entry = unwrap(raw);
267
+ if (nested && entry?.type === 'ArrayExpression') {
268
+ checkArray(entry, component, base, attr);
269
+ continue;
270
+ }
271
+ if (entry?.type !== 'ObjectExpression') continue;
272
+ const items = propertyOf(entry, 'items');
273
+ const children =
274
+ items?.type === 'ObjectProperty' ? arrayOf(items.value, arrays) : null;
275
+ if (nested && isDropdownGroup(entry)) {
276
+ checkObject(entry, component, 'group', base, attr);
277
+ if (children && !isMappedGroup(entry))
278
+ checkArray(children, component, siteOf(children, base), attr);
279
+ continue;
280
+ }
281
+ checkObject(entry, component, 'row', base, attr);
282
+ // A submenu is a row's `items`: rows again.
283
+ if (nested && children)
284
+ checkArray(children, component, siteOf(children, base), attr);
285
+ }
286
+ };
287
+
288
+ /**
289
+ * Where an array's offsets count from: a script const lives in the script
290
+ * block, whatever expression reached it.
291
+ */
292
+ const scriptArrays = new Set(arrays ? [...arrays.values()] : []);
293
+ const scriptBase = {
294
+ offset: ranged && descriptor?.scriptSetup ? scriptOffset : null,
295
+ line: scriptLine,
296
+ };
297
+ const siteOf = (array, base) => (scriptArrays.has(array) ? scriptBase : base);
298
+
299
+ const seenArrays = new Set();
300
+ const checkValue = (prop, component, attr) => {
301
+ const expression = parseExpression(prop.exp?.content ?? '');
302
+ let value = unwrap(expression);
303
+ // `v-bb-dropdown="{ items: [...], … }"`
304
+ if (value?.type === 'ObjectExpression') {
305
+ const items = propertyOf(value, 'items');
306
+ if (items?.type !== 'ObjectProperty') return;
307
+ value = unwrap(items.value);
308
+ }
309
+ // `(` was prepended to the expression before parsing.
310
+ const templateBase = {
311
+ offset: ranged ? prop.exp.loc.start.offset - 1 : null,
312
+ line: prop.exp.loc.start.line,
313
+ };
314
+ const array = arrayOf(value, arrays);
315
+ if (!array || seenArrays.has(array)) return;
316
+ seenArrays.add(array);
317
+ checkArray(array, component, siteOf(array, templateBase), attr);
318
+ };
319
+
320
+ const walk = (node) => {
321
+ if (!node || typeof node !== 'object') return;
322
+ if (node.type === NODE_ELEMENT) {
323
+ const written = pascal(node.tag);
324
+ const component = own.has(node.tag)
325
+ ? null
326
+ : (aliases.get(node.tag) ?? aliases.get(written) ?? written);
327
+ for (const prop of node.props ?? []) {
328
+ if (prop.type !== PROP_DIRECTIVE) continue;
329
+ if (prop.name === DROPDOWN_DIRECTIVE) {
330
+ checkValue(prop, 'BbDropdown', 'v-bb-dropdown');
331
+ continue;
332
+ }
333
+ if (!component || !ITEM_FIELD_RENAMES[component]) continue;
334
+ if (prop.name !== 'bind' || !prop.arg?.isStatic) continue;
335
+ if (prop.arg.content !== 'items') continue;
336
+ checkValue(prop, component, ':items');
337
+ }
338
+ }
339
+ for (const child of node.children ?? []) walk(child);
340
+ };
341
+ walk(ast);
342
+ return findings;
343
+ }
@@ -3,7 +3,7 @@
3
3
  // source; scripts/lib/slot-key.node.test.mjs fuzzes the two against each other,
4
4
  // so an edit to one without the other fails the suite.
5
5
  /**
6
- * Normalizes an arbitrary item/column key into a template-safe slot name, by
6
+ * Normalizes an item value or column key into a template-safe slot name, by
7
7
  * lodash's `kebabCase` rules (owner ruling Q53.15, 2026-09-24; our own
8
8
  * implementation, no lodash dependency): accents are stripped (Latin-1 and
9
9
  * Latin Extended-A), the key is split into words (camelCase humps, acronyms,
@@ -15,7 +15,7 @@
15
15
  *
16
16
  * Shared by every component that exposes dynamic per-item named slots
17
17
  * (BbDropdown, BbTable, BbBreadcrumbs, BbTree, BbCalendar / BbDatePicker,
18
- * BbTabs) so a given key resolves to the same slot name everywhere.
18
+ * BbTabs) so a given value resolves to the same slot name everywhere.
19
19
  * `ColumnName` is the type-level mirror of this rule for ASCII keys — keep the
20
20
  * two in sync. Known collisions: `-5` / `5`; `aB` / `a_b` / `a-b` / `a b`.
21
21
  */
@@ -38,7 +38,7 @@ export function renamedSlot(rows, name) {
38
38
  if (!match || match[1].includes(':')) continue;
39
39
  const to = row.new ? row.new.replace('<x>', match[1]) : null;
40
40
  // A self-rename is today's name (`label:<x>` → `<x>:label` for a tab
41
- // keyed `label`, Q59).
41
+ // whose value is `label`, Q59).
42
42
  if (to !== name) return { to, since: row.since, hint: row.hint };
43
43
  }
44
44
  return null;
@@ -90,8 +90,11 @@ const SKIP = new Set([
90
90
  const SCRIPT = /\.(?:[cm]?[jt]s|vue)$/;
91
91
  const TEST = /\.(?:test|spec)(?:-d)?\.[cm]?[jt]s$/;
92
92
 
93
- /** Files under the root worth reading (bounded, like `check`'s sweep). */
94
- function walk(root, depth = 0, out = []) {
93
+ /**
94
+ * Files under the root worth reading (bounded, like `check`'s sweep): scripts,
95
+ * `.vue` files and `.d.ts`, never tests. Shared with portal-names.mjs.
96
+ */
97
+ export function walk(root, depth = 0, out = []) {
95
98
  if (depth > 8 || out.length > 20000) return out;
96
99
  let entries = [];
97
100
  try {