@hyperframes/sdk 0.6.113

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 (78) hide show
  1. package/LICENSE +190 -0
  2. package/dist/adapters/fs.d.ts +9 -0
  3. package/dist/adapters/fs.d.ts.map +1 -0
  4. package/dist/adapters/fs.js +122 -0
  5. package/dist/adapters/fs.js.map +1 -0
  6. package/dist/adapters/headless.d.ts +3 -0
  7. package/dist/adapters/headless.d.ts.map +1 -0
  8. package/dist/adapters/headless.js +17 -0
  9. package/dist/adapters/headless.js.map +1 -0
  10. package/dist/adapters/iframe.d.ts +102 -0
  11. package/dist/adapters/iframe.d.ts.map +1 -0
  12. package/dist/adapters/iframe.js +569 -0
  13. package/dist/adapters/iframe.js.map +1 -0
  14. package/dist/adapters/memory.d.ts +5 -0
  15. package/dist/adapters/memory.d.ts.map +1 -0
  16. package/dist/adapters/memory.js +54 -0
  17. package/dist/adapters/memory.js.map +1 -0
  18. package/dist/adapters/types.d.ts +65 -0
  19. package/dist/adapters/types.d.ts.map +1 -0
  20. package/dist/adapters/types.js +2 -0
  21. package/dist/adapters/types.js.map +1 -0
  22. package/dist/document.d.ts +25 -0
  23. package/dist/document.d.ts.map +1 -0
  24. package/dist/document.js +238 -0
  25. package/dist/document.js.map +1 -0
  26. package/dist/engine/apply-patches.d.ts +20 -0
  27. package/dist/engine/apply-patches.d.ts.map +1 -0
  28. package/dist/engine/apply-patches.js +284 -0
  29. package/dist/engine/apply-patches.js.map +1 -0
  30. package/dist/engine/cssWriter.d.ts +18 -0
  31. package/dist/engine/cssWriter.d.ts.map +1 -0
  32. package/dist/engine/cssWriter.js +139 -0
  33. package/dist/engine/cssWriter.js.map +1 -0
  34. package/dist/engine/keyframeBackfill.d.ts +17 -0
  35. package/dist/engine/keyframeBackfill.d.ts.map +1 -0
  36. package/dist/engine/keyframeBackfill.js +43 -0
  37. package/dist/engine/keyframeBackfill.js.map +1 -0
  38. package/dist/engine/model.d.ts +55 -0
  39. package/dist/engine/model.d.ts.map +1 -0
  40. package/dist/engine/model.js +256 -0
  41. package/dist/engine/model.js.map +1 -0
  42. package/dist/engine/mutate.d.ts +26 -0
  43. package/dist/engine/mutate.d.ts.map +1 -0
  44. package/dist/engine/mutate.js +1243 -0
  45. package/dist/engine/mutate.js.map +1 -0
  46. package/dist/engine/patches.d.ts +71 -0
  47. package/dist/engine/patches.d.ts.map +1 -0
  48. package/dist/engine/patches.js +197 -0
  49. package/dist/engine/patches.js.map +1 -0
  50. package/dist/engine/serialize.d.ts +15 -0
  51. package/dist/engine/serialize.d.ts.map +1 -0
  52. package/dist/engine/serialize.js +20 -0
  53. package/dist/engine/serialize.js.map +1 -0
  54. package/dist/engine/variableModel.d.ts +29 -0
  55. package/dist/engine/variableModel.d.ts.map +1 -0
  56. package/dist/engine/variableModel.js +81 -0
  57. package/dist/engine/variableModel.js.map +1 -0
  58. package/dist/history.d.ts +39 -0
  59. package/dist/history.d.ts.map +1 -0
  60. package/dist/history.js +116 -0
  61. package/dist/history.js.map +1 -0
  62. package/dist/index.d.ts +15 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +11 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/persist-queue.d.ts +24 -0
  67. package/dist/persist-queue.d.ts.map +1 -0
  68. package/dist/persist-queue.js +62 -0
  69. package/dist/persist-queue.js.map +1 -0
  70. package/dist/session.d.ts +38 -0
  71. package/dist/session.d.ts.map +1 -0
  72. package/dist/session.js +514 -0
  73. package/dist/session.js.map +1 -0
  74. package/dist/types.d.ts +521 -0
  75. package/dist/types.d.ts.map +1 -0
  76. package/dist/types.js +16 -0
  77. package/dist/types.js.map +1 -0
  78. package/package.json +55 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-patches.js","sourceRoot":"","sources":["../../src/engine/apply-patches.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Hand-rolled flat-CSS rule editor.
3
+ *
4
+ * Handles only simple flat rules (`selector { declarations }`) — no nesting,
5
+ * no @-rules, no CSS comments. Sufficient for composition <style> blocks
6
+ * generated by hyperframes, which never contain those constructs.
7
+ */
8
+ /**
9
+ * Update or insert a CSS rule.
10
+ *
11
+ * Finds the first rule whose selector matches (after whitespace normalization)
12
+ * and merges the given declarations into it. A null value removes the property.
13
+ * If no matching rule exists, appends a new one.
14
+ *
15
+ * Returns the modified CSS string. Returns `css` unchanged when nothing changed.
16
+ */
17
+ export declare function upsertCssRule(css: string, selector: string, styles: Record<string, string | null>): string;
18
+ //# sourceMappingURL=cssWriter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cssWriter.d.ts","sourceRoot":"","sources":["../../src/engine/cssWriter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAqGH;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GACpC,MAAM,CA6BR"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Hand-rolled flat-CSS rule editor.
3
+ *
4
+ * Handles only simple flat rules (`selector { declarations }`) — no nesting,
5
+ * no @-rules, no CSS comments. Sufficient for composition <style> blocks
6
+ * generated by hyperframes, which never contain those constructs.
7
+ */
8
+ // ─── Parsing ──────────────────────────────────────────────────────────────────
9
+ // fallow-ignore-next-line complexity
10
+ function parseCssRules(css) {
11
+ const rules = [];
12
+ let i = 0;
13
+ const len = css.length;
14
+ while (i < len) {
15
+ const braceOpen = css.indexOf("{", i);
16
+ if (braceOpen === -1)
17
+ break;
18
+ const selector = css.slice(i, braceOpen).trim();
19
+ if (!selector) {
20
+ i = braceOpen + 1;
21
+ continue;
22
+ }
23
+ // skip leading whitespace to get the true selector start
24
+ let selStart = i;
25
+ while (selStart < braceOpen && " \t\r\n".includes(css[selStart]))
26
+ selStart++;
27
+ // find closing }, respecting quoted strings so `content: "}"` doesn't end the rule
28
+ let j = braceOpen + 1;
29
+ let quote = null;
30
+ while (j < len) {
31
+ const ch = css[j];
32
+ if (quote) {
33
+ if (ch === "\\" && j + 1 < len)
34
+ j++; // skip escaped char
35
+ else if (ch === quote)
36
+ quote = null;
37
+ }
38
+ else if (ch === '"' || ch === "'") {
39
+ quote = ch;
40
+ }
41
+ else if (ch === "}") {
42
+ break;
43
+ }
44
+ j++;
45
+ }
46
+ rules.push({ selector, body: css.slice(braceOpen + 1, j), start: selStart, end: j + 1 });
47
+ i = j + 1;
48
+ }
49
+ return rules;
50
+ }
51
+ // fallow-ignore-next-line complexity
52
+ function parseDeclarations(body) {
53
+ const decls = {};
54
+ let depth = 0;
55
+ let quote = null;
56
+ let start = 0;
57
+ for (let i = 0; i <= body.length; i++) {
58
+ const ch = i < body.length ? body[i] : ";"; // sentinel flush
59
+ if (quote) {
60
+ if (ch === "\\") {
61
+ i++;
62
+ continue;
63
+ } // skip escaped char
64
+ if (ch === quote)
65
+ quote = null;
66
+ continue;
67
+ }
68
+ if (ch === '"' || ch === "'") {
69
+ quote = ch;
70
+ continue;
71
+ }
72
+ if (ch === "(")
73
+ depth++;
74
+ else if (ch === ")")
75
+ depth--;
76
+ else if (ch === ";" && depth === 0) {
77
+ const part = body.slice(start, i);
78
+ const colon = part.indexOf(":");
79
+ if (colon !== -1) {
80
+ const prop = part.slice(0, colon).trim();
81
+ const value = part.slice(colon + 1).trim();
82
+ if (prop && value)
83
+ decls[prop] = value;
84
+ }
85
+ start = i + 1;
86
+ }
87
+ }
88
+ return decls;
89
+ }
90
+ function serializeDeclarations(decls) {
91
+ const entries = Object.entries(decls);
92
+ if (!entries.length)
93
+ return "";
94
+ return " " + entries.map(([k, v]) => `${k}: ${v}`).join("; ") + "; ";
95
+ }
96
+ function normalizeSelector(sel) {
97
+ return sel.trim().replace(/\s+/g, " ");
98
+ }
99
+ // ─── Public API ───────────────────────────────────────────────────────────────
100
+ /**
101
+ * Update or insert a CSS rule.
102
+ *
103
+ * Finds the first rule whose selector matches (after whitespace normalization)
104
+ * and merges the given declarations into it. A null value removes the property.
105
+ * If no matching rule exists, appends a new one.
106
+ *
107
+ * Returns the modified CSS string. Returns `css` unchanged when nothing changed.
108
+ */
109
+ export function upsertCssRule(css, selector, styles) {
110
+ const normalized = normalizeSelector(selector);
111
+ const rules = parseCssRules(css);
112
+ const idx = rules.findIndex((r) => normalizeSelector(r.selector) === normalized);
113
+ if (idx !== -1) {
114
+ const rule = rules[idx];
115
+ const decls = parseDeclarations(rule.body);
116
+ for (const [prop, value] of Object.entries(styles)) {
117
+ if (value === null) {
118
+ delete decls[prop];
119
+ }
120
+ else {
121
+ decls[prop] = value;
122
+ }
123
+ }
124
+ const newRuleText = `${rule.selector} {${serializeDeclarations(decls)}}`;
125
+ return css.slice(0, rule.start) + newRuleText + css.slice(rule.end);
126
+ }
127
+ // Append new rule — skip if all values are null (nothing to write).
128
+ const newDecls = {};
129
+ for (const [prop, value] of Object.entries(styles)) {
130
+ if (value !== null)
131
+ newDecls[prop] = value;
132
+ }
133
+ if (!Object.keys(newDecls).length)
134
+ return css;
135
+ const newRuleText = `${selector} {${serializeDeclarations(newDecls)}}`;
136
+ const sep = css.length > 0 && !css.endsWith("\n") ? "\n" : "";
137
+ return css + sep + newRuleText + "\n";
138
+ }
139
+ //# sourceMappingURL=cssWriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cssWriter.js","sourceRoot":"","sources":["../../src/engine/cssWriter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Backfill defaults for add-keyframe ops.
3
+ *
4
+ * When an add-keyframe op introduces a property absent from the other keyframes,
5
+ * the writer needs a rest value to seed those keyframes with so GSAP interpolates
6
+ * instead of snapping. The SDK derives the numeric-default set here so the acorn
7
+ * writer matches the recast writer the server uses.
8
+ *
9
+ * Only props with a real numeric default get a backfill value. Defaulting an
10
+ * unknown or string-valued prop to 0 (e.g. `color: 0`, `filter: 0`) emits invalid
11
+ * GSAP, so such props are SKIPPED — the writer then leaves them out of the other
12
+ * keyframes (GSAP reads the rest value from the DOM), matching recast (which skips
13
+ * any prop whose default is null).
14
+ */
15
+ /** Derive the backfillDefaults for an add-keyframe op (numeric-default props only). */
16
+ export declare function deriveKeyframeBackfillDefaults(value: Record<string, number | string>): Record<string, number | string>;
17
+ //# sourceMappingURL=keyframeBackfill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyframeBackfill.d.ts","sourceRoot":"","sources":["../../src/engine/keyframeBackfill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAqBH,uFAAuF;AACvF,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GACrC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAOjC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Backfill defaults for add-keyframe ops.
3
+ *
4
+ * When an add-keyframe op introduces a property absent from the other keyframes,
5
+ * the writer needs a rest value to seed those keyframes with so GSAP interpolates
6
+ * instead of snapping. The SDK derives the numeric-default set here so the acorn
7
+ * writer matches the recast writer the server uses.
8
+ *
9
+ * Only props with a real numeric default get a backfill value. Defaulting an
10
+ * unknown or string-valued prop to 0 (e.g. `color: 0`, `filter: 0`) emits invalid
11
+ * GSAP, so such props are SKIPPED — the writer then leaves them out of the other
12
+ * keyframes (GSAP reads the rest value from the DOM), matching recast (which skips
13
+ * any prop whose default is null).
14
+ */
15
+ // Numeric rest values for editable transform/style props. Props absent here have
16
+ // no safe static default and are intentionally omitted from the backfill set.
17
+ //
18
+ // KEEP IN SYNC WITH packages/studio/src/hooks/gsapShared.ts:PROPERTY_DEFAULTS —
19
+ // the studio (recast) and SDK (acorn) paths must derive the same defaults or
20
+ // SDK-written keyframes drift from server-written ones (the exact bug this fixes).
21
+ // TODO: lift the canonical table into @hyperframes/core and import from both.
22
+ const KEYFRAME_PROPERTY_DEFAULTS = {
23
+ opacity: 1,
24
+ x: 0,
25
+ y: 0,
26
+ scale: 1,
27
+ scaleX: 1,
28
+ scaleY: 1,
29
+ rotation: 0,
30
+ width: 100,
31
+ height: 100,
32
+ };
33
+ /** Derive the backfillDefaults for an add-keyframe op (numeric-default props only). */
34
+ export function deriveKeyframeBackfillDefaults(value) {
35
+ const defaults = {};
36
+ for (const key of Object.keys(value)) {
37
+ const def = KEYFRAME_PROPERTY_DEFAULTS[key];
38
+ if (def !== undefined)
39
+ defaults[key] = def;
40
+ }
41
+ return defaults;
42
+ }
43
+ //# sourceMappingURL=keyframeBackfill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyframeBackfill.js","sourceRoot":"","sources":["../../src/engine/keyframeBackfill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,iFAAiF;AACjF,8EAA8E;AAC9E,EAAE;AACF,gFAAgF;AAChF,6EAA6E;AAC7E,mFAAmF;AACnF,8EAA8E;AAC9E,MAAM,0BAA0B,GAA2B;IACzD,OAAO,EAAE,CAAC;IACV,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,KAAK,EAAE,CAAC;IACR,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,CAAC;IACX,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;CACZ,CAAC;AAEF,uFAAuF;AACvF,MAAM,UAAU,8BAA8B,CAC5C,KAAsC;IAEtC,MAAM,QAAQ,GAAoC,EAAE,CAAC;IACrD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,GAAG,KAAK,SAAS;YAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAC7C,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Mutable document — linkedom Document wrapper for Phase 3 editing.
3
+ *
4
+ * The linkedom Document IS the mutable backing store. All dispatch mutations
5
+ * go here. serialize() walks the live DOM; no separate mutable tree to sync.
6
+ */
7
+ export interface ParsedDocument {
8
+ document: Document;
9
+ /** True when the input was a fragment (no <html> shell) and was wrapped. */
10
+ wrapped: boolean;
11
+ /** ensureHfIds-stamped original HTML — used as fallback / diff base. */
12
+ stamped: string;
13
+ }
14
+ export declare function parseMutable(html: string): ParsedDocument;
15
+ export declare function findById(document: Document, id: string): Element | null;
16
+ export declare function escapeHfId(id: string): string;
17
+ /**
18
+ * Resolve a bare or scoped hf-id to its DOM element.
19
+ *
20
+ * Bare id ("hf-x"): top-level document search. When the bare id is ambiguous
21
+ * (duplicated across a sub-composition and the top level), prefer the canonical
22
+ * (top-level) instance — the one whose scopedId equals the bare id — falling
23
+ * back to document order when no canonical match exists. This matches
24
+ * getElement()'s resolution rule so removeElement / getElement agree on which
25
+ * instance an ambiguous bare id targets.
26
+ *
27
+ * Scoped id ("hf-HOST/hf-LEAF", any depth): each segment narrows the search
28
+ * into the subtree of the previous match. This unambiguously addresses an
29
+ * element inside a sub-composition even when bare ids collide.
30
+ */
31
+ export declare function resolveScoped(document: Document, id: string): Element | null;
32
+ /**
33
+ * Returns true when this element starts a new sub-composition scope — i.e. it
34
+ * is a host element (has data-composition-file) and is NOT the outerHTML
35
+ * innerRoot of the SAME sub-composition (same dcf value as parent).
36
+ *
37
+ * outerHTML case: both host and innerRoot carry data-composition-file="sub.html".
38
+ * The innerRoot has the SAME value as the host (its parent) → not a new boundary.
39
+ * A genuine nested host inside a sub-comp has a DIFFERENT dcf value.
40
+ */
41
+ export declare function isNewHostBoundary(el: Element): boolean;
42
+ export declare function findRoot(document: Document): Element | null;
43
+ export declare function toCamel(prop: string): string;
44
+ export declare function getElementStyles(el: Element): Record<string, string>;
45
+ export declare function setElementStyles(el: Element, updates: Record<string, string | null>): void;
46
+ /** Read only direct (non-descendant) text node content. */
47
+ export declare function getOwnText(el: Element): string;
48
+ /** Replace only direct text nodes — preserves child elements. */
49
+ export declare function setOwnText(el: Element, text: string): void;
50
+ export declare function getStyleSheet(document: Document): string;
51
+ export declare function setStyleSheet(document: Document, css: string): void;
52
+ export declare function getGsapScript(document: Document): string | null;
53
+ export declare function setGsapScript(document: Document, newScript: string): void;
54
+ export declare function getSiblingIndex(el: Element): number;
55
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/engine/model.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,4EAA4E;IAC5E,OAAO,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAQzD;AAID,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAOvE;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE7C;AAeD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CA8B5E;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,OAAO,GAAG,OAAO,CAKtD;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,GAAG,IAAI,CAO3D;AAID,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG5C;AA4BD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAGpE;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAkB1F;AAID,2DAA2D;AAC3D,wBAAgB,UAAU,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAM9C;AAED,iEAAiE;AACjE,wBAAgB,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAoB1D;AAQD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAExD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAenE;AAcD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAG/D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAezE;AAID,wBAAgB,eAAe,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,CAInD"}
@@ -0,0 +1,256 @@
1
+ /**
2
+ * Mutable document — linkedom Document wrapper for Phase 3 editing.
3
+ *
4
+ * The linkedom Document IS the mutable backing store. All dispatch mutations
5
+ * go here. serialize() walks the live DOM; no separate mutable tree to sync.
6
+ */
7
+ import { parseHTML } from "linkedom";
8
+ import { ensureHfIds } from "@hyperframes/core/hf-ids";
9
+ export function parseMutable(html) {
10
+ const stamped = ensureHfIds(html);
11
+ const hasShell = /<!doctype|<html[\s>]/i.test(stamped);
12
+ const wrapped = !hasShell;
13
+ const { document } = wrapped
14
+ ? parseHTML(`<!DOCTYPE html><html><head></head><body>${stamped}</body></html>`)
15
+ : parseHTML(stamped);
16
+ return { document: document, wrapped, stamped };
17
+ }
18
+ // ─── Element lookup ───────────────────────────────────────────────────────────
19
+ export function findById(document, id) {
20
+ // Delegate to resolveScoped so patch replay (undo/redo, override-set apply)
21
+ // resolves an id the SAME way forward dispatch does: canonical-first for an
22
+ // ambiguous bare id, and scoped-path ("hf-host/hf-leaf") aware. Otherwise the
23
+ // two paths disagree on which duplicate a bare id targets and undo reverts the
24
+ // wrong element. (function declaration is hoisted.)
25
+ return resolveScoped(document, id);
26
+ }
27
+ export function escapeHfId(id) {
28
+ return id.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
29
+ }
30
+ /**
31
+ * True when an element lives at the top-level (canonical) scope — i.e. its
32
+ * scopedId equals its bare id because no ancestor opens a sub-composition
33
+ * boundary. This mirrors document.ts's scopedId construction (childPrefix only
34
+ * changes at isNewHostBoundary elements) without rebuilding the snapshot tree.
35
+ */
36
+ function isCanonicalScope(el) {
37
+ for (let cur = el.parentElement; cur; cur = cur.parentElement) {
38
+ if (isNewHostBoundary(cur))
39
+ return false;
40
+ }
41
+ return true;
42
+ }
43
+ /**
44
+ * Resolve a bare or scoped hf-id to its DOM element.
45
+ *
46
+ * Bare id ("hf-x"): top-level document search. When the bare id is ambiguous
47
+ * (duplicated across a sub-composition and the top level), prefer the canonical
48
+ * (top-level) instance — the one whose scopedId equals the bare id — falling
49
+ * back to document order when no canonical match exists. This matches
50
+ * getElement()'s resolution rule so removeElement / getElement agree on which
51
+ * instance an ambiguous bare id targets.
52
+ *
53
+ * Scoped id ("hf-HOST/hf-LEAF", any depth): each segment narrows the search
54
+ * into the subtree of the previous match. This unambiguously addresses an
55
+ * element inside a sub-composition even when bare ids collide.
56
+ */
57
+ export function resolveScoped(document, id) {
58
+ const parts = id.split("/");
59
+ // Bare id: prefer the canonical (top-level) match when one exists, so
60
+ // resolution agrees with getElement (scopedId === id wins over document order).
61
+ if (parts.length === 1) {
62
+ const escaped = escapeHfId(id);
63
+ const matches = Array.from(document.querySelectorAll(`[data-hf-id="${escaped}"]`));
64
+ if (matches.length > 0) {
65
+ return matches.find((el) => isCanonicalScope(el)) ?? matches[0] ?? null;
66
+ }
67
+ // Fall back to a sub-composition ROOT addressed by its composition id. A
68
+ // host element carries data-hf-id (its own leaf id) AND data-composition-id
69
+ // (the id studio passes when targeting the sub-comp root). data-hf-id takes
70
+ // precedence above; only when no hf-id matches do we treat the bare id as a
71
+ // composition id, making comp-ids first-class resolvable addresses.
72
+ return document.querySelector(`[data-composition-id="${escaped}"]`);
73
+ }
74
+ let context = document;
75
+ for (const part of parts) {
76
+ const escaped = escapeHfId(part);
77
+ const found = context === document
78
+ ? context.querySelector(`[data-hf-id="${escaped}"]`)
79
+ : context.querySelector(`[data-hf-id="${escaped}"]`);
80
+ if (!found)
81
+ return null;
82
+ context = found;
83
+ }
84
+ return context;
85
+ }
86
+ /**
87
+ * Returns true when this element starts a new sub-composition scope — i.e. it
88
+ * is a host element (has data-composition-file) and is NOT the outerHTML
89
+ * innerRoot of the SAME sub-composition (same dcf value as parent).
90
+ *
91
+ * outerHTML case: both host and innerRoot carry data-composition-file="sub.html".
92
+ * The innerRoot has the SAME value as the host (its parent) → not a new boundary.
93
+ * A genuine nested host inside a sub-comp has a DIFFERENT dcf value.
94
+ */
95
+ export function isNewHostBoundary(el) {
96
+ const dcf = el.getAttribute("data-composition-file");
97
+ if (!dcf)
98
+ return false;
99
+ const parentDcf = el.parentElement?.getAttribute("data-composition-file") ?? null;
100
+ return dcf !== parentDcf;
101
+ }
102
+ export function findRoot(document) {
103
+ return (document.querySelector("[data-hf-root]") ??
104
+ document.getElementById("stage") ??
105
+ document.body?.firstElementChild ??
106
+ null);
107
+ }
108
+ // ─── Inline style helpers ─────────────────────────────────────────────────────
109
+ export function toCamel(prop) {
110
+ if (prop.startsWith("--"))
111
+ return prop;
112
+ return prop.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
113
+ }
114
+ function toKebab(prop) {
115
+ if (prop.startsWith("--"))
116
+ return prop;
117
+ return prop.replace(/([A-Z])/g, (c) => `-${c.toLowerCase()}`);
118
+ }
119
+ /** Parse style attribute string → camelCase map (custom props kept as-is). */
120
+ function parseStyleAttr(styleAttr) {
121
+ const result = {};
122
+ for (const decl of styleAttr.split(";")) {
123
+ const idx = decl.indexOf(":");
124
+ if (idx === -1)
125
+ continue;
126
+ const rawProp = decl.slice(0, idx).trim();
127
+ const value = decl.slice(idx + 1).trim();
128
+ if (!rawProp || !value)
129
+ continue;
130
+ result[toCamel(rawProp)] = value;
131
+ }
132
+ return result;
133
+ }
134
+ /** Serialize camelCase style map → style attribute string. */
135
+ function serializeStyleAttr(styles) {
136
+ return Object.entries(styles)
137
+ .map(([k, v]) => `${toKebab(k)}: ${v}`)
138
+ .join("; ");
139
+ }
140
+ export function getElementStyles(el) {
141
+ const attr = el.getAttribute("style") ?? "";
142
+ return parseStyleAttr(attr);
143
+ }
144
+ export function setElementStyles(el, updates) {
145
+ const current = getElementStyles(el);
146
+ for (const [prop, value] of Object.entries(updates)) {
147
+ // Stored map is keyed camelCase (parseStyleAttr); custom props (--foo) stay
148
+ // verbatim. Normalize the incoming key the same way for both set and delete.
149
+ const key = toCamel(prop);
150
+ if (value === null) {
151
+ delete current[key];
152
+ }
153
+ else {
154
+ current[key] = value;
155
+ }
156
+ }
157
+ const serialized = serializeStyleAttr(current);
158
+ if (serialized) {
159
+ el.setAttribute("style", serialized);
160
+ }
161
+ else {
162
+ el.removeAttribute("style");
163
+ }
164
+ }
165
+ // ─── Text helpers ─────────────────────────────────────────────────────────────
166
+ /** Read only direct (non-descendant) text node content. */
167
+ export function getOwnText(el) {
168
+ let text = "";
169
+ el.childNodes.forEach((n) => {
170
+ if (n.nodeType === 3)
171
+ text += n.nodeValue ?? "";
172
+ });
173
+ return text;
174
+ }
175
+ /** Replace only direct text nodes — preserves child elements. */
176
+ export function setOwnText(el, text) {
177
+ const doc = el.ownerDocument;
178
+ const children = Array.from(el.childNodes);
179
+ // Track original position of the first text node so we restore there, not at firstChild.
180
+ let firstTextIdx = -1;
181
+ for (let i = 0; i < children.length; i++) {
182
+ if (children[i]?.nodeType === 3) {
183
+ firstTextIdx = i;
184
+ break;
185
+ }
186
+ }
187
+ for (const child of children) {
188
+ if (child.nodeType === 3)
189
+ el.removeChild(child);
190
+ }
191
+ if (text) {
192
+ // No text nodes before firstTextIdx (it's the first one), so index is stable.
193
+ const current = Array.from(el.childNodes);
194
+ const ref = firstTextIdx >= 0 ? (current[firstTextIdx] ?? null) : null;
195
+ el.insertBefore(doc.createTextNode(text), ref);
196
+ }
197
+ }
198
+ // ─── CSS style helpers ────────────────────────────────────────────────────────
199
+ function findStyleElement(document) {
200
+ return document.querySelector("style");
201
+ }
202
+ export function getStyleSheet(document) {
203
+ return findStyleElement(document)?.textContent ?? "";
204
+ }
205
+ export function setStyleSheet(document, css) {
206
+ const existing = findStyleElement(document);
207
+ if (!css) {
208
+ existing?.remove();
209
+ return;
210
+ }
211
+ let el = existing;
212
+ if (!el) {
213
+ el = document.createElement("style");
214
+ const head = document.querySelector("head") ??
215
+ document.body;
216
+ head.appendChild(el);
217
+ }
218
+ el.textContent = css;
219
+ }
220
+ // ─── GSAP script helpers ──────────────────────────────────────────────────────
221
+ function findGsapScriptElement(document) {
222
+ const scripts = document.querySelectorAll("script");
223
+ for (const script of Array.from(scripts)) {
224
+ const text = script.textContent ?? "";
225
+ if (text.includes("gsap") || text.includes("ScrollTrigger"))
226
+ return script;
227
+ }
228
+ return null;
229
+ }
230
+ export function getGsapScript(document) {
231
+ const el = findGsapScriptElement(document);
232
+ return el ? (el.textContent ?? "") : null;
233
+ }
234
+ export function setGsapScript(document, newScript) {
235
+ const existing = findGsapScriptElement(document);
236
+ if (!newScript) {
237
+ existing?.remove();
238
+ return;
239
+ }
240
+ let el = existing;
241
+ if (!el) {
242
+ el = document.createElement("script");
243
+ const head = document.querySelector("head") ??
244
+ document.body;
245
+ head.appendChild(el);
246
+ }
247
+ el.textContent = newScript;
248
+ }
249
+ // ─── Sibling index ────────────────────────────────────────────────────────────
250
+ export function getSiblingIndex(el) {
251
+ const parent = el.parentElement;
252
+ if (!parent)
253
+ return 0;
254
+ return Array.from(parent.children).indexOf(el);
255
+ }
256
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/engine/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Op handlers for Phase 3a (non-parser ops).
3
+ *
4
+ * Each handler: mutates the linkedom Document, returns {forward, inverse} RFC 6902 patches.
5
+ * Pure with respect to events — callers emit events from the patches.
6
+ *
7
+ * Phase 3b (parser-backed) will add setClassStyle + 7 GSAP ops as additional handlers.
8
+ */
9
+ import type { CanResult, EditOp, JsonPatchOp } from "../types.js";
10
+ import type { ParsedDocument } from "./model.js";
11
+ export interface MutationResult {
12
+ forward: JsonPatchOp[];
13
+ inverse: JsonPatchOp[];
14
+ meta?: {
15
+ animationId?: string;
16
+ newId?: string;
17
+ };
18
+ }
19
+ export declare class UnsupportedOpError extends Error {
20
+ readonly code = "E_UNSUPPORTED_OP";
21
+ constructor(opType: string);
22
+ }
23
+ export declare function applyOp(parsed: ParsedDocument, op: EditOp): MutationResult;
24
+ /** Dry-run validation — returns CanResult for the given op against current document state. */
25
+ export declare function validateOp(parsed: ParsedDocument, op: EditOp): CanResult;
26
+ //# sourceMappingURL=mutate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutate.d.ts","sourceRoot":"","sources":["../../src/engine/mutate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,MAAM,EAKN,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA6DjD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACjD;AAuDD,qBAAa,kBAAmB,SAAQ,KAAK;IAI3C,QAAQ,CAAC,IAAI,sBAAsB;gBACvB,MAAM,EAAE,MAAM;CAO3B;AAoHD,wBAAgB,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,cAAc,CAuC1E;AAulCD,8FAA8F;AAE9F,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,SAAS,CAgKxE"}