diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..81b60a9 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,51 @@ +# AGENTS.md + +Инструкции для агентов (и IDE-ассистентов) по работе с этим репозиторием. + +## Стек + +- **SvelteKit** (`web/`) — основное приложение, Svelte 5 (runes). +- Менеджер пакетов: **pnpm**. Запускать команды из `web/`, либо через + обёртки в корне: `pnpm build`, `pnpm dev` (это `pnpm --dir web ...`). + Не использовать npm. +- Сборка: `pnpm --dir web build`, проверка типов: `pnpm --dir web exec svelte-check --tsconfig ./tsconfig.json`, + тесты: `pnpm --dir web test`. + +## Правила кода + +### Svelte 5: типизация props через `interface Props` + +Все типизированные пропсы компонентов описываются через локальный +`interface Props`, а деструктуризация идёт через аннотацию типа при `$props()`: + +```svelte + +``` + +Не использовать инлайн-дженерик `$props<{ ... }>()` — он тяжело читается и +разносит тип и деструктуризацию по разным местам. + +> Позже планируется линтер/правило (eslint-plugin-svelte / custom rule), +> запрещающее `$props<...>()` и требующее `interface Props`. + +### Дизайн: новый визуальный язык + +Переезд на новый дизайн описан в `docs/plan-redesign.md`. Ключевые +ограничения при работе с веткой `feat/redesign`: + +- Глобальные стили старого и нового дизайна разнесены по layout без + наследования: старое в `web/src/app.css` (группа `(old)/`), новое в + `web/src/lib/styles/design2.css` (ветка `preview/*`). Префикс `.ds2` не + используется. +- Все повторяющиеся визуальные элементы — отдельные компоненты в + `web/src/lib/components/kit/`, даже «просто div с двумя стилями». +- Токены нового дизайна живут в `design2.css`; `refs/` и `refs-html/` — + одноразовый источник, не поддерживаемый (правки дизайна — сразу в код). +- Коммиты мелкие (< ~500 строк), атомарные diff --git a/docs/plan-redesign.md b/docs/plan-redesign.md index 429e26a..8715ee0 100644 --- a/docs/plan-redesign.md +++ b/docs/plan-redesign.md @@ -304,7 +304,7 @@ src/routes/preview/tools/[id]/+page.svelte подключить шрифты в `design2.css` (self-host, offline-first). - [x] **[C4]** _(слит в C3: шрифты нельзя подключить до создания `design2.css`)_ `[data-theme='dark']` (таблица §2). Без утилитарных классов. -- [ ] **[C5]** Примитивы batch 1: `AppShell`, `BlueprintGrid`, `CheckerCanvas`, +- [x] **[C5]** Примитивы batch 1: `AppShell`, `BlueprintGrid`, `CheckerCanvas`, `MonoLabel`, `StatusDot`/`StatusLine`. - [ ] **[C6]** Примитивы batch 2: `Panel`, `PanelHeading`, `SettingGroup`, `SettingsFooter`, `MetaRow`/`MetaList`, `Segmented`, `Badge`, `StepCard`, diff --git a/web/src/lib/components/kit/AppShell.svelte b/web/src/lib/components/kit/AppShell.svelte new file mode 100644 index 0000000..3556656 --- /dev/null +++ b/web/src/lib/components/kit/AppShell.svelte @@ -0,0 +1,27 @@ + + +
+ +
+ {@render children()} +
+
+ + diff --git a/web/src/lib/components/kit/BlueprintGrid.svelte b/web/src/lib/components/kit/BlueprintGrid.svelte new file mode 100644 index 0000000..5085f3c --- /dev/null +++ b/web/src/lib/components/kit/BlueprintGrid.svelte @@ -0,0 +1,14 @@ + + + diff --git a/web/src/lib/components/kit/CheckerCanvas.svelte b/web/src/lib/components/kit/CheckerCanvas.svelte new file mode 100644 index 0000000..89bc0fb --- /dev/null +++ b/web/src/lib/components/kit/CheckerCanvas.svelte @@ -0,0 +1,40 @@ + + +
+ {#if children} + {@render children()} + {/if} +
+ + diff --git a/web/src/lib/components/kit/MonoLabel.svelte b/web/src/lib/components/kit/MonoLabel.svelte new file mode 100644 index 0000000..1bb1395 --- /dev/null +++ b/web/src/lib/components/kit/MonoLabel.svelte @@ -0,0 +1,30 @@ + + + + {#if children} + {@render children()} + {/if} + + + diff --git a/web/src/lib/components/kit/StatusDot.svelte b/web/src/lib/components/kit/StatusDot.svelte new file mode 100644 index 0000000..ade2a1d --- /dev/null +++ b/web/src/lib/components/kit/StatusDot.svelte @@ -0,0 +1,12 @@ + + + diff --git a/web/src/lib/components/kit/StatusLine.svelte b/web/src/lib/components/kit/StatusLine.svelte new file mode 100644 index 0000000..30386a0 --- /dev/null +++ b/web/src/lib/components/kit/StatusLine.svelte @@ -0,0 +1,23 @@ + + + + + {label} + + +