bitboss-ui 3.0.0-beta.5 → 3.0.0-beta.51
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 +467 -99
- package/bin/bitboss-ui-mcp.mjs +2685 -124
- package/bin/bitboss-ui.mjs +1054 -80
- package/dist/ai/BbAccordion.md +202 -58
- package/dist/ai/BbAlert.md +150 -32
- package/dist/ai/BbAsterisk.md +67 -4
- package/dist/ai/BbAvatar.md +202 -56
- package/dist/ai/BbBadge.md +256 -50
- package/dist/ai/BbBadgeButton.md +77 -21
- package/dist/ai/BbBaseButton.md +137 -51
- package/dist/ai/BbBaseCheckboxIcon.md +166 -39
- package/dist/ai/BbBaseRadioIcon.md +164 -40
- package/dist/ai/BbBaseSwitchIcon.md +171 -41
- package/dist/ai/BbBreadcrumbs.md +280 -104
- package/dist/ai/BbButton.md +448 -111
- package/dist/ai/BbCalendar.md +688 -0
- package/dist/ai/BbCheckbox.md +258 -82
- package/dist/ai/BbCheckboxGroup.md +597 -83
- package/dist/ai/BbCollapsible.md +161 -40
- package/dist/ai/BbColorInput.md +331 -83
- package/dist/ai/BbColorPalette.md +273 -67
- package/dist/ai/BbConfirm.md +228 -51
- package/dist/ai/BbConfirmPortal.md +2 -2
- package/dist/ai/BbDatePicker.md +275 -40
- package/dist/ai/BbDatePickerInput.md +364 -112
- package/dist/ai/BbDialog.md +512 -108
- package/dist/ai/BbDropdown.md +1339 -206
- package/dist/ai/BbDropdownButton.md +290 -107
- package/dist/ai/BbDropdownGroup.md +6 -6
- package/dist/ai/BbDropzone.md +380 -72
- package/dist/ai/BbForm.md +1496 -46
- package/dist/ai/BbHoverCard.md +527 -0
- package/dist/ai/BbHoverCardPortal.md +29 -0
- package/dist/ai/BbIcon.md +125 -40
- package/dist/ai/BbIndicator.md +79 -12
- package/dist/ai/BbNumberInput.md +352 -101
- package/dist/ai/BbOffCanvas.md +403 -96
- package/dist/ai/BbPagination.md +204 -34
- package/dist/ai/BbPopover.md +360 -64
- package/dist/ai/BbPopoverPortal.md +29 -0
- package/dist/ai/BbProgress.md +182 -90
- package/dist/ai/BbPtScope.md +136 -0
- package/dist/ai/BbRadio.md +242 -43
- package/dist/ai/BbRadioGroup.md +558 -111
- package/dist/ai/BbRating.md +256 -62
- package/dist/ai/BbSelect.md +1123 -290
- package/dist/ai/BbSelectPopover.md +677 -192
- package/dist/ai/BbSlider.md +285 -80
- package/dist/ai/BbSmoothHeight.md +144 -37
- package/dist/ai/BbSpinner.md +179 -81
- package/dist/ai/BbSwitch.md +276 -63
- package/dist/ai/BbSwitchGroup.md +421 -87
- package/dist/ai/BbTable.md +2207 -357
- package/dist/ai/BbTabs.md +992 -231
- package/dist/ai/BbTabsList.md +81 -7
- package/dist/ai/BbTabsPanels.md +77 -0
- package/dist/ai/BbTabsRoot.md +18 -16
- package/dist/ai/BbTag.md +272 -81
- package/dist/ai/BbTextInput.md +539 -107
- package/dist/ai/BbTextarea.md +415 -139
- package/dist/ai/BbTimePicker.md +170 -27
- package/dist/ai/BbTimePickerInput.md +292 -50
- package/dist/ai/BbToast.md +287 -40
- package/dist/ai/BbToastPortal.md +3 -3
- package/dist/ai/BbTooltip.md +231 -46
- package/dist/ai/BbTree.md +272 -94
- package/dist/ai/ChipsBox.md +46 -2
- package/dist/ai/ClearableButton.md +12 -0
- package/dist/ai/CommaBox.md +2 -1
- package/dist/ai/CommonField.md +75 -0
- package/dist/ai/CommonFieldInput.md +91 -0
- package/dist/ai/CommonPopover.md +17 -12
- package/dist/ai/CommonTimeSelector.md +63 -0
- package/dist/ai/ErrorIcon.md +20 -0
- package/dist/ai/FlatListBox.md +42 -11
- package/dist/ai/GroupedListBox.md +43 -12
- package/dist/ai/ListBox.md +47 -11
- package/dist/ai/OptionsContainer.md +17 -10
- package/dist/ai/WarningIcon.md +20 -0
- package/dist/ai/changelog.json +5763 -141
- package/dist/ai/components.json +477 -16271
- package/dist/ai/composables/useBbConfig.md +72 -11
- package/dist/ai/composables/useBbDropdownContext.md +168 -0
- package/dist/ai/composables/useBbFormContext.md +51 -24
- package/dist/ai/composables/useBbFormField.md +183 -0
- package/dist/ai/composables/useBbTableContext.md +41 -19
- package/dist/ai/composables/useBbTabsContext.md +14 -14
- package/dist/ai/composables/useConfirm.md +16 -8
- package/dist/ai/composables/useCountdown.md +1 -1
- package/dist/ai/composables/useId.md +10 -10
- package/dist/ai/composables/useMobile.md +17 -10
- package/dist/ai/composables/useToast.md +25 -19
- package/dist/ai/design-tokens.json +967 -0
- package/dist/ai/design-tokens.manifest.yaml +175 -0
- package/dist/ai/guides/agent-contract.md +185 -23
- package/dist/ai/guides/ai-router.md +87 -43
- package/dist/ai/guides/app-layout.md +8 -4
- package/dist/ai/guides/coherence-playbook.md +25 -21
- package/dist/ai/guides/component-picker.md +61 -46
- package/dist/ai/guides/design-language.md +282 -99
- package/dist/ai/guides/design-tokens.md +600 -117
- package/dist/ai/guides/fetch-items-playbook.md +127 -81
- package/dist/ai/guides/icons-policy.md +75 -45
- package/dist/ai/guides/inertia-helpers.md +201 -82
- package/dist/ai/guides/inline-edit-playbook.md +13 -6
- package/dist/ai/guides/installation-and-plugin-setup.md +941 -88
- package/dist/ai/guides/migration/components/bb-accordion.md +37 -0
- package/dist/ai/guides/migration/components/bb-alert.md +2 -2
- package/dist/ai/guides/migration/components/bb-avatar.md +13 -14
- package/dist/ai/guides/migration/components/bb-badge.md +5 -5
- package/dist/ai/guides/migration/components/bb-breadcrumbs.md +13 -10
- package/dist/ai/guides/migration/components/bb-button.md +80 -20
- package/dist/ai/guides/migration/components/bb-checkbox-group.md +116 -29
- package/dist/ai/guides/migration/components/bb-checkbox.md +53 -10
- package/dist/ai/guides/migration/components/bb-chip.md +6 -6
- package/dist/ai/guides/migration/components/bb-collapsible.md +5 -5
- package/dist/ai/guides/migration/components/bb-color-input.md +5 -5
- package/dist/ai/guides/migration/components/bb-color-palette.md +16 -9
- package/dist/ai/guides/migration/components/bb-date-picker-input.md +51 -38
- package/dist/ai/guides/migration/components/bb-dialog.md +69 -36
- package/dist/ai/guides/migration/components/bb-dropdown-button.md +15 -8
- package/dist/ai/guides/migration/components/bb-dropdown.md +33 -9
- package/dist/ai/guides/migration/components/bb-dropzone.md +8 -0
- package/dist/ai/guides/migration/components/bb-icon.md +7 -7
- package/dist/ai/guides/migration/components/bb-intersection.md +1 -1
- package/dist/ai/guides/migration/components/bb-offcanvas.md +29 -31
- package/dist/ai/guides/migration/components/bb-pagination.md +10 -0
- package/dist/ai/guides/migration/components/bb-popover.md +19 -11
- package/dist/ai/guides/migration/components/bb-radio-group.md +15 -0
- package/dist/ai/guides/migration/components/bb-rating.md +61 -24
- package/dist/ai/guides/migration/components/bb-select-popover.md +20 -2
- package/dist/ai/guides/migration/components/bb-select.md +39 -8
- package/dist/ai/guides/migration/components/bb-slider.md +19 -6
- package/dist/ai/guides/migration/components/bb-switch-group.md +15 -0
- package/dist/ai/guides/migration/components/bb-table.md +586 -33
- package/dist/ai/guides/migration/components/bb-tabs.md +94 -43
- package/dist/ai/guides/migration/components/bb-tag.md +9 -7
- package/dist/ai/guides/migration/components/bb-text-input.md +12 -12
- package/dist/ai/guides/migration/components/bb-toast.md +2 -2
- package/dist/ai/guides/migration/components/bb-tooltip.md +19 -1
- package/dist/ai/guides/migration/components/bb-tree.md +11 -9
- package/dist/ai/guides/migration/components/use-confirm.md +9 -1
- package/dist/ai/guides/migration/from-async-validator.md +1252 -0
- package/dist/ai/guides/migration/v2-to-v3.md +1217 -277
- package/dist/ai/guides/migration/v3-beta-css-classes.md +753 -0
- package/dist/ai/guides/migration/v3-beta-tooling.md +213 -0
- package/dist/ai/guides/options-items-playbook.md +177 -22
- package/dist/ai/guides/page-shell.md +13 -7
- package/dist/ai/guides/passthrough.md +968 -0
- package/dist/ai/guides/preset-components.md +387 -0
- package/dist/ai/guides/ssr-prefill.md +150 -0
- package/dist/ai/guides/typescript-generic-components.md +87 -0
- package/dist/ai/guides/validated-forms.md +531 -53
- package/dist/ai/guides/validation-libraries.md +179 -0
- package/dist/ai/guides/validation-providers.md +127 -0
- 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 +62 -57
- package/dist/ai/manifest/components/BbAccordion.json +42 -0
- package/dist/ai/manifest/components/BbAccordion.tree.json +26 -0
- package/dist/ai/manifest/components/BbAlert.json +52 -0
- package/dist/ai/manifest/components/BbAlert.removed.json +7 -0
- package/dist/ai/manifest/components/BbAlert.tree.json +80 -0
- package/dist/ai/manifest/components/BbAsterisk.json +26 -0
- package/dist/ai/manifest/components/BbAsterisk.tree.json +13 -0
- package/dist/ai/manifest/components/BbAvatar.json +35 -0
- package/dist/ai/manifest/components/BbAvatar.removed.json +6 -0
- package/dist/ai/manifest/components/BbAvatar.tree.json +39 -0
- package/dist/ai/manifest/components/BbBadge.json +47 -0
- package/dist/ai/manifest/components/BbBadge.removed.json +6 -0
- package/dist/ai/manifest/components/BbBadge.tree.json +86 -0
- package/dist/ai/manifest/components/BbBadgeButton.json +67 -0
- package/dist/ai/manifest/components/BbBadgeButton.tree.json +32 -0
- package/dist/ai/manifest/components/BbBaseButton.json +69 -0
- package/dist/ai/manifest/components/BbBaseButton.tree.json +25 -0
- package/dist/ai/manifest/components/BbBaseCheckboxIcon.json +43 -0
- package/dist/ai/manifest/components/BbBaseCheckboxIcon.removed.json +6 -0
- package/dist/ai/manifest/components/BbBaseCheckboxIcon.tree.json +41 -0
- package/dist/ai/manifest/components/BbBaseRadioIcon.json +41 -0
- package/dist/ai/manifest/components/BbBaseRadioIcon.removed.json +6 -0
- package/dist/ai/manifest/components/BbBaseRadioIcon.tree.json +36 -0
- package/dist/ai/manifest/components/BbBaseSwitchIcon.json +43 -0
- package/dist/ai/manifest/components/BbBaseSwitchIcon.removed.json +6 -0
- package/dist/ai/manifest/components/BbBaseSwitchIcon.tree.json +44 -0
- package/dist/ai/manifest/components/BbBreadcrumbs.json +52 -0
- package/dist/ai/manifest/components/BbBreadcrumbs.removed.json +7 -0
- package/dist/ai/manifest/components/BbBreadcrumbs.tree.json +45 -0
- package/dist/ai/manifest/components/BbButton.json +95 -0
- package/dist/ai/manifest/components/BbButton.removed.json +10 -0
- package/dist/ai/manifest/components/BbButton.tree.json +206 -0
- package/dist/ai/manifest/components/BbCalendar.json +81 -0
- package/dist/ai/manifest/components/BbCalendar.removed.json +8 -0
- package/dist/ai/manifest/components/BbCalendar.tree.json +99 -0
- package/dist/ai/manifest/components/BbCheckbox.json +92 -0
- package/dist/ai/manifest/components/BbCheckbox.removed.json +10 -0
- package/dist/ai/manifest/components/BbCheckbox.tree.json +22 -0
- package/dist/ai/manifest/components/BbCheckboxGroup.json +122 -0
- package/dist/ai/manifest/components/BbCheckboxGroup.removed.json +14 -0
- package/dist/ai/manifest/components/BbCheckboxGroup.tree.json +61 -0
- package/dist/ai/manifest/components/BbCollapsible.json +32 -0
- package/dist/ai/manifest/components/BbCollapsible.tree.json +17 -0
- package/dist/ai/manifest/components/BbColorInput.json +124 -0
- package/dist/ai/manifest/components/BbColorInput.removed.json +12 -0
- package/dist/ai/manifest/components/BbColorInput.tree.json +37 -0
- package/dist/ai/manifest/components/BbColorPalette.json +63 -0
- package/dist/ai/manifest/components/BbColorPalette.removed.json +13 -0
- package/dist/ai/manifest/components/BbColorPalette.tree.json +55 -0
- package/dist/ai/manifest/components/BbConfirm.json +34 -0
- package/dist/ai/manifest/components/BbConfirm.tree.json +30 -0
- package/dist/ai/manifest/components/BbConfirmPortal.json +21 -0
- package/dist/ai/manifest/components/BbDatePicker.json +102 -0
- package/dist/ai/manifest/components/BbDatePicker.removed.json +9 -0
- package/dist/ai/manifest/components/BbDatePicker.tree.json +54 -0
- package/dist/ai/manifest/components/BbDatePickerInput.json +152 -0
- package/dist/ai/manifest/components/BbDatePickerInput.removed.json +18 -0
- package/dist/ai/manifest/components/BbDatePickerInput.tree.json +50 -0
- package/dist/ai/manifest/components/BbDialog.json +69 -0
- package/dist/ai/manifest/components/BbDialog.removed.json +10 -0
- package/dist/ai/manifest/components/BbDialog.tree.json +74 -0
- package/dist/ai/manifest/components/BbDropdown.json +93 -0
- package/dist/ai/manifest/components/BbDropdown.removed.json +12 -0
- package/dist/ai/manifest/components/BbDropdown.tree.json +122 -0
- package/dist/ai/manifest/components/BbDropdownButton.json +97 -0
- package/dist/ai/manifest/components/BbDropdownButton.removed.json +13 -0
- package/dist/ai/manifest/components/BbDropdownButton.tree.json +28 -0
- package/dist/ai/manifest/components/BbDropdownGroup.json +25 -0
- package/dist/ai/manifest/components/BbDropzone.json +63 -0
- package/dist/ai/manifest/components/BbDropzone.removed.json +8 -0
- package/dist/ai/manifest/components/BbDropzone.tree.json +36 -0
- package/dist/ai/manifest/components/BbForm.json +39 -0
- package/dist/ai/manifest/components/BbForm.removed.json +6 -0
- package/dist/ai/manifest/components/BbHoverCard.json +63 -0
- package/dist/ai/manifest/components/BbHoverCard.tree.json +31 -0
- package/dist/ai/manifest/components/BbHoverCardPortal.json +21 -0
- package/dist/ai/manifest/components/BbIcon.json +29 -0
- package/dist/ai/manifest/components/BbIcon.removed.json +7 -0
- package/dist/ai/manifest/components/BbIcon.tree.json +19 -0
- package/dist/ai/manifest/components/BbIndicator.json +39 -0
- package/dist/ai/manifest/components/BbIndicator.tree.json +67 -0
- package/dist/ai/manifest/components/BbNumberInput.json +120 -0
- package/dist/ai/manifest/components/BbNumberInput.removed.json +11 -0
- package/dist/ai/manifest/components/BbNumberInput.tree.json +28 -0
- package/dist/ai/manifest/components/BbOffCanvas.json +67 -0
- package/dist/ai/manifest/components/BbOffCanvas.removed.json +8 -0
- package/dist/ai/manifest/components/BbOffCanvas.tree.json +115 -0
- package/dist/ai/manifest/components/BbPagination.json +55 -0
- package/dist/ai/manifest/components/BbPagination.removed.json +9 -0
- package/dist/ai/manifest/components/BbPagination.tree.json +69 -0
- package/dist/ai/manifest/components/BbPopover.json +69 -0
- package/dist/ai/manifest/components/BbPopover.removed.json +16 -0
- package/dist/ai/manifest/components/BbPopover.tree.json +36 -0
- package/dist/ai/manifest/components/BbPopoverPortal.json +21 -0
- package/dist/ai/manifest/components/BbProgress.json +31 -0
- package/dist/ai/manifest/components/BbProgress.tree.json +26 -0
- package/dist/ai/manifest/components/BbPtScope.json +21 -0
- package/dist/ai/manifest/components/BbRadio.json +83 -0
- package/dist/ai/manifest/components/BbRadio.removed.json +8 -0
- package/dist/ai/manifest/components/BbRadio.tree.json +22 -0
- package/dist/ai/manifest/components/BbRadioGroup.json +121 -0
- package/dist/ai/manifest/components/BbRadioGroup.removed.json +14 -0
- package/dist/ai/manifest/components/BbRadioGroup.tree.json +61 -0
- package/dist/ai/manifest/components/BbRating.json +93 -0
- package/dist/ai/manifest/components/BbRating.removed.json +10 -0
- package/dist/ai/manifest/components/BbRating.tree.json +55 -0
- package/dist/ai/manifest/components/BbSelect.json +161 -0
- package/dist/ai/manifest/components/BbSelect.removed.json +16 -0
- package/dist/ai/manifest/components/BbSelect.tree.json +53 -0
- package/dist/ai/manifest/components/BbSelectPopover.json +114 -0
- package/dist/ai/manifest/components/BbSelectPopover.removed.json +13 -0
- package/dist/ai/manifest/components/BbSelectPopover.tree.json +112 -0
- package/dist/ai/manifest/components/BbSlider.json +100 -0
- package/dist/ai/manifest/components/BbSlider.removed.json +12 -0
- package/dist/ai/manifest/components/BbSlider.tree.json +89 -0
- package/dist/ai/manifest/components/BbSmoothHeight.json +31 -0
- package/dist/ai/manifest/components/BbSmoothHeight.tree.json +16 -0
- package/dist/ai/manifest/components/BbSpinner.json +28 -0
- package/dist/ai/manifest/components/BbSpinner.removed.json +6 -0
- package/dist/ai/manifest/components/BbSpinner.tree.json +31 -0
- package/dist/ai/manifest/components/BbSwitch.json +92 -0
- package/dist/ai/manifest/components/BbSwitch.removed.json +10 -0
- package/dist/ai/manifest/components/BbSwitch.tree.json +22 -0
- package/dist/ai/manifest/components/BbSwitchGroup.json +122 -0
- package/dist/ai/manifest/components/BbSwitchGroup.removed.json +14 -0
- package/dist/ai/manifest/components/BbSwitchGroup.tree.json +61 -0
- package/dist/ai/manifest/components/BbTable.json +153 -0
- package/dist/ai/manifest/components/BbTable.removed.json +16 -0
- package/dist/ai/manifest/components/BbTable.tree.json +231 -0
- package/dist/ai/manifest/components/BbTabs.json +77 -0
- package/dist/ai/manifest/components/BbTabs.removed.json +12 -0
- package/dist/ai/manifest/components/BbTabs.tree.json +88 -0
- package/dist/ai/manifest/components/BbTabsList.json +43 -0
- package/dist/ai/manifest/components/BbTabsList.removed.json +8 -0
- package/dist/ai/manifest/components/BbTabsList.tree.json +94 -0
- package/dist/ai/manifest/components/BbTabsPanels.json +32 -0
- package/dist/ai/manifest/components/BbTabsPanels.tree.json +69 -0
- package/dist/ai/manifest/components/BbTabsRoot.json +53 -0
- package/dist/ai/manifest/components/BbTabsRoot.removed.json +13 -0
- package/dist/ai/manifest/components/BbTag.json +120 -0
- package/dist/ai/manifest/components/BbTag.removed.json +13 -0
- package/dist/ai/manifest/components/BbTag.tree.json +40 -0
- package/dist/ai/manifest/components/BbTextInput.json +118 -0
- package/dist/ai/manifest/components/BbTextInput.removed.json +14 -0
- package/dist/ai/manifest/components/BbTextInput.tree.json +27 -0
- package/dist/ai/manifest/components/BbTextarea.json +116 -0
- package/dist/ai/manifest/components/BbTextarea.removed.json +11 -0
- package/dist/ai/manifest/components/BbTextarea.tree.json +37 -0
- package/dist/ai/manifest/components/BbTimePicker.json +76 -0
- package/dist/ai/manifest/components/BbTimePicker.tree.json +37 -0
- package/dist/ai/manifest/components/BbTimePickerInput.json +125 -0
- package/dist/ai/manifest/components/BbTimePickerInput.removed.json +11 -0
- package/dist/ai/manifest/components/BbTimePickerInput.tree.json +44 -0
- package/dist/ai/manifest/components/BbToast.json +37 -0
- package/dist/ai/manifest/components/BbToast.removed.json +9 -0
- package/dist/ai/manifest/components/BbToast.tree.json +91 -0
- package/dist/ai/manifest/components/BbToastPortal.json +18 -0
- package/dist/ai/manifest/components/BbTooltip.json +54 -0
- package/dist/ai/manifest/components/BbTooltip.removed.json +9 -0
- package/dist/ai/manifest/components/BbTooltip.tree.json +41 -0
- package/dist/ai/manifest/components/BbTree.json +46 -0
- package/dist/ai/manifest/components/BbTree.removed.json +8 -0
- package/dist/ai/manifest/components/BbTree.tree.json +31 -0
- package/dist/ai/manifest/components/ChipsBox.json +32 -0
- package/dist/ai/manifest/components/ChipsBox.tree.json +11 -0
- package/dist/ai/manifest/components/ClearableButton.json +19 -0
- package/dist/ai/manifest/components/ClearableButton.tree.json +19 -0
- package/dist/ai/manifest/components/CommaBox.json +30 -0
- package/dist/ai/manifest/components/CommonField.json +56 -0
- package/dist/ai/manifest/components/CommonField.tree.json +110 -0
- package/dist/ai/manifest/components/CommonFieldInput.json +47 -0
- package/dist/ai/manifest/components/CommonFieldInput.tree.json +95 -0
- package/dist/ai/manifest/components/CommonPopover.json +44 -0
- package/dist/ai/manifest/components/CommonPopover.tree.json +26 -0
- package/dist/ai/manifest/components/CommonTimeSelector.json +31 -0
- package/dist/ai/manifest/components/CommonTimeSelector.tree.json +43 -0
- package/dist/ai/manifest/components/ErrorIcon.json +17 -0
- package/dist/ai/manifest/components/ErrorIcon.tree.json +22 -0
- package/dist/ai/manifest/components/FlatListBox.json +43 -0
- package/dist/ai/manifest/components/FlatListBox.tree.json +16 -0
- package/dist/ai/manifest/components/GroupedListBox.json +45 -0
- package/dist/ai/manifest/components/GroupedListBox.tree.json +16 -0
- package/dist/ai/manifest/components/GuidesComponent.json +17 -0
- package/dist/ai/manifest/components/ListBox.json +43 -0
- package/dist/ai/manifest/components/ListBox.tree.json +9 -0
- package/dist/ai/manifest/components/OptionsContainer.json +45 -0
- package/dist/ai/manifest/components/WarningIcon.json +17 -0
- package/dist/ai/manifest/components/WarningIcon.tree.json +22 -0
- package/dist/ai/manifest/index.json +122 -0
- package/dist/ai/manifest/meta.json +506 -0
- package/dist/ai/manifest/types.advanced.json +66 -0
- package/dist/ai/manifest/types.api.json +52 -0
- package/dist/ai/manifest/types.wrapper.json +119 -0
- package/dist/ai/recipes/inertia/approvals-inbox.md +206 -139
- package/dist/ai/recipes/inertia/inline-edit-workspace.md +218 -143
- package/dist/ai/recipes/inertia/layout-scaffold.md +93 -58
- package/dist/ai/recipes/inertia/onboarding.md +114 -87
- package/dist/ai/recipes/inertia/ownership-atlas.md +322 -322
- package/dist/ai/recipes/inertia/record-form.md +421 -224
- package/dist/ai/recipes/inertia/records-workspace.md +600 -219
- package/dist/ai/recipes/inertia/settings-workspace.md +3098 -0
- package/dist/ai/recipes/inertia/upload-center.md +189 -177
- package/dist/ai/recipes/inertia/wizard-form.md +233 -100
- package/dist/ai/recipes/nuxt/approvals-inbox.md +272 -158
- package/dist/ai/recipes/nuxt/inline-edit-workspace.md +298 -166
- package/dist/ai/recipes/nuxt/layout-scaffold.md +94 -59
- package/dist/ai/recipes/nuxt/onboarding.md +178 -117
- package/dist/ai/recipes/nuxt/ownership-atlas.md +1406 -0
- package/dist/ai/recipes/nuxt/record-form.md +507 -223
- package/dist/ai/recipes/nuxt/records-workspace.md +653 -206
- package/dist/ai/recipes/nuxt/settings-workspace.md +3189 -0
- package/dist/ai/recipes/nuxt/upload-center.md +282 -190
- package/dist/ai/recipes/nuxt/wizard-form.md +251 -102
- package/dist/ai/recipes/vue/approvals-inbox.md +248 -146
- package/dist/ai/recipes/vue/inline-edit-workspace.md +278 -157
- package/dist/ai/recipes/vue/layout-scaffold.md +93 -58
- package/dist/ai/recipes/vue/onboarding.md +112 -83
- package/dist/ai/recipes/vue/ownership-atlas.md +1360 -0
- package/dist/ai/recipes/vue/record-form.md +252 -130
- package/dist/ai/recipes/vue/records-workspace.md +609 -191
- package/dist/ai/recipes/vue/settings-workspace.md +3130 -0
- package/dist/ai/recipes/vue/upload-center.md +229 -176
- package/dist/ai/recipes/vue/wizard-form.md +190 -85
- package/dist/ai/source/BbAccordion.md +129 -32
- package/dist/ai/source/BbAlert.md +214 -70
- package/dist/ai/source/BbAsterisk.md +54 -4
- package/dist/ai/source/BbAvatar.md +73 -16
- package/dist/ai/source/BbBadge.md +303 -105
- package/dist/ai/source/BbBadgeButton.md +257 -87
- package/dist/ai/source/BbBaseButton.md +120 -38
- package/dist/ai/source/BbBaseCheckboxIcon.md +153 -36
- package/dist/ai/source/BbBaseRadioIcon.md +124 -18
- package/dist/ai/source/BbBaseSwitchIcon.md +146 -33
- package/dist/ai/source/BbBreadcrumbs.md +437 -95
- package/dist/ai/source/BbButton.md +696 -198
- package/dist/ai/source/BbCalendar.md +1869 -0
- package/dist/ai/source/BbCheckbox.md +516 -78
- package/dist/ai/source/BbCheckboxGroup.md +1120 -113
- package/dist/ai/source/BbCollapsible.md +95 -11
- package/dist/ai/source/BbColorInput.md +626 -79
- package/dist/ai/source/BbColorPalette.md +1323 -70
- package/dist/ai/source/BbConfirm.md +167 -8
- package/dist/ai/source/BbConfirmPortal.md +109 -9
- package/dist/ai/source/BbDatePicker.md +529 -408
- package/dist/ai/source/BbDatePickerInput.md +2163 -154
- package/dist/ai/source/BbDialog.md +553 -97
- package/dist/ai/source/BbDropdown.md +1371 -366
- package/dist/ai/source/BbDropdownButton.md +434 -93
- package/dist/ai/source/BbDropdownGroup.md +1026 -230
- package/dist/ai/source/BbDropzone.md +230 -54
- package/dist/ai/source/BbForm.md +982 -21
- package/dist/ai/source/BbHoverCard.md +973 -0
- package/dist/ai/source/BbHoverCardPortal.md +312 -0
- package/dist/ai/source/BbIcon.md +139 -53
- package/dist/ai/source/BbIndicator.md +121 -60
- package/dist/ai/source/BbNumberInput.md +1579 -102
- package/dist/ai/source/BbOffCanvas.md +1053 -280
- package/dist/ai/source/BbPagination.md +238 -50
- package/dist/ai/source/BbPopover.md +501 -126
- package/dist/ai/source/BbPopoverPortal.md +370 -0
- package/dist/ai/source/BbProgress.md +155 -30
- package/dist/ai/source/BbPtScope.md +54 -0
- package/dist/ai/source/BbRadio.md +417 -74
- package/dist/ai/source/BbRadioGroup.md +1101 -133
- package/dist/ai/source/BbRating.md +782 -96
- package/dist/ai/source/BbSelect.md +1149 -133
- package/dist/ai/source/BbSelectPopover.md +1173 -235
- package/dist/ai/source/BbSlider.md +1429 -113
- package/dist/ai/source/BbSmoothHeight.md +59 -4
- package/dist/ai/source/BbSpinner.md +62 -6
- package/dist/ai/source/BbSwitch.md +322 -60
- package/dist/ai/source/BbSwitchGroup.md +869 -84
- package/dist/ai/source/BbTable.md +8121 -1961
- package/dist/ai/source/BbTabs.md +391 -124
- package/dist/ai/source/BbTabsList.md +520 -159
- package/dist/ai/source/BbTabsPanels.md +629 -0
- package/dist/ai/source/BbTabsRoot.md +342 -113
- package/dist/ai/source/BbTag.md +869 -105
- package/dist/ai/source/BbTextInput.md +612 -85
- package/dist/ai/source/BbTextarea.md +628 -81
- package/dist/ai/source/BbTimePicker.md +382 -72
- package/dist/ai/source/BbTimePickerInput.md +1340 -120
- package/dist/ai/source/BbToast.md +259 -80
- package/dist/ai/source/BbToastPortal.md +219 -72
- package/dist/ai/source/BbTooltip.md +295 -42
- package/dist/ai/source/BbTree.md +109 -14
- package/dist/ai/source/ChipsBox.md +25 -5
- package/dist/ai/source/CommaBox.md +21 -6
- package/dist/ai/source/CommonField.md +1700 -0
- package/dist/ai/source/CommonFieldInput.md +879 -0
- package/dist/ai/source/CommonPopover.md +153 -56
- package/dist/ai/source/CommonTimeSelector.md +743 -0
- package/dist/ai/source/ErrorIcon.md +2 -2
- package/dist/ai/source/FlatListBox.md +218 -18
- package/dist/ai/source/GroupedListBox.md +266 -45
- package/dist/ai/source/GuidesComponent.md +14 -7
- package/dist/ai/source/ListBox.md +57 -8
- package/dist/ai/source/OptionsContainer.md +343 -61
- package/dist/ai/source/WarningIcon.md +2 -2
- package/dist/assets/css/reset.css_inline.js +1 -1
- package/dist/assets/svgs/star.svg_raw.js +4 -0
- package/dist/components/BbAccordion/BbAccordion.vue_vue_type_script_setup_true_lang.js +59 -38
- package/dist/components/BbAccordion/types.d.ts +42 -3
- package/dist/components/BbAccordion/types.js +11 -0
- package/dist/components/BbAlert/BbAlert.vue.d.ts +1 -3
- package/dist/components/BbAlert/BbAlert.vue_vue_type_script_setup_true_lang.js +46 -30
- package/dist/components/BbAlert/types.d.ts +40 -9
- package/dist/components/BbAlert/types.js +13 -0
- package/dist/components/BbAsterisk/BbAsterisk.vue.d.ts +3 -1
- package/dist/components/BbAsterisk/BbAsterisk.vue_vue_type_script_setup_true_lang.js +23 -8
- package/dist/components/BbAsterisk/types.d.ts +18 -0
- package/dist/components/BbAsterisk/types.js +7 -0
- package/dist/components/BbAvatar/BbAvatar.vue.d.ts +2 -4
- package/dist/components/BbAvatar/BbAvatar.vue_vue_type_script_setup_true_lang.js +57 -44
- package/dist/components/BbAvatar/types.d.ts +23 -0
- package/dist/components/BbAvatar/types.js +7 -0
- package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +24 -18
- package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +96 -53
- package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +32 -11
- package/dist/components/BbBadge/badgeButtonContext.d.ts +25 -8
- package/dist/components/BbBadge/types.d.ts +44 -9
- package/dist/components/BbBadge/types.js +13 -0
- package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +109 -96
- package/dist/components/BbBaseButton/RouterComponent.vue_vue_type_script_setup_true_lang.js +11 -11
- package/dist/components/BbBaseButton/types.d.ts +44 -28
- package/dist/components/BbBaseButton/types.js +9 -2
- package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue_vue_type_script_setup_true_lang.js +50 -18
- package/dist/components/BbBaseCheckboxIcon/types.d.ts +31 -2
- package/dist/components/BbBaseCheckboxIcon/types.js +8 -0
- package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue_vue_type_script_setup_true_lang.js +45 -15
- package/dist/components/BbBaseRadioIcon/types.d.ts +31 -2
- package/dist/components/BbBaseRadioIcon/types.js +8 -0
- package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue_vue_type_script_setup_true_lang.js +48 -16
- package/dist/components/BbBaseSwitchIcon/types.d.ts +31 -2
- package/dist/components/BbBaseSwitchIcon/types.js +8 -0
- package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +197 -140
- package/dist/components/BbBreadcrumbs/types.d.ts +62 -12
- package/dist/components/BbBreadcrumbs/types.js +12 -0
- package/dist/components/BbButton/BbButton.vue.d.ts +5 -0
- package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +145 -101
- package/dist/components/BbButton/toggleRoving.d.ts +6 -0
- package/dist/components/BbButton/toggleRoving.js +45 -0
- package/dist/components/BbButton/types.d.ts +123 -13
- package/dist/components/BbButton/types.js +16 -0
- package/dist/components/BbCalendar/BbCalendar.vue.d.ts +33 -0
- package/dist/components/BbCalendar/BbCalendar.vue.js +6 -0
- package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +614 -0
- package/dist/components/BbCalendar/CalendarMonthPanel.vue.js +5 -0
- package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +126 -0
- package/dist/components/BbCalendar/CalendarYearPanel.vue.js +5 -0
- package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +129 -0
- package/dist/components/BbCalendar/calendarHost.d.ts +29 -0
- package/dist/components/BbCalendar/calendarHost.js +10 -0
- package/dist/components/BbCalendar/types.d.ts +216 -0
- package/dist/components/BbCalendar/types.js +29 -0
- package/dist/components/{BbBaseDatePicker/useDatePickerContext.d.ts → BbCalendar/useCalendarContext.d.ts} +10 -7
- package/dist/components/BbCalendar/useCalendarContext.js +11 -0
- package/dist/components/BbCalendar/useCalendarGrid.d.ts +211 -0
- package/dist/components/BbCalendar/useCalendarGrid.js +282 -0
- package/dist/components/BbCalendar/useDayGrid.d.ts +82 -0
- package/dist/components/BbCalendar/useDayGrid.js +247 -0
- package/dist/components/BbCalendar/useDayjsLocale.d.ts +64 -0
- package/dist/components/BbCalendar/useDayjsLocale.js +35 -0
- package/dist/components/BbCalendar/useToday.d.ts +23 -0
- package/dist/components/BbCalendar/useToday.js +21 -0
- package/dist/components/BbCheckbox/BbCheckbox.vue.d.ts +7 -7
- package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +224 -72
- package/dist/components/BbCheckbox/types.d.ts +199 -23
- package/dist/components/BbCheckbox/types.js +8 -0
- package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue.d.ts +15 -3
- package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +350 -106
- package/dist/components/BbCheckboxGroup/types.d.ts +241 -38
- package/dist/components/BbCheckboxGroup/types.js +10 -0
- package/dist/components/BbCollapsible/BbCollapsible.vue.d.ts +2 -1
- package/dist/components/BbCollapsible/BbCollapsible.vue_vue_type_script_setup_true_lang.js +41 -19
- package/dist/components/BbCollapsible/types.d.ts +42 -3
- package/dist/components/BbCollapsible/types.js +7 -0
- package/dist/components/BbColorInput/BbColorInput.vue.d.ts +17 -7
- package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +339 -87
- package/dist/components/BbColorInput/types.d.ts +223 -23
- package/dist/components/BbColorInput/types.js +24 -0
- package/dist/components/BbColorPalette/BbColorPalette.vue.d.ts +10 -2
- package/dist/components/BbColorPalette/BbColorPalette.vue_vue_type_script_setup_true_lang.js +530 -108
- package/dist/components/BbColorPalette/types.d.ts +74 -11
- package/dist/components/BbColorPalette/types.js +12 -0
- package/dist/components/BbConfirm/BbConfirm.vue.d.ts +2 -1
- package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +125 -76
- package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +3 -5
- package/dist/components/BbConfirm/types.d.ts +64 -0
- package/dist/components/BbConfirm/types.js +17 -0
- package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +15 -10
- package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +324 -224
- package/dist/components/BbDatePicker/types.d.ts +111 -43
- package/dist/components/BbDatePicker/types.js +33 -0
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +16 -4
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +1225 -88
- package/dist/components/BbDatePickerInput/dateFieldLayout.d.ts +23 -0
- package/dist/components/BbDatePickerInput/dateFieldLayout.js +38 -0
- package/dist/components/BbDatePickerInput/types.d.ts +238 -52
- package/dist/components/BbDatePickerInput/types.js +39 -0
- package/dist/components/BbDialog/BbDialog.vue.d.ts +3 -3
- package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +230 -133
- package/dist/components/BbDialog/types.d.ts +94 -31
- package/dist/components/BbDialog/types.js +16 -0
- package/dist/components/BbDialog/useDialogStack.d.ts +12 -0
- package/dist/components/BbDialog/useDialogStack.js +9 -2
- package/dist/components/BbDropdown/AdaptiveDropdown.vue.d.ts +2 -0
- package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +134 -106
- package/dist/components/BbDropdown/BbDropdown.vue.d.ts +10 -2
- package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +463 -337
- package/dist/components/BbDropdown/BbDropdownGroup.vue.d.ts +16 -5
- package/dist/components/BbDropdown/BbDropdownGroup.vue_vue_type_script_setup_true_lang.js +48 -19
- package/dist/components/BbDropdown/BbDropdownList.vue.d.ts +10 -4
- package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +388 -335
- package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +152 -122
- 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 +70 -32
- package/dist/components/BbDropdown/types.d.ts +440 -129
- package/dist/components/BbDropdown/types.js +21 -2
- package/dist/components/BbDropdown/useDropdownContext.d.ts +14 -4
- package/dist/components/BbDropdown/useDropdownGroupRegistry.d.ts +62 -0
- package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +18 -3
- package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +193 -43
- package/dist/components/BbDropdownButton/types.d.ts +136 -11
- package/dist/components/BbDropdownButton/types.js +35 -0
- package/dist/components/BbDropzone/BbDropzone.vue.d.ts +2 -2
- package/dist/components/BbDropzone/BbDropzone.vue_vue_type_script_setup_true_lang.js +211 -143
- package/dist/components/BbDropzone/types.d.ts +65 -21
- package/dist/components/BbDropzone/types.js +17 -0
- package/dist/components/BbForm/BbForm.vue.d.ts +94 -0
- package/dist/{validated → components/BbForm}/BbForm.vue.js +1 -1
- package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +360 -0
- package/dist/components/BbForm/BbFormCustomField.d.ts +14 -0
- package/dist/components/BbForm/BbFormCustomField.js +55 -0
- package/dist/components/BbForm/bindFormField.d.ts +57 -0
- package/dist/components/BbForm/bindFormField.js +88 -0
- package/dist/components/BbForm/formFields.d.ts +77 -0
- package/dist/components/BbForm/formFields.js +11 -0
- package/dist/components/BbForm/formSchema.d.ts +56 -0
- package/dist/components/BbForm/formSchema.js +196 -0
- package/dist/components/BbForm/standardSchema.d.ts +59 -0
- package/dist/components/BbHoverCard/BbHoverCard.vue.d.ts +43 -0
- package/dist/components/{BbBaseRadio/BbBaseRadio.vue.js → BbHoverCard/BbHoverCard.vue.js} +2 -2
- package/dist/components/BbHoverCard/BbHoverCard.vue_vue_type_script_setup_true_lang.js +300 -0
- package/dist/components/BbHoverCard/BbHoverCardPortal.vue.d.ts +23 -0
- package/dist/components/BbHoverCard/BbHoverCardPortal.vue.js +5 -0
- package/dist/components/BbHoverCard/BbHoverCardPortal.vue_vue_type_script_setup_true_lang.js +13 -0
- package/dist/components/BbHoverCard/hoverCardFocus.d.ts +29 -0
- package/dist/components/BbHoverCard/hoverCardFocus.js +29 -0
- package/dist/components/BbHoverCard/types.d.ts +186 -0
- package/dist/components/BbHoverCard/types.js +13 -0
- package/dist/components/BbIcon/BbIcon.vue.d.ts +1 -3
- package/dist/components/BbIcon/BbIcon.vue_vue_type_script_setup_true_lang.js +59 -48
- package/dist/components/BbIcon/iconCache.d.ts +63 -0
- package/dist/components/BbIcon/iconCache.js +35 -0
- package/dist/components/BbIcon/types.d.ts +22 -2
- package/dist/components/BbIcon/types.js +7 -0
- package/dist/components/BbIndicator/BbIndicator.vue_vue_type_script_setup_true_lang.js +34 -21
- package/dist/components/BbIndicator/types.d.ts +24 -0
- package/dist/components/BbIndicator/types.js +7 -0
- package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +11 -8
- package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +670 -87
- package/dist/components/BbNumberInput/numberDisplay.d.ts +256 -0
- package/dist/components/BbNumberInput/numberDisplay.js +499 -0
- package/dist/components/BbNumberInput/platform.d.ts +7 -0
- package/dist/components/BbNumberInput/platform.js +7 -0
- package/dist/components/BbNumberInput/types.d.ts +262 -30
- package/dist/components/BbNumberInput/types.js +8 -0
- 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/BbOffCanvas/BbOffCanvas.vue.d.ts +4 -6
- package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +311 -204
- package/dist/components/BbOffCanvas/hostCloseLabel.d.ts +3 -0
- package/dist/components/BbOffCanvas/hostCloseLabel.js +8 -0
- package/dist/components/BbOffCanvas/types.d.ts +81 -13
- package/dist/components/BbOffCanvas/types.js +15 -0
- package/dist/components/BbPagination/BbPagination.vue.d.ts +2 -2
- package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +146 -110
- package/dist/components/BbPagination/types.d.ts +45 -15
- package/dist/components/BbPagination/types.js +13 -0
- package/dist/components/BbPopover/BbPopover.vue.d.ts +5 -4
- package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +288 -193
- package/dist/components/BbPopover/BbPopoverPortal.vue.d.ts +23 -0
- package/dist/components/BbPopover/BbPopoverPortal.vue.js +5 -0
- package/dist/components/BbPopover/BbPopoverPortal.vue_vue_type_script_setup_true_lang.js +13 -0
- package/dist/components/BbPopover/types.d.ts +71 -17
- package/dist/components/BbPopover/types.js +14 -0
- package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +38 -17
- package/dist/components/BbProgress/types.d.ts +40 -0
- package/dist/components/BbProgress/types.js +7 -0
- package/dist/components/BbPtScope/BbPtScope.vue.d.ts +12 -0
- package/dist/components/BbPtScope/BbPtScope.vue.js +5 -0
- package/dist/components/BbPtScope/BbPtScope.vue_vue_type_script_setup_true_lang.js +13 -0
- package/dist/components/BbPtScope/types.d.ts +15 -0
- package/dist/components/BbRadio/BbRadio.vue.d.ts +7 -7
- package/dist/components/BbRadio/BbRadio.vue_vue_type_script_setup_true_lang.js +178 -59
- package/dist/components/BbRadio/types.d.ts +174 -29
- package/dist/components/BbRadio/types.js +8 -0
- package/dist/components/BbRadioGroup/BbRadioGroup.vue.d.ts +14 -2
- package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +333 -108
- package/dist/components/BbRadioGroup/types.d.ts +246 -46
- package/dist/components/BbRadioGroup/types.js +10 -0
- package/dist/components/BbRating/BbRating.vue.d.ts +10 -8
- package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +269 -78
- package/dist/components/BbRating/types.d.ts +195 -23
- package/dist/components/BbRating/types.js +21 -0
- package/dist/components/BbSelect/BbSelect.vue.d.ts +17 -3
- package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +565 -108
- package/dist/components/BbSelect/types.d.ts +263 -51
- package/dist/components/BbSelect/types.js +41 -0
- package/dist/components/BbSelectPopover/BbSelectPopover.vue.d.ts +15 -1
- package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +587 -362
- package/dist/components/BbSelectPopover/sheetChipAttrs.d.ts +18 -0
- package/dist/components/BbSelectPopover/sheetChipAttrs.js +5 -0
- package/dist/components/BbSelectPopover/types.d.ts +141 -45
- package/dist/components/BbSelectPopover/types.js +24 -0
- package/dist/components/BbSlider/BbSlider.vue.d.ts +13 -8
- package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +477 -97
- package/dist/components/BbSlider/types.d.ts +221 -27
- package/dist/components/BbSlider/types.js +26 -0
- package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.d.ts +1 -1
- package/dist/components/BbSmoothHeight/BbSmoothHeight.vue_vue_type_script_setup_true_lang.js +60 -48
- package/dist/components/BbSmoothHeight/types.d.ts +19 -0
- package/dist/components/BbSmoothHeight/types.js +7 -0
- package/dist/components/BbSpinner/BbSpinner.vue.d.ts +1 -3
- package/dist/components/BbSpinner/BbSpinner.vue_vue_type_script_setup_true_lang.js +27 -14
- package/dist/components/BbSpinner/types.d.ts +22 -1
- package/dist/components/BbSpinner/types.js +7 -0
- package/dist/components/BbSwitch/BbSwitch.vue.d.ts +7 -7
- package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +230 -78
- package/dist/components/BbSwitch/types.d.ts +25 -10
- package/dist/components/BbSwitch/types.js +5 -0
- package/dist/components/BbSwitchGroup/BbSwitchGroup.vue.d.ts +14 -2
- package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +350 -106
- package/dist/components/BbSwitchGroup/types.d.ts +36 -8
- package/dist/components/BbSwitchGroup/types.js +5 -0
- package/dist/components/BbTable/BbTable.vue.d.ts +36 -56
- package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +2331 -684
- package/dist/components/BbTable/BbTableDataRow.d.ts +204 -0
- package/dist/components/BbTable/BbTableDataRow.js +188 -0
- package/dist/components/BbTable/BbTableEdgeRow.d.ts +112 -0
- package/dist/components/BbTable/BbTableEdgeRow.js +65 -0
- package/dist/components/BbTable/BbTableExpandRow.d.ts +84 -0
- package/dist/components/BbTable/BbTableExpandRow.js +62 -0
- package/dist/components/BbTable/BbTableSelectToggle.d.ts +128 -0
- package/dist/components/BbTable/BbTableSelectToggle.js +131 -0
- package/dist/components/BbTable/gridWidgets.d.ts +30 -0
- package/dist/components/BbTable/gridWidgets.js +14 -0
- package/dist/components/BbTable/types.d.ts +520 -190
- package/dist/components/BbTable/types.js +34 -0
- package/dist/components/BbTable/useRowReorder.d.ts +54 -0
- package/dist/components/BbTable/useRowReorder.js +429 -0
- package/dist/components/BbTable/utils.d.ts +153 -4
- package/dist/components/BbTable/utils.js +165 -37
- package/dist/components/BbTable/warroom/harness.d.ts +253 -0
- package/dist/components/BbTabs/BbTabs.vue.d.ts +3 -1
- package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +66 -26
- package/dist/components/BbTabs/BbTabsList.vue.d.ts +3 -10
- package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +143 -81
- package/dist/components/BbTabs/BbTabsPanels.vue.d.ts +12 -0
- package/dist/components/{BbBaseSwitch/BbBaseSwitch.vue.js → BbTabs/BbTabsPanels.vue.js} +2 -2
- package/dist/components/BbTabs/BbTabsPanels.vue_vue_type_script_setup_true_lang.js +59 -0
- package/dist/components/BbTabs/BbTabsRoot.vue.d.ts +3 -1
- package/dist/components/BbTabs/BbTabsRoot.vue_vue_type_script_setup_true_lang.js +6 -1
- package/dist/components/BbTabs/types.d.ts +210 -46
- package/dist/components/BbTabs/types.js +34 -0
- package/dist/components/BbTag/BbTag.vue.d.ts +13 -10
- package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +404 -93
- package/dist/components/BbTag/types.d.ts +156 -31
- package/dist/components/BbTag/types.js +22 -0
- package/dist/components/BbTextInput/BbTextInput.vue.d.ts +31 -37
- package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +312 -107
- package/dist/components/BbTextInput/types.d.ts +201 -26
- package/dist/components/BbTextInput/types.js +12 -0
- package/dist/components/BbTextarea/BbTextarea.vue.d.ts +31 -37
- package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +342 -114
- package/dist/components/BbTextarea/types.d.ts +191 -26
- package/dist/components/BbTextarea/types.js +12 -0
- package/dist/components/BbTimePicker/BbTimePicker.vue.d.ts +12 -4
- package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +199 -122
- package/dist/components/BbTimePicker/types.d.ts +80 -9
- package/dist/components/BbTimePicker/types.js +18 -0
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue.d.ts +14 -4
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +779 -86
- package/dist/components/BbTimePickerInput/types.d.ts +170 -35
- package/dist/components/BbTimePickerInput/types.js +25 -0
- package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +63 -25
- package/dist/components/BbToast/BbToastMessage.vue.d.ts +4 -1
- package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +79 -76
- package/dist/components/BbToast/BbToastPortal.vue.d.ts +1 -0
- package/dist/components/BbToast/BbToastRegion.vue.d.ts +4 -1
- package/dist/components/BbToast/BbToastRegion.vue_vue_type_script_setup_true_lang.js +72 -64
- package/dist/components/BbToast/types.d.ts +54 -1
- package/dist/components/BbToast/types.js +28 -0
- package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +127 -92
- package/dist/components/BbTooltip/tooltipWarmup.d.ts +23 -0
- package/dist/components/BbTooltip/tooltipWarmup.js +7 -0
- package/dist/components/BbTooltip/types.d.ts +42 -5
- package/dist/components/BbTooltip/types.js +7 -0
- package/dist/components/BbTree/BbTree.vue.d.ts +15 -3
- package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +57 -29
- package/dist/components/BbTree/BbTreeLevel.vue.d.ts +1 -1
- package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +24 -20
- package/dist/components/BbTree/context.d.ts +9 -1
- package/dist/components/BbTree/types.d.ts +40 -5
- package/dist/components/BbTree/types.js +7 -0
- package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +46 -44
- package/dist/components/ChipsBox/types.d.ts +7 -0
- package/dist/components/ClearableButton/ClearableButton.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/CommaBox/CommaBox.vue_vue_type_script_setup_true_lang.js +11 -7
- package/dist/components/CommaBox/types.d.ts +7 -0
- package/dist/components/{BbBaseInputContainer/BbBaseInputContainer.vue.d.ts → CommonField/CommonField.vue.d.ts} +5 -5
- package/dist/components/{BbTabs/BbTabsPanes.vue.js → CommonField/CommonField.vue.js} +2 -2
- package/dist/components/CommonField/CommonField.vue_vue_type_script_setup_true_lang.js +231 -0
- package/dist/components/CommonField/messageHeightMatrix.d.ts +2 -0
- package/dist/components/{BbBaseInputContainer → CommonField}/types.d.ts +87 -32
- package/dist/components/{CommonInputWrapper/CommonInputWrapper.vue.d.ts → CommonFieldInput/CommonFieldInput.vue.d.ts} +5 -4
- package/dist/components/{BbBaseRadioGroup/BbBaseRadioGroup.vue.js → CommonFieldInput/CommonFieldInput.vue.js} +2 -2
- package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +121 -0
- package/dist/components/CommonFieldInput/boxBorderMatrix.d.ts +10 -0
- package/dist/components/{CommonInputWrapper → CommonFieldInput}/types.d.ts +26 -8
- package/dist/components/CommonPopover/CommonPopover.vue.d.ts +11 -2
- package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +80 -65
- package/dist/components/CommonPopover/types.d.ts +41 -31
- package/dist/components/CommonTimeSelector/CommonTimeSelector.vue.d.ts +48 -0
- package/dist/components/{BbBaseColorPalette/BbBaseColorPalette.vue.js → CommonTimeSelector/CommonTimeSelector.vue.js} +2 -2
- package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +241 -0
- package/dist/components/CommonTimeSelector/types.d.ts +6 -0
- package/dist/components/CommonTimeSelector/useMeridiem.d.ts +19 -0
- package/dist/components/CommonTimeSelector/useMeridiem.js +41 -0
- package/dist/components/FlatListBox/FlatListBox.vue.d.ts +5 -1
- package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +176 -98
- package/dist/components/FlatListBox/types.d.ts +33 -2
- package/dist/components/GroupedListBox/GroupedListBox.vue.d.ts +5 -1
- package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +237 -146
- package/dist/components/GroupedListBox/types.d.ts +33 -2
- package/dist/components/ListBox/ListBox.vue.d.ts +5 -1
- package/dist/components/ListBox/ListBox.vue_vue_type_script_setup_true_lang.js +100 -69
- package/dist/components/ListBox/types.d.ts +33 -2
- package/dist/components/OptionsContainer/OptionsContainer.vue.d.ts +1 -1
- package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +117 -37
- package/dist/components/OptionsContainer/types.d.ts +76 -10
- package/dist/components/Transitions/ScaleFade.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/components/Transitions/Slide.vue.js +1 -1
- package/dist/composables/formSubmitLock.d.ts +8 -0
- package/dist/composables/formSubmitLock.js +4 -0
- package/dist/composables/ssrMarker.d.ts +15 -0
- package/dist/composables/ssrMarker.js +19 -0
- package/dist/composables/useBaseOptions.d.ts +18 -1
- package/dist/composables/useBaseOptions.js +83 -37
- package/dist/composables/useBbConfig.d.ts +27 -6
- package/dist/composables/useBbConfig.js +8 -2
- package/dist/composables/useBbDropdownContext.d.ts +13 -8
- package/dist/composables/useBbFormContext.d.ts +142 -8
- package/dist/composables/useBbFormContext.js +62 -30
- package/dist/composables/useBbFormField.d.ts +69 -0
- package/dist/composables/useBbFormField.js +58 -0
- package/dist/composables/useBbTableContext.d.ts +45 -1
- package/dist/composables/useBbTableContext.js +93 -87
- package/dist/composables/useBbTabsContext.d.ts +24 -18
- package/dist/composables/useBbTabsContext.js +154 -112
- package/dist/composables/useCharacterCounter.d.ts +33 -0
- package/dist/composables/useCharacterCounter.js +29 -0
- package/dist/composables/useClosingInert.d.ts +4 -4
- package/dist/composables/useCoarsePointer.js +7 -10
- package/dist/composables/useCoherence.js +1 -1
- package/dist/composables/useConfig.d.ts +59 -0
- package/dist/composables/useConfig.js +15 -0
- package/dist/composables/useConfirm.d.ts +39 -7
- package/dist/composables/useConfirm.js +50 -41
- package/dist/composables/useEscapeStackEntry.d.ts +13 -0
- package/dist/composables/useEscapeStackEntry.js +16 -0
- package/dist/composables/useFormBinding.d.ts +132 -0
- package/dist/composables/useFormBinding.js +46 -0
- package/dist/composables/useHydrated.d.ts +30 -0
- package/dist/composables/useHydrated.js +31 -7
- package/dist/composables/useId.d.ts +4 -3
- package/dist/composables/useId.js +1 -7
- 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/useItemsGetter.d.ts +73 -2
- package/dist/composables/useItemsGetter.js +81 -21
- package/dist/composables/useKeyboardInset.d.ts +28 -0
- package/dist/composables/useKeyboardInset.js +32 -0
- package/dist/composables/useLocale.js +13 -9
- package/dist/composables/useMobile.js +7 -10
- package/dist/composables/useOverlayYield.d.ts +23 -0
- package/dist/composables/useOverlayYield.js +20 -0
- package/dist/composables/usePassthrough.d.ts +228 -0
- package/dist/composables/usePassthrough.js +247 -0
- package/dist/composables/usePrefill.d.ts +26 -5
- package/dist/composables/usePrefill.js +36 -19
- package/dist/composables/useSafeAreaInternal.js +1 -1
- package/dist/composables/useSegmentedFields.d.ts +2 -2
- package/dist/composables/useSegmentedFields.js +4 -4
- package/dist/composables/useServerPrefetch.d.ts +28 -0
- package/dist/composables/useServerPrefetch.js +9 -0
- package/dist/composables/useSsrState.d.ts +28 -0
- package/dist/composables/useSsrState.js +13 -0
- package/dist/composables/useTableWidthContext.d.ts +24 -4
- package/dist/composables/useTableWidthContext.js +31 -28
- package/dist/composables/useToast.d.ts +18 -1
- package/dist/composables/useToast.js +31 -18
- package/dist/composables/useToggleInput.d.ts +44 -0
- package/dist/composables/useToggleInput.js +39 -0
- package/dist/composables/useViewportWidth.d.ts +5 -25
- package/dist/composables/useViewportWidth.js +14 -7
- package/dist/deprecation/ai-deprecations.json.d.ts +2259 -263
- package/dist/deprecation/ai-deprecations.json.js +1 -1
- package/dist/deprecation/removedProps.js +9 -4
- package/dist/directives/bbDropdown.d.ts +15 -4
- package/dist/directives/bbDropdown.js +42 -10
- package/dist/directives/bbHoverCard.d.ts +59 -0
- package/dist/directives/bbHoverCard.js +33 -0
- package/dist/directives/bbPopover.d.ts +60 -0
- package/dist/directives/bbPopover.js +40 -0
- package/dist/directives/bbTooltip.d.ts +8 -0
- package/dist/directives/createPopoverDirective.d.ts +86 -0
- package/dist/directives/createPopoverDirective.js +111 -33
- package/dist/directives/directivePortal.d.ts +75 -0
- package/dist/directives/directivePortal.js +37 -0
- package/dist/directives/renderingInstance.d.ts +2 -0
- package/dist/directives/renderingInstance.js +25 -0
- package/dist/i18n/index.d.ts +14 -25
- package/dist/i18n/locales/cs.json +36 -19
- package/dist/i18n/locales/da.json +39 -22
- package/dist/i18n/locales/de-CH.json +144 -0
- package/dist/i18n/locales/de.json +38 -21
- package/dist/i18n/locales/el.json +36 -19
- package/dist/i18n/locales/en-GB.json +144 -0
- package/dist/i18n/locales/en.json +33 -16
- package/dist/i18n/locales/es-MX.json +144 -0
- package/dist/i18n/locales/es.json +41 -24
- package/dist/i18n/locales/fi.json +34 -17
- package/dist/i18n/locales/fr.json +43 -26
- package/dist/i18n/locales/hu.json +34 -17
- package/dist/i18n/locales/it.json +37 -20
- package/dist/i18n/locales/ja.json +39 -22
- package/dist/i18n/locales/ko.json +36 -19
- package/dist/i18n/locales/nb.json +39 -22
- package/dist/i18n/locales/nl.json +47 -30
- package/dist/i18n/locales/pl.json +35 -18
- package/dist/i18n/locales/{pt.json → pt-BR.json} +43 -26
- package/dist/i18n/locales/pt-PT.json +144 -0
- package/dist/i18n/locales/ro.json +47 -30
- package/dist/i18n/locales/ru.json +35 -18
- package/dist/i18n/locales/sv.json +42 -25
- package/dist/i18n/locales/tr.json +40 -23
- package/dist/i18n/locales/uk.json +35 -18
- package/dist/i18n/locales/{zh-cn.json → zh-CN.json} +36 -19
- package/dist/i18n/locales/zh-HK.json +144 -0
- package/dist/i18n/locales/zh-TW.json +144 -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/icon-scan.d.ts +276 -0
- package/dist/icon-scan.js +485 -0
- package/dist/icons-whitelist.d.ts +5 -4
- package/dist/index.d.ts +61 -23
- package/dist/index.js +84 -72
- package/dist/llms-full.txt +100680 -60206
- package/dist/llms-medium.txt +1652 -390
- package/dist/llms.txt +41 -23
- package/dist/locale-blueprint.json +41 -18
- package/dist/nuxt-auto-imports.d.ts +76 -0
- package/dist/nuxt-auto-imports.js +32 -0
- package/dist/nuxt-module.d.ts +30 -15
- package/dist/nuxt.js +35 -9
- package/dist/passthrough-deduper.js +5 -0
- package/dist/plugin.d.ts +10 -1
- package/dist/plugin.js +33 -19
- package/dist/project-dts.d.ts +92 -0
- package/dist/project-dts.js +173 -0
- package/dist/reset.css +1 -1
- package/dist/runtime/nuxt-plugin.js +36 -21
- package/dist/styles.css +3 -2
- package/dist/types/AlertVariant.d.ts +10 -1
- package/dist/types/BadgeVariant.d.ts +16 -5
- package/dist/types/ButtonVariant.d.ts +12 -1
- package/dist/types/ColumnName.d.ts +30 -3
- package/dist/types/CommonProps.d.ts +15 -5
- package/dist/types/Config.d.ts +112 -1
- package/dist/types/ConfirmVariant.d.ts +8 -1
- package/dist/types/DropdownItemVariant.d.ts +8 -1
- package/dist/types/FieldLayout.d.ts +39 -0
- package/dist/types/FieldLayout.js +8 -0
- package/dist/types/IndicatorVariant.d.ts +11 -1
- package/dist/types/InputVariant.d.ts +30 -0
- package/dist/types/ItemProps.d.ts +50 -0
- package/dist/types/ItemsProvider.d.ts +94 -0
- package/dist/types/Option.d.ts +6 -0
- package/dist/types/PtScope.d.ts +15 -0
- package/dist/types/RegistryKey.d.ts +10 -0
- package/dist/types/TabsVariant.d.ts +25 -0
- package/dist/types/ToastVariant.d.ts +12 -2
- package/dist/types/TooltipVariant.d.ts +8 -1
- package/dist/types/passthrough.d.ts +378 -0
- package/dist/types/passthrough.js +78 -0
- package/dist/types/ptComponentMap.d.ts +63 -0
- package/dist/utilities/functions/animationsSettled.d.ts +7 -0
- package/dist/utilities/functions/animationsSettled.js +6 -0
- package/dist/utilities/functions/elementLabel.d.ts +8 -0
- package/dist/utilities/functions/elementLabel.js +6 -0
- package/dist/utilities/functions/hasVnodeListener.d.ts +16 -0
- package/dist/utilities/functions/hasVnodeListener.js +12 -0
- package/dist/utilities/functions/isImeComposing.d.ts +7 -0
- package/dist/utilities/functions/isImeComposing.js +4 -0
- package/dist/utilities/functions/itemProps.d.ts +46 -0
- package/dist/utilities/functions/itemProps.js +47 -0
- package/dist/utilities/functions/parseSize.d.ts +2 -1
- package/dist/utilities/functions/readableValue.d.ts +6 -0
- package/dist/utilities/functions/readableValue.js +4 -0
- package/dist/utilities/functions/settlesVisible.d.ts +20 -0
- package/dist/utilities/functions/settlesVisible.js +18 -0
- package/dist/utilities/functions/slotKey.d.ts +13 -8
- package/dist/utilities/functions/slotKey.js +78 -2
- package/dist/utilities/functions/snapToStep.js +2 -1
- package/dist/utilities/functions/throttle.d.ts +1 -4
- package/dist/utilities/functions/throttle.js +1 -4
- package/dist/utilities/functions/toggleInput.d.ts +114 -0
- package/dist/utilities/functions/toggleInput.js +61 -0
- package/dist/utilities/functions/warnRemovedAttrs.d.ts +39 -1
- package/dist/utilities/functions/warnRemovedAttrs.js +85 -14
- package/dist/utilities/misc/listboxMetrics.d.ts +9 -3
- package/dist/utilities/misc/listboxMetrics.js +5 -2
- package/dist/utilities/misc/ssrStateInjectionKey.d.ts +47 -0
- package/dist/utilities/misc/ssrStateInjectionKey.js +4 -0
- package/dist/utilities/misc/ssrValue.d.ts +20 -0
- package/dist/utilities/misc/ssrValue.js +7 -0
- package/dist/utils/cssLayers.d.ts +91 -0
- package/dist/utils/cssLayers.js +43 -0
- package/dist/utils/focusVisibility.d.ts +9 -0
- package/dist/utils/focusVisibility.js +12 -0
- package/dist/utils/injectLibraryStyles.d.ts +3 -1
- package/dist/utils/injectLibraryStyles.js +24 -23
- package/dist/utils/overlayEscapeStack.d.ts +39 -1
- package/dist/utils/overlayEscapeStack.js +19 -8
- package/dist/utils/passthrough.d.ts +67 -0
- package/dist/utils/passthrough.js +100 -0
- package/dist/utils/passthroughDeduper.d.ts +2 -0
- package/dist/utils/ptScope.d.ts +8 -0
- package/dist/utils/ptScope.js +4 -0
- package/dist/utils/versionCheck.d.ts +19 -0
- package/dist/utils/versionCheck.js +18 -0
- package/dist/vite-plugin.d.ts +324 -71
- package/dist/vite.js +577 -385
- package/llms.txt +42 -24
- package/package.json +75 -38
- package/scripts/README.md +35 -33
- package/scripts/lib/agent-manifest.mjs +543 -0
- package/scripts/lib/check-fix.mjs +129 -0
- package/scripts/lib/collapsible-trigger-aria.mjs +116 -0
- package/scripts/lib/component-attr-targets.ts +123 -0
- package/scripts/lib/component-tree.ts +648 -0
- package/scripts/lib/css-class-check.mjs +329 -0
- package/scripts/lib/css-class-surface.mjs +292 -0
- package/scripts/lib/css-color-resolve.mjs +296 -0
- package/scripts/lib/css-local-check.mjs +432 -0
- package/scripts/lib/design-token-manifest.mjs +506 -0
- package/scripts/lib/doc-sections.mjs +250 -0
- package/scripts/lib/dropdown-default-slot.mjs +118 -0
- package/scripts/lib/ensure-manifest.mjs +106 -10
- package/scripts/lib/eslint-disable.mjs +173 -0
- package/scripts/lib/eslint-plugin.d.ts +90 -1
- package/scripts/lib/eslint-plugin.mjs +2499 -33
- package/scripts/lib/example-checks.mjs +337 -0
- package/scripts/lib/form-v-model.mjs +190 -0
- package/scripts/lib/guide-claims.mjs +452 -0
- package/scripts/lib/hand-imported-styles.mjs +362 -0
- package/scripts/lib/hand-roll-hints.mjs +50 -6
- package/scripts/lib/helper-canon.mjs +176 -0
- package/scripts/lib/helpers-add.mjs +1303 -0
- package/scripts/lib/html-attributes.mjs +353 -0
- package/scripts/lib/items-provider-context.mjs +842 -0
- package/scripts/lib/linked-target.mjs +30 -0
- package/scripts/lib/local-components.mjs +206 -0
- package/scripts/lib/locale-check.mjs +182 -0
- package/scripts/lib/manifest-pointers.mjs +71 -0
- package/scripts/lib/mcp-config.mjs +93 -58
- package/scripts/lib/migrate-fix.mjs +62 -3
- package/scripts/lib/portal-names.mjs +458 -0
- package/scripts/lib/project-variant-dts.mjs +208 -0
- package/scripts/lib/public-type-exports.mjs +273 -0
- package/scripts/lib/reactive-v-model.mjs +221 -0
- package/scripts/lib/recipe-excerpts.mjs +98 -0
- package/scripts/lib/redundant-item-accessor.mjs +398 -0
- package/scripts/lib/renamed-item-field.mjs +343 -0
- package/scripts/lib/required-in-form.mjs +240 -0
- package/scripts/lib/slot-key.mjs +147 -0
- package/scripts/lib/slot-renames.mjs +45 -0
- package/scripts/lib/squashed-slot-words.mjs +133 -0
- package/scripts/lib/text-null-value.mjs +260 -0
- package/scripts/lib/toolchain-check.mjs +217 -0
- package/scripts/lib/unimported-components.mjs +263 -0
- package/scripts/lib/validate-bb-markup.mjs +2945 -97
- package/scripts/lib/wrapper-props.mjs +188 -0
- package/dist/ai/BbBaseCheckbox.md +0 -49
- package/dist/ai/BbBaseCheckboxGroup.md +0 -64
- package/dist/ai/BbBaseColorInput.md +0 -65
- package/dist/ai/BbBaseColorPalette.md +0 -39
- package/dist/ai/BbBaseDatePicker.md +0 -43
- package/dist/ai/BbBaseDatePickerInput.md +0 -73
- package/dist/ai/BbBaseInputContainer.md +0 -48
- package/dist/ai/BbBaseNumberInput.md +0 -71
- package/dist/ai/BbBaseRadio.md +0 -46
- package/dist/ai/BbBaseRadioGroup.md +0 -64
- package/dist/ai/BbBaseRating.md +0 -52
- package/dist/ai/BbBaseSelect.md +0 -88
- package/dist/ai/BbBaseSlider.md +0 -56
- package/dist/ai/BbBaseSwitch.md +0 -49
- package/dist/ai/BbBaseSwitchGroup.md +0 -64
- package/dist/ai/BbBaseTag.md +0 -68
- package/dist/ai/BbBaseTextInput.md +0 -75
- package/dist/ai/BbBaseTextarea.md +0 -62
- package/dist/ai/BbBaseTimePickerInput.md +0 -62
- package/dist/ai/BbTabsPanes.md +0 -27
- package/dist/ai/CommonInputWrapper.md +0 -42
- package/dist/ai/recipes/inertia/command-palette.md +0 -311
- package/dist/ai/recipes/nuxt/command-palette.md +0 -300
- package/dist/ai/recipes/vue/command-palette.md +0 -297
- package/dist/ai/source/BbBaseCheckbox.md +0 -461
- package/dist/ai/source/BbBaseCheckboxGroup.md +0 -554
- package/dist/ai/source/BbBaseColorInput.md +0 -431
- package/dist/ai/source/BbBaseColorPalette.md +0 -942
- package/dist/ai/source/BbBaseDatePicker.md +0 -1448
- package/dist/ai/source/BbBaseDatePickerInput.md +0 -1940
- package/dist/ai/source/BbBaseInputContainer.md +0 -1211
- package/dist/ai/source/BbBaseNumberInput.md +0 -617
- package/dist/ai/source/BbBaseRadio.md +0 -381
- package/dist/ai/source/BbBaseRadioGroup.md +0 -539
- package/dist/ai/source/BbBaseRating.md +0 -607
- package/dist/ai/source/BbBaseSelect.md +0 -945
- package/dist/ai/source/BbBaseSlider.md +0 -1144
- package/dist/ai/source/BbBaseSwitch.md +0 -246
- package/dist/ai/source/BbBaseSwitchGroup.md +0 -302
- package/dist/ai/source/BbBaseTag.md +0 -694
- package/dist/ai/source/BbBaseTextInput.md +0 -511
- package/dist/ai/source/BbBaseTextarea.md +0 -504
- package/dist/ai/source/BbBaseTimePickerInput.md +0 -1037
- package/dist/ai/source/BbTabsPanes.md +0 -377
- package/dist/ai/source/CommonInputWrapper.md +0 -584
- package/dist/alert-variants.d.ts +0 -19
- package/dist/assets/svgs/sort.svg_raw.js +0 -4
- package/dist/badge-variants.d.ts +0 -19
- package/dist/button-variants.d.ts +0 -21
- package/dist/components/BbBadge/BadgeAppendIcon.vue.d.ts +0 -3
- package/dist/components/BbBadge/BadgeAppendIcon.vue.js +0 -5
- package/dist/components/BbBadge/BadgeAppendIcon.vue_vue_type_script_setup_true_lang.js +0 -22
- package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.d.ts +0 -40
- package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.js +0 -6
- package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue_vue_type_script_setup_true_lang.js +0 -145
- package/dist/components/BbBaseCheckbox/types.d.ts +0 -224
- package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.d.ts +0 -19
- package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.js +0 -6
- package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue_vue_type_script_setup_true_lang.js +0 -190
- package/dist/components/BbBaseCheckboxGroup/types.d.ts +0 -257
- package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.d.ts +0 -43
- package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.js +0 -6
- package/dist/components/BbBaseColorInput/BbBaseColorInput.vue_vue_type_script_setup_true_lang.js +0 -184
- package/dist/components/BbBaseColorInput/types.d.ts +0 -219
- package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue.d.ts +0 -13
- package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue_vue_type_script_setup_true_lang.js +0 -395
- package/dist/components/BbBaseColorPalette/types.d.ts +0 -40
- package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.d.ts +0 -20
- package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.js +0 -6
- package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue_vue_type_script_setup_true_lang.js +0 -407
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.d.ts +0 -47
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.js +0 -5
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue_vue_type_script_setup_true_lang.js +0 -318
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.js +0 -5
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue_vue_type_script_setup_true_lang.js +0 -115
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.js +0 -5
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue_vue_type_script_setup_true_lang.js +0 -116
- package/dist/components/BbBaseDatePicker/types.d.ts +0 -108
- package/dist/components/BbBaseDatePicker/useDatePickerContext.js +0 -11
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.d.ts +0 -31
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.js +0 -6
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue_vue_type_script_setup_true_lang.js +0 -737
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.d.ts +0 -30
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.js +0 -6
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue_vue_type_script_setup_true_lang.js +0 -204
- package/dist/components/BbBaseDatePickerInput/types.d.ts +0 -325
- package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.js +0 -6
- package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue_vue_type_script_setup_true_lang.js +0 -190
- package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.d.ts +0 -52
- package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.js +0 -6
- package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue_vue_type_script_setup_true_lang.js +0 -215
- package/dist/components/BbBaseNumberInput/types.d.ts +0 -211
- package/dist/components/BbBaseRadio/BbBaseRadio.vue.d.ts +0 -33
- package/dist/components/BbBaseRadio/BbBaseRadio.vue_vue_type_script_setup_true_lang.js +0 -113
- package/dist/components/BbBaseRadio/types.d.ts +0 -179
- package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue.d.ts +0 -19
- package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue_vue_type_script_setup_true_lang.js +0 -179
- package/dist/components/BbBaseRadioGroup/types.d.ts +0 -223
- package/dist/components/BbBaseRating/BbBaseRating.vue.d.ts +0 -38
- package/dist/components/BbBaseRating/BbBaseRating.vue.js +0 -6
- package/dist/components/BbBaseRating/BbBaseRating.vue_vue_type_script_setup_true_lang.js +0 -192
- package/dist/components/BbBaseRating/types.d.ts +0 -176
- package/dist/components/BbBaseSelect/BbBaseSelect.vue.d.ts +0 -19
- package/dist/components/BbBaseSelect/BbBaseSelect.vue.js +0 -6
- package/dist/components/BbBaseSelect/BbBaseSelect.vue_vue_type_script_setup_true_lang.js +0 -311
- package/dist/components/BbBaseSelect/types.d.ts +0 -297
- package/dist/components/BbBaseSlider/BbBaseSlider.vue.d.ts +0 -35
- package/dist/components/BbBaseSlider/BbBaseSlider.vue.js +0 -6
- package/dist/components/BbBaseSlider/BbBaseSlider.vue_vue_type_script_setup_true_lang.js +0 -340
- package/dist/components/BbBaseSlider/types.d.ts +0 -200
- package/dist/components/BbBaseSwitch/BbBaseSwitch.vue.d.ts +0 -35
- package/dist/components/BbBaseSwitch/BbBaseSwitch.vue_vue_type_script_setup_true_lang.js +0 -146
- package/dist/components/BbBaseSwitch/types.d.ts +0 -10
- package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.d.ts +0 -19
- package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.js +0 -6
- package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue_vue_type_script_setup_true_lang.js +0 -190
- package/dist/components/BbBaseSwitchGroup/types.d.ts +0 -8
- package/dist/components/BbBaseTag/BbBaseTag.vue.d.ts +0 -50
- package/dist/components/BbBaseTag/BbBaseTag.vue.js +0 -6
- package/dist/components/BbBaseTag/BbBaseTag.vue_vue_type_script_setup_true_lang.js +0 -266
- package/dist/components/BbBaseTag/types.d.ts +0 -160
- package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.d.ts +0 -45
- package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.js +0 -6
- package/dist/components/BbBaseTextInput/BbBaseTextInput.vue_vue_type_script_setup_true_lang.js +0 -200
- package/dist/components/BbBaseTextInput/types.d.ts +0 -209
- package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.d.ts +0 -39
- package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.js +0 -6
- package/dist/components/BbBaseTextarea/BbBaseTextarea.vue_vue_type_script_setup_true_lang.js +0 -187
- package/dist/components/BbBaseTextarea/types.d.ts +0 -170
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.d.ts +0 -27
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.js +0 -6
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue_vue_type_script_setup_true_lang.js +0 -519
- package/dist/components/BbBaseTimePickerInput/types.d.ts +0 -151
- package/dist/components/BbTabs/BbTabsPanes.vue.d.ts +0 -16
- package/dist/components/BbTabs/BbTabsPanes.vue_vue_type_script_setup_true_lang.js +0 -35
- package/dist/components/CommonInputWrapper/CommonInputWrapper.vue.js +0 -6
- package/dist/components/CommonInputWrapper/CommonInputWrapper.vue_vue_type_script_setup_true_lang.js +0 -107
- package/dist/confirm-variants.d.ts +0 -17
- package/dist/dropdown-item-variants.d.ts +0 -17
- package/dist/i18n/index.js +0 -27
- package/dist/indicator-variants.d.ts +0 -20
- package/dist/locale-registry.d.ts +0 -37
- package/dist/toast-variants.d.ts +0 -20
- package/dist/tooltip-variants.d.ts +0 -17
- package/dist/types/InputDirection.d.ts +0 -15
- package/dist/validated/BbCheckbox.vue.d.ts +0 -29
- package/dist/validated/BbCheckbox.vue.js +0 -5
- package/dist/validated/BbCheckbox.vue_vue_type_script_setup_true_lang.js +0 -75
- package/dist/validated/BbCheckboxGroup.vue.d.ts +0 -34
- package/dist/validated/BbCheckboxGroup.vue.js +0 -5
- package/dist/validated/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +0 -82
- package/dist/validated/BbColorInput.vue.d.ts +0 -37
- package/dist/validated/BbColorInput.vue.js +0 -5
- package/dist/validated/BbColorInput.vue_vue_type_script_setup_true_lang.js +0 -75
- package/dist/validated/BbDatePickerInput.vue.d.ts +0 -41
- package/dist/validated/BbDatePickerInput.vue.js +0 -5
- package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +0 -90
- package/dist/validated/BbDropzone.vue.d.ts +0 -24
- package/dist/validated/BbDropzone.vue.js +0 -5
- package/dist/validated/BbDropzone.vue_vue_type_script_setup_true_lang.js +0 -45
- package/dist/validated/BbForm.vue.d.ts +0 -28
- package/dist/validated/BbForm.vue_vue_type_script_setup_true_lang.js +0 -42
- package/dist/validated/BbNumberInput.vue.d.ts +0 -36
- package/dist/validated/BbNumberInput.vue.js +0 -5
- package/dist/validated/BbNumberInput.vue_vue_type_script_setup_true_lang.js +0 -72
- package/dist/validated/BbRadioGroup.vue.d.ts +0 -34
- package/dist/validated/BbRadioGroup.vue.js +0 -5
- package/dist/validated/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +0 -78
- package/dist/validated/BbRating.vue.d.ts +0 -30
- package/dist/validated/BbRating.vue.js +0 -5
- package/dist/validated/BbRating.vue_vue_type_script_setup_true_lang.js +0 -63
- package/dist/validated/BbSelect.vue.d.ts +0 -46
- package/dist/validated/BbSelect.vue.js +0 -5
- package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +0 -109
- package/dist/validated/BbSlider.vue.d.ts +0 -36
- package/dist/validated/BbSlider.vue.js +0 -5
- package/dist/validated/BbSlider.vue_vue_type_script_setup_true_lang.js +0 -69
- package/dist/validated/BbSwitch.vue.d.ts +0 -29
- package/dist/validated/BbSwitch.vue.js +0 -5
- package/dist/validated/BbSwitch.vue_vue_type_script_setup_true_lang.js +0 -75
- package/dist/validated/BbSwitchGroup.vue.d.ts +0 -34
- package/dist/validated/BbSwitchGroup.vue.js +0 -5
- package/dist/validated/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +0 -82
- package/dist/validated/BbTag.vue.d.ts +0 -36
- package/dist/validated/BbTag.vue.js +0 -5
- package/dist/validated/BbTag.vue_vue_type_script_setup_true_lang.js +0 -72
- package/dist/validated/BbTextInput.vue.d.ts +0 -36
- package/dist/validated/BbTextInput.vue.js +0 -5
- package/dist/validated/BbTextInput.vue_vue_type_script_setup_true_lang.js +0 -72
- package/dist/validated/BbTextarea.vue.d.ts +0 -36
- package/dist/validated/BbTextarea.vue.js +0 -5
- package/dist/validated/BbTextarea.vue_vue_type_script_setup_true_lang.js +0 -70
- package/dist/validated/BbTimePickerInput.vue.d.ts +0 -37
- package/dist/validated/BbTimePickerInput.vue.js +0 -5
- package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +0 -81
- package/dist/validated/index.d.ts +0 -43
- package/dist/validated/useValidatedField.d.ts +0 -93
- package/dist/validated/useValidatedField.js +0 -51
- package/dist/validated.js +0 -21
- /package/dist/components/{BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.d.ts → BbCalendar/CalendarMonthPanel.vue.d.ts} +0 -0
- /package/dist/components/{BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.d.ts → BbCalendar/CalendarYearPanel.vue.d.ts} +0 -0
- /package/dist/{components/BbBaseDatePicker/typeahead.d.ts → composables/useTypeahead.d.ts} +0 -0
- /package/dist/{components/BbBaseDatePicker/typeahead.js → composables/useTypeahead.js} +0 -0
|
@@ -6,152 +6,404 @@
|
|
|
6
6
|
|
|
7
7
|
```vue
|
|
8
8
|
<template>
|
|
9
|
-
<
|
|
9
|
+
<CommonField
|
|
10
10
|
:id="id"
|
|
11
11
|
class="bb-select"
|
|
12
12
|
:clearable="isClearable"
|
|
13
13
|
:compact="compact"
|
|
14
14
|
:description="description"
|
|
15
|
-
:direction="direction"
|
|
16
15
|
:disabled="disabled"
|
|
17
|
-
:errors="
|
|
16
|
+
:errors="fieldErrors"
|
|
18
17
|
:has-errors="hasErrors"
|
|
19
18
|
:has-value="hasValue"
|
|
20
|
-
:has-
|
|
19
|
+
:has-warnings="hasWarnings"
|
|
21
20
|
:hide-label="hideLabel"
|
|
22
21
|
:hint="hint"
|
|
22
|
+
:input-align="inputAlign"
|
|
23
23
|
:label="label"
|
|
24
|
+
:label-align="labelAlign"
|
|
24
25
|
:label-mode="resolvedLabelMode"
|
|
25
26
|
:label-position="labelPosition"
|
|
27
|
+
:layout="layout"
|
|
26
28
|
:loading="loading"
|
|
27
29
|
:mobile="isMobile"
|
|
28
|
-
:model-value="modelValue"
|
|
29
30
|
:name="name"
|
|
30
|
-
:
|
|
31
|
+
:passthrough="passthrough"
|
|
32
|
+
:readonly="fieldReadonly"
|
|
31
33
|
:reverse="reverse"
|
|
34
|
+
:show-asterisk="showAsterisk"
|
|
32
35
|
:show-hint="showHint"
|
|
33
36
|
:warnings="warnings"
|
|
37
|
+
v-bind="passthrough.forwardAttrs"
|
|
34
38
|
>
|
|
35
39
|
<template #label="data"><slot name="label" v-bind="data"></slot></template>
|
|
36
|
-
<template
|
|
37
|
-
|
|
38
|
-
|
|
40
|
+
<template v-if="$slots.description" #description="data"
|
|
41
|
+
><slot name="description" v-bind="data"></slot
|
|
42
|
+
></template>
|
|
43
|
+
<template
|
|
44
|
+
#input="{
|
|
45
|
+
id: fieldId,
|
|
46
|
+
hasErrors: fieldHasErrors,
|
|
47
|
+
hasWarnings: fieldHasWarnings,
|
|
48
|
+
ariaDescribedby,
|
|
49
|
+
}"
|
|
50
|
+
>
|
|
51
|
+
<BbSelectPopover
|
|
52
|
+
:id="fieldId"
|
|
39
53
|
:adaptive="adaptive"
|
|
40
|
-
:
|
|
54
|
+
:anchor="wrapperRef"
|
|
41
55
|
:aria-describedby="ariaDescribedby"
|
|
56
|
+
:aria-invalid="fieldHasErrors || undefined"
|
|
42
57
|
:autocomplete="autocomplete"
|
|
43
|
-
:autofocus="autofocus"
|
|
44
|
-
:clearable="clearable"
|
|
45
|
-
:comma="comma"
|
|
46
58
|
:compact="compact"
|
|
47
59
|
:dependencies="dependencies"
|
|
48
60
|
:deps-debounce-time="depsDebounceTime"
|
|
49
61
|
:disable-writing="disableWriting"
|
|
50
62
|
:disabled="disabled"
|
|
63
|
+
:empty-text="emptyText"
|
|
51
64
|
:enforce-coherence="enforceCoherence"
|
|
65
|
+
:failed-text="failedText"
|
|
52
66
|
:filter-by="Array.isArray(filterBy) ? filterBy : undefined"
|
|
53
67
|
:group-by="groupBy"
|
|
54
|
-
:has-errors="hasErrors"
|
|
55
|
-
:has-warning="hasWarning"
|
|
56
68
|
:header-height="headerHeight"
|
|
57
69
|
:item-height="itemHeight"
|
|
70
|
+
:item-props="itemProps"
|
|
58
71
|
:item-text="itemText"
|
|
59
72
|
:item-value="itemValue"
|
|
60
73
|
:items="items"
|
|
61
74
|
:loading="loading"
|
|
62
75
|
:loading-text="loadingText"
|
|
63
76
|
:max="max"
|
|
64
|
-
:
|
|
65
|
-
:model-value="modelValue"
|
|
77
|
+
:model-value="fieldModel"
|
|
66
78
|
:model-value-debounce-time="modelValueDebounceTime"
|
|
67
79
|
:multiple="multiple"
|
|
68
|
-
:
|
|
69
|
-
:
|
|
70
|
-
:
|
|
71
|
-
:placeholder="placeholder"
|
|
72
|
-
:prefill="prefill"
|
|
73
|
-
:prepend:icon="props['prepend:icon']"
|
|
80
|
+
:off-canvas-props="resolvedOffCanvasProps"
|
|
81
|
+
:prefill="computedPrefill"
|
|
82
|
+
:pt="popoverPt()"
|
|
74
83
|
:query-debounce-time="queryDebounceTime"
|
|
75
|
-
:readonly="
|
|
76
|
-
:required="required"
|
|
84
|
+
:readonly="fieldReadonly"
|
|
77
85
|
:selectable="selectable"
|
|
78
|
-
:selected-labels-fn="selectedLabelsFn"
|
|
79
86
|
:stash="stash"
|
|
80
87
|
:transition-duration="transitionDuration"
|
|
81
|
-
|
|
88
|
+
width="100%"
|
|
89
|
+
v-bind="popoverListeners()"
|
|
82
90
|
>
|
|
91
|
+
<template
|
|
92
|
+
#activator="{
|
|
93
|
+
props: activatorProps,
|
|
94
|
+
shown,
|
|
95
|
+
loading: activatorLoading,
|
|
96
|
+
text,
|
|
97
|
+
selectedOptions,
|
|
98
|
+
clear,
|
|
99
|
+
query,
|
|
100
|
+
focus,
|
|
101
|
+
close,
|
|
102
|
+
toggle,
|
|
103
|
+
}"
|
|
104
|
+
>
|
|
105
|
+
<CommonFieldInput
|
|
106
|
+
ref="wrapperRef"
|
|
107
|
+
:active="shown"
|
|
108
|
+
:append:icon="appendIcon"
|
|
109
|
+
class="bb-select__field"
|
|
110
|
+
:class="{
|
|
111
|
+
'bb-select__field--shown': shown,
|
|
112
|
+
'bb-select__field--disabled': disabled,
|
|
113
|
+
'bb-select__field--readonly': fieldReadonly,
|
|
114
|
+
}"
|
|
115
|
+
:clearable="clearable"
|
|
116
|
+
:compact="compact"
|
|
117
|
+
:disabled="disabled"
|
|
118
|
+
:has-errors="fieldHasErrors"
|
|
119
|
+
:has-value="hasValue"
|
|
120
|
+
:has-warnings="fieldHasWarnings"
|
|
121
|
+
:loading="activatorLoading"
|
|
122
|
+
:passthrough="boxRowPassthrough(activatorLoading)"
|
|
123
|
+
:prepend:icon="declaredProps['prepend:icon']"
|
|
124
|
+
:readonly="fieldReadonly"
|
|
125
|
+
:variant="variant"
|
|
126
|
+
@click:clear="
|
|
127
|
+
() => {
|
|
128
|
+
clear();
|
|
129
|
+
nextTick(refocusActivator);
|
|
130
|
+
}
|
|
131
|
+
"
|
|
132
|
+
@container:click="toggle"
|
|
133
|
+
>
|
|
134
|
+
<!-- The activator input is a transparent overlay: its own value stays
|
|
135
|
+
empty (the visible face is this span), so the resolved selection must
|
|
136
|
+
reach AT through the name — label + selection node (below), the
|
|
137
|
+
button-select labelling pattern. aria-valuetext is not supported on
|
|
138
|
+
the combobox role, so it cannot be the value channel. -->
|
|
139
|
+
<span
|
|
140
|
+
:id="`${fieldId}__value`"
|
|
141
|
+
ref="valueRef"
|
|
142
|
+
class="bb-select__value"
|
|
143
|
+
>
|
|
144
|
+
<!-- eslint-disable vue/attributes-order -- `pt` binds LAST so a consumer listener runs after ours (PASSTHROUGH.md T17) -->
|
|
145
|
+
<input
|
|
146
|
+
:id="fieldId"
|
|
147
|
+
:aria-labelledby="`${fieldId}__label ${fieldId}__selection`"
|
|
148
|
+
:aria-readonly="fieldReadonly || undefined"
|
|
149
|
+
:aria-required="activatorAriaRequired"
|
|
150
|
+
:autofocus="autofocus"
|
|
151
|
+
class="bb-select__activator"
|
|
152
|
+
:disabled="disabled"
|
|
153
|
+
type="button"
|
|
154
|
+
v-bind="
|
|
155
|
+
mergeProps(
|
|
156
|
+
activatorProps,
|
|
157
|
+
passthrough.part('activator', { loading: activatorLoading })
|
|
158
|
+
)
|
|
159
|
+
"
|
|
160
|
+
/>
|
|
161
|
+
<!-- eslint-enable vue/attributes-order -->
|
|
162
|
+
|
|
163
|
+
<template v-if="multiple">
|
|
164
|
+
<span
|
|
165
|
+
v-if="usesOverflowCollapse || !isCollapsed"
|
|
166
|
+
ref="chipsContainerRef"
|
|
167
|
+
class="bb-select__chips-row"
|
|
168
|
+
:class="{
|
|
169
|
+
'bb-select__chips-row--hidden': isCollapsed,
|
|
170
|
+
'bb-select__chips-row--chips':
|
|
171
|
+
!comma && !!selectedOptions.length,
|
|
172
|
+
}"
|
|
173
|
+
>
|
|
174
|
+
<template v-if="comma">
|
|
175
|
+
<!-- eslint-disable vue/attributes-order -- `pt` binds LAST so a consumer listener runs after ours (PASSTHROUGH.md T17) -->
|
|
176
|
+
<span
|
|
177
|
+
v-for="item in selectedOptions"
|
|
178
|
+
:key="hash(item.value)"
|
|
179
|
+
class="bb-select__comma"
|
|
180
|
+
v-bind="passthrough.part('comma', {}, item.item)"
|
|
181
|
+
>
|
|
182
|
+
<!-- eslint-enable vue/attributes-order -->
|
|
183
|
+
{{ item.text }}
|
|
184
|
+
</span>
|
|
185
|
+
</template>
|
|
186
|
+
<!-- One badge per selection: removable (clearable) when
|
|
187
|
+
deselection is allowed, non-removable otherwise. The `chip`
|
|
188
|
+
slot replaces the badge outright (the badge below is its
|
|
189
|
+
fallback), so a consumer can render their own chip — a colored
|
|
190
|
+
tag, an avatar row — without reaching for `prepend`. No wrapper
|
|
191
|
+
element around it: the row itself supplies the spacing (see
|
|
192
|
+
`--chips` in index.css), so custom content needs none of our
|
|
193
|
+
class names to sit correctly. -->
|
|
194
|
+
<template v-else>
|
|
195
|
+
<!-- `v-for` on a `<template>`, not on the `<slot>` itself: a
|
|
196
|
+
`key` bound on a slot outlet is passed through as a slot
|
|
197
|
+
PROP. The template renders no element of its own. -->
|
|
198
|
+
<template
|
|
199
|
+
v-for="item in selectedOptions"
|
|
200
|
+
:key="hash(item.value)"
|
|
201
|
+
>
|
|
202
|
+
<slot
|
|
203
|
+
:deselect="() => onChipUnselected(item)"
|
|
204
|
+
:disabled="!canDeselectChips"
|
|
205
|
+
:item="item.item"
|
|
206
|
+
name="chip"
|
|
207
|
+
:text="item.text"
|
|
208
|
+
:value="item.value"
|
|
209
|
+
>
|
|
210
|
+
<BbBadge
|
|
211
|
+
class="bb-select__badge"
|
|
212
|
+
:clearable="canDeselectChips"
|
|
213
|
+
size="lg"
|
|
214
|
+
variant="secondary"
|
|
215
|
+
v-bind="passthrough.part('badge', {}, item.item)"
|
|
216
|
+
@click:clear.stop="onChipUnselected(item)"
|
|
217
|
+
>
|
|
218
|
+
{{ item.text }}
|
|
219
|
+
</BbBadge>
|
|
220
|
+
</slot>
|
|
221
|
+
</template>
|
|
222
|
+
</template>
|
|
223
|
+
</span>
|
|
224
|
+
<span v-if="isCollapsed" class="bb-select__max-reached">
|
|
225
|
+
{{ collapsedSummaryText }}
|
|
226
|
+
</span>
|
|
227
|
+
<!-- Nothing picked: the placeholder, in chips and comma mode alike,
|
|
228
|
+
gone with the first pick (owner ruling Q53.4, 2026-09-24). -->
|
|
229
|
+
<span
|
|
230
|
+
v-if="!selectedOptions.length && placeholder"
|
|
231
|
+
class="bb-select__display-value bb-select__placeholder"
|
|
232
|
+
>
|
|
233
|
+
{{ placeholder }}
|
|
234
|
+
</span>
|
|
235
|
+
</template>
|
|
236
|
+
<span
|
|
237
|
+
v-else
|
|
238
|
+
class="bb-select__display-value"
|
|
239
|
+
:class="[{ 'bb-select__placeholder': !text }]"
|
|
240
|
+
>
|
|
241
|
+
{{ text || placeholder }}
|
|
242
|
+
</span>
|
|
243
|
+
</span>
|
|
244
|
+
<!-- The value half of the activator's accessible name. A node of its
|
|
245
|
+
own, OUTSIDE `__value`, for two reasons. (1) Correctness: every node an
|
|
246
|
+
aria-labelledby chain points at is flattened with name-from-content,
|
|
247
|
+
which descends into nested interactive content — pointing at `__value`
|
|
248
|
+
swept up each chip's ✕ button aria-label, so a three-pick select
|
|
249
|
+
announced "Country Italy Remove France Remove Spain Remove" on every
|
|
250
|
+
focus. (2) `__value` stays the *visible* face and nothing else: it is
|
|
251
|
+
read back as the resolved label (innerText) by the fixture e2e specs,
|
|
252
|
+
so a visually-hidden copy nested inside it would double every reading.
|
|
253
|
+
The chips keep their ✕ buttons — those are real tab stops and must stay
|
|
254
|
+
named; the activator's name just stops reading them. `hidden`, not
|
|
255
|
+
bb-sr-only (Q63.2): read through aria-labelledby (accname 2B), never
|
|
256
|
+
a second, page-text copy of the visible value in browse mode. -->
|
|
257
|
+
<span :id="`${fieldId}__selection`" hidden>{{
|
|
258
|
+
accessibleSelectionText(text)
|
|
259
|
+
}}</span>
|
|
260
|
+
<template #append:outer
|
|
261
|
+
><slot name="append:outer" v-bind="{ query, close }"
|
|
262
|
+
/></template>
|
|
263
|
+
<template #append
|
|
264
|
+
><slot name="append" v-bind="{ query, focus, close }"
|
|
265
|
+
/></template>
|
|
266
|
+
<template v-if="$slots.prefix" #prefix
|
|
267
|
+
><slot name="prefix"
|
|
268
|
+
/></template>
|
|
269
|
+
<template v-if="$slots.suffix" #suffix
|
|
270
|
+
><slot name="suffix"
|
|
271
|
+
/></template>
|
|
272
|
+
<template #prepend
|
|
273
|
+
><slot name="prepend" v-bind="{ query, focus, close }"
|
|
274
|
+
/></template>
|
|
275
|
+
<template #prepend:outer
|
|
276
|
+
><slot name="prepend:outer" v-bind="{ query, close }"
|
|
277
|
+
/></template>
|
|
278
|
+
</CommonFieldInput>
|
|
279
|
+
|
|
280
|
+
<!-- The value channel: `form` (the one native attribute a hidden input
|
|
281
|
+
reads) routes here from the consumer's attributes. -->
|
|
282
|
+
<input
|
|
283
|
+
v-for="input in hiddenInputs"
|
|
284
|
+
:key="input.value"
|
|
285
|
+
v-bind="mergeProps(input, passthrough.controlAttrs)"
|
|
286
|
+
/>
|
|
287
|
+
</template>
|
|
288
|
+
|
|
83
289
|
<template v-if="$slots.header" #header="data">
|
|
84
290
|
<slot name="header" v-bind="data" />
|
|
85
291
|
</template>
|
|
86
292
|
<template v-if="$slots.footer" #footer="data">
|
|
87
293
|
<slot name="footer" v-bind="data" />
|
|
88
294
|
</template>
|
|
89
|
-
<template #append-outer="data">
|
|
90
|
-
<slot name="append-outer" v-bind="data" />
|
|
91
|
-
</template>
|
|
92
|
-
<template #append="data">
|
|
93
|
-
<slot name="append" v-bind="data" />
|
|
94
|
-
</template>
|
|
95
|
-
<template v-if="$slots.prefix" #prefix>
|
|
96
|
-
<slot name="prefix" />
|
|
97
|
-
</template>
|
|
98
|
-
<template v-if="$slots.suffix" #suffix>
|
|
99
|
-
<slot name="suffix" />
|
|
100
|
-
</template>
|
|
101
|
-
<template #prepend="data">
|
|
102
|
-
<slot name="prepend" v-bind="data" />
|
|
103
|
-
</template>
|
|
104
|
-
<template #prepend-outer="data">
|
|
105
|
-
<slot name="prepend-outer" v-bind="data" />
|
|
106
|
-
</template>
|
|
107
295
|
<template #loading="data">
|
|
108
296
|
<slot name="loading" v-bind="data" />
|
|
109
297
|
</template>
|
|
110
|
-
<template #
|
|
111
|
-
<slot name="
|
|
298
|
+
<template #empty="data">
|
|
299
|
+
<slot name="empty" v-bind="data" />
|
|
112
300
|
</template>
|
|
113
|
-
<template #option="data">
|
|
114
|
-
<slot name="option" v-bind="data" />
|
|
301
|
+
<template v-if="$slots.option" #option="data">
|
|
302
|
+
<slot :has-errors="fieldHasErrors" name="option" v-bind="data" />
|
|
115
303
|
</template>
|
|
116
304
|
<template #group="data">
|
|
117
305
|
<slot name="group" v-bind="data" />
|
|
118
306
|
</template>
|
|
119
|
-
</
|
|
307
|
+
</BbSelectPopover>
|
|
120
308
|
</template>
|
|
121
|
-
</
|
|
309
|
+
</CommonField>
|
|
122
310
|
</template>
|
|
123
311
|
|
|
124
312
|
<script setup lang="ts" generic="T = any">
|
|
125
|
-
import {
|
|
126
|
-
|
|
127
|
-
|
|
313
|
+
import {
|
|
314
|
+
computed,
|
|
315
|
+
getCurrentInstance,
|
|
316
|
+
mergeProps,
|
|
317
|
+
nextTick,
|
|
318
|
+
onMounted,
|
|
319
|
+
onUnmounted,
|
|
320
|
+
ref,
|
|
321
|
+
useAttrs,
|
|
322
|
+
watch,
|
|
323
|
+
} from 'vue';
|
|
324
|
+
import CommonField from '../CommonField/CommonField.vue';
|
|
325
|
+
import CommonFieldInput from '../CommonFieldInput/CommonFieldInput.vue';
|
|
326
|
+
import BbBadge from '../BbBadge/BbBadge.vue';
|
|
327
|
+
import BbSelectPopover from '../BbSelectPopover/BbSelectPopover.vue';
|
|
328
|
+
import {
|
|
329
|
+
BB_SELECT_POPOVER_PT,
|
|
330
|
+
type BbSelectResolvedOption,
|
|
331
|
+
} from '../BbSelectPopover/types';
|
|
128
332
|
import { useMobile } from '@/composables/useMobile';
|
|
129
|
-
import {
|
|
333
|
+
import { useConfig } from '@/composables/useConfig';
|
|
334
|
+
import { useFormBinding } from '@/composables/useFormBinding';
|
|
335
|
+
import { useLocale } from '@/composables/useLocale';
|
|
336
|
+
import {
|
|
337
|
+
formControlPtActive,
|
|
338
|
+
SELECT_CONTROL_NATIVE_ATTRS,
|
|
339
|
+
usePassthrough,
|
|
340
|
+
} from '@/composables/usePassthrough';
|
|
130
341
|
import { removedPropsFor } from '@/deprecation/removedProps';
|
|
131
342
|
import { warnRemovedAttrs } from '@/utilities/functions/warnRemovedAttrs';
|
|
343
|
+
import { hasVnodeListener } from '@/utilities/functions/hasVnodeListener';
|
|
132
344
|
import { isNotEmpty } from '@/utilities/functions/isNotEmpty';
|
|
133
|
-
import
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
345
|
+
import { throttle } from '@/utilities/functions/throttle';
|
|
346
|
+
import { when } from '@/utilities/functions/when';
|
|
347
|
+
import { hash } from '@/utilities/functions/hash';
|
|
348
|
+
import { reject } from '@/utilities/functions/reject';
|
|
349
|
+
import chevronDownSvg from '@/assets/svgs/chevron_down.svg?raw';
|
|
350
|
+
import { provideSheetChipAttrs } from '../BbSelectPopover/sheetChipAttrs';
|
|
351
|
+
import {
|
|
352
|
+
BB_SELECT_PT,
|
|
353
|
+
type BbSelectProps,
|
|
354
|
+
type BbSelectEvents,
|
|
355
|
+
type BbSelectSlots,
|
|
356
|
+
} from './types';
|
|
357
|
+
|
|
358
|
+
defineOptions({ inheritAttrs: false });
|
|
359
|
+
const declaredProps = withDefaults(defineProps<BbSelectProps<T>>(), {
|
|
360
|
+
// `undefined` (declared, not omitted) keeps `adaptive` three-state all the
|
|
361
|
+
// way to BbSelectPopover: it disables Vue's absent→`false` Boolean cast
|
|
362
|
+
// (which would pass an explicit `false` and defeat the global
|
|
363
|
+
// `config.adaptive`), while keeping the Boolean type so the valueless
|
|
364
|
+
// `adaptive` shorthand still resolves to `true`.
|
|
141
365
|
adaptive: undefined,
|
|
366
|
+
// Same three-state reason as `adaptive`: an absent `disable-writing` must
|
|
367
|
+
// reach the popover as `undefined` so it can mean `'auto'` there; the
|
|
368
|
+
// valueless shorthand still casts to `true`.
|
|
369
|
+
disableWriting: undefined,
|
|
142
370
|
// Same three-state reason as `adaptive`: `prefill` is typed
|
|
143
371
|
// `boolean | 'interaction'`, so leaving it out lets Vue's absent→`false`
|
|
144
|
-
// Boolean cast
|
|
145
|
-
//
|
|
146
|
-
// `
|
|
147
|
-
//
|
|
372
|
+
// Boolean cast turn "not set" into an explicit `false` — which is how every
|
|
373
|
+
// BbSelect once silently ran with `prefill: false`. Harmless while `false`
|
|
374
|
+
// behaved like `'interaction'`; load-bearing now that `false` means
|
|
375
|
+
// search-first. Unset resolves to `'interaction'` in `computedPrefill`.
|
|
148
376
|
prefill: undefined,
|
|
149
377
|
selectable: true,
|
|
150
378
|
});
|
|
151
379
|
|
|
152
|
-
const
|
|
380
|
+
const declaredEmit = defineEmits<BbSelectEvents>();
|
|
153
381
|
|
|
154
382
|
defineSlots<BbSelectSlots<T>>();
|
|
383
|
+
// Inside a BbForm the field joins it (Q54.4): `props` / `emit` are bound.
|
|
384
|
+
const {
|
|
385
|
+
props,
|
|
386
|
+
emit,
|
|
387
|
+
showAsterisk,
|
|
388
|
+
errors: fieldErrors,
|
|
389
|
+
ariaRequired: fieldAriaRequired,
|
|
390
|
+
required: fieldRequired,
|
|
391
|
+
model: fieldModel,
|
|
392
|
+
readonly: fieldReadonly,
|
|
393
|
+
} = useFormBinding(declaredProps, declaredEmit, {
|
|
394
|
+
componentName: 'BbSelect',
|
|
395
|
+
identifierFallback: () => declaredProps.label,
|
|
396
|
+
leaveOn: 'inactive',
|
|
397
|
+
});
|
|
398
|
+
// Outside a form the binding leaves `required` to the native attribute, but
|
|
399
|
+
// the combobox is an `input type="button"` overlay and `required` only lands
|
|
400
|
+
// on the hidden form inputs: say it to AT on the combobox itself.
|
|
401
|
+
const activatorAriaRequired = computed(
|
|
402
|
+
() => fieldAriaRequired.value ?? (fieldRequired.value ? true : undefined)
|
|
403
|
+
);
|
|
404
|
+
|
|
405
|
+
const config = useConfig();
|
|
406
|
+
const { t } = useLocale();
|
|
155
407
|
|
|
156
408
|
if (process.env.NODE_ENV !== 'production')
|
|
157
409
|
warnRemovedAttrs('BbSelect', removedPropsFor('BbSelect'));
|
|
@@ -159,16 +411,301 @@ if (process.env.NODE_ENV !== 'production')
|
|
|
159
411
|
const active = ref(false);
|
|
160
412
|
const { isMobile } = useMobile();
|
|
161
413
|
const showHint = computed(() => props.persistentHint || active.value);
|
|
162
|
-
const isClearable = computed(
|
|
163
|
-
() => Boolean(props.clearable) && isNotEmpty(props.modelValue)
|
|
164
|
-
);
|
|
165
414
|
const hasValue = computed(() => isNotEmpty(props.modelValue));
|
|
415
|
+
const isClearable = computed(() => Boolean(props.clearable) && hasValue.value);
|
|
166
416
|
const resolvedLabelMode = computed(
|
|
167
417
|
() => props.labelMode ?? config.defaultInputLabelMode
|
|
168
418
|
);
|
|
169
419
|
|
|
170
420
|
/**
|
|
171
|
-
*
|
|
421
|
+
* Whether the options surface is showing: on from the popover's `show` to its
|
|
422
|
+
* `hide`. The `active` event also fires on plain focus, so it cannot stand in.
|
|
423
|
+
*/
|
|
424
|
+
const open = ref(false);
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* Passthrough (plans/passthrough/BbSelect.md). `panel` and `option` are the popover's: their raw entries are forwarded to it under the same words (`panel` → its `panel`, the painted bubble), so `option:selected` is resolved per option where the selection is known.
|
|
428
|
+
*/
|
|
429
|
+
const passthrough = usePassthrough({
|
|
430
|
+
component: 'BbSelect',
|
|
431
|
+
attrs: useAttrs(),
|
|
432
|
+
controlAttrs: SELECT_CONTROL_NATIVE_ATTRS,
|
|
433
|
+
props,
|
|
434
|
+
parts: BB_SELECT_PT.parts,
|
|
435
|
+
states: BB_SELECT_PT.states,
|
|
436
|
+
active: {
|
|
437
|
+
...formControlPtActive(props, () => hasValue.value),
|
|
438
|
+
open: () => open.value,
|
|
439
|
+
},
|
|
440
|
+
});
|
|
441
|
+
|
|
442
|
+
/**
|
|
443
|
+
* The popover's `pt`. The option rows go with every popover state: it
|
|
444
|
+
* resolves `disabled` per option (and every option is disabled when this
|
|
445
|
+
* control is). The surface (`panel`, `sheet`, `input`, `list`) goes WITHOUT `disabled`:
|
|
446
|
+
* the popover has no component-level `disabled`, so an entry handed over
|
|
447
|
+
* under its own word never resolved there — left out of the child's states,
|
|
448
|
+
* it is resolved here, from this control's `disabled` (a family state,
|
|
449
|
+
* component-wide on every part).
|
|
450
|
+
*/
|
|
451
|
+
// The phone sheet lists the selection as chips too; they take `pt:badge`
|
|
452
|
+
// exactly as the field's chips do (Q56.13).
|
|
453
|
+
provideSheetChipAttrs((item) => passthrough.part('badge', {}, item));
|
|
454
|
+
|
|
455
|
+
const popoverPt = () => ({
|
|
456
|
+
...passthrough.forward(
|
|
457
|
+
['panel', 'sheet', 'header', 'footer', 'input', 'list'],
|
|
458
|
+
BB_SELECT_POPOVER_PT.states.filter((state) => state !== 'disabled')
|
|
459
|
+
),
|
|
460
|
+
...passthrough.forward(
|
|
461
|
+
['option', 'itemText', 'itemIcon', 'itemDescription'],
|
|
462
|
+
BB_SELECT_POPOVER_PT.states
|
|
463
|
+
),
|
|
464
|
+
});
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
* The box row's parts inside the activator slot, where the popover's own fetch
|
|
468
|
+
* is known: `loading` there is the `loading` prop OR the items the popover is
|
|
469
|
+
* fetching, so `pt:box:loading` / `pt:spinner:loading` / … follow the spinner.
|
|
470
|
+
* The frame (`root`, `label`, `hint`, `message`) sits outside the slot and
|
|
471
|
+
* follows the `loading` prop only — the popover's internal fetch is not public
|
|
472
|
+
* state. `part()` caches one binding per state combination.
|
|
473
|
+
*/
|
|
474
|
+
const BOX_ROW_PARTS = [
|
|
475
|
+
'box',
|
|
476
|
+
'icon',
|
|
477
|
+
'spinner',
|
|
478
|
+
'clear',
|
|
479
|
+
'prefix',
|
|
480
|
+
'suffix',
|
|
481
|
+
] as const;
|
|
482
|
+
const boxRowPassthrough = (activatorLoading: boolean) =>
|
|
483
|
+
Object.fromEntries(
|
|
484
|
+
BOX_ROW_PARTS.map((part) => [
|
|
485
|
+
part,
|
|
486
|
+
passthrough.part(part, { loading: activatorLoading }),
|
|
487
|
+
])
|
|
488
|
+
);
|
|
489
|
+
|
|
490
|
+
/**
|
|
491
|
+
* Sheet chrome: default the adaptive off-canvas title to the field label.
|
|
492
|
+
* Consumer `offCanvasProps` spread last so an explicit `title` (or any other
|
|
493
|
+
* sheet prop) still wins — same shape as BbSelectPopover's `offcanvasBindings`.
|
|
494
|
+
*/
|
|
495
|
+
const resolvedOffCanvasProps = computed(() => ({
|
|
496
|
+
title: props.label,
|
|
497
|
+
...props.offCanvasProps,
|
|
498
|
+
}));
|
|
499
|
+
|
|
500
|
+
/** The chevron unless the consumer sets their own append icon. */
|
|
501
|
+
const appendIcon = computed(() =>
|
|
502
|
+
props['append:icon'] === undefined ? chevronDownSvg : props['append:icon']
|
|
503
|
+
);
|
|
504
|
+
|
|
505
|
+
/** No cap on the chip labels unless `maxSelectedLabels` is set. */
|
|
506
|
+
const resolvedMaxSelectedLabels = computed(() =>
|
|
507
|
+
props.maxSelectedLabels === undefined ? Infinity : props.maxSelectedLabels
|
|
508
|
+
);
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* A select with a value always prefills (the popover resolves the labels of
|
|
512
|
+
* the selection); without one it follows `prefill`, `'interaction'` unless set.
|
|
513
|
+
*/
|
|
514
|
+
const computedPrefill = computed(() => {
|
|
515
|
+
if (hasValue.value) return true;
|
|
516
|
+
return props.prefill ?? 'interaction';
|
|
517
|
+
});
|
|
518
|
+
|
|
519
|
+
const wrapperRef = ref<InstanceType<typeof CommonFieldInput>>();
|
|
520
|
+
const valueRef = ref<HTMLElement>();
|
|
521
|
+
const chipsContainerRef = ref<HTMLElement>();
|
|
522
|
+
|
|
523
|
+
const selectedCount = computed(() => {
|
|
524
|
+
if (!props.multiple) return 0;
|
|
525
|
+
if (!Array.isArray(props.modelValue)) return props.modelValue != null ? 1 : 0;
|
|
526
|
+
return props.modelValue.length;
|
|
527
|
+
});
|
|
528
|
+
|
|
529
|
+
const usesCountLimit = computed(
|
|
530
|
+
() => resolvedMaxSelectedLabels.value !== Infinity
|
|
531
|
+
);
|
|
532
|
+
const usesOverflowCollapse = computed(() => !usesCountLimit.value);
|
|
533
|
+
const isOverflowing = ref(false);
|
|
534
|
+
const chipsLeftInsetCompensation = ref(0);
|
|
535
|
+
const hasMeasuredChipsInsetCompensation = ref(false);
|
|
536
|
+
const isCollapsed = computed(() => {
|
|
537
|
+
if (selectedCount.value <= 1) return false;
|
|
538
|
+
if (usesCountLimit.value) {
|
|
539
|
+
return selectedCount.value > resolvedMaxSelectedLabels.value;
|
|
540
|
+
}
|
|
541
|
+
return isOverflowing.value;
|
|
542
|
+
});
|
|
543
|
+
|
|
544
|
+
const canDeselectChips = computed(() => !props.disabled && !props.readonly);
|
|
545
|
+
|
|
546
|
+
const onChipUnselected = (option: BbSelectResolvedOption) => {
|
|
547
|
+
if (!canDeselectChips.value) return;
|
|
548
|
+
if (props.multiple) {
|
|
549
|
+
const valueToEmit = reject(props.modelValue, option.value);
|
|
550
|
+
emit('update:modelValue', valueToEmit);
|
|
551
|
+
} else {
|
|
552
|
+
emit('update:modelValue', null);
|
|
553
|
+
}
|
|
554
|
+
};
|
|
555
|
+
|
|
556
|
+
const refocusActivator = () => {
|
|
557
|
+
(wrapperRef.value?.$el as HTMLElement | undefined)
|
|
558
|
+
?.querySelector<HTMLButtonElement>('.bb-select__activator')
|
|
559
|
+
?.focus();
|
|
560
|
+
};
|
|
561
|
+
|
|
562
|
+
const collapsedSummaryText = computed(() => {
|
|
563
|
+
if (props.selectedLabelsFn) {
|
|
564
|
+
return props.selectedLabelsFn(selectedCount.value);
|
|
565
|
+
}
|
|
566
|
+
return t('select.multipleMaxReached', selectedCount.value).value;
|
|
567
|
+
});
|
|
568
|
+
|
|
569
|
+
/**
|
|
570
|
+
* The selection half of the activator's accessible name, mirroring what the
|
|
571
|
+
* control visually shows — `text` is already the ", "-joined display text of
|
|
572
|
+
* every selection (single or multiple), a collapsed row shows its summary
|
|
573
|
+
* instead, and a single select falls back to the placeholder exactly like
|
|
574
|
+
* `__display-value` does. Multiple with nothing picked shows the placeholder
|
|
575
|
+
* too (Q53.4), so it names the empty state the same way.
|
|
576
|
+
*/
|
|
577
|
+
const accessibleSelectionText = (text: string) => {
|
|
578
|
+
if (props.multiple && isCollapsed.value) return collapsedSummaryText.value;
|
|
579
|
+
return text || props.placeholder || '';
|
|
580
|
+
};
|
|
581
|
+
|
|
582
|
+
const resetChipsInsetCompensation = () => {
|
|
583
|
+
hasMeasuredChipsInsetCompensation.value = false;
|
|
584
|
+
chipsLeftInsetCompensation.value = 0;
|
|
585
|
+
};
|
|
586
|
+
|
|
587
|
+
const updateChipsInsetCompensation = () => {
|
|
588
|
+
if (hasMeasuredChipsInsetCompensation.value || !chipsContainerRef.value) {
|
|
589
|
+
return;
|
|
590
|
+
}
|
|
591
|
+
const chipsStyles = getComputedStyle(chipsContainerRef.value);
|
|
592
|
+
const chipsMarginLeft = Number.parseFloat(chipsStyles.marginLeft || '0');
|
|
593
|
+
chipsLeftInsetCompensation.value = Math.max(0, -chipsMarginLeft);
|
|
594
|
+
hasMeasuredChipsInsetCompensation.value = true;
|
|
595
|
+
};
|
|
596
|
+
|
|
597
|
+
const checkOverflow = () => {
|
|
598
|
+
if (
|
|
599
|
+
!usesOverflowCollapse.value ||
|
|
600
|
+
!chipsContainerRef.value ||
|
|
601
|
+
!valueRef.value ||
|
|
602
|
+
selectedCount.value <= 1
|
|
603
|
+
) {
|
|
604
|
+
isOverflowing.value = false;
|
|
605
|
+
return;
|
|
606
|
+
}
|
|
607
|
+
updateChipsInsetCompensation();
|
|
608
|
+
const availableWidth =
|
|
609
|
+
valueRef.value.clientWidth + chipsLeftInsetCompensation.value;
|
|
610
|
+
// clientWidth/scrollWidth are integer-rounded while availableWidth is
|
|
611
|
+
// fractional (the negative chips margin is sub-pixel), so compare with a 1px
|
|
612
|
+
// tolerance — otherwise rounding alone reports a phantom overflow and the row
|
|
613
|
+
// collapses to the summary even with plenty of room.
|
|
614
|
+
isOverflowing.value =
|
|
615
|
+
chipsContainerRef.value.scrollWidth > availableWidth + 1;
|
|
616
|
+
};
|
|
617
|
+
|
|
618
|
+
const scheduleOverflowCheck = throttle(checkOverflow, 100, {
|
|
619
|
+
leading: true,
|
|
620
|
+
trailing: true,
|
|
621
|
+
});
|
|
622
|
+
|
|
623
|
+
let resizeObserver: ResizeObserver | null = null;
|
|
624
|
+
|
|
625
|
+
/**
|
|
626
|
+
* Overflow collapsing is only in play while `maxSelectedLabels` is `Infinity`
|
|
627
|
+
* (otherwise the count limit decides), so the observer follows that flag rather
|
|
628
|
+
* than being wired once at mount: a select that mounts with a finite limit and
|
|
629
|
+
* later has it raised to `Infinity` would otherwise never get an observer at
|
|
630
|
+
* all, leaving `isOverflowing` false forever and the chips row spilling out of
|
|
631
|
+
* the control until the component remounts.
|
|
632
|
+
*/
|
|
633
|
+
const syncOverflowObserver = () => {
|
|
634
|
+
resizeObserver?.disconnect();
|
|
635
|
+
resizeObserver = null;
|
|
636
|
+
if (!usesOverflowCollapse.value) return;
|
|
637
|
+
|
|
638
|
+
resizeObserver = new ResizeObserver(scheduleOverflowCheck);
|
|
639
|
+
if (valueRef.value) resizeObserver.observe(valueRef.value);
|
|
640
|
+
nextTick(() => {
|
|
641
|
+
scheduleOverflowCheck();
|
|
642
|
+
});
|
|
643
|
+
};
|
|
644
|
+
|
|
645
|
+
onMounted(syncOverflowObserver);
|
|
646
|
+
watch(usesOverflowCollapse, syncOverflowObserver, { flush: 'post' });
|
|
647
|
+
|
|
648
|
+
onUnmounted(() => {
|
|
649
|
+
resizeObserver?.disconnect();
|
|
650
|
+
scheduleOverflowCheck.cancel();
|
|
651
|
+
});
|
|
652
|
+
|
|
653
|
+
watch(
|
|
654
|
+
() => [props.modelValue, resolvedMaxSelectedLabels.value] as const,
|
|
655
|
+
() => {
|
|
656
|
+
if (!usesOverflowCollapse.value) return;
|
|
657
|
+
nextTick(() => {
|
|
658
|
+
scheduleOverflowCheck();
|
|
659
|
+
});
|
|
660
|
+
}
|
|
661
|
+
);
|
|
662
|
+
|
|
663
|
+
watch(
|
|
664
|
+
() => [props.compact, props.comma, props['prepend:icon']] as const,
|
|
665
|
+
() => {
|
|
666
|
+
if (!usesOverflowCollapse.value) return;
|
|
667
|
+
resetChipsInsetCompensation();
|
|
668
|
+
nextTick(() => {
|
|
669
|
+
scheduleOverflowCheck();
|
|
670
|
+
});
|
|
671
|
+
}
|
|
672
|
+
);
|
|
673
|
+
|
|
674
|
+
const makeInputValue = when(
|
|
675
|
+
(item: unknown) => typeof item !== 'string',
|
|
676
|
+
JSON.stringify
|
|
677
|
+
);
|
|
678
|
+
|
|
679
|
+
// Empty selection (null/undefined/[]) posts NO field — mirroring a native
|
|
680
|
+
// <select multiple> with nothing chosen — instead of the literal "null".
|
|
681
|
+
// Note `required` on input[type=hidden] is barred from constraint validation
|
|
682
|
+
// by the HTML spec; it is kept for form-introspection only.
|
|
683
|
+
const hiddenInputs = computed(() =>
|
|
684
|
+
(props.multiple
|
|
685
|
+
? ([] as any[]).concat(props.modelValue ?? [])
|
|
686
|
+
: [props.modelValue]
|
|
687
|
+
)
|
|
688
|
+
.filter((current) => current !== null && current !== undefined)
|
|
689
|
+
.map((current) => ({
|
|
690
|
+
disabled: props.disabled,
|
|
691
|
+
name: props.name,
|
|
692
|
+
required: props.required,
|
|
693
|
+
type: 'hidden',
|
|
694
|
+
value: makeInputValue(current),
|
|
695
|
+
}))
|
|
696
|
+
);
|
|
697
|
+
|
|
698
|
+
/**
|
|
699
|
+
* The popover's events, re-emitted; focus / active drive the hint and
|
|
700
|
+
* show / hide drive `open`.
|
|
701
|
+
*
|
|
702
|
+
* `option:add` is the exception: forwarded ONLY when the consumer bound it on
|
|
703
|
+
* this select. The popover decides `disable-writing="auto"` off its own vnode
|
|
704
|
+
* props — a creatable select keeps its search field — so an unconditional
|
|
705
|
+
* forward would make every BbSelect look creatable to it. Read at render
|
|
706
|
+
* (`popoverListeners()`), so a conditionally bound listener is seen as it is
|
|
707
|
+
* now; the two objects are prebuilt so the popover's props keep their identity
|
|
708
|
+
* across renders.
|
|
172
709
|
*/
|
|
173
710
|
const eventListeners = {
|
|
174
711
|
onBlur: (event: FocusEvent) => {
|
|
@@ -177,7 +714,6 @@ const eventListeners = {
|
|
|
177
714
|
},
|
|
178
715
|
onChange: (event: Event) => emit('change', event),
|
|
179
716
|
onClick: (event: MouseEvent) => emit('click', event),
|
|
180
|
-
'onOption:add': (text: string) => emit('option:add', text),
|
|
181
717
|
onFocus: (event: FocusEvent) => {
|
|
182
718
|
active.value = true;
|
|
183
719
|
emit('focus', event);
|
|
@@ -186,6 +722,16 @@ const eventListeners = {
|
|
|
186
722
|
active.value = true;
|
|
187
723
|
emit('active');
|
|
188
724
|
},
|
|
725
|
+
onShow: () => {
|
|
726
|
+
open.value = true;
|
|
727
|
+
emit('show');
|
|
728
|
+
},
|
|
729
|
+
onShown: () => emit('shown'),
|
|
730
|
+
onHide: () => {
|
|
731
|
+
open.value = false;
|
|
732
|
+
emit('hide');
|
|
733
|
+
},
|
|
734
|
+
onHidden: () => emit('hidden'),
|
|
189
735
|
onInactive: () => {
|
|
190
736
|
active.value = false;
|
|
191
737
|
emit('inactive');
|
|
@@ -193,6 +739,15 @@ const eventListeners = {
|
|
|
193
739
|
onInput: (event: Event) => emit('input', event),
|
|
194
740
|
'onUpdate:modelValue': (value: any) => emit('update:modelValue', value),
|
|
195
741
|
};
|
|
742
|
+
const eventListenersWithAdd = {
|
|
743
|
+
...eventListeners,
|
|
744
|
+
'onOption:add': (text: string) => emit('option:add', text),
|
|
745
|
+
};
|
|
746
|
+
const instance = getCurrentInstance();
|
|
747
|
+
const popoverListeners = () =>
|
|
748
|
+
hasVnodeListener(instance, 'option:add')
|
|
749
|
+
? eventListenersWithAdd
|
|
750
|
+
: eventListeners;
|
|
196
751
|
</script>
|
|
197
752
|
|
|
198
753
|
<style lang="postcss">
|
|
@@ -203,15 +758,201 @@ const eventListeners = {
|
|
|
203
758
|
## Types
|
|
204
759
|
|
|
205
760
|
```ts
|
|
761
|
+
import type { BbSelectItemProps } from '@/types/ItemProps';
|
|
762
|
+
import type { InputVariantType } from '@/types/InputVariant';
|
|
763
|
+
import type {
|
|
764
|
+
PtNoInfer,
|
|
765
|
+
FormControlPtState,
|
|
766
|
+
PtItemCtx,
|
|
767
|
+
PtItemMap,
|
|
768
|
+
PtItemResult,
|
|
769
|
+
PtValue,
|
|
770
|
+
} from '@/types/passthrough';
|
|
206
771
|
import type { HTMLAttributes, InputHTMLAttributes } from 'vue';
|
|
207
|
-
import type {
|
|
772
|
+
import type { FieldCrossAlign, FieldLayout } from '@/types/FieldLayout';
|
|
208
773
|
import type { ItemAccessor } from '@/types/ItemAccessor';
|
|
774
|
+
import type { BbSelectItemsContext } from '@/types/ItemsProvider';
|
|
209
775
|
import type { IconType } from '@/types/Icon';
|
|
210
|
-
import type { BaseSelectEvents } from '../BbBaseSelect/types';
|
|
211
776
|
import type { BbSelectResolvedOption } from '../BbSelectPopover/types';
|
|
212
777
|
import type { BbOffCanvasProps } from '../BbOffCanvas/types';
|
|
778
|
+
import type { FormFieldProps } from '@/composables/useFormBinding';
|
|
779
|
+
|
|
780
|
+
/**
|
|
781
|
+
* Passthrough parts of `BbSelect` (plans/passthrough/BbSelect.md): the text-
|
|
782
|
+
* control family parts, plus the options surface's, forwarded to its
|
|
783
|
+
* `BbSelectPopover`.
|
|
784
|
+
*
|
|
785
|
+
* Per-item functions: on the instance, an option part (`option`, `itemText`, `itemIcon`, `itemDescription`) and a selection part (`badge`, `comma` — called here, per selected value, with its raw item) also accept `({ item, selected, … }) => PtValue | false | null | undefined` — `item` is the raw item of that option, and every state a boolean beside it, on for it (`selected`, `disabled`, …) — in the `pt` object or the `:pt:<part>` attribute, never on a `<part>:<state>` key and never in the global map or a scope (they ship as JSON). The function travels to the popover with the part and is called there, per option; its result is merged last, after every state entry, through the same deduper; a falsy result leaves the option as it was. See the passthrough guide, _Per-item functions_.
|
|
786
|
+
*
|
|
787
|
+
* @describedBy BbSelectPopoverPtPart
|
|
788
|
+
* @describedBy TextControlPtPart
|
|
789
|
+
* @part root - The field's outer container: the label, the box and the lines
|
|
790
|
+
* under it; a `class` on the component lands here. (The options surface is
|
|
791
|
+
* `panel`.)
|
|
792
|
+
* @part clear - The ✕ in the field that empties the selection (`clearable`) —
|
|
793
|
+
* one node, never a chip's own ✕.
|
|
794
|
+
* @part activator - The button you act on to open the options — the field's
|
|
795
|
+
* control (not a text field: `data-test` fits here, `autocomplete` does
|
|
796
|
+
* not). The chevron is chrome. It is `activator`, not the family's `input`:
|
|
797
|
+
* the field itself is a button (the date / time inputs' trigger is the same
|
|
798
|
+
* word).
|
|
799
|
+
* @part input - The search field inside the options surface, when it shows
|
|
800
|
+
* one (see `disable-writing`) — handed to the `BbSelectPopover` as its own
|
|
801
|
+
* `pt:input`. Its ✕ is chrome.
|
|
802
|
+
* @part panel - The options surface — the popover's painted bubble on
|
|
803
|
+
* desktop, the sheet itself on a phone.
|
|
804
|
+
* @part sheet - The bottom sheet the options open in on a phone only.
|
|
805
|
+
* @part header - The band around your `#header` slot: at the top of the
|
|
806
|
+
* flyout on desktop, the sheet's header on a phone.
|
|
807
|
+
* @part footer - The band around your `#footer` slot: at the bottom of the
|
|
808
|
+
* flyout on desktop, the sheet's footer on a phone.
|
|
809
|
+
* @part badge - Each selected value's `BbBadge` root with `multiple` — a
|
|
810
|
+
* broadcast resolved per value, on the field's chips and on the phone
|
|
811
|
+
* sheet's. The badge's own ✕ is chrome, never `clear`. In the field, not
|
|
812
|
+
* rendered when the `#chip` slot replaces it, nor in `comma` mode; the
|
|
813
|
+
* sheet's chips are always badges.
|
|
814
|
+
* @part comma - Each selected value with `multiple` and `comma` — a broadcast
|
|
815
|
+
* resolved per value.
|
|
816
|
+
*/
|
|
817
|
+
export type BbSelectPtPart =
|
|
818
|
+
| 'root'
|
|
819
|
+
| 'label'
|
|
820
|
+
| 'description'
|
|
821
|
+
| 'message'
|
|
822
|
+
| 'hint'
|
|
823
|
+
| 'box'
|
|
824
|
+
| 'activator'
|
|
825
|
+
| 'input'
|
|
826
|
+
| 'icon'
|
|
827
|
+
| 'spinner'
|
|
828
|
+
| 'prefix'
|
|
829
|
+
| 'suffix'
|
|
830
|
+
| 'clear'
|
|
831
|
+
| 'panel'
|
|
832
|
+
| 'sheet'
|
|
833
|
+
| 'header'
|
|
834
|
+
| 'footer'
|
|
835
|
+
| 'list'
|
|
836
|
+
| 'option'
|
|
837
|
+
| 'itemText'
|
|
838
|
+
| 'itemIcon'
|
|
839
|
+
| 'itemDescription'
|
|
840
|
+
| 'badge'
|
|
841
|
+
| 'comma';
|
|
842
|
+
/** The field and surface parts — they take a `PtValue` only. */
|
|
843
|
+
export type BbSelectFieldPtPart =
|
|
844
|
+
| 'root'
|
|
845
|
+
| 'label'
|
|
846
|
+
| 'description'
|
|
847
|
+
| 'message'
|
|
848
|
+
| 'hint'
|
|
849
|
+
| 'box'
|
|
850
|
+
| 'activator'
|
|
851
|
+
| 'input'
|
|
852
|
+
| 'icon'
|
|
853
|
+
| 'spinner'
|
|
854
|
+
| 'prefix'
|
|
855
|
+
| 'suffix'
|
|
856
|
+
| 'clear'
|
|
857
|
+
| 'panel'
|
|
858
|
+
| 'sheet'
|
|
859
|
+
| 'header'
|
|
860
|
+
| 'footer'
|
|
861
|
+
| 'list';
|
|
862
|
+
/**
|
|
863
|
+
* The option parts and the selection parts — broadcasts resolved per option
|
|
864
|
+
* or per selected value; their base key also takes a per-item function.
|
|
865
|
+
*/
|
|
866
|
+
export type BbSelectOptionPtPart =
|
|
867
|
+
| 'option'
|
|
868
|
+
| 'itemText'
|
|
869
|
+
| 'itemIcon'
|
|
870
|
+
| 'itemDescription'
|
|
871
|
+
| 'badge'
|
|
872
|
+
| 'comma';
|
|
873
|
+
/**
|
|
874
|
+
* Passthrough states of `BbSelect`, true while the matching `--` modifier is on.
|
|
875
|
+
*
|
|
876
|
+
* @state selected - Per node, on `option` and its `item-*` parts: a chosen
|
|
877
|
+
* option.
|
|
878
|
+
* @state disabled - Component-wide while the select is `disabled`; also per
|
|
879
|
+
* node, on `option` and its `item-*` parts: an option that is disabled.
|
|
880
|
+
* @state open - Component-wide: the options surface is showing.
|
|
881
|
+
*/
|
|
882
|
+
export type BbSelectPtState = FormControlPtState | 'open' | 'selected';
|
|
883
|
+
/** The runtime lists the resolver is wired with — kept next to the types so the two cannot drift. */
|
|
884
|
+
export const BB_SELECT_PT = {
|
|
885
|
+
parts: [
|
|
886
|
+
// The family's words with `activator` where the text controls say
|
|
887
|
+
// `input` — BbSelect's control is a button that opens the options;
|
|
888
|
+
// its `input` is the popover's search field.
|
|
889
|
+
'root',
|
|
890
|
+
'label',
|
|
891
|
+
'description',
|
|
892
|
+
'message',
|
|
893
|
+
'hint',
|
|
894
|
+
'box',
|
|
895
|
+
'activator',
|
|
896
|
+
'input',
|
|
897
|
+
'icon',
|
|
898
|
+
'spinner',
|
|
899
|
+
'prefix',
|
|
900
|
+
'suffix',
|
|
901
|
+
'clear',
|
|
902
|
+
'panel',
|
|
903
|
+
'sheet',
|
|
904
|
+
'header',
|
|
905
|
+
'footer',
|
|
906
|
+
'list',
|
|
907
|
+
'option',
|
|
908
|
+
'itemText',
|
|
909
|
+
'itemIcon',
|
|
910
|
+
'itemDescription',
|
|
911
|
+
'badge',
|
|
912
|
+
'comma',
|
|
913
|
+
],
|
|
914
|
+
states: [
|
|
915
|
+
'hasValue',
|
|
916
|
+
'selected',
|
|
917
|
+
'readonly',
|
|
918
|
+
'disabled',
|
|
919
|
+
'warnings',
|
|
920
|
+
'errors',
|
|
921
|
+
'open',
|
|
922
|
+
'loading',
|
|
923
|
+
],
|
|
924
|
+
} as const satisfies {
|
|
925
|
+
parts: readonly BbSelectPtPart[];
|
|
926
|
+
states: readonly BbSelectPtState[];
|
|
927
|
+
};
|
|
213
928
|
|
|
929
|
+
// Spelled INLINE with this component's own unions (Vue's SFC type resolver
|
|
930
|
+
// does not substitute a generic alias's type parameters — PASSTHROUGH.md T20).
|
|
931
|
+
// Two mapped types, never `Partial<Record<…>>`: the lint autofix rewrites one
|
|
932
|
+
// into the other and the SFC resolver reads only the mapped spelling (T23).
|
|
933
|
+
/* eslint-disable @typescript-eslint/consistent-indexed-object-style */
|
|
214
934
|
export type BbSelectProps<T> = {
|
|
935
|
+
[K in
|
|
936
|
+
| `pt:${BbSelectFieldPtPart}`
|
|
937
|
+
| `pt:${BbSelectPtPart}:${BbSelectPtState}`]?: PtValue;
|
|
938
|
+
} & {
|
|
939
|
+
// The option parts also take a per-item function, typed on this select's
|
|
940
|
+
// item — a literal function type, not `PtItemFn` (T23).
|
|
941
|
+
[K in `pt:${BbSelectOptionPtPart}`]?:
|
|
942
|
+
| PtValue
|
|
943
|
+
| ((ctx: PtItemCtx<PtNoInfer<T>, BbSelectPtState>) => PtItemResult);
|
|
944
|
+
} & {
|
|
945
|
+
/* eslint-enable @typescript-eslint/consistent-indexed-object-style */
|
|
946
|
+
/**
|
|
947
|
+
* Passthrough, object form: the same keys as the `pt:*` attributes
|
|
948
|
+
* without the prefix. See the `pt:<part>` row.
|
|
949
|
+
*/
|
|
950
|
+
pt?: PtItemMap<
|
|
951
|
+
BbSelectPtPart,
|
|
952
|
+
BbSelectOptionPtPart,
|
|
953
|
+
BbSelectPtState,
|
|
954
|
+
PtNoInfer<T>
|
|
955
|
+
>;
|
|
215
956
|
/**
|
|
216
957
|
* When `true`, the options panel opens as a bottom off-canvas sheet on mobile
|
|
217
958
|
* viewports instead of a floating popover; on desktop it stays a popover.
|
|
@@ -229,21 +970,27 @@ export type BbSelectProps<T> = {
|
|
|
229
970
|
description?: string;
|
|
230
971
|
|
|
231
972
|
/**
|
|
232
|
-
*
|
|
973
|
+
* Props for the phone sheet (the `BbOffCanvas` that `adaptive` renders on
|
|
974
|
+
* mobile), spread over its defaults. A `pt` inside it styles only the sheet
|
|
975
|
+
* (passthrough guide § Inside the sheet).
|
|
233
976
|
*/
|
|
234
977
|
offCanvasProps?: Partial<BbOffCanvasProps>;
|
|
235
978
|
|
|
236
979
|
/**
|
|
237
|
-
*
|
|
238
|
-
*
|
|
239
|
-
*
|
|
980
|
+
* Hides the panel's search field: `true` everywhere, `'mobile'` /
|
|
981
|
+
* `'desktop'` on that platform only. `'auto'` hides it for an array `items`
|
|
982
|
+
* shorter than the plugin's `autoDisableWritingThreshold` (6), decided per
|
|
983
|
+
* open; never for a provider, nor with an `option:add` listener.
|
|
984
|
+
*
|
|
985
|
+
* @defaultValue `'auto'`
|
|
240
986
|
*/
|
|
241
|
-
disableWriting?: boolean | 'mobile' | 'desktop';
|
|
987
|
+
disableWriting?: boolean | 'mobile' | 'desktop' | 'auto';
|
|
242
988
|
|
|
243
989
|
/**
|
|
244
990
|
* Name of the icon to be added at the end of the input.
|
|
991
|
+
*
|
|
992
|
+
* @defaultValue the chevron-down glyph
|
|
245
993
|
*/
|
|
246
|
-
|
|
247
994
|
'append:icon'?: IconType;
|
|
248
995
|
|
|
249
996
|
/**
|
|
@@ -268,10 +1015,24 @@ export type BbSelectProps<T> = {
|
|
|
268
1015
|
comma?: boolean;
|
|
269
1016
|
|
|
270
1017
|
/**
|
|
271
|
-
*
|
|
1018
|
+
* Compact density. Swaps `--bb-input-h`, `--bb-input-py` and
|
|
1019
|
+
* `--bb-label-spacing-y` for their `-compact` twins on the field, so a
|
|
1020
|
+
* `--bb-input-h` you set on the component is ignored while `compact` is on:
|
|
1021
|
+
* size a compact field with `--bb-input-h-compact` (and
|
|
1022
|
+
* `--bb-input-py-compact`) instead.
|
|
272
1023
|
*/
|
|
273
1024
|
compact?: boolean;
|
|
274
1025
|
|
|
1026
|
+
/**
|
|
1027
|
+
* Visual variant of the field box, with the `BbButton` names and tokens.
|
|
1028
|
+
* Colours only, so a form never reflows; `'ghost'` has no border in any
|
|
1029
|
+
* state, and `'none'` takes no look at all (you own hover, focus and the
|
|
1030
|
+
* states). Register more with the plugin's `inputVariants`.
|
|
1031
|
+
*
|
|
1032
|
+
* @defaultValue `'outline'`
|
|
1033
|
+
*/
|
|
1034
|
+
variant?: InputVariantType;
|
|
1035
|
+
|
|
275
1036
|
/**
|
|
276
1037
|
* Defines an array of dependencies that will trigger actions in the component upon change.
|
|
277
1038
|
*/
|
|
@@ -279,14 +1040,32 @@ export type BbSelectProps<T> = {
|
|
|
279
1040
|
|
|
280
1041
|
/**
|
|
281
1042
|
* Timeout used to debounce response to changes to dependencies.
|
|
1043
|
+
*
|
|
1044
|
+
* @defaultValue `0`
|
|
282
1045
|
*/
|
|
283
1046
|
depsDebounceTime?: number;
|
|
284
1047
|
|
|
285
1048
|
/**
|
|
286
|
-
*
|
|
287
|
-
*
|
|
1049
|
+
* How the label and the input sit together: `'vertical'`, `'horizontal'` (50/50),
|
|
1050
|
+
* `'auto'`, `'label-fill'` (the label takes the free space, the input keeps
|
|
1051
|
+
* its size), `'input-fill'` (the other way round), or a two-word ratio
|
|
1052
|
+
* pattern like `'xx xxxxx'`.
|
|
1053
|
+
*/
|
|
1054
|
+
layout?: FieldLayout;
|
|
1055
|
+
|
|
1056
|
+
/**
|
|
1057
|
+
* Vertical position of the label block in a side-by-side row; not
|
|
1058
|
+
* `labelPosition`, the horizontal one. Omitted, the label's first line
|
|
1059
|
+
* meets the control's.
|
|
1060
|
+
*/
|
|
1061
|
+
labelAlign?: FieldCrossAlign;
|
|
1062
|
+
|
|
1063
|
+
/**
|
|
1064
|
+
* Vertical position of the control in a side-by-side row; not
|
|
1065
|
+
* `inputPosition`, the horizontal one. Omitted, the control's first line
|
|
1066
|
+
* meets the label's.
|
|
288
1067
|
*/
|
|
289
|
-
|
|
1068
|
+
inputAlign?: FieldCrossAlign;
|
|
290
1069
|
|
|
291
1070
|
/**
|
|
292
1071
|
* Disables the component.
|
|
@@ -294,25 +1073,23 @@ export type BbSelectProps<T> = {
|
|
|
294
1073
|
disabled?: boolean;
|
|
295
1074
|
|
|
296
1075
|
/**
|
|
297
|
-
*
|
|
298
|
-
*
|
|
1076
|
+
* After every successful load that is not a search, removes the picks the
|
|
1077
|
+
* fetched rows do not contain (a single model resets to `null`). A `stash`
|
|
1078
|
+
* does not count; a search or a failed load never prunes.
|
|
299
1079
|
*/
|
|
300
1080
|
enforceCoherence?: boolean;
|
|
301
1081
|
|
|
302
1082
|
/**
|
|
303
|
-
*
|
|
304
|
-
*
|
|
305
|
-
*
|
|
306
|
-
* `aria-describedby`, so the reason the field is invalid is re-read whenever
|
|
307
|
-
* the control regains focus.
|
|
1083
|
+
* Error messages under the field, a string or string array. They render in
|
|
1084
|
+
* an `aria-live="polite"` region and are referenced first from the
|
|
1085
|
+
* control's `aria-describedby`, so they are re-read when it regains focus.
|
|
308
1086
|
*/
|
|
309
1087
|
errors?: string | string[];
|
|
310
1088
|
|
|
311
1089
|
/**
|
|
312
|
-
*
|
|
313
|
-
*
|
|
314
|
-
*
|
|
315
|
-
* To disable filtering entirely set `disableWriting` so the user cannot type a query.
|
|
1090
|
+
* Item paths searched instead of the display text when the user types
|
|
1091
|
+
* (empty: the display text). To turn filtering off, hide the field with
|
|
1092
|
+
* `disableWriting`.
|
|
316
1093
|
*
|
|
317
1094
|
* @defaultValue `[]`
|
|
318
1095
|
*/
|
|
@@ -330,11 +1107,10 @@ export type BbSelectProps<T> = {
|
|
|
330
1107
|
hasErrors?: boolean;
|
|
331
1108
|
|
|
332
1109
|
/**
|
|
333
|
-
* Warning messages
|
|
334
|
-
*
|
|
335
|
-
*
|
|
336
|
-
*
|
|
337
|
-
* `aria-describedby`, after any errors and before the description/hint.
|
|
1110
|
+
* Warning messages under the field, a string or string array: amber, in
|
|
1111
|
+
* their own `aria-live` region, and in the control's `aria-describedby`
|
|
1112
|
+
* after the errors. A non-empty list implies the warning state; errors win
|
|
1113
|
+
* when both are set.
|
|
338
1114
|
*/
|
|
339
1115
|
warnings?: string | string[];
|
|
340
1116
|
|
|
@@ -342,7 +1118,7 @@ export type BbSelectProps<T> = {
|
|
|
342
1118
|
* Define if the component should be in a warning state.
|
|
343
1119
|
* Same chrome as errors with `--bb-warn`; errors take priority.
|
|
344
1120
|
*/
|
|
345
|
-
|
|
1121
|
+
hasWarnings?: boolean;
|
|
346
1122
|
|
|
347
1123
|
/**
|
|
348
1124
|
* Visually hides the label of the input while maintaining accessibility.
|
|
@@ -355,17 +1131,18 @@ export type BbSelectProps<T> = {
|
|
|
355
1131
|
hint?: string;
|
|
356
1132
|
|
|
357
1133
|
/**
|
|
358
|
-
* The
|
|
1134
|
+
* The `id` of the native control; the label's `for` and the description
|
|
1135
|
+
* and message ids derive from it. Generated when omitted.
|
|
359
1136
|
*/
|
|
360
1137
|
id?: HTMLAttributes['id'];
|
|
361
1138
|
|
|
362
1139
|
/**
|
|
363
|
-
*
|
|
1140
|
+
* The options: an array, or a provider called with a
|
|
1141
|
+
* ``BbSelectItemsContext`` (`query`, `reason`, `modelValue`, `signal`),
|
|
1142
|
+
* sync or async. Branch on `reason !== 'search'` to resolve the selection
|
|
1143
|
+
* by id. A provider fails by THROWING, never by returning `[]`.
|
|
364
1144
|
*/
|
|
365
|
-
items:
|
|
366
|
-
| T[]
|
|
367
|
-
| ((query: string, prefill: boolean, modelValue: any) => Promise<T[]>)
|
|
368
|
-
| ((query: string, prefill: boolean, modelValue: any) => T[]);
|
|
1145
|
+
items: T[] | ((context: BbSelectItemsContext) => T[] | Promise<T[]>);
|
|
369
1146
|
|
|
370
1147
|
/**
|
|
371
1148
|
* Height of group headers in the listbox (px). Defaults to 32px (24px
|
|
@@ -386,12 +1163,28 @@ export type BbSelectProps<T> = {
|
|
|
386
1163
|
/**
|
|
387
1164
|
* Defines a path that returns a property of the object to use as text or a function
|
|
388
1165
|
* that returns a string.
|
|
1166
|
+
*
|
|
1167
|
+
* Unset: own `label`, else `text` (`{ label, value }` needs no accessor).
|
|
1168
|
+
*
|
|
1169
|
+
* @defaultValue own `label`, else `text`, else `JSON.stringify(item)`
|
|
389
1170
|
*/
|
|
390
1171
|
itemText?: ItemAccessor<T, string>;
|
|
391
1172
|
|
|
1173
|
+
/**
|
|
1174
|
+
* ADDITIONAL row fields, never the text or value: `description` (a muted
|
|
1175
|
+
* line under the label), `prepend:icon`, `append:icon`. An object of paths
|
|
1176
|
+
* or getters per field, or a function of the item. Nothing is read
|
|
1177
|
+
* implicitly, and none shows in the trigger or the chips.
|
|
1178
|
+
*/
|
|
1179
|
+
itemProps?: BbSelectItemProps<T>;
|
|
1180
|
+
|
|
392
1181
|
/**
|
|
393
1182
|
* Defines a path that returns a property of the object to use as value or a function
|
|
394
1183
|
* that returns any value.
|
|
1184
|
+
*
|
|
1185
|
+
* Unset: own `value`, even `null`.
|
|
1186
|
+
*
|
|
1187
|
+
* @defaultValue own `value`, else the whole item
|
|
395
1188
|
*/
|
|
396
1189
|
itemValue?: ItemAccessor<T>;
|
|
397
1190
|
|
|
@@ -427,16 +1220,21 @@ export type BbSelectProps<T> = {
|
|
|
427
1220
|
|
|
428
1221
|
/**
|
|
429
1222
|
* Maximum number of labels shown before collapsing to a count summary.
|
|
1223
|
+
* Unset, the labels collapse only when they overflow the field.
|
|
1224
|
+
*
|
|
1225
|
+
* @defaultValue `Infinity`
|
|
430
1226
|
*/
|
|
431
1227
|
maxSelectedLabels?: number;
|
|
432
1228
|
|
|
433
1229
|
/**
|
|
434
1230
|
* Used by v-model. Can be any serializable type.
|
|
435
1231
|
*/
|
|
436
|
-
modelValue
|
|
1232
|
+
modelValue?: any;
|
|
437
1233
|
|
|
438
1234
|
/**
|
|
439
1235
|
* Timeout used to debounce response to changes to modelValue.
|
|
1236
|
+
*
|
|
1237
|
+
* @defaultValue `0`
|
|
440
1238
|
*/
|
|
441
1239
|
modelValueDebounceTime?: number;
|
|
442
1240
|
|
|
@@ -453,7 +1251,15 @@ export type BbSelectProps<T> = {
|
|
|
453
1251
|
/**
|
|
454
1252
|
* String displayed when there are no items to display.
|
|
455
1253
|
*/
|
|
456
|
-
|
|
1254
|
+
emptyText?: string;
|
|
1255
|
+
|
|
1256
|
+
/**
|
|
1257
|
+
* String displayed in the empty state while the latest load FAILED (the
|
|
1258
|
+
* provider threw): the twin of `emptyText` for that case.
|
|
1259
|
+
*
|
|
1260
|
+
* @defaultValue the localized `common.failedText` ("Couldn't load items")
|
|
1261
|
+
*/
|
|
1262
|
+
failedText?: string;
|
|
457
1263
|
|
|
458
1264
|
/**
|
|
459
1265
|
* Keeps the hint displayed.
|
|
@@ -461,21 +1267,16 @@ export type BbSelectProps<T> = {
|
|
|
461
1267
|
persistentHint?: boolean;
|
|
462
1268
|
|
|
463
1269
|
/**
|
|
464
|
-
*
|
|
1270
|
+
* Text shown in the field while nothing is picked (an empty list has
|
|
1271
|
+
* `emptyText`).
|
|
465
1272
|
*/
|
|
466
1273
|
placeholder?: InputHTMLAttributes['placeholder'];
|
|
467
1274
|
|
|
468
1275
|
/**
|
|
469
|
-
*
|
|
470
|
-
* `
|
|
471
|
-
*
|
|
472
|
-
*
|
|
473
|
-
* panel shows a "search to begin" hint meanwhile.
|
|
474
|
-
*
|
|
475
|
-
* `false` falls back to loading on open when the user could not otherwise
|
|
476
|
-
* reach the options: array `items` (resolved on mount regardless), or
|
|
477
|
-
* `disable-writing` (no search field to type into). When the input has a
|
|
478
|
-
* value, it always loads immediately so the selection's text can render.
|
|
1276
|
+
* When the options first load: `'interaction'` on first open, `true` on
|
|
1277
|
+
* mount, `false` only once the user types (on open with
|
|
1278
|
+
* `disable-writing`). An array `items` or a seeded model always loads at
|
|
1279
|
+
* once.
|
|
479
1280
|
*
|
|
480
1281
|
* @defaultValue `'interaction'`
|
|
481
1282
|
*/
|
|
@@ -494,6 +1295,8 @@ export type BbSelectProps<T> = {
|
|
|
494
1295
|
|
|
495
1296
|
/**
|
|
496
1297
|
* Time to wait when the user stops writing in the input before querying data.
|
|
1298
|
+
*
|
|
1299
|
+
* @defaultValue `500`
|
|
497
1300
|
*/
|
|
498
1301
|
queryDebounceTime?: number;
|
|
499
1302
|
|
|
@@ -524,18 +1327,63 @@ export type BbSelectProps<T> = {
|
|
|
524
1327
|
selectedLabelsFn?: (count: number) => string;
|
|
525
1328
|
|
|
526
1329
|
/**
|
|
527
|
-
*
|
|
1330
|
+
* Keeps picked options named across searches: a pick stays resolvable (its
|
|
1331
|
+
* chip keeps its text) when a later search or a failed load no longer
|
|
1332
|
+
* returns it. It follows the model, and does not keep a pick valid:
|
|
1333
|
+
* `enforce-coherence` still prunes it.
|
|
528
1334
|
*/
|
|
529
1335
|
stash?: boolean;
|
|
530
1336
|
|
|
531
1337
|
/**
|
|
532
1338
|
* How long the transition has to last in milliseconds.
|
|
1339
|
+
*
|
|
1340
|
+
* @defaultValue `250`
|
|
533
1341
|
*/
|
|
534
1342
|
transitionDuration?: number;
|
|
535
|
-
}
|
|
1343
|
+
} & FormFieldProps<any>;
|
|
536
1344
|
|
|
537
1345
|
/** Re-export for consumers importing events type from BbSelect. */
|
|
538
|
-
export type BbSelectEvents =
|
|
1346
|
+
export type BbSelectEvents = {
|
|
1347
|
+
/** Emitted as soon as the options surface starts to open (the popover, or the sheet on a phone). */
|
|
1348
|
+
(e: 'show'): void;
|
|
1349
|
+
/** Emitted once the options surface is open and its open transition has finished. */
|
|
1350
|
+
(e: 'shown'): void;
|
|
1351
|
+
/** Emitted as soon as the options surface starts to close. */
|
|
1352
|
+
(e: 'hide'): void;
|
|
1353
|
+
/** Emitted once the options surface has finished closing. */
|
|
1354
|
+
(e: 'hidden'): void;
|
|
1355
|
+
/** Emitted when the activator loses focus. Forwards the original DOM `FocusEvent`. */
|
|
1356
|
+
(e: 'blur', event: FocusEvent): void;
|
|
1357
|
+
/** Emitted on the native `change` event. Forwards the original DOM `Event`. */
|
|
1358
|
+
(e: 'change', event: Event): void;
|
|
1359
|
+
/** Emitted when the select becomes active (focus enters it). */
|
|
1360
|
+
(e: 'active'): void;
|
|
1361
|
+
/** Emitted when the activator is clicked. Forwards the original DOM `MouseEvent`. */
|
|
1362
|
+
(e: 'click', event: MouseEvent): void;
|
|
1363
|
+
/** Emitted when the activator receives focus. Forwards the original DOM `FocusEvent`. */
|
|
1364
|
+
(e: 'focus', event: FocusEvent): void;
|
|
1365
|
+
/** Emitted when focus moves outside the whole select after it was active. */
|
|
1366
|
+
(e: 'inactive'): void;
|
|
1367
|
+
/** Emitted on native `input` events from the search field. Forwards the DOM `Event`. */
|
|
1368
|
+
(e: 'input', event: Event): void;
|
|
1369
|
+
(e: 'update:modelValue', value: any): void;
|
|
1370
|
+
/**
|
|
1371
|
+
* Emitted with the typed text when the user confirms a value that is not in
|
|
1372
|
+
* the list (Enter in the search field). Binding it keeps the search field
|
|
1373
|
+
* writable, which makes the select creatable.
|
|
1374
|
+
*/
|
|
1375
|
+
(e: 'option:add', text: string): void;
|
|
1376
|
+
};
|
|
1377
|
+
|
|
1378
|
+
/** Props exposed by the `description` slot. */
|
|
1379
|
+
export type BbSelectDescriptionSlotProps = {
|
|
1380
|
+
/** The `description` prop value (empty when only the slot is provided). */
|
|
1381
|
+
text: string;
|
|
1382
|
+
/** Whether the field is in an error state. */
|
|
1383
|
+
hasErrors: boolean;
|
|
1384
|
+
/** Whether the field is in a warning state (suppressed when errors win). */
|
|
1385
|
+
hasWarnings: boolean;
|
|
1386
|
+
};
|
|
539
1387
|
|
|
540
1388
|
/** Props exposed by the `label` slot. */
|
|
541
1389
|
export type BbSelectLabelSlotProps = {
|
|
@@ -544,7 +1392,7 @@ export type BbSelectLabelSlotProps = {
|
|
|
544
1392
|
/** Whether the input is in an error state. */
|
|
545
1393
|
hasErrors: boolean;
|
|
546
1394
|
/** Whether the input is in a warning state (suppressed when errors win). */
|
|
547
|
-
|
|
1395
|
+
hasWarnings: boolean;
|
|
548
1396
|
};
|
|
549
1397
|
|
|
550
1398
|
/** Props exposed by the `option` slot. */
|
|
@@ -567,6 +1415,8 @@ export type BbSelectOptionSlotProps<T> = {
|
|
|
567
1415
|
text: string;
|
|
568
1416
|
/** The resolved value for this option. */
|
|
569
1417
|
value: any;
|
|
1418
|
+
/** The resolved `itemProps.description` for this option, when it has one. */
|
|
1419
|
+
description: string | undefined;
|
|
570
1420
|
};
|
|
571
1421
|
|
|
572
1422
|
/** Props exposed by the `group` slot. */
|
|
@@ -583,6 +1433,26 @@ export type BbSelectGroupSlotProps<T> = {
|
|
|
583
1433
|
disabled: boolean;
|
|
584
1434
|
};
|
|
585
1435
|
|
|
1436
|
+
/**
|
|
1437
|
+
* Props exposed by the `chip` slot — called once per selected value in
|
|
1438
|
+
* `multiple` mode, in place of the default badge.
|
|
1439
|
+
*/
|
|
1440
|
+
export type BbSelectChipSlotProps<T> = {
|
|
1441
|
+
/** The selected item, exactly as it was supplied in `items`. */
|
|
1442
|
+
item: T;
|
|
1443
|
+
/** The item's resolved display text (what the default badge prints). */
|
|
1444
|
+
text: string;
|
|
1445
|
+
/** The item's resolved value — what sits in the v-model. */
|
|
1446
|
+
value: any;
|
|
1447
|
+
/**
|
|
1448
|
+
* `true` while the select is disabled or readonly: the chip must not offer a
|
|
1449
|
+
* way to remove itself, and `deselect` is a no-op.
|
|
1450
|
+
*/
|
|
1451
|
+
disabled: boolean;
|
|
1452
|
+
/** Drops this value from the selection. No-op while `disabled`. */
|
|
1453
|
+
deselect: () => void;
|
|
1454
|
+
};
|
|
1455
|
+
|
|
586
1456
|
/**
|
|
587
1457
|
* Props exposed by the `header` / `footer` panel slots — identical whether the
|
|
588
1458
|
* select renders as a desktop popover or an adaptive bottom sheet.
|
|
@@ -622,7 +1492,7 @@ export type BbSelectSlots<T> = {
|
|
|
622
1492
|
/**
|
|
623
1493
|
* Content appended outside the input field wrapper.
|
|
624
1494
|
*/
|
|
625
|
-
'append
|
|
1495
|
+
'append:outer'?: (props: {
|
|
626
1496
|
query: string;
|
|
627
1497
|
close: () => Promise<void>;
|
|
628
1498
|
}) => any;
|
|
@@ -630,14 +1500,21 @@ export type BbSelectSlots<T> = {
|
|
|
630
1500
|
* Replaces the default label text rendered above the input.
|
|
631
1501
|
*/
|
|
632
1502
|
label?: (props: BbSelectLabelSlotProps) => any;
|
|
1503
|
+
/**
|
|
1504
|
+
* Replaces the description text. Provided alone (no `description` prop) it still
|
|
1505
|
+
* renders the description region and wires it into `aria-describedby`.
|
|
1506
|
+
*/
|
|
1507
|
+
description?: (props: BbSelectDescriptionSlotProps) => any;
|
|
633
1508
|
/**
|
|
634
1509
|
* Content shown inside the options dropdown while items are loading.
|
|
635
1510
|
*/
|
|
636
1511
|
loading?: (props: { query: string }) => any;
|
|
637
1512
|
/**
|
|
638
1513
|
* Content shown when no options match the query or the list is empty.
|
|
1514
|
+
* `error` is what the latest failed load threw, untouched (`null` when
|
|
1515
|
+
* none).
|
|
639
1516
|
*/
|
|
640
|
-
|
|
1517
|
+
empty?: (props: { query: string; focus: () => void; error: unknown }) => any;
|
|
641
1518
|
/**
|
|
642
1519
|
* Replaces the default rendering of each option row in the dropdown.
|
|
643
1520
|
*/
|
|
@@ -646,6 +1523,11 @@ export type BbSelectSlots<T> = {
|
|
|
646
1523
|
* Replaces the default group header rendered above grouped options.
|
|
647
1524
|
*/
|
|
648
1525
|
group?: (props: BbSelectGroupSlotProps<T>) => any;
|
|
1526
|
+
/**
|
|
1527
|
+
* Replaces the default badge rendered for each selection in `multiple` mode.
|
|
1528
|
+
* Not called in `comma` mode, nor for the collapsed "+N" summary.
|
|
1529
|
+
*/
|
|
1530
|
+
chip?: (props: BbSelectChipSlotProps<T>) => any;
|
|
649
1531
|
/**
|
|
650
1532
|
* Content rendered as an inline prefix inside the input field.
|
|
651
1533
|
*/
|
|
@@ -661,7 +1543,7 @@ export type BbSelectSlots<T> = {
|
|
|
661
1543
|
/**
|
|
662
1544
|
* Content prepended outside the input field wrapper.
|
|
663
1545
|
*/
|
|
664
|
-
'prepend
|
|
1546
|
+
'prepend:outer'?: (props: {
|
|
665
1547
|
query: string;
|
|
666
1548
|
close: () => Promise<void>;
|
|
667
1549
|
}) => any;
|
|
@@ -676,13 +1558,147 @@ export type BbSelectSlots<T> = {
|
|
|
676
1558
|
|
|
677
1559
|
```css
|
|
678
1560
|
.bb-select {
|
|
679
|
-
/*
|
|
680
|
-
|
|
681
|
-
|
|
1561
|
+
/* The box row of the select: the activator overlay, the value face and the
|
|
1562
|
+
chips row live inside it. */
|
|
1563
|
+
&__field {
|
|
1564
|
+
color: var(--bb-text);
|
|
1565
|
+
font-size: var(--bb-input-fs);
|
|
1566
|
+
user-select: none;
|
|
1567
|
+
/* Fraction of the shell's inner padding the chips row is pulled back by
|
|
1568
|
+
when no prepend icon precedes it (see the negative margin below). */
|
|
1569
|
+
--compensation-multiplier: 0.3;
|
|
1570
|
+
|
|
1571
|
+
&.bb-field-input--compact {
|
|
1572
|
+
--compensation-multiplier: 0.5;
|
|
1573
|
+
}
|
|
1574
|
+
|
|
1575
|
+
&--disabled {
|
|
1576
|
+
color: var(--bb-text-muted);
|
|
1577
|
+
|
|
1578
|
+
.bb-select__activator {
|
|
1579
|
+
cursor: not-allowed;
|
|
1580
|
+
}
|
|
1581
|
+
}
|
|
1582
|
+
|
|
1583
|
+
&--readonly {
|
|
1584
|
+
.bb-select__activator {
|
|
1585
|
+
cursor: default;
|
|
1586
|
+
}
|
|
1587
|
+
}
|
|
1588
|
+
|
|
1589
|
+
/* If there is no prepend icon, add a negative margin to the chips row so
|
|
1590
|
+
it smoothly couples with the border */
|
|
1591
|
+
&:not(:has(.bb-field-input__prepend-icon)) {
|
|
1592
|
+
.bb-select__chips-row--chips {
|
|
1593
|
+
margin-inline-start: calc(
|
|
1594
|
+
var(--bb-input-px) * var(--compensation-multiplier) * -1
|
|
1595
|
+
);
|
|
1596
|
+
}
|
|
1597
|
+
}
|
|
1598
|
+
}
|
|
1599
|
+
|
|
1600
|
+
&__activator {
|
|
1601
|
+
background: none;
|
|
1602
|
+
border: none;
|
|
1603
|
+
cursor: pointer;
|
|
1604
|
+
inset: 0;
|
|
1605
|
+
padding: 0;
|
|
1606
|
+
position: absolute;
|
|
1607
|
+
|
|
1608
|
+
&:focus-visible {
|
|
1609
|
+
outline: 2px solid transparent;
|
|
1610
|
+
}
|
|
1611
|
+
}
|
|
1612
|
+
|
|
1613
|
+
&__value {
|
|
1614
|
+
align-items: center;
|
|
1615
|
+
align-self: stretch;
|
|
1616
|
+
display: flex;
|
|
1617
|
+
flex: 1 1 auto;
|
|
1618
|
+
flex-wrap: nowrap;
|
|
1619
|
+
gap: 0.25rem;
|
|
1620
|
+
min-width: 0;
|
|
1621
|
+
pointer-events: none;
|
|
1622
|
+
position: relative;
|
|
1623
|
+
text-align: start;
|
|
1624
|
+
|
|
1625
|
+
& input[type='button'] {
|
|
1626
|
+
pointer-events: auto;
|
|
1627
|
+
}
|
|
1628
|
+
}
|
|
1629
|
+
|
|
1630
|
+
&__chips-row {
|
|
1631
|
+
align-items: center;
|
|
1632
|
+
bottom: 0;
|
|
1633
|
+
display: flex;
|
|
1634
|
+
flex: 1 1 auto;
|
|
1635
|
+
flex-wrap: nowrap;
|
|
1636
|
+
inset-inline-end: 0;
|
|
1637
|
+
inset-inline-start: 0;
|
|
1638
|
+
min-width: 0;
|
|
1639
|
+
overflow: hidden;
|
|
1640
|
+
/* Sits above the absolute activator overlay (later in DOM), so re-enable
|
|
1641
|
+
hit-testing: chip ✕ buttons become clickable, and clicks on the empty gaps
|
|
1642
|
+
bubble to CommonFieldInput's container:click to still toggle the popover.
|
|
1643
|
+
The activator stays behind purely as the keyboard/focus target. */
|
|
1644
|
+
pointer-events: auto;
|
|
1645
|
+
position: absolute;
|
|
1646
|
+
top: 0;
|
|
1647
|
+
|
|
1648
|
+
&--hidden {
|
|
1649
|
+
pointer-events: none;
|
|
1650
|
+
visibility: hidden;
|
|
1651
|
+
}
|
|
1652
|
+
|
|
1653
|
+
/* Chips mode with at least one selection — never comma mode, which
|
|
1654
|
+
separates with its own `,` and wants no gap. The `chip` slot lets a
|
|
1655
|
+
consumer render their own element in place of our badge, so the layout
|
|
1656
|
+
a chip needs (no shrinking, the gap between chips, and the negative
|
|
1657
|
+
inset coupling above) lives HERE, on the row, rather than on a
|
|
1658
|
+
`__chip` class custom content would have to know to apply. */
|
|
1659
|
+
&--chips {
|
|
1660
|
+
gap: 0.25rem;
|
|
1661
|
+
|
|
1662
|
+
> * {
|
|
1663
|
+
flex-shrink: 0;
|
|
1664
|
+
}
|
|
1665
|
+
}
|
|
1666
|
+
}
|
|
1667
|
+
|
|
1668
|
+
&__comma {
|
|
1669
|
+
flex-shrink: 0;
|
|
1670
|
+
overflow: hidden;
|
|
1671
|
+
text-overflow: ellipsis;
|
|
1672
|
+
white-space: nowrap;
|
|
1673
|
+
|
|
1674
|
+
&:not(:last-child)::after {
|
|
1675
|
+
content: ',\00a0';
|
|
1676
|
+
}
|
|
1677
|
+
}
|
|
1678
|
+
|
|
1679
|
+
&__display-value {
|
|
1680
|
+
flex: 1 1 auto;
|
|
1681
|
+
min-width: 0;
|
|
1682
|
+
overflow: hidden;
|
|
1683
|
+
text-overflow: ellipsis;
|
|
1684
|
+
white-space: nowrap;
|
|
1685
|
+
}
|
|
1686
|
+
|
|
1687
|
+
&__placeholder {
|
|
1688
|
+
color: var(--bb-text-muted);
|
|
1689
|
+
opacity: 1;
|
|
1690
|
+
transition: opacity var(--bb-transition-fast) var(--bb-ease);
|
|
1691
|
+
}
|
|
1692
|
+
|
|
1693
|
+
&__max-reached {
|
|
1694
|
+
flex: 1 1 auto;
|
|
1695
|
+
overflow: hidden;
|
|
1696
|
+
text-overflow: ellipsis;
|
|
1697
|
+
white-space: nowrap;
|
|
682
1698
|
}
|
|
683
1699
|
|
|
684
|
-
&.bb-
|
|
685
|
-
.bb-
|
|
1700
|
+
&.bb-field--floating-label:not(:focus-within) {
|
|
1701
|
+
.bb-select__placeholder {
|
|
686
1702
|
opacity: 0;
|
|
687
1703
|
}
|
|
688
1704
|
}
|