@hyperframes/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/README.md +125 -0
  2. package/dist/adapters/gsap.d.ts +14 -0
  3. package/dist/adapters/gsap.d.ts.map +1 -0
  4. package/dist/adapters/gsap.js +25 -0
  5. package/dist/adapters/gsap.js.map +1 -0
  6. package/dist/adapters/index.d.ts +4 -0
  7. package/dist/adapters/index.d.ts.map +1 -0
  8. package/dist/adapters/index.js +2 -0
  9. package/dist/adapters/index.js.map +1 -0
  10. package/dist/adapters/types.d.ts +15 -0
  11. package/dist/adapters/types.d.ts.map +1 -0
  12. package/dist/adapters/types.js +2 -0
  13. package/dist/adapters/types.js.map +1 -0
  14. package/dist/compiler/htmlBundler.d.ts +16 -0
  15. package/dist/compiler/htmlBundler.d.ts.map +1 -0
  16. package/dist/compiler/htmlBundler.js +448 -0
  17. package/dist/compiler/htmlBundler.js.map +1 -0
  18. package/dist/compiler/htmlCompiler.d.ts +18 -0
  19. package/dist/compiler/htmlCompiler.d.ts.map +1 -0
  20. package/dist/compiler/htmlCompiler.js +65 -0
  21. package/dist/compiler/htmlCompiler.js.map +1 -0
  22. package/dist/compiler/index.d.ts +5 -0
  23. package/dist/compiler/index.d.ts.map +1 -0
  24. package/dist/compiler/index.js +9 -0
  25. package/dist/compiler/index.js.map +1 -0
  26. package/dist/compiler/staticGuard.d.ts +8 -0
  27. package/dist/compiler/staticGuard.d.ts.map +1 -0
  28. package/dist/compiler/staticGuard.js +26 -0
  29. package/dist/compiler/staticGuard.js.map +1 -0
  30. package/dist/compiler/timingCompiler.d.ts +72 -0
  31. package/dist/compiler/timingCompiler.d.ts.map +1 -0
  32. package/dist/compiler/timingCompiler.js +191 -0
  33. package/dist/compiler/timingCompiler.js.map +1 -0
  34. package/dist/core.types.d.ts +314 -0
  35. package/dist/core.types.d.ts.map +1 -0
  36. package/dist/core.types.js +52 -0
  37. package/dist/core.types.js.map +1 -0
  38. package/dist/generators/hyperframes.d.ts +21 -0
  39. package/dist/generators/hyperframes.d.ts.map +1 -0
  40. package/dist/generators/hyperframes.js +572 -0
  41. package/dist/generators/hyperframes.js.map +1 -0
  42. package/dist/hyperframe.manifest.json +22 -0
  43. package/dist/hyperframe.runtime.iife.js +13 -0
  44. package/dist/hyperframe.runtime.mjs +13 -0
  45. package/dist/index.d.ts +23 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +16 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/inline-scripts/hyperframe.d.ts +13 -0
  50. package/dist/inline-scripts/hyperframe.d.ts.map +1 -0
  51. package/dist/inline-scripts/hyperframe.js +15 -0
  52. package/dist/inline-scripts/hyperframe.js.map +1 -0
  53. package/dist/inline-scripts/hyperframesRuntime.engine.d.ts +7 -0
  54. package/dist/inline-scripts/hyperframesRuntime.engine.d.ts.map +1 -0
  55. package/dist/inline-scripts/hyperframesRuntime.engine.js +31 -0
  56. package/dist/inline-scripts/hyperframesRuntime.engine.js.map +1 -0
  57. package/dist/inline-scripts/parityContract.d.ts +5 -0
  58. package/dist/inline-scripts/parityContract.d.ts.map +1 -0
  59. package/dist/inline-scripts/parityContract.js +43 -0
  60. package/dist/inline-scripts/parityContract.js.map +1 -0
  61. package/dist/inline-scripts/pickerApi.d.ts +32 -0
  62. package/dist/inline-scripts/pickerApi.d.ts.map +1 -0
  63. package/dist/inline-scripts/pickerApi.js +2 -0
  64. package/dist/inline-scripts/pickerApi.js.map +1 -0
  65. package/dist/inline-scripts/runtimeContract.d.ts +14 -0
  66. package/dist/inline-scripts/runtimeContract.d.ts.map +1 -0
  67. package/dist/inline-scripts/runtimeContract.js +21 -0
  68. package/dist/inline-scripts/runtimeContract.js.map +1 -0
  69. package/dist/lint/hyperframeLinter.d.ts +3 -0
  70. package/dist/lint/hyperframeLinter.d.ts.map +1 -0
  71. package/dist/lint/hyperframeLinter.js +621 -0
  72. package/dist/lint/hyperframeLinter.js.map +1 -0
  73. package/dist/lint/index.d.ts +3 -0
  74. package/dist/lint/index.d.ts.map +1 -0
  75. package/dist/lint/index.js +2 -0
  76. package/dist/lint/index.js.map +1 -0
  77. package/dist/lint/types.d.ts +21 -0
  78. package/dist/lint/types.d.ts.map +1 -0
  79. package/dist/lint/types.js +2 -0
  80. package/dist/lint/types.js.map +1 -0
  81. package/dist/parsers/gsapParser.d.ts +50 -0
  82. package/dist/parsers/gsapParser.d.ts.map +1 -0
  83. package/dist/parsers/gsapParser.js +411 -0
  84. package/dist/parsers/gsapParser.js.map +1 -0
  85. package/dist/parsers/htmlParser.d.ts +29 -0
  86. package/dist/parsers/htmlParser.d.ts.map +1 -0
  87. package/dist/parsers/htmlParser.js +726 -0
  88. package/dist/parsers/htmlParser.js.map +1 -0
  89. package/dist/templates/base.d.ts +4 -0
  90. package/dist/templates/base.d.ts.map +1 -0
  91. package/dist/templates/base.js +20 -0
  92. package/dist/templates/base.js.map +1 -0
  93. package/dist/templates/constants.d.ts +7 -0
  94. package/dist/templates/constants.d.ts.map +1 -0
  95. package/dist/templates/constants.js +8 -0
  96. package/dist/templates/constants.js.map +1 -0
  97. package/docs/common-mistakes.md +73 -0
  98. package/docs/core.md +532 -0
  99. package/docs/core_notes.md +61 -0
  100. package/docs/quickstart-template.html +180 -0
  101. package/docs/versions/changelog.md +5 -0
  102. package/docs/versions/v0.1/core.md +326 -0
  103. package/package.json +83 -0
@@ -0,0 +1,2 @@
1
+ export { lintHyperframeHtml } from "./hyperframeLinter";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lint/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,21 @@
1
+ export type HyperframeLintSeverity = "error" | "warning";
2
+ export type HyperframeLintFinding = {
3
+ code: string;
4
+ severity: HyperframeLintSeverity;
5
+ message: string;
6
+ file?: string;
7
+ selector?: string;
8
+ elementId?: string;
9
+ fixHint?: string;
10
+ snippet?: string;
11
+ };
12
+ export type HyperframeLintResult = {
13
+ ok: boolean;
14
+ errorCount: number;
15
+ warningCount: number;
16
+ findings: HyperframeLintFinding[];
17
+ };
18
+ export type HyperframeLinterOptions = {
19
+ filePath?: string;
20
+ };
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lint/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,SAAS,CAAC;AAEzD,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,sBAAsB,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,qBAAqB,EAAE,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lint/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,50 @@
1
+ import type { Keyframe } from "../core.types";
2
+ export type GsapMethod = "set" | "to" | "from" | "fromTo";
3
+ export interface GsapAnimation {
4
+ id: string;
5
+ targetSelector: string;
6
+ method: GsapMethod;
7
+ position: number;
8
+ properties: Record<string, number | string>;
9
+ fromProperties?: Record<string, number | string>;
10
+ duration?: number;
11
+ ease?: string;
12
+ }
13
+ export interface ParsedGsap {
14
+ animations: GsapAnimation[];
15
+ timelineVar: string;
16
+ preamble: string;
17
+ postamble: string;
18
+ }
19
+ export declare const SUPPORTED_PROPS: string[];
20
+ export declare const SUPPORTED_EASES: string[];
21
+ export declare function parseGsapScript(script: string): ParsedGsap;
22
+ export declare function serializeGsapAnimations(animations: GsapAnimation[], timelineVar?: string, options?: {
23
+ includeMediaSync?: boolean;
24
+ }): string;
25
+ export declare function updateAnimationInScript(script: string, animationId: string, updates: Partial<GsapAnimation>): string;
26
+ export declare function addAnimationToScript(script: string, animation: Omit<GsapAnimation, "id">): {
27
+ script: string;
28
+ id: string;
29
+ };
30
+ export declare function removeAnimationFromScript(script: string, animationId: string): string;
31
+ export declare function getAnimationsForElement(animations: GsapAnimation[], elementId: string): GsapAnimation[];
32
+ export interface ValidationResult {
33
+ valid: boolean;
34
+ errors: string[];
35
+ warnings: string[];
36
+ }
37
+ export declare function validateCompositionGsap(script: string): ValidationResult;
38
+ export declare function keyframesToGsapAnimations(elementId: string, keyframes: Keyframe[], elementStartTime: number, base?: {
39
+ x?: number;
40
+ y?: number;
41
+ scale?: number;
42
+ }): GsapAnimation[];
43
+ export declare function gsapAnimationsToKeyframes(animations: GsapAnimation[], elementStartTime: number, options?: {
44
+ baseX?: number;
45
+ baseY?: number;
46
+ baseScale?: number;
47
+ clampTimeToZero?: boolean;
48
+ skipBaseSet?: boolean;
49
+ }): Keyframe[];
50
+ //# sourceMappingURL=gsapParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gsapParser.d.ts","sourceRoot":"","sources":["../../src/parsers/gsapParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAC;AAElE,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE1D,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,eAAO,MAAM,eAAe,UAY3B,CAAC;AAEF,eAAO,MAAM,eAAe,UA0B3B,CAAC;AAyCF,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAsC1D;AA2ED,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,aAAa,EAAE,EAC3B,WAAW,SAAO,EAClB,OAAO,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,GACvC,MAAM,CAsDR;AAYD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,MAAM,CAWpH;AAED,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,CAYhC;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAIrF;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,aAAa,EAAE,CAGvG;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA4CD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAuBxE;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,QAAQ,EAAE,EACrB,gBAAgB,EAAE,MAAM,EACxB,IAAI,CAAC,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,aAAa,EAAE,CAoCjB;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,aAAa,EAAE,EAC3B,gBAAgB,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE;IACR,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GACA,QAAQ,EAAE,CAoDZ"}
@@ -0,0 +1,411 @@
1
+ const GSAP_METHODS = new Set(["set", "to", "from", "fromTo"]);
2
+ export const SUPPORTED_PROPS = [
3
+ "opacity",
4
+ "visibility",
5
+ "x",
6
+ "y",
7
+ "scale",
8
+ "scaleX",
9
+ "scaleY",
10
+ "rotation",
11
+ "autoAlpha",
12
+ "width",
13
+ "height",
14
+ ];
15
+ export const SUPPORTED_EASES = [
16
+ "none",
17
+ "power1.in",
18
+ "power1.out",
19
+ "power1.inOut",
20
+ "power2.in",
21
+ "power2.out",
22
+ "power2.inOut",
23
+ "power3.in",
24
+ "power3.out",
25
+ "power3.inOut",
26
+ "power4.in",
27
+ "power4.out",
28
+ "power4.inOut",
29
+ "back.in",
30
+ "back.out",
31
+ "back.inOut",
32
+ "elastic.in",
33
+ "elastic.out",
34
+ "elastic.inOut",
35
+ "bounce.in",
36
+ "bounce.out",
37
+ "bounce.inOut",
38
+ "expo.in",
39
+ "expo.out",
40
+ "expo.inOut",
41
+ ];
42
+ function parseObjectLiteral(str) {
43
+ const result = {};
44
+ const cleaned = str.replace(/^\{|\}$/g, "").trim();
45
+ if (!cleaned)
46
+ return result;
47
+ const propRegex = /(\w+)\s*:\s*("[^"]*"|'[^']*'|[\d.]+|[a-zA-Z_][\w.]*)/g;
48
+ let match;
49
+ while ((match = propRegex.exec(cleaned)) !== null) {
50
+ const key = match[1] ?? "";
51
+ let value = match[2] ?? "";
52
+ if (typeof value === "string") {
53
+ if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) {
54
+ value = value.slice(1, -1);
55
+ }
56
+ else if (!isNaN(Number(value))) {
57
+ value = Number(value);
58
+ }
59
+ }
60
+ result[key] = value;
61
+ }
62
+ return result;
63
+ }
64
+ function findMatchingBrace(str, startIndex) {
65
+ let depth = 0;
66
+ for (let i = startIndex; i < str.length; i++) {
67
+ if (str[i] === "{")
68
+ depth++;
69
+ else if (str[i] === "}") {
70
+ depth--;
71
+ if (depth === 0)
72
+ return i;
73
+ }
74
+ }
75
+ return -1;
76
+ }
77
+ export function parseGsapScript(script) {
78
+ const animations = [];
79
+ let idCounter = 0;
80
+ const timelineMatch = script.match(/(?:const|let|var)\s+(\w+)\s*=\s*gsap\.timeline/);
81
+ const timelineVar = timelineMatch ? timelineMatch[1] ?? "tl" : "tl";
82
+ const preambleMatch = script.match(new RegExp(`^[\\s\\S]*?(?:const|let|var)\\s+${timelineVar}\\s*=\\s*gsap\\.timeline\\s*\\([^)]*\\)\\s*;?`));
83
+ const preamble = preambleMatch ? preambleMatch[0] : `const ${timelineVar} = gsap.timeline({ paused: true });`;
84
+ const methodPattern = new RegExp(`${timelineVar}\\.(set|to|from|fromTo)\\s*\\(([^)]+(?:\\{[^}]*\\}[^)]*)+)\\)`, "g");
85
+ let match;
86
+ while ((match = methodPattern.exec(script)) !== null) {
87
+ const rawMethod = match[1];
88
+ if (!rawMethod || !GSAP_METHODS.has(rawMethod))
89
+ continue;
90
+ const method = rawMethod;
91
+ const argsStr = match[2] ?? "";
92
+ const animation = parseGsapCall(method, argsStr, ++idCounter);
93
+ if (animation) {
94
+ animations.push(animation);
95
+ }
96
+ }
97
+ const lastAnimIdx = script.lastIndexOf(`${timelineVar}.`);
98
+ let postamble = "";
99
+ if (lastAnimIdx !== -1) {
100
+ const afterLastAnim = script.slice(lastAnimIdx);
101
+ const endOfCall = afterLastAnim.indexOf(";");
102
+ if (endOfCall !== -1) {
103
+ postamble = script.slice(lastAnimIdx + endOfCall + 1).trim();
104
+ }
105
+ }
106
+ return { animations, timelineVar, preamble, postamble };
107
+ }
108
+ function parseGsapCall(method, argsStr, idNum) {
109
+ const selectorMatch = argsStr.match(/^\s*["']([^"']+)["']\s*,/);
110
+ if (!selectorMatch)
111
+ return null;
112
+ const targetSelector = selectorMatch[1] ?? "";
113
+ const afterSelector = argsStr.slice(selectorMatch[0].length);
114
+ let properties = {};
115
+ let fromProperties;
116
+ let position = 0;
117
+ if (method === "fromTo") {
118
+ const firstBrace = afterSelector.indexOf("{");
119
+ const firstEnd = findMatchingBrace(afterSelector, firstBrace);
120
+ if (firstBrace === -1 || firstEnd === -1)
121
+ return null;
122
+ fromProperties = parseObjectLiteral(afterSelector.slice(firstBrace, firstEnd + 1));
123
+ const secondPart = afterSelector.slice(firstEnd + 1);
124
+ const secondBrace = secondPart.indexOf("{");
125
+ const secondEnd = findMatchingBrace(secondPart, secondBrace);
126
+ if (secondBrace === -1 || secondEnd === -1)
127
+ return null;
128
+ properties = parseObjectLiteral(secondPart.slice(secondBrace, secondEnd + 1));
129
+ const afterProps = secondPart.slice(secondEnd + 1);
130
+ const posMatch = afterProps.match(/,\s*([\d.]+)/);
131
+ if (posMatch)
132
+ position = parseFloat(posMatch[1] ?? "");
133
+ }
134
+ else {
135
+ const braceStart = afterSelector.indexOf("{");
136
+ const braceEnd = findMatchingBrace(afterSelector, braceStart);
137
+ if (braceStart !== -1 && braceEnd !== -1) {
138
+ properties = parseObjectLiteral(afterSelector.slice(braceStart, braceEnd + 1));
139
+ const afterProps = afterSelector.slice(braceEnd + 1);
140
+ const posMatch = afterProps.match(/,\s*([\d.]+)/);
141
+ if (posMatch)
142
+ position = parseFloat(posMatch[1] ?? "");
143
+ }
144
+ }
145
+ const duration = typeof properties.duration === "number" ? properties.duration : undefined;
146
+ const ease = typeof properties.ease === "string" ? properties.ease : undefined;
147
+ const filteredProps = {};
148
+ for (const [key, value] of Object.entries(properties)) {
149
+ if (SUPPORTED_PROPS.includes(key)) {
150
+ filteredProps[key] = value;
151
+ }
152
+ }
153
+ let filteredFromProps;
154
+ if (fromProperties) {
155
+ filteredFromProps = {};
156
+ for (const [key, value] of Object.entries(fromProperties)) {
157
+ if (SUPPORTED_PROPS.includes(key)) {
158
+ filteredFromProps[key] = value;
159
+ }
160
+ }
161
+ }
162
+ return {
163
+ id: `anim-${idNum}`,
164
+ targetSelector,
165
+ method,
166
+ position,
167
+ properties: filteredProps,
168
+ fromProperties: filteredFromProps,
169
+ duration,
170
+ ease,
171
+ };
172
+ }
173
+ export function serializeGsapAnimations(animations, timelineVar = "tl", options) {
174
+ const sorted = [...animations].sort((a, b) => a.position - b.position);
175
+ const lines = sorted.map((anim) => {
176
+ const selector = `"${anim.targetSelector}"`;
177
+ const props = { ...anim.properties };
178
+ if (anim.duration !== undefined)
179
+ props.duration = anim.duration;
180
+ if (anim.ease)
181
+ props.ease = anim.ease;
182
+ const propsStr = serializeObject(props);
183
+ switch (anim.method) {
184
+ case "set":
185
+ return ` ${timelineVar}.set(${selector}, ${propsStr}, ${anim.position});`;
186
+ case "to":
187
+ return ` ${timelineVar}.to(${selector}, ${propsStr}, ${anim.position});`;
188
+ case "from":
189
+ return ` ${timelineVar}.from(${selector}, ${propsStr}, ${anim.position});`;
190
+ case "fromTo": {
191
+ const fromStr = serializeObject(anim.fromProperties || {});
192
+ return ` ${timelineVar}.fromTo(${selector}, ${fromStr}, ${propsStr}, ${anim.position});`;
193
+ }
194
+ }
195
+ });
196
+ let mediaSync = "";
197
+ if (options?.includeMediaSync) {
198
+ mediaSync = `
199
+ // Sync media playback
200
+ ${timelineVar}.eventCallback("onUpdate", function() {
201
+ const time = ${timelineVar}.time();
202
+ document.querySelectorAll("video[data-start], audio[data-start]").forEach(function(media) {
203
+ const start = parseFloat(media.dataset.start);
204
+ const end = parseFloat(media.dataset.end) || Infinity;
205
+ const mediaTime = time - start;
206
+ if (time >= start && time < end) {
207
+ if (Math.abs(media.currentTime - mediaTime) > 0.1) {
208
+ media.currentTime = mediaTime;
209
+ }
210
+ if (media.paused && !${timelineVar}.paused()) {
211
+ media.play().catch(function() {});
212
+ }
213
+ } else if (!media.paused) {
214
+ media.pause();
215
+ }
216
+ });
217
+ });`;
218
+ }
219
+ return `
220
+ const ${timelineVar} = gsap.timeline({ paused: true });
221
+ ${lines.join("\n")}${mediaSync}
222
+ `;
223
+ }
224
+ function serializeObject(obj) {
225
+ const entries = Object.entries(obj).map(([key, value]) => {
226
+ if (typeof value === "string") {
227
+ return `${key}: "${value}"`;
228
+ }
229
+ return `${key}: ${value}`;
230
+ });
231
+ return `{ ${entries.join(", ")} }`;
232
+ }
233
+ export function updateAnimationInScript(script, animationId, updates) {
234
+ const parsed = parseGsapScript(script);
235
+ const updated = parsed.animations.map((anim) => {
236
+ if (anim.id === animationId) {
237
+ return { ...anim, ...updates };
238
+ }
239
+ return anim;
240
+ });
241
+ return serializeGsapAnimations(updated, parsed.timelineVar);
242
+ }
243
+ export function addAnimationToScript(script, animation) {
244
+ const parsed = parseGsapScript(script);
245
+ const id = `anim-${Date.now()}`;
246
+ const newAnim = { ...animation, id };
247
+ parsed.animations.push(newAnim);
248
+ return {
249
+ script: serializeGsapAnimations(parsed.animations, parsed.timelineVar),
250
+ id,
251
+ };
252
+ }
253
+ export function removeAnimationFromScript(script, animationId) {
254
+ const parsed = parseGsapScript(script);
255
+ const filtered = parsed.animations.filter((a) => a.id !== animationId);
256
+ return serializeGsapAnimations(filtered, parsed.timelineVar);
257
+ }
258
+ export function getAnimationsForElement(animations, elementId) {
259
+ const selector = `#${elementId}`;
260
+ return animations.filter((a) => a.targetSelector === selector);
261
+ }
262
+ const FORBIDDEN_GSAP_PATTERNS = [
263
+ { pattern: /\.call\s*\(/, message: "call() method not allowed" },
264
+ {
265
+ pattern: /\.add\s*\(\s*function/,
266
+ message: "add(function) not allowed",
267
+ },
268
+ {
269
+ pattern: /\.add\s*\(\s*\(/,
270
+ message: "add() with arrow function not allowed",
271
+ },
272
+ { pattern: /onComplete\s*:/, message: "onComplete callback not allowed" },
273
+ { pattern: /onStart\s*:/, message: "onStart callback not allowed" },
274
+ { pattern: /onUpdate\s*:/, message: "onUpdate callback not allowed" },
275
+ {
276
+ pattern: /onRepeat\s*:/,
277
+ message: "onRepeat callback not allowed",
278
+ },
279
+ {
280
+ pattern: /onReverseComplete\s*:/,
281
+ message: "onReverseComplete callback not allowed",
282
+ },
283
+ {
284
+ pattern: /repeat\s*:\s*-1/,
285
+ message: "Infinite repeat (repeat: -1) not allowed",
286
+ },
287
+ {
288
+ pattern: /Math\.random\s*\(/,
289
+ message: "Random values (Math.random) not allowed",
290
+ },
291
+ {
292
+ pattern: /Date\.now\s*\(/,
293
+ message: "Date-dependent values (Date.now) not allowed",
294
+ },
295
+ { pattern: /new\s+Date\s*\(/, message: "Date constructor not allowed" },
296
+ { pattern: /setTimeout\s*\(/, message: "setTimeout not allowed" },
297
+ { pattern: /setInterval\s*\(/, message: "setInterval not allowed" },
298
+ {
299
+ pattern: /requestAnimationFrame\s*\(/,
300
+ message: "requestAnimationFrame not allowed",
301
+ },
302
+ ];
303
+ export function validateCompositionGsap(script) {
304
+ const errors = [];
305
+ const warnings = [];
306
+ for (const { pattern, message } of FORBIDDEN_GSAP_PATTERNS) {
307
+ if (pattern.test(script)) {
308
+ errors.push(message);
309
+ }
310
+ }
311
+ if (/yoyo\s*:\s*true/.test(script)) {
312
+ warnings.push("yoyo animations may behave unexpectedly when scrubbing");
313
+ }
314
+ if (/stagger\s*:/.test(script)) {
315
+ warnings.push("stagger animations may not serialize correctly");
316
+ }
317
+ return {
318
+ valid: errors.length === 0,
319
+ errors,
320
+ warnings,
321
+ };
322
+ }
323
+ export function keyframesToGsapAnimations(elementId, keyframes, elementStartTime, base) {
324
+ const sorted = [...keyframes].sort((a, b) => a.time - b.time);
325
+ const animations = [];
326
+ const baseX = base?.x ?? 0;
327
+ const baseY = base?.y ?? 0;
328
+ const baseScale = base?.scale ?? 1;
329
+ sorted.forEach((kf, i) => {
330
+ const absoluteTime = elementStartTime + kf.time;
331
+ const isFirst = i === 0;
332
+ const prevKf = i > 0 ? sorted[i - 1] : null;
333
+ const duration = prevKf ? kf.time - prevKf.time : undefined;
334
+ const position = prevKf ? elementStartTime + prevKf.time : absoluteTime;
335
+ const properties = {};
336
+ for (const [key, value] of Object.entries(kf.properties)) {
337
+ if (typeof value !== "number")
338
+ continue;
339
+ if (key === "x")
340
+ properties.x = baseX + value;
341
+ else if (key === "y")
342
+ properties.y = baseY + value;
343
+ else if (key === "scale")
344
+ properties.scale = baseScale * value;
345
+ else
346
+ properties[key] = value;
347
+ }
348
+ animations.push({
349
+ id: `${elementId}-kf-${kf.id}`,
350
+ targetSelector: `#${elementId}`,
351
+ method: isFirst ? "set" : "to",
352
+ position,
353
+ properties,
354
+ duration: isFirst ? undefined : duration,
355
+ ease: kf.ease,
356
+ });
357
+ });
358
+ return animations;
359
+ }
360
+ export function gsapAnimationsToKeyframes(animations, elementStartTime, options) {
361
+ const validMethods = ["set", "to", "from", "fromTo"];
362
+ const baseX = options?.baseX ?? 0;
363
+ const baseY = options?.baseY ?? 0;
364
+ const baseScale = options?.baseScale ?? 1;
365
+ const clampTimeToZero = options?.clampTimeToZero ?? true;
366
+ const skipBaseSet = options?.skipBaseSet ?? false;
367
+ const baseTimeEpsilon = 0.001;
368
+ const baseValueEpsilon = 0.00001;
369
+ return animations
370
+ .filter((a) => validMethods.includes(a.method))
371
+ .map((a) => {
372
+ const relativeTimeRaw = a.position - elementStartTime;
373
+ const time = clampTimeToZero ? Math.max(0, relativeTimeRaw) : relativeTimeRaw;
374
+ const properties = {};
375
+ for (const [key, value] of Object.entries(a.properties)) {
376
+ if (SUPPORTED_PROPS.includes(key) && typeof value === "number") {
377
+ if (key === "x") {
378
+ properties.x = value - baseX;
379
+ }
380
+ else if (key === "y") {
381
+ properties.y = value - baseY;
382
+ }
383
+ else if (key === "scale") {
384
+ properties.scale = baseScale !== 0 ? value / baseScale : value;
385
+ }
386
+ else {
387
+ properties[key] = value;
388
+ }
389
+ }
390
+ }
391
+ if (skipBaseSet && a.method === "set" && Math.abs(time) <= baseTimeEpsilon) {
392
+ const propKeys = Object.keys(properties);
393
+ const isOnlyBaseProps = propKeys.every((k) => k === "x" || k === "y" || k === "scale");
394
+ if (isOnlyBaseProps && propKeys.length > 0) {
395
+ const hasNonBaseOffset = (properties.x !== undefined && Math.abs(properties.x) > baseValueEpsilon) ||
396
+ (properties.y !== undefined && Math.abs(properties.y) > baseValueEpsilon) ||
397
+ (properties.scale !== undefined && Math.abs(properties.scale - 1) > baseValueEpsilon);
398
+ if (!hasNonBaseOffset) {
399
+ return null;
400
+ }
401
+ }
402
+ }
403
+ const kf = { id: a.id, time, properties };
404
+ if (a.ease !== undefined)
405
+ kf.ease = a.ease;
406
+ return kf;
407
+ })
408
+ .filter((kf) => kf !== null)
409
+ .sort((a, b) => a.time - b.time);
410
+ }
411
+ //# sourceMappingURL=gsapParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gsapParser.js","sourceRoot":"","sources":["../../src/parsers/gsapParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { TimelineElement, CanvasResolution, Keyframe, StageZoomKeyframe, CompositionVariable } from "../core.types";
2
+ import { CANVAS_DIMENSIONS } from "../core.types";
3
+ import type { ValidationResult } from "./gsapParser";
4
+ export interface ParsedHtml {
5
+ elements: TimelineElement[];
6
+ gsapScript: string | null;
7
+ styles: string | null;
8
+ resolution: CanvasResolution;
9
+ keyframes: Record<string, Keyframe[]>;
10
+ stageZoomKeyframes: StageZoomKeyframe[];
11
+ }
12
+ export declare function parseHtml(html: string): ParsedHtml;
13
+ export declare function updateElementInHtml(html: string, elementId: string, updates: Partial<TimelineElement>): string;
14
+ export declare function addElementToHtml(html: string, element: Omit<TimelineElement, "id"> & {
15
+ id?: string;
16
+ }): {
17
+ html: string;
18
+ id: string;
19
+ };
20
+ export declare function removeElementFromHtml(html: string, elementId: string): string;
21
+ export interface CompositionMetadata {
22
+ compositionId: string | null;
23
+ compositionDuration: number | null;
24
+ variables: CompositionVariable[];
25
+ }
26
+ export declare function extractCompositionMetadata(html: string): CompositionMetadata;
27
+ export declare function validateCompositionHtml(html: string): ValidationResult;
28
+ export { CANVAS_DIMENSIONS };
29
+ //# sourceMappingURL=htmlParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"htmlParser.d.ts","sourceRoot":"","sources":["../../src/parsers/htmlParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAKf,gBAAgB,EAChB,QAAQ,EAER,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAOlD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAIrD,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtC,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;CACzC;AAkGD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAySlD;AAwHD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,MAAM,CA4E9G;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CA2E9B;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAU7E;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,mBAAmB,EAAE,CAAC;CAClC;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAgB5E;AAuCD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAqDtE;AAaD,OAAO,EAAE,iBAAiB,EAAE,CAAC"}