@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 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";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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;AAExD,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"}
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":"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"}
1
+ {"version":3,"file":"gsapParser.d.ts","sourceRoot":"","sources":["../../src/parsers/gsapParser.ts"],"names":[],"mappings":"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"}
@@ -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
- const duration = typeof vars.duration === "number" ? vars.duration : undefined;
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
- * Replace the editable-property keys on an ObjectExpression with `newProps`,
889
- * leaving `duration`, `ease`, `stagger`, callbacks and other non-editable keys
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 reconcileEditableProperties(varsArg, newProps) {
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 in newProps;
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 loc = locateAnimation(script, animationId);
1289
- if (!loc)
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 = `${percentage}%`;
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 loc = locateAnimation(script, animationId);
1313
- if (!loc)
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 = `${percentage}%`;
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
- if (typeof key !== "string")
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 sorted = keyframes.slice().sort((a, b) => a.percentage - b.percentage);
1456
- for (const kf of sorted) {
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 sorted = el.keyframes.slice().sort((a, b) => a.percentage - b.percentage);
1702
- for (const kf of sorted) {
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) {