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
|
@@ -1159,7 +1159,7 @@ export type BbCalendarSlots = {
|
|
|
1159
1159
|
set inline from the column count), so it is always exactly as tall as the
|
|
1160
1160
|
grid. */
|
|
1161
1161
|
&--datetime {
|
|
1162
|
-
padding-
|
|
1162
|
+
padding-inline-end: var(--rail-w, 252px);
|
|
1163
1163
|
position: relative;
|
|
1164
1164
|
}
|
|
1165
1165
|
|
|
@@ -1175,7 +1175,7 @@ export type BbCalendarSlots = {
|
|
|
1175
1175
|
contain-intrinsic-inline-size: var(--natural-w);
|
|
1176
1176
|
|
|
1177
1177
|
container: bb-calendar / inline-size;
|
|
1178
|
-
padding-
|
|
1178
|
+
padding-inline-end: 0;
|
|
1179
1179
|
width: min(100%, var(--natural-w));
|
|
1180
1180
|
}
|
|
1181
1181
|
|
|
@@ -1360,7 +1360,7 @@ export type BbCalendarSlots = {
|
|
|
1360
1360
|
/* Out of flow only while it leaves, so the box's height is the
|
|
1361
1361
|
incoming month (slots included) and can ease to it. */
|
|
1362
1362
|
&[class*='leave-active'] {
|
|
1363
|
-
|
|
1363
|
+
inset-inline-start: 0;
|
|
1364
1364
|
position: absolute;
|
|
1365
1365
|
top: 0;
|
|
1366
1366
|
}
|
|
@@ -1431,10 +1431,10 @@ export type BbCalendarSlots = {
|
|
|
1431
1431
|
border-radius: 0;
|
|
1432
1432
|
content: '';
|
|
1433
1433
|
height: calc(var(--cell) - 4px);
|
|
1434
|
-
|
|
1434
|
+
inset-inline-end: 0;
|
|
1435
|
+
inset-inline-start: 0;
|
|
1435
1436
|
pointer-events: none;
|
|
1436
1437
|
position: absolute;
|
|
1437
|
-
right: 0;
|
|
1438
1438
|
top: 2px;
|
|
1439
1439
|
transition: background-color var(--bb-transition-fast);
|
|
1440
1440
|
z-index: 0;
|
|
@@ -1448,12 +1448,12 @@ export type BbCalendarSlots = {
|
|
|
1448
1448
|
/* Endpoints extend the wash on their inner side only, under the solid cap */
|
|
1449
1449
|
&--first:not([class*='--last'])::before {
|
|
1450
1450
|
background-color: color-mix(in oklab, var(--bb-primary) 15%, transparent);
|
|
1451
|
-
|
|
1451
|
+
inset-inline-start: 50%;
|
|
1452
1452
|
}
|
|
1453
1453
|
|
|
1454
1454
|
&--last:not([class*='--first'])::before {
|
|
1455
1455
|
background-color: color-mix(in oklab, var(--bb-primary) 15%, transparent);
|
|
1456
|
-
|
|
1456
|
+
inset-inline-end: 50%;
|
|
1457
1457
|
}
|
|
1458
1458
|
|
|
1459
1459
|
/* Round the band where it terminates at a row wrap */
|
|
@@ -1473,12 +1473,12 @@ export type BbCalendarSlots = {
|
|
|
1473
1473
|
|
|
1474
1474
|
&--preview-end::before {
|
|
1475
1475
|
border-radius: 0 var(--bb-radius-sm) var(--bb-radius-sm) 0;
|
|
1476
|
-
|
|
1476
|
+
inset-inline-end: 2px;
|
|
1477
1477
|
}
|
|
1478
1478
|
|
|
1479
1479
|
&--preview-start::before {
|
|
1480
1480
|
border-radius: var(--bb-radius-sm) 0 0 var(--bb-radius-sm);
|
|
1481
|
-
|
|
1481
|
+
inset-inline-start: 2px;
|
|
1482
1482
|
}
|
|
1483
1483
|
|
|
1484
1484
|
/* Days of the previous / next month are live controls: muted, never
|
|
@@ -1501,6 +1501,7 @@ export type BbCalendarSlots = {
|
|
|
1501
1501
|
bottom: 2px;
|
|
1502
1502
|
content: '';
|
|
1503
1503
|
height: 2px;
|
|
1504
|
+
/* stylelint-disable-next-line property-disallowed-list -- geometry: centred with a physical translate */
|
|
1504
1505
|
left: 50%;
|
|
1505
1506
|
position: absolute;
|
|
1506
1507
|
transform: translateX(-50%);
|
|
@@ -1590,7 +1591,7 @@ export type BbCalendarSlots = {
|
|
|
1590
1591
|
&__button-menu {
|
|
1591
1592
|
background-color: var(--bg);
|
|
1592
1593
|
height: 100%;
|
|
1593
|
-
|
|
1594
|
+
inset-inline-start: 0;
|
|
1594
1595
|
position: absolute;
|
|
1595
1596
|
top: 0;
|
|
1596
1597
|
width: 100%;
|
|
@@ -1689,7 +1690,7 @@ export type BbCalendarSlots = {
|
|
|
1689
1690
|
var(--bb-primary) 15%,
|
|
1690
1691
|
transparent
|
|
1691
1692
|
);
|
|
1692
|
-
|
|
1693
|
+
inset-inline-start: 50%;
|
|
1693
1694
|
}
|
|
1694
1695
|
|
|
1695
1696
|
&--last:not([class*='--first'])::before {
|
|
@@ -1698,7 +1699,7 @@ export type BbCalendarSlots = {
|
|
|
1698
1699
|
var(--bb-primary) 15%,
|
|
1699
1700
|
transparent
|
|
1700
1701
|
);
|
|
1701
|
-
|
|
1702
|
+
inset-inline-end: 50%;
|
|
1702
1703
|
}
|
|
1703
1704
|
|
|
1704
1705
|
/* Row wraps: cap the band where the grid breaks. */
|
|
@@ -1819,7 +1820,7 @@ export type BbCalendarSlots = {
|
|
|
1819
1820
|
*/
|
|
1820
1821
|
@container bb-calendar (width < 335px) {
|
|
1821
1822
|
.bb-time-selector {
|
|
1822
|
-
border-
|
|
1823
|
+
border-inline-start: 0;
|
|
1823
1824
|
border-top: var(--bb-border-w) solid var(--bb-border);
|
|
1824
1825
|
margin-top: 8px;
|
|
1825
1826
|
padding: 8px 0 0;
|
|
@@ -1835,7 +1836,7 @@ export type BbCalendarSlots = {
|
|
|
1835
1836
|
|
|
1836
1837
|
@container bb-calendar (335px <= width < 385px) {
|
|
1837
1838
|
:is(.bb-calendar--seconds, .bb-calendar--ampm) .bb-time-selector {
|
|
1838
|
-
border-
|
|
1839
|
+
border-inline-start: 0;
|
|
1839
1840
|
border-top: var(--bb-border-w) solid var(--bb-border);
|
|
1840
1841
|
margin-top: 8px;
|
|
1841
1842
|
padding: 8px 0 0;
|
|
@@ -1851,7 +1852,7 @@ export type BbCalendarSlots = {
|
|
|
1851
1852
|
|
|
1852
1853
|
@container bb-calendar (385px <= width < 389px) {
|
|
1853
1854
|
.bb-calendar--ampm .bb-time-selector {
|
|
1854
|
-
border-
|
|
1855
|
+
border-inline-start: 0;
|
|
1855
1856
|
border-top: var(--bb-border-w) solid var(--bb-border);
|
|
1856
1857
|
margin-top: 8px;
|
|
1857
1858
|
padding: 8px 0 0;
|
|
@@ -1867,7 +1868,7 @@ export type BbCalendarSlots = {
|
|
|
1867
1868
|
|
|
1868
1869
|
@container bb-calendar (389px <= width < 439px) {
|
|
1869
1870
|
.bb-calendar--seconds.bb-calendar--ampm .bb-time-selector {
|
|
1870
|
-
border-
|
|
1871
|
+
border-inline-start: 0;
|
|
1871
1872
|
border-top: var(--bb-border-w) solid var(--bb-border);
|
|
1872
1873
|
margin-top: 8px;
|
|
1873
1874
|
padding: 8px 0 0;
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
:layout="layout"
|
|
27
27
|
:name="name"
|
|
28
28
|
:passthrough="passthrough"
|
|
29
|
-
:readonly="
|
|
29
|
+
:readonly="fieldReadonly"
|
|
30
30
|
:reverse="reverse"
|
|
31
31
|
:show-asterisk="showAsterisk"
|
|
32
32
|
:show-hint="showHint"
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
:has-errors="!!fieldHasErrors"
|
|
72
72
|
:has-warnings="!!fieldHasWarnings && !fieldHasErrors"
|
|
73
73
|
:indeterminate="!!indeterminate"
|
|
74
|
-
:readonly="!!
|
|
74
|
+
:readonly="!!fieldReadonly"
|
|
75
75
|
v-bind="passthrough.icon"
|
|
76
76
|
/>
|
|
77
77
|
<!-- eslint-enable vue/attributes-order -->
|
|
@@ -137,6 +137,7 @@ const {
|
|
|
137
137
|
showAsterisk,
|
|
138
138
|
errors: fieldErrors,
|
|
139
139
|
ariaRequired: fieldAriaRequired,
|
|
140
|
+
readonly: fieldReadonly,
|
|
140
141
|
} = useFormBinding(declaredProps, declaredEmit, {
|
|
141
142
|
componentName: 'BbCheckbox',
|
|
142
143
|
identifierFallback: () => declaredProps.label,
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
:loading="loading"
|
|
30
30
|
:name="name"
|
|
31
31
|
:passthrough="containerPassthrough"
|
|
32
|
-
:readonly="
|
|
32
|
+
:readonly="fieldReadonly"
|
|
33
33
|
:reverse="reverse"
|
|
34
34
|
:show-asterisk="showAsterisk"
|
|
35
35
|
:show-hint="showHint"
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
:has-errors="!!fieldHasErrors"
|
|
113
113
|
:has-warnings="!!fieldHasWarnings && !fieldHasErrors"
|
|
114
114
|
:indeterminate="false"
|
|
115
|
-
:readonly="!!
|
|
115
|
+
:readonly="!!fieldReadonly"
|
|
116
116
|
v-bind="passthrough.part('icon', rowStates, option.item)"
|
|
117
117
|
/>
|
|
118
118
|
<!-- eslint-enable vue/attributes-order -->
|
|
@@ -194,6 +194,7 @@ const {
|
|
|
194
194
|
emit,
|
|
195
195
|
showAsterisk,
|
|
196
196
|
errors: fieldErrors,
|
|
197
|
+
readonly: fieldReadonly,
|
|
197
198
|
} = useFormBinding(declaredProps, declaredEmit, {
|
|
198
199
|
componentName: 'BbCheckboxGroup',
|
|
199
200
|
identifierFallback: () => declaredProps.legend,
|
|
@@ -298,6 +299,7 @@ const { options } = useBaseOptions({
|
|
|
298
299
|
itemText: props.itemText as any,
|
|
299
300
|
itemProps: toRef(props, 'itemProps'),
|
|
300
301
|
itemValue: props.itemValue as any,
|
|
302
|
+
optionDefaults: true,
|
|
301
303
|
// A ref, not the setup-time number: a runtime `:max` change must re-gate rows.
|
|
302
304
|
max: toRef(props, 'max'),
|
|
303
305
|
selectable: toRef(props, 'selectable'),
|
|
@@ -754,14 +756,18 @@ export type BbCheckboxGroupProps<T> = {
|
|
|
754
756
|
/**
|
|
755
757
|
* Defines a path that returns a property of the object to use as text or a function that returns a string.
|
|
756
758
|
*
|
|
757
|
-
*
|
|
759
|
+
* Unset: own `label`, else `text` (`{ label, value }` needs no accessor).
|
|
760
|
+
*
|
|
761
|
+
* @defaultValue own `label`, else `text`, else `JSON.stringify(item)`
|
|
758
762
|
*/
|
|
759
763
|
itemText?: ItemAccessor<T, string>;
|
|
760
764
|
|
|
761
765
|
/**
|
|
762
766
|
* Defines a path that returns a property of the object to use as value or a function that returns any value.
|
|
763
767
|
*
|
|
764
|
-
*
|
|
768
|
+
* Unset: own `value`, even `null`.
|
|
769
|
+
*
|
|
770
|
+
* @defaultValue own `value`, else the whole item
|
|
765
771
|
*/
|
|
766
772
|
itemValue?: ItemAccessor<T>;
|
|
767
773
|
|
|
@@ -1072,6 +1078,7 @@ export type BbCheckboxGroupSlots<T> = {
|
|
|
1072
1078
|
.bb-checkbox-group {
|
|
1073
1079
|
.bb-field__layout--horizontal {
|
|
1074
1080
|
.bb-field__label {
|
|
1081
|
+
/* stylelint-disable-next-line declaration-property-value-disallowed-list -- support: `float: inline-start` needs Chrome 118, above the 114 floor */
|
|
1075
1082
|
float: left;
|
|
1076
1083
|
}
|
|
1077
1084
|
}
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
:loading="loading"
|
|
29
29
|
:name="name"
|
|
30
30
|
:passthrough="passthrough"
|
|
31
|
-
:readonly="
|
|
31
|
+
:readonly="fieldReadonly"
|
|
32
32
|
:reverse="reverse"
|
|
33
33
|
:show-asterisk="showAsterisk"
|
|
34
34
|
:show-hint="showHint"
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
ref="wrapperRef"
|
|
53
53
|
:append:icon="props['append:icon']"
|
|
54
54
|
class="bb-color-input__field"
|
|
55
|
-
:clearable="clearable && hasValue && !
|
|
55
|
+
:clearable="clearable && hasValue && !fieldReadonly && !disabled"
|
|
56
56
|
:compact="compact"
|
|
57
57
|
:disabled="disabled"
|
|
58
58
|
:has-errors="fieldHasErrors"
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
:loading="loading"
|
|
62
62
|
:passthrough="passthrough"
|
|
63
63
|
:prepend:icon="props['prepend:icon']"
|
|
64
|
-
:readonly="
|
|
64
|
+
:readonly="fieldReadonly"
|
|
65
65
|
:variant="variant"
|
|
66
66
|
@click:clear="emit('update:modelValue', null)"
|
|
67
67
|
>
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
:aria-disabled="disabled || undefined"
|
|
77
77
|
:aria-invalid="fieldHasErrors ? true : undefined"
|
|
78
78
|
:aria-labelledby="ariaLabelledby"
|
|
79
|
-
:aria-readonly="
|
|
79
|
+
:aria-readonly="fieldReadonly || undefined"
|
|
80
80
|
:aria-required="fieldAriaRequired"
|
|
81
81
|
:autocomplete="autocomplete"
|
|
82
82
|
:autofocus="autofocus"
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
:disabled="disabled"
|
|
85
85
|
:name="name"
|
|
86
86
|
:placeholder="placeholder"
|
|
87
|
-
:readonly="
|
|
87
|
+
:readonly="fieldReadonly"
|
|
88
88
|
:required="fieldRequired"
|
|
89
89
|
size="1"
|
|
90
90
|
type="text"
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
:adaptive="adaptive"
|
|
100
100
|
:alpha="alpha"
|
|
101
101
|
:anchor="wrapperRef"
|
|
102
|
-
:disabled="disabled ||
|
|
102
|
+
:disabled="disabled || fieldReadonly"
|
|
103
103
|
:eye-dropper="eyeDropper"
|
|
104
104
|
:label="indicatorLabel"
|
|
105
105
|
:model-value="fieldModel"
|
|
@@ -126,7 +126,7 @@
|
|
|
126
126
|
<button
|
|
127
127
|
v-bind="indicatorBindings(dotProps)"
|
|
128
128
|
class="bb-color-input__indicator"
|
|
129
|
-
:disabled="disabled ||
|
|
129
|
+
:disabled="disabled || fieldReadonly"
|
|
130
130
|
:style="{ backgroundColor: fieldModel ?? undefined }"
|
|
131
131
|
type="button"
|
|
132
132
|
/>
|
|
@@ -197,6 +197,7 @@ const {
|
|
|
197
197
|
required: fieldRequired,
|
|
198
198
|
ariaRequired: fieldAriaRequired,
|
|
199
199
|
model: fieldModel,
|
|
200
|
+
readonly: fieldReadonly,
|
|
200
201
|
} = useFormBinding(declaredProps, declaredEmit, {
|
|
201
202
|
componentName: 'BbColorInput',
|
|
202
203
|
identifierFallback: () => declaredProps.label,
|
|
@@ -900,11 +901,11 @@ export type BbColorInputSlots = {
|
|
|
900
901
|
&::after {
|
|
901
902
|
content: '';
|
|
902
903
|
height: calc(var(--bb-input-h) - 2 * var(--bb-border-w));
|
|
903
|
-
|
|
904
|
-
right: max(
|
|
904
|
+
inset-inline-end: max(
|
|
905
905
|
calc((var(--bb-input-icon) - var(--bb-input-h)) / 2),
|
|
906
906
|
calc(var(--bb-input-px) * -1)
|
|
907
907
|
);
|
|
908
|
+
position: absolute;
|
|
908
909
|
top: 50%;
|
|
909
910
|
transform: translateY(-50%);
|
|
910
911
|
width: var(--bb-input-h);
|
|
@@ -938,7 +938,7 @@ export type BbDatePickerSlots = {
|
|
|
938
938
|
.bb-calendar--datetime {
|
|
939
939
|
display: flex;
|
|
940
940
|
flex-direction: column;
|
|
941
|
-
padding-
|
|
941
|
+
padding-inline-end: 0;
|
|
942
942
|
}
|
|
943
943
|
|
|
944
944
|
/* The time rail in the sheet: one touch scale for the whole panel. The
|
|
@@ -955,7 +955,7 @@ export type BbDatePickerSlots = {
|
|
|
955
955
|
--time-row-h: var(--sheet-cell, 40px);
|
|
956
956
|
--time-col-w: var(--sheet-cell, 40px);
|
|
957
957
|
|
|
958
|
-
border-
|
|
958
|
+
border-inline-start: 0;
|
|
959
959
|
border-top: var(--bb-border-w) solid var(--bb-border);
|
|
960
960
|
height: 252px;
|
|
961
961
|
margin: 12px 0 0;
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
:loading="loading"
|
|
29
29
|
:name="name"
|
|
30
30
|
:passthrough="passthrough"
|
|
31
|
-
: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="
|
|
67
|
+
:readonly="fieldReadonly"
|
|
68
68
|
:variant="variant"
|
|
69
69
|
@click="onFieldTap"
|
|
70
70
|
@click:clear="onClickClear"
|
|
@@ -179,7 +179,7 @@
|
|
|
179
179
|
:off-canvas-props="offCanvasProps"
|
|
180
180
|
:pt="passthrough.forward(PICKER_PARTS, BB_DATE_PICKER_PT.states)"
|
|
181
181
|
:range="range"
|
|
182
|
-
:readonly="
|
|
182
|
+
:readonly="fieldReadonly"
|
|
183
183
|
:seconds="seconds"
|
|
184
184
|
:selectable="selectable"
|
|
185
185
|
:step="step"
|
|
@@ -198,7 +198,7 @@
|
|
|
198
198
|
<!-- eslint-disable vue/attributes-order -- the picker's activator props first, `pt:activator` LAST (PASSTHROUGH.md T17) -->
|
|
199
199
|
<button
|
|
200
200
|
class="bb-segmented-field__activator"
|
|
201
|
-
:disabled="disabled ||
|
|
201
|
+
:disabled="disabled || fieldReadonly"
|
|
202
202
|
type="button"
|
|
203
203
|
v-bind="mergeProps(activatorProps, passthrough.activator)"
|
|
204
204
|
>
|
|
@@ -290,7 +290,11 @@ import { isNotEmpty } from '@/utilities/functions/isNotEmpty';
|
|
|
290
290
|
import { normalizeDateBound } from '@/utilities/functions/normalizeDateBound';
|
|
291
291
|
import { warnRemovedAttrs } from '@/utilities/functions/warnRemovedAttrs';
|
|
292
292
|
import calendarIcon from '@/assets/svgs/calendar.svg?raw';
|
|
293
|
-
import {
|
|
293
|
+
import {
|
|
294
|
+
formatDateOf,
|
|
295
|
+
timeFieldsOf,
|
|
296
|
+
useDayjsLocale,
|
|
297
|
+
} from '../BbCalendar/useDayjsLocale';
|
|
294
298
|
import BbDatePicker from '../BbDatePicker/BbDatePicker.vue';
|
|
295
299
|
import {
|
|
296
300
|
BB_DATE_PICKER_PT,
|
|
@@ -336,6 +340,7 @@ const {
|
|
|
336
340
|
required: fieldRequired,
|
|
337
341
|
ariaRequired: fieldAriaRequired,
|
|
338
342
|
model: fieldModel,
|
|
343
|
+
readonly: fieldReadonly,
|
|
339
344
|
} = useFormBinding(declaredProps, declaredEmit, {
|
|
340
345
|
componentName: 'BbDatePickerInput',
|
|
341
346
|
identifierFallback: () => declaredProps.label,
|
|
@@ -510,6 +515,13 @@ const onFieldTap = (event: MouseEvent) => {
|
|
|
510
515
|
return;
|
|
511
516
|
openPicker();
|
|
512
517
|
};
|
|
518
|
+
/** A key that would change a segment's value (step, clear, type). */
|
|
519
|
+
const changesSegment = (event: KeyboardEvent) =>
|
|
520
|
+
event.key === 'ArrowUp' ||
|
|
521
|
+
event.key === 'ArrowDown' ||
|
|
522
|
+
event.key === 'Backspace' ||
|
|
523
|
+
event.key === 'Delete' ||
|
|
524
|
+
(event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey);
|
|
513
525
|
const onSegmentKeydown = (
|
|
514
526
|
descriptor: FieldDescriptor,
|
|
515
527
|
event: KeyboardEvent
|
|
@@ -519,6 +531,12 @@ const onSegmentKeydown = (
|
|
|
519
531
|
openPicker();
|
|
520
532
|
return;
|
|
521
533
|
}
|
|
534
|
+
// Q60.17: a read-only field (its `readonly`, or its form saving) refuses
|
|
535
|
+
// the keys that change a segment; moving between segments still works.
|
|
536
|
+
if (props.readonly && changesSegment(event)) {
|
|
537
|
+
event.preventDefault();
|
|
538
|
+
return;
|
|
539
|
+
}
|
|
522
540
|
onFieldKeydown(descriptor, event);
|
|
523
541
|
};
|
|
524
542
|
|
|
@@ -849,17 +867,29 @@ const onTimeSelect = ({ unit, value }: { unit: TimeUnit; value: string }) => {
|
|
|
849
867
|
combineFieldsToModelValue({ finalize: false });
|
|
850
868
|
};
|
|
851
869
|
|
|
852
|
-
/**
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
870
|
+
/**
|
|
871
|
+
* How the calendar button speaks a value: date, plus time with
|
|
872
|
+
* `type="datetime"`, in the locale's own long form (Intl / CLDR, see
|
|
873
|
+
* `formatDateOf`) — "7. října 2026", "2026年10月7日", "7 de octubre de 2026".
|
|
874
|
+
* A month has no day to read out, a year neither.
|
|
875
|
+
*/
|
|
876
|
+
const spokenDateOptions = computed((): Intl.DateTimeFormatOptions => {
|
|
877
|
+
if (props.type === 'year') return { year: 'numeric' };
|
|
878
|
+
if (props.type === 'month') return { year: 'numeric', month: 'long' };
|
|
879
|
+
return { year: 'numeric', month: 'long', day: 'numeric' };
|
|
861
880
|
});
|
|
862
881
|
|
|
882
|
+
const spokenValue = (value: Dayjs) => {
|
|
883
|
+
const date = formatDateOf(value, config.locale, spokenDateOptions.value);
|
|
884
|
+
if (!isDateTime.value) return date;
|
|
885
|
+
const time = formatDateOf(
|
|
886
|
+
value,
|
|
887
|
+
config.locale,
|
|
888
|
+
timeFieldsOf(!!props.ampm, !!props.seconds)
|
|
889
|
+
);
|
|
890
|
+
return `${date} ${time}`;
|
|
891
|
+
};
|
|
892
|
+
|
|
863
893
|
/**
|
|
864
894
|
* Q56.10 (owner, 2026-09-28): the trigger's name reads exactly what the field
|
|
865
895
|
* displays — the segments, time included — not `modelValue`, which under
|
|
@@ -890,16 +920,13 @@ const accessibleButtonLabel = computed(() => {
|
|
|
890
920
|
if (!start || !end) return t('datePickerInput.emptyRange').value;
|
|
891
921
|
return t(
|
|
892
922
|
'datePickerInput.changeSelectionRange',
|
|
893
|
-
start
|
|
894
|
-
end
|
|
923
|
+
spokenValue(start),
|
|
924
|
+
spokenValue(end)
|
|
895
925
|
).value;
|
|
896
926
|
}
|
|
897
927
|
const shown = displayedValue('start');
|
|
898
928
|
if (!shown) return t('datePickerInput.emptySelection').value;
|
|
899
|
-
return t(
|
|
900
|
-
'datePickerInput.changeSelection',
|
|
901
|
-
shown.format(spokenValueFormat.value)
|
|
902
|
-
).value;
|
|
929
|
+
return t('datePickerInput.changeSelection', spokenValue(shown)).value;
|
|
903
930
|
});
|
|
904
931
|
|
|
905
932
|
const isDateDisabled = (date: Dayjs) => {
|
|
@@ -1205,7 +1205,7 @@ export type { BbDialogSlots as BaseDialogSlots };
|
|
|
1205
1205
|
* the space here instead — only when there is actually a control to
|
|
1206
1206
|
* clear, so `hideClose` keeps the full width. */
|
|
1207
1207
|
&:has(~ .bb-close-button) {
|
|
1208
|
-
padding-
|
|
1208
|
+
padding-inline-end: calc(var(--close-size) + 4px);
|
|
1209
1209
|
}
|
|
1210
1210
|
}
|
|
1211
1211
|
|
|
@@ -1217,8 +1217,8 @@ export type { BbDialogSlots as BaseDialogSlots };
|
|
|
1217
1217
|
> .bb-close-button {
|
|
1218
1218
|
--size: var(--close-size);
|
|
1219
1219
|
--p: 7px;
|
|
1220
|
+
inset-inline-end: calc(var(--px) - var(--p));
|
|
1220
1221
|
position: absolute;
|
|
1221
|
-
right: calc(var(--px) - var(--p));
|
|
1222
1222
|
top: calc(var(--py) - var(--p));
|
|
1223
1223
|
}
|
|
1224
1224
|
|
|
@@ -1241,7 +1241,7 @@ export type { BbDialogSlots as BaseDialogSlots };
|
|
|
1241
1241
|
does. The × sits at the top-right, and a one-line title is short
|
|
1242
1242
|
enough that the description's first line can still run under it. */
|
|
1243
1243
|
&:has(~ .bb-close-button) {
|
|
1244
|
-
padding-
|
|
1244
|
+
padding-inline-end: calc(var(--close-size) + 4px);
|
|
1245
1245
|
}
|
|
1246
1246
|
}
|
|
1247
1247
|
}
|
|
@@ -1268,8 +1268,8 @@ export type { BbDialogSlots as BaseDialogSlots };
|
|
|
1268
1268
|
> .bb-close-button {
|
|
1269
1269
|
--size: 28px;
|
|
1270
1270
|
--p: 7px;
|
|
1271
|
+
inset-inline-end: calc(var(--px) - var(--p));
|
|
1271
1272
|
position: absolute;
|
|
1272
|
-
right: calc(var(--px) - var(--p));
|
|
1273
1273
|
top: calc(var(--py) - var(--p));
|
|
1274
1274
|
}
|
|
1275
1275
|
}
|
|
@@ -1345,6 +1345,6 @@ export type { BbDialogSlots as BaseDialogSlots };
|
|
|
1345
1345
|
|
|
1346
1346
|
body:has(.bb-dialog--visible) {
|
|
1347
1347
|
overflow: hidden;
|
|
1348
|
-
padding-
|
|
1348
|
+
padding-inline-end: var(--scrollbar-width);
|
|
1349
1349
|
}
|
|
1350
1350
|
```
|