bitboss-ui 2.1.135 → 3.0.0-alpha.4

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 (1369) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +274 -24
  3. package/bin/bitboss-ui-mcp.mjs +662 -0
  4. package/bin/bitboss-ui.mjs +710 -0
  5. package/bin/bitboss-ui.node.test.mjs +113 -0
  6. package/dist/ai/BbAccordion.md +528 -113
  7. package/dist/ai/BbAlert.md +380 -197
  8. package/dist/ai/BbAsterisk.md +46 -0
  9. package/dist/ai/BbAvatar.md +458 -178
  10. package/dist/ai/BbBadge.md +697 -225
  11. package/dist/ai/BbBadgeButton.md +54 -0
  12. package/dist/ai/BbBaseButton.md +491 -0
  13. package/dist/ai/BbBaseCheckbox.md +49 -0
  14. package/dist/ai/BbBaseCheckboxGroup.md +64 -0
  15. package/dist/ai/BbBaseCheckboxIcon.md +176 -0
  16. package/dist/ai/BbBaseColorInput.md +64 -0
  17. package/dist/ai/BbBaseColorPalette.md +39 -0
  18. package/dist/ai/BbBaseDatePicker.md +42 -0
  19. package/dist/ai/BbBaseDatePickerInput.md +73 -0
  20. package/dist/ai/BbBaseInputContainer.md +48 -0
  21. package/dist/ai/BbBaseNumberInput.md +71 -0
  22. package/dist/ai/BbBaseRadio.md +46 -0
  23. package/dist/ai/BbBaseRadioGroup.md +64 -0
  24. package/dist/ai/BbBaseRadioIcon.md +191 -0
  25. package/dist/ai/BbBaseRating.md +51 -0
  26. package/dist/ai/BbBaseSelect.md +88 -0
  27. package/dist/ai/BbBaseSlider.md +56 -0
  28. package/dist/ai/BbBaseSwitch.md +49 -0
  29. package/dist/ai/BbBaseSwitchGroup.md +64 -0
  30. package/dist/ai/BbBaseSwitchIcon.md +186 -0
  31. package/dist/ai/BbBaseTag.md +68 -0
  32. package/dist/ai/BbBaseTextInput.md +75 -0
  33. package/dist/ai/BbBaseTextarea.md +62 -0
  34. package/dist/ai/BbBaseTimePickerInput.md +62 -0
  35. package/dist/ai/BbBreadcrumbs.md +553 -503
  36. package/dist/ai/BbButton.md +841 -636
  37. package/dist/ai/BbCheckbox.md +585 -254
  38. package/dist/ai/BbCheckboxGroup.md +573 -361
  39. package/dist/ai/BbCollapsible.md +425 -103
  40. package/dist/ai/BbColorInput.md +536 -323
  41. package/dist/ai/BbColorPalette.md +569 -330
  42. package/dist/ai/BbConfirm.md +659 -136
  43. package/dist/ai/BbConfirmPortal.md +28 -0
  44. package/dist/ai/BbDatePicker.md +244 -0
  45. package/dist/ai/BbDatePickerInput.md +720 -388
  46. package/dist/ai/BbDialog.md +778 -99
  47. package/dist/ai/BbDropdown.md +1072 -763
  48. package/dist/ai/BbDropdownButton.md +525 -614
  49. package/dist/ai/BbDropdownGroup.md +34 -0
  50. package/dist/ai/BbDropzone.md +1206 -436
  51. package/dist/ai/BbForm.md +239 -0
  52. package/dist/ai/BbIcon.md +382 -212
  53. package/dist/ai/BbIndicator.md +283 -0
  54. package/dist/ai/BbNumberInput.md +717 -355
  55. package/dist/ai/BbOffCanvas.md +897 -498
  56. package/dist/ai/BbPagination.md +489 -535
  57. package/dist/ai/BbPopover.md +591 -546
  58. package/dist/ai/BbProgress.md +462 -69
  59. package/dist/ai/BbRadio.md +352 -229
  60. package/dist/ai/BbRadioGroup.md +437 -353
  61. package/dist/ai/BbRating.md +372 -225
  62. package/dist/ai/BbSelect.md +1399 -536
  63. package/dist/ai/BbSelectPopover.md +1255 -1578
  64. package/dist/ai/BbSlider.md +500 -256
  65. package/dist/ai/BbSmoothHeight.md +485 -139
  66. package/dist/ai/BbSpinner.md +718 -131
  67. package/dist/ai/BbSwitch.md +573 -119
  68. package/dist/ai/BbSwitchGroup.md +521 -214
  69. package/dist/ai/BbTable.md +1996 -2365
  70. package/dist/ai/BbTabs.md +1147 -0
  71. package/dist/ai/BbTabsList.md +29 -0
  72. package/dist/ai/BbTabsPanes.md +27 -0
  73. package/dist/ai/BbTabsRoot.md +57 -0
  74. package/dist/ai/BbTag.md +416 -292
  75. package/dist/ai/BbTextInput.md +878 -333
  76. package/dist/ai/BbTextarea.md +850 -255
  77. package/dist/ai/BbTimePicker.md +231 -0
  78. package/dist/ai/BbTimePickerInput.md +200 -0
  79. package/dist/ai/BbToast.md +669 -196
  80. package/dist/ai/BbToastPortal.md +28 -0
  81. package/dist/ai/BbTooltip.md +453 -346
  82. package/dist/ai/BbTree.md +993 -234
  83. package/dist/ai/ChipsBox.md +27 -199
  84. package/dist/ai/ClearableButton.md +21 -55
  85. package/dist/ai/CommaBox.md +25 -200
  86. package/dist/ai/CommonInputWrapper.md +42 -0
  87. package/dist/ai/CommonPopover.md +30 -510
  88. package/dist/ai/ErrorIcon.md +19 -56
  89. package/dist/ai/FlatListBox.md +35 -379
  90. package/dist/ai/GroupedListBox.md +37 -535
  91. package/dist/ai/GuidesComponent.md +21 -0
  92. package/dist/ai/ListBox.md +38 -231
  93. package/dist/ai/OptionsContainer.md +34 -253
  94. package/dist/ai/WarningIcon.md +21 -0
  95. package/dist/ai/components.json +15897 -0
  96. package/dist/ai/composables/useBbConfig.md +80 -0
  97. package/dist/ai/composables/useBbFormContext.md +110 -0
  98. package/dist/ai/composables/useBbTableContext.md +167 -0
  99. package/dist/ai/composables/useBbTabsContext.md +118 -0
  100. package/dist/ai/composables/useBroadcastChannelInstance.md +97 -0
  101. package/dist/ai/composables/useConfirm.md +313 -0
  102. package/dist/ai/composables/useCountdown.md +86 -0
  103. package/dist/ai/composables/useId.md +60 -0
  104. package/dist/ai/composables/useMobile.md +85 -0
  105. package/dist/ai/composables/useToast.md +238 -0
  106. package/dist/ai/guides/agent-contract.md +165 -0
  107. package/dist/ai/guides/ai-router.md +113 -0
  108. package/dist/ai/guides/app-layout.md +318 -0
  109. package/dist/ai/guides/coherence-playbook.md +136 -0
  110. package/dist/ai/guides/component-picker.md +236 -0
  111. package/dist/ai/guides/design-language.md +478 -0
  112. package/dist/ai/guides/design-tokens.md +450 -0
  113. package/dist/ai/guides/fetch-items-playbook.md +161 -0
  114. package/dist/ai/guides/floating-bottom-panel.md +130 -0
  115. package/dist/ai/guides/icons-policy.md +257 -0
  116. package/dist/ai/guides/inertia-helpers.md +1443 -0
  117. package/dist/ai/guides/inline-edit-playbook.md +267 -0
  118. package/dist/ai/guides/installation-and-plugin-setup.md +440 -0
  119. package/dist/ai/guides/migration/components/bb-alert.md +37 -0
  120. package/dist/ai/guides/migration/components/bb-avatar.md +24 -0
  121. package/dist/ai/guides/migration/components/bb-badge.md +110 -0
  122. package/dist/ai/guides/migration/components/bb-breadcrumbs.md +26 -0
  123. package/dist/ai/guides/migration/components/bb-button.md +55 -0
  124. package/dist/ai/guides/migration/components/bb-checkbox-group.md +54 -0
  125. package/dist/ai/guides/migration/components/bb-checkbox.md +45 -0
  126. package/dist/ai/guides/migration/components/bb-chip.md +35 -0
  127. package/dist/ai/guides/migration/components/bb-collapsible.md +26 -0
  128. package/dist/ai/guides/migration/components/bb-color-input.md +23 -0
  129. package/dist/ai/guides/migration/components/bb-color-palette.md +31 -0
  130. package/dist/ai/guides/migration/components/bb-date-picker-input.md +84 -0
  131. package/dist/ai/guides/migration/components/bb-dialog.md +46 -0
  132. package/dist/ai/guides/migration/components/bb-dropdown-button.md +31 -0
  133. package/dist/ai/guides/migration/components/bb-dropdown.md +36 -0
  134. package/dist/ai/guides/migration/components/bb-dropzone.md +27 -0
  135. package/dist/ai/guides/migration/components/bb-icon.md +27 -0
  136. package/dist/ai/guides/migration/components/bb-offcanvas.md +63 -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 +59 -0
  141. package/dist/ai/guides/migration/components/bb-select.md +69 -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 +113 -0
  156. package/dist/ai/guides/validated-forms.md +177 -0
  157. package/dist/ai/index.md +158 -32
  158. package/dist/ai/recipes/inertia/approvals-inbox.md +1635 -0
  159. package/dist/ai/recipes/inertia/inline-edit-workspace.md +1765 -0
  160. package/dist/ai/recipes/inertia/layout-scaffold.md +385 -0
  161. package/dist/ai/recipes/inertia/onboarding.md +1791 -0
  162. package/dist/ai/recipes/inertia/ownership-atlas.md +1327 -0
  163. package/dist/ai/recipes/inertia/record-form.md +1489 -0
  164. package/dist/ai/recipes/inertia/records-workspace.md +1416 -0
  165. package/dist/ai/recipes/inertia/upload-center.md +2003 -0
  166. package/dist/ai/recipes/inertia/wizard-form.md +1500 -0
  167. package/dist/ai/recipes/nuxt/approvals-inbox.md +1578 -0
  168. package/dist/ai/recipes/nuxt/inline-edit-workspace.md +1703 -0
  169. package/dist/ai/recipes/nuxt/layout-scaffold.md +385 -0
  170. package/dist/ai/recipes/nuxt/onboarding.md +1724 -0
  171. package/dist/ai/recipes/nuxt/record-form.md +1502 -0
  172. package/dist/ai/recipes/nuxt/records-workspace.md +1329 -0
  173. package/dist/ai/recipes/nuxt/upload-center.md +1886 -0
  174. package/dist/ai/recipes/nuxt/wizard-form.md +1509 -0
  175. package/dist/ai/recipes/vue/approvals-inbox.md +1496 -0
  176. package/dist/ai/recipes/vue/inline-edit-workspace.md +1594 -0
  177. package/dist/ai/recipes/vue/layout-scaffold.md +385 -0
  178. package/dist/ai/recipes/vue/onboarding.md +1679 -0
  179. package/dist/ai/recipes/vue/record-form.md +1586 -0
  180. package/dist/ai/recipes/vue/records-workspace.md +1245 -0
  181. package/dist/ai/recipes/vue/upload-center.md +1845 -0
  182. package/dist/ai/recipes/vue/wizard-form.md +1441 -0
  183. package/dist/ai/source/BbAccordion.md +123 -0
  184. package/dist/ai/source/BbAlert.md +401 -0
  185. package/dist/ai/source/BbAsterisk.md +32 -0
  186. package/dist/ai/source/BbAvatar.md +258 -0
  187. package/dist/ai/source/BbBadge.md +560 -0
  188. package/dist/ai/source/BbBadgeButton.md +490 -0
  189. package/dist/ai/source/BbBaseButton.md +682 -0
  190. package/dist/ai/source/BbBaseCheckbox.md +461 -0
  191. package/dist/ai/source/BbBaseCheckboxGroup.md +554 -0
  192. package/dist/ai/source/BbBaseCheckboxIcon.md +201 -0
  193. package/dist/ai/source/BbBaseColorInput.md +416 -0
  194. package/dist/ai/source/BbBaseColorPalette.md +934 -0
  195. package/dist/ai/source/BbBaseDatePicker.md +1001 -0
  196. package/dist/ai/source/BbBaseDatePickerInput.md +1785 -0
  197. package/dist/ai/source/BbBaseInputContainer.md +1210 -0
  198. package/dist/ai/source/BbBaseNumberInput.md +617 -0
  199. package/dist/ai/source/BbBaseRadio.md +377 -0
  200. package/dist/ai/source/BbBaseRadioGroup.md +533 -0
  201. package/dist/ai/source/BbBaseRadioIcon.md +153 -0
  202. package/dist/ai/source/BbBaseRating.md +573 -0
  203. package/dist/ai/source/BbBaseSelect.md +898 -0
  204. package/dist/ai/source/BbBaseSlider.md +1085 -0
  205. package/dist/ai/source/BbBaseSwitch.md +246 -0
  206. package/dist/ai/source/BbBaseSwitchGroup.md +302 -0
  207. package/dist/ai/source/BbBaseSwitchIcon.md +206 -0
  208. package/dist/ai/source/BbBaseTag.md +694 -0
  209. package/dist/ai/source/BbBaseTextInput.md +511 -0
  210. package/dist/ai/source/BbBaseTextarea.md +480 -0
  211. package/dist/ai/source/BbBaseTimePickerInput.md +1031 -0
  212. package/dist/ai/source/BbBreadcrumbs.md +815 -0
  213. package/dist/ai/source/BbButton.md +1006 -0
  214. package/dist/ai/source/BbCheckbox.md +326 -0
  215. package/dist/ai/source/BbCheckboxGroup.md +419 -0
  216. package/dist/ai/source/BbCollapsible.md +137 -0
  217. package/dist/ai/source/BbColorInput.md +322 -0
  218. package/dist/ai/source/BbColorPalette.md +371 -0
  219. package/dist/ai/source/BbConfirm.md +193 -0
  220. package/dist/ai/source/BbConfirmPortal.md +74 -0
  221. package/dist/ai/source/BbDatePicker.md +729 -0
  222. package/dist/ai/source/BbDatePickerInput.md +525 -0
  223. package/dist/ai/source/BbDialog.md +818 -0
  224. package/dist/ai/source/BbDropdown.md +2387 -0
  225. package/dist/ai/source/BbDropdownButton.md +315 -0
  226. package/dist/ai/source/BbDropdownGroup.md +1259 -0
  227. package/dist/ai/source/BbDropzone.md +864 -0
  228. package/dist/ai/source/BbForm.md +100 -0
  229. package/dist/ai/source/BbIcon.md +214 -0
  230. package/dist/ai/source/BbIndicator.md +298 -0
  231. package/dist/ai/source/BbNumberInput.md +374 -0
  232. package/dist/ai/source/BbOffCanvas.md +1266 -0
  233. package/dist/ai/source/BbPagination.md +835 -0
  234. package/dist/ai/source/BbPopover.md +860 -0
  235. package/dist/ai/source/BbProgress.md +140 -0
  236. package/dist/ai/source/BbRadio.md +303 -0
  237. package/dist/ai/source/BbRadioGroup.md +420 -0
  238. package/dist/ai/source/BbRating.md +369 -0
  239. package/dist/ai/source/BbSelect.md +688 -0
  240. package/dist/ai/source/BbSelectPopover.md +2234 -0
  241. package/dist/ai/source/BbSlider.md +378 -0
  242. package/dist/ai/source/BbSmoothHeight.md +265 -0
  243. package/dist/ai/source/BbSpinner.md +127 -0
  244. package/dist/ai/source/BbSwitch.md +175 -0
  245. package/dist/ai/source/BbSwitchGroup.md +240 -0
  246. package/dist/ai/source/BbTable.md +3433 -0
  247. package/dist/ai/source/BbTabs.md +403 -0
  248. package/dist/ai/source/BbTabsList.md +578 -0
  249. package/dist/ai/source/BbTabsPanes.md +368 -0
  250. package/dist/ai/source/BbTabsRoot.md +372 -0
  251. package/dist/ai/source/BbTag.md +390 -0
  252. package/dist/ai/source/BbTextInput.md +352 -0
  253. package/dist/ai/source/BbTextarea.md +337 -0
  254. package/dist/ai/source/BbTimePicker.md +595 -0
  255. package/dist/ai/source/BbTimePickerInput.md +376 -0
  256. package/dist/ai/source/BbToast.md +525 -0
  257. package/dist/ai/source/BbToastPortal.md +482 -0
  258. package/dist/ai/source/BbTooltip.md +522 -0
  259. package/dist/ai/source/BbTree.md +323 -0
  260. package/dist/ai/source/ChipsBox.md +201 -0
  261. package/dist/ai/source/ClearableButton.md +70 -0
  262. package/dist/ai/source/CommaBox.md +202 -0
  263. package/dist/ai/source/CommonInputWrapper.md +554 -0
  264. package/dist/ai/source/CommonPopover.md +616 -0
  265. package/dist/ai/source/ErrorIcon.md +43 -0
  266. package/dist/ai/source/FlatListBox.md +396 -0
  267. package/dist/ai/source/GroupedListBox.md +540 -0
  268. package/dist/ai/source/GuidesComponent.md +383 -0
  269. package/dist/ai/source/ListBox.md +238 -0
  270. package/dist/ai/source/OptionsContainer.md +191 -0
  271. package/dist/ai/source/WarningIcon.md +47 -0
  272. package/dist/alert-variants.d.ts +19 -0
  273. package/dist/assets/css/reset.css_inline.js +4 -0
  274. package/dist/assets/svgs/alert.svg_raw.js +4 -0
  275. package/dist/assets/svgs/calendar.svg_raw.js +4 -0
  276. package/dist/assets/svgs/check_stroke.svg_raw.js +4 -0
  277. package/dist/assets/svgs/chevron_down.svg_raw.js +4 -0
  278. package/dist/assets/svgs/chevron_right.svg_raw.js +4 -0
  279. package/dist/assets/svgs/clear.svg_raw.js +4 -0
  280. package/dist/assets/svgs/clock.svg_raw.js +4 -0
  281. package/dist/assets/svgs/error.svg_raw.js +4 -0
  282. package/dist/assets/svgs/search.svg_raw.js +4 -0
  283. package/dist/assets/svgs/sort.svg_raw.js +4 -0
  284. package/dist/assets/svgs/spinner.svg_raw.js +4 -0
  285. package/dist/assets/svgs/user.svg_raw.js +4 -0
  286. package/dist/badge-variants.d.ts +19 -0
  287. package/dist/button-variants.d.ts +21 -0
  288. package/dist/components/BbAccordion/BbAccordion.vue.d.ts +9 -3
  289. package/dist/components/BbAccordion/BbAccordion.vue.js +6 -0
  290. package/dist/components/BbAccordion/BbAccordion.vue_vue_type_script_setup_true_lang.js +66 -0
  291. package/dist/components/BbAccordion/types.d.ts +12 -8
  292. package/dist/components/BbAlert/BbAlert.vue.d.ts +12 -3
  293. package/dist/components/BbAlert/BbAlert.vue.js +6 -0
  294. package/dist/components/BbAlert/BbAlert.vue_vue_type_script_setup_true_lang.js +65 -0
  295. package/dist/components/BbAlert/types.d.ts +56 -12
  296. package/dist/components/BbAsterisk/BbAsterisk.vue.d.ts +3 -0
  297. package/dist/components/BbAsterisk/BbAsterisk.vue.js +6 -0
  298. package/dist/components/BbAsterisk/BbAsterisk.vue_vue_type_script_setup_true_lang.js +13 -0
  299. package/dist/components/BbAvatar/BbAvatar.vue.d.ts +5 -0
  300. package/dist/components/BbAvatar/BbAvatar.vue.js +6 -0
  301. package/dist/components/BbAvatar/BbAvatar.vue_vue_type_script_setup_true_lang.js +78 -0
  302. package/dist/components/BbAvatar/types.d.ts +6 -5
  303. package/dist/components/BbBadge/BadgeAppendIcon.vue.d.ts +3 -0
  304. package/dist/components/BbBadge/BadgeAppendIcon.vue.js +5 -0
  305. package/dist/components/BbBadge/BadgeAppendIcon.vue_vue_type_script_setup_true_lang.js +22 -0
  306. package/dist/components/BbBadge/BadgeBodyContent.vue.d.ts +15 -0
  307. package/dist/components/BbBadge/BadgeBodyContent.vue.js +5 -0
  308. package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +34 -0
  309. package/dist/components/BbBadge/BbBadge.vue.d.ts +8 -1
  310. package/dist/components/BbBadge/BbBadge.vue.js +6 -0
  311. package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +83 -0
  312. package/dist/components/BbBadge/BbBadgeButton.vue.d.ts +12 -0
  313. package/dist/components/BbBadge/BbBadgeButton.vue.js +5 -0
  314. package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +54 -0
  315. package/dist/components/BbBadge/badgeButtonContext.d.ts +27 -0
  316. package/dist/components/BbBadge/badgeButtonContext.js +5 -0
  317. package/dist/components/BbBadge/types.d.ts +61 -16
  318. package/dist/components/BbBaseButton/BbBaseButton.vue.d.ts +13 -0
  319. package/dist/components/BbBaseButton/BbBaseButton.vue.js +6 -0
  320. package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +171 -0
  321. package/dist/components/BbBaseButton/RouterComponent.vue.js +5 -0
  322. package/dist/components/BbBaseButton/RouterComponent.vue_vue_type_script_setup_true_lang.js +29 -0
  323. package/dist/components/BbBaseButton/types.d.ts +191 -0
  324. package/dist/components/BbBaseButton/types.js +33 -0
  325. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.d.ts +40 -0
  326. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.js +6 -0
  327. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue_vue_type_script_setup_true_lang.js +145 -0
  328. package/dist/components/BbBaseCheckbox/types.d.ts +224 -0
  329. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.d.ts +19 -0
  330. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.js +6 -0
  331. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue_vue_type_script_setup_true_lang.js +190 -0
  332. package/dist/components/BbBaseCheckboxGroup/types.d.ts +257 -0
  333. package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue.d.ts +4 -0
  334. package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue.js +6 -0
  335. package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue_vue_type_script_setup_true_lang.js +43 -0
  336. package/dist/components/BbBaseCheckboxIcon/types.d.ts +47 -0
  337. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.d.ts +42 -0
  338. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.js +6 -0
  339. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue_vue_type_script_setup_true_lang.js +178 -0
  340. package/dist/components/BbBaseColorInput/types.d.ts +210 -0
  341. package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue.d.ts +13 -0
  342. package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue.js +6 -0
  343. package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue_vue_type_script_setup_true_lang.js +395 -0
  344. package/dist/components/BbBaseColorPalette/types.d.ts +40 -0
  345. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.js +6 -0
  346. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue_vue_type_script_setup_true_lang.js +300 -0
  347. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.d.ts +44 -0
  348. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.js +5 -0
  349. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue_vue_type_script_setup_true_lang.js +310 -0
  350. package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.d.ts +5 -0
  351. package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.js +5 -0
  352. package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue_vue_type_script_setup_true_lang.js +63 -0
  353. package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.d.ts +5 -0
  354. package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.js +5 -0
  355. package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue_vue_type_script_setup_true_lang.js +75 -0
  356. package/dist/components/BbBaseDatePicker/typeahead.d.ts +112 -0
  357. package/dist/components/BbBaseDatePicker/typeahead.js +37 -0
  358. package/dist/components/BbBaseDatePicker/types.d.ts +97 -0
  359. package/dist/components/BbBaseDatePicker/useDatePickerContext.d.ts +58 -0
  360. package/dist/components/BbBaseDatePicker/useDatePickerContext.js +11 -0
  361. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.d.ts +30 -0
  362. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.js +6 -0
  363. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue_vue_type_script_setup_true_lang.js +716 -0
  364. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.d.ts +30 -0
  365. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.js +6 -0
  366. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue_vue_type_script_setup_true_lang.js +204 -0
  367. package/dist/components/BbBaseDatePickerInput/types.d.ts +311 -0
  368. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.d.ts +17 -0
  369. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.js +6 -0
  370. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue_vue_type_script_setup_true_lang.js +191 -0
  371. package/dist/components/BbBaseInputContainer/types.d.ts +197 -0
  372. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.d.ts +52 -0
  373. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.js +6 -0
  374. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue_vue_type_script_setup_true_lang.js +215 -0
  375. package/dist/components/BbBaseNumberInput/types.d.ts +211 -0
  376. package/dist/components/BbBaseRadio/BbBaseRadio.vue.d.ts +33 -0
  377. package/dist/components/BbBaseRadio/BbBaseRadio.vue.js +6 -0
  378. package/dist/components/BbBaseRadio/BbBaseRadio.vue_vue_type_script_setup_true_lang.js +114 -0
  379. package/dist/components/BbBaseRadio/types.d.ts +179 -0
  380. package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue.d.ts +19 -0
  381. package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue.js +6 -0
  382. package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue_vue_type_script_setup_true_lang.js +177 -0
  383. package/dist/components/BbBaseRadioGroup/types.d.ts +223 -0
  384. package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue.d.ts +4 -0
  385. package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue.js +6 -0
  386. package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue_vue_type_script_setup_true_lang.js +28 -0
  387. package/dist/components/BbBaseRadioIcon/types.d.ts +41 -0
  388. package/dist/components/BbBaseRating/BbBaseRating.vue.d.ts +38 -0
  389. package/dist/components/BbBaseRating/BbBaseRating.vue.js +6 -0
  390. package/dist/components/BbBaseRating/BbBaseRating.vue_vue_type_script_setup_true_lang.js +184 -0
  391. package/dist/components/BbBaseRating/types.d.ts +168 -0
  392. package/dist/components/BbBaseSelect/BbBaseSelect.vue.d.ts +19 -0
  393. package/dist/components/BbBaseSelect/BbBaseSelect.vue.js +6 -0
  394. package/dist/components/BbBaseSelect/BbBaseSelect.vue_vue_type_script_setup_true_lang.js +307 -0
  395. package/dist/components/BbBaseSelect/types.d.ts +297 -0
  396. package/dist/components/BbBaseSlider/BbBaseSlider.vue.d.ts +35 -0
  397. package/dist/components/BbBaseSlider/BbBaseSlider.vue.js +6 -0
  398. package/dist/components/BbBaseSlider/BbBaseSlider.vue_vue_type_script_setup_true_lang.js +324 -0
  399. package/dist/components/BbBaseSlider/types.d.ts +200 -0
  400. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue.d.ts +35 -0
  401. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue.js +6 -0
  402. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue_vue_type_script_setup_true_lang.js +146 -0
  403. package/dist/components/BbBaseSwitch/types.d.ts +10 -0
  404. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.d.ts +19 -0
  405. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.js +6 -0
  406. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue_vue_type_script_setup_true_lang.js +190 -0
  407. package/dist/components/BbBaseSwitchGroup/types.d.ts +8 -0
  408. package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue.d.ts +4 -0
  409. package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue.js +6 -0
  410. package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue_vue_type_script_setup_true_lang.js +30 -0
  411. package/dist/components/BbBaseSwitchIcon/types.d.ts +48 -0
  412. package/dist/components/BbBaseTag/BbBaseTag.vue.d.ts +50 -0
  413. package/dist/components/BbBaseTag/BbBaseTag.vue.js +6 -0
  414. package/dist/components/BbBaseTag/BbBaseTag.vue_vue_type_script_setup_true_lang.js +266 -0
  415. package/dist/components/BbBaseTag/types.d.ts +160 -0
  416. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.d.ts +45 -0
  417. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.js +6 -0
  418. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue_vue_type_script_setup_true_lang.js +200 -0
  419. package/dist/components/BbBaseTextInput/types.d.ts +209 -0
  420. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.d.ts +39 -0
  421. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.js +6 -0
  422. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue_vue_type_script_setup_true_lang.js +175 -0
  423. package/dist/components/BbBaseTextarea/types.d.ts +170 -0
  424. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.d.ts +27 -0
  425. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.js +6 -0
  426. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue_vue_type_script_setup_true_lang.js +522 -0
  427. package/dist/components/BbBaseTimePickerInput/types.d.ts +151 -0
  428. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue.d.ts +0 -1
  429. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue.js +6 -0
  430. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +224 -0
  431. package/dist/components/BbBreadcrumbs/estimateBreadcrumbItemWidth.js +47 -0
  432. package/dist/components/BbBreadcrumbs/types.d.ts +37 -22
  433. package/dist/components/BbButton/BbButton.vue.d.ts +6 -5
  434. package/dist/components/BbButton/BbButton.vue.js +6 -0
  435. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +181 -0
  436. package/dist/components/BbButton/types.d.ts +48 -47
  437. package/dist/components/BbCheckbox/BbCheckbox.vue.d.ts +4 -3
  438. package/dist/components/BbCheckbox/BbCheckbox.vue.js +6 -0
  439. package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +146 -0
  440. package/dist/components/BbCheckbox/types.d.ts +31 -10
  441. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue.d.ts +2 -13
  442. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue.js +6 -0
  443. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +190 -0
  444. package/dist/components/BbCheckboxGroup/types.d.ts +51 -23
  445. package/dist/components/BbCollapsible/BbCollapsible.vue.d.ts +2 -1
  446. package/dist/components/BbCollapsible/BbCollapsible.vue.js +6 -0
  447. package/dist/components/BbCollapsible/BbCollapsible.vue_vue_type_script_setup_true_lang.js +31 -0
  448. package/dist/components/BbCollapsible/types.d.ts +13 -8
  449. package/dist/components/BbColorInput/BbColorInput.vue.d.ts +10 -1
  450. package/dist/components/BbColorInput/BbColorInput.vue.js +6 -0
  451. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +177 -0
  452. package/dist/components/BbColorInput/types.d.ts +44 -11
  453. package/dist/components/BbColorPalette/BbColorPalette.vue.d.ts +5 -8
  454. package/dist/components/BbColorPalette/BbColorPalette.vue.js +5 -0
  455. package/dist/components/BbColorPalette/BbColorPalette.vue_vue_type_script_setup_true_lang.js +126 -0
  456. package/dist/components/BbColorPalette/types.d.ts +71 -52
  457. package/dist/components/BbConfirm/BbConfirm.vue.js +6 -0
  458. package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +138 -0
  459. package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +5 -6
  460. package/dist/components/BbConfirm/BbConfirmPortal.vue.js +5 -0
  461. package/dist/components/BbConfirm/BbConfirmPortal.vue_vue_type_script_setup_true_lang.js +19 -0
  462. package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +37 -0
  463. package/dist/components/BbDatePicker/BbDatePicker.vue.js +6 -0
  464. package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +319 -0
  465. package/dist/components/BbDatePicker/types.d.ts +159 -0
  466. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +3 -1
  467. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.js +6 -0
  468. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +179 -0
  469. package/dist/components/BbDatePickerInput/types.d.ts +134 -16
  470. package/dist/components/BbDialog/BbDialog.vue.d.ts +14 -6
  471. package/dist/components/BbDialog/BbDialog.vue.js +6 -0
  472. package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +214 -0
  473. package/dist/components/BbDialog/types.d.ts +146 -1
  474. package/dist/components/BbDialog/useDialogStack.d.ts +5 -0
  475. package/dist/components/BbDialog/useDialogStack.js +20 -0
  476. package/dist/components/BbDropdown/AdaptiveDropdown.vue.d.ts +24 -0
  477. package/dist/components/BbDropdown/AdaptiveDropdown.vue.js +6 -0
  478. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +116 -0
  479. package/dist/components/BbDropdown/BbDropdown.vue.d.ts +14 -7
  480. package/dist/components/BbDropdown/BbDropdown.vue.js +6 -0
  481. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +561 -0
  482. package/dist/components/BbDropdown/BbDropdownGroup.vue.d.ts +44 -0
  483. package/dist/components/BbDropdown/BbDropdownGroup.vue.js +5 -0
  484. package/dist/components/BbDropdown/BbDropdownGroup.vue_vue_type_script_setup_true_lang.js +36 -0
  485. package/dist/components/BbDropdown/BbDropdownList.vue.d.ts +31 -0
  486. package/dist/components/BbDropdown/BbDropdownList.vue.js +6 -0
  487. package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +470 -0
  488. package/dist/components/BbDropdown/DropdownPipelineResolver.vue.d.ts +16 -0
  489. package/dist/components/BbDropdown/DropdownPipelineResolver.vue.js +5 -0
  490. package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +168 -0
  491. package/dist/components/BbDropdown/normalizeGroups.d.ts +18 -0
  492. package/dist/components/BbDropdown/normalizeGroups.js +46 -0
  493. package/dist/components/BbDropdown/types.d.ts +468 -46
  494. package/dist/components/BbDropdown/types.js +4 -0
  495. package/dist/components/BbDropdown/useDropdownContext.d.ts +89 -0
  496. package/dist/components/BbDropdown/useDropdownContext.js +9 -0
  497. package/dist/components/BbDropdown/useDropdownGroupRegistry.d.ts +108 -0
  498. package/dist/components/BbDropdown/useDropdownGroupRegistry.js +5 -0
  499. package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +3 -3
  500. package/dist/components/BbDropdownButton/BbDropdownButton.vue.js +6 -0
  501. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +119 -0
  502. package/dist/components/BbDropdownButton/types.d.ts +47 -52
  503. package/dist/components/BbDropzone/BbDropzone.vue.d.ts +5 -4
  504. package/dist/components/BbDropzone/BbDropzone.vue.js +6 -0
  505. package/dist/components/BbDropzone/BbDropzone.vue_vue_type_script_setup_true_lang.js +308 -0
  506. package/dist/components/BbDropzone/types.d.ts +77 -8
  507. package/dist/components/BbIcon/BbIcon.vue.d.ts +3 -2
  508. package/dist/components/BbIcon/BbIcon.vue.js +6 -0
  509. package/dist/components/BbIcon/BbIcon.vue_vue_type_script_setup_true_lang.js +65 -0
  510. package/dist/components/BbIcon/types.d.ts +6 -19
  511. package/dist/components/BbIndicator/BbIndicator.vue.d.ts +14 -0
  512. package/dist/components/BbIndicator/BbIndicator.vue.js +6 -0
  513. package/dist/components/BbIndicator/BbIndicator.vue_vue_type_script_setup_true_lang.js +56 -0
  514. package/dist/components/BbIndicator/types.d.ts +49 -0
  515. package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +12 -6
  516. package/dist/components/BbNumberInput/BbNumberInput.vue.js +6 -0
  517. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +194 -0
  518. package/dist/components/BbNumberInput/types.d.ts +40 -4
  519. package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +16 -10
  520. package/dist/components/BbOffCanvas/BbOffCanvas.vue.js +6 -0
  521. package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +284 -0
  522. package/dist/components/BbOffCanvas/types.d.ts +71 -39
  523. package/dist/components/BbOffCanvas/useOffCanvasStack.d.ts +25 -0
  524. package/dist/components/BbOffCanvas/useOffCanvasStack.js +68 -0
  525. package/dist/components/BbPagination/BbPagination.vue.d.ts +9 -4
  526. package/dist/components/BbPagination/BbPagination.vue.js +6 -0
  527. package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +244 -0
  528. package/dist/components/BbPagination/paginationFit.d.ts +38 -0
  529. package/dist/components/BbPagination/paginationFit.js +13 -0
  530. package/dist/components/BbPagination/types.d.ts +51 -16
  531. package/dist/components/BbPopover/BbPopover.vue.d.ts +16 -15
  532. package/dist/components/BbPopover/BbPopover.vue.js +6 -0
  533. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +309 -0
  534. package/dist/components/BbPopover/escapeStack.d.ts +6 -0
  535. package/dist/components/BbPopover/escapeStack.js +10 -0
  536. package/dist/components/BbPopover/types.d.ts +90 -31
  537. package/dist/components/BbProgress/BbProgress.vue.d.ts +1 -0
  538. package/dist/components/BbProgress/BbProgress.vue.js +6 -0
  539. package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +36 -0
  540. package/dist/components/BbProgress/types.d.ts +15 -1
  541. package/dist/components/BbRadio/BbRadio.vue.d.ts +5 -3
  542. package/dist/components/BbRadio/BbRadio.vue.js +6 -0
  543. package/dist/components/BbRadio/BbRadio.vue_vue_type_script_setup_true_lang.js +133 -0
  544. package/dist/components/BbRadio/types.d.ts +32 -9
  545. package/dist/components/BbRadioGroup/BbRadioGroup.vue.d.ts +4 -14
  546. package/dist/components/BbRadioGroup/BbRadioGroup.vue.js +6 -0
  547. package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +186 -0
  548. package/dist/components/BbRadioGroup/types.d.ts +48 -22
  549. package/dist/components/BbRating/BbRating.vue.d.ts +4 -1
  550. package/dist/components/BbRating/BbRating.vue.js +6 -0
  551. package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +150 -0
  552. package/dist/components/BbRating/types.d.ts +44 -10
  553. package/dist/components/BbSelect/BbSelect.vue.d.ts +2 -11
  554. package/dist/components/BbSelect/BbSelect.vue.js +6 -0
  555. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +241 -0
  556. package/dist/components/BbSelect/types.d.ts +112 -59
  557. package/dist/components/BbSelectPopover/BbSelectPopover.vue.d.ts +1 -10
  558. package/dist/components/BbSelectPopover/BbSelectPopover.vue.js +6 -0
  559. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +639 -0
  560. package/dist/components/BbSelectPopover/types.d.ts +197 -105
  561. package/dist/components/BbSlider/BbSlider.vue.d.ts +3 -6
  562. package/dist/components/BbSlider/BbSlider.vue.js +6 -0
  563. package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +166 -0
  564. package/dist/components/BbSlider/types.d.ts +44 -13
  565. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.d.ts +3 -1
  566. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.js +6 -0
  567. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue_vue_type_script_setup_true_lang.js +79 -0
  568. package/dist/components/BbSmoothHeight/types.d.ts +17 -2
  569. package/dist/components/BbSpinner/BbSpinner.vue.d.ts +1 -1
  570. package/dist/components/BbSpinner/BbSpinner.vue.js +6 -0
  571. package/dist/components/BbSpinner/BbSpinner.vue_vue_type_script_setup_true_lang.js +30 -0
  572. package/dist/components/BbSpinner/types.d.ts +10 -3
  573. package/dist/components/BbSwitch/BbSwitch.vue.d.ts +5 -3
  574. package/dist/components/BbSwitch/BbSwitch.vue.js +6 -0
  575. package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +142 -0
  576. package/dist/components/BbSwitch/types.d.ts +3 -1
  577. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue.d.ts +4 -14
  578. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue.js +6 -0
  579. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +190 -0
  580. package/dist/components/BbSwitchGroup/types.d.ts +3 -22
  581. package/dist/components/BbTable/BbTable.vue.d.ts +58 -31
  582. package/dist/components/BbTable/BbTable.vue.js +6 -0
  583. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +900 -0
  584. package/dist/components/BbTable/types.d.ts +213 -37
  585. package/dist/components/BbTable/utils.d.ts +9 -1
  586. package/dist/components/BbTable/utils.js +53 -0
  587. package/dist/components/BbTabs/BbTabs.vue.d.ts +20 -0
  588. package/dist/components/BbTabs/BbTabs.vue.js +6 -0
  589. package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +64 -0
  590. package/dist/components/BbTabs/BbTabsList.vue.d.ts +19 -0
  591. package/dist/components/BbTabs/BbTabsList.vue.js +6 -0
  592. package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +123 -0
  593. package/dist/components/BbTabs/BbTabsPanes.vue.d.ts +16 -0
  594. package/dist/components/BbTabs/BbTabsPanes.vue.js +6 -0
  595. package/dist/components/BbTabs/BbTabsPanes.vue_vue_type_script_setup_true_lang.js +35 -0
  596. package/dist/components/BbTabs/BbTabsRoot.vue.d.ts +20 -0
  597. package/dist/components/BbTabs/BbTabsRoot.vue.js +5 -0
  598. package/dist/components/BbTabs/BbTabsRoot.vue_vue_type_script_setup_true_lang.js +55 -0
  599. package/dist/components/BbTabs/types.d.ts +264 -0
  600. package/dist/components/BbTag/BbTag.vue.d.ts +19 -6
  601. package/dist/components/BbTag/BbTag.vue.js +6 -0
  602. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +187 -0
  603. package/dist/components/BbTag/types.d.ts +55 -17
  604. package/dist/components/BbTextInput/BbTextInput.vue.d.ts +10 -1
  605. package/dist/components/BbTextInput/BbTextInput.vue.js +6 -0
  606. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +195 -0
  607. package/dist/components/BbTextInput/types.d.ts +31 -4
  608. package/dist/components/BbTextarea/BbTextarea.vue.d.ts +10 -1
  609. package/dist/components/BbTextarea/BbTextarea.vue.js +6 -0
  610. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +178 -0
  611. package/dist/components/BbTextarea/types.d.ts +33 -2
  612. package/dist/components/BbTimePicker/BbTimePicker.vue.d.ts +33 -0
  613. package/dist/components/BbTimePicker/BbTimePicker.vue.js +6 -0
  614. package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +244 -0
  615. package/dist/components/BbTimePicker/types.d.ts +133 -0
  616. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue.d.ts +25 -0
  617. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue.js +6 -0
  618. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +157 -0
  619. package/dist/components/BbTimePickerInput/types.d.ts +174 -0
  620. package/dist/components/BbToast/BbToast.vue.d.ts +2 -3
  621. package/dist/components/BbToast/BbToast.vue.js +6 -0
  622. package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +39 -0
  623. package/dist/components/BbToast/BbToastMessage.vue.d.ts +17 -8
  624. package/dist/components/BbToast/BbToastMessage.vue.js +5 -0
  625. package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +170 -0
  626. package/dist/components/BbToast/BbToastPortal.vue.d.ts +30 -0
  627. package/dist/components/BbToast/BbToastPortal.vue.js +5 -0
  628. package/dist/components/BbToast/BbToastPortal.vue_vue_type_script_setup_true_lang.js +19 -0
  629. package/dist/components/BbToast/BbToastRegion.vue.d.ts +8 -0
  630. package/dist/components/BbToast/BbToastRegion.vue.js +5 -0
  631. package/dist/components/BbToast/BbToastRegion.vue_vue_type_script_setup_true_lang.js +100 -0
  632. package/dist/components/BbToast/types.d.ts +69 -5
  633. package/dist/components/BbTooltip/BbTooltip.vue.d.ts +10 -3
  634. package/dist/components/BbTooltip/BbTooltip.vue.js +6 -0
  635. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +160 -0
  636. package/dist/components/BbTooltip/types.d.ts +69 -11
  637. package/dist/components/BbTree/BbTree.vue.d.ts +28 -13
  638. package/dist/components/BbTree/BbTree.vue.js +6 -0
  639. package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +55 -0
  640. package/dist/components/BbTree/BbTreeLevel.vue.d.ts +19 -0
  641. package/dist/components/BbTree/BbTreeLevel.vue.js +5 -0
  642. package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +94 -0
  643. package/dist/components/BbTree/context.d.ts +17 -0
  644. package/dist/components/BbTree/context.js +4 -0
  645. package/dist/components/BbTree/types.d.ts +94 -41
  646. package/dist/components/ChipsBox/ChipsBox.vue.d.ts +2 -1
  647. package/dist/components/ChipsBox/ChipsBox.vue.js +5 -0
  648. package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +98 -0
  649. package/dist/components/ChipsBox/types.d.ts +12 -5
  650. package/dist/components/ClearableButton/ClearableButton.vue.d.ts +2 -1
  651. package/dist/components/ClearableButton/ClearableButton.vue.js +6 -0
  652. package/dist/components/ClearableButton/ClearableButton.vue_vue_type_script_setup_true_lang.js +19 -0
  653. package/dist/components/ClearableButton/types.d.ts +7 -1
  654. package/dist/components/CloseIcon/CloseButton.vue.d.ts +5 -0
  655. package/dist/components/CloseIcon/CloseButton.vue.js +7 -0
  656. package/dist/components/CloseIcon/CloseButton.vue_vue_type_script_setup_true_lang.js +23 -0
  657. package/dist/components/CloseIcon/types.d.ts +2 -0
  658. package/dist/components/CommaBox/CommaBox.vue.d.ts +2 -1
  659. package/dist/components/CommaBox/CommaBox.vue.js +6 -0
  660. package/dist/components/CommaBox/CommaBox.vue_vue_type_script_setup_true_lang.js +81 -0
  661. package/dist/components/CommaBox/types.d.ts +6 -7
  662. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue.d.ts +19 -0
  663. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue.js +6 -0
  664. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue_vue_type_script_setup_true_lang.js +107 -0
  665. package/dist/components/CommonInputWrapper/types.d.ts +96 -0
  666. package/dist/components/CommonPopover/CommonPopover.vue.d.ts +9 -3
  667. package/dist/components/CommonPopover/CommonPopover.vue.js +6 -0
  668. package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +160 -0
  669. package/dist/components/CommonPopover/types.d.ts +65 -16
  670. package/dist/components/ErrorIcon/ErrorIcon.vue.d.ts +2 -0
  671. package/dist/components/ErrorIcon/ErrorIcon.vue.js +6 -0
  672. package/dist/components/ErrorIcon/ErrorIcon.vue_vue_type_script_setup_true_lang.js +16 -0
  673. package/dist/components/FlatListBox/FlatListBox.vue.d.ts +2 -5
  674. package/dist/components/FlatListBox/FlatListBox.vue.js +5 -0
  675. package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +167 -0
  676. package/dist/components/FlatListBox/types.d.ts +1 -1
  677. package/dist/components/GroupedListBox/GroupedListBox.vue.d.ts +2 -5
  678. package/dist/components/GroupedListBox/GroupedListBox.vue.js +5 -0
  679. package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +218 -0
  680. package/dist/components/ListBox/ListBox.vue.d.ts +3 -6
  681. package/dist/components/ListBox/ListBox.vue.js +5 -0
  682. package/dist/components/ListBox/ListBox.vue_vue_type_script_setup_true_lang.js +112 -0
  683. package/dist/components/ListBox/types.d.ts +1 -1
  684. package/dist/components/OptionsContainer/OptionsContainer.vue.d.ts +1 -0
  685. package/dist/components/OptionsContainer/OptionsContainer.vue.js +5 -0
  686. package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +52 -0
  687. package/dist/components/OptionsContainer/types.d.ts +14 -24
  688. package/dist/components/Transitions/ScaleFade.vue.d.ts +2 -2
  689. package/dist/components/Transitions/ScaleFade.vue.js +5 -0
  690. package/dist/components/Transitions/ScaleFade.vue_vue_type_script_setup_true_lang.js +47 -0
  691. package/dist/components/Transitions/Slide.vue.d.ts +15 -0
  692. package/dist/components/Transitions/Slide.vue.js +7 -0
  693. package/dist/components/Transitions/Slide.vue_vue_type_script_setup_true_lang.js +28 -0
  694. package/dist/components/WarningIcon/WarningIcon.vue.d.ts +5 -0
  695. package/dist/components/WarningIcon/WarningIcon.vue.js +6 -0
  696. package/dist/components/WarningIcon/WarningIcon.vue_vue_type_script_setup_true_lang.js +16 -0
  697. package/dist/components/WarningIcon/types.d.ts +3 -0
  698. package/dist/composables/__testResets.d.ts +1 -0
  699. package/dist/composables/useActiveInactiveState.d.ts +4 -0
  700. package/dist/composables/useActiveInactiveState.js +21 -0
  701. package/dist/composables/useBaseOptions.d.ts +3 -3
  702. package/dist/composables/useBaseOptions.js +31 -0
  703. package/dist/composables/useBbConfig.d.ts +8 -37
  704. package/dist/composables/useBbConfig.js +5 -0
  705. package/dist/composables/useBbDropdownContext.d.ts +89 -0
  706. package/dist/composables/useBbDropdownContext.js +46 -0
  707. package/dist/composables/useBbFormContext.d.ts +90 -0
  708. package/dist/composables/useBbFormContext.js +69 -0
  709. package/dist/composables/useBbTableContext.d.ts +195 -0
  710. package/dist/composables/useBbTableContext.js +208 -0
  711. package/dist/composables/useBbTabsContext.d.ts +111 -0
  712. package/dist/composables/useBbTabsContext.js +225 -0
  713. package/dist/composables/useBreakpoint.d.ts +13 -0
  714. package/dist/composables/useBreakpoint.js +39 -0
  715. package/dist/composables/useBroadcastChannelInstance.d.ts +1 -3
  716. package/dist/composables/useBroadcastChannelInstance.js +39 -0
  717. package/dist/composables/useCancelableFunction.js +37 -0
  718. package/dist/composables/useClosingInert.d.ts +28 -0
  719. package/dist/composables/useClosingInert.js +23 -0
  720. package/dist/composables/useCoherence.js +16 -0
  721. package/dist/composables/useConfirm.d.ts +278 -68
  722. package/dist/composables/useConfirm.js +130 -0
  723. package/dist/composables/useCountdown.js +42 -0
  724. package/dist/composables/useHashedWatcher.d.ts +17 -0
  725. package/dist/composables/useHashedWatcher.js +14 -0
  726. package/dist/composables/useId.d.ts +3 -2
  727. package/dist/composables/useIndexById.js +16 -0
  728. package/dist/composables/useInertiaPage.d.ts +10 -0
  729. package/dist/composables/useInertiaPage.js +8 -0
  730. package/dist/composables/useItemText.js +17 -0
  731. package/dist/composables/useItemValue.js +9 -0
  732. package/dist/composables/useItemsGetter.d.ts +1 -1
  733. package/dist/composables/useItemsGetter.js +30 -0
  734. package/dist/composables/useListboxFocus.js +66 -0
  735. package/dist/composables/useLocale.d.ts +1 -1
  736. package/dist/composables/useLocale.js +11 -0
  737. package/dist/composables/useLogger.d.ts +1 -1
  738. package/dist/composables/useLogger.js +10 -0
  739. package/dist/composables/useMinimalQueue.d.ts +1 -1
  740. package/dist/composables/useMobile.js +7 -0
  741. package/dist/composables/useOnFalsy.d.ts +2 -0
  742. package/dist/composables/useOnFalsy.js +9 -0
  743. package/dist/composables/useOnTruthy.d.ts +7 -0
  744. package/dist/composables/useOnTruthy.js +9 -0
  745. package/dist/composables/usePrefill.d.ts +2 -1
  746. package/dist/composables/usePrefill.js +24 -0
  747. package/dist/composables/useQuery.d.ts +15 -3
  748. package/dist/composables/useQuery.js +42 -0
  749. package/dist/composables/useRoute.js +11 -0
  750. package/dist/composables/useRouter.js +8 -0
  751. package/dist/composables/useSafeArea.d.ts +51 -0
  752. package/dist/composables/useSafeArea.js +16 -0
  753. package/dist/composables/useSegmentedFields.d.ts +104 -0
  754. package/dist/composables/useSegmentedFields.js +159 -0
  755. package/dist/composables/useTableWidthContext.d.ts +5 -0
  756. package/dist/composables/useTableWidthContext.js +42 -0
  757. package/dist/composables/useToast.d.ts +40 -70
  758. package/dist/composables/useToast.js +58 -0
  759. package/dist/composables/useTopLayer.d.ts +9 -0
  760. package/dist/composables/useTopLayer.js +7 -0
  761. package/dist/composables/useUntil.js +13 -0
  762. package/dist/composables/useViewportWidth.d.ts +17 -0
  763. package/dist/composables/useViewportWidth.js +6 -0
  764. package/dist/confirm-variants.d.ts +17 -0
  765. package/dist/deprecation/ai-deprecations.json.d.ts +784 -0
  766. package/dist/deprecation/ai-deprecations.json.js +4 -0
  767. package/dist/deprecation/removedProps.d.ts +3 -0
  768. package/dist/deprecation/removedProps.js +13 -0
  769. package/dist/directives/bbColor.d.ts +65 -0
  770. package/dist/directives/bbColor.js +24 -0
  771. package/dist/directives/bbDate.d.ts +66 -0
  772. package/dist/directives/bbDate.js +24 -0
  773. package/dist/directives/bbDropdown.d.ts +15 -11
  774. package/dist/directives/bbDropdown.js +23 -0
  775. package/dist/directives/bbTime.d.ts +64 -0
  776. package/dist/directives/bbTime.js +24 -0
  777. package/dist/directives/bbTooltip.d.ts +16 -11
  778. package/dist/directives/bbTooltip.js +24 -0
  779. package/dist/directives/createPopoverDirective.js +54 -0
  780. package/dist/dropdown-item-variants.d.ts +17 -0
  781. package/dist/i18n/index.d.ts +51 -3
  782. package/dist/i18n/index.js +27 -0
  783. package/dist/i18n/locales/cs.json +115 -0
  784. package/dist/i18n/locales/da.json +115 -0
  785. package/dist/i18n/locales/de.json +115 -0
  786. package/dist/i18n/locales/el.json +115 -0
  787. package/dist/i18n/locales/en.json +115 -0
  788. package/dist/i18n/locales/es.json +115 -0
  789. package/dist/i18n/locales/fi.json +115 -0
  790. package/dist/i18n/locales/fr.json +115 -0
  791. package/dist/i18n/locales/hu.json +115 -0
  792. package/dist/i18n/locales/it.json +115 -0
  793. package/dist/i18n/locales/ja.json +115 -0
  794. package/dist/i18n/locales/ko.json +115 -0
  795. package/dist/i18n/locales/nb.json +115 -0
  796. package/dist/i18n/locales/nl.json +115 -0
  797. package/dist/i18n/locales/pl.json +115 -0
  798. package/dist/i18n/locales/pt.json +115 -0
  799. package/dist/i18n/locales/ro.json +115 -0
  800. package/dist/i18n/locales/ru.json +115 -0
  801. package/dist/i18n/locales/sv.json +115 -0
  802. package/dist/i18n/locales/tr.json +115 -0
  803. package/dist/i18n/locales/uk.json +115 -0
  804. package/dist/i18n/locales/zh-cn.json +115 -0
  805. package/dist/icons-whitelist.d.ts +8 -0
  806. package/dist/index.d.ts +96 -79
  807. package/dist/index.js +76 -82
  808. package/dist/indicator-variants.d.ts +20 -0
  809. package/dist/llms-full.txt +79703 -0
  810. package/dist/llms-medium.txt +1514 -0
  811. package/dist/llms.txt +105 -0
  812. package/dist/locale-blueprint.json +141 -0
  813. package/dist/locale-registry.d.ts +37 -0
  814. package/dist/nuxt-module.d.ts +3 -0
  815. package/dist/nuxt.js +19 -0
  816. package/dist/plugin.d.ts +4 -0
  817. package/dist/plugin.js +22 -0
  818. package/dist/reset.css +1 -0
  819. package/dist/reset.d.ts +0 -0
  820. package/dist/runtime/nuxt-plugin.d.ts +2 -0
  821. package/dist/runtime/nuxt-plugin.js +24 -0
  822. package/dist/styles.css +2 -0
  823. package/dist/styles.d.ts +0 -0
  824. package/dist/toast-variants.d.ts +20 -0
  825. package/dist/tooltip-variants.d.ts +17 -0
  826. package/dist/types/ActionButton.d.ts +32 -0
  827. package/dist/types/AlertVariant.d.ts +16 -0
  828. package/dist/types/BadgeVariant.d.ts +16 -0
  829. package/dist/types/ButtonVariant.d.ts +17 -0
  830. package/dist/types/Classes.d.ts +1 -1
  831. package/dist/types/ColumnName.d.ts +1 -1
  832. package/dist/types/CommonProps.d.ts +68 -277
  833. package/dist/types/Config.d.ts +84 -0
  834. package/dist/types/ConfirmVariant.d.ts +15 -0
  835. package/dist/types/DropdownItemVariant.d.ts +18 -0
  836. package/dist/types/Icon.d.ts +5 -7
  837. package/dist/types/IndicatorVariant.d.ts +16 -0
  838. package/dist/types/InputDirection.d.ts +15 -0
  839. package/dist/types/ItemAccessor.d.ts +21 -0
  840. package/dist/types/Placement.d.ts +6 -0
  841. package/dist/types/ResponsiveSize.d.ts +20 -0
  842. package/dist/types/SizeScale.d.ts +8 -0
  843. package/dist/types/ToastVariant.d.ts +17 -0
  844. package/dist/types/TooltipVariant.d.ts +18 -0
  845. package/dist/utilities/functions/bytesToUnit.d.ts +2 -0
  846. package/dist/utilities/functions/bytesToUnit.js +18 -0
  847. package/dist/utilities/functions/clampPrecision.js +10 -0
  848. package/dist/utilities/functions/convertDateValue.d.ts +23 -10
  849. package/dist/utilities/functions/convertDateValue.js +12 -0
  850. package/dist/utilities/functions/deburr.js +5 -0
  851. package/dist/utilities/functions/empty.js +5 -0
  852. package/dist/utilities/functions/flattenTree.d.ts +1 -1
  853. package/dist/utilities/functions/hash.js +5 -0
  854. package/dist/utilities/functions/isDateDisabled.d.ts +1 -0
  855. package/dist/utilities/functions/isDateDisabled.js +20 -0
  856. package/dist/utilities/functions/isEqual.js +5 -0
  857. package/dist/utilities/functions/isNotEmpty.js +5 -0
  858. package/dist/utilities/functions/matchAnyKey.d.ts +1 -1
  859. package/dist/utilities/functions/matchAnyKey.js +15 -0
  860. package/dist/utilities/functions/parseSize.d.ts +1 -1
  861. package/dist/utilities/functions/parseSize.js +15 -0
  862. package/dist/utilities/functions/percentage.js +11 -0
  863. package/dist/utilities/functions/pipe.d.ts +1 -1
  864. package/dist/utilities/functions/reject.d.ts +25 -0
  865. package/dist/utilities/functions/reject.js +28 -0
  866. package/dist/utilities/functions/resolveEnumProp.d.ts +19 -0
  867. package/dist/utilities/functions/resolveEnumProp.js +5 -0
  868. package/dist/utilities/functions/slotKey.d.ts +13 -0
  869. package/dist/utilities/functions/slotKey.js +4 -0
  870. package/dist/utilities/functions/sort.d.ts +2 -2
  871. package/dist/utilities/functions/sort.js +19 -0
  872. package/dist/utilities/functions/throttle.js +5 -0
  873. package/dist/utilities/functions/waitFor.d.ts +9 -2
  874. package/dist/utilities/functions/waitFor.js +14 -0
  875. package/dist/utilities/functions/warnRemovedAttrs.d.ts +11 -0
  876. package/dist/utilities/functions/warnRemovedAttrs.js +20 -0
  877. package/dist/utilities/functions/when.js +5 -0
  878. package/dist/utilities/misc/iconsInjectionKey.d.ts +15 -0
  879. package/dist/utilities/misc/iconsInjectionKey.js +4 -0
  880. package/dist/utilities/misc/transitions.d.ts +5 -0
  881. package/dist/utilities/misc/transitions.js +8 -0
  882. package/dist/utils/injectLibraryStyles.d.ts +6 -0
  883. package/dist/utils/injectLibraryStyles.js +38 -0
  884. package/dist/validated/BbCheckbox.vue.d.ts +29 -0
  885. package/dist/validated/BbCheckbox.vue.js +5 -0
  886. package/dist/validated/BbCheckbox.vue_vue_type_script_setup_true_lang.js +75 -0
  887. package/dist/validated/BbCheckboxGroup.vue.d.ts +34 -0
  888. package/dist/validated/BbCheckboxGroup.vue.js +5 -0
  889. package/dist/validated/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +82 -0
  890. package/dist/validated/BbColorInput.vue.d.ts +36 -0
  891. package/dist/validated/BbColorInput.vue.js +5 -0
  892. package/dist/validated/BbColorInput.vue_vue_type_script_setup_true_lang.js +71 -0
  893. package/dist/validated/BbDatePickerInput.vue.d.ts +41 -0
  894. package/dist/validated/BbDatePickerInput.vue.js +5 -0
  895. package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +90 -0
  896. package/dist/validated/BbDropzone.vue.d.ts +24 -0
  897. package/dist/validated/BbDropzone.vue.js +5 -0
  898. package/dist/validated/BbDropzone.vue_vue_type_script_setup_true_lang.js +45 -0
  899. package/dist/validated/BbForm.vue.d.ts +28 -0
  900. package/dist/validated/BbForm.vue.js +5 -0
  901. package/dist/validated/BbForm.vue_vue_type_script_setup_true_lang.js +42 -0
  902. package/dist/validated/BbNumberInput.vue.d.ts +36 -0
  903. package/dist/validated/BbNumberInput.vue.js +5 -0
  904. package/dist/validated/BbNumberInput.vue_vue_type_script_setup_true_lang.js +72 -0
  905. package/dist/validated/BbRadioGroup.vue.d.ts +34 -0
  906. package/dist/validated/BbRadioGroup.vue.js +5 -0
  907. package/dist/validated/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +78 -0
  908. package/dist/validated/BbRating.vue.d.ts +30 -0
  909. package/dist/validated/BbRating.vue.js +5 -0
  910. package/dist/validated/BbRating.vue_vue_type_script_setup_true_lang.js +63 -0
  911. package/dist/validated/BbSelect.vue.d.ts +46 -0
  912. package/dist/validated/BbSelect.vue.js +5 -0
  913. package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +109 -0
  914. package/dist/validated/BbSlider.vue.d.ts +36 -0
  915. package/dist/validated/BbSlider.vue.js +5 -0
  916. package/dist/validated/BbSlider.vue_vue_type_script_setup_true_lang.js +69 -0
  917. package/dist/validated/BbSwitch.vue.d.ts +29 -0
  918. package/dist/validated/BbSwitch.vue.js +5 -0
  919. package/dist/validated/BbSwitch.vue_vue_type_script_setup_true_lang.js +75 -0
  920. package/dist/validated/BbSwitchGroup.vue.d.ts +34 -0
  921. package/dist/validated/BbSwitchGroup.vue.js +5 -0
  922. package/dist/validated/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +82 -0
  923. package/dist/validated/BbTag.vue.d.ts +36 -0
  924. package/dist/validated/BbTag.vue.js +5 -0
  925. package/dist/validated/BbTag.vue_vue_type_script_setup_true_lang.js +72 -0
  926. package/dist/validated/BbTextInput.vue.d.ts +36 -0
  927. package/dist/validated/BbTextInput.vue.js +5 -0
  928. package/dist/validated/BbTextInput.vue_vue_type_script_setup_true_lang.js +72 -0
  929. package/dist/validated/BbTextarea.vue.d.ts +36 -0
  930. package/dist/validated/BbTextarea.vue.js +5 -0
  931. package/dist/validated/BbTextarea.vue_vue_type_script_setup_true_lang.js +70 -0
  932. package/dist/validated/BbTimePickerInput.vue.d.ts +37 -0
  933. package/dist/validated/BbTimePickerInput.vue.js +5 -0
  934. package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +81 -0
  935. package/dist/validated/index.d.ts +29 -0
  936. package/dist/validated/useValidatedField.d.ts +93 -0
  937. package/dist/validated/useValidatedField.js +51 -0
  938. package/dist/validated.js +21 -0
  939. package/dist/vite-plugin.d.ts +261 -0
  940. package/dist/vite.js +603 -0
  941. package/llms.txt +107 -0
  942. package/package.json +181 -60
  943. package/scripts/lib/__fixtures__/validated-manifest.json +65 -0
  944. package/scripts/lib/ensure-manifest.mjs +39 -0
  945. package/scripts/lib/eslint-plugin-autofix.node.test.mjs +109 -0
  946. package/scripts/lib/eslint-plugin-recommended.node.test.mjs +87 -0
  947. package/scripts/lib/eslint-plugin-slots.node.test.mjs +271 -0
  948. package/scripts/lib/eslint-plugin.mjs +702 -0
  949. package/scripts/lib/eslint-plugin.node.test.mjs +193 -0
  950. package/scripts/lib/html-attributes.mjs +191 -0
  951. package/scripts/lib/mcp-config.mjs +126 -0
  952. package/scripts/lib/migrate-fix.mjs +115 -0
  953. package/scripts/lib/validate-bb-markup.mjs +488 -0
  954. package/dist/ai/BaseButton.md +0 -449
  955. package/dist/ai/BaseCheckbox.md +0 -512
  956. package/dist/ai/BaseCheckboxGroup.md +0 -597
  957. package/dist/ai/BaseColorInput.md +0 -461
  958. package/dist/ai/BaseDatePicker.md +0 -739
  959. package/dist/ai/BaseDatePickerInput.md +0 -1517
  960. package/dist/ai/BaseDialog.md +0 -610
  961. package/dist/ai/BaseInputContainer.md +0 -570
  962. package/dist/ai/BaseNumberInput.md +0 -509
  963. package/dist/ai/BaseRadio.md +0 -405
  964. package/dist/ai/BaseRadioGroup.md +0 -535
  965. package/dist/ai/BaseRating.md +0 -489
  966. package/dist/ai/BaseSelect.md +0 -1742
  967. package/dist/ai/BaseSlider.md +0 -871
  968. package/dist/ai/BaseSwitch.md +0 -322
  969. package/dist/ai/BaseSwitchGroup.md +0 -298
  970. package/dist/ai/BaseTag.md +0 -623
  971. package/dist/ai/BaseTextInput.md +0 -392
  972. package/dist/ai/BaseTextarea.md +0 -398
  973. package/dist/ai/BbChip.md +0 -147
  974. package/dist/ai/BbIntersection.md +0 -120
  975. package/dist/ai/BbRatio.md +0 -61
  976. package/dist/ai/BbRows.md +0 -307
  977. package/dist/ai/BbTab.md +0 -950
  978. package/dist/ai/CommonInputInnerContainer.md +0 -414
  979. package/dist/ai/CommonInputOuterContainer.md +0 -55
  980. package/dist/components/BaseButton/BaseButton.vue.d.ts +0 -14
  981. package/dist/components/BaseButton/types.d.ts +0 -159
  982. package/dist/components/BaseCheckbox/BaseCheckbox.vue.d.ts +0 -39
  983. package/dist/components/BaseCheckbox/types.d.ts +0 -213
  984. package/dist/components/BaseCheckboxGroup/BaseCheckboxGroup.vue.d.ts +0 -30
  985. package/dist/components/BaseCheckboxGroup/types.d.ts +0 -282
  986. package/dist/components/BaseColorInput/BaseColorInput.vue.d.ts +0 -35
  987. package/dist/components/BaseColorInput/ColorPalette.vue.d.ts +0 -13
  988. package/dist/components/BaseColorInput/types.d.ts +0 -233
  989. package/dist/components/BaseDatePicker/BaseDatePickerHeader.vue.d.ts +0 -15
  990. package/dist/components/BaseDatePicker/BaseDatePickerInputDaySelector.vue.d.ts +0 -58
  991. package/dist/components/BaseDatePicker/BaseDatePickerMonthSelector.vue.d.ts +0 -12
  992. package/dist/components/BaseDatePicker/BaseDatePickerYearSelector.vue.d.ts +0 -12
  993. package/dist/components/BaseDatePicker/types.d.ts +0 -100
  994. package/dist/components/BaseDatePickerInput/BaseDatePickerInput.vue.d.ts +0 -26
  995. package/dist/components/BaseDatePickerInput/types.d.ts +0 -206
  996. package/dist/components/BaseDialog/BaseDialog.vue.d.ts +0 -37
  997. package/dist/components/BaseDialog/types.d.ts +0 -180
  998. package/dist/components/BaseInputContainer/BaseInputContainer.vue.d.ts +0 -18
  999. package/dist/components/BaseInputContainer/types.d.ts +0 -126
  1000. package/dist/components/BaseNumberInput/BaseNumberInput.vue.d.ts +0 -46
  1001. package/dist/components/BaseNumberInput/types.d.ts +0 -191
  1002. package/dist/components/BaseRadio/BaseRadio.vue.d.ts +0 -31
  1003. package/dist/components/BaseRadio/types.d.ts +0 -173
  1004. package/dist/components/BaseRadioGroup/BaseRadioGroup.vue.d.ts +0 -30
  1005. package/dist/components/BaseRadioGroup/types.d.ts +0 -240
  1006. package/dist/components/BaseRating/BaseRating.vue.d.ts +0 -35
  1007. package/dist/components/BaseRating/types.d.ts +0 -144
  1008. package/dist/components/BaseSelect/BaseSelect.vue.d.ts +0 -28
  1009. package/dist/components/BaseSelect/types.d.ts +0 -470
  1010. package/dist/components/BaseSlider/BaseSlider.vue.d.ts +0 -38
  1011. package/dist/components/BaseSlider/types.d.ts +0 -201
  1012. package/dist/components/BaseSwitch/BaseSwitch.vue.d.ts +0 -34
  1013. package/dist/components/BaseSwitch/types.d.ts +0 -25
  1014. package/dist/components/BaseSwitchGroup/BaseSwitchGroup.vue.d.ts +0 -30
  1015. package/dist/components/BaseSwitchGroup/types.d.ts +0 -8
  1016. package/dist/components/BaseTag/BaseTag.vue.d.ts +0 -37
  1017. package/dist/components/BaseTag/types.d.ts +0 -136
  1018. package/dist/components/BaseTextInput/BaseTextInput.vue.d.ts +0 -33
  1019. package/dist/components/BaseTextInput/types.d.ts +0 -166
  1020. package/dist/components/BaseTextarea/BaseTextarea.vue.d.ts +0 -31
  1021. package/dist/components/BaseTextarea/types.d.ts +0 -151
  1022. package/dist/components/BbChip/BbChip.vue.d.ts +0 -17
  1023. package/dist/components/BbChip/types.d.ts +0 -23
  1024. package/dist/components/BbIntersection/BbIntersection.vue.d.ts +0 -23
  1025. package/dist/components/BbIntersection/types.d.ts +0 -36
  1026. package/dist/components/BbRatio/BbRatio.vue.d.ts +0 -14
  1027. package/dist/components/BbRatio/types.d.ts +0 -15
  1028. package/dist/components/BbRows/BbRows.vue.d.ts +0 -62
  1029. package/dist/components/BbRows/types.d.ts +0 -21
  1030. package/dist/components/BbTab/BbTab.vue.d.ts +0 -27
  1031. package/dist/components/BbTab/types.d.ts +0 -186
  1032. package/dist/components/CommonInputInnerContainer/CommonInputInnerContainer.vue.d.ts +0 -15
  1033. package/dist/components/CommonInputInnerContainer/types.d.ts +0 -47
  1034. package/dist/components/CommonInputOuterContainer/CommonInputOuterContainer.vue.d.ts +0 -11
  1035. package/dist/components/CommonInputOuterContainer/types.d.ts +0 -16
  1036. package/dist/composables/useModalsState.d.ts +0 -5
  1037. package/dist/composables/useQueue.d.ts +0 -58
  1038. package/dist/composables/useWizard.d.ts +0 -85
  1039. package/dist/i18n/en.d.ts +0 -67
  1040. package/dist/i18n/it.d.ts +0 -67
  1041. package/dist/index.css +0 -2
  1042. package/dist/index100.js +0 -6
  1043. package/dist/index101.js +0 -300
  1044. package/dist/index102.js +0 -16
  1045. package/dist/index103.js +0 -16
  1046. package/dist/index104.js +0 -27
  1047. package/dist/index109.js +0 -19
  1048. package/dist/index11.js +0 -42
  1049. package/dist/index110.js +0 -12
  1050. package/dist/index111.js +0 -19
  1051. package/dist/index112.js +0 -25
  1052. package/dist/index114.js +0 -7
  1053. package/dist/index115.js +0 -241
  1054. package/dist/index116.js +0 -5
  1055. package/dist/index117.js +0 -42
  1056. package/dist/index118.js +0 -5
  1057. package/dist/index119.js +0 -53
  1058. package/dist/index120.js +0 -5
  1059. package/dist/index121.js +0 -32
  1060. package/dist/index122.js +0 -5
  1061. package/dist/index124.js +0 -52
  1062. package/dist/index125.js +0 -5
  1063. package/dist/index126.js +0 -223
  1064. package/dist/index128.js +0 -6
  1065. package/dist/index129.js +0 -162
  1066. package/dist/index13.js +0 -92
  1067. package/dist/index130.js +0 -25
  1068. package/dist/index131.js +0 -51
  1069. package/dist/index132.js +0 -5
  1070. package/dist/index133.js +0 -607
  1071. package/dist/index135.js +0 -6
  1072. package/dist/index136.js +0 -14
  1073. package/dist/index137.js +0 -153
  1074. package/dist/index139.js +0 -6
  1075. package/dist/index14.js +0 -306
  1076. package/dist/index140.js +0 -224
  1077. package/dist/index141.js +0 -5
  1078. package/dist/index143.js +0 -128
  1079. package/dist/index145.js +0 -6
  1080. package/dist/index146.js +0 -8
  1081. package/dist/index147.js +0 -182
  1082. package/dist/index149.js +0 -6
  1083. package/dist/index15.js +0 -10
  1084. package/dist/index151.js +0 -4
  1085. package/dist/index152.js +0 -95
  1086. package/dist/index154.js +0 -6
  1087. package/dist/index155.js +0 -168
  1088. package/dist/index157.js +0 -6
  1089. package/dist/index158.js +0 -145
  1090. package/dist/index16.js +0 -59
  1091. package/dist/index160.js +0 -6
  1092. package/dist/index161.js +0 -53
  1093. package/dist/index163.js +0 -6
  1094. package/dist/index164.js +0 -16
  1095. package/dist/index166.js +0 -35
  1096. package/dist/index168.js +0 -6
  1097. package/dist/index169.js +0 -89
  1098. package/dist/index171.js +0 -6
  1099. package/dist/index172.js +0 -82
  1100. package/dist/index174.js +0 -6
  1101. package/dist/index175.js +0 -38
  1102. package/dist/index176.js +0 -461
  1103. package/dist/index177.js +0 -28
  1104. package/dist/index178.js +0 -66
  1105. package/dist/index18.js +0 -35
  1106. package/dist/index180.js +0 -162
  1107. package/dist/index181.js +0 -5
  1108. package/dist/index182.js +0 -217
  1109. package/dist/index183.js +0 -5
  1110. package/dist/index184.js +0 -112
  1111. package/dist/index185.js +0 -5
  1112. package/dist/index186.js +0 -459
  1113. package/dist/index188.js +0 -6
  1114. package/dist/index19.js +0 -4
  1115. package/dist/index192.js +0 -268
  1116. package/dist/index194.js +0 -6
  1117. package/dist/index195.js +0 -124
  1118. package/dist/index197.js +0 -6
  1119. package/dist/index198.js +0 -174
  1120. package/dist/index2.js +0 -20
  1121. package/dist/index20.js +0 -9
  1122. package/dist/index200.js +0 -6
  1123. package/dist/index201.js +0 -224
  1124. package/dist/index203.js +0 -6
  1125. package/dist/index204.js +0 -135
  1126. package/dist/index206.js +0 -6
  1127. package/dist/index207.js +0 -5
  1128. package/dist/index208.js +0 -170
  1129. package/dist/index21.js +0 -35
  1130. package/dist/index210.js +0 -6
  1131. package/dist/index211.js +0 -37
  1132. package/dist/index213.js +0 -6
  1133. package/dist/index214.js +0 -63
  1134. package/dist/index216.js +0 -6
  1135. package/dist/index217.js +0 -74
  1136. package/dist/index219.js +0 -6
  1137. package/dist/index22.js +0 -6
  1138. package/dist/index220.js +0 -65
  1139. package/dist/index222.js +0 -6
  1140. package/dist/index223.js +0 -67
  1141. package/dist/index225.js +0 -6
  1142. package/dist/index226.js +0 -41
  1143. package/dist/index228.js +0 -6
  1144. package/dist/index229.js +0 -10
  1145. package/dist/index23.js +0 -7
  1146. package/dist/index230.js +0 -22
  1147. package/dist/index232.js +0 -8
  1148. package/dist/index233.js +0 -297
  1149. package/dist/index235.js +0 -6
  1150. package/dist/index236.js +0 -47
  1151. package/dist/index237.js +0 -165
  1152. package/dist/index239.js +0 -6
  1153. package/dist/index24.js +0 -9
  1154. package/dist/index241.js +0 -159
  1155. package/dist/index243.js +0 -6
  1156. package/dist/index244.js +0 -134
  1157. package/dist/index246.js +0 -6
  1158. package/dist/index247.js +0 -167
  1159. package/dist/index249.js +0 -6
  1160. package/dist/index25.js +0 -24
  1161. package/dist/index250.js +0 -147
  1162. package/dist/index252.js +0 -6
  1163. package/dist/index253.js +0 -35
  1164. package/dist/index255.js +0 -6
  1165. package/dist/index256.js +0 -65
  1166. package/dist/index258.js +0 -6
  1167. package/dist/index259.js +0 -19
  1168. package/dist/index260.js +0 -5
  1169. package/dist/index261.js +0 -160
  1170. package/dist/index263.js +0 -6
  1171. package/dist/index264.js +0 -60
  1172. package/dist/index266.js +0 -6
  1173. package/dist/index267.js +0 -134
  1174. package/dist/index269.js +0 -6
  1175. package/dist/index27.js +0 -4
  1176. package/dist/index271.js +0 -206
  1177. package/dist/index273.js +0 -6
  1178. package/dist/index274.js +0 -85
  1179. package/dist/index275.js +0 -5
  1180. package/dist/index276.js +0 -55
  1181. package/dist/index277.js +0 -5
  1182. package/dist/index278.js +0 -164
  1183. package/dist/index28.js +0 -8
  1184. package/dist/index280.js +0 -6
  1185. package/dist/index281.js +0 -145
  1186. package/dist/index283.js +0 -6
  1187. package/dist/index284.js +0 -11
  1188. package/dist/index285.js +0 -200
  1189. package/dist/index287.js +0 -6
  1190. package/dist/index288.js +0 -241
  1191. package/dist/index29.js +0 -7
  1192. package/dist/index290.js +0 -6
  1193. package/dist/index291.js +0 -21
  1194. package/dist/index293.js +0 -6
  1195. package/dist/index294.js +0 -125
  1196. package/dist/index296.js +0 -6
  1197. package/dist/index297.js +0 -161
  1198. package/dist/index299.js +0 -6
  1199. package/dist/index30.js +0 -118
  1200. package/dist/index300.js +0 -127
  1201. package/dist/index302.js +0 -6
  1202. package/dist/index303.js +0 -20
  1203. package/dist/index305.js +0 -6
  1204. package/dist/index306.js +0 -116
  1205. package/dist/index307.js +0 -5
  1206. package/dist/index308.js +0 -507
  1207. package/dist/index31.js +0 -10
  1208. package/dist/index310.js +0 -6
  1209. package/dist/index311.js +0 -196
  1210. package/dist/index313.js +0 -6
  1211. package/dist/index314.js +0 -142
  1212. package/dist/index316.js +0 -6
  1213. package/dist/index317.js +0 -134
  1214. package/dist/index319.js +0 -6
  1215. package/dist/index32.js +0 -28
  1216. package/dist/index320.js +0 -162
  1217. package/dist/index322.js +0 -6
  1218. package/dist/index323.js +0 -319
  1219. package/dist/index325.js +0 -6
  1220. package/dist/index326.js +0 -40
  1221. package/dist/index327.js +0 -43
  1222. package/dist/index328.js +0 -665
  1223. package/dist/index33.js +0 -5
  1224. package/dist/index330.js +0 -6
  1225. package/dist/index331.js +0 -155
  1226. package/dist/index333.js +0 -6
  1227. package/dist/index334.js +0 -142
  1228. package/dist/index336.js +0 -6
  1229. package/dist/index337.js +0 -155
  1230. package/dist/index339.js +0 -6
  1231. package/dist/index34.js +0 -112
  1232. package/dist/index340.js +0 -58
  1233. package/dist/index341.js +0 -5
  1234. package/dist/index342.js +0 -20
  1235. package/dist/index344.js +0 -6
  1236. package/dist/index345.js +0 -142
  1237. package/dist/index347.js +0 -6
  1238. package/dist/index349.js +0 -109
  1239. package/dist/index351.js +0 -6
  1240. package/dist/index352.js +0 -55
  1241. package/dist/index353.js +0 -24
  1242. package/dist/index354.js +0 -23
  1243. package/dist/index355.js +0 -839
  1244. package/dist/index356.js +0 -474
  1245. package/dist/index357.js +0 -52
  1246. package/dist/index358.js +0 -7
  1247. package/dist/index36.js +0 -6
  1248. package/dist/index38.js +0 -63
  1249. package/dist/index39.js +0 -63
  1250. package/dist/index40.js +0 -9
  1251. package/dist/index42.js +0 -8
  1252. package/dist/index43.js +0 -179
  1253. package/dist/index44.js +0 -21
  1254. package/dist/index46.js +0 -385
  1255. package/dist/index48.js +0 -6
  1256. package/dist/index49.js +0 -33
  1257. package/dist/index5.js +0 -34
  1258. package/dist/index50.js +0 -12
  1259. package/dist/index51.js +0 -8
  1260. package/dist/index52.js +0 -106
  1261. package/dist/index53.js +0 -330
  1262. package/dist/index54.js +0 -97
  1263. package/dist/index55.js +0 -328
  1264. package/dist/index56.js +0 -28
  1265. package/dist/index57.js +0 -102
  1266. package/dist/index58.js +0 -157
  1267. package/dist/index6.js +0 -38
  1268. package/dist/index60.js +0 -6
  1269. package/dist/index61.js +0 -131
  1270. package/dist/index62.js +0 -5
  1271. package/dist/index65.js +0 -35
  1272. package/dist/index66.js +0 -26
  1273. package/dist/index68.js +0 -6
  1274. package/dist/index69.js +0 -54
  1275. package/dist/index7.js +0 -58
  1276. package/dist/index71.js +0 -6
  1277. package/dist/index72.js +0 -14
  1278. package/dist/index74.js +0 -6
  1279. package/dist/index75.js +0 -159
  1280. package/dist/index77.js +0 -6
  1281. package/dist/index78.js +0 -4
  1282. package/dist/index79.js +0 -4
  1283. package/dist/index80.js +0 -54
  1284. package/dist/index81.js +0 -5
  1285. package/dist/index82.js +0 -5
  1286. package/dist/index83.js +0 -141
  1287. package/dist/index85.js +0 -6
  1288. package/dist/index86.js +0 -65
  1289. package/dist/index88.js +0 -6
  1290. package/dist/index89.js +0 -30
  1291. package/dist/index9.js +0 -11
  1292. package/dist/index90.js +0 -19
  1293. package/dist/index91.js +0 -17
  1294. package/dist/index92.js +0 -9
  1295. package/dist/index93.js +0 -34
  1296. package/dist/index95.js +0 -16
  1297. package/dist/index96.js +0 -10
  1298. package/dist/index97.js +0 -18
  1299. package/dist/index98.js +0 -189
  1300. package/dist/types/VoidHtmlElements.d.ts +0 -1
  1301. package/dist/utilities/functions/add.d.ts +0 -1
  1302. package/dist/utilities/functions/booleanishToBoolean.d.ts +0 -6
  1303. package/dist/utilities/functions/capitalize.d.ts +0 -4
  1304. package/dist/utilities/functions/cloneDeep.d.ts +0 -1
  1305. package/dist/utilities/functions/debounce.d.ts +0 -1
  1306. package/dist/utilities/functions/drop.d.ts +0 -1
  1307. package/dist/utilities/functions/exceedsPrecision.d.ts +0 -1
  1308. package/dist/utilities/functions/findRight.d.ts +0 -4
  1309. package/dist/utilities/functions/findRightIndex.d.ts +0 -4
  1310. package/dist/utilities/functions/flow.d.ts +0 -1
  1311. package/dist/utilities/functions/getHueFromRGB.d.ts +0 -9
  1312. package/dist/utilities/functions/groupBy.d.ts +0 -6
  1313. package/dist/utilities/functions/gt.d.ts +0 -7
  1314. package/dist/utilities/functions/hexToRGB.d.ts +0 -7
  1315. package/dist/utilities/functions/hslToHex.d.ts +0 -1
  1316. package/dist/utilities/functions/includes.d.ts +0 -1
  1317. package/dist/utilities/functions/initial.d.ts +0 -1
  1318. package/dist/utilities/functions/isCssColor.d.ts +0 -5
  1319. package/dist/utilities/functions/lt.d.ts +0 -7
  1320. package/dist/utilities/functions/makeUrl.d.ts +0 -1
  1321. package/dist/utilities/functions/mapKeys.d.ts +0 -5
  1322. package/dist/utilities/functions/mapValues.d.ts +0 -1
  1323. package/dist/utilities/functions/matchesPropertyInsensitive.d.ts +0 -1
  1324. package/dist/utilities/functions/max.d.ts +0 -2
  1325. package/dist/utilities/functions/mean.d.ts +0 -4
  1326. package/dist/utilities/functions/merge.d.ts +0 -11
  1327. package/dist/utilities/functions/millisecondsTo.d.ts +0 -1
  1328. package/dist/utilities/functions/negate.d.ts +0 -4
  1329. package/dist/utilities/functions/normalizeItemGroups.d.ts +0 -13
  1330. package/dist/utilities/functions/omit.d.ts +0 -2
  1331. package/dist/utilities/functions/overEvery.d.ts +0 -4
  1332. package/dist/utilities/functions/pick.d.ts +0 -1
  1333. package/dist/utilities/functions/replace.d.ts +0 -1
  1334. package/dist/utilities/functions/replaceInTree.d.ts +0 -4
  1335. package/dist/utilities/functions/retry.d.ts +0 -5
  1336. package/dist/utilities/functions/roundToTheNearest.d.ts +0 -8
  1337. package/dist/utilities/functions/set.d.ts +0 -15
  1338. package/dist/utilities/functions/stub.d.ts +0 -6
  1339. package/dist/utilities/functions/transposePercent.d.ts +0 -9
  1340. package/dist/utilities/functions/tryTo.d.ts +0 -2
  1341. package/dist/utilities/functions/uniqBy.d.ts +0 -1
  1342. /package/dist/{index64.js → _virtual/_plugin-vue_export-helper.js} +0 -0
  1343. /package/dist/components/{BaseButton → BbBaseButton}/RouterComponent.vue.d.ts +0 -0
  1344. /package/dist/components/{BaseDatePicker/BaseDatePicker.vue.d.ts → BbBaseDatePicker/BbBaseDatePicker.vue.d.ts} +0 -0
  1345. /package/dist/{index165.js → composables/useArray.js} +0 -0
  1346. /package/dist/{index17.js → composables/useFrameworkDetection.js} +0 -0
  1347. /package/dist/{index12.js → composables/useId.js} +0 -0
  1348. /package/dist/{index107.js → utilities/functions/chunk.js} +0 -0
  1349. /package/dist/{index8.js → utilities/functions/clamp.js} +0 -0
  1350. /package/dist/{index150.js → utilities/functions/curry.js} +0 -0
  1351. /package/dist/{index45.js → utilities/functions/extractDomContainer.js} +0 -0
  1352. /package/dist/{index270.js → utilities/functions/findInTree.js} +0 -0
  1353. /package/dist/{index348.js → utilities/functions/flattenTree.js} +0 -0
  1354. /package/dist/{index41.js → utilities/functions/get.js} +0 -0
  1355. /package/dist/{index189.js → utilities/functions/head.js} +0 -0
  1356. /package/dist/{index108.js → utilities/functions/identity.js} +0 -0
  1357. /package/dist/{index179.js → utilities/functions/indexBy.js} +0 -0
  1358. /package/dist/{index37.js → utilities/functions/isHex.js} +0 -0
  1359. /package/dist/{index94.js → utilities/functions/isNil.js} +0 -0
  1360. /package/dist/{index26.js → utilities/functions/isNotNil.js} +0 -0
  1361. /package/dist/{index105.js → utilities/functions/last.js} +0 -0
  1362. /package/dist/{index142.js → utilities/functions/noop.js} +0 -0
  1363. /package/dist/{index231.js → utilities/functions/parseWidthString.js} +0 -0
  1364. /package/dist/{index240.js → utilities/functions/pickBy.js} +0 -0
  1365. /package/dist/{index123.js → utilities/functions/range.js} +0 -0
  1366. /package/dist/{index190.js → utilities/functions/snapToStep.js} +0 -0
  1367. /package/dist/{index191.js → utilities/functions/transpose.js} +0 -0
  1368. /package/dist/{index106.js → utilities/functions/validateDateFormat.js} +0 -0
  1369. /package/dist/{index10.js → utilities/functions/wait.js} +0 -0
@@ -0,0 +1,1416 @@
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
+ - **[Layout Scaffold](./layout-scaffold.md) — build it first.** This recipe
25
+ imports `PageShell`, `usePageShellContext` and `FloatingBottomPanel` from your own app.
26
+ They are not package exports; the scaffold recipe is their source. Copy
27
+ those files before anything below, and do not hand-roll replacements —
28
+ the peek stack, the close semantics and the sidebar's out-of-flow
29
+ behaviour are all load-bearing here.
30
+ - `<BbConfirm />` and `<BbToast />` mounted once in the `createInertiaApp` render root — never in a page.
31
+ - From the [Inertia Helpers](../../guides/inertia-helpers.md) toolkit:
32
+ `useTableContext`, `useQueryObject`, `useResourceContext`.
33
+ - Controller: `Inertia::render('Invoices/Index', ['invoices' =>
34
+ InvoicePaginator::make(...), 'tabCounts' => [...]])` — `invoices` is a
35
+ standard Laravel paginator (`PaginatedResponse<Invoice>`) and `tabCounts`
36
+ a plain `{ all, outstanding, paid, archived }` map. Both are re-sent on
37
+ every partial reload the page triggers (`only: ['invoices', 'tabCounts']`).
38
+ Mutation routes are plain Laravel routes (`PATCH /invoices/:id`,
39
+ `POST /invoices/:id/duplicate`, …) that redirect back; small JSON GET
40
+ endpoints (`GET /invoices/:id/peek`, `GET /customers/:id/peek`,
41
+ `GET /customers/search`) back the sidebar peeks and the customer filter
42
+ facet so neither is a full-page visit.
43
+
44
+ ## Key ideas
45
+
46
+ - **One coopting page context.** `provideInvoicesWorkspace()` joins the
47
+ page-shell stack **and** the keyed `useTableContext('invoices')` once,
48
+ owns filters/tab/dialogs, and exposes complete actions. Every leaf calls
49
+ `useInvoicesWorkspace()` and nothing else — zero prop drilling anywhere
50
+ on the page.
51
+ - **The table has no client-side fetch at all.** `invoices` arrives as a
52
+ page prop; `useTableContext('invoices')` turns it into `items` +
53
+ `totalItems`/`page`/`perPage` (URL-backed) + `selected`/`unselected`/`all`
54
+ (select-all-across-pages), and `BbTable` binds directly to that handle —
55
+ no `dependencies`, no items function.
56
+ - **Filters mirror into the URL with `useQueryObject`.** Changing a filter
57
+ performs a debounced partial Inertia visit
58
+ (`only: ['invoices', 'tabCounts']`); the server is the single source of
59
+ filtered, paginated truth.
60
+ - **One Filters menu, one chip per applied facet.** The rail is a single
61
+ `BbDropdown` of searchable categories (status / customer / due-date
62
+ presets) plus one chip per APPLIED facet — never one per value. Each chip
63
+ is itself a dropdown onto the same filter group, so it edits in place;
64
+ clearing happens chip by chip (no bulk clear-all).
65
+ - **Tabs are real visits.** `BbTabs` items carry `href` + `server: true`
66
+ (component-level `navigation` is required alongside it) so switching tabs
67
+ is a genuine, partial-reloaded Inertia visit — not a client-only URL
68
+ change.
69
+ - **Mutations are promise-wrapped `router.visit` calls.** A tiny local
70
+ `visit()` helper turns Inertia's callback-based API into a promise, so
71
+ context actions stay `async function`s exactly like the Vue/Nuxt
72
+ versions — `await ctx.updateStatus(...)` reads the same everywhere.
73
+ - **Clicking a row peeks it.** `v-model:highlighted` is bound to the shell
74
+ stack, so the highlighted row and the open peek are the same fact; the
75
+ invoice number cell links to the full detail page instead. Peeks fetch
76
+ from a small JSON endpoint via `useResourceContext` — not a full-page
77
+ visit, so opening the sidebar never replaces the list underneath it.
78
+ - **Buttons are `md` by default** (28px, flush beside `compact` inputs);
79
+ `sm` only in the table rows, the peeks' headers and the bottom bar.
80
+
81
+ ## Page anatomy
82
+
83
+ ```
84
+ InvoicesWorkspace/
85
+ Index.vue ← assembly: PageShell slots, table, tabs, pagination
86
+ context.ts ← coopting page context (shell + useTableContext + filters + actions)
87
+ facets.ts ← the facet contract (shape only — deliberately no shared builder)
88
+ dueRange.ts ← due-date preset keys + range math
89
+ FilterRail.vue ← one Filters menu + one chip per applied facet
90
+ FilterChip.vue ← applied-facet chip — itself a dropdown onto the same filter
91
+ StatusCell.vue ← one-click status change (soft badge → BbSelectPopover)
92
+ DueDateCell.vue ← inline due-date reschedule (BbPopover calendar)
93
+ RowActions.vue ← per-row "…" dropdown
94
+ SelectionBar.vue ← bulk actions in the floating bottom panel
95
+ InvoicePeek.vue ← sidebar workbench, stack level 1
96
+ CustomerPeek.vue ← stacked peek, back arrow via the shell
97
+ RecordPaymentDialog.vue ← page-level dialog, driven by the context
98
+ ```
99
+
100
+ Chrome assumed from the guides: [App Layout](../../guides/app-layout.md)
101
+ (left nav + fat footer), [Page Shell](../../guides/page-shell.md),
102
+ [Floating Bottom Panel](../../guides/floating-bottom-panel.md).
103
+
104
+ ## Action inventory
105
+
106
+ | # | Action | Trigger | Mechanism |
107
+ | --- | ------------------------------ | -------------------------------- | ------------------------------------------------------ |
108
+ | 1 | New invoice | topbar, the page's one `primary` | navigation (`href="/invoices/create"`) |
109
+ | 2 | Page search | topbar right | `filters.search` → `useQueryObject` partial visit |
110
+ | 3 | Filter status / customer / due | Filters menu + filter chips | `BbDropdown` facets; chips edit the filter in place |
111
+ | 4 | Clear a filter | chip clear button | facet `clear()` — one facet at a time, no bulk CTA |
112
+ | 5 | Switch tab | server-visit tabs with counts | `BbTabs` `href` + `server: true` visit |
113
+ | 6 | Peek invoice | row click / peek lists | `v-model:highlighted` → `peekInvoice(id)`, JSON fetch |
114
+ | 7 | Peek customer | customer cell (fresh) / in peeks | `peekCustomer(id)` / `stackCustomer(id)` → back arrow |
115
+ | 8 | Change status inline | status badge in row & peek | one-click `BbSelectPopover` → undoable visit |
116
+ | 9 | Reschedule due date inline | due-date cell | `BbPopover` calendar → undoable visit |
117
+ | 10 | Record payment | row `…`, peek button | `BbDialog` via `ctx.dialogs` → promise-wrapped visit |
118
+ | 11 | Edit / duplicate | row `…` dropdown | navigation (`href`) / context action |
119
+ | 12 | Archive / delete | row `…`, bulk bar | destructive behind `useConfirm` |
120
+ | 13 | Bulk mark paid / remind | floating bottom panel | context actions on `table.selected`/`all`/`unselected` |
121
+ | 14 | Select rows / select all | table checkboxes | `useTableContext` selection (across pages) |
122
+ | 15 | Open full invoice | invoice number cell, peek footer | navigation (`href="/invoices/:id"`) |
123
+ | 16 | Back / close peek | shell chrome | shell stack pop / close |
124
+
125
+ ## The code
126
+
127
+ ### context.ts
128
+
129
+ ```ts
130
+ // InvoicesWorkspace/context.ts
131
+ import {
132
+ computed,
133
+ inject,
134
+ provide,
135
+ reactive,
136
+ ref,
137
+ type ComputedRef,
138
+ type InjectionKey,
139
+ type Ref,
140
+ } from 'vue';
141
+ import { router } from '@inertiajs/vue3';
142
+ import type { RequestPayload } from '@inertiajs/core';
143
+ import { useConfirm, useToast } from 'bitboss-ui';
144
+ import {
145
+ usePageShellContext,
146
+ type PageShellContext,
147
+ } from '@/components/layout/usePageShellContext';
148
+ import {
149
+ useTableContext,
150
+ type TableContext,
151
+ } from '@/composables/useTableContext';
152
+ import { useQueryObject } from '@/composables/useQueryObject';
153
+ import { useProp } from '@/composables/useProp';
154
+ import { useQuery } from '@/composables/useQuery';
155
+ import type { Invoice, InvoiceStatus, PaymentDraft } from '@/types';
156
+
157
+ /** What the stacked sidebar can show. Clicking a name pushes one of these. */
158
+ export type PeekItem =
159
+ | { type: 'invoice'; id: number }
160
+ | { type: 'customer'; id: number };
161
+
162
+ export type WorkspaceTab = 'all' | 'outstanding' | 'paid' | 'archived';
163
+
164
+ export interface InvoiceFilters {
165
+ search: string;
166
+ status: InvoiceStatus[];
167
+ customerId: number | null;
168
+ /**
169
+ * `[start, end]` ISO strings, or `[]` when unset. Range mode requires an
170
+ * array modelValue -- binding `null` throws, so the empty filter is `[]`.
171
+ */
172
+ dueBetween: string[];
173
+ }
174
+
175
+ const RELOAD_PROPS = ['invoices', 'tabCounts'] as const;
176
+
177
+ export interface InvoicesWorkspaceContext {
178
+ // -- Coopted contexts ------------------------------------------------------
179
+ shell: PageShellContext<PeekItem>;
180
+ table: TableContext<Invoice, number>;
181
+ // -- Page-owned state ------------------------------------------------------
182
+ filters: InvoiceFilters;
183
+ hasActiveFilters: ComputedRef<boolean>;
184
+ tab: Ref<WorkspaceTab>;
185
+ tabCounts: ComputedRef<Record<WorkspaceTab, number>>;
186
+ dialogs: { recordPayment: Ref<Invoice | null> };
187
+ /** Bumped after every mutation — peeks watch it to re-fetch their JSON detail. */
188
+ refreshKey: Ref<number>;
189
+ // -- Peek grammar ----------------------------------------------------------
190
+ peekInvoice: (id: number) => void;
191
+ stackInvoice: (id: number) => void;
192
+ stackCustomer: (id: number) => void;
193
+ // -- Actions (complete: visit + refresh + toast) -----------------------------
194
+ clearFilters: () => void;
195
+ updateStatus: (invoice: Invoice, status: InvoiceStatus) => Promise<void>;
196
+ duplicateInvoice: (invoice: Invoice) => Promise<void>;
197
+ recordPayment: (invoice: Invoice, draft: PaymentDraft) => Promise<void>;
198
+ archiveInvoice: (invoice: Invoice) => Promise<void>;
199
+ deleteInvoice: (invoice: Invoice) => Promise<void>;
200
+ bulkMarkPaid: () => Promise<void>;
201
+ bulkRemind: () => Promise<void>;
202
+ bulkArchive: () => Promise<void>;
203
+ }
204
+
205
+ const key: InjectionKey<InvoicesWorkspaceContext> =
206
+ Symbol('invoices-workspace');
207
+
208
+ /** Comma-joined query value → string[] (or null when absent). */
209
+ const toArray = (value: unknown): string[] | null => {
210
+ if (value == null || value === '') return null;
211
+ return Array.isArray(value) ? value.map(String) : String(value).split(',');
212
+ };
213
+
214
+ /** Inertia's callback-based visit, wrapped as a promise — so every context
215
+ * action stays `async`, exactly like the Vue/Nuxt versions. Always a
216
+ * partial reload of the props this page depends on. */
217
+ const visit = (
218
+ method: 'post' | 'put' | 'patch' | 'delete',
219
+ url: string,
220
+ // Inertia's own payload type — strings/numbers/booleans/arrays/files.
221
+ // (`Record<string, unknown>` does not satisfy it.)
222
+ data: RequestPayload = {}
223
+ ): Promise<void> =>
224
+ new Promise((resolve, reject) => {
225
+ router.visit(url, {
226
+ method,
227
+ data,
228
+ only: [...RELOAD_PROPS],
229
+ preserveScroll: true,
230
+ preserveState: true,
231
+ onSuccess: () => resolve(),
232
+ onError: (errors) => reject(errors),
233
+ });
234
+ });
235
+
236
+ export function provideInvoicesWorkspace(): InvoicesWorkspaceContext {
237
+ const { toast } = useToast();
238
+ const { confirm } = useConfirm();
239
+
240
+ // -- Coopt the specific contexts: once, here, for the whole page. ----------
241
+ const shell = usePageShellContext<PeekItem>();
242
+ // `Invoice, number`: BbTable's `item-value="id"` resolves selection to
243
+ // invoice ids, matching the Vue/Nuxt `table.selected: number[]` shape.
244
+ const table = useTableContext<Invoice, number>('invoices');
245
+
246
+ // -- Filters: seeded from the current URL, mirrored back by useQueryObject. -
247
+ const query = useQuery();
248
+ const filters = reactive<InvoiceFilters>({
249
+ search: (query.search as string) ?? '',
250
+ status: (toArray(query.status) ?? []) as InvoiceStatus[],
251
+ customerId: query.customerId ? Number(query.customerId) : null,
252
+ dueBetween: toArray(query.dueBetween) ?? [],
253
+ });
254
+ useQueryObject(filters, { only: [...RELOAD_PROPS] });
255
+
256
+ const hasActiveFilters = computed(
257
+ () =>
258
+ filters.search !== '' ||
259
+ filters.status.length > 0 ||
260
+ filters.customerId !== null ||
261
+ filters.dueBetween.length > 0
262
+ );
263
+ const clearFilters = () => {
264
+ filters.search = '';
265
+ filters.status = [];
266
+ filters.customerId = null;
267
+ filters.dueBetween = [];
268
+ };
269
+
270
+ // Tab: seeded from the URL; BbTabs' own `href` + `server` visit updates
271
+ // the URL, and its `v-model` write keeps this ref in sync with the click.
272
+ const tab = ref<WorkspaceTab>((query.tab as WorkspaceTab) ?? 'all');
273
+ const tabCounts = useProp<Record<WorkspaceTab, number>>('tabCounts');
274
+
275
+ const refreshKey = ref(0);
276
+ const dialogs = { recordPayment: ref<Invoice | null>(null) };
277
+
278
+ // -- Peek grammar ----------------------------------------------------------------
279
+ // peekX opens a fresh stack (from the list); stackX drills down (from a peek).
280
+ const peekInvoice = (id: number) => shell.push({ type: 'invoice', id }, true);
281
+ const stackInvoice = (id: number) => shell.push({ type: 'invoice', id });
282
+ const stackCustomer = (id: number) => shell.push({ type: 'customer', id });
283
+
284
+ // -- Actions --------------------------------------------------------------------
285
+ const refresh = () => {
286
+ refreshKey.value++;
287
+ };
288
+
289
+ const updateStatus = async (invoice: Invoice, status: InvoiceStatus) => {
290
+ await visit('patch', `/invoices/${invoice.id}`, { status });
291
+ refresh();
292
+ toast({
293
+ title: `${invoice.number} moved to ${status}.`,
294
+ variant: 'success',
295
+ });
296
+ };
297
+
298
+ const duplicateInvoice = async (invoice: Invoice) => {
299
+ await visit('post', `/invoices/${invoice.id}/duplicate`);
300
+ refresh();
301
+ toast({ title: `${invoice.number} duplicated.`, variant: 'success' });
302
+ };
303
+
304
+ const recordPayment = async (invoice: Invoice, draft: PaymentDraft) => {
305
+ await visit('post', `/invoices/${invoice.id}/payments`, { ...draft });
306
+ dialogs.recordPayment.value = null;
307
+ refresh();
308
+ toast({
309
+ title: `Payment recorded on ${invoice.number}.`,
310
+ variant: 'success',
311
+ });
312
+ };
313
+
314
+ const archiveInvoice = async (invoice: Invoice) => {
315
+ await visit('patch', `/invoices/${invoice.id}/archive`);
316
+ refresh();
317
+ toast({ title: `${invoice.number} archived.`, variant: 'success' });
318
+ };
319
+
320
+ const deleteInvoice = async (invoice: Invoice) => {
321
+ const ok = await confirm({
322
+ variant: 'destructive',
323
+ title: 'Delete invoice',
324
+ text: `Delete ${invoice.number}? This cannot be undone.`,
325
+ yes: 'Delete',
326
+ no: 'Cancel',
327
+ });
328
+ if (!ok) return;
329
+ await visit('delete', `/invoices/${invoice.id}`);
330
+ refresh();
331
+ toast({ title: `${invoice.number} deleted.`, variant: 'success' });
332
+ };
333
+
334
+ // Bulk actions carry the full select-all-across-pages payload — the
335
+ // server combines `all` + `unselected` the same way BbTable does.
336
+ const bulkPayload = () => ({
337
+ ids: table.selected.value,
338
+ all: table.all.value,
339
+ unselected: table.unselected.value,
340
+ });
341
+ const bulkCount = () =>
342
+ table.all.value
343
+ ? table.totalItems.value - table.unselected.value.length
344
+ : table.selected.value.length;
345
+
346
+ const bulkMarkPaid = async () => {
347
+ const count = bulkCount();
348
+ await visit('patch', '/invoices/bulk/mark-paid', bulkPayload());
349
+ table.resetSelection();
350
+ toast({ title: `${count} invoices marked as paid.`, variant: 'success' });
351
+ };
352
+
353
+ const bulkRemind = async () => {
354
+ const count = bulkCount();
355
+ await visit('post', '/invoices/bulk/remind', bulkPayload());
356
+ table.resetSelection();
357
+ toast({
358
+ title: `Reminder sent for ${count} invoices.`,
359
+ variant: 'success',
360
+ });
361
+ };
362
+
363
+ const bulkArchive = async () => {
364
+ const count = bulkCount();
365
+ const ok = await confirm({
366
+ variant: 'destructive',
367
+ title: 'Archive invoices',
368
+ text: `Archive ${count} invoices? They move out of every tab except Archived.`,
369
+ yes: 'Archive',
370
+ no: 'Cancel',
371
+ });
372
+ if (!ok) return;
373
+ await visit('patch', '/invoices/bulk/archive', bulkPayload());
374
+ table.resetSelection();
375
+ toast({ title: `${count} invoices archived.`, variant: 'success' });
376
+ };
377
+
378
+ const ctx: InvoicesWorkspaceContext = {
379
+ shell,
380
+ table,
381
+ filters,
382
+ hasActiveFilters,
383
+ tab,
384
+ tabCounts,
385
+ dialogs,
386
+ refreshKey,
387
+ peekInvoice,
388
+ stackInvoice,
389
+ stackCustomer,
390
+ clearFilters,
391
+ updateStatus,
392
+ duplicateInvoice,
393
+ recordPayment,
394
+ archiveInvoice,
395
+ deleteInvoice,
396
+ bulkMarkPaid,
397
+ bulkRemind,
398
+ bulkArchive,
399
+ };
400
+ provide(key, ctx);
401
+ return ctx;
402
+ }
403
+
404
+ export function useInvoicesWorkspace(): InvoicesWorkspaceContext {
405
+ const ctx = inject(key);
406
+ if (!ctx)
407
+ throw new Error('useInvoicesWorkspace() called outside InvoicesWorkspace');
408
+ return ctx;
409
+ }
410
+ ```
411
+
412
+ ### Index.vue — the assembly
413
+
414
+ ```vue
415
+ <!-- InvoicesWorkspace/Index.vue -->
416
+ <template>
417
+ <PageShell>
418
+ <!-- Topbar: breadcrumbs left, page search + primary action right. -->
419
+ <template #topbar>
420
+ <div class="flex items-center justify-between gap-4 border-b px-4 py-2">
421
+ <!-- Breadcrumbs take the row's slack on a stable basis (min-w-0 flex-auto);
422
+ without it their overflow recompute fights the flex layout every frame. -->
423
+ <BbBreadcrumbs
424
+ class="min-w-0 flex-auto"
425
+ :items="[
426
+ { key: 'dashboard', text: 'Dashboard', href: '/dashboard' },
427
+ { key: 'billing', text: 'Billing', href: '/billing' },
428
+ { key: 'invoices', text: 'Invoices' },
429
+ ]"
430
+ />
431
+ <div class="flex shrink-0 items-center gap-2">
432
+ <BbTextInput
433
+ v-model="ctx.filters.search"
434
+ autocomplete="off"
435
+ hide-label
436
+ label="Search invoices"
437
+ clearable
438
+ compact
439
+ placeholder="Search number or customer…"
440
+ prepend:icon="lucide:search"
441
+ />
442
+ <BbButton
443
+ href="/invoices/create"
444
+ prepend:icon="lucide:plus"
445
+ variant="primary"
446
+ >
447
+ New invoice
448
+ </BbButton>
449
+ </div>
450
+ </div>
451
+ </template>
452
+
453
+ <div class="flex flex-col gap-3 p-4">
454
+ <FilterRail />
455
+
456
+ <!-- Tabs are real visits: href + server (component-level `navigation`
457
+ is required alongside per-item `server`), each carrying the same
458
+ partial-reload prop list as the filter watcher. `preserve-state`
459
+ keeps this page (and the tabs instance) alive across the visit so
460
+ the sliding pill animates to the new tab instead of the page
461
+ remounting and the pill snapping — matching the filter watcher,
462
+ which already visits with preserveState. Each href is built from
463
+ `tabHref()`, NOT a bare `?tab=` literal: `preserve-state` keeps
464
+ `ctx.filters` alive across the visit, so if the href dropped the
465
+ filter query keys the server would render an unfiltered page while
466
+ the (unchanged) filter chips kept claiming the old filters still
467
+ applied. -->
468
+ <BbTabs
469
+ v-model="ctx.tab.value"
470
+ compact
471
+ navigation
472
+ preserve-scroll
473
+ preserve-state
474
+ replace
475
+ :items="[
476
+ {
477
+ key: 'all',
478
+ label: `All · ${ctx.tabCounts.value.all}`,
479
+ href: tabHref('all'),
480
+ server: true,
481
+ only: ['invoices', 'tabCounts'],
482
+ },
483
+ {
484
+ key: 'outstanding',
485
+ label: `Outstanding · ${ctx.tabCounts.value.outstanding}`,
486
+ href: tabHref('outstanding'),
487
+ server: true,
488
+ only: ['invoices', 'tabCounts'],
489
+ },
490
+ {
491
+ key: 'paid',
492
+ label: `Paid · ${ctx.tabCounts.value.paid}`,
493
+ href: tabHref('paid'),
494
+ server: true,
495
+ only: ['invoices', 'tabCounts'],
496
+ },
497
+ {
498
+ key: 'archived',
499
+ label: `Archived · ${ctx.tabCounts.value.archived}`,
500
+ href: tabHref('archived'),
501
+ server: true,
502
+ only: ['invoices', 'tabCounts'],
503
+ },
504
+ ]"
505
+ />
506
+
507
+ <!-- No dependencies/items-fn: `invoices` is a page prop, and selection
508
+ (across pages) binds straight onto the keyed table context. -->
509
+ <BbTable
510
+ v-model="ctx.table.selected.value"
511
+ v-model:select-all="ctx.table.all.value"
512
+ v-model:unselected-items="ctx.table.unselected.value"
513
+ actions
514
+ caption="Invoices"
515
+ :columns="columns"
516
+ compact
517
+ item-value="id"
518
+ :items="ctx.table.items.value"
519
+ loading-text="Loading invoices…"
520
+ :row-class="rowClass"
521
+ selectable
522
+ >
523
+ <!-- Clicking the NAME of a thing peeks it. -->
524
+ <template #number="{ item, content }">
525
+ <BbButton
526
+ size="sm"
527
+ variant="link"
528
+ @click="() => ctx.peekInvoice(item.id)"
529
+ >
530
+ {{ content }}
531
+ </BbButton>
532
+ </template>
533
+
534
+ <template #customer_name="{ item, content }">
535
+ <BbButton
536
+ size="sm"
537
+ variant="ghost"
538
+ @click="() => ctx.stackCustomer(item.customer.id)"
539
+ >
540
+ {{ content }}
541
+ </BbButton>
542
+ </template>
543
+
544
+ <template #status="{ item }">
545
+ <StatusCell :invoice="item" />
546
+ </template>
547
+
548
+ <template #actions="{ item }">
549
+ <RowActions :invoice="item" />
550
+ </template>
551
+
552
+ <template #no-data>
553
+ <div class="flex flex-col items-center gap-2 p-6 text-center">
554
+ <p class="text-sm text-[color:var(--bb-text-muted)]">
555
+ No invoices match
556
+ {{
557
+ ctx.hasActiveFilters.value ? 'the current filters' : 'this tab'
558
+ }}.
559
+ </p>
560
+ <BbButton
561
+ v-if="ctx.hasActiveFilters.value"
562
+ variant="ghost"
563
+ @click="ctx.clearFilters"
564
+ >
565
+ Clear filters
566
+ </BbButton>
567
+ </div>
568
+ </template>
569
+ </BbTable>
570
+
571
+ <!-- No table-id: the keyed table context is the page count here. -->
572
+ <BbPagination
573
+ v-model="ctx.table.page.value"
574
+ label="Invoices pagination"
575
+ :total-pages="ctx.table.totalPages.value"
576
+ />
577
+ </div>
578
+
579
+ <SelectionBar />
580
+
581
+ <!-- Stacked peek sidebar: the shell owns back/close; we render by type. -->
582
+ <template #sidebar>
583
+ <InvoicePeek
584
+ v-if="ctx.shell.current.value?.type === 'invoice'"
585
+ :invoice-id="ctx.shell.current.value.id"
586
+ />
587
+ <CustomerPeek
588
+ v-else-if="ctx.shell.current.value?.type === 'customer'"
589
+ :customer-id="ctx.shell.current.value.id"
590
+ />
591
+ </template>
592
+
593
+ <template #dialogs>
594
+ <RecordPaymentDialog />
595
+ </template>
596
+ </PageShell>
597
+ </template>
598
+
599
+ <script setup lang="ts">
600
+ import {
601
+ BbBreadcrumbs,
602
+ BbButton,
603
+ BbPagination,
604
+ BbTable,
605
+ BbTabs,
606
+ BbTextInput,
607
+ } from 'bitboss-ui';
608
+ import qs from 'query-string';
609
+ import PageShell from '@/components/layout/PageShell.vue';
610
+ import { useQuery } from '@/composables/useQuery';
611
+ import { provideInvoicesWorkspace, type WorkspaceTab } from './context';
612
+ import CustomerPeek from './CustomerPeek.vue';
613
+ import FilterRail from './FilterRail.vue';
614
+ import InvoicePeek from './InvoicePeek.vue';
615
+ import RecordPaymentDialog from './RecordPaymentDialog.vue';
616
+ import RowActions from './RowActions.vue';
617
+ import SelectionBar from './SelectionBar.vue';
618
+ import StatusCell from './StatusCell.vue';
619
+ import type { Invoice } from '@/types';
620
+
621
+ const ctx = provideInvoicesWorkspace();
622
+
623
+ // Merge `tab` into the *current* query instead of replacing it: `useQuery()`
624
+ // reads the live URL, which already carries every filter `useQueryObject`
625
+ // mirrored there, so switching tabs keeps `search`/`status`/`customerId`/
626
+ // `dueBetween` intact instead of silently resetting the results to unfiltered.
627
+ const tabHref = (tab: WorkspaceTab): string =>
628
+ `/invoices?${qs.stringify({ ...useQuery(), tab }, { arrayFormat: 'comma' })}`;
629
+
630
+ const currency = new Intl.NumberFormat('en-US', {
631
+ style: 'currency',
632
+ currency: 'USD',
633
+ });
634
+ const shortDate = (value: string) =>
635
+ new Date(value).toLocaleDateString('en-US', {
636
+ month: 'short',
637
+ day: 'numeric',
638
+ });
639
+
640
+ const columns = [
641
+ { key: 'number', label: 'Invoice' },
642
+ { key: 'customer.name', label: 'Customer' },
643
+ {
644
+ key: 'amount',
645
+ label: 'Amount',
646
+ formatter: (value: number) => currency.format(value),
647
+ },
648
+ { key: 'status', label: 'Status' },
649
+ { key: 'dueDate', label: 'Due', formatter: shortDate },
650
+ { key: 'issuedAt', label: 'Issued', formatter: shortDate },
651
+ ];
652
+
653
+ // Overdue rows get a tinted background — public row-class API, no internals.
654
+ const rowClass = (item: Invoice) =>
655
+ item.status === 'overdue' ? 'bg-red-50 dark:bg-red-950/20' : undefined;
656
+ </script>
657
+ ```
658
+
659
+ ### FilterRail.vue
660
+
661
+ ```vue
662
+ <!-- InvoicesWorkspace/FilterRail.vue -->
663
+ <template>
664
+ <div class="flex flex-wrap items-center gap-2">
665
+ <!-- Status: multi-select pill. -->
666
+ <BbSelectPopover
667
+ v-model="ctx.filters.status"
668
+ :items="['draft', 'pending', 'paid', 'overdue']"
669
+ multiple
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
+ Status{{
679
+ ctx.filters.status.length ? ` · ${ctx.filters.status.length}` : ''
680
+ }}
681
+ </BbButton>
682
+ </template>
683
+ </BbSelectPopover>
684
+
685
+ <!-- Customer: single, query-aware search against a small JSON endpoint. -->
686
+ <BbSelectPopover
687
+ v-model="ctx.filters.customerId"
688
+ item-text="name"
689
+ item-value="id"
690
+ :items="searchCustomers"
691
+ >
692
+ <template #activator="{ props }">
693
+ <BbButton
694
+ v-bind="props"
695
+ append:icon="lucide:chevron-down"
696
+ size="sm"
697
+ variant="outline"
698
+ >
699
+ {{ customerLabel }}
700
+ </BbButton>
701
+ </template>
702
+ </BbSelectPopover>
703
+
704
+ <!-- Due date range: a compact input is 28px — flush with the sm pills' row. -->
705
+ <BbDatePickerInput
706
+ v-model="ctx.filters.dueBetween"
707
+ hide-label
708
+ label="Due date range"
709
+ clearable
710
+ compact
711
+ placeholder="Due between…"
712
+ range
713
+ />
714
+
715
+ <!-- Clear-all renders only while something is active. -->
716
+ <BbButton
717
+ v-if="ctx.hasActiveFilters.value"
718
+ class="ml-auto"
719
+ prepend:icon="lucide:x"
720
+ size="sm"
721
+ variant="ghost"
722
+ @click="ctx.clearFilters"
723
+ >
724
+ Clear filters
725
+ </BbButton>
726
+ </div>
727
+ </template>
728
+
729
+ <script setup lang="ts">
730
+ import { computed, ref, watchEffect } from 'vue';
731
+ import { BbButton, BbDatePickerInput, BbSelectPopover } from 'bitboss-ui';
732
+ import { useInvoicesWorkspace } from './context';
733
+ import type { Customer } from '@/types';
734
+
735
+ const ctx = useInvoicesWorkspace();
736
+
737
+ // Query-aware items function: BbSelectPopover calls it with the search text.
738
+ // A small JSON endpoint, not an Inertia visit — searching a filter pill
739
+ // must not re-render the page.
740
+ const searchCustomers = (query: string): Promise<Customer[]> =>
741
+ fetch(`/customers/search?q=${encodeURIComponent(query)}`).then((res) =>
742
+ res.json()
743
+ );
744
+
745
+ // The trigger labels itself from page state (the popover is lazy by design
746
+ // and cannot know the selected label before its first open).
747
+ const selectedCustomer = ref<Customer | null>(null);
748
+ watchEffect(async () => {
749
+ selectedCustomer.value =
750
+ ctx.filters.customerId == null
751
+ ? null
752
+ : await fetch(`/customers/${ctx.filters.customerId}/peek`).then((res) =>
753
+ res.json()
754
+ );
755
+ });
756
+ const customerLabel = computed(
757
+ () => selectedCustomer.value?.name ?? 'Customer'
758
+ );
759
+ </script>
760
+ ```
761
+
762
+ ### StatusCell.vue
763
+
764
+ ```vue
765
+ <!-- InvoicesWorkspace/StatusCell.vue -->
766
+ <template>
767
+ <BbSelectPopover
768
+ :items="['draft', 'pending', 'paid', 'overdue']"
769
+ :model-value="invoice.status"
770
+ @update:model-value="(status) => pick(status as InvoiceStatus)"
771
+ >
772
+ <template #activator="{ props: activatorProps }">
773
+ <!-- The badge IS the trigger: BbBadgeButton turns the badge's own
774
+ body into the button, so the pill is the hit target and draws its
775
+ own focus ring — no wrapper element, no chrome class. The internal
776
+ trailing chevron says "clickable"; while the save runs the badge's
777
+ `loading` swaps the spinner into the chevron's place (§6.1
778
+ niceties). -->
779
+ <BbBadge
780
+ append:icon="lucide:chevron-down"
781
+ :loading="saving"
782
+ variant="outline"
783
+ >
784
+ <BbBadgeButton v-bind="activatorProps">{{
785
+ invoice.status
786
+ }}</BbBadgeButton>
787
+ </BbBadge>
788
+ </template>
789
+ </BbSelectPopover>
790
+ </template>
791
+
792
+ <script setup lang="ts">
793
+ import { ref } from 'vue';
794
+ import { BbBadge, BbBadgeButton, BbSelectPopover } from 'bitboss-ui';
795
+ import { useInvoicesWorkspace } from './context';
796
+ import type { Invoice, InvoiceStatus } from '@/types';
797
+
798
+ const props = defineProps<{ invoice: Invoice }>();
799
+
800
+ const ctx = useInvoicesWorkspace();
801
+
802
+ // In-flight flag for the save feedback — rung-1 local state, not context.
803
+ const saving = ref(false);
804
+ const pick = async (status: InvoiceStatus) => {
805
+ saving.value = true;
806
+ try {
807
+ await ctx.updateStatus(props.invoice, status);
808
+ } finally {
809
+ saving.value = false;
810
+ }
811
+ };
812
+ </script>
813
+ ```
814
+
815
+ ### RowActions.vue
816
+
817
+ ```vue
818
+ <!-- InvoicesWorkspace/RowActions.vue -->
819
+ <template>
820
+ <BbDropdown
821
+ :items="[
822
+ {
823
+ key: 'edit',
824
+ text: 'Edit',
825
+ 'prepend:icon': 'lucide:pencil',
826
+ href: `/invoices/${invoice.id}/edit`,
827
+ },
828
+ {
829
+ key: 'duplicate',
830
+ text: 'Duplicate',
831
+ 'prepend:icon': 'lucide:copy',
832
+ onClick: () => ctx.duplicateInvoice(invoice),
833
+ },
834
+ {
835
+ key: 'payment',
836
+ text: 'Record payment',
837
+ 'prepend:icon': 'lucide:banknote',
838
+ onClick: () => (ctx.dialogs.recordPayment.value = invoice),
839
+ },
840
+ {
841
+ key: 'archive',
842
+ text: 'Archive',
843
+ 'prepend:icon': 'lucide:archive',
844
+ onClick: () => ctx.archiveInvoice(invoice),
845
+ },
846
+ {
847
+ key: 'delete',
848
+ text: 'Delete',
849
+ 'prepend:icon': 'lucide:trash-2',
850
+ variant: 'destructive',
851
+ onClick: () => ctx.deleteInvoice(invoice),
852
+ },
853
+ ]"
854
+ >
855
+ <template #activator="{ props }">
856
+ <BbButton v-bind="props" icon="lucide:ellipsis" size="sm" variant="ghost">
857
+ Invoice actions
858
+ </BbButton>
859
+ </template>
860
+ </BbDropdown>
861
+ </template>
862
+
863
+ <script setup lang="ts">
864
+ import { BbButton, BbDropdown } from 'bitboss-ui';
865
+ import { useInvoicesWorkspace } from './context';
866
+ import type { Invoice } from '@/types';
867
+
868
+ defineProps<{ invoice: Invoice }>();
869
+
870
+ const ctx = useInvoicesWorkspace();
871
+ </script>
872
+ ```
873
+
874
+ ### SelectionBar.vue
875
+
876
+ ```vue
877
+ <!-- InvoicesWorkspace/SelectionBar.vue -->
878
+ <template>
879
+ <FloatingBottomPanel :open="selectedCount > 0">
880
+ <span class="px-2 text-sm">{{ selectedCount }} selected</span>
881
+ <BbButton
882
+ prepend:icon="lucide:check"
883
+ size="sm"
884
+ variant="ghost"
885
+ @click="ctx.bulkMarkPaid"
886
+ >
887
+ Mark as paid
888
+ </BbButton>
889
+ <BbButton
890
+ prepend:icon="lucide:send"
891
+ size="sm"
892
+ variant="ghost"
893
+ @click="ctx.bulkRemind"
894
+ >
895
+ Send reminder
896
+ </BbButton>
897
+ <div class="floating-bottom-panel__right flex items-center gap-1">
898
+ <BbButton size="sm" variant="destructive" @click="ctx.bulkArchive"
899
+ >Archive</BbButton
900
+ >
901
+ <BbButton
902
+ aria-label="Clear selection"
903
+ icon="lucide:x"
904
+ size="sm"
905
+ variant="ghost"
906
+ @click="ctx.table.resetSelection"
907
+ />
908
+ </div>
909
+ </FloatingBottomPanel>
910
+ </template>
911
+
912
+ <script setup lang="ts">
913
+ import { computed } from 'vue';
914
+ import { BbButton } from 'bitboss-ui';
915
+ import { useInvoicesWorkspace } from './context';
916
+ import FloatingBottomPanel from '@/components/layout/FloatingBottomPanel.vue';
917
+
918
+ const ctx = useInvoicesWorkspace();
919
+
920
+ // `all` (select-all-across-pages) does not enumerate rows, so the visible
921
+ // count is the total minus whatever the user manually deselected.
922
+ const selectedCount = computed(() =>
923
+ ctx.table.all.value
924
+ ? ctx.table.totalItems.value - ctx.table.unselected.value.length
925
+ : ctx.table.selected.value.length
926
+ );
927
+ </script>
928
+ ```
929
+
930
+ ### InvoicePeek.vue
931
+
932
+ ```vue
933
+ <!-- InvoicesWorkspace/InvoicePeek.vue -->
934
+ <template>
935
+ <div v-if="invoice" class="flex flex-col gap-4 text-sm">
936
+ <!-- Header: identity + one-click status + amount. -->
937
+ <header class="flex flex-col gap-1.5">
938
+ <div class="flex items-center justify-between gap-2">
939
+ <h2 class="text-base font-semibold">{{ invoice.number }}</h2>
940
+ <StatusCell :invoice="invoice" />
941
+ </div>
942
+ <p class="text-xl font-semibold">{{ currency.format(invoice.amount) }}</p>
943
+ <p class="text-xs text-[color:var(--bb-text-muted)]">
944
+ Issued {{ longDate(invoice.issuedAt) }} · due
945
+ {{ longDate(invoice.dueDate) }}
946
+ </p>
947
+ </header>
948
+
949
+ <!-- Properties: customer name drills DOWN — stacked peek, back arrow. -->
950
+ <dl class="grid grid-cols-[auto_1fr] gap-x-4 gap-y-1.5">
951
+ <dt class="text-[color:var(--bb-text-muted)]">Customer</dt>
952
+ <dd>
953
+ <BbButton
954
+ size="sm"
955
+ variant="link"
956
+ @click="() => ctx.stackCustomer(invoice!.customer.id)"
957
+ >
958
+ {{ invoice.customer.name }}
959
+ </BbButton>
960
+ </dd>
961
+ <dt class="text-[color:var(--bb-text-muted)]">Project</dt>
962
+ <dd>{{ invoice.project.name }}</dd>
963
+ <dt class="text-[color:var(--bb-text-muted)]">Payment terms</dt>
964
+ <dd>{{ invoice.paymentTerms }}</dd>
965
+ <dt class="text-[color:var(--bb-text-muted)]">Reference</dt>
966
+ <dd>{{ invoice.reference }}</dd>
967
+ </dl>
968
+
969
+ <!-- Line items: a real mini-table, not a summary sentence. -->
970
+ <section class="flex flex-col gap-1.5">
971
+ <h3
972
+ class="text-xs font-semibold uppercase tracking-wide text-[color:var(--bb-text-muted)]"
973
+ >
974
+ Line items
975
+ </h3>
976
+ <BbTable
977
+ caption="Invoice line items"
978
+ :columns="[
979
+ { key: 'description', label: 'Description' },
980
+ { key: 'quantity', label: 'Qty' },
981
+ {
982
+ key: 'total',
983
+ label: 'Total',
984
+ formatter: (value: number) => currency.format(value),
985
+ },
986
+ ]"
987
+ compact
988
+ item-value="id"
989
+ :items="invoice.lineItems"
990
+ />
991
+ </section>
992
+
993
+ <!-- Payments so far. -->
994
+ <section v-if="invoice.payments.length" class="flex flex-col gap-1.5">
995
+ <h3
996
+ class="text-xs font-semibold uppercase tracking-wide text-[color:var(--bb-text-muted)]"
997
+ >
998
+ Payments
999
+ </h3>
1000
+ <ul class="flex flex-col gap-1">
1001
+ <li
1002
+ v-for="payment in invoice.payments"
1003
+ :key="payment.id"
1004
+ class="flex items-center justify-between gap-2"
1005
+ >
1006
+ <span
1007
+ >{{ currency.format(payment.amount) }} · {{ payment.method }}</span
1008
+ >
1009
+ <span class="text-xs text-[color:var(--bb-text-muted)]">{{
1010
+ longDate(payment.paidAt)
1011
+ }}</span>
1012
+ </li>
1013
+ </ul>
1014
+ </section>
1015
+
1016
+ <!-- Activity feed. -->
1017
+ <section class="flex flex-col gap-1.5">
1018
+ <h3
1019
+ class="text-xs font-semibold uppercase tracking-wide text-[color:var(--bb-text-muted)]"
1020
+ >
1021
+ Activity
1022
+ </h3>
1023
+ <ul class="flex flex-col gap-2">
1024
+ <li
1025
+ v-for="entry in invoice.activity"
1026
+ :key="entry.id"
1027
+ class="flex gap-2"
1028
+ >
1029
+ <BbIcon
1030
+ class="mt-0.5 shrink-0 text-[color:var(--bb-text-muted)]"
1031
+ :icon="entry.icon"
1032
+ size="14"
1033
+ />
1034
+ <div class="flex flex-col">
1035
+ <span>{{ entry.text }}</span>
1036
+ <span class="text-xs text-[color:var(--bb-text-muted)]"
1037
+ >{{ entry.actor }} · {{ longDate(entry.at) }}</span
1038
+ >
1039
+ </div>
1040
+ </li>
1041
+ </ul>
1042
+ </section>
1043
+
1044
+ <!-- Peek is a workbench: act here, or leave for the full page. -->
1045
+ <footer class="mt-2 flex items-center gap-2 border-t pt-3">
1046
+ <BbButton
1047
+ prepend:icon="lucide:banknote"
1048
+ size="sm"
1049
+ variant="secondary"
1050
+ @click="() => (ctx.dialogs.recordPayment.value = invoice)"
1051
+ >
1052
+ Record payment
1053
+ </BbButton>
1054
+ <BbButton
1055
+ append:icon="lucide:arrow-up-right"
1056
+ :href="`/invoices/${invoice.id}`"
1057
+ size="sm"
1058
+ variant="ghost"
1059
+ >
1060
+ Open full page
1061
+ </BbButton>
1062
+ </footer>
1063
+ </div>
1064
+
1065
+ <!-- `data === null` means EITHER "not loaded yet" OR "failed" — a peek
1066
+ needs a third state, or a 403/404 renders this spinner forever. -->
1067
+ <div
1068
+ v-else-if="loadFailed"
1069
+ class="flex flex-col items-center gap-2 p-8 text-center"
1070
+ >
1071
+ <p class="text-sm text-[color:var(--bb-text-muted)]">
1072
+ Couldn't load this invoice.
1073
+ </p>
1074
+ <BbButton size="sm" variant="ghost" @click="refresh">Retry</BbButton>
1075
+ </div>
1076
+
1077
+ <div v-else class="flex justify-center p-8">
1078
+ <BbSpinner />
1079
+ </div>
1080
+ </template>
1081
+
1082
+ <script setup lang="ts">
1083
+ import { ref, watch } from 'vue';
1084
+ import { BbButton, BbIcon, BbSpinner, BbTable } from 'bitboss-ui';
1085
+ import { useResourceContext } from '@/composables/useResourceContext';
1086
+ import StatusCell from './StatusCell.vue';
1087
+ import { useInvoicesWorkspace } from './context';
1088
+ import type { InvoiceDetail } from '@/types';
1089
+
1090
+ const props = defineProps<{ invoiceId: number }>();
1091
+
1092
+ const ctx = useInvoicesWorkspace();
1093
+
1094
+ // A small JSON endpoint, not a page visit — opening the peek never
1095
+ // re-renders the list underneath it. Re-fetches whenever the stack shows a
1096
+ // different invoice; `refreshKey` makes mutations (status, payment) reflect
1097
+ // here immediately.
1098
+ const loadFailed = ref(false);
1099
+ const { data: invoice, refresh } = useResourceContext<InvoiceDetail, number>(
1100
+ () => props.invoiceId,
1101
+ async (id) => {
1102
+ // `fetch` never rejects on a 403/404 — check `res.ok` and throw, or a
1103
+ // failed peek is indistinguishable from one still loading.
1104
+ const res = await fetch(`/invoices/${id}/peek`);
1105
+ if (!res.ok) throw new Error(`Failed to load invoice ${id}: ${res.status}`);
1106
+ return res.json();
1107
+ },
1108
+ {
1109
+ onSuccess: () => {
1110
+ loadFailed.value = false;
1111
+ },
1112
+ onError: () => {
1113
+ loadFailed.value = true;
1114
+ },
1115
+ }
1116
+ );
1117
+ watch(() => ctx.refreshKey.value, refresh);
1118
+
1119
+ const currency = new Intl.NumberFormat('en-US', {
1120
+ style: 'currency',
1121
+ currency: 'USD',
1122
+ });
1123
+ const longDate = (value: string) =>
1124
+ new Date(value).toLocaleDateString('en-US', {
1125
+ month: 'short',
1126
+ day: 'numeric',
1127
+ year: 'numeric',
1128
+ });
1129
+ </script>
1130
+ ```
1131
+
1132
+ ### CustomerPeek.vue
1133
+
1134
+ ```vue
1135
+ <!-- InvoicesWorkspace/CustomerPeek.vue -->
1136
+ <template>
1137
+ <div v-if="customer" class="flex flex-col gap-4 text-sm">
1138
+ <header class="flex items-center gap-3">
1139
+ <BbAvatar :alt="customer.name" :src="customer.avatarUrl" />
1140
+ <div class="flex flex-col">
1141
+ <h2 class="text-base font-semibold">{{ customer.name }}</h2>
1142
+ <p class="text-xs text-[color:var(--bb-text-muted)]">
1143
+ {{ customer.email }} · {{ customer.country }}
1144
+ </p>
1145
+ </div>
1146
+ </header>
1147
+
1148
+ <!-- Stat strip. -->
1149
+ <div class="grid grid-cols-3 gap-2">
1150
+ <div class="rounded-[var(--bb-radius)] border p-2">
1151
+ <p class="text-xs text-[color:var(--bb-text-muted)]">Total billed</p>
1152
+ <p class="font-semibold">{{ currency.format(customer.totalBilled) }}</p>
1153
+ </div>
1154
+ <div class="rounded-[var(--bb-radius)] border p-2">
1155
+ <p class="text-xs text-[color:var(--bb-text-muted)]">Outstanding</p>
1156
+ <p class="font-semibold">{{ currency.format(customer.outstanding) }}</p>
1157
+ </div>
1158
+ <div class="rounded-[var(--bb-radius)] border p-2">
1159
+ <p class="text-xs text-[color:var(--bb-text-muted)]">Invoices</p>
1160
+ <p class="font-semibold">{{ customer.invoiceCount }}</p>
1161
+ </div>
1162
+ </div>
1163
+
1164
+ <!-- Recent invoices: names drill down again — the stack keeps growing. -->
1165
+ <section class="flex flex-col gap-1.5">
1166
+ <h3
1167
+ class="text-xs font-semibold uppercase tracking-wide text-[color:var(--bb-text-muted)]"
1168
+ >
1169
+ Recent invoices
1170
+ </h3>
1171
+ <ul class="flex flex-col">
1172
+ <li
1173
+ v-for="recent in customer.recentInvoices"
1174
+ :key="recent.id"
1175
+ class="flex items-center justify-between gap-2 border-b py-1.5 last:border-b-0"
1176
+ >
1177
+ <BbButton
1178
+ size="sm"
1179
+ variant="link"
1180
+ @click="() => ctx.stackInvoice(recent.id)"
1181
+ >
1182
+ {{ recent.number }}
1183
+ </BbButton>
1184
+ <BbBadge variant="outline">{{ recent.status }}</BbBadge>
1185
+ <span class="text-xs text-[color:var(--bb-text-muted)]">{{
1186
+ currency.format(recent.amount)
1187
+ }}</span>
1188
+ </li>
1189
+ </ul>
1190
+ </section>
1191
+
1192
+ <footer class="mt-2 flex items-center gap-2 border-t pt-3">
1193
+ <BbButton
1194
+ append:icon="lucide:arrow-up-right"
1195
+ :href="`/customers/${customer.id}`"
1196
+ size="sm"
1197
+ variant="ghost"
1198
+ >
1199
+ Open customer
1200
+ </BbButton>
1201
+ </footer>
1202
+ </div>
1203
+
1204
+ <!-- Same third state as InvoicePeek: `data === null` alone can't tell
1205
+ "loading" from "failed". -->
1206
+ <div
1207
+ v-else-if="loadFailed"
1208
+ class="flex flex-col items-center gap-2 p-8 text-center"
1209
+ >
1210
+ <p class="text-sm text-[color:var(--bb-text-muted)]">
1211
+ Couldn't load this customer.
1212
+ </p>
1213
+ <BbButton size="sm" variant="ghost" @click="refresh">Retry</BbButton>
1214
+ </div>
1215
+
1216
+ <div v-else class="flex justify-center p-8">
1217
+ <BbSpinner />
1218
+ </div>
1219
+ </template>
1220
+
1221
+ <script setup lang="ts">
1222
+ import { ref } from 'vue';
1223
+ import { BbAvatar, BbBadge, BbButton, BbSpinner } from 'bitboss-ui';
1224
+ import { useResourceContext } from '@/composables/useResourceContext';
1225
+ import { useInvoicesWorkspace } from './context';
1226
+ import type { CustomerDetail } from '@/types';
1227
+
1228
+ const props = defineProps<{ customerId: number }>();
1229
+
1230
+ const ctx = useInvoicesWorkspace();
1231
+
1232
+ const loadFailed = ref(false);
1233
+ const { data: customer, refresh } = useResourceContext<CustomerDetail, number>(
1234
+ () => props.customerId,
1235
+ async (id) => {
1236
+ const res = await fetch(`/customers/${id}/peek`);
1237
+ if (!res.ok)
1238
+ throw new Error(`Failed to load customer ${id}: ${res.status}`);
1239
+ return res.json();
1240
+ },
1241
+ {
1242
+ onSuccess: () => {
1243
+ loadFailed.value = false;
1244
+ },
1245
+ onError: () => {
1246
+ loadFailed.value = true;
1247
+ },
1248
+ }
1249
+ );
1250
+
1251
+ const currency = new Intl.NumberFormat('en-US', {
1252
+ style: 'currency',
1253
+ currency: 'USD',
1254
+ });
1255
+ </script>
1256
+ ```
1257
+
1258
+ ### RecordPaymentDialog.vue
1259
+
1260
+ ```vue
1261
+ <!-- InvoicesWorkspace/RecordPaymentDialog.vue -->
1262
+ <template>
1263
+ <BbDialog
1264
+ :model-value="invoice !== null"
1265
+ size="sm"
1266
+ :title="invoice ? `Record payment — ${invoice.number}` : ''"
1267
+ @update:model-value="close"
1268
+ >
1269
+ <form
1270
+ v-if="invoice"
1271
+ class="flex flex-col gap-3"
1272
+ novalidate
1273
+ @submit.prevent="submit"
1274
+ >
1275
+ <BbNumberInput
1276
+ v-model="draft.amount"
1277
+ label="Amount"
1278
+ label-mode="outside"
1279
+ :max-precision="2"
1280
+ :min="0"
1281
+ >
1282
+ <template #prefix>$</template>
1283
+ </BbNumberInput>
1284
+ <BbDatePickerInput
1285
+ v-model="draft.paidAt"
1286
+ label="Paid on"
1287
+ label-mode="outside"
1288
+ />
1289
+ <BbSelect
1290
+ v-model="draft.method"
1291
+ :items="['bank transfer', 'card', 'check', 'cash']"
1292
+ label="Method"
1293
+ label-mode="outside"
1294
+ />
1295
+ <div class="mt-1 flex justify-end gap-2">
1296
+ <BbButton type="button" variant="ghost" @click="close">Cancel</BbButton>
1297
+ <BbButton type="submit" variant="secondary">Record payment</BbButton>
1298
+ </div>
1299
+ </form>
1300
+ </BbDialog>
1301
+ </template>
1302
+
1303
+ <script setup lang="ts">
1304
+ import { computed, reactive, watch } from 'vue';
1305
+ import {
1306
+ BbButton,
1307
+ BbDatePickerInput,
1308
+ BbDialog,
1309
+ BbNumberInput,
1310
+ BbSelect,
1311
+ } from 'bitboss-ui';
1312
+ import { useInvoicesWorkspace } from './context';
1313
+ import type { PaymentDraft } from '@/types';
1314
+
1315
+ const ctx = useInvoicesWorkspace();
1316
+
1317
+ // The dialog's subject lives in the page context — any component on the
1318
+ // page (row actions, the peek) can open it by assigning the invoice.
1319
+ const invoice = computed(() => ctx.dialogs.recordPayment.value);
1320
+ const close = () => {
1321
+ ctx.dialogs.recordPayment.value = null;
1322
+ };
1323
+
1324
+ const draft = reactive<PaymentDraft>({
1325
+ amount: null,
1326
+ paidAt: null,
1327
+ method: null,
1328
+ });
1329
+ watch(invoice, (next) => {
1330
+ // Re-seed per invoice: default to paying the remaining balance today.
1331
+ draft.amount = next?.amountDue ?? null;
1332
+ draft.paidAt = next ? new Date().toISOString() : null;
1333
+ draft.method = null;
1334
+ });
1335
+
1336
+ // Returning the promise lets the submit button track the async work.
1337
+ const submit = () =>
1338
+ invoice.value ? ctx.recordPayment(invoice.value, { ...draft }) : undefined;
1339
+ </script>
1340
+ ```
1341
+
1342
+ ## Why it is built this way
1343
+
1344
+ - **The context coopts, leaves consume.** `shell` and the keyed
1345
+ `useTableContext('invoices')` are joined once in
1346
+ `provideInvoicesWorkspace()`; nine components share filters, selection,
1347
+ the peek stack and every action through one `useInvoicesWorkspace()`
1348
+ call. No component on this page receives a callback prop, and only
1349
+ peeks/cells receive data props (the item or id they render).
1350
+ - **`invoices` is a page prop, not a client fetch.** `useTableContext`
1351
+ turns the Laravel paginator into `items`/`totalItems`/`page`/`perPage`
1352
+ (URL-backed) plus `selected`/`unselected`/`all`; `BbTable` binds directly
1353
+ to that handle with `v-model`/`v-model:select-all`/`v-model:unselected-items`
1354
+ — there is no items function and no `dependencies` array, because the
1355
+ server already did the filtering, sorting and paging before the props
1356
+ arrived.
1357
+ - **One watcher for filters, one visit mechanism for tabs.**
1358
+ `useQueryObject(filters, { only: ['invoices', 'tabCounts'] })` is the
1359
+ entire filter-to-URL wiring; `BbTabs`' `href` + `server: true` items (with
1360
+ the required component-level `navigation`) make tab switches real,
1361
+ partial-reloaded visits with the same `only` list — one source of
1362
+ server truth, reached two ways. Each `href` is built by `tabHref()`, which
1363
+ merges `tab` into the current query rather than replacing it — `href:
1364
+ '/invoices?tab=all'` alone would drop every active filter, and because
1365
+ `preserve-state` keeps this page instance (and `ctx.filters`) alive across
1366
+ the visit, the chips would keep showing the old filters as active over an
1367
+ unfiltered result set.
1368
+ - **The `visit()` helper is the promise-wrapped router-visit pattern** the
1369
+ base's adaptation notes call for: it turns Inertia's
1370
+ `onSuccess`/`onError` callbacks into a promise so every context action
1371
+ (`updateStatus`, `duplicateInvoice`, the bulk actions, …) stays an
1372
+ `async function` — identical call sites to the Vue/Nuxt recipes,
1373
+ `await ctx.updateStatus(...)`.
1374
+ - **Bulk actions carry the full select-all-across-pages payload**
1375
+ (`ids`/`all`/`unselected`) so "select all, deselect three, archive" sends
1376
+ the same semantics the table itself models — never just an enumerated id
1377
+ list that silently drops rows outside the current page.
1378
+ - **Peeks are JSON fetches, not visits.** `useResourceContext` re-fetches
1379
+ on id change and exposes a `refresh()` the peek re-runs whenever
1380
+ `ctx.refreshKey` bumps (every mutation bumps it) — opening or updating a
1381
+ peek never re-renders the list page underneath it.
1382
+ - **`peekX` vs `stackX` is the whole stack grammar.** Fresh peeks replace,
1383
+ drill-downs push; the shell renders the back arrow when depth > 1. The
1384
+ grammar lives in the context — a leaf cannot accidentally nuke the
1385
+ stack.
1386
+ - **Dialogs hang off the context** (`ctx.dialogs.recordPayment` holds the
1387
+ subject invoice, not a boolean) so row actions and the peek open the
1388
+ same dialog with zero coordination.
1389
+ - **Sizing:** topbar and rail follow `md`-first (`compact` inputs at 28px
1390
+ flush beside the default buttons); `sm` appears exactly where the
1391
+ doctrine allows — row actions, pills, peek footers, the bulk bar.
1392
+ - **One `variant="primary"`** (New invoice). Destructive actions —
1393
+ single, bulk, in-peek — all ride `useConfirm`.
1394
+ - **The status badge tells you it saves.** `StatusCell` carries the §6.1
1395
+ niceties: an internal trailing chevron (a clickable status must say so)
1396
+ and `:loading` around the awaited context action, so the spinner takes
1397
+ the chevron's place while the save runs. The flag is a local `ref` —
1398
+ rung 1, not context state. The ownership grammar behind inline edits is
1399
+ the [Inline Edit Playbook](../../guides/inline-edit-playbook.md).
1400
+
1401
+ ## Variations
1402
+
1403
+ - **Keyboard triage**: add `keyboard-navigation` to the table and open the
1404
+ peek from `v-model:highlighted` — the approvals-inbox recipe is the
1405
+ full treatment.
1406
+ - **Saved views**: persist `filters` + `tab` per user in a store
1407
+ (`useSavedViewsStore`) and render a view switcher before the tabs.
1408
+ - **Inline amount editing**: swap the amount cell for an
1409
+ `EditableAmountCell` per the inline-editing pattern. Choosing between
1410
+ explicit-commit cells and a fully autosaving grid is the
1411
+ [Inline Edit Playbook](../../guides/inline-edit-playbook.md); the
1412
+ autosave treatment is the inline-edit-workspace recipe.
1413
+ - **Lazy tab counts**: if `tabCounts` is expensive to compute, share it as
1414
+ `Inertia::lazy()` and read it with `useLazyProp` instead of a plain
1415
+ prop — the tab labels resolve once it lands instead of blocking the
1416
+ first render.