@hyperframes/core 0.7.13 → 0.7.15

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 (238) hide show
  1. package/dist/compiler/staticGuard.js +1 -1
  2. package/dist/compiler/staticGuard.js.map +1 -1
  3. package/dist/core.types.d.ts +2 -369
  4. package/dist/core.types.d.ts.map +1 -1
  5. package/dist/core.types.js +1 -84
  6. package/dist/core.types.js.map +1 -1
  7. package/dist/generators/hyperframes.d.ts +1 -1
  8. package/dist/generators/hyperframes.d.ts.map +1 -1
  9. package/dist/generators/hyperframes.js +1 -1
  10. package/dist/generators/hyperframes.js.map +1 -1
  11. package/dist/index.d.ts +5 -7
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +7 -4
  14. package/dist/index.js.map +1 -1
  15. package/dist/lint/index.d.ts +2 -2
  16. package/dist/lint/index.d.ts.map +1 -1
  17. package/dist/lint/index.js +2 -1
  18. package/dist/lint/index.js.map +1 -1
  19. package/dist/parsers/gsapConstants.d.ts +2 -12
  20. package/dist/parsers/gsapConstants.d.ts.map +1 -1
  21. package/dist/parsers/gsapConstants.js +2 -110
  22. package/dist/parsers/gsapConstants.js.map +1 -1
  23. package/dist/parsers/gsapParserAcorn.d.ts +2 -48
  24. package/dist/parsers/gsapParserAcorn.d.ts.map +1 -1
  25. package/dist/parsers/gsapParserAcorn.js +2 -1057
  26. package/dist/parsers/gsapParserAcorn.js.map +1 -1
  27. package/dist/parsers/gsapParserExports.d.ts +2 -20
  28. package/dist/parsers/gsapParserExports.d.ts.map +1 -1
  29. package/dist/parsers/gsapParserExports.js +2 -8
  30. package/dist/parsers/gsapParserExports.js.map +1 -1
  31. package/dist/parsers/gsapWriterAcorn.d.ts +2 -90
  32. package/dist/parsers/gsapWriterAcorn.d.ts.map +1 -1
  33. package/dist/parsers/gsapWriterAcorn.js +2 -2016
  34. package/dist/parsers/gsapWriterAcorn.js.map +1 -1
  35. package/dist/parsers/hfIds.d.ts +2 -16
  36. package/dist/parsers/hfIds.d.ts.map +1 -1
  37. package/dist/parsers/hfIds.js +2 -127
  38. package/dist/parsers/hfIds.js.map +1 -1
  39. package/dist/parsers/springEase.d.ts +2 -28
  40. package/dist/parsers/springEase.d.ts.map +1 -1
  41. package/dist/parsers/springEase.js +2 -69
  42. package/dist/parsers/springEase.js.map +1 -1
  43. package/dist/slideshow/index.d.ts +1 -0
  44. package/dist/slideshow/index.d.ts.map +1 -1
  45. package/dist/slideshow/index.js +1 -0
  46. package/dist/slideshow/index.js.map +1 -1
  47. package/dist/studio-api/helpers/draftMarkers.d.ts +2 -10
  48. package/dist/studio-api/helpers/draftMarkers.d.ts.map +1 -1
  49. package/dist/studio-api/helpers/draftMarkers.js +2 -10
  50. package/dist/studio-api/helpers/draftMarkers.js.map +1 -1
  51. package/dist/studio-api/helpers/finiteMutation.d.ts +2 -10
  52. package/dist/studio-api/helpers/finiteMutation.d.ts.map +1 -1
  53. package/dist/studio-api/helpers/finiteMutation.js +2 -20
  54. package/dist/studio-api/helpers/finiteMutation.js.map +1 -1
  55. package/dist/studio-api/helpers/manualEditsRenderScript.d.ts +2 -12
  56. package/dist/studio-api/helpers/manualEditsRenderScript.d.ts.map +1 -1
  57. package/dist/studio-api/helpers/manualEditsRenderScript.js +2 -632
  58. package/dist/studio-api/helpers/manualEditsRenderScript.js.map +1 -1
  59. package/dist/studio-api/helpers/screenshotClip.d.ts +2 -7
  60. package/dist/studio-api/helpers/screenshotClip.d.ts.map +1 -1
  61. package/dist/studio-api/helpers/screenshotClip.js +2 -21
  62. package/dist/studio-api/helpers/screenshotClip.js.map +1 -1
  63. package/dist/studio-api/helpers/studioMotionRenderScript.d.ts +2 -8
  64. package/dist/studio-api/helpers/studioMotionRenderScript.d.ts.map +1 -1
  65. package/dist/studio-api/helpers/studioMotionRenderScript.js +2 -207
  66. package/dist/studio-api/helpers/studioMotionRenderScript.js.map +1 -1
  67. package/dist/studio-api/index.d.ts +2 -9
  68. package/dist/studio-api/index.d.ts.map +1 -1
  69. package/dist/studio-api/index.js +2 -8
  70. package/dist/studio-api/index.js.map +1 -1
  71. package/package.json +16 -18
  72. package/dist/generated/runtime-inline.js +0 -11
  73. package/dist/hyperframe.manifest.json +0 -22
  74. package/dist/hyperframe.runtime.mjs +0 -325
  75. package/dist/lint/context.d.ts +0 -17
  76. package/dist/lint/context.d.ts.map +0 -1
  77. package/dist/lint/context.js +0 -37
  78. package/dist/lint/context.js.map +0 -1
  79. package/dist/lint/hyperframeLinter.d.ts +0 -14
  80. package/dist/lint/hyperframeLinter.d.ts.map +0 -1
  81. package/dist/lint/hyperframeLinter.js +0 -132
  82. package/dist/lint/hyperframeLinter.js.map +0 -1
  83. package/dist/lint/rules/adapters.d.ts +0 -3
  84. package/dist/lint/rules/adapters.d.ts.map +0 -1
  85. package/dist/lint/rules/adapters.js +0 -40
  86. package/dist/lint/rules/adapters.js.map +0 -1
  87. package/dist/lint/rules/captions.d.ts +0 -3
  88. package/dist/lint/rules/captions.d.ts.map +0 -1
  89. package/dist/lint/rules/captions.js +0 -242
  90. package/dist/lint/rules/captions.js.map +0 -1
  91. package/dist/lint/rules/composition.d.ts +0 -5
  92. package/dist/lint/rules/composition.d.ts.map +0 -1
  93. package/dist/lint/rules/composition.js +0 -694
  94. package/dist/lint/rules/composition.js.map +0 -1
  95. package/dist/lint/rules/core.d.ts +0 -3
  96. package/dist/lint/rules/core.d.ts.map +0 -1
  97. package/dist/lint/rules/core.js +0 -432
  98. package/dist/lint/rules/core.js.map +0 -1
  99. package/dist/lint/rules/fonts.d.ts +0 -3
  100. package/dist/lint/rules/fonts.d.ts.map +0 -1
  101. package/dist/lint/rules/fonts.js +0 -205
  102. package/dist/lint/rules/fonts.js.map +0 -1
  103. package/dist/lint/rules/gsap.d.ts +0 -4
  104. package/dist/lint/rules/gsap.d.ts.map +0 -1
  105. package/dist/lint/rules/gsap.js +0 -1039
  106. package/dist/lint/rules/gsap.js.map +0 -1
  107. package/dist/lint/rules/media.d.ts +0 -3
  108. package/dist/lint/rules/media.d.ts.map +0 -1
  109. package/dist/lint/rules/media.js +0 -491
  110. package/dist/lint/rules/media.js.map +0 -1
  111. package/dist/lint/rules/slideshow.d.ts +0 -4
  112. package/dist/lint/rules/slideshow.d.ts.map +0 -1
  113. package/dist/lint/rules/slideshow.js +0 -74
  114. package/dist/lint/rules/slideshow.js.map +0 -1
  115. package/dist/lint/rules/textures.d.ts +0 -3
  116. package/dist/lint/rules/textures.d.ts.map +0 -1
  117. package/dist/lint/rules/textures.js +0 -192
  118. package/dist/lint/rules/textures.js.map +0 -1
  119. package/dist/lint/types.d.ts +0 -36
  120. package/dist/lint/types.d.ts.map +0 -1
  121. package/dist/lint/types.js +0 -2
  122. package/dist/lint/types.js.map +0 -1
  123. package/dist/lint/utils.d.ts +0 -55
  124. package/dist/lint/utils.d.ts.map +0 -1
  125. package/dist/lint/utils.js +0 -264
  126. package/dist/lint/utils.js.map +0 -1
  127. package/dist/parsers/gsapInline.d.ts +0 -47
  128. package/dist/parsers/gsapInline.d.ts.map +0 -1
  129. package/dist/parsers/gsapInline.js +0 -513
  130. package/dist/parsers/gsapInline.js.map +0 -1
  131. package/dist/parsers/gsapParser.d.ts +0 -158
  132. package/dist/parsers/gsapParser.d.ts.map +0 -1
  133. package/dist/parsers/gsapParser.js +0 -2634
  134. package/dist/parsers/gsapParser.js.map +0 -1
  135. package/dist/parsers/gsapParser.test-helpers.d.ts +0 -49
  136. package/dist/parsers/gsapParser.test-helpers.d.ts.map +0 -1
  137. package/dist/parsers/gsapParser.test-helpers.js +0 -97
  138. package/dist/parsers/gsapParser.test-helpers.js.map +0 -1
  139. package/dist/parsers/gsapSerialize.d.ts +0 -191
  140. package/dist/parsers/gsapSerialize.d.ts.map +0 -1
  141. package/dist/parsers/gsapSerialize.js +0 -410
  142. package/dist/parsers/gsapSerialize.js.map +0 -1
  143. package/dist/parsers/gsapUnroll.d.ts +0 -7
  144. package/dist/parsers/gsapUnroll.d.ts.map +0 -1
  145. package/dist/parsers/gsapUnroll.js +0 -137
  146. package/dist/parsers/gsapUnroll.js.map +0 -1
  147. package/dist/parsers/htmlParser.d.ts +0 -27
  148. package/dist/parsers/htmlParser.d.ts.map +0 -1
  149. package/dist/parsers/htmlParser.js +0 -731
  150. package/dist/parsers/htmlParser.js.map +0 -1
  151. package/dist/studio-api/createStudioApi.d.ts +0 -10
  152. package/dist/studio-api/createStudioApi.d.ts.map +0 -1
  153. package/dist/studio-api/createStudioApi.js +0 -32
  154. package/dist/studio-api/createStudioApi.js.map +0 -1
  155. package/dist/studio-api/helpers/backupJournal.d.ts +0 -9
  156. package/dist/studio-api/helpers/backupJournal.d.ts.map +0 -1
  157. package/dist/studio-api/helpers/backupJournal.js +0 -81
  158. package/dist/studio-api/helpers/backupJournal.js.map +0 -1
  159. package/dist/studio-api/helpers/hfIdPersist.d.ts +0 -11
  160. package/dist/studio-api/helpers/hfIdPersist.d.ts.map +0 -1
  161. package/dist/studio-api/helpers/hfIdPersist.js +0 -39
  162. package/dist/studio-api/helpers/hfIdPersist.js.map +0 -1
  163. package/dist/studio-api/helpers/mediaValidation.d.ts +0 -20
  164. package/dist/studio-api/helpers/mediaValidation.d.ts.map +0 -1
  165. package/dist/studio-api/helpers/mediaValidation.js +0 -56
  166. package/dist/studio-api/helpers/mediaValidation.js.map +0 -1
  167. package/dist/studio-api/helpers/mime.d.ts +0 -4
  168. package/dist/studio-api/helpers/mime.d.ts.map +0 -1
  169. package/dist/studio-api/helpers/mime.js +0 -39
  170. package/dist/studio-api/helpers/mime.js.map +0 -1
  171. package/dist/studio-api/helpers/previewAdapter.d.ts +0 -43
  172. package/dist/studio-api/helpers/previewAdapter.d.ts.map +0 -1
  173. package/dist/studio-api/helpers/previewAdapter.js +0 -118
  174. package/dist/studio-api/helpers/previewAdapter.js.map +0 -1
  175. package/dist/studio-api/helpers/projectSignature.d.ts +0 -5
  176. package/dist/studio-api/helpers/projectSignature.d.ts.map +0 -1
  177. package/dist/studio-api/helpers/projectSignature.js +0 -154
  178. package/dist/studio-api/helpers/projectSignature.js.map +0 -1
  179. package/dist/studio-api/helpers/safePath.d.ts +0 -12
  180. package/dist/studio-api/helpers/safePath.d.ts.map +0 -1
  181. package/dist/studio-api/helpers/safePath.js +0 -38
  182. package/dist/studio-api/helpers/safePath.js.map +0 -1
  183. package/dist/studio-api/helpers/sourceMutation.d.ts +0 -28
  184. package/dist/studio-api/helpers/sourceMutation.d.ts.map +0 -1
  185. package/dist/studio-api/helpers/sourceMutation.js +0 -339
  186. package/dist/studio-api/helpers/sourceMutation.js.map +0 -1
  187. package/dist/studio-api/helpers/subComposition.d.ts +0 -20
  188. package/dist/studio-api/helpers/subComposition.d.ts.map +0 -1
  189. package/dist/studio-api/helpers/subComposition.js +0 -289
  190. package/dist/studio-api/helpers/subComposition.js.map +0 -1
  191. package/dist/studio-api/helpers/waveform.d.ts +0 -4
  192. package/dist/studio-api/helpers/waveform.d.ts.map +0 -1
  193. package/dist/studio-api/helpers/waveform.js +0 -80
  194. package/dist/studio-api/helpers/waveform.js.map +0 -1
  195. package/dist/studio-api/routes/files.d.ts +0 -4
  196. package/dist/studio-api/routes/files.d.ts.map +0 -1
  197. package/dist/studio-api/routes/files.js +0 -1200
  198. package/dist/studio-api/routes/files.js.map +0 -1
  199. package/dist/studio-api/routes/fonts.d.ts +0 -3
  200. package/dist/studio-api/routes/fonts.d.ts.map +0 -1
  201. package/dist/studio-api/routes/fonts.js +0 -157
  202. package/dist/studio-api/routes/fonts.js.map +0 -1
  203. package/dist/studio-api/routes/lint.d.ts +0 -4
  204. package/dist/studio-api/routes/lint.d.ts.map +0 -1
  205. package/dist/studio-api/routes/lint.js +0 -29
  206. package/dist/studio-api/routes/lint.js.map +0 -1
  207. package/dist/studio-api/routes/preview.d.ts +0 -4
  208. package/dist/studio-api/routes/preview.d.ts.map +0 -1
  209. package/dist/studio-api/routes/preview.js +0 -331
  210. package/dist/studio-api/routes/preview.js.map +0 -1
  211. package/dist/studio-api/routes/projects.d.ts +0 -4
  212. package/dist/studio-api/routes/projects.d.ts.map +0 -1
  213. package/dist/studio-api/routes/projects.js +0 -45
  214. package/dist/studio-api/routes/projects.js.map +0 -1
  215. package/dist/studio-api/routes/registry.d.ts +0 -4
  216. package/dist/studio-api/routes/registry.d.ts.map +0 -1
  217. package/dist/studio-api/routes/registry.js +0 -31
  218. package/dist/studio-api/routes/registry.js.map +0 -1
  219. package/dist/studio-api/routes/render.d.ts +0 -4
  220. package/dist/studio-api/routes/render.d.ts.map +0 -1
  221. package/dist/studio-api/routes/render.js +0 -269
  222. package/dist/studio-api/routes/render.js.map +0 -1
  223. package/dist/studio-api/routes/storyboard.d.ts +0 -4
  224. package/dist/studio-api/routes/storyboard.d.ts.map +0 -1
  225. package/dist/studio-api/routes/storyboard.js +0 -65
  226. package/dist/studio-api/routes/storyboard.js.map +0 -1
  227. package/dist/studio-api/routes/thumbnail.d.ts +0 -4
  228. package/dist/studio-api/routes/thumbnail.d.ts.map +0 -1
  229. package/dist/studio-api/routes/thumbnail.js +0 -107
  230. package/dist/studio-api/routes/thumbnail.js.map +0 -1
  231. package/dist/studio-api/routes/waveform.d.ts +0 -4
  232. package/dist/studio-api/routes/waveform.d.ts.map +0 -1
  233. package/dist/studio-api/routes/waveform.js +0 -41
  234. package/dist/studio-api/routes/waveform.js.map +0 -1
  235. package/dist/studio-api/types.d.ts +0 -120
  236. package/dist/studio-api/types.d.ts.map +0 -1
  237. package/dist/studio-api/types.js +0 -2
  238. package/dist/studio-api/types.js.map +0 -1
@@ -1,410 +0,0 @@
1
- /**
2
- * Map provenance to an editing strategy:
3
- * - `direct` — literal tween, maps 1:1 to source; edit in place.
4
- * - `unroll` — helper/loop expansion; unroll to literal tweens, then edit.
5
- * - `source` — runtime-dynamic value; not statically editable, edit the code.
6
- */
7
- export function editabilityForProvenance(provenance) {
8
- if (!provenance || provenance.kind === "literal")
9
- return "direct";
10
- if (provenance.kind === "runtime-dynamic")
11
- return "source";
12
- return "unroll";
13
- }
14
- /**
15
- * Build arcPath segments + waypoints from resolved path coordinates. Shared by
16
- * the AST parser (coords from literal nodes) and the runtime scanner (coords
17
- * from a live `vars.motionPath`), so both produce identical arc config.
18
- */
19
- export function buildArcPath(coords, curviness, autoRotate, isCubic) {
20
- const first = coords[0];
21
- if (coords.length < 2 || !first)
22
- return undefined;
23
- const segments = [];
24
- let waypoints;
25
- if (isCubic && coords.length >= 4) {
26
- // coords are [anchor, cp1, cp2, anchor, cp1, cp2, anchor, ...].
27
- waypoints = [first];
28
- for (let i = 1; i + 2 < coords.length; i += 3) {
29
- const cp1 = coords[i];
30
- const cp2 = coords[i + 1];
31
- const anchor = coords[i + 2];
32
- if (!cp1 || !cp2 || !anchor)
33
- continue;
34
- waypoints.push(anchor);
35
- segments.push({ curviness, cp1, cp2 });
36
- }
37
- }
38
- else {
39
- waypoints = coords;
40
- for (let i = 0; i < waypoints.length - 1; i++)
41
- segments.push({ curviness });
42
- }
43
- return { arcPath: { enabled: true, autoRotate, segments }, waypoints };
44
- }
45
- export { SUPPORTED_PROPS, SUPPORTED_EASES } from "./gsapConstants.js";
46
- // ── Serialization ───────────────────────────────────────────────────────────
47
- export function serializeGsapAnimations(animations, timelineVar = "tl", options) {
48
- const sorted = [...animations].sort((a, b) => {
49
- const aNum = a.resolvedStart ?? (typeof a.position === "number" ? a.position : Number.MAX_SAFE_INTEGER);
50
- const bNum = b.resolvedStart ?? (typeof b.position === "number" ? b.position : Number.MAX_SAFE_INTEGER);
51
- return aNum - bNum;
52
- });
53
- // fallow-ignore-next-line complexity
54
- const lines = sorted.map((anim) => {
55
- const selector = `"${anim.targetSelector}"`;
56
- const props = { ...anim.properties };
57
- if (anim.duration !== undefined)
58
- props.duration = anim.duration;
59
- if (anim.ease)
60
- props.ease = anim.ease;
61
- let propsStr = serializeObject(props);
62
- if (anim.extras && Object.keys(anim.extras).length > 0) {
63
- const extrasStr = serializeExtras(anim.extras);
64
- if (Object.keys(props).length === 0) {
65
- propsStr = `{ ${extrasStr} }`;
66
- }
67
- else {
68
- // Insert extras before the closing brace
69
- propsStr = propsStr.slice(0, -2) + `, ${extrasStr} }`;
70
- }
71
- }
72
- const posStr = typeof anim.position === "string" ? `"${anim.position}"` : anim.position;
73
- switch (anim.method) {
74
- case "set":
75
- // A global set is a base `gsap.set` — off the timeline, no position arg.
76
- return anim.global
77
- ? ` gsap.set(${selector}, ${propsStr});`
78
- : ` ${timelineVar}.set(${selector}, ${propsStr}, ${posStr});`;
79
- case "to":
80
- return ` ${timelineVar}.to(${selector}, ${propsStr}, ${posStr});`;
81
- case "from":
82
- return ` ${timelineVar}.from(${selector}, ${propsStr}, ${posStr});`;
83
- case "fromTo": {
84
- const fromStr = serializeObject(anim.fromProperties || {});
85
- return ` ${timelineVar}.fromTo(${selector}, ${fromStr}, ${propsStr}, ${posStr});`;
86
- }
87
- }
88
- });
89
- let mediaSync = "";
90
- if (options?.includeMediaSync) {
91
- mediaSync = `
92
- ${timelineVar}.eventCallback("onUpdate", function() {
93
- const time = ${timelineVar}.time();
94
- document.querySelectorAll("video[data-start], audio[data-start]").forEach(function(media) {
95
- const start = parseFloat(media.dataset.start);
96
- const end = parseFloat(media.dataset.end) || Infinity;
97
- const mediaTime = time - start;
98
- if (time >= start && time < end) {
99
- if (Math.abs(media.currentTime - mediaTime) > 0.1) {
100
- media.currentTime = mediaTime;
101
- }
102
- if (media.paused && !${timelineVar}.paused()) {
103
- media.play().catch(function() {});
104
- }
105
- } else if (!media.paused) {
106
- media.pause();
107
- }
108
- });
109
- });`;
110
- }
111
- const preamble = options?.preamble || `const ${timelineVar} = gsap.timeline({ paused: true });`;
112
- const postamble = options?.postamble ? `\n ${options.postamble}` : "";
113
- return `
114
- ${preamble}
115
- ${lines.join("\n")}${mediaSync}${postamble}
116
- `;
117
- }
118
- export function serializeValue(value) {
119
- if (typeof value === "string" && value.startsWith("__raw:")) {
120
- return value.slice(6);
121
- }
122
- if (typeof value === "string")
123
- return JSON.stringify(value);
124
- return String(value);
125
- }
126
- export function safeJsKey(key) {
127
- return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key) ? key : JSON.stringify(key);
128
- }
129
- function serializeObject(obj) {
130
- const entries = Object.entries(obj).map(([key, value]) => {
131
- return `${safeJsKey(key)}: ${serializeValue(value)}`;
132
- });
133
- return `{ ${entries.join(", ")} }`;
134
- }
135
- function serializeExtras(extras) {
136
- return Object.entries(extras)
137
- .map(([key, value]) => {
138
- return `${safeJsKey(key)}: ${serializeValue(value)}`;
139
- })
140
- .join(", ");
141
- }
142
- // ── Element filtering ─────────────────────────────────────────────────────────
143
- /**
144
- * Filter animations to those targeting `#<elementId>` (id-only match). For the
145
- * studio panel's id-OR-selector matching, see `getAnimationsForElement` in
146
- * `useGsapTweenCache.ts` — distinct on purpose, hence the distinct name.
147
- */
148
- export function getAnimationsForElementId(animations, elementId) {
149
- const selector = `#${elementId}`;
150
- return animations.filter((a) => a.targetSelector === selector);
151
- }
152
- // ── Validation (regex-based, no AST needed) ─────────────────────────────────
153
- const FORBIDDEN_GSAP_PATTERNS = [
154
- { pattern: /\.call\s*\(/, message: "call() method not allowed" },
155
- { pattern: /\.add\s*\(/, message: "add() method not allowed" },
156
- { pattern: /\.addPause\s*\(/, message: "addPause() method not allowed" },
157
- { pattern: /gsap\.registerEffect\s*\(/, message: "registerEffect() not allowed" },
158
- { pattern: /ScrollTrigger/, message: "ScrollTrigger not allowed" },
159
- { pattern: /onComplete\s*:/, message: "onComplete callback not allowed" },
160
- { pattern: /onUpdate\s*:/, message: "onUpdate callback not allowed" },
161
- { pattern: /onStart\s*:/, message: "onStart callback not allowed" },
162
- { pattern: /onRepeat\s*:/, message: "onRepeat callback not allowed" },
163
- { pattern: /onReverseComplete\s*:/, message: "onReverseComplete callback not allowed" },
164
- { pattern: /repeat\s*:\s*-1/, message: "Infinite repeat (repeat: -1) not allowed" },
165
- { pattern: /Math\.random\s*\(/, message: "Random values (Math.random) not allowed" },
166
- { pattern: /Date\.now\s*\(/, message: "Date-dependent values (Date.now) not allowed" },
167
- { pattern: /new\s+Date\s*\(/, message: "Date constructor not allowed" },
168
- { pattern: /setTimeout\s*\(/, message: "setTimeout not allowed" },
169
- { pattern: /setInterval\s*\(/, message: "setInterval not allowed" },
170
- { pattern: /requestAnimationFrame\s*\(/, message: "requestAnimationFrame not allowed" },
171
- ];
172
- export function validateCompositionGsap(script) {
173
- const errors = [];
174
- const warnings = [];
175
- for (const { pattern, message } of FORBIDDEN_GSAP_PATTERNS) {
176
- if (pattern.test(script))
177
- errors.push(message);
178
- }
179
- if (/yoyo\s*:\s*true/.test(script)) {
180
- warnings.push("yoyo animations may behave unexpectedly when scrubbing");
181
- }
182
- if (/stagger\s*:/.test(script)) {
183
- warnings.push("stagger animations may not serialize correctly");
184
- }
185
- return { valid: errors.length === 0, errors, warnings };
186
- }
187
- // ── Keyframe Conversion Helpers ─────────────────────────────────────────────
188
- export function keyframesToGsapAnimations(elementId, keyframes, elementStartTime, base) {
189
- const sorted = [...keyframes].sort((a, b) => a.time - b.time);
190
- const animations = [];
191
- const baseX = base?.x ?? 0;
192
- const baseY = base?.y ?? 0;
193
- const baseScale = base?.scale ?? 1;
194
- // fallow-ignore-next-line complexity
195
- sorted.forEach((kf, i) => {
196
- const absoluteTime = elementStartTime + kf.time;
197
- const isFirst = i === 0;
198
- const prevKf = i > 0 ? sorted[i - 1] : null;
199
- const duration = prevKf ? kf.time - prevKf.time : undefined;
200
- const position = prevKf ? elementStartTime + prevKf.time : absoluteTime;
201
- const properties = {};
202
- for (const [key, value] of Object.entries(kf.properties)) {
203
- if (typeof value !== "number")
204
- continue;
205
- if (key === "x")
206
- properties.x = baseX + value;
207
- else if (key === "y")
208
- properties.y = baseY + value;
209
- else if (key === "scale")
210
- properties.scale = baseScale * value;
211
- else
212
- properties[key] = value;
213
- }
214
- animations.push({
215
- id: `${elementId}-kf-${kf.id}`,
216
- targetSelector: `#${elementId}`,
217
- method: isFirst ? "set" : "to",
218
- position,
219
- properties,
220
- duration: isFirst ? undefined : duration,
221
- ease: kf.ease,
222
- });
223
- });
224
- return animations;
225
- }
226
- export function gsapAnimationsToKeyframes(animations, elementStartTime, options) {
227
- const validMethods = ["set", "to", "from", "fromTo"];
228
- const baseX = options?.baseX ?? 0;
229
- const baseY = options?.baseY ?? 0;
230
- const baseScale = options?.baseScale ?? 1;
231
- const clampTimeToZero = options?.clampTimeToZero ?? true;
232
- const skipBaseSet = options?.skipBaseSet ?? false;
233
- const baseTimeEpsilon = 0.001;
234
- const baseValueEpsilon = 0.00001;
235
- return (animations
236
- .filter((a) => validMethods.includes(a.method) && typeof a.position === "number")
237
- // fallow-ignore-next-line complexity
238
- .map((a) => {
239
- const relativeTimeRaw = a.position - elementStartTime;
240
- const time = clampTimeToZero ? Math.max(0, relativeTimeRaw) : relativeTimeRaw;
241
- const properties = {};
242
- for (const [key, value] of Object.entries(a.properties)) {
243
- if (typeof value !== "number")
244
- continue;
245
- if (key === "x")
246
- properties.x = value - baseX;
247
- else if (key === "y")
248
- properties.y = value - baseY;
249
- else if (key === "scale") {
250
- properties.scale = baseScale !== 0 ? value / baseScale : value;
251
- }
252
- else {
253
- properties[key] = value;
254
- }
255
- }
256
- if (skipBaseSet &&
257
- a.method === "set" &&
258
- time < baseTimeEpsilon &&
259
- Object.values(properties).every((v) => typeof v === "number" && Math.abs(v) < baseValueEpsilon)) {
260
- return null;
261
- }
262
- return {
263
- id: a.id.replace(/^.*-kf-/, ""),
264
- time,
265
- properties: properties,
266
- ease: a.ease,
267
- };
268
- })
269
- .filter((kf) => kf !== null));
270
- }
271
- // ── Keyframe-conversion transforms (pure; shared by recast + acorn writers) ────
272
- /**
273
- * CSS identity values for properties whose "rest" state isn't 0 — used to
274
- * synthesize the missing endpoint when converting a flat tween to keyframes.
275
- */
276
- const CSS_IDENTITY = {
277
- opacity: 1,
278
- autoAlpha: 1,
279
- scale: 1,
280
- scaleX: 1,
281
- scaleY: 1,
282
- };
283
- function cssIdentityValue(prop) {
284
- return CSS_IDENTITY[prop] ?? 0;
285
- }
286
- /** Build the identity-endpoint map for a flat tween's properties. */
287
- function buildIdentityMap(props) {
288
- const identity = {};
289
- for (const [key, val] of Object.entries(props)) {
290
- if (val != null)
291
- identity[key] = typeof val === "number" ? cssIdentityValue(key) : val;
292
- }
293
- return identity;
294
- }
295
- /**
296
- * Resolve the 0% (from) and 100% (to) property maps for a tween being
297
- * converted to percentage keyframes.
298
- *
299
- * @param resolvedFromValues — Despite the "from" in the name (historical), these
300
- * are runtime-captured DOM values that override the conversion endpoint:
301
- * - For to(): overrides fromProps (the 0% state / where the element is now).
302
- * - For from(): overrides toProps (the 100% state / where the element rests).
303
- * - For fromTo(): merges into toProps (the 100% endpoint the user is editing).
304
- */
305
- export function resolveConversionProps(anim, resolvedFromValues) {
306
- if (anim.method === "set") {
307
- // A static hold becomes a keyframed `to` whose 0% and 100% both start at the
308
- // set's value — the visual is unchanged until the user edits a keyframe to
309
- // animate it. (The caller flips the call from `set` to `to` + adds a duration.)
310
- return { fromProps: { ...anim.properties }, toProps: { ...anim.properties } };
311
- }
312
- if (anim.method === "to") {
313
- const identity = buildIdentityMap(anim.properties);
314
- const fromProps = resolvedFromValues ? { ...identity, ...resolvedFromValues } : identity;
315
- return { fromProps, toProps: { ...anim.properties } };
316
- }
317
- if (anim.method === "from") {
318
- const identity = buildIdentityMap(anim.properties);
319
- const toProps = resolvedFromValues ? { ...identity, ...resolvedFromValues } : identity;
320
- return { fromProps: { ...anim.properties }, toProps };
321
- }
322
- // fromTo(fromVars, toVars): anim.fromProperties = fromVars (0% state),
323
- // anim.properties = toVars (100% state). resolvedFromValues contains the
324
- // current DOM position from a drag — it represents the NEW destination, so
325
- // it merges into toProps (the 100% endpoint the user is editing), NOT into
326
- // fromProps. This is intentional and not inverted.
327
- const toProps = resolvedFromValues
328
- ? { ...anim.properties, ...resolvedFromValues }
329
- : { ...anim.properties };
330
- return { fromProps: { ...(anim.fromProperties ?? {}) }, toProps };
331
- }
332
- // ── Arc path serialization helpers (shared by recast + acorn writers) ─────────
333
- function numericXY(props) {
334
- const vx = props.x;
335
- const vy = props.y;
336
- return typeof vx === "number" && typeof vy === "number" ? { x: vx, y: vy } : null;
337
- }
338
- export function extractArcWaypoints(anim) {
339
- const keyframeWps = (anim.keyframes?.keyframes ?? [])
340
- .map((kf) => numericXY(kf.properties))
341
- .filter((pt) => pt !== null);
342
- if (keyframeWps.length >= 2)
343
- return keyframeWps;
344
- const propX = anim.properties.x;
345
- const propY = anim.properties.y;
346
- if (typeof propX !== "number" && typeof propY !== "number")
347
- return keyframeWps;
348
- const destX = typeof propX === "number" ? propX : 0;
349
- const destY = typeof propY === "number" ? propY : 0;
350
- return [
351
- { x: 0, y: 0 },
352
- { x: destX, y: destY },
353
- ];
354
- }
355
- function autoRotateSuffix(autoRotate) {
356
- if (autoRotate === true)
357
- return ", autoRotate: true";
358
- if (typeof autoRotate === "number")
359
- return `, autoRotate: ${autoRotate}`;
360
- return "";
361
- }
362
- function cubicControlPoints(seg, wp, nextWp) {
363
- if (seg.cp1 && seg.cp2) {
364
- return [`{x: ${seg.cp1.x}, y: ${seg.cp1.y}}`, `{x: ${seg.cp2.x}, y: ${seg.cp2.y}}`];
365
- }
366
- const dx = nextWp.x - wp.x;
367
- const dy = nextWp.y - wp.y;
368
- const c = seg.curviness ?? 1;
369
- return [
370
- `{x: ${wp.x + dx * 0.33}, y: ${wp.y + dy * 0.33 - c * Math.abs(dx) * 0.25}}`,
371
- `{x: ${wp.x + dx * 0.66}, y: ${wp.y + dy * 0.66 - c * Math.abs(dx) * 0.25}}`,
372
- ];
373
- }
374
- function buildCubicPathEntries(waypoints, segments) {
375
- const first = waypoints[0];
376
- if (!first)
377
- return [];
378
- const entries = [`{x: ${first.x}, y: ${first.y}}`];
379
- for (let i = 0; i < segments.length; i++) {
380
- const seg = segments[i];
381
- const wp = waypoints[i];
382
- const nextWp = waypoints[i + 1];
383
- if (!seg || !wp || !nextWp)
384
- continue;
385
- entries.push(...cubicControlPoints(seg, wp, nextWp));
386
- entries.push(`{x: ${nextWp.x}, y: ${nextWp.y}}`);
387
- }
388
- return entries;
389
- }
390
- export function buildMotionPathObjectCode(config) {
391
- const { waypoints, segments, autoRotate } = config;
392
- const arSuffix = autoRotateSuffix(autoRotate);
393
- // GSAP's simple `path` array supports only ONE scalar `curviness` for the whole
394
- // path, so per-segment curviness can only be expressed in the cubic form (each
395
- // segment's curviness baked into its control points). Emit cubic when segments
396
- // carry explicit control points OR when their curviness values differ — the
397
- // simple branch would otherwise serialize only segments[0].curviness and drop
398
- // every other segment's curve.
399
- const hasExplicitCp = segments.some((s) => s.cp1 && s.cp2);
400
- const curvinessVaries = segments.some((s) => (s.curviness ?? 1) !== (segments[0]?.curviness ?? 1));
401
- if ((hasExplicitCp || curvinessVaries) && waypoints.length >= 2) {
402
- const pathStr = buildCubicPathEntries(waypoints, segments).join(", ");
403
- return `{ path: [${pathStr}], type: "cubic"${arSuffix} }`;
404
- }
405
- const pathEntries = waypoints.map((wp) => `{x: ${wp.x}, y: ${wp.y}}`);
406
- const curviness = segments[0]?.curviness ?? 1;
407
- const curvPart = curviness !== 1 ? `, curviness: ${curviness}` : "";
408
- return `{ path: [${pathEntries.join(", ")}]${curvPart}${arSuffix} }`;
409
- }
410
- //# sourceMappingURL=gsapSerialize.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gsapSerialize.js","sourceRoot":"","sources":["../../src/parsers/gsapSerialize.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Rewrite `script` so top-level helper calls / loops that build the timeline
3
- * become explicit literal tweens. Returns the original script unchanged when
4
- * there is nothing statically-resolvable to unroll.
5
- */
6
- export declare function unrollComputedTimeline(script: string): string;
7
- //# sourceMappingURL=gsapUnroll.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gsapUnroll.d.ts","sourceRoot":"","sources":["../../src/parsers/gsapUnroll.ts"],"names":[],"mappings":"AAyGA;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAgC7D"}
@@ -1,137 +0,0 @@
1
- /**
2
- * Unroll computed GSAP timelines (helpers / bounded loops) into explicit literal
3
- * tweens — the source-rewrite behind the Studio "Unroll to edit" action.
4
- *
5
- * Strategy: the read parser already resolves each computed tween (positions,
6
- * motionPath arcs, keyframes, provenance). We serialize those resolved
7
- * animations back to literal `tl.*` statements and surgically replace the
8
- * top-level helper-call / loop statements that produced them (and drop the now
9
- * dead helper declarations) via magic-string, leaving the rest of the source —
10
- * literal tweens, comments, formatting — untouched. The result is a visual
11
- * no-op: re-parsing it yields the same animations, now all literal.
12
- *
13
- * Scope: top-level helper calls and loops (the common authoring shape). Tweens
14
- * whose origin can't be mapped to a top-level statement (e.g. helpers nested
15
- * inside other helpers) are left as-is rather than guessed at.
16
- */
17
- import * as acorn from "acorn";
18
- import MagicString from "magic-string";
19
- import { serializeValue as valueToCode, safeJsKey as safeKey } from "./gsapSerialize.js";
20
- import { parseGsapScriptAcorn } from "./gsapParserAcorn.js";
21
- function propEntries(props) {
22
- return Object.entries(props).map(([k, v]) => `${safeKey(k)}: ${valueToCode(v)}`);
23
- }
24
- function motionPathEntry(anim) {
25
- const waypoints = (anim.keyframes?.keyframes ?? [])
26
- .filter((k) => typeof k.properties.x === "number" && typeof k.properties.y === "number")
27
- .map((k) => `{ x: ${valueToCode(k.properties.x)}, y: ${valueToCode(k.properties.y)} }`);
28
- const curviness = anim.arcPath?.segments[0]?.curviness ?? 1;
29
- const autoRotate = anim.arcPath?.autoRotate;
30
- const extra = autoRotate ? `, autoRotate: ${valueToCode(autoRotate)}` : "";
31
- return `motionPath: { path: [${waypoints.join(", ")}], curviness: ${curviness}${extra} }`;
32
- }
33
- function keyframesEntry(anim) {
34
- const kfs = (anim.keyframes?.keyframes ?? []).map((k) => {
35
- const body = propEntries(k.properties);
36
- if (k.ease)
37
- body.push(`ease: ${valueToCode(k.ease)}`);
38
- return `"${k.percentage}%": { ${body.join(", ")} }`;
39
- });
40
- if (anim.keyframes?.easeEach)
41
- kfs.push(`easeEach: ${valueToCode(anim.keyframes.easeEach)}`);
42
- return `keyframes: { ${kfs.join(", ")} }`;
43
- }
44
- /** The vars-object entries for a tween: motionPath/keyframes block, props, duration, ease, extras. */
45
- function buildVarsParts(anim) {
46
- const parts = [];
47
- if (anim.arcPath?.enabled)
48
- parts.push(motionPathEntry(anim));
49
- else if (anim.keyframes)
50
- parts.push(keyframesEntry(anim));
51
- parts.push(...propEntries(anim.properties));
52
- if (anim.method !== "set" && anim.duration !== undefined) {
53
- parts.push(`duration: ${valueToCode(anim.duration)}`);
54
- }
55
- if (anim.ease)
56
- parts.push(`ease: ${valueToCode(anim.ease)}`);
57
- for (const [k, v] of Object.entries(anim.extras ?? {})) {
58
- parts.push(`${safeKey(k)}: ${valueToCode(v)}`);
59
- }
60
- return parts;
61
- }
62
- /** Serialize one resolved animation to a literal `tl.*` statement (arc/keyframe-aware). */
63
- function serializeTweenStatement(timelineVar, anim) {
64
- const obj = `{ ${buildVarsParts(anim).join(", ")} }`;
65
- const pos = valueToCode(anim.resolvedStart ?? (typeof anim.position === "number" ? anim.position : 0));
66
- const sel = valueToCode(anim.targetSelector);
67
- if (anim.method === "fromTo") {
68
- const from = `{ ${propEntries(anim.fromProperties ?? {}).join(", ")} }`;
69
- return `${timelineVar}.fromTo(${sel}, ${from}, ${obj}, ${pos});`;
70
- }
71
- return `${timelineVar}.${anim.method}(${sel}, ${obj}, ${pos});`;
72
- }
73
- /** A computed animation is one expanded from a helper or loop (not literal/dynamic). */
74
- function isComputed(anim) {
75
- return anim.provenance?.kind === "helper" || anim.provenance?.kind === "loop";
76
- }
77
- /** Top-level statements of the parsed program. */
78
- function topLevelStatements(script) {
79
- return acorn.parse(script, { ecmaVersion: "latest", sourceType: "script" }).body ?? [];
80
- }
81
- /** The top-level statement whose source span contains [start, end], or null. */
82
- function enclosingTopLevel(statements, start, end) {
83
- for (const stmt of statements) {
84
- if (stmt.start <= start && stmt.end >= end)
85
- return stmt;
86
- }
87
- return null;
88
- }
89
- function isHelperDeclNamed(stmt, names) {
90
- if (stmt.type === "FunctionDeclaration")
91
- return names.has(stmt.id?.name);
92
- if (stmt.type === "VariableDeclaration") {
93
- return (stmt.declarations ?? []).some((d) => names.has(d.id?.name));
94
- }
95
- return false;
96
- }
97
- /**
98
- * Rewrite `script` so top-level helper calls / loops that build the timeline
99
- * become explicit literal tweens. Returns the original script unchanged when
100
- * there is nothing statically-resolvable to unroll.
101
- */
102
- export function unrollComputedTimeline(script) {
103
- const parsed = parseGsapScriptAcorn(script);
104
- const computed = parsed.animations.filter((a) => isComputed(a) && a.provenance?.sourceRange);
105
- if (computed.length === 0)
106
- return script;
107
- const statements = topLevelStatements(script);
108
- // Group computed animations by the top-level statement that produced them,
109
- // preserving source order within each group.
110
- const byStatement = new Map();
111
- const helperNames = new Set();
112
- for (const anim of computed) {
113
- if (anim.provenance?.fn)
114
- helperNames.add(anim.provenance.fn);
115
- const [s, e] = anim.provenance.sourceRange;
116
- const stmt = enclosingTopLevel(statements, s, e);
117
- if (!stmt)
118
- continue; // nested origin — leave it; can't map to a top-level edit
119
- const list = byStatement.get(stmt) ?? [];
120
- list.push(anim);
121
- byStatement.set(stmt, list);
122
- }
123
- if (byStatement.size === 0)
124
- return script;
125
- const ms = new MagicString(script);
126
- for (const [stmt, anims] of byStatement) {
127
- const literals = anims.map((a) => serializeTweenStatement(parsed.timelineVar, a)).join("\n");
128
- ms.overwrite(stmt.start, stmt.end, literals);
129
- }
130
- // Drop the now-dead helper declarations.
131
- for (const stmt of statements) {
132
- if (isHelperDeclNamed(stmt, helperNames))
133
- ms.remove(stmt.start, stmt.end);
134
- }
135
- return ms.toString();
136
- }
137
- //# sourceMappingURL=gsapUnroll.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gsapUnroll.js","sourceRoot":"","sources":["../../src/parsers/gsapUnroll.ts"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- import type { TimelineElement, CanvasResolution, Keyframe, StageZoomKeyframe, CompositionVariable } from "../core.types";
2
- import type { ValidationResult } from "../core.types";
3
- export interface ParsedHtml {
4
- elements: TimelineElement[];
5
- gsapScript: string | null;
6
- styles: string | null;
7
- resolution: CanvasResolution;
8
- keyframes: Record<string, Keyframe[]>;
9
- stageZoomKeyframes: StageZoomKeyframe[];
10
- }
11
- export declare function parseHtml(html: string): ParsedHtml;
12
- export declare function updateElementInHtml(html: string, elementId: string, updates: Partial<TimelineElement>): string;
13
- export declare function addElementToHtml(html: string, element: Omit<TimelineElement, "id"> & {
14
- id?: string;
15
- }): {
16
- html: string;
17
- id: string;
18
- };
19
- export declare function removeElementFromHtml(html: string, elementId: string): string;
20
- export interface CompositionMetadata {
21
- compositionId: string | null;
22
- compositionDuration: number | null;
23
- variables: CompositionVariable[];
24
- }
25
- export declare function extractCompositionMetadata(html: string): CompositionMetadata;
26
- export declare function validateCompositionHtml(html: string): ValidationResult;
27
- //# sourceMappingURL=htmlParser.d.ts.map
@@ -1 +0,0 @@
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;AAMvB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAItD,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;AAkID,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CA+QlD;AAqFD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAChC,MAAM,CA4ER;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,CA4E9B;AAwCD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAM7E;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,CAiB5E;AA8CD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAqDtE"}