Switch
A toggle control enabling users to switch between "on" and "off" states.
	<script lang="ts">
  import { Switch, Label } from "$lib";
</script>
 
<div class="flex items-center space-x-3">
  <Switch.Root
    id="marketing"
    class="peer inline-flex h-[36px] min-h-[36px] w-[60px] shrink-0 cursor-pointer items-center rounded-full bg-dark-10 px-[3px] transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-foreground focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-foreground data-[state=unchecked]:bg-dark-10 data-[state=unchecked]:shadow-mini-inset"
  >
    <Switch.Thumb
      class="pointer-events-none block shrink-0 rounded-full bg-background transition-transform sq-[30px] data-[state=checked]:translate-x-6 data-[state=unchecked]:translate-x-0 data-[state=unchecked]:shadow-mini dark:border-border-input dark:shadow-mini dark:data-[state=unchecked]:border"
    />
  </Switch.Root>
  <Label.Root for="marketing" class="text-sm font-medium"
    >Do not disturb</Label.Root
  >
</div>
	
	<script lang="ts">
  import { Switch, Label } from "$lib";
</script>
 
<div class="flex items-center space-x-3">
  <Switch.Root
    id="marketing"
    class="peer inline-flex h-[36px] min-h-[36px] w-[60px] shrink-0 cursor-pointer items-center rounded-full bg-dark-10 px-[3px] transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-foreground focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-foreground data-[state=unchecked]:bg-dark-10 data-[state=unchecked]:shadow-mini-inset"
  >
    <Switch.Thumb
      class="pointer-events-none block shrink-0 rounded-full bg-background transition-transform sq-[30px] data-[state=checked]:translate-x-6 data-[state=unchecked]:translate-x-0 data-[state=unchecked]:shadow-mini dark:border-border-input dark:shadow-mini dark:data-[state=unchecked]:border"
    />
  </Switch.Root>
  <Label.Root for="marketing" class="text-sm font-medium"
    >Do not disturb</Label.Root
  >
</div>
	
Structure
	<script lang="ts">
  import { Switch } from "bits-ui";
</script>
 
<Switch.Root>
  <Switch.Thumb />
  <Switch.Input />
</Switch.Root>
	
	<script lang="ts">
  import { Switch } from "bits-ui";
</script>
 
<Switch.Root>
  <Switch.Thumb />
  <Switch.Input />
</Switch.Root>
	
Component API
The root switch component used to set and manage the state of the switch.
| Property | Type | Description | 
|---|---|---|
checked   |  boolean |  Whether or not the switch is checked. Default:
								 false   |  
onCheckedChange   |  function   |  A callback function called when the checked state of the switch changes. Default:
								 —— undefined    |  
disabled   |  boolean |  Whether or not the switch is disabled. Default:
								 false   |  
includeInput   |  boolean |  Whether or not to include the input element in the switch. This will automatically add a hidden input element to the switch that will be checked when the switch is checked. Default:
								 false   |  
inputAttrs   |  object |  Attributes to be spread onto the hidden input element. Default:
								 —— undefined    |  
name   |  string |  The name of the hidden input element, used to identify the input in form submissions. Default:
								 —— undefined    |  
required   |  boolean |  Whether or not the switch is required to be checked. Default:
								 false   |  
value   |  string |  The value of the hidden input element to be used in form submissions when the switch is checked. Default:
								 —— undefined    |  
asChild   |  boolean |  Whether to use render delegation with this component or not. Default:
								 false   |  
el   |  HTMLButtonElement |  The underlying DOM element being rendered. You can bind to this to programatically interact with the element. Default:
								 —— undefined    |  
| Slot Property | Type | Description | 
|---|---|---|
builder   |  object   |  The builder attributes and actions to apply to the element if using the   |  
| Data Attribute | Value | Description | 
|---|---|---|
data-state  |  enum   |  The switch's checked state.  |  
data-checked  |  —— |  Present when the switch is checked.  |  
data-disabled  |  —— |  Present when the switch is disabled.  |  
data-switch-root  |  —— |  Present on the root element.  |  
The thumb on the switch used to indicate the switch's state.
| Property | Type | Description | 
|---|---|---|
asChild   |  boolean |  Whether to use render delegation with this component or not. Default:
								 false   |  
el   |  HTMLSpanElement |  The underlying DOM element being rendered. You can bind to this to programatically interact with the element. Default:
								 —— undefined    |  
| Slot Property | Type | Description | 
|---|---|---|
attrs   |  object   |  Additional attributes to apply to the element if using the   |  
checked   |  boolean |  Whether or not the switch is checked.  |  
| Data Attribute | Value | Description | 
|---|---|---|
data-state  |  enum   |  The switch's checked state.  |  
data-checked  |  —— |  Present when the switch is checked.  |  
data-switch-thumb  |  —— |  Present on the thumb element.  |