1. framework components
  2. switch

Switch

Toggle between two states, such as on/off.

Color

Use the Tailwind data attribute syntax to target the state using data-[state=checked]

List

Use the Label component to create a list layout.



Icons

Add icons to act as state indicators.

Direction

Set the text direction (ltr or rtl) using the dir prop.

Anatomy

Here’s an overview of how the Switch component is structured in code:

tsx
import { Switch } from '@skeletonlabs/skeleton-react';

export default function Anatomy() {
	return (
		<Switch>
			<Switch.Control>
				<Switch.Thumb />
			</Switch.Control>
			<Switch.Label />
			<Switch.HiddenInput />
		</Switch>
	);
}

API Reference

Root

txt
cursor-pointer data-disabled:cursor-not-allowed data-disabled:opacity-50 inline-flex gap-2 items-center rounded data-focus-visible:outline-2 data-focus-visible:outline-offset-1 data-focus-visible:outline-surface-950-50
PropDefaultType
idsPartial<{ root: string; hiddenInput: string; control: string; label: string; thumb: string; }> | undefined

The ids of the elements in the switch. Useful for composition.

labelstring | undefined

Specifies the localized strings that identifies the accessibility elements and their states

disabledboolean | undefined

Whether the switch is disabled.

invalidboolean | undefined

If `true`, the switch is marked as invalid.

requiredboolean | undefined

If `true`, the switch input is marked as required,

readOnlyboolean | undefined

Whether the switch is read-only

onCheckedChange((details: CheckedChangeDetails) => void) | undefined

Function to call when the switch is clicked.

checkedboolean | undefined

The controlled checked state of the switch

defaultCheckedboolean | undefined

The initial checked state of the switch when rendered. Use when you don't need to control the checked state of the switch.

namestring | undefined

The name of the input field in a switch (Useful for form submission).

formstring | undefined

The id of the form that the switch belongs to

value"on"string | number | undefined

The value of switch input. Useful for form submission.

dir"ltr""ltr" | "rtl" | undefined

The document's text/writing direction.

getRootNode(() => ShadowRoot | Node | Document) | undefined

A root node to correctly resolve document in custom environments. E.x.: Iframes, Electron.

element((attributes: HTMLAttributes<"label">) => Element) | undefined

Render the element yourself

Provider

PropDefaultType
valueSwitchApi<PropTypes>

element((attributes: HTMLAttributes<"label">) => Element) | undefined

Render the element yourself

Context

PropDefaultType
children(switch_: SwitchApi<PropTypes>) => ReactNode

Control

txt
preset-filled-surface-200-800 h-6 w-10 p-0.5 rounded-full flex justify-start data-[state=checked]:preset-filled-primary-500
PropDefaultType
element((attributes: HTMLAttributes<"span">) => Element) | undefined

Render the element yourself

Thumb

txt
grid justify-center items-center h-full aspect-square rounded-full bg-surface-50 text-surface-contrast-50 fill-surface-contrast-50 transition-transform duration-100 data-[state=checked]:translate-x-4 rtl:data-[state=checked]:-translate-x-4
PropDefaultType
element((attributes: HTMLAttributes<"span">) => Element) | undefined

Render the element yourself

Label

txt
label-text
PropDefaultType
element((attributes: HTMLAttributes<"span">) => Element) | undefined

Render the element yourself

HiddenInput

PropDefaultType
element((attributes: HTMLAttributes<"input">) => Element) | undefined

Render the element yourself

View page on GitHub