react-native-laminar 1.2.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/README.md +9 -2
  2. package/lib/commonjs/hooks/use-display-units.js +1 -0
  3. package/lib/commonjs/hooks/use-display-units.js.map +1 -1
  4. package/lib/commonjs/hooks/use-inline-auto-width.js +43 -10
  5. package/lib/commonjs/hooks/use-inline-auto-width.js.map +1 -1
  6. package/lib/commonjs/hooks/use-morph-motion.js +2 -1
  7. package/lib/commonjs/hooks/use-morph-motion.js.map +1 -1
  8. package/lib/commonjs/hooks/use-morph-text-style.js +4 -0
  9. package/lib/commonjs/hooks/use-morph-text-style.js.map +1 -1
  10. package/lib/commonjs/hooks/use-numeric-lanes.js +1 -0
  11. package/lib/commonjs/hooks/use-numeric-lanes.js.map +1 -1
  12. package/lib/commonjs/hooks/use-text-glyphs.js +28 -7
  13. package/lib/commonjs/hooks/use-text-glyphs.js.map +1 -1
  14. package/lib/commonjs/index.js +54 -11
  15. package/lib/commonjs/index.js.map +1 -1
  16. package/lib/commonjs/model/display-units.js +7 -1
  17. package/lib/commonjs/model/display-units.js.map +1 -1
  18. package/lib/commonjs/model/numeric-lanes.js +4 -0
  19. package/lib/commonjs/model/numeric-lanes.js.map +1 -1
  20. package/lib/commonjs/model/text-keys.js +4 -0
  21. package/lib/commonjs/model/text-keys.js.map +1 -1
  22. package/lib/commonjs/motion/entry-exit-builders.js +78 -1
  23. package/lib/commonjs/motion/entry-exit-builders.js.map +1 -1
  24. package/lib/commonjs/motion/preset-map.js +7 -0
  25. package/lib/commonjs/motion/preset-map.js.map +1 -1
  26. package/lib/commonjs/view/glyph-run.js +21 -2
  27. package/lib/commonjs/view/glyph-run.js.map +1 -1
  28. package/lib/commonjs/view/morph-viewport.js +4 -0
  29. package/lib/commonjs/view/morph-viewport.js.map +1 -1
  30. package/lib/commonjs/view/number-lane.js +5 -1
  31. package/lib/commonjs/view/number-lane.js.map +1 -1
  32. package/lib/commonjs/view/number-run.js +4 -0
  33. package/lib/commonjs/view/number-run.js.map +1 -1
  34. package/lib/commonjs/view/slots-run.js +258 -0
  35. package/lib/commonjs/view/slots-run.js.map +1 -0
  36. package/lib/commonjs/view/text-run.js +35 -3
  37. package/lib/commonjs/view/text-run.js.map +1 -1
  38. package/lib/module/hooks/use-display-units.js +2 -0
  39. package/lib/module/hooks/use-display-units.js.map +1 -1
  40. package/lib/module/hooks/use-inline-auto-width.js +44 -11
  41. package/lib/module/hooks/use-inline-auto-width.js.map +1 -1
  42. package/lib/module/hooks/use-morph-motion.js +2 -1
  43. package/lib/module/hooks/use-morph-motion.js.map +1 -1
  44. package/lib/module/hooks/use-morph-text-style.js +4 -0
  45. package/lib/module/hooks/use-morph-text-style.js.map +1 -1
  46. package/lib/module/hooks/use-numeric-lanes.js +1 -0
  47. package/lib/module/hooks/use-numeric-lanes.js.map +1 -1
  48. package/lib/module/hooks/use-text-glyphs.js +28 -7
  49. package/lib/module/hooks/use-text-glyphs.js.map +1 -1
  50. package/lib/module/index.js +56 -12
  51. package/lib/module/index.js.map +1 -1
  52. package/lib/module/model/display-units.js +7 -1
  53. package/lib/module/model/display-units.js.map +1 -1
  54. package/lib/module/model/numeric-lanes.js +5 -0
  55. package/lib/module/model/numeric-lanes.js.map +1 -1
  56. package/lib/module/model/text-keys.js +4 -0
  57. package/lib/module/model/text-keys.js.map +1 -1
  58. package/lib/module/motion/entry-exit-builders.js +75 -0
  59. package/lib/module/motion/entry-exit-builders.js.map +1 -1
  60. package/lib/module/motion/preset-map.js +7 -0
  61. package/lib/module/motion/preset-map.js.map +1 -1
  62. package/lib/module/view/glyph-run.js +21 -2
  63. package/lib/module/view/glyph-run.js.map +1 -1
  64. package/lib/module/view/morph-viewport.js +4 -0
  65. package/lib/module/view/morph-viewport.js.map +1 -1
  66. package/lib/module/view/number-lane.js +5 -1
  67. package/lib/module/view/number-lane.js.map +1 -1
  68. package/lib/module/view/number-run.js +4 -0
  69. package/lib/module/view/number-run.js.map +1 -1
  70. package/lib/module/view/slots-run.js +253 -0
  71. package/lib/module/view/slots-run.js.map +1 -0
  72. package/lib/module/view/text-run.js +36 -4
  73. package/lib/module/view/text-run.js.map +1 -1
  74. package/lib/typescript/commonjs/hooks/use-display-units.d.ts.map +1 -1
  75. package/lib/typescript/commonjs/hooks/use-inline-auto-width.d.ts +3 -1
  76. package/lib/typescript/commonjs/hooks/use-inline-auto-width.d.ts.map +1 -1
  77. package/lib/typescript/commonjs/hooks/use-morph-motion.d.ts.map +1 -1
  78. package/lib/typescript/commonjs/hooks/use-morph-text-style.d.ts.map +1 -1
  79. package/lib/typescript/commonjs/hooks/use-numeric-lanes.d.ts.map +1 -1
  80. package/lib/typescript/commonjs/hooks/use-text-glyphs.d.ts +2 -1
  81. package/lib/typescript/commonjs/hooks/use-text-glyphs.d.ts.map +1 -1
  82. package/lib/typescript/commonjs/index.d.ts +1 -3
  83. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  84. package/lib/typescript/commonjs/model/display-units.d.ts.map +1 -1
  85. package/lib/typescript/commonjs/model/numeric-lanes.d.ts.map +1 -1
  86. package/lib/typescript/commonjs/model/text-keys.d.ts.map +1 -1
  87. package/lib/typescript/commonjs/motion/entry-exit-builders.d.ts +13 -0
  88. package/lib/typescript/commonjs/motion/entry-exit-builders.d.ts.map +1 -1
  89. package/lib/typescript/commonjs/motion/preset-map.d.ts.map +1 -1
  90. package/lib/typescript/commonjs/types.d.ts +12 -2
  91. package/lib/typescript/commonjs/types.d.ts.map +1 -1
  92. package/lib/typescript/commonjs/view/glyph-run.d.ts +5 -2
  93. package/lib/typescript/commonjs/view/glyph-run.d.ts.map +1 -1
  94. package/lib/typescript/commonjs/view/morph-viewport.d.ts.map +1 -1
  95. package/lib/typescript/commonjs/view/number-lane.d.ts.map +1 -1
  96. package/lib/typescript/commonjs/view/number-run.d.ts.map +1 -1
  97. package/lib/typescript/commonjs/view/slots-run.d.ts +15 -0
  98. package/lib/typescript/commonjs/view/slots-run.d.ts.map +1 -0
  99. package/lib/typescript/commonjs/view/text-run.d.ts +5 -1
  100. package/lib/typescript/commonjs/view/text-run.d.ts.map +1 -1
  101. package/lib/typescript/module/hooks/use-display-units.d.ts.map +1 -1
  102. package/lib/typescript/module/hooks/use-inline-auto-width.d.ts +3 -1
  103. package/lib/typescript/module/hooks/use-inline-auto-width.d.ts.map +1 -1
  104. package/lib/typescript/module/hooks/use-morph-motion.d.ts.map +1 -1
  105. package/lib/typescript/module/hooks/use-morph-text-style.d.ts.map +1 -1
  106. package/lib/typescript/module/hooks/use-numeric-lanes.d.ts.map +1 -1
  107. package/lib/typescript/module/hooks/use-text-glyphs.d.ts +2 -1
  108. package/lib/typescript/module/hooks/use-text-glyphs.d.ts.map +1 -1
  109. package/lib/typescript/module/index.d.ts +1 -3
  110. package/lib/typescript/module/index.d.ts.map +1 -1
  111. package/lib/typescript/module/model/display-units.d.ts.map +1 -1
  112. package/lib/typescript/module/model/numeric-lanes.d.ts.map +1 -1
  113. package/lib/typescript/module/model/text-keys.d.ts.map +1 -1
  114. package/lib/typescript/module/motion/entry-exit-builders.d.ts +13 -0
  115. package/lib/typescript/module/motion/entry-exit-builders.d.ts.map +1 -1
  116. package/lib/typescript/module/motion/preset-map.d.ts.map +1 -1
  117. package/lib/typescript/module/types.d.ts +12 -2
  118. package/lib/typescript/module/types.d.ts.map +1 -1
  119. package/lib/typescript/module/view/glyph-run.d.ts +5 -2
  120. package/lib/typescript/module/view/glyph-run.d.ts.map +1 -1
  121. package/lib/typescript/module/view/morph-viewport.d.ts.map +1 -1
  122. package/lib/typescript/module/view/number-lane.d.ts.map +1 -1
  123. package/lib/typescript/module/view/number-run.d.ts.map +1 -1
  124. package/lib/typescript/module/view/slots-run.d.ts +15 -0
  125. package/lib/typescript/module/view/slots-run.d.ts.map +1 -0
  126. package/lib/typescript/module/view/text-run.d.ts +5 -1
  127. package/lib/typescript/module/view/text-run.d.ts.map +1 -1
  128. package/package.json +11 -2
  129. package/src/hooks/use-display-units.ts +1 -0
  130. package/src/hooks/use-inline-auto-width.ts +55 -12
  131. package/src/hooks/use-morph-motion.ts +2 -1
  132. package/src/hooks/use-morph-text-style.ts +3 -0
  133. package/src/hooks/use-numeric-lanes.ts +1 -0
  134. package/src/hooks/use-text-glyphs.ts +48 -10
  135. package/src/index.tsx +98 -17
  136. package/src/model/display-units.ts +4 -1
  137. package/src/model/numeric-lanes.ts +3 -0
  138. package/src/model/text-keys.ts +3 -0
  139. package/src/motion/entry-exit-builders.ts +73 -0
  140. package/src/motion/preset-map.ts +4 -0
  141. package/src/types.ts +14 -2
  142. package/src/view/glyph-run.tsx +38 -13
  143. package/src/view/morph-viewport.tsx +3 -0
  144. package/src/view/number-lane.tsx +7 -2
  145. package/src/view/number-run.tsx +3 -0
  146. package/src/view/slots-run.tsx +385 -0
  147. package/src/view/text-run.tsx +77 -6
@@ -3,8 +3,41 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.createShiftTransition = void 0;
6
+ exports.createShiftTransition = exports.createLeadingExitTransition = exports.createLeadingEnterTransition = void 0;
7
7
  var _reactNativeReanimated = require("react-native-reanimated");
8
+ // leading replacements use scale while first appearance uses the regular fade path
9
+ const createLeadingEnterTransition = ({
10
+ durationMs,
11
+ easing
12
+ }) => {
13
+ return () => {
14
+ "worklet";
15
+
16
+ return {
17
+ initialValues: {
18
+ opacity: 0,
19
+ transform: [{
20
+ scale: 0.5
21
+ }]
22
+ },
23
+ animations: {
24
+ opacity: (0, _reactNativeReanimated.withTiming)(1, {
25
+ duration: durationMs,
26
+ easing
27
+ }),
28
+ transform: [{
29
+ scale: (0, _reactNativeReanimated.withTiming)(1, {
30
+ duration: durationMs,
31
+ easing
32
+ })
33
+ }]
34
+ }
35
+ };
36
+ };
37
+ };
38
+
39
+ // one builder covers glyph opacity, travel, scale, and optional stagger timing
40
+ exports.createLeadingEnterTransition = createLeadingEnterTransition;
8
41
  const createShiftTransition = ({
9
42
  delayMs = 0,
10
43
  durationMs,
@@ -53,5 +86,49 @@ const createShiftTransition = ({
53
86
  };
54
87
  };
55
88
  };
89
+
90
+ // the shared swap flag lets an exiting worklet read the current transition type
56
91
  exports.createShiftTransition = createShiftTransition;
92
+ const createLeadingExitTransition = ({
93
+ durationMs,
94
+ easing,
95
+ leadingGap,
96
+ scale = false
97
+ }) => {
98
+ return values => {
99
+ "worklet";
100
+
101
+ const shouldScale = typeof scale === "object" ? scale.value > 0.5 : scale;
102
+ return {
103
+ initialValues: {
104
+ opacity: 1,
105
+ originX: values.currentOriginX,
106
+ ...(shouldScale ? {
107
+ transform: [{
108
+ scale: 1
109
+ }]
110
+ } : {})
111
+ },
112
+ animations: {
113
+ opacity: (0, _reactNativeReanimated.withTiming)(0, {
114
+ duration: durationMs,
115
+ easing
116
+ }),
117
+ originX: (0, _reactNativeReanimated.withTiming)(values.currentOriginX - values.currentWidth - leadingGap, {
118
+ duration: durationMs,
119
+ easing
120
+ }),
121
+ ...(shouldScale ? {
122
+ transform: [{
123
+ scale: (0, _reactNativeReanimated.withTiming)(0.5, {
124
+ duration: durationMs,
125
+ easing
126
+ })
127
+ }]
128
+ } : {})
129
+ }
130
+ };
131
+ };
132
+ };
133
+ exports.createLeadingExitTransition = createLeadingExitTransition;
57
134
  //# sourceMappingURL=entry-exit-builders.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNativeReanimated","require","createShiftTransition","delayMs","durationMs","easing","fromOpacity","toOpacity","fromTranslateY","toTranslateY","fromScale","toScale","animate","toValue","withDelay","withTiming","duration","initialValues","opacity","transform","translateY","scale","animations","exports"],"sourceRoot":"../../../src","sources":["motion/entry-exit-builders.ts"],"mappings":";;;;;;AAAA,IAAAA,sBAAA,GAAAC,OAAA;AAmBO,MAAMC,qBAAqB,GAAGA,CAAC;EACpCC,OAAO,GAAG,CAAC;EACXC,UAAU;EACVC,MAAM;EACNC,WAAW;EACXC,SAAS;EACTC,cAAc;EACdC,YAAY;EACZC,SAAS;EACTC;AACgB,CAAC,KAAiC;EAClD,OAAO,MAAM;IACX,SAAS;;IAET;IACA,MAAMC,OAAO,GAAIC,OAAe,IAC9BV,OAAO,GAAG,CAAC,GACP,IAAAW,gCAAS,EACPX,OAAO,EACP,IAAAY,iCAAU,EAACF,OAAO,EAAE;MAClBG,QAAQ,EAAEZ,UAAU;MACpBC;IACF,CAAC,CACH,CAAC,GACD,IAAAU,iCAAU,EAACF,OAAO,EAAE;MAClBG,QAAQ,EAAEZ,UAAU;MACpBC;IACF,CAAC,CAAC;IAER,MAAMY,aAAsC,GAAG;MAC7CC,OAAO,EAAEZ,WAAW;MACpBa,SAAS,EAAE,CACT;QAAEC,UAAU,EAAEZ;MAAe,CAAC,EAC9B;QAAEa,KAAK,EAAEX;MAAU,CAAC;IAExB,CAAC;IAED,MAAMY,UAAmC,GAAG;MAC1CJ,OAAO,EAAEN,OAAO,CAACL,SAAS,CAAC;MAC3BY,SAAS,EAAE,CACT;QAAEC,UAAU,EAAER,OAAO,CAACH,YAAY;MAAE,CAAC,EACrC;QAAEY,KAAK,EAAET,OAAO,CAACD,OAAO;MAAE,CAAC;IAE/B,CAAC;IAED,OAAO;MACLM,aAAa,EAAE;QACb,GAAGA;MACL,CAAC;MACDK,UAAU,EAAE;QACV,GAAGA;MACL;IACF,CAAC;EACH,CAAC;AACH,CAAC;AAACC,OAAA,CAAArB,qBAAA,GAAAA,qBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_reactNativeReanimated","require","createLeadingEnterTransition","durationMs","easing","initialValues","opacity","transform","scale","animations","withTiming","duration","exports","createShiftTransition","delayMs","fromOpacity","toOpacity","fromTranslateY","toTranslateY","fromScale","toScale","animate","toValue","withDelay","translateY","createLeadingExitTransition","leadingGap","values","shouldScale","value","originX","currentOriginX","currentWidth"],"sourceRoot":"../../../src","sources":["motion/entry-exit-builders.ts"],"mappings":"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","ignoreList":[]}
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.resolveMotionRecipe = exports.MOTION_PRESETS = void 0;
7
7
  var _reactNativeReanimated = require("react-native-reanimated");
8
+ // keep all presets on one curve family so layout and glyph motion agree
8
9
  const DEFAULT_CURVE = [0.19, 1, 0.22, 1];
9
10
  const MOTION_PRESETS = exports.MOTION_PRESETS = {
10
11
  default: {
@@ -27,8 +28,12 @@ const MOTION_PRESETS = exports.MOTION_PRESETS = {
27
28
  bounce: 0.3
28
29
  }
29
30
  };
31
+
32
+ // the public preset table uses seconds while reanimated timing uses milliseconds
30
33
  const toMilliseconds = seconds => Math.round(seconds * 1000);
31
34
  const toDampingRatio = bounce => Math.max(0.55, Math.min(1, 1 - bounce));
35
+
36
+ // spring and timing presets share the same opacity contract
32
37
  const createOpacityTransition = (fromOpacity, toOpacity, durationMs, easing) => {
33
38
  return () => {
34
39
  "worklet";
@@ -46,6 +51,8 @@ const createOpacityTransition = (fromOpacity, toOpacity, durationMs, easing) =>
46
51
  };
47
52
  };
48
53
  };
54
+
55
+ // convert a named preset into the builders consumed by every rendering variant
49
56
  const resolveMotionRecipe = (presetName = "default", durationOverride) => {
50
57
  const preset = MOTION_PRESETS[presetName];
51
58
  const durationMs = durationOverride ?? toMilliseconds(preset.duration);
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNativeReanimated","require","DEFAULT_CURVE","MOTION_PRESETS","exports","default","duration","ease","smooth","type","bounce","snappy","bouncy","toMilliseconds","seconds","Math","round","toDampingRatio","max","min","createOpacityTransition","fromOpacity","toOpacity","durationMs","easing","initialValues","opacity","animations","withTiming","resolveMotionRecipe","presetName","durationOverride","preset","dampingRatio","Easing","bezier","layoutTransition","LinearTransition","factory","enterTransition","exitTransition","driveNumber","toValue","delayMs","animation","withSpring","overshootClamping","withDelay","timingPreset","x1","y1","x2","y2"],"sourceRoot":"../../../src","sources":["motion/preset-map.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNativeReanimated","require","DEFAULT_CURVE","MOTION_PRESETS","exports","default","duration","ease","smooth","type","bounce","snappy","bouncy","toMilliseconds","seconds","Math","round","toDampingRatio","max","min","createOpacityTransition","fromOpacity","toOpacity","durationMs","easing","initialValues","opacity","animations","withTiming","resolveMotionRecipe","presetName","durationOverride","preset","dampingRatio","Easing","bezier","layoutTransition","LinearTransition","factory","enterTransition","exitTransition","driveNumber","toValue","delayMs","animation","withSpring","overshootClamping","withDelay","timingPreset","x1","y1","x2","y2"],"sourceRoot":"../../../src","sources":["motion/preset-map.ts"],"mappings":"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","ignoreList":[]}
@@ -25,17 +25,36 @@ const rowAlignStyles = {
25
25
  alignSelf: "flex-end"
26
26
  }
27
27
  };
28
+
29
+ // render text and inline elements through one animated token row
28
30
  const GlyphRun = exports.GlyphRun = /*#__PURE__*/_react.default.memo(({
29
31
  glyphs,
30
32
  layoutTransition,
31
33
  enterTransition,
34
+ elementEnterTransition,
32
35
  exitTransition,
36
+ elementExitTransition,
37
+ leadingGap,
33
38
  align,
34
39
  textStyle,
35
40
  className
36
- }) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
41
+ }) =>
42
+ /*#__PURE__*/
43
+ // each token keeps its own view so reanimated can animate only changed content
44
+ (0, _jsxRuntime.jsx)(_reactNative.View, {
37
45
  style: [rowStyle, rowAlignStyles[align]],
38
- children: glyphs.map(glyph => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.Text, {
46
+ children: glyphs.map((glyph, glyphIndex) => glyph.kind === "element" ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
47
+ layout: layoutTransition,
48
+ entering: elementEnterTransition ?? enterTransition,
49
+ exiting: elementExitTransition ?? exitTransition,
50
+ style: [{
51
+ alignItems: "center",
52
+ justifyContent: "center"
53
+ }, glyphIndex === 0 && (leadingGap ?? 0) > 0 ? {
54
+ marginRight: leadingGap
55
+ } : undefined],
56
+ children: glyph.element
57
+ }, glyph.id) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.Text, {
39
58
  layout: layoutTransition,
40
59
  entering: enterTransition,
41
60
  exiting: exitTransition,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_reactNativeReanimated","_jsxRuntime","e","__esModule","default","rowStyle","flexDirection","alignItems","alignSelf","rowAlignStyles","left","center","right","GlyphRun","exports","React","memo","glyphs","layoutTransition","enterTransition","exitTransition","align","textStyle","className","jsx","View","style","children","map","glyph","Text","layout","entering","exiting","value","id","displayName"],"sourceRoot":"../../../src","sources":["view/glyph-run.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,sBAAA,GAAAH,sBAAA,CAAAC,OAAA;AAA+C,IAAAG,WAAA,GAAAH,OAAA;AAAA,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAO/C,MAAMG,QAAQ,GAAG;EACfC,aAAa,EAAE,KAAK;EACpBC,UAAU,EAAE,QAAQ;EACpBC,SAAS,EAAE;AACb,CAAU;AAEV,MAAMC,cAAc,GAAG;EACrBC,IAAI,EAAE;IAAEF,SAAS,EAAE;EAAa,CAAC;EACjCG,MAAM,EAAE;IAAEH,SAAS,EAAE;EAAS,CAAC;EAC/BI,KAAK,EAAE;IAAEJ,SAAS,EAAE;EAAW;AACjC,CAAU;AAEH,MAAMK,QAAQ,GAAAC,OAAA,CAAAD,QAAA,gBAAGE,cAAK,CAACC,IAAI,CAChC,CAAC;EACCC,MAAM;EACNC,gBAAgB;EAChBC,eAAe;EACfC,cAAc;EACdC,KAAK;EACLC,SAAS;EACTC;AASD,CAAC,kBACE,IAAAtB,WAAA,CAAAuB,GAAA,EAACzB,YAAA,CAAA0B,IAAI;EAACC,KAAK,EAAE,CAACrB,QAAQ,EAAEI,cAAc,CAACY,KAAK,CAAC,CAAE;EAAAM,QAAA,EAE5CV,MAAM,CAACW,GAAG,CAAEC,KAAK,iBAChB,IAAA5B,WAAA,CAAAuB,GAAA,EAACxB,sBAAA,CAAAI,OAAQ,CAAC0B,IAAI;IAEZC,MAAM,EAAEb,gBAAiB;IACzBc,QAAQ,EAAEb,eAAgB;IAC1Bc,OAAO,EAAEb,cAAe;IACxBM,KAAK,EAAEJ,SAAU;IACjBC,SAAS,EAAEA,SAAU;IAAAI,QAAA,EAEpBE,KAAK,CAACK;EAAK,GAPPL,KAAK,CAACM,EAQE,CAChB;AAAC,CACE,CAEZ,CAAC;AAEDtB,QAAQ,CAACuB,WAAW,GAAG,UAAU","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_reactNativeReanimated","_jsxRuntime","e","__esModule","default","rowStyle","flexDirection","alignItems","alignSelf","rowAlignStyles","left","center","right","GlyphRun","exports","React","memo","glyphs","layoutTransition","enterTransition","elementEnterTransition","exitTransition","elementExitTransition","leadingGap","align","textStyle","className","jsx","View","style","children","map","glyph","glyphIndex","kind","layout","entering","exiting","justifyContent","marginRight","undefined","element","id","Text","value","displayName"],"sourceRoot":"../../../src","sources":["view/glyph-run.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,sBAAA,GAAAH,sBAAA,CAAAC,OAAA;AAA+C,IAAAG,WAAA,GAAAH,OAAA;AAAA,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAO/C,MAAMG,QAAQ,GAAG;EACfC,aAAa,EAAE,KAAK;EACpBC,UAAU,EAAE,QAAQ;EACpBC,SAAS,EAAE;AACb,CAAU;AAEV,MAAMC,cAAc,GAAG;EACrBC,IAAI,EAAE;IAAEF,SAAS,EAAE;EAAa,CAAC;EACjCG,MAAM,EAAE;IAAEH,SAAS,EAAE;EAAS,CAAC;EAC/BI,KAAK,EAAE;IAAEJ,SAAS,EAAE;EAAW;AACjC,CAAU;;AAEV;AACO,MAAMK,QAAQ,GAAAC,OAAA,CAAAD,QAAA,gBAAGE,cAAK,CAACC,IAAI,CAChC,CAAC;EACCC,MAAM;EACNC,gBAAgB;EAChBC,eAAe;EACfC,sBAAsB;EACtBC,cAAc;EACdC,qBAAqB;EACrBC,UAAU;EACVC,KAAK;EACLC,SAAS;EACTC;AAYD,CAAC;AAAA;AACA;AACE,IAAAzB,WAAA,CAAA0B,GAAA,EAAC5B,YAAA,CAAA6B,IAAI;EAACC,KAAK,EAAE,CAACxB,QAAQ,EAAEI,cAAc,CAACe,KAAK,CAAC,CAAE;EAAAM,QAAA,EAE5Cb,MAAM,CAACc,GAAG,CAAC,CAACC,KAAK,EAAEC,UAAU,KAC5BD,KAAK,CAACE,IAAI,KAAK,SAAS,gBACtB,IAAAjC,WAAA,CAAA0B,GAAA,EAAC3B,sBAAA,CAAAI,OAAQ,CAACwB,IAAI;IAEZO,MAAM,EAAEjB,gBAAiB;IACzBkB,QAAQ,EAAEhB,sBAAsB,IAAID,eAAgB;IACpDkB,OAAO,EAAEf,qBAAqB,IAAID,cAAe;IACjDQ,KAAK,EAAE,CACL;MAAEtB,UAAU,EAAE,QAAQ;MAAE+B,cAAc,EAAE;IAAS,CAAC,EAClDL,UAAU,KAAK,CAAC,IAAI,CAACV,UAAU,IAAI,CAAC,IAAI,CAAC,GACrC;MAAEgB,WAAW,EAAEhB;IAAW,CAAC,GAC3BiB,SAAS,CACb;IAAAV,QAAA,EAEDE,KAAK,CAACS;EAAO,GAXTT,KAAK,CAACU,EAYE,CAAC,gBAEhB,IAAAzC,WAAA,CAAA0B,GAAA,EAAC3B,sBAAA,CAAAI,OAAQ,CAACuC,IAAI;IAEZR,MAAM,EAAEjB,gBAAiB;IACzBkB,QAAQ,EAAEjB,eAAgB;IAC1BkB,OAAO,EAAEhB,cAAe;IACxBQ,KAAK,EAAEJ,SAAU;IACjBC,SAAS,EAAEA,SAAU;IAAAI,QAAA,EAEpBE,KAAK,CAACY;EAAK,GAPPZ,KAAK,CAACU,EAQE,CAEnB;AAAC,CACG,CAEZ,CAAC;AAED7B,QAAQ,CAACgC,WAAW,GAAG,UAAU","ignoreList":[]}
@@ -56,6 +56,7 @@ const viewportAlignStyles = {
56
56
  alignItems: "flex-end"
57
57
  }
58
58
  };
59
+ // separate hidden measurement from visible content while sharing the shell alignment
59
60
  const MorphViewport = exports.MorphViewport = /*#__PURE__*/_react.default.memo(({
60
61
  autoSize,
61
62
  clipToBounds,
@@ -65,7 +66,10 @@ const MorphViewport = exports.MorphViewport = /*#__PURE__*/_react.default.memo((
65
66
  measurement,
66
67
  children
67
68
  }) => {
69
+ // compute alignment once so the animated shell and its child share one layout contract
68
70
  const resolvedViewportStyle = (0, _react.useMemo)(() => [viewportStyle, viewportAlignStyles[align], clipToBounds ? clippedViewportStyle : unclippedViewportStyle], [align, clipToBounds]);
71
+
72
+ // keep measurement outside the visible viewport so it cannot affect accessibility or layout
69
73
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
70
74
  style: [shellStyle, shellAlignStyles[align], containerStyle],
71
75
  children: autoSize ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeReanimated","_interopRequireDefault","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","shellStyle","position","alignSelf","viewportStyle","measuredContentStyle","left","top","opacity","flexShrink","clippedViewportStyle","overflow","unclippedViewportStyle","fullWidthViewportStyle","width","shellAlignStyles","center","right","viewportAlignStyles","alignItems","MorphViewport","exports","React","memo","autoSize","clipToBounds","align","containerStyle","animatedWidthStyle","measurement","children","resolvedViewportStyle","useMemo","jsx","View","style","jsxs","Fragment","accessibilityElementsHidden","collapsable","importantForAccessibility","pointerEvents","displayName"],"sourceRoot":"../../../src","sources":["view/morph-viewport.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeReanimated","_interopRequireDefault","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","shellStyle","position","alignSelf","viewportStyle","measuredContentStyle","left","top","opacity","flexShrink","clippedViewportStyle","overflow","unclippedViewportStyle","fullWidthViewportStyle","width","shellAlignStyles","center","right","viewportAlignStyles","alignItems","MorphViewport","exports","React","memo","autoSize","clipToBounds","align","containerStyle","animatedWidthStyle","measurement","children","resolvedViewportStyle","useMemo","jsx","View","style","jsxs","Fragment","accessibilityElementsHidden","collapsable","importantForAccessibility","pointerEvents","displayName"],"sourceRoot":"../../../src","sources":["view/morph-viewport.tsx"],"mappings":"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","ignoreList":[]}
@@ -24,6 +24,7 @@ const laneTokenStyle = {
24
24
  top: 0,
25
25
  left: 0
26
26
  };
27
+ // render one place-value lane with a hidden layout probe and an animated token
27
28
  const NumberLane = exports.NumberLane = /*#__PURE__*/_react.default.memo(({
28
29
  unit,
29
30
  tokenKey,
@@ -36,6 +37,7 @@ const NumberLane = exports.NumberLane = /*#__PURE__*/_react.default.memo(({
36
37
  textStyle,
37
38
  className
38
39
  }) => {
40
+ // punctuation stays in place while digits travel by the shared numeric direction
39
41
  const usesDigitTravel = (0, _displayUnits.isAsciiDigit)(unit);
40
42
  const verticalOffset = direction > 0 ? travelDistance : direction < 0 ? -travelDistance : 0;
41
43
  const enterTransition = (0, _react.useMemo)(() => (0, _entryExitBuilders.createShiftTransition)({
@@ -60,6 +62,8 @@ const NumberLane = exports.NumberLane = /*#__PURE__*/_react.default.memo(({
60
62
  fromScale: 1,
61
63
  toScale: 0.6
62
64
  }), [delayMs, motionRecipe.durationMs, motionRecipe.easing, usesDigitTravel, verticalOffset]);
65
+
66
+ // prefix units do not need an absolute lane or a duplicate probe
63
67
  if (isLead) {
64
68
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
65
69
  style: textStyle,
@@ -68,7 +72,7 @@ const NumberLane = exports.NumberLane = /*#__PURE__*/_react.default.memo(({
68
72
  });
69
73
  }
70
74
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNativeReanimated.default.View, {
71
- layout: motionRecipe.layoutTransition,
75
+ layout: hasAnimated ? motionRecipe.layoutTransition : undefined,
72
76
  entering: hasAnimated ? motionRecipe.enterTransition : undefined,
73
77
  exiting: motionRecipe.exitTransition,
74
78
  style: laneStyle,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeReanimated","_interopRequireDefault","_displayUnits","_entryExitBuilders","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","laneStyle","position","alignSelf","laneProbeStyle","opacity","laneTokenStyle","top","left","NumberLane","exports","React","memo","unit","tokenKey","isLead","hasAnimated","delayMs","direction","travelDistance","motionRecipe","textStyle","className","usesDigitTravel","isAsciiDigit","verticalOffset","enterTransition","useMemo","createShiftTransition","durationMs","easing","fromOpacity","toOpacity","fromTranslateY","toTranslateY","fromScale","toScale","exitTransition","jsx","Text","style","children","jsxs","View","layout","layoutTransition","entering","undefined","exiting","displayName"],"sourceRoot":"../../../src","sources":["view/number-lane.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeReanimated","_interopRequireDefault","_displayUnits","_entryExitBuilders","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","laneStyle","position","alignSelf","laneProbeStyle","opacity","laneTokenStyle","top","left","NumberLane","exports","React","memo","unit","tokenKey","isLead","hasAnimated","delayMs","direction","travelDistance","motionRecipe","textStyle","className","usesDigitTravel","isAsciiDigit","verticalOffset","enterTransition","useMemo","createShiftTransition","durationMs","easing","fromOpacity","toOpacity","fromTranslateY","toTranslateY","fromScale","toScale","exitTransition","jsx","Text","style","children","jsxs","View","layout","layoutTransition","undefined","entering","exiting","displayName"],"sourceRoot":"../../../src","sources":["view/number-lane.tsx"],"mappings":"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","ignoreList":[]}
@@ -26,6 +26,7 @@ const rowAlignStyles = {
26
26
  alignSelf: "flex-end"
27
27
  }
28
28
  };
29
+ // arrange numeric lanes from left to right while the hook preserves their identities
29
30
  const NumberRun = exports.NumberRun = /*#__PURE__*/_react.default.memo(({
30
31
  value,
31
32
  motionRecipe,
@@ -35,6 +36,7 @@ const NumberRun = exports.NumberRun = /*#__PURE__*/_react.default.memo(({
35
36
  staggerMs,
36
37
  className
37
38
  }) => {
39
+ // the hook owns lane identity while this component owns row placement and timing
38
40
  const {
39
41
  units,
40
42
  laneKeys,
@@ -49,6 +51,8 @@ const NumberRun = exports.NumberRun = /*#__PURE__*/_react.default.memo(({
49
51
  hasAnimatedRef.current = true;
50
52
  lastValueRef.current = value;
51
53
  }
54
+
55
+ // scale travel from the font while keeping a minimum visible movement
52
56
  const travelDistance = (0, _react.useMemo)(() => Math.max(8, Math.round((fontSize ?? 16) * 0.4)), [fontSize]);
53
57
  const hasAnimated = hasAnimatedRef.current;
54
58
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_useNumericLanes","_numberLane","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","rowStyle","flexDirection","alignItems","alignSelf","rowAlignStyles","left","center","right","NumberRun","exports","React","memo","value","motionRecipe","align","fontSize","textStyle","staggerMs","className","units","laneKeys","direction","leadLength","useNumericLanes","lastValueRef","useRef","hasAnimatedRef","current","travelDistance","useMemo","Math","max","round","hasAnimated","jsx","View","style","children","map","unit","index","inLead","laneKey","length","NumberLane","tokenKey","isLead","delayMs","displayName"],"sourceRoot":"../../../src","sources":["view/number-run.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_useNumericLanes","_numberLane","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","rowStyle","flexDirection","alignItems","alignSelf","rowAlignStyles","left","center","right","NumberRun","exports","React","memo","value","motionRecipe","align","fontSize","textStyle","staggerMs","className","units","laneKeys","direction","leadLength","useNumericLanes","lastValueRef","useRef","hasAnimatedRef","current","travelDistance","useMemo","Math","max","round","hasAnimated","jsx","View","style","children","map","unit","index","inLead","laneKey","length","NumberLane","tokenKey","isLead","delayMs","displayName"],"sourceRoot":"../../../src","sources":["view/number-run.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,258 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SlotsRun = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _reactNativeReanimated = _interopRequireWildcard(require("react-native-reanimated"));
10
+ var _useNumericLanes = require("../hooks/use-numeric-lanes");
11
+ var _displayUnits = require("../model/display-units");
12
+ var _jsxRuntime = require("react/jsx-runtime");
13
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
14
+ const rowStyle = {
15
+ flexDirection: "row",
16
+ alignItems: "center",
17
+ alignSelf: "flex-start"
18
+ };
19
+ const rowAlignStyles = {
20
+ left: {
21
+ alignSelf: "flex-start"
22
+ },
23
+ center: {
24
+ alignSelf: "center"
25
+ },
26
+ right: {
27
+ alignSelf: "flex-end"
28
+ }
29
+ };
30
+ const slotFrameStyle = {
31
+ position: "relative",
32
+ alignSelf: "flex-start",
33
+ overflow: "hidden"
34
+ };
35
+ const slotProbeStyle = {
36
+ opacity: 0
37
+ };
38
+ const slotDigitStyle = {
39
+ textAlign: "center"
40
+ };
41
+ const REEL_MIN = -12;
42
+ const REEL_MAX = 22;
43
+ const REEL_POSITIONS = Array.from({
44
+ length: 30
45
+ }, (_, index) => index - 10);
46
+
47
+ // wrap reel positions so a bounded strip can represent an endless digit wheel
48
+ const mod = (value, divisor) => (value % divisor + divisor) % divisor;
49
+ // compare flattened style values without treating a new array as a visual change
50
+ const equalStyleValue = (left, right) => left === right || Array.isArray(left) && Array.isArray(right) && left.length === right.length && left.every((value, index) => value === right[index]);
51
+
52
+ // prevent every parent update from rebuilding the thirty-text reel
53
+ const areSlotReelPropsEqual = (previous, next) => {
54
+ if (previous.current !== next.current || previous.slotHeight !== next.slotHeight || previous.className !== next.className) {
55
+ return false;
56
+ }
57
+ const previousStyle = _reactNative.StyleSheet.flatten(previous.textStyle) ?? {};
58
+ const nextStyle = _reactNative.StyleSheet.flatten(next.textStyle) ?? {};
59
+ const previousKeys = Object.keys(previousStyle);
60
+ const nextKeys = Object.keys(nextStyle);
61
+ return previousKeys.length === nextKeys.length && previousKeys.every(key => equalStyleValue(previousStyle[key], nextStyle[key]));
62
+ };
63
+ const SlotReel = /*#__PURE__*/_react.default.memo(function SlotReel({
64
+ current,
65
+ slotHeight,
66
+ textStyle,
67
+ className
68
+ }) {
69
+ // translate one bounded reel instead of mounting a new animated digit per update
70
+ const animatedStyle = (0, _reactNativeReanimated.useAnimatedStyle)(() => ({
71
+ transform: [{
72
+ translateY: (-10 - current.value) * slotHeight
73
+ }]
74
+ }), [slotHeight]);
75
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
76
+ pointerEvents: "none",
77
+ style: [{
78
+ position: "absolute",
79
+ top: 0,
80
+ left: 0,
81
+ right: 0
82
+ }, animatedStyle],
83
+ children: REEL_POSITIONS.map((position, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
84
+ numberOfLines: 1,
85
+ style: [textStyle, slotDigitStyle, {
86
+ position: "absolute",
87
+ top: index * slotHeight,
88
+ left: 0,
89
+ right: 0,
90
+ height: slotHeight,
91
+ lineHeight: slotHeight
92
+ }],
93
+ className: className,
94
+ children: mod(position, 10)
95
+ }, position))
96
+ });
97
+ }, areSlotReelPropsEqual);
98
+ function SlotColumn({
99
+ digit,
100
+ direction,
101
+ delayMs,
102
+ animateIn,
103
+ motionRecipe,
104
+ slotHeight,
105
+ textStyle,
106
+ className
107
+ }) {
108
+ // cumulative positions let the reel move across digit wraparound without jumps
109
+ const spinInDistance = Math.max(digit, 1);
110
+ const initialDirection = direction || 1;
111
+ const initialValue = animateIn ? digit - spinInDistance * initialDirection : digit;
112
+ const current = (0, _reactNativeReanimated.useSharedValue)(initialValue);
113
+ const cumulativeRef = (0, _react.useRef)(digit);
114
+ const previousDigitRef = (0, _react.useRef)(digit);
115
+ const initialRef = (0, _react.useRef)(true);
116
+ const exitStateRef = (0, _react.useRef)({
117
+ digit,
118
+ direction,
119
+ motionRecipe,
120
+ target: digit
121
+ });
122
+ if (digit !== previousDigitRef.current) {
123
+ const previousDigit = previousDigitRef.current;
124
+ let digitDelta;
125
+ if (direction > 0) {
126
+ digitDelta = digit >= previousDigit ? digit - previousDigit : 10 - previousDigit + digit;
127
+ } else if (direction < 0) {
128
+ digitDelta = previousDigit >= digit ? -(previousDigit - digit) : -(10 - digit + previousDigit);
129
+ } else {
130
+ digitDelta = digit - previousDigit;
131
+ }
132
+ cumulativeRef.current += digitDelta;
133
+ previousDigitRef.current = digit;
134
+ }
135
+ exitStateRef.current = {
136
+ digit,
137
+ direction,
138
+ motionRecipe,
139
+ target: cumulativeRef.current
140
+ };
141
+ (0, _react.useEffect)(() => {
142
+ // continue the current reel from its last committed target when the column exits
143
+ return () => {
144
+ const exitState = exitStateRef.current;
145
+ const spinOutDistance = Math.max(exitState.digit, 1);
146
+ const exitDirection = exitState.direction || 1;
147
+ current.value = exitState.motionRecipe.driveNumber(exitState.target + spinOutDistance * exitDirection);
148
+ };
149
+ }, [current]);
150
+ (0, _react.useEffect)(() => {
151
+ // keep the reel bounded by recentring after enough cumulative turns
152
+ if (initialRef.current) {
153
+ initialRef.current = false;
154
+ if (!animateIn) {
155
+ return;
156
+ }
157
+ }
158
+ let target = cumulativeRef.current;
159
+ if (target < REEL_MIN + 4 || target > REEL_MAX - 4) {
160
+ const shift = Math.trunc(target / 10) * 10;
161
+ if (shift !== 0) {
162
+ target -= shift;
163
+ cumulativeRef.current = target;
164
+ current.value -= shift;
165
+ }
166
+ }
167
+ exitStateRef.current = {
168
+ digit,
169
+ direction,
170
+ motionRecipe,
171
+ target
172
+ };
173
+ current.value = motionRecipe.driveNumber(target, delayMs);
174
+ }, [animateIn, current, delayMs, digit, direction, motionRecipe]);
175
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
176
+ style: slotFrameStyle,
177
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
178
+ style: [textStyle, slotProbeStyle, {
179
+ lineHeight: slotHeight
180
+ }],
181
+ className: className,
182
+ children: "0"
183
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(SlotReel, {
184
+ current: current,
185
+ slotHeight: slotHeight,
186
+ textStyle: textStyle,
187
+ className: className
188
+ })]
189
+ });
190
+ }
191
+ // render text prefixes beside reusable digit reels
192
+ const SlotsRun = exports.SlotsRun = /*#__PURE__*/_react.default.memo(({
193
+ value,
194
+ motionRecipe,
195
+ align,
196
+ fontSize,
197
+ textStyle,
198
+ staggerMs,
199
+ className
200
+ }) => {
201
+ // numeric lane identity decides which columns stay mounted as values change
202
+ const {
203
+ units,
204
+ direction,
205
+ leadLength
206
+ } = (0, _useNumericLanes.useNumericLanes)(value);
207
+ const lastValueRef = (0, _react.useRef)(value);
208
+ const hasAnimatedRef = (0, _react.useRef)(false);
209
+ // derive one stable row height so every reel position shares the same baseline
210
+ const slotHeight = (0, _react.useMemo)(() => {
211
+ const flattenedStyle = _reactNative.StyleSheet.flatten(textStyle);
212
+ const resolvedLineHeight = typeof flattenedStyle?.lineHeight === "number" ? flattenedStyle.lineHeight : undefined;
213
+ const resolvedFontSize = typeof flattenedStyle?.fontSize === "number" ? flattenedStyle.fontSize : fontSize;
214
+ return Math.max(12, Math.ceil(resolvedLineHeight ?? (resolvedFontSize ?? 16) * 1.18));
215
+ }, [fontSize, textStyle]);
216
+ if (value !== lastValueRef.current) {
217
+ hasAnimatedRef.current = true;
218
+ lastValueRef.current = value;
219
+ }
220
+ const digitCount = units.filter(_displayUnits.isAsciiDigit).length;
221
+ let digitIndex = 0;
222
+ const hasAnimated = hasAnimatedRef.current;
223
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
224
+ style: [rowStyle, rowAlignStyles[align]],
225
+ children: units.map((unit, index) => {
226
+ const inLead = index < leadLength;
227
+ const laneKey = inLead ? `lead:${index}` : `slot:${units.length - 1 - index}`;
228
+ if (inLead || !(0, _displayUnits.isAsciiDigit)(unit)) {
229
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.Text, {
230
+ layout: hasAnimated ? motionRecipe.layoutTransition : undefined,
231
+ exiting: !inLead ? motionRecipe.exitTransition : undefined,
232
+ style: textStyle,
233
+ className: className,
234
+ children: unit
235
+ }, laneKey);
236
+ }
237
+ const delayMs = (digitCount - 1 - digitIndex) * staggerMs;
238
+ digitIndex += 1;
239
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
240
+ layout: hasAnimated ? motionRecipe.layoutTransition : undefined,
241
+ entering: hasAnimated ? motionRecipe.enterTransition : undefined,
242
+ exiting: motionRecipe.exitTransition,
243
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(SlotColumn, {
244
+ digit: Number(unit),
245
+ direction: direction,
246
+ delayMs: delayMs,
247
+ animateIn: hasAnimated,
248
+ motionRecipe: motionRecipe,
249
+ slotHeight: slotHeight,
250
+ textStyle: textStyle,
251
+ className: className
252
+ })
253
+ }, laneKey);
254
+ })
255
+ });
256
+ });
257
+ SlotsRun.displayName = "SlotsRun";
258
+ //# sourceMappingURL=slots-run.js.map