@atomazing-org/design-system 1.2.8 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/README.MD +48 -13
  2. package/dist/index.d.ts +21 -1000
  3. package/dist/index.js +37 -118
  4. package/dist/presets/index.d.ts +20 -7
  5. package/dist/presets/index.js +357 -2
  6. package/dist/{typography-Dq0wCojD.d.mts → typography-B-BeIk0v.d.ts} +4 -5
  7. package/migrations/README.UPDATE.md +29 -0
  8. package/migrations/docs/migrations/design-system/README.md +69 -0
  9. package/migrations/docs/migrations/design-system/routes/adopt-existing/RUNBOOK.md +34 -0
  10. package/migrations/docs/migrations/design-system/routes/adopt-existing/migration.spec.json +54 -0
  11. package/migrations/docs/migrations/design-system/routes/greenfield/RUNBOOK.md +29 -0
  12. package/migrations/docs/migrations/design-system/routes/greenfield/migration.spec.json +36 -0
  13. package/migrations/docs/migrations/design-system/routes/mui4-to-latest/RUNBOOK.md +81 -0
  14. package/migrations/docs/migrations/design-system/routes/mui4-to-latest/migration.spec.json +70 -0
  15. package/migrations/docs/migrations/design-system/routes/mui4-to-latest/token-map.csv +4 -0
  16. package/migrations/docs/migrations/design-system/schema/migration.spec.schema.json +63 -0
  17. package/migrations/docs/migrations/design-system/shared/FOUNDATION.md +39 -0
  18. package/migrations/docs/migrations/design-system/shared/acceptance.md +27 -0
  19. package/migrations/docs/migrations/design-system/shared/gates.md +35 -0
  20. package/migrations/docs/migrations/design-system/shared/rollback.md +13 -0
  21. package/migrations/skills/design-system-migration-agent/SKILL.md +92 -0
  22. package/package.json +39 -17
  23. package/dist/chunk-OYZ4FCLV.mjs +0 -2
  24. package/dist/chunk-OYZ4FCLV.mjs.map +0 -1
  25. package/dist/index.d.mts +0 -1181
  26. package/dist/index.js.map +0 -1
  27. package/dist/index.mjs +0 -273
  28. package/dist/index.mjs.map +0 -1
  29. package/dist/presets/index.d.mts +0 -17
  30. package/dist/presets/index.js.map +0 -1
  31. package/dist/presets/index.mjs +0 -2
  32. package/dist/presets/index.mjs.map +0 -1
  33. package/dist/typography-Dq0wCojD.d.ts +0 -121
@@ -4,11 +4,10 @@ import { ReactNode, CSSProperties } from 'react';
4
4
  /**
5
5
  * Available options for dark mode configuration.
6
6
  * - `system`: Follows the operating system preference.
7
- * - `auto`: Alias of `system` (no contrast-based detection in current contract).
8
7
  * - `light`: Forces light mode.
9
8
  * - `dark`: Forces dark mode.
10
9
  */
11
- type DarkModeOptions = "system" | "auto" | "light" | "dark";
10
+ type DarkModeOptions = "system" | "light" | "dark";
12
11
  interface OptionItem {
13
12
  label: string;
14
13
  value: DarkModeOptions;
@@ -24,10 +23,10 @@ type NamedThemeOptions = ThemeOptions & {
24
23
  */
25
24
  interface AppSettings {
26
25
  /**
27
- * The selected theme name from the available themes list.
26
+ * The selected preset id from the available themes list.
28
27
  * Invalid or missing values are normalized to the first available theme.
29
28
  */
30
- theme: string;
29
+ themeId: string;
31
30
  /**
32
31
  * Controls how dark mode is applied in the app.
33
32
  */
@@ -118,4 +117,4 @@ declare module "@mui/material/Typography" {
118
117
  }
119
118
  }
120
119
 
121
- export type { AppSettings as A, CustomTypographyVariants as C, DarkModeOptions as D, NamedThemeOptions as N, OptionItem as O, ThemeContextProps as T, ThemePreset as a, ThemeModeBackground as b, NormalizedPreset as c, DarkModeSetting as d, ThemeId as e, ThemeScheme as f };
120
+ export type { AppSettings as A, CustomTypographyVariants as C, DarkModeOptions as D, NamedThemeOptions as N, OptionItem as O, ThemeContextProps as T, ThemePreset as a, ThemeModeBackground as b, NormalizedPreset as c, ThemeId as d, ThemeScheme as e, DarkModeSetting as f };
@@ -0,0 +1,29 @@
1
+ # Что здесь должно быть (исправленный формат)
2
+
3
+ Вы правы: для этой задачи в `migrations/` нужны не исполняемые `mjs`-скрипты, а **инструкции для ИИ/агента**, который выполняет миграцию по runbook'ам.
4
+
5
+ ## Source of truth
6
+
7
+ - `migrations/skills/design-system-migration-agent/SKILL.md` — инструкция для ИИ (главная точка входа)
8
+ - `migrations/docs/migrations/design-system/*` — маршруты миграции, runbook'и, shared criteria
9
+
10
+ ## Как использовать (через ИИ)
11
+
12
+ 1) Дайте агенту задачу на миграцию проекта к `@atomazing-org/design-system`.
13
+ 2) Укажите использовать skill:
14
+ - `migrations/skills/design-system-migration-agent/SKILL.md`
15
+ 3) Агент сам:
16
+ - выберет route (`greenfield` / `adopt-existing` / `mui4-to-latest`);
17
+ - прочитает нужный `RUNBOOK.md` и `migration.spec.json`;
18
+ - выполнит шаги вручную (без обязательной зависимости от `migrations/scripts/*`);
19
+ - прогонит проверки (`lint/test/build`) и acceptance criteria.
20
+
21
+ ## Что настроить перед запуском
22
+
23
+ - Заменить `<SET_VERSION>` в route spec (или сообщить версию агенту явно).
24
+ - Для token migration подготовить mapping (`token-map.csv`) под конкретный проект.
25
+ - Для route `adopt-existing` определить список legacy token imports/identifiers (для search/gates).
26
+
27
+ ## Про `migrations/scripts/*`
28
+
29
+ `migrations/scripts/*` сейчас можно считать **необязательной/избыточной реализацией** (референс для автоматизации). Для вашего исходного запроса source of truth — именно skill + docs.
@@ -0,0 +1,69 @@
1
+ # design-system v2 migration routes (MUI v7 target)
2
+
3
+ This folder contains the migration router, runbooks, and route specs used to adopt
4
+ `@atomazing-org/design-system` v2.
5
+
6
+ Target baseline:
7
+ - design-system v2 contract
8
+ - MUI v7
9
+ - React 18/19
10
+
11
+ Repo route model (canonical):
12
+ - `mui4-to-latest` (backlog alias: `mui4-to-v7`)
13
+ - `greenfield`
14
+ - `adopt-existing` (covers backlog `mui5-6-to-v7` unless a dedicated split route is added later)
15
+
16
+ ## Route selection (decision tree)
17
+
18
+ 1. If `package.json` contains `@material-ui/*` dependencies:
19
+ - use `routes/mui4-to-latest/`
20
+ 2. Else if the app is new / no existing theme-token migration is needed:
21
+ - use `routes/greenfield/`
22
+ 3. Else:
23
+ - use `routes/adopt-existing/`
24
+
25
+ ## Agent workflow (scriptless default)
26
+
27
+ Use the AI skill/instructions as the primary execution method:
28
+
29
+ - `migrations/skills/design-system-migration-agent/SKILL.md`
30
+
31
+ Default flow:
32
+
33
+ 1. Detect route manually (inspect `package.json`, imports, and current theme setup).
34
+ 2. Read the selected route spec + runbook:
35
+ - `routes/<routeId>/migration.spec.json`
36
+ - `routes/<routeId>/RUNBOOK.md`
37
+ 3. Execute steps from the spec/runbook in the target repo.
38
+ 4. Run quality gates / checks (scripted or equivalent manual checks):
39
+
40
+ ```bash
41
+ npm test
42
+ npm run build
43
+ ```
44
+
45
+ Recommended manual gate equivalents:
46
+ - search for `@material-ui/*` in source and `package.json`
47
+ - search for legacy token imports/identifiers defined for the route/project
48
+
49
+ ## Route index
50
+
51
+ - `mui4-to-latest`: `./routes/mui4-to-latest/RUNBOOK.md`
52
+ - `greenfield`: `./routes/greenfield/RUNBOOK.md`
53
+ - `adopt-existing`: `./routes/adopt-existing/RUNBOOK.md` (also used for backlog Phase 14 specialization)
54
+
55
+ ## Shared gates
56
+
57
+ Common migration gates are documented in:
58
+
59
+ - `./shared/gates.md`
60
+ - `./shared/acceptance.md`
61
+
62
+ Routes should reference the shared gates docs instead of duplicating the full gate list.
63
+
64
+ ## Notes
65
+
66
+ - Route phases in this repo backlog may be completed in `docs/spec-first` mode before real app dry-runs.
67
+ - A dedicated `mui5-6-to-v7` route split is a post-v2 option, not a blocker for the current repo route model.
68
+
69
+
@@ -0,0 +1,34 @@
1
+ # Маршрут: Рефакторинг на актуальном MUI + применение дизайн-системы (adopt-existing)
2
+
3
+ ## Когда использовать
4
+
5
+ - Проект уже использует `@mui/material` (v5/v6/v7).
6
+ - Нужна унификация темы/типографики/палитры через `@atomazing-org/design-system`.
7
+ - Основная работа — убрать хардкоды токенов и перейти на `theme.*`.
8
+
9
+ ## Результат
10
+
11
+ - `ThemeProviderWrapper` — единственный источник настроек темы.
12
+ - Токены из проекта либо удалены, либо превращены в thin-adapter вокруг `theme`.
13
+
14
+ ## Шаги
15
+
16
+ 1) Preflight: тесты и сборка зелёные.
17
+ 2) Установить `@atomazing-org/design-system` и peer deps (если не установлены).
18
+ 3) Подключить `ThemeProviderWrapper` на корне приложения.
19
+ 4) Сделать инвентаризацию токенов:
20
+ - где лежат цвета/типографика/spacing/радиусы;
21
+ - какие алиасы используются чаще всего.
22
+ 5) Заполнить mapping (CSV/JSON) и применить безопасные замены.
23
+ 6) Прогнать gates + тесты + сборку.
24
+
25
+ ## Стратегия переносов (рекомендуется)
26
+
27
+ - Сначала цвета поверхностей и текстов (фон/текст/бордер/brand).
28
+ - Затем типографика (перевод на variants или `theme.typography`).
29
+ - Затем компонентные размеры/spacing.
30
+ ## Shared gates (repo)
31
+
32
+ Use common gate definitions from:
33
+ - `../../shared/gates.md`
34
+ - `../../shared/acceptance.md`
@@ -0,0 +1,54 @@
1
+ {
2
+ "$schema": "../../schema/migration.spec.schema.json",
3
+ "id": "adopt-existing",
4
+ "title": "Adopt @atomazing-org/design-system in an existing MUI project",
5
+ "detect": {
6
+ "packageJson": {
7
+ "anyDependencies": ["@mui/material"]
8
+ }
9
+ },
10
+ "entryConditions": ["проект уже на @mui/material"],
11
+ "exitConditions": [
12
+ "ThemeProviderWrapper подключён",
13
+ "нет запрещённых токенов/импортов",
14
+ "tests/build зелёные"
15
+ ],
16
+ "steps": [
17
+ {
18
+ "name": "Preflight",
19
+ "run": ["npm ci", "npm test", "npm run build"]
20
+ },
21
+ {
22
+ "name": "Add design-system deps",
23
+ "run": [
24
+ "node migrations/scripts/migrations/design-system/actions/update-package-json.mjs --add @atomazing-org/design-system:<SET_VERSION>"
25
+ ]
26
+ },
27
+ {
28
+ "name": "Install deps",
29
+ "run": ["npm install"]
30
+ },
31
+ {
32
+ "name": "Manual integration",
33
+ "manualReview": [
34
+ "Подключите ThemeProviderWrapper в корне приложения.",
35
+ "Удалите/упростите существующий ThemeProvider, чтобы не было конфликтов."
36
+ ]
37
+ },
38
+ {
39
+ "name": "Token cleanup",
40
+ "manualReview": [
41
+ "Заполните migrations/scripts/migrations/design-system/shared/token-gate.config.json под ваш проект.",
42
+ "Подготовьте CSV mapping и примените apply-replacements-from-csv.mjs."
43
+ ]
44
+ },
45
+ {
46
+ "name": "Quality gates",
47
+ "run": [
48
+ "node migrations/scripts/migrations/design-system/gates/no-hardcoded-tokens.mjs --root src --config migrations/scripts/migrations/design-system/shared/token-gate.config.json",
49
+ "npm test",
50
+ "npm run build"
51
+ ]
52
+ }
53
+ ]
54
+ }
@@ -0,0 +1,29 @@
1
+ # Маршрут: Установка с нуля (greenfield)
2
+
3
+ ## Когда использовать
4
+
5
+ - Новый проект.
6
+ - Нет унаследованных token-файлов и старой темы.
7
+
8
+ ## Результат
9
+
10
+ - `ThemeProviderWrapper` подключён на корне.
11
+ - (Опционально) настроены список динамических тем и UI-переключатели.
12
+
13
+ ## Шаги
14
+
15
+ 1) Установить зависимости.
16
+ 2) Обернуть приложение в `ThemeProviderWrapper`.
17
+ 3) (Опционально) передать список тем `themes` и/или `colorPaletteOverride`.
18
+ 4) (Опционально) добавить UI для переключения темы и dark mode.
19
+ 5) Прогнать тесты и сборку.
20
+
21
+ ## SSR / Next.js
22
+
23
+ Если проект на Next.js:
24
+ - провайдер разместить в клиентской границе (`"use client"`).
25
+ ## Shared gates (repo)
26
+
27
+ Use common gate definitions from:
28
+ - `../../shared/gates.md`
29
+ - `../../shared/acceptance.md`
@@ -0,0 +1,36 @@
1
+ {
2
+ "$schema": "../../schema/migration.spec.schema.json",
3
+ "id": "greenfield",
4
+ "title": "Greenfield install of @atomazing-org/design-system",
5
+ "detect": {
6
+ "packageJson": {
7
+ "allDependencies": []
8
+ }
9
+ },
10
+ "entryConditions": ["проект инициализирован (package.json существует)"],
11
+ "exitConditions": ["ThemeProviderWrapper подключён", "tests/build зелёные"],
12
+ "steps": [
13
+ {
14
+ "name": "Add deps",
15
+ "run": [
16
+ "node migrations/scripts/migrations/design-system/actions/update-package-json.mjs --add @atomazing-org/design-system:<SET_VERSION> --add @mui/material:^7 --add @mui/icons-material:^7 --add @emotion/react:^11 --add @emotion/styled:^11"
17
+ ]
18
+ },
19
+ {
20
+ "name": "Install deps",
21
+ "run": ["npm install"]
22
+ },
23
+ {
24
+ "name": "Manual integration",
25
+ "manualReview": [
26
+ "Подключите ThemeProviderWrapper в корне приложения.",
27
+ "Если Next.js — убедитесь, что это client boundary (\"use client\")."
28
+ ]
29
+ },
30
+ {
31
+ "name": "Quality",
32
+ "run": ["npm test", "npm run build"]
33
+ }
34
+ ],
35
+ "gates": ["tests", "build"]
36
+ }
@@ -0,0 +1,81 @@
1
+ # Маршрут: MUI v4 → MUI v7 + @atomazing-org/design-system
2
+
3
+ ## Когда использовать
4
+
5
+ - В проекте есть `@material-ui/*` (Material-UI v4).
6
+ - Есть собственные token-файлы/константы, которые используются напрямую в компонентах.
7
+
8
+ ## Результат
9
+
10
+ - Проект на `@mui/material` (v7) + Emotion.
11
+ - Корневой провайдер темы: `ThemeProviderWrapper`.
12
+ - Основные токены и типографика берутся из MUI theme.
13
+
14
+ ## Шаги (высокий уровень)
15
+
16
+ 1) Зафиксировать baseline: тесты/сборка зелёные.
17
+ 2) Обновить зависимости и перейти с `@material-ui/*` на `@mui/*`.
18
+ 3) Запустить официальные codemod'ы для v4 → v5.
19
+ 4) Довести проект до актуальной версии MUI (v6 → v7) по гайдам.
20
+ 5) Подключить `@atomazing-org/design-system` и заменить корневой ThemeProvider.
21
+ 6) Перенести токены: заменить импорты/использования локальных токенов на `theme.palette` и `theme.typography`.
22
+ 7) Прогнать gates + тесты + сборку.
23
+
24
+ ## Детальные команды (ориентир)
25
+
26
+ > Порядок и точные команды могут отличаться в зависимости от пакетного менеджера и инфраструктуры.
27
+
28
+ ### A) Preflight
29
+
30
+ - Создайте ветку.
31
+ - Выполните:
32
+
33
+ ```bash
34
+ npm ci
35
+ npm test
36
+ npm run build
37
+ ```
38
+
39
+ ### B) Upgrade deps до MUI v5 (первый major)
40
+
41
+ - Удалите `@material-ui/*`.
42
+ - Установите `@mui/material`, `@mui/icons-material`, `@emotion/react`, `@emotion/styled`.
43
+
44
+ ### C) Codemod v4 → v5
45
+
46
+ Запустить preset-safe codemod на исходниках (обычно `src`):
47
+
48
+ ```bash
49
+ npx @mui/codemod@latest v5.0.0/preset-safe src
50
+ ```
51
+
52
+ После codemod:
53
+ - исправить TODO/ошибки TypeScript;
54
+ - пройтись по стилям JSS (`makeStyles/withStyles`) и заменить на совместимые подходы.
55
+
56
+ ### D) Upgrade v5 → v6 → v7
57
+
58
+ - Выполнить апгрейд до v6 по официальному гайду.
59
+ - Затем апгрейд до v7 по официальному гайду.
60
+
61
+ ### E) Подключение дизайн-системы
62
+
63
+ - Установить `@atomazing-org/design-system`.
64
+ - Подключить `ThemeProviderWrapper` на корне приложения.
65
+
66
+ ### F) Перенос токенов
67
+
68
+ 1) Соберите список файлов, где импортируются токены.
69
+ 2) Заполните `token-map.csv` (пример в этом же каталоге).
70
+ 3) Примените текстовые замены через скрипт `apply-replacements-from-csv.mjs` (см. `migration.spec.json`).
71
+ 4) Для сложных случаев внесите правки вручную и отметьте это в отчёте.
72
+
73
+ ## Ручной контроль (обязательно)
74
+
75
+ - Проверить визуально минимум 5–10 ключевых экранов.
76
+ - Проверить состояния компонентов (hover/active/disabled) для ключевых кнопок, инпутов, алертов.
77
+ ## Shared gates (repo)
78
+
79
+ Use common gate definitions from:
80
+ - `../../shared/gates.md`
81
+ - `../../shared/acceptance.md`
@@ -0,0 +1,70 @@
1
+ {
2
+ "$schema": "../../schema/migration.spec.schema.json",
3
+ "id": "mui4-to-latest",
4
+ "title": "MUI v4 → MUI v7 + adopt @atomazing-org/design-system",
5
+ "detect": {
6
+ "packageJson": {
7
+ "anyDependencies": [
8
+ "@material-ui/core",
9
+ "@material-ui/styles",
10
+ "@material-ui/icons"
11
+ ]
12
+ }
13
+ },
14
+ "entryConditions": [
15
+ "package.json содержит @material-ui/*",
16
+ "тесты/сборка до миграции зелёные"
17
+ ],
18
+ "exitConditions": [
19
+ "в package.json отсутствуют @material-ui/*",
20
+ "код не импортирует @material-ui/*",
21
+ "корень приложения использует ThemeProviderWrapper"
22
+ ],
23
+ "steps": [
24
+ {
25
+ "name": "Preflight",
26
+ "run": ["npm ci", "npm test", "npm run build"]
27
+ },
28
+ {
29
+ "name": "Update package.json deps (v4 → v5 baseline + design-system)",
30
+ "run": [
31
+ "node migrations/scripts/migrations/design-system/actions/update-package-json.mjs --remove @material-ui/core --remove @material-ui/styles --remove @material-ui/icons --add @mui/material:^7 --add @mui/icons-material:^7 --add @emotion/react:^11 --add @emotion/styled:^11 --add @atomazing-org/design-system:<SET_VERSION>"
32
+ ],
33
+ "manualReview": [
34
+ "Проверьте наличие альтернативных зависимостей (mui lab, x-пакеты, date-pickers, data-grid) и обновите их отдельно."
35
+ ]
36
+ },
37
+ {
38
+ "name": "Install deps",
39
+ "run": ["npm install"]
40
+ },
41
+ {
42
+ "name": "Run official codemod (v4 → v5)",
43
+ "run": ["npx @mui/codemod@latest v5.0.0/preset-safe src"],
44
+ "manualReview": [
45
+ "Просмотрите TODO и ошибки компиляции после codemod.",
46
+ "Проверьте стили на JSS (makeStyles/withStyles)."
47
+ ]
48
+ },
49
+ {
50
+ "name": "Apply token remap (project-specific)",
51
+ "run": [
52
+ "node migrations/scripts/migrations/design-system/shared/apply-replacements-from-csv.mjs --csv migrations/docs/migrations/design-system/routes/mui4-to-latest/token-map.csv --root src"
53
+ ],
54
+ "manualReview": [
55
+ "Включите нужные строки в token-map.csv (enabled=true) и проверьте дифф.",
56
+ "Для сложных замен добавьте отдельные правила или выполните ручные правки."
57
+ ]
58
+ },
59
+ {
60
+ "name": "Quality gates",
61
+ "run": [
62
+ "node migrations/scripts/migrations/design-system/gates/no-legacy-material-ui.mjs --root src",
63
+ "node migrations/scripts/migrations/design-system/gates/no-hardcoded-tokens.mjs --root src --config migrations/scripts/migrations/design-system/shared/token-gate.config.json",
64
+ "npm test",
65
+ "npm run build"
66
+ ]
67
+ }
68
+ ],
69
+ "gates": ["no-legacy-material-ui", "no-hardcoded-tokens", "tests", "build"]
70
+ }
@@ -0,0 +1,4 @@
1
+ kind,from,to,notes,enabled
2
+ literal,colors.primary,"(t) => t.palette.brand.main","пример: локальный colors.primary → theme.palette.brand.main",false
3
+ literal,colors.accent,"(t) => t.palette.accent.main",,"",false
4
+ regex,"\\bspacing\\((\\d+)\\)","(t) => t.spacing($1)","пример: перенос spacing() на theme.spacing",false
@@ -0,0 +1,63 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://atomazing.org/schemas/design-system/migration.spec.schema.json",
4
+ "title": "Design System Migration Spec",
5
+ "type": "object",
6
+ "required": ["id", "title", "steps"],
7
+ "properties": {
8
+ "id": { "type": "string" },
9
+ "title": { "type": "string" },
10
+ "detect": {
11
+ "type": "object",
12
+ "properties": {
13
+ "packageJson": {
14
+ "type": "object",
15
+ "properties": {
16
+ "anyDependencies": {
17
+ "type": "array",
18
+ "items": { "type": "string" }
19
+ },
20
+ "allDependencies": {
21
+ "type": "array",
22
+ "items": { "type": "string" }
23
+ }
24
+ },
25
+ "additionalProperties": false
26
+ }
27
+ },
28
+ "additionalProperties": true
29
+ },
30
+ "entryConditions": {
31
+ "type": "array",
32
+ "items": { "type": "string" }
33
+ },
34
+ "exitConditions": {
35
+ "type": "array",
36
+ "items": { "type": "string" }
37
+ },
38
+ "steps": {
39
+ "type": "array",
40
+ "items": {
41
+ "type": "object",
42
+ "required": ["name"],
43
+ "properties": {
44
+ "name": { "type": "string" },
45
+ "run": {
46
+ "type": "array",
47
+ "items": { "type": "string" }
48
+ },
49
+ "manualReview": {
50
+ "type": "array",
51
+ "items": { "type": "string" }
52
+ }
53
+ },
54
+ "additionalProperties": true
55
+ }
56
+ },
57
+ "gates": {
58
+ "type": "array",
59
+ "items": { "type": "string" }
60
+ }
61
+ },
62
+ "additionalProperties": true
63
+ }
@@ -0,0 +1,39 @@
1
+ # Общий фундамент миграции
2
+
3
+ ## Цель
4
+
5
+ Привести проект к состоянию, где:
6
+ - корневой провайдер темы — **ThemeProviderWrapper** из `@atomazing-org/design-system`;
7
+ - цвета/типографика/компонентные значения берутся из темы (MUI theme), а не из локальных хардкодов;
8
+ - переключение темы/режима (при необходимости) делается через **useThemeSettings**.
9
+
10
+ ## Минимальная интеграция
11
+
12
+ В корне приложения оборачиваем UI:
13
+
14
+ ```tsx
15
+ import { ThemeProviderWrapper } from "@atomazing-org/design-system";
16
+
17
+ export function App() {
18
+ return (
19
+ <ThemeProviderWrapper>
20
+ {/* app */}
21
+ </ThemeProviderWrapper>
22
+ );
23
+ }
24
+ ```
25
+
26
+ ## Типовые элементы дизайн-системы
27
+
28
+ - **Dynamic themes**: можно передать массив тем `themes` (name + цвета), чтобы UI мог переключаться между ними.
29
+ - **Dark mode**: чтение/запись режима через `useThemeSettings()`.
30
+ - **Расширенная палитра**: дополнительные цвета (например, `brand`, `neutral`, `accent`, `muted`) доступны в `theme.palette.*` и на ряде компонентов через `color`.
31
+ - **Типографика**: расширенные `Typography` variants (например, семейства `text_*` и `header_*`).
32
+
33
+ ## SSR / Next.js
34
+
35
+ Если проект SSR:
36
+ - избегайте обращения к `window/document/navigator/localStorage` на уровне модуля;
37
+ - провайдер темы размещайте в клиентской границе (например, в `layout.tsx` с директивой `"use client"`).
38
+
39
+
@@ -0,0 +1,27 @@
1
+ # Общие критерии готовности (Acceptance Criteria)
2
+
3
+ Миграция считается завершённой, когда:
4
+
5
+ ## 1) Зависимости
6
+ - В проекте присутствует `@atomazing-org/design-system`.
7
+ - Для MUI присутствуют совместимые версии `@mui/material`, `@mui/icons-material`, `@emotion/react`, `@emotion/styled`.
8
+
9
+ ## 2) Источник истины для темы
10
+ - Корень приложения обёрнут в `ThemeProviderWrapper`.
11
+ - Нет второго конкурентного `ThemeProvider` (если он не нужен как thin-wrapper вокруг DS).
12
+
13
+ ## 3) Отсутствие legacy MUI v4
14
+ - В `package.json` отсутствуют `@material-ui/*`.
15
+ - В коде отсутствуют импорты из `@material-ui/*`.
16
+
17
+ ## 4) Токены
18
+ - Нет прямых импортов/использований устаревших token-файлов (список определяется маршрутом).
19
+ - Основные UI-поверхности (фон/текст/бордеры/основные кнопки) используют `theme.palette`.
20
+ - Основные тексты используют `Typography` variants (или `theme.typography`).
21
+
22
+ ## 5) Качество
23
+ - `npm test` проходит.
24
+ - `npm run build` проходит.
25
+ - Quality gates проходят (через `migrations/scripts/*` или эквивалентные ручные проверки поиска по коду/импортам).
26
+
27
+
@@ -0,0 +1,35 @@
1
+ # Shared migration gates (design-system v2)
2
+
3
+ Use this gate list as the common baseline for all routes under
4
+ `migrations/docs/migrations/design-system/routes/*`.
5
+
6
+ ## Required commands
7
+
8
+ Run in the target app repository (adjust package manager as needed):
9
+
10
+ ```bash
11
+ npm run lint
12
+ npm test
13
+ npm run build
14
+ ```
15
+
16
+ ## Required checks
17
+
18
+ - `ThemeProviderWrapper` is wired at the app root (or an approved thin wrapper around it).
19
+ - No route-blocking dependency conflicts remain after dependency updates.
20
+ - The app reaches the v2 target state (MUI v7 + design-system v2 contract).
21
+
22
+ ## Route-specific checks
23
+
24
+ - `mui4-to-latest`:
25
+ - no `@material-ui/*` dependencies remain
26
+ - no `@material-ui/*` imports remain in app source
27
+ - `adopt-existing` / `mui5-6-to-v7` coverage:
28
+ - no forbidden hardcoded token imports remain (per route config)
29
+ - `greenfield`:
30
+ - provider wiring compiles and basic theme switching works (if UI switcher is added)
31
+
32
+ ## Notes
33
+
34
+ - Token hardcode detection is noisy by nature; keep route configs (`token-gate.config.json`) app-specific.
35
+ - Real app dry-runs can be deferred in this repo backlog flow (`docs/spec-first`) and executed later in app repos / optional closeout.
@@ -0,0 +1,13 @@
1
+ # Откат (Rollback)
2
+
3
+ Рекомендуемый подход:
4
+
5
+ 1) Делать миграцию только в отдельной ветке.
6
+ 2) Каждый крупный шаг — отдельный коммит (например: deps → codemod → токены → провайдер → фиксы).
7
+ 3) Откат выполнять через `git revert` отдельных коммитов или через сброс ветки.
8
+
9
+ Если миграция включает обновление MUI major-версий:
10
+ - фиксируйте `package-lock.json`/`pnpm-lock.yaml`/`yarn.lock` в каждом шаге;
11
+ - сохраняйте список основных регрессионных сценариев (smoke) и прогоняйте после каждого major.
12
+
13
+