@sberbusiness/triplex-next-mcp-server 0.24.0-beta1

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 (140) hide show
  1. package/README.md +124 -0
  2. package/bundle/.gitkeep +0 -0
  3. package/bundle/components/AbstractTree.md +198 -0
  4. package/bundle/components/AccordionBase.md +227 -0
  5. package/bundle/components/Alert.md +317 -0
  6. package/bundle/components/Amount.md +225 -0
  7. package/bundle/components/AmountField.md +289 -0
  8. package/bundle/components/Avatar.md +209 -0
  9. package/bundle/components/Badge.md +277 -0
  10. package/bundle/components/Body.md +167 -0
  11. package/bundle/components/Button.md +230 -0
  12. package/bundle/components/ButtonDropdown.md +159 -0
  13. package/bundle/components/ButtonIcon.md +122 -0
  14. package/bundle/components/Calendar.md +445 -0
  15. package/bundle/components/Card.md +374 -0
  16. package/bundle/components/CarouselExtended.md +250 -0
  17. package/bundle/components/Checkbox.md +126 -0
  18. package/bundle/components/CheckboxTree.md +280 -0
  19. package/bundle/components/CheckboxTreeExtended.md +321 -0
  20. package/bundle/components/CheckboxXGroup.md +68 -0
  21. package/bundle/components/CheckboxYGroup.md +67 -0
  22. package/bundle/components/Chip.md +404 -0
  23. package/bundle/components/ChipGroup.md +179 -0
  24. package/bundle/components/Col.md +221 -0
  25. package/bundle/components/CollapsableTree.md +255 -0
  26. package/bundle/components/Confirm.md +343 -0
  27. package/bundle/components/DateField.md +371 -0
  28. package/bundle/components/DatePickerExtended.md +342 -0
  29. package/bundle/components/DateRange.md +275 -0
  30. package/bundle/components/DesignTokens.md +385 -0
  31. package/bundle/components/Divider.md +196 -0
  32. package/bundle/components/DocumentNumberEdit.md +280 -0
  33. package/bundle/components/Dropdown.md +433 -0
  34. package/bundle/components/Ellipsis.md +208 -0
  35. package/bundle/components/EmptyView.md +99 -0
  36. package/bundle/components/ExpandAnimation.md +281 -0
  37. package/bundle/components/Footer.md +339 -0
  38. package/bundle/components/FormField.md +326 -0
  39. package/bundle/components/FormGroup.md +99 -0
  40. package/bundle/components/Gap.md +113 -0
  41. package/bundle/components/Header.md +280 -0
  42. package/bundle/components/HelpBox.md +154 -0
  43. package/bundle/components/IconWrapper.md +145 -0
  44. package/bundle/components/Island.md +197 -0
  45. package/bundle/components/IslandAccordion.md +230 -0
  46. package/bundle/components/IslandWidget.md +233 -0
  47. package/bundle/components/KeyDownListener.md +157 -0
  48. package/bundle/components/LightBox.md +322 -0
  49. package/bundle/components/Link.md +161 -0
  50. package/bundle/components/List.md +247 -0
  51. package/bundle/components/ListMaster.md +204 -0
  52. package/bundle/components/Loader.md +161 -0
  53. package/bundle/components/LoaderScreen.md +134 -0
  54. package/bundle/components/Marker.md +127 -0
  55. package/bundle/components/MarkerStatus.md +148 -0
  56. package/bundle/components/MediaWidth.md +169 -0
  57. package/bundle/components/MobileView.md +120 -0
  58. package/bundle/components/ModalWindow.md +308 -0
  59. package/bundle/components/MonthYearField.md +168 -0
  60. package/bundle/components/MultiselectField.md +213 -0
  61. package/bundle/components/Notification.md +233 -0
  62. package/bundle/components/NumberField.md +178 -0
  63. package/bundle/components/OrderedList.md +169 -0
  64. package/bundle/components/Overlay.md +237 -0
  65. package/bundle/components/Page.md +246 -0
  66. package/bundle/components/Pagination.md +298 -0
  67. package/bundle/components/Portal.md +119 -0
  68. package/bundle/components/Radio.md +174 -0
  69. package/bundle/components/Row.md +125 -0
  70. package/bundle/components/SMSField.md +160 -0
  71. package/bundle/components/SegmentedControl.md +235 -0
  72. package/bundle/components/SelectExtendedField.md +322 -0
  73. package/bundle/components/SelectField.md +213 -0
  74. package/bundle/components/Skeleton.md +129 -0
  75. package/bundle/components/Slider.md +157 -0
  76. package/bundle/components/SliderExtended.md +210 -0
  77. package/bundle/components/SliderRange.md +160 -0
  78. package/bundle/components/SmallInput.md +101 -0
  79. package/bundle/components/Spoiler.md +121 -0
  80. package/bundle/components/StatusTracker.md +151 -0
  81. package/bundle/components/Step.md +121 -0
  82. package/bundle/components/Stepper.md +163 -0
  83. package/bundle/components/Suggest.md +160 -0
  84. package/bundle/components/SuggestField.md +157 -0
  85. package/bundle/components/SwipeableArea.md +144 -0
  86. package/bundle/components/Table.md +199 -0
  87. package/bundle/components/Tabs.md +152 -0
  88. package/bundle/components/TabsExtended.md +273 -0
  89. package/bundle/components/TabsLine.md +189 -0
  90. package/bundle/components/Tag.md +135 -0
  91. package/bundle/components/TagColor.md +121 -0
  92. package/bundle/components/TagGroup.md +100 -0
  93. package/bundle/components/TextField.md +152 -0
  94. package/bundle/components/TextareaField.md +124 -0
  95. package/bundle/components/ThemeProvider.md +181 -0
  96. package/bundle/components/Tooltip.md +254 -0
  97. package/bundle/components/TopOverlay.md +145 -0
  98. package/bundle/components/TreeView.md +224 -0
  99. package/bundle/components/Triggers.md +121 -0
  100. package/bundle/guides/codestyle.md +205 -0
  101. package/bundle/guides/commits.md +166 -0
  102. package/bundle/guides/context.md +277 -0
  103. package/bundle/guides/stories.md +618 -0
  104. package/bundle/guides/template.md +154 -0
  105. package/bundle/guides/tests.md +301 -0
  106. package/bundle/icons.json +4156 -0
  107. package/bundle/manifest.json +796 -0
  108. package/bundle/release-notes/1.1.0.mdx +26 -0
  109. package/bundle/release-notes/1.1.1.mdx +14 -0
  110. package/bundle/release-notes/1.10.0.mdx +43 -0
  111. package/bundle/release-notes/1.11.0.mdx +19 -0
  112. package/bundle/release-notes/1.12.0.mdx +21 -0
  113. package/bundle/release-notes/1.13.0.mdx +43 -0
  114. package/bundle/release-notes/1.14.0.mdx +29 -0
  115. package/bundle/release-notes/1.15.0.mdx +56 -0
  116. package/bundle/release-notes/1.16.0.mdx +55 -0
  117. package/bundle/release-notes/1.17.0.mdx +15 -0
  118. package/bundle/release-notes/1.18.0.mdx +24 -0
  119. package/bundle/release-notes/1.19.0.mdx +48 -0
  120. package/bundle/release-notes/1.19.1.mdx +9 -0
  121. package/bundle/release-notes/1.2.0.mdx +80 -0
  122. package/bundle/release-notes/1.20.0.mdx +48 -0
  123. package/bundle/release-notes/1.21.0.mdx +66 -0
  124. package/bundle/release-notes/1.22.0.mdx +75 -0
  125. package/bundle/release-notes/1.23.0.mdx +50 -0
  126. package/bundle/release-notes/1.24.0.mdx +59 -0
  127. package/bundle/release-notes/1.25.0.mdx +52 -0
  128. package/bundle/release-notes/1.26.0.mdx +11 -0
  129. package/bundle/release-notes/1.3.0.mdx +21 -0
  130. package/bundle/release-notes/1.4.0.mdx +37 -0
  131. package/bundle/release-notes/1.5.0.mdx +24 -0
  132. package/bundle/release-notes/1.6.0.mdx +37 -0
  133. package/bundle/release-notes/1.6.1.mdx +11 -0
  134. package/bundle/release-notes/1.7.0.mdx +29 -0
  135. package/bundle/release-notes/1.8.0.mdx +38 -0
  136. package/bundle/release-notes/1.9.0.mdx +28 -0
  137. package/dist/index.d.ts +2 -0
  138. package/dist/index.js +324 -0
  139. package/dist/index.js.map +1 -0
  140. package/package.json +51 -0
@@ -0,0 +1,166 @@
1
+ # Коммиты и ветки — Triplex-Next
2
+
3
+ ---
4
+
5
+ ## Именование веток
6
+
7
+ **Формат:** `TRIPLEX-XXX-короткое-описание`
8
+
9
+ - Строчные буквы, слова через дефис.
10
+ - Всегда начинается с номера тикета.
11
+
12
+ ```text
13
+ TRIPLEX-844-ai-ready-design-system
14
+ TRIPLEX-901-add-badge-component
15
+ TRIPLEX-912-fix-button-focus-style
16
+ ```
17
+
18
+ **Исключения:**
19
+ - Релизная ветка: `prepare-release-XX` (например, `prepare-release-2`)
20
+ - Перелитие main → release-0: выполняется мейнтейнерами, формат произвольный
21
+
22
+ ---
23
+
24
+ ## Структура веток и релизов
25
+
26
+ | Ветка | React | Версии пакета | Описание |
27
+ |---|---|---|---|
28
+ | `main` | React 18 | `1.xx` | Основная ветка разработки |
29
+ | `release-0` | React 17 | `0.xx` | Поддержка React 17, синхронизируется с main |
30
+
31
+ **Правило:** все фича-ветки создаются от `main`. Изменения попадают в `release-0` через перелитие — вручную мейнтейнерами. Агент не должен создавать ветки от `release-0` и не должен мерджить в неё напрямую.
32
+
33
+ ---
34
+
35
+ ## Формат коммитов
36
+
37
+ **Формат:** `TRIPLEX-XXX Краткое описание`
38
+
39
+ ```text
40
+ TRIPLEX-844 Добавить AI-Ready документацию для компонентов
41
+ TRIPLEX-901 Добавить компонент Badge с темами и размерами
42
+ TRIPLEX-912 Исправить стиль фокуса для Button в теме Link
43
+ ```
44
+
45
+ Если нужно уточнение — добавляй через двоеточие:
46
+
47
+ ```text
48
+ TRIPLEX-844 AI-Ready Design System: фундамент и пилот Button
49
+ TRIPLEX-901 Badge: добавить тему DANGER и размер SM
50
+ ```
51
+
52
+ **Правила:**
53
+ - Все коммиты в ветке начинаются с одного номера тикета.
54
+ - Первая строка — не длиннее 72 символов.
55
+ - Тело коммита опционально (для сложных изменений).
56
+ - Язык: русский или английский — не смешивать в одном коммите.
57
+
58
+ ---
59
+
60
+ ## Когда запускать линтер
61
+
62
+ **Вручную запускать не нужно.** Линтер запускается автоматически при `git commit`:
63
+
64
+ 1. `husky` перехватывает коммит.
65
+ 2. `lint-staged` запускает на staged-файлах:
66
+ - `eslint --fix` — автоисправление ESLint-ошибок
67
+ - `prettier --write` — форматирование кода
68
+ 3. Исправленные файлы добавляются обратно в staging.
69
+
70
+ **Если `lint-staged` упал:**
71
+ - Прочитай ошибку — это ESLint-нарушение, которое нельзя автофиксировать.
72
+ - Исправь вручную.
73
+ - Пере-stage: `git add <files>`.
74
+ - Повтори коммит.
75
+
76
+ **Ручной запуск (если нужно проверить до коммита):**
77
+ ```bash
78
+ npx eslint --fix src/components/Button/Button.tsx
79
+ npx prettier --write src/components/Button/Button.tsx
80
+ ```
81
+
82
+ ---
83
+
84
+ ## Что не коммитить
85
+
86
+ | Файл/папка | Причина |
87
+ |---|---|
88
+ | `__screenshots__/` | Только из Docker/CI. Если нужно — подтвердить в pre-commit hook |
89
+ | `.mcp.json` | Персональный токен Figma — в `.gitignore` |
90
+ | `.env.local` | Секреты — в `.gitignore` |
91
+ | `node_modules/`, `dist/`, `storybook-static/` | В `.gitignore` |
92
+
93
+ Если в ходе работы появились новые локальные, временные, генерируемые или
94
+ машино-специфичные файлы:
95
+ - проверь `git status`, не попали ли они в untracked/staged
96
+ - если такие файлы не должны храниться в репозитории, добавь подходящее правило в `.gitignore`
97
+ - не коммить подобные файлы "на всякий случай"
98
+
99
+ ---
100
+
101
+ ## Когда коммитить и пушить
102
+
103
+ **Агент не создаёт коммиты самостоятельно.** После завершения задачи — остановиться и показать результат разработчику. Коммит делается только по явной просьбе.
104
+
105
+ **Агент не пушит ветку самостоятельно.** Пуш — только по явной просьбе разработчика.
106
+
107
+ ---
108
+
109
+ ## PR-воркфлоу
110
+
111
+ **Агент пушит ветку — разработчик создаёт PR.**
112
+
113
+ ```bash
114
+ git push -u origin TRIPLEX-XXX-feature-name
115
+ ```
116
+
117
+ После пуша разработчик сам открывает PR через GitHub UI или `gh pr create`.
118
+
119
+ **Исключение:** если разработчик явно просит агента создать PR, используй:
120
+
121
+ ```bash
122
+ gh pr create \
123
+ --title "TRIPLEX-XXX Краткое описание" \
124
+ --body "## Что сделано\n- ...\n\n## Как проверить\n- ..."
125
+ ```
126
+
127
+ ---
128
+
129
+ ## Release notes
130
+
131
+ При добавлении или изменении публичного поведения компонента — обнови файл release notes текущей версии:
132
+
133
+ ```
134
+ stories/release-notes/v1/<текущая версия>.mdx
135
+ ```
136
+
137
+ **Что писать:**
138
+
139
+ - Новый prop: «Добавлено свойство `X` для ...»
140
+ - Изменение поведения: «Изменён/Исправлен ...»
141
+ - Удалённый prop (breaking change): выноси в секцию `<Heading>Ломающие изменения</Heading>`
142
+
143
+ **Формат записи:**
144
+
145
+ ```mdx
146
+ **ComponentName**
147
+
148
+ - Добавлено свойство `propName` для описания.
149
+ ```
150
+
151
+ Компоненты внутри секции — в алфавитном порядке.
152
+
153
+ Не нужно добавлять release notes для:
154
+ - изменений только в stories/тестах/документации
155
+ - рефакторинга без изменения публичного API
156
+
157
+ ---
158
+
159
+ ## Чек-лист перед пушем
160
+
161
+ - [ ] Линтер проходит (автоматически при коммите)
162
+ - [ ] Unit-тесты проходят: `npm run test-unit`
163
+ - [ ] Нет случайно добавленных файлов (`git status`)
164
+ - [ ] Для новых локальных/временных/генерируемых файлов проверено, не нужно ли добавить правило в `.gitignore`
165
+ - [ ] Нет скриншотов из macOS в `__screenshots__/`
166
+ - [ ] Release notes обновлены (если изменился публичный API компонента)
@@ -0,0 +1,277 @@
1
+ # Triplex-Next: Контекст для AI-агентов
2
+
3
+ Этот файл — главная точка входа в контекст дизайн-системы для любого AI-агента.
4
+ Читай его полностью перед тем, как вносить изменения в компоненты.
5
+
6
+ ---
7
+
8
+ ## Что такое Triplex-Next
9
+
10
+ React-библиотека компонентов дизайн-системы.
11
+ Пакет: `@sberbusiness/triplex-next`.
12
+ Основная линия разработки: `main` → v1.x на React 18 + TypeScript strict.
13
+ Поддерживаемая legacy-линия: `release-0` → v0.x на React 17, синхронизируется мейнтейнерами.
14
+
15
+ **Основной сценарий работы агента:** добавить новый prop или вариант к существующему компоненту по описанию и/или макету из Figma.
16
+
17
+ ---
18
+
19
+ ## Стек
20
+
21
+ | Слой | Технология |
22
+ |---|---|
23
+ | Компоненты | React 18/17, TypeScript 5 (strict) |
24
+ | Стили | LESS CSS Modules (`.module.less`) |
25
+ | Дизайн-токены | CSS-переменные, генерируются в `src/generated/` |
26
+ | Сборка | Vite, ES-модули only |
27
+ | Документация | Storybook 9 |
28
+ | Unit-тесты | Vitest + Testing Library |
29
+ | Visual regression | Storybook test-runner + jest-image-snapshot |
30
+ | E2E | Playwright |
31
+
32
+ ---
33
+
34
+ ## Структура компонента
35
+
36
+ Каждый компонент живёт в `src/components/{ComponentName}/` и обычно содержит:
37
+
38
+ ```
39
+ src/components/Button/
40
+ ├── Button.tsx # Основной компонент
41
+ ├── ButtonBase.tsx # Базовый элемент (опционально)
42
+ ├── ButtonIcon.tsx # Субкомпонент (опционально)
43
+ ├── enums.ts # Enum'ы, специфичные для компонента
44
+ ├── index.ts # Barrel export — ОБЯЗАТЕЛЕН
45
+ ├── types.ts # Часто есть, если типы вынесены отдельно
46
+ ├── styles/
47
+ │ ├── Button.module.less # Базовые стили
48
+ │ └── ButtonGeneral.module.less # Стили по теме/варианту
49
+ ├── __tests__/
50
+ │ └── Button.test.tsx # Unit-тесты
51
+ └── Button-AI.md # Документация для AI-агентов (если компонент уже задокументирован)
52
+ ```
53
+
54
+ Истории (stories) хранятся отдельно. В репозитории встречаются как flat-path файлы
55
+ (`stories/Badge.stories.tsx`), так и сгруппированные (`stories/Buttons/Button.stories.tsx`).
56
+ Для новых или существенно переписанных stories используй modern pattern из
57
+ `docs/ai/stories-guide.md`.
58
+
59
+ ---
60
+
61
+ ## Соглашения по именованию
62
+
63
+ | Сущность | Префикс | Пример |
64
+ |---|---|---|
65
+ | Интерфейс | `I` | `IButtonGeneralProps` |
66
+ | Union type | `T` | `TButtonProps` |
67
+ | Enum | `E` | `EButtonTheme` |
68
+ | Enum в файле | `enums.ts` в папке компонента | `Button/enums.ts` |
69
+ | LESS класс | camelCase | `styles.secondaryLight` |
70
+
71
+ ---
72
+
73
+ ## Дизайн-токены (CSS-переменные)
74
+
75
+ Паттерн именования:
76
+ ```
77
+ --triplex-next-{Component}-{Variant}_{Property}_{State}
78
+ ```
79
+
80
+ Примеры:
81
+ ```
82
+ --triplex-next-Button-General_Background_Default
83
+ --triplex-next-Button-General_Color_Hover
84
+ --triplex-next-Button-Secondary_Shadow_Focus
85
+ --triplex-next-Button-Danger_Background_Disabled
86
+ ```
87
+
88
+ **Состояния:** `Default`, `Hover`, `Active`, `Focus`, `Disabled`
89
+ **Свойства:** `Background`, `Color`, `Shadow`, `Border`
90
+
91
+ Токены генерируются в `src/generated/themesCssVariables.css`. Не редактируй этот файл вручную.
92
+
93
+ Если добавляешь новое визуальное состояние — нужен новый токен. Имя токена согласуй с дизайнером в Figma.
94
+
95
+ ---
96
+
97
+ ## Документация конвенций
98
+
99
+ Детальные правила вынесены в отдельные файлы:
100
+
101
+ | Тема | Файл |
102
+ |---|---|
103
+ | Codestyle (TypeScript, React, LESS, принципы) | `docs/ai/codestyle.md` |
104
+ | Тестирование (unit, visual, e2e) | `docs/ai/tests.md` |
105
+ | Stories (структура, примеры, чек-лист) | `docs/ai/stories-guide.md` |
106
+ | Коммиты, ветки, PR-воркфлоу | `docs/ai/commits.md` |
107
+
108
+ `docs/ai/codestyle.md` — краткий канонический список обязательных правил.
109
+ Если формулировки в entrypoint-файлах расходятся, ориентируйся на него и на
110
+ профильный подробный гайд.
111
+
112
+ ---
113
+
114
+ ## Приоритет источников
115
+
116
+ Если инструкции расходятся, ориентируйся на них в таком порядке:
117
+
118
+ 1. `src/components/{ComponentName}/{ComponentName}-AI.md` для конкретного компонента, если файл существует
119
+ 2. `docs/ai/codestyle.md`
120
+ 3. Профильный подробный гайд по зоне изменений (`codestyle.md`, `tests.md`, `stories-guide.md`, `commits.md`)
121
+ 4. Этот файл (`docs/ai/CONTEXT.md`)
122
+ 5. Локальный паттерн исходников компонента, stories и тестов
123
+
124
+ Не предполагай, что у каждого компонента уже есть AI-документация. Если файла
125
+ `{ComponentName}-AI.md` нет, ориентируйся на код, stories, тесты и общие правила
126
+ репозитория.
127
+
128
+ ---
129
+
130
+ ## Как добавить новый prop к существующему компоненту
131
+
132
+ ### 1. Определи, в каком интерфейсе добавлять
133
+
134
+ - Если prop нужен только для одной темы — добавь в соответствующий интерфейс (`IButtonGeneralProps`)
135
+ - Если для всех тем — добавь в каждый интерфейс темы и в базовый интерфейс
136
+ - Обнови union type (`TButtonProps`) при необходимости
137
+
138
+ ### 2. Добавь prop в TypeScript-интерфейс
139
+
140
+ ```typescript
141
+ export interface IButtonGeneralProps extends IButtonBaseProps {
142
+ theme: EButtonTheme.GENERAL;
143
+ size: EComponentSize;
144
+ // ... existing props
145
+ newProp?: string; // добавь JSDoc если поведение нетривиально
146
+ }
147
+ ```
148
+
149
+ ### 3. Используй prop в компоненте
150
+
151
+ ```typescript
152
+ // Деструктурируй из пропсов:
153
+ const { theme, size, newProp, className, ...rest } = props;
154
+
155
+ // Применяй через clsx:
156
+ <button
157
+ className={clsx(styles.button, styles[size], { [styles.newVariant]: newProp === 'variant' }, className)}
158
+ {...rest}
159
+ >
160
+ ```
161
+
162
+ ### 4. Добавь стили в LESS-модуль
163
+
164
+ ```less
165
+ // В Button.module.less или в новый файл для варианта:
166
+ .button {
167
+ &.newVariant {
168
+ // используй существующие CSS-переменные или новые токены
169
+ background: var(--triplex-next-Button-General_Background_NewVariant);
170
+ }
171
+ }
172
+ ```
173
+
174
+ ### 5. Обнови Storybook story
175
+
176
+ В существующем story-файле компонента:
177
+ - Добавь prop в `args` и `argTypes` Playground-стори
178
+ - Если prop имеет визуальные варианты — добавь named story (`Sizes`, `Themes` и т.д.)
179
+ - Если story уже использует `examples/` + `?raw`, сохрани этот modern pattern
180
+ - Если story legacy, не рефакторь весь файл только ради миграции структуры без отдельной задачи
181
+ - Подробно: `docs/ai/stories-guide.md` → раздел "Что обновлять при добавлении нового prop"
182
+
183
+ ### 6. Обнови тесты
184
+
185
+ В `src/components/{ComponentName}/__tests__/{ComponentName}.test.tsx`:
186
+ - Добавь тест-кейс на рендеринг нового prop
187
+ - Проверь CSS-класс, атрибут или текст
188
+ - Следуй существующему паттерну тестов в файле
189
+
190
+ ---
191
+
192
+ ## Инварианты — что НЕЛЬЗЯ менять без обсуждения
193
+
194
+ 1. **`forwardRef`** — обязателен на всех компонентах. Не убирай.
195
+ 2. **Публичный API** — имена props, их типы, enum-значения. Это breaking change → мажорная версия.
196
+ 3. **`index.ts` barrel exports** — всё, что было экспортировано, должно остаться экспортированным.
197
+ 4. **CSS-переменные токенов** — переименование ломает темизацию у потребителей библиотеки.
198
+ 5. **Имена LESS-классов**, которые могут использоваться снаружи — согласуй перед изменением.
199
+ 6. **Корневой DOM-элемент, ref-target и accessibility-контракт** публичного компонента — не менять без причины и проверки.
200
+ 7. **Story ids**, на которые опираются e2e/visual тесты, не переименовывать без синхронного обновления тестов.
201
+
202
+ ---
203
+
204
+ ## Как читать существующий код
205
+
206
+ **Стили:** LESS-классы импортируются как объект `styles`:
207
+ ```typescript
208
+ import styles from './styles/Button.module.less';
209
+ // Использование:
210
+ className={styles.button}
211
+ className={clsx(styles.button, styles.general, { [styles.loading]: loading })}
212
+ ```
213
+
214
+ **Утилиты:**
215
+ - `clsx` — объединение className с условиями
216
+ - `React.useId()` — уникальные ID для aria-атрибутов (предпочтительно в React 18, корректно работает с SSR)
217
+ - `lodash-es/uniqueId` — генерация уникальных ID вне компонентного контекста (когда `useId` недоступен)
218
+
219
+ **Паттерн миграции:**
220
+ - В репозитории сосуществуют legacy и modern stories/tests.
221
+ - Для небольших правок следуй локальному паттерну файла.
222
+ - Для новых компонентов и больших переписок используй modern conventions из `stories-guide.md` и `tests.md`.
223
+
224
+ **Стандартные зависимости компонентов:**
225
+ - `src/enums/EComponentSize` — размеры SM | MD | LG (общий для всех компонентов)
226
+ - `src/components/Loader` — спиннер загрузки
227
+
228
+ ---
229
+
230
+ ## Figma и MCP
231
+
232
+ Не у каждого компонента уже есть `{ComponentName}-AI.md`. Если компонент
233
+ задокументирован, Figma-метаданные лежат в frontmatter этого файла.
234
+
235
+ Формат frontmatter:
236
+ - `figma-node` — значение параметра `node-id` из URL Figma (например, `1-328`)
237
+ - `figma-file` — URL файла / design-ссылка на Figma-файл
238
+
239
+ Если в вашем окружении настроен Figma MCP или другой интеграционный инструмент:
240
+ 1. Возьми `figma-node` из frontmatter компонента
241
+ 2. Возьми `figma-file` из frontmatter компонента, если инструменту нужен file key или URL
242
+ 3. Используй их для получения дизайн-спецификации
243
+ 4. Сравни с текущим кодом и внеси нужные изменения
244
+
245
+ Если Figma-метаданные для компонента отсутствуют, не выдумывай их: попроси
246
+ ссылку у разработчика или работай по текстовому описанию/скриншоту.
247
+
248
+ Настройка MCP: см. `docs/ai/ROADMAP.md` → секция "Figma MCP Setup".
249
+
250
+ ---
251
+
252
+ ## Минимальная проверка перед завершением задачи
253
+
254
+ - Правки документации и конфигов: проверь ссылки, команды, примеры кода и согласованность между файлами.
255
+ - Правки компонентов и логики: запусти `npx tsc --noEmit` для проверки типов затронутых файлов и по возможности запусти focused unit test, если затронуто публичное поведение.
256
+ - Правки stories с визуальным эффектом: проверь, что состояние покрыто существующей story или новой `Visual tests` story.
257
+ - Правки accessibility, focus management, keyboard navigation и overlay-поведения: добавь или обнови точечный автотест, если это уместно.
258
+ - Если релевантная проверка не запускалась, явно сообщи об этом в финальном отчёте.
259
+
260
+ ---
261
+
262
+ ## Навигация по документации компонентов
263
+
264
+ Если компонент уже задокументирован, его AI-документация лежит в:
265
+ `src/components/{ComponentName}/{ComponentName}-AI.md`
266
+
267
+ Пример: `src/components/Button/Button-AI.md`
268
+
269
+ Шаблон для новых компонентов: `docs/ai/template-AI.md`
270
+
271
+ ---
272
+
273
+ ## Внешние ресурсы
274
+
275
+ - Документация для разработчиков и дизайнеров: https://triplex-design.ru/next/ru/Web/Components
276
+ - Storybook (локально): `npm run storybook` → http://localhost:6006
277
+ - Истории: `stories/` в корне репозитория