bitboss-ui 3.0.0-beta.48 → 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 (356) hide show
  1. package/README.md +24 -7
  2. package/bin/bitboss-ui-mcp.mjs +15 -3
  3. package/bin/bitboss-ui.mjs +115 -13
  4. package/dist/ai/BbAvatar.md +1 -1
  5. package/dist/ai/BbBreadcrumbs.md +65 -65
  6. package/dist/ai/BbButton.md +16 -5
  7. package/dist/ai/BbCheckbox.md +0 -2
  8. package/dist/ai/BbCheckboxGroup.md +13 -20
  9. package/dist/ai/BbDatePickerInput.md +4 -2
  10. package/dist/ai/BbDialog.md +1 -8
  11. package/dist/ai/BbDropdown.md +231 -220
  12. package/dist/ai/BbDropdownButton.md +65 -65
  13. package/dist/ai/BbDropdownGroup.md +2 -2
  14. package/dist/ai/BbDropzone.md +10 -10
  15. package/dist/ai/BbForm.md +43 -52
  16. package/dist/ai/BbHoverCard.md +4 -2
  17. package/dist/ai/BbNumberInput.md +88 -21
  18. package/dist/ai/BbPopover.md +29 -23
  19. package/dist/ai/BbProgress.md +48 -22
  20. package/dist/ai/BbRadioGroup.md +13 -19
  21. package/dist/ai/BbSelect.md +16 -36
  22. package/dist/ai/BbSelectPopover.md +14 -30
  23. package/dist/ai/BbSmoothHeight.md +0 -2
  24. package/dist/ai/BbSwitchGroup.md +13 -20
  25. package/dist/ai/BbTable.md +11 -10
  26. package/dist/ai/BbTabs.md +106 -105
  27. package/dist/ai/BbTabsList.md +2 -2
  28. package/dist/ai/BbTabsPanels.md +1 -1
  29. package/dist/ai/BbTabsRoot.md +2 -2
  30. package/dist/ai/BbTooltip.md +24 -10
  31. package/dist/ai/BbTree.md +14 -11
  32. package/dist/ai/changelog.json +256 -5
  33. package/dist/ai/components.json +36 -34
  34. package/dist/ai/composables/useBbDropdownContext.md +16 -16
  35. package/dist/ai/composables/useBbFormField.md +5 -1
  36. package/dist/ai/composables/useBbTabsContext.md +14 -14
  37. package/dist/ai/guides/agent-contract.md +27 -27
  38. package/dist/ai/guides/ai-router.md +1 -1
  39. package/dist/ai/guides/component-picker.md +3 -3
  40. package/dist/ai/guides/fetch-items-playbook.md +1 -1
  41. package/dist/ai/guides/icons-policy.md +10 -10
  42. package/dist/ai/guides/inertia-helpers.md +120 -67
  43. package/dist/ai/guides/installation-and-plugin-setup.md +43 -15
  44. package/dist/ai/guides/migration/components/bb-breadcrumbs.md +3 -2
  45. package/dist/ai/guides/migration/components/bb-checkbox-group.md +16 -16
  46. package/dist/ai/guides/migration/components/bb-dropdown-button.md +9 -8
  47. package/dist/ai/guides/migration/components/bb-dropdown.md +15 -14
  48. package/dist/ai/guides/migration/components/bb-radio-group.md +2 -1
  49. package/dist/ai/guides/migration/components/bb-select-popover.md +6 -1
  50. package/dist/ai/guides/migration/components/bb-select.md +10 -2
  51. package/dist/ai/guides/migration/components/bb-switch-group.md +2 -1
  52. package/dist/ai/guides/migration/components/bb-tabs.md +9 -8
  53. package/dist/ai/guides/migration/components/bb-tooltip.md +1 -1
  54. package/dist/ai/guides/migration/v2-to-v3.md +114 -17
  55. package/dist/ai/guides/migration/v3-beta-tooling.md +11 -0
  56. package/dist/ai/guides/options-items-playbook.md +30 -24
  57. package/dist/ai/guides/passthrough.md +2 -2
  58. package/dist/ai/guides/preset-components.md +18 -3
  59. package/dist/ai/guides/typescript-generic-components.md +1 -1
  60. package/dist/ai/guides/validated-forms.md +11 -22
  61. package/dist/ai/guides/validation-providers.md +4 -3
  62. package/dist/ai/helpers/inertia/manifest.json +636 -0
  63. package/dist/ai/helpers/inertia/types.ts +15 -0
  64. package/dist/ai/helpers/inertia/useAsyncFn.ts +110 -0
  65. package/dist/ai/helpers/inertia/useConfirmOnRouteLeave.ts +102 -0
  66. package/dist/ai/helpers/inertia/useDeleteCmd.ts +30 -0
  67. package/dist/ai/helpers/inertia/useHasChanged.ts +36 -0
  68. package/dist/ai/helpers/inertia/useIndexById.ts +23 -0
  69. package/dist/ai/helpers/inertia/useLazyProp.ts +148 -0
  70. package/dist/ai/helpers/inertia/useLazyPropGetter.ts +50 -0
  71. package/dist/ai/helpers/inertia/useLoading.ts +20 -0
  72. package/dist/ai/helpers/inertia/usePaginatedResponseContext.ts +88 -0
  73. package/dist/ai/helpers/inertia/usePromiseForm.ts +62 -0
  74. package/dist/ai/helpers/inertia/useProp.ts +63 -0
  75. package/dist/ai/helpers/inertia/useQuery.ts +19 -0
  76. package/dist/ai/helpers/inertia/useQueryObject.ts +116 -0
  77. package/dist/ai/helpers/inertia/useResourceContext.ts +69 -0
  78. package/dist/ai/helpers/inertia/useRouteQuery.ts +54 -0
  79. package/dist/ai/helpers/inertia/useScreenSizes.ts +23 -0
  80. package/dist/ai/helpers/inertia/useTableContext.ts +34 -0
  81. package/dist/ai/helpers/inertia/useTableSelectionContext.ts +48 -0
  82. package/dist/ai/helpers/inertia/useUntil.ts +33 -0
  83. package/dist/ai/helpers/inertia/utils.ts +24 -0
  84. package/dist/ai/index.md +6 -6
  85. package/dist/ai/manifest/components/BbBreadcrumbs.json +10 -6
  86. package/dist/ai/manifest/components/BbBreadcrumbs.tree.json +1 -1
  87. package/dist/ai/manifest/components/BbButton.json +1 -1
  88. package/dist/ai/manifest/components/BbCheckboxGroup.json +2 -2
  89. package/dist/ai/manifest/components/BbDropdown.json +23 -20
  90. package/dist/ai/manifest/components/BbDropdown.tree.json +2 -2
  91. package/dist/ai/manifest/components/BbDropdownButton.json +22 -19
  92. package/dist/ai/manifest/components/BbDropdownButton.tree.json +1 -1
  93. package/dist/ai/manifest/components/BbDropdownGroup.json +2 -2
  94. package/dist/ai/manifest/components/BbForm.json +1 -0
  95. package/dist/ai/manifest/components/BbNumberInput.json +6 -1
  96. package/dist/ai/manifest/components/BbNumberInput.tree.json +2 -1
  97. package/dist/ai/manifest/components/BbPopover.json +1 -0
  98. package/dist/ai/manifest/components/BbProgress.json +6 -6
  99. package/dist/ai/manifest/components/BbProgress.tree.json +1 -0
  100. package/dist/ai/manifest/components/BbRadioGroup.json +2 -2
  101. package/dist/ai/manifest/components/BbSelect.json +2 -2
  102. package/dist/ai/manifest/components/BbSelectPopover.json +2 -2
  103. package/dist/ai/manifest/components/BbSwitchGroup.json +2 -2
  104. package/dist/ai/manifest/components/BbTabs.json +7 -6
  105. package/dist/ai/manifest/components/BbTabsList.json +3 -3
  106. package/dist/ai/manifest/components/BbTabsPanels.json +1 -1
  107. package/dist/ai/manifest/components/BbTabsRoot.json +5 -4
  108. package/dist/ai/manifest/components/BbTooltip.json +1 -1
  109. package/dist/ai/manifest/index.json +2 -2
  110. package/dist/ai/manifest/meta.json +2 -0
  111. package/dist/ai/manifest/types.advanced.json +10 -9
  112. package/dist/ai/manifest/types.api.json +5 -4
  113. package/dist/ai/recipes/inertia/approvals-inbox.md +16 -18
  114. package/dist/ai/recipes/inertia/inline-edit-workspace.md +23 -33
  115. package/dist/ai/recipes/inertia/layout-scaffold.md +16 -16
  116. package/dist/ai/recipes/inertia/onboarding.md +6 -10
  117. package/dist/ai/recipes/inertia/ownership-atlas.md +15 -18
  118. package/dist/ai/recipes/inertia/record-form.md +11 -11
  119. package/dist/ai/recipes/inertia/records-workspace.md +38 -41
  120. package/dist/ai/recipes/inertia/settings-workspace.md +26 -38
  121. package/dist/ai/recipes/inertia/upload-center.md +31 -39
  122. package/dist/ai/recipes/inertia/wizard-form.md +10 -19
  123. package/dist/ai/recipes/nuxt/approvals-inbox.md +7 -8
  124. package/dist/ai/recipes/nuxt/inline-edit-workspace.md +14 -24
  125. package/dist/ai/recipes/nuxt/layout-scaffold.md +16 -16
  126. package/dist/ai/recipes/nuxt/onboarding.md +2 -6
  127. package/dist/ai/recipes/nuxt/ownership-atlas.md +7 -9
  128. package/dist/ai/recipes/nuxt/record-form.md +5 -5
  129. package/dist/ai/recipes/nuxt/records-workspace.md +29 -31
  130. package/dist/ai/recipes/nuxt/settings-workspace.md +22 -34
  131. package/dist/ai/recipes/nuxt/upload-center.md +22 -29
  132. package/dist/ai/recipes/nuxt/wizard-form.md +3 -11
  133. package/dist/ai/recipes/vue/approvals-inbox.md +7 -8
  134. package/dist/ai/recipes/vue/inline-edit-workspace.md +14 -24
  135. package/dist/ai/recipes/vue/layout-scaffold.md +16 -16
  136. package/dist/ai/recipes/vue/onboarding.md +2 -6
  137. package/dist/ai/recipes/vue/ownership-atlas.md +7 -9
  138. package/dist/ai/recipes/vue/record-form.md +5 -5
  139. package/dist/ai/recipes/vue/records-workspace.md +29 -31
  140. package/dist/ai/recipes/vue/settings-workspace.md +22 -34
  141. package/dist/ai/recipes/vue/upload-center.md +22 -29
  142. package/dist/ai/recipes/vue/wizard-form.md +3 -11
  143. package/dist/ai/source/BbAccordion.md +1 -1
  144. package/dist/ai/source/BbAlert.md +3 -3
  145. package/dist/ai/source/BbBadge.md +2 -2
  146. package/dist/ai/source/BbBadgeButton.md +5 -4
  147. package/dist/ai/source/BbBaseButton.md +1 -1
  148. package/dist/ai/source/BbBaseRadioIcon.md +1 -0
  149. package/dist/ai/source/BbBaseSwitchIcon.md +1 -0
  150. package/dist/ai/source/BbBreadcrumbs.md +63 -42
  151. package/dist/ai/source/BbButton.md +71 -33
  152. package/dist/ai/source/BbCalendar.md +17 -16
  153. package/dist/ai/source/BbCheckbox.md +3 -2
  154. package/dist/ai/source/BbCheckboxGroup.md +11 -4
  155. package/dist/ai/source/BbColorInput.md +10 -9
  156. package/dist/ai/source/BbConfirm.md +1 -1
  157. package/dist/ai/source/BbConfirmPortal.md +1 -1
  158. package/dist/ai/source/BbDatePicker.md +2 -2
  159. package/dist/ai/source/BbDatePickerInput.md +47 -20
  160. package/dist/ai/source/BbDialog.md +5 -5
  161. package/dist/ai/source/BbDropdown.md +230 -158
  162. package/dist/ai/source/BbDropdownButton.md +19 -12
  163. package/dist/ai/source/BbDropdownGroup.md +126 -93
  164. package/dist/ai/source/BbForm.md +25 -1
  165. package/dist/ai/source/BbIndicator.md +4 -0
  166. package/dist/ai/source/BbNumberInput.md +855 -19
  167. package/dist/ai/source/BbOffCanvas.md +27 -11
  168. package/dist/ai/source/BbPagination.md +3 -3
  169. package/dist/ai/source/BbPopover.md +152 -8
  170. package/dist/ai/source/BbPopoverPortal.md +11 -0
  171. package/dist/ai/source/BbProgress.md +82 -18
  172. package/dist/ai/source/BbRadioGroup.md +12 -5
  173. package/dist/ai/source/BbRating.md +11 -9
  174. package/dist/ai/source/BbSelect.md +16 -10
  175. package/dist/ai/source/BbSelectPopover.md +29 -23
  176. package/dist/ai/source/BbSlider.md +12 -6
  177. package/dist/ai/source/BbSwitch.md +3 -2
  178. package/dist/ai/source/BbSwitchGroup.md +5 -2
  179. package/dist/ai/source/BbTable.md +102 -18
  180. package/dist/ai/source/BbTabs.md +27 -23
  181. package/dist/ai/source/BbTabsList.md +26 -22
  182. package/dist/ai/source/BbTabsPanels.md +26 -22
  183. package/dist/ai/source/BbTabsRoot.md +25 -21
  184. package/dist/ai/source/BbTag.md +10 -9
  185. package/dist/ai/source/BbTextInput.md +5 -4
  186. package/dist/ai/source/BbTextarea.md +6 -5
  187. package/dist/ai/source/BbTimePicker.md +1 -1
  188. package/dist/ai/source/BbTimePickerInput.md +46 -9
  189. package/dist/ai/source/BbToast.md +10 -7
  190. package/dist/ai/source/BbToastPortal.md +10 -7
  191. package/dist/ai/source/BbTooltip.md +54 -8
  192. package/dist/ai/source/BbTree.md +21 -3
  193. package/dist/ai/source/CommonField.md +6 -4
  194. package/dist/ai/source/CommonFieldInput.md +15 -10
  195. package/dist/ai/source/CommonPopover.md +6 -0
  196. package/dist/ai/source/CommonTimeSelector.md +5 -4
  197. package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +10 -8
  198. package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +8 -8
  199. package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +45 -45
  200. package/dist/components/BbBreadcrumbs/types.d.ts +25 -17
  201. package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +84 -71
  202. package/dist/components/BbButton/toggleRoving.d.ts +6 -0
  203. package/dist/components/BbButton/toggleRoving.js +45 -0
  204. package/dist/components/BbButton/types.d.ts +4 -1
  205. package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +178 -178
  206. package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +15 -15
  207. package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +28 -28
  208. package/dist/components/BbCalendar/useCalendarGrid.js +141 -139
  209. package/dist/components/BbCalendar/useDayjsLocale.d.ts +38 -15
  210. package/dist/components/BbCalendar/useDayjsLocale.js +31 -30
  211. package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +48 -48
  212. package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +81 -80
  213. package/dist/components/BbCheckboxGroup/types.d.ts +6 -2
  214. package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +69 -69
  215. package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +363 -349
  216. package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +91 -86
  217. package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +298 -289
  218. package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +322 -356
  219. package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +17 -15
  220. package/dist/components/BbDropdown/DropdownRow.vue.d.ts +40 -0
  221. package/dist/components/BbDropdown/DropdownRow.vue.js +5 -0
  222. package/dist/components/BbDropdown/DropdownRow.vue_vue_type_script_setup_true_lang.js +60 -0
  223. package/dist/components/BbDropdown/normalizeGroups.d.ts +8 -2
  224. package/dist/components/BbDropdown/normalizeGroups.js +60 -46
  225. package/dist/components/BbDropdown/types.d.ts +119 -88
  226. package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +11 -2
  227. package/dist/components/BbDropdownButton/types.d.ts +2 -2
  228. package/dist/components/BbForm/BbForm.vue.d.ts +9 -0
  229. package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +114 -105
  230. package/dist/components/BbForm/BbFormCustomField.js +1 -1
  231. package/dist/components/BbForm/bindFormField.js +2 -1
  232. package/dist/components/BbForm/formFields.d.ts +5 -0
  233. package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +0 -1
  234. package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +452 -125
  235. package/dist/components/BbNumberInput/numberDisplay.d.ts +256 -0
  236. package/dist/components/BbNumberInput/numberDisplay.js +499 -0
  237. package/dist/components/BbNumberInput/types.d.ts +54 -1
  238. package/dist/components/BbNumberInput/warroom/corpus.d.ts +58 -0
  239. package/dist/components/BbNumberInput/warroom/currency-verify.rows.d.ts +28 -0
  240. package/dist/components/BbNumberInput/warroom/currency.rows.d.ts +2 -0
  241. package/dist/components/BbNumberInput/warroom/harness.d.ts +217 -0
  242. package/dist/components/BbNumberInput/warroom/oracle.d.ts +150 -0
  243. package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +7 -7
  244. package/dist/components/BbPopover/BbPopover.vue.d.ts +1 -0
  245. package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +207 -164
  246. package/dist/components/BbPopover/types.d.ts +11 -0
  247. package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +15 -7
  248. package/dist/components/BbProgress/types.d.ts +23 -7
  249. package/dist/components/BbProgress/types.js +1 -1
  250. package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +102 -101
  251. package/dist/components/BbRadioGroup/types.d.ts +6 -2
  252. package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +63 -63
  253. package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +156 -154
  254. package/dist/components/BbSelect/types.d.ts +6 -2
  255. package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +2 -1
  256. package/dist/components/BbSelectPopover/types.d.ts +6 -2
  257. package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +153 -153
  258. package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +62 -62
  259. package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +131 -130
  260. package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +711 -676
  261. package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +1 -1
  262. package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +1 -1
  263. package/dist/components/BbTabs/types.d.ts +25 -21
  264. package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +76 -76
  265. package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +58 -58
  266. package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +82 -82
  267. package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +246 -236
  268. package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +102 -97
  269. package/dist/components/BbTooltip/tooltipWarmup.d.ts +23 -0
  270. package/dist/components/BbTooltip/tooltipWarmup.js +7 -0
  271. package/dist/components/BbTooltip/types.d.ts +7 -2
  272. package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +29 -21
  273. package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +10 -7
  274. package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +37 -36
  275. package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +9 -9
  276. package/dist/composables/formSubmitLock.d.ts +6 -0
  277. package/dist/composables/formSubmitLock.js +4 -0
  278. package/dist/composables/useBaseOptions.d.ts +7 -1
  279. package/dist/composables/useBaseOptions.js +32 -32
  280. package/dist/composables/useBbDropdownContext.d.ts +8 -8
  281. package/dist/composables/useBbFormField.d.ts +9 -0
  282. package/dist/composables/useBbFormField.js +5 -3
  283. package/dist/composables/useBbTabsContext.d.ts +10 -10
  284. package/dist/composables/useBbTabsContext.js +18 -18
  285. package/dist/composables/useFormBinding.d.ts +11 -0
  286. package/dist/composables/useFormBinding.js +15 -13
  287. package/dist/composables/useItemText.d.ts +5 -1
  288. package/dist/composables/useItemText.js +8 -3
  289. package/dist/composables/useItemValue.d.ts +5 -1
  290. package/dist/composables/useItemValue.js +8 -3
  291. package/dist/composables/useLocale.js +10 -9
  292. package/dist/deprecation/ai-deprecations.json.d.ts +130 -0
  293. package/dist/deprecation/ai-deprecations.json.js +1 -1
  294. package/dist/deprecation/removedProps.js +1 -1
  295. package/dist/directives/bbDropdown.js +1 -1
  296. package/dist/i18n/index.d.ts +7 -12
  297. package/dist/i18n/locales/cs.json +11 -14
  298. package/dist/i18n/locales/da.json +13 -16
  299. package/dist/i18n/locales/de-CH.json +137 -0
  300. package/dist/i18n/locales/de.json +14 -17
  301. package/dist/i18n/locales/el.json +10 -13
  302. package/dist/i18n/locales/en-GB.json +137 -0
  303. package/dist/i18n/locales/en.json +8 -11
  304. package/dist/i18n/locales/es-MX.json +137 -0
  305. package/dist/i18n/locales/es.json +16 -19
  306. package/dist/i18n/locales/fi.json +8 -11
  307. package/dist/i18n/locales/fr.json +23 -26
  308. package/dist/i18n/locales/hu.json +8 -11
  309. package/dist/i18n/locales/it.json +12 -15
  310. package/dist/i18n/locales/ja.json +13 -16
  311. package/dist/i18n/locales/ko.json +10 -13
  312. package/dist/i18n/locales/nb.json +13 -16
  313. package/dist/i18n/locales/nl.json +21 -24
  314. package/dist/i18n/locales/pl.json +10 -13
  315. package/dist/i18n/locales/{pt.json → pt-BR.json} +19 -22
  316. package/dist/i18n/locales/pt-PT.json +137 -0
  317. package/dist/i18n/locales/ro.json +22 -25
  318. package/dist/i18n/locales/ru.json +11 -14
  319. package/dist/i18n/locales/sv.json +16 -19
  320. package/dist/i18n/locales/tr.json +14 -17
  321. package/dist/i18n/locales/uk.json +11 -14
  322. package/dist/i18n/locales/{zh-cn.json → zh-CN.json} +10 -13
  323. package/dist/i18n/locales/zh-HK.json +137 -0
  324. package/dist/i18n/locales/zh-TW.json +137 -0
  325. package/dist/i18n/regionHints.d.ts +16 -0
  326. package/dist/i18n/regionHints.js +49 -0
  327. package/dist/i18n/regions.d.ts +286 -0
  328. package/dist/i18n/regions.js +265 -0
  329. package/dist/index.d.ts +1 -1
  330. package/dist/index.js +4 -4
  331. package/dist/llms-full.txt +1785 -1637
  332. package/dist/llms-medium.txt +74 -46
  333. package/dist/llms.txt +7 -7
  334. package/dist/locale-blueprint.json +16 -13
  335. package/dist/styles.css +2 -2
  336. package/dist/types/ptComponentMap.d.ts +1 -1
  337. package/dist/utilities/functions/slotKey.d.ts +2 -2
  338. package/dist/utils/versionCheck.js +1 -1
  339. package/dist/vite-plugin.d.ts +22 -19
  340. package/dist/vite.js +309 -297
  341. package/llms.txt +7 -7
  342. package/package.json +5 -3
  343. package/scripts/lib/agent-manifest.mjs +2 -1
  344. package/scripts/lib/eslint-disable.mjs +12 -4
  345. package/scripts/lib/eslint-plugin.d.ts +5 -1
  346. package/scripts/lib/eslint-plugin.mjs +187 -6
  347. package/scripts/lib/helper-canon.mjs +176 -0
  348. package/scripts/lib/helpers-add.mjs +1303 -0
  349. package/scripts/lib/local-components.mjs +33 -4
  350. package/scripts/lib/locale-check.mjs +165 -0
  351. package/scripts/lib/redundant-item-accessor.mjs +398 -0
  352. package/scripts/lib/renamed-item-field.mjs +343 -0
  353. package/scripts/lib/slot-key.mjs +2 -2
  354. package/scripts/lib/slot-renames.mjs +1 -1
  355. package/scripts/lib/validate-bb-markup.mjs +123 -56
  356. package/dist/i18n/index.js +0 -27
@@ -177,9 +177,13 @@ export type BbTabsItem<K extends string = string> = BbTabsInertiaOptions & {
177
177
  */
178
178
  href?: string;
179
179
  /**
180
- * String that identifies the tab.
180
+ * Identifies the tab: what `v-model` holds while it is the active one, the
181
+ * name of its slots (`#<value>` for its panel, `#<value>:label` for its
182
+ * trigger, through `slotKey`) and, with `navigation`, the URL slug.
181
183
  */
182
- key: K;
184
+ value: K;
185
+ /** Tabs have no `key` (that is `value`). Guards against the old shape. */
186
+ key?: never;
183
187
  /**
184
188
  * Label to use as the tab text.
185
189
  */
@@ -196,7 +200,7 @@ export type BbTabsItem<K extends string = string> = BbTabsInertiaOptions & {
196
200
  * Passthrough parts of `BbTabs` (plans/passthrough/BbTabs.md). Tabs do not
197
201
  * "open", so there is no `open` state.
198
202
  *
199
- * Per-item functions: on the instance, `item` also accepts `({ item, active, … }) => PtValue | false | null | undefined` — `item` is the tab's descriptor (the element of `items`: its `key`, `label`, anything else you put on it), and every state a boolean beside it, on for it (`active`, `disabled`, …) — in the `pt` object or the `:pt:item` attribute, never on a `item:<state>` key and never in the global map or a scope (they ship as JSON). Its result is merged last, after every state entry, through the same deduper; a falsy result leaves the trigger as it was. No other part takes a function. See the passthrough guide, _Per-item functions_.
203
+ * Per-item functions: on the instance, `item` also accepts `({ item, active, … }) => PtValue | false | null | undefined` — `item` is the tab's descriptor (the element of `items`: its `value`, `label`, anything else you put on it), and every state a boolean beside it, on for it (`active`, `disabled`, …) — in the `pt` object or the `:pt:item` attribute, never on a `item:<state>` key and never in the global map or a scope (they ship as JSON). Its result is merged last, after every state entry, through the same deduper; a falsy result leaves the trigger as it was. No other part takes a function. See the passthrough guide, _Per-item functions_.
200
204
  *
201
205
  * @part root - The tabs' outer element, around the strip and the panels.
202
206
  * @part wrapper - The strip's outer element: the `wrapper:prepend` slot, the
@@ -397,9 +401,9 @@ export type BbTabsRootProps<K extends string = string> =
397
401
  */
398
402
  manualActivation?: boolean;
399
403
  /**
400
- * The current tab key. Used by v-model.
404
+ * The active tab's `value`. Used by v-model.
401
405
  */
402
- modelValue?: null | BbTabsItem<K>['key'];
406
+ modelValue?: null | BbTabsItem<K>['value'];
403
407
  /**
404
408
  * Synchronizes the current tab with the URL query parameter.
405
409
  *
@@ -500,8 +504,8 @@ export type BbTabsRootEvents<K extends string = string> = BbTabsEvents<K>;
500
504
 
501
505
  /** Props exposed by the per-tab label slots and the generic `label` fallback slot. */
502
506
  export type BbTabsSlotProps<K extends string = string> = {
503
- /** The key of the currently active tab. */
504
- current: BbTabsItem<K>['key'] | null;
507
+ /** The `value` of the currently active tab. */
508
+ current: BbTabsItem<K>['value'] | null;
505
509
  /** Zero-based index of the currently active tab. */
506
510
  currentIndex: number;
507
511
  /** Whether this tab is disabled. */
@@ -512,10 +516,10 @@ export type BbTabsSlotProps<K extends string = string> = {
512
516
  isLast: boolean;
513
517
  /** Whether this specific tab is currently active. */
514
518
  selected: boolean;
515
- /** The `label` value of this tab item. */
516
- text: BbTabsItem<K>['label'];
517
- /** The `key` value of this tab item. */
518
- value: BbTabsItem<K>['key'];
519
+ /** This tab's `label`. */
520
+ label: BbTabsItem<K>['label'];
521
+ /** This tab's `value`. */
522
+ value: BbTabsItem<K>['value'];
519
523
  /** Navigate to `'first'`, `'previous'`, `'next'`, or `'last'` tab. */
520
524
  goTo: (target: 'first' | 'previous' | 'next' | 'last') => void;
521
525
  };
@@ -538,7 +542,7 @@ export type BbTabsScrollSlotProps = {
538
542
  /**
539
543
  * Slots rendered by the tab list (the strip of triggers).
540
544
  *
541
- * @dynamicSlot `<key>:label` {BbTabsSlotProps<K>} - One tab trigger's label, by the tab `key` through `slotKey`; beats `label`, which beats the item's `label` text.
545
+ * @dynamicSlot `<value>:label` {BbTabsSlotProps<K>} - One tab trigger's label, by the tab's `value` through `slotKey`; beats `label`, which beats the item's `label` text.
542
546
  */
543
547
  export type BbTabsListSlots<K extends string = string> = {
544
548
  /**
@@ -550,16 +554,16 @@ export type BbTabsListSlots<K extends string = string> = {
550
554
  */
551
555
  'wrapper:append'?: (props: BbTabsScrollSlotProps) => any;
552
556
  /**
553
- * Fallback slot used for all tab labels when no per-tab `<key>:label` slot is provided.
557
+ * Fallback slot used for all tab labels when no per-tab `<value>:label` slot is provided.
554
558
  */
555
559
  label?: (props: BbTabsSlotProps<K>) => any;
556
560
  } & Record<string, ((props: BbTabsSlotProps<K>) => any) | undefined>;
557
561
 
558
562
  /**
559
563
  * Slots rendered by the tab panels — one per tab, keyed by the normalized
560
- * `slotKey(key)`.
564
+ * `slotKey(value)`.
561
565
  *
562
- * @dynamicSlot `<key>` {BbTabsSlotProps<K>} - One tab's content panel, by the tab `key` through `slotKey`; no fallback (an empty panel).
566
+ * @dynamicSlot `<value>` {BbTabsSlotProps<K>} - One tab's content panel, by the tab's `value` through `slotKey`; no fallback (an empty panel).
563
567
  */
564
568
  export type BbTabsPanelsSlots<K extends string = string> = Record<
565
569
  string,
@@ -567,16 +571,16 @@ export type BbTabsPanelsSlots<K extends string = string> = Record<
567
571
  >;
568
572
 
569
573
  /**
570
- * @dynamicSlot `<key>` {BbTabsSlotProps<K>} - One tab's content panel, by the tab `key` through `slotKey`; no fallback (an empty panel).
571
- * @dynamicSlot `<key>:label` {BbTabsSlotProps<K>} - One tab trigger's label, by the tab `key` through `slotKey`; beats `label`, which beats the item's `label` text.
574
+ * @dynamicSlot `<value>` {BbTabsSlotProps<K>} - One tab's content panel, by the tab's `value` through `slotKey`; no fallback (an empty panel).
575
+ * @dynamicSlot `<value>:label` {BbTabsSlotProps<K>} - One tab trigger's label, by the tab's `value` through `slotKey`; beats `label`, which beats the item's `label` text.
572
576
  */
573
577
  export type BbTabsSlots<K extends string = string> = BbTabsListSlots<K> &
574
578
  BbTabsPanelsSlots<K>;
575
579
 
576
580
  /** Props exposed by the `BbTabsRoot` default slot. */
577
581
  export type BbTabsRootSlotProps<K extends string = string> = {
578
- /** The key of the currently active tab. */
579
- current: BbTabsItem<K>['key'] | null;
582
+ /** The `value` of the currently active tab. */
583
+ current: BbTabsItem<K>['value'] | null;
580
584
  /** Zero-based index of the currently active tab. */
581
585
  currentIndex: number;
582
586
  /** Whether the active tab is the first tab. */
@@ -585,8 +589,8 @@ export type BbTabsRootSlotProps<K extends string = string> = {
585
589
  isLast: boolean;
586
590
  /** Navigate to `'first'`, `'previous'`, `'next'`, or `'last'` tab. */
587
591
  goTo: (target: 'first' | 'previous' | 'next' | 'last') => void;
588
- /** Select a tab by key. */
589
- select: (key: BbTabsItem<K>['key']) => void;
592
+ /** Select a tab by its `value`. */
593
+ select: (value: BbTabsItem<K>['value']) => void;
590
594
  };
591
595
 
592
596
  export type BbTabsRootSlots<K extends string = string> = {
@@ -28,7 +28,7 @@
28
28
  :loading="loading"
29
29
  :name="name"
30
30
  :passthrough="passthrough"
31
- :readonly="readonly"
31
+ :readonly="fieldReadonly"
32
32
  :reverse="reverse"
33
33
  :show-asterisk="showAsterisk"
34
34
  :show-hint="showHint"
@@ -66,7 +66,7 @@
66
66
  :loading="loading"
67
67
  :passthrough="passthrough"
68
68
  :prepend:icon="props['prepend:icon']"
69
- :readonly="readonly"
69
+ :readonly="fieldReadonly"
70
70
  :variant="variant"
71
71
  @click="onWrapperClick"
72
72
  @click:clear="onClear"
@@ -88,7 +88,7 @@
88
88
  <template v-else>
89
89
  <ChipsBox
90
90
  ref="chipsBox"
91
- :disabled="disabled || readonly"
91
+ :disabled="disabled || fieldReadonly"
92
92
  :options="selectedOptions"
93
93
  :passthrough="passthrough"
94
94
  size="lg"
@@ -105,14 +105,14 @@
105
105
  :aria-disabled="disabled || undefined"
106
106
  :aria-invalid="fieldHasErrors || undefined"
107
107
  :aria-labelledby="ariaLabelledby"
108
- :aria-readonly="readonly || undefined"
108
+ :aria-readonly="fieldReadonly || undefined"
109
109
  :autocomplete="autocomplete"
110
110
  :autofocus="autofocus"
111
111
  class="bb-tag__input"
112
112
  :disabled="disabled"
113
113
  enterkeyhint="done"
114
114
  :placeholder="placeholder"
115
- :readonly="readonly"
115
+ :readonly="fieldReadonly"
116
116
  :required="fieldRequired && !fieldModel.length"
117
117
  :aria-required="inputAriaRequired"
118
118
  size="1"
@@ -189,6 +189,7 @@ const {
189
189
  required: fieldRequired,
190
190
  ariaRequired: fieldAriaRequired,
191
191
  model: fieldModel,
192
+ readonly: fieldReadonly,
192
193
  } = useFormBinding(declaredProps, declaredEmit, {
193
194
  componentName: 'BbTag',
194
195
  identifierFallback: () => declaredProps.label,
@@ -1111,19 +1112,19 @@ export type BbTagSlots = {
1111
1112
 
1112
1113
  .bb-smooth-height {
1113
1114
  align-self: center;
1114
- text-align: left;
1115
+ text-align: start;
1115
1116
  width: 100%;
1116
1117
  }
1117
1118
 
1118
1119
  /* If there is no prepend icon, reduce left inset without clipping chip content. Also allow for the ring size to be displayed. */
1119
1120
  &:not(:has(.bb-field-input__prepend-icon)) {
1120
1121
  .bb-smooth-height:has(.bb-tag__badge) {
1121
- margin-left: calc(
1122
+ margin-inline-start: calc(
1122
1123
  var(--bb-input-px) * var(--compensation-multiplier) * -1 -
1123
1124
  var(--bb-ring-size)
1124
1125
  );
1125
1126
  .bb-tag__input-container {
1126
- padding-left: var(--bb-ring-size);
1127
+ padding-inline-start: var(--bb-ring-size);
1127
1128
  }
1128
1129
  }
1129
1130
  }
@@ -1141,7 +1142,7 @@ export type BbTagSlots = {
1141
1142
  width: 100%;
1142
1143
 
1143
1144
  .bb-tag__badge:not(:last-child) {
1144
- margin-right: 0.25rem;
1145
+ margin-inline-end: 0.25rem;
1145
1146
  }
1146
1147
 
1147
1148
  .bb-tag__input {
@@ -30,7 +30,7 @@
30
30
  :mobile="isMobile"
31
31
  :name="name"
32
32
  :passthrough="passthrough"
33
- :readonly="readonly"
33
+ :readonly="fieldReadonly"
34
34
  :reverse="reverse"
35
35
  :show-asterisk="showAsterisk"
36
36
  :show-hint="showHint"
@@ -61,7 +61,7 @@
61
61
  :loading="loading"
62
62
  :passthrough="passthrough"
63
63
  :prepend:icon="declaredProps['prepend:icon']"
64
- :readonly="readonly"
64
+ :readonly="fieldReadonly"
65
65
  :reserve-append-space="clearable"
66
66
  :variant="variant"
67
67
  @click:clear="emit('update:modelValue', emptyValue())"
@@ -77,7 +77,7 @@
77
77
  :aria-disabled="disabled || undefined"
78
78
  :aria-invalid="fieldHasErrors || undefined"
79
79
  :aria-labelledby="ariaLabelledby"
80
- :aria-readonly="readonly || undefined"
80
+ :aria-readonly="fieldReadonly || undefined"
81
81
  :autocomplete="autocomplete"
82
82
  :autofocus="autofocus"
83
83
  class="bb-text-input__input"
@@ -85,7 +85,7 @@
85
85
  :inputmode="inputMode"
86
86
  :name="name"
87
87
  :placeholder="placeholder"
88
- :readonly="readonly"
88
+ :readonly="fieldReadonly"
89
89
  :required="fieldRequired"
90
90
  :aria-required="fieldAriaRequired"
91
91
  size="1"
@@ -161,6 +161,7 @@ const {
161
161
  errors: fieldErrors,
162
162
  required: fieldRequired,
163
163
  ariaRequired: fieldAriaRequired,
164
+ readonly: fieldReadonly,
164
165
  } = useFormBinding(declaredProps, declaredEmit, {
165
166
  componentName: 'BbTextInput',
166
167
  identifierFallback: () => declaredProps.label,
@@ -29,7 +29,7 @@
29
29
  :loading="loading"
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"
@@ -64,7 +64,7 @@
64
64
  :loading="loading"
65
65
  :passthrough="passthrough"
66
66
  :prepend:icon="declaredProps['prepend:icon']"
67
- :readonly="readonly"
67
+ :readonly="fieldReadonly"
68
68
  :reserve-append-space="clearable"
69
69
  :variant="variant"
70
70
  @click:clear="emit('update:modelValue', emptyValue())"
@@ -81,14 +81,14 @@
81
81
  :aria-disabled="disabled || undefined"
82
82
  :aria-invalid="fieldHasErrors || undefined"
83
83
  :aria-labelledby="ariaLabelledby"
84
- :aria-readonly="readonly || undefined"
84
+ :aria-readonly="fieldReadonly || undefined"
85
85
  :autocomplete="autocomplete"
86
86
  :autofocus="autofocus"
87
87
  class="bb-textarea__input scrollbar-border"
88
88
  :disabled="disabled"
89
89
  :name="name"
90
90
  :placeholder="placeholder"
91
- :readonly="readonly"
91
+ :readonly="fieldReadonly"
92
92
  :required="fieldRequired"
93
93
  :aria-required="fieldAriaRequired"
94
94
  :rows="renderedRows"
@@ -161,6 +161,7 @@ const {
161
161
  errors: fieldErrors,
162
162
  required: fieldRequired,
163
163
  ariaRequired: fieldAriaRequired,
164
+ readonly: fieldReadonly,
164
165
  } = useFormBinding(declaredProps, declaredEmit, {
165
166
  componentName: 'BbTextarea',
166
167
  identifierFallback: () => declaredProps.label,
@@ -824,7 +825,7 @@ export type BbTextareaSlots = {
824
825
  .bb-smooth-height {
825
826
  align-self: center;
826
827
  flex: 1 1 auto;
827
- text-align: left;
828
+ text-align: start;
828
829
  }
829
830
 
830
831
  .bb-field-input__box {
@@ -844,7 +844,7 @@ export type BbTimePickerSlots = {
844
844
  rail sizing (and the mobile-sheet centring/touch scale) is shared with the
845
845
  time input's panel in CommonTimeSelector/index.css. */
846
846
  .bb-time-selector {
847
- margin-left: 0;
847
+ margin-inline-start: 0;
848
848
  }
849
849
  }
850
850
 
@@ -28,7 +28,7 @@
28
28
  :loading="loading"
29
29
  :name="name"
30
30
  :passthrough="passthrough"
31
- :readonly="readonly"
31
+ :readonly="fieldReadonly"
32
32
  :reverse="reverse"
33
33
  :show-asterisk="showAsterisk"
34
34
  :show-hint="showHint"
@@ -64,7 +64,7 @@
64
64
  :loading="loading"
65
65
  :passthrough="passthrough"
66
66
  :prepend:icon="props['prepend:icon']"
67
- :readonly="readonly"
67
+ :readonly="fieldReadonly"
68
68
  :variant="variant"
69
69
  @click="onFieldTap"
70
70
  @click:clear="onClickClear"
@@ -169,7 +169,7 @@
169
169
  :class="{
170
170
  'bb-segmented-field__activator--active': shown,
171
171
  }"
172
- :disabled="disabled || readonly"
172
+ :disabled="disabled || fieldReadonly"
173
173
  type="button"
174
174
  @click.stop="open"
175
175
  v-bind="passthrough.activator"
@@ -203,7 +203,7 @@
203
203
  <DefinePanel>
204
204
  <CommonTimeSelector
205
205
  :ampm="ampm"
206
- :disabled="disabled || readonly"
206
+ :disabled="disabled || fieldReadonly"
207
207
  :hour="panelHour"
208
208
  :max="max"
209
209
  :meridiem="fields[timeTargetSegment].meridiem"
@@ -309,6 +309,7 @@ import CommonPopover from '../CommonPopover/CommonPopover.vue';
309
309
  import CommonTimeSelector from '../CommonTimeSelector/CommonTimeSelector.vue';
310
310
  import type { TimeUnit } from '../CommonTimeSelector/types';
311
311
  import { useMeridiem } from '../CommonTimeSelector/useMeridiem';
312
+ import { formatDateOf, timeFieldsOf } from '../BbCalendar/useDayjsLocale';
312
313
  import {
313
314
  BB_TIME_PICKER_INPUT_PT,
314
315
  type BbTimePickerInputEvents,
@@ -339,6 +340,7 @@ const {
339
340
  required: fieldRequired,
340
341
  ariaRequired: fieldAriaRequired,
341
342
  model: fieldModel,
343
+ readonly: fieldReadonly,
342
344
  } = useFormBinding(declaredProps, declaredEmit, {
343
345
  componentName: 'BbTimePickerInput',
344
346
  identifierFallback: () => declaredProps.label,
@@ -1028,6 +1030,13 @@ const onFieldTap = (event: MouseEvent) => {
1028
1030
  return;
1029
1031
  open();
1030
1032
  };
1033
+ /** A key that would change a segment's value (step, clear, type). */
1034
+ const changesSegment = (event: KeyboardEvent) =>
1035
+ event.key === 'ArrowUp' ||
1036
+ event.key === 'ArrowDown' ||
1037
+ event.key === 'Backspace' ||
1038
+ event.key === 'Delete' ||
1039
+ (event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey);
1031
1040
  const onSegmentKeydown = (
1032
1041
  descriptor: FieldDescriptor,
1033
1042
  event: KeyboardEvent
@@ -1037,6 +1046,12 @@ const onSegmentKeydown = (
1037
1046
  if (!shown.value) open();
1038
1047
  return;
1039
1048
  }
1049
+ // Q60.17: a read-only field (its `readonly`, or its form saving) refuses
1050
+ // the keys that change a segment; moving between segments still works.
1051
+ if (props.readonly && changesSegment(event)) {
1052
+ event.preventDefault();
1053
+ return;
1054
+ }
1040
1055
  onFieldKeydown(descriptor, event);
1041
1056
  };
1042
1057
 
@@ -1098,15 +1113,37 @@ const onTimeSelect = ({ unit, value }: { unit: TimeUnit; value: string }) => {
1098
1113
 
1099
1114
  // ── Accessible button label ─────────────────────────────────────────────────
1100
1115
 
1116
+ /**
1117
+ * A `HH:mm(:ss)` model value as the locale says a time (Intl, CLDR): 12-hour
1118
+ * with the locale's day period when the field shows `ampm` ("3:05 PM",
1119
+ * "午後3:05"), else 24-hour ("15:05", fi "15.05"). A value that doesn't parse
1120
+ * is read as written.
1121
+ */
1122
+ const spokenTime = (value: string) => {
1123
+ const match = /^(\d{1,2}):(\d{1,2})(?::(\d{1,2}))?$/.exec(value);
1124
+ if (!match) return value;
1125
+ const [, h, m, s] = match;
1126
+ return formatDateOf(
1127
+ new Date(2000, 0, 1, +h, +m, +(s ?? 0)),
1128
+ config.locale,
1129
+ timeFieldsOf(!!props.ampm, !!props.seconds)
1130
+ );
1131
+ };
1132
+
1101
1133
  const accessibleButtonLabel = computed(() => {
1102
1134
  if (props.range) {
1103
1135
  const values = Array.isArray(props.modelValue) ? props.modelValue : [];
1104
1136
  const [start, end] = values;
1105
1137
  if (!start || !end) return t('timePickerInput.emptyRange').value;
1106
- return t('timePickerInput.changeSelectionRange', start, end).value;
1138
+ return t(
1139
+ 'timePickerInput.changeSelectionRange',
1140
+ spokenTime(start),
1141
+ spokenTime(end)
1142
+ ).value;
1107
1143
  }
1108
1144
  if (typeof props.modelValue === 'string' && props.modelValue) {
1109
- return t('timePickerInput.changeSelection', props.modelValue).value;
1145
+ return t('timePickerInput.changeSelection', spokenTime(props.modelValue))
1146
+ .value;
1110
1147
  }
1111
1148
  return t('timePickerInput.emptySelection').value;
1112
1149
  });
@@ -1563,9 +1600,9 @@ export type BbTimePickerInputSlots = {
1563
1600
  .bb-time-picker-input__panel {
1564
1601
  /* The panel hosts only the time columns — no calendar to align with. */
1565
1602
  .bb-time-selector {
1566
- border-left: 0;
1567
- margin-left: 0;
1568
- padding-left: 0;
1603
+ border-inline-start: 0;
1604
+ margin-inline-start: 0;
1605
+ padding-inline-start: 0;
1569
1606
  }
1570
1607
  }
1571
1608
 
@@ -383,14 +383,17 @@ export type BbToastProps = {
383
383
  }
384
384
  .bb-toast--top-left,
385
385
  .bb-toast--bottom-left {
386
+ /* stylelint-disable-next-line property-disallowed-list -- geometry: the `position` prop names a physical corner */
386
387
  left: calc(var(--offset) + var(--safe-h, 0px));
387
388
  }
388
389
  .bb-toast--top-right,
389
390
  .bb-toast--bottom-right {
391
+ /* stylelint-disable-next-line property-disallowed-list -- geometry: the `position` prop names a physical corner */
390
392
  right: calc(var(--offset) + var(--safe-h, 0px));
391
393
  }
392
394
  .bb-toast--top-center,
393
395
  .bb-toast--bottom-center {
396
+ /* stylelint-disable-next-line property-disallowed-list -- geometry: centred with a physical translate */
394
397
  left: 50%;
395
398
  transform: translateX(-50%);
396
399
  }
@@ -440,11 +443,11 @@ export type BbToastProps = {
440
443
  box-sizing: border-box;
441
444
  color: var(--fg);
442
445
  height: var(--toast-height);
443
- left: 0;
446
+ inset-inline-end: 0;
447
+ inset-inline-start: 0;
444
448
  overflow: hidden;
445
449
  pointer-events: auto;
446
450
  position: absolute;
447
- right: 0;
448
451
  touch-action: none;
449
452
 
450
453
  transform: translate3d(
@@ -587,7 +590,7 @@ export type BbToastProps = {
587
590
  /* Portal content fills the row (no icon column) and leaves room for the close
588
591
  * button when one is shown. */
589
592
  .bb-toast__content--portal {
590
- padding-right: 4px;
593
+ padding-inline-end: 4px;
591
594
  }
592
595
 
593
596
  .bb-toast__close {
@@ -599,11 +602,11 @@ export type BbToastProps = {
599
602
  cursor: pointer;
600
603
  display: flex;
601
604
  height: 22px;
605
+ inset-inline-end: 8px;
602
606
  justify-content: center;
603
607
  opacity: 0;
604
608
  padding: 0;
605
609
  position: absolute;
606
- right: 8px;
607
610
  top: 8px;
608
611
  transition:
609
612
  opacity 0.15s var(--bb-ease),
@@ -657,8 +660,8 @@ export type BbToastProps = {
657
660
  @media (max-width: 600px) {
658
661
  .bb-toast {
659
662
  --offset: 14px;
660
- left: var(--offset);
661
- right: var(--offset);
663
+ inset-inline-end: var(--offset);
664
+ inset-inline-start: var(--offset);
662
665
  width: auto;
663
666
  }
664
667
  .bb-toast--top-center,
@@ -696,8 +699,8 @@ export type BbToastProps = {
696
699
  --hit: 44px;
697
700
  content: '';
698
701
  height: calc(var(--hit) - 2px);
702
+ inset-inline-end: -8px; /* the button's inset from the card corner */
699
703
  position: absolute;
700
- right: -8px; /* the button's inset from the card corner */
701
704
  top: -8px;
702
705
  width: var(--hit);
703
706
  }
@@ -308,14 +308,17 @@ export type BbToastProps = {
308
308
  }
309
309
  .bb-toast--top-left,
310
310
  .bb-toast--bottom-left {
311
+ /* stylelint-disable-next-line property-disallowed-list -- geometry: the `position` prop names a physical corner */
311
312
  left: calc(var(--offset) + var(--safe-h, 0px));
312
313
  }
313
314
  .bb-toast--top-right,
314
315
  .bb-toast--bottom-right {
316
+ /* stylelint-disable-next-line property-disallowed-list -- geometry: the `position` prop names a physical corner */
315
317
  right: calc(var(--offset) + var(--safe-h, 0px));
316
318
  }
317
319
  .bb-toast--top-center,
318
320
  .bb-toast--bottom-center {
321
+ /* stylelint-disable-next-line property-disallowed-list -- geometry: centred with a physical translate */
319
322
  left: 50%;
320
323
  transform: translateX(-50%);
321
324
  }
@@ -365,11 +368,11 @@ export type BbToastProps = {
365
368
  box-sizing: border-box;
366
369
  color: var(--fg);
367
370
  height: var(--toast-height);
368
- left: 0;
371
+ inset-inline-end: 0;
372
+ inset-inline-start: 0;
369
373
  overflow: hidden;
370
374
  pointer-events: auto;
371
375
  position: absolute;
372
- right: 0;
373
376
  touch-action: none;
374
377
 
375
378
  transform: translate3d(
@@ -512,7 +515,7 @@ export type BbToastProps = {
512
515
  /* Portal content fills the row (no icon column) and leaves room for the close
513
516
  * button when one is shown. */
514
517
  .bb-toast__content--portal {
515
- padding-right: 4px;
518
+ padding-inline-end: 4px;
516
519
  }
517
520
 
518
521
  .bb-toast__close {
@@ -524,11 +527,11 @@ export type BbToastProps = {
524
527
  cursor: pointer;
525
528
  display: flex;
526
529
  height: 22px;
530
+ inset-inline-end: 8px;
527
531
  justify-content: center;
528
532
  opacity: 0;
529
533
  padding: 0;
530
534
  position: absolute;
531
- right: 8px;
532
535
  top: 8px;
533
536
  transition:
534
537
  opacity 0.15s var(--bb-ease),
@@ -582,8 +585,8 @@ export type BbToastProps = {
582
585
  @media (max-width: 600px) {
583
586
  .bb-toast {
584
587
  --offset: 14px;
585
- left: var(--offset);
586
- right: var(--offset);
588
+ inset-inline-end: var(--offset);
589
+ inset-inline-start: var(--offset);
587
590
  width: auto;
588
591
  }
589
592
  .bb-toast--top-center,
@@ -621,8 +624,8 @@ export type BbToastProps = {
621
624
  --hit: 44px;
622
625
  content: '';
623
626
  height: calc(var(--hit) - 2px);
627
+ inset-inline-end: -8px; /* the button's inset from the card corner */
624
628
  position: absolute;
625
- right: -8px; /* the button's inset from the card corner */
626
629
  top: -8px;
627
630
  width: var(--hit);
628
631
  }