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