@mp3wizard/figma-console-mcp 1.27.2 → 1.29.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.
- package/README.md +21 -12
- package/dist/apps/design-system-dashboard/mcp-app.html +78 -78
- package/dist/apps/token-browser/mcp-app.html +60 -59
- package/dist/cloudflare/core/design-system-tools.js +1 -1
- package/dist/cloudflare/core/figma-api.js +19 -0
- package/dist/cloudflare/core/library-tools.js +580 -0
- package/dist/cloudflare/core/tokens/alias-resolver.js +37 -0
- package/dist/cloudflare/core/tokens/formatters/json.js +185 -5
- package/dist/cloudflare/core/tokens/formatters/scss.js +251 -3
- package/dist/cloudflare/core/tokens/formatters/stubs.js +6 -4
- package/dist/cloudflare/core/tokens/formatters/style-dictionary-v3.js +206 -3
- package/dist/cloudflare/core/tokens/formatters/tailwind-v3.js +236 -3
- package/dist/cloudflare/core/tokens/formatters/tailwind-v4.js +329 -3
- package/dist/cloudflare/core/tokens/formatters/tokens-studio.js +249 -3
- package/dist/cloudflare/core/tokens/formatters/ts-module.js +197 -3
- package/dist/cloudflare/core/tokens/index.js +1 -1
- package/dist/cloudflare/core/tokens/parsers/stubs.js +13 -6
- package/dist/cloudflare/core/tokens-tools.js +12 -2
- package/dist/cloudflare/index.js +15 -7
- package/dist/core/design-system-tools.d.ts +50 -0
- package/dist/core/design-system-tools.d.ts.map +1 -1
- package/dist/core/design-system-tools.js +1 -1
- package/dist/core/design-system-tools.js.map +1 -1
- package/dist/core/figma-api.d.ts +15 -0
- package/dist/core/figma-api.d.ts.map +1 -1
- package/dist/core/figma-api.js +19 -0
- package/dist/core/figma-api.js.map +1 -1
- package/dist/core/library-tools.d.ts +17 -0
- package/dist/core/library-tools.d.ts.map +1 -0
- package/dist/core/library-tools.js +581 -0
- package/dist/core/library-tools.js.map +1 -0
- package/dist/core/tokens/alias-resolver.d.ts +15 -0
- package/dist/core/tokens/alias-resolver.d.ts.map +1 -1
- package/dist/core/tokens/alias-resolver.js +37 -0
- package/dist/core/tokens/alias-resolver.js.map +1 -1
- package/dist/core/tokens/formatters/json.d.ts +34 -2
- package/dist/core/tokens/formatters/json.d.ts.map +1 -1
- package/dist/core/tokens/formatters/json.js +185 -5
- package/dist/core/tokens/formatters/json.js.map +1 -1
- package/dist/core/tokens/formatters/scss.d.ts +23 -1
- package/dist/core/tokens/formatters/scss.d.ts.map +1 -1
- package/dist/core/tokens/formatters/scss.js +251 -3
- package/dist/core/tokens/formatters/scss.js.map +1 -1
- package/dist/core/tokens/formatters/stubs.d.ts +3 -3
- package/dist/core/tokens/formatters/stubs.d.ts.map +1 -1
- package/dist/core/tokens/formatters/stubs.js +6 -4
- package/dist/core/tokens/formatters/stubs.js.map +1 -1
- package/dist/core/tokens/formatters/style-dictionary-v3.d.ts +42 -1
- package/dist/core/tokens/formatters/style-dictionary-v3.d.ts.map +1 -1
- package/dist/core/tokens/formatters/style-dictionary-v3.js +206 -3
- package/dist/core/tokens/formatters/style-dictionary-v3.js.map +1 -1
- package/dist/core/tokens/formatters/tailwind-v3.d.ts +34 -1
- package/dist/core/tokens/formatters/tailwind-v3.d.ts.map +1 -1
- package/dist/core/tokens/formatters/tailwind-v3.js +236 -3
- package/dist/core/tokens/formatters/tailwind-v3.js.map +1 -1
- package/dist/core/tokens/formatters/tailwind-v4.d.ts +38 -1
- package/dist/core/tokens/formatters/tailwind-v4.d.ts.map +1 -1
- package/dist/core/tokens/formatters/tailwind-v4.js +329 -3
- package/dist/core/tokens/formatters/tailwind-v4.js.map +1 -1
- package/dist/core/tokens/formatters/tokens-studio.d.ts +41 -1
- package/dist/core/tokens/formatters/tokens-studio.d.ts.map +1 -1
- package/dist/core/tokens/formatters/tokens-studio.js +249 -3
- package/dist/core/tokens/formatters/tokens-studio.js.map +1 -1
- package/dist/core/tokens/formatters/ts-module.d.ts +32 -1
- package/dist/core/tokens/formatters/ts-module.d.ts.map +1 -1
- package/dist/core/tokens/formatters/ts-module.js +197 -3
- package/dist/core/tokens/formatters/ts-module.js.map +1 -1
- package/dist/core/tokens/index.d.ts +1 -1
- package/dist/core/tokens/index.d.ts.map +1 -1
- package/dist/core/tokens/index.js +1 -1
- package/dist/core/tokens/index.js.map +1 -1
- package/dist/core/tokens/parsers/stubs.d.ts +9 -5
- package/dist/core/tokens/parsers/stubs.d.ts.map +1 -1
- package/dist/core/tokens/parsers/stubs.js +13 -6
- package/dist/core/tokens/parsers/stubs.js.map +1 -1
- package/dist/core/tokens-tools.d.ts.map +1 -1
- package/dist/core/tokens-tools.js +12 -2
- package/dist/core/tokens-tools.js.map +1 -1
- package/dist/local.d.ts.map +1 -1
- package/dist/local.js +6 -0
- package/dist/local.js.map +1 -1
- package/figma-desktop-bridge/code.js +1 -1
- package/package.json +18 -3
|
@@ -56,6 +56,43 @@ export function resolveReference(reference, mode, index, seen = new Set()) {
|
|
|
56
56
|
}
|
|
57
57
|
return value;
|
|
58
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Resolve an alias chain to its final literal value, walking through
|
|
61
|
+
* intermediate alias hops. Returns the final TokenValue (with `literal` set
|
|
62
|
+
* if resolution succeeded) or `null` if the chain ends at a cross-library
|
|
63
|
+
* reference / unresolvable target / cycle.
|
|
64
|
+
*
|
|
65
|
+
* Used by formatters that can't natively express alias references in their
|
|
66
|
+
* output (Tailwind v3, TypeScript modules, plain JSON) — those need literal
|
|
67
|
+
* values at export time.
|
|
68
|
+
*
|
|
69
|
+
* Safer counterpart of `resolveReference` because it swallows errors
|
|
70
|
+
* (unresolvable / cycle) into `null` rather than throwing; formatters can
|
|
71
|
+
* then emit a comment or skip the token instead of failing the whole export.
|
|
72
|
+
*/
|
|
73
|
+
export function resolveAliasChain(value, mode, index) {
|
|
74
|
+
if (!value.reference)
|
|
75
|
+
return value;
|
|
76
|
+
// Cross-library aliases are not resolvable — formatters should skip with a comment.
|
|
77
|
+
const bare = value.reference.replace(/^\{|\}$/g, "");
|
|
78
|
+
if (bare.startsWith("__library:") || bare === "unknown")
|
|
79
|
+
return null;
|
|
80
|
+
try {
|
|
81
|
+
const resolved = resolveReference(value.reference, mode, index);
|
|
82
|
+
// resolveReference throws on cycles / unresolvable, so a returned value
|
|
83
|
+
// is either a literal or another reference. If still a reference,
|
|
84
|
+
// recurse (defensive — resolveReference already chases chains, but the
|
|
85
|
+
// top-level call may return a value with `reference` if mode-fallback
|
|
86
|
+
// routes through an aliased entry).
|
|
87
|
+
if (resolved.reference) {
|
|
88
|
+
return resolveAliasChain(resolved, mode, index);
|
|
89
|
+
}
|
|
90
|
+
return resolved;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
59
96
|
/**
|
|
60
97
|
* Validate every alias in the document. Returns a list of error messages —
|
|
61
98
|
* empty array means all aliases resolve cleanly.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alias-resolver.js","sourceRoot":"","sources":["../../../src/core/tokens/alias-resolver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"alias-resolver.js","sourceRoot":"","sources":["../../../src/core/tokens/alias-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plain JSON formatters — flat and nested.
|
|
3
|
+
*
|
|
4
|
+
* These are dumps without the DTCG `$type`/`$value` envelope, for custom
|
|
5
|
+
* build scripts that just need a key-value map of resolved tokens.
|
|
6
|
+
*
|
|
7
|
+
* Flat shape:
|
|
8
|
+
*
|
|
9
|
+
* {
|
|
10
|
+
* "ds-color-primary": "#4085F2",
|
|
11
|
+
* "ds-spacing-md": "16px",
|
|
12
|
+
* "ds-color-bg--dark": "#0A0A0A"
|
|
13
|
+
* }
|
|
14
|
+
*
|
|
15
|
+
* Multi-mode tokens flatten with `--<mode>` suffix (primary mode keeps
|
|
16
|
+
* the bare name; other modes get suffixed).
|
|
17
|
+
*
|
|
18
|
+
* Nested shape:
|
|
19
|
+
*
|
|
20
|
+
* {
|
|
21
|
+
* "color": {
|
|
22
|
+
* "primary": "#4085F2",
|
|
23
|
+
* "brand": { "primary": "#FF00AA" }
|
|
24
|
+
* },
|
|
25
|
+
* "spacing": { "md": "16px" }
|
|
26
|
+
* }
|
|
27
|
+
*
|
|
28
|
+
* Multi-mode tokens become objects: `{ Light: "...", Dark: "..." }`.
|
|
29
|
+
*
|
|
30
|
+
* Aliases resolve to the literal value where possible; cross-library
|
|
31
|
+
* aliases get a `null` (caller can decide how to fill those in).
|
|
32
|
+
*/
|
|
1
33
|
import type { TokenDocument } from "../types.js";
|
|
2
34
|
import type { FormatOptions, FormatResult } from "./index.js";
|
|
3
|
-
export declare function formatJsonFlat(
|
|
4
|
-
export declare function formatJsonNested(
|
|
35
|
+
export declare function formatJsonFlat(doc: TokenDocument, opts: FormatOptions): FormatResult;
|
|
36
|
+
export declare function formatJsonNested(doc: TokenDocument, opts: FormatOptions): FormatResult;
|
|
5
37
|
//# sourceMappingURL=json.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../../src/core/tokens/formatters/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../../src/core/tokens/formatters/json.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAS,aAAa,EAAwB,MAAM,aAAa,CAAC;AAE9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE9D,wBAAgB,cAAc,CAC5B,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,aAAa,GAClB,YAAY,CAyBd;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,aAAa,GAClB,YAAY,CAsBd"}
|
|
@@ -1,8 +1,188 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Plain JSON formatters — flat and nested.
|
|
3
|
+
*
|
|
4
|
+
* These are dumps without the DTCG `$type`/`$value` envelope, for custom
|
|
5
|
+
* build scripts that just need a key-value map of resolved tokens.
|
|
6
|
+
*
|
|
7
|
+
* Flat shape:
|
|
8
|
+
*
|
|
9
|
+
* {
|
|
10
|
+
* "ds-color-primary": "#4085F2",
|
|
11
|
+
* "ds-spacing-md": "16px",
|
|
12
|
+
* "ds-color-bg--dark": "#0A0A0A"
|
|
13
|
+
* }
|
|
14
|
+
*
|
|
15
|
+
* Multi-mode tokens flatten with `--<mode>` suffix (primary mode keeps
|
|
16
|
+
* the bare name; other modes get suffixed).
|
|
17
|
+
*
|
|
18
|
+
* Nested shape:
|
|
19
|
+
*
|
|
20
|
+
* {
|
|
21
|
+
* "color": {
|
|
22
|
+
* "primary": "#4085F2",
|
|
23
|
+
* "brand": { "primary": "#FF00AA" }
|
|
24
|
+
* },
|
|
25
|
+
* "spacing": { "md": "16px" }
|
|
26
|
+
* }
|
|
27
|
+
*
|
|
28
|
+
* Multi-mode tokens become objects: `{ Light: "...", Dark: "..." }`.
|
|
29
|
+
*
|
|
30
|
+
* Aliases resolve to the literal value where possible; cross-library
|
|
31
|
+
* aliases get a `null` (caller can decide how to fill those in).
|
|
32
|
+
*/
|
|
33
|
+
import { buildTokenIndex, resolveAliasChain } from "../alias-resolver.js";
|
|
34
|
+
export function formatJsonFlat(doc, opts) {
|
|
35
|
+
const warnings = [];
|
|
36
|
+
const files = [];
|
|
37
|
+
const splitByCollection = opts.target.splitByCollection ?? false;
|
|
38
|
+
const prefix = opts.target.prefix ?? "";
|
|
39
|
+
// Plain JSON has no native alias mechanism — resolve aliases to their
|
|
40
|
+
// literal target so consumers get usable values, not opaque `{ref}` strings.
|
|
41
|
+
const tokenIndex = buildTokenIndex(doc);
|
|
42
|
+
if (splitByCollection) {
|
|
43
|
+
for (const set of doc.sets) {
|
|
44
|
+
files.push({
|
|
45
|
+
path: filenameFor(opts, set, "flat"),
|
|
46
|
+
content: renderFlat([set], prefix, tokenIndex, warnings),
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
files.push({
|
|
52
|
+
path: filenameFor(opts, undefined, "flat"),
|
|
53
|
+
content: renderFlat(doc.sets, prefix, tokenIndex, warnings),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return { files, warnings };
|
|
4
57
|
}
|
|
5
|
-
export function formatJsonNested(
|
|
6
|
-
|
|
58
|
+
export function formatJsonNested(doc, opts) {
|
|
59
|
+
const warnings = [];
|
|
60
|
+
const files = [];
|
|
61
|
+
const splitByCollection = opts.target.splitByCollection ?? false;
|
|
62
|
+
const tokenIndex = buildTokenIndex(doc);
|
|
63
|
+
if (splitByCollection) {
|
|
64
|
+
for (const set of doc.sets) {
|
|
65
|
+
files.push({
|
|
66
|
+
path: filenameFor(opts, set, "nested"),
|
|
67
|
+
content: renderNested([set], tokenIndex, warnings),
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
files.push({
|
|
73
|
+
path: filenameFor(opts, undefined, "nested"),
|
|
74
|
+
content: renderNested(doc.sets, tokenIndex, warnings),
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
return { files, warnings };
|
|
78
|
+
}
|
|
79
|
+
function filenameFor(opts, set, shape) {
|
|
80
|
+
if (opts.target.filename)
|
|
81
|
+
return opts.target.filename;
|
|
82
|
+
const parts = [];
|
|
83
|
+
if (set)
|
|
84
|
+
parts.push(slugify(set.name));
|
|
85
|
+
parts.push(`tokens.${shape}`);
|
|
86
|
+
return `${parts.join(".")}.json`;
|
|
87
|
+
}
|
|
88
|
+
function slugify(s) {
|
|
89
|
+
return s
|
|
90
|
+
.trim()
|
|
91
|
+
.toLowerCase()
|
|
92
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
93
|
+
.replace(/^-+|-+$/g, "");
|
|
94
|
+
}
|
|
95
|
+
function renderFlat(sets, prefix, tokenIndex, warnings) {
|
|
96
|
+
const out = {};
|
|
97
|
+
for (const set of sets) {
|
|
98
|
+
const primaryMode = pickPrimaryMode(set.modes);
|
|
99
|
+
for (const token of set.tokens) {
|
|
100
|
+
const baseName = `${prefix}${token.path.map(slugify).join("-")}`;
|
|
101
|
+
for (const [modeName, value] of Object.entries(token.values)) {
|
|
102
|
+
const key = modeName === primaryMode
|
|
103
|
+
? baseName
|
|
104
|
+
: `${baseName}--${slugify(modeName)}`;
|
|
105
|
+
const resolved = resolveValue(value, token, modeName, tokenIndex, warnings);
|
|
106
|
+
if (resolved !== undefined)
|
|
107
|
+
out[key] = resolved;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Sort keys for deterministic output.
|
|
112
|
+
const sorted = Object.fromEntries(Object.entries(out).sort(([a], [b]) => a.localeCompare(b)));
|
|
113
|
+
return JSON.stringify(sorted, null, 2) + "\n";
|
|
114
|
+
}
|
|
115
|
+
function renderNested(sets, tokenIndex, warnings) {
|
|
116
|
+
const out = {};
|
|
117
|
+
for (const set of sets) {
|
|
118
|
+
const isMultiMode = set.modes.length > 1;
|
|
119
|
+
for (const token of set.tokens) {
|
|
120
|
+
let cursor = out;
|
|
121
|
+
for (let i = 0; i < token.path.length - 1; i++) {
|
|
122
|
+
const segment = token.path[i];
|
|
123
|
+
if (!cursor[segment] ||
|
|
124
|
+
typeof cursor[segment] !== "object" ||
|
|
125
|
+
Array.isArray(cursor[segment])) {
|
|
126
|
+
cursor[segment] = {};
|
|
127
|
+
}
|
|
128
|
+
cursor = cursor[segment];
|
|
129
|
+
}
|
|
130
|
+
const leafKey = token.path[token.path.length - 1];
|
|
131
|
+
if (isMultiMode) {
|
|
132
|
+
const modeValues = {};
|
|
133
|
+
for (const [modeName, value] of Object.entries(token.values)) {
|
|
134
|
+
const resolved = resolveValue(value, token, modeName, tokenIndex, warnings);
|
|
135
|
+
if (resolved !== undefined)
|
|
136
|
+
modeValues[modeName] = resolved;
|
|
137
|
+
}
|
|
138
|
+
cursor[leafKey] = modeValues;
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
const [onlyModeName, onlyValue] = Object.entries(token.values)[0] ?? [];
|
|
142
|
+
if (onlyValue) {
|
|
143
|
+
const resolved = resolveValue(onlyValue, token, onlyModeName, tokenIndex, warnings);
|
|
144
|
+
if (resolved !== undefined)
|
|
145
|
+
cursor[leafKey] = resolved;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return JSON.stringify(sortKeys(out), null, 2) + "\n";
|
|
151
|
+
}
|
|
152
|
+
function pickPrimaryMode(modes) {
|
|
153
|
+
return modes.find((m) => /^(default|light|value)$/i.test(m)) ?? modes[0];
|
|
154
|
+
}
|
|
155
|
+
function resolveValue(value, token, mode, tokenIndex, warnings) {
|
|
156
|
+
let effective = value;
|
|
157
|
+
if (value.reference) {
|
|
158
|
+
effective = resolveAliasChain(value, mode, tokenIndex);
|
|
159
|
+
if (!effective) {
|
|
160
|
+
const bare = value.reference.replace(/^\{|\}$/g, "");
|
|
161
|
+
const reason = bare.startsWith("__library:") || bare === "unknown"
|
|
162
|
+
? "cross-library alias"
|
|
163
|
+
: "alias target not found";
|
|
164
|
+
warnings.push(`Skipped ${token.path.join(".")} in JSON — ${reason}: ${value.reference}.`);
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (!effective || effective.literal === undefined || effective.literal === null) {
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
if (typeof effective.literal === "number") {
|
|
172
|
+
if (token.type === "dimension")
|
|
173
|
+
return `${effective.literal}px`;
|
|
174
|
+
return effective.literal;
|
|
175
|
+
}
|
|
176
|
+
return effective.literal;
|
|
177
|
+
}
|
|
178
|
+
function sortKeys(obj) {
|
|
179
|
+
if (obj === null || typeof obj !== "object" || Array.isArray(obj))
|
|
180
|
+
return obj;
|
|
181
|
+
const sorted = {};
|
|
182
|
+
const keys = Object.keys(obj).sort();
|
|
183
|
+
for (const k of keys) {
|
|
184
|
+
sorted[k] = sortKeys(obj[k]);
|
|
185
|
+
}
|
|
186
|
+
return sorted;
|
|
7
187
|
}
|
|
8
188
|
//# sourceMappingURL=json.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../../../src/core/tokens/formatters/json.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../../../src/core/tokens/formatters/json.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SCSS variables formatter.
|
|
3
|
+
*
|
|
4
|
+
* Output shape:
|
|
5
|
+
*
|
|
6
|
+
* // tokens.scss
|
|
7
|
+
* $ds-color-primary: #4085F2;
|
|
8
|
+
* $ds-spacing-md: 16px;
|
|
9
|
+
*
|
|
10
|
+
* // map for runtime mode access
|
|
11
|
+
* $ds-colors: (
|
|
12
|
+
* "primary": $ds-color-primary,
|
|
13
|
+
* ...
|
|
14
|
+
* );
|
|
15
|
+
*
|
|
16
|
+
* Modes: SCSS doesn't have CSS's runtime cascading, so multi-mode output
|
|
17
|
+
* either emits one file per mode (splitByMode: true) or generates SCSS
|
|
18
|
+
* maps keyed by mode name that consumers can `map-get` from.
|
|
19
|
+
*
|
|
20
|
+
* Composite tokens (typography, shadow) expand into multiple primitive
|
|
21
|
+
* variables since SCSS variables hold a single value.
|
|
22
|
+
*/
|
|
1
23
|
import type { TokenDocument } from "../types.js";
|
|
2
24
|
import type { FormatOptions, FormatResult } from "./index.js";
|
|
3
|
-
export declare function formatScss(
|
|
25
|
+
export declare function formatScss(doc: TokenDocument, opts: FormatOptions): FormatResult;
|
|
4
26
|
//# sourceMappingURL=scss.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scss.d.ts","sourceRoot":"","sources":["../../../../src/core/tokens/formatters/scss.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"scss.d.ts","sourceRoot":"","sources":["../../../../src/core/tokens/formatters/scss.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAS,aAAa,EAAwB,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE9D,wBAAgB,UAAU,CACxB,GAAG,EAAE,aAAa,EAClB,IAAI,EAAE,aAAa,GAClB,YAAY,CA0Cd"}
|
|
@@ -1,5 +1,253 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* SCSS variables formatter.
|
|
3
|
+
*
|
|
4
|
+
* Output shape:
|
|
5
|
+
*
|
|
6
|
+
* // tokens.scss
|
|
7
|
+
* $ds-color-primary: #4085F2;
|
|
8
|
+
* $ds-spacing-md: 16px;
|
|
9
|
+
*
|
|
10
|
+
* // map for runtime mode access
|
|
11
|
+
* $ds-colors: (
|
|
12
|
+
* "primary": $ds-color-primary,
|
|
13
|
+
* ...
|
|
14
|
+
* );
|
|
15
|
+
*
|
|
16
|
+
* Modes: SCSS doesn't have CSS's runtime cascading, so multi-mode output
|
|
17
|
+
* either emits one file per mode (splitByMode: true) or generates SCSS
|
|
18
|
+
* maps keyed by mode name that consumers can `map-get` from.
|
|
19
|
+
*
|
|
20
|
+
* Composite tokens (typography, shadow) expand into multiple primitive
|
|
21
|
+
* variables since SCSS variables hold a single value.
|
|
22
|
+
*/
|
|
23
|
+
export function formatScss(doc, opts) {
|
|
24
|
+
const warnings = [];
|
|
25
|
+
const files = [];
|
|
26
|
+
const splitByMode = opts.target.splitByMode ?? false;
|
|
27
|
+
const splitByCollection = opts.target.splitByCollection ?? false;
|
|
28
|
+
const prefix = opts.target.prefix ?? "";
|
|
29
|
+
if (splitByMode && splitByCollection) {
|
|
30
|
+
for (const set of doc.sets) {
|
|
31
|
+
for (const mode of set.modes) {
|
|
32
|
+
files.push({
|
|
33
|
+
path: filenameFor(opts, set, mode),
|
|
34
|
+
content: renderSingleMode([set], mode, prefix, warnings),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else if (splitByMode) {
|
|
40
|
+
const allModes = new Set();
|
|
41
|
+
for (const set of doc.sets)
|
|
42
|
+
for (const m of set.modes)
|
|
43
|
+
allModes.add(m);
|
|
44
|
+
for (const mode of allModes) {
|
|
45
|
+
const sets = doc.sets.filter((s) => s.modes.includes(mode));
|
|
46
|
+
files.push({
|
|
47
|
+
path: filenameFor(opts, undefined, mode),
|
|
48
|
+
content: renderSingleMode(sets, mode, prefix, warnings),
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else if (splitByCollection) {
|
|
53
|
+
for (const set of doc.sets) {
|
|
54
|
+
files.push({
|
|
55
|
+
path: filenameFor(opts, set),
|
|
56
|
+
content: renderAllModes([set], prefix, warnings),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
files.push({
|
|
62
|
+
path: filenameFor(opts),
|
|
63
|
+
content: renderAllModes(doc.sets, prefix, warnings),
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return { files, warnings };
|
|
67
|
+
}
|
|
68
|
+
function filenameFor(opts, set, mode) {
|
|
69
|
+
if (opts.target.filename)
|
|
70
|
+
return opts.target.filename;
|
|
71
|
+
const parts = [];
|
|
72
|
+
if (set)
|
|
73
|
+
parts.push(slugify(set.name));
|
|
74
|
+
if (mode)
|
|
75
|
+
parts.push(slugify(mode));
|
|
76
|
+
if (parts.length === 0)
|
|
77
|
+
parts.push("tokens");
|
|
78
|
+
return `_${parts.join(".")}.scss`;
|
|
79
|
+
}
|
|
80
|
+
function slugify(s) {
|
|
81
|
+
return s
|
|
82
|
+
.trim()
|
|
83
|
+
.toLowerCase()
|
|
84
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
85
|
+
.replace(/^-+|-+$/g, "");
|
|
86
|
+
}
|
|
87
|
+
function varName(path, prefix) {
|
|
88
|
+
return `$${prefix}${path.map(slugify).join("-")}`;
|
|
89
|
+
}
|
|
90
|
+
function renderSingleMode(sets, mode, prefix, warnings) {
|
|
91
|
+
const lines = [];
|
|
92
|
+
lines.push("// Generated by figma-console-mcp — do not edit by hand");
|
|
93
|
+
lines.push(`// Mode: ${mode}`);
|
|
94
|
+
lines.push("");
|
|
95
|
+
for (const set of sets) {
|
|
96
|
+
if (!set.modes.includes(mode))
|
|
97
|
+
continue;
|
|
98
|
+
lines.push(`// — ${set.name} —`);
|
|
99
|
+
for (const token of set.tokens) {
|
|
100
|
+
const value = token.values[mode];
|
|
101
|
+
if (!value)
|
|
102
|
+
continue;
|
|
103
|
+
emitSassLines(token, value, prefix, lines, warnings);
|
|
104
|
+
}
|
|
105
|
+
lines.push("");
|
|
106
|
+
}
|
|
107
|
+
return lines.join("\n");
|
|
108
|
+
}
|
|
109
|
+
function renderAllModes(sets, prefix, warnings) {
|
|
110
|
+
const lines = [];
|
|
111
|
+
lines.push("// Generated by figma-console-mcp — do not edit by hand");
|
|
112
|
+
lines.push("");
|
|
113
|
+
// For multi-mode sets, emit a primary variable + a mode-keyed map.
|
|
114
|
+
// Single-mode sets emit straight variables.
|
|
115
|
+
for (const set of sets) {
|
|
116
|
+
lines.push(`// — ${set.name} —`);
|
|
117
|
+
const isMultiMode = set.modes.length > 1;
|
|
118
|
+
const primaryMode = pickPrimaryMode(set.modes);
|
|
119
|
+
for (const token of set.tokens) {
|
|
120
|
+
// Primary value as the bare variable.
|
|
121
|
+
const primary = token.values[primaryMode];
|
|
122
|
+
if (primary)
|
|
123
|
+
emitSassLines(token, primary, prefix, lines, warnings);
|
|
124
|
+
// Other modes as a map: $ds-color-primary--modes: ("Dark": #..., "Vibrant": #...)
|
|
125
|
+
if (isMultiMode) {
|
|
126
|
+
const otherModes = set.modes.filter((m) => m !== primaryMode);
|
|
127
|
+
const entries = [];
|
|
128
|
+
for (const mode of otherModes) {
|
|
129
|
+
const v = token.values[mode];
|
|
130
|
+
if (!v)
|
|
131
|
+
continue;
|
|
132
|
+
const formatted = scssValueFor(v, token, prefix, warnings);
|
|
133
|
+
if (formatted !== null) {
|
|
134
|
+
entries.push(` "${mode}": ${formatted}`);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (entries.length > 0) {
|
|
138
|
+
const mapName = `${varName(token.path, prefix)}--modes`;
|
|
139
|
+
lines.push(`${mapName}: (`);
|
|
140
|
+
lines.push(entries.join(",\n"));
|
|
141
|
+
lines.push(`);`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
lines.push("");
|
|
146
|
+
}
|
|
147
|
+
return lines.join("\n");
|
|
148
|
+
}
|
|
149
|
+
function pickPrimaryMode(modes) {
|
|
150
|
+
return modes.find((m) => /^(default|light|value)$/i.test(m)) ?? modes[0];
|
|
151
|
+
}
|
|
152
|
+
function emitSassLines(token, value, prefix, out, warnings) {
|
|
153
|
+
const sassName = varName(token.path, prefix);
|
|
154
|
+
if (value.reference) {
|
|
155
|
+
const bareRef = value.reference.replace(/^\{|\}$/g, "");
|
|
156
|
+
const libMatch = bareRef.match(/^__library:(.+)$/);
|
|
157
|
+
if (libMatch || bareRef === "unknown") {
|
|
158
|
+
const originalId = libMatch ? libMatch[1] : "unknown";
|
|
159
|
+
warnings.push(`Skipped ${token.path.join(".")} in SCSS — cross-library variable ${originalId}.`);
|
|
160
|
+
out.push(`// ${sassName}: skipped — cross-library alias to ${originalId}`);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
const refPath = bareRef.split(".");
|
|
164
|
+
out.push(`${sassName}: ${varName(refPath, prefix)};`);
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
if (value.literal === undefined || value.literal === null) {
|
|
168
|
+
warnings.push(`Token ${token.path.join(".")} has no value.`);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
if (token.type === "typography" && typeof value.literal === "object") {
|
|
172
|
+
const t = value.literal;
|
|
173
|
+
for (const sub of ["fontFamily", "fontSize", "fontWeight", "lineHeight", "letterSpacing"]) {
|
|
174
|
+
if (t[sub] !== undefined) {
|
|
175
|
+
out.push(`${sassName}-${kebab(sub)}: ${formatScssLiteral(t[sub], token.type)};`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (token.type === "shadow" && typeof value.literal === "object") {
|
|
181
|
+
const css = renderShadow(value.literal);
|
|
182
|
+
if (css)
|
|
183
|
+
out.push(`${sassName}: ${css};`);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
out.push(`${sassName}: ${formatScssLiteral(value.literal, token.type)};`);
|
|
187
|
+
}
|
|
188
|
+
function scssValueFor(value, token, prefix, _warnings) {
|
|
189
|
+
if (value.reference) {
|
|
190
|
+
const bareRef = value.reference.replace(/^\{|\}$/g, "");
|
|
191
|
+
if (bareRef.startsWith("__library:") || bareRef === "unknown")
|
|
192
|
+
return null;
|
|
193
|
+
return varName(bareRef.split("."), prefix);
|
|
194
|
+
}
|
|
195
|
+
if (value.literal === undefined || value.literal === null)
|
|
196
|
+
return null;
|
|
197
|
+
return formatScssLiteral(value.literal, token.type);
|
|
198
|
+
}
|
|
199
|
+
function kebab(s) {
|
|
200
|
+
return s.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
|
|
201
|
+
}
|
|
202
|
+
function formatScssLiteral(value, type) {
|
|
203
|
+
if (typeof value === "number") {
|
|
204
|
+
if (type === "dimension")
|
|
205
|
+
return `${value}px`;
|
|
206
|
+
return String(value);
|
|
207
|
+
}
|
|
208
|
+
if (typeof value === "string") {
|
|
209
|
+
if (type === "color")
|
|
210
|
+
return value;
|
|
211
|
+
if (type === "fontFamily" || type === "string") {
|
|
212
|
+
return needsQuoting(value) ? JSON.stringify(value) : value;
|
|
213
|
+
}
|
|
214
|
+
return value;
|
|
215
|
+
}
|
|
216
|
+
if (typeof value === "boolean")
|
|
217
|
+
return String(value);
|
|
218
|
+
return JSON.stringify(value);
|
|
219
|
+
}
|
|
220
|
+
function needsQuoting(s) {
|
|
221
|
+
if (/^["']/.test(s))
|
|
222
|
+
return false;
|
|
223
|
+
if (/^[\d.]+([a-z%]+)?$/.test(s))
|
|
224
|
+
return false;
|
|
225
|
+
if (/^[a-zA-Z_][a-zA-Z0-9_-]*$/.test(s))
|
|
226
|
+
return false;
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
function renderShadow(shadow) {
|
|
230
|
+
if (Array.isArray(shadow)) {
|
|
231
|
+
return shadow.map(renderShadow).filter(Boolean).join(", ");
|
|
232
|
+
}
|
|
233
|
+
if (!shadow || typeof shadow !== "object")
|
|
234
|
+
return null;
|
|
235
|
+
const s = shadow;
|
|
236
|
+
const inset = s.inset ? "inset " : "";
|
|
237
|
+
const x = withPx(s.offsetX);
|
|
238
|
+
const y = withPx(s.offsetY);
|
|
239
|
+
const blur = withPx(s.blur);
|
|
240
|
+
const spread = s.spread !== undefined ? ` ${withPx(s.spread)}` : "";
|
|
241
|
+
const color = s.color;
|
|
242
|
+
if (!x || !y || !blur || typeof color !== "string")
|
|
243
|
+
return null;
|
|
244
|
+
return `${inset}${x} ${y} ${blur}${spread} ${color}`;
|
|
245
|
+
}
|
|
246
|
+
function withPx(v) {
|
|
247
|
+
if (typeof v === "number")
|
|
248
|
+
return `${v}px`;
|
|
249
|
+
if (typeof v === "string")
|
|
250
|
+
return v;
|
|
251
|
+
return "";
|
|
4
252
|
}
|
|
5
253
|
//# sourceMappingURL=scss.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scss.js","sourceRoot":"","sources":["../../../../src/core/tokens/formatters/scss.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scss.js","sourceRoot":"","sources":["../../../../src/core/tokens/formatters/scss.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH,MAAM,UAAU,UAAU,CACxB,GAAkB,EAClB,IAAmB;IAEnB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,KAAK,GAA0B,EAAE,CAAC;IAExC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC;IACrD,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,KAAK,CAAC;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IAExC,IAAI,WAAW,IAAI,iBAAiB,EAAE,CAAC;QACrC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC3B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBAC7B,KAAK,CAAC,IAAI,CAAC;oBACT,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC;oBAClC,OAAO,EAAE,gBAAgB,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC;iBACzD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,WAAW,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI;YAAE,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK;gBAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvE,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5D,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC;gBACxC,OAAO,EAAE,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,IAAI,iBAAiB,EAAE,CAAC;QAC7B,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC;gBAC5B,OAAO,EAAE,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC;aACjD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC;YACvB,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,WAAW,CAClB,IAAmB,EACnB,GAAc,EACd,IAAa;IAEb,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IACtD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,IAAI,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;AACpC,CAAC;AAED,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,CAAC;SACL,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,OAAO,CAAC,IAAc,EAAE,MAAc;IAC7C,OAAO,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAgB,EAChB,IAAY,EACZ,MAAc,EACd,QAAkB;IAElB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QACxC,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;QACjC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,cAAc,CACrB,IAAgB,EAChB,MAAc,EACd,QAAkB;IAElB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,mEAAmE;IACnE,4CAA4C;IAC5C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;QACjC,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE/C,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC/B,sCAAsC;YACtC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAC1C,IAAI,OAAO;gBAAE,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;YAEpE,kFAAkF;YAClF,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC;gBAC9D,MAAM,OAAO,GAAa,EAAE,CAAC;gBAC7B,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;oBAC9B,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC7B,IAAI,CAAC,CAAC;wBAAE,SAAS;oBACjB,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;oBAC3D,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;wBACvB,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,SAAS,EAAE,CAAC,CAAC;oBAC5C,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,MAAM,OAAO,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC;oBACxD,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC;oBAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;oBAChC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,eAAe,CAAC,KAAe;IACtC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,aAAa,CACpB,KAAY,EACZ,KAAiB,EACjB,MAAc,EACd,GAAa,EACb,QAAkB;IAElB,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE7C,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACnD,IAAI,QAAQ,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACtD,QAAQ,CAAC,IAAI,CACX,WAAW,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,qCAAqC,UAAU,GAAG,CAClF,CAAC;YACF,GAAG,CAAC,IAAI,CACN,MAAM,QAAQ,sCAAsC,UAAU,EAAE,CACjE,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,KAAK,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC1D,QAAQ,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC7D,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACrE,MAAM,CAAC,GAAG,KAAK,CAAC,OAAkC,CAAC;QACnD,KAAK,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,CAAC,EAAE,CAAC;YAC1F,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBACzB,GAAG,CAAC,IAAI,CACN,GAAG,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CACvE,CAAC;YACJ,CAAC;QACH,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACjE,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,GAAG;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,KAAK,GAAG,GAAG,CAAC,CAAC;QAC1C,OAAO;IACT,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,KAAK,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,YAAY,CACnB,KAAiB,EACjB,KAAY,EACZ,MAAc,EACd,SAAmB;IAEnB,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACxD,IAAI,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAC3E,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACvE,OAAO,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,KAAK,CAAC,CAAS;IACtB,OAAO,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AAC7D,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc,EAAE,IAAY;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,IAAI,KAAK,WAAW;YAAE,OAAO,GAAG,KAAK,IAAI,CAAC;QAC9C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;QACnC,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC/C,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC7D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACrD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,YAAY,CAAC,CAAS;IAC7B,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAClC,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACtD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,MAAe;IACnC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,CAAC,GAAG,MAAiC,CAAC;IAC5C,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;IACtB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAChE,OAAO,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,MAAM,CAAC,CAAU;IACxB,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC;IAC3C,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,CAAC;IACpC,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Shared NotImplementedError used by formatter stubs.
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Shared NotImplementedError used by formatter stubs. Most formatters are
|
|
3
|
+
* implemented end-to-end as of v1.28.0; this stub remains for niche targets
|
|
4
|
+
* (e.g. Less) that haven't drawn enough demand to warrant implementation.
|
|
5
5
|
*/
|
|
6
6
|
export declare class FormatterNotImplementedError extends Error {
|
|
7
7
|
constructor(formatName: string);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stubs.d.ts","sourceRoot":"","sources":["../../../../src/core/tokens/formatters/stubs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,qBAAa,4BAA6B,SAAQ,KAAK;gBACzC,UAAU,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"stubs.d.ts","sourceRoot":"","sources":["../../../../src/core/tokens/formatters/stubs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,qBAAa,4BAA6B,SAAQ,KAAK;gBACzC,UAAU,EAAE,MAAM;CAQ/B"}
|