Метка
Подпись для полей ввода, флажков, переключателей и групп радио-кнопок — при нажатии элемент управления активируется; текст набран шрифтом в стиле необрутализма.
import { Checkbox } from "@/components/ui/checkbox"
import { Label } from "@/components/ui/label"
Label подписывает form-control — свяжите его с id контрола, и клики по тексту фокусируют или переключают поле. Этот вариант — стилизованный нативный <label> без зависимости от примитива, набранный необруталистским heading-шрифтом.
Когда это пригодится:
- Отдельные контролы — одиночный checkbox, switch или radio group, которым не нужен полный
Field: согласия, тогглы уведомлений. - Строки настроек — пары switch+label, где вся подпись — click target.
- Кастомные layout форм — сетки и inline-раскладки, куда stacked-структура
Fieldне вписывается.
Для полей формы используйте компонент Field — в нём уже есть label, description и обработка ошибок.
Для полей формы используйте компонент Field, который включает встроенные метку, описание и обработку ошибок.
Установка#
pnpm dlx shadcn@latest add https://neobrutalism.com/r/base/label.jsonnpx shadcn@latest add https://neobrutalism.com/r/base/label.jsonyarn dlx shadcn@latest add https://neobrutalism.com/r/base/label.jsonbunx --bun shadcn@latest add https://neobrutalism.com/r/base/label.json
Установите следующие зависимости:
pnpm add @base-ui/reactnpm install @base-ui/reactyarn add @base-ui/reactbun add @base-ui/react
Скопируйте и вставьте следующий код в свой проект.
"use client"
import * as React from "react"
import { Label as LabelPrimitive } from "radix-ui"
import { cn } from "@/lib/utils"
function Label({
className,
...props
}: React.ComponentProps<typeof LabelPrimitive.Root>) {
return (
<LabelPrimitive.Root
data-slot="label"
className={cn(
"flex items-center gap-2 text-sm leading-none font-head font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
className
)}
{...props}
/>
)
}
export { Label }
Обновите пути импорта в соответствии с настройками вашего проекта.
Использование#
import { Label } from "@/components/ui/label"<Label htmlFor="email">Your email address</Label>Label в Field#
Для полей формы используйте компонент Field, который
включает встроенные компоненты FieldLabel, FieldDescription и FieldError.
<Field>
<FieldLabel htmlFor="email">Your email address</FieldLabel>
<Input id="email" />
</Field>import { Button } from "@/components/ui/button"
import { Checkbox } from "@/components/ui/checkbox"
import {RTL#
Чтобы включить поддержку RTL в Neobrutalism, см. руководство по настройке RTL.
"use client"
import * as React from "react"Доступность#
Label рендерит нативный <label>: сопоставьте htmlFor с id контрола (или вложите контрол внутрь label) — программы чтения с экрана объявят текст как accessible name, а клики по label сфокусируют или переключат контрол. В стилях есть select-none, поэтому двойной клик по label не выделяет текст. <label> связывается только с form-controls — для кастомных виджетов указывайте aria-labelledby на id label.
Справочник API#
Подробнее — в документации Base UI Label.