bitboss-ui 3.0.0-beta.47 → 3.0.0-beta.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -7
- package/bin/bitboss-ui-mcp.mjs +15 -3
- package/bin/bitboss-ui.mjs +167 -14
- package/dist/ai/BbAccordion.md +1 -1
- package/dist/ai/BbAvatar.md +1 -1
- package/dist/ai/BbBreadcrumbs.md +65 -65
- package/dist/ai/BbButton.md +28 -8
- package/dist/ai/BbCheckbox.md +0 -2
- package/dist/ai/BbCheckboxGroup.md +13 -20
- package/dist/ai/BbCollapsible.md +1 -1
- package/dist/ai/BbColorPalette.md +1 -1
- package/dist/ai/BbConfirm.md +8 -0
- package/dist/ai/BbConfirmPortal.md +1 -1
- package/dist/ai/BbDatePickerInput.md +4 -2
- package/dist/ai/BbDialog.md +1 -8
- package/dist/ai/BbDropdown.md +231 -220
- package/dist/ai/BbDropdownButton.md +65 -65
- package/dist/ai/BbDropdownGroup.md +2 -2
- package/dist/ai/BbDropzone.md +10 -10
- package/dist/ai/BbForm.md +43 -52
- package/dist/ai/BbHoverCard.md +19 -7
- package/dist/ai/BbHoverCardPortal.md +1 -1
- package/dist/ai/BbNumberInput.md +88 -21
- package/dist/ai/BbPopover.md +47 -40
- package/dist/ai/BbPopoverPortal.md +1 -1
- package/dist/ai/BbProgress.md +48 -22
- package/dist/ai/BbRadioGroup.md +13 -19
- package/dist/ai/BbSelect.md +16 -36
- package/dist/ai/BbSelectPopover.md +14 -30
- package/dist/ai/BbSmoothHeight.md +0 -2
- package/dist/ai/BbSwitchGroup.md +13 -20
- package/dist/ai/BbTable.md +11 -10
- package/dist/ai/BbTabs.md +107 -106
- package/dist/ai/BbTabsList.md +2 -2
- package/dist/ai/BbTabsPanels.md +1 -1
- package/dist/ai/BbTabsRoot.md +3 -3
- package/dist/ai/BbTooltip.md +29 -13
- package/dist/ai/BbTree.md +14 -11
- package/dist/ai/CommonPopover.md +1 -1
- package/dist/ai/changelog.json +297 -6
- package/dist/ai/components.json +50 -45
- package/dist/ai/composables/useBbDropdownContext.md +16 -16
- package/dist/ai/composables/useBbFormField.md +5 -1
- package/dist/ai/composables/useBbTabsContext.md +14 -14
- package/dist/ai/guides/agent-contract.md +27 -27
- package/dist/ai/guides/ai-router.md +1 -1
- package/dist/ai/guides/component-picker.md +3 -3
- package/dist/ai/guides/fetch-items-playbook.md +1 -1
- package/dist/ai/guides/icons-policy.md +10 -10
- package/dist/ai/guides/inertia-helpers.md +120 -67
- package/dist/ai/guides/installation-and-plugin-setup.md +45 -15
- package/dist/ai/guides/migration/components/bb-breadcrumbs.md +3 -2
- package/dist/ai/guides/migration/components/bb-checkbox-group.md +16 -16
- package/dist/ai/guides/migration/components/bb-dropdown-button.md +9 -8
- package/dist/ai/guides/migration/components/bb-dropdown.md +15 -14
- package/dist/ai/guides/migration/components/bb-radio-group.md +2 -1
- package/dist/ai/guides/migration/components/bb-select-popover.md +6 -1
- package/dist/ai/guides/migration/components/bb-select.md +10 -2
- package/dist/ai/guides/migration/components/bb-switch-group.md +2 -1
- package/dist/ai/guides/migration/components/bb-tabs.md +9 -8
- package/dist/ai/guides/migration/components/bb-tooltip.md +1 -1
- package/dist/ai/guides/migration/v2-to-v3.md +143 -28
- package/dist/ai/guides/migration/v3-beta-css-classes.md +29 -27
- package/dist/ai/guides/migration/v3-beta-tooling.md +11 -0
- package/dist/ai/guides/options-items-playbook.md +30 -24
- package/dist/ai/guides/passthrough.md +4 -4
- package/dist/ai/guides/preset-components.md +18 -3
- package/dist/ai/guides/typescript-generic-components.md +1 -1
- package/dist/ai/guides/validated-forms.md +11 -22
- package/dist/ai/guides/validation-providers.md +4 -3
- package/dist/ai/helpers/inertia/manifest.json +636 -0
- package/dist/ai/helpers/inertia/types.ts +15 -0
- package/dist/ai/helpers/inertia/useAsyncFn.ts +110 -0
- package/dist/ai/helpers/inertia/useConfirmOnRouteLeave.ts +102 -0
- package/dist/ai/helpers/inertia/useDeleteCmd.ts +30 -0
- package/dist/ai/helpers/inertia/useHasChanged.ts +36 -0
- package/dist/ai/helpers/inertia/useIndexById.ts +23 -0
- package/dist/ai/helpers/inertia/useLazyProp.ts +148 -0
- package/dist/ai/helpers/inertia/useLazyPropGetter.ts +50 -0
- package/dist/ai/helpers/inertia/useLoading.ts +20 -0
- package/dist/ai/helpers/inertia/usePaginatedResponseContext.ts +88 -0
- package/dist/ai/helpers/inertia/usePromiseForm.ts +62 -0
- package/dist/ai/helpers/inertia/useProp.ts +63 -0
- package/dist/ai/helpers/inertia/useQuery.ts +19 -0
- package/dist/ai/helpers/inertia/useQueryObject.ts +116 -0
- package/dist/ai/helpers/inertia/useResourceContext.ts +69 -0
- package/dist/ai/helpers/inertia/useRouteQuery.ts +54 -0
- package/dist/ai/helpers/inertia/useScreenSizes.ts +23 -0
- package/dist/ai/helpers/inertia/useTableContext.ts +34 -0
- package/dist/ai/helpers/inertia/useTableSelectionContext.ts +48 -0
- package/dist/ai/helpers/inertia/useUntil.ts +33 -0
- package/dist/ai/helpers/inertia/utils.ts +24 -0
- package/dist/ai/index.md +6 -6
- package/dist/ai/manifest/components/BbAccordion.json +1 -1
- package/dist/ai/manifest/components/BbBreadcrumbs.json +10 -6
- package/dist/ai/manifest/components/BbBreadcrumbs.tree.json +1 -1
- package/dist/ai/manifest/components/BbButton.json +2 -1
- package/dist/ai/manifest/components/BbButton.tree.json +1 -1
- package/dist/ai/manifest/components/BbCheckboxGroup.json +2 -2
- package/dist/ai/manifest/components/BbCollapsible.json +1 -1
- package/dist/ai/manifest/components/BbColorPalette.json +1 -1
- package/dist/ai/manifest/components/BbConfirmPortal.json +5 -2
- package/dist/ai/manifest/components/BbDropdown.json +23 -20
- package/dist/ai/manifest/components/BbDropdown.tree.json +2 -2
- package/dist/ai/manifest/components/BbDropdownButton.json +22 -19
- package/dist/ai/manifest/components/BbDropdownButton.tree.json +1 -1
- package/dist/ai/manifest/components/BbDropdownGroup.json +2 -2
- package/dist/ai/manifest/components/BbForm.json +1 -0
- package/dist/ai/manifest/components/BbHoverCard.json +1 -1
- package/dist/ai/manifest/components/BbHoverCardPortal.json +2 -2
- package/dist/ai/manifest/components/BbNumberInput.json +6 -1
- package/dist/ai/manifest/components/BbNumberInput.tree.json +2 -1
- package/dist/ai/manifest/components/BbPopover.json +2 -1
- package/dist/ai/manifest/components/BbPopoverPortal.json +2 -2
- package/dist/ai/manifest/components/BbProgress.json +6 -6
- package/dist/ai/manifest/components/BbProgress.tree.json +1 -0
- package/dist/ai/manifest/components/BbRadioGroup.json +2 -2
- package/dist/ai/manifest/components/BbSelect.json +2 -2
- package/dist/ai/manifest/components/BbSelect.tree.json +2 -2
- package/dist/ai/manifest/components/BbSelectPopover.json +2 -2
- package/dist/ai/manifest/components/BbSelectPopover.tree.json +1 -1
- package/dist/ai/manifest/components/BbSwitchGroup.json +2 -2
- package/dist/ai/manifest/components/BbTabs.json +8 -7
- package/dist/ai/manifest/components/BbTabsList.json +3 -3
- package/dist/ai/manifest/components/BbTabsPanels.json +1 -1
- package/dist/ai/manifest/components/BbTabsRoot.json +6 -5
- package/dist/ai/manifest/components/BbTag.tree.json +1 -1
- package/dist/ai/manifest/components/BbTooltip.json +2 -2
- package/dist/ai/manifest/components/ChipsBox.tree.json +1 -1
- package/dist/ai/manifest/components/CommonPopover.json +1 -1
- package/dist/ai/manifest/index.json +2 -2
- package/dist/ai/manifest/meta.json +5 -0
- package/dist/ai/manifest/types.advanced.json +10 -9
- package/dist/ai/manifest/types.api.json +8 -5
- package/dist/ai/manifest/types.wrapper.json +1 -0
- package/dist/ai/recipes/inertia/approvals-inbox.md +16 -18
- package/dist/ai/recipes/inertia/inline-edit-workspace.md +23 -33
- package/dist/ai/recipes/inertia/layout-scaffold.md +16 -16
- package/dist/ai/recipes/inertia/onboarding.md +6 -10
- package/dist/ai/recipes/inertia/ownership-atlas.md +15 -18
- package/dist/ai/recipes/inertia/record-form.md +11 -11
- package/dist/ai/recipes/inertia/records-workspace.md +38 -41
- package/dist/ai/recipes/inertia/settings-workspace.md +26 -38
- package/dist/ai/recipes/inertia/upload-center.md +31 -39
- package/dist/ai/recipes/inertia/wizard-form.md +10 -19
- package/dist/ai/recipes/nuxt/approvals-inbox.md +7 -8
- package/dist/ai/recipes/nuxt/inline-edit-workspace.md +14 -24
- package/dist/ai/recipes/nuxt/layout-scaffold.md +16 -16
- package/dist/ai/recipes/nuxt/onboarding.md +2 -6
- package/dist/ai/recipes/nuxt/ownership-atlas.md +7 -9
- package/dist/ai/recipes/nuxt/record-form.md +5 -5
- package/dist/ai/recipes/nuxt/records-workspace.md +29 -31
- package/dist/ai/recipes/nuxt/settings-workspace.md +22 -34
- package/dist/ai/recipes/nuxt/upload-center.md +22 -29
- package/dist/ai/recipes/nuxt/wizard-form.md +3 -11
- package/dist/ai/recipes/vue/approvals-inbox.md +7 -8
- package/dist/ai/recipes/vue/inline-edit-workspace.md +14 -24
- package/dist/ai/recipes/vue/layout-scaffold.md +16 -16
- package/dist/ai/recipes/vue/onboarding.md +2 -6
- package/dist/ai/recipes/vue/ownership-atlas.md +7 -9
- package/dist/ai/recipes/vue/record-form.md +5 -5
- package/dist/ai/recipes/vue/records-workspace.md +29 -31
- package/dist/ai/recipes/vue/settings-workspace.md +22 -34
- package/dist/ai/recipes/vue/upload-center.md +22 -29
- package/dist/ai/recipes/vue/wizard-form.md +3 -11
- package/dist/ai/source/BbAccordion.md +1 -1
- package/dist/ai/source/BbAlert.md +3 -3
- package/dist/ai/source/BbBadge.md +14 -10
- package/dist/ai/source/BbBadgeButton.md +17 -12
- package/dist/ai/source/BbBaseButton.md +1 -1
- package/dist/ai/source/BbBaseRadioIcon.md +1 -0
- package/dist/ai/source/BbBaseSwitchIcon.md +1 -0
- package/dist/ai/source/BbBreadcrumbs.md +63 -42
- package/dist/ai/source/BbButton.md +84 -38
- package/dist/ai/source/BbCalendar.md +17 -16
- package/dist/ai/source/BbCheckbox.md +3 -2
- package/dist/ai/source/BbCheckboxGroup.md +11 -4
- package/dist/ai/source/BbCollapsible.md +2 -1
- package/dist/ai/source/BbColorInput.md +10 -9
- package/dist/ai/source/BbColorPalette.md +2 -1
- package/dist/ai/source/BbConfirm.md +18 -1
- package/dist/ai/source/BbConfirmPortal.md +20 -6
- package/dist/ai/source/BbDatePicker.md +2 -2
- package/dist/ai/source/BbDatePickerInput.md +47 -20
- package/dist/ai/source/BbDialog.md +5 -5
- package/dist/ai/source/BbDropdown.md +231 -158
- package/dist/ai/source/BbDropdownButton.md +19 -12
- package/dist/ai/source/BbDropdownGroup.md +127 -93
- package/dist/ai/source/BbForm.md +25 -1
- package/dist/ai/source/BbHoverCard.md +30 -3
- package/dist/ai/source/BbHoverCardPortal.md +18 -3
- package/dist/ai/source/BbIndicator.md +4 -0
- package/dist/ai/source/BbNumberInput.md +855 -19
- package/dist/ai/source/BbOffCanvas.md +27 -11
- package/dist/ai/source/BbPagination.md +3 -3
- package/dist/ai/source/BbPopover.md +185 -12
- package/dist/ai/source/BbPopoverPortal.md +30 -3
- package/dist/ai/source/BbProgress.md +82 -18
- package/dist/ai/source/BbRadioGroup.md +12 -5
- package/dist/ai/source/BbRating.md +11 -9
- package/dist/ai/source/BbSelect.md +16 -10
- package/dist/ai/source/BbSelectPopover.md +29 -23
- package/dist/ai/source/BbSlider.md +12 -6
- package/dist/ai/source/BbSwitch.md +3 -2
- package/dist/ai/source/BbSwitchGroup.md +5 -2
- package/dist/ai/source/BbTable.md +102 -18
- package/dist/ai/source/BbTabs.md +30 -24
- package/dist/ai/source/BbTabsList.md +29 -23
- package/dist/ai/source/BbTabsPanels.md +29 -23
- package/dist/ai/source/BbTabsRoot.md +28 -22
- package/dist/ai/source/BbTag.md +10 -9
- package/dist/ai/source/BbTextInput.md +5 -4
- package/dist/ai/source/BbTextarea.md +6 -5
- package/dist/ai/source/BbTimePicker.md +1 -1
- package/dist/ai/source/BbTimePickerInput.md +46 -9
- package/dist/ai/source/BbToast.md +10 -7
- package/dist/ai/source/BbToastPortal.md +10 -7
- package/dist/ai/source/BbTooltip.md +88 -11
- package/dist/ai/source/BbTree.md +21 -3
- package/dist/ai/source/CommonField.md +6 -4
- package/dist/ai/source/CommonFieldInput.md +15 -10
- package/dist/ai/source/CommonPopover.md +8 -1
- package/dist/ai/source/CommonTimeSelector.md +5 -4
- package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +10 -8
- package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +45 -45
- package/dist/components/BbBreadcrumbs/types.d.ts +25 -17
- package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +88 -70
- package/dist/components/BbButton/toggleRoving.d.ts +6 -0
- package/dist/components/BbButton/toggleRoving.js +45 -0
- package/dist/components/BbButton/types.d.ts +12 -4
- package/dist/components/BbButton/types.js +5 -1
- package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +178 -178
- package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +15 -15
- package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +28 -28
- package/dist/components/BbCalendar/useCalendarGrid.js +141 -139
- package/dist/components/BbCalendar/useDayjsLocale.d.ts +38 -15
- package/dist/components/BbCalendar/useDayjsLocale.js +31 -30
- package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +48 -48
- package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +81 -80
- package/dist/components/BbCheckboxGroup/types.d.ts +6 -2
- package/dist/components/BbCollapsible/types.d.ts +2 -1
- package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +69 -69
- package/dist/components/BbColorPalette/types.d.ts +2 -1
- package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +2 -5
- package/dist/components/BbConfirm/types.d.ts +15 -0
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +363 -349
- package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +91 -86
- package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +298 -289
- package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +322 -356
- package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +17 -15
- package/dist/components/BbDropdown/DropdownRow.vue.d.ts +40 -0
- package/dist/components/BbDropdown/DropdownRow.vue.js +5 -0
- package/dist/components/BbDropdown/DropdownRow.vue_vue_type_script_setup_true_lang.js +60 -0
- package/dist/components/BbDropdown/normalizeGroups.d.ts +8 -2
- package/dist/components/BbDropdown/normalizeGroups.js +60 -46
- package/dist/components/BbDropdown/types.d.ts +120 -88
- package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +11 -2
- package/dist/components/BbDropdownButton/types.d.ts +2 -2
- package/dist/components/BbForm/BbForm.vue.d.ts +9 -0
- package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +114 -105
- package/dist/components/BbForm/BbFormCustomField.js +1 -1
- package/dist/components/BbForm/bindFormField.js +2 -1
- package/dist/components/BbForm/formFields.d.ts +5 -0
- package/dist/components/BbHoverCard/BbHoverCard.vue_vue_type_script_setup_true_lang.js +145 -142
- package/dist/components/BbHoverCard/BbHoverCardPortal.vue.d.ts +2 -2
- package/dist/components/BbHoverCard/types.d.ts +14 -1
- package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +0 -1
- package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +452 -125
- package/dist/components/BbNumberInput/numberDisplay.d.ts +256 -0
- package/dist/components/BbNumberInput/numberDisplay.js +499 -0
- package/dist/components/BbNumberInput/types.d.ts +54 -1
- package/dist/components/BbNumberInput/warroom/corpus.d.ts +58 -0
- package/dist/components/BbNumberInput/warroom/currency-verify.rows.d.ts +28 -0
- package/dist/components/BbNumberInput/warroom/currency.rows.d.ts +2 -0
- package/dist/components/BbNumberInput/warroom/harness.d.ts +217 -0
- package/dist/components/BbNumberInput/warroom/oracle.d.ts +150 -0
- package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +7 -7
- package/dist/components/BbPopover/BbPopover.vue.d.ts +1 -0
- package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +207 -162
- package/dist/components/BbPopover/BbPopoverPortal.vue.d.ts +2 -2
- package/dist/components/BbPopover/types.d.ts +26 -1
- package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +15 -7
- package/dist/components/BbProgress/types.d.ts +23 -7
- package/dist/components/BbProgress/types.js +1 -1
- package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +102 -101
- package/dist/components/BbRadioGroup/types.d.ts +6 -2
- package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +63 -63
- package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +156 -154
- package/dist/components/BbSelect/types.d.ts +6 -2
- package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/components/BbSelectPopover/types.d.ts +6 -2
- package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +153 -153
- package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +62 -62
- package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +131 -130
- package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +711 -676
- package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbTabs/types.d.ts +28 -22
- package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +76 -76
- package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +58 -58
- package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +82 -82
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +246 -236
- package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +99 -86
- package/dist/components/BbTooltip/tooltipWarmup.d.ts +23 -0
- package/dist/components/BbTooltip/tooltipWarmup.js +7 -0
- package/dist/components/BbTooltip/types.d.ts +10 -3
- package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +29 -21
- package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +10 -7
- package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +37 -36
- package/dist/components/CommonPopover/types.d.ts +2 -1
- package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +9 -9
- package/dist/composables/formSubmitLock.d.ts +6 -0
- package/dist/composables/formSubmitLock.js +4 -0
- package/dist/composables/useBaseOptions.d.ts +7 -1
- package/dist/composables/useBaseOptions.js +32 -32
- package/dist/composables/useBbDropdownContext.d.ts +8 -8
- package/dist/composables/useBbFormField.d.ts +9 -0
- package/dist/composables/useBbFormField.js +5 -3
- package/dist/composables/useBbTabsContext.d.ts +10 -10
- package/dist/composables/useBbTabsContext.js +18 -18
- package/dist/composables/useFormBinding.d.ts +11 -0
- package/dist/composables/useFormBinding.js +15 -13
- package/dist/composables/useItemText.d.ts +5 -1
- package/dist/composables/useItemText.js +8 -3
- package/dist/composables/useItemValue.d.ts +5 -1
- package/dist/composables/useItemValue.js +8 -3
- package/dist/composables/useLocale.js +10 -9
- package/dist/deprecation/ai-deprecations.json.d.ts +130 -0
- package/dist/deprecation/ai-deprecations.json.js +1 -1
- package/dist/deprecation/removedProps.js +1 -1
- package/dist/directives/bbDropdown.js +1 -1
- package/dist/directives/directivePortal.d.ts +13 -7
- package/dist/directives/directivePortal.js +1 -4
- package/dist/i18n/index.d.ts +7 -12
- package/dist/i18n/locales/cs.json +11 -14
- package/dist/i18n/locales/da.json +13 -16
- package/dist/i18n/locales/de-CH.json +137 -0
- package/dist/i18n/locales/de.json +14 -17
- package/dist/i18n/locales/el.json +10 -13
- package/dist/i18n/locales/en-GB.json +137 -0
- package/dist/i18n/locales/en.json +8 -11
- package/dist/i18n/locales/es-MX.json +137 -0
- package/dist/i18n/locales/es.json +16 -19
- package/dist/i18n/locales/fi.json +8 -11
- package/dist/i18n/locales/fr.json +23 -26
- package/dist/i18n/locales/hu.json +8 -11
- package/dist/i18n/locales/it.json +12 -15
- package/dist/i18n/locales/ja.json +13 -16
- package/dist/i18n/locales/ko.json +10 -13
- package/dist/i18n/locales/nb.json +13 -16
- package/dist/i18n/locales/nl.json +21 -24
- package/dist/i18n/locales/pl.json +10 -13
- package/dist/i18n/locales/{pt.json → pt-BR.json} +19 -22
- package/dist/i18n/locales/pt-PT.json +137 -0
- package/dist/i18n/locales/ro.json +22 -25
- package/dist/i18n/locales/ru.json +11 -14
- package/dist/i18n/locales/sv.json +16 -19
- package/dist/i18n/locales/tr.json +14 -17
- package/dist/i18n/locales/uk.json +11 -14
- package/dist/i18n/locales/{zh-cn.json → zh-CN.json} +10 -13
- package/dist/i18n/locales/zh-HK.json +137 -0
- package/dist/i18n/locales/zh-TW.json +137 -0
- package/dist/i18n/regionHints.d.ts +16 -0
- package/dist/i18n/regionHints.js +49 -0
- package/dist/i18n/regions.d.ts +286 -0
- package/dist/i18n/regions.js +265 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +4 -4
- package/dist/llms-full.txt +1914 -1714
- package/dist/llms-medium.txt +76 -46
- package/dist/llms.txt +7 -7
- package/dist/locale-blueprint.json +16 -13
- package/dist/styles.css +2 -2
- package/dist/types/passthrough.d.ts +1 -1
- package/dist/types/ptComponentMap.d.ts +2 -2
- package/dist/utilities/functions/slotKey.d.ts +2 -2
- package/dist/utils/versionCheck.js +1 -1
- package/dist/vite-plugin.d.ts +22 -19
- package/dist/vite.js +309 -297
- package/llms.txt +7 -7
- package/package.json +5 -3
- package/scripts/lib/agent-manifest.mjs +2 -1
- package/scripts/lib/eslint-disable.mjs +17 -4
- package/scripts/lib/eslint-plugin.d.ts +9 -1
- package/scripts/lib/eslint-plugin.mjs +256 -6
- package/scripts/lib/helper-canon.mjs +176 -0
- package/scripts/lib/helpers-add.mjs +1303 -0
- package/scripts/lib/local-components.mjs +33 -4
- package/scripts/lib/locale-check.mjs +165 -0
- package/scripts/lib/portal-names.mjs +458 -0
- package/scripts/lib/redundant-item-accessor.mjs +398 -0
- package/scripts/lib/renamed-item-field.mjs +343 -0
- package/scripts/lib/slot-key.mjs +2 -2
- package/scripts/lib/slot-renames.mjs +1 -1
- package/scripts/lib/unimported-components.mjs +5 -2
- package/scripts/lib/validate-bb-markup.mjs +123 -56
- package/dist/i18n/index.js +0 -27
|
@@ -10,15 +10,16 @@
|
|
|
10
10
|
:aria-label="label || undefined"
|
|
11
11
|
:aria-valuemax="max"
|
|
12
12
|
:aria-valuemin="min"
|
|
13
|
-
:aria-valuenow="ariaValueNow"
|
|
13
|
+
:aria-valuenow="indeterminate ? undefined : ariaValueNow"
|
|
14
14
|
class="bb-progress"
|
|
15
|
+
:class="{ 'bb-progress--indeterminate': indeterminate }"
|
|
15
16
|
role="progressbar"
|
|
16
17
|
:style="containerStyle"
|
|
17
|
-
v-bind="
|
|
18
|
+
v-bind="rootAttrs"
|
|
18
19
|
>
|
|
19
20
|
<div
|
|
20
21
|
class="bb-progress__bar"
|
|
21
|
-
:style="barStyle"
|
|
22
|
+
:style="indeterminate ? undefined : barStyle"
|
|
22
23
|
v-bind="passthrough.bar"
|
|
23
24
|
></div>
|
|
24
25
|
</div>
|
|
@@ -44,7 +45,7 @@ const props = withDefaults(defineProps<BbProgressProps>(), {
|
|
|
44
45
|
});
|
|
45
46
|
|
|
46
47
|
/**
|
|
47
|
-
* Passthrough (plans/passthrough/BbProgress.md). `root` (the track) and `bar` (the fill);
|
|
48
|
+
* Passthrough (plans/passthrough/BbProgress.md). `root` (the track) and `bar` (the fill); one state, `indeterminate`.
|
|
48
49
|
*/
|
|
49
50
|
const passthrough = usePassthrough({
|
|
50
51
|
component: 'BbProgress',
|
|
@@ -52,14 +53,25 @@ const passthrough = usePassthrough({
|
|
|
52
53
|
props,
|
|
53
54
|
parts: BB_PROGRESS_PT.parts,
|
|
54
55
|
states: BB_PROGRESS_PT.states,
|
|
55
|
-
active: {},
|
|
56
|
+
active: { indeterminate: () => !!props.indeterminate },
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
/*
|
|
60
|
+
* Q60.29: an indeterminate bar reports no value, so a consumer's
|
|
61
|
+
* `aria-valuetext` (the guide suggests one for units) is held back while it is
|
|
62
|
+
* on and returns with the value.
|
|
63
|
+
*/
|
|
64
|
+
const rootAttrs = computed(() => {
|
|
65
|
+
const attrs = passthrough.rootAttrs as Record<string, unknown>;
|
|
66
|
+
if (!props.indeterminate || !('aria-valuetext' in attrs)) return attrs;
|
|
67
|
+
const { 'aria-valuetext': _valuetext, ...rest } = attrs;
|
|
68
|
+
return rest;
|
|
56
69
|
});
|
|
57
70
|
|
|
58
71
|
// aria-valuenow must sit within [valuemin, valuemax], so it mirrors the
|
|
59
|
-
// clamped visual fill.
|
|
60
|
-
// indeterminate
|
|
61
|
-
//
|
|
62
|
-
// "indeterminate" to assistive tech.
|
|
72
|
+
// clamped visual fill. Only `indeterminate` omits it (Q60.29: omission is how
|
|
73
|
+
// a progressbar says "indeterminate" to assistive tech): a `null` value
|
|
74
|
+
// reports `min`, matching the empty bar it renders.
|
|
63
75
|
// NaN (a calc glitch upstream) degrades like `null`: `clamp` would pass it
|
|
64
76
|
// through to aria-valuenow="NaN" and a dropped transform (a full bar).
|
|
65
77
|
// ±Infinity already clamps to an end.
|
|
@@ -110,8 +122,7 @@ import type { PtMap, PtValue } from '@/types/passthrough';
|
|
|
110
122
|
* Props for BbProgress.
|
|
111
123
|
*/
|
|
112
124
|
/**
|
|
113
|
-
* Passthrough parts of `BbProgress` (plans/passthrough/BbProgress.md).
|
|
114
|
-
* it paints is a state.
|
|
125
|
+
* Passthrough parts of `BbProgress` (plans/passthrough/BbProgress.md).
|
|
115
126
|
*
|
|
116
127
|
* @part root - The track (the `progressbar` element); the bar follows it
|
|
117
128
|
* through its locals (`--track`, `--track-color`, `--accent`, `--r`, the
|
|
@@ -121,27 +132,45 @@ import type { PtMap, PtValue } from '@/types/passthrough';
|
|
|
121
132
|
* never its position.
|
|
122
133
|
*/
|
|
123
134
|
export type BbProgressPtPart = 'root' | 'bar';
|
|
124
|
-
/**
|
|
135
|
+
/**
|
|
136
|
+
* Passthrough states of `BbProgress`.
|
|
137
|
+
*
|
|
138
|
+
* @state indeterminate - Component-wide: `indeterminate` is on; the bar
|
|
139
|
+
* slides (pulses under reduced motion) instead of showing a value.
|
|
140
|
+
*/
|
|
141
|
+
export type BbProgressPtState = 'indeterminate';
|
|
142
|
+
/** The runtime lists the resolver is wired with. */
|
|
125
143
|
export const BB_PROGRESS_PT = {
|
|
126
144
|
parts: ['root', 'bar'],
|
|
127
|
-
states: [],
|
|
145
|
+
states: ['indeterminate'],
|
|
128
146
|
} as const satisfies {
|
|
129
147
|
parts: readonly BbProgressPtPart[];
|
|
130
|
-
states: readonly
|
|
148
|
+
states: readonly BbProgressPtState[];
|
|
131
149
|
};
|
|
132
150
|
|
|
133
151
|
// Spelled INLINE with this component's own union (Vue's SFC type resolver
|
|
134
152
|
// does not substitute a generic alias's type parameters — PASSTHROUGH.md T20).
|
|
135
|
-
// No state axis: a `never` state does not resolve to finite keys.
|
|
136
153
|
// eslint-disable-next-line @typescript-eslint/consistent-indexed-object-style
|
|
137
154
|
export type BbProgressProps = {
|
|
138
|
-
[K in
|
|
155
|
+
[K in
|
|
156
|
+
| `pt:${BbProgressPtPart}`
|
|
157
|
+
| `pt:${BbProgressPtPart}:${BbProgressPtState}`]?: PtValue;
|
|
139
158
|
} & {
|
|
140
159
|
/**
|
|
141
160
|
* Passthrough, object form: the same keys as the `pt:*` attributes
|
|
142
|
-
* without the prefix.
|
|
161
|
+
* without the prefix. Parts: `root`, `bar`; state: `indeterminate`.
|
|
162
|
+
*/
|
|
163
|
+
pt?: PtMap<BbProgressPtPart, BbProgressPtState>;
|
|
164
|
+
/**
|
|
165
|
+
* A wait you cannot measure yet: the bar slides back and forth (a calm
|
|
166
|
+
* pulse under `prefers-reduced-motion`) and the progressbar reports no
|
|
167
|
+
* value (`aria-valuenow` is omitted, as the ARIA pattern asks). The
|
|
168
|
+
* `modelValue` is kept and shows again when this turns off. A `null`
|
|
169
|
+
* `modelValue` alone is still an empty bar, not this.
|
|
170
|
+
*
|
|
171
|
+
* @defaultValue `false`
|
|
143
172
|
*/
|
|
144
|
-
|
|
173
|
+
indeterminate?: boolean;
|
|
145
174
|
/**
|
|
146
175
|
* The current progress value — a number between `min` and `max`. This is a
|
|
147
176
|
* one-way input prop (BbProgress is a display component and never emits
|
|
@@ -215,4 +244,39 @@ export type BbProgressProps = {
|
|
|
215
244
|
transition: transform var(--transition-duration);
|
|
216
245
|
width: 100%;
|
|
217
246
|
}
|
|
247
|
+
|
|
248
|
+
/*
|
|
249
|
+
* Q60.29 — `indeterminate`: a wait with no measurable end. A short bar slides
|
|
250
|
+
* across the track (transform only: composited). Under reduced motion the
|
|
251
|
+
* full bar breathes instead, slowly, without moving.
|
|
252
|
+
*/
|
|
253
|
+
.bb-progress--indeterminate > .bb-progress__bar {
|
|
254
|
+
animation: bb-progress-slide 1.6s var(--bb-ease) infinite;
|
|
255
|
+
transition: none;
|
|
256
|
+
width: 40%;
|
|
257
|
+
|
|
258
|
+
@media (prefers-reduced-motion: reduce) {
|
|
259
|
+
animation: bb-progress-pulse 2.4s ease-in-out infinite;
|
|
260
|
+
width: 100%;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
@keyframes bb-progress-slide {
|
|
265
|
+
from {
|
|
266
|
+
transform: translateX(-100%);
|
|
267
|
+
}
|
|
268
|
+
to {
|
|
269
|
+
transform: translateX(250%);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
@keyframes bb-progress-pulse {
|
|
274
|
+
0%,
|
|
275
|
+
100% {
|
|
276
|
+
opacity: 1;
|
|
277
|
+
}
|
|
278
|
+
50% {
|
|
279
|
+
opacity: 0.4;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
218
282
|
```
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
:loading="loading"
|
|
30
30
|
:name="resolvedName"
|
|
31
31
|
:passthrough="containerPassthrough"
|
|
32
|
-
:readonly="
|
|
32
|
+
:readonly="fieldReadonly"
|
|
33
33
|
:reverse="reverse"
|
|
34
34
|
:show-asterisk="showAsterisk"
|
|
35
35
|
:show-hint="showHint"
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
<OptionsContainer
|
|
54
54
|
:ref="setOptionsElement"
|
|
55
55
|
:aria-labelledby="hasLegend() ? `${fieldId}__label` : undefined"
|
|
56
|
-
:aria-readonly="hasLegend() &&
|
|
56
|
+
:aria-readonly="hasLegend() && fieldReadonly ? true : undefined"
|
|
57
57
|
:aria-required="hasLegend() ? fieldAriaRequired : undefined"
|
|
58
58
|
block="bb-radio-group"
|
|
59
59
|
:empty-text="emptyText"
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
:focused="rowFocus.focused(option.valueHash)"
|
|
116
116
|
:has-errors="!!fieldHasErrors"
|
|
117
117
|
:has-warnings="!!fieldHasWarnings && !fieldHasErrors"
|
|
118
|
-
:readonly="!!
|
|
118
|
+
:readonly="!!fieldReadonly"
|
|
119
119
|
v-bind="passthrough.part('icon', rowStates, option.item)"
|
|
120
120
|
/>
|
|
121
121
|
<!-- eslint-enable vue/attributes-order -->
|
|
@@ -196,6 +196,7 @@ const {
|
|
|
196
196
|
showAsterisk,
|
|
197
197
|
errors: fieldErrors,
|
|
198
198
|
ariaRequired: fieldAriaRequired,
|
|
199
|
+
readonly: fieldReadonly,
|
|
199
200
|
} = useFormBinding(declaredProps, declaredEmit, {
|
|
200
201
|
componentName: 'BbRadioGroup',
|
|
201
202
|
identifierFallback: () => declaredProps.legend,
|
|
@@ -321,6 +322,7 @@ const { options } = useBaseOptions({
|
|
|
321
322
|
itemText: props.itemText as any,
|
|
322
323
|
itemProps: toRef(props, 'itemProps'),
|
|
323
324
|
itemValue: props.itemValue as any,
|
|
325
|
+
optionDefaults: true,
|
|
324
326
|
max: Infinity,
|
|
325
327
|
selectable: toRef(props, 'selectable'),
|
|
326
328
|
selectedIndexedByHash: modelValueIndexedByHash,
|
|
@@ -740,14 +742,18 @@ export type BbRadioGroupProps<T> = {
|
|
|
740
742
|
/**
|
|
741
743
|
* Defines a path that returns a property of the object to use as text or a function that returns a string.
|
|
742
744
|
*
|
|
743
|
-
*
|
|
745
|
+
* Unset: own `label`, else `text` (`{ label, value }` needs no accessor).
|
|
746
|
+
*
|
|
747
|
+
* @defaultValue own `label`, else `text`, else `JSON.stringify(item)`
|
|
744
748
|
*/
|
|
745
749
|
itemText?: ItemAccessor<T, string>;
|
|
746
750
|
|
|
747
751
|
/**
|
|
748
752
|
* Defines a path that returns a property of the object to use as value or a function that returns any value.
|
|
749
753
|
*
|
|
750
|
-
*
|
|
754
|
+
* Unset: own `value`, even `null`.
|
|
755
|
+
*
|
|
756
|
+
* @defaultValue own `value`, else the whole item
|
|
751
757
|
*/
|
|
752
758
|
itemValue?: ItemAccessor<T>;
|
|
753
759
|
|
|
@@ -1054,6 +1060,7 @@ export type BbRadioGroupSlots<T> = {
|
|
|
1054
1060
|
.bb-radio-group {
|
|
1055
1061
|
.bb-field__layout--horizontal {
|
|
1056
1062
|
.bb-field__label {
|
|
1063
|
+
/* stylelint-disable-next-line declaration-property-value-disallowed-list -- support: `float: inline-start` needs Chrome 118, above the 114 floor */
|
|
1057
1064
|
float: left;
|
|
1058
1065
|
}
|
|
1059
1066
|
}
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
:layout="layout"
|
|
28
28
|
:name="resolvedName"
|
|
29
29
|
:passthrough="passthrough"
|
|
30
|
-
:readonly="
|
|
30
|
+
:readonly="fieldReadonly"
|
|
31
31
|
:reverse="reverse"
|
|
32
32
|
:show-asterisk="showAsterisk"
|
|
33
33
|
:show-hint="showHint"
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
'bb-rating__stars--errors': fieldHasErrors,
|
|
60
60
|
'bb-rating__stars--warnings':
|
|
61
61
|
Boolean(fieldHasWarnings) && !fieldHasErrors,
|
|
62
|
-
'bb-rating__stars--readonly':
|
|
62
|
+
'bb-rating__stars--readonly': fieldReadonly,
|
|
63
63
|
'bb-rating__stars--forced-clear': suppressHoverPreview,
|
|
64
64
|
}"
|
|
65
65
|
data-bb-no-drag
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
>
|
|
69
69
|
<span
|
|
70
70
|
:aria-labelledby="hasLegend() ? `${fieldId}__label` : undefined"
|
|
71
|
-
:aria-readonly="groupRole() &&
|
|
71
|
+
:aria-readonly="groupRole() && fieldReadonly ? true : undefined"
|
|
72
72
|
:aria-required="groupRole() ? fieldAriaRequired : undefined"
|
|
73
73
|
class="bb-rating__options"
|
|
74
74
|
:role="groupRole()"
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
'bb-rating__item--filled': option.filled,
|
|
86
86
|
'bb-rating__item--empty': !option.filled,
|
|
87
87
|
'bb-rating__item--disabled': option.disabled,
|
|
88
|
-
'bb-rating__item--readonly':
|
|
88
|
+
'bb-rating__item--readonly': fieldReadonly,
|
|
89
89
|
}"
|
|
90
90
|
v-bind="
|
|
91
91
|
passthrough.part('item', {
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
class="bb-sr-only"
|
|
108
108
|
:disabled="option.disabled"
|
|
109
109
|
:name="option.name"
|
|
110
|
-
:required="
|
|
110
|
+
:required="fieldReadonly ? undefined : fieldRequired || undefined"
|
|
111
111
|
type="radio"
|
|
112
112
|
:value="option.value"
|
|
113
113
|
v-bind="eventListeners"
|
|
@@ -181,6 +181,7 @@ const {
|
|
|
181
181
|
required: fieldRequired,
|
|
182
182
|
ariaRequired: fieldAriaRequired,
|
|
183
183
|
model: fieldModel,
|
|
184
|
+
readonly: fieldReadonly,
|
|
184
185
|
} = useFormBinding(declaredProps, declaredEmit, {
|
|
185
186
|
componentName: 'BbRating',
|
|
186
187
|
identifierFallback: () => declaredProps.legend,
|
|
@@ -913,8 +914,8 @@ export type BbRatingSlots = {
|
|
|
913
914
|
cursor: pointer;
|
|
914
915
|
display: flex;
|
|
915
916
|
justify-content: center;
|
|
916
|
-
padding-
|
|
917
|
-
padding-
|
|
917
|
+
padding-inline-end: 2px;
|
|
918
|
+
padding-inline-start: 2px;
|
|
918
919
|
|
|
919
920
|
&:has(:focus-visible) {
|
|
920
921
|
box-shadow: 0px 0px 0px var(--bb-ring-size) var(--ring-color);
|
|
@@ -959,8 +960,8 @@ export type BbRatingSlots = {
|
|
|
959
960
|
background-color: var(--bg);
|
|
960
961
|
border: var(--bb-border-w) solid var(--bb-field-border);
|
|
961
962
|
border-radius: var(--bb-radius);
|
|
962
|
-
padding-
|
|
963
|
-
padding-
|
|
963
|
+
padding-inline-end: var(--bb-input-px);
|
|
964
|
+
padding-inline-start: var(--bb-input-px);
|
|
964
965
|
padding-top: calc(var(--bb-label-lh-sm) + var(--bb-input-py));
|
|
965
966
|
position: relative;
|
|
966
967
|
transition:
|
|
@@ -1016,6 +1017,7 @@ export type BbRatingSlots = {
|
|
|
1016
1017
|
|
|
1017
1018
|
.bb-field__layout--horizontal {
|
|
1018
1019
|
.bb-field__label {
|
|
1020
|
+
/* stylelint-disable-next-line declaration-property-value-disallowed-list -- support: `float: inline-start` needs Chrome 118, above the 114 floor */
|
|
1019
1021
|
float: left;
|
|
1020
1022
|
}
|
|
1021
1023
|
}
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
:mobile="isMobile"
|
|
30
30
|
:name="name"
|
|
31
31
|
:passthrough="passthrough"
|
|
32
|
-
:readonly="
|
|
32
|
+
:readonly="fieldReadonly"
|
|
33
33
|
:reverse="reverse"
|
|
34
34
|
:show-asterisk="showAsterisk"
|
|
35
35
|
:show-hint="showHint"
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
:prefill="computedPrefill"
|
|
82
82
|
:pt="popoverPt()"
|
|
83
83
|
:query-debounce-time="queryDebounceTime"
|
|
84
|
-
:readonly="
|
|
84
|
+
:readonly="fieldReadonly"
|
|
85
85
|
:selectable="selectable"
|
|
86
86
|
:stash="stash"
|
|
87
87
|
:transition-duration="transitionDuration"
|
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
:class="{
|
|
111
111
|
'bb-select__field--shown': shown,
|
|
112
112
|
'bb-select__field--disabled': disabled,
|
|
113
|
-
'bb-select__field--readonly':
|
|
113
|
+
'bb-select__field--readonly': fieldReadonly,
|
|
114
114
|
}"
|
|
115
115
|
:clearable="clearable"
|
|
116
116
|
:compact="compact"
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
:loading="activatorLoading"
|
|
122
122
|
:passthrough="boxRowPassthrough(activatorLoading)"
|
|
123
123
|
:prepend:icon="declaredProps['prepend:icon']"
|
|
124
|
-
:readonly="
|
|
124
|
+
:readonly="fieldReadonly"
|
|
125
125
|
:variant="variant"
|
|
126
126
|
@click:clear="
|
|
127
127
|
() => {
|
|
@@ -145,6 +145,7 @@
|
|
|
145
145
|
<input
|
|
146
146
|
:id="fieldId"
|
|
147
147
|
:aria-labelledby="`${fieldId}__label ${fieldId}__selection`"
|
|
148
|
+
:aria-readonly="fieldReadonly || undefined"
|
|
148
149
|
:aria-required="activatorAriaRequired"
|
|
149
150
|
:autofocus="autofocus"
|
|
150
151
|
class="bb-select__activator"
|
|
@@ -388,6 +389,7 @@ const {
|
|
|
388
389
|
ariaRequired: fieldAriaRequired,
|
|
389
390
|
required: fieldRequired,
|
|
390
391
|
model: fieldModel,
|
|
392
|
+
readonly: fieldReadonly,
|
|
391
393
|
} = useFormBinding(declaredProps, declaredEmit, {
|
|
392
394
|
componentName: 'BbSelect',
|
|
393
395
|
identifierFallback: () => declaredProps.label,
|
|
@@ -1205,7 +1207,9 @@ export type BbSelectProps<T> = {
|
|
|
1205
1207
|
* Defines a path that returns a property of the object to use as text or a function
|
|
1206
1208
|
* that returns a string.
|
|
1207
1209
|
*
|
|
1208
|
-
*
|
|
1210
|
+
* Unset: own `label`, else `text` (`{ label, value }` needs no accessor).
|
|
1211
|
+
*
|
|
1212
|
+
* @defaultValue own `label`, else `text`, else `JSON.stringify(item)`
|
|
1209
1213
|
*/
|
|
1210
1214
|
itemText?: ItemAccessor<T, string>;
|
|
1211
1215
|
|
|
@@ -1235,7 +1239,9 @@ export type BbSelectProps<T> = {
|
|
|
1235
1239
|
* Defines a path that returns a property of the object to use as value or a function
|
|
1236
1240
|
* that returns any value.
|
|
1237
1241
|
*
|
|
1238
|
-
*
|
|
1242
|
+
* Unset: own `value`, even `null`.
|
|
1243
|
+
*
|
|
1244
|
+
* @defaultValue own `value`, else the whole item
|
|
1239
1245
|
*/
|
|
1240
1246
|
itemValue?: ItemAccessor<T>;
|
|
1241
1247
|
|
|
@@ -1651,7 +1657,7 @@ export type BbSelectSlots<T> = {
|
|
|
1651
1657
|
it smoothly couples with the border */
|
|
1652
1658
|
&:not(:has(.bb-field-input__prepend-icon)) {
|
|
1653
1659
|
.bb-select__chips-row--chips {
|
|
1654
|
-
margin-
|
|
1660
|
+
margin-inline-start: calc(
|
|
1655
1661
|
var(--bb-input-px) * var(--compensation-multiplier) * -1
|
|
1656
1662
|
);
|
|
1657
1663
|
}
|
|
@@ -1681,7 +1687,7 @@ export type BbSelectSlots<T> = {
|
|
|
1681
1687
|
min-width: 0;
|
|
1682
1688
|
pointer-events: none;
|
|
1683
1689
|
position: relative;
|
|
1684
|
-
text-align:
|
|
1690
|
+
text-align: start;
|
|
1685
1691
|
|
|
1686
1692
|
& input[type='button'] {
|
|
1687
1693
|
pointer-events: auto;
|
|
@@ -1694,7 +1700,8 @@ export type BbSelectSlots<T> = {
|
|
|
1694
1700
|
display: flex;
|
|
1695
1701
|
flex: 1 1 auto;
|
|
1696
1702
|
flex-wrap: nowrap;
|
|
1697
|
-
|
|
1703
|
+
inset-inline-end: 0;
|
|
1704
|
+
inset-inline-start: 0;
|
|
1698
1705
|
min-width: 0;
|
|
1699
1706
|
overflow: hidden;
|
|
1700
1707
|
/* Sits above the absolute activator overlay (later in DOM), so re-enable
|
|
@@ -1703,7 +1710,6 @@ export type BbSelectSlots<T> = {
|
|
|
1703
1710
|
The activator stays behind purely as the keyboard/focus target. */
|
|
1704
1711
|
pointer-events: auto;
|
|
1705
1712
|
position: absolute;
|
|
1706
|
-
right: 0;
|
|
1707
1713
|
top: 0;
|
|
1708
1714
|
|
|
1709
1715
|
&--hidden {
|
|
@@ -1166,13 +1166,14 @@ const { options } = useBaseOptions({
|
|
|
1166
1166
|
itemText: props.itemText,
|
|
1167
1167
|
itemProps: toRef(props, 'itemProps'),
|
|
1168
1168
|
itemValue: props.itemValue,
|
|
1169
|
+
optionDefaults: true,
|
|
1169
1170
|
// A ref, not the setup-time number: a runtime `:max` change must re-gate rows.
|
|
1170
1171
|
max: toRef(props, 'max'),
|
|
1171
1172
|
selectable: toRef(props, 'selectable'),
|
|
1172
1173
|
selectedIndexedByHash: modelValueIndexedByHash,
|
|
1173
1174
|
});
|
|
1174
1175
|
|
|
1175
|
-
const {
|
|
1176
|
+
const { getOptionValue } = useItemValue();
|
|
1176
1177
|
|
|
1177
1178
|
// `stash` holds SELECTED items only, so it follows the model: a list unselect,
|
|
1178
1179
|
// a field-chip ✕ and a parent write (a form reset) all end here. Without it a
|
|
@@ -1181,7 +1182,8 @@ const { getItemValue } = useItemValue();
|
|
|
1181
1182
|
watch(modelValueIndexedByHash, (selected) => {
|
|
1182
1183
|
if (!props.stash || !innerStash.value.length) return;
|
|
1183
1184
|
removeFromStash(
|
|
1184
|
-
(item) =>
|
|
1185
|
+
(item) =>
|
|
1186
|
+
selected[hash(getOptionValue(item, props.itemValue))] !== undefined
|
|
1185
1187
|
);
|
|
1186
1188
|
});
|
|
1187
1189
|
|
|
@@ -1216,7 +1218,7 @@ const fetchedValueHashes = computed(
|
|
|
1216
1218
|
() =>
|
|
1217
1219
|
new Set(
|
|
1218
1220
|
internalItems.value.map((item) =>
|
|
1219
|
-
hash(
|
|
1221
|
+
hash(getOptionValue(item, props.itemValue))
|
|
1220
1222
|
)
|
|
1221
1223
|
)
|
|
1222
1224
|
);
|
|
@@ -2477,7 +2479,9 @@ export type BbSelectPopoverProps<Item> = {
|
|
|
2477
2479
|
/**
|
|
2478
2480
|
* Path to item property for display text or function to extract it.
|
|
2479
2481
|
*
|
|
2480
|
-
*
|
|
2482
|
+
* Unset: own `label`, else `text` (`{ label, value }` needs no accessor).
|
|
2483
|
+
*
|
|
2484
|
+
* @defaultValue own `label`, else `text`, else `JSON.stringify(item)`
|
|
2481
2485
|
*/
|
|
2482
2486
|
itemText?: ItemAccessor<Item, string>;
|
|
2483
2487
|
/**
|
|
@@ -2504,7 +2508,9 @@ export type BbSelectPopoverProps<Item> = {
|
|
|
2504
2508
|
/**
|
|
2505
2509
|
* Path to item property for value or function to extract it.
|
|
2506
2510
|
*
|
|
2507
|
-
*
|
|
2511
|
+
* Unset: own `value`, even `null`.
|
|
2512
|
+
*
|
|
2513
|
+
* @defaultValue own `value`, else the whole item
|
|
2508
2514
|
*/
|
|
2509
2515
|
itemValue?: ItemAccessor<Item>;
|
|
2510
2516
|
/**
|
|
@@ -2820,7 +2826,7 @@ export type BbSelectPopoverSlots<Item> = {
|
|
|
2820
2826
|
elements, which declare both on the panel */
|
|
2821
2827
|
.bb-select-popover {
|
|
2822
2828
|
overflow: visible;
|
|
2823
|
-
text-align:
|
|
2829
|
+
text-align: start;
|
|
2824
2830
|
width: var(--w, 320px);
|
|
2825
2831
|
|
|
2826
2832
|
.bb-common-popover__bubble {
|
|
@@ -2855,10 +2861,10 @@ export type BbSelectPopoverSlots<Item> = {
|
|
|
2855
2861
|
.bb-select-popover__clear {
|
|
2856
2862
|
color: var(--bb-text-muted);
|
|
2857
2863
|
flex-shrink: 0;
|
|
2864
|
+
inset-inline-end: 0.75rem;
|
|
2858
2865
|
opacity: 0;
|
|
2859
2866
|
pointer-events: none;
|
|
2860
2867
|
position: absolute;
|
|
2861
|
-
right: 0.75rem;
|
|
2862
2868
|
top: 50%;
|
|
2863
2869
|
transform: translateY(-50%);
|
|
2864
2870
|
transition:
|
|
@@ -2882,7 +2888,7 @@ export type BbSelectPopoverSlots<Item> = {
|
|
|
2882
2888
|
}
|
|
2883
2889
|
|
|
2884
2890
|
.bb-select-popover__clear {
|
|
2885
|
-
|
|
2891
|
+
inset-inline-end: calc(0.75rem - 3px);
|
|
2886
2892
|
}
|
|
2887
2893
|
|
|
2888
2894
|
.bb-select-popover__clear:hover {
|
|
@@ -2898,7 +2904,7 @@ export type BbSelectPopoverSlots<Item> = {
|
|
|
2898
2904
|
line-height: var(--bb-leading);
|
|
2899
2905
|
outline: none;
|
|
2900
2906
|
padding: 0;
|
|
2901
|
-
padding-
|
|
2907
|
+
padding-inline-end: calc(var(--bb-input-icon) + 0.5rem);
|
|
2902
2908
|
width: 100%;
|
|
2903
2909
|
|
|
2904
2910
|
/* Same cue BbDropdown's group search uses — empty field still reads as
|
|
@@ -3028,7 +3034,7 @@ export type BbSelectPopoverSlots<Item> = {
|
|
|
3028
3034
|
min-height: var(--option-h);
|
|
3029
3035
|
opacity: 0;
|
|
3030
3036
|
padding: 0.125rem 0.5rem;
|
|
3031
|
-
text-align:
|
|
3037
|
+
text-align: start;
|
|
3032
3038
|
transition: opacity calc(var(--transition-duration) * 2);
|
|
3033
3039
|
}
|
|
3034
3040
|
|
|
@@ -3063,7 +3069,7 @@ export type BbSelectPopoverSlots<Item> = {
|
|
|
3063
3069
|
.bb-listbox__inner-container {
|
|
3064
3070
|
.bb-listbox__loading {
|
|
3065
3071
|
display: block;
|
|
3066
|
-
text-align:
|
|
3072
|
+
text-align: start;
|
|
3067
3073
|
}
|
|
3068
3074
|
}
|
|
3069
3075
|
}
|
|
@@ -3096,7 +3102,7 @@ export type BbSelectPopoverSlots<Item> = {
|
|
|
3096
3102
|
overflow: auto;
|
|
3097
3103
|
overflow-x: clip;
|
|
3098
3104
|
padding: 0.25rem;
|
|
3099
|
-
text-align:
|
|
3105
|
+
text-align: start;
|
|
3100
3106
|
|
|
3101
3107
|
.bb-listbox__loading,
|
|
3102
3108
|
.bb-listbox__empty {
|
|
@@ -3114,7 +3120,7 @@ export type BbSelectPopoverSlots<Item> = {
|
|
|
3114
3120
|
|
|
3115
3121
|
.bb-listbox__group {
|
|
3116
3122
|
display: block;
|
|
3117
|
-
|
|
3123
|
+
inset-inline-start: 0;
|
|
3118
3124
|
position: absolute;
|
|
3119
3125
|
top: 0;
|
|
3120
3126
|
width: 100%;
|
|
@@ -3136,7 +3142,7 @@ export type BbSelectPopoverSlots<Item> = {
|
|
|
3136
3142
|
font-size: calc(var(--option-font-size, var(--bb-fs)) - 0.125rem);
|
|
3137
3143
|
font-weight: 500;
|
|
3138
3144
|
overflow: hidden;
|
|
3139
|
-
text-align:
|
|
3145
|
+
text-align: start;
|
|
3140
3146
|
text-overflow: ellipsis;
|
|
3141
3147
|
white-space: nowrap;
|
|
3142
3148
|
}
|
|
@@ -3166,9 +3172,9 @@ export type BbSelectPopoverSlots<Item> = {
|
|
|
3166
3172
|
display: flex;
|
|
3167
3173
|
gap: 0.5rem;
|
|
3168
3174
|
height: var(--option-h);
|
|
3169
|
-
|
|
3170
|
-
padding-
|
|
3171
|
-
padding-
|
|
3175
|
+
inset-inline-start: 0;
|
|
3176
|
+
padding-inline-end: 0.5rem;
|
|
3177
|
+
padding-inline-start: 0.5rem;
|
|
3172
3178
|
position: absolute;
|
|
3173
3179
|
top: 0;
|
|
3174
3180
|
transition: background-color var(--bb-transition-fast)
|
|
@@ -3262,7 +3268,7 @@ export type BbSelectPopoverSlots<Item> = {
|
|
|
3262
3268
|
font-size: var(--option-font-size, var(--bb-fs));
|
|
3263
3269
|
min-width: 0;
|
|
3264
3270
|
overflow: hidden;
|
|
3265
|
-
text-align:
|
|
3271
|
+
text-align: start;
|
|
3266
3272
|
text-overflow: ellipsis;
|
|
3267
3273
|
white-space: nowrap;
|
|
3268
3274
|
}
|
|
@@ -3272,7 +3278,7 @@ export type BbSelectPopoverSlots<Item> = {
|
|
|
3272
3278
|
font-size: calc(var(--option-font-size, var(--bb-fs)) - 2px);
|
|
3273
3279
|
line-height: 1.3;
|
|
3274
3280
|
overflow: hidden;
|
|
3275
|
-
text-align:
|
|
3281
|
+
text-align: start;
|
|
3276
3282
|
text-overflow: ellipsis;
|
|
3277
3283
|
white-space: nowrap;
|
|
3278
3284
|
}
|
|
@@ -3335,7 +3341,7 @@ export type BbSelectPopoverSlots<Item> = {
|
|
|
3335
3341
|
text-align: center;
|
|
3336
3342
|
|
|
3337
3343
|
&:has(~ .bb-close-button) {
|
|
3338
|
-
padding-
|
|
3344
|
+
padding-inline-start: calc(var(--close-size) + 4px);
|
|
3339
3345
|
}
|
|
3340
3346
|
}
|
|
3341
3347
|
|
|
@@ -3377,7 +3383,7 @@ export type BbSelectPopoverSlots<Item> = {
|
|
|
3377
3383
|
the title, not three stacked bands. Inline inset is the OffCanvas
|
|
3378
3384
|
body's `--px`. */
|
|
3379
3385
|
padding: 0 0 0.5rem;
|
|
3380
|
-
text-align:
|
|
3386
|
+
text-align: start;
|
|
3381
3387
|
}
|
|
3382
3388
|
|
|
3383
3389
|
.bb-select-popover__sheet-chips {
|
|
@@ -3443,13 +3449,13 @@ export type BbSelectPopoverSlots<Item> = {
|
|
|
3443
3449
|
otherwise win and swallow the extra 4px. */
|
|
3444
3450
|
span[role='listbox'] .bb-listbox__option,
|
|
3445
3451
|
.bb-listbox__group > .bb-listbox__option {
|
|
3446
|
-
padding-
|
|
3452
|
+
padding-inline-start: calc(0.5rem + 4px);
|
|
3447
3453
|
}
|
|
3448
3454
|
|
|
3449
3455
|
.bb-listbox__group-header,
|
|
3450
3456
|
.bb-listbox__loading,
|
|
3451
3457
|
.bb-listbox__empty {
|
|
3452
|
-
padding-
|
|
3458
|
+
padding-inline-start: calc(0.5rem + 4px);
|
|
3453
3459
|
}
|
|
3454
3460
|
}
|
|
3455
3461
|
}
|