@hyperframes/core 0.7.44 → 0.7.46

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.
@@ -0,0 +1,186 @@
1
+ /**
2
+ * Mechanical translation of a raw Figma MCP `get_motion_context` response
3
+ * into MotionDocs — no hand transcription (design spec §6 motion notes).
4
+ *
5
+ * Field-tested decoding rules (2026-07, SDS "Unlocked" card):
6
+ *
7
+ * - The response carries two encodings per node. The motion.dev snippet is
8
+ * the reliable one: every track is sampled inside the timeline-cohort
9
+ * window, so values are correct AT their normalized times. The CSS
10
+ * snippet stretches per-track durations and can disagree — it is ignored.
11
+ * - Keyframes clustered at the tail of the window (segments spanning less
12
+ * than WRAP_EPSILON_S of real time) are LOOP-WRAP MARKERS — the instant
13
+ * reset at the loop boundary — not authored motion. They are stripped and
14
+ * the wrap is realized by the tween's `repeat` restart. Inventing visible
15
+ * returns from wrap markers is the known failure mode this module exists
16
+ * to prevent.
17
+ * - After stripping, the last kept keyframe's time extends to 1 so the
18
+ * track fills its window (the dropped tail spanned sub-millisecond time).
19
+ *
20
+ * Verification is still mandatory: render and compare against
21
+ * `export_video` ground truth with skills/figma/scripts/verify-motion.mjs.
22
+ */
23
+ /** Tail segments shorter than this (seconds) are loop-wrap markers. */
24
+ const WRAP_EPSILON_S = 0.005;
25
+ /** motion.dev property → GSAP property. */
26
+ const PROPERTY_MAP = { rotate: "rotation" };
27
+ /** Escape regex metacharacters — keys are `\w+` property names today, but a
28
+ * future caller passing anything else must not silently misparse. */
29
+ function escapeRegExp(text) {
30
+ return text.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
31
+ }
32
+ /** Extract the balanced `{...}` body following `marker` in `src`. Brace
33
+ * counting does not skip string literals — sound for motion.dev output
34
+ * (numeric arrays + named eases, never arbitrary strings containing `}`). */
35
+ function balancedBlock(src, marker) {
36
+ const at = src.indexOf(marker);
37
+ if (at === -1)
38
+ return null;
39
+ const start = src.indexOf("{", at + marker.length - 1);
40
+ if (start === -1)
41
+ return null;
42
+ let depth = 0;
43
+ for (let i = start; i < src.length; i += 1) {
44
+ if (src[i] === "{")
45
+ depth += 1;
46
+ if (src[i] === "}") {
47
+ depth -= 1;
48
+ if (depth === 0)
49
+ return src.slice(start + 1, i);
50
+ }
51
+ }
52
+ return null;
53
+ }
54
+ /** Extract a balanced `[...]` immediately after `key:` inside `src`. */
55
+ function arrayAfterKey(src, key) {
56
+ const re = new RegExp(`${escapeRegExp(key)}\\s*:\\s*\\[`);
57
+ const m = re.exec(src);
58
+ if (!m)
59
+ return null;
60
+ const start = m.index + m[0].length - 1;
61
+ let depth = 0;
62
+ for (let i = start; i < src.length; i += 1) {
63
+ if (src[i] === "[")
64
+ depth += 1;
65
+ if (src[i] === "]") {
66
+ depth -= 1;
67
+ if (depth === 0)
68
+ return src.slice(start, i + 1);
69
+ }
70
+ }
71
+ return null;
72
+ }
73
+ function scalarAfterKey(src, key) {
74
+ const m = new RegExp(`${escapeRegExp(key)}\\s*:\\s*("[^"]*"|[\\w.]+)`).exec(src);
75
+ return m?.[1] ?? null;
76
+ }
77
+ function parseEase(transitionBlock) {
78
+ const arr = arrayAfterKey(transitionBlock, "ease");
79
+ if (arr)
80
+ return JSON.parse(arr);
81
+ const scalar = scalarAfterKey(transitionBlock, "ease");
82
+ if (scalar?.startsWith('"'))
83
+ return [JSON.parse(scalar)];
84
+ return null;
85
+ }
86
+ /**
87
+ * Strip loop-wrap tail keyframes: walking from the end, drop keyframes whose
88
+ * incoming segment spans < WRAP_EPSILON_S of real time; stop at the first
89
+ * substantial segment. Extend the last kept time to 1.
90
+ */
91
+ function stripWrapTail(values, times, ease, duration) {
92
+ let end = values.length;
93
+ while (end > 2) {
94
+ const tPrev = times[end - 2];
95
+ const tCur = times[end - 1];
96
+ if (tPrev === undefined || tCur === undefined)
97
+ break;
98
+ if ((tCur - tPrev) * duration >= WRAP_EPSILON_S)
99
+ break;
100
+ end -= 1;
101
+ }
102
+ const v = values.slice(0, end);
103
+ const t = times.slice(0, end);
104
+ const e = ease.slice(0, Math.max(1, end - 1));
105
+ const last = t.length - 1;
106
+ if (t[last] !== undefined && t[last] < 1)
107
+ t[last] = 1;
108
+ return { values: v, times: t, ease: e };
109
+ }
110
+ /** Extract and validate one property's raw arrays from the snippet blocks. */
111
+ function extractTrackData(animate, transition, prop) {
112
+ const valuesSrc = arrayAfterKey(animate, prop);
113
+ const propTransition = balancedBlock(transition, `${prop}: {`);
114
+ if (!valuesSrc || !propTransition)
115
+ return null;
116
+ const timesSrc = arrayAfterKey(propTransition, "times");
117
+ const durationSrc = scalarAfterKey(propTransition, "duration");
118
+ const ease = parseEase(propTransition);
119
+ if (!timesSrc || !durationSrc || !ease)
120
+ return null;
121
+ const values = JSON.parse(valuesSrc);
122
+ const times = JSON.parse(timesSrc);
123
+ const duration = Number(durationSrc);
124
+ if (values.length !== times.length || !Number.isFinite(duration))
125
+ return null;
126
+ return { values, times, ease, duration };
127
+ }
128
+ /** Parse one property's track out of the animate/transition blocks. */
129
+ function parsePropertyTrack(animate, transition, prop, repeat) {
130
+ const raw = extractTrackData(animate, transition, prop);
131
+ if (!raw)
132
+ return null;
133
+ // segment eases: a single named ease applies to every segment
134
+ const segCount = raw.values.length - 1;
135
+ const segEase = raw.ease.length === segCount
136
+ ? raw.ease
137
+ : Array.from({ length: segCount }, (_, i) => raw.ease[i % raw.ease.length] ?? "linear");
138
+ const stripped = stripWrapTail(raw.values, raw.times, segEase, raw.duration);
139
+ return {
140
+ property: PROPERTY_MAP[prop] ?? prop,
141
+ values: stripped.values,
142
+ times: stripped.times,
143
+ ease: stripped.ease,
144
+ duration: raw.duration,
145
+ repeat,
146
+ };
147
+ }
148
+ /** Parse one node's motion.dev snippet into MotionTracks. */
149
+ function parseNodeTracks(node, repeat) {
150
+ const snippet = node.codeSnippets?.motionDev;
151
+ if (!snippet)
152
+ return [];
153
+ const animate = balancedBlock(snippet, "animate={");
154
+ const transition = balancedBlock(snippet, "transition={");
155
+ if (!animate || !transition)
156
+ return [];
157
+ const tracks = [];
158
+ const propRe = /(\w+)\s*:\s*\[/g;
159
+ let m;
160
+ while ((m = propRe.exec(animate)) !== null) {
161
+ const prop = m[1];
162
+ if (prop === undefined)
163
+ continue;
164
+ const track = parsePropertyTrack(animate, transition, prop, repeat);
165
+ if (track)
166
+ tracks.push(track);
167
+ }
168
+ return tracks;
169
+ }
170
+ /**
171
+ * Raw `get_motion_context` response → MotionDoc[], mechanically. Feed the
172
+ * result to motionToGsap/emitTimelineScript; then verify against
173
+ * export_video ground truth before calling the import done.
174
+ */
175
+ export function motionContextToDocs(response, options) {
176
+ const repeat = options.repeat ?? 0;
177
+ const docs = [];
178
+ for (const node of response.nodes ?? []) {
179
+ const tracks = parseNodeTracks(node, repeat);
180
+ if (tracks.length === 0)
181
+ continue;
182
+ docs.push({ selector: options.selectorFor(node), tracks });
183
+ }
184
+ return docs;
185
+ }
186
+ //# sourceMappingURL=motionContextToDocs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motionContextToDocs.js","sourceRoot":"","sources":["../../src/figma/motionContextToDocs.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"nodeToHtml.d.ts","sourceRoot":"","sources":["../../src/figma/nodeToHtml.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAGlD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAmCD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAwNvC,MAAM,WAAW,iBAAiB;IAChC;;uCAEmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,qBAAqB,EAC/B,IAAI,GAAE,iBAAsB,GAC3B,gBAAgB,CAMlB"}
1
+ {"version":3,"file":"nodeToHtml.d.ts","sourceRoot":"","sources":["../../src/figma/nodeToHtml.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAGlD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAmCD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAwPvC,MAAM,WAAW,iBAAiB;IAChC;;uCAEmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,iBAAiB,EACvB,QAAQ,EAAE,qBAAqB,EAC/B,IAAI,GAAE,iBAAsB,GAC3B,gBAAgB,CAMlB"}
@@ -135,9 +135,32 @@ function textCss(node, styles) {
135
135
  styles.push(`line-height: ${round(s.lineHeightPx)}px`);
136
136
  if (typeof s.letterSpacing === "number" && s.letterSpacing !== 0)
137
137
  styles.push(`letter-spacing: ${round(s.letterSpacing)}px`);
138
+ if (isVerticallyTrimmed(node, s.lineHeightPx)) {
139
+ styles.push("text-box-trim: trim-both", "text-box-edge: cap alphabetic");
140
+ }
141
+ }
142
+ /**
143
+ * Vertical trim: a figma text box SHORTER than its line-height is
144
+ * cap-height-trimmed bounds. Browsers place glyphs with half-leading and
145
+ * overflow the short box downward (~6px low on a 70px font, measured
146
+ * against figma's own render). text-box-trim reproduces figma's trim in
147
+ * the render engine (Chrome). Single-line text only.
148
+ */
149
+ function isVerticallyTrimmed(node, lineHeightPx) {
150
+ if (typeof lineHeightPx !== "number")
151
+ return false;
152
+ const box = boxOf(node);
153
+ if (box === null || box.height >= lineHeightPx - 1)
154
+ return false;
155
+ return typeof node.characters === "string" && !node.characters.includes("\n");
138
156
  }
139
157
  function uniqueSlug(ctx, name) {
140
- const base = slugify(name);
158
+ const raw = slugify(name);
159
+ // A digit-leading id ("3D Object" → "3d-object") is valid HTML but not a
160
+ // valid CSS selector — querySelector("#3d-object") throws, which breaks
161
+ // GSAP targeting and figma-motion translation. Prefix so ids stay
162
+ // selector-safe.
163
+ const base = /^[0-9]/.test(raw) ? `n${raw}` : raw;
141
164
  let slug = base;
142
165
  let n = 2;
143
166
  while (ctx.usedSlugs.has(slug))
@@ -160,7 +183,7 @@ function unresolvedAttr(node, ctx) {
160
183
  return "";
161
184
  return ` data-figma-unresolved="${escapeHtml(props.join(" "))}"`;
162
185
  }
163
- function geometryCss(node, ctx, isRoot) {
186
+ function geometryCss(node, parentBox, isRoot) {
164
187
  const box = boxOf(node);
165
188
  const styles = [];
166
189
  if (!box)
@@ -169,7 +192,11 @@ function geometryCss(node, ctx, isRoot) {
169
192
  styles.push("position: relative", `width: ${round(box.width)}px`, `height: ${round(box.height)}px`);
170
193
  }
171
194
  else {
172
- styles.push("position: absolute", `left: ${round(box.x - ctx.origin.x)}px`, `top: ${round(box.y - ctx.origin.y)}px`, `width: ${round(box.width)}px`, `height: ${round(box.height)}px`);
195
+ // CSS absolute positioning is relative to the nearest positioned
196
+ // ancestor — the PARENT's box, not the root origin. Subtracting the root
197
+ // for every depth double-offsets nested children (each level re-adds its
198
+ // ancestors' offsets), drifting content down-right and off-frame.
199
+ styles.push("position: absolute", `left: ${round(box.x - parentBox.x)}px`, `top: ${round(box.y - parentBox.y)}px`, `width: ${round(box.width)}px`, `height: ${round(box.height)}px`);
173
200
  }
174
201
  return styles;
175
202
  }
@@ -209,20 +236,20 @@ function decorationCss(node, ctx) {
209
236
  // ponytail: depth cap so a runaway auto-generated tree degrades to a skip
210
237
  // instead of a RangeError; real figma frames are nowhere near this deep.
211
238
  const MAX_DEPTH = 500;
212
- function renderChildren(node, ctx, depth) {
239
+ function renderChildren(node, ctx, depth, parentBox) {
213
240
  const childHtml = [];
214
241
  for (const child of childDocuments(node)) {
215
- const rendered = renderNodeHtml(child, ctx, false, depth + 1);
242
+ const rendered = renderNodeHtml(child, ctx, false, depth + 1, parentBox);
216
243
  if (rendered.length > 0)
217
244
  childHtml.push(rendered);
218
245
  }
219
246
  return childHtml.length > 0 ? `\n${childHtml.join("\n")}\n` : "";
220
247
  }
221
- function renderNodeHtml(node, ctx, isRoot, depth = 0) {
248
+ function renderNodeHtml(node, ctx, isRoot, depth = 0, parentBox = ctx.origin) {
222
249
  if (node.visible === false || depth > MAX_DEPTH)
223
250
  return "";
224
251
  const slug = uniqueSlug(ctx, node.name);
225
- const style = escapeHtml([...geometryCss(node, ctx, isRoot), ...decorationCss(node, ctx)].join("; "));
252
+ const style = escapeHtml([...geometryCss(node, parentBox, isRoot), ...decorationCss(node, ctx)].join("; "));
226
253
  // data-hf-snippet marks the file as a mountable fragment, not a standalone
227
254
  // composition — the project linter skips composition-root rules for it.
228
255
  const snippetAttr = isRoot ? ' data-hf-snippet=""' : "";
@@ -235,7 +262,7 @@ function renderNodeHtml(node, ctx, isRoot, depth = 0) {
235
262
  const text = typeof node.characters === "string" ? escapeHtml(node.characters) : "";
236
263
  return `<div ${idAttrs} style="${style}">${text}</div>`;
237
264
  }
238
- return `<div ${idAttrs} style="${style}">${renderChildren(node, ctx, depth)}</div>`;
265
+ return `<div ${idAttrs} style="${style}">${renderChildren(node, ctx, depth, boxOf(node) ?? parentBox)}</div>`;
239
266
  }
240
267
  export function nodeToHtml(root, bindings, opts = {}) {
241
268
  const origin = boxOf(root) ?? { x: 0, y: 0, width: 0, height: 0 };
@@ -1 +1 @@
1
- {"version":3,"file":"nodeToHtml.js","sourceRoot":"","sources":["../../src/figma/nodeToHtml.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nodeToHtml.js","sourceRoot":"","sources":["../../src/figma/nodeToHtml.ts"],"names":[],"mappings":"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"}