Checkbox
Описание
Используются, когда пользователю необходимо выбрать одну или несколько опций из списка.
Подробнее об использовании элемента читайте на официальном сайте
Примеры
Компонент
Компонент можно сохранить в src/shared/ui/Checkbox.tsx. Обратите внимание на необходимые зависимости: Label и UIStateLayer. В качестве иконки я использую iconoir-react.
Так же данный компонент использует @radix-ui/react-checkbox компонент.
yarn add @radix-ui/react-checkbox
"use client"import React from "react"import * as RadixCheckbox from "@radix-ui/react-checkbox"import { Check } from "iconoir-react"import Label from "@/shared/typography/Label"import UIStateLayer from "@/shared/ui/UIStateLayer"import { cn } from "@/lib/cn"export const CheckboxLabel: React.FC<React.LabelHTMLAttributes<HTMLLabelElement>> = ({ className, children, ...props }) => (<label {...props}><Label size={"large"} className={cn(className)}>{children}</Label></label>)export const Checkbox = React.forwardRef<React.ElementRef<typeof RadixCheckbox.Root>,React.ComponentPropsWithoutRef<typeof RadixCheckbox.Root>>(({ className, ...props }, forwardedRef) => {return (<RadixCheckbox.Root{...props}ref={forwardedRef}className={cn("relative group w-[18px] h-[18px] border-2 border-onSurface rounded-sm data-[state=checked]:bg-primary data-[state=checked]:border-0 transition-colors duration-short4 ease-standard",className)}><UIStateLayer className="flex items-center justify-center h-10 w-10 rounded-full absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 group-data-[state=checked]:bg-primary bg-onSurface group-data-[state=checked]:bg-opacity-0 group-data-[state=checked]:group-hover:bg-opacity-[0.08] group-data-[state=checked]:group-active:bg-opacity-[0.12] transition-colors duration-short4 ease-standard"><RadixCheckbox.Indicator className="data-[state=checked]:text-onPrimary animate-fade-in"><Check width={18} height={18} /></RadixCheckbox.Indicator></UIStateLayer></RadixCheckbox.Root>)})Checkbox.displayName = "Checkbox"
Использование
Данный файл экспортирует два компонента: CheckboxLabel и Checkbox. Первый является текстом для чекбокса, второй же - сам чекбокс.
Ниже - код для примера в начале страницы.
<div className="flex items-center gap-4"><Checkbox defaultChecked id="milk" /><CheckboxLabel htmlFor="milk">Купить молоко</CheckboxLabel></div><div className="flex items-center gap-4"><Checkbox id="world" /><CheckboxLabel htmlFor="world">Покорить мир</CheckboxLabel></div>