Toggle
A control element that switches between two states, providing a binary choice.
Structure
Managing Pressed State
Bits UI offers several approaches to manage and synchronize the Toggle's pressed state, catering to different levels of control and integration needs.
1. Two-Way Binding
For seamless state synchronization, use Svelte's bind:pressed
directive. This method automatically keeps your local state in sync with the component's internal state.
Key Benefits
- Simplifies state management
- Automatically updates
myPressed
when the switch changes (e.g., via clicking on the toggle) - Allows external control (e.g., pressing/toggling via a separate button/programmatically)
2. Change Handler
For more granular control or to perform additional logic on state changes, use the onPressedChange
prop. This approach is useful when you need to execute custom logic alongside state updates.
Use Cases
- Implementing custom behaviors on pressed/unpressed
- Integrating with external state management solutions
- Triggering side effects (e.g., logging, data fetching)
3. Fully Controlled
For complete control over the component's pressed state, use the controlledPressed
prop. This approach requires you to manually manage the checked state, giving you full control over when and how the component responds to change events.
To implement controlled state:
- Set the
controlledPressed
prop totrue
on theToggle.Root
component. - Provide a
pressed
prop toToggle.Root
, which should be a variable holding the current state. - Implement an
onPressedChange
handler to update the state when the internal state changes.
When to Use
- Implementing complex checked/unchecked 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 toggle button.
Property | Type | Description |
---|---|---|
pressed $bindable | boolean | Whether or not the toggle button is pressed. Default: false |
onPressedChange | function | A callback function called when the pressed state of the toggle changes. Default: undefined |
controlledPressed | boolean | Whether or not the pressed state is controlled or not. If Default: false |
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 delegation docs for more information. Default: undefined |
Data Attribute | Value | Description |
---|---|---|
data-state | enum | Whether the toggle is in the on or off state. |
data-disabled | '' | Present when the toggle is disabled. |
data-toggle-root | '' | Present on the root element. |