bitboss-ui 3.0.0-beta.47 → 3.0.0-beta.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -7
- package/bin/bitboss-ui-mcp.mjs +15 -3
- package/bin/bitboss-ui.mjs +167 -14
- package/dist/ai/BbAccordion.md +1 -1
- package/dist/ai/BbAvatar.md +1 -1
- package/dist/ai/BbBreadcrumbs.md +65 -65
- package/dist/ai/BbButton.md +28 -8
- package/dist/ai/BbCheckbox.md +0 -2
- package/dist/ai/BbCheckboxGroup.md +13 -20
- package/dist/ai/BbCollapsible.md +1 -1
- package/dist/ai/BbColorPalette.md +1 -1
- package/dist/ai/BbConfirm.md +8 -0
- package/dist/ai/BbConfirmPortal.md +1 -1
- 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 +19 -7
- package/dist/ai/BbHoverCardPortal.md +1 -1
- package/dist/ai/BbNumberInput.md +88 -21
- package/dist/ai/BbPopover.md +47 -40
- package/dist/ai/BbPopoverPortal.md +1 -1
- 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 +107 -106
- package/dist/ai/BbTabsList.md +2 -2
- package/dist/ai/BbTabsPanels.md +1 -1
- package/dist/ai/BbTabsRoot.md +3 -3
- package/dist/ai/BbTooltip.md +29 -13
- package/dist/ai/BbTree.md +14 -11
- package/dist/ai/CommonPopover.md +1 -1
- package/dist/ai/changelog.json +297 -6
- package/dist/ai/components.json +50 -45
- 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 +45 -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 +143 -28
- package/dist/ai/guides/migration/v3-beta-css-classes.md +29 -27
- 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 +4 -4
- 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/BbAccordion.json +1 -1
- 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 +2 -1
- package/dist/ai/manifest/components/BbButton.tree.json +1 -1
- package/dist/ai/manifest/components/BbCheckboxGroup.json +2 -2
- package/dist/ai/manifest/components/BbCollapsible.json +1 -1
- package/dist/ai/manifest/components/BbColorPalette.json +1 -1
- package/dist/ai/manifest/components/BbConfirmPortal.json +5 -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/BbHoverCard.json +1 -1
- package/dist/ai/manifest/components/BbHoverCardPortal.json +2 -2
- 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 +2 -1
- package/dist/ai/manifest/components/BbPopoverPortal.json +2 -2
- 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/BbSelect.tree.json +2 -2
- package/dist/ai/manifest/components/BbSelectPopover.json +2 -2
- package/dist/ai/manifest/components/BbSelectPopover.tree.json +1 -1
- package/dist/ai/manifest/components/BbSwitchGroup.json +2 -2
- package/dist/ai/manifest/components/BbTabs.json +8 -7
- 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 +6 -5
- package/dist/ai/manifest/components/BbTag.tree.json +1 -1
- package/dist/ai/manifest/components/BbTooltip.json +2 -2
- package/dist/ai/manifest/components/ChipsBox.tree.json +1 -1
- package/dist/ai/manifest/components/CommonPopover.json +1 -1
- package/dist/ai/manifest/index.json +2 -2
- package/dist/ai/manifest/meta.json +5 -0
- package/dist/ai/manifest/types.advanced.json +10 -9
- package/dist/ai/manifest/types.api.json +8 -5
- package/dist/ai/manifest/types.wrapper.json +1 -0
- 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 +14 -10
- package/dist/ai/source/BbBadgeButton.md +17 -12
- 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 +84 -38
- 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/BbCollapsible.md +2 -1
- package/dist/ai/source/BbColorInput.md +10 -9
- package/dist/ai/source/BbColorPalette.md +2 -1
- package/dist/ai/source/BbConfirm.md +18 -1
- package/dist/ai/source/BbConfirmPortal.md +20 -6
- 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 +231 -158
- package/dist/ai/source/BbDropdownButton.md +19 -12
- package/dist/ai/source/BbDropdownGroup.md +127 -93
- package/dist/ai/source/BbForm.md +25 -1
- package/dist/ai/source/BbHoverCard.md +30 -3
- package/dist/ai/source/BbHoverCardPortal.md +18 -3
- 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 +185 -12
- package/dist/ai/source/BbPopoverPortal.md +30 -3
- 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 +30 -24
- package/dist/ai/source/BbTabsList.md +29 -23
- package/dist/ai/source/BbTabsPanels.md +29 -23
- package/dist/ai/source/BbTabsRoot.md +28 -22
- 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 +88 -11
- 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 +8 -1
- 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 +88 -70
- package/dist/components/BbButton/toggleRoving.d.ts +6 -0
- package/dist/components/BbButton/toggleRoving.js +45 -0
- package/dist/components/BbButton/types.d.ts +12 -4
- package/dist/components/BbButton/types.js +5 -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/BbCollapsible/types.d.ts +2 -1
- package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +69 -69
- package/dist/components/BbColorPalette/types.d.ts +2 -1
- package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +2 -5
- package/dist/components/BbConfirm/types.d.ts +15 -0
- 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 +120 -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/BbHoverCard/BbHoverCard.vue_vue_type_script_setup_true_lang.js +145 -142
- package/dist/components/BbHoverCard/BbHoverCardPortal.vue.d.ts +2 -2
- package/dist/components/BbHoverCard/types.d.ts +14 -1
- 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 -162
- package/dist/components/BbPopover/BbPopoverPortal.vue.d.ts +2 -2
- package/dist/components/BbPopover/types.d.ts +26 -1
- 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 +28 -22
- 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 +99 -86
- package/dist/components/BbTooltip/tooltipWarmup.d.ts +23 -0
- package/dist/components/BbTooltip/tooltipWarmup.js +7 -0
- package/dist/components/BbTooltip/types.d.ts +10 -3
- 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/CommonPopover/types.d.ts +2 -1
- 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/directives/directivePortal.d.ts +13 -7
- package/dist/directives/directivePortal.js +1 -4
- 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 +4 -4
- package/dist/index.js +4 -4
- package/dist/llms-full.txt +1914 -1714
- package/dist/llms-medium.txt +76 -46
- package/dist/llms.txt +7 -7
- package/dist/locale-blueprint.json +16 -13
- package/dist/styles.css +2 -2
- package/dist/types/passthrough.d.ts +1 -1
- package/dist/types/ptComponentMap.d.ts +2 -2
- 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 +17 -4
- package/scripts/lib/eslint-plugin.d.ts +9 -1
- package/scripts/lib/eslint-plugin.mjs +256 -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/portal-names.mjs +458 -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/unimported-components.mjs +5 -2
- package/scripts/lib/validate-bb-markup.mjs +123 -56
- package/dist/i18n/index.js +0 -27
|
@@ -46,7 +46,7 @@ export type { BbTabsPanelsProps, BbTabsPanelsSlots } from './types';
|
|
|
46
46
|
|
|
47
47
|
defineOptions({ inheritAttrs: false });
|
|
48
48
|
/**
|
|
49
|
-
* The tab panels — one `section` per item, keyed by the item `
|
|
49
|
+
* The tab panels — one `section` per item, keyed by the item `value`, rendered
|
|
50
50
|
* from the nearest `BbTabsRoot`/`BbTabs` context. Discovery is automatic; the
|
|
51
51
|
* only props are its `pt`. Honors the root's `eager` and
|
|
52
52
|
* `disableAnimateX`/`disableAnimateY` settings.
|
|
@@ -196,9 +196,13 @@ export type BbTabsItem<K extends string = string> = BbTabsInertiaOptions & {
|
|
|
196
196
|
*/
|
|
197
197
|
href?: string;
|
|
198
198
|
/**
|
|
199
|
-
*
|
|
199
|
+
* Identifies the tab: what `v-model` holds while it is the active one, the
|
|
200
|
+
* name of its slots (`#<value>` for its panel, `#<value>:label` for its
|
|
201
|
+
* trigger, through `slotKey`) and, with `navigation`, the URL slug.
|
|
200
202
|
*/
|
|
201
|
-
|
|
203
|
+
value: K;
|
|
204
|
+
/** Tabs have no `key` (that is `value`). Guards against the old shape. */
|
|
205
|
+
key?: never;
|
|
202
206
|
/**
|
|
203
207
|
* Label to use as the tab text.
|
|
204
208
|
*/
|
|
@@ -215,7 +219,7 @@ export type BbTabsItem<K extends string = string> = BbTabsInertiaOptions & {
|
|
|
215
219
|
* Passthrough parts of `BbTabs` (plans/passthrough/BbTabs.md). Tabs do not
|
|
216
220
|
* "open", so there is no `open` state.
|
|
217
221
|
*
|
|
218
|
-
* Per-item functions: on the instance, `item` also accepts `({ item, active, … }) => PtValue | false | null | undefined` — `item` is the tab's descriptor (the element of `items`: its `
|
|
222
|
+
* Per-item functions: on the instance, `item` also accepts `({ item, active, … }) => PtValue | false | null | undefined` — `item` is the tab's descriptor (the element of `items`: its `value`, `label`, anything else you put on it), and every state a boolean beside it, on for it (`active`, `disabled`, …) — in the `pt` object or the `:pt:item` attribute, never on a `item:<state>` key and never in the global map or a scope (they ship as JSON). Its result is merged last, after every state entry, through the same deduper; a falsy result leaves the trigger as it was. No other part takes a function. See the passthrough guide, _Per-item functions_.
|
|
219
223
|
*
|
|
220
224
|
* @part root - The tabs' outer element, around the strip and the panels.
|
|
221
225
|
* @part wrapper - The strip's outer element: the `wrapper:prepend` slot, the
|
|
@@ -365,7 +369,9 @@ export type BbTabsRootProps<K extends string = string> =
|
|
|
365
369
|
*/
|
|
366
370
|
disabled?: boolean;
|
|
367
371
|
/**
|
|
368
|
-
*
|
|
372
|
+
* Renders every tab's panel at mount and keeps it mounted, hidden while
|
|
373
|
+
* inactive, instead of only the active one. One tab alone: its item's
|
|
374
|
+
* `eager`.
|
|
369
375
|
*/
|
|
370
376
|
eager?: boolean;
|
|
371
377
|
/**
|
|
@@ -414,9 +420,9 @@ export type BbTabsRootProps<K extends string = string> =
|
|
|
414
420
|
*/
|
|
415
421
|
manualActivation?: boolean;
|
|
416
422
|
/**
|
|
417
|
-
* The
|
|
423
|
+
* The active tab's `value`. Used by v-model.
|
|
418
424
|
*/
|
|
419
|
-
modelValue?: null | BbTabsItem<K>['
|
|
425
|
+
modelValue?: null | BbTabsItem<K>['value'];
|
|
420
426
|
/**
|
|
421
427
|
* Synchronizes the current tab with the URL query parameter.
|
|
422
428
|
*
|
|
@@ -517,8 +523,8 @@ export type BbTabsRootEvents<K extends string = string> = BbTabsEvents<K>;
|
|
|
517
523
|
|
|
518
524
|
/** Props exposed by the per-tab label slots and the generic `label` fallback slot. */
|
|
519
525
|
export type BbTabsSlotProps<K extends string = string> = {
|
|
520
|
-
/** The
|
|
521
|
-
current: BbTabsItem<K>['
|
|
526
|
+
/** The `value` of the currently active tab. */
|
|
527
|
+
current: BbTabsItem<K>['value'] | null;
|
|
522
528
|
/** Zero-based index of the currently active tab. */
|
|
523
529
|
currentIndex: number;
|
|
524
530
|
/** Whether this tab is disabled. */
|
|
@@ -529,10 +535,10 @@ export type BbTabsSlotProps<K extends string = string> = {
|
|
|
529
535
|
isLast: boolean;
|
|
530
536
|
/** Whether this specific tab is currently active. */
|
|
531
537
|
selected: boolean;
|
|
532
|
-
/**
|
|
533
|
-
|
|
534
|
-
/**
|
|
535
|
-
value: BbTabsItem<K>['
|
|
538
|
+
/** This tab's `label`. */
|
|
539
|
+
label: BbTabsItem<K>['label'];
|
|
540
|
+
/** This tab's `value`. */
|
|
541
|
+
value: BbTabsItem<K>['value'];
|
|
536
542
|
/** Navigate to `'first'`, `'previous'`, `'next'`, or `'last'` tab. */
|
|
537
543
|
goTo: (target: 'first' | 'previous' | 'next' | 'last') => void;
|
|
538
544
|
};
|
|
@@ -555,7 +561,7 @@ export type BbTabsScrollSlotProps = {
|
|
|
555
561
|
/**
|
|
556
562
|
* Slots rendered by the tab list (the strip of triggers).
|
|
557
563
|
*
|
|
558
|
-
* @dynamicSlot `<
|
|
564
|
+
* @dynamicSlot `<value>:label` {BbTabsSlotProps<K>} - One tab trigger's label, by the tab's `value` through `slotKey`; beats `label`, which beats the item's `label` text.
|
|
559
565
|
*/
|
|
560
566
|
export type BbTabsListSlots<K extends string = string> = {
|
|
561
567
|
/**
|
|
@@ -567,16 +573,16 @@ export type BbTabsListSlots<K extends string = string> = {
|
|
|
567
573
|
*/
|
|
568
574
|
'wrapper:append'?: (props: BbTabsScrollSlotProps) => any;
|
|
569
575
|
/**
|
|
570
|
-
* Fallback slot used for all tab labels when no per-tab `<
|
|
576
|
+
* Fallback slot used for all tab labels when no per-tab `<value>:label` slot is provided.
|
|
571
577
|
*/
|
|
572
578
|
label?: (props: BbTabsSlotProps<K>) => any;
|
|
573
579
|
} & Record<string, ((props: BbTabsSlotProps<K>) => any) | undefined>;
|
|
574
580
|
|
|
575
581
|
/**
|
|
576
582
|
* Slots rendered by the tab panels — one per tab, keyed by the normalized
|
|
577
|
-
* `slotKey(
|
|
583
|
+
* `slotKey(value)`.
|
|
578
584
|
*
|
|
579
|
-
* @dynamicSlot `<
|
|
585
|
+
* @dynamicSlot `<value>` {BbTabsSlotProps<K>} - One tab's content panel, by the tab's `value` through `slotKey`; no fallback (an empty panel).
|
|
580
586
|
*/
|
|
581
587
|
export type BbTabsPanelsSlots<K extends string = string> = Record<
|
|
582
588
|
string,
|
|
@@ -584,16 +590,16 @@ export type BbTabsPanelsSlots<K extends string = string> = Record<
|
|
|
584
590
|
>;
|
|
585
591
|
|
|
586
592
|
/**
|
|
587
|
-
* @dynamicSlot `<
|
|
588
|
-
* @dynamicSlot `<
|
|
593
|
+
* @dynamicSlot `<value>` {BbTabsSlotProps<K>} - One tab's content panel, by the tab's `value` through `slotKey`; no fallback (an empty panel).
|
|
594
|
+
* @dynamicSlot `<value>:label` {BbTabsSlotProps<K>} - One tab trigger's label, by the tab's `value` through `slotKey`; beats `label`, which beats the item's `label` text.
|
|
589
595
|
*/
|
|
590
596
|
export type BbTabsSlots<K extends string = string> = BbTabsListSlots<K> &
|
|
591
597
|
BbTabsPanelsSlots<K>;
|
|
592
598
|
|
|
593
599
|
/** Props exposed by the `BbTabsRoot` default slot. */
|
|
594
600
|
export type BbTabsRootSlotProps<K extends string = string> = {
|
|
595
|
-
/** The
|
|
596
|
-
current: BbTabsItem<K>['
|
|
601
|
+
/** The `value` of the currently active tab. */
|
|
602
|
+
current: BbTabsItem<K>['value'] | null;
|
|
597
603
|
/** Zero-based index of the currently active tab. */
|
|
598
604
|
currentIndex: number;
|
|
599
605
|
/** Whether the active tab is the first tab. */
|
|
@@ -602,8 +608,8 @@ export type BbTabsRootSlotProps<K extends string = string> = {
|
|
|
602
608
|
isLast: boolean;
|
|
603
609
|
/** Navigate to `'first'`, `'previous'`, `'next'`, or `'last'` tab. */
|
|
604
610
|
goTo: (target: 'first' | 'previous' | 'next' | 'last') => void;
|
|
605
|
-
/** Select a tab by
|
|
606
|
-
select: (
|
|
611
|
+
/** Select a tab by its `value`. */
|
|
612
|
+
select: (value: BbTabsItem<K>['value']) => void;
|
|
607
613
|
};
|
|
608
614
|
|
|
609
615
|
export type BbTabsRootSlots<K extends string = string> = {
|
|
@@ -177,9 +177,13 @@ export type BbTabsItem<K extends string = string> = BbTabsInertiaOptions & {
|
|
|
177
177
|
*/
|
|
178
178
|
href?: string;
|
|
179
179
|
/**
|
|
180
|
-
*
|
|
180
|
+
* Identifies the tab: what `v-model` holds while it is the active one, the
|
|
181
|
+
* name of its slots (`#<value>` for its panel, `#<value>:label` for its
|
|
182
|
+
* trigger, through `slotKey`) and, with `navigation`, the URL slug.
|
|
181
183
|
*/
|
|
182
|
-
|
|
184
|
+
value: K;
|
|
185
|
+
/** Tabs have no `key` (that is `value`). Guards against the old shape. */
|
|
186
|
+
key?: never;
|
|
183
187
|
/**
|
|
184
188
|
* Label to use as the tab text.
|
|
185
189
|
*/
|
|
@@ -196,7 +200,7 @@ export type BbTabsItem<K extends string = string> = BbTabsInertiaOptions & {
|
|
|
196
200
|
* Passthrough parts of `BbTabs` (plans/passthrough/BbTabs.md). Tabs do not
|
|
197
201
|
* "open", so there is no `open` state.
|
|
198
202
|
*
|
|
199
|
-
* Per-item functions: on the instance, `item` also accepts `({ item, active, … }) => PtValue | false | null | undefined` — `item` is the tab's descriptor (the element of `items`: its `
|
|
203
|
+
* Per-item functions: on the instance, `item` also accepts `({ item, active, … }) => PtValue | false | null | undefined` — `item` is the tab's descriptor (the element of `items`: its `value`, `label`, anything else you put on it), and every state a boolean beside it, on for it (`active`, `disabled`, …) — in the `pt` object or the `:pt:item` attribute, never on a `item:<state>` key and never in the global map or a scope (they ship as JSON). Its result is merged last, after every state entry, through the same deduper; a falsy result leaves the trigger as it was. No other part takes a function. See the passthrough guide, _Per-item functions_.
|
|
200
204
|
*
|
|
201
205
|
* @part root - The tabs' outer element, around the strip and the panels.
|
|
202
206
|
* @part wrapper - The strip's outer element: the `wrapper:prepend` slot, the
|
|
@@ -346,7 +350,9 @@ export type BbTabsRootProps<K extends string = string> =
|
|
|
346
350
|
*/
|
|
347
351
|
disabled?: boolean;
|
|
348
352
|
/**
|
|
349
|
-
*
|
|
353
|
+
* Renders every tab's panel at mount and keeps it mounted, hidden while
|
|
354
|
+
* inactive, instead of only the active one. One tab alone: its item's
|
|
355
|
+
* `eager`.
|
|
350
356
|
*/
|
|
351
357
|
eager?: boolean;
|
|
352
358
|
/**
|
|
@@ -395,9 +401,9 @@ export type BbTabsRootProps<K extends string = string> =
|
|
|
395
401
|
*/
|
|
396
402
|
manualActivation?: boolean;
|
|
397
403
|
/**
|
|
398
|
-
* The
|
|
404
|
+
* The active tab's `value`. Used by v-model.
|
|
399
405
|
*/
|
|
400
|
-
modelValue?: null | BbTabsItem<K>['
|
|
406
|
+
modelValue?: null | BbTabsItem<K>['value'];
|
|
401
407
|
/**
|
|
402
408
|
* Synchronizes the current tab with the URL query parameter.
|
|
403
409
|
*
|
|
@@ -498,8 +504,8 @@ export type BbTabsRootEvents<K extends string = string> = BbTabsEvents<K>;
|
|
|
498
504
|
|
|
499
505
|
/** Props exposed by the per-tab label slots and the generic `label` fallback slot. */
|
|
500
506
|
export type BbTabsSlotProps<K extends string = string> = {
|
|
501
|
-
/** The
|
|
502
|
-
current: BbTabsItem<K>['
|
|
507
|
+
/** The `value` of the currently active tab. */
|
|
508
|
+
current: BbTabsItem<K>['value'] | null;
|
|
503
509
|
/** Zero-based index of the currently active tab. */
|
|
504
510
|
currentIndex: number;
|
|
505
511
|
/** Whether this tab is disabled. */
|
|
@@ -510,10 +516,10 @@ export type BbTabsSlotProps<K extends string = string> = {
|
|
|
510
516
|
isLast: boolean;
|
|
511
517
|
/** Whether this specific tab is currently active. */
|
|
512
518
|
selected: boolean;
|
|
513
|
-
/**
|
|
514
|
-
|
|
515
|
-
/**
|
|
516
|
-
value: BbTabsItem<K>['
|
|
519
|
+
/** This tab's `label`. */
|
|
520
|
+
label: BbTabsItem<K>['label'];
|
|
521
|
+
/** This tab's `value`. */
|
|
522
|
+
value: BbTabsItem<K>['value'];
|
|
517
523
|
/** Navigate to `'first'`, `'previous'`, `'next'`, or `'last'` tab. */
|
|
518
524
|
goTo: (target: 'first' | 'previous' | 'next' | 'last') => void;
|
|
519
525
|
};
|
|
@@ -536,7 +542,7 @@ export type BbTabsScrollSlotProps = {
|
|
|
536
542
|
/**
|
|
537
543
|
* Slots rendered by the tab list (the strip of triggers).
|
|
538
544
|
*
|
|
539
|
-
* @dynamicSlot `<
|
|
545
|
+
* @dynamicSlot `<value>:label` {BbTabsSlotProps<K>} - One tab trigger's label, by the tab's `value` through `slotKey`; beats `label`, which beats the item's `label` text.
|
|
540
546
|
*/
|
|
541
547
|
export type BbTabsListSlots<K extends string = string> = {
|
|
542
548
|
/**
|
|
@@ -548,16 +554,16 @@ export type BbTabsListSlots<K extends string = string> = {
|
|
|
548
554
|
*/
|
|
549
555
|
'wrapper:append'?: (props: BbTabsScrollSlotProps) => any;
|
|
550
556
|
/**
|
|
551
|
-
* Fallback slot used for all tab labels when no per-tab `<
|
|
557
|
+
* Fallback slot used for all tab labels when no per-tab `<value>:label` slot is provided.
|
|
552
558
|
*/
|
|
553
559
|
label?: (props: BbTabsSlotProps<K>) => any;
|
|
554
560
|
} & Record<string, ((props: BbTabsSlotProps<K>) => any) | undefined>;
|
|
555
561
|
|
|
556
562
|
/**
|
|
557
563
|
* Slots rendered by the tab panels — one per tab, keyed by the normalized
|
|
558
|
-
* `slotKey(
|
|
564
|
+
* `slotKey(value)`.
|
|
559
565
|
*
|
|
560
|
-
* @dynamicSlot `<
|
|
566
|
+
* @dynamicSlot `<value>` {BbTabsSlotProps<K>} - One tab's content panel, by the tab's `value` through `slotKey`; no fallback (an empty panel).
|
|
561
567
|
*/
|
|
562
568
|
export type BbTabsPanelsSlots<K extends string = string> = Record<
|
|
563
569
|
string,
|
|
@@ -565,16 +571,16 @@ export type BbTabsPanelsSlots<K extends string = string> = Record<
|
|
|
565
571
|
>;
|
|
566
572
|
|
|
567
573
|
/**
|
|
568
|
-
* @dynamicSlot `<
|
|
569
|
-
* @dynamicSlot `<
|
|
574
|
+
* @dynamicSlot `<value>` {BbTabsSlotProps<K>} - One tab's content panel, by the tab's `value` through `slotKey`; no fallback (an empty panel).
|
|
575
|
+
* @dynamicSlot `<value>:label` {BbTabsSlotProps<K>} - One tab trigger's label, by the tab's `value` through `slotKey`; beats `label`, which beats the item's `label` text.
|
|
570
576
|
*/
|
|
571
577
|
export type BbTabsSlots<K extends string = string> = BbTabsListSlots<K> &
|
|
572
578
|
BbTabsPanelsSlots<K>;
|
|
573
579
|
|
|
574
580
|
/** Props exposed by the `BbTabsRoot` default slot. */
|
|
575
581
|
export type BbTabsRootSlotProps<K extends string = string> = {
|
|
576
|
-
/** The
|
|
577
|
-
current: BbTabsItem<K>['
|
|
582
|
+
/** The `value` of the currently active tab. */
|
|
583
|
+
current: BbTabsItem<K>['value'] | null;
|
|
578
584
|
/** Zero-based index of the currently active tab. */
|
|
579
585
|
currentIndex: number;
|
|
580
586
|
/** Whether the active tab is the first tab. */
|
|
@@ -583,8 +589,8 @@ export type BbTabsRootSlotProps<K extends string = string> = {
|
|
|
583
589
|
isLast: boolean;
|
|
584
590
|
/** Navigate to `'first'`, `'previous'`, `'next'`, or `'last'` tab. */
|
|
585
591
|
goTo: (target: 'first' | 'previous' | 'next' | 'last') => void;
|
|
586
|
-
/** Select a tab by
|
|
587
|
-
select: (
|
|
592
|
+
/** Select a tab by its `value`. */
|
|
593
|
+
select: (value: BbTabsItem<K>['value']) => void;
|
|
588
594
|
};
|
|
589
595
|
|
|
590
596
|
export type BbTabsRootSlots<K extends string = string> = {
|
package/dist/ai/source/BbTag.md
CHANGED
|
@@ -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"
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
:loading="loading"
|
|
67
67
|
:passthrough="passthrough"
|
|
68
68
|
:prepend:icon="props['prepend:icon']"
|
|
69
|
-
:readonly="
|
|
69
|
+
:readonly="fieldReadonly"
|
|
70
70
|
:variant="variant"
|
|
71
71
|
@click="onWrapperClick"
|
|
72
72
|
@click:clear="onClear"
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
<template v-else>
|
|
89
89
|
<ChipsBox
|
|
90
90
|
ref="chipsBox"
|
|
91
|
-
:disabled="disabled ||
|
|
91
|
+
:disabled="disabled || fieldReadonly"
|
|
92
92
|
:options="selectedOptions"
|
|
93
93
|
:passthrough="passthrough"
|
|
94
94
|
size="lg"
|
|
@@ -105,14 +105,14 @@
|
|
|
105
105
|
:aria-disabled="disabled || undefined"
|
|
106
106
|
:aria-invalid="fieldHasErrors || undefined"
|
|
107
107
|
:aria-labelledby="ariaLabelledby"
|
|
108
|
-
:aria-readonly="
|
|
108
|
+
:aria-readonly="fieldReadonly || undefined"
|
|
109
109
|
:autocomplete="autocomplete"
|
|
110
110
|
:autofocus="autofocus"
|
|
111
111
|
class="bb-tag__input"
|
|
112
112
|
:disabled="disabled"
|
|
113
113
|
enterkeyhint="done"
|
|
114
114
|
:placeholder="placeholder"
|
|
115
|
-
:readonly="
|
|
115
|
+
:readonly="fieldReadonly"
|
|
116
116
|
:required="fieldRequired && !fieldModel.length"
|
|
117
117
|
:aria-required="inputAriaRequired"
|
|
118
118
|
size="1"
|
|
@@ -189,6 +189,7 @@ const {
|
|
|
189
189
|
required: fieldRequired,
|
|
190
190
|
ariaRequired: fieldAriaRequired,
|
|
191
191
|
model: fieldModel,
|
|
192
|
+
readonly: fieldReadonly,
|
|
192
193
|
} = useFormBinding(declaredProps, declaredEmit, {
|
|
193
194
|
componentName: 'BbTag',
|
|
194
195
|
identifierFallback: () => declaredProps.label,
|
|
@@ -1111,19 +1112,19 @@ export type BbTagSlots = {
|
|
|
1111
1112
|
|
|
1112
1113
|
.bb-smooth-height {
|
|
1113
1114
|
align-self: center;
|
|
1114
|
-
text-align:
|
|
1115
|
+
text-align: start;
|
|
1115
1116
|
width: 100%;
|
|
1116
1117
|
}
|
|
1117
1118
|
|
|
1118
1119
|
/* If there is no prepend icon, reduce left inset without clipping chip content. Also allow for the ring size to be displayed. */
|
|
1119
1120
|
&:not(:has(.bb-field-input__prepend-icon)) {
|
|
1120
1121
|
.bb-smooth-height:has(.bb-tag__badge) {
|
|
1121
|
-
margin-
|
|
1122
|
+
margin-inline-start: calc(
|
|
1122
1123
|
var(--bb-input-px) * var(--compensation-multiplier) * -1 -
|
|
1123
1124
|
var(--bb-ring-size)
|
|
1124
1125
|
);
|
|
1125
1126
|
.bb-tag__input-container {
|
|
1126
|
-
padding-
|
|
1127
|
+
padding-inline-start: var(--bb-ring-size);
|
|
1127
1128
|
}
|
|
1128
1129
|
}
|
|
1129
1130
|
}
|
|
@@ -1141,7 +1142,7 @@ export type BbTagSlots = {
|
|
|
1141
1142
|
width: 100%;
|
|
1142
1143
|
|
|
1143
1144
|
.bb-tag__badge:not(:last-child) {
|
|
1144
|
-
margin-
|
|
1145
|
+
margin-inline-end: 0.25rem;
|
|
1145
1146
|
}
|
|
1146
1147
|
|
|
1147
1148
|
.bb-tag__input {
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
:mobile="isMobile"
|
|
31
31
|
:name="name"
|
|
32
32
|
:passthrough="passthrough"
|
|
33
|
-
:readonly="
|
|
33
|
+
:readonly="fieldReadonly"
|
|
34
34
|
:reverse="reverse"
|
|
35
35
|
:show-asterisk="showAsterisk"
|
|
36
36
|
:show-hint="showHint"
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
:loading="loading"
|
|
62
62
|
:passthrough="passthrough"
|
|
63
63
|
:prepend:icon="declaredProps['prepend:icon']"
|
|
64
|
-
:readonly="
|
|
64
|
+
:readonly="fieldReadonly"
|
|
65
65
|
:reserve-append-space="clearable"
|
|
66
66
|
:variant="variant"
|
|
67
67
|
@click:clear="emit('update:modelValue', emptyValue())"
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
:aria-disabled="disabled || undefined"
|
|
78
78
|
:aria-invalid="fieldHasErrors || undefined"
|
|
79
79
|
:aria-labelledby="ariaLabelledby"
|
|
80
|
-
:aria-readonly="
|
|
80
|
+
:aria-readonly="fieldReadonly || undefined"
|
|
81
81
|
:autocomplete="autocomplete"
|
|
82
82
|
:autofocus="autofocus"
|
|
83
83
|
class="bb-text-input__input"
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
:inputmode="inputMode"
|
|
86
86
|
:name="name"
|
|
87
87
|
:placeholder="placeholder"
|
|
88
|
-
:readonly="
|
|
88
|
+
:readonly="fieldReadonly"
|
|
89
89
|
:required="fieldRequired"
|
|
90
90
|
:aria-required="fieldAriaRequired"
|
|
91
91
|
size="1"
|
|
@@ -161,6 +161,7 @@ const {
|
|
|
161
161
|
errors: fieldErrors,
|
|
162
162
|
required: fieldRequired,
|
|
163
163
|
ariaRequired: fieldAriaRequired,
|
|
164
|
+
readonly: fieldReadonly,
|
|
164
165
|
} = useFormBinding(declaredProps, declaredEmit, {
|
|
165
166
|
componentName: 'BbTextInput',
|
|
166
167
|
identifierFallback: () => declaredProps.label,
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
:loading="loading"
|
|
30
30
|
:name="name"
|
|
31
31
|
:passthrough="passthrough"
|
|
32
|
-
:readonly="
|
|
32
|
+
:readonly="fieldReadonly"
|
|
33
33
|
:reverse="reverse"
|
|
34
34
|
:show-asterisk="showAsterisk"
|
|
35
35
|
:show-hint="showHint"
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
:loading="loading"
|
|
65
65
|
:passthrough="passthrough"
|
|
66
66
|
:prepend:icon="declaredProps['prepend:icon']"
|
|
67
|
-
:readonly="
|
|
67
|
+
:readonly="fieldReadonly"
|
|
68
68
|
:reserve-append-space="clearable"
|
|
69
69
|
:variant="variant"
|
|
70
70
|
@click:clear="emit('update:modelValue', emptyValue())"
|
|
@@ -81,14 +81,14 @@
|
|
|
81
81
|
:aria-disabled="disabled || undefined"
|
|
82
82
|
:aria-invalid="fieldHasErrors || undefined"
|
|
83
83
|
:aria-labelledby="ariaLabelledby"
|
|
84
|
-
:aria-readonly="
|
|
84
|
+
:aria-readonly="fieldReadonly || undefined"
|
|
85
85
|
:autocomplete="autocomplete"
|
|
86
86
|
:autofocus="autofocus"
|
|
87
87
|
class="bb-textarea__input scrollbar-border"
|
|
88
88
|
:disabled="disabled"
|
|
89
89
|
:name="name"
|
|
90
90
|
:placeholder="placeholder"
|
|
91
|
-
:readonly="
|
|
91
|
+
:readonly="fieldReadonly"
|
|
92
92
|
:required="fieldRequired"
|
|
93
93
|
:aria-required="fieldAriaRequired"
|
|
94
94
|
:rows="renderedRows"
|
|
@@ -161,6 +161,7 @@ const {
|
|
|
161
161
|
errors: fieldErrors,
|
|
162
162
|
required: fieldRequired,
|
|
163
163
|
ariaRequired: fieldAriaRequired,
|
|
164
|
+
readonly: fieldReadonly,
|
|
164
165
|
} = useFormBinding(declaredProps, declaredEmit, {
|
|
165
166
|
componentName: 'BbTextarea',
|
|
166
167
|
identifierFallback: () => declaredProps.label,
|
|
@@ -824,7 +825,7 @@ export type BbTextareaSlots = {
|
|
|
824
825
|
.bb-smooth-height {
|
|
825
826
|
align-self: center;
|
|
826
827
|
flex: 1 1 auto;
|
|
827
|
-
text-align:
|
|
828
|
+
text-align: start;
|
|
828
829
|
}
|
|
829
830
|
|
|
830
831
|
.bb-field-input__box {
|
|
@@ -844,7 +844,7 @@ export type BbTimePickerSlots = {
|
|
|
844
844
|
rail sizing (and the mobile-sheet centring/touch scale) is shared with the
|
|
845
845
|
time input's panel in CommonTimeSelector/index.css. */
|
|
846
846
|
.bb-time-selector {
|
|
847
|
-
margin-
|
|
847
|
+
margin-inline-start: 0;
|
|
848
848
|
}
|
|
849
849
|
}
|
|
850
850
|
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
:loading="loading"
|
|
29
29
|
:name="name"
|
|
30
30
|
:passthrough="passthrough"
|
|
31
|
-
:readonly="
|
|
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"
|
|
@@ -169,7 +169,7 @@
|
|
|
169
169
|
:class="{
|
|
170
170
|
'bb-segmented-field__activator--active': shown,
|
|
171
171
|
}"
|
|
172
|
-
:disabled="disabled ||
|
|
172
|
+
:disabled="disabled || fieldReadonly"
|
|
173
173
|
type="button"
|
|
174
174
|
@click.stop="open"
|
|
175
175
|
v-bind="passthrough.activator"
|
|
@@ -203,7 +203,7 @@
|
|
|
203
203
|
<DefinePanel>
|
|
204
204
|
<CommonTimeSelector
|
|
205
205
|
:ampm="ampm"
|
|
206
|
-
:disabled="disabled ||
|
|
206
|
+
:disabled="disabled || fieldReadonly"
|
|
207
207
|
:hour="panelHour"
|
|
208
208
|
:max="max"
|
|
209
209
|
:meridiem="fields[timeTargetSegment].meridiem"
|
|
@@ -309,6 +309,7 @@ import CommonPopover from '../CommonPopover/CommonPopover.vue';
|
|
|
309
309
|
import CommonTimeSelector from '../CommonTimeSelector/CommonTimeSelector.vue';
|
|
310
310
|
import type { TimeUnit } from '../CommonTimeSelector/types';
|
|
311
311
|
import { useMeridiem } from '../CommonTimeSelector/useMeridiem';
|
|
312
|
+
import { formatDateOf, timeFieldsOf } from '../BbCalendar/useDayjsLocale';
|
|
312
313
|
import {
|
|
313
314
|
BB_TIME_PICKER_INPUT_PT,
|
|
314
315
|
type BbTimePickerInputEvents,
|
|
@@ -339,6 +340,7 @@ const {
|
|
|
339
340
|
required: fieldRequired,
|
|
340
341
|
ariaRequired: fieldAriaRequired,
|
|
341
342
|
model: fieldModel,
|
|
343
|
+
readonly: fieldReadonly,
|
|
342
344
|
} = useFormBinding(declaredProps, declaredEmit, {
|
|
343
345
|
componentName: 'BbTimePickerInput',
|
|
344
346
|
identifierFallback: () => declaredProps.label,
|
|
@@ -1028,6 +1030,13 @@ const onFieldTap = (event: MouseEvent) => {
|
|
|
1028
1030
|
return;
|
|
1029
1031
|
open();
|
|
1030
1032
|
};
|
|
1033
|
+
/** A key that would change a segment's value (step, clear, type). */
|
|
1034
|
+
const changesSegment = (event: KeyboardEvent) =>
|
|
1035
|
+
event.key === 'ArrowUp' ||
|
|
1036
|
+
event.key === 'ArrowDown' ||
|
|
1037
|
+
event.key === 'Backspace' ||
|
|
1038
|
+
event.key === 'Delete' ||
|
|
1039
|
+
(event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey);
|
|
1031
1040
|
const onSegmentKeydown = (
|
|
1032
1041
|
descriptor: FieldDescriptor,
|
|
1033
1042
|
event: KeyboardEvent
|
|
@@ -1037,6 +1046,12 @@ const onSegmentKeydown = (
|
|
|
1037
1046
|
if (!shown.value) open();
|
|
1038
1047
|
return;
|
|
1039
1048
|
}
|
|
1049
|
+
// Q60.17: a read-only field (its `readonly`, or its form saving) refuses
|
|
1050
|
+
// the keys that change a segment; moving between segments still works.
|
|
1051
|
+
if (props.readonly && changesSegment(event)) {
|
|
1052
|
+
event.preventDefault();
|
|
1053
|
+
return;
|
|
1054
|
+
}
|
|
1040
1055
|
onFieldKeydown(descriptor, event);
|
|
1041
1056
|
};
|
|
1042
1057
|
|
|
@@ -1098,15 +1113,37 @@ const onTimeSelect = ({ unit, value }: { unit: TimeUnit; value: string }) => {
|
|
|
1098
1113
|
|
|
1099
1114
|
// ── Accessible button label ─────────────────────────────────────────────────
|
|
1100
1115
|
|
|
1116
|
+
/**
|
|
1117
|
+
* A `HH:mm(:ss)` model value as the locale says a time (Intl, CLDR): 12-hour
|
|
1118
|
+
* with the locale's day period when the field shows `ampm` ("3:05 PM",
|
|
1119
|
+
* "午後3:05"), else 24-hour ("15:05", fi "15.05"). A value that doesn't parse
|
|
1120
|
+
* is read as written.
|
|
1121
|
+
*/
|
|
1122
|
+
const spokenTime = (value: string) => {
|
|
1123
|
+
const match = /^(\d{1,2}):(\d{1,2})(?::(\d{1,2}))?$/.exec(value);
|
|
1124
|
+
if (!match) return value;
|
|
1125
|
+
const [, h, m, s] = match;
|
|
1126
|
+
return formatDateOf(
|
|
1127
|
+
new Date(2000, 0, 1, +h, +m, +(s ?? 0)),
|
|
1128
|
+
config.locale,
|
|
1129
|
+
timeFieldsOf(!!props.ampm, !!props.seconds)
|
|
1130
|
+
);
|
|
1131
|
+
};
|
|
1132
|
+
|
|
1101
1133
|
const accessibleButtonLabel = computed(() => {
|
|
1102
1134
|
if (props.range) {
|
|
1103
1135
|
const values = Array.isArray(props.modelValue) ? props.modelValue : [];
|
|
1104
1136
|
const [start, end] = values;
|
|
1105
1137
|
if (!start || !end) return t('timePickerInput.emptyRange').value;
|
|
1106
|
-
return t(
|
|
1138
|
+
return t(
|
|
1139
|
+
'timePickerInput.changeSelectionRange',
|
|
1140
|
+
spokenTime(start),
|
|
1141
|
+
spokenTime(end)
|
|
1142
|
+
).value;
|
|
1107
1143
|
}
|
|
1108
1144
|
if (typeof props.modelValue === 'string' && props.modelValue) {
|
|
1109
|
-
return t('timePickerInput.changeSelection', props.modelValue)
|
|
1145
|
+
return t('timePickerInput.changeSelection', spokenTime(props.modelValue))
|
|
1146
|
+
.value;
|
|
1110
1147
|
}
|
|
1111
1148
|
return t('timePickerInput.emptySelection').value;
|
|
1112
1149
|
});
|
|
@@ -1563,9 +1600,9 @@ export type BbTimePickerInputSlots = {
|
|
|
1563
1600
|
.bb-time-picker-input__panel {
|
|
1564
1601
|
/* The panel hosts only the time columns — no calendar to align with. */
|
|
1565
1602
|
.bb-time-selector {
|
|
1566
|
-
border-
|
|
1567
|
-
margin-
|
|
1568
|
-
padding-
|
|
1603
|
+
border-inline-start: 0;
|
|
1604
|
+
margin-inline-start: 0;
|
|
1605
|
+
padding-inline-start: 0;
|
|
1569
1606
|
}
|
|
1570
1607
|
}
|
|
1571
1608
|
|
|
@@ -383,14 +383,17 @@ export type BbToastProps = {
|
|
|
383
383
|
}
|
|
384
384
|
.bb-toast--top-left,
|
|
385
385
|
.bb-toast--bottom-left {
|
|
386
|
+
/* stylelint-disable-next-line property-disallowed-list -- geometry: the `position` prop names a physical corner */
|
|
386
387
|
left: calc(var(--offset) + var(--safe-h, 0px));
|
|
387
388
|
}
|
|
388
389
|
.bb-toast--top-right,
|
|
389
390
|
.bb-toast--bottom-right {
|
|
391
|
+
/* stylelint-disable-next-line property-disallowed-list -- geometry: the `position` prop names a physical corner */
|
|
390
392
|
right: calc(var(--offset) + var(--safe-h, 0px));
|
|
391
393
|
}
|
|
392
394
|
.bb-toast--top-center,
|
|
393
395
|
.bb-toast--bottom-center {
|
|
396
|
+
/* stylelint-disable-next-line property-disallowed-list -- geometry: centred with a physical translate */
|
|
394
397
|
left: 50%;
|
|
395
398
|
transform: translateX(-50%);
|
|
396
399
|
}
|
|
@@ -440,11 +443,11 @@ export type BbToastProps = {
|
|
|
440
443
|
box-sizing: border-box;
|
|
441
444
|
color: var(--fg);
|
|
442
445
|
height: var(--toast-height);
|
|
443
|
-
|
|
446
|
+
inset-inline-end: 0;
|
|
447
|
+
inset-inline-start: 0;
|
|
444
448
|
overflow: hidden;
|
|
445
449
|
pointer-events: auto;
|
|
446
450
|
position: absolute;
|
|
447
|
-
right: 0;
|
|
448
451
|
touch-action: none;
|
|
449
452
|
|
|
450
453
|
transform: translate3d(
|
|
@@ -587,7 +590,7 @@ export type BbToastProps = {
|
|
|
587
590
|
/* Portal content fills the row (no icon column) and leaves room for the close
|
|
588
591
|
* button when one is shown. */
|
|
589
592
|
.bb-toast__content--portal {
|
|
590
|
-
padding-
|
|
593
|
+
padding-inline-end: 4px;
|
|
591
594
|
}
|
|
592
595
|
|
|
593
596
|
.bb-toast__close {
|
|
@@ -599,11 +602,11 @@ export type BbToastProps = {
|
|
|
599
602
|
cursor: pointer;
|
|
600
603
|
display: flex;
|
|
601
604
|
height: 22px;
|
|
605
|
+
inset-inline-end: 8px;
|
|
602
606
|
justify-content: center;
|
|
603
607
|
opacity: 0;
|
|
604
608
|
padding: 0;
|
|
605
609
|
position: absolute;
|
|
606
|
-
right: 8px;
|
|
607
610
|
top: 8px;
|
|
608
611
|
transition:
|
|
609
612
|
opacity 0.15s var(--bb-ease),
|
|
@@ -657,8 +660,8 @@ export type BbToastProps = {
|
|
|
657
660
|
@media (max-width: 600px) {
|
|
658
661
|
.bb-toast {
|
|
659
662
|
--offset: 14px;
|
|
660
|
-
|
|
661
|
-
|
|
663
|
+
inset-inline-end: var(--offset);
|
|
664
|
+
inset-inline-start: var(--offset);
|
|
662
665
|
width: auto;
|
|
663
666
|
}
|
|
664
667
|
.bb-toast--top-center,
|
|
@@ -696,8 +699,8 @@ export type BbToastProps = {
|
|
|
696
699
|
--hit: 44px;
|
|
697
700
|
content: '';
|
|
698
701
|
height: calc(var(--hit) - 2px);
|
|
702
|
+
inset-inline-end: -8px; /* the button's inset from the card corner */
|
|
699
703
|
position: absolute;
|
|
700
|
-
right: -8px; /* the button's inset from the card corner */
|
|
701
704
|
top: -8px;
|
|
702
705
|
width: var(--hit);
|
|
703
706
|
}
|