Секции страниц переведены на segmented Tabs (c-tabs-9), статус грида — ToggleGroup в toolbar. Убраны календарь задач, пустые вкладки мониторинга и demo-деревья ReUI. KPI overflow как в CFDM, DetailPanel на карточке модуля, один FrameSection. Co-authored-by: Cursor <[email protected]>
7.2 KiB
name, description
| name | description |
|---|---|
| shadcn-react | Управление shadcn/ui (React) + ReUI компонентами в EvoBGP — registry, CLI, импорты, матрица выбора. Использовать при любых UI-задачах в apps/web/ или packages/ui/ (новые экраны, компоненты, формы, data-grid, filters и др.). |
shadcn/ui (React) + ReUI в EvoBGP
EvoBGP использует React 19 + shadcn/ui (base-nova) + ReUI (style: base-nova, не Radix). Источники правды: MCP plugin-shadcn-shadcn + ui.shadcn.com/docs + reui.io/docs.
См. .cursor/rules/web-shadcn.mdc (основные правила) и .cursor/rules/context7-stack.mdc (Context7 ID стека).
Порядок UI-задачи (строго)
- Codegraph
codegraph_explore— найти существующие реализации и shared-обёртки. - MCP
plugin-shadcn-shadcn—get_project_registries(должны быть@shadcnи@reui). search_items_in_registries— компонент/block/example:- shadcn primitives/blocks → omit
registriesили["@shadcn"] - Data Grid, Filters, Stepper, Kanban, Autocomplete и др. →
registries: ["@reui"]
- shadcn primitives/blocks → omit
get_item_examples_from_registries— полный код примера перед JSX.get_add_command_for_items— точная CLI-командаpnpm dlx shadcn@latest add ....- Выполнить add из
apps/web(не из корня монорепо, не изpackages/ui). - CLI docs (обязательно):
@shadcn/*→cd apps/web && pnpm dlx shadcn@latest docs <component>— ui.shadcn.com/docs/components@reui/*→ ReUI docs + llms.txt
- Сверить examples из MCP с API из docs CLI — реализовать только после совпадения.
- Адаптировать под TanStack Router / Query →
apps/web/src/. get_audit_checklist— перед merge PR.
Размещение и импорты
| Слой | Путь | Импорт |
|---|---|---|
| shadcn primitives | packages/ui/src/components/ |
@evobgp/ui/components/* |
| ReUI enterprise | apps/web/src/components/reui/ |
@/components/reui/* |
| Проектные обёртки | apps/web/src/components/ |
@/components/<name> |
cd apps/web
pnpm dlx shadcn@latest add button # @shadcn primitive → packages/ui/src/components/
pnpm dlx shadcn@latest add @reui/data-grid # ReUI enterprise → apps/web/src/components/reui/
Матрица выбора shadcn vs ReUI
| Задача | Registry | Импорт |
|---|---|---|
| Button, Card, Sheet, Field, Sidebar | @shadcn |
@evobgp/ui/components/* |
| Blocks (sidebar-07, dashboard-01) | @shadcn |
blocks → apps/web/src/components/ |
| Data Grid (sort, pagination, virtual) | @reui |
@/components/reui/data-grid/* → reui-kit/ResourcePage |
| Мультифильтры | @reui |
@/components/reui/filters |
| Number field со stepper | @reui |
@/components/reui/number-field |
| Autocomplete | @reui |
@/components/reui/autocomplete → AutoCompleteInput |
| Date selector / range | @reui |
@/components/reui/date-selector |
| Semantic badge (success/info/warning) | @reui |
@/components/reui/badge или StatusBadge |
Простые списки — shadcn Table. Сложные data-списки — ReUI data-grid через ResourcePage, не shadcn Data Table.
Уже установленные shared-обёртки
В apps/web/src/components/:
PageHeader,PageShell— заголовки и обёртки страницQueryState— обёртка loading/error/empty для TanStack QueryEmptyState— пустые списки (empty-state-14 DNA)ConfirmDialog— подтверждения (неwindow.confirm)LoadingButton— SoT кнопка с loading (Button+Spinner)StatusBadge/CategoryBadge/ModeBadge— semantic ReUI BadgeSegmentedTabs— секции страницы (c-tabs-9)StatusToggleGroup— статус грида (c-toggle-group-5)FormDrawer— Sheet overlay (sheet-8 / form-7)Skeletons(TableSkeleton,KpiStatGridSkeleton) — скелетоныTruncatedText— текст с тултипом
Kit: reui-kit/ResourcePage, KpiStatGrid, QuickActionGrid, OpsDashboard, SettingsShell, DetailPanel, FrameSection.
Перед созданием новой обёртки — проверить существующие через Codegraph.
Уже установленные ReUI-компоненты
В apps/web/src/components/reui/:
autocomplete,badge,data-grid/*,date-selector,filters,number-field
Перед добавлением дубликата — проверить Codegraph и существующие обёртки.
Зависимости (только apps/web, не packages/ui)
| npm-пакет | ReUI-компоненты |
|---|---|
@tanstack/react-table |
data-grid |
@tanstack/react-virtual |
data-grid (virtual) |
@dnd-kit/core, @dnd-kit/sortable, @dnd-kit/modifiers, @dnd-kit/utilities |
data-grid dnd, sortable, kanban |
date-fns, react-day-picker |
date-selector |
После shadcn add @reui/... — проверить, что CLI добавил недостающие deps в apps/web/package.json.
Semantic tokens (Styling)
ReUI расширяет тему shadcn токенами --success, --info, --warning, --destructive-foreground, --invert — уже в packages/ui/src/styles/globals.css.
- Badge/Alert:
variant="success"/"info"/"warning"— неbg-emerald-* - Базовая тема:
pnpm dlx shadcn@latest apply b2fA --only theme - ReUI-токены: по Styling guide; не править
globals.cssвручную без сверки с docs
Запрещено
- Писать UI по памяти, не проверив MCP
- Копипаст с ui.shadcn.com без examples/add из MCP
- Самописные примитивы, если есть item в registry
- Пропускать MCP «потому что компонент простой»
- Класть ReUI в
packages/uiили импортировать как@evobgp/ui - Radix-варианты (
/docs/components/radix/...) — только Base UI - Raw Tailwind-цвета вместо ReUI semantic
variant - Использовать Tabler/Bootstrap/Material UI
Чеклист перед завершением UI-задачи
- MCP search (с правильным registry) + examples
shadcn add <name>(или@reui/<name>) изapps/web- Импорты:
@evobgp/ui/components/*для shadcn,@/components/reui/*для ReUI - Зависимости в
apps/web/package.json pnpm --filter @evobgp/web run typecheck— exit 0pnpm --filter @evobgp/web run lint— exit 0pnpm --filter @evobgp/web run build— exit 0