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
package/dist/ai/BbTree.md CHANGED
@@ -755,10 +755,10 @@ const items = ref<Array<BbTreeItem<FileNode>>>([
755
755
 
756
756
  /* Trunk: vertical line continuing past a node while siblings follow. */
757
757
  .connector-tree .bb-tree__children > .bb-tree__item:not(:last-child)::before {
758
- border-left: 1px solid var(--line);
758
+ border-inline-start: 1px solid var(--line);
759
759
  bottom: 0;
760
760
  content: '';
761
- left: calc(var(--indent) / -2);
761
+ inset-inline-start: calc(var(--indent) / -2);
762
762
  position: absolute;
763
763
  top: calc(var(--gap) * -1);
764
764
  }
@@ -770,11 +770,11 @@ const items = ref<Array<BbTreeItem<FileNode>>>([
770
770
 
771
771
  .connector-tree .bb-tree__children > .bb-tree__item > .bb-tree__row::before {
772
772
  border-bottom: 1px solid var(--line);
773
- border-bottom-left-radius: var(--bb-radius-sm);
774
- border-left: 1px solid var(--line);
773
+ border-end-start-radius: var(--bb-radius-sm);
774
+ border-inline-start: 1px solid var(--line);
775
775
  content: '';
776
776
  height: calc(50% + var(--gap));
777
- left: calc(var(--indent) / -2);
777
+ inset-inline-start: calc(var(--indent) / -2);
778
778
  position: absolute;
779
779
  top: calc(var(--gap) * -1);
780
780
  width: calc(var(--indent) / 2);
@@ -803,10 +803,13 @@ your node markup:
803
803
 
804
804
  ### Large trees and lazy-loaded branches
805
805
 
806
- The whole tree stays mounted: collapsed branches are hidden by CSS, not
807
- removed, and there is no virtualization. For hundreds of nodes that is fine;
808
- for folders of unbounded size, don't ship the entire hierarchy up front — load
809
- children when a branch first opens. `items` is watched deeply, so appending
806
+ A collapsed branch builds its rows the first time it opens and keeps them
807
+ after that (closing hides them by CSS, inert), so a mostly collapsed tree of
808
+ thousands of nodes mounts only what is open. A node you reveal through
809
+ `expandedItems` (a search hit, "expand all") is in the DOM after the next
810
+ tick. There is no virtualization of open branches. For folders of unbounded
811
+ size, don't ship the entire hierarchy up front either: load children when a
812
+ branch first opens. `items` is watched deeply, so appending
810
813
  `children` to a node updates the tree in place, and newly appeared branches
811
814
  follow the same seeding rules (`expanded: false` keeps them collapsed).
812
815
 
@@ -1192,8 +1195,8 @@ States are listed in precedence order: when two are on at once and their entries
1192
1195
  ## Slots
1193
1196
 
1194
1197
  - `default` — scope: `BbTreeNodeSlotProps<Meta>` `{ meta: Meta; item: BbTreeItem<Meta>; parent?: BbTreeItem<Meta>; index: number; depth: number; value: any; expanded: boolean; expandable: boolean; toggleExpanded: () => void; expandProps: BbTreeExpandControllerProps }`
1195
- - `#<value>` (named from data) — scope: `BbTreeNodeSlotProps<Meta>` — One node, by its resolved `item-value` (string or number) through `slotKey`; beats `<depth>`, which beats `default`. Reserved keys (their slot is one of this component's own, so a key spelled like them is an error): `default`.
1196
- - `#<depth>` (named from data) — scope: `BbTreeNodeSlotProps<Meta>` — Every node at one depth (`0` = root); a numeric value can share this name. Reserved keys (their slot is one of this component's own, so a key spelled like them is an error): `default`.
1198
+ - `#<value>` (named from data) — scope: `BbTreeNodeSlotProps<Meta>` — One node, by its resolved `item-value` (string or number) through `slotKey`; beats `<depth>`, which beats `default`. Reserved names (their slot is one of this component's own, so an item value or column key spelled like them is an error): `default`.
1199
+ - `#<depth>` (named from data) — scope: `BbTreeNodeSlotProps<Meta>` — Every node at one depth (`0` = root); a numeric value can share this name. Reserved names (their slot is one of this component's own, so an item value or column key spelled like them is an error): `default`.
1197
1200
  - `#<value>:children` (named from data) — scope: `BbTreeNodeSlotProps<Meta>` — One node's children container, stopping the recursion there; beats `<depth>:children`. Renders for leaves too.
1198
1201
  - `#<depth>:children` (named from data) — scope: `BbTreeNodeSlotProps<Meta>` — The children container of every node at one depth.
1199
1202
 
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "schemaVersion": 3,
3
3
  "library": "bitboss-ui",
4
- "version": "3.0.0-beta.48",
4
+ "version": "3.0.0-beta.49",
5
5
  "upgrade": "v2-to-v3",
6
6
  "guide": "ai/guides/migration/v2-to-v3.md",
7
7
  "legend": {
8
8
  "id": "the row's stable id: `fNNN` = its row in the register (FOLLOWUPS §F), `css:<class>` = its pair in the class-rename map. Never reused; unchanged when a row is reworded.",
9
9
  "breaking": "every BREAKING change of the v2 → v3 line: register renames, then class renames, then behaviour breaks. Features and fixes are not tracked: an empty slice means nothing breaks.",
10
10
  "kind": "rename = an old name with a successor, or removed (from → to); behaviour = a change that keeps the name (description says what changed).",
11
- "surface": "on a rename, what the name is: prop | slot (without the #) | pt (the attribute spelling, camelCase words) | cssVar | class | option (a field of a composable or function argument). Apply a row only on its own surface.",
11
+ "surface": "on a rename, what the name is: prop | slot (without the #) | pt (the attribute spelling, camelCase words) | cssVar | class | option (a field of a composable or function argument) | item (a field of an `items` entry: `items[].key` is a row's, `items[group].key` a dropdown group's). Apply a row only on its own surface.",
12
12
  "from / to": "the old and new name, nothing else. to = null: removed with no single successor (the note says what to do). Several names in one cell (`--pad-x / --pad-y` → `--px / --py`) pair in order; `<x>` is one dynamic segment; a class row renames its modifiers too (`.old--x` → `.new--x`).",
13
13
  "note": "the prose the register row carries beside the names (a qualifier, the removed-with-hint advice, the modifiers that follow). Absent when there is none.",
14
14
  "firstReleasedIn": "the first published version that shipped the change; null = not released yet. Filter with bitboss-ui changelog --since <your version>.",
@@ -59,7 +59,8 @@
59
59
  "3.0.0-beta.45",
60
60
  "3.0.0-beta.46",
61
61
  "3.0.0-beta.47",
62
- "3.0.0-beta.48"
62
+ "3.0.0-beta.48",
63
+ "3.0.0-beta.49"
63
64
  ],
64
65
  "unpublished": [
65
66
  "3.0.0-alpha.2",
@@ -79,13 +80,14 @@
79
80
  "3.0.0-beta.40"
80
81
  ],
81
82
  "summary": {
82
- "renames": 214,
83
- "behaviourBreaks": 174,
83
+ "renames": 220,
84
+ "behaviourBreaks": 187,
84
85
  "bySurface": {
85
86
  "prop": 15,
86
87
  "option": 1,
87
88
  "pt": 14,
88
89
  "slot": 14,
90
+ "item": 6,
89
91
  "cssVar": 32,
90
92
  "class": 138
91
93
  },
@@ -785,6 +787,88 @@
785
787
  "default": "—",
786
788
  "firstReleasedIn": "3.0.0-beta.44"
787
789
  },
790
+ {
791
+ "id": "f310",
792
+ "kind": "rename",
793
+ "surface": "item",
794
+ "components": [
795
+ "BbDropdown",
796
+ "BbDropdownButton"
797
+ ],
798
+ "from": "items[].key",
799
+ "to": "items[].value",
800
+ "since": "2026-10-07, 3.0.0-beta.49 (Q64.2; a row's value is any type, compared by hash: the v-model value, its #<value> slots; v2 rows were { key, text } too)",
801
+ "default": "—",
802
+ "firstReleasedIn": "3.0.0-beta.49"
803
+ },
804
+ {
805
+ "id": "f311",
806
+ "kind": "rename",
807
+ "surface": "item",
808
+ "components": [
809
+ "BbDropdown",
810
+ "BbDropdownButton"
811
+ ],
812
+ "from": "items[].text",
813
+ "to": "items[].label",
814
+ "since": "2026-10-07, 3.0.0-beta.49 (Q64.2; BbDropdownButton's main button reads items[0].label)",
815
+ "default": "—",
816
+ "firstReleasedIn": "3.0.0-beta.49"
817
+ },
818
+ {
819
+ "id": "f312",
820
+ "kind": "rename",
821
+ "surface": "item",
822
+ "components": [
823
+ "BbDropdown",
824
+ "BbDropdownButton"
825
+ ],
826
+ "from": "items[group].key",
827
+ "to": "items[group].id",
828
+ "since": "2026-10-07, 3.0.0-beta.49 (Q64.2; the <BbDropdownGroup id> word; groups are v3-only, so beta-only)",
829
+ "default": "—",
830
+ "firstReleasedIn": "3.0.0-beta.49"
831
+ },
832
+ {
833
+ "id": "f313",
834
+ "kind": "rename",
835
+ "surface": "item",
836
+ "components": [
837
+ "BbTabs",
838
+ "BbTabsRoot"
839
+ ],
840
+ "from": "items[].key",
841
+ "to": "items[].value",
842
+ "since": "2026-10-07, 3.0.0-beta.49 (Q64.4; v-model carries it; #<value> / #<value>:label, same characters)",
843
+ "default": "—",
844
+ "firstReleasedIn": "3.0.0-beta.49"
845
+ },
846
+ {
847
+ "id": "f314",
848
+ "kind": "rename",
849
+ "surface": "item",
850
+ "components": [
851
+ "BbBreadcrumbs"
852
+ ],
853
+ "from": "items[].key",
854
+ "to": "items[].value",
855
+ "since": "2026-10-07, 3.0.0-beta.49 (Q64.5; names the crumb's slots; a hidden crumb is a dropdown row)",
856
+ "default": "—",
857
+ "firstReleasedIn": "3.0.0-beta.49"
858
+ },
859
+ {
860
+ "id": "f315",
861
+ "kind": "rename",
862
+ "surface": "item",
863
+ "components": [
864
+ "BbBreadcrumbs"
865
+ ],
866
+ "from": "items[].text",
867
+ "to": "items[].label",
868
+ "since": "2026-10-07, 3.0.0-beta.49 (Q64.5)",
869
+ "default": "—",
870
+ "firstReleasedIn": "3.0.0-beta.49"
871
+ },
788
872
  {
789
873
  "id": "f015",
790
874
  "kind": "rename",
@@ -5636,6 +5720,173 @@
5636
5720
  "ruling": "owner 2026-10-06 (Q60.14, button half)",
5637
5721
  "guide": "v2-to-v3.md § 6 item 47 + v3-beta-css-classes.md (class row) + BbButton.guide.md § Toggle buttons",
5638
5722
  "firstReleasedIn": "3.0.0-beta.48"
5723
+ },
5724
+ {
5725
+ "id": "f308",
5726
+ "kind": "behaviour",
5727
+ "summary": "BbTooltip / `v-bb-tooltip`: hover `delay` default 0 → 100 ms; keyboard focus shows at once; 300 ms skip delay between tooltips; `:delay=\"0\"` restores the instant hover open",
5728
+ "components": [
5729
+ "BbTooltip"
5730
+ ],
5731
+ "description": "BbTooltip and v-bb-tooltip wait 100 ms on hover before showing (the delay default was 0); keyboard focus shows them at once whatever delay says, and a tooltip the pointer reaches while another shows or within 300 ms of one closing skips its delay (shared by every tooltip, hover cards excluded). A test or flow that hovered and expected the bubble on the next tick waits ~100 ms now; :delay=\"0\" (or { delay: 0 }) restores the instant hover open",
5732
+ "ruling": "owner 2026-10-07 (Q60.22 c)",
5733
+ "guide": "v2-to-v3.md § 6 item 48 + BbTooltip.guide.md § Placement, timing, width and disabling",
5734
+ "firstReleasedIn": "3.0.0-beta.49"
5735
+ },
5736
+ {
5737
+ "id": "f309",
5738
+ "kind": "behaviour",
5739
+ "summary": "Option surfaces read `label` / `text` and `value` by default: `{ label, value }` items need no accessors; a `value` key now becomes the v-model value",
5740
+ "components": [
5741
+ "BbSelect",
5742
+ "BbSelectPopover",
5743
+ "BbRadioGroup",
5744
+ "BbCheckboxGroup",
5745
+ "BbSwitchGroup",
5746
+ "BbDropdown"
5747
+ ],
5748
+ "description": "With no item-text / item-value, an option on BbSelect, BbSelectPopover, BbRadioGroup, BbCheckboxGroup, BbSwitchGroup and a mapped BbDropdown group reads its own label (else text) as text and its own value (whatever it holds, null included) as value; before, JSON.stringify(item) and the whole object. Object items with a value key and no item-value now put item.value in v-model (:item-value=\"(item) => item\" keeps the old value). An explicit accessor wins; primitives and BbTable rows unchanged",
5749
+ "ruling": "owner 2026-10-07 (Q60.24)",
5750
+ "guide": "v2-to-v3.md § 6 item 49 + the five guides' items section + options-items-playbook.md",
5751
+ "firstReleasedIn": "3.0.0-beta.49"
5752
+ },
5753
+ {
5754
+ "id": "f316",
5755
+ "kind": "behaviour",
5756
+ "summary": "A single dropdown group with a `null` v-model shows its `value: null` row checked (the None row); a hand-written group's v-model holds row `value`s, not `key` strings",
5757
+ "components": [
5758
+ "BbDropdown",
5759
+ "BbDropdownButton"
5760
+ ],
5761
+ "description": "A single-choice BbDropdown / BbDropdownButton group whose v-model is null (or that has no selection) shows its value: null row checked, the \"None\" row, as BbSelect / BbRadioGroup already do (they match by hash); picking it emits null. A hand-written group's v-model holds its rows' values (any type, compared by hash) where it held their key strings",
5762
+ "ruling": "owner 2026-10-07 (Q64.3)",
5763
+ "guide": "v2-to-v3.md § 6 item 50 + components/bb-dropdown.md",
5764
+ "firstReleasedIn": "3.0.0-beta.49"
5765
+ },
5766
+ {
5767
+ "id": "f317",
5768
+ "kind": "behaviour",
5769
+ "summary": "Slots and useBbDropdownContext follow the fields: `{ text }` → `{ label }`; slot `group.key` → `group.id`; `#empty` `groupKey` → `groupId`; context by `id`, `selectedOptions[].label`",
5770
+ "components": [
5771
+ "BbDropdown",
5772
+ "BbDropdownButton",
5773
+ "BbTabs",
5774
+ "BbBreadcrumbs"
5775
+ ],
5776
+ "description": "Slot scopes and useBbDropdownContext follow the item fields: the row slots of BbDropdown / BbDropdownButton, BbTabs' #<value>:label / #label and BbBreadcrumbs' crumb slots hand { label } where they handed { text }; a row slot's group carries id (was key); the #loading / #empty slots' groupKey is groupId; useBbDropdownContext keys its groups by id and its selectedOptions[] carry label (was text). A destructured { text } reads undefined, no error",
5777
+ "ruling": "owner 2026-10-07 (Q64.2–Q64.5)",
5778
+ "guide": "v2-to-v3.md § 6 item 51 + components/bb-dropdown.md / bb-tabs.md / bb-breadcrumbs.md",
5779
+ "firstReleasedIn": "3.0.0-beta.49"
5780
+ },
5781
+ {
5782
+ "id": "f318",
5783
+ "kind": "behaviour",
5784
+ "summary": "`bitboss-ui check` kinds: `missing-key` → `missing-value` / `missing-id`, `duplicate-row-text` → `duplicate-row-label`; new `renamed-item-field` (ESLint `no-renamed-item-field`)",
5785
+ "components": [
5786
+ "BbDropdown",
5787
+ "BbDropdownButton"
5788
+ ],
5789
+ "description": "bitboss-ui check kinds follow the dropdown fields: missing-key is missing-value (a selectable group's row) or missing-id (a selectable group), duplicate-row-text is duplicate-row-label; the old fields themselves are the new renamed-item-field (check --fix, ESLint bitboss-ui/no-renamed-item-field). A script that matches the old kind names in check --json output needs the new ones (ESLint disable comments name rules, unchanged)",
5790
+ "ruling": "owner 2026-10-07 (Q64.2)",
5791
+ "guide": "v3-beta-tooling.md",
5792
+ "firstReleasedIn": "3.0.0-beta.49"
5793
+ },
5794
+ {
5795
+ "id": "f319",
5796
+ "kind": "behaviour",
5797
+ "summary": "BbPopover is non-modal by default (page stays live, outside click closes and lands, Tab out closes); `modal` restores the modal dialog; the phone sheet stays modal",
5798
+ "components": [
5799
+ "BbPopover"
5800
+ ],
5801
+ "description": "BbPopover is a non-modal dialog by default: a role=\"dialog\" panel without aria-modal, the page behind stays clickable, focusable and scrollable, an outside click closes it and still reaches its target (focus stays there), Escape closes it, and Tab past the last control (or Shift+Tab before the first) leaves and closes it. modal (new, default false) restores the modal <dialog> exactly (focus trap, inert page, no scroll). The phone sheet stays modal either way. Applies to v-bb-popover and the popover portals too (modal through the directive's options)",
5802
+ "ruling": "owner 2026-10-07 (Q60.10)",
5803
+ "guide": "v2-to-v3.md § 6 item 52 + BbPopover.guide.md § Accessibility",
5804
+ "firstReleasedIn": "3.0.0-beta.49"
5805
+ },
5806
+ {
5807
+ "id": "f320",
5808
+ "kind": "behaviour",
5809
+ "summary": "BbForm locks while a promise `@submit` runs: joined fields read-only, `type=submit` buttons spin; opt out with `disable-submit-lock`",
5810
+ "components": [
5811
+ "BbForm",
5812
+ "BbButton"
5813
+ ],
5814
+ "description": "While a @submit that returned a promise is pending, every field joined to the BbForm is read-only (never disabled; aria-readonly) and every type=\"submit\" BbButton inside spins; both end when it settles. A sync submit never locks. Opt out with disable-submit-lock. A useBbFormField handle gains readonly",
5815
+ "ruling": "owner 2026-10-07 (Q60.17)",
5816
+ "guide": "v2-to-v3.md § 6 item 53 + BbForm.guide.md § While it saves",
5817
+ "firstReleasedIn": "3.0.0-beta.49"
5818
+ },
5819
+ {
5820
+ "id": "f321",
5821
+ "kind": "behaviour",
5822
+ "summary": "Adjacent `group` toggle BbButtons are one Tab stop with ArrowLeft/Right, Home/End inside (roving tabindex); aria-pressed unchanged",
5823
+ "components": [
5824
+ "BbButton"
5825
+ ],
5826
+ "description": "Adjacent group toggle BbButtons (each with a v-model, side by side under one parent) are one Tab stop: Tab lands on the pressed button (else the one last focused, else the first), ArrowLeft / ArrowRight (mirrored under dir=\"rtl\", wrapping) and Home / End move focus between them, Space / Enter toggle; disabled and loading buttons are skipped. Each button keeps aria-pressed; group buttons without a v-model, a lone toggle and toggles split by another element keep one Tab stop each. A keyboard test that Tabs through such a set reaches one button, not each",
5827
+ "ruling": "owner 2026-10-07 (Q44.25-001)",
5828
+ "guide": "v2-to-v3.md § 6 item 54 + BbButton.guide.md § Toggle buttons",
5829
+ "firstReleasedIn": "3.0.0-beta.49"
5830
+ },
5831
+ {
5832
+ "id": "f322",
5833
+ "kind": "behaviour",
5834
+ "summary": "BbNumberInput formats live in the locale (`10.005,6`): the DOM text is formatted, paste reads locale grouping and `(1,234.56)` as negative; `disable-formatting` restores the old field",
5835
+ "components": [
5836
+ "BbNumberInput"
5837
+ ],
5838
+ "description": "BbNumberInput shows its number the locale's way while the user types (Q60.25: 10005,6 shows 10.005,6 in it, 10,005.6 in en; grouping per CLDR, so it shows 1000 and then 10.000). The DOM text is the formatted one: event.target.value, pt:input listeners and a consumer maxlength / pattern see it. A typed , or . is always the decimal (Q51.2's key-by-key reclassify stays); a pasted number written the locale's way is read that way (it 1.000 pasted is 1000, was 1; en 1,234 pasted is 1234, was 1.234), and a paste keeps only the FIRST number inside the text (Q60.25b round 5 + owner round 7: $1,234.56 - $2,000 is 1234.56, never the digits run together; (1,234.56) is -1234.56, was 1234.56; 1.2E+05 is 120000, was 1.205; 15 m² is 15, was 152). Leading zeros stay while focused (1.|005 Backspace leaves 005); blur rebuilds the text from the model (1,50 → 1,5); a bare - keeps the last valid value in the model instead of emitting null. disable-formatting (new) restores the previous field exactly; min-precision (new, additive) pads decimals",
5839
+ "ruling": "owner 2026-10-07 (Q60.25)",
5840
+ "guide": "v2-to-v3.md § 6 item 55 + BbNumberInput.guide.md § Locale display",
5841
+ "firstReleasedIn": "3.0.0-beta.49"
5842
+ },
5843
+ {
5844
+ "id": "f323",
5845
+ "kind": "behaviour",
5846
+ "summary": "BbNumberInput posts through a hidden input carrying `name` and the raw value; the visible input has no `name` (`form.elements[name]` is the hidden one)",
5847
+ "components": [
5848
+ "BbNumberInput"
5849
+ ],
5850
+ "description": "BbNumberInput posts through a hidden input: name moves to a sibling <input type=\"hidden\"> carrying the raw period value (10005.6), and the visible input has no name. form.elements[name], input[name=x] and FormData find the hidden input; a test or script that typed into input[name=x] targets the spinbutton (input[role=\"spinbutton\"]). Not with disable-formatting",
5851
+ "ruling": "owner 2026-10-07 (Q60.25)",
5852
+ "guide": "v2-to-v3.md § 6 item 55 + BbNumberInput.guide.md § Locale display",
5853
+ "firstReleasedIn": "3.0.0-beta.49"
5854
+ },
5855
+ {
5856
+ "id": "f324",
5857
+ "kind": "behaviour",
5858
+ "summary": "BbNumberInput `currency` / `unit` paint the symbol inside the text (`$1,234.50`, `20 kg`); `event.target.value`, `pt:input`, `maxlength` / `pattern` see it; the model stays the number",
5859
+ "components": [
5860
+ "BbNumberInput"
5861
+ ],
5862
+ "description": "BbNumberInput currency (new, ISO 4217) / unit (new, an Intl unit) paint the symbol or unit INSIDE the editable text, the locale's way ($1,234.50, 1234,50 €, CHF-1’234.56, 20 kg, 15%): event.target.value, pt:input listeners and a consumer maxlength / pattern see the shell too (a maxlength counts it); Home / End move the caret to the number's edges, never the value; the unit follows the number's plural (1 hr, 2 hrs) and at rest aria-valuetext is the spoken amount (1,234.50 US dollars). unit is typed (BbNumberUnit: kilowatt, square-meter are type errors). The model stays the number (unit=\"percent\" showing 15% is 15); currency sets the decimals unless min-precision / max-precision are set; disable-formatting ignores both",
5863
+ "ruling": "owner 2026-10-07 (Q60.25b)",
5864
+ "guide": "v2-to-v3.md § 6 item 55 + BbNumberInput.guide.md § Currency & unit fields",
5865
+ "firstReleasedIn": "3.0.0-beta.49"
5866
+ },
5867
+ {
5868
+ "id": "f325",
5869
+ "kind": "behaviour",
5870
+ "summary": "BbNumberInput with `max-precision` below 3: a second typed `,` / `.` is refused (`1.234,50` in EUR stays `1,23 €`); at 0 a typed mark refuses later digits (`12,5` is 12)",
5871
+ "components": [
5872
+ "BbNumberInput"
5873
+ ],
5874
+ "description": "BbNumberInput with max-precision=\"0\" (and a 0-digit currency, JPY): a typed , or . stays in the text and the digits after it are refused (12,5 is 12, was 125, a 100× amount); blur drops the mark. A paste of 12,5 truncates to 12 (never rounded). With max-precision below 3 (0–2, every currency field) a second typed , / . is refused once a decimal exists (owner: no hold rule): it EUR 1.234,50 stays 1,23 €, en 1,234 is 1.23; Q51.2's reclassify (1.234,56 → 1234.56) works only in fields with 3+ decimals",
5875
+ "ruling": "owner 2026-10-07 (Q60.25b)",
5876
+ "guide": "v2-to-v3.md § 6 item 55 + BbNumberInput.guide.md § Bounds & precision, § Locale display",
5877
+ "firstReleasedIn": "3.0.0-beta.49"
5878
+ },
5879
+ {
5880
+ "id": "f326",
5881
+ "kind": "behaviour",
5882
+ "summary": "BbNumberInput: `-` typed anywhere flips the sign in every field (was only at the start); a digit typed before the minus lands after it",
5883
+ "components": [
5884
+ "BbNumberInput"
5885
+ ],
5886
+ "description": "BbNumberInput: - typed anywhere flips the sign (was: only at the start; elsewhere ignored), in every field; the caret stays on its digit, and a digit typed before a negative's minus lands after it (-512, was a broken 5-12). Not with disable-formatting (the old field)",
5887
+ "ruling": "owner 2026-10-07 (Q60.25b)",
5888
+ "guide": "v2-to-v3.md § 6 item 55 + BbNumberInput.guide.md § Locale display",
5889
+ "firstReleasedIn": "3.0.0-beta.49"
5639
5890
  }
5640
5891
  ]
5641
5892
  }