CLI previewInstall commands shown on this site are not released yet.

DocsComponentsForms

Switch

React example follows below.
ts
import { Switch } from "@grassroot/ui-react";
const [on, setOn] = React.useState(true);
<Switch
label="Deploy on merge"
description="Ship prod when CI passes on main"
checked={on}
onChange={(e) => setOn(e.target.checked)}
/>
ts
<script setup lang="ts">
import { ref } from "vue";
import { Switch } from "@grassroot/ui-vue";
const on = ref(true);
</script>
<template>
<Switch
label="Deploy on merge"
description="Ship prod when CI passes on main"
:checked="on"
@change="on = e.target.checked"
/>
</template>
ts
import { Component, signal } from "@angular/core";
import { GrassrootSwitch } from "@grassroot/ui-angular";
@Component({
selector: "app-example",
standalone: true,
imports: [GrassrootSwitch],
template: `
<grassroot-switch
label="Deploy on merge"
description="Ship prod when CI passes on main"
[checked]="on()"
(change)="on.set(e.target.checked)"
/>
`,
})
export class ExampleComponent {
readonly on = signal(true);
}
ts
<script lang="ts">
import { Switch } from "@grassroot/ui-svelte";
let on = $state(true);
</script>
<Switch
label="Deploy on merge"
description="Ship prod when CI passes on main"
checked={on}
onChange={(e) => on = e.target.checked}
/>
ts
import { createSignal } from "solid-js";
import { Switch } from "@grassroot/ui-solid";
export function Example() {
const [on, setOn] = createSignal(true);
return (
<>
<Switch
label="Deploy on merge"
description="Ship prod when CI passes on main"
checked={on()}
onChange={(e) => setOn(e.target.checked)}
/>
</>
);
}

Installation

bash
pnpm dlx grassroot add ui/switch
bash
npx grassroot@latest add ui/switch
bash
yarn dlx grassroot add ui/switch
bash
bunx grassroot add ui/switch

API Reference

SwitchProps
PropTypeDefault
labelReact.ReactNode
descriptionReact.ReactNode
toneBrand colour of the "on" track.Tone | undefined"accent"