@agent-native/core 0.37.1 → 0.37.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/brand-kit/fig/decode.d.ts +33 -0
- package/dist/brand-kit/fig/decode.d.ts.map +1 -0
- package/dist/brand-kit/fig/decode.js +358 -0
- package/dist/brand-kit/fig/decode.js.map +1 -0
- package/dist/brand-kit/fig/extract-design-system.d.ts +44 -0
- package/dist/brand-kit/fig/extract-design-system.d.ts.map +1 -0
- package/dist/brand-kit/fig/extract-design-system.js +752 -0
- package/dist/brand-kit/fig/extract-design-system.js.map +1 -0
- package/dist/brand-kit/fig/fig-to-html.d.ts +246 -0
- package/dist/brand-kit/fig/fig-to-html.d.ts.map +1 -0
- package/dist/brand-kit/fig/fig-to-html.js +1506 -0
- package/dist/brand-kit/fig/fig-to-html.js.map +1 -0
- package/dist/brand-kit/fig/index.d.ts +30 -0
- package/dist/brand-kit/fig/index.d.ts.map +1 -0
- package/dist/brand-kit/fig/index.js +43 -0
- package/dist/brand-kit/fig/index.js.map +1 -0
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +303 -69
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +6 -104
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/context-xray/ContextMeter.js +1 -1
- package/dist/client/context-xray/ContextMeter.js.map +1 -1
- package/dist/client/context-xray/ContextSegmentRow.d.ts.map +1 -1
- package/dist/client/context-xray/ContextSegmentRow.js +4 -4
- package/dist/client/context-xray/ContextSegmentRow.js.map +1 -1
- package/dist/client/context-xray/ContextTreemap.d.ts.map +1 -1
- package/dist/client/context-xray/ContextTreemap.js +2 -2
- package/dist/client/context-xray/ContextTreemap.js.map +1 -1
- package/dist/client/context-xray/ContextXRayPanel.d.ts.map +1 -1
- package/dist/client/context-xray/ContextXRayPanel.js +19 -18
- package/dist/client/context-xray/ContextXRayPanel.js.map +1 -1
- package/dist/client/sharing/ShareButton.d.ts +4 -0
- package/dist/client/sharing/ShareButton.d.ts.map +1 -1
- package/dist/client/sharing/ShareButton.js +6 -4
- package/dist/client/sharing/ShareButton.js.map +1 -1
- package/package.json +6 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-design-system.js","sourceRoot":"","sources":["../../../src/brand-kit/fig/extract-design-system.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Walk a decoded Figma document (the kiwi `Message` tree produced by\n * `decodeFig`) and distil a rich brand profile from it: color roles + palette,\n * a full typographic system (families, weights, scale, letter-spacing, label\n * case), spacing rhythm, corner character, an elevation ramp, and — crucially —\n * the SIGNATURE GRADIENTS and a synthesized brand-character brief.\n *\n * The goal is on-brand generation: not just \"use the right fonts and colors\",\n * but capture what is distinctive about the brand (its gradient, density,\n * corner language, contrast, type personality) so generated designs feel\n * unmistakably on-brand. The brief is emitted as `customInstructions` (the\n * free-form guidance the generator follows) and the gradients/elevation as\n * `customCSS` tokens.\n *\n * Heuristic by necessity: Figma documents carry no canonical \"design system\",\n * so we cluster/weight observed values and assign roles by saturation,\n * lightness, contrast, and area. The result is reviewable before saving.\n */\n\nimport type { BrandKitData, BrandKitDefaults } from \"../types.js\";\nimport { guidKey, type FigNode } from \"./fig-to-html.js\";\n\ninterface Color {\n r: number;\n g: number;\n b: number;\n a: number;\n}\n\ninterface GradientStop {\n color: Color;\n position: number;\n}\n\ninterface Paint {\n type?: string;\n color?: Color;\n opacity?: number;\n visible?: boolean;\n stops?: GradientStop[];\n}\n\ninterface Effect {\n type?: string;\n visible?: boolean;\n color?: Color;\n offset?: { x: number; y: number };\n radius?: number;\n spread?: number;\n}\n\n// --- color helpers --------------------------------------------------------\n\nfunction clamp255(n: number): number {\n return Math.max(0, Math.min(255, Math.round(n)));\n}\n\n/** Convert a Figma 0-1 RGBA color (folding paint opacity into the channels\n * over white) to a `#rrggbb` hex string. Returns null on invalid input. */\nfunction colorToHex(c: Color | undefined, alphaMul = 1): string | null {\n if (!c) return null;\n if (![c.r, c.g, c.b].every((v) => typeof v === \"number\" && isFinite(v))) {\n return null;\n }\n const a = (typeof c.a === \"number\" ? c.a : 1) * alphaMul;\n const composite = (channel: number) => channel * a + 1 * (1 - a);\n const r = clamp255(composite(c.r) * 255);\n const g = clamp255(composite(c.g) * 255);\n const b = clamp255(composite(c.b) * 255);\n const hex = (n: number) => n.toString(16).padStart(2, \"0\");\n return `#${hex(r)}${hex(g)}${hex(b)}`;\n}\n\n/** Raw rgba() string for a Figma 0-1 color, preserving alpha (for gradients).\n * `alphaMul` folds in a paint-level opacity that scales every stop's alpha. */\nfunction colorToRgba(c: Color | undefined, alphaMul = 1): string | null {\n if (!c) return null;\n if (![c.r, c.g, c.b].every((v) => typeof v === \"number\" && isFinite(v))) {\n return null;\n }\n const a = (typeof c.a === \"number\" ? c.a : 1) * alphaMul;\n return `rgba(${clamp255(c.r * 255)}, ${clamp255(c.g * 255)}, ${clamp255(c.b * 255)}, ${Number(a.toFixed(3))})`;\n}\n\nfunction hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n const m = /^#?([0-9a-f]{6})$/i.exec(hex.trim());\n if (!m) return null;\n const int = parseInt(m[1]!, 16);\n return { r: (int >> 16) & 255, g: (int >> 8) & 255, b: int & 255 };\n}\n\n/** Relative luminance (0 dark .. 1 light) per WCAG. */\nfunction luminance(hex: string): number {\n const rgb = hexToRgb(hex);\n if (!rgb) return 0;\n const lin = (c: number) => {\n const s = c / 255;\n return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4);\n };\n return 0.2126 * lin(rgb.r) + 0.7152 * lin(rgb.g) + 0.0722 * lin(rgb.b);\n}\n\n/** HSL saturation (0..1) of a hex color. */\nfunction saturation(hex: string): number {\n const rgb = hexToRgb(hex);\n if (!rgb) return 0;\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n if (max === min) return 0;\n const l = (max + min) / 2;\n const d = max - min;\n return l > 0.5 ? d / (2 - max - min) : d / (max + min);\n}\n\n/** Hue in degrees (0..360) of a hex color. */\nfunction hue(hex: string): number {\n const rgb = hexToRgb(hex);\n if (!rgb) return 0;\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const d = max - min;\n if (d === 0) return 0;\n let h: number;\n if (max === r) h = ((g - b) / d) % 6;\n else if (max === g) h = (b - r) / d + 2;\n else h = (r - g) / d + 4;\n h *= 60;\n return h < 0 ? h + 360 : h;\n}\n\n/** Human-readable hue name for a saturated color, for the brand brief. */\nfunction hueName(hex: string): string {\n if (saturation(hex) < 0.12) {\n const l = luminance(hex);\n if (l > 0.8) return \"near-white\";\n if (l < 0.08) return \"near-black\";\n return \"neutral grey\";\n }\n const h = hue(hex);\n if (h < 15 || h >= 345) return \"red\";\n if (h < 45) return \"orange\";\n if (h < 70) return \"amber/yellow\";\n if (h < 160) return \"green\";\n if (h < 200) return \"teal/cyan\";\n if (h < 250) return \"blue\";\n if (h < 290) return \"indigo/violet\";\n if (h < 330) return \"magenta/pink\";\n return \"rose\";\n}\n\nfunction contrastRatio(a: string, b: string): number {\n const la = luminance(a);\n const lb = luminance(b);\n const hi = Math.max(la, lb);\n const lo = Math.min(la, lb);\n return (hi + 0.05) / (lo + 0.05);\n}\n\n// --- collection types -----------------------------------------------------\n\ninterface ColorStat {\n hex: string;\n count: number;\n area: number;\n name?: string;\n}\n\ninterface TextStat {\n family: string;\n weights: Map<number, number>;\n sizes: Map<number, number>;\n lineHeights: number[];\n letterSpacings: number[];\n count: number;\n area: number;\n}\n\ninterface GradientStat {\n css: string;\n /** A representative key (stop hexes) for dedupe. */\n key: string;\n area: number;\n count: number;\n}\n\nfunction fontWeightFromStyle(style: string | undefined): number {\n if (!style) return 400;\n const s = style.toLowerCase();\n if (s.includes(\"thin\")) return 100;\n if (s.includes(\"extralight\") || s.includes(\"ultralight\")) return 200;\n if (s.includes(\"light\")) return 300;\n if (s.includes(\"medium\")) return 500;\n if (s.includes(\"semibold\") || s.includes(\"demibold\")) return 600;\n if (s.includes(\"extrabold\") || s.includes(\"ultrabold\")) return 800;\n if (s.includes(\"black\") || s.includes(\"heavy\")) return 900;\n if (s.includes(\"bold\")) return 700;\n return 400;\n}\n\nfunction weightWord(w: number): string {\n if (w <= 200) return \"ultra-light\";\n if (w <= 300) return \"light\";\n if (w === 400) return \"regular\";\n if (w === 500) return \"medium\";\n if (w === 600) return \"semibold\";\n if (w === 700) return \"bold\";\n return \"heavy/black\";\n}\n\nfunction nodeArea(node: FigNode): number {\n const x = node.size?.x ?? 0;\n const y = node.size?.y ?? 0;\n if (!isFinite(x) || !isFinite(y) || x <= 0 || y <= 0) return 0;\n return x * y;\n}\n\nfunction gcd(a: number, b: number): number {\n a = Math.abs(Math.round(a));\n b = Math.abs(Math.round(b));\n while (b) {\n [a, b] = [b, a % b];\n }\n return a;\n}\n\nfunction inferSpacingStep(values: number[]): number {\n const positives = values\n .map((v) => Math.round(v))\n .filter((v) => v > 0 && v <= 256);\n if (positives.length === 0) return 8;\n const divisibleBy = (d: number) =>\n positives.filter((v) => v % d === 0).length / positives.length;\n if (divisibleBy(8) >= 0.6) return 8;\n if (divisibleBy(4) >= 0.6) return 4;\n let g = positives[0]!;\n for (const v of positives.slice(1)) g = gcd(g, v);\n return g >= 2 ? g : 4;\n}\n\n/** Build a CSS gradient string from a Figma gradient Paint. Angle is\n * approximated (the exact handle vector isn't always recoverable); the stop\n * colors — the brand-signature part — are captured faithfully. */\nfunction gradientToCss(paint: Paint): { css: string; key: string } | null {\n const stops = (paint.stops ?? [])\n .filter((s) => s && s.color)\n .sort((a, b) => (a.position ?? 0) - (b.position ?? 0));\n if (stops.length < 2) return null;\n const parts: string[] = [];\n const keyParts: string[] = [];\n for (const s of stops) {\n // Fold the paint-level opacity into every stop's alpha.\n const rgba = colorToRgba(s.color, paint.opacity ?? 1);\n if (!rgba) return null;\n const pct = clampPct(s.position);\n parts.push(`${rgba} ${pct}%`);\n // Key on color AND position so two gradients with the same colors but\n // different stop placement aren't treated as duplicates.\n keyParts.push(`${colorToHex(s.color) ?? rgba}@${pct}`);\n }\n const body = parts.join(\", \");\n let css: string;\n switch (paint.type) {\n case \"GRADIENT_RADIAL\":\n css = `radial-gradient(circle at 30% 30%, ${body})`;\n break;\n case \"GRADIENT_ANGULAR\":\n css = `conic-gradient(from 180deg, ${body})`;\n break;\n case \"GRADIENT_DIAMOND\":\n css = `radial-gradient(${body})`;\n break;\n default:\n css = `linear-gradient(135deg, ${body})`;\n }\n return { css, key: `${paint.type}:${keyParts.join(\"|\")}` };\n}\n\nfunction clampPct(p: number | undefined): number {\n const v = typeof p === \"number\" ? p * 100 : 0;\n return Math.max(0, Math.min(100, Math.round(v)));\n}\n\nfunction indexStyleNames(nodes: FigNode[]): Map<string, string> {\n const out = new Map<string, string>();\n for (const n of nodes) {\n if ((n.styleType || n.type === \"STYLE\") && n.name) {\n out.set(guidKey(n.guid), n.name.trim());\n }\n }\n return out;\n}\n\nfunction resolveFillStyleName(\n node: FigNode,\n styleNames: Map<string, string>,\n): string | undefined {\n const g = node.styleIdForFill?.guid;\n if (!g) return undefined;\n return styleNames.get(guidKey(g));\n}\n\nfunction resolveTextStyleName(\n node: FigNode,\n styleNames: Map<string, string>,\n): string | undefined {\n const g = node.styleIdForText?.guid;\n if (!g) return undefined;\n return styleNames.get(guidKey(g));\n}\n\n// --- result type ----------------------------------------------------------\n\nexport interface ExtractedFigTokens extends Partial<BrandKitData> {\n /** Surface defaults inferred from the file. Templates map this to their\n * persisted defaults key, e.g. `defaults` or `slideDefaults`. */\n defaults?: BrandKitDefaults;\n /** Raw, de-duplicated color palette (most frequent first) for reference. */\n palette?: { hex: string; name?: string; count: number }[];\n /** Named color styles found in the file (key = style name). */\n namedColors?: Record<string, string>;\n /** Signature gradients found in the file, as ready-to-use CSS. */\n gradients?: string[];\n /**\n * A synthesized brand-character brief — the free-form guidance the generator\n * should follow to produce on-brand designs. Goes into the design system's\n * `customInstructions`.\n */\n customInstructions?: string;\n /** Count of nodes walked, for provenance/preview. */\n nodeCount?: number;\n}\n\nexport function extractDesignSystemFromFig(\n document: unknown,\n): ExtractedFigTokens {\n const doc = document as { nodeChanges?: FigNode[] } | null | undefined;\n const nodes = doc?.nodeChanges ?? [];\n if (nodes.length === 0) return {};\n\n const styleNames = indexStyleNames(nodes);\n\n const colorStats = new Map<string, ColorStat>();\n const namedColors: Record<string, string> = {};\n const textStats = new Map<string, TextStat>();\n const radii: number[] = [];\n const spacingValues: number[] = [];\n const shadows: string[] = [];\n const gradientStats = new Map<string, GradientStat>();\n // Gradient stop colors are collected separately and only folded into the\n // palette when SOLID fills are too sparse to derive roles — otherwise a\n // bright gradient stop can hijack the accent over the real solid brand color.\n const gradientStopColors: { hex: string; area: number; name?: string }[] = [];\n // Heuristic label-case signal: small text whose content is all-caps.\n let upperLabelHits = 0;\n let smallTextSamples = 0;\n\n const addColor = (hex: string | null, area: number, name?: string): void => {\n if (!hex) return;\n const existing = colorStats.get(hex);\n if (existing) {\n existing.count += 1;\n existing.area += area;\n if (!existing.name && name) existing.name = name;\n } else {\n colorStats.set(hex, { hex, count: 1, area, name });\n }\n if (name && !namedColors[name]) namedColors[name] = hex;\n };\n\n for (const node of nodes) {\n if (node.visible === false) continue;\n const area = nodeArea(node);\n\n const fillStyleName = resolveFillStyleName(node, styleNames);\n for (const paint of (node.fillPaints ?? []) as Paint[]) {\n if (paint.visible === false) continue;\n if (paint.type === \"SOLID\") {\n addColor(\n colorToHex(paint.color, paint.opacity ?? 1),\n area,\n fillStyleName,\n );\n } else if (paint.type?.startsWith(\"GRADIENT_\")) {\n const grad = gradientToCss(paint);\n if (grad) {\n const existing = gradientStats.get(grad.key);\n if (existing) {\n existing.area += area;\n existing.count += 1;\n } else {\n gradientStats.set(grad.key, {\n css: grad.css,\n key: grad.key,\n area,\n count: 1,\n });\n }\n // Stash gradient stop colors; only used for roles if SOLID fills\n // turn out to be too sparse (handled after the walk).\n for (const s of paint.stops ?? []) {\n const hex = colorToHex(s.color);\n if (hex) gradientStopColors.push({ hex, area: area * 0.2 });\n }\n }\n }\n }\n for (const paint of (node.strokePaints ?? []) as Paint[]) {\n if (paint.visible === false) continue;\n if (paint.type !== \"SOLID\") continue;\n addColor(colorToHex(paint.color, paint.opacity ?? 1), 0);\n }\n\n // Typography from TEXT nodes.\n if (node.type === \"TEXT\" && node.fontName?.family) {\n const family = node.fontName.family;\n const weight = fontWeightFromStyle(node.fontName.style);\n const size =\n typeof node.fontSize === \"number\" ? Math.round(node.fontSize) : 0;\n const textStyleName = resolveTextStyleName(node, styleNames);\n const key = textStyleName ? `style:${textStyleName}|${family}` : family;\n let stat = textStats.get(key);\n if (!stat) {\n stat = {\n family,\n weights: new Map(),\n sizes: new Map(),\n lineHeights: [],\n letterSpacings: [],\n count: 0,\n area: 0,\n };\n textStats.set(key, stat);\n }\n stat.count += 1;\n stat.area += area;\n stat.weights.set(weight, (stat.weights.get(weight) ?? 0) + 1);\n if (size > 0) stat.sizes.set(size, (stat.sizes.get(size) ?? 0) + 1);\n if (node.lineHeight && typeof node.lineHeight.value === \"number\") {\n if (node.lineHeight.units === \"PIXELS\") {\n stat.lineHeights.push(node.lineHeight.value);\n } else if (node.lineHeight.units === \"PERCENT\" && size > 0) {\n stat.lineHeights.push((node.lineHeight.value / 100) * size);\n }\n }\n if (\n node.letterSpacing &&\n typeof node.letterSpacing.value === \"number\" &&\n size > 0\n ) {\n const ls =\n node.letterSpacing.units === \"PERCENT\"\n ? (node.letterSpacing.value / 100) * size\n : node.letterSpacing.value;\n stat.letterSpacings.push(ls / size); // em-relative\n }\n // Label-case heuristic: short, small text rendered in all caps.\n const chars = node.textData?.characters;\n if (size > 0 && size <= 18 && chars && chars.trim().length > 0) {\n smallTextSamples += 1;\n const letters = chars.replace(/[^a-z]/gi, \"\");\n if (letters.length >= 2 && letters === letters.toUpperCase()) {\n upperLabelHits += 1;\n }\n }\n }\n\n // Corner radii.\n const corner =\n node.cornerRadius ??\n node.rectangleTopLeftCornerRadius ??\n node.rectangleTopRightCornerRadius;\n if (typeof corner === \"number\" && corner > 0 && corner <= 200) {\n radii.push(Math.round(corner));\n }\n\n // Spacing: auto-layout gaps and padding.\n if (node.stackMode && node.stackMode !== \"NONE\") {\n if (typeof node.stackSpacing === \"number\")\n spacingValues.push(node.stackSpacing);\n for (const pad of [\n node.stackPaddingLeft,\n node.stackPaddingRight,\n node.stackPaddingTop,\n node.stackPaddingBottom,\n node.stackHorizontalPadding,\n node.stackVerticalPadding,\n ]) {\n if (typeof pad === \"number\" && pad > 0) spacingValues.push(pad);\n }\n }\n\n // Effects -> shadows.\n for (const effect of (node.effects ?? []) as Effect[]) {\n if (effect.visible === false) continue;\n if (effect.type !== \"DROP_SHADOW\" && effect.type !== \"INNER_SHADOW\")\n continue;\n const c = effect.color;\n const a = c && typeof c.a === \"number\" ? c.a : 0.25;\n const rgb = c\n ? `rgba(${clamp255(c.r * 255)}, ${clamp255(c.g * 255)}, ${clamp255(c.b * 255)}, ${Number(a.toFixed(3))})`\n : \"rgba(0, 0, 0, 0.25)\";\n const inset = effect.type === \"INNER_SHADOW\" ? \"inset \" : \"\";\n const ox = Math.round(effect.offset?.x ?? 0);\n const oy = Math.round(effect.offset?.y ?? 0);\n const blur = Math.round(effect.radius ?? 0);\n const spread = Math.round(effect.spread ?? 0);\n // Skip artboard-scale shadows (giant blurs/offsets common on Figma frame\n // backgrounds) — keep only UI-plausible elevation.\n if (\n blur > 80 ||\n Math.abs(spread) > 64 ||\n Math.abs(ox) > 120 ||\n Math.abs(oy) > 120\n ) {\n continue;\n }\n shadows.push(`${inset}${ox}px ${oy}px ${blur}px ${spread}px ${rgb}`);\n }\n }\n\n // --- assign color roles -------------------------------------------------\n\n // Fold gradient stop colors into the palette only when solid fills are too\n // sparse to characterize the brand (e.g. a gradient-only file).\n if (colorStats.size < 4) {\n for (const g of gradientStopColors) addColor(g.hex, g.area, g.name);\n }\n\n const palette = Array.from(colorStats.values()).sort(\n (a, b) => b.count - a.count || b.area - a.area,\n );\n\n const result: ExtractedFigTokens = { nodeCount: nodes.length };\n let roles: BrandKitData[\"colors\"] | null = null;\n\n if (palette.length > 0) {\n const byArea = [...palette].sort((a, b) => b.area - a.area);\n const background =\n byArea.find((c) => {\n const l = luminance(c.hex);\n return l > 0.85 || l < 0.08;\n }) ?? byArea[0]!;\n\n const accent =\n palette\n .filter((c) => c.hex !== background.hex)\n .sort((a, b) => saturation(b.hex) - saturation(a.hex))[0] ?? background;\n\n const text = palette\n .filter((c) => c.hex !== background.hex)\n .sort(\n (a, b) =>\n contrastRatio(b.hex, background.hex) -\n contrastRatio(a.hex, background.hex),\n )[0] ?? { hex: luminance(background.hex) > 0.5 ? \"#111111\" : \"#ffffff\" };\n\n const saturated = palette\n .filter(\n (c) =>\n saturation(c.hex) > 0.15 &&\n c.hex !== background.hex &&\n c.hex !== text.hex,\n )\n .sort((a, b) => b.count - a.count);\n const primary = saturated[0] ?? accent;\n const secondary = saturated[1] ?? saturated[0] ?? primary;\n\n const surface =\n byArea.find(\n (c) =>\n c.hex !== background.hex &&\n Math.abs(luminance(c.hex) - luminance(background.hex)) < 0.15,\n ) ?? background;\n\n const textMuted =\n palette\n .filter((c) => {\n const cr = contrastRatio(c.hex, background.hex);\n return c.hex !== text.hex && cr >= 2 && cr <= 7;\n })\n .sort(\n (a, b) =>\n contrastRatio(b.hex, background.hex) -\n contrastRatio(a.hex, background.hex),\n )[0]?.hex ?? mixHex(text.hex, background.hex, 0.45);\n\n roles = {\n primary: primary.hex,\n secondary: secondary.hex,\n accent: accent.hex,\n background: background.hex,\n surface: surface.hex,\n text: text.hex,\n textMuted: typeof textMuted === \"string\" ? textMuted : text.hex,\n };\n result.colors = roles;\n\n result.palette = palette\n .slice(0, 24)\n .map((c) => ({ hex: c.hex, name: c.name, count: c.count }));\n if (Object.keys(namedColors).length > 0) result.namedColors = namedColors;\n }\n\n // --- typography ---------------------------------------------------------\n\n let typo: {\n headingStat: TextStat;\n bodyStat: TextStat;\n headingWeight: number;\n bodyWeight: number;\n h1: number;\n body: number;\n headingTracking: number;\n } | null = null;\n\n if (textStats.size > 0) {\n const stats = Array.from(textStats.values());\n const byArea = [...stats].sort(\n (a, b) => b.area - a.area || b.count - a.count,\n );\n const bodyStat = byArea[0]!;\n const maxSizeOf = (s: TextStat) =>\n Math.max(0, ...Array.from(s.sizes.keys()));\n const byMaxSize = [...stats].sort((a, b) => maxSizeOf(b) - maxSizeOf(a));\n const headingStat =\n byMaxSize.find((s) => s.family !== bodyStat.family) ??\n byMaxSize[0] ??\n bodyStat;\n\n const topWeight = (s: TextStat): number => {\n let best = 400;\n let bestCount = -1;\n for (const [w, c] of s.weights) {\n if (c > bestCount) {\n best = w;\n bestCount = c;\n }\n }\n return best;\n };\n\n // Web-plausible sizes only. Figma marketing boards carry display text at\n // hundreds/thousands of px, which is useless as a web type scale — keep\n // 8..200px and clamp the final scale into a sane web range.\n const webSizes = Array.from(\n new Set(stats.flatMap((s) => Array.from(s.sizes.keys()))),\n )\n .filter((n) => n >= 8 && n <= 200)\n .sort((a, b) => b - a);\n const clampHead = (n: number) => Math.min(72, Math.max(18, Math.round(n)));\n const h1 = clampHead(webSizes[0] ?? 48);\n const h2 = clampHead(webSizes.find((n) => n < h1) ?? Math.round(h1 * 0.72));\n const h3 = clampHead(webSizes.find((n) => n < h2) ?? Math.round(h2 * 0.72));\n\n const avgTracking =\n headingStat.letterSpacings.length > 0\n ? headingStat.letterSpacings.reduce((a, b) => a + b, 0) /\n headingStat.letterSpacings.length\n : 0;\n\n const rawBody =\n Array.from(bodyStat.sizes.entries())\n .filter(([s]) => s >= 8 && s <= 28)\n .sort((a, b) => b[1] - a[1])[0]?.[0] ?? 16;\n const bodySize = Math.min(20, Math.max(14, Math.round(rawBody)));\n\n result.typography = {\n headingFont: headingStat.family,\n bodyFont: bodyStat.family,\n headingWeight: String(topWeight(headingStat)),\n bodyWeight: String(topWeight(bodyStat)),\n headingSizes: { h1: `${h1}px`, h2: `${h2}px`, h3: `${h3}px` },\n };\n typo = {\n headingStat,\n bodyStat,\n headingWeight: topWeight(headingStat),\n bodyWeight: topWeight(bodyStat),\n h1,\n body: bodySize,\n headingTracking: avgTracking,\n };\n }\n\n // --- spacing ------------------------------------------------------------\n\n let elementGapPx = 0;\n if (spacingValues.length > 0) {\n const step = inferSpacingStep(spacingValues);\n const rounded = spacingValues\n .map((v) => Math.round(v))\n .sort((a, b) => a - b);\n const median = rounded[Math.floor(rounded.length / 2)] ?? step * 2;\n const max = rounded[rounded.length - 1] ?? step * 3;\n const snap = (v: number) => Math.max(step, Math.round(v / step) * step);\n elementGapPx = snap(median);\n result.spacing = {\n pagePadding: `${snap(Math.min(max, step * 8))}px`,\n elementGap: `${elementGapPx}px`,\n };\n }\n\n // --- borders / corner character -----------------------------------------\n\n let radiusPx = 0;\n if (radii.length > 0) {\n const counts = new Map<number, number>();\n for (const r of radii) counts.set(r, (counts.get(r) ?? 0) + 1);\n radiusPx = Array.from(counts.entries()).sort(\n (a, b) => b[1] - a[1] || a[0] - b[0],\n )[0]![0];\n result.borders = { radius: `${radiusPx}px`, accentWidth: \"2px\" };\n }\n\n // --- gradients + elevation into customCSS -------------------------------\n\n // Rank by colorfulness first: a saturated brand gradient should beat the\n // big black/white scrim overlays that dominate by area in marketing files.\n const gradientColorfulness = (key: string): number => {\n const parts = key.split(\":\")[1]?.split(\"|\") ?? [];\n let s = 0;\n for (const p of parts) {\n // Each part is \"<hex>@<pos>\" — score on the hex.\n const hex = p.split(\"@\")[0]?.trim() ?? \"\";\n if (/^#[0-9a-f]{6}$/i.test(hex)) s += saturation(hex);\n }\n return s;\n };\n const topGradients = Array.from(gradientStats.values())\n .sort(\n (a, b) =>\n gradientColorfulness(b.key) - gradientColorfulness(a.key) ||\n b.area - a.area ||\n b.count - a.count,\n )\n .slice(0, 4);\n if (topGradients.length > 0) {\n result.gradients = topGradients.map((g) => g.css);\n }\n\n const cssVars: string[] = [];\n topGradients.forEach((g, i) => {\n cssVars.push(` --gradient-${i === 0 ? \"brand\" : i}: ${g.css};`);\n });\n const uniqueShadows = Array.from(new Set(shadows)).slice(0, 6);\n uniqueShadows.forEach((s, i) => {\n cssVars.push(` --shadow-${i + 1}: ${s};`);\n });\n if (cssVars.length > 0) {\n result.customCSS = `:root {\\n${cssVars.join(\"\\n\")}\\n}`;\n }\n\n // --- defaults -----------------------------------------------------------\n\n const bgHex = roles?.background;\n const isDark = bgHex ? luminance(bgHex) < 0.4 : false;\n const labelStyle: BrandKitDefaults[\"labelStyle\"] =\n smallTextSamples >= 3 && upperLabelHits / smallTextSamples > 0.4\n ? \"uppercase\"\n : \"none\";\n result.defaults = {\n background: isDark ? \"dark\" : \"light\",\n labelStyle,\n };\n\n // --- synthesize the brand brief + imagery hint --------------------------\n\n const brief = synthesizeBrandBrief({\n roles,\n isDark,\n saturatedCount: palette.filter((c) => saturation(c.hex) > 0.2).length,\n gradients: result.gradients ?? [],\n typo,\n elementGapPx,\n radiusPx,\n hasShadows: uniqueShadows.length > 0,\n labelStyle,\n namedStyleCount: styleNames.size,\n });\n if (brief.instructions) result.customInstructions = brief.instructions;\n if (brief.imageryDescription) {\n result.imageStyle = {\n referenceUrls: [],\n styleDescription: brief.imageryDescription,\n };\n }\n\n result.notes = `Imported from a Figma .fig file — ${nodes.length.toLocaleString()} nodes, ${styleNames.size} named styles${\n result.gradients ? `, ${result.gradients.length} signature gradient(s)` : \"\"\n }. Tokens + brand brief were auto-extracted and are editable.`;\n\n return result;\n}\n\n// --- brand brief synthesis ------------------------------------------------\n\nfunction synthesizeBrandBrief(input: {\n roles: BrandKitData[\"colors\"] | null;\n isDark: boolean;\n saturatedCount: number;\n gradients: string[];\n typo: {\n headingStat: TextStat;\n bodyStat: TextStat;\n headingWeight: number;\n bodyWeight: number;\n h1: number;\n body: number;\n headingTracking: number;\n } | null;\n elementGapPx: number;\n radiusPx: number;\n hasShadows: boolean;\n labelStyle: string;\n namedStyleCount: number;\n}): { instructions: string; imageryDescription: string } {\n const lines: string[] = [];\n const adjectives: string[] = [];\n\n // Theme + color character.\n if (input.roles) {\n const theme = input.isDark ? \"dark-first\" : \"light/airy\";\n adjectives.push(input.isDark ? \"dark\" : \"bright\");\n const colorChar =\n input.saturatedCount <= 1\n ? \"restrained and largely monochromatic\"\n : input.saturatedCount <= 3\n ? \"focused — a tight palette with one or two signature hues\"\n : \"expressive and multi-color\";\n adjectives.push(input.saturatedCount <= 1 ? \"minimal\" : \"vivid\");\n lines.push(\n `Palette: ${theme}, ${colorChar}. The signature accent is ${hueName(\n input.roles.accent,\n )} (${input.roles.accent}); background ${input.roles.background}, text ${\n input.roles.text\n }. Use the exact token colors above for every surface — never hardcode off-brand colors.`,\n );\n }\n\n // Signature gradient — usually the single most recognizable brand element.\n if (input.gradients.length > 0) {\n adjectives.push(\"gradient-forward\");\n lines.push(\n `Signature gradient(s) are core to this brand — lead with them on hero backgrounds, primary buttons, and accents (available as \\`--gradient-brand\\` in customCSS): ${input.gradients\n .slice(0, 2)\n .join(\" • \")}.`,\n );\n }\n\n // Typography personality.\n if (input.typo) {\n const hw = weightWord(input.typo.headingWeight);\n const ratio = input.typo.body > 0 ? input.typo.h1 / input.typo.body : 2;\n const scaleChar =\n ratio >= 3\n ? \"a dramatic, oversized display scale\"\n : ratio >= 2\n ? \"a confident, clear type scale\"\n : \"a restrained, editorial scale\";\n adjectives.push(input.typo.headingWeight >= 700 ? \"bold\" : \"refined\");\n const tracking =\n input.typo.headingTracking <= -0.02\n ? \" with tight, negative letter-spacing on headings\"\n : input.typo.headingTracking >= 0.04\n ? \" with wide, airy letter-spacing on headings\"\n : \"\";\n lines.push(\n `Typography: headings in ${input.typo.headingStat.family} (${hw}, ~${input.typo.h1}px at the top of ${scaleChar})${tracking}; body in ${input.typo.bodyStat.family} (~${input.typo.body}px). Load these exact families from Google Fonts and honor the weight contrast.`,\n );\n }\n\n // Spacing rhythm.\n if (input.elementGapPx > 0) {\n const dense = input.elementGapPx <= 12;\n adjectives.push(dense ? \"compact\" : \"spacious\");\n lines.push(\n `Density: ${dense ? \"tight and information-dense\" : \"generous, with confident whitespace\"} — typical element gap ~${input.elementGapPx}px. Keep that rhythm consistent.`,\n );\n }\n\n // Corner language.\n if (input.radiusPx >= 0 && (input.radiusPx > 0 || input.roles)) {\n const corner =\n input.radiusPx <= 4\n ? \"sharp, squared corners (precise / technical)\"\n : input.radiusPx <= 12\n ? \"softly rounded corners\"\n : input.radiusPx <= 22\n ? \"noticeably rounded, friendly corners\"\n : \"very round, pill-like corners\";\n adjectives.push(input.radiusPx <= 4 ? \"precise\" : \"approachable\");\n lines.push(\n `Corner language: ${corner} (~${input.radiusPx}px). Apply it consistently to cards, buttons, and inputs.`,\n );\n }\n\n // Elevation.\n if (input.hasShadows) {\n adjectives.push(\"layered\");\n lines.push(\n `Depth: uses layered, soft shadows (see \\`--shadow-*\\` tokens) — favor subtle elevation over hard borders.`,\n );\n } else {\n lines.push(\n `Depth: largely flat — prefer borders, tonal surfaces, and color over drop shadows.`,\n );\n }\n\n if (input.labelStyle === \"uppercase\") {\n lines.push(\n `Labels/eyebrows are set in UPPERCASE with letter-spacing — use that for small section labels.`,\n );\n }\n\n const character = Array.from(new Set(adjectives)).slice(0, 5).join(\", \");\n const header = character\n ? `This brand reads as: ${character}. Generate every design so it feels unmistakably on-brand — a stranger should recognize it as the same brand as the source.`\n : `Generate designs that match the extracted tokens precisely so output stays on-brand.`;\n\n const instructions = [header, \"\", ...lines].join(\"\\n\");\n\n const imageryDescription = input.roles\n ? `${input.isDark ? \"Dark, high-contrast\" : \"Bright, clean\"} brand imagery; ${\n input.gradients.length > 0\n ? \"lean on the signature gradient and bold color\"\n : \"lean on confident color blocking and whitespace\"\n }. Avoid generic stock-photo clichés and off-brand color.`\n : \"\";\n\n return { instructions, imageryDescription };\n}\n\n/** Linear blend of two hex colors. `t` = weight of `a` (0..1). */\nfunction mixHex(a: string, b: string, t: number): string {\n const ca = hexToRgb(a);\n const cb = hexToRgb(b);\n if (!ca || !cb) return a;\n const mix = (x: number, y: number) => clamp255(x * t + y * (1 - t));\n const hex = (n: number) => n.toString(16).padStart(2, \"0\");\n return `#${hex(mix(ca.r, cb.r))}${hex(mix(ca.g, cb.g))}${hex(mix(ca.b, cb.b))}`;\n}\n"]}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert a decoded Figma document (NODE_CHANGES message) into one HTML
|
|
3
|
+
* file per top-level frame. Each node renders as a <div> (or <span> for
|
|
4
|
+
* TEXT) with an inline `style="..."` covering layout, background, border,
|
|
5
|
+
* radius, shadows, blurs, text, transform, autolayout (flexbox), and
|
|
6
|
+
* opacity/blend. Component instances are inlined and tagged with
|
|
7
|
+
* data-component-name / data-variant-name / data-component-description /
|
|
8
|
+
* data-component-doc-link / data-annotations attributes, matching the
|
|
9
|
+
* figma-plugin smart-export conventions.
|
|
10
|
+
*/
|
|
11
|
+
export interface Guid {
|
|
12
|
+
sessionID: number;
|
|
13
|
+
localID: number;
|
|
14
|
+
}
|
|
15
|
+
interface Color {
|
|
16
|
+
r: number;
|
|
17
|
+
g: number;
|
|
18
|
+
b: number;
|
|
19
|
+
a: number;
|
|
20
|
+
}
|
|
21
|
+
interface Paint {
|
|
22
|
+
type?: string;
|
|
23
|
+
color?: Color;
|
|
24
|
+
opacity?: number;
|
|
25
|
+
visible?: boolean;
|
|
26
|
+
blendMode?: string;
|
|
27
|
+
stops?: Array<{
|
|
28
|
+
color: Color;
|
|
29
|
+
position: number;
|
|
30
|
+
}>;
|
|
31
|
+
transform?: {
|
|
32
|
+
m00: number;
|
|
33
|
+
m01: number;
|
|
34
|
+
m02: number;
|
|
35
|
+
m10: number;
|
|
36
|
+
m11: number;
|
|
37
|
+
m12: number;
|
|
38
|
+
};
|
|
39
|
+
image?: {
|
|
40
|
+
hash?: string | Uint8Array | number[];
|
|
41
|
+
name?: string;
|
|
42
|
+
};
|
|
43
|
+
imageScaleMode?: string;
|
|
44
|
+
rotation?: number;
|
|
45
|
+
scale?: number;
|
|
46
|
+
}
|
|
47
|
+
interface Effect {
|
|
48
|
+
type?: string;
|
|
49
|
+
visible?: boolean;
|
|
50
|
+
color?: Color;
|
|
51
|
+
offset?: {
|
|
52
|
+
x: number;
|
|
53
|
+
y: number;
|
|
54
|
+
};
|
|
55
|
+
radius?: number;
|
|
56
|
+
spread?: number;
|
|
57
|
+
blendMode?: string;
|
|
58
|
+
}
|
|
59
|
+
interface Annotation {
|
|
60
|
+
label?: string;
|
|
61
|
+
labelV2?: string;
|
|
62
|
+
properties?: unknown[];
|
|
63
|
+
}
|
|
64
|
+
interface ComponentPropDef {
|
|
65
|
+
id?: Guid;
|
|
66
|
+
name?: string;
|
|
67
|
+
type?: string;
|
|
68
|
+
}
|
|
69
|
+
export interface FigNode {
|
|
70
|
+
guid?: Guid;
|
|
71
|
+
overrideKey?: Guid;
|
|
72
|
+
parentIndex?: {
|
|
73
|
+
guid?: Guid;
|
|
74
|
+
position?: string;
|
|
75
|
+
};
|
|
76
|
+
type?: string;
|
|
77
|
+
name?: string;
|
|
78
|
+
description?: string;
|
|
79
|
+
componentKey?: string;
|
|
80
|
+
componentPropDefs?: ComponentPropDef[];
|
|
81
|
+
componentPropAssignments?: unknown[];
|
|
82
|
+
componentPropRefs?: unknown[];
|
|
83
|
+
annotations?: Annotation[];
|
|
84
|
+
isSymbolPublishable?: boolean;
|
|
85
|
+
visible?: boolean;
|
|
86
|
+
size?: {
|
|
87
|
+
x: number;
|
|
88
|
+
y: number;
|
|
89
|
+
};
|
|
90
|
+
transform?: {
|
|
91
|
+
m00: number;
|
|
92
|
+
m01: number;
|
|
93
|
+
m02: number;
|
|
94
|
+
m10: number;
|
|
95
|
+
m11: number;
|
|
96
|
+
m12: number;
|
|
97
|
+
};
|
|
98
|
+
fillPaints?: Paint[];
|
|
99
|
+
strokePaints?: Paint[];
|
|
100
|
+
styleIdForFill?: {
|
|
101
|
+
guid?: Guid;
|
|
102
|
+
assetRef?: {
|
|
103
|
+
key?: string;
|
|
104
|
+
version?: string;
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
styleIdForStroke?: {
|
|
108
|
+
guid?: Guid;
|
|
109
|
+
assetRef?: {
|
|
110
|
+
key?: string;
|
|
111
|
+
version?: string;
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
styleIdForText?: {
|
|
115
|
+
guid?: Guid;
|
|
116
|
+
assetRef?: {
|
|
117
|
+
key?: string;
|
|
118
|
+
version?: string;
|
|
119
|
+
};
|
|
120
|
+
};
|
|
121
|
+
key?: string;
|
|
122
|
+
styleType?: string;
|
|
123
|
+
strokeWeight?: number;
|
|
124
|
+
strokeAlign?: string;
|
|
125
|
+
effects?: Effect[];
|
|
126
|
+
opacity?: number;
|
|
127
|
+
blendMode?: string;
|
|
128
|
+
cornerRadius?: number;
|
|
129
|
+
rectangleTopLeftCornerRadius?: number;
|
|
130
|
+
rectangleTopRightCornerRadius?: number;
|
|
131
|
+
rectangleBottomLeftCornerRadius?: number;
|
|
132
|
+
rectangleBottomRightCornerRadius?: number;
|
|
133
|
+
fontSize?: number;
|
|
134
|
+
fontName?: {
|
|
135
|
+
family?: string;
|
|
136
|
+
style?: string;
|
|
137
|
+
};
|
|
138
|
+
letterSpacing?: {
|
|
139
|
+
value: number;
|
|
140
|
+
units?: string;
|
|
141
|
+
};
|
|
142
|
+
lineHeight?: {
|
|
143
|
+
value: number;
|
|
144
|
+
units?: string;
|
|
145
|
+
};
|
|
146
|
+
textAlignHorizontal?: string;
|
|
147
|
+
textAlignVertical?: string;
|
|
148
|
+
textData?: {
|
|
149
|
+
characters?: string;
|
|
150
|
+
};
|
|
151
|
+
textAutoResize?: string;
|
|
152
|
+
symbolData?: {
|
|
153
|
+
symbolID?: Guid;
|
|
154
|
+
symbolOverrides?: SymbolOverride[];
|
|
155
|
+
};
|
|
156
|
+
stackMode?: string;
|
|
157
|
+
stackPrimaryAlignItems?: string;
|
|
158
|
+
stackCounterAlignItems?: string;
|
|
159
|
+
stackSpacing?: number;
|
|
160
|
+
stackHorizontalPadding?: number;
|
|
161
|
+
stackVerticalPadding?: number;
|
|
162
|
+
stackPaddingLeft?: number;
|
|
163
|
+
stackPaddingRight?: number;
|
|
164
|
+
stackPaddingTop?: number;
|
|
165
|
+
stackPaddingBottom?: number;
|
|
166
|
+
stackPrimarySizing?: string;
|
|
167
|
+
stackCounterSizing?: string;
|
|
168
|
+
stackChildPrimaryGrow?: number;
|
|
169
|
+
stackChildAlignSelf?: string;
|
|
170
|
+
resizeToFit?: boolean;
|
|
171
|
+
horizontalConstraint?: string;
|
|
172
|
+
verticalConstraint?: string;
|
|
173
|
+
frameMaskDisabled?: boolean;
|
|
174
|
+
internalOnly?: boolean;
|
|
175
|
+
fillGeometry?: Array<{
|
|
176
|
+
commandsBlob?: number;
|
|
177
|
+
windingRule?: string;
|
|
178
|
+
styleID?: number;
|
|
179
|
+
}>;
|
|
180
|
+
strokeGeometry?: Array<{
|
|
181
|
+
commandsBlob?: number;
|
|
182
|
+
windingRule?: string;
|
|
183
|
+
styleID?: number;
|
|
184
|
+
}>;
|
|
185
|
+
strokeJoin?: string;
|
|
186
|
+
strokeCap?: string;
|
|
187
|
+
strokeDashes?: number[];
|
|
188
|
+
vectorData?: {
|
|
189
|
+
normalizedSize?: {
|
|
190
|
+
x: number;
|
|
191
|
+
y: number;
|
|
192
|
+
};
|
|
193
|
+
vectorNetworkBlob?: number;
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
export declare function guidKey(g: Guid | undefined): string;
|
|
197
|
+
/**
|
|
198
|
+
* A raw symbol override entry from `symbolData.symbolOverrides`. It is
|
|
199
|
+
* effectively a partial NodeChange targeting a descendant of the master
|
|
200
|
+
* symbol via `guidPath`. Any field present (other than `guidPath` and
|
|
201
|
+
* `overriddenSymbolID`) is shallow-merged onto the descendant node when
|
|
202
|
+
* it's emitted, so layout-affecting overrides like `size`, `textAutoResize`,
|
|
203
|
+
* `stackChildAlignSelf`, `stackCounterSizing`, `textAlignVertical`, etc.
|
|
204
|
+
* all flow through.
|
|
205
|
+
*/
|
|
206
|
+
interface SymbolOverride extends Partial<FigNode> {
|
|
207
|
+
overriddenSymbolID?: Guid;
|
|
208
|
+
guidPath?: {
|
|
209
|
+
guids?: Guid[];
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
export interface RenderedFrame {
|
|
213
|
+
pageName: string;
|
|
214
|
+
pageDirName: string;
|
|
215
|
+
frameName: string;
|
|
216
|
+
/** Sanitized + de-duplicated filename including the `.html` extension. */
|
|
217
|
+
fileName: string;
|
|
218
|
+
/** Path relative to the render root, e.g. `page-1/login.html`. */
|
|
219
|
+
relativePath: string;
|
|
220
|
+
html: string;
|
|
221
|
+
}
|
|
222
|
+
export interface RenderHtmlResult {
|
|
223
|
+
pageCount: number;
|
|
224
|
+
frameCount: number;
|
|
225
|
+
frames: RenderedFrame[];
|
|
226
|
+
}
|
|
227
|
+
export interface RenderHtmlOptions {
|
|
228
|
+
/** Optional prefix for image url() references (default: "../images") */
|
|
229
|
+
imageRefBase?: string;
|
|
230
|
+
/** Pre-built `hash -> filename` map for image references. */
|
|
231
|
+
imageMap?: Map<string, string>;
|
|
232
|
+
/*** Optional set of page (CANVAS) and/or frame GUID keys */
|
|
233
|
+
selection?: Set<string>;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Collect the renderable top-level units on a page. Figma allows SECTION
|
|
237
|
+
* nodes (and nested sections) to wrap frames; sections are organizational
|
|
238
|
+
* containers, not standalone designs, so we recurse THROUGH them and
|
|
239
|
+
* collect the frames inside. Anything that isn't a SECTION or a
|
|
240
|
+
* renderable type is ignored. Children are returned in document order
|
|
241
|
+
* (depth-first across sections).
|
|
242
|
+
*/
|
|
243
|
+
export declare function collectTopLevelFrames(parent: FigNode, childrenOf: Map<string, FigNode[]>): FigNode[];
|
|
244
|
+
export declare function renderHtmlTemplates(document: unknown, options?: RenderHtmlOptions): RenderHtmlResult;
|
|
245
|
+
export {};
|
|
246
|
+
//# sourceMappingURL=fig-to-html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fig-to-html.d.ts","sourceRoot":"","sources":["../../../src/brand-kit/fig/fig-to-html.ts"],"names":[],"mappings":"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"}
|