bitboss-ui 2.1.134 → 3.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1358) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +244 -21
  3. package/bin/bitboss-ui-mcp.mjs +557 -0
  4. package/bin/bitboss-ui.mjs +626 -0
  5. package/dist/ai/BbAccordion.md +522 -113
  6. package/dist/ai/BbAlert.md +377 -197
  7. package/dist/ai/BbAsterisk.md +46 -0
  8. package/dist/ai/BbAvatar.md +454 -178
  9. package/dist/ai/BbBadge.md +695 -225
  10. package/dist/ai/BbBadgeButton.md +54 -0
  11. package/dist/ai/BbBaseButton.md +489 -0
  12. package/dist/ai/BbBaseCheckbox.md +49 -0
  13. package/dist/ai/BbBaseCheckboxGroup.md +64 -0
  14. package/dist/ai/BbBaseCheckboxIcon.md +174 -0
  15. package/dist/ai/BbBaseColorInput.md +64 -0
  16. package/dist/ai/BbBaseColorPalette.md +39 -0
  17. package/dist/ai/BbBaseDatePicker.md +42 -0
  18. package/dist/ai/BbBaseDatePickerInput.md +73 -0
  19. package/dist/ai/BbBaseInputContainer.md +48 -0
  20. package/dist/ai/BbBaseNumberInput.md +71 -0
  21. package/dist/ai/BbBaseRadio.md +46 -0
  22. package/dist/ai/BbBaseRadioGroup.md +63 -0
  23. package/dist/ai/BbBaseRadioIcon.md +187 -0
  24. package/dist/ai/BbBaseRating.md +51 -0
  25. package/dist/ai/BbBaseSelect.md +88 -0
  26. package/dist/ai/BbBaseSlider.md +56 -0
  27. package/dist/ai/BbBaseSwitch.md +49 -0
  28. package/dist/ai/BbBaseSwitchGroup.md +64 -0
  29. package/dist/ai/BbBaseSwitchIcon.md +184 -0
  30. package/dist/ai/BbBaseTag.md +68 -0
  31. package/dist/ai/BbBaseTextInput.md +75 -0
  32. package/dist/ai/BbBaseTextarea.md +62 -0
  33. package/dist/ai/BbBaseTimePickerInput.md +62 -0
  34. package/dist/ai/BbBreadcrumbs.md +542 -503
  35. package/dist/ai/BbButton.md +767 -636
  36. package/dist/ai/BbCheckbox.md +572 -254
  37. package/dist/ai/BbCheckboxGroup.md +561 -361
  38. package/dist/ai/BbCollapsible.md +419 -103
  39. package/dist/ai/BbColorInput.md +529 -323
  40. package/dist/ai/BbColorPalette.md +565 -330
  41. package/dist/ai/BbConfirm.md +612 -136
  42. package/dist/ai/BbConfirmPortal.md +28 -0
  43. package/dist/ai/BbDatePicker.md +244 -0
  44. package/dist/ai/BbDatePickerInput.md +706 -388
  45. package/dist/ai/BbDialog.md +770 -99
  46. package/dist/ai/BbDropdown.md +1054 -763
  47. package/dist/ai/BbDropdownButton.md +511 -615
  48. package/dist/ai/BbDropdownGroup.md +34 -0
  49. package/dist/ai/BbDropzone.md +1148 -436
  50. package/dist/ai/BbForm.md +239 -0
  51. package/dist/ai/BbIcon.md +379 -212
  52. package/dist/ai/BbIndicator.md +283 -0
  53. package/dist/ai/BbNumberInput.md +713 -355
  54. package/dist/ai/BbOffCanvas.md +875 -498
  55. package/dist/ai/BbPagination.md +483 -535
  56. package/dist/ai/BbPopover.md +583 -546
  57. package/dist/ai/BbProgress.md +456 -69
  58. package/dist/ai/BbRadio.md +343 -229
  59. package/dist/ai/BbRadioGroup.md +426 -353
  60. package/dist/ai/BbRating.md +361 -226
  61. package/dist/ai/BbSelect.md +1380 -536
  62. package/dist/ai/BbSelectPopover.md +1240 -1579
  63. package/dist/ai/BbSlider.md +478 -257
  64. package/dist/ai/BbSmoothHeight.md +472 -139
  65. package/dist/ai/BbSpinner.md +718 -131
  66. package/dist/ai/BbSwitch.md +549 -119
  67. package/dist/ai/BbSwitchGroup.md +503 -214
  68. package/dist/ai/BbTable.md +1956 -2358
  69. package/dist/ai/BbTabs.md +1113 -0
  70. package/dist/ai/BbTabsList.md +29 -0
  71. package/dist/ai/BbTabsPanes.md +27 -0
  72. package/dist/ai/BbTabsRoot.md +57 -0
  73. package/dist/ai/BbTag.md +393 -292
  74. package/dist/ai/BbTextInput.md +852 -333
  75. package/dist/ai/BbTextarea.md +836 -255
  76. package/dist/ai/BbTimePicker.md +231 -0
  77. package/dist/ai/BbTimePickerInput.md +196 -0
  78. package/dist/ai/BbToast.md +624 -196
  79. package/dist/ai/BbToastPortal.md +28 -0
  80. package/dist/ai/BbTooltip.md +443 -346
  81. package/dist/ai/BbTree.md +984 -235
  82. package/dist/ai/ChipsBox.md +27 -199
  83. package/dist/ai/ClearableButton.md +21 -55
  84. package/dist/ai/CommaBox.md +25 -200
  85. package/dist/ai/CommonInputWrapper.md +42 -0
  86. package/dist/ai/CommonPopover.md +30 -510
  87. package/dist/ai/ErrorIcon.md +19 -56
  88. package/dist/ai/FlatListBox.md +35 -379
  89. package/dist/ai/GroupedListBox.md +37 -535
  90. package/dist/ai/GuidesComponent.md +21 -0
  91. package/dist/ai/ListBox.md +38 -231
  92. package/dist/ai/OptionsContainer.md +34 -253
  93. package/dist/ai/WarningIcon.md +21 -0
  94. package/dist/ai/components.json +15883 -0
  95. package/dist/ai/composables/useBbConfig.md +80 -0
  96. package/dist/ai/composables/useBbFormContext.md +110 -0
  97. package/dist/ai/composables/useBbTableContext.md +164 -0
  98. package/dist/ai/composables/useBbTabsContext.md +118 -0
  99. package/dist/ai/composables/useBroadcastChannelInstance.md +97 -0
  100. package/dist/ai/composables/useConfirm.md +306 -0
  101. package/dist/ai/composables/useCountdown.md +84 -0
  102. package/dist/ai/composables/useId.md +60 -0
  103. package/dist/ai/composables/useMobile.md +85 -0
  104. package/dist/ai/composables/useToast.md +230 -0
  105. package/dist/ai/guides/agent-contract.md +108 -0
  106. package/dist/ai/guides/ai-router.md +111 -0
  107. package/dist/ai/guides/app-layout.md +295 -0
  108. package/dist/ai/guides/coherence-playbook.md +136 -0
  109. package/dist/ai/guides/component-picker.md +195 -0
  110. package/dist/ai/guides/design-language.md +461 -0
  111. package/dist/ai/guides/design-tokens.md +424 -0
  112. package/dist/ai/guides/fetch-items-playbook.md +161 -0
  113. package/dist/ai/guides/floating-bottom-panel.md +191 -0
  114. package/dist/ai/guides/icons-policy.md +257 -0
  115. package/dist/ai/guides/inertia-helpers.md +1394 -0
  116. package/dist/ai/guides/inline-edit-playbook.md +258 -0
  117. package/dist/ai/guides/installation-and-plugin-setup.md +377 -0
  118. package/dist/ai/guides/migration/components/bb-alert.md +37 -0
  119. package/dist/ai/guides/migration/components/bb-avatar.md +24 -0
  120. package/dist/ai/guides/migration/components/bb-badge.md +110 -0
  121. package/dist/ai/guides/migration/components/bb-breadcrumbs.md +26 -0
  122. package/dist/ai/guides/migration/components/bb-button.md +55 -0
  123. package/dist/ai/guides/migration/components/bb-checkbox-group.md +54 -0
  124. package/dist/ai/guides/migration/components/bb-checkbox.md +45 -0
  125. package/dist/ai/guides/migration/components/bb-chip.md +35 -0
  126. package/dist/ai/guides/migration/components/bb-collapsible.md +26 -0
  127. package/dist/ai/guides/migration/components/bb-color-input.md +23 -0
  128. package/dist/ai/guides/migration/components/bb-color-palette.md +31 -0
  129. package/dist/ai/guides/migration/components/bb-date-picker-input.md +84 -0
  130. package/dist/ai/guides/migration/components/bb-dialog.md +46 -0
  131. package/dist/ai/guides/migration/components/bb-dropdown-button.md +31 -0
  132. package/dist/ai/guides/migration/components/bb-dropdown.md +36 -0
  133. package/dist/ai/guides/migration/components/bb-dropzone.md +27 -0
  134. package/dist/ai/guides/migration/components/bb-icon.md +27 -0
  135. package/dist/ai/guides/migration/components/bb-off-canvas.md +25 -0
  136. package/dist/ai/guides/migration/components/bb-offcanvas.md +54 -0
  137. package/dist/ai/guides/migration/components/bb-pagination.md +24 -0
  138. package/dist/ai/guides/migration/components/bb-popover.md +52 -0
  139. package/dist/ai/guides/migration/components/bb-rating.md +24 -0
  140. package/dist/ai/guides/migration/components/bb-select-popover.md +58 -0
  141. package/dist/ai/guides/migration/components/bb-select.md +68 -0
  142. package/dist/ai/guides/migration/components/bb-slider.md +25 -0
  143. package/dist/ai/guides/migration/components/bb-smooth-height.md +45 -0
  144. package/dist/ai/guides/migration/components/bb-spinner.md +23 -0
  145. package/dist/ai/guides/migration/components/bb-table.md +66 -0
  146. package/dist/ai/guides/migration/components/bb-tabs.md +47 -0
  147. package/dist/ai/guides/migration/components/bb-tag.md +29 -0
  148. package/dist/ai/guides/migration/components/bb-text-input.md +37 -0
  149. package/dist/ai/guides/migration/components/bb-toast.md +47 -0
  150. package/dist/ai/guides/migration/components/bb-tooltip.md +34 -0
  151. package/dist/ai/guides/migration/components/bb-tree.md +77 -0
  152. package/dist/ai/guides/migration/components/use-confirm.md +46 -0
  153. package/dist/ai/guides/migration/v2-to-v3.md +649 -0
  154. package/dist/ai/guides/options-items-playbook.md +222 -0
  155. package/dist/ai/guides/page-shell.md +314 -0
  156. package/dist/ai/guides/validated-forms.md +177 -0
  157. package/dist/ai/index.md +156 -32
  158. package/dist/ai/recipes/inertia/approvals-inbox.md +1598 -0
  159. package/dist/ai/recipes/inertia/inline-edit-workspace.md +1733 -0
  160. package/dist/ai/recipes/inertia/onboarding.md +1765 -0
  161. package/dist/ai/recipes/inertia/ownership-atlas.md +1281 -0
  162. package/dist/ai/recipes/inertia/record-form.md +1442 -0
  163. package/dist/ai/recipes/inertia/records-workspace.md +1328 -0
  164. package/dist/ai/recipes/inertia/upload-center.md +1926 -0
  165. package/dist/ai/recipes/inertia/wizard-form.md +1477 -0
  166. package/dist/ai/recipes/nuxt/approvals-inbox.md +1561 -0
  167. package/dist/ai/recipes/nuxt/inline-edit-workspace.md +1690 -0
  168. package/dist/ai/recipes/nuxt/onboarding.md +1698 -0
  169. package/dist/ai/recipes/nuxt/record-form.md +1456 -0
  170. package/dist/ai/recipes/nuxt/records-workspace.md +1314 -0
  171. package/dist/ai/recipes/nuxt/upload-center.md +1847 -0
  172. package/dist/ai/recipes/nuxt/wizard-form.md +1486 -0
  173. package/dist/ai/recipes/vue/approvals-inbox.md +1479 -0
  174. package/dist/ai/recipes/vue/inline-edit-workspace.md +1581 -0
  175. package/dist/ai/recipes/vue/onboarding.md +1653 -0
  176. package/dist/ai/recipes/vue/record-form.md +1540 -0
  177. package/dist/ai/recipes/vue/records-workspace.md +1230 -0
  178. package/dist/ai/recipes/vue/upload-center.md +1806 -0
  179. package/dist/ai/recipes/vue/wizard-form.md +1418 -0
  180. package/dist/ai/source/BbAccordion.md +122 -0
  181. package/dist/ai/source/BbAlert.md +396 -0
  182. package/dist/ai/source/BbAsterisk.md +32 -0
  183. package/dist/ai/source/BbAvatar.md +256 -0
  184. package/dist/ai/source/BbBadge.md +560 -0
  185. package/dist/ai/source/BbBadgeButton.md +490 -0
  186. package/dist/ai/source/BbBaseButton.md +682 -0
  187. package/dist/ai/source/BbBaseCheckbox.md +459 -0
  188. package/dist/ai/source/BbBaseCheckboxGroup.md +554 -0
  189. package/dist/ai/source/BbBaseCheckboxIcon.md +201 -0
  190. package/dist/ai/source/BbBaseColorInput.md +413 -0
  191. package/dist/ai/source/BbBaseColorPalette.md +934 -0
  192. package/dist/ai/source/BbBaseDatePicker.md +1001 -0
  193. package/dist/ai/source/BbBaseDatePickerInput.md +1781 -0
  194. package/dist/ai/source/BbBaseInputContainer.md +1148 -0
  195. package/dist/ai/source/BbBaseNumberInput.md +615 -0
  196. package/dist/ai/source/BbBaseRadio.md +377 -0
  197. package/dist/ai/source/BbBaseRadioGroup.md +499 -0
  198. package/dist/ai/source/BbBaseRadioIcon.md +153 -0
  199. package/dist/ai/source/BbBaseRating.md +573 -0
  200. package/dist/ai/source/BbBaseSelect.md +895 -0
  201. package/dist/ai/source/BbBaseSlider.md +1085 -0
  202. package/dist/ai/source/BbBaseSwitch.md +246 -0
  203. package/dist/ai/source/BbBaseSwitchGroup.md +302 -0
  204. package/dist/ai/source/BbBaseSwitchIcon.md +206 -0
  205. package/dist/ai/source/BbBaseTag.md +688 -0
  206. package/dist/ai/source/BbBaseTextInput.md +511 -0
  207. package/dist/ai/source/BbBaseTextarea.md +480 -0
  208. package/dist/ai/source/BbBaseTimePickerInput.md +1013 -0
  209. package/dist/ai/source/BbBreadcrumbs.md +811 -0
  210. package/dist/ai/source/BbButton.md +990 -0
  211. package/dist/ai/source/BbCheckbox.md +319 -0
  212. package/dist/ai/source/BbCheckboxGroup.md +412 -0
  213. package/dist/ai/source/BbCollapsible.md +133 -0
  214. package/dist/ai/source/BbColorInput.md +315 -0
  215. package/dist/ai/source/BbColorPalette.md +361 -0
  216. package/dist/ai/source/BbConfirm.md +173 -0
  217. package/dist/ai/source/BbConfirmPortal.md +74 -0
  218. package/dist/ai/source/BbDatePicker.md +725 -0
  219. package/dist/ai/source/BbDatePickerInput.md +518 -0
  220. package/dist/ai/source/BbDialog.md +812 -0
  221. package/dist/ai/source/BbDropdown.md +2369 -0
  222. package/dist/ai/source/BbDropdownButton.md +313 -0
  223. package/dist/ai/source/BbDropdownGroup.md +1249 -0
  224. package/dist/ai/source/BbDropzone.md +749 -0
  225. package/dist/ai/source/BbForm.md +100 -0
  226. package/dist/ai/source/BbIcon.md +212 -0
  227. package/dist/ai/source/BbIndicator.md +298 -0
  228. package/dist/ai/source/BbNumberInput.md +365 -0
  229. package/dist/ai/source/BbOffCanvas.md +1260 -0
  230. package/dist/ai/source/BbPagination.md +829 -0
  231. package/dist/ai/source/BbPopover.md +853 -0
  232. package/dist/ai/source/BbProgress.md +140 -0
  233. package/dist/ai/source/BbRadio.md +294 -0
  234. package/dist/ai/source/BbRadioGroup.md +401 -0
  235. package/dist/ai/source/BbRating.md +362 -0
  236. package/dist/ai/source/BbSelect.md +681 -0
  237. package/dist/ai/source/BbSelectPopover.md +2209 -0
  238. package/dist/ai/source/BbSlider.md +371 -0
  239. package/dist/ai/source/BbSmoothHeight.md +261 -0
  240. package/dist/ai/source/BbSpinner.md +127 -0
  241. package/dist/ai/source/BbSwitch.md +175 -0
  242. package/dist/ai/source/BbSwitchGroup.md +240 -0
  243. package/dist/ai/source/BbTable.md +3348 -0
  244. package/dist/ai/source/BbTabs.md +403 -0
  245. package/dist/ai/source/BbTabsList.md +578 -0
  246. package/dist/ai/source/BbTabsPanes.md +368 -0
  247. package/dist/ai/source/BbTabsRoot.md +372 -0
  248. package/dist/ai/source/BbTag.md +383 -0
  249. package/dist/ai/source/BbTextInput.md +345 -0
  250. package/dist/ai/source/BbTextarea.md +330 -0
  251. package/dist/ai/source/BbTimePicker.md +591 -0
  252. package/dist/ai/source/BbTimePickerInput.md +367 -0
  253. package/dist/ai/source/BbToast.md +524 -0
  254. package/dist/ai/source/BbToastPortal.md +482 -0
  255. package/dist/ai/source/BbTooltip.md +508 -0
  256. package/dist/ai/source/BbTree.md +319 -0
  257. package/dist/ai/source/ChipsBox.md +201 -0
  258. package/dist/ai/source/ClearableButton.md +70 -0
  259. package/dist/ai/source/CommaBox.md +202 -0
  260. package/dist/ai/source/CommonInputWrapper.md +554 -0
  261. package/dist/ai/source/CommonPopover.md +606 -0
  262. package/dist/ai/source/ErrorIcon.md +43 -0
  263. package/dist/ai/source/FlatListBox.md +396 -0
  264. package/dist/ai/source/GroupedListBox.md +540 -0
  265. package/dist/ai/source/GuidesComponent.md +383 -0
  266. package/dist/ai/source/ListBox.md +238 -0
  267. package/dist/ai/source/OptionsContainer.md +191 -0
  268. package/dist/ai/source/WarningIcon.md +47 -0
  269. package/dist/alert-variants.d.ts +12 -0
  270. package/dist/assets/css/reset.css_inline.js +4 -0
  271. package/dist/assets/svgs/alert.svg_raw.js +4 -0
  272. package/dist/assets/svgs/calendar.svg_raw.js +4 -0
  273. package/dist/assets/svgs/check_stroke.svg_raw.js +4 -0
  274. package/dist/assets/svgs/chevron_down.svg_raw.js +4 -0
  275. package/dist/assets/svgs/chevron_right.svg_raw.js +4 -0
  276. package/dist/assets/svgs/clear.svg_raw.js +4 -0
  277. package/dist/assets/svgs/clock.svg_raw.js +4 -0
  278. package/dist/assets/svgs/error.svg_raw.js +4 -0
  279. package/dist/assets/svgs/search.svg_raw.js +4 -0
  280. package/dist/assets/svgs/sort.svg_raw.js +4 -0
  281. package/dist/assets/svgs/spinner.svg_raw.js +4 -0
  282. package/dist/assets/svgs/user.svg_raw.js +4 -0
  283. package/dist/badge-variants.d.ts +18 -0
  284. package/dist/button-variants.d.ts +15 -0
  285. package/dist/components/BbAccordion/BbAccordion.vue.d.ts +9 -3
  286. package/dist/components/BbAccordion/BbAccordion.vue.js +6 -0
  287. package/dist/components/BbAccordion/BbAccordion.vue_vue_type_script_setup_true_lang.js +66 -0
  288. package/dist/components/BbAccordion/types.d.ts +10 -7
  289. package/dist/components/BbAlert/BbAlert.vue.d.ts +12 -3
  290. package/dist/components/BbAlert/BbAlert.vue.js +6 -0
  291. package/dist/components/BbAlert/BbAlert.vue_vue_type_script_setup_true_lang.js +65 -0
  292. package/dist/components/BbAlert/types.d.ts +51 -12
  293. package/dist/components/BbAsterisk/BbAsterisk.vue.d.ts +3 -0
  294. package/dist/components/BbAsterisk/BbAsterisk.vue.js +6 -0
  295. package/dist/components/BbAsterisk/BbAsterisk.vue_vue_type_script_setup_true_lang.js +13 -0
  296. package/dist/components/BbAvatar/BbAvatar.vue.d.ts +5 -0
  297. package/dist/components/BbAvatar/BbAvatar.vue.js +6 -0
  298. package/dist/components/BbAvatar/BbAvatar.vue_vue_type_script_setup_true_lang.js +78 -0
  299. package/dist/components/BbAvatar/types.d.ts +4 -5
  300. package/dist/components/BbBadge/BadgeAppendIcon.vue.d.ts +3 -0
  301. package/dist/components/BbBadge/BadgeAppendIcon.vue.js +5 -0
  302. package/dist/components/BbBadge/BadgeAppendIcon.vue_vue_type_script_setup_true_lang.js +22 -0
  303. package/dist/components/BbBadge/BadgeBodyContent.vue.d.ts +15 -0
  304. package/dist/components/BbBadge/BadgeBodyContent.vue.js +5 -0
  305. package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +34 -0
  306. package/dist/components/BbBadge/BbBadge.vue.d.ts +8 -1
  307. package/dist/components/BbBadge/BbBadge.vue.js +6 -0
  308. package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +83 -0
  309. package/dist/components/BbBadge/BbBadgeButton.vue.d.ts +12 -0
  310. package/dist/components/BbBadge/BbBadgeButton.vue.js +5 -0
  311. package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +54 -0
  312. package/dist/components/BbBadge/badgeButtonContext.d.ts +27 -0
  313. package/dist/components/BbBadge/badgeButtonContext.js +5 -0
  314. package/dist/components/BbBadge/types.d.ts +61 -16
  315. package/dist/components/BbBaseButton/BbBaseButton.vue.d.ts +13 -0
  316. package/dist/components/BbBaseButton/BbBaseButton.vue.js +6 -0
  317. package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +171 -0
  318. package/dist/components/BbBaseButton/RouterComponent.vue.js +5 -0
  319. package/dist/components/BbBaseButton/RouterComponent.vue_vue_type_script_setup_true_lang.js +28 -0
  320. package/dist/components/BbBaseButton/types.d.ts +191 -0
  321. package/dist/components/BbBaseButton/types.js +33 -0
  322. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.d.ts +40 -0
  323. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.js +6 -0
  324. package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue_vue_type_script_setup_true_lang.js +145 -0
  325. package/dist/components/BbBaseCheckbox/types.d.ts +222 -0
  326. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.d.ts +19 -0
  327. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.js +6 -0
  328. package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue_vue_type_script_setup_true_lang.js +190 -0
  329. package/dist/components/BbBaseCheckboxGroup/types.d.ts +257 -0
  330. package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue.d.ts +4 -0
  331. package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue.js +6 -0
  332. package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue_vue_type_script_setup_true_lang.js +43 -0
  333. package/dist/components/BbBaseCheckboxIcon/types.d.ts +47 -0
  334. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.d.ts +42 -0
  335. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.js +6 -0
  336. package/dist/components/BbBaseColorInput/BbBaseColorInput.vue_vue_type_script_setup_true_lang.js +178 -0
  337. package/dist/components/BbBaseColorInput/types.d.ts +207 -0
  338. package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue.d.ts +13 -0
  339. package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue.js +6 -0
  340. package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue_vue_type_script_setup_true_lang.js +395 -0
  341. package/dist/components/BbBaseColorPalette/types.d.ts +40 -0
  342. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.js +6 -0
  343. package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue_vue_type_script_setup_true_lang.js +300 -0
  344. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.d.ts +44 -0
  345. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.js +5 -0
  346. package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue_vue_type_script_setup_true_lang.js +310 -0
  347. package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.d.ts +5 -0
  348. package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.js +5 -0
  349. package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue_vue_type_script_setup_true_lang.js +63 -0
  350. package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.d.ts +5 -0
  351. package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.js +5 -0
  352. package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue_vue_type_script_setup_true_lang.js +75 -0
  353. package/dist/components/BbBaseDatePicker/typeahead.d.ts +112 -0
  354. package/dist/components/BbBaseDatePicker/typeahead.js +37 -0
  355. package/dist/components/BbBaseDatePicker/types.d.ts +97 -0
  356. package/dist/components/BbBaseDatePicker/useDatePickerContext.d.ts +58 -0
  357. package/dist/components/BbBaseDatePicker/useDatePickerContext.js +11 -0
  358. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.d.ts +30 -0
  359. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.js +6 -0
  360. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue_vue_type_script_setup_true_lang.js +713 -0
  361. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.d.ts +30 -0
  362. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.js +6 -0
  363. package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue_vue_type_script_setup_true_lang.js +204 -0
  364. package/dist/components/BbBaseDatePickerInput/types.d.ts +309 -0
  365. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.d.ts +17 -0
  366. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.js +6 -0
  367. package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue_vue_type_script_setup_true_lang.js +184 -0
  368. package/dist/components/BbBaseInputContainer/types.d.ts +185 -0
  369. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.d.ts +52 -0
  370. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.js +6 -0
  371. package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue_vue_type_script_setup_true_lang.js +211 -0
  372. package/dist/components/BbBaseNumberInput/types.d.ts +211 -0
  373. package/dist/components/BbBaseRadio/BbBaseRadio.vue.d.ts +33 -0
  374. package/dist/components/BbBaseRadio/BbBaseRadio.vue.js +6 -0
  375. package/dist/components/BbBaseRadio/BbBaseRadio.vue_vue_type_script_setup_true_lang.js +114 -0
  376. package/dist/components/BbBaseRadio/types.d.ts +179 -0
  377. package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue.d.ts +19 -0
  378. package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue.js +6 -0
  379. package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue_vue_type_script_setup_true_lang.js +172 -0
  380. package/dist/components/BbBaseRadioGroup/types.d.ts +215 -0
  381. package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue.d.ts +4 -0
  382. package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue.js +6 -0
  383. package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue_vue_type_script_setup_true_lang.js +28 -0
  384. package/dist/components/BbBaseRadioIcon/types.d.ts +41 -0
  385. package/dist/components/BbBaseRating/BbBaseRating.vue.d.ts +38 -0
  386. package/dist/components/BbBaseRating/BbBaseRating.vue.js +6 -0
  387. package/dist/components/BbBaseRating/BbBaseRating.vue_vue_type_script_setup_true_lang.js +184 -0
  388. package/dist/components/BbBaseRating/types.d.ts +168 -0
  389. package/dist/components/BbBaseSelect/BbBaseSelect.vue.d.ts +19 -0
  390. package/dist/components/BbBaseSelect/BbBaseSelect.vue.js +6 -0
  391. package/dist/components/BbBaseSelect/BbBaseSelect.vue_vue_type_script_setup_true_lang.js +307 -0
  392. package/dist/components/BbBaseSelect/types.d.ts +294 -0
  393. package/dist/components/BbBaseSlider/BbBaseSlider.vue.d.ts +35 -0
  394. package/dist/components/BbBaseSlider/BbBaseSlider.vue.js +6 -0
  395. package/dist/components/BbBaseSlider/BbBaseSlider.vue_vue_type_script_setup_true_lang.js +324 -0
  396. package/dist/components/BbBaseSlider/types.d.ts +200 -0
  397. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue.d.ts +35 -0
  398. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue.js +6 -0
  399. package/dist/components/BbBaseSwitch/BbBaseSwitch.vue_vue_type_script_setup_true_lang.js +146 -0
  400. package/dist/components/BbBaseSwitch/types.d.ts +10 -0
  401. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.d.ts +19 -0
  402. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.js +6 -0
  403. package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue_vue_type_script_setup_true_lang.js +190 -0
  404. package/dist/components/BbBaseSwitchGroup/types.d.ts +8 -0
  405. package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue.d.ts +4 -0
  406. package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue.js +6 -0
  407. package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue_vue_type_script_setup_true_lang.js +30 -0
  408. package/dist/components/BbBaseSwitchIcon/types.d.ts +48 -0
  409. package/dist/components/BbBaseTag/BbBaseTag.vue.d.ts +50 -0
  410. package/dist/components/BbBaseTag/BbBaseTag.vue.js +6 -0
  411. package/dist/components/BbBaseTag/BbBaseTag.vue_vue_type_script_setup_true_lang.js +266 -0
  412. package/dist/components/BbBaseTag/types.d.ts +160 -0
  413. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.d.ts +45 -0
  414. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.js +6 -0
  415. package/dist/components/BbBaseTextInput/BbBaseTextInput.vue_vue_type_script_setup_true_lang.js +200 -0
  416. package/dist/components/BbBaseTextInput/types.d.ts +209 -0
  417. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.d.ts +39 -0
  418. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.js +6 -0
  419. package/dist/components/BbBaseTextarea/BbBaseTextarea.vue_vue_type_script_setup_true_lang.js +175 -0
  420. package/dist/components/BbBaseTextarea/types.d.ts +170 -0
  421. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.d.ts +27 -0
  422. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.js +6 -0
  423. package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue_vue_type_script_setup_true_lang.js +517 -0
  424. package/dist/components/BbBaseTimePickerInput/types.d.ts +151 -0
  425. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue.d.ts +0 -1
  426. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue.js +6 -0
  427. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +224 -0
  428. package/dist/components/BbBreadcrumbs/estimateBreadcrumbItemWidth.js +47 -0
  429. package/dist/components/BbBreadcrumbs/types.d.ts +33 -22
  430. package/dist/components/BbButton/BbButton.vue.d.ts +6 -5
  431. package/dist/components/BbButton/BbButton.vue.js +6 -0
  432. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +177 -0
  433. package/dist/components/BbButton/types.d.ts +48 -47
  434. package/dist/components/BbCheckbox/BbCheckbox.vue.d.ts +4 -3
  435. package/dist/components/BbCheckbox/BbCheckbox.vue.js +6 -0
  436. package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +146 -0
  437. package/dist/components/BbCheckbox/types.d.ts +24 -10
  438. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue.d.ts +2 -13
  439. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue.js +6 -0
  440. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +190 -0
  441. package/dist/components/BbCheckboxGroup/types.d.ts +44 -23
  442. package/dist/components/BbCollapsible/BbCollapsible.vue.d.ts +2 -1
  443. package/dist/components/BbCollapsible/BbCollapsible.vue.js +6 -0
  444. package/dist/components/BbCollapsible/BbCollapsible.vue_vue_type_script_setup_true_lang.js +31 -0
  445. package/dist/components/BbCollapsible/types.d.ts +10 -9
  446. package/dist/components/BbColorInput/BbColorInput.vue.d.ts +10 -1
  447. package/dist/components/BbColorInput/BbColorInput.vue.js +6 -0
  448. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +177 -0
  449. package/dist/components/BbColorInput/types.d.ts +37 -11
  450. package/dist/components/BbColorPalette/BbColorPalette.vue.d.ts +5 -8
  451. package/dist/components/BbColorPalette/BbColorPalette.vue.js +5 -0
  452. package/dist/components/BbColorPalette/BbColorPalette.vue_vue_type_script_setup_true_lang.js +125 -0
  453. package/dist/components/BbColorPalette/types.d.ts +66 -53
  454. package/dist/components/BbConfirm/BbConfirm.vue.js +6 -0
  455. package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +130 -0
  456. package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +5 -6
  457. package/dist/components/BbConfirm/BbConfirmPortal.vue.js +5 -0
  458. package/dist/components/BbConfirm/BbConfirmPortal.vue_vue_type_script_setup_true_lang.js +19 -0
  459. package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +37 -0
  460. package/dist/components/BbDatePicker/BbDatePicker.vue.js +6 -0
  461. package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +319 -0
  462. package/dist/components/BbDatePicker/types.d.ts +155 -0
  463. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +3 -1
  464. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.js +6 -0
  465. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +179 -0
  466. package/dist/components/BbDatePickerInput/types.d.ts +127 -16
  467. package/dist/components/BbDialog/BbDialog.vue.d.ts +8 -6
  468. package/dist/components/BbDialog/BbDialog.vue.js +6 -0
  469. package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +214 -0
  470. package/dist/components/BbDialog/types.d.ts +146 -1
  471. package/dist/components/BbDialog/useDialogStack.d.ts +5 -0
  472. package/dist/components/BbDialog/useDialogStack.js +20 -0
  473. package/dist/components/BbDropdown/AdaptiveDropdown.vue.d.ts +18 -0
  474. package/dist/components/BbDropdown/AdaptiveDropdown.vue.js +6 -0
  475. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +116 -0
  476. package/dist/components/BbDropdown/BbDropdown.vue.d.ts +14 -7
  477. package/dist/components/BbDropdown/BbDropdown.vue.js +6 -0
  478. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +560 -0
  479. package/dist/components/BbDropdown/BbDropdownGroup.vue.d.ts +44 -0
  480. package/dist/components/BbDropdown/BbDropdownGroup.vue.js +5 -0
  481. package/dist/components/BbDropdown/BbDropdownGroup.vue_vue_type_script_setup_true_lang.js +36 -0
  482. package/dist/components/BbDropdown/BbDropdownList.vue.d.ts +27 -0
  483. package/dist/components/BbDropdown/BbDropdownList.vue.js +6 -0
  484. package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +464 -0
  485. package/dist/components/BbDropdown/DropdownPipelineResolver.vue.d.ts +16 -0
  486. package/dist/components/BbDropdown/DropdownPipelineResolver.vue.js +5 -0
  487. package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +168 -0
  488. package/dist/components/BbDropdown/normalizeGroups.d.ts +18 -0
  489. package/dist/components/BbDropdown/normalizeGroups.js +46 -0
  490. package/dist/components/BbDropdown/types.d.ts +457 -45
  491. package/dist/components/BbDropdown/types.js +4 -0
  492. package/dist/components/BbDropdown/useDropdownContext.d.ts +89 -0
  493. package/dist/components/BbDropdown/useDropdownContext.js +9 -0
  494. package/dist/components/BbDropdown/useDropdownGroupRegistry.d.ts +108 -0
  495. package/dist/components/BbDropdown/useDropdownGroupRegistry.js +5 -0
  496. package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +3 -3
  497. package/dist/components/BbDropdownButton/BbDropdownButton.vue.js +6 -0
  498. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +119 -0
  499. package/dist/components/BbDropdownButton/types.d.ts +45 -52
  500. package/dist/components/BbDropzone/BbDropzone.vue.d.ts +5 -4
  501. package/dist/components/BbDropzone/BbDropzone.vue.js +6 -0
  502. package/dist/components/BbDropzone/BbDropzone.vue_vue_type_script_setup_true_lang.js +284 -0
  503. package/dist/components/BbDropzone/types.d.ts +55 -7
  504. package/dist/components/BbIcon/BbIcon.vue.d.ts +3 -2
  505. package/dist/components/BbIcon/BbIcon.vue.js +6 -0
  506. package/dist/components/BbIcon/BbIcon.vue_vue_type_script_setup_true_lang.js +65 -0
  507. package/dist/components/BbIcon/types.d.ts +6 -19
  508. package/dist/components/BbIndicator/BbIndicator.vue.d.ts +14 -0
  509. package/dist/components/BbIndicator/BbIndicator.vue.js +6 -0
  510. package/dist/components/BbIndicator/BbIndicator.vue_vue_type_script_setup_true_lang.js +56 -0
  511. package/dist/components/BbIndicator/types.d.ts +49 -0
  512. package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +12 -6
  513. package/dist/components/BbNumberInput/BbNumberInput.vue.js +6 -0
  514. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +194 -0
  515. package/dist/components/BbNumberInput/types.d.ts +31 -4
  516. package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +10 -10
  517. package/dist/components/BbOffCanvas/BbOffCanvas.vue.js +6 -0
  518. package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +284 -0
  519. package/dist/components/BbOffCanvas/types.d.ts +71 -39
  520. package/dist/components/BbOffCanvas/useOffCanvasStack.d.ts +25 -0
  521. package/dist/components/BbOffCanvas/useOffCanvasStack.js +68 -0
  522. package/dist/components/BbPagination/BbPagination.vue.d.ts +3 -4
  523. package/dist/components/BbPagination/BbPagination.vue.js +6 -0
  524. package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +244 -0
  525. package/dist/components/BbPagination/paginationFit.d.ts +38 -0
  526. package/dist/components/BbPagination/paginationFit.js +13 -0
  527. package/dist/components/BbPagination/types.d.ts +51 -16
  528. package/dist/components/BbPopover/BbPopover.vue.d.ts +10 -15
  529. package/dist/components/BbPopover/BbPopover.vue.js +6 -0
  530. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +310 -0
  531. package/dist/components/BbPopover/escapeStack.d.ts +6 -0
  532. package/dist/components/BbPopover/escapeStack.js +10 -0
  533. package/dist/components/BbPopover/types.d.ts +84 -31
  534. package/dist/components/BbProgress/BbProgress.vue.d.ts +1 -0
  535. package/dist/components/BbProgress/BbProgress.vue.js +6 -0
  536. package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +36 -0
  537. package/dist/components/BbProgress/types.d.ts +15 -1
  538. package/dist/components/BbRadio/BbRadio.vue.d.ts +5 -3
  539. package/dist/components/BbRadio/BbRadio.vue.js +6 -0
  540. package/dist/components/BbRadio/BbRadio.vue_vue_type_script_setup_true_lang.js +133 -0
  541. package/dist/components/BbRadio/types.d.ts +23 -9
  542. package/dist/components/BbRadioGroup/BbRadioGroup.vue.d.ts +4 -14
  543. package/dist/components/BbRadioGroup/BbRadioGroup.vue.js +6 -0
  544. package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +184 -0
  545. package/dist/components/BbRadioGroup/types.d.ts +41 -22
  546. package/dist/components/BbRating/BbRating.vue.d.ts +4 -1
  547. package/dist/components/BbRating/BbRating.vue.js +6 -0
  548. package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +150 -0
  549. package/dist/components/BbRating/types.d.ts +37 -10
  550. package/dist/components/BbSelect/BbSelect.vue.d.ts +2 -11
  551. package/dist/components/BbSelect/BbSelect.vue.js +6 -0
  552. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +241 -0
  553. package/dist/components/BbSelect/types.d.ts +105 -59
  554. package/dist/components/BbSelectPopover/BbSelectPopover.vue.d.ts +1 -10
  555. package/dist/components/BbSelectPopover/BbSelectPopover.vue.js +6 -0
  556. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +637 -0
  557. package/dist/components/BbSelectPopover/types.d.ts +189 -102
  558. package/dist/components/BbSlider/BbSlider.vue.d.ts +3 -6
  559. package/dist/components/BbSlider/BbSlider.vue.js +6 -0
  560. package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +166 -0
  561. package/dist/components/BbSlider/types.d.ts +37 -13
  562. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.d.ts +3 -1
  563. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.js +6 -0
  564. package/dist/components/BbSmoothHeight/BbSmoothHeight.vue_vue_type_script_setup_true_lang.js +79 -0
  565. package/dist/components/BbSmoothHeight/types.d.ts +13 -2
  566. package/dist/components/BbSpinner/BbSpinner.vue.d.ts +1 -1
  567. package/dist/components/BbSpinner/BbSpinner.vue.js +6 -0
  568. package/dist/components/BbSpinner/BbSpinner.vue_vue_type_script_setup_true_lang.js +30 -0
  569. package/dist/components/BbSpinner/types.d.ts +10 -3
  570. package/dist/components/BbSwitch/BbSwitch.vue.d.ts +5 -3
  571. package/dist/components/BbSwitch/BbSwitch.vue.js +6 -0
  572. package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +142 -0
  573. package/dist/components/BbSwitch/types.d.ts +3 -1
  574. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue.d.ts +4 -14
  575. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue.js +6 -0
  576. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +190 -0
  577. package/dist/components/BbSwitchGroup/types.d.ts +3 -22
  578. package/dist/components/BbTable/BbTable.vue.d.ts +53 -31
  579. package/dist/components/BbTable/BbTable.vue.js +6 -0
  580. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +889 -0
  581. package/dist/components/BbTable/types.d.ts +176 -37
  582. package/dist/components/BbTable/utils.d.ts +9 -1
  583. package/dist/components/BbTable/utils.js +53 -0
  584. package/dist/components/BbTabs/BbTabs.vue.d.ts +20 -0
  585. package/dist/components/BbTabs/BbTabs.vue.js +6 -0
  586. package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +64 -0
  587. package/dist/components/BbTabs/BbTabsList.vue.d.ts +19 -0
  588. package/dist/components/BbTabs/BbTabsList.vue.js +6 -0
  589. package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +123 -0
  590. package/dist/components/BbTabs/BbTabsPanes.vue.d.ts +16 -0
  591. package/dist/components/BbTabs/BbTabsPanes.vue.js +6 -0
  592. package/dist/components/BbTabs/BbTabsPanes.vue_vue_type_script_setup_true_lang.js +35 -0
  593. package/dist/components/BbTabs/BbTabsRoot.vue.d.ts +20 -0
  594. package/dist/components/BbTabs/BbTabsRoot.vue.js +5 -0
  595. package/dist/components/BbTabs/BbTabsRoot.vue_vue_type_script_setup_true_lang.js +55 -0
  596. package/dist/components/BbTabs/types.d.ts +264 -0
  597. package/dist/components/BbTag/BbTag.vue.d.ts +19 -6
  598. package/dist/components/BbTag/BbTag.vue.js +6 -0
  599. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +187 -0
  600. package/dist/components/BbTag/types.d.ts +48 -17
  601. package/dist/components/BbTextInput/BbTextInput.vue.d.ts +10 -1
  602. package/dist/components/BbTextInput/BbTextInput.vue.js +6 -0
  603. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +195 -0
  604. package/dist/components/BbTextInput/types.d.ts +24 -4
  605. package/dist/components/BbTextarea/BbTextarea.vue.d.ts +10 -1
  606. package/dist/components/BbTextarea/BbTextarea.vue.js +6 -0
  607. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +178 -0
  608. package/dist/components/BbTextarea/types.d.ts +26 -2
  609. package/dist/components/BbTimePicker/BbTimePicker.vue.d.ts +33 -0
  610. package/dist/components/BbTimePicker/BbTimePicker.vue.js +6 -0
  611. package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +244 -0
  612. package/dist/components/BbTimePicker/types.d.ts +129 -0
  613. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue.d.ts +25 -0
  614. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue.js +6 -0
  615. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +157 -0
  616. package/dist/components/BbTimePickerInput/types.d.ts +165 -0
  617. package/dist/components/BbToast/BbToast.vue.d.ts +2 -3
  618. package/dist/components/BbToast/BbToast.vue.js +6 -0
  619. package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +35 -0
  620. package/dist/components/BbToast/BbToastMessage.vue.d.ts +17 -8
  621. package/dist/components/BbToast/BbToastMessage.vue.js +5 -0
  622. package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +170 -0
  623. package/dist/components/BbToast/BbToastPortal.vue.d.ts +30 -0
  624. package/dist/components/BbToast/BbToastPortal.vue.js +5 -0
  625. package/dist/components/BbToast/BbToastPortal.vue_vue_type_script_setup_true_lang.js +19 -0
  626. package/dist/components/BbToast/BbToastRegion.vue.d.ts +8 -0
  627. package/dist/components/BbToast/BbToastRegion.vue.js +5 -0
  628. package/dist/components/BbToast/BbToastRegion.vue_vue_type_script_setup_true_lang.js +100 -0
  629. package/dist/components/BbToast/types.d.ts +69 -5
  630. package/dist/components/BbTooltip/BbTooltip.vue.d.ts +4 -3
  631. package/dist/components/BbTooltip/BbTooltip.vue.js +6 -0
  632. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +160 -0
  633. package/dist/components/BbTooltip/types.d.ts +61 -11
  634. package/dist/components/BbTree/BbTree.vue.d.ts +26 -13
  635. package/dist/components/BbTree/BbTree.vue.js +6 -0
  636. package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +55 -0
  637. package/dist/components/BbTree/BbTreeLevel.vue.d.ts +19 -0
  638. package/dist/components/BbTree/BbTreeLevel.vue.js +5 -0
  639. package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +94 -0
  640. package/dist/components/BbTree/context.d.ts +17 -0
  641. package/dist/components/BbTree/context.js +4 -0
  642. package/dist/components/BbTree/types.d.ts +93 -42
  643. package/dist/components/ChipsBox/ChipsBox.vue.d.ts +2 -1
  644. package/dist/components/ChipsBox/ChipsBox.vue.js +5 -0
  645. package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +98 -0
  646. package/dist/components/ChipsBox/types.d.ts +12 -5
  647. package/dist/components/ClearableButton/ClearableButton.vue.d.ts +2 -1
  648. package/dist/components/ClearableButton/ClearableButton.vue.js +6 -0
  649. package/dist/components/ClearableButton/ClearableButton.vue_vue_type_script_setup_true_lang.js +19 -0
  650. package/dist/components/ClearableButton/types.d.ts +7 -1
  651. package/dist/components/CloseIcon/CloseButton.vue.d.ts +5 -0
  652. package/dist/components/CloseIcon/CloseButton.vue.js +7 -0
  653. package/dist/components/CloseIcon/CloseButton.vue_vue_type_script_setup_true_lang.js +23 -0
  654. package/dist/components/CloseIcon/types.d.ts +2 -0
  655. package/dist/components/CommaBox/CommaBox.vue.d.ts +2 -1
  656. package/dist/components/CommaBox/CommaBox.vue.js +6 -0
  657. package/dist/components/CommaBox/CommaBox.vue_vue_type_script_setup_true_lang.js +81 -0
  658. package/dist/components/CommaBox/types.d.ts +6 -7
  659. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue.d.ts +19 -0
  660. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue.js +6 -0
  661. package/dist/components/CommonInputWrapper/CommonInputWrapper.vue_vue_type_script_setup_true_lang.js +107 -0
  662. package/dist/components/CommonInputWrapper/types.d.ts +96 -0
  663. package/dist/components/CommonPopover/CommonPopover.vue.d.ts +3 -3
  664. package/dist/components/CommonPopover/CommonPopover.vue.js +6 -0
  665. package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +160 -0
  666. package/dist/components/CommonPopover/types.d.ts +61 -16
  667. package/dist/components/ErrorIcon/ErrorIcon.vue.d.ts +2 -0
  668. package/dist/components/ErrorIcon/ErrorIcon.vue.js +6 -0
  669. package/dist/components/ErrorIcon/ErrorIcon.vue_vue_type_script_setup_true_lang.js +16 -0
  670. package/dist/components/FlatListBox/FlatListBox.vue.d.ts +2 -5
  671. package/dist/components/FlatListBox/FlatListBox.vue.js +5 -0
  672. package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +167 -0
  673. package/dist/components/FlatListBox/types.d.ts +1 -1
  674. package/dist/components/GroupedListBox/GroupedListBox.vue.d.ts +2 -5
  675. package/dist/components/GroupedListBox/GroupedListBox.vue.js +5 -0
  676. package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +218 -0
  677. package/dist/components/ListBox/ListBox.vue.d.ts +3 -6
  678. package/dist/components/ListBox/ListBox.vue.js +5 -0
  679. package/dist/components/ListBox/ListBox.vue_vue_type_script_setup_true_lang.js +112 -0
  680. package/dist/components/ListBox/types.d.ts +1 -1
  681. package/dist/components/OptionsContainer/OptionsContainer.vue.d.ts +1 -0
  682. package/dist/components/OptionsContainer/OptionsContainer.vue.js +5 -0
  683. package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +52 -0
  684. package/dist/components/OptionsContainer/types.d.ts +14 -24
  685. package/dist/components/Transitions/ScaleFade.vue.js +5 -0
  686. package/dist/components/Transitions/ScaleFade.vue_vue_type_script_setup_true_lang.js +47 -0
  687. package/dist/components/Transitions/Slide.vue.js +7 -0
  688. package/dist/components/Transitions/Slide.vue_vue_type_script_setup_true_lang.js +28 -0
  689. package/dist/components/WarningIcon/WarningIcon.vue.d.ts +5 -0
  690. package/dist/components/WarningIcon/WarningIcon.vue.js +6 -0
  691. package/dist/components/WarningIcon/WarningIcon.vue_vue_type_script_setup_true_lang.js +16 -0
  692. package/dist/components/WarningIcon/types.d.ts +3 -0
  693. package/dist/composables/__testResets.d.ts +1 -0
  694. package/dist/composables/useActiveInactiveState.d.ts +4 -0
  695. package/dist/composables/useActiveInactiveState.js +21 -0
  696. package/dist/composables/useBaseOptions.d.ts +3 -3
  697. package/dist/composables/useBaseOptions.js +31 -0
  698. package/dist/composables/useBbConfig.d.ts +8 -37
  699. package/dist/composables/useBbConfig.js +5 -0
  700. package/dist/composables/useBbDropdownContext.d.ts +89 -0
  701. package/dist/composables/useBbDropdownContext.js +46 -0
  702. package/dist/composables/useBbFormContext.d.ts +90 -0
  703. package/dist/composables/useBbFormContext.js +69 -0
  704. package/dist/composables/useBbTableContext.d.ts +195 -0
  705. package/dist/composables/useBbTableContext.js +208 -0
  706. package/dist/composables/useBbTabsContext.d.ts +111 -0
  707. package/dist/composables/useBbTabsContext.js +219 -0
  708. package/dist/composables/useBreakpoint.d.ts +13 -0
  709. package/dist/composables/useBreakpoint.js +39 -0
  710. package/dist/composables/useBroadcastChannelInstance.d.ts +1 -3
  711. package/dist/composables/useBroadcastChannelInstance.js +39 -0
  712. package/dist/composables/useCancelableFunction.js +37 -0
  713. package/dist/composables/useCoherence.js +16 -0
  714. package/dist/composables/useConfirm.d.ts +257 -67
  715. package/dist/composables/useConfirm.js +122 -0
  716. package/dist/composables/useCountdown.js +42 -0
  717. package/dist/composables/useHashedWatcher.d.ts +17 -0
  718. package/dist/composables/useHashedWatcher.js +14 -0
  719. package/dist/composables/useId.d.ts +3 -2
  720. package/dist/composables/useIndexById.js +16 -0
  721. package/dist/composables/useInertiaPage.d.ts +10 -0
  722. package/dist/composables/useInertiaPage.js +8 -0
  723. package/dist/composables/useItemText.js +17 -0
  724. package/dist/composables/useItemValue.js +9 -0
  725. package/dist/composables/useItemsGetter.d.ts +1 -1
  726. package/dist/composables/useItemsGetter.js +30 -0
  727. package/dist/composables/useListboxFocus.js +66 -0
  728. package/dist/composables/useLocale.d.ts +1 -1
  729. package/dist/composables/useLocale.js +11 -0
  730. package/dist/composables/useLogger.d.ts +1 -1
  731. package/dist/composables/useLogger.js +10 -0
  732. package/dist/composables/useMinimalQueue.d.ts +1 -1
  733. package/dist/composables/useMobile.js +7 -0
  734. package/dist/composables/useOnFalsy.d.ts +2 -0
  735. package/dist/composables/useOnFalsy.js +9 -0
  736. package/dist/composables/useOnTruthy.d.ts +7 -0
  737. package/dist/composables/useOnTruthy.js +9 -0
  738. package/dist/composables/usePrefill.d.ts +2 -1
  739. package/dist/composables/usePrefill.js +24 -0
  740. package/dist/composables/useQuery.d.ts +15 -3
  741. package/dist/composables/useQuery.js +42 -0
  742. package/dist/composables/useRoute.js +11 -0
  743. package/dist/composables/useRouter.js +8 -0
  744. package/dist/composables/useSafeArea.d.ts +51 -0
  745. package/dist/composables/useSafeArea.js +16 -0
  746. package/dist/composables/useSegmentedFields.d.ts +103 -0
  747. package/dist/composables/useSegmentedFields.js +152 -0
  748. package/dist/composables/useTableWidthContext.d.ts +5 -0
  749. package/dist/composables/useTableWidthContext.js +42 -0
  750. package/dist/composables/useToast.d.ts +17 -73
  751. package/dist/composables/useToast.js +49 -0
  752. package/dist/composables/useTopLayer.d.ts +9 -0
  753. package/dist/composables/useTopLayer.js +7 -0
  754. package/dist/composables/useUntil.js +13 -0
  755. package/dist/composables/useViewportWidth.d.ts +17 -0
  756. package/dist/composables/useViewportWidth.js +6 -0
  757. package/dist/confirm-variants.d.ts +10 -0
  758. package/dist/deprecation/ai-deprecations.json.d.ts +784 -0
  759. package/dist/deprecation/ai-deprecations.json.js +4 -0
  760. package/dist/deprecation/removedProps.d.ts +3 -0
  761. package/dist/deprecation/removedProps.js +13 -0
  762. package/dist/directives/bbColor.d.ts +65 -0
  763. package/dist/directives/bbColor.js +24 -0
  764. package/dist/directives/bbDate.d.ts +66 -0
  765. package/dist/directives/bbDate.js +24 -0
  766. package/dist/directives/bbDropdown.d.ts +15 -11
  767. package/dist/directives/bbDropdown.js +23 -0
  768. package/dist/directives/bbTime.d.ts +64 -0
  769. package/dist/directives/bbTime.js +24 -0
  770. package/dist/directives/bbTooltip.d.ts +16 -11
  771. package/dist/directives/bbTooltip.js +24 -0
  772. package/dist/dropdown-item-variants.d.ts +10 -0
  773. package/dist/i18n/index.d.ts +51 -3
  774. package/dist/i18n/index.js +27 -0
  775. package/dist/i18n/locales/cs.json +115 -0
  776. package/dist/i18n/locales/da.json +115 -0
  777. package/dist/i18n/locales/de.json +115 -0
  778. package/dist/i18n/locales/el.json +115 -0
  779. package/dist/i18n/locales/en.json +115 -0
  780. package/dist/i18n/locales/es.json +115 -0
  781. package/dist/i18n/locales/fi.json +115 -0
  782. package/dist/i18n/locales/fr.json +115 -0
  783. package/dist/i18n/locales/hu.json +115 -0
  784. package/dist/i18n/locales/it.json +115 -0
  785. package/dist/i18n/locales/ja.json +115 -0
  786. package/dist/i18n/locales/ko.json +115 -0
  787. package/dist/i18n/locales/nb.json +115 -0
  788. package/dist/i18n/locales/nl.json +115 -0
  789. package/dist/i18n/locales/pl.json +115 -0
  790. package/dist/i18n/locales/pt.json +115 -0
  791. package/dist/i18n/locales/ro.json +115 -0
  792. package/dist/i18n/locales/ru.json +115 -0
  793. package/dist/i18n/locales/sv.json +115 -0
  794. package/dist/i18n/locales/tr.json +115 -0
  795. package/dist/i18n/locales/uk.json +115 -0
  796. package/dist/i18n/locales/zh-cn.json +115 -0
  797. package/dist/icons-whitelist.d.ts +8 -0
  798. package/dist/index.d.ts +94 -79
  799. package/dist/index.js +76 -82
  800. package/dist/indicator-variants.d.ts +13 -0
  801. package/dist/llms-full.txt +77073 -0
  802. package/dist/llms-medium.txt +1334 -0
  803. package/dist/llms.txt +103 -0
  804. package/dist/locale-blueprint.json +141 -0
  805. package/dist/nuxt-module.d.ts +3 -0
  806. package/dist/nuxt.js +19 -0
  807. package/dist/plugin.d.ts +4 -0
  808. package/dist/plugin.js +22 -0
  809. package/dist/reset.css +1 -0
  810. package/dist/reset.d.ts +0 -0
  811. package/dist/runtime/nuxt-plugin.d.ts +2 -0
  812. package/dist/runtime/nuxt-plugin.js +24 -0
  813. package/dist/styles.css +2 -0
  814. package/dist/styles.d.ts +0 -0
  815. package/dist/toast-variants.d.ts +13 -0
  816. package/dist/tooltip-variants.d.ts +10 -0
  817. package/dist/types/ActionButton.d.ts +32 -0
  818. package/dist/types/AlertVariant.d.ts +16 -0
  819. package/dist/types/BadgeVariant.d.ts +16 -0
  820. package/dist/types/ButtonVariant.d.ts +17 -0
  821. package/dist/types/Classes.d.ts +1 -1
  822. package/dist/types/ColumnName.d.ts +1 -1
  823. package/dist/types/CommonProps.d.ts +66 -279
  824. package/dist/types/Config.d.ts +84 -0
  825. package/dist/types/ConfirmVariant.d.ts +15 -0
  826. package/dist/types/DropdownItemVariant.d.ts +18 -0
  827. package/dist/types/Icon.d.ts +5 -7
  828. package/dist/types/IndicatorVariant.d.ts +16 -0
  829. package/dist/types/InputDirection.d.ts +15 -0
  830. package/dist/types/ItemAccessor.d.ts +21 -0
  831. package/dist/types/Placement.d.ts +6 -0
  832. package/dist/types/ResponsiveSize.d.ts +20 -0
  833. package/dist/types/SizeScale.d.ts +8 -0
  834. package/dist/types/ToastVariant.d.ts +17 -0
  835. package/dist/types/TooltipVariant.d.ts +18 -0
  836. package/dist/utilities/functions/bytesToUnit.d.ts +2 -0
  837. package/dist/utilities/functions/bytesToUnit.js +18 -0
  838. package/dist/utilities/functions/clampPrecision.js +10 -0
  839. package/dist/utilities/functions/convertDateValue.d.ts +23 -10
  840. package/dist/utilities/functions/convertDateValue.js +12 -0
  841. package/dist/utilities/functions/deburr.js +5 -0
  842. package/dist/utilities/functions/empty.js +5 -0
  843. package/dist/utilities/functions/flattenTree.d.ts +1 -1
  844. package/dist/utilities/functions/hash.js +5 -0
  845. package/dist/utilities/functions/isDateDisabled.d.ts +1 -0
  846. package/dist/utilities/functions/isDateDisabled.js +20 -0
  847. package/dist/utilities/functions/isEqual.js +5 -0
  848. package/dist/utilities/functions/isNotEmpty.js +5 -0
  849. package/dist/utilities/functions/matchAnyKey.d.ts +1 -1
  850. package/dist/utilities/functions/matchAnyKey.js +15 -0
  851. package/dist/utilities/functions/parseSize.d.ts +1 -1
  852. package/dist/utilities/functions/parseSize.js +15 -0
  853. package/dist/utilities/functions/percentage.js +11 -0
  854. package/dist/utilities/functions/pipe.d.ts +1 -1
  855. package/dist/utilities/functions/reject.d.ts +25 -0
  856. package/dist/utilities/functions/reject.js +28 -0
  857. package/dist/utilities/functions/resolveEnumProp.d.ts +19 -0
  858. package/dist/utilities/functions/resolveEnumProp.js +5 -0
  859. package/dist/utilities/functions/slotKey.d.ts +13 -0
  860. package/dist/utilities/functions/slotKey.js +4 -0
  861. package/dist/utilities/functions/sort.d.ts +2 -2
  862. package/dist/utilities/functions/sort.js +19 -0
  863. package/dist/utilities/functions/throttle.js +5 -0
  864. package/dist/utilities/functions/waitFor.d.ts +9 -2
  865. package/dist/utilities/functions/waitFor.js +14 -0
  866. package/dist/utilities/functions/warnRemovedAttrs.d.ts +11 -0
  867. package/dist/utilities/functions/warnRemovedAttrs.js +20 -0
  868. package/dist/utilities/functions/when.js +5 -0
  869. package/dist/utilities/misc/iconsInjectionKey.d.ts +15 -0
  870. package/dist/utilities/misc/iconsInjectionKey.js +4 -0
  871. package/dist/utilities/misc/transitions.d.ts +5 -0
  872. package/dist/utilities/misc/transitions.js +8 -0
  873. package/dist/utils/injectLibraryStyles.d.ts +6 -0
  874. package/dist/utils/injectLibraryStyles.js +38 -0
  875. package/dist/validated/BbCheckbox.vue.d.ts +29 -0
  876. package/dist/validated/BbCheckbox.vue.js +5 -0
  877. package/dist/validated/BbCheckbox.vue_vue_type_script_setup_true_lang.js +75 -0
  878. package/dist/validated/BbCheckboxGroup.vue.d.ts +34 -0
  879. package/dist/validated/BbCheckboxGroup.vue.js +5 -0
  880. package/dist/validated/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +76 -0
  881. package/dist/validated/BbColorInput.vue.d.ts +36 -0
  882. package/dist/validated/BbColorInput.vue.js +5 -0
  883. package/dist/validated/BbColorInput.vue_vue_type_script_setup_true_lang.js +71 -0
  884. package/dist/validated/BbDatePickerInput.vue.d.ts +40 -0
  885. package/dist/validated/BbDatePickerInput.vue.js +5 -0
  886. package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +87 -0
  887. package/dist/validated/BbDropzone.vue.d.ts +24 -0
  888. package/dist/validated/BbDropzone.vue.js +5 -0
  889. package/dist/validated/BbDropzone.vue_vue_type_script_setup_true_lang.js +45 -0
  890. package/dist/validated/BbForm.vue.d.ts +28 -0
  891. package/dist/validated/BbForm.vue.js +5 -0
  892. package/dist/validated/BbForm.vue_vue_type_script_setup_true_lang.js +42 -0
  893. package/dist/validated/BbNumberInput.vue.d.ts +36 -0
  894. package/dist/validated/BbNumberInput.vue.js +5 -0
  895. package/dist/validated/BbNumberInput.vue_vue_type_script_setup_true_lang.js +72 -0
  896. package/dist/validated/BbRadioGroup.vue.d.ts +34 -0
  897. package/dist/validated/BbRadioGroup.vue.js +5 -0
  898. package/dist/validated/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +75 -0
  899. package/dist/validated/BbRating.vue.d.ts +30 -0
  900. package/dist/validated/BbRating.vue.js +5 -0
  901. package/dist/validated/BbRating.vue_vue_type_script_setup_true_lang.js +63 -0
  902. package/dist/validated/BbSelect.vue.d.ts +46 -0
  903. package/dist/validated/BbSelect.vue.js +5 -0
  904. package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +100 -0
  905. package/dist/validated/BbSlider.vue.d.ts +36 -0
  906. package/dist/validated/BbSlider.vue.js +5 -0
  907. package/dist/validated/BbSlider.vue_vue_type_script_setup_true_lang.js +69 -0
  908. package/dist/validated/BbSwitch.vue.d.ts +29 -0
  909. package/dist/validated/BbSwitch.vue.js +5 -0
  910. package/dist/validated/BbSwitch.vue_vue_type_script_setup_true_lang.js +75 -0
  911. package/dist/validated/BbSwitchGroup.vue.d.ts +34 -0
  912. package/dist/validated/BbSwitchGroup.vue.js +5 -0
  913. package/dist/validated/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +76 -0
  914. package/dist/validated/BbTag.vue.d.ts +36 -0
  915. package/dist/validated/BbTag.vue.js +5 -0
  916. package/dist/validated/BbTag.vue_vue_type_script_setup_true_lang.js +72 -0
  917. package/dist/validated/BbTextInput.vue.d.ts +36 -0
  918. package/dist/validated/BbTextInput.vue.js +5 -0
  919. package/dist/validated/BbTextInput.vue_vue_type_script_setup_true_lang.js +72 -0
  920. package/dist/validated/BbTextarea.vue.d.ts +36 -0
  921. package/dist/validated/BbTextarea.vue.js +5 -0
  922. package/dist/validated/BbTextarea.vue_vue_type_script_setup_true_lang.js +70 -0
  923. package/dist/validated/BbTimePickerInput.vue.d.ts +36 -0
  924. package/dist/validated/BbTimePickerInput.vue.js +5 -0
  925. package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +78 -0
  926. package/dist/validated/index.d.ts +29 -0
  927. package/dist/validated/useValidatedField.d.ts +52 -0
  928. package/dist/validated/useValidatedField.js +51 -0
  929. package/dist/validated.js +21 -0
  930. package/dist/vite-plugin.d.ts +217 -0
  931. package/dist/vite.js +530 -0
  932. package/llms.txt +105 -0
  933. package/package.json +161 -59
  934. package/scripts/lib/__fixtures__/validated-manifest.json +65 -0
  935. package/scripts/lib/ensure-manifest.mjs +39 -0
  936. package/scripts/lib/eslint-plugin-autofix.node.test.mjs +109 -0
  937. package/scripts/lib/eslint-plugin.mjs +285 -0
  938. package/scripts/lib/eslint-plugin.node.test.mjs +161 -0
  939. package/scripts/lib/html-attributes.mjs +191 -0
  940. package/scripts/lib/mcp-config.mjs +126 -0
  941. package/scripts/lib/migrate-fix.mjs +115 -0
  942. package/scripts/lib/validate-bb-markup.mjs +421 -0
  943. package/dist/ai/BaseButton.md +0 -449
  944. package/dist/ai/BaseCheckbox.md +0 -512
  945. package/dist/ai/BaseCheckboxGroup.md +0 -597
  946. package/dist/ai/BaseColorInput.md +0 -461
  947. package/dist/ai/BaseDatePicker.md +0 -739
  948. package/dist/ai/BaseDatePickerInput.md +0 -1517
  949. package/dist/ai/BaseDialog.md +0 -610
  950. package/dist/ai/BaseInputContainer.md +0 -570
  951. package/dist/ai/BaseNumberInput.md +0 -509
  952. package/dist/ai/BaseRadio.md +0 -405
  953. package/dist/ai/BaseRadioGroup.md +0 -535
  954. package/dist/ai/BaseRating.md +0 -489
  955. package/dist/ai/BaseSelect.md +0 -1742
  956. package/dist/ai/BaseSlider.md +0 -871
  957. package/dist/ai/BaseSwitch.md +0 -322
  958. package/dist/ai/BaseSwitchGroup.md +0 -298
  959. package/dist/ai/BaseTag.md +0 -623
  960. package/dist/ai/BaseTextInput.md +0 -392
  961. package/dist/ai/BaseTextarea.md +0 -398
  962. package/dist/ai/BbChip.md +0 -147
  963. package/dist/ai/BbIntersection.md +0 -120
  964. package/dist/ai/BbRatio.md +0 -61
  965. package/dist/ai/BbRows.md +0 -307
  966. package/dist/ai/BbTab.md +0 -950
  967. package/dist/ai/CommonInputInnerContainer.md +0 -414
  968. package/dist/ai/CommonInputOuterContainer.md +0 -55
  969. package/dist/components/BaseButton/BaseButton.vue.d.ts +0 -14
  970. package/dist/components/BaseButton/types.d.ts +0 -159
  971. package/dist/components/BaseCheckbox/BaseCheckbox.vue.d.ts +0 -39
  972. package/dist/components/BaseCheckbox/types.d.ts +0 -213
  973. package/dist/components/BaseCheckboxGroup/BaseCheckboxGroup.vue.d.ts +0 -30
  974. package/dist/components/BaseCheckboxGroup/types.d.ts +0 -282
  975. package/dist/components/BaseColorInput/BaseColorInput.vue.d.ts +0 -35
  976. package/dist/components/BaseColorInput/ColorPalette.vue.d.ts +0 -13
  977. package/dist/components/BaseColorInput/types.d.ts +0 -233
  978. package/dist/components/BaseDatePicker/BaseDatePickerHeader.vue.d.ts +0 -15
  979. package/dist/components/BaseDatePicker/BaseDatePickerInputDaySelector.vue.d.ts +0 -58
  980. package/dist/components/BaseDatePicker/BaseDatePickerMonthSelector.vue.d.ts +0 -12
  981. package/dist/components/BaseDatePicker/BaseDatePickerYearSelector.vue.d.ts +0 -12
  982. package/dist/components/BaseDatePicker/types.d.ts +0 -100
  983. package/dist/components/BaseDatePickerInput/BaseDatePickerInput.vue.d.ts +0 -26
  984. package/dist/components/BaseDatePickerInput/types.d.ts +0 -206
  985. package/dist/components/BaseDialog/BaseDialog.vue.d.ts +0 -37
  986. package/dist/components/BaseDialog/types.d.ts +0 -180
  987. package/dist/components/BaseInputContainer/BaseInputContainer.vue.d.ts +0 -18
  988. package/dist/components/BaseInputContainer/types.d.ts +0 -126
  989. package/dist/components/BaseNumberInput/BaseNumberInput.vue.d.ts +0 -46
  990. package/dist/components/BaseNumberInput/types.d.ts +0 -191
  991. package/dist/components/BaseRadio/BaseRadio.vue.d.ts +0 -31
  992. package/dist/components/BaseRadio/types.d.ts +0 -173
  993. package/dist/components/BaseRadioGroup/BaseRadioGroup.vue.d.ts +0 -30
  994. package/dist/components/BaseRadioGroup/types.d.ts +0 -240
  995. package/dist/components/BaseRating/BaseRating.vue.d.ts +0 -35
  996. package/dist/components/BaseRating/types.d.ts +0 -144
  997. package/dist/components/BaseSelect/BaseSelect.vue.d.ts +0 -28
  998. package/dist/components/BaseSelect/types.d.ts +0 -470
  999. package/dist/components/BaseSlider/BaseSlider.vue.d.ts +0 -38
  1000. package/dist/components/BaseSlider/types.d.ts +0 -201
  1001. package/dist/components/BaseSwitch/BaseSwitch.vue.d.ts +0 -34
  1002. package/dist/components/BaseSwitch/types.d.ts +0 -25
  1003. package/dist/components/BaseSwitchGroup/BaseSwitchGroup.vue.d.ts +0 -30
  1004. package/dist/components/BaseSwitchGroup/types.d.ts +0 -8
  1005. package/dist/components/BaseTag/BaseTag.vue.d.ts +0 -37
  1006. package/dist/components/BaseTag/types.d.ts +0 -136
  1007. package/dist/components/BaseTextInput/BaseTextInput.vue.d.ts +0 -33
  1008. package/dist/components/BaseTextInput/types.d.ts +0 -166
  1009. package/dist/components/BaseTextarea/BaseTextarea.vue.d.ts +0 -31
  1010. package/dist/components/BaseTextarea/types.d.ts +0 -151
  1011. package/dist/components/BbChip/BbChip.vue.d.ts +0 -17
  1012. package/dist/components/BbChip/types.d.ts +0 -23
  1013. package/dist/components/BbIntersection/BbIntersection.vue.d.ts +0 -23
  1014. package/dist/components/BbIntersection/types.d.ts +0 -36
  1015. package/dist/components/BbRatio/BbRatio.vue.d.ts +0 -14
  1016. package/dist/components/BbRatio/types.d.ts +0 -15
  1017. package/dist/components/BbRows/BbRows.vue.d.ts +0 -62
  1018. package/dist/components/BbRows/types.d.ts +0 -21
  1019. package/dist/components/BbTab/BbTab.vue.d.ts +0 -27
  1020. package/dist/components/BbTab/types.d.ts +0 -186
  1021. package/dist/components/CommonInputInnerContainer/CommonInputInnerContainer.vue.d.ts +0 -15
  1022. package/dist/components/CommonInputInnerContainer/types.d.ts +0 -47
  1023. package/dist/components/CommonInputOuterContainer/CommonInputOuterContainer.vue.d.ts +0 -11
  1024. package/dist/components/CommonInputOuterContainer/types.d.ts +0 -16
  1025. package/dist/composables/useModalsState.d.ts +0 -5
  1026. package/dist/composables/useQueue.d.ts +0 -58
  1027. package/dist/composables/useWizard.d.ts +0 -85
  1028. package/dist/i18n/en.d.ts +0 -67
  1029. package/dist/i18n/it.d.ts +0 -67
  1030. package/dist/index.css +0 -2
  1031. package/dist/index100.js +0 -6
  1032. package/dist/index101.js +0 -300
  1033. package/dist/index102.js +0 -16
  1034. package/dist/index103.js +0 -16
  1035. package/dist/index104.js +0 -27
  1036. package/dist/index109.js +0 -19
  1037. package/dist/index11.js +0 -42
  1038. package/dist/index110.js +0 -12
  1039. package/dist/index111.js +0 -19
  1040. package/dist/index112.js +0 -25
  1041. package/dist/index114.js +0 -7
  1042. package/dist/index115.js +0 -241
  1043. package/dist/index116.js +0 -5
  1044. package/dist/index117.js +0 -42
  1045. package/dist/index118.js +0 -5
  1046. package/dist/index119.js +0 -53
  1047. package/dist/index120.js +0 -5
  1048. package/dist/index121.js +0 -32
  1049. package/dist/index122.js +0 -5
  1050. package/dist/index124.js +0 -52
  1051. package/dist/index125.js +0 -5
  1052. package/dist/index126.js +0 -223
  1053. package/dist/index128.js +0 -6
  1054. package/dist/index129.js +0 -162
  1055. package/dist/index13.js +0 -92
  1056. package/dist/index130.js +0 -25
  1057. package/dist/index131.js +0 -51
  1058. package/dist/index132.js +0 -5
  1059. package/dist/index133.js +0 -607
  1060. package/dist/index135.js +0 -6
  1061. package/dist/index136.js +0 -14
  1062. package/dist/index137.js +0 -153
  1063. package/dist/index139.js +0 -6
  1064. package/dist/index14.js +0 -306
  1065. package/dist/index140.js +0 -224
  1066. package/dist/index141.js +0 -5
  1067. package/dist/index143.js +0 -128
  1068. package/dist/index145.js +0 -6
  1069. package/dist/index146.js +0 -8
  1070. package/dist/index147.js +0 -182
  1071. package/dist/index149.js +0 -6
  1072. package/dist/index15.js +0 -10
  1073. package/dist/index151.js +0 -4
  1074. package/dist/index152.js +0 -95
  1075. package/dist/index154.js +0 -6
  1076. package/dist/index155.js +0 -168
  1077. package/dist/index157.js +0 -6
  1078. package/dist/index158.js +0 -145
  1079. package/dist/index16.js +0 -59
  1080. package/dist/index160.js +0 -6
  1081. package/dist/index161.js +0 -53
  1082. package/dist/index163.js +0 -6
  1083. package/dist/index164.js +0 -16
  1084. package/dist/index166.js +0 -35
  1085. package/dist/index168.js +0 -6
  1086. package/dist/index169.js +0 -89
  1087. package/dist/index171.js +0 -6
  1088. package/dist/index172.js +0 -82
  1089. package/dist/index174.js +0 -6
  1090. package/dist/index175.js +0 -38
  1091. package/dist/index176.js +0 -461
  1092. package/dist/index177.js +0 -28
  1093. package/dist/index178.js +0 -66
  1094. package/dist/index18.js +0 -35
  1095. package/dist/index180.js +0 -162
  1096. package/dist/index181.js +0 -5
  1097. package/dist/index182.js +0 -217
  1098. package/dist/index183.js +0 -5
  1099. package/dist/index184.js +0 -112
  1100. package/dist/index185.js +0 -5
  1101. package/dist/index186.js +0 -459
  1102. package/dist/index188.js +0 -6
  1103. package/dist/index19.js +0 -4
  1104. package/dist/index192.js +0 -268
  1105. package/dist/index194.js +0 -6
  1106. package/dist/index195.js +0 -124
  1107. package/dist/index197.js +0 -6
  1108. package/dist/index198.js +0 -174
  1109. package/dist/index2.js +0 -20
  1110. package/dist/index20.js +0 -9
  1111. package/dist/index200.js +0 -6
  1112. package/dist/index201.js +0 -224
  1113. package/dist/index203.js +0 -6
  1114. package/dist/index204.js +0 -135
  1115. package/dist/index206.js +0 -6
  1116. package/dist/index207.js +0 -5
  1117. package/dist/index208.js +0 -170
  1118. package/dist/index21.js +0 -35
  1119. package/dist/index210.js +0 -6
  1120. package/dist/index211.js +0 -37
  1121. package/dist/index213.js +0 -6
  1122. package/dist/index214.js +0 -63
  1123. package/dist/index216.js +0 -6
  1124. package/dist/index217.js +0 -74
  1125. package/dist/index219.js +0 -6
  1126. package/dist/index22.js +0 -6
  1127. package/dist/index220.js +0 -65
  1128. package/dist/index222.js +0 -6
  1129. package/dist/index223.js +0 -67
  1130. package/dist/index225.js +0 -6
  1131. package/dist/index226.js +0 -41
  1132. package/dist/index228.js +0 -6
  1133. package/dist/index229.js +0 -10
  1134. package/dist/index23.js +0 -7
  1135. package/dist/index230.js +0 -22
  1136. package/dist/index232.js +0 -8
  1137. package/dist/index233.js +0 -297
  1138. package/dist/index235.js +0 -6
  1139. package/dist/index236.js +0 -47
  1140. package/dist/index237.js +0 -165
  1141. package/dist/index239.js +0 -6
  1142. package/dist/index24.js +0 -9
  1143. package/dist/index241.js +0 -159
  1144. package/dist/index243.js +0 -6
  1145. package/dist/index244.js +0 -134
  1146. package/dist/index246.js +0 -6
  1147. package/dist/index247.js +0 -167
  1148. package/dist/index249.js +0 -6
  1149. package/dist/index25.js +0 -24
  1150. package/dist/index250.js +0 -147
  1151. package/dist/index252.js +0 -6
  1152. package/dist/index253.js +0 -35
  1153. package/dist/index255.js +0 -6
  1154. package/dist/index256.js +0 -65
  1155. package/dist/index258.js +0 -6
  1156. package/dist/index259.js +0 -19
  1157. package/dist/index260.js +0 -5
  1158. package/dist/index261.js +0 -160
  1159. package/dist/index263.js +0 -6
  1160. package/dist/index264.js +0 -60
  1161. package/dist/index266.js +0 -6
  1162. package/dist/index267.js +0 -134
  1163. package/dist/index269.js +0 -6
  1164. package/dist/index27.js +0 -4
  1165. package/dist/index271.js +0 -206
  1166. package/dist/index273.js +0 -6
  1167. package/dist/index274.js +0 -85
  1168. package/dist/index275.js +0 -5
  1169. package/dist/index276.js +0 -55
  1170. package/dist/index277.js +0 -5
  1171. package/dist/index278.js +0 -164
  1172. package/dist/index28.js +0 -8
  1173. package/dist/index280.js +0 -6
  1174. package/dist/index281.js +0 -145
  1175. package/dist/index283.js +0 -6
  1176. package/dist/index284.js +0 -11
  1177. package/dist/index285.js +0 -200
  1178. package/dist/index287.js +0 -6
  1179. package/dist/index288.js +0 -241
  1180. package/dist/index29.js +0 -7
  1181. package/dist/index290.js +0 -6
  1182. package/dist/index291.js +0 -21
  1183. package/dist/index293.js +0 -6
  1184. package/dist/index294.js +0 -125
  1185. package/dist/index296.js +0 -6
  1186. package/dist/index297.js +0 -161
  1187. package/dist/index299.js +0 -6
  1188. package/dist/index30.js +0 -118
  1189. package/dist/index300.js +0 -127
  1190. package/dist/index302.js +0 -6
  1191. package/dist/index303.js +0 -20
  1192. package/dist/index305.js +0 -6
  1193. package/dist/index306.js +0 -116
  1194. package/dist/index307.js +0 -5
  1195. package/dist/index308.js +0 -507
  1196. package/dist/index31.js +0 -10
  1197. package/dist/index310.js +0 -6
  1198. package/dist/index311.js +0 -196
  1199. package/dist/index313.js +0 -6
  1200. package/dist/index314.js +0 -142
  1201. package/dist/index316.js +0 -6
  1202. package/dist/index317.js +0 -134
  1203. package/dist/index319.js +0 -6
  1204. package/dist/index32.js +0 -28
  1205. package/dist/index320.js +0 -162
  1206. package/dist/index322.js +0 -6
  1207. package/dist/index323.js +0 -319
  1208. package/dist/index325.js +0 -6
  1209. package/dist/index326.js +0 -40
  1210. package/dist/index327.js +0 -43
  1211. package/dist/index328.js +0 -665
  1212. package/dist/index33.js +0 -5
  1213. package/dist/index330.js +0 -6
  1214. package/dist/index331.js +0 -155
  1215. package/dist/index333.js +0 -6
  1216. package/dist/index334.js +0 -142
  1217. package/dist/index336.js +0 -6
  1218. package/dist/index337.js +0 -155
  1219. package/dist/index339.js +0 -6
  1220. package/dist/index34.js +0 -112
  1221. package/dist/index340.js +0 -58
  1222. package/dist/index341.js +0 -5
  1223. package/dist/index342.js +0 -20
  1224. package/dist/index344.js +0 -6
  1225. package/dist/index345.js +0 -142
  1226. package/dist/index347.js +0 -6
  1227. package/dist/index349.js +0 -109
  1228. package/dist/index351.js +0 -6
  1229. package/dist/index353.js +0 -24
  1230. package/dist/index354.js +0 -23
  1231. package/dist/index355.js +0 -839
  1232. package/dist/index356.js +0 -474
  1233. package/dist/index357.js +0 -52
  1234. package/dist/index358.js +0 -7
  1235. package/dist/index36.js +0 -6
  1236. package/dist/index38.js +0 -63
  1237. package/dist/index39.js +0 -63
  1238. package/dist/index40.js +0 -9
  1239. package/dist/index42.js +0 -8
  1240. package/dist/index43.js +0 -179
  1241. package/dist/index44.js +0 -21
  1242. package/dist/index46.js +0 -385
  1243. package/dist/index48.js +0 -6
  1244. package/dist/index49.js +0 -33
  1245. package/dist/index5.js +0 -34
  1246. package/dist/index50.js +0 -12
  1247. package/dist/index51.js +0 -8
  1248. package/dist/index52.js +0 -106
  1249. package/dist/index53.js +0 -330
  1250. package/dist/index54.js +0 -97
  1251. package/dist/index55.js +0 -328
  1252. package/dist/index56.js +0 -28
  1253. package/dist/index57.js +0 -102
  1254. package/dist/index58.js +0 -157
  1255. package/dist/index6.js +0 -38
  1256. package/dist/index60.js +0 -6
  1257. package/dist/index61.js +0 -131
  1258. package/dist/index62.js +0 -5
  1259. package/dist/index65.js +0 -35
  1260. package/dist/index66.js +0 -26
  1261. package/dist/index68.js +0 -6
  1262. package/dist/index69.js +0 -54
  1263. package/dist/index7.js +0 -58
  1264. package/dist/index71.js +0 -6
  1265. package/dist/index72.js +0 -14
  1266. package/dist/index74.js +0 -6
  1267. package/dist/index75.js +0 -159
  1268. package/dist/index77.js +0 -6
  1269. package/dist/index78.js +0 -4
  1270. package/dist/index79.js +0 -4
  1271. package/dist/index80.js +0 -54
  1272. package/dist/index81.js +0 -5
  1273. package/dist/index82.js +0 -5
  1274. package/dist/index83.js +0 -141
  1275. package/dist/index85.js +0 -6
  1276. package/dist/index86.js +0 -65
  1277. package/dist/index88.js +0 -6
  1278. package/dist/index89.js +0 -30
  1279. package/dist/index9.js +0 -11
  1280. package/dist/index90.js +0 -19
  1281. package/dist/index91.js +0 -17
  1282. package/dist/index92.js +0 -9
  1283. package/dist/index93.js +0 -34
  1284. package/dist/index95.js +0 -16
  1285. package/dist/index96.js +0 -10
  1286. package/dist/index97.js +0 -18
  1287. package/dist/index98.js +0 -189
  1288. package/dist/types/VoidHtmlElements.d.ts +0 -1
  1289. package/dist/utilities/functions/add.d.ts +0 -1
  1290. package/dist/utilities/functions/booleanishToBoolean.d.ts +0 -6
  1291. package/dist/utilities/functions/capitalize.d.ts +0 -4
  1292. package/dist/utilities/functions/cloneDeep.d.ts +0 -1
  1293. package/dist/utilities/functions/debounce.d.ts +0 -1
  1294. package/dist/utilities/functions/drop.d.ts +0 -1
  1295. package/dist/utilities/functions/exceedsPrecision.d.ts +0 -1
  1296. package/dist/utilities/functions/findRight.d.ts +0 -4
  1297. package/dist/utilities/functions/findRightIndex.d.ts +0 -4
  1298. package/dist/utilities/functions/flow.d.ts +0 -1
  1299. package/dist/utilities/functions/getHueFromRGB.d.ts +0 -9
  1300. package/dist/utilities/functions/groupBy.d.ts +0 -6
  1301. package/dist/utilities/functions/gt.d.ts +0 -7
  1302. package/dist/utilities/functions/hexToRGB.d.ts +0 -7
  1303. package/dist/utilities/functions/hslToHex.d.ts +0 -1
  1304. package/dist/utilities/functions/includes.d.ts +0 -1
  1305. package/dist/utilities/functions/initial.d.ts +0 -1
  1306. package/dist/utilities/functions/isCssColor.d.ts +0 -5
  1307. package/dist/utilities/functions/lt.d.ts +0 -7
  1308. package/dist/utilities/functions/makeUrl.d.ts +0 -1
  1309. package/dist/utilities/functions/mapKeys.d.ts +0 -5
  1310. package/dist/utilities/functions/mapValues.d.ts +0 -1
  1311. package/dist/utilities/functions/matchesPropertyInsensitive.d.ts +0 -1
  1312. package/dist/utilities/functions/max.d.ts +0 -2
  1313. package/dist/utilities/functions/mean.d.ts +0 -4
  1314. package/dist/utilities/functions/merge.d.ts +0 -11
  1315. package/dist/utilities/functions/millisecondsTo.d.ts +0 -1
  1316. package/dist/utilities/functions/negate.d.ts +0 -4
  1317. package/dist/utilities/functions/normalizeItemGroups.d.ts +0 -13
  1318. package/dist/utilities/functions/omit.d.ts +0 -2
  1319. package/dist/utilities/functions/overEvery.d.ts +0 -4
  1320. package/dist/utilities/functions/pick.d.ts +0 -1
  1321. package/dist/utilities/functions/replace.d.ts +0 -1
  1322. package/dist/utilities/functions/replaceInTree.d.ts +0 -4
  1323. package/dist/utilities/functions/retry.d.ts +0 -5
  1324. package/dist/utilities/functions/roundToTheNearest.d.ts +0 -8
  1325. package/dist/utilities/functions/set.d.ts +0 -15
  1326. package/dist/utilities/functions/stub.d.ts +0 -6
  1327. package/dist/utilities/functions/transposePercent.d.ts +0 -9
  1328. package/dist/utilities/functions/tryTo.d.ts +0 -2
  1329. package/dist/utilities/functions/uniqBy.d.ts +0 -1
  1330. /package/dist/{index64.js → _virtual/_plugin-vue_export-helper.js} +0 -0
  1331. /package/dist/components/{BaseButton → BbBaseButton}/RouterComponent.vue.d.ts +0 -0
  1332. /package/dist/components/{BaseDatePicker/BaseDatePicker.vue.d.ts → BbBaseDatePicker/BbBaseDatePicker.vue.d.ts} +0 -0
  1333. /package/dist/{index165.js → composables/useArray.js} +0 -0
  1334. /package/dist/{index17.js → composables/useFrameworkDetection.js} +0 -0
  1335. /package/dist/{index12.js → composables/useId.js} +0 -0
  1336. /package/dist/{index352.js → directives/createPopoverDirective.js} +0 -0
  1337. /package/dist/{index107.js → utilities/functions/chunk.js} +0 -0
  1338. /package/dist/{index8.js → utilities/functions/clamp.js} +0 -0
  1339. /package/dist/{index150.js → utilities/functions/curry.js} +0 -0
  1340. /package/dist/{index45.js → utilities/functions/extractDomContainer.js} +0 -0
  1341. /package/dist/{index270.js → utilities/functions/findInTree.js} +0 -0
  1342. /package/dist/{index348.js → utilities/functions/flattenTree.js} +0 -0
  1343. /package/dist/{index41.js → utilities/functions/get.js} +0 -0
  1344. /package/dist/{index189.js → utilities/functions/head.js} +0 -0
  1345. /package/dist/{index108.js → utilities/functions/identity.js} +0 -0
  1346. /package/dist/{index179.js → utilities/functions/indexBy.js} +0 -0
  1347. /package/dist/{index37.js → utilities/functions/isHex.js} +0 -0
  1348. /package/dist/{index94.js → utilities/functions/isNil.js} +0 -0
  1349. /package/dist/{index26.js → utilities/functions/isNotNil.js} +0 -0
  1350. /package/dist/{index105.js → utilities/functions/last.js} +0 -0
  1351. /package/dist/{index142.js → utilities/functions/noop.js} +0 -0
  1352. /package/dist/{index231.js → utilities/functions/parseWidthString.js} +0 -0
  1353. /package/dist/{index240.js → utilities/functions/pickBy.js} +0 -0
  1354. /package/dist/{index123.js → utilities/functions/range.js} +0 -0
  1355. /package/dist/{index190.js → utilities/functions/snapToStep.js} +0 -0
  1356. /package/dist/{index191.js → utilities/functions/transpose.js} +0 -0
  1357. /package/dist/{index106.js → utilities/functions/validateDateFormat.js} +0 -0
  1358. /package/dist/{index10.js → utilities/functions/wait.js} +0 -0
@@ -0,0 +1,1281 @@
1
+ ---
2
+ title: Ownership Atlas (Inertia)
3
+ summary: Nested-table ownership atlas for Laravel + Inertia — expandable owner rows whose holdings render as a child BbTable snapped onto the parent's column tracks (inherit-column-widths + per-column snap), select-all-across-pages bulk transfer, region-visit tabs, URL-mirrored filters, expand/collapse-all, and a row-highlight owner peek, all through one page context that coopts the Inertia Helpers toolkit.
4
+ ---
5
+
6
+ # Recipe: Ownership Atlas (Inertia)
7
+
8
+ A resource-ownership admin page for **Laravel + Inertia** — the "who owns
9
+ what" screen every internal console grows (Okta's people → assigned
10
+ resources, a cloud console's cost-by-owner rollup): a dense, server-paged
11
+ table of owners where **expanding a row reveals a nested `BbTable` of the
12
+ holdings that owner is responsible for, column-aligned under the parent's
13
+ own tracks**. Around that signature move sits the full standard anatomy:
14
+ breadcrumbs + page search, a holding-type filter pill, region tabs with live
15
+ counts, expand/collapse-all controls, selection with a floating bulk
16
+ **Transfer holdings** action, and an owner peek sidebar opened by row
17
+ highlight. The list is a page prop, filters mirror into the URL through
18
+ [`useQueryObject`](../../guides/inertia-helpers.md), selection and paging
19
+ come from the keyed [`useTableContext`](../../guides/inertia-helpers.md),
20
+ and the one mutation is a promise-wrapped `router.visit`. Anatomy,
21
+ components, the context shape, copy and data are identical to the Vue
22
+ recipe; only the data/URL/mutation layer changes.
23
+
24
+ Sibling recipes: [Vue](../vue/ownership-atlas.md) ·
25
+ [Nuxt](../nuxt/ownership-atlas.md).
26
+
27
+ ## Prerequisites
28
+
29
+ - `<BbToast />` mounted once in the app layout.
30
+ - From the [Inertia Helpers](../../guides/inertia-helpers.md) toolkit:
31
+ `useTableContext`, `useQueryObject`, `useResourceContext` (plus the
32
+ `useProp` / `useQuery` prop-and-URL helpers).
33
+ - Controller: `Inertia::render('OwnershipAtlas', ['owners' =>
34
+ OwnerPaginator::make(...), 'tabCounts' => [...], 'ownerOptions' => [...]])` —
35
+ `owners` is a standard Laravel paginator (`PaginatedResponse<Owner>`) whose
36
+ rows **embed their holdings** (the expand row renders instantly, no
37
+ per-expand fetch), `tabCounts` a plain `{ all, americas, emea, apac }` map,
38
+ and `ownerOptions` the flat `{ id, name, team }` catalog the transfer
39
+ picker offers. All three are re-sent on the partial reloads the page
40
+ triggers. The `kinds` filter is applied to the holdings server-side: owners
41
+ with no matching holding drop out, and each surviving owner's
42
+ `holdingsCount` / `monthlyTotal` are recomputed over the filtered set.
43
+ Search matches owner name, email, team **and** holding names.
44
+ - Mutation route: `PATCH /ownership/owners/bulk/transfer` (accepts the
45
+ select-all-across-pages payload `{ ids, all, unselected, toOwnerId }`,
46
+ redirects back). A small JSON endpoint
47
+ (`GET /ownership/owners/:id/peek`) backs the sidebar peek so opening it is
48
+ not a full-page visit.
49
+
50
+ ## Key ideas
51
+
52
+ - **One coopting page context.** `provideOwnershipAtlas()` joins the
53
+ page-shell stack **and** the keyed `useTableContext('owners')` once, owns
54
+ filters/tab/expansion, and exposes complete actions. Every leaf calls
55
+ `useOwnershipAtlas()` and nothing else — zero prop drilling anywhere on
56
+ the page.
57
+ - **The expand row is a real nested `BbTable` that inherits the parent's
58
+ column tracks.** `inherit-column-widths` snaps the holdings table onto the
59
+ owners table's grid; because the parent is `selectable`, every child
60
+ column carries an explicit `snap` starting at `1` (`snap: 1…4`), so
61
+ Resource sits exactly under Owner and the right-aligned $/mo columns share
62
+ one edge. This is the recipe's signature move — the full defense is in
63
+ "Why it is built this way" and in the
64
+ [BbTable guide](../../BbTable.md) ("Nested tables that align with the
65
+ parent").
66
+ - **Page-level cell-padding overrides are scoped with direct-child
67
+ combinators.** The full-bleed treatment (`.table-flush`) pads the outer
68
+ table's first/last cells via `:deep(> table > thead > tr > th:first-child)`
69
+ — a bare descendant selector would also hit the nested table and clobber
70
+ the structural offset padding it computes to stay flush with the parent
71
+ grid.
72
+ - **Expansion is page state, not table-internal state.** `expanded` (owner
73
+ ids) lives in the context and binds through `v-model:expanded-items`, so
74
+ the toolbar (expand-all/collapse-all), the bulk bar (expand selected) and
75
+ the peek footer (expand in table) all write the same array the table
76
+ reads.
77
+ - **Row highlight IS the peek.** A two-way computed maps
78
+ `v-model:highlighted` onto the shell stack: clicking a row opens the owner
79
+ peek, clicking it again (or closing the sidebar) clears the highlight —
80
+ highlight and selection stay independent axes.
81
+ - **The table has no client-side fetch at all.** `owners` arrives as a page
82
+ prop; `useTableContext('owners')` turns it into `items` +
83
+ `totalItems`/`page`/`perPage` (URL-backed) + `selected`/`unselected`/`all`
84
+ (select-all-across-pages), and `BbTable` binds directly to that handle.
85
+ Filters mirror into the URL with `useQueryObject`; tabs are real visits
86
+ (`href` + `server: true` with component-level `navigation`).
87
+ - **The one mutation is a promise-wrapped `router.visit`.** A tiny local
88
+ `visit()` helper turns Inertia's callback API into a promise so
89
+ `bulkTransfer` stays an `async function` — identical call site to the
90
+ Vue/Nuxt versions.
91
+ - **Buttons are `md` by default**; `sm`/`xs` only in the toolbar, the table
92
+ rows, the peek footer and the bottom bar — the dense surfaces the
93
+ doctrine allows.
94
+
95
+ ## Page anatomy
96
+
97
+ ```
98
+ OwnershipAtlas/
99
+ Index.vue ← assembly: PageShell slots, toolbar, owners table, pagination
100
+ context.ts ← coopting page context (shell + useTableContext + filters + expansion + actions)
101
+ FilterRail.vue ← holding-type pill + clear-all
102
+ HoldingsTable.vue ← the nested BbTable, snapped onto the parent's tracks
103
+ SelectionBar.vue ← expand-selected + bulk transfer in the floating bottom panel
104
+ OwnerPeek.vue ← sidebar workbench for the highlighted owner
105
+ ```
106
+
107
+ Chrome assumed from the guides: [App Layout](../../guides/app-layout.md)
108
+ (left nav + fat footer), [Page Shell](../../guides/page-shell.md),
109
+ [Floating Bottom Panel](../../guides/floating-bottom-panel.md).
110
+
111
+ ## Action inventory
112
+
113
+ | # | Action | Trigger | Mechanism |
114
+ | --- | --------------------------- | ------------------------------------ | --------------------------------------------------------- |
115
+ | 1 | Page search | topbar right | `filters.search` → `useQueryObject` partial visit |
116
+ | 2 | Filter holding type | filter rail pill | `BbSelectPopover` multiple over the kind catalog |
117
+ | 3 | Clear filters | rail (only when active), empty state | context `clearFilters()` |
118
+ | 4 | Switch region tab | server-visit tabs with counts | `BbTabs` `href` + `server: true` visit |
119
+ | 5 | Expand / collapse one owner | holdings-count control, actions col | `expandProps` toggle → `v-model:expanded-items` |
120
+ | 6 | Expand all on this page | toolbar icon button | `expandAllOnPage()` over the current page's rows |
121
+ | 7 | Collapse all | toolbar icon button | `collapseAll()` |
122
+ | 8 | Peek owner | click anywhere on a row | `v-model:highlighted` ↔ shell stack, JSON fetch |
123
+ | 9 | Expand in table | peek footer | adds the peeked owner to `expanded` |
124
+ | 10 | Select rows / select all | table checkboxes | `useTableContext` selection (across pages) |
125
+ | 11 | Expand selected | floating bottom panel | `expandSelected()` resolves the selection payload |
126
+ | 12 | Bulk transfer holdings | bottom panel one-shot popover | `bulkTransfer(toOwnerId)` → promise-wrapped visit + toast |
127
+ | 13 | Clear selection / paginate | bottom panel ×, `BbPagination` | `table.resetSelection()` / `table.page` v-model |
128
+
129
+ ## The code
130
+
131
+ ### context.ts
132
+
133
+ ```ts
134
+ // OwnershipAtlas/context.ts
135
+ import {
136
+ computed,
137
+ inject,
138
+ provide,
139
+ reactive,
140
+ ref,
141
+ type ComputedRef,
142
+ type InjectionKey,
143
+ type Ref,
144
+ } from 'vue';
145
+ import { router } from '@inertiajs/vue3';
146
+ import type { RequestPayload } from '@inertiajs/core';
147
+ import { useToast, type BadgeVariantType } from 'bitboss-ui';
148
+ import {
149
+ usePageShellContext,
150
+ type PageShellContext,
151
+ } from '@/components/layout/usePageShellContext';
152
+ import {
153
+ useTableContext,
154
+ type TableContext,
155
+ } from '@/composables/useTableContext';
156
+ import { useQueryObject } from '@/composables/useQueryObject';
157
+ import { useProp } from '@/composables/useProp';
158
+ import { useQuery } from '@/composables/useQuery';
159
+ import type {
160
+ HoldingKind,
161
+ HoldingStatus,
162
+ Owner,
163
+ OwnerDetail,
164
+ OwnerOption,
165
+ OwnerRegion,
166
+ } from '@/types';
167
+
168
+ export type OwnershipTab = 'all' | OwnerRegion;
169
+
170
+ /** What the sidebar can show. Row highlight pushes one of these. */
171
+ export type PeekItem = { type: 'owner'; id: string };
172
+
173
+ export interface OwnershipFilters {
174
+ search: string;
175
+ kinds: HoldingKind[];
176
+ }
177
+
178
+ // Shared label/variant catalogs: defined once beside the context, imported
179
+ // by every leaf that renders a kind, status or region.
180
+ export const KIND_LABEL: Record<HoldingKind, string> = {
181
+ workspace: 'Workspace',
182
+ project: 'Project',
183
+ domain: 'Domain',
184
+ database: 'Database',
185
+ vault: 'Vault',
186
+ device: 'Device',
187
+ 'seat-pool': 'Seat pool',
188
+ bucket: 'Bucket',
189
+ };
190
+
191
+ export const STATUS_LABEL: Record<HoldingStatus, string> = {
192
+ active: 'Active',
193
+ paused: 'Paused',
194
+ provisioning: 'Provisioning',
195
+ retired: 'Retired',
196
+ };
197
+
198
+ export const STATUS_VARIANT: Record<HoldingStatus, BadgeVariantType> = {
199
+ active: 'soft-green',
200
+ paused: 'soft-amber',
201
+ provisioning: 'soft-blue',
202
+ retired: 'soft-gray',
203
+ };
204
+
205
+ export const REGION_LABEL: Record<OwnerRegion, string> = {
206
+ americas: 'Americas',
207
+ emea: 'EMEA',
208
+ apac: 'APAC',
209
+ };
210
+
211
+ const RELOAD_PROPS = ['owners', 'tabCounts', 'ownerOptions'] as const;
212
+
213
+ /** Comma-joined query value → typed array (or [] when absent). */
214
+ const toArray = <T = string>(value: unknown): T[] => {
215
+ if (Array.isArray(value)) return value as T[];
216
+ if (typeof value === 'string' && value.length) return value.split(',') as T[];
217
+ return [];
218
+ };
219
+
220
+ export interface OwnershipAtlasContext {
221
+ // -- Coopted contexts ------------------------------------------------------
222
+ shell: PageShellContext<PeekItem>;
223
+ table: TableContext<Owner, string>;
224
+ // -- Page-owned state ------------------------------------------------------
225
+ filters: OwnershipFilters;
226
+ hasActiveFilters: ComputedRef<boolean>;
227
+ tab: Ref<OwnershipTab>;
228
+ tabCounts: ComputedRef<Record<OwnershipTab, number>>;
229
+ /** Transfer-target catalog — every owner, not just the current page. */
230
+ ownerOptions: ComputedRef<OwnerOption[]>;
231
+ /** Owner ids currently expanded — drives the nested holdings tables. */
232
+ expanded: Ref<string[]>;
233
+ /** Bumped after every mutation — the peek watches it to re-fetch. */
234
+ refreshKey: Ref<number>;
235
+ // -- Data ------------------------------------------------------------------
236
+ fetchOwner: (id: string) => Promise<OwnerDetail>;
237
+ // -- Actions ---------------------------------------------------------------
238
+ clearFilters: () => void;
239
+ expandAllOnPage: () => void;
240
+ collapseAll: () => void;
241
+ expandSelected: () => void;
242
+ peekOwner: (id: string) => void;
243
+ bulkTransfer: (toOwnerId: string) => Promise<void>;
244
+ }
245
+
246
+ const key: InjectionKey<OwnershipAtlasContext> = Symbol('ownership-atlas');
247
+
248
+ /** Inertia's callback-based visit, wrapped as a promise — so the context
249
+ * action stays `async`, exactly like the Vue/Nuxt versions. Always a
250
+ * partial reload of the props this page depends on. */
251
+ const visit = (
252
+ method: 'post' | 'put' | 'patch' | 'delete',
253
+ url: string,
254
+ // Inertia's own payload type — strings/numbers/booleans/arrays/files.
255
+ data: RequestPayload = {}
256
+ ): Promise<void> =>
257
+ new Promise((resolve, reject) => {
258
+ router.visit(url, {
259
+ method,
260
+ data,
261
+ only: [...RELOAD_PROPS],
262
+ preserveScroll: true,
263
+ preserveState: true,
264
+ onSuccess: () => resolve(),
265
+ onError: (errors) => reject(errors),
266
+ });
267
+ });
268
+
269
+ export function provideOwnershipAtlas(): OwnershipAtlasContext {
270
+ const { toast } = useToast();
271
+
272
+ // -- Coopt the specific contexts: once, here, for the whole page. ----------
273
+ const shell = usePageShellContext<PeekItem>();
274
+ // `Owner, string`: BbTable's `item-value="id"` resolves selection to owner
275
+ // ids ('own_…'), matching the Vue/Nuxt `table.selected: string[]` shape.
276
+ const table = useTableContext<Owner, string>('owners');
277
+
278
+ // -- Filters: seeded from the current URL, mirrored back by useQueryObject. -
279
+ const query = useQuery();
280
+ const filters = reactive<OwnershipFilters>({
281
+ search: (query.search as string) ?? '',
282
+ kinds: toArray<HoldingKind>(query.kinds),
283
+ });
284
+ useQueryObject(filters, { only: [...RELOAD_PROPS] });
285
+
286
+ const hasActiveFilters = computed(
287
+ () => filters.search.trim().length > 0 || filters.kinds.length > 0
288
+ );
289
+ const clearFilters = () => {
290
+ filters.search = '';
291
+ filters.kinds = [];
292
+ };
293
+
294
+ // Tab: seeded from the URL; BbTabs' own `href` + `server` visit updates
295
+ // the URL, and its `v-model` write keeps this ref in sync with the click.
296
+ const tab = ref<OwnershipTab>((query.tab as OwnershipTab) ?? 'all');
297
+ const tabCounts = useProp<Record<OwnershipTab, number>>('tabCounts');
298
+ const ownerOptions = useProp<OwnerOption[]>('ownerOptions');
299
+
300
+ // -- Expansion: page state, one array, many writers. -----------------------
301
+ // The toolbar, the bulk bar and the peek all mutate this; the table binds
302
+ // it via `v-model:expanded-items`. Deliberately NOT in the URL: which rows
303
+ // are unfolded is working posture, not a shareable view.
304
+ const expanded = ref<string[]>([]);
305
+
306
+ const expandAllOnPage = () => {
307
+ expanded.value = table.items.value.map((owner) => owner.id);
308
+ };
309
+
310
+ const collapseAll = () => {
311
+ expanded.value = [];
312
+ };
313
+
314
+ // Bulk expand honors select-all-across-pages semantics, but can only unfold
315
+ // rows that are actually rendered — so it resolves against the current page.
316
+ const expandSelected = () => {
317
+ const ids = table.all.value
318
+ ? table.items.value
319
+ .map((owner) => owner.id)
320
+ .filter((id) => !table.unselected.value.includes(id))
321
+ : [...table.selected.value];
322
+ expanded.value = [...new Set([...expanded.value, ...ids])];
323
+ };
324
+
325
+ const peekOwner = (id: string) => shell.push({ type: 'owner', id }, true);
326
+
327
+ const refreshKey = ref(0);
328
+
329
+ // Bulk payload carries the full select-all-across-pages triple — the
330
+ // server combines `all` + `unselected` the same way BbTable does.
331
+ const bulkPayload = () => ({
332
+ ids: table.selected.value,
333
+ all: table.all.value,
334
+ unselected: table.unselected.value,
335
+ });
336
+
337
+ const bulkTransfer = async (toOwnerId: string) => {
338
+ const target = ownerOptions.value.find((owner) => owner.id === toOwnerId);
339
+ await visit('patch', '/ownership/owners/bulk/transfer', {
340
+ ...bulkPayload(),
341
+ toOwnerId,
342
+ });
343
+ refreshKey.value++;
344
+ table.resetSelection();
345
+ toast({
346
+ title: `Holdings transferred to ${target?.name ?? 'the selected owner'}.`,
347
+ variant: 'success',
348
+ });
349
+ };
350
+
351
+ // A small JSON endpoint, not a page visit — opening the peek never
352
+ // re-renders the list underneath it.
353
+ const fetchOwner = (id: string): Promise<OwnerDetail> =>
354
+ fetch(`/ownership/owners/${id}/peek`).then((res) => res.json());
355
+
356
+ const ctx: OwnershipAtlasContext = {
357
+ shell,
358
+ table,
359
+ filters,
360
+ hasActiveFilters,
361
+ tab,
362
+ tabCounts,
363
+ ownerOptions,
364
+ expanded,
365
+ refreshKey,
366
+ fetchOwner,
367
+ clearFilters,
368
+ expandAllOnPage,
369
+ collapseAll,
370
+ expandSelected,
371
+ peekOwner,
372
+ bulkTransfer,
373
+ };
374
+ provide(key, ctx);
375
+ return ctx;
376
+ }
377
+
378
+ export function useOwnershipAtlas(): OwnershipAtlasContext {
379
+ const ctx = inject(key);
380
+ if (!ctx)
381
+ throw new Error('useOwnershipAtlas() called outside OwnershipAtlas');
382
+ return ctx;
383
+ }
384
+ ```
385
+
386
+ ### Index.vue — the assembly
387
+
388
+ ```vue
389
+ <!-- OwnershipAtlas/Index.vue -->
390
+ <template>
391
+ <PageShell>
392
+ <!-- Topbar: breadcrumbs left, page search right. No creation action on
393
+ this page, so no primary button anywhere. -->
394
+ <template #topbar>
395
+ <div class="flex items-center justify-between gap-4 border-b px-4 py-2">
396
+ <!-- Breadcrumbs take the row's slack on a stable basis (min-w-0 flex-auto);
397
+ without it their overflow recompute fights the flex layout every frame. -->
398
+ <BbBreadcrumbs
399
+ class="min-w-0 flex-auto"
400
+ :items="[
401
+ { key: 'admin', text: 'Admin', href: '/admin' },
402
+ { key: 'access', text: 'Access', href: '/access' },
403
+ { key: 'ownership', text: 'Ownership' },
404
+ ]"
405
+ />
406
+ <BbTextInput
407
+ v-model="ctx.filters.search"
408
+ class="shrink-0"
409
+ clearable
410
+ compact
411
+ hide-label
412
+ label="Search owners or holdings"
413
+ placeholder="Search owner, team, or resource…"
414
+ prepend:icon="lucide:search"
415
+ />
416
+ </div>
417
+ </template>
418
+
419
+ <div class="flex flex-col gap-3 p-4">
420
+ <FilterRail />
421
+
422
+ <!-- Toolbar row: region tabs share the line with the expansion
423
+ controls — expansion is page furniture, not a row concern. -->
424
+ <div class="flex items-center gap-2">
425
+ <div class="min-w-0 flex-1 overflow-clip">
426
+ <!-- Tabs are real visits: href + server (component-level
427
+ `navigation` is required alongside per-item `server`). The
428
+ transfer catalog can't change with the tab, so `ownerOptions`
429
+ stays out of the tab reload list. -->
430
+ <BbTabs
431
+ v-model="ctx.tab.value"
432
+ compact
433
+ :items="[
434
+ {
435
+ key: 'all',
436
+ label: `All · ${ctx.tabCounts.value.all}`,
437
+ href: '/ownership?tab=all',
438
+ server: true,
439
+ only: ['owners', 'tabCounts'],
440
+ },
441
+ {
442
+ key: 'americas',
443
+ label: `Americas · ${ctx.tabCounts.value.americas}`,
444
+ href: '/ownership?tab=americas',
445
+ server: true,
446
+ only: ['owners', 'tabCounts'],
447
+ },
448
+ {
449
+ key: 'emea',
450
+ label: `EMEA · ${ctx.tabCounts.value.emea}`,
451
+ href: '/ownership?tab=emea',
452
+ server: true,
453
+ only: ['owners', 'tabCounts'],
454
+ },
455
+ {
456
+ key: 'apac',
457
+ label: `APAC · ${ctx.tabCounts.value.apac}`,
458
+ href: '/ownership?tab=apac',
459
+ server: true,
460
+ only: ['owners', 'tabCounts'],
461
+ },
462
+ ]"
463
+ navigation
464
+ preserve-scroll
465
+ preserve-state
466
+ replace
467
+ />
468
+ </div>
469
+ <div class="flex shrink-0 items-center gap-0.5">
470
+ <BbButton
471
+ v-bb-tooltip="{ text: 'Expand all on this page', delay: 400 }"
472
+ aria-label="Expand all on this page"
473
+ icon="lucide:chevrons-down"
474
+ size="sm"
475
+ variant="ghost"
476
+ @click="ctx.expandAllOnPage"
477
+ />
478
+ <BbButton
479
+ v-bb-tooltip="{ text: 'Collapse all', delay: 400 }"
480
+ aria-label="Collapse all"
481
+ icon="lucide:chevrons-up"
482
+ size="sm"
483
+ variant="ghost"
484
+ @click="ctx.collapseAll"
485
+ />
486
+ </div>
487
+ </div>
488
+
489
+ <!-- No dependencies/items-fn: `owners` is a page prop, and selection
490
+ (across pages) binds straight onto the keyed table context.
491
+ `fixed` gives the parent equal-width tracks — a predictable grid
492
+ for the nested table to snap onto. -->
493
+ <BbTable
494
+ v-model="ctx.table.selected.value"
495
+ v-model:expanded-items="ctx.expanded.value"
496
+ v-model:highlighted="highlightedOwner"
497
+ v-model:select-all="ctx.table.all.value"
498
+ v-model:unselected-items="ctx.table.unselected.value"
499
+ actions
500
+ actions-text="Holdings"
501
+ caption="Resource owners"
502
+ class="table-flush"
503
+ :columns="columns"
504
+ compact
505
+ fixed
506
+ item-value="id"
507
+ :items="ctx.table.items.value"
508
+ loading-text="Loading owners…"
509
+ :row-class="rowClass"
510
+ selectable
511
+ >
512
+ <template #name="{ item, content }">
513
+ <div class="flex min-w-0 flex-col leading-tight">
514
+ <span class="font-semibold">{{ content }}</span>
515
+ <span class="truncate text-xs text-gray-500">{{ item.email }}</span>
516
+ </div>
517
+ </template>
518
+
519
+ <template #team="{ item, content }">
520
+ <div class="flex min-w-0 flex-col leading-tight">
521
+ <span>{{ content }}</span>
522
+ <span class="truncate text-xs text-gray-500">{{ item.title }}</span>
523
+ </div>
524
+ </template>
525
+
526
+ <template #region="{ item }">
527
+ <span class="text-xs text-gray-500">{{
528
+ REGION_LABEL[item.region]
529
+ }}</span>
530
+ </template>
531
+
532
+ <template #monthlytotal="{ content }">
533
+ <span class="tabular-nums">{{ money(content) }}</span>
534
+ </template>
535
+
536
+ <!-- The actions column IS the expand control: the holdings count
537
+ doubles as the toggle, `expandProps` wires aria + keyboard. -->
538
+ <template #actions="{ item, expanded: isOpen, expandProps }">
539
+ <BbButton
540
+ v-bind="expandProps"
541
+ :append:icon="isOpen ? 'lucide:chevron-up' : 'lucide:chevron-down'"
542
+ :aria-label="
543
+ isOpen
544
+ ? `Collapse ${item.holdingsCount} holdings`
545
+ : `Expand ${item.holdingsCount} holdings`
546
+ "
547
+ size="xs"
548
+ variant="ghost"
549
+ >
550
+ <span class="tabular-nums">{{ item.holdingsCount }}</span>
551
+ </BbButton>
552
+ </template>
553
+
554
+ <!-- The signature move: a nested BbTable that inherits this
555
+ table's column tracks. -->
556
+ <template #expand="{ item }">
557
+ <HoldingsTable :owner="item" />
558
+ </template>
559
+
560
+ <template #no-data>
561
+ <div
562
+ class="mx-auto flex max-w-sm flex-col items-center gap-3 px-6 py-12 text-center"
563
+ >
564
+ <BbIcon
565
+ class="text-gray-400"
566
+ :icon="
567
+ ctx.hasActiveFilters.value ? 'lucide:search-x' : 'lucide:layers'
568
+ "
569
+ size="2xl"
570
+ />
571
+ <p class="text-sm font-semibold">
572
+ {{
573
+ ctx.hasActiveFilters.value
574
+ ? 'No matching owners'
575
+ : 'No owners in this region'
576
+ }}
577
+ </p>
578
+ <p class="text-xs text-gray-500">
579
+ {{
580
+ ctx.hasActiveFilters.value
581
+ ? 'Clear the holding-type filter, or widen search.'
582
+ : 'Switch tabs to another region.'
583
+ }}
584
+ </p>
585
+ <BbButton
586
+ v-if="ctx.hasActiveFilters.value"
587
+ prepend:icon="lucide:x"
588
+ size="sm"
589
+ variant="outline"
590
+ @click="ctx.clearFilters"
591
+ >
592
+ Clear filters
593
+ </BbButton>
594
+ </div>
595
+ </template>
596
+ </BbTable>
597
+
598
+ <!-- No table-id: the keyed table context is the page count here. -->
599
+ <BbPagination
600
+ v-model="ctx.table.page.value"
601
+ label="Owners pagination"
602
+ :total-pages="ctx.table.totalPages.value"
603
+ />
604
+ </div>
605
+
606
+ <SelectionBar />
607
+
608
+ <!-- The peek: rendered by type; row highlight drives the stack. -->
609
+ <template #sidebar>
610
+ <OwnerPeek
611
+ v-if="ctx.shell.current.value?.type === 'owner'"
612
+ :owner-id="ctx.shell.current.value.id"
613
+ />
614
+ </template>
615
+ </PageShell>
616
+ </template>
617
+
618
+ <script setup lang="ts">
619
+ import { computed } from 'vue';
620
+ import {
621
+ BbBreadcrumbs,
622
+ BbButton,
623
+ BbIcon,
624
+ BbPagination,
625
+ BbTable,
626
+ BbTabs,
627
+ BbTextInput,
628
+ vBbTooltip,
629
+ type BbTableColumn,
630
+ } from 'bitboss-ui';
631
+ import PageShell from '@/components/layout/PageShell.vue';
632
+ import { provideOwnershipAtlas, REGION_LABEL } from './context';
633
+ import FilterRail from './FilterRail.vue';
634
+ import HoldingsTable from './HoldingsTable.vue';
635
+ import OwnerPeek from './OwnerPeek.vue';
636
+ import SelectionBar from './SelectionBar.vue';
637
+ import type { Owner } from '@/types';
638
+
639
+ const ctx = provideOwnershipAtlas();
640
+
641
+ /** Row highlight IS the peek: clicking a row opens owner detail in the
642
+ * sidebar; clicking it again (BbTable clears the highlight) closes it. */
643
+ const highlightedOwner = computed<string | null>({
644
+ get: () =>
645
+ ctx.shell.current.value?.type === 'owner'
646
+ ? ctx.shell.current.value.id
647
+ : null,
648
+ set: (id) => {
649
+ if (id == null) ctx.shell.close();
650
+ else ctx.peekOwner(id);
651
+ },
652
+ });
653
+
654
+ /** Four data columns — the nested holdings table snaps onto them 1:1. The
655
+ * owner's title rides under Team; the holdings count lives on the expand
656
+ * control in the actions column. */
657
+ const columns: Array<BbTableColumn<Owner>> = [
658
+ { key: 'name', label: 'Owner' },
659
+ { key: 'team', label: 'Team' },
660
+ { key: 'region', label: 'Region' },
661
+ { key: 'monthlyTotal', label: '$ / mo', align: 'right' },
662
+ ];
663
+
664
+ const money = (value: number) =>
665
+ new Intl.NumberFormat('en-US', {
666
+ style: 'currency',
667
+ currency: 'USD',
668
+ maximumFractionDigits: 0,
669
+ }).format(value);
670
+
671
+ // Public row-class API paints every row state: the base class carries the
672
+ // pointer cursor (rows are click targets — highlight opens the peek), the
673
+ // conditional classes carry the expanded / peek-open washes.
674
+ const rowClass = (item: Owner) => {
675
+ const classes = ['owner-row'];
676
+ if (ctx.expanded.value.includes(item.id)) classes.push('row-expanded');
677
+ if (highlightedOwner.value === item.id) classes.push('row-peeked');
678
+ return classes.join(' ');
679
+ };
680
+ </script>
681
+
682
+ <style scoped>
683
+ /* Full-bleed table: mirror the content wrapper's `p-4` so row washes and the
684
+ nested table run edge to edge, while the outermost cells keep the optical
685
+ margin — content stays lined up with the filter rail and tabs above. */
686
+ .table-flush {
687
+ --page-inset: 1rem;
688
+ margin-inline: calc(var(--page-inset) * -1);
689
+ width: calc(100% + var(--page-inset) * 2);
690
+ }
691
+
692
+ /* Direct-child combinators keep these overrides on the OWNER table's own
693
+ cells. A bare `:deep(tbody td:first-child)` would also match the nested
694
+ holdings table and clobber the structural offset padding it computes to
695
+ stay flush with the parent grid — the one selector mistake that silently
696
+ breaks nested-table alignment. */
697
+ .table-flush :deep(> table > thead > tr > th:first-child),
698
+ .table-flush
699
+ :deep(> table > tbody > tr > td:first-child:not(.bb-table-expand__cell)) {
700
+ padding-inline-start: var(--page-inset);
701
+ }
702
+
703
+ .table-flush :deep(> table > thead > tr > th:last-child),
704
+ .table-flush
705
+ :deep(> table > tbody > tr > td:last-child:not(.bb-table-expand__cell)) {
706
+ padding-inline-end: var(--page-inset);
707
+ }
708
+
709
+ /* Expand rows stay edge-to-edge so the nested table can inherit the parent
710
+ tracks without an extra inset shifting everything sideways. */
711
+ .table-flush :deep(> table > tbody > tr > td.bb-table-expand__cell) {
712
+ padding-inline: 0;
713
+ }
714
+
715
+ /* Row states, painted through the public row-class API. */
716
+ :deep(.owner-row) {
717
+ cursor: pointer;
718
+ }
719
+
720
+ /* Expanded = hierarchy only: a quiet ink wash, no accent. */
721
+ :deep(.row-expanded) {
722
+ background-color: color-mix(in oklab, var(--bb-text) 2.5%, transparent);
723
+ }
724
+
725
+ /* Peek-open = accent wash + a 1px lead pin on the row's start edge. */
726
+ :deep(.row-peeked) {
727
+ background-color: color-mix(in oklab, var(--bb-primary) 6%, transparent);
728
+ box-shadow: inset 1px 0 0 0 var(--bb-primary);
729
+ }
730
+ </style>
731
+ ```
732
+
733
+ ### HoldingsTable.vue — the nested table
734
+
735
+ ```vue
736
+ <!-- OwnershipAtlas/HoldingsTable.vue — nested BbTable snapped under the owner. -->
737
+ <template>
738
+ <div class="holdings-nest">
739
+ <BbTable
740
+ :caption="`Holdings owned by ${owner.name}`"
741
+ class="w-full"
742
+ :columns="columns"
743
+ compact
744
+ inherit-column-widths
745
+ item-value="id"
746
+ :items="owner.holdings"
747
+ >
748
+ <template #name="{ item, content }">
749
+ <div class="flex min-w-0 flex-col leading-tight">
750
+ <span class="font-semibold">{{ content }}</span>
751
+ <span class="text-xs text-gray-500">
752
+ Since {{ monthLabel(item.since) }} · {{ item.region }}
753
+ </span>
754
+ </div>
755
+ </template>
756
+
757
+ <template #kind="{ item }">
758
+ <span class="text-xs text-gray-500">{{ KIND_LABEL[item.kind] }}</span>
759
+ </template>
760
+
761
+ <template #status="{ item }">
762
+ <BbBadge size="sm" :variant="STATUS_VARIANT[item.status]">
763
+ {{ STATUS_LABEL[item.status] }}
764
+ </BbBadge>
765
+ </template>
766
+
767
+ <template #monthlycost="{ content }">
768
+ <span class="tabular-nums">{{ money(content) }}</span>
769
+ </template>
770
+ </BbTable>
771
+ </div>
772
+ </template>
773
+
774
+ <script setup lang="ts">
775
+ import { BbBadge, BbTable, type BbTableColumn } from 'bitboss-ui';
776
+ import { KIND_LABEL, STATUS_LABEL, STATUS_VARIANT } from './context';
777
+ import type { Holding, Owner } from '@/types';
778
+
779
+ defineProps<{ owner: Owner }>();
780
+
781
+ /**
782
+ * Explicit snaps onto the parent grid. The parent is `selectable`, so its
783
+ * select column occupies tracks [0, 1] and the data columns sit at 1…4 —
784
+ * `snap` base is 1 (it would be 0 under a non-selectable parent). Every
785
+ * column defines a snap so none becomes the auto fill track: a width-free
786
+ * last column would absorb the parent's actions region, and right-aligned
787
+ * $/mo would land under the expand control instead of under the parent's
788
+ * $/mo. With all four snapped, the parent's select and actions tracks fold
789
+ * into the child's first/last cells as padding — the child starts flush with
790
+ * the parent's first data column, and that inset is what reads as hierarchy.
791
+ */
792
+ const columns: Array<BbTableColumn<Holding>> = [
793
+ { key: 'name', label: 'Resource', snap: 1 },
794
+ { key: 'kind', label: 'Type', snap: 2 },
795
+ { key: 'status', label: 'Status', snap: 3 },
796
+ { key: 'monthlyCost', label: '$ / mo', align: 'right', snap: 4 },
797
+ ];
798
+
799
+ const money = (value: number) =>
800
+ value === 0
801
+ ? '—'
802
+ : new Intl.NumberFormat('en-US', {
803
+ style: 'currency',
804
+ currency: 'USD',
805
+ maximumFractionDigits: 0,
806
+ }).format(value);
807
+
808
+ const monthLabel = (value: string) =>
809
+ new Date(value).toLocaleDateString('en-US', {
810
+ month: 'short',
811
+ year: 'numeric',
812
+ });
813
+ </script>
814
+
815
+ <style scoped>
816
+ /* Full-bleed inside the expand cell — the inherited snaps keep Resource
817
+ under Owner. Hierarchy is the hairline + faint wash, NOT a padding inset:
818
+ an inset would shift the child's cells off the parent's tracks and make
819
+ the alignment lie. */
820
+ .holdings-nest {
821
+ background: color-mix(in oklab, var(--bb-text) 1.5%, transparent);
822
+ border-block-start: 1px solid var(--bb-border);
823
+ width: 100%;
824
+ }
825
+ </style>
826
+ ```
827
+
828
+ ### FilterRail.vue
829
+
830
+ ```vue
831
+ <!-- OwnershipAtlas/FilterRail.vue -->
832
+ <template>
833
+ <div class="flex flex-wrap items-center gap-2">
834
+ <!-- Holding type: multi-select pill over the kind catalog. Filtering by
835
+ kind reshapes the owners themselves (server-side): owners with no
836
+ matching holding drop out, counts and totals recompute. -->
837
+ <BbSelectPopover
838
+ v-model="ctx.filters.kinds"
839
+ clearable
840
+ item-text="label"
841
+ item-value="value"
842
+ :items="kindOptions"
843
+ multiple
844
+ >
845
+ <template #activator="{ props }">
846
+ <BbButton
847
+ v-bind="props"
848
+ append:icon="lucide:chevron-down"
849
+ prepend:icon="lucide:layers"
850
+ size="sm"
851
+ variant="outline"
852
+ >
853
+ Holding type{{
854
+ ctx.filters.kinds.length ? ` · ${ctx.filters.kinds.length}` : ''
855
+ }}
856
+ </BbButton>
857
+ </template>
858
+ </BbSelectPopover>
859
+
860
+ <!-- Clear-all renders only while something is active. -->
861
+ <BbButton
862
+ v-if="ctx.hasActiveFilters.value"
863
+ prepend:icon="lucide:x"
864
+ size="sm"
865
+ variant="ghost"
866
+ @click="ctx.clearFilters"
867
+ >
868
+ Clear
869
+ </BbButton>
870
+ </div>
871
+ </template>
872
+
873
+ <script setup lang="ts">
874
+ import { BbButton, BbSelectPopover } from 'bitboss-ui';
875
+ import { KIND_LABEL, useOwnershipAtlas } from './context';
876
+ import type { HoldingKind } from '@/types';
877
+
878
+ const ctx = useOwnershipAtlas();
879
+
880
+ // The pill's options come straight from the shared label catalog.
881
+ const kindOptions = (
882
+ Object.entries(KIND_LABEL) as Array<[HoldingKind, string]>
883
+ ).map(([value, label]) => ({ value, label }));
884
+ </script>
885
+ ```
886
+
887
+ ### SelectionBar.vue
888
+
889
+ ```vue
890
+ <!-- OwnershipAtlas/SelectionBar.vue -->
891
+ <template>
892
+ <FloatingBottomPanel :open="selectedCount > 0">
893
+ <span class="px-2 text-sm text-gray-500">
894
+ <span class="font-semibold tabular-nums">{{ selectedCount }}</span>
895
+ selected
896
+ </span>
897
+
898
+ <BbButton
899
+ prepend:icon="lucide:chevrons-down"
900
+ size="sm"
901
+ variant="ghost"
902
+ @click="ctx.expandSelected"
903
+ >
904
+ Expand
905
+ </BbButton>
906
+
907
+ <!-- Bulk transfer: a one-shot popover (model stays null) whose pick IS
908
+ the action. Targets exclude every selected owner — you cannot
909
+ transfer holdings onto an owner you are emptying. -->
910
+ <BbSelectPopover
911
+ item-text="name"
912
+ item-value="id"
913
+ :items="transferTargets"
914
+ :model-value="null"
915
+ :offset="10"
916
+ placement="top"
917
+ width="240px"
918
+ @update:model-value="onTransfer"
919
+ >
920
+ <template #activator="{ props }">
921
+ <BbButton
922
+ v-bind="props"
923
+ append:icon="lucide:chevron-up"
924
+ prepend:icon="lucide:arrow-right-left"
925
+ size="sm"
926
+ variant="ghost"
927
+ >
928
+ Transfer holdings
929
+ </BbButton>
930
+ </template>
931
+ </BbSelectPopover>
932
+
933
+ <div class="floating-bottom-panel__right flex items-center gap-1">
934
+ <BbButton
935
+ aria-label="Clear selection"
936
+ icon="lucide:x"
937
+ size="sm"
938
+ variant="ghost"
939
+ @click="ctx.table.resetSelection"
940
+ />
941
+ </div>
942
+ </FloatingBottomPanel>
943
+ </template>
944
+
945
+ <script setup lang="ts">
946
+ import { computed } from 'vue';
947
+ import { BbButton, BbSelectPopover } from 'bitboss-ui';
948
+ import FloatingBottomPanel from '@/components/layout/FloatingBottomPanel.vue';
949
+ import { useOwnershipAtlas } from './context';
950
+
951
+ const ctx = useOwnershipAtlas();
952
+
953
+ // `all` (select-all-across-pages) does not enumerate rows, so the visible
954
+ // count is the total minus whatever the user manually deselected.
955
+ const selectedCount = computed(() =>
956
+ ctx.table.all.value
957
+ ? ctx.table.totalItems.value - ctx.table.unselected.value.length
958
+ : ctx.table.selected.value.length
959
+ );
960
+
961
+ /** Don't offer transferring onto an owner who is already in the selection. */
962
+ const transferTargets = computed(() => {
963
+ const selected = new Set(
964
+ ctx.table.all.value
965
+ ? ctx.ownerOptions.value
966
+ .map((owner) => owner.id)
967
+ .filter((id) => !ctx.table.unselected.value.includes(id))
968
+ : ctx.table.selected.value
969
+ );
970
+ return ctx.ownerOptions.value.filter((owner) => !selected.has(owner.id));
971
+ });
972
+
973
+ const onTransfer = (value: unknown) => {
974
+ if (typeof value !== 'string' || !value) return;
975
+ void ctx.bulkTransfer(value);
976
+ };
977
+ </script>
978
+ ```
979
+
980
+ ### OwnerPeek.vue
981
+
982
+ ```vue
983
+ <!-- OwnershipAtlas/OwnerPeek.vue — sidebar workbench for the highlighted owner. -->
984
+ <template>
985
+ <div v-if="owner" class="flex flex-col gap-4 text-sm">
986
+ <!-- Identity header. -->
987
+ <header class="flex flex-col gap-1">
988
+ <h2 class="text-base font-semibold tracking-tight">{{ owner.name }}</h2>
989
+ <p class="text-xs text-gray-500">{{ owner.email }}</p>
990
+ <p class="text-xs text-gray-500">
991
+ {{ owner.title }} · {{ owner.team }} ·
992
+ {{ REGION_LABEL[owner.region] }}
993
+ </p>
994
+ </header>
995
+
996
+ <!-- Properties. -->
997
+ <dl class="grid grid-cols-[auto_1fr] gap-x-4 gap-y-1.5">
998
+ <dt class="text-gray-500">Holdings</dt>
999
+ <dd class="text-right tabular-nums">{{ owner.holdingsCount }}</dd>
1000
+ <dt class="text-gray-500">Monthly</dt>
1001
+ <dd class="text-right font-medium tabular-nums">
1002
+ {{ money(owner.monthlyTotal) }}
1003
+ </dd>
1004
+ <dt class="text-gray-500">Joined</dt>
1005
+ <dd class="text-right">{{ longDate(owner.joinedAt) }}</dd>
1006
+ <dt class="text-gray-500">Manager</dt>
1007
+ <dd class="text-right">{{ owner.manager ?? '—' }}</dd>
1008
+ </dl>
1009
+
1010
+ <section v-if="owner.notes" class="flex flex-col gap-1.5">
1011
+ <h3 class="text-xs font-semibold uppercase tracking-wide text-gray-500">
1012
+ Notes
1013
+ </h3>
1014
+ <p>{{ owner.notes }}</p>
1015
+ </section>
1016
+
1017
+ <!-- Rollup by holding type. -->
1018
+ <section class="flex flex-col gap-1.5">
1019
+ <h3 class="text-xs font-semibold uppercase tracking-wide text-gray-500">
1020
+ By type
1021
+ </h3>
1022
+ <ul class="flex flex-col gap-1.5">
1023
+ <li
1024
+ v-for="row in owner.kindBreakdown"
1025
+ :key="row.kind"
1026
+ class="grid grid-cols-[1fr_auto_auto] items-baseline gap-3"
1027
+ >
1028
+ <span class="min-w-0">{{ KIND_LABEL[row.kind] }}</span>
1029
+ <span class="text-xs tabular-nums text-gray-500">{{
1030
+ row.count
1031
+ }}</span>
1032
+ <span class="text-xs tabular-nums text-gray-500">{{
1033
+ money(row.monthlyCost)
1034
+ }}</span>
1035
+ </li>
1036
+ </ul>
1037
+ </section>
1038
+
1039
+ <!-- The holdings themselves — a real list, not a summary sentence. -->
1040
+ <section class="flex flex-col gap-1.5">
1041
+ <h3 class="text-xs font-semibold uppercase tracking-wide text-gray-500">
1042
+ Holdings
1043
+ </h3>
1044
+ <ul class="flex flex-col gap-2">
1045
+ <li
1046
+ v-for="holding in owner.holdings"
1047
+ :key="holding.id"
1048
+ class="flex items-start justify-between gap-3"
1049
+ >
1050
+ <div class="flex min-w-0 flex-1 flex-col gap-0.5">
1051
+ <span class="font-medium">{{ holding.name }}</span>
1052
+ <span class="text-xs text-gray-500"
1053
+ >{{ KIND_LABEL[holding.kind] }} · {{ holding.region }}</span
1054
+ >
1055
+ </div>
1056
+ <div class="flex flex-col items-end gap-1">
1057
+ <BbBadge size="sm" :variant="STATUS_VARIANT[holding.status]">
1058
+ {{ STATUS_LABEL[holding.status] }}
1059
+ </BbBadge>
1060
+ <span class="text-xs tabular-nums text-gray-500">{{
1061
+ money(holding.monthlyCost)
1062
+ }}</span>
1063
+ </div>
1064
+ </li>
1065
+ </ul>
1066
+ </section>
1067
+
1068
+ <!-- Workbench footer: act from the peek back into the table. -->
1069
+ <footer class="mt-2 flex items-center gap-2 border-t pt-3">
1070
+ <BbButton
1071
+ prepend:icon="lucide:chevrons-down"
1072
+ size="sm"
1073
+ variant="secondary"
1074
+ @click="onExpandInTable"
1075
+ >
1076
+ Expand in table
1077
+ </BbButton>
1078
+ </footer>
1079
+ </div>
1080
+
1081
+ <div v-else class="flex justify-center p-8">
1082
+ <BbSpinner />
1083
+ </div>
1084
+ </template>
1085
+
1086
+ <script setup lang="ts">
1087
+ import { watch } from 'vue';
1088
+ import { BbBadge, BbButton, BbSpinner } from 'bitboss-ui';
1089
+ import { useResourceContext } from '@/composables/useResourceContext';
1090
+ import {
1091
+ KIND_LABEL,
1092
+ REGION_LABEL,
1093
+ STATUS_LABEL,
1094
+ STATUS_VARIANT,
1095
+ useOwnershipAtlas,
1096
+ } from './context';
1097
+ import type { OwnerDetail } from '@/types';
1098
+
1099
+ const props = defineProps<{ ownerId: string }>();
1100
+
1101
+ const ctx = useOwnershipAtlas();
1102
+
1103
+ // A small JSON endpoint, not a page visit — opening the peek never
1104
+ // re-renders the list underneath it. Re-fetches whenever the highlight moves
1105
+ // to a different owner; `refreshKey` makes bulk transfers reflect here
1106
+ // immediately.
1107
+ const { data: owner, refresh } = useResourceContext<OwnerDetail, string>(
1108
+ () => props.ownerId,
1109
+ ctx.fetchOwner
1110
+ );
1111
+ watch(() => ctx.refreshKey.value, refresh);
1112
+
1113
+ const money = (value: number) =>
1114
+ value === 0
1115
+ ? '—'
1116
+ : new Intl.NumberFormat('en-US', {
1117
+ style: 'currency',
1118
+ currency: 'USD',
1119
+ maximumFractionDigits: 0,
1120
+ }).format(value);
1121
+
1122
+ const longDate = (value: string) =>
1123
+ new Date(value).toLocaleDateString('en-US', {
1124
+ month: 'short',
1125
+ day: 'numeric',
1126
+ year: 'numeric',
1127
+ });
1128
+
1129
+ // The peek writes the same expansion array the table reads — one rung-3
1130
+ // state, three writers (toolbar, bulk bar, peek).
1131
+ const onExpandInTable = () => {
1132
+ if (!owner.value) return;
1133
+ if (!ctx.expanded.value.includes(owner.value.id)) {
1134
+ ctx.expanded.value = [...ctx.expanded.value, owner.value.id];
1135
+ }
1136
+ };
1137
+ </script>
1138
+ ```
1139
+
1140
+ ### The domain types (`@/types`)
1141
+
1142
+ ```ts
1143
+ export type HoldingKind =
1144
+ | 'workspace'
1145
+ | 'project'
1146
+ | 'domain'
1147
+ | 'database'
1148
+ | 'vault'
1149
+ | 'device'
1150
+ | 'seat-pool'
1151
+ | 'bucket';
1152
+
1153
+ export type HoldingStatus = 'active' | 'paused' | 'provisioning' | 'retired';
1154
+
1155
+ export type OwnerRegion = 'americas' | 'emea' | 'apac';
1156
+
1157
+ /** A resource an owner is responsible for — one nested-table row. */
1158
+ export interface Holding {
1159
+ id: string;
1160
+ name: string;
1161
+ kind: HoldingKind;
1162
+ status: HoldingStatus;
1163
+ /** `YYYY-MM-DD` — when ownership began. */
1164
+ since: string;
1165
+ monthlyCost: number;
1166
+ region: string;
1167
+ }
1168
+
1169
+ /** Parent row: a person with the holdings they own embedded. */
1170
+ export interface Owner {
1171
+ id: string;
1172
+ name: string;
1173
+ email: string;
1174
+ team: string;
1175
+ title: string;
1176
+ region: OwnerRegion;
1177
+ holdingsCount: number;
1178
+ monthlyTotal: number;
1179
+ holdings: Holding[];
1180
+ }
1181
+
1182
+ /** Transfer-picker option. */
1183
+ export type OwnerOption = { id: string; name: string; team: string };
1184
+
1185
+ /** Rich owner detail for the sidebar peek. */
1186
+ export interface OwnerDetail extends Owner {
1187
+ joinedAt: string;
1188
+ manager: string | null;
1189
+ notes: string;
1190
+ kindBreakdown: Array<{
1191
+ kind: HoldingKind;
1192
+ count: number;
1193
+ monthlyCost: number;
1194
+ }>;
1195
+ }
1196
+ ```
1197
+
1198
+ ## Why it is built this way
1199
+
1200
+ - **The nested table inherits the parent's tracks — never eyeballed
1201
+ widths.** `inherit-column-widths` is the whole alignment mechanism: the
1202
+ holdings table reads the owners table's measured tracks, so Resource sits
1203
+ under Owner and both $/mo columns share one right edge at every viewport
1204
+ width. Two hand-maintained `<colgroup>`s (or two tables that merely look
1205
+ similar) drift apart the first time a label changes; the inheritance
1206
+ cannot.
1207
+ - **Every child column snaps, and the base is 1.** The parent is
1208
+ `selectable`, so its select column occupies the region before the first
1209
+ data track — child snaps start at `1` (`0` would put Resource under the
1210
+ checkboxes). And no child column may be left width-free: the width-free
1211
+ column becomes the fill track and absorbs the parent's **actions** region,
1212
+ which visually parks right-aligned $/mo under the expand control. With
1213
+ all four columns snapped, the select and actions tracks fold into the
1214
+ child's first/last cells as padding, and the child starts flush with the
1215
+ parent's first data column — that structural inset, plus a hairline and a
1216
+ faint wash, is the entire hierarchy treatment. No extra padding inset:
1217
+ an inset would make the alignment lie.
1218
+ - **Cell-padding overrides use direct-child combinators.** `.table-flush`
1219
+ bleeds the owner table past the page padding and re-adds the inset on the
1220
+ outermost cells — but only via
1221
+ `:deep(> table > tbody > tr > td:first-child)`. A bare descendant
1222
+ selector would also hit the nested table's cells and clobber the offset
1223
+ padding it computes to stay on the parent grid. The expand cell itself is
1224
+ excluded from the inset and zero-padded, so the nested table gets the full
1225
+ row width to snap within.
1226
+ - **Expansion is rung-3 page state.** `expanded` lives in the context
1227
+ because four surfaces touch it: the per-row control, the toolbar's
1228
+ expand-all/collapse-all, the bulk bar's Expand, and the peek's "Expand in
1229
+ table". Binding it through `v-model:expanded-items` (tracked by
1230
+ `item-value`) means expansion survives the partial reloads that replace
1231
+ the row objects. It stays out of the URL deliberately — unfolded rows are
1232
+ working posture, not a shareable view.
1233
+ - **The actions column is the expand control.** This page's per-row action
1234
+ _is_ "show me the holdings", so the holdings count doubles as the toggle
1235
+ (`expandProps` wires `aria-expanded` and keyboard handling onto a real
1236
+ button). No `…` dropdown padding out the inventory.
1237
+ - **Row highlight is the peek, via one two-way computed.** `get` derives the
1238
+ highlighted id from the shell stack; `set` pushes or closes. Highlight and
1239
+ selection remain independent axes — you can peek one owner while twelve
1240
+ are selected for transfer.
1241
+ - **The context coopts, leaves consume.** `shell` and the keyed
1242
+ `useTableContext('owners')` are joined once in `provideOwnershipAtlas()`;
1243
+ five components share filters, selection, expansion, the peek and the
1244
+ transfer action through one `useOwnershipAtlas()` call. Leaves receive
1245
+ only the data they render (`owner`, `owner-id`).
1246
+ - **`owners` is a page prop, not a client fetch.** The server owns
1247
+ filtering, search, tab scoping and pagination; `useQueryObject` (filters)
1248
+ and `href` + `server: true` tabs are two doors into the same partial
1249
+ reload. The `kinds` filter reshapes the owners themselves server-side —
1250
+ the client never re-derives counts or totals.
1251
+ - **Bulk transfer carries the full select-all-across-pages payload**
1252
+ (`ids`/`all`/`unselected` + `toOwnerId`), and the target list excludes the
1253
+ current selection — the UI cannot express "transfer onto an owner being
1254
+ emptied". The action is complete: visit, refresh bump, selection reset,
1255
+ toast naming the target.
1256
+ - **Sizing:** the topbar search is `compact` (28px) per `md`-first; `sm`
1257
+ appears only in the toolbar, rail pills, peek footer and bottom bar, and
1258
+ the in-row expand control is `xs` — the densest surface on the page. This
1259
+ page creates nothing, so no `variant="primary"` appears anywhere, and its
1260
+ one mutation is not destructive, so there is no `useConfirm` — holdings
1261
+ move, they are not lost.
1262
+
1263
+ ## Variations
1264
+
1265
+ - **Per-holding actions**: give the nested table its own `actions` column
1266
+ (a `…` dropdown with "Transfer this holding") calling the same context
1267
+ action with a single id. Snap indices are unaffected — structural columns
1268
+ are accounted for automatically.
1269
+ - **Divergent child columns**: if the holdings table needs columns that
1270
+ should _not_ align (say, an audit-log expansion), drop
1271
+ `inherit-column-widths` and let it lay out independently — inheritance is
1272
+ for continuation, not for every nested table.
1273
+ - **Confirmed transfers**: if a transfer is heavyweight in your domain
1274
+ (billing moves with it), wrap `bulkTransfer` in `useConfirm` with the
1275
+ count and target in the message.
1276
+ - **Deep-linkable expansion**: mirror `expanded` into the URL alongside the
1277
+ filters if support wants to share "look at this owner's holdings" links.
1278
+ - **Keyboard triage**: add `keyboard-navigation` to the owners table —
1279
+ highlight already opens the peek, so arrows + Enter make the page
1280
+ reviewable hands-on-keyboard; the approvals-inbox recipe is the full
1281
+ treatment.