bitboss-ui 2.1.134 → 3.0.0-alpha.1

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 (1358) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +244 -21
  3. package/bin/bitboss-ui-mcp.mjs +557 -0
  4. package/bin/bitboss-ui.mjs +626 -0
  5. package/dist/ai/BbAccordion.md +522 -113
  6. package/dist/ai/BbAlert.md +377 -197
  7. package/dist/ai/BbAsterisk.md +46 -0
  8. package/dist/ai/BbAvatar.md +454 -178
  9. package/dist/ai/BbBadge.md +695 -225
  10. package/dist/ai/BbBadgeButton.md +54 -0
  11. package/dist/ai/BbBaseButton.md +489 -0
  12. package/dist/ai/BbBaseCheckbox.md +49 -0
  13. package/dist/ai/BbBaseCheckboxGroup.md +64 -0
  14. package/dist/ai/BbBaseCheckboxIcon.md +174 -0
  15. package/dist/ai/BbBaseColorInput.md +64 -0
  16. package/dist/ai/BbBaseColorPalette.md +39 -0
  17. package/dist/ai/BbBaseDatePicker.md +42 -0
  18. package/dist/ai/BbBaseDatePickerInput.md +73 -0
  19. package/dist/ai/BbBaseInputContainer.md +48 -0
  20. package/dist/ai/BbBaseNumberInput.md +71 -0
  21. package/dist/ai/BbBaseRadio.md +46 -0
  22. package/dist/ai/BbBaseRadioGroup.md +63 -0
  23. package/dist/ai/BbBaseRadioIcon.md +187 -0
  24. package/dist/ai/BbBaseRating.md +51 -0
  25. package/dist/ai/BbBaseSelect.md +88 -0
  26. package/dist/ai/BbBaseSlider.md +56 -0
  27. package/dist/ai/BbBaseSwitch.md +49 -0
  28. package/dist/ai/BbBaseSwitchGroup.md +64 -0
  29. package/dist/ai/BbBaseSwitchIcon.md +184 -0
  30. package/dist/ai/BbBaseTag.md +68 -0
  31. package/dist/ai/BbBaseTextInput.md +75 -0
  32. package/dist/ai/BbBaseTextarea.md +62 -0
  33. package/dist/ai/BbBaseTimePickerInput.md +62 -0
  34. package/dist/ai/BbBreadcrumbs.md +542 -503
  35. package/dist/ai/BbButton.md +767 -636
  36. package/dist/ai/BbCheckbox.md +572 -254
  37. package/dist/ai/BbCheckboxGroup.md +561 -361
  38. package/dist/ai/BbCollapsible.md +419 -103
  39. package/dist/ai/BbColorInput.md +529 -323
  40. package/dist/ai/BbColorPalette.md +565 -330
  41. package/dist/ai/BbConfirm.md +612 -136
  42. package/dist/ai/BbConfirmPortal.md +28 -0
  43. package/dist/ai/BbDatePicker.md +244 -0
  44. package/dist/ai/BbDatePickerInput.md +706 -388
  45. package/dist/ai/BbDialog.md +770 -99
  46. package/dist/ai/BbDropdown.md +1054 -763
  47. package/dist/ai/BbDropdownButton.md +511 -615
  48. package/dist/ai/BbDropdownGroup.md +34 -0
  49. package/dist/ai/BbDropzone.md +1148 -436
  50. package/dist/ai/BbForm.md +239 -0
  51. package/dist/ai/BbIcon.md +379 -212
  52. package/dist/ai/BbIndicator.md +283 -0
  53. package/dist/ai/BbNumberInput.md +713 -355
  54. package/dist/ai/BbOffCanvas.md +875 -498
  55. package/dist/ai/BbPagination.md +483 -535
  56. package/dist/ai/BbPopover.md +583 -546
  57. package/dist/ai/BbProgress.md +456 -69
  58. package/dist/ai/BbRadio.md +343 -229
  59. package/dist/ai/BbRadioGroup.md +426 -353
  60. package/dist/ai/BbRating.md +361 -226
  61. package/dist/ai/BbSelect.md +1380 -536
  62. package/dist/ai/BbSelectPopover.md +1240 -1579
  63. package/dist/ai/BbSlider.md +478 -257
  64. package/dist/ai/BbSmoothHeight.md +472 -139
  65. package/dist/ai/BbSpinner.md +718 -131
  66. package/dist/ai/BbSwitch.md +549 -119
  67. package/dist/ai/BbSwitchGroup.md +503 -214
  68. package/dist/ai/BbTable.md +1956 -2358
  69. package/dist/ai/BbTabs.md +1113 -0
  70. package/dist/ai/BbTabsList.md +29 -0
  71. package/dist/ai/BbTabsPanes.md +27 -0
  72. package/dist/ai/BbTabsRoot.md +57 -0
  73. package/dist/ai/BbTag.md +393 -292
  74. package/dist/ai/BbTextInput.md +852 -333
  75. package/dist/ai/BbTextarea.md +836 -255
  76. package/dist/ai/BbTimePicker.md +231 -0
  77. package/dist/ai/BbTimePickerInput.md +196 -0
  78. package/dist/ai/BbToast.md +624 -196
  79. package/dist/ai/BbToastPortal.md +28 -0
  80. package/dist/ai/BbTooltip.md +443 -346
  81. package/dist/ai/BbTree.md +984 -235
  82. package/dist/ai/ChipsBox.md +27 -199
  83. package/dist/ai/ClearableButton.md +21 -55
  84. package/dist/ai/CommaBox.md +25 -200
  85. package/dist/ai/CommonInputWrapper.md +42 -0
  86. package/dist/ai/CommonPopover.md +30 -510
  87. package/dist/ai/ErrorIcon.md +19 -56
  88. package/dist/ai/FlatListBox.md +35 -379
  89. package/dist/ai/GroupedListBox.md +37 -535
  90. package/dist/ai/GuidesComponent.md +21 -0
  91. package/dist/ai/ListBox.md +38 -231
  92. package/dist/ai/OptionsContainer.md +34 -253
  93. package/dist/ai/WarningIcon.md +21 -0
  94. package/dist/ai/components.json +15883 -0
  95. package/dist/ai/composables/useBbConfig.md +80 -0
  96. package/dist/ai/composables/useBbFormContext.md +110 -0
  97. package/dist/ai/composables/useBbTableContext.md +164 -0
  98. package/dist/ai/composables/useBbTabsContext.md +118 -0
  99. package/dist/ai/composables/useBroadcastChannelInstance.md +97 -0
  100. package/dist/ai/composables/useConfirm.md +306 -0
  101. package/dist/ai/composables/useCountdown.md +84 -0
  102. package/dist/ai/composables/useId.md +60 -0
  103. package/dist/ai/composables/useMobile.md +85 -0
  104. package/dist/ai/composables/useToast.md +230 -0
  105. package/dist/ai/guides/agent-contract.md +108 -0
  106. package/dist/ai/guides/ai-router.md +111 -0
  107. package/dist/ai/guides/app-layout.md +295 -0
  108. package/dist/ai/guides/coherence-playbook.md +136 -0
  109. package/dist/ai/guides/component-picker.md +195 -0
  110. package/dist/ai/guides/design-language.md +461 -0
  111. package/dist/ai/guides/design-tokens.md +424 -0
  112. package/dist/ai/guides/fetch-items-playbook.md +161 -0
  113. package/dist/ai/guides/floating-bottom-panel.md +191 -0
  114. package/dist/ai/guides/icons-policy.md +257 -0
  115. package/dist/ai/guides/inertia-helpers.md +1394 -0
  116. package/dist/ai/guides/inline-edit-playbook.md +258 -0
  117. package/dist/ai/guides/installation-and-plugin-setup.md +377 -0
  118. package/dist/ai/guides/migration/components/bb-alert.md +37 -0
  119. package/dist/ai/guides/migration/components/bb-avatar.md +24 -0
  120. package/dist/ai/guides/migration/components/bb-badge.md +110 -0
  121. package/dist/ai/guides/migration/components/bb-breadcrumbs.md +26 -0
  122. package/dist/ai/guides/migration/components/bb-button.md +55 -0
  123. package/dist/ai/guides/migration/components/bb-checkbox-group.md +54 -0
  124. package/dist/ai/guides/migration/components/bb-checkbox.md +45 -0
  125. package/dist/ai/guides/migration/components/bb-chip.md +35 -0
  126. package/dist/ai/guides/migration/components/bb-collapsible.md +26 -0
  127. package/dist/ai/guides/migration/components/bb-color-input.md +23 -0
  128. package/dist/ai/guides/migration/components/bb-color-palette.md +31 -0
  129. package/dist/ai/guides/migration/components/bb-date-picker-input.md +84 -0
  130. package/dist/ai/guides/migration/components/bb-dialog.md +46 -0
  131. package/dist/ai/guides/migration/components/bb-dropdown-button.md +31 -0
  132. package/dist/ai/guides/migration/components/bb-dropdown.md +36 -0
  133. package/dist/ai/guides/migration/components/bb-dropzone.md +27 -0
  134. package/dist/ai/guides/migration/components/bb-icon.md +27 -0
  135. package/dist/ai/guides/migration/components/bb-off-canvas.md +25 -0
  136. package/dist/ai/guides/migration/components/bb-offcanvas.md +54 -0
  137. package/dist/ai/guides/migration/components/bb-pagination.md +24 -0
  138. package/dist/ai/guides/migration/components/bb-popover.md +52 -0
  139. package/dist/ai/guides/migration/components/bb-rating.md +24 -0
  140. package/dist/ai/guides/migration/components/bb-select-popover.md +58 -0
  141. package/dist/ai/guides/migration/components/bb-select.md +68 -0
  142. package/dist/ai/guides/migration/components/bb-slider.md +25 -0
  143. package/dist/ai/guides/migration/components/bb-smooth-height.md +45 -0
  144. package/dist/ai/guides/migration/components/bb-spinner.md +23 -0
  145. package/dist/ai/guides/migration/components/bb-table.md +66 -0
  146. package/dist/ai/guides/migration/components/bb-tabs.md +47 -0
  147. package/dist/ai/guides/migration/components/bb-tag.md +29 -0
  148. package/dist/ai/guides/migration/components/bb-text-input.md +37 -0
  149. package/dist/ai/guides/migration/components/bb-toast.md +47 -0
  150. package/dist/ai/guides/migration/components/bb-tooltip.md +34 -0
  151. package/dist/ai/guides/migration/components/bb-tree.md +77 -0
  152. package/dist/ai/guides/migration/components/use-confirm.md +46 -0
  153. package/dist/ai/guides/migration/v2-to-v3.md +649 -0
  154. package/dist/ai/guides/options-items-playbook.md +222 -0
  155. package/dist/ai/guides/page-shell.md +314 -0
  156. package/dist/ai/guides/validated-forms.md +177 -0
  157. package/dist/ai/index.md +156 -32
  158. package/dist/ai/recipes/inertia/approvals-inbox.md +1598 -0
  159. package/dist/ai/recipes/inertia/inline-edit-workspace.md +1733 -0
  160. package/dist/ai/recipes/inertia/onboarding.md +1765 -0
  161. package/dist/ai/recipes/inertia/ownership-atlas.md +1281 -0
  162. package/dist/ai/recipes/inertia/record-form.md +1442 -0
  163. package/dist/ai/recipes/inertia/records-workspace.md +1328 -0
  164. package/dist/ai/recipes/inertia/upload-center.md +1926 -0
  165. package/dist/ai/recipes/inertia/wizard-form.md +1477 -0
  166. package/dist/ai/recipes/nuxt/approvals-inbox.md +1561 -0
  167. package/dist/ai/recipes/nuxt/inline-edit-workspace.md +1690 -0
  168. package/dist/ai/recipes/nuxt/onboarding.md +1698 -0
  169. package/dist/ai/recipes/nuxt/record-form.md +1456 -0
  170. package/dist/ai/recipes/nuxt/records-workspace.md +1314 -0
  171. package/dist/ai/recipes/nuxt/upload-center.md +1847 -0
  172. package/dist/ai/recipes/nuxt/wizard-form.md +1486 -0
  173. package/dist/ai/recipes/vue/approvals-inbox.md +1479 -0
  174. package/dist/ai/recipes/vue/inline-edit-workspace.md +1581 -0
  175. package/dist/ai/recipes/vue/onboarding.md +1653 -0
  176. package/dist/ai/recipes/vue/record-form.md +1540 -0
  177. package/dist/ai/recipes/vue/records-workspace.md +1230 -0
  178. package/dist/ai/recipes/vue/upload-center.md +1806 -0
  179. package/dist/ai/recipes/vue/wizard-form.md +1418 -0
  180. package/dist/ai/source/BbAccordion.md +122 -0
  181. package/dist/ai/source/BbAlert.md +396 -0
  182. package/dist/ai/source/BbAsterisk.md +32 -0
  183. package/dist/ai/source/BbAvatar.md +256 -0
  184. package/dist/ai/source/BbBadge.md +560 -0
  185. package/dist/ai/source/BbBadgeButton.md +490 -0
  186. package/dist/ai/source/BbBaseButton.md +682 -0
  187. package/dist/ai/source/BbBaseCheckbox.md +459 -0
  188. package/dist/ai/source/BbBaseCheckboxGroup.md +554 -0
  189. package/dist/ai/source/BbBaseCheckboxIcon.md +201 -0
  190. package/dist/ai/source/BbBaseColorInput.md +413 -0
  191. package/dist/ai/source/BbBaseColorPalette.md +934 -0
  192. package/dist/ai/source/BbBaseDatePicker.md +1001 -0
  193. package/dist/ai/source/BbBaseDatePickerInput.md +1781 -0
  194. package/dist/ai/source/BbBaseInputContainer.md +1148 -0
  195. package/dist/ai/source/BbBaseNumberInput.md +615 -0
  196. package/dist/ai/source/BbBaseRadio.md +377 -0
  197. package/dist/ai/source/BbBaseRadioGroup.md +499 -0
  198. package/dist/ai/source/BbBaseRadioIcon.md +153 -0
  199. package/dist/ai/source/BbBaseRating.md +573 -0
  200. package/dist/ai/source/BbBaseSelect.md +895 -0
  201. package/dist/ai/source/BbBaseSlider.md +1085 -0
  202. package/dist/ai/source/BbBaseSwitch.md +246 -0
  203. package/dist/ai/source/BbBaseSwitchGroup.md +302 -0
  204. package/dist/ai/source/BbBaseSwitchIcon.md +206 -0
  205. package/dist/ai/source/BbBaseTag.md +688 -0
  206. package/dist/ai/source/BbBaseTextInput.md +511 -0
  207. package/dist/ai/source/BbBaseTextarea.md +480 -0
  208. package/dist/ai/source/BbBaseTimePickerInput.md +1013 -0
  209. package/dist/ai/source/BbBreadcrumbs.md +811 -0
  210. package/dist/ai/source/BbButton.md +990 -0
  211. package/dist/ai/source/BbCheckbox.md +319 -0
  212. package/dist/ai/source/BbCheckboxGroup.md +412 -0
  213. package/dist/ai/source/BbCollapsible.md +133 -0
  214. package/dist/ai/source/BbColorInput.md +315 -0
  215. package/dist/ai/source/BbColorPalette.md +361 -0
  216. package/dist/ai/source/BbConfirm.md +173 -0
  217. package/dist/ai/source/BbConfirmPortal.md +74 -0
  218. package/dist/ai/source/BbDatePicker.md +725 -0
  219. package/dist/ai/source/BbDatePickerInput.md +518 -0
  220. package/dist/ai/source/BbDialog.md +812 -0
  221. package/dist/ai/source/BbDropdown.md +2369 -0
  222. package/dist/ai/source/BbDropdownButton.md +313 -0
  223. package/dist/ai/source/BbDropdownGroup.md +1249 -0
  224. package/dist/ai/source/BbDropzone.md +749 -0
  225. package/dist/ai/source/BbForm.md +100 -0
  226. package/dist/ai/source/BbIcon.md +212 -0
  227. package/dist/ai/source/BbIndicator.md +298 -0
  228. package/dist/ai/source/BbNumberInput.md +365 -0
  229. package/dist/ai/source/BbOffCanvas.md +1260 -0
  230. package/dist/ai/source/BbPagination.md +829 -0
  231. package/dist/ai/source/BbPopover.md +853 -0
  232. package/dist/ai/source/BbProgress.md +140 -0
  233. package/dist/ai/source/BbRadio.md +294 -0
  234. package/dist/ai/source/BbRadioGroup.md +401 -0
  235. package/dist/ai/source/BbRating.md +362 -0
  236. package/dist/ai/source/BbSelect.md +681 -0
  237. package/dist/ai/source/BbSelectPopover.md +2209 -0
  238. package/dist/ai/source/BbSlider.md +371 -0
  239. package/dist/ai/source/BbSmoothHeight.md +261 -0
  240. package/dist/ai/source/BbSpinner.md +127 -0
  241. package/dist/ai/source/BbSwitch.md +175 -0
  242. package/dist/ai/source/BbSwitchGroup.md +240 -0
  243. package/dist/ai/source/BbTable.md +3348 -0
  244. package/dist/ai/source/BbTabs.md +403 -0
  245. package/dist/ai/source/BbTabsList.md +578 -0
  246. package/dist/ai/source/BbTabsPanes.md +368 -0
  247. package/dist/ai/source/BbTabsRoot.md +372 -0
  248. package/dist/ai/source/BbTag.md +383 -0
  249. package/dist/ai/source/BbTextInput.md +345 -0
  250. package/dist/ai/source/BbTextarea.md +330 -0
  251. package/dist/ai/source/BbTimePicker.md +591 -0
  252. package/dist/ai/source/BbTimePickerInput.md +367 -0
  253. package/dist/ai/source/BbToast.md +524 -0
  254. package/dist/ai/source/BbToastPortal.md +482 -0
  255. package/dist/ai/source/BbTooltip.md +508 -0
  256. package/dist/ai/source/BbTree.md +319 -0
  257. package/dist/ai/source/ChipsBox.md +201 -0
  258. package/dist/ai/source/ClearableButton.md +70 -0
  259. package/dist/ai/source/CommaBox.md +202 -0
  260. package/dist/ai/source/CommonInputWrapper.md +554 -0
  261. package/dist/ai/source/CommonPopover.md +606 -0
  262. package/dist/ai/source/ErrorIcon.md +43 -0
  263. package/dist/ai/source/FlatListBox.md +396 -0
  264. package/dist/ai/source/GroupedListBox.md +540 -0
  265. package/dist/ai/source/GuidesComponent.md +383 -0
  266. package/dist/ai/source/ListBox.md +238 -0
  267. package/dist/ai/source/OptionsContainer.md +191 -0
  268. package/dist/ai/source/WarningIcon.md +47 -0
  269. package/dist/alert-variants.d.ts +12 -0
  270. package/dist/assets/css/reset.css_inline.js +4 -0
  271. package/dist/assets/svgs/alert.svg_raw.js +4 -0
  272. package/dist/assets/svgs/calendar.svg_raw.js +4 -0
  273. package/dist/assets/svgs/check_stroke.svg_raw.js +4 -0
  274. package/dist/assets/svgs/chevron_down.svg_raw.js +4 -0
  275. package/dist/assets/svgs/chevron_right.svg_raw.js +4 -0
  276. package/dist/assets/svgs/clear.svg_raw.js +4 -0
  277. package/dist/assets/svgs/clock.svg_raw.js +4 -0
  278. package/dist/assets/svgs/error.svg_raw.js +4 -0
  279. package/dist/assets/svgs/search.svg_raw.js +4 -0
  280. package/dist/assets/svgs/sort.svg_raw.js +4 -0
  281. package/dist/assets/svgs/spinner.svg_raw.js +4 -0
  282. package/dist/assets/svgs/user.svg_raw.js +4 -0
  283. package/dist/badge-variants.d.ts +18 -0
  284. package/dist/button-variants.d.ts +15 -0
  285. package/dist/components/BbAccordion/BbAccordion.vue.d.ts +9 -3
  286. package/dist/components/BbAccordion/BbAccordion.vue.js +6 -0
  287. package/dist/components/BbAccordion/BbAccordion.vue_vue_type_script_setup_true_lang.js +66 -0
  288. package/dist/components/BbAccordion/types.d.ts +10 -7
  289. package/dist/components/BbAlert/BbAlert.vue.d.ts +12 -3
  290. package/dist/components/BbAlert/BbAlert.vue.js +6 -0
  291. package/dist/components/BbAlert/BbAlert.vue_vue_type_script_setup_true_lang.js +65 -0
  292. package/dist/components/BbAlert/types.d.ts +51 -12
  293. package/dist/components/BbAsterisk/BbAsterisk.vue.d.ts +3 -0
  294. package/dist/components/BbAsterisk/BbAsterisk.vue.js +6 -0
  295. package/dist/components/BbAsterisk/BbAsterisk.vue_vue_type_script_setup_true_lang.js +13 -0
  296. package/dist/components/BbAvatar/BbAvatar.vue.d.ts +5 -0
  297. package/dist/components/BbAvatar/BbAvatar.vue.js +6 -0
  298. package/dist/components/BbAvatar/BbAvatar.vue_vue_type_script_setup_true_lang.js +78 -0
  299. package/dist/components/BbAvatar/types.d.ts +4 -5
  300. package/dist/components/BbBadge/BadgeAppendIcon.vue.d.ts +3 -0
  301. package/dist/components/BbBadge/BadgeAppendIcon.vue.js +5 -0
  302. package/dist/components/BbBadge/BadgeAppendIcon.vue_vue_type_script_setup_true_lang.js +22 -0
  303. package/dist/components/BbBadge/BadgeBodyContent.vue.d.ts +15 -0
  304. package/dist/components/BbBadge/BadgeBodyContent.vue.js +5 -0
  305. package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +34 -0
  306. package/dist/components/BbBadge/BbBadge.vue.d.ts +8 -1
  307. package/dist/components/BbBadge/BbBadge.vue.js +6 -0
  308. package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +83 -0
  309. package/dist/components/BbBadge/BbBadgeButton.vue.d.ts +12 -0
  310. package/dist/components/BbBadge/BbBadgeButton.vue.js +5 -0
  311. package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +54 -0
  312. package/dist/components/BbBadge/badgeButtonContext.d.ts +27 -0
  313. package/dist/components/BbBadge/badgeButtonContext.js +5 -0
  314. package/dist/components/BbBadge/types.d.ts +61 -16
  315. package/dist/components/BbBaseButton/BbBaseButton.vue.d.ts +13 -0
  316. package/dist/components/BbBaseButton/BbBaseButton.vue.js +6 -0
  317. package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +171 -0
  318. package/dist/components/BbBaseButton/RouterComponent.vue.js +5 -0
  319. package/dist/components/BbBaseButton/RouterComponent.vue_vue_type_script_setup_true_lang.js +28 -0
  320. package/dist/components/BbBaseButton/types.d.ts +191 -0
  321. package/dist/components/BbBaseButton/types.js +33 -0
  322. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.d.ts +40 -0
  323. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.js +6 -0
  324. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue_vue_type_script_setup_true_lang.js +145 -0
  325. package/dist/components/BbBaseCheckbox/types.d.ts +222 -0
  326. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.d.ts +19 -0
  327. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.js +6 -0
  328. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue_vue_type_script_setup_true_lang.js +190 -0
  329. package/dist/components/BbBaseCheckboxGroup/types.d.ts +257 -0
  330. package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue.d.ts +4 -0
  331. package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue.js +6 -0
  332. package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue_vue_type_script_setup_true_lang.js +43 -0
  333. package/dist/components/BbBaseCheckboxIcon/types.d.ts +47 -0
  334. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.d.ts +42 -0
  335. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.js +6 -0
  336. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue_vue_type_script_setup_true_lang.js +178 -0
  337. package/dist/components/BbBaseColorInput/types.d.ts +207 -0
  338. package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue.d.ts +13 -0
  339. package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue.js +6 -0
  340. package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue_vue_type_script_setup_true_lang.js +395 -0
  341. package/dist/components/BbBaseColorPalette/types.d.ts +40 -0
  342. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.js +6 -0
  343. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue_vue_type_script_setup_true_lang.js +300 -0
  344. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.d.ts +44 -0
  345. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.js +5 -0
  346. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue_vue_type_script_setup_true_lang.js +310 -0
  347. package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.d.ts +5 -0
  348. package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.js +5 -0
  349. package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue_vue_type_script_setup_true_lang.js +63 -0
  350. package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.d.ts +5 -0
  351. package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.js +5 -0
  352. package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue_vue_type_script_setup_true_lang.js +75 -0
  353. package/dist/components/BbBaseDatePicker/typeahead.d.ts +112 -0
  354. package/dist/components/BbBaseDatePicker/typeahead.js +37 -0
  355. package/dist/components/BbBaseDatePicker/types.d.ts +97 -0
  356. package/dist/components/BbBaseDatePicker/useDatePickerContext.d.ts +58 -0
  357. package/dist/components/BbBaseDatePicker/useDatePickerContext.js +11 -0
  358. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.d.ts +30 -0
  359. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.js +6 -0
  360. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue_vue_type_script_setup_true_lang.js +713 -0
  361. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.d.ts +30 -0
  362. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.js +6 -0
  363. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue_vue_type_script_setup_true_lang.js +204 -0
  364. package/dist/components/BbBaseDatePickerInput/types.d.ts +309 -0
  365. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.d.ts +17 -0
  366. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.js +6 -0
  367. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue_vue_type_script_setup_true_lang.js +184 -0
  368. package/dist/components/BbBaseInputContainer/types.d.ts +185 -0
  369. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.d.ts +52 -0
  370. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.js +6 -0
  371. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue_vue_type_script_setup_true_lang.js +211 -0
  372. package/dist/components/BbBaseNumberInput/types.d.ts +211 -0
  373. package/dist/components/BbBaseRadio/BbBaseRadio.vue.d.ts +33 -0
  374. package/dist/components/BbBaseRadio/BbBaseRadio.vue.js +6 -0
  375. package/dist/components/BbBaseRadio/BbBaseRadio.vue_vue_type_script_setup_true_lang.js +114 -0
  376. package/dist/components/BbBaseRadio/types.d.ts +179 -0
  377. package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue.d.ts +19 -0
  378. package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue.js +6 -0
  379. package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue_vue_type_script_setup_true_lang.js +172 -0
  380. package/dist/components/BbBaseRadioGroup/types.d.ts +215 -0
  381. package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue.d.ts +4 -0
  382. package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue.js +6 -0
  383. package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue_vue_type_script_setup_true_lang.js +28 -0
  384. package/dist/components/BbBaseRadioIcon/types.d.ts +41 -0
  385. package/dist/components/BbBaseRating/BbBaseRating.vue.d.ts +38 -0
  386. package/dist/components/BbBaseRating/BbBaseRating.vue.js +6 -0
  387. package/dist/components/BbBaseRating/BbBaseRating.vue_vue_type_script_setup_true_lang.js +184 -0
  388. package/dist/components/BbBaseRating/types.d.ts +168 -0
  389. package/dist/components/BbBaseSelect/BbBaseSelect.vue.d.ts +19 -0
  390. package/dist/components/BbBaseSelect/BbBaseSelect.vue.js +6 -0
  391. package/dist/components/BbBaseSelect/BbBaseSelect.vue_vue_type_script_setup_true_lang.js +307 -0
  392. package/dist/components/BbBaseSelect/types.d.ts +294 -0
  393. package/dist/components/BbBaseSlider/BbBaseSlider.vue.d.ts +35 -0
  394. package/dist/components/BbBaseSlider/BbBaseSlider.vue.js +6 -0
  395. package/dist/components/BbBaseSlider/BbBaseSlider.vue_vue_type_script_setup_true_lang.js +324 -0
  396. package/dist/components/BbBaseSlider/types.d.ts +200 -0
  397. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue.d.ts +35 -0
  398. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue.js +6 -0
  399. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue_vue_type_script_setup_true_lang.js +146 -0
  400. package/dist/components/BbBaseSwitch/types.d.ts +10 -0
  401. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.d.ts +19 -0
  402. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.js +6 -0
  403. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue_vue_type_script_setup_true_lang.js +190 -0
  404. package/dist/components/BbBaseSwitchGroup/types.d.ts +8 -0
  405. package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue.d.ts +4 -0
  406. package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue.js +6 -0
  407. package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue_vue_type_script_setup_true_lang.js +30 -0
  408. package/dist/components/BbBaseSwitchIcon/types.d.ts +48 -0
  409. package/dist/components/BbBaseTag/BbBaseTag.vue.d.ts +50 -0
  410. package/dist/components/BbBaseTag/BbBaseTag.vue.js +6 -0
  411. package/dist/components/BbBaseTag/BbBaseTag.vue_vue_type_script_setup_true_lang.js +266 -0
  412. package/dist/components/BbBaseTag/types.d.ts +160 -0
  413. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.d.ts +45 -0
  414. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.js +6 -0
  415. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue_vue_type_script_setup_true_lang.js +200 -0
  416. package/dist/components/BbBaseTextInput/types.d.ts +209 -0
  417. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.d.ts +39 -0
  418. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.js +6 -0
  419. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue_vue_type_script_setup_true_lang.js +175 -0
  420. package/dist/components/BbBaseTextarea/types.d.ts +170 -0
  421. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.d.ts +27 -0
  422. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.js +6 -0
  423. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue_vue_type_script_setup_true_lang.js +517 -0
  424. package/dist/components/BbBaseTimePickerInput/types.d.ts +151 -0
  425. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue.d.ts +0 -1
  426. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue.js +6 -0
  427. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +224 -0
  428. package/dist/components/BbBreadcrumbs/estimateBreadcrumbItemWidth.js +47 -0
  429. package/dist/components/BbBreadcrumbs/types.d.ts +33 -22
  430. package/dist/components/BbButton/BbButton.vue.d.ts +6 -5
  431. package/dist/components/BbButton/BbButton.vue.js +6 -0
  432. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +177 -0
  433. package/dist/components/BbButton/types.d.ts +48 -47
  434. package/dist/components/BbCheckbox/BbCheckbox.vue.d.ts +4 -3
  435. package/dist/components/BbCheckbox/BbCheckbox.vue.js +6 -0
  436. package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +146 -0
  437. package/dist/components/BbCheckbox/types.d.ts +24 -10
  438. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue.d.ts +2 -13
  439. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue.js +6 -0
  440. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +190 -0
  441. package/dist/components/BbCheckboxGroup/types.d.ts +44 -23
  442. package/dist/components/BbCollapsible/BbCollapsible.vue.d.ts +2 -1
  443. package/dist/components/BbCollapsible/BbCollapsible.vue.js +6 -0
  444. package/dist/components/BbCollapsible/BbCollapsible.vue_vue_type_script_setup_true_lang.js +31 -0
  445. package/dist/components/BbCollapsible/types.d.ts +10 -9
  446. package/dist/components/BbColorInput/BbColorInput.vue.d.ts +10 -1
  447. package/dist/components/BbColorInput/BbColorInput.vue.js +6 -0
  448. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +177 -0
  449. package/dist/components/BbColorInput/types.d.ts +37 -11
  450. package/dist/components/BbColorPalette/BbColorPalette.vue.d.ts +5 -8
  451. package/dist/components/BbColorPalette/BbColorPalette.vue.js +5 -0
  452. package/dist/components/BbColorPalette/BbColorPalette.vue_vue_type_script_setup_true_lang.js +125 -0
  453. package/dist/components/BbColorPalette/types.d.ts +66 -53
  454. package/dist/components/BbConfirm/BbConfirm.vue.js +6 -0
  455. package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +130 -0
  456. package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +5 -6
  457. package/dist/components/BbConfirm/BbConfirmPortal.vue.js +5 -0
  458. package/dist/components/BbConfirm/BbConfirmPortal.vue_vue_type_script_setup_true_lang.js +19 -0
  459. package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +37 -0
  460. package/dist/components/BbDatePicker/BbDatePicker.vue.js +6 -0
  461. package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +319 -0
  462. package/dist/components/BbDatePicker/types.d.ts +155 -0
  463. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +3 -1
  464. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.js +6 -0
  465. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +179 -0
  466. package/dist/components/BbDatePickerInput/types.d.ts +127 -16
  467. package/dist/components/BbDialog/BbDialog.vue.d.ts +8 -6
  468. package/dist/components/BbDialog/BbDialog.vue.js +6 -0
  469. package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +214 -0
  470. package/dist/components/BbDialog/types.d.ts +146 -1
  471. package/dist/components/BbDialog/useDialogStack.d.ts +5 -0
  472. package/dist/components/BbDialog/useDialogStack.js +20 -0
  473. package/dist/components/BbDropdown/AdaptiveDropdown.vue.d.ts +18 -0
  474. package/dist/components/BbDropdown/AdaptiveDropdown.vue.js +6 -0
  475. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +116 -0
  476. package/dist/components/BbDropdown/BbDropdown.vue.d.ts +14 -7
  477. package/dist/components/BbDropdown/BbDropdown.vue.js +6 -0
  478. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +560 -0
  479. package/dist/components/BbDropdown/BbDropdownGroup.vue.d.ts +44 -0
  480. package/dist/components/BbDropdown/BbDropdownGroup.vue.js +5 -0
  481. package/dist/components/BbDropdown/BbDropdownGroup.vue_vue_type_script_setup_true_lang.js +36 -0
  482. package/dist/components/BbDropdown/BbDropdownList.vue.d.ts +27 -0
  483. package/dist/components/BbDropdown/BbDropdownList.vue.js +6 -0
  484. package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +464 -0
  485. package/dist/components/BbDropdown/DropdownPipelineResolver.vue.d.ts +16 -0
  486. package/dist/components/BbDropdown/DropdownPipelineResolver.vue.js +5 -0
  487. package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +168 -0
  488. package/dist/components/BbDropdown/normalizeGroups.d.ts +18 -0
  489. package/dist/components/BbDropdown/normalizeGroups.js +46 -0
  490. package/dist/components/BbDropdown/types.d.ts +457 -45
  491. package/dist/components/BbDropdown/types.js +4 -0
  492. package/dist/components/BbDropdown/useDropdownContext.d.ts +89 -0
  493. package/dist/components/BbDropdown/useDropdownContext.js +9 -0
  494. package/dist/components/BbDropdown/useDropdownGroupRegistry.d.ts +108 -0
  495. package/dist/components/BbDropdown/useDropdownGroupRegistry.js +5 -0
  496. package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +3 -3
  497. package/dist/components/BbDropdownButton/BbDropdownButton.vue.js +6 -0
  498. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +119 -0
  499. package/dist/components/BbDropdownButton/types.d.ts +45 -52
  500. package/dist/components/BbDropzone/BbDropzone.vue.d.ts +5 -4
  501. package/dist/components/BbDropzone/BbDropzone.vue.js +6 -0
  502. package/dist/components/BbDropzone/BbDropzone.vue_vue_type_script_setup_true_lang.js +284 -0
  503. package/dist/components/BbDropzone/types.d.ts +55 -7
  504. package/dist/components/BbIcon/BbIcon.vue.d.ts +3 -2
  505. package/dist/components/BbIcon/BbIcon.vue.js +6 -0
  506. package/dist/components/BbIcon/BbIcon.vue_vue_type_script_setup_true_lang.js +65 -0
  507. package/dist/components/BbIcon/types.d.ts +6 -19
  508. package/dist/components/BbIndicator/BbIndicator.vue.d.ts +14 -0
  509. package/dist/components/BbIndicator/BbIndicator.vue.js +6 -0
  510. package/dist/components/BbIndicator/BbIndicator.vue_vue_type_script_setup_true_lang.js +56 -0
  511. package/dist/components/BbIndicator/types.d.ts +49 -0
  512. package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +12 -6
  513. package/dist/components/BbNumberInput/BbNumberInput.vue.js +6 -0
  514. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +194 -0
  515. package/dist/components/BbNumberInput/types.d.ts +31 -4
  516. package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +10 -10
  517. package/dist/components/BbOffCanvas/BbOffCanvas.vue.js +6 -0
  518. package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +284 -0
  519. package/dist/components/BbOffCanvas/types.d.ts +71 -39
  520. package/dist/components/BbOffCanvas/useOffCanvasStack.d.ts +25 -0
  521. package/dist/components/BbOffCanvas/useOffCanvasStack.js +68 -0
  522. package/dist/components/BbPagination/BbPagination.vue.d.ts +3 -4
  523. package/dist/components/BbPagination/BbPagination.vue.js +6 -0
  524. package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +244 -0
  525. package/dist/components/BbPagination/paginationFit.d.ts +38 -0
  526. package/dist/components/BbPagination/paginationFit.js +13 -0
  527. package/dist/components/BbPagination/types.d.ts +51 -16
  528. package/dist/components/BbPopover/BbPopover.vue.d.ts +10 -15
  529. package/dist/components/BbPopover/BbPopover.vue.js +6 -0
  530. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +310 -0
  531. package/dist/components/BbPopover/escapeStack.d.ts +6 -0
  532. package/dist/components/BbPopover/escapeStack.js +10 -0
  533. package/dist/components/BbPopover/types.d.ts +84 -31
  534. package/dist/components/BbProgress/BbProgress.vue.d.ts +1 -0
  535. package/dist/components/BbProgress/BbProgress.vue.js +6 -0
  536. package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +36 -0
  537. package/dist/components/BbProgress/types.d.ts +15 -1
  538. package/dist/components/BbRadio/BbRadio.vue.d.ts +5 -3
  539. package/dist/components/BbRadio/BbRadio.vue.js +6 -0
  540. package/dist/components/BbRadio/BbRadio.vue_vue_type_script_setup_true_lang.js +133 -0
  541. package/dist/components/BbRadio/types.d.ts +23 -9
  542. package/dist/components/BbRadioGroup/BbRadioGroup.vue.d.ts +4 -14
  543. package/dist/components/BbRadioGroup/BbRadioGroup.vue.js +6 -0
  544. package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +184 -0
  545. package/dist/components/BbRadioGroup/types.d.ts +41 -22
  546. package/dist/components/BbRating/BbRating.vue.d.ts +4 -1
  547. package/dist/components/BbRating/BbRating.vue.js +6 -0
  548. package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +150 -0
  549. package/dist/components/BbRating/types.d.ts +37 -10
  550. package/dist/components/BbSelect/BbSelect.vue.d.ts +2 -11
  551. package/dist/components/BbSelect/BbSelect.vue.js +6 -0
  552. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +241 -0
  553. package/dist/components/BbSelect/types.d.ts +105 -59
  554. package/dist/components/BbSelectPopover/BbSelectPopover.vue.d.ts +1 -10
  555. package/dist/components/BbSelectPopover/BbSelectPopover.vue.js +6 -0
  556. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +637 -0
  557. package/dist/components/BbSelectPopover/types.d.ts +189 -102
  558. package/dist/components/BbSlider/BbSlider.vue.d.ts +3 -6
  559. package/dist/components/BbSlider/BbSlider.vue.js +6 -0
  560. package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +166 -0
  561. package/dist/components/BbSlider/types.d.ts +37 -13
  562. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.d.ts +3 -1
  563. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.js +6 -0
  564. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue_vue_type_script_setup_true_lang.js +79 -0
  565. package/dist/components/BbSmoothHeight/types.d.ts +13 -2
  566. package/dist/components/BbSpinner/BbSpinner.vue.d.ts +1 -1
  567. package/dist/components/BbSpinner/BbSpinner.vue.js +6 -0
  568. package/dist/components/BbSpinner/BbSpinner.vue_vue_type_script_setup_true_lang.js +30 -0
  569. package/dist/components/BbSpinner/types.d.ts +10 -3
  570. package/dist/components/BbSwitch/BbSwitch.vue.d.ts +5 -3
  571. package/dist/components/BbSwitch/BbSwitch.vue.js +6 -0
  572. package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +142 -0
  573. package/dist/components/BbSwitch/types.d.ts +3 -1
  574. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue.d.ts +4 -14
  575. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue.js +6 -0
  576. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +190 -0
  577. package/dist/components/BbSwitchGroup/types.d.ts +3 -22
  578. package/dist/components/BbTable/BbTable.vue.d.ts +53 -31
  579. package/dist/components/BbTable/BbTable.vue.js +6 -0
  580. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +889 -0
  581. package/dist/components/BbTable/types.d.ts +176 -37
  582. package/dist/components/BbTable/utils.d.ts +9 -1
  583. package/dist/components/BbTable/utils.js +53 -0
  584. package/dist/components/BbTabs/BbTabs.vue.d.ts +20 -0
  585. package/dist/components/BbTabs/BbTabs.vue.js +6 -0
  586. package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +64 -0
  587. package/dist/components/BbTabs/BbTabsList.vue.d.ts +19 -0
  588. package/dist/components/BbTabs/BbTabsList.vue.js +6 -0
  589. package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +123 -0
  590. package/dist/components/BbTabs/BbTabsPanes.vue.d.ts +16 -0
  591. package/dist/components/BbTabs/BbTabsPanes.vue.js +6 -0
  592. package/dist/components/BbTabs/BbTabsPanes.vue_vue_type_script_setup_true_lang.js +35 -0
  593. package/dist/components/BbTabs/BbTabsRoot.vue.d.ts +20 -0
  594. package/dist/components/BbTabs/BbTabsRoot.vue.js +5 -0
  595. package/dist/components/BbTabs/BbTabsRoot.vue_vue_type_script_setup_true_lang.js +55 -0
  596. package/dist/components/BbTabs/types.d.ts +264 -0
  597. package/dist/components/BbTag/BbTag.vue.d.ts +19 -6
  598. package/dist/components/BbTag/BbTag.vue.js +6 -0
  599. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +187 -0
  600. package/dist/components/BbTag/types.d.ts +48 -17
  601. package/dist/components/BbTextInput/BbTextInput.vue.d.ts +10 -1
  602. package/dist/components/BbTextInput/BbTextInput.vue.js +6 -0
  603. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +195 -0
  604. package/dist/components/BbTextInput/types.d.ts +24 -4
  605. package/dist/components/BbTextarea/BbTextarea.vue.d.ts +10 -1
  606. package/dist/components/BbTextarea/BbTextarea.vue.js +6 -0
  607. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +178 -0
  608. package/dist/components/BbTextarea/types.d.ts +26 -2
  609. package/dist/components/BbTimePicker/BbTimePicker.vue.d.ts +33 -0
  610. package/dist/components/BbTimePicker/BbTimePicker.vue.js +6 -0
  611. package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +244 -0
  612. package/dist/components/BbTimePicker/types.d.ts +129 -0
  613. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue.d.ts +25 -0
  614. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue.js +6 -0
  615. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +157 -0
  616. package/dist/components/BbTimePickerInput/types.d.ts +165 -0
  617. package/dist/components/BbToast/BbToast.vue.d.ts +2 -3
  618. package/dist/components/BbToast/BbToast.vue.js +6 -0
  619. package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +35 -0
  620. package/dist/components/BbToast/BbToastMessage.vue.d.ts +17 -8
  621. package/dist/components/BbToast/BbToastMessage.vue.js +5 -0
  622. package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +170 -0
  623. package/dist/components/BbToast/BbToastPortal.vue.d.ts +30 -0
  624. package/dist/components/BbToast/BbToastPortal.vue.js +5 -0
  625. package/dist/components/BbToast/BbToastPortal.vue_vue_type_script_setup_true_lang.js +19 -0
  626. package/dist/components/BbToast/BbToastRegion.vue.d.ts +8 -0
  627. package/dist/components/BbToast/BbToastRegion.vue.js +5 -0
  628. package/dist/components/BbToast/BbToastRegion.vue_vue_type_script_setup_true_lang.js +100 -0
  629. package/dist/components/BbToast/types.d.ts +69 -5
  630. package/dist/components/BbTooltip/BbTooltip.vue.d.ts +4 -3
  631. package/dist/components/BbTooltip/BbTooltip.vue.js +6 -0
  632. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +160 -0
  633. package/dist/components/BbTooltip/types.d.ts +61 -11
  634. package/dist/components/BbTree/BbTree.vue.d.ts +26 -13
  635. package/dist/components/BbTree/BbTree.vue.js +6 -0
  636. package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +55 -0
  637. package/dist/components/BbTree/BbTreeLevel.vue.d.ts +19 -0
  638. package/dist/components/BbTree/BbTreeLevel.vue.js +5 -0
  639. package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +94 -0
  640. package/dist/components/BbTree/context.d.ts +17 -0
  641. package/dist/components/BbTree/context.js +4 -0
  642. package/dist/components/BbTree/types.d.ts +93 -42
  643. package/dist/components/ChipsBox/ChipsBox.vue.d.ts +2 -1
  644. package/dist/components/ChipsBox/ChipsBox.vue.js +5 -0
  645. package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +98 -0
  646. package/dist/components/ChipsBox/types.d.ts +12 -5
  647. package/dist/components/ClearableButton/ClearableButton.vue.d.ts +2 -1
  648. package/dist/components/ClearableButton/ClearableButton.vue.js +6 -0
  649. package/dist/components/ClearableButton/ClearableButton.vue_vue_type_script_setup_true_lang.js +19 -0
  650. package/dist/components/ClearableButton/types.d.ts +7 -1
  651. package/dist/components/CloseIcon/CloseButton.vue.d.ts +5 -0
  652. package/dist/components/CloseIcon/CloseButton.vue.js +7 -0
  653. package/dist/components/CloseIcon/CloseButton.vue_vue_type_script_setup_true_lang.js +23 -0
  654. package/dist/components/CloseIcon/types.d.ts +2 -0
  655. package/dist/components/CommaBox/CommaBox.vue.d.ts +2 -1
  656. package/dist/components/CommaBox/CommaBox.vue.js +6 -0
  657. package/dist/components/CommaBox/CommaBox.vue_vue_type_script_setup_true_lang.js +81 -0
  658. package/dist/components/CommaBox/types.d.ts +6 -7
  659. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue.d.ts +19 -0
  660. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue.js +6 -0
  661. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue_vue_type_script_setup_true_lang.js +107 -0
  662. package/dist/components/CommonInputWrapper/types.d.ts +96 -0
  663. package/dist/components/CommonPopover/CommonPopover.vue.d.ts +3 -3
  664. package/dist/components/CommonPopover/CommonPopover.vue.js +6 -0
  665. package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +160 -0
  666. package/dist/components/CommonPopover/types.d.ts +61 -16
  667. package/dist/components/ErrorIcon/ErrorIcon.vue.d.ts +2 -0
  668. package/dist/components/ErrorIcon/ErrorIcon.vue.js +6 -0
  669. package/dist/components/ErrorIcon/ErrorIcon.vue_vue_type_script_setup_true_lang.js +16 -0
  670. package/dist/components/FlatListBox/FlatListBox.vue.d.ts +2 -5
  671. package/dist/components/FlatListBox/FlatListBox.vue.js +5 -0
  672. package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +167 -0
  673. package/dist/components/FlatListBox/types.d.ts +1 -1
  674. package/dist/components/GroupedListBox/GroupedListBox.vue.d.ts +2 -5
  675. package/dist/components/GroupedListBox/GroupedListBox.vue.js +5 -0
  676. package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +218 -0
  677. package/dist/components/ListBox/ListBox.vue.d.ts +3 -6
  678. package/dist/components/ListBox/ListBox.vue.js +5 -0
  679. package/dist/components/ListBox/ListBox.vue_vue_type_script_setup_true_lang.js +112 -0
  680. package/dist/components/ListBox/types.d.ts +1 -1
  681. package/dist/components/OptionsContainer/OptionsContainer.vue.d.ts +1 -0
  682. package/dist/components/OptionsContainer/OptionsContainer.vue.js +5 -0
  683. package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +52 -0
  684. package/dist/components/OptionsContainer/types.d.ts +14 -24
  685. package/dist/components/Transitions/ScaleFade.vue.js +5 -0
  686. package/dist/components/Transitions/ScaleFade.vue_vue_type_script_setup_true_lang.js +47 -0
  687. package/dist/components/Transitions/Slide.vue.js +7 -0
  688. package/dist/components/Transitions/Slide.vue_vue_type_script_setup_true_lang.js +28 -0
  689. package/dist/components/WarningIcon/WarningIcon.vue.d.ts +5 -0
  690. package/dist/components/WarningIcon/WarningIcon.vue.js +6 -0
  691. package/dist/components/WarningIcon/WarningIcon.vue_vue_type_script_setup_true_lang.js +16 -0
  692. package/dist/components/WarningIcon/types.d.ts +3 -0
  693. package/dist/composables/__testResets.d.ts +1 -0
  694. package/dist/composables/useActiveInactiveState.d.ts +4 -0
  695. package/dist/composables/useActiveInactiveState.js +21 -0
  696. package/dist/composables/useBaseOptions.d.ts +3 -3
  697. package/dist/composables/useBaseOptions.js +31 -0
  698. package/dist/composables/useBbConfig.d.ts +8 -37
  699. package/dist/composables/useBbConfig.js +5 -0
  700. package/dist/composables/useBbDropdownContext.d.ts +89 -0
  701. package/dist/composables/useBbDropdownContext.js +46 -0
  702. package/dist/composables/useBbFormContext.d.ts +90 -0
  703. package/dist/composables/useBbFormContext.js +69 -0
  704. package/dist/composables/useBbTableContext.d.ts +195 -0
  705. package/dist/composables/useBbTableContext.js +208 -0
  706. package/dist/composables/useBbTabsContext.d.ts +111 -0
  707. package/dist/composables/useBbTabsContext.js +219 -0
  708. package/dist/composables/useBreakpoint.d.ts +13 -0
  709. package/dist/composables/useBreakpoint.js +39 -0
  710. package/dist/composables/useBroadcastChannelInstance.d.ts +1 -3
  711. package/dist/composables/useBroadcastChannelInstance.js +39 -0
  712. package/dist/composables/useCancelableFunction.js +37 -0
  713. package/dist/composables/useCoherence.js +16 -0
  714. package/dist/composables/useConfirm.d.ts +257 -67
  715. package/dist/composables/useConfirm.js +122 -0
  716. package/dist/composables/useCountdown.js +42 -0
  717. package/dist/composables/useHashedWatcher.d.ts +17 -0
  718. package/dist/composables/useHashedWatcher.js +14 -0
  719. package/dist/composables/useId.d.ts +3 -2
  720. package/dist/composables/useIndexById.js +16 -0
  721. package/dist/composables/useInertiaPage.d.ts +10 -0
  722. package/dist/composables/useInertiaPage.js +8 -0
  723. package/dist/composables/useItemText.js +17 -0
  724. package/dist/composables/useItemValue.js +9 -0
  725. package/dist/composables/useItemsGetter.d.ts +1 -1
  726. package/dist/composables/useItemsGetter.js +30 -0
  727. package/dist/composables/useListboxFocus.js +66 -0
  728. package/dist/composables/useLocale.d.ts +1 -1
  729. package/dist/composables/useLocale.js +11 -0
  730. package/dist/composables/useLogger.d.ts +1 -1
  731. package/dist/composables/useLogger.js +10 -0
  732. package/dist/composables/useMinimalQueue.d.ts +1 -1
  733. package/dist/composables/useMobile.js +7 -0
  734. package/dist/composables/useOnFalsy.d.ts +2 -0
  735. package/dist/composables/useOnFalsy.js +9 -0
  736. package/dist/composables/useOnTruthy.d.ts +7 -0
  737. package/dist/composables/useOnTruthy.js +9 -0
  738. package/dist/composables/usePrefill.d.ts +2 -1
  739. package/dist/composables/usePrefill.js +24 -0
  740. package/dist/composables/useQuery.d.ts +15 -3
  741. package/dist/composables/useQuery.js +42 -0
  742. package/dist/composables/useRoute.js +11 -0
  743. package/dist/composables/useRouter.js +8 -0
  744. package/dist/composables/useSafeArea.d.ts +51 -0
  745. package/dist/composables/useSafeArea.js +16 -0
  746. package/dist/composables/useSegmentedFields.d.ts +103 -0
  747. package/dist/composables/useSegmentedFields.js +152 -0
  748. package/dist/composables/useTableWidthContext.d.ts +5 -0
  749. package/dist/composables/useTableWidthContext.js +42 -0
  750. package/dist/composables/useToast.d.ts +17 -73
  751. package/dist/composables/useToast.js +49 -0
  752. package/dist/composables/useTopLayer.d.ts +9 -0
  753. package/dist/composables/useTopLayer.js +7 -0
  754. package/dist/composables/useUntil.js +13 -0
  755. package/dist/composables/useViewportWidth.d.ts +17 -0
  756. package/dist/composables/useViewportWidth.js +6 -0
  757. package/dist/confirm-variants.d.ts +10 -0
  758. package/dist/deprecation/ai-deprecations.json.d.ts +784 -0
  759. package/dist/deprecation/ai-deprecations.json.js +4 -0
  760. package/dist/deprecation/removedProps.d.ts +3 -0
  761. package/dist/deprecation/removedProps.js +13 -0
  762. package/dist/directives/bbColor.d.ts +65 -0
  763. package/dist/directives/bbColor.js +24 -0
  764. package/dist/directives/bbDate.d.ts +66 -0
  765. package/dist/directives/bbDate.js +24 -0
  766. package/dist/directives/bbDropdown.d.ts +15 -11
  767. package/dist/directives/bbDropdown.js +23 -0
  768. package/dist/directives/bbTime.d.ts +64 -0
  769. package/dist/directives/bbTime.js +24 -0
  770. package/dist/directives/bbTooltip.d.ts +16 -11
  771. package/dist/directives/bbTooltip.js +24 -0
  772. package/dist/dropdown-item-variants.d.ts +10 -0
  773. package/dist/i18n/index.d.ts +51 -3
  774. package/dist/i18n/index.js +27 -0
  775. package/dist/i18n/locales/cs.json +115 -0
  776. package/dist/i18n/locales/da.json +115 -0
  777. package/dist/i18n/locales/de.json +115 -0
  778. package/dist/i18n/locales/el.json +115 -0
  779. package/dist/i18n/locales/en.json +115 -0
  780. package/dist/i18n/locales/es.json +115 -0
  781. package/dist/i18n/locales/fi.json +115 -0
  782. package/dist/i18n/locales/fr.json +115 -0
  783. package/dist/i18n/locales/hu.json +115 -0
  784. package/dist/i18n/locales/it.json +115 -0
  785. package/dist/i18n/locales/ja.json +115 -0
  786. package/dist/i18n/locales/ko.json +115 -0
  787. package/dist/i18n/locales/nb.json +115 -0
  788. package/dist/i18n/locales/nl.json +115 -0
  789. package/dist/i18n/locales/pl.json +115 -0
  790. package/dist/i18n/locales/pt.json +115 -0
  791. package/dist/i18n/locales/ro.json +115 -0
  792. package/dist/i18n/locales/ru.json +115 -0
  793. package/dist/i18n/locales/sv.json +115 -0
  794. package/dist/i18n/locales/tr.json +115 -0
  795. package/dist/i18n/locales/uk.json +115 -0
  796. package/dist/i18n/locales/zh-cn.json +115 -0
  797. package/dist/icons-whitelist.d.ts +8 -0
  798. package/dist/index.d.ts +94 -79
  799. package/dist/index.js +76 -82
  800. package/dist/indicator-variants.d.ts +13 -0
  801. package/dist/llms-full.txt +77073 -0
  802. package/dist/llms-medium.txt +1334 -0
  803. package/dist/llms.txt +103 -0
  804. package/dist/locale-blueprint.json +141 -0
  805. package/dist/nuxt-module.d.ts +3 -0
  806. package/dist/nuxt.js +19 -0
  807. package/dist/plugin.d.ts +4 -0
  808. package/dist/plugin.js +22 -0
  809. package/dist/reset.css +1 -0
  810. package/dist/reset.d.ts +0 -0
  811. package/dist/runtime/nuxt-plugin.d.ts +2 -0
  812. package/dist/runtime/nuxt-plugin.js +24 -0
  813. package/dist/styles.css +2 -0
  814. package/dist/styles.d.ts +0 -0
  815. package/dist/toast-variants.d.ts +13 -0
  816. package/dist/tooltip-variants.d.ts +10 -0
  817. package/dist/types/ActionButton.d.ts +32 -0
  818. package/dist/types/AlertVariant.d.ts +16 -0
  819. package/dist/types/BadgeVariant.d.ts +16 -0
  820. package/dist/types/ButtonVariant.d.ts +17 -0
  821. package/dist/types/Classes.d.ts +1 -1
  822. package/dist/types/ColumnName.d.ts +1 -1
  823. package/dist/types/CommonProps.d.ts +66 -279
  824. package/dist/types/Config.d.ts +84 -0
  825. package/dist/types/ConfirmVariant.d.ts +15 -0
  826. package/dist/types/DropdownItemVariant.d.ts +18 -0
  827. package/dist/types/Icon.d.ts +5 -7
  828. package/dist/types/IndicatorVariant.d.ts +16 -0
  829. package/dist/types/InputDirection.d.ts +15 -0
  830. package/dist/types/ItemAccessor.d.ts +21 -0
  831. package/dist/types/Placement.d.ts +6 -0
  832. package/dist/types/ResponsiveSize.d.ts +20 -0
  833. package/dist/types/SizeScale.d.ts +8 -0
  834. package/dist/types/ToastVariant.d.ts +17 -0
  835. package/dist/types/TooltipVariant.d.ts +18 -0
  836. package/dist/utilities/functions/bytesToUnit.d.ts +2 -0
  837. package/dist/utilities/functions/bytesToUnit.js +18 -0
  838. package/dist/utilities/functions/clampPrecision.js +10 -0
  839. package/dist/utilities/functions/convertDateValue.d.ts +23 -10
  840. package/dist/utilities/functions/convertDateValue.js +12 -0
  841. package/dist/utilities/functions/deburr.js +5 -0
  842. package/dist/utilities/functions/empty.js +5 -0
  843. package/dist/utilities/functions/flattenTree.d.ts +1 -1
  844. package/dist/utilities/functions/hash.js +5 -0
  845. package/dist/utilities/functions/isDateDisabled.d.ts +1 -0
  846. package/dist/utilities/functions/isDateDisabled.js +20 -0
  847. package/dist/utilities/functions/isEqual.js +5 -0
  848. package/dist/utilities/functions/isNotEmpty.js +5 -0
  849. package/dist/utilities/functions/matchAnyKey.d.ts +1 -1
  850. package/dist/utilities/functions/matchAnyKey.js +15 -0
  851. package/dist/utilities/functions/parseSize.d.ts +1 -1
  852. package/dist/utilities/functions/parseSize.js +15 -0
  853. package/dist/utilities/functions/percentage.js +11 -0
  854. package/dist/utilities/functions/pipe.d.ts +1 -1
  855. package/dist/utilities/functions/reject.d.ts +25 -0
  856. package/dist/utilities/functions/reject.js +28 -0
  857. package/dist/utilities/functions/resolveEnumProp.d.ts +19 -0
  858. package/dist/utilities/functions/resolveEnumProp.js +5 -0
  859. package/dist/utilities/functions/slotKey.d.ts +13 -0
  860. package/dist/utilities/functions/slotKey.js +4 -0
  861. package/dist/utilities/functions/sort.d.ts +2 -2
  862. package/dist/utilities/functions/sort.js +19 -0
  863. package/dist/utilities/functions/throttle.js +5 -0
  864. package/dist/utilities/functions/waitFor.d.ts +9 -2
  865. package/dist/utilities/functions/waitFor.js +14 -0
  866. package/dist/utilities/functions/warnRemovedAttrs.d.ts +11 -0
  867. package/dist/utilities/functions/warnRemovedAttrs.js +20 -0
  868. package/dist/utilities/functions/when.js +5 -0
  869. package/dist/utilities/misc/iconsInjectionKey.d.ts +15 -0
  870. package/dist/utilities/misc/iconsInjectionKey.js +4 -0
  871. package/dist/utilities/misc/transitions.d.ts +5 -0
  872. package/dist/utilities/misc/transitions.js +8 -0
  873. package/dist/utils/injectLibraryStyles.d.ts +6 -0
  874. package/dist/utils/injectLibraryStyles.js +38 -0
  875. package/dist/validated/BbCheckbox.vue.d.ts +29 -0
  876. package/dist/validated/BbCheckbox.vue.js +5 -0
  877. package/dist/validated/BbCheckbox.vue_vue_type_script_setup_true_lang.js +75 -0
  878. package/dist/validated/BbCheckboxGroup.vue.d.ts +34 -0
  879. package/dist/validated/BbCheckboxGroup.vue.js +5 -0
  880. package/dist/validated/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +76 -0
  881. package/dist/validated/BbColorInput.vue.d.ts +36 -0
  882. package/dist/validated/BbColorInput.vue.js +5 -0
  883. package/dist/validated/BbColorInput.vue_vue_type_script_setup_true_lang.js +71 -0
  884. package/dist/validated/BbDatePickerInput.vue.d.ts +40 -0
  885. package/dist/validated/BbDatePickerInput.vue.js +5 -0
  886. package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +87 -0
  887. package/dist/validated/BbDropzone.vue.d.ts +24 -0
  888. package/dist/validated/BbDropzone.vue.js +5 -0
  889. package/dist/validated/BbDropzone.vue_vue_type_script_setup_true_lang.js +45 -0
  890. package/dist/validated/BbForm.vue.d.ts +28 -0
  891. package/dist/validated/BbForm.vue.js +5 -0
  892. package/dist/validated/BbForm.vue_vue_type_script_setup_true_lang.js +42 -0
  893. package/dist/validated/BbNumberInput.vue.d.ts +36 -0
  894. package/dist/validated/BbNumberInput.vue.js +5 -0
  895. package/dist/validated/BbNumberInput.vue_vue_type_script_setup_true_lang.js +72 -0
  896. package/dist/validated/BbRadioGroup.vue.d.ts +34 -0
  897. package/dist/validated/BbRadioGroup.vue.js +5 -0
  898. package/dist/validated/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +75 -0
  899. package/dist/validated/BbRating.vue.d.ts +30 -0
  900. package/dist/validated/BbRating.vue.js +5 -0
  901. package/dist/validated/BbRating.vue_vue_type_script_setup_true_lang.js +63 -0
  902. package/dist/validated/BbSelect.vue.d.ts +46 -0
  903. package/dist/validated/BbSelect.vue.js +5 -0
  904. package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +100 -0
  905. package/dist/validated/BbSlider.vue.d.ts +36 -0
  906. package/dist/validated/BbSlider.vue.js +5 -0
  907. package/dist/validated/BbSlider.vue_vue_type_script_setup_true_lang.js +69 -0
  908. package/dist/validated/BbSwitch.vue.d.ts +29 -0
  909. package/dist/validated/BbSwitch.vue.js +5 -0
  910. package/dist/validated/BbSwitch.vue_vue_type_script_setup_true_lang.js +75 -0
  911. package/dist/validated/BbSwitchGroup.vue.d.ts +34 -0
  912. package/dist/validated/BbSwitchGroup.vue.js +5 -0
  913. package/dist/validated/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +76 -0
  914. package/dist/validated/BbTag.vue.d.ts +36 -0
  915. package/dist/validated/BbTag.vue.js +5 -0
  916. package/dist/validated/BbTag.vue_vue_type_script_setup_true_lang.js +72 -0
  917. package/dist/validated/BbTextInput.vue.d.ts +36 -0
  918. package/dist/validated/BbTextInput.vue.js +5 -0
  919. package/dist/validated/BbTextInput.vue_vue_type_script_setup_true_lang.js +72 -0
  920. package/dist/validated/BbTextarea.vue.d.ts +36 -0
  921. package/dist/validated/BbTextarea.vue.js +5 -0
  922. package/dist/validated/BbTextarea.vue_vue_type_script_setup_true_lang.js +70 -0
  923. package/dist/validated/BbTimePickerInput.vue.d.ts +36 -0
  924. package/dist/validated/BbTimePickerInput.vue.js +5 -0
  925. package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +78 -0
  926. package/dist/validated/index.d.ts +29 -0
  927. package/dist/validated/useValidatedField.d.ts +52 -0
  928. package/dist/validated/useValidatedField.js +51 -0
  929. package/dist/validated.js +21 -0
  930. package/dist/vite-plugin.d.ts +217 -0
  931. package/dist/vite.js +530 -0
  932. package/llms.txt +105 -0
  933. package/package.json +161 -59
  934. package/scripts/lib/__fixtures__/validated-manifest.json +65 -0
  935. package/scripts/lib/ensure-manifest.mjs +39 -0
  936. package/scripts/lib/eslint-plugin-autofix.node.test.mjs +109 -0
  937. package/scripts/lib/eslint-plugin.mjs +285 -0
  938. package/scripts/lib/eslint-plugin.node.test.mjs +161 -0
  939. package/scripts/lib/html-attributes.mjs +191 -0
  940. package/scripts/lib/mcp-config.mjs +126 -0
  941. package/scripts/lib/migrate-fix.mjs +115 -0
  942. package/scripts/lib/validate-bb-markup.mjs +421 -0
  943. package/dist/ai/BaseButton.md +0 -449
  944. package/dist/ai/BaseCheckbox.md +0 -512
  945. package/dist/ai/BaseCheckboxGroup.md +0 -597
  946. package/dist/ai/BaseColorInput.md +0 -461
  947. package/dist/ai/BaseDatePicker.md +0 -739
  948. package/dist/ai/BaseDatePickerInput.md +0 -1517
  949. package/dist/ai/BaseDialog.md +0 -610
  950. package/dist/ai/BaseInputContainer.md +0 -570
  951. package/dist/ai/BaseNumberInput.md +0 -509
  952. package/dist/ai/BaseRadio.md +0 -405
  953. package/dist/ai/BaseRadioGroup.md +0 -535
  954. package/dist/ai/BaseRating.md +0 -489
  955. package/dist/ai/BaseSelect.md +0 -1742
  956. package/dist/ai/BaseSlider.md +0 -871
  957. package/dist/ai/BaseSwitch.md +0 -322
  958. package/dist/ai/BaseSwitchGroup.md +0 -298
  959. package/dist/ai/BaseTag.md +0 -623
  960. package/dist/ai/BaseTextInput.md +0 -392
  961. package/dist/ai/BaseTextarea.md +0 -398
  962. package/dist/ai/BbChip.md +0 -147
  963. package/dist/ai/BbIntersection.md +0 -120
  964. package/dist/ai/BbRatio.md +0 -61
  965. package/dist/ai/BbRows.md +0 -307
  966. package/dist/ai/BbTab.md +0 -950
  967. package/dist/ai/CommonInputInnerContainer.md +0 -414
  968. package/dist/ai/CommonInputOuterContainer.md +0 -55
  969. package/dist/components/BaseButton/BaseButton.vue.d.ts +0 -14
  970. package/dist/components/BaseButton/types.d.ts +0 -159
  971. package/dist/components/BaseCheckbox/BaseCheckbox.vue.d.ts +0 -39
  972. package/dist/components/BaseCheckbox/types.d.ts +0 -213
  973. package/dist/components/BaseCheckboxGroup/BaseCheckboxGroup.vue.d.ts +0 -30
  974. package/dist/components/BaseCheckboxGroup/types.d.ts +0 -282
  975. package/dist/components/BaseColorInput/BaseColorInput.vue.d.ts +0 -35
  976. package/dist/components/BaseColorInput/ColorPalette.vue.d.ts +0 -13
  977. package/dist/components/BaseColorInput/types.d.ts +0 -233
  978. package/dist/components/BaseDatePicker/BaseDatePickerHeader.vue.d.ts +0 -15
  979. package/dist/components/BaseDatePicker/BaseDatePickerInputDaySelector.vue.d.ts +0 -58
  980. package/dist/components/BaseDatePicker/BaseDatePickerMonthSelector.vue.d.ts +0 -12
  981. package/dist/components/BaseDatePicker/BaseDatePickerYearSelector.vue.d.ts +0 -12
  982. package/dist/components/BaseDatePicker/types.d.ts +0 -100
  983. package/dist/components/BaseDatePickerInput/BaseDatePickerInput.vue.d.ts +0 -26
  984. package/dist/components/BaseDatePickerInput/types.d.ts +0 -206
  985. package/dist/components/BaseDialog/BaseDialog.vue.d.ts +0 -37
  986. package/dist/components/BaseDialog/types.d.ts +0 -180
  987. package/dist/components/BaseInputContainer/BaseInputContainer.vue.d.ts +0 -18
  988. package/dist/components/BaseInputContainer/types.d.ts +0 -126
  989. package/dist/components/BaseNumberInput/BaseNumberInput.vue.d.ts +0 -46
  990. package/dist/components/BaseNumberInput/types.d.ts +0 -191
  991. package/dist/components/BaseRadio/BaseRadio.vue.d.ts +0 -31
  992. package/dist/components/BaseRadio/types.d.ts +0 -173
  993. package/dist/components/BaseRadioGroup/BaseRadioGroup.vue.d.ts +0 -30
  994. package/dist/components/BaseRadioGroup/types.d.ts +0 -240
  995. package/dist/components/BaseRating/BaseRating.vue.d.ts +0 -35
  996. package/dist/components/BaseRating/types.d.ts +0 -144
  997. package/dist/components/BaseSelect/BaseSelect.vue.d.ts +0 -28
  998. package/dist/components/BaseSelect/types.d.ts +0 -470
  999. package/dist/components/BaseSlider/BaseSlider.vue.d.ts +0 -38
  1000. package/dist/components/BaseSlider/types.d.ts +0 -201
  1001. package/dist/components/BaseSwitch/BaseSwitch.vue.d.ts +0 -34
  1002. package/dist/components/BaseSwitch/types.d.ts +0 -25
  1003. package/dist/components/BaseSwitchGroup/BaseSwitchGroup.vue.d.ts +0 -30
  1004. package/dist/components/BaseSwitchGroup/types.d.ts +0 -8
  1005. package/dist/components/BaseTag/BaseTag.vue.d.ts +0 -37
  1006. package/dist/components/BaseTag/types.d.ts +0 -136
  1007. package/dist/components/BaseTextInput/BaseTextInput.vue.d.ts +0 -33
  1008. package/dist/components/BaseTextInput/types.d.ts +0 -166
  1009. package/dist/components/BaseTextarea/BaseTextarea.vue.d.ts +0 -31
  1010. package/dist/components/BaseTextarea/types.d.ts +0 -151
  1011. package/dist/components/BbChip/BbChip.vue.d.ts +0 -17
  1012. package/dist/components/BbChip/types.d.ts +0 -23
  1013. package/dist/components/BbIntersection/BbIntersection.vue.d.ts +0 -23
  1014. package/dist/components/BbIntersection/types.d.ts +0 -36
  1015. package/dist/components/BbRatio/BbRatio.vue.d.ts +0 -14
  1016. package/dist/components/BbRatio/types.d.ts +0 -15
  1017. package/dist/components/BbRows/BbRows.vue.d.ts +0 -62
  1018. package/dist/components/BbRows/types.d.ts +0 -21
  1019. package/dist/components/BbTab/BbTab.vue.d.ts +0 -27
  1020. package/dist/components/BbTab/types.d.ts +0 -186
  1021. package/dist/components/CommonInputInnerContainer/CommonInputInnerContainer.vue.d.ts +0 -15
  1022. package/dist/components/CommonInputInnerContainer/types.d.ts +0 -47
  1023. package/dist/components/CommonInputOuterContainer/CommonInputOuterContainer.vue.d.ts +0 -11
  1024. package/dist/components/CommonInputOuterContainer/types.d.ts +0 -16
  1025. package/dist/composables/useModalsState.d.ts +0 -5
  1026. package/dist/composables/useQueue.d.ts +0 -58
  1027. package/dist/composables/useWizard.d.ts +0 -85
  1028. package/dist/i18n/en.d.ts +0 -67
  1029. package/dist/i18n/it.d.ts +0 -67
  1030. package/dist/index.css +0 -2
  1031. package/dist/index100.js +0 -6
  1032. package/dist/index101.js +0 -300
  1033. package/dist/index102.js +0 -16
  1034. package/dist/index103.js +0 -16
  1035. package/dist/index104.js +0 -27
  1036. package/dist/index109.js +0 -19
  1037. package/dist/index11.js +0 -42
  1038. package/dist/index110.js +0 -12
  1039. package/dist/index111.js +0 -19
  1040. package/dist/index112.js +0 -25
  1041. package/dist/index114.js +0 -7
  1042. package/dist/index115.js +0 -241
  1043. package/dist/index116.js +0 -5
  1044. package/dist/index117.js +0 -42
  1045. package/dist/index118.js +0 -5
  1046. package/dist/index119.js +0 -53
  1047. package/dist/index120.js +0 -5
  1048. package/dist/index121.js +0 -32
  1049. package/dist/index122.js +0 -5
  1050. package/dist/index124.js +0 -52
  1051. package/dist/index125.js +0 -5
  1052. package/dist/index126.js +0 -223
  1053. package/dist/index128.js +0 -6
  1054. package/dist/index129.js +0 -162
  1055. package/dist/index13.js +0 -92
  1056. package/dist/index130.js +0 -25
  1057. package/dist/index131.js +0 -51
  1058. package/dist/index132.js +0 -5
  1059. package/dist/index133.js +0 -607
  1060. package/dist/index135.js +0 -6
  1061. package/dist/index136.js +0 -14
  1062. package/dist/index137.js +0 -153
  1063. package/dist/index139.js +0 -6
  1064. package/dist/index14.js +0 -306
  1065. package/dist/index140.js +0 -224
  1066. package/dist/index141.js +0 -5
  1067. package/dist/index143.js +0 -128
  1068. package/dist/index145.js +0 -6
  1069. package/dist/index146.js +0 -8
  1070. package/dist/index147.js +0 -182
  1071. package/dist/index149.js +0 -6
  1072. package/dist/index15.js +0 -10
  1073. package/dist/index151.js +0 -4
  1074. package/dist/index152.js +0 -95
  1075. package/dist/index154.js +0 -6
  1076. package/dist/index155.js +0 -168
  1077. package/dist/index157.js +0 -6
  1078. package/dist/index158.js +0 -145
  1079. package/dist/index16.js +0 -59
  1080. package/dist/index160.js +0 -6
  1081. package/dist/index161.js +0 -53
  1082. package/dist/index163.js +0 -6
  1083. package/dist/index164.js +0 -16
  1084. package/dist/index166.js +0 -35
  1085. package/dist/index168.js +0 -6
  1086. package/dist/index169.js +0 -89
  1087. package/dist/index171.js +0 -6
  1088. package/dist/index172.js +0 -82
  1089. package/dist/index174.js +0 -6
  1090. package/dist/index175.js +0 -38
  1091. package/dist/index176.js +0 -461
  1092. package/dist/index177.js +0 -28
  1093. package/dist/index178.js +0 -66
  1094. package/dist/index18.js +0 -35
  1095. package/dist/index180.js +0 -162
  1096. package/dist/index181.js +0 -5
  1097. package/dist/index182.js +0 -217
  1098. package/dist/index183.js +0 -5
  1099. package/dist/index184.js +0 -112
  1100. package/dist/index185.js +0 -5
  1101. package/dist/index186.js +0 -459
  1102. package/dist/index188.js +0 -6
  1103. package/dist/index19.js +0 -4
  1104. package/dist/index192.js +0 -268
  1105. package/dist/index194.js +0 -6
  1106. package/dist/index195.js +0 -124
  1107. package/dist/index197.js +0 -6
  1108. package/dist/index198.js +0 -174
  1109. package/dist/index2.js +0 -20
  1110. package/dist/index20.js +0 -9
  1111. package/dist/index200.js +0 -6
  1112. package/dist/index201.js +0 -224
  1113. package/dist/index203.js +0 -6
  1114. package/dist/index204.js +0 -135
  1115. package/dist/index206.js +0 -6
  1116. package/dist/index207.js +0 -5
  1117. package/dist/index208.js +0 -170
  1118. package/dist/index21.js +0 -35
  1119. package/dist/index210.js +0 -6
  1120. package/dist/index211.js +0 -37
  1121. package/dist/index213.js +0 -6
  1122. package/dist/index214.js +0 -63
  1123. package/dist/index216.js +0 -6
  1124. package/dist/index217.js +0 -74
  1125. package/dist/index219.js +0 -6
  1126. package/dist/index22.js +0 -6
  1127. package/dist/index220.js +0 -65
  1128. package/dist/index222.js +0 -6
  1129. package/dist/index223.js +0 -67
  1130. package/dist/index225.js +0 -6
  1131. package/dist/index226.js +0 -41
  1132. package/dist/index228.js +0 -6
  1133. package/dist/index229.js +0 -10
  1134. package/dist/index23.js +0 -7
  1135. package/dist/index230.js +0 -22
  1136. package/dist/index232.js +0 -8
  1137. package/dist/index233.js +0 -297
  1138. package/dist/index235.js +0 -6
  1139. package/dist/index236.js +0 -47
  1140. package/dist/index237.js +0 -165
  1141. package/dist/index239.js +0 -6
  1142. package/dist/index24.js +0 -9
  1143. package/dist/index241.js +0 -159
  1144. package/dist/index243.js +0 -6
  1145. package/dist/index244.js +0 -134
  1146. package/dist/index246.js +0 -6
  1147. package/dist/index247.js +0 -167
  1148. package/dist/index249.js +0 -6
  1149. package/dist/index25.js +0 -24
  1150. package/dist/index250.js +0 -147
  1151. package/dist/index252.js +0 -6
  1152. package/dist/index253.js +0 -35
  1153. package/dist/index255.js +0 -6
  1154. package/dist/index256.js +0 -65
  1155. package/dist/index258.js +0 -6
  1156. package/dist/index259.js +0 -19
  1157. package/dist/index260.js +0 -5
  1158. package/dist/index261.js +0 -160
  1159. package/dist/index263.js +0 -6
  1160. package/dist/index264.js +0 -60
  1161. package/dist/index266.js +0 -6
  1162. package/dist/index267.js +0 -134
  1163. package/dist/index269.js +0 -6
  1164. package/dist/index27.js +0 -4
  1165. package/dist/index271.js +0 -206
  1166. package/dist/index273.js +0 -6
  1167. package/dist/index274.js +0 -85
  1168. package/dist/index275.js +0 -5
  1169. package/dist/index276.js +0 -55
  1170. package/dist/index277.js +0 -5
  1171. package/dist/index278.js +0 -164
  1172. package/dist/index28.js +0 -8
  1173. package/dist/index280.js +0 -6
  1174. package/dist/index281.js +0 -145
  1175. package/dist/index283.js +0 -6
  1176. package/dist/index284.js +0 -11
  1177. package/dist/index285.js +0 -200
  1178. package/dist/index287.js +0 -6
  1179. package/dist/index288.js +0 -241
  1180. package/dist/index29.js +0 -7
  1181. package/dist/index290.js +0 -6
  1182. package/dist/index291.js +0 -21
  1183. package/dist/index293.js +0 -6
  1184. package/dist/index294.js +0 -125
  1185. package/dist/index296.js +0 -6
  1186. package/dist/index297.js +0 -161
  1187. package/dist/index299.js +0 -6
  1188. package/dist/index30.js +0 -118
  1189. package/dist/index300.js +0 -127
  1190. package/dist/index302.js +0 -6
  1191. package/dist/index303.js +0 -20
  1192. package/dist/index305.js +0 -6
  1193. package/dist/index306.js +0 -116
  1194. package/dist/index307.js +0 -5
  1195. package/dist/index308.js +0 -507
  1196. package/dist/index31.js +0 -10
  1197. package/dist/index310.js +0 -6
  1198. package/dist/index311.js +0 -196
  1199. package/dist/index313.js +0 -6
  1200. package/dist/index314.js +0 -142
  1201. package/dist/index316.js +0 -6
  1202. package/dist/index317.js +0 -134
  1203. package/dist/index319.js +0 -6
  1204. package/dist/index32.js +0 -28
  1205. package/dist/index320.js +0 -162
  1206. package/dist/index322.js +0 -6
  1207. package/dist/index323.js +0 -319
  1208. package/dist/index325.js +0 -6
  1209. package/dist/index326.js +0 -40
  1210. package/dist/index327.js +0 -43
  1211. package/dist/index328.js +0 -665
  1212. package/dist/index33.js +0 -5
  1213. package/dist/index330.js +0 -6
  1214. package/dist/index331.js +0 -155
  1215. package/dist/index333.js +0 -6
  1216. package/dist/index334.js +0 -142
  1217. package/dist/index336.js +0 -6
  1218. package/dist/index337.js +0 -155
  1219. package/dist/index339.js +0 -6
  1220. package/dist/index34.js +0 -112
  1221. package/dist/index340.js +0 -58
  1222. package/dist/index341.js +0 -5
  1223. package/dist/index342.js +0 -20
  1224. package/dist/index344.js +0 -6
  1225. package/dist/index345.js +0 -142
  1226. package/dist/index347.js +0 -6
  1227. package/dist/index349.js +0 -109
  1228. package/dist/index351.js +0 -6
  1229. package/dist/index353.js +0 -24
  1230. package/dist/index354.js +0 -23
  1231. package/dist/index355.js +0 -839
  1232. package/dist/index356.js +0 -474
  1233. package/dist/index357.js +0 -52
  1234. package/dist/index358.js +0 -7
  1235. package/dist/index36.js +0 -6
  1236. package/dist/index38.js +0 -63
  1237. package/dist/index39.js +0 -63
  1238. package/dist/index40.js +0 -9
  1239. package/dist/index42.js +0 -8
  1240. package/dist/index43.js +0 -179
  1241. package/dist/index44.js +0 -21
  1242. package/dist/index46.js +0 -385
  1243. package/dist/index48.js +0 -6
  1244. package/dist/index49.js +0 -33
  1245. package/dist/index5.js +0 -34
  1246. package/dist/index50.js +0 -12
  1247. package/dist/index51.js +0 -8
  1248. package/dist/index52.js +0 -106
  1249. package/dist/index53.js +0 -330
  1250. package/dist/index54.js +0 -97
  1251. package/dist/index55.js +0 -328
  1252. package/dist/index56.js +0 -28
  1253. package/dist/index57.js +0 -102
  1254. package/dist/index58.js +0 -157
  1255. package/dist/index6.js +0 -38
  1256. package/dist/index60.js +0 -6
  1257. package/dist/index61.js +0 -131
  1258. package/dist/index62.js +0 -5
  1259. package/dist/index65.js +0 -35
  1260. package/dist/index66.js +0 -26
  1261. package/dist/index68.js +0 -6
  1262. package/dist/index69.js +0 -54
  1263. package/dist/index7.js +0 -58
  1264. package/dist/index71.js +0 -6
  1265. package/dist/index72.js +0 -14
  1266. package/dist/index74.js +0 -6
  1267. package/dist/index75.js +0 -159
  1268. package/dist/index77.js +0 -6
  1269. package/dist/index78.js +0 -4
  1270. package/dist/index79.js +0 -4
  1271. package/dist/index80.js +0 -54
  1272. package/dist/index81.js +0 -5
  1273. package/dist/index82.js +0 -5
  1274. package/dist/index83.js +0 -141
  1275. package/dist/index85.js +0 -6
  1276. package/dist/index86.js +0 -65
  1277. package/dist/index88.js +0 -6
  1278. package/dist/index89.js +0 -30
  1279. package/dist/index9.js +0 -11
  1280. package/dist/index90.js +0 -19
  1281. package/dist/index91.js +0 -17
  1282. package/dist/index92.js +0 -9
  1283. package/dist/index93.js +0 -34
  1284. package/dist/index95.js +0 -16
  1285. package/dist/index96.js +0 -10
  1286. package/dist/index97.js +0 -18
  1287. package/dist/index98.js +0 -189
  1288. package/dist/types/VoidHtmlElements.d.ts +0 -1
  1289. package/dist/utilities/functions/add.d.ts +0 -1
  1290. package/dist/utilities/functions/booleanishToBoolean.d.ts +0 -6
  1291. package/dist/utilities/functions/capitalize.d.ts +0 -4
  1292. package/dist/utilities/functions/cloneDeep.d.ts +0 -1
  1293. package/dist/utilities/functions/debounce.d.ts +0 -1
  1294. package/dist/utilities/functions/drop.d.ts +0 -1
  1295. package/dist/utilities/functions/exceedsPrecision.d.ts +0 -1
  1296. package/dist/utilities/functions/findRight.d.ts +0 -4
  1297. package/dist/utilities/functions/findRightIndex.d.ts +0 -4
  1298. package/dist/utilities/functions/flow.d.ts +0 -1
  1299. package/dist/utilities/functions/getHueFromRGB.d.ts +0 -9
  1300. package/dist/utilities/functions/groupBy.d.ts +0 -6
  1301. package/dist/utilities/functions/gt.d.ts +0 -7
  1302. package/dist/utilities/functions/hexToRGB.d.ts +0 -7
  1303. package/dist/utilities/functions/hslToHex.d.ts +0 -1
  1304. package/dist/utilities/functions/includes.d.ts +0 -1
  1305. package/dist/utilities/functions/initial.d.ts +0 -1
  1306. package/dist/utilities/functions/isCssColor.d.ts +0 -5
  1307. package/dist/utilities/functions/lt.d.ts +0 -7
  1308. package/dist/utilities/functions/makeUrl.d.ts +0 -1
  1309. package/dist/utilities/functions/mapKeys.d.ts +0 -5
  1310. package/dist/utilities/functions/mapValues.d.ts +0 -1
  1311. package/dist/utilities/functions/matchesPropertyInsensitive.d.ts +0 -1
  1312. package/dist/utilities/functions/max.d.ts +0 -2
  1313. package/dist/utilities/functions/mean.d.ts +0 -4
  1314. package/dist/utilities/functions/merge.d.ts +0 -11
  1315. package/dist/utilities/functions/millisecondsTo.d.ts +0 -1
  1316. package/dist/utilities/functions/negate.d.ts +0 -4
  1317. package/dist/utilities/functions/normalizeItemGroups.d.ts +0 -13
  1318. package/dist/utilities/functions/omit.d.ts +0 -2
  1319. package/dist/utilities/functions/overEvery.d.ts +0 -4
  1320. package/dist/utilities/functions/pick.d.ts +0 -1
  1321. package/dist/utilities/functions/replace.d.ts +0 -1
  1322. package/dist/utilities/functions/replaceInTree.d.ts +0 -4
  1323. package/dist/utilities/functions/retry.d.ts +0 -5
  1324. package/dist/utilities/functions/roundToTheNearest.d.ts +0 -8
  1325. package/dist/utilities/functions/set.d.ts +0 -15
  1326. package/dist/utilities/functions/stub.d.ts +0 -6
  1327. package/dist/utilities/functions/transposePercent.d.ts +0 -9
  1328. package/dist/utilities/functions/tryTo.d.ts +0 -2
  1329. package/dist/utilities/functions/uniqBy.d.ts +0 -1
  1330. /package/dist/{index64.js → _virtual/_plugin-vue_export-helper.js} +0 -0
  1331. /package/dist/components/{BaseButton → BbBaseButton}/RouterComponent.vue.d.ts +0 -0
  1332. /package/dist/components/{BaseDatePicker/BaseDatePicker.vue.d.ts → BbBaseDatePicker/BbBaseDatePicker.vue.d.ts} +0 -0
  1333. /package/dist/{index165.js → composables/useArray.js} +0 -0
  1334. /package/dist/{index17.js → composables/useFrameworkDetection.js} +0 -0
  1335. /package/dist/{index12.js → composables/useId.js} +0 -0
  1336. /package/dist/{index352.js → directives/createPopoverDirective.js} +0 -0
  1337. /package/dist/{index107.js → utilities/functions/chunk.js} +0 -0
  1338. /package/dist/{index8.js → utilities/functions/clamp.js} +0 -0
  1339. /package/dist/{index150.js → utilities/functions/curry.js} +0 -0
  1340. /package/dist/{index45.js → utilities/functions/extractDomContainer.js} +0 -0
  1341. /package/dist/{index270.js → utilities/functions/findInTree.js} +0 -0
  1342. /package/dist/{index348.js → utilities/functions/flattenTree.js} +0 -0
  1343. /package/dist/{index41.js → utilities/functions/get.js} +0 -0
  1344. /package/dist/{index189.js → utilities/functions/head.js} +0 -0
  1345. /package/dist/{index108.js → utilities/functions/identity.js} +0 -0
  1346. /package/dist/{index179.js → utilities/functions/indexBy.js} +0 -0
  1347. /package/dist/{index37.js → utilities/functions/isHex.js} +0 -0
  1348. /package/dist/{index94.js → utilities/functions/isNil.js} +0 -0
  1349. /package/dist/{index26.js → utilities/functions/isNotNil.js} +0 -0
  1350. /package/dist/{index105.js → utilities/functions/last.js} +0 -0
  1351. /package/dist/{index142.js → utilities/functions/noop.js} +0 -0
  1352. /package/dist/{index231.js → utilities/functions/parseWidthString.js} +0 -0
  1353. /package/dist/{index240.js → utilities/functions/pickBy.js} +0 -0
  1354. /package/dist/{index123.js → utilities/functions/range.js} +0 -0
  1355. /package/dist/{index190.js → utilities/functions/snapToStep.js} +0 -0
  1356. /package/dist/{index191.js → utilities/functions/transpose.js} +0 -0
  1357. /package/dist/{index106.js → utilities/functions/validateDateFormat.js} +0 -0
  1358. /package/dist/{index10.js → utilities/functions/wait.js} +0 -0
@@ -0,0 +1,1479 @@
1
+ ---
2
+ title: Approvals Inbox (Vue)
3
+ summary: Keyboard-first expense-approvals triage for a vue-router SPA — `keyboard-navigation` with highlight-opens-peek, one-click approve, reject-with-reason and snooze dialogs, bulk approve/reject, and an `A`/`R`/`S` shortcut bar, all through one coopting page context.
4
+ ---
5
+
6
+ # Recipe: Approvals Inbox (Vue)
7
+
8
+ The densest advanced-page recipe in the folder: a Linear-triage ×
9
+ Expensify-approvals expense inbox for a **plain Vue SPA with vue-router**.
10
+ `keyboard-navigation` turns the table into a single tab stop; the row under
11
+ the roving tabindex drives the peek sidebar directly (no click handler);
12
+ approve, reject-with-reason and snooze are each reachable from the row, the
13
+ peek footer, and an `A`/`R`/`S` shortcut bar — three dispatch surfaces
14
+ calling the exact same context actions; and a floating bottom panel adds
15
+ bulk approve/reject on top of the selection axis, fully independent of
16
+ highlight. All of it is wired through one coopting page context so every
17
+ leaf component takes zero props beyond the record it renders.
18
+
19
+ Sibling recipes: [Nuxt](../nuxt/approvals-inbox.md) ·
20
+ [Inertia](../inertia/approvals-inbox.md).
21
+
22
+ ## Prerequisites
23
+
24
+ - `<BbConfirm />` and `<BbToast />` mounted once in the app root.
25
+ - [App Layout](../../guides/app-layout.md), [Page Shell](../../guides/page-shell.md)
26
+ and [Floating Bottom Panel](../../guides/floating-bottom-panel.md) copied
27
+ into `src/components/layout/` per their guides — every recipe page assumes
28
+ this chrome exists and renders inside it.
29
+
30
+ ## Key ideas
31
+
32
+ - **Highlight drives the peek, not a click handler.** The table gets
33
+ `keyboard-navigation`; `ctx.table.highlighted` (the coopted table
34
+ context) is watched in `context.ts`, and every highlight change
35
+ replaces the sidebar's stack with that expense — arrowing through rows
36
+ previews each one with zero markup in `Index.vue`. Selection stays a
37
+ fully independent axis, free for the bulk bar.
38
+ - **One coopting page context.** `provideApprovalsInbox()` joins the
39
+ page-shell stack and the table context once, owns filters/tab/dialogs,
40
+ and exposes complete actions. Every leaf calls `useApprovalsInbox()` and
41
+ nothing else.
42
+ - **Three dispatch surfaces, one set of actions.** Approve / reject /
43
+ snooze are reachable from the row, from inside the peek, and from the
44
+ `A`/`R`/`S` keyboard shortcuts — all three call the exact same context
45
+ functions (`approve`, `openReject`, `openSnooze`), so there is exactly
46
+ one place each action's API call, refresh and toast live.
47
+ - **Reason and date are dialogs, not confirms.** Reject needs a typed
48
+ reason and snooze needs a date, so both open a small `BbDialog` (the
49
+ dialog itself is the confirmation gate) — a plain `useConfirm` is
50
+ reserved for actions that need no input.
51
+ - **The shortcut bar mirrors `useDeleteCmd`'s guard.** A small keydown
52
+ handler in the context checks `isInteractiveElementFocused()` before
53
+ firing — typing "reason" in the reject textarea never triggers `R`.
54
+ - **Clicking a submitter's name always stacks**, from a row or from inside
55
+ the expense peek — the back arrow appears once the stack is two deep,
56
+ exactly the "peek vs stack" grammar of the flagship.
57
+ - **Tabs are URL filters with live counts** (`Needs approval` / `Approved`
58
+ / `Rejected` / `All`), same shape as every other workspace in the
59
+ folder.
60
+ - **Buttons are `md` by default**; `sm`/`xs` apply only where the doctrine
61
+ allows it — table rows, the peek footers, the bulk bar, the shortcut
62
+ bar.
63
+
64
+ - **Spread the filters object into `dependencies`.** `BbTable` hash-compares
65
+ `dependencies`; it does not deep-watch them. Passing the reactive `filters`
66
+ proxy itself tracks only its identity — which never changes — so the table
67
+ never refetches. `{ ...ctx.filters }` reads every field during render, so any
68
+ field change yields a new, differently-hashed array. Read `.value` off the
69
+ refs for the same reason: context members are not auto-unwrapped in a template.
70
+
71
+ ## Page anatomy
72
+
73
+ ```
74
+ ApprovalsInbox/
75
+ Index.vue ← assembly: PageShell slots, table, tabs, pagination
76
+ context.ts ← coopting page context (shell + table + filters + shortcuts + actions)
77
+ FilterRail.vue ← pill filters + clear-all
78
+ ShortcutsHint.vue ← A / R / S icon buttons, tooltip-labelled, act on the highlighted row
79
+ ReceiptThumbnail.vue ← receipt image/placeholder cell
80
+ RowActions.vue ← per-row approve / reject / snooze icon buttons
81
+ SelectionBar.vue ← bulk approve / reject in the floating bottom panel
82
+ RejectDialog.vue ← single-row reject, required reason
83
+ BulkRejectDialog.vue ← bulk reject, required reason
84
+ SnoozeDialog.vue ← single-row snooze, date picker
85
+ ExpensePeek.vue ← sidebar workbench, stack level 1 (opens from highlight)
86
+ SubmitterPeek.vue ← stacked peek, back arrow via the shell
87
+ ```
88
+
89
+ Chrome assumed from the guides: [App Layout](../../guides/app-layout.md)
90
+ (left nav + fat footer), [Page Shell](../../guides/page-shell.md),
91
+ [Floating Bottom Panel](../../guides/floating-bottom-panel.md).
92
+
93
+ ## Action inventory
94
+
95
+ | # | Action | Trigger | Mechanism |
96
+ | --- | -------------------------------- | ------------------------------------------------------ | --------------------------------------------------------- |
97
+ | 1 | Page search (merchant/submitter) | topbar right | `filters.search` → fetch dependency |
98
+ | 2 | Filter by submitter | filter rail pill | `BbSelectPopover` single, query-aware |
99
+ | 3 | Filter by category | filter rail pill | `BbSelectPopover` multiple |
100
+ | 4 | Quick filter: amount over | filter rail pill | `BbSelectPopover` single, preset thresholds |
101
+ | 5 | Clear filters | rail right (only when active) | context `clearFilters()` |
102
+ | 6 | Switch tab | href tabs with counts | URL + fetch dependency |
103
+ | 7 | Arrow through rows | `keyboard-navigation` roving tabindex | table's own Arrow/Home/End |
104
+ | 8 | Preview an expense | highlight a row (click, Enter/Space, arrow-then-Enter) | `ctx.table.highlighted` watcher → `peekExpense` (replace) |
105
+ | 9 | Approve (one click) | row icon button, peek footer, key `A` | `approve(expense)` — API + refresh + toast |
106
+ | 10 | Reject with reason | row icon button, peek footer, key `R` | `openReject` → `RejectDialog` (required `BbTextarea`) |
107
+ | 11 | Snooze | row icon button, peek footer, key `S` | `openSnooze` → `SnoozeDialog` (`BbDatePickerInput`) |
108
+ | 12 | Select rows / select all | table checkboxes | table context |
109
+ | 13 | Bulk approve | floating bottom panel | `bulkApprove()` on `table.selected` |
110
+ | 14 | Bulk reject with reason | floating bottom panel | `BulkRejectDialog`, destructive |
111
+ | 15 | Stack a submitter | submitter cell / peek property | `stackSubmitter(id)` → shell stack, back arrow |
112
+ | 16 | Stack an expense from a profile | recent-expense row inside `SubmitterPeek` | `stackExpense(id)` → shell stack |
113
+ | 17 | View full-size receipt | peek "View receipt" link | navigation (`href`, new tab) |
114
+ | 18 | Open full expense | peek footer | navigation (`/expenses/:id`) |
115
+ | 19 | Back / close peek | shell chrome | shell stack pop / close |
116
+
117
+ Nineteen distinct actions, spanning inline one-click mutation (8),
118
+ input-gated mutation via dialog (10, 11, 14), bulk mutation (13, 14),
119
+ keyboard dispatch (7, 9, 10, 11), navigation (17, 18, 19) and contextual
120
+ drill-down (15, 16) — well past the ≥ 12 bar.
121
+
122
+ ## The code
123
+
124
+ ### context.ts
125
+
126
+ ```ts
127
+ // ApprovalsInbox/context.ts
128
+ import {
129
+ computed,
130
+ inject,
131
+ provide,
132
+ reactive,
133
+ ref,
134
+ watch,
135
+ type ComputedRef,
136
+ type InjectionKey,
137
+ type Ref,
138
+ } from 'vue';
139
+ import { useMagicKeys, whenever } from '@vueuse/core';
140
+ import {
141
+ useBbTableContext,
142
+ useConfirm,
143
+ useToast,
144
+ type BbTableContext,
145
+ } from 'bitboss-ui';
146
+ import {
147
+ usePageShellContext,
148
+ type PageShellContext,
149
+ } from '@/components/layout/usePageShellContext';
150
+ import { api } from '@/api';
151
+ import type { Expense, ExpenseCategory } from '@/types';
152
+
153
+ /** What the stacked sidebar can show. Clicking a name pushes one of these. */
154
+ export type PeekItem =
155
+ | { type: 'expense'; id: number }
156
+ | { type: 'submitter'; id: number };
157
+
158
+ export type ApprovalsTab = 'needsApproval' | 'approved' | 'rejected' | 'all';
159
+
160
+ export interface ApprovalsFilters {
161
+ search: string;
162
+ submitterId: number | null;
163
+ categories: ExpenseCategory[];
164
+ /** Preset threshold from the quick filter (`50`, `100`, `250`…), or `null`. */
165
+ amountOver: number | null;
166
+ }
167
+
168
+ export interface ApprovalsInboxContext {
169
+ // -- Coopted contexts ------------------------------------------------------
170
+ shell: PageShellContext<PeekItem>;
171
+ table: BbTableContext;
172
+ // -- Page-owned state --------------------------------------------------------
173
+ filters: ApprovalsFilters;
174
+ hasActiveFilters: ComputedRef<boolean>;
175
+ tab: Ref<ApprovalsTab>;
176
+ tabCounts: Ref<Record<ApprovalsTab, number>>;
177
+ refreshKey: Ref<number>;
178
+ dialogs: {
179
+ reject: Ref<Expense | null>;
180
+ bulkReject: Ref<boolean>;
181
+ snooze: Ref<Expense | null>;
182
+ };
183
+ /** The expense under the roving tabindex, resolved from the last fetch. */
184
+ highlightedExpense: ComputedRef<Expense | null>;
185
+ // -- Data ----------------------------------------------------------------
186
+ fetchExpenses: () => Promise<Expense[]>;
187
+ // -- Peek grammar ----------------------------------------------------------
188
+ // (peekExpense — the highlight-driven replace — is internal to the watcher
189
+ // below, not part of the public surface: leaves never open the peek
190
+ // directly, only highlight drives it.)
191
+ stackExpense: (id: number) => void;
192
+ stackSubmitter: (id: number) => void;
193
+ // -- Actions (complete: API + refresh + toast) ------------------------------
194
+ clearFilters: () => void;
195
+ approve: (expense: Expense) => Promise<void>;
196
+ openReject: (expense: Expense) => void;
197
+ reject: (expense: Expense, reason: string) => Promise<void>;
198
+ openSnooze: (expense: Expense) => void;
199
+ snooze: (expense: Expense, until: string) => Promise<void>;
200
+ bulkApprove: () => Promise<void>;
201
+ openBulkReject: () => void;
202
+ bulkReject: (reason: string) => Promise<void>;
203
+ // -- Keyboard-shortcut dispatch (mirrors the row/peek buttons) --------------
204
+ approveHighlighted: () => void;
205
+ rejectHighlighted: () => void;
206
+ snoozeHighlighted: () => void;
207
+ }
208
+
209
+ const key: InjectionKey<ApprovalsInboxContext> = Symbol('approvals-inbox');
210
+
211
+ /** Mirrors `useDeleteCmd`'s guard: skip shortcuts while the user is typing. */
212
+ const isInteractiveElementFocused = (): boolean => {
213
+ const active = document.activeElement;
214
+ if (!active) return false;
215
+ const tag = active.tagName.toLowerCase();
216
+ if (tag === 'input' || tag === 'textarea' || tag === 'select') return true;
217
+ return active.getAttribute('contenteditable') === 'true';
218
+ };
219
+
220
+ export function provideApprovalsInbox(): ApprovalsInboxContext {
221
+ const { toast } = useToast();
222
+ const { confirm } = useConfirm();
223
+
224
+ // -- Coopt the specific contexts: once, here, for the whole page. ----------
225
+ const shell = usePageShellContext<PeekItem>();
226
+ const table = useBbTableContext('approvals-table', { perPage: 25 });
227
+
228
+ // -- Page state ---------------------------------------------------------------
229
+ const filters = reactive<ApprovalsFilters>({
230
+ search: '',
231
+ submitterId: null,
232
+ categories: [],
233
+ amountOver: null,
234
+ });
235
+ const hasActiveFilters = computed(
236
+ () =>
237
+ filters.search !== '' ||
238
+ filters.submitterId !== null ||
239
+ filters.categories.length > 0 ||
240
+ filters.amountOver !== null
241
+ );
242
+ const tab = ref<ApprovalsTab>('needsApproval');
243
+ const tabCounts = ref<Record<ApprovalsTab, number>>({
244
+ needsApproval: 0,
245
+ approved: 0,
246
+ rejected: 0,
247
+ all: 0,
248
+ });
249
+ const refreshKey = ref(0);
250
+ const dialogs = {
251
+ reject: ref<Expense | null>(null),
252
+ bulkReject: ref(false),
253
+ snooze: ref<Expense | null>(null),
254
+ };
255
+
256
+ const clearFilters = () => {
257
+ filters.search = '';
258
+ filters.submitterId = null;
259
+ filters.categories = [];
260
+ filters.amountOver = null;
261
+ };
262
+
263
+ // -- Data -----------------------------------------------------------------------
264
+ // Cached so the keyboard shortcuts and the peek watcher can resolve a full
265
+ // expense from the id the table context reports.
266
+ const lastItems = ref<Expense[]>([]);
267
+ const fetchExpenses = async (): Promise<Expense[]> => {
268
+ const response = await api.expenses.list({
269
+ ...filters,
270
+ tab: tab.value,
271
+ page: table.page.value,
272
+ perPage: table.perPage.value,
273
+ });
274
+ table.total.value = response.total;
275
+ tabCounts.value = response.tabCounts;
276
+ lastItems.value = response.data;
277
+ return response.data;
278
+ };
279
+
280
+ // -- Peek grammar -----------------------------------------------------------------
281
+ // peekX replaces the stack (from the list / highlight); stackX drills down.
282
+ const peekExpense = (id: number) => shell.push({ type: 'expense', id }, true);
283
+ const stackExpense = (id: number) => shell.push({ type: 'expense', id });
284
+ const stackSubmitter = (id: number) => shell.push({ type: 'submitter', id });
285
+
286
+ // Highlighting IS the peek trigger: arrowing (or clicking) a row opens it,
287
+ // clearing the highlight closes it. `item-value="id"` on the table means
288
+ // `table.highlighted` already holds the plain id.
289
+ watch(table.highlighted, (id) => {
290
+ if (id == null) {
291
+ shell.close();
292
+ } else {
293
+ peekExpense(id as number);
294
+ }
295
+ });
296
+
297
+ const highlightedExpense = computed<Expense | null>(
298
+ () =>
299
+ lastItems.value.find(
300
+ (expense) => expense.id === table.highlighted.value
301
+ ) ?? null
302
+ );
303
+
304
+ // -- Actions ----------------------------------------------------------------------
305
+ const refresh = () => {
306
+ refreshKey.value++;
307
+ };
308
+ const clearSelection = () => {
309
+ table.selected.value = [];
310
+ };
311
+
312
+ const approve = async (expense: Expense) => {
313
+ await api.expenses.approve(expense.id);
314
+ refresh();
315
+ toast({
316
+ title: `Approved ${expense.merchant} — $${expense.amount.toFixed(2)}.`,
317
+ variant: 'success',
318
+ });
319
+ };
320
+
321
+ const openReject = (expense: Expense) => {
322
+ dialogs.reject.value = expense;
323
+ };
324
+ const reject = async (expense: Expense, reason: string) => {
325
+ await api.expenses.reject(expense.id, reason);
326
+ dialogs.reject.value = null;
327
+ refresh();
328
+ toast({ title: `Rejected ${expense.merchant}.`, variant: 'success' });
329
+ };
330
+
331
+ const openSnooze = (expense: Expense) => {
332
+ dialogs.snooze.value = expense;
333
+ };
334
+ const snooze = async (expense: Expense, until: string) => {
335
+ await api.expenses.snooze(expense.id, until);
336
+ dialogs.snooze.value = null;
337
+ refresh();
338
+ toast({ title: `${expense.merchant} snoozed.`, variant: 'success' });
339
+ };
340
+
341
+ const bulkApprove = async () => {
342
+ const ids = table.selected.value as number[];
343
+ await api.expenses.approveMany(ids);
344
+ clearSelection();
345
+ refresh();
346
+ toast({ title: `${ids.length} expenses approved.`, variant: 'success' });
347
+ };
348
+
349
+ const openBulkReject = () => {
350
+ dialogs.bulkReject.value = true;
351
+ };
352
+ const bulkReject = async (reason: string) => {
353
+ const ids = table.selected.value as number[];
354
+ const ok = await confirm({
355
+ variant: 'destructive',
356
+ title: 'Reject expenses',
357
+ text: `Reject ${ids.length} expenses? The submitters are notified.`,
358
+ yes: 'Reject',
359
+ no: 'Cancel',
360
+ });
361
+ if (!ok) return;
362
+ await api.expenses.rejectMany(ids, reason);
363
+ dialogs.bulkReject.value = false;
364
+ clearSelection();
365
+ refresh();
366
+ toast({ title: `${ids.length} expenses rejected.`, variant: 'success' });
367
+ };
368
+
369
+ // -- Keyboard-shortcut dispatch: same actions, resolved against the row
370
+ // under the roving tabindex. Guarded exactly like `useDeleteCmd`.
371
+ const keys = useMagicKeys();
372
+ const withHighlighted = (run: (expense: Expense) => void) => {
373
+ if (isInteractiveElementFocused()) return;
374
+ if (
375
+ dialogs.reject.value ||
376
+ dialogs.bulkReject.value ||
377
+ dialogs.snooze.value
378
+ )
379
+ return;
380
+ const expense = highlightedExpense.value;
381
+ if (expense) run(expense);
382
+ };
383
+ const approveHighlighted = () =>
384
+ withHighlighted((expense) => void approve(expense));
385
+ const rejectHighlighted = () => withHighlighted(openReject);
386
+ const snoozeHighlighted = () => withHighlighted(openSnooze);
387
+
388
+ whenever(keys['a'], approveHighlighted);
389
+ whenever(keys['r'], rejectHighlighted);
390
+ whenever(keys['s'], snoozeHighlighted);
391
+
392
+ const ctx: ApprovalsInboxContext = {
393
+ shell,
394
+ table,
395
+ filters,
396
+ hasActiveFilters,
397
+ tab,
398
+ tabCounts,
399
+ refreshKey,
400
+ dialogs,
401
+ highlightedExpense,
402
+ fetchExpenses,
403
+ stackExpense,
404
+ stackSubmitter,
405
+ clearFilters,
406
+ approve,
407
+ openReject,
408
+ reject,
409
+ openSnooze,
410
+ snooze,
411
+ bulkApprove,
412
+ openBulkReject,
413
+ bulkReject,
414
+ approveHighlighted,
415
+ rejectHighlighted,
416
+ snoozeHighlighted,
417
+ };
418
+ provide(key, ctx);
419
+ return ctx;
420
+ }
421
+
422
+ export function useApprovalsInbox(): ApprovalsInboxContext {
423
+ const ctx = inject(key);
424
+ if (!ctx)
425
+ throw new Error('useApprovalsInbox() called outside ApprovalsInbox');
426
+ return ctx;
427
+ }
428
+ ```
429
+
430
+ ### Index.vue — the assembly
431
+
432
+ ```vue
433
+ <!-- ApprovalsInbox/Index.vue -->
434
+ <template>
435
+ <PageShell>
436
+ <!-- Topbar: breadcrumbs left, page search right. -->
437
+ <template #topbar>
438
+ <div class="flex items-center justify-between gap-4 border-b px-4 py-2">
439
+ <!-- Breadcrumbs take the row's slack on a stable basis (min-w-0 flex-auto);
440
+ without it their overflow recompute fights the flex layout every frame. -->
441
+ <BbBreadcrumbs
442
+ class="min-w-0 flex-auto"
443
+ :items="[
444
+ { key: 'dashboard', text: 'Dashboard', to: '/dashboard' },
445
+ { key: 'finance', text: 'Finance', to: '/finance' },
446
+ { key: 'approvals', text: 'Approvals' },
447
+ ]"
448
+ />
449
+ <BbTextInput
450
+ v-model="ctx.filters.search"
451
+ class="shrink-0"
452
+ clearable
453
+ compact
454
+ hide-label
455
+ label="Search expenses"
456
+ placeholder="Search merchant or submitter…"
457
+ prepend:icon="lucide:search"
458
+ />
459
+ </div>
460
+ </template>
461
+
462
+ <div class="flex flex-col gap-3 p-4">
463
+ <FilterRail />
464
+
465
+ <div class="flex items-center justify-between gap-2">
466
+ <!-- Tabs as URL filters: counts come from the server on every fetch. -->
467
+ <BbTabs
468
+ v-model="ctx.tab.value"
469
+ compact
470
+ :items="[
471
+ {
472
+ key: 'needsApproval',
473
+ label: `Needs approval · ${ctx.tabCounts.value.needsApproval}`,
474
+ href: '?tab=needsApproval',
475
+ },
476
+ {
477
+ key: 'approved',
478
+ label: `Approved · ${ctx.tabCounts.value.approved}`,
479
+ href: '?tab=approved',
480
+ },
481
+ {
482
+ key: 'rejected',
483
+ label: `Rejected · ${ctx.tabCounts.value.rejected}`,
484
+ href: '?tab=rejected',
485
+ },
486
+ {
487
+ key: 'all',
488
+ label: `All · ${ctx.tabCounts.value.all}`,
489
+ href: '?tab=all',
490
+ },
491
+ ]"
492
+ />
493
+ <ShortcutsHint />
494
+ </div>
495
+
496
+ <BbTable
497
+ id="approvals-table"
498
+ actions
499
+ caption="Expense approvals"
500
+ :columns="columns"
501
+ compact
502
+ :dependencies="[
503
+ { ...ctx.filters },
504
+ ctx.tab.value,
505
+ ctx.refreshKey.value,
506
+ ]"
507
+ :deps-debounce-time="300"
508
+ item-value="id"
509
+ :items="ctx.fetchExpenses"
510
+ keyboard-navigation
511
+ loading-text="Loading expenses…"
512
+ :row-class="rowClass"
513
+ selectable
514
+ >
515
+ <template #receipt="{ item }">
516
+ <ReceiptThumbnail :expense="item" />
517
+ </template>
518
+
519
+ <template #merchant="{ content }">
520
+ <span class="font-medium">{{ content }}</span>
521
+ </template>
522
+
523
+ <template #submitter_name="{ item }">
524
+ <BbButton
525
+ size="sm"
526
+ variant="ghost"
527
+ @click="() => ctx.stackSubmitter(item.submitter.id)"
528
+ >
529
+ {{ item.submitter.name }}
530
+ </BbButton>
531
+ </template>
532
+
533
+ <template #category="{ item }">
534
+ <BbBadge variant="outline">{{ item.category }}</BbBadge>
535
+ </template>
536
+
537
+ <template #status="{ item }">
538
+ <BbBadge variant="outline">{{ statusLabel(item.status) }}</BbBadge>
539
+ </template>
540
+
541
+ <template #actions="{ item }">
542
+ <RowActions :expense="item" />
543
+ </template>
544
+
545
+ <template #no-data>
546
+ <div class="flex flex-col items-center gap-2 p-6 text-center">
547
+ <p class="text-sm text-gray-500">
548
+ No expenses match
549
+ {{
550
+ ctx.hasActiveFilters.value ? 'the current filters' : 'this tab'
551
+ }}.
552
+ </p>
553
+ <BbButton
554
+ v-if="ctx.hasActiveFilters.value"
555
+ variant="ghost"
556
+ @click="ctx.clearFilters"
557
+ >
558
+ Clear filters
559
+ </BbButton>
560
+ </div>
561
+ </template>
562
+ </BbTable>
563
+
564
+ <BbPagination table-id="approvals-table" />
565
+ </div>
566
+
567
+ <SelectionBar />
568
+
569
+ <!-- Stacked peek sidebar: highlight opens the expense; names drill down. -->
570
+ <template #sidebar>
571
+ <ExpensePeek
572
+ v-if="ctx.shell.current.value?.type === 'expense'"
573
+ :expense-id="ctx.shell.current.value.id"
574
+ />
575
+ <SubmitterPeek
576
+ v-else-if="ctx.shell.current.value?.type === 'submitter'"
577
+ :submitter-id="ctx.shell.current.value.id"
578
+ />
579
+ </template>
580
+
581
+ <template #dialogs>
582
+ <RejectDialog />
583
+ <BulkRejectDialog />
584
+ <SnoozeDialog />
585
+ </template>
586
+ </PageShell>
587
+ </template>
588
+
589
+ <script setup lang="ts">
590
+ import {
591
+ BbBadge,
592
+ BbBreadcrumbs,
593
+ BbButton,
594
+ BbPagination,
595
+ BbTable,
596
+ BbTabs,
597
+ BbTextInput,
598
+ } from 'bitboss-ui';
599
+ import PageShell from '@/components/layout/PageShell.vue';
600
+ import { provideApprovalsInbox } from './context';
601
+ import BulkRejectDialog from './BulkRejectDialog.vue';
602
+ import ExpensePeek from './ExpensePeek.vue';
603
+ import FilterRail from './FilterRail.vue';
604
+ import ReceiptThumbnail from './ReceiptThumbnail.vue';
605
+ import RejectDialog from './RejectDialog.vue';
606
+ import RowActions from './RowActions.vue';
607
+ import SelectionBar from './SelectionBar.vue';
608
+ import ShortcutsHint from './ShortcutsHint.vue';
609
+ import SnoozeDialog from './SnoozeDialog.vue';
610
+ import SubmitterPeek from './SubmitterPeek.vue';
611
+ import type { Expense, ExpenseStatus } from '@/types';
612
+
613
+ const ctx = provideApprovalsInbox();
614
+
615
+ const currency = new Intl.NumberFormat('en-US', {
616
+ style: 'currency',
617
+ currency: 'USD',
618
+ });
619
+ const shortDate = (value: string) =>
620
+ new Date(value).toLocaleDateString('en-US', {
621
+ month: 'short',
622
+ day: 'numeric',
623
+ });
624
+ const statusLabel = (status: ExpenseStatus) =>
625
+ ({
626
+ needsApproval: 'Needs approval',
627
+ approved: 'Approved',
628
+ rejected: 'Rejected',
629
+ snoozed: 'Snoozed',
630
+ })[status];
631
+
632
+ const columns = [
633
+ { key: 'receipt', label: 'Receipt', width: 48 },
634
+ { key: 'merchant', label: 'Merchant' },
635
+ { key: 'submitter.name', label: 'Submitter' },
636
+ { key: 'category', label: 'Category' },
637
+ {
638
+ key: 'amount',
639
+ label: 'Amount',
640
+ align: 'right' as const,
641
+ formatter: (value: number) => currency.format(value),
642
+ },
643
+ { key: 'submittedAt', label: 'Submitted', formatter: shortDate },
644
+ { key: 'status', label: 'Status' },
645
+ ];
646
+
647
+ // Highlight ships unstyled — paint it via the public row-class API.
648
+ const rowClass = (item: Expense) =>
649
+ ctx.table.highlighted.value === item.id
650
+ ? 'bg-indigo-50 dark:bg-indigo-950/20'
651
+ : undefined;
652
+ </script>
653
+ ```
654
+
655
+ ### FilterRail.vue
656
+
657
+ ```vue
658
+ <!-- ApprovalsInbox/FilterRail.vue -->
659
+ <template>
660
+ <div class="flex flex-wrap items-center gap-2">
661
+ <!-- Submitter: single, query-aware search against the API. -->
662
+ <BbSelectPopover
663
+ v-model="ctx.filters.submitterId"
664
+ item-text="name"
665
+ item-value="id"
666
+ :items="searchSubmitters"
667
+ >
668
+ <template #activator="{ props }">
669
+ <BbButton
670
+ v-bind="props"
671
+ append:icon="lucide:chevron-down"
672
+ size="sm"
673
+ variant="outline"
674
+ >
675
+ {{ submitterLabel }}
676
+ </BbButton>
677
+ </template>
678
+ </BbSelectPopover>
679
+
680
+ <!-- Category: multi-select pill. -->
681
+ <BbSelectPopover
682
+ v-model="ctx.filters.categories"
683
+ :items="['travel', 'meals', 'software', 'office', 'client', 'other']"
684
+ multiple
685
+ >
686
+ <template #activator="{ props }">
687
+ <BbButton
688
+ v-bind="props"
689
+ append:icon="lucide:chevron-down"
690
+ size="sm"
691
+ variant="outline"
692
+ >
693
+ Category{{
694
+ ctx.filters.categories.length
695
+ ? ` · ${ctx.filters.categories.length}`
696
+ : ''
697
+ }}
698
+ </BbButton>
699
+ </template>
700
+ </BbSelectPopover>
701
+
702
+ <!-- Amount over: a quick-filter pill from preset thresholds. -->
703
+ <BbSelectPopover
704
+ v-model="ctx.filters.amountOver"
705
+ disable-writing
706
+ :items="[50, 100, 250, 500, 1000]"
707
+ width="160px"
708
+ >
709
+ <template #activator="{ props }">
710
+ <BbButton
711
+ v-bind="props"
712
+ append:icon="lucide:chevron-down"
713
+ size="sm"
714
+ variant="outline"
715
+ >
716
+ {{
717
+ ctx.filters.amountOver
718
+ ? `Over $${ctx.filters.amountOver}`
719
+ : 'Amount'
720
+ }}
721
+ </BbButton>
722
+ </template>
723
+ </BbSelectPopover>
724
+
725
+ <!-- Clear-all renders only while something is active. -->
726
+ <BbButton
727
+ v-if="ctx.hasActiveFilters.value"
728
+ class="ml-auto"
729
+ prepend:icon="lucide:x"
730
+ size="sm"
731
+ variant="ghost"
732
+ @click="ctx.clearFilters"
733
+ >
734
+ Clear filters
735
+ </BbButton>
736
+ </div>
737
+ </template>
738
+
739
+ <script setup lang="ts">
740
+ import { computed, ref, watchEffect } from 'vue';
741
+ import { BbButton, BbSelectPopover } from 'bitboss-ui';
742
+ import { useApprovalsInbox } from './context';
743
+ import { api } from '@/api';
744
+ import type { Submitter } from '@/types';
745
+
746
+ const ctx = useApprovalsInbox();
747
+
748
+ const searchSubmitters = (query: string): Promise<Submitter[]> =>
749
+ api.submitters.list({ search: query });
750
+
751
+ // The trigger labels itself from page state (a standalone popover with a
752
+ // seeded model stays lazy and has no resolvable `text` before first open).
753
+ const selectedSubmitter = ref<Submitter | null>(null);
754
+ watchEffect(async () => {
755
+ selectedSubmitter.value =
756
+ ctx.filters.submitterId == null
757
+ ? null
758
+ : await api.submitters.get(ctx.filters.submitterId);
759
+ });
760
+ const submitterLabel = computed(
761
+ () => selectedSubmitter.value?.name ?? 'Submitter'
762
+ );
763
+ </script>
764
+ ```
765
+
766
+ ### ShortcutsHint.vue
767
+
768
+ ```vue
769
+ <!-- ApprovalsInbox/ShortcutsHint.vue -->
770
+ <template>
771
+ <div class="flex items-center gap-1">
772
+ <span class="mr-1 text-xs text-gray-500">Shortcuts</span>
773
+ <BbTooltip>
774
+ <template #activator="{ props }">
775
+ <BbButton
776
+ v-bind="props"
777
+ aria-label="Approve highlighted expense"
778
+ :disabled="!ctx.highlightedExpense.value"
779
+ icon="lucide:check"
780
+ size="xs"
781
+ variant="ghost"
782
+ @click="ctx.approveHighlighted"
783
+ />
784
+ </template>
785
+ <span class="flex items-center gap-1.5">
786
+ Approve
787
+ <kbd
788
+ class="rounded border border-current px-1 font-mono text-[10px] leading-4 opacity-75"
789
+ >A</kbd
790
+ >
791
+ </span>
792
+ </BbTooltip>
793
+ <BbTooltip>
794
+ <template #activator="{ props }">
795
+ <BbButton
796
+ v-bind="props"
797
+ aria-label="Reject highlighted expense"
798
+ :disabled="!ctx.highlightedExpense.value"
799
+ icon="lucide:x"
800
+ size="xs"
801
+ variant="ghost"
802
+ @click="ctx.rejectHighlighted"
803
+ />
804
+ </template>
805
+ <span class="flex items-center gap-1.5">
806
+ Reject
807
+ <kbd
808
+ class="rounded border border-current px-1 font-mono text-[10px] leading-4 opacity-75"
809
+ >R</kbd
810
+ >
811
+ </span>
812
+ </BbTooltip>
813
+ <BbTooltip>
814
+ <template #activator="{ props }">
815
+ <BbButton
816
+ v-bind="props"
817
+ aria-label="Snooze highlighted expense"
818
+ :disabled="!ctx.highlightedExpense.value"
819
+ icon="lucide:clock"
820
+ size="xs"
821
+ variant="ghost"
822
+ @click="ctx.snoozeHighlighted"
823
+ />
824
+ </template>
825
+ <span class="flex items-center gap-1.5">
826
+ Snooze
827
+ <kbd
828
+ class="rounded border border-current px-1 font-mono text-[10px] leading-4 opacity-75"
829
+ >S</kbd
830
+ >
831
+ </span>
832
+ </BbTooltip>
833
+ </div>
834
+ </template>
835
+
836
+ <script setup lang="ts">
837
+ import { BbButton, BbTooltip } from 'bitboss-ui';
838
+ import { useApprovalsInbox } from './context';
839
+
840
+ const ctx = useApprovalsInbox();
841
+ </script>
842
+ ```
843
+
844
+ ### ReceiptThumbnail.vue
845
+
846
+ ```vue
847
+ <!-- ApprovalsInbox/ReceiptThumbnail.vue -->
848
+ <template>
849
+ <img
850
+ v-if="expense.receiptUrl"
851
+ :alt="`Receipt from ${expense.merchant}`"
852
+ class="h-8 w-8 rounded-[var(--bb-radius)] border border-gray-200 object-cover dark:border-gray-700"
853
+ :src="expense.receiptUrl"
854
+ />
855
+ <div
856
+ v-else
857
+ aria-hidden="true"
858
+ class="flex h-8 w-8 items-center justify-center rounded-[var(--bb-radius)] border border-dashed border-gray-300 text-gray-400 dark:border-gray-600"
859
+ >
860
+ <BbIcon icon="lucide:receipt" size="14" />
861
+ </div>
862
+ </template>
863
+
864
+ <script setup lang="ts">
865
+ import { BbIcon } from 'bitboss-ui';
866
+ import type { Expense } from '@/types';
867
+
868
+ defineProps<{ expense: Expense }>();
869
+ </script>
870
+ ```
871
+
872
+ ### RowActions.vue
873
+
874
+ ```vue
875
+ <!-- ApprovalsInbox/RowActions.vue -->
876
+ <template>
877
+ <div class="flex items-center gap-1">
878
+ <BbTooltip text="Approve">
879
+ <template #activator="{ props }">
880
+ <BbButton
881
+ v-bind="props"
882
+ aria-label="Approve"
883
+ :disabled="resolved"
884
+ icon="lucide:check"
885
+ size="xs"
886
+ variant="ghost"
887
+ @click="() => ctx.approve(expense)"
888
+ />
889
+ </template>
890
+ </BbTooltip>
891
+ <BbTooltip text="Reject">
892
+ <template #activator="{ props }">
893
+ <BbButton
894
+ v-bind="props"
895
+ aria-label="Reject"
896
+ :disabled="resolved"
897
+ icon="lucide:x"
898
+ size="xs"
899
+ variant="ghost"
900
+ @click="() => ctx.openReject(expense)"
901
+ />
902
+ </template>
903
+ </BbTooltip>
904
+ <BbTooltip text="Snooze">
905
+ <template #activator="{ props }">
906
+ <BbButton
907
+ v-bind="props"
908
+ aria-label="Snooze"
909
+ :disabled="resolved"
910
+ icon="lucide:clock"
911
+ size="xs"
912
+ variant="ghost"
913
+ @click="() => ctx.openSnooze(expense)"
914
+ />
915
+ </template>
916
+ </BbTooltip>
917
+ </div>
918
+ </template>
919
+
920
+ <script setup lang="ts">
921
+ import { computed } from 'vue';
922
+ import { BbButton, BbTooltip } from 'bitboss-ui';
923
+ import { useApprovalsInbox } from './context';
924
+ import type { Expense } from '@/types';
925
+
926
+ const props = defineProps<{ expense: Expense }>();
927
+
928
+ const ctx = useApprovalsInbox();
929
+
930
+ const resolved = computed(
931
+ () =>
932
+ props.expense.status === 'approved' || props.expense.status === 'rejected'
933
+ );
934
+ </script>
935
+ ```
936
+
937
+ ### RejectDialog.vue
938
+
939
+ ```vue
940
+ <!-- ApprovalsInbox/RejectDialog.vue -->
941
+ <template>
942
+ <BbDialog
943
+ :model-value="expense !== null"
944
+ size="sm"
945
+ :title="expense ? `Reject — ${expense.merchant}` : ''"
946
+ @show="reason = ''"
947
+ @update:model-value="close"
948
+ >
949
+ <form
950
+ v-if="expense"
951
+ class="flex flex-col gap-3"
952
+ novalidate
953
+ @submit.prevent="submit"
954
+ >
955
+ <BbTextarea
956
+ v-model="reason"
957
+ label="Reason"
958
+ label-mode="outside"
959
+ placeholder="Why is this expense being rejected?"
960
+ rows="3"
961
+ />
962
+ <div class="mt-1 flex justify-end gap-2">
963
+ <BbButton type="button" variant="ghost" @click="close">Cancel</BbButton>
964
+ <BbButton
965
+ :disabled="reason.trim().length < 3"
966
+ type="submit"
967
+ variant="destructive"
968
+ >
969
+ Reject expense
970
+ </BbButton>
971
+ </div>
972
+ </form>
973
+ </BbDialog>
974
+ </template>
975
+
976
+ <script setup lang="ts">
977
+ import { computed, ref } from 'vue';
978
+ import { BbButton, BbDialog, BbTextarea } from 'bitboss-ui';
979
+ import { useApprovalsInbox } from './context';
980
+
981
+ const ctx = useApprovalsInbox();
982
+
983
+ // The dialog's subject lives in the page context — the row action and the
984
+ // peek's reject button both just assign it.
985
+ const expense = computed(() => ctx.dialogs.reject.value);
986
+ const close = () => {
987
+ ctx.dialogs.reject.value = null;
988
+ };
989
+
990
+ const reason = ref('');
991
+ const submit = () =>
992
+ expense.value ? ctx.reject(expense.value, reason.value.trim()) : undefined;
993
+ </script>
994
+ ```
995
+
996
+ ### BulkRejectDialog.vue
997
+
998
+ ```vue
999
+ <!-- ApprovalsInbox/BulkRejectDialog.vue -->
1000
+ <template>
1001
+ <BbDialog
1002
+ :model-value="ctx.dialogs.bulkReject.value"
1003
+ size="sm"
1004
+ :title="`Reject ${count} expenses`"
1005
+ @show="reason = ''"
1006
+ @update:model-value="close"
1007
+ >
1008
+ <form class="flex flex-col gap-3" novalidate @submit.prevent="submit">
1009
+ <BbTextarea
1010
+ v-model="reason"
1011
+ label="Reason"
1012
+ label-mode="outside"
1013
+ placeholder="Applied to every selected expense."
1014
+ rows="3"
1015
+ />
1016
+ <div class="mt-1 flex justify-end gap-2">
1017
+ <BbButton type="button" variant="ghost" @click="close">Cancel</BbButton>
1018
+ <BbButton
1019
+ :disabled="reason.trim().length < 3"
1020
+ type="submit"
1021
+ variant="destructive"
1022
+ >
1023
+ Reject {{ count }} expenses
1024
+ </BbButton>
1025
+ </div>
1026
+ </form>
1027
+ </BbDialog>
1028
+ </template>
1029
+
1030
+ <script setup lang="ts">
1031
+ import { computed, ref } from 'vue';
1032
+ import { BbButton, BbDialog, BbTextarea } from 'bitboss-ui';
1033
+ import { useApprovalsInbox } from './context';
1034
+
1035
+ const ctx = useApprovalsInbox();
1036
+
1037
+ const count = computed(() => (ctx.table.selected.value as number[]).length);
1038
+ const close = () => {
1039
+ ctx.dialogs.bulkReject.value = false;
1040
+ };
1041
+
1042
+ const reason = ref('');
1043
+ const submit = () => ctx.bulkReject(reason.value.trim());
1044
+ </script>
1045
+ ```
1046
+
1047
+ ### SnoozeDialog.vue
1048
+
1049
+ ```vue
1050
+ <!-- ApprovalsInbox/SnoozeDialog.vue -->
1051
+ <template>
1052
+ <BbDialog
1053
+ :model-value="expense !== null"
1054
+ size="xs"
1055
+ :title="expense ? `Snooze — ${expense.merchant}` : ''"
1056
+ @show="until = tomorrow"
1057
+ @update:model-value="close"
1058
+ >
1059
+ <form
1060
+ v-if="expense"
1061
+ class="flex flex-col gap-3"
1062
+ novalidate
1063
+ @submit.prevent="submit"
1064
+ >
1065
+ <BbDatePickerInput
1066
+ v-model="until"
1067
+ floating
1068
+ label="Snooze until"
1069
+ label-mode="outside"
1070
+ :min="tomorrow"
1071
+ />
1072
+ <div class="mt-1 flex justify-end gap-2">
1073
+ <BbButton type="button" variant="ghost" @click="close">Cancel</BbButton>
1074
+ <BbButton type="submit" variant="secondary">Snooze</BbButton>
1075
+ </div>
1076
+ </form>
1077
+ </BbDialog>
1078
+ </template>
1079
+
1080
+ <script setup lang="ts">
1081
+ import { computed, ref } from 'vue';
1082
+ import { BbButton, BbDatePickerInput, BbDialog } from 'bitboss-ui';
1083
+ import { useApprovalsInbox } from './context';
1084
+
1085
+ const ctx = useApprovalsInbox();
1086
+
1087
+ const expense = computed(() => ctx.dialogs.snooze.value);
1088
+ const close = () => {
1089
+ ctx.dialogs.snooze.value = null;
1090
+ };
1091
+
1092
+ const tomorrow = new Date(Date.now() + 86_400_000).toISOString().slice(0, 10);
1093
+ const until = ref(tomorrow);
1094
+ const submit = () =>
1095
+ expense.value ? ctx.snooze(expense.value, until.value) : undefined;
1096
+ </script>
1097
+ ```
1098
+
1099
+ ### SelectionBar.vue
1100
+
1101
+ ```vue
1102
+ <!-- ApprovalsInbox/SelectionBar.vue -->
1103
+ <template>
1104
+ <FloatingBottomPanel :open="selectedCount > 0">
1105
+ <span class="px-2 text-sm">{{ selectedCount }} selected</span>
1106
+ <BbButton
1107
+ prepend:icon="lucide:check"
1108
+ size="sm"
1109
+ variant="ghost"
1110
+ @click="ctx.bulkApprove"
1111
+ >
1112
+ Approve
1113
+ </BbButton>
1114
+ <div class="floating-bottom-panel__right flex items-center gap-1">
1115
+ <BbButton size="sm" variant="destructive" @click="ctx.openBulkReject">
1116
+ Reject
1117
+ </BbButton>
1118
+ <BbButton
1119
+ aria-label="Clear selection"
1120
+ icon="lucide:x"
1121
+ size="sm"
1122
+ variant="ghost"
1123
+ @click="clearSelection"
1124
+ />
1125
+ </div>
1126
+ </FloatingBottomPanel>
1127
+ </template>
1128
+
1129
+ <script setup lang="ts">
1130
+ import { computed } from 'vue';
1131
+ import { BbButton } from 'bitboss-ui';
1132
+ import FloatingBottomPanel from '@/components/layout/FloatingBottomPanel.vue';
1133
+ import { useApprovalsInbox } from './context';
1134
+
1135
+ const ctx = useApprovalsInbox();
1136
+
1137
+ const selectedCount = computed(() => ctx.table.selected.value?.length ?? 0);
1138
+ const clearSelection = () => {
1139
+ ctx.table.selected.value = [];
1140
+ };
1141
+ </script>
1142
+ ```
1143
+
1144
+ ### ExpensePeek.vue
1145
+
1146
+ ```vue
1147
+ <!-- ApprovalsInbox/ExpensePeek.vue -->
1148
+ <template>
1149
+ <div v-if="expense" class="flex flex-col gap-4 text-sm">
1150
+ <!-- Header: identity + amount + status. -->
1151
+ <header class="flex flex-col gap-1.5">
1152
+ <div class="flex items-center justify-between gap-2">
1153
+ <h2 class="text-base font-semibold">{{ expense.merchant }}</h2>
1154
+ <BbBadge variant="outline">{{ statusLabel(expense.status) }}</BbBadge>
1155
+ </div>
1156
+ <p class="text-xl font-semibold">{{ currency.format(expense.amount) }}</p>
1157
+ <p class="text-xs text-gray-500">
1158
+ Submitted {{ longDate(expense.submittedAt) }}
1159
+ </p>
1160
+ </header>
1161
+
1162
+ <!-- Receipt: bigger than the row thumbnail, with a full-size link out. -->
1163
+ <section class="flex flex-col gap-1.5">
1164
+ <h3 class="text-xs font-semibold uppercase tracking-wide text-gray-500">
1165
+ Receipt
1166
+ </h3>
1167
+ <img
1168
+ v-if="expense.receiptUrl"
1169
+ :alt="`Receipt from ${expense.merchant}`"
1170
+ class="h-40 w-full rounded-[var(--bb-radius)] border border-gray-200 object-cover dark:border-gray-700"
1171
+ :src="expense.receiptUrl"
1172
+ />
1173
+ <p v-else class="text-xs text-gray-500">No receipt attached.</p>
1174
+ <BbButton
1175
+ v-if="expense.receiptUrl"
1176
+ append:icon="lucide:arrow-up-right"
1177
+ :href="expense.receiptUrl"
1178
+ size="sm"
1179
+ target="_blank"
1180
+ variant="ghost"
1181
+ >
1182
+ View full-size receipt
1183
+ </BbButton>
1184
+ </section>
1185
+
1186
+ <!-- Properties: submitter name drills DOWN — stacked peek, back arrow. -->
1187
+ <dl class="grid grid-cols-[auto_1fr] gap-x-4 gap-y-1.5">
1188
+ <dt class="text-gray-500">Submitter</dt>
1189
+ <dd>
1190
+ <BbButton
1191
+ size="sm"
1192
+ variant="link"
1193
+ @click="() => ctx.stackSubmitter(expense!.submitter.id)"
1194
+ >
1195
+ {{ expense.submitter.name }}
1196
+ </BbButton>
1197
+ </dd>
1198
+ <dt class="text-gray-500">Category</dt>
1199
+ <dd class="capitalize">{{ expense.category }}</dd>
1200
+ <dt class="text-gray-500">Memo</dt>
1201
+ <dd>{{ expense.memo ?? '—' }}</dd>
1202
+ </dl>
1203
+
1204
+ <!-- Activity feed. -->
1205
+ <section class="flex flex-col gap-1.5">
1206
+ <h3 class="text-xs font-semibold uppercase tracking-wide text-gray-500">
1207
+ Activity
1208
+ </h3>
1209
+ <ul class="flex flex-col gap-2">
1210
+ <li
1211
+ v-for="entry in expense.activity"
1212
+ :key="entry.id"
1213
+ class="flex gap-2"
1214
+ >
1215
+ <BbIcon
1216
+ class="mt-0.5 shrink-0 text-gray-400"
1217
+ :icon="entry.icon"
1218
+ size="14"
1219
+ />
1220
+ <div class="flex flex-col">
1221
+ <span>{{ entry.text }}</span>
1222
+ <span class="text-xs text-gray-500"
1223
+ >{{ entry.actor }} · {{ longDate(entry.at) }}</span
1224
+ >
1225
+ </div>
1226
+ </li>
1227
+ </ul>
1228
+ </section>
1229
+
1230
+ <!-- Peek is a workbench: the same three actions as the row, plus the real page. -->
1231
+ <footer class="mt-2 flex flex-wrap items-center gap-2 border-t pt-3">
1232
+ <BbButton
1233
+ :disabled="resolved"
1234
+ prepend:icon="lucide:check"
1235
+ size="sm"
1236
+ variant="secondary"
1237
+ @click="() => ctx.approve(expense!)"
1238
+ >
1239
+ Approve
1240
+ </BbButton>
1241
+ <BbButton
1242
+ :disabled="resolved"
1243
+ prepend:icon="lucide:x"
1244
+ size="sm"
1245
+ variant="destructive"
1246
+ @click="() => ctx.openReject(expense!)"
1247
+ >
1248
+ Reject
1249
+ </BbButton>
1250
+ <BbButton
1251
+ :disabled="resolved"
1252
+ prepend:icon="lucide:clock"
1253
+ size="sm"
1254
+ variant="outline"
1255
+ @click="() => ctx.openSnooze(expense!)"
1256
+ >
1257
+ Snooze
1258
+ </BbButton>
1259
+ <BbButton
1260
+ append:icon="lucide:arrow-up-right"
1261
+ class="ml-auto"
1262
+ size="sm"
1263
+ :to="`/expenses/${expense.id}`"
1264
+ variant="ghost"
1265
+ >
1266
+ Open full expense
1267
+ </BbButton>
1268
+ </footer>
1269
+ </div>
1270
+
1271
+ <div v-else class="flex justify-center p-8">
1272
+ <BbSpinner />
1273
+ </div>
1274
+ </template>
1275
+
1276
+ <script setup lang="ts">
1277
+ import { computed, ref, watchEffect } from 'vue';
1278
+ import { BbBadge, BbButton, BbIcon, BbSpinner } from 'bitboss-ui';
1279
+ import { useApprovalsInbox } from './context';
1280
+ import { api } from '@/api';
1281
+ import type { ExpenseDetail, ExpenseStatus } from '@/types';
1282
+
1283
+ const props = defineProps<{ expenseId: number }>();
1284
+
1285
+ const ctx = useApprovalsInbox();
1286
+
1287
+ // Re-fetches whenever the stack shows a different expense; refreshKey makes
1288
+ // approve/reject/snooze reflect here immediately.
1289
+ const expense = ref<ExpenseDetail | null>(null);
1290
+ watchEffect(async () => {
1291
+ void ctx.refreshKey.value;
1292
+ expense.value = await api.expenses.get(props.expenseId);
1293
+ });
1294
+
1295
+ const resolved = computed(
1296
+ () =>
1297
+ expense.value?.status === 'approved' || expense.value?.status === 'rejected'
1298
+ );
1299
+
1300
+ const currency = new Intl.NumberFormat('en-US', {
1301
+ style: 'currency',
1302
+ currency: 'USD',
1303
+ });
1304
+ const longDate = (value: string) =>
1305
+ new Date(value).toLocaleDateString('en-US', {
1306
+ month: 'short',
1307
+ day: 'numeric',
1308
+ year: 'numeric',
1309
+ });
1310
+ const statusLabel = (status: ExpenseStatus) =>
1311
+ ({
1312
+ needsApproval: 'Needs approval',
1313
+ approved: 'Approved',
1314
+ rejected: 'Rejected',
1315
+ snoozed: 'Snoozed',
1316
+ })[status];
1317
+ </script>
1318
+ ```
1319
+
1320
+ ### SubmitterPeek.vue
1321
+
1322
+ ```vue
1323
+ <!-- ApprovalsInbox/SubmitterPeek.vue -->
1324
+ <template>
1325
+ <div v-if="submitter" class="flex flex-col gap-4 text-sm">
1326
+ <header class="flex items-center gap-3">
1327
+ <BbAvatar :alt="submitter.name" :src="submitter.avatarUrl" />
1328
+ <div class="flex flex-col">
1329
+ <h2 class="text-base font-semibold">{{ submitter.name }}</h2>
1330
+ <p class="text-xs text-gray-500">
1331
+ {{ submitter.email }} · {{ submitter.team }}
1332
+ </p>
1333
+ </div>
1334
+ </header>
1335
+
1336
+ <!-- Stat strip. -->
1337
+ <div class="grid grid-cols-3 gap-2">
1338
+ <div class="rounded-[var(--bb-radius)] border p-2">
1339
+ <p class="text-xs text-gray-500">Submitted (YTD)</p>
1340
+ <p class="font-semibold">
1341
+ {{ currency.format(submitter.totalSubmitted) }}
1342
+ </p>
1343
+ </div>
1344
+ <div class="rounded-[var(--bb-radius)] border p-2">
1345
+ <p class="text-xs text-gray-500">Pending</p>
1346
+ <p class="font-semibold">{{ submitter.pendingCount }}</p>
1347
+ </div>
1348
+ <div class="rounded-[var(--bb-radius)] border p-2">
1349
+ <p class="text-xs text-gray-500">Approval rate</p>
1350
+ <p class="font-semibold">{{ submitter.approvalRate }}%</p>
1351
+ </div>
1352
+ </div>
1353
+
1354
+ <!-- Recent expenses: names drill down again — the stack keeps growing. -->
1355
+ <section class="flex flex-col gap-1.5">
1356
+ <h3 class="text-xs font-semibold uppercase tracking-wide text-gray-500">
1357
+ Recent expenses
1358
+ </h3>
1359
+ <ul class="flex flex-col">
1360
+ <li
1361
+ v-for="recent in submitter.recentExpenses"
1362
+ :key="recent.id"
1363
+ class="flex items-center justify-between gap-2 border-b py-1.5 last:border-b-0"
1364
+ >
1365
+ <BbButton
1366
+ size="sm"
1367
+ variant="link"
1368
+ @click="() => ctx.stackExpense(recent.id)"
1369
+ >
1370
+ {{ recent.merchant }}
1371
+ </BbButton>
1372
+ <BbBadge variant="outline">{{ recent.status }}</BbBadge>
1373
+ <span class="text-xs text-gray-500">{{
1374
+ currency.format(recent.amount)
1375
+ }}</span>
1376
+ </li>
1377
+ </ul>
1378
+ </section>
1379
+
1380
+ <footer class="mt-2 flex items-center gap-2 border-t pt-3">
1381
+ <BbButton
1382
+ append:icon="lucide:arrow-up-right"
1383
+ size="sm"
1384
+ :to="`/people/${submitter.id}`"
1385
+ variant="ghost"
1386
+ >
1387
+ Open profile
1388
+ </BbButton>
1389
+ </footer>
1390
+ </div>
1391
+
1392
+ <div v-else class="flex justify-center p-8">
1393
+ <BbSpinner />
1394
+ </div>
1395
+ </template>
1396
+
1397
+ <script setup lang="ts">
1398
+ import { ref, watchEffect } from 'vue';
1399
+ import { BbAvatar, BbBadge, BbButton, BbSpinner } from 'bitboss-ui';
1400
+ import { useApprovalsInbox } from './context';
1401
+ import { api } from '@/api';
1402
+ import type { SubmitterDetail } from '@/types';
1403
+
1404
+ const props = defineProps<{ submitterId: number }>();
1405
+
1406
+ const ctx = useApprovalsInbox();
1407
+
1408
+ const submitter = ref<SubmitterDetail | null>(null);
1409
+ watchEffect(async () => {
1410
+ submitter.value = await api.submitters.getDetail(props.submitterId);
1411
+ });
1412
+
1413
+ const currency = new Intl.NumberFormat('en-US', {
1414
+ style: 'currency',
1415
+ currency: 'USD',
1416
+ });
1417
+ </script>
1418
+ ```
1419
+
1420
+ ## Why it is built this way
1421
+
1422
+ - **The context coopts, leaves consume.** `shell` and `table` are joined
1423
+ once in `provideApprovalsInbox()`; twelve components share filters,
1424
+ selection, highlight, the peek stack, the keyboard shortcuts and every
1425
+ action through one `useApprovalsInbox()` call.
1426
+ - **Highlight is the trigger, not a bespoke click handler.** Per the
1427
+ `BbTable` guide, `highlighted` is "a parallel, UI-intent state…
1428
+ independent of selection" that ships unstyled — this recipe is exactly
1429
+ the case the guide's Row Highlight section describes: a `watch` on
1430
+ `table.highlighted` is the entire wiring between "arrow to a row" and
1431
+ "the peek is open", and `keyboard-navigation`'s Enter/Space "activate…
1432
+ through the same path as a mouse click" means the mouse and the keyboard
1433
+ share one code path for free.
1434
+ - **`item-value="id"`** is what lets `table.highlighted` (and
1435
+ `table.selected`) hold plain ids instead of whole objects — the keyboard
1436
+ handler and the peek both resolve the full `Expense` from a small
1437
+ `lastItems` cache populated by `fetchExpenses`, never from the table's
1438
+ internal row wrapper.
1439
+ - **One dispatch path per action, three entry points.** `approve`,
1440
+ `openReject` and `openSnooze` are called identically from `RowActions`,
1441
+ `ExpensePeek`'s footer, and the `A`/`R`/`S` keyboard handlers
1442
+ (`approveHighlighted` etc. are the same functions, resolved against
1443
+ `highlightedExpense` instead of a row prop) — there is exactly one place
1444
+ each action's API call, refresh and toast live.
1445
+ - **Reason and date are dialogs, not confirms.** Per the pattern catalog
1446
+ (§6.2), "anything needing input opens a `BbDialog`" — reject needs a
1447
+ typed reason, snooze needs a date, so both get a small dialog whose
1448
+ open-state is the subject itself (`ctx.dialogs.reject` holds the
1449
+ `Expense`, not a boolean), exactly like the flagship's
1450
+ `RecordPaymentDialog`. Bulk reject is destructive **and** needs input,
1451
+ so it layers a `useConfirm` on top of the dialog's own submit.
1452
+ - **The shortcut guard mirrors `useDeleteCmd`.** `isInteractiveElementFocused()`
1453
+ is copied verbatim from the Inertia Helpers guide's `useDeleteCmd` (which
1454
+ the guide notes "works on any platform") so typing a rejection reason
1455
+ never fires `R`; the handler also bails while any dialog is open.
1456
+ - **`peekX` vs `stackX` is the whole stack grammar**, unchanged from the
1457
+ flagship: highlighting always **replaces** (`peekExpense`, `true`),
1458
+ clicking a submitter's name always **pushes** (`stackSubmitter`), and the
1459
+ shell renders the back arrow once depth > 1 — from a row, from inside
1460
+ the expense peek, or drilling back from the submitter peek's own recent
1461
+ expenses.
1462
+ - **Sizing:** topbar and rail follow `md`-first; `sm`/`xs` appear exactly
1463
+ where the doctrine allows — table rows (`xs`, the densest surface), the
1464
+ shortcut bar (`xs`), the peek footers and the bulk bar (`sm`).
1465
+ - **No `variant="primary"` on this page.** Triage has no "create" action —
1466
+ the one-primary-action rule is satisfied vacuously; every action here is
1467
+ either a one-click mutation, a gated mutation via dialog, or navigation.
1468
+
1469
+ ## Variations
1470
+
1471
+ - **No snooze**: drop `SnoozeDialog.vue`, the `S` shortcut, and the
1472
+ `snoozed` tab state — the remaining approve/reject pair still clears the
1473
+ ≥ 12 action bar on its own via the bulk/keyboard/peek spread.
1474
+ - **Auto-advance after action**: after `approve`/`reject` resolves, call
1475
+ `table.highlighted.value = nextExpenseId` (the id following the acted-on
1476
+ row in `lastItems`) so triage keeps moving without a re-highlight —
1477
+ the classic "Superhuman" flow.
1478
+ - **Per-category routing**: seed `filters.categories` from a saved view
1479
+ per approver role (a store-backed default) instead of starting empty.