@mp3wizard/figma-console-mcp 1.32.3 → 1.34.1

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 (137) hide show
  1. package/README.md +25 -17
  2. package/dist/cloudflare/core/cloud-websocket-connector.js +18 -0
  3. package/dist/cloudflare/core/design-system-manifest.js +19 -14
  4. package/dist/cloudflare/core/design-system-tools.js +43 -34
  5. package/dist/cloudflare/core/diagnose-tool.js +4 -0
  6. package/dist/cloudflare/core/enrichment/enrichment-service.js +11 -5
  7. package/dist/cloudflare/core/enrichment/style-resolver.js +38 -18
  8. package/dist/cloudflare/core/figma-api.js +118 -54
  9. package/dist/cloudflare/core/figma-tools.js +179 -63
  10. package/dist/cloudflare/core/port-discovery.js +404 -31
  11. package/dist/cloudflare/core/tokens/alias-resolver.js +75 -5
  12. package/dist/cloudflare/core/tokens/config.js +10 -0
  13. package/dist/cloudflare/core/tokens/dialect.js +232 -0
  14. package/dist/cloudflare/core/tokens/figma-converter.js +144 -16
  15. package/dist/cloudflare/core/tokens/formatters/css-vars.js +21 -12
  16. package/dist/cloudflare/core/tokens/formatters/dtcg.js +106 -30
  17. package/dist/cloudflare/core/tokens/formatters/json.js +28 -10
  18. package/dist/cloudflare/core/tokens/formatters/scss.js +19 -13
  19. package/dist/cloudflare/core/tokens/formatters/style-dictionary-v3.js +15 -9
  20. package/dist/cloudflare/core/tokens/formatters/tailwind-v4.js +14 -9
  21. package/dist/cloudflare/core/tokens/formatters/tokens-studio.js +11 -5
  22. package/dist/cloudflare/core/tokens/index.js +2 -1
  23. package/dist/cloudflare/core/tokens/parsers/dtcg.js +32 -5
  24. package/dist/cloudflare/core/tokens/schemas.js +4 -0
  25. package/dist/cloudflare/core/tokens-tools.js +1017 -88
  26. package/dist/cloudflare/core/version-tools.js +44 -3
  27. package/dist/cloudflare/core/websocket-connector.js +42 -0
  28. package/dist/cloudflare/core/websocket-server.js +99 -8
  29. package/dist/cloudflare/core/write-tools.js +355 -86
  30. package/dist/cloudflare/index.js +7 -7
  31. package/dist/core/design-system-manifest.d.ts +1 -0
  32. package/dist/core/design-system-manifest.d.ts.map +1 -1
  33. package/dist/core/design-system-manifest.js +19 -14
  34. package/dist/core/design-system-manifest.js.map +1 -1
  35. package/dist/core/design-system-tools.d.ts.map +1 -1
  36. package/dist/core/design-system-tools.js +43 -34
  37. package/dist/core/design-system-tools.js.map +1 -1
  38. package/dist/core/diagnose-tool.d.ts +8 -0
  39. package/dist/core/diagnose-tool.d.ts.map +1 -1
  40. package/dist/core/diagnose-tool.js +4 -0
  41. package/dist/core/diagnose-tool.js.map +1 -1
  42. package/dist/core/enrichment/enrichment-service.d.ts.map +1 -1
  43. package/dist/core/enrichment/enrichment-service.js +11 -5
  44. package/dist/core/enrichment/enrichment-service.js.map +1 -1
  45. package/dist/core/enrichment/style-resolver.d.ts +7 -2
  46. package/dist/core/enrichment/style-resolver.d.ts.map +1 -1
  47. package/dist/core/enrichment/style-resolver.js +38 -18
  48. package/dist/core/enrichment/style-resolver.js.map +1 -1
  49. package/dist/core/figma-api.d.ts +18 -9
  50. package/dist/core/figma-api.d.ts.map +1 -1
  51. package/dist/core/figma-api.js +118 -54
  52. package/dist/core/figma-api.js.map +1 -1
  53. package/dist/core/figma-connector.d.ts +12 -0
  54. package/dist/core/figma-connector.d.ts.map +1 -1
  55. package/dist/core/figma-tools.d.ts.map +1 -1
  56. package/dist/core/figma-tools.js +179 -63
  57. package/dist/core/figma-tools.js.map +1 -1
  58. package/dist/core/port-discovery.d.ts +40 -0
  59. package/dist/core/port-discovery.d.ts.map +1 -1
  60. package/dist/core/port-discovery.js +404 -31
  61. package/dist/core/port-discovery.js.map +1 -1
  62. package/dist/core/tokens/alias-resolver.d.ts +45 -3
  63. package/dist/core/tokens/alias-resolver.d.ts.map +1 -1
  64. package/dist/core/tokens/alias-resolver.js +75 -5
  65. package/dist/core/tokens/alias-resolver.js.map +1 -1
  66. package/dist/core/tokens/config.d.ts +28 -0
  67. package/dist/core/tokens/config.d.ts.map +1 -1
  68. package/dist/core/tokens/config.js +10 -0
  69. package/dist/core/tokens/config.js.map +1 -1
  70. package/dist/core/tokens/dialect.d.ts +107 -0
  71. package/dist/core/tokens/dialect.d.ts.map +1 -0
  72. package/dist/core/tokens/dialect.js +233 -0
  73. package/dist/core/tokens/dialect.js.map +1 -0
  74. package/dist/core/tokens/figma-converter.d.ts +23 -2
  75. package/dist/core/tokens/figma-converter.d.ts.map +1 -1
  76. package/dist/core/tokens/figma-converter.js +144 -16
  77. package/dist/core/tokens/figma-converter.js.map +1 -1
  78. package/dist/core/tokens/formatters/css-vars.d.ts.map +1 -1
  79. package/dist/core/tokens/formatters/css-vars.js +21 -12
  80. package/dist/core/tokens/formatters/css-vars.js.map +1 -1
  81. package/dist/core/tokens/formatters/dtcg.d.ts +2 -2
  82. package/dist/core/tokens/formatters/dtcg.d.ts.map +1 -1
  83. package/dist/core/tokens/formatters/dtcg.js +106 -30
  84. package/dist/core/tokens/formatters/dtcg.js.map +1 -1
  85. package/dist/core/tokens/formatters/json.d.ts.map +1 -1
  86. package/dist/core/tokens/formatters/json.js +28 -10
  87. package/dist/core/tokens/formatters/json.js.map +1 -1
  88. package/dist/core/tokens/formatters/scss.d.ts.map +1 -1
  89. package/dist/core/tokens/formatters/scss.js +19 -13
  90. package/dist/core/tokens/formatters/scss.js.map +1 -1
  91. package/dist/core/tokens/formatters/style-dictionary-v3.d.ts.map +1 -1
  92. package/dist/core/tokens/formatters/style-dictionary-v3.js +15 -9
  93. package/dist/core/tokens/formatters/style-dictionary-v3.js.map +1 -1
  94. package/dist/core/tokens/formatters/tailwind-v4.d.ts.map +1 -1
  95. package/dist/core/tokens/formatters/tailwind-v4.js +14 -9
  96. package/dist/core/tokens/formatters/tailwind-v4.js.map +1 -1
  97. package/dist/core/tokens/formatters/tokens-studio.d.ts.map +1 -1
  98. package/dist/core/tokens/formatters/tokens-studio.js +11 -5
  99. package/dist/core/tokens/formatters/tokens-studio.js.map +1 -1
  100. package/dist/core/tokens/index.d.ts +2 -1
  101. package/dist/core/tokens/index.d.ts.map +1 -1
  102. package/dist/core/tokens/index.js +2 -1
  103. package/dist/core/tokens/index.js.map +1 -1
  104. package/dist/core/tokens/parsers/dtcg.js +32 -5
  105. package/dist/core/tokens/parsers/dtcg.js.map +1 -1
  106. package/dist/core/tokens/schemas.d.ts +3 -0
  107. package/dist/core/tokens/schemas.d.ts.map +1 -1
  108. package/dist/core/tokens/schemas.js +4 -0
  109. package/dist/core/tokens/schemas.js.map +1 -1
  110. package/dist/core/tokens/types.d.ts +57 -1
  111. package/dist/core/tokens/types.d.ts.map +1 -1
  112. package/dist/core/tokens/types.js.map +1 -1
  113. package/dist/core/tokens-tools.d.ts +250 -7
  114. package/dist/core/tokens-tools.d.ts.map +1 -1
  115. package/dist/core/tokens-tools.js +1017 -88
  116. package/dist/core/tokens-tools.js.map +1 -1
  117. package/dist/core/version-tools.d.ts.map +1 -1
  118. package/dist/core/version-tools.js +44 -3
  119. package/dist/core/version-tools.js.map +1 -1
  120. package/dist/core/websocket-connector.d.ts +38 -0
  121. package/dist/core/websocket-connector.d.ts.map +1 -1
  122. package/dist/core/websocket-connector.js +42 -0
  123. package/dist/core/websocket-connector.js.map +1 -1
  124. package/dist/core/websocket-server.d.ts +23 -0
  125. package/dist/core/websocket-server.d.ts.map +1 -1
  126. package/dist/core/websocket-server.js +99 -8
  127. package/dist/core/websocket-server.js.map +1 -1
  128. package/dist/core/write-tools.d.ts.map +1 -1
  129. package/dist/core/write-tools.js +355 -86
  130. package/dist/core/write-tools.js.map +1 -1
  131. package/dist/local.d.ts +0 -1
  132. package/dist/local.d.ts.map +1 -1
  133. package/dist/local.js +253 -63
  134. package/dist/local.js.map +1 -1
  135. package/figma-desktop-bridge/code.js +382 -28
  136. package/figma-desktop-bridge/ui.html +578 -292
  137. package/package.json +2 -2
@@ -0,0 +1,233 @@
1
+ /**
2
+ * DTCG dialect helpers — legacy vs 2025.10 value encodings.
3
+ *
4
+ * The token pipeline historically speaks the "legacy" DTCG dialect: colors
5
+ * as hex strings ("#4085F2"), FLOAT dimensions as bare numbers. The DTCG
6
+ * 2025.10 spec (https://tr.designtokens.org/format/) switched to object
7
+ * forms:
8
+ *
9
+ * color = { colorSpace: "srgb", components: [r, g, b], alpha?, hex? }
10
+ * dimension = { value: number, unit: "px" | "rem" }
11
+ * duration = { value: number, unit: "ms" | "s" } (we already emit this)
12
+ *
13
+ * Export stays legacy by default (downstream consumers depend on it) and
14
+ * opts into 2025 via the `dtcgDialect` option. Import accepts BOTH dialects
15
+ * unconditionally. This module centralizes:
16
+ *
17
+ * - 2025 encoding helpers used by the dtcg/json formatters at render time
18
+ * - dialect-agnostic canonicalization used by the import diff so a 2025
19
+ * color object compares equal to the same color's legacy hex string
20
+ * (both are quantized to 1/255 per channel, tolerating the 8-bit
21
+ * precision loss inherent to hex)
22
+ * - stripping of the transient `rawColor` field the converter carries on
23
+ * COLOR TokenValues (full-precision floats for 2025 components) so it
24
+ * never leaks into serialized output
25
+ */
26
+ export function clamp01(n) {
27
+ if (Number.isNaN(n))
28
+ return 0;
29
+ return Math.max(0, Math.min(1, n));
30
+ }
31
+ function byteHex(f) {
32
+ return Math.round(clamp01(f) * 255)
33
+ .toString(16)
34
+ .padStart(2, "0");
35
+ }
36
+ /**
37
+ * Canonicalize any color-like literal to a lowercase 8-digit hex string
38
+ * (`#rrggbbaa`), or return null when the literal isn't recognizably a color.
39
+ *
40
+ * Accepts:
41
+ * - hex strings: #rgb, #rrggbb, #rrggbbaa
42
+ * - 2025.10 color objects with srgb (or unspecified) colorSpace +
43
+ * 3 numeric components (+ optional alpha)
44
+ * - color objects with a hex fallback field (any colorSpace) + optional alpha
45
+ *
46
+ * Both the components form and the hex form quantize to 1 / 255 per channel,
47
+ * so a full-precision components array compares equal to the hex string the
48
+ * legacy pipeline derived from the same Figma floats.
49
+ */
50
+ export function colorLiteralToCanonicalHex(literal) {
51
+ if (typeof literal === "string") {
52
+ const m = literal
53
+ .trim()
54
+ .match(/^#([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i);
55
+ if (!m)
56
+ return null;
57
+ let digits = m[1].toLowerCase();
58
+ if (digits.length === 3) {
59
+ digits = digits
60
+ .split("")
61
+ .map((c) => c + c)
62
+ .join("");
63
+ }
64
+ if (digits.length === 6)
65
+ digits += "ff";
66
+ return `#${digits}`;
67
+ }
68
+ if (literal && typeof literal === "object" && !Array.isArray(literal)) {
69
+ const o = literal;
70
+ const colorSpace = typeof o.colorSpace === "string" ? o.colorSpace : undefined;
71
+ const comps = o.components;
72
+ if ((colorSpace === undefined || colorSpace === "srgb") &&
73
+ Array.isArray(comps) &&
74
+ comps.length === 3 &&
75
+ comps.every((c) => typeof c === "number")) {
76
+ const [r, g, b] = comps;
77
+ const a = typeof o.alpha === "number" ? o.alpha : 1;
78
+ return `#${byteHex(r)}${byteHex(g)}${byteHex(b)}${byteHex(a)}`;
79
+ }
80
+ if (typeof o.hex === "string") {
81
+ const base = colorLiteralToCanonicalHex(o.hex);
82
+ if (!base)
83
+ return null;
84
+ if (typeof o.alpha === "number") {
85
+ return base.slice(0, 7) + byteHex(o.alpha);
86
+ }
87
+ return base;
88
+ }
89
+ }
90
+ return null;
91
+ }
92
+ /**
93
+ * Parse a hex color string to raw rgba floats (0–1). Returns null on
94
+ * anything that isn't a valid 3/6/8-digit hex string.
95
+ */
96
+ export function hexToRawRgba(hex) {
97
+ const canonical = colorLiteralToCanonicalHex(hex);
98
+ if (!canonical)
99
+ return null;
100
+ const d = canonical.slice(1);
101
+ return {
102
+ r: parseInt(d.slice(0, 2), 16) / 255,
103
+ g: parseInt(d.slice(2, 4), 16) / 255,
104
+ b: parseInt(d.slice(4, 6), 16) / 255,
105
+ a: parseInt(d.slice(6, 8), 16) / 255,
106
+ };
107
+ }
108
+ /**
109
+ * Encode a color TokenValue in the DTCG 2025.10 object form.
110
+ *
111
+ * Prefers the converter's transient `rawColor` floats (full precision — NOT
112
+ * round-tripped through 8-bit hex); falls back to parsing a hex-string
113
+ * literal. Literals already in object form pass through verbatim. Returns
114
+ * null when the value can't be encoded (caller keeps the legacy rendering).
115
+ *
116
+ * `alpha` is emitted only when < 1; `hex` is always included as the interop
117
+ * courtesy field (#RRGGBB, alpha carried separately).
118
+ */
119
+ export function colorValueTo2025(value) {
120
+ const lit = value.literal;
121
+ if (lit && typeof lit === "object" && !Array.isArray(lit)) {
122
+ // Already object-form (e.g. a re-exported 2025 document) — pass through.
123
+ const o = lit;
124
+ if ("colorSpace" in o || "components" in o || "hex" in o)
125
+ return o;
126
+ return null;
127
+ }
128
+ let floats = value.rawColor ?? null;
129
+ if (!floats && typeof lit === "string") {
130
+ floats = hexToRawRgba(lit);
131
+ }
132
+ if (!floats)
133
+ return null;
134
+ const { r, g, b, a } = floats;
135
+ return {
136
+ colorSpace: "srgb",
137
+ components: [r, g, b],
138
+ ...(a < 1 ? { alpha: a } : {}),
139
+ hex: `#${byteHex(r)}${byteHex(g)}${byteHex(b)}`.toUpperCase(),
140
+ };
141
+ }
142
+ /**
143
+ * Encode a dimension literal in the DTCG 2025.10 object form. The converter
144
+ * emits Figma FLOAT dimensions as bare unitless numbers conventionally
145
+ * interpreted as px (the same convention the css/json formatters use), so
146
+ * only bare finite numbers are converted; everything else (unit strings,
147
+ * pre-encoded objects) keeps its current rendering.
148
+ */
149
+ export function dimensionLiteralTo2025(literal) {
150
+ if (typeof literal === "number" && Number.isFinite(literal)) {
151
+ return { value: literal, unit: "px" };
152
+ }
153
+ return null;
154
+ }
155
+ /**
156
+ * Normalize a TokenValue to a dialect-agnostic comparable form for diffing:
157
+ *
158
+ * - the transient `rawColor` field is dropped (Figma-side values carry it;
159
+ * parsed code-side values never do)
160
+ * - color-like literals (hex strings OR 2025 color objects) normalize to a
161
+ * lowercase 8-digit hex string, quantized to 1/255 per channel
162
+ * - `{ value, unit }` objects with px/ms normalize to the bare number
163
+ * ("s" converts to ms first), so `{value: 16, unit: "px"}` equals 16 and
164
+ * `{value: 0.3, unit: "s"}` equals `{value: 300, unit: "ms"}`
165
+ * - "16px"-style strings normalize to the bare number
166
+ *
167
+ * Conservative by design: anything not confidently recognized is returned
168
+ * unchanged (minus rawColor), falling back to the existing deep comparison.
169
+ */
170
+ export function canonicalizeTokenValueForComparison(v) {
171
+ if (v === null || typeof v !== "object" || Array.isArray(v))
172
+ return v;
173
+ const obj = v;
174
+ if (!("literal" in obj) && !("reference" in obj))
175
+ return v;
176
+ const { rawColor: _rawColor, ...rest } = obj;
177
+ if (rest.literal !== undefined) {
178
+ const hex = colorLiteralToCanonicalHex(rest.literal);
179
+ if (hex !== null)
180
+ return { ...rest, literal: hex };
181
+ const num = numericLiteralToCanonical(rest.literal);
182
+ if (num !== null)
183
+ return { ...rest, literal: num };
184
+ }
185
+ return rest;
186
+ }
187
+ /**
188
+ * Normalize dimension/duration-shaped literals to a bare comparable number:
189
+ * - `{ value: n, unit: "px" | "ms" }` → n
190
+ * - `{ value: n, unit: "s" }` → n * 1000 (canonical ms)
191
+ * - `"16px"` strings → 16
192
+ * Returns null for everything else (including rem/em/% and objects with
193
+ * extra fields — those keep structural comparison).
194
+ */
195
+ function numericLiteralToCanonical(literal) {
196
+ if (typeof literal === "string") {
197
+ const m = literal.trim().match(/^(-?(?:\d+\.?\d*|\.\d+))px$/i);
198
+ return m ? Number(m[1]) : null;
199
+ }
200
+ if (literal &&
201
+ typeof literal === "object" &&
202
+ !Array.isArray(literal) &&
203
+ Object.keys(literal).length === 2) {
204
+ const o = literal;
205
+ if (typeof o.value === "number" && typeof o.unit === "string") {
206
+ if (o.unit === "px" || o.unit === "ms")
207
+ return o.value;
208
+ if (o.unit === "s")
209
+ return o.value * 1000;
210
+ }
211
+ }
212
+ return null;
213
+ }
214
+ /**
215
+ * Return a copy of a mode-keyed TokenValue map with the transient `rawColor`
216
+ * field removed from every entry. Used wherever values get serialized
217
+ * (lastSyncedValue snapshots, diff-plan samples) so the transient field never
218
+ * appears in output — keeping legacy output byte-identical.
219
+ */
220
+ export function stripRawColorFromValues(values) {
221
+ const out = {};
222
+ for (const [k, v] of Object.entries(values)) {
223
+ if (v && typeof v === "object" && "rawColor" in v) {
224
+ const { rawColor: _rawColor, ...rest } = v;
225
+ out[k] = rest;
226
+ }
227
+ else {
228
+ out[k] = v;
229
+ }
230
+ }
231
+ return out;
232
+ }
233
+ //# sourceMappingURL=dialect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialect.js","sourceRoot":"","sources":["../../../src/core/tokens/dialect.ts"],"names":[],"mappings":"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"}
@@ -31,22 +31,43 @@ interface FigmaVariable {
31
31
  id: string;
32
32
  name: string;
33
33
  key?: string;
34
- resolvedType: "COLOR" | "FLOAT" | "STRING" | "BOOLEAN";
34
+ resolvedType: "COLOR" | "FLOAT" | "STRING" | "BOOLEAN" | "TIMING" | "EASING";
35
35
  variableCollectionId: string;
36
36
  description?: string;
37
37
  scopes?: string[];
38
+ /** Per-platform code syntax (WEB / ANDROID / iOS → string). */
39
+ codeSyntax?: Record<string, string>;
38
40
  /**
39
41
  * Per-mode values. Each value is either a literal or a `{ type: "VARIABLE_ALIAS", id }`
40
42
  * pointing at another variable.
41
43
  */
42
44
  valuesByMode: Record<string, FigmaValue>;
43
45
  }
46
+ /**
47
+ * Config-2026 EASING variable value shape. `bezierValues` is present for
48
+ * bezier-based easings; spring easings carry `springValues` instead (and no
49
+ * usable bezier).
50
+ */
51
+ interface FigmaEasingValue {
52
+ easingType?: string;
53
+ bezierValues?: {
54
+ p1x: number;
55
+ p1y: number;
56
+ p2x: number;
57
+ p2y: number;
58
+ };
59
+ springValues?: {
60
+ mass?: number;
61
+ stiffness?: number;
62
+ damping?: number;
63
+ };
64
+ }
44
65
  type FigmaValue = {
45
66
  r: number;
46
67
  g: number;
47
68
  b: number;
48
69
  a?: number;
49
- } | number | string | boolean | VariableAlias;
70
+ } | number | string | boolean | FigmaEasingValue | VariableAlias;
50
71
  interface VariableAlias {
51
72
  type: "VARIABLE_ALIAS";
52
73
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"figma-converter.d.ts","sourceRoot":"","sources":["../../../src/core/tokens/figma-converter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAEV,aAAa,EAId,MAAM,YAAY,CAAC;AAEpB;;;;GAIG;AACH,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,UAAU,aAAa;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CAC1C;AAED,KAAK,UAAU,GACX;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C,MAAM,GACN,MAAM,GACN,OAAO,GACP,aAAa,CAAC;AAElB,UAAU,aAAa;IACrB,IAAI,EAAE,gBAAgB,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACzB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,qBAAqB,EAC9B,IAAI,GAAE,cAAmB,GACxB,aAAa,CA6Bf"}
1
+ {"version":3,"file":"figma-converter.d.ts","sourceRoot":"","sources":["../../../src/core/tokens/figma-converter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAEV,aAAa,EAId,MAAM,YAAY,CAAC;AAIpB;;;;GAIG;AACH,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,UAAU,aAAa;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC7E,oBAAoB,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CAC1C;AAED;;;;GAIG;AACH,UAAU,gBAAgB;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,YAAY,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE;AAED,KAAK,UAAU,GACX;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C,MAAM,GACN,MAAM,GACN,OAAO,GACP,gBAAgB,GAChB,aAAa,CAAC;AAElB,UAAU,aAAa;IACrB,IAAI,EAAE,gBAAgB,CAAC;IACvB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACzB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,qBAAqB,EAC9B,IAAI,GAAE,cAAmB,GACxB,aAAa,CA4Cf"}
@@ -11,6 +11,8 @@
11
11
  * normalized to our TokenValue shape, and Figma IDs preserved in
12
12
  * $extensions["figma-console-mcp"] for round-trip non-destructiveness.
13
13
  */
14
+ import { slugifySetName } from "./alias-resolver.js";
15
+ import { stripRawColorFromValues } from "./dialect.js";
14
16
  /**
15
17
  * Convert a Figma variables payload to our canonical TokenDocument.
16
18
  */
@@ -20,11 +22,19 @@ export function convertFigmaVariablesToDocument(payload, opts = {}) {
20
22
  const variableById = new Map();
21
23
  for (const v of payload.variables)
22
24
  variableById.set(v.id, v);
25
+ // Collection name lookup — alias references must carry the owning set so
26
+ // same-path tokens across collections don't misresolve (and so emitted
27
+ // DTCG references point at the actual set group in the output tree).
28
+ // Built over ALL collections (not just the filtered ones) because an
29
+ // alias can target a variable in a collection outside the export scope.
30
+ const collectionNameById = new Map();
31
+ for (const c of payload.collections)
32
+ collectionNameById.set(c.id, c.name);
23
33
  // Filter collections per scope.
24
34
  const wantedCollections = opts.collectionIds?.length
25
35
  ? payload.collections.filter((c) => opts.collectionIds.includes(c.id))
26
36
  : payload.collections;
27
- const sets = wantedCollections.map((collection) => convertCollection(collection, payload.variables, variableById, opts, warnings));
37
+ const sets = wantedCollections.map((collection) => convertCollection(collection, payload.variables, variableById, collectionNameById, opts, warnings));
28
38
  return {
29
39
  document: {
30
40
  $schema: "https://figma-console-mcp.southleft.com/schemas/dtcg-extended-v1.json",
@@ -38,7 +48,7 @@ export function convertFigmaVariablesToDocument(payload, opts = {}) {
38
48
  warnings,
39
49
  };
40
50
  }
41
- function convertCollection(collection, allVariables, variableById, opts, warnings) {
51
+ function convertCollection(collection, allVariables, variableById, collectionNameById, opts, warnings) {
42
52
  // Mode filter: keep only modes the caller wants, intersected with what
43
53
  // the collection actually has.
44
54
  const wantedModes = !opts.modes || opts.modes === "all"
@@ -46,7 +56,7 @@ function convertCollection(collection, allVariables, variableById, opts, warning
46
56
  : collection.modes.filter((m) => opts.modes.includes(m.name));
47
57
  // Variables in this collection.
48
58
  const collectionVars = allVariables.filter((v) => v.variableCollectionId === collection.id);
49
- const tokens = collectionVars.map((variable) => convertVariable(variable, wantedModes, variableById, opts, warnings));
59
+ const tokens = collectionVars.map((variable) => convertVariable(variable, wantedModes, variableById, collectionNameById, opts, warnings));
50
60
  return {
51
61
  name: collection.name,
52
62
  modes: wantedModes.map((m) => m.name),
@@ -56,26 +66,47 @@ function convertCollection(collection, allVariables, variableById, opts, warning
56
66
  },
57
67
  };
58
68
  }
59
- function convertVariable(variable, wantedModes, variableById, opts, warnings) {
60
- // Derive the hierarchical path from the Figma variable name. Figma uses
61
- // slashes to indicate grouping: "color/brand/primary" ["color", "brand", "primary"].
69
+ /**
70
+ * Derive a variable's token path from its Figma name. Strips the configured
71
+ * prefix, splits on "/", and for TIMING/EASING variables drops the trailing
72
+ * type segment Figma appends to Config-2026 motion variables (e.g.
73
+ * "motion/duration/quick/Timing" → ["motion", "duration", "quick"]).
74
+ */
75
+ function variableTokenPath(variable, opts) {
62
76
  let name = variable.name;
63
77
  if (opts.stripPrefix && name.startsWith(opts.stripPrefix)) {
64
78
  name = name.slice(opts.stripPrefix.length);
65
79
  }
66
- const path = name.split("/").filter(Boolean);
80
+ const segments = name.split("/").filter(Boolean);
81
+ let strippedTypeSuffix = false;
82
+ if ((variable.resolvedType === "TIMING" || variable.resolvedType === "EASING") &&
83
+ segments.length > 1 &&
84
+ /^(timing|easing)$/i.test(segments[segments.length - 1])) {
85
+ segments.pop();
86
+ strippedTypeSuffix = true;
87
+ }
88
+ return { path: segments, strippedTypeSuffix };
89
+ }
90
+ function convertVariable(variable, wantedModes, variableById, collectionNameById, opts, warnings) {
91
+ // Derive the hierarchical path from the Figma variable name. Figma uses
92
+ // slashes to indicate grouping: "color/brand/primary" → ["color", "brand", "primary"].
93
+ const { path, strippedTypeSuffix } = variableTokenPath(variable, opts);
67
94
  // Map resolvedType to TokenType.
68
95
  const type = mapResolvedType(variable.resolvedType, variable.name, warnings);
69
96
  // Convert each (mode → value) pair to our TokenValue shape, filtered by
70
- // the wanted modes.
97
+ // the wanted modes. Spring easings can't be expressed in DTCG — their
98
+ // parameters get stashed per-mode in the token's extensions.
71
99
  const values = {};
100
+ const springByMode = {};
72
101
  for (const mode of wantedModes) {
73
102
  const rawValue = variable.valuesByMode[mode.modeId];
74
103
  if (rawValue === undefined) {
75
104
  warnings.push(`Variable "${variable.name}" has no value for mode "${mode.name}" (${mode.modeId}); skipping that mode.`);
76
105
  continue;
77
106
  }
78
- values[mode.name] = convertValue(rawValue, variable.resolvedType, variableById, warnings);
107
+ values[mode.name] = convertValue(rawValue, variable, mode.name, variableById, collectionNameById, opts, warnings, (spring) => {
108
+ springByMode[mode.name] = spring;
109
+ });
79
110
  }
80
111
  return {
81
112
  path,
@@ -86,14 +117,45 @@ function convertVariable(variable, wantedModes, variableById, opts, warnings) {
86
117
  "figma-console-mcp": {
87
118
  variableId: variable.id,
88
119
  collectionId: variable.variableCollectionId,
120
+ // The Figma-native type is what import needs to decide writability
121
+ // — TIMING/EASING variables cannot be written via the Plugin API,
122
+ // and FLOAT variables whose token type is "duration" (name-inferred)
123
+ // must NOT be mistaken for TIMING.
124
+ figmaResolvedType: variable.resolvedType,
125
+ // Preserve the original variable name when the token path dropped
126
+ // the trailing "Timing"/"Easing" segment, so round-trip can
127
+ // reconstruct it.
128
+ ...(strippedTypeSuffix ? { figmaName: variable.name } : {}),
129
+ ...(Object.keys(springByMode).length > 0 ? { spring: springByMode } : {}),
130
+ // Scopes: stash only when NON-default. ["ALL_SCOPES"] (Figma's
131
+ // default) and empty/absent arrays are omitted so pre-existing
132
+ // exports stay byte-identical. codeSyntax: stash only when
133
+ // non-empty, same reasoning.
134
+ ...(hasNonDefaultScopes(variable.scopes)
135
+ ? { scopes: [...variable.scopes] }
136
+ : {}),
137
+ ...(variable.codeSyntax && Object.keys(variable.codeSyntax).length > 0
138
+ ? { codeSyntax: { ...variable.codeSyntax } }
139
+ : {}),
89
140
  lastSyncedAt: new Date().toISOString(),
90
141
  // We snapshot the synced value so future merge calls can detect
91
- // two-sided conflicts.
92
- lastSyncedValue: { ...values },
142
+ // two-sided conflicts. rawColor is transient render-time data and
143
+ // must not leak into serialized extensions (legacy output stays
144
+ // byte-identical).
145
+ lastSyncedValue: stripRawColorFromValues({ ...values }),
93
146
  },
94
147
  },
95
148
  };
96
149
  }
150
+ /**
151
+ * True when a variable's scopes array is meaningfully restrictive — i.e.
152
+ * present, non-empty, and not just the default ["ALL_SCOPES"].
153
+ */
154
+ function hasNonDefaultScopes(scopes) {
155
+ if (!Array.isArray(scopes) || scopes.length === 0)
156
+ return false;
157
+ return !(scopes.length === 1 && scopes[0] === "ALL_SCOPES");
158
+ }
97
159
  function mapResolvedType(resolvedType, variableName, warnings) {
98
160
  switch (resolvedType) {
99
161
  case "COLOR":
@@ -109,6 +171,12 @@ function mapResolvedType(resolvedType, variableName, warnings) {
109
171
  return inferStringType(variableName);
110
172
  case "BOOLEAN":
111
173
  return "boolean";
174
+ case "TIMING":
175
+ // Config-2026 motion duration variables — plain numbers in SECONDS.
176
+ return "duration";
177
+ case "EASING":
178
+ // Config-2026 easing variables — bezier (or spring) curve objects.
179
+ return "cubicBezier";
112
180
  default: {
113
181
  const _exhaustive = resolvedType;
114
182
  warnings.push(`Unknown resolvedType "${_exhaustive}" for variable "${variableName}"; treating as string.`);
@@ -133,7 +201,8 @@ function inferStringType(variableName) {
133
201
  return "fontFamily";
134
202
  return "string";
135
203
  }
136
- function convertValue(rawValue, resolvedType, variableById, warnings) {
204
+ function convertValue(rawValue, variable, modeName, variableById, collectionNameById, opts, warnings, onSpring) {
205
+ const resolvedType = variable.resolvedType;
137
206
  // Alias references: convert variable ID → path-based reference for DTCG.
138
207
  if (isVariableAlias(rawValue)) {
139
208
  const target = variableById.get(rawValue.id);
@@ -146,14 +215,38 @@ function convertValue(rawValue, resolvedType, variableById, warnings) {
146
215
  warnings.push(`Alias to unknown variable ID ${rawValue.id} (likely a cross-library reference). Original ID preserved in reference for round-trip.`);
147
216
  return { reference: `{__library:${rawValue.id}}` };
148
217
  }
149
- // The DTCG alias path uses dots: "color.brand.primary".
150
- const dotPath = target.name.replace(/\//g, ".");
151
- return { reference: `{${dotPath}}` };
218
+ // The DTCG alias path uses dots, QUALIFIED by the target's set group
219
+ // (`{<set-slug>.color.brand.primary}`). The set qualifier does two
220
+ // jobs: (1) same-path tokens in different collections resolve to the
221
+ // right target instead of "whichever set was indexed last", and
222
+ // (2) the emitted DTCG reference points at the actual location in the
223
+ // output tree (tokens nest under the slugified set group), so
224
+ // external DTCG tools like Style Dictionary v4 can resolve it.
225
+ const targetPath = variableTokenPath(target, opts).path;
226
+ const dotPath = targetPath.join(".");
227
+ const targetCollectionName = collectionNameById.get(target.variableCollectionId);
228
+ if (!targetCollectionName) {
229
+ warnings.push(`Alias target "${target.name}" belongs to unknown collection ${target.variableCollectionId} — emitting an unqualified reference.`);
230
+ return { reference: `{${dotPath}}` };
231
+ }
232
+ return { reference: `{${slugifySetName(targetCollectionName)}.${dotPath}}` };
152
233
  }
153
234
  // Literal values per type.
154
235
  if (resolvedType === "COLOR") {
155
236
  if (typeof rawValue === "object" && rawValue !== null && "r" in rawValue) {
156
- return { literal: rgbaToHex(rawValue) };
237
+ // The hex string stays the literal (legacy dialect + back-compat), but
238
+ // we also carry the raw full-precision floats so the 2025.10 dialect
239
+ // can emit `components` without round-tripping through 8-bit hex.
240
+ // `rawColor` is transient — see TokenValue.rawColor in types.ts.
241
+ return {
242
+ literal: rgbaToHex(rawValue),
243
+ rawColor: {
244
+ r: rawValue.r,
245
+ g: rawValue.g,
246
+ b: rawValue.b,
247
+ a: rawValue.a ?? 1,
248
+ },
249
+ };
157
250
  }
158
251
  warnings.push(`COLOR value isn't an RGB object: ${JSON.stringify(rawValue)}`);
159
252
  return { literal: String(rawValue) };
@@ -164,6 +257,41 @@ function convertValue(rawValue, resolvedType, variableById, warnings) {
164
257
  if (resolvedType === "BOOLEAN") {
165
258
  return { literal: Boolean(rawValue) };
166
259
  }
260
+ if (resolvedType === "TIMING") {
261
+ // Figma TIMING values are plain numbers in SECONDS. DTCG duration uses
262
+ // the structured `{ value, unit }` form — emit milliseconds.
263
+ if (typeof rawValue === "number") {
264
+ return { literal: { value: rawValue * 1000, unit: "ms" } };
265
+ }
266
+ warnings.push(`TIMING value for "${variable.name}" (mode "${modeName}") isn't a number: ${JSON.stringify(rawValue)} — emitting as string.`);
267
+ return { literal: String(rawValue) };
268
+ }
269
+ if (resolvedType === "EASING") {
270
+ const easing = rawValue;
271
+ const b = easing?.bezierValues;
272
+ if (b &&
273
+ typeof b.p1x === "number" &&
274
+ typeof b.p1y === "number" &&
275
+ typeof b.p2x === "number" &&
276
+ typeof b.p2y === "number") {
277
+ // DTCG cubicBezier: [p1x, p1y, p2x, p2y].
278
+ return { literal: [b.p1x, b.p1y, b.p2x, b.p2y] };
279
+ }
280
+ if (easing && typeof easing === "object" && easing.springValues) {
281
+ // Spring easings have no bezier representation — DTCG cannot express
282
+ // springs. Emit a standard "ease" bezier as a usable approximation
283
+ // and preserve the spring parameters in the token's
284
+ // figma-console-mcp extensions for round-trip.
285
+ warnings.push(`EASING variable "${variable.name}" (mode "${modeName}") is a spring (${easing.easingType ?? "unknown type"}) — DTCG cannot represent springs. Emitted a fallback cubicBezier; spring parameters preserved in $extensions["figma-console-mcp"].spring.`);
286
+ onSpring({
287
+ easingType: easing.easingType,
288
+ springValues: easing.springValues,
289
+ });
290
+ return { literal: [0.25, 0.1, 0.25, 1.0] };
291
+ }
292
+ warnings.push(`EASING value for "${variable.name}" (mode "${modeName}") has no usable bezierValues or springValues: ${JSON.stringify(rawValue)} — emitting as string.`);
293
+ return { literal: String(rawValue) };
294
+ }
167
295
  // STRING and fallthrough.
168
296
  return { literal: typeof rawValue === "string" ? rawValue : String(rawValue) };
169
297
  }
@@ -1 +1 @@
1
- {"version":3,"file":"figma-converter.js","sourceRoot":"","sources":["../../../src/core/tokens/figma-converter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"figma-converter.js","sourceRoot":"","sources":["../../../src/core/tokens/figma-converter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"css-vars.d.ts","sourceRoot":"","sources":["../../../../src/core/tokens/formatters/css-vars.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAS,aAAa,EAAwB,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE9D,wBAAgB,aAAa,CAC3B,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,aAAa,GAClB,YAAY,CA0Dd"}
1
+ {"version":3,"file":"css-vars.d.ts","sourceRoot":"","sources":["../../../../src/core/tokens/formatters/css-vars.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAS,aAAa,EAAwB,MAAM,aAAa,CAAC;AAE9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE9D,wBAAgB,aAAa,CAC3B,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,aAAa,GAClB,YAAY,CAiEd"}