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,1443 @@
1
+ ---
2
+ title: Inertia Helpers
3
+ summary: App-side toolkit for Laravel + Inertia apps — typed page props, lazy props, URL-driven filters, paginated/selection page contexts, promise forms, and navigation guards that pair with bitboss-ui pages.
4
+ ---
5
+
6
+ # Inertia Helpers
7
+
8
+ A curated toolkit of composables for **Laravel + Inertia (Vue 3)** apps built
9
+ on bitboss-ui. These are _app-side_ code: copy the ones you need into your
10
+ project (conventionally `src/composables/`) — they are not exported by the
11
+ `bitboss-ui` package. The [Inertia recipes](../recipes/inertia/records-workspace.md)
12
+ assume this toolkit.
13
+
14
+ Why it exists: in Inertia there is no client data layer — data arrives as
15
+ **page props** and changes through **visits**. These helpers give that model
16
+ a clean, typed API so pages stay thin: props read through one surface,
17
+ filters live in the URL, paginated data and selection are shared through
18
+ keyed contexts instead of prop drilling, and forms return promises that
19
+ bitboss-ui buttons and dialogs can await.
20
+
21
+ Copying this toolkit pulls in real npm dependencies beyond the app's own
22
+ `@inertiajs/vue3`/`vue` — install them explicitly rather than relying on them
23
+ already being hoisted transitively through `bitboss-ui`'s own `dependencies`
24
+ (that works today by npm hoisting luck, and breaks under pnpm/Yarn PnP or the
25
+ next time `bitboss-ui` changes what it depends on):
26
+
27
+ ```
28
+ npm i @vueuse/core object-code query-string
29
+ ```
30
+
31
+ `@vueuse/core` backs every keyed context's `injectLocal`/`provideLocal`
32
+ (`usePaginatedResponseContext`, `useTableSelectionContext`, `useTableContext`,
33
+ `usePageShellContext`) and `useDeleteCmd`/`useScreenSizes`; `object-code`
34
+ powers the `isEqual` hash-comparison utility below; `query-string` backs
35
+ `useQuery`/`useRouteQuery`/`useQueryObject`. A few tiny utilities are assumed
36
+ under `@/utils` and defined below.
37
+
38
+ ## Shared types and utilities
39
+
40
+ ```ts
41
+ // src/types/index.ts — the Laravel paginator shape and base page props
42
+ export type PaginatedResponse<T> = {
43
+ data: T[];
44
+ meta: {
45
+ total: number;
46
+ per_page: number;
47
+ current_page: number;
48
+ last_page: number;
49
+ };
50
+ };
51
+
52
+ export type BasePageProps = {
53
+ [key: string]: unknown;
54
+ };
55
+ ```
56
+
57
+ ```ts
58
+ // src/utils/index.ts — micro-utilities the helpers share
59
+ import { hash } from 'object-code';
60
+
61
+ export const isNil = (value: unknown): value is null | undefined =>
62
+ value === null || value === undefined;
63
+
64
+ export const isNotNil = <T>(value: T | null | undefined): value is T =>
65
+ !isNil(value);
66
+
67
+ export const isEmpty = (value: unknown): boolean =>
68
+ isNil(value) || value === '' || (Array.isArray(value) && value.length === 0);
69
+
70
+ export const noop = (): void => undefined;
71
+
72
+ /** Deep equality by structural hash — cheap and dependency-light. */
73
+ export const isEqual = (a: unknown, b: unknown): boolean => hash(a) === hash(b);
74
+
75
+ export const isPlainObject = (
76
+ value: unknown
77
+ ): value is Record<string, unknown> =>
78
+ typeof value === 'object' &&
79
+ value !== null &&
80
+ Object.getPrototypeOf(value) === Object.prototype;
81
+ ```
82
+
83
+ ---
84
+
85
+ ## Page props
86
+
87
+ ### useProp / useOptionalProp
88
+
89
+ Typed, reactive access to a page prop by path. `useProp` throws when the
90
+ path is missing (a controller contract violation should fail loudly);
91
+ `useOptionalProp` returns `undefined` instead.
92
+
93
+ ```ts
94
+ // src/composables/useProp.ts
95
+ import { usePage } from '@inertiajs/vue3';
96
+ import { computed, type ComputedRef } from 'vue';
97
+
98
+ const walk = <T>(
99
+ source: unknown,
100
+ path: string[]
101
+ ): { found: boolean; value: T | undefined } => {
102
+ let current: unknown = source;
103
+ for (const segment of path) {
104
+ if (
105
+ current === null ||
106
+ typeof current !== 'object' ||
107
+ !(segment in current)
108
+ ) {
109
+ return { found: false, value: undefined };
110
+ }
111
+ current = (current as Record<string, unknown>)[segment];
112
+ }
113
+ return { found: true, value: current as T };
114
+ };
115
+
116
+ const toPath = (propPath: string | string[]): string[] =>
117
+ typeof propPath === 'string' ? propPath.split('.') : propPath;
118
+
119
+ /** Reactive page prop by path. Throws when the path is not present. */
120
+ export const useProp = <T>(propPath: string | string[]): ComputedRef<T> => {
121
+ const page = usePage();
122
+ const path = toPath(propPath);
123
+
124
+ return computed(() => {
125
+ const { found, value } = walk<T>(page.props, path);
126
+ if (!found) {
127
+ throw new Error(`Page prop "${path.join('.')}" is missing.`);
128
+ }
129
+ return value as T;
130
+ });
131
+ };
132
+
133
+ /** Like useProp, but resolves to `undefined` when the path is missing. */
134
+ export const useOptionalProp = <T>(
135
+ propPath: string | string[]
136
+ ): ComputedRef<T | undefined> => {
137
+ const page = usePage();
138
+ const path = toPath(propPath);
139
+
140
+ return computed(() => walk<T>(page.props, path).value);
141
+ };
142
+ ```
143
+
144
+ ### useLazyProp
145
+
146
+ Reads a prop the server marked lazy (`Inertia::lazy()` / `optional()`).
147
+ The returned `value` is self-loading: the first template or computed that
148
+ reads it triggers a partial reload (`only: [propName]`) and the ref updates
149
+ when the data lands. `loading`/`loaded`/`error` expose the fetch state;
150
+ `execute()` forces the load imperatively.
151
+
152
+ ```ts
153
+ // src/composables/useLazyProp.ts
154
+ import { isEqual, isNil, isNotNil } from '@/utils';
155
+ import { router, usePage } from '@inertiajs/vue3';
156
+ import type { Ref } from 'vue';
157
+ import { customRef, onBeforeUnmount, readonly, ref, watch } from 'vue';
158
+
159
+ export type UseLazyPropOptions = {
160
+ /** Keep the last non-nil value across visits that reset the prop. Default true. */
161
+ cache?: boolean;
162
+ headers?: Record<string, string>;
163
+ };
164
+
165
+ export function useLazyProp<T>(
166
+ propName: string,
167
+ initialValue?: T,
168
+ options: UseLazyPropOptions = {}
169
+ ): {
170
+ value: Ref<T | undefined>;
171
+ loaded: Readonly<Ref<boolean>>;
172
+ loading: Readonly<Ref<boolean>>;
173
+ error: Readonly<Ref<Error | null>>;
174
+ execute: () => Promise<void>;
175
+ } {
176
+ const page = usePage<{ [key: string]: T | undefined }>();
177
+ const { cache = true } = options;
178
+ const loading = ref(false);
179
+ const loaded = ref(page.props[propName] !== undefined);
180
+ const error = ref<Error | null>(null);
181
+ let inFlightPromise: Promise<void> | null = null;
182
+ let isUnmounted = false;
183
+ let cached = page.props[propName];
184
+
185
+ onBeforeUnmount(() => {
186
+ isUnmounted = true;
187
+ });
188
+
189
+ const loadProp = (onSuccess: () => void): Promise<void> => {
190
+ if (inFlightPromise) return inFlightPromise;
191
+
192
+ error.value = null;
193
+
194
+ inFlightPromise = new Promise<void>((resolve) => {
195
+ router.reload({
196
+ only: [propName],
197
+ replace: true,
198
+ headers: options.headers,
199
+ onStart: () => {
200
+ loading.value = true;
201
+ },
202
+ onSuccess: () => {
203
+ if (!isUnmounted) {
204
+ loaded.value = true;
205
+ cached = page.props[propName];
206
+ onSuccess();
207
+ }
208
+ },
209
+ onError: (errors) => {
210
+ if (!isUnmounted) {
211
+ error.value =
212
+ errors instanceof Error
213
+ ? errors
214
+ : new Error(`Failed to load lazy prop "${propName}"`);
215
+ }
216
+ },
217
+ onFinish: () => {
218
+ if (!isUnmounted) {
219
+ loading.value = false;
220
+ }
221
+ inFlightPromise = null;
222
+ resolve();
223
+ },
224
+ });
225
+ });
226
+
227
+ return inFlightPromise;
228
+ };
229
+
230
+ /** Self-loading ref: reading it while the prop is absent starts the fetch. */
231
+ const value = customRef<T | undefined>((track, trigger) => ({
232
+ get() {
233
+ track();
234
+ const isMissing = page.props[propName] === undefined;
235
+
236
+ if (isMissing && !loaded.value && !loading.value) {
237
+ loading.value = true;
238
+ void loadProp(trigger);
239
+ }
240
+
241
+ if (isMissing && !loaded.value) {
242
+ return initialValue;
243
+ }
244
+ if (cache && cached !== undefined) {
245
+ return cached;
246
+ }
247
+ return page.props[propName];
248
+ },
249
+ set() {
250
+ throw new Error(`Lazy prop "${propName}" is read-only.`);
251
+ },
252
+ }));
253
+
254
+ const execute = () => loadProp(noopTrigger);
255
+
256
+ watch(
257
+ () => page.props[propName],
258
+ (newVal, oldVal) => {
259
+ if (isUnmounted) return;
260
+ // Persist shape changes into the cache…
261
+ if (isNotNil(newVal) && !isEqual(newVal, oldVal) && cache) {
262
+ cached = newVal;
263
+ }
264
+ // …reset state when a navigation clears the prop (uncached mode)…
265
+ if (isNil(newVal) && isNotNil(oldVal) && !cache) {
266
+ loaded.value = false;
267
+ loading.value = false;
268
+ error.value = null;
269
+ } else if (isNotNil(newVal) && isNil(oldVal)) {
270
+ // …and mark loaded when the value first arrives.
271
+ loaded.value = true;
272
+ loading.value = false;
273
+ error.value = null;
274
+ }
275
+ }
276
+ );
277
+
278
+ return {
279
+ value,
280
+ loaded: readonly(loaded),
281
+ loading: readonly(loading),
282
+ error: readonly(error),
283
+ execute,
284
+ };
285
+ }
286
+
287
+ const noopTrigger = () => undefined;
288
+ ```
289
+
290
+ Gotchas:
291
+
292
+ - Inertia partial reloads only target **top-level** props — you cannot lazy
293
+ load `stats.revenue`, only `stats`.
294
+ - Filter navigations reset lazy props server-side; with `cache: true`
295
+ (default) the last value keeps rendering while the fresh one loads.
296
+
297
+ ### useLazyPropGetter
298
+
299
+ Adapts a lazy prop into an **async getter** — exactly the items-provider
300
+ shape `BbSelect` / `BbSelectPopover` / `BbCheckboxGroup` accept. The prop
301
+ loads on first demand (e.g. when the select opens) instead of inflating the
302
+ initial page load.
303
+
304
+ ```ts
305
+ // src/composables/useLazyPropGetter.ts
306
+ import {
307
+ useLazyProp,
308
+ type UseLazyPropOptions,
309
+ } from '@/composables/useLazyProp';
310
+ import { isNil } from '@/utils';
311
+ import type { Ref } from 'vue';
312
+
313
+ export function useLazyPropGetter<T, U = T>(
314
+ propName: string,
315
+ formatter?: (value: T) => U,
316
+ options?: UseLazyPropOptions
317
+ ): {
318
+ getter: () => Promise<U>;
319
+ loaded: Readonly<Ref<boolean>>;
320
+ loading: Readonly<Ref<boolean>>;
321
+ } {
322
+ const { value, loaded, loading, execute } = useLazyProp<T>(
323
+ propName,
324
+ undefined,
325
+ options
326
+ );
327
+
328
+ const getter = async (): Promise<U> => {
329
+ if (!loaded.value) {
330
+ await execute();
331
+ }
332
+ if (isNil(value.value)) {
333
+ throw new Error(`Could not load lazy prop "${propName}"`);
334
+ }
335
+ if (isNil(formatter)) return value.value as unknown as U;
336
+ return formatter(value.value);
337
+ };
338
+
339
+ return { getter, loaded, loading };
340
+ }
341
+ ```
342
+
343
+ ```vue
344
+ <!-- The controller shares `roles` as a lazy prop; the select loads it on open. -->
345
+ <script setup lang="ts">
346
+ const { getter: fetchRoles } = useLazyPropGetter<Role[]>('roles');
347
+ </script>
348
+
349
+ <template>
350
+ <BbSelect
351
+ v-model="role"
352
+ item-text="name"
353
+ item-value="id"
354
+ :items="fetchRoles"
355
+ label="Role"
356
+ />
357
+ </template>
358
+ ```
359
+
360
+ ---
361
+
362
+ ## URL state
363
+
364
+ In Inertia the URL is the only client state that survives a visit — filters,
365
+ page numbers and sort orders belong there, not in refs that reset on
366
+ navigation.
367
+
368
+ ### useQuery
369
+
370
+ Parses the current page URL's query string into an object. Snapshot, not
371
+ reactive — used by the writers below.
372
+
373
+ ```ts
374
+ // src/composables/useQuery.ts
375
+ import { usePage } from '@inertiajs/vue3';
376
+ import qs, { type StringifyOptions } from 'query-string';
377
+
378
+ export const useQuery = ({
379
+ arrayFormat = 'comma',
380
+ }: { arrayFormat?: StringifyOptions['arrayFormat'] } = {}): Record<
381
+ string,
382
+ unknown
383
+ > => {
384
+ const { url } = usePage();
385
+ const [, queryString] = url.split('?');
386
+ if (!queryString) return {};
387
+ return qs.parse(decodeURIComponent(queryString), {
388
+ arrayFormat,
389
+ decode: true,
390
+ });
391
+ };
392
+ ```
393
+
394
+ ### useRouteQuery
395
+
396
+ A single query parameter as a **writable ref**. Reading tracks the current
397
+ URL; writing merges the parameter and performs a (replace) visit, so the
398
+ server re-renders with the new value. Writing the current value is a no-op —
399
+ safe to sync from server responses without visit loops.
400
+
401
+ ```ts
402
+ // src/composables/useRouteQuery.ts
403
+ import { router, usePage } from '@inertiajs/vue3';
404
+ import qs from 'query-string';
405
+ import { computed, type WritableComputedRef } from 'vue';
406
+
407
+ type Options<T> = {
408
+ /** Parse the raw string (e.g. `Number`). Defaults to identity. */
409
+ transform?: (value: string) => T;
410
+ preserveScroll?: boolean;
411
+ preserveState?: boolean;
412
+ };
413
+
414
+ export function useRouteQuery<T = string>(
415
+ key: string,
416
+ defaultValue: string,
417
+ options: Options<T> = {}
418
+ ): WritableComputedRef<T> {
419
+ const {
420
+ transform = (value) => value as unknown as T,
421
+ preserveScroll = true,
422
+ preserveState = true,
423
+ } = options;
424
+ const page = usePage();
425
+
426
+ const readRaw = (): string => {
427
+ const [, queryString = ''] = page.url.split('?');
428
+ const raw = qs.parse(queryString)[key];
429
+ const single = Array.isArray(raw) ? raw[0] : raw;
430
+ return single != null ? String(single) : defaultValue;
431
+ };
432
+
433
+ return computed<T>({
434
+ get: () => transform(readRaw()),
435
+ set: (next) => {
436
+ const nextRaw = String(next);
437
+ if (nextRaw === readRaw()) return;
438
+
439
+ const [path, queryString = ''] = page.url.split('?');
440
+ const query = qs.parse(queryString);
441
+ if (nextRaw === defaultValue) {
442
+ delete query[key]; // keep URLs clean at the default
443
+ } else {
444
+ query[key] = nextRaw;
445
+ }
446
+ const stringified = qs.stringify(query);
447
+ router.visit(stringified ? `${path}?${stringified}` : path, {
448
+ preserveScroll,
449
+ preserveState,
450
+ replace: true,
451
+ });
452
+ },
453
+ });
454
+ }
455
+ ```
456
+
457
+ ### useQueryObject
458
+
459
+ The **filter engine**: watch a filters object and mirror its non-empty
460
+ values into the query string with an Inertia visit per change. Keys it has
461
+ seen are cleaned up when they empty out; the `page` parameter resets on
462
+ every filter change so results are never hidden on an out-of-range page.
463
+
464
+ ```ts
465
+ // src/composables/useQueryObject.ts
466
+ import { useQuery } from '@/composables/useQuery';
467
+ import { isEmpty, isNil } from '@/utils';
468
+ import { router, usePage } from '@inertiajs/vue3';
469
+ import qs, { type StringifyOptions } from 'query-string';
470
+ import { toValue, watch, type MaybeRefOrGetter } from 'vue';
471
+
472
+ type Options<T> = {
473
+ transform?: (value: Partial<T>) => Partial<T>;
474
+ /** Reset the `page` parameter on change. Default true. */
475
+ resetPage?: boolean;
476
+ /** Additional query keys removed whenever the object changes. */
477
+ resetKeys?: string[];
478
+ /** Inertia partial reload prop names (supports reactive getter). */
479
+ only?: MaybeRefOrGetter<string[]>;
480
+ /**
481
+ * When it resolves to `false` the watcher keeps tracking keys but skips
482
+ * the navigation — use it when another owner performs the visit during a
483
+ * programmatic transition, to avoid competing self-cancelling requests.
484
+ */
485
+ shouldNavigate?: MaybeRefOrGetter<boolean>;
486
+ arrayFormat?: StringifyOptions['arrayFormat'];
487
+ preserveState?: boolean;
488
+ preserveScroll?: boolean;
489
+ replace?: boolean;
490
+ };
491
+
492
+ export function useQueryObject<T extends Record<string, unknown>>(
493
+ object: MaybeRefOrGetter<T>,
494
+ options: Options<T> = {}
495
+ ): void {
496
+ const {
497
+ transform,
498
+ resetPage = true,
499
+ resetKeys = [],
500
+ preserveState = true,
501
+ preserveScroll = true,
502
+ replace = true,
503
+ only: onlyOption = [],
504
+ shouldNavigate = true,
505
+ arrayFormat = 'comma',
506
+ } = options;
507
+
508
+ const filterValidValues = (obj: T): Partial<T> => {
509
+ const filtered: Partial<T> = {};
510
+ Object.entries(obj).forEach(([key, val]) => {
511
+ if (!isNil(val) && val !== '') {
512
+ (filtered as Record<string, unknown>)[key] = val;
513
+ }
514
+ });
515
+ return filtered;
516
+ };
517
+
518
+ /** Every key this composable has ever managed, for stable URL cleanup. */
519
+ const seenKeys = new Set<string>(Object.keys(toValue(object) ?? {}));
520
+
521
+ watch(
522
+ () => toValue(object),
523
+ (newObject) => {
524
+ if (!newObject) return;
525
+
526
+ Object.keys(newObject).forEach((key) => {
527
+ if (!seenKeys.has(key)) {
528
+ console.warn(
529
+ `[useQueryObject] Key "${key}" appeared after initialization. ` +
530
+ `Initialize the object with all possible keys for stable URL cleanup.`
531
+ );
532
+ }
533
+ seenKeys.add(key);
534
+ });
535
+
536
+ const validValues = filterValidValues(newObject);
537
+ const transformedValues = transform
538
+ ? transform(validValues)
539
+ : validValues;
540
+
541
+ // Start from the existing query to preserve keys owned elsewhere.
542
+ const existingQuery = useQuery({ arrayFormat });
543
+ seenKeys.forEach((key) => delete existingQuery[key]);
544
+ if (resetPage) delete existingQuery.page;
545
+ resetKeys.forEach((key) => delete existingQuery[key]);
546
+
547
+ Object.entries(transformedValues).forEach(([key, val]) => {
548
+ if (!isEmpty(val)) existingQuery[key] = val;
549
+ });
550
+
551
+ const stringified = qs.stringify(existingQuery, { arrayFormat });
552
+ const newUrl = stringified
553
+ ? [window.location.pathname, stringified].join('?')
554
+ : window.location.pathname;
555
+
556
+ if (newUrl === usePage().url) return;
557
+ if (!toValue(shouldNavigate)) return;
558
+
559
+ router.visit(newUrl, {
560
+ preserveState,
561
+ preserveScroll,
562
+ only: toValue(onlyOption),
563
+ replace,
564
+ });
565
+ },
566
+ { deep: true, flush: 'sync' }
567
+ );
568
+ }
569
+ ```
570
+
571
+ ```ts
572
+ // A listing page's whole filter wiring:
573
+ const filters = reactive({ search: '', status: null as string | null });
574
+ useQueryObject(filters, { only: ['invoices'] });
575
+ // Bind BbTextInput / BbSelectPopover to `filters.*` — every change becomes a
576
+ // partial reload and the server re-renders the `invoices` prop.
577
+ ```
578
+
579
+ ---
580
+
581
+ ## Shared page data (contexts)
582
+
583
+ These share **server data** across a page by string key — the Inertia
584
+ counterpart of the component-state context
585
+ [`useBbTableContext`](../composables/useBbTableContext.md). Rule of thumb:
586
+ `useBbTableContext` mirrors what the _table widget_ is doing (selection,
587
+ sort, highlight); these contexts own what the _server sent_ (items, meta)
588
+ and survive being read from any component on the page. First caller creates
589
+ the context, later callers join it — no provider component required.
590
+
591
+ ### usePaginatedResponseContext
592
+
593
+ Wraps a Laravel paginated prop (`PaginatedResponse<T>`) into a shared
594
+ context: `items` (editable until next navigation), `totalItems`,
595
+ `totalPages`, and URL-backed `page` / `perPage` refs. On every successful
596
+ visit the context re-syncs from the fresh prop.
597
+
598
+ ```ts
599
+ // src/composables/usePaginatedResponseContext.ts
600
+ import { useRouteQuery } from '@/composables/useRouteQuery';
601
+ import type { PaginatedResponse } from '@/types';
602
+ import { isNotNil } from '@/utils';
603
+ import type { PageProps } from '@inertiajs/core';
604
+ import { router, usePage } from '@inertiajs/vue3';
605
+ import { injectLocal, provideLocal } from '@vueuse/core';
606
+ import { computed, onScopeDispose, ref, type ComputedRef, type Ref } from 'vue';
607
+
608
+ export type PaginatedResponseContext<T> = {
609
+ totalItems: ComputedRef<number>;
610
+ perPage: Ref<number>;
611
+ page: Ref<number>;
612
+ totalPages: ComputedRef<number>;
613
+ /** Current page items. Writable for optimistic edits; resets on navigation. */
614
+ items: Ref<T[]>;
615
+ };
616
+
617
+ const toContextKey = (key: string): string => `${key}:paginatedResponse`;
618
+
619
+ export const usePaginatedResponseContext = <T = object>(
620
+ dataKey: string
621
+ ): PaginatedResponseContext<T> => {
622
+ const existing = injectLocal<PaginatedResponseContext<T> | null>(
623
+ toContextKey(dataKey),
624
+ null
625
+ );
626
+ if (isNotNil(existing)) return existing;
627
+
628
+ // `usePage<TPageProps extends PageProps = PageProps>()` requires the
629
+ // generic to satisfy `PageProps` — an app that augments `PageProps` via
630
+ // declaration merging (the mainstream Inertia convention: `declare module
631
+ // '@inertiajs/core' { interface PageProps { auth: Auth; flash: Flash } }`)
632
+ // makes that constraint require `auth`/`flash`, which a bare
633
+ // `{ [key: string]: PaginatedResponse<T> }` doesn't have and fails
634
+ // `TS2344`. Intersecting with `PageProps` keeps the constraint satisfied
635
+ // either way, augmented or not.
636
+ const paginated = computed(
637
+ () =>
638
+ usePage<PageProps & Record<string, PaginatedResponse<T>>>().props[dataKey]
639
+ );
640
+
641
+ const items = ref<T[]>(paginated.value.data ?? []) as Ref<T[]>;
642
+ const totalItems = computed(() => paginated.value.meta.total ?? 0);
643
+ const totalPages = computed(() => paginated.value.meta.last_page ?? 0);
644
+
645
+ const perPage = useRouteQuery(
646
+ 'per_page',
647
+ `${paginated.value.meta.per_page ?? 10}`,
648
+ {
649
+ transform: Number,
650
+ }
651
+ );
652
+ const page = useRouteQuery(
653
+ 'page',
654
+ `${paginated.value.meta.current_page ?? 1}`,
655
+ {
656
+ transform: Number,
657
+ }
658
+ );
659
+
660
+ const context: PaginatedResponseContext<T> = {
661
+ totalItems,
662
+ perPage,
663
+ page,
664
+ totalPages,
665
+ items,
666
+ };
667
+
668
+ // Re-sync from the fresh prop after every successful visit.
669
+ const unbind = router.on('success', (event) => {
670
+ const props = event.detail.page.props as {
671
+ [key: string]: PaginatedResponse<T> | undefined;
672
+ };
673
+ const data = props[dataKey];
674
+ if (!data) return;
675
+ items.value = data.data ?? [];
676
+ page.value = data.meta?.current_page ?? 1;
677
+ perPage.value = data.meta?.per_page ?? 10;
678
+ });
679
+ onScopeDispose(unbind);
680
+
681
+ provideLocal(toContextKey(dataKey), context);
682
+
683
+ return context;
684
+ };
685
+ ```
686
+
687
+ ### useTableSelectionContext
688
+
689
+ Shared selection state by key, in server terms: `selected` and `unselected`
690
+ item lists plus the `all` flag ("select-all across pages" semantics — when
691
+ `all` is true, `selected` does **not** enumerate every row; the server
692
+ combines `all` + `unselected` instead). Bind these to `BbTable`'s
693
+ `v-model`, `v-model:unselected-items` and `v-model:select-all`.
694
+
695
+ ```ts
696
+ // src/composables/useTableSelectionContext.ts
697
+ import { isNotNil } from '@/utils';
698
+ import { injectLocal, provideLocal } from '@vueuse/core';
699
+ import { ref, type Ref } from 'vue';
700
+
701
+ export type TableSelectionContext<U> = {
702
+ /** The select-all checkbox state. Does not enumerate items. */
703
+ all: Ref<boolean>;
704
+ /** Items manually selected. NOT the full list when `all` is true. */
705
+ selected: Ref<U[]>;
706
+ /** Items manually unselected while `all` is true. */
707
+ unselected: Ref<U[]>;
708
+ resetSelection: () => void;
709
+ };
710
+
711
+ const toSelectionKey = (key: string): string => `${key}:selection`;
712
+
713
+ /** Bare selection state, no provide/inject — for callers that own sharing. */
714
+ export const createSelectionContext = <
715
+ U = unknown,
716
+ >(): TableSelectionContext<U> => {
717
+ const all = ref(false);
718
+ const selected = ref<U[]>([]) as Ref<U[]>;
719
+ const unselected = ref<U[]>([]) as Ref<U[]>;
720
+
721
+ const resetSelection = (): void => {
722
+ all.value = false;
723
+ selected.value = [];
724
+ unselected.value = [];
725
+ };
726
+
727
+ return { all, selected, unselected, resetSelection };
728
+ };
729
+
730
+ export const useTableSelectionContext = <U = unknown>(
731
+ key: string
732
+ ): TableSelectionContext<U> => {
733
+ const selectionKey = toSelectionKey(key);
734
+ const existing = injectLocal<TableSelectionContext<U> | null>(
735
+ selectionKey,
736
+ null
737
+ );
738
+ if (isNotNil(existing)) return existing;
739
+
740
+ const context = createSelectionContext<U>();
741
+ provideLocal(selectionKey, context);
742
+ return context;
743
+ };
744
+ ```
745
+
746
+ ### useTableContext
747
+
748
+ The composition of the two above — one keyed context carrying a listing
749
+ page's whole server-data spine: items, pagination, and selection. This is
750
+ what the [Inertia CRUD listing recipe](../recipes/inertia/records-workspace.md)
751
+ builds on.
752
+
753
+ ```ts
754
+ // src/composables/useTableContext.ts
755
+ import {
756
+ usePaginatedResponseContext,
757
+ type PaginatedResponseContext,
758
+ } from '@/composables/usePaginatedResponseContext';
759
+ import {
760
+ useTableSelectionContext,
761
+ type TableSelectionContext,
762
+ } from '@/composables/useTableSelectionContext';
763
+ import { isNotNil } from '@/utils';
764
+ import { injectLocal, provideLocal } from '@vueuse/core';
765
+
766
+ export type TableContext<T, U> = TableSelectionContext<U> &
767
+ PaginatedResponseContext<T>;
768
+
769
+ const toTableKey = (key: string): string => `${key}:table`;
770
+
771
+ export const useTableContext = <T = object, U = T>(
772
+ dataKey: string
773
+ ): TableContext<T, U> => {
774
+ const existing = injectLocal<TableContext<T, U> | null>(
775
+ toTableKey(dataKey),
776
+ null
777
+ );
778
+ if (isNotNil(existing)) return existing;
779
+
780
+ const context: TableContext<T, U> = {
781
+ ...useTableSelectionContext<U>(dataKey),
782
+ ...usePaginatedResponseContext<T>(dataKey),
783
+ };
784
+
785
+ provideLocal(toTableKey(dataKey), context);
786
+ return context;
787
+ };
788
+ ```
789
+
790
+ Gotchas:
791
+
792
+ - The key is a rendezvous string (use the page-prop name, e.g.
793
+ `'invoices'`). Like the library's table context, a typo doesn't error —
794
+ it silently creates a second, orphan context.
795
+ - Each composite context provides under a namespaced key
796
+ (`invoices:table`, `invoices:selection`, `invoices:paginatedResponse`),
797
+ so the pieces can also be joined individually.
798
+
799
+ ---
800
+
801
+ ## Forms and guards
802
+
803
+ ### usePromiseForm
804
+
805
+ Inertia's `useForm` with **promise semantics**: `post/put/patch/remove`
806
+ resolve on success and reject on validation errors, so you can `await` a
807
+ submit, chain a toast, or hand the promise to a `BbButton` `@click` /
808
+ `useConfirm` `onClick` for automatic busy states. `form` is the underlying
809
+ Inertia form — `form.errors`, `form.isDirty`, `form.reset()` all work.
810
+
811
+ **Declare the draft shape as a `type` alias, not an `interface`.** The generic
812
+ is constrained to `Record<string, FormValue>` (what Inertia can serialize), and
813
+ TypeScript gives an implicit index signature to object _type aliases_ only — an
814
+ `interface` never satisfies that constraint, however form-encodable its fields
815
+ are. The same applies to any nested shape (a line-item row, say). It is a
816
+ TypeScript quirk, not a statement about your data.
817
+
818
+ ```ts
819
+ // src/composables/usePromiseForm.ts
820
+ import { useLoading } from '@/composables/useLoading';
821
+ import {
822
+ useForm,
823
+ type InertiaForm,
824
+ type InertiaFormProps,
825
+ } from '@inertiajs/vue3';
826
+
827
+ type FormValue =
828
+ | string
829
+ | number
830
+ | boolean
831
+ | null
832
+ | File
833
+ | undefined
834
+ | FormValue[]
835
+ | { [key: string]: FormValue };
836
+
837
+ type Options = Parameters<InertiaFormProps<object>['get']>[1];
838
+
839
+ export const usePromiseForm = <T extends Record<string, FormValue>>(
840
+ initialData: T
841
+ ) => {
842
+ // @ts-expect-error - typed as InertiaForm<T> to avoid fighting the type system
843
+ const form = useForm(initialData) as InertiaForm<T>;
844
+
845
+ const { fn: submit, loading: isSubmitting } = useLoading(
846
+ (
847
+ url: string,
848
+ method: 'get' | 'post' | 'put' | 'patch' | 'delete' = 'post',
849
+ options: Options = {}
850
+ ): Promise<void> =>
851
+ new Promise<void>((resolve, reject) => {
852
+ const { onFinish: userOnFinish, ...visitOptions } = options;
853
+
854
+ form[method](url, {
855
+ ...visitOptions,
856
+ onSuccess: () => resolve(),
857
+ onError: (errors: unknown) => reject(errors),
858
+ onFinish: (
859
+ ...args: Parameters<NonNullable<NonNullable<Options>['onFinish']>>
860
+ ) => {
861
+ userOnFinish?.(...args);
862
+ // A non-Inertia response (e.g. a 423 entity lock or a 419
863
+ // CSRF mismatch) fires neither onSuccess nor onError, only
864
+ // onFinish. Settle here so isSubmitting is released instead
865
+ // of hanging the form forever. No-op once already settled.
866
+ reject(new Error('Inertia visit did not return a valid response.'));
867
+ },
868
+ });
869
+ })
870
+ );
871
+
872
+ const post = (url: string, options?: Options) => submit(url, 'post', options);
873
+ const put = (url: string, options?: Options) => submit(url, 'put', options);
874
+ const patch = (url: string, options?: Options) =>
875
+ submit(url, 'patch', options);
876
+ const remove = (url: string, options?: Options) =>
877
+ submit(url, 'delete', options);
878
+
879
+ return { form, submit, post, put, patch, remove, isSubmitting };
880
+ };
881
+ ```
882
+
883
+ > **`post`/`put`/`patch`/`remove` reject on validation errors — never call
884
+ > them fire-and-forget.** A 422 (or the non-Inertia-response fallback above)
885
+ > rejects the promise, and Vue does not surface a rejected promise you didn't
886
+ > await or `.catch()` — it becomes a silent `Uncaught (in promise)` in the
887
+ > console instead of a message the user sees. This bites hardest on the
888
+ > failure paths you're least likely to test by hand: a wrong TOTP code, a
889
+ > rate-limited or unknown email, an expired invite token. Always either
890
+ > `await` inside a `try/catch` (see `sendInvites`/`createProject` in the
891
+ > [Onboarding](../recipes/inertia/onboarding.md) recipe), or chain
892
+ > `.catch(() => {})` when `form.errors` already renders the failure and you
893
+ > have nothing else to do on rejection. Every call site in this guide and its
894
+ > recipes follows one of those two shapes — copy them, not a bare `post(...)`.
895
+
896
+ ### useHasChanged
897
+
898
+ Deep dirty-checking against a snapshot baseline — for edit screens whose
899
+ state is not a single Inertia form (multiple forms, ad-hoc refs). For a
900
+ single `usePromiseForm`, prefer the built-in `form.isDirty`.
901
+
902
+ ```ts
903
+ // src/composables/useHasChanged.ts
904
+ import { isEqual } from '@/utils';
905
+ import { computed, ref, toValue, type WatchSource } from 'vue';
906
+
907
+ export function useHasChanged<T extends WatchSource<unknown>[]>(
908
+ dependencies: T
909
+ ) {
910
+ // Deep-copied baselines avoid reference entanglement with live state.
911
+ const baselineValues = ref<unknown[]>(
912
+ dependencies.map((dep) => structuredClone(toValue(dep)))
913
+ );
914
+
915
+ /** Re-baseline (call after a successful save). */
916
+ const takeSnapshot = (): void => {
917
+ baselineValues.value = dependencies.map((dep) =>
918
+ structuredClone(toValue(dep))
919
+ );
920
+ };
921
+
922
+ const hasChanged = computed(() =>
923
+ dependencies.some(
924
+ (dep, index) =>
925
+ !isEqual(structuredClone(toValue(dep)), baselineValues.value[index])
926
+ )
927
+ );
928
+
929
+ return { hasChanged, takeSnapshot };
930
+ }
931
+ ```
932
+
933
+ ### useConfirmOnRouteLeave
934
+
935
+ A dirty-state navigation guard: intercepts Inertia visits and asks through
936
+ [`useConfirm`](../composables/useConfirm.md) before leaving. Requires
937
+ `<BbConfirm />` mounted in the app root. Server redirects after a
938
+ whitelisted action carry the `X-Whitelisted-Action` header so a saving
939
+ visit's redirect is never blocked by its own guard.
940
+
941
+ ```ts
942
+ // src/composables/useConfirmOnRouteLeave.ts
943
+ import { router } from '@inertiajs/vue3';
944
+ import { useConfirm } from 'bitboss-ui';
945
+ import { onUnmounted, toValue, type MaybeRefOrGetter } from 'vue';
946
+
947
+ type Visit = {
948
+ url: URL;
949
+ headers?: Record<string, string>;
950
+ [key: string]: unknown;
951
+ };
952
+
953
+ type Options = {
954
+ /** URLs that bypass the dialog (e.g. the form's own submit target). */
955
+ whitelist?: MaybeRefOrGetter<string[]>;
956
+ /** Disable the guard (bind to `!hasChanged` / `!form.isDirty`). */
957
+ disabled?: MaybeRefOrGetter<boolean>;
958
+ /** Runs synchronously before the dialog; return false to allow the visit. */
959
+ onBefore?: (visit: Visit) => unknown;
960
+ /** Runs after the user confirms leaving. */
961
+ onLeave?: (visit: Visit) => unknown;
962
+ title?: string;
963
+ text?: string;
964
+ };
965
+
966
+ const normalizeUrl = (value: string | URL) => {
967
+ const url = new URL(value.toString(), window.location.origin);
968
+ return url.pathname.replace(/\/+$/, '') || '/';
969
+ };
970
+
971
+ const getHeaderValue = (
972
+ headers: Record<string, string> | undefined,
973
+ headerName: string
974
+ ) => {
975
+ if (!headers) return undefined;
976
+ const normalized = headerName.toLowerCase();
977
+ const matched = Object.keys(headers).find(
978
+ (key) => key.toLowerCase() === normalized
979
+ );
980
+ return matched ? headers[matched] : undefined;
981
+ };
982
+
983
+ export const WHITELIST_HEADER = 'X-Whitelisted-Action';
984
+
985
+ export const useConfirmOnRouteLeave = ({
986
+ whitelist = [],
987
+ disabled = false,
988
+ onBefore = () => true,
989
+ onLeave = () => true,
990
+ title = 'Unsaved changes',
991
+ text = 'You have unsaved changes. Leave without saving?',
992
+ }: Options = {}) => {
993
+ // Captured in setup so the built-in dialog is owned by the guarded page:
994
+ // if the page unmounts anyway, the dialog dismisses itself quietly.
995
+ const { confirm } = useConfirm();
996
+ let bypassNextVisit = false;
997
+
998
+ const unbind = router.on('before', (event) => {
999
+ const visit = event.detail.visit as Visit;
1000
+
1001
+ if (bypassNextVisit) {
1002
+ bypassNextVisit = false;
1003
+ return;
1004
+ }
1005
+
1006
+ if (toValue(disabled)) return;
1007
+ if (getHeaderValue(visit.headers, WHITELIST_HEADER) === '1') return;
1008
+
1009
+ const nextPath = normalizeUrl(visit.url.href);
1010
+ if (nextPath === normalizeUrl(window.location.href)) return;
1011
+ if (toValue(whitelist).map(normalizeUrl).includes(nextPath)) return;
1012
+
1013
+ if (onBefore(visit) === false) return false;
1014
+ event.preventDefault();
1015
+
1016
+ void (async () => {
1017
+ const confirmed = await confirm({
1018
+ variant: 'destructive',
1019
+ title,
1020
+ text,
1021
+ yes: 'Discard changes',
1022
+ no: 'Keep editing',
1023
+ });
1024
+ if (!confirmed) return;
1025
+
1026
+ await onLeave(visit);
1027
+ bypassNextVisit = true;
1028
+ router.visit(visit.url, {
1029
+ ...(visit as Parameters<typeof router.visit>[1]),
1030
+ headers: { ...(visit.headers ?? {}), [WHITELIST_HEADER]: '1' },
1031
+ });
1032
+ })();
1033
+ });
1034
+
1035
+ onUnmounted(unbind);
1036
+ };
1037
+ ```
1038
+
1039
+ ---
1040
+
1041
+ ## Async utilities
1042
+
1043
+ ### useLoading
1044
+
1045
+ Wraps any async function with a concurrent-safe `loading` flag (a counter,
1046
+ so overlapping calls don't flicker it off early).
1047
+
1048
+ ```ts
1049
+ // src/composables/useLoading.ts
1050
+ import { computed, ref } from 'vue';
1051
+
1052
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1053
+ export const useLoading = <T extends (...args: any[]) => any>(fn: T) => {
1054
+ const counter = ref(0);
1055
+ const loading = computed(() => counter.value > 0);
1056
+
1057
+ const fnWithLoading = async (...args: Parameters<T>) => {
1058
+ counter.value++;
1059
+ try {
1060
+ return await fn(...args);
1061
+ } finally {
1062
+ counter.value--;
1063
+ }
1064
+ };
1065
+
1066
+ return { loading, fn: fnWithLoading };
1067
+ };
1068
+ ```
1069
+
1070
+ ### useAsyncFn
1071
+
1072
+ A full async-state engine for **non-Inertia** requests (JSON endpoints,
1073
+ exports): `data` / `error` / `loading` / `aborted` state, an `AbortSignal`
1074
+ per run, auto-abort of the previous run on re-execute, and abort on
1075
+ unmount.
1076
+
1077
+ ```ts
1078
+ // src/composables/useAsyncFn.ts
1079
+ import { isPlainObject } from '@/utils';
1080
+ import {
1081
+ onBeforeMount,
1082
+ onBeforeUnmount,
1083
+ shallowRef,
1084
+ type ShallowRef,
1085
+ } from 'vue';
1086
+
1087
+ type BaseOptions = {
1088
+ /** Run on mount. Default true. */
1089
+ immediate?: boolean;
1090
+ /** Swallow AbortError instead of exposing it on `error`. Default true. */
1091
+ abortSilently?: boolean;
1092
+ };
1093
+
1094
+ type AsyncFnParams = {
1095
+ setError: (err: string) => void;
1096
+ setErrorData: (err: Record<string, unknown>) => void;
1097
+ signal: AbortSignal;
1098
+ };
1099
+
1100
+ type AsyncFnReturn<D> = {
1101
+ data: ShallowRef<D>;
1102
+ error: ShallowRef<Error | null>;
1103
+ errorData: ShallowRef<Record<string, unknown> | null>;
1104
+ loading: ShallowRef<boolean>;
1105
+ aborted: ShallowRef<boolean>;
1106
+ execute: () => Promise<D>;
1107
+ stop: () => void;
1108
+ };
1109
+
1110
+ type AsyncFn<T> = (params: AsyncFnParams) => Promise<T> | T;
1111
+
1112
+ export function useAsyncFn<T>(
1113
+ fn: AsyncFn<T>,
1114
+ options: BaseOptions & { defaultValue: T }
1115
+ ): AsyncFnReturn<T>;
1116
+ export function useAsyncFn<T>(
1117
+ fn: AsyncFn<T>,
1118
+ options?: BaseOptions & { defaultValue?: undefined }
1119
+ ): AsyncFnReturn<T | null>;
1120
+ export function useAsyncFn<T>(
1121
+ fn: AsyncFn<T>,
1122
+ {
1123
+ immediate = true,
1124
+ abortSilently = true,
1125
+ defaultValue,
1126
+ }: BaseOptions & { defaultValue?: T } = {}
1127
+ ) {
1128
+ const data = shallowRef(defaultValue ?? null);
1129
+ const error = shallowRef<Error | null>(null);
1130
+ const errorData = shallowRef<Record<string, unknown> | null>(null);
1131
+ const loading = shallowRef(false);
1132
+ const aborted = shallowRef(false);
1133
+ let abortController: AbortController | null = null;
1134
+
1135
+ const setError = (err: string) => {
1136
+ error.value = new Error(err);
1137
+ };
1138
+ const setErrorData = (err: Record<string, unknown>) => {
1139
+ errorData.value = err;
1140
+ };
1141
+
1142
+ const isAbortError = (err: unknown): boolean =>
1143
+ err instanceof DOMException && err.name === 'AbortError';
1144
+
1145
+ const execute = async () => {
1146
+ abortController?.abort();
1147
+ abortController = new AbortController();
1148
+ loading.value = true;
1149
+ aborted.value = false;
1150
+ error.value = null;
1151
+ errorData.value = null;
1152
+
1153
+ try {
1154
+ data.value = await fn({
1155
+ setError,
1156
+ setErrorData,
1157
+ signal: abortController.signal,
1158
+ });
1159
+ } catch (err) {
1160
+ if (isAbortError(err)) {
1161
+ aborted.value = true;
1162
+ if (!abortSilently) error.value = err as Error;
1163
+ } else if (err instanceof Error) {
1164
+ error.value = err;
1165
+ } else if (typeof err === 'string') {
1166
+ error.value = new Error(err);
1167
+ } else if (isPlainObject(err)) {
1168
+ // Laravel validation bag: surface the first message.
1169
+ const firstKey = Object.keys(err)[0];
1170
+ error.value = new Error(String(err[firstKey]));
1171
+ }
1172
+ } finally {
1173
+ loading.value = false;
1174
+ }
1175
+
1176
+ return data.value;
1177
+ };
1178
+
1179
+ if (immediate) onBeforeMount(execute);
1180
+
1181
+ const stop = () => {
1182
+ abortController?.abort();
1183
+ abortController = null;
1184
+ };
1185
+ onBeforeUnmount(stop);
1186
+
1187
+ return { data, error, errorData, loading, aborted, execute, stop };
1188
+ }
1189
+ ```
1190
+
1191
+ ### useResourceContext
1192
+
1193
+ "Given an id, keep its resource loaded": re-fetches whenever the id
1194
+ changes, resets to `null` when the id clears, exposes `loading` and
1195
+ `refresh()`. The natural engine for a detail sidebar or peek panel — feed
1196
+ it the highlighted row's id.
1197
+
1198
+ ```ts
1199
+ // src/composables/useResourceContext.ts
1200
+ import { useLoading } from '@/composables/useLoading';
1201
+ import { noop } from '@/utils';
1202
+ import { ref, toValue, watch, type MaybeRefOrGetter, type Ref } from 'vue';
1203
+
1204
+ type UseResourceContextOptions<T, ID> = {
1205
+ immediate?: boolean;
1206
+ disabled?: MaybeRefOrGetter<boolean>;
1207
+ onReset?: () => void | Promise<void>;
1208
+ onSuccess?: (data: T, resourceId: ID) => void | Promise<void>;
1209
+ onError?: (error: unknown, resourceId: ID) => void | Promise<void>;
1210
+ onFinish?: (resourceId: ID) => void | Promise<void>;
1211
+ };
1212
+
1213
+ export function useResourceContext<T, ID = string>(
1214
+ id: MaybeRefOrGetter<ID | null | undefined>,
1215
+ fn: (id: ID) => Promise<T>,
1216
+ options: UseResourceContextOptions<T, ID> = {}
1217
+ ) {
1218
+ const data = ref<T | null>(null) as Ref<T | null>;
1219
+ const {
1220
+ immediate = true,
1221
+ disabled = false,
1222
+ onSuccess = noop,
1223
+ onError = (error: unknown) => {
1224
+ console.error('Failed to fetch resource:', error);
1225
+ },
1226
+ onReset = noop,
1227
+ onFinish = noop,
1228
+ } = options;
1229
+
1230
+ const { loading, fn: fetch } = useLoading((resourceId: ID) => fn(resourceId));
1231
+
1232
+ const load = async (resourceId: ID) => {
1233
+ try {
1234
+ const result = await fetch(resourceId);
1235
+ data.value = result;
1236
+ await onSuccess(result, resourceId);
1237
+ } catch (error) {
1238
+ data.value = null;
1239
+ await onError(error, resourceId);
1240
+ } finally {
1241
+ await onFinish(resourceId);
1242
+ }
1243
+ };
1244
+
1245
+ watch(
1246
+ () => ({ resourceId: toValue(id), isDisabled: toValue(disabled) }),
1247
+ async ({ resourceId, isDisabled }) => {
1248
+ if (!resourceId) {
1249
+ data.value = null;
1250
+ await onReset();
1251
+ return;
1252
+ }
1253
+ // Keep already-loaded data while disabled.
1254
+ if (isDisabled) return;
1255
+ await load(resourceId as ID);
1256
+ },
1257
+ { immediate }
1258
+ );
1259
+
1260
+ const refresh = async () => {
1261
+ const currentId = toValue(id);
1262
+ if (toValue(disabled) || !currentId) return;
1263
+ await load(currentId as ID);
1264
+ };
1265
+
1266
+ return { data, loading, refresh };
1267
+ }
1268
+ ```
1269
+
1270
+ Gotchas:
1271
+
1272
+ - **`data === null` means EITHER "not loaded yet" OR "failed"** — the default
1273
+ `onError` only logs to the console and resets `data` to `null`, which is
1274
+ exactly what an unloaded resource looks like. If the fetcher's loading
1275
+ branch renders `<BbSpinner />` while `data` is `null`, a permanent failure
1276
+ (a 403/404 the id is reachable for) renders a permanent spinner. Pass your
1277
+ own `onError` (a local `ref<boolean>` a peek can branch on, as the
1278
+ [Records Workspace](../recipes/inertia/records-workspace.md) recipe does)
1279
+ when the fetcher can fail.
1280
+ - **Check `res.ok` in the fetcher.** `fetch(...).then((res) => res.json())`
1281
+ never rejects on a non-2xx response — a 403/404 body still parses as JSON
1282
+ (or throws inside `.json()`, which is _also_ swallowed by `useResourceContext`
1283
+ the same way). Throw when `!res.ok` so `onError` actually fires.
1284
+
1285
+ ## UI utilities
1286
+
1287
+ ### useDeleteCmd
1288
+
1289
+ Fires a callback on Delete/Backspace — unless an input, textarea, select or
1290
+ contenteditable is focused. Pairs with table selection: select rows, hit
1291
+ Delete, dispatch the same confirm-guarded bulk action as the button.
1292
+
1293
+ ```ts
1294
+ // src/composables/useDeleteCmd.ts
1295
+ import { useMagicKeys, whenever } from '@vueuse/core';
1296
+ import { toValue, type MaybeRefOrGetter } from 'vue';
1297
+
1298
+ export type UseDeleteCmdOptions = {
1299
+ disabled?: MaybeRefOrGetter<boolean>;
1300
+ };
1301
+
1302
+ const isInteractiveElementFocused = (): boolean => {
1303
+ const active = document.activeElement;
1304
+ if (!active) return false;
1305
+ const tag = active.tagName.toLowerCase();
1306
+ if (tag === 'input' || tag === 'textarea' || tag === 'select') return true;
1307
+ return active.getAttribute('contenteditable') === 'true';
1308
+ };
1309
+
1310
+ export function useDeleteCmd(
1311
+ onDelete: () => void,
1312
+ options: UseDeleteCmdOptions = {}
1313
+ ) {
1314
+ const keys = useMagicKeys();
1315
+
1316
+ const handleDelete = () => {
1317
+ if (isInteractiveElementFocused()) return;
1318
+ if (!toValue(options.disabled)) onDelete();
1319
+ };
1320
+
1321
+ whenever(keys['delete'], handleDelete);
1322
+ whenever(keys['backspace'], handleDelete);
1323
+ }
1324
+ ```
1325
+
1326
+ ### useScreenSizes
1327
+
1328
+ Shared reactive breakpoints aligned with Tailwind `md`/`lg` — one window
1329
+ listener for the whole app via `createSharedComposable`.
1330
+
1331
+ ```ts
1332
+ // src/composables/useScreenSizes.ts
1333
+ import { useWindowSize } from '@vueuse/core';
1334
+ import { createSharedComposable } from '@vueuse/shared';
1335
+ import { computed } from 'vue';
1336
+
1337
+ /** Tailwind md breakpoint (px). Mobile when width < 768. */
1338
+ export const SCREEN_BREAKPOINT_MD = 768;
1339
+ /** Tailwind lg breakpoint (px). Tablet when 768 <= width < 1024. */
1340
+ export const SCREEN_BREAKPOINT_LG = 1024;
1341
+
1342
+ const useScreenSizesImpl = () => {
1343
+ const { width } = useWindowSize();
1344
+
1345
+ const isMobile = computed(() => width.value < SCREEN_BREAKPOINT_MD);
1346
+ const isTablet = computed(
1347
+ () =>
1348
+ width.value >= SCREEN_BREAKPOINT_MD && width.value < SCREEN_BREAKPOINT_LG
1349
+ );
1350
+ const isDesktop = computed(() => width.value >= SCREEN_BREAKPOINT_LG);
1351
+
1352
+ return { width, isMobile, isTablet, isDesktop };
1353
+ };
1354
+
1355
+ export const useScreenSizes = createSharedComposable(useScreenSizesImpl);
1356
+ ```
1357
+
1358
+ ### useIndexById
1359
+
1360
+ Index an item list by key for O(1) lookups — e.g. mapping the ids in a
1361
+ selection context back to full rows for a bulk-action payload.
1362
+
1363
+ ```ts
1364
+ // src/composables/useIndexById.ts
1365
+ import { computed, unref, type MaybeRef } from 'vue';
1366
+
1367
+ type Options<TItem> = {
1368
+ items: MaybeRef<readonly TItem[]>;
1369
+ /** The item property holding the id (e.g. 'id'). */
1370
+ key: keyof TItem & string;
1371
+ };
1372
+
1373
+ export const useIndexById = <TItem>({ items, key }: Options<TItem>) => {
1374
+ const data = computed<Record<string, TItem>>(() => {
1375
+ const map: Record<string, TItem> = {};
1376
+ for (const item of unref(items)) {
1377
+ map[String(item[key])] = item;
1378
+ }
1379
+ return map;
1380
+ });
1381
+
1382
+ const get = (id: string | number): TItem | undefined =>
1383
+ data.value[String(id)];
1384
+
1385
+ return { data, get };
1386
+ };
1387
+ ```
1388
+
1389
+ ### useUntil
1390
+
1391
+ A ref that flips once, the first time a condition becomes true, then stops
1392
+ watching — for one-shot reveals ("has ever loaded", onboarding hints).
1393
+
1394
+ ```ts
1395
+ // src/composables/useUntil.ts
1396
+ import { noop } from '@/utils';
1397
+ import { ref, toValue, watch, type MaybeRefOrGetter } from 'vue';
1398
+
1399
+ type Options<T, U> = {
1400
+ initialValue?: T;
1401
+ nextValue?: U;
1402
+ onChange?: VoidFunction;
1403
+ };
1404
+
1405
+ export const useUntil = <T = boolean, U = boolean>(
1406
+ condition: MaybeRefOrGetter<boolean>,
1407
+ {
1408
+ initialValue = false as T,
1409
+ nextValue = true as U,
1410
+ onChange = noop,
1411
+ }: Options<T, U> = {}
1412
+ ) => {
1413
+ const value = ref<T | U>(initialValue);
1414
+
1415
+ const stopWatching = watch(
1416
+ () => toValue(condition),
1417
+ (met) => {
1418
+ if (met) {
1419
+ onChange();
1420
+ value.value = nextValue;
1421
+ stopWatching();
1422
+ }
1423
+ }
1424
+ );
1425
+
1426
+ return value;
1427
+ };
1428
+ ```
1429
+
1430
+ ---
1431
+
1432
+ ## Related
1433
+
1434
+ - [Recipe: Records Workspace (Inertia)](../recipes/inertia/records-workspace.md) —
1435
+ these helpers assembled into a full page.
1436
+ - [Recipe: Record Form (Inertia)](../recipes/inertia/record-form.md) —
1437
+ `usePromiseForm` + `useConfirmOnRouteLeave` in practice.
1438
+ - [Page Shell](./page-shell.md) and
1439
+ [Floating Bottom Panel](./floating-bottom-panel.md) — the app-side layout
1440
+ components these pages sit in.
1441
+ - [useBbTableContext](../composables/useBbTableContext.md) — the library's
1442
+ by-id context for table _widget_ state; complements, not replaces, the
1443
+ keyed data contexts here.