bitboss-ui 3.0.0-beta.48 → 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 (356) hide show
  1. package/README.md +24 -7
  2. package/bin/bitboss-ui-mcp.mjs +15 -3
  3. package/bin/bitboss-ui.mjs +115 -13
  4. package/dist/ai/BbAvatar.md +1 -1
  5. package/dist/ai/BbBreadcrumbs.md +65 -65
  6. package/dist/ai/BbButton.md +16 -5
  7. package/dist/ai/BbCheckbox.md +0 -2
  8. package/dist/ai/BbCheckboxGroup.md +13 -20
  9. package/dist/ai/BbDatePickerInput.md +4 -2
  10. package/dist/ai/BbDialog.md +1 -8
  11. package/dist/ai/BbDropdown.md +231 -220
  12. package/dist/ai/BbDropdownButton.md +65 -65
  13. package/dist/ai/BbDropdownGroup.md +2 -2
  14. package/dist/ai/BbDropzone.md +10 -10
  15. package/dist/ai/BbForm.md +43 -52
  16. package/dist/ai/BbHoverCard.md +4 -2
  17. package/dist/ai/BbNumberInput.md +88 -21
  18. package/dist/ai/BbPopover.md +29 -23
  19. package/dist/ai/BbProgress.md +48 -22
  20. package/dist/ai/BbRadioGroup.md +13 -19
  21. package/dist/ai/BbSelect.md +16 -36
  22. package/dist/ai/BbSelectPopover.md +14 -30
  23. package/dist/ai/BbSmoothHeight.md +0 -2
  24. package/dist/ai/BbSwitchGroup.md +13 -20
  25. package/dist/ai/BbTable.md +11 -10
  26. package/dist/ai/BbTabs.md +106 -105
  27. package/dist/ai/BbTabsList.md +2 -2
  28. package/dist/ai/BbTabsPanels.md +1 -1
  29. package/dist/ai/BbTabsRoot.md +2 -2
  30. package/dist/ai/BbTooltip.md +24 -10
  31. package/dist/ai/BbTree.md +14 -11
  32. package/dist/ai/changelog.json +256 -5
  33. package/dist/ai/components.json +36 -34
  34. package/dist/ai/composables/useBbDropdownContext.md +16 -16
  35. package/dist/ai/composables/useBbFormField.md +5 -1
  36. package/dist/ai/composables/useBbTabsContext.md +14 -14
  37. package/dist/ai/guides/agent-contract.md +27 -27
  38. package/dist/ai/guides/ai-router.md +1 -1
  39. package/dist/ai/guides/component-picker.md +3 -3
  40. package/dist/ai/guides/fetch-items-playbook.md +1 -1
  41. package/dist/ai/guides/icons-policy.md +10 -10
  42. package/dist/ai/guides/inertia-helpers.md +120 -67
  43. package/dist/ai/guides/installation-and-plugin-setup.md +43 -15
  44. package/dist/ai/guides/migration/components/bb-breadcrumbs.md +3 -2
  45. package/dist/ai/guides/migration/components/bb-checkbox-group.md +16 -16
  46. package/dist/ai/guides/migration/components/bb-dropdown-button.md +9 -8
  47. package/dist/ai/guides/migration/components/bb-dropdown.md +15 -14
  48. package/dist/ai/guides/migration/components/bb-radio-group.md +2 -1
  49. package/dist/ai/guides/migration/components/bb-select-popover.md +6 -1
  50. package/dist/ai/guides/migration/components/bb-select.md +10 -2
  51. package/dist/ai/guides/migration/components/bb-switch-group.md +2 -1
  52. package/dist/ai/guides/migration/components/bb-tabs.md +9 -8
  53. package/dist/ai/guides/migration/components/bb-tooltip.md +1 -1
  54. package/dist/ai/guides/migration/v2-to-v3.md +114 -17
  55. package/dist/ai/guides/migration/v3-beta-tooling.md +11 -0
  56. package/dist/ai/guides/options-items-playbook.md +30 -24
  57. package/dist/ai/guides/passthrough.md +2 -2
  58. package/dist/ai/guides/preset-components.md +18 -3
  59. package/dist/ai/guides/typescript-generic-components.md +1 -1
  60. package/dist/ai/guides/validated-forms.md +11 -22
  61. package/dist/ai/guides/validation-providers.md +4 -3
  62. package/dist/ai/helpers/inertia/manifest.json +636 -0
  63. package/dist/ai/helpers/inertia/types.ts +15 -0
  64. package/dist/ai/helpers/inertia/useAsyncFn.ts +110 -0
  65. package/dist/ai/helpers/inertia/useConfirmOnRouteLeave.ts +102 -0
  66. package/dist/ai/helpers/inertia/useDeleteCmd.ts +30 -0
  67. package/dist/ai/helpers/inertia/useHasChanged.ts +36 -0
  68. package/dist/ai/helpers/inertia/useIndexById.ts +23 -0
  69. package/dist/ai/helpers/inertia/useLazyProp.ts +148 -0
  70. package/dist/ai/helpers/inertia/useLazyPropGetter.ts +50 -0
  71. package/dist/ai/helpers/inertia/useLoading.ts +20 -0
  72. package/dist/ai/helpers/inertia/usePaginatedResponseContext.ts +88 -0
  73. package/dist/ai/helpers/inertia/usePromiseForm.ts +62 -0
  74. package/dist/ai/helpers/inertia/useProp.ts +63 -0
  75. package/dist/ai/helpers/inertia/useQuery.ts +19 -0
  76. package/dist/ai/helpers/inertia/useQueryObject.ts +116 -0
  77. package/dist/ai/helpers/inertia/useResourceContext.ts +69 -0
  78. package/dist/ai/helpers/inertia/useRouteQuery.ts +54 -0
  79. package/dist/ai/helpers/inertia/useScreenSizes.ts +23 -0
  80. package/dist/ai/helpers/inertia/useTableContext.ts +34 -0
  81. package/dist/ai/helpers/inertia/useTableSelectionContext.ts +48 -0
  82. package/dist/ai/helpers/inertia/useUntil.ts +33 -0
  83. package/dist/ai/helpers/inertia/utils.ts +24 -0
  84. package/dist/ai/index.md +6 -6
  85. package/dist/ai/manifest/components/BbBreadcrumbs.json +10 -6
  86. package/dist/ai/manifest/components/BbBreadcrumbs.tree.json +1 -1
  87. package/dist/ai/manifest/components/BbButton.json +1 -1
  88. package/dist/ai/manifest/components/BbCheckboxGroup.json +2 -2
  89. package/dist/ai/manifest/components/BbDropdown.json +23 -20
  90. package/dist/ai/manifest/components/BbDropdown.tree.json +2 -2
  91. package/dist/ai/manifest/components/BbDropdownButton.json +22 -19
  92. package/dist/ai/manifest/components/BbDropdownButton.tree.json +1 -1
  93. package/dist/ai/manifest/components/BbDropdownGroup.json +2 -2
  94. package/dist/ai/manifest/components/BbForm.json +1 -0
  95. package/dist/ai/manifest/components/BbNumberInput.json +6 -1
  96. package/dist/ai/manifest/components/BbNumberInput.tree.json +2 -1
  97. package/dist/ai/manifest/components/BbPopover.json +1 -0
  98. package/dist/ai/manifest/components/BbProgress.json +6 -6
  99. package/dist/ai/manifest/components/BbProgress.tree.json +1 -0
  100. package/dist/ai/manifest/components/BbRadioGroup.json +2 -2
  101. package/dist/ai/manifest/components/BbSelect.json +2 -2
  102. package/dist/ai/manifest/components/BbSelectPopover.json +2 -2
  103. package/dist/ai/manifest/components/BbSwitchGroup.json +2 -2
  104. package/dist/ai/manifest/components/BbTabs.json +7 -6
  105. package/dist/ai/manifest/components/BbTabsList.json +3 -3
  106. package/dist/ai/manifest/components/BbTabsPanels.json +1 -1
  107. package/dist/ai/manifest/components/BbTabsRoot.json +5 -4
  108. package/dist/ai/manifest/components/BbTooltip.json +1 -1
  109. package/dist/ai/manifest/index.json +2 -2
  110. package/dist/ai/manifest/meta.json +2 -0
  111. package/dist/ai/manifest/types.advanced.json +10 -9
  112. package/dist/ai/manifest/types.api.json +5 -4
  113. package/dist/ai/recipes/inertia/approvals-inbox.md +16 -18
  114. package/dist/ai/recipes/inertia/inline-edit-workspace.md +23 -33
  115. package/dist/ai/recipes/inertia/layout-scaffold.md +16 -16
  116. package/dist/ai/recipes/inertia/onboarding.md +6 -10
  117. package/dist/ai/recipes/inertia/ownership-atlas.md +15 -18
  118. package/dist/ai/recipes/inertia/record-form.md +11 -11
  119. package/dist/ai/recipes/inertia/records-workspace.md +38 -41
  120. package/dist/ai/recipes/inertia/settings-workspace.md +26 -38
  121. package/dist/ai/recipes/inertia/upload-center.md +31 -39
  122. package/dist/ai/recipes/inertia/wizard-form.md +10 -19
  123. package/dist/ai/recipes/nuxt/approvals-inbox.md +7 -8
  124. package/dist/ai/recipes/nuxt/inline-edit-workspace.md +14 -24
  125. package/dist/ai/recipes/nuxt/layout-scaffold.md +16 -16
  126. package/dist/ai/recipes/nuxt/onboarding.md +2 -6
  127. package/dist/ai/recipes/nuxt/ownership-atlas.md +7 -9
  128. package/dist/ai/recipes/nuxt/record-form.md +5 -5
  129. package/dist/ai/recipes/nuxt/records-workspace.md +29 -31
  130. package/dist/ai/recipes/nuxt/settings-workspace.md +22 -34
  131. package/dist/ai/recipes/nuxt/upload-center.md +22 -29
  132. package/dist/ai/recipes/nuxt/wizard-form.md +3 -11
  133. package/dist/ai/recipes/vue/approvals-inbox.md +7 -8
  134. package/dist/ai/recipes/vue/inline-edit-workspace.md +14 -24
  135. package/dist/ai/recipes/vue/layout-scaffold.md +16 -16
  136. package/dist/ai/recipes/vue/onboarding.md +2 -6
  137. package/dist/ai/recipes/vue/ownership-atlas.md +7 -9
  138. package/dist/ai/recipes/vue/record-form.md +5 -5
  139. package/dist/ai/recipes/vue/records-workspace.md +29 -31
  140. package/dist/ai/recipes/vue/settings-workspace.md +22 -34
  141. package/dist/ai/recipes/vue/upload-center.md +22 -29
  142. package/dist/ai/recipes/vue/wizard-form.md +3 -11
  143. package/dist/ai/source/BbAccordion.md +1 -1
  144. package/dist/ai/source/BbAlert.md +3 -3
  145. package/dist/ai/source/BbBadge.md +2 -2
  146. package/dist/ai/source/BbBadgeButton.md +5 -4
  147. package/dist/ai/source/BbBaseButton.md +1 -1
  148. package/dist/ai/source/BbBaseRadioIcon.md +1 -0
  149. package/dist/ai/source/BbBaseSwitchIcon.md +1 -0
  150. package/dist/ai/source/BbBreadcrumbs.md +63 -42
  151. package/dist/ai/source/BbButton.md +71 -33
  152. package/dist/ai/source/BbCalendar.md +17 -16
  153. package/dist/ai/source/BbCheckbox.md +3 -2
  154. package/dist/ai/source/BbCheckboxGroup.md +11 -4
  155. package/dist/ai/source/BbColorInput.md +10 -9
  156. package/dist/ai/source/BbConfirm.md +1 -1
  157. package/dist/ai/source/BbConfirmPortal.md +1 -1
  158. package/dist/ai/source/BbDatePicker.md +2 -2
  159. package/dist/ai/source/BbDatePickerInput.md +47 -20
  160. package/dist/ai/source/BbDialog.md +5 -5
  161. package/dist/ai/source/BbDropdown.md +230 -158
  162. package/dist/ai/source/BbDropdownButton.md +19 -12
  163. package/dist/ai/source/BbDropdownGroup.md +126 -93
  164. package/dist/ai/source/BbForm.md +25 -1
  165. package/dist/ai/source/BbIndicator.md +4 -0
  166. package/dist/ai/source/BbNumberInput.md +855 -19
  167. package/dist/ai/source/BbOffCanvas.md +27 -11
  168. package/dist/ai/source/BbPagination.md +3 -3
  169. package/dist/ai/source/BbPopover.md +152 -8
  170. package/dist/ai/source/BbPopoverPortal.md +11 -0
  171. package/dist/ai/source/BbProgress.md +82 -18
  172. package/dist/ai/source/BbRadioGroup.md +12 -5
  173. package/dist/ai/source/BbRating.md +11 -9
  174. package/dist/ai/source/BbSelect.md +16 -10
  175. package/dist/ai/source/BbSelectPopover.md +29 -23
  176. package/dist/ai/source/BbSlider.md +12 -6
  177. package/dist/ai/source/BbSwitch.md +3 -2
  178. package/dist/ai/source/BbSwitchGroup.md +5 -2
  179. package/dist/ai/source/BbTable.md +102 -18
  180. package/dist/ai/source/BbTabs.md +27 -23
  181. package/dist/ai/source/BbTabsList.md +26 -22
  182. package/dist/ai/source/BbTabsPanels.md +26 -22
  183. package/dist/ai/source/BbTabsRoot.md +25 -21
  184. package/dist/ai/source/BbTag.md +10 -9
  185. package/dist/ai/source/BbTextInput.md +5 -4
  186. package/dist/ai/source/BbTextarea.md +6 -5
  187. package/dist/ai/source/BbTimePicker.md +1 -1
  188. package/dist/ai/source/BbTimePickerInput.md +46 -9
  189. package/dist/ai/source/BbToast.md +10 -7
  190. package/dist/ai/source/BbToastPortal.md +10 -7
  191. package/dist/ai/source/BbTooltip.md +54 -8
  192. package/dist/ai/source/BbTree.md +21 -3
  193. package/dist/ai/source/CommonField.md +6 -4
  194. package/dist/ai/source/CommonFieldInput.md +15 -10
  195. package/dist/ai/source/CommonPopover.md +6 -0
  196. package/dist/ai/source/CommonTimeSelector.md +5 -4
  197. package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +10 -8
  198. package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +8 -8
  199. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +45 -45
  200. package/dist/components/BbBreadcrumbs/types.d.ts +25 -17
  201. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +84 -71
  202. package/dist/components/BbButton/toggleRoving.d.ts +6 -0
  203. package/dist/components/BbButton/toggleRoving.js +45 -0
  204. package/dist/components/BbButton/types.d.ts +4 -1
  205. package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +178 -178
  206. package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +15 -15
  207. package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +28 -28
  208. package/dist/components/BbCalendar/useCalendarGrid.js +141 -139
  209. package/dist/components/BbCalendar/useDayjsLocale.d.ts +38 -15
  210. package/dist/components/BbCalendar/useDayjsLocale.js +31 -30
  211. package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +48 -48
  212. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +81 -80
  213. package/dist/components/BbCheckboxGroup/types.d.ts +6 -2
  214. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +69 -69
  215. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +363 -349
  216. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +91 -86
  217. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +298 -289
  218. package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +322 -356
  219. package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +17 -15
  220. package/dist/components/BbDropdown/DropdownRow.vue.d.ts +40 -0
  221. package/dist/components/BbDropdown/DropdownRow.vue.js +5 -0
  222. package/dist/components/BbDropdown/DropdownRow.vue_vue_type_script_setup_true_lang.js +60 -0
  223. package/dist/components/BbDropdown/normalizeGroups.d.ts +8 -2
  224. package/dist/components/BbDropdown/normalizeGroups.js +60 -46
  225. package/dist/components/BbDropdown/types.d.ts +119 -88
  226. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +11 -2
  227. package/dist/components/BbDropdownButton/types.d.ts +2 -2
  228. package/dist/components/BbForm/BbForm.vue.d.ts +9 -0
  229. package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +114 -105
  230. package/dist/components/BbForm/BbFormCustomField.js +1 -1
  231. package/dist/components/BbForm/bindFormField.js +2 -1
  232. package/dist/components/BbForm/formFields.d.ts +5 -0
  233. package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +0 -1
  234. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +452 -125
  235. package/dist/components/BbNumberInput/numberDisplay.d.ts +256 -0
  236. package/dist/components/BbNumberInput/numberDisplay.js +499 -0
  237. package/dist/components/BbNumberInput/types.d.ts +54 -1
  238. package/dist/components/BbNumberInput/warroom/corpus.d.ts +58 -0
  239. package/dist/components/BbNumberInput/warroom/currency-verify.rows.d.ts +28 -0
  240. package/dist/components/BbNumberInput/warroom/currency.rows.d.ts +2 -0
  241. package/dist/components/BbNumberInput/warroom/harness.d.ts +217 -0
  242. package/dist/components/BbNumberInput/warroom/oracle.d.ts +150 -0
  243. package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +7 -7
  244. package/dist/components/BbPopover/BbPopover.vue.d.ts +1 -0
  245. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +207 -164
  246. package/dist/components/BbPopover/types.d.ts +11 -0
  247. package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +15 -7
  248. package/dist/components/BbProgress/types.d.ts +23 -7
  249. package/dist/components/BbProgress/types.js +1 -1
  250. package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +102 -101
  251. package/dist/components/BbRadioGroup/types.d.ts +6 -2
  252. package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +63 -63
  253. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +156 -154
  254. package/dist/components/BbSelect/types.d.ts +6 -2
  255. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +2 -1
  256. package/dist/components/BbSelectPopover/types.d.ts +6 -2
  257. package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +153 -153
  258. package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +62 -62
  259. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +131 -130
  260. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +711 -676
  261. package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +1 -1
  262. package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +1 -1
  263. package/dist/components/BbTabs/types.d.ts +25 -21
  264. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +76 -76
  265. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +58 -58
  266. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +82 -82
  267. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +246 -236
  268. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +102 -97
  269. package/dist/components/BbTooltip/tooltipWarmup.d.ts +23 -0
  270. package/dist/components/BbTooltip/tooltipWarmup.js +7 -0
  271. package/dist/components/BbTooltip/types.d.ts +7 -2
  272. package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +29 -21
  273. package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +10 -7
  274. package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +37 -36
  275. package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +9 -9
  276. package/dist/composables/formSubmitLock.d.ts +6 -0
  277. package/dist/composables/formSubmitLock.js +4 -0
  278. package/dist/composables/useBaseOptions.d.ts +7 -1
  279. package/dist/composables/useBaseOptions.js +32 -32
  280. package/dist/composables/useBbDropdownContext.d.ts +8 -8
  281. package/dist/composables/useBbFormField.d.ts +9 -0
  282. package/dist/composables/useBbFormField.js +5 -3
  283. package/dist/composables/useBbTabsContext.d.ts +10 -10
  284. package/dist/composables/useBbTabsContext.js +18 -18
  285. package/dist/composables/useFormBinding.d.ts +11 -0
  286. package/dist/composables/useFormBinding.js +15 -13
  287. package/dist/composables/useItemText.d.ts +5 -1
  288. package/dist/composables/useItemText.js +8 -3
  289. package/dist/composables/useItemValue.d.ts +5 -1
  290. package/dist/composables/useItemValue.js +8 -3
  291. package/dist/composables/useLocale.js +10 -9
  292. package/dist/deprecation/ai-deprecations.json.d.ts +130 -0
  293. package/dist/deprecation/ai-deprecations.json.js +1 -1
  294. package/dist/deprecation/removedProps.js +1 -1
  295. package/dist/directives/bbDropdown.js +1 -1
  296. package/dist/i18n/index.d.ts +7 -12
  297. package/dist/i18n/locales/cs.json +11 -14
  298. package/dist/i18n/locales/da.json +13 -16
  299. package/dist/i18n/locales/de-CH.json +137 -0
  300. package/dist/i18n/locales/de.json +14 -17
  301. package/dist/i18n/locales/el.json +10 -13
  302. package/dist/i18n/locales/en-GB.json +137 -0
  303. package/dist/i18n/locales/en.json +8 -11
  304. package/dist/i18n/locales/es-MX.json +137 -0
  305. package/dist/i18n/locales/es.json +16 -19
  306. package/dist/i18n/locales/fi.json +8 -11
  307. package/dist/i18n/locales/fr.json +23 -26
  308. package/dist/i18n/locales/hu.json +8 -11
  309. package/dist/i18n/locales/it.json +12 -15
  310. package/dist/i18n/locales/ja.json +13 -16
  311. package/dist/i18n/locales/ko.json +10 -13
  312. package/dist/i18n/locales/nb.json +13 -16
  313. package/dist/i18n/locales/nl.json +21 -24
  314. package/dist/i18n/locales/pl.json +10 -13
  315. package/dist/i18n/locales/{pt.json → pt-BR.json} +19 -22
  316. package/dist/i18n/locales/pt-PT.json +137 -0
  317. package/dist/i18n/locales/ro.json +22 -25
  318. package/dist/i18n/locales/ru.json +11 -14
  319. package/dist/i18n/locales/sv.json +16 -19
  320. package/dist/i18n/locales/tr.json +14 -17
  321. package/dist/i18n/locales/uk.json +11 -14
  322. package/dist/i18n/locales/{zh-cn.json → zh-CN.json} +10 -13
  323. package/dist/i18n/locales/zh-HK.json +137 -0
  324. package/dist/i18n/locales/zh-TW.json +137 -0
  325. package/dist/i18n/regionHints.d.ts +16 -0
  326. package/dist/i18n/regionHints.js +49 -0
  327. package/dist/i18n/regions.d.ts +286 -0
  328. package/dist/i18n/regions.js +265 -0
  329. package/dist/index.d.ts +1 -1
  330. package/dist/index.js +4 -4
  331. package/dist/llms-full.txt +1785 -1637
  332. package/dist/llms-medium.txt +74 -46
  333. package/dist/llms.txt +7 -7
  334. package/dist/locale-blueprint.json +16 -13
  335. package/dist/styles.css +2 -2
  336. package/dist/types/ptComponentMap.d.ts +1 -1
  337. package/dist/utilities/functions/slotKey.d.ts +2 -2
  338. package/dist/utils/versionCheck.js +1 -1
  339. package/dist/vite-plugin.d.ts +22 -19
  340. package/dist/vite.js +309 -297
  341. package/llms.txt +7 -7
  342. package/package.json +5 -3
  343. package/scripts/lib/agent-manifest.mjs +2 -1
  344. package/scripts/lib/eslint-disable.mjs +12 -4
  345. package/scripts/lib/eslint-plugin.d.ts +5 -1
  346. package/scripts/lib/eslint-plugin.mjs +187 -6
  347. package/scripts/lib/helper-canon.mjs +176 -0
  348. package/scripts/lib/helpers-add.mjs +1303 -0
  349. package/scripts/lib/local-components.mjs +33 -4
  350. package/scripts/lib/locale-check.mjs +165 -0
  351. package/scripts/lib/redundant-item-accessor.mjs +398 -0
  352. package/scripts/lib/renamed-item-field.mjs +343 -0
  353. package/scripts/lib/slot-key.mjs +2 -2
  354. package/scripts/lib/slot-renames.mjs +1 -1
  355. package/scripts/lib/validate-bb-markup.mjs +123 -56
  356. package/dist/i18n/index.js +0 -27
@@ -36,9 +36,8 @@ Sibling recipes: [Vue](../vue/upload-center.md) ·
36
36
  the peek stack, the close semantics and the sidebar's out-of-flow
37
37
  behaviour are all load-bearing here.
38
38
  - `<BbConfirm />` and `<BbToast />` mounted once in the `createInertiaApp` render root — never in a page.
39
- - From the [Inertia Helpers](../../guides/inertia-helpers.md) toolkit:
40
- `useTableContext`, `useQueryObject`, `useQuery`, `useProp`,
41
- `useResourceContext`.
39
+ - From the [Inertia Helpers](../../guides/inertia-helpers.md) toolkit, installed with
40
+ `npx bitboss-ui add useProp useQuery useQueryObject useResourceContext useTableContext`.
42
41
  - A `useCategoriesStore()` Pinia store exposing the shared expense-category
43
42
  catalog (Travel, Meals & entertainment, Lodging, Rideshare & transit,
44
43
  Software & subscriptions, Office supplies, Fuel, Client entertainment).
@@ -189,10 +188,10 @@ import {
189
188
  import {
190
189
  useTableContext,
191
190
  type TableContext,
192
- } from '@/composables/useTableContext';
193
- import { useQueryObject } from '@/composables/useQueryObject';
194
- import { useProp } from '@/composables/useProp';
195
- import { useQuery } from '@/composables/useQuery';
191
+ } from '@/composables/inertia-helpers/useTableContext';
192
+ import { useQueryObject } from '@/composables/inertia-helpers/useQueryObject';
193
+ import { useProp } from '@/composables/inertia-helpers/useProp';
194
+ import { useQuery } from '@/composables/inertia-helpers/useQuery';
196
195
  import { useCategoriesStore } from '@/stores/categories';
197
196
  import { api } from '@/api';
198
197
  import type { Category, Receipt, ReceiptStatus } from '@/types';
@@ -638,9 +637,9 @@ export function useUploadCenter(): UploadCenterContext {
638
637
  <BbBreadcrumbs
639
638
  class="min-w-0 flex-auto"
640
639
  :items="[
641
- { key: 'dashboard', text: 'Dashboard', href: '/dashboard' },
642
- { key: 'expenses', text: 'Expenses', href: '/expenses' },
643
- { key: 'receipts', text: 'Receipts' },
640
+ { value: 'dashboard', label: 'Dashboard', href: '/dashboard' },
641
+ { value: 'expenses', label: 'Expenses', href: '/expenses' },
642
+ { value: 'receipts', label: 'Receipts' },
644
643
  ]"
645
644
  />
646
645
  <div class="flex shrink-0 items-center gap-2">
@@ -688,21 +687,21 @@ export function useUploadCenter(): UploadCenterContext {
688
687
  compact
689
688
  :items="[
690
689
  {
691
- key: 'drafts',
690
+ value: 'drafts',
692
691
  label: `Drafts · ${ctx.tabCounts.value.drafts}`,
693
692
  href: tabHref('drafts'),
694
693
  server: true,
695
694
  only: ['receipts', 'tabCounts', 'readyCount'],
696
695
  },
697
696
  {
698
- key: 'submitted',
697
+ value: 'submitted',
699
698
  label: `Submitted · ${ctx.tabCounts.value.submitted}`,
700
699
  href: tabHref('submitted'),
701
700
  server: true,
702
701
  only: ['receipts', 'tabCounts', 'readyCount'],
703
702
  },
704
703
  {
705
- key: 'reimbursed',
704
+ value: 'reimbursed',
706
705
  label: `Reimbursed · ${ctx.tabCounts.value.reimbursed}`,
707
706
  href: tabHref('reimbursed'),
708
707
  server: true,
@@ -874,7 +873,7 @@ import {
874
873
  } from 'bitboss-ui';
875
874
  import qs from 'query-string';
876
875
  import PageShell from '@/components/layout/PageShell.vue';
877
- import { useQuery } from '@/composables/useQuery';
876
+ import { useQuery } from '@/composables/inertia-helpers/useQuery';
878
877
  import {
879
878
  provideUploadCenter,
880
879
  STATUS_LABEL,
@@ -1375,6 +1374,7 @@ const categoryName = computed(
1375
1374
  label="Amount"
1376
1375
  :max-precision="2"
1377
1376
  :min="0"
1377
+ :min-precision="2"
1378
1378
  placeholder="0.00"
1379
1379
  variant="ghost"
1380
1380
  @change="commit"
@@ -1394,32 +1394,24 @@ const props = defineProps<{ receipt: Receipt }>();
1394
1394
 
1395
1395
  const ctx = useUploadCenter();
1396
1396
 
1397
- /** Money cells always show two decimals so the column optically aligns. */
1398
- const formatMoney = (value: number | null): string | null =>
1399
- value === null || Number.isNaN(value) ? null : value.toFixed(2);
1400
-
1401
- // Same commit/revert contract as the merchant cell, on the number model —
1402
- // commit on @change, not @blur + @keydown.enter (see MerchantCell.vue).
1403
- const draft = ref<number | string | null>(formatMoney(props.receipt.amount));
1397
+ // Money cells always show two decimals (`min-precision`), so the column
1398
+ // optically aligns. Same commit/revert contract as the merchant cell, on the
1399
+ // number model — commit on @change, not @blur + @keydown.enter (see
1400
+ // MerchantCell.vue).
1401
+ const draft = ref<number | null>(props.receipt.amount);
1404
1402
  watch(
1405
1403
  () => props.receipt.amount,
1406
1404
  (value) => {
1407
- draft.value = formatMoney(value);
1405
+ draft.value = value;
1408
1406
  }
1409
1407
  );
1410
1408
 
1411
1409
  const commit = () => {
1412
- const amount =
1413
- draft.value === null || draft.value === '' ? null : Number(draft.value);
1414
- if (amount === props.receipt.amount) {
1415
- draft.value = formatMoney(props.receipt.amount);
1416
- return;
1417
- }
1418
- void ctx.updateReceipt(props.receipt, { amount });
1419
- draft.value = formatMoney(amount);
1410
+ if (draft.value === props.receipt.amount) return;
1411
+ void ctx.updateReceipt(props.receipt, { amount: draft.value });
1420
1412
  };
1421
1413
  const revert = () => {
1422
- draft.value = formatMoney(props.receipt.amount);
1414
+ draft.value = props.receipt.amount;
1423
1415
  };
1424
1416
  </script>
1425
1417
  ```
@@ -1502,8 +1494,8 @@ const items = computed(() => {
1502
1494
  ...(isDraft
1503
1495
  ? [
1504
1496
  {
1505
- key: 'submit',
1506
- text: 'Submit for approval',
1497
+ value: 'submit',
1498
+ label: 'Submit for approval',
1507
1499
  'prepend:icon': 'lucide:send',
1508
1500
  onClick: () => ctx.submitReceipt(receipt),
1509
1501
  },
@@ -1514,8 +1506,8 @@ const items = computed(() => {
1514
1506
  // BbButton to render a plain anchor instead of letting Inertia
1515
1507
  // intercept this same-origin `href` as a visit (see BbBaseButton's
1516
1508
  // routing rules).
1517
- key: 'download',
1518
- text: 'Download original',
1509
+ value: 'download',
1510
+ label: 'Download original',
1519
1511
  'prepend:icon': 'lucide:download',
1520
1512
  href: `/receipts/${receipt.id}/file`,
1521
1513
  target: '_blank',
@@ -1523,8 +1515,8 @@ const items = computed(() => {
1523
1515
  ...(isDraft
1524
1516
  ? [
1525
1517
  {
1526
- key: 'remove',
1527
- text: 'Remove',
1518
+ value: 'remove',
1519
+ label: 'Remove',
1528
1520
  'prepend:icon': 'lucide:trash-2',
1529
1521
  variant: 'destructive' as const,
1530
1522
  onClick: () => ctx.deleteReceipt(receipt),
@@ -1781,7 +1773,7 @@ const selectedCount = computed(() =>
1781
1773
  <script setup lang="ts">
1782
1774
  import { watch } from 'vue';
1783
1775
  import { BbBadge, BbButton, BbIcon, BbSpinner } from 'bitboss-ui';
1784
- import { useResourceContext } from '@/composables/useResourceContext';
1776
+ import { useResourceContext } from '@/composables/inertia-helpers/useResourceContext';
1785
1777
  import CategoryCell from './CategoryCell.vue';
1786
1778
  import { STATUS_LABEL, STATUS_VARIANT, useUploadCenter } from './context';
1787
1779
  import type { ReceiptDetail } from '@/types';
@@ -1909,7 +1901,7 @@ const longDate = (value: string) =>
1909
1901
 
1910
1902
  <script setup lang="ts">
1911
1903
  import { BbBadge, BbButton, BbIcon, BbSpinner } from 'bitboss-ui';
1912
- import { useResourceContext } from '@/composables/useResourceContext';
1904
+ import { useResourceContext } from '@/composables/inertia-helpers/useResourceContext';
1913
1905
  import { STATUS_LABEL, STATUS_VARIANT, useUploadCenter } from './context';
1914
1906
  import type { MerchantSummary } from '@/types';
1915
1907
 
@@ -29,9 +29,8 @@ Sibling recipes: [Vue](../vue/wizard-form.md) ·
29
29
  the peek stack, the close semantics and the sidebar's out-of-flow
30
30
  behaviour are all load-bearing here.
31
31
  - `<BbConfirm />` and `<BbToast />` mounted once in the `createInertiaApp` render root — never in a page.
32
- - From the [Inertia Helpers](../../guides/inertia-helpers.md) toolkit:
33
- `usePromiseForm`, `useConfirmOnRouteLeave`, `useProp`, `useQuery`,
34
- `useResourceContext`.
32
+ - From the [Inertia Helpers](../../guides/inertia-helpers.md) toolkit, installed with
33
+ `npx bitboss-ui add useConfirmOnRouteLeave usePromiseForm useProp useQuery useResourceContext`.
35
34
  - [App Layout](../../guides/app-layout.md) and
36
35
  [Page Shell](../../guides/page-shell.md) copied into
37
36
  `src/components/layout/` per their guides — the page renders inside this
@@ -152,10 +151,10 @@ import {
152
151
  usePageShellContext,
153
152
  type PageShellContext,
154
153
  } from '@/components/layout/usePageShellContext';
155
- import { useConfirmOnRouteLeave } from '@/composables/useConfirmOnRouteLeave';
156
- import { usePromiseForm } from '@/composables/usePromiseForm';
157
- import { useProp } from '@/composables/useProp';
158
- import { useQuery } from '@/composables/useQuery';
154
+ import { useConfirmOnRouteLeave } from '@/composables/inertia-helpers/useConfirmOnRouteLeave';
155
+ import { usePromiseForm } from '@/composables/inertia-helpers/usePromiseForm';
156
+ import { useProp } from '@/composables/inertia-helpers/useProp';
157
+ import { useQuery } from '@/composables/inertia-helpers/useQuery';
159
158
  import type { Campaign, Segment } from '@/types';
160
159
 
161
160
  /**
@@ -760,9 +759,9 @@ onMounted(() => {
760
759
  });
761
760
 
762
761
  const crumbs = computed(() => [
763
- { key: 'dashboard', text: 'Dashboard', href: '/dashboard' },
764
- { key: 'campaigns', text: 'Campaigns', href: '/campaigns' },
765
- { key: 'setup', text: ctx.campaign.value?.name ?? 'New campaign' },
762
+ { value: 'dashboard', label: 'Dashboard', href: '/dashboard' },
763
+ { value: 'campaigns', label: 'Campaigns', href: '/campaigns' },
764
+ { value: 'setup', label: ctx.campaign.value?.name ?? 'New campaign' },
766
765
  ]);
767
766
 
768
767
  // The summary shows only the CURRENT step's issues, and only once the user
@@ -906,8 +905,6 @@ const status = (key: StepKey) => ctx.stepStatus(key);
906
905
 
907
906
  <BbSelect
908
907
  v-model="ctx.draft.countries"
909
- item-text="label"
910
- item-value="value"
911
908
  :items="COUNTRIES"
912
909
  label="Limit to countries"
913
910
  label-mode="outside"
@@ -1080,8 +1077,6 @@ const errorsFor = (field: string) => ctx.fieldErrors('content', field);
1080
1077
 
1081
1078
  <BbRadioGroup
1082
1079
  v-model="ctx.draft.sendMode"
1083
- item-text="label"
1084
- item-value="value"
1085
1080
  :items="[
1086
1081
  {
1087
1082
  label: 'Send now — goes out as soon as you confirm on Review',
@@ -1111,8 +1106,6 @@ const errorsFor = (field: string) => ctx.fieldErrors('content', field);
1111
1106
  <BbSelect
1112
1107
  v-model="ctx.draft.timezone"
1113
1108
  :errors="errorsFor('timezone')"
1114
- item-text="label"
1115
- item-value="value"
1116
1109
  :items="TIMEZONES"
1117
1110
  label="Timezone"
1118
1111
  label-mode="outside"
@@ -1453,7 +1446,7 @@ const isReview = computed(() => ctx.step.value === 'review');
1453
1446
 
1454
1447
  <script setup lang="ts">
1455
1448
  import { BbButton, BbIcon, BbSpinner } from 'bitboss-ui';
1456
- import { useResourceContext } from '@/composables/useResourceContext';
1449
+ import { useResourceContext } from '@/composables/inertia-helpers/useResourceContext';
1457
1450
  import type { SegmentDetail } from '@/types';
1458
1451
 
1459
1452
  const props = defineProps<{ segmentId: number }>();
@@ -1621,8 +1614,6 @@ the file is unchanged, plus `BbCalendar` in its import):
1621
1614
  <BbSelect
1622
1615
  v-model="ctx.draft.timezone"
1623
1616
  :errors="errorsFor('timezone')"
1624
- item-text="label"
1625
- item-value="value"
1626
1617
  :items="TIMEZONES"
1627
1618
  label="Timezone"
1628
1619
  label-mode="outside"
@@ -625,9 +625,9 @@ export function useApprovalsInbox(): ApprovalsInboxContext {
625
625
  <BbBreadcrumbs
626
626
  class="min-w-0 flex-auto"
627
627
  :items="[
628
- { key: 'dashboard', text: 'Dashboard', to: '/dashboard' },
629
- { key: 'finance', text: 'Finance', to: '/finance' },
630
- { key: 'approvals', text: 'Approvals' },
628
+ { value: 'dashboard', label: 'Dashboard', to: '/dashboard' },
629
+ { value: 'finance', label: 'Finance', to: '/finance' },
630
+ { value: 'approvals', label: 'Approvals' },
631
631
  ]"
632
632
  />
633
633
  <BbTextInput
@@ -654,22 +654,22 @@ export function useApprovalsInbox(): ApprovalsInboxContext {
654
654
  compact
655
655
  :items="[
656
656
  {
657
- key: 'needsApproval',
657
+ value: 'needsApproval',
658
658
  label: `Needs approval · ${ctx.tabCounts.value.needsApproval}`,
659
659
  href: '?tab=needsApproval',
660
660
  },
661
661
  {
662
- key: 'approved',
662
+ value: 'approved',
663
663
  label: `Approved · ${ctx.tabCounts.value.approved}`,
664
664
  href: '?tab=approved',
665
665
  },
666
666
  {
667
- key: 'rejected',
667
+ value: 'rejected',
668
668
  label: `Rejected · ${ctx.tabCounts.value.rejected}`,
669
669
  href: '?tab=rejected',
670
670
  },
671
671
  {
672
- key: 'all',
672
+ value: 'all',
673
673
  label: `All · ${ctx.tabCounts.value.all}`,
674
674
  href: '?tab=all',
675
675
  },
@@ -859,7 +859,6 @@ const rowClass = (item: Expense) =>
859
859
  <BbSelectPopover
860
860
  v-model="ctx.filters.categories"
861
861
  item-text="text"
862
- item-value="value"
863
862
  :items="CATEGORY_OPTIONS"
864
863
  multiple
865
864
  >
@@ -837,9 +837,9 @@ export function useBacklogWorkspace(): BacklogWorkspaceContext {
837
837
  <BbBreadcrumbs
838
838
  class="min-w-0 flex-auto"
839
839
  :items="[
840
- { key: 'product', text: 'Product', to: '/product' },
841
- { key: 'sprints', text: 'Sprints', to: '/sprints' },
842
- { key: 'sprint-24', text: 'Sprint 24' },
840
+ { value: 'product', label: 'Product', to: '/product' },
841
+ { value: 'sprints', label: 'Sprints', to: '/sprints' },
842
+ { value: 'sprint-24', label: 'Sprint 24' },
843
843
  ]"
844
844
  />
845
845
  <div class="flex shrink-0 items-center gap-2">
@@ -876,17 +876,17 @@ export function useBacklogWorkspace(): BacklogWorkspaceContext {
876
876
  compact
877
877
  :items="[
878
878
  {
879
- key: 'backlog',
879
+ value: 'backlog',
880
880
  label: `Backlog · ${ctx.tabCounts.value.backlog}`,
881
881
  href: '?tab=backlog',
882
882
  },
883
883
  {
884
- key: 'current',
884
+ value: 'current',
885
885
  label: `Current sprint · ${ctx.tabCounts.value.current}`,
886
886
  href: '?tab=current',
887
887
  },
888
888
  {
889
- key: 'done',
889
+ value: 'done',
890
890
  label: `Done · ${ctx.tabCounts.value.done}`,
891
891
  href: '?tab=done',
892
892
  },
@@ -1090,8 +1090,6 @@ const rowClass = (item: Issue) =>
1090
1090
  <BbSelectPopover
1091
1091
  v-model="ctx.filters.status"
1092
1092
  disable-writing
1093
- item-text="label"
1094
- item-value="value"
1095
1093
  :items="STATUS_OPTIONS"
1096
1094
  multiple
1097
1095
  >
@@ -1124,8 +1122,6 @@ const rowClass = (item: Issue) =>
1124
1122
  <BbSelectPopover
1125
1123
  v-model="ctx.filters.priority"
1126
1124
  disable-writing
1127
- item-text="label"
1128
- item-value="value"
1129
1125
  :items="PRIORITY_OPTIONS"
1130
1126
  multiple
1131
1127
  >
@@ -1291,8 +1287,6 @@ const commit = (event: Event) => {
1291
1287
  <BbSelectPopover
1292
1288
  compact
1293
1289
  disable-writing
1294
- item-text="label"
1295
- item-value="value"
1296
1290
  :items="STATUS_OPTIONS"
1297
1291
  :model-value="status"
1298
1292
  width="180px"
@@ -1369,8 +1363,6 @@ const label = computed(
1369
1363
  <BbSelectPopover
1370
1364
  compact
1371
1365
  disable-writing
1372
- item-text="label"
1373
- item-value="value"
1374
1366
  :items="PRIORITY_OPTIONS"
1375
1367
  :model-value="priority"
1376
1368
  width="160px"
@@ -1435,8 +1427,8 @@ const label = computed(
1435
1427
  <template>
1436
1428
  <!-- Provider-backed people picker. The provider is the ONE shared
1437
1429
  `searchMembers` — lazy per instance, so a row nobody opens never fetches.
1438
- The whole member is the value (no item-value), matching how the row
1439
- stores it. -->
1430
+ The whole member is the value (no item-value, and a Member has no `value`
1431
+ of its own), matching how the row stores it. -->
1440
1432
  <BbSelectPopover
1441
1433
  compact
1442
1434
  item-text="name"
@@ -1502,20 +1494,20 @@ const assignee = computed(() => ctx.valueOf(props.issue, 'assignee'));
1502
1494
  :boundary="boundary"
1503
1495
  :items="[
1504
1496
  {
1505
- key: 'duplicate',
1506
- text: 'Duplicate',
1497
+ value: 'duplicate',
1498
+ label: 'Duplicate',
1507
1499
  'prepend:icon': 'lucide:copy',
1508
1500
  onClick: () => ctx.duplicateIssue(issue),
1509
1501
  },
1510
1502
  {
1511
- key: 'next-sprint',
1512
- text: 'Move to next sprint',
1503
+ value: 'next-sprint',
1504
+ label: 'Move to next sprint',
1513
1505
  'prepend:icon': 'lucide:arrow-right',
1514
1506
  onClick: () => ctx.moveToNextSprint(issue),
1515
1507
  },
1516
1508
  {
1517
- key: 'delete',
1518
- text: 'Delete',
1509
+ value: 'delete',
1510
+ label: 'Delete',
1519
1511
  'prepend:icon': 'lucide:trash-2',
1520
1512
  variant: 'destructive',
1521
1513
  onClick: () => ctx.deleteIssue(issue),
@@ -1560,8 +1552,6 @@ const ctx = useBacklogWorkspace();
1560
1552
  menu clears the bar. -->
1561
1553
  <BbSelectPopover
1562
1554
  disable-writing
1563
- item-text="label"
1564
- item-value="value"
1565
1555
  :items="STATUS_OPTIONS"
1566
1556
  :model-value="null"
1567
1557
  :offset="8"
@@ -587,36 +587,36 @@ const warehouseId = ref('denver');
587
587
 
588
588
  const accountMenuItems: BbDropdownItem[] = [
589
589
  {
590
- key: 'theme',
591
- text: 'Theme',
590
+ value: 'theme',
591
+ label: 'Theme',
592
592
  'prepend:icon': 'lucide:sun-moon',
593
593
  // A submenu opener (`items`) whose own `items` is one selectable
594
594
  // group — `selectable: true` gives single-choice radio semantics and a
595
595
  // check on the picked row, with no bordered field anywhere.
596
596
  items: [
597
597
  {
598
- key: 'theme-opts',
598
+ id: 'theme-opts',
599
599
  selectable: true,
600
600
  items: [
601
- { key: 'system', text: 'System' },
602
- { key: 'light', text: 'Light' },
603
- { key: 'dark', text: 'Dark' },
601
+ { value: 'system', label: 'System' },
602
+ { value: 'light', label: 'Light' },
603
+ { value: 'dark', label: 'Dark' },
604
604
  ],
605
605
  },
606
606
  ],
607
607
  },
608
608
  {
609
- key: 'warehouse',
610
- text: 'Warehouse',
609
+ value: 'warehouse',
610
+ label: 'Warehouse',
611
611
  'prepend:icon': 'lucide:warehouse',
612
612
  items: [
613
613
  {
614
- key: 'warehouse-opts',
614
+ id: 'warehouse-opts',
615
615
  selectable: true,
616
616
  items: [
617
- { key: 'denver', text: 'Denver DC' },
618
- { key: 'reno', text: 'Reno DC' },
619
- { key: 'columbus', text: 'Columbus DC' },
617
+ { value: 'denver', label: 'Denver DC' },
618
+ { value: 'reno', label: 'Reno DC' },
619
+ { value: 'columbus', label: 'Columbus DC' },
620
620
  ],
621
621
  },
622
622
  ],
@@ -624,14 +624,14 @@ const accountMenuItems: BbDropdownItem[] = [
624
624
  // A trailing separator section (a nested array) for plain navigation rows.
625
625
  [
626
626
  {
627
- key: 'settings',
628
- text: 'Settings',
627
+ value: 'settings',
628
+ label: 'Settings',
629
629
  'prepend:icon': 'lucide:settings',
630
630
  href: '/settings',
631
631
  },
632
632
  {
633
- key: 'signout',
634
- text: 'Sign out',
633
+ value: 'signout',
634
+ label: 'Sign out',
635
635
  'prepend:icon': 'lucide:log-out',
636
636
  href: '/logout',
637
637
  method: 'post',
@@ -694,8 +694,8 @@ export function useOnboardingWorkspace(): OnboardingWorkspaceContext {
694
694
  <BbBreadcrumbs
695
695
  class="min-w-0 flex-auto"
696
696
  :items="[
697
- { key: 'dashboard', text: 'Dashboard', to: '/dashboard' },
698
- { key: 'getting-started', text: 'Getting started' },
697
+ { value: 'dashboard', label: 'Dashboard', to: '/dashboard' },
698
+ { value: 'getting-started', label: 'Getting started' },
699
699
  ]"
700
700
  />
701
701
  <BbButton
@@ -1064,8 +1064,6 @@ const ctx = useOnboardingWorkspace();
1064
1064
  v-model="role"
1065
1065
  class="w-44"
1066
1066
  compact
1067
- item-text="label"
1068
- item-value="value"
1069
1067
  :items="roles"
1070
1068
  label="Role"
1071
1069
  label-mode="outside"
@@ -1408,8 +1406,6 @@ import { BbButton } from 'bitboss-ui';
1408
1406
  v-if="ctx.reminders.enabled"
1409
1407
  class="max-w-72"
1410
1408
  compact
1411
- item-text="label"
1412
- item-value="value"
1413
1409
  :items="cadences"
1414
1410
  label="Reminder schedule"
1415
1411
  label-mode="outside"
@@ -545,9 +545,9 @@ export function useOwnershipAtlas(): OwnershipAtlasContext {
545
545
  <BbBreadcrumbs
546
546
  class="min-w-0 flex-auto"
547
547
  :items="[
548
- { key: 'admin', text: 'Admin', to: '/admin' },
549
- { key: 'access', text: 'Access', to: '/access' },
550
- { key: 'ownership', text: 'Ownership' },
548
+ { value: 'admin', label: 'Admin', to: '/admin' },
549
+ { value: 'access', label: 'Access', to: '/access' },
550
+ { value: 'ownership', label: 'Ownership' },
551
551
  ]"
552
552
  />
553
553
  <div class="flex shrink-0 items-center gap-2">
@@ -593,13 +593,13 @@ export function useOwnershipAtlas(): OwnershipAtlasContext {
593
593
  v-model="ctx.tab.value"
594
594
  compact
595
595
  :items="[
596
- { key: 'all', label: `All · ${ctx.tabCounts.value.all}` },
596
+ { value: 'all', label: `All · ${ctx.tabCounts.value.all}` },
597
597
  {
598
- key: 'americas',
598
+ value: 'americas',
599
599
  label: `Americas · ${ctx.tabCounts.value.americas}`,
600
600
  },
601
- { key: 'emea', label: `EMEA · ${ctx.tabCounts.value.emea}` },
602
- { key: 'apac', label: `APAC · ${ctx.tabCounts.value.apac}` },
601
+ { value: 'emea', label: `EMEA · ${ctx.tabCounts.value.emea}` },
602
+ { value: 'apac', label: `APAC · ${ctx.tabCounts.value.apac}` },
603
603
  ]"
604
604
  />
605
605
 
@@ -962,8 +962,6 @@ const monthLabel = (value: string) =>
962
962
  <BbSelectPopover
963
963
  v-model="ctx.filters.kinds"
964
964
  clearable
965
- item-text="label"
966
- item-value="value"
967
965
  :items="kindOptions"
968
966
  multiple
969
967
  >
@@ -847,12 +847,12 @@ const ctx = provideInvoiceForm();
847
847
 
848
848
  // A real trail, ≥ 2 linked levels; the current page carries no target.
849
849
  const trail = computed(() => [
850
- { key: 'dashboard', text: 'Dashboard', to: '/dashboard' },
851
- { key: 'billing', text: 'Billing', to: '/billing' },
852
- { key: 'invoices', text: 'Invoices', to: '/invoices' },
850
+ { value: 'dashboard', label: 'Dashboard', to: '/dashboard' },
851
+ { value: 'billing', label: 'Billing', to: '/billing' },
852
+ { value: 'invoices', label: 'Invoices', to: '/invoices' },
853
853
  {
854
- key: 'invoice',
855
- text:
854
+ value: 'invoice',
855
+ label:
856
856
  ctx.mode === 'edit'
857
857
  ? (ctx.invoiceNumber.value ?? 'Invoice')
858
858
  : 'New invoice',