Checkbox
Checkbox renders Base UI’s checkbox root and indicator from one component.
import { useState } from "react";
import { Checkbox } from "density-base-ui";
export default function CheckboxExample() {
const [showArchivedProjects, setShowArchivedProjects] = useState(true);
return (
<Checkbox
checked={showArchivedProjects}
onCheckedChange={setShowArchivedProjects}
>
Show archived projects
</Checkbox>
);
}Label
Control label
import { useState } from "react";
import { Checkbox } from "density-base-ui";
export default function CheckboxLabelExample() {
const [checked, setChecked] = useState(false);
return (
<Checkbox
checked={checked}
onCheckedChange={setChecked}
label="Field label"
>
Control label
</Checkbox>
);
}Hint
Control labelA short field hint
import { useState } from "react";
import { Checkbox } from "density-base-ui";
export default function CheckboxHintExample() {
const [checked, setChecked] = useState(false);
return (
<Checkbox
checked={checked}
onCheckedChange={setChecked}
label="Field label"
hint="A short field hint"
>
Control label
</Checkbox>
);
}Error
I accept the terms.Accept the terms to continue.
import { useState } from "react";
import { Checkbox } from "density-base-ui";
export default function CheckboxErrorExample() {
const [acceptedTerms, setAcceptedTerms] = useState(false);
return (
<Checkbox
checked={acceptedTerms}
onCheckedChange={setAcceptedTerms}
errorMessage="Accept the terms to continue."
hint="Required before creating the project."
label="Terms"
>
I accept the terms.
</Checkbox>
);
}Field orientation
Control labelThe label stacks above the control.
Control labelThe label sits beside the control.
import { useState } from "react";
import { Checkbox, Separator, View } from "density-base-ui";
export default function CheckboxFieldOrientationExample() {
const [verticalChecked, setVerticalChecked] = useState(false);
const [horizontalChecked, setHorizontalChecked] = useState(false);
return (
<View align="start" gap="md" padding={false}>
<Checkbox
checked={verticalChecked}
onCheckedChange={setVerticalChecked}
label="Vertical field"
hint="The label stacks above the control."
fieldOrientation="vertical"
>
Control label
</Checkbox>
<Separator />
<Checkbox
checked={horizontalChecked}
onCheckedChange={setHorizontalChecked}
label="Horizontal field"
hint="The label sits beside the control."
fieldOrientation="horizontal"
>
Control label
</Checkbox>
</View>
);
}Emphasis
PrimarySecondaryOutlineGhost primaryGhost secondaryGhost tertiary
import { useState } from "react";
import { Checkbox, View } from "density-base-ui";
export default function CheckboxEmphasisExample() {
const [checkedEmphases, setCheckedEmphases] = useState<
Record<string, boolean>
>({});
const updateCheckedEmphasis = (emphasis: string, checked: boolean) => {
setCheckedEmphases((currentEmphases) => ({
...currentEmphases,
[emphasis]: checked,
}));
};
return (
<View align="start" gap="md" padding={false}>
<Checkbox
checked={checkedEmphases.primary}
onCheckedChange={(checked) => updateCheckedEmphasis("primary", checked)}
emphasis="primary"
>
Primary
</Checkbox>
<Checkbox
checked={checkedEmphases.secondary}
onCheckedChange={(checked) =>
updateCheckedEmphasis("secondary", checked)
}
emphasis="secondary"
>
Secondary
</Checkbox>
<Checkbox
checked={checkedEmphases.outline}
onCheckedChange={(checked) => updateCheckedEmphasis("outline", checked)}
emphasis="outline"
>
Outline
</Checkbox>
<Checkbox
checked={checkedEmphases.ghostPrimary}
onCheckedChange={(checked) =>
updateCheckedEmphasis("ghostPrimary", checked)
}
emphasis="ghost-primary"
>
Ghost primary
</Checkbox>
<Checkbox
checked={checkedEmphases.ghostSecondary}
onCheckedChange={(checked) =>
updateCheckedEmphasis("ghostSecondary", checked)
}
emphasis="ghost-secondary"
>
Ghost secondary
</Checkbox>
<Checkbox
checked={checkedEmphases.ghostTertiary}
onCheckedChange={(checked) =>
updateCheckedEmphasis("ghostTertiary", checked)
}
emphasis="ghost-tertiary"
>
Ghost tertiary
</Checkbox>
</View>
);
}Size
2xsxssmmdlgxl2xl3xl
import { useState } from "react";
import { Checkbox, View } from "density-base-ui";
export default function CheckboxSizeExample() {
const [checkedSizes, setCheckedSizes] = useState<Record<string, boolean>>({});
const updateCheckedSize = (size: string, checked: boolean) => {
setCheckedSizes((currentSizes) => ({ ...currentSizes, [size]: checked }));
};
return (
<View align="start" gap="md" padding={false}>
<Checkbox
checked={checkedSizes["2xs"]}
onCheckedChange={(checked) => updateCheckedSize("2xs", checked)}
size="2xs"
>
2xs
</Checkbox>
<Checkbox
checked={checkedSizes.xs}
onCheckedChange={(checked) => updateCheckedSize("xs", checked)}
size="xs"
>
xs
</Checkbox>
<Checkbox
checked={checkedSizes.sm}
onCheckedChange={(checked) => updateCheckedSize("sm", checked)}
size="sm"
>
sm
</Checkbox>
<Checkbox
checked={checkedSizes.md}
onCheckedChange={(checked) => updateCheckedSize("md", checked)}
size="md"
>
md
</Checkbox>
<Checkbox
checked={checkedSizes.lg}
onCheckedChange={(checked) => updateCheckedSize("lg", checked)}
size="lg"
>
lg
</Checkbox>
<Checkbox
checked={checkedSizes.xl}
onCheckedChange={(checked) => updateCheckedSize("xl", checked)}
size="xl"
>
xl
</Checkbox>
<Checkbox
checked={checkedSizes["2xl"]}
onCheckedChange={(checked) => updateCheckedSize("2xl", checked)}
size="2xl"
>
2xl
</Checkbox>
<Checkbox
checked={checkedSizes["3xl"]}
onCheckedChange={(checked) => updateCheckedSize("3xl", checked)}
size="3xl"
>
3xl
</Checkbox>
</View>
);
}| Prop | Values | Required | Default | Behavior | Description |
|---|---|---|---|---|---|
emphasis | primary, secondary, outline, ghost-primary, ghost-secondary, ghost-tertiary | Not required | — | Attribute: data-dn-emphasis | — |
errorMessage | React.ReactNode | Not required | — | — | — |
fieldOrientation | vertical, horizontal | Not required | — | — | — |
hint | React.ReactNode | Not required | — | — | — |
label | React.ReactNode | Not required | — | — | — |
size | 2xs, xs, sm, md, lg, xl, 2xl, 3xl | Not required | — | Attribute: data-dn-size | — |
This component also accepts props from native APIs. They are passed through and intentionally kept out of this focused Density API table.