bitboss-ui 2.1.134 → 3.0.0-alpha.1
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 +244 -21
- package/bin/bitboss-ui-mcp.mjs +557 -0
- package/bin/bitboss-ui.mjs +626 -0
- package/dist/ai/BbAccordion.md +522 -113
- package/dist/ai/BbAlert.md +377 -197
- package/dist/ai/BbAsterisk.md +46 -0
- package/dist/ai/BbAvatar.md +454 -178
- package/dist/ai/BbBadge.md +695 -225
- package/dist/ai/BbBadgeButton.md +54 -0
- package/dist/ai/BbBaseButton.md +489 -0
- package/dist/ai/BbBaseCheckbox.md +49 -0
- package/dist/ai/BbBaseCheckboxGroup.md +64 -0
- package/dist/ai/BbBaseCheckboxIcon.md +174 -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 +63 -0
- package/dist/ai/BbBaseRadioIcon.md +187 -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 +184 -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 +542 -503
- package/dist/ai/BbButton.md +767 -636
- package/dist/ai/BbCheckbox.md +572 -254
- package/dist/ai/BbCheckboxGroup.md +561 -361
- package/dist/ai/BbCollapsible.md +419 -103
- package/dist/ai/BbColorInput.md +529 -323
- package/dist/ai/BbColorPalette.md +565 -330
- package/dist/ai/BbConfirm.md +612 -136
- package/dist/ai/BbConfirmPortal.md +28 -0
- package/dist/ai/BbDatePicker.md +244 -0
- package/dist/ai/BbDatePickerInput.md +706 -388
- package/dist/ai/BbDialog.md +770 -99
- package/dist/ai/BbDropdown.md +1054 -763
- package/dist/ai/BbDropdownButton.md +511 -615
- package/dist/ai/BbDropdownGroup.md +34 -0
- package/dist/ai/BbDropzone.md +1148 -436
- package/dist/ai/BbForm.md +239 -0
- package/dist/ai/BbIcon.md +379 -212
- package/dist/ai/BbIndicator.md +283 -0
- package/dist/ai/BbNumberInput.md +713 -355
- package/dist/ai/BbOffCanvas.md +875 -498
- package/dist/ai/BbPagination.md +483 -535
- package/dist/ai/BbPopover.md +583 -546
- package/dist/ai/BbProgress.md +456 -69
- package/dist/ai/BbRadio.md +343 -229
- package/dist/ai/BbRadioGroup.md +426 -353
- package/dist/ai/BbRating.md +361 -226
- package/dist/ai/BbSelect.md +1380 -536
- package/dist/ai/BbSelectPopover.md +1240 -1579
- package/dist/ai/BbSlider.md +478 -257
- package/dist/ai/BbSmoothHeight.md +472 -139
- package/dist/ai/BbSpinner.md +718 -131
- package/dist/ai/BbSwitch.md +549 -119
- package/dist/ai/BbSwitchGroup.md +503 -214
- package/dist/ai/BbTable.md +1956 -2358
- package/dist/ai/BbTabs.md +1113 -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 +393 -292
- package/dist/ai/BbTextInput.md +852 -333
- package/dist/ai/BbTextarea.md +836 -255
- package/dist/ai/BbTimePicker.md +231 -0
- package/dist/ai/BbTimePickerInput.md +196 -0
- package/dist/ai/BbToast.md +624 -196
- package/dist/ai/BbToastPortal.md +28 -0
- package/dist/ai/BbTooltip.md +443 -346
- package/dist/ai/BbTree.md +984 -235
- 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 +15883 -0
- package/dist/ai/composables/useBbConfig.md +80 -0
- package/dist/ai/composables/useBbFormContext.md +110 -0
- package/dist/ai/composables/useBbTableContext.md +164 -0
- package/dist/ai/composables/useBbTabsContext.md +118 -0
- package/dist/ai/composables/useBroadcastChannelInstance.md +97 -0
- package/dist/ai/composables/useConfirm.md +306 -0
- package/dist/ai/composables/useCountdown.md +84 -0
- package/dist/ai/composables/useId.md +60 -0
- package/dist/ai/composables/useMobile.md +85 -0
- package/dist/ai/composables/useToast.md +230 -0
- package/dist/ai/guides/agent-contract.md +108 -0
- package/dist/ai/guides/ai-router.md +111 -0
- package/dist/ai/guides/app-layout.md +295 -0
- package/dist/ai/guides/coherence-playbook.md +136 -0
- package/dist/ai/guides/component-picker.md +195 -0
- package/dist/ai/guides/design-language.md +461 -0
- package/dist/ai/guides/design-tokens.md +424 -0
- package/dist/ai/guides/fetch-items-playbook.md +161 -0
- package/dist/ai/guides/floating-bottom-panel.md +191 -0
- package/dist/ai/guides/icons-policy.md +257 -0
- package/dist/ai/guides/inertia-helpers.md +1394 -0
- package/dist/ai/guides/inline-edit-playbook.md +258 -0
- package/dist/ai/guides/installation-and-plugin-setup.md +377 -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-off-canvas.md +25 -0
- package/dist/ai/guides/migration/components/bb-offcanvas.md +54 -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 +58 -0
- package/dist/ai/guides/migration/components/bb-select.md +68 -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 +314 -0
- package/dist/ai/guides/validated-forms.md +177 -0
- package/dist/ai/index.md +156 -32
- package/dist/ai/recipes/inertia/approvals-inbox.md +1598 -0
- package/dist/ai/recipes/inertia/inline-edit-workspace.md +1733 -0
- package/dist/ai/recipes/inertia/onboarding.md +1765 -0
- package/dist/ai/recipes/inertia/ownership-atlas.md +1281 -0
- package/dist/ai/recipes/inertia/record-form.md +1442 -0
- package/dist/ai/recipes/inertia/records-workspace.md +1328 -0
- package/dist/ai/recipes/inertia/upload-center.md +1926 -0
- package/dist/ai/recipes/inertia/wizard-form.md +1477 -0
- package/dist/ai/recipes/nuxt/approvals-inbox.md +1561 -0
- package/dist/ai/recipes/nuxt/inline-edit-workspace.md +1690 -0
- package/dist/ai/recipes/nuxt/onboarding.md +1698 -0
- package/dist/ai/recipes/nuxt/record-form.md +1456 -0
- package/dist/ai/recipes/nuxt/records-workspace.md +1314 -0
- package/dist/ai/recipes/nuxt/upload-center.md +1847 -0
- package/dist/ai/recipes/nuxt/wizard-form.md +1486 -0
- package/dist/ai/recipes/vue/approvals-inbox.md +1479 -0
- package/dist/ai/recipes/vue/inline-edit-workspace.md +1581 -0
- package/dist/ai/recipes/vue/onboarding.md +1653 -0
- package/dist/ai/recipes/vue/record-form.md +1540 -0
- package/dist/ai/recipes/vue/records-workspace.md +1230 -0
- package/dist/ai/recipes/vue/upload-center.md +1806 -0
- package/dist/ai/recipes/vue/wizard-form.md +1418 -0
- package/dist/ai/source/BbAccordion.md +122 -0
- package/dist/ai/source/BbAlert.md +396 -0
- package/dist/ai/source/BbAsterisk.md +32 -0
- package/dist/ai/source/BbAvatar.md +256 -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 +459 -0
- package/dist/ai/source/BbBaseCheckboxGroup.md +554 -0
- package/dist/ai/source/BbBaseCheckboxIcon.md +201 -0
- package/dist/ai/source/BbBaseColorInput.md +413 -0
- package/dist/ai/source/BbBaseColorPalette.md +934 -0
- package/dist/ai/source/BbBaseDatePicker.md +1001 -0
- package/dist/ai/source/BbBaseDatePickerInput.md +1781 -0
- package/dist/ai/source/BbBaseInputContainer.md +1148 -0
- package/dist/ai/source/BbBaseNumberInput.md +615 -0
- package/dist/ai/source/BbBaseRadio.md +377 -0
- package/dist/ai/source/BbBaseRadioGroup.md +499 -0
- package/dist/ai/source/BbBaseRadioIcon.md +153 -0
- package/dist/ai/source/BbBaseRating.md +573 -0
- package/dist/ai/source/BbBaseSelect.md +895 -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 +688 -0
- package/dist/ai/source/BbBaseTextInput.md +511 -0
- package/dist/ai/source/BbBaseTextarea.md +480 -0
- package/dist/ai/source/BbBaseTimePickerInput.md +1013 -0
- package/dist/ai/source/BbBreadcrumbs.md +811 -0
- package/dist/ai/source/BbButton.md +990 -0
- package/dist/ai/source/BbCheckbox.md +319 -0
- package/dist/ai/source/BbCheckboxGroup.md +412 -0
- package/dist/ai/source/BbCollapsible.md +133 -0
- package/dist/ai/source/BbColorInput.md +315 -0
- package/dist/ai/source/BbColorPalette.md +361 -0
- package/dist/ai/source/BbConfirm.md +173 -0
- package/dist/ai/source/BbConfirmPortal.md +74 -0
- package/dist/ai/source/BbDatePicker.md +725 -0
- package/dist/ai/source/BbDatePickerInput.md +518 -0
- package/dist/ai/source/BbDialog.md +812 -0
- package/dist/ai/source/BbDropdown.md +2369 -0
- package/dist/ai/source/BbDropdownButton.md +313 -0
- package/dist/ai/source/BbDropdownGroup.md +1249 -0
- package/dist/ai/source/BbDropzone.md +749 -0
- package/dist/ai/source/BbForm.md +100 -0
- package/dist/ai/source/BbIcon.md +212 -0
- package/dist/ai/source/BbIndicator.md +298 -0
- package/dist/ai/source/BbNumberInput.md +365 -0
- package/dist/ai/source/BbOffCanvas.md +1260 -0
- package/dist/ai/source/BbPagination.md +829 -0
- package/dist/ai/source/BbPopover.md +853 -0
- package/dist/ai/source/BbProgress.md +140 -0
- package/dist/ai/source/BbRadio.md +294 -0
- package/dist/ai/source/BbRadioGroup.md +401 -0
- package/dist/ai/source/BbRating.md +362 -0
- package/dist/ai/source/BbSelect.md +681 -0
- package/dist/ai/source/BbSelectPopover.md +2209 -0
- package/dist/ai/source/BbSlider.md +371 -0
- package/dist/ai/source/BbSmoothHeight.md +261 -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 +3348 -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 +383 -0
- package/dist/ai/source/BbTextInput.md +345 -0
- package/dist/ai/source/BbTextarea.md +330 -0
- package/dist/ai/source/BbTimePicker.md +591 -0
- package/dist/ai/source/BbTimePickerInput.md +367 -0
- package/dist/ai/source/BbToast.md +524 -0
- package/dist/ai/source/BbToastPortal.md +482 -0
- package/dist/ai/source/BbTooltip.md +508 -0
- package/dist/ai/source/BbTree.md +319 -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 +606 -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 +12 -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 +18 -0
- package/dist/button-variants.d.ts +15 -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 +10 -7
- 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 +51 -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 +4 -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 +28 -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 +222 -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 +207 -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 +713 -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 +309 -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 +184 -0
- package/dist/components/BbBaseInputContainer/types.d.ts +185 -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 +211 -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 +172 -0
- package/dist/components/BbBaseRadioGroup/types.d.ts +215 -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 +294 -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 +517 -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 +33 -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 +177 -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 +24 -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 +44 -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 +10 -9
- 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 +37 -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 +125 -0
- package/dist/components/BbColorPalette/types.d.ts +66 -53
- package/dist/components/BbConfirm/BbConfirm.vue.js +6 -0
- package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +130 -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 +155 -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 +127 -16
- package/dist/components/BbDialog/BbDialog.vue.d.ts +8 -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 +18 -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 +560 -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 +27 -0
- package/dist/components/BbDropdown/BbDropdownList.vue.js +6 -0
- package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +464 -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 +457 -45
- 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 +45 -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 +284 -0
- package/dist/components/BbDropzone/types.d.ts +55 -7
- 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 +31 -4
- package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +10 -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 +3 -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 +10 -15
- package/dist/components/BbPopover/BbPopover.vue.js +6 -0
- package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +310 -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 +84 -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 +23 -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 +184 -0
- package/dist/components/BbRadioGroup/types.d.ts +41 -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 +37 -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 +105 -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 +637 -0
- package/dist/components/BbSelectPopover/types.d.ts +189 -102
- 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 +37 -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 +13 -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 +53 -31
- package/dist/components/BbTable/BbTable.vue.js +6 -0
- package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +889 -0
- package/dist/components/BbTable/types.d.ts +176 -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 +48 -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 +24 -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 +26 -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 +129 -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 +165 -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 +35 -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 +4 -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 +61 -11
- package/dist/components/BbTree/BbTree.vue.d.ts +26 -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 +93 -42
- 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 +3 -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 +61 -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.js +5 -0
- package/dist/components/Transitions/ScaleFade.vue_vue_type_script_setup_true_lang.js +47 -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 +219 -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/useCoherence.js +16 -0
- package/dist/composables/useConfirm.d.ts +257 -67
- package/dist/composables/useConfirm.js +122 -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 +103 -0
- package/dist/composables/useSegmentedFields.js +152 -0
- package/dist/composables/useTableWidthContext.d.ts +5 -0
- package/dist/composables/useTableWidthContext.js +42 -0
- package/dist/composables/useToast.d.ts +17 -73
- package/dist/composables/useToast.js +49 -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 +10 -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/dropdown-item-variants.d.ts +10 -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 +94 -79
- package/dist/index.js +76 -82
- package/dist/indicator-variants.d.ts +13 -0
- package/dist/llms-full.txt +77073 -0
- package/dist/llms-medium.txt +1334 -0
- package/dist/llms.txt +103 -0
- package/dist/locale-blueprint.json +141 -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 +13 -0
- package/dist/tooltip-variants.d.ts +10 -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 +66 -279
- 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 +76 -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 +40 -0
- package/dist/validated/BbDatePickerInput.vue.js +5 -0
- package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +87 -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 +75 -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 +100 -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 +76 -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 +36 -0
- package/dist/validated/BbTimePickerInput.vue.js +5 -0
- package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +78 -0
- package/dist/validated/index.d.ts +29 -0
- package/dist/validated/useValidatedField.d.ts +52 -0
- package/dist/validated/useValidatedField.js +51 -0
- package/dist/validated.js +21 -0
- package/dist/vite-plugin.d.ts +217 -0
- package/dist/vite.js +530 -0
- package/llms.txt +105 -0
- package/package.json +161 -59
- 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.mjs +285 -0
- package/scripts/lib/eslint-plugin.node.test.mjs +161 -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 +421 -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/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/{index352.js → directives/createPopoverDirective.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
|
@@ -0,0 +1,1113 @@
|
|
|
1
|
+
# BbTabs
|
|
2
|
+
|
|
3
|
+
## Agent Contract
|
|
4
|
+
|
|
5
|
+
- Safety level: **Consumer API**
|
|
6
|
+
- Group: **Navigation**
|
|
7
|
+
- Description: Switches between tabbed content views (shadcn-like strip; BbTabRoot enables split layouts).
|
|
8
|
+
- Usage rule: Prefer this component for consumer-facing implementations.
|
|
9
|
+
- Implementation source (only when the contract below is not enough): [source/BbTabs.md](./source/BbTabs.md)
|
|
10
|
+
|
|
11
|
+
## Usage & Guidelines
|
|
12
|
+
|
|
13
|
+
### When to use
|
|
14
|
+
|
|
15
|
+
Reach for `BbTabs` to divide _one_ screen into peer sections the user flips
|
|
16
|
+
between without leaving the page — a profile's Overview / Activity / Settings, a
|
|
17
|
+
record's detail / history / comments. Every tab is a sibling view of the same
|
|
18
|
+
subject.
|
|
19
|
+
|
|
20
|
+
Do not use tabs for steps in a flow (that is a wizard), for hierarchy (that is
|
|
21
|
+
`BbBreadcrumbs`), or for genuinely separate destinations that deserve their own
|
|
22
|
+
URL and page. `BbTabs` switches peer sections of one subject; `BbBreadcrumbs`
|
|
23
|
+
answers "where am I and how do I get back up"; `BbPagination` steps through a
|
|
24
|
+
paged result set. Keep the strip short and the labels to a word or two; a strip
|
|
25
|
+
that overflows scrolls, but a dozen tabs usually means the page should be split.
|
|
26
|
+
|
|
27
|
+
The library ships the tabs family in two shapes with one shared API and one
|
|
28
|
+
shared context:
|
|
29
|
+
|
|
30
|
+
- **`BbTabs`** — batteries-included: the trigger strip immediately followed by
|
|
31
|
+
its panes. Reach for it by default.
|
|
32
|
+
- **`BbTabsRoot` + `BbTabsList` + `BbTabsPanes`** — the same state, split so you
|
|
33
|
+
can place arbitrary markup between the strip and the panes. Reach for it only
|
|
34
|
+
when the layout demands it.
|
|
35
|
+
|
|
36
|
+
### Tabs with a pane per key
|
|
37
|
+
|
|
38
|
+
Pass `items` (`{ key, label }`), bind the active key with `v-model`, and provide
|
|
39
|
+
one slot named for each item `key` — that is the pane. With no `v-model` the
|
|
40
|
+
first enabled tab is selected for you (a `modelValue` of `null` behaves the same
|
|
41
|
+
way). `BbTabs` is the batteries-included form: the trigger strip and its panes
|
|
42
|
+
in one component.
|
|
43
|
+
|
|
44
|
+
**A tab strip and its panes**
|
|
45
|
+
|
|
46
|
+
```vue
|
|
47
|
+
<template>
|
|
48
|
+
<div
|
|
49
|
+
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
50
|
+
>
|
|
51
|
+
<div class="mb-3 flex flex-col gap-0.5">
|
|
52
|
+
<p class="text-sm font-medium">Acme Checkout</p>
|
|
53
|
+
<p class="text-xs text-gray-500">Project · last deploy 14m ago</p>
|
|
54
|
+
</div>
|
|
55
|
+
<BbTabs v-model="active" compact :items="tabs">
|
|
56
|
+
<template #overview>
|
|
57
|
+
<div class="grid gap-1.5 pt-3 text-sm">
|
|
58
|
+
<p class="font-medium">Health: stable</p>
|
|
59
|
+
<p class="text-xs text-gray-500">
|
|
60
|
+
Error rate 0.12% · p95 180ms · 3 open incidents
|
|
61
|
+
</p>
|
|
62
|
+
</div>
|
|
63
|
+
</template>
|
|
64
|
+
<template #activity>
|
|
65
|
+
<ul class="divide-y divide-[color:var(--bb-border)] pt-3">
|
|
66
|
+
<li
|
|
67
|
+
v-for="event in activity"
|
|
68
|
+
:key="event.id"
|
|
69
|
+
class="flex flex-col gap-0.5 py-2"
|
|
70
|
+
>
|
|
71
|
+
<p class="text-sm">{{ event.text }}</p>
|
|
72
|
+
<p class="text-xs text-gray-500">{{ event.when }}</p>
|
|
73
|
+
</li>
|
|
74
|
+
</ul>
|
|
75
|
+
</template>
|
|
76
|
+
<template #members>
|
|
77
|
+
<ul class="divide-y divide-[color:var(--bb-border)] pt-3">
|
|
78
|
+
<li
|
|
79
|
+
v-for="member in members"
|
|
80
|
+
:key="member.email"
|
|
81
|
+
class="flex items-center justify-between gap-2 py-2 text-sm"
|
|
82
|
+
>
|
|
83
|
+
<span class="truncate">{{ member.name }}</span>
|
|
84
|
+
<span class="shrink-0 text-xs text-gray-500">{{
|
|
85
|
+
member.role
|
|
86
|
+
}}</span>
|
|
87
|
+
</li>
|
|
88
|
+
</ul>
|
|
89
|
+
</template>
|
|
90
|
+
</BbTabs>
|
|
91
|
+
</div>
|
|
92
|
+
</template>
|
|
93
|
+
<script setup lang="ts">
|
|
94
|
+
import { ref } from 'vue';
|
|
95
|
+
import { BbTabs } from 'bitboss-ui';
|
|
96
|
+
import type { BbTabsItem } from 'bitboss-ui';
|
|
97
|
+
|
|
98
|
+
// `v-model` binds the active tab to a plain key ref. Seed it with a starting
|
|
99
|
+
// key; drop the binding entirely and BbTabs selects the first enabled tab.
|
|
100
|
+
type Section = 'overview' | 'activity' | 'members';
|
|
101
|
+
|
|
102
|
+
const tabs: Array<BbTabsItem<Section>> = [
|
|
103
|
+
{ key: 'overview', label: 'Overview' },
|
|
104
|
+
{ key: 'activity', label: 'Activity' },
|
|
105
|
+
{ key: 'members', label: 'Members' },
|
|
106
|
+
];
|
|
107
|
+
|
|
108
|
+
const active = ref<Section>('overview');
|
|
109
|
+
|
|
110
|
+
const activity = [
|
|
111
|
+
{ id: '1', text: 'Sam Chen merged billing retries', when: '12m ago' },
|
|
112
|
+
{ id: '2', text: 'Alex Rivera rotated the Stripe key', when: '1h ago' },
|
|
113
|
+
{ id: '3', text: 'Deploy v2.14.0 succeeded', when: 'Yesterday' },
|
|
114
|
+
];
|
|
115
|
+
|
|
116
|
+
const members = [
|
|
117
|
+
{ name: 'Alex Rivera', email: 'alex@acme.co', role: 'Owner' },
|
|
118
|
+
{ name: 'Sam Chen', email: 'sam@acme.co', role: 'Editor' },
|
|
119
|
+
{ name: 'Jordan Lee', email: 'jordan@acme.co', role: 'Viewer' },
|
|
120
|
+
];
|
|
121
|
+
</script>
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
`v-model` is the whole event surface: the component emits `update:modelValue`
|
|
125
|
+
with the new key whenever the selection changes — from a click, a keyboard move,
|
|
126
|
+
URL navigation, or the companion composable — and it emits once on mount when a
|
|
127
|
+
URL query or the first-enabled fallback resolves a key the parent didn't set, so
|
|
128
|
+
your binding starts aligned. You rarely listen to the event directly; bind
|
|
129
|
+
`v-model` and read it. When `items` is generated, drive the panes with a
|
|
130
|
+
dynamic-name slot instead of writing one block per key:
|
|
131
|
+
|
|
132
|
+
**Dynamic pane slots from generated items**
|
|
133
|
+
|
|
134
|
+
```vue
|
|
135
|
+
<div
|
|
136
|
+
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
137
|
+
>
|
|
138
|
+
<BbTabs
|
|
139
|
+
compact
|
|
140
|
+
:items="[
|
|
141
|
+
{ key: 'draft', label: 'Draft' },
|
|
142
|
+
{ key: 'in-review', label: 'In review' },
|
|
143
|
+
{ key: 'published', label: 'Published' },
|
|
144
|
+
]"
|
|
145
|
+
>
|
|
146
|
+
<template
|
|
147
|
+
v-for="stage in ['draft', 'in-review', 'published']"
|
|
148
|
+
:key="stage"
|
|
149
|
+
#[stage]
|
|
150
|
+
>
|
|
151
|
+
<p class="pt-3 text-sm capitalize text-gray-600">{{ stage }} documents.</p>
|
|
152
|
+
</template>
|
|
153
|
+
</BbTabs>
|
|
154
|
+
</div>
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Rich labels and badges
|
|
158
|
+
|
|
159
|
+
Replace a tab's plain text with the `label:{key}` slot (one specific tab) or the
|
|
160
|
+
`label` slot (the fallback for every tab). Both receive the tab's state — `text`
|
|
161
|
+
(the item's `label`), `value` (its `key`), `selected`, `disabled`, plus the
|
|
162
|
+
group's `current` / `currentIndex` / `isFirst` / `isLast` and a `goTo` callback —
|
|
163
|
+
so a label can carry a count pill, an icon, or a status dot. Keep the whole
|
|
164
|
+
trigger the interactive target; put only presentation in the slot (do not nest a
|
|
165
|
+
button or link inside a label — the trigger is already the control).
|
|
166
|
+
|
|
167
|
+
**Unread count on the Inbox tab**
|
|
168
|
+
|
|
169
|
+
```vue
|
|
170
|
+
<template>
|
|
171
|
+
<div
|
|
172
|
+
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
173
|
+
>
|
|
174
|
+
<BbTabs v-model="active" compact :items="tabs">
|
|
175
|
+
<template #label:inbox="{ text }">
|
|
176
|
+
<span class="inline-flex items-center gap-1.5">
|
|
177
|
+
{{ text }}
|
|
178
|
+
<BbBadge size="sm" variant="soft-blue">{{ unread }}</BbBadge>
|
|
179
|
+
</span>
|
|
180
|
+
</template>
|
|
181
|
+
<template #inbox>
|
|
182
|
+
<ul class="divide-y divide-[color:var(--bb-border)] pt-3">
|
|
183
|
+
<li
|
|
184
|
+
v-for="thread in inbox"
|
|
185
|
+
:key="thread.id"
|
|
186
|
+
class="flex flex-col gap-0.5 py-2"
|
|
187
|
+
>
|
|
188
|
+
<p class="text-sm font-medium">{{ thread.subject }}</p>
|
|
189
|
+
<p class="text-xs text-gray-500">
|
|
190
|
+
{{ thread.from }} · {{ thread.when }}
|
|
191
|
+
</p>
|
|
192
|
+
</li>
|
|
193
|
+
</ul>
|
|
194
|
+
</template>
|
|
195
|
+
<template #sent>
|
|
196
|
+
<p class="pt-3 text-sm text-gray-500">12 messages sent this week.</p>
|
|
197
|
+
</template>
|
|
198
|
+
<template #spam>
|
|
199
|
+
<p class="pt-3 text-sm text-gray-500">
|
|
200
|
+
3 filtered messages · last scan 2h ago.
|
|
201
|
+
</p>
|
|
202
|
+
</template>
|
|
203
|
+
</BbTabs>
|
|
204
|
+
</div>
|
|
205
|
+
</template>
|
|
206
|
+
<script setup lang="ts">
|
|
207
|
+
import { ref } from 'vue';
|
|
208
|
+
import { BbBadge, BbTabs } from 'bitboss-ui';
|
|
209
|
+
import type { BbTabsItem } from 'bitboss-ui';
|
|
210
|
+
|
|
211
|
+
// Count pills ride in `label:{key}` — presentation only; the trigger stays the
|
|
212
|
+
// control. Soft badge palette from design-language.md § Using color.
|
|
213
|
+
type Folder = 'inbox' | 'sent' | 'spam';
|
|
214
|
+
|
|
215
|
+
const tabs: Array<BbTabsItem<Folder>> = [
|
|
216
|
+
{ key: 'inbox', label: 'Inbox' },
|
|
217
|
+
{ key: 'sent', label: 'Sent' },
|
|
218
|
+
{ key: 'spam', label: 'Spam' },
|
|
219
|
+
];
|
|
220
|
+
|
|
221
|
+
const active = ref<Folder>('inbox');
|
|
222
|
+
const unread = 12;
|
|
223
|
+
const inbox = [
|
|
224
|
+
{
|
|
225
|
+
id: '1',
|
|
226
|
+
subject: 'Invoice INV-1042 overdue',
|
|
227
|
+
from: 'billing@acme.co',
|
|
228
|
+
when: '10:14',
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
id: '2',
|
|
232
|
+
subject: 'Seat upgrade confirmed',
|
|
233
|
+
from: 'hello@bitboss.io',
|
|
234
|
+
when: 'Yesterday',
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
id: '3',
|
|
238
|
+
subject: 'Weekly product digest',
|
|
239
|
+
from: 'product@northwind.io',
|
|
240
|
+
when: 'Mon',
|
|
241
|
+
},
|
|
242
|
+
];
|
|
243
|
+
</script>
|
|
244
|
+
|
|
245
|
+
<!-- Non-scoped on purpose: styles the child badge's soft variant (scoped CSS
|
|
246
|
+
can't reach it without :deep). Canonical palette:
|
|
247
|
+
ai/guides/design-language.md § Using color. -->
|
|
248
|
+
<style>
|
|
249
|
+
.bb-badge.bb-badge--soft-blue {
|
|
250
|
+
--accent: #2563eb;
|
|
251
|
+
--bg: color-mix(in oklab, var(--accent) 15%, var(--bb-panel));
|
|
252
|
+
--color: color-mix(in oklab, var(--accent) 80%, var(--bb-text));
|
|
253
|
+
--border-width: 1px;
|
|
254
|
+
--border-color: color-mix(in oklab, var(--accent) 25%, var(--bb-panel));
|
|
255
|
+
--ring: color-mix(in oklab, var(--accent) 45%, transparent);
|
|
256
|
+
}
|
|
257
|
+
</style>
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
Use `label:{key}` when only some tabs need decoration and `label` when every tab
|
|
261
|
+
follows one template (an icon + count for all). A badge that changes size after
|
|
262
|
+
mount — a count ticking up — is fine: the strip re-measures the sliding pill and
|
|
263
|
+
equal-width fit when label content resizes, so the layout keeps up on its own.
|
|
264
|
+
|
|
265
|
+
### Lazy by default, eager when state must persist
|
|
266
|
+
|
|
267
|
+
By default a pane's slot content mounts only when its tab first becomes active
|
|
268
|
+
and stays mounted thereafter — cheap panes, no wasted renders. Set `eager` to
|
|
269
|
+
render an inactive pane's content into the DOM anyway. Two reasons to reach for
|
|
270
|
+
it:
|
|
271
|
+
|
|
272
|
+
- **In-pane state that must survive switches** — a half-filled form, a scroll
|
|
273
|
+
position, a loaded chart. Lazy panes unmount on the first switch away only if
|
|
274
|
+
never activated; eager guarantees the node exists from the start, so nothing
|
|
275
|
+
is lost.
|
|
276
|
+
- **SEO / SSR** — content in inactive panes is in the server-rendered HTML.
|
|
277
|
+
|
|
278
|
+
`eager` works at two granularities: on the component (every pane eager) or on a
|
|
279
|
+
single `items` entry (`{ key, label, eager: true }`) when only one pane is
|
|
280
|
+
expensive to lose. The example keeps a draft message alive while the user checks
|
|
281
|
+
the Audience and Schedule tabs:
|
|
282
|
+
|
|
283
|
+
**Eager panes keep an in-pane draft alive**
|
|
284
|
+
|
|
285
|
+
```vue
|
|
286
|
+
<template>
|
|
287
|
+
<div
|
|
288
|
+
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
289
|
+
>
|
|
290
|
+
<div class="mb-3 flex flex-col gap-0.5">
|
|
291
|
+
<p class="text-sm font-medium">Product announcement</p>
|
|
292
|
+
<p class="text-xs text-gray-500">Draft · scheduled for Tue 09:00 local</p>
|
|
293
|
+
</div>
|
|
294
|
+
<BbTabs v-model="active" compact eager :items="tabs">
|
|
295
|
+
<template #message>
|
|
296
|
+
<div class="grid gap-3 pt-3">
|
|
297
|
+
<BbTextInput
|
|
298
|
+
v-model="draft.subject"
|
|
299
|
+
compact
|
|
300
|
+
label="Subject"
|
|
301
|
+
name="subject"
|
|
302
|
+
placeholder="Your weekly product update"
|
|
303
|
+
prepend:icon="lucide:megaphone"
|
|
304
|
+
/>
|
|
305
|
+
<BbTextInput
|
|
306
|
+
v-model="draft.preview"
|
|
307
|
+
compact
|
|
308
|
+
label="Preview text"
|
|
309
|
+
name="preview"
|
|
310
|
+
placeholder="One line shown in the inbox"
|
|
311
|
+
/>
|
|
312
|
+
</div>
|
|
313
|
+
</template>
|
|
314
|
+
<template #audience>
|
|
315
|
+
<p class="pt-3 text-sm text-gray-600 dark:text-gray-300">
|
|
316
|
+
Sending to
|
|
317
|
+
<span class="font-medium tabular-nums">{{
|
|
318
|
+
recipients.toLocaleString()
|
|
319
|
+
}}</span>
|
|
320
|
+
subscribers in the Product Announcements segment.
|
|
321
|
+
</p>
|
|
322
|
+
</template>
|
|
323
|
+
<template #schedule>
|
|
324
|
+
<p class="pt-3 text-sm text-gray-600 dark:text-gray-300">
|
|
325
|
+
Queued for Tuesday 09:00 in each recipient's local timezone.
|
|
326
|
+
</p>
|
|
327
|
+
</template>
|
|
328
|
+
</BbTabs>
|
|
329
|
+
</div>
|
|
330
|
+
</template>
|
|
331
|
+
<script setup lang="ts">
|
|
332
|
+
import { reactive, ref } from 'vue';
|
|
333
|
+
import { BbTabs, BbTextInput } from 'bitboss-ui';
|
|
334
|
+
import type { BbTabsItem } from 'bitboss-ui';
|
|
335
|
+
|
|
336
|
+
// `eager` renders every pane into the DOM up front. The Message form below is
|
|
337
|
+
// never unmounted when you switch to Audience or Schedule, so a half-typed
|
|
338
|
+
// draft survives the round trip — no manual state hoisting needed.
|
|
339
|
+
type Section = 'message' | 'audience' | 'schedule';
|
|
340
|
+
|
|
341
|
+
const tabs: Array<BbTabsItem<Section>> = [
|
|
342
|
+
{ key: 'message', label: 'Message' },
|
|
343
|
+
{ key: 'audience', label: 'Audience' },
|
|
344
|
+
{ key: 'schedule', label: 'Schedule' },
|
|
345
|
+
];
|
|
346
|
+
|
|
347
|
+
const active = ref<Section>('message');
|
|
348
|
+
const recipients = 8420;
|
|
349
|
+
const draft = reactive({
|
|
350
|
+
subject: 'Weekly product update',
|
|
351
|
+
preview: 'Billing retries shipped · seat limits raised',
|
|
352
|
+
});
|
|
353
|
+
</script>
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
### Pane transitions
|
|
357
|
+
|
|
358
|
+
Switching tabs animates by default: panes slide horizontally in the direction of
|
|
359
|
+
travel (left when moving to an earlier tab, right for a later one — derived from
|
|
360
|
+
the index delta) and the container smooth-heights between differing pane sizes.
|
|
361
|
+
Opt out per axis with `disable-animate-x` (no horizontal slide) and
|
|
362
|
+
`disable-animate-y` (no height animation). Disable the height animation when a
|
|
363
|
+
pane hosts its own transitions or virtualized content that fights the
|
|
364
|
+
measurement, and disable both for instant, motion-free switching. The classic
|
|
365
|
+
case for "disable both" is a Code / Preview toggle on a docs or comment
|
|
366
|
+
composer — flipping modes should feel like a switch, not a slide. Note the draft lives in
|
|
367
|
+
the component's script, not inside the pane, so the default lazy panes lose
|
|
368
|
+
nothing when you flip back:
|
|
369
|
+
|
|
370
|
+
**Instant Code / Preview toggle**
|
|
371
|
+
|
|
372
|
+
```vue
|
|
373
|
+
<template>
|
|
374
|
+
<div
|
|
375
|
+
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
376
|
+
>
|
|
377
|
+
<div class="mb-3 flex flex-col gap-0.5">
|
|
378
|
+
<p class="text-sm font-medium">Release notes</p>
|
|
379
|
+
<p class="text-xs text-gray-500">
|
|
380
|
+
Markdown draft · preview before publishing.
|
|
381
|
+
</p>
|
|
382
|
+
</div>
|
|
383
|
+
<!-- Mode switch, not a carousel: disable both animation axes. Draft lives
|
|
384
|
+
in script so lazy panes lose nothing when flipping back. -->
|
|
385
|
+
<BbTabs compact disable-animate-x disable-animate-y :items="tabs">
|
|
386
|
+
<template #code>
|
|
387
|
+
<div class="pt-3">
|
|
388
|
+
<BbTextarea
|
|
389
|
+
v-model="draft"
|
|
390
|
+
auto-grow
|
|
391
|
+
compact
|
|
392
|
+
hide-label
|
|
393
|
+
label="Markdown"
|
|
394
|
+
placeholder="## Heading"
|
|
395
|
+
:rows="5"
|
|
396
|
+
/>
|
|
397
|
+
</div>
|
|
398
|
+
</template>
|
|
399
|
+
<template #preview>
|
|
400
|
+
<div class="grid gap-1.5 whitespace-pre-line pt-3 text-sm">
|
|
401
|
+
<template v-if="draft.trim()">
|
|
402
|
+
<p class="font-medium">{{ previewTitle }}</p>
|
|
403
|
+
<p class="text-gray-600 dark:text-gray-300">{{ previewBody }}</p>
|
|
404
|
+
</template>
|
|
405
|
+
<p v-else class="text-gray-500">Nothing to preview.</p>
|
|
406
|
+
</div>
|
|
407
|
+
</template>
|
|
408
|
+
</BbTabs>
|
|
409
|
+
</div>
|
|
410
|
+
</template>
|
|
411
|
+
<script setup lang="ts">
|
|
412
|
+
import { computed, ref } from 'vue';
|
|
413
|
+
import { BbTabs, BbTextarea } from 'bitboss-ui';
|
|
414
|
+
import type { BbTabsItem } from 'bitboss-ui';
|
|
415
|
+
|
|
416
|
+
// Code / Preview is a mode toggle: disable both animation axes so flipping
|
|
417
|
+
// feels instant. The draft lives in the script, not in the pane.
|
|
418
|
+
type Mode = 'code' | 'preview';
|
|
419
|
+
|
|
420
|
+
const tabs: Array<BbTabsItem<Mode>> = [
|
|
421
|
+
{ key: 'code', label: 'Code' },
|
|
422
|
+
{ key: 'preview', label: 'Preview' },
|
|
423
|
+
];
|
|
424
|
+
|
|
425
|
+
const draft = ref(
|
|
426
|
+
'## Billing retries\n\nVerified on staging — invoice totals now match the ledger.'
|
|
427
|
+
);
|
|
428
|
+
|
|
429
|
+
const previewTitle = computed(() => {
|
|
430
|
+
const heading = draft.value.match(/^##\s+(.+)$/m);
|
|
431
|
+
return heading?.[1] ?? 'Untitled';
|
|
432
|
+
});
|
|
433
|
+
|
|
434
|
+
const previewBody = computed(() =>
|
|
435
|
+
draft.value.replace(/^##\s+.+$/m, '').trim()
|
|
436
|
+
);
|
|
437
|
+
</script>
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
### Sizing, orientation, and density
|
|
441
|
+
|
|
442
|
+
`block` stretches the strip to full width with grid-equal triggers — every
|
|
443
|
+
trigger as wide as the widest, so the row reads as an even segmented control;
|
|
444
|
+
when the triggers exceed the width they keep those equal widths and the strip
|
|
445
|
+
scrolls. `compact` drops the whole scale a notch (a 28px strip instead of 32px,
|
|
446
|
+
smaller text and padding). `direction="vertical"` stacks the triggers in a
|
|
447
|
+
column beside the panes, with the pill sliding on the Y axis.
|
|
448
|
+
|
|
449
|
+
Mark any unreachable tab `disabled` on its item — it stays visible, is skipped
|
|
450
|
+
by keyboard navigation and by `goTo`, and can never be the default selection.
|
|
451
|
+
Disabling the whole group is a component-level `disabled` prop: every trigger
|
|
452
|
+
goes disabled and keyboard navigation is inert (use it while a parent is
|
|
453
|
+
loading, not as a permanent state).
|
|
454
|
+
|
|
455
|
+
Settings peer sections are the classic `block` strip — full-width equal
|
|
456
|
+
triggers over compact form panes. Pair with `navigation` + `replace` so the
|
|
457
|
+
active section stays in the URL without flooding Back history:
|
|
458
|
+
|
|
459
|
+
**Workspace settings sections**
|
|
460
|
+
|
|
461
|
+
```vue
|
|
462
|
+
<template>
|
|
463
|
+
<div
|
|
464
|
+
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
465
|
+
>
|
|
466
|
+
<div class="mb-3 flex flex-col gap-0.5">
|
|
467
|
+
<p class="text-sm font-medium">Workspace settings</p>
|
|
468
|
+
<p class="text-xs text-gray-500">
|
|
469
|
+
Northwind Billing · changes save per section.
|
|
470
|
+
</p>
|
|
471
|
+
</div>
|
|
472
|
+
<!-- `navigation` + `replace`: deep-linkable section, Back still leaves the page. -->
|
|
473
|
+
<BbTabs
|
|
474
|
+
v-model="section"
|
|
475
|
+
block
|
|
476
|
+
:items="tabs"
|
|
477
|
+
navigation
|
|
478
|
+
query-key="section"
|
|
479
|
+
replace
|
|
480
|
+
>
|
|
481
|
+
<template #general>
|
|
482
|
+
<div class="grid gap-3 pt-3">
|
|
483
|
+
<BbTextInput
|
|
484
|
+
v-model="org.name"
|
|
485
|
+
compact
|
|
486
|
+
label="Workspace name"
|
|
487
|
+
name="workspace-name"
|
|
488
|
+
/>
|
|
489
|
+
<BbTextInput
|
|
490
|
+
v-model="org.slug"
|
|
491
|
+
compact
|
|
492
|
+
label="URL slug"
|
|
493
|
+
name="workspace-slug"
|
|
494
|
+
prepend:icon="lucide:link"
|
|
495
|
+
/>
|
|
496
|
+
<div class="flex justify-end">
|
|
497
|
+
<BbButton variant="primary" @click="onSaveGeneral">
|
|
498
|
+
Save general
|
|
499
|
+
</BbButton>
|
|
500
|
+
</div>
|
|
501
|
+
</div>
|
|
502
|
+
</template>
|
|
503
|
+
<template #members>
|
|
504
|
+
<ul class="divide-y divide-[color:var(--bb-border)] pt-3">
|
|
505
|
+
<li
|
|
506
|
+
v-for="member in members"
|
|
507
|
+
:key="member.email"
|
|
508
|
+
class="flex items-center justify-between gap-2 py-2 text-sm"
|
|
509
|
+
>
|
|
510
|
+
<span class="min-w-0 truncate">
|
|
511
|
+
<span class="font-medium">{{ member.name }}</span>
|
|
512
|
+
<span class="text-xs text-gray-500"> · {{ member.email }}</span>
|
|
513
|
+
</span>
|
|
514
|
+
<span class="shrink-0 text-xs text-gray-500">{{
|
|
515
|
+
member.role
|
|
516
|
+
}}</span>
|
|
517
|
+
</li>
|
|
518
|
+
</ul>
|
|
519
|
+
</template>
|
|
520
|
+
<template #billing>
|
|
521
|
+
<div class="grid gap-1.5 pt-3">
|
|
522
|
+
<p class="text-sm font-medium">Pro · €49 / month</p>
|
|
523
|
+
<p class="text-xs text-gray-500">
|
|
524
|
+
Next invoice Jul 28, 2026 · Visa ···· 4242
|
|
525
|
+
</p>
|
|
526
|
+
<div class="pt-1">
|
|
527
|
+
<BbButton prepend:icon="lucide:credit-card" variant="outline">
|
|
528
|
+
Manage billing
|
|
529
|
+
</BbButton>
|
|
530
|
+
</div>
|
|
531
|
+
</div>
|
|
532
|
+
</template>
|
|
533
|
+
</BbTabs>
|
|
534
|
+
</div>
|
|
535
|
+
</template>
|
|
536
|
+
<script setup lang="ts">
|
|
537
|
+
import { reactive, ref } from 'vue';
|
|
538
|
+
import { BbButton, BbTabs, BbTextInput } from 'bitboss-ui';
|
|
539
|
+
import type { BbTabsItem } from 'bitboss-ui';
|
|
540
|
+
|
|
541
|
+
// Settings peer sections: block strip, compact fields, URL-synced with replace
|
|
542
|
+
// so Back leaves settings instead of walking tab history.
|
|
543
|
+
type Section = 'general' | 'members' | 'billing';
|
|
544
|
+
|
|
545
|
+
const tabs: Array<BbTabsItem<Section>> = [
|
|
546
|
+
{ key: 'general', label: 'General' },
|
|
547
|
+
{ key: 'members', label: 'Members' },
|
|
548
|
+
{ key: 'billing', label: 'Billing' },
|
|
549
|
+
];
|
|
550
|
+
|
|
551
|
+
const section = ref<Section>('general');
|
|
552
|
+
const org = reactive({ name: 'Northwind Billing', slug: 'northwind' });
|
|
553
|
+
const members = [
|
|
554
|
+
{ name: 'Alex Rivera', email: 'alex@northwind.io', role: 'Owner' },
|
|
555
|
+
{ name: 'Sam Chen', email: 'sam@northwind.io', role: 'Admin' },
|
|
556
|
+
{ name: 'Jordan Lee', email: 'jordan@northwind.io', role: 'Editor' },
|
|
557
|
+
];
|
|
558
|
+
|
|
559
|
+
const onSaveGeneral = async () => {
|
|
560
|
+
await new Promise((resolve) => setTimeout(resolve, 400));
|
|
561
|
+
};
|
|
562
|
+
</script>
|
|
563
|
+
```
|
|
564
|
+
|
|
565
|
+
**Full-width strip with a disabled tab**
|
|
566
|
+
|
|
567
|
+
```vue
|
|
568
|
+
<div
|
|
569
|
+
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
570
|
+
>
|
|
571
|
+
<BbTabs
|
|
572
|
+
block
|
|
573
|
+
compact
|
|
574
|
+
:items="[
|
|
575
|
+
{ key: 'summary', label: 'Summary' },
|
|
576
|
+
{ key: 'integrations', label: 'Integrations' },
|
|
577
|
+
{ key: 'billing', label: 'Billing', disabled: true },
|
|
578
|
+
]"
|
|
579
|
+
>
|
|
580
|
+
<template #summary><p class="pt-3 text-sm text-gray-600">Environment status at a glance.</p></template>
|
|
581
|
+
<template #integrations><p class="pt-3 text-sm text-gray-600">Connected services.</p></template>
|
|
582
|
+
<template #billing><p class="pt-3 text-sm text-gray-600">Locked on this plan.</p></template>
|
|
583
|
+
</BbTabs>
|
|
584
|
+
</div>
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
**Vertical, compact strip**
|
|
588
|
+
|
|
589
|
+
```vue
|
|
590
|
+
<div
|
|
591
|
+
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
592
|
+
>
|
|
593
|
+
<BbTabs
|
|
594
|
+
compact
|
|
595
|
+
direction="vertical"
|
|
596
|
+
:items="[
|
|
597
|
+
{ key: 'general', label: 'General' },
|
|
598
|
+
{ key: 'security', label: 'Security' },
|
|
599
|
+
{ key: 'api', label: 'API keys' },
|
|
600
|
+
]"
|
|
601
|
+
>
|
|
602
|
+
<template #general><p class="px-3 text-sm text-gray-600">Workspace basics.</p></template>
|
|
603
|
+
<template #security><p class="px-3 text-sm text-gray-600">Sessions and 2FA.</p></template>
|
|
604
|
+
<template #api><p class="px-3 text-sm text-gray-600">Personal access tokens.</p></template>
|
|
605
|
+
</BbTabs>
|
|
606
|
+
</div>
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
A vertical strip reads a `--max-w` custom property (vertical only) to cap its
|
|
610
|
+
width — set `style="--max-w: 160px"` on the list and long labels ellipse instead
|
|
611
|
+
of widening the column. The strip never exceeds its container. Sizing otherwise
|
|
612
|
+
follows the design tokens (`--bb-control-h`, `--bb-radius`, `--bb-fs`); there is
|
|
613
|
+
no numeric size prop and no global tabs config to set — tokens and the `block` /
|
|
614
|
+
`compact` / `direction` props are the whole surface.
|
|
615
|
+
|
|
616
|
+
### Overflowing strips and scroll affordances
|
|
617
|
+
|
|
618
|
+
Both horizontal modes scroll when the triggers exceed the available width, and
|
|
619
|
+
the active trigger is always scrolled into view on selection — keyboard moves
|
|
620
|
+
never leave the focused tab off-screen. For a visible scroll control, wire the
|
|
621
|
+
`header:prepend` and `header:append` slots (rendered before / after the
|
|
622
|
+
scrollable list): each receives `canScrollLeft`, `canScrollRight`, `isScrolling`,
|
|
623
|
+
and a `scroll('left' | 'right')` callback that pages the strip by ~80% of its
|
|
624
|
+
width. Bind the arrows' `disabled` to the can-scroll flags so they dim at the
|
|
625
|
+
ends.
|
|
626
|
+
|
|
627
|
+
**Scroll arrows on an overflowing strip**
|
|
628
|
+
|
|
629
|
+
```vue
|
|
630
|
+
<template>
|
|
631
|
+
<div
|
|
632
|
+
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
633
|
+
>
|
|
634
|
+
<div class="mb-3 flex flex-col gap-0.5">
|
|
635
|
+
<p class="text-sm font-medium">Release timeline</p>
|
|
636
|
+
<p class="text-xs text-gray-500">
|
|
637
|
+
Monthly notes · scroll arrows when the strip overflows.
|
|
638
|
+
</p>
|
|
639
|
+
</div>
|
|
640
|
+
<BbTabs v-model="active" block compact :items="releases">
|
|
641
|
+
<template #header:prepend="{ canScrollLeft, scroll }">
|
|
642
|
+
<BbButton
|
|
643
|
+
aria-label="Scroll tabs left"
|
|
644
|
+
class="mr-1 shrink-0"
|
|
645
|
+
:disabled="!canScrollLeft"
|
|
646
|
+
icon="lucide:chevron-left"
|
|
647
|
+
size="sm"
|
|
648
|
+
variant="ghost"
|
|
649
|
+
@click="scroll('left')"
|
|
650
|
+
/>
|
|
651
|
+
</template>
|
|
652
|
+
<template #header:append="{ canScrollRight, scroll }">
|
|
653
|
+
<BbButton
|
|
654
|
+
aria-label="Scroll tabs right"
|
|
655
|
+
class="ml-1 shrink-0"
|
|
656
|
+
:disabled="!canScrollRight"
|
|
657
|
+
icon="lucide:chevron-right"
|
|
658
|
+
size="sm"
|
|
659
|
+
variant="ghost"
|
|
660
|
+
@click="scroll('right')"
|
|
661
|
+
/>
|
|
662
|
+
</template>
|
|
663
|
+
<template v-for="release in releases" :key="release.key" #[release.key]>
|
|
664
|
+
<p class="pt-3 text-sm text-gray-600 dark:text-gray-300">
|
|
665
|
+
{{ release.label }} shipped the design-token overhaul and the tabs
|
|
666
|
+
keyboard-navigation pass.
|
|
667
|
+
</p>
|
|
668
|
+
</template>
|
|
669
|
+
</BbTabs>
|
|
670
|
+
</div>
|
|
671
|
+
</template>
|
|
672
|
+
<script setup lang="ts">
|
|
673
|
+
import { ref } from 'vue';
|
|
674
|
+
import { BbButton, BbTabs } from 'bitboss-ui';
|
|
675
|
+
import type { BbTabsItem } from 'bitboss-ui';
|
|
676
|
+
|
|
677
|
+
// A block strip with more triggers than fit: the pill and scroll-into-view keep
|
|
678
|
+
// the active trigger visible, and the header:prepend / header:append slots host
|
|
679
|
+
// scroll arrows fed by canScrollLeft / canScrollRight / scroll from the list.
|
|
680
|
+
const months = [
|
|
681
|
+
'January',
|
|
682
|
+
'February',
|
|
683
|
+
'March',
|
|
684
|
+
'April',
|
|
685
|
+
'May',
|
|
686
|
+
'June',
|
|
687
|
+
'July',
|
|
688
|
+
'August',
|
|
689
|
+
'September',
|
|
690
|
+
];
|
|
691
|
+
const releases: BbTabsItem[] = months.map((label, index) => ({
|
|
692
|
+
key: `v${index + 1}`,
|
|
693
|
+
label: `${label} 2026`,
|
|
694
|
+
}));
|
|
695
|
+
|
|
696
|
+
const active = ref('v1');
|
|
697
|
+
</script>
|
|
698
|
+
```
|
|
699
|
+
|
|
700
|
+
These slots live on `BbTabsList`, so they work identically in the batteries-
|
|
701
|
+
included `BbTabs` and in the split `BbTabsRoot` layout below.
|
|
702
|
+
|
|
703
|
+
### Split the strip from the panes with `BbTabsRoot`
|
|
704
|
+
|
|
705
|
+
When you need arbitrary markup _between_ the triggers and the panes — a toolbar
|
|
706
|
+
next to the strip, a divider, a sidebar layout — reach for the renderless
|
|
707
|
+
`BbTabsRoot`. It owns all the state (selection, `v-model`, URL/Inertia
|
|
708
|
+
navigation, keyboard navigation) and publishes it through provide/inject, so
|
|
709
|
+
`BbTabsList` and `BbTabsPanes` can sit anywhere in its subtree — no props, they
|
|
710
|
+
discover the nearest root automatically — and still align. A `BbTabsList` or
|
|
711
|
+
`BbTabsPanes` rendered outside any root throws with a descriptive error.
|
|
712
|
+
|
|
713
|
+
Its default slot hands you `select`, `goTo`, `current`, `currentIndex`,
|
|
714
|
+
`isFirst`, and `isLast` — enough to build Prev/Next controls or a live section
|
|
715
|
+
label without a template ref. A nested `BbTabs`/`BbTabsRoot` always shadows the
|
|
716
|
+
outer one, so an inner tab group never leaks into (or reads from) the parent's
|
|
717
|
+
context; use nesting freely.
|
|
718
|
+
|
|
719
|
+
**List and panes separated by a toolbar**
|
|
720
|
+
|
|
721
|
+
```vue
|
|
722
|
+
<template>
|
|
723
|
+
<div
|
|
724
|
+
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
725
|
+
>
|
|
726
|
+
<div class="mb-3 flex flex-col gap-0.5">
|
|
727
|
+
<p class="text-sm font-medium">Acme Checkout</p>
|
|
728
|
+
<p class="text-xs text-gray-500">Workspace · Prev/Next via root slot</p>
|
|
729
|
+
</div>
|
|
730
|
+
<BbTabsRoot v-model="active" compact :items="tabs">
|
|
731
|
+
<template #default="{ goTo, isFirst, isLast }">
|
|
732
|
+
<div class="flex items-center justify-between gap-2">
|
|
733
|
+
<BbTabsList class="min-w-0 flex-1" />
|
|
734
|
+
<div class="flex shrink-0 gap-1">
|
|
735
|
+
<BbButton
|
|
736
|
+
:disabled="isFirst"
|
|
737
|
+
size="sm"
|
|
738
|
+
variant="outline"
|
|
739
|
+
@click="goTo('previous')"
|
|
740
|
+
>
|
|
741
|
+
Prev
|
|
742
|
+
</BbButton>
|
|
743
|
+
<BbButton
|
|
744
|
+
:disabled="isLast"
|
|
745
|
+
size="sm"
|
|
746
|
+
variant="outline"
|
|
747
|
+
@click="goTo('next')"
|
|
748
|
+
>
|
|
749
|
+
Next
|
|
750
|
+
</BbButton>
|
|
751
|
+
</div>
|
|
752
|
+
</div>
|
|
753
|
+
<hr class="my-3 border-[color:var(--bb-border)]" />
|
|
754
|
+
<BbTabsPanes>
|
|
755
|
+
<template #overview>
|
|
756
|
+
<p class="text-sm text-gray-600 dark:text-gray-300">
|
|
757
|
+
Health stable · owners Alex + Sam · objective: cut checkout
|
|
758
|
+
latency 20%.
|
|
759
|
+
</p>
|
|
760
|
+
</template>
|
|
761
|
+
<template #activity>
|
|
762
|
+
<p class="text-sm text-gray-600 dark:text-gray-300">
|
|
763
|
+
Shipped billing retries; fixed avatar upload timeout.
|
|
764
|
+
</p>
|
|
765
|
+
</template>
|
|
766
|
+
<template #members>
|
|
767
|
+
<p class="text-sm text-gray-600 dark:text-gray-300">
|
|
768
|
+
14 editors, 23 viewers, 3 billing admins.
|
|
769
|
+
</p>
|
|
770
|
+
</template>
|
|
771
|
+
</BbTabsPanes>
|
|
772
|
+
</template>
|
|
773
|
+
</BbTabsRoot>
|
|
774
|
+
</div>
|
|
775
|
+
</template>
|
|
776
|
+
<script setup lang="ts">
|
|
777
|
+
import { ref } from 'vue';
|
|
778
|
+
import { BbButton, BbTabsRoot, BbTabsList, BbTabsPanes } from 'bitboss-ui';
|
|
779
|
+
import type { BbTabsItem } from 'bitboss-ui';
|
|
780
|
+
|
|
781
|
+
// BbTabsRoot owns the state; the list and the panes are separated by a toolbar
|
|
782
|
+
// row and a divider, and the Prev/Next buttons drive it through the root slot.
|
|
783
|
+
type Section = 'overview' | 'activity' | 'members';
|
|
784
|
+
|
|
785
|
+
const tabs: Array<BbTabsItem<Section>> = [
|
|
786
|
+
{ key: 'overview', label: 'Overview' },
|
|
787
|
+
{ key: 'activity', label: 'Activity' },
|
|
788
|
+
{ key: 'members', label: 'Members' },
|
|
789
|
+
];
|
|
790
|
+
|
|
791
|
+
const active = ref<Section>('overview');
|
|
792
|
+
</script>
|
|
793
|
+
```
|
|
794
|
+
|
|
795
|
+
`BbTabsRoot` takes the exact same props as `BbTabs` (`BbTabsRootProps` is
|
|
796
|
+
`BbTabsProps`), so everything in this guide — `items`, `block`, `compact`,
|
|
797
|
+
`direction`, `eager`, `navigation`, the Inertia options — applies unchanged; you
|
|
798
|
+
are only relocating the list and the panes.
|
|
799
|
+
|
|
800
|
+
### Drive a tab group from anywhere with `useBbTabsContext`
|
|
801
|
+
|
|
802
|
+
Give a tab group an explicit `id` and read or steer it from any component on the
|
|
803
|
+
client with `useBbTabsContext(id)` — no template ref, no shared subtree, no
|
|
804
|
+
being inside the tabs' tree. Pass the same `id` you gave the component (auto-
|
|
805
|
+
generated ids are not addressable) and optionally the key union to type
|
|
806
|
+
`current` / `select`. The returned handle is safe to destructure:
|
|
807
|
+
|
|
808
|
+
- `current` — a **writable** ref: reading it gives the active key (`null` until
|
|
809
|
+
the tabs mount), and assigning a key selects it, exactly like `select(key)`.
|
|
810
|
+
Assigning `null` warns and is ignored — a tab is always selected.
|
|
811
|
+
- `select(key)` — select by key; unknown keys warn and leave the selection
|
|
812
|
+
untouched.
|
|
813
|
+
- `goTo('first' | 'previous' | 'next' | 'last')` — relative navigation, skipping
|
|
814
|
+
disabled tabs.
|
|
815
|
+
- `currentIndex` (`-1` until mount), `isFirst`, `isLast`, and `isReady` (whether
|
|
816
|
+
a tabs instance with this id is mounted yet).
|
|
817
|
+
|
|
818
|
+
The handle is callable before the tabs mount — it starts empty and auto-
|
|
819
|
+
populates when they render, emptying again on unmount; actions on an unmounted
|
|
820
|
+
id warn and no-op. Selection through the handle runs the tabs' full pipeline:
|
|
821
|
+
`v-model` is emitted and URL/Inertia navigation fires when the group has
|
|
822
|
+
`navigation`, identical to clicking the trigger. Here an alert banner outside
|
|
823
|
+
the tabs jumps straight to the Security section:
|
|
824
|
+
|
|
825
|
+
**Steer tabs from a banner outside their tree**
|
|
826
|
+
|
|
827
|
+
```vue
|
|
828
|
+
<template>
|
|
829
|
+
<div
|
|
830
|
+
class="max-w-md space-y-3 rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
831
|
+
>
|
|
832
|
+
<div class="grid gap-2">
|
|
833
|
+
<BbAlert
|
|
834
|
+
hide-close
|
|
835
|
+
icon="lucide:shield-alert"
|
|
836
|
+
text="Two-factor authentication is off for this account."
|
|
837
|
+
title="Security review needed"
|
|
838
|
+
variant="warning"
|
|
839
|
+
/>
|
|
840
|
+
<div class="flex justify-end">
|
|
841
|
+
<BbButton variant="outline" @click="select('security')">
|
|
842
|
+
Review security
|
|
843
|
+
</BbButton>
|
|
844
|
+
</div>
|
|
845
|
+
</div>
|
|
846
|
+
<!-- Same id as useBbTabsContext below; navigation+replace keeps the
|
|
847
|
+
section deep-linkable without flooding Back history. -->
|
|
848
|
+
<BbTabs
|
|
849
|
+
id="account-settings-tabs"
|
|
850
|
+
v-model="section"
|
|
851
|
+
compact
|
|
852
|
+
:items="tabs"
|
|
853
|
+
navigation
|
|
854
|
+
query-key="account"
|
|
855
|
+
replace
|
|
856
|
+
>
|
|
857
|
+
<template #profile>
|
|
858
|
+
<div class="grid gap-3 pt-3">
|
|
859
|
+
<BbTextInput
|
|
860
|
+
v-model="profile.name"
|
|
861
|
+
compact
|
|
862
|
+
label="Display name"
|
|
863
|
+
name="display-name"
|
|
864
|
+
/>
|
|
865
|
+
<BbTextInput
|
|
866
|
+
v-model="profile.email"
|
|
867
|
+
compact
|
|
868
|
+
label="Contact email"
|
|
869
|
+
name="contact-email"
|
|
870
|
+
type="email"
|
|
871
|
+
/>
|
|
872
|
+
</div>
|
|
873
|
+
</template>
|
|
874
|
+
<template #security>
|
|
875
|
+
<div class="grid gap-1.5 pt-3 text-sm">
|
|
876
|
+
<p class="font-medium">Two-factor authentication</p>
|
|
877
|
+
<p class="text-xs text-gray-500">
|
|
878
|
+
Off · last password change Mar 12, 2026 · 2 active sessions
|
|
879
|
+
</p>
|
|
880
|
+
<div class="pt-1">
|
|
881
|
+
<BbButton prepend:icon="lucide:shield" variant="primary">
|
|
882
|
+
Enable 2FA
|
|
883
|
+
</BbButton>
|
|
884
|
+
</div>
|
|
885
|
+
</div>
|
|
886
|
+
</template>
|
|
887
|
+
<template #notifications>
|
|
888
|
+
<p class="pt-3 text-sm text-gray-600 dark:text-gray-300">
|
|
889
|
+
Email digests and mention alerts for alex@northwind.io.
|
|
890
|
+
</p>
|
|
891
|
+
</template>
|
|
892
|
+
</BbTabs>
|
|
893
|
+
<p class="text-xs text-gray-500" data-test="active-section">
|
|
894
|
+
Active section: {{ current }}
|
|
895
|
+
</p>
|
|
896
|
+
</div>
|
|
897
|
+
</template>
|
|
898
|
+
<script setup lang="ts">
|
|
899
|
+
import { reactive, ref } from 'vue';
|
|
900
|
+
import {
|
|
901
|
+
BbAlert,
|
|
902
|
+
BbButton,
|
|
903
|
+
BbTabs,
|
|
904
|
+
BbTextInput,
|
|
905
|
+
useBbTabsContext,
|
|
906
|
+
} from 'bitboss-ui';
|
|
907
|
+
import type { BbTabsItem } from 'bitboss-ui';
|
|
908
|
+
|
|
909
|
+
type SectionKey = 'profile' | 'security' | 'notifications';
|
|
910
|
+
|
|
911
|
+
const tabs: Array<BbTabsItem<SectionKey>> = [
|
|
912
|
+
{ key: 'profile', label: 'Profile' },
|
|
913
|
+
{ key: 'security', label: 'Security' },
|
|
914
|
+
{ key: 'notifications', label: 'Notifications' },
|
|
915
|
+
];
|
|
916
|
+
|
|
917
|
+
const section = ref<SectionKey>('profile');
|
|
918
|
+
const profile = reactive({
|
|
919
|
+
name: 'Alex Rivera',
|
|
920
|
+
email: 'alex@northwind.io',
|
|
921
|
+
});
|
|
922
|
+
|
|
923
|
+
// The alert banner lives OUTSIDE the tabs subtree: it reaches the group purely
|
|
924
|
+
// by id. `current` is a readable/writable ref, `select` jumps straight to a key.
|
|
925
|
+
const { current, select } = useBbTabsContext<SectionKey>(
|
|
926
|
+
'account-settings-tabs'
|
|
927
|
+
);
|
|
928
|
+
</script>
|
|
929
|
+
```
|
|
930
|
+
|
|
931
|
+
Client-side only — during SSR the registry stays empty, so wire cross-component
|
|
932
|
+
behavior from hydration onward. Two mounted groups sharing an id is an error
|
|
933
|
+
(the handle resolves to the most recently mounted one). See the
|
|
934
|
+
[`useBbTabsContext`](./composables/useBbTabsContext.md) composable doc for the
|
|
935
|
+
full handle reference.
|
|
936
|
+
|
|
937
|
+
### URL and Inertia navigation
|
|
938
|
+
|
|
939
|
+
Set `navigation` to keep the active tab in the URL query (`query-key`, default
|
|
940
|
+
`tab`) so a tab is deep-linkable and survives reload. On load the query wins over
|
|
941
|
+
`modelValue`; thereafter switching writes the query and a matching query on
|
|
942
|
+
back/forward re-selects the tab.
|
|
943
|
+
|
|
944
|
+
**Pair `navigation` with `replace`.** Without it every tab click pushes a
|
|
945
|
+
history entry, so a user who browsed four tabs needs four Backs to leave the
|
|
946
|
+
page — the tab strip hijacks the browser's Back button. With `replace` the URL
|
|
947
|
+
still carries the active tab (bookmarkable, survives reload, shareable) but the
|
|
948
|
+
entry is overwritten in place, so one Back returns to wherever they came from.
|
|
949
|
+
Reach for the push default only when a tab is a destination of its own — a
|
|
950
|
+
`server` visit whose content the user should be able to go Back to.
|
|
951
|
+
|
|
952
|
+
```vue
|
|
953
|
+
<!-- /project?tab=activity — bookmarkable, and Back still leaves the page -->
|
|
954
|
+
<BbTabs v-model="tab" :items="items" navigation query-key="tab" replace />
|
|
955
|
+
```
|
|
956
|
+
|
|
957
|
+
Navigation is always offloaded to the component — never pair tabs with a manual
|
|
958
|
+
`router.push`/`window.location` on click. In an Inertia app, give tabs an `href`
|
|
959
|
+
and each trigger renders as an Inertia link. By default switching updates the URL
|
|
960
|
+
client-side (a `history.pushState`, no round-trip); set `server` (per item or on
|
|
961
|
+
the component) to make it a real Inertia visit via `router.visit`, and pass the
|
|
962
|
+
usual Inertia options — `only` for partial reloads, `preserveScroll`,
|
|
963
|
+
`preserveState`, `headers`, and the lifecycle hooks (`onBefore`, `onSuccess`,
|
|
964
|
+
`onError`, …) — on the component as defaults or per item as overrides. Item
|
|
965
|
+
values always win over component values. `server` without `navigation` is a
|
|
966
|
+
misconfiguration and logs an error. `replace` applies to both paths — it drops
|
|
967
|
+
the `pushState` to a `replaceState` on client-only switches, and makes the
|
|
968
|
+
Inertia visit a replace visit — so keep it on here too.
|
|
969
|
+
|
|
970
|
+
A `server` tab commits its selection only when the visit **succeeds**: the
|
|
971
|
+
pane, pill and `v-model` stay on the current tab until the server confirms. A
|
|
972
|
+
navigation guard that prevents the visit (a dirty-form route-leave confirm) or
|
|
973
|
+
a failed visit leaves the tabs exactly where they were — no optimistic switch
|
|
974
|
+
to roll back:
|
|
975
|
+
|
|
976
|
+
```vue
|
|
977
|
+
<BbTabs
|
|
978
|
+
:items="[
|
|
979
|
+
{ key: 'overview', label: 'Overview', href: '/project/overview' },
|
|
980
|
+
{
|
|
981
|
+
key: 'activity',
|
|
982
|
+
label: 'Activity',
|
|
983
|
+
href: '/project/activity',
|
|
984
|
+
server: true,
|
|
985
|
+
only: ['events'],
|
|
986
|
+
},
|
|
987
|
+
]"
|
|
988
|
+
navigation
|
|
989
|
+
replace
|
|
990
|
+
preserve-scroll
|
|
991
|
+
/>
|
|
992
|
+
```
|
|
993
|
+
|
|
994
|
+
Under Nuxt, `navigation` uses the same Vue Router path — the query is part of the
|
|
995
|
+
route, so it is SSR-safe and shareable:
|
|
996
|
+
|
|
997
|
+
```vue
|
|
998
|
+
<!-- Nuxt: query-synced tabs, resolved on the server for the first paint -->
|
|
999
|
+
<BbTabs :items="items" navigation replace query-key="section" />
|
|
1000
|
+
```
|
|
1001
|
+
|
|
1002
|
+
### Works well with
|
|
1003
|
+
|
|
1004
|
+
- **`BbBadge` / count pills in `label` slots** — status dots and unread counts
|
|
1005
|
+
ride in the `label:{key}` or `label` slot; the strip re-measures when they
|
|
1006
|
+
resize.
|
|
1007
|
+
- **`BbButton` for Prev/Next** — feed `goTo` from the `BbTabsRoot` default slot
|
|
1008
|
+
or from `useBbTabsContext`, binding `:disabled` to `isFirst`/`isLast`.
|
|
1009
|
+
- **`BbTable` per tab** — one tab per saved view or status filter, each pane a
|
|
1010
|
+
`BbTable`; combine with `eager` if a table's fetched rows should survive tab
|
|
1011
|
+
switches.
|
|
1012
|
+
- **`useBbTabsContext`** — the by-id handle for driving tabs from a page header,
|
|
1013
|
+
a keyboard-shortcut handler, or a banner far from the strip.
|
|
1014
|
+
|
|
1015
|
+
### Gotchas and anti-patterns
|
|
1016
|
+
|
|
1017
|
+
- **The sliding pill is measured from layout.** It reads the active trigger's
|
|
1018
|
+
`offsetLeft`/`offsetTop`, so render tabs in a visible, normally-positioned
|
|
1019
|
+
container. It settles itself on mount, resize, and font load, and paints a
|
|
1020
|
+
static pill until the first measurement lands — nothing to configure, and
|
|
1021
|
+
nothing to fight in demos.
|
|
1022
|
+
- **Vertical strips answer Up/Down _and_ Left/Right arrows.** Up/Down is the
|
|
1023
|
+
primary pair (matching the vertical `aria-orientation`, per the ARIA APG);
|
|
1024
|
+
Left/Right keeps working as a forgiving extra. Horizontal strips answer
|
|
1025
|
+
Left/Right only — Up/Down keeps scrolling the page.
|
|
1026
|
+
- **Do not rebuild navigation.** No `@click="router.push(...)"` to change a tab —
|
|
1027
|
+
use `navigation`/`query-key`/`href`. No manual `watch` to mirror the URL — the
|
|
1028
|
+
component owns it.
|
|
1029
|
+
- **`navigation` without `replace` floods the history stack.** Each tab click
|
|
1030
|
+
becomes its own entry, so Back walks the user through their tab clicks
|
|
1031
|
+
instead of leaving the page — the same trap as a router-driven filter bar.
|
|
1032
|
+
Add `replace` unless a tab is a real destination the user should be able to
|
|
1033
|
+
go Back to.
|
|
1034
|
+
- **Do not put interactive controls inside a `label` slot.** The trigger is
|
|
1035
|
+
already a button; a nested button/link is invalid and steals the click. Put
|
|
1036
|
+
actions in a pane or a toolbar (the `BbTabsRoot` layout), not in a label.
|
|
1037
|
+
- **Don't reach for `BbTabsRoot` by default.** If you only need a strip over its
|
|
1038
|
+
panes, `BbTabs` is less markup and identical behavior; split only for markup
|
|
1039
|
+
between them.
|
|
1040
|
+
- **Every tab disabled throws.** With no `modelValue` and no valid first tab the
|
|
1041
|
+
group has nothing to select — always leave at least one enabled tab.
|
|
1042
|
+
|
|
1043
|
+
### Accessibility
|
|
1044
|
+
|
|
1045
|
+
- **Roles and relationships are wired for you.** The strip is a `tablist`, each
|
|
1046
|
+
trigger a `tab` with `aria-selected` and `aria-controls` pointing at its
|
|
1047
|
+
`tabpanel`, and each pane a `tabpanel` labelled by its trigger
|
|
1048
|
+
(`aria-labelledby`). Do not add these yourself.
|
|
1049
|
+
- **Roving tabindex + keyboard.** Exactly one trigger is in the tab order
|
|
1050
|
+
(`tabindex="0"`); the rest are `-1`. **Left/Right** arrows move (and select)
|
|
1051
|
+
the previous/next enabled tab, wrapping around the ends; **Home** and **End**
|
|
1052
|
+
jump to the first/last enabled tab. Disabled tabs are skipped. Focus follows
|
|
1053
|
+
selection — arrowing to a tab activates it (automatic activation) — so panes
|
|
1054
|
+
should be cheap to switch (reach for lazy panes, the default). Vertical
|
|
1055
|
+
strips (`direction="vertical"`) follow the APG's vertical-tablist pattern:
|
|
1056
|
+
**Up/Down** move to the previous/next tab with the same wrapping, and
|
|
1057
|
+
Left/Right stay active as a forgiving alias. Up/Down do nothing on
|
|
1058
|
+
horizontal strips (they keep their page-scroll meaning).
|
|
1059
|
+
- **Provide your own accessible names for icon-only affordances.** Scroll-arrow
|
|
1060
|
+
buttons in the `header:prepend`/`header:append` slots need an `aria-label`
|
|
1061
|
+
(they are your markup, not the component's).
|
|
1062
|
+
- **Label slots carry presentation only.** Keep the accessible name in the
|
|
1063
|
+
trigger text; a decorative badge or icon in a `label` slot should not be the
|
|
1064
|
+
only thing announced.
|
|
1065
|
+
|
|
1066
|
+
## v-model
|
|
1067
|
+
|
|
1068
|
+
- `v-model` — type: `K \| null \| undefined`
|
|
1069
|
+
|
|
1070
|
+
## Props
|
|
1071
|
+
|
|
1072
|
+
| Prop | Type | Default | Required | Description |
|
|
1073
|
+
| --- | --- | --- | --- | --- |
|
|
1074
|
+
| `block` | `boolean \| undefined` | | | Displays the component as full width. |
|
|
1075
|
+
| `compact` | `boolean \| undefined` | | | Adds a CSS class that applies a compact style to the component. |
|
|
1076
|
+
| `direction` | `"horizontal" \| "vertical" \| undefined` | `"horizontal"` | | Direction of the tabs component. |
|
|
1077
|
+
| `disableAnimateX` | `boolean \| undefined` | | | Disables the horizontal slide transition between tab panels (enabled by default). |
|
|
1078
|
+
| `disableAnimateY` | `boolean \| undefined` | | | Disables the smooth height animation when switching between tab panels (enabled by default). |
|
|
1079
|
+
| `disabled` | `boolean \| undefined` | | | Disables the component |
|
|
1080
|
+
| `eager` | `boolean \| undefined` | | | Prevents rendering content before it's made visible. |
|
|
1081
|
+
| `headers` | `Record<string, string> \| undefined` | | | Additional HTTP headers forwarded to Inertia when navigation is triggered. Only meaningful in an Inertia context. |
|
|
1082
|
+
| `id` | `string \| undefined` | | | The identifier of the component. |
|
|
1083
|
+
| `items` | `BbTabsItem<K>[]` | | yes | Array of items that define the tabs in the component. |
|
|
1084
|
+
| `modelValue` | `K \| null \| undefined` | | | The current tab key. Used by v-model. |
|
|
1085
|
+
| `navigation` | `boolean \| undefined` | | | Synchronizes the current tab with the URL query parameter. Pair it with `replace` unless a tab is genuinely a separate destination — see the `replace` prop. |
|
|
1086
|
+
| `onBefore` | `(() => boolean \| void) \| undefined` | | | Inertia lifecycle hook — fired just before the request is sent. Return `false` to cancel the visit. |
|
|
1087
|
+
| `onCancel` | `(() => void) \| undefined` | | | Inertia lifecycle hook — fired when the request is cancelled. |
|
|
1088
|
+
| `onError` | `((errors: Record<string, string>) => void) \| undefined` | | | Inertia lifecycle hook — fired when the server returns validation errors. |
|
|
1089
|
+
| `onFinish` | `(() => void) \| undefined` | | | Inertia lifecycle hook — fired after the visit finishes (success or error). |
|
|
1090
|
+
| `only` | `string[] \| undefined` | | | Limits which server-side props are refreshed during a partial Inertia reload. Only meaningful in an Inertia context. |
|
|
1091
|
+
| `onProgress` | `((progress: { percentage: number \| undefined; }) => void) \| undefined` | | | Inertia lifecycle hook — fired when upload/download progress is available. |
|
|
1092
|
+
| `onStart` | `(() => void) \| undefined` | | | Inertia lifecycle hook — fired when the request starts. |
|
|
1093
|
+
| `onSuccess` | `(() => void) \| undefined` | | | Inertia lifecycle hook — fired when the visit completes successfully. |
|
|
1094
|
+
| `preserveScroll` | `boolean \| ((props: Record<string, unknown>) => boolean) \| undefined` | | | Controls whether Inertia preserves the scroll position after navigation. Only meaningful in an Inertia context. |
|
|
1095
|
+
| `preserveState` | `boolean \| ((props: Record<string, unknown>) => boolean) \| null \| undefined` | | | Controls whether Inertia preserves the current component state after navigation. Only meaningful in an Inertia context. |
|
|
1096
|
+
| `queryKey` | `string \| undefined` | `"tab"` | | Defines the query key used for URL-based navigation. |
|
|
1097
|
+
| `replace` | `boolean \| undefined` | | | Uses history replacement instead of push navigation. Prefer `replace` whenever `navigation` is on: the URL still carries the active tab (deep-linkable, survives reload), but switching tabs does not stack a history entry per click, so Back l… |
|
|
1098
|
+
| `server` | `boolean \| undefined` | | | When true and in an Inertia context, triggers a real server-side Inertia visit instead of a client-only `history.pushState`. |
|
|
1099
|
+
|
|
1100
|
+
## Events
|
|
1101
|
+
|
|
1102
|
+
- `update:modelValue` — `(e: "update:modelValue", value: K): void` — Emitted when the selected tab changes. Used by `v-model`.
|
|
1103
|
+
|
|
1104
|
+
## Slots
|
|
1105
|
+
|
|
1106
|
+
- `header:append` — scope: `BbTabsScrollSlotProps` — Content rendered after the scrollable tab label list (e.g. a right scroll arrow).
|
|
1107
|
+
- `header:prepend` — scope: `BbTabsScrollSlotProps` — Content rendered before the scrollable tab label list (e.g. a left scroll arrow).
|
|
1108
|
+
- `label` — scope: `BbTabsSlotProps<K>` — Fallback slot used for all tab labels when no per-tab `label:{key}` slot is provided.
|
|
1109
|
+
|
|
1110
|
+
## See Also
|
|
1111
|
+
|
|
1112
|
+
- [BbAccordion](./BbAccordion.md) — Expands and collapses a content panel.
|
|
1113
|
+
- [BbBreadcrumbs](./BbBreadcrumbs.md) — Renders hierarchical navigation paths.
|