Skip to content
Back to skills

Expo Ui Design Motion

ASecurity

Обязательные production-правила Design System, Motion System и Interaction System для React Native + Expo. Используй ВСЕГДА при создании или изменении Expo/React Native экранов, UI-компонентов, навигационных переходов, sheets/modals, gestures, animations, haptics, изображений, skeleton/loading/empty states, charts, optimistic UI, accessibility/reduced motion и theme/design tokens.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 11, 2026
designgobashreactnodespringtestingapiperformance

Works with

  • api

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned September 11, 2026

npx -y skills add Vitammiin/agent-vorcl-flow --skill expo-ui-design-motion --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Expo Ui Design Motion?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Expo Ui Design Motion
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vitammiin-expo-ui-design-motion/badge)](https://www.skillsdirectory.com/skills/vitammiin-expo-ui-design-motion)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: expo-ui-design-motion
description: Обязательные production-правила Design System, Motion System и Interaction System для React Native + Expo. Используй ВСЕГДА при создании или изменении Expo/React Native экранов, UI-компонентов, навигационных переходов, sheets/modals, gestures, animations, haptics, изображений, skeleton/loading/empty states, charts, optimistic UI, accessibility/reduced motion и theme/design tokens.
---

# Expo UI Design, Motion & Interaction

Этот skill отвечает на вопрос **как экран выглядит, двигается и ощущается**. За размещение кода, modules, state и data flow отвечает `expo-mobile-architecture`; применяй оба skill при работе над Expo UI.

## Перед изменением UI

1. Определи пользовательское действие, visual hierarchy и ожидаемый feedback.
2. Полностью выполни online compatibility protocol из `expo-mobile-architecture/references/version-compatibility.md`: versioned Expo docs, upstream matrix/releases, npm peers/engines и live preflight. Alpha/unstable API не делай единственным production path.
3. Выбери семантику перехода: deeper hierarchy, temporary task, same-level state или object-to-detail.
4. Найди существующие design, motion и interaction primitives. Не создавай локальный dialect внутри feature.
5. Спроектируй normal и reduced-motion behaviour до реализации.

## Обязательная философия

- Native first: обычные screen push/pop отдай native stack.
- Motion показывает causality, hierarchy, state change, spatial continuity, feedback или направляет внимание. Иначе не анимируй.
- Spring first для interruptible physical feedback; duration-based motion оставляй для fade/crossfade и контролируемых состояний.
- Gesture follows finger: интерактивный объект следует translation/velocity жеста на UI thread.
- Один тип действия получает один тип перехода во всём приложении.
- Design tokens и motion tokens вместо случайных значений.
- Haptic подтверждает значимое действие, но не каждый tap/scroll.
- Optimistic UI даёт немедленный feedback там, где rollback безопасен.
- Reduced Motion является отдельным обязательным режимом.
- Стабильные 60/120 FPS важнее декоративного эффекта.
- Glass — материал navigation/control surfaces, не универсальный фон.
- Хороший интерфейс скорее недоанимирован, чем переанимирован.

## Spatial navigation

Используй единый словарь:

| Отношение | Переход |
|---|---|
| deeper hierarchy | native default push/pop |
| same-level state | короткий fade/crossfade |
| temporary contextual task | modal или native `formSheet` |
| create/edit flow | sheet для короткой формы; screen для длинного flow |
| object → detail | zoom/shared transition только как progressive enhancement |

Не делай собственный `translateX` для каждого route. Zoom transitions, Native Tabs и platform glass проверяй online по текущему SDK/runtime и всегда предоставляй устойчивый fallback.

## Token boundaries

Базовый контракт:

```text
src/shared/theme/
├── colors.ts
├── typography.ts
├── spacing.ts
├── radius.ts
├── shadows.ts
├── motion.ts
├── opacity.ts
└── index.ts
```

В `motion.ts` держи именованные duration и spring presets. Начальная шкала, которую затем калибруют под бренд:

```text
100–160 ms  tap/icon/checkbox
160–240 ms  button/card/state
240–360 ms  modal/content
300–450 ms  major spatial transition
```

Это product defaults, не норматив Apple/Google. Запрещены случайные duration, bezier, colors, spacing, radius, opacity и typography внутри feature без объяснимой причины.

## Interaction rules

- Interactive controls получают subtle press state: обычно небольшой scale/opacity/background shift с быстрым settle.
- Для gestures используй Gesture Handler + Reanimated и учитывай velocity/cancel/threshold.
- Layout insert/delete/reorder анимируй entering/exiting/layout transitions, если это помогает сохранить continuity.
- Balance, score и charts можно анимировать быстро и interruptibly; данные и accessibility label должны сразу отражать итоговое значение.
- Haptics централизуй за semantic API: `selection`, `success`, `warning`, `error`. Синхронизируй с визуальным outcome, не с началом сетевого ожидания.
- Images показывай через placeholder (BlurHash/ThumbHash), cache policy и короткий transition; задавай корректный размер.
- Data screens имеют skeleton, content, empty, error и refreshing. Spinner оставляй для короткой blocking/local операции.
- Empty state объясняет состояние и предлагает следующий релевантный action.
- Progressive disclosure прячет вторичные actions в contextual menu/sheet, сохраняя primary action видимым.

## Reduced Motion

Централизуй policy и системную настройку. При reduced motion:

- убирай bounce, parallax, repetitive/automatic motion и большие zoom/scale;
- заменяй spatial transform коротким fade или instant state change;
- сохраняй causality, focus, completion feedback и доступность content;
- не отключай animation хаотично по отдельным компонентам.

## Performance gate

- Переноси gesture/animation work на UI thread; не запускай React state update на каждый frame.
- Не анимируй layout-heavy properties без профилирования.
- Проверяй low-end Android и реальное устройство, release build, long lists и concurrent gestures.
- Удали или упрости эффект при dropped frames, input lag, memory churn или нарушении accessibility.
- Не добавляй `useMemo`, `useCallback`, worklets и third-party animation library без измеримой причины.

## Capability policy

Подробные patterns, API/fallback matrix и checklist находятся в [references/design-motion-guide.md](references/design-motion-guide.md). Открывай reference при проектировании navigation, sheets, glass, gestures, image loading, charts или системной accessibility.

## Проверка

Запусти:

```bash
node skills/expo-ui-design-motion/scripts/guard.mjs --root <expo-project>
```

Guard проверяет только детерминированные high-signal нарушения. Он не заменяет visual review, accessibility testing, профилирование на устройстве и проверку reduced motion.

## Definition of Done

- spatial transition соответствует отношению экранов;
- design/motion values идут через tokens;
- press/gesture feedback interruptible и умеренный;
- haptic semantic, редкий и синхронный outcome;
- loading/empty/error/refreshing и image placeholder предусмотрены;
- optimistic update имеет rollback/error path;
- experimental/platform API имеет feature gate и fallback;
- reduced motion проверен;
- screen reader/focus/touch target/contrast не ухудшены;
- release-профиль не показывает заметных frame drops;
- `guard.mjs`, typecheck, lint и релевантные tests зелёные.

Files in this skill

  • SKILL.md8.5 KB
  • agents/openai.yaml240 B
  • references/design-motion-guide.md9.3 KB
  • scripts/guard.mjs7.6 KB
  • tests/guard.test.mjs4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…