Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
bb4cf3f
feat: добавлен генератор дизайн-токенов
fabulous-unicorn Jul 30, 2026
e52c2f7
ci: добавлены проверки дизайн-токенов
fabulous-unicorn Jul 30, 2026
b49dc2f
feat: добавлены и подключены дизайн-токены
fabulous-unicorn Jul 30, 2026
aa8281b
fix: исправлена нормализация радиусов в токенах
fabulous-unicorn Jul 30, 2026
88c7c36
fix: доработан генератор дизайн-токенов
fabulous-unicorn Jul 31, 2026
54915e6
chore: исправлены команды проверки дизайн-токенов
fabulous-unicorn Jul 31, 2026
158c675
feat: добавлена поддержка focusRing-токенов
fabulous-unicorn Jul 31, 2026
4f7b4e3
feat: добавлена поддержка токенов анимации
fabulous-unicorn Jul 31, 2026
acc97ec
feat: добавлена генерация токенов шрифтов
fabulous-unicorn Aug 3, 2026
7782938
refactor(tokens): разделены semantic-токены
fabulous-unicorn Aug 4, 2026
75ac64a
refactor(tokens): component-токены скрыты из публичного API
fabulous-unicorn Aug 4, 2026
5d374f0
docs: актуализирована документация тем и токенов
fabulous-unicorn Aug 4, 2026
d1b0ee9
refactor(tokens): объединены проверка и форматирование генерации
fabulous-unicorn Aug 4, 2026
34f1785
feat(Theme): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
83c6b2b
feat(Accordion): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
71d9344
feat(Avatar): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
63f1a30
feat(Badge): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
693bf3e
feat(Button): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
16088ba
feat(Checkbox): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
c7b0ea3
feat(Chip): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
9d875b5
feat(Dialog): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
8e51db6
feat(Divider): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
89c0026
feat(InputSwitch): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
0703aca
feat(Input): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
713d527
feat(List): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
a866630
feat(MenuItem): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
10a06d2
feat(Message): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
c4b629c
feat(ProgressBar): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
82ef79e
feat(ProgressSpinner): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
30c3968
feat(RadioButton): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
68941e1
feat(Rating): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
0c0eae4
feat(SelectButton): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
40b4ce8
feat(Skeleton): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
cd7a12d
feat(Slider): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
fd292d0
feat(Tabs): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
5b92e5a
feat(Tag): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
7a7c756
feat(Timer): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
215f683
feat(ToggleButton): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
c10a064
feat(Typography): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
8784fb1
refactor(theme): добавлен слой legacy-совместимости
fabulous-unicorn Aug 4, 2026
b6d6beb
chore: release v1.1.0-beta.0
fabulous-unicorn Aug 6, 2026
1183436
fix(tokens): обводка Avatar переведена на inverse
Aug 12, 2026
965d974
fix(tokens): цвет контента Divider переведён на fg.muted
Aug 12, 2026
0d3ca26
fix(Slider): лейблы значений берут цвет из темы
Aug 12, 2026
fbeb570
fix(tokens): иконка checked-состояния Checkbox переведена на inverse
Aug 12, 2026
b60dd59
fix(tokens): скругление Dialog переведено с max на borderRadius.500
Aug 12, 2026
09ca74c
fix(Tabs): активная линия выровнена с линией таб-листа
Aug 12, 2026
b92f168
fix(tokens): фон трека InputSwitch в тёмной теме приведён к макету
Aug 12, 2026
3b20ea9
fix(tokens): фон ручки InputSwitch переведён на semantic-роли по макету
Aug 12, 2026
db6ce3c
fix(InputSwitch): ручка в disabled берёт цвет из токена
Aug 12, 2026
b8c4978
docs: добавлен навык UI Kit Figma
fabulous-unicorn Aug 13, 2026
4365615
docs(skill): запрещено изменять файлы токенов
fabulous-unicorn Aug 14, 2026
16f40c3
docs: закреплён русский язык сообщений коммитов
fabulous-unicorn Aug 13, 2026
c34942a
chore(tokens): обновлены токены компонентов
fabulous-unicorn Aug 13, 2026
5b59cba
feat(badge): добавлены размеры Badge
fabulous-unicorn Aug 13, 2026
dc2dc08
fix(button): исправлено центрирование и отображение вариантов
fabulous-unicorn Aug 13, 2026
df643d9
fix(list): исправлено отображение базовой стори
fabulous-unicorn Aug 13, 2026
e2ef45c
docs: обновлены ссылки компонентов на Figma
fabulous-unicorn Aug 14, 2026
8a16dfa
refactor(stories): изменённые стори переведены на JSX
fabulous-unicorn Aug 14, 2026
8f18c62
fix(styles): заменён устаревший absoluteFillObject
fabulous-unicorn Aug 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 83 additions & 0 deletions .agents/skills/ui-kit-figma/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
---
name: ui-kit-figma
description: >
Implement or sync React Native Prime UI Kit components from Figma
specifications. Use when a Figma node is provided, or when component variants,
local theme-token bindings, documentation links, or Storybook states must be
aligned with Figma. This is read-only toward Figma.
---

# UI Kit Figma

Translate Figma component specifications into this repository's public API,
Unistyles implementation, local tokens, tests, and Storybook conventions. Use
the Figma design-to-code skill for tool workflow and `ui-kit-testing` when tests
change.

## Workflow

1. Inspect the component source, public types and barrels, nearest tests and
stories, and relevant files under `src/theme/tokens`.
2. Call Figma design context on the exact component or variant frame. If a page
or section returns sparse context, use metadata only to locate the inner
frame, then call design context on that frame.
3. Read variable definitions for the target frame and map each relevant Figma
variable to the existing runtime theme path.
4. Implement the smallest compatible source change, following the nearest
component pattern and root `AGENTS.md`.
5. Update focused behavioral tests and representative Storybook scenarios when
the public contract or material variants change.
6. Update the component documentation link when its exact Figma frame is known.
7. Run the verification required by root `AGENTS.md`.

## Token Mapping

- Treat Figma variable bindings as the source of token intent. Treat resolved
pixel and color values as inspection data, not values to copy into source.
- Treat `design-tokens/input/tokens.json` as the latest immutable export from
the designer. Never edit it during component or Figma synchronization work.
- Treat `src/theme/tokens/**` as immutable generated output. Never edit or
regenerate these files during component or Figma synchronization work.
- Reuse tokens from `src/theme/tokens`; do not hardcode a resolved value when a
matching local token exists.
- Prefer a component token when Figma explicitly binds the property to that
component variable. Use a semantic token only when the design intent is
semantic or no component binding exists.
- If an exact Figma value has no matching existing token, do not hardcode it,
change token files, or silently substitute an approximate token. Report the
gap and explain which part cannot be matched exactly with the current tokens.
- Apply severity, size, state, and theme bindings to every affected layer, not
only the outer container. Check text, background, border, icon, and shape
tokens independently.

## Documentation Links

- Link a component to its exact Figma component or variant frame, not merely the
file, page, or broad section containing it.
- In a bulk link update, inventory the component documentation first. Update
only confidently matched frames and keep unresolved components explicit.
- Before a requested commit, report updated links first and unresolved links
second. Commit only when the user explicitly asks.

## Storybook

- Model independently meaningful usage scenarios and interactions. Use controls
for simple variant axes that do not need dedicated documentation.
- Create separate stories or a composed comparison only when the scenario or
comparison itself adds documentation value. Do not impose a fixed number or
layout of stories per component.
- Keep every story's props valid for discriminated unions. Do not expose a
control that can create an invalid prop combination.
- Hide non-editable or internally composed props with
`parameters.controls.exclude`. Do not use `control: false` with React Native
on-device controls because it renders as `Invalid type`.
- Prefer `.tsx` when a story needs JSX composition. If an existing `.ts` file
must remain `.ts`, use `createElement` and construct typed discriminated props
before passing them to the component.

## Tests

Use `ui-kit-testing`. Assert rendered data, interaction logic, callbacks,
controlled behavior, accessibility, and public contracts. Do not assert exact
theme-token values, dimensions, colors, or style objects to prove a Figma
mapping.
6 changes: 6 additions & 0 deletions .agents/skills/ui-kit-figma/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
interface:
display_name: 'UI Kit Figma'
short_description: 'Sync UI Kit components from Figma tokens'
default_prompt:
'Use $ui-kit-figma to implement or sync a UI Kit component from its Figma
specification.'
18 changes: 13 additions & 5 deletions .agents/skills/ui-kit-testing/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@
name: ui-kit-testing
description: >
Write or refactor React Native Prime UI Kit Jest and RNTL tests for
components, hooks, controlled behavior, timers, animations, snapshots,
accessibility, and public TypeScript contracts. Do not use for whole-suite
audits
components, hooks, controlled behavior, timers, animations, accessibility, and
public TypeScript contracts. Do not use for whole-suite audits
---

# UI Kit Testing
Expand All @@ -18,8 +17,8 @@ inspect the implementation and nearest tests before choosing helpers or mocks.
1. Search existing tests and Jest setup before adding a helper, mock, provider,
timer utility, or console suppression
2. Load only the references required by the test:
- test cases, render helpers, selectors, accessibility, snapshots, types, or
naming: `references/test-authoring.md`
- test cases, render helpers, selectors, accessibility, types, or naming:
`references/test-authoring.md`
- child, external, native, animated, or console mocks:
`references/mocks-and-native-ui.md`
- timers, debounce, animations, delayed updates, or manual promises:
Expand All @@ -34,6 +33,15 @@ inspect the implementation and nearest tests before choosing helpers or mocks.
5. Before finishing, remove avoidable mocks, oversized helpers, redundant waits,
and assertions that do not prove the public contract

## Assertion Boundaries

- Assert rendered data, presence or absence, callbacks, controlled behavior,
accessibility, and public contracts
- Do not assert exact colors, dimensions, theme-token values, or style objects
- Do not add or update snapshots to verify component appearance or structure.
Replace affected visual snapshots with explicit behavioral assertions
- Use the normal build to validate public TypeScript contracts and token access

## Verification

Run focused Jest and the applicable build or lint checks from `AGENTS.md`.
13 changes: 8 additions & 5 deletions .agents/skills/ui-kit-testing/references/test-authoring.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# Test Authoring

Read this reference when creating or changing test cases, render helpers,
selectors, accessibility assertions, snapshots, public types, or test names.
selectors, accessibility assertions, public types, test names, or replacing
snapshots with behavioral assertions.

## Placement And Helpers

Expand Down Expand Up @@ -37,7 +38,9 @@ normal build.

## Snapshots

Snapshot only small, stable output whose complete structure is the behavior.
Prefer explicit assertions for interaction, state, accessibility, layout, and
animations. Update snapshots only for intentional UI changes. Do not snapshot
mocked child trees, large style objects, or ordinary prop forwarding.
Do not add or update snapshots for component appearance, structure, styles, or
theme-token values. When a change invalidates a visual snapshot, replace it with
explicit assertions for rendered data, presence or absence, interaction,
controlled state, callbacks, or accessibility. Use a snapshot only when the user
explicitly requests one and the contract cannot be stated more clearly with
behavioral assertions.
12 changes: 10 additions & 2 deletions .github/actions/typecheck/action.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: Run Typecheck
description: Run typecheck
name: Run Typechecks
description: Typecheck the project and check generated tokens

runs:
using: composite
Expand All @@ -9,3 +9,11 @@ runs:
- name: Run Typecheck
shell: bash
run: yarn tsc --noEmit

- name: Typecheck Token Generator
shell: bash
run: yarn tokens:typecheck

- name: Check Generated Tokens
shell: bash
run: yarn tokens:check
13 changes: 10 additions & 3 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,11 @@ Use only top-level skills under `.agents/skills/`; nested `vendor/` skills are
source material, not runtime instructions.

- Use `$ui-kit-testing` to write or refactor focused Jest/RNTL tests, including
controlled behavior, accessibility, mocks, timers, animations, snapshots, and
public TypeScript contracts.
controlled behavior, accessibility, mocks, timers, animations, and public
TypeScript contracts.
- Use `$ui-kit-figma` to implement or sync components from Figma, map design
variables to local theme tokens, and align material variants and Storybook
scenarios.
- Use `$ui-kit-review` for diffs and local changes or explicit architecture,
onboarding, test-suite, debt, health, agent-instruction, and diagnostic
audits. It is read-only unless the user requests fixes.
Expand All @@ -33,6 +36,9 @@ Do not load every skill preemptively; use the one matching the request.
controlling prop changes.
- In new source and test files, use `UpperPascalCase` `testID` values. Existing
IDs are compatibility-sensitive; do not flag or rename them only for format.
- Story files containing JSX must use the `.stories.tsx` extension and JSX. Do
not use `createElement` to keep them as `.stories.ts`; reserve `.stories.ts`
for stories without JSX.
- A new public component or material variant normally needs typed source, a
barrel export, focused tests, and representative Storybook states.

Expand All @@ -49,7 +55,8 @@ Do not load every skill preemptively; use the one matching the request.
## Git

Do not commit or push unless explicitly asked. Use Conventional Commits for
requested commits.
requested commits. Keep the conventional type and optional scope in English;
write the commit subject in Russian.

## Safety

Expand Down
51 changes: 51 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,57 @@

### ♻️ Рефакторинг

## [1.1.0-beta.0](https://github.com/cdek-it/react-native-ui-kit/compare/v1.0.3...v1.1.0-beta.0) (2026-08-06)

### 🚀 Новый функционал

* **Accordion:** подключены сгенерированные токены ([1f05446](https://github.com/cdek-it/react-native-ui-kit/commit/1f05446129b7a224d6417cf700e5ea75f9de196a))
* **Avatar:** подключены сгенерированные токены ([da7550e](https://github.com/cdek-it/react-native-ui-kit/commit/da7550e4be7bd49f900d17ebe84d10ab90764cb8))
* **Badge:** подключены сгенерированные токены ([5f534f3](https://github.com/cdek-it/react-native-ui-kit/commit/5f534f326fe44c53b6211ca8c4518540cd160baf))
* **Button:** подключены сгенерированные токены ([5a619a7](https://github.com/cdek-it/react-native-ui-kit/commit/5a619a7670d0eb56e7591e135c932cd41d7c8a01))
* **Checkbox:** подключены сгенерированные токены ([706d49f](https://github.com/cdek-it/react-native-ui-kit/commit/706d49fc9e25773dab1cd063d767391b2d6495ac))
* **Chip:** подключены сгенерированные токены ([7940416](https://github.com/cdek-it/react-native-ui-kit/commit/7940416299438daa6b6cf67f157b2297514bbe30))
* **Dialog:** подключены сгенерированные токены ([f9acf57](https://github.com/cdek-it/react-native-ui-kit/commit/f9acf579c693ebc7ca62d8d41845eb3369b2e7d2))
* **Divider:** подключены сгенерированные токены ([55d672f](https://github.com/cdek-it/react-native-ui-kit/commit/55d672f25676d15ac2d8110a554c166730aa602f))
* **InputSwitch:** подключены сгенерированные токены ([ec5030f](https://github.com/cdek-it/react-native-ui-kit/commit/ec5030fce28a5de6385df38f3564c8c372b32d7d))
* **Input:** подключены сгенерированные токены ([9e63339](https://github.com/cdek-it/react-native-ui-kit/commit/9e63339502e7ef6e377178b22c93b4bcffd60146))
* **List:** подключены сгенерированные токены ([1c58202](https://github.com/cdek-it/react-native-ui-kit/commit/1c58202e36086865b9ee5164bd235c4a3fb099e4))
* **MenuItem:** подключены сгенерированные токены ([74355e6](https://github.com/cdek-it/react-native-ui-kit/commit/74355e666247e0205aacb55f2f6cf2a6552c9a9a))
* **Message:** подключены сгенерированные токены ([bb9c8de](https://github.com/cdek-it/react-native-ui-kit/commit/bb9c8de54fd30a6c69eef9c3e9716876939f465e))
* **ProgressBar:** подключены сгенерированные токены ([1628475](https://github.com/cdek-it/react-native-ui-kit/commit/1628475a30b7bc16842b34b14c2998b2612805cb))
* **ProgressSpinner:** подключены сгенерированные токены ([04fe461](https://github.com/cdek-it/react-native-ui-kit/commit/04fe46136a8ddf3f62c231641ff2ace6dbc85dfe))
* **RadioButton:** подключены сгенерированные токены ([32bc17f](https://github.com/cdek-it/react-native-ui-kit/commit/32bc17fb083c36e4c830451e125fcd4bb6177643))
* **Rating:** подключены сгенерированные токены ([1219e43](https://github.com/cdek-it/react-native-ui-kit/commit/1219e43a9068d081a19bcd96021d3d99b36e0f81))
* **SelectButton:** подключены сгенерированные токены ([5e170ba](https://github.com/cdek-it/react-native-ui-kit/commit/5e170bae3e97cfe7f3604bc819c13f8d00602358))
* **Skeleton:** подключены сгенерированные токены ([552b857](https://github.com/cdek-it/react-native-ui-kit/commit/552b8572912884b994bfe087c296a86d073868f3))
* **Slider:** подключены сгенерированные токены ([1be33c0](https://github.com/cdek-it/react-native-ui-kit/commit/1be33c03f156b013228064db2dd2151e08f9f5b1))
* **Tabs:** подключены сгенерированные токены ([42bf812](https://github.com/cdek-it/react-native-ui-kit/commit/42bf812b09da68e6023c3029749ff6f435007ea5))
* **Tag:** подключены сгенерированные токены ([6cfc335](https://github.com/cdek-it/react-native-ui-kit/commit/6cfc335f6e06373f320b8d4d30865a30dd75aa05))
* **Theme:** подключены сгенерированные токены ([8e5a257](https://github.com/cdek-it/react-native-ui-kit/commit/8e5a257cc2c1d90e27ab4e591a9a0ed969d2619b))
* **Timer:** подключены сгенерированные токены ([0b74c4a](https://github.com/cdek-it/react-native-ui-kit/commit/0b74c4a5b5f030d3797eb4b29e48404af2f2ce3d))
* **ToggleButton:** подключены сгенерированные токены ([82a4f40](https://github.com/cdek-it/react-native-ui-kit/commit/82a4f409fdda0641dcf001e2704850808e897def))
* **Typography:** подключены сгенерированные токены ([b5e0ca1](https://github.com/cdek-it/react-native-ui-kit/commit/b5e0ca14ae4a9e77a2efff4e654dc2c937d223a2))
* добавлен генератор дизайн-токенов ([83048a7](https://github.com/cdek-it/react-native-ui-kit/commit/83048a7bac41a41b516490aab4423f47b2fcd1e5))
* добавлена генерация токенов шрифтов ([6838bb3](https://github.com/cdek-it/react-native-ui-kit/commit/6838bb37d6e25e2fd7911a55d71ba880648d1cbb))
* добавлена поддержка focusRing-токенов ([566f0ec](https://github.com/cdek-it/react-native-ui-kit/commit/566f0ecf8b3fe7d0a57f97da04b609abb198309f))
* добавлена поддержка токенов анимации ([6e81a29](https://github.com/cdek-it/react-native-ui-kit/commit/6e81a2951d00266371a3e4e0060e6139f541414b))
* добавлены и подключены дизайн-токены ([a6ac14d](https://github.com/cdek-it/react-native-ui-kit/commit/a6ac14dceedd5d29de808896349e9606fce75548))

### 🐛 Исправления багов

* доработан генератор дизайн-токенов ([d5c0ed5](https://github.com/cdek-it/react-native-ui-kit/commit/d5c0ed5be85c5cf6e403132dc1d0e48ef597f191))
* исправлена нормализация радиусов в токенах ([b1b2b19](https://github.com/cdek-it/react-native-ui-kit/commit/b1b2b197a0e18e9bb3714597856a4ee1d62df2c3))

### 🧹 Другое

* актуализирована документация тем и токенов ([0206449](https://github.com/cdek-it/react-native-ui-kit/commit/020644980ee011cacfcbaf23b2ebee9a5af9f34b))

### ♻️ Рефакторинг

* **theme:** добавлен слой legacy-совместимости ([d55fbde](https://github.com/cdek-it/react-native-ui-kit/commit/d55fbde0f0d058b09bb152d696580845a76d68f2))
* **tokens:** component-токены скрыты из публичного API ([5c4e4bd](https://github.com/cdek-it/react-native-ui-kit/commit/5c4e4bd087d2b407c498f5100a72a90b1f54b69a))
* **tokens:** объединены проверка и форматирование генерации ([f60cbd6](https://github.com/cdek-it/react-native-ui-kit/commit/f60cbd61b01dd4d2d8c79247a191fb8f1ab1f5c6))
* **tokens:** разделены semantic-токены ([8ab1759](https://github.com/cdek-it/react-native-ui-kit/commit/8ab17593587bf96488f9f41a7fae80e395f33431))
* улучшена читаемость конфигурации плагинов ([7e6bba9](https://github.com/cdek-it/react-native-ui-kit/commit/7e6bba95b87d1dc1b3a1fcf2414b6dee91b86c64))

## [1.0.3](https://github.com/cdek-it/react-native-ui-kit/compare/v1.0.2...v1.0.3) (2026-07-30)
Expand Down
Loading
Loading