diff --git a/.superpowers/sdd/di2-restyle/task-2-report.md b/.superpowers/sdd/di2-restyle/task-2-report.md new file mode 100644 index 0000000..de2042c --- /dev/null +++ b/.superpowers/sdd/di2-restyle/task-2-report.md @@ -0,0 +1,47 @@ +# Отчёт этапа 2 — Мост тем/скинов iistwin в DI2 + +Дата: 2026-09-07. Коммит: **`b457934`** — `DI2: мост тем/скинов iistwin — Di2ThemeProvider, общий generated-skins.css, токены в формате основного клиента` (32 файла, +588/−348). Push в main выполнен, pre-push hook (check+build) — «All checks passed». Автодеплой запущен. + +## Что сделано + +### Общий код тем +- `vite.config.di2.ts` — алиас `@skin` → `client/src/themes` (resolve.alias; покрывает `@skin` и `@skin/*`). +- `client-di2/tsconfig.json` — paths: `"@skin": ["../client/src/themes/index.ts"]`, `"@skin/*": ["../client/src/themes/*"]`. +- `client-di2/src/index.css` — первой строкой `@import '../../client/src/themes/styles/generated-skins.css'` (8 селекторов `[data-skin="..."][data-theme="..."]` в собранном CSS — проверено). + +### Di2ThemeProvider (`client-di2/src/themes/Di2ThemeProvider.tsx`, новый) +- Порт логики `client/src/themes/ThemeProvider.tsx` без useAuth/useQuery (plain fetch, credentials: include). +- Приоритет скина: `localStorage['skin']` (валидация среди BUILT_IN_SKINS + кастомных с сервера) → `GET /api/organization/current-skin` → `'iistwin'`. Формат ответов сверён с `server/routes/organization-skins.routes.ts` (`{success, skins: [{id, name, description, isEditable, isBuiltIn}]}`, `{success, skinId, skin}`, `{success, skin}`). +- Кастомные скины: список через `/api/organization/skins`, токены текущего кастомного — через `/api/organization/skins/:id`; runtime CSS через `generateSkinCss` в `