Props
| Name | Description |
|---|---|
autofocus Type: Booleanish | Focuses the field when it mounts (a dialog already open included), unless the user is typing in another field. |
compact Type: booleanDefaultfalse | Compact density. Swaps |
dependencies Type: unknown[] | Defines an array of dependencies that will trigger actions in the component upon change. |
depsDebounceTime Type: number | Timeout used to debounce response to changes to dependencies. |
description Type: string | Text between the label and the input. Unlike the hint it is always visible; it joins the input's One description for the whole set. It is also the only place |
disabled Type: booleanDefaultfalse | Disables the component. Locks every switch, the ones that are on included, and keeps the values out of a native post. To freeze a selection that must still be submitted, use |
emptyText Type: string | String displayed when there are no items to display. |
enforceCoherence Type: booleanDefaultfalse | After every applied, successful load (an empty one included), drops the model values the options no longer contain (a single value resets to |
errors Type: string | string[] | Error messages under the field, a string or array, in an One channel for the fieldset, and it paints every row. On an instant-save group a refused write concerns one row, so report it in a status line or a toast instead. |
failedText Type: stringDefaultthe localized common.failedText ("Couldn't load items") | String displayed in the empty state while the latest load FAILED (the |
formless Type: booleanDefaultfalse | Keep this control out of the enclosing |
hasErrors Type: booleanDefaultfalse | Define if the component should be in an error state. It usually attaches a CSS class for styling purposes. |
hasWarnings Type: booleanDefaultfalse | Define if the component should be in a warning state. Same chrome as errors with |
hideLabel Type: booleanDefaultfalse | 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 Type: booleanDefaultfalse | Visually hides the legend of the fieldset while maintaining accessibility. |
hint Type: string | Text box to be displayed near the input, usually to indicate instructions. |
id Type: string | Prefix for the ids of each option's input and of the label, description and message. Generated when omitted. |
inputAlign Type: FieldCrossAlign | Vertical position of the control in a side-by-side row; not |
inputPosition Type: "left" | "center" | "right"Default"left" | Sets the alignment of the input. Since inputs are inline block they can be aligned just as text can. |
itemInputAlign Type: FieldCrossAlign | Vertical position of each option's control in its row; |
itemLabelAlign Type: FieldCrossAlign | Vertical position of each option's label in its row. Omitted, it stays as it is. |
itemLayout Type: FieldLayoutDefault'auto' | How each row's input and label sit together, in the |
itemProps Type: BbOptionGroupItemProps<T> | ADDITIONAL row fields, never the text or value: |
itemReverse Type: booleanDefaultfalse | Swaps each row's input and label from their natural order (input first), in every |
items requiredType: T[] | ((context: BbCheckboxGroupItemsContext) => T[] | Promise<T[]>) | The options: an array, or a provider called with a Same mapping as BbCheckboxGroup, down to the accessors and the silent de-duplication by resolved value. See example |
itemText Type: ItemAccessor<T, string>Defaultown label, else text, else JSON.stringify(item) | Defines a path that returns a property of the object to use as text or a function that returns a string.
Unset: own |
itemValue Type: ItemAccessor<T>Defaultown value, else the whole item | Defines a path that returns a property of the object to use as value or a function that returns any value.
Unset: own |
labelAlign Type: FieldCrossAlign | Vertical position of the label block in a side-by-side row; not |
layout Type: Responsive<FieldLayout> | How label and input sit together: |
legend requiredType: string | Text content of the legend. Required. It names the set of states, which is what a screen reader announces before the first switch. See example |
legendMode Type: "outside" | "inside" | Legend rendering mode. |
legendPosition Type: "left" | "center" | "right" | Sets the text alignment of the label. |
listLayout Type: ListLayoutDefault'horizontal' | How the rows sit in the list: A settings list is |
loadingText Type: string | String displayed while items are being loaded. |
max Type: number | Maximum number of selected items. Once the cap is reached the switches that are off render disabled and the ones that are on stay live, so the user swaps rather than getting stuck. See example |
modelValue Type: any | Used by v-model. Can be an array of any serializable type. |
modelValueDebounceTime Type: number | Timeout used to debounce response to changes to modelValue. |
multiple Type: booleanDefaulttrue | Enables multi-selection behavior. When true, True by default, so the model is an array: unbound, it starts empty, and a non-array value such as |
name Type: string | Defines the name of the input. |
persistentHint Type: booleanDefaultfalse | Keeps the hint displayed. |
pt Type: GroupPtMap<T> | Passthrough, object form: the same keys as the |
pt:<part> Type: PtValue | ((ctx: PtItemCtx<T, GroupPtState>) => PtItemResult) | Passthrough, attribute form: one attribute per part, |
readonly Type: booleanDefaultfalse | Sets the input in a readonly state. Keeps the switches focusable and submitted while swallowing changes, which is what an instant-save group holds itself in while its request is in flight. See example |
reverse Type: booleanDefaultfalse | Reverses the layout. Applicable in every direction the order of the label and the input is swapped. |
rules Type: RuleExpression<any> | vee-validate rules for this field. Only inside a |
selectable Type: boolean | ((item: T) => boolean)Defaulttrue | 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. A boolean for the group or a predicate over the item, resolving through the same per-option path as |
validationLabel Type: string | The field's name in validation messages ( |
validationMode Type: ValidationMode | When the field validates: |
warnings Type: string | string[] | Warning messages under the field, a string or array: amber, in their own |
v-model
Values kept in sync through v-model.
| Name | Description |
|---|---|
modelValue Type: any | The array of the options that are on, re-emitted in full on every change. An instant-save handler receives the whole next array and diffs it against the previous one; reading the single toggle off a |
Events
| Name | Description |
|---|---|
active Type: (): void | Emitted when the group becomes active (focus/click enters it). |
blur Type: (event: FocusEvent): void | Emitted when one of the generated switch inputs loses focus. Forwards the original DOM |
change Type: (event: Event): void | Emitted when an option is toggled. Forwards the original DOM |
click Type: (event: MouseEvent): void | Emitted when one of the generated switch inputs is clicked. Forwards the original DOM |
focus Type: (event: FocusEvent): void | Emitted when one of the generated switch inputs receives focus. Forwards the original DOM |
inactive Type: (): void | Emitted when focus/click moves outside the group after it was active. Useful for validation-on-blur flows at group level. |
input Type: (event: Event): void | Emitted on native input events from generated switch inputs. Forwards the original DOM |
keydown Type: (event: KeyboardEvent): void | Emitted for keyboard interaction on generated switch inputs. Forwards the original DOM |
mousedown Type: (event: MouseEvent): void | Emitted when a pointing device button is pressed over a switch input. Forwards the original DOM |
mouseup Type: (event: MouseEvent): void | Emitted when a pointing device button is released over a switch input. Forwards the original DOM |
update:modelValue Type: (value: any): void | Emitted with the coherent next selection array whenever selection changes. Bind this together with |
Slots
The listed properties are the ones exposed to the slot scope.
| Name | Description |
|---|---|
append Type: object | Content rendered after the last option, inside the options container. |
description Type: BbSwitchGroupDescriptionSlotProps | Replaces the description text. Provided alone (no |
empty Type: { error: unknown; } | Content shown when no options are available (replaces the default "no data" text). |
icon Type: BbSwitchGroupIconSlotProps<T> | Replaces the default switch track visual for each option. Receives the switch state plus the source item and its display text. Replaces the entire track and thumb per option, not a glyph inside them, so the slot content has to communicate on, off and focused by itself. The input underneath keeps |
label Type: BbSwitchGroupLabelSlotProps<T> | Replaces the default label text for each option. |
legend Type: BbSwitchGroupLegendSlotProps | Replaces the default fieldset legend text for the group. |
loading Type: object | Content shown while options are loading (replaces the default loading text). |
prepend Type: object | Content rendered before the first option, inside the options container. |
Renamed and removed
Names from v2 and from earlier 3.0 betas that no longer work, and what to write instead.
colorremovedfails silentlydirectionlayoutfails silentlyhasWarninghasWarningsfails silentlyinputDirectionlistLayoutfails silentlylabelPositionlegendPositionfails silently- slot
no-dataemptyfails silently noDataTextemptyTextfails silentlyvalidateOnvalidationModefails silentlyAn array of events became one mode (
aggressive|balanced|lazy|submit-only|submit-live). The old defaults (['blur'],['inactive'], a toggle's['update:modelValue', 'change', 'blur']) arebalanced, the new default: delete the prop. A text field on['update:modelValue']isvalidation-mode="aggressive". Set it once on<BbForm validation-mode>instead of per field.vidremovedfails silentlyA display name (v2:
vid="Email address") is nowvalidation-label; a field path (3.0 betas:vid="address.city") is nowname(brackets for a native post:address[city]).check --fixpicks by the value.