@charz/dom-to-figma 0.0.0-stage → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,566 @@
1
+ //#region src/converter/nodes/image/loader.d.ts
2
+ /**
3
+ * Identifier for the image being loaded. The element is included so loaders
4
+ * can read auxiliary attributes (`crossOrigin`, `referrerPolicy`, etc.) when
5
+ * choosing a fetch strategy, but `src` is the canonical key.
6
+ */
7
+ type ImageRequest = {
8
+ src: string;
9
+ element: HTMLImageElement;
10
+ };
11
+ /**
12
+ * Bytes returned from the loader along with the actual content type. The
13
+ * package re-encodes to PNG when the type isn't directly supported by Figma's
14
+ * clipboard format.
15
+ */
16
+ type ImageFile = {
17
+ bytes: ArrayBuffer;
18
+ mimeType: string;
19
+ };
20
+ type ImageLoader = (request: ImageRequest) => Promise<ImageFile>;
21
+ /**
22
+ * Build an `ImageLoader` that performs a single direct `fetch(src)`. Works
23
+ * for same-origin images and remote images that send permissive CORS headers.
24
+ * Cross-origin images without CORS will throw — consumers that need a proxy
25
+ * chain should inject their own `ImageLoader`.
26
+ */
27
+ declare function createDirectImageLoader(): ImageLoader;
28
+ //#endregion
29
+ //#region src/converter/types/core.d.ts
30
+ type FigmaGuid = {
31
+ sessionID: number;
32
+ localID: number;
33
+ };
34
+ type FigmaTransform = {
35
+ m00: number;
36
+ m01: number;
37
+ m02: number;
38
+ m10: number;
39
+ m11: number;
40
+ m12: number;
41
+ };
42
+ type FigmaSize = {
43
+ x: number;
44
+ y: number;
45
+ };
46
+ type FigmaColor = {
47
+ r: number;
48
+ g: number;
49
+ b: number;
50
+ a: number;
51
+ };
52
+ type FigmaBlob = {
53
+ bytes: Array<number>;
54
+ };
55
+ //#endregion
56
+ //#region src/converter/types/effects.d.ts
57
+ type FigmaEffectType = "INNER_SHADOW" | "DROP_SHADOW" | "FOREGROUND_BLUR" | "BACKGROUND_BLUR";
58
+ type FigmaBlendMode = "NORMAL" | "DARKEN" | "MULTIPLY" | "COLOR_BURN" | "LIGHTEN" | "SCREEN" | "COLOR_DODGE" | "OVERLAY" | "SOFT_LIGHT" | "HARD_LIGHT" | "DIFFERENCE" | "EXCLUSION" | "HUE" | "SATURATION" | "COLOR" | "LUMINOSITY";
59
+ type FigmaEffectBase = {
60
+ type: FigmaEffectType;
61
+ visible: boolean;
62
+ radius: number;
63
+ };
64
+ type FigmaShadowEffect = FigmaEffectBase & {
65
+ type: "INNER_SHADOW" | "DROP_SHADOW";
66
+ color: FigmaColor;
67
+ offset: {
68
+ x: number;
69
+ y: number;
70
+ };
71
+ blendMode: FigmaBlendMode;
72
+ spread?: number;
73
+ showShadowBehindNode?: boolean;
74
+ };
75
+ type FigmaBlurEffect = FigmaEffectBase & {
76
+ type: "FOREGROUND_BLUR" | "BACKGROUND_BLUR";
77
+ color?: FigmaColor;
78
+ offset?: {
79
+ x: number;
80
+ y: number;
81
+ };
82
+ blendMode?: FigmaBlendMode;
83
+ spread?: number;
84
+ showShadowBehindNode?: boolean;
85
+ };
86
+ type FigmaEffect = FigmaShadowEffect | FigmaBlurEffect;
87
+ //#endregion
88
+ //#region src/converter/types/layout.d.ts
89
+ type FigmaStackMode = "HORIZONTAL" | "VERTICAL" | "NONE";
90
+ //#endregion
91
+ //#region src/converter/types/paint.d.ts
92
+ type FigmaImageScaleMode = "FILL" | "FIT" | "STRETCH" | "TILE";
93
+ type FigmaBasePaint = {
94
+ opacity: number;
95
+ visible: boolean;
96
+ blendMode: string;
97
+ transform?: FigmaTransform;
98
+ };
99
+ type FigmaSolidPaint = FigmaBasePaint & {
100
+ type: "SOLID";
101
+ color: FigmaColor;
102
+ };
103
+ type FigmaGradientStop = {
104
+ color: FigmaColor;
105
+ position: number;
106
+ };
107
+ type FigmaGradientLinearPaint = FigmaBasePaint & {
108
+ type: "GRADIENT_LINEAR";
109
+ stops: Array<FigmaGradientStop>;
110
+ };
111
+ type FigmaGradientRadialPaint = FigmaBasePaint & {
112
+ type: "GRADIENT_RADIAL";
113
+ stops: Array<FigmaGradientStop>;
114
+ };
115
+ type FigmaGradientAngularPaint = FigmaBasePaint & {
116
+ type: "GRADIENT_ANGULAR";
117
+ stops: Array<FigmaGradientStop>;
118
+ };
119
+ type FigmaImagePaint = FigmaBasePaint & {
120
+ type: "IMAGE";
121
+ image: {
122
+ hash: Array<number>;
123
+ dataBlob?: number;
124
+ name?: string;
125
+ };
126
+ imageThumbnail?: {
127
+ hash: Array<number>;
128
+ name?: string;
129
+ };
130
+ imageScaleMode?: FigmaImageScaleMode;
131
+ animationFrame?: number;
132
+ imageShouldColorManage?: boolean;
133
+ rotation?: number;
134
+ scale?: number;
135
+ originalImageWidth?: number;
136
+ originalImageHeight?: number;
137
+ thumbHash?: Array<number>;
138
+ altText?: string;
139
+ };
140
+ type FigmaPaint = FigmaSolidPaint | FigmaImagePaint | FigmaGradientLinearPaint | FigmaGradientRadialPaint | FigmaGradientAngularPaint;
141
+ //#endregion
142
+ //#region src/converter/types/text.d.ts
143
+ type FigmaTextAlignHorizontal = "LEFT" | "CENTER" | "RIGHT" | "JUSTIFIED";
144
+ type FigmaTextDecoration = "NONE" | "UNDERLINE" | "STRIKETHROUGH";
145
+ type FigmaTextCase = "ORIGINAL" | "UPPER" | "LOWER" | "TITLE" | "SMALL_CAPS" | "SMALL_CAPS_FORCED";
146
+ type FigmaTextData = {
147
+ characters: string;
148
+ lines?: Array<unknown>;
149
+ };
150
+ type FigmaDerivedTextData = {
151
+ layoutSize?: {
152
+ x: number;
153
+ y: number;
154
+ };
155
+ layoutVersion?: number;
156
+ derivedLines: Array<{
157
+ directionality: "LTR" | "RTL";
158
+ }>;
159
+ fontMetaData?: Array<{
160
+ key: {
161
+ family: string;
162
+ style: string;
163
+ postscript: string;
164
+ };
165
+ fontDigest?: Array<number>;
166
+ fontWeight: number;
167
+ fontLineHeight: number;
168
+ fontStyle: "NORMAL" | "ITALIC";
169
+ }>;
170
+ baselines?: Array<{
171
+ position: {
172
+ x: number;
173
+ y: number;
174
+ };
175
+ width: number;
176
+ lineY: number;
177
+ lineHeight: number;
178
+ lineAscent: number;
179
+ firstCharacter: number;
180
+ endCharacter: number;
181
+ }>;
182
+ glyphs?: Array<{
183
+ commandsBlob: number;
184
+ position: {
185
+ x: number;
186
+ y: number;
187
+ };
188
+ fontSize: number;
189
+ firstCharacter: number;
190
+ advance: number;
191
+ rotation: number;
192
+ }>;
193
+ truncationStartIndex?: number;
194
+ truncatedHeight?: number;
195
+ logicalIndexToCharacterOffsetMap?: Array<number>;
196
+ };
197
+ //#endregion
198
+ //#region src/converter/types/node.d.ts
199
+ type FigmaBaseNodeChange = {
200
+ guid: FigmaGuid;
201
+ phase: string;
202
+ parentIndex?: {
203
+ guid: FigmaGuid;
204
+ position: string;
205
+ };
206
+ name: string;
207
+ visible: boolean;
208
+ opacity: number;
209
+ blendMode?: string;
210
+ size?: FigmaSize;
211
+ transform?: FigmaTransform;
212
+ mask?: boolean;
213
+ maskType?: string;
214
+ locked?: boolean;
215
+ autoRename?: boolean;
216
+ };
217
+ type FigmaTextNodeChange = FigmaBaseNodeChange & {
218
+ type: "TEXT";
219
+ fontSize?: number;
220
+ characters: string;
221
+ textAlignHorizontal?: FigmaTextAlignHorizontal;
222
+ textAlignVertical?: string;
223
+ lineHeight?: {
224
+ value: number;
225
+ units: string;
226
+ };
227
+ fontName?: {
228
+ family: string;
229
+ style: string;
230
+ postscript?: string;
231
+ };
232
+ textData?: FigmaTextData;
233
+ derivedTextData?: FigmaDerivedTextData;
234
+ textExplicitLayoutVersion?: number;
235
+ emojiImageSet?: string;
236
+ textDecorationSkipInk?: boolean;
237
+ fontVariantCommonLigatures?: boolean;
238
+ fontVariantContextualLigatures?: boolean;
239
+ fontVariantDiscretionaryLigatures?: boolean;
240
+ fontVariantHistoricalLigatures?: boolean;
241
+ fontVariantOrdinal?: boolean;
242
+ fontVariantSlashedZero?: boolean;
243
+ fontVariantNumericFigure?: string;
244
+ fontVariantNumericSpacing?: string;
245
+ fontVariantNumericFraction?: string;
246
+ fontVariantCaps?: string;
247
+ fontVariantPosition?: string;
248
+ letterSpacing?: {
249
+ value: number;
250
+ units: string;
251
+ };
252
+ fontVersion?: string;
253
+ textUserLayoutVersion?: number;
254
+ toggledOnOTFeatures?: Array<unknown>;
255
+ toggledOffOTFeatures?: Array<unknown>;
256
+ fontVariations?: Array<unknown>;
257
+ textBidiVersion?: number;
258
+ textTracking?: number;
259
+ handleMirroring?: string;
260
+ textAutoResize?: string;
261
+ detachOpticalSizeFromFontSize?: boolean;
262
+ textDecoration?: FigmaTextDecoration;
263
+ textCase?: FigmaTextCase;
264
+ strokeWeight?: number;
265
+ strokeAlign?: string;
266
+ strokeCap?: string;
267
+ strokeJoin?: string;
268
+ fillPaints?: Array<FigmaPaint>;
269
+ effects?: Array<FigmaEffect>;
270
+ targetAspectRatio?: {
271
+ value: {
272
+ x: number;
273
+ y: number;
274
+ };
275
+ };
276
+ };
277
+ type FigmaFrameNodeChange = FigmaBaseNodeChange & {
278
+ type: "FRAME";
279
+ fillPaints?: Array<FigmaPaint>;
280
+ strokePaints?: Array<FigmaPaint>;
281
+ effects?: Array<FigmaEffect>;
282
+ cornerRadius?: number;
283
+ backgroundOpacity?: number;
284
+ backgroundEnabled?: boolean;
285
+ strokeWeight?: number;
286
+ strokeAlign?: string;
287
+ strokeCap?: string;
288
+ strokeJoin?: string;
289
+ dashPattern?: Array<number>;
290
+ borderTopWeight?: number;
291
+ borderRightWeight?: number;
292
+ borderBottomWeight?: number;
293
+ borderLeftWeight?: number;
294
+ borderStrokeWeightsIndependent?: boolean;
295
+ rectangleTopLeftCornerRadius?: number;
296
+ rectangleTopRightCornerRadius?: number;
297
+ rectangleBottomLeftCornerRadius?: number;
298
+ rectangleBottomRightCornerRadius?: number;
299
+ rectangleCornerRadiiIndependent?: boolean;
300
+ rectangleCornerToolIndependent?: boolean;
301
+ proportionsConstrained?: boolean;
302
+ bordersTakeSpace?: boolean;
303
+ horizontalConstraint?: string;
304
+ verticalConstraint?: string;
305
+ stackMode?: FigmaStackMode;
306
+ stackSpacing?: number;
307
+ stackHorizontalPadding?: number;
308
+ stackVerticalPadding?: number;
309
+ stackPrimarySizing?: string;
310
+ stackPrimaryAlignItems?: string;
311
+ stackCounterAlignItems?: string;
312
+ stackChildPrimaryGrow?: number;
313
+ stackPaddingRight?: number;
314
+ stackPaddingBottom?: number;
315
+ stackChildAlignSelf?: string;
316
+ stackPositioning?: string;
317
+ stackWrap?: string;
318
+ stackCounterSpacing?: number;
319
+ stackReverseZIndex?: boolean;
320
+ minSize?: object;
321
+ maxSize?: object;
322
+ miterLimit?: number;
323
+ frameMaskDisabled?: boolean;
324
+ resizeToFit?: boolean;
325
+ exportBackgroundDisabled?: boolean;
326
+ cornerSmoothing?: number;
327
+ containerSupportsFillStrokeAndCorners?: boolean;
328
+ stackCounterSizing?: string;
329
+ };
330
+ type FigmaVectorNodeChange = FigmaBaseNodeChange & {
331
+ type: "VECTOR";
332
+ strokeWeight?: number;
333
+ strokeAlign?: string;
334
+ strokeCap?: string;
335
+ strokeJoin?: string;
336
+ fillPaints?: Array<FigmaPaint>;
337
+ strokePaints?: Array<FigmaPaint>;
338
+ dashPattern?: Array<number>;
339
+ horizontalConstraint?: string;
340
+ verticalConstraint?: string;
341
+ effects?: Array<FigmaEffect>;
342
+ vectorData?: {
343
+ vectorNetworkBlob: number;
344
+ normalizedSize: {
345
+ x: number;
346
+ y: number;
347
+ };
348
+ };
349
+ };
350
+ type FigmaGroupNodeChange = FigmaBaseNodeChange & {
351
+ type: "GROUP";
352
+ };
353
+ type FigmaCanvasNodeChange = FigmaBaseNodeChange & {
354
+ type: "CANVAS";
355
+ backgroundOpacity?: number;
356
+ backgroundEnabled?: boolean;
357
+ };
358
+ type FigmaDocumentNodeChange = FigmaBaseNodeChange & {
359
+ type: "DOCUMENT";
360
+ };
361
+ type FigmaRoundedRectangleNodeChange = FigmaBaseNodeChange & {
362
+ type: "ROUNDED_RECTANGLE";
363
+ fillPaints?: Array<FigmaPaint>;
364
+ strokePaints?: Array<FigmaPaint>;
365
+ effects?: Array<FigmaEffect>;
366
+ cornerRadius?: number;
367
+ cornerSmoothing?: number;
368
+ strokeWeight?: number;
369
+ strokeAlign?: string;
370
+ strokeCap?: string;
371
+ strokeJoin?: string;
372
+ dashPattern?: Array<number>;
373
+ targetAspectRatio?: {
374
+ value: {
375
+ x: number;
376
+ y: number;
377
+ };
378
+ };
379
+ };
380
+ type FigmaNodeChange = FigmaTextNodeChange | FigmaFrameNodeChange | FigmaVectorNodeChange | FigmaGroupNodeChange | FigmaCanvasNodeChange | FigmaDocumentNodeChange | FigmaRoundedRectangleNodeChange;
381
+ //#endregion
382
+ //#region src/converter/types/clipboard.d.ts
383
+ type FigmaClipboard = {
384
+ type: "NODE_CHANGES";
385
+ sessionID: number;
386
+ ackID: number;
387
+ nodeChanges: Array<FigmaNodeChange>;
388
+ blobs: Array<FigmaBlob>;
389
+ pasteID: number;
390
+ pasteFileKey: string;
391
+ pasteIsPartiallyOutsideEnclosingFrame: boolean;
392
+ isCut: boolean;
393
+ pasteEditorType: string;
394
+ publishedAssetGuids: Array<string>;
395
+ };
396
+ //#endregion
397
+ //#region src/converter/nodes/text/primitives/font/loader.d.ts
398
+ /**
399
+ * Font properties used to request a font file. The loader is free to apply
400
+ * fallbacks (closest available weight, drop italic when not available, etc.)
401
+ * and reports the resolved values back via `FontFile`.
402
+ */
403
+ type FontProperties = {
404
+ family: string;
405
+ weight: number;
406
+ italic: boolean;
407
+ };
408
+ /**
409
+ * Result of loading a font file. `bytes` is the raw font file (TTF, OTF,
410
+ * WOFF, or WOFF2 — fontkit detects the format). The optional `resolved*`
411
+ * fields let the loader signal that a fallback was applied.
412
+ *
413
+ * `resolvedFamily` is set when the loader could not honour the requested
414
+ * family and substituted bytes from a different family entirely (e.g. when
415
+ * the requested family isn't in the loader's catalog). The conversion still
416
+ * uses the *requested* family in the Figma payload — the substituted bytes
417
+ * exist so dom-to-figma has metrics to lay out the text. Figma resolves
418
+ * fonts at paste time via the user's system fonts, so a system-installed
419
+ * family like Verdana renders correctly even if the loader had to feed
420
+ * Inter bytes through the converter.
421
+ */
422
+ type FontFile = {
423
+ bytes: ArrayBuffer;
424
+ resolvedWeight?: number;
425
+ resolvedItalic?: boolean;
426
+ resolvedFamily?: string;
427
+ };
428
+ /**
429
+ * A function that resolves font properties to a font file. The loader owns
430
+ * any catalog or fallback logic; the converter only consumes the bytes.
431
+ */
432
+ type FontLoader = (request: FontProperties) => Promise<FontFile>;
433
+ /**
434
+ * Options for the default fontsource-backed loader.
435
+ */
436
+ type FontsourceLoaderOptions = {
437
+ /** Subset to request. Defaults to "latin". Common alternatives: "latin-ext", "cyrillic", "greek". */subset?: string;
438
+ /**
439
+ * Family to substitute when the requested family isn't in fontsource (web-safe
440
+ * fonts like Verdana, Tahoma, Georgia, Times New Roman, etc. — fontsource
441
+ * mirrors Google Fonts only). The substitute must itself be on fontsource.
442
+ * The Figma payload still claims the *requested* family name, so destinations
443
+ * with the system font installed render it correctly — the substituted bytes
444
+ * only feed conversion-time metrics.
445
+ *
446
+ * Defaults to `"Inter"`. Pass `null` to disable substitution and throw on
447
+ * missing families instead — the converter's per-node try/catch will then
448
+ * silently drop affected text nodes.
449
+ */
450
+ fallbackFamily?: string | null;
451
+ };
452
+ /**
453
+ * Build a `FontLoader` that pulls Google Fonts as static `.woff2` files from
454
+ * fontsource via jsDelivr's CDN. No API key, no UA tricks, browser-friendly.
455
+ * fontkit decompresses WOFF2 transparently.
456
+ *
457
+ * Falls back through a small chain when the exact (weight, italic) combo
458
+ * isn't available: drop italic, then regular 400, then throw.
459
+ *
460
+ * Families that fontsource genuinely doesn't carry (Verdana, Tahoma, etc. —
461
+ * fontsource mirrors Google Fonts only) are memoized after the first
462
+ * exhausted-with-404s attempt, so subsequent requests for the same family
463
+ * fail fast instead of re-hitting jsDelivr for every text node on a page.
464
+ * Transient failures (network, 5xx) are not memoized.
465
+ */
466
+ declare function createFontsourceLoader(options?: FontsourceLoaderOptions): FontLoader;
467
+ //#endregion
468
+ //#region src/converter/classify.d.ts
469
+ type ElementKind = "skip" | "group" | "frame" | "vector" | "image" | "text" | "form-with-placeholder";
470
+ declare function defaultClassify(element: Element): ElementKind;
471
+ //#endregion
472
+ //#region src/converter/trace.d.ts
473
+ /**
474
+ * A single entry in a {@link ConvertTrace}: the link from one emitted Figma
475
+ * node to the DOM element (or text node) it came from. Produced only when the
476
+ * converter is created with `{ trace: true }`. Consumed by the visual-parity
477
+ * harness to attribute discrepancies back to source DOM.
478
+ */
479
+ type TraceEntry = {
480
+ /** GUID of the emitted node change this entry describes. */guid: FigmaGuid; /** Classified kind for the source element; always `"text"` for text nodes. */
481
+ kind: ElementKind; /** Lowercase tag name of the source element; `"#text"` for text nodes. */
482
+ tag: string;
483
+ /**
484
+ * Selector that resolves the source element from the scene root, built
485
+ * incrementally from real DOM child positions, e.g.
486
+ * `:scope > div:nth-child(2) > p:nth-child(1)`. The root element itself is
487
+ * `:scope`. Text nodes carry their owner element's path plus a
488
+ * `::text[i]` suffix (not a valid CSS selector — strip it to resolve the
489
+ * owner element); every line segment of one text node shares that path.
490
+ */
491
+ domPath: string; /** Source rect in viewport coordinates at convert time (`getBoundingClientRect`). */
492
+ rect: {
493
+ x: number;
494
+ y: number;
495
+ width: number;
496
+ height: number;
497
+ }; /** First 120 characters of the rendered text; text nodes only. */
498
+ text?: string;
499
+ };
500
+ /** The full trace for one `convert()` call. Exposed as `ConvertResult.trace`. */
501
+ type ConvertTrace = {
502
+ /** Root frame GUID the traced nodes descend from. */rootGuid: FigmaGuid;
503
+ entries: Array<TraceEntry>;
504
+ };
505
+ //#endregion
506
+ //#region src/converter/walk.d.ts
507
+ type Classify = (element: Element, defaultKind: ElementKind) => ElementKind;
508
+ /** `"auto"` infers Figma auto-layout for flex containers; `"absolute"` keeps
509
+ * every frame absolutely positioned (the historical behavior). */
510
+ type ConverterLayout = "absolute" | "auto";
511
+ //#endregion
512
+ //#region src/figma.d.ts
513
+ type FrameInput = {
514
+ element: Element;
515
+ width: number;
516
+ height: number;
517
+ x: number;
518
+ y: number;
519
+ name: string;
520
+ };
521
+ type FigmaConverterConfig = {
522
+ /** Defaults to `createFontsourceLoader()` (Google Fonts via fontsource jsDelivr CDN). */fontLoader?: FontLoader; /** Defaults to `createDirectImageLoader()` (single direct `fetch(src)`). */
523
+ imageLoader?: ImageLoader; /** Override the default DOM-element classification. */
524
+ classify?: Classify;
525
+ /**
526
+ * `"auto"` (default) converts containers into Figma auto-layout frames
527
+ * whenever the layout can be reproduced exactly, falling back to absolute
528
+ * positioning per node when it can't. `"absolute"` positions every frame
529
+ * absolutely, disabling auto-layout inference entirely.
530
+ */
531
+ layout?: ConverterLayout;
532
+ /**
533
+ * When `true`, `convert()` also returns a {@link ConvertTrace} mapping every
534
+ * emitted node back to its source DOM element. Off by default and adds no
535
+ * cost when disabled; does not change the payload bytes. Intended for the
536
+ * visual-parity harness, not production copies.
537
+ */
538
+ trace?: boolean;
539
+ };
540
+ type SingleFrameInput = {
541
+ element: Element;
542
+ width: number;
543
+ height: number;
544
+ name?: string;
545
+ };
546
+ type CanvasInput = {
547
+ frames: ReadonlyArray<FrameInput>;
548
+ canvasName?: string;
549
+ };
550
+ type ConvertInput = SingleFrameInput | CanvasInput;
551
+ type ConvertResult = {
552
+ /** Raw Figma node-change document. */document: FigmaClipboard; /** Encoded `.fig`-style binary. */
553
+ bytes: Uint8Array; /** Base64-encoded representation of `bytes`. */
554
+ base64: string; /** Construct a browser `ClipboardItem` for `navigator.clipboard.write([...])`. */
555
+ toClipboardItem(): ClipboardItem; /** Get the raw HTML envelope Figma reads on paste. */
556
+ toClipboardHtml(): string; /** DOM-to-node trace, present only when created with `{ trace: true }`. */
557
+ trace?: ConvertTrace;
558
+ };
559
+ type FigmaConverter = {
560
+ convert(input: ConvertInput): Promise<ConvertResult>; /** Drop cached fonts and images. Useful in long-running processes. */
561
+ clearCache(): void;
562
+ };
563
+ declare function createFigmaConverter(config?: FigmaConverterConfig): FigmaConverter;
564
+ //#endregion
565
+ export { CanvasInput, type Classify, ConvertInput, ConvertResult, type ConvertTrace, type ConverterLayout, type ElementKind, type FigmaClipboard, FigmaConverter, FigmaConverterConfig, type FontFile, type FontLoader, type FontProperties, type FontsourceLoaderOptions, FrameInput, type ImageFile, type ImageLoader, type ImageRequest, SingleFrameInput, type TraceEntry, createDirectImageLoader, createFigmaConverter, createFontsourceLoader, defaultClassify };
566
+ //# sourceMappingURL=figma.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"figma.d.mts","names":[],"sources":["../src/converter/nodes/image/loader.ts","../src/converter/types/core.ts","../src/converter/types/effects.ts","../src/converter/types/layout.ts","../src/converter/types/paint.ts","../src/converter/types/text.ts","../src/converter/types/node.ts","../src/converter/types/clipboard.ts","../src/converter/nodes/text/primitives/font/loader.ts","../src/converter/classify.ts","../src/converter/trace.ts","../src/converter/walk.ts","../src/figma.ts"],"mappings":"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"}