Checkbox Card

A selectable card component that behaves like a checkbox

Source
Theme Source
pnpm dlx dreamy add checkbox-card

Checkbox Card is a multipart component. The hidden checkbox input is rendered automatically inside CheckboxCard.Root — pass all checkbox props to Root.

Default Checkbox Card

This is a description

<CheckboxCard.Root>
	<CheckboxCard.Header>
		<CheckboxCard.Title>Default Checkbox Card</CheckboxCard.Title>
		<CheckboxCard.Checkbox />
	</CheckboxCard.Header>
	<CheckboxCard.Description>This is a description</CheckboxCard.Description>
</CheckboxCard.Root>

Add CheckboxCard.Description below the header for supporting text.

React Router

Description for React Router

Next.js

Description for Next.js

Vue.js

Description for Vue.js

<CheckboxCard.Root full>
	<CheckboxCard.Header>
		<CheckboxCard.Title>React Router</CheckboxCard.Title>
		<CheckboxCard.Checkbox />
	</CheckboxCard.Header>
	<CheckboxCard.Description>Description for React Router</CheckboxCard.Description>
</CheckboxCard.Root>

Change the variant of the checkbox card.

Outline variant

Description for Outline variant

Subtle variant

Description for Subtle variant

<CheckboxCard.Root full variant="outline">
	<CheckboxCard.Header>
		<CheckboxCard.Title>Outline variant</CheckboxCard.Title>
		<CheckboxCard.Checkbox />
	</CheckboxCard.Header>
	<CheckboxCard.Description>Description for Outline variant</CheckboxCard.Description>
</CheckboxCard.Root>

Change the checkbox variant of the checkbox card.

Solid variant

Description for Solid variant

Outline variant

Description for Outline variant

<CheckboxCard.Root full checkboxVariant="solid">
	<CheckboxCard.Header>
		<CheckboxCard.Title>Solid variant</CheckboxCard.Title>
		<CheckboxCard.Checkbox />
	</CheckboxCard.Header>
	<CheckboxCard.Description>Description for Solid variant</CheckboxCard.Description>
</CheckboxCard.Root>

Change the color scheme of the checkbox card.

Primary

Description for Primary

Secondary

Description for Secondary

Success

Description for Success

Warning

Description for Warning

Error

Description for Error

Info

Description for Info

<CheckboxCard.Root full scheme="primary" defaultChecked>
	<CheckboxCard.Header>
		<CheckboxCard.Title>Primary</CheckboxCard.Title>
		<CheckboxCard.Checkbox />
	</CheckboxCard.Header>
	<CheckboxCard.Description>Description for Primary</CheckboxCard.Description>
</CheckboxCard.Root>

Change the checkbox card size.

Small

Description for Small

Medium

Description for Medium

Large

Description for Large

<CheckboxCard.Root full size="sm">
	<CheckboxCard.Header>
		<CheckboxCard.Title>Small</CheckboxCard.Title>
		<CheckboxCard.Checkbox />
	</CheckboxCard.Header>
	<CheckboxCard.Description>Description for Small</CheckboxCard.Description>
</CheckboxCard.Root>

Use isChecked and onChange, onChangeValue to control the checkbox card.

export function ControlledCheckboxCard() {
    const [isChecked, setIsChecked] = useState(false);
 
    return (
        <>
            <Text>Selected: {isChecked ? "true" : "false"}</Text>
            <CheckboxCard.Root
                full
                isChecked={isChecked}
                onChangeValue={setIsChecked}
            >
                <CheckboxCard.Header>
                    <CheckboxCard.Title>Controlled</CheckboxCard.Title>
                    <CheckboxCard.Checkbox />
                </CheckboxCard.Header>
                <CheckboxCard.Description>Description for Controlled</CheckboxCard.Description>
            </CheckboxCard.Root>
        </>
    );
}

Use CheckboxGroup to compose multiple checkboxes or checkbox cards.

function CheckboxCardGroupControl() {
	const [value, setValue] = useState<Array<string | number>>(["1"]);
 
	return (
		<>
			<Text>Selected: {value.join(", ")}</Text>
			<CheckboxGroup
				value={value}
				onChange={setValue}
			>
				<Group full wrapped>
					<CheckboxCard.Root full value="1">
						<CheckboxCard.Header>
							<CheckboxCard.Title>Option 1</CheckboxCard.Title>
							<CheckboxCard.Checkbox />
						</CheckboxCard.Header>
						<CheckboxCard.Description>Description for Option 1</CheckboxCard.Description>
					</CheckboxCard.Root>
					<CheckboxCard.Root full value="2">
						<CheckboxCard.Header>
							<CheckboxCard.Title>Option 2</CheckboxCard.Title>
							<CheckboxCard.Checkbox />
						</CheckboxCard.Header>
						<CheckboxCard.Description>Description for Option 2</CheckboxCard.Description>
					</CheckboxCard.Root>
					<CheckboxCard.Root full value="3">
						<CheckboxCard.Header>
							<CheckboxCard.Title>Option 3</CheckboxCard.Title>
							<CheckboxCard.Checkbox />
						</CheckboxCard.Header>
						<CheckboxCard.Description>Description for Option 3</CheckboxCard.Description>
					</CheckboxCard.Root>
				</Group>
			</CheckboxGroup>
		 </>
	);
}

Use custom content inside CheckboxCard.Title or CheckboxCard.Description for richer layouts.

React Router

Description for React Router

Next.js

Description for Next.js

Vue.js

Description for Vue.js

<CheckboxCard.Root full>
	<CheckboxCard.Header>
		<CheckboxCard.Title>
			<Flex col gap={2}> 
				<Icon as={<SiReactrouter />} boxSize="5" color="fg.medium" />
				<Text>React Router</Text>
			</Flex>
		</CheckboxCard.Title>
		<CheckboxCard.Checkbox />
	</CheckboxCard.Header>
	<CheckboxCard.Description>Description for React Router</CheckboxCard.Description>
</CheckboxCard.Root>

Omit CheckboxCard.Checkbox to hide the checkbox indicator.

Paypal

Credit Card

Apple

<CheckboxCard.Root full>
	<CheckboxCard.Header>
		<CheckboxCard.Title>
			<Flex full gap={2} row center>
				<Icon as={<FaPaypal />} boxSize="5" color="fg.medium" />
				<Text>Paypal</Text>
			</Flex>
		</CheckboxCard.Title>
	</CheckboxCard.Header>
</CheckboxCard.Root>