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
@@ -10,15 +10,16 @@
10
10
  :aria-label="label || undefined"
11
11
  :aria-valuemax="max"
12
12
  :aria-valuemin="min"
13
- :aria-valuenow="ariaValueNow"
13
+ :aria-valuenow="indeterminate ? undefined : ariaValueNow"
14
14
  class="bb-progress"
15
+ :class="{ 'bb-progress--indeterminate': indeterminate }"
15
16
  role="progressbar"
16
17
  :style="containerStyle"
17
- v-bind="passthrough.rootAttrs"
18
+ v-bind="rootAttrs"
18
19
  >
19
20
  <div
20
21
  class="bb-progress__bar"
21
- :style="barStyle"
22
+ :style="indeterminate ? undefined : barStyle"
22
23
  v-bind="passthrough.bar"
23
24
  ></div>
24
25
  </div>
@@ -44,7 +45,7 @@ const props = withDefaults(defineProps<BbProgressProps>(), {
44
45
  });
45
46
 
46
47
  /**
47
- * Passthrough (plans/passthrough/BbProgress.md). `root` (the track) and `bar` (the fill); no states — everything it paints is configuration.
48
+ * Passthrough (plans/passthrough/BbProgress.md). `root` (the track) and `bar` (the fill); one state, `indeterminate`.
48
49
  */
49
50
  const passthrough = usePassthrough({
50
51
  component: 'BbProgress',
@@ -52,14 +53,25 @@ const passthrough = usePassthrough({
52
53
  props,
53
54
  parts: BB_PROGRESS_PT.parts,
54
55
  states: BB_PROGRESS_PT.states,
55
- active: {},
56
+ active: { indeterminate: () => !!props.indeterminate },
57
+ });
58
+
59
+ /*
60
+ * Q60.29: an indeterminate bar reports no value, so a consumer's
61
+ * `aria-valuetext` (the guide suggests one for units) is held back while it is
62
+ * on and returns with the value.
63
+ */
64
+ const rootAttrs = computed(() => {
65
+ const attrs = passthrough.rootAttrs as Record<string, unknown>;
66
+ if (!props.indeterminate || !('aria-valuetext' in attrs)) return attrs;
67
+ const { 'aria-valuetext': _valuetext, ...rest } = attrs;
68
+ return rest;
56
69
  });
57
70
 
58
71
  // aria-valuenow must sit within [valuemin, valuemax], so it mirrors the
59
- // clamped visual fill. There is no indeterminate mode (BbSpinner is the
60
- // indeterminate affordance): a `null` value reports `min`, matching the
61
- // empty bar it renders — never omit the attribute, as omission would signal
62
- // "indeterminate" to assistive tech.
72
+ // clamped visual fill. Only `indeterminate` omits it (Q60.29: omission is how
73
+ // a progressbar says "indeterminate" to assistive tech): a `null` value
74
+ // reports `min`, matching the empty bar it renders.
63
75
  // NaN (a calc glitch upstream) degrades like `null`: `clamp` would pass it
64
76
  // through to aria-valuenow="NaN" and a dropped transform (a full bar).
65
77
  // ±Infinity already clamps to an end.
@@ -110,8 +122,7 @@ import type { PtMap, PtValue } from '@/types/passthrough';
110
122
  * Props for BbProgress.
111
123
  */
112
124
  /**
113
- * Passthrough parts of `BbProgress` (plans/passthrough/BbProgress.md). Nothing
114
- * it paints is a state.
125
+ * Passthrough parts of `BbProgress` (plans/passthrough/BbProgress.md).
115
126
  *
116
127
  * @part root - The track (the `progressbar` element); the bar follows it
117
128
  * through its locals (`--track`, `--track-color`, `--accent`, `--r`, the
@@ -121,27 +132,45 @@ import type { PtMap, PtValue } from '@/types/passthrough';
121
132
  * never its position.
122
133
  */
123
134
  export type BbProgressPtPart = 'root' | 'bar';
124
- /** The runtime lists the resolver is wired with — no states: nothing this component paints is a state. */
135
+ /**
136
+ * Passthrough states of `BbProgress`.
137
+ *
138
+ * @state indeterminate - Component-wide: `indeterminate` is on; the bar
139
+ * slides (pulses under reduced motion) instead of showing a value.
140
+ */
141
+ export type BbProgressPtState = 'indeterminate';
142
+ /** The runtime lists the resolver is wired with. */
125
143
  export const BB_PROGRESS_PT = {
126
144
  parts: ['root', 'bar'],
127
- states: [],
145
+ states: ['indeterminate'],
128
146
  } as const satisfies {
129
147
  parts: readonly BbProgressPtPart[];
130
- states: readonly never[];
148
+ states: readonly BbProgressPtState[];
131
149
  };
132
150
 
133
151
  // Spelled INLINE with this component's own union (Vue's SFC type resolver
134
152
  // does not substitute a generic alias's type parameters — PASSTHROUGH.md T20).
135
- // No state axis: a `never` state does not resolve to finite keys.
136
153
  // eslint-disable-next-line @typescript-eslint/consistent-indexed-object-style
137
154
  export type BbProgressProps = {
138
- [K in `pt:${BbProgressPtPart}`]?: PtValue;
155
+ [K in
156
+ | `pt:${BbProgressPtPart}`
157
+ | `pt:${BbProgressPtPart}:${BbProgressPtState}`]?: PtValue;
139
158
  } & {
140
159
  /**
141
160
  * Passthrough, object form: the same keys as the `pt:*` attributes
142
- * without the prefix. See the `pt:<part>` row.
161
+ * without the prefix. Parts: `root`, `bar`; state: `indeterminate`.
162
+ */
163
+ pt?: PtMap<BbProgressPtPart, BbProgressPtState>;
164
+ /**
165
+ * A wait you cannot measure yet: the bar slides back and forth (a calm
166
+ * pulse under `prefers-reduced-motion`) and the progressbar reports no
167
+ * value (`aria-valuenow` is omitted, as the ARIA pattern asks). The
168
+ * `modelValue` is kept and shows again when this turns off. A `null`
169
+ * `modelValue` alone is still an empty bar, not this.
170
+ *
171
+ * @defaultValue `false`
143
172
  */
144
- pt?: PtMap<BbProgressPtPart, never>;
173
+ indeterminate?: boolean;
145
174
  /**
146
175
  * The current progress value — a number between `min` and `max`. This is a
147
176
  * one-way input prop (BbProgress is a display component and never emits
@@ -215,4 +244,39 @@ export type BbProgressProps = {
215
244
  transition: transform var(--transition-duration);
216
245
  width: 100%;
217
246
  }
247
+
248
+ /*
249
+ * Q60.29 — `indeterminate`: a wait with no measurable end. A short bar slides
250
+ * across the track (transform only: composited). Under reduced motion the
251
+ * full bar breathes instead, slowly, without moving.
252
+ */
253
+ .bb-progress--indeterminate > .bb-progress__bar {
254
+ animation: bb-progress-slide 1.6s var(--bb-ease) infinite;
255
+ transition: none;
256
+ width: 40%;
257
+
258
+ @media (prefers-reduced-motion: reduce) {
259
+ animation: bb-progress-pulse 2.4s ease-in-out infinite;
260
+ width: 100%;
261
+ }
262
+ }
263
+
264
+ @keyframes bb-progress-slide {
265
+ from {
266
+ transform: translateX(-100%);
267
+ }
268
+ to {
269
+ transform: translateX(250%);
270
+ }
271
+ }
272
+
273
+ @keyframes bb-progress-pulse {
274
+ 0%,
275
+ 100% {
276
+ opacity: 1;
277
+ }
278
+ 50% {
279
+ opacity: 0.4;
280
+ }
281
+ }
218
282
  ```
@@ -29,7 +29,7 @@
29
29
  :loading="loading"
30
30
  :name="resolvedName"
31
31
  :passthrough="containerPassthrough"
32
- :readonly="readonly"
32
+ :readonly="fieldReadonly"
33
33
  :reverse="reverse"
34
34
  :show-asterisk="showAsterisk"
35
35
  :show-hint="showHint"
@@ -53,7 +53,7 @@
53
53
  <OptionsContainer
54
54
  :ref="setOptionsElement"
55
55
  :aria-labelledby="hasLegend() ? `${fieldId}__label` : undefined"
56
- :aria-readonly="hasLegend() && readonly ? true : undefined"
56
+ :aria-readonly="hasLegend() && fieldReadonly ? true : undefined"
57
57
  :aria-required="hasLegend() ? fieldAriaRequired : undefined"
58
58
  block="bb-radio-group"
59
59
  :empty-text="emptyText"
@@ -115,7 +115,7 @@
115
115
  :focused="rowFocus.focused(option.valueHash)"
116
116
  :has-errors="!!fieldHasErrors"
117
117
  :has-warnings="!!fieldHasWarnings && !fieldHasErrors"
118
- :readonly="!!readonly"
118
+ :readonly="!!fieldReadonly"
119
119
  v-bind="passthrough.part('icon', rowStates, option.item)"
120
120
  />
121
121
  <!-- eslint-enable vue/attributes-order -->
@@ -196,6 +196,7 @@ const {
196
196
  showAsterisk,
197
197
  errors: fieldErrors,
198
198
  ariaRequired: fieldAriaRequired,
199
+ readonly: fieldReadonly,
199
200
  } = useFormBinding(declaredProps, declaredEmit, {
200
201
  componentName: 'BbRadioGroup',
201
202
  identifierFallback: () => declaredProps.legend,
@@ -321,6 +322,7 @@ const { options } = useBaseOptions({
321
322
  itemText: props.itemText as any,
322
323
  itemProps: toRef(props, 'itemProps'),
323
324
  itemValue: props.itemValue as any,
325
+ optionDefaults: true,
324
326
  max: Infinity,
325
327
  selectable: toRef(props, 'selectable'),
326
328
  selectedIndexedByHash: modelValueIndexedByHash,
@@ -740,14 +742,18 @@ export type BbRadioGroupProps<T> = {
740
742
  /**
741
743
  * Defines a path that returns a property of the object to use as text or a function that returns a string.
742
744
  *
743
- * @defaultValue `JSON.stringify(item)`
745
+ * Unset: own `label`, else `text` (`{ label, value }` needs no accessor).
746
+ *
747
+ * @defaultValue own `label`, else `text`, else `JSON.stringify(item)`
744
748
  */
745
749
  itemText?: ItemAccessor<T, string>;
746
750
 
747
751
  /**
748
752
  * Defines a path that returns a property of the object to use as value or a function that returns any value.
749
753
  *
750
- * @defaultValue the whole item
754
+ * Unset: own `value`, even `null`.
755
+ *
756
+ * @defaultValue own `value`, else the whole item
751
757
  */
752
758
  itemValue?: ItemAccessor<T>;
753
759
 
@@ -1054,6 +1060,7 @@ export type BbRadioGroupSlots<T> = {
1054
1060
  .bb-radio-group {
1055
1061
  .bb-field__layout--horizontal {
1056
1062
  .bb-field__label {
1063
+ /* stylelint-disable-next-line declaration-property-value-disallowed-list -- support: `float: inline-start` needs Chrome 118, above the 114 floor */
1057
1064
  float: left;
1058
1065
  }
1059
1066
  }
@@ -27,7 +27,7 @@
27
27
  :layout="layout"
28
28
  :name="resolvedName"
29
29
  :passthrough="passthrough"
30
- :readonly="readonly"
30
+ :readonly="fieldReadonly"
31
31
  :reverse="reverse"
32
32
  :show-asterisk="showAsterisk"
33
33
  :show-hint="showHint"
@@ -59,7 +59,7 @@
59
59
  'bb-rating__stars--errors': fieldHasErrors,
60
60
  'bb-rating__stars--warnings':
61
61
  Boolean(fieldHasWarnings) && !fieldHasErrors,
62
- 'bb-rating__stars--readonly': readonly,
62
+ 'bb-rating__stars--readonly': fieldReadonly,
63
63
  'bb-rating__stars--forced-clear': suppressHoverPreview,
64
64
  }"
65
65
  data-bb-no-drag
@@ -68,7 +68,7 @@
68
68
  >
69
69
  <span
70
70
  :aria-labelledby="hasLegend() ? `${fieldId}__label` : undefined"
71
- :aria-readonly="groupRole() && readonly ? true : undefined"
71
+ :aria-readonly="groupRole() && fieldReadonly ? true : undefined"
72
72
  :aria-required="groupRole() ? fieldAriaRequired : undefined"
73
73
  class="bb-rating__options"
74
74
  :role="groupRole()"
@@ -85,7 +85,7 @@
85
85
  'bb-rating__item--filled': option.filled,
86
86
  'bb-rating__item--empty': !option.filled,
87
87
  'bb-rating__item--disabled': option.disabled,
88
- 'bb-rating__item--readonly': readonly,
88
+ 'bb-rating__item--readonly': fieldReadonly,
89
89
  }"
90
90
  v-bind="
91
91
  passthrough.part('item', {
@@ -107,7 +107,7 @@
107
107
  class="bb-sr-only"
108
108
  :disabled="option.disabled"
109
109
  :name="option.name"
110
- :required="readonly ? undefined : fieldRequired || undefined"
110
+ :required="fieldReadonly ? undefined : fieldRequired || undefined"
111
111
  type="radio"
112
112
  :value="option.value"
113
113
  v-bind="eventListeners"
@@ -181,6 +181,7 @@ const {
181
181
  required: fieldRequired,
182
182
  ariaRequired: fieldAriaRequired,
183
183
  model: fieldModel,
184
+ readonly: fieldReadonly,
184
185
  } = useFormBinding(declaredProps, declaredEmit, {
185
186
  componentName: 'BbRating',
186
187
  identifierFallback: () => declaredProps.legend,
@@ -913,8 +914,8 @@ export type BbRatingSlots = {
913
914
  cursor: pointer;
914
915
  display: flex;
915
916
  justify-content: center;
916
- padding-left: 2px;
917
- padding-right: 2px;
917
+ padding-inline-end: 2px;
918
+ padding-inline-start: 2px;
918
919
 
919
920
  &:has(:focus-visible) {
920
921
  box-shadow: 0px 0px 0px var(--bb-ring-size) var(--ring-color);
@@ -959,8 +960,8 @@ export type BbRatingSlots = {
959
960
  background-color: var(--bg);
960
961
  border: var(--bb-border-w) solid var(--bb-field-border);
961
962
  border-radius: var(--bb-radius);
962
- padding-left: var(--bb-input-px);
963
- padding-right: var(--bb-input-px);
963
+ padding-inline-end: var(--bb-input-px);
964
+ padding-inline-start: var(--bb-input-px);
964
965
  padding-top: calc(var(--bb-label-lh-sm) + var(--bb-input-py));
965
966
  position: relative;
966
967
  transition:
@@ -1016,6 +1017,7 @@ export type BbRatingSlots = {
1016
1017
 
1017
1018
  .bb-field__layout--horizontal {
1018
1019
  .bb-field__label {
1020
+ /* stylelint-disable-next-line declaration-property-value-disallowed-list -- support: `float: inline-start` needs Chrome 118, above the 114 floor */
1019
1021
  float: left;
1020
1022
  }
1021
1023
  }
@@ -29,7 +29,7 @@
29
29
  :mobile="isMobile"
30
30
  :name="name"
31
31
  :passthrough="passthrough"
32
- :readonly="readonly"
32
+ :readonly="fieldReadonly"
33
33
  :reverse="reverse"
34
34
  :show-asterisk="showAsterisk"
35
35
  :show-hint="showHint"
@@ -81,7 +81,7 @@
81
81
  :prefill="computedPrefill"
82
82
  :pt="popoverPt()"
83
83
  :query-debounce-time="queryDebounceTime"
84
- :readonly="readonly"
84
+ :readonly="fieldReadonly"
85
85
  :selectable="selectable"
86
86
  :stash="stash"
87
87
  :transition-duration="transitionDuration"
@@ -110,7 +110,7 @@
110
110
  :class="{
111
111
  'bb-select__field--shown': shown,
112
112
  'bb-select__field--disabled': disabled,
113
- 'bb-select__field--readonly': readonly,
113
+ 'bb-select__field--readonly': fieldReadonly,
114
114
  }"
115
115
  :clearable="clearable"
116
116
  :compact="compact"
@@ -121,7 +121,7 @@
121
121
  :loading="activatorLoading"
122
122
  :passthrough="boxRowPassthrough(activatorLoading)"
123
123
  :prepend:icon="declaredProps['prepend:icon']"
124
- :readonly="readonly"
124
+ :readonly="fieldReadonly"
125
125
  :variant="variant"
126
126
  @click:clear="
127
127
  () => {
@@ -145,6 +145,7 @@
145
145
  <input
146
146
  :id="fieldId"
147
147
  :aria-labelledby="`${fieldId}__label ${fieldId}__selection`"
148
+ :aria-readonly="fieldReadonly || undefined"
148
149
  :aria-required="activatorAriaRequired"
149
150
  :autofocus="autofocus"
150
151
  class="bb-select__activator"
@@ -388,6 +389,7 @@ const {
388
389
  ariaRequired: fieldAriaRequired,
389
390
  required: fieldRequired,
390
391
  model: fieldModel,
392
+ readonly: fieldReadonly,
391
393
  } = useFormBinding(declaredProps, declaredEmit, {
392
394
  componentName: 'BbSelect',
393
395
  identifierFallback: () => declaredProps.label,
@@ -1205,7 +1207,9 @@ export type BbSelectProps<T> = {
1205
1207
  * Defines a path that returns a property of the object to use as text or a function
1206
1208
  * that returns a string.
1207
1209
  *
1208
- * @defaultValue `JSON.stringify(item)`
1210
+ * Unset: own `label`, else `text` (`{ label, value }` needs no accessor).
1211
+ *
1212
+ * @defaultValue own `label`, else `text`, else `JSON.stringify(item)`
1209
1213
  */
1210
1214
  itemText?: ItemAccessor<T, string>;
1211
1215
 
@@ -1235,7 +1239,9 @@ export type BbSelectProps<T> = {
1235
1239
  * Defines a path that returns a property of the object to use as value or a function
1236
1240
  * that returns any value.
1237
1241
  *
1238
- * @defaultValue the whole item
1242
+ * Unset: own `value`, even `null`.
1243
+ *
1244
+ * @defaultValue own `value`, else the whole item
1239
1245
  */
1240
1246
  itemValue?: ItemAccessor<T>;
1241
1247
 
@@ -1651,7 +1657,7 @@ export type BbSelectSlots<T> = {
1651
1657
  it smoothly couples with the border */
1652
1658
  &:not(:has(.bb-field-input__prepend-icon)) {
1653
1659
  .bb-select__chips-row--chips {
1654
- margin-left: calc(
1660
+ margin-inline-start: calc(
1655
1661
  var(--bb-input-px) * var(--compensation-multiplier) * -1
1656
1662
  );
1657
1663
  }
@@ -1681,7 +1687,7 @@ export type BbSelectSlots<T> = {
1681
1687
  min-width: 0;
1682
1688
  pointer-events: none;
1683
1689
  position: relative;
1684
- text-align: left;
1690
+ text-align: start;
1685
1691
 
1686
1692
  & input[type='button'] {
1687
1693
  pointer-events: auto;
@@ -1694,7 +1700,8 @@ export type BbSelectSlots<T> = {
1694
1700
  display: flex;
1695
1701
  flex: 1 1 auto;
1696
1702
  flex-wrap: nowrap;
1697
- left: 0;
1703
+ inset-inline-end: 0;
1704
+ inset-inline-start: 0;
1698
1705
  min-width: 0;
1699
1706
  overflow: hidden;
1700
1707
  /* Sits above the absolute activator overlay (later in DOM), so re-enable
@@ -1703,7 +1710,6 @@ export type BbSelectSlots<T> = {
1703
1710
  The activator stays behind purely as the keyboard/focus target. */
1704
1711
  pointer-events: auto;
1705
1712
  position: absolute;
1706
- right: 0;
1707
1713
  top: 0;
1708
1714
 
1709
1715
  &--hidden {
@@ -1166,13 +1166,14 @@ const { options } = useBaseOptions({
1166
1166
  itemText: props.itemText,
1167
1167
  itemProps: toRef(props, 'itemProps'),
1168
1168
  itemValue: props.itemValue,
1169
+ optionDefaults: true,
1169
1170
  // A ref, not the setup-time number: a runtime `:max` change must re-gate rows.
1170
1171
  max: toRef(props, 'max'),
1171
1172
  selectable: toRef(props, 'selectable'),
1172
1173
  selectedIndexedByHash: modelValueIndexedByHash,
1173
1174
  });
1174
1175
 
1175
- const { getItemValue } = useItemValue();
1176
+ const { getOptionValue } = useItemValue();
1176
1177
 
1177
1178
  // `stash` holds SELECTED items only, so it follows the model: a list unselect,
1178
1179
  // a field-chip ✕ and a parent write (a form reset) all end here. Without it a
@@ -1181,7 +1182,8 @@ const { getItemValue } = useItemValue();
1181
1182
  watch(modelValueIndexedByHash, (selected) => {
1182
1183
  if (!props.stash || !innerStash.value.length) return;
1183
1184
  removeFromStash(
1184
- (item) => selected[hash(getItemValue(item, props.itemValue))] !== undefined
1185
+ (item) =>
1186
+ selected[hash(getOptionValue(item, props.itemValue))] !== undefined
1185
1187
  );
1186
1188
  });
1187
1189
 
@@ -1216,7 +1218,7 @@ const fetchedValueHashes = computed(
1216
1218
  () =>
1217
1219
  new Set(
1218
1220
  internalItems.value.map((item) =>
1219
- hash(getItemValue(item, props.itemValue))
1221
+ hash(getOptionValue(item, props.itemValue))
1220
1222
  )
1221
1223
  )
1222
1224
  );
@@ -2477,7 +2479,9 @@ export type BbSelectPopoverProps<Item> = {
2477
2479
  /**
2478
2480
  * Path to item property for display text or function to extract it.
2479
2481
  *
2480
- * @defaultValue `JSON.stringify(item)`
2482
+ * Unset: own `label`, else `text` (`{ label, value }` needs no accessor).
2483
+ *
2484
+ * @defaultValue own `label`, else `text`, else `JSON.stringify(item)`
2481
2485
  */
2482
2486
  itemText?: ItemAccessor<Item, string>;
2483
2487
  /**
@@ -2504,7 +2508,9 @@ export type BbSelectPopoverProps<Item> = {
2504
2508
  /**
2505
2509
  * Path to item property for value or function to extract it.
2506
2510
  *
2507
- * @defaultValue the whole item
2511
+ * Unset: own `value`, even `null`.
2512
+ *
2513
+ * @defaultValue own `value`, else the whole item
2508
2514
  */
2509
2515
  itemValue?: ItemAccessor<Item>;
2510
2516
  /**
@@ -2820,7 +2826,7 @@ export type BbSelectPopoverSlots<Item> = {
2820
2826
  elements, which declare both on the panel */
2821
2827
  .bb-select-popover {
2822
2828
  overflow: visible;
2823
- text-align: left;
2829
+ text-align: start;
2824
2830
  width: var(--w, 320px);
2825
2831
 
2826
2832
  .bb-common-popover__bubble {
@@ -2855,10 +2861,10 @@ export type BbSelectPopoverSlots<Item> = {
2855
2861
  .bb-select-popover__clear {
2856
2862
  color: var(--bb-text-muted);
2857
2863
  flex-shrink: 0;
2864
+ inset-inline-end: 0.75rem;
2858
2865
  opacity: 0;
2859
2866
  pointer-events: none;
2860
2867
  position: absolute;
2861
- right: 0.75rem;
2862
2868
  top: 50%;
2863
2869
  transform: translateY(-50%);
2864
2870
  transition:
@@ -2882,7 +2888,7 @@ export type BbSelectPopoverSlots<Item> = {
2882
2888
  }
2883
2889
 
2884
2890
  .bb-select-popover__clear {
2885
- right: calc(0.75rem - 3px);
2891
+ inset-inline-end: calc(0.75rem - 3px);
2886
2892
  }
2887
2893
 
2888
2894
  .bb-select-popover__clear:hover {
@@ -2898,7 +2904,7 @@ export type BbSelectPopoverSlots<Item> = {
2898
2904
  line-height: var(--bb-leading);
2899
2905
  outline: none;
2900
2906
  padding: 0;
2901
- padding-right: calc(var(--bb-input-icon) + 0.5rem);
2907
+ padding-inline-end: calc(var(--bb-input-icon) + 0.5rem);
2902
2908
  width: 100%;
2903
2909
 
2904
2910
  /* Same cue BbDropdown's group search uses — empty field still reads as
@@ -3028,7 +3034,7 @@ export type BbSelectPopoverSlots<Item> = {
3028
3034
  min-height: var(--option-h);
3029
3035
  opacity: 0;
3030
3036
  padding: 0.125rem 0.5rem;
3031
- text-align: left;
3037
+ text-align: start;
3032
3038
  transition: opacity calc(var(--transition-duration) * 2);
3033
3039
  }
3034
3040
 
@@ -3063,7 +3069,7 @@ export type BbSelectPopoverSlots<Item> = {
3063
3069
  .bb-listbox__inner-container {
3064
3070
  .bb-listbox__loading {
3065
3071
  display: block;
3066
- text-align: left;
3072
+ text-align: start;
3067
3073
  }
3068
3074
  }
3069
3075
  }
@@ -3096,7 +3102,7 @@ export type BbSelectPopoverSlots<Item> = {
3096
3102
  overflow: auto;
3097
3103
  overflow-x: clip;
3098
3104
  padding: 0.25rem;
3099
- text-align: left;
3105
+ text-align: start;
3100
3106
 
3101
3107
  .bb-listbox__loading,
3102
3108
  .bb-listbox__empty {
@@ -3114,7 +3120,7 @@ export type BbSelectPopoverSlots<Item> = {
3114
3120
 
3115
3121
  .bb-listbox__group {
3116
3122
  display: block;
3117
- left: 0;
3123
+ inset-inline-start: 0;
3118
3124
  position: absolute;
3119
3125
  top: 0;
3120
3126
  width: 100%;
@@ -3136,7 +3142,7 @@ export type BbSelectPopoverSlots<Item> = {
3136
3142
  font-size: calc(var(--option-font-size, var(--bb-fs)) - 0.125rem);
3137
3143
  font-weight: 500;
3138
3144
  overflow: hidden;
3139
- text-align: left;
3145
+ text-align: start;
3140
3146
  text-overflow: ellipsis;
3141
3147
  white-space: nowrap;
3142
3148
  }
@@ -3166,9 +3172,9 @@ export type BbSelectPopoverSlots<Item> = {
3166
3172
  display: flex;
3167
3173
  gap: 0.5rem;
3168
3174
  height: var(--option-h);
3169
- left: 0;
3170
- padding-left: 0.5rem;
3171
- padding-right: 0.5rem;
3175
+ inset-inline-start: 0;
3176
+ padding-inline-end: 0.5rem;
3177
+ padding-inline-start: 0.5rem;
3172
3178
  position: absolute;
3173
3179
  top: 0;
3174
3180
  transition: background-color var(--bb-transition-fast)
@@ -3262,7 +3268,7 @@ export type BbSelectPopoverSlots<Item> = {
3262
3268
  font-size: var(--option-font-size, var(--bb-fs));
3263
3269
  min-width: 0;
3264
3270
  overflow: hidden;
3265
- text-align: left;
3271
+ text-align: start;
3266
3272
  text-overflow: ellipsis;
3267
3273
  white-space: nowrap;
3268
3274
  }
@@ -3272,7 +3278,7 @@ export type BbSelectPopoverSlots<Item> = {
3272
3278
  font-size: calc(var(--option-font-size, var(--bb-fs)) - 2px);
3273
3279
  line-height: 1.3;
3274
3280
  overflow: hidden;
3275
- text-align: left;
3281
+ text-align: start;
3276
3282
  text-overflow: ellipsis;
3277
3283
  white-space: nowrap;
3278
3284
  }
@@ -3335,7 +3341,7 @@ export type BbSelectPopoverSlots<Item> = {
3335
3341
  text-align: center;
3336
3342
 
3337
3343
  &:has(~ .bb-close-button) {
3338
- padding-left: calc(var(--close-size) + 4px);
3344
+ padding-inline-start: calc(var(--close-size) + 4px);
3339
3345
  }
3340
3346
  }
3341
3347
 
@@ -3377,7 +3383,7 @@ export type BbSelectPopoverSlots<Item> = {
3377
3383
  the title, not three stacked bands. Inline inset is the OffCanvas
3378
3384
  body's `--px`. */
3379
3385
  padding: 0 0 0.5rem;
3380
- text-align: left;
3386
+ text-align: start;
3381
3387
  }
3382
3388
 
3383
3389
  .bb-select-popover__sheet-chips {
@@ -3443,13 +3449,13 @@ export type BbSelectPopoverSlots<Item> = {
3443
3449
  otherwise win and swallow the extra 4px. */
3444
3450
  span[role='listbox'] .bb-listbox__option,
3445
3451
  .bb-listbox__group > .bb-listbox__option {
3446
- padding-left: calc(0.5rem + 4px);
3452
+ padding-inline-start: calc(0.5rem + 4px);
3447
3453
  }
3448
3454
 
3449
3455
  .bb-listbox__group-header,
3450
3456
  .bb-listbox__loading,
3451
3457
  .bb-listbox__empty {
3452
- padding-left: calc(0.5rem + 4px);
3458
+ padding-inline-start: calc(0.5rem + 4px);
3453
3459
  }
3454
3460
  }
3455
3461
  }