@hyperframes/core 0.6.122-alpha.0 → 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.
- package/dist/generated/runtime-inline.js +1 -1
- package/dist/generated/runtime-inline.js.map +1 -1
- package/dist/hyperframe.manifest.json +1 -1
- package/dist/hyperframe.runtime.iife.js +21 -21
- package/dist/hyperframe.runtime.mjs +21 -21
- package/dist/lint/rules/gsap.d.ts.map +1 -1
- package/dist/lint/rules/gsap.js +39 -34
- package/dist/lint/rules/gsap.js.map +1 -1
- package/dist/parsers/gsapConstants.d.ts.map +1 -1
- package/dist/parsers/gsapConstants.js +4 -1
- package/dist/parsers/gsapConstants.js.map +1 -1
- package/dist/parsers/gsapParser.d.ts +54 -0
- package/dist/parsers/gsapParser.d.ts.map +1 -1
- package/dist/parsers/gsapParser.js +348 -4
- package/dist/parsers/gsapParser.js.map +1 -1
- package/dist/parsers/gsapParserExports.d.ts +1 -0
- package/dist/parsers/gsapParserExports.d.ts.map +1 -1
- package/dist/parsers/gsapParserExports.js +4 -0
- package/dist/parsers/gsapParserExports.js.map +1 -1
- package/dist/parsers/gsapWriterAcorn.d.ts.map +1 -1
- package/dist/parsers/gsapWriterAcorn.js +107 -3
- package/dist/parsers/gsapWriterAcorn.js.map +1 -1
- package/dist/runtime/clipTree.d.ts +9 -0
- package/dist/runtime/clipTree.d.ts.map +1 -1
- package/dist/runtime/clipTree.js +12 -1
- package/dist/runtime/clipTree.js.map +1 -1
- package/dist/studio-api/helpers/sourceMutation.d.ts +4 -1
- package/dist/studio-api/helpers/sourceMutation.d.ts.map +1 -1
- package/dist/studio-api/helpers/sourceMutation.js +19 -3
- package/dist/studio-api/helpers/sourceMutation.js.map +1 -1
- package/dist/studio-api/helpers/subComposition.d.ts.map +1 -1
- package/dist/studio-api/helpers/subComposition.js +144 -5
- package/dist/studio-api/helpers/subComposition.js.map +1 -1
- package/dist/studio-api/routes/files.d.ts.map +1 -1
- package/dist/studio-api/routes/files.js +141 -16
- package/dist/studio-api/routes/files.js.map +1 -1
- package/dist/studio-api/routes/preview.d.ts.map +1 -1
- package/dist/studio-api/routes/preview.js +39 -3
- package/dist/studio-api/routes/preview.js.map +1 -1
- 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
|
|
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":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,cAAc,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAS1F,SAAS,mBAAmB,CAAC,MAAc;IACzC,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9D,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;IAC1E,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,SAAS,CAAC,2CAA2C,MAAM,gBAAgB,CAAC,CAAC,QAAQ;QAC/F,eAAe,EAAE,IAAI;KACtB,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAkB,EAAE,UAAkB,EAAE,KAAa;IACnF,MAAM,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,SAAS,EAAE,EAAE;QAC7C,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU;gBAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;QACzD,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;QACtC,IAAI,IAAkB,CAAC;QACvB,IAAI,CAAC;YACH,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAmB,EAAE,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE;YACtB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,OAAO;YAC7C,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,WAAW,KAAK,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,KAAK,MAAM,CAAC,IAAI,MAAM;gBAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,6BAA6B,CAAC,IAAwB,EAAE,QAAgB;IAC/E,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IACvC,oEAAoE;IACpE,yEAAyE;IACzE,qEAAqE;IACrE,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;IAChE,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC9C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,sEAAsE;AACtE,8EAA8E;AAC9E,0EAA0E;AAC1E,4DAA4D;AAC5D,SAAS,kBAAkB,CAAC,KAAa;IACvC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,UAAU,CAAC,QAAkB,EAAE,IAAY;IAClD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,6BAA6B,CAC3C,QAAQ,EACR,gBAAgB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAC7C,CAAC;QACF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,sEAAsE;YACtE,gEAAgE;YAChE,sCAAsC;YACtC,OAAO,CAAC,IAAI,CACV,+BAA+B,IAAI,aAAa,OAAO,CAAC,MAAM,8DAA8D,CAC7H,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,kEAAkE;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAkB,EAAE,MAA4B;IACzE,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,EAAE,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC;IACpB,CAAC;IAED,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACd,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;IACxB,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,6BAA6B,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzE,OAAO,OAAO,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAc,EAAE,MAA4B;IAChF,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpD,IAAI,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC;IAE5B,OAAO,CAAC,MAAM,EAAE,CAAC;IACjB,OAAO,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAAW;IACvC,MAAM,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,WAAW,CAAC;IACzD,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;AACvD,CAAC;AAQD,qCAAqC;AACrC,SAAS,oBAAoB,CAAC,KAAa,EAAE,QAAgB,EAAE,KAAoB;IACjF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,+EAA+E;IAC/E,sEAAsE;IACtE,8EAA8E;IAC9E,8EAA8E;IAC9E,gBAAgB;IAChB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,MAAM,KAAK,GAAG,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ;gBAAE,QAAQ,GAAG,CAAC,QAAQ,CAAC;iBAC7C,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ;gBAAE,QAAQ,GAAG,CAAC,QAAQ,CAAC;iBAClD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChC,IAAI,EAAE,KAAK,GAAG;oBAAE,KAAK,EAAE,CAAC;qBACnB,IAAI,EAAE,KAAK,GAAG;oBAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;qBAC/C,IAAI,EAAE,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC;oBAAE,MAAM;YAC5C,CAAC;YACD,CAAC,EAAE,CAAC;QACN,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1C,CAAC,EAAE,CAAC,CAAC,mBAAmB;QACxB,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,GAAG,CAAC;YAAE,SAAS;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACtB,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,GAAG,IAAI,CAAC;YAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;SACzC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACvB,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,kBAAkB,CAChC,MAAc,EACd,MAA4B,EAC5B,UAA4B;IAE5B,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,EAAE,GAAG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IACvE,MAAM,MAAM,GAAG,EAAE,CAAC;IAElB,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;YAChB,KAAK,cAAc;gBACjB,wEAAwE;gBACxE,uEAAuE;gBACvE,wEAAwE;gBACxE,yDAAyD;gBACzD,CAAC;oBACC,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBAC/C,MAAM,OAAO,GAAG,oBAAoB,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;oBACjE,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACxC,CAAC;gBACD,MAAM;YACR,KAAK,WAAW;gBACd,CAAC;oBACC,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC;oBACvF,IAAI,EAAE,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;wBACrB,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;oBAC1C,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,KAAK,gBAAgB;gBACnB,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,QAAQ,CAAC;oBAAE,MAAM;gBAChD,IAAI,EAAE,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;oBACrB,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC;wBAAE,MAAM;oBACxD,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC7C,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;gBACtC,CAAC;gBACD,MAAM;YACR,KAAK,cAAc;gBACjB,IAAI,EAAE,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;oBACrB,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC7E,MAAM,UAAU,GAAG,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;oBAClE,UAAU,CAAC,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC;gBACpC,CAAC;gBACD,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE;QAC3E,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc,EAAE,MAA4B;IAC/E,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IACjE,MAAM,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,EAAE,GAAG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/C,OAAO,EAAE,IAAI,IAAI,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;AACzC,CAAC;AAQD,SAAS,oBAAoB,CAAC,EAAW;IAKvC,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IACpE,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,WAAW;QAC1B,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC;QAC5D,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7D,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,kBAAkB,CACzB,EAAW,EACX,KAAa,EACb,QAAgB,EAChB,WAAoB;IAEpB,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACrE,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrC,EAAE,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC7E,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,kBAAkB,CAChC,MAAc,EACd,MAA4B,EAC5B,SAAiB,EACjB,KAAa,EACb,cAAoD;IAEpD,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,EAAE,GAAG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAEpF,MAAM,MAAM,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAC/B,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IACjC,gFAAgF;IAChF,kFAAkF;IAClF,iFAAiF;IACjF,mFAAmF;IACnF,IAAI,QAAQ,IAAI,CAAC,IAAI,cAAc,IAAI,cAAc,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QACnE,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC;QAC7B,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC;IACrC,CAAC;IACD,IAAI,QAAQ,IAAI,CAAC,IAAI,SAAS,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;QACzE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACvD,CAAC;IAED,IAAI,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,IAAI,GAAG,KAAK,CAAC;QACnB,OAAO,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YACtC,KAAK,GAAG,GAAG,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,SAAS,GAAG,KAAK,CAAC;IACxC,MAAM,cAAc,GAAG,QAAQ,GAAG,aAAa,CAAC;IAEhD,MAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAgB,CAAC;IAChD,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAChC,KAAK,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IACpC,4EAA4E;IAC5E,4EAA4E;IAC5E,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC;QAAE,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IAC9F,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC9E,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;IAElE,oEAAoE;IACpE,4CAA4C;IAE5C,+CAA+C;IAC/C,MAAM,iBAAiB,GAAG,EAAE,CAAC,YAAY,CAAC,qBAAqB,CAAC;QAC9D,CAAC,CAAC,qBAAqB;QACvB,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,kBAAkB,CAAC;YACnC,CAAC,CAAC,kBAAkB;YACpB,CAAC,CAAC,IAAI,CAAC;IACX,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,WAAW,GAAG,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/E,MAAM,OAAO,GAAG,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,KAAK,CAAC,YAAY,CAChB,iBAAiB,EACjB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,aAAa,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CACvE,CAAC;IACJ,CAAC;IAED,uFAAuF;IACvF,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,UAAU,EAAE,CAAC;QACf,sBAAsB,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,gFAAgF;IAChF,iFAAiF;IACjF,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACvE,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;IAE1D,8BAA8B;IAC9B,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACnB,EAAE,CAAC,aAAc,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,aAAc,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,OAAO;QACL,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE;QAC3E,OAAO,EAAE,IAAI;QACb,KAAK;KACN,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subComposition.d.ts","sourceRoot":"","sources":["../../../src/studio-api/helpers/subComposition.ts"],"names":[],"mappings":"
|
|
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
|
|
93
|
-
if (
|
|
94
|
-
const
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,uCAAuC,CAAC;
|
|
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;
|
|
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
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
if (
|
|
203
|
-
|
|
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
|
-
|
|
206
|
-
|
|
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
|
-
|
|
209
|
-
|
|
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
|
-
|
|
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;
|