Skip to content

feat(ux): staggered screen entrance animations (home + detail)#133

Merged
os-zhuang merged 1 commit into
mainfrom
feat/motion-screen-entrance
Jun 11, 2026
Merged

feat(ux): staggered screen entrance animations (home + detail)#133
os-zhuang merged 1 commit into
mainfrom
feat/motion-screen-entrance

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

What

Second slice of the 动效与转场 (motion/transitions) UX track, after the merged KPI count-up (#132).

  • Home — the AI Assistant card, recently-viewed list, and dashboard cards now fade-and-rise into place with a short per-element stagger (FadeInDown with increasing delays).
  • Detail view — field sections ease in one after another.

Only ScrollView-backed surfaces get entrance animations. FlashList-recycled rows are deliberately left untouched, since cell recycling would re-trigger the animation on scroll.

Reanimated jest mock

Mounting these screens in tests surfaced that reanimated v4 pulls in react-native-worklets, whose native half throws Worklets isn't initialized under Node — and the package's own bundled mock re-imports the real entrypoint, so it throws too. Added a self-contained mock in jest.setup.ts that renders Animated.* as host components and turns the layout-animation builders (FadeInDown.delay().duration()…) into chainable no-ops.

Verification

  • tsc --noEmit clean
  • eslint clean
  • 1337 tests pass (was 1331; the 2 detail-renderer suites that fully mount the now-Animated.View sections now run again under the new mock)
  • Web bundle loads the reanimated import with zero console errors

🤖 Generated with Claude Code

Home (AI card, recent items, dashboard cards) and detail-view sections
now fade-and-rise into place with a short per-element stagger via
reanimated's FadeInDown, matching the entrance polish top-tier apps use.
Only ScrollView-backed surfaces get this — FlashList-recycled rows are
left alone so recycling doesn't re-trigger the animation.

Adds a self-contained react-native-reanimated jest mock: v4 pulls in
react-native-worklets, whose native half throws under Node, and the
package's own bundled mock re-imports the real entrypoint (so it throws
too). The mock renders Animated.* as host components and makes the
layout-animation builders chainable no-ops.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@os-zhuang os-zhuang merged commit 820a2f9 into main Jun 11, 2026
4 checks passed
@os-zhuang os-zhuang deleted the feat/motion-screen-entrance branch June 11, 2026 15:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant