--- description: Frontend monorepo — apps/web + packages/ui (@evofw/ui), shadcn CLI globs: - apps/web/** - packages/ui/** alwaysApply: false --- # Frontend Monorepo (shadcn/ui + ReUI) **Стандарт:** [Monorepo docs](https://ui.shadcn.com/docs/monorepo), ReUI — [Get Started](https://reui.io/docs/get-started). ## Layout ``` apps/web/ # Vite SPA (routes, queries, domain, reui, reui-kit) apps/api/ # Fastify API packages/ui/ # @evofw/ui — shadcn primitives packages/shared/ # @evofw/shared — Zod packages/db/ # @evofw/db — Drizzle ``` ## Два components.json | Файл | Назначение | |------|------------| | [`apps/web/components.json`](../../apps/web/components.json) | App aliases; `ui` → `@evofw/ui/components`; registry `@reui` + license | | [`packages/ui/components.json`](../../packages/ui/components.json) | UI package aliases | Синхронизировать: `style`, `iconLibrary`, `baseColor`. ## CLI — только из apps/web ```bash cd apps/web pnpm dlx shadcn@latest add button pnpm dlx shadcn@latest add @reui/frame @reui/data-grid @reui/filters pnpm dlx shadcn@latest apply b2fA --only theme -y ``` Нужен `REUI_LICENSE_KEY` в `apps/web/.env.local`. ## Куда CLI кладёт файлы | Команда | Куда | |---------|------| | `add button` | `packages/ui/src/components/button.tsx` | | `add @reui/data-grid` | `apps/web/src/components/reui/data-grid/` | ## Импорты ```tsx import { Button } from '@evofw/ui/components/button' import { cn } from '@evofw/ui/lib/utils' import '@evofw/ui/globals.css' ``` | Запрещено | Разрешено | |-----------|-----------| | `@/components/ui/*` | `@evofw/ui/components/*` | | ReUI в `packages/ui` | `@/components/reui/*` | | Ручной `globals.css` | CLI `apply --only theme` | ## Стили (Tailwind v4) `packages/ui/src/styles/globals.css` — единственный CSS. Обязательно `@source` для `packages/ui` и `apps/web`.