Skip to content

feat: add geometry-first rendered-line motion#2

Open
saseungmin wants to merge 1 commit into
mainfrom
feat/line-aware-overlay-renderer
Open

feat: add geometry-first rendered-line motion#2
saseungmin wants to merge 1 commit into
mainfrom
feat/line-aware-overlay-renderer

Conversation

@saseungmin

Copy link
Copy Markdown
Member

Summary

  • add overlayText() and lineReveal() for motion based on lines rendered by React Native
  • extract shared renderer motion logic while preserving nativeText playback and accessibility behavior
  • target scale, pulse, and common transforms at the line frame to prevent renderer self-clipping
  • keep lineReveal vertical motion inside the measured line mask
  • add capability and declaration gates, focused examples, and synchronized English/Korean docs

Architecture

  • one source paragraph remains the layout source of truth
  • rendered-line geometry drives masks and transform origins
  • frame and reveal-content styles share one progress owner
  • no extra per-line wrapper, measurement callback, listener, or public renderer SDK
  • invalid layouts and reduced motion retain readable final text

Verification

  • pnpm run format:check
  • pnpm run lint
  • pnpm run typecheck
  • pnpm run test - 14 suites / 190 tests
  • pnpm run build - declaration surface check passed
  • independent code review: APPROVE
  • independent architecture review: CLEAR

Manual follow-up

  • compare the focused scale and pulse probes on iOS and Android for native pixel clipping and transform-origin rounding

React Native titles need motion units that match the lines the platform lays out.

The overlay renderer keeps one source paragraph as truth and reuses measured line masks.

Frame transforms stop scale and pulse from clipping against the renderer's own mask.

lineReveal keeps only its relative Y movement inside the line mask.

Type and declaration gates keep private renderer state outside the package surface.

Constraint: Preserve controls, progress, accessibility, reduced motion, and fallback behavior

Constraint: Preserve the pnpm workspace and custom source condition

Rejected: Reconstruct lines from tokens | React Native layout stays the source of truth

Rejected: Add scale padding or bleed props | transforms cannot reserve layout reliably

Confidence: high

Scope-risk: broad

Directive: Keep line motion geometry-first and retain one progress owner

Tested: Node 24 format, lint, typecheck, 14 suites / 190 tests, and package build

Tested: Declaration audit and independent code-reviewer APPROVE / architect CLEAR

Not-tested: Post-change iOS and Android pixel comparison for transform-origin rounding
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