Checkbox
Multi-select control with indeterminate state and a managed group.
"use client";
import { Checkbox } from "astralis-ui";
export function CheckboxDemo() {
return <Checkbox defaultChecked>Email me about product updates</Checkbox>;
}Import#
import { Checkbox } from "astralis-ui";
// Checkbox.GroupGroup#
Checkbox.Group manages the array for you — give each checkbox a value
and read onChange(string[]).
Selected: react
"use client";
import { useState } from "react";
import { Checkbox, Text, VStack } from "astralis-ui";
export function CheckboxGroup() {
const [selected, setSelected] = useState<string[]>(["react"]);
return (
<VStack gap="3" alignItems="start">
<Checkbox.Group value={selected} onChange={setSelected}>
<Checkbox value="react">React</Checkbox>
<Checkbox value="vue">Vue</Checkbox>
<Checkbox value="svelte">Svelte</Checkbox>
</Checkbox.Group>
<Text size="xs" color="muted">
Selected: {selected.length ? selected.join(", ") : "none"}
</Text>
</VStack>
);
}Sizes, colors and states#
indeterminate shows the dash — the classic "some children selected"
signal for select-all rows.
"use client";
import { Checkbox, HStack, VStack } from "astralis-ui";
export function CheckboxStates() {
return (
<VStack gap="4" alignItems="start">
<HStack gap="5">
<Checkbox size="sm" defaultChecked>sm</Checkbox>
<Checkbox size="md" defaultChecked>md</Checkbox>
<Checkbox size="lg" defaultChecked>lg</Checkbox>
</HStack>
<HStack gap="5">
<Checkbox colorScheme="green" defaultChecked>green</Checkbox>
<Checkbox colorScheme="purple" defaultChecked>purple</Checkbox>
<Checkbox indeterminate>indeterminate</Checkbox>
<Checkbox disabled defaultChecked>disabled</Checkbox>
</HStack>
</VStack>
);
}Props#
| Prop | Type | Default | Description |
|---|---|---|---|
checked / defaultChecked / onChange | boolean / boolean / (e) => void | — / false / — | Controlled / uncontrolled API. |
value | string | — | Identifies the checkbox inside a Group. |
size | "sm" | "md" | "lg" | "md" | Box size. |
colorScheme | all 11 schemes | "brand" | Checked hue. |
indeterminate | boolean | false | Dash instead of check. |
invalid / disabled / readOnly | boolean | false | State flags — inherited from Field. |
Checkbox.Group#
| Prop | Type | Default | Description |
|---|---|---|---|
value / defaultValue / onChange | string[] / string[] / (values: string[]) => void | — / [] / — | The selected values. |
orientation | "horizontal" | "vertical" | "vertical" | Layout. |
colorScheme / disabled | — | — | Shared defaults for every child. |
Keyboard#
| Key | Action |
|---|---|
Tab | Move between checkboxes — each is its own tab stop |
Space | Toggle the focused checkbox |
Accessibility#
A real <input type="checkbox"> lives under the styled box, so keyboard,
form submission and screen-reader behavior all come natively.