bitboss-ui 3.0.0-beta.47 → 3.0.0-beta.49

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 (398) hide show
  1. package/README.md +24 -7
  2. package/bin/bitboss-ui-mcp.mjs +15 -3
  3. package/bin/bitboss-ui.mjs +167 -14
  4. package/dist/ai/BbAccordion.md +1 -1
  5. package/dist/ai/BbAvatar.md +1 -1
  6. package/dist/ai/BbBreadcrumbs.md +65 -65
  7. package/dist/ai/BbButton.md +28 -8
  8. package/dist/ai/BbCheckbox.md +0 -2
  9. package/dist/ai/BbCheckboxGroup.md +13 -20
  10. package/dist/ai/BbCollapsible.md +1 -1
  11. package/dist/ai/BbColorPalette.md +1 -1
  12. package/dist/ai/BbConfirm.md +8 -0
  13. package/dist/ai/BbConfirmPortal.md +1 -1
  14. package/dist/ai/BbDatePickerInput.md +4 -2
  15. package/dist/ai/BbDialog.md +1 -8
  16. package/dist/ai/BbDropdown.md +231 -220
  17. package/dist/ai/BbDropdownButton.md +65 -65
  18. package/dist/ai/BbDropdownGroup.md +2 -2
  19. package/dist/ai/BbDropzone.md +10 -10
  20. package/dist/ai/BbForm.md +43 -52
  21. package/dist/ai/BbHoverCard.md +19 -7
  22. package/dist/ai/BbHoverCardPortal.md +1 -1
  23. package/dist/ai/BbNumberInput.md +88 -21
  24. package/dist/ai/BbPopover.md +47 -40
  25. package/dist/ai/BbPopoverPortal.md +1 -1
  26. package/dist/ai/BbProgress.md +48 -22
  27. package/dist/ai/BbRadioGroup.md +13 -19
  28. package/dist/ai/BbSelect.md +16 -36
  29. package/dist/ai/BbSelectPopover.md +14 -30
  30. package/dist/ai/BbSmoothHeight.md +0 -2
  31. package/dist/ai/BbSwitchGroup.md +13 -20
  32. package/dist/ai/BbTable.md +11 -10
  33. package/dist/ai/BbTabs.md +107 -106
  34. package/dist/ai/BbTabsList.md +2 -2
  35. package/dist/ai/BbTabsPanels.md +1 -1
  36. package/dist/ai/BbTabsRoot.md +3 -3
  37. package/dist/ai/BbTooltip.md +29 -13
  38. package/dist/ai/BbTree.md +14 -11
  39. package/dist/ai/CommonPopover.md +1 -1
  40. package/dist/ai/changelog.json +297 -6
  41. package/dist/ai/components.json +50 -45
  42. package/dist/ai/composables/useBbDropdownContext.md +16 -16
  43. package/dist/ai/composables/useBbFormField.md +5 -1
  44. package/dist/ai/composables/useBbTabsContext.md +14 -14
  45. package/dist/ai/guides/agent-contract.md +27 -27
  46. package/dist/ai/guides/ai-router.md +1 -1
  47. package/dist/ai/guides/component-picker.md +3 -3
  48. package/dist/ai/guides/fetch-items-playbook.md +1 -1
  49. package/dist/ai/guides/icons-policy.md +10 -10
  50. package/dist/ai/guides/inertia-helpers.md +120 -67
  51. package/dist/ai/guides/installation-and-plugin-setup.md +45 -15
  52. package/dist/ai/guides/migration/components/bb-breadcrumbs.md +3 -2
  53. package/dist/ai/guides/migration/components/bb-checkbox-group.md +16 -16
  54. package/dist/ai/guides/migration/components/bb-dropdown-button.md +9 -8
  55. package/dist/ai/guides/migration/components/bb-dropdown.md +15 -14
  56. package/dist/ai/guides/migration/components/bb-radio-group.md +2 -1
  57. package/dist/ai/guides/migration/components/bb-select-popover.md +6 -1
  58. package/dist/ai/guides/migration/components/bb-select.md +10 -2
  59. package/dist/ai/guides/migration/components/bb-switch-group.md +2 -1
  60. package/dist/ai/guides/migration/components/bb-tabs.md +9 -8
  61. package/dist/ai/guides/migration/components/bb-tooltip.md +1 -1
  62. package/dist/ai/guides/migration/v2-to-v3.md +143 -28
  63. package/dist/ai/guides/migration/v3-beta-css-classes.md +29 -27
  64. package/dist/ai/guides/migration/v3-beta-tooling.md +11 -0
  65. package/dist/ai/guides/options-items-playbook.md +30 -24
  66. package/dist/ai/guides/passthrough.md +4 -4
  67. package/dist/ai/guides/preset-components.md +18 -3
  68. package/dist/ai/guides/typescript-generic-components.md +1 -1
  69. package/dist/ai/guides/validated-forms.md +11 -22
  70. package/dist/ai/guides/validation-providers.md +4 -3
  71. package/dist/ai/helpers/inertia/manifest.json +636 -0
  72. package/dist/ai/helpers/inertia/types.ts +15 -0
  73. package/dist/ai/helpers/inertia/useAsyncFn.ts +110 -0
  74. package/dist/ai/helpers/inertia/useConfirmOnRouteLeave.ts +102 -0
  75. package/dist/ai/helpers/inertia/useDeleteCmd.ts +30 -0
  76. package/dist/ai/helpers/inertia/useHasChanged.ts +36 -0
  77. package/dist/ai/helpers/inertia/useIndexById.ts +23 -0
  78. package/dist/ai/helpers/inertia/useLazyProp.ts +148 -0
  79. package/dist/ai/helpers/inertia/useLazyPropGetter.ts +50 -0
  80. package/dist/ai/helpers/inertia/useLoading.ts +20 -0
  81. package/dist/ai/helpers/inertia/usePaginatedResponseContext.ts +88 -0
  82. package/dist/ai/helpers/inertia/usePromiseForm.ts +62 -0
  83. package/dist/ai/helpers/inertia/useProp.ts +63 -0
  84. package/dist/ai/helpers/inertia/useQuery.ts +19 -0
  85. package/dist/ai/helpers/inertia/useQueryObject.ts +116 -0
  86. package/dist/ai/helpers/inertia/useResourceContext.ts +69 -0
  87. package/dist/ai/helpers/inertia/useRouteQuery.ts +54 -0
  88. package/dist/ai/helpers/inertia/useScreenSizes.ts +23 -0
  89. package/dist/ai/helpers/inertia/useTableContext.ts +34 -0
  90. package/dist/ai/helpers/inertia/useTableSelectionContext.ts +48 -0
  91. package/dist/ai/helpers/inertia/useUntil.ts +33 -0
  92. package/dist/ai/helpers/inertia/utils.ts +24 -0
  93. package/dist/ai/index.md +6 -6
  94. package/dist/ai/manifest/components/BbAccordion.json +1 -1
  95. package/dist/ai/manifest/components/BbBreadcrumbs.json +10 -6
  96. package/dist/ai/manifest/components/BbBreadcrumbs.tree.json +1 -1
  97. package/dist/ai/manifest/components/BbButton.json +2 -1
  98. package/dist/ai/manifest/components/BbButton.tree.json +1 -1
  99. package/dist/ai/manifest/components/BbCheckboxGroup.json +2 -2
  100. package/dist/ai/manifest/components/BbCollapsible.json +1 -1
  101. package/dist/ai/manifest/components/BbColorPalette.json +1 -1
  102. package/dist/ai/manifest/components/BbConfirmPortal.json +5 -2
  103. package/dist/ai/manifest/components/BbDropdown.json +23 -20
  104. package/dist/ai/manifest/components/BbDropdown.tree.json +2 -2
  105. package/dist/ai/manifest/components/BbDropdownButton.json +22 -19
  106. package/dist/ai/manifest/components/BbDropdownButton.tree.json +1 -1
  107. package/dist/ai/manifest/components/BbDropdownGroup.json +2 -2
  108. package/dist/ai/manifest/components/BbForm.json +1 -0
  109. package/dist/ai/manifest/components/BbHoverCard.json +1 -1
  110. package/dist/ai/manifest/components/BbHoverCardPortal.json +2 -2
  111. package/dist/ai/manifest/components/BbNumberInput.json +6 -1
  112. package/dist/ai/manifest/components/BbNumberInput.tree.json +2 -1
  113. package/dist/ai/manifest/components/BbPopover.json +2 -1
  114. package/dist/ai/manifest/components/BbPopoverPortal.json +2 -2
  115. package/dist/ai/manifest/components/BbProgress.json +6 -6
  116. package/dist/ai/manifest/components/BbProgress.tree.json +1 -0
  117. package/dist/ai/manifest/components/BbRadioGroup.json +2 -2
  118. package/dist/ai/manifest/components/BbSelect.json +2 -2
  119. package/dist/ai/manifest/components/BbSelect.tree.json +2 -2
  120. package/dist/ai/manifest/components/BbSelectPopover.json +2 -2
  121. package/dist/ai/manifest/components/BbSelectPopover.tree.json +1 -1
  122. package/dist/ai/manifest/components/BbSwitchGroup.json +2 -2
  123. package/dist/ai/manifest/components/BbTabs.json +8 -7
  124. package/dist/ai/manifest/components/BbTabsList.json +3 -3
  125. package/dist/ai/manifest/components/BbTabsPanels.json +1 -1
  126. package/dist/ai/manifest/components/BbTabsRoot.json +6 -5
  127. package/dist/ai/manifest/components/BbTag.tree.json +1 -1
  128. package/dist/ai/manifest/components/BbTooltip.json +2 -2
  129. package/dist/ai/manifest/components/ChipsBox.tree.json +1 -1
  130. package/dist/ai/manifest/components/CommonPopover.json +1 -1
  131. package/dist/ai/manifest/index.json +2 -2
  132. package/dist/ai/manifest/meta.json +5 -0
  133. package/dist/ai/manifest/types.advanced.json +10 -9
  134. package/dist/ai/manifest/types.api.json +8 -5
  135. package/dist/ai/manifest/types.wrapper.json +1 -0
  136. package/dist/ai/recipes/inertia/approvals-inbox.md +16 -18
  137. package/dist/ai/recipes/inertia/inline-edit-workspace.md +23 -33
  138. package/dist/ai/recipes/inertia/layout-scaffold.md +16 -16
  139. package/dist/ai/recipes/inertia/onboarding.md +6 -10
  140. package/dist/ai/recipes/inertia/ownership-atlas.md +15 -18
  141. package/dist/ai/recipes/inertia/record-form.md +11 -11
  142. package/dist/ai/recipes/inertia/records-workspace.md +38 -41
  143. package/dist/ai/recipes/inertia/settings-workspace.md +26 -38
  144. package/dist/ai/recipes/inertia/upload-center.md +31 -39
  145. package/dist/ai/recipes/inertia/wizard-form.md +10 -19
  146. package/dist/ai/recipes/nuxt/approvals-inbox.md +7 -8
  147. package/dist/ai/recipes/nuxt/inline-edit-workspace.md +14 -24
  148. package/dist/ai/recipes/nuxt/layout-scaffold.md +16 -16
  149. package/dist/ai/recipes/nuxt/onboarding.md +2 -6
  150. package/dist/ai/recipes/nuxt/ownership-atlas.md +7 -9
  151. package/dist/ai/recipes/nuxt/record-form.md +5 -5
  152. package/dist/ai/recipes/nuxt/records-workspace.md +29 -31
  153. package/dist/ai/recipes/nuxt/settings-workspace.md +22 -34
  154. package/dist/ai/recipes/nuxt/upload-center.md +22 -29
  155. package/dist/ai/recipes/nuxt/wizard-form.md +3 -11
  156. package/dist/ai/recipes/vue/approvals-inbox.md +7 -8
  157. package/dist/ai/recipes/vue/inline-edit-workspace.md +14 -24
  158. package/dist/ai/recipes/vue/layout-scaffold.md +16 -16
  159. package/dist/ai/recipes/vue/onboarding.md +2 -6
  160. package/dist/ai/recipes/vue/ownership-atlas.md +7 -9
  161. package/dist/ai/recipes/vue/record-form.md +5 -5
  162. package/dist/ai/recipes/vue/records-workspace.md +29 -31
  163. package/dist/ai/recipes/vue/settings-workspace.md +22 -34
  164. package/dist/ai/recipes/vue/upload-center.md +22 -29
  165. package/dist/ai/recipes/vue/wizard-form.md +3 -11
  166. package/dist/ai/source/BbAccordion.md +1 -1
  167. package/dist/ai/source/BbAlert.md +3 -3
  168. package/dist/ai/source/BbBadge.md +14 -10
  169. package/dist/ai/source/BbBadgeButton.md +17 -12
  170. package/dist/ai/source/BbBaseButton.md +1 -1
  171. package/dist/ai/source/BbBaseRadioIcon.md +1 -0
  172. package/dist/ai/source/BbBaseSwitchIcon.md +1 -0
  173. package/dist/ai/source/BbBreadcrumbs.md +63 -42
  174. package/dist/ai/source/BbButton.md +84 -38
  175. package/dist/ai/source/BbCalendar.md +17 -16
  176. package/dist/ai/source/BbCheckbox.md +3 -2
  177. package/dist/ai/source/BbCheckboxGroup.md +11 -4
  178. package/dist/ai/source/BbCollapsible.md +2 -1
  179. package/dist/ai/source/BbColorInput.md +10 -9
  180. package/dist/ai/source/BbColorPalette.md +2 -1
  181. package/dist/ai/source/BbConfirm.md +18 -1
  182. package/dist/ai/source/BbConfirmPortal.md +20 -6
  183. package/dist/ai/source/BbDatePicker.md +2 -2
  184. package/dist/ai/source/BbDatePickerInput.md +47 -20
  185. package/dist/ai/source/BbDialog.md +5 -5
  186. package/dist/ai/source/BbDropdown.md +231 -158
  187. package/dist/ai/source/BbDropdownButton.md +19 -12
  188. package/dist/ai/source/BbDropdownGroup.md +127 -93
  189. package/dist/ai/source/BbForm.md +25 -1
  190. package/dist/ai/source/BbHoverCard.md +30 -3
  191. package/dist/ai/source/BbHoverCardPortal.md +18 -3
  192. package/dist/ai/source/BbIndicator.md +4 -0
  193. package/dist/ai/source/BbNumberInput.md +855 -19
  194. package/dist/ai/source/BbOffCanvas.md +27 -11
  195. package/dist/ai/source/BbPagination.md +3 -3
  196. package/dist/ai/source/BbPopover.md +185 -12
  197. package/dist/ai/source/BbPopoverPortal.md +30 -3
  198. package/dist/ai/source/BbProgress.md +82 -18
  199. package/dist/ai/source/BbRadioGroup.md +12 -5
  200. package/dist/ai/source/BbRating.md +11 -9
  201. package/dist/ai/source/BbSelect.md +16 -10
  202. package/dist/ai/source/BbSelectPopover.md +29 -23
  203. package/dist/ai/source/BbSlider.md +12 -6
  204. package/dist/ai/source/BbSwitch.md +3 -2
  205. package/dist/ai/source/BbSwitchGroup.md +5 -2
  206. package/dist/ai/source/BbTable.md +102 -18
  207. package/dist/ai/source/BbTabs.md +30 -24
  208. package/dist/ai/source/BbTabsList.md +29 -23
  209. package/dist/ai/source/BbTabsPanels.md +29 -23
  210. package/dist/ai/source/BbTabsRoot.md +28 -22
  211. package/dist/ai/source/BbTag.md +10 -9
  212. package/dist/ai/source/BbTextInput.md +5 -4
  213. package/dist/ai/source/BbTextarea.md +6 -5
  214. package/dist/ai/source/BbTimePicker.md +1 -1
  215. package/dist/ai/source/BbTimePickerInput.md +46 -9
  216. package/dist/ai/source/BbToast.md +10 -7
  217. package/dist/ai/source/BbToastPortal.md +10 -7
  218. package/dist/ai/source/BbTooltip.md +88 -11
  219. package/dist/ai/source/BbTree.md +21 -3
  220. package/dist/ai/source/CommonField.md +6 -4
  221. package/dist/ai/source/CommonFieldInput.md +15 -10
  222. package/dist/ai/source/CommonPopover.md +8 -1
  223. package/dist/ai/source/CommonTimeSelector.md +5 -4
  224. package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +10 -8
  225. package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +8 -8
  226. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +45 -45
  227. package/dist/components/BbBreadcrumbs/types.d.ts +25 -17
  228. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +88 -70
  229. package/dist/components/BbButton/toggleRoving.d.ts +6 -0
  230. package/dist/components/BbButton/toggleRoving.js +45 -0
  231. package/dist/components/BbButton/types.d.ts +12 -4
  232. package/dist/components/BbButton/types.js +5 -1
  233. package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +178 -178
  234. package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +15 -15
  235. package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +28 -28
  236. package/dist/components/BbCalendar/useCalendarGrid.js +141 -139
  237. package/dist/components/BbCalendar/useDayjsLocale.d.ts +38 -15
  238. package/dist/components/BbCalendar/useDayjsLocale.js +31 -30
  239. package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +48 -48
  240. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +81 -80
  241. package/dist/components/BbCheckboxGroup/types.d.ts +6 -2
  242. package/dist/components/BbCollapsible/types.d.ts +2 -1
  243. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +69 -69
  244. package/dist/components/BbColorPalette/types.d.ts +2 -1
  245. package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +2 -5
  246. package/dist/components/BbConfirm/types.d.ts +15 -0
  247. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +363 -349
  248. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +91 -86
  249. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +298 -289
  250. package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +322 -356
  251. package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +17 -15
  252. package/dist/components/BbDropdown/DropdownRow.vue.d.ts +40 -0
  253. package/dist/components/BbDropdown/DropdownRow.vue.js +5 -0
  254. package/dist/components/BbDropdown/DropdownRow.vue_vue_type_script_setup_true_lang.js +60 -0
  255. package/dist/components/BbDropdown/normalizeGroups.d.ts +8 -2
  256. package/dist/components/BbDropdown/normalizeGroups.js +60 -46
  257. package/dist/components/BbDropdown/types.d.ts +120 -88
  258. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +11 -2
  259. package/dist/components/BbDropdownButton/types.d.ts +2 -2
  260. package/dist/components/BbForm/BbForm.vue.d.ts +9 -0
  261. package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +114 -105
  262. package/dist/components/BbForm/BbFormCustomField.js +1 -1
  263. package/dist/components/BbForm/bindFormField.js +2 -1
  264. package/dist/components/BbForm/formFields.d.ts +5 -0
  265. package/dist/components/BbHoverCard/BbHoverCard.vue_vue_type_script_setup_true_lang.js +145 -142
  266. package/dist/components/BbHoverCard/BbHoverCardPortal.vue.d.ts +2 -2
  267. package/dist/components/BbHoverCard/types.d.ts +14 -1
  268. package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +0 -1
  269. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +452 -125
  270. package/dist/components/BbNumberInput/numberDisplay.d.ts +256 -0
  271. package/dist/components/BbNumberInput/numberDisplay.js +499 -0
  272. package/dist/components/BbNumberInput/types.d.ts +54 -1
  273. package/dist/components/BbNumberInput/warroom/corpus.d.ts +58 -0
  274. package/dist/components/BbNumberInput/warroom/currency-verify.rows.d.ts +28 -0
  275. package/dist/components/BbNumberInput/warroom/currency.rows.d.ts +2 -0
  276. package/dist/components/BbNumberInput/warroom/harness.d.ts +217 -0
  277. package/dist/components/BbNumberInput/warroom/oracle.d.ts +150 -0
  278. package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +7 -7
  279. package/dist/components/BbPopover/BbPopover.vue.d.ts +1 -0
  280. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +207 -162
  281. package/dist/components/BbPopover/BbPopoverPortal.vue.d.ts +2 -2
  282. package/dist/components/BbPopover/types.d.ts +26 -1
  283. package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +15 -7
  284. package/dist/components/BbProgress/types.d.ts +23 -7
  285. package/dist/components/BbProgress/types.js +1 -1
  286. package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +102 -101
  287. package/dist/components/BbRadioGroup/types.d.ts +6 -2
  288. package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +63 -63
  289. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +156 -154
  290. package/dist/components/BbSelect/types.d.ts +6 -2
  291. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +2 -1
  292. package/dist/components/BbSelectPopover/types.d.ts +6 -2
  293. package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +153 -153
  294. package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +62 -62
  295. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +131 -130
  296. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +711 -676
  297. package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +1 -1
  298. package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +1 -1
  299. package/dist/components/BbTabs/types.d.ts +28 -22
  300. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +76 -76
  301. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +58 -58
  302. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +82 -82
  303. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +246 -236
  304. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +99 -86
  305. package/dist/components/BbTooltip/tooltipWarmup.d.ts +23 -0
  306. package/dist/components/BbTooltip/tooltipWarmup.js +7 -0
  307. package/dist/components/BbTooltip/types.d.ts +10 -3
  308. package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +29 -21
  309. package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +10 -7
  310. package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +37 -36
  311. package/dist/components/CommonPopover/types.d.ts +2 -1
  312. package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +9 -9
  313. package/dist/composables/formSubmitLock.d.ts +6 -0
  314. package/dist/composables/formSubmitLock.js +4 -0
  315. package/dist/composables/useBaseOptions.d.ts +7 -1
  316. package/dist/composables/useBaseOptions.js +32 -32
  317. package/dist/composables/useBbDropdownContext.d.ts +8 -8
  318. package/dist/composables/useBbFormField.d.ts +9 -0
  319. package/dist/composables/useBbFormField.js +5 -3
  320. package/dist/composables/useBbTabsContext.d.ts +10 -10
  321. package/dist/composables/useBbTabsContext.js +18 -18
  322. package/dist/composables/useFormBinding.d.ts +11 -0
  323. package/dist/composables/useFormBinding.js +15 -13
  324. package/dist/composables/useItemText.d.ts +5 -1
  325. package/dist/composables/useItemText.js +8 -3
  326. package/dist/composables/useItemValue.d.ts +5 -1
  327. package/dist/composables/useItemValue.js +8 -3
  328. package/dist/composables/useLocale.js +10 -9
  329. package/dist/deprecation/ai-deprecations.json.d.ts +130 -0
  330. package/dist/deprecation/ai-deprecations.json.js +1 -1
  331. package/dist/deprecation/removedProps.js +1 -1
  332. package/dist/directives/bbDropdown.js +1 -1
  333. package/dist/directives/directivePortal.d.ts +13 -7
  334. package/dist/directives/directivePortal.js +1 -4
  335. package/dist/i18n/index.d.ts +7 -12
  336. package/dist/i18n/locales/cs.json +11 -14
  337. package/dist/i18n/locales/da.json +13 -16
  338. package/dist/i18n/locales/de-CH.json +137 -0
  339. package/dist/i18n/locales/de.json +14 -17
  340. package/dist/i18n/locales/el.json +10 -13
  341. package/dist/i18n/locales/en-GB.json +137 -0
  342. package/dist/i18n/locales/en.json +8 -11
  343. package/dist/i18n/locales/es-MX.json +137 -0
  344. package/dist/i18n/locales/es.json +16 -19
  345. package/dist/i18n/locales/fi.json +8 -11
  346. package/dist/i18n/locales/fr.json +23 -26
  347. package/dist/i18n/locales/hu.json +8 -11
  348. package/dist/i18n/locales/it.json +12 -15
  349. package/dist/i18n/locales/ja.json +13 -16
  350. package/dist/i18n/locales/ko.json +10 -13
  351. package/dist/i18n/locales/nb.json +13 -16
  352. package/dist/i18n/locales/nl.json +21 -24
  353. package/dist/i18n/locales/pl.json +10 -13
  354. package/dist/i18n/locales/{pt.json → pt-BR.json} +19 -22
  355. package/dist/i18n/locales/pt-PT.json +137 -0
  356. package/dist/i18n/locales/ro.json +22 -25
  357. package/dist/i18n/locales/ru.json +11 -14
  358. package/dist/i18n/locales/sv.json +16 -19
  359. package/dist/i18n/locales/tr.json +14 -17
  360. package/dist/i18n/locales/uk.json +11 -14
  361. package/dist/i18n/locales/{zh-cn.json → zh-CN.json} +10 -13
  362. package/dist/i18n/locales/zh-HK.json +137 -0
  363. package/dist/i18n/locales/zh-TW.json +137 -0
  364. package/dist/i18n/regionHints.d.ts +16 -0
  365. package/dist/i18n/regionHints.js +49 -0
  366. package/dist/i18n/regions.d.ts +286 -0
  367. package/dist/i18n/regions.js +265 -0
  368. package/dist/index.d.ts +4 -4
  369. package/dist/index.js +4 -4
  370. package/dist/llms-full.txt +1914 -1714
  371. package/dist/llms-medium.txt +76 -46
  372. package/dist/llms.txt +7 -7
  373. package/dist/locale-blueprint.json +16 -13
  374. package/dist/styles.css +2 -2
  375. package/dist/types/passthrough.d.ts +1 -1
  376. package/dist/types/ptComponentMap.d.ts +2 -2
  377. package/dist/utilities/functions/slotKey.d.ts +2 -2
  378. package/dist/utils/versionCheck.js +1 -1
  379. package/dist/vite-plugin.d.ts +22 -19
  380. package/dist/vite.js +309 -297
  381. package/llms.txt +7 -7
  382. package/package.json +5 -3
  383. package/scripts/lib/agent-manifest.mjs +2 -1
  384. package/scripts/lib/eslint-disable.mjs +17 -4
  385. package/scripts/lib/eslint-plugin.d.ts +9 -1
  386. package/scripts/lib/eslint-plugin.mjs +256 -6
  387. package/scripts/lib/helper-canon.mjs +176 -0
  388. package/scripts/lib/helpers-add.mjs +1303 -0
  389. package/scripts/lib/local-components.mjs +33 -4
  390. package/scripts/lib/locale-check.mjs +165 -0
  391. package/scripts/lib/portal-names.mjs +458 -0
  392. package/scripts/lib/redundant-item-accessor.mjs +398 -0
  393. package/scripts/lib/renamed-item-field.mjs +343 -0
  394. package/scripts/lib/slot-key.mjs +2 -2
  395. package/scripts/lib/slot-renames.mjs +1 -1
  396. package/scripts/lib/unimported-components.mjs +5 -2
  397. package/scripts/lib/validate-bb-markup.mjs +123 -56
  398. package/dist/i18n/index.js +0 -27
@@ -13,7 +13,7 @@
13
13
  {"name":"compact","type":"boolean | undefined","default":"false","description":"Apply the compact density variant — the same ladder `BbSelect` uses, on\nboth surfaces: flyout rows go 28px → 24px, sheet rows 44px → 36px. The\nlabel size does not change; density here is height, as it is for a select.\n\nA menu row is a touch target in a way a select option is not quite — a\nmis-tap fires the neighbouring COMMAND rather than picking the wrong value\n— so the compact sheet stops at 36px and never follows the flyout down to\n24px. That is the same floor the select's sheet holds."},
14
14
  {"name":"disableAutoLoading","type":"boolean | undefined","default":"false","description":"Disables the automatic loading state that tracks async actions\n(enabled by default). Only affects the main action button: the split\ntoggle half still mirrors the dropdown's internal async-action loading\nstate."},
15
15
  {"name":"disabled","type":"boolean | undefined","default":"false","description":"Disables the component"},
16
- {"name":"eager","type":"boolean | undefined","default":"false","description":"Prevents rendering content before it's made visible."},
16
+ {"name":"eager","type":"boolean | undefined","default":"false","description":"Renders the menu panel at mount instead of on the first open (the phone\nsheet's too), and keeps its rows after a close. Without it the rows mount\non each open and go once the menu has closed."},
17
17
  {"name":"id","type":"string | undefined","description":"Names this dropdown: the activator's id (unless it already has one),\nthe menu's `menu_<id>`, and the key `useBbDropdownContext(id)` and a\ncompanion `BbDropdownGroup` pair by. Generated when omitted."},
18
18
  {"name":"items","type":"BbDropdownItem[]","required":true,"default":"[]","description":"Array used to render each dropdown button.\nThey can act as `button`, as `a`, or as `router-link`\nas they are based on the functionality provided by `BbBaseButton`.\n\nPass a flat array for a single group, nest arrays for divider-separated\ngroups, or pass {@link InternalGroup} objects for titled / selectable sections.\nAn item may carry its own `items` to open a submenu. The shapes can be mixed."},
19
19
  {"name":"loading","type":"boolean | undefined","default":"false","description":"Triggers a loading indicator."},
@@ -39,21 +39,21 @@
39
39
  ],
40
40
  "slots": [
41
41
  {"name":"default","type":"any","description":"Companion content forwarded into the dropdown (e.g. `<BbDropdownGroup>`)."},
42
- {"name":"empty","type":"BbDropdownPlaceholderSlotProps","fields":["groupKey?: string","text: string","error?: unknown"],"description":"Replaces the default \"no data\" placeholder row shown in a pipeline group\nthat resolved to no items. Rendered once per empty group. Forwarded to the\nunderlying `BbDropdown`."},
42
+ {"name":"empty","type":"BbDropdownPlaceholderSlotProps","fields":["groupId?: string","text: string","error?: unknown"],"description":"Replaces the default \"no data\" placeholder row shown in a pipeline group\nthat resolved to no items. Rendered once per empty group. Forwarded to the\nunderlying `BbDropdown`."},
43
43
  {"name":"footer","type":"BbDropdownButtonEdgeSlotProps","fields":["disabled?: boolean","open: boolean","placement: Placement | \"cursor\""],"description":"Content pinned to the bottom of the dropdown panel, outside the scroll area."},
44
44
  {"name":"header","type":"BbDropdownButtonEdgeSlotProps","fields":["disabled?: boolean","open: boolean","placement: Placement | \"cursor\""],"description":"Content pinned to the top of the dropdown panel, outside the scroll area."},
45
- {"name":"item:append","type":"BbDropdownButtonItemSlotProps","fields":["disabled?: boolean","index: number","item: InternalItem","open: boolean","placement: Placement | \"cursor\"","text: string"],"description":"The trailing region of every menu row, replacing its `append:icon`; the\nsubmenu chevron and the check on a selected row take its place\n(BbDropdown's rules)."},
46
- {"name":"item:prepend","type":"BbDropdownButtonItemSlotProps","fields":["disabled?: boolean","index: number","item: InternalItem","open: boolean","placement: Placement | \"cursor\"","text: string"],"description":"The leading region of every menu row, replacing its `prepend:icon`\n(BbDropdown's rules)."},
47
- {"name":"loading","type":"BbDropdownPlaceholderSlotProps","fields":["groupKey?: string","text: string","error?: unknown"],"description":"Replaces the default loading placeholder row shown in a pipeline group\nwhile its async items load. Rendered once per loading group. Forwarded to\nthe underlying `BbDropdown`."},
48
- {"name":"<key>","type":"BbDropdownItemSlotProps","description":"One row's content (text and description), by its key; in a fetched group, by its resolved `itemValue`.","dynamic":true},
49
- {"name":"<key>:prepend","type":"BbDropdownItemSlotProps","description":"One row's leading region; replaces its `prepend:icon`.","dynamic":true},
50
- {"name":"<key>:append","type":"BbDropdownItemSlotProps","description":"One row's trailing region; replaces its `append:icon` and its submenu chevron. The check takes its place on the selected row.","dynamic":true},
51
- {"name":"<groupKey>:item","type":"BbDropdownItemSlotProps","description":"The content of every row of that group, and no other; a row's own `#<key>` still wins.","dynamic":true},
52
- {"name":"<groupKey>:item:prepend","type":"BbDropdownItemSlotProps","description":"The leading region of every row of that group — e.g. an avatar per record, drawn from `item.meta`, while other rows keep their `prepend:icon`.","dynamic":true},
53
- {"name":"<groupKey>:item:append","type":"BbDropdownItemSlotProps","description":"The trailing region of every row of that group; replaces their `append:icon`. The check takes its place on the selected row.","dynamic":true},
54
- {"name":"<groupKey>","type":"BbDropdownItemSlotProps","description":"That group's title line (the group is passed as `item`, `groupTitle` is `true`).","dynamic":true},
55
- {"name":"<groupKey>:prepend","type":"BbDropdownItemSlotProps","description":"The leading region of that group's title line.","dynamic":true},
56
- {"name":"<groupKey>:append","type":"BbDropdownItemSlotProps","description":"The trailing region of that group's title line.","dynamic":true}
45
+ {"name":"item:append","type":"BbDropdownButtonItemSlotProps","fields":["disabled?: boolean","index: number","item: InternalItem","open: boolean","placement: Placement | \"cursor\"","label: string"],"description":"The trailing region of every menu row, replacing its `append:icon`; the\nsubmenu chevron and the check on a selected row take its place\n(BbDropdown's rules)."},
46
+ {"name":"item:prepend","type":"BbDropdownButtonItemSlotProps","fields":["disabled?: boolean","index: number","item: InternalItem","open: boolean","placement: Placement | \"cursor\"","label: string"],"description":"The leading region of every menu row, replacing its `prepend:icon`\n(BbDropdown's rules)."},
47
+ {"name":"loading","type":"BbDropdownPlaceholderSlotProps","fields":["groupId?: string","text: string","error?: unknown"],"description":"Replaces the default loading placeholder row shown in a pipeline group\nwhile its async items load. Rendered once per loading group. Forwarded to\nthe underlying `BbDropdown`."},
48
+ {"name":"<value>","type":"BbDropdownItemSlotProps","description":"One row's content (label and description), by its value; in a fetched group, by its resolved `itemValue`.","dynamic":true},
49
+ {"name":"<value>:prepend","type":"BbDropdownItemSlotProps","description":"One row's leading region; replaces its `prepend:icon`.","dynamic":true},
50
+ {"name":"<value>:append","type":"BbDropdownItemSlotProps","description":"One row's trailing region; replaces its `append:icon` and its submenu chevron. The check takes its place on the selected row.","dynamic":true},
51
+ {"name":"<groupId>:item","type":"BbDropdownItemSlotProps","description":"The content of every row of that group, and no other; a row's own `#<value>` still wins.","dynamic":true},
52
+ {"name":"<groupId>:item:prepend","type":"BbDropdownItemSlotProps","description":"The leading region of every row of that group — e.g. an avatar per record, drawn from `item.meta`, while other rows keep their `prepend:icon`.","dynamic":true},
53
+ {"name":"<groupId>:item:append","type":"BbDropdownItemSlotProps","description":"The trailing region of every row of that group; replaces their `append:icon`. The check takes its place on the selected row.","dynamic":true},
54
+ {"name":"<groupId>","type":"BbDropdownItemSlotProps","description":"That group's title line (the group is passed as `item`, `groupTitle` is `true`).","dynamic":true},
55
+ {"name":"<groupId>:prepend","type":"BbDropdownItemSlotProps","description":"The leading region of that group's title line.","dynamic":true},
56
+ {"name":"<groupId>:append","type":"BbDropdownItemSlotProps","description":"The trailing region of that group's title line.","dynamic":true}
57
57
  ],
58
58
  "exposed": [],
59
59
  "models": [],
@@ -72,9 +72,9 @@
72
72
  {"name":"footer","description":"The band around your `#footer` slot: at the bottom of the menu on desktop, the sheet's footer on a phone — handed to the `BbDropdown`.","states":["disabled","loading","open"]},
73
73
  {"name":"input","description":"A searchable group's search field in the menu — a broadcast, every searchable group's field — handed to the `BbDropdown` as its own `pt:input`.","states":["disabled","loading","open"]},
74
74
  {"name":"item","description":"One menu entry, submenus included — a broadcast resolved per entry. Also takes a per-item function, called with the entry.","rowType":"PtValue | ((ctx: PtItemCtx<InternalItem, BbDropdownButtonPtState>) => PtItemResult) | undefined"},
75
- {"name":"itemText","description":"An entry's label (its `text`) — resolved with that entry's states. A per-entry `#<key>` slot replaces it. Also takes a per-item function.","rowType":"PtValue | ((ctx: PtItemCtx<InternalItem, BbDropdownButtonPtState>) => PtItemResult) | undefined"},
75
+ {"name":"itemText","description":"An entry's label (its `label`) — resolved with that entry's states. A per-entry `#<value>` slot replaces it. Also takes a per-item function.","rowType":"PtValue | ((ctx: PtItemCtx<InternalItem, BbDropdownButtonPtState>) => PtItemResult) | undefined"},
76
76
  {"name":"itemIcon","description":"An entry's prepend / append icons — resolved with that entry's states. Also takes a per-item function.","rowType":"PtValue | ((ctx: PtItemCtx<InternalItem, BbDropdownButtonPtState>) => PtItemResult) | undefined"},
77
- {"name":"itemDescription","description":"An entry's muted second line (its `description`) — resolved with that entry's states. A per-entry `#<key>` slot replaces it. Also takes a per-item function.","rowType":"PtValue | ((ctx: PtItemCtx<InternalItem, BbDropdownButtonPtState>) => PtItemResult) | undefined"}
77
+ {"name":"itemDescription","description":"An entry's muted second line (its `description`) — resolved with that entry's states. A per-entry `#<value>` slot replaces it. Also takes a per-item function.","rowType":"PtValue | ((ctx: PtItemCtx<InternalItem, BbDropdownButtonPtState>) => PtItemResult) | undefined"}
78
78
  ],
79
79
  "states": [
80
80
  {"name":"selected","description":"Per node, on the entry parts only (`item`, `itemText`, `itemIcon`, `itemDescription`): a selectable group's checked entry. `pt:root:selected` is a type error, not a silent no-op."},
@@ -91,11 +91,14 @@
91
91
  {"name":"autoLoading","new":"disableAutoLoading","since":"3.0.0-alpha.1","migration":"ai/guides/migration/components/bb-dropdown-button.md","silent":true,"fix":{"kind":"invert"}},
92
92
  {"name":"theme","new":"variant","since":"3.0.0-beta.15","migration":"ai/guides/migration/components/bb-dropdown-button.md","silent":true,"fix":{"kind":"rename"}},
93
93
  {"name":"right:icon","new":"toggle:icon","since":"3.0.0-beta.35","migration":"ai/guides/migration/components/bb-dropdown-button.md","silent":true,"fix":{"kind":"rename"}},
94
- {"name":"no-data","new":"empty","surface":"slot","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"rename"}}
94
+ {"name":"no-data","new":"empty","surface":"slot","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"rename"}},
95
+ {"name":"items[].key","new":"items[].value","surface":"item","hint":"a row's identity: its `v-model` value (any type, compared by hash) and its `#<value>` slots; `check --fix` renames it","since":"3.0.0-beta.49","migration":"ai/guides/migration/components/bb-dropdown-button.md","silent":true,"fix":{"kind":"rename"}},
96
+ {"name":"items[].text","new":"items[].label","surface":"item","hint":"a row's text; `check --fix` renames it","since":"3.0.0-beta.49","migration":"ai/guides/migration/components/bb-dropdown-button.md","silent":true,"fix":{"kind":"rename"}},
97
+ {"name":"items[group].key","new":"items[group].id","surface":"item","hint":"a group's identity, the same word as `<BbDropdownGroup id>`; `check --fix` renames it","since":"3.0.0-beta.49","migration":"ai/guides/migration/components/bb-dropdown-button.md","silent":true,"fix":{"kind":"rename"}}
95
98
  ],
96
99
  "types": [
97
- {"name":"BbDropdownItem","usedAs":["prop items"],"definition":"type BbDropdownItem = InternalItem | InternalGroup | BbDropdownItem[];","members":{"InternalItem":["text: string","disabled?: boolean","href?: string","rel?: string","target?: string","activeClass?: string","ariaCurrentValue?: \"page\" | \"step\" | \"location\" | \"date\" | \"time\" | \"true\" | \"false\"","data?: object","exactActiveClass?: string","headers?: object","download?: string | boolean","external?: boolean","method?: \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\"","onBefore?: (() => void)","onCancel?: (() => void)","onCancelToken?: ((cancelToken: unknown) => void)","onFinish?: (() => void)","only?: string[]","onProgress?: ((progress: { percentage: number | undefined; }) => void)","onStart?: (() => void)","onSuccess?: (() => void)","preserveScroll?: boolean | ((props: Record<string, unknown>) => boolean)","preserveState?: boolean | ((props: Record<string, unknown>) => boolean) | null","queryStringArrayFormat?: \"brackets\" | \"indices\"","replace?: boolean","to?: string | RouteLocationAsRelativeGeneric | RouteLocationAsPathGeneric","async?: boolean","cacheFor?: string | number | (string | number)[]","cacheTags?: string | string[]","component?: string","except?: string[]","instant?: boolean","onError?: ((errors: Record<string, string>) => void)","onPrefetched?: (() => void)","onPrefetching?: (() => void)","pageProps?: Record<string, unknown> | ((currentProps: Record<string, unknown>, sharedProps: Record<string, unknown>) => Record<string, unknown>) | null","prefetch?: string | boolean | string[]","preserveUrl?: boolean","viewTransition?: boolean","items?: BbDropdownItem[]","onClick?: ((...args: any[]) => any)","append:icon?: string","key?: string","keyless?: true","meta?: any","prepend:icon?: string","variant?: keyof DropdownItemVariantRegistry","description?: string","placeholder?: \"loading\" | \"empty\" | \"failed\"","error?: unknown","fetched?: true","slotKey?: string"],"InternalGroup":["append:icon?: string","key?: string","keyless?: true","meta?: any","onClick?: ((...args: any[]) => any)","prepend:icon?: string","variant?: keyof DropdownItemVariantRegistry","dependencies?: unknown[]","depsDebounceTime?: number","enforceCoherence?: boolean","filterBy?: string[]","group?: true","items: any[] | DropdownGroupItemsGetter | (InternalItem | InternalItem[])[]","itemText?: string | ((item: any) => string)","itemProps?: BbDropdownItemProps<any>","itemValue?: string | ((item: any) => any)","loadingText?: string","max?: number","maxHeight?: string | number","multiple?: boolean","clearable?: boolean","emptyText?: string","failedText?: string","prefill?: boolean | \"interaction\"","searchable?: boolean","searchPlaceholder?: string","selectable?: boolean | ((item: any) => boolean)","stash?: boolean","label?: string","hideLabel?: boolean"]}},
98
- {"name":"BbDropdownItemSlotProps","usedAs":["slot <key>","slot <key>:prepend","slot <key>:append","slot <groupKey>:item","slot <groupKey>:item:prepend","slot <groupKey>:item:append","slot <groupKey>","slot <groupKey>:prepend","slot <groupKey>:append"],"definition":"type BbDropdownItemSlotProps = { description?: InternalItem['description']; disabled?: InternalItem['disabled']; group: BbDropdownSlotGroup; groupTitle: boolean; level: number; index: number; item: InternalItem; loading: boolean; open: boolean; placement: BbDropdownProps['placement']; selected: boolean; text: InternalItem['text']; };","fields":["description?: string","disabled?: boolean","group: BbDropdownSlotGroup","groupTitle: boolean","level: number","index: number","item: InternalItem","loading: boolean","open: boolean","placement: Placement | \"cursor\"","selected: boolean","text: string"]},
100
+ {"name":"BbDropdownItem","usedAs":["prop items"],"definition":"type BbDropdownItem = InternalItem | InternalGroup | BbDropdownItem[];","members":{"InternalItem":["disabled?: boolean","href?: string","rel?: string","target?: string","activeClass?: string","ariaCurrentValue?: \"page\" | \"step\" | \"location\" | \"date\" | \"time\" | \"true\" | \"false\"","data?: object","exactActiveClass?: string","headers?: object","download?: string | boolean","external?: boolean","method?: \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\"","onBefore?: (() => void)","onCancel?: (() => void)","onCancelToken?: ((cancelToken: unknown) => void)","onFinish?: (() => void)","only?: string[]","onProgress?: ((progress: { percentage: number | undefined; }) => void)","onStart?: (() => void)","onSuccess?: (() => void)","preserveScroll?: boolean | ((props: Record<string, unknown>) => boolean)","preserveState?: boolean | ((props: Record<string, unknown>) => boolean) | null","queryStringArrayFormat?: \"brackets\" | \"indices\"","replace?: boolean","to?: string | RouteLocationAsRelativeGeneric | RouteLocationAsPathGeneric","async?: boolean","cacheFor?: string | number | (string | number)[]","cacheTags?: string | string[]","component?: string","except?: string[]","instant?: boolean","onError?: ((errors: Record<string, string>) => void)","onPrefetched?: (() => void)","onPrefetching?: (() => void)","pageProps?: Record<string, unknown> | ((currentProps: Record<string, unknown>, sharedProps: Record<string, unknown>) => Record<string, unknown>) | null","prefetch?: string | boolean | string[]","preserveUrl?: boolean","viewTransition?: boolean","items?: BbDropdownItem[]","onClick?: ((...args: any[]) => any)","append:icon?: string","meta?: any","prepend:icon?: string","variant?: keyof DropdownItemVariantRegistry","label: string","value?: unknown","keyless?: true","rowKey?: string","domKey?: string","description?: string","placeholder?: \"loading\" | \"empty\" | \"failed\"","error?: unknown","fetched?: true","slotKey?: string"],"InternalGroup":["append:icon?: string","meta?: any","onClick?: ((...args: any[]) => any)","prepend:icon?: string","variant?: keyof DropdownItemVariantRegistry","id?: string","dependencies?: unknown[]","depsDebounceTime?: number","enforceCoherence?: boolean","filterBy?: string[]","group?: true","items: any[] | DropdownGroupItemsGetter | (InternalItem | InternalItem[])[]","itemText?: string | ((item: any) => string)","itemProps?: BbDropdownItemProps<any>","itemValue?: string | ((item: any) => any)","loadingText?: string","max?: number","maxHeight?: string | number","multiple?: boolean","clearable?: boolean","emptyText?: string","failedText?: string","prefill?: boolean | \"interaction\"","searchable?: boolean","searchPlaceholder?: string","selectable?: boolean | ((item: any) => boolean)","stash?: boolean","label?: string","hideLabel?: boolean"]}},
101
+ {"name":"BbDropdownItemSlotProps","usedAs":["slot <value>","slot <value>:prepend","slot <value>:append","slot <groupId>:item","slot <groupId>:item:prepend","slot <groupId>:item:append","slot <groupId>","slot <groupId>:prepend","slot <groupId>:append"],"definition":"type BbDropdownItemSlotProps = { description?: InternalItem['description']; disabled?: InternalItem['disabled']; group: BbDropdownSlotGroup; groupTitle: boolean; level: number; index: number; item: InternalItem; loading: boolean; open: boolean; placement: BbDropdownProps['placement']; selected: boolean; label: InternalItem['label']; };","fields":["description?: string","disabled?: boolean","group: BbDropdownSlotGroup","groupTitle: boolean","level: number","index: number","item: InternalItem","loading: boolean","open: boolean","placement: Placement | \"cursor\"","selected: boolean","label: string"]},
99
102
  {"name":"BbOffCanvasProps","usedAs":["prop offCanvasProps"],"definition":"type BbOffCanvasProps = { [K in `pt:${BbOffCanvasPtPart}` | `pt:${BbOffCanvasPtPart}:${BbOffCanvasPtState}`]?: PtValue; } & { pt?: PtMap<BbOffCanvasPtPart, BbOffCanvasPtState>; description?: string; disabled?: boolean; eager?: boolean; focusTarget?: string; fullscreen?: boolean | 'mobile'; draggable?: boolean; stack?: string; stackGap?: number; persistent?: boolean; hideClose?: boolean; size?: Responsive<OffCanvasSize>; title?: string; transitionDuration?: number; side?: 'left' | 'top' | 'right' | 'bottom'; };","fields":["description?: string","disabled?: boolean","eager?: boolean","focusTarget?: string","fullscreen?: boolean | \"mobile\"","draggable?: boolean","stack?: string","stackGap?: number","persistent?: boolean","hideClose?: boolean","size?: Responsive<OffCanvasSize>","title?: string","transitionDuration?: number","side?: \"top\" | \"bottom\" | \"left\" | \"right\""]},
100
103
  {"name":"ButtonVariantType","usedAs":["prop variant"],"definition":"type ButtonVariantType = ButtonVariantFromRegistry | 'none';","values":["primary","outline","secondary","ghost","destructive","link","none"],"extensibleVia":"ButtonVariantRegistry"},
101
104
  {"name":"Placement","usedAs":["prop placement"],"definition":"type Placement = 'top' | 'top-start' | 'top-end' | 'right' | 'right-start' | 'right-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end';","values":["top","bottom","left","right","top-start","top-end","right-start","right-end","bottom-start","bottom-end","left-start","left-end"]},
@@ -8,7 +8,7 @@
8
8
  ],
9
9
  "nodes": [
10
10
  {"name":"BbButton","kind":"public","vocabulary":"BbButton","bindings":[{"part":"root","target":"BbBaseButton"},{"part":"spinner","target":"BbSpinner"},{"part":"icon","target":"BbIcon"},{"part":"text","target":"span.bb-button__text"}],"cssProps":[{"name":"--h-xs","documented":true,"readBy":["bb-button","bb-button--xs","bb-button--sm-xs","bb-button--md-xs","bb-button--lg-xs","bb-button--xl-xs","bb-button--2xl-xs"]},{"name":"--icon-size-xs","documented":false,"readBy":["bb-button","bb-button--xs"]},{"name":"--px-xs","documented":false,"readBy":["bb-button","bb-button--xs"]},{"name":"--fs-xs","documented":false,"readBy":["bb-button","bb-button--xs","bb-button--sm-xs","bb-button--md-xs","bb-button--lg-xs","bb-button--xl-xs","bb-button--2xl-xs"]},{"name":"--r-xs","documented":false,"readBy":["bb-button","bb-button--xs"]},{"name":"--gap-xs","documented":false,"readBy":["bb-button","bb-button--xs","bb-button--sm-xs","bb-button--md-xs","bb-button--lg-xs","bb-button--xl-xs","bb-button--2xl-xs"]},{"name":"--h-sm","documented":false,"readBy":["bb-button","bb-button--sm","bb-button--sm-sm","bb-button--md-sm","bb-button--lg-sm","bb-button--xl-sm","bb-button--2xl-sm"]},{"name":"--icon-size-sm","documented":false,"readBy":["bb-button","bb-button--sm"]},{"name":"--px-sm","documented":false,"readBy":["bb-button","bb-button--sm"]},{"name":"--fs-sm","documented":false,"readBy":["bb-button","bb-button--sm","bb-button--sm-sm","bb-button--md-sm","bb-button--lg-sm","bb-button--xl-sm","bb-button--2xl-sm"]},{"name":"--r-sm","documented":false,"readBy":["bb-button","bb-button--sm"]},{"name":"--gap-sm","documented":false,"readBy":["bb-button","bb-button--sm","bb-button--sm-sm","bb-button--md-sm","bb-button--lg-sm","bb-button--xl-sm","bb-button--2xl-sm"]},{"name":"--h-md","documented":false,"readBy":["bb-button","bb-button--md","bb-button--sm-md","bb-button--md-md","bb-button--lg-md","bb-button--xl-md","bb-button--2xl-md"]},{"name":"--icon-size-md","documented":false,"readBy":["bb-button","bb-button--md"]},{"name":"--px-md","documented":false,"readBy":["bb-button","bb-button--md"]},{"name":"--fs-md","documented":false,"readBy":["bb-button","bb-button--md","bb-button--sm-md","bb-button--md-md","bb-button--lg-md","bb-button--xl-md","bb-button--2xl-md"]},{"name":"--r-md","documented":false,"readBy":["bb-button","bb-button--md"]},{"name":"--gap-md","documented":false,"readBy":["bb-button","bb-button--md","bb-button--sm-md","bb-button--md-md","bb-button--lg-md","bb-button--xl-md","bb-button--2xl-md"]},{"name":"--h-lg","documented":false,"readBy":["bb-button","bb-button--lg","bb-button--sm-lg","bb-button--md-lg","bb-button--lg-lg","bb-button--xl-lg","bb-button--2xl-lg"]},{"name":"--icon-size-lg","documented":false,"readBy":["bb-button","bb-button--lg"]},{"name":"--px-lg","documented":false,"readBy":["bb-button","bb-button--lg"]},{"name":"--fs-lg","documented":false,"readBy":["bb-button","bb-button--lg","bb-button--sm-lg","bb-button--md-lg","bb-button--lg-lg","bb-button--xl-lg","bb-button--2xl-lg"]},{"name":"--r-lg","documented":false,"readBy":["bb-button","bb-button--lg"]},{"name":"--gap-lg","documented":false,"readBy":["bb-button","bb-button--lg","bb-button--sm-lg","bb-button--md-lg","bb-button--lg-lg","bb-button--xl-lg","bb-button--2xl-lg"]},{"name":"--h-xl","documented":false,"readBy":["bb-button","bb-button--xl","bb-button--sm-xl","bb-button--md-xl","bb-button--lg-xl","bb-button--xl-xl","bb-button--2xl-xl"]},{"name":"--icon-size-xl","documented":false,"readBy":["bb-button","bb-button--xl"]},{"name":"--px-xl","documented":false,"readBy":["bb-button","bb-button--xl"]},{"name":"--fs-xl","documented":false,"readBy":["bb-button","bb-button--xl","bb-button--sm-xl","bb-button--md-xl","bb-button--lg-xl","bb-button--xl-xl","bb-button--2xl-xl"]},{"name":"--r-xl","documented":false,"readBy":["bb-button","bb-button--xl"]},{"name":"--gap-xl","documented":false,"readBy":["bb-button","bb-button--xl","bb-button--sm-xl","bb-button--md-xl","bb-button--lg-xl","bb-button--xl-xl","bb-button--2xl-xl"]},{"name":"--h-2xl","documented":false,"readBy":["bb-button","bb-button--2xl","bb-button--sm-2xl","bb-button--md-2xl","bb-button--lg-2xl","bb-button--xl-2xl","bb-button--2xl-2xl"]},{"name":"--icon-size-2xl","documented":false,"readBy":["bb-button","bb-button--2xl"]},{"name":"--px-2xl","documented":false,"readBy":["bb-button","bb-button--2xl"]},{"name":"--fs-2xl","documented":false,"readBy":["bb-button","bb-button--2xl","bb-button--sm-2xl","bb-button--md-2xl","bb-button--lg-2xl","bb-button--xl-2xl","bb-button--2xl-2xl"]},{"name":"--r-2xl","documented":false,"readBy":["bb-button","bb-button--2xl"]},{"name":"--gap-2xl","documented":false,"readBy":["bb-button","bb-button--2xl","bb-button--sm-2xl","bb-button--md-2xl","bb-button--lg-2xl","bb-button--xl-2xl","bb-button--2xl-2xl"]},{"name":"--h","documented":true,"readBy":["bb-button","bb-button--icon"]},{"name":"--icon-size","documented":true,"readBy":["bb-button__text","bb-spinner","bb-button__icon","bb-button__prepend-icon","bb-button__append-icon"]},{"name":"--px","documented":true,"readBy":["bb-button","bb-button__prepend-icon","bb-button__append-icon"]},{"name":"--fs","documented":true,"readBy":["bb-button"]},{"name":"--r","documented":true,"readBy":["bb-button"]},{"name":"--gap","documented":true,"readBy":["bb-button","bb-button__text","bb-spinner"]},{"name":"--bg","documented":true,"readBy":["bb-button"]},{"name":"--bg-hover","documented":true,"readBy":["bb-button","bb-base-button--disabled"]},{"name":"--bg-pressed","documented":true,"readBy":["bb-button","bb-base-button--disabled"]},{"name":"--fg","documented":true,"readBy":["bb-button"]},{"name":"--border-color","documented":true,"readBy":["bb-button"]},{"name":"--ring-color","documented":true,"readBy":["bb-button"]},{"name":"--ring-size","documented":true,"readBy":["bb-button"]},{"name":"--bw","documented":true,"readBy":["bb-button"]},{"name":"--fg-hover","documented":true,"readBy":["bb-button","bb-base-button--disabled"]},{"name":"--border-hover","documented":true,"readBy":["bb-button","bb-base-button--disabled"]},{"name":"--fg-pressed","documented":true,"readBy":["bb-button","bb-base-button--disabled"]},{"name":"--border-pressed","documented":true,"readBy":["bb-button","bb-base-button--disabled"]},{"name":"--bg-disabled","documented":true,"readBy":["bb-button","bb-base-button--disabled","bb-button--loading"]},{"name":"--fg-disabled","documented":true,"readBy":["bb-button","bb-base-button--disabled","bb-button--loading"]},{"name":"--border-disabled","documented":true,"readBy":["bb-button","bb-base-button--disabled","bb-button--loading"]},{"name":"--opacity-disabled","documented":true,"readBy":["bb-button","bb-base-button--disabled","bb-button--loading"]},{"name":"--elev-tier","documented":true,"readBy":["bb-button--primary","bb-button--secondary","bb-button--outline","bb-button--destructive"]},{"name":"--elev","documented":true,"readBy":["bb-button"]}],"children":[{"name":"BbIcon","kind":"public","cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"BbBaseButton","kind":"public","vocabulary":"BbBaseButton","bindings":[{"part":"root","target":"RouterComponent"},{"part":"root","target":"a"},{"part":"root","target":"component"}],"children":[{"name":"RouterComponent","kind":"internal"}]},{"name":"BbSpinner","kind":"public","children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]}]}]},
11
- {"name":"BbDropdown","kind":"public","vocabulary":"BbDropdown","bindings":[{"part":"panel","target":"CommonPopover"},{"part":"root","target":"CommonPopover"},{"part":"header","target":"div.bb-dropdown__header"},{"part":"list","target":"span.bb-dropdown__list"},{"part":"footer","target":"div.bb-dropdown__footer"}],"cssProps":[{"name":"--bg","documented":false,"readBy":["bb-dropdown__group-search"]},{"name":"--menu-inset","documented":true,"readBy":["bb-common-popover__bubble","bb-dropdown__group-search","bb-dropdown__list","bb-dropdown__placeholder--failed","bb-dropdown__divider"]}],"children":[{"name":"CommonPopover","kind":"internal"},{"name":"BbDropdownList","kind":"internal","children":[{"name":"BbBaseButton","kind":"public","repeated":true},{"name":"BbBadge","kind":"public","vocabulary":"BbBadge","bindings":[{"part":"spinner","target":"BbSpinner"},{"part":"icon","target":"BbIcon"},{"part":"clear","target":"button.bb-badge__clear"}],"cssProps":[{"name":"--bg","documented":true,"readBy":["bb-badge"]},{"name":"--fg","documented":true,"readBy":["bb-badge","bb-badge__clear"]},{"name":"--bw","documented":true,"readBy":["bb-badge"]},{"name":"--border-color","documented":false,"readBy":["bb-badge"]},{"name":"--ring-color","documented":true,"readBy":["bb-badge","bb-badge__clear","bb-badge__body","bb-badge--highlighted"]},{"name":"--ring-size","documented":true,"readBy":["bb-badge","bb-badge__clear","bb-badge__body","bb-badge--highlighted"]},{"name":"--min-size-md","documented":true,"readBy":["bb-badge"]},{"name":"--min-size","documented":true,"readBy":["bb-badge"]},{"name":"--elev","documented":true,"readBy":["bb-badge","bb-badge__clear","bb-badge__body","bb-badge--highlighted"]},{"name":"--r","documented":true,"readBy":["bb-badge","bb-badge__body","bb-badge__trailing","bb-badge__clear"]},{"name":"--fs","documented":true,"readBy":["bb-badge"]},{"name":"--icon-size","documented":true,"readBy":["bb-badge__icon","bb-badge__prepend-icon","bb-badge__append-icon","bb-badge__clear"]},{"name":"--gap","documented":true,"readBy":["bb-badge","bb-badge__body","bb-badge__trailing","bb-badge__clear"]},{"name":"--px","documented":true,"readBy":["bb-badge","bb-badge--icon","bb-badge__prepend-icon","bb-badge__append-icon","bb-badge--clearable"]},{"name":"--clear-size","documented":true,"readBy":["bb-badge__clear","bb-icon"]},{"name":"--bg-disabled","documented":true,"readBy":["bb-badge__body","bb-base-button--disabled","bb-badge--loading"]},{"name":"--fg-disabled","documented":true,"readBy":["bb-badge__body","bb-base-button--disabled","bb-badge--loading"]},{"name":"--border-disabled","documented":true,"readBy":["bb-badge__body","bb-base-button--disabled","bb-badge--loading"]},{"name":"--pad-left","documented":true,"readBy":["bb-badge__body"]},{"name":"--pad-right","documented":false,"readBy":["bb-badge__body","bb-badge__clear"]},{"name":"--size","documented":false}],"children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"BbSpinner","kind":"public","repeated":true},{"name":"BadgeBodyContent","kind":"internal","children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"BbSpinner","kind":"public","repeated":true}]}]},{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"ErrorIcon","kind":"internal","cssProps":[{"name":"--accent","documented":false,"readBy":["bb-error-icon"]}],"children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]}]},{"name":"CommonPopover","kind":"internal","repeated":true},{"name":"BbDropdownList","kind":"internal","repeated":true}]},{"name":"AdaptiveDropdown","kind":"internal","forwards":[{"to":"BbOffCanvas","mapping":"{ header: 'header', footer: 'footer', panel: 'root', sheet: 'root' }"}],"children":[{"name":"BbOffCanvas","kind":"public","vocabulary":"BbOffCanvas","bindings":[{"part":"header","target":"div.bb-offcanvas__header"},{"part":"title","target":"span.bb-offcanvas__title"},{"part":"description","target":"p.bb-offcanvas__description"},{"part":"close","target":"CloseButton"},{"part":"content","target":"div.bb-offcanvas__content"},{"part":"footer","target":"div.bb-offcanvas__footer"}],"cssProps":[{"name":"--translate-x","documented":false,"readBy":["bb-offcanvas"]},{"name":"--translate-y","documented":false,"readBy":["bb-offcanvas"]},{"name":"--translate","documented":false,"readBy":["bb-offcanvas"]},{"name":"--stack-x","documented":true,"readBy":["bb-offcanvas"]},{"name":"--stack-y","documented":false,"readBy":["bb-offcanvas"]},{"name":"--stack-fill","documented":true,"readBy":["bb-offcanvas","bb-offcanvas--right","bb-offcanvas--left","bb-offcanvas--top","bb-offcanvas--bottom"]},{"name":"--stack-transition-duration","documented":true,"readBy":["bb-offcanvas"]},{"name":"--px","documented":true,"readBy":["bb-offcanvas__header","bb-close-button","bb-offcanvas__content","bb-offcanvas__footer"]},{"name":"--py","documented":false,"readBy":["bb-offcanvas__footer","bb-offcanvas__content","bb-offcanvas__header","bb-close-button"]},{"name":"--handle-w","documented":true,"readBy":["bb-offcanvas__handle"]},{"name":"--handle-h","documented":true,"readBy":["bb-offcanvas__handle"]},{"name":"--handle-bg","documented":true,"readBy":["bb-offcanvas__handle"]},{"name":"--transition-timing-function","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--open"]},{"name":"--bg","documented":false,"readBy":["bb-offcanvas"]},{"name":"--fg","documented":false,"readBy":["bb-offcanvas"]},{"name":"--safe-top","documented":true,"readBy":["bb-offcanvas","bb-offcanvas--left","bb-offcanvas--right","bb-offcanvas--top","bb-offcanvas--fullscreen"]},{"name":"--safe-right","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--right","bb-offcanvas--top","bb-offcanvas--bottom","bb-offcanvas--fullscreen"]},{"name":"--safe-bottom","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--left","bb-offcanvas--right","bb-offcanvas--bottom","bb-offcanvas--fullscreen"]},{"name":"--safe-left","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--left","bb-offcanvas--top","bb-offcanvas--bottom","bb-offcanvas--fullscreen"]},{"name":"--inset-top","documented":false,"readBy":["bb-offcanvas__content","bb-offcanvas__header"]},{"name":"--inset-right","documented":false,"readBy":["bb-offcanvas__header","bb-offcanvas__content","bb-offcanvas__footer"]},{"name":"--inset-bottom","documented":false,"readBy":["bb-offcanvas__footer","bb-offcanvas__content"]},{"name":"--inset-left","documented":false,"readBy":["bb-offcanvas__header","bb-offcanvas__content","bb-offcanvas__footer"]},{"name":"--close-size","documented":true,"readBy":["bb-close-button"]}],"children":[{"name":"CloseButton","kind":"internal","cssProps":[{"name":"--size","documented":true,"readBy":["bb-close-button"]},{"name":"--p","documented":true,"readBy":["bb-close-button"]}]}]},{"name":"BbSmoothHeight","kind":"public"},{"name":"BbButton","kind":"public","repeated":true,"cssProps":[{"name":"--h-xs","documented":true,"readBy":["bb-button","bb-button--xs","bb-button--sm-xs","bb-button--md-xs","bb-button--lg-xs","bb-button--xl-xs","bb-button--2xl-xs"]},{"name":"--icon-size-xs","documented":false,"readBy":["bb-button","bb-button--xs"]},{"name":"--px-xs","documented":false,"readBy":["bb-button","bb-button--xs"]},{"name":"--fs-xs","documented":false,"readBy":["bb-button","bb-button--xs","bb-button--sm-xs","bb-button--md-xs","bb-button--lg-xs","bb-button--xl-xs","bb-button--2xl-xs"]},{"name":"--r-xs","documented":false,"readBy":["bb-button","bb-button--xs"]},{"name":"--gap-xs","documented":false,"readBy":["bb-button","bb-button--xs","bb-button--sm-xs","bb-button--md-xs","bb-button--lg-xs","bb-button--xl-xs","bb-button--2xl-xs"]},{"name":"--h-sm","documented":false,"readBy":["bb-button","bb-button--sm","bb-button--sm-sm","bb-button--md-sm","bb-button--lg-sm","bb-button--xl-sm","bb-button--2xl-sm"]},{"name":"--icon-size-sm","documented":false,"readBy":["bb-button","bb-button--sm"]},{"name":"--px-sm","documented":false,"readBy":["bb-button","bb-button--sm"]},{"name":"--fs-sm","documented":false,"readBy":["bb-button","bb-button--sm","bb-button--sm-sm","bb-button--md-sm","bb-button--lg-sm","bb-button--xl-sm","bb-button--2xl-sm"]},{"name":"--r-sm","documented":false,"readBy":["bb-button","bb-button--sm"]},{"name":"--gap-sm","documented":false,"readBy":["bb-button","bb-button--sm","bb-button--sm-sm","bb-button--md-sm","bb-button--lg-sm","bb-button--xl-sm","bb-button--2xl-sm"]},{"name":"--h-md","documented":false,"readBy":["bb-button","bb-button--md","bb-button--sm-md","bb-button--md-md","bb-button--lg-md","bb-button--xl-md","bb-button--2xl-md"]},{"name":"--icon-size-md","documented":false,"readBy":["bb-button","bb-button--md"]},{"name":"--px-md","documented":false,"readBy":["bb-button","bb-button--md"]},{"name":"--fs-md","documented":false,"readBy":["bb-button","bb-button--md","bb-button--sm-md","bb-button--md-md","bb-button--lg-md","bb-button--xl-md","bb-button--2xl-md"]},{"name":"--r-md","documented":false,"readBy":["bb-button","bb-button--md"]},{"name":"--gap-md","documented":false,"readBy":["bb-button","bb-button--md","bb-button--sm-md","bb-button--md-md","bb-button--lg-md","bb-button--xl-md","bb-button--2xl-md"]},{"name":"--h-lg","documented":false,"readBy":["bb-button","bb-button--lg","bb-button--sm-lg","bb-button--md-lg","bb-button--lg-lg","bb-button--xl-lg","bb-button--2xl-lg"]},{"name":"--icon-size-lg","documented":false,"readBy":["bb-button","bb-button--lg"]},{"name":"--px-lg","documented":false,"readBy":["bb-button","bb-button--lg"]},{"name":"--fs-lg","documented":false,"readBy":["bb-button","bb-button--lg","bb-button--sm-lg","bb-button--md-lg","bb-button--lg-lg","bb-button--xl-lg","bb-button--2xl-lg"]},{"name":"--r-lg","documented":false,"readBy":["bb-button","bb-button--lg"]},{"name":"--gap-lg","documented":false,"readBy":["bb-button","bb-button--lg","bb-button--sm-lg","bb-button--md-lg","bb-button--lg-lg","bb-button--xl-lg","bb-button--2xl-lg"]},{"name":"--h-xl","documented":false,"readBy":["bb-button","bb-button--xl","bb-button--sm-xl","bb-button--md-xl","bb-button--lg-xl","bb-button--xl-xl","bb-button--2xl-xl"]},{"name":"--icon-size-xl","documented":false,"readBy":["bb-button","bb-button--xl"]},{"name":"--px-xl","documented":false,"readBy":["bb-button","bb-button--xl"]},{"name":"--fs-xl","documented":false,"readBy":["bb-button","bb-button--xl","bb-button--sm-xl","bb-button--md-xl","bb-button--lg-xl","bb-button--xl-xl","bb-button--2xl-xl"]},{"name":"--r-xl","documented":false,"readBy":["bb-button","bb-button--xl"]},{"name":"--gap-xl","documented":false,"readBy":["bb-button","bb-button--xl","bb-button--sm-xl","bb-button--md-xl","bb-button--lg-xl","bb-button--xl-xl","bb-button--2xl-xl"]},{"name":"--h-2xl","documented":false,"readBy":["bb-button","bb-button--2xl","bb-button--sm-2xl","bb-button--md-2xl","bb-button--lg-2xl","bb-button--xl-2xl","bb-button--2xl-2xl"]},{"name":"--icon-size-2xl","documented":false,"readBy":["bb-button","bb-button--2xl"]},{"name":"--px-2xl","documented":false,"readBy":["bb-button","bb-button--2xl"]},{"name":"--fs-2xl","documented":false,"readBy":["bb-button","bb-button--2xl","bb-button--sm-2xl","bb-button--md-2xl","bb-button--lg-2xl","bb-button--xl-2xl","bb-button--2xl-2xl"]},{"name":"--r-2xl","documented":false,"readBy":["bb-button","bb-button--2xl"]},{"name":"--gap-2xl","documented":false,"readBy":["bb-button","bb-button--2xl","bb-button--sm-2xl","bb-button--md-2xl","bb-button--lg-2xl","bb-button--xl-2xl","bb-button--2xl-2xl"]},{"name":"--h","documented":true,"readBy":["bb-button","bb-button--icon"]},{"name":"--icon-size","documented":true,"readBy":["bb-button__text","bb-spinner","bb-button__icon","bb-button__prepend-icon","bb-button__append-icon"]},{"name":"--px","documented":true,"readBy":["bb-button","bb-button__prepend-icon","bb-button__append-icon"]},{"name":"--fs","documented":true,"readBy":["bb-button"]},{"name":"--r","documented":true,"readBy":["bb-button"]},{"name":"--gap","documented":true,"readBy":["bb-button","bb-button__text","bb-spinner"]},{"name":"--bg","documented":true,"readBy":["bb-button"]},{"name":"--bg-hover","documented":true,"readBy":["bb-button","bb-base-button--disabled"]},{"name":"--bg-pressed","documented":true,"readBy":["bb-button","bb-base-button--disabled"]},{"name":"--fg","documented":true,"readBy":["bb-button"]},{"name":"--border-color","documented":true,"readBy":["bb-button"]},{"name":"--ring-color","documented":true,"readBy":["bb-button"]},{"name":"--ring-size","documented":true,"readBy":["bb-button"]},{"name":"--bw","documented":true,"readBy":["bb-button"]},{"name":"--fg-hover","documented":true,"readBy":["bb-button","bb-base-button--disabled"]},{"name":"--border-hover","documented":true,"readBy":["bb-button","bb-base-button--disabled"]},{"name":"--fg-pressed","documented":true,"readBy":["bb-button","bb-base-button--disabled"]},{"name":"--border-pressed","documented":true,"readBy":["bb-button","bb-base-button--disabled"]},{"name":"--bg-disabled","documented":true,"readBy":["bb-button","bb-base-button--disabled","bb-button--loading"]},{"name":"--fg-disabled","documented":true,"readBy":["bb-button","bb-base-button--disabled","bb-button--loading"]},{"name":"--border-disabled","documented":true,"readBy":["bb-button","bb-base-button--disabled","bb-button--loading"]},{"name":"--opacity-disabled","documented":true,"readBy":["bb-button","bb-base-button--disabled","bb-button--loading"]},{"name":"--elev-tier","documented":true,"readBy":["bb-button--primary","bb-button--secondary","bb-button--outline","bb-button--destructive"]},{"name":"--elev","documented":true,"readBy":["bb-button"]}]},{"name":"BbDropdownList","kind":"internal","repeated":true}]},{"name":"DropdownPipelineResolver","kind":"internal"}]}
11
+ {"name":"BbDropdown","kind":"public","vocabulary":"BbDropdown","bindings":[{"part":"panel","target":"CommonPopover"},{"part":"root","target":"CommonPopover"},{"part":"header","target":"div.bb-dropdown__header"},{"part":"list","target":"span.bb-dropdown__list"},{"part":"footer","target":"div.bb-dropdown__footer"}],"cssProps":[{"name":"--bg","documented":false,"readBy":["bb-dropdown__group-search"]},{"name":"--menu-inset","documented":true,"readBy":["bb-common-popover__bubble","bb-dropdown__group-search","bb-dropdown__list","bb-dropdown__placeholder--failed","bb-dropdown__divider"]}],"children":[{"name":"CommonPopover","kind":"internal"},{"name":"BbDropdownList","kind":"internal","children":[{"name":"BbBadge","kind":"public","vocabulary":"BbBadge","bindings":[{"part":"spinner","target":"BbSpinner"},{"part":"icon","target":"BbIcon"},{"part":"clear","target":"button.bb-badge__clear"}],"cssProps":[{"name":"--bg","documented":true,"readBy":["bb-badge"]},{"name":"--fg","documented":true,"readBy":["bb-badge","bb-badge__clear"]},{"name":"--bw","documented":true,"readBy":["bb-badge","bb-badge__clear"]},{"name":"--border-color","documented":false,"readBy":["bb-badge"]},{"name":"--ring-color","documented":true,"readBy":["bb-badge","bb-badge__clear","bb-badge__body","bb-badge--highlighted"]},{"name":"--ring-size","documented":true,"readBy":["bb-badge","bb-badge__clear","bb-badge__body","bb-badge--highlighted"]},{"name":"--min-size-md","documented":true,"readBy":["bb-badge"]},{"name":"--min-size","documented":true,"readBy":["bb-badge"]},{"name":"--elev","documented":true,"readBy":["bb-badge","bb-badge__clear","bb-badge__body","bb-badge--highlighted"]},{"name":"--r","documented":true,"readBy":["bb-badge","bb-badge__body","bb-badge__trailing","bb-badge__clear"]},{"name":"--fs","documented":true,"readBy":["bb-badge"]},{"name":"--icon-size","documented":true,"readBy":["bb-badge__icon","bb-badge__prepend-icon","bb-badge__append-icon","bb-badge__clear"]},{"name":"--gap","documented":true,"readBy":["bb-badge","bb-badge__body","bb-badge__trailing","bb-badge__clear"]},{"name":"--px","documented":true,"readBy":["bb-badge","bb-badge--icon","bb-badge__prepend-icon","bb-badge__append-icon","bb-badge--clearable"]},{"name":"--clear-size","documented":true,"readBy":["bb-badge__clear","bb-icon"]},{"name":"--bg-disabled","documented":true,"readBy":["bb-badge__body","bb-base-button--disabled","bb-badge--loading"]},{"name":"--fg-disabled","documented":true,"readBy":["bb-badge__body","bb-base-button--disabled","bb-badge--loading"]},{"name":"--border-disabled","documented":true,"readBy":["bb-badge__body","bb-base-button--disabled","bb-badge--loading"]},{"name":"--pad-left","documented":true,"readBy":["bb-badge__body"]},{"name":"--pad-right","documented":false,"readBy":["bb-badge__body","bb-badge__clear"]},{"name":"--size","documented":false}],"children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"BbSpinner","kind":"public","repeated":true},{"name":"BadgeBodyContent","kind":"internal","children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"BbSpinner","kind":"public","repeated":true}]}]},{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]},{"name":"ErrorIcon","kind":"internal","cssProps":[{"name":"--accent","documented":false,"readBy":["bb-error-icon"]}],"children":[{"name":"BbIcon","kind":"public","repeated":true,"cssProps":[{"name":"--w","documented":true,"readBy":["bb-icon"]},{"name":"--size","documented":false,"readBy":["bb-icon"]}]}]},{"name":"CommonPopover","kind":"internal","repeated":true},{"name":"BbDropdownList","kind":"internal","repeated":true}]},{"name":"AdaptiveDropdown","kind":"internal","forwards":[{"to":"BbOffCanvas","mapping":"{ header: 'header', footer: 'footer', panel: 'root', sheet: 'root' }"}],"children":[{"name":"BbOffCanvas","kind":"public","vocabulary":"BbOffCanvas","bindings":[{"part":"header","target":"div.bb-offcanvas__header"},{"part":"title","target":"span.bb-offcanvas__title"},{"part":"description","target":"p.bb-offcanvas__description"},{"part":"close","target":"CloseButton"},{"part":"content","target":"div.bb-offcanvas__content"},{"part":"footer","target":"div.bb-offcanvas__footer"}],"cssProps":[{"name":"--translate-x","documented":false,"readBy":["bb-offcanvas"]},{"name":"--translate-y","documented":false,"readBy":["bb-offcanvas"]},{"name":"--translate","documented":false,"readBy":["bb-offcanvas"]},{"name":"--stack-x","documented":true,"readBy":["bb-offcanvas"]},{"name":"--stack-y","documented":false,"readBy":["bb-offcanvas"]},{"name":"--stack-fill","documented":true,"readBy":["bb-offcanvas","bb-offcanvas--right","bb-offcanvas--left","bb-offcanvas--top","bb-offcanvas--bottom"]},{"name":"--stack-transition-duration","documented":true,"readBy":["bb-offcanvas"]},{"name":"--px","documented":true,"readBy":["bb-offcanvas__header","bb-close-button","bb-offcanvas__content","bb-offcanvas__footer"]},{"name":"--py","documented":false,"readBy":["bb-offcanvas__footer","bb-offcanvas__content","bb-offcanvas__header","bb-close-button"]},{"name":"--handle-w","documented":true,"readBy":["bb-offcanvas__handle"]},{"name":"--handle-h","documented":true,"readBy":["bb-offcanvas__handle"]},{"name":"--handle-bg","documented":true,"readBy":["bb-offcanvas__handle"]},{"name":"--transition-timing-function","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--open"]},{"name":"--bg","documented":false,"readBy":["bb-offcanvas"]},{"name":"--fg","documented":false,"readBy":["bb-offcanvas"]},{"name":"--safe-top","documented":true,"readBy":["bb-offcanvas","bb-offcanvas--left","bb-offcanvas--right","bb-offcanvas--top","bb-offcanvas--fullscreen"]},{"name":"--safe-right","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--right","bb-offcanvas--top","bb-offcanvas--bottom","bb-offcanvas--fullscreen"]},{"name":"--safe-bottom","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--left","bb-offcanvas--right","bb-offcanvas--bottom","bb-offcanvas--fullscreen"]},{"name":"--safe-left","documented":false,"readBy":["bb-offcanvas","bb-offcanvas--left","bb-offcanvas--top","bb-offcanvas--bottom","bb-offcanvas--fullscreen"]},{"name":"--inset-top","documented":false,"readBy":["bb-offcanvas__content","bb-offcanvas__header"]},{"name":"--inset-right","documented":false,"readBy":["bb-offcanvas__header","bb-offcanvas__content","bb-offcanvas__footer"]},{"name":"--inset-bottom","documented":false,"readBy":["bb-offcanvas__footer","bb-offcanvas__content"]},{"name":"--inset-left","documented":false,"readBy":["bb-offcanvas__header","bb-offcanvas__content","bb-offcanvas__footer"]},{"name":"--close-size","documented":true,"readBy":["bb-close-button"]}],"children":[{"name":"CloseButton","kind":"internal","cssProps":[{"name":"--size","documented":true,"readBy":["bb-close-button"]},{"name":"--p","documented":true,"readBy":["bb-close-button"]}]}]},{"name":"BbSmoothHeight","kind":"public"},{"name":"BbButton","kind":"public","repeated":true,"cssProps":[{"name":"--h-xs","documented":true,"readBy":["bb-button","bb-button--xs","bb-button--sm-xs","bb-button--md-xs","bb-button--lg-xs","bb-button--xl-xs","bb-button--2xl-xs"]},{"name":"--icon-size-xs","documented":false,"readBy":["bb-button","bb-button--xs"]},{"name":"--px-xs","documented":false,"readBy":["bb-button","bb-button--xs"]},{"name":"--fs-xs","documented":false,"readBy":["bb-button","bb-button--xs","bb-button--sm-xs","bb-button--md-xs","bb-button--lg-xs","bb-button--xl-xs","bb-button--2xl-xs"]},{"name":"--r-xs","documented":false,"readBy":["bb-button","bb-button--xs"]},{"name":"--gap-xs","documented":false,"readBy":["bb-button","bb-button--xs","bb-button--sm-xs","bb-button--md-xs","bb-button--lg-xs","bb-button--xl-xs","bb-button--2xl-xs"]},{"name":"--h-sm","documented":false,"readBy":["bb-button","bb-button--sm","bb-button--sm-sm","bb-button--md-sm","bb-button--lg-sm","bb-button--xl-sm","bb-button--2xl-sm"]},{"name":"--icon-size-sm","documented":false,"readBy":["bb-button","bb-button--sm"]},{"name":"--px-sm","documented":false,"readBy":["bb-button","bb-button--sm"]},{"name":"--fs-sm","documented":false,"readBy":["bb-button","bb-button--sm","bb-button--sm-sm","bb-button--md-sm","bb-button--lg-sm","bb-button--xl-sm","bb-button--2xl-sm"]},{"name":"--r-sm","documented":false,"readBy":["bb-button","bb-button--sm"]},{"name":"--gap-sm","documented":false,"readBy":["bb-button","bb-button--sm","bb-button--sm-sm","bb-button--md-sm","bb-button--lg-sm","bb-button--xl-sm","bb-button--2xl-sm"]},{"name":"--h-md","documented":false,"readBy":["bb-button","bb-button--md","bb-button--sm-md","bb-button--md-md","bb-button--lg-md","bb-button--xl-md","bb-button--2xl-md"]},{"name":"--icon-size-md","documented":false,"readBy":["bb-button","bb-button--md"]},{"name":"--px-md","documented":false,"readBy":["bb-button","bb-button--md"]},{"name":"--fs-md","documented":false,"readBy":["bb-button","bb-button--md","bb-button--sm-md","bb-button--md-md","bb-button--lg-md","bb-button--xl-md","bb-button--2xl-md"]},{"name":"--r-md","documented":false,"readBy":["bb-button","bb-button--md"]},{"name":"--gap-md","documented":false,"readBy":["bb-button","bb-button--md","bb-button--sm-md","bb-button--md-md","bb-button--lg-md","bb-button--xl-md","bb-button--2xl-md"]},{"name":"--h-lg","documented":false,"readBy":["bb-button","bb-button--lg","bb-button--sm-lg","bb-button--md-lg","bb-button--lg-lg","bb-button--xl-lg","bb-button--2xl-lg"]},{"name":"--icon-size-lg","documented":false,"readBy":["bb-button","bb-button--lg"]},{"name":"--px-lg","documented":false,"readBy":["bb-button","bb-button--lg"]},{"name":"--fs-lg","documented":false,"readBy":["bb-button","bb-button--lg","bb-button--sm-lg","bb-button--md-lg","bb-button--lg-lg","bb-button--xl-lg","bb-button--2xl-lg"]},{"name":"--r-lg","documented":false,"readBy":["bb-button","bb-button--lg"]},{"name":"--gap-lg","documented":false,"readBy":["bb-button","bb-button--lg","bb-button--sm-lg","bb-button--md-lg","bb-button--lg-lg","bb-button--xl-lg","bb-button--2xl-lg"]},{"name":"--h-xl","documented":false,"readBy":["bb-button","bb-button--xl","bb-button--sm-xl","bb-button--md-xl","bb-button--lg-xl","bb-button--xl-xl","bb-button--2xl-xl"]},{"name":"--icon-size-xl","documented":false,"readBy":["bb-button","bb-button--xl"]},{"name":"--px-xl","documented":false,"readBy":["bb-button","bb-button--xl"]},{"name":"--fs-xl","documented":false,"readBy":["bb-button","bb-button--xl","bb-button--sm-xl","bb-button--md-xl","bb-button--lg-xl","bb-button--xl-xl","bb-button--2xl-xl"]},{"name":"--r-xl","documented":false,"readBy":["bb-button","bb-button--xl"]},{"name":"--gap-xl","documented":false,"readBy":["bb-button","bb-button--xl","bb-button--sm-xl","bb-button--md-xl","bb-button--lg-xl","bb-button--xl-xl","bb-button--2xl-xl"]},{"name":"--h-2xl","documented":false,"readBy":["bb-button","bb-button--2xl","bb-button--sm-2xl","bb-button--md-2xl","bb-button--lg-2xl","bb-button--xl-2xl","bb-button--2xl-2xl"]},{"name":"--icon-size-2xl","documented":false,"readBy":["bb-button","bb-button--2xl"]},{"name":"--px-2xl","documented":false,"readBy":["bb-button","bb-button--2xl"]},{"name":"--fs-2xl","documented":false,"readBy":["bb-button","bb-button--2xl","bb-button--sm-2xl","bb-button--md-2xl","bb-button--lg-2xl","bb-button--xl-2xl","bb-button--2xl-2xl"]},{"name":"--r-2xl","documented":false,"readBy":["bb-button","bb-button--2xl"]},{"name":"--gap-2xl","documented":false,"readBy":["bb-button","bb-button--2xl","bb-button--sm-2xl","bb-button--md-2xl","bb-button--lg-2xl","bb-button--xl-2xl","bb-button--2xl-2xl"]},{"name":"--h","documented":true,"readBy":["bb-button","bb-button--icon"]},{"name":"--icon-size","documented":true,"readBy":["bb-button__text","bb-spinner","bb-button__icon","bb-button__prepend-icon","bb-button__append-icon"]},{"name":"--px","documented":true,"readBy":["bb-button","bb-button__prepend-icon","bb-button__append-icon"]},{"name":"--fs","documented":true,"readBy":["bb-button"]},{"name":"--r","documented":true,"readBy":["bb-button"]},{"name":"--gap","documented":true,"readBy":["bb-button","bb-button__text","bb-spinner"]},{"name":"--bg","documented":true,"readBy":["bb-button"]},{"name":"--bg-hover","documented":true,"readBy":["bb-button","bb-base-button--disabled"]},{"name":"--bg-pressed","documented":true,"readBy":["bb-button","bb-base-button--disabled"]},{"name":"--fg","documented":true,"readBy":["bb-button"]},{"name":"--border-color","documented":true,"readBy":["bb-button"]},{"name":"--ring-color","documented":true,"readBy":["bb-button"]},{"name":"--ring-size","documented":true,"readBy":["bb-button"]},{"name":"--bw","documented":true,"readBy":["bb-button"]},{"name":"--fg-hover","documented":true,"readBy":["bb-button","bb-base-button--disabled"]},{"name":"--border-hover","documented":true,"readBy":["bb-button","bb-base-button--disabled"]},{"name":"--fg-pressed","documented":true,"readBy":["bb-button","bb-base-button--disabled"]},{"name":"--border-pressed","documented":true,"readBy":["bb-button","bb-base-button--disabled"]},{"name":"--bg-disabled","documented":true,"readBy":["bb-button","bb-base-button--disabled","bb-button--loading"]},{"name":"--fg-disabled","documented":true,"readBy":["bb-button","bb-base-button--disabled","bb-button--loading"]},{"name":"--border-disabled","documented":true,"readBy":["bb-button","bb-base-button--disabled","bb-button--loading"]},{"name":"--opacity-disabled","documented":true,"readBy":["bb-button","bb-base-button--disabled","bb-button--loading"]},{"name":"--elev-tier","documented":true,"readBy":["bb-button--primary","bb-button--secondary","bb-button--outline","bb-button--destructive"]},{"name":"--elev","documented":true,"readBy":["bb-button"]}]},{"name":"BbDropdownList","kind":"internal","repeated":true}]},{"name":"DropdownPipelineResolver","kind":"internal"}]}
12
12
  ]
13
13
  },
14
14
  "css": {
@@ -7,11 +7,11 @@
7
7
  "contract": "ai/BbDropdownGroup.md",
8
8
  "source": "ai/source/BbDropdownGroup.md",
9
9
  "props": [
10
- {"name":"id","type":"string","required":true,"description":"Identifier of the group to bind to — must match the `key` of a group\ndeclared in the host `BbDropdown`'s `items`."},
10
+ {"name":"id","type":"string","required":true,"description":"Identifier of the group to bind to — must match the `id` of a group\ndeclared in the host `BbDropdown`'s `items`."},
11
11
  {"name":"modelValue","type":"any","description":"The group's selection: one value for a single group, an array for a\n`multiple` one. Read by the owning BbDropdown through the group's `id`."}
12
12
  ],
13
13
  "events": [
14
- {"name":"item:selected","signature":"(value: any): void","description":"The user picked a row, at the click, a pick you then refuse included —\nwith the item's resolved value (its `item-value` for pipeline groups, else\nits `key`), symmetric with `BbTable`. Your own `v-model` changes fire none."},
14
+ {"name":"item:selected","signature":"(value: any): void","description":"The user picked a row, at the click, a pick you then refuse included —\nwith the row's value (its `item-value` for pipeline groups, else its\n`value`), symmetric with `BbTable`. Your own `v-model` changes fire none."},
15
15
  {"name":"item:unselected","signature":"(value: any): void","description":"The user unpicked a row (or a single pick replaced it), with its resolved value."},
16
16
  {"name":"update:modelValue","signature":"(value: any): void","description":"The value a user change asks for (a pick, a chip ×, a coherence prune).\nWith a listener the group is controlled: the rows tick when you write the\nvalue, and ignoring it leaves them as they are."}
17
17
  ],
@@ -7,6 +7,7 @@
7
7
  "contract": "ai/BbForm.md",
8
8
  "source": "ai/source/BbForm.md",
9
9
  "props": [
10
+ {"name":"disableSubmitLock","type":"boolean | undefined","default":"false","description":"Keep the fields editable while a save runs. By default, while a\n`@submit` that returned a promise is pending, every field joined to the\nform is read-only (never disabled: values stay readable and focusable)\nand every `type=\"submit\"` BbButton inside the form shows its spinner;\nboth end when the promise settles. A `@submit` that returns nothing\nnever locks."},
10
11
  {"name":"fieldErrors","type":"Record<string, unknown> | null | undefined","description":"A server's validation errors, shown on the fields they name, for as long\nas they are in the object: `form.errors` from Inertia's `useForm()`,\n`$page.props.errors`, a Laravel 422 body you kept in a `ref`. Keys are\nfield paths (`email`, `address.city`, `address[city]`, `lines.0.qty`);\na value is a message or a list of them; a nested object reads as dot\npaths. `null`, `undefined` and anything that is not a message show\nnothing. A key no field on the form has is in `unmatchedErrors`.\n\nThe page owns them: editing the field does not hide its message, the\nnext object you pass does. They never block a submit, and a field's own\nrule errors show first. When new messages arrive after a submit, the\nfirst field that has one takes focus. For a one-off message the form\ndrops once the user edits the field, call `setErrors` instead."},
11
12
  {"name":"id","type":"string | undefined","description":"Explicit id, so anything outside the form can read and drive it through\n`useBbFormContext(id)` — a dialog footer's submit button, a page toolbar,\na leave guard. It is also the `<form>`'s own id, so a native\n`<button form=\"id\" type=\"submit\">` outside it submits it. Omit it when the form is self-contained: the slot scope\nalready carries the same state for chrome that lives inside."},
12
13
  {"name":"keepValuesOnUnmount","type":"boolean | Ref<boolean, boolean> | undefined","description":"Keep a field's value (and its place in `@submit`) when it unmounts —\nthe `v-if` wizard step you left, a collapsed section. Off, an unmounted\nfield drops out of the values."},
@@ -11,7 +11,7 @@
11
11
  {"name":"boundary","type":"ElementOrComponentRefOrSelector | undefined","description":"Constrains the card within a bounding element.\nWhen provided, the card will not overflow this container's bounds (e.g. a sidebar).\nAccepts an HTMLElement, a Vue component ref, or a CSS selector string."},
12
12
  {"name":"delay","type":"number | undefined","default":"350","description":"The delay in milliseconds before the card is shown: how long the pointer\nrests on the activator, or keyboard focus stays on it. BbTooltip's name;\na different default, because a card that opened on every pass of the\npointer would be in the way. Closing has a fixed grace instead (see the\nguide § Timing and the safe zone)."},
13
13
  {"name":"disabled","type":"boolean | undefined","default":"false","description":"Disables the component. Disabling an open card closes it."},
14
- {"name":"eager","type":"boolean | undefined","default":"false","description":"Prevents rendering content before it's made visible."},
14
+ {"name":"eager","type":"boolean | undefined","default":"false","description":"Renders the card's content at mount instead of on the first open."},
15
15
  {"name":"id","type":"string | undefined","description":"The activator's id (the card is `bbhc_<id>`, and is labelled by it once it\nholds a control). Generated when omitted."},
16
16
  {"name":"modelValue","type":"boolean | undefined","default":"false","description":"Used by v-model to open / close the card. A card with no `v-model` starts\nclosed and is driven by hover and keyboard focus."},
17
17
  {"name":"offset","type":"number | undefined","default":"4","description":"Space the floating container will maintain from the activator."},
@@ -11,11 +11,11 @@
11
11
  ],
12
12
  "events": [],
13
13
  "slots": [
14
- {"name":"default","type":"DirectivePortalSlotProps","fields":["props: Record<string, unknown>","close: () => void"],"description":"The card's body. `props` is the directive's `portalProps`; `close` closes the card."}
14
+ {"name":"default","type":"BbHoverCardPortalSlotProps","fields":["props: P","close: () => void"],"description":"The card's body. `props` is the directive's `portalProps`; `close` closes the card."}
15
15
  ],
16
16
  "exposed": [],
17
17
  "models": [],
18
18
  "types": [
19
- {"name":"DirectivePortalSlotProps","usedAs":["slot default"],"definition":"type DirectivePortalSlotProps = { props: Record<string, unknown>; close: () => void; };"}
19
+ {"name":"BbHoverCardPortalSlotProps","usedAs":["slot default"],"definition":"type BbHoverCardPortalSlotProps<P = any> = { props: P; close: () => void; };"}
20
20
  ]
21
21
  }
@@ -12,8 +12,10 @@
12
12
  {"name":"autofocus","type":"Booleanish | undefined","description":"Sets autofocus on page load."},
13
13
  {"name":"clearable","type":"boolean | undefined","default":"false","description":"Displays a clear button when the input has a value and is being interacted with."},
14
14
  {"name":"compact","type":"boolean | undefined","default":"false","description":"Compact density. Swaps `--bb-input-h`, `--bb-input-py` and\n`--bb-label-spacing-y` for their `-compact` twins on the field, so a\n`--bb-input-h` you set on the component is ignored while `compact` is on:\nsize a compact field with `--bb-input-h-compact` (and\n`--bb-input-py-compact`) instead."},
15
+ {"name":"currency","type":"string | undefined","description":"An ISO 4217 code (`'EUR'`, `'USD'`, `'JPY'`): the field shows the amount\nthe locale's way, symbol included (`1.234,56 €` in Italian, `$1,234.56`\nin English), inside the text, so `#prefix` / `#suffix` stay free. The\nmodel is the number (`1234.56`). The decimals default to the currency's\nown; `minPrecision` / `maxPrecision` win when set. One or the other with\n`unit`."},
15
16
  {"name":"description","type":"string | undefined","description":"Descriptive text displayed below the label and above the input. Unlike the hint it is always\nvisible, and it is linked to the input via `aria-describedby` (after any\n`errors` / `warnings`, before the `hint`)."},
16
17
  {"name":"disabled","type":"boolean | undefined","default":"false","description":"Disables the component."},
18
+ {"name":"disableFormatting","type":"boolean | undefined","default":"false","description":"Shows the number as typed, with a period decimal and no grouping — the\nfield before Q60.25: no locale display, `name` on the visible input.\nWithout it the field shows the number the locale's way while the user\ntypes (`10.005,6` in Italian), groups it for them, and posts the raw value\n(`10005.6`) through a hidden input carrying `name`."},
17
19
  {"name":"errors","type":"string | string[] | undefined","description":"Can be a string or an array of string containing the messages to display.\nThey render in an `aria-live=\"polite\"` region (announced when they appear)\nand, while the list is non-empty, are referenced FIRST from the control's\n`aria-describedby`, so the reason the field is invalid is re-read whenever\nthe control regains focus."},
18
20
  {"name":"formless","type":"boolean | undefined","default":"false","description":"Keep this control out of the enclosing `BbForm` entirely: not submitted,\nnot dirty, not reset, not validated. For a control that is not form data\n(a filter, a \"show advanced\" switch)."},
19
21
  {"name":"hasErrors","type":"boolean | undefined","default":"false","description":"Define if the component should be in an error state.\nIt usually attaches a CSS class for styling purposes."},
@@ -29,8 +31,9 @@
29
31
  {"name":"layout","type":"FieldLayout | undefined","description":"How the label and the input sit together: `'vertical'`, `'horizontal'` (50/50),\n`'auto'`, `'label-fill'` (the label takes the free space, the input keeps\nits size), `'input-fill'` (the other way round), or a two-word ratio\npattern like `'xx xxxxx'`."},
30
32
  {"name":"loading","type":"boolean | undefined","default":"false","description":"Sets the component in a loading state, usually triggering some visual styles."},
31
33
  {"name":"max","type":"number | undefined","default":"Number.MAX_SAFE_INTEGER","description":"Maximum value cap."},
32
- {"name":"maxPrecision","type":"number | undefined","default":"8","description":"Maximum precision of the number."},
34
+ {"name":"maxPrecision","type":"number | undefined","default":"8","description":"Maximum precision of the number: fraction digits past it are refused as\ntyped (never rounded). With `currency`, the currency's own digits (`2`\nfor EUR, `0` for JPY, `3` for KWD), or `minPrecision` when that is larger."},
33
35
  {"name":"min","type":"number | undefined","default":"Number.MIN_SAFE_INTEGER","description":"Minimum value cap. Applied on blur and on Enter (before a surrounding\nform submits), not while typing, so a value above a `min` greater than 1\ncan be typed digit by digit."},
36
+ {"name":"minPrecision","type":"number | undefined","default":"0","description":"Fraction digits always shown (`2`: `1` shows `1,00`, `1,5` shows `1,50`),\nalso while typing, where the padding zeros are placeholders the user types\nover. The model stays the number (`1.5`). A `minPrecision` above\n`maxPrecision` gives way to it. Applies with `disableFormatting` too\n(the padding only, period decimal). With `currency`, the currency's own\ndigits (`2` for EUR, `0` for JPY)."},
34
37
  {"name":"modelValue","type":"string | number | null | undefined","default":"null","description":"Used by v-model."},
35
38
  {"name":"name","type":"string | undefined","description":"Defines the name of the input."},
36
39
  {"name":"persistentHint","type":"boolean | undefined","default":"false","description":"Keeps the hint displayed."},
@@ -42,6 +45,7 @@
42
45
  {"name":"reverse","type":"boolean | undefined","default":"false","description":"Reverses the layout. Applicable in every direction the order of the label and the input is swapped."},
43
46
  {"name":"rules","type":"RuleExpression<string | number | null>","description":"vee-validate rules for this field. Only inside a `BbForm`."},
44
47
  {"name":"step","type":"number | undefined","default":"1","description":"Incremental unit used by ArrowUp / ArrowDown and by the `increase` and `decrease` functions the slots receive.\nIt is NOT applied to manual input as a step of 5 would prevent the user from inserting a value like `115` because of rounding down."},
48
+ {"name":"unit","type":"BbNumberUnit | undefined","description":"A unit `Intl.NumberFormat` knows (`'kilogram'`, `'kilometer-per-hour'`,\n`'celsius'`, `'percent'`; a typo is a type error): the field shows it\nthe locale's way inside the text (`20 kg`, `15 %`). The model is the number you see: `unit=\"percent\"`\nshowing `15 %` holds `15`, not `0.15`. One or the other with `currency`\n(set both and `currency` wins)."},
45
49
  {"name":"validationLabel","type":"string | undefined","description":"The field's name in validation messages (`{field}`): \"Email is not\nvalid\". Defaults to the `label` (or `legend`), then \"This field\"; the\nfield's `name` never shows. Set it when the label is not a good noun for\na sentence (an icon-only label, a question) or is hidden. Only inside a\n`BbForm`."},
46
50
  {"name":"validationMode","type":"ValidationMode | undefined","values":["aggressive","balanced","lazy","submit-only","submit-live"],"description":"When this field checks itself while the user works: `aggressive` (every\nchange), `balanced` (on leave, then every change while it shows an\nerror), `lazy` (on leave only), `submit-only` (on submit only) or\n`submit-live` (on submit, then every change while it shows an error).\n\"Leave\" is blur for a text-like control, and focus leaving the whole\ncontrol for a picker or a group; a checkbox or switch commits on click.\nUnset, the enclosing `BbForm`'s `validation-mode` applies, then the app's\n`formControls.validationMode` (`'balanced'`). Only inside a `BbForm`."},
47
51
  {"name":"variant","type":"InputVariantType | undefined","default":"'outline'","values":["outline","secondary","none","ghost"],"description":"Visual variant of the field box — the same names and tokens as the\n`BbButton` variants. Colours only: height, padding and border width are\nidentical across variants, so a form never reflows when one changes.\n`'ghost'` has no border in any state (errors and warnings show through\nthe icon and the messages); every variant keeps the focus ring.\nRegister extra names with the plugin's `inputVariants` option.\n\n`'none'` is a blank starting point: the field keeps its structure and\nbehaviour but takes no look, so your own classes don't fight a built-in\none. You then own hover, focus, disabled and the error / warning states.\nFine for a one-off; keep inline styling short, and register a real\nvariant (`inputVariants`) when the look recurs."},
@@ -116,6 +120,7 @@
116
120
  {"name":"validateOn","new":"validationMode","hint":"an array of events became one mode (`aggressive` | `balanced` | `lazy` | `submit-only` | `submit-live`). The old defaults (`['blur']`, `['inactive']`, a toggle's `['update:modelValue', 'change', 'blur']`) are `balanced`, the new default: delete the prop. A text field on `['update:modelValue']` is `validation-mode=\"aggressive\"`. Set it once on `<BbForm validation-mode>` instead of per field","since":"3.0.0-beta.41","migration":"ai/guides/migration/v2-to-v3.md","silent":true,"fix":{"kind":"manual"}}
117
121
  ],
118
122
  "types": [
123
+ {"name":"BbNumberUnit","usedAs":["prop unit"],"definition":"type BbNumberUnit = BbNumberSimpleUnit | `${string}-per-${string}`;"},
119
124
  {"name":"FieldLayout","usedAs":["prop layout"],"definition":"type FieldLayout = 'auto' | 'horizontal' | 'vertical' | 'label-fill' | 'input-fill' | `${string} ${string}`;"},
120
125
  {"name":"InputVariantType","usedAs":["prop variant"],"definition":"type InputVariantType = InputVariantFromRegistry | 'none';","values":["outline","secondary","ghost","none"],"extensibleVia":"InputVariantRegistry"},
121
126
  {"name":"ValidationMode","usedAs":["prop validationMode"],"definition":"type ValidationMode = 'aggressive' | 'balanced' | 'lazy' | 'submit-only' | 'submit-live';","values":["aggressive","balanced","lazy","submit-only","submit-live"]}
@@ -3,7 +3,8 @@
3
3
  "tree": {
4
4
  "bindings": [
5
5
  {"part":"controlAttrs","target":"input.bb-number-input__input"},
6
- {"part":"input","target":"input.bb-number-input__input"}
6
+ {"part":"input","target":"input.bb-number-input__input"},
7
+ {"part":"controlAttrs","target":"input"}
7
8
  ],
8
9
  "nodes": [
9
10
  {"name":"CommonField","kind":"internal","vocabulary":"BbNumberInput","bindings":[{"part":"root","target":"div.bb-field"},{"part":"label","target":"component"},{"part":"description","target":"span.bb-field__description"},{"part":"hint","target":"span.bb-field__hint"},{"part":"counter","target":"span.bb-field__counter"},{"part":"message","target":"div.bb-field__message"}],"cssProps":[{"name":"--ctrl-line","documented":true,"readBy":["bb-field__label","bb-field__input-wrapper"]}],"children":[{"name":"BbAsterisk","kind":"public"}]},
@@ -11,9 +11,10 @@
11
11
  {"name":"adaptive","type":"boolean | undefined","default":"`config.adaptive` (`true`)","description":"On mobile viewports (below `config.mobileMaxWidth`), render the popover as a\nbottom-anchored, auto-sized off-canvas sheet instead of a floating panel.\nThe `header`, `default` and `footer` slots are forwarded to the sheet.\n\nThe `width` prop is intentionally ignored in this mode (it means a different\nthing for a sheet); pass `offCanvasProps` to size or otherwise customise the\nsheet.\n\nWhen unset, falls back to the global `config.adaptive`."},
12
12
  {"name":"boundary","type":"ElementOrComponentRefOrSelector | undefined","description":"Constrains the popover within a bounding element.\nWhen provided, the popover will not overflow this container's bounds (e.g. a sidebar).\nAccepts an HTMLElement, a Vue component ref, or a CSS selector string."},
13
13
  {"name":"disabled","type":"boolean | undefined","default":"false","description":"Disables the component."},
14
- {"name":"eager","type":"boolean | undefined","default":"false","description":"Prevents rendering content before it's made visible."},
14
+ {"name":"eager","type":"boolean | undefined","default":"false","description":"Renders the panel's content at mount instead of on the first open\n(the phone sheet's too)."},
15
15
  {"name":"focusTarget","type":"string | undefined","description":"Selector for the element that receives focus after opening.\nDefaults to the first focusable element inside the popover."},
16
16
  {"name":"id","type":"string | undefined","description":"The activator's id (the panel is `bbp_<id>` and is labelled by it).\nGenerated when omitted."},
17
+ {"name":"modal","type":"boolean | undefined","default":"false","description":"Makes the floating panel modal: the page behind it goes inert and\ncannot scroll, and Tab stays inside the panel until it closes. Off by\ndefault, the panel is a non-modal dialog: the page stays usable, a\nclick outside closes it and still reaches what was clicked, and Tab\npast its last control (or Shift+Tab before its first) leaves it and\ncloses it. The phone sheet is modal either way."},
17
18
  {"name":"modelValue","type":"boolean | undefined","default":"false","description":"Used by v-model to open / close the popover. A popover with no `v-model`\nstarts closed and is driven by its `trigger`."},
18
19
  {"name":"offCanvasProps","type":"Partial<BbOffCanvasProps> | undefined","description":"Props for the phone sheet. A `pt` inside it, object or colon keys, styles\nonly that sheet.\n\nOverrides forwarded to the underlying `BbOffCanvas` when `adaptive` renders\nthe sheet on mobile. Merged over the adaptive defaults\n(`side: 'bottom'`, `size: 'auto'`, `draggable: true`). Ignored when\n`adaptive` is `false`.\n\nA `pt` inside it styles ONLY the sheet, in `BbOffCanvas`'s part words\n(`root`, `header`, `title`, `description`, `content`, `footer`, `close`;\nstate `open`), object (`{ pt: { header: '…' } }`) or colon keys\n(`{ 'pt:header': '…' }`) alike. It merges after what this component\nforwards to its sheet, so it wins a conflict and drops nothing — see the\npassthrough guide § Inside the sheet."},
19
20
  {"name":"offset","type":"number | undefined","default":"4","description":"Space the floating container will maintain from the activator."},
@@ -11,11 +11,11 @@
11
11
  ],
12
12
  "events": [],
13
13
  "slots": [
14
- {"name":"default","type":"DirectivePortalSlotProps","fields":["props: Record<string, unknown>","close: () => void"],"description":"The popover body. `props` is the directive's `portalProps`; `close` closes the popover."}
14
+ {"name":"default","type":"BbPopoverPortalSlotProps","fields":["props: P","close: () => void"],"description":"The popover body. `props` is the directive's `portalProps`; `close` closes the popover."}
15
15
  ],
16
16
  "exposed": [],
17
17
  "models": [],
18
18
  "types": [
19
- {"name":"DirectivePortalSlotProps","usedAs":["slot default"],"definition":"type DirectivePortalSlotProps = { props: Record<string, unknown>; close: () => void; };"}
19
+ {"name":"BbPopoverPortalSlotProps","usedAs":["slot default"],"definition":"type BbPopoverPortalSlotProps<P = any> = { props: P; close: () => void; };"}
20
20
  ]
21
21
  }
@@ -7,11 +7,12 @@
7
7
  "contract": "ai/BbProgress.md",
8
8
  "source": "ai/source/BbProgress.md",
9
9
  "props": [
10
+ {"name":"indeterminate","type":"boolean | undefined","default":"false","description":"A wait you cannot measure yet: the bar slides back and forth (a calm\npulse under `prefers-reduced-motion`) and the progressbar reports no\nvalue (`aria-valuenow` is omitted, as the ARIA pattern asks). The\n`modelValue` is kept and shows again when this turns off. A `null`\n`modelValue` alone is still an empty bar, not this."},
10
11
  {"name":"label","type":"string | undefined","default":"undefined","description":"Accessible name for the progress bar, forwarded to `aria-label`. A\n`progressbar` with no name is announced only as a bare percentage, so give\nit one whenever the surrounding text doesn't already name it (e.g.\n`\"Upload\"`). Matches the `label` naming prop on BbSpinner / BbIcon."},
11
12
  {"name":"max","type":"number | undefined","default":"100","description":"Maximum value. Upper cap."},
12
13
  {"name":"min","type":"number | undefined","default":"0","description":"Minimum value. Lower cap."},
13
14
  {"name":"modelValue","type":"number | null","required":true,"default":"0","description":"The current progress value — a number between `min` and `max`. This is a\none-way input prop (BbProgress is a display component and never emits\n`update:modelValue`); `null` means no value and renders an empty bar."},
14
- {"name":"pt","type":"PtMap<BbProgressPtPart, never> | undefined","description":"Passthrough, object form: the same keys as the `pt:*` attributes\nwithout the prefix. See the `pt:<part>` row."}
15
+ {"name":"pt","type":"PtMap<BbProgressPtPart, \"indeterminate\"> | undefined","description":"Passthrough, object form: the same keys as the `pt:*` attributes\nwithout the prefix. Parts: `root`, `bar`; state: `indeterminate`."}
15
16
  ],
16
17
  "events": [],
17
18
  "slots": [],
@@ -23,9 +24,8 @@
23
24
  {"name":"root","description":"The track (the `progressbar` element); the bar follows it through its locals (`--track`, `--track-color`, `--accent`, `--r`, the same words as BbSlider's rail and bar)."},
24
25
  {"name":"bar","description":"The fill itself. Its inline `transform` IS the value (it slides from -100% to 0), so style its look here — colour, gradient, radius — never its position."}
25
26
  ],
26
- "states": []
27
- },
28
- "attrTargets": [
29
- "div"
30
- ]
27
+ "states": [
28
+ {"name":"indeterminate","description":"Component-wide: `indeterminate` is on; the bar slides (pulses under reduced motion) instead of showing a value."}
29
+ ]
30
+ }
31
31
  }
@@ -4,6 +4,7 @@
4
4
  "classes": {
5
5
  "bb-progress": [
6
6
  "",
7
+ "--indeterminate",
7
8
  "__bar"
8
9
  ]
9
10
  },
@@ -32,8 +32,8 @@
32
32
  {"name":"itemProps","type":"BbOptionGroupItemProps<T> | undefined","description":"ADDITIONAL row fields resolved from each item — never its text or value\n(those stay on `itemText` / `itemValue`). Option groups accept one field:\n\n- `description` — a muted line under the option label, beside the control;\n it may wrap.\n\nEither an object with a path or getter per field\n(`{ description: 'email' }`) or a function returning the fields\n(`(item) => ({ description: item.email })`). Without it no field renders —\nan item's own `description` is never read implicitly — and an empty value\nrenders nothing for that item. The description is announced as the\noption's description, never part of its name. To disable individual\noptions use `selectable`."},
33
33
  {"name":"itemReverse","type":"boolean | undefined","default":"false","description":"Swaps each row's input and label from their natural order (input first),\nin every `item-layout`. `reverse` swaps the legend and the options instead."},
34
34
  {"name":"items","type":"T[] | ((context: BbRadioGroupItemsContext) => T[] | Promise<T[]>)","required":true,"description":"The options: an array, or a provider function called with ONE context\nobject and returning the rows, sync or async. The context carries:\n- `reason` — why this call happened: `'initial'` (the first load, on\n mount), `'dependencies'` (a `dependencies` entry or the `items`\n function changed; a retry arrives this way) or `'model'` (the model\n changed from outside and the options cannot resolve it). The group has\n no search field, so it never passes `query`;\n- `modelValue` — the `v-model` as-is;\n- `signal` — an `AbortSignal`, aborted when a newer call starts or the\n group is disposed; pass it to every request.\n\nA provider signals a failure by THROWING, never by returning `[]`: the\nrows are cleared, nothing is pruned, and `#empty` receives the `error`\n(`failed-text` is shown). Zero-argument providers keep working. Annotate\nthe parameter `BbRadioGroupItemsContext`."},
35
- {"name":"itemText","type":"ItemAccessor<T, string> | undefined","default":"JSON.stringify(item)","description":"Defines a path that returns a property of the object to use as text or a function that returns a string."},
36
- {"name":"itemValue","type":"ItemAccessor<T> | undefined","default":"the whole item","description":"Defines a path that returns a property of the object to use as value or a function that returns any value."},
35
+ {"name":"itemText","type":"ItemAccessor<T, string> | undefined","default":"own `label`, else `text`, else `JSON.stringify(item)`","description":"Defines a path that returns a property of the object to use as text or a function that returns a string.\n\nUnset: own `label`, else `text` (`{ label, value }` needs no accessor)."},
36
+ {"name":"itemValue","type":"ItemAccessor<T> | undefined","default":"own `value`, else the whole item","description":"Defines a path that returns a property of the object to use as value or a function that returns any value.\n\nUnset: own `value`, even `null`."},
37
37
  {"name":"labelAlign","type":"FieldCrossAlign | undefined","values":["top","center","bottom"],"description":"Vertical position of the label block in a side-by-side row; not\n`labelPosition`, the horizontal one. Omitted, the label's first line\nmeets the control's."},
38
38
  {"name":"layout","type":"FieldLayout | undefined","description":"How the label and the input sit together: `'vertical'`, `'horizontal'` (50/50),\n`'auto'`, `'label-fill'` (the label takes the free space, the input keeps\nits size), `'input-fill'` (the other way round), or a two-word ratio\npattern like `'xx xxxxx'`."},
39
39
  {"name":"legend","type":"string","required":true,"description":"Text content of the legend."},
@@ -36,8 +36,8 @@
36
36
  {"name":"itemHeight","type":"number | undefined","default":"28","description":"Height of the options in the listbox (px). Defaults to 28px (24px\ncompact; 44px / 36px on mobile viewports). An explicit value wins on\nevery viewport."},
37
37
  {"name":"itemProps","type":"BbSelectItemProps<T> | undefined","description":"ADDITIONAL row fields resolved from each item — never its text or value\n(those stay on `itemText` / `itemValue`). Accepted fields:\n\n- `description` — a muted line under the option label. Setting it gives\n every row a fixed two-line height (the list is virtualized); the\n description stays on one line and ellipsizes. Announced as the option's\n description, never part of its name; matched by the search with the text\n when `filterBy` is empty.\n- `prepend:icon` — an icon before the label.\n- `append:icon` — an icon after the label; on the selected row the check\n takes its place.\n\nEither an object with a path or getter per field\n(`{ description: 'email', 'prepend:icon': 'icon' }`) or a function\nreturning the fields (`(item) => ({ description: item.email })`). Without\nit no field renders — nothing is read off the item implicitly — and an empty\nvalue renders nothing for that item. Never shown in the trigger or the\nchips. To disable individual options use `selectable`."},
38
38
  {"name":"items","type":"T[] | ((context: BbSelectItemsContext) => T[] | Promise<T[]>)","required":true,"description":"The options: an array, or a provider function called with ONE context\nobject and returning the rows, sync or async. The context carries:\n- `query` — what the user typed, `''` until they type;\n- `reason` — why this call happened: `'search'` (the user typed, and\n nothing else), `'initial'` (the first load, on mount or on the first\n open), `'dependencies'` (a `dependencies` entry or the `items` function\n changed; a retry arrives this way), `'model'` (the model changed from\n outside and the options cannot resolve it), `'reopen'` (the panel\n reopened over a searched list). To resolve the selection by id, branch\n on `reason !== 'search'`;\n- `modelValue` — the `v-model` as-is;\n- `signal` — an `AbortSignal`, aborted when a newer call starts or the\n component is disposed; pass it to every request.\n\nA provider signals a failure by THROWING, never by returning `[]`: the\nrows are cleared, nothing is pruned, and `#empty` receives the `error`\n(`failed-text` is shown). A newer call aborts the one in flight, and the\naborted call's rejection or resolution is dropped silently.\nZero-argument providers keep working. Annotate the parameter\n`BbSelectItemsContext`."},
39
- {"name":"itemText","type":"ItemAccessor<T, string> | undefined","default":"JSON.stringify(item)","description":"Defines a path that returns a property of the object to use as text or a function\nthat returns a string."},
40
- {"name":"itemValue","type":"ItemAccessor<T> | undefined","default":"the whole item","description":"Defines a path that returns a property of the object to use as value or a function\nthat returns any value."},
39
+ {"name":"itemText","type":"ItemAccessor<T, string> | undefined","default":"own `label`, else `text`, else `JSON.stringify(item)`","description":"Defines a path that returns a property of the object to use as text or a function\nthat returns a string.\n\nUnset: own `label`, else `text` (`{ label, value }` needs no accessor)."},
40
+ {"name":"itemValue","type":"ItemAccessor<T> | undefined","default":"own `value`, else the whole item","description":"Defines a path that returns a property of the object to use as value or a function\nthat returns any value.\n\nUnset: own `value`, even `null`."},
41
41
  {"name":"label","type":"string","required":true,"description":"Text content of the label of the element."},
42
42
  {"name":"labelAlign","type":"FieldCrossAlign | undefined","values":["top","center","bottom"],"description":"Vertical position of the label block in a side-by-side row; not\n`labelPosition`, the horizontal one. Omitted, the label's first line\nmeets the control's."},
43
43
  {"name":"labelMode","type":"\"outside\" | \"floating\" | \"inside\" | undefined","description":"Label rendering mode."},