bitboss-ui 3.0.0-beta.33 → 3.0.0-beta.36
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 +22 -1
- package/bin/bitboss-ui-mcp.mjs +12 -1
- package/bin/bitboss-ui.mjs +94 -6
- package/dist/ai/BbAccordion.md +25 -25
- package/dist/ai/BbAlert.md +6 -1
- package/dist/ai/BbAvatar.md +1 -0
- package/dist/ai/BbBadge.md +26 -25
- package/dist/ai/BbBadgeButton.md +8 -7
- package/dist/ai/BbBreadcrumbs.md +11 -4
- package/dist/ai/BbButton.md +31 -27
- package/dist/ai/BbCalendar.md +28 -19
- package/dist/ai/BbCheckbox.md +13 -14
- package/dist/ai/BbCheckboxGroup.md +24 -17
- package/dist/ai/BbColorInput.md +23 -24
- package/dist/ai/BbColorPalette.md +6 -6
- package/dist/ai/BbConfirm.md +5 -4
- package/dist/ai/BbConfirmPortal.md +1 -1
- package/dist/ai/BbDatePicker.md +33 -30
- package/dist/ai/BbDatePickerInput.md +24 -35
- package/dist/ai/BbDialog.md +12 -11
- package/dist/ai/BbDropdown.md +111 -21
- package/dist/ai/BbDropdownButton.md +45 -20
- package/dist/ai/BbDropdownGroup.md +8 -7
- package/dist/ai/BbDropzone.md +6 -6
- package/dist/ai/BbForm.md +1 -1
- package/dist/ai/BbIndicator.md +6 -6
- package/dist/ai/BbNumberInput.md +20 -21
- package/dist/ai/BbOffCanvas.md +14 -14
- package/dist/ai/BbPagination.md +3 -3
- package/dist/ai/BbPopover.md +10 -10
- package/dist/ai/BbProgress.md +21 -16
- package/dist/ai/BbRadio.md +13 -14
- package/dist/ai/BbRadioGroup.md +24 -17
- package/dist/ai/BbRating.md +122 -43
- package/dist/ai/BbSelect.md +62 -36
- package/dist/ai/BbSelectPopover.md +42 -41
- package/dist/ai/BbSlider.md +56 -39
- package/dist/ai/BbSwitch.md +16 -17
- package/dist/ai/BbSwitchGroup.md +24 -17
- package/dist/ai/BbTable.md +223 -64
- package/dist/ai/BbTabs.md +170 -90
- package/dist/ai/BbTabsList.md +28 -9
- package/dist/ai/{BbTabsPanes.md → BbTabsPanels.md} +28 -10
- package/dist/ai/BbTabsRoot.md +9 -27
- package/dist/ai/BbTag.md +53 -51
- package/dist/ai/BbTextInput.md +23 -22
- package/dist/ai/BbTextarea.md +24 -23
- package/dist/ai/BbTimePicker.md +26 -13
- package/dist/ai/BbTimePickerInput.md +25 -22
- package/dist/ai/BbToast.md +128 -31
- package/dist/ai/BbToastPortal.md +18 -18
- package/dist/ai/BbTooltip.md +2 -2
- package/dist/ai/BbTree.md +6 -6
- package/dist/ai/ChipsBox.md +20 -19
- package/dist/ai/CommaBox.md +2 -2
- package/dist/ai/CommonFieldInput.md +2 -2
- package/dist/ai/CommonPopover.md +5 -5
- package/dist/ai/CommonTimeSelector.md +8 -6
- package/dist/ai/FlatListBox.md +4 -4
- package/dist/ai/GroupedListBox.md +4 -4
- package/dist/ai/ListBox.md +8 -8
- package/dist/ai/OptionsContainer.md +1 -1
- package/dist/ai/changelog.json +309 -11
- package/dist/ai/components.json +4366 -1491
- package/dist/ai/composables/useBbTableContext.md +7 -3
- package/dist/ai/composables/useToast.md +1 -1
- package/dist/ai/guides/design-language.md +44 -44
- package/dist/ai/guides/design-tokens.md +56 -42
- package/dist/ai/guides/icons-policy.md +6 -8
- package/dist/ai/guides/installation-and-plugin-setup.md +88 -18
- package/dist/ai/guides/migration/components/bb-accordion.md +8 -0
- package/dist/ai/guides/migration/components/bb-badge.md +5 -5
- package/dist/ai/guides/migration/components/bb-button.md +3 -3
- package/dist/ai/guides/migration/components/bb-checkbox-group.md +17 -18
- package/dist/ai/guides/migration/components/bb-chip.md +6 -6
- package/dist/ai/guides/migration/components/bb-date-picker-input.md +5 -5
- package/dist/ai/guides/migration/components/bb-dialog.md +4 -4
- package/dist/ai/guides/migration/components/bb-dropdown-button.md +7 -1
- package/dist/ai/guides/migration/components/bb-popover.md +7 -0
- package/dist/ai/guides/migration/components/bb-rating.md +11 -10
- package/dist/ai/guides/migration/components/bb-select.md +1 -1
- package/dist/ai/guides/migration/components/bb-table.md +33 -31
- package/dist/ai/guides/migration/components/bb-tabs.md +27 -21
- package/dist/ai/guides/migration/components/bb-tag.md +9 -8
- package/dist/ai/guides/migration/components/bb-toast.md +1 -1
- package/dist/ai/guides/migration/components/bb-tree.md +1 -1
- package/dist/ai/guides/migration/components/use-confirm.md +1 -1
- package/dist/ai/guides/migration/v2-to-v3.md +201 -130
- package/dist/ai/guides/migration/v3-beta-css-classes.md +723 -0
- package/dist/ai/guides/options-items-playbook.md +5 -0
- package/dist/ai/guides/passthrough.md +104 -63
- package/dist/ai/index.md +5 -4
- package/dist/ai/recipes/inertia/inline-edit-workspace.md +6 -6
- package/dist/ai/recipes/inertia/onboarding.md +2 -2
- package/dist/ai/recipes/inertia/upload-center.md +2 -2
- package/dist/ai/recipes/nuxt/inline-edit-workspace.md +6 -6
- package/dist/ai/recipes/nuxt/onboarding.md +2 -2
- package/dist/ai/recipes/nuxt/upload-center.md +1 -1
- package/dist/ai/recipes/vue/inline-edit-workspace.md +6 -6
- package/dist/ai/recipes/vue/onboarding.md +2 -2
- package/dist/ai/recipes/vue/upload-center.md +2 -2
- package/dist/ai/source/BbAccordion.md +5 -4
- package/dist/ai/source/BbAvatar.md +6 -0
- package/dist/ai/source/BbBadge.md +45 -44
- package/dist/ai/source/BbBadgeButton.md +43 -42
- package/dist/ai/source/BbBreadcrumbs.md +51 -5
- package/dist/ai/source/BbButton.md +91 -16
- package/dist/ai/source/BbCalendar.md +104 -51
- package/dist/ai/source/BbCheckbox.md +2 -1
- package/dist/ai/source/BbCheckboxGroup.md +125 -95
- package/dist/ai/source/BbCollapsible.md +6 -0
- package/dist/ai/source/BbColorInput.md +19 -3
- package/dist/ai/source/BbColorPalette.md +10 -12
- package/dist/ai/source/BbConfirm.md +5 -2
- package/dist/ai/source/BbConfirmPortal.md +6 -3
- package/dist/ai/source/BbDatePicker.md +45 -26
- package/dist/ai/source/BbDatePickerInput.md +28 -28
- package/dist/ai/source/BbDialog.md +51 -27
- package/dist/ai/source/BbDropdown.md +48 -21
- package/dist/ai/source/BbDropdownButton.md +68 -14
- package/dist/ai/source/BbDropdownGroup.md +31 -12
- package/dist/ai/source/BbDropzone.md +13 -10
- package/dist/ai/source/BbIndicator.md +23 -23
- package/dist/ai/source/BbNumberInput.md +13 -2
- package/dist/ai/source/BbOffCanvas.md +43 -20
- package/dist/ai/source/BbPagination.md +18 -10
- package/dist/ai/source/BbPopover.md +10 -6
- package/dist/ai/source/BbProgress.md +22 -20
- package/dist/ai/source/BbRadio.md +2 -1
- package/dist/ai/source/BbRadioGroup.md +108 -93
- package/dist/ai/source/BbRating.md +60 -46
- package/dist/ai/source/BbSelect.md +113 -25
- package/dist/ai/source/BbSelectPopover.md +39 -38
- package/dist/ai/source/BbSlider.md +151 -96
- package/dist/ai/source/BbSwitchGroup.md +104 -92
- package/dist/ai/source/BbTable.md +333 -179
- package/dist/ai/source/BbTabs.md +193 -41
- package/dist/ai/source/BbTabsList.md +212 -54
- package/dist/ai/source/{BbTabsPanes.md → BbTabsPanels.md} +189 -50
- package/dist/ai/source/BbTabsRoot.md +148 -31
- package/dist/ai/source/BbTag.md +89 -24
- package/dist/ai/source/BbTextInput.md +18 -2
- package/dist/ai/source/BbTextarea.md +15 -3
- package/dist/ai/source/BbTimePicker.md +52 -13
- package/dist/ai/source/BbTimePickerInput.md +52 -11
- package/dist/ai/source/BbToast.md +113 -48
- package/dist/ai/source/BbToastPortal.md +117 -49
- package/dist/ai/source/BbTooltip.md +2 -2
- package/dist/ai/source/BbTree.md +4 -4
- package/dist/ai/source/ChipsBox.md +17 -7
- package/dist/ai/source/CommaBox.md +16 -9
- package/dist/ai/source/CommonField.md +24 -16
- package/dist/ai/source/CommonFieldInput.md +5 -1
- package/dist/ai/source/CommonTimeSelector.md +108 -26
- package/dist/ai/source/FlatListBox.md +6 -5
- package/dist/ai/source/GroupedListBox.md +6 -5
- package/dist/ai/source/OptionsContainer.md +12 -10
- package/dist/assets/svgs/star.svg_raw.js +4 -0
- package/dist/components/BbAccordion/BbAccordion.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/BbAccordion/types.d.ts +3 -2
- package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +107 -98
- package/dist/components/BbButton/BbButton.vue.d.ts +5 -0
- package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbButton/types.d.ts +64 -0
- package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +203 -172
- package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbCalendar/types.d.ts +19 -9
- package/dist/components/BbCalendar/types.js +3 -2
- package/dist/components/BbCalendar/useCalendarGrid.js +14 -14
- package/dist/components/BbCalendar/useDayGrid.js +1 -1
- package/dist/components/BbCheckbox/BbCheckbox.vue.d.ts +6 -6
- package/dist/components/BbCheckbox/types.d.ts +2 -1
- package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +103 -103
- package/dist/components/BbCheckboxGroup/types.d.ts +5 -2
- package/dist/components/BbColorInput/BbColorInput.vue.d.ts +14 -14
- package/dist/components/BbColorInput/types.d.ts +19 -3
- package/dist/components/BbColorPalette/BbColorPalette.vue.d.ts +2 -2
- package/dist/components/BbColorPalette/BbColorPalette.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/BbColorPalette/types.d.ts +2 -2
- package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +1 -0
- package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +2 -2
- package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +52 -36
- package/dist/components/BbDatePicker/types.d.ts +14 -6
- package/dist/components/BbDatePicker/types.js +3 -2
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +6 -6
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +348 -340
- package/dist/components/BbDatePickerInput/types.d.ts +15 -4
- package/dist/components/BbDatePickerInput/types.js +3 -2
- package/dist/components/BbDialog/BbDialog.vue.d.ts +1 -1
- package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +131 -122
- package/dist/components/BbDialog/types.d.ts +6 -1
- package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/BbDropdown/BbDropdown.vue.d.ts +4 -4
- package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +180 -179
- package/dist/components/BbDropdown/BbDropdownGroup.vue.d.ts +4 -0
- package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +102 -102
- package/dist/components/BbDropdown/normalizeGroups.js +1 -0
- package/dist/components/BbDropdown/types.d.ts +18 -3
- package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +5 -0
- package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +67 -27
- package/dist/components/BbDropdownButton/types.d.ts +30 -7
- package/dist/components/BbDropdownButton/types.js +4 -0
- package/dist/components/BbDropzone/BbDropzone.vue.d.ts +2 -2
- package/dist/components/BbDropzone/BbDropzone.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/BbDropzone/types.d.ts +2 -1
- package/dist/components/BbIndicator/BbIndicator.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbIndicator/types.d.ts +1 -1
- package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +6 -6
- package/dist/components/BbNumberInput/types.d.ts +13 -2
- package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +1 -1
- package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +186 -178
- package/dist/components/BbOffCanvas/types.d.ts +6 -1
- package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +65 -57
- package/dist/components/BbPopover/BbPopover.vue.d.ts +1 -1
- package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/components/BbPopover/types.d.ts +4 -3
- package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbProgress/types.d.ts +3 -2
- package/dist/components/BbRadio/BbRadio.vue.d.ts +6 -6
- package/dist/components/BbRadio/types.d.ts +2 -1
- package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +68 -68
- package/dist/components/BbRadioGroup/types.d.ts +5 -2
- package/dist/components/BbRating/BbRating.vue.d.ts +6 -6
- package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +107 -111
- package/dist/components/BbRating/types.d.ts +15 -4
- package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +61 -22
- package/dist/components/BbSelect/types.d.ts +51 -12
- package/dist/components/BbSelect/types.js +19 -5
- package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +306 -306
- package/dist/components/BbSlider/BbSlider.vue.d.ts +4 -4
- package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +227 -191
- package/dist/components/BbSlider/types.d.ts +24 -7
- package/dist/components/BbSlider/types.js +5 -0
- package/dist/components/BbSwitch/BbSwitch.vue.d.ts +6 -6
- package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +102 -102
- package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +892 -771
- package/dist/components/BbTable/BbTableDataRow.d.ts +3 -3
- package/dist/components/BbTable/BbTableDataRow.js +17 -7
- package/dist/components/BbTable/BbTableSelectToggle.d.ts +17 -0
- package/dist/components/BbTable/BbTableSelectToggle.js +8 -0
- package/dist/components/BbTable/types.d.ts +52 -10
- package/dist/components/BbTable/types.js +14 -1
- package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +44 -23
- package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +101 -64
- package/dist/components/BbTabs/BbTabsPanels.vue.d.ts +12 -0
- package/dist/components/BbTabs/BbTabsPanels.vue.js +6 -0
- package/dist/components/BbTabs/BbTabsPanels.vue_vue_type_script_setup_true_lang.js +59 -0
- package/dist/components/BbTabs/BbTabsRoot.vue_vue_type_script_setup_true_lang.js +0 -10
- package/dist/components/BbTabs/types.d.ts +115 -28
- package/dist/components/BbTabs/types.js +24 -1
- package/dist/components/BbTag/BbTag.vue.d.ts +6 -6
- package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +17 -8
- package/dist/components/BbTag/types.d.ts +52 -15
- package/dist/components/BbTag/types.js +19 -5
- package/dist/components/BbTextInput/BbTextInput.vue.d.ts +6 -6
- package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/BbTextInput/types.d.ts +13 -2
- package/dist/components/BbTextarea/BbTextarea.vue.d.ts +6 -6
- package/dist/components/BbTextarea/types.d.ts +15 -3
- package/dist/components/BbTimePicker/BbTimePicker.vue.d.ts +4 -4
- package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +28 -4
- package/dist/components/BbTimePicker/types.d.ts +28 -7
- package/dist/components/BbTimePicker/types.js +7 -1
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue.d.ts +6 -6
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +25 -3
- package/dist/components/BbTimePickerInput/types.d.ts +35 -6
- package/dist/components/BbTimePickerInput/types.js +2 -0
- package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +12 -0
- package/dist/components/BbToast/BbToastMessage.vue.d.ts +3 -3
- package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +72 -70
- package/dist/components/BbToast/BbToastPortal.vue.d.ts +1 -0
- package/dist/components/BbToast/BbToastRegion.vue.d.ts +2 -2
- package/dist/components/BbToast/types.d.ts +35 -10
- package/dist/components/BbToast/types.js +16 -1
- package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +41 -41
- package/dist/components/ChipsBox/types.d.ts +4 -3
- package/dist/components/CommaBox/CommaBox.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/CommaBox/types.d.ts +4 -3
- package/dist/components/CommonField/CommonField.vue_vue_type_script_setup_true_lang.js +4 -3
- package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +5 -1
- package/dist/components/CommonPopover/CommonPopover.vue.d.ts +1 -1
- package/dist/components/CommonTimeSelector/CommonTimeSelector.vue.d.ts +19 -3
- package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +114 -89
- package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +105 -104
- package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +6 -5
- package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +5 -3
- package/dist/components/OptionsContainer/types.d.ts +2 -2
- package/dist/composables/useBbTableContext.d.ts +33 -1
- package/dist/composables/useBbTableContext.js +83 -81
- package/dist/composables/useBbTabsContext.d.ts +10 -18
- package/dist/composables/useBbTabsContext.js +123 -133
- package/dist/composables/useCoarsePointer.js +7 -10
- package/dist/composables/useHydrated.d.ts +18 -0
- package/dist/composables/useHydrated.js +13 -7
- package/dist/composables/useMobile.js +8 -11
- package/dist/composables/usePassthrough.d.ts +22 -1
- package/dist/composables/usePassthrough.js +76 -63
- package/dist/composables/useViewportWidth.d.ts +5 -39
- package/dist/composables/useViewportWidth.js +13 -7
- package/dist/deprecation/ai-deprecations.json.d.ts +137 -104
- package/dist/deprecation/ai-deprecations.json.js +1 -1
- package/dist/i18n/index.d.ts +10 -16
- package/dist/index.d.ts +2 -19
- package/dist/index.js +29 -29
- package/dist/llms-full.txt +3116 -1498
- package/dist/llms-medium.txt +135 -65
- package/dist/llms.txt +2 -1
- package/dist/nuxt-auto-imports.js +1 -1
- package/dist/nuxt-module.d.ts +7 -17
- package/dist/nuxt.js +26 -17
- package/dist/plugin.js +25 -17
- package/dist/project-dts.d.ts +48 -0
- package/dist/project-dts.js +99 -0
- package/dist/runtime/nuxt-plugin.js +28 -23
- package/dist/styles.css +3 -2
- package/dist/types/AlertVariant.d.ts +10 -1
- package/dist/types/BadgeVariant.d.ts +10 -1
- package/dist/types/ButtonVariant.d.ts +12 -1
- package/dist/types/ConfirmVariant.d.ts +8 -1
- package/dist/types/DropdownItemVariant.d.ts +8 -1
- package/dist/types/IndicatorVariant.d.ts +11 -1
- package/dist/types/InputVariant.d.ts +9 -1
- package/dist/types/PtScope.d.ts +8 -6
- package/dist/types/RegistryKey.d.ts +10 -0
- package/dist/types/TabsVariant.d.ts +9 -1
- package/dist/types/ToastVariant.d.ts +12 -2
- package/dist/types/TooltipVariant.d.ts +8 -1
- package/dist/types/passthrough.d.ts +1 -1
- package/dist/types/ptComponentMap.d.ts +14 -12
- package/dist/utils/versionCheck.d.ts +19 -0
- package/dist/utils/versionCheck.js +18 -0
- package/dist/validated/BbCheckbox.vue.d.ts +2 -2
- package/dist/validated/BbColorInput.vue.d.ts +2 -2
- package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +32 -16
- package/dist/validated/BbDropzone.vue.d.ts +2 -2
- package/dist/validated/BbNumberInput.vue.d.ts +2 -2
- package/dist/validated/BbSelect.vue.d.ts +47 -11
- package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +45 -9
- package/dist/validated/BbSlider.vue_vue_type_script_setup_true_lang.js +35 -0
- package/dist/validated/BbSwitch.vue.d.ts +2 -2
- package/dist/validated/BbTag.vue_vue_type_script_setup_true_lang.js +16 -7
- package/dist/validated/BbTextInput.vue.d.ts +2 -2
- package/dist/validated/BbTextarea.vue.d.ts +2 -2
- package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +18 -0
- package/dist/validated/index.d.ts +0 -17
- package/dist/vite-plugin.d.ts +63 -29
- package/dist/vite.js +332 -354
- package/llms.txt +2 -1
- package/package.json +17 -7
- package/scripts/lib/check-fix.mjs +129 -0
- package/scripts/lib/component-attr-targets.ts +6 -0
- package/scripts/lib/eslint-disable.mjs +119 -0
- package/scripts/lib/eslint-plugin.d.ts +3 -1
- package/scripts/lib/eslint-plugin.mjs +159 -0
- package/scripts/lib/html-attributes.mjs +1 -1
- package/scripts/lib/validate-bb-markup.mjs +120 -5
- package/dist/alert-variants.d.ts +0 -19
- package/dist/badge-variants.d.ts +0 -19
- package/dist/button-variants.d.ts +0 -21
- package/dist/components/BbTabs/BbTabsPanes.vue.d.ts +0 -16
- package/dist/components/BbTabs/BbTabsPanes.vue.js +0 -6
- package/dist/components/BbTabs/BbTabsPanes.vue_vue_type_script_setup_true_lang.js +0 -36
- package/dist/confirm-variants.d.ts +0 -17
- package/dist/dropdown-item-variants.d.ts +0 -17
- package/dist/indicator-variants.d.ts +0 -20
- package/dist/input-variants.d.ts +0 -18
- package/dist/locale-registry.d.ts +0 -37
- package/dist/pt-scope-registry.d.ts +0 -15
- package/dist/tabs-variants.d.ts +0 -18
- package/dist/toast-variants.d.ts +0 -20
- package/dist/tooltip-variants.d.ts +0 -17
package/README.md
CHANGED
|
@@ -78,7 +78,7 @@ Product-ready components with labels, hints, errors, and consistent styling:
|
|
|
78
78
|
|
|
79
79
|
- **Forms & actions:** `BbTextInput`, `BbTextarea`, `BbNumberInput`, `BbSelect`, `BbSelectPopover`, `BbCheckbox`, `BbCheckboxGroup`, `BbRadio`, `BbRadioGroup`, `BbSwitch`, `BbSwitchGroup`, `BbSlider`, `BbRating`, `BbColorInput`, `BbColorPalette`, `BbDatePicker`, `BbDatePickerInput`, `BbTimePicker`, `BbTimePickerInput`, `BbButton`, `BbBadge`, `BbBadgeButton`, `BbIndicator`, `BbTag`, `BbDropdown`, `BbDropdownGroup`, `BbDropdownButton`, `BbAsterisk`
|
|
80
80
|
- **Feedback:** `BbAlert`, `BbProgress`, `BbSpinner`, `BbToast`, `BbToastPortal`, `BbTooltip`
|
|
81
|
-
- **Layout & navigation:** `BbAccordion`, `BbCollapsible`, `BbTabs` (+ `BbTabsRoot`, `BbTabsList`, `
|
|
81
|
+
- **Layout & navigation:** `BbAccordion`, `BbCollapsible`, `BbTabs` (+ `BbTabsRoot`, `BbTabsList`, `BbTabsPanels`), `BbBreadcrumbs`, `BbPagination`, `BbSmoothHeight`
|
|
82
82
|
- **Overlays & panels:** `BbDialog`, `BbConfirm`, `BbConfirmPortal`, `BbOffCanvas`, `BbPopover`
|
|
83
83
|
- **Data:** `BbTable`, `BbTree`
|
|
84
84
|
- **Media & files:** `BbAvatar`, `BbDropzone`, `BbIcon`
|
|
@@ -440,6 +440,27 @@ entry is the state itself and is never reported:
|
|
|
440
440
|
/>
|
|
441
441
|
```
|
|
442
442
|
|
|
443
|
+
#### Rating star colours: `no-star-color`
|
|
444
|
+
|
|
445
|
+
`bitboss-ui/no-star-color` flags any colour utility in `BbRating`'s `pt:item`,
|
|
446
|
+
in the base entry or any state: `text-*`, `fill-*` and `stroke-*`, whether a
|
|
447
|
+
shade (`text-amber-500`), a keyword (`fill-current`), a variable
|
|
448
|
+
(`text-(--bb-text-faint)`) or an arbitrary colour (`text-[#f59e0b]`). Sizes and
|
|
449
|
+
widths (`text-sm`, `stroke-2`) are never reported. The rating paints each
|
|
450
|
+
star's colour per state (filled, the hover preview, the error tint), and a
|
|
451
|
+
colour utility beats those rules, so it looks right at rest and freezes the
|
|
452
|
+
stars. The fix lives on another attribute, so the rule explains it rather
|
|
453
|
+
than rewriting:
|
|
454
|
+
|
|
455
|
+
```vue
|
|
456
|
+
<!-- errors: no hover preview, no error tint -->
|
|
457
|
+
<BbRating pt:item="text-(--bb-text-faint)" pt:item:selected="text-amber-500" />
|
|
458
|
+
<!-- same look, the preview and the states keep working -->
|
|
459
|
+
<BbRating
|
|
460
|
+
pt:root="[--empty:var(--bb-text-faint)] [--accent:var(--color-amber-500)]"
|
|
461
|
+
/>
|
|
462
|
+
```
|
|
463
|
+
|
|
443
464
|
#### The one rule that reads CSS: `no-unknown-token`
|
|
444
465
|
|
|
445
466
|
`bitboss-ui/no-unknown-token` flags a bare `var(--bb-…)` naming a token the
|
package/bin/bitboss-ui-mcp.mjs
CHANGED
|
@@ -316,6 +316,8 @@ function searchComponents({ query, limit, includeReferenceOnly } = {}) {
|
|
|
316
316
|
...(type.deprecated ? { deprecated: true } : {}),
|
|
317
317
|
...(type.replacedBy ? { replacedBy: type.replacedBy } : {}),
|
|
318
318
|
usedBy: type.usedBy ?? [],
|
|
319
|
+
// The short answer only; get_component(name) has the definition.
|
|
320
|
+
...(type.values ? { values: type.values } : {}),
|
|
319
321
|
import: `import type { ${type.replacedBy ?? type.name} } from 'bitboss-ui';`,
|
|
320
322
|
}));
|
|
321
323
|
|
|
@@ -425,9 +427,16 @@ function getComponent({ name, maxChars } = {}) {
|
|
|
425
427
|
...(type.replacedBy ? { replacedBy: type.replacedBy } : {}),
|
|
426
428
|
component: type.component,
|
|
427
429
|
usedBy: type.usedBy ?? [],
|
|
430
|
+
// What it is (Q50.2): the declaration, the accepted values when
|
|
431
|
+
// finite (open when `extensibleVia` names a registry), and the
|
|
432
|
+
// resolved fields when the declaration leans on a private type.
|
|
433
|
+
...(type.definition ? { definition: type.definition } : {}),
|
|
434
|
+
...(type.values ? { values: type.values } : {}),
|
|
435
|
+
...(type.extensibleVia ? { extensibleVia: type.extensibleVia } : {}),
|
|
436
|
+
...(type.fields ? { fields: type.fields } : {}),
|
|
428
437
|
import: `import type { ${type.replacedBy ?? name} } from 'bitboss-ui';`,
|
|
429
438
|
hint: use
|
|
430
|
-
? `A type, not a component: it types ${possessive(use.component)} \`${use.name}\` ${use.surface}.
|
|
439
|
+
? `A type, not a component: it types ${possessive(use.component)} \`${use.name}\` ${use.surface}. \`definition\` above is the type itself; call get_component('${use.component}') to see it in use.`
|
|
431
440
|
: 'A type, not a component — import it for the value you pass, never write it as a tag.',
|
|
432
441
|
};
|
|
433
442
|
}
|
|
@@ -467,6 +476,8 @@ function getComponent({ name, maxChars } = {}) {
|
|
|
467
476
|
name: type.name,
|
|
468
477
|
usage: type.usage,
|
|
469
478
|
usedBy: (type.usedBy ?? []).filter((use) => use.component === entry.name),
|
|
479
|
+
...(type.values ? { values: type.values } : {}),
|
|
480
|
+
...(type.extensibleVia ? { extensibleVia: type.extensibleVia } : {}),
|
|
470
481
|
import: `import type { ${type.name} } from 'bitboss-ui';`,
|
|
471
482
|
}));
|
|
472
483
|
|
package/bin/bitboss-ui.mjs
CHANGED
|
@@ -46,9 +46,13 @@
|
|
|
46
46
|
*/
|
|
47
47
|
|
|
48
48
|
import { spawnSync } from 'node:child_process';
|
|
49
|
+
// `globSync` is read off the namespace, not imported by name: it only exists
|
|
50
|
+
// from Node 22, and a named import of a missing builtin export is a
|
|
51
|
+
// SyntaxError at load time, which killed every command on Node 20 (Sail
|
|
52
|
+
// images still ship it). Only quoted glob arguments need it (Q46.4).
|
|
53
|
+
import * as fs from 'node:fs';
|
|
49
54
|
import {
|
|
50
55
|
existsSync,
|
|
51
|
-
globSync,
|
|
52
56
|
mkdirSync,
|
|
53
57
|
readdirSync,
|
|
54
58
|
readFileSync,
|
|
@@ -59,6 +63,11 @@ import {
|
|
|
59
63
|
findHandRollHints,
|
|
60
64
|
loadKnownTokens,
|
|
61
65
|
} from '../scripts/lib/hand-roll-hints.mjs';
|
|
66
|
+
import {
|
|
67
|
+
disabledChecker,
|
|
68
|
+
ruleForFinding,
|
|
69
|
+
} from '../scripts/lib/eslint-disable.mjs';
|
|
70
|
+
import { applyBitbossFixes } from '../scripts/lib/check-fix.mjs';
|
|
62
71
|
import { dirname, isAbsolute, join, relative, resolve } from 'node:path';
|
|
63
72
|
import { fileURLToPath } from 'node:url';
|
|
64
73
|
import { parseArgs } from 'node:util';
|
|
@@ -437,7 +446,13 @@ function resolveCheckFiles(cwd, patterns) {
|
|
|
437
446
|
continue;
|
|
438
447
|
}
|
|
439
448
|
}
|
|
440
|
-
|
|
449
|
+
if (typeof fs.globSync !== 'function') {
|
|
450
|
+
console.error(
|
|
451
|
+
`[bitboss-ui] quoted glob patterns need Node >= 22 (this is ${process.version}): "${pattern}". Pass the directory, or leave the pattern unquoted so the shell expands it.`
|
|
452
|
+
);
|
|
453
|
+
process.exit(1);
|
|
454
|
+
}
|
|
455
|
+
const dirents = fs.globSync(pattern, {
|
|
441
456
|
cwd,
|
|
442
457
|
withFileTypes: true,
|
|
443
458
|
// Pruning is a traversal shortcut; the inSkippedDir filter below is
|
|
@@ -710,9 +725,15 @@ function manifestVersionOf(manifestPath) {
|
|
|
710
725
|
}
|
|
711
726
|
}
|
|
712
727
|
|
|
713
|
-
function checkCommand(
|
|
728
|
+
async function checkCommand(
|
|
714
729
|
globs,
|
|
715
|
-
{
|
|
730
|
+
{
|
|
731
|
+
json: jsonMode,
|
|
732
|
+
allowEmpty,
|
|
733
|
+
allowComponents,
|
|
734
|
+
manifest: manifestOverride,
|
|
735
|
+
fix,
|
|
736
|
+
}
|
|
716
737
|
) {
|
|
717
738
|
const projectRoot = process.cwd();
|
|
718
739
|
|
|
@@ -770,9 +791,40 @@ function checkCommand(
|
|
|
770
791
|
...configuredAllowComponents(projectRoot),
|
|
771
792
|
...allowComponents,
|
|
772
793
|
];
|
|
794
|
+
|
|
795
|
+
// Q46.8: `--fix` applies the ESLint plugin's fixes (the registered v2→v3
|
|
796
|
+
// migrations) with ONLY the bitboss rules, then the check below reports
|
|
797
|
+
// what is left, so one command migrates and verifies.
|
|
798
|
+
if (fix) {
|
|
799
|
+
const outcome = await applyBitbossFixes({
|
|
800
|
+
projectRoot,
|
|
801
|
+
files,
|
|
802
|
+
manifestPath: manifestOverride ? manifestPath : undefined,
|
|
803
|
+
allowComponents: allowedComponents,
|
|
804
|
+
});
|
|
805
|
+
if ('error' in outcome) {
|
|
806
|
+
console.error(`[bitboss-ui] ${outcome.error}`);
|
|
807
|
+
process.exit(1);
|
|
808
|
+
}
|
|
809
|
+
const log = jsonMode ? console.error : console.log;
|
|
810
|
+
log(
|
|
811
|
+
outcome.fixed.length
|
|
812
|
+
? `[bitboss-ui] check --fix: fixed ${outcome.fixed.length} file(s):\n${outcome.fixed
|
|
813
|
+
.map((file) => ` ${relative(projectRoot, file)}`)
|
|
814
|
+
.join('\n')}`
|
|
815
|
+
: '[bitboss-ui] check --fix: nothing to fix.'
|
|
816
|
+
);
|
|
817
|
+
if (outcome.skipped?.length)
|
|
818
|
+
log(
|
|
819
|
+
`[bitboss-ui] check --fix: ESLint ignored ${outcome.skipped.length} file(s), not fixed:\n${outcome.skipped
|
|
820
|
+
.map((file) => ` ${relative(projectRoot, file)}`)
|
|
821
|
+
.join('\n')}`
|
|
822
|
+
);
|
|
823
|
+
}
|
|
773
824
|
const validateOptions = { allowComponents: allowedComponents };
|
|
774
825
|
|
|
775
826
|
const findings = [];
|
|
827
|
+
let suppressed = 0;
|
|
776
828
|
/*
|
|
777
829
|
* Advisory only — see scripts/lib/hand-roll-hints.mjs. Hints never touch the
|
|
778
830
|
* exit code, so a guess can never fail a consumer's build. `--no-hints`
|
|
@@ -786,7 +838,18 @@ function checkCommand(
|
|
|
786
838
|
const { findings: fileFindings } = file.endsWith('.md')
|
|
787
839
|
? validateMarkdown(content, manifest, validateOptions)
|
|
788
840
|
: validateVueSnippet(content, manifest, validateOptions);
|
|
841
|
+
// Q46.9: a finding the author silenced for ESLint (`eslint-disable*`,
|
|
842
|
+
// usually with a reason) is silenced here too, or `check` cannot gate
|
|
843
|
+
// CI next to a lint step that passes. `.md` lines are fence-relative,
|
|
844
|
+
// and docs carry no directives, so only `.vue` files are filtered.
|
|
845
|
+
const isDisabled = file.endsWith('.vue')
|
|
846
|
+
? disabledChecker(content)
|
|
847
|
+
: () => false;
|
|
789
848
|
for (const finding of fileFindings) {
|
|
849
|
+
if (isDisabled(finding.line, ruleForFinding(finding))) {
|
|
850
|
+
suppressed++;
|
|
851
|
+
continue;
|
|
852
|
+
}
|
|
790
853
|
findings.push({ file: relPath, ...finding });
|
|
791
854
|
}
|
|
792
855
|
// .md files are documentation ABOUT components; a round <img> in a doc
|
|
@@ -798,6 +861,14 @@ function checkCommand(
|
|
|
798
861
|
}
|
|
799
862
|
}
|
|
800
863
|
|
|
864
|
+
/** One line, so a silenced finding is never invisible. */
|
|
865
|
+
const printSuppressed = () => {
|
|
866
|
+
if (suppressed === 0) return;
|
|
867
|
+
console.log(
|
|
868
|
+
`[bitboss-ui] ${suppressed} finding(s) silenced by eslint-disable comments.`
|
|
869
|
+
);
|
|
870
|
+
};
|
|
871
|
+
|
|
801
872
|
/** Advisory block, printed on success and on failure alike. Never fatal. */
|
|
802
873
|
const printHints = () => {
|
|
803
874
|
if (hints.length === 0) return;
|
|
@@ -837,6 +908,7 @@ function checkCommand(
|
|
|
837
908
|
{
|
|
838
909
|
findings,
|
|
839
910
|
hints,
|
|
911
|
+
suppressed,
|
|
840
912
|
files: files.length,
|
|
841
913
|
manifestVersion: judgedAgainst,
|
|
842
914
|
installedVersion: packageVersion(),
|
|
@@ -874,10 +946,12 @@ function checkCommand(
|
|
|
874
946
|
console.log(
|
|
875
947
|
`[bitboss-ui] check OK — ${summarizeFileCounts(files)} file(s), zero unknown Bb* props/v-models/slots/nav-attrs.`
|
|
876
948
|
);
|
|
949
|
+
printSuppressed();
|
|
877
950
|
printHints();
|
|
878
951
|
return;
|
|
879
952
|
}
|
|
880
953
|
|
|
954
|
+
printSuppressed();
|
|
881
955
|
const fileCount = new Set(findings.map((f) => f.file)).size;
|
|
882
956
|
console.error(
|
|
883
957
|
`[bitboss-ui] check FAILED — ${findings.length} finding(s) across ${fileCount} file(s):`
|
|
@@ -932,7 +1006,7 @@ Commands:
|
|
|
932
1006
|
\`--no-mcp\` skips the server and the install. Idempotent —
|
|
933
1007
|
safe to re-run after upgrades.
|
|
934
1008
|
check [glob…] [--json] [--allow-empty] [--allow-component <Name>]
|
|
935
|
-
[--no-hints] [--manifest <path>]
|
|
1009
|
+
[--no-hints] [--manifest <path>] [--fix]
|
|
936
1010
|
Validate \`Bb*\` markup in .vue/.md files against the
|
|
937
1011
|
installed components.json manifest (unknown/removed props,
|
|
938
1012
|
bad v-models, unknown \`<template #slot>\` names,
|
|
@@ -945,6 +1019,18 @@ Commands:
|
|
|
945
1019
|
nothing (a typo'd CI path validates zero files silently) —
|
|
946
1020
|
pass \`--allow-empty\` when an empty match is expected.
|
|
947
1021
|
|
|
1022
|
+
\`--fix\` first applies the ESLint plugin's fixes (the
|
|
1023
|
+
registered v2→v3 renames, polarity flips and value
|
|
1024
|
+
remaps) to the matched .vue files with ONLY the
|
|
1025
|
+
bitboss-ui rules — your own ESLint config is not used —
|
|
1026
|
+
then reports what is left. Needs \`eslint\` and
|
|
1027
|
+
\`vue-eslint-parser\` in the project.
|
|
1028
|
+
|
|
1029
|
+
Honours ESLint disable comments in .vue files: a finding
|
|
1030
|
+
silenced for the matching \`bitboss-ui/*\` rule (or by a
|
|
1031
|
+
bare \`eslint-disable\`) is not reported, only counted:
|
|
1032
|
+
<!-- eslint-disable-next-line bitboss-ui/require-table-slot-prop -- why -->
|
|
1033
|
+
|
|
948
1034
|
\`--manifest <path>\` judges against another version's
|
|
949
1035
|
components.json instead of the installed one — the answer
|
|
950
1036
|
to "which of my files break if I upgrade", BEFORE you
|
|
@@ -1034,6 +1120,7 @@ switch (command) {
|
|
|
1034
1120
|
json: { type: 'boolean' },
|
|
1035
1121
|
'allow-empty': { type: 'boolean' },
|
|
1036
1122
|
'allow-component': { type: 'string', multiple: true },
|
|
1123
|
+
fix: { type: 'boolean' },
|
|
1037
1124
|
manifest: { type: 'string' },
|
|
1038
1125
|
// Accepted and ignored here — read straight off argv inside
|
|
1039
1126
|
// checkCommand, but parseArgs is strict, so it must be declared.
|
|
@@ -1041,7 +1128,8 @@ switch (command) {
|
|
|
1041
1128
|
},
|
|
1042
1129
|
{ allowPositionals: true }
|
|
1043
1130
|
);
|
|
1044
|
-
checkCommand(positionals, {
|
|
1131
|
+
await checkCommand(positionals, {
|
|
1132
|
+
fix: values.fix ?? false,
|
|
1045
1133
|
json: values.json ?? false,
|
|
1046
1134
|
allowEmpty: values['allow-empty'] ?? false,
|
|
1047
1135
|
allowComponents: values['allow-component'] ?? [],
|
package/dist/ai/BbAccordion.md
CHANGED
|
@@ -63,14 +63,14 @@ through `pt:panel` or `.bb-accordion__panel` — collapses with the body.
|
|
|
63
63
|
v-model="faq.open"
|
|
64
64
|
:class="index ? 'border-t border-(--bb-border)' : ''"
|
|
65
65
|
>
|
|
66
|
-
<template #header="{
|
|
66
|
+
<template #header="{ open }">
|
|
67
67
|
<div
|
|
68
68
|
class="flex w-full items-center justify-between gap-2 px-3 py-2 text-left text-sm font-medium"
|
|
69
69
|
>
|
|
70
70
|
<span>{{ faq.question }}</span>
|
|
71
71
|
<span
|
|
72
72
|
class="shrink-0 text-(--bb-text-muted) transition-transform duration-200"
|
|
73
|
-
:class="
|
|
73
|
+
:class="open ? 'rotate-180' : ''"
|
|
74
74
|
>
|
|
75
75
|
<BbIcon icon="lucide:chevron-down" size="sm" />
|
|
76
76
|
</span>
|
|
@@ -137,7 +137,7 @@ on the row, badge included, toggles the panel.
|
|
|
137
137
|
v-model="endpoint.open"
|
|
138
138
|
:class="index ? 'border-t border-(--bb-border)' : ''"
|
|
139
139
|
>
|
|
140
|
-
<template #header="{
|
|
140
|
+
<template #header="{ open }">
|
|
141
141
|
<div class="flex w-full items-center gap-2 px-3 py-2 text-left">
|
|
142
142
|
<BbBadge size="xs" :variant="METHOD_VARIANT[endpoint.method]">{{
|
|
143
143
|
endpoint.method
|
|
@@ -145,7 +145,7 @@ on the row, badge included, toggles the panel.
|
|
|
145
145
|
<code class="truncate font-mono text-xs">{{ endpoint.path }}</code>
|
|
146
146
|
<span
|
|
147
147
|
class="ml-auto shrink-0 text-(--bb-text-muted) transition-transform duration-200"
|
|
148
|
-
:class="
|
|
148
|
+
:class="open ? 'rotate-180' : ''"
|
|
149
149
|
>
|
|
150
150
|
<BbIcon icon="lucide:chevron-down" size="sm" />
|
|
151
151
|
</span>
|
|
@@ -234,22 +234,22 @@ const endpoints = ref<Endpoint[]>([
|
|
|
234
234
|
Non-scoped so variant classes on the child badge receive the accents. -->
|
|
235
235
|
<style>
|
|
236
236
|
.bb-badge.bb-badge--soft-blue {
|
|
237
|
-
--accent:
|
|
237
|
+
--accent: var(--bb-info);
|
|
238
238
|
}
|
|
239
239
|
.bb-badge.bb-badge--soft-green {
|
|
240
|
-
--accent:
|
|
240
|
+
--accent: var(--bb-success);
|
|
241
241
|
}
|
|
242
242
|
.bb-badge.bb-badge--soft-red {
|
|
243
|
-
--accent:
|
|
243
|
+
--accent: var(--bb-danger);
|
|
244
244
|
}
|
|
245
245
|
.bb-badge.bb-badge--soft-blue,
|
|
246
246
|
.bb-badge.bb-badge--soft-green,
|
|
247
247
|
.bb-badge.bb-badge--soft-red {
|
|
248
248
|
--bg: color-mix(in oklab, var(--accent) 15%, var(--bb-panel));
|
|
249
249
|
--fg: color-mix(in oklab, var(--accent) 80%, var(--bb-text));
|
|
250
|
-
--
|
|
250
|
+
--bw: 1px;
|
|
251
251
|
--border-color: color-mix(in oklab, var(--accent) 25%, var(--bb-panel));
|
|
252
|
-
--ring: color-mix(in oklab, var(--accent) 45%, transparent);
|
|
252
|
+
--ring-color: color-mix(in oklab, var(--accent) 45%, transparent);
|
|
253
253
|
}
|
|
254
254
|
</style>
|
|
255
255
|
```
|
|
@@ -257,9 +257,9 @@ const endpoints = ref<Endpoint[]>([
|
|
|
257
257
|
### Slot scope: the open flag and the toggle handle
|
|
258
258
|
|
|
259
259
|
Both slots — `header` and the default (body) slot — receive the same scope,
|
|
260
|
-
`{
|
|
260
|
+
`{ open, toggle }`:
|
|
261
261
|
|
|
262
|
-
- `
|
|
262
|
+
- `open` mirrors the open state (one-way — assigning to it does nothing). Use
|
|
263
263
|
it to spin a chevron or swap header copy.
|
|
264
264
|
- `toggle()` flips the panel. In the header it is redundant (the button already
|
|
265
265
|
toggles); its real use is in the **body**, for a "Show less" affordance that
|
|
@@ -274,14 +274,14 @@ Both slots — `header` and the default (body) slot — receive the same scope,
|
|
|
274
274
|
class="max-w-md overflow-hidden rounded-(--bb-radius) border border-(--bb-border)"
|
|
275
275
|
>
|
|
276
276
|
<BbAccordion v-model="notes">
|
|
277
|
-
<template #header="{
|
|
277
|
+
<template #header="{ open }">
|
|
278
278
|
<div
|
|
279
279
|
class="flex w-full items-center justify-between gap-2 px-3 py-2 text-left text-sm font-medium"
|
|
280
280
|
>
|
|
281
281
|
<span>Release notes</span>
|
|
282
282
|
<span
|
|
283
283
|
class="shrink-0 text-(--bb-text-muted) transition-transform duration-200"
|
|
284
|
-
:class="
|
|
284
|
+
:class="open ? 'rotate-180' : ''"
|
|
285
285
|
>
|
|
286
286
|
<BbIcon icon="lucide:chevron-down" size="sm" />
|
|
287
287
|
</span>
|
|
@@ -334,7 +334,7 @@ to `null`). Prefer a stable key over an index when the list can reorder.
|
|
|
334
334
|
:model-value="openIndex === index"
|
|
335
335
|
@update:model-value="openIndex = $event ? index : null"
|
|
336
336
|
>
|
|
337
|
-
<template #header="{
|
|
337
|
+
<template #header="{ open }">
|
|
338
338
|
<div
|
|
339
339
|
class="flex w-full items-center justify-between gap-2 px-3 py-2 text-left text-sm"
|
|
340
340
|
>
|
|
@@ -343,7 +343,7 @@ to `null`). Prefer a stable key over an index when the list can reorder.
|
|
|
343
343
|
{{ plan.price }}
|
|
344
344
|
<span
|
|
345
345
|
class="shrink-0 transition-transform duration-200"
|
|
346
|
-
:class="
|
|
346
|
+
:class="open ? 'rotate-180' : ''"
|
|
347
347
|
>
|
|
348
348
|
<BbIcon icon="lucide:chevron-down" size="sm" />
|
|
349
349
|
</span>
|
|
@@ -403,14 +403,14 @@ padding on the nested body content.
|
|
|
403
403
|
class="max-w-md overflow-hidden rounded-(--bb-radius) border border-(--bb-border)"
|
|
404
404
|
>
|
|
405
405
|
<BbAccordion v-model="notifications">
|
|
406
|
-
<template #header="{
|
|
406
|
+
<template #header="{ open }">
|
|
407
407
|
<div
|
|
408
408
|
class="flex w-full items-center justify-between gap-2 px-3 py-2 text-left text-sm font-medium"
|
|
409
409
|
>
|
|
410
410
|
<span>Notifications</span>
|
|
411
411
|
<span
|
|
412
412
|
class="shrink-0 text-(--bb-text-muted) transition-transform duration-200"
|
|
413
|
-
:class="
|
|
413
|
+
:class="open ? 'rotate-180' : ''"
|
|
414
414
|
>
|
|
415
415
|
<BbIcon icon="lucide:chevron-down" size="sm" />
|
|
416
416
|
</span>
|
|
@@ -420,14 +420,14 @@ padding on the nested body content.
|
|
|
420
420
|
<BbCheckbox v-model="mentions" label="Mentions" />
|
|
421
421
|
<BbCheckbox v-model="digests" label="Weekly digest" />
|
|
422
422
|
<BbAccordion v-model="advanced">
|
|
423
|
-
<template #header="{
|
|
423
|
+
<template #header="{ open }">
|
|
424
424
|
<div
|
|
425
425
|
class="flex w-full items-center justify-between gap-2 py-1 text-left text-sm text-(--bb-text-muted)"
|
|
426
426
|
>
|
|
427
427
|
<span>Advanced</span>
|
|
428
428
|
<span
|
|
429
429
|
class="shrink-0 transition-transform duration-200"
|
|
430
|
-
:class="
|
|
430
|
+
:class="open ? 'rotate-180' : ''"
|
|
431
431
|
>
|
|
432
432
|
<BbIcon icon="lucide:chevron-down" size="sm" />
|
|
433
433
|
</span>
|
|
@@ -519,11 +519,11 @@ collapses with the body.
|
|
|
519
519
|
pt:panel="text-sm"
|
|
520
520
|
:pt:root="index ? 'border-t border-(--bb-border)' : ''"
|
|
521
521
|
>
|
|
522
|
-
<template #header="{
|
|
522
|
+
<template #header="{ open }">
|
|
523
523
|
<span>{{ faq.question }}</span>
|
|
524
524
|
<span
|
|
525
525
|
class="shrink-0 text-(--bb-text-muted) transition-transform duration-200"
|
|
526
|
-
:class="
|
|
526
|
+
:class="open ? 'rotate-180' : ''"
|
|
527
527
|
>
|
|
528
528
|
<BbIcon icon="lucide:chevron-down" size="sm" />
|
|
529
529
|
</span>
|
|
@@ -575,7 +575,7 @@ grammar, the merge rules and the global map are in the
|
|
|
575
575
|
|
|
576
576
|
### Works well with
|
|
577
577
|
|
|
578
|
-
- `BbIcon` — a rotating chevron in the header, driven by the slot's `
|
|
578
|
+
- `BbIcon` — a rotating chevron in the header, driven by the slot's `open` (see
|
|
579
579
|
the FAQ example).
|
|
580
580
|
- `BbBadge` — counts or soft method/status pills in the header (see the API
|
|
581
581
|
reference example); non-interactive content stays click-transparent.
|
|
@@ -619,7 +619,7 @@ grammar, the merge rules and the global map are in the
|
|
|
619
619
|
| --- | --- | --- | --- | --- |
|
|
620
620
|
| `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: `header`, `panel`, `root`. States: `open`. 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`. |
|
|
621
621
|
| `eager` | `boolean \| undefined` | `false` | | Prevents rendering content before it's made visible. |
|
|
622
|
-
| `id` | `string \| undefined` | | | The
|
|
622
|
+
| `id` | `string \| undefined` | | | The root's `id`; the header button's id (`<id>_header`) derives from it. Generated when omitted. |
|
|
623
623
|
| `modelValue` | `boolean \| undefined` | `false` | | Used by v-model to trigger opening / closing the collapsible. An accordion with no `v-model` starts closed. |
|
|
624
624
|
| `transitionDuration` | `number \| undefined` | `250` | | How long the transition has to last in milliseconds |
|
|
625
625
|
|
|
@@ -641,7 +641,7 @@ States are listed in precedence order: when two are on at once and their entries
|
|
|
641
641
|
|
|
642
642
|
## Events
|
|
643
643
|
|
|
644
|
-
- `update:modelValue` — `(
|
|
644
|
+
- `update:modelValue` — `(value: boolean): void` — Emitted with the new value whenever `v-model` changes.
|
|
645
645
|
|
|
646
646
|
## Slots
|
|
647
647
|
|
|
@@ -664,4 +664,4 @@ States are listed in precedence order: when two are on at once and their entries
|
|
|
664
664
|
## See Also
|
|
665
665
|
|
|
666
666
|
- [BbCollapsible](./BbCollapsible.md) — Toggles visibility of collapsible content blocks.
|
|
667
|
-
- [BbTabs](./BbTabs.md) — Switches between tabbed content views (shadcn-like strip; the co-located BbTabsRoot / BbTabsList /
|
|
667
|
+
- [BbTabs](./BbTabs.md) — Switches between tabbed content views (shadcn-like strip; the co-located BbTabsRoot / BbTabsList / BbTabsPanels exports enable split layouts).
|
package/dist/ai/BbAlert.md
CHANGED
|
@@ -53,6 +53,11 @@ the user should attend to; `destructive` reports a failure or dangerous state.
|
|
|
53
53
|
An alert reads far better with a matching leading `icon`, so treat variant and
|
|
54
54
|
icon as a pair.
|
|
55
55
|
|
|
56
|
+
There is no `success` or `info` alert, on purpose (the built-in ramps stay
|
|
57
|
+
closed): a confirmation is usually a toast, and a neutral note is `outline`
|
|
58
|
+
with an icon. When an app needs one anyway, register it with the plugin's
|
|
59
|
+
`alertVariants` option and colour it from `--bb-success` / `--bb-info`.
|
|
60
|
+
|
|
56
61
|
**Semantic variants, each with a fitting icon**
|
|
57
62
|
|
|
58
63
|
```vue
|
|
@@ -475,7 +480,7 @@ full grammar, the merge rules and the global map are in the
|
|
|
475
480
|
|
|
476
481
|
## Events
|
|
477
482
|
|
|
478
|
-
- `update:modelValue` — `(
|
|
483
|
+
- `update:modelValue` — `(value: boolean): void` — Emitted with the new value whenever `v-model` changes.
|
|
479
484
|
|
|
480
485
|
## Slots
|
|
481
486
|
|
package/dist/ai/BbAvatar.md
CHANGED
|
@@ -648,6 +648,7 @@ Set these on the element, or on a class you put on it, to retune this component
|
|
|
648
648
|
| `--bg` | `.bb-avatar` | `var(--bb-primary)` | fallback surface (an image covers it) |
|
|
649
649
|
| `--fg` | `.bb-avatar` | `var(--bb-primary-fg)` | Initials; the built-in icon is an 80/20 mix of this toward --bg |
|
|
650
650
|
| `--default-icon-size` | `.bb-avatar` | `clamp(14px, calc(var(--size) * 0.7), 48px)` | Built-in fallback icon: 70% of the avatar, floored at 14px and capped at 48px. `--size` is the avatar's own box, set inline from the `size` prop. |
|
|
651
|
+
| `--fs` | `.bb-avatar` | `max(8px, calc(var(--size) * 0.4))` | Initials: 40% of the avatar, floored at 8px |
|
|
651
652
|
| `--elev` | `.bb-avatar` | `var(--bb-elev-sm)` | The theme's resting lift on small chrome (Q44.15), declared here so an ancestor's `--elev` cannot reach in; `--elev: none` flattens one. |
|
|
652
653
|
| `--size` | `.bb-avatar__default-icon` | `var(--default-icon-size)` | |
|
|
653
654
|
|
package/dist/ai/BbBadge.md
CHANGED
|
@@ -161,19 +161,19 @@ const invoices: InvoiceRow[] = [
|
|
|
161
161
|
Non-scoped so variant classes on the child badge receive the accents. -->
|
|
162
162
|
<style>
|
|
163
163
|
.bb-badge.bb-badge--soft-gray {
|
|
164
|
-
--accent:
|
|
164
|
+
--accent: var(--bb-text-muted);
|
|
165
165
|
}
|
|
166
166
|
.bb-badge.bb-badge--soft-blue {
|
|
167
|
-
--accent:
|
|
167
|
+
--accent: var(--bb-info);
|
|
168
168
|
}
|
|
169
169
|
.bb-badge.bb-badge--soft-green {
|
|
170
|
-
--accent:
|
|
170
|
+
--accent: var(--bb-success);
|
|
171
171
|
}
|
|
172
172
|
.bb-badge.bb-badge--soft-amber {
|
|
173
|
-
--accent:
|
|
173
|
+
--accent: var(--bb-warn);
|
|
174
174
|
}
|
|
175
175
|
.bb-badge.bb-badge--soft-red {
|
|
176
|
-
--accent:
|
|
176
|
+
--accent: var(--bb-danger);
|
|
177
177
|
}
|
|
178
178
|
|
|
179
179
|
.bb-badge.bb-badge--soft-gray,
|
|
@@ -183,9 +183,9 @@ const invoices: InvoiceRow[] = [
|
|
|
183
183
|
.bb-badge.bb-badge--soft-red {
|
|
184
184
|
--bg: color-mix(in oklab, var(--accent) 15%, var(--bb-panel));
|
|
185
185
|
--fg: color-mix(in oklab, var(--accent) 80%, var(--bb-text));
|
|
186
|
-
--
|
|
186
|
+
--bw: 1px;
|
|
187
187
|
--border-color: color-mix(in oklab, var(--accent) 25%, var(--bb-panel));
|
|
188
|
-
--ring: color-mix(in oklab, var(--accent) 45%, transparent);
|
|
188
|
+
--ring-color: color-mix(in oklab, var(--accent) 45%, transparent);
|
|
189
189
|
}
|
|
190
190
|
</style>
|
|
191
191
|
```
|
|
@@ -650,12 +650,12 @@ and the clear control be independent controls:
|
|
|
650
650
|
<!-- <button>/<a> in button mode -->
|
|
651
651
|
<svg class="bb-badge__prepend-icon" />
|
|
652
652
|
<!-- or __icon / BbSpinner -->
|
|
653
|
-
<span class="bb-
|
|
653
|
+
<span class="bb-badge__text">label</span>
|
|
654
654
|
</span>
|
|
655
655
|
<span class="bb-badge__trailing">
|
|
656
656
|
<!-- only when needed -->
|
|
657
657
|
<svg class="bb-badge__append-icon" />
|
|
658
|
-
<button class="bb-badge__clear
|
|
658
|
+
<button class="bb-badge__clear">…</button>
|
|
659
659
|
</span>
|
|
660
660
|
</span>
|
|
661
661
|
```
|
|
@@ -669,7 +669,7 @@ Focus is always ringed on the **whole pill** (never on the inner control), for
|
|
|
669
669
|
the body and the clear button alike; the clear button additionally lights its
|
|
670
670
|
glyph. The class hooks above are the supported styling surface —
|
|
671
671
|
`.bb-badge__body` and `.bb-badge__trailing` are new, so avoid direct-child
|
|
672
|
-
selectors like `.bb-badge > .bb-
|
|
672
|
+
selectors like `.bb-badge > .bb-badge__text`, which no longer match.
|
|
673
673
|
|
|
674
674
|
### Restyling with passthrough
|
|
675
675
|
|
|
@@ -767,22 +767,22 @@ const endpoints: Endpoint[] = [
|
|
|
767
767
|
Non-scoped so variant classes on the child badge receive the accents. -->
|
|
768
768
|
<style>
|
|
769
769
|
.bb-badge.bb-badge--soft-blue {
|
|
770
|
-
--accent:
|
|
770
|
+
--accent: var(--bb-info);
|
|
771
771
|
}
|
|
772
772
|
.bb-badge.bb-badge--soft-green {
|
|
773
|
-
--accent:
|
|
773
|
+
--accent: var(--bb-success);
|
|
774
774
|
}
|
|
775
775
|
.bb-badge.bb-badge--soft-red {
|
|
776
|
-
--accent:
|
|
776
|
+
--accent: var(--bb-danger);
|
|
777
777
|
}
|
|
778
778
|
.bb-badge.bb-badge--soft-blue,
|
|
779
779
|
.bb-badge.bb-badge--soft-green,
|
|
780
780
|
.bb-badge.bb-badge--soft-red {
|
|
781
781
|
--bg: color-mix(in oklab, var(--accent) 15%, var(--bb-panel));
|
|
782
|
-
--
|
|
783
|
-
--
|
|
782
|
+
--fg: color-mix(in oklab, var(--accent) 80%, var(--bb-text));
|
|
783
|
+
--bw: 1px;
|
|
784
784
|
--border-color: color-mix(in oklab, var(--accent) 25%, var(--bb-panel));
|
|
785
|
-
--ring: color-mix(in oklab, var(--accent) 45%, transparent);
|
|
785
|
+
--ring-color: color-mix(in oklab, var(--accent) 45%, transparent);
|
|
786
786
|
}
|
|
787
787
|
</style>
|
|
788
788
|
```
|
|
@@ -874,7 +874,7 @@ States are listed in precedence order: when two are on at once and their entries
|
|
|
874
874
|
|
|
875
875
|
## Events
|
|
876
876
|
|
|
877
|
-
- `click:clear` — `(event:
|
|
877
|
+
- `click:clear` — `(event: MouseEvent): void` — Emitted when the clear button is pressed (only rendered when `clearable`).
|
|
878
878
|
|
|
879
879
|
## Slots
|
|
880
880
|
|
|
@@ -888,20 +888,21 @@ Set these on the element, or on a class you put on it, to retune this component
|
|
|
888
888
|
| --- | --- | --- | --- |
|
|
889
889
|
| `--bg` | `.bb-badge` | `var(--bb-primary)` | pill fill |
|
|
890
890
|
| `--fg` | `.bb-badge` | `var(--bb-primary-fg)` | label, icons and the clear glyph |
|
|
891
|
-
| `--
|
|
891
|
+
| `--bw` | `.bb-badge` | `0px` | Pill border. The `border` shorthand is always present, so the width is what turns it on — the filled variants leave it at 0 and the bordered ones (secondary/destructive/outline) step up to `--bb-border-w-sm`. Nothing compensates for it: the… |
|
|
892
892
|
| `--border-color` | `.bb-badge` | `transparent` | |
|
|
893
|
-
| `--ring` | `.bb-badge` | `var(--bb-primary-ring)` | focus ring, per variant |
|
|
894
|
-
| `--
|
|
893
|
+
| `--ring-color` | `.bb-badge` | `var(--bb-primary-ring)` | focus ring colour, per variant |
|
|
894
|
+
| `--ring-size` | `.bb-badge` | `var(--bb-ring-size)` | focus ring width |
|
|
895
|
+
| `--min-size-md` | `.bb-badge` | `calc(var(--bb-control-h) - 14px)` | 18px at the default |
|
|
895
896
|
| `--min-size` | `.bb-badge` | `var(--min-size-md)` | pill min height and min width |
|
|
896
897
|
| `--elev` | `.bb-badge` | `var(--bb-elev-sm)` | Resting lift. Invisible while `--bb-elev` is its default transparent layer. A chip is small enough that a theme wanting a different lift here than on a button sets `--elev` on this class. |
|
|
897
898
|
| `--r` | `.bb-badge` | `calc(var(--bb-radius) * 0.5)` | Pill corners; the body and trailing wrappers round their outer edges to match |
|
|
898
|
-
| `--
|
|
899
|
+
| `--fs` | `.bb-badge` | `calc(var(--bb-fs) - 2px)` | 12px at the default (Q49.25) |
|
|
899
900
|
| `--icon-size` | `.bb-badge` | `12px` | leading/append icons (passed to BbIcon as --size) |
|
|
900
901
|
| `--gap` | `.bb-badge` | `3px` | space between label, icons and the trailing side |
|
|
901
|
-
| `--
|
|
902
|
+
| `--px` | `.bb-badge` | `6px` | base side padding; the modifiers below scale it per side |
|
|
902
903
|
| `--clear-size` | `.bb-badge` | `12px` | clear button's glyph box (the circle painted on hover is 2px smaller) |
|
|
903
|
-
| `--pad-left` | `.bb-badge` | `var(--
|
|
904
|
-
| `--pad-right` | `.bb-badge` | `var(--
|
|
904
|
+
| `--pad-left` | `.bb-badge` | `var(--px)` | Side-owned padding: the body and trailing wrappers carry the pill's inline padding (and its radius) so their hit areas run flush to the border. The modifiers below retune these vars instead of the pill's own padding. |
|
|
905
|
+
| `--pad-right` | `.bb-badge` | `var(--px)` | |
|
|
905
906
|
| `--size` | `.bb-badge__icon` | `var(--icon-size)` | |
|
|
906
907
|
|
|
907
908
|
## Component tree
|
|
@@ -913,7 +914,7 @@ Set these on the element, or on a class you put on it, to retune this component
|
|
|
913
914
|
- **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 `BbBadge`'s root, where the node's own declaration masks it (design-tokens guide, _Overriding one from a consumer app_, rule 0).
|
|
914
915
|
- Listed nodes are the ones `BbBadge`'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`.
|
|
915
916
|
|
|
916
|
-
- `BbBadge` _(this component)_ — its own template binds: `spinner` → `BbSpinner`, `icon` → `BbIcon`, `clear` → `button.bb-badge__clear
|
|
917
|
+
- `BbBadge` _(this component)_ — its own template binds: `spinner` → `BbSpinner`, `icon` → `BbIcon`, `clear` → `button.bb-badge__clear`
|
|
917
918
|
- Also mounts `BbIcon`, `BbSpinner`, `BadgeBodyContent`
|
|
918
919
|
|
|
919
920
|
## See Also
|
package/dist/ai/BbBadgeButton.md
CHANGED
|
@@ -84,20 +84,21 @@ Set these on the element, or on a class you put on it, to retune this component
|
|
|
84
84
|
| --- | --- | --- | --- |
|
|
85
85
|
| `--bg` | `.bb-badge` | `var(--bb-primary)` | pill fill |
|
|
86
86
|
| `--fg` | `.bb-badge` | `var(--bb-primary-fg)` | label, icons and the clear glyph |
|
|
87
|
-
| `--
|
|
87
|
+
| `--bw` | `.bb-badge` | `0px` | Pill border. The `border` shorthand is always present, so the width is what turns it on — the filled variants leave it at 0 and the bordered ones (secondary/destructive/outline) step up to `--bb-border-w-sm`. Nothing compensates for it: the… |
|
|
88
88
|
| `--border-color` | `.bb-badge` | `transparent` | |
|
|
89
|
-
| `--ring` | `.bb-badge` | `var(--bb-primary-ring)` | focus ring, per variant |
|
|
90
|
-
| `--
|
|
89
|
+
| `--ring-color` | `.bb-badge` | `var(--bb-primary-ring)` | focus ring colour, per variant |
|
|
90
|
+
| `--ring-size` | `.bb-badge` | `var(--bb-ring-size)` | focus ring width |
|
|
91
|
+
| `--min-size-md` | `.bb-badge` | `calc(var(--bb-control-h) - 14px)` | 18px at the default |
|
|
91
92
|
| `--min-size` | `.bb-badge` | `var(--min-size-md)` | pill min height and min width |
|
|
92
93
|
| `--elev` | `.bb-badge` | `var(--bb-elev-sm)` | Resting lift. Invisible while `--bb-elev` is its default transparent layer. A chip is small enough that a theme wanting a different lift here than on a button sets `--elev` on this class. |
|
|
93
94
|
| `--r` | `.bb-badge` | `calc(var(--bb-radius) * 0.5)` | Pill corners; the body and trailing wrappers round their outer edges to match |
|
|
94
|
-
| `--
|
|
95
|
+
| `--fs` | `.bb-badge` | `calc(var(--bb-fs) - 2px)` | 12px at the default (Q49.25) |
|
|
95
96
|
| `--icon-size` | `.bb-badge` | `12px` | leading/append icons (passed to BbIcon as --size) |
|
|
96
97
|
| `--gap` | `.bb-badge` | `3px` | space between label, icons and the trailing side |
|
|
97
|
-
| `--
|
|
98
|
+
| `--px` | `.bb-badge` | `6px` | base side padding; the modifiers below scale it per side |
|
|
98
99
|
| `--clear-size` | `.bb-badge` | `12px` | clear button's glyph box (the circle painted on hover is 2px smaller) |
|
|
99
|
-
| `--pad-left` | `.bb-badge` | `var(--
|
|
100
|
-
| `--pad-right` | `.bb-badge` | `var(--
|
|
100
|
+
| `--pad-left` | `.bb-badge` | `var(--px)` | Side-owned padding: the body and trailing wrappers carry the pill's inline padding (and its radius) so their hit areas run flush to the border. The modifiers below retune these vars instead of the pill's own padding. |
|
|
101
|
+
| `--pad-right` | `.bb-badge` | `var(--px)` | |
|
|
101
102
|
| `--size` | `.bb-badge__icon` | `var(--icon-size)` | |
|
|
102
103
|
|
|
103
104
|
## Component tree
|