Checkbox
Allow users to switch between checked, unchecked, and indeterminate states.
<script lang="ts">
import { Checkbox } from "$lib";
import { Label } from "$lib";
import { Check, Minus } from "phosphor-svelte";
</script>
<div class="flex items-center space-x-3">
<Checkbox.Root
id="terms"
aria-labelledby="terms-label"
class="peer inline-flex items-center justify-center rounded-md border border-muted bg-foreground sq-[25px] active:scale-98 data-[state=unchecked]:border-border-input data-[state=unchecked]:bg-background"
checked="indeterminate"
>
<Checkbox.Indicator
let:isChecked
let:isIndeterminate
class="inline-flex items-center justify-center text-background"
>
{#if isChecked}
<Check class="sq-[15px]" weight="bold" />
{:else if isIndeterminate}
<Minus class="sq-[15px]" weight="bold" />
{/if}
</Checkbox.Indicator>
</Checkbox.Root>
<Label.Root
id="terms-label"
for="terms"
class="text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
>
Accept terms and conditions
</Label.Root>
</div>
<script lang="ts">
import { Checkbox } from "$lib";
import { Label } from "$lib";
import { Check, Minus } from "phosphor-svelte";
</script>
<div class="flex items-center space-x-3">
<Checkbox.Root
id="terms"
aria-labelledby="terms-label"
class="peer inline-flex items-center justify-center rounded-md border border-muted bg-foreground sq-[25px] active:scale-98 data-[state=unchecked]:border-border-input data-[state=unchecked]:bg-background"
checked="indeterminate"
>
<Checkbox.Indicator
let:isChecked
let:isIndeterminate
class="inline-flex items-center justify-center text-background"
>
{#if isChecked}
<Check class="sq-[15px]" weight="bold" />
{:else if isIndeterminate}
<Minus class="sq-[15px]" weight="bold" />
{/if}
</Checkbox.Indicator>
</Checkbox.Root>
<Label.Root
id="terms-label"
for="terms"
class="text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
>
Accept terms and conditions
</Label.Root>
</div>
Structure
<script lang="ts">
import { Checkbox } from "bits-ui";
</script>
<Checkbox.Root>
<Checkbox.Indicator />
<Checkbox.Input />
</Checkbox.Root>
<script lang="ts">
import { Checkbox } from "bits-ui";
</script>
<Checkbox.Root>
<Checkbox.Indicator />
<Checkbox.Input />
</Checkbox.Root>
Controlled Usage
If you want to control or be aware of the checked
state of the checkbox from outside of the component, you can bind to the checked
prop.
<script lang="ts">
import { Checkbox } from "bits-ui";
let myChecked = false;
</script>
<p>Checked: {myChecked}</p>
<Checkbox.Root bind:checked={myChecked}>
<Checkbox.Indicator />
<Checkbox.Input />
</Checkbox.Root>
<script lang="ts">
import { Checkbox } from "bits-ui";
let myChecked = false;
</script>
<p>Checked: {myChecked}</p>
<Checkbox.Root bind:checked={myChecked}>
<Checkbox.Indicator />
<Checkbox.Input />
</Checkbox.Root>
Component API
The button component used to toggle the state of the checkbox.
Property | Type | Description |
---|---|---|
disabled | boolean | Whether or not the checkbox button is disabled. This prevents the user from interacting with it. Default:
false |
checked | enum | The checkbox button's checked state. This can be a boolean or the string 'indeterminate', which would typically display a dash in the checkbox. Default:
false |
onCheckedChange | function | A callback that is fired when the checkbox button's checked state changes. Default:
—— undefined |
required | boolean | Whether or not the checkbox is required. Default:
false |
name | string | The name of the checkbox. This is used for form submission. Default:
—— undefined |
value | string | The value of the checkbox. This is used for form submission. Default:
—— undefined |
asChild | boolean | Whether to use render delegation with this component or not. Default:
false |
Slot Property | Type | Description |
---|---|---|
builder | object | The builder attributes and actions to apply to the element if using the |
attrs | object | Additional attributes to apply to the element if using the |
Data Attribute | Value | Description |
---|---|---|
data-disabled | —— | Present when the checkbox is disabled. |
data-state | enum | The checkbox's state. Can be 'checked', 'unchecked', or 'indeterminate'. |
data-checkbox-root | —— | Present on the root element. |
The hidden input element that is used to store the checkbox's state for form submission. It receives all the same props as a regular HTML input element.
Property | Type | Description |
---|---|---|
value | boolean | Unless a value is provided, the input's value will be a boolean that represents the checkbox's checked state. Indeterminate checkboxes will have a value of Default:
false |
disabled | boolean | Whether or not the checkbox input is disabled. If not provided, it will inherit the disabled state of the Root component, which defaults to false. Default:
false |
A component which passes isChecked
and isIndeterminate
slot props to its children. This is useful for rendering the checkbox's indicator icon depending on its state.
Property | Type | Description |
---|---|---|
asChild | boolean | Whether to use render delegation with this component or not. Default:
false |
Slot Property | Type | Description |
---|---|---|
isChecked | boolean | Whether or not the checkbox is checked. |
isIndeterminate | boolean | Whether or not the checkbox is indeterminate. |
attrs | object | Additional attributes to apply to the element if using the |
Data Attribute | Value | Description |
---|---|---|
data-checkbox-indicator | —— | Present on the indicator element. |
🚧 UNDER CONSTRUCTION 🚧