bitboss-ui 3.0.0-beta.4 → 3.0.0-beta.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +317 -98
- package/bin/bitboss-ui-mcp.mjs +1566 -75
- package/bin/bitboss-ui.mjs +716 -72
- package/dist/ai/BbAccordion.md +178 -56
- package/dist/ai/BbAlert.md +140 -28
- package/dist/ai/BbAsterisk.md +61 -4
- package/dist/ai/BbAvatar.md +194 -53
- package/dist/ai/BbBadge.md +250 -50
- package/dist/ai/BbBadgeButton.md +74 -21
- package/dist/ai/BbBaseButton.md +132 -51
- package/dist/ai/BbBaseCheckboxIcon.md +118 -26
- package/dist/ai/BbBaseRadioIcon.md +115 -26
- package/dist/ai/BbBaseSwitchIcon.md +123 -28
- package/dist/ai/BbBreadcrumbs.md +221 -51
- package/dist/ai/BbButton.md +389 -107
- package/dist/ai/BbCalendar.md +667 -0
- package/dist/ai/BbCheckbox.md +242 -80
- package/dist/ai/BbCheckboxGroup.md +575 -66
- package/dist/ai/BbCollapsible.md +158 -39
- package/dist/ai/BbColorInput.md +322 -82
- package/dist/ai/BbColorPalette.md +261 -61
- package/dist/ai/BbConfirm.md +220 -51
- package/dist/ai/BbConfirmPortal.md +1 -1
- package/dist/ai/BbDatePicker.md +272 -37
- package/dist/ai/BbDatePickerInput.md +321 -92
- package/dist/ai/BbDialog.md +492 -87
- package/dist/ai/BbDropdown.md +1182 -104
- package/dist/ai/BbDropdownButton.md +239 -61
- package/dist/ai/BbDropdownGroup.md +5 -5
- package/dist/ai/BbDropzone.md +140 -36
- package/dist/ai/BbForm.md +1165 -40
- package/dist/ai/BbIcon.md +100 -33
- package/dist/ai/BbIndicator.md +79 -12
- package/dist/ai/BbNumberInput.md +257 -87
- package/dist/ai/BbOffCanvas.md +396 -91
- package/dist/ai/BbPagination.md +199 -32
- package/dist/ai/BbPopover.md +219 -54
- package/dist/ai/BbProgress.md +137 -71
- package/dist/ai/BbPtScope.md +136 -0
- package/dist/ai/BbRadio.md +234 -43
- package/dist/ai/BbRadioGroup.md +529 -91
- package/dist/ai/BbRating.md +243 -61
- package/dist/ai/BbSelect.md +690 -120
- package/dist/ai/BbSelectPopover.md +434 -122
- package/dist/ai/BbSlider.md +275 -79
- package/dist/ai/BbSmoothHeight.md +142 -34
- package/dist/ai/BbSpinner.md +179 -81
- package/dist/ai/BbSwitch.md +249 -63
- package/dist/ai/BbSwitchGroup.md +394 -65
- package/dist/ai/BbTable.md +1666 -222
- package/dist/ai/BbTabs.md +898 -178
- package/dist/ai/BbTabsList.md +81 -7
- package/dist/ai/BbTabsPanels.md +77 -0
- package/dist/ai/BbTabsRoot.md +16 -15
- package/dist/ai/BbTag.md +256 -76
- package/dist/ai/BbTextInput.md +480 -102
- package/dist/ai/BbTextarea.md +310 -96
- package/dist/ai/BbTimePicker.md +159 -24
- package/dist/ai/BbTimePickerInput.md +277 -46
- package/dist/ai/BbToast.md +286 -40
- package/dist/ai/BbToastPortal.md +3 -3
- package/dist/ai/BbTooltip.md +187 -34
- package/dist/ai/BbTree.md +260 -85
- package/dist/ai/ChipsBox.md +43 -2
- package/dist/ai/ClearableButton.md +12 -0
- package/dist/ai/CommaBox.md +2 -1
- package/dist/ai/CommonField.md +63 -0
- package/dist/ai/CommonFieldInput.md +90 -0
- package/dist/ai/CommonPopover.md +17 -12
- package/dist/ai/CommonTimeSelector.md +63 -0
- package/dist/ai/ErrorIcon.md +20 -0
- package/dist/ai/FlatListBox.md +41 -11
- package/dist/ai/GroupedListBox.md +42 -12
- package/dist/ai/ListBox.md +46 -11
- package/dist/ai/OptionsContainer.md +13 -10
- package/dist/ai/WarningIcon.md +20 -0
- package/dist/ai/changelog.json +4025 -141
- package/dist/ai/components.json +51872 -10136
- package/dist/ai/composables/useBbConfig.md +72 -11
- package/dist/ai/composables/useBbDropdownContext.md +168 -0
- package/dist/ai/composables/useBbFormContext.md +51 -24
- package/dist/ai/composables/useBbFormField.md +134 -0
- package/dist/ai/composables/useBbTableContext.md +41 -19
- package/dist/ai/composables/useConfirm.md +16 -8
- package/dist/ai/composables/useCountdown.md +1 -1
- package/dist/ai/composables/useId.md +10 -10
- package/dist/ai/composables/useMobile.md +17 -10
- package/dist/ai/composables/useToast.md +25 -19
- package/dist/ai/design-tokens.json +940 -0
- package/dist/ai/design-tokens.manifest.yaml +175 -0
- package/dist/ai/guides/agent-contract.md +168 -22
- package/dist/ai/guides/ai-router.md +79 -40
- package/dist/ai/guides/app-layout.md +8 -4
- package/dist/ai/guides/coherence-playbook.md +8 -8
- package/dist/ai/guides/component-picker.md +42 -34
- package/dist/ai/guides/design-language.md +274 -97
- package/dist/ai/guides/design-tokens.md +493 -105
- package/dist/ai/guides/fetch-items-playbook.md +22 -16
- package/dist/ai/guides/icons-policy.md +67 -35
- package/dist/ai/guides/inertia-helpers.md +4 -1
- package/dist/ai/guides/inline-edit-playbook.md +13 -6
- package/dist/ai/guides/installation-and-plugin-setup.md +817 -73
- package/dist/ai/guides/migration/components/bb-accordion.md +37 -0
- package/dist/ai/guides/migration/components/bb-alert.md +2 -2
- package/dist/ai/guides/migration/components/bb-avatar.md +13 -14
- package/dist/ai/guides/migration/components/bb-badge.md +5 -5
- package/dist/ai/guides/migration/components/bb-breadcrumbs.md +9 -8
- package/dist/ai/guides/migration/components/bb-button.md +80 -20
- package/dist/ai/guides/migration/components/bb-checkbox-group.md +116 -29
- package/dist/ai/guides/migration/components/bb-checkbox.md +53 -10
- package/dist/ai/guides/migration/components/bb-chip.md +6 -6
- package/dist/ai/guides/migration/components/bb-collapsible.md +5 -5
- package/dist/ai/guides/migration/components/bb-color-input.md +5 -5
- package/dist/ai/guides/migration/components/bb-color-palette.md +16 -9
- package/dist/ai/guides/migration/components/bb-date-picker-input.md +45 -35
- package/dist/ai/guides/migration/components/bb-dialog.md +69 -36
- package/dist/ai/guides/migration/components/bb-dropdown-button.md +7 -1
- package/dist/ai/guides/migration/components/bb-dropdown.md +31 -8
- package/dist/ai/guides/migration/components/bb-dropzone.md +8 -0
- package/dist/ai/guides/migration/components/bb-icon.md +7 -7
- package/dist/ai/guides/migration/components/bb-intersection.md +1 -1
- package/dist/ai/guides/migration/components/bb-offcanvas.md +29 -31
- package/dist/ai/guides/migration/components/bb-pagination.md +10 -0
- package/dist/ai/guides/migration/components/bb-popover.md +19 -11
- package/dist/ai/guides/migration/components/bb-radio-group.md +14 -0
- package/dist/ai/guides/migration/components/bb-rating.md +61 -24
- package/dist/ai/guides/migration/components/bb-select-popover.md +9 -1
- package/dist/ai/guides/migration/components/bb-select.md +21 -4
- package/dist/ai/guides/migration/components/bb-slider.md +14 -6
- package/dist/ai/guides/migration/components/bb-switch-group.md +14 -0
- package/dist/ai/guides/migration/components/bb-table.md +574 -33
- package/dist/ai/guides/migration/components/bb-tabs.md +91 -41
- package/dist/ai/guides/migration/components/bb-tag.md +9 -7
- package/dist/ai/guides/migration/components/bb-text-input.md +12 -12
- package/dist/ai/guides/migration/components/bb-toast.md +2 -2
- package/dist/ai/guides/migration/components/bb-tooltip.md +18 -0
- package/dist/ai/guides/migration/components/bb-tree.md +11 -9
- package/dist/ai/guides/migration/components/use-confirm.md +9 -1
- package/dist/ai/guides/migration/v2-to-v3.md +828 -240
- package/dist/ai/guides/migration/v3-beta-css-classes.md +751 -0
- package/dist/ai/guides/migration/v3-beta-tooling.md +119 -0
- package/dist/ai/guides/options-items-playbook.md +161 -12
- package/dist/ai/guides/page-shell.md +1 -1
- package/dist/ai/guides/passthrough.md +958 -0
- package/dist/ai/guides/preset-components.md +361 -0
- package/dist/ai/guides/ssr-prefill.md +127 -0
- package/dist/ai/guides/validated-forms.md +466 -55
- package/dist/ai/guides/validation-libraries.md +171 -0
- package/dist/ai/guides/validation-providers.md +113 -0
- package/dist/ai/index.md +45 -44
- package/dist/ai/recipes/inertia/approvals-inbox.md +26 -10
- package/dist/ai/recipes/inertia/command-palette.md +2 -2
- package/dist/ai/recipes/inertia/inline-edit-workspace.md +46 -30
- package/dist/ai/recipes/inertia/layout-scaffold.md +6 -2
- package/dist/ai/recipes/inertia/onboarding.md +30 -8
- package/dist/ai/recipes/inertia/ownership-atlas.md +72 -49
- package/dist/ai/recipes/inertia/record-form.md +53 -19
- package/dist/ai/recipes/inertia/records-workspace.md +201 -49
- package/dist/ai/recipes/inertia/settings-workspace.md +3809 -0
- package/dist/ai/recipes/inertia/upload-center.md +54 -43
- package/dist/ai/recipes/inertia/wizard-form.md +98 -14
- package/dist/ai/recipes/nuxt/approvals-inbox.md +26 -10
- package/dist/ai/recipes/nuxt/command-palette.md +2 -2
- package/dist/ai/recipes/nuxt/inline-edit-workspace.md +68 -52
- package/dist/ai/recipes/nuxt/layout-scaffold.md +6 -2
- package/dist/ai/recipes/nuxt/onboarding.md +30 -8
- package/dist/ai/recipes/nuxt/record-form.md +66 -22
- package/dist/ai/recipes/nuxt/records-workspace.md +199 -48
- package/dist/ai/recipes/nuxt/settings-workspace.md +3898 -0
- package/dist/ai/recipes/nuxt/upload-center.md +52 -41
- package/dist/ai/recipes/nuxt/wizard-form.md +98 -14
- package/dist/ai/recipes/vue/approvals-inbox.md +28 -12
- package/dist/ai/recipes/vue/command-palette.md +2 -2
- package/dist/ai/recipes/vue/inline-edit-workspace.md +69 -53
- package/dist/ai/recipes/vue/layout-scaffold.md +6 -2
- package/dist/ai/recipes/vue/onboarding.md +32 -8
- package/dist/ai/recipes/vue/record-form.md +81 -54
- package/dist/ai/recipes/vue/records-workspace.md +198 -49
- package/dist/ai/recipes/vue/settings-workspace.md +3836 -0
- package/dist/ai/recipes/vue/upload-center.md +53 -42
- package/dist/ai/recipes/vue/wizard-form.md +97 -14
- package/dist/ai/source/BbAccordion.md +90 -24
- package/dist/ai/source/BbAlert.md +209 -62
- package/dist/ai/source/BbAsterisk.md +54 -4
- package/dist/ai/source/BbAvatar.md +73 -16
- package/dist/ai/source/BbBadge.md +265 -97
- package/dist/ai/source/BbBadgeButton.md +218 -79
- package/dist/ai/source/BbBaseButton.md +108 -12
- package/dist/ai/source/BbBaseCheckboxIcon.md +151 -36
- package/dist/ai/source/BbBaseRadioIcon.md +121 -17
- package/dist/ai/source/BbBaseSwitchIcon.md +138 -28
- package/dist/ai/source/BbBreadcrumbs.md +363 -69
- package/dist/ai/source/BbButton.md +563 -174
- package/dist/ai/source/BbCalendar.md +1744 -0
- package/dist/ai/source/BbCheckbox.md +470 -68
- package/dist/ai/source/BbCheckboxGroup.md +976 -95
- package/dist/ai/source/BbCollapsible.md +96 -8
- package/dist/ai/source/BbColorInput.md +597 -67
- package/dist/ai/source/BbColorPalette.md +1284 -65
- package/dist/ai/source/BbConfirm.md +149 -7
- package/dist/ai/source/BbConfirmPortal.md +89 -3
- package/dist/ai/source/BbDatePicker.md +527 -381
- package/dist/ai/source/BbDatePickerInput.md +2015 -118
- package/dist/ai/source/BbDialog.md +531 -64
- package/dist/ai/source/BbDropdown.md +885 -175
- package/dist/ai/source/BbDropdownButton.md +377 -79
- package/dist/ai/source/BbDropdownGroup.md +687 -96
- package/dist/ai/source/BbDropzone.md +140 -31
- package/dist/ai/source/BbForm.md +875 -17
- package/dist/ai/source/BbIcon.md +130 -52
- package/dist/ai/source/BbIndicator.md +117 -60
- package/dist/ai/source/BbNumberInput.md +667 -84
- package/dist/ai/source/BbOffCanvas.md +1007 -261
- package/dist/ai/source/BbPagination.md +203 -31
- package/dist/ai/source/BbPopover.md +267 -90
- package/dist/ai/source/BbProgress.md +88 -26
- package/dist/ai/source/BbPtScope.md +54 -0
- package/dist/ai/source/BbRadio.md +388 -58
- package/dist/ai/source/BbRadioGroup.md +940 -109
- package/dist/ai/source/BbRating.md +736 -84
- package/dist/ai/source/BbSelect.md +1096 -96
- package/dist/ai/source/BbSelectPopover.md +807 -114
- package/dist/ai/source/BbSlider.md +1390 -98
- package/dist/ai/source/BbSmoothHeight.md +48 -2
- package/dist/ai/source/BbSpinner.md +62 -6
- package/dist/ai/source/BbSwitch.md +297 -60
- package/dist/ai/source/BbSwitchGroup.md +761 -83
- package/dist/ai/source/BbTable.md +6950 -1864
- package/dist/ai/source/BbTabs.md +368 -111
- package/dist/ai/source/BbTabsList.md +503 -146
- package/dist/ai/source/BbTabsPanels.md +625 -0
- package/dist/ai/source/BbTabsRoot.md +319 -100
- package/dist/ai/source/BbTag.md +796 -87
- package/dist/ai/source/BbTextInput.md +497 -68
- package/dist/ai/source/BbTextarea.md +550 -65
- package/dist/ai/source/BbTimePicker.md +395 -69
- package/dist/ai/source/BbTimePickerInput.md +1233 -106
- package/dist/ai/source/BbToast.md +250 -74
- package/dist/ai/source/BbToastPortal.md +210 -66
- package/dist/ai/source/BbTooltip.md +181 -30
- package/dist/ai/source/BbTree.md +76 -11
- package/dist/ai/source/ChipsBox.md +25 -5
- package/dist/ai/source/CommaBox.md +21 -6
- package/dist/ai/source/{BbBaseInputContainer.md → CommonField.md} +467 -250
- package/dist/ai/source/CommonFieldInput.md +848 -0
- package/dist/ai/source/CommonPopover.md +116 -30
- package/dist/ai/source/CommonTimeSelector.md +726 -0
- package/dist/ai/source/ErrorIcon.md +2 -2
- package/dist/ai/source/FlatListBox.md +188 -17
- package/dist/ai/source/GroupedListBox.md +236 -44
- package/dist/ai/source/GuidesComponent.md +14 -7
- package/dist/ai/source/ListBox.md +46 -8
- package/dist/ai/source/OptionsContainer.md +288 -60
- package/dist/ai/source/WarningIcon.md +2 -2
- package/dist/assets/css/reset.css_inline.js +1 -1
- package/dist/assets/svgs/star.svg_raw.js +4 -0
- package/dist/components/BbAccordion/BbAccordion.vue_vue_type_script_setup_true_lang.js +49 -32
- package/dist/components/BbAccordion/types.d.ts +35 -3
- package/dist/components/BbAccordion/types.js +11 -0
- package/dist/components/BbAlert/BbAlert.vue_vue_type_script_setup_true_lang.js +46 -30
- package/dist/components/BbAlert/types.d.ts +37 -3
- package/dist/components/BbAlert/types.js +13 -0
- package/dist/components/BbAsterisk/BbAsterisk.vue.d.ts +3 -1
- package/dist/components/BbAsterisk/BbAsterisk.vue_vue_type_script_setup_true_lang.js +23 -8
- package/dist/components/BbAsterisk/types.d.ts +18 -0
- package/dist/components/BbAsterisk/types.js +7 -0
- package/dist/components/BbAvatar/BbAvatar.vue.d.ts +1 -1
- package/dist/components/BbAvatar/BbAvatar.vue_vue_type_script_setup_true_lang.js +57 -44
- package/dist/components/BbAvatar/types.d.ts +23 -0
- package/dist/components/BbAvatar/types.js +7 -0
- package/dist/components/BbBadge/BadgeBodyContent.vue_vue_type_script_setup_true_lang.js +24 -18
- package/dist/components/BbBadge/BbBadge.vue_vue_type_script_setup_true_lang.js +96 -53
- package/dist/components/BbBadge/BbBadgeButton.vue_vue_type_script_setup_true_lang.js +27 -8
- package/dist/components/BbBadge/badgeButtonContext.d.ts +25 -8
- package/dist/components/BbBadge/types.d.ts +46 -3
- package/dist/components/BbBadge/types.js +13 -0
- package/dist/components/BbBaseButton/BbBaseButton.vue_vue_type_script_setup_true_lang.js +109 -96
- package/dist/components/BbBaseButton/RouterComponent.vue_vue_type_script_setup_true_lang.js +11 -11
- package/dist/components/BbBaseButton/types.d.ts +33 -3
- package/dist/components/BbBaseButton/types.js +9 -2
- package/dist/components/BbBaseCheckboxIcon/BbBaseCheckboxIcon.vue_vue_type_script_setup_true_lang.js +50 -18
- package/dist/components/BbBaseCheckboxIcon/types.d.ts +31 -2
- package/dist/components/BbBaseCheckboxIcon/types.js +8 -0
- package/dist/components/BbBaseRadioIcon/BbBaseRadioIcon.vue_vue_type_script_setup_true_lang.js +45 -15
- package/dist/components/BbBaseRadioIcon/types.d.ts +31 -2
- package/dist/components/BbBaseRadioIcon/types.js +8 -0
- package/dist/components/BbBaseSwitchIcon/BbBaseSwitchIcon.vue_vue_type_script_setup_true_lang.js +48 -16
- package/dist/components/BbBaseSwitchIcon/types.d.ts +31 -2
- package/dist/components/BbBaseSwitchIcon/types.js +8 -0
- package/dist/components/BbBreadcrumbs/BbBreadcrumbs.vue_vue_type_script_setup_true_lang.js +187 -132
- package/dist/components/BbBreadcrumbs/types.d.ts +45 -3
- package/dist/components/BbBreadcrumbs/types.js +12 -0
- package/dist/components/BbButton/BbButton.vue.d.ts +5 -0
- package/dist/components/BbButton/BbButton.vue_vue_type_script_setup_true_lang.js +107 -81
- package/dist/components/BbButton/types.d.ts +113 -2
- package/dist/components/BbButton/types.js +12 -0
- package/dist/components/BbCalendar/BbCalendar.vue.d.ts +34 -0
- package/dist/components/BbCalendar/BbCalendar.vue.js +6 -0
- package/dist/components/BbCalendar/BbCalendar.vue_vue_type_script_setup_true_lang.js +608 -0
- package/dist/components/BbCalendar/CalendarMonthPanel.vue.js +5 -0
- package/dist/components/BbCalendar/CalendarMonthPanel.vue_vue_type_script_setup_true_lang.js +124 -0
- package/dist/components/BbCalendar/CalendarYearPanel.vue.js +5 -0
- package/dist/components/BbCalendar/CalendarYearPanel.vue_vue_type_script_setup_true_lang.js +126 -0
- package/dist/components/BbCalendar/calendarHost.d.ts +29 -0
- package/dist/components/BbCalendar/calendarHost.js +10 -0
- package/dist/components/BbCalendar/types.d.ts +225 -0
- package/dist/components/BbCalendar/types.js +29 -0
- package/dist/components/{BbBaseDatePicker/useDatePickerContext.d.ts → BbCalendar/useCalendarContext.d.ts} +10 -7
- package/dist/components/BbCalendar/useCalendarContext.js +11 -0
- package/dist/components/BbCalendar/useCalendarGrid.d.ts +208 -0
- package/dist/components/BbCalendar/useCalendarGrid.js +274 -0
- package/dist/components/BbCalendar/useDayGrid.d.ts +79 -0
- package/dist/components/BbCalendar/useDayGrid.js +204 -0
- package/dist/components/BbCalendar/useToday.d.ts +23 -0
- package/dist/components/BbCalendar/useToday.js +21 -0
- package/dist/components/BbCheckbox/BbCheckbox.vue.d.ts +7 -7
- package/dist/components/BbCheckbox/BbCheckbox.vue_vue_type_script_setup_true_lang.js +214 -72
- package/dist/components/BbCheckbox/types.d.ts +180 -13
- package/dist/components/BbCheckbox/types.js +8 -0
- package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue.d.ts +15 -3
- package/dist/components/BbCheckboxGroup/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +338 -90
- package/dist/components/BbCheckboxGroup/types.d.ts +195 -20
- package/dist/components/BbCheckboxGroup/types.js +10 -0
- package/dist/components/BbCollapsible/BbCollapsible.vue.d.ts +2 -1
- package/dist/components/BbCollapsible/BbCollapsible.vue_vue_type_script_setup_true_lang.js +41 -19
- package/dist/components/BbCollapsible/types.d.ts +44 -1
- package/dist/components/BbCollapsible/types.js +7 -0
- package/dist/components/BbColorInput/BbColorInput.vue.d.ts +17 -7
- package/dist/components/BbColorInput/BbColorInput.vue_vue_type_script_setup_true_lang.js +330 -86
- package/dist/components/BbColorInput/types.d.ts +230 -12
- package/dist/components/BbColorInput/types.js +24 -0
- package/dist/components/BbColorPalette/BbColorPalette.vue.d.ts +10 -2
- package/dist/components/BbColorPalette/BbColorPalette.vue_vue_type_script_setup_true_lang.js +515 -108
- package/dist/components/BbColorPalette/types.d.ts +76 -7
- package/dist/components/BbColorPalette/types.js +12 -0
- package/dist/components/BbConfirm/BbConfirm.vue.d.ts +2 -1
- package/dist/components/BbConfirm/BbConfirm.vue_vue_type_script_setup_true_lang.js +125 -76
- package/dist/components/BbConfirm/BbConfirmPortal.vue.d.ts +1 -0
- package/dist/components/BbConfirm/types.d.ts +49 -0
- package/dist/components/BbConfirm/types.js +17 -0
- package/dist/components/BbDatePicker/BbDatePicker.vue.d.ts +16 -10
- package/dist/components/BbDatePicker/BbDatePicker.vue_vue_type_script_setup_true_lang.js +320 -223
- package/dist/components/BbDatePicker/types.d.ts +111 -17
- package/dist/components/BbDatePicker/types.js +33 -0
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue.d.ts +16 -4
- package/dist/components/BbDatePickerInput/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +1172 -87
- package/dist/components/BbDatePickerInput/types.d.ts +224 -19
- package/dist/components/BbDatePickerInput/types.js +39 -0
- package/dist/components/BbDialog/BbDialog.vue.d.ts +3 -3
- package/dist/components/BbDialog/BbDialog.vue_vue_type_script_setup_true_lang.js +227 -136
- package/dist/components/BbDialog/types.d.ts +92 -3
- package/dist/components/BbDialog/types.js +16 -0
- package/dist/components/BbDialog/useDialogStack.d.ts +12 -0
- package/dist/components/BbDialog/useDialogStack.js +9 -2
- package/dist/components/BbDropdown/AdaptiveDropdown.vue.d.ts +2 -0
- package/dist/components/BbDropdown/AdaptiveDropdown.vue_vue_type_script_setup_true_lang.js +108 -96
- package/dist/components/BbDropdown/BbDropdown.vue.d.ts +10 -2
- package/dist/components/BbDropdown/BbDropdown.vue_vue_type_script_setup_true_lang.js +337 -268
- package/dist/components/BbDropdown/BbDropdownGroup.vue.d.ts +5 -1
- package/dist/components/BbDropdown/BbDropdownList.vue.d.ts +8 -2
- package/dist/components/BbDropdown/BbDropdownList.vue_vue_type_script_setup_true_lang.js +377 -293
- package/dist/components/BbDropdown/DropdownPipelineResolver.vue_vue_type_script_setup_true_lang.js +129 -118
- package/dist/components/BbDropdown/normalizeGroups.js +55 -31
- package/dist/components/BbDropdown/types.d.ts +288 -30
- package/dist/components/BbDropdown/types.js +21 -2
- package/dist/components/BbDropdown/useDropdownContext.d.ts +10 -4
- package/dist/components/BbDropdown/useDropdownGroupRegistry.d.ts +1 -0
- package/dist/components/BbDropdownButton/BbDropdownButton.vue.d.ts +18 -3
- package/dist/components/BbDropdownButton/BbDropdownButton.vue_vue_type_script_setup_true_lang.js +172 -40
- package/dist/components/BbDropdownButton/types.d.ts +137 -8
- package/dist/components/BbDropdownButton/types.js +35 -0
- package/dist/components/BbDropzone/BbDropzone.vue.d.ts +2 -2
- package/dist/components/BbDropzone/BbDropzone.vue_vue_type_script_setup_true_lang.js +186 -144
- package/dist/components/BbDropzone/types.d.ts +38 -4
- package/dist/components/BbDropzone/types.js +16 -0
- package/dist/components/BbForm/BbForm.vue.d.ts +94 -0
- package/dist/{validated → components/BbForm}/BbForm.vue.js +1 -1
- package/dist/components/BbForm/BbForm.vue_vue_type_script_setup_true_lang.js +317 -0
- package/dist/components/BbForm/BbFormCustomField.d.ts +14 -0
- package/dist/components/BbForm/BbFormCustomField.js +43 -0
- package/dist/components/BbForm/bindFormField.d.ts +16 -0
- package/dist/components/BbForm/bindFormField.js +85 -0
- package/dist/components/BbForm/formFields.d.ts +64 -0
- package/dist/components/BbForm/formFields.js +11 -0
- package/dist/components/BbForm/formSchema.d.ts +56 -0
- package/dist/components/BbForm/formSchema.js +196 -0
- package/dist/components/BbForm/standardSchema.d.ts +59 -0
- package/dist/components/BbIcon/BbIcon.vue_vue_type_script_setup_true_lang.js +58 -48
- package/dist/components/BbIcon/iconCache.d.ts +63 -0
- package/dist/components/BbIcon/iconCache.js +35 -0
- package/dist/components/BbIcon/types.d.ts +22 -2
- package/dist/components/BbIcon/types.js +7 -0
- package/dist/components/BbIndicator/BbIndicator.vue_vue_type_script_setup_true_lang.js +34 -21
- package/dist/components/BbIndicator/types.d.ts +24 -0
- package/dist/components/BbIndicator/types.js +7 -0
- package/dist/components/BbNumberInput/BbNumberInput.vue.d.ts +12 -8
- package/dist/components/BbNumberInput/BbNumberInput.vue_vue_type_script_setup_true_lang.js +308 -85
- package/dist/components/BbNumberInput/types.d.ts +201 -18
- package/dist/components/BbNumberInput/types.js +8 -0
- package/dist/components/BbOffCanvas/BbOffCanvas.vue.d.ts +3 -3
- package/dist/components/BbOffCanvas/BbOffCanvas.vue_vue_type_script_setup_true_lang.js +311 -210
- package/dist/components/BbOffCanvas/types.d.ts +79 -6
- package/dist/components/BbOffCanvas/types.js +15 -0
- package/dist/components/BbPagination/BbPagination.vue.d.ts +2 -2
- package/dist/components/BbPagination/BbPagination.vue_vue_type_script_setup_true_lang.js +125 -90
- package/dist/components/BbPagination/types.d.ts +38 -0
- package/dist/components/BbPagination/types.js +13 -0
- package/dist/components/BbPopover/BbPopover.vue.d.ts +4 -4
- package/dist/components/BbPopover/BbPopover.vue_vue_type_script_setup_true_lang.js +219 -179
- package/dist/components/BbPopover/types.d.ts +51 -5
- package/dist/components/BbPopover/types.js +14 -0
- package/dist/components/BbProgress/BbProgress.vue_vue_type_script_setup_true_lang.js +29 -16
- package/dist/components/BbProgress/types.d.ts +25 -0
- package/dist/components/BbProgress/types.js +7 -0
- package/dist/components/BbPtScope/BbPtScope.vue.d.ts +12 -0
- package/dist/components/BbPtScope/BbPtScope.vue.js +5 -0
- package/dist/components/BbPtScope/BbPtScope.vue_vue_type_script_setup_true_lang.js +13 -0
- package/dist/components/BbPtScope/types.d.ts +15 -0
- package/dist/components/BbRadio/BbRadio.vue.d.ts +7 -7
- package/dist/components/BbRadio/BbRadio.vue_vue_type_script_setup_true_lang.js +172 -59
- package/dist/components/BbRadio/types.d.ts +152 -13
- package/dist/components/BbRadio/types.js +8 -0
- package/dist/components/BbRadioGroup/BbRadioGroup.vue.d.ts +14 -2
- package/dist/components/BbRadioGroup/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +319 -92
- package/dist/components/BbRadioGroup/types.d.ts +198 -22
- package/dist/components/BbRadioGroup/types.js +10 -0
- package/dist/components/BbRating/BbRating.vue.d.ts +10 -8
- package/dist/components/BbRating/BbRating.vue_vue_type_script_setup_true_lang.js +259 -78
- package/dist/components/BbRating/types.d.ts +174 -13
- package/dist/components/BbRating/types.js +21 -0
- package/dist/components/BbSelect/BbSelect.vue.d.ts +17 -3
- package/dist/components/BbSelect/BbSelect.vue_vue_type_script_setup_true_lang.js +553 -83
- package/dist/components/BbSelect/types.d.ts +235 -20
- package/dist/components/BbSelect/types.js +41 -0
- package/dist/components/BbSelectPopover/BbSelectPopover.vue.d.ts +15 -1
- package/dist/components/BbSelectPopover/BbSelectPopover.vue_vue_type_script_setup_true_lang.js +541 -391
- package/dist/components/BbSelectPopover/types.d.ts +124 -8
- package/dist/components/BbSelectPopover/types.js +24 -0
- package/dist/components/BbSlider/BbSlider.vue.d.ts +13 -8
- package/dist/components/BbSlider/BbSlider.vue_vue_type_script_setup_true_lang.js +472 -96
- package/dist/components/BbSlider/types.d.ts +202 -13
- package/dist/components/BbSlider/types.js +26 -0
- package/dist/components/BbSmoothHeight/BbSmoothHeight.vue.d.ts +1 -1
- package/dist/components/BbSmoothHeight/BbSmoothHeight.vue_vue_type_script_setup_true_lang.js +60 -48
- package/dist/components/BbSmoothHeight/types.d.ts +19 -0
- package/dist/components/BbSmoothHeight/types.js +7 -0
- package/dist/components/BbSpinner/BbSpinner.vue_vue_type_script_setup_true_lang.js +27 -14
- package/dist/components/BbSpinner/types.d.ts +22 -1
- package/dist/components/BbSpinner/types.js +7 -0
- package/dist/components/BbSwitch/BbSwitch.vue.d.ts +7 -7
- package/dist/components/BbSwitch/BbSwitch.vue_vue_type_script_setup_true_lang.js +220 -78
- package/dist/components/BbSwitch/types.d.ts +25 -10
- package/dist/components/BbSwitch/types.js +5 -0
- package/dist/components/BbSwitchGroup/BbSwitchGroup.vue.d.ts +14 -2
- package/dist/components/BbSwitchGroup/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +338 -90
- package/dist/components/BbSwitchGroup/types.d.ts +30 -7
- package/dist/components/BbSwitchGroup/types.js +5 -0
- package/dist/components/BbTable/BbTable.vue.d.ts +27 -6
- package/dist/components/BbTable/BbTable.vue_vue_type_script_setup_true_lang.js +2013 -685
- package/dist/components/BbTable/BbTableDataRow.d.ts +196 -0
- package/dist/components/BbTable/BbTableDataRow.js +151 -0
- package/dist/components/BbTable/BbTableExpandRow.d.ts +84 -0
- package/dist/components/BbTable/BbTableExpandRow.js +62 -0
- package/dist/components/BbTable/BbTableSelectToggle.d.ts +120 -0
- package/dist/components/BbTable/BbTableSelectToggle.js +122 -0
- package/dist/components/BbTable/gridWidgets.d.ts +30 -0
- package/dist/components/BbTable/gridWidgets.js +14 -0
- package/dist/components/BbTable/types.d.ts +473 -123
- package/dist/components/BbTable/types.js +31 -0
- package/dist/components/BbTable/utils.d.ts +145 -4
- package/dist/components/BbTable/utils.js +154 -37
- package/dist/components/BbTabs/BbTabs.vue.d.ts +3 -1
- package/dist/components/BbTabs/BbTabs.vue_vue_type_script_setup_true_lang.js +62 -26
- package/dist/components/BbTabs/BbTabsList.vue.d.ts +3 -10
- package/dist/components/BbTabs/BbTabsList.vue_vue_type_script_setup_true_lang.js +143 -81
- package/dist/components/BbTabs/BbTabsPanels.vue.d.ts +12 -0
- package/dist/components/{BbBaseSwitch/BbBaseSwitch.vue.js → BbTabs/BbTabsPanels.vue.js} +2 -2
- package/dist/components/BbTabs/BbTabsPanels.vue_vue_type_script_setup_true_lang.js +59 -0
- package/dist/components/BbTabs/BbTabsRoot.vue.d.ts +3 -1
- package/dist/components/BbTabs/BbTabsRoot.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/components/BbTabs/types.d.ts +183 -23
- package/dist/components/BbTabs/types.js +34 -0
- package/dist/components/BbTag/BbTag.vue.d.ts +13 -10
- package/dist/components/BbTag/BbTag.vue_vue_type_script_setup_true_lang.js +383 -92
- package/dist/components/BbTag/types.d.ts +139 -14
- package/dist/components/BbTag/types.js +22 -0
- package/dist/components/BbTextInput/BbTextInput.vue.d.ts +10 -8
- package/dist/components/BbTextInput/BbTextInput.vue_vue_type_script_setup_true_lang.js +257 -84
- package/dist/components/BbTextInput/types.d.ts +168 -13
- package/dist/components/BbTextInput/types.js +8 -0
- package/dist/components/BbTextarea/BbTextarea.vue.d.ts +7 -7
- package/dist/components/BbTextarea/BbTextarea.vue_vue_type_script_setup_true_lang.js +291 -94
- package/dist/components/BbTextarea/types.d.ts +158 -14
- package/dist/components/BbTextarea/types.js +8 -0
- package/dist/components/BbTimePicker/BbTimePicker.vue.d.ts +12 -4
- package/dist/components/BbTimePicker/BbTimePicker.vue_vue_type_script_setup_true_lang.js +199 -122
- package/dist/components/BbTimePicker/types.d.ts +94 -7
- package/dist/components/BbTimePicker/types.js +18 -0
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue.d.ts +14 -4
- package/dist/components/BbTimePickerInput/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +749 -86
- package/dist/components/BbTimePickerInput/types.d.ts +171 -22
- package/dist/components/BbTimePickerInput/types.js +25 -0
- package/dist/components/BbToast/BbToast.vue_vue_type_script_setup_true_lang.js +63 -25
- package/dist/components/BbToast/BbToastMessage.vue.d.ts +4 -1
- package/dist/components/BbToast/BbToastMessage.vue_vue_type_script_setup_true_lang.js +79 -76
- package/dist/components/BbToast/BbToastPortal.vue.d.ts +1 -0
- package/dist/components/BbToast/BbToastRegion.vue.d.ts +4 -1
- package/dist/components/BbToast/BbToastRegion.vue_vue_type_script_setup_true_lang.js +72 -64
- package/dist/components/BbToast/types.d.ts +54 -1
- package/dist/components/BbToast/types.js +28 -0
- package/dist/components/BbTooltip/BbTooltip.vue_vue_type_script_setup_true_lang.js +104 -87
- package/dist/components/BbTooltip/types.d.ts +40 -2
- package/dist/components/BbTooltip/types.js +7 -0
- package/dist/components/BbTree/BbTree.vue.d.ts +15 -3
- package/dist/components/BbTree/BbTree.vue_vue_type_script_setup_true_lang.js +51 -29
- package/dist/components/BbTree/BbTreeLevel.vue.d.ts +1 -1
- package/dist/components/BbTree/BbTreeLevel.vue_vue_type_script_setup_true_lang.js +17 -16
- package/dist/components/BbTree/context.d.ts +9 -1
- package/dist/components/BbTree/types.d.ts +40 -5
- package/dist/components/BbTree/types.js +7 -0
- package/dist/components/ChipsBox/ChipsBox.vue_vue_type_script_setup_true_lang.js +46 -44
- package/dist/components/ChipsBox/types.d.ts +7 -0
- package/dist/components/ClearableButton/ClearableButton.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/CommaBox/CommaBox.vue_vue_type_script_setup_true_lang.js +11 -7
- package/dist/components/CommaBox/types.d.ts +7 -0
- package/dist/components/{BbBaseInputContainer/BbBaseInputContainer.vue.d.ts → CommonField/CommonField.vue.d.ts} +5 -5
- package/dist/components/{BbBaseRadio/BbBaseRadio.vue.js → CommonField/CommonField.vue.js} +2 -2
- package/dist/components/CommonField/CommonField.vue_vue_type_script_setup_true_lang.js +189 -0
- package/dist/components/CommonField/messageHeightMatrix.d.ts +2 -0
- package/dist/components/{BbBaseInputContainer → CommonField}/types.d.ts +52 -16
- package/dist/components/{CommonInputWrapper/CommonInputWrapper.vue.d.ts → CommonFieldInput/CommonFieldInput.vue.d.ts} +5 -4
- package/dist/components/{BbBaseRadioGroup/BbBaseRadioGroup.vue.js → CommonFieldInput/CommonFieldInput.vue.js} +2 -2
- package/dist/components/CommonFieldInput/CommonFieldInput.vue_vue_type_script_setup_true_lang.js +120 -0
- package/dist/components/CommonFieldInput/boxBorderMatrix.d.ts +10 -0
- package/dist/components/{CommonInputWrapper → CommonFieldInput}/types.d.ts +27 -8
- package/dist/components/CommonPopover/CommonPopover.vue.d.ts +11 -2
- package/dist/components/CommonPopover/CommonPopover.vue_vue_type_script_setup_true_lang.js +76 -63
- package/dist/components/CommonPopover/types.d.ts +27 -8
- package/dist/components/{BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.d.ts → CommonTimeSelector/CommonTimeSelector.vue.d.ts} +21 -2
- package/dist/components/{BbBaseColorPalette/BbBaseColorPalette.vue.js → CommonTimeSelector/CommonTimeSelector.vue.js} +2 -2
- package/dist/components/CommonTimeSelector/CommonTimeSelector.vue_vue_type_script_setup_true_lang.js +232 -0
- package/dist/components/CommonTimeSelector/types.d.ts +6 -0
- package/dist/components/FlatListBox/FlatListBox.vue.d.ts +5 -1
- package/dist/components/FlatListBox/FlatListBox.vue_vue_type_script_setup_true_lang.js +165 -95
- package/dist/components/FlatListBox/types.d.ts +24 -2
- package/dist/components/GroupedListBox/GroupedListBox.vue.d.ts +5 -1
- package/dist/components/GroupedListBox/GroupedListBox.vue_vue_type_script_setup_true_lang.js +217 -134
- package/dist/components/GroupedListBox/types.d.ts +24 -2
- package/dist/components/ListBox/ListBox.vue.d.ts +5 -1
- package/dist/components/ListBox/ListBox.vue_vue_type_script_setup_true_lang.js +95 -69
- package/dist/components/ListBox/types.d.ts +24 -2
- package/dist/components/OptionsContainer/OptionsContainer.vue.d.ts +1 -1
- package/dist/components/OptionsContainer/OptionsContainer.vue_vue_type_script_setup_true_lang.js +109 -37
- package/dist/components/OptionsContainer/types.d.ts +53 -9
- package/dist/components/Transitions/ScaleFade.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/components/Transitions/Slide.vue.js +1 -1
- package/dist/composables/useBaseOptions.d.ts +12 -1
- package/dist/composables/useBaseOptions.js +77 -37
- package/dist/composables/useBbConfig.d.ts +27 -6
- package/dist/composables/useBbConfig.js +8 -2
- package/dist/composables/useBbDropdownContext.d.ts +5 -0
- package/dist/composables/useBbFormContext.d.ts +131 -8
- package/dist/composables/useBbFormContext.js +49 -30
- package/dist/composables/useBbFormField.d.ts +40 -0
- package/dist/composables/useBbFormField.js +39 -0
- package/dist/composables/useBbTableContext.d.ts +45 -1
- package/dist/composables/useBbTableContext.js +93 -87
- package/dist/composables/useBbTabsContext.d.ts +15 -9
- package/dist/composables/useBbTabsContext.js +121 -90
- package/dist/composables/useClosingInert.d.ts +4 -4
- package/dist/composables/useCoarsePointer.js +7 -10
- package/dist/composables/useCoherence.js +1 -1
- package/dist/composables/useConfig.d.ts +59 -0
- package/dist/composables/useConfig.js +15 -0
- package/dist/composables/useConfirm.d.ts +39 -7
- package/dist/composables/useConfirm.js +50 -41
- package/dist/composables/useEscapeStackEntry.d.ts +13 -0
- package/dist/composables/useEscapeStackEntry.js +16 -0
- package/dist/composables/useFormBinding.d.ts +116 -0
- package/dist/composables/useFormBinding.js +34 -0
- package/dist/composables/useHydrated.d.ts +18 -0
- package/dist/composables/useHydrated.js +13 -7
- package/dist/composables/useId.d.ts +4 -3
- package/dist/composables/useId.js +1 -7
- package/dist/composables/useItemsGetter.d.ts +11 -0
- package/dist/composables/useItemsGetter.js +44 -18
- package/dist/composables/useKeyboardInset.d.ts +28 -0
- package/dist/composables/useKeyboardInset.js +32 -0
- package/dist/composables/useLocale.js +10 -7
- package/dist/composables/useMobile.js +7 -10
- package/dist/composables/usePassthrough.d.ts +228 -0
- package/dist/composables/usePassthrough.js +247 -0
- package/dist/composables/usePrefill.d.ts +22 -2
- package/dist/composables/usePrefill.js +35 -19
- package/dist/composables/useSafeAreaInternal.js +1 -1
- package/dist/composables/useSegmentedFields.d.ts +2 -2
- package/dist/composables/useSsrState.d.ts +20 -0
- package/dist/composables/useSsrState.js +13 -0
- package/dist/composables/useTableWidthContext.d.ts +24 -4
- package/dist/composables/useTableWidthContext.js +31 -28
- package/dist/composables/useToast.d.ts +18 -1
- package/dist/composables/useToast.js +31 -18
- package/dist/composables/useToggleInput.d.ts +44 -0
- package/dist/composables/useToggleInput.js +39 -0
- package/dist/composables/useViewportWidth.d.ts +5 -25
- package/dist/composables/useViewportWidth.js +14 -7
- package/dist/deprecation/ai-deprecations.json.d.ts +1977 -289
- package/dist/deprecation/ai-deprecations.json.js +1 -1
- package/dist/deprecation/removedProps.js +9 -4
- package/dist/directives/bbDropdown.d.ts +15 -4
- package/dist/directives/bbDropdown.js +31 -9
- package/dist/directives/bbTooltip.d.ts +6 -0
- package/dist/directives/createPopoverDirective.d.ts +62 -0
- package/dist/directives/createPopoverDirective.js +92 -37
- package/dist/i18n/index.d.ts +10 -16
- package/dist/i18n/locales/cs.json +9 -5
- package/dist/i18n/locales/da.json +9 -5
- package/dist/i18n/locales/de.json +9 -5
- package/dist/i18n/locales/el.json +9 -5
- package/dist/i18n/locales/en.json +9 -5
- package/dist/i18n/locales/es.json +9 -5
- package/dist/i18n/locales/fi.json +9 -5
- package/dist/i18n/locales/fr.json +9 -5
- package/dist/i18n/locales/hu.json +9 -5
- package/dist/i18n/locales/it.json +9 -5
- package/dist/i18n/locales/ja.json +9 -5
- package/dist/i18n/locales/ko.json +9 -5
- package/dist/i18n/locales/nb.json +9 -5
- package/dist/i18n/locales/nl.json +9 -5
- package/dist/i18n/locales/pl.json +9 -5
- package/dist/i18n/locales/pt.json +9 -5
- package/dist/i18n/locales/ro.json +9 -5
- package/dist/i18n/locales/ru.json +9 -5
- package/dist/i18n/locales/sv.json +9 -5
- package/dist/i18n/locales/tr.json +9 -5
- package/dist/i18n/locales/uk.json +9 -5
- package/dist/i18n/locales/zh-cn.json +9 -5
- package/dist/icon-scan.d.ts +276 -0
- package/dist/icon-scan.js +485 -0
- package/dist/icons-whitelist.d.ts +5 -4
- package/dist/index.d.ts +40 -21
- package/dist/index.js +78 -71
- package/dist/llms-full.txt +61164 -27972
- package/dist/llms-medium.txt +1482 -366
- package/dist/llms.txt +32 -15
- package/dist/locale-blueprint.json +9 -5
- package/dist/nuxt-auto-imports.d.ts +76 -0
- package/dist/nuxt-auto-imports.js +32 -0
- package/dist/nuxt-module.d.ts +30 -15
- package/dist/nuxt.js +35 -9
- package/dist/passthrough-deduper.js +5 -0
- package/dist/plugin.d.ts +10 -1
- package/dist/plugin.js +29 -19
- package/dist/project-dts.d.ts +84 -0
- package/dist/project-dts.js +170 -0
- package/dist/reset.css +1 -1
- package/dist/runtime/nuxt-plugin.js +34 -21
- package/dist/styles.css +3 -2
- package/dist/types/AlertVariant.d.ts +10 -1
- package/dist/types/BadgeVariant.d.ts +16 -5
- package/dist/types/ButtonVariant.d.ts +12 -1
- package/dist/types/ColumnName.d.ts +30 -3
- package/dist/types/CommonProps.d.ts +2 -2
- package/dist/types/Config.d.ts +94 -1
- package/dist/types/ConfirmVariant.d.ts +8 -1
- package/dist/types/DropdownItemVariant.d.ts +8 -1
- package/dist/types/FieldLayout.d.ts +32 -0
- package/dist/types/IndicatorVariant.d.ts +11 -1
- package/dist/types/InputVariant.d.ts +30 -0
- package/dist/types/ItemProps.d.ts +50 -0
- package/dist/types/Option.d.ts +6 -0
- package/dist/types/PtScope.d.ts +15 -0
- package/dist/types/RegistryKey.d.ts +10 -0
- package/dist/types/TabsVariant.d.ts +25 -0
- package/dist/types/ToastVariant.d.ts +12 -2
- package/dist/types/TooltipVariant.d.ts +8 -1
- package/dist/types/passthrough.d.ts +362 -0
- package/dist/types/passthrough.js +78 -0
- package/dist/types/ptComponentMap.d.ts +62 -0
- package/dist/utilities/functions/hasVnodeListener.d.ts +16 -0
- package/dist/utilities/functions/hasVnodeListener.js +12 -0
- package/dist/utilities/functions/isImeComposing.d.ts +7 -0
- package/dist/utilities/functions/isImeComposing.js +4 -0
- package/dist/utilities/functions/itemProps.d.ts +46 -0
- package/dist/utilities/functions/itemProps.js +47 -0
- package/dist/utilities/functions/slotKey.d.ts +13 -8
- package/dist/utilities/functions/slotKey.js +78 -2
- package/dist/utilities/functions/snapToStep.js +2 -1
- package/dist/utilities/functions/toggleInput.d.ts +98 -0
- package/dist/utilities/functions/toggleInput.js +56 -0
- package/dist/utilities/functions/warnRemovedAttrs.d.ts +27 -1
- package/dist/utilities/functions/warnRemovedAttrs.js +75 -14
- package/dist/utilities/misc/listboxMetrics.d.ts +9 -3
- package/dist/utilities/misc/listboxMetrics.js +5 -2
- package/dist/utilities/misc/ssrStateInjectionKey.d.ts +42 -0
- package/dist/utilities/misc/ssrStateInjectionKey.js +4 -0
- package/dist/utils/cssLayers.d.ts +91 -0
- package/dist/utils/cssLayers.js +43 -0
- package/dist/utils/injectLibraryStyles.d.ts +3 -1
- package/dist/utils/injectLibraryStyles.js +24 -23
- package/dist/utils/overlayEscapeStack.d.ts +10 -0
- package/dist/utils/overlayEscapeStack.js +5 -3
- package/dist/utils/passthrough.d.ts +67 -0
- package/dist/utils/passthrough.js +100 -0
- package/dist/utils/passthroughDeduper.d.ts +2 -0
- package/dist/utils/ptScope.d.ts +8 -0
- package/dist/utils/ptScope.js +4 -0
- package/dist/utils/versionCheck.d.ts +19 -0
- package/dist/utils/versionCheck.js +18 -0
- package/dist/vite-plugin.d.ts +301 -53
- package/dist/vite.js +547 -375
- package/llms.txt +33 -16
- package/package.json +49 -27
- package/scripts/lib/check-fix.mjs +129 -0
- package/scripts/lib/component-attr-targets.ts +123 -0
- package/scripts/lib/component-tree.ts +648 -0
- package/scripts/lib/css-class-check.mjs +326 -0
- package/scripts/lib/css-class-surface.mjs +292 -0
- package/scripts/lib/css-color-resolve.mjs +172 -0
- package/scripts/lib/css-local-check.mjs +267 -0
- package/scripts/lib/design-token-manifest.mjs +499 -0
- package/scripts/lib/doc-sections.mjs +248 -0
- package/scripts/lib/ensure-manifest.mjs +28 -5
- package/scripts/lib/eslint-disable.mjs +141 -0
- package/scripts/lib/eslint-plugin.d.ts +64 -1
- package/scripts/lib/eslint-plugin.mjs +1285 -30
- package/scripts/lib/hand-imported-styles.mjs +326 -0
- package/scripts/lib/hand-roll-hints.mjs +50 -6
- package/scripts/lib/html-attributes.mjs +353 -0
- package/scripts/lib/local-components.mjs +177 -0
- package/scripts/lib/mcp-config.mjs +87 -58
- package/scripts/lib/migrate-fix.mjs +62 -3
- package/scripts/lib/project-variant-dts.mjs +122 -0
- package/scripts/lib/public-type-exports.mjs +273 -0
- package/scripts/lib/slot-key.mjs +147 -0
- package/scripts/lib/slot-renames.mjs +46 -0
- package/scripts/lib/squashed-slot-words.mjs +133 -0
- package/scripts/lib/validate-bb-markup.mjs +2213 -76
- package/scripts/lib/wrapper-props.mjs +188 -0
- package/dist/ai/BbBaseCheckbox.md +0 -49
- package/dist/ai/BbBaseCheckboxGroup.md +0 -64
- package/dist/ai/BbBaseColorInput.md +0 -65
- package/dist/ai/BbBaseColorPalette.md +0 -39
- package/dist/ai/BbBaseDatePicker.md +0 -43
- package/dist/ai/BbBaseDatePickerInput.md +0 -73
- package/dist/ai/BbBaseInputContainer.md +0 -48
- package/dist/ai/BbBaseNumberInput.md +0 -71
- package/dist/ai/BbBaseRadio.md +0 -46
- package/dist/ai/BbBaseRadioGroup.md +0 -64
- package/dist/ai/BbBaseRating.md +0 -52
- package/dist/ai/BbBaseSelect.md +0 -88
- package/dist/ai/BbBaseSlider.md +0 -56
- package/dist/ai/BbBaseSwitch.md +0 -49
- package/dist/ai/BbBaseSwitchGroup.md +0 -64
- package/dist/ai/BbBaseTag.md +0 -68
- package/dist/ai/BbBaseTextInput.md +0 -75
- package/dist/ai/BbBaseTextarea.md +0 -62
- package/dist/ai/BbBaseTimePickerInput.md +0 -62
- package/dist/ai/BbTabsPanes.md +0 -27
- package/dist/ai/CommonInputWrapper.md +0 -42
- package/dist/ai/source/BbBaseCheckbox.md +0 -461
- package/dist/ai/source/BbBaseCheckboxGroup.md +0 -554
- package/dist/ai/source/BbBaseColorInput.md +0 -431
- package/dist/ai/source/BbBaseColorPalette.md +0 -942
- package/dist/ai/source/BbBaseDatePicker.md +0 -1448
- package/dist/ai/source/BbBaseDatePickerInput.md +0 -1940
- package/dist/ai/source/BbBaseNumberInput.md +0 -617
- package/dist/ai/source/BbBaseRadio.md +0 -381
- package/dist/ai/source/BbBaseRadioGroup.md +0 -539
- package/dist/ai/source/BbBaseRating.md +0 -607
- package/dist/ai/source/BbBaseSelect.md +0 -945
- package/dist/ai/source/BbBaseSlider.md +0 -1144
- package/dist/ai/source/BbBaseSwitch.md +0 -246
- package/dist/ai/source/BbBaseSwitchGroup.md +0 -302
- package/dist/ai/source/BbBaseTag.md +0 -694
- package/dist/ai/source/BbBaseTextInput.md +0 -511
- package/dist/ai/source/BbBaseTextarea.md +0 -504
- package/dist/ai/source/BbBaseTimePickerInput.md +0 -1037
- package/dist/ai/source/BbTabsPanes.md +0 -377
- package/dist/ai/source/CommonInputWrapper.md +0 -584
- package/dist/alert-variants.d.ts +0 -19
- package/dist/assets/svgs/sort.svg_raw.js +0 -4
- package/dist/badge-variants.d.ts +0 -19
- package/dist/button-variants.d.ts +0 -21
- package/dist/components/BbBadge/BadgeAppendIcon.vue.d.ts +0 -3
- package/dist/components/BbBadge/BadgeAppendIcon.vue.js +0 -5
- package/dist/components/BbBadge/BadgeAppendIcon.vue_vue_type_script_setup_true_lang.js +0 -22
- package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.d.ts +0 -40
- package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue.js +0 -6
- package/dist/components/BbBaseCheckbox/BbBaseCheckbox.vue_vue_type_script_setup_true_lang.js +0 -145
- package/dist/components/BbBaseCheckbox/types.d.ts +0 -224
- package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.d.ts +0 -19
- package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue.js +0 -6
- package/dist/components/BbBaseCheckboxGroup/BbBaseCheckboxGroup.vue_vue_type_script_setup_true_lang.js +0 -190
- package/dist/components/BbBaseCheckboxGroup/types.d.ts +0 -257
- package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.d.ts +0 -43
- package/dist/components/BbBaseColorInput/BbBaseColorInput.vue.js +0 -6
- package/dist/components/BbBaseColorInput/BbBaseColorInput.vue_vue_type_script_setup_true_lang.js +0 -184
- package/dist/components/BbBaseColorInput/types.d.ts +0 -219
- package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue.d.ts +0 -13
- package/dist/components/BbBaseColorPalette/BbBaseColorPalette.vue_vue_type_script_setup_true_lang.js +0 -395
- package/dist/components/BbBaseColorPalette/types.d.ts +0 -40
- package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.d.ts +0 -20
- package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue.js +0 -6
- package/dist/components/BbBaseDatePicker/BbBaseDatePicker.vue_vue_type_script_setup_true_lang.js +0 -407
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.d.ts +0 -47
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue.js +0 -5
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerInputDaySelector.vue_vue_type_script_setup_true_lang.js +0 -318
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.js +0 -5
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue_vue_type_script_setup_true_lang.js +0 -115
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.js +0 -5
- package/dist/components/BbBaseDatePicker/BbBaseDatePickerYearSelector.vue_vue_type_script_setup_true_lang.js +0 -116
- package/dist/components/BbBaseDatePicker/types.d.ts +0 -108
- package/dist/components/BbBaseDatePicker/useDatePickerContext.js +0 -11
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.d.ts +0 -31
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue.js +0 -6
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerInput.vue_vue_type_script_setup_true_lang.js +0 -737
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue.js +0 -6
- package/dist/components/BbBaseDatePickerInput/BbBaseDatePickerTimeSelector.vue_vue_type_script_setup_true_lang.js +0 -204
- package/dist/components/BbBaseDatePickerInput/types.d.ts +0 -325
- package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue.js +0 -6
- package/dist/components/BbBaseInputContainer/BbBaseInputContainer.vue_vue_type_script_setup_true_lang.js +0 -190
- package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.d.ts +0 -52
- package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue.js +0 -6
- package/dist/components/BbBaseNumberInput/BbBaseNumberInput.vue_vue_type_script_setup_true_lang.js +0 -215
- package/dist/components/BbBaseNumberInput/types.d.ts +0 -211
- package/dist/components/BbBaseRadio/BbBaseRadio.vue.d.ts +0 -33
- package/dist/components/BbBaseRadio/BbBaseRadio.vue_vue_type_script_setup_true_lang.js +0 -113
- package/dist/components/BbBaseRadio/types.d.ts +0 -179
- package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue.d.ts +0 -19
- package/dist/components/BbBaseRadioGroup/BbBaseRadioGroup.vue_vue_type_script_setup_true_lang.js +0 -179
- package/dist/components/BbBaseRadioGroup/types.d.ts +0 -223
- package/dist/components/BbBaseRating/BbBaseRating.vue.d.ts +0 -38
- package/dist/components/BbBaseRating/BbBaseRating.vue.js +0 -6
- package/dist/components/BbBaseRating/BbBaseRating.vue_vue_type_script_setup_true_lang.js +0 -192
- package/dist/components/BbBaseRating/types.d.ts +0 -176
- package/dist/components/BbBaseSelect/BbBaseSelect.vue.d.ts +0 -19
- package/dist/components/BbBaseSelect/BbBaseSelect.vue.js +0 -6
- package/dist/components/BbBaseSelect/BbBaseSelect.vue_vue_type_script_setup_true_lang.js +0 -311
- package/dist/components/BbBaseSelect/types.d.ts +0 -297
- package/dist/components/BbBaseSlider/BbBaseSlider.vue.d.ts +0 -35
- package/dist/components/BbBaseSlider/BbBaseSlider.vue.js +0 -6
- package/dist/components/BbBaseSlider/BbBaseSlider.vue_vue_type_script_setup_true_lang.js +0 -340
- package/dist/components/BbBaseSlider/types.d.ts +0 -200
- package/dist/components/BbBaseSwitch/BbBaseSwitch.vue.d.ts +0 -35
- package/dist/components/BbBaseSwitch/BbBaseSwitch.vue_vue_type_script_setup_true_lang.js +0 -146
- package/dist/components/BbBaseSwitch/types.d.ts +0 -10
- package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.d.ts +0 -19
- package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue.js +0 -6
- package/dist/components/BbBaseSwitchGroup/BbBaseSwitchGroup.vue_vue_type_script_setup_true_lang.js +0 -190
- package/dist/components/BbBaseSwitchGroup/types.d.ts +0 -8
- package/dist/components/BbBaseTag/BbBaseTag.vue.d.ts +0 -50
- package/dist/components/BbBaseTag/BbBaseTag.vue.js +0 -6
- package/dist/components/BbBaseTag/BbBaseTag.vue_vue_type_script_setup_true_lang.js +0 -266
- package/dist/components/BbBaseTag/types.d.ts +0 -160
- package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.d.ts +0 -45
- package/dist/components/BbBaseTextInput/BbBaseTextInput.vue.js +0 -6
- package/dist/components/BbBaseTextInput/BbBaseTextInput.vue_vue_type_script_setup_true_lang.js +0 -200
- package/dist/components/BbBaseTextInput/types.d.ts +0 -209
- package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.d.ts +0 -39
- package/dist/components/BbBaseTextarea/BbBaseTextarea.vue.js +0 -6
- package/dist/components/BbBaseTextarea/BbBaseTextarea.vue_vue_type_script_setup_true_lang.js +0 -187
- package/dist/components/BbBaseTextarea/types.d.ts +0 -170
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.d.ts +0 -27
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue.js +0 -6
- package/dist/components/BbBaseTimePickerInput/BbBaseTimePickerInput.vue_vue_type_script_setup_true_lang.js +0 -519
- package/dist/components/BbBaseTimePickerInput/types.d.ts +0 -151
- package/dist/components/BbTabs/BbTabsPanes.vue.d.ts +0 -16
- package/dist/components/BbTabs/BbTabsPanes.vue.js +0 -6
- package/dist/components/BbTabs/BbTabsPanes.vue_vue_type_script_setup_true_lang.js +0 -35
- package/dist/components/CommonInputWrapper/CommonInputWrapper.vue.js +0 -6
- package/dist/components/CommonInputWrapper/CommonInputWrapper.vue_vue_type_script_setup_true_lang.js +0 -107
- package/dist/confirm-variants.d.ts +0 -17
- package/dist/dropdown-item-variants.d.ts +0 -17
- package/dist/indicator-variants.d.ts +0 -20
- package/dist/locale-registry.d.ts +0 -37
- package/dist/toast-variants.d.ts +0 -20
- package/dist/tooltip-variants.d.ts +0 -17
- package/dist/types/InputDirection.d.ts +0 -15
- package/dist/validated/BbCheckbox.vue.d.ts +0 -29
- package/dist/validated/BbCheckbox.vue.js +0 -5
- package/dist/validated/BbCheckbox.vue_vue_type_script_setup_true_lang.js +0 -75
- package/dist/validated/BbCheckboxGroup.vue.d.ts +0 -34
- package/dist/validated/BbCheckboxGroup.vue.js +0 -5
- package/dist/validated/BbCheckboxGroup.vue_vue_type_script_setup_true_lang.js +0 -82
- package/dist/validated/BbColorInput.vue.d.ts +0 -37
- package/dist/validated/BbColorInput.vue.js +0 -5
- package/dist/validated/BbColorInput.vue_vue_type_script_setup_true_lang.js +0 -75
- package/dist/validated/BbDatePickerInput.vue.d.ts +0 -41
- package/dist/validated/BbDatePickerInput.vue.js +0 -5
- package/dist/validated/BbDatePickerInput.vue_vue_type_script_setup_true_lang.js +0 -90
- package/dist/validated/BbDropzone.vue.d.ts +0 -24
- package/dist/validated/BbDropzone.vue.js +0 -5
- package/dist/validated/BbDropzone.vue_vue_type_script_setup_true_lang.js +0 -45
- package/dist/validated/BbForm.vue.d.ts +0 -28
- package/dist/validated/BbForm.vue_vue_type_script_setup_true_lang.js +0 -42
- package/dist/validated/BbNumberInput.vue.d.ts +0 -36
- package/dist/validated/BbNumberInput.vue.js +0 -5
- package/dist/validated/BbNumberInput.vue_vue_type_script_setup_true_lang.js +0 -72
- package/dist/validated/BbRadioGroup.vue.d.ts +0 -34
- package/dist/validated/BbRadioGroup.vue.js +0 -5
- package/dist/validated/BbRadioGroup.vue_vue_type_script_setup_true_lang.js +0 -78
- package/dist/validated/BbRating.vue.d.ts +0 -30
- package/dist/validated/BbRating.vue.js +0 -5
- package/dist/validated/BbRating.vue_vue_type_script_setup_true_lang.js +0 -63
- package/dist/validated/BbSelect.vue.d.ts +0 -46
- package/dist/validated/BbSelect.vue.js +0 -5
- package/dist/validated/BbSelect.vue_vue_type_script_setup_true_lang.js +0 -109
- package/dist/validated/BbSlider.vue.d.ts +0 -36
- package/dist/validated/BbSlider.vue.js +0 -5
- package/dist/validated/BbSlider.vue_vue_type_script_setup_true_lang.js +0 -69
- package/dist/validated/BbSwitch.vue.d.ts +0 -29
- package/dist/validated/BbSwitch.vue.js +0 -5
- package/dist/validated/BbSwitch.vue_vue_type_script_setup_true_lang.js +0 -75
- package/dist/validated/BbSwitchGroup.vue.d.ts +0 -34
- package/dist/validated/BbSwitchGroup.vue.js +0 -5
- package/dist/validated/BbSwitchGroup.vue_vue_type_script_setup_true_lang.js +0 -82
- package/dist/validated/BbTag.vue.d.ts +0 -36
- package/dist/validated/BbTag.vue.js +0 -5
- package/dist/validated/BbTag.vue_vue_type_script_setup_true_lang.js +0 -72
- package/dist/validated/BbTextInput.vue.d.ts +0 -36
- package/dist/validated/BbTextInput.vue.js +0 -5
- package/dist/validated/BbTextInput.vue_vue_type_script_setup_true_lang.js +0 -72
- package/dist/validated/BbTextarea.vue.d.ts +0 -36
- package/dist/validated/BbTextarea.vue.js +0 -5
- package/dist/validated/BbTextarea.vue_vue_type_script_setup_true_lang.js +0 -70
- package/dist/validated/BbTimePickerInput.vue.d.ts +0 -37
- package/dist/validated/BbTimePickerInput.vue.js +0 -5
- package/dist/validated/BbTimePickerInput.vue_vue_type_script_setup_true_lang.js +0 -81
- package/dist/validated/index.d.ts +0 -43
- package/dist/validated/useValidatedField.d.ts +0 -93
- package/dist/validated/useValidatedField.js +0 -51
- package/dist/validated.js +0 -21
- /package/dist/components/{BbBaseDatePicker/BbBaseDatePickerMonthSelector.vue.d.ts → BbCalendar/CalendarMonthPanel.vue.d.ts} +0 -0
- /package/dist/components/{BbBaseDatePicker/BbBaseDatePickerYearSelector.vue.d.ts → BbCalendar/CalendarYearPanel.vue.d.ts} +0 -0
- /package/dist/{components/BbBaseDatePicker/typeahead.d.ts → composables/useTypeahead.d.ts} +0 -0
- /package/dist/{components/BbBaseDatePicker/typeahead.js → composables/useTypeahead.js} +0 -0
package/dist/ai/BbRadioGroup.md
CHANGED
|
@@ -8,6 +8,30 @@
|
|
|
8
8
|
- Usage rule: Prefer this component for consumer-facing implementations.
|
|
9
9
|
- Implementation source (only when the contract below is not enough): [source/BbRadioGroup.md](./source/BbRadioGroup.md)
|
|
10
10
|
|
|
11
|
+
## Reachable through `BbRadioGroup`
|
|
12
|
+
|
|
13
|
+
`BbRadioGroup` mounts other components (all of them: _Component tree_, near the end). These are the parts of its API that land inside them. Prefer these over `:deep()` on an inner class (allowed, unsupported: it can break on upgrade) — and never an import of an internal component.
|
|
14
|
+
|
|
15
|
+
| pt part | Lands on | In |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| `pt:icon` | the root of `BbBaseRadioIcon` | `BbBaseRadioIcon` ([contract](./BbBaseRadioIcon.md)) |
|
|
18
|
+
| `pt:root` | `div.bb-field` | `CommonField` _(internal)_ |
|
|
19
|
+
| `pt:label` | `component` | `CommonField` _(internal)_ |
|
|
20
|
+
| `pt:description` | `span.bb-field__description` | `CommonField` _(internal)_ |
|
|
21
|
+
| `pt:hint` | `span.bb-field__hint` | `CommonField` _(internal)_ |
|
|
22
|
+
| `pt:message` | `div.bb-field__message` | `CommonField` _(internal)_ |
|
|
23
|
+
| `pt:list` | `span` | `OptionsContainer` _(internal)_ |
|
|
24
|
+
| `pt:item` | `label` | `OptionsContainer` _(internal)_ |
|
|
25
|
+
| `pt:label` | `span` | `OptionsContainer` _(internal)_ |
|
|
26
|
+
| `pt:itemDescription` | `span` | `OptionsContainer` _(internal)_ |
|
|
27
|
+
|
|
28
|
+
**CSS variables you can set through those parts** — declared deeper in the tree, so set one on the part that reads it (`pt:<part>="[--name:value]"`), never on `BbRadioGroup`'s root:
|
|
29
|
+
|
|
30
|
+
| Variable | Set through | Declared by | What it is |
|
|
31
|
+
| --- | --- | --- | --- |
|
|
32
|
+
| `--elev` | `pt:icon` | `BbBaseRadioIcon` | Same resting lift as the checkbox glyph — see BbBaseCheckboxIcon. |
|
|
33
|
+
| `--bg` | `pt:icon` | `BbBaseRadioIcon` | The glyph plate. DECLARED here, not consumed bare, because this glyph renders inside surfaces that declare `--bg` themselves — a table row or header cell, a dialog, an off-canvas sheet. Without the declaration it would inherit that surface's fill, which happens to match at the shipped default and would diverge the moment anyone writes `.my-table { --bg: … }`. Identical to the raw tokens it replaces at every theme. |
|
|
34
|
+
|
|
11
35
|
## Usage & Guidelines
|
|
12
36
|
|
|
13
37
|
### When to use
|
|
@@ -28,6 +52,20 @@ Choose by shape:
|
|
|
28
52
|
|
|
29
53
|
### Items and value mapping
|
|
30
54
|
|
|
55
|
+
**Object items need `item-text`.** Without it each label is
|
|
56
|
+
`JSON.stringify(item)`, and without `item-value` the whole object is the value.
|
|
57
|
+
`{ label, value }` items take both:
|
|
58
|
+
|
|
59
|
+
```vue
|
|
60
|
+
<BbRadioGroup
|
|
61
|
+
v-model="plan"
|
|
62
|
+
legend="Plan"
|
|
63
|
+
:items="plans"
|
|
64
|
+
item-text="label"
|
|
65
|
+
item-value="value"
|
|
66
|
+
/>
|
|
67
|
+
```
|
|
68
|
+
|
|
31
69
|
Pass domain objects to `items` and resolve the display text and stored value
|
|
32
70
|
with `item-text` / `item-value` — a dot-path or a function. The bound model
|
|
33
71
|
holds only the mapped value (an id), which is what you persist. Primitive
|
|
@@ -40,9 +78,7 @@ wins) — see the
|
|
|
40
78
|
|
|
41
79
|
```vue
|
|
42
80
|
<template>
|
|
43
|
-
<div
|
|
44
|
-
class="flex max-w-sm flex-col gap-3 rounded-[var(--bb-radius)] border p-4"
|
|
45
|
-
>
|
|
81
|
+
<div class="flex max-w-sm flex-col gap-3 rounded-(--bb-radius) border p-4">
|
|
46
82
|
<BbRadioGroup
|
|
47
83
|
v-model="plan"
|
|
48
84
|
compact
|
|
@@ -53,7 +89,7 @@ wins) — see the
|
|
|
53
89
|
legend="Subscription plan"
|
|
54
90
|
name="plan"
|
|
55
91
|
/>
|
|
56
|
-
<p class="plan-summary text-xs text-
|
|
92
|
+
<p class="plan-summary text-xs text-(--bb-text-muted)">
|
|
57
93
|
Selected: {{ plan }}
|
|
58
94
|
</p>
|
|
59
95
|
</div>
|
|
@@ -81,6 +117,84 @@ const plan = ref<string>('pro');
|
|
|
81
117
|
</script>
|
|
82
118
|
```
|
|
83
119
|
|
|
120
|
+
#### Additional row fields: `item-props`
|
|
121
|
+
|
|
122
|
+
`item-text` and `item-value` are the option's label and identity. Anything
|
|
123
|
+
**additional** about a row comes from `item-props` — for option groups that is
|
|
124
|
+
one field, `description`: a muted line **under** the option's label, beside the
|
|
125
|
+
control.
|
|
126
|
+
|
|
127
|
+
```vue
|
|
128
|
+
<BbRadioGroup
|
|
129
|
+
legend="Plan"
|
|
130
|
+
:items="plans"
|
|
131
|
+
item-text="name"
|
|
132
|
+
item-value="id"
|
|
133
|
+
:item-props="{ description: 'summary' }"
|
|
134
|
+
/>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Plan tiers described by a function**
|
|
138
|
+
|
|
139
|
+
```vue
|
|
140
|
+
<template>
|
|
141
|
+
<div class="grid max-w-sm gap-3 rounded-(--bb-radius) border p-3">
|
|
142
|
+
<BbRadioGroup
|
|
143
|
+
v-model="tier"
|
|
144
|
+
:item-props="tierProps"
|
|
145
|
+
item-text="name"
|
|
146
|
+
item-value="id"
|
|
147
|
+
:items="tiers"
|
|
148
|
+
legend="Plan"
|
|
149
|
+
list-layout="vertical"
|
|
150
|
+
name="plan"
|
|
151
|
+
/>
|
|
152
|
+
<p class="tier-summary text-xs text-(--bb-text-muted)">
|
|
153
|
+
Selected: {{ tier }}
|
|
154
|
+
</p>
|
|
155
|
+
</div>
|
|
156
|
+
</template>
|
|
157
|
+
<script setup lang="ts">
|
|
158
|
+
import { ref } from 'vue';
|
|
159
|
+
import { BbRadioGroup } from 'bitboss-ui';
|
|
160
|
+
|
|
161
|
+
type Tier = { id: string; name: string; seats: number; price: number };
|
|
162
|
+
|
|
163
|
+
const tiers: Tier[] = [
|
|
164
|
+
{ id: 'free', name: 'Free', seats: 3, price: 0 },
|
|
165
|
+
{ id: 'team', name: 'Team', seats: 25, price: 12 },
|
|
166
|
+
{ id: 'business', name: 'Business', seats: 250, price: 29 },
|
|
167
|
+
];
|
|
168
|
+
|
|
169
|
+
// The FUNCTION form: one function returns every additional field, called once
|
|
170
|
+
// per item. Handy when the text is composed rather than read from one field.
|
|
171
|
+
const tierProps = (item: Tier) => ({
|
|
172
|
+
description:
|
|
173
|
+
item.price === 0
|
|
174
|
+
? `Up to ${item.seats} seats, free forever.`
|
|
175
|
+
: `Up to ${item.seats} seats, €${item.price} per seat per month.`,
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
const tier = ref<string | null>('team');
|
|
179
|
+
</script>
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Each field takes a dot-path or a getter; or pass one function that returns the
|
|
183
|
+
fields: `:item-props="(plan) => ({ description: plan.summary })"`.
|
|
184
|
+
|
|
185
|
+
- **Only additional fields.** Text and value never go in `item-props`.
|
|
186
|
+
- **Nothing is read implicitly.** Without `item-props` no description renders,
|
|
187
|
+
even if your items carry a `description` field. An empty value renders no
|
|
188
|
+
line for that item.
|
|
189
|
+
- **The line may wrap**, is announced as the option's description (never part of
|
|
190
|
+
its name), and reaches the `#label` slot as `description`.
|
|
191
|
+
- **No icons here.** An option group has no place for an icon other than the
|
|
192
|
+
control itself, which the `#icon` slot already replaces.
|
|
193
|
+
- **Disabling individual options is `selectable`'s job** —
|
|
194
|
+
`:selectable="(plan) => plan.available"` — not a field in `item-props`.
|
|
195
|
+
- The group's own `description` prop is a different thing: it sits under the
|
|
196
|
+
legend.
|
|
197
|
+
|
|
84
198
|
### The model is a single value
|
|
85
199
|
|
|
86
200
|
Unlike the checkbox and switch groups, `BbRadioGroup` is **single-only** — there
|
|
@@ -98,23 +212,29 @@ option for it rather than expecting a cleared model.
|
|
|
98
212
|
|
|
99
213
|
### Layout and density
|
|
100
214
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
215
|
+
Options flow in a **wrapping row by default** — `list-layout` falls back
|
|
216
|
+
to `'horizontal'`, which suits segmented-style choices (shipping
|
|
217
|
+
speed, billing cycle). Pass `list-layout="vertical"` to stack them one per
|
|
218
|
+
line, which is what you want for long option text or a scannable list;
|
|
219
|
+
`'vertical-stretch'` stacks them at the full width of the list, and `'tiles'`
|
|
220
|
+
makes equal-size boxes that wrap as the field narrows. `item-layout` arranges
|
|
221
|
+
each row's input against its label with the keywords of `layout`, and
|
|
222
|
+
`item-reverse` swaps the two.
|
|
223
|
+
`compact` tightens spacing. Because a radio group binds a single value, it drives cleanly
|
|
104
224
|
from `v-model` inline.
|
|
105
225
|
|
|
106
226
|
**Horizontal shipping speed**
|
|
107
227
|
|
|
108
228
|
```vue
|
|
109
229
|
<template>
|
|
110
|
-
<div class="max-w-sm rounded-
|
|
230
|
+
<div class="max-w-sm rounded-(--bb-radius) border p-4">
|
|
111
231
|
<BbRadioGroup
|
|
112
232
|
v-model="speed"
|
|
113
233
|
compact
|
|
114
234
|
hint="Express arrives in 1–2 business days."
|
|
115
|
-
input-direction="horizontal"
|
|
116
235
|
:items="['Standard', 'Express', 'Overnight']"
|
|
117
236
|
legend="Shipping speed"
|
|
237
|
+
list-layout="horizontal"
|
|
118
238
|
name="shipping-speed"
|
|
119
239
|
persistent-hint
|
|
120
240
|
/>
|
|
@@ -128,13 +248,113 @@ const speed = ref<string>('Standard');
|
|
|
128
248
|
</script>
|
|
129
249
|
```
|
|
130
250
|
|
|
131
|
-
`
|
|
251
|
+
`layout` splits the legend against the options block (`'auto'`,
|
|
132
252
|
`'horizontal'`, `'vertical'`, or a pattern like `'xx xxxxxx'`);
|
|
133
253
|
`input-position` / `legend-position` align options and legend within their
|
|
134
254
|
columns; `reverse` swaps legend and options order (a plain swap here, not
|
|
135
255
|
inverted); `hide-legend` hides the legend visually while keeping it for
|
|
136
256
|
assistive tech.
|
|
137
257
|
|
|
258
|
+
#### Layout recipes
|
|
259
|
+
|
|
260
|
+
**Radio cards** — one bordered full-width row per option, the price on the
|
|
261
|
+
trailing edge of the label cell, the delivery time as the row's description:
|
|
262
|
+
|
|
263
|
+
**Shipping method cards**
|
|
264
|
+
|
|
265
|
+
```vue
|
|
266
|
+
<template>
|
|
267
|
+
<div class="max-w-md">
|
|
268
|
+
<BbRadioGroup
|
|
269
|
+
v-model="method"
|
|
270
|
+
item-layout="label-fill"
|
|
271
|
+
:item-props="{ description: 'eta' }"
|
|
272
|
+
item-text="name"
|
|
273
|
+
item-value="id"
|
|
274
|
+
:items="methods"
|
|
275
|
+
legend="Shipping"
|
|
276
|
+
list-layout="vertical-stretch"
|
|
277
|
+
name="shipping"
|
|
278
|
+
pt:item="rounded-(--bb-radius) border px-4 py-3"
|
|
279
|
+
pt:item:checked="border-(--bb-primary) bg-(--bb-muted)"
|
|
280
|
+
pt:list="[--row-gap:8px]"
|
|
281
|
+
>
|
|
282
|
+
<template #label="{ item }">
|
|
283
|
+
<span class="flex justify-between gap-4">
|
|
284
|
+
<span>{{ item.name }}</span>
|
|
285
|
+
<span class="tabular-nums">{{ item.price }}</span>
|
|
286
|
+
</span>
|
|
287
|
+
</template>
|
|
288
|
+
</BbRadioGroup>
|
|
289
|
+
</div>
|
|
290
|
+
</template>
|
|
291
|
+
<script setup lang="ts">
|
|
292
|
+
import { ref } from 'vue';
|
|
293
|
+
import { BbRadioGroup } from 'bitboss-ui';
|
|
294
|
+
|
|
295
|
+
type Method = { id: string; name: string; price: string; eta: string };
|
|
296
|
+
|
|
297
|
+
// Radio cards: one full-width bordered row per option
|
|
298
|
+
// (`list-layout="vertical-stretch"`), the radio first and the label cell
|
|
299
|
+
// filling the rest (`item-layout="label-fill"`), so a flex row in `#label`
|
|
300
|
+
// pushes the price to the trailing edge. The delivery time is the row's
|
|
301
|
+
// `itemProps.description`, which sits under the label, beside the radio.
|
|
302
|
+
const methods: Method[] = [
|
|
303
|
+
{ id: 'standard', name: 'Standard', price: '€4.90', eta: '3–5 working days' },
|
|
304
|
+
{ id: 'express', name: 'Express', price: '€9.90', eta: 'Next working day' },
|
|
305
|
+
{
|
|
306
|
+
id: 'pickup',
|
|
307
|
+
name: 'Pick up in store',
|
|
308
|
+
price: 'Free',
|
|
309
|
+
eta: 'Ready in 2 hours',
|
|
310
|
+
},
|
|
311
|
+
];
|
|
312
|
+
|
|
313
|
+
const method = ref<string>('standard');
|
|
314
|
+
</script>
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
A **segmented control** that is still a radiogroup (arrow keys, "2 of 4"):
|
|
318
|
+
equal tiles, the dot hidden with `pt:icon="hidden"`, the checked label
|
|
319
|
+
recoloured on `pt:label:checked` — the label cell paints its own colour, so a
|
|
320
|
+
colour on `pt:item` never reaches it:
|
|
321
|
+
|
|
322
|
+
**Segmented range picker**
|
|
323
|
+
|
|
324
|
+
```vue
|
|
325
|
+
<template>
|
|
326
|
+
<div class="max-w-sm">
|
|
327
|
+
<BbRadioGroup
|
|
328
|
+
v-model="range"
|
|
329
|
+
item-layout="vertical"
|
|
330
|
+
:items="['Day', 'Week', 'Month', 'Year']"
|
|
331
|
+
legend="Range"
|
|
332
|
+
list-layout="tiles"
|
|
333
|
+
name="range"
|
|
334
|
+
pt:icon="hidden"
|
|
335
|
+
pt:item="justify-items-center gap-0 rounded-[calc(var(--bb-radius)-2px)] py-1.5"
|
|
336
|
+
pt:item:checked="bg-(--bb-primary)"
|
|
337
|
+
pt:item:focus-visible="ring-2 ring-(--bb-primary-ring)"
|
|
338
|
+
pt:label="text-sm"
|
|
339
|
+
pt:label:checked="text-(--bb-primary-fg)"
|
|
340
|
+
pt:list="[--gap:2px] [--tile-min-width:0px] rounded-(--bb-radius) border p-0.5"
|
|
341
|
+
/>
|
|
342
|
+
</div>
|
|
343
|
+
</template>
|
|
344
|
+
<script setup lang="ts">
|
|
345
|
+
import { ref } from 'vue';
|
|
346
|
+
import { BbRadioGroup } from 'bitboss-ui';
|
|
347
|
+
|
|
348
|
+
// A segmented control that is still a radiogroup: arrow keys move the
|
|
349
|
+
// choice, screen readers announce "radio, 2 of 4". `list-layout="tiles"`
|
|
350
|
+
// with `--tile-min-width: 0` shares the track evenly; `item-layout="vertical"`
|
|
351
|
+
// lets the label centre over the hidden glyph cell. `pt:icon="hidden"` drops
|
|
352
|
+
// the dot (an empty `#icon` slot would fall back to it), and the checked text
|
|
353
|
+
// colour goes on `pt:label:checked` because the label paints its own colour.
|
|
354
|
+
const range = ref<string>('Week');
|
|
355
|
+
</script>
|
|
356
|
+
```
|
|
357
|
+
|
|
138
358
|
### Legend, validation and required
|
|
139
359
|
|
|
140
360
|
The `legend` names the group — always set it. `description` is always-visible
|
|
@@ -146,7 +366,7 @@ rendered below the group in its own `aria-live="polite"` region (also
|
|
|
146
366
|
referenced from `aria-describedby` while displayed) for a
|
|
147
367
|
valid-but-noteworthy choice (unusual, near a limit, soft-flagged), and a
|
|
148
368
|
non-empty `warnings` implies the warning state just as `errors` implies the error
|
|
149
|
-
state; **`has-
|
|
369
|
+
state; **`has-warnings`** forces that amber chrome without a message. Unlike
|
|
150
370
|
`has-errors`, neither sets `aria-invalid` — a soft "needs a second look", not an
|
|
151
371
|
invalid value — and `has-errors` wins when both are set, suppressing the warning
|
|
152
372
|
messages so the group never shows amber and red at once. `required` marks the group as required — because these are native radios,
|
|
@@ -157,7 +377,7 @@ it participates in native form validation. `legend-mode` places the legend
|
|
|
157
377
|
|
|
158
378
|
```vue
|
|
159
379
|
<template>
|
|
160
|
-
<div class="max-w-sm rounded-
|
|
380
|
+
<div class="max-w-sm rounded-(--bb-radius) border p-4">
|
|
161
381
|
<BbRadioGroup
|
|
162
382
|
v-model="cycle"
|
|
163
383
|
compact
|
|
@@ -210,7 +430,7 @@ Keep the set short enough that arrow-cycling stays quick; past ~6 options prefer
|
|
|
210
430
|
### Async items, loading and coherence
|
|
211
431
|
|
|
212
432
|
`items` accepts a provider function for options fetched from an API;
|
|
213
|
-
`loading-text` / `#loading` and `
|
|
433
|
+
`loading-text` / `#loading` and `empty-text` / `#empty` cover the loading
|
|
214
434
|
and empty states, `dependencies` (+ `deps-debounce-time`) trigger re-fetches,
|
|
215
435
|
and `enforce-coherence` resets the model to `null` when the current value no
|
|
216
436
|
longer matches an available option. See the
|
|
@@ -232,17 +452,15 @@ valid yet" and gate the submit on it.
|
|
|
232
452
|
|
|
233
453
|
```vue
|
|
234
454
|
<template>
|
|
235
|
-
<div
|
|
236
|
-
class="flex max-w-md flex-col gap-3 rounded-[var(--bb-radius)] border p-4"
|
|
237
|
-
>
|
|
455
|
+
<div class="flex max-w-md flex-col gap-3 rounded-(--bb-radius) border p-4">
|
|
238
456
|
<BbRadioGroup
|
|
239
457
|
v-model="branch"
|
|
240
458
|
compact
|
|
241
|
-
input-direction="horizontal"
|
|
242
459
|
item-text="label"
|
|
243
460
|
item-value="id"
|
|
244
461
|
:items="branches"
|
|
245
462
|
legend="Target branch"
|
|
463
|
+
list-layout="horizontal"
|
|
246
464
|
name="merge-branch"
|
|
247
465
|
/>
|
|
248
466
|
<BbRadioGroup
|
|
@@ -260,7 +478,7 @@ valid yet" and gate the submit on it.
|
|
|
260
478
|
name="merge-strategy"
|
|
261
479
|
persistent-hint
|
|
262
480
|
/>
|
|
263
|
-
<p class="strategy-summary text-xs text-
|
|
481
|
+
<p class="strategy-summary text-xs text-(--bb-text-muted)">
|
|
264
482
|
Strategy: {{ strategy ?? 'none selected' }}
|
|
265
483
|
</p>
|
|
266
484
|
</div>
|
|
@@ -313,35 +531,42 @@ const loadStrategies = (
|
|
|
313
531
|
|
|
314
532
|
### Slots
|
|
315
533
|
|
|
316
|
-
`#label` replaces an option's text (`{ item, text }`); `#icon` replaces the
|
|
534
|
+
`#label` replaces an option's text (`{ item, text, checked }` — `checked` is what tile layouts key off); `#icon` replaces the
|
|
317
535
|
default radio-dot visual for each option (you then own its selected/focus
|
|
318
|
-
styling). `#legend` replaces the fieldset legend (`{ text, hasErrors }`);
|
|
536
|
+
styling). `#legend` replaces the fieldset legend (`{ text, hasErrors, hasWarnings }`; plus `showAsterisk` when the required marker shows);
|
|
319
537
|
`#prepend` / `#append` inject content inside the options container.
|
|
320
538
|
|
|
321
539
|
### Selection tiles
|
|
322
540
|
|
|
323
541
|
For a small set of mutually-exclusive choices that read better as cards than a
|
|
324
542
|
plain list — theme (light/dark/system), an import mode — compose `#icon` +
|
|
325
|
-
`#label` with
|
|
543
|
+
`#label` with `pt:item` on the option row. Don't reach for a bespoke
|
|
326
544
|
tile component or a 2-option `BbSelect`; the semantics (one `<fieldset>`,
|
|
327
545
|
native roving focus, one bound value) are exactly what this component already
|
|
328
|
-
gives you.
|
|
329
|
-
|
|
546
|
+
gives you. The checked row resolves `pt:item:checked` — style off that, not a
|
|
547
|
+
`:has()` selector.
|
|
548
|
+
|
|
549
|
+
**Text-only tiles:** hide the dot with `pt:icon="hidden"`. An empty `#icon`
|
|
550
|
+
slot does not remove it: the default dot is the slot's fallback and renders
|
|
551
|
+
whenever the slot is empty.
|
|
330
552
|
|
|
331
553
|
**Theme selection tiles**
|
|
332
554
|
|
|
333
555
|
```vue
|
|
334
556
|
<template>
|
|
335
|
-
<div class="max-w-md rounded-
|
|
557
|
+
<div class="max-w-md rounded-(--bb-radius) border p-4">
|
|
336
558
|
<BbRadioGroup
|
|
337
559
|
v-model="theme"
|
|
338
560
|
class="theme-tiles"
|
|
339
|
-
|
|
561
|
+
item-layout="vertical"
|
|
340
562
|
item-text="label"
|
|
341
563
|
item-value="id"
|
|
342
564
|
:items="themes"
|
|
343
565
|
legend="Appearance"
|
|
566
|
+
list-layout="tiles"
|
|
344
567
|
name="theme"
|
|
568
|
+
pt:item="theme-tiles__tile"
|
|
569
|
+
pt:item:checked="theme-tiles__tile--selected"
|
|
345
570
|
>
|
|
346
571
|
<template #icon="{ item }">
|
|
347
572
|
<BbIcon :icon="item.icon" size="lg" />
|
|
@@ -368,25 +593,25 @@ const theme = ref<string>('system');
|
|
|
368
593
|
</script>
|
|
369
594
|
<style scoped>
|
|
370
595
|
/*
|
|
371
|
-
*
|
|
372
|
-
*
|
|
373
|
-
*
|
|
596
|
+
* The layout is two props: `list-layout="tiles"` makes equal-size boxes that
|
|
597
|
+
* wrap when the field narrows, `item-layout="vertical"` stacks the glyph over
|
|
598
|
+
* the caption. What is left here is the tile's look — and centring, since a
|
|
599
|
+
* stacked row starts its cells at the left edge.
|
|
600
|
+
*
|
|
601
|
+
* `pt:item` / `pt:item:checked` hand the rows OUR classes, so nothing below
|
|
602
|
+
* names a library BEM class; `:deep()` stays because the scope attribute is on
|
|
603
|
+
* this example's root, not on the nodes.
|
|
374
604
|
*/
|
|
375
|
-
.theme-tiles :deep(.
|
|
376
|
-
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
.theme-tiles :deep(.bb-base-radio-group-option) {
|
|
605
|
+
.theme-tiles :deep(.theme-tiles__tile) {
|
|
606
|
+
align-content: center;
|
|
380
607
|
border: var(--bb-border-w) solid var(--bb-border);
|
|
381
608
|
border-radius: var(--bb-radius);
|
|
382
|
-
|
|
383
|
-
flex-direction: column;
|
|
384
|
-
justify-content: center;
|
|
609
|
+
justify-items: center;
|
|
385
610
|
padding: 12px;
|
|
386
611
|
row-gap: 6px;
|
|
387
612
|
}
|
|
388
613
|
|
|
389
|
-
.theme-tiles :deep(.
|
|
614
|
+
.theme-tiles :deep(.theme-tiles__tile--selected) {
|
|
390
615
|
background: color-mix(in oklab, var(--bb-primary) 8%, var(--bb-panel));
|
|
391
616
|
border-color: var(--bb-primary);
|
|
392
617
|
}
|
|
@@ -399,26 +624,185 @@ const theme = ref<string>('system');
|
|
|
399
624
|
|
|
400
625
|
Two width facts worth knowing before you reach for `width: 100%` anywhere:
|
|
401
626
|
|
|
402
|
-
- The options row
|
|
403
|
-
flexbox
|
|
404
|
-
|
|
405
|
-
tiles share the row evenly
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
`
|
|
411
|
-
`
|
|
412
|
-
|
|
627
|
+
- The options row is ONE node — `.bb-radio-group__list`, the `list`
|
|
628
|
+
part — a plain wrapping flexbox that holds the rows and lays them out.
|
|
629
|
+
Each option is a small grid (input cell, label, description), content-sized
|
|
630
|
+
by default; `list-layout="tiles"` makes them share the row evenly.
|
|
631
|
+
`pt:list="grid grid-cols-3"` or `pt:list="flex-col"` re-lays the rows
|
|
632
|
+
outright on a layered build.
|
|
633
|
+
- The list fills its column (`.bb-field__input-wrapper`, the whole field unless
|
|
634
|
+
`layout` puts the legend beside it): tiles share the field,
|
|
635
|
+
`list-layout="vertical-stretch"` rows are field-wide, and
|
|
636
|
+
`pt:list="grid grid-cols-3"` spreads its tracks across it. The exception is
|
|
637
|
+
`input-position="right"` / `"center"`: there the list shrink-wraps its rows
|
|
638
|
+
and sits at that edge, so stacked rows keep one shared left edge.
|
|
413
639
|
|
|
414
640
|
### Events and focus
|
|
415
641
|
|
|
416
642
|
`update:modelValue` (the `v-model` channel) carries the single selected value —
|
|
417
643
|
the only source of selection truth. Native `blur`, `change`, `click`, `focus`,
|
|
418
644
|
`input`, `keydown`, `mousedown`, `mouseup` re-emit with raw payloads, plus
|
|
419
|
-
`
|
|
645
|
+
`active` when focus enters the group (it drives the hint internally) and
|
|
646
|
+
`inactive` when focus leaves; use them for side effects, never to
|
|
420
647
|
compute selection. `autofocus` focuses the first option on mount.
|
|
421
648
|
|
|
649
|
+
**The group is controlled.** A click emits `update:modelValue` and the rows
|
|
650
|
+
move only when the parent applies the new value: ignore the update and every
|
|
651
|
+
row stays on what the model says.
|
|
652
|
+
|
|
653
|
+
### Restyling with passthrough
|
|
654
|
+
|
|
655
|
+
`pt` reaches a named part of the group with a class list — or, in the
|
|
656
|
+
object form, a style and attributes — optionally only while a state is on.
|
|
657
|
+
Parts: `root` (the fieldset), `legend` (the group's heading, after the `legend`
|
|
658
|
+
prop), `description`, `message`, `hint` (the helper line — shown on focus, or
|
|
659
|
+
always with `persistent-hint`), `item` — one option row —, `icon` — that row's glyph —, `label` — that
|
|
660
|
+
option's label text, both as on a standalone control — and `itemDescription` — its
|
|
661
|
+
muted second line (`itemProps.description`), never the group's `description`.
|
|
662
|
+
`item`, `icon`, `label` and `itemDescription` are broadcasts resolved per row. States of the
|
|
663
|
+
whole group, on every part: `hasValue` (something is chosen), `readonly`,
|
|
664
|
+
`loading` (the items are being fetched), `disabled`, `warnings`, `errors`.
|
|
665
|
+
States of one row, on the row parts only: `checked`, `focused` (that row's
|
|
666
|
+
input has focus), `focusVisible` (that focus is keyboard-visible), and the
|
|
667
|
+
row's own `disabled` — the states a standalone control has. A name outside
|
|
668
|
+
that list is a type error and an ESLint error.
|
|
669
|
+
|
|
670
|
+
The theme tiles above, restyled through those parts. The layout is two props
|
|
671
|
+
— `list-layout="tiles"` for equal boxes, `item-layout="vertical"` to stack the
|
|
672
|
+
glyph over the caption — so `pt:item` is only the tile's look, a broadcast;
|
|
673
|
+
the selected accent is `pt:item:checked`. For full-width tiles stacked one per
|
|
674
|
+
line, flip `list-layout` to `"vertical-stretch"` and change nothing else: the
|
|
675
|
+
list becomes a column and every tile fills it.
|
|
676
|
+
|
|
677
|
+
**The glyph is the row's input cell** — there is no wrapper around it, so
|
|
678
|
+
whatever you would do to that cell, do on `pt:icon`: `pt:icon="self-start"`
|
|
679
|
+
pins the dot to the top of a label that wraps (by default it centres on the
|
|
680
|
+
whole label; a row with an `itemProps.description` already puts it on the
|
|
681
|
+
label's first line), `pt:icon="mt-0.5"` nudges it, and its size is the glyph's
|
|
682
|
+
own token (see `BbBaseRadioIcon`), never a width on the row. With a custom `#icon`
|
|
683
|
+
slot, your element is the cell: put the classes on it.
|
|
684
|
+
|
|
685
|
+
A look that depends on the ITEM — a paid tier tinted differently from a free
|
|
686
|
+
one — is a **per-item function** on a row part: `:pt:item="({ item, checked })
|
|
687
|
+
=> …"`, called with the raw item (typed as your item) and every state as a
|
|
688
|
+
boolean for that row, its result merged after `pt:item:checked`. Row parts only
|
|
689
|
+
(`item`, `icon`, `label`, `itemDescription`), on the instance only. `list`
|
|
690
|
+
is the one node that holds the rows and lays them out:
|
|
691
|
+
`pt:list="grid grid-cols-3"` or `pt:list="flex-col"` re-lays them on a
|
|
692
|
+
layered build, `pt:list="[--gap:8px]"` tightens them anywhere.
|
|
693
|
+
|
|
694
|
+
**pt:item as a function — plan tiles tinted by tier**
|
|
695
|
+
|
|
696
|
+
```vue
|
|
697
|
+
<template>
|
|
698
|
+
<div class="w-full max-w-md rounded-(--bb-radius) border p-4">
|
|
699
|
+
<BbRadioGroup
|
|
700
|
+
v-model="plan"
|
|
701
|
+
class="w-full"
|
|
702
|
+
item-text="name"
|
|
703
|
+
item-value="id"
|
|
704
|
+
:items="plans"
|
|
705
|
+
legend="Plan"
|
|
706
|
+
list-layout="horizontal"
|
|
707
|
+
name="plan"
|
|
708
|
+
:pt="{
|
|
709
|
+
item: 'flex flex-1 flex-col items-start gap-0.5 rounded-(--bb-radius) border border-(--bb-border) px-3 py-2',
|
|
710
|
+
}"
|
|
711
|
+
:pt:item="
|
|
712
|
+
({ item }) => item.tier === 'paid' && 'border-amber-300 bg-amber-50'
|
|
713
|
+
"
|
|
714
|
+
pt:item:checked="ring-2 ring-(--bb-primary)"
|
|
715
|
+
pt:list="[--gap:8px]"
|
|
716
|
+
>
|
|
717
|
+
<template #label="{ item, text }">
|
|
718
|
+
<span class="text-sm font-medium">{{ text }}</span>
|
|
719
|
+
<span class="text-xs text-(--bb-text-muted)">{{ item.price }}</span>
|
|
720
|
+
</template>
|
|
721
|
+
</BbRadioGroup>
|
|
722
|
+
</div>
|
|
723
|
+
</template>
|
|
724
|
+
|
|
725
|
+
<script setup lang="ts">
|
|
726
|
+
import { ref } from 'vue';
|
|
727
|
+
import { BbRadioGroup } from 'bitboss-ui';
|
|
728
|
+
|
|
729
|
+
type Plan = { id: string; name: string; price: string; tier: 'free' | 'paid' };
|
|
730
|
+
|
|
731
|
+
// The per-item function receives the raw plan (typed as `Plan` — the group
|
|
732
|
+
// is generic over its items) and every state as a boolean; its result is
|
|
733
|
+
// merged after `pt:item:checked`, so the ring and the tint compose. `list`
|
|
734
|
+
// takes the gap by value through its `--gap` token.
|
|
735
|
+
const plans: Plan[] = [
|
|
736
|
+
{ id: 'free', name: 'Free', price: '€0', tier: 'free' },
|
|
737
|
+
{ id: 'pro', name: 'Pro', price: '€12 / mo', tier: 'paid' },
|
|
738
|
+
{ id: 'team', name: 'Team', price: '€40 / mo', tier: 'paid' },
|
|
739
|
+
];
|
|
740
|
+
|
|
741
|
+
const plan = ref<string>('pro');
|
|
742
|
+
</script>
|
|
743
|
+
```
|
|
744
|
+
|
|
745
|
+
**pt:item — appearance tiles, the selected one accented**
|
|
746
|
+
|
|
747
|
+
```vue
|
|
748
|
+
<template>
|
|
749
|
+
<div class="max-w-md rounded-(--bb-radius) border p-4">
|
|
750
|
+
<BbRadioGroup
|
|
751
|
+
v-model="theme"
|
|
752
|
+
item-layout="vertical"
|
|
753
|
+
item-text="label"
|
|
754
|
+
item-value="id"
|
|
755
|
+
:items="themes"
|
|
756
|
+
legend="Appearance"
|
|
757
|
+
list-layout="tiles"
|
|
758
|
+
name="theme"
|
|
759
|
+
pt:item="content-center justify-items-center gap-1.5 rounded-(--bb-radius) border border-(--bb-border) px-3 py-3"
|
|
760
|
+
pt:item:checked="border-(--bb-primary) bg-(--bb-muted)"
|
|
761
|
+
>
|
|
762
|
+
<template #icon="{ item }">
|
|
763
|
+
<BbIcon :icon="item.icon" size="lg" />
|
|
764
|
+
</template>
|
|
765
|
+
<template #label="{ text }">
|
|
766
|
+
<span class="text-sm">{{ text }}</span>
|
|
767
|
+
</template>
|
|
768
|
+
</BbRadioGroup>
|
|
769
|
+
</div>
|
|
770
|
+
</template>
|
|
771
|
+
|
|
772
|
+
<script setup lang="ts">
|
|
773
|
+
import { ref } from 'vue';
|
|
774
|
+
import { BbIcon, BbRadioGroup } from 'bitboss-ui';
|
|
775
|
+
|
|
776
|
+
type Theme = { id: string; label: string; icon: string };
|
|
777
|
+
|
|
778
|
+
// Same Appearance tiles as `ThemeTiles.vue`, restyled through passthrough.
|
|
779
|
+
// The layout is two props — `list-layout="tiles"` for equal boxes,
|
|
780
|
+
// `item-layout="vertical"` to stack the glyph over the caption — so `pt:item`
|
|
781
|
+
// is only the tile's look (centred, bordered) and `pt:item:checked` the
|
|
782
|
+
// accent. Flip `list-layout` to "vertical-stretch" and the same tiles stack,
|
|
783
|
+
// each as wide as the field — nothing else changes. `#icon` replaces the
|
|
784
|
+
// radio dot.
|
|
785
|
+
const themes: Theme[] = [
|
|
786
|
+
{ id: 'light', label: 'Light', icon: 'lucide:sun' },
|
|
787
|
+
{ id: 'dark', label: 'Dark', icon: 'lucide:moon' },
|
|
788
|
+
{ id: 'system', label: 'System', icon: 'lucide:monitor' },
|
|
789
|
+
];
|
|
790
|
+
|
|
791
|
+
const theme = ref<string>('system');
|
|
792
|
+
</script>
|
|
793
|
+
```
|
|
794
|
+
|
|
795
|
+
This is the old `:deep()` reach-in on the selected row's modifier class,
|
|
796
|
+
spelled as a part and a state — your class, our promise. Classes append to
|
|
797
|
+
ours, an attribute in `attrs` wins over ours. The full grammar, the merge rules
|
|
798
|
+
and the global map are in the [passthrough guide](./guides/passthrough.md).
|
|
799
|
+
|
|
800
|
+
A `pt` value written in `<script>` (a constant, a preset, a wrapper's
|
|
801
|
+
`pt` prop) is typed as `BbRadioGroupProps<Row>['pt']`, or `BbRadioGroupProps['pt']`
|
|
802
|
+
for a preset that fits any row type (never `<any>`), not an imported
|
|
803
|
+
`PtValue`: see
|
|
804
|
+
[passthrough § Typing `pt` in `<script>`](./guides/passthrough.md#typing-pt-in-script).
|
|
805
|
+
|
|
422
806
|
### Works well with
|
|
423
807
|
|
|
424
808
|
- `BbRadio` — the escape hatch when options must be interleaved with other
|
|
@@ -477,74 +861,128 @@ compute selection. `autofocus` focuses the first option on mount.
|
|
|
477
861
|
|
|
478
862
|
| Prop | Type | Default | Required | Description |
|
|
479
863
|
| --- | --- | --- | --- | --- |
|
|
864
|
+
| `pt:<part>`, `pt:<part>:<state>`, `pt` | `PtValue` | | | Passthrough — a class list, or `{ class, style, attrs }`, bound to one named part of the component; the state form applies only while that state is on. Parts: `description`, `hint`, `icon`, `item`, `itemDescription`, `label`, `legend`, `list`, `message`, `root`. States: `disabled`, `errors`, `hasValue`, `loading`, `readonly`, `warnings`, `checked`, `focused`, `focusVisible`. What each one is: _Passthrough parts and states_ below. `pt` is the object form with the same keys minus the prefix (`{ icon: '…', 'icon:loading': '…' }`). See `guides/passthrough.md`. In `<script>` a `pt` value is typed `BbRadioGroupProps<Row>['pt']` (`BbRadioGroupProps['pt']` for a preset that fits any row type, never `<any>`) (`PtValue` is not exported): § Typing `pt` in `<script>`. |
|
|
480
865
|
| `autofocus` | `Booleanish \| undefined` | | | Sets autofocus on page load. |
|
|
481
|
-
| `compact` | `boolean \| undefined` |
|
|
866
|
+
| `compact` | `boolean \| undefined` | `false` | | Compact density. Swaps `--bb-label-spacing-y` for `--bb-label-spacing-y-compact`, so tune a compact group's label gap with the `-compact` token, not the base one. |
|
|
482
867
|
| `dependencies` | `unknown[] \| undefined` | | | Defines an array of dependencies that will trigger actions in the component upon change. |
|
|
483
868
|
| `depsDebounceTime` | `number \| undefined` | | | Timeout used to debounce response to changes to dependencies. |
|
|
484
869
|
| `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`). |
|
|
485
|
-
| `
|
|
486
|
-
| `
|
|
487
|
-
| `enforceCoherence` | `boolean \| undefined` |
|
|
488
|
-
| `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
|
|
489
|
-
| `
|
|
490
|
-
| `
|
|
491
|
-
| `
|
|
492
|
-
| `
|
|
870
|
+
| `disabled` | `boolean \| undefined` | `false` | | Disables the component. |
|
|
871
|
+
| `emptyText` | `string \| undefined` | | | String displayed when there are no items to display. |
|
|
872
|
+
| `enforceCoherence` | `boolean \| undefined` | `false` | | If coherence is enforced the input cannot have a modelValue that is incoherent with its current items. e.g. You cannot set v-model to a user that is not present in the items passed. modelValue will be reset upon incoherence. |
|
|
873
|
+
| `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`, so the reason the field is invalid is re-read whenever the control regains focus. |
|
|
874
|
+
| `formless` | `boolean \| undefined` | `false` | | Keep this control out of the enclosing `BbForm` entirely: not submitted, not dirty, not reset, not validated. For a control that is not form data (a filter, a "show advanced" switch). |
|
|
875
|
+
| `hasErrors` | `boolean \| undefined` | `false` | | Define if the component should be in an error state. It usually attaches a CSS class for styling purposes. |
|
|
876
|
+
| `hasWarnings` | `boolean \| undefined` | `false` | | Define if the component should be in a warning state. Same chrome as errors with `--bb-warn`; errors take priority. |
|
|
877
|
+
| `hideLabel` | `boolean \| undefined` | `false` | | Visually hides each option's label text (the text rendered next to every input) while keeping it accessible to screen readers. Does not affect the fieldset legend — use `hideLegend` for that. |
|
|
878
|
+
| `hideLegend` | `boolean \| undefined` | `false` | | Visually hides the legend of the fieldset while maintaining accessibility. |
|
|
493
879
|
| `hint` | `string \| undefined` | | | Text box to be displayed near the input, usually to indicate instructions. |
|
|
494
|
-
| `id` | `string \| undefined` | | |
|
|
495
|
-
| `inputDirection` | `"horizontal" \| "vertical" \| undefined` | | | Defines the direction of the inputs in the fieldset. |
|
|
880
|
+
| `id` | `string \| undefined` | | | Prefix for the ids of each option's input and of the label, description and message. Generated when omitted. |
|
|
496
881
|
| `inputPosition` | `"left" \| "center" \| "right" \| undefined` | `"left"` | | Sets the alignment of the input. Since inputs are inline block they can be aligned just as text can. |
|
|
882
|
+
| `itemLayout` | `FieldLayout \| undefined` | `'auto'` | | How each row's input and label sit together — the keywords of `layout`: `'auto'`, `'vertical'` (the input above the label), `'horizontal'` (50/50), `'label-fill'` (the label takes the row's free space — pair it with `list-layout="vertical-stretch"` and `item-reverse` for a settings list), `'input-fill'`, or a two-word ratio pattern like `'xx xxxxx'`, read in on-screen order. |
|
|
883
|
+
| `itemProps` | `BbOptionGroupItemProps<T> \| undefined` | | | ADDITIONAL row fields resolved from each item — never its text or value (those stay on `itemText` / `itemValue`). Option groups accept one field: - `description` — a muted line under the option label, beside the control; it may wrap. Either an object with a path or getter per field (`{ description: 'email' }`) or a function returning the fields (`(item) => ({ description: item.email })`). Without it no field renders — an item's own `description` is never read implicitly — and an empty value renders nothing for that item. The description is announced as the option's description, never part of its name. To disable individual options use `selectable`. |
|
|
884
|
+
| `itemReverse` | `boolean \| undefined` | `false` | | Swaps each row's input and label from their natural order (input first), in every `item-layout`. `reverse` swaps the legend and the options instead. |
|
|
497
885
|
| `items` | `T[] \| ((prefill: boolean, modelValue?: any) => T[] \| Promise<T[]>)` | | yes | Used to retrieve items; can be an array or a function. |
|
|
498
|
-
| `itemText` | `ItemAccessor<T, string> \| undefined` |
|
|
499
|
-
| `itemValue` | `ItemAccessor<T> \| undefined` |
|
|
886
|
+
| `itemText` | `ItemAccessor<T, string> \| undefined` | `JSON.stringify(item)` | | Defines a path that returns a property of the object to use as text or a function that returns a string. |
|
|
887
|
+
| `itemValue` | `ItemAccessor<T> \| undefined` | `the whole item` | | Defines a path that returns a property of the object to use as value or a function that returns any value. |
|
|
888
|
+
| `layout` | `FieldLayout \| undefined` | | | How the label and the input sit together: `'vertical'`, `'horizontal'` (50/50), `'auto'`, `'label-fill'` (the label takes the free space, the input keeps its size), `'input-fill'` (the other way round), or a two-word ratio pattern like `'xx xxxxx'`. |
|
|
500
889
|
| `legend` | `string` | | yes | Text content of the legend. |
|
|
501
890
|
| `legendMode` | `"outside" \| "inside" \| undefined` | | | Legend rendering mode. `'outside'` renders the legend above the fieldset in the normal flow; `'inside'` overlays the legend inside the fieldset border. Floating mode is not supported for radio groups. |
|
|
502
891
|
| `legendPosition` | `"left" \| "center" \| "right" \| undefined` | | | Sets the text alignment of the label. |
|
|
892
|
+
| `listLayout` | `'horizontal'` \| `'vertical'` \| `'vertical-stretch'` \| `'tiles'` | `'horizontal'` | | How the rows sit inside the list: `'horizontal'` (on a line, wrapping, each row its own size), `'vertical'` (stacked, each row its own size), `'vertical-stretch'` (stacked, each row as wide as the list) or `'tiles'` (equal-size boxes, wrapping onto new lines as the field narrows; `--tile-min-width` on `pt:list` sets how narrow a tile gets). |
|
|
503
893
|
| `loadingText` | `string \| undefined` | | | String displayed while items are being loaded. |
|
|
504
|
-
| `modelValue` | `any` | |
|
|
894
|
+
| `modelValue` | `any` | | | Used by v-model. Can be any serializable type. |
|
|
505
895
|
| `modelValueDebounceTime` | `number \| undefined` | | | Timeout used to debounce response to changes to modelValue. |
|
|
506
|
-
| `name` | `string \| undefined` | | | Defines the name of the option inputs. Optional: the options live inside a single component instance, so an omitted name falls back to a generated one that groups them correctly on its own — unique per group, so two groups never clear each
|
|
507
|
-
| `
|
|
508
|
-
| `
|
|
509
|
-
| `
|
|
510
|
-
| `
|
|
511
|
-
| `
|
|
896
|
+
| `name` | `string \| undefined` | | | Defines the name of the option inputs. Optional: the options live inside a single component instance, so an omitted name falls back to a generated one that groups them correctly on its own — unique per group, so two groups never clear each other's selection, and stable for the group's lifetime. Pass a name only when the value has to be submitted under a known key by a native (non-JS) form post. |
|
|
897
|
+
| `persistentHint` | `boolean \| undefined` | `false` | | Keeps the hint displayed. |
|
|
898
|
+
| `readonly` | `boolean \| undefined` | `false` | | Sets the input in a readonly state. |
|
|
899
|
+
| `required` | `boolean \| undefined` | `false` | | Sets the input as required. |
|
|
900
|
+
| `reverse` | `boolean \| undefined` | `false` | | Reverses the layout. Applicable in every direction the order of the label and the input is swapped. |
|
|
901
|
+
| `rules` | `RuleExpression<any>` | | | vee-validate rules for this field. Only inside a `BbForm`. |
|
|
512
902
|
| `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. |
|
|
513
|
-
| `
|
|
903
|
+
| `validationLabel` | `string \| undefined` | | | The field's name in validation messages (`{field}`): "Email is not valid". Defaults to the `label` (or `legend`), then "This field"; the field's `name` never shows. Set it when the label is not a good noun for a sentence (an icon-only label, a question) or is hidden. Only inside a `BbForm`. |
|
|
904
|
+
| `validationMode` | `'aggressive'` \| `'balanced'` \| `'lazy'` \| `'submit-only'` \| `'submit-live'` | | | When this field checks itself while the user works: `aggressive` (every change), `balanced` (on leave, then every change while it shows an error), `lazy` (on leave only), `submit-only` (on submit only) or `submit-live` (on submit, then every change while it shows an error). "Leave" is blur for a text-like control, and focus leaving the whole control for a picker or a group; a checkbox or switch commits on click. Unset, the enclosing `BbForm`'s `validation-mode` applies, then the app's `formControls.validationMode` (`'balanced'`). Only inside a `BbForm`. |
|
|
905
|
+
| `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 also referenced from the control's `aria-describedby`, after any errors and before the description/hint. |
|
|
906
|
+
|
|
907
|
+
## Passthrough parts and states
|
|
908
|
+
|
|
909
|
+
`pt:<part>="…"` restyles a part; `pt:<part>:<state>="…"` applies only while the state is on. A component-wide state is on for every part at once; a _per node_ state resolves on each node of a broadcast part (one row, one option, one day). Grammar and merge rules: `guides/passthrough.md`. In `<script>`, type a `pt` value as `<Component>Props['pt']` (`<Component>Props<Row>['pt']` on a generic component); `PtValue` is not exported: `guides/passthrough.md` § Typing `pt` in `<script>`.
|
|
910
|
+
|
|
911
|
+
| Part | What it is |
|
|
912
|
+
| --- | --- |
|
|
913
|
+
| `root` | The group's container (the fieldset). |
|
|
914
|
+
| `legend` | The group's heading — the fieldset `<legend>` (the `legend` prop). |
|
|
915
|
+
| `description` | The muted line under the legend (the `description` prop). |
|
|
916
|
+
| `message` | The errors / warnings line. A node of its own: it can show at the same time as `hint`. |
|
|
917
|
+
| `hint` | The helper line (the `hint` prop), shown on focus, or always with `persistent-hint`. |
|
|
918
|
+
| `list` | The node that lays the rows out (flex + wrap, gaps on `--gap` / `--row-gap`): `pt:list="grid grid-cols-3"` re-lays them, `pt:list="[--gap:8px]"` tightens them. Takes the group-wide states only. |
|
|
919
|
+
| `item` | One option row — a broadcast, resolved per option with its own `checked` / `disabled` / focus. Takes a per-item function. |
|
|
920
|
+
| `icon` | One row's drawn glyph — the default one: a consumer `icon` slot replaces it. Takes a per-item function. |
|
|
921
|
+
| `label` | One option's label text (the `label` slot's default). Takes a per-item function. |
|
|
922
|
+
| `itemDescription` | One option's muted second line, its description. Takes a per-item function. |
|
|
923
|
+
|
|
924
|
+
States are listed in precedence order: when two are on at once and their entries conflict, the later one wins.
|
|
925
|
+
|
|
926
|
+
| State | When it is on |
|
|
927
|
+
| --- | --- |
|
|
928
|
+
| `hasValue` | Component-wide: at least one option is chosen. |
|
|
929
|
+
| `checked` | Per row, on `item`, `icon`, `label` and `itemDescription`: that option is chosen. Never on a field part. |
|
|
930
|
+
| `readonly` | Component-wide: the group is `readonly`. |
|
|
931
|
+
| `disabled` | Component-wide while the group is `disabled`; also per row, on the row parts of an option that is disabled on its own. |
|
|
932
|
+
| `warnings` | Component-wide: the group shows warnings and no errors. |
|
|
933
|
+
| `errors` | Component-wide: the group shows errors. |
|
|
934
|
+
| `focused` | Per row, on the row parts: that option's input has focus — any focus, mouse included. |
|
|
935
|
+
| `focusVisible` | Per row, on the row parts: that option's focus is keyboard-visible — where a focus ring belongs. |
|
|
936
|
+
| `loading` | Component-wide: the items are being fetched. |
|
|
514
937
|
|
|
515
938
|
## Events
|
|
516
939
|
|
|
517
|
-
- `active` — `(
|
|
518
|
-
- `blur` — `(
|
|
519
|
-
- `change` — `(
|
|
520
|
-
- `click` — `(
|
|
521
|
-
- `focus` — `(
|
|
522
|
-
- `inactive` — `(
|
|
523
|
-
- `input` — `(
|
|
524
|
-
- `keydown` — `(
|
|
525
|
-
- `mousedown` — `(
|
|
526
|
-
- `mouseup` — `(
|
|
527
|
-
- `update:modelValue` — `(
|
|
940
|
+
- `active` — `(): void` — Emitted when the group becomes active (focus/click enters it).
|
|
941
|
+
- `blur` — `(event: FocusEvent): void` — Emitted when one of the generated radio inputs loses focus. Forwards the original DOM `FocusEvent`.
|
|
942
|
+
- `change` — `(event: Event): void` — Emitted when a radio option is selected. Forwards the original DOM `Event` from the radio input.
|
|
943
|
+
- `click` — `(event: MouseEvent): void` — Emitted when one of the generated radio inputs is clicked. Forwards the original DOM `MouseEvent`.
|
|
944
|
+
- `focus` — `(event: FocusEvent): void` — Emitted when one of the generated radio inputs receives focus. Forwards the original DOM `FocusEvent`.
|
|
945
|
+
- `inactive` — `(): void` — Emitted when focus/click moves outside the group after it was active. Useful for validation-on-blur flows at group level.
|
|
946
|
+
- `input` — `(event: Event): void` — Emitted on native input events from generated radio inputs. Forwards the original DOM `Event`.
|
|
947
|
+
- `keydown` — `(event: KeyboardEvent): void` — Emitted for keyboard interaction on generated radio inputs. Forwards the original DOM `KeyboardEvent`.
|
|
948
|
+
- `mousedown` — `(event: MouseEvent): void` — Emitted when a pointing device button is pressed over a radio input. Forwards the original DOM `MouseEvent`.
|
|
949
|
+
- `mouseup` — `(event: MouseEvent): void` — Emitted when a pointing device button is released over a radio input. Forwards the original DOM `MouseEvent`.
|
|
950
|
+
- `update:modelValue` — `(value: any): void` — Emitted with the newly selected value when the selection changes.
|
|
528
951
|
|
|
529
952
|
## Slots
|
|
530
953
|
|
|
531
954
|
- `append` — scope: `object` — Content rendered after the last option, inside the options container.
|
|
532
|
-
- `
|
|
533
|
-
- `
|
|
534
|
-
- `
|
|
955
|
+
- `description` — scope: `BbRadioGroupDescriptionSlotProps` `{ text: string; hasErrors: boolean; hasWarnings: boolean }` — Replaces the description text. Provided alone (no `description` prop) it still renders the description region and wires it into `aria-describedby`.
|
|
956
|
+
- `empty` — scope: `object` — Content shown when no options are available (replaces the default "no data" text).
|
|
957
|
+
- `icon` — scope: `BbRadioGroupIconSlotProps<T>` `{ disabled: boolean; readonly: boolean; checked: boolean; focused: boolean; focusVisible: boolean; id: string; name: string; hasErrors: boolean; hasWarnings: boolean; parsedValue: string; value: any; item: T; text: string }` — Replaces the default radio dot icon for each option. Receives the radio state plus the source item and its display text.
|
|
958
|
+
- `label` — scope: `BbRadioGroupLabelSlotProps<T>` `{ item: T; text: string; checked: boolean; description: string }` — Replaces the default label text for each option.
|
|
959
|
+
- `legend` — scope: `BbRadioGroupLegendSlotProps` `{ text: string; hasErrors: boolean; hasWarnings: boolean }` — Replaces the default fieldset legend text for the group.
|
|
535
960
|
- `loading` — scope: `object` — Content shown while options are loading (replaces the default loading text).
|
|
536
|
-
- `no-data` — scope: `object` — Content shown when no options are available (replaces the default "no data" text).
|
|
537
961
|
- `prepend` — scope: `object` — Content rendered before the first option, inside the options container.
|
|
538
962
|
|
|
539
|
-
##
|
|
963
|
+
## CSS custom properties
|
|
540
964
|
|
|
541
|
-
|
|
965
|
+
Set these on the element, or on a class you put on it, to retune this component alone — the sanctioned alternative to reaching past the API with `:deep()`. They are this component's own locals — a **Set on** of `pt:<part>` means the local lives on that part's element, so set it through that entry (`pt:box="[--border-color:var(--color-green-500)]"`); the global `--bb-*` theme tokens are a separate tier (see the [design-tokens guide](./guides/design-tokens.md), or the MCP `list_tokens` tool).
|
|
542
966
|
|
|
543
|
-
|
|
|
967
|
+
| Property | Default | What it is |
|
|
544
968
|
| --- | --- | --- |
|
|
545
|
-
| `
|
|
546
|
-
| `
|
|
547
|
-
| `
|
|
969
|
+
| `--gap` | `24px` | Space between rows on one line. |
|
|
970
|
+
| `--row-gap` | `10px` | Space between wrapped lines. |
|
|
971
|
+
| `--tile-min-width` | `96px` | How narrow a tile may get before the tiles wrap (`tiles` only). |
|
|
972
|
+
|
|
973
|
+
## Component tree
|
|
974
|
+
|
|
975
|
+
`BbRadioGroup` is not one component: rendering it mounts every component below, and each one is live inside it. **Read this before styling, theming or debugging `BbRadioGroup`, and before concluding a part, a token or a behaviour does not exist** — it may live on a component further down. How to read it:
|
|
976
|
+
|
|
977
|
+
- **_internal_** nodes are building blocks with no API of their own: you reach them only through `BbRadioGroup`. A pt part listed as landing there is set on `BbRadioGroup` (`pt:<part>`).
|
|
978
|
+
- **_public_** nodes are components with their own contract. `BbRadioGroup` reaches one only through a pt part of its own that lands on it (shown on the parent node as `part → Component`, e.g. `spinner → BbSpinner`) or through a pt map it hands it (shown as "hands … the pt map", in `BbRadioGroup`'s words → the child's). The child's other props and parts are not exposed; its contract explains what it renders.
|
|
979
|
+
- **CSS custom properties** listed on a node are declared on THAT node's root and read by elements inside it. Set one on that node's root or on the element inside it that reads it — the pt part that lands there is how you reach it (`pt:box="[--border-color:…]"` on a text input) — never on `BbRadioGroup`'s root, where the node's own declaration masks it (design-tokens guide, _Overriding one from a consumer app_, rule 0).
|
|
980
|
+
- Listed nodes are the ones `BbRadioGroup`'s API reaches or that declare a documented CSS variable; the rest fold into "also mounts". The complete tree, repeats and undocumented locals included, is the `tree` field of this component in `components.json`.
|
|
981
|
+
|
|
982
|
+
- `BbRadioGroup` _(this component)_ — its own template binds: `icon` → `BbBaseRadioIcon`
|
|
983
|
+
- `CommonField` _(internal — not importable, reach it through `BbRadioGroup`)_ — `BbRadioGroup`'s pt parts land here: `root` → `div.bb-field`, `label` → `component`, `description` → `span.bb-field__description`, `hint` → `span.bb-field__hint`, `message` → `div.bb-field__message`; also mounts `BbAsterisk`
|
|
984
|
+
- `OptionsContainer` _(internal — not importable, reach it through `BbRadioGroup`)_ — `BbRadioGroup`'s pt parts land here: `list` → `span`, `item` → `label`, `label` → `span`, `itemDescription` → `span`
|
|
985
|
+
- Also mounts `BbBaseRadioIcon`
|
|
548
986
|
|
|
549
987
|
## See Also
|
|
550
988
|
|