Перейти к основному содержимому

Назначение

<ComponentName><atom/molecule/organism> компонент в <frontend app>. Используется для <краткая цель>.

Metadata

ПолеЗначение
App<pin-admin/...>
FSD Layershared/ui/atoms / shared/ui/molecules / shared/ui/organisms / entities/<entity>/ui
Атомарный уровеньatom / molecule / organism
Файлsrc/shared/ui/<level>/<ComponentName>.tsx или <ComponentName>/index.tsx
Статусdraft / approved / deprecated
HeroUI базис<HeroUI-компонент или комбинация>

Где Используется

Использующий компонентСлойНазначение
<PageName>pages/<контекст>
<WidgetName>widgets/<контекст>
<FeatureName>features/<контекст>

Props

PropТипRequiredDefaultОписаниеВалидация
<prop><type>да/нет<default><смысл><ограничения>

Прочие interfaces

  • forwardRef: да / нет.
  • children: разрешён / запрещён / типизирован.
  • className: разрешён override (через cn() utility) / запрещён.
  • data-*: список используемых dataset-атрибутов.

Slots И Children

SlotНазначениеКонтракт
<slot><описание><React.ReactNode / specific component>

States

StateТриггерВизуальноA11Y
default<описание>
hovermouse over<токен>
focus-visiblekeyboard focus<ring>outline обязателен
active / pressedclick/tap<токен>
disabledprop isDisabled<токен>aria-disabled="true"
loadingprop isLoadingspinneraria-busy="true"
readonlyprop isReadonly<токен>aria-readonly="true"
invalid / errorprop isInvalid<токен>aria-invalid="true"
successprop isSuccess<токен>

Variants

VariantНазначениеВизуально
primaryОсновное действие<токен>
secondaryВторичное действие<токен>
dangerДеструктивное действие<токен>
ghostБез фона<токен>
<custom><описание><токен>

Sizes

SizeНазначениеВысотаPadding
smКомпактный UI<value><value>
mdСтандартный<value><value>
lgКрупный<value><value>

Дизайн И Композиция

  • HeroUI composition: <какие компоненты HeroUI собираются>.
  • Tailwind utility-классы: только токенные; кастомные классы запрещены.
  • Иконка: <from lucide-react> или <from iconify>; обязательно aria-hidden="true", если decorative.
  • Spacing: <token>.
  • Border radius: <token>.
  • Shadow: <token> или none.
  • Анимация: <duration> <easing>; уважает prefers-reduced-motion.

Responsive

BreakpointПоведение
< md<описание>
md – lg<описание>
≥ lg<описание>

Container queries (@container): использовать / не использовать.

Accessibility

ТребованиеРеализация
Keyboard<какие клавиши обрабатываются>
ARIA role<role>
ARIA attributes<aria-label / aria-labelledby / aria-describedby / aria-controls>
Focus management<правило для focus trap, фокус при открытии/закрытии>
Screen reader text<через sr-only или aria-label>
Color contrast<минимум 4.5:1 для текста>

Внутреннее Состояние

  • Локальный state: <какие useState, useReducer>.
  • Контролируемый / неконтролируемый режим: <правило>.
  • Side effects (useEffect): <когда возникают>.
  • Запрос данных: компонент не делает данных-запросов (атомы/молекулы) / делает через TanStack Query (organism).

Тестовые Сценарии

#СценарийЧто проверяется
1render defaultКорректное отображение без props
2render all variantsКаждый variant визуально согласован
3render all stateshover/focus/disabled/loading/error
4keyboard interactionTab/Enter/Space/Escape
5accessibilityaxe-core без violation
6responsiveLayout не ломается на 320/768/1280/1920
7controlled vs uncontrolledОба режима работают
8event handlersonClick/onChange/onBlur вызываются

Обратные ссылки

Автоссылки: где используется этот документ.

Связанные Документы

  • HeroUI: <ссылка на конкретный HeroUI компонент>.
  • Storybook: <ссылка на story>.
  • Дизайн-токены: docs/04-frontends/<app>/01-design-system/.
  • Atomic design правила: docs/01-engineering-rules/frontend-fsd-and-atomic-rules.md.
  • Accessibility правила: docs/01-engineering-rules/ui-accessibility-rules.md.
  • Responsive правила: docs/01-engineering-rules/ui-responsive-design-rules.md.