Skip to content

feat: add fixed-layout typewriter reveals - #3

Merged
saseungmin merged 1 commit into
mainfrom
feat/typewriter-reveal
Oct 27, 2026
Merged

saseungmin merged 1 commit into
mainfrom
feat/typewriter-reveal

Conversation

@saseungmin

Copy link
Copy Markdown
Member

Summary

Add typewriter() to reveal text one token at a time while preserving the completed layout. It reuses nativeText(), splitters, timelines, motion, controls, and external progress, and composes with fade/transform effects without another playback owner or per-character React updates.

  • Add native-text capability/type/runtime gates and keep private visibility metadata out of public declarations.
  • Preserve decomposed and mixed precomposed Hangul syllable clusters, plus original UTF-16 offsets, in the fallback grapheme splitter.
  • Add Typewriter demos and matched renderer comparison cases, synchronize the four English/Korean READMEs, and cover visibility, Unicode, controls, progress, accessibility, and playback identity.

Validation

  • Jest: 15 suites / 226 tests passed.
  • Lint, format check, package/example typecheck, package build, and declaration audit passed.
  • Independent code review found no confirmed defects; architecture review retained performance-validation watch items.
  • Isolated iOS 26.4 simulator: initial playback, five key-remount replays, reset/play, long text, and background return checked.
  • Android 16/API 36 release APK (debuggable=false, Hermes): 62 native assertions / 13 snapshots passed.
  • Android release profiling: 40 measured runs / 2,953 rendered frame samples across two full sessions; separate Perfetto validation uniquely matched 108/108 measured frame IDs.

Behavior and validation limits

  • External progress remains timeline progress, rather than a percentage of visible characters; decreasing it can hide tokens again. Existing stop/play semantics remain unchanged.
  • Android emulator pooled frame p95 was approximately 19 ms for matched 54-character fade/Typewriter cases and 34 ms for 130-character Typewriter stress. CPU differences varied between sessions, and occasional long frames were observed; these results do not establish universal performance suitability.
  • Physical-device and iOS release performance remain unverified. A prior rendering anomaly on a shared iOS simulator was not reproduced on the isolated simulator; its cause is unresolved.
  • Cursor/streaming and complete Unicode grapheme conformance remain outside this change.

Reuse existing progress for discrete native-text visibility while preserving
composed effects and the completed token layout. Keep decomposed Hangul
clusters and UTF-16 source offsets intact in the grapheme fallback.

Update examples, English/Korean documentation, capability gates, declaration
checks, and regression coverage.
@changeset-bot

changeset-bot Bot commented Oct 27, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: fa1d5d8

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-27T12:45:25.066529Z fa1d5d8 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@saseungmin
saseungmin merged commit dd52f77 into main Oct 27, 2026
4 checks passed
@saseungmin
saseungmin deleted the feat/typewriter-reveal branch October 27, 2026 13:17
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