claude-exode-mcp 7.5.7 → 7.5.8

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 (173) hide show
  1. package/MCP_DOCUMENTATION.md +1 -0
  2. package/SKILL.md +10 -0
  3. package/examples/aurum-product-page.exode +3208 -0
  4. package/examples/bell-ring-icon.exode +1 -0
  5. package/examples/drift-kinetic-type.exode +770 -0
  6. package/examples/earbuds-product.exode +214 -0
  7. package/examples/energy-flow.exode +1736 -0
  8. package/examples/flux-hero.exode +223 -0
  9. package/examples/gooey-toggle.exode +214 -0
  10. package/examples/gravity-well.exode +3113 -0
  11. package/examples/heart-icon.exode +1 -0
  12. package/examples/hologram-temple.exode +8100 -0
  13. package/examples/jarful-app.exode +1 -0
  14. package/examples/kip-character-rig.exode +1 -0
  15. package/examples/low-tide-tilt.exode +2216 -0
  16. package/examples/manifest.json +352 -0
  17. package/examples/swipe-stack-carousel.exode +4048 -0
  18. package/examples/tokyo-neon-weather.exode +470 -0
  19. package/examples/typographic-collapse.exode +1578 -0
  20. package/examples/void-product-ad.exode +1269 -0
  21. package/examples/wire-globe-card.exode +580 -0
  22. package/index.d.ts +41 -1
  23. package/index.js +2553 -2407
  24. package/package.json +4 -2
  25. package/render-runtime/exode-runtime.js +20 -20
  26. package/skills/creative-motion/SKILL.md +10 -0
  27. package/skills/creative-motion/recipes/character-rig.js +104 -0
  28. package/skills/creative-motion/recipes/dashboard.js +120 -0
  29. package/skills/creative-motion/recipes/game-arcade.js +203 -0
  30. package/skills/creative-motion/recipes/hero-physics.js +65 -0
  31. package/skills/creative-motion/recipes/pricing.js +88 -0
  32. package/skills/creative-motion/recipes/title-sequence.js +62 -0
  33. package/skills/creative-motion/references/apps.md +37 -0
  34. package/skills/creative-motion/references/gotchas.md +80 -0
  35. package/skills/creative-motion/references/native-layers.md +60 -0
  36. package/skills/creative-motion/references/quality.md +54 -0
  37. package/src/__tests__/buildKit.test.ts +127 -0
  38. package/src/__tests__/effectKnobs.test.ts +162 -0
  39. package/src/__tests__/nativeLayers.test.ts +178 -0
  40. package/src/buildKit.d.ts +301 -0
  41. package/src/buildKit.d.ts.map +1 -0
  42. package/src/buildKit.js +559 -0
  43. package/src/buildKit.js.map +1 -0
  44. package/src/buildKit.ts +520 -0
  45. package/src/compiler.d.ts +4 -0
  46. package/src/compiler.d.ts.map +1 -1
  47. package/src/compiler.js +21 -45
  48. package/src/compiler.js.map +1 -1
  49. package/src/compiler.ts +22 -51
  50. package/src/critique.d.ts +8 -0
  51. package/src/critique.d.ts.map +1 -0
  52. package/src/critique.js +348 -0
  53. package/src/critique.js.map +1 -0
  54. package/src/critique.ts +239 -0
  55. package/src/effectKnobs.d.ts +72 -0
  56. package/src/effectKnobs.d.ts.map +1 -0
  57. package/src/effectKnobs.js +541 -0
  58. package/src/effectKnobs.js.map +1 -0
  59. package/src/effectKnobs.ts +445 -0
  60. package/src/effectOptimizer.d.ts +18 -0
  61. package/src/effectOptimizer.d.ts.map +1 -0
  62. package/src/effectOptimizer.js +125 -0
  63. package/src/effectOptimizer.js.map +1 -0
  64. package/src/effectOptimizer.ts +104 -0
  65. package/src/engine/layout.js +1 -1
  66. package/src/engine/layout.js.map +1 -1
  67. package/src/engine/layout.ts +1 -1
  68. package/src/examples.d.ts +30 -0
  69. package/src/examples.d.ts.map +1 -0
  70. package/src/examples.js +168 -0
  71. package/src/examples.js.map +1 -0
  72. package/src/examples.ts +151 -0
  73. package/src/handlers/artboardHandlers.d.ts.map +1 -1
  74. package/src/handlers/artboardHandlers.js +45 -10
  75. package/src/handlers/artboardHandlers.js.map +1 -1
  76. package/src/handlers/artboardHandlers.ts +43 -12
  77. package/src/handlers/buildHandlers.d.ts +2 -0
  78. package/src/handlers/buildHandlers.d.ts.map +1 -0
  79. package/src/handlers/buildHandlers.js +86 -0
  80. package/src/handlers/buildHandlers.js.map +1 -0
  81. package/src/handlers/buildHandlers.ts +76 -0
  82. package/src/handlers/compilerHandlers.d.ts.map +1 -1
  83. package/src/handlers/compilerHandlers.js +32 -2
  84. package/src/handlers/compilerHandlers.js.map +1 -1
  85. package/src/handlers/compilerHandlers.ts +31 -2
  86. package/src/handlers/exampleHandlers.d.ts +2 -0
  87. package/src/handlers/exampleHandlers.d.ts.map +1 -0
  88. package/src/handlers/exampleHandlers.js +81 -0
  89. package/src/handlers/exampleHandlers.js.map +1 -0
  90. package/src/handlers/exampleHandlers.ts +76 -0
  91. package/src/handlers/renderHandlers.d.ts.map +1 -1
  92. package/src/handlers/renderHandlers.js +100 -2
  93. package/src/handlers/renderHandlers.js.map +1 -1
  94. package/src/handlers/renderHandlers.ts +90 -2
  95. package/src/handlers/scaffoldHandlers.d.ts.map +1 -1
  96. package/src/handlers/scaffoldHandlers.js +3 -0
  97. package/src/handlers/scaffoldHandlers.js.map +1 -1
  98. package/src/handlers/scaffoldHandlers.ts +2 -0
  99. package/src/handlers/widgetHandlers.js +1 -1
  100. package/src/handlers/widgetHandlers.js.map +1 -1
  101. package/src/handlers/widgetHandlers.ts +1 -1
  102. package/src/lottie/convert.d.ts +16 -0
  103. package/src/lottie/convert.d.ts.map +1 -0
  104. package/src/lottie/convert.js +1225 -0
  105. package/src/lottie/convert.js.map +1 -0
  106. package/src/lottie/convert.ts +1134 -0
  107. package/src/lottie/evaluate.d.ts +48 -0
  108. package/src/lottie/evaluate.d.ts.map +1 -0
  109. package/src/lottie/evaluate.js +174 -0
  110. package/src/lottie/evaluate.js.map +1 -0
  111. package/src/lottie/evaluate.ts +184 -0
  112. package/src/nativeLayers.d.ts +76 -0
  113. package/src/nativeLayers.d.ts.map +1 -0
  114. package/src/nativeLayers.js +404 -0
  115. package/src/nativeLayers.js.map +1 -0
  116. package/src/nativeLayers.ts +339 -0
  117. package/src/render/motionBrief.d.ts.map +1 -1
  118. package/src/render/motionBrief.js +4 -0
  119. package/src/render/motionBrief.js.map +1 -1
  120. package/src/render/motionBrief.ts +4 -0
  121. package/src/render/videoRenderer.d.ts.map +1 -1
  122. package/src/render/videoRenderer.js +5 -2
  123. package/src/render/videoRenderer.js.map +1 -1
  124. package/src/render/videoRenderer.ts +5 -2
  125. package/src/rive/convert.d.ts +17 -0
  126. package/src/rive/convert.d.ts.map +1 -0
  127. package/src/rive/convert.js +1779 -0
  128. package/src/rive/convert.js.map +1 -0
  129. package/src/rive/convert.ts +1492 -0
  130. package/src/rive/font.d.ts +13 -0
  131. package/src/rive/font.d.ts.map +1 -0
  132. package/src/rive/font.js +154 -0
  133. package/src/rive/font.js.map +1 -0
  134. package/src/rive/font.ts +132 -0
  135. package/src/rive/layout.d.ts +20 -0
  136. package/src/rive/layout.d.ts.map +1 -0
  137. package/src/rive/layout.js +145 -0
  138. package/src/rive/layout.js.map +1 -0
  139. package/src/rive/layout.ts +140 -0
  140. package/src/rive/reader.d.ts +32 -0
  141. package/src/rive/reader.d.ts.map +1 -0
  142. package/src/rive/reader.js +172 -0
  143. package/src/rive/reader.js.map +1 -0
  144. package/src/rive/reader.ts +160 -0
  145. package/src/rive/schema.generated.d.ts +9 -0
  146. package/src/rive/schema.generated.d.ts.map +1 -0
  147. package/src/rive/schema.generated.js +13 -0
  148. package/src/rive/schema.generated.js.map +1 -0
  149. package/src/rive/schema.generated.ts +13 -0
  150. package/src/schema.d.ts +5 -0
  151. package/src/schema.d.ts.map +1 -1
  152. package/src/schema.js +5 -0
  153. package/src/schema.js.map +1 -1
  154. package/src/schema.ts +6 -0
  155. package/src/serverInstructions.d.ts +2 -0
  156. package/src/serverInstructions.d.ts.map +1 -0
  157. package/src/serverInstructions.js +22 -0
  158. package/src/serverInstructions.js.map +1 -0
  159. package/src/serverInstructions.ts +21 -0
  160. package/src/sseServer.d.ts +2 -0
  161. package/src/sseServer.d.ts.map +1 -0
  162. package/src/sseServer.js +165 -0
  163. package/src/sseServer.js.map +1 -0
  164. package/src/sseServer.ts +189 -0
  165. package/src/utils.d.ts.map +1 -1
  166. package/src/utils.js +23 -1
  167. package/src/utils.js.map +1 -1
  168. package/src/utils.ts +13 -1
  169. package/src/widgets.d.ts +26 -0
  170. package/src/widgets.d.ts.map +1 -1
  171. package/src/widgets.js +89 -45
  172. package/src/widgets.js.map +1 -1
  173. package/src/widgets.ts +88 -45
@@ -0,0 +1,13 @@
1
+ export interface FontInfo {
2
+ family: string;
3
+ weight: number;
4
+ italic: boolean;
5
+ unitsPerEm: number;
6
+ /** Ascent above the baseline and descent below it, in em units (both positive). */
7
+ ascent: number;
8
+ descent: number;
9
+ /** Advance of a code point in em units (0 when the font has no glyph for it). */
10
+ advance(codePoint: number): number;
11
+ }
12
+ export declare function parseFont(bytes: Uint8Array): FontInfo | null;
13
+ //# sourceMappingURL=font.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"font.d.ts","sourceRoot":"","sources":["font.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,QAAQ;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;CACtC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAsC5D"}
@@ -0,0 +1,154 @@
1
+ // @ts-nocheck
2
+ // GENERATED by scripts/sync-lottie-converter.mjs from editor/src/utils/rive. Edit there, then re-run.
3
+ // Minimal sfnt (TrueType / OpenType) reader for the fonts a .riv embeds: the
4
+ // family name (so the runtime can load the same face by name), vertical
5
+ // metrics the way HarfBuzz reports them to Rive, and advance widths for
6
+ // measuring text. No shaping or kerning.
7
+ export function parseFont(bytes) {
8
+ if (bytes.length < 12)
9
+ return null;
10
+ const v = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
11
+ const tag = v.getUint32(0);
12
+ if (tag !== 0x00010000 && tag !== 0x4f54544f /* OTTO */ && tag !== 0x74727565 /* true */)
13
+ return null;
14
+ const tables = new Map();
15
+ const n = v.getUint16(4);
16
+ for (let i = 0; i < n; i++) {
17
+ const r = 12 + i * 16;
18
+ if (r + 16 > bytes.length)
19
+ break;
20
+ const t = String.fromCharCode(bytes[r], bytes[r + 1], bytes[r + 2], bytes[r + 3]);
21
+ tables.set(t, { off: v.getUint32(r + 8), len: v.getUint32(r + 12) });
22
+ }
23
+ const head = tables.get('head'), hhea = tables.get('hhea'), hmtx = tables.get('hmtx');
24
+ if (!head || !hhea)
25
+ return null;
26
+ const upm = v.getUint16(head.off + 18) || 1000;
27
+ let ascent = v.getInt16(hhea.off + 4), descent = -v.getInt16(hhea.off + 6);
28
+ const numH = v.getUint16(hhea.off + 34);
29
+ let weight = 400, italic = false;
30
+ const os2 = tables.get('OS/2');
31
+ if (os2 && os2.len >= 72) {
32
+ weight = v.getUint16(os2.off + 4) || 400;
33
+ const sel = v.getUint16(os2.off + 62);
34
+ italic = !!(sel & 1);
35
+ // HarfBuzz prefers typo metrics when USE_TYPO_METRICS is set, and falls back to them when hhea is empty.
36
+ if ((sel & 128) || (!ascent && !descent)) {
37
+ ascent = v.getInt16(os2.off + 68);
38
+ descent = -v.getInt16(os2.off + 70);
39
+ }
40
+ }
41
+ // cmap: Windows Unicode BMP (format 4) or full repertoire (format 12).
42
+ const glyphOf = cmapReader(v, tables.get('cmap'));
43
+ const advance = (cp) => {
44
+ if (!hmtx || !numH)
45
+ return 0;
46
+ const g = glyphOf(cp);
47
+ if (g === null)
48
+ return 0;
49
+ const i = Math.min(g, numH - 1);
50
+ return v.getUint16(hmtx.off + i * 4) / upm;
51
+ };
52
+ return { family: familyName(v, bytes, tables.get('name')) || '', weight, italic, unitsPerEm: upm, ascent: ascent / upm, descent: descent / upm, advance };
53
+ }
54
+ function cmapReader(v, cmap) {
55
+ if (!cmap)
56
+ return () => null;
57
+ const n = v.getUint16(cmap.off + 2);
58
+ let best = -1, bestFormat = 0;
59
+ for (let i = 0; i < n; i++) {
60
+ const r = cmap.off + 4 + i * 8;
61
+ const pid = v.getUint16(r), eid = v.getUint16(r + 2), sub = cmap.off + v.getUint32(r + 4);
62
+ const format = v.getUint16(sub);
63
+ const unicode = pid === 0 || (pid === 3 && (eid === 1 || eid === 10));
64
+ if (!unicode)
65
+ continue;
66
+ if (format === 12 && bestFormat !== 12) {
67
+ best = sub;
68
+ bestFormat = 12;
69
+ }
70
+ else if (format === 4 && !bestFormat) {
71
+ best = sub;
72
+ bestFormat = 4;
73
+ }
74
+ }
75
+ if (best < 0)
76
+ return () => null;
77
+ const cache = new Map();
78
+ if (bestFormat === 12) {
79
+ const groups = v.getUint32(best + 12);
80
+ return cp => {
81
+ if (cache.has(cp))
82
+ return cache.get(cp);
83
+ let g = null;
84
+ for (let i = 0; i < groups; i++) {
85
+ const r = best + 16 + i * 12, start = v.getUint32(r), end = v.getUint32(r + 4);
86
+ if (cp >= start && cp <= end) {
87
+ g = v.getUint32(r + 8) + (cp - start);
88
+ break;
89
+ }
90
+ }
91
+ cache.set(cp, g);
92
+ return g;
93
+ };
94
+ }
95
+ const segX2 = v.getUint16(best + 6);
96
+ const ends = best + 14, starts = ends + segX2 + 2, deltas = starts + segX2, offsets = deltas + segX2;
97
+ return cp => {
98
+ if (cp > 0xffff)
99
+ return null;
100
+ if (cache.has(cp))
101
+ return cache.get(cp);
102
+ let g = null;
103
+ for (let i = 0; i < segX2 / 2; i++) {
104
+ const end = v.getUint16(ends + i * 2);
105
+ if (cp > end)
106
+ continue;
107
+ const start = v.getUint16(starts + i * 2);
108
+ if (cp < start)
109
+ break;
110
+ const delta = v.getInt16(deltas + i * 2), ro = v.getUint16(offsets + i * 2);
111
+ if (!ro)
112
+ g = (cp + delta) & 0xffff;
113
+ else {
114
+ const at = offsets + i * 2 + ro + (cp - start) * 2;
115
+ const raw = at + 2 <= v.byteLength ? v.getUint16(at) : 0;
116
+ g = raw ? (raw + delta) & 0xffff : null;
117
+ }
118
+ break;
119
+ }
120
+ if (g === 0)
121
+ g = null;
122
+ cache.set(cp, g);
123
+ return g;
124
+ };
125
+ }
126
+ /** Typographic family (name ID 16), else family (ID 1); Windows UTF-16 first, then Mac Roman. */
127
+ function familyName(v, bytes, name) {
128
+ if (!name)
129
+ return null;
130
+ const count = v.getUint16(name.off + 2), strings = name.off + v.getUint16(name.off + 4);
131
+ const found = {};
132
+ for (let i = 0; i < count; i++) {
133
+ const r = name.off + 6 + i * 12;
134
+ const pid = v.getUint16(r), id = v.getUint16(r + 6), len = v.getUint16(r + 8), off = strings + v.getUint16(r + 10);
135
+ if (id !== 1 && id !== 16)
136
+ continue;
137
+ if (off + len > bytes.length)
138
+ continue;
139
+ let s = '';
140
+ if (pid === 3 || pid === 0)
141
+ for (let k = 0; k < len; k += 2)
142
+ s += String.fromCharCode(v.getUint16(off + k));
143
+ else if (pid === 1)
144
+ for (let k = 0; k < len; k++)
145
+ s += String.fromCharCode(bytes[off + k]);
146
+ else
147
+ continue;
148
+ const key = `${id}:${pid === 1 ? 'mac' : 'win'}`;
149
+ if (s && !found[key])
150
+ found[key] = s;
151
+ }
152
+ return found['16:win'] || found['1:win'] || found['16:mac'] || found['1:mac'] || null;
153
+ }
154
+ //# sourceMappingURL=font.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"font.js","sourceRoot":"","sources":["font.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ // @ts-nocheck
2
+ // GENERATED by scripts/sync-lottie-converter.mjs from editor/src/utils/rive. Edit there, then re-run.
3
+ // Minimal sfnt (TrueType / OpenType) reader for the fonts a .riv embeds: the
4
+ // family name (so the runtime can load the same face by name), vertical
5
+ // metrics the way HarfBuzz reports them to Rive, and advance widths for
6
+ // measuring text. No shaping or kerning.
7
+
8
+ export interface FontInfo {
9
+ family: string;
10
+ weight: number;
11
+ italic: boolean;
12
+ unitsPerEm: number;
13
+ /** Ascent above the baseline and descent below it, in em units (both positive). */
14
+ ascent: number;
15
+ descent: number;
16
+ /** Advance of a code point in em units (0 when the font has no glyph for it). */
17
+ advance(codePoint: number): number;
18
+ }
19
+
20
+ export function parseFont(bytes: Uint8Array): FontInfo | null {
21
+ if (bytes.length < 12) return null;
22
+ const v = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
23
+ const tag = v.getUint32(0);
24
+ if (tag !== 0x00010000 && tag !== 0x4f54544f /* OTTO */ && tag !== 0x74727565 /* true */) return null;
25
+ const tables = new Map<string, { off: number; len: number }>();
26
+ const n = v.getUint16(4);
27
+ for (let i = 0; i < n; i++) {
28
+ const r = 12 + i * 16;
29
+ if (r + 16 > bytes.length) break;
30
+ const t = String.fromCharCode(bytes[r], bytes[r + 1], bytes[r + 2], bytes[r + 3]);
31
+ tables.set(t, { off: v.getUint32(r + 8), len: v.getUint32(r + 12) });
32
+ }
33
+ const head = tables.get('head'), hhea = tables.get('hhea'), hmtx = tables.get('hmtx');
34
+ if (!head || !hhea) return null;
35
+ const upm = v.getUint16(head.off + 18) || 1000;
36
+ let ascent = v.getInt16(hhea.off + 4), descent = -v.getInt16(hhea.off + 6);
37
+ const numH = v.getUint16(hhea.off + 34);
38
+ let weight = 400, italic = false;
39
+ const os2 = tables.get('OS/2');
40
+ if (os2 && os2.len >= 72) {
41
+ weight = v.getUint16(os2.off + 4) || 400;
42
+ const sel = v.getUint16(os2.off + 62);
43
+ italic = !!(sel & 1);
44
+ // HarfBuzz prefers typo metrics when USE_TYPO_METRICS is set, and falls back to them when hhea is empty.
45
+ if ((sel & 128) || (!ascent && !descent)) { ascent = v.getInt16(os2.off + 68); descent = -v.getInt16(os2.off + 70); }
46
+ }
47
+
48
+ // cmap: Windows Unicode BMP (format 4) or full repertoire (format 12).
49
+ const glyphOf = cmapReader(v, tables.get('cmap'));
50
+ const advance = (cp: number) => {
51
+ if (!hmtx || !numH) return 0;
52
+ const g = glyphOf(cp);
53
+ if (g === null) return 0;
54
+ const i = Math.min(g, numH - 1);
55
+ return v.getUint16(hmtx.off + i * 4) / upm;
56
+ };
57
+ return { family: familyName(v, bytes, tables.get('name')) || '', weight, italic, unitsPerEm: upm, ascent: ascent / upm, descent: descent / upm, advance };
58
+ }
59
+
60
+ function cmapReader(v: DataView, cmap?: { off: number; len: number }): (cp: number) => number | null {
61
+ if (!cmap) return () => null;
62
+ const n = v.getUint16(cmap.off + 2);
63
+ let best = -1, bestFormat = 0;
64
+ for (let i = 0; i < n; i++) {
65
+ const r = cmap.off + 4 + i * 8;
66
+ const pid = v.getUint16(r), eid = v.getUint16(r + 2), sub = cmap.off + v.getUint32(r + 4);
67
+ const format = v.getUint16(sub);
68
+ const unicode = pid === 0 || (pid === 3 && (eid === 1 || eid === 10));
69
+ if (!unicode) continue;
70
+ if (format === 12 && bestFormat !== 12) { best = sub; bestFormat = 12; }
71
+ else if (format === 4 && !bestFormat) { best = sub; bestFormat = 4; }
72
+ }
73
+ if (best < 0) return () => null;
74
+ const cache = new Map<number, number | null>();
75
+ if (bestFormat === 12) {
76
+ const groups = v.getUint32(best + 12);
77
+ return cp => {
78
+ if (cache.has(cp)) return cache.get(cp)!;
79
+ let g: number | null = null;
80
+ for (let i = 0; i < groups; i++) {
81
+ const r = best + 16 + i * 12, start = v.getUint32(r), end = v.getUint32(r + 4);
82
+ if (cp >= start && cp <= end) { g = v.getUint32(r + 8) + (cp - start); break; }
83
+ }
84
+ cache.set(cp, g);
85
+ return g;
86
+ };
87
+ }
88
+ const segX2 = v.getUint16(best + 6);
89
+ const ends = best + 14, starts = ends + segX2 + 2, deltas = starts + segX2, offsets = deltas + segX2;
90
+ return cp => {
91
+ if (cp > 0xffff) return null;
92
+ if (cache.has(cp)) return cache.get(cp)!;
93
+ let g: number | null = null;
94
+ for (let i = 0; i < segX2 / 2; i++) {
95
+ const end = v.getUint16(ends + i * 2);
96
+ if (cp > end) continue;
97
+ const start = v.getUint16(starts + i * 2);
98
+ if (cp < start) break;
99
+ const delta = v.getInt16(deltas + i * 2), ro = v.getUint16(offsets + i * 2);
100
+ if (!ro) g = (cp + delta) & 0xffff;
101
+ else {
102
+ const at = offsets + i * 2 + ro + (cp - start) * 2;
103
+ const raw = at + 2 <= v.byteLength ? v.getUint16(at) : 0;
104
+ g = raw ? (raw + delta) & 0xffff : null;
105
+ }
106
+ break;
107
+ }
108
+ if (g === 0) g = null;
109
+ cache.set(cp, g);
110
+ return g;
111
+ };
112
+ }
113
+
114
+ /** Typographic family (name ID 16), else family (ID 1); Windows UTF-16 first, then Mac Roman. */
115
+ function familyName(v: DataView, bytes: Uint8Array, name?: { off: number; len: number }): string | null {
116
+ if (!name) return null;
117
+ const count = v.getUint16(name.off + 2), strings = name.off + v.getUint16(name.off + 4);
118
+ const found: Record<string, string> = {};
119
+ for (let i = 0; i < count; i++) {
120
+ const r = name.off + 6 + i * 12;
121
+ const pid = v.getUint16(r), id = v.getUint16(r + 6), len = v.getUint16(r + 8), off = strings + v.getUint16(r + 10);
122
+ if (id !== 1 && id !== 16) continue;
123
+ if (off + len > bytes.length) continue;
124
+ let s = '';
125
+ if (pid === 3 || pid === 0) for (let k = 0; k < len; k += 2) s += String.fromCharCode(v.getUint16(off + k));
126
+ else if (pid === 1) for (let k = 0; k < len; k++) s += String.fromCharCode(bytes[off + k]);
127
+ else continue;
128
+ const key = `${id}:${pid === 1 ? 'mac' : 'win'}`;
129
+ if (s && !found[key]) found[key] = s;
130
+ }
131
+ return found['16:win'] || found['1:win'] || found['16:mac'] || found['1:mac'] || null;
132
+ }
@@ -0,0 +1,20 @@
1
+ import { type RivObject } from './reader.js';
2
+ export interface LayoutBox {
3
+ x: number;
4
+ y: number;
5
+ w: number;
6
+ h: number;
7
+ }
8
+ interface Scene {
9
+ byIndex: (RivObject | null)[];
10
+ children: Map<number, RivObject[]>;
11
+ }
12
+ /** Solve every layout under the artboard; boxes are relative to the parent layout's top-left. */
13
+ export declare function solveLayouts(s: Scene, artboard: RivObject, measure: (o: RivObject) => {
14
+ w: number;
15
+ h: number;
16
+ }): Map<number, LayoutBox>;
17
+ export declare const isLayoutParticipant: (o: RivObject) => boolean;
18
+ export declare const isLayout: (o: RivObject | null | undefined) => boolean;
19
+ export {};
20
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["layout.ts"],"names":[],"mappings":"AAOA,OAAO,EAAO,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,SAAS;IAAG,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE;AAEzE,UAAU,KAAK;IAAG,OAAO,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;CAAE;AAKrF,iGAAiG;AACjG,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAuHvI;AAED,eAAO,MAAM,mBAAmB,MA5HP,SAAS,YA4Ha,CAAC;AAChD,eAAO,MAAM,QAAQ,GAAI,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,YAA0C,CAAC"}
@@ -0,0 +1,145 @@
1
+ // @ts-nocheck
2
+ // GENERATED by scripts/sync-lottie-converter.mjs from editor/src/utils/rive. Edit there, then re-run.
3
+ // A small flexbox pass for Rive layouts (the runtime uses Yoga). It covers what
4
+ // layout files mostly use: row / column (and reversed), gaps, padding, margins,
5
+ // the 3x3 alignment grid with space-between, and fixed / fill / hug sizing in
6
+ // points or percent. Wrap, grid and absolute insets beyond left/top are not solved.
7
+ import { isA } from './reader.js';
8
+ /** Layout children: layouts, layout nested artboards, and text (sized to its own box). */
9
+ const participates = (o) => o.type === 'LayoutComponent' || o.type === 'NestedArtboardLayout' || o.type === 'Text';
10
+ /** Solve every layout under the artboard; boxes are relative to the parent layout's top-left. */
11
+ export function solveLayouts(s, artboard, measure) {
12
+ const out = new Map();
13
+ const style = (o) => (o.props.styleId !== undefined ? s.byIndex[o.props.styleId] : null)?.props || {};
14
+ // Text takes part only inside a layout box, not directly on the artboard.
15
+ const kids = (o) => (s.children.get(o.index) || []).filter(participates).filter(k => !(k.type === 'Text' && o.index === 0)).filter(k => (style(k).displayValue ?? 0) !== 1);
16
+ const val = (v, units, base) => ((units ?? 1) === 2 ? ((v || 0) / 100) * base : v || 0);
17
+ const isRow = (st) => (st.flexDirectionValue ?? 2) >= 2;
18
+ const pad = (st, w, h) => ({
19
+ l: val(st.paddingLeft, st.paddingLeftUnitsValue, w), r: val(st.paddingRight, st.paddingRightUnitsValue, w),
20
+ t: val(st.paddingTop, st.paddingTopUnitsValue, h), b: val(st.paddingBottom, st.paddingBottomUnitsValue, h),
21
+ });
22
+ const margin = (st, w, h) => ({
23
+ l: val(st.marginLeft, st.marginLeftUnitsValue, w), r: val(st.marginRight, st.marginRightUnitsValue, w),
24
+ t: val(st.marginTop, st.marginTopUnitsValue, h), b: val(st.marginBottom, st.marginBottomUnitsValue, h),
25
+ });
26
+ const clamp = (v, st, axis, base) => {
27
+ const mn = axis === 'w' ? st.minWidth : st.minHeight, mx = axis === 'w' ? st.maxWidth : st.maxHeight;
28
+ const mnu = axis === 'w' ? st.minWidthUnitsValue : st.minHeightUnitsValue, mxu = axis === 'w' ? st.maxWidthUnitsValue : st.maxHeightUnitsValue;
29
+ if (mnu)
30
+ v = Math.max(v, val(mn, mnu, base));
31
+ if (mxu)
32
+ v = Math.min(v, val(mx, mxu, base));
33
+ return v;
34
+ };
35
+ const scaleType = (o, axis) => { const st = style(o); return (axis === 'w' ? st.layoutWidthScaleType : st.layoutHeightScaleType) ?? 0; };
36
+ /** Size a node gets before fill: fixed or hugged (fill reports its hug size). */
37
+ const baseSize = (o, axis, parentW, parentH) => {
38
+ const st = style(o);
39
+ if (o.type === 'Text') {
40
+ const n = measure(o);
41
+ return axis === 'w' ? n.w : n.h;
42
+ }
43
+ if (o.type === 'NestedArtboardLayout') {
44
+ const v = axis === 'w' ? o.props.instanceWidth : o.props.instanceHeight;
45
+ const n = measure(o);
46
+ return v !== undefined && v >= 0 ? val(v, axis === 'w' ? o.props.instanceWidthUnitsValue : o.props.instanceHeightUnitsValue, axis === 'w' ? parentW : parentH) : axis === 'w' ? n.w : n.h;
47
+ }
48
+ const t = scaleType(o, axis);
49
+ const base = axis === 'w' ? parentW : parentH;
50
+ if (t === 0 && (axis === 'w' ? st.widthUnitsValue ?? 1 : st.heightUnitsValue ?? 1) !== 3) {
51
+ return clamp(val(axis === 'w' ? o.props.width : o.props.height, axis === 'w' ? st.widthUnitsValue : st.heightUnitsValue, base), st, axis, base);
52
+ }
53
+ return clamp(hug(o, axis), st, axis, base);
54
+ };
55
+ /** Content size along an axis from the children (plus padding). */
56
+ const hug = (o, axis) => {
57
+ const st = style(o), row = isRow(st), p = pad(st, 0, 0);
58
+ const ks = kids(o).filter(k => (style(k).positionTypeValue ?? 1) !== 2);
59
+ const sizes = ks.map(k => { const m = margin(style(k), 0, 0); return baseSize(k, axis, 0, 0) + (axis === 'w' ? m.l + m.r : m.t + m.b); });
60
+ const along = (axis === 'w') === row;
61
+ const gap = row ? st.gapHorizontal || 0 : st.gapVertical || 0;
62
+ const inner = along ? sizes.reduce((a, b) => a + b, 0) + gap * Math.max(0, ks.length - 1) : Math.max(0, ...sizes);
63
+ return inner + (axis === 'w' ? p.l + p.r : p.t + p.b);
64
+ };
65
+ const place = (o, w, h) => {
66
+ const st = style(o), row = isRow(st);
67
+ // Right-to-left (direction 2, inherited) flips a row's main axis.
68
+ const rtl = dir(o) === 2;
69
+ const reverse = ((st.flexDirectionValue ?? 2) % 2 === 1) !== (row && rtl);
70
+ const p = pad(st, w, h);
71
+ const iw = Math.max(0, w - p.l - p.r), ih = Math.max(0, h - p.t - p.b);
72
+ const all = kids(o);
73
+ const flow = all.filter(k => (style(k).positionTypeValue ?? 1) !== 2);
74
+ const mainLen = row ? iw : ih, crossLen = row ? ih : iw;
75
+ const gap = row ? st.gapHorizontal || 0 : st.gapVertical || 0;
76
+ const items = flow.map(k => {
77
+ const ks = style(k), m = margin(ks, iw, ih);
78
+ const mm = row ? m.l + m.r : m.t + m.b, cm = row ? m.t + m.b : m.l + m.r;
79
+ const mainAxis = row ? 'w' : 'h', crossAxis = row ? 'h' : 'w';
80
+ const fillMain = k.type === 'LayoutComponent' && scaleType(k, mainAxis) === 1;
81
+ const fillCross = k.type === 'LayoutComponent' && scaleType(k, crossAxis) === 1;
82
+ return { k, m, mm, cm, fillMain, main: fillMain ? 0 : baseSize(k, mainAxis, iw, ih), cross: fillCross ? crossLen - cm : baseSize(k, crossAxis, iw, ih) };
83
+ });
84
+ const used = items.reduce((a, it) => a + it.main + it.mm, 0) + gap * Math.max(0, items.length - 1);
85
+ const fills = items.filter(it => it.fillMain);
86
+ const free = mainLen - used;
87
+ if (fills.length)
88
+ for (const it of fills)
89
+ it.main = Math.max(0, free / fills.length);
90
+ const rest = fills.length ? 0 : Math.max(0, free);
91
+ // 3x3 alignment grid: column = horizontal position, row = vertical position.
92
+ const a = st.layoutAlignmentType ?? 0;
93
+ let hPos = a >= 9 ? a - 9 : a % 3;
94
+ const vPos = a >= 9 ? 0 : Math.floor(a / 3);
95
+ if (rtl && !row)
96
+ hPos = 2 - hPos; // a row mirrors its main axis below; a column's cross axis is horizontal
97
+ const mainPos = row ? hPos : vPos, crossPos = row ? vPos : hPos;
98
+ const between = a >= 9 && items.length > 1;
99
+ let cursor = between ? 0 : (rest * mainPos) / 2;
100
+ const step = between ? free / (items.length - 1) : 0;
101
+ if (a >= 9 && items.length === 1)
102
+ cursor = (rest * (a - 9)) / 2;
103
+ // Reversed main axis: lay out in order from the far end (mirrored positions).
104
+ for (const it of items) {
105
+ const start = cursor + (row ? it.m.l : it.m.t);
106
+ const crossOff = ((crossLen - it.cross - it.cm) * (a >= 9 ? a - 9 : crossPos)) / 2 + (row ? it.m.t : it.m.l);
107
+ const mainStart = reverse ? mainLen - start - it.main : start;
108
+ const box = row
109
+ ? { x: p.l + mainStart, y: p.t + crossOff, w: it.main, h: it.cross }
110
+ : { x: p.l + crossOff, y: p.t + mainStart, w: it.cross, h: it.main };
111
+ out.set(it.k.index, box);
112
+ cursor += it.main + it.mm + gap + step;
113
+ }
114
+ for (const k of all.filter(k => (style(k).positionTypeValue ?? 1) === 2)) {
115
+ const ks = style(k);
116
+ const kw = baseSize(k, 'w', iw, ih), kh = baseSize(k, 'h', iw, ih);
117
+ out.set(k.index, { x: val(ks.positionLeft, ks.positionLeftUnitsValue, w), y: val(ks.positionTop, ks.positionTopUnitsValue, h), w: kw, h: kh });
118
+ }
119
+ for (const k of all) {
120
+ const b = out.get(k.index);
121
+ if (b && k.type === 'LayoutComponent')
122
+ place(k, b.w, b.h);
123
+ }
124
+ };
125
+ const dirCache = new Map();
126
+ const dir = (o) => {
127
+ if (dirCache.has(o.index))
128
+ return dirCache.get(o.index);
129
+ const d = style(o).directionValue ?? 0;
130
+ const par = o.index === 0 ? null : s.byIndex[o.props.parentId ?? 0];
131
+ const v = d || (par ? dir(par) : 1);
132
+ dirCache.set(o.index, v);
133
+ return v;
134
+ };
135
+ // An artboard that hugs takes its content size.
136
+ const ast = style(artboard);
137
+ const W = (ast.layoutWidthScaleType ?? 0) === 2 ? hug(artboard, 'w') : artboard.props.width || 0;
138
+ const H = (ast.layoutHeightScaleType ?? 0) === 2 ? hug(artboard, 'h') : artboard.props.height || 0;
139
+ out.set(0, { x: 0, y: 0, w: W, h: H });
140
+ place(artboard, W, H);
141
+ return out;
142
+ }
143
+ export const isLayoutParticipant = participates;
144
+ export const isLayout = (o) => !!o && isA(o.type, 'LayoutComponent');
145
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["layout.ts"],"names":[],"mappings":"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"}