Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
5beb5aa
feat: добавлен генератор дизайн-токенов
fabulous-unicorn Jul 30, 2026
221ad2b
ci: добавлены проверки дизайн-токенов
fabulous-unicorn Jul 30, 2026
f1ee752
feat: добавлены и подключены дизайн-токены
fabulous-unicorn Jul 30, 2026
bce2d90
fix: исправлена нормализация радиусов в токенах
fabulous-unicorn Jul 30, 2026
c435a3f
fix: доработан генератор дизайн-токенов
fabulous-unicorn Jul 31, 2026
defc48e
chore: исправлены команды проверки дизайн-токенов
fabulous-unicorn Jul 31, 2026
2facbdd
feat: добавлена поддержка focusRing-токенов
fabulous-unicorn Jul 31, 2026
0a7ef47
feat: добавлена поддержка токенов анимации
fabulous-unicorn Jul 31, 2026
4a05ec0
feat: добавлена генерация токенов шрифтов
fabulous-unicorn Aug 3, 2026
1bd208d
refactor(tokens): разделены semantic-токены
fabulous-unicorn Aug 4, 2026
542c6c6
refactor(tokens): component-токены скрыты из публичного API
fabulous-unicorn Aug 4, 2026
fcd4508
docs: актуализирована документация тем и токенов
fabulous-unicorn Aug 4, 2026
2c469c2
refactor(tokens): объединены проверка и форматирование генерации
fabulous-unicorn Aug 4, 2026
4868082
feat(Theme): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
bdf430a
feat(Accordion): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
c094084
feat(Avatar): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
864537f
feat(Badge): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
4ea0b15
feat(Button): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
1292250
feat(Checkbox): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
91b5cdd
feat(Chip): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
4a67d6c
feat(Dialog): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
4040624
feat(Divider): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
bc9f7df
feat(InputSwitch): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
55940f9
feat(Input): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
5572d16
feat(List): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
7651563
feat(MenuItem): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
08f2409
feat(Message): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
5e1f2ff
feat(ProgressBar): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
bc83911
feat(ProgressSpinner): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
c6c2efe
feat(RadioButton): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
31a36bc
feat(Rating): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
cd2d2f3
feat(SelectButton): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
a18c503
feat(Skeleton): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
fa78e69
feat(Slider): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
98e8631
feat(Tabs): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
83cc7ec
feat(Tag): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
226cafd
feat(Timer): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
a5d3f43
feat(ToggleButton): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
d2565de
feat(Typography): подключены сгенерированные токены
fabulous-unicorn Aug 4, 2026
1b26636
refactor(theme): добавлен слой legacy-совместимости
fabulous-unicorn Aug 4, 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
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
90 changes: 37 additions & 53 deletions MIGRATION.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
# Миграция на Unistyles V3

Стили переведены на `react-native-unistyles`. `ThemeContextProvider` доступен
как внешний конфигуратор тем и шрифтов, но чтение темы и шрифтов теперь идет
через API `unistyles`.
Стили переведены на `react-native-unistyles`. UI kit предоставляет провайдер и
хуки для настройки темы и шрифтов, а стили создаются через API `unistyles`.

## Изменения

### `ThemeContextProvider` — доступен
### Настройка темы и шрифтов

UI kit по-прежнему использует `react-native-unistyles` внутри, но для внешнего
потребителя снова доступен `ThemeContextProvider` как единая точка конфигурации
тем и шрифтов.

Если приложению нужны кастомные шрифты, настройте их через провайдер:
Оберните приложение в `ThemeContextProvider`. Через `initialTheme` задаётся
начальная тема, через `fonts` — используемые семейства шрифтов:

```tsx
import {
Expand All @@ -22,26 +18,25 @@ import {

export const Root = () => (
<ThemeContextProvider
fonts={{ primary: 'MyFont', secondary: 'MySecondaryFont' }}
fonts={{ heading: 'MyFont', base: 'MySecondaryFont' }}
initialTheme={ThemeVariant.Light}
>
<App />
</ThemeContextProvider>
)
```

Провайдер также принимает `lightTheme` и `darkTheme`, если нужно передать
полностью кастомные темы.
Провайдер не принимает пользовательские объекты тем. Он настраивает
зарегистрированные внутри UI kit темы `light` и `dark`.

### `useFonts`

Используйте `useUnistyles`:
Для получения настроенных шрифтов используйте экспортируемый UI kit хук:

```tsx
import { useUnistyles } from '@cdek-it/react-native-ui-kit'
import { useFonts } from '@cdek-it/react-native-ui-kit'

const { theme } = useUnistyles()
theme.fonts
const fonts = useFonts()
```

Или прямо в стилях через `StyleSheet.create(...)`:
Expand All @@ -50,62 +45,51 @@ theme.fonts
import { StyleSheet } from 'react-native-unistyles'

const styles = StyleSheet.create(({ fonts }) => ({
title: { fontFamily: fonts.primary },
title: { fontFamily: fonts.fontFamily.heading },
}))
```

### `useTheme()` / `useChangeTheme()`
### Чтение и переключение темы

Для чтения и переключения темы используйте публичные хуки UI kit:

```tsx
import {
ThemeVariant,
useChangeTheme,
useTheme,
} from '@cdek-it/react-native-ui-kit'

const theme = useTheme()
const changeTheme = useChangeTheme()

`ThemeContextProvider` больше не является источником `theme/fonts` через React
context. Он только конфигурирует `react-native-unistyles`.
changeTheme(ThemeVariant.Dark)
```

- `useTheme()` читает `UnistylesRuntime.themeName`
- `useFonts()` читает `useUnistyles().theme.fonts`
- `ThemeContext` остается пустым и имеет значение `null`
- `useChangeTheme()` всегда вызывает `UnistylesRuntime.setTheme(...)`
`ThemeContextProvider` не хранит тему и шрифты в React Context: `ThemeContext`
имеет значение `null`, а источником состояния остаётся Unistyles.

### `makeStyles` — removed

Используйте `StyleSheet.create(...)`:

```tsx
import { StyleSheet } from '@cdek-it/react-native-ui-kit'
import { StyleSheet } from 'react-native-unistyles'

const styles = StyleSheet.create((theme) => ({
container: { backgroundColor: theme.Button.Brand.buttonBg },
const styles = StyleSheet.create(({ semantic }) => ({
container: {
backgroundColor: semantic.colorScheme.color.bg.surface.default.default,
},
}))
```

`makeStyles` использует `useUnistyles()`, что вызывает React-ререндеры при смене
темы. `StyleSheet.create(...)` — нативный путь, обновляет стили **без**
ререндеров.

SDK реэкспортирует `StyleSheet`, `useUnistyles`, `UnistylesRuntime` и
`withUnistyles`, поэтому потребителям не нужно импортировать
`react-native-unistyles` напрямую.

### `useTheme()` — removed

```tsx
import { UnistylesRuntime, useUnistyles } from '@cdek-it/react-native-ui-kit'

const themeName = UnistylesRuntime.themeName // 'light' | 'dark'
```

Для реактивного поведения используйте `useUnistyles()`:

```tsx
const { rt } = useUnistyles()
rt.themeName
```

### `useChangeTheme()` — removed

```tsx
import { UnistylesRuntime } from '@cdek-it/react-native-ui-kit'

UnistylesRuntime.setTheme('dark')
```
UI kit не реэкспортирует `StyleSheet`, `useUnistyles`, `UnistylesRuntime` и
`withUnistyles`. Если они нужны приложению напрямую, импортируйте их из
`react-native-unistyles`.

## ESLint Правила для Unistyles

Expand Down
33 changes: 20 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,29 +36,25 @@ npm i @cdek-it/react-native-ui-kit

UI kit использует следующие виды шрифтов.

| Тип шрифта | Используемые начертания | Рекомендуемый шрифт | Рекомендуемый аналог |
| ----------- | ---------------------------------------------- | ------------------- | -------------------- |
| `primary` | – regular<br/>– demibold<br/>– demibold italic | TT Fellows | Noto Sans |
| `secondary` | – regular<br/>– bold | Noto Sans | — |
| Тип шрифта | Используемые начертания | Рекомендуемый шрифт | Рекомендуемый аналог |
| ---------- | ---------------------------------------------- | ------------------- | -------------------- |
| `heading` | – regular<br/>– demibold<br/>– demibold italic | TT Fellows | Noto Sans |
| `base` | – regular<br/>– bold | Noto Sans | — |

Исходники шрифтов не поставляются вместе с пакетом, их требуется подключать
отдельно. После подключения шрифтов в проект, необходимо указать их в
`ThemeContextProvider`.
отдельно под именами, указанными в токенах.

```tsx
<ThemeContextProvider
fonts={{ primary: 'MyFont', secondary: 'MySecondaryFont' }}
/>
<ThemeContextProvider fonts={{ heading: 'MyFont', base: 'MySecondaryFont' }} />
```

После этого шрифты доступны через `useUnistyles().theme.fonts` или прямо в
`StyleSheet.create(({ fonts }) => ...)`.

`ThemeContextProvider` только настраивает темы и шрифты для `unistyles`.
`ThemeContext` остается пустым и всегда имеет значение `null`.

Провайдер также принимает `lightTheme` и `darkTheme`, если нужно переопределить
темы целиком.
`ThemeContext` остается пустым и всегда имеет значение `null`. Deprecated-формат
`fonts={{ primary, secondary }}` временно сохраняется для обратной
совместимости.

### Пример подключения шрифтов с помощью expo-fonts через плагин

Expand Down Expand Up @@ -160,6 +156,17 @@ UI kit использует следующие виды шрифтов.
</array>
```

## Токены анимации

Длительность анимации хранится в `semanticTokens` числом в миллисекундах.
Easing-токен нужно передать в Reanimated через публичный адаптер:

```ts
import { semanticTokens, toEasing } from '@cdek-it/react-native-ui-kit'

const easing = toEasing(semanticTokens.effects.transition.easing.standard)
```

## Dependencies

Для использования данной библиотеки необходимо:
Expand Down
6 changes: 6 additions & 0 deletions design-tokens/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Design tokens

`input/tokens.json` содержит входные токены из Figma, из которых генерируются
токены проекта.

Подробности: [генератор токенов](../scripts/token-generator/README.md).
Loading
Loading