@bilalba/fig-mcp 1.0.1 → 1.1.3

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 (76) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +110 -55
  3. package/dist/index.js +55 -2
  4. package/dist/index.js.map +1 -1
  5. package/dist/inspect-fig.d.ts +1 -1
  6. package/dist/inspect-fig.d.ts.map +1 -1
  7. package/dist/inspect-fig.js +7 -3
  8. package/dist/inspect-fig.js.map +1 -1
  9. package/dist/web-viewer/build-client.d.ts +1 -0
  10. package/dist/web-viewer/build-client.d.ts.map +1 -1
  11. package/dist/web-viewer/build-client.js +32 -5
  12. package/dist/web-viewer/build-client.js.map +1 -1
  13. package/dist/web-viewer/client/dist/viewer.js +10 -0
  14. package/dist/web-viewer/client/index.html +138 -0
  15. package/dist/web-viewer/client/styles.css +561 -0
  16. package/package.json +6 -3
  17. package/dist/debug/debug-stroke-geom.d.ts +0 -2
  18. package/dist/debug/debug-stroke-geom.d.ts.map +0 -1
  19. package/dist/debug/debug-stroke-geom.js +0 -67
  20. package/dist/debug/debug-stroke-geom.js.map +0 -1
  21. package/dist/debug/debug-transforms.d.ts +0 -2
  22. package/dist/debug/debug-transforms.d.ts.map +0 -1
  23. package/dist/debug/debug-transforms.js +0 -97
  24. package/dist/debug/debug-transforms.js.map +0 -1
  25. package/dist/debug/debug-vertex.d.ts +0 -2
  26. package/dist/debug/debug-vertex.d.ts.map +0 -1
  27. package/dist/debug/debug-vertex.js +0 -72
  28. package/dist/debug/debug-vertex.js.map +0 -1
  29. package/dist/debug-group.d.ts +0 -5
  30. package/dist/debug-group.d.ts.map +0 -1
  31. package/dist/debug-group.js +0 -44
  32. package/dist/debug-group.js.map +0 -1
  33. package/dist/debug-stroke-geom.d.ts +0 -2
  34. package/dist/debug-stroke-geom.d.ts.map +0 -1
  35. package/dist/debug-stroke-geom.js +0 -67
  36. package/dist/debug-stroke-geom.js.map +0 -1
  37. package/dist/debug-transforms.d.ts +0 -2
  38. package/dist/debug-transforms.d.ts.map +0 -1
  39. package/dist/debug-transforms.js +0 -97
  40. package/dist/debug-transforms.js.map +0 -1
  41. package/dist/debug-vertex.d.ts +0 -2
  42. package/dist/debug-vertex.d.ts.map +0 -1
  43. package/dist/debug-vertex.js +0 -72
  44. package/dist/debug-vertex.js.map +0 -1
  45. package/dist/experimental/paint-utils.d.ts +0 -35
  46. package/dist/experimental/paint-utils.d.ts.map +0 -1
  47. package/dist/experimental/paint-utils.js +0 -105
  48. package/dist/experimental/paint-utils.js.map +0 -1
  49. package/dist/experimental/render-screen-v2.d.ts +0 -32
  50. package/dist/experimental/render-screen-v2.d.ts.map +0 -1
  51. package/dist/experimental/render-screen-v2.js +0 -366
  52. package/dist/experimental/render-screen-v2.js.map +0 -1
  53. package/dist/experimental/render-screen.d.ts +0 -26
  54. package/dist/experimental/render-screen.d.ts.map +0 -1
  55. package/dist/experimental/render-screen.js +0 -547
  56. package/dist/experimental/render-screen.js.map +0 -1
  57. package/dist/experimental/render-types.d.ts +0 -43
  58. package/dist/experimental/render-types.d.ts.map +0 -1
  59. package/dist/experimental/render-types.js +0 -22
  60. package/dist/experimental/render-types.js.map +0 -1
  61. package/dist/experimental/render-utils.d.ts +0 -38
  62. package/dist/experimental/render-utils.d.ts.map +0 -1
  63. package/dist/experimental/render-utils.js +0 -126
  64. package/dist/experimental/render-utils.js.map +0 -1
  65. package/dist/experimental/screenshot.d.ts +0 -11
  66. package/dist/experimental/screenshot.d.ts.map +0 -1
  67. package/dist/experimental/screenshot.js +0 -26
  68. package/dist/experimental/screenshot.js.map +0 -1
  69. package/dist/experimental/vector-renderer.d.ts +0 -31
  70. package/dist/experimental/vector-renderer.d.ts.map +0 -1
  71. package/dist/experimental/vector-renderer.js +0 -427
  72. package/dist/experimental/vector-renderer.js.map +0 -1
  73. package/dist/test-render-v2.d.ts +0 -5
  74. package/dist/test-render-v2.d.ts.map +0 -1
  75. package/dist/test-render-v2.js +0 -76
  76. package/dist/test-render-v2.js.map +0 -1
@@ -1,97 +0,0 @@
1
- /**
2
- * Debug transforms - show what transform data exists on nodes
3
- */
4
- import { readFigFile } from "../parser/index.js";
5
- import { parseCanvasFig, extractDocumentTree, formatGUID } from "../parser/kiwi-parser.js";
6
- const FILE_PATH = "/Users/billy/Downloads/AutoDevice (Copy).fig";
7
- const NODE_ID = process.argv[2] || "457:1681";
8
- function normalizeNodeId(nodeId) {
9
- let normalized = nodeId.trim();
10
- if (/^\d+-\d+$/.test(normalized)) {
11
- normalized = normalized.replace('-', ':');
12
- }
13
- return normalized;
14
- }
15
- async function debug() {
16
- const normalizedId = normalizeNodeId(NODE_ID);
17
- console.log("Node ID:", normalizedId);
18
- const archive = await readFigFile(FILE_PATH);
19
- const parsed = parseCanvasFig(archive.canvasFig);
20
- const doc = extractDocumentTree(parsed.message);
21
- if (!doc) {
22
- console.log("Failed to extract document");
23
- return;
24
- }
25
- const nodeIndex = new Map();
26
- function indexNode(node) {
27
- nodeIndex.set(formatGUID(node.guid), node);
28
- if (node.children) {
29
- for (const child of node.children) {
30
- indexNode(child);
31
- }
32
- }
33
- }
34
- indexNode(doc);
35
- const node = nodeIndex.get(normalizedId);
36
- if (!node) {
37
- console.log("Node not found:", normalizedId);
38
- return;
39
- }
40
- const sceneNode = node;
41
- console.log("\n=== ROOT NODE ===");
42
- console.log("Name:", node.name);
43
- console.log("Type:", node.type);
44
- console.log("x:", sceneNode.x);
45
- console.log("y:", sceneNode.y);
46
- console.log("width:", sceneNode.width);
47
- console.log("height:", sceneNode.height);
48
- console.log("transform:", sceneNode.transform);
49
- if (node.children) {
50
- console.log("\n=== CHILDREN ===");
51
- for (const child of node.children) {
52
- const childScene = child;
53
- console.log("\n--- Child:", child.name, "(", child.type, ") ---");
54
- console.log("x:", childScene.x);
55
- console.log("y:", childScene.y);
56
- console.log("width:", childScene.width);
57
- console.log("height:", childScene.height);
58
- console.log("transform:", childScene.transform);
59
- console.log("size:", childScene.size);
60
- console.log("vectorData?.normalizedSize:", childScene.vectorData?.normalizedSize);
61
- console.log("fillGeometry count:", childScene.fillGeometry?.length || 0);
62
- }
63
- }
64
- // Show what renderScreen uses vs what nodeToSvg uses
65
- console.log("\n=== TRANSFORM USAGE COMPARISON ===");
66
- console.log("\nrenderScreen (vector-renderer.ts):");
67
- console.log(" - Uses getLocalTransform() which reads node.transform matrix");
68
- console.log(" - Composes transforms: multiplyTransforms(parentTransform, localTransform)");
69
- console.log(" - Handles rotation properly");
70
- console.log("\nnodeToSvg (vector-export.ts):");
71
- console.log(" - Uses offset-based positioning only (x/y accumulation)");
72
- console.log(" - Creates identity-like transform with just scale");
73
- console.log(" - IGNORES node.transform matrix entirely!");
74
- // Check if children have transforms
75
- console.log("\n=== DO CHILDREN HAVE TRANSFORMS? ===");
76
- if (node.children) {
77
- for (const child of node.children) {
78
- const childScene = child;
79
- const hasTransform = childScene.transform != null;
80
- const isIdentity = childScene.transform &&
81
- Math.abs(childScene.transform.m00 - 1) < 0.001 &&
82
- Math.abs(childScene.transform.m01) < 0.001 &&
83
- Math.abs(childScene.transform.m10) < 0.001 &&
84
- Math.abs(childScene.transform.m11 - 1) < 0.001;
85
- console.log(`${child.name}:`);
86
- console.log(` hasTransform: ${hasTransform}`);
87
- if (hasTransform) {
88
- console.log(` isIdentity: ${isIdentity}`);
89
- console.log(` m00=${childScene.transform.m00}, m01=${childScene.transform.m01}`);
90
- console.log(` m10=${childScene.transform.m10}, m11=${childScene.transform.m11}`);
91
- console.log(` m02=${childScene.transform.m02}, m12=${childScene.transform.m12}`);
92
- }
93
- }
94
- }
95
- }
96
- debug().catch(console.error);
97
- //# sourceMappingURL=debug-transforms.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-transforms.js","sourceRoot":"","sources":["../../src/debug/debug-transforms.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=debug-vertex.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-vertex.d.ts","sourceRoot":"","sources":["../../src/debug/debug-vertex.ts"],"names":[],"mappings":""}
@@ -1,72 +0,0 @@
1
- /**
2
- * Debug vertex parsing for complex vector 457:1697
3
- */
4
- import { readFigFile } from "../parser/index.js";
5
- import { parseCanvasFig, formatGUID, extractDocumentTree } from "../parser/kiwi-parser.js";
6
- async function debug() {
7
- const archive = await readFigFile("/Users/billy/Downloads/AutoDevice (Copy).fig");
8
- const parsed = parseCanvasFig(archive.canvasFig);
9
- const doc = extractDocumentTree(parsed.message);
10
- if (!doc)
11
- return;
12
- const nodeIndex = new Map();
13
- function indexNode(node) {
14
- nodeIndex.set(formatGUID(node.guid), node);
15
- if (node.children) {
16
- for (const child of node.children) {
17
- indexNode(child);
18
- }
19
- }
20
- }
21
- indexNode(doc);
22
- const blobs = parsed.message["blobs"];
23
- const rawNode = nodeIndex.get("457:1697");
24
- if (!rawNode) {
25
- console.log("Node 457:1697 not found");
26
- return;
27
- }
28
- const node = rawNode;
29
- const vectorData = node.vectorData;
30
- if (!vectorData) {
31
- console.log("Node has no vectorData");
32
- return;
33
- }
34
- const blobIndex = vectorData.vectorNetworkBlob;
35
- const bytes = blobs[blobIndex].bytes;
36
- const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.length);
37
- console.log("Complex vector 457:1697");
38
- console.log("normalizedSize:", vectorData.normalizedSize);
39
- console.log("\nHeader:");
40
- console.log(" vertices:", view.getUint32(0, true));
41
- console.log(" segments:", view.getUint32(4, true));
42
- console.log(" regions:", view.getUint32(8, true));
43
- console.log("\nVertex raw bytes (16 bytes each):");
44
- for (let i = 0; i < 8; i++) {
45
- const offset = 12 + i * 16;
46
- const hexBytes = Buffer.from(bytes.slice(offset, offset + 16)).toString("hex");
47
- const x = view.getFloat32(offset, true);
48
- const y = view.getFloat32(offset + 4, true);
49
- const auxA = view.getFloat32(offset + 8, true);
50
- const auxB = view.getFloat32(offset + 12, true);
51
- console.log(` [${i}] hex: ${hexBytes}`);
52
- console.log(` x=${x.toFixed(2)}, y=${y.toFixed(2)}, auxA=${auxA.toFixed(2)}, auxB=${auxB.toFixed(2)}`);
53
- }
54
- console.log("\nSegment raw bytes (from offset 140):");
55
- const segmentStart = 12 + 8 * 16; // 140
56
- for (let i = 0; i < 8; i++) {
57
- const offset = segmentStart + i * 24;
58
- if (offset + 24 > bytes.length)
59
- break;
60
- const hexBytes = Buffer.from(bytes.slice(offset, offset + 24)).toString("hex");
61
- const s0 = view.getUint32(offset, true);
62
- const f1 = view.getFloat32(offset + 4, true);
63
- const f2 = view.getFloat32(offset + 8, true);
64
- const s1 = view.getUint32(offset + 12, true);
65
- const f3 = view.getFloat32(offset + 16, true);
66
- const f4 = view.getFloat32(offset + 20, true);
67
- console.log(` [${i}] hex: ${hexBytes}`);
68
- console.log(` ${s0} -> ${s1}, (${f1.toFixed(3)}, ${f2.toFixed(3)}), (${f3.toFixed(3)}, ${f4.toFixed(3)})`);
69
- }
70
- }
71
- debug().catch(console.error);
72
- //# sourceMappingURL=debug-vertex.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-vertex.js","sourceRoot":"","sources":["../../src/debug/debug-vertex.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Debug script to investigate node 457:1682 and its parent structure
3
- */
4
- export {};
5
- //# sourceMappingURL=debug-group.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-group.d.ts","sourceRoot":"","sources":["../src/debug-group.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,44 +0,0 @@
1
- /**
2
- * Debug script to investigate node 457:1682 and its parent structure
3
- */
4
- import { parseFigFile, buildNodeIdIndex, formatGUID } from "./parser/index.js";
5
- import { nodeToSvg } from "./vector-export.js";
6
- async function main() {
7
- const filePath = "/Users/billy/Downloads/AutoDevice (Copy).fig";
8
- console.log("Parsing fig file...");
9
- const parsed = await parseFigFile(filePath);
10
- const nodeIdIndex = buildNodeIdIndex(parsed.document);
11
- // Check parent node 457:1681
12
- const parent = nodeIdIndex.get("457:1681");
13
- if (parent) {
14
- const parentScene = parent;
15
- console.log("\n=== Parent Node 457:1681 ===");
16
- console.log("Type:", parent.type);
17
- console.log("Name:", parent.name);
18
- console.log("x:", parentScene.x);
19
- console.log("y:", parentScene.y);
20
- console.log("width:", parentScene.width ?? parentScene.size?.x);
21
- console.log("height:", parentScene.height ?? parentScene.size?.y);
22
- if (parent.children?.length) {
23
- console.log("\nChildren positions:");
24
- for (const child of parent.children) {
25
- const childScene = child;
26
- console.log(` ${formatGUID(child.guid)} ${child.name}:`);
27
- console.log(` x: ${childScene.x}, y: ${childScene.y}`);
28
- console.log(` width: ${childScene.width ?? childScene.size?.x}, height: ${childScene.height ?? childScene.size?.y}`);
29
- }
30
- }
31
- // Test nodeToSvg on parent
32
- try {
33
- const svg2 = nodeToSvg(parent, parsed.blobs);
34
- console.log("\nParent nodeToSvg result:");
35
- console.log(" SVG paths count:", (svg2.svgString.match(/<path/g) || []).length);
36
- console.log(" SVG:\n", svg2.svgString);
37
- }
38
- catch (err) {
39
- console.log("Error generating SVG for parent:", err);
40
- }
41
- }
42
- }
43
- main().catch(console.error);
44
- //# sourceMappingURL=debug-group.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-group.js","sourceRoot":"","sources":["../src/debug-group.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAgB,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG7D,KAAK,UAAU,IAAI;IACjB,MAAM,QAAQ,GAAG,8CAA8C,CAAC;IAEhE,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEtD,6BAA6B;IAC7B,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,WAAW,GAAG,MAA8B,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAElE,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACrC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpC,MAAM,UAAU,GAAG,KAA6B,CAAC;gBACjD,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;gBAC1D,OAAO,CAAC,GAAG,CAAC,UAAU,UAAU,CAAC,CAAC,QAAQ,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1D,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,aAAa,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1H,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YACjF,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=debug-stroke-geom.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-stroke-geom.d.ts","sourceRoot":"","sources":["../src/debug-stroke-geom.ts"],"names":[],"mappings":""}
@@ -1,67 +0,0 @@
1
- /**
2
- * Debug strokeGeometry for complex vector 457:1697
3
- */
4
- import { readFigFile } from "./parser/index.js";
5
- import { parseCanvasFig, formatGUID, extractDocumentTree } from "./parser/kiwi-parser.js";
6
- async function debug() {
7
- const archive = await readFigFile("/Users/billy/Downloads/AutoDevice (Copy).fig");
8
- const parsed = parseCanvasFig(archive.canvasFig);
9
- const doc = extractDocumentTree(parsed.message);
10
- if (!doc)
11
- return;
12
- const nodeIndex = new Map();
13
- function indexNode(node) {
14
- nodeIndex.set(formatGUID(node.guid), node);
15
- if (node.children) {
16
- for (const child of node.children) {
17
- indexNode(child);
18
- }
19
- }
20
- }
21
- indexNode(doc);
22
- const blobs = parsed.message["blobs"];
23
- // Check all 3 vectors in frame 457:1694
24
- for (const id of ["457:1695", "457:1696", "457:1697"]) {
25
- const rawNode = nodeIndex.get(id);
26
- if (!rawNode) {
27
- console.log(`Node ${id} not found`);
28
- continue;
29
- }
30
- const node = rawNode;
31
- console.log(`\n${"=".repeat(60)}`);
32
- console.log(`Node ${id}: ${node.name}`);
33
- console.log("fillGeometry:", JSON.stringify(node.fillGeometry, null, 2));
34
- console.log("strokeGeometry:", JSON.stringify(node.strokeGeometry, null, 2));
35
- // If strokeGeometry has commandsBlob, decode it
36
- const strokeGeom = node.strokeGeometry;
37
- if (strokeGeom?.[0]?.commandsBlob !== undefined && blobs) {
38
- const blobIdx = strokeGeom[0].commandsBlob;
39
- const bytes = blobs[blobIdx].bytes;
40
- console.log(`\nstrokeGeometry[0].commandsBlob (${bytes.length} bytes):`);
41
- // Decode path commands
42
- const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.length);
43
- const cmdNames = { 0: "Z", 1: "M", 2: "L", 3: "Q", 4: "C", 5: "Q2" };
44
- const argCounts = { 0: 0, 1: 2, 2: 2, 3: 4, 4: 6, 5: 4 };
45
- let offset = 0;
46
- const cmds = [];
47
- while (offset < bytes.length) {
48
- const cmd = bytes[offset++];
49
- const name = cmdNames[cmd] ?? `?${cmd}`;
50
- const argCount = argCounts[cmd];
51
- if (argCount === undefined) {
52
- cmds.push(`${name}(unknown)`);
53
- break;
54
- }
55
- const args = [];
56
- for (let i = 0; i < argCount && offset + 4 <= bytes.length; i++) {
57
- args.push(view.getFloat32(offset, true));
58
- offset += 4;
59
- }
60
- cmds.push(`${name}(${args.map(a => a.toFixed(2)).join(", ")})`);
61
- }
62
- console.log(cmds.join(" → "));
63
- }
64
- }
65
- }
66
- debug().catch(console.error);
67
- //# sourceMappingURL=debug-stroke-geom.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-stroke-geom.js","sourceRoot":"","sources":["../src/debug-stroke-geom.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=debug-transforms.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-transforms.d.ts","sourceRoot":"","sources":["../src/debug-transforms.ts"],"names":[],"mappings":""}
@@ -1,97 +0,0 @@
1
- /**
2
- * Debug transforms - show what transform data exists on nodes
3
- */
4
- import { readFigFile } from "./parser/index.js";
5
- import { parseCanvasFig, extractDocumentTree, formatGUID } from "./parser/kiwi-parser.js";
6
- const FILE_PATH = "/Users/billy/Downloads/AutoDevice (Copy).fig";
7
- const NODE_ID = process.argv[2] || "457:1681";
8
- function normalizeNodeId(nodeId) {
9
- let normalized = nodeId.trim();
10
- if (/^\d+-\d+$/.test(normalized)) {
11
- normalized = normalized.replace('-', ':');
12
- }
13
- return normalized;
14
- }
15
- async function debug() {
16
- const normalizedId = normalizeNodeId(NODE_ID);
17
- console.log("Node ID:", normalizedId);
18
- const archive = await readFigFile(FILE_PATH);
19
- const parsed = parseCanvasFig(archive.canvasFig);
20
- const doc = extractDocumentTree(parsed.message);
21
- if (!doc) {
22
- console.log("Failed to extract document");
23
- return;
24
- }
25
- const nodeIndex = new Map();
26
- function indexNode(node) {
27
- nodeIndex.set(formatGUID(node.guid), node);
28
- if (node.children) {
29
- for (const child of node.children) {
30
- indexNode(child);
31
- }
32
- }
33
- }
34
- indexNode(doc);
35
- const node = nodeIndex.get(normalizedId);
36
- if (!node) {
37
- console.log("Node not found:", normalizedId);
38
- return;
39
- }
40
- const sceneNode = node;
41
- console.log("\n=== ROOT NODE ===");
42
- console.log("Name:", node.name);
43
- console.log("Type:", node.type);
44
- console.log("x:", sceneNode.x);
45
- console.log("y:", sceneNode.y);
46
- console.log("width:", sceneNode.width);
47
- console.log("height:", sceneNode.height);
48
- console.log("transform:", sceneNode.transform);
49
- if (node.children) {
50
- console.log("\n=== CHILDREN ===");
51
- for (const child of node.children) {
52
- const childScene = child;
53
- console.log("\n--- Child:", child.name, "(", child.type, ") ---");
54
- console.log("x:", childScene.x);
55
- console.log("y:", childScene.y);
56
- console.log("width:", childScene.width);
57
- console.log("height:", childScene.height);
58
- console.log("transform:", childScene.transform);
59
- console.log("size:", childScene.size);
60
- console.log("vectorData?.normalizedSize:", childScene.vectorData?.normalizedSize);
61
- console.log("fillGeometry count:", childScene.fillGeometry?.length || 0);
62
- }
63
- }
64
- // Show what renderScreenV2 uses vs what nodeToSvg uses
65
- console.log("\n=== TRANSFORM USAGE COMPARISON ===");
66
- console.log("\nrenderScreenV2 (vector-renderer.ts):");
67
- console.log(" - Uses getLocalTransform() which reads node.transform matrix");
68
- console.log(" - Composes transforms: multiplyTransforms(parentTransform, localTransform)");
69
- console.log(" - Handles rotation properly");
70
- console.log("\nnodeToSvg (vector-export.ts):");
71
- console.log(" - Uses offset-based positioning only (x/y accumulation)");
72
- console.log(" - Creates identity-like transform with just scale");
73
- console.log(" - IGNORES node.transform matrix entirely!");
74
- // Check if children have transforms
75
- console.log("\n=== DO CHILDREN HAVE TRANSFORMS? ===");
76
- if (node.children) {
77
- for (const child of node.children) {
78
- const childScene = child;
79
- const hasTransform = childScene.transform != null;
80
- const isIdentity = childScene.transform &&
81
- Math.abs(childScene.transform.m00 - 1) < 0.001 &&
82
- Math.abs(childScene.transform.m01) < 0.001 &&
83
- Math.abs(childScene.transform.m10) < 0.001 &&
84
- Math.abs(childScene.transform.m11 - 1) < 0.001;
85
- console.log(`${child.name}:`);
86
- console.log(` hasTransform: ${hasTransform}`);
87
- if (hasTransform) {
88
- console.log(` isIdentity: ${isIdentity}`);
89
- console.log(` m00=${childScene.transform.m00}, m01=${childScene.transform.m01}`);
90
- console.log(` m10=${childScene.transform.m10}, m11=${childScene.transform.m11}`);
91
- console.log(` m02=${childScene.transform.m02}, m12=${childScene.transform.m12}`);
92
- }
93
- }
94
- }
95
- }
96
- debug().catch(console.error);
97
- //# sourceMappingURL=debug-transforms.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-transforms.js","sourceRoot":"","sources":["../src/debug-transforms.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=debug-vertex.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-vertex.d.ts","sourceRoot":"","sources":["../src/debug-vertex.ts"],"names":[],"mappings":""}
@@ -1,72 +0,0 @@
1
- /**
2
- * Debug vertex parsing for complex vector 457:1697
3
- */
4
- import { readFigFile } from "./parser/index.js";
5
- import { parseCanvasFig, formatGUID, extractDocumentTree } from "./parser/kiwi-parser.js";
6
- async function debug() {
7
- const archive = await readFigFile("/Users/billy/Downloads/AutoDevice (Copy).fig");
8
- const parsed = parseCanvasFig(archive.canvasFig);
9
- const doc = extractDocumentTree(parsed.message);
10
- if (!doc)
11
- return;
12
- const nodeIndex = new Map();
13
- function indexNode(node) {
14
- nodeIndex.set(formatGUID(node.guid), node);
15
- if (node.children) {
16
- for (const child of node.children) {
17
- indexNode(child);
18
- }
19
- }
20
- }
21
- indexNode(doc);
22
- const blobs = parsed.message["blobs"];
23
- const rawNode = nodeIndex.get("457:1697");
24
- if (!rawNode) {
25
- console.log("Node 457:1697 not found");
26
- return;
27
- }
28
- const node = rawNode;
29
- const vectorData = node.vectorData;
30
- if (!vectorData) {
31
- console.log("Node has no vectorData");
32
- return;
33
- }
34
- const blobIndex = vectorData.vectorNetworkBlob;
35
- const bytes = blobs[blobIndex].bytes;
36
- const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.length);
37
- console.log("Complex vector 457:1697");
38
- console.log("normalizedSize:", vectorData.normalizedSize);
39
- console.log("\nHeader:");
40
- console.log(" vertices:", view.getUint32(0, true));
41
- console.log(" segments:", view.getUint32(4, true));
42
- console.log(" regions:", view.getUint32(8, true));
43
- console.log("\nVertex raw bytes (16 bytes each):");
44
- for (let i = 0; i < 8; i++) {
45
- const offset = 12 + i * 16;
46
- const hexBytes = Buffer.from(bytes.slice(offset, offset + 16)).toString("hex");
47
- const x = view.getFloat32(offset, true);
48
- const y = view.getFloat32(offset + 4, true);
49
- const v2 = view.getFloat32(offset + 8, true);
50
- const v3 = view.getFloat32(offset + 12, true);
51
- console.log(` [${i}] hex: ${hexBytes}`);
52
- console.log(` x=${x.toFixed(2)}, y=${y.toFixed(2)}, v2=${v2.toFixed(2)}, v3=${v3.toFixed(2)}`);
53
- }
54
- console.log("\nSegment raw bytes (from offset 140):");
55
- const segmentStart = 12 + 8 * 16; // 140
56
- for (let i = 0; i < 8; i++) {
57
- const offset = segmentStart + i * 24;
58
- if (offset + 24 > bytes.length)
59
- break;
60
- const hexBytes = Buffer.from(bytes.slice(offset, offset + 24)).toString("hex");
61
- const s0 = view.getUint32(offset, true);
62
- const f1 = view.getFloat32(offset + 4, true);
63
- const f2 = view.getFloat32(offset + 8, true);
64
- const s1 = view.getUint32(offset + 12, true);
65
- const f3 = view.getFloat32(offset + 16, true);
66
- const f4 = view.getFloat32(offset + 20, true);
67
- console.log(` [${i}] hex: ${hexBytes}`);
68
- console.log(` ${s0} -> ${s1}, (${f1.toFixed(3)}, ${f2.toFixed(3)}), (${f3.toFixed(3)}, ${f4.toFixed(3)})`);
69
- }
70
- }
71
- debug().catch(console.error);
72
- //# sourceMappingURL=debug-vertex.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-vertex.js","sourceRoot":"","sources":["../src/debug-vertex.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- /**
2
- * Paint handling utilities for SVG rendering
3
- */
4
- import type { FigNode, Paint } from "../parser/types.js";
5
- /**
6
- * Get paints array from a node (handles both 'fills'/'strokes' and 'fillPaints'/'strokePaints').
7
- */
8
- export declare function getPaints(node: FigNode, key: "fills" | "strokes"): Paint[] | undefined;
9
- /**
10
- * Get the first visible paint from an array.
11
- */
12
- export declare function getVisiblePaint(paints: Paint[] | undefined): Paint | undefined;
13
- /**
14
- * Convert a paint to a CSS color string.
15
- * Returns undefined if the paint is not visible or not a solid color.
16
- */
17
- export declare function paintToColor(paint: Paint | undefined): string | undefined;
18
- /**
19
- * Normalize an image hash from various formats to a hex string.
20
- * Handles: string, array of bytes, object with hash property, or object with numeric keys.
21
- */
22
- export declare function normalizeImageHash(value: unknown): string | null;
23
- /**
24
- * Extract image hash from a paint object.
25
- */
26
- export declare function paintToImageHash(paint: Paint | undefined): string | null;
27
- /**
28
- * Detect image format from binary data.
29
- */
30
- export declare function detectImageFormat(data: Uint8Array): string;
31
- /**
32
- * Get MIME type for image format.
33
- */
34
- export declare function getMimeType(format: string): string;
35
- //# sourceMappingURL=paint-utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"paint-utils.d.ts","sourceRoot":"","sources":["../../src/experimental/paint-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAGzD;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,GAAG,SAAS,GAAG,KAAK,EAAE,GAAG,SAAS,CAItF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,CAG9E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAOzE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAkChE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAIxE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAM1D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQlD"}