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
package/dist/ai/BbSelect.md
CHANGED
|
@@ -128,9 +128,13 @@ markup needed:
|
|
|
128
128
|
the field never shows amber while it has an error.
|
|
129
129
|
- **Form participation**: `name` renders hidden inputs carrying the selection
|
|
130
130
|
(one per value; non-string values are JSON-stringified), so the select posts
|
|
131
|
-
in a plain HTML form
|
|
132
|
-
|
|
133
|
-
the
|
|
131
|
+
in a plain HTML form. **`required` does NOT give you native constraint
|
|
132
|
+
validation**: the HTML spec bars `required` on `input[type=hidden]` from
|
|
133
|
+
constraint validation, so the browser will never block submission on an empty
|
|
134
|
+
select (`BbBaseSelect.vue:432` says so in its own comment). `required` is kept
|
|
135
|
+
for form introspection and for the asterisk. Gate submission with `errors` /
|
|
136
|
+
`has-errors`, or with the validated entrypoint. `autocomplete` / `autofocus`
|
|
137
|
+
forward to the control.
|
|
134
138
|
- **Affixes**: `prepend:icon` / `append:icon` place icons in the control —
|
|
135
139
|
`append:icon` replaces the default chevron (there is no `#chevron` slot).
|
|
136
140
|
- **Value display**: `placeholder` shows when a _single-mode_ select is empty.
|
|
@@ -609,8 +613,10 @@ later responses don't include them — no need to merge them into every response
|
|
|
609
613
|
`prefill` controls **when the first load happens**:
|
|
610
614
|
|
|
611
615
|
- `'interaction'` (default) — on the first open.
|
|
612
|
-
- `true` — immediately on mount, and during SSR
|
|
613
|
-
|
|
616
|
+
- `true` — immediately on mount, and during SSR **on hosts that can carry the
|
|
617
|
+
result to the client** (Nuxt does; see
|
|
618
|
+
[SSR prefill](./guides/ssr-prefill.md)), so the panel is warm on hydration.
|
|
619
|
+
Everywhere else the load happens on the client, right after mount.
|
|
614
620
|
- `false` — **search-first**: nothing loads until the user types. Opening is not
|
|
615
621
|
a search, so the panel opens empty and shows a _"search to begin"_ hint until
|
|
616
622
|
the first query. Use it when the result set is too big or too costly to browse
|
|
@@ -1068,10 +1074,12 @@ const role = ref<string | null>(null);
|
|
|
1068
1074
|
|
|
1069
1075
|
### Custom option rows
|
|
1070
1076
|
|
|
1071
|
-
The `#option` slot replaces the
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1077
|
+
The `#option` slot replaces the row's **text** — use it for avatars, secondary
|
|
1078
|
+
text or metadata. It exposes the raw `item`, the resolved `text` and `value`,
|
|
1079
|
+
plus `selected` / `focused` / `disabled` / `loading` / `hasErrors` flags and the
|
|
1080
|
+
row `index`. The selection check is not yours to redraw: it renders outside the
|
|
1081
|
+
slot, so a custom row keeps it (`selected` is there for rows that want to show
|
|
1082
|
+
the state some _other_ way, not for drawing a second check). Rows are fixed-height (the list is virtualized): if
|
|
1075
1083
|
your markup is taller than the default 28px (24px compact; 44px / 36px inside
|
|
1076
1084
|
the adaptive sheet), set `item-height` to match — and `header-height` for
|
|
1077
1085
|
grouped headers (defaults 32px / 24px compact; 36px / 32px in the sheet). The
|
|
@@ -1148,11 +1156,91 @@ const assignee = ref<string | null>(null);
|
|
|
1148
1156
|
</script>
|
|
1149
1157
|
```
|
|
1150
1158
|
|
|
1159
|
+
### Custom chips
|
|
1160
|
+
|
|
1161
|
+
In `multiple` mode each selection renders as a badge. The `#chip` slot replaces
|
|
1162
|
+
that badge outright — a colored label, an avatar plus a name, anything — and
|
|
1163
|
+
receives `{ item, text, value, disabled, deselect }`. `item` is the raw entry
|
|
1164
|
+
from `items` (where a per-selection color or avatar lives), `disabled` is `true`
|
|
1165
|
+
while the control is `disabled` or `readonly` (render no remove affordance —
|
|
1166
|
+
`deselect` refuses anyway), and `deselect` drops just this value from the model.
|
|
1167
|
+
|
|
1168
|
+
Custom chips need none of the library's class names: the chips row supplies the
|
|
1169
|
+
spacing and keeps them from shrinking. The slot is not called in `comma` mode
|
|
1170
|
+
(there are no chips to replace) nor for the collapsed "+N" summary that appears
|
|
1171
|
+
once the chips outgrow the field — keep chips compact, or raise
|
|
1172
|
+
`max-selected-labels`.
|
|
1173
|
+
|
|
1174
|
+
**Labels as colored chips**
|
|
1175
|
+
|
|
1176
|
+
```vue
|
|
1177
|
+
<template>
|
|
1178
|
+
<div class="grid max-w-sm gap-3 rounded-[var(--bb-radius)] border p-3">
|
|
1179
|
+
<BbSelect
|
|
1180
|
+
v-model="tags"
|
|
1181
|
+
clearable
|
|
1182
|
+
item-text="label"
|
|
1183
|
+
item-value="value"
|
|
1184
|
+
:items="tagItems"
|
|
1185
|
+
label="Labels"
|
|
1186
|
+
multiple
|
|
1187
|
+
placeholder="Add labels"
|
|
1188
|
+
>
|
|
1189
|
+
<template #option="{ item, text }">
|
|
1190
|
+
<span class="flex w-full items-center gap-2">
|
|
1191
|
+
<span
|
|
1192
|
+
class="size-2 shrink-0 rounded-full"
|
|
1193
|
+
:style="{ background: item.color }"
|
|
1194
|
+
></span>
|
|
1195
|
+
<span class="min-w-0 flex-1 truncate">{{ text }}</span>
|
|
1196
|
+
</span>
|
|
1197
|
+
</template>
|
|
1198
|
+
<!-- The chip slot replaces the default badge for each selection. It
|
|
1199
|
+
hands over the raw `item` (here: the label's own color), the resolved
|
|
1200
|
+
`text` / `value`, a `disabled` flag that is true while the control is
|
|
1201
|
+
disabled or readonly, and `deselect` — which drops just this value. -->
|
|
1202
|
+
<template #chip="{ item, text, disabled, deselect }">
|
|
1203
|
+
<BbBadge
|
|
1204
|
+
:clearable="!disabled"
|
|
1205
|
+
size="lg"
|
|
1206
|
+
:style="{
|
|
1207
|
+
'--bg': `color-mix(in oklab, ${item.color} 15%, transparent)`,
|
|
1208
|
+
'--color': 'var(--bb-text)',
|
|
1209
|
+
}"
|
|
1210
|
+
@click:clear="deselect"
|
|
1211
|
+
>
|
|
1212
|
+
<span
|
|
1213
|
+
class="size-2 rounded-full"
|
|
1214
|
+
:style="{ background: item.color }"
|
|
1215
|
+
></span>
|
|
1216
|
+
{{ text }}
|
|
1217
|
+
</BbBadge>
|
|
1218
|
+
</template>
|
|
1219
|
+
</BbSelect>
|
|
1220
|
+
</div>
|
|
1221
|
+
</template>
|
|
1222
|
+
<script setup lang="ts">
|
|
1223
|
+
import { ref } from 'vue';
|
|
1224
|
+
import { BbBadge, BbSelect } from 'bitboss-ui';
|
|
1225
|
+
|
|
1226
|
+
type Label = { label: string; value: string; color: string };
|
|
1227
|
+
|
|
1228
|
+
const tagItems: Label[] = [
|
|
1229
|
+
{ label: 'Bug', value: 'bug', color: '#ef4444' },
|
|
1230
|
+
{ label: 'Enhancement', value: 'enhancement', color: '#0ea5e9' },
|
|
1231
|
+
{ label: 'Documentation', value: 'documentation', color: '#8b5cf6' },
|
|
1232
|
+
{ label: 'Good first issue', value: 'good-first-issue', color: '#22c55e' },
|
|
1233
|
+
];
|
|
1234
|
+
|
|
1235
|
+
const tags = ref<string[]>(['bug']);
|
|
1236
|
+
</script>
|
|
1237
|
+
```
|
|
1238
|
+
|
|
1151
1239
|
### Slots around the input
|
|
1152
1240
|
|
|
1153
1241
|
Beyond the panel slots, the field itself is extensible:
|
|
1154
1242
|
|
|
1155
|
-
- `#label` replaces the label text; receives `{ text, hasErrors }`.
|
|
1243
|
+
- `#label` replaces the label text; receives `{ text, hasErrors, hasWarning }`.
|
|
1156
1244
|
- `#prefix` / `#suffix` render inline adornments inside the field (no scope) —
|
|
1157
1245
|
currency symbols, units.
|
|
1158
1246
|
- `#prepend` / `#append` render inside the field wrapper, before/after the
|
|
@@ -1212,6 +1300,14 @@ Shipped behavior — never reimplement it:
|
|
|
1212
1300
|
library default) — `direction="horizontal"` gives a label-beside-field row.
|
|
1213
1301
|
Only `floating`/`inside` label modes force the vertical layout, since they
|
|
1214
1302
|
embed the label in the field itself.
|
|
1303
|
+
- **A long `placeholder` or a long selected label never widens the control's
|
|
1304
|
+
track.** The trigger is a button, not an `<input>`, so the placeholder is
|
|
1305
|
+
real text rather than a paint-only `::placeholder` — but the field's minimum
|
|
1306
|
+
size is capped so that text cannot become the floor of a grid or flex track.
|
|
1307
|
+
Put a select with a paragraph-length placeholder in
|
|
1308
|
+
`grid-template-columns: repeat(3, 1fr)` and you still get three equal
|
|
1309
|
+
columns, with the text ellipsised inside its field. You do **not** need
|
|
1310
|
+
`min-w-0` on the item or `minmax(0, 1fr)` on the track to get this.
|
|
1215
1311
|
|
|
1216
1312
|
### Adaptive mobile sheet
|
|
1217
1313
|
|
|
@@ -1243,9 +1339,13 @@ From the vite/nuxt plugin options:
|
|
|
1243
1339
|
|
|
1244
1340
|
Platform notes:
|
|
1245
1341
|
|
|
1246
|
-
- **SSR / Nuxt**: `prefill: true` providers
|
|
1247
|
-
|
|
1248
|
-
|
|
1342
|
+
- **SSR / Nuxt**: under `bitboss-ui/nuxt`, `prefill: true` providers run in
|
|
1343
|
+
`onServerPrefetch` AND their result travels in the Nuxt payload, so the client
|
|
1344
|
+
hydrates with the options already in hand and never re-requests them. Under any
|
|
1345
|
+
other SSR host the provider does **not** run on the server at all — the server
|
|
1346
|
+
emits the placeholder and the client loads on mount, which keeps hydration
|
|
1347
|
+
clean. Keep providers isomorphic (no `window` access) and have them return
|
|
1348
|
+
plain, serializable rows. See [SSR prefill](./guides/ssr-prefill.md).
|
|
1249
1349
|
- **Plain HTML forms / Inertia form posts**: give the select a `name` — hidden
|
|
1250
1350
|
inputs carry the values (JSON-stringified when not strings), and `required`
|
|
1251
1351
|
participates in native validation.
|
|
@@ -1346,58 +1446,58 @@ Platform notes:
|
|
|
1346
1446
|
|
|
1347
1447
|
| Prop | Type | Default | Required | Description |
|
|
1348
1448
|
| --- | --- | --- | --- | --- |
|
|
1349
|
-
| `adaptive` | `boolean \| undefined` | `
|
|
1449
|
+
| `adaptive` | `boolean \| undefined` | ``config.adaptive` (`true`)` | | When `true`, the options panel opens as a bottom off-canvas sheet on mobile viewports instead of a floating popover; on desktop it stays a popover. When unset, falls back to the global `config.adaptive`. |
|
|
1350
1450
|
| `append:icon` | `string \| undefined` | | | Name of the icon to be added at the end of the input. |
|
|
1351
1451
|
| `autocomplete` | `string \| undefined` | | | Guides to the browser as to the type of information expected in the field. |
|
|
1352
1452
|
| `autofocus` | `Booleanish \| undefined` | | | Sets autofocus on page load. |
|
|
1353
|
-
| `clearable` | `boolean \| undefined` |
|
|
1354
|
-
| `comma` | `boolean \| undefined` |
|
|
1355
|
-
| `compact` | `boolean \| undefined` |
|
|
1453
|
+
| `clearable` | `boolean \| undefined` | `false` | | Displays a clear button when the input has a value and is being interacted with. |
|
|
1454
|
+
| `comma` | `boolean \| undefined` | `false` | | Sets the display model for selected values to a list of comma separated string. In this mode the user cannot deselect an option by pressing the close button. |
|
|
1455
|
+
| `compact` | `boolean \| undefined` | `false` | | Sets the component in a compact mode. |
|
|
1356
1456
|
| `dependencies` | `unknown[] \| undefined` | | | Defines an array of dependencies that will trigger actions in the component upon change. |
|
|
1357
|
-
| `depsDebounceTime` | `number \| undefined` |
|
|
1457
|
+
| `depsDebounceTime` | `number \| undefined` | `0` | | Timeout used to debounce response to changes to dependencies. |
|
|
1358
1458
|
| `description` | `string \| undefined` | | | Descriptive text displayed below the label and above the input. Unlike the hint it is always visible, and it is linked to the input via `aria-describedby` (after any `errors` / `warnings`, before the `hint`). |
|
|
1359
1459
|
| `direction` | `InputDirection \| undefined` | | | Direction of the layout of the component. Can either be a predefined value or a pattern separated by a space like `xx xxxxx`. |
|
|
1360
|
-
| `disabled` | `boolean \| undefined` |
|
|
1361
|
-
| `disableWriting` | `boolean \| "mobile" \| "desktop" \| undefined` |
|
|
1362
|
-
| `enforceCoherence` | `boolean \| undefined` |
|
|
1460
|
+
| `disabled` | `boolean \| undefined` | `false` | | Disables the component. |
|
|
1461
|
+
| `disableWriting` | `boolean \| "mobile" \| "desktop" \| undefined` | `false` | | Controls whether the search input is shown inside the dropdown panel. Use `'mobile'` / `'desktop'` to hide it on that platform only. |
|
|
1462
|
+
| `enforceCoherence` | `boolean \| undefined` | `false` | | If coherence is enforced the input cannot have a modelValue that is incoherent with its current items. modelValue will be reset upon incoherence. |
|
|
1363
1463
|
| `errors` | `string \| string[] \| undefined` | | | Can be a string or an array of string containing the messages to display. They render in an `aria-live="polite"` region (announced when they appear) and, while the list is non-empty, are referenced FIRST from the control's `aria-describedby… |
|
|
1364
|
-
| `filterBy` | `string[] \| undefined` |
|
|
1464
|
+
| `filterBy` | `string[] \| undefined` | `[]` | | Property paths used to filter options when the user types in the search input. When empty (default) options are matched against their display text. When non-empty the provided paths are searched instead of the display text. To disable filte… |
|
|
1365
1465
|
| `groupBy` | `string \| ((item: T) => string \| number \| symbol) \| undefined` | | | Path to item property for grouping options. |
|
|
1366
|
-
| `hasErrors` | `boolean \| undefined` |
|
|
1367
|
-
| `hasWarning` | `boolean \| undefined` |
|
|
1466
|
+
| `hasErrors` | `boolean \| undefined` | `false` | | Define if the component should be in an error state. It usually attaches a CSS class for styling purposes. |
|
|
1467
|
+
| `hasWarning` | `boolean \| undefined` | `false` | | Define if the component should be in a warning state. Same chrome as errors with `--bb-warn`; errors take priority. |
|
|
1368
1468
|
| `headerHeight` | `number \| undefined` | | | Height of group headers in the listbox (px). Defaults to 32px (24px compact; 36px / 32px on mobile viewports). Only applies when `groupBy` is set. An explicit value wins on every viewport. |
|
|
1369
|
-
| `hideLabel` | `boolean \| undefined` |
|
|
1469
|
+
| `hideLabel` | `boolean \| undefined` | `false` | | Visually hides the label of the input while maintaining accessibility. |
|
|
1370
1470
|
| `hint` | `string \| undefined` | | | Text box to be displayed near the input, usually to indicate instructions. |
|
|
1371
1471
|
| `id` | `string \| undefined` | | | The identifier of the component. |
|
|
1372
|
-
| `itemHeight` | `number \| undefined` |
|
|
1472
|
+
| `itemHeight` | `number \| undefined` | `28` | | Height of the options in the listbox (px). Defaults to 28px (24px compact; 44px / 36px on mobile viewports). An explicit value wins on every viewport. |
|
|
1373
1473
|
| `items` | `T[] \| ((query: string, prefill: boolean, modelValue: any) => Promise<T[]>) \| ((query: string, prefill: boolean, modelValue: any) => T[])` | | yes | Used to retrieve items; can be an array or a function. |
|
|
1374
1474
|
| `itemText` | `ItemAccessor<T, string> \| undefined` | | | Defines a path that returns a property of the object to use as text or a function that returns a string. |
|
|
1375
1475
|
| `itemValue` | `ItemAccessor<T> \| undefined` | | | Defines a path that returns a property of the object to use as value or a function that returns any value. |
|
|
1376
1476
|
| `label` | `string` | | yes | Text content of the label of the element. |
|
|
1377
1477
|
| `labelMode` | `"floating" \| "outside" \| "inside" \| undefined` | | | Label rendering mode. |
|
|
1378
1478
|
| `labelPosition` | `"left" \| "center" \| "right" \| undefined` | | | Sets the text alignment of the label. |
|
|
1379
|
-
| `loading` | `boolean \| undefined` |
|
|
1479
|
+
| `loading` | `boolean \| undefined` | `false` | | Sets the component in a loading state, usually triggering some visual styles. |
|
|
1380
1480
|
| `loadingText` | `string \| undefined` | | | String displayed while items are being loaded. |
|
|
1381
1481
|
| `max` | `number \| undefined` | | | Maximum number of selectable items when the multiple flag is set. |
|
|
1382
1482
|
| `maxSelectedLabels` | `number \| undefined` | | | Maximum number of labels shown before collapsing to a count summary. |
|
|
1383
1483
|
| `modelValue` | `any` | | yes | Used by v-model. Can be any serializable type. |
|
|
1384
|
-
| `modelValueDebounceTime` | `number \| undefined` |
|
|
1385
|
-
| `multiple` | `boolean \| undefined` |
|
|
1484
|
+
| `modelValueDebounceTime` | `number \| undefined` | `0` | | Timeout used to debounce response to changes to modelValue. |
|
|
1485
|
+
| `multiple` | `boolean \| undefined` | `false` | | Allows the selection of multiple items. |
|
|
1386
1486
|
| `name` | `string \| undefined` | | | Defines the name of the input. |
|
|
1387
1487
|
| `noDataText` | `string \| undefined` | | | String displayed when there are no items to display. |
|
|
1388
1488
|
| `offCanvasProps` | `Partial<BbOffCanvasProps> \| undefined` | | | Extra props forwarded to the `BbOffCanvas` sheet when `adaptive` is active on mobile. |
|
|
1389
|
-
| `persistentHint` | `boolean \| undefined` |
|
|
1489
|
+
| `persistentHint` | `boolean \| undefined` | `false` | | Keeps the hint displayed. |
|
|
1390
1490
|
| `placeholder` | `string \| undefined` | | | String displayed when there's no data. |
|
|
1391
|
-
| `prefill` | `boolean \| "interaction" \| undefined` | `
|
|
1491
|
+
| `prefill` | `boolean \| "interaction" \| undefined` | `'interaction'` | | Controls when items are pre-loaded. `'interaction'` loads on the first user interaction, `true` loads immediately on mount, `false` is *search-first*: with a provider, nothing is fetched until the user types — opening alone does not load, a… |
|
|
1392
1492
|
| `prepend:icon` | `string \| undefined` | | | Name of the icon to be added at the start of the input. |
|
|
1393
|
-
| `queryDebounceTime` | `number \| undefined` |
|
|
1394
|
-
| `readonly` | `boolean \| undefined` |
|
|
1395
|
-
| `required` | `boolean \| undefined` |
|
|
1396
|
-
| `reverse` | `boolean \| undefined` |
|
|
1493
|
+
| `queryDebounceTime` | `number \| undefined` | `500` | | Time to wait when the user stops writing in the input before querying data. |
|
|
1494
|
+
| `readonly` | `boolean \| undefined` | `false` | | Sets the input in a readonly state. |
|
|
1495
|
+
| `required` | `boolean \| undefined` | `false` | | Sets the input as required. |
|
|
1496
|
+
| `reverse` | `boolean \| undefined` | `false` | | Reverses the layout. Applicable in every direction the order of the label and the input is swapped. |
|
|
1397
1497
|
| `selectable` | `boolean \| ((item: T) => boolean) \| undefined` | `true` | | Defines whether options are selectable. Can be a global boolean that affects all options or a function that accepts an item and returns a boolean that only affects that item. Non-selectable options are rendered disabled. |
|
|
1398
1498
|
| `selectedLabelsFn` | `((count: number) => string) \| undefined` | | | Function that returns a string to be displayed when the number of selected labels is greater than `maxSelectedLabels`. |
|
|
1399
|
-
| `stash` | `boolean \| undefined` |
|
|
1400
|
-
| `transitionDuration` | `number \| undefined` |
|
|
1499
|
+
| `stash` | `boolean \| undefined` | `false` | | Adds a stash to accumulate selected values across searches. |
|
|
1500
|
+
| `transitionDuration` | `number \| undefined` | `250` | | How long the transition has to last in milliseconds. |
|
|
1401
1501
|
| `warnings` | `string \| string[] \| undefined` | | | Warning messages to display beneath the field, in their own `aria-live` region and amber (`--bb-text-warn`). A string or array; a non-empty list implies the warning state. Errors suppress warnings when both are set. While displayed they are… |
|
|
1402
1502
|
|
|
1403
1503
|
## Events
|
|
@@ -1416,6 +1516,7 @@ Platform notes:
|
|
|
1416
1516
|
|
|
1417
1517
|
- `append` — scope: `{ query: string; focus: () => void; close: () => Promise<void>; }` — Content appended inside the input field, after the value area.
|
|
1418
1518
|
- `append-outer` — scope: `{ query: string; close: () => Promise<void>; }` — Content appended outside the input field wrapper.
|
|
1519
|
+
- `chip` — scope: `BbSelectChipSlotProps<T>` — Replaces the default badge rendered for each selection in `multiple` mode. Not called in `comma` mode, nor for the collapsed "+N" summary.
|
|
1419
1520
|
- `footer` — scope: `BbSelectPanelSlotProps` — Content pinned to the bottom of the options panel, below the options list. Rendered in both the desktop popover and the adaptive sheet.
|
|
1420
1521
|
- `group` — scope: `BbSelectGroupSlotProps<T>` — Replaces the default group header rendered above grouped options.
|
|
1421
1522
|
- `header` — scope: `BbSelectPanelSlotProps` — Content pinned to the top of the options panel, above the search field. Rendered in both the desktop popover and the adaptive sheet.
|
|
@@ -216,9 +216,11 @@ const reviewers = ref<string[]>(['ada', 'grace']);
|
|
|
216
216
|
|
|
217
217
|
### Custom option rows
|
|
218
218
|
|
|
219
|
-
The `#option` slot replaces each row — exposing the raw `item`,
|
|
220
|
-
`value`, the row `index`, and `selected` / `focused` /
|
|
221
|
-
flags — so options can carry avatars, badges or secondary
|
|
219
|
+
The `#option` slot replaces each row's **text** — exposing the raw `item`,
|
|
220
|
+
resolved `text` / `value`, the row `index`, and `selected` / `focused` /
|
|
221
|
+
`disabled` / `loading` flags — so options can carry avatars, badges or secondary
|
|
222
|
+
metadata. The selection check renders outside the slot and survives any custom
|
|
223
|
+
markup, so there is no need to redraw it from `selected`. Rows are
|
|
222
224
|
fixed-height and virtualized: if your markup is taller than the default 28px
|
|
223
225
|
(24px compact; 44px / 36px inside the adaptive sheet), set `item-height` to
|
|
224
226
|
match — and `header-height` for grouped headers (32px / 24px compact; 36px /
|
|
@@ -258,16 +260,12 @@ height wins everywhere.
|
|
|
258
260
|
}}</BbBadgeButton>
|
|
259
261
|
</BbBadge>
|
|
260
262
|
</template>
|
|
261
|
-
|
|
263
|
+
<!-- The slot replaces the row's TEXT only: the selection check keeps
|
|
264
|
+
rendering outside it, so custom rows never have to redraw it. -->
|
|
265
|
+
<template #option="{ item, text }">
|
|
262
266
|
<span class="flex w-full items-center gap-2">
|
|
263
267
|
<BbAvatar :alt="text" size="32">{{ item.initials }}</BbAvatar>
|
|
264
268
|
<span class="min-w-0 flex-1 truncate">{{ text }}</span>
|
|
265
|
-
<BbIcon
|
|
266
|
-
v-if="selected"
|
|
267
|
-
class="shrink-0 text-[color:var(--bb-text-muted)]"
|
|
268
|
-
icon="lucide:check"
|
|
269
|
-
:size="14"
|
|
270
|
-
/>
|
|
271
269
|
</span>
|
|
272
270
|
</template>
|
|
273
271
|
</BbSelectPopover>
|
|
@@ -275,13 +273,7 @@ height wins everywhere.
|
|
|
275
273
|
</template>
|
|
276
274
|
<script setup lang="ts">
|
|
277
275
|
import { computed, ref } from 'vue';
|
|
278
|
-
import {
|
|
279
|
-
BbAvatar,
|
|
280
|
-
BbBadge,
|
|
281
|
-
BbBadgeButton,
|
|
282
|
-
BbIcon,
|
|
283
|
-
BbSelectPopover,
|
|
284
|
-
} from 'bitboss-ui';
|
|
276
|
+
import { BbAvatar, BbBadge, BbBadgeButton, BbSelectPopover } from 'bitboss-ui';
|
|
285
277
|
|
|
286
278
|
type Person = { label: string; value: string; initials: string };
|
|
287
279
|
|
|
@@ -406,8 +398,9 @@ const destinationLabel = computed(
|
|
|
406
398
|
### Laziness, prefill and the trigger label
|
|
407
399
|
|
|
408
400
|
`prefill` controls **when the first load happens**: `'interaction'` (default) on
|
|
409
|
-
first open, `true` immediately on mount (and during SSR via `onServerPrefetch
|
|
410
|
-
|
|
401
|
+
first open, `true` immediately on mount (and during SSR via `onServerPrefetch`,
|
|
402
|
+
but only on a host that can transfer the result — see
|
|
403
|
+
[SSR prefill](./guides/ssr-prefill.md)), `false` **search-first** — nothing is fetched until the user types a query.
|
|
411
404
|
Opening the panel is not a search, so it loads nothing; until the first query the
|
|
412
405
|
list shows a _"search to begin"_ hint instead of "no data".
|
|
413
406
|
|
|
@@ -1179,8 +1172,10 @@ const variantFor = (value: Status | null): BadgeVariantType =>
|
|
|
1179
1172
|
With `adaptive` (default: global `config.adaptive`, which is `true`), the panel
|
|
1180
1173
|
opens as a bottom off-canvas sheet on mobile viewports (below
|
|
1181
1174
|
`config.mobileMaxWidth`) instead of a floating popover — same search, options and
|
|
1182
|
-
`#header`/`#footer` slots
|
|
1183
|
-
|
|
1175
|
+
`#header`/`#footer` slots. In **multiple** mode the current selection also shows
|
|
1176
|
+
as removable chips above the search (so picks stay clearable when filtered or
|
|
1177
|
+
scrolled away); single select relies on the listbox checkmark and closes on pick.
|
|
1178
|
+
The surface is **latched per open cycle**: a mid-open resize never swaps
|
|
1184
1179
|
popover ↔ sheet. `off-canvas-props` forwards extra `BbOffCanvas` props to the
|
|
1185
1180
|
sheet (`size`, `draggable`, `fullscreen`, `stack`); `:adaptive="false"` keeps a
|
|
1186
1181
|
floating popover everywhere.
|
|
@@ -1207,9 +1202,13 @@ floating popover everywhere.
|
|
|
1207
1202
|
- **Global config** — `config.adaptive` (default for `adaptive`),
|
|
1208
1203
|
`config.mobileMaxWidth` (the mobile threshold), `config.locale` (the search
|
|
1209
1204
|
field's default accessible name and panel string defaults).
|
|
1210
|
-
- **SSR / Nuxt** — `prefill: true` providers
|
|
1211
|
-
|
|
1212
|
-
|
|
1205
|
+
- **SSR / Nuxt** — under `bitboss-ui/nuxt`, `prefill: true` providers run in
|
|
1206
|
+
`onServerPrefetch` and their result rides the Nuxt payload, so the client
|
|
1207
|
+
hydrates with options already loaded and does not fetch again. On other SSR
|
|
1208
|
+
hosts the provider stays client-side and the server renders the placeholder —
|
|
1209
|
+
deliberately, since server markup the client cannot rebuild is a hydration
|
|
1210
|
+
mismatch. Keep providers isomorphic (no `window` access) and returning plain
|
|
1211
|
+
rows. See [SSR prefill](./guides/ssr-prefill.md).
|
|
1213
1212
|
|
|
1214
1213
|
### Works well with
|
|
1215
1214
|
|
|
@@ -1330,36 +1329,36 @@ floating popover everywhere.
|
|
|
1330
1329
|
| Prop | Type | Default | Required | Description |
|
|
1331
1330
|
| --- | --- | --- | --- | --- |
|
|
1332
1331
|
| `activator` | `Record<string, any> \| HTMLElement \| null \| undefined` | | | External activator element or component ref. When provided, the activator slot is not rendered and event listeners are attached programmatically to the referenced element. |
|
|
1333
|
-
| `adaptive` | `boolean \| undefined` | `
|
|
1332
|
+
| `adaptive` | `boolean \| undefined` | ``config.adaptive` (`true`)` | | When `true`, the panel opens as a bottom off-canvas sheet on mobile viewports instead of a floating popover; on desktop it stays a popover. The sheet reuses the same search field and options list, adding a representation of the current sele… |
|
|
1334
1333
|
| `anchor` | `Record<string, any> \| HTMLElement \| null \| undefined` | `null` | | Override the element used for popover positioning and width measurement. Useful when the focusable activator is narrower than its visual container (e.g. a button inside a wrapper). Falls back to `activatorEl` when omitted. |
|
|
1335
1334
|
| `ariaDescribedby` | `string \| string[] \| undefined` | | | Space-separated IDREF(s) that describe this field for assistive technologies. Accepts either a string or array of ids. |
|
|
1336
1335
|
| `ariaInvalid` | `boolean \| undefined` | `undefined` | | Explicit invalid state for accessibility semantics. Falls back to `hasErrors` when not provided. |
|
|
1337
1336
|
| `autocomplete` | `string \| undefined` | `"off"` | | Browser autocomplete hint for the popover search input. |
|
|
1338
1337
|
| `boundary` | `string \| Record<string, any> \| HTMLElement \| null \| undefined` | | | Constrains the popover to a specific boundary element. |
|
|
1339
|
-
| `clearable` | `boolean \| undefined` |
|
|
1340
|
-
| `compact` | `boolean \| undefined` |
|
|
1338
|
+
| `clearable` | `boolean \| undefined` | `false` | | Shows a clear button inside the search field's icon stack: it takes the lens' place on hover/focus while there is a query or selection to clear, and resets both. Off by default. Leave it off when the component is wrapped by a control that a… |
|
|
1339
|
+
| `compact` | `boolean \| undefined` | `false` | | Apply the compact density variant. |
|
|
1341
1340
|
| `dependencies` | `unknown[] \| undefined` | `[]` | | Additional dependencies that trigger item reloading when changed. |
|
|
1342
1341
|
| `depsDebounceTime` | `number \| undefined` | `0` | | Debounce delay (ms) for dependency-triggered reloads. |
|
|
1343
|
-
| `disabled` | `boolean \| undefined` |
|
|
1344
|
-
| `disableFlip` | `boolean \| undefined` |
|
|
1345
|
-
| `disableWriting` | `boolean \| "mobile" \| "desktop" \| undefined` |
|
|
1346
|
-
| `enforceCoherence` | `boolean \| undefined` |
|
|
1342
|
+
| `disabled` | `boolean \| undefined` | `false` | | Disables the component. |
|
|
1343
|
+
| `disableFlip` | `boolean \| undefined` | `false` | | Disables the automatic flip to the opposite side when the popover would overflow (flipping is on by default). |
|
|
1344
|
+
| `disableWriting` | `boolean \| "mobile" \| "desktop" \| undefined` | `false` | | Controls whether the search input is shown inside the popover panel. Use `'mobile'` to hide the search input on mobile, `'desktop'` to hide it on desktop. |
|
|
1345
|
+
| `enforceCoherence` | `boolean \| undefined` | `false` | | Reset modelValue to `null` or empty array if it no longer matches available items. |
|
|
1347
1346
|
| `filterBy` | `string[] \| undefined` | `[]` | | Property paths used to filter options when the user types in the search input. When empty (default) options are matched against their display text. When non-empty the provided paths are searched instead of the display text. To disable filte… |
|
|
1348
1347
|
| `groupBy` | `string \| ((item: Item) => string \| number \| symbol) \| undefined` | | | Path to item property for grouping options. |
|
|
1349
|
-
| `hasErrors` | `boolean \| undefined` |
|
|
1350
|
-
| `hasWarning` | `boolean \| undefined` |
|
|
1348
|
+
| `hasErrors` | `boolean \| undefined` | `false` | | Marks the component as being in error state. |
|
|
1349
|
+
| `hasWarning` | `boolean \| undefined` | `false` | | Marks the component as being in a warning state. Visually mirrors `hasErrors` but uses `--bb-warn` chrome; errors take priority when both are set. |
|
|
1351
1350
|
| `headerHeight` | `number \| undefined` | | | Height of group headers in the listbox (px). Defaults to 32px (24px compact; 36px / 32px on mobile viewports). Only applies when `groupBy` is set. An explicit value wins on every viewport. |
|
|
1352
1351
|
| `id` | `string \| undefined` | | | Explicit id for the component. Used to generate ids for listbox and options. |
|
|
1353
|
-
| `itemHeight` | `number \| undefined` |
|
|
1354
|
-
| `items` | `Item[] \| ((query: string, prefill: boolean, modelValue: any) => Promise<Item[]>) \| ((query: string, prefill: boolean, modelValue: any) => Item[])` |
|
|
1352
|
+
| `itemHeight` | `number \| undefined` | `28` | | Height of the options in the listbox (px). Defaults to 28px (24px compact; 44px / 36px on mobile viewports). An explicit value wins on every viewport. |
|
|
1353
|
+
| `items` | `Item[] \| ((query: string, prefill: boolean, modelValue: any) => Promise<Item[]>) \| ((query: string, prefill: boolean, modelValue: any) => Item[])` | `[]` | yes | Array of items or function to load them asynchronously. Functions receive `(query, prefill, modelValue)` and can return a promise. `modelValue` is the raw v-model: an array in `multiple` mode, the raw model value (possibly `null`) in single… |
|
|
1355
1354
|
| `itemText` | `ItemAccessor<Item, string> \| undefined` | | | Path to item property for display text or function to extract it. |
|
|
1356
1355
|
| `itemValue` | `ItemAccessor<Item> \| undefined` | | | Path to item property for value or function to extract it. |
|
|
1357
|
-
| `loading` | `boolean \| undefined` |
|
|
1356
|
+
| `loading` | `boolean \| undefined` | `false` | | Display the loading state styles. |
|
|
1358
1357
|
| `loadingText` | `string \| undefined` | | | Message shown while items are being loaded. |
|
|
1359
1358
|
| `max` | `number \| undefined` | `Infinity` | | Maximum number of selectable items (limits selection when `multiple` is true). |
|
|
1360
1359
|
| `modelValue` | `any` | | yes | v-model value. Single value for single select, array for multiple select. |
|
|
1361
1360
|
| `modelValueDebounceTime` | `number \| undefined` | `0` | | Debounce delay (ms) for modelValue change handling. |
|
|
1362
|
-
| `multiple` | `boolean \| undefined` |
|
|
1361
|
+
| `multiple` | `boolean \| undefined` | `false` | | Enable multiple item selection. When true, modelValue must be an array. |
|
|
1363
1362
|
| `noDataText` | `string \| undefined` | | | Message displayed when no items are available. |
|
|
1364
1363
|
| `offCanvasProps` | `Partial<BbOffCanvasProps> \| undefined` | | | Extra props forwarded to the `BbOffCanvas` sheet when `adaptive` is active on mobile (e.g. `size`, `draggable`, `fullscreen`, `stack`). |
|
|
1365
1364
|
| `offset` | `number \| undefined` | `4` | | Distance (px) between the activator and the popover. |
|
|
@@ -1367,11 +1366,11 @@ floating popover everywhere.
|
|
|
1367
1366
|
| `placement` | `Placement \| undefined` | `"bottom"` | | Floating placement of the popover. |
|
|
1368
1367
|
| `prefill` | `boolean \| "interaction" \| undefined` | `"interaction"` | | Controls when items are pre-loaded. `'interaction'` loads on the first user interaction (opening the popover), `true` loads immediately on mount (and during SSR via `onServerPrefetch`), `false` is *search-first*: nothing is fetched until th… |
|
|
1369
1368
|
| `queryDebounceTime` | `number \| undefined` | `500` | | Debounce delay (ms) before triggering search queries after user input stops. |
|
|
1370
|
-
| `readonly` | `boolean \| undefined` |
|
|
1371
|
-
| `searchInputAriaLabel` | `string \| undefined` |
|
|
1369
|
+
| `readonly` | `boolean \| undefined` | `false` | | Prevents opening the popover while keeping the activator accessible. |
|
|
1370
|
+
| `searchInputAriaLabel` | `string \| undefined` | ``t('select.searchLabel')` (`'Search options'`)` | | Accessible label used by the search input rendered inside the popover. Falls back to the localized `select.searchLabel` key when omitted. |
|
|
1372
1371
|
| `selectable` | `boolean \| ((item: Item) => boolean) \| undefined` | `true` | | Defines whether options are selectable. Can be a global boolean that affects all options or a function that accepts an item and returns a boolean that only affects that item. Non-selectable options are rendered disabled. |
|
|
1373
|
-
| `stash` | `boolean \| undefined` |
|
|
1374
|
-
| `transitionDuration` | `number \| undefined` | `
|
|
1372
|
+
| `stash` | `boolean \| undefined` | `false` | | Accumulate selected items across searches instead of replacing them. |
|
|
1373
|
+
| `transitionDuration` | `number \| undefined` | `250` | | Transition duration (ms) for popover show/hide animations. |
|
|
1375
1374
|
| `width` | `string \| number \| undefined` | `"200"` | | Width of the popover in pixels, percentage, or `'auto'`. A bare number is read as pixels — the default is the string `'200'`, not the number `200`. |
|
|
1376
1375
|
|
|
1377
1376
|
## Events
|
package/dist/ai/BbSlider.md
CHANGED
|
@@ -183,10 +183,16 @@ const volume = ref(40);
|
|
|
183
183
|
|
|
184
184
|
### Discrete steps with ticks
|
|
185
185
|
|
|
186
|
-
`ticks`
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
186
|
+
`ticks` lays out one evenly-spaced slot per step. **You draw the mark**: the
|
|
187
|
+
library positions the tick elements but ships no default notch —
|
|
188
|
+
`.bb-base-slider__tick` carries only `position: relative`, and the `tick` slot
|
|
189
|
+
has no fallback content, so `ticks` on its own renders empty spans and looks
|
|
190
|
+
like nothing happened. Fill the `tick` slot (`{ value, percent, active }`) with
|
|
191
|
+
your notch or per-step label, or style `.bb-base-slider__tick` yourself.
|
|
192
|
+
|
|
193
|
+
Add `disable-thumb-translate` so the thumb sits exactly over each tick instead
|
|
194
|
+
of being nudged to stay centred — the two pair naturally when you want a
|
|
195
|
+
stepped, notched slider.
|
|
190
196
|
|
|
191
197
|
**Stepped slider with ticks**
|
|
192
198
|
|
|
@@ -309,8 +315,13 @@ const limit = ref<number | null>(200);
|
|
|
309
315
|
- `label` is required and names the slider; `hide-label` keeps it for assistive
|
|
310
316
|
tech only.
|
|
311
317
|
- `label-mode` is `'outside'` (default) or `'inside'`. `'floating'` is **not
|
|
312
|
-
supported
|
|
313
|
-
|
|
318
|
+
supported** — a slider has no empty/filled state for the label to float
|
|
319
|
+
against — and it is no longer in the type, so a typed template cannot write
|
|
320
|
+
it. It does not throw: an explicit `'floating'` from untyped code warns in
|
|
321
|
+
dev and falls back to `'outside'` (`resolveEnumProp`, the library-wide policy
|
|
322
|
+
that a bad enum token is cosmetic, never fatal). A plugin-level
|
|
323
|
+
`defaultInputLabelMode: 'floating'` degrades to `'outside'` **silently** —
|
|
324
|
+
the consumer made no per-slider choice, so there is nothing to warn about.
|
|
314
325
|
- `direction` (`'horizontal'`, `'vertical'`, `'auto'`, or a pattern like
|
|
315
326
|
`'xx xxxxxx'`), `reverse`, and `label-position` arrange the label against the
|
|
316
327
|
track, exactly as on the other inputs.
|
|
@@ -416,11 +427,15 @@ Works well with:
|
|
|
416
427
|
|
|
417
428
|
### Gotchas and anti-patterns
|
|
418
429
|
|
|
419
|
-
- Don't bind a scalar with `range`
|
|
420
|
-
`
|
|
430
|
+
- Don't bind a scalar with `range` — that one throws at mount
|
|
431
|
+
(`BbBaseSlider.vue:249`). The mirror case is worse because it is **quiet**:
|
|
432
|
+
an array **without** `range` renders a single thumb and silently reads
|
|
433
|
+
`head()`, so the second value is dropped with no warning. Keep the mode and
|
|
434
|
+
the `modelValue` shape in step in both directions.
|
|
421
435
|
- Don't expect `increase`/`decrease` to work in range mode; they are single-value
|
|
422
436
|
only. Drive range thumbs with the keyboard or pointer.
|
|
423
|
-
- Don't set `label-mode="floating"` — it
|
|
437
|
+
- Don't set `label-mode="floating"` — it is not in the type, and at runtime it
|
|
438
|
+
warns and falls back to `'outside'`. Use `'outside'` or `'inside'`.
|
|
424
439
|
- Don't rely on a slider for exact numbers — steps finer than `0.01` round away
|
|
425
440
|
unless you raise `max-precision` to match. Use `BbNumberInput` when the
|
|
426
441
|
precise figure is the point.
|
|
@@ -455,32 +470,32 @@ Works well with:
|
|
|
455
470
|
| Prop | Type | Default | Required | Description |
|
|
456
471
|
| --- | --- | --- | --- | --- |
|
|
457
472
|
| `autofocus` | `Booleanish \| undefined` | | | Sets autofocus on page load. |
|
|
458
|
-
| `compact` | `boolean \| undefined` |
|
|
473
|
+
| `compact` | `boolean \| undefined` | `false` | | Set the component in compact mode. |
|
|
459
474
|
| `description` | `string \| undefined` | | | Descriptive text displayed below the label and above the input. Unlike the hint it is always visible, and it is linked to the input via `aria-describedby` (after any `errors` / `warnings`, before the `hint`). |
|
|
460
475
|
| `direction` | `InputDirection \| undefined` | | | Direction of the layout of the component. Can either be a predefined value or a pattern separated by a space like `xx xxxxx`. |
|
|
461
|
-
| `disabled` | `boolean \| undefined` |
|
|
462
|
-
| `disableThumbTranslate` | `boolean \| undefined` |
|
|
476
|
+
| `disabled` | `boolean \| undefined` | `false` | | Disables the component. |
|
|
477
|
+
| `disableThumbTranslate` | `boolean \| undefined` | `false` | | Disables the proportional thumb translation that keeps the thumb on track (enabled by default). Set it when displaying ticks so they align with less effort. |
|
|
463
478
|
| `errors` | `string \| string[] \| undefined` | | | Can be a string or an array of string containing the messages to display. They render in an `aria-live="polite"` region (announced when they appear) and, while the list is non-empty, are referenced FIRST from the control's `aria-describedby… |
|
|
464
|
-
| `hasErrors` | `boolean \| undefined` |
|
|
465
|
-
| `hasWarning` | `boolean \| undefined` |
|
|
466
|
-
| `hideLabel` | `boolean \| undefined` |
|
|
479
|
+
| `hasErrors` | `boolean \| undefined` | `false` | | Define if the component should be in an error state. It usually attaches a CSS class for styling purposes. |
|
|
480
|
+
| `hasWarning` | `boolean \| undefined` | `false` | | Define if the component should be in a warning state. Same chrome as errors with `--bb-warn`; errors take priority. |
|
|
481
|
+
| `hideLabel` | `boolean \| undefined` | `false` | | Visually hides the label of the input while maintaining accessibility. |
|
|
467
482
|
| `hint` | `string \| undefined` | | | Text box to be displayed near the input, usually to indicate instructions. |
|
|
468
483
|
| `id` | `string \| undefined` | | | The identifier of the component. |
|
|
469
484
|
| `label` | `string` | | yes | Text content of the label of the element. |
|
|
470
485
|
| `labelMode` | `"outside" \| "inside" \| undefined` | | | Label rendering mode. Sliders do not support `floating` labels. |
|
|
471
486
|
| `labelPosition` | `"left" \| "center" \| "right" \| undefined` | | | Sets the text alignment of the label. |
|
|
472
487
|
| `max` | `number \| undefined` | | | Maximum value cap. |
|
|
473
|
-
| `maxPrecision` | `number \| undefined` |
|
|
488
|
+
| `maxPrecision` | `number \| undefined` | `2` | | Maximum decimal places to retain in emitted values. |
|
|
474
489
|
| `min` | `number \| undefined` | | | Minimum value cap. |
|
|
475
490
|
| `modelValue` | `number \| number[] \| null` | | yes | Used by v-model. |
|
|
476
491
|
| `name` | `string \| undefined` | | | Defines the name of the input. |
|
|
477
|
-
| `persistentHint` | `boolean \| undefined` |
|
|
478
|
-
| `range` | `boolean \| undefined` |
|
|
479
|
-
| `readonly` | `boolean \| undefined` |
|
|
480
|
-
| `required` | `boolean \| undefined` |
|
|
481
|
-
| `reverse` | `boolean \| undefined` |
|
|
492
|
+
| `persistentHint` | `boolean \| undefined` | `false` | | Keeps the hint displayed. |
|
|
493
|
+
| `range` | `boolean \| undefined` | `false` | | Set the input as range. modelValue must be an array. |
|
|
494
|
+
| `readonly` | `boolean \| undefined` | `false` | | Sets the input in a readonly state. |
|
|
495
|
+
| `required` | `boolean \| undefined` | `false` | | Sets the input as required. |
|
|
496
|
+
| `reverse` | `boolean \| undefined` | `false` | | Reverses the layout. Applicable in every direction the order of the label and the input is swapped. |
|
|
482
497
|
| `step` | `number \| undefined` | | | The step attribute specifies the granularity that the value must adhere to. |
|
|
483
|
-
| `ticks` | `boolean \| undefined` |
|
|
498
|
+
| `ticks` | `boolean \| undefined` | `false` | | Displays ticks on step. |
|
|
484
499
|
| `warnings` | `string \| string[] \| undefined` | | | Warning messages to display beneath the field, in their own `aria-live` region and amber (`--bb-text-warn`). A string or array; a non-empty list implies the warning state. Errors suppress warnings when both are set. While displayed they are… |
|
|
485
500
|
|
|
486
501
|
## Events
|
|
@@ -497,7 +497,7 @@ const expanded = ref(false);
|
|
|
497
497
|
| `resizeOptions` | `ResizeObserverOptions \| undefined` | | | Options to pass to the ResizeObserver. |
|
|
498
498
|
| `strategy` | `"resize" \| "mutation" \| undefined` | `"resize"` | | Define which strategy to use. By default `'resize'` is used, which means the component will update on resizing. You can also define `'mutation'` to use a MutationObserver. |
|
|
499
499
|
| `tag` | `LayoutTag \| undefined` | `"div"` | | Element rendered as the component's wrapper. |
|
|
500
|
-
| `transitionDuration` | `number \| undefined` | `
|
|
500
|
+
| `transitionDuration` | `number \| undefined` | `250` | | How long the transition has to last in milliseconds |
|
|
501
501
|
|
|
502
502
|
## Events
|
|
503
503
|
|