@react-native-motion-kit/text-motion 0.0.0-stage → 0.1.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 (252) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/LICENSE +20 -0
  3. package/README.ko.md +104 -0
  4. package/README.md +103 -2
  5. package/lib/module/accessibility/index.js +4 -0
  6. package/lib/module/accessibility/index.js.map +1 -0
  7. package/lib/module/accessibility/policies.js +39 -0
  8. package/lib/module/accessibility/policies.js.map +1 -0
  9. package/lib/module/controls/brand.js +4 -0
  10. package/lib/module/controls/brand.js.map +1 -0
  11. package/lib/module/controls/controls.js +28 -0
  12. package/lib/module/controls/controls.js.map +1 -0
  13. package/lib/module/controls/descriptors.js +55 -0
  14. package/lib/module/controls/descriptors.js.map +1 -0
  15. package/lib/module/controls/index.js +4 -0
  16. package/lib/module/controls/index.js.map +1 -0
  17. package/lib/module/effects/compose.js +48 -0
  18. package/lib/module/effects/compose.js.map +1 -0
  19. package/lib/module/effects/fade.js +15 -0
  20. package/lib/module/effects/fade.js.map +1 -0
  21. package/lib/module/effects/index.js +12 -0
  22. package/lib/module/effects/index.js.map +1 -0
  23. package/lib/module/effects/lineReveal.js +17 -0
  24. package/lib/module/effects/lineReveal.js.map +1 -0
  25. package/lib/module/effects/pulse.js +14 -0
  26. package/lib/module/effects/pulse.js.map +1 -0
  27. package/lib/module/effects/rise.js +14 -0
  28. package/lib/module/effects/rise.js.map +1 -0
  29. package/lib/module/effects/scale.js +15 -0
  30. package/lib/module/effects/scale.js.map +1 -0
  31. package/lib/module/effects/shake.js +14 -0
  32. package/lib/module/effects/shake.js.map +1 -0
  33. package/lib/module/effects/slide.js +15 -0
  34. package/lib/module/effects/slide.js.map +1 -0
  35. package/lib/module/effects/typewriter.js +19 -0
  36. package/lib/module/effects/typewriter.js.map +1 -0
  37. package/lib/module/effects/validation.js +10 -0
  38. package/lib/module/effects/validation.js.map +1 -0
  39. package/lib/module/index.js +10 -0
  40. package/lib/module/index.js.map +1 -0
  41. package/lib/module/package.json +1 -0
  42. package/lib/module/presets/index.js +35 -0
  43. package/lib/module/presets/index.js.map +1 -0
  44. package/lib/module/recipe/component.js +60 -0
  45. package/lib/module/recipe/component.js.map +1 -0
  46. package/lib/module/recipe/defineTextMotion.js +9 -0
  47. package/lib/module/recipe/defineTextMotion.js.map +1 -0
  48. package/lib/module/recipe/descriptors.js +60 -0
  49. package/lib/module/recipe/descriptors.js.map +1 -0
  50. package/lib/module/recipe/index.js +5 -0
  51. package/lib/module/recipe/index.js.map +1 -0
  52. package/lib/module/recipe/recipe.js +163 -0
  53. package/lib/module/recipe/recipe.js.map +1 -0
  54. package/lib/module/renderers/index.js +5 -0
  55. package/lib/module/renderers/index.js.map +1 -0
  56. package/lib/module/renderers/nativeText.js +494 -0
  57. package/lib/module/renderers/nativeText.js.map +1 -0
  58. package/lib/module/renderers/nativeTextControls.js +96 -0
  59. package/lib/module/renderers/nativeTextControls.js.map +1 -0
  60. package/lib/module/renderers/nativeTextLineLayout.js +290 -0
  61. package/lib/module/renderers/nativeTextLineLayout.js.map +1 -0
  62. package/lib/module/renderers/nativeTextPlayback.js +91 -0
  63. package/lib/module/renderers/nativeTextPlayback.js.map +1 -0
  64. package/lib/module/renderers/overlayText.js +543 -0
  65. package/lib/module/renderers/overlayText.js.map +1 -0
  66. package/lib/module/renderers/overlayTextLayout.js +182 -0
  67. package/lib/module/renderers/overlayTextLayout.js.map +1 -0
  68. package/lib/module/renderers/rendererMotion.js +264 -0
  69. package/lib/module/renderers/rendererMotion.js.map +1 -0
  70. package/lib/module/split/createToken.js +19 -0
  71. package/lib/module/split/createToken.js.map +1 -0
  72. package/lib/module/split/custom.js +57 -0
  73. package/lib/module/split/custom.js.map +1 -0
  74. package/lib/module/split/graphemes.js +25 -0
  75. package/lib/module/split/graphemes.js.map +1 -0
  76. package/lib/module/split/index.js +7 -0
  77. package/lib/module/split/index.js.map +1 -0
  78. package/lib/module/split/lines.js +43 -0
  79. package/lib/module/split/lines.js.map +1 -0
  80. package/lib/module/split/segmenter.js +74 -0
  81. package/lib/module/split/segmenter.js.map +1 -0
  82. package/lib/module/split/words.js +28 -0
  83. package/lib/module/split/words.js.map +1 -0
  84. package/lib/module/timeline/index.js +7 -0
  85. package/lib/module/timeline/index.js.map +1 -0
  86. package/lib/module/timeline/parallel.js +21 -0
  87. package/lib/module/timeline/parallel.js.map +1 -0
  88. package/lib/module/timeline/sequence.js +18 -0
  89. package/lib/module/timeline/sequence.js.map +1 -0
  90. package/lib/module/timeline/stagger.js +43 -0
  91. package/lib/module/timeline/stagger.js.map +1 -0
  92. package/lib/module/timeline/validation.js +24 -0
  93. package/lib/module/timeline/validation.js.map +1 -0
  94. package/lib/module/timeline/wave.js +25 -0
  95. package/lib/module/timeline/wave.js.map +1 -0
  96. package/lib/module/types/index.js +4 -0
  97. package/lib/module/types/index.js.map +1 -0
  98. package/lib/module/types/recipe.js +4 -0
  99. package/lib/module/types/recipe.js.map +1 -0
  100. package/lib/module/types/renderer.js +27 -0
  101. package/lib/module/types/renderer.js.map +1 -0
  102. package/lib/module/types/token.js +2 -0
  103. package/lib/module/types/token.js.map +1 -0
  104. package/lib/typescript/package.json +1 -0
  105. package/lib/typescript/src/accessibility/index.d.ts +2 -0
  106. package/lib/typescript/src/accessibility/index.d.ts.map +1 -0
  107. package/lib/typescript/src/accessibility/policies.d.ts +13 -0
  108. package/lib/typescript/src/accessibility/policies.d.ts.map +1 -0
  109. package/lib/typescript/src/controls/brand.d.ts +2 -0
  110. package/lib/typescript/src/controls/brand.d.ts.map +1 -0
  111. package/lib/typescript/src/controls/controls.d.ts +28 -0
  112. package/lib/typescript/src/controls/controls.d.ts.map +1 -0
  113. package/lib/typescript/src/controls/descriptors.d.ts +14 -0
  114. package/lib/typescript/src/controls/descriptors.d.ts.map +1 -0
  115. package/lib/typescript/src/controls/index.d.ts +3 -0
  116. package/lib/typescript/src/controls/index.d.ts.map +1 -0
  117. package/lib/typescript/src/effects/compose.d.ts +11 -0
  118. package/lib/typescript/src/effects/compose.d.ts.map +1 -0
  119. package/lib/typescript/src/effects/fade.d.ts +10 -0
  120. package/lib/typescript/src/effects/fade.d.ts.map +1 -0
  121. package/lib/typescript/src/effects/index.d.ts +10 -0
  122. package/lib/typescript/src/effects/index.d.ts.map +1 -0
  123. package/lib/typescript/src/effects/lineReveal.d.ts +11 -0
  124. package/lib/typescript/src/effects/lineReveal.d.ts.map +1 -0
  125. package/lib/typescript/src/effects/pulse.d.ts +8 -0
  126. package/lib/typescript/src/effects/pulse.d.ts.map +1 -0
  127. package/lib/typescript/src/effects/rise.d.ts +8 -0
  128. package/lib/typescript/src/effects/rise.d.ts.map +1 -0
  129. package/lib/typescript/src/effects/scale.d.ts +10 -0
  130. package/lib/typescript/src/effects/scale.d.ts.map +1 -0
  131. package/lib/typescript/src/effects/shake.d.ts +8 -0
  132. package/lib/typescript/src/effects/shake.d.ts.map +1 -0
  133. package/lib/typescript/src/effects/slide.d.ts +10 -0
  134. package/lib/typescript/src/effects/slide.d.ts.map +1 -0
  135. package/lib/typescript/src/effects/typewriter.d.ts +13 -0
  136. package/lib/typescript/src/effects/typewriter.d.ts.map +1 -0
  137. package/lib/typescript/src/effects/validation.d.ts +2 -0
  138. package/lib/typescript/src/effects/validation.d.ts.map +1 -0
  139. package/lib/typescript/src/index.d.ts +15 -0
  140. package/lib/typescript/src/index.d.ts.map +1 -0
  141. package/lib/typescript/src/presets/index.d.ts +10 -0
  142. package/lib/typescript/src/presets/index.d.ts.map +1 -0
  143. package/lib/typescript/src/recipe/component.d.ts +3 -0
  144. package/lib/typescript/src/recipe/component.d.ts.map +1 -0
  145. package/lib/typescript/src/recipe/defineTextMotion.d.ts +4 -0
  146. package/lib/typescript/src/recipe/defineTextMotion.d.ts.map +1 -0
  147. package/lib/typescript/src/recipe/descriptors.d.ts +15 -0
  148. package/lib/typescript/src/recipe/descriptors.d.ts.map +1 -0
  149. package/lib/typescript/src/recipe/index.d.ts +4 -0
  150. package/lib/typescript/src/recipe/index.d.ts.map +1 -0
  151. package/lib/typescript/src/recipe/recipe.d.ts +67 -0
  152. package/lib/typescript/src/recipe/recipe.d.ts.map +1 -0
  153. package/lib/typescript/src/renderers/index.d.ts +3 -0
  154. package/lib/typescript/src/renderers/index.d.ts.map +1 -0
  155. package/lib/typescript/src/renderers/nativeText.d.ts +13 -0
  156. package/lib/typescript/src/renderers/nativeText.d.ts.map +1 -0
  157. package/lib/typescript/src/renderers/nativeTextControls.d.ts +16 -0
  158. package/lib/typescript/src/renderers/nativeTextControls.d.ts.map +1 -0
  159. package/lib/typescript/src/renderers/nativeTextLineLayout.d.ts +84 -0
  160. package/lib/typescript/src/renderers/nativeTextLineLayout.d.ts.map +1 -0
  161. package/lib/typescript/src/renderers/nativeTextPlayback.d.ts +21 -0
  162. package/lib/typescript/src/renderers/nativeTextPlayback.d.ts.map +1 -0
  163. package/lib/typescript/src/renderers/overlayText.d.ts +13 -0
  164. package/lib/typescript/src/renderers/overlayText.d.ts.map +1 -0
  165. package/lib/typescript/src/renderers/overlayTextLayout.d.ts +36 -0
  166. package/lib/typescript/src/renderers/overlayTextLayout.d.ts.map +1 -0
  167. package/lib/typescript/src/renderers/rendererMotion.d.ts +53 -0
  168. package/lib/typescript/src/renderers/rendererMotion.d.ts.map +1 -0
  169. package/lib/typescript/src/split/createToken.d.ts +11 -0
  170. package/lib/typescript/src/split/createToken.d.ts.map +1 -0
  171. package/lib/typescript/src/split/custom.d.ts +17 -0
  172. package/lib/typescript/src/split/custom.d.ts.map +1 -0
  173. package/lib/typescript/src/split/graphemes.d.ts +4 -0
  174. package/lib/typescript/src/split/graphemes.d.ts.map +1 -0
  175. package/lib/typescript/src/split/index.d.ts +5 -0
  176. package/lib/typescript/src/split/index.d.ts.map +1 -0
  177. package/lib/typescript/src/split/lines.d.ts +4 -0
  178. package/lib/typescript/src/split/lines.d.ts.map +1 -0
  179. package/lib/typescript/src/split/segmenter.d.ts +18 -0
  180. package/lib/typescript/src/split/segmenter.d.ts.map +1 -0
  181. package/lib/typescript/src/split/words.d.ts +4 -0
  182. package/lib/typescript/src/split/words.d.ts.map +1 -0
  183. package/lib/typescript/src/timeline/index.d.ts +5 -0
  184. package/lib/typescript/src/timeline/index.d.ts.map +1 -0
  185. package/lib/typescript/src/timeline/parallel.d.ts +4 -0
  186. package/lib/typescript/src/timeline/parallel.d.ts.map +1 -0
  187. package/lib/typescript/src/timeline/sequence.d.ts +4 -0
  188. package/lib/typescript/src/timeline/sequence.d.ts.map +1 -0
  189. package/lib/typescript/src/timeline/stagger.d.ts +11 -0
  190. package/lib/typescript/src/timeline/stagger.d.ts.map +1 -0
  191. package/lib/typescript/src/timeline/validation.d.ts +4 -0
  192. package/lib/typescript/src/timeline/validation.d.ts.map +1 -0
  193. package/lib/typescript/src/timeline/wave.d.ts +11 -0
  194. package/lib/typescript/src/timeline/wave.d.ts.map +1 -0
  195. package/lib/typescript/src/types/index.d.ts +6 -0
  196. package/lib/typescript/src/types/index.d.ts.map +1 -0
  197. package/lib/typescript/src/types/recipe.d.ts +123 -0
  198. package/lib/typescript/src/types/recipe.d.ts.map +1 -0
  199. package/lib/typescript/src/types/renderer.d.ts +51 -0
  200. package/lib/typescript/src/types/renderer.d.ts.map +1 -0
  201. package/lib/typescript/src/types/token.d.ts +35 -0
  202. package/lib/typescript/src/types/token.d.ts.map +1 -0
  203. package/package.json +117 -3
  204. package/src/accessibility/index.ts +7 -0
  205. package/src/accessibility/policies.ts +60 -0
  206. package/src/controls/brand.ts +3 -0
  207. package/src/controls/controls.ts +41 -0
  208. package/src/controls/descriptors.ts +83 -0
  209. package/src/controls/index.ts +2 -0
  210. package/src/effects/compose.ts +98 -0
  211. package/src/effects/fade.ts +22 -0
  212. package/src/effects/index.ts +9 -0
  213. package/src/effects/lineReveal.ts +28 -0
  214. package/src/effects/pulse.ts +19 -0
  215. package/src/effects/rise.ts +19 -0
  216. package/src/effects/scale.ts +22 -0
  217. package/src/effects/shake.ts +19 -0
  218. package/src/effects/slide.ts +22 -0
  219. package/src/effects/typewriter.ts +16 -0
  220. package/src/effects/validation.ts +9 -0
  221. package/src/index.tsx +46 -0
  222. package/src/presets/index.ts +42 -0
  223. package/src/recipe/component.tsx +88 -0
  224. package/src/recipe/defineTextMotion.ts +6 -0
  225. package/src/recipe/descriptors.ts +158 -0
  226. package/src/recipe/index.ts +3 -0
  227. package/src/recipe/recipe.ts +359 -0
  228. package/src/renderers/index.ts +2 -0
  229. package/src/renderers/nativeText.tsx +813 -0
  230. package/src/renderers/nativeTextControls.ts +131 -0
  231. package/src/renderers/nativeTextLineLayout.ts +495 -0
  232. package/src/renderers/nativeTextPlayback.ts +204 -0
  233. package/src/renderers/overlayText.tsx +945 -0
  234. package/src/renderers/overlayTextLayout.ts +312 -0
  235. package/src/renderers/rendererMotion.ts +483 -0
  236. package/src/split/createToken.ts +26 -0
  237. package/src/split/custom.ts +92 -0
  238. package/src/split/graphemes.ts +27 -0
  239. package/src/split/index.ts +9 -0
  240. package/src/split/lines.ts +35 -0
  241. package/src/split/segmenter.ts +111 -0
  242. package/src/split/words.ts +28 -0
  243. package/src/timeline/index.ts +4 -0
  244. package/src/timeline/parallel.ts +30 -0
  245. package/src/timeline/sequence.ts +29 -0
  246. package/src/timeline/stagger.ts +60 -0
  247. package/src/timeline/validation.ts +29 -0
  248. package/src/timeline/wave.ts +34 -0
  249. package/src/types/index.ts +34 -0
  250. package/src/types/recipe.ts +195 -0
  251. package/src/types/renderer.ts +91 -0
  252. package/src/types/token.ts +39 -0
@@ -0,0 +1,494 @@
1
+ "use strict";
2
+
3
+ import { useLayoutEffect, useRef, createElement as _createElement } from 'react';
4
+ import { StyleSheet, Text, View } from 'react-native';
5
+ import { createAnimatedComponent, useAnimatedStyle, useReducedMotion, useSharedValue } from 'react-native-reanimated';
6
+ import { createHiddenTokenAccessibilityProps, createParentAccessibilityProps, parentLabelPolicy, resolveAccessibleText } from "../accessibility/index.js";
7
+ import { createTextMotionRendererHandle } from "../recipe/descriptors.js";
8
+ import { useNativeTextControlsPlayback } from "./nativeTextControls.js";
9
+ import { areNativeTextPlaybackRunsEqual, createNativeTextPlaybackRun } from "./nativeTextPlayback.js";
10
+ import { clampTextMotionProgress, createTextMotionControlledProgressPlan, createTextMotionControlledTimelineSpan, createTextMotionDelaySecondsByItemIndex, createTextMotionItemMotion, createTextMotionProgressAnimation, createTextMotionStyleTransformStatePair, readTextMotionProgressForAnimatedStyle, shouldRenderTextMotionFinalState } from "./rendererMotion.js";
11
+ import { jsx as _jsx } from "react/jsx-runtime";
12
+ const AnimatedView = createAnimatedComponent(View);
13
+ const TEXT_ALIGN_TO_JUSTIFY_CONTENT = {
14
+ auto: 'flex-start',
15
+ center: 'center',
16
+ justify: 'flex-start',
17
+ left: 'flex-start',
18
+ right: 'flex-end'
19
+ };
20
+ const NATIVE_TEXT_LINE_BREAK_PATTERN = /\r\n|\n/g;
21
+ const NATIVE_TEXT_LINE_BREAK_MARKER_STYLE = {
22
+ flexBasis: '100%',
23
+ height: 0,
24
+ width: '100%'
25
+ };
26
+ const NATIVE_TEXT_BLANK_LINE_SPACER_STYLE = {
27
+ flexBasis: '100%',
28
+ opacity: 0,
29
+ width: '100%'
30
+ };
31
+ const NATIVE_TEXT_BLANK_LINE_SPACER_TEXT = ' ';
32
+ const NATIVE_TEXT_ANIMATED_TOKEN_CONTAINER_STYLE = {
33
+ overflow: 'visible'
34
+ };
35
+ function shouldAnimateToken(token) {
36
+ return token.text.trim().length > 0;
37
+ }
38
+ function createMotionIndexByTokenId(tokens) {
39
+ const motionTokens = tokens.filter(shouldAnimateToken);
40
+ const motionIndexByTokenId = new Map(motionTokens.map((token, motionIndex) => [token.id, motionIndex]));
41
+ return {
42
+ motionCount: motionTokens.length,
43
+ motionIndexByTokenId
44
+ };
45
+ }
46
+ function createTokenDelaySecondsByMotionIndex(recipe, count) {
47
+ return createTextMotionDelaySecondsByItemIndex(recipe, count);
48
+ }
49
+ function createTokenMotion(recipe, motionIndex, styleState, delaySecondsByMotionIndex) {
50
+ return createTextMotionItemMotion(recipe, styleState, delaySecondsByMotionIndex[motionIndex] ?? 0);
51
+ }
52
+ function createControlledProgressPlan(motionIndex, delaySecondsByMotionIndex, totalTimelineSpan) {
53
+ return createTextMotionControlledProgressPlan(motionIndex, delaySecondsByMotionIndex, totalTimelineSpan);
54
+ }
55
+ function createNativeTextTextFragment(token, text, textFragmentIndex) {
56
+ return {
57
+ kind: 'text',
58
+ key: textFragmentIndex === 0 ? token.id : `${token.id}:text:${textFragmentIndex}`,
59
+ text,
60
+ textFragmentIndex,
61
+ token
62
+ };
63
+ }
64
+ function createNativeTextLineBreakFragment(token, lineBreakIndex, preservesLineHeight) {
65
+ return {
66
+ kind: 'line-break',
67
+ key: `${token.id}:line-break:${lineBreakIndex}`,
68
+ preservesLineHeight
69
+ };
70
+ }
71
+ function hasNativeTextLineContent(text) {
72
+ return text.replace(NATIVE_TEXT_LINE_BREAK_PATTERN, '').length > 0;
73
+ }
74
+ function hasNativeTextLineContentAfter(sourceText, sourceIndex) {
75
+ return hasNativeTextLineContent(sourceText.slice(sourceIndex));
76
+ }
77
+ function createNativeTextTokenRenderFragments(token, sourceText, currentLineHasText) {
78
+ if (!token.text.includes('\n')) {
79
+ return {
80
+ currentLineHasText: currentLineHasText || token.text.length > 0,
81
+ fragments: [createNativeTextTextFragment(token, token.text, 0)]
82
+ };
83
+ }
84
+ const lineBreaks = Array.from(token.text.matchAll(NATIVE_TEXT_LINE_BREAK_PATTERN));
85
+ const initialAccumulator = {
86
+ cursor: 0,
87
+ currentLineHasText,
88
+ fragments: [],
89
+ textFragmentIndex: 0
90
+ };
91
+ const result = lineBreaks.reduce((accumulator, lineBreak, lineBreakIndex) => {
92
+ const start = lineBreak.index ?? accumulator.cursor;
93
+ const lineBreakEnd = start + lineBreak[0].length;
94
+ const textBeforeLineBreak = token.text.slice(accumulator.cursor, start);
95
+ const textFragment = textBeforeLineBreak.length > 0 ? [createNativeTextTextFragment(token, textBeforeLineBreak, accumulator.textFragmentIndex)] : [];
96
+ const lineHasText = accumulator.currentLineHasText || textBeforeLineBreak.length > 0;
97
+ const hasTextAfterLineBreak = hasNativeTextLineContentAfter(sourceText, token.sourceRange.start + lineBreakEnd);
98
+ return {
99
+ cursor: lineBreakEnd,
100
+ currentLineHasText: false,
101
+ fragments: [...accumulator.fragments, ...textFragment, createNativeTextLineBreakFragment(token, lineBreakIndex, !lineHasText || !hasTextAfterLineBreak)],
102
+ textFragmentIndex: accumulator.textFragmentIndex + textFragment.length
103
+ };
104
+ }, initialAccumulator);
105
+ const trailingText = token.text.slice(result.cursor);
106
+ if (trailingText.length === 0) {
107
+ return {
108
+ currentLineHasText: result.currentLineHasText,
109
+ fragments: result.fragments
110
+ };
111
+ }
112
+ return {
113
+ currentLineHasText: true,
114
+ fragments: [...result.fragments, createNativeTextTextFragment(token, trailingText, result.textFragmentIndex)]
115
+ };
116
+ }
117
+ function createNativeTextRenderFragments(tokens, sourceText) {
118
+ const result = tokens.reduce((accumulator, token) => {
119
+ const tokenResult = createNativeTextTokenRenderFragments(token, sourceText, accumulator.currentLineHasText);
120
+ return {
121
+ currentLineHasText: tokenResult.currentLineHasText,
122
+ fragments: [...accumulator.fragments, ...tokenResult.fragments]
123
+ };
124
+ }, {
125
+ currentLineHasText: false,
126
+ fragments: []
127
+ });
128
+ return result.fragments.map((fragment, renderIndex) => ({
129
+ ...fragment,
130
+ renderIndex
131
+ }));
132
+ }
133
+ function createNativeTextFragmentTestID(prefix, fragment) {
134
+ if (!prefix) {
135
+ return undefined;
136
+ }
137
+ if (fragment.textFragmentIndex === 0) {
138
+ return `${prefix}-${fragment.token.index}`;
139
+ }
140
+ return `${prefix}-${fragment.token.index}-${fragment.textFragmentIndex}`;
141
+ }
142
+ function createNativeTextLineBreakTestID(prefix, fragment) {
143
+ return prefix ? `${prefix}-line-break-${fragment.renderIndex}` : undefined;
144
+ }
145
+ function StaticNativeTextToken({
146
+ children,
147
+ style,
148
+ ...tokenProps
149
+ }) {
150
+ return /*#__PURE__*/_jsx(Text, {
151
+ ...tokenProps,
152
+ style: style,
153
+ children: children
154
+ });
155
+ }
156
+ function splitAnimatedTokenProps({
157
+ accessibilityElementsHidden,
158
+ accessible,
159
+ importantForAccessibility,
160
+ testID,
161
+ ...textProps
162
+ }) {
163
+ return {
164
+ containerProps: {
165
+ accessibilityElementsHidden,
166
+ accessible,
167
+ importantForAccessibility,
168
+ testID
169
+ },
170
+ textProps
171
+ };
172
+ }
173
+ function AnimatedNativeTextTokenContent({
174
+ children,
175
+ style,
176
+ ...tokenProps
177
+ }) {
178
+ return /*#__PURE__*/_jsx(Text, {
179
+ ...tokenProps,
180
+ style: style,
181
+ children: children
182
+ });
183
+ }
184
+ function useNativeTextAnimatedStyle(options) {
185
+ const {
186
+ controlled,
187
+ progress,
188
+ renderFinalState,
189
+ tokenMotion
190
+ } = options;
191
+ const initialOpacity = tokenMotion.initial.opacity;
192
+ const initialScale = tokenMotion.initial.scale;
193
+ const initialTranslateX = tokenMotion.initial.translateX;
194
+ const initialTranslateY = tokenMotion.initial.translateY;
195
+ const targetOpacity = tokenMotion.target.opacity;
196
+ const targetScale = tokenMotion.target.scale;
197
+ const targetTranslateX = tokenMotion.target.translateX;
198
+ const targetTranslateY = tokenMotion.target.translateY;
199
+ const pulseScale = tokenMotion.pulseScale;
200
+ const revealOnStart = tokenMotion.revealOnStart === true;
201
+ const itemDelaySeconds = controlled ? options.controlledProgressPlan.itemDelaySeconds : 0;
202
+ const totalTimelineSpan = controlled ? options.controlledProgressPlan.totalTimelineSpan : 1;
203
+ return useAnimatedStyle(() => {
204
+ const current = readTextMotionProgressForAnimatedStyle({
205
+ controlledProgressPlan: controlled ? {
206
+ itemDelaySeconds,
207
+ totalTimelineSpan
208
+ } : undefined,
209
+ progress,
210
+ renderFinalState
211
+ });
212
+ const clampedCurrent = clampTextMotionProgress(current);
213
+ const baseScale = initialScale + (targetScale - initialScale) * current;
214
+ const pulseProgress = 1 - Math.abs(clampedCurrent * 2 - 1);
215
+ const pulseMultiplier = 1 + (pulseScale - 1) * pulseProgress;
216
+ return {
217
+ opacity: revealOnStart && current <= 0 ? 0 : initialOpacity + (targetOpacity - initialOpacity) * current,
218
+ transform: [{
219
+ translateX: initialTranslateX + (targetTranslateX - initialTranslateX) * current
220
+ }, {
221
+ translateY: initialTranslateY + (targetTranslateY - initialTranslateY) * current
222
+ }, {
223
+ scale: baseScale * pulseMultiplier
224
+ }]
225
+ };
226
+ }, [initialOpacity, initialScale, initialTranslateX, initialTranslateY, controlled, progress, pulseScale, renderFinalState, revealOnStart, targetOpacity, targetScale, targetTranslateX, targetTranslateY, itemDelaySeconds, totalTimelineSpan]);
227
+ }
228
+ function ControlledAnimatedNativeTextToken({
229
+ children,
230
+ controlledProgress,
231
+ controlledProgressPlan,
232
+ style,
233
+ tokenMotion,
234
+ ...tokenProps
235
+ }) {
236
+ const reducedMotion = tokenMotion.reducedMotion;
237
+ const reducedMotionEnabled = useReducedMotion();
238
+ const renderFinalState = shouldRenderTextMotionFinalState(reducedMotionEnabled, reducedMotion);
239
+ const {
240
+ containerProps,
241
+ textProps
242
+ } = splitAnimatedTokenProps(tokenProps);
243
+ const animatedStyle = useNativeTextAnimatedStyle({
244
+ controlled: true,
245
+ controlledProgressPlan,
246
+ progress: controlledProgress,
247
+ renderFinalState,
248
+ tokenMotion
249
+ });
250
+ return /*#__PURE__*/_jsx(AnimatedView, {
251
+ ...containerProps,
252
+ style: [NATIVE_TEXT_ANIMATED_TOKEN_CONTAINER_STYLE, animatedStyle],
253
+ children: /*#__PURE__*/_jsx(AnimatedNativeTextTokenContent, {
254
+ ...textProps,
255
+ style: style,
256
+ children: children
257
+ })
258
+ });
259
+ }
260
+ function UncontrolledAnimatedNativeTextToken({
261
+ children,
262
+ controls,
263
+ playbackText,
264
+ style,
265
+ tokenMotion,
266
+ ...tokenProps
267
+ }) {
268
+ const reducedMotion = tokenMotion.reducedMotion;
269
+ const reducedMotionEnabled = useReducedMotion();
270
+ const renderFinalState = shouldRenderTextMotionFinalState(reducedMotionEnabled, reducedMotion);
271
+ const progress = useSharedValue(renderFinalState ? 1 : 0);
272
+ const playbackRun = createNativeTextPlaybackRun(tokenMotion, renderFinalState, playbackText);
273
+ const previousPlaybackRun = useRef(undefined);
274
+ const {
275
+ containerProps,
276
+ textProps
277
+ } = splitAnimatedTokenProps(tokenProps);
278
+ const animatedStyle = useNativeTextAnimatedStyle({
279
+ controlled: false,
280
+ progress,
281
+ renderFinalState,
282
+ tokenMotion
283
+ });
284
+ useLayoutEffect(() => {
285
+ if (areNativeTextPlaybackRunsEqual(previousPlaybackRun.current, playbackRun)) {
286
+ return;
287
+ }
288
+ previousPlaybackRun.current = playbackRun;
289
+ if (playbackRun.renderFinalState) {
290
+ progress.value = 1;
291
+ return;
292
+ }
293
+ progress.value = 0;
294
+ progress.value = createTextMotionProgressAnimation(playbackRun);
295
+ });
296
+ useNativeTextControlsPlayback({
297
+ controls,
298
+ createProgressAnimation: createTextMotionProgressAnimation,
299
+ progress,
300
+ renderFinalState,
301
+ tokenMotion
302
+ });
303
+ return /*#__PURE__*/_jsx(AnimatedView, {
304
+ ...containerProps,
305
+ style: [NATIVE_TEXT_ANIMATED_TOKEN_CONTAINER_STYLE, animatedStyle],
306
+ children: /*#__PURE__*/_jsx(AnimatedNativeTextTokenContent, {
307
+ ...textProps,
308
+ style: style,
309
+ children: children
310
+ })
311
+ });
312
+ }
313
+ function NativeTextToken(props) {
314
+ if (!props.tokenMotion) {
315
+ const {
316
+ tokenMotion: _tokenMotion,
317
+ ...tokenProps
318
+ } = props;
319
+ return /*#__PURE__*/_jsx(StaticNativeTextToken, {
320
+ ...tokenProps
321
+ });
322
+ }
323
+ if ('controlledProgress' in props) {
324
+ const {
325
+ controlledProgress,
326
+ controlledProgressPlan,
327
+ tokenMotion,
328
+ ...tokenProps
329
+ } = props;
330
+ return /*#__PURE__*/_jsx(ControlledAnimatedNativeTextToken, {
331
+ ...tokenProps,
332
+ controlledProgress: controlledProgress,
333
+ controlledProgressPlan: controlledProgressPlan,
334
+ tokenMotion: tokenMotion
335
+ });
336
+ }
337
+ const {
338
+ controls,
339
+ playbackText,
340
+ tokenMotion,
341
+ ...tokenProps
342
+ } = props;
343
+ return /*#__PURE__*/_jsx(UncontrolledAnimatedNativeTextToken, {
344
+ ...tokenProps,
345
+ controls: controls,
346
+ playbackText: playbackText,
347
+ tokenMotion: tokenMotion
348
+ });
349
+ }
350
+ function NativeTextLineBreak({
351
+ preservesLineHeight,
352
+ testID,
353
+ textStyle,
354
+ tokenTextProps
355
+ }) {
356
+ if (preservesLineHeight) {
357
+ return /*#__PURE__*/_jsx(Text, {
358
+ ...tokenTextProps,
359
+ accessibilityElementsHidden: true,
360
+ accessible: false,
361
+ importantForAccessibility: "no-hide-descendants",
362
+ style: [textStyle, NATIVE_TEXT_BLANK_LINE_SPACER_STYLE],
363
+ testID: testID,
364
+ children: NATIVE_TEXT_BLANK_LINE_SPACER_TEXT
365
+ });
366
+ }
367
+ return /*#__PURE__*/_jsx(View, {
368
+ accessibilityElementsHidden: true,
369
+ accessible: false,
370
+ importantForAccessibility: "no-hide-descendants",
371
+ style: NATIVE_TEXT_LINE_BREAK_MARKER_STYLE,
372
+ testID: testID
373
+ });
374
+ }
375
+ function resolveJustifyContent(style) {
376
+ const textAlign = StyleSheet.flatten(style)?.textAlign;
377
+ return textAlign ? TEXT_ALIGN_TO_JUSTIFY_CONTENT[textAlign] : 'flex-start';
378
+ }
379
+ function createContainerStyle(style) {
380
+ return {
381
+ flexDirection: 'row',
382
+ flexWrap: 'wrap',
383
+ justifyContent: resolveJustifyContent(style)
384
+ };
385
+ }
386
+ function createContainerProps(textProps, parentAccessibilityProps) {
387
+ return {
388
+ accessibilityActions: textProps?.accessibilityActions,
389
+ accessibilityHint: textProps?.accessibilityHint,
390
+ accessibilityLabel: textProps?.accessibilityLabel ?? parentAccessibilityProps.accessibilityLabel,
391
+ accessibilityLanguage: textProps?.accessibilityLanguage,
392
+ accessibilityRole: textProps?.accessibilityRole,
393
+ accessibilityState: textProps?.accessibilityState,
394
+ accessibilityValue: textProps?.accessibilityValue,
395
+ accessible: parentAccessibilityProps.accessible,
396
+ nativeID: textProps?.nativeID,
397
+ onAccessibilityAction: textProps?.onAccessibilityAction,
398
+ testID: textProps?.testID
399
+ };
400
+ }
401
+ function createTokenTextProps(textProps) {
402
+ return {
403
+ allowFontScaling: textProps?.allowFontScaling,
404
+ maxFontSizeMultiplier: textProps?.maxFontSizeMultiplier
405
+ };
406
+ }
407
+ function createNativeTextRendererComponent(options) {
408
+ function NativeTextRenderer({
409
+ children,
410
+ recipe,
411
+ textProps,
412
+ tokens
413
+ }) {
414
+ const text = typeof children === 'string' ? children : '';
415
+ const textStyle = textProps?.style;
416
+ const policy = recipe.accessibility ?? parentLabelPolicy();
417
+ const accessibilityLabel = resolveAccessibleText(text, tokens);
418
+ const parentAccessibilityProps = createParentAccessibilityProps(policy, accessibilityLabel);
419
+ const tokenAccessibilityProps = createHiddenTokenAccessibilityProps(policy);
420
+ const containerProps = createContainerProps(textProps, parentAccessibilityProps);
421
+ const tokenTextProps = createTokenTextProps(textProps);
422
+ const styleState = createTextMotionStyleTransformStatePair(recipe.effects, 'nativeText()');
423
+ const {
424
+ motionCount,
425
+ motionIndexByTokenId
426
+ } = createMotionIndexByTokenId(tokens);
427
+ const delaySecondsByMotionIndex = createTokenDelaySecondsByMotionIndex(recipe, motionCount);
428
+ const totalTimelineSpan = createTextMotionControlledTimelineSpan(delaySecondsByMotionIndex);
429
+ const externalProgress = textProps?.progress;
430
+ const controls = textProps?.controls;
431
+ const fragments = createNativeTextRenderFragments(tokens, text);
432
+ if (externalProgress && controls) {
433
+ throw new Error('@react-native-motion-kit/text-motion cannot receive both progress and controls. Use progress for raw app-owned values, or controls for event-driven playback.');
434
+ }
435
+ return /*#__PURE__*/_jsx(View, {
436
+ ...containerProps,
437
+ style: createContainerStyle(textStyle),
438
+ children: fragments.map(fragment => {
439
+ if (fragment.kind === 'line-break') {
440
+ return /*#__PURE__*/_jsx(NativeTextLineBreak, {
441
+ preservesLineHeight: fragment.preservesLineHeight,
442
+ testID: createNativeTextLineBreakTestID(options.testIDPrefix, fragment),
443
+ textStyle: textStyle,
444
+ tokenTextProps: tokenTextProps
445
+ }, fragment.key);
446
+ }
447
+ const token = fragment.token;
448
+ const motionIndex = motionIndexByTokenId.get(token.id);
449
+ const commonTokenProps = {
450
+ ...tokenAccessibilityProps,
451
+ ...tokenTextProps,
452
+ style: textStyle,
453
+ testID: createNativeTextFragmentTestID(options.testIDPrefix, fragment)
454
+ };
455
+ if (typeof motionIndex !== 'number') {
456
+ return /*#__PURE__*/_createElement(NativeTextToken, {
457
+ ...commonTokenProps,
458
+ key: fragment.key
459
+ }, fragment.text);
460
+ }
461
+ const tokenMotion = createTokenMotion(recipe, motionIndex, styleState, delaySecondsByMotionIndex);
462
+ if (!externalProgress) {
463
+ return /*#__PURE__*/_createElement(NativeTextToken, {
464
+ ...commonTokenProps,
465
+ controls: controls,
466
+ key: fragment.key,
467
+ playbackText: fragment.text,
468
+ tokenMotion: tokenMotion
469
+ }, fragment.text);
470
+ }
471
+ return /*#__PURE__*/_createElement(NativeTextToken, {
472
+ ...commonTokenProps,
473
+ controlledProgress: externalProgress,
474
+ controlledProgressPlan: createControlledProgressPlan(motionIndex, delaySecondsByMotionIndex, totalTimelineSpan),
475
+ key: fragment.key,
476
+ tokenMotion: tokenMotion
477
+ }, fragment.text);
478
+ })
479
+ });
480
+ }
481
+ NativeTextRenderer.displayName = 'NativeTextRenderer';
482
+ return NativeTextRenderer;
483
+ }
484
+
485
+ /** Render text as wrapping React Native Text tokens animated by Reanimated. */
486
+ export function nativeText(options = {}) {
487
+ return createTextMotionRendererHandle({
488
+ kind: 'nativeText',
489
+ capabilities: ['native-text', 'style-transform'],
490
+ motionUnit: 'source-token',
491
+ Component: createNativeTextRendererComponent(options)
492
+ });
493
+ }
494
+ //# sourceMappingURL=nativeText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useLayoutEffect","useRef","createElement","_createElement","StyleSheet","Text","View","createAnimatedComponent","useAnimatedStyle","useReducedMotion","useSharedValue","createHiddenTokenAccessibilityProps","createParentAccessibilityProps","parentLabelPolicy","resolveAccessibleText","createTextMotionRendererHandle","useNativeTextControlsPlayback","areNativeTextPlaybackRunsEqual","createNativeTextPlaybackRun","clampTextMotionProgress","createTextMotionControlledProgressPlan","createTextMotionControlledTimelineSpan","createTextMotionDelaySecondsByItemIndex","createTextMotionItemMotion","createTextMotionProgressAnimation","createTextMotionStyleTransformStatePair","readTextMotionProgressForAnimatedStyle","shouldRenderTextMotionFinalState","jsx","_jsx","AnimatedView","TEXT_ALIGN_TO_JUSTIFY_CONTENT","auto","center","justify","left","right","NATIVE_TEXT_LINE_BREAK_PATTERN","NATIVE_TEXT_LINE_BREAK_MARKER_STYLE","flexBasis","height","width","NATIVE_TEXT_BLANK_LINE_SPACER_STYLE","opacity","NATIVE_TEXT_BLANK_LINE_SPACER_TEXT","NATIVE_TEXT_ANIMATED_TOKEN_CONTAINER_STYLE","overflow","shouldAnimateToken","token","text","trim","length","createMotionIndexByTokenId","tokens","motionTokens","filter","motionIndexByTokenId","Map","map","motionIndex","id","motionCount","createTokenDelaySecondsByMotionIndex","recipe","count","createTokenMotion","styleState","delaySecondsByMotionIndex","createControlledProgressPlan","totalTimelineSpan","createNativeTextTextFragment","textFragmentIndex","kind","key","createNativeTextLineBreakFragment","lineBreakIndex","preservesLineHeight","hasNativeTextLineContent","replace","hasNativeTextLineContentAfter","sourceText","sourceIndex","slice","createNativeTextTokenRenderFragments","currentLineHasText","includes","fragments","lineBreaks","Array","from","matchAll","initialAccumulator","cursor","result","reduce","accumulator","lineBreak","start","index","lineBreakEnd","textBeforeLineBreak","textFragment","lineHasText","hasTextAfterLineBreak","sourceRange","trailingText","createNativeTextRenderFragments","tokenResult","fragment","renderIndex","createNativeTextFragmentTestID","prefix","undefined","createNativeTextLineBreakTestID","StaticNativeTextToken","children","style","tokenProps","splitAnimatedTokenProps","accessibilityElementsHidden","accessible","importantForAccessibility","testID","textProps","containerProps","AnimatedNativeTextTokenContent","useNativeTextAnimatedStyle","options","controlled","progress","renderFinalState","tokenMotion","initialOpacity","initial","initialScale","scale","initialTranslateX","translateX","initialTranslateY","translateY","targetOpacity","target","targetScale","targetTranslateX","targetTranslateY","pulseScale","revealOnStart","itemDelaySeconds","controlledProgressPlan","current","clampedCurrent","baseScale","pulseProgress","Math","abs","pulseMultiplier","transform","ControlledAnimatedNativeTextToken","controlledProgress","reducedMotion","reducedMotionEnabled","animatedStyle","UncontrolledAnimatedNativeTextToken","controls","playbackText","playbackRun","previousPlaybackRun","value","createProgressAnimation","NativeTextToken","props","_tokenMotion","NativeTextLineBreak","textStyle","tokenTextProps","resolveJustifyContent","textAlign","flatten","createContainerStyle","flexDirection","flexWrap","justifyContent","createContainerProps","parentAccessibilityProps","accessibilityActions","accessibilityHint","accessibilityLabel","accessibilityLanguage","accessibilityRole","accessibilityState","accessibilityValue","nativeID","onAccessibilityAction","createTokenTextProps","allowFontScaling","maxFontSizeMultiplier","createNativeTextRendererComponent","NativeTextRenderer","policy","accessibility","tokenAccessibilityProps","effects","externalProgress","Error","testIDPrefix","get","commonTokenProps","displayName","nativeText","capabilities","motionUnit","Component"],"sourceRoot":"../../../src","sources":["renderers/nativeText.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+
3
+ import { useLayoutEffect, useRef } from 'react';
4
+ import { cancelAnimation } from 'react-native-reanimated';
5
+ import { readTextMotionControlsDescriptor } from "../controls/descriptors.js";
6
+ import { clampTextMotionProgress } from "./rendererMotion.js";
7
+ function resetOwnedProgress(progress, renderFinalState) {
8
+ cancelAnimation(progress);
9
+ progress.value = renderFinalState ? 1 : 0;
10
+ }
11
+ function stopOwnedProgress(progress, renderFinalState) {
12
+ cancelAnimation(progress);
13
+ if (renderFinalState) {
14
+ progress.value = 1;
15
+ }
16
+ }
17
+ function replayOwnedProgress({
18
+ createProgressAnimation,
19
+ progress,
20
+ renderFinalState,
21
+ tokenMotion
22
+ }) {
23
+ resetOwnedProgress(progress, renderFinalState);
24
+ if (renderFinalState) {
25
+ return;
26
+ }
27
+ progress.value = createProgressAnimation(tokenMotion);
28
+ }
29
+ function playOwnedProgress({
30
+ createProgressAnimation,
31
+ progress,
32
+ renderFinalState,
33
+ tokenMotion
34
+ }) {
35
+ stopOwnedProgress(progress, renderFinalState);
36
+ if (renderFinalState) {
37
+ return;
38
+ }
39
+ const currentProgress = clampTextMotionProgress(progress.value);
40
+ const delayMs = currentProgress <= 0 ? tokenMotion.delayMs : 0;
41
+ progress.value = createProgressAnimation({
42
+ ...tokenMotion,
43
+ delayMs
44
+ });
45
+ }
46
+ const playbackCommandHandlers = {
47
+ play: playOwnedProgress,
48
+ replay: replayOwnedProgress,
49
+ reset({
50
+ progress,
51
+ renderFinalState
52
+ }) {
53
+ resetOwnedProgress(progress, renderFinalState);
54
+ },
55
+ stop({
56
+ progress,
57
+ renderFinalState
58
+ }) {
59
+ stopOwnedProgress(progress, renderFinalState);
60
+ }
61
+ };
62
+ function applyNativeTextOwnedPlaybackCommand(command, options) {
63
+ playbackCommandHandlers[command.kind](options);
64
+ }
65
+ export function useNativeTextControlsPlayback({
66
+ controls,
67
+ createProgressAnimation,
68
+ progress,
69
+ renderFinalState,
70
+ tokenMotion
71
+ }) {
72
+ const playbackState = useRef({
73
+ createProgressAnimation,
74
+ progress,
75
+ renderFinalState,
76
+ tokenMotion
77
+ });
78
+ useLayoutEffect(() => {
79
+ playbackState.current = {
80
+ createProgressAnimation,
81
+ progress,
82
+ renderFinalState,
83
+ tokenMotion
84
+ };
85
+ }, [createProgressAnimation, progress, renderFinalState, tokenMotion]);
86
+ useLayoutEffect(() => {
87
+ if (!controls) {
88
+ return undefined;
89
+ }
90
+ const descriptor = readTextMotionControlsDescriptor(controls);
91
+ return descriptor.subscribe(command => {
92
+ applyNativeTextOwnedPlaybackCommand(command, playbackState.current);
93
+ });
94
+ }, [controls]);
95
+ }
96
+ //# sourceMappingURL=nativeTextControls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useLayoutEffect","useRef","cancelAnimation","readTextMotionControlsDescriptor","clampTextMotionProgress","resetOwnedProgress","progress","renderFinalState","value","stopOwnedProgress","replayOwnedProgress","createProgressAnimation","tokenMotion","playOwnedProgress","currentProgress","delayMs","playbackCommandHandlers","play","replay","reset","stop","applyNativeTextOwnedPlaybackCommand","command","options","kind","useNativeTextControlsPlayback","controls","playbackState","current","undefined","descriptor","subscribe"],"sourceRoot":"../../../src","sources":["renderers/nativeTextControls.ts"],"mappings":"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","ignoreList":[]}