Toggle Group
Groups multiple toggle controls, allowing users to enable one or multiple options.
Structure
Single & Multiple
The ToggleGroup
component supports two type
props, 'single'
and 'multiple'
. When the type
is set to 'single'
, the ToggleGroup
will only allow a single item to be selected at a time, and the type of the value
prop will be a string.
When the type
is set to 'multiple'
, the ToggleGroup
will allow multiple items to be selected at a time, and the type of the value
prop will be an array of strings.
Managing Value State
Bits UI offers several approaches to manage and synchronize the component's value state, catering to different levels of control and integration needs.
1. Two-Way Binding
For seamless state synchronization, use Svelte's bind:value
directive. This method automatically keeps your local state in sync with the component's internal state.
Key Benefits
- Simplifies state management
- Automatically updates
myValue
when the internal state changes (e.g., via clicking on an item) - Allows external control (e.g., toggling an item via a separate button)
2. Change Handler
For more granular control or to perform additional logic on state changes, use the onValueChange
prop. This approach is useful when you need to execute custom logic alongside state updates.
Use Cases
- Implementing custom behaviors on value change
- Integrating with external state management solutions
- Triggering side effects (e.g., logging, data fetching)
3. Fully Controlled
For complete control over the component's value state, use the controlledValue
prop. This approach requires you to manually manage the value state, giving you full control over when and how the component responds to value change events.
To implement controlled state:
- Set the
controlledValue
prop totrue
on theToggleGroup.Root
component. - Provide a
value
prop toToggleGroup.Root
, which should be a variable holding the current state. - Implement an
onValueChange
handler to update the state when the internal state changes.
When to Use
- Implementing complex logic
- Coordinating multiple UI elements
- Debugging state-related issues
Note
While powerful, fully controlled state should be used judiciously as it increases complexity and can cause unexpected behaviors if not handled carefully.
For more in-depth information on controlled components and advanced state management techniques, refer to our Controlled State documentation.
API Reference
The root component which contains the toggle group items.
Property | Type | Description |
---|---|---|
type required | enum | The type of toggle group. Default: undefined |
value $bindable | union | The value of the toggle group. If the Default: undefined |
onValueChange | function | A callback function called when the value of the toggle group changes. The type of the value is dependent on the type of the toggle group. Default: undefined |
controlledValue | boolean | Whether or not the value is controlled or not. If Default: false |
disabled | boolean | Whether or not the switch is disabled. Default: false |
loop | boolean | Whether or not the toggle group should loop when navigating. Default: true |
orientation | enum | The orientation of the toggle group. Default: horizontal |
rovingFocus | boolean | Whether or not the toggle group should use roving focus when navigating. Default: true |
ref $bindable | HTMLDivElement | The underlying DOM element being rendered. You can bind to this to get a reference to the element. Default: undefined |
children | Snippet | The children content to render. Default: undefined |
child | Snippet | Use render delegation to render your own element. See Child Snippet docs for more information. Default: undefined |
Data Attribute | Value | Description |
---|---|---|
data-orientation | enum | The orientation of the toggle group. |
data-toggle-group-root | '' | Present on the root element. |
An individual toggle item within the group.
Property | Type | Description |
---|---|---|
value | string | The value of the item. Default: undefined |
disabled | boolean | Whether or not the switch is disabled. Default: false |
ref $bindable | HTMLButtonElement | The underlying DOM element being rendered. You can bind to this to get a reference to the element. Default: undefined |
children | Snippet | The children content to render. Default: undefined |
child | Snippet | Use render delegation to render your own element. See Child Snippet docs for more information. Default: undefined |
Data Attribute | Value | Description |
---|---|---|
data-state | enum | Whether the toggle item is in the on or off state. |
data-value | '' | The value of the toggle item. |
data-orientation | enum | The orientation of the toggle group. |
data-disabled | '' | Present when the toggle item is disabled. |
data-toggle-group-item | '' | Present on the toggle group item. |