Checkbox
이 문서는 정리 중이에요. 문의 내용은 #_design_core 채널을 찾아주세요.
import { Checkbox } from "seed-design/ui/checkbox";
export default function CheckboxPreview() {
return <Checkbox label="Hello World" defaultChecked />;
}
Installation
npx @seed-design/cli@latest add checkbox
Props
Checkbox
Prop
Type
Checkmark
Prop
Type
Examples
Sizes
import { HStack, VStack } from "@seed-design/react";
import { Checkbox } from "seed-design/ui/checkbox";
export default function CheckboxSize() {
return (
<HStack gap="x8">
<VStack gap="x2">
<Checkbox label="Medium (default)" size="medium" defaultChecked />
<Checkbox label="Large" size="large" defaultChecked />
</VStack>
<VStack gap="x2">
<Checkbox label="Medium (default)" size="medium" variant="ghost" defaultChecked />
<Checkbox label="Large" size="large" variant="ghost" defaultChecked />
</VStack>
</HStack>
);
}
Tones and Variants
Brand
import { VStack } from "@seed-design/react";
import { Checkbox } from "seed-design/ui/checkbox";
export default function CheckboxBrand() {
return (
<VStack gap="x2">
<Checkbox label="Square (default)" variant="square" tone="brand" defaultChecked />
<Checkbox label="Ghost" variant="ghost" tone="brand" defaultChecked />
</VStack>
);
}
Neutral
import { VStack } from "@seed-design/react";
import { Checkbox } from "seed-design/ui/checkbox";
export default function CheckboxNeutral() {
return (
<VStack gap="x2">
<Checkbox label="Square (default)" variant="square" tone="neutral" defaultChecked />
<Checkbox label="Ghost" variant="ghost" tone="neutral" defaultChecked />
</VStack>
);
}
Indeterminate
import { Checkbox } from "seed-design/ui/checkbox";
export default function CheckboxIndeterminate() {
return <Checkbox defaultChecked label="indeterminate" indeterminate />;
}
Weights
Deprecated Props
weight="default"
와 weight="stronger"
는 더 이상 사용되지 않습니다. 대신 weight="regular"
와 weight="bold"
를 사용하세요.
import { VStack } from "@seed-design/react";
import { Checkbox } from "seed-design/ui/checkbox";
export default function CheckboxWeights() {
return (
<VStack gap="x4">
<Checkbox label="Regular Label Text" weight="regular" />
<Checkbox label="Bold Label Text" weight="bold" />
</VStack>
);
}
Long Label
import { VStack } from "@seed-design/react";
import { Checkbox } from "seed-design/ui/checkbox";
export default function CheckboxLongLabel() {
return (
<VStack gap="x2">
<Checkbox
size="medium"
label="Lorem ipsum dolor sit, amet consectetur adipisicing elit. At a eaque fugiat sint sapiente.
Id, hic ex, blanditiis totam animi amet delectus temporibus quae fugiat magnam, quos eaque
dolorum a? Lorem ipsum dolor, sit amet consectetur adipisicing elit. Possimus labore unde
minus temporibus beatae commodi et nesciunt iure in dignissimos suscipit, alias ab
voluptatem facilis tempora numquam. Veritatis, dolorum suscipit! Lorem ipsum dolor sit,
amet consectetur adipisicing elit. Explicabo fugiat molestias iusto, ipsum distinctio
officia ad id ratione esse ducimus architecto deleniti illum reiciendis rerum, at
blanditiis molestiae. Cupiditate, nobis? Lorem ipsum dolor sit amet consectetur
adipisicing elit. Ab, magni. Aliquid inventore quaerat nemo architecto harum earum quas
porro repudiandae explicabo repellat repellendus magni, corporis omnis laborum, velit
dicta blanditiis. Lorem ipsum dolor sit, amet consectetur adipisicing elit. Debitis,
eveniet quas. Accusamus facere veritatis expedita delectus, asperiores numquam placeat
necessitatibus assumenda, nesciunt in dolorem sit provident repellendus, voluptatem earum!
Consequatur. Lorem ipsum dolor, sit amet consectetur adipisicing elit. Aut earum
asperiores aliquam magnam est delectus veritatis numquam sint porro tenetur dolores nobis,
deleniti voluptas quaerat, quia voluptatum soluta autem perspiciatis? Lorem ipsum dolor
sit amet consectetur adipisicing elit. Facilis possimus eaque aliquam maxime? Quidem enim,
sed itaque at veritatis nihil officia esse qui provident ipsa adipisci necessitatibus
officiis distinctio laborum!"
/>
<Checkbox
size="large"
label="Lorem ipsum dolor sit, amet consectetur adipisicing elit. At a eaque fugiat sint sapiente.
Id, hic ex, blanditiis totam animi amet delectus temporibus quae fugiat magnam, quos eaque
dolorum a? Lorem ipsum dolor, sit amet consectetur adipisicing elit. Possimus labore unde
minus temporibus beatae commodi et nesciunt iure in dignissimos suscipit, alias ab
voluptatem facilis tempora numquam. Veritatis, dolorum suscipit! Lorem ipsum dolor sit,
amet consectetur adipisicing elit. Explicabo fugiat molestias iusto, ipsum distinctio
officia ad id ratione esse ducimus architecto deleniti illum reiciendis rerum, at
blanditiis molestiae. Cupiditate, nobis? Lorem ipsum dolor sit amet consectetur
adipisicing elit. Ab, magni. Aliquid inventore quaerat nemo architecto harum earum quas
porro repudiandae explicabo repellat repellendus magni, corporis omnis laborum, velit
dicta blanditiis. Lorem ipsum dolor sit, amet consectetur adipisicing elit. Debitis,
eveniet quas. Accusamus facere veritatis expedita delectus, asperiores numquam placeat
necessitatibus assumenda, nesciunt in dolorem sit provident repellendus, voluptatem earum!
Consequatur. Lorem ipsum dolor, sit amet consectetur adipisicing elit. Aut earum
asperiores aliquam magnam est delectus veritatis numquam sint porro tenetur dolores nobis,
deleniti voluptas quaerat, quia voluptatum soluta autem perspiciatis? Lorem ipsum dolor
sit amet consectetur adipisicing elit. Facilis possimus eaque aliquam maxime? Quidem enim,
sed itaque at veritatis nihil officia esse qui provident ipsa adipisci necessitatibus
officiis distinctio laborum!"
/>
</VStack>
);
}
Disabled
import { VStack } from "@seed-design/react";
import { Checkbox } from "seed-design/ui/checkbox";
export default function CheckboxDisabled() {
return (
<VStack gap="x2">
<Checkbox defaultChecked label="Disabled Checked, Square" disabled />
<Checkbox checked={false} label="Disabled without Checked, Square" disabled />
<Checkbox variant="ghost" defaultChecked label="Disabled Checked, Ghost" disabled />
<Checkbox variant="ghost" checked={false} label="Disabled without Checked, Ghost" disabled />
</VStack>
);
}
Use Cases
React Hook Form
import { HStack, VStack } from "@seed-design/react";
import { useCallback, type FormEvent } from "react";
import { useController, useForm } from "react-hook-form";
import { ActionButton } from "seed-design/ui/action-button";
import { Checkbox } from "seed-design/ui/checkbox";
const POSSIBLE_FRUIT_VALUES = ["apple", "melon", "mango"] as const;
type FormValues = Record<(typeof POSSIBLE_FRUIT_VALUES)[number], boolean>;
export default function CheckboxReactHookForm() {
const { handleSubmit, reset, setValue, control } = useForm<FormValues>({
defaultValues: {
apple: false,
melon: true,
mango: false,
},
});
const onValid = useCallback((data: FormValues) => {
window.alert(JSON.stringify(data, null, 2));
}, []);
const onReset = useCallback(
(event: FormEvent) => {
event.preventDefault();
reset();
},
[reset],
);
return (
<VStack gap="x3" as="form" onSubmit={handleSubmit(onValid)} onReset={onReset}>
<VStack>
{POSSIBLE_FRUIT_VALUES.map((name) => {
const {
field: { value, ...restProps },
fieldState: { invalid },
} = useController({ name, control });
return (
<Checkbox
key={name}
label={name}
checked={value}
inputProps={restProps}
invalid={invalid}
/>
);
})}
</VStack>
<HStack gap="x2">
<ActionButton type="reset" variant="neutralWeak">
초기화
</ActionButton>
<ActionButton
type="button"
variant="neutralWeak"
flexGrow={1}
onClick={() => setValue("mango", true)}
>
mango 선택
</ActionButton>
<ActionButton type="submit" flexGrow={1}>
제출
</ActionButton>
</HStack>
</VStack>
);
}
Checkmark
활용하기
Checkmark
는 독립적인 체크 마크 컴포넌트로, 커스텀 레이아웃을 위해 사용할 수 있습니다.
import { HStack, Text, VStack } from "@seed-design/react";
import { Checkbox } from "@seed-design/react";
import { Checkmark } from "seed-design/ui/checkbox";
function CustomCheckbox({ children, ...props }: Checkbox.RootProps) {
return (
<Checkbox.Root {...props}>
<VStack gap="x2" align="center">
<Checkmark />
<Checkbox.HiddenInput />
{children}
</VStack>
</Checkbox.Root>
);
}
export default function CheckboxCheckmark() {
return (
<HStack gap="x6">
<CustomCheckbox>
<Text textStyle="t7Regular">regular</Text>
</CustomCheckbox>
<CustomCheckbox defaultChecked>
<Text textStyle="t7Medium">medium</Text>
</CustomCheckbox>
<CustomCheckbox>
<Text textStyle="t7Bold">bold</Text>
</CustomCheckbox>
</HStack>
);
}
Last updated on