bitboss-ui 3.0.0-beta.4 → 3.0.0-beta.41
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 +317 -98
- package/bin/bitboss-ui-mcp.mjs +1566 -75
- package/bin/bitboss-ui.mjs +716 -72
- package/dist/ai/BbAccordion.md +178 -56
- package/dist/ai/BbAlert.md +140 -28
- package/dist/ai/BbAsterisk.md +61 -4
- package/dist/ai/BbAvatar.md +194 -53
- package/dist/ai/BbBadge.md +250 -50
- package/dist/ai/BbBadgeButton.md +74 -21
- package/dist/ai/BbBaseButton.md +132 -51
- package/dist/ai/BbBaseCheckboxIcon.md +118 -26
- package/dist/ai/BbBaseRadioIcon.md +115 -26
- package/dist/ai/BbBaseSwitchIcon.md +123 -28
- package/dist/ai/BbBreadcrumbs.md +221 -51
- package/dist/ai/BbButton.md +389 -107
- package/dist/ai/BbCalendar.md +667 -0
- package/dist/ai/BbCheckbox.md +242 -80
- package/dist/ai/BbCheckboxGroup.md +575 -66
- package/dist/ai/BbCollapsible.md +158 -39
- package/dist/ai/BbColorInput.md +322 -82
- package/dist/ai/BbColorPalette.md +261 -61
- package/dist/ai/BbConfirm.md +220 -51
- package/dist/ai/BbConfirmPortal.md +1 -1
- package/dist/ai/BbDatePicker.md +272 -37
- package/dist/ai/BbDatePickerInput.md +321 -92
- package/dist/ai/BbDialog.md +492 -87
- package/dist/ai/BbDropdown.md +1182 -104
- package/dist/ai/BbDropdownButton.md +239 -61
- package/dist/ai/BbDropdownGroup.md +5 -5
- package/dist/ai/BbDropzone.md +140 -36
- package/dist/ai/BbForm.md +1165 -40
- package/dist/ai/BbIcon.md +100 -33
- package/dist/ai/BbIndicator.md +79 -12
- package/dist/ai/BbNumberInput.md +257 -87
- package/dist/ai/BbOffCanvas.md +396 -91
- package/dist/ai/BbPagination.md +199 -32
- package/dist/ai/BbPopover.md +219 -54
- package/dist/ai/BbProgress.md +137 -71
- package/dist/ai/BbPtScope.md +136 -0
- package/dist/ai/BbRadio.md +234 -43
- package/dist/ai/BbRadioGroup.md +529 -91
- package/dist/ai/BbRating.md +243 -61
- package/dist/ai/BbSelect.md +690 -120
- package/dist/ai/BbSelectPopover.md +434 -122
- package/dist/ai/BbSlider.md +275 -79
- package/dist/ai/BbSmoothHeight.md +142 -34
- package/dist/ai/BbSpinner.md +179 -81
- package/dist/ai/BbSwitch.md +249 -63
- package/dist/ai/BbSwitchGroup.md +394 -65
- package/dist/ai/BbTable.md +1666 -222
- package/dist/ai/BbTabs.md +898 -178
- package/dist/ai/BbTabsList.md +81 -7
- package/dist/ai/BbTabsPanels.md +77 -0
- package/dist/ai/BbTabsRoot.md +16 -15
- package/dist/ai/BbTag.md +256 -76
- package/dist/ai/BbTextInput.md +480 -102
- package/dist/ai/BbTextarea.md +310 -96
- package/dist/ai/BbTimePicker.md +159 -24
- package/dist/ai/BbTimePickerInput.md +277 -46
- package/dist/ai/BbToast.md +286 -40
- package/dist/ai/BbToastPortal.md +3 -3
- package/dist/ai/BbTooltip.md +187 -34
- package/dist/ai/BbTree.md +260 -85
- package/dist/ai/ChipsBox.md +43 -2
- package/dist/ai/ClearableButton.md +12 -0
- package/dist/ai/CommaBox.md +2 -1
- package/dist/ai/CommonField.md +63 -0
- package/dist/ai/CommonFieldInput.md +90 -0
- package/dist/ai/CommonPopover.md +17 -12
- package/dist/ai/CommonTimeSelector.md +63 -0
- package/dist/ai/ErrorIcon.md +20 -0
- package/dist/ai/FlatListBox.md +41 -11
- package/dist/ai/GroupedListBox.md +42 -12
- package/dist/ai/ListBox.md +46 -11
- package/dist/ai/OptionsContainer.md +13 -10
- package/dist/ai/WarningIcon.md +20 -0
- package/dist/ai/changelog.json +4025 -141
- package/dist/ai/components.json +51872 -10136
- package/dist/ai/composables/useBbConfig.md +72 -11
- package/dist/ai/composables/useBbDropdownContext.md +168 -0
- package/dist/ai/composables/useBbFormContext.md +51 -24
- package/dist/ai/composables/useBbFormField.md +134 -0
- package/dist/ai/composables/useBbTableContext.md +41 -19
- package/dist/ai/composables/useConfirm.md +16 -8
- package/dist/ai/composables/useCountdown.md +1 -1
- package/dist/ai/composables/useId.md +10 -10
- package/dist/ai/composables/useMobile.md +17 -10
- package/dist/ai/composables/useToast.md +25 -19
- package/dist/ai/design-tokens.json +940 -0
- package/dist/ai/design-tokens.manifest.yaml +175 -0
- package/dist/ai/guides/agent-contract.md +168 -22
- package/dist/ai/guides/ai-router.md +79 -40
- package/dist/ai/guides/app-layout.md +8 -4
- package/dist/ai/guides/coherence-playbook.md +8 -8
- package/dist/ai/guides/component-picker.md +42 -34
- package/dist/ai/guides/design-language.md +274 -97
- package/dist/ai/guides/design-tokens.md +493 -105
- package/dist/ai/guides/fetch-items-playbook.md +22 -16
- package/dist/ai/guides/icons-policy.md +67 -35
- package/dist/ai/guides/inertia-helpers.md +4 -1
- package/dist/ai/guides/inline-edit-playbook.md +13 -6
- package/dist/ai/guides/installation-and-plugin-setup.md +817 -73
- package/dist/ai/guides/migration/components/bb-accordion.md +37 -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-badge.md +5 -5
- package/dist/ai/guides/migration/components/bb-breadcrumbs.md +9 -8
- package/dist/ai/guides/migration/components/bb-button.md +80 -20
- package/dist/ai/guides/migration/components/bb-checkbox-group.md +116 -29
- package/dist/ai/guides/migration/components/bb-checkbox.md +53 -10
- package/dist/ai/guides/migration/components/bb-chip.md +6 -6
- package/dist/ai/guides/migration/components/bb-collapsible.md +5 -5
- package/dist/ai/guides/migration/components/bb-color-input.md +5 -5
- package/dist/ai/guides/migration/components/bb-color-palette.md +16 -9
- package/dist/ai/guides/migration/components/bb-date-picker-input.md +45 -35
- package/dist/ai/guides/migration/components/bb-dialog.md +69 -36
- package/dist/ai/guides/migration/components/bb-dropdown-button.md +7 -1
- package/dist/ai/guides/migration/components/bb-dropdown.md +31 -8
- package/dist/ai/guides/migration/components/bb-dropzone.md +8 -0
- package/dist/ai/guides/migration/components/bb-icon.md +7 -7
- package/dist/ai/guides/migration/components/bb-intersection.md +1 -1
- package/dist/ai/guides/migration/components/bb-offcanvas.md +29 -31
- package/dist/ai/guides/migration/components/bb-pagination.md +10 -0
- package/dist/ai/guides/migration/components/bb-popover.md +19 -11
- package/dist/ai/guides/migration/components/bb-radio-group.md +14 -0
- package/dist/ai/guides/migration/components/bb-rating.md +61 -24
- package/dist/ai/guides/migration/components/bb-select-popover.md +9 -1
- package/dist/ai/guides/migration/components/bb-select.md +21 -4
- package/dist/ai/guides/migration/components/bb-slider.md +14 -6
- package/dist/ai/guides/migration/components/bb-switch-group.md +14 -0
- package/dist/ai/guides/migration/components/bb-table.md +574 -33
- package/dist/ai/guides/migration/components/bb-tabs.md +91 -41
- package/dist/ai/guides/migration/components/bb-tag.md +9 -7
- package/dist/ai/guides/migration/components/bb-text-input.md +12 -12
- package/dist/ai/guides/migration/components/bb-toast.md +2 -2
- package/dist/ai/guides/migration/components/bb-tooltip.md +18 -0
- package/dist/ai/guides/migration/components/bb-tree.md +11 -9
- package/dist/ai/guides/migration/components/use-confirm.md +9 -1
- package/dist/ai/guides/migration/v2-to-v3.md +828 -240
- package/dist/ai/guides/migration/v3-beta-css-classes.md +751 -0
- package/dist/ai/guides/migration/v3-beta-tooling.md +119 -0
- package/dist/ai/guides/options-items-playbook.md +161 -12
- package/dist/ai/guides/page-shell.md +1 -1
- package/dist/ai/guides/passthrough.md +958 -0
- package/dist/ai/guides/preset-components.md +361 -0
- package/dist/ai/guides/ssr-prefill.md +127 -0
- package/dist/ai/guides/validated-forms.md +466 -55
- package/dist/ai/guides/validation-libraries.md +171 -0
- package/dist/ai/guides/validation-providers.md +113 -0
- package/dist/ai/index.md +45 -44
- package/dist/ai/recipes/inertia/approvals-inbox.md +26 -10
- package/dist/ai/recipes/inertia/command-palette.md +2 -2
- package/dist/ai/recipes/inertia/inline-edit-workspace.md +46 -30
- package/dist/ai/recipes/inertia/layout-scaffold.md +6 -2
- package/dist/ai/recipes/inertia/onboarding.md +30 -8
- package/dist/ai/recipes/inertia/ownership-atlas.md +72 -49
- package/dist/ai/recipes/inertia/record-form.md +53 -19
- package/dist/ai/recipes/inertia/records-workspace.md +201 -49
- package/dist/ai/recipes/inertia/settings-workspace.md +3809 -0
- package/dist/ai/recipes/inertia/upload-center.md +54 -43
- package/dist/ai/recipes/inertia/wizard-form.md +98 -14
- package/dist/ai/recipes/nuxt/approvals-inbox.md +26 -10
- package/dist/ai/recipes/nuxt/command-palette.md +2 -2
- package/dist/ai/recipes/nuxt/inline-edit-workspace.md +68 -52
- package/dist/ai/recipes/nuxt/layout-scaffold.md +6 -2
- package/dist/ai/recipes/nuxt/onboarding.md +30 -8
- package/dist/ai/recipes/nuxt/record-form.md +66 -22
- package/dist/ai/recipes/nuxt/records-workspace.md +199 -48
- package/dist/ai/recipes/nuxt/settings-workspace.md +3898 -0
- package/dist/ai/recipes/nuxt/upload-center.md +52 -41
- package/dist/ai/recipes/nuxt/wizard-form.md +98 -14
- package/dist/ai/recipes/vue/approvals-inbox.md +28 -12
- package/dist/ai/recipes/vue/command-palette.md +2 -2
- package/dist/ai/recipes/vue/inline-edit-workspace.md +69 -53
- package/dist/ai/recipes/vue/layout-scaffold.md +6 -2
- package/dist/ai/recipes/vue/onboarding.md +32 -8
- package/dist/ai/recipes/vue/record-form.md +81 -54
- package/dist/ai/recipes/vue/records-workspace.md +198 -49
- package/dist/ai/recipes/vue/settings-workspace.md +3836 -0
- package/dist/ai/recipes/vue/upload-center.md +53 -42
- package/dist/ai/recipes/vue/wizard-form.md +97 -14
- package/dist/ai/source/BbAccordion.md +90 -24
- package/dist/ai/source/BbAlert.md +209 -62
- package/dist/ai/source/BbAsterisk.md +54 -4
- package/dist/ai/source/BbAvatar.md +73 -16
- package/dist/ai/source/BbBadge.md +265 -97
- package/dist/ai/source/BbBadgeButton.md +218 -79
- package/dist/ai/source/BbBaseButton.md +108 -12
- 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 +363 -69
- package/dist/ai/source/BbButton.md +563 -174
- package/dist/ai/source/BbCalendar.md +1744 -0
- package/dist/ai/source/BbCheckbox.md +470 -68
- package/dist/ai/source/BbCheckboxGroup.md +976 -95
- package/dist/ai/source/BbCollapsible.md +96 -8
- package/dist/ai/source/BbColorInput.md +597 -67
- package/dist/ai/source/BbColorPalette.md +1284 -65
- package/dist/ai/source/BbConfirm.md +149 -7
- package/dist/ai/source/BbConfirmPortal.md +89 -3
- package/dist/ai/source/BbDatePicker.md +527 -381
- package/dist/ai/source/BbDatePickerInput.md +2015 -118
- package/dist/ai/source/BbDialog.md +531 -64
- package/dist/ai/source/BbDropdown.md +885 -175
- package/dist/ai/source/BbDropdownButton.md +377 -79
- package/dist/ai/source/BbDropdownGroup.md +687 -96
- package/dist/ai/source/BbDropzone.md +140 -31
- package/dist/ai/source/BbForm.md +875 -17
- package/dist/ai/source/BbIcon.md +130 -52
- package/dist/ai/source/BbIndicator.md +117 -60
- package/dist/ai/source/BbNumberInput.md +667 -84
- package/dist/ai/source/BbOffCanvas.md +1007 -261
- package/dist/ai/source/BbPagination.md +203 -31
- package/dist/ai/source/BbPopover.md +267 -90
- package/dist/ai/source/BbProgress.md +88 -26
- package/dist/ai/source/BbPtScope.md +54 -0
- package/dist/ai/source/BbRadio.md +388 -58
- package/dist/ai/source/BbRadioGroup.md +940 -109
- package/dist/ai/source/BbRating.md +736 -84
- package/dist/ai/source/BbSelect.md +1096 -96
- package/dist/ai/source/BbSelectPopover.md +807 -114
- package/dist/ai/source/BbSlider.md +1390 -98
- package/dist/ai/source/BbSmoothHeight.md +48 -2
- package/dist/ai/source/BbSpinner.md +62 -6
- package/dist/ai/source/BbSwitch.md +297 -60
- package/dist/ai/source/BbSwitchGroup.md +761 -83
- package/dist/ai/source/BbTable.md +6950 -1864
- package/dist/ai/source/BbTabs.md +368 -111
- package/dist/ai/source/BbTabsList.md +503 -146
- package/dist/ai/source/BbTabsPanels.md +625 -0
- package/dist/ai/source/BbTabsRoot.md +319 -100
- package/dist/ai/source/BbTag.md +796 -87
- package/dist/ai/source/BbTextInput.md +497 -68
- package/dist/ai/source/BbTextarea.md +550 -65
- package/dist/ai/source/BbTimePicker.md +395 -69
- package/dist/ai/source/BbTimePickerInput.md +1233 -106
- package/dist/ai/source/BbToast.md +250 -74
- package/dist/ai/source/BbToastPortal.md +210 -66
- package/dist/ai/source/BbTooltip.md +181 -30
- package/dist/ai/source/BbTree.md +76 -11
- package/dist/ai/source/ChipsBox.md +25 -5
- package/dist/ai/source/CommaBox.md +21 -6
- package/dist/ai/source/{BbBaseInputContainer.md → CommonField.md} +467 -250
- package/dist/ai/source/CommonFieldInput.md +848 -0
- package/dist/ai/source/CommonPopover.md +116 -30
- package/dist/ai/source/CommonTimeSelector.md +726 -0
- package/dist/ai/source/ErrorIcon.md +2 -2
- package/dist/ai/source/FlatListBox.md +188 -17
- package/dist/ai/source/GroupedListBox.md +236 -44
- package/dist/ai/source/GuidesComponent.md +14 -7
- package/dist/ai/source/ListBox.md +46 -8
- package/dist/ai/source/OptionsContainer.md +288 -60
- package/dist/ai/source/WarningIcon.md +2 -2
- package/dist/assets/css/reset.css_inline.js +1 -1
- package/dist/assets/svgs/star.svg_raw.js +4 -0
- package/dist/components/BbAccordion/BbAccordion.vue_vue_type_script_setup_true_lang.js +49 -32
- package/dist/components/BbAccordion/types.d.ts +35 -3
- package/dist/components/BbAccordion/types.js +11 -0
- package/dist/components/BbAlert/BbAlert.vue_vue_type_script_setup_true_lang.js +46 -30
- package/dist/components/BbAlert/types.d.ts +37 -3
- 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 +24 -18
- package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +96 -53
- package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +27 -8
- package/dist/components/BbBadge/badgeButtonContext.d.ts +25 -8
- package/dist/components/BbBadge/types.d.ts +46 -3
- package/dist/components/BbBadge/types.js +13 -0
- package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +109 -96
- package/dist/components/BbBaseButton/RouterComponent.vue_vue_type_script_setup_true_lang.js +11 -11
- package/dist/components/BbBaseButton/types.d.ts +33 -3
- 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 +187 -132
- package/dist/components/BbBreadcrumbs/types.d.ts +45 -3
- package/dist/components/BbBreadcrumbs/types.js +12 -0
- package/dist/components/BbButton/BbButton.vue.d.ts +5 -0
- package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +107 -81
- package/dist/components/BbButton/types.d.ts +113 -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 +608 -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 +225 -0
- package/dist/components/BbCalendar/types.js +29 -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 +274 -0
- package/dist/components/BbCalendar/useDayGrid.d.ts +79 -0
- package/dist/components/BbCalendar/useDayGrid.js +204 -0
- package/dist/components/BbCalendar/useToday.d.ts +23 -0
- package/dist/components/BbCalendar/useToday.js +21 -0
- package/dist/components/BbCheckbox/BbCheckbox.vue.d.ts +7 -7
- package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +214 -72
- package/dist/components/BbCheckbox/types.d.ts +180 -13
- package/dist/components/BbCheckbox/types.js +8 -0
- package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue.d.ts +15 -3
- package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +338 -90
- package/dist/components/BbCheckboxGroup/types.d.ts +195 -20
- 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 +17 -7
- package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +330 -86
- package/dist/components/BbColorInput/types.d.ts +230 -12
- 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 +515 -108
- package/dist/components/BbColorPalette/types.d.ts +76 -7
- 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 +125 -76
- package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +1 -0
- 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 +320 -223
- package/dist/components/BbDatePicker/types.d.ts +111 -17
- package/dist/components/BbDatePicker/types.js +33 -0
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +16 -4
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +1172 -87
- package/dist/components/BbDatePickerInput/types.d.ts +224 -19
- package/dist/components/BbDatePickerInput/types.js +39 -0
- package/dist/components/BbDialog/BbDialog.vue.d.ts +3 -3
- package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +227 -136
- package/dist/components/BbDialog/types.d.ts +92 -3
- 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 +108 -96
- package/dist/components/BbDropdown/BbDropdown.vue.d.ts +10 -2
- package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +337 -268
- package/dist/components/BbDropdown/BbDropdownGroup.vue.d.ts +5 -1
- package/dist/components/BbDropdown/BbDropdownList.vue.d.ts +8 -2
- package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +377 -293
- package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +129 -118
- package/dist/components/BbDropdown/normalizeGroups.js +55 -31
- package/dist/components/BbDropdown/types.d.ts +288 -30
- package/dist/components/BbDropdown/types.js +21 -2
- package/dist/components/BbDropdown/useDropdownContext.d.ts +10 -4
- package/dist/components/BbDropdown/useDropdownGroupRegistry.d.ts +1 -0
- package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +18 -3
- package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +172 -40
- package/dist/components/BbDropdownButton/types.d.ts +137 -8
- package/dist/components/BbDropdownButton/types.js +35 -0
- package/dist/components/BbDropzone/BbDropzone.vue.d.ts +2 -2
- package/dist/components/BbDropzone/BbDropzone.vue_vue_type_script_setup_true_lang.js +186 -144
- package/dist/components/BbDropzone/types.d.ts +38 -4
- package/dist/components/BbDropzone/types.js +16 -0
- package/dist/components/BbForm/BbForm.vue.d.ts +94 -0
- package/dist/{validated → components/BbForm}/BbForm.vue.js +1 -1
- package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +317 -0
- package/dist/components/BbForm/BbFormCustomField.d.ts +14 -0
- package/dist/components/BbForm/BbFormCustomField.js +43 -0
- package/dist/components/BbForm/bindFormField.d.ts +16 -0
- package/dist/components/BbForm/bindFormField.js +85 -0
- package/dist/components/BbForm/formFields.d.ts +64 -0
- package/dist/components/BbForm/formFields.js +11 -0
- package/dist/components/BbForm/formSchema.d.ts +56 -0
- package/dist/components/BbForm/formSchema.js +196 -0
- package/dist/components/BbForm/standardSchema.d.ts +59 -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 +34 -21
- 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 +12 -8
- package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +308 -85
- package/dist/components/BbNumberInput/types.d.ts +201 -18
- package/dist/components/BbNumberInput/types.js +8 -0
- package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +3 -3
- package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +311 -210
- package/dist/components/BbOffCanvas/types.d.ts +79 -6
- package/dist/components/BbOffCanvas/types.js +15 -0
- package/dist/components/BbPagination/BbPagination.vue.d.ts +2 -2
- package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +125 -90
- package/dist/components/BbPagination/types.d.ts +38 -0
- package/dist/components/BbPagination/types.js +13 -0
- package/dist/components/BbPopover/BbPopover.vue.d.ts +4 -4
- package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +219 -179
- package/dist/components/BbPopover/types.d.ts +51 -5
- package/dist/components/BbPopover/types.js +14 -0
- package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +29 -16
- package/dist/components/BbProgress/types.d.ts +25 -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 +7 -7
- package/dist/components/BbRadio/BbRadio.vue_vue_type_script_setup_true_lang.js +172 -59
- package/dist/components/BbRadio/types.d.ts +152 -13
- package/dist/components/BbRadio/types.js +8 -0
- package/dist/components/BbRadioGroup/BbRadioGroup.vue.d.ts +14 -2
- package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +319 -92
- package/dist/components/BbRadioGroup/types.d.ts +198 -22
- package/dist/components/BbRadioGroup/types.js +10 -0
- package/dist/components/BbRating/BbRating.vue.d.ts +10 -8
- package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +259 -78
- package/dist/components/BbRating/types.d.ts +174 -13
- package/dist/components/BbRating/types.js +21 -0
- package/dist/components/BbSelect/BbSelect.vue.d.ts +17 -3
- package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +553 -83
- package/dist/components/BbSelect/types.d.ts +235 -20
- package/dist/components/BbSelect/types.js +41 -0
- package/dist/components/BbSelectPopover/BbSelectPopover.vue.d.ts +15 -1
- package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +541 -391
- package/dist/components/BbSelectPopover/types.d.ts +124 -8
- package/dist/components/BbSelectPopover/types.js +24 -0
- package/dist/components/BbSlider/BbSlider.vue.d.ts +13 -8
- package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +472 -96
- package/dist/components/BbSlider/types.d.ts +202 -13
- package/dist/components/BbSlider/types.js +26 -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 +7 -7
- package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +220 -78
- 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 +14 -2
- package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +338 -90
- package/dist/components/BbSwitchGroup/types.d.ts +30 -7
- package/dist/components/BbSwitchGroup/types.js +5 -0
- package/dist/components/BbTable/BbTable.vue.d.ts +27 -6
- package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +2013 -685
- package/dist/components/BbTable/BbTableDataRow.d.ts +196 -0
- package/dist/components/BbTable/BbTableDataRow.js +151 -0
- package/dist/components/BbTable/BbTableExpandRow.d.ts +84 -0
- package/dist/components/BbTable/BbTableExpandRow.js +62 -0
- package/dist/components/BbTable/BbTableSelectToggle.d.ts +120 -0
- package/dist/components/BbTable/BbTableSelectToggle.js +122 -0
- package/dist/components/BbTable/gridWidgets.d.ts +30 -0
- package/dist/components/BbTable/gridWidgets.js +14 -0
- package/dist/components/BbTable/types.d.ts +473 -123
- package/dist/components/BbTable/types.js +31 -0
- package/dist/components/BbTable/utils.d.ts +145 -4
- package/dist/components/BbTable/utils.js +154 -37
- package/dist/components/BbTabs/BbTabs.vue.d.ts +3 -1
- package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +62 -26
- package/dist/components/BbTabs/BbTabsList.vue.d.ts +3 -10
- package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +143 -81
- package/dist/components/BbTabs/BbTabsPanels.vue.d.ts +12 -0
- package/dist/components/{BbBaseSwitch/BbBaseSwitch.vue.js → BbTabs/BbTabsPanels.vue.js} +2 -2
- package/dist/components/BbTabs/BbTabsPanels.vue_vue_type_script_setup_true_lang.js +59 -0
- package/dist/components/BbTabs/BbTabsRoot.vue.d.ts +3 -1
- package/dist/components/BbTabs/BbTabsRoot.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/components/BbTabs/types.d.ts +183 -23
- package/dist/components/BbTabs/types.js +34 -0
- package/dist/components/BbTag/BbTag.vue.d.ts +13 -10
- package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +383 -92
- package/dist/components/BbTag/types.d.ts +139 -14
- package/dist/components/BbTag/types.js +22 -0
- package/dist/components/BbTextInput/BbTextInput.vue.d.ts +10 -8
- package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +257 -84
- package/dist/components/BbTextInput/types.d.ts +168 -13
- package/dist/components/BbTextInput/types.js +8 -0
- package/dist/components/BbTextarea/BbTextarea.vue.d.ts +7 -7
- package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +291 -94
- package/dist/components/BbTextarea/types.d.ts +158 -14
- package/dist/components/BbTextarea/types.js +8 -0
- package/dist/components/BbTimePicker/BbTimePicker.vue.d.ts +12 -4
- package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +199 -122
- package/dist/components/BbTimePicker/types.d.ts +94 -7
- package/dist/components/BbTimePicker/types.js +18 -0
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue.d.ts +14 -4
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +749 -86
- package/dist/components/BbTimePickerInput/types.d.ts +171 -22
- package/dist/components/BbTimePickerInput/types.js +25 -0
- package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +63 -25
- package/dist/components/BbToast/BbToastMessage.vue.d.ts +4 -1
- package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +79 -76
- package/dist/components/BbToast/BbToastPortal.vue.d.ts +1 -0
- package/dist/components/BbToast/BbToastRegion.vue.d.ts +4 -1
- package/dist/components/BbToast/BbToastRegion.vue_vue_type_script_setup_true_lang.js +72 -64
- package/dist/components/BbToast/types.d.ts +54 -1
- package/dist/components/BbToast/types.js +28 -0
- package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +104 -87
- 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 +15 -3
- package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +51 -29
- package/dist/components/BbTree/BbTreeLevel.vue.d.ts +1 -1
- package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +17 -16
- package/dist/components/BbTree/context.d.ts +9 -1
- package/dist/components/BbTree/types.d.ts +40 -5
- package/dist/components/BbTree/types.js +7 -0
- package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +46 -44
- package/dist/components/ChipsBox/types.d.ts +7 -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 +7 -0
- package/dist/components/{BbBaseInputContainer/BbBaseInputContainer.vue.d.ts → CommonField/CommonField.vue.d.ts} +5 -5
- 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 +189 -0
- package/dist/components/CommonField/messageHeightMatrix.d.ts +2 -0
- package/dist/components/{BbBaseInputContainer → CommonField}/types.d.ts +52 -16
- 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 +120 -0
- package/dist/components/CommonFieldInput/boxBorderMatrix.d.ts +10 -0
- package/dist/components/{CommonInputWrapper → CommonFieldInput}/types.d.ts +27 -8
- package/dist/components/CommonPopover/CommonPopover.vue.d.ts +11 -2
- package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +76 -63
- package/dist/components/CommonPopover/types.d.ts +27 -8
- package/dist/components/{BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.d.ts → CommonTimeSelector/CommonTimeSelector.vue.d.ts} +21 -2
- 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 +232 -0
- package/dist/components/CommonTimeSelector/types.d.ts +6 -0
- package/dist/components/FlatListBox/FlatListBox.vue.d.ts +5 -1
- package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +165 -95
- package/dist/components/FlatListBox/types.d.ts +24 -2
- package/dist/components/GroupedListBox/GroupedListBox.vue.d.ts +5 -1
- package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +217 -134
- package/dist/components/GroupedListBox/types.d.ts +24 -2
- package/dist/components/ListBox/ListBox.vue.d.ts +5 -1
- package/dist/components/ListBox/ListBox.vue_vue_type_script_setup_true_lang.js +95 -69
- package/dist/components/ListBox/types.d.ts +24 -2
- package/dist/components/OptionsContainer/OptionsContainer.vue.d.ts +1 -1
- package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +109 -37
- package/dist/components/OptionsContainer/types.d.ts +53 -9
- package/dist/components/Transitions/ScaleFade.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/components/Transitions/Slide.vue.js +1 -1
- package/dist/composables/useBaseOptions.d.ts +12 -1
- package/dist/composables/useBaseOptions.js +77 -37
- 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/useBbFormContext.d.ts +131 -8
- package/dist/composables/useBbFormContext.js +49 -30
- package/dist/composables/useBbFormField.d.ts +40 -0
- package/dist/composables/useBbFormField.js +39 -0
- package/dist/composables/useBbTableContext.d.ts +45 -1
- package/dist/composables/useBbTableContext.js +93 -87
- package/dist/composables/useBbTabsContext.d.ts +15 -9
- package/dist/composables/useBbTabsContext.js +121 -90
- package/dist/composables/useClosingInert.d.ts +4 -4
- package/dist/composables/useCoarsePointer.js +7 -10
- package/dist/composables/useCoherence.js +1 -1
- package/dist/composables/useConfig.d.ts +59 -0
- package/dist/composables/useConfig.js +15 -0
- package/dist/composables/useConfirm.d.ts +39 -7
- package/dist/composables/useConfirm.js +50 -41
- package/dist/composables/useEscapeStackEntry.d.ts +13 -0
- package/dist/composables/useEscapeStackEntry.js +16 -0
- package/dist/composables/useFormBinding.d.ts +116 -0
- package/dist/composables/useFormBinding.js +34 -0
- package/dist/composables/useHydrated.d.ts +18 -0
- package/dist/composables/useHydrated.js +13 -7
- package/dist/composables/useId.d.ts +4 -3
- package/dist/composables/useId.js +1 -7
- package/dist/composables/useItemsGetter.d.ts +11 -0
- package/dist/composables/useItemsGetter.js +44 -18
- package/dist/composables/useKeyboardInset.d.ts +28 -0
- package/dist/composables/useKeyboardInset.js +32 -0
- package/dist/composables/useLocale.js +10 -7
- package/dist/composables/useMobile.js +7 -10
- package/dist/composables/usePassthrough.d.ts +228 -0
- package/dist/composables/usePassthrough.js +247 -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 +31 -18
- package/dist/composables/useToggleInput.d.ts +44 -0
- package/dist/composables/useToggleInput.js +39 -0
- package/dist/composables/useViewportWidth.d.ts +5 -25
- package/dist/composables/useViewportWidth.js +14 -7
- package/dist/deprecation/ai-deprecations.json.d.ts +1977 -289
- package/dist/deprecation/ai-deprecations.json.js +1 -1
- package/dist/deprecation/removedProps.js +9 -4
- package/dist/directives/bbDropdown.d.ts +15 -4
- package/dist/directives/bbDropdown.js +31 -9
- package/dist/directives/bbTooltip.d.ts +6 -0
- package/dist/directives/createPopoverDirective.d.ts +62 -0
- package/dist/directives/createPopoverDirective.js +92 -37
- package/dist/i18n/index.d.ts +10 -16
- package/dist/i18n/locales/cs.json +9 -5
- package/dist/i18n/locales/da.json +9 -5
- package/dist/i18n/locales/de.json +9 -5
- package/dist/i18n/locales/el.json +9 -5
- package/dist/i18n/locales/en.json +9 -5
- package/dist/i18n/locales/es.json +9 -5
- package/dist/i18n/locales/fi.json +9 -5
- package/dist/i18n/locales/fr.json +9 -5
- package/dist/i18n/locales/hu.json +9 -5
- package/dist/i18n/locales/it.json +9 -5
- package/dist/i18n/locales/ja.json +9 -5
- package/dist/i18n/locales/ko.json +9 -5
- package/dist/i18n/locales/nb.json +9 -5
- package/dist/i18n/locales/nl.json +9 -5
- package/dist/i18n/locales/pl.json +9 -5
- package/dist/i18n/locales/pt.json +9 -5
- package/dist/i18n/locales/ro.json +9 -5
- package/dist/i18n/locales/ru.json +9 -5
- package/dist/i18n/locales/sv.json +9 -5
- package/dist/i18n/locales/tr.json +9 -5
- package/dist/i18n/locales/uk.json +9 -5
- package/dist/i18n/locales/zh-cn.json +9 -5
- 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 +40 -21
- package/dist/index.js +78 -71
- package/dist/llms-full.txt +61164 -27972
- package/dist/llms-medium.txt +1482 -366
- package/dist/llms.txt +32 -15
- package/dist/locale-blueprint.json +9 -5
- package/dist/nuxt-auto-imports.d.ts +76 -0
- package/dist/nuxt-auto-imports.js +32 -0
- package/dist/nuxt-module.d.ts +30 -15
- package/dist/nuxt.js +35 -9
- package/dist/passthrough-deduper.js +5 -0
- package/dist/plugin.d.ts +10 -1
- package/dist/plugin.js +29 -19
- package/dist/project-dts.d.ts +84 -0
- package/dist/project-dts.js +170 -0
- package/dist/reset.css +1 -1
- package/dist/runtime/nuxt-plugin.js +34 -21
- package/dist/styles.css +3 -2
- package/dist/types/AlertVariant.d.ts +10 -1
- package/dist/types/BadgeVariant.d.ts +16 -5
- package/dist/types/ButtonVariant.d.ts +12 -1
- package/dist/types/ColumnName.d.ts +30 -3
- package/dist/types/CommonProps.d.ts +2 -2
- package/dist/types/Config.d.ts +94 -1
- package/dist/types/ConfirmVariant.d.ts +8 -1
- package/dist/types/DropdownItemVariant.d.ts +8 -1
- package/dist/types/FieldLayout.d.ts +32 -0
- package/dist/types/IndicatorVariant.d.ts +11 -1
- package/dist/types/InputVariant.d.ts +30 -0
- package/dist/types/ItemProps.d.ts +50 -0
- package/dist/types/Option.d.ts +6 -0
- package/dist/types/PtScope.d.ts +15 -0
- package/dist/types/RegistryKey.d.ts +10 -0
- package/dist/types/TabsVariant.d.ts +25 -0
- package/dist/types/ToastVariant.d.ts +12 -2
- package/dist/types/TooltipVariant.d.ts +8 -1
- package/dist/types/passthrough.d.ts +362 -0
- package/dist/types/passthrough.js +78 -0
- package/dist/types/ptComponentMap.d.ts +62 -0
- package/dist/utilities/functions/hasVnodeListener.d.ts +16 -0
- package/dist/utilities/functions/hasVnodeListener.js +12 -0
- package/dist/utilities/functions/isImeComposing.d.ts +7 -0
- package/dist/utilities/functions/isImeComposing.js +4 -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 +13 -8
- package/dist/utilities/functions/slotKey.js +78 -2
- package/dist/utilities/functions/snapToStep.js +2 -1
- package/dist/utilities/functions/toggleInput.d.ts +98 -0
- package/dist/utilities/functions/toggleInput.js +56 -0
- package/dist/utilities/functions/warnRemovedAttrs.d.ts +27 -1
- package/dist/utilities/functions/warnRemovedAttrs.js +75 -14
- 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/overlayEscapeStack.d.ts +10 -0
- package/dist/utils/overlayEscapeStack.js +5 -3
- package/dist/utils/passthrough.d.ts +67 -0
- package/dist/utils/passthrough.js +100 -0
- package/dist/utils/passthroughDeduper.d.ts +2 -0
- package/dist/utils/ptScope.d.ts +8 -0
- package/dist/utils/ptScope.js +4 -0
- package/dist/utils/versionCheck.d.ts +19 -0
- package/dist/utils/versionCheck.js +18 -0
- package/dist/vite-plugin.d.ts +301 -53
- package/dist/vite.js +547 -375
- package/llms.txt +33 -16
- package/package.json +49 -27
- package/scripts/lib/check-fix.mjs +129 -0
- package/scripts/lib/component-attr-targets.ts +123 -0
- package/scripts/lib/component-tree.ts +648 -0
- package/scripts/lib/css-class-check.mjs +326 -0
- package/scripts/lib/css-class-surface.mjs +292 -0
- package/scripts/lib/css-color-resolve.mjs +172 -0
- package/scripts/lib/css-local-check.mjs +267 -0
- package/scripts/lib/design-token-manifest.mjs +499 -0
- package/scripts/lib/doc-sections.mjs +248 -0
- package/scripts/lib/ensure-manifest.mjs +28 -5
- package/scripts/lib/eslint-disable.mjs +141 -0
- package/scripts/lib/eslint-plugin.d.ts +64 -1
- package/scripts/lib/eslint-plugin.mjs +1285 -30
- package/scripts/lib/hand-imported-styles.mjs +326 -0
- package/scripts/lib/hand-roll-hints.mjs +50 -6
- package/scripts/lib/html-attributes.mjs +353 -0
- package/scripts/lib/local-components.mjs +177 -0
- package/scripts/lib/mcp-config.mjs +87 -58
- package/scripts/lib/migrate-fix.mjs +62 -3
- package/scripts/lib/project-variant-dts.mjs +122 -0
- package/scripts/lib/public-type-exports.mjs +273 -0
- package/scripts/lib/slot-key.mjs +147 -0
- package/scripts/lib/slot-renames.mjs +46 -0
- package/scripts/lib/squashed-slot-words.mjs +133 -0
- package/scripts/lib/validate-bb-markup.mjs +2213 -76
- package/scripts/lib/wrapper-props.mjs +188 -0
- 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/BbBaseInputContainer.md +0 -48
- 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/BbTabsPanes.md +0 -27
- 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/BbTabsPanes.md +0 -377
- package/dist/ai/source/CommonInputWrapper.md +0 -584
- package/dist/alert-variants.d.ts +0 -19
- package/dist/assets/svgs/sort.svg_raw.js +0 -4
- package/dist/badge-variants.d.ts +0 -19
- package/dist/button-variants.d.ts +0 -21
- 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_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/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 -35
- 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/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/locale-registry.d.ts +0 -37
- package/dist/toast-variants.d.ts +0 -20
- package/dist/tooltip-variants.d.ts +0 -17
- package/dist/types/InputDirection.d.ts +0 -15
- package/dist/validated/BbCheckbox.vue.d.ts +0 -29
- package/dist/validated/BbCheckbox.vue.js +0 -5
- package/dist/validated/BbCheckbox.vue_vue_type_script_setup_true_lang.js +0 -75
- package/dist/validated/BbCheckboxGroup.vue.d.ts +0 -34
- package/dist/validated/BbCheckboxGroup.vue.js +0 -5
- package/dist/validated/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +0 -82
- package/dist/validated/BbColorInput.vue.d.ts +0 -37
- package/dist/validated/BbColorInput.vue.js +0 -5
- package/dist/validated/BbColorInput.vue_vue_type_script_setup_true_lang.js +0 -75
- package/dist/validated/BbDatePickerInput.vue.d.ts +0 -41
- package/dist/validated/BbDatePickerInput.vue.js +0 -5
- package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +0 -90
- package/dist/validated/BbDropzone.vue.d.ts +0 -24
- package/dist/validated/BbDropzone.vue.js +0 -5
- package/dist/validated/BbDropzone.vue_vue_type_script_setup_true_lang.js +0 -45
- package/dist/validated/BbForm.vue.d.ts +0 -28
- package/dist/validated/BbForm.vue_vue_type_script_setup_true_lang.js +0 -42
- package/dist/validated/BbNumberInput.vue.d.ts +0 -36
- package/dist/validated/BbNumberInput.vue.js +0 -5
- package/dist/validated/BbNumberInput.vue_vue_type_script_setup_true_lang.js +0 -72
- package/dist/validated/BbRadioGroup.vue.d.ts +0 -34
- package/dist/validated/BbRadioGroup.vue.js +0 -5
- package/dist/validated/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +0 -78
- package/dist/validated/BbRating.vue.d.ts +0 -30
- package/dist/validated/BbRating.vue.js +0 -5
- package/dist/validated/BbRating.vue_vue_type_script_setup_true_lang.js +0 -63
- package/dist/validated/BbSelect.vue.d.ts +0 -46
- package/dist/validated/BbSelect.vue.js +0 -5
- package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +0 -109
- package/dist/validated/BbSlider.vue.d.ts +0 -36
- package/dist/validated/BbSlider.vue.js +0 -5
- package/dist/validated/BbSlider.vue_vue_type_script_setup_true_lang.js +0 -69
- package/dist/validated/BbSwitch.vue.d.ts +0 -29
- package/dist/validated/BbSwitch.vue.js +0 -5
- package/dist/validated/BbSwitch.vue_vue_type_script_setup_true_lang.js +0 -75
- package/dist/validated/BbSwitchGroup.vue.d.ts +0 -34
- package/dist/validated/BbSwitchGroup.vue.js +0 -5
- package/dist/validated/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +0 -82
- package/dist/validated/BbTag.vue.d.ts +0 -36
- package/dist/validated/BbTag.vue.js +0 -5
- package/dist/validated/BbTag.vue_vue_type_script_setup_true_lang.js +0 -72
- package/dist/validated/BbTextInput.vue.d.ts +0 -36
- package/dist/validated/BbTextInput.vue.js +0 -5
- package/dist/validated/BbTextInput.vue_vue_type_script_setup_true_lang.js +0 -72
- package/dist/validated/BbTextarea.vue.d.ts +0 -36
- package/dist/validated/BbTextarea.vue.js +0 -5
- package/dist/validated/BbTextarea.vue_vue_type_script_setup_true_lang.js +0 -70
- package/dist/validated/BbTimePickerInput.vue.d.ts +0 -37
- package/dist/validated/BbTimePickerInput.vue.js +0 -5
- package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +0 -81
- package/dist/validated/index.d.ts +0 -43
- package/dist/validated/useValidatedField.d.ts +0 -93
- package/dist/validated/useValidatedField.js +0 -51
- package/dist/validated.js +0 -21
- /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
|
@@ -39,6 +39,33 @@ explicitly (section 8).
|
|
|
39
39
|
|
|
40
40
|
## 0. Upgrade strategy — do it in this order
|
|
41
41
|
|
|
42
|
+
> **Already on v3, bumping between prereleases?** This guide is the v2 → v3
|
|
43
|
+
> move; you want the much shorter answer instead:
|
|
44
|
+
>
|
|
45
|
+
> ```bash
|
|
46
|
+
> npx bitboss-ui changelog --since 3.0.0-beta.20 # what BREAKS in the bump
|
|
47
|
+
> ```
|
|
48
|
+
>
|
|
49
|
+
> Then turn that list into **your** files, before you install anything:
|
|
50
|
+
>
|
|
51
|
+
> ```bash
|
|
52
|
+
> npm pack bitboss-ui@3.0.0-beta.21 && tar -xzf bitboss-ui-3.0.0-beta.21.tgz
|
|
53
|
+
> npx bitboss-ui check --manifest package/dist/ai/components.json
|
|
54
|
+
> ```
|
|
55
|
+
>
|
|
56
|
+
> `check` normally judges the INSTALLED version, which can only tell you what
|
|
57
|
+
> an upgrade broke after you took it. `--manifest` points it at the version you
|
|
58
|
+
> are moving to, so the damage is visible first. Agents with the MCP server get
|
|
59
|
+
> the same answer from `list_changes({ since })`.
|
|
60
|
+
>
|
|
61
|
+
> Once installed, `npx bitboss-ui check --fix` applies every registered
|
|
62
|
+
> prop migration (renames, polarity flips, value remaps) to your `.vue` files
|
|
63
|
+
> and reports what still needs a hand.
|
|
64
|
+
>
|
|
65
|
+
> After installing, restart the dev server and delete `node_modules/.vite`
|
|
66
|
+
> (inside the container, under Docker or Sail): a server started before the
|
|
67
|
+
> install keeps serving the old pre-bundled JS next to the new CSS.
|
|
68
|
+
|
|
42
69
|
1. **Swap the setup** (section 1): install the build plugin and the runtime
|
|
43
70
|
plugin. Nothing renders correctly until this is done.
|
|
44
71
|
2. **Move your config** (section 2): everything you passed to
|
|
@@ -52,6 +79,13 @@ explicitly (section 8).
|
|
|
52
79
|
fail loudly. Fix them component by component with the per-component guides.
|
|
53
80
|
5. **Audit what the compiler cannot find** (section 8): untyped templates,
|
|
54
81
|
`v-bind` objects, and behavioral flips are silent. Run the grep playbook.
|
|
82
|
+
**Your stylesheets are the silent half.** `vue-tsc` never reads CSS, so a
|
|
83
|
+
rule targeting a renamed or deleted class simply stops matching — no error,
|
|
84
|
+
no warning, and the page often still looks close enough to pass review. A
|
|
85
|
+
v2-era theme file can carry hundreds of lines that have done nothing since
|
|
86
|
+
the upgrade. Section 5.6 has the rename table and the grep that finds them;
|
|
87
|
+
run it before you conclude a component "has no token for this", because a
|
|
88
|
+
dead override and a missing affordance look identical from the browser.
|
|
55
89
|
6. **Convert class overrides to variants** (section 7): userland
|
|
56
90
|
`class="bb-button--outline"`-style overrides keep _working_ but are now the
|
|
57
91
|
wrong pattern — the variant prop exists, is typed, and is the only form the
|
|
@@ -62,8 +96,12 @@ explicitly (section 8).
|
|
|
62
96
|
### What v2 looked like
|
|
63
97
|
|
|
64
98
|
v2 was a plain ESM library: named exports, one manual CSS import, optional
|
|
65
|
-
manual directive registration. There was no Vite plugin
|
|
66
|
-
|
|
99
|
+
manual directive registration. There was no Vite plugin and no `app.use`.
|
|
100
|
+
|
|
101
|
+
Nuxt apps were the exception: they installed a **separate companion package**,
|
|
102
|
+
`@bitboss-dev/bitboss-ui-nuxt`, which wrapped v2 in a Nuxt module. v3 absorbs
|
|
103
|
+
that package — the module now ships inside the library as `bitboss-ui/nuxt`.
|
|
104
|
+
See [Nuxt](#nuxt) below for the option-by-option move.
|
|
67
105
|
|
|
68
106
|
```ts
|
|
69
107
|
// v2 main.ts
|
|
@@ -173,8 +211,7 @@ nothing else about the plugin changes.
|
|
|
173
211
|
|
|
174
212
|
### Nuxt
|
|
175
213
|
|
|
176
|
-
|
|
177
|
-
also call `app.use`:
|
|
214
|
+
v3 ships a module that does both halves — do **not** also call `app.use`:
|
|
178
215
|
|
|
179
216
|
```ts
|
|
180
217
|
// v3 nuxt.config.ts
|
|
@@ -186,6 +223,57 @@ export default defineNuxtConfig({
|
|
|
186
223
|
});
|
|
187
224
|
```
|
|
188
225
|
|
|
226
|
+
#### Coming from `@bitboss-dev/bitboss-ui-nuxt`
|
|
227
|
+
|
|
228
|
+
That package was the v2 Nuxt story. It is superseded: **uninstall it** and
|
|
229
|
+
delete it from `modules`. Everything it did is now inside `bitboss-ui/nuxt`,
|
|
230
|
+
under the same `bitboss` config key — so the migration is mostly renaming keys,
|
|
231
|
+
not rewriting setup.
|
|
232
|
+
|
|
233
|
+
| `@bitboss-dev/bitboss-ui-nuxt` option | v3 `bitboss-ui/nuxt` |
|
|
234
|
+
| ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
235
|
+
| `icons.path` | `iconDir`. Same job, one level up. |
|
|
236
|
+
| `icons.enabled: false` | **Gone** — the icon pipeline is not optional in v3; components import the virtual icon module. Point `iconDir` at an empty folder if you ship no local art. |
|
|
237
|
+
| `styles.enabled` | `injectStyles` (still defaults `true`). |
|
|
238
|
+
| `styles.index` | **Gone**, and nothing replaces it — see the ordering note below. |
|
|
239
|
+
| `link.name` | `nuxtLinkName` (still defaults `'NuxtLink'`). |
|
|
240
|
+
| `link.enabled: false` | **Gone.** The runtime plugin only registers the configured name when the app has not already claimed it, so there is nothing to switch off. |
|
|
241
|
+
| `components.enabled` | `autoImport` — see below. Note the **default flipped**: v2's module auto-imported components, v3 does not. |
|
|
242
|
+
| `components.validation: true` | `autoImport: { validated: true }`, or explicit imports from `bitboss-ui/validated`. The wrappers moved into the library and gained `BbForm` + `useValidatedField`. |
|
|
243
|
+
| `components.requiredAsterisk` | `requiredAsterisk`, same meaning, one level up. |
|
|
244
|
+
| `composables` | Folded into `autoImport`. `useBroadcastChannelInstance`, `useQueue` and `useWizard` are **not exported by v3** — the module registered names the library no longer has. |
|
|
245
|
+
| `logLevel` | **Gone.** The v3 module has nothing to log at setup; build-plugin diagnostics go through Vite. |
|
|
246
|
+
|
|
247
|
+
**⚠ silent — auto-imports are off by default.** The v2 module registered every
|
|
248
|
+
`Bb*` component with Nuxt, so templates used them with no import line. v3 does
|
|
249
|
+
not: an unmigrated template compiles, and each unresolved `<BbButton>` renders
|
|
250
|
+
as an empty unknown element with no error anywhere. Either add explicit imports,
|
|
251
|
+
or opt back in:
|
|
252
|
+
|
|
253
|
+
```ts
|
|
254
|
+
// v3 nuxt.config.ts — the closest equivalent of the v2 module's defaults
|
|
255
|
+
export default defineNuxtConfig({
|
|
256
|
+
modules: ['bitboss-ui/nuxt'],
|
|
257
|
+
bitboss: {
|
|
258
|
+
iconDir: './assets/icons',
|
|
259
|
+
autoImport: { validated: true }, // drop `validated` if you had no vee-validate
|
|
260
|
+
},
|
|
261
|
+
});
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Set `"vueCompilerOptions": { "checkUnknownComponents": true }` in `tsconfig.json`
|
|
265
|
+
before you start either way — it is what turns that silent empty element into a
|
|
266
|
+
`vue-tsc` error naming the file and line.
|
|
267
|
+
|
|
268
|
+
**Style ordering.** `styles.index` let you splice `bitboss-ui/styles.css`
|
|
269
|
+
anywhere in Nuxt's `css` array. v3 injects the sheet at runtime and always puts
|
|
270
|
+
it **first** in `<head>`, ahead of every other stylesheet — so your own CSS is
|
|
271
|
+
always later and always wins, which is the order `styles.index` was normally
|
|
272
|
+
used to obtain. If you need the opposite (library rules winning over yours),
|
|
273
|
+
raise specificity in your own sheet rather than reordering; if you genuinely
|
|
274
|
+
need the library sheet elsewhere in the cascade, set `injectStyles: false` and
|
|
275
|
+
import `bitboss-ui/styles.css` yourself at the position you want.
|
|
276
|
+
|
|
189
277
|
### Inertia
|
|
190
278
|
|
|
191
279
|
Inertia apps configure `bitboss-ui/vite` exactly like plain Vite, install
|
|
@@ -210,7 +298,7 @@ Full option reference:
|
|
|
210
298
|
|
|
211
299
|
In v2 all configuration was runtime and mutable:
|
|
212
300
|
|
|
213
|
-
```ts
|
|
301
|
+
```ts no-check
|
|
214
302
|
// v2 — anywhere, usually App.vue setup
|
|
215
303
|
import { useBbConfig } from 'bitboss-ui';
|
|
216
304
|
|
|
@@ -238,6 +326,23 @@ bitbossUi({
|
|
|
238
326
|
useBbConfig().setConfig({ locale: 'en' });
|
|
239
327
|
```
|
|
240
328
|
|
|
329
|
+
**Under SSR, set the locale where the app is created.** The runtime config is
|
|
330
|
+
held **per Vue app** (3.0.0-beta.15), and SSR builds one app per request, so
|
|
331
|
+
this is per-visitor and correct on the first paint — which is what crawlers
|
|
332
|
+
index and what a JS-disabled reader keeps:
|
|
333
|
+
|
|
334
|
+
```ts
|
|
335
|
+
const app = createSSRApp(App);
|
|
336
|
+
app.use(bitbossUiPlugin, { locale: localeFor(request) });
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
`setConfig` still works for runtime switching. During a server render, call it
|
|
340
|
+
from a component's `setup` so it can resolve the current app; from module scope
|
|
341
|
+
there is no app to address, the write lands on the build-time defaults shared
|
|
342
|
+
by the whole process, and it warns in dev. (Before beta.15 the config was a
|
|
343
|
+
single process-global object, so a per-visitor locale was not possible at all —
|
|
344
|
+
if you carried a workaround for that, you can drop it.)
|
|
345
|
+
|
|
241
346
|
| v2 `setConfig` key | Where it goes in v3 |
|
|
242
347
|
| --------------------------------------------- | ------------------------------------------------------------------------------ |
|
|
243
348
|
| `locale` | stays runtime (`setConfig`) — the only survivor |
|
|
@@ -287,8 +392,9 @@ two tiers:
|
|
|
287
392
|
|
|
288
393
|
Dark mode is no longer a parallel token set: `.dark` re-declares only the
|
|
289
394
|
knobs that change, and derived tokens follow automatically. Delete every
|
|
290
|
-
`--x-light`/`--x-dark` override; re-express as `.light { … }` /
|
|
291
|
-
|
|
395
|
+
`--x-light`/`--x-dark` override; re-express as `.light { … }` / `:root .dark,
|
|
396
|
+
:root.dark { … }` blocks (a bare `.dark` loses to the library's own dark block
|
|
397
|
+
unless you use `cssLayers`: design-tokens.md § Dark mode). Note: overriding a knob on an arbitrary selector does **not**
|
|
292
398
|
re-derive dependent tokens — re-apply the `.light`/`.dark` block on that
|
|
293
399
|
scope instead.
|
|
294
400
|
|
|
@@ -314,19 +420,30 @@ to the rename map and to every grep below — see
|
|
|
314
420
|
| `--bb-hint`, `--bb-icon-color`, `--bb-placeholder`, `--bb-prefix-color`, `--bb-muted-color` | `--bb-text-muted` |
|
|
315
421
|
| `--bb-input-color`, `--bb-input-bg` | `--bb-text`, `--bb-panel` |
|
|
316
422
|
| `--bb-input-font-size`, `--bb-input-mobile-font-size` | `--bb-input-fs`, `--bb-input-fs-mobile` |
|
|
423
|
+
| `--bb-label-size` | `--bb-label-fs` |
|
|
424
|
+
| `--bb-label-compact-spacing-y` | `--bb-label-spacing-y-compact` |
|
|
425
|
+
| `--bb-input-compact-h`, `--bb-input-compact-py` | `--bb-input-h-compact`, `--bb-input-py-compact` — the `compact` qualifier moved from infix to suffix |
|
|
426
|
+
| `--bb-input-compact-px`, `--bb-input-compact-prefix-w`, `--bb-input-compact-floating-py`, `--bb-input-prefix`, `--bb-input-prefix-px` | **deleted, no counterpart.** v3's compact mode re-points only height and vertical padding (the two tokens in the row above); horizontal padding and the prefix column keep their normal-size values, and the prefix's own font-size/padding knobs are gone. |
|
|
317
427
|
| `--bb-overlay-color` + `--bb-overlay-opacity` | `--bb-overlay` (one color with alpha) |
|
|
318
428
|
| `--bb-overlay-z-index` | `--bb-z-overlay` |
|
|
319
429
|
| _(no v2 equivalent)_ | `--bb-ease` — new in v3. v2 hard-coded seven different `cubic-bezier()` curves and exposed no easing token, so there is nothing to rename; set `--bb-ease` once if you want a house curve. |
|
|
320
|
-
| `--bb-dialog-px`, `--bb-dialog-py` | `--bb-
|
|
430
|
+
| `--bb-dialog-px`, `--bb-dialog-py` | the local pair `--px` / `--py` on `.bb-dialog` / `.bb-offcanvas` — a direct map, set on the component's class (never `:root`). Both branch off `--bb-panel-p`, so if your v2 px = py, set `--bb-panel-p` alone. See "Asymmetric surface padding" below. |
|
|
321
431
|
| `--bb-dialog-close` | **delete it** — do not map it onto `.bb-close-button { --size }`; v3's default already reproduces the v2 control. See below. |
|
|
322
432
|
| `--bb-dialog-title-size` | the local `--dialog-title-fs` on `.bb-dialog` / `.bb-offcanvas` (default `calc(var(--bb-fs) + 2px)`) |
|
|
323
|
-
| `--bb-dialog-title-weight` |
|
|
433
|
+
| `--bb-dialog-title-weight` | `--dialog-title-fw` on `.bb-dialog` / the sheet (default `500`) — `.bb-theme { --dialog-title-fw: 600 }` restores v2. |
|
|
324
434
|
| `--bb-button-h`, `--bb-button-icon`, `--bb-checkbox-*`, `--bb-radio-*`, `--bb-switch-*`, `--bb-rating-*`, `--bb-slider-*`, `--bb-table-cell-h`, `--bb-select-option-*` | **no longer global.** Component dimensions hang off `--bb-control-h`, `--bb-fs`, `--bb-radius`; anything finer is an unprefixed local on the component's own class — with one exception: `--bb-select-option-px/-py` have **no** v3 local, the listbox option's inline padding is a literal (`.bb-listbox__option { padding-inline: … }` in your own CSS). |
|
|
325
435
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
436
|
+
**Most `--bb-input-*` and `--bb-label-*` tokens survive — but only these
|
|
437
|
+
exact names:** `--bb-input-h`, `--bb-input-px`, `--bb-input-py`,
|
|
438
|
+
`--bb-input-spacing`, `--bb-input-icon`, `--bb-input-prefix-w`,
|
|
439
|
+
`--bb-label-spacing-x`, `--bb-label-spacing-y`, `--bb-label-weight`,
|
|
440
|
+
`--bb-leading`. Those are still global v3 theme tokens, declared in
|
|
441
|
+
`variables.css` and read across the whole form family — do not delete them
|
|
442
|
+
(several changed default value; the drift table below lists which). Everything
|
|
443
|
+
else in the two families either renamed (`--bb-label-size` → `--bb-label-fs`,
|
|
444
|
+
the compact pair — rows above) or is deleted outright, so a declaration that
|
|
445
|
+
is not in this list and not in the rename map is inert: it looks correct and
|
|
446
|
+
does nothing. §8's retired-token grep catches every deleted name.
|
|
330
447
|
|
|
331
448
|
**When a v2 global becomes a component token, resize only what you use.** That
|
|
332
449
|
last row is the trap: a v2 global like `--bb-button-icon` had ONE value for
|
|
@@ -347,50 +464,64 @@ doctrine in `design-tokens.md` § "Overriding one from a consumer app". And chec
|
|
|
347
464
|
first whether the v2 value was a real customisation: if it merely restated v2's
|
|
348
465
|
default, the migration is to **delete it** and inherit the v3 scale.
|
|
349
466
|
|
|
350
|
-
**Asymmetric surface padding.**
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
467
|
+
**Asymmetric surface padding.** v3 splits the axes with the local pair
|
|
468
|
+
`--px` / `--py`, declared on both surface roots (`.bb-dialog`,
|
|
469
|
+
`.bb-offcanvas`) and each branching off `var(--bb-panel-p)`. Like every
|
|
470
|
+
unprefixed component token, you override them _on the component's class_,
|
|
471
|
+
never `:root`. v2's `--bb-dialog-px` / `--bb-dialog-py` map onto them
|
|
472
|
+
directly:
|
|
355
473
|
|
|
356
474
|
```css
|
|
357
|
-
/* v2: --bb-dialog-px: 24px;
|
|
475
|
+
/* v2: --bb-dialog-px: 24px; --bb-dialog-py: 10px */
|
|
358
476
|
.my-dialog {
|
|
359
|
-
--
|
|
477
|
+
--px: 24px; /* horizontal padding + the close button's inline inset */
|
|
478
|
+
--py: 10px; /* vertical padding + the close button's block inset */
|
|
360
479
|
}
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
Setting only `--bb-panel-p` still moves both axes together (the pair defaults
|
|
483
|
+
to it, resolved on the component root, so a scoped `--bb-panel-p` override
|
|
484
|
+
keeps working too). Per-**part** asymmetry (header `py: 10px`, body
|
|
485
|
+
`py: 20px`) works by scoping the token to the part class — the padding rules
|
|
486
|
+
resolve it on the part elements and the pair inherits:
|
|
487
|
+
|
|
488
|
+
```css
|
|
361
489
|
.my-dialog .bb-dialog__header {
|
|
362
|
-
|
|
490
|
+
--py: 10px; /* header block padding (bottom is py/2); × inset follows */
|
|
363
491
|
}
|
|
364
|
-
.my-dialog .bb-
|
|
365
|
-
|
|
366
|
-
}
|
|
367
|
-
.my-dialog .bb-dialog__body:first-child .bb-dialog__body-content {
|
|
368
|
-
padding-top: 20px;
|
|
369
|
-
}
|
|
370
|
-
.my-dialog .bb-dialog__footer {
|
|
371
|
-
padding-block: 20px;
|
|
492
|
+
.my-dialog .bb-dialog__content {
|
|
493
|
+
--py: 20px; /* body bottom padding, and its top in the headerless case */
|
|
372
494
|
}
|
|
373
495
|
```
|
|
374
496
|
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
497
|
+
The body padding lives on `.bb-dialog__content`, the node `pt:content` lands on,
|
|
498
|
+
so `pt:content="[--py:20px]"` or `pt:content="px-8"` does it without a
|
|
499
|
+
stylesheet (until 3.0.0-beta.29 it sat on the inner `__body-content`).
|
|
500
|
+
|
|
501
|
+
Derived spacings scale with it — the header's bottom padding is `py / 2` and
|
|
502
|
+
the close button's block inset tracks the header's `py`. If you need exact
|
|
503
|
+
literals instead of those ratios, a `padding-block` rule on the part class
|
|
504
|
+
still works (use `padding-block`, not the `padding` shorthand, so the
|
|
505
|
+
horizontal half keeps tracking `--px`; the library part selectors are
|
|
506
|
+
at most (0,2,1) specific, so a three-class app selector beats them all).
|
|
507
|
+
`BbOffCanvas` is identical with `.bb-offcanvas__*` and the same `--px` /
|
|
508
|
+
`--py` names.
|
|
509
|
+
|
|
510
|
+
**Scope the pair to the surface, and it stays the surface's.** `--px` is also
|
|
511
|
+
a local on other components (`BbButton`, `BbAlert`, `BbTooltip`,
|
|
512
|
+
`BbSlider`), but each of those re-declares it on its own element (the slider on
|
|
513
|
+
`.bb-slider__body`), so a
|
|
514
|
+
dialog-scoped `--px` never leaks into the buttons or alerts inside the dialog
|
|
515
|
+
— and, symmetrically, never set the pair on `:root` or an arbitrary ancestor:
|
|
516
|
+
the surface roots' own defaults mask it there, and you would be reaching into
|
|
517
|
+
every other `--px`-reading component anyway. (`--pt` remains dead — nothing
|
|
518
|
+
reads it.)
|
|
388
519
|
|
|
389
520
|
If only the **vertical rhythm between parts** differs, the local `--dialog-gap`
|
|
390
|
-
(default `--
|
|
391
|
-
|
|
521
|
+
(default `--py`) already does it without a padding rule: it drives the gap
|
|
522
|
+
below the body content and the footer's block padding on `.bb-dialog` and
|
|
392
523
|
`.bb-offcanvas`. It does **not** cover the header's top padding, or the body's
|
|
393
|
-
top padding in the headerless case — those still take `--
|
|
524
|
+
top padding in the headerless case — those still take `--py`.
|
|
394
525
|
|
|
395
526
|
**`--bb-dialog-close` maps to nothing — delete it.** In v2 it was the close
|
|
396
527
|
**icon** width (`12px`) and the button around it added `8px` of padding, so the
|
|
@@ -412,15 +543,9 @@ the box:
|
|
|
412
543
|
That selector needs at least three classes to beat the library's
|
|
413
544
|
`.bb-dialog .bb-dialog__header > .bb-close-button` (0,3,0).
|
|
414
545
|
|
|
415
|
-
**`--bb-dialog-title-weight`
|
|
416
|
-
|
|
417
|
-
`.bb-dialog
|
|
418
|
-
|
|
419
|
-
```css
|
|
420
|
-
.my-dialog .bb-dialog__header .bb-dialog__title {
|
|
421
|
-
font-weight: 600;
|
|
422
|
-
}
|
|
423
|
-
```
|
|
546
|
+
**`--bb-dialog-title-weight` → `--dialog-title-fw`** (default `500`, read by the
|
|
547
|
+
dialog and by the phone sheet). Restore v2's `600` with
|
|
548
|
+
`.bb-theme { --dialog-title-fw: 600 }`; no selector into the header is needed.
|
|
424
549
|
|
|
425
550
|
A complete v3 theme is typically two small blocks of ~10 declarations
|
|
426
551
|
(`--bb-primary`, `--bb-radius`, `--bb-control-h`, `--bb-panel`, `--bb-text`,
|
|
@@ -454,15 +579,25 @@ and delete only the declarations that merely restated a **v2** default.
|
|
|
454
579
|
**A type that narrowed.** `--bb-ring-opacity` survives by name but v3 registers
|
|
455
580
|
it with `@property … syntax: '<percentage>'`:
|
|
456
581
|
|
|
457
|
-
| token | v2 form | v3 form | symptom
|
|
458
|
-
| ------------------- | -------------------------------------------------------- | -------------------------------- |
|
|
459
|
-
| `--bb-ring-opacity` | unitless `0.25` / `0.4`, multiplied by `100%` internally | `25%` / `40%` — a `<percentage>` | ⚠ silent: a unitless override is invalid at computed-value time, so it is discarded and the token falls back to the registered `initial-value:
|
|
582
|
+
| token | v2 form | v3 form | symptom |
|
|
583
|
+
| ------------------- | -------------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
584
|
+
| `--bb-ring-opacity` | unitless `0.25` / `0.4`, multiplied by `100%` internally | `25%` / `40%` — a `<percentage>` | ⚠ silent: a unitless override is invalid at computed-value time, so it is discarded and the token falls back to the registered `initial-value: 15%` — v3's own light default, so a light page silently renders the stock ring, while a dark page lands on `15%` against the shipped `40%`. |
|
|
460
585
|
|
|
461
586
|
Nothing reports this — not `vue-tsc`, not the eslint plugin, not
|
|
462
587
|
`npx bitboss-ui check` (none of them read CSS), and not the browser console:
|
|
463
588
|
an invalid registered-property value is not a parse error, so it logs nothing.
|
|
464
|
-
Grep your stylesheets for `--bb-ring-opacity` and
|
|
465
|
-
|
|
589
|
+
Grep your stylesheets for `--bb-ring-opacity` and check **both directions of
|
|
590
|
+
every hit**:
|
|
591
|
+
|
|
592
|
+
- every **write** must carry a `%` (`0.15` → `15%`), and
|
|
593
|
+
- every **read** must stop multiplying by `100%`. The v2 idiom for consuming
|
|
594
|
+
the unitless form was exactly that —
|
|
595
|
+
`calc(100% - var(--bb-ring-opacity) * 100%)` — and under v3 it multiplies a
|
|
596
|
+
percentage by a percentage, which is invalid in `calc()`. The invalid math
|
|
597
|
+
takes the whole declaration down (typically a `color-mix()` ring), so the
|
|
598
|
+
failure is _worse_ than the write side: a stale write still produces a ring
|
|
599
|
+
at the fallback strength, a stale read produces **no ring at all**, equally
|
|
600
|
+
silently. Delete the `* 100%`.
|
|
466
601
|
|
|
467
602
|
Nine tokens are `@property`-registered in v3 — the eight color knobs
|
|
468
603
|
(`syntax: '<color>'`) plus `--bb-ring-opacity`. Each rejects values outside its
|
|
@@ -485,18 +620,25 @@ theme tokens. In v2 a skin was four locals set on your own modifier class:
|
|
|
485
620
|
}
|
|
486
621
|
```
|
|
487
622
|
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
|
623
|
+
**Three of those four are inert in v3; `--border-color` is not.** A skin
|
|
624
|
+
ported verbatim therefore half-applies: the fill and the text revert to the
|
|
625
|
+
library defaults while your border keeps painting, which looks like a styling
|
|
626
|
+
bug rather than a dead override. Convert the **whole** rule, or delete it.
|
|
627
|
+
|
|
628
|
+
`.bb-button` reads `--bg`, `--fg`, `--border-color`, `--ring-color`, `--bg-hover`
|
|
629
|
+
and `--bg-pressed` as **per-instance** locals, and each variant's default for
|
|
630
|
+
them comes from a `--bb-<variant>-*` family declared in `variables.css`. So a
|
|
631
|
+
v2 local maps two ways — to the theme token if you want every button to
|
|
632
|
+
follow, or to the paint local if you want this one class to:
|
|
633
|
+
|
|
634
|
+
| v2 local on `.bb-button` | v3 theme token (everywhere) | v3 paint local (this class) |
|
|
635
|
+
| -------------------------------------------- | ----------------------------------- | ---------------------------------------------- |
|
|
636
|
+
| `--color` (fill) | `--bb-<variant>` | `--bg` |
|
|
637
|
+
| `--text-color` | `--bb-<variant>-fg` | `--fg` |
|
|
638
|
+
| `--border-color` | `--bb-<variant>-border` | `--border-color` — ⚠ same name, and it is LIVE |
|
|
639
|
+
| `--ring-color` | `--bb-<variant>-ring` | `--ring-color` |
|
|
640
|
+
| _derived_ `mix(--color 90%, black)` on hover | `--bb-<variant>-hover` (explicit) | `--bg-hover` |
|
|
641
|
+
| _derived_ `mix(--color 80%, black)` on press | `--bb-<variant>-pressed` (explicit) | `--bg-pressed` |
|
|
500
642
|
|
|
501
643
|
`<variant>` is one of `primary`, `secondary`, `outline`, `ghost`,
|
|
502
644
|
`destructive`, `link`. Note the last two rows: v2 _derived_ hover and pressed
|
|
@@ -551,10 +693,12 @@ Built-in sets and the class each name maps to:
|
|
|
551
693
|
| `alertVariants` | `outline, primary, destructive, warning` | `bb-alert--<name>` |
|
|
552
694
|
| `badgeVariants` | `primary, secondary, destructive, outline` | `bb-badge--<name>` |
|
|
553
695
|
| `indicatorVariants` | `default, success, info, warning, destructive` | `bb-indicator--<name>` |
|
|
554
|
-
| `toastVariants` | `default, success, info, warning, destructive` | `bb-
|
|
696
|
+
| `toastVariants` | `default, success, info, warning, destructive` | `bb-toast__panel--<name>` |
|
|
555
697
|
| `confirmVariants` | `default, destructive` | `bb-confirm--<name>` |
|
|
556
698
|
| `dropdownItemVariants` | `default, destructive` | `bb-dropdown__item--variant-<name>` |
|
|
557
699
|
| `tooltipVariants` | `default, destructive` | `bb-tooltip--<name>` |
|
|
700
|
+
| `inputVariants` | `outline, secondary, ghost` | `bb-field-input--<name>` |
|
|
701
|
+
| `tabsVariants` | `pill, line, none` | `bb-tabs-list--<name>` |
|
|
558
702
|
|
|
559
703
|
### Picking a v3 name for a v2 `theme` value
|
|
560
704
|
|
|
@@ -565,9 +709,27 @@ this order:
|
|
|
565
709
|
1. **Name is in the table, and your app never styled it** → use the built-in
|
|
566
710
|
`variant`. This is the only genuinely free conversion.
|
|
567
711
|
2. **Name is in the table, but your app styled it itself** → v3's built-in now
|
|
568
|
-
paints underneath your rules
|
|
569
|
-
|
|
570
|
-
|
|
712
|
+
paints underneath your rules, and **registering the name does not stop it**.
|
|
713
|
+
The registries feed the type-checker only: `alertVariants: ['warning']`
|
|
714
|
+
regenerates the typed union and nothing else — no CSS is generated and none
|
|
715
|
+
is suppressed; the built-in `.bb-alert--warning` skin ships unconditionally
|
|
716
|
+
in `styles.css` and still applies, so every property your CSS does not
|
|
717
|
+
explicitly set shows through as the library's. Decide explicitly: accept
|
|
718
|
+
v3's look and delete your CSS, or keep your look — which requires your rules
|
|
719
|
+
to **win the cascade** over the library's. Every paint variant compiles
|
|
720
|
+
single-class — `.bb-alert--warning`, `.bb-toast__panel--*`,
|
|
721
|
+
`.bb-button--outline`, `.bb-badge--*`, `.bb-indicator--*`,
|
|
722
|
+
`.bb-tooltip--*`, all (0,1,0). A flat `.bb-x--name` therefore ties them and
|
|
723
|
+
wins on order, provided you load your sheet after `styles.css` — which is
|
|
724
|
+
the documented order. Authoring at block+modifier
|
|
725
|
+
(`.bb-alert.bb-alert--warning`) still works and is order-proof, so it is
|
|
726
|
+
the safer habit if your bundler's CSS order is not under your control.
|
|
727
|
+
Size modifiers are NOT single-class (`.bb-button.bb-button--sm`), so a flat
|
|
728
|
+
size override still loses. Or sidestep the collision by renaming to a name
|
|
729
|
+
not in the table, which moves you to case 3, where your CSS genuinely is
|
|
730
|
+
the sole source. Whichever you pick,
|
|
731
|
+
still register the name: that part is required for the type-check either
|
|
732
|
+
way.
|
|
571
733
|
3. **Name is not in the table** → register it and keep your CSS. **Do not remap
|
|
572
734
|
onto the "nearest" built-in.** `error → destructive`, `danger →
|
|
573
735
|
destructive`, `info → primary` all compile, all look plausible in review,
|
|
@@ -575,8 +737,12 @@ destructive`, `info → primary` all compile, all look plausible in review,
|
|
|
575
737
|
deliberate redesign decision, never as a mechanical migration step.
|
|
576
738
|
4. **Name was never styled by anyone** → see the next subsection.
|
|
577
739
|
|
|
578
|
-
Registering is cheap — one array entry per name — and
|
|
579
|
-
behaviour-preserving default
|
|
740
|
+
Registering is cheap — one array entry per name — and for a name **not** in
|
|
741
|
+
the table it is the behaviour-preserving default: the library has no rule for
|
|
742
|
+
an unknown name, so your CSS is the sole styling source. For a name that **is**
|
|
743
|
+
in the table, registering buys the type-check and nothing else — behaviour
|
|
744
|
+
preservation there is a cascade question (case 2 above). When unsure, prefer a
|
|
745
|
+
non-colliding name.
|
|
580
746
|
|
|
581
747
|
### ⚠ silent — a `theme` value that did nothing in v2 may do something in v3
|
|
582
748
|
|
|
@@ -645,22 +811,23 @@ every occurrence; this section explains each pattern once.
|
|
|
645
811
|
|
|
646
812
|
### 5.1 Components renamed, split, or removed
|
|
647
813
|
|
|
648
|
-
| v2 | v3 | What to do
|
|
649
|
-
| ----------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
|
|
650
|
-
| `BbBadge` (floating count/dot anchored to an element) | **`BbIndicator`** | `content` → `text`, `color` → `variant`, `floating` removed. New `max` prop renders `${max}+`.
|
|
651
|
-
| `BbChip` | **removed** — use `BbBadge` | v3 `BbBadge` is the inline pill/token: same `click:clear` event and `clearableLabel`, but `clearable` is now **opt-in** (v2 chips defaulted clearable).
|
|
652
|
-
| — | **`BbBadge`** (repurposed) | The v3 badge is a new component in an old name: inline label with `variant`, `icon`, `loading`, `clearable`. Any v2 `<BbBadge>` you have is an _indicator_ — rename it.
|
|
653
|
-
|
|
|
654
|
-
| `
|
|
655
|
-
| `
|
|
656
|
-
| `
|
|
657
|
-
| `
|
|
658
|
-
| `
|
|
659
|
-
| `
|
|
660
|
-
| `
|
|
661
|
-
| `
|
|
662
|
-
| `
|
|
663
|
-
| `
|
|
814
|
+
| v2 | v3 | What to do |
|
|
815
|
+
| ----------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
816
|
+
| `BbBadge` (floating count/dot anchored to an element) | **`BbIndicator`** | `content` → `text`, `color` → `variant`, `floating` removed. New `max` prop renders `${max}+`. |
|
|
817
|
+
| `BbChip` | **removed** — use `BbBadge` | v3 `BbBadge` is the inline pill/token: same `click:clear` event and `clearableLabel`, but `clearable` is now **opt-in** (v2 chips defaulted clearable). |
|
|
818
|
+
| — | **`BbBadge`** (repurposed) | The v3 badge is a new component in an old name: inline label with `variant`, `icon`, `loading`, `clearable`. Any v2 `<BbBadge>` you have is an _indicator_ — rename it. |
|
|
819
|
+
| — | **`BbCalendar`** (new) | New in v3, no v2 equivalent: the calendar grid that v2 only had inside the date picker input's popover, now a component of its own that renders **always visible**, in place — no activator, no popover, no `label` / `hint` / `errors` chrome (name it with `aria-label`). Nothing to migrate; reach for it where a v2 app kept a date popover pinned open, or rebuilt a month grid by hand, to fake an inline calendar (a booking step, a dashboard date panel, a range under From / To fields in a filter sheet). A date _field_ stays `BbDatePickerInput`. `BbDatePicker` and `BbDatePickerInput` render this same component, so its grid classes are `.bb-calendar__*` (§8). |
|
|
820
|
+
| `BbTab` | **`BbTabs`** | Component and types renamed (`BbTabProps` → `BbTabsProps`; deprecated type aliases remain, the component name does not). |
|
|
821
|
+
| `Base*` internals (`BaseButton`, `BaseDialog`, `BaseCheckbox`, `BaseTag`, …) | **`BbBase*`** | If you imported any base primitive or targeted its BEM block in CSS (`.base-btn` → `.bb-base-button`), rename. `BbBaseButton` is now a supported public export. |
|
|
822
|
+
| `BbCheckboxIcon` / `BbRadioIcon` / `BbSwitchIcon` | **`BbBaseCheckboxIcon`** / **`BbBaseRadioIcon`** / **`BbBaseSwitchIcon`** | Rename import + BEM block (`.bb-base-checkbox-container__icon` → `.bb-base-checkbox-icon`; see §5.6). |
|
|
823
|
+
| `BbBase*` input controls + `CommonInputWrapper` / `CommonInputOuterContainer` | **no longer exported** — use the full public component | v2 exposed the styled base inputs (`BbBaseTextInput`, `BbBaseSelect`, `BbBaseSwitch`, `BbBaseDatePickerInput`, …) and the input-chrome wrappers because a few full inputs were missing. v3 ships a full public component for every input, and the private field layers are **deleted**, not hidden: there is no `BbBaseTextInput` / `BbBaseSelect` / `BbBaseSwitch` in v3 at all (the flatten, Queue 30). Use `BbTextInput` / `BbSelect` / `BbSwitch` / … ; for a bare/inline control with no label gap, pass **`hideLabel`**. Still exported: `BbBaseButton` and the glyphs (`BbBaseCheckboxIcon` / `BbBaseRadioIcon` / `BbBaseSwitchIcon`).<br><br>**The shared chrome was also restructured, not just un-exported.** The outer+inner pair merged into one `CommonFieldInput` (`.bb-field-input` / `__box`), `CommonField` gained an inner `__layout` element that now carries the orientation modifiers, and `__input` became `__input-wrapper`. Anything anchored to the old DOM — app CSS, test selectors, JS positioning a floating panel off `.bb-base-input-container__input` — fails silently: nothing throws, the element is simply never found. See §5.6.<br><br>**Built a custom control on the chrome?** If your app composed `BbBaseInputContainer` + `CommonInputOuterContainer` + `CommonInputInnerContainer` around an element the library does not ship (a highlight-overlay textarea, a field with a bespoke floating panel), there is no public v3 component to swap in — the chrome is the reference-only `CommonField` / `CommonFieldInput` pair. The sanctioned fallback is to **copy** the chrome into your app from the implementation source that ships with the package: `node_modules/bitboss-ui/dist/ai/source/CommonField.md` and `dist/ai/source/CommonFieldInput.md` carry the complete `.vue` template, `types.ts` and `index.css` for each (72 components have one). Those files are banner-marked "Reference Only - Internal" — that bans _importing_ the internal component, not copying its template and CSS into a component of your own, which is the supported route here. The class names a copied template emits are styled by the public `bitboss-ui/styles.css`, so it inherits library chrome for free. Check first whether v3 already ships what you built — `BbTimePickerInput`, `BbTimePicker` and `BbCalendar` (the calendar grid on its own, always visible) are new in v3. |
|
|
824
|
+
| `useWizard` (+ `Step`, `WizardState`, `wizardInjectionKey`) | **removed** | No replacement — it was unused scaffolding. Copy the v2 implementation into your app if you depended on it. |
|
|
825
|
+
| `BbIntersection` (+ `BbIntersectionProps` / `BbIntersectionEvents`) | **removed** | No replacement — it wrapped `IntersectionObserver` in ~40 lines and carried no styling. Use `@vueuse/core`'s `useIntersectionObserver`, or copy the v2 component. Full mapping of the `shown`/`hidden`/`intersected` events and the slot props: [components/bb-intersection.md](./components/bb-intersection.md). |
|
|
826
|
+
| `useBroadcastChannelInstance` | **removed** | Same reasoning: a typed wrapper over a browser API, no markup, no styling, used by no component here. Cross-tab messaging is app architecture. Use `useBroadcastChannel` from `@vueuse/core` — already in your tree, since this library depends on it. **Two behaviours do not carry over** (handler auto-removal on unmount, and the refcount the v2 docs described but never had): [components/use-broadcast-channel-instance.md](./components/use-broadcast-channel-instance.md). |
|
|
827
|
+
| `BbRatio` (+ `BbRatioProps`, `.bb-ratio`) | **removed** | No replacement — it was a one-rule wrapper. Use the `aspect-ratio` CSS property, or copy the v2 component. |
|
|
828
|
+
| `useQueue`, `useQuery` | **removed** | Both were public v2 exports and neither has a v3 equivalent; the import fails at build. Copy the v2 implementations out of the 2.1.135 tarball (`dist/composables/useQueue.d.ts`, `useQuery.d.ts`) into your app, or replace them with `@vueuse/core` equivalents. |
|
|
829
|
+
| `BbToastMessage` type export | **removed** | Use `BbToastOptions` (the `toast()` options shape). |
|
|
830
|
+
| `IconRegistry` / `IconNameFromRegistry` exports | **removed** | Icon names are plain strings now. Local art goes in `iconDir` as `local:<name>`; delete your `IconRegistry` augmentation. |
|
|
664
831
|
|
|
665
832
|
### 5.2 The polarity wave: booleans now read as opt-in
|
|
666
833
|
|
|
@@ -680,35 +847,39 @@ to the new name (`hide-close`).
|
|
|
680
847
|
> applies to **`BbAlert`, `BbDialog` and `BbOffCanvas` only**. See §5.4 and the
|
|
681
848
|
> per-component files. `npx bitboss-ui check` catches both spellings if you slip.
|
|
682
849
|
|
|
683
|
-
| Component(s)
|
|
684
|
-
|
|
|
685
|
-
| `BbAlert`, `BbDialog`, `BbOffCanvas`
|
|
686
|
-
| `BbTable`
|
|
687
|
-
| `BbTabs`
|
|
688
|
-
| `BbButton`
|
|
689
|
-
| `BbDropdownButton`
|
|
690
|
-
| `BbDropdownButton`
|
|
691
|
-
| `BbSlider`
|
|
692
|
-
| `BbColorPalette`, `BbSelectPopover`
|
|
693
|
-
| `BbSelect`, `BbSelectPopover
|
|
694
|
-
| `
|
|
695
|
-
| `
|
|
696
|
-
| `
|
|
850
|
+
| Component(s) | v2 prop (default) | v3 prop (default) |
|
|
851
|
+
| ------------------------------------ | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
852
|
+
| `BbAlert`, `BbDialog`, `BbOffCanvas` | `showClose` (`true`) | `hideClose` (`false`) — also on `toast()` options, where v2 had `showClose` too and the same inversion applies (`showClose: false` → `hideClose: true`, `showClose: true` → delete). Genuinely **new** on `confirm()` options. |
|
|
853
|
+
| `BbTable` | `allowSelectAll` (`true`) | `disableSelectAll` (`false`) |
|
|
854
|
+
| `BbTabs` | `animateX` / `animateY` (`true`) | `disableAnimateX` / `disableAnimateY` (`false`) |
|
|
855
|
+
| `BbButton` | `autoLoading` (`false`) | `disableAutoLoading` (`false`) — **⚠ silent behavior flip:** async `@click` handlers now show the loading spinner and disable the button automatically. Pass `disable-auto-loading` to keep v2 behavior. |
|
|
856
|
+
| `BbDropdownButton` | `autoLoading` (`true`) | `disableAutoLoading` (`false`) |
|
|
857
|
+
| `BbDropdownButton` | `disabledWhileLoading` (`true`) | **removed** — always disabled while loading now |
|
|
858
|
+
| `BbSlider` | `thumbTranslate` (`true`) | `disableThumbTranslate` (`false`) |
|
|
859
|
+
| `BbColorPalette`, `BbSelectPopover` | `flip` (`true`) | `disableFlip` (`false`) |
|
|
860
|
+
| `BbSelect`, `BbSelectPopover` | `allowWriting` (`true`, tokens `boolean \| 'not-mobile'`) | `disableWriting` (`'auto'`, tokens `boolean \| 'mobile' \| 'desktop' \| 'auto'`) — `allow-writing="not-mobile"` becomes `disable-writing="mobile"`; unset hides the search field on short array lists (see §6) |
|
|
861
|
+
| `BbDatePickerInput` | `allowWriting` (`true`, tokens `boolean \| 'not-mobile'`) | `disableWriting` (`false`, tokens `boolean \| 'mobile' \| 'desktop'`) — `allow-writing="not-mobile"` becomes `disable-writing="mobile"` |
|
|
862
|
+
| `BbCheckbox`, `BbRadio`, `BbSwitch` | `reverse` (`true`) | `reverse` (`false`, **meaning inverted**) — unset renders identically, but explicit values flip: v2 `:reverse="false"` → v3 `reverse`; v2 `reverse` → delete. **⚠ silent** — see [bb-checkbox.md](./components/bb-checkbox.md). |
|
|
863
|
+
| `BbAlert` | `ariaAtomic` (`true`) | **removed** — correct live-region behavior is hardcoded |
|
|
864
|
+
| `BbChip` | `clearable` (`true`) | **removed with the component** — `BbBadge.clearable` defaults `false` |
|
|
697
865
|
|
|
698
866
|
### 5.3 Straight renames
|
|
699
867
|
|
|
700
|
-
| Component
|
|
701
|
-
|
|
|
702
|
-
| `BbPagination`, `BbTabs`
|
|
703
|
-
| `BbTooltip`
|
|
704
|
-
| `toast()`, `confirm()` options
|
|
705
|
-
| `useToast()`
|
|
706
|
-
| `BbIcon`
|
|
707
|
-
| `BbColorPalette`, `BbColorInput`
|
|
708
|
-
| `BbCheckboxGroup`, `BbRadioGroup`, `BbSwitchGroup`
|
|
709
|
-
| `BbSelect`
|
|
710
|
-
| `
|
|
711
|
-
| `
|
|
868
|
+
| Component | v2 | v3 |
|
|
869
|
+
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
870
|
+
| `BbPagination`, `BbTabs` | `querykey` | `queryKey` — **⚠ silent**: a leftover `querykey` falls through to the DOM and the component uses the default key (`'page'` / `'tab'`), quietly moving your URL params. |
|
|
871
|
+
| `BbTooltip` | `timeout` | `delay` |
|
|
872
|
+
| `toast()`, `confirm()` options | `timeout` | `duration` — same meaning (ms before auto-dismiss). `toast()` throws on `duration <= 0`; on `confirm()` it resolves the promise `false` quietly and implies `autoClose: true`. |
|
|
873
|
+
| `useToast()` | `dismissAll()` | `dismiss()` with **no argument**. The v3 return shape is `{ toast, dismiss, update }`. |
|
|
874
|
+
| `BbIcon` | `type` (required) | `icon` |
|
|
875
|
+
| `BbColorPalette`, `BbColorInput` | `picker` | `eyeDropper` |
|
|
876
|
+
| `BbCheckboxGroup`, `BbRadioGroup`, `BbSwitchGroup` | `labelPosition` | `legendPosition` |
|
|
877
|
+
| Every form control — `BbTextInput`, `BbTextarea`, `BbNumberInput`, `BbColorInput`, `BbSelect`, `BbDatePickerInput`, `BbTimePickerInput`, `BbTag`, `BbCheckbox`, `BbRadio`, `BbSwitch`, `BbCheckboxGroup`, `BbRadioGroup`, `BbSwitchGroup`, `BbRating`, `BbSlider` | `direction` | `layout` — same values (`'auto'`, `'horizontal'`, `'vertical'`, a `'xx xxxxxx'` ratio), plus `'label-fill'` (the label takes the free space, the input keeps its size — with `reverse`, the settings row) and `'input-fill'`. **⚠ silent**: a leftover `direction` falls through to the root as an HTML attribute and the field keeps its default layout. The ESLint plugin's `--fix` renames it. |
|
|
878
|
+
| `BbCheckboxGroup`, `BbRadioGroup`, `BbSwitchGroup` | `inputDirection` | `listLayout` — `'horizontal'` (default) / `'vertical'` / `'vertical-stretch'` / `'tiles'`. **⚠ silent**: v2 `'vertical'` rows spanned the list; v3 `'vertical'` rows keep their own width, and `'vertical-stretch'` is the v2 look — the ESLint plugin's `--fix` maps a static `'vertical'` to `'vertical-stretch'`, a bound value is only renamed. New beside it: `itemLayout` (each row's input against its label, the `layout` keywords) and `itemReverse`. |
|
|
879
|
+
| `BbSelect` | `prefill: 'focus'` | `prefill: 'interaction'` (value rename; same default) |
|
|
880
|
+
| `BbToast` (host) | `placement` (e.g. `bottom-start`) | `position` (corner set: `top-left` … `bottom-right`) |
|
|
881
|
+
| `BbAlert`, `BbTooltip`, `toast()`, `confirm()` | `theme` | `variant` (typed — see section 4). On `confirm()` the v2 type was a free-form `theme?: string`; v3's is `ConfirmVariantType` (`default`, `destructive`). |
|
|
882
|
+
| Every form control with a warning state — `BbTextInput`, `BbTextarea`, `BbNumberInput`, `BbColorInput`, `BbSelect`, `BbSelectPopover`, `BbDatePickerInput`, `BbTimePickerInput`, `BbTag`, `BbCheckbox`, `BbRadio`, `BbSwitch`, `BbCheckboxGroup`, `BbRadioGroup`, `BbSwitchGroup`, `BbRating`, `BbSlider`, `BbDropzone` — and the `BbBaseCheckboxIcon` / `BbBaseRadioIcon` / `BbBaseSwitchIcon` glyphs | `hasWarning` _(v3 ≤ beta.24; not in v2)_ | `hasWarnings` — plural, matching `hasErrors` and the `warnings` prop. **⚠ silent**: a leftover `has-warning` falls through to the root as an HTML attribute and the warning chrome never shows. The ESLint plugin's `--fix` renames it. Slot props that carried it (`#input`, `#label`) are renamed the same way. |
|
|
712
883
|
|
|
713
884
|
### 5.4 Removed props (no replacement needed — behavior became default or moved)
|
|
714
885
|
|
|
@@ -719,15 +890,15 @@ to the new name (`hide-close`).
|
|
|
719
890
|
- **`color` everywhere**: gone from `BbAvatar`, `BbIcon`, `BbSpinner`,
|
|
720
891
|
`BbCheckbox`, `BbRadio`, `BbSwitch`, `BbSlider`, `BbRating` and all three
|
|
721
892
|
groups. Components inherit `currentColor` / theme tokens; style via CSS or
|
|
722
|
-
the token knobs. `BbAvatar`'s knobs are named: set **both** `--bg
|
|
723
|
-
`--
|
|
724
|
-
|
|
725
|
-
`--
|
|
893
|
+
the token knobs. `BbAvatar`'s knobs are named: set **both** `--bg` and
|
|
894
|
+
`--fg` on `.bb-avatar` — setting only the background leaves the initials
|
|
895
|
+
painted `--bb-primary-fg` on top of it. The built-in person glyph mixes
|
|
896
|
+
`--fg` over `--bg`; there is no third local.
|
|
726
897
|
|
|
727
898
|
```css
|
|
728
899
|
.team-avatar .bb-avatar {
|
|
729
|
-
--bg
|
|
730
|
-
--
|
|
900
|
+
--bg: #7c3aed;
|
|
901
|
+
--fg: #fff;
|
|
731
902
|
}
|
|
732
903
|
```
|
|
733
904
|
|
|
@@ -744,6 +915,19 @@ to the new name (`hide-close`).
|
|
|
744
915
|
emission (reading accepts both forms either way). Details in the
|
|
745
916
|
[component page](./components/bb-date-picker-input.md).
|
|
746
917
|
- **`BbTag`**: `multiple` removed (always an array input).
|
|
918
|
+
- **`vid` on every validated field** (`bitboss-ui/validated`, 3.0.0-beta.41)
|
|
919
|
+
is gone, and what replaces it depends on what YOU used it for, so read the
|
|
920
|
+
value. **From v2**, `vid` was the field's name in messages (almost always
|
|
921
|
+
a display name like `vid="Email address"`): write
|
|
922
|
+
`validation-label="Email address"`. **From a 3.0 beta**, `vid` was the
|
|
923
|
+
field's path (`vid="email"`, `vid="address.city"`): write `name` with the
|
|
924
|
+
same value; brackets work too (`name="address[city]"`), and are what a
|
|
925
|
+
native form post needs (PHP turns dots in a posted name into `_`).
|
|
926
|
+
`npx bitboss-ui check --fix` does this by value: words (a space or a
|
|
927
|
+
capital) → `validation-label`, a key (lowercase, digits, `_`, `-`, dots,
|
|
928
|
+
brackets) → `name`; anything else it reports with both options. **⚠
|
|
929
|
+
silent**: a leftover `vid` renders as an HTML attribute and the field falls
|
|
930
|
+
back to its label-derived path. See § 6 item 18 for what `name` now does.
|
|
747
931
|
- **Built-in tooltip on `BbButton`** (`tooltip`, `tooltipPlacement`,
|
|
748
932
|
`tooltipTimeout`): use the `v-bb-tooltip` directive or wrap in `BbTooltip`.
|
|
749
933
|
- **Arrow props on non-tooltip surfaces**: `hideArrow`
|
|
@@ -753,16 +937,16 @@ to the new name (`hide-close`).
|
|
|
753
937
|
warns.
|
|
754
938
|
- **`BbPopover`**: `showClose`, `closeLabel`, `restoreFocus`, `block` removed —
|
|
755
939
|
render your own close affordance in the content (`#default="{ close }"`).
|
|
756
|
-
- **`BbDialog`**: `
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
`
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
940
|
+
- **`BbDialog`**: `hideHeader`, `compact`, `overlayClasses`, `panelClasses`
|
|
941
|
+
removed (use the `header` slot and normal classes). The `#close` **slot** is
|
|
942
|
+
gone too — v3's slot set is `header | title | description | default | footer`,
|
|
943
|
+
and a custom close control goes inside `#header`, which replaces the whole
|
|
944
|
+
default header including the ✕ (so `hide-close` is not needed alongside it).
|
|
945
|
+
**`description` and `#description` survive**: they were dropped in early v3
|
|
946
|
+
and restored in 3.0.0-beta.19, unchanged from v2 and with `aria-describedby`
|
|
947
|
+
wired again.
|
|
948
|
+
- **`BbOffCanvas`**: the same — `#close` removed, `description` /
|
|
949
|
+
`#description` kept (restored in 3.0.0-beta.19).
|
|
766
950
|
- **`BbBreadcrumbs`**: string `divider` removed (slot-driven now);
|
|
767
951
|
`dividerWidth` default changed `5` → `16`.
|
|
768
952
|
- **`BbPagination`**: `loading` removed.
|
|
@@ -796,8 +980,11 @@ to the new name (`hide-close`).
|
|
|
796
980
|
the items you pass instead.
|
|
797
981
|
- **Models**: `BbTag.modelValue` is `string[]`; `BbDropzone.modelValue` is
|
|
798
982
|
`File | File[] | null`; `BbSlider.modelValue` drops its `string` member.
|
|
799
|
-
- **`
|
|
800
|
-
typos now fail to compile; two-word ratio strings (`'
|
|
983
|
+
- **`layout`** (v2 `direction`) on inputs: the exported `FieldLayout` union —
|
|
984
|
+
keyword typos now fail to compile; two-word ratio strings (`'x xx'`) still
|
|
985
|
+
work. The v3 prereleases up to beta.32 exported this union as
|
|
986
|
+
`InputDirection`; that type export is gone — import `FieldLayout` (for
|
|
987
|
+
`layout` / `itemLayout`) or `ListLayout` (for `listLayout`) instead.
|
|
801
988
|
|
|
802
989
|
### 5.5b Fields added to public object types
|
|
803
990
|
|
|
@@ -832,27 +1019,123 @@ short.
|
|
|
832
1019
|
|
|
833
1020
|
### 5.6 Renamed CSS blocks
|
|
834
1021
|
|
|
1022
|
+
> **On a 3.0 beta already?** Use [the beta class guide](./v3-beta-css-classes.md)
|
|
1023
|
+
> instead: it lists every class 3.0.0-beta.36 renamed so each `pt` part has a
|
|
1024
|
+
> class of the same name, and has a find-and-replace script.
|
|
1025
|
+
|
|
1026
|
+
**v2 classes that kept their name until 3.0.0-beta.36.** These went through
|
|
1027
|
+
the first v3 betas unchanged, then were renamed with the rest of the class
|
|
1028
|
+
surface. A v2 app uses the right-hand name directly. The
|
|
1029
|
+
[beta class guide](./v3-beta-css-classes.md#every-renamed-class) explains
|
|
1030
|
+
each one.
|
|
1031
|
+
|
|
1032
|
+
<!-- generated:v2rows -->
|
|
1033
|
+
|
|
1034
|
+
| v2 (and 3.0 ≤ beta.35) | v3 |
|
|
1035
|
+
| ----------------------------------- | ------------------------------- |
|
|
1036
|
+
| `.bb-chipsbox-item` | `.bb-tag__badge` |
|
|
1037
|
+
| `.bb-commabox-item` | `.bb-tag__comma` |
|
|
1038
|
+
| `.bb-select-popover__search-input` | `.bb-select-popover__input` |
|
|
1039
|
+
| `.bb-button__content` | `.bb-button__text` |
|
|
1040
|
+
| `.bb-dropdown__items-container` | `.bb-dropdown__list` |
|
|
1041
|
+
| `.bb-pagination__page-chevron` | `.bb-pagination__icon` |
|
|
1042
|
+
| `.bb-tooltip__content` | `.bb-tooltip__panel` |
|
|
1043
|
+
| `.bb-table-caption` | `.bb-table__caption` |
|
|
1044
|
+
| `.bb-table-header-row` | `.bb-table__header-row` |
|
|
1045
|
+
| `.bb-table-header` | `.bb-table__cell-column-header` |
|
|
1046
|
+
| `.bb-table-data__row` | `.bb-table__row` |
|
|
1047
|
+
| `.bb-table-data__cell` | `.bb-table__cell` |
|
|
1048
|
+
| `.bb-toast-message` | `.bb-toast__panel` |
|
|
1049
|
+
| `.bb-toast-message__icon` | `.bb-toast__icon` |
|
|
1050
|
+
| `.bb-toast-message__content` | `.bb-toast__content` |
|
|
1051
|
+
| `.bb-toast-message__title` | `.bb-toast__title` |
|
|
1052
|
+
| `.bb-toast-message__text` | `.bb-toast__text` |
|
|
1053
|
+
| `.bb-toast-message__close` | `.bb-toast__close` |
|
|
1054
|
+
| `.bb-offcanvas__body` | `.bb-offcanvas__content` |
|
|
1055
|
+
| `.bb-color-palette__popover` | `.bb-color-palette` |
|
|
1056
|
+
| `.bb-commabox-item--focused` | `.bb-tag__comma--highlighted` |
|
|
1057
|
+
| `.bb-dropdown-button__main-btn` | `.bb-dropdown-button__main` |
|
|
1058
|
+
| `.bb-dropdown-button__dropdown-btn` | `.bb-dropdown-button__toggle` |
|
|
1059
|
+
|
|
1060
|
+
<!-- /generated:v2rows -->
|
|
1061
|
+
|
|
835
1062
|
If app CSS or test selectors target library internals, these blocks moved. This
|
|
836
1063
|
is the complete set — a class-by-class diff of the v2 stylesheet against v3
|
|
837
1064
|
leaves nothing else orphaned. All of it is **silent**: a selector on a class
|
|
838
1065
|
nobody emits matches nothing and throws nothing.
|
|
839
1066
|
|
|
1067
|
+
One caution when auditing on your own: absence from `styles.css` answers _"is
|
|
1068
|
+
it styled"_, not _"is it emitted"_. Some classes carry no library rule but are
|
|
1069
|
+
still rendered as styling hooks for you (`.bb-field__hint`
|
|
1070
|
+
is one: its wrapper `__hint-wrap` carries the rules, the inner text node is
|
|
1071
|
+
bare) — those are correct targets and correctly
|
|
1072
|
+
absent from this table, which maps only classes that moved or died. Before
|
|
1073
|
+
filing a class as removed, check the component's markup, not just the
|
|
1074
|
+
stylesheet.
|
|
1075
|
+
|
|
840
1076
|
**Input chrome**
|
|
841
1077
|
|
|
842
|
-
| v2
|
|
843
|
-
|
|
|
844
|
-
| `.bb-common-input-inner-container` (+ `--clearable`, `__prefix`, `__suffix`, `__prepend-icon`, `__append-icon`)
|
|
845
|
-
| `.bb-common-input-outer-container`
|
|
846
|
-
| `.bb-base-input-
|
|
847
|
-
| `.bb-base-input-
|
|
848
|
-
| `.bb-base-input-
|
|
849
|
-
| `.bb-base-input-container--
|
|
850
|
-
| `.bb-base-input-
|
|
851
|
-
| `.bb-base-input-
|
|
852
|
-
| `.
|
|
853
|
-
| `.
|
|
854
|
-
| `.bb-base-checkbox-
|
|
855
|
-
| `.bb-
|
|
1078
|
+
| v2 | v3 |
|
|
1079
|
+
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1080
|
+
| `.bb-common-input-inner-container` (+ `--clearable`, `__prefix`, `__suffix`, `__prepend-icon`, `__append-icon`) | `.bb-field-input` (+ the same suffixes) — modifiers `--active --compact --disabled --errors --loading --readonly --clearable --warnings` |
|
|
1081
|
+
| `.bb-common-input-outer-container` | merged away — the v2 outer/inner pair is one `.bb-field-input`, whose inner span is `.bb-field-input__box` |
|
|
1082
|
+
| `.bb-base-input-container` (the field frame: root, `__label`, `__label-text`, `__description`, `__control`, `__hint-*`, `__error*`, `__warning*` and every `--` state modifier) | `.bb-field` (+ the same suffixes), renamed in the v3 flatten (Queue 30), **except `__control`, which is now `__input-wrapper`** (Queue 45; no `bb-field__control` is emitted) |
|
|
1083
|
+
| `.bb-base-input-outer-container` (+ `--compact`) | merged into `.bb-field` (+ `--compact`) |
|
|
1084
|
+
| `.bb-base-input-container__input` (+ `--left --center --right`) | `.bb-field__input-wrapper` (+ the same modifiers) |
|
|
1085
|
+
| `.bb-base-input-container--horizontal` / `--vertical` / `--reverse` (on the root) | `.bb-field__layout--horizontal` / `--vertical` / `--reverse`, plus one `--<layout>` keyword modifier (`--auto --ratio --label-fill --input-fill`; `--horizontal` names every side-by-side layout) — v3 inserts an inner `__layout` element and the orientation modifiers moved onto it; the root keeps only state modifiers (`--disabled --errors --warnings --loading --readonly --compact --floating-label --inside-label` …) |
|
|
1086
|
+
| `.bb-base-input-container--label-mode-floating` | `.bb-field--floating-label` |
|
|
1087
|
+
| `.bb-base-input-container__errors-outer` | `.bb-field__errors-wrap` |
|
|
1088
|
+
| `.bb-base-input-container__hint-container` | `.bb-field__hint-wrap` |
|
|
1089
|
+
| `.base-btn`, `.base-btn--block`, … | `.bb-base-button*` |
|
|
1090
|
+
| `.bb-base-checkbox-container` / `.bb-base-radio-container` / `.bb-base-switch-container` | removed — the v3 flatten folds the toggle's wrapper away; style the glyph `.bb-base-checkbox-icon` / `.bb-base-radio-icon` / `.bb-base-switch-icon` and its `--*` modifiers (or `pt:icon:<state>`) |
|
|
1091
|
+
| `.bb-base-checkbox-container__icon` / `.bb-base-radio-container__icon` / `.bb-base-switch-container__icon` (+ `__icon-thumb`) | `.bb-base-checkbox-icon` / `.bb-base-radio-icon` / `.bb-base-switch-icon` (+ `.bb-base-switch-icon__thumb`) |
|
|
1092
|
+
| `.bb-cr-container*` — the shared checkbox/radio/switch group tree (root, `--vertical`, `__container`, `-option`, `-option__text`) | split into per-control blocks: root `.bb-{checkbox,radio,switch}-group__list` (+ `--horizontal --vertical --vertical-stretch --tiles --errors --warnings`, one per `list-layout`), `__loading` / `__empty` (`__container` merged into `__list`, which is the `pt:list` node), rows `.bb-…-group-item` (+ `__label`, the v2 `__text`; `--selected --description --focused --focus-visible --disabled`, one `--<item-layout>` and `--reverse`; `__description` is new; the glyph is itself the row's input cell, with no wrapper, styled with `pt:icon` — `--disabled` is emitted and unstyled, a hook). **⚠ silent**: v2 `--vertical` rows spanned the list; v3 `list-layout="vertical"` rows keep their own width — `vertical-stretch` is the v2 look. **`BbRating` no longer shares the block** — use `.bb-rating__options` / `.bb-rating__item`. |
|
|
1093
|
+
|
|
1094
|
+
**Form controls — the field layers folded into each component**
|
|
1095
|
+
|
|
1096
|
+
Each control's private base layer is folded into the public component
|
|
1097
|
+
(v3 flatten, Queue 30): its classes take the public block, and the box row
|
|
1098
|
+
it used to put its own name on is the shared `.bb-field-input`. Rows are
|
|
1099
|
+
added per control; a control not listed kept its v2 classes.
|
|
1100
|
+
|
|
1101
|
+
| v2 | v3 |
|
|
1102
|
+
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1103
|
+
| `.bb-base-text-input` (on the box row, + `--compact --disabled --errors --has-value --loading --readonly`) | removed — target `.bb-text-input .bb-field-input` and its `--compact --disabled --errors --loading --readonly` modifiers; `hasValue` is `.bb-field--has-value` on the root |
|
|
1104
|
+
| `.bb-base-text-input__input` | `.bb-text-input__input` |
|
|
1105
|
+
| `.bb-base-select` (on the box row, + `--shown --disabled --readonly`) | `.bb-select__field` (+ the same modifiers); v2's `--errors --loading --compact` are the box row's `.bb-field-input--*` modifiers |
|
|
1106
|
+
| `.bb-base-select__max-reached` | `.bb-select__max-reached` |
|
|
1107
|
+
| `.bb-base-select__activator`, `__value`, `__chips-row`, `__chip`, `__placeholder` | `.bb-select__activator`, `__value`, `__chips-row`, `__chip`, `__placeholder` — same suffixes on the public block |
|
|
1108
|
+
| `.bb-base-rating` (+ `--disabled --errors --has-value --readonly`) | `.bb-rating__stars` (+ the same modifiers; `--warnings`, `--forced-clear` are new) — the `--size` / `--space` tokens are declared here |
|
|
1109
|
+
| `.bb-base-rating__inner-container` | `.bb-rating__options` |
|
|
1110
|
+
| `.bb-base-rating__option`, `.bb-base-rating__label-text` | `.bb-rating__item`, `.bb-rating__label-text` (`--highlighted` → `--filled` / `--empty`, see components/bb-rating.md) |
|
|
1111
|
+
| `.bb-base-slider` (+ `--disabled --errors --readonly`) | `.bb-slider__body` (+ the same modifiers; `--compact`, `--warnings` are new) — the slider tokens (`--thumb`, `--track`, `--accent`, and the box's field look locals `--bg`, `--bw`, `--border-color`, `--border-focus`, `--elev`, `--ring-size`, `--px`, `--py`; `--shell-*` up to beta.33) are declared here |
|
|
1112
|
+
| `.bb-base-slider__slider-container`, `__ticks-container`, `__tick`, `__track-container`, `__track-fill`, `__track-background`, `__thumb-container`, `__thumb` (+ `--lower --higher --focused`) | `.bb-slider__box` (was `__slider-container`), `__ticks` (was `__ticks-container`), `__tick` (+ new `--in-range`), `__track` (the rail itself: was `__track-container` + the grey `__track-fill`, now one node), `__bar` (the coloured bar, was `__track-background`; BbProgress's word), `__thumb-container`, `__thumb` (+ the same modifiers). Prefer the `pt` parts of the same names: `box`, `track`, `bar`, `ticks`, `tick`, `thumb` |
|
|
1113
|
+
| `.bb-base-textarea` (on the box row, + `--disabled --errors --loading --readonly`) | `.bb-textarea__field` (the box row; tokens `--min-height --inner-h --floating-py`) — state modifiers are `.bb-field-input--disabled --errors --loading --readonly` on the same node |
|
|
1114
|
+
| `.bb-base-textarea--auto-grow` | `.bb-textarea__field--auto-grow` |
|
|
1115
|
+
| `.bb-base-textarea__input` | `.bb-textarea__input` |
|
|
1116
|
+
| `.bb-base-number-input` (on the box row, + `--compact --disabled --errors --loading --readonly`) | removed — target `.bb-number-input .bb-field-input` and its `--compact --disabled --errors --loading --readonly` modifiers |
|
|
1117
|
+
| `.bb-base-number-input__input` | `.bb-number-input__input` |
|
|
1118
|
+
| `.bb-base-tag` (on the box row, + `--disabled --errors --loading --readonly`) | `.bb-tag__field` (the box row) — state modifiers are `.bb-field-input--disabled --errors --loading --readonly` on the same node |
|
|
1119
|
+
| `.bb-base-tag--active` / `--compact` | `.bb-tag__field--active` / `.bb-tag__field--compact` |
|
|
1120
|
+
| `.bb-base-tag__input-container` / `__text-input` | `.bb-tag__input-container` / `.bb-tag__input` |
|
|
1121
|
+
| `.bb-base-tag__selected--focused` | removed (had no rules in v2) — the highlighted chip is `.bb-tag__badge.bb-badge--highlighted`, the comma item `.bb-tag__comma--highlighted` (prefer `pt:badge:highlighted` / `pt:comma:highlighted`) |
|
|
1122
|
+
| `.bb-base-color-input` (on the box row, + `--active --compact --disabled --errors --loading --readonly`) | `.bb-color-input__field`; the modifiers are the box row's `.bb-field-input--compact --disabled --errors --loading --readonly`; `--active` (palette open) has no class — the indicator carries `aria-expanded="true"` |
|
|
1123
|
+
| `.bb-base-color-input__input` / `__indicator` | `.bb-color-input__input` / `.bb-color-input__indicator` |
|
|
1124
|
+
| `.bb-base-date-picker-input` (on the box row, + `--active --compact --disabled --errors --loading --readonly --range`) | `.bb-date-picker-input__field` (+ `--range`); v2's `--active --compact --disabled --errors --loading --readonly` are the box row's `.bb-field-input--*` modifiers |
|
|
1125
|
+
| `.bb-base-date-picker-input__accessible-description` | `.bb-date-picker-input__accessible-description` |
|
|
1126
|
+
| `.bb-base-time-picker-input` (on the box row, + `--range` and the state modifiers) | `.bb-time-picker-input__field` (+ `--range`); the state modifiers are the box row's `.bb-field-input--*` |
|
|
1127
|
+
| `.bb-base-time-picker-input__*`, `.bb-base-time-picker-input-offcanvas` | `.bb-time-picker-input__*`, `.bb-time-picker-input__sheet` — same suffixes |
|
|
1128
|
+
| `.bb-base-time-selector*` (the time columns, shared by the time input and picker) | `.bb-time-selector*` (CommonTimeSelector) — same suffixes |
|
|
1129
|
+
| `.bb-base-date-picker` (the calendar grid) | `.bb-calendar__grid` (+ `--unit-month` / `--unit-year`, new in v3) |
|
|
1130
|
+
| `.bb-base-date-picker__body`, `__button-menu`, `__content`, `__controls`, `__date` (+ `--current --disabled --first --highlighted --last --middle --selected --today`), `__date-button`, `__days-selector` (+ `--hidden`), `__header-cell`, `__header-container`, `__month`, `__month-selector`, `__week`, `__year-selector` | `.bb-calendar__*`, same element and modifier names — except `--current` (now `--highlighted`) and `--highlighted` (now its inverse, `--outside`); see the day-cell row below |
|
|
1131
|
+
| `.content` / `.content__btn` (+ `--selected`) — the month / year panels | `.bb-calendar__menu-grid` / `.bb-calendar__menu-btn` (+ `--selected`); the rows between them are `.bb-calendar__menu-row` |
|
|
1132
|
+
| `.bb-base-checkbox` / `.bb-base-radio` / `.bb-base-switch` (+ `--disabled --errors --indeterminate --readonly`) | removed — BbCheckbox / BbRadio / BbSwitch render the native input and the glyph with no wrapper; the glyph `.bb-base-{checkbox,radio,switch}-icon` carries `--checked --disabled --errors --warnings --focused --focus-visible --indeterminate --readonly`; in a group row the glyph is itself the row's input cell (no wrapper — beta ≤ 35 had `.bb-{…}-group-item__input-wrapper`), styled with `pt:icon`; in BbTable the span is `.bb-table-check` / `.bb-table-radio` |
|
|
1133
|
+
| `.bb-base-checkbox-group` / `.bb-base-radio-group` / `.bb-base-switch-group` | `.bb-checkbox-group__list` / `.bb-radio-group__list` / `.bb-switch-group__list` |
|
|
1134
|
+
|
|
1135
|
+
The date input's built-in strings moved with it: the `Locale` type's
|
|
1136
|
+
`baseDatePickerInput` namespace is `datePickerInput` (v3's new time input
|
|
1137
|
+
uses `timePickerInput`). Only code that reads the `Locale` type by key is
|
|
1138
|
+
affected; the dictionaries themselves ship with the library.
|
|
856
1139
|
|
|
857
1140
|
**Dialogs, off-canvas, popovers**
|
|
858
1141
|
|
|
@@ -866,45 +1149,66 @@ nobody emits matches nothing and throws nothing.
|
|
|
866
1149
|
**Tabs** — the whole tree was renamed, and v2's block name was `bb-tab`, not
|
|
867
1150
|
`bb-tabs`, so nothing of a v2 tab theme survives untouched:
|
|
868
1151
|
|
|
869
|
-
| v2 | v3
|
|
870
|
-
| ------------------------------------------------ |
|
|
871
|
-
| `.bb-tab` | `.bb-tabs`
|
|
872
|
-
| `.bb-tab--vertical` / `--horizontal` | `.bb-tabs--vertical` / `--horizontal` (+ `.bb-tabs-list--vertical` / `--horizontal` on the strip)
|
|
873
|
-
| `.bb-tab__label-boundary` | `.bb-tabs-list`
|
|
874
|
-
| `.bb-tab__label-container` (+ `--no-transition`) | `.bb-tabs-
|
|
875
|
-
| `.bb-tab__btn` (+ `--active`) | `.bb-
|
|
876
|
-
| `.bb-tab__pane` (+ `--shown`) | `.bb-
|
|
877
|
-
| `.bb-tab__panes-container` | `.bb-tabs-
|
|
1152
|
+
| v2 | v3 |
|
|
1153
|
+
| ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1154
|
+
| `.bb-tab` | `.bb-tabs` |
|
|
1155
|
+
| `.bb-tab--vertical` / `--horizontal` | `.bb-tabs--vertical` / `--horizontal` (+ `.bb-tabs-list--vertical` / `--horizontal` on the strip) |
|
|
1156
|
+
| `.bb-tab__label-boundary` | `.bb-tabs-list` |
|
|
1157
|
+
| `.bb-tab__label-container` (+ `--no-transition`) | `.bb-tabs-list__list` (+ `--no-transition`) — the sliding active pill is no longer its `::before` but its first child, `.bb-tabs-list__indicator` (`pt:indicator`), so a v2 `.bb-tab__label-boundary .bb-tab__label-container:before` rule becomes `.bb-tabs-list__indicator` |
|
|
1158
|
+
| `.bb-tab__btn` (+ `--active`) | `.bb-tabs-list__item` (+ `--active`), with new inner `.bb-tabs__trigger-content` / `.bb-tabs__trigger-label` |
|
|
1159
|
+
| `.bb-tab__pane` (+ `--shown`) | `.bb-tabs__panel` (+ `--shown`) |
|
|
1160
|
+
| `.bb-tab__panes-container` | `.bb-tabs-panels` |
|
|
878
1161
|
|
|
879
1162
|
v2 had no full-width tab strip, so apps hand-rolled one (commonly a
|
|
880
1163
|
`bb-tabs--full-width` class). v3 ships it: `<BbTabs block>` sets
|
|
881
1164
|
`.bb-tabs--block` / `.bb-tabs-list--block` and gives the triggers equal widths.
|
|
882
1165
|
Delete the hand-rolled modifier rather than porting it.
|
|
883
1166
|
|
|
1167
|
+
**BbTable** — no class was renamed, but the markup under `.bb-table` is no
|
|
1168
|
+
longer a `<table>`: it is a CSS grid of `<div>`s carrying ARIA roles. Every
|
|
1169
|
+
**element** selector on it (`table`, `thead`, `tbody`, `tfoot`, `caption`,
|
|
1170
|
+
`tr`, `th`, `td`, `colgroup`/`col`) matches nothing in v3 — silently. The
|
|
1171
|
+
classes all survive; four containers and the roles are the translation:
|
|
1172
|
+
|
|
1173
|
+
| v2 element | v3 selector |
|
|
1174
|
+
| ------------------------------------- | -------------------------------------------------------------------------------------------- |
|
|
1175
|
+
| `table` / `thead` / `tbody` / `tfoot` | `.bb-table__table` / `.bb-table__head` / `.bb-table__body` / `.bb-table__foot` |
|
|
1176
|
+
| `caption` | `.bb-table__caption` |
|
|
1177
|
+
| `tr` / `th` / `td` | `[role=row]` / `[role=columnheader]` / `[role=cell]` (or the `.bb-table-*` row/cell classes) |
|
|
1178
|
+
| `colgroup` / `col` | gone — `columns[].width` |
|
|
1179
|
+
|
|
1180
|
+
Full table, the `.table-flush` idiom rewrite, the `#thead`/`#tbody`/`#tfoot`
|
|
1181
|
+
markup contract and the layout drift that comes with the substrate:
|
|
1182
|
+
[bb-table.md](./components/bb-table.md#the-table-is-a-css-grid-not-a-table-v3-beta-2026-08-26).
|
|
1183
|
+
|
|
884
1184
|
**Everything else**
|
|
885
1185
|
|
|
886
|
-
| v2
|
|
887
|
-
|
|
|
888
|
-
| `.bb-chip*`
|
|
889
|
-
| `.bb-badge*` used as a floating count/dot (`--dot --floating --positioned --left --bottom --empty`, `__wrapper`, `__content-container`)
|
|
890
|
-
| `.bb-color-palette__*` (canvas, canvas-thumb, canvas-wrap, controls, eyedropper, preview, preview--alpha, preview-wrap, slider-thumb, slider-track, slider-wrap, slider-wrap--alpha, sliders, swatch, swatch--active, swatch-group, swatches)
|
|
891
|
-
| `.bb-toast--top-start` / `--top` / `--top-end` / `--bottom-start` / `--bottom` / `--bottom-end`
|
|
892
|
-
| `.bb-toast-message__icon-container`
|
|
893
|
-
| `.bb-tree--open`
|
|
894
|
-
| `.bb-tree-row`
|
|
895
|
-
| `.bb-tree-main-content`
|
|
896
|
-
| `.bb-
|
|
897
|
-
| `.bb-dropdown-
|
|
898
|
-
| `.bb-
|
|
899
|
-
| `.bb-
|
|
900
|
-
| `.bb-
|
|
901
|
-
| `.bb-base-date-
|
|
902
|
-
| `.bb-base-date-
|
|
903
|
-
| `.bb-base-date-
|
|
904
|
-
| `.bb-base-date-
|
|
905
|
-
| `.bb-base-date-
|
|
906
|
-
| `.bb-base-date-
|
|
907
|
-
| `.bb-
|
|
1186
|
+
| v2 | v3 |
|
|
1187
|
+
| --------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1188
|
+
| `.bb-chip*` | `.bb-badge*` (component replaced) |
|
|
1189
|
+
| `.bb-badge*` used as a floating count/dot (`--dot --floating --positioned --left --bottom --empty`, `__wrapper`, `__content-container`) | `.bb-indicator*` (component renamed) |
|
|
1190
|
+
| `.bb-color-palette` (the picker root: canvas, sliders, swatches) | `.bb-color-palette__panel` (the painted box: the popover's bubble, or the box inside the sheet; `pt:panel` on desktop — on a phone `pt:panel` is the sheet) — the element classes `.bb-color-palette__*` (canvas, canvas-thumb, canvas-wrap, controls, eyedropper, preview, preview--alpha, preview-wrap, slider-thumb, slider-track, slider-wrap, slider-wrap--alpha, sliders, swatch, swatch--active, swatch-group, swatches) keep their v2 names |
|
|
1191
|
+
| `.bb-toast--top-start` / `--top` / `--top-end` / `--bottom-start` / `--bottom` / `--bottom-end` | `.bb-toast--top-left` / `--top-center` / `--top-right` / `--bottom-left` / `--bottom-center` / `--bottom-right` (matching the `position` prop's corner set) |
|
|
1192
|
+
| `.bb-toast-message__icon-container` | **removed** — style `.bb-toast__icon` directly |
|
|
1193
|
+
| `.bb-tree--open` | `.bb-tree__item--expanded` |
|
|
1194
|
+
| `.bb-tree-row` | `.bb-tree__row` |
|
|
1195
|
+
| `.bb-tree-main-content` | `.bb-tree__content` |
|
|
1196
|
+
| `.bb-progress-bar` (the filled bar inside `.bb-progress`) | `.bb-progress__bar` |
|
|
1197
|
+
| `.bb-dropdown-button__dropdown-chevron` | `.bb-dropdown-button__chevron` |
|
|
1198
|
+
| `.bb-dropdown-button--loading` / `__content` / `__icon` / `__prepend-icon` / `__append-icon` | **removed** — the split button delegates to `BbButton`'s internals; target `.bb-button__*` inside it |
|
|
1199
|
+
| `.bb-dropdown__wrapper` | **removed** — the extra wrapper element is gone |
|
|
1200
|
+
| `.bb-select-popover__search-spinner` | `.bb-select-popover__search-icon` (one element, spinner state included) |
|
|
1201
|
+
| `.bb-base-date-picker__header` (the tinted banner holding the month/year controls) | `.bb-calendar__header` (+ the inner `__nav-center`) — the banner is gone; the controls sit on the calendar surface. `__header-container` and `__header-cell` are unrelated and unchanged: they are the weekday row. |
|
|
1202
|
+
| `.bb-base-date-picker__control` / `__year-control` | `.bb-calendar__arrow` |
|
|
1203
|
+
| `.bb-base-date-picker__month-button` / `__year-button` | `.bb-calendar__heading-btn` (+ `--active`) |
|
|
1204
|
+
| `.bb-base-date-picker__weekday` | `.bb-calendar__cell-column-header` |
|
|
1205
|
+
| `.bb-base-date-picker__monthday` | `.bb-calendar__day` (+ the inner `__date-button`) |
|
|
1206
|
+
| `.bb-base-date-picker__year-container` | `.bb-calendar__year-selector` |
|
|
1207
|
+
| `.bb-base-date-picker__header--hidden`, `__selected-day-label` | **removed** |
|
|
1208
|
+
| `.bb-commabox-item--has-comma` | the select's comma list renders `.bb-select__comma`; BbTag's entry is `.bb-tag__comma` (was `.bb-commabox-item`); `--has-comma` is gone, and the chip cursor `.bb-chipsbox-item--focused` is `.bb-badge--highlighted` |
|
|
1209
|
+
| `.sr-only` — the visually-hidden helper every component uses for accessible names and status text (it shared Tailwind's class name) | `.bb-sr-only`. Only a selector reaching **into** a component (`.bb-table .sr-only`) breaks; your own Tailwind `sr-only` in your markup is untouched — which is why this one is deliberately **not** in the §8 grep: a hit there would be your code, not ours |
|
|
1210
|
+
| `.bb-base-date-picker__date--current` / `__date--highlighted` (the cursor day / a day of the displayed month) | `.bb-calendar__day--highlighted` is now the cursor day; the previous / next month's days carry `.bb-calendar__day--outside` instead — select the displayed month as `.bb-calendar__day:not(.bb-calendar__day--outside)` |
|
|
1211
|
+
| `#day` / `#append:day` slot scope `highlighted` (a day of the displayed month) | `outside`, inverted — `true` for a day of the previous / next month: `highlighted` → `!outside` |
|
|
908
1212
|
|
|
909
1213
|
The date **input**'s own field tree (`.bb-base-date-picker-input__field`,
|
|
910
1214
|
`__fields`, `__placeholder`, `__separator`, `__calendar-btn`) moved to a shared
|
|
@@ -913,12 +1217,16 @@ The date **input**'s own field tree (`.bb-base-date-picker-input__field`,
|
|
|
913
1217
|
|
|
914
1218
|
**Removed with no counterpart:** `.bb-base-dialog--compact`,
|
|
915
1219
|
`.bb-offcanvas--compact`, `.bb-base-textarea--compact` (compact now lives on
|
|
916
|
-
`.
|
|
917
|
-
`__inner-wrapper` / `__input-container` (the select activator
|
|
918
|
-
nearest hooks are `.bb-
|
|
919
|
-
`--shown` survives
|
|
920
|
-
|
|
921
|
-
|
|
1220
|
+
`.bb-field-input--compact`), `.bb-base-select--active` / `--compact` /
|
|
1221
|
+
`__inner-wrapper` / `__input-container` / `__text-input` (the select activator
|
|
1222
|
+
was rebuilt — nearest hooks are `.bb-select__activator`, `__value`,
|
|
1223
|
+
`__display-value`; `--shown` survives as `.bb-select__field--shown`. `__text-input` was v2's combobox typing
|
|
1224
|
+
field inside the activator; v3's activator is a `type="button"` overlay with no
|
|
1225
|
+
typable field, and typing moved into the panel's
|
|
1226
|
+
`.bb-select-popover__input` — restyle that instead, knowing it now sits
|
|
1227
|
+
in the popover, not the field), `.bb-base-rating__option--highlighted` (v3 uses
|
|
1228
|
+
`--filled` / `--empty`), `.bb-progress--horizontal` (`.bb-progress` and its
|
|
1229
|
+
`.bb-progress__bar` are the classes), `.bb-ratio` (component removed).
|
|
922
1230
|
|
|
923
1231
|
### 5.7 Renamed custom properties the library WRITES
|
|
924
1232
|
|
|
@@ -928,23 +1236,27 @@ nested-table column alignment. They all dropped the `bb-` prefix, and every one
|
|
|
928
1236
|
of them is consumed through `var(name, fallback)`, so a v2 name silently
|
|
929
1237
|
resolves to the fallback instead of failing.
|
|
930
1238
|
|
|
931
|
-
| v2 | v3
|
|
932
|
-
| ----------------------------------------------------- |
|
|
933
|
-
| `--bb-table-{id}-track-{key}` | `--table-{id}-track-{key}`
|
|
934
|
-
| `--bb-table-offset-start` / `-end` | `--offset-start` / `--offset-end`
|
|
935
|
-
| `--bb-table-offset-internal-start` / `-end` | `--offset-internal-start` / `--offset-internal-end`
|
|
936
|
-
| `--bb-table-fill` | `--fill`
|
|
937
|
-
| `--bb-table-natural-width` | `--natural-width`
|
|
938
|
-
| `--bb-select-popover-width` (on `.bb-select-popover`) | `--w` — and the supported path is now the `width` prop, not a CSS override
|
|
939
|
-
| `--bb-icon-dimensions-w` (on `.bb-icon`) | `--w`
|
|
940
|
-
| `--bb-breadcrumbs-flex-basis` / `-flex-grow` | `--flex-basis` / `--flex-grow`
|
|
941
|
-
| `--bb-picker-preview-color` | `--picker-preview-color`
|
|
1239
|
+
| v2 | v3 |
|
|
1240
|
+
| ----------------------------------------------------- | ----------------------------------------------------------------------------------------- |
|
|
1241
|
+
| `--bb-table-{id}-track-{key}` | `--table-{id}-track-{key}` |
|
|
1242
|
+
| `--bb-table-offset-start` / `-end` | `--offset-start` / `--offset-end` |
|
|
1243
|
+
| `--bb-table-offset-internal-start` / `-end` | `--offset-internal-start` / `--offset-internal-end` |
|
|
1244
|
+
| `--bb-table-fill` | **removed in 3.0.0** (briefly `--fill` in the betas; the grid substrate has no fill loop) |
|
|
1245
|
+
| `--bb-table-natural-width` | **removed in 3.0.0** (briefly `--natural-width` in the betas) |
|
|
1246
|
+
| `--bb-select-popover-width` (on `.bb-select-popover`) | `--w` — and the supported path is now the `width` prop, not a CSS override |
|
|
1247
|
+
| `--bb-icon-dimensions-w` (on `.bb-icon`) | `--w` |
|
|
1248
|
+
| `--bb-breadcrumbs-flex-basis` / `-flex-grow` | `--flex-basis` / `--flex-grow` |
|
|
1249
|
+
| `--bb-picker-preview-color` | `--picker-preview-color` |
|
|
942
1250
|
|
|
943
1251
|
A regex matching the old shape (`/--bb-table-[\w-]+-track/`) matches nothing in
|
|
944
1252
|
v3. Search your app for `--bb-table-`, `--bb-select-popover-`,
|
|
945
1253
|
`--bb-icon-dimensions-`, `--bb-breadcrumbs-` and `--bb-picker-` — none of those
|
|
946
1254
|
names exist in v3 and all of them fail quietly. `--available-height`,
|
|
947
|
-
`--inner-width
|
|
1255
|
+
`--inner-width`, `--overlay-min-height`, `--bb-table-fill` and
|
|
1256
|
+
`--bb-table-natural-width` were dropped outright — the last two because
|
|
1257
|
+
`BbTable` is a CSS grid in 3.0.0 and the fixed-layout self-correction they fed
|
|
1258
|
+
no longer exists (see
|
|
1259
|
+
[bb-table.md](./components/bb-table.md#--fill-and---natural-width-are-removed-not-renamed)).
|
|
948
1260
|
|
|
949
1261
|
If you re-published track variables by hand to align a deeply nested table,
|
|
950
1262
|
delete that code: `inherit-column-widths` takes a **table id**
|
|
@@ -962,7 +1274,11 @@ Nothing here fails to compile — these change what existing code does.
|
|
|
962
1274
|
(`BbSelect`, `BbSelectPopover`): re-clicking the selected option re-picks
|
|
963
1275
|
and closes; it used to emit `null` and empty the field. If your UX relied on
|
|
964
1276
|
click-to-clear, add `clearable` (or the `clear` slot callback). Multiple
|
|
965
|
-
mode still toggles.
|
|
1277
|
+
mode still toggles. **`BbDropdown` single selectable groups** follow the
|
|
1278
|
+
same rule since 3.0.0-beta.35: re-clicking the selected row keeps it (no
|
|
1279
|
+
`item:unselected`, the row's `onClick` still runs, a sole top-level group
|
|
1280
|
+
still closes). Put `clearable: true` on the group to get click-to-clear
|
|
1281
|
+
back.
|
|
966
1282
|
3. **`enforce-coherence` prunes on mount.** A seeded-but-invalid model value is
|
|
967
1283
|
now cleared on the first load, not on the next change. If "my value clears
|
|
968
1284
|
on load" appears after upgrading, your provider isn't resolving the current
|
|
@@ -986,15 +1302,32 @@ Nothing here fails to compile — these change what existing code does.
|
|
|
986
1302
|
a controlled model (`v-model:sort`), so nothing reorders on its own; the
|
|
987
1303
|
button appears and emits. Strip or rename the field at the `BbTable`
|
|
988
1304
|
boundary. The compile-time half of the same collision is in §5.5b.
|
|
989
|
-
7. **Dynamic slot names are
|
|
990
|
-
`
|
|
991
|
-
`
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
1305
|
+
7. **Dynamic slot names are kebab-case** via `slotKey(key)` (lodash
|
|
1306
|
+
`kebabCase` rules: words split at separators, camelCase humps and digits,
|
|
1307
|
+
lowercased, joined by `-`) in `BbTable`, `BbDropdown`, `BbBreadcrumbs`,
|
|
1308
|
+
`BbTree`, `BbTabs` and the date-picker day slots. v2's BbTable and
|
|
1309
|
+
BbDropdown folded non-word runs to `_` and squashed camelCase, so:
|
|
1310
|
+
`#order_history` → `#order-history`, `#placedat` (key `placedAt`) →
|
|
1311
|
+
`#placed-at`, `#address2` → `#address-2`. The day slots are named by the
|
|
1312
|
+
day's date as written (`#2024-03-15`), where v2 used its ISO timestamp.
|
|
1313
|
+
**⚠ silent**: a stale slot simply renders fallback content — run
|
|
1314
|
+
`npx bitboss-ui check`: where the keys are in the same file it names every
|
|
1315
|
+
rename (and `--fix` rewrites them); elsewhere it warns on squashed-looking
|
|
1316
|
+
names (`#createdat`). For keys with accents or other scripts, write
|
|
1317
|
+
`#[slotKey('…')]`. Three fixed slots were renamed as well, and `check --fix`
|
|
1318
|
+
rewrites them: `#no-data` → `#empty` (with the `noDataText` prop →
|
|
1319
|
+
`emptyText`), `#prepend-outer` / `#append-outer` → `#prepend:outer` /
|
|
1320
|
+
`#append:outer`, and BbTree's `#<value>-children` → `#<value>:children`.
|
|
1321
|
+
In development the components also say so in the console, once per name
|
|
1322
|
+
(`` `#no-data` was renamed to `#empty` on BbSelect (3.0.0-beta.41) ``), and
|
|
1323
|
+
BbTable / BbTabs name a key's old spelling (`#createdat` → `#created-at`);
|
|
1324
|
+
production builds carry none of it.
|
|
1325
|
+
`BbTabs` goes further: the label slot is `#label:<key>` (v2 `#label-<key>`),
|
|
1326
|
+
the URL query value is the kebab slug (`?tab=In%20Review` →
|
|
1327
|
+
`?tab=in-review`; old `?tab=in_review` links from a v3 beta still land and
|
|
1328
|
+
are rewritten in place — update deep links and server code, see the BbTabs
|
|
1329
|
+
guide § URL values changed in 3.0.0-beta.41), and tab/panel DOM ids follow.
|
|
1330
|
+
Only `v-model` / item `key` stay raw.
|
|
998
1331
|
8. **Dialogs, popovers, dropdowns and selects open as bottom sheets on mobile**
|
|
999
1332
|
by default (`adaptive`, default `true`). Set `adaptive: false` in the
|
|
1000
1333
|
plugin, or per component, for v2-like floating behavior.
|
|
@@ -1013,6 +1346,172 @@ Nothing here fails to compile — these change what existing code does.
|
|
|
1013
1346
|
branch's children are now `inert` (out of the Tab order). Tests or CSS
|
|
1014
1347
|
keyed on the removed roles match nothing — see
|
|
1015
1348
|
[bb-tree.md](./components/bb-tree.md).
|
|
1349
|
+
13. **`BbTable` is a CSS grid, not a `<table>`.** Column widths hold their
|
|
1350
|
+
overflow threshold, wrap floor and frozen widths exactly, but leftover
|
|
1351
|
+
space is shared equally between auto columns rather than proportionally
|
|
1352
|
+
to content, and a few table-only tricks stop working (`max-width: 0` for
|
|
1353
|
+
ellipsis collapses the cell). Copying rows into a spreadsheet pastes one
|
|
1354
|
+
value per line, and a printed table no longer repeats its header on each
|
|
1355
|
+
page. `#thead`/`#tbody`/`#tfoot` take `<div role="row">` rows, never
|
|
1356
|
+
`<tr>`. Requires subgrid (Chrome/Edge 117, Firefox 71, Safari 16) — no
|
|
1357
|
+
fallback. Full detail and the selector translation in
|
|
1358
|
+
[bb-table.md](./components/bb-table.md#the-table-is-a-css-grid-not-a-table-v3-beta-2026-08-26).
|
|
1359
|
+
14. **Short selects open without a search field.** The select family
|
|
1360
|
+
(`BbSelect` / `BbSelectPopover`) hides the search field under
|
|
1361
|
+
`autoDisableWritingThreshold` (`6`) options by default: an unset
|
|
1362
|
+
`disable-writing` means `'auto'`, and an **array** `items` with fewer
|
|
1363
|
+
options than the threshold opens with no field — decided at open, held
|
|
1364
|
+
while open. Provider `items` and a select that listens to `option:add`
|
|
1365
|
+
keep the field; an explicit `disable-writing` (any value) still wins.
|
|
1366
|
+
⚠ silent: nothing fails, the field is just gone from five-option selects.
|
|
1367
|
+
Set `autoDisableWritingThreshold: 0` in the plugin to keep every search
|
|
1368
|
+
field, and delete any `:disable-writing="items.length < 6"` you wrote to
|
|
1369
|
+
get this by hand.
|
|
1370
|
+
15. **A failed `BbForm` submit moves focus** (`bitboss-ui/validated`, since
|
|
1371
|
+
3.0.0-beta.41): to the first invalid field that is on screen, in page
|
|
1372
|
+
order, and the form emits `invalid` with `{ errors, values }`. It used to
|
|
1373
|
+
leave focus where it was, usually on the submit button. If your
|
|
1374
|
+
`@submit`-adjacent code focused the first error itself, delete it; if a
|
|
1375
|
+
page moved focus somewhere else on failure (an error summary), do it in
|
|
1376
|
+
`@invalid`: a handler that moves focus itself keeps it. See
|
|
1377
|
+
`BbForm.guide.md` § A failed submit focuses the first invalid field.
|
|
1378
|
+
16. **`bitboss-ui/validated` needs vee-validate `>=4.10.0 <5`** (since
|
|
1379
|
+
3.0.0-beta.41; it was `>=4.0.0`). `schema` needs 4.8 and
|
|
1380
|
+
`keep-values-on-unmount` as a ref needs 4.10; on an older 4.x they
|
|
1381
|
+
silently did nothing. vee-validate 5 is not tested yet. npm now reports
|
|
1382
|
+
an older vee-validate at install time: upgrade it to the latest 4.x
|
|
1383
|
+
(`npm i vee-validate@^4.15`). Apps that don't use `bitboss-ui/validated`
|
|
1384
|
+
are not affected (the peer is optional).
|
|
1385
|
+
17. **A picker's activator is named by the label AND what it shows**
|
|
1386
|
+
(`BbDatePicker`, `BbTimePicker`, `BbColorPalette`, since 3.0.0-beta.41):
|
|
1387
|
+
the `label` used to become the activator's `aria-label`, which hid the
|
|
1388
|
+
visible value ("Due date" for a button showing "12 Sep"). Now the
|
|
1389
|
+
activator gets `aria-labelledby` = a hidden label span, then itself, so it
|
|
1390
|
+
reads "Due date 12 Sep". The `activator` slot's `props` carry
|
|
1391
|
+
`aria-labelledby` instead of `aria-label`: keep `v-bind="props"`; code
|
|
1392
|
+
that read `props['aria-label']` reads the `label` you passed instead.
|
|
1393
|
+
Tests that asserted the activator's `aria-label` should query by role and
|
|
1394
|
+
name.
|
|
1395
|
+
18. **A validated field's path is its `name`** (`bitboss-ui/validated`,
|
|
1396
|
+
since 3.0.0-beta.41). A field that has a `name` now validates, submits
|
|
1397
|
+
and receives schema errors under it, read as a path: `address[city]` is
|
|
1398
|
+
`address.city`, `users[0][name]` is `users.0.name`, `tags[]` is `tags`.
|
|
1399
|
+
Before, a field without `vid` used its slugged label even when it had a
|
|
1400
|
+
`name`, so **⚠ silent**: `@submit` keys, `useBbFormContext(id).values` /
|
|
1401
|
+
`errors` and schema paths move from `fullname` to whatever `name` says.
|
|
1402
|
+
Without a `name` nothing changes (the slugged label). A field with
|
|
1403
|
+
neither a `label` nor a `name` throws "give the field a `label` or a
|
|
1404
|
+
`name`". Messages name the field by `validation-label`, else its label,
|
|
1405
|
+
else "This field", never the path. `npx bitboss-ui check` flags two
|
|
1406
|
+
fields in one `<BbForm>` that land on the same path.
|
|
1407
|
+
19. **`useBbFormContext(id).errors` holds every message, as an array**
|
|
1408
|
+
(`bitboss-ui/validated`, since 3.0.0-beta.41): `{ email: ['Taken.'] }`,
|
|
1409
|
+
where it was `{ email: 'Taken.' }`. Read the first one as
|
|
1410
|
+
`errors.email?.[0]`. It lists only fields the form knows (`fields`); a
|
|
1411
|
+
server path with no field is in the new `unmatchedErrors` instead, never
|
|
1412
|
+
in both, so `{ ...errors, ...unmatchedErrors }` is every error. **⚠
|
|
1413
|
+
silent** in a template: `{{ errors.email }}` now prints the array. The
|
|
1414
|
+
`invalid` event (new in this beta) carries the same array shape.
|
|
1415
|
+
20. **The built-in strings are English by default** (since 3.0.0-beta.41;
|
|
1416
|
+
the default `locale` was `'it'`). Italian apps: set `locale: 'it'` in the
|
|
1417
|
+
build plugin, `bitbossUi({ locale: 'it' })` or, in Nuxt,
|
|
1418
|
+
`bitboss: { locale: 'it' }`. Without it, confirm buttons, empty and
|
|
1419
|
+
loading text, close and clear labels, the select-all text and the date
|
|
1420
|
+
pickers' field order (month first) and labels are English, and the bundle
|
|
1421
|
+
carries only the `en` dictionary. Your own Italian copy (labels,
|
|
1422
|
+
placeholders, titles) is not affected.
|
|
1423
|
+
21. **`bitboss-ui/validated` slot props are typed** (since 3.0.0-beta.41;
|
|
1424
|
+
they were `any`). Every validated component's slots now have the same
|
|
1425
|
+
prop types as its core twin, so `vue-tsc` rejects code that misused
|
|
1426
|
+
them. Two real cases:
|
|
1427
|
+
- `<button type="submit" @click="validate">` inside `<BbForm>`: the
|
|
1428
|
+
click's `PointerEvent` is passed to `validate(opts?)` as its options
|
|
1429
|
+
(TS2345). Write `@click="validate()"`, or let `type="submit"` submit
|
|
1430
|
+
the form.
|
|
1431
|
+
- `<template #default="{ isSubmitting, setFieldError }">`: `setFieldError`
|
|
1432
|
+
is not a `BbForm` slot prop, so it was always `undefined` (TS2339). Use
|
|
1433
|
+
the slot's `setErrors` instead, or drop the name.
|
|
1434
|
+
|
|
1435
|
+
Runtime behaviour does not change: only compile errors that were hidden
|
|
1436
|
+
appear.
|
|
1437
|
+
|
|
1438
|
+
22. **A `keyboard-navigation` `BbTable` is an ARIA grid** (since
|
|
1439
|
+
3.0.0-beta.41). It was a `role="table"` whose rows took arrow keys, which
|
|
1440
|
+
promised assistive tech nothing. Now the root is `role="grid"` (or
|
|
1441
|
+
`role="treegrid"` when an `#expand` slot is present), the body cells are
|
|
1442
|
+
`role="gridcell"`, and focus moves over CELLS (the APG data grid): the whole
|
|
1443
|
+
table is one tab stop, ←/→ move between cells, Home/End go to the row's
|
|
1444
|
+
ends, Ctrl+Home/End to the corners, ↑ from the first row reaches the header.
|
|
1445
|
+
Enter/Space still activate the row (highlight + `click:row`). Links and
|
|
1446
|
+
buttons inside cells leave the Tab order (Enter or F2 reaches them, Escape
|
|
1447
|
+
comes back). A treegrid's rows take focus too (→ expands, ← collapses).
|
|
1448
|
+
Selectable rows carry `aria-selected`. **⚠ silent** for CSS and tests:
|
|
1449
|
+
`[role=cell]` no longer matches those tables' body cells — write
|
|
1450
|
+
`:is([role=cell], [role=gridcell])` or use `.bb-table__cell`; a focus ring
|
|
1451
|
+
styled on `.bb-table__row:focus-visible` now shows only on a treegrid (a
|
|
1452
|
+
grid focuses cells: `.bb-table__cell:focus-visible`); tests that pressed
|
|
1453
|
+
arrows on a row or asserted `getByRole('table')` / `document.activeElement`
|
|
1454
|
+
= the row query `getByRole('grid')` and the focused cell. Tables without
|
|
1455
|
+
`keyboard-navigation` are unchanged. See `BbTable.guide.md` § Keyboard
|
|
1456
|
+
navigation and row events.
|
|
1457
|
+
23. **`setErrors` moves focus** (since 3.0.0-beta.41). A server's errors now
|
|
1458
|
+
focus the first failing field on screen, as a failed client submit
|
|
1459
|
+
already did, while focus is still the form's (inside it, or on the page
|
|
1460
|
+
after a submit). A page that moved focus itself right after `setErrors`
|
|
1461
|
+
keeps its own; pass `setErrors(map, { focus: false })` to opt out. See
|
|
1462
|
+
`BbForm.guide.md` § A failed submit focuses the first invalid field.
|
|
1463
|
+
|
|
1464
|
+
24. **`validateOn` is now `validation-mode`** (`bitboss-ui/validated`, since
|
|
1465
|
+
3.0.0-beta.41). The array of events became one mode: `aggressive` (every
|
|
1466
|
+
change), `balanced` (on leave, then every change while the field shows an
|
|
1467
|
+
error), `lazy` (on leave only), `submit-only` or `submit-live`. The old
|
|
1468
|
+
defaults (`['blur']`, `['inactive']`, a checkbox's or switch's
|
|
1469
|
+
`['update:modelValue', 'change', 'blur']`) all behave as `balanced`, the new
|
|
1470
|
+
default, so delete them; `['update:modelValue']` on a text field is
|
|
1471
|
+
`validation-mode="aggressive"`. **⚠ silent**: a leftover `:validate-on`
|
|
1472
|
+
falls through as an unknown attribute and does nothing. Set the mode once
|
|
1473
|
+
on `<BbForm validation-mode="…">`, or app-wide with
|
|
1474
|
+
`formControls: { validationMode }`; a field's own still wins. See
|
|
1475
|
+
`ai/guides/validated-forms.md` § `validationMode`.
|
|
1476
|
+
|
|
1477
|
+
25. **`v-for` rows follow your array; `removeField` runs after the render**
|
|
1478
|
+
(`bitboss-ui/validated`, since 3.0.0-beta.41). A row keyed by id that
|
|
1479
|
+
moved up after a delete used to show, submit and **write into your
|
|
1480
|
+
`v-model`** the value of the row it replaced; now every row keeps its own
|
|
1481
|
+
value and `@submit` gets exactly the rows on the page. `removeField(path)`
|
|
1482
|
+
applies after the re-render: pass the row you deleted
|
|
1483
|
+
(``form.removeField(`lines.${i}`)`` right after your `splice`, or later).
|
|
1484
|
+
A path a field on the page still owns is left alone (it used to be
|
|
1485
|
+
cleared). The old "index that fell off the end" call still works: that
|
|
1486
|
+
path is unowned, so it goes. A `useFieldArray` workaround can go. See
|
|
1487
|
+
`BbForm.guide.md` § Rows (`v-for`).
|
|
1488
|
+
|
|
1489
|
+
26. **`bitboss-ui/validated` is retired** (since 3.0.0-beta.41). `BbForm`,
|
|
1490
|
+
`useBbFormContext`, the form types and the form controls come from
|
|
1491
|
+
`bitboss-ui`. `npx bitboss-ui check --fix` rewrites the imports in `.vue`
|
|
1492
|
+
files (other files: change `'bitboss-ui/validated'` to `'bitboss-ui'`).
|
|
1493
|
+
`useValidatedField` is gone: for a control of your own, use
|
|
1494
|
+
`useBbFormField(formId, { name, validationLabel, rules })`.
|
|
1495
|
+
27. **Form controls join the `BbForm` they are inside** (since
|
|
1496
|
+
3.0.0-beta.41), keyed by `name`, else their label: their values are
|
|
1497
|
+
submitted, reset, count toward `dirty`, and are validated if they have
|
|
1498
|
+
rules. **⚠ silent**: a plain control you had inside a form (a filter, a
|
|
1499
|
+
"show advanced" switch) is now submitted too; give it `formless`. A form
|
|
1500
|
+
control with neither `name` nor label inside a form throws (a
|
|
1501
|
+
`BbDropzone` needs a `name`). Rows in a `v-for` need a per-row `:name`
|
|
1502
|
+
(`check` reports `row-without-name`).
|
|
1503
|
+
28. **Outside a `BbForm` a form control is plain** (since 3.0.0-beta.41): a
|
|
1504
|
+
`bitboss-ui/validated` field used to validate its `rules` on its own; now
|
|
1505
|
+
rules run only inside a form. Wrap the fields in `<BbForm>`.
|
|
1506
|
+
29. **Nuxt `autoImport.validated` is removed** (since 3.0.0-beta.41):
|
|
1507
|
+
`autoImport` already registers `BbForm`, `useBbFormContext` and
|
|
1508
|
+
`useBbFormField`. Delete the option.
|
|
1509
|
+
30. **`ValidatedFieldProps` is renamed `FormFieldProps`** (since
|
|
1510
|
+
3.0.0-beta.41): the form props (`rules`, `validationMode`,
|
|
1511
|
+
`validationLabel`, `formless`) are part of each control's own props type
|
|
1512
|
+
(`BbTextInputProps` has them), and `modelValue` is optional on the 16
|
|
1513
|
+
form controls (inside a `BbForm` the form holds the value). Rename the
|
|
1514
|
+
import; there is no wrapper component in between any more.
|
|
1016
1515
|
|
|
1017
1516
|
## 7. Class overrides → variants
|
|
1018
1517
|
|
|
@@ -1046,8 +1545,12 @@ screenshot; do not assume. Two consequences before you start:
|
|
|
1046
1545
|
`variant="none"`; it is the one value that emits no variant class.
|
|
1047
1546
|
- **A name that collides with a v3 built-in is the dangerous case, not the easy
|
|
1048
1547
|
one.** If your app owned the look of `warning` / `destructive` / `secondary`,
|
|
1049
|
-
converting to the same-named `variant` hands that look to the library
|
|
1050
|
-
|
|
1548
|
+
converting to the same-named `variant` hands that look to the library — and
|
|
1549
|
+
registering the name does **not** take it back: registration is type-only
|
|
1550
|
+
(§4), the built-in skin stays in `styles.css`. Keep your look by winning the
|
|
1551
|
+
cascade over the library's skin rules — author at block+modifier and load
|
|
1552
|
+
after `styles.css` (§4 case 2 has the specificity detail) — or convert to a
|
|
1553
|
+
non-colliding custom name.
|
|
1051
1554
|
|
|
1052
1555
|
### Finding them
|
|
1053
1556
|
|
|
@@ -1067,17 +1570,17 @@ rg -n 'class="bb-(button|badge|alert|toast-message|tooltip|indicator)\b' --type
|
|
|
1067
1570
|
|
|
1068
1571
|
### Correcting them
|
|
1069
1572
|
|
|
1070
|
-
| Found | Rewrite as
|
|
1071
|
-
| --------------------------------------------------------------------------------------------------- |
|
|
1072
|
-
| `<BbButton class="bb-button--outline">` | `<BbButton variant="outline">` (same for `secondary`, `ghost`, `destructive`, `link`)
|
|
1073
|
-
| `<BbAlert class="bb-alert--warning">` / v2 `theme="warning"` | `<BbAlert variant="warning">`
|
|
1074
|
-
| `class="bb-badge bb-badge--secondary"` on a `<span>` | `<BbBadge variant="secondary">` — the real component, not markup cosplay
|
|
1075
|
-
| `bb-toast-message--success` styling / v2 `theme` on toasts | `toast({ variant: 'success' })`
|
|
1076
|
-
| `bb-tooltip--destructive` | `<BbTooltip variant="destructive">` / `v-bb-tooltip="{ text, variant: 'destructive' }"`
|
|
1077
|
-
| A **custom** modifier (`bb-button--brand`, any name not in section 4's table) | Register it: `buttonVariants: ['brand']` in the plugin, keep your CSS, pass `variant="brand"`.
|
|
1078
|
-
| A modifier your app **styled itself**, whatever its name | Decide before you convert: accept v3's built-in look and delete your CSS, or
|
|
1079
|
-
| A **state** modifier that stacks on a variant (`bb-button--pressed` alongside `bb-button--outline`) | Not convertible — `variant` holds exactly one value. Keep it a class and rename it out of `bb-*` (`app-button--pressed`). If it marks a real toggle, `v-model` on `BbButton` owns the state: it sets `aria-pressed` and emits `bb-button--active`, which the library deliberately leaves unstyled for you.
|
|
1080
|
-
| A class that overrides _layout_, not look (widths, margins) | Leave it — classes remain the right tool for layout; variants own _appearance semantics_.
|
|
1573
|
+
| Found | Rewrite as |
|
|
1574
|
+
| --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1575
|
+
| `<BbButton class="bb-button--outline">` | `<BbButton variant="outline">` (same for `secondary`, `ghost`, `destructive`, `link`) |
|
|
1576
|
+
| `<BbAlert class="bb-alert--warning">` / v2 `theme="warning"` | `<BbAlert variant="warning">` |
|
|
1577
|
+
| `class="bb-badge bb-badge--secondary"` on a `<span>` | `<BbBadge variant="secondary">` — the real component, not markup cosplay |
|
|
1578
|
+
| `bb-toast-message--success` styling / v2 `theme` on toasts | `toast({ variant: 'success', icon: 'lucide:circle-check' })` |
|
|
1579
|
+
| `bb-tooltip--destructive` | `<BbTooltip variant="destructive">` / `v-bb-tooltip="{ text, variant: 'destructive' }"` |
|
|
1580
|
+
| A **custom** modifier (`bb-button--brand`, any name not in section 4's table) | Register it: `buttonVariants: ['brand']` in the plugin, keep your CSS, pass `variant="brand"`. |
|
|
1581
|
+
| A modifier your app **styled itself**, whatever its name | Decide before you convert: accept v3's built-in look and delete your CSS, or keep yours. Keeping it is free for a non-built-in name (register it, done — there is no library rule to fight); for a built-in name registering only satisfies the type-check, and your rules must also win the cascade over the library's skin (§4, case 2). Converting silently does the former. |
|
|
1582
|
+
| A **state** modifier that stacks on a variant (`bb-button--pressed` alongside `bb-button--outline`) | Not convertible — `variant` holds exactly one value. Keep it a class and rename it out of `bb-*` (`app-button--pressed`). If it marks a real toggle, `v-model` on `BbButton` owns the state: it sets `aria-pressed` and emits `bb-button--active`, which the library deliberately leaves unstyled for you. |
|
|
1583
|
+
| A class that overrides _layout_, not look (widths, margins) | Leave it — classes remain the right tool for layout; variants own _appearance semantics_. |
|
|
1081
1584
|
|
|
1082
1585
|
Rule of thumb: if the class name encodes a **meaning** (state, emphasis,
|
|
1083
1586
|
severity), it should be a variant; if it encodes **geometry**, it stays a
|
|
@@ -1113,11 +1616,13 @@ rg -n 'disabled-while-loading|disabledWhileLoading' # removed
|
|
|
1113
1616
|
rg -n 'animate-x|animate-y|animateX|animateY' # → disableAnimate*, now default-on
|
|
1114
1617
|
rg -n 'thumb-translate|thumbTranslate' # → disable-thumb-translate
|
|
1115
1618
|
rg -n ':flip=|flip="' # → disable-flip on palette/select-popover
|
|
1116
|
-
rg -n 'hide-arrow|show-arrow|arrow-padding|hideArrow|showArrow|arrowPadding' # removed
|
|
1619
|
+
rg -n 'hide-arrow|show-arrow|arrow-padding|hideArrow|showArrow|arrowPadding' # removed EVERYWHERE EXCEPT BbTooltip, which keeps hide-arrow + arrow-padding — hits on a tooltip are fine
|
|
1117
1620
|
rg -n '<BbChip' # component removed → BbBadge clearable
|
|
1118
1621
|
rg -n '<BbBadge' # v2 badges are v3 indicators — review each
|
|
1119
1622
|
rg -n '<BbTab\b' # → BbTabs (\b so a tag name alone on its line still matches, and <BbTabs does not)
|
|
1120
1623
|
rg -n '#label-' # BbTabs label slot → #label:<slotKey>
|
|
1624
|
+
rg -n '#no-data|#(prepend|append)-outer|#[a-z0-9_-]+-children' # → #empty, #prepend:outer / #append:outer, #<value>:children (check --fix rewrites them)
|
|
1625
|
+
rg -n '#[a-z]+_[a-z0-9_]+|\?tab=[a-z0-9]+_' # underscore slot names / tab slugs → kebab-case (`npx bitboss-ui check` names each)
|
|
1121
1626
|
rg -n 'reverse' --type ts --type js # BbRadio/BbSwitch default flipped
|
|
1122
1627
|
rg -n 'timeout' --type vue # BbTooltip → delay (BbAvatar keeps timeout); no ':' so static attrs match too
|
|
1123
1628
|
rg -nU '<BbIcon[^>]*type=' # → icon=, and prefix your own icons `local:` (bb-icon.md). -U so a multi-line tag matches
|
|
@@ -1154,11 +1659,94 @@ rg -n 'setConfig' # only locale survives at runtime
|
|
|
1154
1659
|
```bash
|
|
1155
1660
|
rg -n -- '--bb-(contrasting|hint|icon-color|primary-(base|dark)|panel-(light|dark|disabled)|border-(light|dark|hover)|text-(light|dark|secondary|tertiary)|input-(color|compact-|font-size|inner-h|prefix(-px)?([^-a-zA-Z0-9]|$))|label-(size|compact-spacing-y)|overlay-(color|opacity|z-index)|dialog-|button-|badge-|checkbox-w|radio-space|switch-|rating-size|base-rating-spacing|slider-|table-|select-option-|select-popover-|progress-track|toast-m|breadcrumbs-|picker-|icon-dimensions-)' # every retired v2 token — v3 declares none of them (sections 3 and 5.7)
|
|
1156
1661
|
rg -n -- '--bb-ring-opacity' # survives by name; every value must now carry a % (section 3)
|
|
1157
|
-
rg -n 'bb-base-dialog|bb-tab__|bb-tab--|bb-cr-container|bb-common-input-outer-container|bb-common-input-inner-container|bb-base-input-
|
|
1158
|
-
rg -n 'bb-color-
|
|
1662
|
+
rg -n 'bb-base-dialog|bb-tab__|bb-tab--|bb-cr-container|bb-common-input-outer-container|bb-common-input-inner-container|common-input-wrapper|bb-base-input-container|bb-base-(checkbox|radio|switch)-container|bb-base-(checkbox|radio|switch)([^-]|$)|bb-base-(text-input|textarea|number-input|select|tag|rating|slider|color-input|color-palette|date-picker-input)|bb-base-date-picker|bb-base-time-picker-input|bb-base-time-selector|bb-base-(checkbox|radio|switch)-group|content__btn|bb-tree-row|bb-tree-main-content|bb-confirm__no|bb-dropdown__wrapper|bb-offcanvas__close|bb-popover__close|bb-ratio' # renamed or deleted CSS blocks — nothing in v3 emits any of these (§5.6); every bb-base-* field block went in the flatten, only bb-base-button and the three -icon glyphs remain
|
|
1663
|
+
rg -n 'bb-color-palette([^_-]|$)' # the v2 picker root → .bb-color-palette__panel; every .bb-color-palette__* element kept its v2 name
|
|
1664
|
+
rg -n 'bb-progress-bar' # the v2 progress bar → .bb-progress__bar (section 5.6)
|
|
1665
|
+
rg -n 'bb-date-picker__(grid|body|controls|nav-|heading-btn|content|days-selector|month|header-|week|date|button-menu|menu-|year-selector)' # INERT since the calendar became BbCalendar (after 3.0.0-beta.28): the month grid, its panels and its day cells are `.bb-calendar__*` now — same element names, new block. Only `.bb-date-picker__panel` (+ `--sheet` / `--datetime`) and `.bb-date-picker` are still the picker's. Prefer `pt:day` / `pt:day-button` / `pt:header` / `pt:arrow` / `pt:month` / `pt:year` / `pt:cell-column-header` over any of these classes
|
|
1666
|
+
rg -n '\b(table|thead|tbody|tfoot|caption|colgroup|col|tr|th|td)\b' --type css --type vue # element selectors aimed at BbTable (`.bb-table table`, `:deep(> table > tbody …)`, a global `td { padding }`, `.prose table`) — BbTable is a div grid in v3, none of them reach it; translate per bb-table.md § Selector translation. Expect noise from `<table>` markup of your own and from words in comments — judge each hit
|
|
1159
1667
|
rg -n 'bb-tabs--' # v3's own modifiers are --horizontal --vertical --block --compact --disabled; anything else is app-minted, and a hand-rolled full-width tab list is now <BbTabs block>
|
|
1668
|
+
rg -n -- '--(text-color|bg-color|default-icon-color|surface-bg|surface-text|surface-border|main-color|muted-color)' # INERT paint locals — renamed. Valid CSS that nothing reads, so the component silently reverts to its library default. Mapping table below
|
|
1669
|
+
rg -n -- '--pill-(bg|border|shadow)' # INERT on .bb-tabs-list — the sliding pill is the INDICATOR now: --indicator-bg / --indicator-border / --indicator-shadow (renamed after 3.0.0-beta.28). A hand-built underline (transparent pill + inset shadow) is `variant="line"`
|
|
1670
|
+
rg -n -- '--color' # INERT everywhere — the name is retired. On a surface (.bb-badge / .bb-indicator / .bb-alert / .bb-toast__panel / .bb-avatar) it is now --fg; on a glyph (.bb-base-checkbox-icon / -radio-icon / -switch-icon, .bb-slider__body, .bb-rating__stars, .bb-error-icon, .bb-warning-icon) it is --accent
|
|
1671
|
+
rg -n -- '--(border-width|font-size|padding-inline|pad-[xy]|padding-[xy]|page-radius|ring|shell-[a-z-]+|padding)\s*:' # INERT after 3.0.0-beta.33 — one short spelling per local: --bw --fs --px --py --page-r; the ring is --ring-color + --ring-size; BbSlider's --shell-* became --bg --bg-disabled --bw --border-color --border-focus --r --elev --ring-size --px (table below). A hit on YOUR OWN element (not a .bb-* root) is not affected
|
|
1672
|
+
rg -n -- '--radius\s*:' --type css --type vue # a `--radius` set ON a component root (.bb-badge / .bb-indicator / .bb-base-switch-icon / .bb-toast__panel / .bb-slider__body) is INERT — the radius local is --r on all five, as on .bb-button. Your app's own --radius (shadcn's global) is not a hit: it never was a library token, and it is exactly why the local moved (a `--radius: var(--radius)` on the component was a self-reference — invalid, corners at 0)
|
|
1160
1673
|
```
|
|
1161
1674
|
|
|
1675
|
+
**Paint-local mapping.** Every surface component names its paint the same way
|
|
1676
|
+
now: `--bg` is the background and `--fg` is the text on it. These are the
|
|
1677
|
+
per-element overrides you set on the component's own class — not `--bb-*`
|
|
1678
|
+
theme tokens.
|
|
1679
|
+
|
|
1680
|
+
| Component | v2 / early-v3 local | v3 |
|
|
1681
|
+
| ----------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- | --------------------------------------------------------------------------------------------------- |
|
|
1682
|
+
| `.bb-badge`, `.bb-indicator` | `--color` | `--fg` |
|
|
1683
|
+
| `.bb-avatar` | `--bg-color` | `--bg` |
|
|
1684
|
+
| `.bb-avatar` | `--text-color` | `--fg` |
|
|
1685
|
+
| `.bb-avatar` | `--default-icon-color` | removed — the glyph mixes `--fg`/`--bg` |
|
|
1686
|
+
| `.bb-alert` | `--main-color` | `--fg` |
|
|
1687
|
+
| `.bb-alert` | `--muted-color` | `--fg-muted` |
|
|
1688
|
+
| `.bb-toast-message` (now `.bb-toast__panel`) | `--surface-bg` | `--bg` |
|
|
1689
|
+
| `.bb-toast-message` (now `.bb-toast__panel`) | `--surface-text` | `--fg` |
|
|
1690
|
+
| `.bb-toast-message` (now `.bb-toast__panel`) | `--surface-border` | `--border-color` |
|
|
1691
|
+
| `.bb-base-switch-icon` | `--bg-color` | `--bg` |
|
|
1692
|
+
| the glyph components | `--color` | `--accent` |
|
|
1693
|
+
| `.bb-badge` (and its size modifiers), `.bb-indicator`, `.bb-base-switch-icon`, `.bb-toast-message` (now `.bb-toast__panel`), `.bb-slider__body` | `--radius` | `--r` — the corner radius, named as on `.bb-button` and `.bb-base-checkbox-icon` (2026-09-17, beta) |
|
|
1694
|
+
| `.bb-tabs-list` | `--pill-bg` | `--indicator-bg` |
|
|
1695
|
+
| `.bb-tabs-list` | `--pill-border` | `--indicator-border` |
|
|
1696
|
+
| `.bb-tabs-list` | `--pill-shadow` | `--indicator-shadow` |
|
|
1697
|
+
|
|
1698
|
+
**Why `--radius` went.** A component local shadows a custom property of the
|
|
1699
|
+
same name for the component's whole subtree, and `--radius` is the global
|
|
1700
|
+
radius in every shadcn theme. The natural alignment,
|
|
1701
|
+
`.bb-toast__panel { --radius: var(--radius) }`, is a self-reference on the
|
|
1702
|
+
declaring element — a cycle, so the value is invalid and the corners collapse
|
|
1703
|
+
to 0. Write `.bb-toast__panel { --r: var(--radius) }` instead; the two names
|
|
1704
|
+
differ, so the app's `--radius` resolves normally. The same trap holds for
|
|
1705
|
+
`--accent`, which keeps its name (it is a documented family name): map it from
|
|
1706
|
+
a differently named app variable, never from one of the same name. The ring
|
|
1707
|
+
left that list after 3.0.0-beta.33: its locals are `--ring-color` +
|
|
1708
|
+
`--ring-size`, so shadcn's `--ring` is safe to read
|
|
1709
|
+
(`.bb-button { --ring-color: var(--ring) }`).
|
|
1710
|
+
|
|
1711
|
+
**Short spellings (after 3.0.0-beta.33).** Every component local now uses one
|
|
1712
|
+
short spelling per concept, the one `.bb-button` always used: `--bw`, `--fs`,
|
|
1713
|
+
`--px`, `--py`, `--r`. The long spellings below are inert. BbSlider's
|
|
1714
|
+
`--shell-*` set became the field look locals the input shells use.
|
|
1715
|
+
|
|
1716
|
+
| Component | beta.33 and earlier | now |
|
|
1717
|
+
| ------------------------------------------------------------------------ | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------- |
|
|
1718
|
+
| `.bb-badge`, `.bb-indicator` | `--border-width` | `--bw` |
|
|
1719
|
+
| `.bb-badge`, `.bb-indicator` | `--font-size` | `--fs` |
|
|
1720
|
+
| `.bb-badge`, `.bb-indicator`, `.bb-dropdown__*`, `.bb-select-popover__*` | `--padding-inline` | `--px` |
|
|
1721
|
+
| BbCalendar / BbDatePicker panels | `--pad-x` / `--pad-y` | `--px` / `--py` |
|
|
1722
|
+
| CommonTimeSelector (time picker columns) | `--pad-y` | `--py` |
|
|
1723
|
+
| `.bb-table` | `--padding-x` / `--padding-y` (v2 too) | `--px` / `--py` |
|
|
1724
|
+
| `.bb-pagination` | `--page-radius` | `--page-r` |
|
|
1725
|
+
| `.bb-button`, `.bb-badge` | `--ring` (a colour) | `--ring-color`, plus `--ring-size` |
|
|
1726
|
+
| `.bb-slider__body` | `--shell-bg` / `--shell-disabled-bg` | `--bg` / `--bg-disabled` |
|
|
1727
|
+
| `.bb-slider__body` | `--shell-border-width` / `--shell-border-color` / `--shell-focus-border` | `--bw` / `--border-color` / `--border-focus` |
|
|
1728
|
+
| `.bb-slider__body` | `--shell-radius` | `--r` (shared with the rail) |
|
|
1729
|
+
| `.bb-slider__body` | `--shell-shadow` / `--shell-focus-ring` | `--elev` + `--ring-size` / `--ring-color` |
|
|
1730
|
+
| `.bb-slider__body` | `--shell-px` / `--padding` | `--px` / `--py` |
|
|
1731
|
+
| `.bb-progress` | `--fill` (the bar colour) | `--accent`, the slider's word; new `--track-color` (the track) and `--r` (both radii) |
|
|
1732
|
+
|
|
1733
|
+
The tab strip's rows are a beta-to-beta rename (shipped ≤ 3.0.0-beta.28, renamed in the next prerelease):
|
|
1734
|
+
the sliding pill became the **indicator** when `variant` arrived, because the
|
|
1735
|
+
same element is a 2px bar under `variant="line"`. If you built an underline by
|
|
1736
|
+
hand — `--pill-bg: transparent` plus an inset `--pill-shadow` — replace the
|
|
1737
|
+
whole block with `variant="line"` and the label tokens (`--active-fg`,
|
|
1738
|
+
`--active-fw`); see bb-tabs.md.
|
|
1739
|
+
|
|
1740
|
+
`.bb-button` gained the same vocabulary rather than renaming into it: it now
|
|
1741
|
+
reads `--bg`, `--bg-hover`, `--bg-pressed`, `--fg`, `--border-color` and
|
|
1742
|
+
`--ring-color`, which is what makes a one-line re-skin possible (section 3).
|
|
1743
|
+
|
|
1744
|
+
The glyph components — the checkbox, radio and switch icons, the slider, the
|
|
1745
|
+
rating, and the error and warning icons — are not surfaces: their local is the
|
|
1746
|
+
**accent** on a mark, not the text on a background. They name it `--accent`, so
|
|
1747
|
+
`--color` means nothing anywhere in the library now and the grep above is a
|
|
1748
|
+
blind rename.
|
|
1749
|
+
|
|
1162
1750
|
⚠ That first pattern is exact on purpose, and the near-misses are the point: a
|
|
1163
1751
|
looser one (`input-`, `overlay-`, `dialog-p`) sweeps up tokens that are still
|
|
1164
1752
|
live globals, and deleting those overrides shifts the layout silently. All of
|
|
@@ -1188,17 +1776,17 @@ blocks all moved), so check your stylesheet even for these three.
|
|
|
1188
1776
|
to `'div' | 'span'`, so anything else is now a compile error — see
|
|
1189
1777
|
[BbSmoothHeight](./components/bb-smooth-height.md).
|
|
1190
1778
|
|
|
1191
|
-
| Area | Guides
|
|
1192
|
-
| ----------------- |
|
|
1193
|
-
| Actions | [BbButton](./components/bb-button.md) · [BbDropdownButton](./components/bb-dropdown-button.md)
|
|
1194
|
-
| Badges & status | [BbBadge / BbIndicator](./components/bb-badge.md) · [BbChip (removed)](./components/bb-chip.md)
|
|
1195
|
-
| Feedback | [BbAlert](./components/bb-alert.md) · [BbToast / toast()](./components/bb-toast.md) · [confirm()](./components/use-confirm.md) · [BbSpinner](./components/bb-spinner.md)
|
|
1196
|
-
| Surfaces | [BbDialog](./components/bb-dialog.md) · [BbOffCanvas](./components/bb-offcanvas.md) · [BbPopover](./components/bb-popover.md) · [BbTooltip](./components/bb-tooltip.md) · [BbCollapsible](./components/bb-collapsible.md)
|
|
1197
|
-
| Navigation & data | [BbDropdown](./components/bb-dropdown.md) · [BbTabs](./components/bb-tabs.md) · [BbTable](./components/bb-table.md) · [BbTree](./components/bb-tree.md) · [BbBreadcrumbs](./components/bb-breadcrumbs.md) · [BbPagination](./components/bb-pagination.md)
|
|
1198
|
-
| Media | [BbAvatar](./components/bb-avatar.md) · [BbIcon](./components/bb-icon.md)
|
|
1199
|
-
| Layout | [BbSmoothHeight](./components/bb-smooth-height.md)
|
|
1200
|
-
| Text-ish inputs | [BbTextInput](./components/bb-text-input.md) · [BbColorInput](./components/bb-color-input.md) · [BbDatePickerInput](./components/bb-date-picker-input.md) · [BbColorPalette](./components/bb-color-palette.md)
|
|
1201
|
-
| Selects | [BbSelect](./components/bb-select.md) · [BbSelectPopover](./components/bb-select-popover.md)
|
|
1202
|
-
| Choice controls | [BbCheckbox / BbRadio / BbSwitch](./components/bb-checkbox.md) · [the three groups](./components/bb-checkbox-group.md)
|
|
1203
|
-
| Other inputs | [BbSlider](./components/bb-slider.md) · [BbRating](./components/bb-rating.md) · [BbTag](./components/bb-tag.md) · [BbDropzone](./components/bb-dropzone.md)
|
|
1204
|
-
| Removed | [BbIntersection](./components/bb-intersection.md) · [useBroadcastChannelInstance](./components/use-broadcast-channel-instance.md)
|
|
1779
|
+
| Area | Guides |
|
|
1780
|
+
| ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1781
|
+
| Actions | [BbButton](./components/bb-button.md) · [BbDropdownButton](./components/bb-dropdown-button.md) |
|
|
1782
|
+
| Badges & status | [BbBadge / BbIndicator](./components/bb-badge.md) · [BbChip (removed)](./components/bb-chip.md) |
|
|
1783
|
+
| Feedback | [BbAlert](./components/bb-alert.md) · [BbToast / toast()](./components/bb-toast.md) · [confirm()](./components/use-confirm.md) · [BbSpinner](./components/bb-spinner.md) |
|
|
1784
|
+
| Surfaces | [BbDialog](./components/bb-dialog.md) · [BbOffCanvas](./components/bb-offcanvas.md) · [BbPopover](./components/bb-popover.md) · [BbTooltip](./components/bb-tooltip.md) · [BbCollapsible](./components/bb-collapsible.md) · [BbAccordion](./components/bb-accordion.md) |
|
|
1785
|
+
| Navigation & data | [BbDropdown](./components/bb-dropdown.md) · [BbTabs](./components/bb-tabs.md) · [BbTable](./components/bb-table.md) · [BbTree](./components/bb-tree.md) · [BbBreadcrumbs](./components/bb-breadcrumbs.md) · [BbPagination](./components/bb-pagination.md) |
|
|
1786
|
+
| Media | [BbAvatar](./components/bb-avatar.md) · [BbIcon](./components/bb-icon.md) |
|
|
1787
|
+
| Layout | [BbSmoothHeight](./components/bb-smooth-height.md) |
|
|
1788
|
+
| Text-ish inputs | [BbTextInput](./components/bb-text-input.md) · [BbColorInput](./components/bb-color-input.md) · [BbDatePickerInput](./components/bb-date-picker-input.md) · [BbColorPalette](./components/bb-color-palette.md) |
|
|
1789
|
+
| Selects | [BbSelect](./components/bb-select.md) · [BbSelectPopover](./components/bb-select-popover.md) |
|
|
1790
|
+
| Choice controls | [BbCheckbox / BbRadio / BbSwitch](./components/bb-checkbox.md) · [the three groups](./components/bb-checkbox-group.md) |
|
|
1791
|
+
| Other inputs | [BbSlider](./components/bb-slider.md) · [BbRating](./components/bb-rating.md) · [BbTag](./components/bb-tag.md) · [BbDropzone](./components/bb-dropzone.md) |
|
|
1792
|
+
| Removed | [BbIntersection](./components/bb-intersection.md) · [useBroadcastChannelInstance](./components/use-broadcast-channel-instance.md) |
|