bitboss-ui 3.0.0-beta.3 → 3.0.0-beta.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +190 -35
- package/bin/bitboss-ui-mcp.mjs +472 -16
- package/bin/bitboss-ui.mjs +300 -23
- package/dist/ai/BbAccordion.md +150 -32
- package/dist/ai/BbAlert.md +124 -21
- package/dist/ai/BbAsterisk.md +53 -1
- package/dist/ai/BbAvatar.md +179 -27
- package/dist/ai/BbBadge.md +221 -35
- package/dist/ai/BbBadgeButton.md +68 -16
- package/dist/ai/BbBaseButton.md +123 -46
- package/dist/ai/BbBaseCheckboxIcon.md +114 -26
- package/dist/ai/BbBaseRadioIcon.md +111 -26
- package/dist/ai/BbBaseSwitchIcon.md +119 -28
- package/dist/ai/BbBreadcrumbs.md +192 -43
- package/dist/ai/BbButton.md +323 -76
- package/dist/ai/BbCalendar.md +548 -0
- package/dist/ai/BbCheckbox.md +216 -56
- package/dist/ai/BbCheckboxGroup.md +267 -30
- package/dist/ai/BbCollapsible.md +154 -39
- package/dist/ai/BbColorInput.md +280 -44
- package/dist/ai/BbColorPalette.md +227 -45
- package/dist/ai/BbConfirm.md +201 -41
- package/dist/ai/BbDatePicker.md +214 -25
- package/dist/ai/BbDatePickerInput.md +289 -54
- package/dist/ai/BbDialog.md +464 -73
- package/dist/ai/BbDropdown.md +699 -54
- package/dist/ai/BbDropdownButton.md +172 -43
- package/dist/ai/BbDropdownGroup.md +9 -1
- package/dist/ai/BbDropzone.md +122 -16
- package/dist/ai/BbForm.md +49 -14
- package/dist/ai/BbIcon.md +92 -31
- package/dist/ai/BbIndicator.md +73 -10
- package/dist/ai/BbNumberInput.md +211 -45
- package/dist/ai/BbOffCanvas.md +357 -66
- package/dist/ai/BbPagination.md +165 -26
- package/dist/ai/BbPopover.md +201 -34
- package/dist/ai/BbProgress.md +96 -55
- package/dist/ai/BbPtScope.md +136 -0
- package/dist/ai/BbRadio.md +205 -26
- package/dist/ai/BbRadioGroup.md +346 -39
- package/dist/ai/BbRating.md +130 -25
- package/dist/ai/BbSelect.md +583 -77
- package/dist/ai/BbSelectPopover.md +359 -82
- package/dist/ai/BbSlider.md +226 -51
- package/dist/ai/BbSmoothHeight.md +136 -32
- package/dist/ai/BbSpinner.md +166 -74
- package/dist/ai/BbSwitch.md +219 -31
- package/dist/ai/BbSwitchGroup.md +267 -29
- package/dist/ai/BbTable.md +1310 -162
- package/dist/ai/BbTabs.md +568 -101
- package/dist/ai/BbTabsList.md +56 -2
- package/dist/ai/BbTabsPanes.md +33 -1
- package/dist/ai/BbTabsRoot.md +61 -10
- package/dist/ai/BbTag.md +220 -42
- package/dist/ai/BbTextInput.md +429 -55
- package/dist/ai/BbTextarea.md +263 -51
- package/dist/ai/BbTimePicker.md +125 -11
- package/dist/ai/BbTimePickerInput.md +236 -22
- package/dist/ai/BbToast.md +183 -38
- package/dist/ai/BbToastPortal.md +28 -1
- package/dist/ai/BbTooltip.md +170 -30
- package/dist/ai/BbTree.md +225 -73
- package/dist/ai/ChipsBox.md +41 -1
- package/dist/ai/ClearableButton.md +12 -0
- package/dist/ai/CommaBox.md +1 -0
- package/dist/ai/{BbBaseInputContainer.md → CommonField.md} +19 -17
- package/dist/ai/CommonFieldInput.md +90 -0
- package/dist/ai/CommonPopover.md +12 -7
- package/dist/ai/CommonTimeSelector.md +61 -0
- package/dist/ai/ErrorIcon.md +20 -0
- package/dist/ai/FlatListBox.md +33 -5
- package/dist/ai/GroupedListBox.md +33 -5
- package/dist/ai/ListBox.md +37 -4
- package/dist/ai/OptionsContainer.md +6 -5
- package/dist/ai/WarningIcon.md +20 -0
- package/dist/ai/changelog.json +1183 -44
- package/dist/ai/components.json +41195 -9996
- package/dist/ai/composables/useBbConfig.md +72 -11
- package/dist/ai/composables/useConfirm.md +10 -5
- package/dist/ai/composables/useToast.md +4 -2
- package/dist/ai/guides/agent-contract.md +95 -10
- package/dist/ai/guides/ai-router.md +54 -26
- package/dist/ai/guides/app-layout.md +3 -1
- package/dist/ai/guides/component-picker.md +24 -18
- package/dist/ai/guides/design-language.md +217 -61
- package/dist/ai/guides/design-tokens.md +448 -105
- package/dist/ai/guides/fetch-items-playbook.md +1 -1
- package/dist/ai/guides/icons-policy.md +50 -19
- package/dist/ai/guides/inline-edit-playbook.md +1 -1
- package/dist/ai/guides/installation-and-plugin-setup.md +618 -42
- package/dist/ai/guides/migration/components/bb-accordion.md +29 -0
- package/dist/ai/guides/migration/components/bb-alert.md +2 -2
- package/dist/ai/guides/migration/components/bb-avatar.md +13 -14
- package/dist/ai/guides/migration/components/bb-breadcrumbs.md +8 -7
- package/dist/ai/guides/migration/components/bb-button.md +80 -20
- package/dist/ai/guides/migration/components/bb-checkbox-group.md +61 -28
- package/dist/ai/guides/migration/components/bb-checkbox.md +45 -10
- package/dist/ai/guides/migration/components/bb-collapsible.md +5 -5
- package/dist/ai/guides/migration/components/bb-color-palette.md +9 -9
- package/dist/ai/guides/migration/components/bb-date-picker-input.md +39 -29
- package/dist/ai/guides/migration/components/bb-dialog.md +68 -35
- package/dist/ai/guides/migration/components/bb-dropdown.md +29 -8
- package/dist/ai/guides/migration/components/bb-offcanvas.md +29 -13
- package/dist/ai/guides/migration/components/bb-popover.md +12 -11
- package/dist/ai/guides/migration/components/bb-rating.md +52 -17
- package/dist/ai/guides/migration/components/bb-select-popover.md +8 -0
- package/dist/ai/guides/migration/components/bb-select.md +18 -2
- package/dist/ai/guides/migration/components/bb-table.md +560 -28
- package/dist/ai/guides/migration/components/bb-tabs.md +56 -14
- package/dist/ai/guides/migration/components/bb-text-input.md +12 -12
- package/dist/ai/guides/migration/components/bb-tooltip.md +18 -0
- package/dist/ai/guides/migration/v2-to-v3.md +526 -192
- package/dist/ai/guides/options-items-playbook.md +57 -1
- package/dist/ai/guides/passthrough.md +725 -0
- package/dist/ai/guides/ssr-prefill.md +120 -0
- package/dist/ai/guides/validated-forms.md +5 -0
- package/dist/ai/index.md +24 -36
- package/dist/ai/recipes/inertia/approvals-inbox.md +3 -4
- package/dist/ai/recipes/inertia/inline-edit-workspace.md +10 -11
- package/dist/ai/recipes/inertia/layout-scaffold.md +5 -1
- package/dist/ai/recipes/inertia/onboarding.md +2 -2
- package/dist/ai/recipes/inertia/ownership-atlas.md +66 -44
- package/dist/ai/recipes/inertia/record-form.md +5 -6
- package/dist/ai/recipes/inertia/records-workspace.md +133 -12
- package/dist/ai/recipes/inertia/upload-center.md +8 -9
- package/dist/ai/recipes/inertia/wizard-form.md +68 -5
- package/dist/ai/recipes/nuxt/approvals-inbox.md +3 -4
- package/dist/ai/recipes/nuxt/inline-edit-workspace.md +10 -11
- package/dist/ai/recipes/nuxt/layout-scaffold.md +5 -1
- package/dist/ai/recipes/nuxt/onboarding.md +2 -2
- package/dist/ai/recipes/nuxt/record-form.md +5 -6
- package/dist/ai/recipes/nuxt/records-workspace.md +135 -12
- package/dist/ai/recipes/nuxt/upload-center.md +8 -9
- package/dist/ai/recipes/nuxt/wizard-form.md +68 -5
- package/dist/ai/recipes/vue/approvals-inbox.md +3 -4
- package/dist/ai/recipes/vue/inline-edit-workspace.md +10 -11
- package/dist/ai/recipes/vue/layout-scaffold.md +5 -1
- package/dist/ai/recipes/vue/onboarding.md +2 -2
- package/dist/ai/recipes/vue/record-form.md +10 -10
- package/dist/ai/recipes/vue/records-workspace.md +129 -12
- package/dist/ai/recipes/vue/upload-center.md +8 -9
- package/dist/ai/recipes/vue/wizard-form.md +65 -5
- package/dist/ai/source/BbAccordion.md +83 -21
- package/dist/ai/source/BbAlert.md +188 -60
- package/dist/ai/source/BbAsterisk.md +54 -4
- package/dist/ai/source/BbAvatar.md +63 -16
- package/dist/ai/source/BbBadge.md +193 -59
- package/dist/ai/source/BbBadgeButton.md +108 -41
- package/dist/ai/source/BbBaseButton.md +103 -9
- package/dist/ai/source/BbBaseCheckboxIcon.md +151 -36
- package/dist/ai/source/BbBaseRadioIcon.md +121 -17
- package/dist/ai/source/BbBaseSwitchIcon.md +138 -28
- package/dist/ai/source/BbBreadcrumbs.md +241 -57
- package/dist/ai/source/BbButton.md +457 -165
- package/dist/ai/source/BbCalendar.md +1617 -0
- package/dist/ai/source/BbCheckbox.md +433 -59
- package/dist/ai/source/BbCheckboxGroup.md +722 -77
- package/dist/ai/source/BbCollapsible.md +90 -8
- package/dist/ai/source/BbColorInput.md +505 -58
- package/dist/ai/source/BbColorPalette.md +1160 -51
- package/dist/ai/source/BbConfirm.md +134 -4
- package/dist/ai/source/BbConfirmPortal.md +83 -0
- package/dist/ai/source/BbDatePicker.md +447 -367
- package/dist/ai/source/BbDatePickerInput.md +1970 -106
- package/dist/ai/source/BbDialog.md +435 -45
- package/dist/ai/source/BbDropdown.md +693 -130
- package/dist/ai/source/BbDropdownButton.md +279 -68
- package/dist/ai/source/BbDropdownGroup.md +535 -64
- package/dist/ai/source/BbDropzone.md +93 -14
- package/dist/ai/source/BbForm.md +93 -5
- package/dist/ai/source/BbIcon.md +114 -48
- package/dist/ai/source/BbIndicator.md +85 -42
- package/dist/ai/source/BbNumberInput.md +574 -73
- package/dist/ai/source/BbOffCanvas.md +789 -249
- package/dist/ai/source/BbPagination.md +124 -19
- package/dist/ai/source/BbPopover.md +226 -77
- package/dist/ai/source/BbProgress.md +53 -5
- package/dist/ai/source/BbPtScope.md +54 -0
- package/dist/ai/source/BbRadio.md +369 -52
- package/dist/ai/source/BbRadioGroup.md +707 -91
- package/dist/ai/source/BbRating.md +645 -73
- package/dist/ai/source/BbSelect.md +939 -76
- package/dist/ai/source/BbSelectPopover.md +611 -66
- package/dist/ai/source/BbSlider.md +1205 -81
- package/dist/ai/source/BbSmoothHeight.md +48 -2
- package/dist/ai/source/BbSpinner.md +62 -6
- package/dist/ai/source/BbSwitch.md +277 -55
- package/dist/ai/source/BbSwitchGroup.md +568 -77
- package/dist/ai/source/BbTable.md +5729 -1779
- package/dist/ai/source/BbTabs.md +176 -87
- package/dist/ai/source/BbTabsList.md +207 -88
- package/dist/ai/source/BbTabsPanes.md +179 -83
- package/dist/ai/source/BbTabsRoot.md +171 -82
- package/dist/ai/source/BbTag.md +670 -76
- package/dist/ai/source/BbTextInput.md +439 -59
- package/dist/ai/source/BbTextarea.md +483 -54
- package/dist/ai/source/BbTimePicker.md +302 -56
- package/dist/ai/source/BbTimePickerInput.md +1143 -91
- package/dist/ai/source/BbToast.md +121 -36
- package/dist/ai/source/BbToastPortal.md +77 -27
- package/dist/ai/source/BbTooltip.md +147 -22
- package/dist/ai/source/BbTree.md +55 -3
- package/dist/ai/source/ChipsBox.md +12 -2
- package/dist/ai/source/CommaBox.md +10 -2
- package/dist/ai/source/{BbBaseInputContainer.md → CommonField.md} +318 -210
- package/dist/ai/source/CommonFieldInput.md +799 -0
- package/dist/ai/source/CommonPopover.md +107 -22
- package/dist/ai/source/CommonTimeSelector.md +642 -0
- package/dist/ai/source/ErrorIcon.md +2 -2
- package/dist/ai/source/FlatListBox.md +172 -11
- package/dist/ai/source/GroupedListBox.md +198 -11
- package/dist/ai/source/GuidesComponent.md +14 -7
- package/dist/ai/source/ListBox.md +29 -2
- package/dist/ai/source/OptionsContainer.md +197 -26
- package/dist/ai/source/WarningIcon.md +2 -2
- package/dist/components/BbAccordion/BbAccordion.vue_vue_type_script_setup_true_lang.js +49 -32
- package/dist/components/BbAccordion/types.d.ts +32 -1
- package/dist/components/BbAccordion/types.js +11 -0
- package/dist/components/BbAlert/BbAlert.vue_vue_type_script_setup_true_lang.js +45 -29
- package/dist/components/BbAlert/types.d.ts +35 -1
- package/dist/components/BbAlert/types.js +13 -0
- package/dist/components/BbAsterisk/BbAsterisk.vue.d.ts +3 -1
- package/dist/components/BbAsterisk/BbAsterisk.vue_vue_type_script_setup_true_lang.js +23 -8
- package/dist/components/BbAsterisk/types.d.ts +18 -0
- package/dist/components/BbAsterisk/types.js +7 -0
- package/dist/components/BbAvatar/BbAvatar.vue.d.ts +1 -1
- package/dist/components/BbAvatar/BbAvatar.vue_vue_type_script_setup_true_lang.js +57 -44
- package/dist/components/BbAvatar/types.d.ts +23 -0
- package/dist/components/BbAvatar/types.js +7 -0
- package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +22 -16
- package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +95 -52
- package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +3 -0
- package/dist/components/BbBadge/badgeButtonContext.d.ts +25 -8
- package/dist/components/BbBadge/types.d.ts +44 -3
- package/dist/components/BbBadge/types.js +13 -0
- package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +110 -97
- package/dist/components/BbBaseButton/RouterComponent.vue_vue_type_script_setup_true_lang.js +11 -11
- package/dist/components/BbBaseButton/types.d.ts +28 -0
- package/dist/components/BbBaseButton/types.js +9 -2
- package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue_vue_type_script_setup_true_lang.js +50 -18
- package/dist/components/BbBaseCheckboxIcon/types.d.ts +31 -2
- package/dist/components/BbBaseCheckboxIcon/types.js +8 -0
- package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue_vue_type_script_setup_true_lang.js +45 -15
- package/dist/components/BbBaseRadioIcon/types.d.ts +31 -2
- package/dist/components/BbBaseRadioIcon/types.js +8 -0
- package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue_vue_type_script_setup_true_lang.js +48 -16
- package/dist/components/BbBaseSwitchIcon/types.d.ts +31 -2
- package/dist/components/BbBaseSwitchIcon/types.js +8 -0
- package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +151 -110
- package/dist/components/BbBreadcrumbs/types.d.ts +35 -0
- package/dist/components/BbBreadcrumbs/types.js +12 -0
- package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +104 -77
- package/dist/components/BbButton/types.d.ts +49 -2
- package/dist/components/BbButton/types.js +12 -0
- package/dist/components/BbCalendar/BbCalendar.vue.d.ts +34 -0
- package/dist/components/BbCalendar/BbCalendar.vue.js +6 -0
- package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +576 -0
- package/dist/components/BbCalendar/CalendarMonthPanel.vue.js +5 -0
- package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +124 -0
- package/dist/components/BbCalendar/CalendarYearPanel.vue.js +5 -0
- package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +126 -0
- package/dist/components/BbCalendar/calendarHost.d.ts +29 -0
- package/dist/components/BbCalendar/calendarHost.js +10 -0
- package/dist/components/BbCalendar/types.d.ts +211 -0
- package/dist/components/BbCalendar/types.js +28 -0
- package/dist/components/{BbBaseDatePicker/useDatePickerContext.d.ts → BbCalendar/useCalendarContext.d.ts} +10 -7
- package/dist/components/BbCalendar/useCalendarContext.js +11 -0
- package/dist/components/BbCalendar/useCalendarGrid.d.ts +208 -0
- package/dist/components/BbCalendar/useCalendarGrid.js +269 -0
- package/dist/components/BbCalendar/useDayGrid.d.ts +79 -0
- package/dist/components/BbCalendar/useDayGrid.js +203 -0
- package/dist/components/BbCheckbox/BbCheckbox.vue.d.ts +1 -1
- package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +194 -67
- package/dist/components/BbCheckbox/types.d.ts +164 -9
- package/dist/components/BbCheckbox/types.js +8 -0
- package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue.d.ts +3 -3
- package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +310 -80
- package/dist/components/BbCheckboxGroup/types.d.ts +152 -8
- package/dist/components/BbCheckboxGroup/types.js +10 -0
- package/dist/components/BbCollapsible/BbCollapsible.vue.d.ts +2 -1
- package/dist/components/BbCollapsible/BbCollapsible.vue_vue_type_script_setup_true_lang.js +41 -19
- package/dist/components/BbCollapsible/types.d.ts +44 -1
- package/dist/components/BbCollapsible/types.js +7 -0
- package/dist/components/BbColorInput/BbColorInput.vue.d.ts +11 -1
- package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +306 -81
- package/dist/components/BbColorInput/types.d.ts +204 -6
- package/dist/components/BbColorInput/types.js +24 -0
- package/dist/components/BbColorPalette/BbColorPalette.vue.d.ts +10 -2
- package/dist/components/BbColorPalette/BbColorPalette.vue_vue_type_script_setup_true_lang.js +508 -104
- package/dist/components/BbColorPalette/types.d.ts +69 -3
- package/dist/components/BbColorPalette/types.js +12 -0
- package/dist/components/BbConfirm/BbConfirm.vue.d.ts +2 -1
- package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +116 -76
- package/dist/components/BbConfirm/types.d.ts +49 -0
- package/dist/components/BbConfirm/types.js +17 -0
- package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +16 -10
- package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +291 -218
- package/dist/components/BbDatePicker/types.d.ts +95 -15
- package/dist/components/BbDatePicker/types.js +32 -0
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +14 -2
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +1148 -82
- package/dist/components/BbDatePickerInput/types.d.ts +198 -11
- package/dist/components/BbDatePickerInput/types.js +38 -0
- package/dist/components/BbDialog/BbDialog.vue.d.ts +4 -4
- package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +218 -136
- package/dist/components/BbDialog/types.d.ts +86 -2
- package/dist/components/BbDialog/types.js +16 -0
- package/dist/components/BbDialog/useDialogStack.d.ts +12 -0
- package/dist/components/BbDialog/useDialogStack.js +9 -2
- package/dist/components/BbDropdown/AdaptiveDropdown.vue.d.ts +2 -0
- package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +103 -96
- package/dist/components/BbDropdown/BbDropdown.vue.d.ts +10 -2
- package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +346 -281
- package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +285 -257
- package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +100 -89
- package/dist/components/BbDropdown/normalizeGroups.js +34 -31
- package/dist/components/BbDropdown/types.d.ts +161 -8
- package/dist/components/BbDropdown/types.js +20 -2
- package/dist/components/BbDropdown/useDropdownContext.d.ts +7 -1
- package/dist/components/BbDropdown/useDropdownGroupRegistry.d.ts +1 -0
- package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +13 -3
- package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +122 -35
- package/dist/components/BbDropdownButton/types.d.ts +94 -1
- package/dist/components/BbDropdownButton/types.js +30 -0
- package/dist/components/BbDropzone/BbDropzone.vue_vue_type_script_setup_true_lang.js +169 -138
- package/dist/components/BbDropzone/types.d.ts +32 -1
- package/dist/components/BbDropzone/types.js +16 -0
- package/dist/components/BbIcon/BbIcon.vue_vue_type_script_setup_true_lang.js +58 -48
- package/dist/components/BbIcon/iconCache.d.ts +63 -0
- package/dist/components/BbIcon/iconCache.js +35 -0
- package/dist/components/BbIcon/types.d.ts +22 -2
- package/dist/components/BbIcon/types.js +7 -0
- package/dist/components/BbIndicator/BbIndicator.vue_vue_type_script_setup_true_lang.js +33 -20
- package/dist/components/BbIndicator/types.d.ts +24 -0
- package/dist/components/BbIndicator/types.js +7 -0
- package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +6 -1
- package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +272 -80
- package/dist/components/BbNumberInput/types.d.ts +178 -11
- package/dist/components/BbNumberInput/types.js +8 -0
- package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +4 -4
- package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +294 -207
- package/dist/components/BbOffCanvas/types.d.ts +73 -5
- package/dist/components/BbOffCanvas/types.js +15 -0
- package/dist/components/BbPagination/BbPagination.vue.d.ts +1 -1
- package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +119 -96
- package/dist/components/BbPagination/types.d.ts +32 -0
- package/dist/components/BbPagination/types.js +11 -0
- package/dist/components/BbPopover/BbPopover.vue.d.ts +5 -5
- package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +184 -154
- package/dist/components/BbPopover/types.d.ts +48 -2
- package/dist/components/BbPopover/types.js +14 -0
- package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +27 -15
- package/dist/components/BbProgress/types.d.ts +21 -0
- package/dist/components/BbProgress/types.js +7 -0
- package/dist/components/BbPtScope/BbPtScope.vue.d.ts +12 -0
- package/dist/components/BbPtScope/BbPtScope.vue.js +5 -0
- package/dist/components/BbPtScope/BbPtScope.vue_vue_type_script_setup_true_lang.js +13 -0
- package/dist/components/BbPtScope/types.d.ts +15 -0
- package/dist/components/BbRadio/BbRadio.vue.d.ts +1 -1
- package/dist/components/BbRadio/BbRadio.vue_vue_type_script_setup_true_lang.js +166 -56
- package/dist/components/BbRadio/types.d.ts +137 -9
- package/dist/components/BbRadio/types.js +8 -0
- package/dist/components/BbRadioGroup/BbRadioGroup.vue.d.ts +2 -2
- package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +292 -82
- package/dist/components/BbRadioGroup/types.d.ts +155 -10
- package/dist/components/BbRadioGroup/types.js +10 -0
- package/dist/components/BbRating/BbRating.vue.d.ts +4 -2
- package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +245 -73
- package/dist/components/BbRating/types.d.ts +152 -6
- package/dist/components/BbRating/types.js +21 -0
- package/dist/components/BbSelect/BbSelect.vue.d.ts +3 -3
- package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +474 -75
- package/dist/components/BbSelect/types.d.ts +174 -8
- package/dist/components/BbSelect/types.js +26 -0
- package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +460 -349
- package/dist/components/BbSelectPopover/types.d.ts +114 -4
- package/dist/components/BbSelectPopover/types.js +24 -0
- package/dist/components/BbSlider/BbSlider.vue.d.ts +10 -4
- package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +396 -92
- package/dist/components/BbSlider/types.d.ts +175 -6
- package/dist/components/BbSlider/types.js +21 -0
- package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.d.ts +1 -1
- package/dist/components/BbSmoothHeight/BbSmoothHeight.vue_vue_type_script_setup_true_lang.js +60 -48
- package/dist/components/BbSmoothHeight/types.d.ts +19 -0
- package/dist/components/BbSmoothHeight/types.js +7 -0
- package/dist/components/BbSpinner/BbSpinner.vue_vue_type_script_setup_true_lang.js +27 -14
- package/dist/components/BbSpinner/types.d.ts +22 -1
- package/dist/components/BbSpinner/types.js +7 -0
- package/dist/components/BbSwitch/BbSwitch.vue.d.ts +1 -1
- package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +202 -75
- package/dist/components/BbSwitch/types.d.ts +25 -10
- package/dist/components/BbSwitch/types.js +5 -0
- package/dist/components/BbSwitchGroup/BbSwitchGroup.vue.d.ts +2 -2
- package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +310 -80
- package/dist/components/BbSwitchGroup/types.d.ts +29 -6
- package/dist/components/BbSwitchGroup/types.js +5 -0
- package/dist/components/BbTable/BbTable.vue.d.ts +10 -4
- package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +1577 -654
- package/dist/components/BbTable/BbTableDataRow.d.ts +169 -0
- package/dist/components/BbTable/BbTableDataRow.js +133 -0
- package/dist/components/BbTable/BbTableExpandRow.d.ts +73 -0
- package/dist/components/BbTable/BbTableExpandRow.js +52 -0
- package/dist/components/BbTable/BbTableSelectToggle.d.ts +103 -0
- package/dist/components/BbTable/BbTableSelectToggle.js +114 -0
- package/dist/components/BbTable/types.d.ts +366 -111
- package/dist/components/BbTable/types.js +18 -0
- package/dist/components/BbTable/utils.d.ts +92 -4
- package/dist/components/BbTable/utils.js +71 -36
- package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +32 -20
- package/dist/components/BbTabs/BbTabsList.vue.d.ts +3 -10
- package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +39 -33
- package/dist/components/BbTabs/BbTabsPanes.vue_vue_type_script_setup_true_lang.js +14 -13
- package/dist/components/BbTabs/BbTabsRoot.vue_vue_type_script_setup_true_lang.js +12 -1
- package/dist/components/BbTabs/types.d.ts +72 -9
- package/dist/components/BbTabs/types.js +11 -0
- package/dist/components/BbTag/BbTag.vue.d.ts +7 -4
- package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +350 -88
- package/dist/components/BbTag/types.d.ts +90 -5
- package/dist/components/BbTag/types.js +8 -0
- package/dist/components/BbTextInput/BbTextInput.vue.d.ts +4 -2
- package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +245 -80
- package/dist/components/BbTextInput/types.d.ts +147 -6
- package/dist/components/BbTextInput/types.js +8 -0
- package/dist/components/BbTextarea/BbTextarea.vue.d.ts +1 -1
- package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +273 -91
- package/dist/components/BbTextarea/types.d.ts +134 -6
- package/dist/components/BbTextarea/types.js +8 -0
- package/dist/components/BbTimePicker/BbTimePicker.vue.d.ts +10 -2
- package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +152 -103
- package/dist/components/BbTimePicker/types.d.ts +65 -3
- package/dist/components/BbTimePicker/types.js +12 -0
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue.d.ts +12 -2
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +705 -83
- package/dist/components/BbTimePickerInput/types.d.ts +128 -12
- package/dist/components/BbTimePickerInput/types.js +23 -0
- package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +51 -25
- package/dist/components/BbToast/BbToastMessage.vue.d.ts +3 -0
- package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +48 -47
- package/dist/components/BbToast/BbToastRegion.vue.d.ts +3 -0
- package/dist/components/BbToast/BbToastRegion.vue_vue_type_script_setup_true_lang.js +72 -64
- package/dist/components/BbToast/types.d.ts +28 -0
- package/dist/components/BbToast/types.js +13 -0
- package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +100 -84
- package/dist/components/BbTooltip/types.d.ts +40 -2
- package/dist/components/BbTooltip/types.js +7 -0
- package/dist/components/BbTree/BbTree.vue.d.ts +11 -1
- package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +44 -28
- package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +13 -12
- package/dist/components/BbTree/context.d.ts +4 -1
- package/dist/components/BbTree/types.d.ts +30 -1
- package/dist/components/BbTree/types.js +7 -0
- package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +9 -7
- package/dist/components/ChipsBox/types.d.ts +6 -0
- package/dist/components/ClearableButton/ClearableButton.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/CommaBox/CommaBox.vue_vue_type_script_setup_true_lang.js +11 -7
- package/dist/components/CommaBox/types.d.ts +6 -0
- package/dist/components/{BbBaseInputContainer/BbBaseInputContainer.vue.d.ts → CommonField/CommonField.vue.d.ts} +4 -4
- package/dist/components/{BbBaseRadio/BbBaseRadio.vue.js → CommonField/CommonField.vue.js} +2 -2
- package/dist/components/CommonField/CommonField.vue_vue_type_script_setup_true_lang.js +178 -0
- package/dist/components/CommonField/messageHeightMatrix.d.ts +2 -0
- package/dist/components/{BbBaseInputContainer → CommonField}/types.d.ts +33 -10
- package/dist/components/{CommonInputWrapper/CommonInputWrapper.vue.d.ts → CommonFieldInput/CommonFieldInput.vue.d.ts} +5 -4
- package/dist/components/{BbBaseRadioGroup/BbBaseRadioGroup.vue.js → CommonFieldInput/CommonFieldInput.vue.js} +2 -2
- package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +116 -0
- package/dist/components/CommonFieldInput/boxBorderMatrix.d.ts +10 -0
- package/dist/components/{CommonInputWrapper → CommonFieldInput}/types.d.ts +25 -6
- package/dist/components/CommonPopover/CommonPopover.vue.d.ts +11 -2
- package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +65 -53
- package/dist/components/CommonPopover/types.d.ts +27 -8
- package/dist/components/{BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.d.ts → CommonTimeSelector/CommonTimeSelector.vue.d.ts} +4 -1
- package/dist/components/{BbBaseColorPalette/BbBaseColorPalette.vue.js → CommonTimeSelector/CommonTimeSelector.vue.js} +2 -2
- package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +207 -0
- package/dist/components/CommonTimeSelector/types.d.ts +6 -0
- package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +163 -100
- package/dist/components/FlatListBox/types.d.ts +15 -0
- package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +190 -127
- package/dist/components/GroupedListBox/types.d.ts +15 -0
- package/dist/components/ListBox/ListBox.vue_vue_type_script_setup_true_lang.js +82 -66
- package/dist/components/ListBox/types.d.ts +15 -0
- package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +89 -35
- package/dist/components/OptionsContainer/types.d.ts +37 -5
- package/dist/composables/useBaseOptions.d.ts +12 -1
- package/dist/composables/useBaseOptions.js +63 -31
- package/dist/composables/useBbConfig.d.ts +27 -6
- package/dist/composables/useBbConfig.js +8 -2
- package/dist/composables/useBbDropdownContext.d.ts +5 -0
- package/dist/composables/useBbTabsContext.d.ts +16 -2
- package/dist/composables/useBbTabsContext.js +157 -145
- package/dist/composables/useConfig.d.ts +59 -0
- package/dist/composables/useConfig.js +11 -0
- package/dist/composables/useConfirm.d.ts +33 -2
- package/dist/composables/useConfirm.js +43 -40
- package/dist/composables/useItemsGetter.d.ts +11 -0
- package/dist/composables/useItemsGetter.js +44 -18
- package/dist/composables/useLocale.js +10 -7
- package/dist/composables/useMobile.js +5 -5
- package/dist/composables/usePassthrough.d.ts +206 -0
- package/dist/composables/usePassthrough.js +224 -0
- package/dist/composables/usePrefill.d.ts +22 -2
- package/dist/composables/usePrefill.js +35 -19
- package/dist/composables/useSafeAreaInternal.js +1 -1
- package/dist/composables/useSegmentedFields.d.ts +2 -2
- package/dist/composables/useSsrState.d.ts +20 -0
- package/dist/composables/useSsrState.js +13 -0
- package/dist/composables/useTableWidthContext.d.ts +24 -4
- package/dist/composables/useTableWidthContext.js +31 -28
- package/dist/composables/useToast.d.ts +18 -1
- package/dist/composables/useToast.js +22 -18
- package/dist/composables/useToggleInput.d.ts +44 -0
- package/dist/composables/useToggleInput.js +39 -0
- package/dist/composables/useViewportWidth.d.ts +20 -6
- package/dist/composables/useViewportWidth.js +8 -7
- package/dist/deprecation/ai-deprecations.json.d.ts +352 -11
- package/dist/deprecation/ai-deprecations.json.js +1 -1
- package/dist/directives/bbDropdown.d.ts +15 -4
- package/dist/directives/bbDropdown.js +31 -9
- package/dist/directives/createPopoverDirective.d.ts +62 -0
- package/dist/directives/createPopoverDirective.js +92 -37
- package/dist/i18n/locales/cs.json +6 -3
- package/dist/i18n/locales/da.json +6 -3
- package/dist/i18n/locales/de.json +6 -3
- package/dist/i18n/locales/el.json +6 -3
- package/dist/i18n/locales/en.json +6 -3
- package/dist/i18n/locales/es.json +6 -3
- package/dist/i18n/locales/fi.json +6 -3
- package/dist/i18n/locales/fr.json +6 -3
- package/dist/i18n/locales/hu.json +6 -3
- package/dist/i18n/locales/it.json +6 -3
- package/dist/i18n/locales/ja.json +6 -3
- package/dist/i18n/locales/ko.json +6 -3
- package/dist/i18n/locales/nb.json +6 -3
- package/dist/i18n/locales/nl.json +6 -3
- package/dist/i18n/locales/pl.json +6 -3
- package/dist/i18n/locales/pt.json +6 -3
- package/dist/i18n/locales/ro.json +6 -3
- package/dist/i18n/locales/ru.json +6 -3
- package/dist/i18n/locales/sv.json +6 -3
- package/dist/i18n/locales/tr.json +6 -3
- package/dist/i18n/locales/uk.json +6 -3
- package/dist/i18n/locales/zh-cn.json +6 -3
- package/dist/icon-scan.d.ts +276 -0
- package/dist/icon-scan.js +485 -0
- package/dist/icons-whitelist.d.ts +5 -4
- package/dist/index.d.ts +25 -4
- package/dist/index.js +71 -67
- package/dist/input-variants.d.ts +18 -0
- package/dist/llms-full.txt +19105 -4677
- package/dist/llms-medium.txt +1027 -174
- package/dist/llms.txt +13 -10
- package/dist/locale-blueprint.json +6 -3
- package/dist/nuxt-auto-imports.d.ts +100 -0
- package/dist/nuxt-auto-imports.js +55 -0
- package/dist/nuxt-module.d.ts +26 -1
- package/dist/nuxt.js +26 -9
- package/dist/passthrough-deduper.js +5 -0
- package/dist/plugin.d.ts +10 -1
- package/dist/plugin.js +21 -19
- package/dist/pt-scope-registry.d.ts +15 -0
- package/dist/runtime/nuxt-plugin.js +29 -21
- package/dist/styles.css +1 -1
- package/dist/tabs-variants.d.ts +18 -0
- package/dist/types/ColumnName.d.ts +1 -1
- package/dist/types/CommonProps.d.ts +2 -2
- package/dist/types/Config.d.ts +47 -0
- package/dist/types/InputVariant.d.ts +22 -0
- package/dist/types/ItemProps.d.ts +50 -0
- package/dist/types/Option.d.ts +6 -0
- package/dist/types/PtScope.d.ts +13 -0
- package/dist/types/TabsVariant.d.ts +17 -0
- package/dist/types/passthrough.d.ts +332 -0
- package/dist/types/passthrough.js +78 -0
- package/dist/types/ptComponentMap.d.ts +60 -0
- package/dist/utilities/functions/hasVnodeListener.d.ts +16 -0
- package/dist/utilities/functions/hasVnodeListener.js +12 -0
- package/dist/utilities/functions/itemProps.d.ts +46 -0
- package/dist/utilities/functions/itemProps.js +47 -0
- package/dist/utilities/functions/slotKey.d.ts +5 -5
- package/dist/utilities/functions/slotKey.js +1 -1
- package/dist/utilities/functions/toggleInput.d.ts +98 -0
- package/dist/utilities/functions/toggleInput.js +56 -0
- package/dist/utilities/misc/listboxMetrics.d.ts +9 -3
- package/dist/utilities/misc/listboxMetrics.js +5 -2
- package/dist/utilities/misc/ssrStateInjectionKey.d.ts +42 -0
- package/dist/utilities/misc/ssrStateInjectionKey.js +4 -0
- package/dist/utils/cssLayers.d.ts +91 -0
- package/dist/utils/cssLayers.js +43 -0
- package/dist/utils/injectLibraryStyles.d.ts +3 -1
- package/dist/utils/injectLibraryStyles.js +24 -23
- package/dist/utils/passthrough.d.ts +63 -0
- package/dist/utils/passthrough.js +96 -0
- package/dist/utils/passthroughDeduper.d.ts +2 -0
- package/dist/utils/passthroughTestKit.d.ts +54 -0
- package/dist/utils/ptScope.d.ts +8 -0
- package/dist/utils/ptScope.js +4 -0
- package/dist/utils/swipeTestKit.d.ts +9 -0
- package/dist/validated/BbCheckbox.vue.d.ts +3 -1
- package/dist/validated/BbCheckbox.vue_vue_type_script_setup_true_lang.js +82 -23
- package/dist/validated/BbCheckboxGroup.vue.d.ts +125 -2
- package/dist/validated/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +113 -25
- package/dist/validated/BbColorInput.vue.d.ts +9 -7
- package/dist/validated/BbColorInput.vue_vue_type_script_setup_true_lang.js +145 -25
- package/dist/validated/BbDatePickerInput.vue.d.ts +11 -9
- package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +417 -27
- package/dist/validated/BbDropzone.vue_vue_type_script_setup_true_lang.js +17 -1
- package/dist/validated/BbForm.vue_vue_type_script_setup_true_lang.js +45 -27
- package/dist/validated/BbNumberInput.vue.d.ts +9 -7
- package/dist/validated/BbNumberInput.vue_vue_type_script_setup_true_lang.js +115 -25
- package/dist/validated/BbRadioGroup.vue.d.ts +124 -2
- package/dist/validated/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +113 -25
- package/dist/validated/BbRating.vue.d.ts +6 -4
- package/dist/validated/BbRating.vue_vue_type_script_setup_true_lang.js +69 -22
- package/dist/validated/BbSelect.vue.d.ts +235 -2
- package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +217 -32
- package/dist/validated/BbSlider.vue.d.ts +9 -7
- package/dist/validated/BbSlider.vue_vue_type_script_setup_true_lang.js +72 -25
- package/dist/validated/BbSwitch.vue.d.ts +3 -1
- package/dist/validated/BbSwitch.vue_vue_type_script_setup_true_lang.js +82 -23
- package/dist/validated/BbSwitchGroup.vue.d.ts +125 -2
- package/dist/validated/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +113 -25
- package/dist/validated/BbTag.vue.d.ts +9 -7
- package/dist/validated/BbTag.vue_vue_type_script_setup_true_lang.js +122 -25
- package/dist/validated/BbTextInput.vue.d.ts +9 -7
- package/dist/validated/BbTextInput.vue_vue_type_script_setup_true_lang.js +115 -25
- package/dist/validated/BbTextarea.vue.d.ts +9 -7
- package/dist/validated/BbTextarea.vue_vue_type_script_setup_true_lang.js +115 -25
- package/dist/validated/BbTimePickerInput.vue.d.ts +9 -7
- package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +175 -25
- package/dist/validated/index.d.ts +3 -0
- package/dist/validated/useValidatedField.js +25 -23
- package/dist/vite-plugin.d.ts +230 -23
- package/dist/vite.js +515 -301
- package/llms.txt +14 -11
- package/package.json +15 -11
- package/scripts/lib/component-tree.ts +611 -0
- package/scripts/lib/ensure-manifest.mjs +28 -5
- package/scripts/lib/eslint-plugin.d.ts +58 -1
- package/scripts/lib/eslint-plugin.mjs +899 -17
- package/scripts/lib/hand-roll-hints.mjs +50 -6
- package/scripts/lib/html-attributes.mjs +133 -0
- package/scripts/lib/mcp-config.mjs +38 -34
- package/scripts/lib/public-type-exports.mjs +246 -0
- package/scripts/lib/validate-bb-markup.mjs +312 -33
- package/dist/ai/BbBaseCheckbox.md +0 -49
- package/dist/ai/BbBaseCheckboxGroup.md +0 -64
- package/dist/ai/BbBaseColorInput.md +0 -65
- package/dist/ai/BbBaseColorPalette.md +0 -39
- package/dist/ai/BbBaseDatePicker.md +0 -43
- package/dist/ai/BbBaseDatePickerInput.md +0 -73
- package/dist/ai/BbBaseNumberInput.md +0 -71
- package/dist/ai/BbBaseRadio.md +0 -46
- package/dist/ai/BbBaseRadioGroup.md +0 -64
- package/dist/ai/BbBaseRating.md +0 -52
- package/dist/ai/BbBaseSelect.md +0 -88
- package/dist/ai/BbBaseSlider.md +0 -56
- package/dist/ai/BbBaseSwitch.md +0 -49
- package/dist/ai/BbBaseSwitchGroup.md +0 -64
- package/dist/ai/BbBaseTag.md +0 -68
- package/dist/ai/BbBaseTextInput.md +0 -75
- package/dist/ai/BbBaseTextarea.md +0 -62
- package/dist/ai/BbBaseTimePickerInput.md +0 -62
- package/dist/ai/CommonInputWrapper.md +0 -42
- package/dist/ai/source/BbBaseCheckbox.md +0 -461
- package/dist/ai/source/BbBaseCheckboxGroup.md +0 -554
- package/dist/ai/source/BbBaseColorInput.md +0 -431
- package/dist/ai/source/BbBaseColorPalette.md +0 -942
- package/dist/ai/source/BbBaseDatePicker.md +0 -1448
- package/dist/ai/source/BbBaseDatePickerInput.md +0 -1940
- package/dist/ai/source/BbBaseNumberInput.md +0 -617
- package/dist/ai/source/BbBaseRadio.md +0 -381
- package/dist/ai/source/BbBaseRadioGroup.md +0 -539
- package/dist/ai/source/BbBaseRating.md +0 -607
- package/dist/ai/source/BbBaseSelect.md +0 -945
- package/dist/ai/source/BbBaseSlider.md +0 -1144
- package/dist/ai/source/BbBaseSwitch.md +0 -246
- package/dist/ai/source/BbBaseSwitchGroup.md +0 -302
- package/dist/ai/source/BbBaseTag.md +0 -694
- package/dist/ai/source/BbBaseTextInput.md +0 -511
- package/dist/ai/source/BbBaseTextarea.md +0 -504
- package/dist/ai/source/BbBaseTimePickerInput.md +0 -1037
- package/dist/ai/source/CommonInputWrapper.md +0 -584
- package/dist/assets/svgs/sort.svg_raw.js +0 -4
- package/dist/components/BbBadge/BadgeAppendIcon.vue.d.ts +0 -3
- package/dist/components/BbBadge/BadgeAppendIcon.vue.js +0 -5
- package/dist/components/BbBadge/BadgeAppendIcon.vue_vue_type_script_setup_true_lang.js +0 -22
- package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.d.ts +0 -40
- package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.js +0 -6
- package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue_vue_type_script_setup_true_lang.js +0 -145
- package/dist/components/BbBaseCheckbox/types.d.ts +0 -224
- package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.d.ts +0 -19
- package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.js +0 -6
- package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue_vue_type_script_setup_true_lang.js +0 -190
- package/dist/components/BbBaseCheckboxGroup/types.d.ts +0 -257
- package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.d.ts +0 -43
- package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.js +0 -6
- package/dist/components/BbBaseColorInput/BbBaseColorInput.vue_vue_type_script_setup_true_lang.js +0 -184
- package/dist/components/BbBaseColorInput/types.d.ts +0 -219
- package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue.d.ts +0 -13
- package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue_vue_type_script_setup_true_lang.js +0 -395
- package/dist/components/BbBaseColorPalette/types.d.ts +0 -40
- package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.d.ts +0 -20
- package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.js +0 -6
- package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue_vue_type_script_setup_true_lang.js +0 -407
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.d.ts +0 -47
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.js +0 -5
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue_vue_type_script_setup_true_lang.js +0 -318
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.js +0 -5
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue_vue_type_script_setup_true_lang.js +0 -115
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.js +0 -5
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue_vue_type_script_setup_true_lang.js +0 -116
- package/dist/components/BbBaseDatePicker/types.d.ts +0 -108
- package/dist/components/BbBaseDatePicker/useDatePickerContext.js +0 -11
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.d.ts +0 -31
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.js +0 -6
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue_vue_type_script_setup_true_lang.js +0 -737
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.js +0 -6
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue_vue_type_script_setup_true_lang.js +0 -204
- package/dist/components/BbBaseDatePickerInput/types.d.ts +0 -325
- package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.js +0 -6
- package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue_vue_type_script_setup_true_lang.js +0 -190
- package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.d.ts +0 -52
- package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.js +0 -6
- package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue_vue_type_script_setup_true_lang.js +0 -215
- package/dist/components/BbBaseNumberInput/types.d.ts +0 -211
- package/dist/components/BbBaseRadio/BbBaseRadio.vue.d.ts +0 -33
- package/dist/components/BbBaseRadio/BbBaseRadio.vue_vue_type_script_setup_true_lang.js +0 -113
- package/dist/components/BbBaseRadio/types.d.ts +0 -179
- package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue.d.ts +0 -19
- package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue_vue_type_script_setup_true_lang.js +0 -179
- package/dist/components/BbBaseRadioGroup/types.d.ts +0 -223
- package/dist/components/BbBaseRating/BbBaseRating.vue.d.ts +0 -38
- package/dist/components/BbBaseRating/BbBaseRating.vue.js +0 -6
- package/dist/components/BbBaseRating/BbBaseRating.vue_vue_type_script_setup_true_lang.js +0 -192
- package/dist/components/BbBaseRating/types.d.ts +0 -176
- package/dist/components/BbBaseSelect/BbBaseSelect.vue.d.ts +0 -19
- package/dist/components/BbBaseSelect/BbBaseSelect.vue.js +0 -6
- package/dist/components/BbBaseSelect/BbBaseSelect.vue_vue_type_script_setup_true_lang.js +0 -311
- package/dist/components/BbBaseSelect/types.d.ts +0 -297
- package/dist/components/BbBaseSlider/BbBaseSlider.vue.d.ts +0 -35
- package/dist/components/BbBaseSlider/BbBaseSlider.vue.js +0 -6
- package/dist/components/BbBaseSlider/BbBaseSlider.vue_vue_type_script_setup_true_lang.js +0 -340
- package/dist/components/BbBaseSlider/types.d.ts +0 -200
- package/dist/components/BbBaseSwitch/BbBaseSwitch.vue.d.ts +0 -35
- package/dist/components/BbBaseSwitch/BbBaseSwitch.vue.js +0 -6
- package/dist/components/BbBaseSwitch/BbBaseSwitch.vue_vue_type_script_setup_true_lang.js +0 -146
- package/dist/components/BbBaseSwitch/types.d.ts +0 -10
- package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.d.ts +0 -19
- package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.js +0 -6
- package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue_vue_type_script_setup_true_lang.js +0 -190
- package/dist/components/BbBaseSwitchGroup/types.d.ts +0 -8
- package/dist/components/BbBaseTag/BbBaseTag.vue.d.ts +0 -50
- package/dist/components/BbBaseTag/BbBaseTag.vue.js +0 -6
- package/dist/components/BbBaseTag/BbBaseTag.vue_vue_type_script_setup_true_lang.js +0 -266
- package/dist/components/BbBaseTag/types.d.ts +0 -160
- package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.d.ts +0 -45
- package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.js +0 -6
- package/dist/components/BbBaseTextInput/BbBaseTextInput.vue_vue_type_script_setup_true_lang.js +0 -200
- package/dist/components/BbBaseTextInput/types.d.ts +0 -209
- package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.d.ts +0 -39
- package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.js +0 -6
- package/dist/components/BbBaseTextarea/BbBaseTextarea.vue_vue_type_script_setup_true_lang.js +0 -187
- package/dist/components/BbBaseTextarea/types.d.ts +0 -170
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.d.ts +0 -27
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.js +0 -6
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue_vue_type_script_setup_true_lang.js +0 -519
- package/dist/components/BbBaseTimePickerInput/types.d.ts +0 -151
- package/dist/components/CommonInputWrapper/CommonInputWrapper.vue.js +0 -6
- package/dist/components/CommonInputWrapper/CommonInputWrapper.vue_vue_type_script_setup_true_lang.js +0 -107
- /package/dist/components/{BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.d.ts → BbCalendar/CalendarMonthPanel.vue.d.ts} +0 -0
- /package/dist/components/{BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.d.ts → BbCalendar/CalendarYearPanel.vue.d.ts} +0 -0
- /package/dist/{components/BbBaseDatePicker/typeahead.d.ts → composables/useTypeahead.d.ts} +0 -0
- /package/dist/{components/BbBaseDatePicker/typeahead.js → composables/useTypeahead.js} +0 -0
package/dist/ai/BbTabs.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
- Safety level: **Consumer API**
|
|
6
6
|
- Group: **Navigation**
|
|
7
|
-
- Description: Switches between tabbed content views (shadcn-like strip;
|
|
7
|
+
- Description: Switches between tabbed content views (shadcn-like strip; the co-located BbTabsRoot / BbTabsList / BbTabsPanes exports enable split layouts).
|
|
8
8
|
- Usage rule: Prefer this component for consumer-facing implementations.
|
|
9
9
|
- Implementation source (only when the contract below is not enough): [source/BbTabs.md](./source/BbTabs.md)
|
|
10
10
|
|
|
@@ -45,12 +45,10 @@ in one component.
|
|
|
45
45
|
|
|
46
46
|
```vue
|
|
47
47
|
<template>
|
|
48
|
-
<div
|
|
49
|
-
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
50
|
-
>
|
|
48
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
51
49
|
<div class="mb-3 flex flex-col gap-0.5">
|
|
52
50
|
<p class="text-sm font-medium">Acme Checkout</p>
|
|
53
|
-
<p class="text-xs text-
|
|
51
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
54
52
|
Project · last deploy 14m ago
|
|
55
53
|
</p>
|
|
56
54
|
</div>
|
|
@@ -58,34 +56,34 @@ in one component.
|
|
|
58
56
|
<template #overview>
|
|
59
57
|
<div class="grid gap-1.5 pt-3 text-sm">
|
|
60
58
|
<p class="font-medium">Health: stable</p>
|
|
61
|
-
<p class="text-xs text-
|
|
59
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
62
60
|
Error rate 0.12% · p95 180ms · 3 open incidents
|
|
63
61
|
</p>
|
|
64
62
|
</div>
|
|
65
63
|
</template>
|
|
66
64
|
<template #activity>
|
|
67
|
-
<ul class="divide-y divide-
|
|
65
|
+
<ul class="divide-y divide-(--bb-border) pt-3">
|
|
68
66
|
<li
|
|
69
67
|
v-for="event in activity"
|
|
70
68
|
:key="event.id"
|
|
71
69
|
class="flex flex-col gap-0.5 py-2"
|
|
72
70
|
>
|
|
73
71
|
<p class="text-sm">{{ event.text }}</p>
|
|
74
|
-
<p class="text-xs text-
|
|
72
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
75
73
|
{{ event.when }}
|
|
76
74
|
</p>
|
|
77
75
|
</li>
|
|
78
76
|
</ul>
|
|
79
77
|
</template>
|
|
80
78
|
<template #members>
|
|
81
|
-
<ul class="divide-y divide-
|
|
79
|
+
<ul class="divide-y divide-(--bb-border) pt-3">
|
|
82
80
|
<li
|
|
83
81
|
v-for="member in members"
|
|
84
82
|
:key="member.email"
|
|
85
83
|
class="flex items-center justify-between gap-2 py-2 text-sm"
|
|
86
84
|
>
|
|
87
85
|
<span class="truncate">{{ member.name }}</span>
|
|
88
|
-
<span class="shrink-0 text-xs text-
|
|
86
|
+
<span class="shrink-0 text-xs text-(--bb-text-muted)">{{
|
|
89
87
|
member.role
|
|
90
88
|
}}</span>
|
|
91
89
|
</li>
|
|
@@ -136,23 +134,21 @@ dynamic-name slot instead of writing one block per key:
|
|
|
136
134
|
**Dynamic pane slots from generated items**
|
|
137
135
|
|
|
138
136
|
```vue
|
|
139
|
-
<div
|
|
140
|
-
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
141
|
-
>
|
|
137
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
142
138
|
<BbTabs
|
|
143
139
|
compact
|
|
144
140
|
:items="[
|
|
145
141
|
{ key: 'draft', label: 'Draft' },
|
|
146
|
-
{ key: '
|
|
142
|
+
{ key: 'review', label: 'In review' },
|
|
147
143
|
{ key: 'published', label: 'Published' },
|
|
148
144
|
]"
|
|
149
145
|
>
|
|
150
146
|
<template
|
|
151
|
-
v-for="stage in ['draft', '
|
|
147
|
+
v-for="stage in ['draft', 'review', 'published']"
|
|
152
148
|
:key="stage"
|
|
153
149
|
#[stage]
|
|
154
150
|
>
|
|
155
|
-
<p class="pt-3 text-sm capitalize text-
|
|
151
|
+
<p class="pt-3 text-sm capitalize text-(--bb-text-muted)">{{ stage }} documents.</p>
|
|
156
152
|
</template>
|
|
157
153
|
</BbTabs>
|
|
158
154
|
</div>
|
|
@@ -172,9 +168,7 @@ button or link inside a label — the trigger is already the control).
|
|
|
172
168
|
|
|
173
169
|
```vue
|
|
174
170
|
<template>
|
|
175
|
-
<div
|
|
176
|
-
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
177
|
-
>
|
|
171
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
178
172
|
<BbTabs v-model="active" compact :items="tabs">
|
|
179
173
|
<template #label:inbox="{ text }">
|
|
180
174
|
<span class="inline-flex items-center gap-1.5">
|
|
@@ -183,26 +177,26 @@ button or link inside a label — the trigger is already the control).
|
|
|
183
177
|
</span>
|
|
184
178
|
</template>
|
|
185
179
|
<template #inbox>
|
|
186
|
-
<ul class="divide-y divide-
|
|
180
|
+
<ul class="divide-y divide-(--bb-border) pt-3">
|
|
187
181
|
<li
|
|
188
182
|
v-for="thread in inbox"
|
|
189
183
|
:key="thread.id"
|
|
190
184
|
class="flex flex-col gap-0.5 py-2"
|
|
191
185
|
>
|
|
192
186
|
<p class="text-sm font-medium">{{ thread.subject }}</p>
|
|
193
|
-
<p class="text-xs text-
|
|
187
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
194
188
|
{{ thread.from }} · {{ thread.when }}
|
|
195
189
|
</p>
|
|
196
190
|
</li>
|
|
197
191
|
</ul>
|
|
198
192
|
</template>
|
|
199
193
|
<template #sent>
|
|
200
|
-
<p class="pt-3 text-sm text-
|
|
194
|
+
<p class="pt-3 text-sm text-(--bb-text-muted)">
|
|
201
195
|
12 messages sent this week.
|
|
202
196
|
</p>
|
|
203
197
|
</template>
|
|
204
198
|
<template #spam>
|
|
205
|
-
<p class="pt-3 text-sm text-
|
|
199
|
+
<p class="pt-3 text-sm text-(--bb-text-muted)">
|
|
206
200
|
3 filtered messages · last scan 2h ago.
|
|
207
201
|
</p>
|
|
208
202
|
</template>
|
|
@@ -255,7 +249,7 @@ const inbox = [
|
|
|
255
249
|
.bb-badge.bb-badge--soft-blue {
|
|
256
250
|
--accent: #2563eb;
|
|
257
251
|
--bg: color-mix(in oklab, var(--accent) 15%, var(--bb-panel));
|
|
258
|
-
--
|
|
252
|
+
--fg: color-mix(in oklab, var(--accent) 80%, var(--bb-text));
|
|
259
253
|
--border-width: 1px;
|
|
260
254
|
--border-color: color-mix(in oklab, var(--accent) 25%, var(--bb-panel));
|
|
261
255
|
--ring: color-mix(in oklab, var(--accent) 45%, transparent);
|
|
@@ -290,12 +284,10 @@ the Audience and Schedule tabs:
|
|
|
290
284
|
|
|
291
285
|
```vue
|
|
292
286
|
<template>
|
|
293
|
-
<div
|
|
294
|
-
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
295
|
-
>
|
|
287
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
296
288
|
<div class="mb-3 flex flex-col gap-0.5">
|
|
297
289
|
<p class="text-sm font-medium">Product announcement</p>
|
|
298
|
-
<p class="text-xs text-
|
|
290
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
299
291
|
Draft · scheduled for Tue 09:00 local
|
|
300
292
|
</p>
|
|
301
293
|
</div>
|
|
@@ -320,7 +312,7 @@ the Audience and Schedule tabs:
|
|
|
320
312
|
</div>
|
|
321
313
|
</template>
|
|
322
314
|
<template #audience>
|
|
323
|
-
<p class="pt-3 text-sm text-
|
|
315
|
+
<p class="pt-3 text-sm text-(--bb-text-muted)">
|
|
324
316
|
Sending to
|
|
325
317
|
<span class="font-medium tabular-nums">{{
|
|
326
318
|
recipients.toLocaleString()
|
|
@@ -329,7 +321,7 @@ the Audience and Schedule tabs:
|
|
|
329
321
|
</p>
|
|
330
322
|
</template>
|
|
331
323
|
<template #schedule>
|
|
332
|
-
<p class="pt-3 text-sm text-
|
|
324
|
+
<p class="pt-3 text-sm text-(--bb-text-muted)">
|
|
333
325
|
Queued for Tuesday 09:00 in each recipient's local timezone.
|
|
334
326
|
</p>
|
|
335
327
|
</template>
|
|
@@ -379,12 +371,10 @@ nothing when you flip back:
|
|
|
379
371
|
|
|
380
372
|
```vue
|
|
381
373
|
<template>
|
|
382
|
-
<div
|
|
383
|
-
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
384
|
-
>
|
|
374
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
385
375
|
<div class="mb-3 flex flex-col gap-0.5">
|
|
386
376
|
<p class="text-sm font-medium">Release notes</p>
|
|
387
|
-
<p class="text-xs text-
|
|
377
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
388
378
|
Markdown draft · preview before publishing.
|
|
389
379
|
</p>
|
|
390
380
|
</div>
|
|
@@ -405,14 +395,12 @@ nothing when you flip back:
|
|
|
405
395
|
</div>
|
|
406
396
|
</template>
|
|
407
397
|
<template #preview>
|
|
408
|
-
<div class="grid gap-1.5
|
|
398
|
+
<div class="grid gap-1.5 pt-3 text-sm whitespace-pre-line">
|
|
409
399
|
<template v-if="draft.trim()">
|
|
410
400
|
<p class="font-medium">{{ previewTitle }}</p>
|
|
411
|
-
<p class="text-
|
|
401
|
+
<p class="text-(--bb-text-muted)">{{ previewBody }}</p>
|
|
412
402
|
</template>
|
|
413
|
-
<p v-else class="text-
|
|
414
|
-
Nothing to preview.
|
|
415
|
-
</p>
|
|
403
|
+
<p v-else class="text-(--bb-text-muted)">Nothing to preview.</p>
|
|
416
404
|
</div>
|
|
417
405
|
</template>
|
|
418
406
|
</BbTabs>
|
|
@@ -470,12 +458,10 @@ active section stays in the URL without flooding Back history:
|
|
|
470
458
|
|
|
471
459
|
```vue
|
|
472
460
|
<template>
|
|
473
|
-
<div
|
|
474
|
-
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
475
|
-
>
|
|
461
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
476
462
|
<div class="mb-3 flex flex-col gap-0.5">
|
|
477
463
|
<p class="text-sm font-medium">Workspace settings</p>
|
|
478
|
-
<p class="text-xs text-
|
|
464
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
479
465
|
Northwind Billing · changes save per section.
|
|
480
466
|
</p>
|
|
481
467
|
</div>
|
|
@@ -511,7 +497,7 @@ active section stays in the URL without flooding Back history:
|
|
|
511
497
|
</div>
|
|
512
498
|
</template>
|
|
513
499
|
<template #members>
|
|
514
|
-
<ul class="divide-y divide-
|
|
500
|
+
<ul class="divide-y divide-(--bb-border) pt-3">
|
|
515
501
|
<li
|
|
516
502
|
v-for="member in members"
|
|
517
503
|
:key="member.email"
|
|
@@ -519,11 +505,11 @@ active section stays in the URL without flooding Back history:
|
|
|
519
505
|
>
|
|
520
506
|
<span class="min-w-0 truncate">
|
|
521
507
|
<span class="font-medium">{{ member.name }}</span>
|
|
522
|
-
<span class="text-xs text-
|
|
508
|
+
<span class="text-xs text-(--bb-text-muted)">
|
|
523
509
|
· {{ member.email }}</span
|
|
524
510
|
>
|
|
525
511
|
</span>
|
|
526
|
-
<span class="shrink-0 text-xs text-
|
|
512
|
+
<span class="shrink-0 text-xs text-(--bb-text-muted)">{{
|
|
527
513
|
member.role
|
|
528
514
|
}}</span>
|
|
529
515
|
</li>
|
|
@@ -532,7 +518,7 @@ active section stays in the URL without flooding Back history:
|
|
|
532
518
|
<template #billing>
|
|
533
519
|
<div class="grid gap-1.5 pt-3">
|
|
534
520
|
<p class="text-sm font-medium">Pro · €49 / month</p>
|
|
535
|
-
<p class="text-xs text-
|
|
521
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
536
522
|
Next invoice Jul 28, 2026 · Visa ···· 4242
|
|
537
523
|
</p>
|
|
538
524
|
<div class="pt-1">
|
|
@@ -577,9 +563,7 @@ const onSaveGeneral = async () => {
|
|
|
577
563
|
**Full-width strip with a disabled tab**
|
|
578
564
|
|
|
579
565
|
```vue
|
|
580
|
-
<div
|
|
581
|
-
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
582
|
-
>
|
|
566
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
583
567
|
<BbTabs
|
|
584
568
|
block
|
|
585
569
|
compact
|
|
@@ -589,9 +573,9 @@ const onSaveGeneral = async () => {
|
|
|
589
573
|
{ key: 'billing', label: 'Billing', disabled: true },
|
|
590
574
|
]"
|
|
591
575
|
>
|
|
592
|
-
<template #summary><p class="pt-3 text-sm text-
|
|
593
|
-
<template #integrations><p class="pt-3 text-sm text-
|
|
594
|
-
<template #billing><p class="pt-3 text-sm text-
|
|
576
|
+
<template #summary><p class="pt-3 text-sm text-(--bb-text-muted)">Environment status at a glance.</p></template>
|
|
577
|
+
<template #integrations><p class="pt-3 text-sm text-(--bb-text-muted)">Connected services.</p></template>
|
|
578
|
+
<template #billing><p class="pt-3 text-sm text-(--bb-text-muted)">Locked on this plan.</p></template>
|
|
595
579
|
</BbTabs>
|
|
596
580
|
</div>
|
|
597
581
|
```
|
|
@@ -599,9 +583,7 @@ const onSaveGeneral = async () => {
|
|
|
599
583
|
**Vertical, compact strip**
|
|
600
584
|
|
|
601
585
|
```vue
|
|
602
|
-
<div
|
|
603
|
-
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
604
|
-
>
|
|
586
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
605
587
|
<BbTabs
|
|
606
588
|
compact
|
|
607
589
|
direction="vertical"
|
|
@@ -611,9 +593,9 @@ const onSaveGeneral = async () => {
|
|
|
611
593
|
{ key: 'api', label: 'API keys' },
|
|
612
594
|
]"
|
|
613
595
|
>
|
|
614
|
-
<template #general><p class="px-3 text-sm text-
|
|
615
|
-
<template #security><p class="px-3 text-sm text-
|
|
616
|
-
<template #api><p class="px-3 text-sm text-
|
|
596
|
+
<template #general><p class="px-3 text-sm text-(--bb-text-muted)">Workspace basics.</p></template>
|
|
597
|
+
<template #security><p class="px-3 text-sm text-(--bb-text-muted)">Sessions and 2FA.</p></template>
|
|
598
|
+
<template #api><p class="px-3 text-sm text-(--bb-text-muted)">Personal access tokens.</p></template>
|
|
617
599
|
</BbTabs>
|
|
618
600
|
</div>
|
|
619
601
|
```
|
|
@@ -623,7 +605,286 @@ width — set `style="--max-w: 160px"` on the list and long labels ellipse inste
|
|
|
623
605
|
of widening the column. The strip never exceeds its container. Sizing otherwise
|
|
624
606
|
follows the design tokens (`--bb-control-h`, `--bb-radius`, `--bb-fs`); there is
|
|
625
607
|
no numeric size prop and no global tabs config to set — tokens and the `block` /
|
|
626
|
-
`compact` / `direction` props are the whole surface.
|
|
608
|
+
`compact` / `direction` / `variant` props are the whole surface.
|
|
609
|
+
|
|
610
|
+
### Variants
|
|
611
|
+
|
|
612
|
+
`variant` picks the strip's look and nothing else — items, `v-model`, keyboard
|
|
613
|
+
navigation, panes, `block` / `compact` / `direction` all behave the same under
|
|
614
|
+
every variant. Three ship:
|
|
615
|
+
|
|
616
|
+
- **`pill`** (default) — the segmented strip: a muted rounded bar with a raised
|
|
617
|
+
pill sliding under the active trigger. Reach for it to switch _views of the
|
|
618
|
+
same content_ (Board / Table, Code / Preview).
|
|
619
|
+
- **`line`** — triggers on a thin baseline, a sliding underline under the active
|
|
620
|
+
one (on the side edge when `direction="vertical"`), active label bold. Reach
|
|
621
|
+
for it to navigate _sections of a page_ (Overview / Activity / Settings).
|
|
622
|
+
- **`none`** — behaviour and structure only, no chrome: no strip, no indicator
|
|
623
|
+
paint, labels inherit the host's colour and weight. Reach for it when the
|
|
624
|
+
design is yours, styled through `pt` and classes, like `BbButton`'s `none`.
|
|
625
|
+
|
|
626
|
+
**pill — switching views of one list**
|
|
627
|
+
|
|
628
|
+
```vue
|
|
629
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
630
|
+
<BbTabs
|
|
631
|
+
:items="[
|
|
632
|
+
{ key: 'board', label: 'Board' },
|
|
633
|
+
{ key: 'table', label: 'Table' },
|
|
634
|
+
{ key: 'calendar', label: 'Calendar' },
|
|
635
|
+
]"
|
|
636
|
+
>
|
|
637
|
+
<template #board><p class="pt-3 text-sm text-(--bb-text-muted)">Cards by status.</p></template>
|
|
638
|
+
<template #table><p class="pt-3 text-sm text-(--bb-text-muted)">One row per task.</p></template>
|
|
639
|
+
<template #calendar><p class="pt-3 text-sm text-(--bb-text-muted)">Due dates on a month grid.</p></template>
|
|
640
|
+
</BbTabs>
|
|
641
|
+
</div>
|
|
642
|
+
```
|
|
643
|
+
|
|
644
|
+
**line — navigating the sections of a record**
|
|
645
|
+
|
|
646
|
+
```vue
|
|
647
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
648
|
+
<BbTabs
|
|
649
|
+
:items="[
|
|
650
|
+
{ key: 'overview', label: 'Overview' },
|
|
651
|
+
{ key: 'activity', label: 'Activity' },
|
|
652
|
+
{ key: 'settings', label: 'Settings' },
|
|
653
|
+
]"
|
|
654
|
+
variant="line"
|
|
655
|
+
>
|
|
656
|
+
<template #overview><p class="pt-3 text-sm text-(--bb-text-muted)">Status, owner, next step.</p></template>
|
|
657
|
+
<template #activity><p class="pt-3 text-sm text-(--bb-text-muted)">Everything that happened, newest first.</p></template>
|
|
658
|
+
<template #settings><p class="pt-3 text-sm text-(--bb-text-muted)">Notifications and access.</p></template>
|
|
659
|
+
</BbTabs>
|
|
660
|
+
</div>
|
|
661
|
+
```
|
|
662
|
+
|
|
663
|
+
`line` composes with everything else: `compact` drops the baseline strip to
|
|
664
|
+
28px, `direction="vertical"` moves the bar to the side edge of a column strip,
|
|
665
|
+
and the bar keeps sliding — it is the same measured element as the pill.
|
|
666
|
+
|
|
667
|
+
**line, vertical and compact**
|
|
668
|
+
|
|
669
|
+
```vue
|
|
670
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
671
|
+
<BbTabs
|
|
672
|
+
compact
|
|
673
|
+
direction="vertical"
|
|
674
|
+
:items="[
|
|
675
|
+
{ key: 'profile', label: 'Profile' },
|
|
676
|
+
{ key: 'sessions', label: 'Sessions' },
|
|
677
|
+
{ key: 'tokens', label: 'API tokens' },
|
|
678
|
+
]"
|
|
679
|
+
variant="line"
|
|
680
|
+
>
|
|
681
|
+
<template #profile><p class="px-3 text-sm text-(--bb-text-muted)">Name, avatar, locale.</p></template>
|
|
682
|
+
<template #sessions><p class="px-3 text-sm text-(--bb-text-muted)">Signed-in devices.</p></template>
|
|
683
|
+
<template #tokens><p class="px-3 text-sm text-(--bb-text-muted)">Personal access tokens.</p></template>
|
|
684
|
+
</BbTabs>
|
|
685
|
+
</div>
|
|
686
|
+
```
|
|
687
|
+
|
|
688
|
+
`none` renders the same tablist with no paint of its own, so the look is
|
|
689
|
+
whatever you put on the parts — here the trigger gets a bottom border while
|
|
690
|
+
active through `pt:item:active`:
|
|
691
|
+
|
|
692
|
+
**none — your own look through pt**
|
|
693
|
+
|
|
694
|
+
```vue
|
|
695
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
696
|
+
<BbTabs
|
|
697
|
+
:items="[
|
|
698
|
+
{ key: 'week', label: 'This week' },
|
|
699
|
+
{ key: 'month', label: 'This month' },
|
|
700
|
+
{ key: 'year', label: 'This year' },
|
|
701
|
+
]"
|
|
702
|
+
pt:item="border-b-2 border-transparent text-(--bb-text-muted) uppercase tracking-wide text-xs"
|
|
703
|
+
pt:item:active="border-(--bb-text) text-(--bb-text)"
|
|
704
|
+
variant="none"
|
|
705
|
+
>
|
|
706
|
+
<template #week><p class="pt-3 text-sm text-(--bb-text-muted)">7 days of activity.</p></template>
|
|
707
|
+
<template #month><p class="pt-3 text-sm text-(--bb-text-muted)">30 days of activity.</p></template>
|
|
708
|
+
<template #year><p class="pt-3 text-sm text-(--bb-text-muted)">12 months of activity.</p></template>
|
|
709
|
+
</BbTabs>
|
|
710
|
+
</div>
|
|
711
|
+
```
|
|
712
|
+
|
|
713
|
+
On the split layout `variant` set on `BbTabsRoot` is the default for every
|
|
714
|
+
`BbTabsList` under it, and a list can take its own `variant` to differ.
|
|
715
|
+
|
|
716
|
+
#### The token model
|
|
717
|
+
|
|
718
|
+
Every variant — shipped or registered — is a preset of one set of custom
|
|
719
|
+
properties declared on `.bb-tabs-list`. Set them on the strip (or on a class
|
|
720
|
+
you put on it) to retune one instance; set them on a `.bb-tabs-list--<name>`
|
|
721
|
+
class to define a variant. `pill` is the base values; `line` and `none` are the
|
|
722
|
+
presets shown in the last two columns.
|
|
723
|
+
|
|
724
|
+
| Custom property | What it paints | `line` | `none` |
|
|
725
|
+
| ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | --------------------- | ------------- |
|
|
726
|
+
| **Strip** — `--list-bg` | the bar behind the triggers | `transparent` | `transparent` |
|
|
727
|
+
| `--list-border` | the strip's edge line: a baseline under the triggers (beside them when vertical), `--bb-border-w` thick, painted inside the strip | `var(--bb-border)` | — |
|
|
728
|
+
| `--p` | inner padding — the gutter the indicator sits in and the scroll inset | `0px` | `0px` |
|
|
729
|
+
| `--list-r`, `--list-h` | corners, min height | `--list-r: 0px` | `0px` |
|
|
730
|
+
| **Triggers** — `--trigger-gap` | space between triggers | — | — |
|
|
731
|
+
| `--trigger-px`, `--trigger-min-h`, `--trigger-r`, `--fs` | side padding, min height (derived from `--list-h` and `--p`), corners (concentric inside `--list-r`), label size | `--trigger-r` small | — |
|
|
732
|
+
| **Labels** — `--list-fg`, `--hover-fg` | inactive and hovered label colour | — | `inherit` |
|
|
733
|
+
| `--active-fg`, `--active-fw` | active label colour and weight (inactive labels are `500`) | `--active-fw: 600` | `inherit` |
|
|
734
|
+
| **Indicator** — `--indicator-bg`, `--indicator-border`, `--indicator-r` | the sliding element's fill, edge and corners | primary fill, no edge | transparent |
|
|
735
|
+
| `--indicator-h` | its thickness: height (width when vertical). `initial` fills the whole trigger box — the pill; `2px` is a bar on the bottom/side edge | `2px` | — |
|
|
736
|
+
| `--indicator-inset` | inset from the trigger box — shrinks a pill; a bar keeps its thickness, shortens by it at both ends and floats it above the edge | — | — |
|
|
737
|
+
| `--indicator-shadow`, `--elev` | the indicator's own lift, and the theme's resting lift composed under it | `none` | `none` |
|
|
738
|
+
|
|
739
|
+
A text-only look with no underline is `line` with `--indicator-h: 0px`; a
|
|
740
|
+
thicker bar is `--indicator-h: 3px`; a bar the width of the label rather than
|
|
741
|
+
the trigger is `--indicator-inset: var(--trigger-px)`. The generated contract
|
|
742
|
+
lists every property with its default.
|
|
743
|
+
|
|
744
|
+
#### Registered variants
|
|
745
|
+
|
|
746
|
+
The two looks other libraries ship as `pills` and `outline` are a registered
|
|
747
|
+
name and a token block away. Register the name in the build plugin so it
|
|
748
|
+
type-checks —
|
|
749
|
+
|
|
750
|
+
```ts
|
|
751
|
+
// vite.config.ts (or the `bitboss` key of nuxt.config.ts)
|
|
752
|
+
bitbossUi({ tabsVariants: ['soft', 'outline'] });
|
|
753
|
+
```
|
|
754
|
+
|
|
755
|
+
— then give the class hook `.bb-tabs-list--<name>` its tokens in a stylesheet
|
|
756
|
+
loaded after the library's, and use `variant="<name>"`. **`soft`** — no strip,
|
|
757
|
+
the active trigger is a filled tonal pill, the rest is plain text; the whole
|
|
758
|
+
recipe is the `<style>` of the example:
|
|
759
|
+
|
|
760
|
+
**soft — a registered tonal-pill variant**
|
|
761
|
+
|
|
762
|
+
```vue
|
|
763
|
+
<template>
|
|
764
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
765
|
+
<p class="mb-2 text-xs text-(--bb-text-muted)">Inbox filters</p>
|
|
766
|
+
<!-- `soft` is a registered variant (`tabsVariants: ['soft']`); its look is
|
|
767
|
+
the token block in this file's <style>. -->
|
|
768
|
+
<BbTabs v-model="filter" compact :items="filters" variant="soft">
|
|
769
|
+
<template #all>
|
|
770
|
+
<p class="pt-3 text-sm text-(--bb-text-muted)">
|
|
771
|
+
Every conversation, newest first.
|
|
772
|
+
</p>
|
|
773
|
+
</template>
|
|
774
|
+
<template #unread>
|
|
775
|
+
<p class="pt-3 text-sm text-(--bb-text-muted)">
|
|
776
|
+
12 conversations waiting for a reply.
|
|
777
|
+
</p>
|
|
778
|
+
</template>
|
|
779
|
+
<template #starred>
|
|
780
|
+
<p class="pt-3 text-sm text-(--bb-text-muted)">
|
|
781
|
+
Pinned threads you come back to.
|
|
782
|
+
</p>
|
|
783
|
+
</template>
|
|
784
|
+
</BbTabs>
|
|
785
|
+
</div>
|
|
786
|
+
</template>
|
|
787
|
+
<script setup lang="ts">
|
|
788
|
+
import { ref } from 'vue';
|
|
789
|
+
import { BbTabs } from 'bitboss-ui';
|
|
790
|
+
import type { BbTabsItem } from 'bitboss-ui';
|
|
791
|
+
|
|
792
|
+
type Filter = 'all' | 'unread' | 'starred';
|
|
793
|
+
|
|
794
|
+
const filters: Array<BbTabsItem<Filter>> = [
|
|
795
|
+
{ key: 'all', label: 'All' },
|
|
796
|
+
{ key: 'unread', label: 'Unread' },
|
|
797
|
+
{ key: 'starred', label: 'Starred' },
|
|
798
|
+
];
|
|
799
|
+
const filter = ref<Filter>('unread');
|
|
800
|
+
</script>
|
|
801
|
+
<style>
|
|
802
|
+
/* `soft` — no strip, the active trigger is a filled tonal pill, the rest is
|
|
803
|
+
plain text. The whole recipe: the class hook plus the strip's own tokens. */
|
|
804
|
+
.bb-tabs-list--soft {
|
|
805
|
+
--list-bg: transparent;
|
|
806
|
+
--trigger-gap: 4px;
|
|
807
|
+
--trigger-r: 999px;
|
|
808
|
+
--indicator-bg: color-mix(in oklab, var(--bb-primary) 15%, transparent);
|
|
809
|
+
--indicator-border: transparent;
|
|
810
|
+
--indicator-shadow: none;
|
|
811
|
+
--elev: none;
|
|
812
|
+
--active-fg: var(--bb-primary);
|
|
813
|
+
--active-fw: 600;
|
|
814
|
+
}
|
|
815
|
+
</style>
|
|
816
|
+
```
|
|
817
|
+
|
|
818
|
+
**`outline`** — a 1px-framed strip with no fill and an outlined indicator
|
|
819
|
+
sliding inside it. The frame is the one thing the token model does not draw
|
|
820
|
+
(`--list-border` is a baseline, not a box), so this recipe adds one rule on the
|
|
821
|
+
tablist beside its tokens:
|
|
822
|
+
|
|
823
|
+
**outline — a registered framed variant**
|
|
824
|
+
|
|
825
|
+
```vue
|
|
826
|
+
<template>
|
|
827
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
828
|
+
<p class="mb-2 text-xs text-(--bb-text-muted)">Editor panel</p>
|
|
829
|
+
<!-- `outline` is a registered variant (`tabsVariants: ['outline']`); its
|
|
830
|
+
look is the token block in this file's <style>. -->
|
|
831
|
+
<BbTabs v-model="panel" compact :items="panels" variant="outline">
|
|
832
|
+
<template #code>
|
|
833
|
+
<pre
|
|
834
|
+
class="mt-3 rounded-(--bb-radius) bg-(--bb-muted) p-2 text-xs"
|
|
835
|
+
><code>const total = lines.reduce((sum, l) => sum + l.amount, 0);</code></pre>
|
|
836
|
+
</template>
|
|
837
|
+
<template #preview>
|
|
838
|
+
<p class="pt-3 text-sm text-(--bb-text-muted)">
|
|
839
|
+
Total: <span class="font-medium text-(--bb-text)">€ 1,240.00</span>
|
|
840
|
+
</p>
|
|
841
|
+
</template>
|
|
842
|
+
<template #diff>
|
|
843
|
+
<p class="pt-3 text-sm text-(--bb-text-muted)">
|
|
844
|
+
2 lines changed since the last save.
|
|
845
|
+
</p>
|
|
846
|
+
</template>
|
|
847
|
+
</BbTabs>
|
|
848
|
+
</div>
|
|
849
|
+
</template>
|
|
850
|
+
<script setup lang="ts">
|
|
851
|
+
import { ref } from 'vue';
|
|
852
|
+
import { BbTabs } from 'bitboss-ui';
|
|
853
|
+
import type { BbTabsItem } from 'bitboss-ui';
|
|
854
|
+
|
|
855
|
+
type Panel = 'code' | 'preview' | 'diff';
|
|
856
|
+
|
|
857
|
+
const panels: Array<BbTabsItem<Panel>> = [
|
|
858
|
+
{ key: 'code', label: 'Code' },
|
|
859
|
+
{ key: 'preview', label: 'Preview' },
|
|
860
|
+
{ key: 'diff', label: 'Diff' },
|
|
861
|
+
];
|
|
862
|
+
const panel = ref<Panel>('code');
|
|
863
|
+
</script>
|
|
864
|
+
<style>
|
|
865
|
+
/* `outline` — a 1px-framed strip with no fill, and an outlined indicator (a
|
|
866
|
+
border, no lift) sliding inside it. Tokens for the paint; one rule for the
|
|
867
|
+
frame, which the token model does not draw (`--list-border` is the
|
|
868
|
+
baseline of a `line` strip, not a box). */
|
|
869
|
+
.bb-tabs-list--outline {
|
|
870
|
+
--list-bg: transparent;
|
|
871
|
+
--indicator-bg: transparent;
|
|
872
|
+
--indicator-border: var(--bb-text-muted);
|
|
873
|
+
--indicator-shadow: none;
|
|
874
|
+
--elev: none;
|
|
875
|
+
--active-fg: var(--bb-text);
|
|
876
|
+
--active-fw: 600;
|
|
877
|
+
}
|
|
878
|
+
.bb-tabs-list--outline .bb-tabs-list__tablist {
|
|
879
|
+
box-shadow: inset 0 0 0 var(--bb-border-w) var(--bb-border);
|
|
880
|
+
}
|
|
881
|
+
</style>
|
|
882
|
+
```
|
|
883
|
+
|
|
884
|
+
An unregistered name fails `vue-tsc`, like every other variant registry (see
|
|
885
|
+
the [installation guide](./guides/installation-and-plugin-setup.md), _Variant
|
|
886
|
+
registries_). The class is plain interpolation at runtime, so a one-off can be
|
|
887
|
+
forced with a cast — register it instead.
|
|
627
888
|
|
|
628
889
|
### Overflowing strips and scroll affordances
|
|
629
890
|
|
|
@@ -640,12 +901,10 @@ ends.
|
|
|
640
901
|
|
|
641
902
|
```vue
|
|
642
903
|
<template>
|
|
643
|
-
<div
|
|
644
|
-
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
645
|
-
>
|
|
904
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
646
905
|
<div class="mb-3 flex flex-col gap-0.5">
|
|
647
906
|
<p class="text-sm font-medium">Release timeline</p>
|
|
648
|
-
<p class="text-xs text-
|
|
907
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
649
908
|
Monthly notes · scroll arrows when the strip overflows.
|
|
650
909
|
</p>
|
|
651
910
|
</div>
|
|
@@ -672,8 +931,19 @@ ends.
|
|
|
672
931
|
@click="scroll('right')"
|
|
673
932
|
/>
|
|
674
933
|
</template>
|
|
675
|
-
|
|
676
|
-
|
|
934
|
+
<!--
|
|
935
|
+
`slotKey(...)`, never the raw key. A pane's slot name is the
|
|
936
|
+
NORMALIZED key: `v3.0` becomes `v3_0`, so `#[release.key]` would
|
|
937
|
+
name a slot that never matches and every pane would silently render
|
|
938
|
+
empty. The keys here carry a dot on purpose — with slug-safe keys
|
|
939
|
+
(`v1`…`v9`) the mistake is invisible.
|
|
940
|
+
-->
|
|
941
|
+
<template
|
|
942
|
+
v-for="release in releases"
|
|
943
|
+
:key="release.key"
|
|
944
|
+
#[slotKey(release.key)]
|
|
945
|
+
>
|
|
946
|
+
<p class="pt-3 text-sm text-(--bb-text-muted)">
|
|
677
947
|
{{ release.label }} shipped the design-token overhaul and the tabs
|
|
678
948
|
keyboard-navigation pass.
|
|
679
949
|
</p>
|
|
@@ -683,7 +953,7 @@ ends.
|
|
|
683
953
|
</template>
|
|
684
954
|
<script setup lang="ts">
|
|
685
955
|
import { ref } from 'vue';
|
|
686
|
-
import { BbButton, BbTabs } from 'bitboss-ui';
|
|
956
|
+
import { BbButton, BbTabs, slotKey } from 'bitboss-ui';
|
|
687
957
|
import type { BbTabsItem } from 'bitboss-ui';
|
|
688
958
|
|
|
689
959
|
// A block strip with more triggers than fit: the pill and scroll-into-view keep
|
|
@@ -700,12 +970,14 @@ const months = [
|
|
|
700
970
|
'August',
|
|
701
971
|
'September',
|
|
702
972
|
];
|
|
973
|
+
// Realistic release tags: `v3.0` … `v3.8`. The dot is what makes the
|
|
974
|
+
// `slotKey` call in the template load-bearing (see the note there).
|
|
703
975
|
const releases: BbTabsItem[] = months.map((label, index) => ({
|
|
704
|
-
key: `
|
|
705
|
-
label: `${label}
|
|
976
|
+
key: `v3.${index}`,
|
|
977
|
+
label: `${label} · v3.${index}`,
|
|
706
978
|
}));
|
|
707
979
|
|
|
708
|
-
const active = ref('
|
|
980
|
+
const active = ref('v3.0');
|
|
709
981
|
</script>
|
|
710
982
|
```
|
|
711
983
|
|
|
@@ -732,12 +1004,10 @@ context; use nesting freely.
|
|
|
732
1004
|
|
|
733
1005
|
```vue
|
|
734
1006
|
<template>
|
|
735
|
-
<div
|
|
736
|
-
class="max-w-md rounded-[var(--bb-radius)] border border-[color:var(--bb-border)] p-3"
|
|
737
|
-
>
|
|
1007
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
738
1008
|
<div class="mb-3 flex flex-col gap-0.5">
|
|
739
1009
|
<p class="text-sm font-medium">Acme Checkout</p>
|
|
740
|
-
<p class="text-xs text-
|
|
1010
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
741
1011
|
Workspace · Prev/Next via root slot
|
|
742
1012
|
</p>
|
|
743
1013
|
</div>
|
|
@@ -764,21 +1034,21 @@ context; use nesting freely.
|
|
|
764
1034
|
</BbButton>
|
|
765
1035
|
</div>
|
|
766
1036
|
</div>
|
|
767
|
-
<hr class="my-3 border-
|
|
1037
|
+
<hr class="my-3 border-(--bb-border)" />
|
|
768
1038
|
<BbTabsPanes>
|
|
769
1039
|
<template #overview>
|
|
770
|
-
<p class="text-sm text-
|
|
1040
|
+
<p class="text-sm text-(--bb-text-muted)">
|
|
771
1041
|
Health stable · owners Alex + Sam · objective: cut checkout
|
|
772
1042
|
latency 20%.
|
|
773
1043
|
</p>
|
|
774
1044
|
</template>
|
|
775
1045
|
<template #activity>
|
|
776
|
-
<p class="text-sm text-
|
|
1046
|
+
<p class="text-sm text-(--bb-text-muted)">
|
|
777
1047
|
Shipped billing retries; fixed avatar upload timeout.
|
|
778
1048
|
</p>
|
|
779
1049
|
</template>
|
|
780
1050
|
<template #members>
|
|
781
|
-
<p class="text-sm text-
|
|
1051
|
+
<p class="text-sm text-(--bb-text-muted)">
|
|
782
1052
|
14 editors, 23 viewers, 3 billing admins.
|
|
783
1053
|
</p>
|
|
784
1054
|
</template>
|
|
@@ -841,7 +1111,7 @@ the tabs jumps straight to the Security section:
|
|
|
841
1111
|
```vue
|
|
842
1112
|
<template>
|
|
843
1113
|
<div
|
|
844
|
-
class="max-w-md space-y-3 rounded-
|
|
1114
|
+
class="max-w-md space-y-3 rounded-(--bb-radius) border border-(--bb-border) p-3"
|
|
845
1115
|
>
|
|
846
1116
|
<div class="grid gap-2">
|
|
847
1117
|
<BbAlert
|
|
@@ -888,7 +1158,7 @@ the tabs jumps straight to the Security section:
|
|
|
888
1158
|
<template #security>
|
|
889
1159
|
<div class="grid gap-1.5 pt-3 text-sm">
|
|
890
1160
|
<p class="font-medium">Two-factor authentication</p>
|
|
891
|
-
<p class="text-xs text-
|
|
1161
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
892
1162
|
Off · last password change Mar 12, 2026 · 2 active sessions
|
|
893
1163
|
</p>
|
|
894
1164
|
<div class="pt-1">
|
|
@@ -899,15 +1169,12 @@ the tabs jumps straight to the Security section:
|
|
|
899
1169
|
</div>
|
|
900
1170
|
</template>
|
|
901
1171
|
<template #notifications>
|
|
902
|
-
<p class="pt-3 text-sm text-
|
|
1172
|
+
<p class="pt-3 text-sm text-(--bb-text-muted)">
|
|
903
1173
|
Email digests and mention alerts for alex@northwind.io.
|
|
904
1174
|
</p>
|
|
905
1175
|
</template>
|
|
906
1176
|
</BbTabs>
|
|
907
|
-
<p
|
|
908
|
-
class="text-xs text-[color:var(--bb-text-muted)]"
|
|
909
|
-
data-test="active-section"
|
|
910
|
-
>
|
|
1177
|
+
<p class="text-xs text-(--bb-text-muted)" data-test="active-section">
|
|
911
1178
|
Active section: {{ current }}
|
|
912
1179
|
</p>
|
|
913
1180
|
</div>
|
|
@@ -1067,6 +1334,134 @@ route, so it is SSR-safe and shareable:
|
|
|
1067
1334
|
<BbTabs :items="items" navigation replace query-key="section" />
|
|
1068
1335
|
```
|
|
1069
1336
|
|
|
1337
|
+
### Restyling with passthrough
|
|
1338
|
+
|
|
1339
|
+
On the split layout the same `pt` props live on `BbTabsRoot` (it owns the
|
|
1340
|
+
context the list and the panes render from); `BbTabsList` and `BbTabsPanes`
|
|
1341
|
+
declare no `pt` of their own.
|
|
1342
|
+
|
|
1343
|
+
`pt` reaches a named part with a class list — or, in the object form, a
|
|
1344
|
+
style and attributes — optionally only while a state is on. Parts: `root`,
|
|
1345
|
+
`item` (one tab trigger, a broadcast) and `panel` (one pane, a broadcast).
|
|
1346
|
+
States, per tab: `active` (the current trigger / the shown pane) and
|
|
1347
|
+
`disabled`. Tabs do not "open", so there is no `open`; the sliding indicator
|
|
1348
|
+
is not a part — its paint is the strip's tokens (see _Variants_).
|
|
1349
|
+
|
|
1350
|
+
The workspace settings above, restyled through those parts: type on
|
|
1351
|
+
`pt:item`, weight on `pt:item:active`, pane padding on `pt:panel`. A look
|
|
1352
|
+
that depends on the TAB'S OWN DATA — a tab flagged by a count you put on its
|
|
1353
|
+
descriptor — is a per-item function on `pt:item`:
|
|
1354
|
+
`:pt:item="({ item, states }) => item.badge && 'text-red-600'"`, called with
|
|
1355
|
+
the element of `items` and the states on for that tab, merged after
|
|
1356
|
+
`pt:item:active`. `panel` takes no function.
|
|
1357
|
+
|
|
1358
|
+
**pt:item and pt:panel — settings sections**
|
|
1359
|
+
|
|
1360
|
+
```vue
|
|
1361
|
+
<template>
|
|
1362
|
+
<div class="max-w-md rounded-(--bb-radius) border border-(--bb-border) p-3">
|
|
1363
|
+
<div class="mb-3 flex flex-col gap-0.5">
|
|
1364
|
+
<p class="text-sm font-medium">Workspace settings</p>
|
|
1365
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
1366
|
+
Northwind Billing · changes save per section.
|
|
1367
|
+
</p>
|
|
1368
|
+
</div>
|
|
1369
|
+
<BbTabs
|
|
1370
|
+
v-model="section"
|
|
1371
|
+
block
|
|
1372
|
+
:items="tabs"
|
|
1373
|
+
pt:item="text-sm"
|
|
1374
|
+
pt:item:active="font-semibold"
|
|
1375
|
+
pt:panel="pt-3 text-sm"
|
|
1376
|
+
>
|
|
1377
|
+
<template #general>
|
|
1378
|
+
<div class="grid gap-3">
|
|
1379
|
+
<BbTextInput
|
|
1380
|
+
v-model="org.name"
|
|
1381
|
+
compact
|
|
1382
|
+
label="Workspace name"
|
|
1383
|
+
name="workspace-name"
|
|
1384
|
+
/>
|
|
1385
|
+
<BbTextInput
|
|
1386
|
+
v-model="org.slug"
|
|
1387
|
+
compact
|
|
1388
|
+
label="URL slug"
|
|
1389
|
+
name="workspace-slug"
|
|
1390
|
+
prepend:icon="lucide:link"
|
|
1391
|
+
/>
|
|
1392
|
+
<div class="flex justify-end">
|
|
1393
|
+
<BbButton variant="primary" @click="onSaveGeneral">
|
|
1394
|
+
Save general
|
|
1395
|
+
</BbButton>
|
|
1396
|
+
</div>
|
|
1397
|
+
</div>
|
|
1398
|
+
</template>
|
|
1399
|
+
<template #members>
|
|
1400
|
+
<ul class="divide-y divide-(--bb-border)">
|
|
1401
|
+
<li
|
|
1402
|
+
v-for="member in members"
|
|
1403
|
+
:key="member.email"
|
|
1404
|
+
class="flex items-center justify-between gap-2 py-2 text-sm"
|
|
1405
|
+
>
|
|
1406
|
+
<span class="min-w-0 truncate">
|
|
1407
|
+
<span class="font-medium">{{ member.name }}</span>
|
|
1408
|
+
<span class="text-xs text-(--bb-text-muted)">
|
|
1409
|
+
· {{ member.email }}</span
|
|
1410
|
+
>
|
|
1411
|
+
</span>
|
|
1412
|
+
<span class="shrink-0 text-xs text-(--bb-text-muted)">{{
|
|
1413
|
+
member.role
|
|
1414
|
+
}}</span>
|
|
1415
|
+
</li>
|
|
1416
|
+
</ul>
|
|
1417
|
+
</template>
|
|
1418
|
+
<template #billing>
|
|
1419
|
+
<div class="grid gap-1.5">
|
|
1420
|
+
<p class="font-medium">Pro · €49 / month</p>
|
|
1421
|
+
<p class="text-xs text-(--bb-text-muted)">
|
|
1422
|
+
Next invoice Jul 28, 2026 · Visa ···· 4242
|
|
1423
|
+
</p>
|
|
1424
|
+
<div class="pt-1">
|
|
1425
|
+
<BbButton prepend:icon="lucide:credit-card" variant="outline">
|
|
1426
|
+
Manage billing
|
|
1427
|
+
</BbButton>
|
|
1428
|
+
</div>
|
|
1429
|
+
</div>
|
|
1430
|
+
</template>
|
|
1431
|
+
</BbTabs>
|
|
1432
|
+
</div>
|
|
1433
|
+
</template>
|
|
1434
|
+
|
|
1435
|
+
<script setup lang="ts">
|
|
1436
|
+
import { reactive, ref } from 'vue';
|
|
1437
|
+
import { BbButton, BbTabs, BbTextInput } from 'bitboss-ui';
|
|
1438
|
+
import type { BbTabsItem } from 'bitboss-ui';
|
|
1439
|
+
|
|
1440
|
+
type Section = 'general' | 'members' | 'billing';
|
|
1441
|
+
|
|
1442
|
+
const tabs: Array<BbTabsItem<Section>> = [
|
|
1443
|
+
{ key: 'general', label: 'General' },
|
|
1444
|
+
{ key: 'members', label: 'Members' },
|
|
1445
|
+
{ key: 'billing', label: 'Billing' },
|
|
1446
|
+
];
|
|
1447
|
+
|
|
1448
|
+
const section = ref<Section>('general');
|
|
1449
|
+
const org = reactive({ name: 'Northwind Billing', slug: 'northwind' });
|
|
1450
|
+
const members = [
|
|
1451
|
+
{ name: 'Alex Rivera', email: 'alex@northwind.io', role: 'Owner' },
|
|
1452
|
+
{ name: 'Sam Chen', email: 'sam@northwind.io', role: 'Admin' },
|
|
1453
|
+
{ name: 'Jordan Lee', email: 'jordan@northwind.io', role: 'Editor' },
|
|
1454
|
+
];
|
|
1455
|
+
|
|
1456
|
+
const onSaveGeneral = async () => {
|
|
1457
|
+
await new Promise((resolve) => setTimeout(resolve, 400));
|
|
1458
|
+
};
|
|
1459
|
+
</script>
|
|
1460
|
+
```
|
|
1461
|
+
|
|
1462
|
+
The full grammar, the merge rules and the global map are in the
|
|
1463
|
+
[passthrough guide](./guides/passthrough.md).
|
|
1464
|
+
|
|
1070
1465
|
### Works well with
|
|
1071
1466
|
|
|
1072
1467
|
- **`BbBadge` / count pills in `label` slots** — status dots and unread counts
|
|
@@ -1082,11 +1477,15 @@ route, so it is SSR-safe and shareable:
|
|
|
1082
1477
|
|
|
1083
1478
|
### Gotchas and anti-patterns
|
|
1084
1479
|
|
|
1085
|
-
- **The sliding
|
|
1086
|
-
`offsetLeft`/`offsetTop`, so render tabs in a visible,
|
|
1087
|
-
container. It settles itself on mount, resize, and font
|
|
1088
|
-
static pill until the first measurement lands —
|
|
1089
|
-
nothing to fight in demos.
|
|
1480
|
+
- **The sliding indicator is measured from layout.** It reads the active
|
|
1481
|
+
trigger's `offsetLeft`/`offsetTop`, so render tabs in a visible,
|
|
1482
|
+
normally-positioned container. It settles itself on mount, resize, and font
|
|
1483
|
+
load, and paints a static pill (or bar) until the first measurement lands —
|
|
1484
|
+
nothing to configure, and nothing to fight in demos.
|
|
1485
|
+
- **Do not fake a variant with `pt`.** An underline built from
|
|
1486
|
+
`pt:item:active="border-b-2 …"` on a `pill` strip fights the pill; use
|
|
1487
|
+
`variant="line"` (or a registered token preset) and keep `pt` for what is
|
|
1488
|
+
genuinely per-call-site.
|
|
1090
1489
|
- **Vertical strips answer Up/Down _and_ Left/Right arrows.** Up/Down is the
|
|
1091
1490
|
primary pair (matching the vertical `aria-orientation`, per the ARIA APG);
|
|
1092
1491
|
Left/Right keeps working as a forgiving extra. Horizontal strips answer
|
|
@@ -1105,8 +1504,11 @@ route, so it is SSR-safe and shareable:
|
|
|
1105
1504
|
- **Don't reach for `BbTabsRoot` by default.** If you only need a strip over its
|
|
1106
1505
|
panes, `BbTabs` is less markup and identical behavior; split only for markup
|
|
1107
1506
|
between them.
|
|
1108
|
-
- **Every tab disabled
|
|
1109
|
-
|
|
1507
|
+
- **Every tab disabled renders an inert tablist** — it does not throw. With no
|
|
1508
|
+
`modelValue` and no enabled tab there is nothing to select, so the strip
|
|
1509
|
+
renders with no active tab and no pane (`useBbTabsContext.ts:200-206` handles
|
|
1510
|
+
this deliberately). Nothing warns, so an all-disabled group looks like a
|
|
1511
|
+
rendering bug; leave at least one tab enabled, or hide the strip.
|
|
1110
1512
|
|
|
1111
1513
|
### Accessibility
|
|
1112
1514
|
|
|
@@ -1139,18 +1541,19 @@ route, so it is SSR-safe and shareable:
|
|
|
1139
1541
|
|
|
1140
1542
|
| Prop | Type | Default | Required | Description |
|
|
1141
1543
|
| --- | --- | --- | --- | --- |
|
|
1142
|
-
| `
|
|
1143
|
-
| `
|
|
1544
|
+
| `pt:<part>`, `pt:<part>:<state>`, `pt` | `PtValue` | | | Passthrough — a class list, or `{ class, style, attrs }`, bound to one named part of the component; the state form applies only while that state is on. Parts: `item`, `panel`, `root`. States: `active`, `disabled`. What each one is: _Passthrough parts and states_ below. `pt` is the object form with the same keys minus the prefix (`{ icon: '…', 'icon:loading': '…' }`). See `guides/passthrough.md`. |
|
|
1545
|
+
| `block` | `boolean \| undefined` | `false` | | Displays the component as full width. |
|
|
1546
|
+
| `compact` | `boolean \| undefined` | `false` | | Adds a CSS class that applies a compact style to the component. |
|
|
1144
1547
|
| `direction` | `"horizontal" \| "vertical" \| undefined` | `"horizontal"` | | Direction of the tabs component. |
|
|
1145
|
-
| `disableAnimateX` | `boolean \| undefined` |
|
|
1146
|
-
| `disableAnimateY` | `boolean \| undefined` |
|
|
1147
|
-
| `disabled` | `boolean \| undefined` |
|
|
1148
|
-
| `eager` | `boolean \| undefined` |
|
|
1548
|
+
| `disableAnimateX` | `boolean \| undefined` | `false` | | Disables the horizontal slide transition between tab panels (enabled by default). |
|
|
1549
|
+
| `disableAnimateY` | `boolean \| undefined` | `false` | | Disables the smooth height animation when switching between tab panels (enabled by default). |
|
|
1550
|
+
| `disabled` | `boolean \| undefined` | `false` | | Disables the component |
|
|
1551
|
+
| `eager` | `boolean \| undefined` | `false` | | Prevents rendering content before it's made visible. |
|
|
1149
1552
|
| `headers` | `Record<string, string> \| undefined` | | | Additional HTTP headers forwarded to Inertia when navigation is triggered. Only meaningful in an Inertia context. |
|
|
1150
1553
|
| `id` | `string \| undefined` | | | The identifier of the component. |
|
|
1151
1554
|
| `items` | `BbTabsItem<K>[]` | | yes | Array of items that define the tabs in the component. |
|
|
1152
1555
|
| `modelValue` | `K \| null \| undefined` | | | The current tab key. Used by v-model. |
|
|
1153
|
-
| `navigation` | `boolean \| undefined` |
|
|
1556
|
+
| `navigation` | `boolean \| undefined` | `false` | | 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. |
|
|
1154
1557
|
| `onBefore` | `(() => boolean \| void) \| undefined` | | | Inertia lifecycle hook — fired just before the request is sent. Return `false` to cancel the visit. |
|
|
1155
1558
|
| `onCancel` | `(() => void) \| undefined` | | | Inertia lifecycle hook — fired when the request is cancelled. |
|
|
1156
1559
|
| `onError` | `((errors: Record<string, string>) => void) \| undefined` | | | Inertia lifecycle hook — fired when the server returns validation errors. |
|
|
@@ -1162,8 +1565,26 @@ route, so it is SSR-safe and shareable:
|
|
|
1162
1565
|
| `preserveScroll` | `boolean \| ((props: Record<string, unknown>) => boolean) \| undefined` | | | Controls whether Inertia preserves the scroll position after navigation. Only meaningful in an Inertia context. |
|
|
1163
1566
|
| `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. |
|
|
1164
1567
|
| `queryKey` | `string \| undefined` | `"tab"` | | Defines the query key used for URL-based navigation. |
|
|
1165
|
-
| `replace` | `boolean \| undefined` |
|
|
1166
|
-
| `server` | `boolean \| undefined` |
|
|
1568
|
+
| `replace` | `boolean \| undefined` | `false` | | Replaces history rather than pushing it when changing tab. Recommended default whenever `navigation` is on: the query keeps the active tab (deep-linkable, survives reload) while Back still returns to the page the user came from, instead of … |
|
|
1569
|
+
| `server` | `boolean \| undefined` | `false` | | When true and in an Inertia context, triggers a real server-side Inertia visit instead of a client-only `history.pushState`. |
|
|
1570
|
+
| `variant` | `keyof TabsVariantRegistry \| undefined` | `"pill"` | | Look of the tab strip. `pill` is the segmented strip — a muted rounded bar with a raised pill sliding under the active trigger; `line` puts the triggers on a thin baseline with a sliding underline (on the side edge when `direction="vertical… |
|
|
1571
|
+
|
|
1572
|
+
## Passthrough parts and states
|
|
1573
|
+
|
|
1574
|
+
`pt:<part>="…"` restyles a part; `pt:<part>:<state>="…"` applies only while the state is on. A component-wide state is on for every part at once; a _per node_ state resolves on each node of a broadcast part (one row, one option, one day). Grammar and merge rules: `guides/passthrough.md`.
|
|
1575
|
+
|
|
1576
|
+
| Part | What it is |
|
|
1577
|
+
| --- | --- |
|
|
1578
|
+
| `root` | The tabs' outer element. The strip and the sliding pill are not parts. |
|
|
1579
|
+
| `item` | One tab trigger — a broadcast resolved per tab with its own `active` / `disabled`. Also takes a per-item function, called with the tab's descriptor. |
|
|
1580
|
+
| `panel` | One tab pane — a broadcast; `panel:active` is the pane on show. Takes no function. |
|
|
1581
|
+
|
|
1582
|
+
States are listed in precedence order: when two are on at once and their entries conflict, the later one wins.
|
|
1583
|
+
|
|
1584
|
+
| State | When it is on |
|
|
1585
|
+
| --- | --- |
|
|
1586
|
+
| `disabled` | Per node, on `item` only: a tab that is disabled. |
|
|
1587
|
+
| `active` | Per node, on `item` and `panel`: the selected tab's trigger and its shown pane. |
|
|
1167
1588
|
|
|
1168
1589
|
## Events
|
|
1169
1590
|
|
|
@@ -1175,6 +1596,52 @@ route, so it is SSR-safe and shareable:
|
|
|
1175
1596
|
- `header:prepend` — scope: `BbTabsScrollSlotProps` — Content rendered before the scrollable tab label list (e.g. a left scroll arrow).
|
|
1176
1597
|
- `label` — scope: `BbTabsSlotProps<K>` — Fallback slot used for all tab labels when no per-tab `label:{key}` slot is provided.
|
|
1177
1598
|
|
|
1599
|
+
## CSS custom properties
|
|
1600
|
+
|
|
1601
|
+
Set these on the element, or on a class you put on it, to retune this component alone — the sanctioned alternative to reaching past the API with `:deep()`. They are this component's own locals — a **Set on** of `pt:<part>` means the local lives on that part's element, so set it through that entry (`pt:box="[--border-color:var(--color-green-500)]"`); the global `--bb-*` theme tokens are a separate tier (see the [design-tokens guide](./guides/design-tokens.md), or the MCP `list_tokens` tool).
|
|
1602
|
+
|
|
1603
|
+
| Property | Set on | Default | What it is |
|
|
1604
|
+
| --- | --- | --- | --- |
|
|
1605
|
+
| `--gap` | `.bb-tabs` | `8px` | |
|
|
1606
|
+
| `--list-bg` | `.bb-tabs-list` | `color-mix(in oklab, var(--bb-text) 8%, transparent)` | The strip behind the triggers |
|
|
1607
|
+
| `--list-border` | `.bb-tabs-list` | `transparent` | The strip's edge line: a baseline under the triggers (beside them when vertical), --bb-border-w thick, painted inside the strip. `pill` draws none; `line` sets it to --bb-border |
|
|
1608
|
+
| `--p` | `.bb-tabs-list` | `3px` | strip inner padding — the gutter the indicator sits in, and the scroll inset |
|
|
1609
|
+
| `--list-r` | `.bb-tabs-list` | `var(--bb-radius)` | strip corners |
|
|
1610
|
+
| `--list-h` | `.bb-tabs-list` | `var(--bb-control-h)` | strip min height |
|
|
1611
|
+
| `--fs` | `.bb-tabs-list` | `var(--bb-fs)` | trigger label size |
|
|
1612
|
+
| `--trigger-gap` | `.bb-tabs-list` | `0px` | space between triggers |
|
|
1613
|
+
| `--trigger-px` | `.bb-tabs-list` | `10px` | trigger side padding |
|
|
1614
|
+
| `--trigger-r` | `.bb-tabs-list` | `calc(var(--list-r) - var(--p))` | Trigger corners, concentric inside --list-r |
|
|
1615
|
+
| `--trigger-min-h` | `.bb-tabs-list` | `calc(var(--list-h) - var(--p) * 2)` | Trigger height inside the padded strip |
|
|
1616
|
+
| `--list-fg` | `.bb-tabs-list` | `var(--bb-text-muted)` | inactive trigger label |
|
|
1617
|
+
| `--hover-fg` | `.bb-tabs-list` | `var(--bb-text)` | hovered trigger label |
|
|
1618
|
+
| `--active-fg` | `.bb-tabs-list` | `var(--bb-text)` | active trigger label |
|
|
1619
|
+
| `--active-fw` | `.bb-tabs-list` | `500` | active trigger label weight (inactive labels are 500) |
|
|
1620
|
+
| `--indicator-bg` | `.bb-tabs-list` | `var(--bb-panel)` | the indicator's fill |
|
|
1621
|
+
| `--indicator-border` | `.bb-tabs-list` | `color-mix(in oklab, var(--bb-text) 8%, transparent)` | The indicator's edge |
|
|
1622
|
+
| `--indicator-r` | `.bb-tabs-list` | `var(--trigger-r)` | The indicator's corners — the pill's, concentric inside --list-r |
|
|
1623
|
+
| `--indicator-h` | `.bb-tabs-list` | `initial` | The indicator's thickness: its height, its width on a vertical strip. `initial` fills the whole trigger box — the pill; a bar is `2px`, on the trigger's bottom edge (side edge when vertical) |
|
|
1624
|
+
| `--indicator-inset` | `.bb-tabs-list` | `0px` | Inset of the indicator from the trigger box — shrinks the pill; a bar keeps its thickness, shortens by it at both ends and floats it above the edge |
|
|
1625
|
+
| `--elev` | `.bb-tabs-list` | `var(--bb-elev)` | The theme's resting lift, composed UNDER the indicator's own shadow. Two names because they are two decisions: `--elev` is what the language lifts every plate by, `--indicator-shadow` is this component's own. |
|
|
1626
|
+
| `--indicator-shadow` | `.bb-tabs-list` | `0 1px 2px 0 rgb(0 0 0 / 0.06), 0 1px 3px 0 rgb(0 0 0 / 0.08)` | Indicator lift, painted on top of --elev |
|
|
1627
|
+
| `--transition-duration` | `.bb-tabs-panes` | `var(--bb-transition-slow)` | |
|
|
1628
|
+
| `--gap` | `.bb-tabs-panes` | `30px` | |
|
|
1629
|
+
| `--max-w` | `.bb-tabs-panes` | `initial` | The strip-width knob must not percolate into pane content: nested tabs rendered inside a pane start with a clean slate |
|
|
1630
|
+
|
|
1631
|
+
## Component tree
|
|
1632
|
+
|
|
1633
|
+
`BbTabs` is not one component: rendering it mounts every component below, and each one is live inside it. **Read this before styling, theming or debugging `BbTabs`, and before concluding a part, a token or a behaviour does not exist** — it may live on a component further down. How to read it:
|
|
1634
|
+
|
|
1635
|
+
- **_internal_** nodes are building blocks with no API of their own: you reach them only through `BbTabs`. A pt part listed as landing there is set on `BbTabs` (`pt:<part>`).
|
|
1636
|
+
- **_public_** nodes are components with their own contract. `BbTabs` reaches one only through a pt part of its own that lands on it (shown on the parent node as `part → Component`, e.g. `spinner → BbSpinner`) or through a pt map it hands it (shown as "hands … the pt map", in `BbTabs`'s words → the child's). The child's other props and parts are not exposed; its contract explains what it renders.
|
|
1637
|
+
- **CSS custom properties** listed on a node are declared on THAT node's root and read by elements inside it. Set one on that node's root or on the element inside it that reads it — the pt part that lands there is how you reach it (`pt:box="[--border-color:…]"` on a text input) — never on `BbTabs`'s root, where the node's own declaration masks it (design-tokens guide, _Overriding one from a consumer app_, rule 0).
|
|
1638
|
+
- Listed nodes are the ones `BbTabs`'s API reaches or that declare a documented CSS variable; the rest fold into "also mounts". The complete tree, repeats and undocumented locals included, is the `tree` field of this component in `components.json`.
|
|
1639
|
+
|
|
1640
|
+
- `BbTabs` _(this component)_
|
|
1641
|
+
- `BbTabsList` _(public — [contract](./BbTabsList.md))_
|
|
1642
|
+
- `BbBaseButton` _(public — [contract](./BbBaseButton.md))_ — its own pt parts (`BbBaseButton`): `root` → `RouterComponent`, `root` → `a`, `root` → `component`; also mounts `RouterComponent`
|
|
1643
|
+
- Also mounts `BbTabsPanes`
|
|
1644
|
+
|
|
1178
1645
|
## See Also
|
|
1179
1646
|
|
|
1180
1647
|
- [BbAccordion](./BbAccordion.md) — Expands and collapses a content panel.
|