Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
112 commits
Select commit Hold shift + click to select a range
6afc42a
feat: добавлен генератор дизайн-токенов
fabulous-unicorn Jul 30, 2026
4ba8ef8
ci: добавлены проверки дизайн-токенов
fabulous-unicorn Jul 30, 2026
a32318c
feat: добавлены и подключены дизайн-токены
fabulous-unicorn Jul 30, 2026
62503f8
fix: исправлена нормализация радиусов в токенах
fabulous-unicorn Jul 30, 2026
49298ad
fix: доработан генератор дизайн-токенов
fabulous-unicorn Jul 31, 2026
1a3b45e
chore: исправлены команды проверки дизайн-токенов
fabulous-unicorn Jul 31, 2026
13a885a
feat: добавлена поддержка focusRing-токенов
fabulous-unicorn Jul 31, 2026
1e50c64
feat: добавлена поддержка токенов анимации
fabulous-unicorn Jul 31, 2026
7be9f69
feat: добавлена генерация токенов шрифтов
fabulous-unicorn Aug 3, 2026
9087124
refactor(tokens): разделены semantic-токены
fabulous-unicorn Aug 4, 2026
95aedfe
refactor(tokens): component-токены скрыты из публичного API
fabulous-unicorn Aug 4, 2026
7fb6f02
docs: актуализирована документация тем и токенов
fabulous-unicorn Aug 4, 2026
9e004ca
refactor(tokens): объединены проверка и форматирование генерации
fabulous-unicorn Aug 4, 2026
a9965b4
feat(Theme): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
8c3f763
feat(Accordion): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
164cb7c
feat(Avatar): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
7b8547a
feat(Badge): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
369bfe4
feat(Button): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
7ec92ba
feat(Checkbox): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
0bd3a21
feat(Chip): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
0a1b491
feat(Dialog): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
2ed02ab
feat(Divider): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
222234d
feat(InputSwitch): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
3af0b0e
feat(Input): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
61d78dd
feat(List): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
618185e
feat(MenuItem): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
af5f1ab
feat(Message): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
2e007bb
feat(ProgressBar): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
f76b9ba
feat(ProgressSpinner): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
4494a87
feat(RadioButton): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
9300663
feat(Rating): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
e9ed0da
feat(SelectButton): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
b694483
feat(Skeleton): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
faf0d34
feat(Slider): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
73fa787
feat(Tabs): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
27dafce
feat(Tag): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
0006c35
feat(Timer): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
9beb3ac
feat(ToggleButton): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
d58df8b
feat(Typography): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
a621cd5
refactor(theme): добавлен слой legacy-совместимости
fabulous-unicorn Aug 4, 2026
7b3f545
chore: release v1.1.0-beta.0
fabulous-unicorn Aug 6, 2026
77d329e
fix(tokens): обводка Avatar переведена на inverse
Aug 12, 2026
89aceb8
fix(tokens): цвет контента Divider переведён на fg.muted
Aug 12, 2026
6d73a8e
fix(Slider): лейблы значений берут цвет из темы
Aug 12, 2026
3c79219
fix(tokens): иконка checked-состояния Checkbox переведена на inverse
Aug 12, 2026
9d62f9f
fix(tokens): скругление Dialog переведено с max на borderRadius.500
Aug 12, 2026
f1d4ace
fix(Tabs): активная линия выровнена с линией таб-листа
Aug 12, 2026
e4a3731
fix(tokens): фон трека InputSwitch в тёмной теме приведён к макету
Aug 12, 2026
34a9989
fix(tokens): фон ручки InputSwitch переведён на semantic-роли по макету
Aug 12, 2026
449c65d
fix(InputSwitch): ручка в disabled берёт цвет из токена
Aug 12, 2026
59e2e0b
docs: добавлен навык UI Kit Figma
fabulous-unicorn Aug 13, 2026
eaffb59
docs(skill): запрещено изменять файлы токенов
fabulous-unicorn Aug 14, 2026
83a971f
docs: закреплён русский язык сообщений коммитов
fabulous-unicorn Aug 13, 2026
e9656b8
chore(tokens): обновлены токены компонентов
fabulous-unicorn Aug 13, 2026
4041144
feat(badge): добавлены размеры Badge
fabulous-unicorn Aug 13, 2026
628bf8f
fix(button): исправлено центрирование и отображение вариантов
fabulous-unicorn Aug 13, 2026
266d7e2
fix(list): исправлено отображение базовой стори
fabulous-unicorn Aug 13, 2026
4283c3f
docs: обновлены ссылки компонентов на Figma
fabulous-unicorn Aug 14, 2026
c18da67
refactor(stories): изменённые стори переведены на JSX
fabulous-unicorn Aug 14, 2026
22d55d2
fix(styles): заменён устаревший absoluteFillObject
fabulous-unicorn Aug 14, 2026
c38b6dd
feat(input-otp): скорректировано поведение компонента
fabulous-unicorn Aug 25, 2026
9c79891
fix(input-otp): исправлен повторный ввод после ошибки
fabulous-unicorn Aug 26, 2026
1d4aff6
fix(input-otp): исправлены каретка и сценарий ошибки
fabulous-unicorn Sep 2, 2026
9695b5b
fix(input-otp): синхронизированы стили с макетом
fabulous-unicorn Sep 2, 2026
1b79ff0
fix(tokens): поддержаны неполные цветовые схемы компонентов
fabulous-unicorn Sep 2, 2026
38c7638
chore(tokens): обновлены дизайн-токены
fabulous-unicorn Sep 2, 2026
bf0c2a0
fix(input-otp): синхронизированы состояния ошибки
fabulous-unicorn Sep 2, 2026
83e6de2
fix(input-otp): синхронизированы токены с макетом
fabulous-unicorn Sep 8, 2026
b17aafa
fix(input-otp): исправлено масштабирование и центрирование текста
fabulous-unicorn Sep 11, 2026
eeab5cf
feat(button): обновлён API и поведение кнопок
fabulous-unicorn Oct 2, 2026
f682cd5
refactor(button): разделены оформление и общая логика кнопок
fabulous-unicorn Oct 5, 2026
f997c15
fix(button): синхронизированы размеры и поддержан рост текста
fabulous-unicorn Oct 5, 2026
97bd926
fix(button): сохранена геометрия link при увеличении текста
fabulous-unicorn Oct 6, 2026
4e188c6
fix(button): синхронизированы токены и привязки с Figma
fabulous-unicorn Oct 7, 2026
e5bd53f
feat(badge): добавлены primary, доступность и масштабирование текста
fabulous-unicorn Oct 6, 2026
a1b6168
fix(tokens): обновлён радиус Badge и перегенерированы темы
fabulous-unicorn Oct 6, 2026
6604a10
refactor(badge): стили вынесены в отдельный файл
fabulous-unicorn Oct 6, 2026
7000144
fix(badge): упрощено измерение и исправлено центрирование текста
fabulous-unicorn Oct 6, 2026
2b45c42
fix(tokens): уменьшен радиус Badge до 100
fabulous-unicorn Oct 8, 2026
095f7d7
test: актуализировать снапшоты компонентов для текущих токенов
fabulous-unicorn Oct 13, 2026
4394a17
fix(skeleton): обновлены API, доступность и токены
fabulous-unicorn Oct 19, 2026
586c940
docs(skeleton): добавлена документация компонента
fabulous-unicorn Oct 20, 2026
869e037
fix(storybook): уменьшен шрифт названий пропов
fabulous-unicorn Oct 23, 2026
3325a0c
fix(tokens): синхронизированы токены полей ввода с Figma
fabulous-unicorn Oct 13, 2026
6ff223e
refactor(input-switch): компонент перенесён в отдельную папку
fabulous-unicorn Oct 8, 2026
ccaf8ce
refactor(input-otp): компонент перенесён в отдельную папку
fabulous-unicorn Oct 8, 2026
03e3a59
chore(storybook): упорядочены истории и настройка форматирования
fabulous-unicorn Oct 8, 2026
12fe4b8
refactor(input): вынесены legacy-компоненты и сохранены старые экспорты
fabulous-unicorn Oct 8, 2026
85a5f9d
feat(input): добавлен InputCaption
fabulous-unicorn Oct 12, 2026
4b251df
feat(input): добавлен InputGroupAddon
fabulous-unicorn Oct 12, 2026
fb76513
feat(input): добавлен InputText с новым API
fabulous-unicorn Oct 12, 2026
fb24fef
feat(input): добавлен InputGroup с базовой доступностью
fabulous-unicorn Oct 12, 2026
a449b59
feat(input): добавлен Password с базовой доступностью
fabulous-unicorn Oct 12, 2026
f289d67
fix(input): улучшена доступность полей и подписей
fabulous-unicorn Oct 12, 2026
a305084
fix(input): упрощено озвучивание полей и подписей
fabulous-unicorn Oct 12, 2026
c2f0640
docs(input): добавлена документация компонентов ввода
fabulous-unicorn Oct 13, 2026
645ac2e
fix(input): стабилизированы высота и масштабирование подписей
fabulous-unicorn Oct 19, 2026
dc1f6ad
docs(input): уточнена и упрощена документация полей ввода
fabulous-unicorn Oct 20, 2026
24f1930
fix(input): исправлено отображение плавающего лейбла и привязки токенов
fabulous-unicorn Oct 23, 2026
bb822c4
refactor(input): разделены раскладка поля и оформление кнопок
fabulous-unicorn Oct 23, 2026
a8837e2
feat(tag): обновлены API, иконки и доступность
fabulous-unicorn Oct 19, 2026
6bccbf1
fix(tag): исправлено отображение при изменении масштаба шрифта
fabulous-unicorn Oct 20, 2026
e5eb793
docs(tag): добавлена документация компонента
fabulous-unicorn Oct 20, 2026
a8330b4
fix(tag): исправлен цвет текста в тёмной теме
fabulous-unicorn Oct 20, 2026
9eda205
fix(fonts): подключены недостающие начертания
fabulous-unicorn Oct 20, 2026
c08b6df
feat(button): добавить поддержку badge
fabulous-unicorn Oct 23, 2026
0921154
test(button): удалить старые тесты ButtonSeverity
fabulous-unicorn Oct 23, 2026
6620129
fix(button): исправить позицию точки и controls бейджа
fabulous-unicorn Oct 23, 2026
ceb2540
fix(storybook): добавлены префиксы параметров бейджа
fabulous-unicorn Oct 23, 2026
789cdbe
fix(tokens): обновлены токены
fabulous-unicorn Oct 26, 2026
abe84ee
feat(toggle-switch): добавлен ToggleSwitch
fabulous-unicorn Oct 26, 2026
5a9b16b
docs(toggle-switch): добавлены документация и стори
fabulous-unicorn Oct 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
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
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ android/app/.cxx
android/app/build
android/build
CHANGELOG.md
.storybook/storybook.requires.ts
2 changes: 1 addition & 1 deletion .storybook/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ const StorybookUIRoot = view.getStorybookUI({
typography: {
size: {
s1: 16,
s2: 20,
s2: 14,
s3: 24,
m1: 16,
m2: 20,
Expand Down
8 changes: 8 additions & 0 deletions .storybook/inputDocumentation.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
const documentationRoot =
'https://github.com/cdek-it/react-native-ui-kit/blob/main/src/components/Input'

export const inputDocumentationNotes = {
InputGroup: `[Документация InputGroup](${documentationRoot}/InputGroup/InputGroup.md)`,
Password: `[Документация Password](${documentationRoot}/Password/Password.md)`,
InputCaption: `[Документация InputCaption](${documentationRoot}/InputCaption/InputCaption.md)`,
}
67 changes: 67 additions & 0 deletions .storybook/inputLabelControls.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import type { Meta } from '@storybook/react'
import { Alert } from 'react-native'

import type {
InputLabelInfo,
InputLabelProps,
} from '../src/components/Input/core/types'

type InputLabelControls = {
labelMode: 'none' | 'label' | 'floatLabel'
labelText: string
labelInfo?: InputLabelInfo
}

export type InputLabelStoryArgs<Props> = Omit<
Props,
'label' | 'floatLabel' | 'labelInfo'
> &
InputLabelControls

export type InputStoryMeta<Props, Args> = Omit<Meta<Args>, 'component'> &
Pick<Meta<Props>, 'component'>

export const inputLabelControls = {
labelMode: {
control: 'radio',
options: ['none', 'label', 'floatLabel'],
description:
'Режим примера: передать label, floatLabel или не передавать подпись. Не свойство компонента.',
},
labelText: {
control: 'text',
description: 'Текст для выбранного label или floatLabel в этом примере.',
},
labelInfo: {
control: 'select',
options: ['none', 'info'],
mapping: {
none: undefined,
info: {
onPress: () =>
Alert.alert(
'Подробнее',
'Пример справки, которую открывает приложение.'
),
},
},
if: { arg: 'labelMode', eq: 'label' },
description:
'Кнопка ⓘ у обычного label. Обработчик примера открывает справку через Alert.',
},
} as const

export const getInputLabelProps = ({
labelMode,
labelText,
labelInfo,
}: InputLabelControls): InputLabelProps => {
switch (labelMode) {
case 'label':
return { label: labelText, labelInfo }
case 'floatLabel':
return { floatLabel: labelText }
case 'none':
return {}
}
}
1 change: 1 addition & 0 deletions .storybook/preview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ const preview: Preview = {
},
],
parameters: {
options: { storySort: { method: 'alphabetical', includeNames: true } },
actions: { argTypesRegex: '^on[A-Z].*' },
controls: { matchers: { color: /(background|color)$/i, date: /Date$/ } },
},
Expand Down
52 changes: 22 additions & 30 deletions .storybook/storybook.requires.ts
Original file line number Diff line number Diff line change
@@ -1,56 +1,48 @@
/* do not change this file, it is auto generated by storybook. */
/// <reference types="@storybook/react-native/metro-env" />
import { start, updateView, View, type Features } from '@storybook/react-native';
import { start, updateView, View, type Features } from '@storybook/react-native'

import "@storybook/addon-ondevice-notes/register";
import "@storybook/addon-ondevice-controls/register";
import "@storybook/addon-ondevice-actions/register";
import '@storybook/addon-ondevice-notes/register'
import '@storybook/addon-ondevice-controls/register'
import '@storybook/addon-ondevice-actions/register'

const normalizedStories = [
{
titlePrefix: "",
directory: "./src",
files: "**/*.stories.?(ts|tsx|js|jsx)",
importPathMatcher: /^\.(?:(?:^|\/|(?:(?:(?!(?:^|\/)\.).)*?)\/)(?!\.)(?=.)[^/]*?\.stories\.(?:ts|tsx|js|jsx)?)$/,
titlePrefix: '',
directory: './src',
files: '**/*.stories.?(ts|tsx|js|jsx)',
importPathMatcher:
/^\.(?:(?:^|\/|(?:(?:(?!(?:^|\/)\.).)*?)\/)(?!\.)(?=.)[^/]*?\.stories\.(?:ts|tsx|js|jsx)?)$/,
req: require.context(
'../src',
true,
/^\.(?:(?:^|\/|(?:(?:(?!(?:^|\/)\.).)*?)\/)(?!\.)(?=.)[^/]*?\.stories\.(?:ts|tsx|js|jsx)?)$/
),
}
];

},
]

declare global {
var view: View;
var STORIES: typeof normalizedStories;
var view: View
var STORIES: typeof normalizedStories
var STORYBOOK_WEBSOCKET:
| { host?: string; port?: number; secured?: boolean }
| undefined;
var FEATURES: Features;
| undefined
var FEATURES: Features
}


const annotations = [
require('./preview'),
require("@storybook/react-native/preview")
];

globalThis.STORIES = normalizedStories;


module?.hot?.accept?.();
require('@storybook/react-native/preview'),
]

globalThis.STORIES = normalizedStories

module?.hot?.accept?.()

if (!globalThis.view) {
globalThis.view = start({
annotations,
storyEntries: normalizedStories,

});
globalThis.view = start({ annotations, storyEntries: normalizedStories })
} else {
updateView(globalThis.view, annotations, normalizedStories);
updateView(globalThis.view, annotations, normalizedStories)
}

export const view: View = globalThis.view;
export const view: View = globalThis.view
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
Loading
Loading