@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,290 @@
1
+ "use strict";
2
+
3
+ import { StyleSheet } from 'react-native';
4
+ const LAYOUT_TEXT_STYLE_KEYS = ['fontFamily', 'fontSize', 'fontStyle', 'fontVariant', 'fontWeight', 'includeFontPadding', 'letterSpacing', 'lineHeight', 'textAlign', 'textTransform', 'writingDirection'];
5
+ const NATIVE_TEXT_LINE_LAYOUT_INVALIDATION_REASONS = ['font-scale', 'initial', 'line-text', 'style', 'text', 'width'];
6
+ function createNativeTextLineLayoutFailure(reason, message, details = {}) {
7
+ return {
8
+ ok: false,
9
+ reason,
10
+ message,
11
+ ...details
12
+ };
13
+ }
14
+ function createNativeTextLineRange(text, lineText, lineIndex, cursor) {
15
+ if (lineText.length === 0 && text.length === 0 && cursor === 0) {
16
+ return {
17
+ ok: true,
18
+ value: {
19
+ index: lineIndex,
20
+ sourceRange: {
21
+ end: 0,
22
+ start: 0
23
+ },
24
+ text: lineText
25
+ }
26
+ };
27
+ }
28
+ if (lineText.length === 0) {
29
+ return createNativeTextLineLayoutFailure('empty-line-text-unsupported', 'nativeText line layout cannot map an empty rendered line to a stable source range yet.', {
30
+ lineIndex,
31
+ sourceRange: {
32
+ end: cursor,
33
+ start: cursor
34
+ }
35
+ });
36
+ }
37
+ const start = text.indexOf(lineText, cursor);
38
+ if (start < 0) {
39
+ return createNativeTextLineLayoutFailure('line-text-not-found', 'nativeText line layout could not find the rendered line text after the previous source range.', {
40
+ lineIndex,
41
+ sourceRange: {
42
+ end: cursor,
43
+ start: cursor
44
+ }
45
+ });
46
+ }
47
+ return {
48
+ ok: true,
49
+ value: {
50
+ index: lineIndex,
51
+ sourceRange: {
52
+ end: start + lineText.length,
53
+ start
54
+ },
55
+ text: lineText
56
+ }
57
+ };
58
+ }
59
+ function rangesIntersect(first, second) {
60
+ return first.start < second.end && second.start < first.end;
61
+ }
62
+ function rangeContainsRange(outer, inner) {
63
+ return inner.start >= outer.start && inner.end <= outer.end;
64
+ }
65
+ function findWhitespaceSeparatorLineIndex(sourceRange, lineRanges) {
66
+ const previousIndex = lineRanges.reduce((match, lineRange, index) => lineRange.sourceRange.end <= sourceRange.start ? index : match, undefined);
67
+ if (typeof previousIndex === 'number') {
68
+ return previousIndex;
69
+ }
70
+ const firstLine = lineRanges[0];
71
+ if (firstLine && sourceRange.end <= firstLine.sourceRange.start) {
72
+ return 0;
73
+ }
74
+ return undefined;
75
+ }
76
+ function findLineIndexForToken(token, lineRanges) {
77
+ if (token.sourceRange.start === token.sourceRange.end) {
78
+ return {
79
+ ok: true,
80
+ value: undefined
81
+ };
82
+ }
83
+ const intersectingIndexes = lineRanges.flatMap((lineRange, index) => rangesIntersect(token.sourceRange, lineRange.sourceRange) ? [index] : []);
84
+ if (intersectingIndexes.length > 1) {
85
+ return createNativeTextLineLayoutFailure('token-crosses-line', 'nativeText line layout cannot silently assign one token to multiple rendered lines.', {
86
+ sourceRange: token.sourceRange,
87
+ tokenId: token.id
88
+ });
89
+ }
90
+ const lineIndex = intersectingIndexes[0];
91
+ if (typeof lineIndex === 'number') {
92
+ const lineRange = lineRanges[lineIndex];
93
+ if (lineRange && rangeContainsRange(lineRange.sourceRange, token.sourceRange)) {
94
+ return {
95
+ ok: true,
96
+ value: lineIndex
97
+ };
98
+ }
99
+ return createNativeTextLineLayoutFailure('token-crosses-line', 'nativeText line layout found a partial token and requires deterministic handling before stable line support.', {
100
+ lineIndex,
101
+ sourceRange: token.sourceRange,
102
+ tokenId: token.id
103
+ });
104
+ }
105
+ if (token.text.trim().length === 0) {
106
+ return {
107
+ ok: true,
108
+ value: findWhitespaceSeparatorLineIndex(token.sourceRange, lineRanges)
109
+ };
110
+ }
111
+ return createNativeTextLineLayoutFailure('token-outside-lines', 'nativeText line layout found a non-whitespace token outside all rendered line ranges.', {
112
+ sourceRange: token.sourceRange,
113
+ tokenId: token.id
114
+ });
115
+ }
116
+ function createStyleSnapshot(style) {
117
+ const flattenedStyle = StyleSheet.flatten(style) ?? {};
118
+ return LAYOUT_TEXT_STYLE_KEYS.reduce((snapshot, key) => {
119
+ const value = flattenedStyle[key];
120
+ if (value === undefined) {
121
+ return snapshot;
122
+ }
123
+ return {
124
+ ...snapshot,
125
+ [key]: value
126
+ };
127
+ }, {});
128
+ }
129
+ function normalizeFiniteNumber(value) {
130
+ return Number.isFinite(value) ? value : null;
131
+ }
132
+ function createInitialInvalidationsByReason() {
133
+ return NATIVE_TEXT_LINE_LAYOUT_INVALIDATION_REASONS.reduce((invalidations, reason) => ({
134
+ ...invalidations,
135
+ [reason]: 0
136
+ }), {
137
+ 'font-scale': 0,
138
+ initial: 0,
139
+ 'line-text': 0,
140
+ style: 0,
141
+ text: 0,
142
+ width: 0
143
+ });
144
+ }
145
+ export function createNativeTextLineRanges(text, renderedLines) {
146
+ const result = {
147
+ cursor: 0,
148
+ lines: [],
149
+ ok: true
150
+ };
151
+
152
+ // Keep this accumulator mutable so source mapping stays linear for stress probes.
153
+ for (const [lineIndex, renderedLine] of renderedLines.entries()) {
154
+ const lineRange = createNativeTextLineRange(text, renderedLine.text, lineIndex, result.cursor);
155
+ if (!lineRange.ok) {
156
+ return lineRange;
157
+ }
158
+ result.cursor = lineRange.value.sourceRange.end;
159
+ result.lines.push(lineRange.value);
160
+ }
161
+ if (text.length > 0 && result.lines.length === 0) {
162
+ return createNativeTextLineLayoutFailure('line-text-not-found', 'nativeText line layout needs rendered line data for non-empty text.', {
163
+ sourceRange: {
164
+ end: 0,
165
+ start: 0
166
+ }
167
+ });
168
+ }
169
+ return {
170
+ ok: true,
171
+ value: result.lines
172
+ };
173
+ }
174
+ export function groupNativeTextTokensByLineRanges(tokens, lineRanges) {
175
+ const groups = lineRanges.map(line => ({
176
+ line,
177
+ tokens: []
178
+ }));
179
+ for (const token of tokens) {
180
+ const lineIndex = findLineIndexForToken(token, lineRanges);
181
+ if (!lineIndex.ok) {
182
+ return lineIndex;
183
+ }
184
+ if (typeof lineIndex.value !== 'number') {
185
+ continue;
186
+ }
187
+ const group = groups[lineIndex.value];
188
+ if (!group) {
189
+ return createNativeTextLineLayoutFailure('token-outside-lines', 'nativeText line layout resolved a token to a missing line group.', {
190
+ sourceRange: token.sourceRange,
191
+ tokenId: token.id
192
+ });
193
+ }
194
+ group.tokens.push(token);
195
+ }
196
+ return {
197
+ ok: true,
198
+ value: groups.map(({
199
+ line,
200
+ tokens: groupTokens
201
+ }) => ({
202
+ line,
203
+ text: groupTokens.map(token => token.text).join(''),
204
+ tokens: groupTokens
205
+ }))
206
+ };
207
+ }
208
+ export function evaluateNativeTextLineLayoutCompatibility(groups) {
209
+ const mismatch = groups.find(group => group.text !== group.line.text);
210
+ if (mismatch) {
211
+ return {
212
+ actualText: mismatch.text,
213
+ expectedText: mismatch.line.text,
214
+ lineIndex: mismatch.line.index,
215
+ reason: 'line-group-text-mismatch',
216
+ status: 'no-go'
217
+ };
218
+ }
219
+ return {
220
+ lineCount: groups.length,
221
+ status: 'go',
222
+ tokenCount: groups.reduce((count, group) => count + group.tokens.length, 0)
223
+ };
224
+ }
225
+ export function createNativeTextLineLayoutSignature({
226
+ allowFontScaling,
227
+ maxFontSizeMultiplier,
228
+ measuredWidth,
229
+ renderedLines,
230
+ style,
231
+ text
232
+ }) {
233
+ return JSON.stringify({
234
+ allowFontScaling,
235
+ maxFontSizeMultiplier,
236
+ measuredWidth: normalizeFiniteNumber(measuredWidth),
237
+ renderedLines: renderedLines.map(line => ({
238
+ height: normalizeFiniteNumber(line.height),
239
+ text: line.text,
240
+ width: normalizeFiniteNumber(line.width),
241
+ x: normalizeFiniteNumber(line.x),
242
+ y: normalizeFiniteNumber(line.y)
243
+ })),
244
+ style: createStyleSnapshot(style),
245
+ text
246
+ });
247
+ }
248
+ export function createNativeTextLineLayoutProbeSnapshot(initial) {
249
+ return {
250
+ acceptedMappingUpdates: initial?.acceptedMappingUpdates ?? 0,
251
+ invalidationsByReason: createInitialInvalidationsByReason(),
252
+ lineCount: initial?.lineCount ?? 0,
253
+ mappingComputations: initial?.mappingComputations ?? 0,
254
+ onTextLayoutCalls: initial?.onTextLayoutCalls ?? 0,
255
+ rejectedIdenticalPayloads: initial?.rejectedIdenticalPayloads ?? 0,
256
+ signature: initial?.signature,
257
+ tokenCount: initial?.tokenCount ?? 0
258
+ };
259
+ }
260
+ export function recordNativeTextLineLayoutMeasurement(snapshot, measurement) {
261
+ if (snapshot.signature === measurement.signature) {
262
+ return {
263
+ accepted: false,
264
+ snapshot: {
265
+ ...snapshot,
266
+ lineCount: measurement.lineCount,
267
+ onTextLayoutCalls: snapshot.onTextLayoutCalls + 1,
268
+ rejectedIdenticalPayloads: snapshot.rejectedIdenticalPayloads + 1,
269
+ tokenCount: measurement.tokenCount
270
+ }
271
+ };
272
+ }
273
+ return {
274
+ accepted: true,
275
+ snapshot: {
276
+ ...snapshot,
277
+ acceptedMappingUpdates: snapshot.acceptedMappingUpdates + 1,
278
+ invalidationsByReason: {
279
+ ...snapshot.invalidationsByReason,
280
+ [measurement.invalidationReason]: snapshot.invalidationsByReason[measurement.invalidationReason] + 1
281
+ },
282
+ lineCount: measurement.lineCount,
283
+ mappingComputations: snapshot.mappingComputations + 1,
284
+ onTextLayoutCalls: snapshot.onTextLayoutCalls + 1,
285
+ signature: measurement.signature,
286
+ tokenCount: measurement.tokenCount
287
+ }
288
+ };
289
+ }
290
+ //# sourceMappingURL=nativeTextLineLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["StyleSheet","LAYOUT_TEXT_STYLE_KEYS","NATIVE_TEXT_LINE_LAYOUT_INVALIDATION_REASONS","createNativeTextLineLayoutFailure","reason","message","details","ok","createNativeTextLineRange","text","lineText","lineIndex","cursor","length","value","index","sourceRange","end","start","indexOf","rangesIntersect","first","second","rangeContainsRange","outer","inner","findWhitespaceSeparatorLineIndex","lineRanges","previousIndex","reduce","match","lineRange","undefined","firstLine","findLineIndexForToken","token","intersectingIndexes","flatMap","tokenId","id","trim","createStyleSnapshot","style","flattenedStyle","flatten","snapshot","key","normalizeFiniteNumber","Number","isFinite","createInitialInvalidationsByReason","invalidations","initial","width","createNativeTextLineRanges","renderedLines","result","lines","renderedLine","entries","push","groupNativeTextTokensByLineRanges","tokens","groups","map","line","group","groupTokens","join","evaluateNativeTextLineLayoutCompatibility","mismatch","find","actualText","expectedText","status","lineCount","tokenCount","count","createNativeTextLineLayoutSignature","allowFontScaling","maxFontSizeMultiplier","measuredWidth","JSON","stringify","height","x","y","createNativeTextLineLayoutProbeSnapshot","acceptedMappingUpdates","invalidationsByReason","mappingComputations","onTextLayoutCalls","rejectedIdenticalPayloads","signature","recordNativeTextLineLayoutMeasurement","measurement","accepted","invalidationReason"],"sourceRoot":"../../../src","sources":["renderers/nativeTextLineLayout.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+
3
+ function isNativeTextMotionOptionRecord(value) {
4
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
5
+ }
6
+ function createMotionOptionSnapshotValue(value) {
7
+ // Reanimated config objects are compared structurally; function-valued options stay reference-sensitive.
8
+ if (Array.isArray(value)) {
9
+ return value.map(createMotionOptionSnapshotValue);
10
+ }
11
+ if (isNativeTextMotionOptionRecord(value)) {
12
+ return Object.fromEntries(Object.entries(value).map(([key, nestedValue]) => [key, createMotionOptionSnapshotValue(nestedValue)]));
13
+ }
14
+ return value;
15
+ }
16
+ function createMotionOptionsSnapshot(options) {
17
+ if (!options) {
18
+ return undefined;
19
+ }
20
+ return Object.fromEntries(Object.entries(options).map(([key, value]) => [key, createMotionOptionSnapshotValue(value)]));
21
+ }
22
+ function createMotionSnapshot(motion) {
23
+ if (!motion) {
24
+ return undefined;
25
+ }
26
+ return {
27
+ kind: motion.kind,
28
+ options: createMotionOptionsSnapshot(motion.options)
29
+ };
30
+ }
31
+ export function createNativeTextPlaybackRun(tokenMotion, renderFinalState, text) {
32
+ return {
33
+ ...tokenMotion,
34
+ motionSnapshot: createMotionSnapshot(tokenMotion.motion),
35
+ renderFinalState,
36
+ text
37
+ };
38
+ }
39
+ function areNativeTextStyleStatesEqual(left, right) {
40
+ return Object.is(left.opacity, right.opacity) && Object.is(left.scale, right.scale) && Object.is(left.translateX, right.translateX) && Object.is(left.translateY, right.translateY);
41
+ }
42
+ function areMotionOptionsSnapshotsEqual(left, right) {
43
+ if (!left || !right) {
44
+ return left === right;
45
+ }
46
+ const leftKeys = Object.keys(left);
47
+ const rightKeys = Object.keys(right);
48
+ if (leftKeys.length !== rightKeys.length) {
49
+ return false;
50
+ }
51
+ return leftKeys.every(key => Object.prototype.hasOwnProperty.call(right, key) && areMotionOptionSnapshotValuesEqual(left[key], right[key]));
52
+ }
53
+ function areMotionOptionArraysEqual(left, right) {
54
+ if (left.length !== right.length) {
55
+ return false;
56
+ }
57
+ return left.every((value, index) => areMotionOptionSnapshotValuesEqual(value, right[index]));
58
+ }
59
+ function areMotionOptionRecordsEqual(left, right) {
60
+ const leftKeys = Object.keys(left);
61
+ const rightKeys = Object.keys(right);
62
+ if (leftKeys.length !== rightKeys.length) {
63
+ return false;
64
+ }
65
+ return leftKeys.every(key => Object.prototype.hasOwnProperty.call(right, key) && areMotionOptionSnapshotValuesEqual(left[key], right[key]));
66
+ }
67
+ function areMotionOptionSnapshotValuesEqual(left, right) {
68
+ if (Object.is(left, right)) {
69
+ return true;
70
+ }
71
+ if (Array.isArray(left) && Array.isArray(right)) {
72
+ return areMotionOptionArraysEqual(left, right);
73
+ }
74
+ if (isNativeTextMotionOptionRecord(left) && isNativeTextMotionOptionRecord(right)) {
75
+ return areMotionOptionRecordsEqual(left, right);
76
+ }
77
+ return false;
78
+ }
79
+ function areMotionSnapshotsEqual(left, right) {
80
+ if (!left || !right) {
81
+ return left === right;
82
+ }
83
+ return left.kind === right.kind && areMotionOptionsSnapshotsEqual(left.options, right.options);
84
+ }
85
+ export function areNativeTextPlaybackRunsEqual(left, right) {
86
+ if (!left) {
87
+ return false;
88
+ }
89
+ return Object.is(left.delayMs, right.delayMs) && Object.is(left.pulseScale, right.pulseScale) && left.reducedMotion === right.reducedMotion && left.revealOnStart === right.revealOnStart && left.renderFinalState === right.renderFinalState && left.text === right.text && areNativeTextStyleStatesEqual(left.initial, right.initial) && areNativeTextStyleStatesEqual(left.target, right.target) && areMotionSnapshotsEqual(left.motionSnapshot, right.motionSnapshot);
90
+ }
91
+ //# sourceMappingURL=nativeTextPlayback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isNativeTextMotionOptionRecord","value","Array","isArray","createMotionOptionSnapshotValue","map","Object","fromEntries","entries","key","nestedValue","createMotionOptionsSnapshot","options","undefined","createMotionSnapshot","motion","kind","createNativeTextPlaybackRun","tokenMotion","renderFinalState","text","motionSnapshot","areNativeTextStyleStatesEqual","left","right","is","opacity","scale","translateX","translateY","areMotionOptionsSnapshotsEqual","leftKeys","keys","rightKeys","length","every","prototype","hasOwnProperty","call","areMotionOptionSnapshotValuesEqual","areMotionOptionArraysEqual","index","areMotionOptionRecordsEqual","areMotionSnapshotsEqual","areNativeTextPlaybackRunsEqual","delayMs","pulseScale","reducedMotion","revealOnStart","initial","target"],"sourceRoot":"../../../src","sources":["renderers/nativeTextPlayback.ts"],"mappings":"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","ignoreList":[]}