bitboss-ui 2.1.135 → 3.0.0-alpha.4
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/LICENSE +21 -0
- package/README.md +274 -24
- package/bin/bitboss-ui-mcp.mjs +662 -0
- package/bin/bitboss-ui.mjs +710 -0
- package/bin/bitboss-ui.node.test.mjs +113 -0
- package/dist/ai/BbAccordion.md +528 -113
- package/dist/ai/BbAlert.md +380 -197
- package/dist/ai/BbAsterisk.md +46 -0
- package/dist/ai/BbAvatar.md +458 -178
- package/dist/ai/BbBadge.md +697 -225
- package/dist/ai/BbBadgeButton.md +54 -0
- package/dist/ai/BbBaseButton.md +491 -0
- package/dist/ai/BbBaseCheckbox.md +49 -0
- package/dist/ai/BbBaseCheckboxGroup.md +64 -0
- package/dist/ai/BbBaseCheckboxIcon.md +176 -0
- package/dist/ai/BbBaseColorInput.md +64 -0
- package/dist/ai/BbBaseColorPalette.md +39 -0
- package/dist/ai/BbBaseDatePicker.md +42 -0
- package/dist/ai/BbBaseDatePickerInput.md +73 -0
- package/dist/ai/BbBaseInputContainer.md +48 -0
- package/dist/ai/BbBaseNumberInput.md +71 -0
- package/dist/ai/BbBaseRadio.md +46 -0
- package/dist/ai/BbBaseRadioGroup.md +64 -0
- package/dist/ai/BbBaseRadioIcon.md +191 -0
- package/dist/ai/BbBaseRating.md +51 -0
- package/dist/ai/BbBaseSelect.md +88 -0
- package/dist/ai/BbBaseSlider.md +56 -0
- package/dist/ai/BbBaseSwitch.md +49 -0
- package/dist/ai/BbBaseSwitchGroup.md +64 -0
- package/dist/ai/BbBaseSwitchIcon.md +186 -0
- package/dist/ai/BbBaseTag.md +68 -0
- package/dist/ai/BbBaseTextInput.md +75 -0
- package/dist/ai/BbBaseTextarea.md +62 -0
- package/dist/ai/BbBaseTimePickerInput.md +62 -0
- package/dist/ai/BbBreadcrumbs.md +553 -503
- package/dist/ai/BbButton.md +841 -636
- package/dist/ai/BbCheckbox.md +585 -254
- package/dist/ai/BbCheckboxGroup.md +573 -361
- package/dist/ai/BbCollapsible.md +425 -103
- package/dist/ai/BbColorInput.md +536 -323
- package/dist/ai/BbColorPalette.md +569 -330
- package/dist/ai/BbConfirm.md +659 -136
- package/dist/ai/BbConfirmPortal.md +28 -0
- package/dist/ai/BbDatePicker.md +244 -0
- package/dist/ai/BbDatePickerInput.md +720 -388
- package/dist/ai/BbDialog.md +778 -99
- package/dist/ai/BbDropdown.md +1072 -763
- package/dist/ai/BbDropdownButton.md +525 -614
- package/dist/ai/BbDropdownGroup.md +34 -0
- package/dist/ai/BbDropzone.md +1206 -436
- package/dist/ai/BbForm.md +239 -0
- package/dist/ai/BbIcon.md +382 -212
- package/dist/ai/BbIndicator.md +283 -0
- package/dist/ai/BbNumberInput.md +717 -355
- package/dist/ai/BbOffCanvas.md +897 -498
- package/dist/ai/BbPagination.md +489 -535
- package/dist/ai/BbPopover.md +591 -546
- package/dist/ai/BbProgress.md +462 -69
- package/dist/ai/BbRadio.md +352 -229
- package/dist/ai/BbRadioGroup.md +437 -353
- package/dist/ai/BbRating.md +372 -225
- package/dist/ai/BbSelect.md +1399 -536
- package/dist/ai/BbSelectPopover.md +1255 -1578
- package/dist/ai/BbSlider.md +500 -256
- package/dist/ai/BbSmoothHeight.md +485 -139
- package/dist/ai/BbSpinner.md +718 -131
- package/dist/ai/BbSwitch.md +573 -119
- package/dist/ai/BbSwitchGroup.md +521 -214
- package/dist/ai/BbTable.md +1996 -2365
- package/dist/ai/BbTabs.md +1147 -0
- package/dist/ai/BbTabsList.md +29 -0
- package/dist/ai/BbTabsPanes.md +27 -0
- package/dist/ai/BbTabsRoot.md +57 -0
- package/dist/ai/BbTag.md +416 -292
- package/dist/ai/BbTextInput.md +878 -333
- package/dist/ai/BbTextarea.md +850 -255
- package/dist/ai/BbTimePicker.md +231 -0
- package/dist/ai/BbTimePickerInput.md +200 -0
- package/dist/ai/BbToast.md +669 -196
- package/dist/ai/BbToastPortal.md +28 -0
- package/dist/ai/BbTooltip.md +453 -346
- package/dist/ai/BbTree.md +993 -234
- package/dist/ai/ChipsBox.md +27 -199
- package/dist/ai/ClearableButton.md +21 -55
- package/dist/ai/CommaBox.md +25 -200
- package/dist/ai/CommonInputWrapper.md +42 -0
- package/dist/ai/CommonPopover.md +30 -510
- package/dist/ai/ErrorIcon.md +19 -56
- package/dist/ai/FlatListBox.md +35 -379
- package/dist/ai/GroupedListBox.md +37 -535
- package/dist/ai/GuidesComponent.md +21 -0
- package/dist/ai/ListBox.md +38 -231
- package/dist/ai/OptionsContainer.md +34 -253
- package/dist/ai/WarningIcon.md +21 -0
- package/dist/ai/components.json +15897 -0
- package/dist/ai/composables/useBbConfig.md +80 -0
- package/dist/ai/composables/useBbFormContext.md +110 -0
- package/dist/ai/composables/useBbTableContext.md +167 -0
- package/dist/ai/composables/useBbTabsContext.md +118 -0
- package/dist/ai/composables/useBroadcastChannelInstance.md +97 -0
- package/dist/ai/composables/useConfirm.md +313 -0
- package/dist/ai/composables/useCountdown.md +86 -0
- package/dist/ai/composables/useId.md +60 -0
- package/dist/ai/composables/useMobile.md +85 -0
- package/dist/ai/composables/useToast.md +238 -0
- package/dist/ai/guides/agent-contract.md +165 -0
- package/dist/ai/guides/ai-router.md +113 -0
- package/dist/ai/guides/app-layout.md +318 -0
- package/dist/ai/guides/coherence-playbook.md +136 -0
- package/dist/ai/guides/component-picker.md +236 -0
- package/dist/ai/guides/design-language.md +478 -0
- package/dist/ai/guides/design-tokens.md +450 -0
- package/dist/ai/guides/fetch-items-playbook.md +161 -0
- package/dist/ai/guides/floating-bottom-panel.md +130 -0
- package/dist/ai/guides/icons-policy.md +257 -0
- package/dist/ai/guides/inertia-helpers.md +1443 -0
- package/dist/ai/guides/inline-edit-playbook.md +267 -0
- package/dist/ai/guides/installation-and-plugin-setup.md +440 -0
- package/dist/ai/guides/migration/components/bb-alert.md +37 -0
- package/dist/ai/guides/migration/components/bb-avatar.md +24 -0
- package/dist/ai/guides/migration/components/bb-badge.md +110 -0
- package/dist/ai/guides/migration/components/bb-breadcrumbs.md +26 -0
- package/dist/ai/guides/migration/components/bb-button.md +55 -0
- package/dist/ai/guides/migration/components/bb-checkbox-group.md +54 -0
- package/dist/ai/guides/migration/components/bb-checkbox.md +45 -0
- package/dist/ai/guides/migration/components/bb-chip.md +35 -0
- package/dist/ai/guides/migration/components/bb-collapsible.md +26 -0
- package/dist/ai/guides/migration/components/bb-color-input.md +23 -0
- package/dist/ai/guides/migration/components/bb-color-palette.md +31 -0
- package/dist/ai/guides/migration/components/bb-date-picker-input.md +84 -0
- package/dist/ai/guides/migration/components/bb-dialog.md +46 -0
- package/dist/ai/guides/migration/components/bb-dropdown-button.md +31 -0
- package/dist/ai/guides/migration/components/bb-dropdown.md +36 -0
- package/dist/ai/guides/migration/components/bb-dropzone.md +27 -0
- package/dist/ai/guides/migration/components/bb-icon.md +27 -0
- package/dist/ai/guides/migration/components/bb-offcanvas.md +63 -0
- package/dist/ai/guides/migration/components/bb-pagination.md +24 -0
- package/dist/ai/guides/migration/components/bb-popover.md +52 -0
- package/dist/ai/guides/migration/components/bb-rating.md +24 -0
- package/dist/ai/guides/migration/components/bb-select-popover.md +59 -0
- package/dist/ai/guides/migration/components/bb-select.md +69 -0
- package/dist/ai/guides/migration/components/bb-slider.md +25 -0
- package/dist/ai/guides/migration/components/bb-smooth-height.md +45 -0
- package/dist/ai/guides/migration/components/bb-spinner.md +23 -0
- package/dist/ai/guides/migration/components/bb-table.md +66 -0
- package/dist/ai/guides/migration/components/bb-tabs.md +47 -0
- package/dist/ai/guides/migration/components/bb-tag.md +29 -0
- package/dist/ai/guides/migration/components/bb-text-input.md +37 -0
- package/dist/ai/guides/migration/components/bb-toast.md +47 -0
- package/dist/ai/guides/migration/components/bb-tooltip.md +34 -0
- package/dist/ai/guides/migration/components/bb-tree.md +77 -0
- package/dist/ai/guides/migration/components/use-confirm.md +46 -0
- package/dist/ai/guides/migration/v2-to-v3.md +649 -0
- package/dist/ai/guides/options-items-playbook.md +222 -0
- package/dist/ai/guides/page-shell.md +113 -0
- package/dist/ai/guides/validated-forms.md +177 -0
- package/dist/ai/index.md +158 -32
- package/dist/ai/recipes/inertia/approvals-inbox.md +1635 -0
- package/dist/ai/recipes/inertia/inline-edit-workspace.md +1765 -0
- package/dist/ai/recipes/inertia/layout-scaffold.md +385 -0
- package/dist/ai/recipes/inertia/onboarding.md +1791 -0
- package/dist/ai/recipes/inertia/ownership-atlas.md +1327 -0
- package/dist/ai/recipes/inertia/record-form.md +1489 -0
- package/dist/ai/recipes/inertia/records-workspace.md +1416 -0
- package/dist/ai/recipes/inertia/upload-center.md +2003 -0
- package/dist/ai/recipes/inertia/wizard-form.md +1500 -0
- package/dist/ai/recipes/nuxt/approvals-inbox.md +1578 -0
- package/dist/ai/recipes/nuxt/inline-edit-workspace.md +1703 -0
- package/dist/ai/recipes/nuxt/layout-scaffold.md +385 -0
- package/dist/ai/recipes/nuxt/onboarding.md +1724 -0
- package/dist/ai/recipes/nuxt/record-form.md +1502 -0
- package/dist/ai/recipes/nuxt/records-workspace.md +1329 -0
- package/dist/ai/recipes/nuxt/upload-center.md +1886 -0
- package/dist/ai/recipes/nuxt/wizard-form.md +1509 -0
- package/dist/ai/recipes/vue/approvals-inbox.md +1496 -0
- package/dist/ai/recipes/vue/inline-edit-workspace.md +1594 -0
- package/dist/ai/recipes/vue/layout-scaffold.md +385 -0
- package/dist/ai/recipes/vue/onboarding.md +1679 -0
- package/dist/ai/recipes/vue/record-form.md +1586 -0
- package/dist/ai/recipes/vue/records-workspace.md +1245 -0
- package/dist/ai/recipes/vue/upload-center.md +1845 -0
- package/dist/ai/recipes/vue/wizard-form.md +1441 -0
- package/dist/ai/source/BbAccordion.md +123 -0
- package/dist/ai/source/BbAlert.md +401 -0
- package/dist/ai/source/BbAsterisk.md +32 -0
- package/dist/ai/source/BbAvatar.md +258 -0
- package/dist/ai/source/BbBadge.md +560 -0
- package/dist/ai/source/BbBadgeButton.md +490 -0
- package/dist/ai/source/BbBaseButton.md +682 -0
- package/dist/ai/source/BbBaseCheckbox.md +461 -0
- package/dist/ai/source/BbBaseCheckboxGroup.md +554 -0
- package/dist/ai/source/BbBaseCheckboxIcon.md +201 -0
- package/dist/ai/source/BbBaseColorInput.md +416 -0
- package/dist/ai/source/BbBaseColorPalette.md +934 -0
- package/dist/ai/source/BbBaseDatePicker.md +1001 -0
- package/dist/ai/source/BbBaseDatePickerInput.md +1785 -0
- package/dist/ai/source/BbBaseInputContainer.md +1210 -0
- package/dist/ai/source/BbBaseNumberInput.md +617 -0
- package/dist/ai/source/BbBaseRadio.md +377 -0
- package/dist/ai/source/BbBaseRadioGroup.md +533 -0
- package/dist/ai/source/BbBaseRadioIcon.md +153 -0
- package/dist/ai/source/BbBaseRating.md +573 -0
- package/dist/ai/source/BbBaseSelect.md +898 -0
- package/dist/ai/source/BbBaseSlider.md +1085 -0
- package/dist/ai/source/BbBaseSwitch.md +246 -0
- package/dist/ai/source/BbBaseSwitchGroup.md +302 -0
- package/dist/ai/source/BbBaseSwitchIcon.md +206 -0
- package/dist/ai/source/BbBaseTag.md +694 -0
- package/dist/ai/source/BbBaseTextInput.md +511 -0
- package/dist/ai/source/BbBaseTextarea.md +480 -0
- package/dist/ai/source/BbBaseTimePickerInput.md +1031 -0
- package/dist/ai/source/BbBreadcrumbs.md +815 -0
- package/dist/ai/source/BbButton.md +1006 -0
- package/dist/ai/source/BbCheckbox.md +326 -0
- package/dist/ai/source/BbCheckboxGroup.md +419 -0
- package/dist/ai/source/BbCollapsible.md +137 -0
- package/dist/ai/source/BbColorInput.md +322 -0
- package/dist/ai/source/BbColorPalette.md +371 -0
- package/dist/ai/source/BbConfirm.md +193 -0
- package/dist/ai/source/BbConfirmPortal.md +74 -0
- package/dist/ai/source/BbDatePicker.md +729 -0
- package/dist/ai/source/BbDatePickerInput.md +525 -0
- package/dist/ai/source/BbDialog.md +818 -0
- package/dist/ai/source/BbDropdown.md +2387 -0
- package/dist/ai/source/BbDropdownButton.md +315 -0
- package/dist/ai/source/BbDropdownGroup.md +1259 -0
- package/dist/ai/source/BbDropzone.md +864 -0
- package/dist/ai/source/BbForm.md +100 -0
- package/dist/ai/source/BbIcon.md +214 -0
- package/dist/ai/source/BbIndicator.md +298 -0
- package/dist/ai/source/BbNumberInput.md +374 -0
- package/dist/ai/source/BbOffCanvas.md +1266 -0
- package/dist/ai/source/BbPagination.md +835 -0
- package/dist/ai/source/BbPopover.md +860 -0
- package/dist/ai/source/BbProgress.md +140 -0
- package/dist/ai/source/BbRadio.md +303 -0
- package/dist/ai/source/BbRadioGroup.md +420 -0
- package/dist/ai/source/BbRating.md +369 -0
- package/dist/ai/source/BbSelect.md +688 -0
- package/dist/ai/source/BbSelectPopover.md +2234 -0
- package/dist/ai/source/BbSlider.md +378 -0
- package/dist/ai/source/BbSmoothHeight.md +265 -0
- package/dist/ai/source/BbSpinner.md +127 -0
- package/dist/ai/source/BbSwitch.md +175 -0
- package/dist/ai/source/BbSwitchGroup.md +240 -0
- package/dist/ai/source/BbTable.md +3433 -0
- package/dist/ai/source/BbTabs.md +403 -0
- package/dist/ai/source/BbTabsList.md +578 -0
- package/dist/ai/source/BbTabsPanes.md +368 -0
- package/dist/ai/source/BbTabsRoot.md +372 -0
- package/dist/ai/source/BbTag.md +390 -0
- package/dist/ai/source/BbTextInput.md +352 -0
- package/dist/ai/source/BbTextarea.md +337 -0
- package/dist/ai/source/BbTimePicker.md +595 -0
- package/dist/ai/source/BbTimePickerInput.md +376 -0
- package/dist/ai/source/BbToast.md +525 -0
- package/dist/ai/source/BbToastPortal.md +482 -0
- package/dist/ai/source/BbTooltip.md +522 -0
- package/dist/ai/source/BbTree.md +323 -0
- package/dist/ai/source/ChipsBox.md +201 -0
- package/dist/ai/source/ClearableButton.md +70 -0
- package/dist/ai/source/CommaBox.md +202 -0
- package/dist/ai/source/CommonInputWrapper.md +554 -0
- package/dist/ai/source/CommonPopover.md +616 -0
- package/dist/ai/source/ErrorIcon.md +43 -0
- package/dist/ai/source/FlatListBox.md +396 -0
- package/dist/ai/source/GroupedListBox.md +540 -0
- package/dist/ai/source/GuidesComponent.md +383 -0
- package/dist/ai/source/ListBox.md +238 -0
- package/dist/ai/source/OptionsContainer.md +191 -0
- package/dist/ai/source/WarningIcon.md +47 -0
- package/dist/alert-variants.d.ts +19 -0
- package/dist/assets/css/reset.css_inline.js +4 -0
- package/dist/assets/svgs/alert.svg_raw.js +4 -0
- package/dist/assets/svgs/calendar.svg_raw.js +4 -0
- package/dist/assets/svgs/check_stroke.svg_raw.js +4 -0
- package/dist/assets/svgs/chevron_down.svg_raw.js +4 -0
- package/dist/assets/svgs/chevron_right.svg_raw.js +4 -0
- package/dist/assets/svgs/clear.svg_raw.js +4 -0
- package/dist/assets/svgs/clock.svg_raw.js +4 -0
- package/dist/assets/svgs/error.svg_raw.js +4 -0
- package/dist/assets/svgs/search.svg_raw.js +4 -0
- package/dist/assets/svgs/sort.svg_raw.js +4 -0
- package/dist/assets/svgs/spinner.svg_raw.js +4 -0
- package/dist/assets/svgs/user.svg_raw.js +4 -0
- package/dist/badge-variants.d.ts +19 -0
- package/dist/button-variants.d.ts +21 -0
- package/dist/components/BbAccordion/BbAccordion.vue.d.ts +9 -3
- package/dist/components/BbAccordion/BbAccordion.vue.js +6 -0
- package/dist/components/BbAccordion/BbAccordion.vue_vue_type_script_setup_true_lang.js +66 -0
- package/dist/components/BbAccordion/types.d.ts +12 -8
- package/dist/components/BbAlert/BbAlert.vue.d.ts +12 -3
- package/dist/components/BbAlert/BbAlert.vue.js +6 -0
- package/dist/components/BbAlert/BbAlert.vue_vue_type_script_setup_true_lang.js +65 -0
- package/dist/components/BbAlert/types.d.ts +56 -12
- package/dist/components/BbAsterisk/BbAsterisk.vue.d.ts +3 -0
- package/dist/components/BbAsterisk/BbAsterisk.vue.js +6 -0
- package/dist/components/BbAsterisk/BbAsterisk.vue_vue_type_script_setup_true_lang.js +13 -0
- package/dist/components/BbAvatar/BbAvatar.vue.d.ts +5 -0
- package/dist/components/BbAvatar/BbAvatar.vue.js +6 -0
- package/dist/components/BbAvatar/BbAvatar.vue_vue_type_script_setup_true_lang.js +78 -0
- package/dist/components/BbAvatar/types.d.ts +6 -5
- package/dist/components/BbBadge/BadgeAppendIcon.vue.d.ts +3 -0
- package/dist/components/BbBadge/BadgeAppendIcon.vue.js +5 -0
- package/dist/components/BbBadge/BadgeAppendIcon.vue_vue_type_script_setup_true_lang.js +22 -0
- package/dist/components/BbBadge/BadgeBodyContent.vue.d.ts +15 -0
- package/dist/components/BbBadge/BadgeBodyContent.vue.js +5 -0
- package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +34 -0
- package/dist/components/BbBadge/BbBadge.vue.d.ts +8 -1
- package/dist/components/BbBadge/BbBadge.vue.js +6 -0
- package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +83 -0
- package/dist/components/BbBadge/BbBadgeButton.vue.d.ts +12 -0
- package/dist/components/BbBadge/BbBadgeButton.vue.js +5 -0
- package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +54 -0
- package/dist/components/BbBadge/badgeButtonContext.d.ts +27 -0
- package/dist/components/BbBadge/badgeButtonContext.js +5 -0
- package/dist/components/BbBadge/types.d.ts +61 -16
- package/dist/components/BbBaseButton/BbBaseButton.vue.d.ts +13 -0
- package/dist/components/BbBaseButton/BbBaseButton.vue.js +6 -0
- package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +171 -0
- package/dist/components/BbBaseButton/RouterComponent.vue.js +5 -0
- package/dist/components/BbBaseButton/RouterComponent.vue_vue_type_script_setup_true_lang.js +29 -0
- package/dist/components/BbBaseButton/types.d.ts +191 -0
- package/dist/components/BbBaseButton/types.js +33 -0
- package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.d.ts +40 -0
- package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.js +6 -0
- package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue_vue_type_script_setup_true_lang.js +145 -0
- package/dist/components/BbBaseCheckbox/types.d.ts +224 -0
- package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.d.ts +19 -0
- package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.js +6 -0
- package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue_vue_type_script_setup_true_lang.js +190 -0
- package/dist/components/BbBaseCheckboxGroup/types.d.ts +257 -0
- package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue.d.ts +4 -0
- package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue.js +6 -0
- package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue_vue_type_script_setup_true_lang.js +43 -0
- package/dist/components/BbBaseCheckboxIcon/types.d.ts +47 -0
- package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.d.ts +42 -0
- package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.js +6 -0
- package/dist/components/BbBaseColorInput/BbBaseColorInput.vue_vue_type_script_setup_true_lang.js +178 -0
- package/dist/components/BbBaseColorInput/types.d.ts +210 -0
- package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue.d.ts +13 -0
- package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue.js +6 -0
- package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue_vue_type_script_setup_true_lang.js +395 -0
- package/dist/components/BbBaseColorPalette/types.d.ts +40 -0
- package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.js +6 -0
- package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue_vue_type_script_setup_true_lang.js +300 -0
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.d.ts +44 -0
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.js +5 -0
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue_vue_type_script_setup_true_lang.js +310 -0
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.d.ts +5 -0
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.js +5 -0
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue_vue_type_script_setup_true_lang.js +63 -0
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.d.ts +5 -0
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.js +5 -0
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue_vue_type_script_setup_true_lang.js +75 -0
- package/dist/components/BbBaseDatePicker/typeahead.d.ts +112 -0
- package/dist/components/BbBaseDatePicker/typeahead.js +37 -0
- package/dist/components/BbBaseDatePicker/types.d.ts +97 -0
- package/dist/components/BbBaseDatePicker/useDatePickerContext.d.ts +58 -0
- package/dist/components/BbBaseDatePicker/useDatePickerContext.js +11 -0
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.d.ts +30 -0
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.js +6 -0
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue_vue_type_script_setup_true_lang.js +716 -0
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.d.ts +30 -0
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.js +6 -0
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue_vue_type_script_setup_true_lang.js +204 -0
- package/dist/components/BbBaseDatePickerInput/types.d.ts +311 -0
- package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.d.ts +17 -0
- package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.js +6 -0
- package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue_vue_type_script_setup_true_lang.js +191 -0
- package/dist/components/BbBaseInputContainer/types.d.ts +197 -0
- package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.d.ts +52 -0
- package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.js +6 -0
- package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue_vue_type_script_setup_true_lang.js +215 -0
- package/dist/components/BbBaseNumberInput/types.d.ts +211 -0
- package/dist/components/BbBaseRadio/BbBaseRadio.vue.d.ts +33 -0
- package/dist/components/BbBaseRadio/BbBaseRadio.vue.js +6 -0
- package/dist/components/BbBaseRadio/BbBaseRadio.vue_vue_type_script_setup_true_lang.js +114 -0
- package/dist/components/BbBaseRadio/types.d.ts +179 -0
- package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue.d.ts +19 -0
- package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue.js +6 -0
- package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue_vue_type_script_setup_true_lang.js +177 -0
- package/dist/components/BbBaseRadioGroup/types.d.ts +223 -0
- package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue.d.ts +4 -0
- package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue.js +6 -0
- package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue_vue_type_script_setup_true_lang.js +28 -0
- package/dist/components/BbBaseRadioIcon/types.d.ts +41 -0
- package/dist/components/BbBaseRating/BbBaseRating.vue.d.ts +38 -0
- package/dist/components/BbBaseRating/BbBaseRating.vue.js +6 -0
- package/dist/components/BbBaseRating/BbBaseRating.vue_vue_type_script_setup_true_lang.js +184 -0
- package/dist/components/BbBaseRating/types.d.ts +168 -0
- package/dist/components/BbBaseSelect/BbBaseSelect.vue.d.ts +19 -0
- package/dist/components/BbBaseSelect/BbBaseSelect.vue.js +6 -0
- package/dist/components/BbBaseSelect/BbBaseSelect.vue_vue_type_script_setup_true_lang.js +307 -0
- package/dist/components/BbBaseSelect/types.d.ts +297 -0
- package/dist/components/BbBaseSlider/BbBaseSlider.vue.d.ts +35 -0
- package/dist/components/BbBaseSlider/BbBaseSlider.vue.js +6 -0
- package/dist/components/BbBaseSlider/BbBaseSlider.vue_vue_type_script_setup_true_lang.js +324 -0
- package/dist/components/BbBaseSlider/types.d.ts +200 -0
- package/dist/components/BbBaseSwitch/BbBaseSwitch.vue.d.ts +35 -0
- package/dist/components/BbBaseSwitch/BbBaseSwitch.vue.js +6 -0
- package/dist/components/BbBaseSwitch/BbBaseSwitch.vue_vue_type_script_setup_true_lang.js +146 -0
- package/dist/components/BbBaseSwitch/types.d.ts +10 -0
- package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.d.ts +19 -0
- package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.js +6 -0
- package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue_vue_type_script_setup_true_lang.js +190 -0
- package/dist/components/BbBaseSwitchGroup/types.d.ts +8 -0
- package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue.d.ts +4 -0
- package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue.js +6 -0
- package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue_vue_type_script_setup_true_lang.js +30 -0
- package/dist/components/BbBaseSwitchIcon/types.d.ts +48 -0
- package/dist/components/BbBaseTag/BbBaseTag.vue.d.ts +50 -0
- package/dist/components/BbBaseTag/BbBaseTag.vue.js +6 -0
- package/dist/components/BbBaseTag/BbBaseTag.vue_vue_type_script_setup_true_lang.js +266 -0
- package/dist/components/BbBaseTag/types.d.ts +160 -0
- package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.d.ts +45 -0
- package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.js +6 -0
- package/dist/components/BbBaseTextInput/BbBaseTextInput.vue_vue_type_script_setup_true_lang.js +200 -0
- package/dist/components/BbBaseTextInput/types.d.ts +209 -0
- package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.d.ts +39 -0
- package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.js +6 -0
- package/dist/components/BbBaseTextarea/BbBaseTextarea.vue_vue_type_script_setup_true_lang.js +175 -0
- package/dist/components/BbBaseTextarea/types.d.ts +170 -0
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.d.ts +27 -0
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.js +6 -0
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue_vue_type_script_setup_true_lang.js +522 -0
- package/dist/components/BbBaseTimePickerInput/types.d.ts +151 -0
- package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue.d.ts +0 -1
- package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue.js +6 -0
- package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +224 -0
- package/dist/components/BbBreadcrumbs/estimateBreadcrumbItemWidth.js +47 -0
- package/dist/components/BbBreadcrumbs/types.d.ts +37 -22
- package/dist/components/BbButton/BbButton.vue.d.ts +6 -5
- package/dist/components/BbButton/BbButton.vue.js +6 -0
- package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +181 -0
- package/dist/components/BbButton/types.d.ts +48 -47
- package/dist/components/BbCheckbox/BbCheckbox.vue.d.ts +4 -3
- package/dist/components/BbCheckbox/BbCheckbox.vue.js +6 -0
- package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +146 -0
- package/dist/components/BbCheckbox/types.d.ts +31 -10
- package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue.d.ts +2 -13
- package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue.js +6 -0
- package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +190 -0
- package/dist/components/BbCheckboxGroup/types.d.ts +51 -23
- package/dist/components/BbCollapsible/BbCollapsible.vue.d.ts +2 -1
- package/dist/components/BbCollapsible/BbCollapsible.vue.js +6 -0
- package/dist/components/BbCollapsible/BbCollapsible.vue_vue_type_script_setup_true_lang.js +31 -0
- package/dist/components/BbCollapsible/types.d.ts +13 -8
- package/dist/components/BbColorInput/BbColorInput.vue.d.ts +10 -1
- package/dist/components/BbColorInput/BbColorInput.vue.js +6 -0
- package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +177 -0
- package/dist/components/BbColorInput/types.d.ts +44 -11
- package/dist/components/BbColorPalette/BbColorPalette.vue.d.ts +5 -8
- package/dist/components/BbColorPalette/BbColorPalette.vue.js +5 -0
- package/dist/components/BbColorPalette/BbColorPalette.vue_vue_type_script_setup_true_lang.js +126 -0
- package/dist/components/BbColorPalette/types.d.ts +71 -52
- package/dist/components/BbConfirm/BbConfirm.vue.js +6 -0
- package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +138 -0
- package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +5 -6
- package/dist/components/BbConfirm/BbConfirmPortal.vue.js +5 -0
- package/dist/components/BbConfirm/BbConfirmPortal.vue_vue_type_script_setup_true_lang.js +19 -0
- package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +37 -0
- package/dist/components/BbDatePicker/BbDatePicker.vue.js +6 -0
- package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +319 -0
- package/dist/components/BbDatePicker/types.d.ts +159 -0
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +3 -1
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.js +6 -0
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +179 -0
- package/dist/components/BbDatePickerInput/types.d.ts +134 -16
- package/dist/components/BbDialog/BbDialog.vue.d.ts +14 -6
- package/dist/components/BbDialog/BbDialog.vue.js +6 -0
- package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +214 -0
- package/dist/components/BbDialog/types.d.ts +146 -1
- package/dist/components/BbDialog/useDialogStack.d.ts +5 -0
- package/dist/components/BbDialog/useDialogStack.js +20 -0
- package/dist/components/BbDropdown/AdaptiveDropdown.vue.d.ts +24 -0
- package/dist/components/BbDropdown/AdaptiveDropdown.vue.js +6 -0
- package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +116 -0
- package/dist/components/BbDropdown/BbDropdown.vue.d.ts +14 -7
- package/dist/components/BbDropdown/BbDropdown.vue.js +6 -0
- package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +561 -0
- package/dist/components/BbDropdown/BbDropdownGroup.vue.d.ts +44 -0
- package/dist/components/BbDropdown/BbDropdownGroup.vue.js +5 -0
- package/dist/components/BbDropdown/BbDropdownGroup.vue_vue_type_script_setup_true_lang.js +36 -0
- package/dist/components/BbDropdown/BbDropdownList.vue.d.ts +31 -0
- package/dist/components/BbDropdown/BbDropdownList.vue.js +6 -0
- package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +470 -0
- package/dist/components/BbDropdown/DropdownPipelineResolver.vue.d.ts +16 -0
- package/dist/components/BbDropdown/DropdownPipelineResolver.vue.js +5 -0
- package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +168 -0
- package/dist/components/BbDropdown/normalizeGroups.d.ts +18 -0
- package/dist/components/BbDropdown/normalizeGroups.js +46 -0
- package/dist/components/BbDropdown/types.d.ts +468 -46
- package/dist/components/BbDropdown/types.js +4 -0
- package/dist/components/BbDropdown/useDropdownContext.d.ts +89 -0
- package/dist/components/BbDropdown/useDropdownContext.js +9 -0
- package/dist/components/BbDropdown/useDropdownGroupRegistry.d.ts +108 -0
- package/dist/components/BbDropdown/useDropdownGroupRegistry.js +5 -0
- package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +3 -3
- package/dist/components/BbDropdownButton/BbDropdownButton.vue.js +6 -0
- package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +119 -0
- package/dist/components/BbDropdownButton/types.d.ts +47 -52
- package/dist/components/BbDropzone/BbDropzone.vue.d.ts +5 -4
- package/dist/components/BbDropzone/BbDropzone.vue.js +6 -0
- package/dist/components/BbDropzone/BbDropzone.vue_vue_type_script_setup_true_lang.js +308 -0
- package/dist/components/BbDropzone/types.d.ts +77 -8
- package/dist/components/BbIcon/BbIcon.vue.d.ts +3 -2
- package/dist/components/BbIcon/BbIcon.vue.js +6 -0
- package/dist/components/BbIcon/BbIcon.vue_vue_type_script_setup_true_lang.js +65 -0
- package/dist/components/BbIcon/types.d.ts +6 -19
- package/dist/components/BbIndicator/BbIndicator.vue.d.ts +14 -0
- package/dist/components/BbIndicator/BbIndicator.vue.js +6 -0
- package/dist/components/BbIndicator/BbIndicator.vue_vue_type_script_setup_true_lang.js +56 -0
- package/dist/components/BbIndicator/types.d.ts +49 -0
- package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +12 -6
- package/dist/components/BbNumberInput/BbNumberInput.vue.js +6 -0
- package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +194 -0
- package/dist/components/BbNumberInput/types.d.ts +40 -4
- package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +16 -10
- package/dist/components/BbOffCanvas/BbOffCanvas.vue.js +6 -0
- package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +284 -0
- package/dist/components/BbOffCanvas/types.d.ts +71 -39
- package/dist/components/BbOffCanvas/useOffCanvasStack.d.ts +25 -0
- package/dist/components/BbOffCanvas/useOffCanvasStack.js +68 -0
- package/dist/components/BbPagination/BbPagination.vue.d.ts +9 -4
- package/dist/components/BbPagination/BbPagination.vue.js +6 -0
- package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +244 -0
- package/dist/components/BbPagination/paginationFit.d.ts +38 -0
- package/dist/components/BbPagination/paginationFit.js +13 -0
- package/dist/components/BbPagination/types.d.ts +51 -16
- package/dist/components/BbPopover/BbPopover.vue.d.ts +16 -15
- package/dist/components/BbPopover/BbPopover.vue.js +6 -0
- package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +309 -0
- package/dist/components/BbPopover/escapeStack.d.ts +6 -0
- package/dist/components/BbPopover/escapeStack.js +10 -0
- package/dist/components/BbPopover/types.d.ts +90 -31
- package/dist/components/BbProgress/BbProgress.vue.d.ts +1 -0
- package/dist/components/BbProgress/BbProgress.vue.js +6 -0
- package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +36 -0
- package/dist/components/BbProgress/types.d.ts +15 -1
- package/dist/components/BbRadio/BbRadio.vue.d.ts +5 -3
- package/dist/components/BbRadio/BbRadio.vue.js +6 -0
- package/dist/components/BbRadio/BbRadio.vue_vue_type_script_setup_true_lang.js +133 -0
- package/dist/components/BbRadio/types.d.ts +32 -9
- package/dist/components/BbRadioGroup/BbRadioGroup.vue.d.ts +4 -14
- package/dist/components/BbRadioGroup/BbRadioGroup.vue.js +6 -0
- package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +186 -0
- package/dist/components/BbRadioGroup/types.d.ts +48 -22
- package/dist/components/BbRating/BbRating.vue.d.ts +4 -1
- package/dist/components/BbRating/BbRating.vue.js +6 -0
- package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +150 -0
- package/dist/components/BbRating/types.d.ts +44 -10
- package/dist/components/BbSelect/BbSelect.vue.d.ts +2 -11
- package/dist/components/BbSelect/BbSelect.vue.js +6 -0
- package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +241 -0
- package/dist/components/BbSelect/types.d.ts +112 -59
- package/dist/components/BbSelectPopover/BbSelectPopover.vue.d.ts +1 -10
- package/dist/components/BbSelectPopover/BbSelectPopover.vue.js +6 -0
- package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +639 -0
- package/dist/components/BbSelectPopover/types.d.ts +197 -105
- package/dist/components/BbSlider/BbSlider.vue.d.ts +3 -6
- package/dist/components/BbSlider/BbSlider.vue.js +6 -0
- package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +166 -0
- package/dist/components/BbSlider/types.d.ts +44 -13
- package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.d.ts +3 -1
- package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.js +6 -0
- package/dist/components/BbSmoothHeight/BbSmoothHeight.vue_vue_type_script_setup_true_lang.js +79 -0
- package/dist/components/BbSmoothHeight/types.d.ts +17 -2
- package/dist/components/BbSpinner/BbSpinner.vue.d.ts +1 -1
- package/dist/components/BbSpinner/BbSpinner.vue.js +6 -0
- package/dist/components/BbSpinner/BbSpinner.vue_vue_type_script_setup_true_lang.js +30 -0
- package/dist/components/BbSpinner/types.d.ts +10 -3
- package/dist/components/BbSwitch/BbSwitch.vue.d.ts +5 -3
- package/dist/components/BbSwitch/BbSwitch.vue.js +6 -0
- package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +142 -0
- package/dist/components/BbSwitch/types.d.ts +3 -1
- package/dist/components/BbSwitchGroup/BbSwitchGroup.vue.d.ts +4 -14
- package/dist/components/BbSwitchGroup/BbSwitchGroup.vue.js +6 -0
- package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +190 -0
- package/dist/components/BbSwitchGroup/types.d.ts +3 -22
- package/dist/components/BbTable/BbTable.vue.d.ts +58 -31
- package/dist/components/BbTable/BbTable.vue.js +6 -0
- package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +900 -0
- package/dist/components/BbTable/types.d.ts +213 -37
- package/dist/components/BbTable/utils.d.ts +9 -1
- package/dist/components/BbTable/utils.js +53 -0
- package/dist/components/BbTabs/BbTabs.vue.d.ts +20 -0
- package/dist/components/BbTabs/BbTabs.vue.js +6 -0
- package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +64 -0
- package/dist/components/BbTabs/BbTabsList.vue.d.ts +19 -0
- package/dist/components/BbTabs/BbTabsList.vue.js +6 -0
- package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +123 -0
- package/dist/components/BbTabs/BbTabsPanes.vue.d.ts +16 -0
- package/dist/components/BbTabs/BbTabsPanes.vue.js +6 -0
- package/dist/components/BbTabs/BbTabsPanes.vue_vue_type_script_setup_true_lang.js +35 -0
- package/dist/components/BbTabs/BbTabsRoot.vue.d.ts +20 -0
- package/dist/components/BbTabs/BbTabsRoot.vue.js +5 -0
- package/dist/components/BbTabs/BbTabsRoot.vue_vue_type_script_setup_true_lang.js +55 -0
- package/dist/components/BbTabs/types.d.ts +264 -0
- package/dist/components/BbTag/BbTag.vue.d.ts +19 -6
- package/dist/components/BbTag/BbTag.vue.js +6 -0
- package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +187 -0
- package/dist/components/BbTag/types.d.ts +55 -17
- package/dist/components/BbTextInput/BbTextInput.vue.d.ts +10 -1
- package/dist/components/BbTextInput/BbTextInput.vue.js +6 -0
- package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +195 -0
- package/dist/components/BbTextInput/types.d.ts +31 -4
- package/dist/components/BbTextarea/BbTextarea.vue.d.ts +10 -1
- package/dist/components/BbTextarea/BbTextarea.vue.js +6 -0
- package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +178 -0
- package/dist/components/BbTextarea/types.d.ts +33 -2
- package/dist/components/BbTimePicker/BbTimePicker.vue.d.ts +33 -0
- package/dist/components/BbTimePicker/BbTimePicker.vue.js +6 -0
- package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +244 -0
- package/dist/components/BbTimePicker/types.d.ts +133 -0
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue.d.ts +25 -0
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue.js +6 -0
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +157 -0
- package/dist/components/BbTimePickerInput/types.d.ts +174 -0
- package/dist/components/BbToast/BbToast.vue.d.ts +2 -3
- package/dist/components/BbToast/BbToast.vue.js +6 -0
- package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +39 -0
- package/dist/components/BbToast/BbToastMessage.vue.d.ts +17 -8
- package/dist/components/BbToast/BbToastMessage.vue.js +5 -0
- package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +170 -0
- package/dist/components/BbToast/BbToastPortal.vue.d.ts +30 -0
- package/dist/components/BbToast/BbToastPortal.vue.js +5 -0
- package/dist/components/BbToast/BbToastPortal.vue_vue_type_script_setup_true_lang.js +19 -0
- package/dist/components/BbToast/BbToastRegion.vue.d.ts +8 -0
- package/dist/components/BbToast/BbToastRegion.vue.js +5 -0
- package/dist/components/BbToast/BbToastRegion.vue_vue_type_script_setup_true_lang.js +100 -0
- package/dist/components/BbToast/types.d.ts +69 -5
- package/dist/components/BbTooltip/BbTooltip.vue.d.ts +10 -3
- package/dist/components/BbTooltip/BbTooltip.vue.js +6 -0
- package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +160 -0
- package/dist/components/BbTooltip/types.d.ts +69 -11
- package/dist/components/BbTree/BbTree.vue.d.ts +28 -13
- package/dist/components/BbTree/BbTree.vue.js +6 -0
- package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +55 -0
- package/dist/components/BbTree/BbTreeLevel.vue.d.ts +19 -0
- package/dist/components/BbTree/BbTreeLevel.vue.js +5 -0
- package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +94 -0
- package/dist/components/BbTree/context.d.ts +17 -0
- package/dist/components/BbTree/context.js +4 -0
- package/dist/components/BbTree/types.d.ts +94 -41
- package/dist/components/ChipsBox/ChipsBox.vue.d.ts +2 -1
- package/dist/components/ChipsBox/ChipsBox.vue.js +5 -0
- package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +98 -0
- package/dist/components/ChipsBox/types.d.ts +12 -5
- package/dist/components/ClearableButton/ClearableButton.vue.d.ts +2 -1
- package/dist/components/ClearableButton/ClearableButton.vue.js +6 -0
- package/dist/components/ClearableButton/ClearableButton.vue_vue_type_script_setup_true_lang.js +19 -0
- package/dist/components/ClearableButton/types.d.ts +7 -1
- package/dist/components/CloseIcon/CloseButton.vue.d.ts +5 -0
- package/dist/components/CloseIcon/CloseButton.vue.js +7 -0
- package/dist/components/CloseIcon/CloseButton.vue_vue_type_script_setup_true_lang.js +23 -0
- package/dist/components/CloseIcon/types.d.ts +2 -0
- package/dist/components/CommaBox/CommaBox.vue.d.ts +2 -1
- package/dist/components/CommaBox/CommaBox.vue.js +6 -0
- package/dist/components/CommaBox/CommaBox.vue_vue_type_script_setup_true_lang.js +81 -0
- package/dist/components/CommaBox/types.d.ts +6 -7
- package/dist/components/CommonInputWrapper/CommonInputWrapper.vue.d.ts +19 -0
- package/dist/components/CommonInputWrapper/CommonInputWrapper.vue.js +6 -0
- package/dist/components/CommonInputWrapper/CommonInputWrapper.vue_vue_type_script_setup_true_lang.js +107 -0
- package/dist/components/CommonInputWrapper/types.d.ts +96 -0
- package/dist/components/CommonPopover/CommonPopover.vue.d.ts +9 -3
- package/dist/components/CommonPopover/CommonPopover.vue.js +6 -0
- package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +160 -0
- package/dist/components/CommonPopover/types.d.ts +65 -16
- package/dist/components/ErrorIcon/ErrorIcon.vue.d.ts +2 -0
- package/dist/components/ErrorIcon/ErrorIcon.vue.js +6 -0
- package/dist/components/ErrorIcon/ErrorIcon.vue_vue_type_script_setup_true_lang.js +16 -0
- package/dist/components/FlatListBox/FlatListBox.vue.d.ts +2 -5
- package/dist/components/FlatListBox/FlatListBox.vue.js +5 -0
- package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +167 -0
- package/dist/components/FlatListBox/types.d.ts +1 -1
- package/dist/components/GroupedListBox/GroupedListBox.vue.d.ts +2 -5
- package/dist/components/GroupedListBox/GroupedListBox.vue.js +5 -0
- package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +218 -0
- package/dist/components/ListBox/ListBox.vue.d.ts +3 -6
- package/dist/components/ListBox/ListBox.vue.js +5 -0
- package/dist/components/ListBox/ListBox.vue_vue_type_script_setup_true_lang.js +112 -0
- package/dist/components/ListBox/types.d.ts +1 -1
- package/dist/components/OptionsContainer/OptionsContainer.vue.d.ts +1 -0
- package/dist/components/OptionsContainer/OptionsContainer.vue.js +5 -0
- package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +52 -0
- package/dist/components/OptionsContainer/types.d.ts +14 -24
- package/dist/components/Transitions/ScaleFade.vue.d.ts +2 -2
- package/dist/components/Transitions/ScaleFade.vue.js +5 -0
- package/dist/components/Transitions/ScaleFade.vue_vue_type_script_setup_true_lang.js +47 -0
- package/dist/components/Transitions/Slide.vue.d.ts +15 -0
- package/dist/components/Transitions/Slide.vue.js +7 -0
- package/dist/components/Transitions/Slide.vue_vue_type_script_setup_true_lang.js +28 -0
- package/dist/components/WarningIcon/WarningIcon.vue.d.ts +5 -0
- package/dist/components/WarningIcon/WarningIcon.vue.js +6 -0
- package/dist/components/WarningIcon/WarningIcon.vue_vue_type_script_setup_true_lang.js +16 -0
- package/dist/components/WarningIcon/types.d.ts +3 -0
- package/dist/composables/__testResets.d.ts +1 -0
- package/dist/composables/useActiveInactiveState.d.ts +4 -0
- package/dist/composables/useActiveInactiveState.js +21 -0
- package/dist/composables/useBaseOptions.d.ts +3 -3
- package/dist/composables/useBaseOptions.js +31 -0
- package/dist/composables/useBbConfig.d.ts +8 -37
- package/dist/composables/useBbConfig.js +5 -0
- package/dist/composables/useBbDropdownContext.d.ts +89 -0
- package/dist/composables/useBbDropdownContext.js +46 -0
- package/dist/composables/useBbFormContext.d.ts +90 -0
- package/dist/composables/useBbFormContext.js +69 -0
- package/dist/composables/useBbTableContext.d.ts +195 -0
- package/dist/composables/useBbTableContext.js +208 -0
- package/dist/composables/useBbTabsContext.d.ts +111 -0
- package/dist/composables/useBbTabsContext.js +225 -0
- package/dist/composables/useBreakpoint.d.ts +13 -0
- package/dist/composables/useBreakpoint.js +39 -0
- package/dist/composables/useBroadcastChannelInstance.d.ts +1 -3
- package/dist/composables/useBroadcastChannelInstance.js +39 -0
- package/dist/composables/useCancelableFunction.js +37 -0
- package/dist/composables/useClosingInert.d.ts +28 -0
- package/dist/composables/useClosingInert.js +23 -0
- package/dist/composables/useCoherence.js +16 -0
- package/dist/composables/useConfirm.d.ts +278 -68
- package/dist/composables/useConfirm.js +130 -0
- package/dist/composables/useCountdown.js +42 -0
- package/dist/composables/useHashedWatcher.d.ts +17 -0
- package/dist/composables/useHashedWatcher.js +14 -0
- package/dist/composables/useId.d.ts +3 -2
- package/dist/composables/useIndexById.js +16 -0
- package/dist/composables/useInertiaPage.d.ts +10 -0
- package/dist/composables/useInertiaPage.js +8 -0
- package/dist/composables/useItemText.js +17 -0
- package/dist/composables/useItemValue.js +9 -0
- package/dist/composables/useItemsGetter.d.ts +1 -1
- package/dist/composables/useItemsGetter.js +30 -0
- package/dist/composables/useListboxFocus.js +66 -0
- package/dist/composables/useLocale.d.ts +1 -1
- package/dist/composables/useLocale.js +11 -0
- package/dist/composables/useLogger.d.ts +1 -1
- package/dist/composables/useLogger.js +10 -0
- package/dist/composables/useMinimalQueue.d.ts +1 -1
- package/dist/composables/useMobile.js +7 -0
- package/dist/composables/useOnFalsy.d.ts +2 -0
- package/dist/composables/useOnFalsy.js +9 -0
- package/dist/composables/useOnTruthy.d.ts +7 -0
- package/dist/composables/useOnTruthy.js +9 -0
- package/dist/composables/usePrefill.d.ts +2 -1
- package/dist/composables/usePrefill.js +24 -0
- package/dist/composables/useQuery.d.ts +15 -3
- package/dist/composables/useQuery.js +42 -0
- package/dist/composables/useRoute.js +11 -0
- package/dist/composables/useRouter.js +8 -0
- package/dist/composables/useSafeArea.d.ts +51 -0
- package/dist/composables/useSafeArea.js +16 -0
- package/dist/composables/useSegmentedFields.d.ts +104 -0
- package/dist/composables/useSegmentedFields.js +159 -0
- package/dist/composables/useTableWidthContext.d.ts +5 -0
- package/dist/composables/useTableWidthContext.js +42 -0
- package/dist/composables/useToast.d.ts +40 -70
- package/dist/composables/useToast.js +58 -0
- package/dist/composables/useTopLayer.d.ts +9 -0
- package/dist/composables/useTopLayer.js +7 -0
- package/dist/composables/useUntil.js +13 -0
- package/dist/composables/useViewportWidth.d.ts +17 -0
- package/dist/composables/useViewportWidth.js +6 -0
- package/dist/confirm-variants.d.ts +17 -0
- package/dist/deprecation/ai-deprecations.json.d.ts +784 -0
- package/dist/deprecation/ai-deprecations.json.js +4 -0
- package/dist/deprecation/removedProps.d.ts +3 -0
- package/dist/deprecation/removedProps.js +13 -0
- package/dist/directives/bbColor.d.ts +65 -0
- package/dist/directives/bbColor.js +24 -0
- package/dist/directives/bbDate.d.ts +66 -0
- package/dist/directives/bbDate.js +24 -0
- package/dist/directives/bbDropdown.d.ts +15 -11
- package/dist/directives/bbDropdown.js +23 -0
- package/dist/directives/bbTime.d.ts +64 -0
- package/dist/directives/bbTime.js +24 -0
- package/dist/directives/bbTooltip.d.ts +16 -11
- package/dist/directives/bbTooltip.js +24 -0
- package/dist/directives/createPopoverDirective.js +54 -0
- package/dist/dropdown-item-variants.d.ts +17 -0
- package/dist/i18n/index.d.ts +51 -3
- package/dist/i18n/index.js +27 -0
- package/dist/i18n/locales/cs.json +115 -0
- package/dist/i18n/locales/da.json +115 -0
- package/dist/i18n/locales/de.json +115 -0
- package/dist/i18n/locales/el.json +115 -0
- package/dist/i18n/locales/en.json +115 -0
- package/dist/i18n/locales/es.json +115 -0
- package/dist/i18n/locales/fi.json +115 -0
- package/dist/i18n/locales/fr.json +115 -0
- package/dist/i18n/locales/hu.json +115 -0
- package/dist/i18n/locales/it.json +115 -0
- package/dist/i18n/locales/ja.json +115 -0
- package/dist/i18n/locales/ko.json +115 -0
- package/dist/i18n/locales/nb.json +115 -0
- package/dist/i18n/locales/nl.json +115 -0
- package/dist/i18n/locales/pl.json +115 -0
- package/dist/i18n/locales/pt.json +115 -0
- package/dist/i18n/locales/ro.json +115 -0
- package/dist/i18n/locales/ru.json +115 -0
- package/dist/i18n/locales/sv.json +115 -0
- package/dist/i18n/locales/tr.json +115 -0
- package/dist/i18n/locales/uk.json +115 -0
- package/dist/i18n/locales/zh-cn.json +115 -0
- package/dist/icons-whitelist.d.ts +8 -0
- package/dist/index.d.ts +96 -79
- package/dist/index.js +76 -82
- package/dist/indicator-variants.d.ts +20 -0
- package/dist/llms-full.txt +79703 -0
- package/dist/llms-medium.txt +1514 -0
- package/dist/llms.txt +105 -0
- package/dist/locale-blueprint.json +141 -0
- package/dist/locale-registry.d.ts +37 -0
- package/dist/nuxt-module.d.ts +3 -0
- package/dist/nuxt.js +19 -0
- package/dist/plugin.d.ts +4 -0
- package/dist/plugin.js +22 -0
- package/dist/reset.css +1 -0
- package/dist/reset.d.ts +0 -0
- package/dist/runtime/nuxt-plugin.d.ts +2 -0
- package/dist/runtime/nuxt-plugin.js +24 -0
- package/dist/styles.css +2 -0
- package/dist/styles.d.ts +0 -0
- package/dist/toast-variants.d.ts +20 -0
- package/dist/tooltip-variants.d.ts +17 -0
- package/dist/types/ActionButton.d.ts +32 -0
- package/dist/types/AlertVariant.d.ts +16 -0
- package/dist/types/BadgeVariant.d.ts +16 -0
- package/dist/types/ButtonVariant.d.ts +17 -0
- package/dist/types/Classes.d.ts +1 -1
- package/dist/types/ColumnName.d.ts +1 -1
- package/dist/types/CommonProps.d.ts +68 -277
- package/dist/types/Config.d.ts +84 -0
- package/dist/types/ConfirmVariant.d.ts +15 -0
- package/dist/types/DropdownItemVariant.d.ts +18 -0
- package/dist/types/Icon.d.ts +5 -7
- package/dist/types/IndicatorVariant.d.ts +16 -0
- package/dist/types/InputDirection.d.ts +15 -0
- package/dist/types/ItemAccessor.d.ts +21 -0
- package/dist/types/Placement.d.ts +6 -0
- package/dist/types/ResponsiveSize.d.ts +20 -0
- package/dist/types/SizeScale.d.ts +8 -0
- package/dist/types/ToastVariant.d.ts +17 -0
- package/dist/types/TooltipVariant.d.ts +18 -0
- package/dist/utilities/functions/bytesToUnit.d.ts +2 -0
- package/dist/utilities/functions/bytesToUnit.js +18 -0
- package/dist/utilities/functions/clampPrecision.js +10 -0
- package/dist/utilities/functions/convertDateValue.d.ts +23 -10
- package/dist/utilities/functions/convertDateValue.js +12 -0
- package/dist/utilities/functions/deburr.js +5 -0
- package/dist/utilities/functions/empty.js +5 -0
- package/dist/utilities/functions/flattenTree.d.ts +1 -1
- package/dist/utilities/functions/hash.js +5 -0
- package/dist/utilities/functions/isDateDisabled.d.ts +1 -0
- package/dist/utilities/functions/isDateDisabled.js +20 -0
- package/dist/utilities/functions/isEqual.js +5 -0
- package/dist/utilities/functions/isNotEmpty.js +5 -0
- package/dist/utilities/functions/matchAnyKey.d.ts +1 -1
- package/dist/utilities/functions/matchAnyKey.js +15 -0
- package/dist/utilities/functions/parseSize.d.ts +1 -1
- package/dist/utilities/functions/parseSize.js +15 -0
- package/dist/utilities/functions/percentage.js +11 -0
- package/dist/utilities/functions/pipe.d.ts +1 -1
- package/dist/utilities/functions/reject.d.ts +25 -0
- package/dist/utilities/functions/reject.js +28 -0
- package/dist/utilities/functions/resolveEnumProp.d.ts +19 -0
- package/dist/utilities/functions/resolveEnumProp.js +5 -0
- package/dist/utilities/functions/slotKey.d.ts +13 -0
- package/dist/utilities/functions/slotKey.js +4 -0
- package/dist/utilities/functions/sort.d.ts +2 -2
- package/dist/utilities/functions/sort.js +19 -0
- package/dist/utilities/functions/throttle.js +5 -0
- package/dist/utilities/functions/waitFor.d.ts +9 -2
- package/dist/utilities/functions/waitFor.js +14 -0
- package/dist/utilities/functions/warnRemovedAttrs.d.ts +11 -0
- package/dist/utilities/functions/warnRemovedAttrs.js +20 -0
- package/dist/utilities/functions/when.js +5 -0
- package/dist/utilities/misc/iconsInjectionKey.d.ts +15 -0
- package/dist/utilities/misc/iconsInjectionKey.js +4 -0
- package/dist/utilities/misc/transitions.d.ts +5 -0
- package/dist/utilities/misc/transitions.js +8 -0
- package/dist/utils/injectLibraryStyles.d.ts +6 -0
- package/dist/utils/injectLibraryStyles.js +38 -0
- package/dist/validated/BbCheckbox.vue.d.ts +29 -0
- package/dist/validated/BbCheckbox.vue.js +5 -0
- package/dist/validated/BbCheckbox.vue_vue_type_script_setup_true_lang.js +75 -0
- package/dist/validated/BbCheckboxGroup.vue.d.ts +34 -0
- package/dist/validated/BbCheckboxGroup.vue.js +5 -0
- package/dist/validated/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +82 -0
- package/dist/validated/BbColorInput.vue.d.ts +36 -0
- package/dist/validated/BbColorInput.vue.js +5 -0
- package/dist/validated/BbColorInput.vue_vue_type_script_setup_true_lang.js +71 -0
- package/dist/validated/BbDatePickerInput.vue.d.ts +41 -0
- package/dist/validated/BbDatePickerInput.vue.js +5 -0
- package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +90 -0
- package/dist/validated/BbDropzone.vue.d.ts +24 -0
- package/dist/validated/BbDropzone.vue.js +5 -0
- package/dist/validated/BbDropzone.vue_vue_type_script_setup_true_lang.js +45 -0
- package/dist/validated/BbForm.vue.d.ts +28 -0
- package/dist/validated/BbForm.vue.js +5 -0
- package/dist/validated/BbForm.vue_vue_type_script_setup_true_lang.js +42 -0
- package/dist/validated/BbNumberInput.vue.d.ts +36 -0
- package/dist/validated/BbNumberInput.vue.js +5 -0
- package/dist/validated/BbNumberInput.vue_vue_type_script_setup_true_lang.js +72 -0
- package/dist/validated/BbRadioGroup.vue.d.ts +34 -0
- package/dist/validated/BbRadioGroup.vue.js +5 -0
- package/dist/validated/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +78 -0
- package/dist/validated/BbRating.vue.d.ts +30 -0
- package/dist/validated/BbRating.vue.js +5 -0
- package/dist/validated/BbRating.vue_vue_type_script_setup_true_lang.js +63 -0
- package/dist/validated/BbSelect.vue.d.ts +46 -0
- package/dist/validated/BbSelect.vue.js +5 -0
- package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +109 -0
- package/dist/validated/BbSlider.vue.d.ts +36 -0
- package/dist/validated/BbSlider.vue.js +5 -0
- package/dist/validated/BbSlider.vue_vue_type_script_setup_true_lang.js +69 -0
- package/dist/validated/BbSwitch.vue.d.ts +29 -0
- package/dist/validated/BbSwitch.vue.js +5 -0
- package/dist/validated/BbSwitch.vue_vue_type_script_setup_true_lang.js +75 -0
- package/dist/validated/BbSwitchGroup.vue.d.ts +34 -0
- package/dist/validated/BbSwitchGroup.vue.js +5 -0
- package/dist/validated/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +82 -0
- package/dist/validated/BbTag.vue.d.ts +36 -0
- package/dist/validated/BbTag.vue.js +5 -0
- package/dist/validated/BbTag.vue_vue_type_script_setup_true_lang.js +72 -0
- package/dist/validated/BbTextInput.vue.d.ts +36 -0
- package/dist/validated/BbTextInput.vue.js +5 -0
- package/dist/validated/BbTextInput.vue_vue_type_script_setup_true_lang.js +72 -0
- package/dist/validated/BbTextarea.vue.d.ts +36 -0
- package/dist/validated/BbTextarea.vue.js +5 -0
- package/dist/validated/BbTextarea.vue_vue_type_script_setup_true_lang.js +70 -0
- package/dist/validated/BbTimePickerInput.vue.d.ts +37 -0
- package/dist/validated/BbTimePickerInput.vue.js +5 -0
- package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +81 -0
- package/dist/validated/index.d.ts +29 -0
- package/dist/validated/useValidatedField.d.ts +93 -0
- package/dist/validated/useValidatedField.js +51 -0
- package/dist/validated.js +21 -0
- package/dist/vite-plugin.d.ts +261 -0
- package/dist/vite.js +603 -0
- package/llms.txt +107 -0
- package/package.json +181 -60
- package/scripts/lib/__fixtures__/validated-manifest.json +65 -0
- package/scripts/lib/ensure-manifest.mjs +39 -0
- package/scripts/lib/eslint-plugin-autofix.node.test.mjs +109 -0
- package/scripts/lib/eslint-plugin-recommended.node.test.mjs +87 -0
- package/scripts/lib/eslint-plugin-slots.node.test.mjs +271 -0
- package/scripts/lib/eslint-plugin.mjs +702 -0
- package/scripts/lib/eslint-plugin.node.test.mjs +193 -0
- package/scripts/lib/html-attributes.mjs +191 -0
- package/scripts/lib/mcp-config.mjs +126 -0
- package/scripts/lib/migrate-fix.mjs +115 -0
- package/scripts/lib/validate-bb-markup.mjs +488 -0
- package/dist/ai/BaseButton.md +0 -449
- package/dist/ai/BaseCheckbox.md +0 -512
- package/dist/ai/BaseCheckboxGroup.md +0 -597
- package/dist/ai/BaseColorInput.md +0 -461
- package/dist/ai/BaseDatePicker.md +0 -739
- package/dist/ai/BaseDatePickerInput.md +0 -1517
- package/dist/ai/BaseDialog.md +0 -610
- package/dist/ai/BaseInputContainer.md +0 -570
- package/dist/ai/BaseNumberInput.md +0 -509
- package/dist/ai/BaseRadio.md +0 -405
- package/dist/ai/BaseRadioGroup.md +0 -535
- package/dist/ai/BaseRating.md +0 -489
- package/dist/ai/BaseSelect.md +0 -1742
- package/dist/ai/BaseSlider.md +0 -871
- package/dist/ai/BaseSwitch.md +0 -322
- package/dist/ai/BaseSwitchGroup.md +0 -298
- package/dist/ai/BaseTag.md +0 -623
- package/dist/ai/BaseTextInput.md +0 -392
- package/dist/ai/BaseTextarea.md +0 -398
- package/dist/ai/BbChip.md +0 -147
- package/dist/ai/BbIntersection.md +0 -120
- package/dist/ai/BbRatio.md +0 -61
- package/dist/ai/BbRows.md +0 -307
- package/dist/ai/BbTab.md +0 -950
- package/dist/ai/CommonInputInnerContainer.md +0 -414
- package/dist/ai/CommonInputOuterContainer.md +0 -55
- package/dist/components/BaseButton/BaseButton.vue.d.ts +0 -14
- package/dist/components/BaseButton/types.d.ts +0 -159
- package/dist/components/BaseCheckbox/BaseCheckbox.vue.d.ts +0 -39
- package/dist/components/BaseCheckbox/types.d.ts +0 -213
- package/dist/components/BaseCheckboxGroup/BaseCheckboxGroup.vue.d.ts +0 -30
- package/dist/components/BaseCheckboxGroup/types.d.ts +0 -282
- package/dist/components/BaseColorInput/BaseColorInput.vue.d.ts +0 -35
- package/dist/components/BaseColorInput/ColorPalette.vue.d.ts +0 -13
- package/dist/components/BaseColorInput/types.d.ts +0 -233
- package/dist/components/BaseDatePicker/BaseDatePickerHeader.vue.d.ts +0 -15
- package/dist/components/BaseDatePicker/BaseDatePickerInputDaySelector.vue.d.ts +0 -58
- package/dist/components/BaseDatePicker/BaseDatePickerMonthSelector.vue.d.ts +0 -12
- package/dist/components/BaseDatePicker/BaseDatePickerYearSelector.vue.d.ts +0 -12
- package/dist/components/BaseDatePicker/types.d.ts +0 -100
- package/dist/components/BaseDatePickerInput/BaseDatePickerInput.vue.d.ts +0 -26
- package/dist/components/BaseDatePickerInput/types.d.ts +0 -206
- package/dist/components/BaseDialog/BaseDialog.vue.d.ts +0 -37
- package/dist/components/BaseDialog/types.d.ts +0 -180
- package/dist/components/BaseInputContainer/BaseInputContainer.vue.d.ts +0 -18
- package/dist/components/BaseInputContainer/types.d.ts +0 -126
- package/dist/components/BaseNumberInput/BaseNumberInput.vue.d.ts +0 -46
- package/dist/components/BaseNumberInput/types.d.ts +0 -191
- package/dist/components/BaseRadio/BaseRadio.vue.d.ts +0 -31
- package/dist/components/BaseRadio/types.d.ts +0 -173
- package/dist/components/BaseRadioGroup/BaseRadioGroup.vue.d.ts +0 -30
- package/dist/components/BaseRadioGroup/types.d.ts +0 -240
- package/dist/components/BaseRating/BaseRating.vue.d.ts +0 -35
- package/dist/components/BaseRating/types.d.ts +0 -144
- package/dist/components/BaseSelect/BaseSelect.vue.d.ts +0 -28
- package/dist/components/BaseSelect/types.d.ts +0 -470
- package/dist/components/BaseSlider/BaseSlider.vue.d.ts +0 -38
- package/dist/components/BaseSlider/types.d.ts +0 -201
- package/dist/components/BaseSwitch/BaseSwitch.vue.d.ts +0 -34
- package/dist/components/BaseSwitch/types.d.ts +0 -25
- package/dist/components/BaseSwitchGroup/BaseSwitchGroup.vue.d.ts +0 -30
- package/dist/components/BaseSwitchGroup/types.d.ts +0 -8
- package/dist/components/BaseTag/BaseTag.vue.d.ts +0 -37
- package/dist/components/BaseTag/types.d.ts +0 -136
- package/dist/components/BaseTextInput/BaseTextInput.vue.d.ts +0 -33
- package/dist/components/BaseTextInput/types.d.ts +0 -166
- package/dist/components/BaseTextarea/BaseTextarea.vue.d.ts +0 -31
- package/dist/components/BaseTextarea/types.d.ts +0 -151
- package/dist/components/BbChip/BbChip.vue.d.ts +0 -17
- package/dist/components/BbChip/types.d.ts +0 -23
- package/dist/components/BbIntersection/BbIntersection.vue.d.ts +0 -23
- package/dist/components/BbIntersection/types.d.ts +0 -36
- package/dist/components/BbRatio/BbRatio.vue.d.ts +0 -14
- package/dist/components/BbRatio/types.d.ts +0 -15
- package/dist/components/BbRows/BbRows.vue.d.ts +0 -62
- package/dist/components/BbRows/types.d.ts +0 -21
- package/dist/components/BbTab/BbTab.vue.d.ts +0 -27
- package/dist/components/BbTab/types.d.ts +0 -186
- package/dist/components/CommonInputInnerContainer/CommonInputInnerContainer.vue.d.ts +0 -15
- package/dist/components/CommonInputInnerContainer/types.d.ts +0 -47
- package/dist/components/CommonInputOuterContainer/CommonInputOuterContainer.vue.d.ts +0 -11
- package/dist/components/CommonInputOuterContainer/types.d.ts +0 -16
- package/dist/composables/useModalsState.d.ts +0 -5
- package/dist/composables/useQueue.d.ts +0 -58
- package/dist/composables/useWizard.d.ts +0 -85
- package/dist/i18n/en.d.ts +0 -67
- package/dist/i18n/it.d.ts +0 -67
- package/dist/index.css +0 -2
- package/dist/index100.js +0 -6
- package/dist/index101.js +0 -300
- package/dist/index102.js +0 -16
- package/dist/index103.js +0 -16
- package/dist/index104.js +0 -27
- package/dist/index109.js +0 -19
- package/dist/index11.js +0 -42
- package/dist/index110.js +0 -12
- package/dist/index111.js +0 -19
- package/dist/index112.js +0 -25
- package/dist/index114.js +0 -7
- package/dist/index115.js +0 -241
- package/dist/index116.js +0 -5
- package/dist/index117.js +0 -42
- package/dist/index118.js +0 -5
- package/dist/index119.js +0 -53
- package/dist/index120.js +0 -5
- package/dist/index121.js +0 -32
- package/dist/index122.js +0 -5
- package/dist/index124.js +0 -52
- package/dist/index125.js +0 -5
- package/dist/index126.js +0 -223
- package/dist/index128.js +0 -6
- package/dist/index129.js +0 -162
- package/dist/index13.js +0 -92
- package/dist/index130.js +0 -25
- package/dist/index131.js +0 -51
- package/dist/index132.js +0 -5
- package/dist/index133.js +0 -607
- package/dist/index135.js +0 -6
- package/dist/index136.js +0 -14
- package/dist/index137.js +0 -153
- package/dist/index139.js +0 -6
- package/dist/index14.js +0 -306
- package/dist/index140.js +0 -224
- package/dist/index141.js +0 -5
- package/dist/index143.js +0 -128
- package/dist/index145.js +0 -6
- package/dist/index146.js +0 -8
- package/dist/index147.js +0 -182
- package/dist/index149.js +0 -6
- package/dist/index15.js +0 -10
- package/dist/index151.js +0 -4
- package/dist/index152.js +0 -95
- package/dist/index154.js +0 -6
- package/dist/index155.js +0 -168
- package/dist/index157.js +0 -6
- package/dist/index158.js +0 -145
- package/dist/index16.js +0 -59
- package/dist/index160.js +0 -6
- package/dist/index161.js +0 -53
- package/dist/index163.js +0 -6
- package/dist/index164.js +0 -16
- package/dist/index166.js +0 -35
- package/dist/index168.js +0 -6
- package/dist/index169.js +0 -89
- package/dist/index171.js +0 -6
- package/dist/index172.js +0 -82
- package/dist/index174.js +0 -6
- package/dist/index175.js +0 -38
- package/dist/index176.js +0 -461
- package/dist/index177.js +0 -28
- package/dist/index178.js +0 -66
- package/dist/index18.js +0 -35
- package/dist/index180.js +0 -162
- package/dist/index181.js +0 -5
- package/dist/index182.js +0 -217
- package/dist/index183.js +0 -5
- package/dist/index184.js +0 -112
- package/dist/index185.js +0 -5
- package/dist/index186.js +0 -459
- package/dist/index188.js +0 -6
- package/dist/index19.js +0 -4
- package/dist/index192.js +0 -268
- package/dist/index194.js +0 -6
- package/dist/index195.js +0 -124
- package/dist/index197.js +0 -6
- package/dist/index198.js +0 -174
- package/dist/index2.js +0 -20
- package/dist/index20.js +0 -9
- package/dist/index200.js +0 -6
- package/dist/index201.js +0 -224
- package/dist/index203.js +0 -6
- package/dist/index204.js +0 -135
- package/dist/index206.js +0 -6
- package/dist/index207.js +0 -5
- package/dist/index208.js +0 -170
- package/dist/index21.js +0 -35
- package/dist/index210.js +0 -6
- package/dist/index211.js +0 -37
- package/dist/index213.js +0 -6
- package/dist/index214.js +0 -63
- package/dist/index216.js +0 -6
- package/dist/index217.js +0 -74
- package/dist/index219.js +0 -6
- package/dist/index22.js +0 -6
- package/dist/index220.js +0 -65
- package/dist/index222.js +0 -6
- package/dist/index223.js +0 -67
- package/dist/index225.js +0 -6
- package/dist/index226.js +0 -41
- package/dist/index228.js +0 -6
- package/dist/index229.js +0 -10
- package/dist/index23.js +0 -7
- package/dist/index230.js +0 -22
- package/dist/index232.js +0 -8
- package/dist/index233.js +0 -297
- package/dist/index235.js +0 -6
- package/dist/index236.js +0 -47
- package/dist/index237.js +0 -165
- package/dist/index239.js +0 -6
- package/dist/index24.js +0 -9
- package/dist/index241.js +0 -159
- package/dist/index243.js +0 -6
- package/dist/index244.js +0 -134
- package/dist/index246.js +0 -6
- package/dist/index247.js +0 -167
- package/dist/index249.js +0 -6
- package/dist/index25.js +0 -24
- package/dist/index250.js +0 -147
- package/dist/index252.js +0 -6
- package/dist/index253.js +0 -35
- package/dist/index255.js +0 -6
- package/dist/index256.js +0 -65
- package/dist/index258.js +0 -6
- package/dist/index259.js +0 -19
- package/dist/index260.js +0 -5
- package/dist/index261.js +0 -160
- package/dist/index263.js +0 -6
- package/dist/index264.js +0 -60
- package/dist/index266.js +0 -6
- package/dist/index267.js +0 -134
- package/dist/index269.js +0 -6
- package/dist/index27.js +0 -4
- package/dist/index271.js +0 -206
- package/dist/index273.js +0 -6
- package/dist/index274.js +0 -85
- package/dist/index275.js +0 -5
- package/dist/index276.js +0 -55
- package/dist/index277.js +0 -5
- package/dist/index278.js +0 -164
- package/dist/index28.js +0 -8
- package/dist/index280.js +0 -6
- package/dist/index281.js +0 -145
- package/dist/index283.js +0 -6
- package/dist/index284.js +0 -11
- package/dist/index285.js +0 -200
- package/dist/index287.js +0 -6
- package/dist/index288.js +0 -241
- package/dist/index29.js +0 -7
- package/dist/index290.js +0 -6
- package/dist/index291.js +0 -21
- package/dist/index293.js +0 -6
- package/dist/index294.js +0 -125
- package/dist/index296.js +0 -6
- package/dist/index297.js +0 -161
- package/dist/index299.js +0 -6
- package/dist/index30.js +0 -118
- package/dist/index300.js +0 -127
- package/dist/index302.js +0 -6
- package/dist/index303.js +0 -20
- package/dist/index305.js +0 -6
- package/dist/index306.js +0 -116
- package/dist/index307.js +0 -5
- package/dist/index308.js +0 -507
- package/dist/index31.js +0 -10
- package/dist/index310.js +0 -6
- package/dist/index311.js +0 -196
- package/dist/index313.js +0 -6
- package/dist/index314.js +0 -142
- package/dist/index316.js +0 -6
- package/dist/index317.js +0 -134
- package/dist/index319.js +0 -6
- package/dist/index32.js +0 -28
- package/dist/index320.js +0 -162
- package/dist/index322.js +0 -6
- package/dist/index323.js +0 -319
- package/dist/index325.js +0 -6
- package/dist/index326.js +0 -40
- package/dist/index327.js +0 -43
- package/dist/index328.js +0 -665
- package/dist/index33.js +0 -5
- package/dist/index330.js +0 -6
- package/dist/index331.js +0 -155
- package/dist/index333.js +0 -6
- package/dist/index334.js +0 -142
- package/dist/index336.js +0 -6
- package/dist/index337.js +0 -155
- package/dist/index339.js +0 -6
- package/dist/index34.js +0 -112
- package/dist/index340.js +0 -58
- package/dist/index341.js +0 -5
- package/dist/index342.js +0 -20
- package/dist/index344.js +0 -6
- package/dist/index345.js +0 -142
- package/dist/index347.js +0 -6
- package/dist/index349.js +0 -109
- package/dist/index351.js +0 -6
- package/dist/index352.js +0 -55
- package/dist/index353.js +0 -24
- package/dist/index354.js +0 -23
- package/dist/index355.js +0 -839
- package/dist/index356.js +0 -474
- package/dist/index357.js +0 -52
- package/dist/index358.js +0 -7
- package/dist/index36.js +0 -6
- package/dist/index38.js +0 -63
- package/dist/index39.js +0 -63
- package/dist/index40.js +0 -9
- package/dist/index42.js +0 -8
- package/dist/index43.js +0 -179
- package/dist/index44.js +0 -21
- package/dist/index46.js +0 -385
- package/dist/index48.js +0 -6
- package/dist/index49.js +0 -33
- package/dist/index5.js +0 -34
- package/dist/index50.js +0 -12
- package/dist/index51.js +0 -8
- package/dist/index52.js +0 -106
- package/dist/index53.js +0 -330
- package/dist/index54.js +0 -97
- package/dist/index55.js +0 -328
- package/dist/index56.js +0 -28
- package/dist/index57.js +0 -102
- package/dist/index58.js +0 -157
- package/dist/index6.js +0 -38
- package/dist/index60.js +0 -6
- package/dist/index61.js +0 -131
- package/dist/index62.js +0 -5
- package/dist/index65.js +0 -35
- package/dist/index66.js +0 -26
- package/dist/index68.js +0 -6
- package/dist/index69.js +0 -54
- package/dist/index7.js +0 -58
- package/dist/index71.js +0 -6
- package/dist/index72.js +0 -14
- package/dist/index74.js +0 -6
- package/dist/index75.js +0 -159
- package/dist/index77.js +0 -6
- package/dist/index78.js +0 -4
- package/dist/index79.js +0 -4
- package/dist/index80.js +0 -54
- package/dist/index81.js +0 -5
- package/dist/index82.js +0 -5
- package/dist/index83.js +0 -141
- package/dist/index85.js +0 -6
- package/dist/index86.js +0 -65
- package/dist/index88.js +0 -6
- package/dist/index89.js +0 -30
- package/dist/index9.js +0 -11
- package/dist/index90.js +0 -19
- package/dist/index91.js +0 -17
- package/dist/index92.js +0 -9
- package/dist/index93.js +0 -34
- package/dist/index95.js +0 -16
- package/dist/index96.js +0 -10
- package/dist/index97.js +0 -18
- package/dist/index98.js +0 -189
- package/dist/types/VoidHtmlElements.d.ts +0 -1
- package/dist/utilities/functions/add.d.ts +0 -1
- package/dist/utilities/functions/booleanishToBoolean.d.ts +0 -6
- package/dist/utilities/functions/capitalize.d.ts +0 -4
- package/dist/utilities/functions/cloneDeep.d.ts +0 -1
- package/dist/utilities/functions/debounce.d.ts +0 -1
- package/dist/utilities/functions/drop.d.ts +0 -1
- package/dist/utilities/functions/exceedsPrecision.d.ts +0 -1
- package/dist/utilities/functions/findRight.d.ts +0 -4
- package/dist/utilities/functions/findRightIndex.d.ts +0 -4
- package/dist/utilities/functions/flow.d.ts +0 -1
- package/dist/utilities/functions/getHueFromRGB.d.ts +0 -9
- package/dist/utilities/functions/groupBy.d.ts +0 -6
- package/dist/utilities/functions/gt.d.ts +0 -7
- package/dist/utilities/functions/hexToRGB.d.ts +0 -7
- package/dist/utilities/functions/hslToHex.d.ts +0 -1
- package/dist/utilities/functions/includes.d.ts +0 -1
- package/dist/utilities/functions/initial.d.ts +0 -1
- package/dist/utilities/functions/isCssColor.d.ts +0 -5
- package/dist/utilities/functions/lt.d.ts +0 -7
- package/dist/utilities/functions/makeUrl.d.ts +0 -1
- package/dist/utilities/functions/mapKeys.d.ts +0 -5
- package/dist/utilities/functions/mapValues.d.ts +0 -1
- package/dist/utilities/functions/matchesPropertyInsensitive.d.ts +0 -1
- package/dist/utilities/functions/max.d.ts +0 -2
- package/dist/utilities/functions/mean.d.ts +0 -4
- package/dist/utilities/functions/merge.d.ts +0 -11
- package/dist/utilities/functions/millisecondsTo.d.ts +0 -1
- package/dist/utilities/functions/negate.d.ts +0 -4
- package/dist/utilities/functions/normalizeItemGroups.d.ts +0 -13
- package/dist/utilities/functions/omit.d.ts +0 -2
- package/dist/utilities/functions/overEvery.d.ts +0 -4
- package/dist/utilities/functions/pick.d.ts +0 -1
- package/dist/utilities/functions/replace.d.ts +0 -1
- package/dist/utilities/functions/replaceInTree.d.ts +0 -4
- package/dist/utilities/functions/retry.d.ts +0 -5
- package/dist/utilities/functions/roundToTheNearest.d.ts +0 -8
- package/dist/utilities/functions/set.d.ts +0 -15
- package/dist/utilities/functions/stub.d.ts +0 -6
- package/dist/utilities/functions/transposePercent.d.ts +0 -9
- package/dist/utilities/functions/tryTo.d.ts +0 -2
- package/dist/utilities/functions/uniqBy.d.ts +0 -1
- /package/dist/{index64.js → _virtual/_plugin-vue_export-helper.js} +0 -0
- /package/dist/components/{BaseButton → BbBaseButton}/RouterComponent.vue.d.ts +0 -0
- /package/dist/components/{BaseDatePicker/BaseDatePicker.vue.d.ts → BbBaseDatePicker/BbBaseDatePicker.vue.d.ts} +0 -0
- /package/dist/{index165.js → composables/useArray.js} +0 -0
- /package/dist/{index17.js → composables/useFrameworkDetection.js} +0 -0
- /package/dist/{index12.js → composables/useId.js} +0 -0
- /package/dist/{index107.js → utilities/functions/chunk.js} +0 -0
- /package/dist/{index8.js → utilities/functions/clamp.js} +0 -0
- /package/dist/{index150.js → utilities/functions/curry.js} +0 -0
- /package/dist/{index45.js → utilities/functions/extractDomContainer.js} +0 -0
- /package/dist/{index270.js → utilities/functions/findInTree.js} +0 -0
- /package/dist/{index348.js → utilities/functions/flattenTree.js} +0 -0
- /package/dist/{index41.js → utilities/functions/get.js} +0 -0
- /package/dist/{index189.js → utilities/functions/head.js} +0 -0
- /package/dist/{index108.js → utilities/functions/identity.js} +0 -0
- /package/dist/{index179.js → utilities/functions/indexBy.js} +0 -0
- /package/dist/{index37.js → utilities/functions/isHex.js} +0 -0
- /package/dist/{index94.js → utilities/functions/isNil.js} +0 -0
- /package/dist/{index26.js → utilities/functions/isNotNil.js} +0 -0
- /package/dist/{index105.js → utilities/functions/last.js} +0 -0
- /package/dist/{index142.js → utilities/functions/noop.js} +0 -0
- /package/dist/{index231.js → utilities/functions/parseWidthString.js} +0 -0
- /package/dist/{index240.js → utilities/functions/pickBy.js} +0 -0
- /package/dist/{index123.js → utilities/functions/range.js} +0 -0
- /package/dist/{index190.js → utilities/functions/snapToStep.js} +0 -0
- /package/dist/{index191.js → utilities/functions/transpose.js} +0 -0
- /package/dist/{index106.js → utilities/functions/validateDateFormat.js} +0 -0
- /package/dist/{index10.js → utilities/functions/wait.js} +0 -0
package/dist/ai/BbOffCanvas.md
CHANGED
|
@@ -1,548 +1,947 @@
|
|
|
1
1
|
# BbOffCanvas
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## Agent Contract
|
|
4
|
+
|
|
5
|
+
- Safety level: **Consumer API**
|
|
6
|
+
- Group: **Overlay**
|
|
7
|
+
- Description: Shows side-panel overlay content outside normal layout flow.
|
|
8
|
+
- Usage rule: Prefer this component for consumer-facing implementations.
|
|
9
|
+
- Implementation source (only when the contract below is not enough): [source/BbOffCanvas.md](./source/BbOffCanvas.md)
|
|
10
|
+
|
|
11
|
+
## Usage & Guidelines
|
|
12
|
+
|
|
13
|
+
### When to use
|
|
14
|
+
|
|
15
|
+
Reach for `BbOffCanvas` for **supplementary content that lives beside the main
|
|
16
|
+
task**: a filter panel, a record's detail view, a settings drawer, a
|
|
17
|
+
notifications tray. It slides in from an edge, dims the page, and leaves as
|
|
18
|
+
quickly as it came — the user is topping up context, not switching tasks.
|
|
19
|
+
|
|
20
|
+
Choose a sibling when the intent differs:
|
|
21
|
+
|
|
22
|
+
- A single focused task the user must finish (a form, a confirm, an
|
|
23
|
+
announcement) → `BbDialog` (centered modal).
|
|
24
|
+
- A plain yes/no or destructive confirm → `BbConfirm` with `useConfirm`.
|
|
25
|
+
- A small anchored menu or bit of interactive content → `BbPopover`.
|
|
26
|
+
|
|
27
|
+
`BbDialog` and `BbOffCanvas` share most of their API (v-model, `title`, the
|
|
28
|
+
`header` / `default` / `footer` slots, `persistent`, `disabled`, `hide-close`,
|
|
29
|
+
`focus-target`, `eager`, `stack`, `transition-duration`, and the four lifecycle
|
|
30
|
+
events), so moving a surface between them is mostly a tag swap. The differences
|
|
31
|
+
are physical: `size` means the panel's **extent along its axis** (not a max
|
|
32
|
+
width), and `side`, `draggable` and `stack-gap` are off-canvas-only.
|
|
33
|
+
|
|
34
|
+
### Open and close with v-model
|
|
35
|
+
|
|
36
|
+
`v-model` owns visibility — there is no imperative `open()`. Bind a boolean and
|
|
37
|
+
flip it. The panel dismisses itself on the header close button, the `Escape`
|
|
38
|
+
key, and a backdrop click; the `default` slot also receives a `close` callback
|
|
39
|
+
for buttons inside the body, and footer buttons simply set the model back to
|
|
40
|
+
`false`.
|
|
41
|
+
|
|
42
|
+
**A right-hand panel**
|
|
4
43
|
|
|
5
44
|
```vue
|
|
6
45
|
<template>
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
:aria-describedby="
|
|
10
|
-
hasRenderedAtLeastOnce && description ? descriptionId : undefined
|
|
11
|
-
"
|
|
12
|
-
:aria-labelledby="hasRenderedAtLeastOnce && title ? titleId : undefined"
|
|
13
|
-
:aria-live="model ? 'polite' : 'off'"
|
|
14
|
-
class="bb-offcanvas"
|
|
15
|
-
:class="
|
|
16
|
-
[
|
|
17
|
-
{
|
|
18
|
-
'bb-offcanvas--open': model,
|
|
19
|
-
'bb-offcanvas--fullscreen': isFullscreen,
|
|
20
|
-
'bb-offcanvas--compact': compact,
|
|
21
|
-
'bb-offcanvas--deny-close': denyClose,
|
|
22
|
-
[`bb-offcanvas--${props.direction}`]: true,
|
|
23
|
-
},
|
|
24
|
-
overlayClasses,
|
|
25
|
-
panelClasses,
|
|
26
|
-
].flat()
|
|
27
|
-
"
|
|
28
|
-
:inert="!model"
|
|
29
|
-
:style="{
|
|
30
|
-
'--max-size': maxSize,
|
|
31
|
-
'--transition-duration': `${props.transitionDuration}ms`,
|
|
32
|
-
}"
|
|
33
|
-
@cancel="userClose"
|
|
34
|
-
@click.self="userClose"
|
|
46
|
+
<div
|
|
47
|
+
class="flex max-w-sm items-center justify-between gap-3 rounded-[var(--bb-radius)] border p-3"
|
|
35
48
|
>
|
|
36
|
-
<
|
|
37
|
-
<
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
><svg
|
|
53
|
-
aria-hidden="true"
|
|
54
|
-
fill="none"
|
|
55
|
-
viewBox="0 0 24 24"
|
|
56
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
57
|
-
>
|
|
58
|
-
<path
|
|
59
|
-
d="M23 23L1 1M23 1L1 23"
|
|
60
|
-
stroke="currentColor"
|
|
61
|
-
stroke-linecap="round"
|
|
62
|
-
stroke-width="3"
|
|
63
|
-
/>
|
|
64
|
-
</svg>
|
|
65
|
-
</span>
|
|
66
|
-
</slot>
|
|
67
|
-
</button>
|
|
68
|
-
</span>
|
|
69
|
-
</slot>
|
|
70
|
-
</div>
|
|
71
|
-
<div ref="body" class="bb-offcanvas__body scrollbar-border">
|
|
72
|
-
<div class="bb-offcanvas__body-content">
|
|
73
|
-
<slot
|
|
74
|
-
:description-id="descriptionId"
|
|
75
|
-
name="description"
|
|
76
|
-
:text="description"
|
|
77
|
-
><div
|
|
78
|
-
v-if="description"
|
|
79
|
-
:id="descriptionId"
|
|
80
|
-
class="bb-offcanvas__description sr-only"
|
|
81
|
-
>
|
|
82
|
-
{{ description }}
|
|
83
|
-
</div>
|
|
84
|
-
</slot>
|
|
85
|
-
<slot></slot>
|
|
49
|
+
<div class="min-w-0">
|
|
50
|
+
<p class="m-0 text-sm font-medium">Workspace</p>
|
|
51
|
+
<p class="m-0 text-xs text-[color:var(--bb-text-muted)]">
|
|
52
|
+
3 updates since yesterday
|
|
53
|
+
</p>
|
|
54
|
+
</div>
|
|
55
|
+
<BbButton variant="outline" @click="open = true">Open activity</BbButton>
|
|
56
|
+
</div>
|
|
57
|
+
<BbOffCanvas v-model="open" side="right" title="Recent activity">
|
|
58
|
+
<template #default="{ close }">
|
|
59
|
+
<div class="grid gap-3 text-sm">
|
|
60
|
+
<div v-for="entry in activity" :key="entry.id" class="grid gap-0.5">
|
|
61
|
+
<p class="m-0">{{ entry.text }}</p>
|
|
62
|
+
<p class="m-0 text-xs text-[color:var(--bb-text-muted)]">
|
|
63
|
+
{{ entry.when }}
|
|
64
|
+
</p>
|
|
86
65
|
</div>
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
<slot name="footer"></slot>
|
|
66
|
+
<BbButton class="justify-self-start" variant="ghost" @click="close">
|
|
67
|
+
Close
|
|
68
|
+
</BbButton>
|
|
91
69
|
</div>
|
|
92
70
|
</template>
|
|
93
|
-
</
|
|
71
|
+
</BbOffCanvas>
|
|
94
72
|
</template>
|
|
73
|
+
<script setup lang="ts">
|
|
74
|
+
import { ref } from 'vue';
|
|
75
|
+
import { BbButton, BbOffCanvas } from 'bitboss-ui';
|
|
76
|
+
|
|
77
|
+
type ActivityEntry = {
|
|
78
|
+
id: number;
|
|
79
|
+
text: string;
|
|
80
|
+
when: string;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
const open = ref(false);
|
|
84
|
+
|
|
85
|
+
const activity: ActivityEntry[] = [
|
|
86
|
+
{
|
|
87
|
+
id: 1,
|
|
88
|
+
text: 'Invoice #INV-2043 was paid.',
|
|
89
|
+
when: '12 minutes ago',
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
id: 2,
|
|
93
|
+
text: 'Maria commented on “Q3 report”.',
|
|
94
|
+
when: '1 hour ago',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
id: 3,
|
|
98
|
+
text: 'Webhook delivery to Stripe succeeded.',
|
|
99
|
+
when: 'Yesterday · 16:42',
|
|
100
|
+
},
|
|
101
|
+
];
|
|
102
|
+
</script>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Direction
|
|
106
|
+
|
|
107
|
+
`side` sets the edge the panel enters from — `left`, `right`, `top`, or
|
|
108
|
+
`bottom` (default `left`). Use `right` for detail and filter panels that sit
|
|
109
|
+
beside a right-aligned action flow, `bottom` for mobile-style sheets, `top` for
|
|
110
|
+
banners and command surfaces. The side also decides the drag axis and which
|
|
111
|
+
dimension `size` controls.
|
|
95
112
|
|
|
113
|
+
**Enter from any edge**
|
|
114
|
+
|
|
115
|
+
```vue
|
|
116
|
+
<template>
|
|
117
|
+
<div
|
|
118
|
+
class="flex max-w-md flex-wrap gap-2 rounded-[var(--bb-radius)] border p-3"
|
|
119
|
+
>
|
|
120
|
+
<BbButton
|
|
121
|
+
v-for="edge in edges"
|
|
122
|
+
:key="edge"
|
|
123
|
+
variant="outline"
|
|
124
|
+
@click="activeSide = edge"
|
|
125
|
+
>
|
|
126
|
+
{{ edge }}
|
|
127
|
+
</BbButton>
|
|
128
|
+
<BbOffCanvas
|
|
129
|
+
:model-value="activeSide !== null"
|
|
130
|
+
:side="activeSide ?? 'right'"
|
|
131
|
+
:title="`From ${activeSide ?? 'right'}`"
|
|
132
|
+
@update:model-value="
|
|
133
|
+
(value) => {
|
|
134
|
+
if (!value) activeSide = null;
|
|
135
|
+
}
|
|
136
|
+
"
|
|
137
|
+
>
|
|
138
|
+
<p class="m-0 text-sm">
|
|
139
|
+
This panel slid in from the <strong>{{ activeSide }}</strong> edge.
|
|
140
|
+
</p>
|
|
141
|
+
</BbOffCanvas>
|
|
142
|
+
</div>
|
|
143
|
+
</template>
|
|
96
144
|
<script setup lang="ts">
|
|
97
|
-
import {
|
|
98
|
-
import {
|
|
99
|
-
import { useId } from '@/composables/useId';
|
|
100
|
-
import { useLocale } from '@/composables/useLocale';
|
|
101
|
-
import { useMobile } from '@/composables/useMobile';
|
|
102
|
-
import { useUntil } from '@/composables/useUntil';
|
|
103
|
-
import { wait } from '@/utilities/functions/wait';
|
|
104
|
-
import { _config } from '@/composables/useBbConfig';
|
|
105
|
-
import type {
|
|
106
|
-
BbOffCanvasProps,
|
|
107
|
-
BbOffCanvasEvents,
|
|
108
|
-
BbOffCanvasSlots,
|
|
109
|
-
Sizes,
|
|
110
|
-
} from './types';
|
|
111
|
-
|
|
112
|
-
const props = withDefaults(defineProps<BbOffCanvasProps>(), {
|
|
113
|
-
direction: 'left',
|
|
114
|
-
showClose: true,
|
|
115
|
-
size: 'sm',
|
|
116
|
-
panelClasses: () => [],
|
|
117
|
-
overlayClasses: () => [],
|
|
118
|
-
transitionDuration: 300,
|
|
119
|
-
});
|
|
145
|
+
import { ref } from 'vue';
|
|
146
|
+
import { BbButton, BbOffCanvas } from 'bitboss-ui';
|
|
120
147
|
|
|
121
|
-
|
|
148
|
+
type Side = 'left' | 'top' | 'right' | 'bottom';
|
|
122
149
|
|
|
123
|
-
|
|
150
|
+
const edges: Side[] = ['left', 'right', 'top', 'bottom'];
|
|
151
|
+
const activeSide = ref<Side | null>(null);
|
|
152
|
+
</script>
|
|
153
|
+
```
|
|
124
154
|
|
|
125
|
-
|
|
155
|
+
### Header, footer and body
|
|
126
156
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
157
|
+
A `title` prop renders the standard header (title text + close button) and wires
|
|
158
|
+
`aria-labelledby` for you. Put content in the `default` slot and actions in the
|
|
159
|
+
`footer` slot. The body area scrolls internally when content overflows; the
|
|
160
|
+
header and footer stay pinned.
|
|
131
161
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
)
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
162
|
+
- Use the `title` slot to restyle just the title text — it stays wired to
|
|
163
|
+
`aria-labelledby` and receives the `title` prop as `text`.
|
|
164
|
+
- Unlike `BbDialog`, the **`header` slot is fully supported here** and replaces
|
|
165
|
+
the whole header section; it receives `titleId`, `title` and `close`, so you
|
|
166
|
+
can build a custom header and still keep the accessible name wired through
|
|
167
|
+
`titleId`.
|
|
168
|
+
- Omitting `title` (and the `header` slot) removes the header entirely — you
|
|
169
|
+
then own the accessible name.
|
|
170
|
+
|
|
171
|
+
### A filters drawer
|
|
172
|
+
|
|
173
|
+
The archetypal off-canvas: search + toggles in the `default` slot, Apply/Reset
|
|
174
|
+
in the `footer`. Keep one primary action (Apply) and align actions to the end.
|
|
175
|
+
This companion seeds typed filter state and resets it in place.
|
|
176
|
+
|
|
177
|
+
**Invoice filters**
|
|
178
|
+
|
|
179
|
+
```vue
|
|
180
|
+
<template>
|
|
181
|
+
<div
|
|
182
|
+
class="flex max-w-sm items-center justify-between gap-3 rounded-[var(--bb-radius)] border p-3"
|
|
183
|
+
>
|
|
184
|
+
<div class="min-w-0">
|
|
185
|
+
<p class="m-0 text-sm font-medium">Invoices</p>
|
|
186
|
+
<p class="m-0 text-xs text-[color:var(--bb-text-muted)]">
|
|
187
|
+
{{ matchingLabel }}
|
|
188
|
+
</p>
|
|
189
|
+
</div>
|
|
190
|
+
<BbButton
|
|
191
|
+
prepend:icon="lucide:sliders-horizontal"
|
|
192
|
+
variant="outline"
|
|
193
|
+
@click="open = true"
|
|
194
|
+
>
|
|
195
|
+
Filters
|
|
196
|
+
</BbButton>
|
|
197
|
+
</div>
|
|
198
|
+
<BbOffCanvas v-model="open" side="right" title="Filter invoices">
|
|
199
|
+
<div class="grid gap-3">
|
|
200
|
+
<BbTextInput
|
|
201
|
+
v-model="filters.query"
|
|
202
|
+
compact
|
|
203
|
+
label="Search"
|
|
204
|
+
placeholder="Invoice #, customer…"
|
|
205
|
+
/>
|
|
206
|
+
<BbCheckbox v-model="filters.overdue" label="Only overdue" />
|
|
207
|
+
<BbCheckbox v-model="filters.unpaid" label="Only unpaid" />
|
|
208
|
+
</div>
|
|
209
|
+
<template #footer>
|
|
210
|
+
<div class="flex justify-end gap-2">
|
|
211
|
+
<BbButton variant="ghost" @click="reset">Reset</BbButton>
|
|
212
|
+
<BbButton variant="primary" @click="open = false">Apply</BbButton>
|
|
213
|
+
</div>
|
|
214
|
+
</template>
|
|
215
|
+
</BbOffCanvas>
|
|
216
|
+
</template>
|
|
217
|
+
<script setup lang="ts">
|
|
218
|
+
import { computed, reactive, ref } from 'vue';
|
|
219
|
+
import { BbButton, BbCheckbox, BbOffCanvas, BbTextInput } from 'bitboss-ui';
|
|
220
|
+
|
|
221
|
+
type InvoiceFilterState = {
|
|
222
|
+
query: string;
|
|
223
|
+
overdue: boolean;
|
|
224
|
+
unpaid: boolean;
|
|
187
225
|
};
|
|
188
226
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
227
|
+
const open = ref(false);
|
|
228
|
+
const filters = reactive<InvoiceFilterState>({
|
|
229
|
+
query: '',
|
|
230
|
+
overdue: false,
|
|
231
|
+
unpaid: true,
|
|
192
232
|
});
|
|
193
233
|
|
|
194
|
-
const
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
234
|
+
const activeCount = computed(() => {
|
|
235
|
+
let count = 0;
|
|
236
|
+
if (filters.query.trim()) count += 1;
|
|
237
|
+
if (filters.overdue) count += 1;
|
|
238
|
+
if (filters.unpaid) count += 1;
|
|
239
|
+
return count;
|
|
240
|
+
});
|
|
199
241
|
|
|
200
|
-
|
|
242
|
+
const matchingLabel = computed(() => {
|
|
243
|
+
const n = activeCount.value;
|
|
244
|
+
if (n === 0) return '48 total · no filters';
|
|
245
|
+
return `12 matching · ${n} filter${n === 1 ? '' : 's'} on`;
|
|
201
246
|
});
|
|
202
247
|
|
|
203
|
-
/**
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
const userClose = (event: Event) => {
|
|
209
|
-
event.preventDefault();
|
|
210
|
-
// If the user forces closing just allow them
|
|
211
|
-
if (props.disabled || props.persistent) {
|
|
212
|
-
denyClose.value = true;
|
|
213
|
-
wait(300).then(() => {
|
|
214
|
-
denyClose.value = false;
|
|
215
|
-
});
|
|
216
|
-
return false;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
close();
|
|
248
|
+
/** Clear every filter back to the empty baseline. */
|
|
249
|
+
const reset = () => {
|
|
250
|
+
filters.query = '';
|
|
251
|
+
filters.overdue = false;
|
|
252
|
+
filters.unpaid = false;
|
|
220
253
|
};
|
|
254
|
+
</script>
|
|
255
|
+
```
|
|
221
256
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
257
|
+
### A record inspector
|
|
258
|
+
|
|
259
|
+
The other archetype: a record's detail view opened beside a list, so the user
|
|
260
|
+
keeps their place in the table. Open from a row, show identity + status + key
|
|
261
|
+
fields in a `right`-hand panel, and let footer actions navigate or close. This
|
|
262
|
+
companion opens an inspector per selected member and offloads the "open full
|
|
263
|
+
record" action to `BbButton`'s `href` rather than a click handler.
|
|
225
264
|
|
|
226
|
-
|
|
265
|
+
**Record inspector**
|
|
227
266
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
267
|
+
```vue
|
|
268
|
+
<template>
|
|
269
|
+
<div class="grid max-w-sm gap-1 rounded-[var(--bb-radius)] border p-1">
|
|
270
|
+
<p
|
|
271
|
+
class="m-0 px-2 pt-1.5 text-xs font-medium text-[color:var(--bb-text-muted)]"
|
|
272
|
+
>
|
|
273
|
+
Members
|
|
274
|
+
</p>
|
|
275
|
+
<BbButton
|
|
276
|
+
v-for="member in members"
|
|
277
|
+
:key="member.id"
|
|
278
|
+
class="justify-start"
|
|
279
|
+
size="sm"
|
|
280
|
+
variant="ghost"
|
|
281
|
+
@click="openDetail(member)"
|
|
282
|
+
>
|
|
283
|
+
<span class="flex min-w-0 items-center gap-2">
|
|
284
|
+
<BbAvatar :alt="member.name" size="xs">
|
|
285
|
+
{{ member.initials }}
|
|
286
|
+
</BbAvatar>
|
|
287
|
+
<span class="truncate">{{ member.name }}</span>
|
|
288
|
+
</span>
|
|
289
|
+
</BbButton>
|
|
290
|
+
</div>
|
|
291
|
+
<BbOffCanvas v-model="open" side="right" size="sm" :title="selected?.name">
|
|
292
|
+
<div v-if="selected" class="grid gap-4 text-sm">
|
|
293
|
+
<div class="flex items-start gap-3">
|
|
294
|
+
<BbAvatar :alt="selected.name" size="lg">
|
|
295
|
+
{{ selected.initials }}
|
|
296
|
+
</BbAvatar>
|
|
297
|
+
<div class="grid min-w-0 gap-1.5">
|
|
298
|
+
<p class="m-0 font-medium">{{ selected.role }}</p>
|
|
299
|
+
<BbBadge size="sm" :variant="selected.statusVariant">
|
|
300
|
+
{{ selected.status }}
|
|
301
|
+
</BbBadge>
|
|
302
|
+
</div>
|
|
303
|
+
</div>
|
|
304
|
+
<dl class="m-0 grid gap-2">
|
|
305
|
+
<div
|
|
306
|
+
v-for="row in detailRows"
|
|
307
|
+
:key="row.label"
|
|
308
|
+
class="flex items-baseline justify-between gap-3"
|
|
309
|
+
>
|
|
310
|
+
<dt class="shrink-0 text-xs text-[color:var(--bb-text-muted)]">
|
|
311
|
+
{{ row.label }}
|
|
312
|
+
</dt>
|
|
313
|
+
<dd class="m-0 truncate text-right">{{ row.value }}</dd>
|
|
314
|
+
</div>
|
|
315
|
+
</dl>
|
|
316
|
+
</div>
|
|
317
|
+
<template #footer>
|
|
318
|
+
<div class="flex justify-end gap-2">
|
|
319
|
+
<BbButton variant="ghost" @click="open = false">Close</BbButton>
|
|
320
|
+
<BbButton
|
|
321
|
+
append:icon="lucide:arrow-right"
|
|
322
|
+
:href="`#member-${selected?.id}`"
|
|
323
|
+
variant="primary"
|
|
324
|
+
>
|
|
325
|
+
Open full record
|
|
326
|
+
</BbButton>
|
|
327
|
+
</div>
|
|
328
|
+
</template>
|
|
329
|
+
</BbOffCanvas>
|
|
330
|
+
</template>
|
|
331
|
+
<script setup lang="ts">
|
|
332
|
+
import { computed, ref } from 'vue';
|
|
333
|
+
import { BbAvatar, BbBadge, BbButton, BbOffCanvas } from 'bitboss-ui';
|
|
334
|
+
|
|
335
|
+
type MemberStatus = 'Active' | 'Away';
|
|
336
|
+
|
|
337
|
+
type Member = {
|
|
338
|
+
id: number;
|
|
339
|
+
name: string;
|
|
340
|
+
initials: string;
|
|
341
|
+
role: string;
|
|
342
|
+
email: string;
|
|
343
|
+
joined: string;
|
|
344
|
+
team: string;
|
|
345
|
+
status: MemberStatus;
|
|
346
|
+
statusVariant: 'soft-green' | 'soft-amber';
|
|
231
347
|
};
|
|
232
348
|
|
|
233
|
-
const
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
349
|
+
const members: Member[] = [
|
|
350
|
+
{
|
|
351
|
+
id: 1,
|
|
352
|
+
name: 'Ada Lovelace',
|
|
353
|
+
initials: 'AL',
|
|
354
|
+
role: 'Lead engineer',
|
|
355
|
+
email: 'ada@northwind.co',
|
|
356
|
+
joined: 'Mar 2021',
|
|
357
|
+
team: 'Platform',
|
|
358
|
+
status: 'Active',
|
|
359
|
+
statusVariant: 'soft-green',
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
id: 2,
|
|
363
|
+
name: 'Grace Hopper',
|
|
364
|
+
initials: 'GH',
|
|
365
|
+
role: 'Principal engineer',
|
|
366
|
+
email: 'grace@northwind.co',
|
|
367
|
+
joined: 'Sep 2019',
|
|
368
|
+
team: 'Billing',
|
|
369
|
+
status: 'Away',
|
|
370
|
+
statusVariant: 'soft-amber',
|
|
371
|
+
},
|
|
372
|
+
];
|
|
373
|
+
|
|
374
|
+
const open = ref(false);
|
|
375
|
+
const selected = ref<Member | null>(null);
|
|
376
|
+
|
|
377
|
+
const detailRows = computed(() => {
|
|
378
|
+
const member = selected.value;
|
|
379
|
+
if (!member) return [];
|
|
380
|
+
return [
|
|
381
|
+
{ label: 'Email', value: member.email },
|
|
382
|
+
{ label: 'Team', value: member.team },
|
|
383
|
+
{ label: 'Joined', value: member.joined },
|
|
384
|
+
];
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
/** Open the inspector for the chosen member beside the list. */
|
|
388
|
+
const openDetail = (member: Member) => {
|
|
389
|
+
selected.value = member;
|
|
390
|
+
open.value = true;
|
|
391
|
+
};
|
|
239
392
|
</script>
|
|
240
393
|
|
|
241
|
-
|
|
242
|
-
|
|
394
|
+
<!-- Non-scoped: soft status palette for the inspector badge.
|
|
395
|
+
Canonical source: ai/guides/design-language.md § Using color. -->
|
|
396
|
+
<style>
|
|
397
|
+
.bb-badge.bb-badge--soft-green {
|
|
398
|
+
--accent: #16a34a;
|
|
399
|
+
}
|
|
400
|
+
.bb-badge.bb-badge--soft-amber {
|
|
401
|
+
--accent: #d97706;
|
|
402
|
+
}
|
|
403
|
+
.bb-badge.bb-badge--soft-green,
|
|
404
|
+
.bb-badge.bb-badge--soft-amber {
|
|
405
|
+
--bg: color-mix(in oklab, var(--accent) 15%, var(--bb-panel));
|
|
406
|
+
--color: color-mix(in oklab, var(--accent) 80%, var(--bb-text));
|
|
407
|
+
--border-width: 1px;
|
|
408
|
+
--border-color: color-mix(in oklab, var(--accent) 25%, var(--bb-panel));
|
|
409
|
+
--ring: color-mix(in oklab, var(--accent) 45%, transparent);
|
|
410
|
+
}
|
|
243
411
|
</style>
|
|
244
412
|
```
|
|
245
413
|
|
|
246
|
-
|
|
414
|
+
### A mobile nav sheet
|
|
247
415
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
416
|
+
The third classic: app navigation behind a menu button. A `left` drawer at
|
|
417
|
+
`size="xs"` reads as the familiar mobile nav; every destination is a real link
|
|
418
|
+
(`href` — hash-only here, in an app pass `to` for the router), never an
|
|
419
|
+
`@click` handler. Icon names live as typed literals on the nav data and flow
|
|
420
|
+
into `BbButton`'s `prepend:icon`; the active route gets the one non-ghost
|
|
421
|
+
treatment in the list, and account/sign-out sit in the footer.
|
|
251
422
|
|
|
252
|
-
|
|
253
|
-
sm: number;
|
|
254
|
-
md: number;
|
|
255
|
-
lg: number;
|
|
256
|
-
};
|
|
423
|
+
**Mobile navigation sheet**
|
|
257
424
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
425
|
+
```vue
|
|
426
|
+
<template>
|
|
427
|
+
<div
|
|
428
|
+
class="flex max-w-sm items-center justify-between gap-2 rounded-[var(--bb-radius)] border p-2"
|
|
429
|
+
>
|
|
430
|
+
<div class="min-w-0">
|
|
431
|
+
<p class="m-0 truncate text-sm font-medium">Acme Billing</p>
|
|
432
|
+
<p class="m-0 text-xs text-[color:var(--bb-text-muted)]">Workspace</p>
|
|
433
|
+
</div>
|
|
434
|
+
<BbButton
|
|
435
|
+
aria-label="Open navigation"
|
|
436
|
+
icon="lucide:menu"
|
|
437
|
+
variant="outline"
|
|
438
|
+
@click="open = true"
|
|
439
|
+
>
|
|
440
|
+
Menu
|
|
441
|
+
</BbButton>
|
|
442
|
+
</div>
|
|
443
|
+
<BbOffCanvas v-model="open" side="left" size="xs" title="Acme Billing">
|
|
444
|
+
<nav aria-label="Primary" class="grid gap-1">
|
|
445
|
+
<p
|
|
446
|
+
class="m-0 px-1 pb-0.5 text-xs font-medium text-[color:var(--bb-text-muted)]"
|
|
447
|
+
>
|
|
448
|
+
Navigate
|
|
449
|
+
</p>
|
|
450
|
+
<BbButton
|
|
451
|
+
v-for="item in navItems"
|
|
452
|
+
:key="item.href"
|
|
453
|
+
class="justify-start"
|
|
454
|
+
:href="item.href"
|
|
455
|
+
:prepend:icon="item.icon"
|
|
456
|
+
size="sm"
|
|
457
|
+
:variant="item.active ? 'secondary' : 'ghost'"
|
|
458
|
+
>
|
|
459
|
+
{{ item.label }}
|
|
460
|
+
</BbButton>
|
|
461
|
+
</nav>
|
|
462
|
+
<template #footer>
|
|
463
|
+
<div class="grid gap-1">
|
|
464
|
+
<BbButton
|
|
465
|
+
class="w-full justify-start"
|
|
466
|
+
href="#account"
|
|
467
|
+
prepend:icon="lucide:circle-user"
|
|
468
|
+
size="sm"
|
|
469
|
+
variant="ghost"
|
|
470
|
+
>
|
|
471
|
+
Alex Rivera
|
|
472
|
+
</BbButton>
|
|
473
|
+
<BbButton
|
|
474
|
+
class="w-full justify-start"
|
|
475
|
+
href="#sign-out"
|
|
476
|
+
prepend:icon="lucide:log-out"
|
|
477
|
+
size="sm"
|
|
478
|
+
variant="ghost"
|
|
479
|
+
>
|
|
480
|
+
Sign out
|
|
481
|
+
</BbButton>
|
|
482
|
+
</div>
|
|
483
|
+
</template>
|
|
484
|
+
</BbOffCanvas>
|
|
485
|
+
</template>
|
|
486
|
+
<script setup lang="ts">
|
|
487
|
+
import { ref } from 'vue';
|
|
488
|
+
import { BbButton, BbOffCanvas, type IconType } from 'bitboss-ui';
|
|
489
|
+
|
|
490
|
+
type NavItem = {
|
|
491
|
+
label: string;
|
|
492
|
+
href: string;
|
|
493
|
+
icon: IconType;
|
|
494
|
+
active?: boolean;
|
|
313
495
|
};
|
|
314
496
|
|
|
315
|
-
|
|
316
|
-
export type BbOffCanvasHeaderSlotProps = {
|
|
317
|
-
/** The `id` assigned to the title element, wired to `aria-labelledby`. */
|
|
318
|
-
titleId: string;
|
|
319
|
-
/** Programmatically closes the off-canvas panel. */
|
|
320
|
-
close: () => void;
|
|
321
|
-
/** The `title` prop value. */
|
|
322
|
-
title: BbOffCanvasProps['title'];
|
|
323
|
-
};
|
|
497
|
+
const open = ref(false);
|
|
324
498
|
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
499
|
+
const navItems: NavItem[] = [
|
|
500
|
+
{
|
|
501
|
+
label: 'Dashboard',
|
|
502
|
+
href: '#dashboard',
|
|
503
|
+
icon: 'lucide:house',
|
|
504
|
+
active: true,
|
|
505
|
+
},
|
|
506
|
+
{ label: 'Invoices', href: '#invoices', icon: 'lucide:receipt' },
|
|
507
|
+
{ label: 'Customers', href: '#customers', icon: 'lucide:users' },
|
|
508
|
+
{ label: 'Reports', href: '#reports', icon: 'lucide:chart-line' },
|
|
509
|
+
{ label: 'Settings', href: '#settings', icon: 'lucide:settings' },
|
|
510
|
+
];
|
|
511
|
+
</script>
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
### Size and `auto`
|
|
515
|
+
|
|
516
|
+
`size` runs the shared `xs`–`2xl` scale **plus `auto`**, and controls the
|
|
517
|
+
panel's extent along its travel axis — width for `left`/`right`, height for
|
|
518
|
+
`top`/`bottom`. The presets map to `config.offCanvasDefaultSizes` (320px for
|
|
519
|
+
`xs` up to 672px for `2xl`; the default `sm` is 384px, overridable in the plugin
|
|
520
|
+
options). A number is pixels, a string passes through as a CSS size, and `auto`
|
|
521
|
+
hugs the content (`fit-content`) — the basis of a content-sized sheet.
|
|
522
|
+
|
|
523
|
+
Give it a per-breakpoint map to switch responsively without media queries of
|
|
524
|
+
your own. Like `BbDialog`, a **bare size is resolved once**; only the map form
|
|
525
|
+
reacts to live resizes.
|
|
526
|
+
|
|
527
|
+
**Responsive extent**
|
|
528
|
+
|
|
529
|
+
```vue
|
|
530
|
+
<div>
|
|
531
|
+
<BbButton variant="outline" @click="state.open = true">Settings</BbButton>
|
|
532
|
+
<BbOffCanvas
|
|
533
|
+
v-model="state.open"
|
|
534
|
+
side="right"
|
|
535
|
+
:size="{ default: 'sm', lg: 'lg' }"
|
|
536
|
+
title="Settings"
|
|
537
|
+
>
|
|
538
|
+
<p class="m-0 text-sm">
|
|
539
|
+
<strong>sm</strong> (384px) on smaller viewports, <strong>lg</strong>
|
|
540
|
+
(512px) from the <code>lg</code> breakpoint up — resize to see it switch.
|
|
541
|
+
</p>
|
|
542
|
+
</BbOffCanvas>
|
|
543
|
+
</div>
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
### Draggable sheets
|
|
547
|
+
|
|
548
|
+
Set `draggable` to let the user flick the panel toward its edge to dismiss; a
|
|
549
|
+
grab handle appears on the inner edge as the affordance. A draggable,
|
|
550
|
+
`auto`-sized bottom panel is the canonical mobile sheet.
|
|
551
|
+
|
|
552
|
+
The gesture is physical, not just a tap target:
|
|
553
|
+
|
|
554
|
+
- Dragging past **a quarter of the panel's extent**, or a fast **flick toward
|
|
555
|
+
the edge**, dismisses it; a shorter drag springs back to fully open.
|
|
556
|
+
- On a vertical (top/bottom) sheet with a scrollable body, the drag **hands off
|
|
557
|
+
to native scrolling** first — you only start dragging the sheet once the body
|
|
558
|
+
is scrolled to its edge, so scrolling a long sheet never accidentally closes
|
|
559
|
+
it.
|
|
560
|
+
- `persistent` / `disabled` still win: a drag that would dismiss instead plays
|
|
561
|
+
the "deny" nudge and springs back.
|
|
562
|
+
|
|
563
|
+
**A draggable bottom sheet**
|
|
564
|
+
|
|
565
|
+
```vue
|
|
566
|
+
<div>
|
|
567
|
+
<BbButton variant="outline" @click="state.open = true">Share</BbButton>
|
|
568
|
+
<BbOffCanvas
|
|
569
|
+
v-model="state.open"
|
|
570
|
+
side="bottom"
|
|
571
|
+
draggable
|
|
572
|
+
size="auto"
|
|
573
|
+
title="Share invoice"
|
|
574
|
+
>
|
|
575
|
+
<div class="flex flex-wrap gap-2">
|
|
576
|
+
<BbButton append:icon="lucide:link" variant="outline">Copy link</BbButton>
|
|
577
|
+
<BbButton append:icon="lucide:mail" variant="outline">Email</BbButton>
|
|
578
|
+
<BbButton append:icon="lucide:download" variant="outline">Download PDF</BbButton>
|
|
579
|
+
</div>
|
|
580
|
+
</BbOffCanvas>
|
|
581
|
+
</div>
|
|
582
|
+
```
|
|
330
583
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
584
|
+
### Stacking drill-downs
|
|
585
|
+
|
|
586
|
+
Give panels the same `stack` name and they step back behind one another as you
|
|
587
|
+
drill in: opening a child shifts the parent inward by `stack-gap` (default
|
|
588
|
+
`60`px), leaving a peeking band of it visible so the hierarchy reads clearly.
|
|
589
|
+
Closing the child brings the parent forward. Panels with **different names (or
|
|
590
|
+
none) are independent** and simply layer by open order.
|
|
591
|
+
|
|
592
|
+
Only the top two open panels keep their dimmed/blurred backdrop; deeper ones go
|
|
593
|
+
transparent, so a three-deep stack does not stack three backdrops. Use a stack
|
|
594
|
+
for master → detail flows where the trail should stay visible; if the parent
|
|
595
|
+
should be fully replaced instead, that is what `BbDialog`'s `stack` (which swaps
|
|
596
|
+
rather than peeks) is for.
|
|
597
|
+
|
|
598
|
+
**Master → detail, stacked**
|
|
599
|
+
|
|
600
|
+
```vue
|
|
601
|
+
<template>
|
|
602
|
+
<div
|
|
603
|
+
class="flex max-w-sm items-center justify-between gap-3 rounded-[var(--bb-radius)] border p-3"
|
|
604
|
+
>
|
|
605
|
+
<div class="min-w-0">
|
|
606
|
+
<p class="m-0 text-sm font-medium">Team</p>
|
|
607
|
+
<p class="m-0 text-xs text-[color:var(--bb-text-muted)]">
|
|
608
|
+
Drill into a member
|
|
609
|
+
</p>
|
|
610
|
+
</div>
|
|
611
|
+
<BbButton variant="outline" @click="listOpen = true">
|
|
612
|
+
Team members
|
|
613
|
+
</BbButton>
|
|
614
|
+
</div>
|
|
615
|
+
<BbOffCanvas
|
|
616
|
+
v-model="listOpen"
|
|
617
|
+
side="right"
|
|
618
|
+
stack="team"
|
|
619
|
+
:stack-gap="72"
|
|
620
|
+
title="Team members"
|
|
621
|
+
>
|
|
622
|
+
<div class="grid gap-1">
|
|
623
|
+
<BbButton
|
|
624
|
+
v-for="member in members"
|
|
625
|
+
:key="member.name"
|
|
626
|
+
class="justify-start"
|
|
627
|
+
size="sm"
|
|
628
|
+
variant="ghost"
|
|
629
|
+
@click="openDetail(member)"
|
|
630
|
+
>
|
|
631
|
+
{{ member.name }}
|
|
632
|
+
</BbButton>
|
|
633
|
+
</div>
|
|
634
|
+
</BbOffCanvas>
|
|
635
|
+
<BbOffCanvas
|
|
636
|
+
v-model="detailOpen"
|
|
637
|
+
side="right"
|
|
638
|
+
stack="team"
|
|
639
|
+
:stack-gap="72"
|
|
640
|
+
:title="selected?.name"
|
|
641
|
+
>
|
|
642
|
+
<div v-if="selected" class="grid gap-2 text-sm">
|
|
643
|
+
<p class="m-0">
|
|
644
|
+
<span class="text-xs text-[color:var(--bb-text-muted)]">Role</span
|
|
645
|
+
><br />
|
|
646
|
+
{{ selected.role }}
|
|
647
|
+
</p>
|
|
648
|
+
<p class="m-0">
|
|
649
|
+
<span class="text-xs text-[color:var(--bb-text-muted)]">Joined</span
|
|
650
|
+
><br />
|
|
651
|
+
{{ selected.joined }}
|
|
652
|
+
</p>
|
|
653
|
+
</div>
|
|
654
|
+
</BbOffCanvas>
|
|
655
|
+
</template>
|
|
656
|
+
<script setup lang="ts">
|
|
657
|
+
import { ref } from 'vue';
|
|
658
|
+
import { BbButton, BbOffCanvas } from 'bitboss-ui';
|
|
659
|
+
|
|
660
|
+
type Member = { name: string; role: string; joined: string };
|
|
661
|
+
|
|
662
|
+
const members: Member[] = [
|
|
663
|
+
{ name: 'Ada Lovelace', role: 'Lead engineer', joined: 'Mar 2021' },
|
|
664
|
+
{ name: 'Grace Hopper', role: 'Principal engineer', joined: 'Sep 2019' },
|
|
665
|
+
];
|
|
666
|
+
|
|
667
|
+
const listOpen = ref(false);
|
|
668
|
+
const detailOpen = ref(false);
|
|
669
|
+
const selected = ref<Member | null>(null);
|
|
670
|
+
|
|
671
|
+
/** Push the detail drawer onto the shared stack. */
|
|
672
|
+
const openDetail = (member: Member) => {
|
|
673
|
+
selected.value = member;
|
|
674
|
+
detailOpen.value = true;
|
|
337
675
|
};
|
|
676
|
+
</script>
|
|
677
|
+
```
|
|
678
|
+
|
|
679
|
+
### Fullscreen
|
|
680
|
+
|
|
681
|
+
`fullscreen` expands the panel to fill the viewport (minus the standard page
|
|
682
|
+
padding — it is intentionally not edge-to-edge), which suits content-heavy
|
|
683
|
+
detail views. Pass `fullscreen="mobile"` to go fullscreen only below the mobile
|
|
684
|
+
breakpoint (`config.mobileMaxWidth`, 768px) while keeping the sized panel on
|
|
685
|
+
desktop — the usual choice for a `right` detail panel that should take the whole
|
|
686
|
+
screen on a phone.
|
|
687
|
+
|
|
688
|
+
**Fullscreen on mobile only**
|
|
338
689
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
690
|
+
```vue
|
|
691
|
+
<div>
|
|
692
|
+
<BbButton variant="outline" @click="state.open = true">Open article</BbButton>
|
|
693
|
+
<BbOffCanvas
|
|
694
|
+
v-model="state.open"
|
|
695
|
+
side="right"
|
|
696
|
+
fullscreen="mobile"
|
|
697
|
+
size="md"
|
|
698
|
+
title="Release notes"
|
|
699
|
+
>
|
|
700
|
+
<p class="m-0 text-sm">
|
|
701
|
+
Sized (md) on desktop, full-screen below the mobile breakpoint.
|
|
702
|
+
</p>
|
|
703
|
+
</BbOffCanvas>
|
|
704
|
+
</div>
|
|
705
|
+
```
|
|
706
|
+
|
|
707
|
+
### Lifecycle events and lazy content
|
|
708
|
+
|
|
709
|
+
Four events bracket the transitions — `show` fires as the model turns `true`,
|
|
710
|
+
`shown` after the native `showModal()` call and initial focus, `hide` as the
|
|
711
|
+
model turns `false`, and `hidden` after the close transition completes. Use
|
|
712
|
+
`@show` to (re)seed form state, `@hidden` to tear down expensive content.
|
|
713
|
+
|
|
714
|
+
Body content is **lazy**: nothing inside the panel renders until the first open.
|
|
715
|
+
Set `eager` to render it immediately (e.g. so a chart can pre-measure, or tests
|
|
716
|
+
can query content before opening). `transition-duration` (ms, default `250`)
|
|
717
|
+
times both the slide animation and when `hidden` fires — reopening during the
|
|
718
|
+
close transition keeps the panel open instead of snapping shut.
|
|
719
|
+
|
|
720
|
+
The classic `@show` job is reseeding a draft: reset the working copy from the
|
|
721
|
+
last saved value every time the panel opens, so Cancel is a real discard —
|
|
722
|
+
half-typed edits never survive a close.
|
|
723
|
+
|
|
724
|
+
**Reseed a draft with @show**
|
|
725
|
+
|
|
726
|
+
```vue
|
|
727
|
+
<template>
|
|
728
|
+
<div
|
|
729
|
+
class="flex max-w-sm items-center justify-between gap-3 rounded-[var(--bb-radius)] border p-3"
|
|
730
|
+
>
|
|
731
|
+
<div class="min-w-0">
|
|
732
|
+
<p class="m-0 text-sm font-medium">INV-2043</p>
|
|
733
|
+
<p class="m-0 truncate text-xs text-[color:var(--bb-text-muted)]">
|
|
734
|
+
{{ saved }}
|
|
735
|
+
</p>
|
|
736
|
+
</div>
|
|
737
|
+
<BbButton variant="outline" @click="open = true">Add note</BbButton>
|
|
738
|
+
</div>
|
|
739
|
+
<BbOffCanvas
|
|
740
|
+
v-model="open"
|
|
741
|
+
side="right"
|
|
742
|
+
title="Note · INV-2043"
|
|
743
|
+
@show="draft = saved"
|
|
744
|
+
>
|
|
745
|
+
<BbTextarea v-model="draft" auto-grow compact label="Internal note" />
|
|
746
|
+
<template #footer>
|
|
747
|
+
<div class="flex justify-end gap-2">
|
|
748
|
+
<BbButton variant="ghost" @click="open = false">Cancel</BbButton>
|
|
749
|
+
<BbButton variant="primary" @click="save">Save note</BbButton>
|
|
750
|
+
</div>
|
|
751
|
+
</template>
|
|
752
|
+
</BbOffCanvas>
|
|
753
|
+
</template>
|
|
754
|
+
<script setup lang="ts">
|
|
755
|
+
import { ref } from 'vue';
|
|
756
|
+
import { BbButton, BbOffCanvas, BbTextarea } from 'bitboss-ui';
|
|
757
|
+
|
|
758
|
+
const open = ref(false);
|
|
759
|
+
const saved = ref('Customer asked to postpone pickup.');
|
|
760
|
+
const draft = ref(saved.value);
|
|
761
|
+
|
|
762
|
+
/** Persist the draft and dismiss the panel. */
|
|
763
|
+
const save = () => {
|
|
764
|
+
saved.value = draft.value;
|
|
765
|
+
open.value = false;
|
|
364
766
|
};
|
|
767
|
+
</script>
|
|
365
768
|
```
|
|
366
769
|
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
```css
|
|
370
|
-
.bb-offcanvas {
|
|
371
|
-
--translate-x: 0%;
|
|
372
|
-
--translate-y: 0%;
|
|
373
|
-
--translate: 1;
|
|
374
|
-
--transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
375
|
-
position: fixed;
|
|
376
|
-
transition:
|
|
377
|
-
max-width var(--transition-duration) var(--transition-timing-function),
|
|
378
|
-
max-height var(--transition-duration) var(--transition-timing-function),
|
|
379
|
-
translate var(--transition-duration) var(--transition-timing-function),
|
|
380
|
-
display var(--transition-duration) var(--transition-duration)
|
|
381
|
-
var(--transition-timing-function);
|
|
382
|
-
background-color: var(--bb-panel);
|
|
383
|
-
color: var(--bb-text);
|
|
384
|
-
display: flex;
|
|
385
|
-
flex-direction: column;
|
|
386
|
-
z-index: var(--bb-overlay-z-index);
|
|
387
|
-
overscroll-behavior: contain;
|
|
388
|
-
overflow: hidden;
|
|
389
|
-
outline: none;
|
|
390
|
-
transition-behavior: allow-discrete;
|
|
391
|
-
margin: 0 0;
|
|
392
|
-
translate: calc(var(--translate-x) * var(--translate))
|
|
393
|
-
calc(var(--translate-y) * var(--translate));
|
|
394
|
-
|
|
395
|
-
&.bb-offcanvas--left,
|
|
396
|
-
&.bb-offcanvas--right {
|
|
397
|
-
max-height: 100%;
|
|
398
|
-
max-width: var(--max-size);
|
|
399
|
-
width: 100%;
|
|
400
|
-
top: 0px;
|
|
401
|
-
height: 100%;
|
|
402
|
-
}
|
|
403
|
-
&.bb-offcanvas--left {
|
|
404
|
-
--translate-x: -100%;
|
|
405
|
-
left: 0px;
|
|
406
|
-
}
|
|
407
|
-
&.bb-offcanvas--right {
|
|
408
|
-
--translate-x: 100%;
|
|
409
|
-
right: 0px;
|
|
410
|
-
left: auto;
|
|
411
|
-
}
|
|
412
|
-
&.bb-offcanvas--top,
|
|
413
|
-
&.bb-offcanvas--bottom {
|
|
414
|
-
max-height: min(var(--max-size), 100%);
|
|
415
|
-
height: var(--max-size);
|
|
416
|
-
max-width: 100%;
|
|
417
|
-
width: 100%;
|
|
418
|
-
left: 0;
|
|
419
|
-
right: 0;
|
|
420
|
-
}
|
|
421
|
-
&.bb-offcanvas--top {
|
|
422
|
-
--translate-y: -100%;
|
|
423
|
-
top: 0px;
|
|
424
|
-
bottom: auto;
|
|
425
|
-
}
|
|
426
|
-
&.bb-offcanvas--bottom {
|
|
427
|
-
--translate-y: 100%;
|
|
428
|
-
bottom: 0px;
|
|
429
|
-
top: auto;
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
&.bb-offcanvas--fullscreen {
|
|
433
|
-
border-radius: 0;
|
|
434
|
-
width: 100%;
|
|
435
|
-
height: 100%;
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
&.bb-offcanvas--compact {
|
|
439
|
-
.bb-offcanvas__header {
|
|
440
|
-
border-bottom: none;
|
|
441
|
-
}
|
|
442
|
-
.bb-offcanvas__body {
|
|
443
|
-
padding-top: 0;
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
&.bb-offcanvas--open {
|
|
448
|
-
--translate: 0;
|
|
449
|
-
|
|
450
|
-
&::backdrop {
|
|
451
|
-
opacity: 1;
|
|
452
|
-
|
|
453
|
-
@starting-style {
|
|
454
|
-
opacity: 0;
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
&.bb-offcanvas--deny-close {
|
|
459
|
-
--translate: 0.1;
|
|
460
|
-
}
|
|
461
|
-
|
|
462
|
-
&:has(.bb-offcanvas.bb-offcanvas--open),
|
|
463
|
-
&:has(.bb-base-dialog.bb-base-dialog--open) {
|
|
464
|
-
--translate: 1;
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
&::backdrop {
|
|
468
|
-
background-color: color-mix(
|
|
469
|
-
in srgb,
|
|
470
|
-
var(--bb-overlay-color) calc(var(--bb-overlay-opacity) * 100%),
|
|
471
|
-
transparent
|
|
472
|
-
);
|
|
473
|
-
opacity: 0;
|
|
474
|
-
transition: opacity var(--transition-duration) cubic-bezier(0.4, 0, 0.2, 1);
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
.bb-offcanvas__header {
|
|
478
|
-
align-items: center;
|
|
479
|
-
border-bottom: 1px solid var(--bb-border);
|
|
480
|
-
column-gap: 12px;
|
|
481
|
-
display: flex;
|
|
482
|
-
justify-content: space-between;
|
|
483
|
-
padding: var(--bb-dialog-py) var(--bb-dialog-px);
|
|
484
|
-
flex-shrink: 0;
|
|
485
|
-
|
|
486
|
-
.bb-offcanvas__title {
|
|
487
|
-
font-size: var(--bb-dialog-title-size);
|
|
488
|
-
font-weight: var(--bb-dialog-title-weight);
|
|
489
|
-
}
|
|
490
|
-
|
|
491
|
-
.bb-offcanvas__close {
|
|
492
|
-
transition: color var(--transition-duration);
|
|
493
|
-
&:hover {
|
|
494
|
-
color: var(--bb-primary);
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
button {
|
|
498
|
-
border-radius: var(--bb-radius);
|
|
499
|
-
box-shadow: 0px 0px 0px 0px var(--bb-ring);
|
|
500
|
-
display: flex;
|
|
501
|
-
margin-right: -8px;
|
|
502
|
-
outline: 2px solid transparent;
|
|
503
|
-
outline-offset: 2px;
|
|
504
|
-
outline-style: none;
|
|
505
|
-
padding: 8px;
|
|
506
|
-
transition: box-shadow 0.2s;
|
|
507
|
-
|
|
508
|
-
&:focus-visible {
|
|
509
|
-
box-shadow: 0px 0px 0px var(--bb-ring-size) var(--bb-ring);
|
|
510
|
-
}
|
|
511
|
-
}
|
|
770
|
+
### Controlling dismissal
|
|
512
771
|
|
|
513
|
-
|
|
514
|
-
display: inline-flex;
|
|
515
|
-
svg {
|
|
516
|
-
width: var(--bb-dialog-close);
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
|
|
522
|
-
.bb-offcanvas__body {
|
|
523
|
-
overflow: auto;
|
|
524
|
-
position: relative;
|
|
525
|
-
padding: var(--bb-dialog-py) calc(var(--bb-dialog-px) - var(--bb-ring-size))
|
|
526
|
-
calc(var(--bb-dialog-py) - var(--bb-ring-size));
|
|
527
|
-
flex: 1 1 auto;
|
|
528
|
-
|
|
529
|
-
.bb-offcanvas__body-content {
|
|
530
|
-
margin: 0 min(var(--bb-ring-size), var(--bb-dialog-px));
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
|
|
534
|
-
.bb-offcanvas__footer {
|
|
535
|
-
padding: var(--bb-dialog-py) var(--bb-dialog-px);
|
|
536
|
-
pointer-events: auto;
|
|
537
|
-
|
|
538
|
-
&:empty {
|
|
539
|
-
display: none;
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
}
|
|
772
|
+
Every dismissal path is governed by two props:
|
|
543
773
|
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
774
|
+
- `persistent` — backdrop click, `Escape`, and a drag-to-dismiss no longer
|
|
775
|
+
close; the panel plays a short "deny" nudge instead. Your own buttons (and the
|
|
776
|
+
model) still work. Use it when the user must make an explicit choice.
|
|
777
|
+
- `disabled` — same guard, different intent: the surface is busy (a save in
|
|
778
|
+
flight). Combine with disabling your footer actions.
|
|
779
|
+
|
|
780
|
+
Two more knobs shape the surface:
|
|
781
|
+
|
|
782
|
+
- `hide-close` removes the header close button. (The close button is shown by
|
|
783
|
+
default.)
|
|
784
|
+
- `focus-target` — a CSS selector resolved inside the panel — moves initial
|
|
785
|
+
focus to a specific element; otherwise the first tabbable element receives it.
|
|
786
|
+
|
|
787
|
+
Constraint: the header **close (×) button bypasses `persistent`** (it is the
|
|
788
|
+
documented escape hatch) but **respects `disabled`** — a busy panel cannot be
|
|
789
|
+
dismissed mid-work. When a panel must be resolved from the footer, pair
|
|
790
|
+
`persistent` with `hide-close` and keep a visible Cancel so users are never
|
|
791
|
+
trapped. Backdrop clicks are also drag-protected: a text selection that starts
|
|
792
|
+
inside the panel and releases over the backdrop does not close it — only a
|
|
793
|
+
genuine click that starts and ends on the backdrop (≤4px travel) does.
|
|
794
|
+
|
|
795
|
+
**Persistent — resolve from the footer**
|
|
796
|
+
|
|
797
|
+
```vue
|
|
798
|
+
<template>
|
|
799
|
+
<div
|
|
800
|
+
class="flex max-w-sm items-center justify-between gap-3 rounded-[var(--bb-radius)] border p-3"
|
|
801
|
+
>
|
|
802
|
+
<div class="min-w-0">
|
|
803
|
+
<p class="m-0 text-sm font-medium">PR #1842</p>
|
|
804
|
+
<p class="m-0 text-xs text-[color:var(--bb-text-muted)]">
|
|
805
|
+
Needs a reviewer before merge
|
|
806
|
+
</p>
|
|
807
|
+
</div>
|
|
808
|
+
<BbButton variant="outline" @click="open = true">Assign reviewer</BbButton>
|
|
809
|
+
</div>
|
|
810
|
+
<BbOffCanvas
|
|
811
|
+
v-model="open"
|
|
812
|
+
focus-target="input"
|
|
813
|
+
hide-close
|
|
814
|
+
persistent
|
|
815
|
+
side="right"
|
|
816
|
+
title="Assign reviewer"
|
|
817
|
+
>
|
|
818
|
+
<div class="grid gap-3">
|
|
819
|
+
<BbTextInput
|
|
820
|
+
v-model="reviewer"
|
|
821
|
+
compact
|
|
822
|
+
label="Reviewer"
|
|
823
|
+
placeholder="Name or email"
|
|
824
|
+
/>
|
|
825
|
+
<p class="m-0 text-xs text-[color:var(--bb-text-muted)]">
|
|
826
|
+
Backdrop and Escape stay locked — resolve from the footer.
|
|
827
|
+
</p>
|
|
828
|
+
</div>
|
|
829
|
+
<template #footer>
|
|
830
|
+
<div class="flex justify-end gap-2">
|
|
831
|
+
<BbButton variant="ghost" @click="open = false">Cancel</BbButton>
|
|
832
|
+
<BbButton variant="primary" @click="open = false">Assign</BbButton>
|
|
833
|
+
</div>
|
|
834
|
+
</template>
|
|
835
|
+
</BbOffCanvas>
|
|
836
|
+
</template>
|
|
837
|
+
<script setup lang="ts">
|
|
838
|
+
import { ref } from 'vue';
|
|
839
|
+
import { BbButton, BbOffCanvas, BbTextInput } from 'bitboss-ui';
|
|
840
|
+
|
|
841
|
+
const open = ref(false);
|
|
842
|
+
const reviewer = ref('');
|
|
843
|
+
</script>
|
|
548
844
|
```
|
|
845
|
+
|
|
846
|
+
### Top layer: what's above, what's inert
|
|
847
|
+
|
|
848
|
+
The panel is a native `<dialog>` opened with `showModal()` — the same mechanics
|
|
849
|
+
`BbDialog` relies on, and worth designing around:
|
|
850
|
+
|
|
851
|
+
- It renders in the browser **top layer**, above every `z-index`, sticky header,
|
|
852
|
+
or transformed ancestor. There is nothing to z-index-manage.
|
|
853
|
+
- The element stays where you declared it in the DOM (no teleport), so scoped
|
|
854
|
+
styles and provide/inject work normally; in tests, query the panel via
|
|
855
|
+
`document.body` (e.g. `.bb-offcanvas--open`) after `attachTo: document.body`.
|
|
856
|
+
- Everything outside the panel is **inert** while it is open: no hover, click,
|
|
857
|
+
or tab reaches the page behind.
|
|
858
|
+
- Later top-layer surfaces paint above earlier ones: a `BbSelect`, `BbPopover`,
|
|
859
|
+
`BbTooltip`, `BbConfirm`, or nested drawer opened from inside works with no
|
|
860
|
+
special wiring. `BbToast` regions re-home into the open panel so toasts fired
|
|
861
|
+
from a drawer stay clickable.
|
|
862
|
+
|
|
863
|
+
### Works well with
|
|
864
|
+
|
|
865
|
+
- `BbDialog` — the same content as a blocking modal when the task is focused
|
|
866
|
+
rather than supplementary; the shared API keeps the swap cheap.
|
|
867
|
+
- `BbConfirm` + `useConfirm` — a destructive action inside a drawer should raise
|
|
868
|
+
a confirm on top, not a hand-built panel.
|
|
869
|
+
- `BbToast` + `useToast` — fire the success toast right before closing; it stays
|
|
870
|
+
interactive above the panel.
|
|
871
|
+
- `BbButton` `href` / `to` — a footer action that navigates should carry the
|
|
872
|
+
link, never an `@click` + `router.push`.
|
|
873
|
+
|
|
874
|
+
### Gotchas & anti-patterns
|
|
875
|
+
|
|
876
|
+
- **Don't rely on the close (x) button respecting `persistent`** — it doesn't
|
|
877
|
+
(though it does respect `disabled`); hide it (`hide-close`) when the panel
|
|
878
|
+
must be resolved explicitly, and keep a visible Cancel.
|
|
879
|
+
- **Don't reach for `BbOffCanvas` for a focused, blocking task** — that is
|
|
880
|
+
`BbDialog`; use a drawer for content that sits beside the page.
|
|
881
|
+
- **Don't confuse `size` with a width** — it is the panel's extent along its
|
|
882
|
+
axis (height for top/bottom drawers).
|
|
883
|
+
- **Don't query panel content before it has opened** unless you set `eager` —
|
|
884
|
+
the body renders lazily.
|
|
885
|
+
- **Don't toggle `v-model` from `@hide`/`@hidden`** to "cancel" a close — use
|
|
886
|
+
`persistent`; the close paths already guard correctly.
|
|
887
|
+
- **Don't stack unrelated drawers** expecting them to peek — the peeking band
|
|
888
|
+
only appears for panels sharing a `stack` name and side.
|
|
889
|
+
|
|
890
|
+
### Accessibility
|
|
891
|
+
|
|
892
|
+
- Prefer passing `title`: it names the panel via `aria-labelledby`. Without a
|
|
893
|
+
header you own the accessible name — label a heading in the body and wire it
|
|
894
|
+
through the `header` slot's `titleId`.
|
|
895
|
+
- The panel is a true modal (`showModal()`): focus is contained within it, the
|
|
896
|
+
page behind is inert, and focus returns to the trigger when it closes.
|
|
897
|
+
`focus-target` only chooses where focus **starts**.
|
|
898
|
+
- The header close button carries a localized `aria-label` out of the box
|
|
899
|
+
(`config.locale`).
|
|
900
|
+
- Draggable dismissal is a convenience, not the only way out — the close button,
|
|
901
|
+
backdrop, and `Escape` all remain, so keyboard and assistive-tech users are
|
|
902
|
+
never stranded.
|
|
903
|
+
- Don't lean on `persistent` to trap users. Keep a visible way out (a Cancel or
|
|
904
|
+
Close button) even when backdrop/`Escape`/drag dismissal is disabled.
|
|
905
|
+
|
|
906
|
+
## v-model
|
|
907
|
+
|
|
908
|
+
- `v-model` — type: `boolean \| undefined`
|
|
909
|
+
|
|
910
|
+
## Props
|
|
911
|
+
|
|
912
|
+
| Prop | Type | Default | Required | Description |
|
|
913
|
+
| --- | --- | --- | --- | --- |
|
|
914
|
+
| `disabled` | `boolean \| undefined` | | | Disable EVERY user-initiated dismissal: backdrop click, Escape, drag-to-dismiss AND the header close (×) button (denied attempts play the deny nudge). Use it while an operation is in flight (e.g. a save) so the drawer cannot be dismissed mi… |
|
|
915
|
+
| `draggable` | `boolean \| undefined` | `false` | | Enable drag-to-dismiss. The panel can be dragged from anywhere toward its edge to close, and a grab handle is shown on the inner edge as the affordance. When `false`, the panel is static (dismiss via the close button, backdrop, or Escape on… |
|
|
916
|
+
| `eager` | `boolean \| undefined` | | | Render offcanvas content immediately instead of waiting for the first open. |
|
|
917
|
+
| `focusTarget` | `string \| undefined` | | | CSS selector of the element to focus after opening. Defaults to the first tabbable element. |
|
|
918
|
+
| `fullscreen` | `boolean \| "mobile" \| undefined` | | | Display the offcanvas fullscreen. Use `'mobile'` to restrict fullscreen to small devices. |
|
|
919
|
+
| `hideClose` | `boolean \| undefined` | | | Hides the default close (×) button in the header (e.g. for a `persistent` drawer you don't want dismissible — the × otherwise still closes a persistent drawer). |
|
|
920
|
+
| `modelValue` | `boolean \| undefined` | `false` | | Used by v-model to open / close the panel. A panel with no `v-model` starts closed. |
|
|
921
|
+
| `persistent` | `boolean \| undefined` | | | Prevent closing via outside clicks, Escape key or drag-to-dismiss. The header close (×) button STILL closes a persistent drawer — that is the documented escape hatch; combine with `hideClose` to remove it, or use `disabled` to block every d… |
|
|
922
|
+
| `side` | `"left" \| "right" \| "top" \| "bottom" \| undefined` | `"left"` | | Which viewport edge the offcanvas docks to (and slides in from). |
|
|
923
|
+
| `size` | `Responsive<OffCanvasSize> \| undefined` | `"sm"` | | Controls the maximum size of the offcanvas panel. Accepts named presets from `'xs'` to `'2xl'`, `'auto'`, a custom CSS size string, or a numeric pixel value — or a per-breakpoint map (e.g. `{ default: 'sm', lg: 'lg' }`) to switch responsive… |
|
|
924
|
+
| `stack` | `string \| undefined` | | | Name of the stack this drawer belongs to. Drawers sharing the same `stack` value step back behind one another as later ones open; drawers in different stacks never affect each other. When omitted, the drawer stacks with nothing. |
|
|
925
|
+
| `stackGap` | `number \| undefined` | `60` | | Pixels each stacked parent drawer shifts inward when a child opens on top, leaving a peeking band of the parent visible. |
|
|
926
|
+
| `title` | `string \| undefined` | | | Title text announced to assistive technologies. If omitted, no header is rendered and accessibility must be handled manually. |
|
|
927
|
+
| `transitionDuration` | `number \| undefined` | `transitions.medium` | | Controls the duration of the open and close animations. |
|
|
928
|
+
|
|
929
|
+
## Events
|
|
930
|
+
|
|
931
|
+
- `hidden` — `(event: "hidden"): void`
|
|
932
|
+
- `hide` — `(event: "hide"): void`
|
|
933
|
+
- `show` — `(event: "show"): void`
|
|
934
|
+
- `shown` — `(event: "shown"): void`
|
|
935
|
+
- `update:modelValue` — `(event: "update:modelValue", value: boolean): void`
|
|
936
|
+
|
|
937
|
+
## Slots
|
|
938
|
+
|
|
939
|
+
- `default` — scope: `{ close: () => void; }` — Primary body content of the off-canvas panel, rendered in the scrollable body area.
|
|
940
|
+
- `footer` — scope: `object` — Content rendered in the panel footer, below the body area. Typically used for action buttons.
|
|
941
|
+
- `header` — scope: `BbOffCanvasHeaderSlotProps` — Replaces the entire off-canvas header section (title + close button). Maintains accessibility wiring via the provided props.
|
|
942
|
+
- `title` — scope: `BbOffCanvasTitleSlotProps` — Replaces the default title text inside the header. Remains linked to the panel through `aria-labelledby`.
|
|
943
|
+
|
|
944
|
+
## See Also
|
|
945
|
+
|
|
946
|
+
- [BbDialog](./BbDialog.md) — Presents modal dialogs for focused user interactions.
|
|
947
|
+
- [BbPopover](./BbPopover.md) — Anchors floating content to reference elements.
|