Skip to content
Noksha UIv0.1
Colour theme

forms

Switch

An on/off toggle for settings that apply the moment they change.

Examples

Settings toggle

Use a switch when the change takes effect immediately, and a checkbox when it is submitted with a form.

Applies the moment you flip it — no Save button.

Sizes

Three sizes on the same control scale the rest of the library uses.

Tones

The six semantic tones, each repointing the same `--sw-solid` variable the track fill is built from.

Disabled

A disabled switch is still a real checkbox input — `:disabled` drives the dimmed track and the cursor together, not just the colour.

Invalid

Field only marks the switch invalid after a first submit attempt, and `Field.Error` mounts nothing until then.

Controlled

`checked` and `onCheckedChange` are the entire contract — the buttons below prove it by driving every switch from outside.

With text

A label and a line of helper text per switch, wired to the control through `Field.Description` rather than a hand-written `aria-describedby`.

New features and improvements, a few times a month.

Sign-ins from a new device or location.

Offers and other promotional email.

Inline

Compact, `sm`-sized switches sharing one horizontal row, for a quick-settings tray rather than a form.

Settings list

The classic settings-page row — label on the left, switch on the right — built from `Field.Root` with `justify-between` rather than a bespoke layout.

Loading

The switch disables itself while a change is in flight, and only commits once the request resolves — so the UI never shows a state the server rejected.

Disabled

Syncing…

Settings panel

A grouped, real-world settings screen — two sections of switches sharing one card, each wired the same way as the single examples above.

Notifications

Receipts, invoices, and account activity.

Real-time alerts on this device.

Reserved for security codes.

Privacy

Let others see when you were last online.

Show that a message has been read.

Use activity across apps to tailor ads.

Bold styles

Eleven looks built entirely from `className`, `containerClassName` and the `--sw-solid`/`--sw-w`/`--sw-h` variables — neon, glass, an oversized track, and more, with no fork of the component underneath any of them.

Icon toggles

A hidden checkbox behind a fully custom surface — a lock, a play button, a speaker, a power button, a bubble — each swapping icon or clip-path on `peer-checked`/`has-checked` rather than swapping the switch track.

Lock
Play / pause
Speaker
Power
Bubble

Menu toggle

The three-bar pattern behind most hamburger menus — the same hidden checkbox driving a track elsewhere in this page now morphs bars into an arrow.

Hamburger
Collapse arrow

Day / night

Six takes on the same idea, from a sliding thumb that uncovers the sun or moon to a disc that rises over hills and an orb that just crossfades color and icon.

Sky fade
Sun / moon
Stars & clouds
Crescent
Horizon
Aurora

Airplane mode

Five takes on the same setting: a plane taxiing into open sky, one pitching into takeoff, one that just cuts the signal bars, a window shade pulling down over the view, and a boarding pass with a plane sliding along its dashed flight path.

Runway
Takeoff
Signal
Porthole
Boarding pass

Install progress

Not a toggle at all — a three-phase button (idle, installing, installed) built the same way `loading.tsx` is: real state and a timeout, with the library’s own `Spinner` standing in for the progress ring.

Own the source

Noksha ships as a package and as copy-paste source. Take the files and they are yours to change. These are read from the generated registry, so they are exactly what the library ships — never a paraphrase of it.

Take these files, and field, internal helpers along with them — the imports below point at them. Or let the CLI do it: npx @noksha-ui/cli add switch writes them, follows the same dependency graph, and fixes up the imports.

export { Switch, switchVariants } from './switch.js';
export type { SwitchProps, SwitchSize, SwitchTone } from './switch.types.js';

API reference

Accepted values

SwitchSize
smmdlg

SwitchProps

Also accepts everything from Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'>.

PropTypeDescription
sizeSwitchSize
toneSwitchTone
invalidboolean
onCheckedChange(checked: boolean) => void
containerClassNamestringClasses for the outer wrapper; `className` styles the visible track.
thumbClassNamestringClasses for the sliding thumb.