@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.
- package/CHANGELOG.md +14 -0
- package/LICENSE +20 -0
- package/README.ko.md +104 -0
- package/README.md +103 -2
- package/lib/module/accessibility/index.js +4 -0
- package/lib/module/accessibility/index.js.map +1 -0
- package/lib/module/accessibility/policies.js +39 -0
- package/lib/module/accessibility/policies.js.map +1 -0
- package/lib/module/controls/brand.js +4 -0
- package/lib/module/controls/brand.js.map +1 -0
- package/lib/module/controls/controls.js +28 -0
- package/lib/module/controls/controls.js.map +1 -0
- package/lib/module/controls/descriptors.js +55 -0
- package/lib/module/controls/descriptors.js.map +1 -0
- package/lib/module/controls/index.js +4 -0
- package/lib/module/controls/index.js.map +1 -0
- package/lib/module/effects/compose.js +48 -0
- package/lib/module/effects/compose.js.map +1 -0
- package/lib/module/effects/fade.js +15 -0
- package/lib/module/effects/fade.js.map +1 -0
- package/lib/module/effects/index.js +12 -0
- package/lib/module/effects/index.js.map +1 -0
- package/lib/module/effects/lineReveal.js +17 -0
- package/lib/module/effects/lineReveal.js.map +1 -0
- package/lib/module/effects/pulse.js +14 -0
- package/lib/module/effects/pulse.js.map +1 -0
- package/lib/module/effects/rise.js +14 -0
- package/lib/module/effects/rise.js.map +1 -0
- package/lib/module/effects/scale.js +15 -0
- package/lib/module/effects/scale.js.map +1 -0
- package/lib/module/effects/shake.js +14 -0
- package/lib/module/effects/shake.js.map +1 -0
- package/lib/module/effects/slide.js +15 -0
- package/lib/module/effects/slide.js.map +1 -0
- package/lib/module/effects/typewriter.js +19 -0
- package/lib/module/effects/typewriter.js.map +1 -0
- package/lib/module/effects/validation.js +10 -0
- package/lib/module/effects/validation.js.map +1 -0
- package/lib/module/index.js +10 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/presets/index.js +35 -0
- package/lib/module/presets/index.js.map +1 -0
- package/lib/module/recipe/component.js +60 -0
- package/lib/module/recipe/component.js.map +1 -0
- package/lib/module/recipe/defineTextMotion.js +9 -0
- package/lib/module/recipe/defineTextMotion.js.map +1 -0
- package/lib/module/recipe/descriptors.js +60 -0
- package/lib/module/recipe/descriptors.js.map +1 -0
- package/lib/module/recipe/index.js +5 -0
- package/lib/module/recipe/index.js.map +1 -0
- package/lib/module/recipe/recipe.js +163 -0
- package/lib/module/recipe/recipe.js.map +1 -0
- package/lib/module/renderers/index.js +5 -0
- package/lib/module/renderers/index.js.map +1 -0
- package/lib/module/renderers/nativeText.js +494 -0
- package/lib/module/renderers/nativeText.js.map +1 -0
- package/lib/module/renderers/nativeTextControls.js +96 -0
- package/lib/module/renderers/nativeTextControls.js.map +1 -0
- package/lib/module/renderers/nativeTextLineLayout.js +290 -0
- package/lib/module/renderers/nativeTextLineLayout.js.map +1 -0
- package/lib/module/renderers/nativeTextPlayback.js +91 -0
- package/lib/module/renderers/nativeTextPlayback.js.map +1 -0
- package/lib/module/renderers/overlayText.js +543 -0
- package/lib/module/renderers/overlayText.js.map +1 -0
- package/lib/module/renderers/overlayTextLayout.js +182 -0
- package/lib/module/renderers/overlayTextLayout.js.map +1 -0
- package/lib/module/renderers/rendererMotion.js +264 -0
- package/lib/module/renderers/rendererMotion.js.map +1 -0
- package/lib/module/split/createToken.js +19 -0
- package/lib/module/split/createToken.js.map +1 -0
- package/lib/module/split/custom.js +57 -0
- package/lib/module/split/custom.js.map +1 -0
- package/lib/module/split/graphemes.js +25 -0
- package/lib/module/split/graphemes.js.map +1 -0
- package/lib/module/split/index.js +7 -0
- package/lib/module/split/index.js.map +1 -0
- package/lib/module/split/lines.js +43 -0
- package/lib/module/split/lines.js.map +1 -0
- package/lib/module/split/segmenter.js +74 -0
- package/lib/module/split/segmenter.js.map +1 -0
- package/lib/module/split/words.js +28 -0
- package/lib/module/split/words.js.map +1 -0
- package/lib/module/timeline/index.js +7 -0
- package/lib/module/timeline/index.js.map +1 -0
- package/lib/module/timeline/parallel.js +21 -0
- package/lib/module/timeline/parallel.js.map +1 -0
- package/lib/module/timeline/sequence.js +18 -0
- package/lib/module/timeline/sequence.js.map +1 -0
- package/lib/module/timeline/stagger.js +43 -0
- package/lib/module/timeline/stagger.js.map +1 -0
- package/lib/module/timeline/validation.js +24 -0
- package/lib/module/timeline/validation.js.map +1 -0
- package/lib/module/timeline/wave.js +25 -0
- package/lib/module/timeline/wave.js.map +1 -0
- package/lib/module/types/index.js +4 -0
- package/lib/module/types/index.js.map +1 -0
- package/lib/module/types/recipe.js +4 -0
- package/lib/module/types/recipe.js.map +1 -0
- package/lib/module/types/renderer.js +27 -0
- package/lib/module/types/renderer.js.map +1 -0
- package/lib/module/types/token.js +2 -0
- package/lib/module/types/token.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/accessibility/index.d.ts +2 -0
- package/lib/typescript/src/accessibility/index.d.ts.map +1 -0
- package/lib/typescript/src/accessibility/policies.d.ts +13 -0
- package/lib/typescript/src/accessibility/policies.d.ts.map +1 -0
- package/lib/typescript/src/controls/brand.d.ts +2 -0
- package/lib/typescript/src/controls/brand.d.ts.map +1 -0
- package/lib/typescript/src/controls/controls.d.ts +28 -0
- package/lib/typescript/src/controls/controls.d.ts.map +1 -0
- package/lib/typescript/src/controls/descriptors.d.ts +14 -0
- package/lib/typescript/src/controls/descriptors.d.ts.map +1 -0
- package/lib/typescript/src/controls/index.d.ts +3 -0
- package/lib/typescript/src/controls/index.d.ts.map +1 -0
- package/lib/typescript/src/effects/compose.d.ts +11 -0
- package/lib/typescript/src/effects/compose.d.ts.map +1 -0
- package/lib/typescript/src/effects/fade.d.ts +10 -0
- package/lib/typescript/src/effects/fade.d.ts.map +1 -0
- package/lib/typescript/src/effects/index.d.ts +10 -0
- package/lib/typescript/src/effects/index.d.ts.map +1 -0
- package/lib/typescript/src/effects/lineReveal.d.ts +11 -0
- package/lib/typescript/src/effects/lineReveal.d.ts.map +1 -0
- package/lib/typescript/src/effects/pulse.d.ts +8 -0
- package/lib/typescript/src/effects/pulse.d.ts.map +1 -0
- package/lib/typescript/src/effects/rise.d.ts +8 -0
- package/lib/typescript/src/effects/rise.d.ts.map +1 -0
- package/lib/typescript/src/effects/scale.d.ts +10 -0
- package/lib/typescript/src/effects/scale.d.ts.map +1 -0
- package/lib/typescript/src/effects/shake.d.ts +8 -0
- package/lib/typescript/src/effects/shake.d.ts.map +1 -0
- package/lib/typescript/src/effects/slide.d.ts +10 -0
- package/lib/typescript/src/effects/slide.d.ts.map +1 -0
- package/lib/typescript/src/effects/typewriter.d.ts +13 -0
- package/lib/typescript/src/effects/typewriter.d.ts.map +1 -0
- package/lib/typescript/src/effects/validation.d.ts +2 -0
- package/lib/typescript/src/effects/validation.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +15 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/presets/index.d.ts +10 -0
- package/lib/typescript/src/presets/index.d.ts.map +1 -0
- package/lib/typescript/src/recipe/component.d.ts +3 -0
- package/lib/typescript/src/recipe/component.d.ts.map +1 -0
- package/lib/typescript/src/recipe/defineTextMotion.d.ts +4 -0
- package/lib/typescript/src/recipe/defineTextMotion.d.ts.map +1 -0
- package/lib/typescript/src/recipe/descriptors.d.ts +15 -0
- package/lib/typescript/src/recipe/descriptors.d.ts.map +1 -0
- package/lib/typescript/src/recipe/index.d.ts +4 -0
- package/lib/typescript/src/recipe/index.d.ts.map +1 -0
- package/lib/typescript/src/recipe/recipe.d.ts +67 -0
- package/lib/typescript/src/recipe/recipe.d.ts.map +1 -0
- package/lib/typescript/src/renderers/index.d.ts +3 -0
- package/lib/typescript/src/renderers/index.d.ts.map +1 -0
- package/lib/typescript/src/renderers/nativeText.d.ts +13 -0
- package/lib/typescript/src/renderers/nativeText.d.ts.map +1 -0
- package/lib/typescript/src/renderers/nativeTextControls.d.ts +16 -0
- package/lib/typescript/src/renderers/nativeTextControls.d.ts.map +1 -0
- package/lib/typescript/src/renderers/nativeTextLineLayout.d.ts +84 -0
- package/lib/typescript/src/renderers/nativeTextLineLayout.d.ts.map +1 -0
- package/lib/typescript/src/renderers/nativeTextPlayback.d.ts +21 -0
- package/lib/typescript/src/renderers/nativeTextPlayback.d.ts.map +1 -0
- package/lib/typescript/src/renderers/overlayText.d.ts +13 -0
- package/lib/typescript/src/renderers/overlayText.d.ts.map +1 -0
- package/lib/typescript/src/renderers/overlayTextLayout.d.ts +36 -0
- package/lib/typescript/src/renderers/overlayTextLayout.d.ts.map +1 -0
- package/lib/typescript/src/renderers/rendererMotion.d.ts +53 -0
- package/lib/typescript/src/renderers/rendererMotion.d.ts.map +1 -0
- package/lib/typescript/src/split/createToken.d.ts +11 -0
- package/lib/typescript/src/split/createToken.d.ts.map +1 -0
- package/lib/typescript/src/split/custom.d.ts +17 -0
- package/lib/typescript/src/split/custom.d.ts.map +1 -0
- package/lib/typescript/src/split/graphemes.d.ts +4 -0
- package/lib/typescript/src/split/graphemes.d.ts.map +1 -0
- package/lib/typescript/src/split/index.d.ts +5 -0
- package/lib/typescript/src/split/index.d.ts.map +1 -0
- package/lib/typescript/src/split/lines.d.ts +4 -0
- package/lib/typescript/src/split/lines.d.ts.map +1 -0
- package/lib/typescript/src/split/segmenter.d.ts +18 -0
- package/lib/typescript/src/split/segmenter.d.ts.map +1 -0
- package/lib/typescript/src/split/words.d.ts +4 -0
- package/lib/typescript/src/split/words.d.ts.map +1 -0
- package/lib/typescript/src/timeline/index.d.ts +5 -0
- package/lib/typescript/src/timeline/index.d.ts.map +1 -0
- package/lib/typescript/src/timeline/parallel.d.ts +4 -0
- package/lib/typescript/src/timeline/parallel.d.ts.map +1 -0
- package/lib/typescript/src/timeline/sequence.d.ts +4 -0
- package/lib/typescript/src/timeline/sequence.d.ts.map +1 -0
- package/lib/typescript/src/timeline/stagger.d.ts +11 -0
- package/lib/typescript/src/timeline/stagger.d.ts.map +1 -0
- package/lib/typescript/src/timeline/validation.d.ts +4 -0
- package/lib/typescript/src/timeline/validation.d.ts.map +1 -0
- package/lib/typescript/src/timeline/wave.d.ts +11 -0
- package/lib/typescript/src/timeline/wave.d.ts.map +1 -0
- package/lib/typescript/src/types/index.d.ts +6 -0
- package/lib/typescript/src/types/index.d.ts.map +1 -0
- package/lib/typescript/src/types/recipe.d.ts +123 -0
- package/lib/typescript/src/types/recipe.d.ts.map +1 -0
- package/lib/typescript/src/types/renderer.d.ts +51 -0
- package/lib/typescript/src/types/renderer.d.ts.map +1 -0
- package/lib/typescript/src/types/token.d.ts +35 -0
- package/lib/typescript/src/types/token.d.ts.map +1 -0
- package/package.json +117 -3
- package/src/accessibility/index.ts +7 -0
- package/src/accessibility/policies.ts +60 -0
- package/src/controls/brand.ts +3 -0
- package/src/controls/controls.ts +41 -0
- package/src/controls/descriptors.ts +83 -0
- package/src/controls/index.ts +2 -0
- package/src/effects/compose.ts +98 -0
- package/src/effects/fade.ts +22 -0
- package/src/effects/index.ts +9 -0
- package/src/effects/lineReveal.ts +28 -0
- package/src/effects/pulse.ts +19 -0
- package/src/effects/rise.ts +19 -0
- package/src/effects/scale.ts +22 -0
- package/src/effects/shake.ts +19 -0
- package/src/effects/slide.ts +22 -0
- package/src/effects/typewriter.ts +16 -0
- package/src/effects/validation.ts +9 -0
- package/src/index.tsx +46 -0
- package/src/presets/index.ts +42 -0
- package/src/recipe/component.tsx +88 -0
- package/src/recipe/defineTextMotion.ts +6 -0
- package/src/recipe/descriptors.ts +158 -0
- package/src/recipe/index.ts +3 -0
- package/src/recipe/recipe.ts +359 -0
- package/src/renderers/index.ts +2 -0
- package/src/renderers/nativeText.tsx +813 -0
- package/src/renderers/nativeTextControls.ts +131 -0
- package/src/renderers/nativeTextLineLayout.ts +495 -0
- package/src/renderers/nativeTextPlayback.ts +204 -0
- package/src/renderers/overlayText.tsx +945 -0
- package/src/renderers/overlayTextLayout.ts +312 -0
- package/src/renderers/rendererMotion.ts +483 -0
- package/src/split/createToken.ts +26 -0
- package/src/split/custom.ts +92 -0
- package/src/split/graphemes.ts +27 -0
- package/src/split/index.ts +9 -0
- package/src/split/lines.ts +35 -0
- package/src/split/segmenter.ts +111 -0
- package/src/split/words.ts +28 -0
- package/src/timeline/index.ts +4 -0
- package/src/timeline/parallel.ts +30 -0
- package/src/timeline/sequence.ts +29 -0
- package/src/timeline/stagger.ts +60 -0
- package/src/timeline/validation.ts +29 -0
- package/src/timeline/wave.ts +34 -0
- package/src/types/index.ts +34 -0
- package/src/types/recipe.ts +195 -0
- package/src/types/renderer.ts +91 -0
- 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":";;AAAA,SAASA,UAAU,QAAwC,cAAc;AAIzE,MAAMC,sBAAsB,GAAG,CAC7B,YAAY,EACZ,UAAU,EACV,WAAW,EACX,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,eAAe,EACf,kBAAkB,CAC6B;AAEjD,MAAMC,4CAA4C,GAAG,CACnD,YAAY,EACZ,SAAS,EACT,WAAW,EACX,OAAO,EACP,MAAM,EACN,OAAO,CACC;AAyGV,SAASC,iCAAiCA,CACxCC,MAAyC,EACzCC,OAAe,EACfC,OAAgE,GAAG,CAAC,CAAC,EAClC;EACnC,OAAO;IACLC,EAAE,EAAE,KAAK;IACTH,MAAM;IACNC,OAAO;IACP,GAAGC;EACL,CAAC;AACH;AAEA,SAASE,yBAAyBA,CAChCC,IAAY,EACZC,QAAgB,EAChBC,SAAiB,EACjBC,MAAc,EACmC;EACjD,IAAIF,QAAQ,CAACG,MAAM,KAAK,CAAC,IAAIJ,IAAI,CAACI,MAAM,KAAK,CAAC,IAAID,MAAM,KAAK,CAAC,EAAE;IAC9D,OAAO;MACLL,EAAE,EAAE,IAAI;MACRO,KAAK,EAAE;QACLC,KAAK,EAAEJ,SAAS;QAChBK,WAAW,EAAE;UAAEC,GAAG,EAAE,CAAC;UAAEC,KAAK,EAAE;QAAE,CAAC;QACjCT,IAAI,EAAEC;MACR;IACF,CAAC;EACH;EAEA,IAAIA,QAAQ,CAACG,MAAM,KAAK,CAAC,EAAE;IACzB,OAAOV,iCAAiC,CACtC,6BAA6B,EAC7B,wFAAwF,EACxF;MAAEQ,SAAS;MAAEK,WAAW,EAAE;QAAEC,GAAG,EAAEL,MAAM;QAAEM,KAAK,EAAEN;MAAO;IAAE,CAC3D,CAAC;EACH;EAEA,MAAMM,KAAK,GAAGT,IAAI,CAACU,OAAO,CAACT,QAAQ,EAAEE,MAAM,CAAC;EAE5C,IAAIM,KAAK,GAAG,CAAC,EAAE;IACb,OAAOf,iCAAiC,CACtC,qBAAqB,EACrB,+FAA+F,EAC/F;MAAEQ,SAAS;MAAEK,WAAW,EAAE;QAAEC,GAAG,EAAEL,MAAM;QAAEM,KAAK,EAAEN;MAAO;IAAE,CAC3D,CAAC;EACH;EAEA,OAAO;IACLL,EAAE,EAAE,IAAI;IACRO,KAAK,EAAE;MACLC,KAAK,EAAEJ,SAAS;MAChBK,WAAW,EAAE;QAAEC,GAAG,EAAEC,KAAK,GAAGR,QAAQ,CAACG,MAAM;QAAEK;MAAM,CAAC;MACpDT,IAAI,EAAEC;IACR;EACF,CAAC;AACH;AAEA,SAASU,eAAeA,CAACC,KAA4B,EAAEC,MAA6B,EAAW;EAC7F,OAAOD,KAAK,CAACH,KAAK,GAAGI,MAAM,CAACL,GAAG,IAAIK,MAAM,CAACJ,KAAK,GAAGG,KAAK,CAACJ,GAAG;AAC7D;AAEA,SAASM,kBAAkBA,CAACC,KAA4B,EAAEC,KAA4B,EAAW;EAC/F,OAAOA,KAAK,CAACP,KAAK,IAAIM,KAAK,CAACN,KAAK,IAAIO,KAAK,CAACR,GAAG,IAAIO,KAAK,CAACP,GAAG;AAC7D;AAEA,SAASS,gCAAgCA,CACvCV,WAAkC,EAClCW,UAA0C,EACtB;EACpB,MAAMC,aAAa,GAAGD,UAAU,CAACE,MAAM,CACrC,CAACC,KAAK,EAAEC,SAAS,EAAEhB,KAAK,KAAMgB,SAAS,CAACf,WAAW,CAACC,GAAG,IAAID,WAAW,CAACE,KAAK,GAAGH,KAAK,GAAGe,KAAM,EAC7FE,SACF,CAAC;EAED,IAAI,OAAOJ,aAAa,KAAK,QAAQ,EAAE;IACrC,OAAOA,aAAa;EACtB;EAEA,MAAMK,SAAS,GAAGN,UAAU,CAAC,CAAC,CAAC;EAE/B,IAAIM,SAAS,IAAIjB,WAAW,CAACC,GAAG,IAAIgB,SAAS,CAACjB,WAAW,CAACE,KAAK,EAAE;IAC/D,OAAO,CAAC;EACV;EAEA,OAAOc,SAAS;AAClB;AAEA,SAASE,qBAAqBA,CAC5BC,KAAsB,EACtBR,UAA0C,EACM;EAChD,IAAIQ,KAAK,CAACnB,WAAW,CAACE,KAAK,KAAKiB,KAAK,CAACnB,WAAW,CAACC,GAAG,EAAE;IACrD,OAAO;MAAEV,EAAE,EAAE,IAAI;MAAEO,KAAK,EAAEkB;IAAU,CAAC;EACvC;EAEA,MAAMI,mBAAmB,GAAGT,UAAU,CAACU,OAAO,CAAC,CAACN,SAAS,EAAEhB,KAAK,KAC9DK,eAAe,CAACe,KAAK,CAACnB,WAAW,EAAEe,SAAS,CAACf,WAAW,CAAC,GAAG,CAACD,KAAK,CAAC,GAAG,EACxE,CAAC;EAED,IAAIqB,mBAAmB,CAACvB,MAAM,GAAG,CAAC,EAAE;IAClC,OAAOV,iCAAiC,CACtC,oBAAoB,EACpB,qFAAqF,EACrF;MAAEa,WAAW,EAAEmB,KAAK,CAACnB,WAAW;MAAEsB,OAAO,EAAEH,KAAK,CAACI;IAAG,CACtD,CAAC;EACH;EAEA,MAAM5B,SAAS,GAAGyB,mBAAmB,CAAC,CAAC,CAAC;EAExC,IAAI,OAAOzB,SAAS,KAAK,QAAQ,EAAE;IACjC,MAAMoB,SAAS,GAAGJ,UAAU,CAAChB,SAAS,CAAC;IAEvC,IAAIoB,SAAS,IAAIR,kBAAkB,CAACQ,SAAS,CAACf,WAAW,EAAEmB,KAAK,CAACnB,WAAW,CAAC,EAAE;MAC7E,OAAO;QAAET,EAAE,EAAE,IAAI;QAAEO,KAAK,EAAEH;MAAU,CAAC;IACvC;IAEA,OAAOR,iCAAiC,CACtC,oBAAoB,EACpB,8GAA8G,EAC9G;MAAEQ,SAAS;MAAEK,WAAW,EAAEmB,KAAK,CAACnB,WAAW;MAAEsB,OAAO,EAAEH,KAAK,CAACI;IAAG,CACjE,CAAC;EACH;EAEA,IAAIJ,KAAK,CAAC1B,IAAI,CAAC+B,IAAI,CAAC,CAAC,CAAC3B,MAAM,KAAK,CAAC,EAAE;IAClC,OAAO;MACLN,EAAE,EAAE,IAAI;MACRO,KAAK,EAAEY,gCAAgC,CAACS,KAAK,CAACnB,WAAW,EAAEW,UAAU;IACvE,CAAC;EACH;EAEA,OAAOxB,iCAAiC,CACtC,qBAAqB,EACrB,uFAAuF,EACvF;IAAEa,WAAW,EAAEmB,KAAK,CAACnB,WAAW;IAAEsB,OAAO,EAAEH,KAAK,CAACI;EAAG,CACtD,CAAC;AACH;AAEA,SAASE,mBAAmBA,CAACC,KAA2B,EAAqC;EAC3F,MAAMC,cAAc,GAAG3C,UAAU,CAAC4C,OAAO,CAACF,KAAK,CAAC,IAAI,CAAC,CAAC;EAEtD,OAAOzC,sBAAsB,CAAC4B,MAAM,CAAoC,CAACgB,QAAQ,EAAEC,GAAG,KAAK;IACzF,MAAMhC,KAAK,GAAG6B,cAAc,CAACG,GAAG,CAAC;IAEjC,IAAIhC,KAAK,KAAKkB,SAAS,EAAE;MACvB,OAAOa,QAAQ;IACjB;IAEA,OAAO;MACL,GAAGA,QAAQ;MACX,CAACC,GAAG,GAAGhC;IACT,CAAC;EACH,CAAC,EAAE,CAAC,CAAC,CAAC;AACR;AAEA,SAASiC,qBAAqBA,CAACjC,KAAa,EAAiB;EAC3D,OAAOkC,MAAM,CAACC,QAAQ,CAACnC,KAAK,CAAC,GAAGA,KAAK,GAAG,IAAI;AAC9C;AAEA,SAASoC,kCAAkCA,CAAA,EAGzC;EACA,OAAOhD,4CAA4C,CAAC2B,MAAM,CAGxD,CAACsB,aAAa,EAAE/C,MAAM,MAAM;IAC1B,GAAG+C,aAAa;IAChB,CAAC/C,MAAM,GAAG;EACZ,CAAC,CAAC,EACF;IACE,YAAY,EAAE,CAAC;IACfgD,OAAO,EAAE,CAAC;IACV,WAAW,EAAE,CAAC;IACdV,KAAK,EAAE,CAAC;IACRjC,IAAI,EAAE,CAAC;IACP4C,KAAK,EAAE;EACT,CACF,CAAC;AACH;AAEA,OAAO,SAASC,0BAA0BA,CACxC7C,IAAY,EACZ8C,aAA8D,EACF;EAC5D,MAAMC,MAAsC,GAAG;IAAE5C,MAAM,EAAE,CAAC;IAAE6C,KAAK,EAAE,EAAE;IAAElD,EAAE,EAAE;EAAK,CAAC;;EAEjF;EACA,KAAK,MAAM,CAACI,SAAS,EAAE+C,YAAY,CAAC,IAAIH,aAAa,CAACI,OAAO,CAAC,CAAC,EAAE;IAC/D,MAAM5B,SAAS,GAAGvB,yBAAyB,CAACC,IAAI,EAAEiD,YAAY,CAACjD,IAAI,EAAEE,SAAS,EAAE6C,MAAM,CAAC5C,MAAM,CAAC;IAE9F,IAAI,CAACmB,SAAS,CAACxB,EAAE,EAAE;MACjB,OAAOwB,SAAS;IAClB;IAEAyB,MAAM,CAAC5C,MAAM,GAAGmB,SAAS,CAACjB,KAAK,CAACE,WAAW,CAACC,GAAG;IAC/CuC,MAAM,CAACC,KAAK,CAACG,IAAI,CAAC7B,SAAS,CAACjB,KAAK,CAAC;EACpC;EAEA,IAAIL,IAAI,CAACI,MAAM,GAAG,CAAC,IAAI2C,MAAM,CAACC,KAAK,CAAC5C,MAAM,KAAK,CAAC,EAAE;IAChD,OAAOV,iCAAiC,CACtC,qBAAqB,EACrB,qEAAqE,EACrE;MAAEa,WAAW,EAAE;QAAEC,GAAG,EAAE,CAAC;QAAEC,KAAK,EAAE;MAAE;IAAE,CACtC,CAAC;EACH;EAEA,OAAO;IACLX,EAAE,EAAE,IAAI;IACRO,KAAK,EAAE0C,MAAM,CAACC;EAChB,CAAC;AACH;AAEA,OAAO,SAASI,iCAAiCA,CAC/CC,MAAkC,EAClCnC,UAA0C,EACuB;EACjE,MAAMoC,MAAkE,GAAGpC,UAAU,CAACqC,GAAG,CACtFC,IAAI,KAAM;IACTA,IAAI;IACJH,MAAM,EAAE;EACV,CAAC,CACH,CAAC;EAED,KAAK,MAAM3B,KAAK,IAAI2B,MAAM,EAAE;IAC1B,MAAMnD,SAAS,GAAGuB,qBAAqB,CAACC,KAAK,EAAER,UAAU,CAAC;IAE1D,IAAI,CAAChB,SAAS,CAACJ,EAAE,EAAE;MACjB,OAAOI,SAAS;IAClB;IAEA,IAAI,OAAOA,SAAS,CAACG,KAAK,KAAK,QAAQ,EAAE;MACvC;IACF;IAEA,MAAMoD,KAAK,GAAGH,MAAM,CAACpD,SAAS,CAACG,KAAK,CAAC;IAErC,IAAI,CAACoD,KAAK,EAAE;MACV,OAAO/D,iCAAiC,CACtC,qBAAqB,EACrB,kEAAkE,EAClE;QAAEa,WAAW,EAAEmB,KAAK,CAACnB,WAAW;QAAEsB,OAAO,EAAEH,KAAK,CAACI;MAAG,CACtD,CAAC;IACH;IAEA2B,KAAK,CAACJ,MAAM,CAACF,IAAI,CAACzB,KAAK,CAAC;EAC1B;EAEA,OAAO;IACL5B,EAAE,EAAE,IAAI;IACRO,KAAK,EAAEiD,MAAM,CAACC,GAAG,CAAC,CAAC;MAAEC,IAAI;MAAEH,MAAM,EAAEK;IAAY,CAAC,MAAM;MACpDF,IAAI;MACJxD,IAAI,EAAE0D,WAAW,CAACH,GAAG,CAAE7B,KAAK,IAAKA,KAAK,CAAC1B,IAAI,CAAC,CAAC2D,IAAI,CAAC,EAAE,CAAC;MACrDN,MAAM,EAAEK;IACV,CAAC,CAAC;EACJ,CAAC;AACH;AAEA,OAAO,SAASE,yCAAyCA,CACvDN,MAA2C,EACF;EACzC,MAAMO,QAAQ,GAAGP,MAAM,CAACQ,IAAI,CAAEL,KAAK,IAAKA,KAAK,CAACzD,IAAI,KAAKyD,KAAK,CAACD,IAAI,CAACxD,IAAI,CAAC;EAEvE,IAAI6D,QAAQ,EAAE;IACZ,OAAO;MACLE,UAAU,EAAEF,QAAQ,CAAC7D,IAAI;MACzBgE,YAAY,EAAEH,QAAQ,CAACL,IAAI,CAACxD,IAAI;MAChCE,SAAS,EAAE2D,QAAQ,CAACL,IAAI,CAAClD,KAAK;MAC9BX,MAAM,EAAE,0BAA0B;MAClCsE,MAAM,EAAE;IACV,CAAC;EACH;EAEA,OAAO;IACLC,SAAS,EAAEZ,MAAM,CAAClD,MAAM;IACxB6D,MAAM,EAAE,IAAI;IACZE,UAAU,EAAEb,MAAM,CAAClC,MAAM,CAAC,CAACgD,KAAK,EAAEX,KAAK,KAAKW,KAAK,GAAGX,KAAK,CAACJ,MAAM,CAACjD,MAAM,EAAE,CAAC;EAC5E,CAAC;AACH;AAEA,OAAO,SAASiE,mCAAmCA,CAAC;EAClDC,gBAAgB;EAChBC,qBAAqB;EACrBC,aAAa;EACb1B,aAAa;EACbb,KAAK;EACLjC;AACkC,CAAC,EAAU;EAC7C,OAAOyE,IAAI,CAACC,SAAS,CAAC;IACpBJ,gBAAgB;IAChBC,qBAAqB;IACrBC,aAAa,EAAElC,qBAAqB,CAACkC,aAAa,CAAC;IACnD1B,aAAa,EAAEA,aAAa,CAACS,GAAG,CAAEC,IAAI,KAAM;MAC1CmB,MAAM,EAAErC,qBAAqB,CAACkB,IAAI,CAACmB,MAAM,CAAC;MAC1C3E,IAAI,EAAEwD,IAAI,CAACxD,IAAI;MACf4C,KAAK,EAAEN,qBAAqB,CAACkB,IAAI,CAACZ,KAAK,CAAC;MACxCgC,CAAC,EAAEtC,qBAAqB,CAACkB,IAAI,CAACoB,CAAC,CAAC;MAChCC,CAAC,EAAEvC,qBAAqB,CAACkB,IAAI,CAACqB,CAAC;IACjC,CAAC,CAAC,CAAC;IACH5C,KAAK,EAAED,mBAAmB,CAACC,KAAK,CAAC;IACjCjC;EACF,CAAC,CAAC;AACJ;AAEA,OAAO,SAAS8E,uCAAuCA,CACrDnC,OAWC,EACkC;EACnC,OAAO;IACLoC,sBAAsB,EAAEpC,OAAO,EAAEoC,sBAAsB,IAAI,CAAC;IAC5DC,qBAAqB,EAAEvC,kCAAkC,CAAC,CAAC;IAC3DyB,SAAS,EAAEvB,OAAO,EAAEuB,SAAS,IAAI,CAAC;IAClCe,mBAAmB,EAAEtC,OAAO,EAAEsC,mBAAmB,IAAI,CAAC;IACtDC,iBAAiB,EAAEvC,OAAO,EAAEuC,iBAAiB,IAAI,CAAC;IAClDC,yBAAyB,EAAExC,OAAO,EAAEwC,yBAAyB,IAAI,CAAC;IAClEC,SAAS,EAAEzC,OAAO,EAAEyC,SAAS;IAC7BjB,UAAU,EAAExB,OAAO,EAAEwB,UAAU,IAAI;EACrC,CAAC;AACH;AAEA,OAAO,SAASkB,qCAAqCA,CACnDjD,QAA2C,EAC3CkD,WAA4C,EACX;EACjC,IAAIlD,QAAQ,CAACgD,SAAS,KAAKE,WAAW,CAACF,SAAS,EAAE;IAChD,OAAO;MACLG,QAAQ,EAAE,KAAK;MACfnD,QAAQ,EAAE;QACR,GAAGA,QAAQ;QACX8B,SAAS,EAAEoB,WAAW,CAACpB,SAAS;QAChCgB,iBAAiB,EAAE9C,QAAQ,CAAC8C,iBAAiB,GAAG,CAAC;QACjDC,yBAAyB,EAAE/C,QAAQ,CAAC+C,yBAAyB,GAAG,CAAC;QACjEhB,UAAU,EAAEmB,WAAW,CAACnB;MAC1B;IACF,CAAC;EACH;EAEA,OAAO;IACLoB,QAAQ,EAAE,IAAI;IACdnD,QAAQ,EAAE;MACR,GAAGA,QAAQ;MACX2C,sBAAsB,EAAE3C,QAAQ,CAAC2C,sBAAsB,GAAG,CAAC;MAC3DC,qBAAqB,EAAE;QACrB,GAAG5C,QAAQ,CAAC4C,qBAAqB;QACjC,CAACM,WAAW,CAACE,kBAAkB,GAC7BpD,QAAQ,CAAC4C,qBAAqB,CAACM,WAAW,CAACE,kBAAkB,CAAC,GAAG;MACrE,CAAC;MACDtB,SAAS,EAAEoB,WAAW,CAACpB,SAAS;MAChCe,mBAAmB,EAAE7C,QAAQ,CAAC6C,mBAAmB,GAAG,CAAC;MACrDC,iBAAiB,EAAE9C,QAAQ,CAAC8C,iBAAiB,GAAG,CAAC;MACjDE,SAAS,EAAEE,WAAW,CAACF,SAAS;MAChCjB,UAAU,EAAEmB,WAAW,CAACnB;IAC1B;EACF,CAAC;AACH","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":[]}
|