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,1314 @@
1
+ ---
2
+ title: Records Workspace (Nuxt)
3
+ summary: Full-anatomy invoices workspace for Nuxt — breadcrumbs + page search, pill filter rail, href tabs with counts, one-click status cells, bulk bottom panel, and a stacked peek sidebar, filters URL-synced and data fetched with useAsyncData, all through one coopting page context.
4
+ ---
5
+
6
+ # Recipe: Records Workspace (Nuxt)
7
+
8
+ The flagship advanced-page recipe adapted for **Nuxt**: the same Stripe-
9
+ invoices × Linear list workspace — app chrome, breadcrumbs + page search,
10
+ pill filter rail, href tabs with live counts, a dense server-paged table, a
11
+ floating bulk-action bar, and a stacked peek sidebar — but filters and the
12
+ active tab live in the URL and the list loads through `useAsyncData`
13
+ watching `route.query`. Anatomy, components, the context shape, copy and
14
+ data are identical to the Vue recipe; only the data/URL/mutation layer
15
+ changes.
16
+
17
+ Sibling recipes: [Vue](../vue/records-workspace.md) ·
18
+ [Inertia](../inertia/records-workspace.md).
19
+
20
+ ## Prerequisites
21
+
22
+ - `<BbConfirm />` and `<BbToast />` mounted once in `app.vue`.
23
+ - [App Layout](../../guides/app-layout.md), [Page Shell](../../guides/page-shell.md)
24
+ and [Floating Bottom Panel](../../guides/floating-bottom-panel.md) copied
25
+ into `src/components/layout/` per their guides — every recipe page assumes
26
+ this chrome exists and renders inside it.
27
+ - Server routes: `GET /api/invoices` (accepts `search`, `status[]`,
28
+ `customerId`, `dueBetween[]`, `tab`, `page`, `perPage`, returns
29
+ `{ data, total, tabCounts }`), plus the mutation routes referenced below
30
+ (`PATCH /api/invoices/:id`, `POST /api/invoices/:id/duplicate`, …).
31
+
32
+ ## Key ideas
33
+
34
+ - **One coopting page context.** `provideInvoicesWorkspace()` joins the
35
+ page-shell stack and the table context once, owns filters/tab/dialogs,
36
+ and exposes complete actions. Every leaf calls `useInvoicesWorkspace()`
37
+ and nothing else — zero prop drilling anywhere on the page.
38
+ - **Filters and tab live in the URL, not in local refs.** They are seeded
39
+ from `route.query` at setup and every change writes back through
40
+ `navigateTo` — the page is bookmarkable and survives reload.
41
+ - **`useAsyncData` watches `route.query`.** That single watch source is
42
+ the whole refetch trigger — filters, tab and page changes all funnel
43
+ through the URL first, so there is exactly one fetch path.
44
+ - **The table keeps its selection/paging context.** `useBbTableContext`
45
+ still owns `page`/`perPage`/`selected`/`total` by id — only the _items_
46
+ become a resolved array (`:items` + `:loading`) instead of an items
47
+ function, since the page now owns the fetch.
48
+ - **Clicking the name of a thing peeks it.** Invoice number → invoice peek
49
+ (fresh stack); customer name — in a row or inside a peek — → customer
50
+ peek **stacked** with a back arrow. Peeks are workbenches: status
51
+ control, properties, line items, activity, payments.
52
+ - **Filters are compact pills** (`BbSelectPopover` triggers + a range date
53
+ input) with a clear-all that renders only while something is active.
54
+ - **Buttons are `md` by default** (28px, flush beside `compact` inputs);
55
+ `sm` only in the table rows, the peeks' headers and the bottom bar.
56
+ Internal navigation (`New invoice`, row `Edit`, peek `Open…` links) uses
57
+ `to`, Nuxt's Vue Router prop, instead of a raw `href`.
58
+
59
+ ## Page anatomy
60
+
61
+ ```
62
+ InvoicesWorkspace/
63
+ Index.vue ← assembly: PageShell slots, table, tabs, pagination
64
+ context.ts ← coopting page context (shell + table + URL filters + actions)
65
+ FilterRail.vue ← pill filters + clear-all
66
+ StatusCell.vue ← one-click status change (badge → BbSelectPopover)
67
+ RowActions.vue ← per-row "…" dropdown
68
+ SelectionBar.vue ← bulk actions in the floating bottom panel
69
+ InvoicePeek.vue ← sidebar workbench, stack level 1
70
+ CustomerPeek.vue ← stacked peek, back arrow via the shell
71
+ RecordPaymentDialog.vue ← page-level dialog, driven by the context
72
+ ```
73
+
74
+ Chrome assumed from the guides: [App Layout](../../guides/app-layout.md)
75
+ (left nav + fat footer), [Page Shell](../../guides/page-shell.md),
76
+ [Floating Bottom Panel](../../guides/floating-bottom-panel.md).
77
+
78
+ ## Action inventory
79
+
80
+ | # | Action | Trigger | Mechanism |
81
+ | --- | ------------------------------ | -------------------------------- | ----------------------------------------------------- |
82
+ | 1 | New invoice | topbar, the page's one `primary` | navigation (`to="/invoices/create"`) |
83
+ | 2 | Page search | topbar right | `filters.search` → URL → `useAsyncData` refetch |
84
+ | 3 | Filter status / customer / due | filter rail pills | `BbSelectPopover` multiple / query-aware / date range |
85
+ | 4 | Clear filters | rail right (only when active) | context `clearFilters()` |
86
+ | 5 | Switch tab | href tabs with counts | URL + `useAsyncData` refetch |
87
+ | 6 | Peek invoice | invoice number cell / peek lists | `peekInvoice(id)` → shell stack |
88
+ | 7 | Peek customer (stacked) | customer cell / inside peeks | `stackCustomer(id)` → back arrow |
89
+ | 8 | Change status inline | status badge in row & peek | one-click `BbSelectPopover` |
90
+ | 9 | Record payment | row `…`, peek button | `BbDialog` via `ctx.dialogs` |
91
+ | 10 | Edit / duplicate | row `…` dropdown | navigation (`to`) / context action |
92
+ | 11 | Archive / delete | row `…`, bulk bar | destructive behind `useConfirm` |
93
+ | 12 | Bulk mark paid / remind | floating bottom panel | context actions on `table.selected` |
94
+ | 13 | Select rows / select all | table checkboxes | table context |
95
+ | 14 | Open full invoice | peek footer | navigation (`to="/invoices/:id"`) |
96
+ | 15 | Back / close peek | shell chrome | shell stack pop / close |
97
+
98
+ ## The code
99
+
100
+ ### context.ts
101
+
102
+ ```ts
103
+ // InvoicesWorkspace/context.ts
104
+ import {
105
+ computed,
106
+ inject,
107
+ provide,
108
+ reactive,
109
+ ref,
110
+ watch,
111
+ type ComputedRef,
112
+ type InjectionKey,
113
+ type Ref,
114
+ } from 'vue';
115
+ import {
116
+ useBbTableContext,
117
+ useConfirm,
118
+ useToast,
119
+ type BbTableContext,
120
+ } from 'bitboss-ui';
121
+ import {
122
+ usePageShellContext,
123
+ type PageShellContext,
124
+ } from '@/components/layout/usePageShellContext';
125
+ import { watchDebounced } from '@vueuse/core';
126
+ import type { Invoice, InvoiceStatus, PaymentDraft } from '@/types';
127
+
128
+ /** What the stacked sidebar can show. Clicking a name pushes one of these. */
129
+ export type PeekItem =
130
+ | { type: 'invoice'; id: number }
131
+ | { type: 'customer'; id: number };
132
+
133
+ export type WorkspaceTab = 'all' | 'outstanding' | 'paid' | 'archived';
134
+
135
+ export interface InvoiceFilters {
136
+ search: string;
137
+ status: InvoiceStatus[];
138
+ customerId: number | null;
139
+ /**
140
+ * `[start, end]` ISO strings, or `[]` when unset. Range mode requires an
141
+ * array modelValue -- binding `null` throws, so the empty filter is `[]`.
142
+ */
143
+ dueBetween: string[];
144
+ }
145
+
146
+ type InvoiceListResponse = {
147
+ data: Invoice[];
148
+ total: number;
149
+ tabCounts: Record<WorkspaceTab, number>;
150
+ };
151
+
152
+ export interface InvoicesWorkspaceContext {
153
+ // -- Coopted contexts ------------------------------------------------------
154
+ shell: PageShellContext<PeekItem>;
155
+ table: BbTableContext;
156
+ // -- Page-owned state ------------------------------------------------------
157
+ filters: InvoiceFilters;
158
+ hasActiveFilters: ComputedRef<boolean>;
159
+ tab: Ref<WorkspaceTab>;
160
+ tabCounts: ComputedRef<Record<WorkspaceTab, number>>;
161
+ dialogs: { recordPayment: Ref<Invoice | null> };
162
+ // -- Data (server-rendered, URL-driven) -------------------------------------
163
+ invoices: ComputedRef<Invoice[]>;
164
+ invoicesPending: Ref<boolean>;
165
+ // -- Peek grammar ----------------------------------------------------------
166
+ peekInvoice: (id: number) => void;
167
+ stackInvoice: (id: number) => void;
168
+ stackCustomer: (id: number) => void;
169
+ // -- Actions (complete: API + refresh + toast) ------------------------------
170
+ clearFilters: () => void;
171
+ updateStatus: (invoice: Invoice, status: InvoiceStatus) => Promise<void>;
172
+ duplicateInvoice: (invoice: Invoice) => Promise<void>;
173
+ recordPayment: (invoice: Invoice, draft: PaymentDraft) => Promise<void>;
174
+ archiveInvoice: (invoice: Invoice) => Promise<void>;
175
+ deleteInvoice: (invoice: Invoice) => Promise<void>;
176
+ bulkMarkPaid: () => Promise<void>;
177
+ bulkRemind: () => Promise<void>;
178
+ bulkArchive: () => Promise<void>;
179
+ }
180
+
181
+ const key: InjectionKey<InvoicesWorkspaceContext> =
182
+ Symbol('invoices-workspace');
183
+
184
+ /** Comma-joined query value → string[] (or null when absent). */
185
+ const toArray = (value: unknown): string[] | null => {
186
+ if (value == null || value === '') return null;
187
+ return Array.isArray(value) ? value.map(String) : String(value).split(',');
188
+ };
189
+
190
+ export function provideInvoicesWorkspace(): InvoicesWorkspaceContext {
191
+ const { toast } = useToast();
192
+ const { confirm } = useConfirm();
193
+ const route = useRoute();
194
+
195
+ // -- Coopt the specific contexts: once, here, for the whole page. ----------
196
+ const shell = usePageShellContext<PeekItem>();
197
+ const table = useBbTableContext('invoices-table', { perPage: 25 });
198
+
199
+ // -- Filters + tab: seeded from the URL, the single source of truth. -------
200
+ const filters = reactive<InvoiceFilters>({
201
+ search: (route.query.search as string) ?? '',
202
+ status: (toArray(route.query.status) ?? []) as InvoiceStatus[],
203
+ customerId: route.query.customerId ? Number(route.query.customerId) : null,
204
+ dueBetween: toArray(route.query.dueBetween) ?? [],
205
+ });
206
+ const tab = ref<WorkspaceTab>((route.query.tab as WorkspaceTab) ?? 'all');
207
+
208
+ const hasActiveFilters = computed(
209
+ () =>
210
+ filters.search !== '' ||
211
+ filters.status.length > 0 ||
212
+ filters.customerId !== null ||
213
+ filters.dueBetween.length > 0
214
+ );
215
+
216
+ const clearFilters = () => {
217
+ filters.search = '';
218
+ filters.status = [];
219
+ filters.customerId = null;
220
+ filters.dueBetween = [];
221
+ };
222
+
223
+ // Every filter/tab change mirrors into the query string; `useAsyncData`
224
+ // below watches `route.query`, so this is the whole refetch trigger.
225
+ const syncQuery = () =>
226
+ navigateTo({
227
+ query: {
228
+ search: filters.search || undefined,
229
+ status: filters.status.length ? filters.status.join(',') : undefined,
230
+ customerId: filters.customerId ?? undefined,
231
+ dueBetween: filters.dueBetween.length
232
+ ? filters.dueBetween.join(',')
233
+ : undefined,
234
+ tab: tab.value,
235
+ },
236
+ });
237
+ watchDebounced(filters, syncQuery, { deep: true, debounce: 300 });
238
+ watch(tab, () => {
239
+ table.page.value = 1;
240
+ syncQuery();
241
+ });
242
+
243
+ // -- Data ---------------------------------------------------------------------
244
+ const { data, pending, refresh } = useAsyncData<InvoiceListResponse>(
245
+ 'invoices',
246
+ () =>
247
+ $fetch<InvoiceListResponse>('/api/invoices', {
248
+ query: {
249
+ search: filters.search || undefined,
250
+ status: filters.status,
251
+ customerId: filters.customerId ?? undefined,
252
+ dueBetween: filters.dueBetween.length
253
+ ? filters.dueBetween
254
+ : undefined,
255
+ tab: tab.value,
256
+ page: table.page.value,
257
+ perPage: table.perPage.value,
258
+ },
259
+ }),
260
+ { watch: [() => route.query, table.page] }
261
+ );
262
+ const invoices = computed(() => data.value?.data ?? []);
263
+ const invoicesPending = pending;
264
+ const tabCounts = computed(
265
+ () =>
266
+ data.value?.tabCounts ?? {
267
+ all: 0,
268
+ outstanding: 0,
269
+ paid: 0,
270
+ archived: 0,
271
+ }
272
+ );
273
+ watch(
274
+ data,
275
+ (response) => {
276
+ if (response) table.total.value = response.total;
277
+ },
278
+ { immediate: true }
279
+ );
280
+
281
+ const dialogs = { recordPayment: ref<Invoice | null>(null) };
282
+
283
+ // -- Peek grammar ----------------------------------------------------------------
284
+ // peekX opens a fresh stack (from the list); stackX drills down (from a peek).
285
+ const peekInvoice = (id: number) => shell.push({ type: 'invoice', id }, true);
286
+ const stackInvoice = (id: number) => shell.push({ type: 'invoice', id });
287
+ const stackCustomer = (id: number) => shell.push({ type: 'customer', id });
288
+
289
+ // -- Actions --------------------------------------------------------------------
290
+ const updateStatus = async (invoice: Invoice, status: InvoiceStatus) => {
291
+ await $fetch(`/api/invoices/${invoice.id}`, {
292
+ method: 'PATCH',
293
+ body: { status },
294
+ });
295
+ await refresh();
296
+ toast({
297
+ title: `${invoice.number} moved to ${status}.`,
298
+ variant: 'success',
299
+ });
300
+ };
301
+
302
+ const duplicateInvoice = async (invoice: Invoice) => {
303
+ const copy = await $fetch<Invoice>(
304
+ `/api/invoices/${invoice.id}/duplicate`,
305
+ {
306
+ method: 'POST',
307
+ }
308
+ );
309
+ await refresh();
310
+ toast({ title: `Duplicated as ${copy.number}.`, variant: 'success' });
311
+ };
312
+
313
+ const recordPayment = async (invoice: Invoice, draft: PaymentDraft) => {
314
+ await $fetch(`/api/invoices/${invoice.id}/payments`, {
315
+ method: 'POST',
316
+ body: draft,
317
+ });
318
+ dialogs.recordPayment.value = null;
319
+ await refresh();
320
+ toast({
321
+ title: `Payment recorded on ${invoice.number}.`,
322
+ variant: 'success',
323
+ });
324
+ };
325
+
326
+ const archiveInvoice = async (invoice: Invoice) => {
327
+ await $fetch(`/api/invoices/${invoice.id}/archive`, { method: 'PATCH' });
328
+ await refresh();
329
+ toast({ title: `${invoice.number} archived.`, variant: 'success' });
330
+ };
331
+
332
+ const deleteInvoice = async (invoice: Invoice) => {
333
+ const ok = await confirm({
334
+ variant: 'destructive',
335
+ title: 'Delete invoice',
336
+ text: `Delete ${invoice.number}? This cannot be undone.`,
337
+ yes: 'Delete',
338
+ no: 'Cancel',
339
+ });
340
+ if (!ok) return;
341
+ await $fetch(`/api/invoices/${invoice.id}`, { method: 'DELETE' });
342
+ await refresh();
343
+ toast({ title: `${invoice.number} deleted.`, variant: 'success' });
344
+ };
345
+
346
+ // Bulk actions read and clear the coopted table context themselves.
347
+ const bulkIds = (): number[] => table.selected.value;
348
+ const clearSelection = () => {
349
+ table.selected.value = [];
350
+ };
351
+
352
+ const bulkMarkPaid = async () => {
353
+ const ids = bulkIds();
354
+ await $fetch('/api/invoices/bulk/mark-paid', {
355
+ method: 'PATCH',
356
+ body: { ids },
357
+ });
358
+ clearSelection();
359
+ await refresh();
360
+ toast({
361
+ title: `${ids.length} invoices marked as paid.`,
362
+ variant: 'success',
363
+ });
364
+ };
365
+
366
+ const bulkRemind = async () => {
367
+ const ids = bulkIds();
368
+ await $fetch('/api/invoices/bulk/remind', {
369
+ method: 'POST',
370
+ body: { ids },
371
+ });
372
+ clearSelection();
373
+ toast({
374
+ title: `Reminder sent for ${ids.length} invoices.`,
375
+ variant: 'success',
376
+ });
377
+ };
378
+
379
+ const bulkArchive = async () => {
380
+ const ids = bulkIds();
381
+ const ok = await confirm({
382
+ variant: 'destructive',
383
+ title: 'Archive invoices',
384
+ text: `Archive ${ids.length} invoices? They move out of every tab except Archived.`,
385
+ yes: 'Archive',
386
+ no: 'Cancel',
387
+ });
388
+ if (!ok) return;
389
+ await $fetch('/api/invoices/bulk/archive', {
390
+ method: 'PATCH',
391
+ body: { ids },
392
+ });
393
+ clearSelection();
394
+ await refresh();
395
+ toast({ title: `${ids.length} invoices archived.`, variant: 'success' });
396
+ };
397
+
398
+ const ctx: InvoicesWorkspaceContext = {
399
+ shell,
400
+ table,
401
+ filters,
402
+ hasActiveFilters,
403
+ tab,
404
+ tabCounts,
405
+ dialogs,
406
+ invoices,
407
+ invoicesPending,
408
+ peekInvoice,
409
+ stackInvoice,
410
+ stackCustomer,
411
+ clearFilters,
412
+ updateStatus,
413
+ duplicateInvoice,
414
+ recordPayment,
415
+ archiveInvoice,
416
+ deleteInvoice,
417
+ bulkMarkPaid,
418
+ bulkRemind,
419
+ bulkArchive,
420
+ };
421
+ provide(key, ctx);
422
+ return ctx;
423
+ }
424
+
425
+ export function useInvoicesWorkspace(): InvoicesWorkspaceContext {
426
+ const ctx = inject(key);
427
+ if (!ctx)
428
+ throw new Error('useInvoicesWorkspace() called outside InvoicesWorkspace');
429
+ return ctx;
430
+ }
431
+ ```
432
+
433
+ ### Index.vue — the assembly
434
+
435
+ ```vue
436
+ <!-- InvoicesWorkspace/Index.vue -->
437
+ <template>
438
+ <PageShell>
439
+ <!-- Topbar: breadcrumbs left, page search + primary action right. -->
440
+ <template #topbar>
441
+ <div class="flex items-center justify-between gap-4 border-b px-4 py-2">
442
+ <!-- Breadcrumbs take the row's slack on a stable basis (min-w-0 flex-auto);
443
+ without it their overflow recompute fights the flex layout every frame. -->
444
+ <BbBreadcrumbs
445
+ class="min-w-0 flex-auto"
446
+ :items="[
447
+ { key: 'dashboard', text: 'Dashboard', to: '/dashboard' },
448
+ { key: 'billing', text: 'Billing', to: '/billing' },
449
+ { key: 'invoices', text: 'Invoices' },
450
+ ]"
451
+ />
452
+ <div class="flex shrink-0 items-center gap-2">
453
+ <BbTextInput
454
+ v-model="ctx.filters.search"
455
+ hide-label
456
+ label="Search invoices"
457
+ clearable
458
+ compact
459
+ placeholder="Search number or customer…"
460
+ prepend:icon="lucide:search"
461
+ />
462
+ <BbButton
463
+ prepend:icon="lucide:plus"
464
+ to="/invoices/create"
465
+ variant="primary"
466
+ >
467
+ New invoice
468
+ </BbButton>
469
+ </div>
470
+ </div>
471
+ </template>
472
+
473
+ <div class="flex flex-col gap-3 p-4">
474
+ <FilterRail />
475
+
476
+ <!-- Tabs as URL filters: href updates the query, the key feeds the
477
+ fetch. Counts come from the server on every fetch. -->
478
+ <BbTabs
479
+ v-model="ctx.tab.value"
480
+ compact
481
+ :items="[
482
+ {
483
+ key: 'all',
484
+ label: `All · ${ctx.tabCounts.value.all}`,
485
+ href: '?tab=all',
486
+ },
487
+ {
488
+ key: 'outstanding',
489
+ label: `Outstanding · ${ctx.tabCounts.value.outstanding}`,
490
+ href: '?tab=outstanding',
491
+ },
492
+ {
493
+ key: 'paid',
494
+ label: `Paid · ${ctx.tabCounts.value.paid}`,
495
+ href: '?tab=paid',
496
+ },
497
+ {
498
+ key: 'archived',
499
+ label: `Archived · ${ctx.tabCounts.value.archived}`,
500
+ href: '?tab=archived',
501
+ },
502
+ ]"
503
+ />
504
+
505
+ <BbTable
506
+ id="invoices-table"
507
+ actions
508
+ caption="Invoices"
509
+ :columns="columns"
510
+ compact
511
+ item-value="id"
512
+ :items="ctx.invoices.value"
513
+ :loading="ctx.invoicesPending.value"
514
+ loading-text="Loading invoices…"
515
+ :row-class="rowClass"
516
+ selectable
517
+ >
518
+ <!-- Clicking the NAME of a thing peeks it. -->
519
+ <template #number="{ item, content }">
520
+ <BbButton
521
+ size="sm"
522
+ variant="link"
523
+ @click="() => ctx.peekInvoice(item.id)"
524
+ >
525
+ {{ content }}
526
+ </BbButton>
527
+ </template>
528
+
529
+ <template #customer_name="{ item, content }">
530
+ <BbButton
531
+ size="sm"
532
+ variant="ghost"
533
+ @click="() => ctx.stackCustomer(item.customer.id)"
534
+ >
535
+ {{ content }}
536
+ </BbButton>
537
+ </template>
538
+
539
+ <template #status="{ item }">
540
+ <StatusCell :invoice="item" />
541
+ </template>
542
+
543
+ <template #actions="{ item }">
544
+ <RowActions :invoice="item" />
545
+ </template>
546
+
547
+ <template #no-data>
548
+ <div class="flex flex-col items-center gap-2 p-6 text-center">
549
+ <p class="text-sm text-gray-500">
550
+ No invoices match
551
+ {{
552
+ ctx.hasActiveFilters.value ? 'the current filters' : 'this tab'
553
+ }}.
554
+ </p>
555
+ <BbButton
556
+ v-if="ctx.hasActiveFilters.value"
557
+ variant="ghost"
558
+ @click="ctx.clearFilters"
559
+ >
560
+ Clear filters
561
+ </BbButton>
562
+ </div>
563
+ </template>
564
+ </BbTable>
565
+
566
+ <!-- Joins the table context by id: no page/totalPages wiring at all. -->
567
+ <BbPagination table-id="invoices-table" />
568
+ </div>
569
+
570
+ <SelectionBar />
571
+
572
+ <!-- Stacked peek sidebar: the shell owns back/close; we render by type. -->
573
+ <template #sidebar>
574
+ <InvoicePeek
575
+ v-if="ctx.shell.current.value?.type === 'invoice'"
576
+ :invoice-id="ctx.shell.current.value.id"
577
+ />
578
+ <CustomerPeek
579
+ v-else-if="ctx.shell.current.value?.type === 'customer'"
580
+ :customer-id="ctx.shell.current.value.id"
581
+ />
582
+ </template>
583
+
584
+ <template #dialogs>
585
+ <RecordPaymentDialog />
586
+ </template>
587
+ </PageShell>
588
+ </template>
589
+
590
+ <script setup lang="ts">
591
+ import {
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 { provideInvoicesWorkspace } from './context';
601
+ import CustomerPeek from './CustomerPeek.vue';
602
+ import FilterRail from './FilterRail.vue';
603
+ import InvoicePeek from './InvoicePeek.vue';
604
+ import RecordPaymentDialog from './RecordPaymentDialog.vue';
605
+ import RowActions from './RowActions.vue';
606
+ import SelectionBar from './SelectionBar.vue';
607
+ import StatusCell from './StatusCell.vue';
608
+ import type { Invoice } from '@/types';
609
+
610
+ const ctx = provideInvoicesWorkspace();
611
+
612
+ const currency = new Intl.NumberFormat('en-US', {
613
+ style: 'currency',
614
+ currency: 'USD',
615
+ });
616
+ const shortDate = (value: string) =>
617
+ new Date(value).toLocaleDateString('en-US', {
618
+ month: 'short',
619
+ day: 'numeric',
620
+ });
621
+
622
+ const columns = [
623
+ { key: 'number', label: 'Invoice' },
624
+ { key: 'customer.name', label: 'Customer' },
625
+ {
626
+ key: 'amount',
627
+ label: 'Amount',
628
+ formatter: (value: number) => currency.format(value),
629
+ },
630
+ { key: 'status', label: 'Status' },
631
+ { key: 'dueDate', label: 'Due', formatter: shortDate },
632
+ { key: 'issuedAt', label: 'Issued', formatter: shortDate },
633
+ ];
634
+
635
+ // Overdue rows get a tinted background — public row-class API, no internals.
636
+ const rowClass = (item: Invoice) =>
637
+ item.status === 'overdue' ? 'bg-red-50 dark:bg-red-950/20' : undefined;
638
+ </script>
639
+ ```
640
+
641
+ ### FilterRail.vue
642
+
643
+ ```vue
644
+ <!-- InvoicesWorkspace/FilterRail.vue -->
645
+ <template>
646
+ <div class="flex flex-wrap items-center gap-2">
647
+ <!-- Status: multi-select pill. -->
648
+ <BbSelectPopover
649
+ v-model="ctx.filters.status"
650
+ :items="['draft', 'pending', 'paid', 'overdue']"
651
+ multiple
652
+ >
653
+ <template #activator="{ props }">
654
+ <BbButton
655
+ v-bind="props"
656
+ append:icon="lucide:chevron-down"
657
+ size="sm"
658
+ variant="outline"
659
+ >
660
+ Status{{
661
+ ctx.filters.status.length ? ` · ${ctx.filters.status.length}` : ''
662
+ }}
663
+ </BbButton>
664
+ </template>
665
+ </BbSelectPopover>
666
+
667
+ <!-- Customer: single, query-aware search against the API. -->
668
+ <BbSelectPopover
669
+ v-model="ctx.filters.customerId"
670
+ item-text="name"
671
+ item-value="id"
672
+ :items="searchCustomers"
673
+ >
674
+ <template #activator="{ props }">
675
+ <BbButton
676
+ v-bind="props"
677
+ append:icon="lucide:chevron-down"
678
+ size="sm"
679
+ variant="outline"
680
+ >
681
+ {{ customerLabel }}
682
+ </BbButton>
683
+ </template>
684
+ </BbSelectPopover>
685
+
686
+ <!-- Due date range: a compact input is 28px — flush with the sm pills' row. -->
687
+ <BbDatePickerInput
688
+ v-model="ctx.filters.dueBetween"
689
+ hide-label
690
+ label="Due date range"
691
+ clearable
692
+ compact
693
+ placeholder="Due between…"
694
+ range
695
+ />
696
+
697
+ <!-- Clear-all renders only while something is active. -->
698
+ <BbButton
699
+ v-if="ctx.hasActiveFilters.value"
700
+ class="ml-auto"
701
+ prepend:icon="lucide:x"
702
+ size="sm"
703
+ variant="ghost"
704
+ @click="ctx.clearFilters"
705
+ >
706
+ Clear filters
707
+ </BbButton>
708
+ </div>
709
+ </template>
710
+
711
+ <script setup lang="ts">
712
+ import { computed, ref, watchEffect } from 'vue';
713
+ import { BbButton, BbDatePickerInput, BbSelectPopover } from 'bitboss-ui';
714
+ import { useInvoicesWorkspace } from './context';
715
+ import type { Customer } from '@/types';
716
+
717
+ const ctx = useInvoicesWorkspace();
718
+
719
+ // Query-aware items function: BbSelectPopover calls it with the search text.
720
+ const searchCustomers = (query: string): Promise<Customer[]> =>
721
+ $fetch<Customer[]>('/api/customers', { query: { search: query } });
722
+
723
+ // The trigger labels itself from page state (the popover is lazy by design
724
+ // and cannot know the selected label before its first open).
725
+ const selectedCustomer = ref<Customer | null>(null);
726
+ watchEffect(async () => {
727
+ selectedCustomer.value =
728
+ ctx.filters.customerId == null
729
+ ? null
730
+ : await $fetch<Customer>(`/api/customers/${ctx.filters.customerId}`);
731
+ });
732
+ const customerLabel = computed(
733
+ () => selectedCustomer.value?.name ?? 'Customer'
734
+ );
735
+ </script>
736
+ ```
737
+
738
+ ### StatusCell.vue
739
+
740
+ ```vue
741
+ <!-- InvoicesWorkspace/StatusCell.vue -->
742
+ <template>
743
+ <BbSelectPopover
744
+ :items="['draft', 'pending', 'paid', 'overdue']"
745
+ :model-value="invoice.status"
746
+ @update:model-value="(status) => pick(status as InvoiceStatus)"
747
+ >
748
+ <template #activator="{ props: activatorProps }">
749
+ <!-- The badge IS the trigger: BbBadgeButton turns the badge's own
750
+ body into the button, so the pill is the hit target and draws its
751
+ own focus ring — no wrapper element, no chrome class. The internal
752
+ trailing chevron says "clickable"; while the save runs the badge's
753
+ `loading` swaps the spinner into the chevron's place (§6.1
754
+ niceties). -->
755
+ <BbBadge
756
+ append:icon="lucide:chevron-down"
757
+ :loading="saving"
758
+ variant="outline"
759
+ >
760
+ <BbBadgeButton v-bind="activatorProps">{{
761
+ invoice.status
762
+ }}</BbBadgeButton>
763
+ </BbBadge>
764
+ </template>
765
+ </BbSelectPopover>
766
+ </template>
767
+
768
+ <script setup lang="ts">
769
+ import { ref } from 'vue';
770
+ import { BbBadge, BbBadgeButton, BbSelectPopover } from 'bitboss-ui';
771
+ import { useInvoicesWorkspace } from './context';
772
+ import type { Invoice, InvoiceStatus } from '@/types';
773
+
774
+ const props = defineProps<{ invoice: Invoice }>();
775
+
776
+ const ctx = useInvoicesWorkspace();
777
+
778
+ // In-flight flag for the save feedback — rung-1 local state, not context.
779
+ const saving = ref(false);
780
+ const pick = async (status: InvoiceStatus) => {
781
+ saving.value = true;
782
+ try {
783
+ await ctx.updateStatus(props.invoice, status);
784
+ } finally {
785
+ saving.value = false;
786
+ }
787
+ };
788
+ </script>
789
+ ```
790
+
791
+ ### RowActions.vue
792
+
793
+ ```vue
794
+ <!-- InvoicesWorkspace/RowActions.vue -->
795
+ <template>
796
+ <BbDropdown
797
+ :items="[
798
+ {
799
+ key: 'edit',
800
+ text: 'Edit',
801
+ 'prepend:icon': 'lucide:pencil',
802
+ to: `/invoices/${invoice.id}/edit`,
803
+ },
804
+ {
805
+ key: 'duplicate',
806
+ text: 'Duplicate',
807
+ 'prepend:icon': 'lucide:copy',
808
+ onClick: () => ctx.duplicateInvoice(invoice),
809
+ },
810
+ {
811
+ key: 'payment',
812
+ text: 'Record payment',
813
+ 'prepend:icon': 'lucide:banknote',
814
+ onClick: () => (ctx.dialogs.recordPayment.value = invoice),
815
+ },
816
+ {
817
+ key: 'archive',
818
+ text: 'Archive',
819
+ 'prepend:icon': 'lucide:archive',
820
+ onClick: () => ctx.archiveInvoice(invoice),
821
+ },
822
+ {
823
+ key: 'delete',
824
+ text: 'Delete',
825
+ 'prepend:icon': 'lucide:trash-2',
826
+ variant: 'destructive',
827
+ onClick: () => ctx.deleteInvoice(invoice),
828
+ },
829
+ ]"
830
+ >
831
+ <template #activator="{ props }">
832
+ <BbButton v-bind="props" icon="lucide:ellipsis" size="sm" variant="ghost">
833
+ Invoice actions
834
+ </BbButton>
835
+ </template>
836
+ </BbDropdown>
837
+ </template>
838
+
839
+ <script setup lang="ts">
840
+ import { BbButton, BbDropdown } from 'bitboss-ui';
841
+ import { useInvoicesWorkspace } from './context';
842
+ import type { Invoice } from '@/types';
843
+
844
+ defineProps<{ invoice: Invoice }>();
845
+
846
+ const ctx = useInvoicesWorkspace();
847
+ </script>
848
+ ```
849
+
850
+ ### SelectionBar.vue
851
+
852
+ ```vue
853
+ <!-- InvoicesWorkspace/SelectionBar.vue -->
854
+ <template>
855
+ <FloatingBottomPanel :open="selectedCount > 0">
856
+ <span class="px-2 text-sm">{{ selectedCount }} selected</span>
857
+ <BbButton
858
+ prepend:icon="lucide:check"
859
+ size="sm"
860
+ variant="ghost"
861
+ @click="ctx.bulkMarkPaid"
862
+ >
863
+ Mark as paid
864
+ </BbButton>
865
+ <BbButton
866
+ prepend:icon="lucide:send"
867
+ size="sm"
868
+ variant="ghost"
869
+ @click="ctx.bulkRemind"
870
+ >
871
+ Send reminder
872
+ </BbButton>
873
+ <div class="floating-bottom-panel__right flex items-center gap-1">
874
+ <BbButton size="sm" variant="destructive" @click="ctx.bulkArchive"
875
+ >Archive</BbButton
876
+ >
877
+ <BbButton
878
+ aria-label="Clear selection"
879
+ icon="lucide:x"
880
+ size="sm"
881
+ variant="ghost"
882
+ @click="clearSelection"
883
+ />
884
+ </div>
885
+ </FloatingBottomPanel>
886
+ </template>
887
+
888
+ <script setup lang="ts">
889
+ import { computed } from 'vue';
890
+ import { BbButton } from 'bitboss-ui';
891
+ import FloatingBottomPanel from '@/components/layout/FloatingBottomPanel.vue';
892
+ import { useInvoicesWorkspace } from './context';
893
+
894
+ const ctx = useInvoicesWorkspace();
895
+
896
+ const selectedCount = computed(() => ctx.table.selected.value?.length ?? 0);
897
+ const clearSelection = () => {
898
+ ctx.table.selected.value = [];
899
+ };
900
+ </script>
901
+ ```
902
+
903
+ ### InvoicePeek.vue
904
+
905
+ ```vue
906
+ <!-- InvoicesWorkspace/InvoicePeek.vue -->
907
+ <template>
908
+ <div v-if="invoice" class="flex flex-col gap-4 text-sm">
909
+ <!-- Header: identity + one-click status + amount. -->
910
+ <header class="flex flex-col gap-1.5">
911
+ <div class="flex items-center justify-between gap-2">
912
+ <h2 class="text-base font-semibold">{{ invoice.number }}</h2>
913
+ <StatusCell :invoice="invoice" />
914
+ </div>
915
+ <p class="text-xl font-semibold">{{ currency.format(invoice.amount) }}</p>
916
+ <p class="text-xs text-gray-500">
917
+ Issued {{ longDate(invoice.issuedAt) }} · due
918
+ {{ longDate(invoice.dueDate) }}
919
+ </p>
920
+ </header>
921
+
922
+ <!-- Properties: customer name drills DOWN — stacked peek, back arrow. -->
923
+ <dl class="grid grid-cols-[auto_1fr] gap-x-4 gap-y-1.5">
924
+ <dt class="text-gray-500">Customer</dt>
925
+ <dd>
926
+ <BbButton
927
+ size="sm"
928
+ variant="link"
929
+ @click="() => ctx.stackCustomer(invoice!.customer.id)"
930
+ >
931
+ {{ invoice.customer.name }}
932
+ </BbButton>
933
+ </dd>
934
+ <dt class="text-gray-500">Project</dt>
935
+ <dd>{{ invoice.project.name }}</dd>
936
+ <dt class="text-gray-500">Payment terms</dt>
937
+ <dd>{{ invoice.paymentTerms }}</dd>
938
+ <dt class="text-gray-500">Reference</dt>
939
+ <dd>{{ invoice.reference }}</dd>
940
+ </dl>
941
+
942
+ <!-- Line items: a real mini-table, not a summary sentence. -->
943
+ <section class="flex flex-col gap-1.5">
944
+ <h3 class="text-xs font-semibold uppercase tracking-wide text-gray-500">
945
+ Line items
946
+ </h3>
947
+ <BbTable
948
+ caption="Invoice line items"
949
+ :columns="[
950
+ { key: 'description', label: 'Description' },
951
+ { key: 'quantity', label: 'Qty' },
952
+ {
953
+ key: 'total',
954
+ label: 'Total',
955
+ formatter: (value: number) => currency.format(value),
956
+ },
957
+ ]"
958
+ compact
959
+ item-value="id"
960
+ :items="invoice.lineItems"
961
+ />
962
+ </section>
963
+
964
+ <!-- Payments so far. -->
965
+ <section v-if="invoice.payments.length" class="flex flex-col gap-1.5">
966
+ <h3 class="text-xs font-semibold uppercase tracking-wide text-gray-500">
967
+ Payments
968
+ </h3>
969
+ <ul class="flex flex-col gap-1">
970
+ <li
971
+ v-for="payment in invoice.payments"
972
+ :key="payment.id"
973
+ class="flex items-center justify-between gap-2"
974
+ >
975
+ <span
976
+ >{{ currency.format(payment.amount) }} · {{ payment.method }}</span
977
+ >
978
+ <span class="text-xs text-gray-500">{{
979
+ longDate(payment.paidAt)
980
+ }}</span>
981
+ </li>
982
+ </ul>
983
+ </section>
984
+
985
+ <!-- Activity feed. -->
986
+ <section class="flex flex-col gap-1.5">
987
+ <h3 class="text-xs font-semibold uppercase tracking-wide text-gray-500">
988
+ Activity
989
+ </h3>
990
+ <ul class="flex flex-col gap-2">
991
+ <li
992
+ v-for="entry in invoice.activity"
993
+ :key="entry.id"
994
+ class="flex gap-2"
995
+ >
996
+ <BbIcon
997
+ class="mt-0.5 shrink-0 text-gray-400"
998
+ :icon="entry.icon"
999
+ size="14"
1000
+ />
1001
+ <div class="flex flex-col">
1002
+ <span>{{ entry.text }}</span>
1003
+ <span class="text-xs text-gray-500"
1004
+ >{{ entry.actor }} · {{ longDate(entry.at) }}</span
1005
+ >
1006
+ </div>
1007
+ </li>
1008
+ </ul>
1009
+ </section>
1010
+
1011
+ <!-- Peek is a workbench: act here, or leave for the full page. -->
1012
+ <footer class="mt-2 flex items-center gap-2 border-t pt-3">
1013
+ <BbButton
1014
+ prepend:icon="lucide:banknote"
1015
+ size="sm"
1016
+ variant="secondary"
1017
+ @click="() => (ctx.dialogs.recordPayment.value = invoice)"
1018
+ >
1019
+ Record payment
1020
+ </BbButton>
1021
+ <BbButton
1022
+ append:icon="lucide:arrow-up-right"
1023
+ size="sm"
1024
+ :to="`/invoices/${invoice.id}`"
1025
+ variant="ghost"
1026
+ >
1027
+ Open full page
1028
+ </BbButton>
1029
+ </footer>
1030
+ </div>
1031
+
1032
+ <div v-else class="flex justify-center p-8">
1033
+ <BbSpinner />
1034
+ </div>
1035
+ </template>
1036
+
1037
+ <script setup lang="ts">
1038
+ import { ref, watchEffect } from 'vue';
1039
+ import { BbButton, BbIcon, BbSpinner, BbTable } from 'bitboss-ui';
1040
+ import StatusCell from './StatusCell.vue';
1041
+ import { useInvoicesWorkspace } from './context';
1042
+ import type { InvoiceDetail } from '@/types';
1043
+
1044
+ const props = defineProps<{ invoiceId: number }>();
1045
+
1046
+ const ctx = useInvoicesWorkspace();
1047
+
1048
+ // Re-fetches whenever the stack shows a different invoice; the surrounding
1049
+ // list's `refresh()` re-renders `ctx.invoices`, but this JSON fetch is its
1050
+ // own concern so it re-runs whenever the invoice list refreshes too.
1051
+ const invoice = ref<InvoiceDetail | null>(null);
1052
+ watchEffect(async () => {
1053
+ void ctx.invoices.value;
1054
+ invoice.value = await $fetch<InvoiceDetail>(
1055
+ `/api/invoices/${props.invoiceId}`
1056
+ );
1057
+ });
1058
+
1059
+ const currency = new Intl.NumberFormat('en-US', {
1060
+ style: 'currency',
1061
+ currency: 'USD',
1062
+ });
1063
+ const longDate = (value: string) =>
1064
+ new Date(value).toLocaleDateString('en-US', {
1065
+ month: 'short',
1066
+ day: 'numeric',
1067
+ year: 'numeric',
1068
+ });
1069
+ </script>
1070
+ ```
1071
+
1072
+ ### CustomerPeek.vue
1073
+
1074
+ ```vue
1075
+ <!-- InvoicesWorkspace/CustomerPeek.vue -->
1076
+ <template>
1077
+ <div v-if="customer" class="flex flex-col gap-4 text-sm">
1078
+ <header class="flex items-center gap-3">
1079
+ <BbAvatar :alt="customer.name" :src="customer.avatarUrl" />
1080
+ <div class="flex flex-col">
1081
+ <h2 class="text-base font-semibold">{{ customer.name }}</h2>
1082
+ <p class="text-xs text-gray-500">
1083
+ {{ customer.email }} · {{ customer.country }}
1084
+ </p>
1085
+ </div>
1086
+ </header>
1087
+
1088
+ <!-- Stat strip. -->
1089
+ <div class="grid grid-cols-3 gap-2">
1090
+ <div class="rounded-[var(--bb-radius)] border p-2">
1091
+ <p class="text-xs text-gray-500">Total billed</p>
1092
+ <p class="font-semibold">{{ currency.format(customer.totalBilled) }}</p>
1093
+ </div>
1094
+ <div class="rounded-[var(--bb-radius)] border p-2">
1095
+ <p class="text-xs text-gray-500">Outstanding</p>
1096
+ <p class="font-semibold">{{ currency.format(customer.outstanding) }}</p>
1097
+ </div>
1098
+ <div class="rounded-[var(--bb-radius)] border p-2">
1099
+ <p class="text-xs text-gray-500">Invoices</p>
1100
+ <p class="font-semibold">{{ customer.invoiceCount }}</p>
1101
+ </div>
1102
+ </div>
1103
+
1104
+ <!-- Recent invoices: names drill down again — the stack keeps growing. -->
1105
+ <section class="flex flex-col gap-1.5">
1106
+ <h3 class="text-xs font-semibold uppercase tracking-wide text-gray-500">
1107
+ Recent invoices
1108
+ </h3>
1109
+ <ul class="flex flex-col">
1110
+ <li
1111
+ v-for="recent in customer.recentInvoices"
1112
+ :key="recent.id"
1113
+ class="flex items-center justify-between gap-2 border-b py-1.5 last:border-b-0"
1114
+ >
1115
+ <BbButton
1116
+ size="sm"
1117
+ variant="link"
1118
+ @click="() => ctx.stackInvoice(recent.id)"
1119
+ >
1120
+ {{ recent.number }}
1121
+ </BbButton>
1122
+ <BbBadge variant="outline">{{ recent.status }}</BbBadge>
1123
+ <span class="text-xs text-gray-500">{{
1124
+ currency.format(recent.amount)
1125
+ }}</span>
1126
+ </li>
1127
+ </ul>
1128
+ </section>
1129
+
1130
+ <footer class="mt-2 flex items-center gap-2 border-t pt-3">
1131
+ <BbButton
1132
+ append:icon="lucide:arrow-up-right"
1133
+ size="sm"
1134
+ :to="`/customers/${customer.id}`"
1135
+ variant="ghost"
1136
+ >
1137
+ Open customer
1138
+ </BbButton>
1139
+ </footer>
1140
+ </div>
1141
+
1142
+ <div v-else class="flex justify-center p-8">
1143
+ <BbSpinner />
1144
+ </div>
1145
+ </template>
1146
+
1147
+ <script setup lang="ts">
1148
+ import { ref, watchEffect } from 'vue';
1149
+ import { BbAvatar, BbBadge, BbButton, BbSpinner } from 'bitboss-ui';
1150
+ import { useInvoicesWorkspace } from './context';
1151
+ import type { CustomerDetail } from '@/types';
1152
+
1153
+ const props = defineProps<{ customerId: number }>();
1154
+
1155
+ const ctx = useInvoicesWorkspace();
1156
+
1157
+ const customer = ref<CustomerDetail | null>(null);
1158
+ watchEffect(async () => {
1159
+ customer.value = await $fetch<CustomerDetail>(
1160
+ `/api/customers/${props.customerId}`
1161
+ );
1162
+ });
1163
+
1164
+ const currency = new Intl.NumberFormat('en-US', {
1165
+ style: 'currency',
1166
+ currency: 'USD',
1167
+ });
1168
+ </script>
1169
+ ```
1170
+
1171
+ ### RecordPaymentDialog.vue
1172
+
1173
+ ```vue
1174
+ <!-- InvoicesWorkspace/RecordPaymentDialog.vue -->
1175
+ <template>
1176
+ <BbDialog
1177
+ :model-value="invoice !== null"
1178
+ size="sm"
1179
+ :title="invoice ? `Record payment — ${invoice.number}` : ''"
1180
+ @update:model-value="close"
1181
+ >
1182
+ <form
1183
+ v-if="invoice"
1184
+ class="flex flex-col gap-3"
1185
+ novalidate
1186
+ @submit.prevent="submit"
1187
+ >
1188
+ <BbNumberInput
1189
+ v-model="draft.amount"
1190
+ label="Amount"
1191
+ label-mode="outside"
1192
+ :max-precision="2"
1193
+ :min="0"
1194
+ >
1195
+ <template #prefix>$</template>
1196
+ </BbNumberInput>
1197
+ <BbDatePickerInput
1198
+ v-model="draft.paidAt"
1199
+ label="Paid on"
1200
+ label-mode="outside"
1201
+ />
1202
+ <BbSelect
1203
+ v-model="draft.method"
1204
+ :items="['bank transfer', 'card', 'check', 'cash']"
1205
+ label="Method"
1206
+ label-mode="outside"
1207
+ />
1208
+ <div class="mt-1 flex justify-end gap-2">
1209
+ <BbButton type="button" variant="ghost" @click="close">Cancel</BbButton>
1210
+ <BbButton type="submit" variant="secondary">Record payment</BbButton>
1211
+ </div>
1212
+ </form>
1213
+ </BbDialog>
1214
+ </template>
1215
+
1216
+ <script setup lang="ts">
1217
+ import { computed, reactive, watch } from 'vue';
1218
+ import {
1219
+ BbButton,
1220
+ BbDatePickerInput,
1221
+ BbDialog,
1222
+ BbNumberInput,
1223
+ BbSelect,
1224
+ } from 'bitboss-ui';
1225
+ import { useInvoicesWorkspace } from './context';
1226
+ import type { PaymentDraft } from '@/types';
1227
+
1228
+ const ctx = useInvoicesWorkspace();
1229
+
1230
+ // The dialog's subject lives in the page context — any component on the
1231
+ // page (row actions, the peek) can open it by assigning the invoice.
1232
+ const invoice = computed(() => ctx.dialogs.recordPayment.value);
1233
+ const close = () => {
1234
+ ctx.dialogs.recordPayment.value = null;
1235
+ };
1236
+
1237
+ const draft = reactive<PaymentDraft>({
1238
+ amount: null,
1239
+ paidAt: null,
1240
+ method: null,
1241
+ });
1242
+ watch(invoice, (next) => {
1243
+ // Re-seed per invoice: default to paying the remaining balance today.
1244
+ draft.amount = next?.amountDue ?? null;
1245
+ draft.paidAt = next ? new Date().toISOString() : null;
1246
+ draft.method = null;
1247
+ });
1248
+
1249
+ // Returning the promise lets the submit button track the async work.
1250
+ const submit = () =>
1251
+ invoice.value ? ctx.recordPayment(invoice.value, { ...draft }) : undefined;
1252
+ </script>
1253
+ ```
1254
+
1255
+ ## Why it is built this way
1256
+
1257
+ - **The context coopts, leaves consume.** `shell` and `table` are joined
1258
+ once in `provideInvoicesWorkspace()`; nine components share filters,
1259
+ selection, the peek stack and every action through one
1260
+ `useInvoicesWorkspace()` call. No component on this page receives a
1261
+ callback prop, and only peeks/cells receive data props (the item or id
1262
+ they render).
1263
+ - **The URL is the filter store, `useAsyncData` is the fetch.** Filters and
1264
+ tab are seeded from `route.query` once at setup, mirrored back with
1265
+ `navigateTo` on every change (debounced for free text), and
1266
+ `useAsyncData('invoices', …, { watch: [() => route.query, table.page] })`
1267
+ is the single refetch trigger — there is exactly one place data loads.
1268
+ - **The table context still owns paging and selection.** `useBbTableContext`
1269
+ is unchanged from the Vue recipe: it seeds `perPage`, `BbPagination`
1270
+ joins by `table-id`, and `SelectionBar` reads `table.selected` — only the
1271
+ _items_ move from an items-function to a resolved `:items` array written
1272
+ by the page's own fetch.
1273
+ - **`peekX` vs `stackX` is the whole stack grammar.** Fresh peeks replace,
1274
+ drill-downs push; the shell renders the back arrow when depth > 1. The
1275
+ grammar lives in the context — a leaf cannot accidentally nuke the
1276
+ stack.
1277
+ - **Tabs carry `href` and live counts**, exactly as in the Vue recipe — the
1278
+ client-side pushState they perform keeps `route.query.tab` in sync, which
1279
+ is what seeds `tab` on load and what `useAsyncData`'s `route.query` watch
1280
+ reacts to.
1281
+ - **Internal links use `to`, not `href`.** `to` renders a real Vue Router
1282
+ link (client-side navigation); a raw `href` would force a full page
1283
+ reload. Every same-app link in this recipe — the primary "New invoice"
1284
+ action, the row `Edit` item, both peek "Open…" links — uses `to`.
1285
+ - **Dialogs hang off the context** (`ctx.dialogs.recordPayment` holds the
1286
+ subject invoice, not a boolean) so row actions and the peek open the
1287
+ same dialog with zero coordination.
1288
+ - **Sizing:** topbar and rail follow `md`-first (`compact` inputs at 28px
1289
+ flush beside the default buttons); `sm` appears exactly where the
1290
+ doctrine allows — row actions, pills, peek footers, the bulk bar.
1291
+ - **One `variant="primary"`** (New invoice). Destructive actions —
1292
+ single, bulk, in-peek — all ride `useConfirm`.
1293
+ - **The status badge tells you it saves.** `StatusCell` carries the §6.1
1294
+ niceties: an internal trailing chevron (a clickable status must say so)
1295
+ and `:loading` around the awaited context action, so the spinner takes
1296
+ the chevron's place while the save runs. The flag is a local `ref` —
1297
+ rung 1, not context state. The ownership grammar behind inline edits is
1298
+ the [Inline Edit Playbook](../../guides/inline-edit-playbook.md).
1299
+
1300
+ ## Variations
1301
+
1302
+ - **Keyboard triage**: add `keyboard-navigation` to the table and open the
1303
+ peek from `v-model:highlighted` — the approvals-inbox recipe is the
1304
+ full treatment.
1305
+ - **Saved views**: persist `filters` + `tab` per user in a store
1306
+ (`useSavedViewsStore`) and render a view switcher before the tabs.
1307
+ - **Inline amount editing**: swap the amount cell for an
1308
+ `EditableAmountCell` per the inline-editing pattern. Choosing between
1309
+ explicit-commit cells and a fully autosaving grid is the
1310
+ [Inline Edit Playbook](../../guides/inline-edit-playbook.md); the
1311
+ autosave treatment is the inline-edit-workspace recipe.
1312
+ - **SSR-populated peeks**: swap the peeks' `$fetch` calls for
1313
+ `useAsyncData` keyed by id if the peek content should be part of the
1314
+ server-rendered payload rather than a client-side follow-up fetch.