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.
- package/README.md +24 -7
- package/bin/bitboss-ui-mcp.mjs +15 -3
- package/bin/bitboss-ui.mjs +115 -13
- package/dist/ai/BbAvatar.md +1 -1
- package/dist/ai/BbBreadcrumbs.md +65 -65
- package/dist/ai/BbButton.md +16 -5
- package/dist/ai/BbCheckbox.md +0 -2
- package/dist/ai/BbCheckboxGroup.md +13 -20
- package/dist/ai/BbDatePickerInput.md +4 -2
- package/dist/ai/BbDialog.md +1 -8
- package/dist/ai/BbDropdown.md +231 -220
- package/dist/ai/BbDropdownButton.md +65 -65
- package/dist/ai/BbDropdownGroup.md +2 -2
- package/dist/ai/BbDropzone.md +10 -10
- package/dist/ai/BbForm.md +43 -52
- package/dist/ai/BbHoverCard.md +4 -2
- package/dist/ai/BbNumberInput.md +88 -21
- package/dist/ai/BbPopover.md +29 -23
- package/dist/ai/BbProgress.md +48 -22
- package/dist/ai/BbRadioGroup.md +13 -19
- package/dist/ai/BbSelect.md +16 -36
- package/dist/ai/BbSelectPopover.md +14 -30
- package/dist/ai/BbSmoothHeight.md +0 -2
- package/dist/ai/BbSwitchGroup.md +13 -20
- package/dist/ai/BbTable.md +11 -10
- package/dist/ai/BbTabs.md +106 -105
- package/dist/ai/BbTabsList.md +2 -2
- package/dist/ai/BbTabsPanels.md +1 -1
- package/dist/ai/BbTabsRoot.md +2 -2
- package/dist/ai/BbTooltip.md +24 -10
- package/dist/ai/BbTree.md +14 -11
- package/dist/ai/changelog.json +256 -5
- package/dist/ai/components.json +36 -34
- package/dist/ai/composables/useBbDropdownContext.md +16 -16
- package/dist/ai/composables/useBbFormField.md +5 -1
- package/dist/ai/composables/useBbTabsContext.md +14 -14
- package/dist/ai/guides/agent-contract.md +27 -27
- package/dist/ai/guides/ai-router.md +1 -1
- package/dist/ai/guides/component-picker.md +3 -3
- package/dist/ai/guides/fetch-items-playbook.md +1 -1
- package/dist/ai/guides/icons-policy.md +10 -10
- package/dist/ai/guides/inertia-helpers.md +120 -67
- package/dist/ai/guides/installation-and-plugin-setup.md +43 -15
- package/dist/ai/guides/migration/components/bb-breadcrumbs.md +3 -2
- package/dist/ai/guides/migration/components/bb-checkbox-group.md +16 -16
- package/dist/ai/guides/migration/components/bb-dropdown-button.md +9 -8
- package/dist/ai/guides/migration/components/bb-dropdown.md +15 -14
- package/dist/ai/guides/migration/components/bb-radio-group.md +2 -1
- package/dist/ai/guides/migration/components/bb-select-popover.md +6 -1
- package/dist/ai/guides/migration/components/bb-select.md +10 -2
- package/dist/ai/guides/migration/components/bb-switch-group.md +2 -1
- package/dist/ai/guides/migration/components/bb-tabs.md +9 -8
- package/dist/ai/guides/migration/components/bb-tooltip.md +1 -1
- package/dist/ai/guides/migration/v2-to-v3.md +114 -17
- package/dist/ai/guides/migration/v3-beta-tooling.md +11 -0
- package/dist/ai/guides/options-items-playbook.md +30 -24
- package/dist/ai/guides/passthrough.md +2 -2
- package/dist/ai/guides/preset-components.md +18 -3
- package/dist/ai/guides/typescript-generic-components.md +1 -1
- package/dist/ai/guides/validated-forms.md +11 -22
- package/dist/ai/guides/validation-providers.md +4 -3
- package/dist/ai/helpers/inertia/manifest.json +636 -0
- package/dist/ai/helpers/inertia/types.ts +15 -0
- package/dist/ai/helpers/inertia/useAsyncFn.ts +110 -0
- package/dist/ai/helpers/inertia/useConfirmOnRouteLeave.ts +102 -0
- package/dist/ai/helpers/inertia/useDeleteCmd.ts +30 -0
- package/dist/ai/helpers/inertia/useHasChanged.ts +36 -0
- package/dist/ai/helpers/inertia/useIndexById.ts +23 -0
- package/dist/ai/helpers/inertia/useLazyProp.ts +148 -0
- package/dist/ai/helpers/inertia/useLazyPropGetter.ts +50 -0
- package/dist/ai/helpers/inertia/useLoading.ts +20 -0
- package/dist/ai/helpers/inertia/usePaginatedResponseContext.ts +88 -0
- package/dist/ai/helpers/inertia/usePromiseForm.ts +62 -0
- package/dist/ai/helpers/inertia/useProp.ts +63 -0
- package/dist/ai/helpers/inertia/useQuery.ts +19 -0
- package/dist/ai/helpers/inertia/useQueryObject.ts +116 -0
- package/dist/ai/helpers/inertia/useResourceContext.ts +69 -0
- package/dist/ai/helpers/inertia/useRouteQuery.ts +54 -0
- package/dist/ai/helpers/inertia/useScreenSizes.ts +23 -0
- package/dist/ai/helpers/inertia/useTableContext.ts +34 -0
- package/dist/ai/helpers/inertia/useTableSelectionContext.ts +48 -0
- package/dist/ai/helpers/inertia/useUntil.ts +33 -0
- package/dist/ai/helpers/inertia/utils.ts +24 -0
- package/dist/ai/index.md +6 -6
- package/dist/ai/manifest/components/BbBreadcrumbs.json +10 -6
- package/dist/ai/manifest/components/BbBreadcrumbs.tree.json +1 -1
- package/dist/ai/manifest/components/BbButton.json +1 -1
- package/dist/ai/manifest/components/BbCheckboxGroup.json +2 -2
- package/dist/ai/manifest/components/BbDropdown.json +23 -20
- package/dist/ai/manifest/components/BbDropdown.tree.json +2 -2
- package/dist/ai/manifest/components/BbDropdownButton.json +22 -19
- package/dist/ai/manifest/components/BbDropdownButton.tree.json +1 -1
- package/dist/ai/manifest/components/BbDropdownGroup.json +2 -2
- package/dist/ai/manifest/components/BbForm.json +1 -0
- package/dist/ai/manifest/components/BbNumberInput.json +6 -1
- package/dist/ai/manifest/components/BbNumberInput.tree.json +2 -1
- package/dist/ai/manifest/components/BbPopover.json +1 -0
- package/dist/ai/manifest/components/BbProgress.json +6 -6
- package/dist/ai/manifest/components/BbProgress.tree.json +1 -0
- package/dist/ai/manifest/components/BbRadioGroup.json +2 -2
- package/dist/ai/manifest/components/BbSelect.json +2 -2
- package/dist/ai/manifest/components/BbSelectPopover.json +2 -2
- package/dist/ai/manifest/components/BbSwitchGroup.json +2 -2
- package/dist/ai/manifest/components/BbTabs.json +7 -6
- package/dist/ai/manifest/components/BbTabsList.json +3 -3
- package/dist/ai/manifest/components/BbTabsPanels.json +1 -1
- package/dist/ai/manifest/components/BbTabsRoot.json +5 -4
- package/dist/ai/manifest/components/BbTooltip.json +1 -1
- package/dist/ai/manifest/index.json +2 -2
- package/dist/ai/manifest/meta.json +2 -0
- package/dist/ai/manifest/types.advanced.json +10 -9
- package/dist/ai/manifest/types.api.json +5 -4
- package/dist/ai/recipes/inertia/approvals-inbox.md +16 -18
- package/dist/ai/recipes/inertia/inline-edit-workspace.md +23 -33
- package/dist/ai/recipes/inertia/layout-scaffold.md +16 -16
- package/dist/ai/recipes/inertia/onboarding.md +6 -10
- package/dist/ai/recipes/inertia/ownership-atlas.md +15 -18
- package/dist/ai/recipes/inertia/record-form.md +11 -11
- package/dist/ai/recipes/inertia/records-workspace.md +38 -41
- package/dist/ai/recipes/inertia/settings-workspace.md +26 -38
- package/dist/ai/recipes/inertia/upload-center.md +31 -39
- package/dist/ai/recipes/inertia/wizard-form.md +10 -19
- package/dist/ai/recipes/nuxt/approvals-inbox.md +7 -8
- package/dist/ai/recipes/nuxt/inline-edit-workspace.md +14 -24
- package/dist/ai/recipes/nuxt/layout-scaffold.md +16 -16
- package/dist/ai/recipes/nuxt/onboarding.md +2 -6
- package/dist/ai/recipes/nuxt/ownership-atlas.md +7 -9
- package/dist/ai/recipes/nuxt/record-form.md +5 -5
- package/dist/ai/recipes/nuxt/records-workspace.md +29 -31
- package/dist/ai/recipes/nuxt/settings-workspace.md +22 -34
- package/dist/ai/recipes/nuxt/upload-center.md +22 -29
- package/dist/ai/recipes/nuxt/wizard-form.md +3 -11
- package/dist/ai/recipes/vue/approvals-inbox.md +7 -8
- package/dist/ai/recipes/vue/inline-edit-workspace.md +14 -24
- package/dist/ai/recipes/vue/layout-scaffold.md +16 -16
- package/dist/ai/recipes/vue/onboarding.md +2 -6
- package/dist/ai/recipes/vue/ownership-atlas.md +7 -9
- package/dist/ai/recipes/vue/record-form.md +5 -5
- package/dist/ai/recipes/vue/records-workspace.md +29 -31
- package/dist/ai/recipes/vue/settings-workspace.md +22 -34
- package/dist/ai/recipes/vue/upload-center.md +22 -29
- package/dist/ai/recipes/vue/wizard-form.md +3 -11
- package/dist/ai/source/BbAccordion.md +1 -1
- package/dist/ai/source/BbAlert.md +3 -3
- package/dist/ai/source/BbBadge.md +2 -2
- package/dist/ai/source/BbBadgeButton.md +5 -4
- package/dist/ai/source/BbBaseButton.md +1 -1
- package/dist/ai/source/BbBaseRadioIcon.md +1 -0
- package/dist/ai/source/BbBaseSwitchIcon.md +1 -0
- package/dist/ai/source/BbBreadcrumbs.md +63 -42
- package/dist/ai/source/BbButton.md +71 -33
- package/dist/ai/source/BbCalendar.md +17 -16
- package/dist/ai/source/BbCheckbox.md +3 -2
- package/dist/ai/source/BbCheckboxGroup.md +11 -4
- package/dist/ai/source/BbColorInput.md +10 -9
- package/dist/ai/source/BbConfirm.md +1 -1
- package/dist/ai/source/BbConfirmPortal.md +1 -1
- package/dist/ai/source/BbDatePicker.md +2 -2
- package/dist/ai/source/BbDatePickerInput.md +47 -20
- package/dist/ai/source/BbDialog.md +5 -5
- package/dist/ai/source/BbDropdown.md +230 -158
- package/dist/ai/source/BbDropdownButton.md +19 -12
- package/dist/ai/source/BbDropdownGroup.md +126 -93
- package/dist/ai/source/BbForm.md +25 -1
- package/dist/ai/source/BbIndicator.md +4 -0
- package/dist/ai/source/BbNumberInput.md +855 -19
- package/dist/ai/source/BbOffCanvas.md +27 -11
- package/dist/ai/source/BbPagination.md +3 -3
- package/dist/ai/source/BbPopover.md +152 -8
- package/dist/ai/source/BbPopoverPortal.md +11 -0
- package/dist/ai/source/BbProgress.md +82 -18
- package/dist/ai/source/BbRadioGroup.md +12 -5
- package/dist/ai/source/BbRating.md +11 -9
- package/dist/ai/source/BbSelect.md +16 -10
- package/dist/ai/source/BbSelectPopover.md +29 -23
- package/dist/ai/source/BbSlider.md +12 -6
- package/dist/ai/source/BbSwitch.md +3 -2
- package/dist/ai/source/BbSwitchGroup.md +5 -2
- package/dist/ai/source/BbTable.md +102 -18
- package/dist/ai/source/BbTabs.md +27 -23
- package/dist/ai/source/BbTabsList.md +26 -22
- package/dist/ai/source/BbTabsPanels.md +26 -22
- package/dist/ai/source/BbTabsRoot.md +25 -21
- package/dist/ai/source/BbTag.md +10 -9
- package/dist/ai/source/BbTextInput.md +5 -4
- package/dist/ai/source/BbTextarea.md +6 -5
- package/dist/ai/source/BbTimePicker.md +1 -1
- package/dist/ai/source/BbTimePickerInput.md +46 -9
- package/dist/ai/source/BbToast.md +10 -7
- package/dist/ai/source/BbToastPortal.md +10 -7
- package/dist/ai/source/BbTooltip.md +54 -8
- package/dist/ai/source/BbTree.md +21 -3
- package/dist/ai/source/CommonField.md +6 -4
- package/dist/ai/source/CommonFieldInput.md +15 -10
- package/dist/ai/source/CommonPopover.md +6 -0
- package/dist/ai/source/CommonTimeSelector.md +5 -4
- package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +10 -8
- package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +45 -45
- package/dist/components/BbBreadcrumbs/types.d.ts +25 -17
- package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +84 -71
- package/dist/components/BbButton/toggleRoving.d.ts +6 -0
- package/dist/components/BbButton/toggleRoving.js +45 -0
- package/dist/components/BbButton/types.d.ts +4 -1
- package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +178 -178
- package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +15 -15
- package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +28 -28
- package/dist/components/BbCalendar/useCalendarGrid.js +141 -139
- package/dist/components/BbCalendar/useDayjsLocale.d.ts +38 -15
- package/dist/components/BbCalendar/useDayjsLocale.js +31 -30
- package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +48 -48
- package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +81 -80
- package/dist/components/BbCheckboxGroup/types.d.ts +6 -2
- package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +69 -69
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +363 -349
- package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +91 -86
- package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +298 -289
- package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +322 -356
- package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +17 -15
- package/dist/components/BbDropdown/DropdownRow.vue.d.ts +40 -0
- package/dist/components/BbDropdown/DropdownRow.vue.js +5 -0
- package/dist/components/BbDropdown/DropdownRow.vue_vue_type_script_setup_true_lang.js +60 -0
- package/dist/components/BbDropdown/normalizeGroups.d.ts +8 -2
- package/dist/components/BbDropdown/normalizeGroups.js +60 -46
- package/dist/components/BbDropdown/types.d.ts +119 -88
- package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +11 -2
- package/dist/components/BbDropdownButton/types.d.ts +2 -2
- package/dist/components/BbForm/BbForm.vue.d.ts +9 -0
- package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +114 -105
- package/dist/components/BbForm/BbFormCustomField.js +1 -1
- package/dist/components/BbForm/bindFormField.js +2 -1
- package/dist/components/BbForm/formFields.d.ts +5 -0
- package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +0 -1
- package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +452 -125
- package/dist/components/BbNumberInput/numberDisplay.d.ts +256 -0
- package/dist/components/BbNumberInput/numberDisplay.js +499 -0
- package/dist/components/BbNumberInput/types.d.ts +54 -1
- package/dist/components/BbNumberInput/warroom/corpus.d.ts +58 -0
- package/dist/components/BbNumberInput/warroom/currency-verify.rows.d.ts +28 -0
- package/dist/components/BbNumberInput/warroom/currency.rows.d.ts +2 -0
- package/dist/components/BbNumberInput/warroom/harness.d.ts +217 -0
- package/dist/components/BbNumberInput/warroom/oracle.d.ts +150 -0
- package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +7 -7
- package/dist/components/BbPopover/BbPopover.vue.d.ts +1 -0
- package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +207 -164
- package/dist/components/BbPopover/types.d.ts +11 -0
- package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +15 -7
- package/dist/components/BbProgress/types.d.ts +23 -7
- package/dist/components/BbProgress/types.js +1 -1
- package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +102 -101
- package/dist/components/BbRadioGroup/types.d.ts +6 -2
- package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +63 -63
- package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +156 -154
- package/dist/components/BbSelect/types.d.ts +6 -2
- package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/components/BbSelectPopover/types.d.ts +6 -2
- package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +153 -153
- package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +62 -62
- package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +131 -130
- package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +711 -676
- package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbTabs/types.d.ts +25 -21
- package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +76 -76
- package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +58 -58
- package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +82 -82
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +246 -236
- package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +102 -97
- package/dist/components/BbTooltip/tooltipWarmup.d.ts +23 -0
- package/dist/components/BbTooltip/tooltipWarmup.js +7 -0
- package/dist/components/BbTooltip/types.d.ts +7 -2
- package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +29 -21
- package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +10 -7
- package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +37 -36
- package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +9 -9
- package/dist/composables/formSubmitLock.d.ts +6 -0
- package/dist/composables/formSubmitLock.js +4 -0
- package/dist/composables/useBaseOptions.d.ts +7 -1
- package/dist/composables/useBaseOptions.js +32 -32
- package/dist/composables/useBbDropdownContext.d.ts +8 -8
- package/dist/composables/useBbFormField.d.ts +9 -0
- package/dist/composables/useBbFormField.js +5 -3
- package/dist/composables/useBbTabsContext.d.ts +10 -10
- package/dist/composables/useBbTabsContext.js +18 -18
- package/dist/composables/useFormBinding.d.ts +11 -0
- package/dist/composables/useFormBinding.js +15 -13
- package/dist/composables/useItemText.d.ts +5 -1
- package/dist/composables/useItemText.js +8 -3
- package/dist/composables/useItemValue.d.ts +5 -1
- package/dist/composables/useItemValue.js +8 -3
- package/dist/composables/useLocale.js +10 -9
- package/dist/deprecation/ai-deprecations.json.d.ts +130 -0
- package/dist/deprecation/ai-deprecations.json.js +1 -1
- package/dist/deprecation/removedProps.js +1 -1
- package/dist/directives/bbDropdown.js +1 -1
- package/dist/i18n/index.d.ts +7 -12
- package/dist/i18n/locales/cs.json +11 -14
- package/dist/i18n/locales/da.json +13 -16
- package/dist/i18n/locales/de-CH.json +137 -0
- package/dist/i18n/locales/de.json +14 -17
- package/dist/i18n/locales/el.json +10 -13
- package/dist/i18n/locales/en-GB.json +137 -0
- package/dist/i18n/locales/en.json +8 -11
- package/dist/i18n/locales/es-MX.json +137 -0
- package/dist/i18n/locales/es.json +16 -19
- package/dist/i18n/locales/fi.json +8 -11
- package/dist/i18n/locales/fr.json +23 -26
- package/dist/i18n/locales/hu.json +8 -11
- package/dist/i18n/locales/it.json +12 -15
- package/dist/i18n/locales/ja.json +13 -16
- package/dist/i18n/locales/ko.json +10 -13
- package/dist/i18n/locales/nb.json +13 -16
- package/dist/i18n/locales/nl.json +21 -24
- package/dist/i18n/locales/pl.json +10 -13
- package/dist/i18n/locales/{pt.json → pt-BR.json} +19 -22
- package/dist/i18n/locales/pt-PT.json +137 -0
- package/dist/i18n/locales/ro.json +22 -25
- package/dist/i18n/locales/ru.json +11 -14
- package/dist/i18n/locales/sv.json +16 -19
- package/dist/i18n/locales/tr.json +14 -17
- package/dist/i18n/locales/uk.json +11 -14
- package/dist/i18n/locales/{zh-cn.json → zh-CN.json} +10 -13
- package/dist/i18n/locales/zh-HK.json +137 -0
- package/dist/i18n/locales/zh-TW.json +137 -0
- package/dist/i18n/regionHints.d.ts +16 -0
- package/dist/i18n/regionHints.js +49 -0
- package/dist/i18n/regions.d.ts +286 -0
- package/dist/i18n/regions.js +265 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +4 -4
- package/dist/llms-full.txt +1785 -1637
- package/dist/llms-medium.txt +74 -46
- package/dist/llms.txt +7 -7
- package/dist/locale-blueprint.json +16 -13
- package/dist/styles.css +2 -2
- package/dist/types/ptComponentMap.d.ts +1 -1
- package/dist/utilities/functions/slotKey.d.ts +2 -2
- package/dist/utils/versionCheck.js +1 -1
- package/dist/vite-plugin.d.ts +22 -19
- package/dist/vite.js +309 -297
- package/llms.txt +7 -7
- package/package.json +5 -3
- package/scripts/lib/agent-manifest.mjs +2 -1
- package/scripts/lib/eslint-disable.mjs +12 -4
- package/scripts/lib/eslint-plugin.d.ts +5 -1
- package/scripts/lib/eslint-plugin.mjs +187 -6
- package/scripts/lib/helper-canon.mjs +176 -0
- package/scripts/lib/helpers-add.mjs +1303 -0
- package/scripts/lib/local-components.mjs +33 -4
- package/scripts/lib/locale-check.mjs +165 -0
- package/scripts/lib/redundant-item-accessor.mjs +398 -0
- package/scripts/lib/renamed-item-field.mjs +343 -0
- package/scripts/lib/slot-key.mjs +2 -2
- package/scripts/lib/slot-renames.mjs +1 -1
- package/scripts/lib/validate-bb-markup.mjs +123 -56
- 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-
|
|
758
|
+
border-inline-start: 1px solid var(--line);
|
|
759
759
|
bottom: 0;
|
|
760
760
|
content: '';
|
|
761
|
-
|
|
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-
|
|
774
|
-
border-
|
|
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
|
-
|
|
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
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
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
|
|
1196
|
-
- `#<depth>` (named from data) — scope: `BbTreeNodeSlotProps<Meta>` — Every node at one depth (`0` = root); a numeric value can share this name. Reserved
|
|
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
|
|
package/dist/ai/changelog.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 3,
|
|
3
3
|
"library": "bitboss-ui",
|
|
4
|
-
"version": "3.0.0-beta.
|
|
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":
|
|
83
|
-
"behaviourBreaks":
|
|
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
|
}
|