bitboss-ui 3.0.0-beta.2 → 3.0.0-beta.21
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 +72 -33
- package/dist/ai/BbAccordion.md +3 -3
- package/dist/ai/BbAlert.md +9 -5
- package/dist/ai/BbAsterisk.md +17 -0
- package/dist/ai/BbAvatar.md +12 -3
- package/dist/ai/BbBadge.md +15 -10
- package/dist/ai/BbBadgeButton.md +16 -16
- package/dist/ai/BbBaseButton.md +16 -16
- package/dist/ai/BbBaseCheckbox.md +8 -8
- package/dist/ai/BbBaseCheckboxGroup.md +13 -13
- package/dist/ai/BbBaseCheckboxIcon.md +26 -9
- package/dist/ai/BbBaseColorInput.md +11 -11
- package/dist/ai/BbBaseDatePicker.md +6 -6
- package/dist/ai/BbBaseDatePickerInput.md +15 -15
- package/dist/ai/BbBaseInputContainer.md +12 -12
- package/dist/ai/BbBaseNumberInput.md +8 -8
- package/dist/ai/BbBaseRadio.md +5 -5
- package/dist/ai/BbBaseRadioGroup.md +7 -7
- package/dist/ai/BbBaseRadioIcon.md +25 -9
- package/dist/ai/BbBaseRating.md +5 -5
- package/dist/ai/BbBaseSelect.md +22 -21
- package/dist/ai/BbBaseSlider.md +9 -9
- package/dist/ai/BbBaseSwitch.md +8 -8
- package/dist/ai/BbBaseSwitchGroup.md +13 -13
- package/dist/ai/BbBaseSwitchIcon.md +28 -10
- package/dist/ai/BbBaseTag.md +10 -10
- package/dist/ai/BbBaseTextInput.md +9 -9
- package/dist/ai/BbBaseTextarea.md +9 -9
- package/dist/ai/BbBaseTimePickerInput.md +13 -13
- package/dist/ai/BbBreadcrumbs.md +2 -2
- package/dist/ai/BbButton.md +15 -15
- package/dist/ai/BbCheckbox.md +18 -17
- package/dist/ai/BbCheckboxGroup.md +15 -14
- package/dist/ai/BbCollapsible.md +11 -9
- package/dist/ai/BbColorInput.md +15 -15
- package/dist/ai/BbColorPalette.md +12 -6
- package/dist/ai/BbConfirm.md +12 -5
- package/dist/ai/BbDatePicker.md +13 -13
- package/dist/ai/BbDatePickerInput.md +20 -20
- package/dist/ai/BbDialog.md +78 -12
- package/dist/ai/BbDropdown.md +132 -22
- package/dist/ai/BbDropdownButton.md +12 -12
- package/dist/ai/BbDropdownGroup.md +1 -1
- package/dist/ai/BbDropzone.md +4 -4
- package/dist/ai/BbForm.md +49 -14
- package/dist/ai/BbIcon.md +6 -0
- package/dist/ai/BbIndicator.md +5 -5
- package/dist/ai/BbNumberInput.md +11 -11
- package/dist/ai/BbOffCanvas.md +90 -20
- package/dist/ai/BbPagination.md +3 -3
- package/dist/ai/BbPopover.md +32 -17
- package/dist/ai/BbProgress.md +7 -4
- package/dist/ai/BbRadio.md +16 -15
- package/dist/ai/BbRadioGroup.md +20 -17
- package/dist/ai/BbRating.md +11 -11
- package/dist/ai/BbSelect.md +138 -37
- package/dist/ai/BbSelectPopover.md +40 -41
- package/dist/ai/BbSlider.md +37 -22
- package/dist/ai/BbSmoothHeight.md +1 -1
- package/dist/ai/BbSwitch.md +25 -10
- package/dist/ai/BbSwitchGroup.md +17 -14
- package/dist/ai/BbTable.md +920 -109
- package/dist/ai/BbTabs.md +28 -14
- package/dist/ai/BbTabsList.md +1 -1
- package/dist/ai/BbTabsPanes.md +1 -1
- package/dist/ai/BbTabsRoot.md +10 -10
- package/dist/ai/BbTag.md +14 -14
- package/dist/ai/BbTextInput.md +16 -15
- package/dist/ai/BbTextarea.md +13 -13
- package/dist/ai/BbTimePicker.md +10 -10
- package/dist/ai/BbTimePickerInput.md +17 -17
- package/dist/ai/BbToast.md +1 -1
- package/dist/ai/BbToastPortal.md +1 -1
- package/dist/ai/BbTooltip.md +12 -10
- package/dist/ai/BbTree.md +1 -1
- package/dist/ai/ChipsBox.md +1 -1
- package/dist/ai/CommonInputWrapper.md +10 -10
- package/dist/ai/CommonPopover.md +6 -6
- package/dist/ai/FlatListBox.md +5 -5
- package/dist/ai/GroupedListBox.md +5 -5
- package/dist/ai/ListBox.md +4 -4
- package/dist/ai/OptionsContainer.md +4 -4
- package/dist/ai/changelog.json +128 -2
- package/dist/ai/components.json +917 -100
- package/dist/ai/composables/useBbConfig.md +72 -11
- package/dist/ai/composables/useConfirm.md +5 -3
- package/dist/ai/guides/ai-router.md +9 -4
- package/dist/ai/guides/component-picker.md +18 -18
- package/dist/ai/guides/design-language.md +14 -14
- package/dist/ai/guides/design-tokens.md +25 -18
- package/dist/ai/guides/fetch-items-playbook.md +1 -1
- package/dist/ai/guides/icons-policy.md +11 -5
- package/dist/ai/guides/installation-and-plugin-setup.md +85 -23
- package/dist/ai/guides/migration/components/bb-checkbox-group.md +30 -0
- package/dist/ai/guides/migration/components/bb-checkbox.md +37 -3
- package/dist/ai/guides/migration/components/bb-collapsible.md +5 -5
- package/dist/ai/guides/migration/components/bb-dialog.md +62 -34
- package/dist/ai/guides/migration/components/bb-offcanvas.md +29 -13
- package/dist/ai/guides/migration/components/bb-rating.md +8 -2
- package/dist/ai/guides/migration/components/bb-select.md +5 -2
- package/dist/ai/guides/migration/components/bb-table.md +560 -28
- package/dist/ai/guides/migration/components/bb-text-input.md +6 -6
- package/dist/ai/guides/migration/v2-to-v3.md +260 -89
- package/dist/ai/guides/ssr-prefill.md +120 -0
- package/dist/ai/index.md +10 -9
- package/dist/ai/recipes/inertia/approvals-inbox.md +0 -1
- package/dist/ai/recipes/inertia/inline-edit-workspace.md +0 -1
- package/dist/ai/recipes/inertia/layout-scaffold.md +5 -1
- package/dist/ai/recipes/inertia/ownership-atlas.md +49 -29
- package/dist/ai/recipes/inertia/record-form.md +0 -1
- package/dist/ai/recipes/inertia/records-workspace.md +26 -8
- package/dist/ai/recipes/inertia/upload-center.md +0 -1
- package/dist/ai/recipes/nuxt/approvals-inbox.md +0 -1
- package/dist/ai/recipes/nuxt/inline-edit-workspace.md +0 -1
- package/dist/ai/recipes/nuxt/layout-scaffold.md +5 -1
- package/dist/ai/recipes/nuxt/record-form.md +0 -1
- package/dist/ai/recipes/nuxt/records-workspace.md +26 -8
- package/dist/ai/recipes/nuxt/upload-center.md +0 -1
- package/dist/ai/recipes/vue/approvals-inbox.md +0 -1
- package/dist/ai/recipes/vue/inline-edit-workspace.md +0 -1
- package/dist/ai/recipes/vue/layout-scaffold.md +5 -1
- package/dist/ai/recipes/vue/records-workspace.md +26 -8
- package/dist/ai/recipes/vue/upload-center.md +0 -1
- package/dist/ai/source/BbAlert.md +60 -2
- package/dist/ai/source/BbAvatar.md +3 -3
- package/dist/ai/source/BbBadge.md +60 -15
- package/dist/ai/source/BbBadgeButton.md +8 -2
- package/dist/ai/source/BbBaseButton.md +3 -1
- package/dist/ai/source/BbBaseCheckboxGroup.md +6 -2
- package/dist/ai/source/BbBaseDatePicker.md +3 -1
- package/dist/ai/source/BbBaseDatePickerInput.md +5 -1
- package/dist/ai/source/BbBaseInputContainer.md +52 -1
- package/dist/ai/source/BbBaseRadioGroup.md +4 -0
- package/dist/ai/source/BbBaseRating.md +3 -1
- package/dist/ai/source/BbBaseSelect.md +71 -16
- package/dist/ai/source/BbBaseSwitchGroup.md +4 -0
- package/dist/ai/source/BbBaseTimePickerInput.md +5 -1
- package/dist/ai/source/BbBreadcrumbs.md +31 -0
- package/dist/ai/source/BbButton.md +51 -24
- package/dist/ai/source/BbCheckbox.md +15 -1
- package/dist/ai/source/BbCheckboxGroup.md +2 -1
- package/dist/ai/source/BbCollapsible.md +7 -1
- package/dist/ai/source/BbColorInput.md +3 -4
- package/dist/ai/source/BbColorPalette.md +3 -4
- package/dist/ai/source/BbDatePicker.md +5 -1
- package/dist/ai/source/BbDatePickerInput.md +5 -1
- package/dist/ai/source/BbDialog.md +175 -19
- package/dist/ai/source/BbDropdown.md +376 -69
- package/dist/ai/source/BbDropdownGroup.md +330 -59
- package/dist/ai/source/BbForm.md +93 -5
- package/dist/ai/source/BbIcon.md +46 -36
- package/dist/ai/source/BbNumberInput.md +3 -4
- package/dist/ai/source/BbOffCanvas.md +474 -194
- package/dist/ai/source/BbPopover.md +24 -17
- package/dist/ai/source/BbProgress.md +2 -2
- package/dist/ai/source/BbRadio.md +15 -1
- package/dist/ai/source/BbRadioGroup.md +3 -1
- package/dist/ai/source/BbSelect.md +50 -2
- package/dist/ai/source/BbSelectPopover.md +171 -23
- package/dist/ai/source/BbSlider.md +3 -4
- package/dist/ai/source/BbSwitch.md +15 -1
- package/dist/ai/source/BbSwitchGroup.md +8 -5
- package/dist/ai/source/BbTable.md +5092 -1446
- package/dist/ai/source/BbTabs.md +6 -7
- package/dist/ai/source/BbTabsList.md +6 -7
- package/dist/ai/source/BbTabsPanes.md +6 -7
- package/dist/ai/source/BbTabsRoot.md +6 -7
- package/dist/ai/source/BbTag.md +3 -4
- package/dist/ai/source/BbTextInput.md +3 -4
- package/dist/ai/source/BbTextarea.md +3 -4
- package/dist/ai/source/BbTimePicker.md +4 -1
- package/dist/ai/source/BbTimePickerInput.md +5 -1
- package/dist/ai/source/BbToast.md +3 -1
- package/dist/ai/source/BbTooltip.md +5 -1
- package/dist/ai/source/CommonInputWrapper.md +4 -0
- package/dist/ai/source/CommonPopover.md +6 -0
- package/dist/ai/source/FlatListBox.md +11 -5
- package/dist/ai/source/GroupedListBox.md +7 -5
- package/dist/components/BbAlert/BbAlert.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/components/BbAlert/types.d.ts +10 -1
- package/dist/components/BbAvatar/BbAvatar.vue.d.ts +1 -1
- package/dist/components/BbAvatar/BbAvatar.vue_vue_type_script_setup_true_lang.js +33 -33
- package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +22 -16
- package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +36 -15
- package/dist/components/BbBadge/badgeButtonContext.d.ts +21 -8
- package/dist/components/BbBadge/types.d.ts +8 -2
- package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +47 -47
- package/dist/components/BbBaseButton/RouterComponent.vue_vue_type_script_setup_true_lang.js +14 -14
- package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue_vue_type_script_setup_true_lang.js +30 -28
- package/dist/components/BbBaseCheckboxGroup/types.d.ts +2 -2
- package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue_vue_type_script_setup_true_lang.js +167 -167
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.d.ts +9 -9
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue_vue_type_script_setup_true_lang.js +78 -78
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue_vue_type_script_setup_true_lang.js +64 -64
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.d.ts +1 -1
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue_vue_type_script_setup_true_lang.js +138 -138
- package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue_vue_type_script_setup_true_lang.js +24 -22
- package/dist/components/BbBaseRating/BbBaseRating.vue_vue_type_script_setup_true_lang.js +40 -40
- package/dist/components/BbBaseSelect/BbBaseSelect.vue_vue_type_script_setup_true_lang.js +74 -65
- package/dist/components/BbBaseSelect/types.d.ts +22 -0
- package/dist/components/BbBaseSlider/BbBaseSlider.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue_vue_type_script_setup_true_lang.js +30 -28
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.d.ts +1 -1
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue_vue_type_script_setup_true_lang.js +104 -104
- package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +35 -35
- package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +85 -81
- package/dist/components/BbCheckboxGroup/types.d.ts +2 -1
- package/dist/components/BbCollapsible/types.d.ts +7 -1
- package/dist/components/BbColorInput/BbColorInput.vue.d.ts +1 -1
- package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +18 -18
- package/dist/components/BbColorPalette/BbColorPalette.vue.d.ts +2 -2
- package/dist/components/BbColorPalette/BbColorPalette.vue_vue_type_script_setup_true_lang.js +50 -50
- package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +17 -17
- package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +1 -1
- package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +100 -100
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +21 -21
- package/dist/components/BbDialog/BbDialog.vue.d.ts +1 -1
- package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +133 -107
- package/dist/components/BbDialog/types.d.ts +29 -2
- package/dist/components/BbDropdown/AdaptiveDropdown.vue.d.ts +2 -0
- package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +99 -100
- package/dist/components/BbDropdown/BbDropdown.vue.d.ts +2 -2
- package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +208 -201
- package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +225 -208
- package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +21 -21
- package/dist/components/BbDropdown/types.d.ts +20 -5
- package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/BbIcon/BbIcon.vue_vue_type_script_setup_true_lang.js +46 -46
- package/dist/components/BbIcon/iconCache.d.ts +33 -0
- package/dist/components/BbIcon/iconCache.js +17 -0
- package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +1 -1
- package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +15 -15
- package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +1 -1
- package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +254 -208
- package/dist/components/BbOffCanvas/types.d.ts +30 -5
- package/dist/components/BbPagination/BbPagination.vue.d.ts +1 -1
- package/dist/components/BbPopover/BbPopover.vue.d.ts +2 -2
- package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +149 -146
- package/dist/components/BbPopover/types.d.ts +3 -2
- package/dist/components/BbRadioGroup/types.d.ts +3 -1
- package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +27 -23
- package/dist/components/BbSelect/types.d.ts +32 -0
- package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +221 -213
- package/dist/components/BbSlider/BbSlider.vue.d.ts +1 -1
- package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +20 -20
- package/dist/components/BbTable/BbTable.vue.d.ts +10 -4
- package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +1433 -600
- package/dist/components/BbTable/BbTableDataRow.d.ts +162 -0
- package/dist/components/BbTable/BbTableDataRow.js +136 -0
- package/dist/components/BbTable/BbTableExpandRow.d.ts +73 -0
- package/dist/components/BbTable/BbTableExpandRow.js +52 -0
- package/dist/components/BbTable/types.d.ts +324 -111
- package/dist/components/BbTable/utils.d.ts +92 -4
- package/dist/components/BbTable/utils.js +71 -36
- package/dist/components/BbTabs/types.d.ts +0 -8
- package/dist/components/BbTag/BbTag.vue.d.ts +1 -1
- package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +18 -18
- package/dist/components/BbTextInput/BbTextInput.vue.d.ts +1 -1
- package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +18 -18
- package/dist/components/BbTextarea/BbTextarea.vue.d.ts +1 -1
- package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +54 -54
- package/dist/components/BbTimePicker/BbTimePicker.vue.d.ts +1 -1
- package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +80 -80
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +61 -61
- package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +17 -17
- package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +13 -13
- package/dist/components/BbTooltip/types.d.ts +5 -1
- package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +17 -17
- package/dist/components/ClearableButton/ClearableButton.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +83 -83
- package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +56 -56
- package/dist/composables/useBaseOptions.js +30 -20
- package/dist/composables/useBbConfig.d.ts +27 -6
- package/dist/composables/useBbConfig.js +8 -2
- package/dist/composables/useConfig.d.ts +59 -0
- package/dist/composables/useConfig.js +9 -0
- package/dist/composables/useItemsGetter.d.ts +11 -0
- package/dist/composables/useItemsGetter.js +44 -18
- package/dist/composables/useLocale.js +10 -7
- package/dist/composables/useMobile.js +5 -5
- package/dist/composables/usePrefill.d.ts +21 -2
- package/dist/composables/usePrefill.js +25 -19
- 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.js +5 -5
- package/dist/deprecation/ai-deprecations.json.d.ts +121 -11
- package/dist/deprecation/ai-deprecations.json.js +1 -1
- package/dist/directives/bbDropdown.d.ts +15 -4
- package/dist/directives/bbDropdown.js +31 -9
- package/dist/directives/createPopoverDirective.d.ts +62 -0
- package/dist/directives/createPopoverDirective.js +63 -23
- package/dist/i18n/locales/cs.json +4 -1
- package/dist/i18n/locales/da.json +4 -1
- package/dist/i18n/locales/de.json +4 -1
- package/dist/i18n/locales/el.json +4 -1
- package/dist/i18n/locales/en.json +4 -1
- package/dist/i18n/locales/es.json +4 -1
- package/dist/i18n/locales/fi.json +4 -1
- package/dist/i18n/locales/fr.json +4 -1
- package/dist/i18n/locales/hu.json +4 -1
- package/dist/i18n/locales/it.json +4 -1
- package/dist/i18n/locales/ja.json +4 -1
- package/dist/i18n/locales/ko.json +4 -1
- package/dist/i18n/locales/nb.json +4 -1
- package/dist/i18n/locales/nl.json +4 -1
- package/dist/i18n/locales/pl.json +4 -1
- package/dist/i18n/locales/pt.json +4 -1
- package/dist/i18n/locales/ro.json +4 -1
- package/dist/i18n/locales/ru.json +4 -1
- package/dist/i18n/locales/sv.json +4 -1
- package/dist/i18n/locales/tr.json +4 -1
- package/dist/i18n/locales/uk.json +4 -1
- package/dist/i18n/locales/zh-cn.json +4 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.js +69 -67
- package/dist/llms-full.txt +3997 -1458
- package/dist/llms-medium.txt +140 -73
- package/dist/llms.txt +7 -6
- package/dist/locale-blueprint.json +4 -1
- package/dist/nuxt-auto-imports.d.ts +100 -0
- package/dist/nuxt-auto-imports.js +55 -0
- package/dist/nuxt-module.d.ts +22 -1
- package/dist/nuxt.js +22 -8
- package/dist/plugin.d.ts +10 -1
- package/dist/plugin.js +20 -19
- package/dist/runtime/nuxt-plugin.js +28 -21
- package/dist/styles.css +1 -1
- package/dist/utilities/misc/listboxMetrics.d.ts +3 -3
- package/dist/utilities/misc/listboxMetrics.js +2 -2
- package/dist/utilities/misc/ssrStateInjectionKey.d.ts +42 -0
- package/dist/utilities/misc/ssrStateInjectionKey.js +4 -0
- package/dist/validated/BbForm.vue_vue_type_script_setup_true_lang.js +45 -27
- package/dist/validated/BbSelect.vue.d.ts +2 -0
- package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/validated/useValidatedField.js +25 -23
- package/dist/vite.js +7 -3
- package/llms.txt +8 -7
- package/package.json +2 -2
- package/scripts/lib/eslint-plugin.d.ts +19 -1
- package/scripts/lib/eslint-plugin.mjs +155 -14
- package/scripts/lib/html-attributes.mjs +91 -0
- package/scripts/lib/validate-bb-markup.mjs +59 -11
- package/dist/assets/svgs/sort.svg_raw.js +0 -4
- package/dist/components/BbBadge/BadgeAppendIcon.vue.d.ts +0 -3
- package/dist/components/BbBadge/BadgeAppendIcon.vue.js +0 -5
- package/dist/components/BbBadge/BadgeAppendIcon.vue_vue_type_script_setup_true_lang.js +0 -22
|
@@ -7,12 +7,12 @@ summary: The type prop narrows to the text-like input types — number/date valu
|
|
|
7
7
|
|
|
8
8
|
## Changes
|
|
9
9
|
|
|
10
|
-
| v2 | v3
|
|
11
|
-
| -------------------------------------------------------------------------------- |
|
|
12
|
-
| `type?: HTMLInputElement['type']` (any string) | `type?: 'text' \| 'email' \| 'url' \| 'tel' \| 'search' \| 'password'`
|
|
13
|
-
| `direction?: string`-ish | `InputDirection` (`'auto' \| 'horizontal' \| 'vertical' \| '
|
|
14
|
-
| imperative template-ref API (`inputRef.value.focus()` / `.blur()` / `.select()`) | removed
|
|
15
|
-
| — | `description`, extra keyboard/composition events
|
|
10
|
+
| v2 | v3 | Kind |
|
|
11
|
+
| -------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
12
|
+
| `type?: HTMLInputElement['type']` (any string) | `type?: 'text' \| 'email' \| 'url' \| 'tel' \| 'search' \| 'password'` | retype — other values fail to compile |
|
|
13
|
+
| `direction?: string`-ish | `InputDirection` (`'auto' \| 'horizontal' \| 'vertical' \| 'xx xxxx'`) — in a two-token pattern the tokens' **character counts** are the ratio, not their values | family-wide retype — typos now fail to compile |
|
|
14
|
+
| imperative template-ref API (`inputRef.value.focus()` / `.blur()` / `.select()`) | removed | no consumer-facing expose; use the native `autofocus` prop, or reach the underlying `<input>` for the rare programmatic focus. **⚠ silent**: a stale `inputRef.value?.focus()` is `undefined` at runtime. |
|
|
15
|
+
| — | `description`, extra keyboard/composition events | additive |
|
|
16
16
|
|
|
17
17
|
## Edits
|
|
18
18
|
|
|
@@ -62,8 +62,12 @@ explicitly (section 8).
|
|
|
62
62
|
### What v2 looked like
|
|
63
63
|
|
|
64
64
|
v2 was a plain ESM library: named exports, one manual CSS import, optional
|
|
65
|
-
manual directive registration. There was no Vite plugin
|
|
66
|
-
|
|
65
|
+
manual directive registration. There was no Vite plugin and no `app.use`.
|
|
66
|
+
|
|
67
|
+
Nuxt apps were the exception: they installed a **separate companion package**,
|
|
68
|
+
`@bitboss-dev/bitboss-ui-nuxt`, which wrapped v2 in a Nuxt module. v3 absorbs
|
|
69
|
+
that package — the module now ships inside the library as `bitboss-ui/nuxt`.
|
|
70
|
+
See [Nuxt](#nuxt) below for the option-by-option move.
|
|
67
71
|
|
|
68
72
|
```ts
|
|
69
73
|
// v2 main.ts
|
|
@@ -173,8 +177,7 @@ nothing else about the plugin changes.
|
|
|
173
177
|
|
|
174
178
|
### Nuxt
|
|
175
179
|
|
|
176
|
-
|
|
177
|
-
also call `app.use`:
|
|
180
|
+
v3 ships a module that does both halves — do **not** also call `app.use`:
|
|
178
181
|
|
|
179
182
|
```ts
|
|
180
183
|
// v3 nuxt.config.ts
|
|
@@ -186,6 +189,57 @@ export default defineNuxtConfig({
|
|
|
186
189
|
});
|
|
187
190
|
```
|
|
188
191
|
|
|
192
|
+
#### Coming from `@bitboss-dev/bitboss-ui-nuxt`
|
|
193
|
+
|
|
194
|
+
That package was the v2 Nuxt story. It is superseded: **uninstall it** and
|
|
195
|
+
delete it from `modules`. Everything it did is now inside `bitboss-ui/nuxt`,
|
|
196
|
+
under the same `bitboss` config key — so the migration is mostly renaming keys,
|
|
197
|
+
not rewriting setup.
|
|
198
|
+
|
|
199
|
+
| `@bitboss-dev/bitboss-ui-nuxt` option | v3 `bitboss-ui/nuxt` |
|
|
200
|
+
| ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
201
|
+
| `icons.path` | `iconDir`. Same job, one level up. |
|
|
202
|
+
| `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. |
|
|
203
|
+
| `styles.enabled` | `injectStyles` (still defaults `true`). |
|
|
204
|
+
| `styles.index` | **Gone**, and nothing replaces it — see the ordering note below. |
|
|
205
|
+
| `link.name` | `nuxtLinkName` (still defaults `'NuxtLink'`). |
|
|
206
|
+
| `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. |
|
|
207
|
+
| `components.enabled` | `autoImport` — see below. Note the **default flipped**: v2's module auto-imported components, v3 does not. |
|
|
208
|
+
| `components.validation: true` | `autoImport: { validated: true }`, or explicit imports from `bitboss-ui/validated`. The wrappers moved into the library and gained `BbForm` + `useValidatedField`. |
|
|
209
|
+
| `components.requiredAsterisk` | `requiredAsterisk`, same meaning, one level up. |
|
|
210
|
+
| `composables` | Folded into `autoImport`. `useBroadcastChannelInstance`, `useQueue` and `useWizard` are **not exported by v3** — the module registered names the library no longer has. |
|
|
211
|
+
| `logLevel` | **Gone.** The v3 module has nothing to log at setup; build-plugin diagnostics go through Vite. |
|
|
212
|
+
|
|
213
|
+
**⚠ silent — auto-imports are off by default.** The v2 module registered every
|
|
214
|
+
`Bb*` component with Nuxt, so templates used them with no import line. v3 does
|
|
215
|
+
not: an unmigrated template compiles, and each unresolved `<BbButton>` renders
|
|
216
|
+
as an empty unknown element with no error anywhere. Either add explicit imports,
|
|
217
|
+
or opt back in:
|
|
218
|
+
|
|
219
|
+
```ts
|
|
220
|
+
// v3 nuxt.config.ts — the closest equivalent of the v2 module's defaults
|
|
221
|
+
export default defineNuxtConfig({
|
|
222
|
+
modules: ['bitboss-ui/nuxt'],
|
|
223
|
+
bitboss: {
|
|
224
|
+
iconDir: './assets/icons',
|
|
225
|
+
autoImport: { validated: true }, // drop `validated` if you had no vee-validate
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Set `"vueCompilerOptions": { "checkUnknownComponents": true }` in `tsconfig.json`
|
|
231
|
+
before you start either way — it is what turns that silent empty element into a
|
|
232
|
+
`vue-tsc` error naming the file and line.
|
|
233
|
+
|
|
234
|
+
**Style ordering.** `styles.index` let you splice `bitboss-ui/styles.css`
|
|
235
|
+
anywhere in Nuxt's `css` array. v3 injects the sheet at runtime and always puts
|
|
236
|
+
it **first** in `<head>`, ahead of every other stylesheet — so your own CSS is
|
|
237
|
+
always later and always wins, which is the order `styles.index` was normally
|
|
238
|
+
used to obtain. If you need the opposite (library rules winning over yours),
|
|
239
|
+
raise specificity in your own sheet rather than reordering; if you genuinely
|
|
240
|
+
need the library sheet elsewhere in the cascade, set `injectStyles: false` and
|
|
241
|
+
import `bitboss-ui/styles.css` yourself at the position you want.
|
|
242
|
+
|
|
189
243
|
### Inertia
|
|
190
244
|
|
|
191
245
|
Inertia apps configure `bitboss-ui/vite` exactly like plain Vite, install
|
|
@@ -238,6 +292,23 @@ bitbossUi({
|
|
|
238
292
|
useBbConfig().setConfig({ locale: 'en' });
|
|
239
293
|
```
|
|
240
294
|
|
|
295
|
+
**Under SSR, set the locale where the app is created.** The runtime config is
|
|
296
|
+
held **per Vue app** (3.0.0-beta.15), and SSR builds one app per request, so
|
|
297
|
+
this is per-visitor and correct on the first paint — which is what crawlers
|
|
298
|
+
index and what a JS-disabled reader keeps:
|
|
299
|
+
|
|
300
|
+
```ts
|
|
301
|
+
const app = createSSRApp(App);
|
|
302
|
+
app.use(bitbossUiPlugin, { locale: localeFor(request) });
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
`setConfig` still works for runtime switching. During a server render, call it
|
|
306
|
+
from a component's `setup` so it can resolve the current app; from module scope
|
|
307
|
+
there is no app to address, the write lands on the build-time defaults shared
|
|
308
|
+
by the whole process, and it warns in dev. (Before beta.15 the config was a
|
|
309
|
+
single process-global object, so a per-visitor locale was not possible at all —
|
|
310
|
+
if you carried a workaround for that, you can drop it.)
|
|
311
|
+
|
|
241
312
|
| v2 `setConfig` key | Where it goes in v3 |
|
|
242
313
|
| --------------------------------------------- | ------------------------------------------------------------------------------ |
|
|
243
314
|
| `locale` | stays runtime (`setConfig`) — the only survivor |
|
|
@@ -314,19 +385,30 @@ to the rename map and to every grep below — see
|
|
|
314
385
|
| `--bb-hint`, `--bb-icon-color`, `--bb-placeholder`, `--bb-prefix-color`, `--bb-muted-color` | `--bb-text-muted` |
|
|
315
386
|
| `--bb-input-color`, `--bb-input-bg` | `--bb-text`, `--bb-panel` |
|
|
316
387
|
| `--bb-input-font-size`, `--bb-input-mobile-font-size` | `--bb-input-fs`, `--bb-input-fs-mobile` |
|
|
388
|
+
| `--bb-label-size` | `--bb-label-fs` |
|
|
389
|
+
| `--bb-label-compact-spacing-y` | `--bb-label-spacing-y-compact` |
|
|
390
|
+
| `--bb-input-compact-h`, `--bb-input-compact-py` | `--bb-input-h-compact`, `--bb-input-py-compact` — the `compact` qualifier moved from infix to suffix |
|
|
391
|
+
| `--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
392
|
| `--bb-overlay-color` + `--bb-overlay-opacity` | `--bb-overlay` (one color with alpha) |
|
|
318
393
|
| `--bb-overlay-z-index` | `--bb-z-overlay` |
|
|
319
394
|
| _(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-
|
|
395
|
+
| `--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
396
|
| `--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
397
|
| `--bb-dialog-title-size` | the local `--dialog-title-fs` on `.bb-dialog` / `.bb-offcanvas` (default `calc(var(--bb-fs) + 2px)`) |
|
|
323
398
|
| `--bb-dialog-title-weight` | **no knob** — the title is hardcoded `font-weight: 500`. Override with a CSS rule, see below. |
|
|
324
399
|
| `--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
400
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
401
|
+
**Most `--bb-input-*` and `--bb-label-*` tokens survive — but only these
|
|
402
|
+
exact names:** `--bb-input-h`, `--bb-input-px`, `--bb-input-py`,
|
|
403
|
+
`--bb-input-spacing`, `--bb-input-icon`, `--bb-input-prefix-w`,
|
|
404
|
+
`--bb-label-spacing-x`, `--bb-label-spacing-y`, `--bb-label-weight`,
|
|
405
|
+
`--bb-leading`. Those are still global v3 theme tokens, declared in
|
|
406
|
+
`variables.css` and read across the whole form family — do not delete them
|
|
407
|
+
(several changed default value; the drift table below lists which). Everything
|
|
408
|
+
else in the two families either renamed (`--bb-label-size` → `--bb-label-fs`,
|
|
409
|
+
the compact pair — rows above) or is deleted outright, so a declaration that
|
|
410
|
+
is not in this list and not in the rename map is inert: it looks correct and
|
|
411
|
+
does nothing. §8's retired-token grep catches every deleted name.
|
|
330
412
|
|
|
331
413
|
**When a v2 global becomes a component token, resize only what you use.** That
|
|
332
414
|
last row is the trap: a v2 global like `--bb-button-icon` had ONE value for
|
|
@@ -347,50 +429,59 @@ doctrine in `design-tokens.md` § "Overriding one from a consumer app". And chec
|
|
|
347
429
|
first whether the v2 value was a real customisation: if it merely restated v2's
|
|
348
430
|
default, the migration is to **delete it** and inherit the v3 scale.
|
|
349
431
|
|
|
350
|
-
**Asymmetric surface padding.**
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
432
|
+
**Asymmetric surface padding.** v3 splits the axes with the local pair
|
|
433
|
+
`--px` / `--py`, declared on both surface roots (`.bb-dialog`,
|
|
434
|
+
`.bb-offcanvas`) and each branching off `var(--bb-panel-p)`. Like every
|
|
435
|
+
unprefixed component token, you override them _on the component's class_,
|
|
436
|
+
never `:root`. v2's `--bb-dialog-px` / `--bb-dialog-py` map onto them
|
|
437
|
+
directly:
|
|
355
438
|
|
|
356
439
|
```css
|
|
357
|
-
/* v2: --bb-dialog-px: 24px;
|
|
440
|
+
/* v2: --bb-dialog-px: 24px; --bb-dialog-py: 10px */
|
|
358
441
|
.my-dialog {
|
|
359
|
-
--
|
|
442
|
+
--px: 24px; /* horizontal padding + the close button's inline inset */
|
|
443
|
+
--py: 10px; /* vertical padding + the close button's block inset */
|
|
360
444
|
}
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
Setting only `--bb-panel-p` still moves both axes together (the pair defaults
|
|
448
|
+
to it, resolved on the component root, so a scoped `--bb-panel-p` override
|
|
449
|
+
keeps working too). Per-**part** asymmetry (header `py: 10px`, body
|
|
450
|
+
`py: 20px`) works by scoping the token to the part class — the padding rules
|
|
451
|
+
resolve it on the part elements and the pair inherits:
|
|
452
|
+
|
|
453
|
+
```css
|
|
361
454
|
.my-dialog .bb-dialog__header {
|
|
362
|
-
|
|
455
|
+
--py: 10px; /* header block padding (bottom is py/2); × inset follows */
|
|
363
456
|
}
|
|
364
|
-
.my-dialog .bb-dialog__body
|
|
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;
|
|
457
|
+
.my-dialog .bb-dialog__body-content {
|
|
458
|
+
--py: 20px; /* body bottom padding, and its top in the headerless case */
|
|
372
459
|
}
|
|
373
460
|
```
|
|
374
461
|
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
462
|
+
Derived spacings scale with it — the header's bottom padding is `py / 2` and
|
|
463
|
+
the close button's block inset tracks the header's `py`. If you need exact
|
|
464
|
+
literals instead of those ratios, a `padding-block` rule on the part class
|
|
465
|
+
still works (use `padding-block`, not the `padding` shorthand, so the
|
|
466
|
+
horizontal half keeps tracking `--px`; the library part selectors are
|
|
467
|
+
at most (0,2,1) specific, so a three-class app selector beats them all).
|
|
468
|
+
`BbOffCanvas` is identical with `.bb-offcanvas__*` and the same `--px` /
|
|
469
|
+
`--py` names.
|
|
470
|
+
|
|
471
|
+
**Scope the pair to the surface, and it stays the surface's.** `--px` is also
|
|
472
|
+
a local on other components (`BbButton`, `BbAlert`, `BbTooltip`,
|
|
473
|
+
`BbBaseSlider`), but each of those re-declares it on its own root class, so a
|
|
474
|
+
dialog-scoped `--px` never leaks into the buttons or alerts inside the dialog
|
|
475
|
+
— and, symmetrically, never set the pair on `:root` or an arbitrary ancestor:
|
|
476
|
+
the surface roots' own defaults mask it there, and you would be reaching into
|
|
477
|
+
every other `--px`-reading component anyway. (`--pt` remains dead — nothing
|
|
478
|
+
reads it.)
|
|
388
479
|
|
|
389
480
|
If only the **vertical rhythm between parts** differs, the local `--dialog-gap`
|
|
390
|
-
(default `--
|
|
391
|
-
|
|
481
|
+
(default `--py`) already does it without a padding rule: it drives the gap
|
|
482
|
+
below the body content and the footer's block padding on `.bb-dialog` and
|
|
392
483
|
`.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 `--
|
|
484
|
+
top padding in the headerless case — those still take `--py`.
|
|
394
485
|
|
|
395
486
|
**`--bb-dialog-close` maps to nothing — delete it.** In v2 it was the close
|
|
396
487
|
**icon** width (`12px`) and the button around it added `8px` of padding, so the
|
|
@@ -454,15 +545,25 @@ and delete only the declarations that merely restated a **v2** default.
|
|
|
454
545
|
**A type that narrowed.** `--bb-ring-opacity` survives by name but v3 registers
|
|
455
546
|
it with `@property … syntax: '<percentage>'`:
|
|
456
547
|
|
|
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:
|
|
548
|
+
| token | v2 form | v3 form | symptom |
|
|
549
|
+
| ------------------- | -------------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
550
|
+
| `--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
551
|
|
|
461
552
|
Nothing reports this — not `vue-tsc`, not the eslint plugin, not
|
|
462
553
|
`npx bitboss-ui check` (none of them read CSS), and not the browser console:
|
|
463
554
|
an invalid registered-property value is not a parse error, so it logs nothing.
|
|
464
|
-
Grep your stylesheets for `--bb-ring-opacity` and
|
|
465
|
-
|
|
555
|
+
Grep your stylesheets for `--bb-ring-opacity` and check **both directions of
|
|
556
|
+
every hit**:
|
|
557
|
+
|
|
558
|
+
- every **write** must carry a `%` (`0.15` → `15%`), and
|
|
559
|
+
- every **read** must stop multiplying by `100%`. The v2 idiom for consuming
|
|
560
|
+
the unitless form was exactly that —
|
|
561
|
+
`calc(100% - var(--bb-ring-opacity) * 100%)` — and under v3 it multiplies a
|
|
562
|
+
percentage by a percentage, which is invalid in `calc()`. The invalid math
|
|
563
|
+
takes the whole declaration down (typically a `color-mix()` ring), so the
|
|
564
|
+
failure is _worse_ than the write side: a stale write still produces a ring
|
|
565
|
+
at the fallback strength, a stale read produces **no ring at all**, equally
|
|
566
|
+
silently. Delete the `* 100%`.
|
|
466
567
|
|
|
467
568
|
Nine tokens are `@property`-registered in v3 — the eight color knobs
|
|
468
569
|
(`syntax: '<color>'`) plus `--bb-ring-opacity`. Each rejects values outside its
|
|
@@ -565,9 +666,26 @@ this order:
|
|
|
565
666
|
1. **Name is in the table, and your app never styled it** → use the built-in
|
|
566
667
|
`variant`. This is the only genuinely free conversion.
|
|
567
668
|
2. **Name is in the table, but your app styled it itself** → v3's built-in now
|
|
568
|
-
paints underneath your rules
|
|
569
|
-
|
|
570
|
-
|
|
669
|
+
paints underneath your rules, and **registering the name does not stop it**.
|
|
670
|
+
The registries feed the type-checker only: `alertVariants: ['warning']`
|
|
671
|
+
regenerates the typed union and nothing else — no CSS is generated and none
|
|
672
|
+
is suppressed; the built-in `.bb-alert--warning` skin ships unconditionally
|
|
673
|
+
in `styles.css` and still applies, so every property your CSS does not
|
|
674
|
+
explicitly set shows through as the library's. Decide explicitly: accept
|
|
675
|
+
v3's look and delete your CSS, or keep your look — which requires your rules
|
|
676
|
+
to **win the cascade** over the library's. Note the library's skin
|
|
677
|
+
selectors are not uniform: some families compile single-class
|
|
678
|
+
(`.bb-alert--warning`, `.bb-toast-message--*` — (0,1,0)), others
|
|
679
|
+
block-scoped (`.bb-button.bb-button--outline`, `.bb-badge.bb-badge--*`,
|
|
680
|
+
`.bb-indicator.bb-indicator--*`, `.bb-tooltip.bb-tooltip--*` — (0,2,0)).
|
|
681
|
+
The pattern that wins everywhere: author your override at block+modifier
|
|
682
|
+
(`.bb-alert.bb-alert--warning`, or nest the modifier under the block) **and**
|
|
683
|
+
load your sheet after `styles.css` — that outweighs the single-class
|
|
684
|
+
families and ties-then-wins-on-order against the block-scoped ones. Or
|
|
685
|
+
sidestep the collision by renaming to a name not in the table, which moves
|
|
686
|
+
you to case 3, where your CSS genuinely is the sole source. Whichever you pick,
|
|
687
|
+
still register the name: that part is required for the type-check either
|
|
688
|
+
way.
|
|
571
689
|
3. **Name is not in the table** → register it and keep your CSS. **Do not remap
|
|
572
690
|
onto the "nearest" built-in.** `error → destructive`, `danger →
|
|
573
691
|
destructive`, `info → primary` all compile, all look plausible in review,
|
|
@@ -575,8 +693,12 @@ destructive`, `info → primary` all compile, all look plausible in review,
|
|
|
575
693
|
deliberate redesign decision, never as a mechanical migration step.
|
|
576
694
|
4. **Name was never styled by anyone** → see the next subsection.
|
|
577
695
|
|
|
578
|
-
Registering is cheap — one array entry per name — and
|
|
579
|
-
behaviour-preserving default
|
|
696
|
+
Registering is cheap — one array entry per name — and for a name **not** in
|
|
697
|
+
the table it is the behaviour-preserving default: the library has no rule for
|
|
698
|
+
an unknown name, so your CSS is the sole styling source. For a name that **is**
|
|
699
|
+
in the table, registering buys the type-check and nothing else — behaviour
|
|
700
|
+
preservation there is a cascade question (case 2 above). When unsure, prefer a
|
|
701
|
+
non-colliding name.
|
|
580
702
|
|
|
581
703
|
### ⚠ silent — a `theme` value that did nothing in v2 may do something in v3
|
|
582
704
|
|
|
@@ -753,16 +875,16 @@ to the new name (`hide-close`).
|
|
|
753
875
|
warns.
|
|
754
876
|
- **`BbPopover`**: `showClose`, `closeLabel`, `restoreFocus`, `block` removed —
|
|
755
877
|
render your own close affordance in the content (`#default="{ close }"`).
|
|
756
|
-
- **`BbDialog`**: `
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
`
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
878
|
+
- **`BbDialog`**: `hideHeader`, `compact`, `overlayClasses`, `panelClasses`
|
|
879
|
+
removed (use the `header` slot and normal classes). The `#close` **slot** is
|
|
880
|
+
gone too — v3's slot set is `header | title | description | default | footer`,
|
|
881
|
+
and a custom close control goes inside `#header`, which replaces the whole
|
|
882
|
+
default header including the ✕ (so `hide-close` is not needed alongside it).
|
|
883
|
+
**`description` and `#description` survive**: they were dropped in early v3
|
|
884
|
+
and restored in 3.0.0-beta.19, unchanged from v2 and with `aria-describedby`
|
|
885
|
+
wired again.
|
|
886
|
+
- **`BbOffCanvas`**: the same — `#close` removed, `description` /
|
|
887
|
+
`#description` kept (restored in 3.0.0-beta.19).
|
|
766
888
|
- **`BbBreadcrumbs`**: string `divider` removed (slot-driven now);
|
|
767
889
|
`dividerWidth` default changed `5` → `16`.
|
|
768
890
|
- **`BbPagination`**: `loading` removed.
|
|
@@ -837,6 +959,15 @@ is the complete set — a class-by-class diff of the v2 stylesheet against v3
|
|
|
837
959
|
leaves nothing else orphaned. All of it is **silent**: a selector on a class
|
|
838
960
|
nobody emits matches nothing and throws nothing.
|
|
839
961
|
|
|
962
|
+
One caution when auditing on your own: absence from `styles.css` answers _"is
|
|
963
|
+
it styled"_, not _"is it emitted"_. Some classes carry no library rule but are
|
|
964
|
+
still rendered as styling hooks for you (`.bb-base-input-container__hint-text`
|
|
965
|
+
is one: its wrapper `__hint-wrap` carries the rules, the inner text node is
|
|
966
|
+
bare) — those are correct targets and correctly
|
|
967
|
+
absent from this table, which maps only classes that moved or died. Before
|
|
968
|
+
filing a class as removed, check the component's markup, not just the
|
|
969
|
+
stylesheet.
|
|
970
|
+
|
|
840
971
|
**Input chrome**
|
|
841
972
|
|
|
842
973
|
| v2 | v3 |
|
|
@@ -881,6 +1012,23 @@ v2 had no full-width tab strip, so apps hand-rolled one (commonly a
|
|
|
881
1012
|
`.bb-tabs--block` / `.bb-tabs-list--block` and gives the triggers equal widths.
|
|
882
1013
|
Delete the hand-rolled modifier rather than porting it.
|
|
883
1014
|
|
|
1015
|
+
**BbTable** — no class was renamed, but the markup under `.bb-table` is no
|
|
1016
|
+
longer a `<table>`: it is a CSS grid of `<div>`s carrying ARIA roles. Every
|
|
1017
|
+
**element** selector on it (`table`, `thead`, `tbody`, `tfoot`, `caption`,
|
|
1018
|
+
`tr`, `th`, `td`, `colgroup`/`col`) matches nothing in v3 — silently. The
|
|
1019
|
+
classes all survive; four containers and the roles are the translation:
|
|
1020
|
+
|
|
1021
|
+
| v2 element | v3 selector |
|
|
1022
|
+
| ------------------------------------- | -------------------------------------------------------------------------------------------- |
|
|
1023
|
+
| `table` / `thead` / `tbody` / `tfoot` | `.bb-table__table` / `.bb-table__head` / `.bb-table__body` / `.bb-table__foot` |
|
|
1024
|
+
| `caption` | `.bb-table-caption` |
|
|
1025
|
+
| `tr` / `th` / `td` | `[role=row]` / `[role=columnheader]` / `[role=cell]` (or the `.bb-table-*` row/cell classes) |
|
|
1026
|
+
| `colgroup` / `col` | gone — `columns[].width` |
|
|
1027
|
+
|
|
1028
|
+
Full table, the `.table-flush` idiom rewrite, the `#thead`/`#tbody`/`#tfoot`
|
|
1029
|
+
markup contract and the layout drift that comes with the substrate:
|
|
1030
|
+
[bb-table.md](./components/bb-table.md#the-table-is-a-css-grid-not-a-table-v3-beta-2026-08-26).
|
|
1031
|
+
|
|
884
1032
|
**Everything else**
|
|
885
1033
|
|
|
886
1034
|
| v2 | v3 |
|
|
@@ -914,9 +1062,13 @@ The date **input**'s own field tree (`.bb-base-date-picker-input__field`,
|
|
|
914
1062
|
**Removed with no counterpart:** `.bb-base-dialog--compact`,
|
|
915
1063
|
`.bb-offcanvas--compact`, `.bb-base-textarea--compact` (compact now lives on
|
|
916
1064
|
`.common-input-wrapper--compact`), `.bb-base-select--active` / `--compact` /
|
|
917
|
-
`__inner-wrapper` / `__input-container` (the select activator
|
|
918
|
-
nearest hooks are `.bb-base-select__activator`, `__value`,
|
|
919
|
-
`--shown` survives
|
|
1065
|
+
`__inner-wrapper` / `__input-container` / `__text-input` (the select activator
|
|
1066
|
+
was rebuilt — nearest hooks are `.bb-base-select__activator`, `__value`,
|
|
1067
|
+
`__display-value`; `--shown` survives. `__text-input` was v2's combobox typing
|
|
1068
|
+
field inside the activator; v3's activator is a `type="button"` overlay with no
|
|
1069
|
+
typable field, and typing moved into the panel's
|
|
1070
|
+
`.bb-select-popover__search-input` — restyle that instead, knowing it now sits
|
|
1071
|
+
in the popover, not the field), `.bb-base-rating__option--highlighted` (v3 uses
|
|
920
1072
|
`--filled` / `--empty`), `.bb-progress--horizontal` (`.bb-progress` /
|
|
921
1073
|
`.bb-progress-bar` are the blocks), `.bb-ratio` (component removed).
|
|
922
1074
|
|
|
@@ -928,23 +1080,27 @@ nested-table column alignment. They all dropped the `bb-` prefix, and every one
|
|
|
928
1080
|
of them is consumed through `var(name, fallback)`, so a v2 name silently
|
|
929
1081
|
resolves to the fallback instead of failing.
|
|
930
1082
|
|
|
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`
|
|
1083
|
+
| v2 | v3 |
|
|
1084
|
+
| ----------------------------------------------------- | ----------------------------------------------------------------------------------------- |
|
|
1085
|
+
| `--bb-table-{id}-track-{key}` | `--table-{id}-track-{key}` |
|
|
1086
|
+
| `--bb-table-offset-start` / `-end` | `--offset-start` / `--offset-end` |
|
|
1087
|
+
| `--bb-table-offset-internal-start` / `-end` | `--offset-internal-start` / `--offset-internal-end` |
|
|
1088
|
+
| `--bb-table-fill` | **removed in 3.0.0** (briefly `--fill` in the betas; the grid substrate has no fill loop) |
|
|
1089
|
+
| `--bb-table-natural-width` | **removed in 3.0.0** (briefly `--natural-width` in the betas) |
|
|
1090
|
+
| `--bb-select-popover-width` (on `.bb-select-popover`) | `--w` — and the supported path is now the `width` prop, not a CSS override |
|
|
1091
|
+
| `--bb-icon-dimensions-w` (on `.bb-icon`) | `--w` |
|
|
1092
|
+
| `--bb-breadcrumbs-flex-basis` / `-flex-grow` | `--flex-basis` / `--flex-grow` |
|
|
1093
|
+
| `--bb-picker-preview-color` | `--picker-preview-color` |
|
|
942
1094
|
|
|
943
1095
|
A regex matching the old shape (`/--bb-table-[\w-]+-track/`) matches nothing in
|
|
944
1096
|
v3. Search your app for `--bb-table-`, `--bb-select-popover-`,
|
|
945
1097
|
`--bb-icon-dimensions-`, `--bb-breadcrumbs-` and `--bb-picker-` — none of those
|
|
946
1098
|
names exist in v3 and all of them fail quietly. `--available-height`,
|
|
947
|
-
`--inner-width
|
|
1099
|
+
`--inner-width`, `--overlay-min-height`, `--bb-table-fill` and
|
|
1100
|
+
`--bb-table-natural-width` were dropped outright — the last two because
|
|
1101
|
+
`BbTable` is a CSS grid in 3.0.0 and the fixed-layout self-correction they fed
|
|
1102
|
+
no longer exists (see
|
|
1103
|
+
[bb-table.md](./components/bb-table.md#--fill-and---natural-width-are-removed-not-renamed)).
|
|
948
1104
|
|
|
949
1105
|
If you re-published track variables by hand to align a deeply nested table,
|
|
950
1106
|
delete that code: `inherit-column-widths` takes a **table id**
|
|
@@ -1013,6 +1169,16 @@ Nothing here fails to compile — these change what existing code does.
|
|
|
1013
1169
|
branch's children are now `inert` (out of the Tab order). Tests or CSS
|
|
1014
1170
|
keyed on the removed roles match nothing — see
|
|
1015
1171
|
[bb-tree.md](./components/bb-tree.md).
|
|
1172
|
+
13. **`BbTable` is a CSS grid, not a `<table>`.** Column widths hold their
|
|
1173
|
+
overflow threshold, wrap floor and frozen widths exactly, but leftover
|
|
1174
|
+
space is shared equally between auto columns rather than proportionally
|
|
1175
|
+
to content, and a few table-only tricks stop working (`max-width: 0` for
|
|
1176
|
+
ellipsis collapses the cell). Copying rows into a spreadsheet pastes one
|
|
1177
|
+
value per line, and a printed table no longer repeats its header on each
|
|
1178
|
+
page. `#thead`/`#tbody`/`#tfoot` take `<div role="row">` rows, never
|
|
1179
|
+
`<tr>`. Requires subgrid (Chrome/Edge 117, Firefox 71, Safari 16) — no
|
|
1180
|
+
fallback. Full detail and the selector translation in
|
|
1181
|
+
[bb-table.md](./components/bb-table.md#the-table-is-a-css-grid-not-a-table-v3-beta-2026-08-26).
|
|
1016
1182
|
|
|
1017
1183
|
## 7. Class overrides → variants
|
|
1018
1184
|
|
|
@@ -1046,8 +1212,12 @@ screenshot; do not assume. Two consequences before you start:
|
|
|
1046
1212
|
`variant="none"`; it is the one value that emits no variant class.
|
|
1047
1213
|
- **A name that collides with a v3 built-in is the dangerous case, not the easy
|
|
1048
1214
|
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
|
-
|
|
1215
|
+
converting to the same-named `variant` hands that look to the library — and
|
|
1216
|
+
registering the name does **not** take it back: registration is type-only
|
|
1217
|
+
(§4), the built-in skin stays in `styles.css`. Keep your look by winning the
|
|
1218
|
+
cascade over the library's skin rules — author at block+modifier and load
|
|
1219
|
+
after `styles.css` (§4 case 2 has the specificity detail) — or convert to a
|
|
1220
|
+
non-colliding custom name.
|
|
1051
1221
|
|
|
1052
1222
|
### Finding them
|
|
1053
1223
|
|
|
@@ -1067,17 +1237,17 @@ rg -n 'class="bb-(button|badge|alert|toast-message|tooltip|indicator)\b' --type
|
|
|
1067
1237
|
|
|
1068
1238
|
### Correcting them
|
|
1069
1239
|
|
|
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_.
|
|
1240
|
+
| Found | Rewrite as |
|
|
1241
|
+
| --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1242
|
+
| `<BbButton class="bb-button--outline">` | `<BbButton variant="outline">` (same for `secondary`, `ghost`, `destructive`, `link`) |
|
|
1243
|
+
| `<BbAlert class="bb-alert--warning">` / v2 `theme="warning"` | `<BbAlert variant="warning">` |
|
|
1244
|
+
| `class="bb-badge bb-badge--secondary"` on a `<span>` | `<BbBadge variant="secondary">` — the real component, not markup cosplay |
|
|
1245
|
+
| `bb-toast-message--success` styling / v2 `theme` on toasts | `toast({ variant: 'success' })` |
|
|
1246
|
+
| `bb-tooltip--destructive` | `<BbTooltip variant="destructive">` / `v-bb-tooltip="{ text, variant: 'destructive' }"` |
|
|
1247
|
+
| 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"`. |
|
|
1248
|
+
| 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. |
|
|
1249
|
+
| 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. |
|
|
1250
|
+
| A class that overrides _layout_, not look (widths, margins) | Leave it — classes remain the right tool for layout; variants own _appearance semantics_. |
|
|
1081
1251
|
|
|
1082
1252
|
Rule of thumb: if the class name encodes a **meaning** (state, emphasis,
|
|
1083
1253
|
severity), it should be a variant; if it encodes **geometry**, it stays a
|
|
@@ -1156,6 +1326,7 @@ rg -n -- '--bb-(contrasting|hint|icon-color|primary-(base|dark)|panel-(light|dar
|
|
|
1156
1326
|
rg -n -- '--bb-ring-opacity' # survives by name; every value must now carry a % (section 3)
|
|
1157
1327
|
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-container__input|bb-base-(checkbox|radio|switch)-container|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)
|
|
1158
1328
|
rg -n 'bb-color-palette__' # → .bb-base-color-palette__*; only __popover survives under the old name
|
|
1329
|
+
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
1330
|
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>
|
|
1160
1331
|
```
|
|
1161
1332
|
|