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
@@ -8,20 +8,21 @@
8
8
  {"name":"BbDateDirectiveValue","usage":"advanced","component":null,"usedBy":[],"definition":"type BbDateDirectiveValue = Omit<Partial<BbDatePickerProps>, 'activator' | 'modelValue'> & { modelValue: string | string[] | null; 'onUpdate:modelValue'?: (value: string | string[] | null) => void; 'onUpdate:time'?: (value: string | string[] | null) => void; };"},
9
9
  {"name":"BbDatePickerSegment","usage":"advanced","component":"BbDatePicker","usedBy":[],"definition":"type BbDatePickerSegment = BbCalendarSegment;","values":["start","end"]},
10
10
  {"name":"BbDropdownContext","usage":"advanced","component":null,"usedBy":[],"definition":"type BbDropdownContext = { isReady: ComputedRef<boolean>; open: ComputedRef<boolean>; groups: ComputedRef<Record<string, BbDropdownContextGroup>>; };"},
11
- {"name":"BbDropdownContextGroup","usage":"advanced","component":null,"usedBy":[],"definition":"type BbDropdownContextGroup = Omit<InternalGroup, 'items' | 'multiple' | 'selectable'> & { value: unknown; selectedOptions: BbDropdownContextOption[]; multiple: boolean; loading: boolean; selectable: boolean; };","fields":["text?: undefined","label?: string","onClick?: ((...args: any[]) => any)","itemText?: string | ((item: any) => string)","key?: string","max?: number","prepend:icon?: string","append:icon?: string","dependencies?: unknown[]","keyless?: true","meta?: any","variant?: keyof DropdownItemVariantRegistry","depsDebounceTime?: number","enforceCoherence?: boolean","filterBy?: string[]","group?: true","itemProps?: BbDropdownItemProps<any>","itemValue?: string | ((item: any) => any)","loadingText?: string","maxHeight?: string | number","clearable?: boolean","emptyText?: string","failedText?: string","prefill?: boolean | \"interaction\"","searchable?: boolean","searchPlaceholder?: string","stash?: boolean","hideLabel?: boolean","value: unknown","selectedOptions: BbDropdownContextOption[]","multiple: boolean","loading: boolean","selectable: boolean"]},
12
- {"name":"BbDropdownContextOption","usage":"advanced","component":null,"usedBy":[],"definition":"type BbDropdownContextOption = { text?: string; description?: string; original?: unknown; value?: unknown; };"},
11
+ {"name":"BbDropdownContextGroup","usage":"advanced","component":null,"usedBy":[],"definition":"type BbDropdownContextGroup = Omit<InternalGroup, 'items' | 'multiple' | 'selectable' | 'value' | 'key'> & { value: unknown; selectedOptions: BbDropdownContextOption[]; multiple: boolean; loading: boolean; selectable: boolean; };","fields":["text?: undefined","label?: string","id?: string","onClick?: ((...args: any[]) => any)","itemText?: string | ((item: any) => string)","max?: number","prepend:icon?: string","append:icon?: string","dependencies?: unknown[]","meta?: any","variant?: keyof DropdownItemVariantRegistry","depsDebounceTime?: number","enforceCoherence?: boolean","filterBy?: string[]","group?: true","itemProps?: BbDropdownItemProps<any>","itemValue?: string | ((item: any) => any)","loadingText?: string","maxHeight?: string | number","clearable?: boolean","emptyText?: string","failedText?: string","prefill?: boolean | \"interaction\"","searchable?: boolean","searchPlaceholder?: string","stash?: boolean","hideLabel?: boolean","value: unknown","selectedOptions: BbDropdownContextOption[]","multiple: boolean","loading: boolean","selectable: boolean"]},
12
+ {"name":"BbDropdownContextOption","usage":"advanced","component":null,"usedBy":[],"definition":"type BbDropdownContextOption = { label?: string; description?: string; original?: unknown; value?: unknown; };"},
13
13
  {"name":"BbDropdownDirectiveValue","usage":"advanced","component":null,"usedBy":[],"definition":"type BbDropdownDirectiveValue = BbDropdownItem[] | (Partial<Omit<BbDropdownProps, 'items'>> & { items: BbDropdownItem[]; });"},
14
14
  {"name":"BbDropdownGroupItemsContext","usage":"advanced","component":null,"usedBy":[],"definition":"type BbDropdownGroupItemsContext<M = any> = BbItemsProviderContext<M> & { query?: string; reason: 'initial' | 'search' | 'dependencies'; };"},
15
- {"name":"BbDropdownGroupModel","usage":"advanced","component":"BbDropdown","usedBy":[],"definition":"type BbDropdownGroupModel<T = any> = T[] | T | string[] | string | null;"},
16
- {"name":"BbDropdownSlotGroup","usage":"advanced","component":"BbDropdown","usedBy":[],"definition":"type BbDropdownSlotGroup = { key?: string; label?: string; meta?: any; multiple: boolean; selectable: boolean; };"},
15
+ {"name":"BbDropdownGroupModel","usage":"advanced","component":"BbDropdown","usedBy":[],"definition":"type BbDropdownGroupModel<T = any> = T[] | T | null;"},
16
+ {"name":"BbDropdownSlotGroup","usage":"advanced","component":"BbDropdown","usedBy":[],"definition":"type BbDropdownSlotGroup = { id?: string; label?: string; meta?: any; multiple: boolean; selectable: boolean; };"},
17
17
  {"name":"BbFormContextHandle","usage":"advanced","component":null,"usedBy":[],"definition":"type BbFormContextHandle = { isReady: ComputedRef<boolean>; valid: ComputedRef<boolean>; dirty: ComputedRef<boolean>; touched: ComputedRef<boolean>; pending: ComputedRef<boolean>; submitting: ComputedRef<boolean>; submitCount: ComputedRef<number>; values: ComputedRef<Record<string, unknown>>; errors: ComputedRef<Record<string, string[]>>; fields: ComputedRef<Record<string, BbFormFieldEntry>>; unmatchedErrors: ComputedRef<Record<string, string[]>>; submit: () => void; reset: () => void; snapshot: (values?: Record<string, unknown>) => void; validate: () => Promise<boolean>; setErrors: (errors: BbFormServerErrors, options?: BbFormSetErrorsOptions) => void; removeField: (path: string) => void; };"},
18
18
  {"name":"BbFormContextState","usage":"advanced","component":null,"usedBy":[],"definition":"type BbFormContextState = { valid: boolean; dirty: boolean; touched: boolean; pending: boolean; submitting: boolean; submitCount: number; values: Record<string, unknown>; errors: Record<string, string[]>; fields: Record<string, BbFormFieldEntry>; unmatchedErrors: Record<string, string[]>; };"},
19
- {"name":"BbFormFieldHandle","usage":"advanced","component":null,"usedBy":[],"definition":"type BbFormFieldHandle<T> = { value: WritableComputedRef<T | undefined>; errors: ComputedRef<string[]>; validate: () => Promise<boolean>; controlAttrs: ComputedRef<Record<string, string | undefined>>; errorAttrs: { id: string; }; };"},
19
+ {"name":"BbFormFieldHandle","usage":"advanced","component":null,"usedBy":[],"definition":"type BbFormFieldHandle<T> = { value: WritableComputedRef<T | undefined>; errors: ComputedRef<string[]>; validate: () => Promise<boolean>; controlAttrs: ComputedRef<Record<string, string | undefined>>; errorAttrs: { id: string; }; readonly: ComputedRef<boolean>; };"},
20
20
  {"name":"BbFormFieldOptions","usage":"advanced","component":null,"usedBy":[],"definition":"type BbFormFieldOptions = { name: string; validationLabel?: string; rules?: unknown; };"},
21
21
  {"name":"BbHoverCardDirectiveValue","usage":"advanced","component":null,"usedBy":[],"definition":"type BbHoverCardDirectiveValue = string | DirectivePortalComponent | (Partial<Omit<BbHoverCardProps, 'activator'>> & DirectivePortalOptions);"},
22
22
  {"name":"BbIconSize","usage":"advanced","component":"BbIcon","usedBy":[],"definition":"type BbIconSize = BbDialogSizes;"},
23
23
  {"name":"BbItemsProviderContext","usage":"advanced","component":null,"usedBy":[],"definition":"type BbItemsProviderContext<M = any> = { reason: BbItemsProviderReason; modelValue: M; signal: AbortSignal; };"},
24
24
  {"name":"BbItemsProviderReason","usage":"advanced","component":null,"usedBy":[],"definition":"type BbItemsProviderReason = 'search' | 'initial' | 'dependencies' | 'model' | 'reopen' | 'pagination';","values":["search","initial","dependencies","model","reopen","pagination"]},
25
+ {"name":"BbNumberSimpleUnit","usage":"advanced","component":"BbNumberInput","usedBy":[],"definition":"type BbNumberSimpleUnit = 'acre' | 'bit' | 'byte' | 'celsius' | 'centimeter' | 'day' | 'degree' | 'fahrenheit' | 'fluid-ounce' | 'foot' | 'gallon' | 'gigabit' | 'gigabyte' | 'gram' | 'hectare' | 'hour' | 'inch' | 'kilobit' | 'kilobyte' | 'kilogram' | 'kilometer' | 'liter' | 'megabit' | 'megabyte' | 'meter' | 'microsecond' | 'mile' | 'mile-scandinavian' | 'milliliter' | 'millimeter' | 'millisecond' | 'minute' | 'month' | 'nanosecond' | 'ounce' | 'percent' | 'petabyte' | 'pound' | 'second' | 'stone' | 'terabit' | 'terabyte' | 'week' | 'yard' | 'year';","values":["month","year","day","acre","bit","byte","celsius","centimeter","degree","fahrenheit","fluid-ounce","foot","gallon","gigabit","gigabyte","gram","hectare","hour","inch","kilobit","kilobyte","kilogram","kilometer","liter","megabit","megabyte","meter","microsecond","mile","mile-scandinavian","milliliter","millimeter","millisecond","minute","nanosecond","ounce","percent","petabyte","pound","second","stone","terabit","terabyte","week","yard"]},
25
26
  {"name":"BbPopoverDirectiveValue","usage":"advanced","component":null,"usedBy":[],"definition":"type BbPopoverDirectiveValue = string | DirectivePortalComponent | (Partial<Omit<BbPopoverProps, 'activator'>> & DirectivePortalOptions);"},
26
27
  {"name":"BbSelectResolvedOption","usage":"advanced","component":"BbSelectPopover","usedBy":[],"definition":"type BbSelectResolvedOption<Item = any> = { item: Item; text: string; value: any; selected: boolean; disabled: boolean; };"},
27
28
  {"name":"BbSpinnerSizes","usage":"advanced","component":"BbSpinner","usedBy":[],"definition":"type BbSpinnerSizes = BbIconSize;"},
@@ -34,7 +35,7 @@
34
35
  {"name":"BbTooltipDirectiveValue","usage":"advanced","component":null,"usedBy":[],"definition":"type BbTooltipDirectiveValue = string | number | (Partial<BbTooltipProps> & { text: string; });"},
35
36
  {"name":"BbTooltipVariant","usage":"advanced","component":"BbTooltip","usedBy":[],"definition":"type BbTooltipVariant = TooltipVariantType;","values":["default","destructive"],"extensibleVia":"TooltipVariantRegistry"},
36
37
  {"name":"Breakpoint","usage":"advanced","component":null,"usedBy":[],"definition":"type Breakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl';","values":["sm","md","lg","xl","2xl"]},
37
- {"name":"BuiltinLocaleKey","usage":"advanced","component":null,"usedBy":[],"definition":"type BuiltinLocaleKey = (typeof BUILTIN_LOCALE_KEYS)[number];","values":["pt","cs","da","de","el","en","es","fi","fr","hu","it","ja","ko","nb","nl","pl","ro","ru","sv","tr","uk","zh-cn"]},
38
+ {"name":"BuiltinLocaleKey","usage":"advanced","component":null,"usedBy":[],"definition":"type BuiltinLocaleKey = keyof typeof LOCALE_TABLE;","values":["cs","da","de","de-CH","el","en","en-GB","es","es-MX","fi","fr","hu","it","ja","ko","nb","nl","pl","pt-BR","pt-PT","ro","ru","sv","tr","uk","zh-CN","zh-HK","zh-TW","de-AT","en-AU","en-CA","en-IE","fr-BE","fr-CA","fr-CH","it-CH","nl-BE","sv-FI"]},
38
39
  {"name":"ButtonVariantRegistry","usage":"advanced","component":null,"usedBy":[],"definition":"interface ButtonVariantRegistry { primary: true; outline: true; secondary: true; ghost: true; destructive: true; link: true; }","values":["primary","outline","secondary","ghost","destructive","link"],"extensibleVia":"ButtonVariantRegistry"},
39
40
  {"name":"ConfirmButtonConfig","usage":"advanced","component":null,"usedBy":[],"definition":"type ConfirmButtonConfig = ActionButtonConfig;"},
40
41
  {"name":"ConfirmVariantRegistry","usage":"advanced","component":null,"usedBy":[],"definition":"interface ConfirmVariantRegistry { default: true; destructive: true; }","values":["default","destructive"],"extensibleVia":"ConfirmVariantRegistry"},
@@ -45,13 +46,13 @@
45
46
  {"name":"DropdownGroupItemsGetter","usage":"advanced","component":"BbDropdown","usedBy":[],"definition":"type DropdownGroupItemsGetter = ((context: BbDropdownGroupItemsContext) => any[] | Promise<any[]>) | ((context: BbDropdownGroupItemsContext & { query: string; }) => any[] | Promise<any[]>);"},
46
47
  {"name":"DropdownItemVariantRegistry","usage":"advanced","component":null,"usedBy":[],"definition":"interface DropdownItemVariantRegistry { default: true; destructive: true; }","values":["default","destructive"],"extensibleVia":"DropdownItemVariantRegistry"},
47
48
  {"name":"DropdownItemVariantType","usage":"advanced","component":null,"usedBy":[],"definition":"type DropdownItemVariantType = DropdownItemVariantFromRegistry;","values":["default","destructive"],"extensibleVia":"DropdownItemVariantRegistry"},
48
- {"name":"DynamicConfig","usage":"advanced","component":null,"usedBy":[],"definition":"type DynamicConfig = Pick<EditableConfig, 'locale'>;","fields":["locale: \"pt\" | \"cs\" | \"da\" | \"de\" | \"el\" | \"en\" | \"es\" | \"fi\" | \"fr\" | \"hu\" | \"it\" | \"ja\" | \"ko\" | \"nb\" | \"nl\" | \"pl\" | \"ro\" | \"ru\" | \"sv\" | \"tr\" | \"uk\" | \"zh-cn\""]},
49
+ {"name":"DynamicConfig","usage":"advanced","component":null,"usedBy":[],"definition":"type DynamicConfig = Pick<EditableConfig, 'locale'>;","fields":["locale: BuiltinLocaleInput"]},
49
50
  {"name":"EmptyStringControlRegistry","usage":"advanced","component":null,"usedBy":[],"definition":"interface EmptyStringControlRegistry { }","extensibleVia":"EmptyStringControlRegistry"},
50
51
  {"name":"IconType","usage":"advanced","component":null,"usedBy":[],"definition":"type IconType = string;"},
51
52
  {"name":"IndicatorVariantType","usage":"advanced","component":null,"usedBy":[],"definition":"type IndicatorVariantType = IndicatorVariantFromRegistry;","values":["default","success","info","warning","destructive"],"extensibleVia":"IndicatorVariantRegistry"},
52
53
  {"name":"InputVariantRegistry","usage":"advanced","component":null,"usedBy":[],"definition":"interface InputVariantRegistry { outline: true; secondary: true; ghost: true; }","values":["outline","secondary","ghost"],"extensibleVia":"InputVariantRegistry"},
53
- {"name":"Locale","usage":"advanced","component":null,"usedBy":[],"definition":"type Locale = EnJson extends { default: infer D; } ? D : EnJson;","fields":["common: { closeLabel: string; loadingText: string; emptyText: string; failedText: string; clearLabel: string; fieldLabel: string; }","colorInput: { dialogLabel: string; openPicker: string; openPickerSelected: string; paletteLabel: string; mainCanvasDesc: string; mainCanvasSelectedColor: string; hueCanvasDesc: string; hueCanvasSelectedHue: string; alphaSliderDesc: string; eyeDropper: string; }","datePicker: { monthLabel: string; yearLabel: string; previousMonthLabel: string; nextMonthLabel: string; previousYearLabel: string; nextYearLabel: string; calendarLabel: string; monthSelectorLabel: string; yearSelectorLabel: string; selectingMonth: string; selectingYear: string; selectedLabel: string; hoursLabel: string; minutesLabel: string; secondsLabel: string; selectEndDate: string; openPicker: string; }","datePickerInput: { dateFormat: string; dateFormatSingle: string; dateFormatRange: string; monthFormatSingle: string; monthFormatRange: string; yearFormatSingle: string; yearFormatRange: string; emptyRange: string; changeSelectionRange: string; changeSelection: string; emptySelection: string; dayField: string; monthField: string; yearField: string; hourField: string; minuteField: string; secondField: string; startFieldLabel: string; endFieldLabel: string; timeFormat: string; timeFormatSeconds: string; meridiemField: string; meridiemAm: string; meridiemPm: string; }","dialog: { closeLabel: string; }","dropdown: { back: string; }","dropdownButton: { open: string; close: string; }","dropzone: { selectFiles: string; serverFiles: string; }","rating: { singleStar: string; multipleStars: string; clearHint: string; }","select: { multipleMaxReached: string; searchLabel: string; searchToStart: string; triggerLabel: string; }","slider: { minimumThumb: string; maximumThumb: string; }","badge: { clearLabel: string; }","breadcrumbs: { label: string; openHiddenLabelCount: string; }","pagination: { label: string; previous: string; next: string; }","confirm: { ok: string; cancel: string; }","offCanvas: { closeLabel: string; }","table: { actionsText: string; selectAllLabel: string; selectText: string; select: string; selectableLegend: string; reorderInstructions: string; columnMoved: string; resizeInstructions: string; }","timePickerInput: { emptySelection: string; emptyRange: string; changeSelection: string; changeSelectionRange: string; openPicker: string; start: string; end: string; }","counter: { count: string; countOfMax: string; remaining: string; limitReached: string; }"]},
54
- {"name":"LocaleKey","usage":"advanced","component":null,"usedBy":[],"definition":"type LocaleKey = RegistryKey<LocaleRegistry, BuiltinLocaleKey>;","extensibleVia":"LocaleRegistry"},
54
+ {"name":"Locale","usage":"advanced","component":null,"usedBy":[],"definition":"type Locale = EnJson extends { default: infer D; } ? D : EnJson;","fields":["common: { closeLabel: string; loadingText: string; emptyText: string; failedText: string; clearLabel: string; fieldLabel: string; }","colorInput: { dialogLabel: string; openPicker: string; openPickerSelected: string; mainCanvasDesc: string; mainCanvasSelectedColor: string; hueCanvasDesc: string; alphaSliderDesc: string; eyeDropper: string; }","datePicker: { monthLabel: string; yearLabel: string; previousMonthLabel: string; nextMonthLabel: string; previousYearLabel: string; nextYearLabel: string; calendarLabel: string; monthSelectorLabel: string; yearSelectorLabel: string; selectingMonth: string; selectingYear: string; selectedLabel: string; hoursLabel: string; minutesLabel: string; secondsLabel: string; selectEndDate: string; openPicker: string; }","datePickerInput: { dateFormat: string; dateFormatSingle: string; dateFormatRange: string; monthFormatSingle: string; monthFormatRange: string; yearFormatSingle: string; yearFormatRange: string; emptyRange: string; changeSelectionRange: string; changeSelection: string; emptySelection: string; dayField: string; monthField: string; yearField: string; hourField: string; minuteField: string; secondField: string; startFieldLabel: string; endFieldLabel: string; timeFormat: string; timeFormatSeconds: string; meridiemField: string; meridiemAm: string; meridiemPm: string; }","dialog: { closeLabel: string; }","dropdown: { back: string; }","dropdownButton: { open: string; }","dropzone: { selectFiles: string; serverFiles: string; }","rating: { singleStar: string; multipleStars: string; clearHint: string; }","select: { multipleMaxReached: string; searchLabel: string; searchToStart: string; triggerLabel: string; }","slider: { minimumThumb: string; maximumThumb: string; }","badge: { clearLabel: string; }","breadcrumbs: { label: string; openHiddenLabelCount: string; }","pagination: { label: string; previous: string; next: string; }","confirm: { ok: string; cancel: string; }","offCanvas: { closeLabel: string; }","table: { actionsText: string; selectAllLabel: string; selectText: string; select: string; selectableLegend: string; reorderInstructions: string; columnMoved: string; resizeInstructions: string; }","timePickerInput: { emptySelection: string; emptyRange: string; changeSelection: string; changeSelectionRange: string; openPicker: string; start: string; end: string; }","counter: { count: string; countOfMax: string; remaining: string; limitReached: string; }"]},
55
+ {"name":"LocaleKey","usage":"advanced","component":null,"usedBy":[],"definition":"type LocaleKey = RegistryKey<LocaleRegistry, BuiltinLocaleInput>;","extensibleVia":"LocaleRegistry"},
55
56
  {"name":"LocaleRegistry","usage":"advanced","component":null,"usedBy":[],"definition":"interface LocaleRegistry { }","extensibleVia":"LocaleRegistry"},
56
57
  {"name":"PtScopeRegistry","usage":"advanced","component":null,"usedBy":[],"definition":"interface PtScopeRegistry { }","extensibleVia":"PtScopeRegistry"},
57
58
  {"name":"SafeAreaSide","usage":"advanced","component":null,"usedBy":[],"definition":"type SafeAreaSide = 'top' | 'right' | 'bottom' | 'left';","values":["top","bottom","left","right"]},
@@ -2,18 +2,19 @@
2
2
  "types": [
3
3
  {"name":"AlertVariantRegistry","usage":"api","component":null,"usedBy":[{"component":"BbAlert","surface":"prop","name":"variant"}],"definition":"interface AlertVariantRegistry { outline: true; primary: true; destructive: true; warning: true; }","values":["outline","primary","destructive","warning"],"extensibleVia":"AlertVariantRegistry"},
4
4
  {"name":"BadgeVariantType","usage":"api","component":null,"usedBy":[{"component":"BbBadge","surface":"prop","name":"variant"}],"definition":"type BadgeVariantType = BadgeVariantFromRegistry | 'none';","values":["primary","secondary","destructive","outline","none"],"extensibleVia":"BadgeVariantRegistry"},
5
- {"name":"BbBreadcrumbsItem","usage":"api","component":"BbBreadcrumbs","usedBy":[{"component":"BbBreadcrumbs","surface":"prop","name":"items"}],"definition":"type BbBreadcrumbsItem = Omit<BbBaseButtonProps, 'block' | 'tag' | 'type'> & { onClick?: (event: MouseEvent) => void | Promise<void>; key?: string; 'prepend:icon'?: IconType; 'append:icon'?: IconType; };"},
5
+ {"name":"BbBreadcrumbsItem","usage":"api","component":"BbBreadcrumbs","usedBy":[{"component":"BbBreadcrumbs","surface":"prop","name":"items"}],"definition":"type BbBreadcrumbsItem = Omit<BbBaseButtonProps, 'block' | 'tag' | 'type' | 'text'> & { onClick?: (event: MouseEvent) => void | Promise<void>; label?: string; value?: string; key?: never; text?: never; 'prepend:icon'?: IconType; 'append:icon'?: IconType; };"},
6
6
  {"name":"BbCalendarSegment","usage":"api","component":"BbCalendar","usedBy":[{"component":"BbCalendar","surface":"prop","name":"activeSegment"},{"component":"BbCalendar","surface":"event","name":"update:activeSegment"},{"component":"BbDatePicker","surface":"prop","name":"activeSegment"},{"component":"BbDatePicker","surface":"event","name":"update:activeSegment"}],"definition":"type BbCalendarSegment = 'start' | 'end';","values":["start","end"]},
7
7
  {"name":"BbCheckboxGroupItemsContext","usage":"api","component":null,"usedBy":[{"component":"BbCheckboxGroup","surface":"prop","name":"items"},{"component":"BbSwitchGroup","surface":"prop","name":"items"}],"definition":"type BbCheckboxGroupItemsContext<M = any> = BbItemsProviderContext<M> & { reason: 'initial' | 'dependencies' | 'model'; };"},
8
8
  {"name":"BbConfirmPortalSlotProps","usage":"api","component":"BbConfirm","usedBy":[{"component":"BbConfirmPortal","surface":"slot","name":"default"}],"definition":"type BbConfirmPortalSlotProps<P = any> = { props: P; yes: () => void; no: () => void; };"},
9
9
  {"name":"BbDialogSizes","usage":"api","component":"BbDialog","usedBy":[{"component":"BbDialog","surface":"prop","name":"size"}],"definition":"type BbDialogSizes = { xs: number; sm: number; md: number; lg: number; xl: number; '2xl': number; };"},
10
- {"name":"BbDropdownItem","usage":"api","component":"BbDropdown","usedBy":[{"component":"BbDropdown","surface":"prop","name":"items"},{"component":"BbDropdownButton","surface":"prop","name":"items"}],"definition":"type BbDropdownItem = InternalItem | InternalGroup | BbDropdownItem[];","members":{"InternalItem":["text: string","disabled?: boolean","href?: string","rel?: string","target?: string","activeClass?: string","ariaCurrentValue?: \"page\" | \"step\" | \"location\" | \"date\" | \"time\" | \"true\" | \"false\"","data?: object","exactActiveClass?: string","headers?: object","download?: string | boolean","external?: boolean","method?: \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\"","onBefore?: (() => void)","onCancel?: (() => void)","onCancelToken?: ((cancelToken: unknown) => void)","onFinish?: (() => void)","only?: string[]","onProgress?: ((progress: { percentage: number | undefined; }) => void)","onStart?: (() => void)","onSuccess?: (() => void)","preserveScroll?: boolean | ((props: Record<string, unknown>) => boolean)","preserveState?: boolean | ((props: Record<string, unknown>) => boolean) | null","queryStringArrayFormat?: \"brackets\" | \"indices\"","replace?: boolean","to?: string | RouteLocationAsRelativeGeneric | RouteLocationAsPathGeneric","async?: boolean","cacheFor?: string | number | (string | number)[]","cacheTags?: string | string[]","component?: string","except?: string[]","instant?: boolean","onError?: ((errors: Record<string, string>) => void)","onPrefetched?: (() => void)","onPrefetching?: (() => void)","pageProps?: Record<string, unknown> | ((currentProps: Record<string, unknown>, sharedProps: Record<string, unknown>) => Record<string, unknown>) | null","prefetch?: string | boolean | string[]","preserveUrl?: boolean","viewTransition?: boolean","items?: BbDropdownItem[]","onClick?: ((...args: any[]) => any)","append:icon?: string","key?: string","keyless?: true","meta?: any","prepend:icon?: string","variant?: keyof DropdownItemVariantRegistry","description?: string","placeholder?: \"loading\" | \"empty\" | \"failed\"","error?: unknown","fetched?: true","slotKey?: string"],"InternalGroup":["append:icon?: string","key?: string","keyless?: true","meta?: any","onClick?: ((...args: any[]) => any)","prepend:icon?: string","variant?: keyof DropdownItemVariantRegistry","dependencies?: unknown[]","depsDebounceTime?: number","enforceCoherence?: boolean","filterBy?: string[]","group?: true","items: any[] | DropdownGroupItemsGetter | (InternalItem | InternalItem[])[]","itemText?: string | ((item: any) => string)","itemProps?: BbDropdownItemProps<any>","itemValue?: string | ((item: any) => any)","loadingText?: string","max?: number","maxHeight?: string | number","multiple?: boolean","clearable?: boolean","emptyText?: string","failedText?: string","prefill?: boolean | \"interaction\"","searchable?: boolean","searchPlaceholder?: string","selectable?: boolean | ((item: any) => boolean)","stash?: boolean","label?: string","hideLabel?: boolean"]}},
11
- {"name":"BbDropdownItemSlotProps","usage":"api","component":"BbDropdown","usedBy":[{"component":"BbDropdown","surface":"slot","name":"item:append"},{"component":"BbDropdown","surface":"slot","name":"item:prepend"},{"component":"BbDropdown","surface":"slot","name":"<key>"},{"component":"BbDropdown","surface":"slot","name":"<key>:prepend"},{"component":"BbDropdown","surface":"slot","name":"<key>:append"},{"component":"BbDropdown","surface":"slot","name":"<groupKey>:item"},{"component":"BbDropdown","surface":"slot","name":"<groupKey>:item:prepend"},{"component":"BbDropdown","surface":"slot","name":"<groupKey>:item:append"},{"component":"BbDropdown","surface":"slot","name":"<groupKey>"},{"component":"BbDropdown","surface":"slot","name":"<groupKey>:prepend"},{"component":"BbDropdown","surface":"slot","name":"<groupKey>:append"},{"component":"BbDropdownButton","surface":"slot","name":"<key>"},{"component":"BbDropdownButton","surface":"slot","name":"<key>:prepend"},{"component":"BbDropdownButton","surface":"slot","name":"<key>:append"},{"component":"BbDropdownButton","surface":"slot","name":"<groupKey>:item"},{"component":"BbDropdownButton","surface":"slot","name":"<groupKey>:item:prepend"},{"component":"BbDropdownButton","surface":"slot","name":"<groupKey>:item:append"},{"component":"BbDropdownButton","surface":"slot","name":"<groupKey>"},{"component":"BbDropdownButton","surface":"slot","name":"<groupKey>:prepend"},{"component":"BbDropdownButton","surface":"slot","name":"<groupKey>:append"}],"definition":"type BbDropdownItemSlotProps = { description?: InternalItem['description']; disabled?: InternalItem['disabled']; group: BbDropdownSlotGroup; groupTitle: boolean; level: number; index: number; item: InternalItem; loading: boolean; open: boolean; placement: BbDropdownProps['placement']; selected: boolean; text: InternalItem['text']; };","fields":["description?: string","disabled?: boolean","group: BbDropdownSlotGroup","groupTitle: boolean","level: number","index: number","item: InternalItem","loading: boolean","open: boolean","placement: Placement | \"cursor\"","selected: boolean","text: string"]},
10
+ {"name":"BbDropdownItem","usage":"api","component":"BbDropdown","usedBy":[{"component":"BbDropdown","surface":"prop","name":"items"},{"component":"BbDropdownButton","surface":"prop","name":"items"}],"definition":"type BbDropdownItem = InternalItem | InternalGroup | BbDropdownItem[];","members":{"InternalItem":["disabled?: boolean","href?: string","rel?: string","target?: string","activeClass?: string","ariaCurrentValue?: \"page\" | \"step\" | \"location\" | \"date\" | \"time\" | \"true\" | \"false\"","data?: object","exactActiveClass?: string","headers?: object","download?: string | boolean","external?: boolean","method?: \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\"","onBefore?: (() => void)","onCancel?: (() => void)","onCancelToken?: ((cancelToken: unknown) => void)","onFinish?: (() => void)","only?: string[]","onProgress?: ((progress: { percentage: number | undefined; }) => void)","onStart?: (() => void)","onSuccess?: (() => void)","preserveScroll?: boolean | ((props: Record<string, unknown>) => boolean)","preserveState?: boolean | ((props: Record<string, unknown>) => boolean) | null","queryStringArrayFormat?: \"brackets\" | \"indices\"","replace?: boolean","to?: string | RouteLocationAsRelativeGeneric | RouteLocationAsPathGeneric","async?: boolean","cacheFor?: string | number | (string | number)[]","cacheTags?: string | string[]","component?: string","except?: string[]","instant?: boolean","onError?: ((errors: Record<string, string>) => void)","onPrefetched?: (() => void)","onPrefetching?: (() => void)","pageProps?: Record<string, unknown> | ((currentProps: Record<string, unknown>, sharedProps: Record<string, unknown>) => Record<string, unknown>) | null","prefetch?: string | boolean | string[]","preserveUrl?: boolean","viewTransition?: boolean","items?: BbDropdownItem[]","onClick?: ((...args: any[]) => any)","append:icon?: string","meta?: any","prepend:icon?: string","variant?: keyof DropdownItemVariantRegistry","label: string","value?: unknown","keyless?: true","rowKey?: string","domKey?: string","description?: string","placeholder?: \"loading\" | \"empty\" | \"failed\"","error?: unknown","fetched?: true","slotKey?: string"],"InternalGroup":["append:icon?: string","meta?: any","onClick?: ((...args: any[]) => any)","prepend:icon?: string","variant?: keyof DropdownItemVariantRegistry","id?: string","dependencies?: unknown[]","depsDebounceTime?: number","enforceCoherence?: boolean","filterBy?: string[]","group?: true","items: any[] | DropdownGroupItemsGetter | (InternalItem | InternalItem[])[]","itemText?: string | ((item: any) => string)","itemProps?: BbDropdownItemProps<any>","itemValue?: string | ((item: any) => any)","loadingText?: string","max?: number","maxHeight?: string | number","multiple?: boolean","clearable?: boolean","emptyText?: string","failedText?: string","prefill?: boolean | \"interaction\"","searchable?: boolean","searchPlaceholder?: string","selectable?: boolean | ((item: any) => boolean)","stash?: boolean","label?: string","hideLabel?: boolean"]}},
11
+ {"name":"BbDropdownItemSlotProps","usage":"api","component":"BbDropdown","usedBy":[{"component":"BbDropdown","surface":"slot","name":"item:append"},{"component":"BbDropdown","surface":"slot","name":"item:prepend"},{"component":"BbDropdown","surface":"slot","name":"<value>"},{"component":"BbDropdown","surface":"slot","name":"<value>:prepend"},{"component":"BbDropdown","surface":"slot","name":"<value>:append"},{"component":"BbDropdown","surface":"slot","name":"<groupId>:item"},{"component":"BbDropdown","surface":"slot","name":"<groupId>:item:prepend"},{"component":"BbDropdown","surface":"slot","name":"<groupId>:item:append"},{"component":"BbDropdown","surface":"slot","name":"<groupId>"},{"component":"BbDropdown","surface":"slot","name":"<groupId>:prepend"},{"component":"BbDropdown","surface":"slot","name":"<groupId>:append"},{"component":"BbDropdownButton","surface":"slot","name":"<value>"},{"component":"BbDropdownButton","surface":"slot","name":"<value>:prepend"},{"component":"BbDropdownButton","surface":"slot","name":"<value>:append"},{"component":"BbDropdownButton","surface":"slot","name":"<groupId>:item"},{"component":"BbDropdownButton","surface":"slot","name":"<groupId>:item:prepend"},{"component":"BbDropdownButton","surface":"slot","name":"<groupId>:item:append"},{"component":"BbDropdownButton","surface":"slot","name":"<groupId>"},{"component":"BbDropdownButton","surface":"slot","name":"<groupId>:prepend"},{"component":"BbDropdownButton","surface":"slot","name":"<groupId>:append"}],"definition":"type BbDropdownItemSlotProps = { description?: InternalItem['description']; disabled?: InternalItem['disabled']; group: BbDropdownSlotGroup; groupTitle: boolean; level: number; index: number; item: InternalItem; loading: boolean; open: boolean; placement: BbDropdownProps['placement']; selected: boolean; label: InternalItem['label']; };","fields":["description?: string","disabled?: boolean","group: BbDropdownSlotGroup","groupTitle: boolean","level: number","index: number","item: InternalItem","loading: boolean","open: boolean","placement: Placement | \"cursor\"","selected: boolean","label: string"]},
12
12
  {"name":"BbFormFieldEntry","usage":"api","component":null,"usedBy":[{"component":"BbForm","surface":"slot","name":"default"}],"definition":"type BbFormFieldEntry = { mounted: boolean; label: string | undefined; validationLabel: string | undefined; errors: string[]; dirty: boolean; touched: boolean; };"},
13
13
  {"name":"BbFormInvalidPayload","usage":"api","component":null,"usedBy":[{"component":"BbForm","surface":"event","name":"invalid"}],"definition":"type BbFormInvalidPayload = { errors: Record<string, string[]>; values: Record<string, unknown>; };"},
14
14
  {"name":"BbFormServerErrors","usage":"api","component":null,"usedBy":[{"component":"BbForm","surface":"slot","name":"default"}],"definition":"type BbFormServerErrors = Record<string, string | readonly string[] | null | undefined>;"},
15
15
  {"name":"BbFormSetErrorsOptions","usage":"api","component":null,"usedBy":[{"component":"BbForm","surface":"slot","name":"default"}],"definition":"type BbFormSetErrorsOptions = { focus?: boolean; };"},
16
16
  {"name":"BbHoverCardPortalSlotProps","usage":"api","component":"BbHoverCard","usedBy":[{"component":"BbHoverCardPortal","surface":"slot","name":"default"}],"definition":"type BbHoverCardPortalSlotProps<P = any> = { props: P; close: () => void; };"},
17
+ {"name":"BbNumberUnit","usage":"api","component":"BbNumberInput","usedBy":[{"component":"BbNumberInput","surface":"prop","name":"unit"}],"definition":"type BbNumberUnit = BbNumberSimpleUnit | `${string}-per-${string}`;"},
17
18
  {"name":"BbOffCanvasProps","usage":"api","component":"BbOffCanvas","usedBy":[{"component":"BbColorInput","surface":"prop","name":"offCanvasProps"},{"component":"BbColorPalette","surface":"prop","name":"offCanvasProps"},{"component":"BbDatePicker","surface":"prop","name":"offCanvasProps"},{"component":"BbDatePickerInput","surface":"prop","name":"offCanvasProps"},{"component":"BbDialog","surface":"prop","name":"offCanvasProps"},{"component":"BbDropdown","surface":"prop","name":"offCanvasProps"},{"component":"BbDropdownButton","surface":"prop","name":"offCanvasProps"},{"component":"BbPopover","surface":"prop","name":"offCanvasProps"},{"component":"BbSelect","surface":"prop","name":"offCanvasProps"},{"component":"BbSelectPopover","surface":"prop","name":"offCanvasProps"},{"component":"BbTimePicker","surface":"prop","name":"offCanvasProps"},{"component":"BbTimePickerInput","surface":"prop","name":"offCanvasProps"}],"definition":"type BbOffCanvasProps = { [K in `pt:${BbOffCanvasPtPart}` | `pt:${BbOffCanvasPtPart}:${BbOffCanvasPtState}`]?: PtValue; } & { pt?: PtMap<BbOffCanvasPtPart, BbOffCanvasPtState>; description?: string; disabled?: boolean; eager?: boolean; focusTarget?: string; fullscreen?: boolean | 'mobile'; draggable?: boolean; stack?: string; stackGap?: number; persistent?: boolean; hideClose?: boolean; size?: Responsive<OffCanvasSize>; title?: string; transitionDuration?: number; side?: 'left' | 'top' | 'right' | 'bottom'; };","fields":["description?: string","disabled?: boolean","eager?: boolean","focusTarget?: string","fullscreen?: boolean | \"mobile\"","draggable?: boolean","stack?: string","stackGap?: number","persistent?: boolean","hideClose?: boolean","size?: Responsive<OffCanvasSize>","title?: string","transitionDuration?: number","side?: \"top\" | \"bottom\" | \"left\" | \"right\""]},
18
19
  {"name":"BbOptionGroupItemProps","usage":"api","component":null,"usedBy":[{"component":"BbCheckboxGroup","surface":"prop","name":"itemProps"},{"component":"BbRadioGroup","surface":"prop","name":"itemProps"},{"component":"BbSwitchGroup","surface":"prop","name":"itemProps"}],"definition":"type BbOptionGroupItemProps<T = any> = ItemProps<T, OptionGroupItemFields>;","fields":["description?: ItemAccessor<T, string | null | undefined>"]},
19
20
  {"name":"BbPopoverPortalSlotProps","usage":"api","component":"BbPopover","usedBy":[{"component":"BbPopoverPortal","surface":"slot","name":"default"}],"definition":"type BbPopoverPortalSlotProps<P = any> = { props: P; close: () => void; };"},
@@ -27,7 +28,7 @@
27
28
  {"name":"BbTableItemsContext","usage":"api","component":null,"usedBy":[{"component":"BbTable","surface":"prop","name":"items"}],"definition":"type BbTableItemsContext<M = any> = BbItemsProviderContext<M> & { reason: 'initial' | 'dependencies' | 'pagination'; };"},
28
29
  {"name":"BbTableRowClasses","usage":"api","component":"BbTable","usedBy":[{"component":"BbTable","surface":"prop","name":"rowClass"}],"definition":"type BbTableRowClasses<Item = any> = Classes | ((item: Item) => Classes | undefined);"},
29
30
  {"name":"BbTableSortEntry","usage":"api","component":"BbTable","usedBy":[{"component":"BbTable","surface":"prop","name":"sort"},{"component":"BbTable","surface":"event","name":"update:sort"}],"definition":"type BbTableSortEntry = [ key: string, direction: 'asc' | 'desc' ];"},
30
- {"name":"BbTabsItem","usage":"api","component":"BbTabs","usedBy":[{"component":"BbTabs","surface":"prop","name":"items"},{"component":"BbTabs","surface":"prop","name":"pt"},{"component":"BbTabs","surface":"prop","name":"pt:item"},{"component":"BbTabsList","surface":"prop","name":"pt"},{"component":"BbTabsList","surface":"prop","name":"pt:item"},{"component":"BbTabsRoot","surface":"prop","name":"items"}],"definition":"type BbTabsItem<K extends string = string> = BbTabsInertiaOptions & { disabled?: boolean; eager?: boolean; href?: string; key: K; label?: string; server?: boolean; };"},
31
+ {"name":"BbTabsItem","usage":"api","component":"BbTabs","usedBy":[{"component":"BbTabs","surface":"prop","name":"items"},{"component":"BbTabs","surface":"prop","name":"pt"},{"component":"BbTabs","surface":"prop","name":"pt:item"},{"component":"BbTabsList","surface":"prop","name":"pt"},{"component":"BbTabsList","surface":"prop","name":"pt:item"},{"component":"BbTabsRoot","surface":"prop","name":"items"}],"definition":"type BbTabsItem<K extends string = string> = BbTabsInertiaOptions & { disabled?: boolean; eager?: boolean; href?: string; value: K; key?: never; label?: string; server?: boolean; };"},
31
32
  {"name":"BbTimePickerSegment","usage":"api","component":"BbTimePicker","usedBy":[{"component":"BbTimePicker","surface":"prop","name":"activeSegment"},{"component":"BbTimePicker","surface":"event","name":"update:activeSegment"}],"definition":"type BbTimePickerSegment = 'start' | 'end';","values":["start","end"]},
32
33
  {"name":"BbToastPosition","usage":"api","component":"BbToast","usedBy":[{"component":"BbToast","surface":"prop","name":"position"}],"definition":"type BbToastPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';","values":["top-left","top-center","top-right","bottom-left","bottom-center","bottom-right"]},
33
34
  {"name":"BbTreeItem","usage":"api","component":"BbTree","usedBy":[{"component":"BbTree","surface":"prop","name":"items"}],"definition":"type BbTreeItem<Meta = any> = { meta: Meta; children?: Array<BbTreeItem<Meta>>; expanded?: boolean; expandable?: BbTreeExpandable<Meta>; };","fields":["meta: Meta","children?: BbTreeItem<Meta>[]","expanded?: boolean","expandable?: BbTreeExpandable<Meta>"]},
@@ -35,9 +35,8 @@ Sibling recipes: [Vue](../vue/approvals-inbox.md) ·
35
35
  the peek stack, the close semantics and the sidebar's out-of-flow
36
36
  behaviour are all load-bearing here.
37
37
  - `<BbConfirm />` and `<BbToast />` mounted once in the `createInertiaApp` render root — never in a page.
38
- - From the [Inertia Helpers](../../guides/inertia-helpers.md) toolkit:
39
- `useTableContext`, `useQueryObject`, `useResourceContext`, `useProp`,
40
- `useQuery`.
38
+ - From the [Inertia Helpers](../../guides/inertia-helpers.md) toolkit, installed with
39
+ `npx bitboss-ui add useProp useQuery useQueryObject useResourceContext useTableContext`.
41
40
  - Controller: `Inertia::render('Approvals/Index', ['expenses' =>
42
41
  ExpensePaginator::make(...), 'tabCounts' => [...]])` — `expenses` is a
43
42
  standard Laravel paginator (`PaginatedResponse<Expense>`) and `tabCounts`
@@ -188,10 +187,10 @@ import {
188
187
  import {
189
188
  useTableContext,
190
189
  type TableContext,
191
- } from '@/composables/useTableContext';
192
- import { useQueryObject } from '@/composables/useQueryObject';
193
- import { useProp } from '@/composables/useProp';
194
- import { useQuery } from '@/composables/useQuery';
190
+ } from '@/composables/inertia-helpers/useTableContext';
191
+ import { useQueryObject } from '@/composables/inertia-helpers/useQueryObject';
192
+ import { useProp } from '@/composables/inertia-helpers/useProp';
193
+ import { useQuery } from '@/composables/inertia-helpers/useQuery';
195
194
  import type { Expense, ExpenseCategory, ExpenseStatus } from '@/types';
196
195
 
197
196
  /** What the stacked sidebar can show. Clicking a name pushes one of these. */
@@ -578,9 +577,9 @@ export function useApprovalsInbox(): ApprovalsInboxContext {
578
577
  <BbBreadcrumbs
579
578
  class="min-w-0 flex-auto"
580
579
  :items="[
581
- { key: 'dashboard', text: 'Dashboard', href: '/dashboard' },
582
- { key: 'finance', text: 'Finance', href: '/finance' },
583
- { key: 'approvals', text: 'Approvals' },
580
+ { value: 'dashboard', label: 'Dashboard', href: '/dashboard' },
581
+ { value: 'finance', label: 'Finance', href: '/finance' },
582
+ { value: 'approvals', label: 'Approvals' },
584
583
  ]"
585
584
  />
586
585
  <BbTextInput
@@ -614,28 +613,28 @@ export function useApprovalsInbox(): ApprovalsInboxContext {
614
613
  compact
615
614
  :items="[
616
615
  {
617
- key: 'needsApproval',
616
+ value: 'needsApproval',
618
617
  label: `Needs approval · ${ctx.tabCounts.value.needsApproval}`,
619
618
  href: tabHref('needsApproval'),
620
619
  server: true,
621
620
  only: ['expenses', 'tabCounts'],
622
621
  },
623
622
  {
624
- key: 'approved',
623
+ value: 'approved',
625
624
  label: `Approved · ${ctx.tabCounts.value.approved}`,
626
625
  href: tabHref('approved'),
627
626
  server: true,
628
627
  only: ['expenses', 'tabCounts'],
629
628
  },
630
629
  {
631
- key: 'rejected',
630
+ value: 'rejected',
632
631
  label: `Rejected · ${ctx.tabCounts.value.rejected}`,
633
632
  href: tabHref('rejected'),
634
633
  server: true,
635
634
  only: ['expenses', 'tabCounts'],
636
635
  },
637
636
  {
638
- key: 'all',
637
+ value: 'all',
639
638
  label: `All · ${ctx.tabCounts.value.all}`,
640
639
  href: tabHref('all'),
641
640
  server: true,
@@ -762,7 +761,7 @@ import {
762
761
  } from 'bitboss-ui';
763
762
  import qs from 'query-string';
764
763
  import PageShell from '@/components/layout/PageShell.vue';
765
- import { useQuery } from '@/composables/useQuery';
764
+ import { useQuery } from '@/composables/inertia-helpers/useQuery';
766
765
  import {
767
766
  type ApprovalsTab,
768
767
  CATEGORY_LABEL,
@@ -856,7 +855,6 @@ const rowClass = (item: Expense) =>
856
855
  <BbSelectPopover
857
856
  v-model="ctx.filters.categories"
858
857
  item-text="text"
859
- item-value="value"
860
858
  :items="CATEGORY_OPTIONS"
861
859
  multiple
862
860
  >
@@ -1483,7 +1481,7 @@ const ctx = useApprovalsInbox();
1483
1481
  <script setup lang="ts">
1484
1482
  import { computed, watch } from 'vue';
1485
1483
  import { BbBadge, BbBaseButton, BbButton, BbIcon, BbSpinner } from 'bitboss-ui';
1486
- import { useResourceContext } from '@/composables/useResourceContext';
1484
+ import { useResourceContext } from '@/composables/inertia-helpers/useResourceContext';
1487
1485
  import { CATEGORY_LABEL, STATUS_LABEL, useApprovalsInbox } from './context';
1488
1486
  import type { ExpenseDetail } from '@/types';
1489
1487
 
@@ -1606,7 +1604,7 @@ import {
1606
1604
  BbButton,
1607
1605
  BbSpinner,
1608
1606
  } from 'bitboss-ui';
1609
- import { useResourceContext } from '@/composables/useResourceContext';
1607
+ import { useResourceContext } from '@/composables/inertia-helpers/useResourceContext';
1610
1608
  import { STATUS_LABEL, useApprovalsInbox } from './context';
1611
1609
  import type { SubmitterDetail } from '@/types';
1612
1610
 
@@ -46,9 +46,9 @@ recipe assumes) ·
46
46
  label state) · [Page Shell](../../guides/page-shell.md) ·
47
47
  [Floating Bottom Panel](../../guides/floating-bottom-panel.md).
48
48
 
49
- From the [Inertia Helpers](../../guides/inertia-helpers.md) toolkit:
50
- `useTableContext`, `useQueryObject`, `useQuery`, `useProp`,
51
- `useResourceContext`. `<BbConfirm />` and `<BbToast />` mounted once in the
49
+ From the [Inertia Helpers](../../guides/inertia-helpers.md) toolkit, installed
50
+ with `npx bitboss-ui add useProp useQuery useQueryObject useResourceContext useTableContext`.
51
+ `<BbConfirm />` and `<BbToast />` mounted once in the
52
52
  `createInertiaApp` render root — never in a page.
53
53
 
54
54
  Controller: `Inertia::render('BacklogWorkspace/Index', ['issues' => …, 'tabCounts'
@@ -267,10 +267,10 @@ import {
267
267
  import {
268
268
  useTableContext,
269
269
  type TableContext,
270
- } from '@/composables/useTableContext';
271
- import { useQueryObject } from '@/composables/useQueryObject';
272
- import { useQuery } from '@/composables/useQuery';
273
- import { useProp } from '@/composables/useProp';
270
+ } from '@/composables/inertia-helpers/useTableContext';
271
+ import { useQueryObject } from '@/composables/inertia-helpers/useQueryObject';
272
+ import { useQuery } from '@/composables/inertia-helpers/useQuery';
273
+ import { useProp } from '@/composables/inertia-helpers/useProp';
274
274
  import type { Issue, IssuePriority, IssueStatus, Member } from '@/types';
275
275
 
276
276
  /**
@@ -786,9 +786,9 @@ export function useBacklogWorkspace(): BacklogWorkspaceContext {
786
786
  <BbBreadcrumbs
787
787
  class="min-w-0 flex-auto"
788
788
  :items="[
789
- { key: 'product', text: 'Product', href: '/product' },
790
- { key: 'sprints', text: 'Sprints', href: '/sprints' },
791
- { key: 'sprint-24', text: 'Sprint 24' },
789
+ { value: 'product', label: 'Product', href: '/product' },
790
+ { value: 'sprints', label: 'Sprints', href: '/sprints' },
791
+ { value: 'sprint-24', label: 'Sprint 24' },
792
792
  ]"
793
793
  />
794
794
  <div class="flex shrink-0 items-center gap-2">
@@ -832,21 +832,21 @@ export function useBacklogWorkspace(): BacklogWorkspaceContext {
832
832
  compact
833
833
  :items="[
834
834
  {
835
- key: 'backlog',
835
+ value: 'backlog',
836
836
  label: `Backlog · ${ctx.tabCounts.value.backlog}`,
837
837
  href: tabHref('backlog'),
838
838
  server: true,
839
839
  only: ['issues', 'tabCounts'],
840
840
  },
841
841
  {
842
- key: 'current',
842
+ value: 'current',
843
843
  label: `Current sprint · ${ctx.tabCounts.value.current}`,
844
844
  href: tabHref('current'),
845
845
  server: true,
846
846
  only: ['issues', 'tabCounts'],
847
847
  },
848
848
  {
849
- key: 'done',
849
+ value: 'done',
850
850
  label: `Done · ${ctx.tabCounts.value.done}`,
851
851
  href: tabHref('done'),
852
852
  server: true,
@@ -999,7 +999,7 @@ import {
999
999
  } from 'bitboss-ui';
1000
1000
  import qs from 'query-string';
1001
1001
  import PageShell from '@/components/layout/PageShell.vue';
1002
- import { useQuery } from '@/composables/useQuery';
1002
+ import { useQuery } from '@/composables/inertia-helpers/useQuery';
1003
1003
  import { provideBacklogWorkspace, type SprintTab } from './context';
1004
1004
  import AssigneeCell from './AssigneeCell.vue';
1005
1005
  import EditableTitleCell from './EditableTitleCell.vue';
@@ -1068,8 +1068,6 @@ const rowClass = (item: Issue) =>
1068
1068
  <BbSelectPopover
1069
1069
  v-model="ctx.filters.status"
1070
1070
  disable-writing
1071
- item-text="label"
1072
- item-value="value"
1073
1071
  :items="STATUS_OPTIONS"
1074
1072
  multiple
1075
1073
  >
@@ -1102,8 +1100,6 @@ const rowClass = (item: Issue) =>
1102
1100
  <BbSelectPopover
1103
1101
  v-model="ctx.filters.priority"
1104
1102
  disable-writing
1105
- item-text="label"
1106
- item-value="value"
1107
1103
  :items="PRIORITY_OPTIONS"
1108
1104
  multiple
1109
1105
  >
@@ -1269,8 +1265,6 @@ const commit = (event: Event) => {
1269
1265
  <BbSelectPopover
1270
1266
  compact
1271
1267
  disable-writing
1272
- item-text="label"
1273
- item-value="value"
1274
1268
  :items="STATUS_OPTIONS"
1275
1269
  :model-value="status"
1276
1270
  width="180px"
@@ -1347,8 +1341,6 @@ const label = computed(
1347
1341
  <BbSelectPopover
1348
1342
  compact
1349
1343
  disable-writing
1350
- item-text="label"
1351
- item-value="value"
1352
1344
  :items="PRIORITY_OPTIONS"
1353
1345
  :model-value="priority"
1354
1346
  width="160px"
@@ -1413,8 +1405,8 @@ const label = computed(
1413
1405
  <template>
1414
1406
  <!-- Provider-backed people picker. The provider is the ONE shared
1415
1407
  `searchMembers` — lazy per instance, so a row nobody opens never resolves.
1416
- The whole member is the value (no item-value), matching how the row
1417
- stores it. -->
1408
+ The whole member is the value (no item-value, and a Member has no `value`
1409
+ of its own), matching how the row stores it. -->
1418
1410
  <BbSelectPopover
1419
1411
  compact
1420
1412
  item-text="name"
@@ -1480,20 +1472,20 @@ const assignee = computed(() => ctx.valueOf(props.issue, 'assignee'));
1480
1472
  :boundary="boundary"
1481
1473
  :items="[
1482
1474
  {
1483
- key: 'duplicate',
1484
- text: 'Duplicate',
1475
+ value: 'duplicate',
1476
+ label: 'Duplicate',
1485
1477
  'prepend:icon': 'lucide:copy',
1486
1478
  onClick: () => ctx.duplicateIssue(issue),
1487
1479
  },
1488
1480
  {
1489
- key: 'next-sprint',
1490
- text: 'Move to next sprint',
1481
+ value: 'next-sprint',
1482
+ label: 'Move to next sprint',
1491
1483
  'prepend:icon': 'lucide:arrow-right',
1492
1484
  onClick: () => ctx.moveToNextSprint(issue),
1493
1485
  },
1494
1486
  {
1495
- key: 'delete',
1496
- text: 'Delete',
1487
+ value: 'delete',
1488
+ label: 'Delete',
1497
1489
  'prepend:icon': 'lucide:trash-2',
1498
1490
  variant: 'destructive',
1499
1491
  onClick: () => ctx.deleteIssue(issue),
@@ -1538,8 +1530,6 @@ const ctx = useBacklogWorkspace();
1538
1530
  menu clears the bar. -->
1539
1531
  <BbSelectPopover
1540
1532
  disable-writing
1541
- item-text="label"
1542
- item-value="value"
1543
1533
  :items="STATUS_OPTIONS"
1544
1534
  :model-value="null"
1545
1535
  :offset="8"
@@ -1722,7 +1712,7 @@ const ctx = useBacklogWorkspace();
1722
1712
  <script setup lang="ts">
1723
1713
  import { watch } from 'vue';
1724
1714
  import { BbButton, BbIcon, BbSpinner } from 'bitboss-ui';
1725
- import { useResourceContext } from '@/composables/useResourceContext';
1715
+ import { useResourceContext } from '@/composables/inertia-helpers/useResourceContext';
1726
1716
  import AssigneeCell from './AssigneeCell.vue';
1727
1717
  import PriorityCell from './PriorityCell.vue';
1728
1718
  import StatusCell from './StatusCell.vue';
@@ -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',
@@ -28,8 +28,8 @@ Sibling recipes: [Vue](../vue/onboarding.md) · [Nuxt](../nuxt/onboarding.md).
28
28
  the peek stack, the close semantics and the sidebar's out-of-flow
29
29
  behaviour are all load-bearing here.
30
30
  - `<BbConfirm />` and `<BbToast />` mounted once in the `createInertiaApp` render root — never in a page.
31
- - From the [Inertia Helpers](../../guides/inertia-helpers.md) toolkit:
32
- `useProp`, `usePromiseForm`.
31
+ - From the [Inertia Helpers](../../guides/inertia-helpers.md) toolkit, installed with
32
+ `npx bitboss-ui add usePromiseForm useProp`.
33
33
  - Controller: `Inertia::render('Onboarding/Index', ['onboarding' => [
34
34
  'steps' => [...], 'connectedIntegrations' => [...], 'workspace' => ...,
35
35
  'invites' => [...], 'firstProject' => ..., 'importedCustomers' => ...,
@@ -156,8 +156,8 @@ import {
156
156
  usePageShellContext,
157
157
  type PageShellContext,
158
158
  } from '@/components/layout/usePageShellContext';
159
- import { useProp } from '@/composables/useProp';
160
- import { usePromiseForm } from '@/composables/usePromiseForm';
159
+ import { useProp } from '@/composables/inertia-helpers/useProp';
160
+ import { usePromiseForm } from '@/composables/inertia-helpers/usePromiseForm';
161
161
  import type {
162
162
  InviteRole,
163
163
  PendingInvite,
@@ -697,8 +697,8 @@ export function useOnboardingWorkspace(): OnboardingWorkspaceContext {
697
697
  <BbBreadcrumbs
698
698
  class="min-w-0 flex-auto"
699
699
  :items="[
700
- { key: 'dashboard', text: 'Dashboard', href: '/dashboard' },
701
- { key: 'getting-started', text: 'Getting started' },
700
+ { value: 'dashboard', label: 'Dashboard', href: '/dashboard' },
701
+ { value: 'getting-started', label: 'Getting started' },
702
702
  ]"
703
703
  />
704
704
  <BbButton
@@ -1063,8 +1063,6 @@ const ctx = useOnboardingWorkspace();
1063
1063
  v-model="role"
1064
1064
  class="w-44"
1065
1065
  compact
1066
- item-text="label"
1067
- item-value="value"
1068
1066
  :items="roles"
1069
1067
  label="Role"
1070
1068
  label-mode="outside"
@@ -1427,8 +1425,6 @@ import { BbButton } from 'bitboss-ui';
1427
1425
  v-if="ctx.reminders.enabled"
1428
1426
  class="max-w-72"
1429
1427
  compact
1430
- item-text="label"
1431
- item-value="value"
1432
1428
  :items="cadences"
1433
1429
  label="Reminder schedule"
1434
1430
  label-mode="outside"