CI / changes (push) Successful in 11s
CI / openapi (push) Has been skipped
CI / go (push) Successful in 43s
CI / docker-web (push) Has been skipped
CI / docker-bird (push) Has been skipped
CI / bird2 (push) Successful in 21s
CI / docker-go (push) Successful in 3m41s
- Added engineering rules references in AGENTS.md for code changes and specific areas (web, BIRD). - Enhanced README.md to include links to engineering rules for different development areas. - Updated birdfmt documentation to specify engineering rules for BIRD/BGP/IP. - Clarified UI development guidelines in web/README.md to follow shadcn-svelte documentation and repository rules.
110 lines
5.1 KiB
Plaintext
110 lines
5.1 KiB
Plaintext
---
|
||
description: EvoBGP WebUI — shadcn-svelte, Svelte 5, слои ui/core|patterns|app
|
||
globs:
|
||
- web/**
|
||
alwaysApply: false
|
||
---
|
||
|
||
# Web UI — shadcn-svelte
|
||
|
||
**Источник правды:** https://shadcn-svelte.com/docs (не React shadcn/ui, не Legacy Docs).
|
||
|
||
Общие правила Go/API: `.cursor/rules/engineering.mdc`. Локальная карта: `web/README.md`.
|
||
|
||
## Слои UI
|
||
|
||
| Слой | Путь | Назначение |
|
||
|------|------|------------|
|
||
| Примитивы | `src/lib/ui/core/` | shadcn-svelte (только CLI `add`) |
|
||
| Паттерны | `src/lib/ui/patterns/` | FormField, AppDataTable, ConfirmDialog, EmptyState |
|
||
| App chrome | `src/lib/ui/app/` | Layout, PageHeader, `notify` |
|
||
| Legacy | `src/lib/components/ui/` | Re-export; **не добавлять новые файлы** |
|
||
|
||
Тема: `src/routes/layout.css`, `src/lib/ui/app/tokens.md`. CLI из `web/`: `npx shadcn-svelte@latest add <component> -y -o`.
|
||
|
||
---
|
||
|
||
## Правила
|
||
|
||
**WEB-01** | MUST | Перед новым UI — проверить https://shadcn-svelte.com/docs/components; использовать компонент, не HTML+CSS с нуля.
|
||
*Rationale:* Open Code + единый дизайн.
|
||
*Проверка:* review; нет голых `<button class=…>`.
|
||
|
||
**WEB-02** | MUST | Отсутствующий примитив — `npx shadcn-svelte@latest add <component> -y -o` → `src/lib/ui/core/`.
|
||
*Rationale:* Distribution через CLI и `components.json`.
|
||
*Проверка:* файлы только в `ui/core`.
|
||
|
||
**WEB-03** | NEVER | Альтернативные UI-kit'ы (Material, Vuetify, DaisyUI-only без shadcn-примитива).
|
||
*Проверка:* `package.json` review.
|
||
|
||
**WEB-04** | MUST | Комозиция по docs: все sub-компоненты (`DialogHeader`, `TableRow`, `Field`, …).
|
||
*Проверка:* сверка со страницей компонента в docs.
|
||
|
||
**WEB-05** | MUST | Формы — Formsnap + `sveltekit-superforms`; UI в `ui/patterns/form`, не ad-hoc валидация на странице.
|
||
*Проверка:* https://shadcn-svelte.com/docs/components/form
|
||
|
||
**WEB-06** | MUST | Таблицы — Data Table + `@tanstack/table-core`; на страницах — `AppDataTable` из patterns.
|
||
*Проверка:* https://shadcn-svelte.com/docs/components/data-table
|
||
|
||
**WEB-07** | MUST | Toast — Sonner через `notify` из `ui/app/toast.js`.
|
||
*Проверка:* https://shadcn-svelte.com/docs/components/sonner
|
||
|
||
**WEB-08** | MUST | Иконки — `@lucide/svelte` (`components.json` → `iconLibrary: lucide`).
|
||
*Проверка:* imports.
|
||
|
||
**WEB-09** | MUST | Цвета — CSS-переменные `layout.css` и токены `tokens.md`; не hex/rgb на страницах.
|
||
*Проверка:* grep `#[0-9a-f]{3,6}` в `routes/`.
|
||
|
||
**WEB-10** | SHOULD | Кастомизация — правка `ui/core` (Open Code), не `!important` поверх API.
|
||
*Проверка:* review.
|
||
|
||
**WEB-11** | MUST | `routes/**` — композиция `ui/core` + `ui/patterns` + `ui/app`; не копировать целые примитивы shadcn в route.
|
||
*Проверка:* review.
|
||
|
||
**WEB-12** | NEVER | Примеры React shadcn/ui или Svelte 4 Legacy без адаптации под https://shadcn-svelte.com/docs/migration/svelte-5
|
||
*Проверка:* `npm run check`.
|
||
|
||
**WEB-13** | MUST | Реактивность — Svelte 5 runes (`$state`, `$derived`, `$effect`); не `export let` для локального state страниц.
|
||
*Проверка:* `npm run check`; Svelte MCP.
|
||
|
||
**WEB-14** | SHOULD | Нетривиальный UI — прочитать страницу компонента (props, a11y).
|
||
*Проверка:* PR description.
|
||
|
||
**WEB-15** | MUST | Сомнения — https://shadcn-svelte.com/llms.txt , Svelte MCP, `npm run check`.
|
||
*Проверка:* локально.
|
||
|
||
**WEB-16** | MUST | Подтверждение удаления — `ConfirmDialog` из patterns, не `window.confirm`.
|
||
*Проверка:* review.
|
||
|
||
**WEB-17** | MUST | Пустые списки — `EmptyState` из patterns.
|
||
*Проверка:* review.
|
||
|
||
**WEB-18** | SHOULD | Повторяемая комбинация core (≥2 раза) — вынести в `ui/patterns/`.
|
||
*Проверка:* review.
|
||
|
||
---
|
||
|
||
## Documentation Sync (Web)
|
||
|
||
**DOC-SYNC-06** | MUST | UI — первично https://shadcn-svelte.com/docs; при конфликте с блогами/Stack Overflow побеждает официальная страница компонента.
|
||
**DOC-SYNC-07** | MUST | Перед `add` — сверить Installation/Theming с `web/components.json` и `src/routes/layout.css`.
|
||
|
||
Tailwind v4: https://shadcn-svelte.com/docs/migration/tailwind-v4
|
||
|
||
---
|
||
|
||
## Enforcement
|
||
|
||
```powershell
|
||
cd web
|
||
npm run check
|
||
npm run lint
|
||
```
|
||
|
||
**PR checklist `web/**`:**
|
||
- [ ] `ui/core` / `ui/patterns`, не дубли примитивов
|
||
- [ ] Новые примитивы через shadcn CLI
|
||
- [ ] Ссылка на docs компонента (если новый паттерн)
|
||
|
||
**CI:** job `web` рекомендован; пока обязательно локально.
|