@bilalba/fig-mcp 1.0.0

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 (186) hide show
  1. package/README.md +112 -0
  2. package/dist/compare-get-vector.d.ts +2 -0
  3. package/dist/compare-get-vector.d.ts.map +1 -0
  4. package/dist/compare-get-vector.js +124 -0
  5. package/dist/compare-get-vector.js.map +1 -0
  6. package/dist/compare-mcp-vs-direct.d.ts +2 -0
  7. package/dist/compare-mcp-vs-direct.d.ts.map +1 -0
  8. package/dist/compare-mcp-vs-direct.js +173 -0
  9. package/dist/compare-mcp-vs-direct.js.map +1 -0
  10. package/dist/compare-renderers.d.ts +2 -0
  11. package/dist/compare-renderers.d.ts.map +1 -0
  12. package/dist/compare-renderers.js +110 -0
  13. package/dist/compare-renderers.js.map +1 -0
  14. package/dist/debug/debug-stroke-geom.d.ts +2 -0
  15. package/dist/debug/debug-stroke-geom.d.ts.map +1 -0
  16. package/dist/debug/debug-stroke-geom.js +67 -0
  17. package/dist/debug/debug-stroke-geom.js.map +1 -0
  18. package/dist/debug/debug-transforms.d.ts +2 -0
  19. package/dist/debug/debug-transforms.d.ts.map +1 -0
  20. package/dist/debug/debug-transforms.js +97 -0
  21. package/dist/debug/debug-transforms.js.map +1 -0
  22. package/dist/debug/debug-vertex.d.ts +2 -0
  23. package/dist/debug/debug-vertex.d.ts.map +1 -0
  24. package/dist/debug/debug-vertex.js +72 -0
  25. package/dist/debug/debug-vertex.js.map +1 -0
  26. package/dist/debug-group.d.ts +5 -0
  27. package/dist/debug-group.d.ts.map +1 -0
  28. package/dist/debug-group.js +44 -0
  29. package/dist/debug-group.js.map +1 -0
  30. package/dist/debug-stroke-geom.d.ts +2 -0
  31. package/dist/debug-stroke-geom.d.ts.map +1 -0
  32. package/dist/debug-stroke-geom.js +67 -0
  33. package/dist/debug-stroke-geom.js.map +1 -0
  34. package/dist/debug-transforms.d.ts +2 -0
  35. package/dist/debug-transforms.d.ts.map +1 -0
  36. package/dist/debug-transforms.js +97 -0
  37. package/dist/debug-transforms.js.map +1 -0
  38. package/dist/debug-vertex.d.ts +2 -0
  39. package/dist/debug-vertex.d.ts.map +1 -0
  40. package/dist/debug-vertex.js +72 -0
  41. package/dist/debug-vertex.js.map +1 -0
  42. package/dist/decode-vector-network.d.ts +5 -0
  43. package/dist/decode-vector-network.d.ts.map +1 -0
  44. package/dist/decode-vector-network.js +160 -0
  45. package/dist/decode-vector-network.js.map +1 -0
  46. package/dist/experimental/paint-utils.d.ts +35 -0
  47. package/dist/experimental/paint-utils.d.ts.map +1 -0
  48. package/dist/experimental/paint-utils.js +105 -0
  49. package/dist/experimental/paint-utils.js.map +1 -0
  50. package/dist/experimental/render-screen-v2.d.ts +32 -0
  51. package/dist/experimental/render-screen-v2.d.ts.map +1 -0
  52. package/dist/experimental/render-screen-v2.js +366 -0
  53. package/dist/experimental/render-screen-v2.js.map +1 -0
  54. package/dist/experimental/render-screen.d.ts +26 -0
  55. package/dist/experimental/render-screen.d.ts.map +1 -0
  56. package/dist/experimental/render-screen.js +547 -0
  57. package/dist/experimental/render-screen.js.map +1 -0
  58. package/dist/experimental/render-types.d.ts +43 -0
  59. package/dist/experimental/render-types.d.ts.map +1 -0
  60. package/dist/experimental/render-types.js +22 -0
  61. package/dist/experimental/render-types.js.map +1 -0
  62. package/dist/experimental/render-utils.d.ts +38 -0
  63. package/dist/experimental/render-utils.d.ts.map +1 -0
  64. package/dist/experimental/render-utils.js +126 -0
  65. package/dist/experimental/render-utils.js.map +1 -0
  66. package/dist/experimental/screenshot.d.ts +11 -0
  67. package/dist/experimental/screenshot.d.ts.map +1 -0
  68. package/dist/experimental/screenshot.js +26 -0
  69. package/dist/experimental/screenshot.js.map +1 -0
  70. package/dist/experimental/vector-renderer.d.ts +31 -0
  71. package/dist/experimental/vector-renderer.d.ts.map +1 -0
  72. package/dist/experimental/vector-renderer.js +427 -0
  73. package/dist/experimental/vector-renderer.js.map +1 -0
  74. package/dist/explore-images.d.ts +9 -0
  75. package/dist/explore-images.d.ts.map +1 -0
  76. package/dist/explore-images.js +307 -0
  77. package/dist/explore-images.js.map +1 -0
  78. package/dist/http-server.d.ts +8 -0
  79. package/dist/http-server.d.ts.map +1 -0
  80. package/dist/http-server.js +95 -0
  81. package/dist/http-server.js.map +1 -0
  82. package/dist/index.d.ts +9 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +34 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/inspect-fig.d.ts +16 -0
  87. package/dist/inspect-fig.d.ts.map +1 -0
  88. package/dist/inspect-fig.js +134 -0
  89. package/dist/inspect-fig.js.map +1 -0
  90. package/dist/inspect-frame.d.ts +2 -0
  91. package/dist/inspect-frame.d.ts.map +1 -0
  92. package/dist/inspect-frame.js +90 -0
  93. package/dist/inspect-frame.js.map +1 -0
  94. package/dist/inspect-nodes.d.ts +5 -0
  95. package/dist/inspect-nodes.d.ts.map +1 -0
  96. package/dist/inspect-nodes.js +193 -0
  97. package/dist/inspect-nodes.js.map +1 -0
  98. package/dist/mcp/server.d.ts +38 -0
  99. package/dist/mcp/server.d.ts.map +1 -0
  100. package/dist/mcp/server.js +1524 -0
  101. package/dist/mcp/server.js.map +1 -0
  102. package/dist/parser/fig-reader.d.ts +29 -0
  103. package/dist/parser/fig-reader.d.ts.map +1 -0
  104. package/dist/parser/fig-reader.js +182 -0
  105. package/dist/parser/fig-reader.js.map +1 -0
  106. package/dist/parser/index.d.ts +48 -0
  107. package/dist/parser/index.d.ts.map +1 -0
  108. package/dist/parser/index.js +106 -0
  109. package/dist/parser/index.js.map +1 -0
  110. package/dist/parser/kiwi-parser.d.ts +66 -0
  111. package/dist/parser/kiwi-parser.d.ts.map +1 -0
  112. package/dist/parser/kiwi-parser.js +491 -0
  113. package/dist/parser/kiwi-parser.js.map +1 -0
  114. package/dist/parser/layout-inference.d.ts +63 -0
  115. package/dist/parser/layout-inference.d.ts.map +1 -0
  116. package/dist/parser/layout-inference.js +446 -0
  117. package/dist/parser/layout-inference.js.map +1 -0
  118. package/dist/parser/types.d.ts +286 -0
  119. package/dist/parser/types.d.ts.map +1 -0
  120. package/dist/parser/types.js +6 -0
  121. package/dist/parser/types.js.map +1 -0
  122. package/dist/render-single.d.ts +2 -0
  123. package/dist/render-single.d.ts.map +1 -0
  124. package/dist/render-single.js +53 -0
  125. package/dist/render-single.js.map +1 -0
  126. package/dist/renderer/index.d.ts +16 -0
  127. package/dist/renderer/index.d.ts.map +1 -0
  128. package/dist/renderer/index.js +18 -0
  129. package/dist/renderer/index.js.map +1 -0
  130. package/dist/renderer/paint-utils.d.ts +35 -0
  131. package/dist/renderer/paint-utils.d.ts.map +1 -0
  132. package/dist/renderer/paint-utils.js +105 -0
  133. package/dist/renderer/paint-utils.js.map +1 -0
  134. package/dist/renderer/render-screen.d.ts +26 -0
  135. package/dist/renderer/render-screen.d.ts.map +1 -0
  136. package/dist/renderer/render-screen.js +547 -0
  137. package/dist/renderer/render-screen.js.map +1 -0
  138. package/dist/renderer/render-types.d.ts +43 -0
  139. package/dist/renderer/render-types.d.ts.map +1 -0
  140. package/dist/renderer/render-types.js +22 -0
  141. package/dist/renderer/render-types.js.map +1 -0
  142. package/dist/renderer/render-utils.d.ts +38 -0
  143. package/dist/renderer/render-utils.d.ts.map +1 -0
  144. package/dist/renderer/render-utils.js +126 -0
  145. package/dist/renderer/render-utils.js.map +1 -0
  146. package/dist/renderer/screenshot.d.ts +11 -0
  147. package/dist/renderer/screenshot.d.ts.map +1 -0
  148. package/dist/renderer/screenshot.js +26 -0
  149. package/dist/renderer/screenshot.js.map +1 -0
  150. package/dist/renderer/vector-renderer.d.ts +31 -0
  151. package/dist/renderer/vector-renderer.d.ts.map +1 -0
  152. package/dist/renderer/vector-renderer.js +427 -0
  153. package/dist/renderer/vector-renderer.js.map +1 -0
  154. package/dist/shared-config.d.ts +9 -0
  155. package/dist/shared-config.d.ts.map +1 -0
  156. package/dist/shared-config.js +9 -0
  157. package/dist/shared-config.js.map +1 -0
  158. package/dist/test-parser.d.ts +3 -0
  159. package/dist/test-parser.d.ts.map +1 -0
  160. package/dist/test-parser.js +74 -0
  161. package/dist/test-parser.js.map +1 -0
  162. package/dist/test-render-v2.d.ts +5 -0
  163. package/dist/test-render-v2.d.ts.map +1 -0
  164. package/dist/test-render-v2.js +76 -0
  165. package/dist/test-render-v2.js.map +1 -0
  166. package/dist/test-render.d.ts +5 -0
  167. package/dist/test-render.d.ts.map +1 -0
  168. package/dist/test-render.js +76 -0
  169. package/dist/test-render.js.map +1 -0
  170. package/dist/vector-export.d.ts +52 -0
  171. package/dist/vector-export.d.ts.map +1 -0
  172. package/dist/vector-export.js +628 -0
  173. package/dist/vector-export.js.map +1 -0
  174. package/dist/web-viewer/build-client.d.ts +6 -0
  175. package/dist/web-viewer/build-client.d.ts.map +1 -0
  176. package/dist/web-viewer/build-client.js +36 -0
  177. package/dist/web-viewer/build-client.js.map +1 -0
  178. package/dist/web-viewer/client/viewer.d.ts +7 -0
  179. package/dist/web-viewer/client/viewer.d.ts.map +1 -0
  180. package/dist/web-viewer/client/viewer.js +873 -0
  181. package/dist/web-viewer/client/viewer.js.map +1 -0
  182. package/dist/web-viewer/server.d.ts +16 -0
  183. package/dist/web-viewer/server.d.ts.map +1 -0
  184. package/dist/web-viewer/server.js +420 -0
  185. package/dist/web-viewer/server.js.map +1 -0
  186. package/package.json +66 -0
@@ -0,0 +1,286 @@
1
+ /**
2
+ * Core types for .fig file parsing
3
+ * These types represent the structure of .fig documents
4
+ */
5
+ export interface GUID {
6
+ sessionID: number;
7
+ localID: number;
8
+ }
9
+ export type NodeType = "DOCUMENT" | "CANVAS" | "FRAME" | "GROUP" | "VECTOR" | "BOOLEAN_OPERATION" | "STAR" | "LINE" | "ELLIPSE" | "REGULAR_POLYGON" | "RECTANGLE" | "TEXT" | "SLICE" | "COMPONENT" | "COMPONENT_SET" | "INSTANCE" | "STICKY" | "SHAPE_WITH_TEXT" | "CONNECTOR" | "SECTION" | "TABLE" | "TABLE_CELL" | "WIDGET" | "STAMP" | "HIGHLIGHT" | "WASHI_TAPE" | "EMBED" | "LINK_UNFURL" | "MEDIA" | "CODE_BLOCK";
10
+ export interface Color {
11
+ r: number;
12
+ g: number;
13
+ b: number;
14
+ a: number;
15
+ }
16
+ export interface Vector {
17
+ x: number;
18
+ y: number;
19
+ }
20
+ export interface VectorPath {
21
+ windingRule?: string;
22
+ commandsBlob?: number;
23
+ commands?: Array<string | number>;
24
+ styleID?: number;
25
+ }
26
+ export interface VectorNetworkVertex {
27
+ x: number;
28
+ y: number;
29
+ styleID?: number;
30
+ }
31
+ export interface VectorNetworkSegmentEndpoint {
32
+ vertex: number;
33
+ dx?: number;
34
+ dy?: number;
35
+ }
36
+ export interface VectorNetworkSegment {
37
+ start: VectorNetworkSegmentEndpoint;
38
+ end: VectorNetworkSegmentEndpoint;
39
+ styleID?: number;
40
+ }
41
+ export interface VectorNetwork {
42
+ vertices?: VectorNetworkVertex[];
43
+ segments?: VectorNetworkSegment[];
44
+ }
45
+ export interface VectorData {
46
+ vectorNetworkBlob?: number;
47
+ vectorNetwork?: VectorNetwork;
48
+ normalizedSize?: Vector;
49
+ styleOverrideTable?: unknown[];
50
+ }
51
+ export interface Transform {
52
+ m00: number;
53
+ m01: number;
54
+ m02: number;
55
+ m10: number;
56
+ m11: number;
57
+ m12: number;
58
+ }
59
+ export interface Rect {
60
+ x: number;
61
+ y: number;
62
+ width: number;
63
+ height: number;
64
+ }
65
+ export interface LayoutConstraint {
66
+ vertical: "TOP" | "BOTTOM" | "CENTER" | "TOP_BOTTOM" | "SCALE";
67
+ horizontal: "LEFT" | "RIGHT" | "CENTER" | "LEFT_RIGHT" | "SCALE";
68
+ }
69
+ export interface LayoutMode {
70
+ mode: "NONE" | "HORIZONTAL" | "VERTICAL";
71
+ primaryAxisSizingMode: "FIXED" | "AUTO";
72
+ counterAxisSizingMode: "FIXED" | "AUTO";
73
+ primaryAxisAlignItems: "MIN" | "CENTER" | "MAX" | "SPACE_BETWEEN";
74
+ counterAxisAlignItems: "MIN" | "CENTER" | "MAX" | "BASELINE";
75
+ paddingLeft: number;
76
+ paddingRight: number;
77
+ paddingTop: number;
78
+ paddingBottom: number;
79
+ itemSpacing: number;
80
+ counterAxisSpacing?: number;
81
+ layoutWrap?: "NO_WRAP" | "WRAP";
82
+ }
83
+ export type PaintType = "SOLID" | "GRADIENT_LINEAR" | "GRADIENT_RADIAL" | "GRADIENT_ANGULAR" | "GRADIENT_DIAMOND" | "IMAGE" | "EMOJI" | "VIDEO";
84
+ export interface GradientStop {
85
+ position: number;
86
+ color: Color;
87
+ }
88
+ export interface Paint {
89
+ type: PaintType;
90
+ visible?: boolean;
91
+ opacity?: number;
92
+ color?: Color;
93
+ gradientStops?: GradientStop[];
94
+ gradientTransform?: Transform;
95
+ scaleMode?: "FILL" | "FIT" | "TILE" | "STRETCH";
96
+ imageRef?: string;
97
+ blendMode?: BlendMode;
98
+ }
99
+ export type EffectType = "DROP_SHADOW" | "INNER_SHADOW" | "LAYER_BLUR" | "BACKGROUND_BLUR";
100
+ export interface Effect {
101
+ type: EffectType;
102
+ visible?: boolean;
103
+ radius: number;
104
+ color?: Color;
105
+ offset?: Vector;
106
+ spread?: number;
107
+ blendMode?: BlendMode;
108
+ }
109
+ export type BlendMode = "PASS_THROUGH" | "NORMAL" | "DARKEN" | "MULTIPLY" | "LINEAR_BURN" | "COLOR_BURN" | "LIGHTEN" | "SCREEN" | "LINEAR_DODGE" | "COLOR_DODGE" | "OVERLAY" | "SOFT_LIGHT" | "HARD_LIGHT" | "DIFFERENCE" | "EXCLUSION" | "HUE" | "SATURATION" | "COLOR" | "LUMINOSITY";
110
+ export interface StrokeWeights {
111
+ top: number;
112
+ right: number;
113
+ bottom: number;
114
+ left: number;
115
+ }
116
+ export type StrokeAlign = "INSIDE" | "OUTSIDE" | "CENTER";
117
+ export type StrokeCap = "NONE" | "ROUND" | "SQUARE" | "LINE_ARROW" | "TRIANGLE_ARROW";
118
+ export type StrokeJoin = "MITER" | "BEVEL" | "ROUND";
119
+ export interface CornerRadius {
120
+ topLeft: number;
121
+ topRight: number;
122
+ bottomRight: number;
123
+ bottomLeft: number;
124
+ }
125
+ export interface TextStyle {
126
+ fontFamily: string;
127
+ fontPostScriptName?: string;
128
+ fontStyle?: "normal" | "italic" | "oblique";
129
+ fontWeight: number;
130
+ fontSize: number;
131
+ textAlignHorizontal: "LEFT" | "CENTER" | "RIGHT" | "JUSTIFIED";
132
+ textAlignVertical: "TOP" | "CENTER" | "BOTTOM";
133
+ letterSpacing: number;
134
+ lineHeightPx?: number;
135
+ lineHeightPercent?: number;
136
+ lineHeightUnit: "PIXELS" | "FONT_SIZE_%" | "INTRINSIC_%";
137
+ paragraphSpacing?: number;
138
+ paragraphIndent?: number;
139
+ textCase?: "ORIGINAL" | "UPPER" | "LOWER" | "TITLE" | "SMALL_CAPS" | "SMALL_CAPS_FORCED";
140
+ textDecoration?: "NONE" | "UNDERLINE" | "STRIKETHROUGH";
141
+ textAutoResize?: "NONE" | "HEIGHT" | "WIDTH_AND_HEIGHT" | "TRUNCATE";
142
+ }
143
+ export interface TextBaseline {
144
+ position: Vector;
145
+ width: number;
146
+ lineY: number;
147
+ lineHeight: number;
148
+ lineAscent: number;
149
+ firstCharacter: number;
150
+ endCharacter: number;
151
+ }
152
+ export interface DerivedTextData {
153
+ layoutSize: Vector;
154
+ baselines: TextBaseline[];
155
+ }
156
+ export interface BaseNode {
157
+ guid: GUID;
158
+ type: NodeType;
159
+ name: string;
160
+ visible?: boolean;
161
+ locked?: boolean;
162
+ opacity?: number;
163
+ blendMode?: BlendMode;
164
+ children?: FigNode[];
165
+ }
166
+ export interface DocumentNode extends BaseNode {
167
+ type: "DOCUMENT";
168
+ children: CanvasNode[];
169
+ }
170
+ export interface CanvasNode extends BaseNode {
171
+ type: "CANVAS";
172
+ backgroundColor?: Color;
173
+ children: SceneNode[];
174
+ }
175
+ export interface SceneNode extends BaseNode {
176
+ x?: number;
177
+ y?: number;
178
+ width?: number;
179
+ height?: number;
180
+ size?: Vector;
181
+ rotation?: number;
182
+ transform?: Transform;
183
+ constraints?: LayoutConstraint;
184
+ layoutMode?: LayoutMode;
185
+ layoutPositioning?: "AUTO" | "ABSOLUTE";
186
+ layoutGrow?: number;
187
+ layoutAlign?: "STRETCH" | "INHERIT";
188
+ fills?: Paint[];
189
+ strokes?: Paint[];
190
+ strokeWeight?: number;
191
+ strokeWeights?: StrokeWeights;
192
+ strokeAlign?: StrokeAlign;
193
+ strokeCap?: StrokeCap;
194
+ strokeJoin?: StrokeJoin;
195
+ strokeDashes?: number[];
196
+ cornerRadius?: number | CornerRadius;
197
+ effects?: Effect[];
198
+ isMask?: boolean;
199
+ clipsContent?: boolean;
200
+ characters?: string;
201
+ style?: TextStyle;
202
+ derivedTextData?: DerivedTextData;
203
+ componentId?: GUID;
204
+ mainComponent?: GUID;
205
+ overrides?: Record<string, unknown>;
206
+ vectorNetwork?: unknown;
207
+ vectorPaths?: unknown;
208
+ vectorData?: VectorData;
209
+ fillGeometry?: VectorPath[];
210
+ strokeGeometry?: VectorPath[];
211
+ exportSettings?: unknown[];
212
+ }
213
+ export type FigNode = DocumentNode | CanvasNode | SceneNode;
214
+ export interface ParsedFigFile {
215
+ version: number;
216
+ schema: unknown;
217
+ document: DocumentNode;
218
+ images: Map<string, Uint8Array>;
219
+ thumbnail?: Uint8Array;
220
+ blobs?: Array<{
221
+ bytes: Uint8Array;
222
+ }>;
223
+ meta: FigMeta;
224
+ rawMessage?: Record<string, unknown>;
225
+ }
226
+ export interface FigMeta {
227
+ name?: string;
228
+ lastModified?: string;
229
+ thumbnailUrl?: string;
230
+ version?: string;
231
+ [key: string]: unknown;
232
+ }
233
+ export interface InferredLayout {
234
+ gap?: number;
235
+ padding?: {
236
+ top: number;
237
+ right: number;
238
+ bottom: number;
239
+ left: number;
240
+ };
241
+ horizontalAlign?: "left" | "center" | "right" | "space-between" | "space-around";
242
+ verticalAlign?: "top" | "center" | "bottom" | "space-between" | "space-around";
243
+ direction?: "row" | "column";
244
+ wrap?: boolean;
245
+ widthMode?: "fixed" | "hug" | "fill";
246
+ heightMode?: "fixed" | "hug" | "fill";
247
+ }
248
+ export interface SimplifiedEffect {
249
+ type: EffectType;
250
+ visible: boolean;
251
+ color?: string;
252
+ offset?: {
253
+ x: number;
254
+ y: number;
255
+ };
256
+ radius: number;
257
+ spread?: number;
258
+ blendMode?: BlendMode;
259
+ }
260
+ export interface SimplifiedNode {
261
+ id: string;
262
+ type: NodeType;
263
+ name: string;
264
+ bounds?: Rect;
265
+ layout?: InferredLayout;
266
+ style?: {
267
+ backgroundColor?: string;
268
+ borderRadius?: number | CornerRadius;
269
+ borderWidth?: number;
270
+ borderColor?: string;
271
+ opacity?: number;
272
+ shadow?: string;
273
+ blur?: string;
274
+ };
275
+ effects?: SimplifiedEffect[];
276
+ text?: {
277
+ content: string;
278
+ font: string;
279
+ size: number;
280
+ weight: number;
281
+ color?: string;
282
+ align?: string;
283
+ };
284
+ children?: SimplifiedNode[];
285
+ }
286
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/parser/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,MAAM,WAAW,IAAI;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,MAAM,QAAQ,GAChB,UAAU,GACV,QAAQ,GACR,OAAO,GACP,OAAO,GACP,QAAQ,GACR,mBAAmB,GACnB,MAAM,GACN,MAAM,GACN,SAAS,GACT,iBAAiB,GACjB,WAAW,GACX,MAAM,GACN,OAAO,GACP,WAAW,GACX,eAAe,GACf,UAAU,GACV,QAAQ,GACR,iBAAiB,GACjB,WAAW,GACX,SAAS,GACT,OAAO,GACP,YAAY,GACZ,QAAQ,GACR,OAAO,GACP,WAAW,GACX,YAAY,GACZ,OAAO,GACP,aAAa,GACb,OAAO,GACP,YAAY,CAAC;AAGjB,MAAM,WAAW,KAAK;IACpB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAGD,MAAM,WAAW,MAAM;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,4BAA4B,CAAC;IACpC,GAAG,EAAE,4BAA4B,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,oBAAoB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,UAAU;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAC;CAChC;AAGD,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAGD,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;IAC/D,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;CAClE;AAGD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,UAAU,CAAC;IACzC,qBAAqB,EAAE,OAAO,GAAG,MAAM,CAAC;IACxC,qBAAqB,EAAE,OAAO,GAAG,MAAM,CAAC;IACxC,qBAAqB,EAAE,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,eAAe,CAAC;IAClE,qBAAqB,EAAE,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,UAAU,CAAC;IAC7D,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CACjC;AAGD,MAAM,MAAM,SAAS,GACjB,OAAO,GACP,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,kBAAkB,GAClB,OAAO,GACP,OAAO,GACP,OAAO,CAAC;AAEZ,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;CACd;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;IAC/B,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAGD,MAAM,MAAM,UAAU,GAClB,aAAa,GACb,cAAc,GACd,YAAY,GACZ,iBAAiB,CAAC;AAEtB,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAGD,MAAM,MAAM,SAAS,GACjB,cAAc,GACd,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,aAAa,GACb,YAAY,GACZ,SAAS,GACT,QAAQ,GACR,cAAc,GACd,aAAa,GACb,SAAS,GACT,YAAY,GACZ,YAAY,GACZ,YAAY,GACZ,WAAW,GACX,KAAK,GACL,YAAY,GACZ,OAAO,GACP,YAAY,CAAC;AAGjB,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC1D,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,gBAAgB,CAAC;AACtF,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAGrD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,CAAC;IAC/D,iBAAiB,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,QAAQ,GAAG,aAAa,GAAG,aAAa,CAAC;IACzD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,mBAAmB,CAAC;IACzF,cAAc,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,eAAe,CAAC;IACxD,cAAc,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,kBAAkB,GAAG,UAAU,CAAC;CACtE;AAGD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAGD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB;AAGD,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AAGD,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC1C,IAAI,EAAE,QAAQ,CAAC;IACf,eAAe,CAAC,EAAE,KAAK,CAAC;IACxB,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB;AAGD,MAAM,WAAW,SAAU,SAAQ,QAAQ;IAEzC,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC;IAGtB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAGpC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,eAAe,CAAC,EAAE,eAAe,CAAC;IAGlC,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,aAAa,CAAC,EAAE,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGpC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC;IAG9B,cAAc,CAAC,EAAE,OAAO,EAAE,CAAC;CAC5B;AAGD,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC;AAG5D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChC,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAGD,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAGD,MAAM,WAAW,cAAc;IAE7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QACR,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IAGF,eAAe,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,eAAe,GAAG,cAAc,CAAC;IACjF,aAAa,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,eAAe,GAAG,cAAc,CAAC;IAG/E,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;IAGf,SAAS,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IACrC,UAAU,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;CACvC;AAGD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAGD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,KAAK,CAAC,EAAE;QACN,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;QACrC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE;QACL,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;CAC7B"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Core types for .fig file parsing
3
+ * These types represent the structure of .fig documents
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/parser/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=render-single.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-single.d.ts","sourceRoot":"","sources":["../src/render-single.ts"],"names":[],"mappings":""}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Render a single node by ID
3
+ */
4
+ import { readFigFile } from "./parser/index.js";
5
+ import { parseCanvasFig, formatGUID, extractDocumentTree } from "./parser/kiwi-parser.js";
6
+ import { renderScreen } from "./renderer/index.js";
7
+ import { writeFileSync } from "fs";
8
+ const FILE_PATH = "/Users/billy/Downloads/AutoDevice (Copy).fig";
9
+ const NODE_ID = process.argv[2] || "457:1607";
10
+ async function render() {
11
+ const archive = await readFigFile(FILE_PATH);
12
+ const parsed = parseCanvasFig(archive.canvasFig);
13
+ const doc = extractDocumentTree(parsed.message);
14
+ if (!doc) {
15
+ console.log("Failed to extract document");
16
+ return;
17
+ }
18
+ const blobs = parsed.message["blobs"];
19
+ const nodeIndex = new Map();
20
+ function indexNode(node) {
21
+ nodeIndex.set(formatGUID(node.guid), node);
22
+ if (node.children) {
23
+ for (const child of node.children) {
24
+ indexNode(child);
25
+ }
26
+ }
27
+ }
28
+ indexNode(doc);
29
+ const node = nodeIndex.get(NODE_ID);
30
+ if (!node) {
31
+ console.log("Node not found:", NODE_ID);
32
+ return;
33
+ }
34
+ console.log("Node:", formatGUID(node.guid));
35
+ console.log("Type:", node.type);
36
+ console.log("Name:", node.name);
37
+ console.log("Children:", node.children?.length || 0);
38
+ const result = renderScreen(node, undefined, blobs, {
39
+ includeFills: true,
40
+ includeStrokes: true,
41
+ includeText: true,
42
+ background: "#1a1a1a",
43
+ });
44
+ console.log("Result:", result.width, "x", result.height);
45
+ if (result.warnings.length)
46
+ console.log("Warnings:", result.warnings);
47
+ const filename = `output/render-${NODE_ID.replace(":", "-")}.svg`;
48
+ writeFileSync(filename, result.svg);
49
+ console.log("Saved:", filename);
50
+ console.log("\nSVG:\n" + result.svg);
51
+ }
52
+ render().catch(console.error);
53
+ //# sourceMappingURL=render-single.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-single.js","sourceRoot":"","sources":["../src/render-single.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Renderer module - SVG rendering for .fig nodes
3
+ *
4
+ * This module provides functionality to render .fig document nodes to SVG format,
5
+ * with support for vector paths, text, images, shadows, and other visual effects.
6
+ */
7
+ export { renderScreen } from "./render-screen.js";
8
+ export type { RenderScreenOptions, RenderScreenResult } from "./render-screen.js";
9
+ export { generateScreenshot } from "./screenshot.js";
10
+ export type { ScreenshotOptions } from "./screenshot.js";
11
+ export type { TransformMatrix, BlobEntry, RenderContext, PathCommand, } from "./render-types.js";
12
+ export { DEFAULT_RENDER_OPTIONS, IDENTITY_TRANSFORM } from "./render-types.js";
13
+ export { escapeXml, multiplyTransforms, getLocalTransform, transformPoint, computeCommandBounds, buildSvgPath, } from "./render-utils.js";
14
+ export { getPaints, getVisiblePaint, paintToColor, normalizeImageHash, paintToImageHash, detectImageFormat, getMimeType, } from "./paint-utils.js";
15
+ export { isStrokedVector, renderStrokedVector, renderFilledVector, decodePathCommands, decodePathCommandsFromArray, } from "./vector-renderer.js";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGlF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,YAAY,EACV,eAAe,EACf,SAAS,EACT,aAAa,EACb,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG/E,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,SAAS,EACT,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Renderer module - SVG rendering for .fig nodes
3
+ *
4
+ * This module provides functionality to render .fig document nodes to SVG format,
5
+ * with support for vector paths, text, images, shadows, and other visual effects.
6
+ */
7
+ // Main render function
8
+ export { renderScreen } from "./render-screen.js";
9
+ // Screenshot generation
10
+ export { generateScreenshot } from "./screenshot.js";
11
+ export { DEFAULT_RENDER_OPTIONS, IDENTITY_TRANSFORM } from "./render-types.js";
12
+ // Utilities (for advanced use cases like vector-export)
13
+ export { escapeXml, multiplyTransforms, getLocalTransform, transformPoint, computeCommandBounds, buildSvgPath, } from "./render-utils.js";
14
+ // Paint utilities
15
+ export { getPaints, getVisiblePaint, paintToColor, normalizeImageHash, paintToImageHash, detectImageFormat, getMimeType, } from "./paint-utils.js";
16
+ // Vector rendering
17
+ export { isStrokedVector, renderStrokedVector, renderFilledVector, decodePathCommands, decodePathCommandsFromArray, } from "./vector-renderer.js";
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,uBAAuB;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,wBAAwB;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAUrD,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE/E,wDAAwD;AACxD,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,kBAAkB;AAClB,OAAO,EACL,SAAS,EACT,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAE1B,mBAAmB;AACnB,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,35 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paint-utils.d.ts","sourceRoot":"","sources":["../../src/renderer/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"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Paint handling utilities for SVG rendering
3
+ */
4
+ import { colorToCSS } from "../parser/layout-inference.js";
5
+ /**
6
+ * Get paints array from a node (handles both 'fills'/'strokes' and 'fillPaints'/'strokePaints').
7
+ */
8
+ export function getPaints(node, key) {
9
+ const record = node;
10
+ const paints = record[key] ?? record[key === "fills" ? "fillPaints" : "strokePaints"];
11
+ return Array.isArray(paints) ? paints : undefined;
12
+ }
13
+ /**
14
+ * Get the first visible paint from an array.
15
+ */
16
+ export function getVisiblePaint(paints) {
17
+ if (!paints)
18
+ return undefined;
19
+ return paints.find((p) => p.visible !== false);
20
+ }
21
+ /**
22
+ * Convert a paint to a CSS color string.
23
+ * Returns undefined if the paint is not visible or not a solid color.
24
+ */
25
+ export function paintToColor(paint) {
26
+ if (!paint || paint.visible === false || paint.type !== "SOLID" || !paint.color) {
27
+ return undefined;
28
+ }
29
+ const opacity = paint.opacity ?? 1;
30
+ const color = { ...paint.color, a: paint.color.a * opacity };
31
+ return colorToCSS(color);
32
+ }
33
+ /**
34
+ * Normalize an image hash from various formats to a hex string.
35
+ * Handles: string, array of bytes, object with hash property, or object with numeric keys.
36
+ */
37
+ export function normalizeImageHash(value) {
38
+ if (!value)
39
+ return null;
40
+ if (typeof value === "string")
41
+ return value.toLowerCase();
42
+ if (Array.isArray(value) && value.length === 20) {
43
+ const bytes = value.filter((b) => typeof b === "number");
44
+ if (bytes.length === 20) {
45
+ return bytes.map((b) => b.toString(16).padStart(2, "0")).join("");
46
+ }
47
+ }
48
+ if (typeof value === "object") {
49
+ const obj = value;
50
+ if (obj["hash"] && typeof obj["hash"] === "object") {
51
+ const bytes = obj["hash"];
52
+ return Object.keys(bytes)
53
+ .filter((key) => /^\d+$/.test(key))
54
+ .sort((a, b) => Number(a) - Number(b))
55
+ .map((key) => bytes[key].toString(16).padStart(2, "0"))
56
+ .join("");
57
+ }
58
+ const hasByteKeys = Object.keys(obj).some((key) => /^\d+$/.test(key));
59
+ if (hasByteKeys) {
60
+ const bytes = obj;
61
+ return Object.keys(bytes)
62
+ .filter((key) => /^\d+$/.test(key))
63
+ .sort((a, b) => Number(a) - Number(b))
64
+ .map((key) => bytes[key].toString(16).padStart(2, "0"))
65
+ .join("");
66
+ }
67
+ }
68
+ return null;
69
+ }
70
+ /**
71
+ * Extract image hash from a paint object.
72
+ */
73
+ export function paintToImageHash(paint) {
74
+ if (!paint)
75
+ return null;
76
+ const record = paint;
77
+ return normalizeImageHash(record["image"]) ?? normalizeImageHash(record["imageHash"]);
78
+ }
79
+ /**
80
+ * Detect image format from binary data.
81
+ */
82
+ export function detectImageFormat(data) {
83
+ if (data[0] === 0xff && data[1] === 0xd8)
84
+ return "jpeg";
85
+ if (data[0] === 0x89 && data[1] === 0x50 && data[2] === 0x4e && data[3] === 0x47)
86
+ return "png";
87
+ if (data[0] === 0x47 && data[1] === 0x49 && data[2] === 0x46)
88
+ return "gif";
89
+ if (data[0] === 0x52 && data[1] === 0x49 && data[2] === 0x46 && data[3] === 0x46)
90
+ return "webp";
91
+ return "unknown";
92
+ }
93
+ /**
94
+ * Get MIME type for image format.
95
+ */
96
+ export function getMimeType(format) {
97
+ switch (format) {
98
+ case "jpeg": return "image/jpeg";
99
+ case "png": return "image/png";
100
+ case "gif": return "image/gif";
101
+ case "webp": return "image/webp";
102
+ default: return "application/octet-stream";
103
+ }
104
+ }
105
+ //# sourceMappingURL=paint-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paint-utils.js","sourceRoot":"","sources":["../../src/renderer/paint-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Render Screen - Improved vector rendering
3
+ *
4
+ * Key improvements:
5
+ * 1. For stroked vectors: Use vectorNetworkBlob or normalizedSize to get centerline, NOT strokeGeometry
6
+ * 2. strokeGeometry contains pre-outlined stroke - only use as fallback
7
+ * 3. Proper transform composition for rotated/positioned vectors
8
+ * 4. Better detection of stroked vs filled vectors
9
+ * 5. Mask rendering support (isMask flag handling)
10
+ * 6. Image embedding support
11
+ * 7. Full text styling (font-style, letter-spacing, etc.)
12
+ */
13
+ import type { FigNode } from "../parser/types.js";
14
+ import type { BlobEntry, RenderScreenOptions, RenderScreenResult } from "./render-types.js";
15
+ export type { RenderScreenOptions, RenderScreenResult, } from "./render-types.js";
16
+ /**
17
+ * Render a node subtree to SVG.
18
+ *
19
+ * @param node - The root node to render
20
+ * @param images - Optional map of image hash -> image data for embedding
21
+ * @param blobs - Optional array of blob data for vector paths
22
+ * @param options - Rendering options
23
+ * @returns The rendered SVG and metadata
24
+ */
25
+ export declare function renderScreen(node: FigNode, images?: Map<string, Uint8Array>, blobs?: BlobEntry[], options?: RenderScreenOptions): RenderScreenResult;
26
+ //# sourceMappingURL=render-screen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-screen.d.ts","sourceRoot":"","sources":["../../src/renderer/render-screen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,OAAO,EAOR,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAEV,SAAS,EAET,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAuB3B,YAAY,EACV,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAkqB3B;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAChC,KAAK,CAAC,EAAE,SAAS,EAAE,EACnB,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CA8CpB"}