diff --git a/.cursor/rules/frontend-shadcn.mdc b/.cursor/rules/frontend-shadcn.mdc index 1825101..cb40243 100644 --- a/.cursor/rules/frontend-shadcn.mdc +++ b/.cursor/rules/frontend-shadcn.mdc @@ -1,183 +1,102 @@ --- -description: Frontend — ТОЛЬКО shadcn/ui docs (Components, Blocks, Installation); best practices, CLI-first +description: Frontend — shadcn primitives + ReUI PRO blocks; CLI-first; kit patterns globs: apps/web/**/*,packages/ui/**/* alwaysApply: false --- -# Frontend — shadcn/ui (обязательно) +# Frontend — shadcn/ui + ReUI PRO -**Источник истины — MCP shadcn + официальная документация.** Не выдумывать UI, не писать кастомный CSS, не обходить MCP и CLI. +**Источник истины:** MCP **`user-reui`** (pages/blocks/KPI/settings) + MCP `plugin-shadcn-shadcn` (primitives) + docs. Не выдумывать UI. -Monorepo layout — [`frontend-monorepo.mdc`](frontend-monorepo.mdc). MCP workflow — [`shadcn-mcp.mdc`](shadcn-mcp.mdc). UI patterns — [`frontend-ui-patterns.mdc`](frontend-ui-patterns.mdc). +Monorepo — [`frontend-monorepo.mdc`](frontend-monorepo.mdc). ReUI — [`reui-mcp.mdc`](reui-mcp.mdc). Patterns — [`frontend-ui-patterns.mdc`](frontend-ui-patterns.mdc). | Документ | URL | |----------|-----| -| **Components (primary catalog)** | https://ui.shadcn.com/docs/components | -| **Blocks** | https://ui.shadcn.com/blocks | +| **shadcn Components** | https://ui.shadcn.com/docs/components | +| **ReUI Blocks** | https://reui.io/blocks | +| **ReUI llms.txt** | https://reui.io/llms.txt | +| **ReUI Settings** | https://reui.io/blocks/application/settings | | **Installation** | https://ui.shadcn.com/docs/installation | | **Monorepo** | https://ui.shadcn.com/docs/monorepo | -| **Theming** | https://ui.shadcn.com/docs/theming | -| **Dark Mode** | https://ui.shadcn.com/docs/dark-mode | | **Forms (RHF)** | https://ui.shadcn.com/docs/forms/react-hook-form | ## Шаг 0 — перед любым UI-кодом -0. **Codegraph** `codegraph_explore` — найти существующие реализации -1. **MCP `plugin-shadcn-shadcn`:** `search_items_in_registries` → `get_item_examples_from_registries` → `get_add_command_for_items` ([`shadcn-mcp.mdc`](shadcn-mcp.mdc)) -2. Открыть **Components** или **Blocks** — найти готовое решение -3. `cd apps/web && pnpm dlx shadcn@latest docs ` — сверить API с [Components](https://ui.shadcn.com/docs/components) -4. Сверить MCP examples ↔ docs API — только потом писать код -5. `cd apps/web && pnpm dlx shadcn@latest search "@shadcn/"` — если MCP не дал результат +0. Найти существующие `reui-kit/*` / shared +1. **Pages / KPI / settings / enterprise** → MCP `user-reui` (`search` → `get_block` / `compose_page`) + cite `previewUrl` +2. **Primitives** → MCP `plugin-shadcn-shadcn` + `pnpm dlx shadcn@latest docs ` +3. CLI add из `apps/web` → adapt -**Новая страница** → сначала [Blocks](https://ui.shadcn.com/blocks), потом `pnpm dlx shadcn@latest add `. +**Новая страница** → сначала ReUI PRO `compose_page` / blocks ([reui.io/blocks](https://reui.io/blocks)), не ui.shadcn.com/blocks как primary. -## Docs workflow - -1. MCP `plugin-shadcn-shadcn` — search → examples → add command -2. `pnpm dlx shadcn@latest docs ` — fetch URLs, сверить API -3. Skill `.agents/skills/shadcn/SKILL.md` — critical rules -4. Context7 — только TanStack / Recharts - -## Shared components (обязательно) +## Shared / kit (обязательно) | Component | Файл | |-----------|------| | `PageShell` | `page-shell.tsx` | -| `PageHeader` | `page-header.tsx` | +| `ResourcePage` | `reui-kit/resource-page.tsx` | +| `OpsDashboard` / `KpiStatGrid` | `reui-kit/ops-dashboard.tsx`, `kpi-stat-grid.tsx` | +| `KanbanBoard` | `reui-kit/kanban-board.tsx` | +| `DetailPanel` | `reui-kit/detail-panel.tsx` | +| `SettingsShell` | `reui-kit/settings-shell.tsx` | | `EmptyState` | `empty-state.tsx` | | `QueryState` | `query-state.tsx` | | `ConfirmDialog` | `confirm-dialog.tsx` | -| `DataGridCard` | `data-grid-card.tsx` | -| `SectionCards` | `section-cards.tsx` | | `StatusBadge` | `status-badge.tsx` | | `FormSheet` | `form-sheet.tsx` | | `FormField` | `form-field.tsx` | -| `TableCard` | `table-card.tsx` | | `LoadingButton` | `loading-button.tsx` | -| `SectionCardsSkeleton` / `TableSkeleton` | `skeletons.tsx` | +| `SettingRow` | `setting-row.tsx` | + +**Не использовать как эталон:** устаревшие `PageHeader` / `SectionCards` / `DataGridCard` / `TableCard` (если удалены или мёртвы). **Overlay:** Sheet — forms; AlertDialog — destructive confirm. -## Шаг 1 — CLI (обязательно) +## Шаг 1 — CLI ```bash cd apps/web -pnpm dlx shadcn@latest add table select badge card field input button ... -pnpm dlx shadcn@latest add sidebar-07 # layout -pnpm dlx shadcn@latest add dashboard-01 # dashboard -pnpm dlx shadcn@latest add login-03 # auth -pnpm dlx shadcn@latest apply b2fA --only theme -y # тема — ТОЛЬКО так +pnpm dlx shadcn@latest add button field input ... +pnpm dlx shadcn@latest add @reui/frame @reui/data-grid @reui/filters +pnpm dlx shadcn@latest add @reui/card-35 @reui/settings-16 @reui/auth-13 +pnpm dlx shadcn@latest apply b2fA --only theme -y ``` -- Копипаст с сайта **без** CLI — запрещено -- `packages/ui/src/components/*` — только registry; domain-логика → `apps/web/src/components/.tsx` +## Приоритет композиции -## Шаг 2 — композиция (best practices) +1. `@cfdm/ui/components/*` (primitives) +2. ReUI PRO block → adapt (`blocks/` reference + kit) +3. `reui-kit/*` + shared +4. Domain-обёртка -### Приоритет +## Запрещено -1. Установленный `@cfdm/ui/components/*` -2. Block из registry (адаптация под TanStack Router) -3. Shared проекта: `PageShell`, `PageHeader`, `EmptyState`, `QueryState`, `ConfirmDialog`, `DataTableCard`, `SectionCards`, `StatusBadge` -4. Domain-обёртка — последний уровень кастомизации - -### Запрещено - -| ❌ | ✅ из [Components](https://ui.shadcn.com/docs/components) | -|----|-----------------------------------------------------------| -| ``, `
`, raw select | DataGrid / `Select` | +| `bg-emerald-*` | semantic / ReUI `variant` | +| Card как ops-shell | ReUI `Frame` | +| Hand-roll KPI | `KpiStatGrid` / [card-35](https://reui.io/preview/base/card-35) | +| `space-y-*` | `flex` + `gap-*` | | `@/components/ui/*` | `@cfdm/ui/components/*` | -### Формы - -По https://ui.shadcn.com/docs/forms/react-hook-form: - -```tsx - - - Имя - - - -``` - -### Card - -`CardHeader` / `CardTitle` / `CardDescription` / `CardContent` / `CardFooter` — полная композиция из docs. - -### Таблицы - -`Table`, `TableHeader`, `TableBody`, `TableRow`, `TableHead`, `TableCell` — из docs. -Сложная таблица → [Data Table](https://ui.shadcn.com/docs/components/data-table) + block `dashboard-01`. - -### Графики - -`Chart` + `ChartContainer` + `chartConfig` с `var(--chart-1)` — не raw recharts без обёртки. - -### Иконки в Button - -```tsx - -``` - -Без `size-4` на иконке внутри shadcn-компонента. - -## Стек (не shadcn, но обязателен) - -TanStack Router + Query — [`vite-tanstack-frontend.mdc`](vite-tanstack-frontend.mdc). - -- Preset: **base-nova** + **neutral** — [`apps/web/components.json`](apps/web/components.json), [`packages/ui/components.json`](packages/ui/components.json) -- `@base-ui/react` → `render` prop (не Radix `asChild`) -- **Не Next.js** — нет Server Components, `'use client'` - ## Эталоны проекта -| Зона | Файл | Block | -|------|------|-------| -| Shell | `apps/web/src/components/layout/app-shell.tsx` | [sidebar-07](https://ui.shadcn.com/blocks) | -| Login | `apps/web/src/routes/login.tsx` | [login-03](https://ui.shadcn.com/blocks) | -| Dashboard | `apps/web/src/routes/_auth/index.tsx` | [dashboard-01](https://ui.shadcn.com/blocks) | -| CRUD | `routes/_auth/services.tsx`, `domains/index.tsx` | Card + Field + Table | +| Зона | Файл | Preview | +|------|------|---------| +| Shell | `layout/app-shell.tsx` | [app-shell-12](https://reui.io/preview/base/app-shell-12) | +| Login | `routes/login.tsx` | [auth-13](https://reui.io/preview/base/auth-13) | +| Dashboard | `routes/_auth/index.tsx` | [card-35](https://reui.io/preview/base/card-35) / dashboard-1 | +| Lists | `ResourcePage` | [data-grid-filtering-2](https://reui.io/preview/base/data-grid-filtering-2) | +| Settings | `settings/integrations.tsx` | [settings-16](https://reui.io/preview/base/settings-16) | -## Структура файлов +## Чеклист -``` -apps/web/src/ - components/ ← domain + layout + shared (blocks) - routes/ ← страницы (композиция @cfdm/ui, без raw HTML) - queries/ ← queryOptions (не inline в routes) - lib/schemas.ts ← Zod для форм - -packages/ui/src/ - components/ ← только CLI (не трогать под кейс) - hooks/ ← registry hooks (use-mobile) - lib/utils.ts ← cn() - styles/globals.css ← только output shadcn CLI -``` - -## Чеклист перед завершением задачи - -- [ ] MCP shadcn: search + examples (+ add command при новых примитивах) -- [ ] Решение есть в https://ui.shadcn.com/docs/components или /blocks -- [ ] Компоненты добавлены через `pnpm dlx shadcn@latest add` из `apps/web` -- [ ] Нет кастомного CSS и raw HTML-примитивов -- [ ] Semantic tokens, `variant`/`size` вместо переопределения className -- [ ] UI-импорты через `@cfdm/ui/components/*` -- [ ] `pnpm --filter web build` без ошибок +- [ ] `user-reui` + preview/docs для зоны +- [ ] Frame surface +- [ ] CLI add при новых items +- [ ] `pnpm --filter web build` ## Язык -Ответы пользователю — русский. Commits — [`commit-messages-ru.mdc`](commit-messages-ru.mdc). +Ответы — русский. Commits — [`commit-messages-ru.mdc`](commit-messages-ru.mdc). diff --git a/.cursor/rules/frontend-ui-patterns.mdc b/.cursor/rules/frontend-ui-patterns.mdc index 7b8a429..9cbc889 100644 --- a/.cursor/rules/frontend-ui-patterns.mdc +++ b/.cursor/rules/frontend-ui-patterns.mdc @@ -10,19 +10,34 @@ alwaysApply: false ## Docs workflow (обязательно) -0. Codegraph `codegraph_explore` — найти существующие shared/domain-компоненты -1. Skill [`.agents/skills/shadcn/SKILL.md`](../.agents/skills/shadcn/SKILL.md) + ReUI skill — component selection -2. MCP `plugin-shadcn-shadcn` / `user-reui` — search → examples → add command (`surface: "frame"`) -3. CLI: `cd apps/web && pnpm dlx shadcn@latest docs ` / `add @reui/...` → сверить API -4. Код по examples + docs API (только после совпадения MCP ↔ docs) -5. Context7 — **только** TanStack Router/Query, Recharts (не shadcn/ReUI primitives) -6. MCP `get_audit_checklist` — перед merge -7. Codegraph `codegraph_status` — Pending sync пустой +0. Codegraph / поиск существующих shared/domain / `reui-kit` +1. Skill ReUI + shadcn — component selection +2. **Primary:** MCP `user-reui` — search → `get_block` / `compose_page` (`surface: "frame"`) — **всегда cite `previewUrl` + `docsUrl`** +3. Primitives: MCP `plugin-shadcn-shadcn` + `pnpm dlx shadcn@latest docs ` +4. CLI: `cd apps/web && pnpm dlx shadcn@latest add @reui/...` → сверить API +5. Код по examples + docs (только после MCP ↔ docs) +6. Context7 — **только** TanStack Router/Query, Recharts +7. MCP `validate_usage` / `get_audit_checklist` — перед merge ## Surface Проект использует **ReUI Frame** (`surface: frame`), не shadcn Card как оболочку list/ops-экранов. Эталон списка: [data-grid-filtering-2](https://reui.io/preview/base/data-grid-filtering-2). +## Обязательные референсы по зонам + +| Зона | Preview | +|------|---------| +| KPI | [card-35](https://reui.io/preview/base/card-35) | +| List | [data-grid-filtering-2](https://reui.io/preview/base/data-grid-filtering-2) | +| Settings | [settings-16](https://reui.io/preview/base/settings-16), [Application Settings](https://reui.io/blocks/application/settings) | +| Settings rows / Health-check | [settings-2](https://reui.io/preview/base/settings-2), [settings-3](https://reui.io/preview/base/settings-3) | +| Auth | [auth-13](https://reui.io/preview/base/auth-13) | +| Empty | [empty-state-12](https://reui.io/preview/base/empty-state-12) | +| Forms | [form-7](https://reui.io/preview/base/form-7) | +| Shell | [app-shell-12](https://reui.io/preview/base/app-shell-12) | + +**SettingRow:** `FieldSeparator` только между соседними rows; не между toggle-row и nested fields (Health-check). + ## Иерархия компонентов ``` @@ -134,8 +149,10 @@ Toggle «Доска» / «К каталогу» — всегда `outline` в `p | Shell | [app-shell-12](https://reui.io/preview/base/app-shell-12) | | List + tabs + filters | [data-grid-filtering-2](https://reui.io/preview/base/data-grid-filtering-2) | | Line tabs | [c-tabs-2](https://reui.io/preview/base/components/c-tabs-2) | -| KPI | [card-35](https://reui.io/preview/base/card-35) | -| Login | auth-13 / login-03 | +| KPI | [card-35](https://reui.io/preview/base/card-35) — на dashboard, certificates, domains, groups, services | +| Login | [auth-13](https://reui.io/preview/base/auth-13) | +| Settings | [settings-16](https://reui.io/preview/base/settings-16) / [settings-6](https://reui.io/preview/base/settings-6) | +| Empty | [empty-state-12](https://reui.io/preview/base/empty-state-12) | ## Spacing diff --git a/.cursor/rules/reui-mcp.mdc b/.cursor/rules/reui-mcp.mdc index 06a8cd8..1ed0fe4 100644 --- a/.cursor/rules/reui-mcp.mdc +++ b/.cursor/rules/reui-mcp.mdc @@ -1,109 +1,108 @@ --- -description: ReUI registry (@reui) — enterprise-компоненты, MCP workflow, зависимости, матрица выбора shadcn vs ReUI +description: ReUI PRO (@reui) — MCP user-reui, Frame surface, kit, license, матрица выбора alwaysApply: true --- -# ReUI MCP — обязательно для enterprise-компонентов +# ReUI MCP — обязательно (PRO + free) -ReUI — first-class shadcn registry с enterprise-компонентами (Data Grid, Filters, Stepper и др.). Проект использует **Base UI** (`style: base-nova`), не Radix. +Проект: **Base UI** (`style: base-nova`), surface lock **`frame`**. -Связанные правила: [`shadcn-mcp.mdc`](shadcn-mcp.mdc), [`frontend-monorepo.mdc`](frontend-monorepo.mdc), [`frontend-shadcn.mdc`](frontend-shadcn.mdc). +Связанные: [`shadcn-mcp.mdc`](shadcn-mcp.mdc), [`frontend-monorepo.mdc`](frontend-monorepo.mdc), [`frontend-shadcn.mdc`](frontend-shadcn.mdc), [`frontend-ui-patterns.mdc`](frontend-ui-patterns.mdc). | Документ | URL | |----------|-----| -| **llms.txt (карта для ИИ)** | https://reui.io/llms.txt | +| **llms.txt** | https://reui.io/llms.txt | | **Get Started** | https://reui.io/docs/get-started | -| **Styling (semantic tokens)** | https://reui.io/docs/styling | +| **Styling** | https://reui.io/docs/styling | | **MCP** | https://reui.io/docs/mcp | +| **Blocks** | https://reui.io/blocks | +| **Settings blocks** | https://reui.io/blocks/application/settings | +| **License** | https://reui.io/docs/license-setup | | **Base UI components** | https://reui.io/docs/components/base/ | -## Когда использовать ReUI vs shadcn +## Primary MCP + +1. **`user-reui`** — `search` / `compose_page` / `get_block` / `get_component` / `get_install_command` / `validate_usage` / `get_audit_checklist` +2. **`plugin-shadcn-shadcn`** — primitives `@shadcn`; для `@reui` — вторично + +**Обязательно** цитировать `previewUrl` + `docsUrl` для каждой UI-зоны. + +## Когда ReUI vs shadcn | Задача | Registry | Импорт | |--------|----------|--------| -| Button, Card, Sheet, Field, Sidebar | `@shadcn` | `@cfdm/ui/components/*` | -| Blocks (sidebar-07, dashboard-01) | `@shadcn` | blocks → `apps/web/src/components/` | -| Data Grid (sort, pagination, virtual, columns) | `@reui` | `@/components/reui/data-grid/*` → обёртка `DataGridCard` | -| Мультифильтры | `@reui` | `@/components/reui/filters` → `DomainsFiltersToolbar` | -| Number field со stepper | `@reui` | `@/components/reui/number-field` | -| Autocomplete | `@reui` | `@/components/reui/autocomplete` → `AutoCompleteInput` | -| Date selector / range | `@reui` | `@/components/reui/date-selector` | -| Color picker (формы) | `@reui` | `@/components/reui/color-picker` — hex только в swatch data | -| Semantic badge (success/info/warning) | `@reui` | `@/components/reui/badge` или `StatusBadge` | +| Button, Sheet, Field, Sidebar, Tabs | `@shadcn` | `@cfdm/ui/components/*` | +| PRO pages/sections (settings, stats, auth, dashboard) | `@reui` blocks | adapt → `apps/web/src/components/` / `reui-kit/` | +| Data Grid | `@reui` | `@/components/reui/data-grid/*` → `ResourcePage` | +| Filters | `@reui` | `@/components/reui/filters` | +| Frame surface | `@reui` | `@/components/reui/frame` | +| KPI | block [card-35](https://reui.io/preview/base/card-35) | `reui-kit/KpiStatGrid` | +| Semantic badge / alert | `@reui` | `@/components/reui/badge`, `@/components/reui/alert` | +| Number / date / autocomplete / color / kanban | `@reui` | `@/components/reui/*` | -**Простые списки** — shadcn `Table`. **Сложные data-списки** — `DataGridCard` (ReUI data-grid), не shadcn Data Table. +**Сложные списки** — `ResourcePage` (Frame + data-grid + filters), не raw `
`, не устаревший DataGridCard. -## Источники для ИИ (порядок) +## MCP workflow -1. [ReUI llms.txt](https://reui.io/llms.txt) — полный каталог компонентов -2. MCP `plugin-shadcn-shadcn` с `registries: ["@reui"]` -3. Docs с **Copy Markdown**: `https://reui.io/docs/components/base/` -4. CLI dry-run: `cd apps/web && pnpm dlx shadcn@latest add @reui/ --dry-run` +0. Codegraph / поиск существующих `reui-kit/*`, `@/components/reui/*` +1. `user-reui` `search` (`surface: "frame"`, `category` при известном) +2. Страница целиком → `compose_page`; секция → `get_block` +3. `get_component` для API primitives из `componentsUsed` +4. CLI из `apps/web`: `pnpm dlx shadcn@latest add @reui/ --yes` +5. Post-add: shadcn imports → `@cfdm/ui/components/*` +6. Adapt by reuse → kit / route +7. `validate_usage` + `get_audit_checklist` -## MCP workflow (ветка ReUI) - -0. **Codegraph** `codegraph_explore` — найти `DataGridCard`, `DomainsFiltersToolbar` и существующие `@/components/reui/*` -1. **`get_project_registries`** — должен содержать `@reui` -2. **`search_items_in_registries`** с `registries: ["@reui"]`, `query`: `"data grid"`, `"filters"`, `"stepper"` и т.д. -3. **`get_item_examples_from_registries`** — полный код перед JSX -4. **`get_add_command_for_items`** — точная CLI-команда -5. Выполнить add из `apps/web` (см. [`frontend-monorepo.mdc`](frontend-monorepo.mdc)) -6. **Docs:** ReUI `https://reui.io/docs/components/base/` + llms.txt — **не** ui.shadcn.com для `@reui/*` -7. Post-add: импорты shadcn-примитивов → `@cfdm/ui/components/*` -8. `pnpm install` + `pnpm --filter web build` - -## Размещение и импорты +## Размещение | Слой | Путь | Импорт | |------|------|--------| -| shadcn primitives | `packages/ui/src/components/` | `@cfdm/ui/components/*` | -| ReUI enterprise | `apps/web/src/components/reui/` | `@/components/reui/*` | -| Проектные обёртки | `apps/web/src/components/` | `@/components/data-grid-card` и т.д. | +| shadcn | `packages/ui/src/components/` | `@cfdm/ui/components/*` | +| ReUI CLI | `apps/web/src/components/reui/` | `@/components/reui/*` | +| PRO blocks (reference) | `apps/web/src/components/blocks/` | adapt into kit, не копипаст в routes | +| Kit | `apps/web/src/components/reui-kit/` | `@/components/reui-kit/*` | -```bash -cd apps/web -pnpm dlx shadcn@latest add @reui/data-grid -pnpm dlx shadcn@latest add @reui/filters +## Установленные ReUI (apps/web) + +**Components:** `frame`, `data-grid/*`, `filters`, `kanban`, `badge`, `alert`, `autocomplete`, `number-field`, `date-selector`, `color-picker`, `timeline`, `rating`, `phone-input`, `icon-stack` + +**Kit:** `ResourcePage`, `KpiStatGrid`, `OpsDashboard`, `KanbanBoard`, `DetailPanel`, `SettingsShell` + +**Blocks (reference):** `card-35`, `auth-13`, `app-shell-12`, `settings-16`, `settings-8`, `empty-state-12`, `form-7`, `data-grid-filtering-2`, `dashboard-1`, … + +## License + +```env +# .env.local (gitignored) +REUI_LICENSE_KEY= ``` -## Уже установленные ReUI-компоненты +`apps/web/components.json` → `@reui` с `Authorization: Bearer ${REUI_LICENSE_KEY}`. -`badge`, `data-grid/*`, `filters` — в [`apps/web/src/components/reui/`](apps/web/src/components/reui/). +## Эталоны preview -Перед добавлением дубликата — проверить 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`](apps/web/package.json). - -## Semantic tokens (Styling) - -ReUI расширяет тему shadcn токенами `--success`, `--info`, `--warning`, `--destructive-foreground`, `--invert` — уже в [`packages/ui/src/styles/globals.css`](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](https://reui.io/docs/styling); не править `globals.css` вручную без сверки с docs +| Зона | Preview | +|------|---------| +| KPI | https://reui.io/preview/base/card-35 | +| List | https://reui.io/preview/base/data-grid-filtering-2 | +| Settings | https://reui.io/preview/base/settings-16 | +| Auth | https://reui.io/preview/base/auth-13 | +| Shell | https://reui.io/preview/base/app-shell-12 | +| Empty | https://reui.io/preview/base/empty-state-12 | ## Запрещено -- Копипаст с reui.io без CLI `add @reui/...` -- Класть ReUI в `packages/ui` или импортировать как `@cfdm/ui` -- Radix-варианты (`/docs/components/radix/...`) — только Base UI -- Raw Tailwind-цвета вместо ReUI semantic `variant` -- Писать data-grid/filters с нуля, если есть `@reui/*` и shared-обёртки +- Копипаст с reui.io без CLI +- ReUI в `packages/ui` / импорт как `@cfdm/ui` +- Radix-варианты docs — только Base UI +- Raw `bg-emerald-*` вместо ReUI `variant` +- Hand-roll data-grid/filters/KPI/settings rows при наличии `@reui` / kit +- Смешивать Card и Frame на ops-экране ## Чеклист -- [ ] Задача требует ReUI? (см. матрицу выше) -- [ ] MCP search с `registries: ["@reui"]` + examples -- [ ] `shadcn add @reui/` из `apps/web` -- [ ] Импорты: `@cfdm/ui` для примитивов, `@/components/reui` для ReUI -- [ ] Зависимости в `apps/web/package.json` -- [ ] `pnpm --filter web build` без ошибок +- [ ] `user-reui` search/get_block + previewUrl +- [ ] `surface: frame` +- [ ] CLI add из `apps/web` при новом item +- [ ] Kit / `@/components/reui` / `@cfdm/ui` — правильный слой +- [ ] `pnpm --filter web build` diff --git a/.env.example b/.env.example index 11708e3..56317f4 100644 --- a/.env.example +++ b/.env.example @@ -14,6 +14,10 @@ ADMIN_PASSWORD_HASH= # Frontend (Vite) # Публичные URL приложений и integration token настраиваются в UI: Настройки → Интеграции +# ReUI PRO (apps/web/components.json → @reui Authorization) +# Ключ: https://reui.io/docs/license-setup — класть в .env.local (gitignored) +REUI_LICENSE_KEY= + # Server SERVER_PORT=8080 STATIC_DIR=