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.
- package/MCP_DOCUMENTATION.md +1 -0
- package/SKILL.md +10 -0
- package/examples/aurum-product-page.exode +3208 -0
- package/examples/bell-ring-icon.exode +1 -0
- package/examples/drift-kinetic-type.exode +770 -0
- package/examples/earbuds-product.exode +214 -0
- package/examples/energy-flow.exode +1736 -0
- package/examples/flux-hero.exode +223 -0
- package/examples/gooey-toggle.exode +214 -0
- package/examples/gravity-well.exode +3113 -0
- package/examples/heart-icon.exode +1 -0
- package/examples/hologram-temple.exode +8100 -0
- package/examples/jarful-app.exode +1 -0
- package/examples/kip-character-rig.exode +1 -0
- package/examples/low-tide-tilt.exode +2216 -0
- package/examples/manifest.json +352 -0
- package/examples/swipe-stack-carousel.exode +4048 -0
- package/examples/tokyo-neon-weather.exode +470 -0
- package/examples/typographic-collapse.exode +1578 -0
- package/examples/void-product-ad.exode +1269 -0
- package/examples/wire-globe-card.exode +580 -0
- package/index.d.ts +41 -1
- package/index.js +2553 -2407
- package/package.json +4 -2
- package/render-runtime/exode-runtime.js +20 -20
- package/skills/creative-motion/SKILL.md +10 -0
- package/skills/creative-motion/recipes/character-rig.js +104 -0
- package/skills/creative-motion/recipes/dashboard.js +120 -0
- package/skills/creative-motion/recipes/game-arcade.js +203 -0
- package/skills/creative-motion/recipes/hero-physics.js +65 -0
- package/skills/creative-motion/recipes/pricing.js +88 -0
- package/skills/creative-motion/recipes/title-sequence.js +62 -0
- package/skills/creative-motion/references/apps.md +37 -0
- package/skills/creative-motion/references/gotchas.md +80 -0
- package/skills/creative-motion/references/native-layers.md +60 -0
- package/skills/creative-motion/references/quality.md +54 -0
- package/src/__tests__/buildKit.test.ts +127 -0
- package/src/__tests__/effectKnobs.test.ts +162 -0
- package/src/__tests__/nativeLayers.test.ts +178 -0
- package/src/buildKit.d.ts +301 -0
- package/src/buildKit.d.ts.map +1 -0
- package/src/buildKit.js +559 -0
- package/src/buildKit.js.map +1 -0
- package/src/buildKit.ts +520 -0
- package/src/compiler.d.ts +4 -0
- package/src/compiler.d.ts.map +1 -1
- package/src/compiler.js +21 -45
- package/src/compiler.js.map +1 -1
- package/src/compiler.ts +22 -51
- package/src/critique.d.ts +8 -0
- package/src/critique.d.ts.map +1 -0
- package/src/critique.js +348 -0
- package/src/critique.js.map +1 -0
- package/src/critique.ts +239 -0
- package/src/effectKnobs.d.ts +72 -0
- package/src/effectKnobs.d.ts.map +1 -0
- package/src/effectKnobs.js +541 -0
- package/src/effectKnobs.js.map +1 -0
- package/src/effectKnobs.ts +445 -0
- package/src/effectOptimizer.d.ts +18 -0
- package/src/effectOptimizer.d.ts.map +1 -0
- package/src/effectOptimizer.js +125 -0
- package/src/effectOptimizer.js.map +1 -0
- package/src/effectOptimizer.ts +104 -0
- package/src/engine/layout.js +1 -1
- package/src/engine/layout.js.map +1 -1
- package/src/engine/layout.ts +1 -1
- package/src/examples.d.ts +30 -0
- package/src/examples.d.ts.map +1 -0
- package/src/examples.js +168 -0
- package/src/examples.js.map +1 -0
- package/src/examples.ts +151 -0
- package/src/handlers/artboardHandlers.d.ts.map +1 -1
- package/src/handlers/artboardHandlers.js +45 -10
- package/src/handlers/artboardHandlers.js.map +1 -1
- package/src/handlers/artboardHandlers.ts +43 -12
- package/src/handlers/buildHandlers.d.ts +2 -0
- package/src/handlers/buildHandlers.d.ts.map +1 -0
- package/src/handlers/buildHandlers.js +86 -0
- package/src/handlers/buildHandlers.js.map +1 -0
- package/src/handlers/buildHandlers.ts +76 -0
- package/src/handlers/compilerHandlers.d.ts.map +1 -1
- package/src/handlers/compilerHandlers.js +32 -2
- package/src/handlers/compilerHandlers.js.map +1 -1
- package/src/handlers/compilerHandlers.ts +31 -2
- package/src/handlers/exampleHandlers.d.ts +2 -0
- package/src/handlers/exampleHandlers.d.ts.map +1 -0
- package/src/handlers/exampleHandlers.js +81 -0
- package/src/handlers/exampleHandlers.js.map +1 -0
- package/src/handlers/exampleHandlers.ts +76 -0
- package/src/handlers/renderHandlers.d.ts.map +1 -1
- package/src/handlers/renderHandlers.js +100 -2
- package/src/handlers/renderHandlers.js.map +1 -1
- package/src/handlers/renderHandlers.ts +90 -2
- package/src/handlers/scaffoldHandlers.d.ts.map +1 -1
- package/src/handlers/scaffoldHandlers.js +3 -0
- package/src/handlers/scaffoldHandlers.js.map +1 -1
- package/src/handlers/scaffoldHandlers.ts +2 -0
- package/src/handlers/widgetHandlers.js +1 -1
- package/src/handlers/widgetHandlers.js.map +1 -1
- package/src/handlers/widgetHandlers.ts +1 -1
- package/src/lottie/convert.d.ts +16 -0
- package/src/lottie/convert.d.ts.map +1 -0
- package/src/lottie/convert.js +1225 -0
- package/src/lottie/convert.js.map +1 -0
- package/src/lottie/convert.ts +1134 -0
- package/src/lottie/evaluate.d.ts +48 -0
- package/src/lottie/evaluate.d.ts.map +1 -0
- package/src/lottie/evaluate.js +174 -0
- package/src/lottie/evaluate.js.map +1 -0
- package/src/lottie/evaluate.ts +184 -0
- package/src/nativeLayers.d.ts +76 -0
- package/src/nativeLayers.d.ts.map +1 -0
- package/src/nativeLayers.js +404 -0
- package/src/nativeLayers.js.map +1 -0
- package/src/nativeLayers.ts +339 -0
- package/src/render/motionBrief.d.ts.map +1 -1
- package/src/render/motionBrief.js +4 -0
- package/src/render/motionBrief.js.map +1 -1
- package/src/render/motionBrief.ts +4 -0
- package/src/render/videoRenderer.d.ts.map +1 -1
- package/src/render/videoRenderer.js +5 -2
- package/src/render/videoRenderer.js.map +1 -1
- package/src/render/videoRenderer.ts +5 -2
- package/src/rive/convert.d.ts +17 -0
- package/src/rive/convert.d.ts.map +1 -0
- package/src/rive/convert.js +1779 -0
- package/src/rive/convert.js.map +1 -0
- package/src/rive/convert.ts +1492 -0
- package/src/rive/font.d.ts +13 -0
- package/src/rive/font.d.ts.map +1 -0
- package/src/rive/font.js +154 -0
- package/src/rive/font.js.map +1 -0
- package/src/rive/font.ts +132 -0
- package/src/rive/layout.d.ts +20 -0
- package/src/rive/layout.d.ts.map +1 -0
- package/src/rive/layout.js +145 -0
- package/src/rive/layout.js.map +1 -0
- package/src/rive/layout.ts +140 -0
- package/src/rive/reader.d.ts +32 -0
- package/src/rive/reader.d.ts.map +1 -0
- package/src/rive/reader.js +172 -0
- package/src/rive/reader.js.map +1 -0
- package/src/rive/reader.ts +160 -0
- package/src/rive/schema.generated.d.ts +9 -0
- package/src/rive/schema.generated.d.ts.map +1 -0
- package/src/rive/schema.generated.js +13 -0
- package/src/rive/schema.generated.js.map +1 -0
- package/src/rive/schema.generated.ts +13 -0
- package/src/schema.d.ts +5 -0
- package/src/schema.d.ts.map +1 -1
- package/src/schema.js +5 -0
- package/src/schema.js.map +1 -1
- package/src/schema.ts +6 -0
- package/src/serverInstructions.d.ts +2 -0
- package/src/serverInstructions.d.ts.map +1 -0
- package/src/serverInstructions.js +22 -0
- package/src/serverInstructions.js.map +1 -0
- package/src/serverInstructions.ts +21 -0
- package/src/sseServer.d.ts +2 -0
- package/src/sseServer.d.ts.map +1 -0
- package/src/sseServer.js +165 -0
- package/src/sseServer.js.map +1 -0
- package/src/sseServer.ts +189 -0
- package/src/utils.d.ts.map +1 -1
- package/src/utils.js +23 -1
- package/src/utils.js.map +1 -1
- package/src/utils.ts +13 -1
- package/src/widgets.d.ts +26 -0
- package/src/widgets.d.ts.map +1 -1
- package/src/widgets.js +89 -45
- package/src/widgets.js.map +1 -1
- 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"}
|
package/src/rive/font.js
ADDED
|
@@ -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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"}
|
package/src/rive/font.ts
ADDED
|
@@ -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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"}
|