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
|
@@ -69,7 +69,8 @@
|
|
|
69
69
|
<script setup lang="ts">
|
|
70
70
|
import { BbBaseButton, BbSpinner } from '@/index';
|
|
71
71
|
import BbIcon from '../BbIcon/BbIcon.vue';
|
|
72
|
-
import { computed, mergeProps, ref, useAttrs, watchEffect } from 'vue';
|
|
72
|
+
import { computed, inject, mergeProps, ref, useAttrs, watchEffect } from 'vue';
|
|
73
|
+
import { BB_FORM_SUBMIT_LOCK } from '@/composables/formSubmitLock';
|
|
73
74
|
import { pickBy } from '@/utilities/functions/pickBy';
|
|
74
75
|
import { noop } from '@/utilities/functions/noop';
|
|
75
76
|
import { useLocale } from '@/composables/useLocale';
|
|
@@ -81,6 +82,7 @@ import { extractDomContainer } from '@/utilities/functions/extractDomContainer';
|
|
|
81
82
|
import { isEqual } from '@/utilities/functions/isEqual';
|
|
82
83
|
import { usePassthrough } from '@/composables/usePassthrough';
|
|
83
84
|
import { BB_BUTTON_PT, type BbButtonProps, type BbButtonSlots } from './types';
|
|
85
|
+
import { useToggleRoving } from './toggleRoving';
|
|
84
86
|
import type { Sizes as SizeMap } from '@/types/SizeScale';
|
|
85
87
|
type Sizes = keyof SizeMap;
|
|
86
88
|
|
|
@@ -125,7 +127,7 @@ if (process.env.NODE_ENV !== 'production') {
|
|
|
125
127
|
logger.warn(
|
|
126
128
|
'BbButton: `aria-pressed` is managed by the component and your binding is ignored. ' +
|
|
127
129
|
'Bind `v-model` (with `true-value`/`false-value` when the state is not boolean) — ' +
|
|
128
|
-
'that sets `aria-pressed`, applies `bb-button--
|
|
130
|
+
'that sets `aria-pressed`, applies `bb-button--pressed`, and flips the value on click.'
|
|
129
131
|
);
|
|
130
132
|
});
|
|
131
133
|
}
|
|
@@ -143,8 +145,16 @@ const forwardedAttrs = computed(() => {
|
|
|
143
145
|
|
|
144
146
|
const internalLoading = ref(0);
|
|
145
147
|
|
|
148
|
+
// Q60.17: a `type="submit"` button inside a BbForm spins while the form's
|
|
149
|
+
// save runs (unless the form sets `disable-submit-lock`). Other buttons in
|
|
150
|
+
// the form (Cancel, a row action) are untouched.
|
|
151
|
+
const formLock = inject(BB_FORM_SUBMIT_LOCK, null);
|
|
152
|
+
|
|
146
153
|
const loading = computed(
|
|
147
|
-
() =>
|
|
154
|
+
() =>
|
|
155
|
+
props.loading ||
|
|
156
|
+
(!!internalLoading.value && !props.disableAutoLoading) ||
|
|
157
|
+
(props.type === 'submit' && !!formLock?.locked())
|
|
148
158
|
);
|
|
149
159
|
|
|
150
160
|
/** Latches on the first load; gates the spinner's <Transition> — see the template. */
|
|
@@ -166,6 +176,7 @@ const passthrough = usePassthrough({
|
|
|
166
176
|
active: {
|
|
167
177
|
loading: () => loading.value,
|
|
168
178
|
disabled: () => !!props.disabled,
|
|
179
|
+
pressed: () => isToggle.value && isPressed.value,
|
|
169
180
|
},
|
|
170
181
|
});
|
|
171
182
|
|
|
@@ -288,11 +299,35 @@ const softDisabled = computed(
|
|
|
288
299
|
() => loading.value && !props.interactiveWhileLoading
|
|
289
300
|
);
|
|
290
301
|
|
|
302
|
+
/**
|
|
303
|
+
* Adjacent `group` toggles are one Tab stop with arrow keys inside
|
|
304
|
+
* (Q44.25-001, see `toggleRoving.ts`). A consumer `tabindex` opts a button out.
|
|
305
|
+
*/
|
|
306
|
+
const roving = useToggleRoving(
|
|
307
|
+
buttonDom,
|
|
308
|
+
computed(() => !!props.group && isToggle.value && !('tabindex' in attrs)),
|
|
309
|
+
() => [isPressed.value, props.disabled, softDisabled.value]
|
|
310
|
+
);
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* The `tabindex` / `aria-disabled` we mean, or nothing. Written as `undefined`
|
|
314
|
+
* they used to reach `mergeProps` after the forwarded attrs and erase a
|
|
315
|
+
* consumer's own `tabindex` / `aria-disabled`: an explicit attr wins unless we
|
|
316
|
+
* mean one (loading takes the button out of the tab order either way).
|
|
317
|
+
*/
|
|
318
|
+
const managedFocus = computed(() => {
|
|
319
|
+
const tabindex = softDisabled.value ? -1 : roving.tabindex.value;
|
|
320
|
+
return {
|
|
321
|
+
...(softDisabled.value ? { 'aria-disabled': true } : {}),
|
|
322
|
+
...(tabindex === undefined ? {} : { tabindex }),
|
|
323
|
+
};
|
|
324
|
+
});
|
|
325
|
+
|
|
291
326
|
const rootBindings = computed(() =>
|
|
292
327
|
mergeProps(
|
|
293
328
|
propsToPass.value,
|
|
294
329
|
{
|
|
295
|
-
|
|
330
|
+
...managedFocus.value,
|
|
296
331
|
'aria-pressed': isToggle.value ? isPressed.value : undefined,
|
|
297
332
|
class: [
|
|
298
333
|
'bb-button',
|
|
@@ -302,13 +337,14 @@ const rootBindings = computed(() =>
|
|
|
302
337
|
'bb-button--soft-disabled': softDisabled.value,
|
|
303
338
|
'bb-button--group': props.group,
|
|
304
339
|
'bb-button--icon': !!props.icon,
|
|
305
|
-
'bb-button--
|
|
340
|
+
'bb-button--pressed': isToggle.value && isPressed.value,
|
|
306
341
|
[`bb-button--${props.variant}`]: props.variant !== 'none',
|
|
307
342
|
},
|
|
308
343
|
],
|
|
309
344
|
disabled: props.disabled,
|
|
310
|
-
tabindex: softDisabled.value ? -1 : undefined,
|
|
311
345
|
onClick,
|
|
346
|
+
onFocusin: roving.onFocusin,
|
|
347
|
+
onKeydown: roving.onKeydown,
|
|
312
348
|
},
|
|
313
349
|
passthrough.root
|
|
314
350
|
)
|
|
@@ -358,17 +394,24 @@ type Sizes = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
|
358
394
|
*/
|
|
359
395
|
export type BbButtonPtPart = 'root' | 'icon' | 'spinner' | 'text';
|
|
360
396
|
/**
|
|
361
|
-
* Passthrough states of `BbButton`: true while `--loading` / `--disabled
|
|
397
|
+
* Passthrough states of `BbButton`: true while `--loading` / `--disabled` /
|
|
398
|
+
* `--pressed`. There is no `active` state (the pointer press is Tailwind's
|
|
399
|
+
* `active:` variant) and no `current` state (a link to the current route is
|
|
400
|
+
* `activeClass` / `exactActiveClass`).
|
|
362
401
|
*
|
|
363
402
|
* @state disabled - Component-wide: the button is `disabled`.
|
|
364
403
|
* @state loading - Component-wide: `loading` is on — the spinner shows and
|
|
365
404
|
* the button ignores the pointer.
|
|
405
|
+
* @state pressed - Component-wide: a toggle button (`v-model`) is on —
|
|
406
|
+
* `aria-pressed="true"`, `--pressed` on the root.
|
|
366
407
|
*/
|
|
367
|
-
export type BbButtonPtState = 'loading' | 'disabled';
|
|
408
|
+
export type BbButtonPtState = 'loading' | 'disabled' | 'pressed';
|
|
368
409
|
/** The runtime lists the resolver is wired with — kept next to the types so the two cannot drift. */
|
|
369
410
|
export const BB_BUTTON_PT = {
|
|
370
411
|
parts: ['root', 'icon', 'spinner', 'text'],
|
|
371
|
-
|
|
412
|
+
// Order = precedence, last wins: a pressed toggle that is also disabled or
|
|
413
|
+
// loading shows the disabled / loading styling.
|
|
414
|
+
states: ['pressed', 'disabled', 'loading'],
|
|
372
415
|
} as const satisfies {
|
|
373
416
|
parts: readonly BbButtonPtPart[];
|
|
374
417
|
states: readonly BbButtonPtState[];
|
|
@@ -455,7 +498,10 @@ export type BbButtonProps = {
|
|
|
455
498
|
exactActiveClass?: string;
|
|
456
499
|
|
|
457
500
|
/**
|
|
458
|
-
* Identifies the button as part of a button group
|
|
501
|
+
* Identifies the button as part of a button group: adjacent `group`
|
|
502
|
+
* buttons fuse into one segment (shared borders and radius). Adjacent
|
|
503
|
+
* `group` toggles (each with a `v-model`) are also one Tab stop, with
|
|
504
|
+
* ArrowLeft / ArrowRight / Home / End moving between them.
|
|
459
505
|
*/
|
|
460
506
|
group?: boolean;
|
|
461
507
|
|
|
@@ -877,15 +923,6 @@ export type BbButtonSlots = {
|
|
|
877
923
|
border-radius: var(--r);
|
|
878
924
|
border-style: solid;
|
|
879
925
|
border-width: var(--bw);
|
|
880
|
-
/* Resting lift, but only on a PLATE — primary, secondary, outline and
|
|
881
|
-
destructive opt in below. Ghost, link and `none` stay flat whatever the
|
|
882
|
-
theme asks for, because a lift on a transparent box reads as a bug.
|
|
883
|
-
|
|
884
|
-
The plates read `--elev-tier`, not `--bb-elev` directly, so the size
|
|
885
|
-
blocks can drop xs and sm to the small tier without handing a shadow to
|
|
886
|
-
the flat variants. */
|
|
887
|
-
--elev-tier: var(--bb-elev); /* the shadow a plate variant may take */
|
|
888
|
-
--elev: 0 0 0 0 transparent; /* the shadow painted; flat variants keep this */
|
|
889
926
|
box-shadow:
|
|
890
927
|
var(--elev),
|
|
891
928
|
0px 0px 0px 0px var(--ring-color);
|
|
@@ -897,14 +934,23 @@ export type BbButtonSlots = {
|
|
|
897
934
|
justify-content: center;
|
|
898
935
|
line-height: var(--fs);
|
|
899
936
|
min-height: var(--h);
|
|
900
|
-
padding-
|
|
901
|
-
padding-
|
|
937
|
+
padding-inline-end: var(--px);
|
|
938
|
+
padding-inline-start: var(--px);
|
|
902
939
|
transition-duration: var(--bb-transition-fast);
|
|
903
940
|
transition-property:
|
|
904
941
|
box-shadow, color, background-color, border-color, min-height, font-size,
|
|
905
942
|
padding-left;
|
|
906
943
|
transition-timing-function: var(--bb-ease);
|
|
907
944
|
vertical-align: top;
|
|
945
|
+
/* Resting lift, but only on a PLATE — primary, secondary, outline and
|
|
946
|
+
destructive opt in below. Ghost, link and `none` stay flat whatever the
|
|
947
|
+
theme asks for, because a lift on a transparent box reads as a bug.
|
|
948
|
+
|
|
949
|
+
The plates read `--elev-tier`, not `--bb-elev` directly, so the size
|
|
950
|
+
blocks can drop xs and sm to the small tier without handing a shadow to
|
|
951
|
+
the flat variants. */
|
|
952
|
+
--elev-tier: var(--bb-elev); /* the shadow a plate variant may take */
|
|
953
|
+
--elev: 0 0 0 0 transparent; /* the shadow painted; flat variants keep this */
|
|
908
954
|
|
|
909
955
|
&:hover:not(.bb-base-button--disabled) {
|
|
910
956
|
background-color: var(--bg-hover);
|
|
@@ -1004,7 +1050,7 @@ export type BbButtonSlots = {
|
|
|
1004
1050
|
rules above, which paint `border-color` on the button and would
|
|
1005
1051
|
otherwise take the left edge with them. */
|
|
1006
1052
|
& + .bb-button.bb-button--group {
|
|
1007
|
-
border-
|
|
1053
|
+
border-inline-start-color: color-mix(
|
|
1008
1054
|
in oklab,
|
|
1009
1055
|
var(--bb-primary) 60%,
|
|
1010
1056
|
var(--bb-border)
|
|
@@ -1022,7 +1068,7 @@ export type BbButtonSlots = {
|
|
|
1022
1068
|
--elev: var(--elev-tier);
|
|
1023
1069
|
|
|
1024
1070
|
& + .bb-button.bb-button--group {
|
|
1025
|
-
border-
|
|
1071
|
+
border-inline-start-color: var(--bb-secondary-pressed);
|
|
1026
1072
|
}
|
|
1027
1073
|
}
|
|
1028
1074
|
|
|
@@ -1092,19 +1138,19 @@ export type BbButtonSlots = {
|
|
|
1092
1138
|
|
|
1093
1139
|
&.bb-button--icon {
|
|
1094
1140
|
min-width: var(--h);
|
|
1095
|
-
padding-
|
|
1096
|
-
padding-
|
|
1141
|
+
padding-inline-end: 0;
|
|
1142
|
+
padding-inline-start: 0;
|
|
1097
1143
|
}
|
|
1098
1144
|
|
|
1099
1145
|
&:has(.bb-button__prepend-icon),
|
|
1100
1146
|
&.bb-button--loading:not(.bb-button--icon):not(
|
|
1101
1147
|
:has(.bb-button__append-icon)
|
|
1102
1148
|
) {
|
|
1103
|
-
padding-
|
|
1149
|
+
padding-inline-start: calc(var(--px) * 0.65);
|
|
1104
1150
|
}
|
|
1105
1151
|
|
|
1106
1152
|
&:has(.bb-button__append-icon) {
|
|
1107
|
-
padding-
|
|
1153
|
+
padding-inline-end: calc(var(--px) * 0.65);
|
|
1108
1154
|
}
|
|
1109
1155
|
|
|
1110
1156
|
&.bb-button--soft-disabled {
|
|
@@ -1125,7 +1171,7 @@ export type BbButtonSlots = {
|
|
|
1125
1171
|
|
|
1126
1172
|
/* No icon to hide behind: carve the spinner's slot out of the label. */
|
|
1127
1173
|
+ .bb-button__text {
|
|
1128
|
-
margin-
|
|
1174
|
+
margin-inline-start: calc(var(--gap) + var(--icon-size));
|
|
1129
1175
|
}
|
|
1130
1176
|
}
|
|
1131
1177
|
|
|
@@ -1137,21 +1183,21 @@ export type BbButtonSlots = {
|
|
|
1137
1183
|
}
|
|
1138
1184
|
|
|
1139
1185
|
.bb-spinner + .bb-button__text {
|
|
1140
|
-
margin-
|
|
1186
|
+
margin-inline-start: 0;
|
|
1141
1187
|
}
|
|
1142
1188
|
}
|
|
1143
1189
|
}
|
|
1144
1190
|
|
|
1145
1191
|
&.bb-button--group {
|
|
1146
1192
|
&:has(+ .bb-button--group) {
|
|
1147
|
-
border-
|
|
1148
|
-
border-
|
|
1149
|
-
border-
|
|
1193
|
+
border-end-end-radius: 0;
|
|
1194
|
+
border-inline-end-width: 0;
|
|
1195
|
+
border-start-end-radius: 0;
|
|
1150
1196
|
}
|
|
1151
1197
|
|
|
1152
1198
|
& + .bb-button--group {
|
|
1153
|
-
border-
|
|
1154
|
-
border-
|
|
1199
|
+
border-end-start-radius: 0;
|
|
1200
|
+
border-start-start-radius: 0;
|
|
1155
1201
|
}
|
|
1156
1202
|
}
|
|
1157
1203
|
|
|
@@ -1221,7 +1267,7 @@ export type BbButtonSlots = {
|
|
|
1221
1267
|
--elev-tier: var(--bb-elev);
|
|
1222
1268
|
}
|
|
1223
1269
|
.bb-button__text {
|
|
1224
|
-
margin-
|
|
1270
|
+
margin-inline-start: 0;
|
|
1225
1271
|
transition: margin-left var(--bb-transition-medium) var(--bb-ease);
|
|
1226
1272
|
|
|
1227
1273
|
/* Optical centering, as on BbBadge's label. Flex centers the LINE BOX,
|
|
@@ -1265,7 +1311,7 @@ export type BbButtonSlots = {
|
|
|
1265
1311
|
by an equal negative margin, so it lands exactly on top of the neighbour
|
|
1266
1312
|
it stands in for. The fade itself is the Vue <Transition> below. */
|
|
1267
1313
|
.bb-spinner {
|
|
1268
|
-
margin-
|
|
1314
|
+
margin-inline-end: calc((var(--gap) + var(--icon-size)) * -1);
|
|
1269
1315
|
}
|
|
1270
1316
|
|
|
1271
1317
|
/* <Transition name="bb-button-spinner"> endpoints; the duration comes from
|
|
@@ -1280,8 +1326,8 @@ export type BbButtonSlots = {
|
|
|
1280
1326
|
it overlays the append icon by the same zero-cost trick. */
|
|
1281
1327
|
&:has(.bb-button__append-icon):not(:has(.bb-button__prepend-icon)) {
|
|
1282
1328
|
.bb-spinner {
|
|
1283
|
-
margin-
|
|
1284
|
-
margin-
|
|
1329
|
+
margin-inline-end: 0;
|
|
1330
|
+
margin-inline-start: calc((var(--gap) + var(--icon-size)) * -1);
|
|
1285
1331
|
order: 1;
|
|
1286
1332
|
}
|
|
1287
1333
|
}
|
|
@@ -1159,7 +1159,7 @@ export type BbCalendarSlots = {
|
|
|
1159
1159
|
set inline from the column count), so it is always exactly as tall as the
|
|
1160
1160
|
grid. */
|
|
1161
1161
|
&--datetime {
|
|
1162
|
-
padding-
|
|
1162
|
+
padding-inline-end: var(--rail-w, 252px);
|
|
1163
1163
|
position: relative;
|
|
1164
1164
|
}
|
|
1165
1165
|
|
|
@@ -1175,7 +1175,7 @@ export type BbCalendarSlots = {
|
|
|
1175
1175
|
contain-intrinsic-inline-size: var(--natural-w);
|
|
1176
1176
|
|
|
1177
1177
|
container: bb-calendar / inline-size;
|
|
1178
|
-
padding-
|
|
1178
|
+
padding-inline-end: 0;
|
|
1179
1179
|
width: min(100%, var(--natural-w));
|
|
1180
1180
|
}
|
|
1181
1181
|
|
|
@@ -1360,7 +1360,7 @@ export type BbCalendarSlots = {
|
|
|
1360
1360
|
/* Out of flow only while it leaves, so the box's height is the
|
|
1361
1361
|
incoming month (slots included) and can ease to it. */
|
|
1362
1362
|
&[class*='leave-active'] {
|
|
1363
|
-
|
|
1363
|
+
inset-inline-start: 0;
|
|
1364
1364
|
position: absolute;
|
|
1365
1365
|
top: 0;
|
|
1366
1366
|
}
|
|
@@ -1431,10 +1431,10 @@ export type BbCalendarSlots = {
|
|
|
1431
1431
|
border-radius: 0;
|
|
1432
1432
|
content: '';
|
|
1433
1433
|
height: calc(var(--cell) - 4px);
|
|
1434
|
-
|
|
1434
|
+
inset-inline-end: 0;
|
|
1435
|
+
inset-inline-start: 0;
|
|
1435
1436
|
pointer-events: none;
|
|
1436
1437
|
position: absolute;
|
|
1437
|
-
right: 0;
|
|
1438
1438
|
top: 2px;
|
|
1439
1439
|
transition: background-color var(--bb-transition-fast);
|
|
1440
1440
|
z-index: 0;
|
|
@@ -1448,12 +1448,12 @@ export type BbCalendarSlots = {
|
|
|
1448
1448
|
/* Endpoints extend the wash on their inner side only, under the solid cap */
|
|
1449
1449
|
&--first:not([class*='--last'])::before {
|
|
1450
1450
|
background-color: color-mix(in oklab, var(--bb-primary) 15%, transparent);
|
|
1451
|
-
|
|
1451
|
+
inset-inline-start: 50%;
|
|
1452
1452
|
}
|
|
1453
1453
|
|
|
1454
1454
|
&--last:not([class*='--first'])::before {
|
|
1455
1455
|
background-color: color-mix(in oklab, var(--bb-primary) 15%, transparent);
|
|
1456
|
-
|
|
1456
|
+
inset-inline-end: 50%;
|
|
1457
1457
|
}
|
|
1458
1458
|
|
|
1459
1459
|
/* Round the band where it terminates at a row wrap */
|
|
@@ -1473,12 +1473,12 @@ export type BbCalendarSlots = {
|
|
|
1473
1473
|
|
|
1474
1474
|
&--preview-end::before {
|
|
1475
1475
|
border-radius: 0 var(--bb-radius-sm) var(--bb-radius-sm) 0;
|
|
1476
|
-
|
|
1476
|
+
inset-inline-end: 2px;
|
|
1477
1477
|
}
|
|
1478
1478
|
|
|
1479
1479
|
&--preview-start::before {
|
|
1480
1480
|
border-radius: var(--bb-radius-sm) 0 0 var(--bb-radius-sm);
|
|
1481
|
-
|
|
1481
|
+
inset-inline-start: 2px;
|
|
1482
1482
|
}
|
|
1483
1483
|
|
|
1484
1484
|
/* Days of the previous / next month are live controls: muted, never
|
|
@@ -1501,6 +1501,7 @@ export type BbCalendarSlots = {
|
|
|
1501
1501
|
bottom: 2px;
|
|
1502
1502
|
content: '';
|
|
1503
1503
|
height: 2px;
|
|
1504
|
+
/* stylelint-disable-next-line property-disallowed-list -- geometry: centred with a physical translate */
|
|
1504
1505
|
left: 50%;
|
|
1505
1506
|
position: absolute;
|
|
1506
1507
|
transform: translateX(-50%);
|
|
@@ -1590,7 +1591,7 @@ export type BbCalendarSlots = {
|
|
|
1590
1591
|
&__button-menu {
|
|
1591
1592
|
background-color: var(--bg);
|
|
1592
1593
|
height: 100%;
|
|
1593
|
-
|
|
1594
|
+
inset-inline-start: 0;
|
|
1594
1595
|
position: absolute;
|
|
1595
1596
|
top: 0;
|
|
1596
1597
|
width: 100%;
|
|
@@ -1689,7 +1690,7 @@ export type BbCalendarSlots = {
|
|
|
1689
1690
|
var(--bb-primary) 15%,
|
|
1690
1691
|
transparent
|
|
1691
1692
|
);
|
|
1692
|
-
|
|
1693
|
+
inset-inline-start: 50%;
|
|
1693
1694
|
}
|
|
1694
1695
|
|
|
1695
1696
|
&--last:not([class*='--first'])::before {
|
|
@@ -1698,7 +1699,7 @@ export type BbCalendarSlots = {
|
|
|
1698
1699
|
var(--bb-primary) 15%,
|
|
1699
1700
|
transparent
|
|
1700
1701
|
);
|
|
1701
|
-
|
|
1702
|
+
inset-inline-end: 50%;
|
|
1702
1703
|
}
|
|
1703
1704
|
|
|
1704
1705
|
/* Row wraps: cap the band where the grid breaks. */
|
|
@@ -1819,7 +1820,7 @@ export type BbCalendarSlots = {
|
|
|
1819
1820
|
*/
|
|
1820
1821
|
@container bb-calendar (width < 335px) {
|
|
1821
1822
|
.bb-time-selector {
|
|
1822
|
-
border-
|
|
1823
|
+
border-inline-start: 0;
|
|
1823
1824
|
border-top: var(--bb-border-w) solid var(--bb-border);
|
|
1824
1825
|
margin-top: 8px;
|
|
1825
1826
|
padding: 8px 0 0;
|
|
@@ -1835,7 +1836,7 @@ export type BbCalendarSlots = {
|
|
|
1835
1836
|
|
|
1836
1837
|
@container bb-calendar (335px <= width < 385px) {
|
|
1837
1838
|
:is(.bb-calendar--seconds, .bb-calendar--ampm) .bb-time-selector {
|
|
1838
|
-
border-
|
|
1839
|
+
border-inline-start: 0;
|
|
1839
1840
|
border-top: var(--bb-border-w) solid var(--bb-border);
|
|
1840
1841
|
margin-top: 8px;
|
|
1841
1842
|
padding: 8px 0 0;
|
|
@@ -1851,7 +1852,7 @@ export type BbCalendarSlots = {
|
|
|
1851
1852
|
|
|
1852
1853
|
@container bb-calendar (385px <= width < 389px) {
|
|
1853
1854
|
.bb-calendar--ampm .bb-time-selector {
|
|
1854
|
-
border-
|
|
1855
|
+
border-inline-start: 0;
|
|
1855
1856
|
border-top: var(--bb-border-w) solid var(--bb-border);
|
|
1856
1857
|
margin-top: 8px;
|
|
1857
1858
|
padding: 8px 0 0;
|
|
@@ -1867,7 +1868,7 @@ export type BbCalendarSlots = {
|
|
|
1867
1868
|
|
|
1868
1869
|
@container bb-calendar (389px <= width < 439px) {
|
|
1869
1870
|
.bb-calendar--seconds.bb-calendar--ampm .bb-time-selector {
|
|
1870
|
-
border-
|
|
1871
|
+
border-inline-start: 0;
|
|
1871
1872
|
border-top: var(--bb-border-w) solid var(--bb-border);
|
|
1872
1873
|
margin-top: 8px;
|
|
1873
1874
|
padding: 8px 0 0;
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
:layout="layout"
|
|
27
27
|
:name="name"
|
|
28
28
|
:passthrough="passthrough"
|
|
29
|
-
:readonly="
|
|
29
|
+
:readonly="fieldReadonly"
|
|
30
30
|
:reverse="reverse"
|
|
31
31
|
:show-asterisk="showAsterisk"
|
|
32
32
|
:show-hint="showHint"
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
:has-errors="!!fieldHasErrors"
|
|
72
72
|
:has-warnings="!!fieldHasWarnings && !fieldHasErrors"
|
|
73
73
|
:indeterminate="!!indeterminate"
|
|
74
|
-
:readonly="!!
|
|
74
|
+
:readonly="!!fieldReadonly"
|
|
75
75
|
v-bind="passthrough.icon"
|
|
76
76
|
/>
|
|
77
77
|
<!-- eslint-enable vue/attributes-order -->
|
|
@@ -137,6 +137,7 @@ const {
|
|
|
137
137
|
showAsterisk,
|
|
138
138
|
errors: fieldErrors,
|
|
139
139
|
ariaRequired: fieldAriaRequired,
|
|
140
|
+
readonly: fieldReadonly,
|
|
140
141
|
} = useFormBinding(declaredProps, declaredEmit, {
|
|
141
142
|
componentName: 'BbCheckbox',
|
|
142
143
|
identifierFallback: () => declaredProps.label,
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
:loading="loading"
|
|
30
30
|
:name="name"
|
|
31
31
|
:passthrough="containerPassthrough"
|
|
32
|
-
:readonly="
|
|
32
|
+
:readonly="fieldReadonly"
|
|
33
33
|
:reverse="reverse"
|
|
34
34
|
:show-asterisk="showAsterisk"
|
|
35
35
|
:show-hint="showHint"
|
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
:has-errors="!!fieldHasErrors"
|
|
113
113
|
:has-warnings="!!fieldHasWarnings && !fieldHasErrors"
|
|
114
114
|
:indeterminate="false"
|
|
115
|
-
:readonly="!!
|
|
115
|
+
:readonly="!!fieldReadonly"
|
|
116
116
|
v-bind="passthrough.part('icon', rowStates, option.item)"
|
|
117
117
|
/>
|
|
118
118
|
<!-- eslint-enable vue/attributes-order -->
|
|
@@ -194,6 +194,7 @@ const {
|
|
|
194
194
|
emit,
|
|
195
195
|
showAsterisk,
|
|
196
196
|
errors: fieldErrors,
|
|
197
|
+
readonly: fieldReadonly,
|
|
197
198
|
} = useFormBinding(declaredProps, declaredEmit, {
|
|
198
199
|
componentName: 'BbCheckboxGroup',
|
|
199
200
|
identifierFallback: () => declaredProps.legend,
|
|
@@ -298,6 +299,7 @@ const { options } = useBaseOptions({
|
|
|
298
299
|
itemText: props.itemText as any,
|
|
299
300
|
itemProps: toRef(props, 'itemProps'),
|
|
300
301
|
itemValue: props.itemValue as any,
|
|
302
|
+
optionDefaults: true,
|
|
301
303
|
// A ref, not the setup-time number: a runtime `:max` change must re-gate rows.
|
|
302
304
|
max: toRef(props, 'max'),
|
|
303
305
|
selectable: toRef(props, 'selectable'),
|
|
@@ -754,14 +756,18 @@ export type BbCheckboxGroupProps<T> = {
|
|
|
754
756
|
/**
|
|
755
757
|
* Defines a path that returns a property of the object to use as text or a function that returns a string.
|
|
756
758
|
*
|
|
757
|
-
*
|
|
759
|
+
* Unset: own `label`, else `text` (`{ label, value }` needs no accessor).
|
|
760
|
+
*
|
|
761
|
+
* @defaultValue own `label`, else `text`, else `JSON.stringify(item)`
|
|
758
762
|
*/
|
|
759
763
|
itemText?: ItemAccessor<T, string>;
|
|
760
764
|
|
|
761
765
|
/**
|
|
762
766
|
* Defines a path that returns a property of the object to use as value or a function that returns any value.
|
|
763
767
|
*
|
|
764
|
-
*
|
|
768
|
+
* Unset: own `value`, even `null`.
|
|
769
|
+
*
|
|
770
|
+
* @defaultValue own `value`, else the whole item
|
|
765
771
|
*/
|
|
766
772
|
itemValue?: ItemAccessor<T>;
|
|
767
773
|
|
|
@@ -1072,6 +1078,7 @@ export type BbCheckboxGroupSlots<T> = {
|
|
|
1072
1078
|
.bb-checkbox-group {
|
|
1073
1079
|
.bb-field__layout--horizontal {
|
|
1074
1080
|
.bb-field__label {
|
|
1081
|
+
/* stylelint-disable-next-line declaration-property-value-disallowed-list -- support: `float: inline-start` needs Chrome 118, above the 114 floor */
|
|
1075
1082
|
float: left;
|
|
1076
1083
|
}
|
|
1077
1084
|
}
|
|
@@ -130,7 +130,8 @@ export type BbCollapsibleProps = {
|
|
|
130
130
|
*/
|
|
131
131
|
tag?: LayoutTag;
|
|
132
132
|
/**
|
|
133
|
-
*
|
|
133
|
+
* Renders the content at mount, while closed, instead of on the first
|
|
134
|
+
* open. Closed content is `inert` and `aria-hidden` either way.
|
|
134
135
|
*/
|
|
135
136
|
eager?: boolean;
|
|
136
137
|
/**
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
:loading="loading"
|
|
29
29
|
:name="name"
|
|
30
30
|
:passthrough="passthrough"
|
|
31
|
-
:readonly="
|
|
31
|
+
:readonly="fieldReadonly"
|
|
32
32
|
:reverse="reverse"
|
|
33
33
|
:show-asterisk="showAsterisk"
|
|
34
34
|
:show-hint="showHint"
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
ref="wrapperRef"
|
|
53
53
|
:append:icon="props['append:icon']"
|
|
54
54
|
class="bb-color-input__field"
|
|
55
|
-
:clearable="clearable && hasValue && !
|
|
55
|
+
:clearable="clearable && hasValue && !fieldReadonly && !disabled"
|
|
56
56
|
:compact="compact"
|
|
57
57
|
:disabled="disabled"
|
|
58
58
|
:has-errors="fieldHasErrors"
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
:loading="loading"
|
|
62
62
|
:passthrough="passthrough"
|
|
63
63
|
:prepend:icon="props['prepend:icon']"
|
|
64
|
-
:readonly="
|
|
64
|
+
:readonly="fieldReadonly"
|
|
65
65
|
:variant="variant"
|
|
66
66
|
@click:clear="emit('update:modelValue', null)"
|
|
67
67
|
>
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
:aria-disabled="disabled || undefined"
|
|
77
77
|
:aria-invalid="fieldHasErrors ? true : undefined"
|
|
78
78
|
:aria-labelledby="ariaLabelledby"
|
|
79
|
-
:aria-readonly="
|
|
79
|
+
:aria-readonly="fieldReadonly || undefined"
|
|
80
80
|
:aria-required="fieldAriaRequired"
|
|
81
81
|
:autocomplete="autocomplete"
|
|
82
82
|
:autofocus="autofocus"
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
:disabled="disabled"
|
|
85
85
|
:name="name"
|
|
86
86
|
:placeholder="placeholder"
|
|
87
|
-
:readonly="
|
|
87
|
+
:readonly="fieldReadonly"
|
|
88
88
|
:required="fieldRequired"
|
|
89
89
|
size="1"
|
|
90
90
|
type="text"
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
:adaptive="adaptive"
|
|
100
100
|
:alpha="alpha"
|
|
101
101
|
:anchor="wrapperRef"
|
|
102
|
-
:disabled="disabled ||
|
|
102
|
+
:disabled="disabled || fieldReadonly"
|
|
103
103
|
:eye-dropper="eyeDropper"
|
|
104
104
|
:label="indicatorLabel"
|
|
105
105
|
:model-value="fieldModel"
|
|
@@ -126,7 +126,7 @@
|
|
|
126
126
|
<button
|
|
127
127
|
v-bind="indicatorBindings(dotProps)"
|
|
128
128
|
class="bb-color-input__indicator"
|
|
129
|
-
:disabled="disabled ||
|
|
129
|
+
:disabled="disabled || fieldReadonly"
|
|
130
130
|
:style="{ backgroundColor: fieldModel ?? undefined }"
|
|
131
131
|
type="button"
|
|
132
132
|
/>
|
|
@@ -197,6 +197,7 @@ const {
|
|
|
197
197
|
required: fieldRequired,
|
|
198
198
|
ariaRequired: fieldAriaRequired,
|
|
199
199
|
model: fieldModel,
|
|
200
|
+
readonly: fieldReadonly,
|
|
200
201
|
} = useFormBinding(declaredProps, declaredEmit, {
|
|
201
202
|
componentName: 'BbColorInput',
|
|
202
203
|
identifierFallback: () => declaredProps.label,
|
|
@@ -900,11 +901,11 @@ export type BbColorInputSlots = {
|
|
|
900
901
|
&::after {
|
|
901
902
|
content: '';
|
|
902
903
|
height: calc(var(--bb-input-h) - 2 * var(--bb-border-w));
|
|
903
|
-
|
|
904
|
-
right: max(
|
|
904
|
+
inset-inline-end: max(
|
|
905
905
|
calc((var(--bb-input-icon) - var(--bb-input-h)) / 2),
|
|
906
906
|
calc(var(--bb-input-px) * -1)
|
|
907
907
|
);
|
|
908
|
+
position: absolute;
|
|
908
909
|
top: 50%;
|
|
909
910
|
transform: translateY(-50%);
|
|
910
911
|
width: var(--bb-input-h);
|
|
@@ -1290,7 +1290,8 @@ export type BbColorPaletteProps = {
|
|
|
1290
1290
|
*/
|
|
1291
1291
|
disableFlip?: boolean;
|
|
1292
1292
|
/**
|
|
1293
|
-
*
|
|
1293
|
+
* Renders the palette panel at mount instead of on the first open (the
|
|
1294
|
+
* phone sheet's too).
|
|
1294
1295
|
*/
|
|
1295
1296
|
eager?: boolean;
|
|
1296
1297
|
/**
|
|
@@ -313,6 +313,23 @@ export type BbConfirmProps = {
|
|
|
313
313
|
*/
|
|
314
314
|
size?: keyof DialogSizes;
|
|
315
315
|
};
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* The default slot scope of `<BbConfirmPortal>`: the ONE place this family's
|
|
319
|
+
* portal slot is typed (Q63.8), so tooling that infers `props` from the call
|
|
320
|
+
* sites hooks a single type: `P`, the type of `props`, is the seam it will
|
|
321
|
+
* feed (through a type-only prop on the portal component). Until then `P` is
|
|
322
|
+
* `any`, so `props.person.name` type-checks with no cast.
|
|
323
|
+
*/
|
|
324
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- the default is the point (Q63.8)
|
|
325
|
+
export type BbConfirmPortalSlotProps<P = any> = {
|
|
326
|
+
/** The `portalProps` the `confirm()` passed. */
|
|
327
|
+
props: P;
|
|
328
|
+
/** Resolves the confirm with `true`. */
|
|
329
|
+
yes: () => void;
|
|
330
|
+
/** Resolves the confirm with `false`. */
|
|
331
|
+
no: () => void;
|
|
332
|
+
};
|
|
316
333
|
```
|
|
317
334
|
|
|
318
335
|
## Styles
|
|
@@ -337,7 +354,7 @@ export type BbConfirmProps = {
|
|
|
337
354
|
display: flex;
|
|
338
355
|
justify-content: flex-end;
|
|
339
356
|
> :not(:last-child) {
|
|
340
|
-
margin-
|
|
357
|
+
margin-inline-end: 12px;
|
|
341
358
|
}
|
|
342
359
|
}
|
|
343
360
|
}
|