@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,21 @@
1
+ import type { TimelineElement, CanvasResolution, Keyframe, StageZoomKeyframe } from "../core.types";
2
+ import type { GsapAnimation } from "../parsers/gsapParser";
3
+ export interface SerializeOptions {
4
+ animations?: GsapAnimation[];
5
+ styles?: string;
6
+ generateDefaultAnimations?: boolean;
7
+ resolution?: CanvasResolution;
8
+ compositionId?: string;
9
+ keyframes?: Record<string, Keyframe[]>;
10
+ stageZoomKeyframes?: StageZoomKeyframe[];
11
+ includeScripts?: boolean;
12
+ includeStyles?: boolean;
13
+ }
14
+ export declare function generateHyperframesStyles(elements: TimelineElement[], resolution: CanvasResolution, customStyles?: string): {
15
+ coreCss: string;
16
+ customCss: string;
17
+ googleFontsLink: string;
18
+ };
19
+ export declare function generateGsapTimelineScript(elements: TimelineElement[], totalDuration: number, options?: SerializeOptions): string;
20
+ export declare function generateHyperframesHtml(elements: TimelineElement[], totalDuration: number, options?: SerializeOptions): string;
21
+ //# sourceMappingURL=hyperframes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyperframes.d.ts","sourceRoot":"","sources":["../../src/generators/hyperframes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,QAAQ,EACR,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAOvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAmC3D,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvC,kBAAkB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACzC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AA+BD,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,eAAe,EAAE,EAC3B,UAAU,EAAE,gBAAgB,EAC5B,YAAY,CAAC,EAAE,MAAM,GACpB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,CA8BjE;AA+CD,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,eAAe,EAAE,EAC3B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,gBAAqB,GAC7B,MAAM,CA0FR;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,eAAe,EAAE,EAC3B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,gBAAqB,GAC7B,MAAM,CAgGR"}
@@ -0,0 +1,572 @@
1
+ import { CANVAS_DIMENSIONS, isTextElement, isMediaElement, isCompositionElement, } from "../core.types";
2
+ import { serializeGsapAnimations, keyframesToGsapAnimations } from "../parsers/gsapParser";
3
+ import { GSAP_CDN, BASE_STYLES, ZOOM_CONTAINER_STYLES } from "../templates/constants";
4
+ const GOOGLE_FONTS_BASE = "https://fonts.googleapis.com/css2";
5
+ const FONT_WEIGHTS = {
6
+ Inter: "400;500;600;700;800;900",
7
+ Roboto: "400;500;700;900",
8
+ Montserrat: "400;500;600;700;800;900",
9
+ Poppins: "400;500;600;700;800;900",
10
+ "Bebas Neue": "400",
11
+ Oswald: "400;500;600;700",
12
+ Anton: "400",
13
+ "Playfair Display": "400;500;600;700;800;900",
14
+ Lora: "400;500;600;700",
15
+ Pacifico: "400",
16
+ "Permanent Marker": "400",
17
+ "Fira Code": "400;500;600;700",
18
+ };
19
+ function generateGoogleFontsUrl(fontFamilies) {
20
+ if (fontFamilies.length === 0)
21
+ return null;
22
+ const families = fontFamilies
23
+ .filter((f) => f in FONT_WEIGHTS)
24
+ .map((f) => {
25
+ const weights = FONT_WEIGHTS[f];
26
+ const encodedName = f.replace(/ /g, "+");
27
+ return `family=${encodedName}:wght@${weights}`;
28
+ });
29
+ if (families.length === 0)
30
+ return null;
31
+ return `${GOOGLE_FONTS_BASE}?${families.join("&")}&display=swap`;
32
+ }
33
+ /**
34
+ * Stage Positioning Conventions:
35
+ *
36
+ * 1. All elements are absolutely positioned relative to the #stage container
37
+ * 2. The #stage has position: relative and fixed dimensions (1920x1080 or 1080x1920)
38
+ * 3. Elements start with opacity: 0 and are revealed via GSAP animations
39
+ *
40
+ * Media Elements (video, image):
41
+ * - position: absolute (relative to #stage)
42
+ * - width: 100%, height: 100% (fill the stage)
43
+ * - object-fit: contain (preserve aspect ratio, centered, no cropping)
44
+ * - This ensures media is always visible and centered within the stage
45
+ *
46
+ * Text Elements:
47
+ * - position: absolute, width/height: 100%
48
+ * - Inner div uses flexbox to center content (selected via > div)
49
+ *
50
+ * Audio Elements:
51
+ * - position: absolute (invisible, for timing only)
52
+ */
53
+ function sortElements(elements) {
54
+ return [...elements].sort((a, b) => {
55
+ if (a.zIndex !== b.zIndex) {
56
+ return (a.zIndex ?? 0) - (b.zIndex ?? 0);
57
+ }
58
+ return a.startTime - b.startTime;
59
+ });
60
+ }
61
+ export function generateHyperframesStyles(elements, resolution, customStyles) {
62
+ const { width, height } = CANVAS_DIMENSIONS[resolution];
63
+ const sortedElements = sortElements(elements);
64
+ const elementStyles = sortedElements.map((el) => generateElementStyles(el)).join("\n");
65
+ // Collect unique font families from text elements
66
+ const usedFonts = new Set();
67
+ for (const el of sortedElements) {
68
+ if (isTextElement(el) && el.fontFamily) {
69
+ usedFonts.add(el.fontFamily);
70
+ }
71
+ }
72
+ // Always include Inter as the default
73
+ usedFonts.add("Inter");
74
+ const googleFontsUrl = generateGoogleFontsUrl([...usedFonts]);
75
+ const googleFontsLink = googleFontsUrl
76
+ ? `<link data-hf-fonts="true" rel="preconnect" href="https://fonts.googleapis.com">
77
+ <link data-hf-fonts="true" rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
78
+ <link data-hf-fonts="true" href="${googleFontsUrl}" rel="stylesheet">`
79
+ : "";
80
+ const coreCss = `${BASE_STYLES}
81
+ #stage { position: relative; width: ${width}px; height: ${height}px; overflow: hidden; background: #fff; }
82
+ #stage-zoom-container { ${ZOOM_CONTAINER_STYLES} }
83
+ ${elementStyles}`.trim();
84
+ const customCss = customStyles?.trim() ? customStyles.trim() : "";
85
+ return { coreCss, customCss, googleFontsLink };
86
+ }
87
+ function generateElementStyles(element) {
88
+ const baseStyles = "position: absolute;";
89
+ if (isTextElement(element)) {
90
+ const fontSize = element.fontSize ?? 48;
91
+ const fontWeight = element.fontWeight ?? 700;
92
+ const fontFamily = element.fontFamily ?? "Inter";
93
+ const color = element.color ?? "white";
94
+ const textShadow = element.textShadow !== false ? "text-shadow: 2px 2px 4px rgba(0,0,0,0.8);" : "";
95
+ // Text outline using -webkit-text-stroke
96
+ const textOutline = element.textOutline
97
+ ? `-webkit-text-stroke: ${element.textOutlineWidth ?? 2}px ${element.textOutlineColor ?? "#000000"}; paint-order: stroke fill;`
98
+ : "";
99
+ // Text highlight using background
100
+ const textHighlight = element.textHighlight
101
+ ? `background-color: ${element.textHighlightColor ?? "yellow"}; padding: ${element.textHighlightPadding ?? 4}px ${(element.textHighlightPadding ?? 4) * 1.5}px; border-radius: ${element.textHighlightRadius ?? 4}px; box-decoration-break: clone; -webkit-box-decoration-break: clone;`
102
+ : "";
103
+ return ` #${element.id} { ${baseStyles} width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; pointer-events: none; }
104
+ #${element.id} > div { font-family: '${fontFamily}', sans-serif; font-size: ${fontSize}px; font-weight: ${fontWeight}; color: ${color}; ${textShadow} ${textOutline} ${textHighlight} pointer-events: auto; cursor: grab; white-space: pre-wrap; text-align: center; }`;
105
+ }
106
+ switch (element.type) {
107
+ case "video":
108
+ // Videos fill the stage with standard CSS positioning (0,0 = top-left)
109
+ return ` #${element.id} { ${baseStyles} width: 100%; height: 100%; object-fit: contain; transform-origin: center center; }`;
110
+ case "image":
111
+ // Images use standard CSS positioning (0,0 = top-left)
112
+ return ` #${element.id} { ${baseStyles} max-width: 100%; max-height: 100%; transform-origin: center center; }`;
113
+ case "audio":
114
+ return ` #${element.id} { ${baseStyles} }`;
115
+ case "composition":
116
+ // Compositions use standard CSS positioning (0,0 = top-left)
117
+ return ` #${element.id} { ${baseStyles} width: 100%; height: 100%; position: absolute; }`;
118
+ }
119
+ }
120
+ export function generateGsapTimelineScript(elements, totalDuration, options = {}) {
121
+ const { animations, generateDefaultAnimations = true, resolution = "landscape", keyframes, stageZoomKeyframes, } = options;
122
+ const { width, height } = CANVAS_DIMENSIONS[resolution];
123
+ const sortedElements = sortElements(elements);
124
+ const hasMedia = sortedElements.some((el) => el.type === "video" || el.type === "audio");
125
+ // Convert keyframes to GSAP animations
126
+ let keyframeAnimations = [];
127
+ if (keyframes) {
128
+ for (const element of sortedElements) {
129
+ const elementKeyframes = keyframes[element.id];
130
+ if (elementKeyframes && elementKeyframes.length > 0) {
131
+ const baseScale = isMediaElement(element) || isCompositionElement(element) ? (element.scale ?? 1) : 1;
132
+ const converted = keyframesToGsapAnimations(element.id, elementKeyframes, element.startTime, {
133
+ x: element.x ?? 0,
134
+ y: element.y ?? 0,
135
+ scale: baseScale,
136
+ });
137
+ keyframeAnimations = keyframeAnimations.concat(converted);
138
+ }
139
+ }
140
+ }
141
+ // Generate zoom keyframes GSAP animations
142
+ const zoomAnimations = generateZoomGsapAnimations(stageZoomKeyframes || [], width, height);
143
+ // Generate initial position/scale set() calls for all elements
144
+ // This must be included regardless of keyframe animations
145
+ const initialPositionSets = generateInitialPositionSets(sortedElements, keyframes);
146
+ // Generate visibility animations for elements without keyframes
147
+ // When using keyframes path, elements without keyframes need explicit visibility
148
+ const visibilityAnimations = generateVisibilityForElementsWithoutKeyframes(sortedElements, keyframes);
149
+ let gsapScript;
150
+ if (animations && animations.length > 0) {
151
+ // Merge provided animations with keyframe animations
152
+ const allAnimations = [...animations, ...keyframeAnimations];
153
+ gsapScript = serializeGsapAnimations(allAnimations, "tl", {
154
+ includeMediaSync: hasMedia,
155
+ });
156
+ // Prepend initial positions and visibility for elements without keyframes, append zoom animations
157
+ const prependAnimations = [initialPositionSets, visibilityAnimations].filter(Boolean).join("\n");
158
+ if (prependAnimations) {
159
+ gsapScript = gsapScript.replace("const tl = gsap.timeline({ paused: true });", `const tl = gsap.timeline({ paused: true });\n${prependAnimations}`);
160
+ }
161
+ if (zoomAnimations) {
162
+ gsapScript += "\n" + zoomAnimations;
163
+ }
164
+ }
165
+ else if (keyframeAnimations.length > 0) {
166
+ // Use only keyframe animations
167
+ gsapScript = serializeGsapAnimations(keyframeAnimations, "tl", {
168
+ includeMediaSync: hasMedia,
169
+ });
170
+ // Prepend initial positions and visibility for elements without keyframes, append zoom animations
171
+ const prependAnimations = [initialPositionSets, visibilityAnimations].filter(Boolean).join("\n");
172
+ if (prependAnimations) {
173
+ gsapScript = gsapScript.replace("const tl = gsap.timeline({ paused: true });", `const tl = gsap.timeline({ paused: true });\n${prependAnimations}`);
174
+ }
175
+ if (zoomAnimations) {
176
+ gsapScript += "\n" + zoomAnimations;
177
+ }
178
+ }
179
+ else if (generateDefaultAnimations) {
180
+ gsapScript = generateDefaultGsapAnimations(sortedElements, totalDuration, stageZoomKeyframes, width, height);
181
+ }
182
+ else {
183
+ gsapScript = `
184
+ const tl = gsap.timeline({ paused: true });
185
+ ${initialPositionSets ? initialPositionSets + "\n" : ""} tl.to({}, { duration: ${totalDuration || 1} });
186
+ `;
187
+ // Append zoom animations
188
+ if (zoomAnimations) {
189
+ gsapScript += "\n" + zoomAnimations;
190
+ }
191
+ }
192
+ return gsapScript;
193
+ }
194
+ export function generateHyperframesHtml(elements, totalDuration, options = {}) {
195
+ const { animations, styles, generateDefaultAnimations = true, resolution = "landscape", compositionId = `comp-${Date.now()}`, keyframes, stageZoomKeyframes, includeScripts = false, includeStyles = false, } = options;
196
+ const { width, height } = CANVAS_DIMENSIONS[resolution];
197
+ // Include zoom keyframes in duration calculation
198
+ const maxZoomTime = stageZoomKeyframes && stageZoomKeyframes.length > 0 ? Math.max(...stageZoomKeyframes.map((kf) => kf.time)) : 0;
199
+ const calculatedDuration = elements.length > 0
200
+ ? Math.max(...elements.map((el) => el.startTime + el.duration), totalDuration, maxZoomTime)
201
+ : Math.max(totalDuration, maxZoomTime);
202
+ const sortedElements = sortElements(elements);
203
+ const elementsHtml = sortedElements.map((el) => generateElementHtml(el, keyframes?.[el.id])).join("\n ");
204
+ const customStyles = styles || "";
205
+ // Serialize zoom keyframes to data attribute
206
+ const zoomKeyframesAttr = stageZoomKeyframes && stageZoomKeyframes.length > 0
207
+ ? ` data-zoom-keyframes='${JSON.stringify(stageZoomKeyframes).replace(/'/g, "&#39;")}'`
208
+ : "";
209
+ const { coreCss, customCss, googleFontsLink } = generateHyperframesStyles(sortedElements, resolution, customStyles);
210
+ const gsapScript = includeScripts
211
+ ? generateGsapTimelineScript(sortedElements, totalDuration, {
212
+ animations,
213
+ generateDefaultAnimations,
214
+ resolution,
215
+ keyframes,
216
+ stageZoomKeyframes,
217
+ })
218
+ : "";
219
+ const gsapCdnTag = includeScripts ? ` <script src="${GSAP_CDN}"></script>` : "";
220
+ const gsapScriptTag = includeScripts
221
+ ? ` <script>
222
+ ${gsapScript}
223
+ </script>`
224
+ : "";
225
+ const styleTags = includeStyles
226
+ ? [
227
+ coreCss
228
+ ? ` <style data-hf-core="true">
229
+ ${coreCss.split("\n").join("\n ")}
230
+ </style>`
231
+ : "",
232
+ customCss
233
+ ? ` <style data-hf-custom="true">
234
+ ${customCss.split("\n").join("\n ")}
235
+ </style>`
236
+ : "",
237
+ ]
238
+ .filter(Boolean)
239
+ .join("\n")
240
+ : "";
241
+ const customStylesAttr = customStyles
242
+ ? ` data-custom-styles='${JSON.stringify(customStyles).replace(/'/g, "&#39;")}'`
243
+ : "";
244
+ const resolutionAttr = ` data-resolution="${resolution}"`;
245
+ return `<!DOCTYPE html>
246
+ <html data-composition-id="${compositionId}" data-composition-duration="${calculatedDuration}"${resolutionAttr}${customStylesAttr}>
247
+ <head>
248
+ <meta charset="UTF-8">
249
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
250
+ ${includeStyles ? googleFontsLink : ""}
251
+ ${gsapCdnTag}
252
+ ${styleTags ? ` ${styleTags}` : ""}
253
+ </head>
254
+ <body>
255
+ <div id="stage">
256
+ <div id="stage-zoom-container"${zoomKeyframesAttr}>
257
+ ${elementsHtml}
258
+ </div>
259
+ </div>
260
+ ${gsapScriptTag}
261
+ </body>
262
+ </html>`;
263
+ }
264
+ function calculateZoomTransform(scale, focusX, focusY, canvasWidth, canvasHeight) {
265
+ const centerX = canvasWidth / 2;
266
+ const centerY = canvasHeight / 2;
267
+ const x = centerX - focusX * scale;
268
+ const y = centerY - focusY * scale;
269
+ return { x, y };
270
+ }
271
+ function generateZoomGsapAnimations(zoomKeyframes, canvasWidth, canvasHeight) {
272
+ if (!zoomKeyframes || zoomKeyframes.length === 0) {
273
+ return "";
274
+ }
275
+ const sortedKeyframes = [...zoomKeyframes].sort((a, b) => a.time - b.time);
276
+ const animations = [];
277
+ animations.push(" // Stage zoom animations");
278
+ for (let i = 0; i < sortedKeyframes.length; i++) {
279
+ const kf = sortedKeyframes[i];
280
+ if (!kf)
281
+ continue;
282
+ const { x, y } = calculateZoomTransform(kf.zoom.scale, kf.zoom.focusX, kf.zoom.focusY, canvasWidth, canvasHeight);
283
+ if (i === 0) {
284
+ animations.push(` tl.set("#stage-zoom-container", { scale: ${kf.zoom.scale}, x: ${x}, y: ${y} }, ${kf.time});`);
285
+ }
286
+ else {
287
+ const prevKf = sortedKeyframes[i - 1];
288
+ if (!prevKf)
289
+ continue;
290
+ const duration = kf.time - prevKf.time;
291
+ const ease = kf.ease ? `, ease: "${kf.ease}"` : "";
292
+ animations.push(` tl.to("#stage-zoom-container", { scale: ${kf.zoom.scale}, x: ${x}, y: ${y}, duration: ${duration}${ease} }, ${prevKf.time});`);
293
+ }
294
+ }
295
+ return animations.join("\n");
296
+ }
297
+ function generateElementHtml(element, keyframes) {
298
+ const baseAttrs = [
299
+ `id="${element.id}"`,
300
+ `data-start="${element.startTime}"`,
301
+ `data-end="${element.startTime + element.duration}"`,
302
+ `data-layer="${element.zIndex}"`,
303
+ `data-name="${element.name}"`,
304
+ ];
305
+ // Serialize transform properties (x, y, scale, opacity) if non-default
306
+ if (element.x !== undefined && element.x !== 0) {
307
+ baseAttrs.push(`data-x="${element.x}"`);
308
+ }
309
+ if (element.y !== undefined && element.y !== 0) {
310
+ baseAttrs.push(`data-y="${element.y}"`);
311
+ }
312
+ if (element.scale !== undefined && element.scale !== 1) {
313
+ baseAttrs.push(`data-scale="${element.scale}"`);
314
+ }
315
+ if (element.opacity !== undefined && element.opacity !== 1) {
316
+ baseAttrs.push(`data-opacity="${element.opacity}"`);
317
+ }
318
+ // Serialize keyframes to data attribute if present
319
+ if (keyframes && keyframes.length > 0) {
320
+ const kfJson = JSON.stringify(keyframes);
321
+ baseAttrs.push(`data-keyframes='${kfJson.replace(/'/g, "&#39;")}'`);
322
+ }
323
+ if (isTextElement(element)) {
324
+ const textAttrs = [...baseAttrs, `data-type="text"`];
325
+ if (element.color) {
326
+ textAttrs.push(`data-color="${element.color}"`);
327
+ }
328
+ if (element.fontSize) {
329
+ textAttrs.push(`data-font-size="${element.fontSize}"`);
330
+ }
331
+ if (element.fontWeight) {
332
+ textAttrs.push(`data-font-weight="${element.fontWeight}"`);
333
+ }
334
+ if (element.fontFamily) {
335
+ textAttrs.push(`data-font-family="${element.fontFamily}"`);
336
+ }
337
+ if (element.textShadow === false) {
338
+ textAttrs.push(`data-text-shadow="false"`);
339
+ }
340
+ if (element.textOutline) {
341
+ textAttrs.push(`data-text-outline="true"`);
342
+ if (element.textOutlineColor) {
343
+ textAttrs.push(`data-text-outline-color="${element.textOutlineColor}"`);
344
+ }
345
+ if (element.textOutlineWidth) {
346
+ textAttrs.push(`data-text-outline-width="${element.textOutlineWidth}"`);
347
+ }
348
+ }
349
+ if (element.textHighlight) {
350
+ textAttrs.push(`data-text-highlight="true"`);
351
+ if (element.textHighlightColor) {
352
+ textAttrs.push(`data-text-highlight-color="${element.textHighlightColor}"`);
353
+ }
354
+ if (element.textHighlightPadding) {
355
+ textAttrs.push(`data-text-highlight-padding="${element.textHighlightPadding}"`);
356
+ }
357
+ if (element.textHighlightRadius) {
358
+ textAttrs.push(`data-text-highlight-radius="${element.textHighlightRadius}"`);
359
+ }
360
+ }
361
+ const content = element.content || element.name;
362
+ return `<div ${textAttrs.join(" ")}><div>${content}</div></div>`;
363
+ }
364
+ if (isCompositionElement(element)) {
365
+ const compositionAttrs = [
366
+ ...baseAttrs,
367
+ `data-type="composition"`,
368
+ `data-composition-id="${element.compositionId}"`,
369
+ ];
370
+ if (element.sourceDuration) {
371
+ compositionAttrs.push(`data-source-duration="${element.sourceDuration}"`);
372
+ }
373
+ if (element.sourceWidth) {
374
+ compositionAttrs.push(`data-source-width="${element.sourceWidth}"`);
375
+ }
376
+ if (element.sourceHeight) {
377
+ compositionAttrs.push(`data-source-height="${element.sourceHeight}"`);
378
+ }
379
+ if (element.variableValues && Object.keys(element.variableValues).length > 0) {
380
+ const varJson = JSON.stringify(element.variableValues);
381
+ compositionAttrs.push(`data-variable-values='${varJson.replace(/'/g, "&#39;")}'`);
382
+ }
383
+ const attrs = compositionAttrs.join(" ");
384
+ // Build iframe src with variable values as query params if present
385
+ // Strip any existing query params first to avoid duplication
386
+ let iframeSrc = element.src.split("?")[0];
387
+ if (element.variableValues && Object.keys(element.variableValues).length > 0) {
388
+ const params = new URLSearchParams();
389
+ for (const [key, value] of Object.entries(element.variableValues)) {
390
+ params.set(key, String(value));
391
+ }
392
+ iframeSrc = `${iframeSrc}?${params.toString()}`;
393
+ }
394
+ // Motion designs are full-screen overlays - always use 100% sizing
395
+ // The motion design HTML handles its own internal positioning
396
+ // Wrap iframe in container with click overlay for selection
397
+ return `<div ${attrs} style="width: 100%; height: 100%;">
398
+ <iframe src="${iframeSrc}" sandbox="allow-scripts allow-same-origin" style="width: 100%; height: 100%; border: none; pointer-events: none;"></iframe>
399
+ <div class="composition-click-overlay" style="position: absolute; inset: 0; cursor: pointer;"></div>
400
+ </div>`;
401
+ }
402
+ if (isMediaElement(element)) {
403
+ if (element.mediaStartTime) {
404
+ baseAttrs.push(`data-media-start="${element.mediaStartTime}"`);
405
+ }
406
+ if (element.sourceDuration) {
407
+ baseAttrs.push(`data-source-duration="${element.sourceDuration}"`);
408
+ }
409
+ if (element.isAroll) {
410
+ baseAttrs.push(`data-aroll="true"`);
411
+ }
412
+ if (element.volume !== undefined && element.volume !== 1) {
413
+ baseAttrs.push(`data-volume="${element.volume}"`);
414
+ }
415
+ if (element.type === "video" && element.hasAudio) {
416
+ baseAttrs.push(`data-has-audio="true"`);
417
+ }
418
+ }
419
+ const attrs = baseAttrs.join(" ");
420
+ switch (element.type) {
421
+ case "video":
422
+ return `<video ${attrs} src="${element.src}" playsinline></video>`;
423
+ case "image":
424
+ return `<img ${attrs} src="${element.src}" alt="${element.name}" />`;
425
+ case "audio":
426
+ return `<audio ${attrs} src="${element.src}"></audio>`;
427
+ default:
428
+ return "";
429
+ }
430
+ }
431
+ /**
432
+ * Generate initial position sets for elements.
433
+ *
434
+ * Center-based coordinate system with standard CSS origin:
435
+ * - (0, 0) = top-left corner of the canvas
436
+ * - (960, 540) = center of canvas (landscape 1920x1080)
437
+ * - x/y specifies where the element's CENTER goes (not top-left corner)
438
+ *
439
+ * Note: xPercent: -50, yPercent: -50 is applied once at player init via
440
+ * _initializeElementCentering(), so we only set x, y, scale here.
441
+ * This keeps generated timeline code clean (no repeated xPercent/yPercent).
442
+ */
443
+ function generateInitialPositionSets(elements, keyframes) {
444
+ const sets = [];
445
+ const timeEpsilon = 0.001;
446
+ for (const el of elements) {
447
+ const elementKeyframes = keyframes?.[el.id];
448
+ const hasBaseKeyframe = elementKeyframes?.some((kf) => Math.abs(kf.time) <= timeEpsilon &&
449
+ (kf.properties.x !== undefined || kf.properties.y !== undefined || kf.properties.scale !== undefined));
450
+ const xVal = el.x ?? 0;
451
+ const yVal = el.y ?? 0;
452
+ const scaleVal = isMediaElement(el) ? (el.scale ?? 1) : 1;
453
+ // Audio elements don't need positioning
454
+ if (el.type === "audio")
455
+ continue;
456
+ // Composition elements (motion designs) are full-screen overlays
457
+ // They don't need x/y/scale positioning - the HTML handles internal layout
458
+ if (isCompositionElement(el))
459
+ continue;
460
+ // Skip if element has a base keyframe that will handle positioning
461
+ if (hasBaseKeyframe) {
462
+ continue;
463
+ }
464
+ // Set position and scale (xPercent/yPercent applied at player init)
465
+ if (scaleVal !== 1) {
466
+ sets.push(` tl.set("#${el.id}", { x: ${xVal}, y: ${yVal}, scale: ${scaleVal} }, 0);`);
467
+ }
468
+ else if (xVal !== 0 || yVal !== 0) {
469
+ sets.push(` tl.set("#${el.id}", { x: ${xVal}, y: ${yVal} }, 0);`);
470
+ }
471
+ }
472
+ return sets.length > 0 ? sets.join("\n") : "";
473
+ }
474
+ /**
475
+ * Generates visibility bookends for ALL elements to ensure they appear/disappear
476
+ * at the correct times. Elements with keyframes still need visibility bookends
477
+ * because keyframesToGsapAnimations only handles property animations, not visibility.
478
+ *
479
+ * If opacity keyframes exist, the first keyframe defines the base.
480
+ */
481
+ function generateVisibilityForElementsWithoutKeyframes(elements, keyframes) {
482
+ const animations = [];
483
+ for (const el of elements) {
484
+ const elementKeyframes = keyframes?.[el.id];
485
+ const opacityKeyframes = elementKeyframes?.filter((kf) => kf.properties.opacity !== undefined) || [];
486
+ const start = el.startTime;
487
+ const end = el.startTime + el.duration;
488
+ const safeName = el.name.replace(/[\r\n]+/g, " ");
489
+ animations.push(` // ${safeName} (visibility)`);
490
+ animations.push(` tl.set("#${el.id}", { visibility: "hidden" }, 0);`);
491
+ let elementOpacity = el.opacity ?? 1;
492
+ if (opacityKeyframes.length > 0) {
493
+ const firstOpacityKeyframe = [...opacityKeyframes].sort((a, b) => a.time - b.time)[0];
494
+ if (firstOpacityKeyframe?.properties.opacity !== undefined) {
495
+ elementOpacity = firstOpacityKeyframe.properties.opacity;
496
+ }
497
+ }
498
+ // Only include opacity in visibility bookend if non-default or has opacity keyframes
499
+ const needsOpacity = elementOpacity !== 1 || opacityKeyframes.length > 0;
500
+ if (needsOpacity) {
501
+ animations.push(` tl.set("#${el.id}", { visibility: "visible", opacity: ${elementOpacity} }, ${start});`);
502
+ }
503
+ else {
504
+ animations.push(` tl.set("#${el.id}", { visibility: "visible" }, ${start});`);
505
+ }
506
+ animations.push(` tl.set("#${el.id}", { visibility: "hidden" }, ${end});`);
507
+ }
508
+ return animations.length > 0 ? animations.join("\n") : "";
509
+ }
510
+ function generateDefaultGsapAnimations(elements, totalDuration, stageZoomKeyframes, canvasWidth, canvasHeight) {
511
+ if (elements.length === 0 && (!stageZoomKeyframes || stageZoomKeyframes.length === 0)) {
512
+ return `
513
+ const tl = gsap.timeline({ paused: true });
514
+ tl.to({}, { duration: ${totalDuration || 1} });
515
+ `;
516
+ }
517
+ const animations = [];
518
+ // First, set initial positions and scales for elements with x/y offsets or scale
519
+ const initialPositionSets = generateInitialPositionSets(elements);
520
+ if (initialPositionSets) {
521
+ animations.push(initialPositionSets);
522
+ }
523
+ for (const el of elements) {
524
+ const start = el.startTime;
525
+ const end = el.startTime + el.duration;
526
+ const safeName = el.name.replace(/[\r\n]+/g, " ");
527
+ const elementOpacity = el.opacity ?? 1;
528
+ animations.push(` // ${safeName}`);
529
+ animations.push(` tl.set("#${el.id}", { visibility: "hidden" }, 0);`);
530
+ // Only include opacity if non-default
531
+ if (elementOpacity !== 1) {
532
+ animations.push(` tl.set("#${el.id}", { visibility: "visible", opacity: ${elementOpacity} }, ${start});`);
533
+ }
534
+ else {
535
+ animations.push(` tl.set("#${el.id}", { visibility: "visible" }, ${start});`);
536
+ }
537
+ animations.push(` tl.set("#${el.id}", { visibility: "hidden" }, ${end});`);
538
+ }
539
+ const mediaElements = elements.filter((el) => el.type === "video" || el.type === "audio");
540
+ const mediaSync = mediaElements.length > 0
541
+ ? `
542
+ // Sync media playback
543
+ tl.eventCallback("onUpdate", function() {
544
+ const time = tl.time();
545
+ document.querySelectorAll("video[data-start], audio[data-start]").forEach(function(media) {
546
+ const start = parseFloat(media.dataset.start);
547
+ const end = parseFloat(media.dataset.end) || Infinity;
548
+ const mediaTime = time - start;
549
+ if (time >= start && time < end) {
550
+ if (Math.abs(media.currentTime - mediaTime) > 0.1) {
551
+ media.currentTime = mediaTime;
552
+ }
553
+ if (media.paused && !tl.paused()) {
554
+ media.play().catch(function() {});
555
+ }
556
+ } else if (!media.paused) {
557
+ media.pause();
558
+ }
559
+ });
560
+ });`
561
+ : "";
562
+ // Generate zoom animations if present
563
+ const zoomAnimations = stageZoomKeyframes && stageZoomKeyframes.length > 0 && canvasWidth && canvasHeight
564
+ ? "\n" + generateZoomGsapAnimations(stageZoomKeyframes, canvasWidth, canvasHeight)
565
+ : "";
566
+ return `
567
+ const tl = gsap.timeline({ paused: true });
568
+ ${animations.join("\n")}
569
+ ${mediaSync}${zoomAnimations}
570
+ `;
571
+ }
572
+ //# sourceMappingURL=hyperframes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyperframes.js","sourceRoot":"","sources":["../../src/generators/hyperframes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ {
2
+ "version": "0.1.0",
3
+ "buildId": "dev",
4
+ "sha256": "43114410bbf27736b0bf10174ae0ee238d780c1a7920d654fb7fdbbf9a39d36e",
5
+ "artifacts": {
6
+ "iife": "hyperframe.runtime.iife.js",
7
+ "esm": "hyperframe.runtime.mjs"
8
+ },
9
+ "contract": {
10
+ "globals": {
11
+ "player": "__player",
12
+ "playerReady": "__playerReady",
13
+ "renderReady": "__renderReady",
14
+ "timelines": "__timelines",
15
+ "clipManifest": "__clipManifest"
16
+ },
17
+ "messageSources": {
18
+ "parent": "hf-parent",
19
+ "preview": "hf-preview"
20
+ }
21
+ }
22
+ }