@hyperframes/core 0.5.0-alpha.13 → 0.5.0-alpha.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 (71) hide show
  1. package/dist/compiler/compositionScoping.d.ts.map +1 -1
  2. package/dist/compiler/compositionScoping.js +19 -9
  3. package/dist/compiler/compositionScoping.js.map +1 -1
  4. package/dist/compiler/htmlBundler.d.ts.map +1 -1
  5. package/dist/compiler/htmlBundler.js +10 -48
  6. package/dist/compiler/htmlBundler.js.map +1 -1
  7. package/dist/compiler/htmlCompiler.d.ts.map +1 -1
  8. package/dist/compiler/htmlCompiler.js +2 -2
  9. package/dist/compiler/htmlCompiler.js.map +1 -1
  10. package/dist/compiler/htmlDocument.d.ts +10 -0
  11. package/dist/compiler/htmlDocument.d.ts.map +1 -0
  12. package/dist/compiler/htmlDocument.js +181 -0
  13. package/dist/compiler/htmlDocument.js.map +1 -0
  14. package/dist/compiler/index.d.ts +2 -1
  15. package/dist/compiler/index.d.ts.map +1 -1
  16. package/dist/compiler/index.js +2 -1
  17. package/dist/compiler/index.js.map +1 -1
  18. package/dist/compiler/timingCompiler.d.ts +2 -1
  19. package/dist/compiler/timingCompiler.d.ts.map +1 -1
  20. package/dist/compiler/timingCompiler.js +10 -3
  21. package/dist/compiler/timingCompiler.js.map +1 -1
  22. package/dist/core.types.d.ts +7 -0
  23. package/dist/core.types.d.ts.map +1 -1
  24. package/dist/core.types.js +13 -0
  25. package/dist/core.types.js.map +1 -1
  26. package/dist/generated/runtime-inline.js +1 -1
  27. package/dist/generated/runtime-inline.js.map +1 -1
  28. package/dist/hyperframe.manifest.json +1 -1
  29. package/dist/hyperframe.runtime.iife.js +37 -27
  30. package/dist/hyperframe.runtime.mjs +37 -27
  31. package/dist/index.d.ts +4 -2
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +6 -2
  34. package/dist/index.js.map +1 -1
  35. package/dist/lint/rules/composition.d.ts.map +1 -1
  36. package/dist/lint/rules/composition.js +118 -2
  37. package/dist/lint/rules/composition.js.map +1 -1
  38. package/dist/lint/rules/gsap.d.ts.map +1 -1
  39. package/dist/lint/rules/gsap.js +59 -1
  40. package/dist/lint/rules/gsap.js.map +1 -1
  41. package/dist/lint/utils.d.ts +20 -0
  42. package/dist/lint/utils.d.ts.map +1 -1
  43. package/dist/lint/utils.js +38 -0
  44. package/dist/lint/utils.js.map +1 -1
  45. package/dist/runtime/getVariables.d.ts +30 -0
  46. package/dist/runtime/getVariables.d.ts.map +1 -0
  47. package/dist/runtime/getVariables.js +69 -0
  48. package/dist/runtime/getVariables.js.map +1 -0
  49. package/dist/runtime/validateVariables.d.ts +25 -0
  50. package/dist/runtime/validateVariables.d.ts.map +1 -0
  51. package/dist/runtime/validateVariables.js +92 -0
  52. package/dist/runtime/validateVariables.js.map +1 -0
  53. package/dist/studio-api/helpers/manualEditsRenderScript.d.ts +5 -0
  54. package/dist/studio-api/helpers/manualEditsRenderScript.d.ts.map +1 -0
  55. package/dist/studio-api/helpers/manualEditsRenderScript.js +313 -0
  56. package/dist/studio-api/helpers/manualEditsRenderScript.js.map +1 -0
  57. package/dist/studio-api/helpers/screenshotClip.d.ts +8 -0
  58. package/dist/studio-api/helpers/screenshotClip.d.ts.map +1 -0
  59. package/dist/studio-api/helpers/screenshotClip.js +22 -0
  60. package/dist/studio-api/helpers/screenshotClip.js.map +1 -0
  61. package/dist/studio-api/index.d.ts +2 -0
  62. package/dist/studio-api/index.d.ts.map +1 -1
  63. package/dist/studio-api/index.js +2 -0
  64. package/dist/studio-api/index.js.map +1 -1
  65. package/dist/studio-api/routes/render.d.ts.map +1 -1
  66. package/dist/studio-api/routes/render.js +21 -37
  67. package/dist/studio-api/routes/render.js.map +1 -1
  68. package/dist/studio-api/routes/thumbnail.d.ts.map +1 -1
  69. package/dist/studio-api/routes/thumbnail.js +14 -3
  70. package/dist/studio-api/routes/thumbnail.js.map +1 -1
  71. package/package.json +13 -1
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Reads the resolved variables for the current composition.
3
+ *
4
+ * Top-level path: declared defaults from `<html data-composition-variables="...">`
5
+ * merged with `window.__hfVariables` (set at render time by the engine when
6
+ * the user passes `hyperframes render --variables '<json>'`).
7
+ *
8
+ * Sub-comp path (per-instance scoping): when called inside a sub-composition
9
+ * script wrapped by `compositionScoping.ts`, the wrapper shadows
10
+ * `__hyperframes.getVariables` with a scoped variant that returns the
11
+ * pre-merged values from `window.__hfVariablesByComp[compositionId]`. The
12
+ * loader populates that table before running scripts, layering the host
13
+ * element's `data-variable-values` over the sub-comp's declared defaults.
14
+ *
15
+ * Returns `Partial<T>` because not every declared variable is guaranteed to
16
+ * have a default, and not every key in `__hfVariables` is guaranteed to be
17
+ * declared. Callers are expected to destructure with their own fallbacks
18
+ * where strictness matters:
19
+ *
20
+ * const { title = "Untitled", theme = "light" } = getVariables<MyVars>();
21
+ */
22
+ export declare function getVariables<T extends Record<string, unknown> = Record<string, unknown>>(): Partial<T>;
23
+ /**
24
+ * Extract `{id: default}` map from an element's `data-composition-variables`
25
+ * attribute. Returns an empty object when the attribute is missing, the JSON
26
+ * is unparseable, or the payload isn't an array. Exported so the
27
+ * compositionLoader can compute the same defaults map for sub-comp instances.
28
+ */
29
+ export declare function readDeclaredDefaults(root: Element | null): Record<string, unknown>;
30
+ //# sourceMappingURL=getVariables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getVariables.d.ts","sourceRoot":"","sources":["../../src/runtime/getVariables.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAC1B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACxD,OAAO,CAAC,CAAC,CAAC,CAOd;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqBlF"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Reads the resolved variables for the current composition.
3
+ *
4
+ * Top-level path: declared defaults from `<html data-composition-variables="...">`
5
+ * merged with `window.__hfVariables` (set at render time by the engine when
6
+ * the user passes `hyperframes render --variables '<json>'`).
7
+ *
8
+ * Sub-comp path (per-instance scoping): when called inside a sub-composition
9
+ * script wrapped by `compositionScoping.ts`, the wrapper shadows
10
+ * `__hyperframes.getVariables` with a scoped variant that returns the
11
+ * pre-merged values from `window.__hfVariablesByComp[compositionId]`. The
12
+ * loader populates that table before running scripts, layering the host
13
+ * element's `data-variable-values` over the sub-comp's declared defaults.
14
+ *
15
+ * Returns `Partial<T>` because not every declared variable is guaranteed to
16
+ * have a default, and not every key in `__hfVariables` is guaranteed to be
17
+ * declared. Callers are expected to destructure with their own fallbacks
18
+ * where strictness matters:
19
+ *
20
+ * const { title = "Untitled", theme = "light" } = getVariables<MyVars>();
21
+ */
22
+ export function getVariables() {
23
+ if (typeof document === "undefined")
24
+ return {};
25
+ const declaredDefaults = readDeclaredDefaults(document.documentElement);
26
+ const overrides = readOverrides();
27
+ return { ...declaredDefaults, ...overrides };
28
+ }
29
+ /**
30
+ * Extract `{id: default}` map from an element's `data-composition-variables`
31
+ * attribute. Returns an empty object when the attribute is missing, the JSON
32
+ * is unparseable, or the payload isn't an array. Exported so the
33
+ * compositionLoader can compute the same defaults map for sub-comp instances.
34
+ */
35
+ export function readDeclaredDefaults(root) {
36
+ if (!root)
37
+ return {};
38
+ const raw = root.getAttribute("data-composition-variables");
39
+ if (!raw)
40
+ return {};
41
+ let parsed;
42
+ try {
43
+ parsed = JSON.parse(raw);
44
+ }
45
+ catch {
46
+ return {};
47
+ }
48
+ if (!Array.isArray(parsed))
49
+ return {};
50
+ const out = {};
51
+ for (const entry of parsed) {
52
+ if (!entry || typeof entry !== "object")
53
+ continue;
54
+ const e = entry;
55
+ if (typeof e.id !== "string" || !("default" in e))
56
+ continue;
57
+ out[e.id] = e.default;
58
+ }
59
+ return out;
60
+ }
61
+ function readOverrides() {
62
+ if (typeof window === "undefined")
63
+ return {};
64
+ const raw = window.__hfVariables;
65
+ if (!raw || typeof raw !== "object" || Array.isArray(raw))
66
+ return {};
67
+ return raw;
68
+ }
69
+ //# sourceMappingURL=getVariables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getVariables.js","sourceRoot":"","sources":["../../src/runtime/getVariables.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,YAAY;IAG1B,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,EAAgB,CAAC;IAE7D,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACxE,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAElC,OAAO,EAAE,GAAG,gBAAgB,EAAE,GAAG,SAAS,EAAgB,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAoB;IACvD,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,4BAA4B,CAAC,CAAC;IAC5D,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IAEpB,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IAEtC,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QAClD,MAAM,CAAC,GAAG,KAAgC,CAAC;QAC3C,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC;YAAE,SAAS;QAC5D,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;IACxB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,aAAa;IACpB,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IAC7C,MAAM,GAAG,GAAI,MAA+C,CAAC,aAAa,CAAC;IAC3E,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACrE,OAAO,GAA8B,CAAC;AACxC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { CompositionVariable } from "../core.types";
2
+ export type VariableValidationIssue = {
3
+ kind: "undeclared";
4
+ variableId: string;
5
+ } | {
6
+ kind: "type-mismatch";
7
+ variableId: string;
8
+ expected: string;
9
+ actual: string;
10
+ } | {
11
+ kind: "enum-out-of-range";
12
+ variableId: string;
13
+ allowed: string[];
14
+ actual: string;
15
+ };
16
+ /**
17
+ * Compare a flat values map (from `--variables` / `data-variable-values`) to
18
+ * the declared schema (`data-composition-variables`). Returns issues for keys
19
+ * that aren't declared, plus per-key type mismatches against the declared
20
+ * type. Pure / sync — caller decides how to surface them (warning vs render
21
+ * failure under `--strict-variables`).
22
+ */
23
+ export declare function validateVariables(values: Record<string, unknown>, declarations: readonly CompositionVariable[]): VariableValidationIssue[];
24
+ export declare function formatVariableValidationIssue(issue: VariableValidationIssue): string;
25
+ //# sourceMappingURL=validateVariables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateVariables.d.ts","sourceRoot":"","sources":["../../src/runtime/validateVariables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEzD,MAAM,MAAM,uBAAuB,GAC/B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC/E;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzF;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,YAAY,EAAE,SAAS,mBAAmB,EAAE,GAC3C,uBAAuB,EAAE,CAe3B;AA2DD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CASpF"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Compare a flat values map (from `--variables` / `data-variable-values`) to
3
+ * the declared schema (`data-composition-variables`). Returns issues for keys
4
+ * that aren't declared, plus per-key type mismatches against the declared
5
+ * type. Pure / sync — caller decides how to surface them (warning vs render
6
+ * failure under `--strict-variables`).
7
+ */
8
+ export function validateVariables(values, declarations) {
9
+ const decls = new Map();
10
+ for (const decl of declarations)
11
+ decls.set(decl.id, decl);
12
+ const issues = [];
13
+ for (const [id, value] of Object.entries(values)) {
14
+ const decl = decls.get(id);
15
+ if (!decl) {
16
+ issues.push({ kind: "undeclared", variableId: id });
17
+ continue;
18
+ }
19
+ const mismatch = checkType(value, decl);
20
+ if (mismatch)
21
+ issues.push(mismatch);
22
+ }
23
+ return issues;
24
+ }
25
+ function checkType(value, decl) {
26
+ switch (decl.type) {
27
+ case "string":
28
+ case "color":
29
+ if (typeof value !== "string") {
30
+ return {
31
+ kind: "type-mismatch",
32
+ variableId: decl.id,
33
+ expected: decl.type,
34
+ actual: jsTypeOf(value),
35
+ };
36
+ }
37
+ return null;
38
+ case "number":
39
+ if (typeof value !== "number" || !Number.isFinite(value)) {
40
+ return {
41
+ kind: "type-mismatch",
42
+ variableId: decl.id,
43
+ expected: "number",
44
+ actual: jsTypeOf(value),
45
+ };
46
+ }
47
+ return null;
48
+ case "boolean":
49
+ if (typeof value !== "boolean") {
50
+ return {
51
+ kind: "type-mismatch",
52
+ variableId: decl.id,
53
+ expected: "boolean",
54
+ actual: jsTypeOf(value),
55
+ };
56
+ }
57
+ return null;
58
+ case "enum": {
59
+ if (typeof value !== "string") {
60
+ return {
61
+ kind: "type-mismatch",
62
+ variableId: decl.id,
63
+ expected: "enum (string)",
64
+ actual: jsTypeOf(value),
65
+ };
66
+ }
67
+ const allowed = decl.options.map((o) => o.value);
68
+ if (!allowed.includes(value)) {
69
+ return { kind: "enum-out-of-range", variableId: decl.id, allowed, actual: value };
70
+ }
71
+ return null;
72
+ }
73
+ }
74
+ }
75
+ function jsTypeOf(value) {
76
+ if (value === null)
77
+ return "null";
78
+ if (Array.isArray(value))
79
+ return "array";
80
+ return typeof value;
81
+ }
82
+ export function formatVariableValidationIssue(issue) {
83
+ switch (issue.kind) {
84
+ case "undeclared":
85
+ return `Variable "${issue.variableId}" is not declared in data-composition-variables.`;
86
+ case "type-mismatch":
87
+ return `Variable "${issue.variableId}" expected ${issue.expected}, got ${issue.actual}.`;
88
+ case "enum-out-of-range":
89
+ return `Variable "${issue.variableId}" must be one of ${issue.allowed.map((v) => `"${v}"`).join(", ")} (got "${issue.actual}").`;
90
+ }
91
+ }
92
+ //# sourceMappingURL=validateVariables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validateVariables.js","sourceRoot":"","sources":["../../src/runtime/validateVariables.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface StudioManualEditsRenderScriptOptions {
2
+ activeCompositionPath?: string | null;
3
+ }
4
+ export declare function createStudioManualEditsRenderBodyScript(manifestContent: string, options?: StudioManualEditsRenderScriptOptions): string | null;
5
+ //# sourceMappingURL=manualEditsRenderScript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manualEditsRenderScript.d.ts","sourceRoot":"","sources":["../../../src/studio-api/helpers/manualEditsRenderScript.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oCAAoC;IACnD,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAED,wBAAgB,uCAAuC,CACrD,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE,oCAAyC,GACjD,MAAM,GAAG,IAAI,CAGf"}
@@ -0,0 +1,313 @@
1
+ export function createStudioManualEditsRenderBodyScript(manifestContent, options = {}) {
2
+ if (!manifestContent.trim())
3
+ return null;
4
+ return `(${studioManualEditsRenderRuntime.toString()})(${JSON.stringify(manifestContent)}, ${JSON.stringify(options.activeCompositionPath ?? null)});`;
5
+ }
6
+ function studioManualEditsRenderRuntime(manifestContent, activeCompositionPath) {
7
+ const OFFSET_X_PROP = "--hf-studio-offset-x";
8
+ const OFFSET_Y_PROP = "--hf-studio-offset-y";
9
+ const WIDTH_PROP = "--hf-studio-width";
10
+ const HEIGHT_PROP = "--hf-studio-height";
11
+ const ROTATION_PROP = "--hf-studio-rotation";
12
+ const PATH_OFFSET_ATTR = "data-hf-studio-path-offset";
13
+ const BOX_SIZE_ATTR = "data-hf-studio-box-size";
14
+ const ROTATION_ATTR = "data-hf-studio-rotation";
15
+ const ORIGINAL_TRANSLATE_ATTR = "data-hf-studio-original-translate";
16
+ const ORIGINAL_ROTATE_ATTR = "data-hf-studio-original-rotate";
17
+ const WRAPPED_SEEK_PROP = "__hfStudioManualEditsWrapped";
18
+ const ROTATION_TRANSFORM_ORIGIN = "center center";
19
+ const finiteNumber = (value) => typeof value === "number" && Number.isFinite(value) ? value : null;
20
+ const objectRecord = (value) => value && typeof value === "object" ? value : null;
21
+ const runtimeWindow = window;
22
+ const parsedManifest = (() => {
23
+ try {
24
+ return objectRecord(JSON.parse(manifestContent));
25
+ }
26
+ catch {
27
+ return null;
28
+ }
29
+ })();
30
+ const manifestEdits = Array.isArray(parsedManifest?.edits) ? parsedManifest.edits : [];
31
+ if (manifestEdits.length === 0)
32
+ return;
33
+ const sourceFileForElement = (element) => {
34
+ let current = element;
35
+ while (current) {
36
+ const sourceFile = current.getAttribute("data-composition-file") ??
37
+ current.getAttribute("data-composition-src");
38
+ if (sourceFile)
39
+ return sourceFile;
40
+ current = current.parentElement;
41
+ }
42
+ return activeCompositionPath ?? "index.html";
43
+ };
44
+ const elementMatchesSourceFile = (element, sourceFile) => sourceFileForElement(element) === sourceFile;
45
+ const styleUsesStudioOffset = (value) => value.includes(OFFSET_X_PROP) || value.includes(OFFSET_Y_PROP);
46
+ const styleUsesStudioRotation = (value) => value.includes(ROTATION_PROP);
47
+ const splitTopLevelWhitespace = (value) => {
48
+ const parts = [];
49
+ let depth = 0;
50
+ let current = "";
51
+ for (const char of value.trim()) {
52
+ if (char === "(")
53
+ depth += 1;
54
+ if (char === ")")
55
+ depth = Math.max(0, depth - 1);
56
+ if (/\s/.test(char) && depth === 0) {
57
+ if (current)
58
+ parts.push(current);
59
+ current = "";
60
+ }
61
+ else {
62
+ current += char;
63
+ }
64
+ }
65
+ if (current)
66
+ parts.push(current);
67
+ return parts;
68
+ };
69
+ const composeTranslate = (element, x, y) => {
70
+ const original = element.getAttribute(ORIGINAL_TRANSLATE_ATTR)?.trim();
71
+ if (!original || original === "none")
72
+ return `${x} ${y}`;
73
+ const parts = splitTopLevelWhitespace(original);
74
+ if (parts.length === 1)
75
+ return `calc(${parts[0]} + ${x}) ${y}`;
76
+ if (parts.length === 2)
77
+ return `calc(${parts[0]} + ${x}) calc(${parts[1]} + ${y})`;
78
+ if (parts.length === 3) {
79
+ return `calc(${parts[0]} + ${x}) calc(${parts[1]} + ${y}) ${parts[2]}`;
80
+ }
81
+ return `${x} ${y}`;
82
+ };
83
+ const readStyleOrComputed = (element, property) => {
84
+ try {
85
+ return (element.style.getPropertyValue(property) ||
86
+ getComputedStyle(element).getPropertyValue(property));
87
+ }
88
+ catch {
89
+ return element.style.getPropertyValue(property);
90
+ }
91
+ };
92
+ const readTransformLonghandBase = (element, property) => {
93
+ const value = readStyleOrComputed(element, property).trim();
94
+ return value === "none" ? "" : value;
95
+ };
96
+ const preparePathOffsetBase = (element) => {
97
+ const currentTranslate = readTransformLonghandBase(element, "translate");
98
+ const hasMarker = element.hasAttribute(PATH_OFFSET_ATTR);
99
+ const wasResetByAnimation = !styleUsesStudioOffset(currentTranslate);
100
+ if (!hasMarker) {
101
+ element.setAttribute(ORIGINAL_TRANSLATE_ATTR, wasResetByAnimation ? currentTranslate : "");
102
+ }
103
+ else if (wasResetByAnimation) {
104
+ element.setAttribute(ORIGINAL_TRANSLATE_ATTR, currentTranslate);
105
+ }
106
+ };
107
+ const prepareRotationBase = (element) => {
108
+ const currentRotate = readTransformLonghandBase(element, "rotate");
109
+ const hasMarker = element.hasAttribute(ROTATION_ATTR);
110
+ const wasResetByAnimation = !styleUsesStudioRotation(currentRotate);
111
+ if (!hasMarker) {
112
+ element.setAttribute(ORIGINAL_ROTATE_ATTR, wasResetByAnimation ? currentRotate : "");
113
+ }
114
+ else if (wasResetByAnimation) {
115
+ element.setAttribute(ORIGINAL_ROTATE_ATTR, currentRotate);
116
+ }
117
+ };
118
+ const querySelectorCandidates = (selector) => {
119
+ const isCandidate = (element) => element instanceof HTMLElement;
120
+ const className = selector.match(/^\.([A-Za-z0-9_-]+)$/)?.[1];
121
+ if (className) {
122
+ return Array.from(document.getElementsByTagName("*")).filter((element) => isCandidate(element) && element.classList.contains(className));
123
+ }
124
+ if (/^[A-Za-z][A-Za-z0-9-]*$/.test(selector)) {
125
+ return Array.from(document.getElementsByTagName(selector)).filter(isCandidate);
126
+ }
127
+ return Array.from(document.querySelectorAll(selector)).filter(isCandidate);
128
+ };
129
+ const resolveTarget = (edit) => {
130
+ const targetRecord = objectRecord(edit.target);
131
+ if (!targetRecord)
132
+ return null;
133
+ const sourceFile = typeof targetRecord.sourceFile === "string" ? targetRecord.sourceFile : "";
134
+ if (!sourceFile)
135
+ return null;
136
+ const id = typeof targetRecord.id === "string" ? targetRecord.id : "";
137
+ if (id) {
138
+ const byId = document.getElementById(id);
139
+ if (byId instanceof HTMLElement && elementMatchesSourceFile(byId, sourceFile))
140
+ return byId;
141
+ const matchesById = [
142
+ document.documentElement,
143
+ ...Array.from(document.getElementsByTagName("*")),
144
+ ].filter((element) => element instanceof HTMLElement &&
145
+ element.id === id &&
146
+ elementMatchesSourceFile(element, sourceFile));
147
+ if (matchesById[0])
148
+ return matchesById[0];
149
+ }
150
+ const selector = typeof targetRecord.selector === "string" ? targetRecord.selector : "";
151
+ if (!selector)
152
+ return null;
153
+ try {
154
+ const matches = querySelectorCandidates(selector).filter((element) => elementMatchesSourceFile(element, sourceFile));
155
+ const selectorIndex = finiteNumber(targetRecord.selectorIndex) ?? 0;
156
+ return matches[Math.max(0, Math.floor(selectorIndex))] ?? null;
157
+ }
158
+ catch {
159
+ return null;
160
+ }
161
+ };
162
+ const roundRotationAngle = (angle) => Math.round(angle * 10) / 10;
163
+ const isSimpleRotateAngle = (value) => /^-?(?:\d+(?:\.\d+)?|\.\d+)(?:deg|rad|turn|grad)$/.test(value.trim());
164
+ const composeRotation = (element, rotationValue) => {
165
+ const original = element.getAttribute(ORIGINAL_ROTATE_ATTR)?.trim();
166
+ if (!original || original === "none" || !isSimpleRotateAngle(original)) {
167
+ return rotationValue;
168
+ }
169
+ return `calc(${original} + ${rotationValue})`;
170
+ };
171
+ const applyPathOffset = (element, edit) => {
172
+ const x = finiteNumber(edit.x);
173
+ const y = finiteNumber(edit.y);
174
+ if (x == null || y == null)
175
+ return;
176
+ preparePathOffsetBase(element);
177
+ element.setAttribute(PATH_OFFSET_ATTR, "true");
178
+ element.style.setProperty(OFFSET_X_PROP, `${Math.round(x)}px`);
179
+ element.style.setProperty(OFFSET_Y_PROP, `${Math.round(y)}px`);
180
+ element.style.setProperty("translate", composeTranslate(element, `var(${OFFSET_X_PROP}, 0px)`, `var(${OFFSET_Y_PROP}, 0px)`));
181
+ };
182
+ const readParentFlexBasisPixels = (element, size) => {
183
+ const parent = element.parentElement;
184
+ if (!parent)
185
+ return null;
186
+ const styles = getComputedStyle(parent);
187
+ if (styles.display !== "flex" && styles.display !== "inline-flex")
188
+ return null;
189
+ return Math.round(Math.max(1, styles.flexDirection.startsWith("column") ? size.height : size.width));
190
+ };
191
+ const applyBoxSize = (element, edit) => {
192
+ const width = finiteNumber(edit.width);
193
+ const height = finiteNumber(edit.height);
194
+ if (width == null || height == null || width <= 0 || height <= 0)
195
+ return;
196
+ const rounded = {
197
+ width: Math.round(Math.max(1, width)),
198
+ height: Math.round(Math.max(1, height)),
199
+ };
200
+ element.setAttribute(BOX_SIZE_ATTR, "true");
201
+ element.style.setProperty(WIDTH_PROP, `${rounded.width}px`);
202
+ element.style.setProperty(HEIGHT_PROP, `${rounded.height}px`);
203
+ element.style.setProperty("box-sizing", "border-box");
204
+ element.style.setProperty("width", `${rounded.width}px`);
205
+ element.style.setProperty("height", `${rounded.height}px`);
206
+ element.style.setProperty("min-width", "0px");
207
+ element.style.setProperty("min-height", "0px");
208
+ element.style.setProperty("max-width", "none");
209
+ element.style.setProperty("max-height", "none");
210
+ const flexBasis = readParentFlexBasisPixels(element, rounded);
211
+ if (flexBasis != null) {
212
+ element.style.setProperty("flex-basis", `${flexBasis}px`);
213
+ element.style.setProperty("flex-grow", "0");
214
+ element.style.setProperty("flex-shrink", "0");
215
+ }
216
+ if (getComputedStyle(element).display === "inline") {
217
+ element.style.setProperty("display", "inline-block");
218
+ }
219
+ };
220
+ const applyRotation = (element, edit) => {
221
+ const angle = finiteNumber(edit.angle);
222
+ if (angle == null)
223
+ return;
224
+ prepareRotationBase(element);
225
+ element.setAttribute(ROTATION_ATTR, "true");
226
+ element.style.setProperty(ROTATION_PROP, `${roundRotationAngle(angle)}deg`);
227
+ element.style.setProperty("transform-origin", ROTATION_TRANSFORM_ORIGIN);
228
+ element.style.setProperty("rotate", composeRotation(element, `var(${ROTATION_PROP}, 0deg)`));
229
+ };
230
+ const applyManifest = () => {
231
+ let applied = 0;
232
+ for (const edit of manifestEdits) {
233
+ const editRecord = objectRecord(edit);
234
+ if (!editRecord)
235
+ continue;
236
+ const element = resolveTarget(editRecord);
237
+ if (!element)
238
+ continue;
239
+ if (editRecord.kind === "path-offset")
240
+ applyPathOffset(element, editRecord);
241
+ if (editRecord.kind === "box-size")
242
+ applyBoxSize(element, editRecord);
243
+ if (editRecord.kind === "rotation")
244
+ applyRotation(element, editRecord);
245
+ applied += 1;
246
+ }
247
+ return applied;
248
+ };
249
+ runtimeWindow.__hfStudioManualEditsApply = applyManifest;
250
+ const markWrapped = (fn) => {
251
+ try {
252
+ Object.defineProperty(fn, WRAPPED_SEEK_PROP, {
253
+ configurable: false,
254
+ enumerable: false,
255
+ value: true,
256
+ });
257
+ }
258
+ catch {
259
+ try {
260
+ fn[WRAPPED_SEEK_PROP] = true;
261
+ }
262
+ catch {
263
+ // Ignore non-extensible functions.
264
+ }
265
+ }
266
+ };
267
+ const isWrapped = (fn) => Boolean(fn[WRAPPED_SEEK_PROP]);
268
+ const wrapFunction = (get, set) => {
269
+ const fn = get();
270
+ if (!fn)
271
+ return false;
272
+ const seek = fn;
273
+ if (isWrapped(seek)) {
274
+ applyManifest();
275
+ return true;
276
+ }
277
+ const wrappedSeek = function (time) {
278
+ const result = seek.call(this, time);
279
+ applyManifest();
280
+ return result;
281
+ };
282
+ markWrapped(wrappedSeek);
283
+ set(wrappedSeek);
284
+ applyManifest();
285
+ return true;
286
+ };
287
+ const wrapSeekFunctions = () => {
288
+ const wrappedHfSeek = wrapFunction(() => runtimeWindow.__hf?.seek, (fn) => {
289
+ if (runtimeWindow.__hf)
290
+ runtimeWindow.__hf.seek = fn;
291
+ });
292
+ const wrappedPlayerRenderSeek = wrapFunction(() => runtimeWindow.__player?.renderSeek, (fn) => {
293
+ if (runtimeWindow.__player)
294
+ runtimeWindow.__player.renderSeek = fn;
295
+ });
296
+ return wrappedHfSeek || wrappedPlayerRenderSeek;
297
+ };
298
+ if (document.readyState === "loading") {
299
+ document.addEventListener("DOMContentLoaded", () => applyManifest(), { once: true });
300
+ }
301
+ else {
302
+ applyManifest();
303
+ }
304
+ wrapSeekFunctions();
305
+ let remainingSeekWrapAttempts = 120;
306
+ const seekWrapInterval = setInterval(() => {
307
+ wrapSeekFunctions();
308
+ remainingSeekWrapAttempts -= 1;
309
+ if (remainingSeekWrapAttempts <= 0)
310
+ clearInterval(seekWrapInterval);
311
+ }, 50);
312
+ }
313
+ //# sourceMappingURL=manualEditsRenderScript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manualEditsRenderScript.js","sourceRoot":"","sources":["../../../src/studio-api/helpers/manualEditsRenderScript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface ScreenshotClip {
2
+ x: number;
3
+ y: number;
4
+ width: number;
5
+ height: number;
6
+ }
7
+ export declare function getElementScreenshotClip(selector: string, selectorIndex?: number): ScreenshotClip | undefined;
8
+ //# sourceMappingURL=screenshotClip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshotClip.d.ts","sourceRoot":"","sources":["../../../src/studio-api/helpers/screenshotClip.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,EAChB,aAAa,CAAC,EAAE,MAAM,GACrB,cAAc,GAAG,SAAS,CAoB5B"}
@@ -0,0 +1,22 @@
1
+ export function getElementScreenshotClip(selector, selectorIndex) {
2
+ const matches = Array.from(document.querySelectorAll(selector)).filter((el) => el instanceof HTMLElement);
3
+ const safeIndex = Math.max(0, Math.min(matches.length - 1, Math.floor(selectorIndex ?? 0)));
4
+ const el = matches[safeIndex] ?? null;
5
+ if (!(el instanceof HTMLElement))
6
+ return undefined;
7
+ const rect = el.getBoundingClientRect();
8
+ if (rect.width < 4 || rect.height < 4)
9
+ return undefined;
10
+ const pad = 8;
11
+ const x = Math.max(0, rect.left - pad);
12
+ const y = Math.max(0, rect.top - pad);
13
+ const maxWidth = window.innerWidth - x;
14
+ const maxHeight = window.innerHeight - y;
15
+ return {
16
+ x,
17
+ y,
18
+ width: Math.max(1, Math.min(rect.width + pad * 2, maxWidth)),
19
+ height: Math.max(1, Math.min(rect.height + pad * 2, maxHeight)),
20
+ };
21
+ }
22
+ //# sourceMappingURL=screenshotClip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshotClip.js","sourceRoot":"","sources":["../../../src/studio-api/helpers/screenshotClip.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,wBAAwB,CACtC,QAAgB,EAChB,aAAsB;IAEtB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CACpE,CAAC,EAAE,EAAqB,EAAE,CAAC,EAAE,YAAY,WAAW,CACrD,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5F,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IACtC,IAAI,CAAC,CAAC,EAAE,YAAY,WAAW,CAAC;QAAE,OAAO,SAAS,CAAC;IACnD,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;IACxC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACxD,MAAM,GAAG,GAAG,CAAC,CAAC;IACd,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;IACzC,OAAO;QACL,CAAC;QACD,CAAC;QACD,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC5D,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;KAChE,CAAC;AACJ,CAAC"}
@@ -3,4 +3,6 @@ export type { StudioApiAdapter, ResolvedProject, RenderJobState, LintResult } fr
3
3
  export { isSafePath, walkDir } from "./helpers/safePath.js";
4
4
  export { getMimeType, MIME_TYPES } from "./helpers/mime.js";
5
5
  export { buildSubCompositionHtml } from "./helpers/subComposition.js";
6
+ export { getElementScreenshotClip, type ScreenshotClip } from "./helpers/screenshotClip.js";
7
+ export { createStudioManualEditsRenderBodyScript, type StudioManualEditsRenderScriptOptions, } from "./helpers/manualEditsRenderScript.js";
6
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/studio-api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAChG,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/studio-api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAChG,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,KAAK,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC5F,OAAO,EACL,uCAAuC,EACvC,KAAK,oCAAoC,GAC1C,MAAM,sCAAsC,CAAC"}