@hyperframes/core 0.6.89 → 0.6.91
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/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/media/gif.d.ts +12 -0
- package/dist/media/gif.d.ts.map +1 -0
- package/dist/media/gif.js +144 -0
- package/dist/media/gif.js.map +1 -0
- package/dist/parsers/gsapParser.d.ts +13 -0
- package/dist/parsers/gsapParser.d.ts.map +1 -1
- package/dist/parsers/gsapParser.js +221 -30
- package/dist/parsers/gsapParser.js.map +1 -1
- package/dist/parsers/gsapParser.test-helpers.d.ts +49 -0
- package/dist/parsers/gsapParser.test-helpers.d.ts.map +1 -0
- package/dist/parsers/gsapParser.test-helpers.js +97 -0
- package/dist/parsers/gsapParser.test-helpers.js.map +1 -0
- package/dist/studio-api/helpers/sourceMutation.d.ts.map +1 -1
- package/dist/studio-api/helpers/sourceMutation.js +51 -0
- package/dist/studio-api/helpers/sourceMutation.js.map +1 -1
- package/dist/studio-api/routes/files.d.ts.map +1 -1
- package/dist/studio-api/routes/files.js +32 -6
- package/dist/studio-api/routes/files.js.map +1 -1
- package/package.json +2 -1
package/dist/index.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export { lintHyperframeHtml } from "./lint/hyperframeLinter";
|
|
|
15
15
|
export { rewriteAssetPaths, rewriteAssetPath, rewriteCssAssetUrls, } from "./compiler/rewriteSubCompPaths";
|
|
16
16
|
export { CSS_URL_RE, isNonRelativeUrl, isPathInside } from "./compiler/assetPaths";
|
|
17
17
|
export { decodeUrlPathVariants } from "./utils/urlPath";
|
|
18
|
+
export { parseAnimatedGifMetadata, type AnimatedGifMetadata } from "./media/gif";
|
|
18
19
|
export { HYPERFRAME_RUNTIME_ARTIFACTS, HYPERFRAME_RUNTIME_CONTRACT, loadHyperframeRuntimeSource, type HyperframeRuntimeContract, } from "./inline-scripts/hyperframe";
|
|
19
20
|
export { HYPERFRAME_RUNTIME_GLOBALS, HYPERFRAME_BRIDGE_SOURCES, HYPERFRAME_CONTROL_ACTIONS, type HyperframeControlAction, } from "./inline-scripts/runtimeContract";
|
|
20
21
|
export { getHyperframeRuntimeScript } from "./generated/runtime-inline";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,aAAa,EACb,WAAW,EACX,KAAK,EACL,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,GAAG,EACH,QAAQ,EACR,cAAc,EACd,SAAS,EACT,cAAc,EACd,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,QAAQ,EACR,kBAAkB,EAClB,gBAAgB,EAChB,SAAS,EACT,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,EACvB,cAAc,EACd,cAAc,EACd,aAAa,EACb,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,YAAY,GACb,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,EACvB,QAAQ,EACR,mBAAmB,EACnB,KAAK,EACL,WAAW,EACX,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,0BAA0B,EAC1B,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,cAAc,GACf,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EACL,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAM/B,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErF,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE5E,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAG9B,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AAGnC,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -10,6 +10,7 @@ export { lintHyperframeHtml } from "./lint/hyperframeLinter";
|
|
|
10
10
|
export { rewriteAssetPaths, rewriteAssetPath, rewriteCssAssetUrls, } from "./compiler/rewriteSubCompPaths";
|
|
11
11
|
export { CSS_URL_RE, isNonRelativeUrl, isPathInside } from "./compiler/assetPaths";
|
|
12
12
|
export { decodeUrlPathVariants } from "./utils/urlPath";
|
|
13
|
+
export { parseAnimatedGifMetadata } from "./media/gif";
|
|
13
14
|
// Inline scripts
|
|
14
15
|
export { HYPERFRAME_RUNTIME_ARTIFACTS, HYPERFRAME_RUNTIME_CONTRACT, loadHyperframeRuntimeSource, } from "./inline-scripts/hyperframe";
|
|
15
16
|
export { HYPERFRAME_RUNTIME_GLOBALS, HYPERFRAME_BRIDGE_SOURCES, HYPERFRAME_CONTROL_ACTIONS, } from "./inline-scripts/runtimeContract";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAuCA,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,EACvB,QAAQ,EACR,mBAAmB,EACnB,KAAK,EACL,WAAW,EACX,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,0BAA0B,EAC1B,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,YAAY;AACZ,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EACL,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAUlC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AASnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAuCA,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,EACvB,QAAQ,EACR,mBAAmB,EACnB,KAAK,EACL,WAAW,EACX,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,0BAA0B,EAC1B,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,YAAY;AACZ,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EACL,QAAQ,EACR,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,0BAA0B,CAAC;AAUlC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AASnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAA4B,MAAM,aAAa,CAAC;AAEjF,iBAAiB;AACjB,OAAO,EACL,4BAA4B,EAC5B,2BAA2B,EAC3B,2BAA2B,GAE5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,0BAA0B,GAE3B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EACL,6BAA6B,GAE9B,MAAM,4CAA4C,CAAC;AACpD,OAAO,EACL,6BAA6B,EAC7B,qBAAqB,EACrB,mBAAmB,GAEpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAU7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,qCAAqC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,2CAA2C;AAC3C,OAAO,EACL,iBAAiB,EACjB,6BAA6B,GAE9B,MAAM,gCAAgC,CAAC;AAiBxC,OAAO,EACL,UAAU,EACV,UAAU,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,eAAe,GAChB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface AnimatedGifMetadata {
|
|
2
|
+
width: number;
|
|
3
|
+
height: number;
|
|
4
|
+
frameCount: number;
|
|
5
|
+
delaysCentiseconds: number[];
|
|
6
|
+
durationSeconds: number;
|
|
7
|
+
/** Netscape loop count. 0 means infinite; null means no loop extension was present. */
|
|
8
|
+
loopCount: number | null;
|
|
9
|
+
animated: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function parseAnimatedGifMetadata(bytes: Uint8Array): AnimatedGifMetadata | null;
|
|
12
|
+
//# sourceMappingURL=gif.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gif.d.ts","sourceRoot":"","sources":["../../src/media/gif.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,uFAAuF;IACvF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;CACnB;AA6DD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,UAAU,GAAG,mBAAmB,GAAG,IAAI,CAwFtF"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
function readAscii(bytes, start, length) {
|
|
2
|
+
if (start + length > bytes.length)
|
|
3
|
+
return "";
|
|
4
|
+
let value = "";
|
|
5
|
+
for (let i = start; i < start + length; i++) {
|
|
6
|
+
value += String.fromCharCode(bytes[i] ?? 0);
|
|
7
|
+
}
|
|
8
|
+
return value;
|
|
9
|
+
}
|
|
10
|
+
function readU16LE(bytes, offset) {
|
|
11
|
+
if (offset + 1 >= bytes.length)
|
|
12
|
+
return null;
|
|
13
|
+
return (bytes[offset] ?? 0) | ((bytes[offset + 1] ?? 0) << 8);
|
|
14
|
+
}
|
|
15
|
+
function colorTableByteLength(packed) {
|
|
16
|
+
return 3 * 2 ** ((packed & 0b0000_0111) + 1);
|
|
17
|
+
}
|
|
18
|
+
function skipSubBlocks(bytes, offset) {
|
|
19
|
+
let pos = offset;
|
|
20
|
+
while (pos < bytes.length) {
|
|
21
|
+
const size = bytes[pos];
|
|
22
|
+
if (size === undefined)
|
|
23
|
+
return null;
|
|
24
|
+
pos += 1;
|
|
25
|
+
if (size === 0)
|
|
26
|
+
return pos;
|
|
27
|
+
pos += size;
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
function parseApplicationExtension(bytes, offset) {
|
|
32
|
+
const blockSize = bytes[offset];
|
|
33
|
+
if (blockSize === undefined || offset + 1 + blockSize > bytes.length)
|
|
34
|
+
return null;
|
|
35
|
+
const appId = readAscii(bytes, offset + 1, blockSize);
|
|
36
|
+
let pos = offset + 1 + blockSize;
|
|
37
|
+
let loopCount = null;
|
|
38
|
+
while (pos < bytes.length) {
|
|
39
|
+
const size = bytes[pos];
|
|
40
|
+
if (size === undefined)
|
|
41
|
+
return null;
|
|
42
|
+
pos += 1;
|
|
43
|
+
if (size === 0)
|
|
44
|
+
return { nextOffset: pos, loopCount };
|
|
45
|
+
if (pos + size > bytes.length)
|
|
46
|
+
return null;
|
|
47
|
+
if ((appId === "NETSCAPE2.0" || appId === "ANIMEXTS1.0") && size >= 3 && bytes[pos] === 1) {
|
|
48
|
+
loopCount = readU16LE(bytes, pos + 1);
|
|
49
|
+
}
|
|
50
|
+
pos += size;
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
export function parseAnimatedGifMetadata(bytes) {
|
|
55
|
+
if (bytes.length < 13)
|
|
56
|
+
return null;
|
|
57
|
+
const signature = readAscii(bytes, 0, 6);
|
|
58
|
+
if (signature !== "GIF87a" && signature !== "GIF89a")
|
|
59
|
+
return null;
|
|
60
|
+
const width = readU16LE(bytes, 6);
|
|
61
|
+
const height = readU16LE(bytes, 8);
|
|
62
|
+
if (width == null || height == null || width <= 0 || height <= 0)
|
|
63
|
+
return null;
|
|
64
|
+
const packed = bytes[10] ?? 0;
|
|
65
|
+
let pos = 13;
|
|
66
|
+
if ((packed & 0b1000_0000) !== 0) {
|
|
67
|
+
pos += colorTableByteLength(packed);
|
|
68
|
+
}
|
|
69
|
+
let frameCount = 0;
|
|
70
|
+
const delaysCentiseconds = [];
|
|
71
|
+
let loopCount = null;
|
|
72
|
+
while (pos < bytes.length) {
|
|
73
|
+
const introducer = bytes[pos];
|
|
74
|
+
if (introducer === undefined)
|
|
75
|
+
return null;
|
|
76
|
+
pos += 1;
|
|
77
|
+
if (introducer === 0x3b)
|
|
78
|
+
break;
|
|
79
|
+
if (introducer === 0x21) {
|
|
80
|
+
const label = bytes[pos];
|
|
81
|
+
if (label === undefined)
|
|
82
|
+
return null;
|
|
83
|
+
pos += 1;
|
|
84
|
+
if (label === 0xf9) {
|
|
85
|
+
const blockSize = bytes[pos];
|
|
86
|
+
if (blockSize !== 4 || pos + 6 > bytes.length)
|
|
87
|
+
return null;
|
|
88
|
+
const delay = readU16LE(bytes, pos + 2);
|
|
89
|
+
if (delay == null)
|
|
90
|
+
return null;
|
|
91
|
+
delaysCentiseconds.push(delay);
|
|
92
|
+
pos += 1 + blockSize;
|
|
93
|
+
if (bytes[pos] !== 0)
|
|
94
|
+
return null;
|
|
95
|
+
pos += 1;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (label === 0xff) {
|
|
99
|
+
const parsed = parseApplicationExtension(bytes, pos);
|
|
100
|
+
if (!parsed)
|
|
101
|
+
return null;
|
|
102
|
+
if (parsed.loopCount != null)
|
|
103
|
+
loopCount = parsed.loopCount;
|
|
104
|
+
pos = parsed.nextOffset;
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
const next = skipSubBlocks(bytes, pos);
|
|
108
|
+
if (next == null)
|
|
109
|
+
return null;
|
|
110
|
+
pos = next;
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
if (introducer === 0x2c) {
|
|
114
|
+
if (pos + 9 > bytes.length)
|
|
115
|
+
return null;
|
|
116
|
+
const imagePacked = bytes[pos + 8] ?? 0;
|
|
117
|
+
pos += 9;
|
|
118
|
+
if ((imagePacked & 0b1000_0000) !== 0) {
|
|
119
|
+
pos += colorTableByteLength(imagePacked);
|
|
120
|
+
}
|
|
121
|
+
if (pos >= bytes.length)
|
|
122
|
+
return null;
|
|
123
|
+
pos += 1; // LZW minimum code size
|
|
124
|
+
const next = skipSubBlocks(bytes, pos);
|
|
125
|
+
if (next == null)
|
|
126
|
+
return null;
|
|
127
|
+
pos = next;
|
|
128
|
+
frameCount += 1;
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
const durationSeconds = delaysCentiseconds.reduce((total, delay) => total + Math.max(0, delay), 0) / 100;
|
|
134
|
+
return {
|
|
135
|
+
width,
|
|
136
|
+
height,
|
|
137
|
+
frameCount,
|
|
138
|
+
delaysCentiseconds,
|
|
139
|
+
durationSeconds,
|
|
140
|
+
loopCount,
|
|
141
|
+
animated: frameCount > 1,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=gif.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gif.js","sourceRoot":"","sources":["../../src/media/gif.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,19 @@ export declare function addAnimationWithKeyframesToScript(script: string, target
|
|
|
19
19
|
id: string;
|
|
20
20
|
};
|
|
21
21
|
export declare function removeAnimationFromScript(script: string, animationId: string): string;
|
|
22
|
+
export interface SplitAnimationsOptions {
|
|
23
|
+
originalId: string;
|
|
24
|
+
newId: string;
|
|
25
|
+
splitTime: number;
|
|
26
|
+
elementStart: number;
|
|
27
|
+
elementDuration: number;
|
|
28
|
+
}
|
|
29
|
+
export interface SplitAnimationsResult {
|
|
30
|
+
script: string;
|
|
31
|
+
/** Non-ID-selector animations that the engine cannot safely retarget. */
|
|
32
|
+
skippedSelectors: string[];
|
|
33
|
+
}
|
|
34
|
+
export declare function splitAnimationsInScript(script: string, opts: SplitAnimationsOptions): SplitAnimationsResult;
|
|
22
35
|
/**
|
|
23
36
|
* Insert a keyframe at the given percentage in an existing percentage-keyframes
|
|
24
37
|
* object. If the percentage already exists, its value is replaced.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gsapParser.d.ts","sourceRoot":"","sources":["../../src/parsers/gsapParser.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,aAAa,EAIlB,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,aAAa,EACb,cAAc,EACd,aAAa,EACb,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,eAAe,EACf,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACtE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"gsapParser.d.ts","sourceRoot":"","sources":["../../src/parsers/gsapParser.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,aAAa,EAIlB,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,aAAa,EACb,cAAc,EACd,aAAa,EACb,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,eAAe,EACf,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACtE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AA+4BjD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CA+B1D;AAsJD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAC9B,MAAM,CAYR;AAoBD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,GACnC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CA4BhC;AAED,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,KAAK,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC,EACF,IAAI,CAAC,EAAE,MAAM,GACZ;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CA2ChC;AAoCD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CA0BrF;AAoCD,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAGD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,sBAAsB,GAC3B,qBAAqB,CAkHvB;AA4FD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAC3C,IAAI,CAAC,EAAE,MAAM,EACb,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GACjD,MAAM,CAoGR;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,MAAM,CAsBR;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAC3C,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAYR;AAwED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GACnD,MAAM,CAyBR;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAoBxF;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,KAAK,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC,EACF,QAAQ,CAAC,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,MAAM,GACxB,MAAM,CAmCR;AAsDD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,GACpB,MAAM,CAsGR;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAC9B,MAAM,CAsCR;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAMnF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,KAAK,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC,GACD,MAAM,CAmFR"}
|
|
@@ -483,6 +483,20 @@ function parsePercentageKeyframes(node, scope) {
|
|
|
483
483
|
...(easeEach ? { easeEach } : {}),
|
|
484
484
|
};
|
|
485
485
|
}
|
|
486
|
+
function computeKeyframesTotalDuration(varsNode, scope) {
|
|
487
|
+
const kfNode = (varsNode.properties ?? []).find((p) => (p.key?.name ?? p.key?.value) === "keyframes")?.value;
|
|
488
|
+
if (!kfNode || kfNode.type !== "ArrayExpression")
|
|
489
|
+
return undefined;
|
|
490
|
+
let total = 0;
|
|
491
|
+
for (const el of kfNode.elements ?? []) {
|
|
492
|
+
if (!el || el.type !== "ObjectExpression")
|
|
493
|
+
continue;
|
|
494
|
+
const r = objectExpressionToRecord(el, scope);
|
|
495
|
+
if (typeof r.duration === "number")
|
|
496
|
+
total += r.duration;
|
|
497
|
+
}
|
|
498
|
+
return total > 0 ? total : undefined;
|
|
499
|
+
}
|
|
486
500
|
// fallow-ignore-next-line complexity
|
|
487
501
|
function parseObjectArrayKeyframes(node, scope) {
|
|
488
502
|
const elements = node.elements ?? [];
|
|
@@ -747,8 +761,11 @@ function tweenCallToAnimation(call, scope) {
|
|
|
747
761
|
}
|
|
748
762
|
const posVal = call.positionArg ? extractLiteralValue(call.positionArg, scope) : 0;
|
|
749
763
|
const position = typeof posVal === "number" ? posVal : typeof posVal === "string" ? posVal : 0;
|
|
750
|
-
|
|
764
|
+
let duration = typeof vars.duration === "number" ? vars.duration : undefined;
|
|
751
765
|
const ease = typeof vars.ease === "string" ? vars.ease : undefined;
|
|
766
|
+
if (duration === undefined && keyframesData) {
|
|
767
|
+
duration = computeKeyframesTotalDuration(call.varsArg, scope);
|
|
768
|
+
}
|
|
752
769
|
const anim = {
|
|
753
770
|
targetSelector: call.selector,
|
|
754
771
|
method: call.method,
|
|
@@ -885,14 +902,12 @@ function setVarsKey(varsArg, key, value) {
|
|
|
885
902
|
}
|
|
886
903
|
}
|
|
887
904
|
/**
|
|
888
|
-
*
|
|
889
|
-
*
|
|
890
|
-
* untouched.
|
|
905
|
+
* Filter an ObjectExpression's properties, keeping non-editable keys
|
|
906
|
+
* and delegating the keep/drop decision for editable keys to `shouldKeep`.
|
|
891
907
|
*/
|
|
892
|
-
function
|
|
908
|
+
function filterEditableKeys(varsArg, shouldKeep) {
|
|
893
909
|
if (varsArg?.type !== "ObjectExpression")
|
|
894
910
|
return;
|
|
895
|
-
// Drop editable props no longer present.
|
|
896
911
|
varsArg.properties = varsArg.properties.filter((p) => {
|
|
897
912
|
if (!isObjectProperty(p))
|
|
898
913
|
return true;
|
|
@@ -901,8 +916,16 @@ function reconcileEditableProperties(varsArg, newProps) {
|
|
|
901
916
|
return true;
|
|
902
917
|
if (!isEditablePropertyKey(key))
|
|
903
918
|
return true;
|
|
904
|
-
return key
|
|
919
|
+
return shouldKeep(key);
|
|
905
920
|
});
|
|
921
|
+
}
|
|
922
|
+
/**
|
|
923
|
+
* Replace the editable-property keys on an ObjectExpression with `newProps`,
|
|
924
|
+
* leaving `duration`, `ease`, `stagger`, callbacks and other non-editable keys
|
|
925
|
+
* untouched.
|
|
926
|
+
*/
|
|
927
|
+
function reconcileEditableProperties(varsArg, newProps) {
|
|
928
|
+
filterEditableKeys(varsArg, (key) => key in newProps);
|
|
906
929
|
// Upsert each new prop, preserving the order keys first appeared.
|
|
907
930
|
for (const [key, value] of Object.entries(newProps)) {
|
|
908
931
|
setVarsKey(varsArg, key, value);
|
|
@@ -980,6 +1003,26 @@ export function updateAnimationInScript(script, animationId, updates) {
|
|
|
980
1003
|
applyUpdatesToCall(target.call, updates);
|
|
981
1004
|
return recast.print(parsed.ast).code;
|
|
982
1005
|
}
|
|
1006
|
+
function updateAnimationSelector(script, animationId, newSelector) {
|
|
1007
|
+
let parsed;
|
|
1008
|
+
try {
|
|
1009
|
+
parsed = parseGsapAst(script);
|
|
1010
|
+
}
|
|
1011
|
+
catch {
|
|
1012
|
+
return script;
|
|
1013
|
+
}
|
|
1014
|
+
const target = parsed.located.find((l) => l.id === animationId);
|
|
1015
|
+
if (!target)
|
|
1016
|
+
return script;
|
|
1017
|
+
const selectorArg = target.call.path.node.arguments?.[0];
|
|
1018
|
+
if (selectorArg?.type === "StringLiteral") {
|
|
1019
|
+
selectorArg.value = newSelector;
|
|
1020
|
+
}
|
|
1021
|
+
else if (selectorArg?.type === "Identifier") {
|
|
1022
|
+
target.call.path.node.arguments[0] = { type: "StringLiteral", value: newSelector };
|
|
1023
|
+
}
|
|
1024
|
+
return recast.print(parsed.ast).code;
|
|
1025
|
+
}
|
|
983
1026
|
export function addAnimationToScript(script, animation) {
|
|
984
1027
|
let parsed;
|
|
985
1028
|
try {
|
|
@@ -1116,7 +1159,150 @@ export function removeAnimationFromScript(script, animationId) {
|
|
|
1116
1159
|
}
|
|
1117
1160
|
return recast.print(parsed.ast).code;
|
|
1118
1161
|
}
|
|
1162
|
+
function insertInheritedStateSet(script, selector, position, properties) {
|
|
1163
|
+
let parsed;
|
|
1164
|
+
try {
|
|
1165
|
+
parsed = parseGsapAst(script);
|
|
1166
|
+
}
|
|
1167
|
+
catch {
|
|
1168
|
+
return script;
|
|
1169
|
+
}
|
|
1170
|
+
const tlVar = parsed.timelineVar;
|
|
1171
|
+
const props = Object.entries(properties)
|
|
1172
|
+
.map(([k, v]) => `${k}: ${typeof v === "string" ? JSON.stringify(v) : v}`)
|
|
1173
|
+
.join(", ");
|
|
1174
|
+
const code = `${tlVar}.set(${JSON.stringify(selector)}, { ${props} }, ${position});`;
|
|
1175
|
+
const newStatement = parseScript(code).program.body[0];
|
|
1176
|
+
const anchor = findTimelineDeclarationPath(parsed.ast, tlVar);
|
|
1177
|
+
if (anchor) {
|
|
1178
|
+
anchor.insertAfter(newStatement);
|
|
1179
|
+
}
|
|
1180
|
+
else if (parsed.located.length > 0) {
|
|
1181
|
+
const firstTween = parsed.located[0].call;
|
|
1182
|
+
const stmtPath = findStatementPath(firstTween.path);
|
|
1183
|
+
if (stmtPath)
|
|
1184
|
+
stmtPath.insertBefore(newStatement);
|
|
1185
|
+
else
|
|
1186
|
+
parsed.ast.program.body.unshift(newStatement);
|
|
1187
|
+
}
|
|
1188
|
+
else {
|
|
1189
|
+
parsed.ast.program.body.push(newStatement);
|
|
1190
|
+
}
|
|
1191
|
+
return recast.print(parsed.ast).code;
|
|
1192
|
+
}
|
|
1193
|
+
// fallow-ignore-next-line complexity
|
|
1194
|
+
export function splitAnimationsInScript(script, opts) {
|
|
1195
|
+
const parsed = parseGsapScript(script);
|
|
1196
|
+
const originalSelector = `#${opts.originalId}`;
|
|
1197
|
+
const newSelector = `#${opts.newId}`;
|
|
1198
|
+
const skippedSelectors = [];
|
|
1199
|
+
for (const a of parsed.animations) {
|
|
1200
|
+
if (a.targetSelector !== originalSelector && a.targetSelector.includes(opts.originalId)) {
|
|
1201
|
+
skippedSelectors.push(a.targetSelector);
|
|
1202
|
+
}
|
|
1203
|
+
}
|
|
1204
|
+
const matching = parsed.animations.filter((a) => a.targetSelector === originalSelector);
|
|
1205
|
+
if (matching.length === 0)
|
|
1206
|
+
return { script, skippedSelectors };
|
|
1207
|
+
let result = script;
|
|
1208
|
+
const newElementStart = opts.splitTime;
|
|
1209
|
+
const inheritedProps = {};
|
|
1210
|
+
// Reverse iteration: updateAnimationSelector mutates selectors in the source
|
|
1211
|
+
// string, which can shift count-based ID suffixes (e.g. "#hero-1" → "#hero-2")
|
|
1212
|
+
// for later animations. Processing last-to-first prevents stale ID collisions.
|
|
1213
|
+
for (let i = matching.length - 1; i >= 0; i--) {
|
|
1214
|
+
const anim = matching[i];
|
|
1215
|
+
const pos = typeof anim.position === "number" ? anim.position : 0;
|
|
1216
|
+
const dur = anim.duration ?? 0;
|
|
1217
|
+
const animEnd = pos + dur;
|
|
1218
|
+
if (anim.keyframes) {
|
|
1219
|
+
if (pos >= opts.splitTime) {
|
|
1220
|
+
result = updateAnimationSelector(result, anim.id, newSelector);
|
|
1221
|
+
}
|
|
1222
|
+
else if (animEnd > opts.splitTime) {
|
|
1223
|
+
// Spanning keyframes can't be correctly split without renormalizing
|
|
1224
|
+
// percentages and durations — leave on original, warn the caller.
|
|
1225
|
+
skippedSelectors.push(`${originalSelector} (keyframes spanning split)`);
|
|
1226
|
+
const kfs = anim.keyframes.keyframes;
|
|
1227
|
+
for (const kf of kfs) {
|
|
1228
|
+
const kfTime = pos + (kf.percentage / 100) * dur;
|
|
1229
|
+
if (kfTime <= opts.splitTime) {
|
|
1230
|
+
for (const [k, v] of Object.entries(kf.properties)) {
|
|
1231
|
+
inheritedProps[k] = v;
|
|
1232
|
+
}
|
|
1233
|
+
}
|
|
1234
|
+
}
|
|
1235
|
+
}
|
|
1236
|
+
else {
|
|
1237
|
+
// Entirely before split — extract final keyframe properties
|
|
1238
|
+
const kfs = anim.keyframes.keyframes;
|
|
1239
|
+
if (kfs.length > 0) {
|
|
1240
|
+
for (const [k, v] of Object.entries(kfs[kfs.length - 1].properties)) {
|
|
1241
|
+
inheritedProps[k] = v;
|
|
1242
|
+
}
|
|
1243
|
+
}
|
|
1244
|
+
}
|
|
1245
|
+
continue;
|
|
1246
|
+
}
|
|
1247
|
+
if (animEnd <= opts.splitTime) {
|
|
1248
|
+
for (const [k, v] of Object.entries(anim.properties)) {
|
|
1249
|
+
inheritedProps[k] = v;
|
|
1250
|
+
}
|
|
1251
|
+
continue;
|
|
1252
|
+
}
|
|
1253
|
+
if (pos >= opts.splitTime) {
|
|
1254
|
+
result = updateAnimationSelector(result, anim.id, newSelector);
|
|
1255
|
+
continue;
|
|
1256
|
+
}
|
|
1257
|
+
// Spans the split — use linear interpolation to compute mid-values,
|
|
1258
|
+
// then .fromTo() on the clone so both halves play the correct range.
|
|
1259
|
+
// For .fromTo() tweens we have explicit from-values; for .to() tweens
|
|
1260
|
+
// we use accumulated state from prior animations, defaulting to 0 for
|
|
1261
|
+
// unknown numeric properties (the standard GSAP transform initial state).
|
|
1262
|
+
const progress = dur > 0 ? (opts.splitTime - pos) / dur : 0;
|
|
1263
|
+
const fromSource = anim.fromProperties ?? inheritedProps;
|
|
1264
|
+
const midProps = {};
|
|
1265
|
+
for (const [k, v] of Object.entries(anim.properties)) {
|
|
1266
|
+
if (typeof v !== "number") {
|
|
1267
|
+
midProps[k] = v;
|
|
1268
|
+
continue;
|
|
1269
|
+
}
|
|
1270
|
+
const fromVal = typeof fromSource[k] === "number" ? fromSource[k] : 0;
|
|
1271
|
+
midProps[k] = fromVal + (v - fromVal) * progress;
|
|
1272
|
+
}
|
|
1273
|
+
const firstHalfDuration = opts.splitTime - pos;
|
|
1274
|
+
result = updateAnimationInScript(result, anim.id, {
|
|
1275
|
+
duration: firstHalfDuration,
|
|
1276
|
+
properties: midProps,
|
|
1277
|
+
});
|
|
1278
|
+
const secondHalfDuration = animEnd - opts.splitTime;
|
|
1279
|
+
const addResult = addAnimationToScript(result, {
|
|
1280
|
+
targetSelector: newSelector,
|
|
1281
|
+
method: "fromTo",
|
|
1282
|
+
position: newElementStart,
|
|
1283
|
+
duration: secondHalfDuration,
|
|
1284
|
+
properties: { ...anim.properties },
|
|
1285
|
+
fromProperties: { ...midProps },
|
|
1286
|
+
ease: anim.ease,
|
|
1287
|
+
extras: anim.extras,
|
|
1288
|
+
});
|
|
1289
|
+
result = addResult.script;
|
|
1290
|
+
for (const [k, v] of Object.entries(midProps)) {
|
|
1291
|
+
inheritedProps[k] = v;
|
|
1292
|
+
}
|
|
1293
|
+
}
|
|
1294
|
+
if (Object.keys(inheritedProps).length > 0) {
|
|
1295
|
+
result = insertInheritedStateSet(result, newSelector, newElementStart, inheritedProps);
|
|
1296
|
+
}
|
|
1297
|
+
return { script: result, skippedSelectors };
|
|
1298
|
+
}
|
|
1119
1299
|
// ── Keyframe Mutation Functions ────────────────────────────────────────────
|
|
1300
|
+
function sortedKeyframes(kfs) {
|
|
1301
|
+
return kfs.slice().sort((a, b) => a.percentage - b.percentage);
|
|
1302
|
+
}
|
|
1303
|
+
function keyframePropsToCode(kf) {
|
|
1304
|
+
return Object.entries(kf.properties).map(([k, v]) => `${safeKey(k)}: ${valueToCode(v)}`);
|
|
1305
|
+
}
|
|
1120
1306
|
/** Remove a named property from an ObjectExpression's properties array. */
|
|
1121
1307
|
function removeVarsKey(varsArg, key) {
|
|
1122
1308
|
if (varsArg?.type !== "ObjectExpression")
|
|
@@ -1176,6 +1362,20 @@ function collapseKeyframesToFlat(varsArg, record) {
|
|
|
1176
1362
|
removeVarsKey(varsArg, "keyframes");
|
|
1177
1363
|
removeVarsKey(varsArg, "easeEach");
|
|
1178
1364
|
}
|
|
1365
|
+
/**
|
|
1366
|
+
* Locate an animation's keyframes ObjectExpression and build the percentage key.
|
|
1367
|
+
* Shared preamble for addKeyframeToScript, removeKeyframeFromScript, and
|
|
1368
|
+
* updateKeyframeInScript.
|
|
1369
|
+
*/
|
|
1370
|
+
function locateKeyframeCtx(script, animationId, percentage) {
|
|
1371
|
+
const loc = locateAnimation(script, animationId);
|
|
1372
|
+
if (!loc)
|
|
1373
|
+
return null;
|
|
1374
|
+
const kfNode = findKeyframesObjectNode(loc.target.call.varsArg);
|
|
1375
|
+
if (!kfNode)
|
|
1376
|
+
return null;
|
|
1377
|
+
return { loc, kfNode, pctKey: `${percentage}%` };
|
|
1378
|
+
}
|
|
1179
1379
|
/**
|
|
1180
1380
|
* Insert a keyframe at the given percentage in an existing percentage-keyframes
|
|
1181
1381
|
* object. If the percentage already exists, its value is replaced.
|
|
@@ -1285,13 +1485,10 @@ export function addKeyframeToScript(script, animationId, percentage, properties,
|
|
|
1285
1485
|
* remaining keyframe's properties.
|
|
1286
1486
|
*/
|
|
1287
1487
|
export function removeKeyframeFromScript(script, animationId, percentage) {
|
|
1288
|
-
const
|
|
1289
|
-
if (!
|
|
1290
|
-
return script;
|
|
1291
|
-
const kfNode = findKeyframesObjectNode(loc.target.call.varsArg);
|
|
1292
|
-
if (!kfNode)
|
|
1488
|
+
const ctx = locateKeyframeCtx(script, animationId, percentage);
|
|
1489
|
+
if (!ctx)
|
|
1293
1490
|
return script;
|
|
1294
|
-
const pctKey =
|
|
1491
|
+
const { loc, kfNode, pctKey } = ctx;
|
|
1295
1492
|
const removeIdx = kfNode.properties.findIndex((p) => isObjectProperty(p) && propKeyName(p) === pctKey);
|
|
1296
1493
|
if (removeIdx === -1)
|
|
1297
1494
|
return script;
|
|
@@ -1309,13 +1506,10 @@ export function removeKeyframeFromScript(script, animationId, percentage) {
|
|
|
1309
1506
|
* Replace the properties (and optionally ease) at an existing keyframe percentage.
|
|
1310
1507
|
*/
|
|
1311
1508
|
export function updateKeyframeInScript(script, animationId, percentage, properties, ease) {
|
|
1312
|
-
const
|
|
1313
|
-
if (!
|
|
1314
|
-
return script;
|
|
1315
|
-
const kfNode = findKeyframesObjectNode(loc.target.call.varsArg);
|
|
1316
|
-
if (!kfNode)
|
|
1509
|
+
const ctx = locateKeyframeCtx(script, animationId, percentage);
|
|
1510
|
+
if (!ctx)
|
|
1317
1511
|
return script;
|
|
1318
|
-
const pctKey =
|
|
1512
|
+
const { loc, kfNode, pctKey } = ctx;
|
|
1319
1513
|
const existing = kfNode.properties.find((p) => isObjectProperty(p) && propKeyName(p) === pctKey);
|
|
1320
1514
|
if (!existing)
|
|
1321
1515
|
return script;
|
|
@@ -1361,18 +1555,17 @@ function resolveConversionProps(anim, resolvedFromValues) {
|
|
|
1361
1555
|
}
|
|
1362
1556
|
/** Strip editable properties and ease/keyframes keys from a varsArg. */
|
|
1363
1557
|
function stripEditableAndEase(varsArg) {
|
|
1558
|
+
// ease is a BUILTIN_VAR_KEY (not editable), so filterEditableKeys won't remove it —
|
|
1559
|
+
// drop it explicitly before filtering, along with keyframes.
|
|
1364
1560
|
if (varsArg?.type !== "ObjectExpression")
|
|
1365
1561
|
return;
|
|
1366
1562
|
varsArg.properties = varsArg.properties.filter((p) => {
|
|
1367
1563
|
if (!isObjectProperty(p))
|
|
1368
1564
|
return true;
|
|
1369
1565
|
const key = propKeyName(p);
|
|
1370
|
-
|
|
1371
|
-
return true;
|
|
1372
|
-
if (key === "ease" || key === "keyframes")
|
|
1373
|
-
return false;
|
|
1374
|
-
return !isEditablePropertyKey(key);
|
|
1566
|
+
return key !== "ease" && key !== "keyframes";
|
|
1375
1567
|
});
|
|
1568
|
+
filterEditableKeys(varsArg, () => false);
|
|
1376
1569
|
}
|
|
1377
1570
|
/** Build and prepend a keyframes property node onto varsArg. */
|
|
1378
1571
|
function insertKeyframesProp(varsArg, fromProps, toProps, easeEach) {
|
|
@@ -1452,9 +1645,8 @@ export function materializeKeyframesInScript(script, animationId, keyframes, eas
|
|
|
1452
1645
|
loc.target.call.node.arguments[0] = parseExpr(JSON.stringify(resolvedSelector));
|
|
1453
1646
|
}
|
|
1454
1647
|
const entries = [];
|
|
1455
|
-
const
|
|
1456
|
-
|
|
1457
|
-
const propEntries = Object.entries(kf.properties).map(([k, v]) => `${safeKey(k)}: ${valueToCode(v)}`);
|
|
1648
|
+
for (const kf of sortedKeyframes(keyframes)) {
|
|
1649
|
+
const propEntries = keyframePropsToCode(kf);
|
|
1458
1650
|
if (kf.ease)
|
|
1459
1651
|
propEntries.push(`ease: ${JSON.stringify(kf.ease)}`);
|
|
1460
1652
|
entries.push(`${JSON.stringify(kf.percentage + "%")}: { ${propEntries.join(", ")} }`);
|
|
@@ -1698,9 +1890,8 @@ export function unrollDynamicAnimations(script, animationId, elements) {
|
|
|
1698
1890
|
const calls = [];
|
|
1699
1891
|
for (const el of elements) {
|
|
1700
1892
|
const kfEntries = [];
|
|
1701
|
-
const
|
|
1702
|
-
|
|
1703
|
-
const propEntries = Object.entries(kf.properties).map(([k, v]) => `${safeKey(k)}: ${valueToCode(v)}`);
|
|
1893
|
+
for (const kf of sortedKeyframes(el.keyframes)) {
|
|
1894
|
+
const propEntries = keyframePropsToCode(kf);
|
|
1704
1895
|
kfEntries.push(`${JSON.stringify(kf.percentage + "%")}: { ${propEntries.join(", ")} }`);
|
|
1705
1896
|
}
|
|
1706
1897
|
if (el.easeEach) {
|