@hyperframes/core 0.6.121 → 0.7.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 (40) hide show
  1. package/dist/generated/runtime-inline.js +1 -1
  2. package/dist/generated/runtime-inline.js.map +1 -1
  3. package/dist/hyperframe.manifest.json +1 -1
  4. package/dist/hyperframe.runtime.iife.js +21 -21
  5. package/dist/hyperframe.runtime.mjs +21 -21
  6. package/dist/lint/rules/gsap.d.ts.map +1 -1
  7. package/dist/lint/rules/gsap.js +39 -34
  8. package/dist/lint/rules/gsap.js.map +1 -1
  9. package/dist/parsers/gsapConstants.d.ts.map +1 -1
  10. package/dist/parsers/gsapConstants.js +4 -1
  11. package/dist/parsers/gsapConstants.js.map +1 -1
  12. package/dist/parsers/gsapParser.d.ts +54 -0
  13. package/dist/parsers/gsapParser.d.ts.map +1 -1
  14. package/dist/parsers/gsapParser.js +348 -4
  15. package/dist/parsers/gsapParser.js.map +1 -1
  16. package/dist/parsers/gsapParserExports.d.ts +1 -0
  17. package/dist/parsers/gsapParserExports.d.ts.map +1 -1
  18. package/dist/parsers/gsapParserExports.js +4 -0
  19. package/dist/parsers/gsapParserExports.js.map +1 -1
  20. package/dist/parsers/gsapWriterAcorn.d.ts.map +1 -1
  21. package/dist/parsers/gsapWriterAcorn.js +107 -3
  22. package/dist/parsers/gsapWriterAcorn.js.map +1 -1
  23. package/dist/runtime/clipTree.d.ts +9 -0
  24. package/dist/runtime/clipTree.d.ts.map +1 -1
  25. package/dist/runtime/clipTree.js +12 -1
  26. package/dist/runtime/clipTree.js.map +1 -1
  27. package/dist/studio-api/helpers/sourceMutation.d.ts +4 -1
  28. package/dist/studio-api/helpers/sourceMutation.d.ts.map +1 -1
  29. package/dist/studio-api/helpers/sourceMutation.js +19 -3
  30. package/dist/studio-api/helpers/sourceMutation.js.map +1 -1
  31. package/dist/studio-api/helpers/subComposition.d.ts.map +1 -1
  32. package/dist/studio-api/helpers/subComposition.js +144 -5
  33. package/dist/studio-api/helpers/subComposition.js.map +1 -1
  34. package/dist/studio-api/routes/files.d.ts.map +1 -1
  35. package/dist/studio-api/routes/files.js +141 -16
  36. package/dist/studio-api/routes/files.js.map +1 -1
  37. package/dist/studio-api/routes/preview.d.ts.map +1 -1
  38. package/dist/studio-api/routes/preview.js +39 -3
  39. package/dist/studio-api/routes/preview.js.map +1 -1
  40. package/package.json +1 -1
@@ -263,12 +263,22 @@ function setElementDuration(el, start, duration, usesDataEnd) {
263
263
  }
264
264
  }
265
265
  // fallow-ignore-next-line complexity
266
- export function splitElementInHtml(source, target, splitTime, newId) {
266
+ export function splitElementInHtml(source, target, splitTime, newId, fallbackTiming) {
267
267
  const { document, wrappedFragment } = parseSourceDocument(source);
268
268
  const el = findTargetElement(document, target);
269
269
  if (!el || !isHTMLElement(el))
270
270
  return { html: source, matched: false, newId: null };
271
- const { start, duration, usesDataEnd } = resolveElementTiming(el);
271
+ const timing = resolveElementTiming(el);
272
+ const { usesDataEnd } = timing;
273
+ let { start, duration } = timing;
274
+ // GSAP-animated elements carry their timing in the script, not in data-* attrs,
275
+ // so the source has no authored duration. Fall back to the store's (GSAP-derived)
276
+ // range — the runtime windows visibility off data-start/data-duration regardless
277
+ // of class, so stamping both halves below makes each half show only in its window.
278
+ if (duration <= 0 && fallbackTiming && fallbackTiming.duration > 0) {
279
+ start = fallbackTiming.start;
280
+ duration = fallbackTiming.duration;
281
+ }
272
282
  if (duration <= 0 || splitTime <= start || splitTime >= start + duration) {
273
283
  return { html: source, matched: false, newId: null };
274
284
  }
@@ -284,6 +294,10 @@ export function splitElementInHtml(source, target, splitTime, newId) {
284
294
  const clone = el.cloneNode(true);
285
295
  clone.setAttribute("id", newId);
286
296
  clone.removeAttribute("data-hf-id");
297
+ // Descendants carry their own data-hf-id; leaving them duplicates the id of
298
+ // every nested node (e.g. an inner <span>), so strip them on the clone too.
299
+ for (const node of clone.querySelectorAll("[data-hf-id]"))
300
+ node.removeAttribute("data-hf-id");
287
301
  clone.setAttribute("data-start", String(Math.round(splitTime * 1000) / 1000));
288
302
  setElementDuration(clone, splitTime, secondDuration, usesDataEnd);
289
303
  // Keep the "clip" class — the runtime uses it to control visibility
@@ -305,7 +319,9 @@ export function splitElementInHtml(source, target, splitTime, newId) {
305
319
  if (originalId) {
306
320
  duplicateCssRulesForId(document, originalId, newId);
307
321
  }
308
- // Trim the original element's duration
322
+ // Trim the original element's duration. A GSAP element had no data-start; stamp
323
+ // it so the runtime windows the first half (visibility selects on [data-start]).
324
+ el.setAttribute("data-start", String(Math.round(start * 1000) / 1000));
309
325
  setElementDuration(el, start, firstDuration, usesDataEnd);
310
326
  // Insert clone after original
311
327
  if (el.nextSibling) {
@@ -1 +1 @@
1
- {"version":3,"file":"sourceMutation.js","sourceRoot":"","sources":["../../../src/studio-api/helpers/sourceMutation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sourceMutation.js","sourceRoot":"","sources":["../../../src/studio-api/helpers/sourceMutation.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"subComposition.d.ts","sourceRoot":"","sources":["../../../src/studio-api/helpers/subComposition.ts"],"names":[],"mappings":"AA8FA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAgFf"}
1
+ {"version":3,"file":"subComposition.d.ts","sourceRoot":"","sources":["../../../src/studio-api/helpers/subComposition.ts"],"names":[],"mappings":"AA4NA;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAsGf"}
@@ -2,6 +2,7 @@ import { existsSync, readFileSync } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { parseHTML } from "linkedom";
4
4
  import { rewriteAssetPaths, rewriteCssAssetUrls, rewriteInlineStyleAssetUrls, } from "../../compiler/rewriteSubCompPaths.js";
5
+ import { stripEmbeddedRuntimeScripts } from "../../compiler/htmlDocument.js";
5
6
  /**
6
7
  * Detect whether `html` is a full document (has `<html>`, `<head>`, or
7
8
  * `<!doctype`), as opposed to a `<template>`-wrapped fragment.
@@ -22,6 +23,57 @@ function rewriteRelativePaths(root, compPath) {
22
23
  styleEl.textContent = rewriteCssAssetUrls(styleEl.textContent || "", compPath);
23
24
  }
24
25
  }
26
+ /**
27
+ * Escape a CSS identifier whose first character is a digit so it is a valid
28
+ * selector. A CSS ident cannot start with a digit, so it must be written as an
29
+ * escaped code point: `01-foo` → `\30 1-foo` (leading `0` → `\30 `, rest kept).
30
+ *
31
+ * Only the leading digit needs escaping (per CSS Syntax Level 3 §4.3.11): once
32
+ * the parser consumes the `\<hex> ` escape, the rest of the ident continues
33
+ * normally, so `123-scene` → `\31 23-scene` is valid (the `23-scene` tail is
34
+ * consumed as identifier continuation). The trailing space terminates the hex
35
+ * escape so a following hex digit isn't folded into the code point.
36
+ */
37
+ function escapeLeadingDigitIdent(id) {
38
+ return `\\${id.charCodeAt(0).toString(16)} ${id.slice(1)}`;
39
+ }
40
+ const REGEXP_SPECIALS = /[.*+?^${}()|[\]\\]/g;
41
+ /**
42
+ * Fix `#<digit-leading-id>` selectors in the tree's `<style>` blocks.
43
+ *
44
+ * CSS identifiers cannot start with a digit, so an authored rule like
45
+ * `#01-wall-pushes-back { width: 1920px; height: 1080px; background: #F0EBDE }`
46
+ * is an invalid selector and the browser silently drops the WHOLE rule — taking
47
+ * the root's size and background with it. In a full composition the frame is
48
+ * stretched/painted by its `data-composition-src` host so the collapse is
49
+ * masked, but a standalone preview has no host: the root falls back to
50
+ * `height: 0` + transparent and the frame renders blank (black).
51
+ *
52
+ * Rewrite each such selector to its escaped, valid form (`#\30 1-wall-pushes-back`,
53
+ * which still matches `id="01-wall-pushes-back"`) so the rule applies and the
54
+ * whole declaration block — size, background, position, container-type — comes
55
+ * back. Scoped to ids that are actually present on elements in the content and
56
+ * matched only as `#id` not followed by another ident char, so hex colors
57
+ * (`#1F2BE0`) and other values are never touched (they are not element ids).
58
+ */
59
+ function fixDigitLeadingIdSelectors(root) {
60
+ const digitIds = new Set();
61
+ for (const el of root.querySelectorAll("[id]")) {
62
+ const id = el.getAttribute("id");
63
+ if (id && /^\d/.test(id))
64
+ digitIds.add(id);
65
+ }
66
+ if (digitIds.size === 0)
67
+ return;
68
+ for (const styleEl of root.querySelectorAll("style")) {
69
+ let css = styleEl.textContent || "";
70
+ for (const id of digitIds) {
71
+ const pattern = new RegExp(`#${id.replace(REGEXP_SPECIALS, "\\$&")}(?![\\w-])`, "g");
72
+ css = css.replace(pattern, `#${escapeLeadingDigitIdent(id)}`);
73
+ }
74
+ styleEl.textContent = css;
75
+ }
76
+ }
25
77
  /**
26
78
  * Parse a full HTML document and extract its head elements and body
27
79
  * content separately, so they can be reassembled into a clean standalone
@@ -42,6 +94,9 @@ function extractFullDocumentParts(rawHtml, compPath) {
42
94
  for (const target of rewriteTargets) {
43
95
  rewriteRelativePaths(target, compPath);
44
96
  }
97
+ // Run on the whole document: ids live in <body> but their rules may live in
98
+ // a <head> <style>, so the scope must span both.
99
+ fixDigitLeadingIdSelectors(doc);
45
100
  const headContent = doc.head?.innerHTML ?? "";
46
101
  const bodyContent = doc.body?.innerHTML ?? "";
47
102
  const htmlEl = doc.documentElement;
@@ -49,6 +104,25 @@ function extractFullDocumentParts(rawHtml, compPath) {
49
104
  const bodyAttrs = doc.body ? extractElementAttrs(doc.body) : "";
50
105
  return { headContent, bodyContent, htmlAttrs, bodyAttrs };
51
106
  }
107
+ /**
108
+ * Extract the inner HTML of the composition's wrapping `<template>` element, or
109
+ * `null` if the source has no `<template>`.
110
+ *
111
+ * Located via the DOM rather than a regex. A greedy
112
+ * `/<template[^>]*>([\s\S]*)<\/template>/` can latch onto a literal
113
+ * `"<template>"` that appears inside an HTML comment — e.g. a head note such as
114
+ * "the HF runtime clones ONLY <template> contents" — and mis-slice the capture,
115
+ * leaving the real composition content re-wrapped in an inert `<template>` in
116
+ * the output. That template is never rendered by the browser, so the standalone
117
+ * preview has no `[data-composition-id]` element and no registered timeline, and
118
+ * renders blank. `querySelector("template")` only ever matches a real element
119
+ * node, so comment text can't fool it.
120
+ */
121
+ function extractTemplateInnerHtml(rawComp) {
122
+ const { document: doc } = parseHTML(rawComp);
123
+ const template = doc.querySelector("template");
124
+ return template ? template.innerHTML : null;
125
+ }
52
126
  function extractElementAttrs(el) {
53
127
  const parts = [];
54
128
  for (let i = 0; i < el.attributes.length; i++) {
@@ -62,6 +136,52 @@ function extractElementAttrs(el) {
62
136
  }
63
137
  return parts.join(" ");
64
138
  }
139
+ const NON_RENDERED_TAGS = new Set(["SCRIPT", "STYLE", "LINK", "META", "TEMPLATE", "NOSCRIPT"]);
140
+ /**
141
+ * Carry the `<template>`'s `data-composition-id` onto the content's root
142
+ * rendered element when the author declared it only on the `<template>` tag.
143
+ *
144
+ * In a full composition, each sub-composition is mounted under a wrapper
145
+ * element (the `data-composition-src` host) that carries the composition id,
146
+ * which is how the runtime binds `window.__timelines[id]` into the player's
147
+ * master timeline. A standalone preview has no such wrapper, so it relies on
148
+ * the frame's own root element carrying `data-composition-id`. If the id lives
149
+ * only on the inert `<template>` tag (a common authoring pattern), the rendered
150
+ * body has no `[data-composition-id]` element — the runtime then never selects
151
+ * a root composition, the registered GSAP timeline stays unbound, and seeking
152
+ * does nothing. The frame renders at its pre-animation state (GSAP `fromTo`
153
+ * pins `opacity:0`), producing a blank preview/thumbnail.
154
+ *
155
+ * This is a no-op when the content already exposes a `[data-composition-id]`
156
+ * element (e.g. the id is authored on the root div), so compositions that
157
+ * already render correctly are untouched.
158
+ */
159
+ function promoteTemplateCompositionId(rawComp, body) {
160
+ const templateCompositionId = rawComp.match(/<template[^>]*\sdata-composition-id\s*=\s*["']([^"']+)["']/i)?.[1];
161
+ if (!templateCompositionId)
162
+ return;
163
+ if (body.querySelector("[data-composition-id]"))
164
+ return;
165
+ const root = Array.from(body.children).find((el) => !NON_RENDERED_TAGS.has(el.tagName));
166
+ root?.setAttribute("data-composition-id", templateCompositionId);
167
+ }
168
+ /**
169
+ * Add `data-composition-file="<compPath>"` to the comp's root composition
170
+ * element (the first `[data-composition-id]` that lacks the attribute), so the
171
+ * studio resolves its top-level elements to the right source file. Idempotent;
172
+ * a no-op when no composition element is present.
173
+ */
174
+ function tagRootCompositionFile(bodyHtml, compPath) {
175
+ const match = bodyHtml.match(/<[a-zA-Z][^>]*\bdata-composition-id=/);
176
+ if (match?.index == null)
177
+ return bodyHtml;
178
+ const tagEnd = bodyHtml.indexOf(">", match.index);
179
+ if (tagEnd === -1)
180
+ return bodyHtml;
181
+ if (bodyHtml.slice(match.index, tagEnd).includes("data-composition-file"))
182
+ return bodyHtml;
183
+ return (bodyHtml.slice(0, tagEnd) + ` data-composition-file="${compPath}"` + bodyHtml.slice(tagEnd));
184
+ }
65
185
  /**
66
186
  * Build a standalone HTML page for a sub-composition.
67
187
  *
@@ -89,12 +209,13 @@ export function buildSubCompositionHtml(projectDir, compPath, runtimeUrl, baseHr
89
209
  let rewrittenContent;
90
210
  let htmlAttrs = "";
91
211
  let bodyAttrs = "";
92
- const templateMatch = rawComp.match(/<template[^>]*>([\s\S]*)<\/template>/i);
93
- if (templateMatch) {
94
- const content = templateMatch[1];
95
- const { document: contentDoc } = parseHTML(`<!DOCTYPE html><html><head></head><body>${content}</body></html>`);
212
+ const templateInner = extractTemplateInnerHtml(rawComp);
213
+ if (templateInner != null) {
214
+ const { document: contentDoc } = parseHTML(`<!DOCTYPE html><html><head></head><body>${templateInner}</body></html>`);
96
215
  rewriteRelativePaths(contentDoc, compPath);
97
- rewrittenContent = contentDoc.body.innerHTML || content;
216
+ fixDigitLeadingIdSelectors(contentDoc);
217
+ promoteTemplateCompositionId(rawComp, contentDoc.body);
218
+ rewrittenContent = contentDoc.body.innerHTML || templateInner;
98
219
  }
99
220
  else if (isFullHtmlDocument(rawComp)) {
100
221
  const parts = extractFullDocumentParts(rawComp, compPath);
@@ -106,8 +227,22 @@ export function buildSubCompositionHtml(projectDir, compPath, runtimeUrl, baseHr
106
227
  else {
107
228
  const { document: contentDoc } = parseHTML(`<!DOCTYPE html><html><head></head><body>${rawComp}</body></html>`);
108
229
  rewriteRelativePaths(contentDoc, compPath);
230
+ fixDigitLeadingIdSelectors(contentDoc);
109
231
  rewrittenContent = contentDoc.body.innerHTML || rawComp;
110
232
  }
233
+ // A composition file may ship a baked inline runtime (from a prior export:
234
+ // data-hyperframes-runtime / __hyperframeRuntime…). The studio injects its own
235
+ // preview runtime below, so strip the baked one from the body — otherwise it's
236
+ // double-loaded AND the baked inline copy can fail to parse inline (the
237
+ // "Unexpected token '<'" SyntaxError seen on comps with a baked runtime).
238
+ rewrittenContent = stripEmbeddedRuntimeScripts(rewrittenContent);
239
+ // The comp's root carries data-composition-id but (unlike inlined sub-comps,
240
+ // which inlineSubCompositions tags) no data-composition-file. Without it the
241
+ // studio can't resolve which file this comp's top-level elements live in and
242
+ // falls back to "index.html" — so the GSAP panel parses the project root (which
243
+ // may be a multi-timeline master) and wrongly reports "multiple timelines",
244
+ // disabling editing for a single-timeline comp. Tag the root with its own path.
245
+ rewrittenContent = tagRootCompositionFile(rewrittenContent, compPath);
111
246
  // Use the project's index.html <head> to preserve all dependencies
112
247
  const indexPath = join(projectDir, "index.html");
113
248
  let headContent = "";
@@ -125,6 +260,10 @@ export function buildSubCompositionHtml(projectDir, compPath, runtimeUrl, baseHr
125
260
  // the composition's deps take precedence (last-write-wins for scripts).
126
261
  if (compHeadContent)
127
262
  headContent += `\n${compHeadContent}`;
263
+ // Strip any baked runtime the borrowed index/comp <head> carried, for the same
264
+ // reason as the body above — done before injecting the preview runtime so the
265
+ // injected tag (added next) is never removed.
266
+ headContent = stripEmbeddedRuntimeScripts(headContent);
128
267
  // Ensure runtime is present (might differ from the one in index.html)
129
268
  if (!headContent.includes("hyperframe.runtime") &&
130
269
  !headContent.includes("hyperframes-preview-runtime")) {
@@ -1 +1 @@
1
- {"version":3,"file":"subComposition.js","sourceRoot":"","sources":["../../../src/studio-api/helpers/subComposition.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subComposition.js","sourceRoot":"","sources":["../../../src/studio-api/helpers/subComposition.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../src/studio-api/routes/files.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAcjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAooCpD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAyY7E"}
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../src/studio-api/routes/files.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAcjC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA6xCpD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAyZ7E"}
@@ -7,6 +7,7 @@ import { validateUploadedMediaBuffer } from "../helpers/mediaValidation.js";
7
7
  import { isSafePath, resolveWithinProject } from "../helpers/safePath.js";
8
8
  import { backupPathForResponse, snapshotBeforeWrite } from "../helpers/backupJournal.js";
9
9
  import { findUnsafeDomPatchValues, findUnsafeMutationValues, } from "../helpers/finiteMutation.js";
10
+ import { classifyPropertyGroup } from "../../parsers/gsapConstants.js";
10
11
  import { parseGsapScriptAcorn } from "../../parsers/gsapParserAcorn.js";
11
12
  import { unrollComputedTimeline } from "../../parsers/gsapUnroll.js";
12
13
  import { updateAnimationInScript, addAnimationToScript, removeAnimationFromScript, addKeyframeToScript, removeKeyframeFromScript, updateKeyframeInScript, convertToKeyframesFromScript, removeAllKeyframesFromScript, materializeKeyframesFromScript, unrollDynamicAnimations, setArcPathInScript, updateArcSegmentInScript, removeArcPathFromScript, addAnimationWithKeyframesToScript, splitAnimationsInScript, splitIntoPropertyGroupsFromScript, shiftPositionsInScript, scalePositionsInScript, } from "../../parsers/gsapWriterAcorn.js";
@@ -191,24 +192,54 @@ function stripStudioEditsFromTarget(document, selector) {
191
192
  let stripped = 0;
192
193
  try {
193
194
  for (const el of document.querySelectorAll(selector)) {
194
- if (!el.getAttribute("data-hf-studio-path-offset"))
195
- continue;
196
195
  if (!isHTMLElement(el))
197
196
  continue;
198
197
  const htmlEl = el;
199
- const originalTranslate = el.getAttribute("data-hf-studio-original-inline-translate");
200
- htmlEl.style.removeProperty("--hf-studio-offset-x");
201
- htmlEl.style.removeProperty("--hf-studio-offset-y");
202
- if (originalTranslate) {
203
- htmlEl.style.setProperty("translate", originalTranslate);
198
+ let touched = false;
199
+ // Manual path offset (--hf-studio-offset / translate) — a GSAP position tween
200
+ // now owns position, so the stale offset channel must go.
201
+ if (el.getAttribute("data-hf-studio-path-offset")) {
202
+ const originalTranslate = el.getAttribute("data-hf-studio-original-inline-translate");
203
+ htmlEl.style.removeProperty("--hf-studio-offset-x");
204
+ htmlEl.style.removeProperty("--hf-studio-offset-y");
205
+ if (originalTranslate) {
206
+ htmlEl.style.setProperty("translate", originalTranslate);
207
+ }
208
+ else {
209
+ htmlEl.style.removeProperty("translate");
210
+ }
211
+ el.removeAttribute("data-hf-studio-path-offset");
212
+ el.removeAttribute("data-hf-studio-original-translate");
213
+ el.removeAttribute("data-hf-studio-original-inline-translate");
214
+ touched = true;
204
215
  }
205
- else {
206
- htmlEl.style.removeProperty("translate");
216
+ // Manual rotation (--hf-studio-rotation / rotate) — likewise, a GSAP rotation
217
+ // set/tween now owns rotation, so clear the legacy CSS-var channel.
218
+ if (el.getAttribute("data-hf-studio-rotation")) {
219
+ const originalRotate = el.getAttribute("data-hf-studio-original-inline-rotate");
220
+ const originalOrigin = el.getAttribute("data-hf-studio-original-rotation-transform-origin");
221
+ htmlEl.style.removeProperty("--hf-studio-rotation");
222
+ if (originalRotate) {
223
+ htmlEl.style.setProperty("rotate", originalRotate);
224
+ }
225
+ else {
226
+ htmlEl.style.removeProperty("rotate");
227
+ }
228
+ if (originalOrigin) {
229
+ htmlEl.style.setProperty("transform-origin", originalOrigin);
230
+ }
231
+ else {
232
+ htmlEl.style.removeProperty("transform-origin");
233
+ }
234
+ el.removeAttribute("data-hf-studio-rotation");
235
+ el.removeAttribute("data-hf-studio-rotation-draft");
236
+ el.removeAttribute("data-hf-studio-original-rotate");
237
+ el.removeAttribute("data-hf-studio-original-inline-rotate");
238
+ el.removeAttribute("data-hf-studio-original-rotation-transform-origin");
239
+ touched = true;
207
240
  }
208
- el.removeAttribute("data-hf-studio-path-offset");
209
- el.removeAttribute("data-hf-studio-original-translate");
210
- el.removeAttribute("data-hf-studio-original-inline-translate");
211
- stripped++;
241
+ if (touched)
242
+ stripped++;
212
243
  }
213
244
  }
214
245
  catch {
@@ -216,6 +247,20 @@ function stripStudioEditsFromTarget(document, selector) {
216
247
  }
217
248
  return stripped;
218
249
  }
250
+ // A studio path-offset (--hf-studio-offset / data-hf-studio-path-offset) and a GSAP
251
+ // position tween both drive translate — keeping both stacks the offsets (a gesture or
252
+ // drag recorded over a stale offset plays shoved off-position). When a committed tween
253
+ // writes a position property, the tween owns position, so the stale offset must go.
254
+ function keyframesWritePosition(keyframes) {
255
+ return keyframes.some((kf) => Object.keys(kf.properties).some((k) => classifyPropertyGroup(k) === "position"));
256
+ }
257
+ // A studio rotation edit (--hf-studio-rotation / data-hf-studio-rotation) and a GSAP
258
+ // rotation tween both drive rotate — keeping both stacks them. When a committed keyframe
259
+ // set writes a rotation property, the tween owns rotation, so the stale CSS-var channel
260
+ // must go (the position twin of this is `keyframesWritePosition`).
261
+ function keyframesWriteRotation(keyframes) {
262
+ return keyframes.some((kf) => Object.keys(kf.properties).some((k) => classifyPropertyGroup(k) === "rotation"));
263
+ }
219
264
  function lastKeyframeOpacity(kfs) {
220
265
  if (!kfs)
221
266
  return undefined;
@@ -250,6 +295,40 @@ function bakeVisibilityOnDelete(document, anim) {
250
295
  // Invalid selector — skip silently.
251
296
  }
252
297
  }
298
+ // Mutations that can change a position tween's first keyframe (value/existence/timing)
299
+ // and therefore require the pre-keyframe hold-`set`s to be re-synced afterwards.
300
+ // `syncPositionHoldsBeforeKeyframes` rebuilds all `hf-hold` sets from scratch: it acts
301
+ // on every tween that has keyframes whose first percentage carries a position prop and
302
+ // whose start is > 0. So any mutation that creates such a tween, retargets it, or moves
303
+ // its start across the t=0 boundary must trigger a re-sync.
304
+ const HOLD_SYNC_MUTATION_TYPES = new Set([
305
+ "add-keyframe",
306
+ "update-keyframe",
307
+ "remove-keyframe",
308
+ "remove-all-keyframes",
309
+ "add-with-keyframes",
310
+ "replace-with-keyframes",
311
+ "convert-to-keyframes",
312
+ "materialize-keyframes",
313
+ "update-motion-path-point",
314
+ "add-motion-path-point",
315
+ "remove-motion-path-point",
316
+ // Authors a fresh motionPath tween whose parsed first keyframe is (0,0); if it lands
317
+ // at position > 0 the element snaps home at t=0 without a pre-tween hold-`set`.
318
+ "add-motion-path",
319
+ // Can move a tween's `position` (start) across the t=0 boundary, which flips whether a
320
+ // keyframed position tween needs a hold (started at 0 → moved later, or vice versa).
321
+ "update-meta",
322
+ // Time-shift / time-scale tweens, which can move a keyframed position tween's start
323
+ // across t=0, flipping hold need; stale holds are not repositioned by these ops.
324
+ "shift-positions",
325
+ "scale-positions",
326
+ // Retargets keyframed position tweens to a cloned element's selector; the old hold is
327
+ // keyed to the prior selector, so holds must be rebuilt for the new target.
328
+ "split-animations",
329
+ "delete",
330
+ "delete-all-for-selector",
331
+ ]);
253
332
  async function executeGsapMutation(body, block, respond) {
254
333
  // When the server cutover flag is enabled, delegate to the acorn writer;
255
334
  // otherwise use the recast writer (gsapParser.ts) as the default.
@@ -461,7 +540,7 @@ function executeGsapMutationAcorn(body, block, respond) {
461
540
  }
462
541
  async function executeGsapMutationRecast(body, block, respond) {
463
542
  const parser = await loadGsapParser();
464
- const { updateAnimationInScript, addAnimationToScript, removeAnimationFromScript, addKeyframeToScript, removeKeyframeFromScript, updateKeyframeInScript, convertToKeyframesInScript, removeAllKeyframesFromScript, materializeKeyframesInScript, unrollDynamicAnimations, setArcPathInScript, updateArcSegmentInScript, removeArcPathFromScript, addAnimationWithKeyframesToScript, splitAnimationsInScript, splitIntoPropertyGroups, } = parser;
543
+ const { updateAnimationInScript, addAnimationToScript, removeAnimationFromScript, addKeyframeToScript, removeKeyframeFromScript, updateKeyframeInScript, convertToKeyframesInScript, removeAllKeyframesFromScript, materializeKeyframesInScript, unrollDynamicAnimations, setArcPathInScript, updateArcSegmentInScript, updateMotionPathPointInScript, addMotionPathPointInScript, removeMotionPathPointInScript, addMotionPathToScript, removeArcPathFromScript, addAnimationWithKeyframesToScript, splitAnimationsInScript, splitIntoPropertyGroups, } = parser;
465
544
  function requireAnimation(scriptText, animationId) {
466
545
  const parsed = parseGsapScriptAcorn(scriptText);
467
546
  const anim = parsed.animations.find((a) => a.id === animationId);
@@ -505,6 +584,15 @@ async function executeGsapMutationRecast(body, block, respond) {
505
584
  if (body.fromProperties && body.method !== "fromTo") {
506
585
  return respond({ error: "fromProperties is only valid for method=fromTo" }, 400);
507
586
  }
587
+ // A new position/rotation animation owns that channel — strip the matching
588
+ // legacy studio CSS var (--hf-studio-offset / --hf-studio-rotation) so it can't
589
+ // double with the tween, matching add-with-keyframes/replace-with-keyframes.
590
+ if (Object.keys(body.properties).some((k) => {
591
+ const group = classifyPropertyGroup(k);
592
+ return group === "position" || group === "rotation";
593
+ })) {
594
+ stripStudioEditsFromTarget(block.document, body.targetSelector);
595
+ }
508
596
  const result = addAnimationToScript(block.scriptText, {
509
597
  targetSelector: body.targetSelector,
510
598
  method: body.method,
@@ -595,14 +683,39 @@ async function executeGsapMutationRecast(body, block, respond) {
595
683
  ...(body.cp2 ? { cp2: body.cp2 } : {}),
596
684
  });
597
685
  }
686
+ case "update-motion-path-point": {
687
+ return updateMotionPathPointInScript(block.scriptText, body.animationId, body.pointIndex, {
688
+ x: body.x,
689
+ y: body.y,
690
+ });
691
+ }
692
+ case "add-motion-path-point": {
693
+ return addMotionPathPointInScript(block.scriptText, body.animationId, body.index, {
694
+ x: body.x,
695
+ y: body.y,
696
+ });
697
+ }
698
+ case "remove-motion-path-point": {
699
+ return removeMotionPathPointInScript(block.scriptText, body.animationId, body.index);
700
+ }
701
+ case "add-motion-path": {
702
+ const result = addMotionPathToScript(block.scriptText, body.targetSelector, body.position, body.duration, { x: body.x, y: body.y }, body.ease);
703
+ return result.script;
704
+ }
598
705
  case "remove-arc-path": {
599
706
  return removeArcPathFromScript(block.scriptText, body.animationId);
600
707
  }
601
708
  case "add-with-keyframes": {
709
+ if (keyframesWritePosition(body.keyframes) || keyframesWriteRotation(body.keyframes)) {
710
+ stripStudioEditsFromTarget(block.document, body.targetSelector);
711
+ }
602
712
  const result = addAnimationWithKeyframesToScript(block.scriptText, body.targetSelector, body.position, body.duration, body.keyframes, body.ease);
603
713
  return result.script;
604
714
  }
605
715
  case "replace-with-keyframes": {
716
+ if (keyframesWritePosition(body.keyframes) || keyframesWriteRotation(body.keyframes)) {
717
+ stripStudioEditsFromTarget(block.document, body.targetSelector);
718
+ }
606
719
  const script = removeAnimationFromScript(block.scriptText, body.animationId);
607
720
  const added = addAnimationWithKeyframesToScript(script, body.targetSelector, body.position, body.duration, body.keyframes, body.ease);
608
721
  return added.script;
@@ -811,6 +924,10 @@ export function registerFileRoutes(api, adapter) {
811
924
  if (typeof parsed.body.splitTime !== "number" || !parsed.body.newId) {
812
925
  return c.json({ error: "target, splitTime, and newId required" }, 400);
813
926
  }
927
+ const fallbackTiming = typeof parsed.body.elementStart === "number" &&
928
+ typeof parsed.body.elementDuration === "number"
929
+ ? { start: parsed.body.elementStart, duration: parsed.body.elementDuration }
930
+ : undefined;
814
931
  let originalContent;
815
932
  try {
816
933
  originalContent = readFileSync(ctx.absPath, "utf-8");
@@ -818,7 +935,7 @@ export function registerFileRoutes(api, adapter) {
818
935
  catch {
819
936
  return c.json({ error: "not found" }, 404);
820
937
  }
821
- const result = splitElementInHtml(originalContent, parsed.target, parsed.body.splitTime, parsed.body.newId);
938
+ const result = splitElementInHtml(originalContent, parsed.target, parsed.body.splitTime, parsed.body.newId, fallbackTiming);
822
939
  if (!result.matched) {
823
940
  return c.json({ ok: false, changed: false, content: originalContent, path: ctx.filePath });
824
941
  }
@@ -1026,7 +1143,15 @@ export function registerFileRoutes(api, adapter) {
1026
1143
  const result = await executeGsapMutation(body, block, respond);
1027
1144
  if (result instanceof Response)
1028
1145
  return result;
1029
- const newScript = typeof result === "string" ? result : result.script;
1146
+ let newScript = typeof result === "string" ? result : result.script;
1147
+ // Keep the "hold before first keyframe" sets in sync after any mutation that can
1148
+ // change a position tween's first keyframe or its existence. Without it, an
1149
+ // element snaps to its CSS base before the tween starts instead of holding its
1150
+ // first keyframe (the universal NLE behavior).
1151
+ if (HOLD_SYNC_MUTATION_TYPES.has(body.type)) {
1152
+ const parser = await loadGsapParser();
1153
+ newScript = parser.syncPositionHoldsBeforeKeyframes(newScript);
1154
+ }
1030
1155
  const changed = newScript !== block.scriptText;
1031
1156
  const newHtml = changed ? block.replaceScript(newScript) : html;
1032
1157
  let backupPath = null;