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
|
@@ -308,14 +308,17 @@ export type BbToastProps = {
|
|
|
308
308
|
}
|
|
309
309
|
.bb-toast--top-left,
|
|
310
310
|
.bb-toast--bottom-left {
|
|
311
|
+
/* stylelint-disable-next-line property-disallowed-list -- geometry: the `position` prop names a physical corner */
|
|
311
312
|
left: calc(var(--offset) + var(--safe-h, 0px));
|
|
312
313
|
}
|
|
313
314
|
.bb-toast--top-right,
|
|
314
315
|
.bb-toast--bottom-right {
|
|
316
|
+
/* stylelint-disable-next-line property-disallowed-list -- geometry: the `position` prop names a physical corner */
|
|
315
317
|
right: calc(var(--offset) + var(--safe-h, 0px));
|
|
316
318
|
}
|
|
317
319
|
.bb-toast--top-center,
|
|
318
320
|
.bb-toast--bottom-center {
|
|
321
|
+
/* stylelint-disable-next-line property-disallowed-list -- geometry: centred with a physical translate */
|
|
319
322
|
left: 50%;
|
|
320
323
|
transform: translateX(-50%);
|
|
321
324
|
}
|
|
@@ -365,11 +368,11 @@ export type BbToastProps = {
|
|
|
365
368
|
box-sizing: border-box;
|
|
366
369
|
color: var(--fg);
|
|
367
370
|
height: var(--toast-height);
|
|
368
|
-
|
|
371
|
+
inset-inline-end: 0;
|
|
372
|
+
inset-inline-start: 0;
|
|
369
373
|
overflow: hidden;
|
|
370
374
|
pointer-events: auto;
|
|
371
375
|
position: absolute;
|
|
372
|
-
right: 0;
|
|
373
376
|
touch-action: none;
|
|
374
377
|
|
|
375
378
|
transform: translate3d(
|
|
@@ -512,7 +515,7 @@ export type BbToastProps = {
|
|
|
512
515
|
/* Portal content fills the row (no icon column) and leaves room for the close
|
|
513
516
|
* button when one is shown. */
|
|
514
517
|
.bb-toast__content--portal {
|
|
515
|
-
padding-
|
|
518
|
+
padding-inline-end: 4px;
|
|
516
519
|
}
|
|
517
520
|
|
|
518
521
|
.bb-toast__close {
|
|
@@ -524,11 +527,11 @@ export type BbToastProps = {
|
|
|
524
527
|
cursor: pointer;
|
|
525
528
|
display: flex;
|
|
526
529
|
height: 22px;
|
|
530
|
+
inset-inline-end: 8px;
|
|
527
531
|
justify-content: center;
|
|
528
532
|
opacity: 0;
|
|
529
533
|
padding: 0;
|
|
530
534
|
position: absolute;
|
|
531
|
-
right: 8px;
|
|
532
535
|
top: 8px;
|
|
533
536
|
transition:
|
|
534
537
|
opacity 0.15s var(--bb-ease),
|
|
@@ -582,8 +585,8 @@ export type BbToastProps = {
|
|
|
582
585
|
@media (max-width: 600px) {
|
|
583
586
|
.bb-toast {
|
|
584
587
|
--offset: 14px;
|
|
585
|
-
|
|
586
|
-
|
|
588
|
+
inset-inline-end: var(--offset);
|
|
589
|
+
inset-inline-start: var(--offset);
|
|
587
590
|
width: auto;
|
|
588
591
|
}
|
|
589
592
|
.bb-toast--top-center,
|
|
@@ -621,8 +624,8 @@ export type BbToastProps = {
|
|
|
621
624
|
--hit: 44px;
|
|
622
625
|
content: '';
|
|
623
626
|
height: calc(var(--hit) - 2px);
|
|
627
|
+
inset-inline-end: -8px; /* the button's inset from the card corner */
|
|
624
628
|
position: absolute;
|
|
625
|
-
right: -8px; /* the button's inset from the card corner */
|
|
626
629
|
top: -8px;
|
|
627
630
|
width: var(--hit);
|
|
628
631
|
}
|
|
@@ -34,10 +34,16 @@
|
|
|
34
34
|
paragraph during SSR HTML parsing. The bubble holds phrasing content anyway.
|
|
35
35
|
`role="none"`: Chromium exposes every `[popover]` element as an unnamed group
|
|
36
36
|
of its own, around the `role="tooltip"` span (Q62.3, measured in the AX tree,
|
|
37
|
-
BbTooltip.axTree.test.ts); BbHoverCard's read-only card says the same.
|
|
37
|
+
BbTooltip.axTree.test.ts); BbHoverCard's read-only card says the same.
|
|
38
|
+
Mounted on the first open (or at once with `eager`), never before (Q63.5):
|
|
39
|
+
a closed tooltip is the description node above and the activator's
|
|
40
|
+
listeners, so a thousand of them cost half the instances and under a third of
|
|
41
|
+
the mount time. Nothing a screen reader reads lives in here before it opens
|
|
42
|
+
(the description is above), so the first open is the only change. -->
|
|
38
43
|
<CommonPopover
|
|
44
|
+
v-if="popoverMounted"
|
|
39
45
|
ref="popover"
|
|
40
|
-
v-model="
|
|
46
|
+
v-model="popoverOpen"
|
|
41
47
|
:anchor="activatorEl"
|
|
42
48
|
:arrow-padding="arrowPadding"
|
|
43
49
|
:boundary="boundary"
|
|
@@ -53,6 +59,7 @@
|
|
|
53
59
|
tag="span"
|
|
54
60
|
:transition-duration="transitionDuration"
|
|
55
61
|
v-bind="mergeProps($attrs, passthrough.root)"
|
|
62
|
+
@vue:mounted="onPopoverMounted"
|
|
56
63
|
>
|
|
57
64
|
<span
|
|
58
65
|
:id="id"
|
|
@@ -87,6 +94,7 @@ import {
|
|
|
87
94
|
} from '@/utils/overlayEscapeStack';
|
|
88
95
|
import { useUntil } from '../../composables/useUntil';
|
|
89
96
|
import { useOverlayYield } from '@/composables/useOverlayYield';
|
|
97
|
+
import { isWarm, markHidden, markShown } from './tooltipWarmup';
|
|
90
98
|
import { removedPropsFor } from '@/deprecation/removedProps';
|
|
91
99
|
import { warnRemovedAttrs } from '@/utilities/functions/warnRemovedAttrs';
|
|
92
100
|
import CommonPopover from '../CommonPopover/CommonPopover.vue';
|
|
@@ -119,7 +127,7 @@ const props = withDefaults(defineProps<BbTooltipProps>(), {
|
|
|
119
127
|
placement: 'top',
|
|
120
128
|
variant: 'default',
|
|
121
129
|
transitionDuration: transitions.medium,
|
|
122
|
-
delay:
|
|
130
|
+
delay: 100,
|
|
123
131
|
});
|
|
124
132
|
|
|
125
133
|
const slots = defineSlots<BbTooltipSlots>();
|
|
@@ -188,6 +196,28 @@ const hasExternalActivator = computed(() => props.activator != null);
|
|
|
188
196
|
const popoverRef = useTemplateRef('popover');
|
|
189
197
|
const popoverDom = computed(() => extractDomContainer(popoverRef.value));
|
|
190
198
|
const hasOpenedOnce = useUntil(open);
|
|
199
|
+
/** CommonPopover exists from the first open on, or from mount with `eager` (Q63.5). */
|
|
200
|
+
const popoverMounted = useUntil(() => !!props.eager || open.value);
|
|
201
|
+
/**
|
|
202
|
+
* Whether the popover has rendered closed once. Mounted by the first open, it
|
|
203
|
+
* would otherwise mount already open: no closed style to transition from, so
|
|
204
|
+
* the first open jumped into view while every later one faded in (owner,
|
|
205
|
+
* 2026-10-06). So it mounts closed, its style is computed once (the forced
|
|
206
|
+
* layout below), and the open reaches it on the next render, a tick later:
|
|
207
|
+
* same delay, same fade as every later open.
|
|
208
|
+
*/
|
|
209
|
+
const popoverReady = ref(false);
|
|
210
|
+
const onPopoverMounted = () => {
|
|
211
|
+
popoverDom.value?.getBoundingClientRect();
|
|
212
|
+
popoverReady.value = true;
|
|
213
|
+
};
|
|
214
|
+
/** `open`, held back until the popover is ready; writes go straight through. */
|
|
215
|
+
const popoverOpen = computed({
|
|
216
|
+
get: () => open.value && popoverReady.value,
|
|
217
|
+
set: (value: boolean) => {
|
|
218
|
+
open.value = value;
|
|
219
|
+
},
|
|
220
|
+
});
|
|
191
221
|
|
|
192
222
|
const setActivatorRef = (reference: unknown) => {
|
|
193
223
|
const el = extractDomContainer(reference);
|
|
@@ -216,14 +246,33 @@ const scheduleClose = () => {
|
|
|
216
246
|
_closeTimeout = setTimeout(forceClose, 50);
|
|
217
247
|
};
|
|
218
248
|
|
|
249
|
+
/**
|
|
250
|
+
* A pointer arriving: wait `delay` (it filters a pointer passing over on its
|
|
251
|
+
* way elsewhere), unless another tooltip is showing or closed within the skip
|
|
252
|
+
* window (`tooltipWarmup.ts`), when the user is reading hint after hint.
|
|
253
|
+
*/
|
|
219
254
|
const scheduleOpen = () => {
|
|
220
255
|
cancelClose();
|
|
221
256
|
if (open.value || props.disabled || blocked()) return;
|
|
222
|
-
_openTimeout = setTimeout(
|
|
223
|
-
|
|
224
|
-
|
|
257
|
+
_openTimeout = setTimeout(
|
|
258
|
+
() => {
|
|
259
|
+
if (!blocked()) open.value = true;
|
|
260
|
+
},
|
|
261
|
+
isWarm() ? 0 : props.delay
|
|
262
|
+
);
|
|
225
263
|
};
|
|
226
264
|
|
|
265
|
+
/** Keyboard focus is never accidental: it shows the hint at once, whatever `delay` says. */
|
|
266
|
+
const openNow = () => {
|
|
267
|
+
cancelClose();
|
|
268
|
+
clearTimeout(_openTimeout);
|
|
269
|
+
if (open.value || props.disabled || blocked()) return;
|
|
270
|
+
open.value = true;
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
/** Set while a close is a yield (Q63.7), read by the warm-up bookkeeping below. */
|
|
274
|
+
let yielding = false;
|
|
275
|
+
|
|
227
276
|
// Tooltips give way to anything the user opened deliberately (Q63.7), like
|
|
228
277
|
// hover cards: no showing while a menu, popover, dialog, select or picker is
|
|
229
278
|
// open — unless the trigger is inside it — and a shown one hides. Only the
|
|
@@ -232,7 +281,12 @@ const scheduleOpen = () => {
|
|
|
232
281
|
const { blocked } = useOverlayYield(
|
|
233
282
|
() => activatorEl.value,
|
|
234
283
|
() => popoverDom.value,
|
|
235
|
-
|
|
284
|
+
() => {
|
|
285
|
+
// Giving way to a menu or dialog is not the user moving on: it doesn't
|
|
286
|
+
// warm the next tooltip up.
|
|
287
|
+
yielding = true;
|
|
288
|
+
forceClose();
|
|
289
|
+
}
|
|
236
290
|
);
|
|
237
291
|
|
|
238
292
|
/** A press on the trigger (a click, a right-click opening a menu) hides it at once. */
|
|
@@ -260,7 +314,7 @@ const onEsc = (event: KeyboardEvent) => {
|
|
|
260
314
|
*/
|
|
261
315
|
const onActivatorFocus = (event: FocusEvent) => {
|
|
262
316
|
const el = event.currentTarget as HTMLElement | null;
|
|
263
|
-
if (el?.matches(':focus-visible'))
|
|
317
|
+
if (el?.matches(':focus-visible')) openNow();
|
|
264
318
|
};
|
|
265
319
|
|
|
266
320
|
/**
|
|
@@ -268,7 +322,18 @@ const onActivatorFocus = (event: FocusEvent) => {
|
|
|
268
322
|
* it also works when the tooltip is opened via `v-model`, and never lingers
|
|
269
323
|
* on the document after an external close.
|
|
270
324
|
*/
|
|
325
|
+
/** Whether this tooltip counts as showing in the shared skip window. */
|
|
326
|
+
let counted = false;
|
|
327
|
+
|
|
271
328
|
watch(open, (isOpen) => {
|
|
329
|
+
if (isOpen && !counted) {
|
|
330
|
+
counted = true;
|
|
331
|
+
markShown();
|
|
332
|
+
} else if (!isOpen && counted) {
|
|
333
|
+
counted = false;
|
|
334
|
+
markHidden(!yielding);
|
|
335
|
+
}
|
|
336
|
+
yielding = false;
|
|
272
337
|
if (isOpen) {
|
|
273
338
|
// Transient: a shown tooltip never makes another surface give way.
|
|
274
339
|
pushEscapeEntry(escapeKey, {
|
|
@@ -409,6 +474,11 @@ onBeforeUnmount(() => {
|
|
|
409
474
|
describedByHost = null;
|
|
410
475
|
}
|
|
411
476
|
forceClose();
|
|
477
|
+
// Unmounting is not the user moving on: release the count, no warm-up.
|
|
478
|
+
if (counted) {
|
|
479
|
+
counted = false;
|
|
480
|
+
markHidden(false);
|
|
481
|
+
}
|
|
412
482
|
// The open watcher may not flush during teardown — drop the listener (and
|
|
413
483
|
// the stack entry, which would otherwise wedge Escape page-wide) directly.
|
|
414
484
|
removeEscapeEntry(escapeKey);
|
|
@@ -537,7 +607,9 @@ export type BbTooltipProps = {
|
|
|
537
607
|
*/
|
|
538
608
|
disabled?: boolean;
|
|
539
609
|
/**
|
|
540
|
-
*
|
|
610
|
+
* Renders the tooltip's popover and content at mount instead of on the
|
|
611
|
+
* first open. The description screen readers hear exists from mount either
|
|
612
|
+
* way.
|
|
541
613
|
*/
|
|
542
614
|
eager?: boolean;
|
|
543
615
|
/**
|
|
@@ -599,9 +671,14 @@ export type BbTooltipProps = {
|
|
|
599
671
|
*/
|
|
600
672
|
variant?: BbTooltipVariant;
|
|
601
673
|
/**
|
|
602
|
-
*
|
|
674
|
+
* How long, in milliseconds, a pointer has to rest on the activator before
|
|
675
|
+
* the tooltip shows; it keeps hints from flashing under a pointer passing
|
|
676
|
+
* by. Keyboard focus shows it at once whatever this says, and so does a
|
|
677
|
+
* pointer arriving while another tooltip shows or within 300 ms of one
|
|
678
|
+
* closing (the skip delay, shared by every tooltip). `0` shows it on hover
|
|
679
|
+
* at once.
|
|
603
680
|
*
|
|
604
|
-
* @defaultValue `
|
|
681
|
+
* @defaultValue `100`
|
|
605
682
|
*/
|
|
606
683
|
delay?: number;
|
|
607
684
|
/**
|
package/dist/ai/source/BbTree.md
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
<script setup lang="ts" generic="Meta">
|
|
28
28
|
import { removedPropsFor } from '@/deprecation/removedProps';
|
|
29
29
|
import { warnRemovedAttrs } from '@/utilities/functions/warnRemovedAttrs';
|
|
30
|
-
import { provide, useAttrs, watch } from 'vue';
|
|
30
|
+
import { provide, reactive, useAttrs, watch } from 'vue';
|
|
31
31
|
import BbTreeLevel from './BbTreeLevel.vue';
|
|
32
32
|
import { BbTreeContextKey, type BbTreeContext } from './context';
|
|
33
33
|
import { usePassthrough } from '@/composables/usePassthrough';
|
|
@@ -113,9 +113,27 @@ if (process.env.NODE_ENV !== 'production')
|
|
|
113
113
|
),
|
|
114
114
|
});
|
|
115
115
|
|
|
116
|
+
/*
|
|
117
|
+
* Q44.22 (B): the open state per node. A reactive Set tracks `has(hash)` per
|
|
118
|
+
* key, so a level's nodes depend on their own entries only: toggling one
|
|
119
|
+
* branch re-renders the level that holds it, not every level of the tree
|
|
120
|
+
* (the shared index object used to invalidate them all). Kept in sync with
|
|
121
|
+
* the model synchronously, before any render reads it.
|
|
122
|
+
*/
|
|
123
|
+
const expandedHashes = reactive(new Set<string>());
|
|
124
|
+
watch(
|
|
125
|
+
expandedItemsIndexedByHash,
|
|
126
|
+
(index) => {
|
|
127
|
+
for (const key of expandedHashes)
|
|
128
|
+
if (!(key in index)) expandedHashes.delete(key);
|
|
129
|
+
for (const key of Object.keys(index)) expandedHashes.add(key);
|
|
130
|
+
},
|
|
131
|
+
{ immediate: true, flush: 'sync' }
|
|
132
|
+
);
|
|
133
|
+
|
|
116
134
|
/* Leaves have nothing to hide, so they always count as expanded. */
|
|
117
135
|
const isExpanded = (item: BbTreeItem<Meta>) =>
|
|
118
|
-
!item.children?.length || hashFor(item)
|
|
136
|
+
!item.children?.length || expandedHashes.has(hashFor(item));
|
|
119
137
|
|
|
120
138
|
const toggleExpanded = (item: BbTreeItem<Meta>) => {
|
|
121
139
|
const value = valueFor(item);
|
|
@@ -399,7 +417,7 @@ export type BbTreeLevelProps<Meta = any> = {
|
|
|
399
417
|
|
|
400
418
|
> .bb-tree__children {
|
|
401
419
|
overflow: hidden;
|
|
402
|
-
padding-
|
|
420
|
+
padding-inline-start: var(--indent);
|
|
403
421
|
|
|
404
422
|
> .bb-tree__item:first-child {
|
|
405
423
|
margin-top: var(--gap);
|
|
@@ -930,7 +930,7 @@ export type CommonFieldSlots = {
|
|
|
930
930
|
}
|
|
931
931
|
|
|
932
932
|
.bb-field__label {
|
|
933
|
-
|
|
933
|
+
inset-inline-start: var(--bb-input-px);
|
|
934
934
|
top: 5px;
|
|
935
935
|
}
|
|
936
936
|
|
|
@@ -957,7 +957,7 @@ export type CommonFieldSlots = {
|
|
|
957
957
|
/* Keep inside labels single-line and clipped in crowded layouts. */
|
|
958
958
|
display: -webkit-box;
|
|
959
959
|
font-size: var(--bb-label-fs-sm);
|
|
960
|
-
|
|
960
|
+
inset-inline-start: var(--inside-label-offset-l);
|
|
961
961
|
-webkit-line-clamp: 1;
|
|
962
962
|
line-height: var(--bb-label-lh-sm);
|
|
963
963
|
max-width: calc(
|
|
@@ -1086,7 +1086,7 @@ export type CommonFieldSlots = {
|
|
|
1086
1086
|
It shrinks to the small size only when it rises to the border. */
|
|
1087
1087
|
font-size: var(--bb-label-fs);
|
|
1088
1088
|
font-weight: var(--bb-label-weight);
|
|
1089
|
-
|
|
1089
|
+
inset-inline-start: 0;
|
|
1090
1090
|
line-height: 1;
|
|
1091
1091
|
max-width: calc(100% - var(--fl-rest-l) - var(--fl-rest-r));
|
|
1092
1092
|
opacity: 0.6;
|
|
@@ -1310,12 +1310,14 @@ export type CommonFieldSlots = {
|
|
|
1310
1310
|
transition-timing-function: var(--bb-ease);
|
|
1311
1311
|
|
|
1312
1312
|
&--left {
|
|
1313
|
+
/* stylelint-disable-next-line declaration-property-value-disallowed-list -- geometry: the `labelPosition` prop names a physical side */
|
|
1313
1314
|
text-align: left;
|
|
1314
1315
|
}
|
|
1315
1316
|
&--center {
|
|
1316
1317
|
text-align: center;
|
|
1317
1318
|
}
|
|
1318
1319
|
&--right {
|
|
1320
|
+
/* stylelint-disable-next-line declaration-property-value-disallowed-list -- geometry: the `labelPosition` prop names a physical side */
|
|
1319
1321
|
text-align: right;
|
|
1320
1322
|
}
|
|
1321
1323
|
&--hidden {
|
|
@@ -1485,7 +1487,7 @@ export type CommonFieldSlots = {
|
|
|
1485
1487
|
&.bb-field--inside-label.bb-field--description {
|
|
1486
1488
|
.bb-field__description {
|
|
1487
1489
|
font-size: var(--bb-description-fs-sm);
|
|
1488
|
-
|
|
1490
|
+
inset-inline-start: var(--inside-label-offset-l);
|
|
1489
1491
|
line-height: var(--bb-description-lh-sm);
|
|
1490
1492
|
margin-top: 0;
|
|
1491
1493
|
max-width: calc(
|
|
@@ -47,12 +47,17 @@
|
|
|
47
47
|
}"
|
|
48
48
|
>
|
|
49
49
|
<Transition appear name="bb-field-input-icon">
|
|
50
|
+
<!-- `@mousedown.prevent` keeps focus in the field: the ✕ shows while
|
|
51
|
+
the field has focus, and WebKit does not focus a button on mousedown,
|
|
52
|
+
so the press blurred the field and hid the ✕ before the click landed
|
|
53
|
+
(clear-webkit; BbSelectPopover does the same). -->
|
|
50
54
|
<!-- eslint-disable vue/attributes-order -- `pt` binds LAST so a consumer listener runs after ours (PASSTHROUGH.md T17) -->
|
|
51
55
|
<ClearableButton
|
|
52
56
|
v-if="shouldShowClearVisible"
|
|
53
57
|
key="clear"
|
|
54
58
|
class="bb-field-input__clear"
|
|
55
59
|
@click="onClickClear"
|
|
60
|
+
@mousedown.prevent
|
|
56
61
|
v-bind="passthrough?.clear"
|
|
57
62
|
/>
|
|
58
63
|
<!-- eslint-enable vue/attributes-order -->
|
|
@@ -550,8 +555,8 @@ export type CommonFieldInputSlots = {
|
|
|
550
555
|
min-height: calc(var(--bb-input-h) + var(--inside-label-clearance));
|
|
551
556
|
min-width: 0;
|
|
552
557
|
overflow: clip;
|
|
553
|
-
padding-
|
|
554
|
-
padding-
|
|
558
|
+
padding-inline-end: var(--bb-input-px);
|
|
559
|
+
padding-inline-start: var(--bb-input-px);
|
|
555
560
|
padding-top: var(--inside-label-clearance);
|
|
556
561
|
|
|
557
562
|
/* Enumerated, not `all`: background-color (disabled), border-color +
|
|
@@ -611,14 +616,14 @@ export type CommonFieldInputSlots = {
|
|
|
611
616
|
}
|
|
612
617
|
|
|
613
618
|
.bb-button:first-child {
|
|
614
|
-
margin-
|
|
619
|
+
margin-inline-start: clamp(
|
|
615
620
|
calc(var(--bb-input-px) * -1),
|
|
616
621
|
calc(((var(--bb-input-h) - var(--h)) / 2) - var(--bb-input-px)),
|
|
617
622
|
0px
|
|
618
623
|
);
|
|
619
624
|
}
|
|
620
625
|
.bb-button:last-child {
|
|
621
|
-
margin-
|
|
626
|
+
margin-inline-end: clamp(
|
|
622
627
|
calc(var(--bb-input-px) * -1),
|
|
623
628
|
calc(((var(--bb-input-h) - var(--h)) / 2) - var(--bb-input-px)),
|
|
624
629
|
0px
|
|
@@ -629,7 +634,7 @@ export type CommonFieldInputSlots = {
|
|
|
629
634
|
&__prepend-icon {
|
|
630
635
|
color: var(--bb-text-muted);
|
|
631
636
|
flex-shrink: 0;
|
|
632
|
-
margin-
|
|
637
|
+
margin-inline-start: calc(var(--bb-input-px) * 0.4 * -1);
|
|
633
638
|
}
|
|
634
639
|
|
|
635
640
|
/* The field's own icons are BbIcons: size them through BbIcon's `--size`
|
|
@@ -646,7 +651,7 @@ export type CommonFieldInputSlots = {
|
|
|
646
651
|
display: grid;
|
|
647
652
|
flex-shrink: 0;
|
|
648
653
|
height: var(--bb-input-icon);
|
|
649
|
-
margin-
|
|
654
|
+
margin-inline-end: calc(var(--bb-input-px) * 0.4 * -1);
|
|
650
655
|
place-items: center;
|
|
651
656
|
width: var(--bb-input-icon);
|
|
652
657
|
|
|
@@ -698,14 +703,14 @@ export type CommonFieldInputSlots = {
|
|
|
698
703
|
the same rhythm on both sides. It used to sit half that from the border. */
|
|
699
704
|
&__prefix {
|
|
700
705
|
justify-content: end;
|
|
701
|
-
margin-
|
|
702
|
-
padding-
|
|
706
|
+
margin-inline-start: calc(var(--bb-input-px) * -1);
|
|
707
|
+
padding-inline-start: var(--bb-input-px);
|
|
703
708
|
}
|
|
704
709
|
|
|
705
710
|
&__suffix {
|
|
706
711
|
justify-content: start;
|
|
707
|
-
margin-
|
|
708
|
-
padding-
|
|
712
|
+
margin-inline-end: calc(var(--bb-input-px) * -1);
|
|
713
|
+
padding-inline-end: var(--bb-input-px);
|
|
709
714
|
}
|
|
710
715
|
|
|
711
716
|
/* Disabled — after the variants and the inner hover/focus rules so it wins
|
|
@@ -443,7 +443,9 @@ const closePopover = () => {
|
|
|
443
443
|
.bb-common-popover__arrow {
|
|
444
444
|
border-bottom: calc(var(--arrow-h) * var(--bb-arrow)) solid
|
|
445
445
|
var(--border-color);
|
|
446
|
+
/* stylelint-disable-next-line property-disallowed-list -- geometry: the arrow follows the side Floating UI placed the panel on */
|
|
446
447
|
border-left: calc(var(--arrow-w) / 2 * var(--bb-arrow)) solid transparent;
|
|
448
|
+
/* stylelint-disable-next-line property-disallowed-list -- geometry: the arrow follows the side Floating UI placed the panel on */
|
|
447
449
|
border-right: calc(var(--arrow-w) / 2 * var(--bb-arrow)) solid transparent;
|
|
448
450
|
height: 0;
|
|
449
451
|
position: relative;
|
|
@@ -451,8 +453,10 @@ const closePopover = () => {
|
|
|
451
453
|
|
|
452
454
|
&::after {
|
|
453
455
|
border-bottom: calc(var(--arrow-h) * var(--bb-arrow)) solid var(--bg);
|
|
456
|
+
/* stylelint-disable-next-line property-disallowed-list -- geometry: the arrow follows the side Floating UI placed the panel on */
|
|
454
457
|
border-left: calc(var(--arrow-w) / 2 * var(--bb-arrow)) solid
|
|
455
458
|
transparent;
|
|
459
|
+
/* stylelint-disable-next-line property-disallowed-list -- geometry: the arrow follows the side Floating UI placed the panel on */
|
|
456
460
|
border-right: calc(var(--arrow-w) / 2 * var(--bb-arrow)) solid
|
|
457
461
|
transparent;
|
|
458
462
|
content: '';
|
|
@@ -491,6 +495,7 @@ const closePopover = () => {
|
|
|
491
495
|
.bb-common-popover__arrow {
|
|
492
496
|
border-bottom: calc(var(--arrow-w) / 2 * var(--bb-arrow)) solid
|
|
493
497
|
transparent;
|
|
498
|
+
/* stylelint-disable-next-line property-disallowed-list -- geometry: the arrow follows the side Floating UI placed the panel on */
|
|
494
499
|
border-left: calc(var(--arrow-h) * var(--bb-arrow)) solid
|
|
495
500
|
var(--border-color);
|
|
496
501
|
border-top: calc(var(--arrow-w) / 2 * var(--bb-arrow)) solid transparent;
|
|
@@ -501,6 +506,7 @@ const closePopover = () => {
|
|
|
501
506
|
&::after {
|
|
502
507
|
border-bottom: calc(var(--arrow-w) / 2 * var(--bb-arrow)) solid
|
|
503
508
|
transparent;
|
|
509
|
+
/* stylelint-disable-next-line property-disallowed-list -- geometry: the arrow follows the side Floating UI placed the panel on */
|
|
504
510
|
border-left: calc(var(--arrow-h) * var(--bb-arrow)) solid var(--bg);
|
|
505
511
|
border-top: calc(var(--arrow-w) / 2 * var(--bb-arrow)) solid transparent;
|
|
506
512
|
content: '';
|
|
@@ -593,7 +599,8 @@ export type CommonPopoverProps = {
|
|
|
593
599
|
*/
|
|
594
600
|
arrowPadding?: number;
|
|
595
601
|
/**
|
|
596
|
-
*
|
|
602
|
+
* Renders the bubble's content at mount instead of on the first open.
|
|
603
|
+
* Either way it stays rendered once it has been.
|
|
597
604
|
*/
|
|
598
605
|
eager?: boolean;
|
|
599
606
|
/**
|
|
@@ -520,17 +520,17 @@ export type TimeUnit = 'hour' | 'minute' | 'second' | 'meridiem';
|
|
|
520
520
|
row; only the painted knob matches the calendar's. */
|
|
521
521
|
--time-mark: 24px;
|
|
522
522
|
|
|
523
|
-
border-
|
|
523
|
+
border-inline-start: var(--bb-border-w) solid var(--bb-border);
|
|
524
524
|
bottom: 0;
|
|
525
525
|
display: flex;
|
|
526
526
|
flex-direction: column;
|
|
527
|
+
inset-inline-end: 0;
|
|
527
528
|
/* Mirror the calendar body's vertical padding (--py, 8px) top AND bottom:
|
|
528
529
|
the readout then sits level with the month/year controls, the headers level
|
|
529
530
|
with the weekday initials, and — because the middle scroll flexes — the last
|
|
530
531
|
row anchors on the calendar's bottom edge. 12px left gutter for the divider. */
|
|
531
532
|
padding: 8px 8px 8px 12px;
|
|
532
533
|
position: absolute;
|
|
533
|
-
right: 0;
|
|
534
534
|
top: 0;
|
|
535
535
|
width: calc(var(--rail-w, 252px) - 12px);
|
|
536
536
|
|
|
@@ -634,6 +634,7 @@ export type TimeUnit = 'hour' | 'minute' | 'second' | 'meridiem';
|
|
|
634
634
|
border-radius: var(--bb-radius-sm);
|
|
635
635
|
content: '';
|
|
636
636
|
height: var(--time-mark);
|
|
637
|
+
/* stylelint-disable-next-line property-disallowed-list -- geometry: centred with a physical translate */
|
|
637
638
|
left: 50%;
|
|
638
639
|
position: absolute;
|
|
639
640
|
top: 50%;
|
|
@@ -696,8 +697,8 @@ export type TimeUnit = 'hour' | 'minute' | 'second' | 'meridiem';
|
|
|
696
697
|
position: relative;
|
|
697
698
|
|
|
698
699
|
.bb-time-selector {
|
|
699
|
-
border-
|
|
700
|
-
padding-
|
|
700
|
+
border-inline-start: 0;
|
|
701
|
+
padding-inline-start: 0;
|
|
701
702
|
padding-top: 8px;
|
|
702
703
|
position: static;
|
|
703
704
|
width: auto;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useLogger as e } from "../../composables/useLogger.js";
|
|
2
|
-
import t from "
|
|
3
|
-
import
|
|
4
|
-
import r from "
|
|
2
|
+
import { useBadgeHost as t } from "./badgeButtonContext.js";
|
|
3
|
+
import n from "./BadgeBodyContent.vue.js";
|
|
4
|
+
import r from "../BbBaseButton/BbBaseButton.vue.js";
|
|
5
5
|
import { computed as i, createBlock as a, createVNode as o, defineComponent as s, mergeProps as c, openBlock as l, renderSlot as u, useAttrs as d, withCtx as f } from "vue";
|
|
6
6
|
//#region src/components/BbBadge/BbBadgeButton.vue?vue&type=script&setup=true&lang.ts
|
|
7
7
|
var p = /*@__PURE__*/ s({
|
|
@@ -65,13 +65,15 @@ var p = /*@__PURE__*/ s({
|
|
|
65
65
|
viewTransition: { type: Boolean }
|
|
66
66
|
},
|
|
67
67
|
setup(s) {
|
|
68
|
-
let p = s, m =
|
|
68
|
+
let p = s, m = t();
|
|
69
69
|
m || e().throw("[BbBadgeButton] must be rendered inside a <BbBadge> default slot.");
|
|
70
70
|
let h = d(), g = i(() => !!m?.loading.value), _ = i(() => {
|
|
71
71
|
let { onClick: e, ...t } = h, n = [].concat(e ?? []).filter((e) => typeof e == "function");
|
|
72
72
|
return c(t, p, {
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
...g.value ? {
|
|
74
|
+
"aria-disabled": !0,
|
|
75
|
+
tabindex: -1
|
|
76
|
+
} : {},
|
|
75
77
|
onClick: (e) => {
|
|
76
78
|
if (g.value) {
|
|
77
79
|
e.preventDefault();
|
|
@@ -81,8 +83,8 @@ var p = /*@__PURE__*/ s({
|
|
|
81
83
|
}
|
|
82
84
|
});
|
|
83
85
|
});
|
|
84
|
-
return (e,
|
|
85
|
-
default: f(() => [o(
|
|
86
|
+
return (e, t) => (l(), a(r, c({ class: "bb-badge__body" }, _.value), {
|
|
87
|
+
default: f(() => [o(n, null, {
|
|
86
88
|
default: f(() => [u(e.$slots, "default")]),
|
|
87
89
|
_: 3
|
|
88
90
|
})]),
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { usePassthrough as e } from "../../composables/usePassthrough.js";
|
|
2
2
|
import { useConfig as t } from "../../composables/useConfig.js";
|
|
3
3
|
import { useHydrated as n } from "../../composables/useHydrated.js";
|
|
4
|
-
import {
|
|
5
|
-
import i from "
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
4
|
+
import { BB_BASE_BUTTON_PT as r } from "./types.js";
|
|
5
|
+
import { useFrameworkDetection as i } from "../../composables/useFrameworkDetection.js";
|
|
6
|
+
import a from "./RouterComponent.vue.js";
|
|
7
|
+
import { useInertiaPage as o } from "../../composables/useInertiaPage.js";
|
|
8
8
|
import { computed as s, createBlock as c, createElementBlock as l, createTextVNode as u, defineComponent as d, mergeProps as f, openBlock as p, renderSlot as m, resolveDynamicComponent as h, toDisplayString as g, unref as _, useAttrs as v, withCtx as y } from "vue";
|
|
9
9
|
//#region src/components/BbBaseButton/BbBaseButton.vue?vue&type=script&setup=true&lang.ts
|
|
10
10
|
var b = "http://localhost", x = /*@__PURE__*/ d({
|
|
@@ -70,10 +70,10 @@ var b = "http://localhost", x = /*@__PURE__*/ d({
|
|
|
70
70
|
component: "BbBaseButton",
|
|
71
71
|
attrs: v(),
|
|
72
72
|
props: x,
|
|
73
|
-
parts:
|
|
74
|
-
states:
|
|
73
|
+
parts: r.parts,
|
|
74
|
+
states: r.states,
|
|
75
75
|
active: { disabled: () => !!x.disabled }
|
|
76
|
-
}), C = t(), { isInertia: w, isNuxt: T } =
|
|
76
|
+
}), C = t(), { isInertia: w, isNuxt: T } = i(), { isHydrated: E } = n(), { getPageUrl: D } = o(), O = typeof window < "u", k = O ? window.location.origin : null, A = (e, t) => {
|
|
77
77
|
let n = e.trim();
|
|
78
78
|
if (!n) return !1;
|
|
79
79
|
if (n.startsWith("#") || n.startsWith("//")) return !0;
|
|
@@ -185,7 +185,7 @@ var b = "http://localhost", x = /*@__PURE__*/ d({
|
|
|
185
185
|
...$.value,
|
|
186
186
|
...Y()
|
|
187
187
|
} : ee.value);
|
|
188
|
-
return (e, t) => V.value ? (p(), c(
|
|
188
|
+
return (e, t) => V.value ? (p(), c(a, f({
|
|
189
189
|
key: 0,
|
|
190
190
|
class: G.value
|
|
191
191
|
}, f(te.value, _(S).forwardAttrs, _(S).root)), {
|