bitboss-ui 3.0.0-beta.5 → 3.0.0-beta.50

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 (1229) hide show
  1. package/README.md +388 -99
  2. package/bin/bitboss-ui-mcp.mjs +2684 -124
  3. package/bin/bitboss-ui.mjs +1034 -80
  4. package/dist/ai/BbAccordion.md +202 -58
  5. package/dist/ai/BbAlert.md +150 -32
  6. package/dist/ai/BbAsterisk.md +65 -4
  7. package/dist/ai/BbAvatar.md +202 -56
  8. package/dist/ai/BbBadge.md +256 -50
  9. package/dist/ai/BbBadgeButton.md +77 -21
  10. package/dist/ai/BbBaseButton.md +132 -51
  11. package/dist/ai/BbBaseCheckboxIcon.md +118 -26
  12. package/dist/ai/BbBaseRadioIcon.md +115 -26
  13. package/dist/ai/BbBaseSwitchIcon.md +123 -28
  14. package/dist/ai/BbBreadcrumbs.md +280 -104
  15. package/dist/ai/BbButton.md +445 -111
  16. package/dist/ai/BbCalendar.md +686 -0
  17. package/dist/ai/BbCheckbox.md +258 -82
  18. package/dist/ai/BbCheckboxGroup.md +597 -83
  19. package/dist/ai/BbCollapsible.md +158 -39
  20. package/dist/ai/BbColorInput.md +327 -82
  21. package/dist/ai/BbColorPalette.md +273 -67
  22. package/dist/ai/BbConfirm.md +228 -51
  23. package/dist/ai/BbConfirmPortal.md +2 -2
  24. package/dist/ai/BbDatePicker.md +275 -40
  25. package/dist/ai/BbDatePickerInput.md +357 -111
  26. package/dist/ai/BbDialog.md +510 -108
  27. package/dist/ai/BbDropdown.md +1335 -206
  28. package/dist/ai/BbDropdownButton.md +290 -107
  29. package/dist/ai/BbDropdownGroup.md +6 -6
  30. package/dist/ai/BbDropzone.md +380 -72
  31. package/dist/ai/BbForm.md +1261 -46
  32. package/dist/ai/BbHoverCard.md +527 -0
  33. package/dist/ai/BbHoverCardPortal.md +29 -0
  34. package/dist/ai/BbIcon.md +125 -40
  35. package/dist/ai/BbIndicator.md +79 -12
  36. package/dist/ai/BbNumberInput.md +345 -100
  37. package/dist/ai/BbOffCanvas.md +403 -96
  38. package/dist/ai/BbPagination.md +204 -34
  39. package/dist/ai/BbPopover.md +360 -64
  40. package/dist/ai/BbPopoverPortal.md +29 -0
  41. package/dist/ai/BbProgress.md +182 -90
  42. package/dist/ai/BbPtScope.md +136 -0
  43. package/dist/ai/BbRadio.md +242 -43
  44. package/dist/ai/BbRadioGroup.md +550 -111
  45. package/dist/ai/BbRating.md +256 -62
  46. package/dist/ai/BbSelect.md +1121 -289
  47. package/dist/ai/BbSelectPopover.md +676 -192
  48. package/dist/ai/BbSlider.md +285 -80
  49. package/dist/ai/BbSmoothHeight.md +144 -37
  50. package/dist/ai/BbSpinner.md +179 -81
  51. package/dist/ai/BbSwitch.md +276 -63
  52. package/dist/ai/BbSwitchGroup.md +421 -87
  53. package/dist/ai/BbTable.md +1941 -296
  54. package/dist/ai/BbTabs.md +992 -231
  55. package/dist/ai/BbTabsList.md +81 -7
  56. package/dist/ai/BbTabsPanels.md +77 -0
  57. package/dist/ai/BbTabsRoot.md +18 -16
  58. package/dist/ai/BbTag.md +271 -80
  59. package/dist/ai/BbTextInput.md +535 -105
  60. package/dist/ai/BbTextarea.md +414 -138
  61. package/dist/ai/BbTimePicker.md +166 -27
  62. package/dist/ai/BbTimePickerInput.md +290 -49
  63. package/dist/ai/BbToast.md +287 -40
  64. package/dist/ai/BbToastPortal.md +3 -3
  65. package/dist/ai/BbTooltip.md +231 -46
  66. package/dist/ai/BbTree.md +272 -94
  67. package/dist/ai/ChipsBox.md +46 -2
  68. package/dist/ai/ClearableButton.md +12 -0
  69. package/dist/ai/CommaBox.md +2 -1
  70. package/dist/ai/CommonField.md +75 -0
  71. package/dist/ai/CommonFieldInput.md +91 -0
  72. package/dist/ai/CommonPopover.md +17 -12
  73. package/dist/ai/CommonTimeSelector.md +63 -0
  74. package/dist/ai/ErrorIcon.md +20 -0
  75. package/dist/ai/FlatListBox.md +42 -11
  76. package/dist/ai/GroupedListBox.md +43 -12
  77. package/dist/ai/ListBox.md +47 -11
  78. package/dist/ai/OptionsContainer.md +17 -10
  79. package/dist/ai/WarningIcon.md +20 -0
  80. package/dist/ai/changelog.json +5750 -141
  81. package/dist/ai/components.json +475 -16272
  82. package/dist/ai/composables/useBbConfig.md +72 -11
  83. package/dist/ai/composables/useBbDropdownContext.md +168 -0
  84. package/dist/ai/composables/useBbFormContext.md +51 -24
  85. package/dist/ai/composables/useBbFormField.md +149 -0
  86. package/dist/ai/composables/useBbTableContext.md +41 -19
  87. package/dist/ai/composables/useBbTabsContext.md +14 -14
  88. package/dist/ai/composables/useConfirm.md +16 -8
  89. package/dist/ai/composables/useCountdown.md +1 -1
  90. package/dist/ai/composables/useId.md +10 -10
  91. package/dist/ai/composables/useMobile.md +17 -10
  92. package/dist/ai/composables/useToast.md +25 -19
  93. package/dist/ai/design-tokens.json +967 -0
  94. package/dist/ai/design-tokens.manifest.yaml +175 -0
  95. package/dist/ai/guides/agent-contract.md +182 -23
  96. package/dist/ai/guides/ai-router.md +87 -43
  97. package/dist/ai/guides/app-layout.md +8 -4
  98. package/dist/ai/guides/coherence-playbook.md +25 -21
  99. package/dist/ai/guides/component-picker.md +60 -46
  100. package/dist/ai/guides/design-language.md +280 -99
  101. package/dist/ai/guides/design-tokens.md +600 -117
  102. package/dist/ai/guides/fetch-items-playbook.md +127 -81
  103. package/dist/ai/guides/icons-policy.md +75 -45
  104. package/dist/ai/guides/inertia-helpers.md +201 -82
  105. package/dist/ai/guides/inline-edit-playbook.md +13 -6
  106. package/dist/ai/guides/installation-and-plugin-setup.md +912 -91
  107. package/dist/ai/guides/migration/components/bb-accordion.md +37 -0
  108. package/dist/ai/guides/migration/components/bb-alert.md +2 -2
  109. package/dist/ai/guides/migration/components/bb-avatar.md +13 -14
  110. package/dist/ai/guides/migration/components/bb-badge.md +5 -5
  111. package/dist/ai/guides/migration/components/bb-breadcrumbs.md +13 -10
  112. package/dist/ai/guides/migration/components/bb-button.md +80 -20
  113. package/dist/ai/guides/migration/components/bb-checkbox-group.md +116 -29
  114. package/dist/ai/guides/migration/components/bb-checkbox.md +53 -10
  115. package/dist/ai/guides/migration/components/bb-chip.md +6 -6
  116. package/dist/ai/guides/migration/components/bb-collapsible.md +5 -5
  117. package/dist/ai/guides/migration/components/bb-color-input.md +5 -5
  118. package/dist/ai/guides/migration/components/bb-color-palette.md +16 -9
  119. package/dist/ai/guides/migration/components/bb-date-picker-input.md +51 -38
  120. package/dist/ai/guides/migration/components/bb-dialog.md +69 -36
  121. package/dist/ai/guides/migration/components/bb-dropdown-button.md +15 -8
  122. package/dist/ai/guides/migration/components/bb-dropdown.md +33 -9
  123. package/dist/ai/guides/migration/components/bb-dropzone.md +8 -0
  124. package/dist/ai/guides/migration/components/bb-icon.md +7 -7
  125. package/dist/ai/guides/migration/components/bb-intersection.md +1 -1
  126. package/dist/ai/guides/migration/components/bb-offcanvas.md +29 -31
  127. package/dist/ai/guides/migration/components/bb-pagination.md +10 -0
  128. package/dist/ai/guides/migration/components/bb-popover.md +19 -11
  129. package/dist/ai/guides/migration/components/bb-radio-group.md +15 -0
  130. package/dist/ai/guides/migration/components/bb-rating.md +61 -24
  131. package/dist/ai/guides/migration/components/bb-select-popover.md +20 -2
  132. package/dist/ai/guides/migration/components/bb-select.md +39 -8
  133. package/dist/ai/guides/migration/components/bb-slider.md +19 -6
  134. package/dist/ai/guides/migration/components/bb-switch-group.md +15 -0
  135. package/dist/ai/guides/migration/components/bb-table.md +586 -33
  136. package/dist/ai/guides/migration/components/bb-tabs.md +94 -43
  137. package/dist/ai/guides/migration/components/bb-tag.md +9 -7
  138. package/dist/ai/guides/migration/components/bb-text-input.md +12 -12
  139. package/dist/ai/guides/migration/components/bb-toast.md +2 -2
  140. package/dist/ai/guides/migration/components/bb-tooltip.md +19 -1
  141. package/dist/ai/guides/migration/components/bb-tree.md +11 -9
  142. package/dist/ai/guides/migration/components/use-confirm.md +9 -1
  143. package/dist/ai/guides/migration/v2-to-v3.md +1203 -277
  144. package/dist/ai/guides/migration/v3-beta-css-classes.md +753 -0
  145. package/dist/ai/guides/migration/v3-beta-tooling.md +208 -0
  146. package/dist/ai/guides/options-items-playbook.md +177 -22
  147. package/dist/ai/guides/page-shell.md +13 -7
  148. package/dist/ai/guides/passthrough.md +968 -0
  149. package/dist/ai/guides/preset-components.md +387 -0
  150. package/dist/ai/guides/ssr-prefill.md +150 -0
  151. package/dist/ai/guides/typescript-generic-components.md +87 -0
  152. package/dist/ai/guides/validated-forms.md +460 -55
  153. package/dist/ai/guides/validation-libraries.md +174 -0
  154. package/dist/ai/guides/validation-providers.md +127 -0
  155. package/dist/ai/helpers/inertia/manifest.json +636 -0
  156. package/dist/ai/helpers/inertia/types.ts +15 -0
  157. package/dist/ai/helpers/inertia/useAsyncFn.ts +110 -0
  158. package/dist/ai/helpers/inertia/useConfirmOnRouteLeave.ts +102 -0
  159. package/dist/ai/helpers/inertia/useDeleteCmd.ts +30 -0
  160. package/dist/ai/helpers/inertia/useHasChanged.ts +36 -0
  161. package/dist/ai/helpers/inertia/useIndexById.ts +23 -0
  162. package/dist/ai/helpers/inertia/useLazyProp.ts +148 -0
  163. package/dist/ai/helpers/inertia/useLazyPropGetter.ts +50 -0
  164. package/dist/ai/helpers/inertia/useLoading.ts +20 -0
  165. package/dist/ai/helpers/inertia/usePaginatedResponseContext.ts +88 -0
  166. package/dist/ai/helpers/inertia/usePromiseForm.ts +62 -0
  167. package/dist/ai/helpers/inertia/useProp.ts +63 -0
  168. package/dist/ai/helpers/inertia/useQuery.ts +19 -0
  169. package/dist/ai/helpers/inertia/useQueryObject.ts +116 -0
  170. package/dist/ai/helpers/inertia/useResourceContext.ts +69 -0
  171. package/dist/ai/helpers/inertia/useRouteQuery.ts +54 -0
  172. package/dist/ai/helpers/inertia/useScreenSizes.ts +23 -0
  173. package/dist/ai/helpers/inertia/useTableContext.ts +34 -0
  174. package/dist/ai/helpers/inertia/useTableSelectionContext.ts +48 -0
  175. package/dist/ai/helpers/inertia/useUntil.ts +33 -0
  176. package/dist/ai/helpers/inertia/utils.ts +24 -0
  177. package/dist/ai/index.md +61 -57
  178. package/dist/ai/manifest/components/BbAccordion.json +42 -0
  179. package/dist/ai/manifest/components/BbAccordion.tree.json +26 -0
  180. package/dist/ai/manifest/components/BbAlert.json +56 -0
  181. package/dist/ai/manifest/components/BbAlert.tree.json +80 -0
  182. package/dist/ai/manifest/components/BbAsterisk.json +26 -0
  183. package/dist/ai/manifest/components/BbAsterisk.tree.json +13 -0
  184. package/dist/ai/manifest/components/BbAvatar.json +38 -0
  185. package/dist/ai/manifest/components/BbAvatar.tree.json +39 -0
  186. package/dist/ai/manifest/components/BbBadge.json +50 -0
  187. package/dist/ai/manifest/components/BbBadge.tree.json +86 -0
  188. package/dist/ai/manifest/components/BbBadgeButton.json +67 -0
  189. package/dist/ai/manifest/components/BbBadgeButton.tree.json +32 -0
  190. package/dist/ai/manifest/components/BbBaseButton.json +69 -0
  191. package/dist/ai/manifest/components/BbBaseButton.tree.json +25 -0
  192. package/dist/ai/manifest/components/BbBaseCheckboxIcon.json +46 -0
  193. package/dist/ai/manifest/components/BbBaseCheckboxIcon.tree.json +41 -0
  194. package/dist/ai/manifest/components/BbBaseRadioIcon.json +44 -0
  195. package/dist/ai/manifest/components/BbBaseRadioIcon.tree.json +36 -0
  196. package/dist/ai/manifest/components/BbBaseSwitchIcon.json +46 -0
  197. package/dist/ai/manifest/components/BbBaseSwitchIcon.tree.json +44 -0
  198. package/dist/ai/manifest/components/BbBreadcrumbs.json +56 -0
  199. package/dist/ai/manifest/components/BbBreadcrumbs.tree.json +45 -0
  200. package/dist/ai/manifest/components/BbButton.json +102 -0
  201. package/dist/ai/manifest/components/BbButton.tree.json +206 -0
  202. package/dist/ai/manifest/components/BbCalendar.json +86 -0
  203. package/dist/ai/manifest/components/BbCalendar.tree.json +99 -0
  204. package/dist/ai/manifest/components/BbCheckbox.json +99 -0
  205. package/dist/ai/manifest/components/BbCheckbox.tree.json +22 -0
  206. package/dist/ai/manifest/components/BbCheckboxGroup.json +133 -0
  207. package/dist/ai/manifest/components/BbCheckboxGroup.tree.json +61 -0
  208. package/dist/ai/manifest/components/BbCollapsible.json +32 -0
  209. package/dist/ai/manifest/components/BbCollapsible.tree.json +17 -0
  210. package/dist/ai/manifest/components/BbColorInput.json +133 -0
  211. package/dist/ai/manifest/components/BbColorInput.tree.json +37 -0
  212. package/dist/ai/manifest/components/BbColorPalette.json +73 -0
  213. package/dist/ai/manifest/components/BbColorPalette.tree.json +55 -0
  214. package/dist/ai/manifest/components/BbConfirm.json +34 -0
  215. package/dist/ai/manifest/components/BbConfirm.tree.json +30 -0
  216. package/dist/ai/manifest/components/BbConfirmPortal.json +21 -0
  217. package/dist/ai/manifest/components/BbDatePicker.json +108 -0
  218. package/dist/ai/manifest/components/BbDatePicker.tree.json +54 -0
  219. package/dist/ai/manifest/components/BbDatePickerInput.json +167 -0
  220. package/dist/ai/manifest/components/BbDatePickerInput.tree.json +50 -0
  221. package/dist/ai/manifest/components/BbDialog.json +76 -0
  222. package/dist/ai/manifest/components/BbDialog.tree.json +74 -0
  223. package/dist/ai/manifest/components/BbDropdown.json +102 -0
  224. package/dist/ai/manifest/components/BbDropdown.tree.json +122 -0
  225. package/dist/ai/manifest/components/BbDropdownButton.json +107 -0
  226. package/dist/ai/manifest/components/BbDropdownButton.tree.json +28 -0
  227. package/dist/ai/manifest/components/BbDropdownGroup.json +25 -0
  228. package/dist/ai/manifest/components/BbDropzone.json +68 -0
  229. package/dist/ai/manifest/components/BbDropzone.tree.json +36 -0
  230. package/dist/ai/manifest/components/BbForm.json +42 -0
  231. package/dist/ai/manifest/components/BbHoverCard.json +63 -0
  232. package/dist/ai/manifest/components/BbHoverCard.tree.json +31 -0
  233. package/dist/ai/manifest/components/BbHoverCardPortal.json +21 -0
  234. package/dist/ai/manifest/components/BbIcon.json +33 -0
  235. package/dist/ai/manifest/components/BbIcon.tree.json +19 -0
  236. package/dist/ai/manifest/components/BbIndicator.json +39 -0
  237. package/dist/ai/manifest/components/BbIndicator.tree.json +67 -0
  238. package/dist/ai/manifest/components/BbNumberInput.json +128 -0
  239. package/dist/ai/manifest/components/BbNumberInput.tree.json +28 -0
  240. package/dist/ai/manifest/components/BbOffCanvas.json +72 -0
  241. package/dist/ai/manifest/components/BbOffCanvas.tree.json +115 -0
  242. package/dist/ai/manifest/components/BbPagination.json +61 -0
  243. package/dist/ai/manifest/components/BbPagination.tree.json +69 -0
  244. package/dist/ai/manifest/components/BbPopover.json +82 -0
  245. package/dist/ai/manifest/components/BbPopover.tree.json +36 -0
  246. package/dist/ai/manifest/components/BbPopoverPortal.json +21 -0
  247. package/dist/ai/manifest/components/BbProgress.json +31 -0
  248. package/dist/ai/manifest/components/BbProgress.tree.json +26 -0
  249. package/dist/ai/manifest/components/BbPtScope.json +21 -0
  250. package/dist/ai/manifest/components/BbRadio.json +88 -0
  251. package/dist/ai/manifest/components/BbRadio.tree.json +22 -0
  252. package/dist/ai/manifest/components/BbRadioGroup.json +132 -0
  253. package/dist/ai/manifest/components/BbRadioGroup.tree.json +61 -0
  254. package/dist/ai/manifest/components/BbRating.json +100 -0
  255. package/dist/ai/manifest/components/BbRating.tree.json +55 -0
  256. package/dist/ai/manifest/components/BbSelect.json +174 -0
  257. package/dist/ai/manifest/components/BbSelect.tree.json +53 -0
  258. package/dist/ai/manifest/components/BbSelectPopover.json +124 -0
  259. package/dist/ai/manifest/components/BbSelectPopover.tree.json +112 -0
  260. package/dist/ai/manifest/components/BbSlider.json +109 -0
  261. package/dist/ai/manifest/components/BbSlider.tree.json +89 -0
  262. package/dist/ai/manifest/components/BbSmoothHeight.json +31 -0
  263. package/dist/ai/manifest/components/BbSmoothHeight.tree.json +16 -0
  264. package/dist/ai/manifest/components/BbSpinner.json +31 -0
  265. package/dist/ai/manifest/components/BbSpinner.tree.json +31 -0
  266. package/dist/ai/manifest/components/BbSwitch.json +99 -0
  267. package/dist/ai/manifest/components/BbSwitch.tree.json +22 -0
  268. package/dist/ai/manifest/components/BbSwitchGroup.json +133 -0
  269. package/dist/ai/manifest/components/BbSwitchGroup.tree.json +61 -0
  270. package/dist/ai/manifest/components/BbTable.json +163 -0
  271. package/dist/ai/manifest/components/BbTable.tree.json +214 -0
  272. package/dist/ai/manifest/components/BbTabs.json +86 -0
  273. package/dist/ai/manifest/components/BbTabs.tree.json +88 -0
  274. package/dist/ai/manifest/components/BbTabsList.json +48 -0
  275. package/dist/ai/manifest/components/BbTabsList.tree.json +94 -0
  276. package/dist/ai/manifest/components/BbTabsPanels.json +32 -0
  277. package/dist/ai/manifest/components/BbTabsPanels.tree.json +69 -0
  278. package/dist/ai/manifest/components/BbTabsRoot.json +63 -0
  279. package/dist/ai/manifest/components/BbTag.json +130 -0
  280. package/dist/ai/manifest/components/BbTag.tree.json +40 -0
  281. package/dist/ai/manifest/components/BbTextInput.json +129 -0
  282. package/dist/ai/manifest/components/BbTextInput.tree.json +27 -0
  283. package/dist/ai/manifest/components/BbTextarea.json +124 -0
  284. package/dist/ai/manifest/components/BbTextarea.tree.json +37 -0
  285. package/dist/ai/manifest/components/BbTimePicker.json +76 -0
  286. package/dist/ai/manifest/components/BbTimePicker.tree.json +37 -0
  287. package/dist/ai/manifest/components/BbTimePickerInput.json +133 -0
  288. package/dist/ai/manifest/components/BbTimePickerInput.tree.json +44 -0
  289. package/dist/ai/manifest/components/BbToast.json +43 -0
  290. package/dist/ai/manifest/components/BbToast.tree.json +91 -0
  291. package/dist/ai/manifest/components/BbToastPortal.json +18 -0
  292. package/dist/ai/manifest/components/BbTooltip.json +60 -0
  293. package/dist/ai/manifest/components/BbTooltip.tree.json +41 -0
  294. package/dist/ai/manifest/components/BbTree.json +51 -0
  295. package/dist/ai/manifest/components/BbTree.tree.json +31 -0
  296. package/dist/ai/manifest/components/ChipsBox.json +32 -0
  297. package/dist/ai/manifest/components/ChipsBox.tree.json +11 -0
  298. package/dist/ai/manifest/components/ClearableButton.json +19 -0
  299. package/dist/ai/manifest/components/ClearableButton.tree.json +19 -0
  300. package/dist/ai/manifest/components/CommaBox.json +30 -0
  301. package/dist/ai/manifest/components/CommonField.json +56 -0
  302. package/dist/ai/manifest/components/CommonField.tree.json +110 -0
  303. package/dist/ai/manifest/components/CommonFieldInput.json +47 -0
  304. package/dist/ai/manifest/components/CommonFieldInput.tree.json +95 -0
  305. package/dist/ai/manifest/components/CommonPopover.json +44 -0
  306. package/dist/ai/manifest/components/CommonPopover.tree.json +26 -0
  307. package/dist/ai/manifest/components/CommonTimeSelector.json +31 -0
  308. package/dist/ai/manifest/components/CommonTimeSelector.tree.json +43 -0
  309. package/dist/ai/manifest/components/ErrorIcon.json +17 -0
  310. package/dist/ai/manifest/components/ErrorIcon.tree.json +22 -0
  311. package/dist/ai/manifest/components/FlatListBox.json +43 -0
  312. package/dist/ai/manifest/components/FlatListBox.tree.json +16 -0
  313. package/dist/ai/manifest/components/GroupedListBox.json +45 -0
  314. package/dist/ai/manifest/components/GroupedListBox.tree.json +16 -0
  315. package/dist/ai/manifest/components/GuidesComponent.json +17 -0
  316. package/dist/ai/manifest/components/ListBox.json +43 -0
  317. package/dist/ai/manifest/components/ListBox.tree.json +9 -0
  318. package/dist/ai/manifest/components/OptionsContainer.json +45 -0
  319. package/dist/ai/manifest/components/WarningIcon.json +17 -0
  320. package/dist/ai/manifest/components/WarningIcon.tree.json +22 -0
  321. package/dist/ai/manifest/index.json +121 -0
  322. package/dist/ai/manifest/meta.json +456 -0
  323. package/dist/ai/manifest/types.advanced.json +66 -0
  324. package/dist/ai/manifest/types.api.json +52 -0
  325. package/dist/ai/manifest/types.wrapper.json +119 -0
  326. package/dist/ai/recipes/inertia/approvals-inbox.md +206 -139
  327. package/dist/ai/recipes/inertia/inline-edit-workspace.md +218 -143
  328. package/dist/ai/recipes/inertia/layout-scaffold.md +93 -58
  329. package/dist/ai/recipes/inertia/onboarding.md +114 -87
  330. package/dist/ai/recipes/inertia/ownership-atlas.md +322 -322
  331. package/dist/ai/recipes/inertia/record-form.md +407 -218
  332. package/dist/ai/recipes/inertia/records-workspace.md +600 -219
  333. package/dist/ai/recipes/inertia/settings-workspace.md +3098 -0
  334. package/dist/ai/recipes/inertia/upload-center.md +189 -177
  335. package/dist/ai/recipes/inertia/wizard-form.md +233 -100
  336. package/dist/ai/recipes/nuxt/approvals-inbox.md +272 -158
  337. package/dist/ai/recipes/nuxt/inline-edit-workspace.md +298 -166
  338. package/dist/ai/recipes/nuxt/layout-scaffold.md +94 -59
  339. package/dist/ai/recipes/nuxt/onboarding.md +178 -117
  340. package/dist/ai/recipes/nuxt/ownership-atlas.md +1406 -0
  341. package/dist/ai/recipes/nuxt/record-form.md +506 -223
  342. package/dist/ai/recipes/nuxt/records-workspace.md +653 -206
  343. package/dist/ai/recipes/nuxt/settings-workspace.md +3189 -0
  344. package/dist/ai/recipes/nuxt/upload-center.md +282 -190
  345. package/dist/ai/recipes/nuxt/wizard-form.md +251 -102
  346. package/dist/ai/recipes/vue/approvals-inbox.md +248 -146
  347. package/dist/ai/recipes/vue/inline-edit-workspace.md +278 -157
  348. package/dist/ai/recipes/vue/layout-scaffold.md +93 -58
  349. package/dist/ai/recipes/vue/onboarding.md +112 -83
  350. package/dist/ai/recipes/vue/ownership-atlas.md +1360 -0
  351. package/dist/ai/recipes/vue/record-form.md +251 -130
  352. package/dist/ai/recipes/vue/records-workspace.md +609 -191
  353. package/dist/ai/recipes/vue/settings-workspace.md +3130 -0
  354. package/dist/ai/recipes/vue/upload-center.md +229 -176
  355. package/dist/ai/recipes/vue/wizard-form.md +190 -85
  356. package/dist/ai/source/BbAccordion.md +130 -32
  357. package/dist/ai/source/BbAlert.md +211 -64
  358. package/dist/ai/source/BbAsterisk.md +54 -4
  359. package/dist/ai/source/BbAvatar.md +73 -16
  360. package/dist/ai/source/BbBadge.md +305 -99
  361. package/dist/ai/source/BbBadgeButton.md +259 -81
  362. package/dist/ai/source/BbBaseButton.md +109 -13
  363. package/dist/ai/source/BbBaseCheckboxIcon.md +153 -36
  364. package/dist/ai/source/BbBaseRadioIcon.md +124 -18
  365. package/dist/ai/source/BbBaseSwitchIcon.md +146 -33
  366. package/dist/ai/source/BbBreadcrumbs.md +437 -95
  367. package/dist/ai/source/BbButton.md +695 -188
  368. package/dist/ai/source/BbCalendar.md +1884 -0
  369. package/dist/ai/source/BbCheckbox.md +509 -68
  370. package/dist/ai/source/BbCheckboxGroup.md +1132 -98
  371. package/dist/ai/source/BbCollapsible.md +99 -10
  372. package/dist/ai/source/BbColorInput.md +645 -68
  373. package/dist/ai/source/BbColorPalette.md +1337 -70
  374. package/dist/ai/source/BbConfirm.md +167 -8
  375. package/dist/ai/source/BbConfirmPortal.md +109 -9
  376. package/dist/ai/source/BbDatePicker.md +532 -383
  377. package/dist/ai/source/BbDatePickerInput.md +2166 -123
  378. package/dist/ai/source/BbDialog.md +557 -70
  379. package/dist/ai/source/BbDropdown.md +1320 -331
  380. package/dist/ai/source/BbDropdownButton.md +438 -93
  381. package/dist/ai/source/BbDropdownGroup.md +1023 -203
  382. package/dist/ai/source/BbDropzone.md +219 -38
  383. package/dist/ai/source/BbForm.md +1006 -18
  384. package/dist/ai/source/BbHoverCard.md +975 -0
  385. package/dist/ai/source/BbHoverCardPortal.md +314 -0
  386. package/dist/ai/source/BbIcon.md +139 -53
  387. package/dist/ai/source/BbIndicator.md +121 -60
  388. package/dist/ai/source/BbNumberInput.md +1571 -91
  389. package/dist/ai/source/BbOffCanvas.md +1057 -274
  390. package/dist/ai/source/BbPagination.md +231 -35
  391. package/dist/ai/source/BbPopover.md +491 -115
  392. package/dist/ai/source/BbPopoverPortal.md +387 -0
  393. package/dist/ai/source/BbProgress.md +156 -30
  394. package/dist/ai/source/BbPtScope.md +54 -0
  395. package/dist/ai/source/BbRadio.md +407 -58
  396. package/dist/ai/source/BbRadioGroup.md +1078 -112
  397. package/dist/ai/source/BbRating.md +775 -86
  398. package/dist/ai/source/BbSelect.md +1187 -104
  399. package/dist/ai/source/BbSelectPopover.md +1209 -205
  400. package/dist/ai/source/BbSlider.md +1422 -103
  401. package/dist/ai/source/BbSmoothHeight.md +59 -4
  402. package/dist/ai/source/BbSpinner.md +62 -6
  403. package/dist/ai/source/BbSwitch.md +322 -60
  404. package/dist/ai/source/BbSwitchGroup.md +834 -84
  405. package/dist/ai/source/BbTable.md +7684 -1945
  406. package/dist/ai/source/BbTabs.md +409 -124
  407. package/dist/ai/source/BbTabsList.md +538 -159
  408. package/dist/ai/source/BbTabsPanels.md +647 -0
  409. package/dist/ai/source/BbTabsRoot.md +360 -113
  410. package/dist/ai/source/BbTag.md +866 -89
  411. package/dist/ai/source/BbTextInput.md +615 -73
  412. package/dist/ai/source/BbTextarea.md +631 -70
  413. package/dist/ai/source/BbTimePicker.md +396 -70
  414. package/dist/ai/source/BbTimePickerInput.md +1353 -107
  415. package/dist/ai/source/BbToast.md +259 -80
  416. package/dist/ai/source/BbToastPortal.md +219 -72
  417. package/dist/ai/source/BbTooltip.md +303 -42
  418. package/dist/ai/source/BbTree.md +109 -14
  419. package/dist/ai/source/ChipsBox.md +25 -5
  420. package/dist/ai/source/CommaBox.md +21 -6
  421. package/dist/ai/source/CommonField.md +1707 -0
  422. package/dist/ai/source/CommonFieldInput.md +880 -0
  423. package/dist/ai/source/CommonPopover.md +141 -34
  424. package/dist/ai/source/CommonTimeSelector.md +744 -0
  425. package/dist/ai/source/ErrorIcon.md +2 -2
  426. package/dist/ai/source/FlatListBox.md +218 -18
  427. package/dist/ai/source/GroupedListBox.md +266 -45
  428. package/dist/ai/source/GuidesComponent.md +14 -7
  429. package/dist/ai/source/ListBox.md +57 -8
  430. package/dist/ai/source/OptionsContainer.md +346 -61
  431. package/dist/ai/source/WarningIcon.md +2 -2
  432. package/dist/assets/css/reset.css_inline.js +1 -1
  433. package/dist/assets/svgs/star.svg_raw.js +4 -0
  434. package/dist/components/BbAccordion/BbAccordion.vue_vue_type_script_setup_true_lang.js +59 -38
  435. package/dist/components/BbAccordion/types.d.ts +43 -3
  436. package/dist/components/BbAccordion/types.js +11 -0
  437. package/dist/components/BbAlert/BbAlert.vue.d.ts +1 -3
  438. package/dist/components/BbAlert/BbAlert.vue_vue_type_script_setup_true_lang.js +46 -30
  439. package/dist/components/BbAlert/types.d.ts +37 -3
  440. package/dist/components/BbAlert/types.js +13 -0
  441. package/dist/components/BbAsterisk/BbAsterisk.vue.d.ts +3 -1
  442. package/dist/components/BbAsterisk/BbAsterisk.vue_vue_type_script_setup_true_lang.js +23 -8
  443. package/dist/components/BbAsterisk/types.d.ts +18 -0
  444. package/dist/components/BbAsterisk/types.js +7 -0
  445. package/dist/components/BbAvatar/BbAvatar.vue.d.ts +2 -4
  446. package/dist/components/BbAvatar/BbAvatar.vue_vue_type_script_setup_true_lang.js +57 -44
  447. package/dist/components/BbAvatar/types.d.ts +23 -0
  448. package/dist/components/BbAvatar/types.js +7 -0
  449. package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +24 -18
  450. package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +96 -53
  451. package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +32 -11
  452. package/dist/components/BbBadge/badgeButtonContext.d.ts +25 -8
  453. package/dist/components/BbBadge/types.d.ts +46 -3
  454. package/dist/components/BbBadge/types.js +13 -0
  455. package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +109 -96
  456. package/dist/components/BbBaseButton/RouterComponent.vue_vue_type_script_setup_true_lang.js +11 -11
  457. package/dist/components/BbBaseButton/types.d.ts +33 -3
  458. package/dist/components/BbBaseButton/types.js +9 -2
  459. package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue_vue_type_script_setup_true_lang.js +50 -18
  460. package/dist/components/BbBaseCheckboxIcon/types.d.ts +31 -2
  461. package/dist/components/BbBaseCheckboxIcon/types.js +8 -0
  462. package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue_vue_type_script_setup_true_lang.js +45 -15
  463. package/dist/components/BbBaseRadioIcon/types.d.ts +31 -2
  464. package/dist/components/BbBaseRadioIcon/types.js +8 -0
  465. package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue_vue_type_script_setup_true_lang.js +48 -16
  466. package/dist/components/BbBaseSwitchIcon/types.d.ts +31 -2
  467. package/dist/components/BbBaseSwitchIcon/types.js +8 -0
  468. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +197 -140
  469. package/dist/components/BbBreadcrumbs/types.d.ts +62 -12
  470. package/dist/components/BbBreadcrumbs/types.js +12 -0
  471. package/dist/components/BbButton/BbButton.vue.d.ts +5 -0
  472. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +145 -101
  473. package/dist/components/BbButton/toggleRoving.d.ts +6 -0
  474. package/dist/components/BbButton/toggleRoving.js +45 -0
  475. package/dist/components/BbButton/types.d.ts +122 -3
  476. package/dist/components/BbButton/types.js +16 -0
  477. package/dist/components/BbCalendar/BbCalendar.vue.d.ts +33 -0
  478. package/dist/components/BbCalendar/BbCalendar.vue.js +6 -0
  479. package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +614 -0
  480. package/dist/components/BbCalendar/CalendarMonthPanel.vue.js +5 -0
  481. package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +124 -0
  482. package/dist/components/BbCalendar/CalendarYearPanel.vue.js +5 -0
  483. package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +129 -0
  484. package/dist/components/BbCalendar/calendarHost.d.ts +29 -0
  485. package/dist/components/BbCalendar/calendarHost.js +10 -0
  486. package/dist/components/BbCalendar/types.d.ts +231 -0
  487. package/dist/components/BbCalendar/types.js +29 -0
  488. package/dist/components/{BbBaseDatePicker/useDatePickerContext.d.ts → BbCalendar/useCalendarContext.d.ts} +10 -7
  489. package/dist/components/BbCalendar/useCalendarContext.js +11 -0
  490. package/dist/components/BbCalendar/useCalendarGrid.d.ts +211 -0
  491. package/dist/components/BbCalendar/useCalendarGrid.js +282 -0
  492. package/dist/components/BbCalendar/useDayGrid.d.ts +82 -0
  493. package/dist/components/BbCalendar/useDayGrid.js +246 -0
  494. package/dist/components/BbCalendar/useDayjsLocale.d.ts +64 -0
  495. package/dist/components/BbCalendar/useDayjsLocale.js +35 -0
  496. package/dist/components/BbCalendar/useToday.d.ts +23 -0
  497. package/dist/components/BbCalendar/useToday.js +21 -0
  498. package/dist/components/BbCheckbox/BbCheckbox.vue.d.ts +7 -7
  499. package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +224 -72
  500. package/dist/components/BbCheckbox/types.d.ts +192 -13
  501. package/dist/components/BbCheckbox/types.js +8 -0
  502. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue.d.ts +15 -3
  503. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +350 -106
  504. package/dist/components/BbCheckboxGroup/types.d.ts +256 -23
  505. package/dist/components/BbCheckboxGroup/types.js +10 -0
  506. package/dist/components/BbCollapsible/BbCollapsible.vue.d.ts +2 -1
  507. package/dist/components/BbCollapsible/BbCollapsible.vue_vue_type_script_setup_true_lang.js +41 -19
  508. package/dist/components/BbCollapsible/types.d.ts +46 -2
  509. package/dist/components/BbCollapsible/types.js +7 -0
  510. package/dist/components/BbColorInput/BbColorInput.vue.d.ts +17 -7
  511. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +339 -87
  512. package/dist/components/BbColorInput/types.d.ts +242 -12
  513. package/dist/components/BbColorInput/types.js +24 -0
  514. package/dist/components/BbColorPalette/BbColorPalette.vue.d.ts +10 -2
  515. package/dist/components/BbColorPalette/BbColorPalette.vue_vue_type_script_setup_true_lang.js +530 -108
  516. package/dist/components/BbColorPalette/types.d.ts +88 -11
  517. package/dist/components/BbColorPalette/types.js +12 -0
  518. package/dist/components/BbConfirm/BbConfirm.vue.d.ts +2 -1
  519. package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +125 -76
  520. package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +3 -5
  521. package/dist/components/BbConfirm/types.d.ts +64 -0
  522. package/dist/components/BbConfirm/types.js +17 -0
  523. package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +15 -10
  524. package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +324 -224
  525. package/dist/components/BbDatePicker/types.d.ts +114 -18
  526. package/dist/components/BbDatePicker/types.js +33 -0
  527. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +16 -4
  528. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +1225 -88
  529. package/dist/components/BbDatePickerInput/dateFieldLayout.d.ts +23 -0
  530. package/dist/components/BbDatePickerInput/dateFieldLayout.js +38 -0
  531. package/dist/components/BbDatePickerInput/types.d.ts +241 -21
  532. package/dist/components/BbDatePickerInput/types.js +39 -0
  533. package/dist/components/BbDialog/BbDialog.vue.d.ts +3 -3
  534. package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +230 -133
  535. package/dist/components/BbDialog/types.d.ts +98 -4
  536. package/dist/components/BbDialog/types.js +16 -0
  537. package/dist/components/BbDialog/useDialogStack.d.ts +12 -0
  538. package/dist/components/BbDialog/useDialogStack.js +9 -2
  539. package/dist/components/BbDropdown/AdaptiveDropdown.vue.d.ts +2 -0
  540. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +132 -107
  541. package/dist/components/BbDropdown/BbDropdown.vue.d.ts +10 -2
  542. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +448 -328
  543. package/dist/components/BbDropdown/BbDropdownGroup.vue.d.ts +16 -5
  544. package/dist/components/BbDropdown/BbDropdownGroup.vue_vue_type_script_setup_true_lang.js +48 -19
  545. package/dist/components/BbDropdown/BbDropdownList.vue.d.ts +8 -2
  546. package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +396 -340
  547. package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +152 -122
  548. package/dist/components/BbDropdown/DropdownRow.vue.d.ts +40 -0
  549. package/dist/components/BbDropdown/DropdownRow.vue.js +5 -0
  550. package/dist/components/BbDropdown/DropdownRow.vue_vue_type_script_setup_true_lang.js +60 -0
  551. package/dist/components/BbDropdown/normalizeGroups.d.ts +8 -2
  552. package/dist/components/BbDropdown/normalizeGroups.js +70 -32
  553. package/dist/components/BbDropdown/types.d.ts +437 -102
  554. package/dist/components/BbDropdown/types.js +21 -2
  555. package/dist/components/BbDropdown/useDropdownContext.d.ts +12 -4
  556. package/dist/components/BbDropdown/useDropdownGroupRegistry.d.ts +62 -0
  557. package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +18 -3
  558. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +193 -43
  559. package/dist/components/BbDropdownButton/types.d.ts +139 -10
  560. package/dist/components/BbDropdownButton/types.js +35 -0
  561. package/dist/components/BbDropzone/BbDropzone.vue.d.ts +2 -2
  562. package/dist/components/BbDropzone/BbDropzone.vue_vue_type_script_setup_true_lang.js +211 -143
  563. package/dist/components/BbDropzone/types.d.ts +54 -5
  564. package/dist/components/BbDropzone/types.js +17 -0
  565. package/dist/components/BbForm/BbForm.vue.d.ts +121 -0
  566. package/dist/{validated → components/BbForm}/BbForm.vue.js +1 -1
  567. package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +360 -0
  568. package/dist/components/BbForm/BbFormCustomField.d.ts +14 -0
  569. package/dist/components/BbForm/BbFormCustomField.js +49 -0
  570. package/dist/components/BbForm/bindFormField.d.ts +43 -0
  571. package/dist/components/BbForm/bindFormField.js +88 -0
  572. package/dist/components/BbForm/formFields.d.ts +77 -0
  573. package/dist/components/BbForm/formFields.js +11 -0
  574. package/dist/components/BbForm/formSchema.d.ts +56 -0
  575. package/dist/components/BbForm/formSchema.js +196 -0
  576. package/dist/components/BbForm/standardSchema.d.ts +59 -0
  577. package/dist/components/BbHoverCard/BbHoverCard.vue.d.ts +43 -0
  578. package/dist/components/{BbBaseRadio/BbBaseRadio.vue.js → BbHoverCard/BbHoverCard.vue.js} +2 -2
  579. package/dist/components/BbHoverCard/BbHoverCard.vue_vue_type_script_setup_true_lang.js +300 -0
  580. package/dist/components/BbHoverCard/BbHoverCardPortal.vue.d.ts +23 -0
  581. package/dist/components/BbHoverCard/BbHoverCardPortal.vue.js +5 -0
  582. package/dist/components/BbHoverCard/BbHoverCardPortal.vue_vue_type_script_setup_true_lang.js +13 -0
  583. package/dist/components/BbHoverCard/hoverCardFocus.d.ts +29 -0
  584. package/dist/components/BbHoverCard/hoverCardFocus.js +29 -0
  585. package/dist/components/BbHoverCard/types.d.ts +188 -0
  586. package/dist/components/BbHoverCard/types.js +13 -0
  587. package/dist/components/BbIcon/BbIcon.vue.d.ts +1 -3
  588. package/dist/components/BbIcon/BbIcon.vue_vue_type_script_setup_true_lang.js +59 -48
  589. package/dist/components/BbIcon/iconCache.d.ts +63 -0
  590. package/dist/components/BbIcon/iconCache.js +35 -0
  591. package/dist/components/BbIcon/types.d.ts +22 -2
  592. package/dist/components/BbIcon/types.js +7 -0
  593. package/dist/components/BbIndicator/BbIndicator.vue_vue_type_script_setup_true_lang.js +34 -21
  594. package/dist/components/BbIndicator/types.d.ts +24 -0
  595. package/dist/components/BbIndicator/types.js +7 -0
  596. package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +11 -8
  597. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +667 -87
  598. package/dist/components/BbNumberInput/numberDisplay.d.ts +256 -0
  599. package/dist/components/BbNumberInput/numberDisplay.js +499 -0
  600. package/dist/components/BbNumberInput/types.d.ts +268 -19
  601. package/dist/components/BbNumberInput/types.js +8 -0
  602. package/dist/components/BbNumberInput/warroom/corpus.d.ts +58 -0
  603. package/dist/components/BbNumberInput/warroom/currency-verify.rows.d.ts +28 -0
  604. package/dist/components/BbNumberInput/warroom/currency.rows.d.ts +2 -0
  605. package/dist/components/BbNumberInput/warroom/harness.d.ts +217 -0
  606. package/dist/components/BbNumberInput/warroom/oracle.d.ts +150 -0
  607. package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +4 -6
  608. package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +311 -204
  609. package/dist/components/BbOffCanvas/hostCloseLabel.d.ts +3 -0
  610. package/dist/components/BbOffCanvas/hostCloseLabel.js +8 -0
  611. package/dist/components/BbOffCanvas/types.d.ts +85 -7
  612. package/dist/components/BbOffCanvas/types.js +15 -0
  613. package/dist/components/BbPagination/BbPagination.vue.d.ts +2 -2
  614. package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +146 -110
  615. package/dist/components/BbPagination/types.d.ts +38 -0
  616. package/dist/components/BbPagination/types.js +13 -0
  617. package/dist/components/BbPopover/BbPopover.vue.d.ts +5 -4
  618. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +285 -193
  619. package/dist/components/BbPopover/BbPopoverPortal.vue.d.ts +23 -0
  620. package/dist/components/BbPopover/BbPopoverPortal.vue.js +5 -0
  621. package/dist/components/BbPopover/BbPopoverPortal.vue_vue_type_script_setup_true_lang.js +13 -0
  622. package/dist/components/BbPopover/types.d.ts +77 -6
  623. package/dist/components/BbPopover/types.js +14 -0
  624. package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +38 -17
  625. package/dist/components/BbProgress/types.d.ts +41 -0
  626. package/dist/components/BbProgress/types.js +7 -0
  627. package/dist/components/BbPtScope/BbPtScope.vue.d.ts +12 -0
  628. package/dist/components/BbPtScope/BbPtScope.vue.js +5 -0
  629. package/dist/components/BbPtScope/BbPtScope.vue_vue_type_script_setup_true_lang.js +13 -0
  630. package/dist/components/BbPtScope/types.d.ts +15 -0
  631. package/dist/components/BbRadio/BbRadio.vue.d.ts +7 -7
  632. package/dist/components/BbRadio/BbRadio.vue_vue_type_script_setup_true_lang.js +178 -59
  633. package/dist/components/BbRadio/types.d.ts +164 -13
  634. package/dist/components/BbRadio/types.js +8 -0
  635. package/dist/components/BbRadioGroup/BbRadioGroup.vue.d.ts +14 -2
  636. package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +333 -108
  637. package/dist/components/BbRadioGroup/types.d.ts +258 -25
  638. package/dist/components/BbRadioGroup/types.js +10 -0
  639. package/dist/components/BbRating/BbRating.vue.d.ts +10 -8
  640. package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +269 -78
  641. package/dist/components/BbRating/types.d.ts +188 -13
  642. package/dist/components/BbRating/types.js +21 -0
  643. package/dist/components/BbSelect/BbSelect.vue.d.ts +17 -3
  644. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +565 -108
  645. package/dist/components/BbSelect/types.d.ts +302 -23
  646. package/dist/components/BbSelect/types.js +41 -0
  647. package/dist/components/BbSelectPopover/BbSelectPopover.vue.d.ts +15 -1
  648. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +587 -362
  649. package/dist/components/BbSelectPopover/sheetChipAttrs.d.ts +18 -0
  650. package/dist/components/BbSelectPopover/sheetChipAttrs.js +5 -0
  651. package/dist/components/BbSelectPopover/types.d.ts +177 -15
  652. package/dist/components/BbSelectPopover/types.js +24 -0
  653. package/dist/components/BbSlider/BbSlider.vue.d.ts +13 -8
  654. package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +477 -97
  655. package/dist/components/BbSlider/types.d.ts +214 -17
  656. package/dist/components/BbSlider/types.js +26 -0
  657. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.d.ts +1 -1
  658. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue_vue_type_script_setup_true_lang.js +60 -48
  659. package/dist/components/BbSmoothHeight/types.d.ts +19 -0
  660. package/dist/components/BbSmoothHeight/types.js +7 -0
  661. package/dist/components/BbSpinner/BbSpinner.vue.d.ts +1 -3
  662. package/dist/components/BbSpinner/BbSpinner.vue_vue_type_script_setup_true_lang.js +27 -14
  663. package/dist/components/BbSpinner/types.d.ts +22 -1
  664. package/dist/components/BbSpinner/types.js +7 -0
  665. package/dist/components/BbSwitch/BbSwitch.vue.d.ts +7 -7
  666. package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +230 -78
  667. package/dist/components/BbSwitch/types.d.ts +25 -10
  668. package/dist/components/BbSwitch/types.js +5 -0
  669. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue.d.ts +14 -2
  670. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +350 -106
  671. package/dist/components/BbSwitchGroup/types.d.ts +36 -8
  672. package/dist/components/BbSwitchGroup/types.js +5 -0
  673. package/dist/components/BbTable/BbTable.vue.d.ts +31 -50
  674. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +2217 -685
  675. package/dist/components/BbTable/BbTableDataRow.d.ts +198 -0
  676. package/dist/components/BbTable/BbTableDataRow.js +151 -0
  677. package/dist/components/BbTable/BbTableEdgeRow.d.ts +110 -0
  678. package/dist/components/BbTable/BbTableEdgeRow.js +65 -0
  679. package/dist/components/BbTable/BbTableExpandRow.d.ts +84 -0
  680. package/dist/components/BbTable/BbTableExpandRow.js +62 -0
  681. package/dist/components/BbTable/BbTableSelectToggle.d.ts +128 -0
  682. package/dist/components/BbTable/BbTableSelectToggle.js +131 -0
  683. package/dist/components/BbTable/gridWidgets.d.ts +30 -0
  684. package/dist/components/BbTable/gridWidgets.js +14 -0
  685. package/dist/components/BbTable/types.d.ts +571 -151
  686. package/dist/components/BbTable/types.js +33 -0
  687. package/dist/components/BbTable/utils.d.ts +145 -4
  688. package/dist/components/BbTable/utils.js +161 -37
  689. package/dist/components/BbTabs/BbTabs.vue.d.ts +3 -1
  690. package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +66 -26
  691. package/dist/components/BbTabs/BbTabsList.vue.d.ts +3 -10
  692. package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +143 -81
  693. package/dist/components/BbTabs/BbTabsPanels.vue.d.ts +12 -0
  694. package/dist/components/{BbBaseSwitch/BbBaseSwitch.vue.js → BbTabs/BbTabsPanels.vue.js} +2 -2
  695. package/dist/components/BbTabs/BbTabsPanels.vue_vue_type_script_setup_true_lang.js +59 -0
  696. package/dist/components/BbTabs/BbTabsRoot.vue.d.ts +3 -1
  697. package/dist/components/BbTabs/BbTabsRoot.vue_vue_type_script_setup_true_lang.js +6 -1
  698. package/dist/components/BbTabs/types.d.ts +221 -39
  699. package/dist/components/BbTabs/types.js +34 -0
  700. package/dist/components/BbTag/BbTag.vue.d.ts +13 -10
  701. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +404 -93
  702. package/dist/components/BbTag/types.d.ts +153 -15
  703. package/dist/components/BbTag/types.js +22 -0
  704. package/dist/components/BbTextInput/BbTextInput.vue.d.ts +31 -37
  705. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +312 -107
  706. package/dist/components/BbTextInput/types.d.ts +204 -14
  707. package/dist/components/BbTextInput/types.js +12 -0
  708. package/dist/components/BbTextarea/BbTextarea.vue.d.ts +31 -37
  709. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +342 -114
  710. package/dist/components/BbTextarea/types.d.ts +194 -15
  711. package/dist/components/BbTextarea/types.js +12 -0
  712. package/dist/components/BbTimePicker/BbTimePicker.vue.d.ts +12 -4
  713. package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +199 -122
  714. package/dist/components/BbTimePicker/types.d.ts +94 -7
  715. package/dist/components/BbTimePicker/types.js +18 -0
  716. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue.d.ts +14 -4
  717. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +779 -86
  718. package/dist/components/BbTimePickerInput/types.d.ts +183 -22
  719. package/dist/components/BbTimePickerInput/types.js +25 -0
  720. package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +63 -25
  721. package/dist/components/BbToast/BbToastMessage.vue.d.ts +4 -1
  722. package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +79 -76
  723. package/dist/components/BbToast/BbToastPortal.vue.d.ts +1 -0
  724. package/dist/components/BbToast/BbToastRegion.vue.d.ts +4 -1
  725. package/dist/components/BbToast/BbToastRegion.vue_vue_type_script_setup_true_lang.js +72 -64
  726. package/dist/components/BbToast/types.d.ts +54 -1
  727. package/dist/components/BbToast/types.js +28 -0
  728. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +127 -92
  729. package/dist/components/BbTooltip/tooltipWarmup.d.ts +23 -0
  730. package/dist/components/BbTooltip/tooltipWarmup.js +7 -0
  731. package/dist/components/BbTooltip/types.d.ts +50 -5
  732. package/dist/components/BbTooltip/types.js +7 -0
  733. package/dist/components/BbTree/BbTree.vue.d.ts +15 -3
  734. package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +57 -29
  735. package/dist/components/BbTree/BbTreeLevel.vue.d.ts +1 -1
  736. package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +24 -20
  737. package/dist/components/BbTree/context.d.ts +9 -1
  738. package/dist/components/BbTree/types.d.ts +40 -5
  739. package/dist/components/BbTree/types.js +7 -0
  740. package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +46 -44
  741. package/dist/components/ChipsBox/types.d.ts +7 -0
  742. package/dist/components/ClearableButton/ClearableButton.vue_vue_type_script_setup_true_lang.js +5 -5
  743. package/dist/components/CommaBox/CommaBox.vue_vue_type_script_setup_true_lang.js +11 -7
  744. package/dist/components/CommaBox/types.d.ts +7 -0
  745. package/dist/components/{BbBaseInputContainer/BbBaseInputContainer.vue.d.ts → CommonField/CommonField.vue.d.ts} +5 -5
  746. package/dist/components/{BbTabs/BbTabsPanes.vue.js → CommonField/CommonField.vue.js} +2 -2
  747. package/dist/components/CommonField/CommonField.vue_vue_type_script_setup_true_lang.js +231 -0
  748. package/dist/components/CommonField/messageHeightMatrix.d.ts +2 -0
  749. package/dist/components/{BbBaseInputContainer → CommonField}/types.d.ts +78 -16
  750. package/dist/components/{CommonInputWrapper/CommonInputWrapper.vue.d.ts → CommonFieldInput/CommonFieldInput.vue.d.ts} +5 -4
  751. package/dist/components/{BbBaseRadioGroup/BbBaseRadioGroup.vue.js → CommonFieldInput/CommonFieldInput.vue.js} +2 -2
  752. package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +121 -0
  753. package/dist/components/CommonFieldInput/boxBorderMatrix.d.ts +10 -0
  754. package/dist/components/{CommonInputWrapper → CommonFieldInput}/types.d.ts +27 -8
  755. package/dist/components/CommonPopover/CommonPopover.vue.d.ts +11 -2
  756. package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +80 -65
  757. package/dist/components/CommonPopover/types.d.ts +29 -9
  758. package/dist/components/CommonTimeSelector/CommonTimeSelector.vue.d.ts +49 -0
  759. package/dist/components/{BbBaseColorPalette/BbBaseColorPalette.vue.js → CommonTimeSelector/CommonTimeSelector.vue.js} +2 -2
  760. package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +241 -0
  761. package/dist/components/CommonTimeSelector/types.d.ts +6 -0
  762. package/dist/components/CommonTimeSelector/useMeridiem.d.ts +19 -0
  763. package/dist/components/CommonTimeSelector/useMeridiem.js +41 -0
  764. package/dist/components/FlatListBox/FlatListBox.vue.d.ts +5 -1
  765. package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +176 -98
  766. package/dist/components/FlatListBox/types.d.ts +33 -2
  767. package/dist/components/GroupedListBox/GroupedListBox.vue.d.ts +5 -1
  768. package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +237 -146
  769. package/dist/components/GroupedListBox/types.d.ts +33 -2
  770. package/dist/components/ListBox/ListBox.vue.d.ts +5 -1
  771. package/dist/components/ListBox/ListBox.vue_vue_type_script_setup_true_lang.js +100 -69
  772. package/dist/components/ListBox/types.d.ts +33 -2
  773. package/dist/components/OptionsContainer/OptionsContainer.vue.d.ts +1 -1
  774. package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +117 -37
  775. package/dist/components/OptionsContainer/types.d.ts +79 -10
  776. package/dist/components/Transitions/ScaleFade.vue_vue_type_script_setup_true_lang.js +8 -8
  777. package/dist/components/Transitions/Slide.vue.js +1 -1
  778. package/dist/composables/formSubmitLock.d.ts +8 -0
  779. package/dist/composables/formSubmitLock.js +4 -0
  780. package/dist/composables/ssrMarker.d.ts +15 -0
  781. package/dist/composables/ssrMarker.js +19 -0
  782. package/dist/composables/useBaseOptions.d.ts +18 -1
  783. package/dist/composables/useBaseOptions.js +83 -37
  784. package/dist/composables/useBbConfig.d.ts +27 -6
  785. package/dist/composables/useBbConfig.js +8 -2
  786. package/dist/composables/useBbDropdownContext.d.ts +13 -8
  787. package/dist/composables/useBbFormContext.d.ts +142 -8
  788. package/dist/composables/useBbFormContext.js +62 -30
  789. package/dist/composables/useBbFormField.d.ts +60 -0
  790. package/dist/composables/useBbFormField.js +57 -0
  791. package/dist/composables/useBbTableContext.d.ts +45 -1
  792. package/dist/composables/useBbTableContext.js +93 -87
  793. package/dist/composables/useBbTabsContext.d.ts +24 -18
  794. package/dist/composables/useBbTabsContext.js +154 -112
  795. package/dist/composables/useCharacterCounter.d.ts +33 -0
  796. package/dist/composables/useCharacterCounter.js +29 -0
  797. package/dist/composables/useClosingInert.d.ts +4 -4
  798. package/dist/composables/useCoarsePointer.js +7 -10
  799. package/dist/composables/useCoherence.js +1 -1
  800. package/dist/composables/useConfig.d.ts +59 -0
  801. package/dist/composables/useConfig.js +15 -0
  802. package/dist/composables/useConfirm.d.ts +39 -7
  803. package/dist/composables/useConfirm.js +50 -41
  804. package/dist/composables/useEscapeStackEntry.d.ts +13 -0
  805. package/dist/composables/useEscapeStackEntry.js +16 -0
  806. package/dist/composables/useFormBinding.d.ts +135 -0
  807. package/dist/composables/useFormBinding.js +46 -0
  808. package/dist/composables/useHydrated.d.ts +30 -0
  809. package/dist/composables/useHydrated.js +31 -7
  810. package/dist/composables/useId.d.ts +4 -3
  811. package/dist/composables/useId.js +1 -7
  812. package/dist/composables/useItemText.d.ts +5 -1
  813. package/dist/composables/useItemText.js +8 -3
  814. package/dist/composables/useItemValue.d.ts +5 -1
  815. package/dist/composables/useItemValue.js +8 -3
  816. package/dist/composables/useItemsGetter.d.ts +73 -2
  817. package/dist/composables/useItemsGetter.js +81 -21
  818. package/dist/composables/useKeyboardInset.d.ts +28 -0
  819. package/dist/composables/useKeyboardInset.js +32 -0
  820. package/dist/composables/useLocale.js +13 -9
  821. package/dist/composables/useMobile.js +7 -10
  822. package/dist/composables/useOverlayYield.d.ts +23 -0
  823. package/dist/composables/useOverlayYield.js +20 -0
  824. package/dist/composables/usePassthrough.d.ts +228 -0
  825. package/dist/composables/usePassthrough.js +247 -0
  826. package/dist/composables/usePrefill.d.ts +26 -5
  827. package/dist/composables/usePrefill.js +36 -19
  828. package/dist/composables/useSafeAreaInternal.js +1 -1
  829. package/dist/composables/useSegmentedFields.d.ts +2 -2
  830. package/dist/composables/useSegmentedFields.js +4 -4
  831. package/dist/composables/useServerPrefetch.d.ts +28 -0
  832. package/dist/composables/useServerPrefetch.js +9 -0
  833. package/dist/composables/useSsrState.d.ts +28 -0
  834. package/dist/composables/useSsrState.js +13 -0
  835. package/dist/composables/useTableWidthContext.d.ts +24 -4
  836. package/dist/composables/useTableWidthContext.js +31 -28
  837. package/dist/composables/useToast.d.ts +18 -1
  838. package/dist/composables/useToast.js +31 -18
  839. package/dist/composables/useToggleInput.d.ts +44 -0
  840. package/dist/composables/useToggleInput.js +39 -0
  841. package/dist/composables/useViewportWidth.d.ts +5 -25
  842. package/dist/composables/useViewportWidth.js +14 -7
  843. package/dist/deprecation/ai-deprecations.json.d.ts +2259 -263
  844. package/dist/deprecation/ai-deprecations.json.js +1 -1
  845. package/dist/deprecation/removedProps.js +9 -4
  846. package/dist/directives/bbDropdown.d.ts +15 -4
  847. package/dist/directives/bbDropdown.js +42 -10
  848. package/dist/directives/bbHoverCard.d.ts +59 -0
  849. package/dist/directives/bbHoverCard.js +33 -0
  850. package/dist/directives/bbPopover.d.ts +60 -0
  851. package/dist/directives/bbPopover.js +40 -0
  852. package/dist/directives/bbTooltip.d.ts +8 -0
  853. package/dist/directives/createPopoverDirective.d.ts +86 -0
  854. package/dist/directives/createPopoverDirective.js +111 -33
  855. package/dist/directives/directivePortal.d.ts +75 -0
  856. package/dist/directives/directivePortal.js +37 -0
  857. package/dist/directives/renderingInstance.d.ts +2 -0
  858. package/dist/directives/renderingInstance.js +25 -0
  859. package/dist/i18n/index.d.ts +14 -25
  860. package/dist/i18n/locales/cs.json +28 -18
  861. package/dist/i18n/locales/da.json +31 -21
  862. package/dist/i18n/locales/de-CH.json +137 -0
  863. package/dist/i18n/locales/de.json +30 -20
  864. package/dist/i18n/locales/el.json +28 -18
  865. package/dist/i18n/locales/en-GB.json +137 -0
  866. package/dist/i18n/locales/en.json +25 -15
  867. package/dist/i18n/locales/es-MX.json +137 -0
  868. package/dist/i18n/locales/es.json +34 -24
  869. package/dist/i18n/locales/fi.json +26 -16
  870. package/dist/i18n/locales/fr.json +36 -26
  871. package/dist/i18n/locales/hu.json +26 -16
  872. package/dist/i18n/locales/it.json +29 -19
  873. package/dist/i18n/locales/ja.json +31 -21
  874. package/dist/i18n/locales/ko.json +28 -18
  875. package/dist/i18n/locales/nb.json +31 -21
  876. package/dist/i18n/locales/nl.json +39 -29
  877. package/dist/i18n/locales/pl.json +27 -17
  878. package/dist/i18n/locales/{pt.json → pt-BR.json} +36 -26
  879. package/dist/i18n/locales/pt-PT.json +137 -0
  880. package/dist/i18n/locales/ro.json +40 -30
  881. package/dist/i18n/locales/ru.json +27 -17
  882. package/dist/i18n/locales/sv.json +34 -24
  883. package/dist/i18n/locales/tr.json +32 -22
  884. package/dist/i18n/locales/uk.json +27 -17
  885. package/dist/i18n/locales/{zh-cn.json → zh-CN.json} +28 -18
  886. package/dist/i18n/locales/zh-HK.json +137 -0
  887. package/dist/i18n/locales/zh-TW.json +137 -0
  888. package/dist/i18n/regionHints.d.ts +16 -0
  889. package/dist/i18n/regionHints.js +49 -0
  890. package/dist/i18n/regions.d.ts +286 -0
  891. package/dist/i18n/regions.js +265 -0
  892. package/dist/icon-scan.d.ts +276 -0
  893. package/dist/icon-scan.js +485 -0
  894. package/dist/icons-whitelist.d.ts +5 -4
  895. package/dist/index.d.ts +61 -23
  896. package/dist/index.js +84 -72
  897. package/dist/llms-full.txt +98740 -60296
  898. package/dist/llms-medium.txt +1617 -393
  899. package/dist/llms.txt +40 -23
  900. package/dist/locale-blueprint.json +33 -17
  901. package/dist/nuxt-auto-imports.d.ts +76 -0
  902. package/dist/nuxt-auto-imports.js +32 -0
  903. package/dist/nuxt-module.d.ts +30 -15
  904. package/dist/nuxt.js +35 -9
  905. package/dist/passthrough-deduper.js +5 -0
  906. package/dist/plugin.d.ts +10 -1
  907. package/dist/plugin.js +33 -19
  908. package/dist/project-dts.d.ts +92 -0
  909. package/dist/project-dts.js +173 -0
  910. package/dist/reset.css +1 -1
  911. package/dist/runtime/nuxt-plugin.js +36 -21
  912. package/dist/styles.css +3 -2
  913. package/dist/types/AlertVariant.d.ts +10 -1
  914. package/dist/types/BadgeVariant.d.ts +16 -5
  915. package/dist/types/ButtonVariant.d.ts +12 -1
  916. package/dist/types/ColumnName.d.ts +30 -3
  917. package/dist/types/CommonProps.d.ts +15 -5
  918. package/dist/types/Config.d.ts +112 -1
  919. package/dist/types/ConfirmVariant.d.ts +8 -1
  920. package/dist/types/DropdownItemVariant.d.ts +8 -1
  921. package/dist/types/FieldLayout.d.ts +39 -0
  922. package/dist/types/FieldLayout.js +8 -0
  923. package/dist/types/IndicatorVariant.d.ts +11 -1
  924. package/dist/types/InputVariant.d.ts +30 -0
  925. package/dist/types/ItemProps.d.ts +50 -0
  926. package/dist/types/ItemsProvider.d.ts +94 -0
  927. package/dist/types/Option.d.ts +6 -0
  928. package/dist/types/PtScope.d.ts +15 -0
  929. package/dist/types/RegistryKey.d.ts +10 -0
  930. package/dist/types/TabsVariant.d.ts +25 -0
  931. package/dist/types/ToastVariant.d.ts +12 -2
  932. package/dist/types/TooltipVariant.d.ts +8 -1
  933. package/dist/types/passthrough.d.ts +378 -0
  934. package/dist/types/passthrough.js +78 -0
  935. package/dist/types/ptComponentMap.d.ts +63 -0
  936. package/dist/utilities/functions/animationsSettled.d.ts +7 -0
  937. package/dist/utilities/functions/animationsSettled.js +6 -0
  938. package/dist/utilities/functions/elementLabel.d.ts +8 -0
  939. package/dist/utilities/functions/elementLabel.js +6 -0
  940. package/dist/utilities/functions/hasVnodeListener.d.ts +16 -0
  941. package/dist/utilities/functions/hasVnodeListener.js +12 -0
  942. package/dist/utilities/functions/isImeComposing.d.ts +7 -0
  943. package/dist/utilities/functions/isImeComposing.js +4 -0
  944. package/dist/utilities/functions/itemProps.d.ts +46 -0
  945. package/dist/utilities/functions/itemProps.js +47 -0
  946. package/dist/utilities/functions/parseSize.d.ts +2 -1
  947. package/dist/utilities/functions/readableValue.d.ts +6 -0
  948. package/dist/utilities/functions/readableValue.js +4 -0
  949. package/dist/utilities/functions/settlesVisible.d.ts +20 -0
  950. package/dist/utilities/functions/settlesVisible.js +18 -0
  951. package/dist/utilities/functions/slotKey.d.ts +13 -8
  952. package/dist/utilities/functions/slotKey.js +78 -2
  953. package/dist/utilities/functions/snapToStep.js +2 -1
  954. package/dist/utilities/functions/throttle.d.ts +1 -4
  955. package/dist/utilities/functions/throttle.js +1 -4
  956. package/dist/utilities/functions/toggleInput.d.ts +114 -0
  957. package/dist/utilities/functions/toggleInput.js +61 -0
  958. package/dist/utilities/functions/warnRemovedAttrs.d.ts +39 -1
  959. package/dist/utilities/functions/warnRemovedAttrs.js +85 -14
  960. package/dist/utilities/misc/listboxMetrics.d.ts +9 -3
  961. package/dist/utilities/misc/listboxMetrics.js +5 -2
  962. package/dist/utilities/misc/ssrStateInjectionKey.d.ts +47 -0
  963. package/dist/utilities/misc/ssrStateInjectionKey.js +4 -0
  964. package/dist/utilities/misc/ssrValue.d.ts +20 -0
  965. package/dist/utilities/misc/ssrValue.js +7 -0
  966. package/dist/utils/cssLayers.d.ts +91 -0
  967. package/dist/utils/cssLayers.js +43 -0
  968. package/dist/utils/injectLibraryStyles.d.ts +3 -1
  969. package/dist/utils/injectLibraryStyles.js +24 -23
  970. package/dist/utils/overlayEscapeStack.d.ts +39 -1
  971. package/dist/utils/overlayEscapeStack.js +19 -8
  972. package/dist/utils/passthrough.d.ts +67 -0
  973. package/dist/utils/passthrough.js +100 -0
  974. package/dist/utils/passthroughDeduper.d.ts +2 -0
  975. package/dist/utils/ptScope.d.ts +8 -0
  976. package/dist/utils/ptScope.js +4 -0
  977. package/dist/utils/versionCheck.d.ts +19 -0
  978. package/dist/utils/versionCheck.js +18 -0
  979. package/dist/vite-plugin.d.ts +324 -71
  980. package/dist/vite.js +577 -385
  981. package/llms.txt +41 -24
  982. package/package.json +74 -38
  983. package/scripts/README.md +35 -33
  984. package/scripts/lib/agent-manifest.mjs +510 -0
  985. package/scripts/lib/check-fix.mjs +129 -0
  986. package/scripts/lib/component-attr-targets.ts +123 -0
  987. package/scripts/lib/component-tree.ts +648 -0
  988. package/scripts/lib/css-class-check.mjs +329 -0
  989. package/scripts/lib/css-class-surface.mjs +292 -0
  990. package/scripts/lib/css-color-resolve.mjs +296 -0
  991. package/scripts/lib/css-local-check.mjs +432 -0
  992. package/scripts/lib/design-token-manifest.mjs +506 -0
  993. package/scripts/lib/doc-sections.mjs +250 -0
  994. package/scripts/lib/ensure-manifest.mjs +106 -10
  995. package/scripts/lib/eslint-disable.mjs +167 -0
  996. package/scripts/lib/eslint-plugin.d.ts +84 -1
  997. package/scripts/lib/eslint-plugin.mjs +2190 -33
  998. package/scripts/lib/example-checks.mjs +337 -0
  999. package/scripts/lib/form-v-model.mjs +190 -0
  1000. package/scripts/lib/guide-claims.mjs +452 -0
  1001. package/scripts/lib/hand-imported-styles.mjs +362 -0
  1002. package/scripts/lib/hand-roll-hints.mjs +50 -6
  1003. package/scripts/lib/helper-canon.mjs +176 -0
  1004. package/scripts/lib/helpers-add.mjs +1303 -0
  1005. package/scripts/lib/html-attributes.mjs +353 -0
  1006. package/scripts/lib/items-provider-context.mjs +842 -0
  1007. package/scripts/lib/linked-target.mjs +30 -0
  1008. package/scripts/lib/local-components.mjs +206 -0
  1009. package/scripts/lib/locale-check.mjs +182 -0
  1010. package/scripts/lib/manifest-pointers.mjs +71 -0
  1011. package/scripts/lib/mcp-config.mjs +93 -58
  1012. package/scripts/lib/migrate-fix.mjs +62 -3
  1013. package/scripts/lib/portal-names.mjs +458 -0
  1014. package/scripts/lib/project-variant-dts.mjs +144 -0
  1015. package/scripts/lib/public-type-exports.mjs +273 -0
  1016. package/scripts/lib/reactive-v-model.mjs +221 -0
  1017. package/scripts/lib/redundant-item-accessor.mjs +398 -0
  1018. package/scripts/lib/renamed-item-field.mjs +343 -0
  1019. package/scripts/lib/slot-key.mjs +147 -0
  1020. package/scripts/lib/slot-renames.mjs +45 -0
  1021. package/scripts/lib/squashed-slot-words.mjs +133 -0
  1022. package/scripts/lib/text-null-value.mjs +260 -0
  1023. package/scripts/lib/toolchain-check.mjs +217 -0
  1024. package/scripts/lib/unimported-components.mjs +263 -0
  1025. package/scripts/lib/validate-bb-markup.mjs +2932 -100
  1026. package/scripts/lib/wrapper-props.mjs +188 -0
  1027. package/dist/ai/BbBaseCheckbox.md +0 -49
  1028. package/dist/ai/BbBaseCheckboxGroup.md +0 -64
  1029. package/dist/ai/BbBaseColorInput.md +0 -65
  1030. package/dist/ai/BbBaseColorPalette.md +0 -39
  1031. package/dist/ai/BbBaseDatePicker.md +0 -43
  1032. package/dist/ai/BbBaseDatePickerInput.md +0 -73
  1033. package/dist/ai/BbBaseInputContainer.md +0 -48
  1034. package/dist/ai/BbBaseNumberInput.md +0 -71
  1035. package/dist/ai/BbBaseRadio.md +0 -46
  1036. package/dist/ai/BbBaseRadioGroup.md +0 -64
  1037. package/dist/ai/BbBaseRating.md +0 -52
  1038. package/dist/ai/BbBaseSelect.md +0 -88
  1039. package/dist/ai/BbBaseSlider.md +0 -56
  1040. package/dist/ai/BbBaseSwitch.md +0 -49
  1041. package/dist/ai/BbBaseSwitchGroup.md +0 -64
  1042. package/dist/ai/BbBaseTag.md +0 -68
  1043. package/dist/ai/BbBaseTextInput.md +0 -75
  1044. package/dist/ai/BbBaseTextarea.md +0 -62
  1045. package/dist/ai/BbBaseTimePickerInput.md +0 -62
  1046. package/dist/ai/BbTabsPanes.md +0 -27
  1047. package/dist/ai/CommonInputWrapper.md +0 -42
  1048. package/dist/ai/recipes/inertia/command-palette.md +0 -311
  1049. package/dist/ai/recipes/nuxt/command-palette.md +0 -300
  1050. package/dist/ai/recipes/vue/command-palette.md +0 -297
  1051. package/dist/ai/source/BbBaseCheckbox.md +0 -461
  1052. package/dist/ai/source/BbBaseCheckboxGroup.md +0 -554
  1053. package/dist/ai/source/BbBaseColorInput.md +0 -431
  1054. package/dist/ai/source/BbBaseColorPalette.md +0 -942
  1055. package/dist/ai/source/BbBaseDatePicker.md +0 -1448
  1056. package/dist/ai/source/BbBaseDatePickerInput.md +0 -1940
  1057. package/dist/ai/source/BbBaseInputContainer.md +0 -1211
  1058. package/dist/ai/source/BbBaseNumberInput.md +0 -617
  1059. package/dist/ai/source/BbBaseRadio.md +0 -381
  1060. package/dist/ai/source/BbBaseRadioGroup.md +0 -539
  1061. package/dist/ai/source/BbBaseRating.md +0 -607
  1062. package/dist/ai/source/BbBaseSelect.md +0 -945
  1063. package/dist/ai/source/BbBaseSlider.md +0 -1144
  1064. package/dist/ai/source/BbBaseSwitch.md +0 -246
  1065. package/dist/ai/source/BbBaseSwitchGroup.md +0 -302
  1066. package/dist/ai/source/BbBaseTag.md +0 -694
  1067. package/dist/ai/source/BbBaseTextInput.md +0 -511
  1068. package/dist/ai/source/BbBaseTextarea.md +0 -504
  1069. package/dist/ai/source/BbBaseTimePickerInput.md +0 -1037
  1070. package/dist/ai/source/BbTabsPanes.md +0 -377
  1071. package/dist/ai/source/CommonInputWrapper.md +0 -584
  1072. package/dist/alert-variants.d.ts +0 -19
  1073. package/dist/assets/svgs/sort.svg_raw.js +0 -4
  1074. package/dist/badge-variants.d.ts +0 -19
  1075. package/dist/button-variants.d.ts +0 -21
  1076. package/dist/components/BbBadge/BadgeAppendIcon.vue.d.ts +0 -3
  1077. package/dist/components/BbBadge/BadgeAppendIcon.vue.js +0 -5
  1078. package/dist/components/BbBadge/BadgeAppendIcon.vue_vue_type_script_setup_true_lang.js +0 -22
  1079. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.d.ts +0 -40
  1080. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.js +0 -6
  1081. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue_vue_type_script_setup_true_lang.js +0 -145
  1082. package/dist/components/BbBaseCheckbox/types.d.ts +0 -224
  1083. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.d.ts +0 -19
  1084. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.js +0 -6
  1085. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue_vue_type_script_setup_true_lang.js +0 -190
  1086. package/dist/components/BbBaseCheckboxGroup/types.d.ts +0 -257
  1087. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.d.ts +0 -43
  1088. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.js +0 -6
  1089. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue_vue_type_script_setup_true_lang.js +0 -184
  1090. package/dist/components/BbBaseColorInput/types.d.ts +0 -219
  1091. package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue.d.ts +0 -13
  1092. package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue_vue_type_script_setup_true_lang.js +0 -395
  1093. package/dist/components/BbBaseColorPalette/types.d.ts +0 -40
  1094. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.d.ts +0 -20
  1095. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.js +0 -6
  1096. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue_vue_type_script_setup_true_lang.js +0 -407
  1097. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.d.ts +0 -47
  1098. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.js +0 -5
  1099. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue_vue_type_script_setup_true_lang.js +0 -318
  1100. package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.js +0 -5
  1101. package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue_vue_type_script_setup_true_lang.js +0 -115
  1102. package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.js +0 -5
  1103. package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue_vue_type_script_setup_true_lang.js +0 -116
  1104. package/dist/components/BbBaseDatePicker/types.d.ts +0 -108
  1105. package/dist/components/BbBaseDatePicker/useDatePickerContext.js +0 -11
  1106. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.d.ts +0 -31
  1107. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.js +0 -6
  1108. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue_vue_type_script_setup_true_lang.js +0 -737
  1109. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.d.ts +0 -30
  1110. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.js +0 -6
  1111. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue_vue_type_script_setup_true_lang.js +0 -204
  1112. package/dist/components/BbBaseDatePickerInput/types.d.ts +0 -325
  1113. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.js +0 -6
  1114. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue_vue_type_script_setup_true_lang.js +0 -190
  1115. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.d.ts +0 -52
  1116. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.js +0 -6
  1117. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue_vue_type_script_setup_true_lang.js +0 -215
  1118. package/dist/components/BbBaseNumberInput/types.d.ts +0 -211
  1119. package/dist/components/BbBaseRadio/BbBaseRadio.vue.d.ts +0 -33
  1120. package/dist/components/BbBaseRadio/BbBaseRadio.vue_vue_type_script_setup_true_lang.js +0 -113
  1121. package/dist/components/BbBaseRadio/types.d.ts +0 -179
  1122. package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue.d.ts +0 -19
  1123. package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue_vue_type_script_setup_true_lang.js +0 -179
  1124. package/dist/components/BbBaseRadioGroup/types.d.ts +0 -223
  1125. package/dist/components/BbBaseRating/BbBaseRating.vue.d.ts +0 -38
  1126. package/dist/components/BbBaseRating/BbBaseRating.vue.js +0 -6
  1127. package/dist/components/BbBaseRating/BbBaseRating.vue_vue_type_script_setup_true_lang.js +0 -192
  1128. package/dist/components/BbBaseRating/types.d.ts +0 -176
  1129. package/dist/components/BbBaseSelect/BbBaseSelect.vue.d.ts +0 -19
  1130. package/dist/components/BbBaseSelect/BbBaseSelect.vue.js +0 -6
  1131. package/dist/components/BbBaseSelect/BbBaseSelect.vue_vue_type_script_setup_true_lang.js +0 -311
  1132. package/dist/components/BbBaseSelect/types.d.ts +0 -297
  1133. package/dist/components/BbBaseSlider/BbBaseSlider.vue.d.ts +0 -35
  1134. package/dist/components/BbBaseSlider/BbBaseSlider.vue.js +0 -6
  1135. package/dist/components/BbBaseSlider/BbBaseSlider.vue_vue_type_script_setup_true_lang.js +0 -340
  1136. package/dist/components/BbBaseSlider/types.d.ts +0 -200
  1137. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue.d.ts +0 -35
  1138. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue_vue_type_script_setup_true_lang.js +0 -146
  1139. package/dist/components/BbBaseSwitch/types.d.ts +0 -10
  1140. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.d.ts +0 -19
  1141. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.js +0 -6
  1142. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue_vue_type_script_setup_true_lang.js +0 -190
  1143. package/dist/components/BbBaseSwitchGroup/types.d.ts +0 -8
  1144. package/dist/components/BbBaseTag/BbBaseTag.vue.d.ts +0 -50
  1145. package/dist/components/BbBaseTag/BbBaseTag.vue.js +0 -6
  1146. package/dist/components/BbBaseTag/BbBaseTag.vue_vue_type_script_setup_true_lang.js +0 -266
  1147. package/dist/components/BbBaseTag/types.d.ts +0 -160
  1148. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.d.ts +0 -45
  1149. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.js +0 -6
  1150. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue_vue_type_script_setup_true_lang.js +0 -200
  1151. package/dist/components/BbBaseTextInput/types.d.ts +0 -209
  1152. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.d.ts +0 -39
  1153. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.js +0 -6
  1154. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue_vue_type_script_setup_true_lang.js +0 -187
  1155. package/dist/components/BbBaseTextarea/types.d.ts +0 -170
  1156. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.d.ts +0 -27
  1157. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.js +0 -6
  1158. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue_vue_type_script_setup_true_lang.js +0 -519
  1159. package/dist/components/BbBaseTimePickerInput/types.d.ts +0 -151
  1160. package/dist/components/BbTabs/BbTabsPanes.vue.d.ts +0 -16
  1161. package/dist/components/BbTabs/BbTabsPanes.vue_vue_type_script_setup_true_lang.js +0 -35
  1162. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue.js +0 -6
  1163. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue_vue_type_script_setup_true_lang.js +0 -107
  1164. package/dist/confirm-variants.d.ts +0 -17
  1165. package/dist/dropdown-item-variants.d.ts +0 -17
  1166. package/dist/i18n/index.js +0 -27
  1167. package/dist/indicator-variants.d.ts +0 -20
  1168. package/dist/locale-registry.d.ts +0 -37
  1169. package/dist/toast-variants.d.ts +0 -20
  1170. package/dist/tooltip-variants.d.ts +0 -17
  1171. package/dist/types/InputDirection.d.ts +0 -15
  1172. package/dist/validated/BbCheckbox.vue.d.ts +0 -29
  1173. package/dist/validated/BbCheckbox.vue.js +0 -5
  1174. package/dist/validated/BbCheckbox.vue_vue_type_script_setup_true_lang.js +0 -75
  1175. package/dist/validated/BbCheckboxGroup.vue.d.ts +0 -34
  1176. package/dist/validated/BbCheckboxGroup.vue.js +0 -5
  1177. package/dist/validated/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +0 -82
  1178. package/dist/validated/BbColorInput.vue.d.ts +0 -37
  1179. package/dist/validated/BbColorInput.vue.js +0 -5
  1180. package/dist/validated/BbColorInput.vue_vue_type_script_setup_true_lang.js +0 -75
  1181. package/dist/validated/BbDatePickerInput.vue.d.ts +0 -41
  1182. package/dist/validated/BbDatePickerInput.vue.js +0 -5
  1183. package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +0 -90
  1184. package/dist/validated/BbDropzone.vue.d.ts +0 -24
  1185. package/dist/validated/BbDropzone.vue.js +0 -5
  1186. package/dist/validated/BbDropzone.vue_vue_type_script_setup_true_lang.js +0 -45
  1187. package/dist/validated/BbForm.vue.d.ts +0 -28
  1188. package/dist/validated/BbForm.vue_vue_type_script_setup_true_lang.js +0 -42
  1189. package/dist/validated/BbNumberInput.vue.d.ts +0 -36
  1190. package/dist/validated/BbNumberInput.vue.js +0 -5
  1191. package/dist/validated/BbNumberInput.vue_vue_type_script_setup_true_lang.js +0 -72
  1192. package/dist/validated/BbRadioGroup.vue.d.ts +0 -34
  1193. package/dist/validated/BbRadioGroup.vue.js +0 -5
  1194. package/dist/validated/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +0 -78
  1195. package/dist/validated/BbRating.vue.d.ts +0 -30
  1196. package/dist/validated/BbRating.vue.js +0 -5
  1197. package/dist/validated/BbRating.vue_vue_type_script_setup_true_lang.js +0 -63
  1198. package/dist/validated/BbSelect.vue.d.ts +0 -46
  1199. package/dist/validated/BbSelect.vue.js +0 -5
  1200. package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +0 -109
  1201. package/dist/validated/BbSlider.vue.d.ts +0 -36
  1202. package/dist/validated/BbSlider.vue.js +0 -5
  1203. package/dist/validated/BbSlider.vue_vue_type_script_setup_true_lang.js +0 -69
  1204. package/dist/validated/BbSwitch.vue.d.ts +0 -29
  1205. package/dist/validated/BbSwitch.vue.js +0 -5
  1206. package/dist/validated/BbSwitch.vue_vue_type_script_setup_true_lang.js +0 -75
  1207. package/dist/validated/BbSwitchGroup.vue.d.ts +0 -34
  1208. package/dist/validated/BbSwitchGroup.vue.js +0 -5
  1209. package/dist/validated/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +0 -82
  1210. package/dist/validated/BbTag.vue.d.ts +0 -36
  1211. package/dist/validated/BbTag.vue.js +0 -5
  1212. package/dist/validated/BbTag.vue_vue_type_script_setup_true_lang.js +0 -72
  1213. package/dist/validated/BbTextInput.vue.d.ts +0 -36
  1214. package/dist/validated/BbTextInput.vue.js +0 -5
  1215. package/dist/validated/BbTextInput.vue_vue_type_script_setup_true_lang.js +0 -72
  1216. package/dist/validated/BbTextarea.vue.d.ts +0 -36
  1217. package/dist/validated/BbTextarea.vue.js +0 -5
  1218. package/dist/validated/BbTextarea.vue_vue_type_script_setup_true_lang.js +0 -70
  1219. package/dist/validated/BbTimePickerInput.vue.d.ts +0 -37
  1220. package/dist/validated/BbTimePickerInput.vue.js +0 -5
  1221. package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +0 -81
  1222. package/dist/validated/index.d.ts +0 -43
  1223. package/dist/validated/useValidatedField.d.ts +0 -93
  1224. package/dist/validated/useValidatedField.js +0 -51
  1225. package/dist/validated.js +0 -21
  1226. /package/dist/components/{BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.d.ts → BbCalendar/CalendarMonthPanel.vue.d.ts} +0 -0
  1227. /package/dist/components/{BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.d.ts → BbCalendar/CalendarYearPanel.vue.d.ts} +0 -0
  1228. /package/dist/{components/BbBaseDatePicker/typeahead.d.ts → composables/useTypeahead.d.ts} +0 -0
  1229. /package/dist/{components/BbBaseDatePicker/typeahead.js → composables/useTypeahead.js} +0 -0
@@ -36,8 +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`, `useResourceContext`.
39
+ - From the [Inertia Helpers](../../guides/inertia-helpers.md) toolkit, installed with
40
+ `npx bitboss-ui add useProp useQuery useQueryObject useResourceContext useTableContext`.
41
41
  - A `useCategoriesStore()` Pinia store exposing the shared expense-category
42
42
  catalog (Travel, Meals & entertainment, Lodging, Rideshare & transit,
43
43
  Software & subscriptions, Office supplies, Fuel, Client entertainment).
@@ -111,15 +111,15 @@ ReceiptPaginator::make(...), 'tabCounts' => [...], 'readyCount' => ...])` —
111
111
  ## Page anatomy
112
112
 
113
113
  ```
114
- UploadCenter/
114
+ resources/js/pages/UploadCenter/
115
115
  Index.vue ← assembly: PageShell slots, dropzone, tabs, table, pagination
116
116
  context.ts ← coopting page context (shell + useTableContext + categories + URL filters + upload queue + actions)
117
117
  ReceiptDropzone.vue ← multi-file capture, constraint errors mapped to messages
118
118
  FilterRail.vue ← pill filters + clear-all
119
119
  ReceiptFileCell.vue ← file icon + name (peek link) + size, both row kinds
120
120
  UploadProgressCell.vue ← per-file BbProgress / failed state with inline retry
121
- MerchantCell.vue ← inline text edit, commit on blur/Enter (§6.3)
122
- CategoryCell.vue ← one-click badge → BbSelectPopover (§6.1)
121
+ MerchantCell.vue ← inline text edit, commit on blur/Enter (inline-editing table)
122
+ CategoryCell.vue ← one-click badge → BbSelectPopover (one-click status cell)
123
123
  AmountCell.vue ← inline number edit with $ prefix
124
124
  DateCell.vue ← date picker cell, commit on pick
125
125
  RowActions.vue ← remove-from-queue / per-receipt "…" dropdown
@@ -134,35 +134,35 @@ Chrome assumed from the guides: [App Layout](../../guides/app-layout.md)
134
134
 
135
135
  ## Action inventory
136
136
 
137
- | # | Action | Trigger | Mechanism |
138
- | --- | --------------------------------- | ---------------------------------- | ---------------------------------------------------------------- |
139
- | 1 | Upload receipts | dropzone (drag, click, Browse) | `enqueueFiles()` → direct fetch/XHR upload + partial reload |
140
- | 2 | Retry a failed upload | inline in the progress cell | `retryUpload(id)` re-issues the same direct request |
141
- | 3 | Remove an in-flight upload | row actions (x) | `removeUpload(id)` aborts + drops the row |
142
- | 4 | Page search | topbar right | `filters.search` → `useQueryObject` partial visit |
143
- | 5 | Filter category / merchant / date | filter rail pills | `BbSelectPopover` multiple / query-aware / date range |
144
- | 6 | Clear filters | rail right (only when active) | context `clearFilters()` |
145
- | 7 | Switch tab | server-visit tabs with counts | `BbTabs` `href` + `server: true` visit |
146
- | 8 | Edit merchant inline | merchant cell | commit on blur/Enter → promise-wrapped visit, Esc reverts (§6.3) |
147
- | 9 | Change category one-click | category badge in row & peek | `BbSelectPopover` on the badge (§6.1) → promise-wrapped visit |
148
- | 10 | Edit amount inline | amount cell ($ prefix) | commit on blur/Enter → promise-wrapped visit, Esc reverts |
149
- | 11 | Edit expense date inline | date cell | commit on pick → promise-wrapped visit |
150
- | 12 | Submit one receipt | row `…`, peek footer | `submitReceipt()` (visit + refresh + toast) |
151
- | 13 | Submit all with count | topbar, the page's one `primary` | `submitAll()` — count from every fetch |
152
- | 14 | Remove a draft | row `…`, peek footer | destructive behind `useConfirm` |
153
- | 15 | Bulk categorize | floating bottom panel popover | `bulkCategorize()` on `table.selected`/`all`/`unselected` |
154
- | 16 | Bulk remove | floating bottom panel | destructive behind `useConfirm`, count in message |
155
- | 17 | Select rows / select all | table checkboxes (drafts only) | `useTableContext` selection (across pages) |
156
- | 18 | Peek receipt | filename cell / merchant peek list | `peekReceipt(id)` → shell stack, JSON fetch |
157
- | 19 | Peek merchant (stacked) | merchant name inside the peek | `stackMerchant(name)` → back arrow, JSON fetch |
158
- | 20 | Download original | row `…`, peek footer | navigation (`target="_blank"`, real file endpoint) |
137
+ | # | Action | Trigger | Mechanism |
138
+ | --- | --------------------------------- | ---------------------------------- | -------------------------------------------------------------------------------- |
139
+ | 1 | Upload receipts | dropzone (drag, click, Browse) | `enqueueFiles()` → direct fetch/XHR upload + partial reload |
140
+ | 2 | Retry a failed upload | inline in the progress cell | `retryUpload(id)` re-issues the same direct request |
141
+ | 3 | Remove an in-flight upload | row actions (x) | `removeUpload(id)` aborts + drops the row |
142
+ | 4 | Page search | topbar right | `filters.search` → `useQueryObject` partial visit |
143
+ | 5 | Filter category / merchant / date | filter rail pills | `BbSelectPopover` multiple / query-aware / date range |
144
+ | 6 | Clear filters | rail right (only when active) | context `clearFilters()` |
145
+ | 7 | Switch tab | server-visit tabs with counts | `BbTabs` `href` + `server: true` visit |
146
+ | 8 | Edit merchant inline | merchant cell | commit on blur/Enter → promise-wrapped visit, Esc reverts (inline-editing table) |
147
+ | 9 | Change category one-click | category badge in row & peek | `BbSelectPopover` on the badge (one-click status cell) → promise-wrapped visit |
148
+ | 10 | Edit amount inline | amount cell ($ prefix) | commit on blur/Enter → promise-wrapped visit, Esc reverts |
149
+ | 11 | Edit expense date inline | date cell | commit on pick → promise-wrapped visit |
150
+ | 12 | Submit one receipt | row `…`, peek footer | `submitReceipt()` (visit + refresh + toast) |
151
+ | 13 | Submit all with count | topbar, the page's one `primary` | `submitAll()` — count from every fetch |
152
+ | 14 | Remove a draft | row `…`, peek footer | destructive behind `useConfirm` |
153
+ | 15 | Bulk categorize | floating bottom panel popover | `bulkCategorize()` on `table.selected`/`all`/`unselected` |
154
+ | 16 | Bulk remove | floating bottom panel | destructive behind `useConfirm`, count in message |
155
+ | 17 | Select rows / select all | table checkboxes (drafts only) | `useTableContext` selection (across pages) |
156
+ | 18 | Peek receipt | filename cell / merchant peek list | `peekReceipt(id)` → shell stack, JSON fetch |
157
+ | 19 | Peek merchant (stacked) | merchant name inside the peek | `stackMerchant(name)` → back arrow, JSON fetch |
158
+ | 20 | Download original | row `…`, peek footer | navigation (`target="_blank"`, real file endpoint) |
159
159
 
160
160
  ## The code
161
161
 
162
162
  ### context.ts
163
163
 
164
164
  ```ts
165
- // UploadCenter/context.ts
165
+ // pages/UploadCenter/context.ts
166
166
  import {
167
167
  computed,
168
168
  inject,
@@ -175,7 +175,12 @@ import {
175
175
  } from 'vue';
176
176
  import { router } from '@inertiajs/vue3';
177
177
  import type { RequestPayload } from '@inertiajs/core';
178
- import { useConfirm, useToast, type BadgeVariantType } from 'bitboss-ui';
178
+ import {
179
+ useConfirm,
180
+ useToast,
181
+ type BadgeVariantType,
182
+ type BbSelectPopoverItemsContext,
183
+ } from 'bitboss-ui';
179
184
  import {
180
185
  usePageShellContext,
181
186
  type PageShellContext,
@@ -183,18 +188,22 @@ import {
183
188
  import {
184
189
  useTableContext,
185
190
  type TableContext,
186
- } from '@/composables/useTableContext';
187
- import { useQueryObject } from '@/composables/useQueryObject';
188
- import { useProp } from '@/composables/useProp';
189
- 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';
190
195
  import { useCategoriesStore } from '@/stores/categories';
191
196
  import { api } from '@/api';
192
197
  import type { Category, Receipt, ReceiptStatus } from '@/types';
193
198
 
194
- /** What the stacked sidebar can show. Clicking a name pushes one of these. */
199
+ /**
200
+ * What the stacked sidebar can show. Clicking a name pushes one of these.
201
+ * `title` names the sidebar (`#sidebar-title`) before the record's own fetch
202
+ * has resolved: the caller passes the name it is rendering.
203
+ */
195
204
  export type PeekItem =
196
- | { type: 'receipt'; id: string }
197
- | { type: 'merchant'; name: string };
205
+ | { type: 'receipt'; id: string; title: string }
206
+ | { type: 'merchant'; name: string; title: string };
198
207
 
199
208
  export type UploadCenterTab = 'drafts' | 'submitted' | 'reimbursed';
200
209
 
@@ -237,7 +246,7 @@ const RELOAD_PROPS = ['receipts', 'tabCounts', 'readyCount'] as const;
237
246
  // -- Receipt-status badge maps: one closed set, mapped once for the whole page.
238
247
  // The receipt lifecycle (table rows, the receipt peek header, the merchant
239
248
  // peek's recent list) is a small closed set — the textbook case for the soft
240
- // accents (design-language.md § Using color), registered via badge-variants.d.ts.
249
+ // accents (design-language.md § Using color), registered with the plugin's badgeVariants option.
241
250
  // draft = idle/neutral, submitted = pending approval, reimbursed = done.
242
251
  export const STATUS_LABEL: Record<ReceiptStatus, string> = {
243
252
  draft: 'Draft',
@@ -270,10 +279,10 @@ export interface UploadCenterContext {
270
279
  // -- Data --------------------------------------------------------------------
271
280
  /** Drafts tab: queue rows first, then the fetched server page. */
272
281
  rows: ComputedRef<UploadCenterRow[]>;
273
- searchMerchants: (query: string) => Promise<string[]>;
282
+ searchMerchants: (context: BbSelectPopoverItemsContext) => Promise<string[]>;
274
283
  // -- Peek grammar ----------------------------------------------------------
275
- peekReceipt: (id: string) => void;
276
- stackReceipt: (id: string) => void;
284
+ peekReceipt: (id: string, title: string) => void;
285
+ stackReceipt: (id: string, title: string) => void;
277
286
  stackMerchant: (name: string) => void;
278
287
  // -- Actions (complete: visit/reload + refresh + toast) ----------------------
279
288
  clearFilters: () => void;
@@ -380,10 +389,21 @@ export function provideUploadCenter(): UploadCenterContext {
380
389
  : serverRows;
381
390
  });
382
391
 
383
- const searchMerchants = (search: string): Promise<string[]> =>
384
- fetch(`/merchants/search?q=${encodeURIComponent(search)}`).then((res) =>
385
- res.json()
392
+ // The merchant pill's provider: one context object, `query` is the typed
393
+ // text and `signal` cancels a request a newer keystroke supersedes. `fetch`
394
+ // resolves on a 4xx/5xx too, hence the `res.ok` check: a failed search
395
+ // throws, so the popover shows its failed state.
396
+ const searchMerchants = async ({
397
+ query,
398
+ signal,
399
+ }: BbSelectPopoverItemsContext): Promise<string[]> => {
400
+ const res = await fetch(
401
+ `/merchants/search?q=${encodeURIComponent(query)}`,
402
+ { signal }
386
403
  );
404
+ if (!res.ok) throw new Error(`Merchant search failed (${res.status})`);
405
+ return res.json();
406
+ };
387
407
 
388
408
  // -- Upload machinery ----------------------------------------------------------
389
409
  // Inertia visits cannot stream per-file progress for a background queue, so
@@ -456,10 +476,12 @@ export function provideUploadCenter(): UploadCenterContext {
456
476
 
457
477
  // -- Peek grammar ----------------------------------------------------------------
458
478
  // peekX opens a fresh stack (from the list); stackX drills down (from a peek).
459
- const peekReceipt = (id: string) => shell.push({ type: 'receipt', id }, true);
460
- const stackReceipt = (id: string) => shell.push({ type: 'receipt', id });
479
+ const peekReceipt = (id: string, title: string) =>
480
+ shell.peek({ type: 'receipt', id, title });
481
+ const stackReceipt = (id: string, title: string) =>
482
+ shell.stackItem({ type: 'receipt', id, title });
461
483
  const stackMerchant = (name: string) =>
462
- shell.push({ type: 'merchant', name });
484
+ shell.stackItem({ type: 'merchant', name, title: name });
463
485
 
464
486
  // -- Actions --------------------------------------------------------------------
465
487
  const updateReceipt = async (receipt: Receipt, patch: ReceiptPatch) => {
@@ -471,6 +493,7 @@ export function provideUploadCenter(): UploadCenterContext {
471
493
  toast({
472
494
  title: `Could not save ${receipt.filename}. Changes were reverted.`,
473
495
  variant: 'destructive',
496
+ icon: 'lucide:circle-x',
474
497
  });
475
498
  }
476
499
  };
@@ -481,6 +504,7 @@ export function provideUploadCenter(): UploadCenterContext {
481
504
  toast({
482
505
  title: `${receipt.merchant ?? receipt.filename} submitted for approval.`,
483
506
  variant: 'success',
507
+ icon: 'lucide:circle-check',
484
508
  });
485
509
  };
486
510
 
@@ -490,6 +514,7 @@ export function provideUploadCenter(): UploadCenterContext {
490
514
  toast({
491
515
  title: `${readyCount.value} receipts submitted for approval.`,
492
516
  variant: 'success',
517
+ icon: 'lucide:circle-check',
493
518
  });
494
519
  };
495
520
 
@@ -504,7 +529,11 @@ export function provideUploadCenter(): UploadCenterContext {
504
529
  if (!ok) return false;
505
530
  await visit('delete', `/receipts/${receipt.id}`);
506
531
  refresh();
507
- toast({ title: `${receipt.filename} removed.`, variant: 'success' });
532
+ toast({
533
+ title: `${receipt.filename} removed.`,
534
+ variant: 'success',
535
+ icon: 'lucide:circle-check',
536
+ });
508
537
  return true;
509
538
  };
510
539
 
@@ -532,6 +561,7 @@ export function provideUploadCenter(): UploadCenterContext {
532
561
  toast({
533
562
  title: `${count} receipts filed under ${category?.name ?? 'the selected category'}.`,
534
563
  variant: 'success',
564
+ icon: 'lucide:circle-check',
535
565
  });
536
566
  };
537
567
 
@@ -548,7 +578,11 @@ export function provideUploadCenter(): UploadCenterContext {
548
578
  await visit('post', '/receipts/bulk/delete', bulkPayload());
549
579
  table.resetSelection();
550
580
  refresh();
551
- toast({ title: `${count} receipts removed.`, variant: 'success' });
581
+ toast({
582
+ title: `${count} receipts removed.`,
583
+ variant: 'success',
584
+ icon: 'lucide:circle-check',
585
+ });
552
586
  };
553
587
 
554
588
  const ctx: UploadCenterContext = {
@@ -592,7 +626,7 @@ export function useUploadCenter(): UploadCenterContext {
592
626
  ### Index.vue — the assembly
593
627
 
594
628
  ```vue
595
- <!-- UploadCenter/Index.vue -->
629
+ <!-- pages/UploadCenter/Index.vue -->
596
630
  <template>
597
631
  <PageShell>
598
632
  <!-- Topbar: breadcrumbs left, page search + submit-all right. -->
@@ -603,9 +637,9 @@ export function useUploadCenter(): UploadCenterContext {
603
637
  <BbBreadcrumbs
604
638
  class="min-w-0 flex-auto"
605
639
  :items="[
606
- { key: 'dashboard', text: 'Dashboard', href: '/dashboard' },
607
- { key: 'expenses', text: 'Expenses', href: '/expenses' },
608
- { key: 'receipts', text: 'Receipts' },
640
+ { value: 'dashboard', label: 'Dashboard', href: '/dashboard' },
641
+ { value: 'expenses', label: 'Expenses', href: '/expenses' },
642
+ { value: 'receipts', label: 'Receipts' },
609
643
  ]"
610
644
  />
611
645
  <div class="flex shrink-0 items-center gap-2">
@@ -651,33 +685,33 @@ export function useUploadCenter(): UploadCenterContext {
651
685
  <BbTabs
652
686
  v-model="ctx.tab.value"
653
687
  compact
654
- navigation
655
- preserve-scroll
656
- preserve-state
657
- replace
658
688
  :items="[
659
689
  {
660
- key: 'drafts',
690
+ value: 'drafts',
661
691
  label: `Drafts · ${ctx.tabCounts.value.drafts}`,
662
692
  href: tabHref('drafts'),
663
693
  server: true,
664
694
  only: ['receipts', 'tabCounts', 'readyCount'],
665
695
  },
666
696
  {
667
- key: 'submitted',
697
+ value: 'submitted',
668
698
  label: `Submitted · ${ctx.tabCounts.value.submitted}`,
669
699
  href: tabHref('submitted'),
670
700
  server: true,
671
701
  only: ['receipts', 'tabCounts', 'readyCount'],
672
702
  },
673
703
  {
674
- key: 'reimbursed',
704
+ value: 'reimbursed',
675
705
  label: `Reimbursed · ${ctx.tabCounts.value.reimbursed}`,
676
706
  href: tabHref('reimbursed'),
677
707
  server: true,
678
708
  only: ['receipts', 'tabCounts', 'readyCount'],
679
709
  },
680
710
  ]"
711
+ navigation
712
+ preserve-scroll
713
+ preserve-state
714
+ replace
681
715
  />
682
716
 
683
717
  <!-- No dependencies/items-fn: `receipts` is a page prop, `rows` merges
@@ -687,7 +721,6 @@ export function useUploadCenter(): UploadCenterContext {
687
721
  v-model="ctx.table.selected.value"
688
722
  v-model:select-all="ctx.table.all.value"
689
723
  v-model:unselected-items="ctx.table.unselected.value"
690
- actions
691
724
  caption="Expense receipts"
692
725
  :columns="columns"
693
726
  compact
@@ -708,18 +741,18 @@ export function useUploadCenter(): UploadCenterContext {
708
741
  <MerchantCell v-if="isDraft(item)" :receipt="item" />
709
742
  <span
710
743
  v-else-if="item.kind === 'upload'"
711
- class="text-[color:var(--bb-text-muted)]"
744
+ class="text-(--bb-text-muted)"
712
745
  >—</span
713
746
  >
714
747
  <span v-else>{{ item.merchant ?? '—' }}</span>
715
748
  </template>
716
749
 
717
750
  <!-- Slot names are normalized: `categoryId` → `#categoryid`. -->
718
- <template #categoryid="{ item }">
751
+ <template #category-id="{ item }">
719
752
  <CategoryCell v-if="isDraft(item)" :receipt="item" />
720
753
  <span
721
754
  v-else-if="item.kind === 'upload'"
722
- class="text-[color:var(--bb-text-muted)]"
755
+ class="text-(--bb-text-muted)"
723
756
  >—</span
724
757
  >
725
758
  <span v-else>{{ categoryName(item.categoryId) }}</span>
@@ -729,7 +762,7 @@ export function useUploadCenter(): UploadCenterContext {
729
762
  <AmountCell v-if="isDraft(item)" :receipt="item" />
730
763
  <span
731
764
  v-else-if="item.kind === 'upload'"
732
- class="text-[color:var(--bb-text-muted)]"
765
+ class="text-(--bb-text-muted)"
733
766
  >—</span
734
767
  >
735
768
  <span v-else>{{
@@ -741,7 +774,7 @@ export function useUploadCenter(): UploadCenterContext {
741
774
  <DateCell v-if="isDraft(item)" :receipt="item" />
742
775
  <span
743
776
  v-else-if="item.kind === 'upload'"
744
- class="text-[color:var(--bb-text-muted)]"
777
+ class="text-(--bb-text-muted)"
745
778
  >—</span
746
779
  >
747
780
  <span v-else>{{ item.date ? shortDate(item.date) : '—' }}</span>
@@ -759,11 +792,11 @@ export function useUploadCenter(): UploadCenterContext {
759
792
  <RowActions :row="item" />
760
793
  </template>
761
794
 
762
- <template #no-data>
795
+ <template #empty>
763
796
  <div class="flex flex-col items-center gap-2 p-8 text-center">
764
797
  <BbIcon
765
798
  aria-hidden="true"
766
- class="text-[color:var(--bb-text-muted)]"
799
+ class="text-(--bb-text-muted)"
767
800
  :icon="
768
801
  ctx.hasActiveFilters.value
769
802
  ? 'lucide:search-x'
@@ -780,7 +813,7 @@ export function useUploadCenter(): UploadCenterContext {
780
813
  : 'Nothing in this tab yet'
781
814
  }}
782
815
  </p>
783
- <p class="text-xs text-[color:var(--bb-text-muted)]">
816
+ <p class="text-xs text-(--bb-text-muted)">
784
817
  {{
785
818
  ctx.hasActiveFilters.value
786
819
  ? 'Loosen a filter above, or switch tabs to widen the view.'
@@ -812,6 +845,7 @@ export function useUploadCenter(): UploadCenterContext {
812
845
  <SelectionBar />
813
846
 
814
847
  <!-- Stacked peek sidebar: the shell owns back/close; we render by type. -->
848
+ <template #sidebar-title>{{ ctx.shell.current.value?.title }}</template>
815
849
  <template #sidebar>
816
850
  <ReceiptPeek
817
851
  v-if="ctx.shell.current.value?.type === 'receipt'"
@@ -839,7 +873,7 @@ import {
839
873
  } from 'bitboss-ui';
840
874
  import qs from 'query-string';
841
875
  import PageShell from '@/components/layout/PageShell.vue';
842
- import { useQuery } from '@/composables/useQuery';
876
+ import { useQuery } from '@/composables/inertia-helpers/useQuery';
843
877
  import {
844
878
  provideUploadCenter,
845
879
  STATUS_LABEL,
@@ -920,7 +954,7 @@ const submitLabel = computed(() =>
920
954
  ### ReceiptDropzone.vue
921
955
 
922
956
  ```vue
923
- <!-- UploadCenter/ReceiptDropzone.vue -->
957
+ <!-- pages/UploadCenter/ReceiptDropzone.vue -->
924
958
  <template>
925
959
  <BbDropzone
926
960
  v-model="pending"
@@ -933,21 +967,21 @@ const submitLabel = computed(() =>
933
967
  >
934
968
  <template #default="{ dragging, focused, open }">
935
969
  <div
936
- class="flex flex-col items-center gap-2 rounded-[var(--bb-radius)] border-2 border-dashed p-6 text-center transition-colors"
970
+ class="flex flex-col items-center gap-2 rounded-(--bb-radius) border-2 border-dashed p-6 text-center transition-colors"
937
971
  :class="[
938
- dragging ? 'border-[var(--bb-primary)]' : 'border-[var(--bb-border)]',
939
- focused ? 'ring-2 ring-[var(--bb-primary)] ring-offset-2' : '',
972
+ dragging ? 'border-(--bb-primary)' : 'border-(--bb-border)',
973
+ focused ? 'ring-2 ring-(--bb-primary) ring-offset-2' : '',
940
974
  ]"
941
975
  >
942
976
  <BbIcon
943
- class="text-[color:var(--bb-text-muted)]"
977
+ class="text-(--bb-text-muted)"
944
978
  icon="lucide:receipt"
945
979
  size="lg"
946
980
  />
947
981
  <p class="text-sm font-medium">
948
982
  {{ dragging ? 'Drop to add receipts' : 'Drop receipts here' }}
949
983
  </p>
950
- <p class="text-xs text-[color:var(--bb-text-muted)]">
984
+ <p class="text-xs text-(--bb-text-muted)">
951
985
  JPG, PNG, HEIC or PDF · up to 10 MB each · 20 files per drop
952
986
  </p>
953
987
  <BbButton
@@ -1018,7 +1052,7 @@ const onError = (error: DropZoneError) => {
1018
1052
  ### FilterRail.vue
1019
1053
 
1020
1054
  ```vue
1021
- <!-- UploadCenter/FilterRail.vue -->
1055
+ <!-- pages/UploadCenter/FilterRail.vue -->
1022
1056
  <template>
1023
1057
  <div class="flex flex-wrap items-center gap-2">
1024
1058
  <!-- Category: multi-select pill over the coopted catalog. Searchable, so
@@ -1035,8 +1069,8 @@ const onError = (error: DropZoneError) => {
1035
1069
  <template #activator="{ props }">
1036
1070
  <BbButton
1037
1071
  v-bind="props"
1038
- aria-label="Filter by category"
1039
1072
  append:icon="lucide:chevron-down"
1073
+ aria-label="Filter by category"
1040
1074
  size="sm"
1041
1075
  variant="outline"
1042
1076
  >
@@ -1063,8 +1097,8 @@ const onError = (error: DropZoneError) => {
1063
1097
  <template #activator="{ props }">
1064
1098
  <BbButton
1065
1099
  v-bind="props"
1066
- aria-label="Filter by merchant"
1067
1100
  append:icon="lucide:chevron-down"
1101
+ aria-label="Filter by merchant"
1068
1102
  size="sm"
1069
1103
  variant="outline"
1070
1104
  >
@@ -1110,36 +1144,35 @@ const ctx = useUploadCenter();
1110
1144
  ### ReceiptFileCell.vue
1111
1145
 
1112
1146
  ```vue
1113
- <!-- UploadCenter/ReceiptFileCell.vue -->
1147
+ <!-- pages/UploadCenter/ReceiptFileCell.vue -->
1114
1148
  <template>
1115
1149
  <div class="flex items-center gap-2">
1116
1150
  <BbIcon
1117
- class="shrink-0 text-[color:var(--bb-text-muted)]"
1151
+ class="shrink-0 text-(--bb-text-muted)"
1118
1152
  :icon="fileIcon"
1119
1153
  size="16"
1120
1154
  />
1121
1155
  <div class="flex min-w-0 flex-col">
1122
- <!-- Server receipts peek on click; queue rows are not peekable yet. -->
1123
- <BbButton
1156
+ <!-- Server receipts peek on click; queue rows are not peekable yet.
1157
+ The filename is an inline link, not a button: `BbBaseButton` has
1158
+ no padding, so the name starts on the same edge as the size
1159
+ under it, and `.plain-link` keeps wrapped lines left-aligned. -->
1160
+ <BbBaseButton
1124
1161
  v-if="row.kind === 'receipt'"
1125
- class="justify-start"
1126
- size="sm"
1127
- variant="link"
1128
- @click="() => ctx.peekReceipt(row.id)"
1162
+ class="plain-link text-sm"
1163
+ @click="() => ctx.peekReceipt(row.id, row.filename)"
1129
1164
  >
1130
1165
  {{ row.filename }}
1131
- </BbButton>
1166
+ </BbBaseButton>
1132
1167
  <span v-else class="truncate text-sm">{{ row.filename }}</span>
1133
- <span class="text-xs text-[color:var(--bb-text-muted)]">{{
1134
- formattedSize
1135
- }}</span>
1168
+ <span class="text-xs text-(--bb-text-muted)">{{ formattedSize }}</span>
1136
1169
  </div>
1137
1170
  </div>
1138
1171
  </template>
1139
1172
 
1140
1173
  <script setup lang="ts">
1141
1174
  import { computed } from 'vue';
1142
- import { BbButton, BbIcon } from 'bitboss-ui';
1175
+ import { BbBaseButton, BbIcon } from 'bitboss-ui';
1143
1176
  import { useUploadCenter, type UploadCenterRow } from './context';
1144
1177
 
1145
1178
  const props = defineProps<{ row: UploadCenterRow }>();
@@ -1165,7 +1198,7 @@ const formattedSize = computed(() => {
1165
1198
  ### UploadProgressCell.vue
1166
1199
 
1167
1200
  ```vue
1168
- <!-- UploadCenter/UploadProgressCell.vue -->
1201
+ <!-- pages/UploadCenter/UploadProgressCell.vue -->
1169
1202
  <template>
1170
1203
  <!-- In flight: a live bar. `upload.progress` is a reactive field mutated
1171
1204
  by the context's progress callback — no refetch per tick. -->
@@ -1175,7 +1208,7 @@ const formattedSize = computed(() => {
1175
1208
  class="flex-1"
1176
1209
  :model-value="upload.progress"
1177
1210
  />
1178
- <span class="text-xs tabular-nums text-[color:var(--bb-text-muted)]"
1211
+ <span class="text-xs text-(--bb-text-muted) tabular-nums"
1179
1212
  >{{ upload.progress }}%</span
1180
1213
  >
1181
1214
  </div>
@@ -1210,7 +1243,7 @@ const ctx = useUploadCenter();
1210
1243
  ### MerchantCell.vue
1211
1244
 
1212
1245
  ```vue
1213
- <!-- UploadCenter/MerchantCell.vue -->
1246
+ <!-- pages/UploadCenter/MerchantCell.vue -->
1214
1247
  <template>
1215
1248
  <BbTextInput
1216
1249
  v-model="draft"
@@ -1218,6 +1251,7 @@ const ctx = useUploadCenter();
1218
1251
  hide-label
1219
1252
  label="Merchant"
1220
1253
  placeholder="Add merchant"
1254
+ variant="ghost"
1221
1255
  @change="commit"
1222
1256
  @keydown.esc="revert"
1223
1257
  />
@@ -1233,7 +1267,7 @@ const props = defineProps<{ receipt: Receipt }>();
1233
1267
 
1234
1268
  const ctx = useUploadCenter();
1235
1269
 
1236
- // Inline-edit doctrine (§6.3): a local draft, commit on @change — which
1270
+ // Inline-edit doctrine: a local draft, commit on @change — which
1237
1271
  // fires once for the whole blur/Enter sequence, unlike binding @blur AND
1238
1272
  // @keydown.enter separately (that double-fires: Enter commits, then the
1239
1273
  // field still blurs right after). Revert on Esc. The server value re-seeds
@@ -1261,7 +1295,7 @@ const revert = () => {
1261
1295
  ### CategoryCell.vue
1262
1296
 
1263
1297
  ```vue
1264
- <!-- UploadCenter/CategoryCell.vue -->
1298
+ <!-- pages/UploadCenter/CategoryCell.vue -->
1265
1299
  <template>
1266
1300
  <BbSelectPopover
1267
1301
  compact
@@ -1273,8 +1307,8 @@ const revert = () => {
1273
1307
  width="220px"
1274
1308
  @update:model-value="(categoryId) => pick(categoryId as string)"
1275
1309
  >
1276
- <template #activator="{ props: activatorProps, shown }">
1277
- <!-- One-click pattern (§6.1): the badge is the focusable trigger —
1310
+ <template #activator="{ props: activatorProps }">
1311
+ <!-- One-click pattern: the badge is the focusable trigger —
1278
1312
  BbBadgeButton takes over the badge body, the trailing chevron says
1279
1313
  "this can change", and while the save runs `loading` swaps the
1280
1314
  spinner into the chevron's place. A category is a label, not a
@@ -1283,7 +1317,6 @@ const revert = () => {
1283
1317
  quieter to-dos, not values. -->
1284
1318
  <BbBadge
1285
1319
  append:icon="lucide:chevron-down"
1286
- :class="{ 'category-cell--open': shown }"
1287
1320
  :loading="saving"
1288
1321
  :variant="receipt.categoryId ? 'secondary' : 'outline'"
1289
1322
  >
@@ -1327,22 +1360,12 @@ const categoryName = computed(
1327
1360
  )?.name ?? 'Set category'
1328
1361
  );
1329
1362
  </script>
1330
-
1331
- <style scoped>
1332
- /* Open = the badge's own hue, deepened, plus its variant ring — the same
1333
- grammar as every badge-activator cell. */
1334
- .category-cell--open {
1335
- --bg: color-mix(in oklab, var(--color) 24%, var(--bb-panel));
1336
- --border-color: color-mix(in oklab, var(--color) 45%, var(--bb-panel));
1337
- box-shadow: 0 0 0 var(--bb-ring-size) var(--ring);
1338
- }
1339
- </style>
1340
1363
  ```
1341
1364
 
1342
1365
  ### AmountCell.vue
1343
1366
 
1344
1367
  ```vue
1345
- <!-- UploadCenter/AmountCell.vue -->
1368
+ <!-- pages/UploadCenter/AmountCell.vue -->
1346
1369
  <template>
1347
1370
  <BbNumberInput
1348
1371
  v-model="draft"
@@ -1351,7 +1374,9 @@ const categoryName = computed(
1351
1374
  label="Amount"
1352
1375
  :max-precision="2"
1353
1376
  :min="0"
1377
+ :min-precision="2"
1354
1378
  placeholder="0.00"
1379
+ variant="ghost"
1355
1380
  @change="commit"
1356
1381
  @keydown.esc="revert"
1357
1382
  >
@@ -1369,32 +1394,24 @@ const props = defineProps<{ receipt: Receipt }>();
1369
1394
 
1370
1395
  const ctx = useUploadCenter();
1371
1396
 
1372
- /** Money cells always show two decimals so the column optically aligns. */
1373
- const formatMoney = (value: number | null): string | null =>
1374
- value === null || Number.isNaN(value) ? null : value.toFixed(2);
1375
-
1376
- // Same commit/revert contract as the merchant cell, on the number model —
1377
- // commit on @change, not @blur + @keydown.enter (see MerchantCell.vue).
1378
- 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);
1379
1402
  watch(
1380
1403
  () => props.receipt.amount,
1381
1404
  (value) => {
1382
- draft.value = formatMoney(value);
1405
+ draft.value = value;
1383
1406
  }
1384
1407
  );
1385
1408
 
1386
1409
  const commit = () => {
1387
- const amount =
1388
- draft.value === null || draft.value === '' ? null : Number(draft.value);
1389
- if (amount === props.receipt.amount) {
1390
- draft.value = formatMoney(props.receipt.amount);
1391
- return;
1392
- }
1393
- void ctx.updateReceipt(props.receipt, { amount });
1394
- draft.value = formatMoney(amount);
1410
+ if (draft.value === props.receipt.amount) return;
1411
+ void ctx.updateReceipt(props.receipt, { amount: draft.value });
1395
1412
  };
1396
1413
  const revert = () => {
1397
- draft.value = formatMoney(props.receipt.amount);
1414
+ draft.value = props.receipt.amount;
1398
1415
  };
1399
1416
  </script>
1400
1417
  ```
@@ -1402,7 +1419,7 @@ const revert = () => {
1402
1419
  ### DateCell.vue
1403
1420
 
1404
1421
  ```vue
1405
- <!-- UploadCenter/DateCell.vue -->
1422
+ <!-- pages/UploadCenter/DateCell.vue -->
1406
1423
  <template>
1407
1424
  <!-- Picking a date IS the commit — no blur dance for calendar input.
1408
1425
  `floating` keeps the model a plain YYYY-MM-DD string. -->
@@ -1413,6 +1430,7 @@ const revert = () => {
1413
1430
  label="Expense date"
1414
1431
  :model-value="receipt.date"
1415
1432
  placeholder="YYYY-MM-DD"
1433
+ variant="ghost"
1416
1434
  @update:model-value="commit"
1417
1435
  />
1418
1436
  </template>
@@ -1437,7 +1455,7 @@ const commit = (value: string | string[] | null) => {
1437
1455
  ### RowActions.vue
1438
1456
 
1439
1457
  ```vue
1440
- <!-- UploadCenter/RowActions.vue -->
1458
+ <!-- pages/UploadCenter/RowActions.vue -->
1441
1459
  <template>
1442
1460
  <!-- Queue rows: one explicit remove (aborts the transfer). -->
1443
1461
  <BbButton
@@ -1476,8 +1494,8 @@ const items = computed(() => {
1476
1494
  ...(isDraft
1477
1495
  ? [
1478
1496
  {
1479
- key: 'submit',
1480
- text: 'Submit for approval',
1497
+ value: 'submit',
1498
+ label: 'Submit for approval',
1481
1499
  'prepend:icon': 'lucide:send',
1482
1500
  onClick: () => ctx.submitReceipt(receipt),
1483
1501
  },
@@ -1488,8 +1506,8 @@ const items = computed(() => {
1488
1506
  // BbButton to render a plain anchor instead of letting Inertia
1489
1507
  // intercept this same-origin `href` as a visit (see BbBaseButton's
1490
1508
  // routing rules).
1491
- key: 'download',
1492
- text: 'Download original',
1509
+ value: 'download',
1510
+ label: 'Download original',
1493
1511
  'prepend:icon': 'lucide:download',
1494
1512
  href: `/receipts/${receipt.id}/file`,
1495
1513
  target: '_blank',
@@ -1497,8 +1515,8 @@ const items = computed(() => {
1497
1515
  ...(isDraft
1498
1516
  ? [
1499
1517
  {
1500
- key: 'remove',
1501
- text: 'Remove',
1518
+ value: 'remove',
1519
+ label: 'Remove',
1502
1520
  'prepend:icon': 'lucide:trash-2',
1503
1521
  variant: 'destructive' as const,
1504
1522
  onClick: () => ctx.deleteReceipt(receipt),
@@ -1513,10 +1531,10 @@ const items = computed(() => {
1513
1531
  ### SelectionBar.vue
1514
1532
 
1515
1533
  ```vue
1516
- <!-- UploadCenter/SelectionBar.vue -->
1534
+ <!-- pages/UploadCenter/SelectionBar.vue -->
1517
1535
  <template>
1518
1536
  <FloatingBottomPanel :open="selectedCount > 0">
1519
- <span class="px-2 text-sm text-[color:var(--bb-text-muted)]">
1537
+ <span class="px-2 text-sm text-(--bb-text-muted)">
1520
1538
  <span class="font-semibold tabular-nums">{{ selectedCount }}</span>
1521
1539
  selected
1522
1540
  </span>
@@ -1585,7 +1603,7 @@ const selectedCount = computed(() =>
1585
1603
  ### ReceiptPeek.vue
1586
1604
 
1587
1605
  ```vue
1588
- <!-- UploadCenter/ReceiptPeek.vue -->
1606
+ <!-- pages/UploadCenter/ReceiptPeek.vue -->
1589
1607
  <template>
1590
1608
  <div v-if="receipt" class="flex flex-col gap-4 text-sm">
1591
1609
  <!-- Header: merchant identity + amount + status. The merchant name
@@ -1600,9 +1618,7 @@ const selectedCount = computed(() =>
1600
1618
  >
1601
1619
  {{ receipt.merchant }}
1602
1620
  </BbButton>
1603
- <span v-else class="text-[color:var(--bb-text-muted)]"
1604
- >No merchant yet</span
1605
- >
1621
+ <span v-else class="text-(--bb-text-muted)">No merchant yet</span>
1606
1622
  <BbBadge :variant="STATUS_VARIANT[receipt.status]">{{
1607
1623
  STATUS_LABEL[receipt.status]
1608
1624
  }}</BbBadge>
@@ -1614,7 +1630,7 @@ const selectedCount = computed(() =>
1614
1630
  : currency.format(receipt.amount)
1615
1631
  }}
1616
1632
  </p>
1617
- <p class="text-xs text-[color:var(--bb-text-muted)]">
1633
+ <p class="text-xs text-(--bb-text-muted)">
1618
1634
  {{ receipt.filename }} · spent
1619
1635
  {{ receipt.date ? longDate(receipt.date) : '—' }}
1620
1636
  </p>
@@ -1622,7 +1638,7 @@ const selectedCount = computed(() =>
1622
1638
 
1623
1639
  <!-- Preview placeholder: the real app renders the scanned image here. -->
1624
1640
  <div
1625
- class="flex h-44 flex-col items-center justify-center gap-1 rounded-[var(--bb-radius)] border bg-[var(--bb-panel)] text-[color:var(--bb-text-muted)]"
1641
+ class="flex h-44 flex-col items-center justify-center gap-1 rounded-(--bb-radius) border bg-(--bb-panel) text-(--bb-text-muted)"
1626
1642
  >
1627
1643
  <BbIcon icon="lucide:receipt" size="lg" />
1628
1644
  <span class="text-xs">Receipt preview</span>
@@ -1632,7 +1648,7 @@ const selectedCount = computed(() =>
1632
1648
  <section class="flex flex-col gap-1.5">
1633
1649
  <div class="flex items-center justify-between">
1634
1650
  <h3
1635
- class="text-xs font-semibold uppercase tracking-wide text-[color:var(--bb-text-muted)]"
1651
+ class="text-xs font-semibold tracking-wide text-(--bb-text-muted) uppercase"
1636
1652
  >
1637
1653
  Extracted fields
1638
1654
  </h3>
@@ -1641,9 +1657,9 @@ const selectedCount = computed(() =>
1641
1657
  }}</BbBadge>
1642
1658
  </div>
1643
1659
  <dl class="grid grid-cols-[auto_1fr] gap-x-4 gap-y-1.5">
1644
- <dt class="text-[color:var(--bb-text-muted)]">Merchant</dt>
1660
+ <dt class="text-(--bb-text-muted)">Merchant</dt>
1645
1661
  <dd>{{ receipt.extracted.merchant ?? '—' }}</dd>
1646
- <dt class="text-[color:var(--bb-text-muted)]">Total</dt>
1662
+ <dt class="text-(--bb-text-muted)">Total</dt>
1647
1663
  <dd>
1648
1664
  {{
1649
1665
  receipt.extracted.total === null
@@ -1651,7 +1667,7 @@ const selectedCount = computed(() =>
1651
1667
  : currency.format(receipt.extracted.total)
1652
1668
  }}
1653
1669
  </dd>
1654
- <dt class="text-[color:var(--bb-text-muted)]">Tax</dt>
1670
+ <dt class="text-(--bb-text-muted)">Tax</dt>
1655
1671
  <dd>
1656
1672
  {{
1657
1673
  receipt.extracted.tax === null
@@ -1659,11 +1675,11 @@ const selectedCount = computed(() =>
1659
1675
  : currency.format(receipt.extracted.tax)
1660
1676
  }}
1661
1677
  </dd>
1662
- <dt class="text-[color:var(--bb-text-muted)]">Date</dt>
1678
+ <dt class="text-(--bb-text-muted)">Date</dt>
1663
1679
  <dd>
1664
1680
  {{ receipt.extracted.date ? longDate(receipt.extracted.date) : '—' }}
1665
1681
  </dd>
1666
- <dt class="text-[color:var(--bb-text-muted)]">Paid with</dt>
1682
+ <dt class="text-(--bb-text-muted)">Paid with</dt>
1667
1683
  <dd>{{ receipt.extracted.paymentMethod ?? '—' }}</dd>
1668
1684
  </dl>
1669
1685
  </section>
@@ -1672,16 +1688,16 @@ const selectedCount = computed(() =>
1672
1688
  one-click cell as in the table. -->
1673
1689
  <section class="flex flex-col gap-1.5">
1674
1690
  <h3
1675
- class="text-xs font-semibold uppercase tracking-wide text-[color:var(--bb-text-muted)]"
1691
+ class="text-xs font-semibold tracking-wide text-(--bb-text-muted) uppercase"
1676
1692
  >
1677
1693
  Details
1678
1694
  </h3>
1679
1695
  <dl class="grid grid-cols-[auto_1fr] items-center gap-x-4 gap-y-1.5">
1680
- <dt class="text-[color:var(--bb-text-muted)]">Category</dt>
1696
+ <dt class="text-(--bb-text-muted)">Category</dt>
1681
1697
  <dd><CategoryCell :receipt="receipt" /></dd>
1682
- <dt class="text-[color:var(--bb-text-muted)]">Uploaded</dt>
1698
+ <dt class="text-(--bb-text-muted)">Uploaded</dt>
1683
1699
  <dd>{{ longDate(receipt.uploadedAt) }}</dd>
1684
- <dt class="text-[color:var(--bb-text-muted)]">Report</dt>
1700
+ <dt class="text-(--bb-text-muted)">Report</dt>
1685
1701
  <dd>{{ receipt.reportName ?? 'Not on a report yet' }}</dd>
1686
1702
  </dl>
1687
1703
  </section>
@@ -1689,7 +1705,7 @@ const selectedCount = computed(() =>
1689
1705
  <!-- Activity feed. -->
1690
1706
  <section class="flex flex-col gap-1.5">
1691
1707
  <h3
1692
- class="text-xs font-semibold uppercase tracking-wide text-[color:var(--bb-text-muted)]"
1708
+ class="text-xs font-semibold tracking-wide text-(--bb-text-muted) uppercase"
1693
1709
  >
1694
1710
  Activity
1695
1711
  </h3>
@@ -1700,13 +1716,13 @@ const selectedCount = computed(() =>
1700
1716
  class="flex gap-2"
1701
1717
  >
1702
1718
  <BbIcon
1703
- class="mt-0.5 shrink-0 text-[color:var(--bb-text-muted)]"
1719
+ class="mt-0.5 shrink-0 text-(--bb-text-muted)"
1704
1720
  :icon="entry.icon"
1705
1721
  size="14"
1706
1722
  />
1707
1723
  <div class="flex flex-col">
1708
1724
  <span>{{ entry.text }}</span>
1709
- <span class="text-xs text-[color:var(--bb-text-muted)]"
1725
+ <span class="text-xs text-(--bb-text-muted)"
1710
1726
  >{{ entry.actor }} · {{ longDate(entry.at) }}</span
1711
1727
  >
1712
1728
  </div>
@@ -1757,7 +1773,7 @@ const selectedCount = computed(() =>
1757
1773
  <script setup lang="ts">
1758
1774
  import { watch } from 'vue';
1759
1775
  import { BbBadge, BbButton, BbIcon, BbSpinner } from 'bitboss-ui';
1760
- import { useResourceContext } from '@/composables/useResourceContext';
1776
+ import { useResourceContext } from '@/composables/inertia-helpers/useResourceContext';
1761
1777
  import CategoryCell from './CategoryCell.vue';
1762
1778
  import { STATUS_LABEL, STATUS_VARIANT, useUploadCenter } from './context';
1763
1779
  import type { ReceiptDetail } from '@/types';
@@ -1799,22 +1815,18 @@ const longDate = (value: string) =>
1799
1815
  ### MerchantPeek.vue
1800
1816
 
1801
1817
  ```vue
1802
- <!-- UploadCenter/MerchantPeek.vue -->
1818
+ <!-- pages/UploadCenter/MerchantPeek.vue -->
1803
1819
  <template>
1804
1820
  <div v-if="merchant" class="flex flex-col gap-4 text-sm">
1805
1821
  <header class="flex items-center gap-3">
1806
1822
  <div
1807
- class="grid h-9 w-9 shrink-0 place-items-center rounded-[var(--bb-radius)] border"
1823
+ class="grid h-9 w-9 shrink-0 place-items-center rounded-(--bb-radius) border"
1808
1824
  >
1809
- <BbIcon
1810
- class="text-[color:var(--bb-text-muted)]"
1811
- icon="lucide:store"
1812
- size="18"
1813
- />
1825
+ <BbIcon class="text-(--bb-text-muted)" icon="lucide:store" size="18" />
1814
1826
  </div>
1815
1827
  <div class="flex flex-col">
1816
1828
  <h2 class="text-base font-semibold">{{ merchant.name }}</h2>
1817
- <p class="text-xs text-[color:var(--bb-text-muted)]">
1829
+ <p class="text-xs text-(--bb-text-muted)">
1818
1830
  {{ merchant.defaultCategoryName }} · this year
1819
1831
  </p>
1820
1832
  </div>
@@ -1822,16 +1834,16 @@ const longDate = (value: string) =>
1822
1834
 
1823
1835
  <!-- Stat strip. -->
1824
1836
  <div class="grid grid-cols-3 gap-2">
1825
- <div class="rounded-[var(--bb-radius)] border p-2">
1826
- <p class="text-xs text-[color:var(--bb-text-muted)]">Total spent</p>
1837
+ <div class="rounded-(--bb-radius) border p-2">
1838
+ <p class="text-xs text-(--bb-text-muted)">Total spent</p>
1827
1839
  <p class="font-semibold">{{ currency.format(merchant.totalSpent) }}</p>
1828
1840
  </div>
1829
- <div class="rounded-[var(--bb-radius)] border p-2">
1830
- <p class="text-xs text-[color:var(--bb-text-muted)]">Receipts</p>
1841
+ <div class="rounded-(--bb-radius) border p-2">
1842
+ <p class="text-xs text-(--bb-text-muted)">Receipts</p>
1831
1843
  <p class="font-semibold">{{ merchant.receiptCount }}</p>
1832
1844
  </div>
1833
- <div class="rounded-[var(--bb-radius)] border p-2">
1834
- <p class="text-xs text-[color:var(--bb-text-muted)]">Average</p>
1845
+ <div class="rounded-(--bb-radius) border p-2">
1846
+ <p class="text-xs text-(--bb-text-muted)">Average</p>
1835
1847
  <p class="font-semibold">
1836
1848
  {{ currency.format(merchant.averageAmount) }}
1837
1849
  </p>
@@ -1841,7 +1853,7 @@ const longDate = (value: string) =>
1841
1853
  <!-- Recent receipts: names drill down again — the stack keeps growing. -->
1842
1854
  <section class="flex flex-col gap-1.5">
1843
1855
  <h3
1844
- class="text-xs font-semibold uppercase tracking-wide text-[color:var(--bb-text-muted)]"
1856
+ class="text-xs font-semibold tracking-wide text-(--bb-text-muted) uppercase"
1845
1857
  >
1846
1858
  Recent receipts
1847
1859
  </h3>
@@ -1854,14 +1866,14 @@ const longDate = (value: string) =>
1854
1866
  <BbButton
1855
1867
  size="sm"
1856
1868
  variant="link"
1857
- @click="() => ctx.stackReceipt(recent.id)"
1869
+ @click="() => ctx.stackReceipt(recent.id, recent.filename)"
1858
1870
  >
1859
1871
  {{ recent.filename }}
1860
1872
  </BbButton>
1861
1873
  <BbBadge :variant="STATUS_VARIANT[recent.status]">{{
1862
1874
  STATUS_LABEL[recent.status]
1863
1875
  }}</BbBadge>
1864
- <span class="text-xs tabular-nums text-[color:var(--bb-text-muted)]">
1876
+ <span class="text-xs text-(--bb-text-muted) tabular-nums">
1865
1877
  {{ currency.format(recent.amount) }}
1866
1878
  </span>
1867
1879
  </li>
@@ -1870,7 +1882,7 @@ const longDate = (value: string) =>
1870
1882
 
1871
1883
  <footer class="mt-2 flex items-center gap-2 border-t pt-3">
1872
1884
  <!-- An internal listing page — same-origin `href` auto-upgrades to an
1873
- Inertia visit (§3a); no `target` needed here. -->
1885
+ Inertia visit; no `target` needed here. -->
1874
1886
  <BbButton
1875
1887
  append:icon="lucide:arrow-up-right"
1876
1888
  :href="`/expenses/receipts?merchant=${encodeURIComponent(merchant.name)}`"
@@ -1889,7 +1901,7 @@ const longDate = (value: string) =>
1889
1901
 
1890
1902
  <script setup lang="ts">
1891
1903
  import { BbBadge, BbButton, BbIcon, BbSpinner } from 'bitboss-ui';
1892
- import { useResourceContext } from '@/composables/useResourceContext';
1904
+ import { useResourceContext } from '@/composables/inertia-helpers/useResourceContext';
1893
1905
  import { STATUS_LABEL, STATUS_VARIANT, useUploadCenter } from './context';
1894
1906
  import type { MerchantSummary } from '@/types';
1895
1907
 
@@ -1976,7 +1988,7 @@ function` — identical call sites to the Vue/Nuxt recipes,
1976
1988
  stack.
1977
1989
  - **Real file downloads set `target`, internal pages don't.** Inertia
1978
1990
  auto-upgrades any same-origin `href` without a `target` into a visit
1979
- (§3a) — correct for the merchant peek's "All receipts from…" link, but
1991
+ — correct for the merchant peek's "All receipts from…" link, but
1980
1992
  wrong for "Download original": a raw file response fed through the
1981
1993
  Inertia request cycle would never reach the browser as a download.
1982
1994
  Setting `target="_blank"` makes `BbBaseButton` fall back to a plain