Toggle

A restyled native <input type="checkbox"> presented as a switch. Adds role="switch" for assistive tech; all native attributes (checked, onChange, disabled, …) pass through.

Colors (solid)

Sizes

Real use · Wi-Fi setting

Using Toggle

Silica ships one design system through three paths. They share a class vocabulary but are not interchangeable — pick the one that matches what you are building.

Plain HTML — CSS classes

The Tailwind v4 plugin. Works in any framework or none — Rails, Django, PHP, Go, a static file. This path is complete for Toggle — it needs no JavaScript, so the classes below are the whole story.

/* in your CSS */
@import "tailwindcss";
@plugin "@wizeworks/silicaui";

Root class toggle, with 13 modifiers:

  • .toggle
  • .toggle-accent
  • .toggle-error
  • .toggle-info
  • .toggle-lg
  • .toggle-md
  • .toggle-neutral
  • .toggle-primary
  • .toggle-secondary
  • .toggle-sm
  • .toggle-success
  • .toggle-warning
  • .toggle-xl
  • .toggle-xs

React

Typed components over those same classes, with behavior and accessibility from Base UI.

npm i @wizeworks/silicaui-react
import { Toggle } from "@wizeworks/silicaui-react";

Props

PropTypeRequiredDescription
colorSilicaColornoAccent color; maps to toggle-<color> (checked track fill).
sizeSilicaSizenoDefault md.
childrenReact.ReactNodenoCaption. Wraps the control in a <label> so the text is a click target.

Source of the demo above

The exact file that renders the examples above, so it can never drift from them. It imports a few of this site’s own layout helpers (../lib/…), so read it for the component calls rather than copying it whole.

Show source
import { useState } from "react";
import { Toggle } from "@wizeworks/silicaui-react";
import { Section } from "../lib/Section";
import { ColorVariantSizeGrid } from "../lib/ColorGrid";

export function ToggleDemo() {
    const [wifi, setWifi] = useState(true);

    return (
        <>
            <ColorVariantSizeGrid
                Component={Toggle}
                render={({ color, size }) => (
                    <label className="flex items-center gap-2 text-sm">
                        <Toggle color={color} size={size} defaultChecked />
                        {color ?? size}
                    </label>
                )}
            />

            <Section title="Real use · Wi-Fi setting">
                <label className="flex items-center gap-2 text-sm">
                    <Toggle
                        color="primary"
                        checked={wifi}
                        onChange={(e) => setWifi(e.target.checked)}
                    />
                    Wi-Fi is {wifi ? "on" : "off"}
                </label>
            </Section>
        </>
    );
}

Vanilla — node tree to HTML

The framework-neutral form of Toggle. Build a node tree, project it with toHtml(), and let the zero-dependency runtime hydrate it. This is the path for generated or user-authored documents — a site builder, CMS output, a static export.

npm i @wizeworks/silicaui-html @wizeworks/silicaui-behaviors
import { atom, toHtml } from "@wizeworks/silicaui-html";

const node = atom("Toggle", "toggle", { /* props */ }, [/* children */]);
const markup = toHtml(node);

Styling on this path is the class string in the second argument — the same classes as the Plain HTML section above. There is no color prop here; write "toggle toggle-primary" rather than passing a colour as a prop.

Takes children
yes
Hydrated by
nothing — this one is static markup

The full API for Toggle, on every path, is available through the Silica MCP server.