/react-native-ease-refactor
Scan for Animated/Reanimated code and migrate to EaseView
Claude Code
$ npx -y skills add appandflow/react-native-ease --skill react-native-ease-refactor --agent claude-code
Codex
$ npx skills add appandflow/react-native-ease --skill react-native-ease-refactor -a codex -y
Cursor
$ npx skills add appandflow/react-native-ease --skill react-native-ease-refactor -a cursor -y
Gemini CLI
$ npx skills add appandflow/react-native-ease --skill react-native-ease-refactor -a gemini-cli -y
GitHub Copilot
$ npx skills add appandflow/react-native-ease --skill react-native-ease-refactor -a github-copilot -y
OpenCode
$ npx skills add appandflow/react-native-ease --skill react-native-ease-refactor -a opencode -y
Windsurf
$ npx skills add appandflow/react-native-ease --skill react-native-ease-refactor -a windsurf -y
SKILL.md
react-native-ease-refactor.SKILL.mdname: react-native-ease-refactor
description: Scan for Animated/Reanimated code and migrate to EaseView
user-invocable: true
react-native-ease refactor
You are a migration assistant that converts `react-native-reanimated` and React Native's built-in `Animated` API code to `react-native-ease` `EaseView` components.
Follow these 6 phases exactly. Do not skip phases or reorder them.
---
Phase 1: Discovery
Scan the user's project for animation code:
1. Use Grep to detect if the project uses NativeWind:
- Pattern: `from ['"]nativewind['"]` in `**/*.{ts,tsx,js,jsx}`
- Also check `package.json` for `"nativewind"` in dependencies
- If NativeWind is detected, set a flag `usesNativeWind = true` for use in Phase 5
2. Detect the Reanimated version (needed for default value mapping in Phase 2):
- Read `package.json` and check the `react-native-reanimated` version in `dependencies` or `devDependencies`
- If the version is `^4` or `>=4.0.0`, set `reanimatedVersion = 4`
- Otherwise set `reanimatedVersion = 3` (covers v2/v3 which share the same defaults)
3. Use Grep to find all files importing from `react-native-reanimated`:
- Pattern: `from ['"]react-native-reanimated['"]`
- Search in `**/*.{ts,tsx,js,jsx}`
4. Use Grep to find all files using React Native's built-in `Animated` API:
- Pattern: `from ['"]react-native['"]` that also use `Animated`
- Pattern: `Animated\.View|Animated\.Text|Animated\.Image|Animated\.Value|Animated\.timing|Animated\.spring`
3. Use Grep to find files already using `react-native-ease` (to avoid re-migrating):
- Pattern: `from ['"]react-native-ease['"]`
4. Read each file that contains animation code. Build a list of components with their animation patterns.
**Exclude** from scanning:
- `node_modules/`
- `*.test.*` and `*.spec.*` files
- Build output directories (`lib/`, `build/`, `dist/`)
---
Phase 2: Classification
For each component found, classify as **migratable** or **not migratable**.
Decision Tree
Apply these checks in order. The first match determines the result:
1. **Uses gesture APIs?** (`Gesture.Pan`, `Gesture.Pinch`, `Gesture.Rotation`, `useAnimatedGestureHandler`) β NOT migratable β "Gesture-driven animation" 2. **Uses scroll handler?** (`useAnimatedScrollHandler`, `onScroll` with `Animated.event`) β NOT migratable β "Scroll-driven animation" 3. **Uses shared element transitions?** (`sharedTransitionTag`) β NOT migratable β "Shared element transition" 4. **Uses `runOnUI` or worklet directives?** β NOT migratable β "Requires worklet runtime" 5. **Uses `withSequence`?** β NOT migratable β "Animation sequencing not supported" 5b. **Uses `withDelay` wrapping a single animation (`withTiming`/`withSpring`)?** β MIGRATABLE β map to `delay` on the transition 5c. **Uses `withDelay` wrapping `withSequence` or nested `withDelay`?** β NOT migratable β "Complex delay/sequencing not supported" 6. **Uses complex `interpolate()`?** (more than 2 input/output values) β NOT migratable β "Complex interpolation" 7. **Uses `layout={...}` prop?** β NOT migratable β "Layout animation" 8. **Animates unsupported properties?** (anything besides: opacity, translateX, translateY, scale, scaleX, scaleY, rotate, rotateX, rotateY, borderRadius, backgroundColor, borderWidth, borderColor, shadowOpacity, shadowRadius, shadowColor, shadowOffset, elevation) β NOT migratable β "Animates unsupported property: `<prop>`" 9. **Uses different transition configs per property?** (e.g., opacity uses 200ms timing, scale uses spring) β MIGRATABLE β map to `TransitionMap` with category keys (`transform`, `opacity`, `borderRadius`, `backgroundColor`, `border`, `shadow`, `default`) 10. **Not driven by state?** (animation triggered by gesture/scroll value, not React state) β NOT migratable β "Not state-driven" 11. **Otherwise** β MIGRATABLE
Migratable Pattern Mapping
Use this table to convert Reanimated/Animated patterns to EaseView:
| Reanimated / Animated Pattern | EaseView Equivalent | | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | | `useSharedValue` + `useAnimatedStyle` + `withTiming` for opacity, translate, scale, rotate, borderRadius, backgroundColor | `animate={{ prop: value }}` + `transition={{ type: 'timing', duration, easing }}` | | `withSpring` | `transition={{ type: 'spring', damping, stiffness, mass, velocity }}` | | `entering={FadeIn}` / `FadeIn.duration(N)` | `initialAnimate={{ opacity: 0 }}` + `animate={{ opacity: 1 }}` + timing transition | | `entering={FadeInDown}` / `FadeInUp` | `initialAnimate={{ opacity: 0, translateY: Β±value }}` + `animate={{ opacity: 1, translateY: 0 }}` | | `entering={SlideInLeft}` / `SlideInRight` | `initialAnimate={{ translateX: Β±value }}` + `animate={{ translateX: 0 }}` | | `entering={SlideInUp}` / `SlideInDown` | `initialAnimate={{ translateY: Β±value }}` + `animate={{ translateY: 0 }}` | | `entering={ZoomIn}` | `initialAnimate={
Read more
name: react-native-ease-refactor description: Scan for Animated/Reanimated code and migrate to EaseView user-invocable: true
react-native-ease refactor
You are a migration assistant that converts `react-native-reanimated` and React Native's built-in `Animated` API code to `react-native-ease` `EaseView` components.
Follow these 6 phases exactly. Do not skip phases or reorder them.
---
Phase 1: Discovery
Scan the user's project for animation code:
1. Use Grep to detect if the project uses NativeWind:
- Pattern: `from ['"]nativewind['"]` in `**/*.{ts,tsx,js,jsx}`
- Also check `package.json` for `"nativewind"` in dependencies
- If NativeWind is detected, set a flag `usesNativeWind = true` for use in Phase 5
2. Detect the Reanimated version (needed for default value mapping in Phase 2):
- Read `package.json` and check the `react-native-reanimated` version in `dependencies` or `devDependencies`
- If the version is `^4` or `>=4.0.0`, set `reanimatedVersion = 4`
- Otherwise set `reanimatedVersion = 3` (covers v2/v3 which share the same defaults)
3. Use Grep to find all files importing from `react-native-reanimated`:
- Pattern: `from ['"]react-native-reanimated['"]`
- Search in `**/*.{ts,tsx,js,jsx}`
4. Use Grep to find all files using React Native's built-in `Animated` API:
- Pattern: `from ['"]react-native['"]` that also use `Animated`
- Pattern: `Animated\.View|Animated\.Text|Animated\.Image|Animated\.Value|Animated\.timing|Animated\.spring`
3. Use Grep to find files already using `react-native-ease` (to avoid re-migrating):
- Pattern: `from ['"]react-native-ease['"]`
4. Read each file that contains animation code. Build a list of components with their animation patterns.
**Exclude** from scanning:
- `node_modules/`
- `*.test.*` and `*.spec.*` files
- Build output directories (`lib/`, `build/`, `dist/`)
---
Phase 2: Classification
For each component found, classify as **migratable** or **not migratable**.
Decision Tree
Apply these checks in order. The first match determines the result:
1. **Uses gesture APIs?** (`Gesture.Pan`, `Gesture.Pinch`, `Gesture.Rotation`, `useAnimatedGestureHandler`) β NOT migratable β "Gesture-driven animation" 2. **Uses scroll handler?** (`useAnimatedScrollHandler`, `onScroll` with `Animated.event`) β NOT migratable β "Scroll-driven animation" 3. **Uses shared element transitions?** (`sharedTransitionTag`) β NOT migratable β "Shared element transition" 4. **Uses `runOnUI` or worklet directives?** β NOT migratable β "Requires worklet runtime" 5. **Uses `withSequence`?** β NOT migratable β "Animation sequencing not supported" 5b. **Uses `withDelay` wrapping a single animation (`withTiming`/`withSpring`)?** β MIGRATABLE β map to `delay` on the transition 5c. **Uses `withDelay` wrapping `withSequence` or nested `withDelay`?** β NOT migratable β "Complex delay/sequencing not supported" 6. **Uses complex `interpolate()`?** (more than 2 input/output values) β NOT migratable β "Complex interpolation" 7. **Uses `layout={...}` prop?** β NOT migratable β "Layout animation" 8. **Animates unsupported properties?** (anything besides: opacity, translateX, translateY, scale, scaleX, scaleY, rotate, rotateX, rotateY, borderRadius, backgroundColor, borderWidth, borderColor, shadowOpacity, shadowRadius, shadowColor, shadowOffset, elevation) β NOT migratable β "Animates unsupported property: `<prop>`" 9. **Uses different transition configs per property?** (e.g., opacity uses 200ms timing, scale uses spring) β MIGRATABLE β map to `TransitionMap` with category keys (`transform`, `opacity`, `borderRadius`, `backgroundColor`, `border`, `shadow`, `default`) 10. **Not driven by state?** (animation triggered by gesture/scroll value, not React state) β NOT migratable β "Not state-driven" 11. **Otherwise** β MIGRATABLE
Migratable Pattern Mapping
Use this table to convert Reanimated/Animated patterns to EaseView:
| Reanimated / Animated Pattern | EaseView Equivalent | | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | | `useSharedValue` + `useAnimatedStyle` + `withTiming` for opacity, translate, scale, rotate, borderRadius, backgroundColor | `animate={{ prop: value }}` + `transition={{ type: 'timing', duration, easing }}` | | `withSpring` | `transition={{ type: 'spring', damping, stiffness, mass, velocity }}` | | `entering={FadeIn}` / `FadeIn.duration(N)` | `initialAnimate={{ opacity: 0 }}` + `animate={{ opacity: 1 }}` + timing transition | | `entering={FadeInDown}` / `FadeInUp` | `initialAnimate={{ opacity: 0, translateY: Β±value }}` + `animate={{ opacity: 1, translateY: 0 }}` | | `entering={SlideInLeft}` / `SlideInRight` | `initialAnimate={{ translateX: Β±value }}` + `animate={{ translateX: 0 }}` | | `entering={SlideInUp}` / `SlideInDown` | `initialAnimate={{ translateY: Β±value }}` + `animate={{ translateY: 0 }}` | | `entering={ZoomIn}` | `initialAnimate={
More skills from other plugins.
android-reverse-engineβ¦
Decompile Android APK, XAPK, JAR, and AAR files using jadx or Fernflower/Vineflower. Reverse engineer Android apps, extract HTTPβ¦
Questions about react-native-ease-refactor.
- Which coding agents can use react-native-ease-refactor?
- react-native-ease-refactor installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

