[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-94546":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":15,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":19,"hasPages":19,"topics":21,"createdAt":10,"pushedAt":10,"updatedAt":22,"readmeContent":23,"aiSummary":24,"trendingCount":15,"starSnapshotCount":15,"syncStatus":25,"lastSyncTime":26,"discoverSource":27},94546,"expo-content-transition","rit3zh\u002Fexpo-content-transition","rit3zh","🚀 Native content transitions for React Native + Expo.","",null,"Swift",169,5,114,0,43,46.63,"MIT License",false,"main",[],"2026-08-24 04:01:22","https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fecc58493-07f3-4ac1-8bb8-e36d237cbd5c\n\n\n\n# expo-content-transition\n\nNative content transitions for React Native + Expo.\n\n## Features\n\n- One component — `NumericText` — that rolls, scales, blurs, and staggers its glyphs, natively\n- Digits align around the decimal separator, so `123.45 → 123.46` only animates the final character\n- Non-numeric content aligns from the left, so shared prefixes stay put\n- Every dial you'd want: roll distance, entry scale, bounce, per-glyph blur, stagger, direction\n- `monospacedDigits` keeps digit columns from shifting as neighbours change\n- Value changes cross the bridge; measuring, diffing, and animating all happen natively\n\n## Installation\n\n```bash\nbun install expo-content-transition\n```\n\nThis module includes native iOS and Android code, so you need to prebuild and run on a device or simulator — Expo Go is not supported.\n\n```bash\nbunx expo prebuild\nbunx expo run:ios\nbunx expo run:android\n```\n\n> If you've already prebuilt your project, just re-run `expo run:ios` \u002F `expo run:android` after installing.\n\n## Usage\n\n```tsx\nimport { NumericText } from 'expo-content-transition';\n```\n\n## Quick Start\n\n```tsx\nimport { NumericText } from 'expo-content-transition';\nimport { Pressable, Text, View } from 'react-native';\n\nexport default function Counter() {\n  const [value, setValue] = React.useState(0);\n\n  return (\n    \u003CView>\n      \u003CNumericText value={value} color=\"#fff\" fontSize={72} monospacedDigits \u002F>\n      \u003CPressable onPress={() => setValue((v) => v + 1)}>\n        \u003CText>Increment\u003C\u002FText>\n      \u003C\u002FPressable>\n    \u003C\u002FView>\n  );\n}\n```\n\n## API\n\n### `\u003CNumericText>`\n\n| Prop                | Type             | Default    | Description                                                                                     |\n| ------------------- | ---------------- | ---------- | ----------------------------------------------------------------------------------------------- |\n| `value`             | `string \\| number` | —        | The text to display. Only this crosses the bridge when it changes — the rest happens natively  |\n| `color`             | `string`         | platform   | Any React Native colour; defaults to the platform's primary label colour                        |\n| `fontSize`          | `number`         | —          | Font size in scale-independent pixels                                                           |\n| `fontWeight`        | `FontWeight`     | `\"normal\"` | `normal`, `bold`, or `100`–`900`                                                                |\n| `fontStyle`         | `FontStyle`      | `\"normal\"` | `normal` or `italic`                                                                            |\n| `fontFamily`        | `string`         | —          | Resolved like a `\u003CText>` — `expo-font` families, bundled fonts, or platform built-ins           |\n| `letterSpacing`     | `number`         | —          | Extra spacing between characters, in points                                                     |\n| `monospacedDigits`  | `boolean`        | `false`    | Uniform-width digits, so unchanged columns never shift                                          |\n| `alignment`         | `Alignment`      | `\"start\"`  | `start`, `center`, or `end`; also settable via `style.textAlign`                                |\n| `decimalSeparator`  | `string`         | `\".\"`      | The character separating whole and fractional parts; characters align around it                 |\n| `style`             | `TextStyle`      | —          | Text props apply to the glyphs; everything else styles the view                                 |\n\n#### Transition props\n\n| Prop              | Type             | Default   | Description                                                                         |\n| ----------------- | ---------------- | --------- | ----------------------------------------------------------------------------------- |\n| `direction`       | `Direction`      | `\"auto\"`  | `auto` rolls up as the value grows and down as it shrinks; force `up`\u002F`down` otherwise |\n| `duration`        | `number`         | `420`     | Nominal transition duration in milliseconds; scales every internal spring           |\n| `bounce`          | `number`         | `0.46`    | Roll overshoot, `0`–`0.95`; only the roll bounces                                    |\n| `enterScale`      | `number`         | `0.4`     | Entry size of an arriving glyph; `1` leaves a pure roll                              |\n| `travel`          | `number`         | `0.333`   | Roll distance as a fraction of the line height; `0` removes vertical movement        |\n| `blur`            | `boolean`        | `true`    | Blurs each glyph in proportion to how far through its transition it is              |\n| `blurIntensity`   | `number`         | `1`       | Scales the blur, `0`–`8`; `0` is equivalent to `blur={false}`                        |\n| `maxBlurRadius`   | `number`         | unbounded | Ceiling on the blur radius, in dp — lets intensity be pushed without turning to soup |\n| `clip`            | `boolean`        | `true`    | Clips each glyph to its own line box so rolling glyphs don't overlap neighbours      |\n| `animated`        | `boolean`        | `true`    | Set to `false` to apply values instantly; the first value never animates either way  |\n\n`blur` requires Android 12 (API 31); it's silently ignored on lower Android versions and works everywhere on iOS.\n\n## Full Example\n\nA stopwatch that updates ten times a second — transitions blend instead of queueing up behind one another:\n\n```tsx\nimport { NumericText } from 'expo-content-transition';\nimport { Pressable, Text, View } from 'react-native';\n\nfunction pad(n: number) {\n  return String(n).padStart(2, '0');\n}\n\nexport default function Stopwatch() {\n  const [running, setRunning] = React.useState(false);\n  const [ticks, setTicks] = React.useState(0);\n\n  React.useEffect(() => {\n    if (!running) return;\n    const id = setInterval(() => setTicks((t) => t + 1), 100);\n    return () => clearInterval(id);\n  }, [running]);\n\n  const formatted = `${pad(Math.floor(ticks \u002F 600))}:${pad(Math.floor(ticks \u002F 10) % 60)}.${ticks % 10}`;\n\n  return (\n    \u003CView>\n      \u003CNumericText value={formatted} color=\"#f2f4f8\" fontSize={48} fontWeight=\"500\" monospacedDigits \u002F>\n      \u003CPressable onPress={() => setRunning((r) => !r)}>\n        \u003CText>{running ? 'Stop' : 'Start'}\u003C\u002FText>\n      \u003C\u002FPressable>\n    \u003C\u002FView>\n  );\n}\n```\n\n## Requirements\n\n- Expo SDK with a [development build](https:\u002F\u002Fdocs.expo.dev\u002Fdevelop\u002Fdevelopment-builds\u002Fintroduction\u002F) or bare workflow (Expo Go is **not** supported)\n- iOS and Android — fully native on both\n- Web falls back to a plain `\u003CText>`, without transitions\n\n## License\n\nMIT © 2026 [Ritesh](https:\u002F\u002Fgithub.com\u002Frit3zh)\n","这是一个为 React Native + Expo 应用提供原生级数字内容过渡动画的库，核心组件 NumericText 支持对数字或文本进行逐字符的原生动画（如滚动、缩放、模糊、错位延迟等）。它智能对齐小数点或左对齐非数字内容，保持共享前缀稳定，并通过 monospacedDigits 防止数字列位移；所有测量、差异计算与动画均在 iOS\u002FAndroid 原生层完成，仅 value 值跨 JS 桥传输。适用于需要高性能、视觉精致的实时数值更新场景，如金融行情、计数器、仪表盘、游戏得分等。",2,"2026-08-12 02:30:03","CREATED_QUERY"]