@calibrate-ds/generator-react 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/generate-component-css.d.ts +6 -0
- package/dist/components/generate-component-css.d.ts.map +1 -0
- package/dist/components/generate-component-css.js +97 -0
- package/dist/components/generate-component-css.js.map +1 -0
- package/dist/components/generate-component-file.d.ts +8 -0
- package/dist/components/generate-component-file.d.ts.map +1 -0
- package/dist/components/generate-component-file.js +216 -0
- package/dist/components/generate-component-file.js.map +1 -0
- package/dist/components/generate-composite-file.d.ts +3 -0
- package/dist/components/generate-composite-file.d.ts.map +1 -0
- package/dist/components/generate-composite-file.js +78 -0
- package/dist/components/generate-composite-file.js.map +1 -0
- package/dist/components/generate-composite-types.d.ts +7 -0
- package/dist/components/generate-composite-types.d.ts.map +1 -0
- package/dist/components/generate-composite-types.js +44 -0
- package/dist/components/generate-composite-types.js.map +1 -0
- package/dist/components/generate-types-file.d.ts +8 -0
- package/dist/components/generate-types-file.d.ts.map +1 -0
- package/dist/components/generate-types-file.js +65 -0
- package/dist/components/generate-types-file.js.map +1 -0
- package/dist/components/helpers.d.ts +33 -0
- package/dist/components/helpers.d.ts.map +1 -0
- package/dist/components/helpers.js +124 -0
- package/dist/components/helpers.js.map +1 -0
- package/dist/components/index.d.ts +9 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +10 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/layout-jsx.d.ts +14 -0
- package/dist/components/layout-jsx.d.ts.map +1 -0
- package/dist/components/layout-jsx.js +265 -0
- package/dist/components/layout-jsx.js.map +1 -0
- package/dist/components/prune-components.d.ts +10 -0
- package/dist/components/prune-components.d.ts.map +1 -0
- package/dist/components/prune-components.js +69 -0
- package/dist/components/prune-components.js.map +1 -0
- package/dist/components/token-helpers.d.ts +32 -0
- package/dist/components/token-helpers.d.ts.map +1 -0
- package/dist/components/token-helpers.js +188 -0
- package/dist/components/token-helpers.js.map +1 -0
- package/dist/components/write-components.d.ts +17 -0
- package/dist/components/write-components.d.ts.map +1 -0
- package/dist/components/write-components.js +218 -0
- package/dist/components/write-components.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/scaffold/generate-placeholder-component-content.d.ts +9 -0
- package/dist/scaffold/generate-placeholder-component-content.d.ts.map +1 -0
- package/dist/scaffold/generate-placeholder-component-content.js +68 -0
- package/dist/scaffold/generate-placeholder-component-content.js.map +1 -0
- package/dist/scaffold/index.d.ts +3 -0
- package/dist/scaffold/index.d.ts.map +1 -0
- package/dist/scaffold/index.js +3 -0
- package/dist/scaffold/index.js.map +1 -0
- package/dist/scaffold/write-scaffold.d.ts +14 -0
- package/dist/scaffold/write-scaffold.d.ts.map +1 -0
- package/dist/scaffold/write-scaffold.js +93 -0
- package/dist/scaffold/write-scaffold.js.map +1 -0
- package/dist/test-css-tokens.d.ts +2 -0
- package/dist/test-css-tokens.d.ts.map +1 -0
- package/dist/test-css-tokens.js +39 -0
- package/dist/test-css-tokens.js.map +1 -0
- package/dist/tokens/generate-token-css.d.ts +30 -0
- package/dist/tokens/generate-token-css.d.ts.map +1 -0
- package/dist/tokens/generate-token-css.js +367 -0
- package/dist/tokens/generate-token-css.js.map +1 -0
- package/dist/tokens/generate-token-file-content.d.ts +6 -0
- package/dist/tokens/generate-token-file-content.d.ts.map +1 -0
- package/dist/tokens/generate-token-file-content.js +27 -0
- package/dist/tokens/generate-token-file-content.js.map +1 -0
- package/dist/tokens/generate-typography-css.d.ts +3 -0
- package/dist/tokens/generate-typography-css.d.ts.map +1 -0
- package/dist/tokens/generate-typography-css.js +106 -0
- package/dist/tokens/generate-typography-css.js.map +1 -0
- package/dist/tokens/index.d.ts +5 -0
- package/dist/tokens/index.d.ts.map +1 -0
- package/dist/tokens/index.js +5 -0
- package/dist/tokens/index.js.map +1 -0
- package/dist/tokens/write-tokens.d.ts +7 -0
- package/dist/tokens/write-tokens.d.ts.map +1 -0
- package/dist/tokens/write-tokens.js +115 -0
- package/dist/tokens/write-tokens.js.map +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import * as path from "node:path";
|
|
2
|
+
import { ensureDir, writeJson, writeText } from "@calibrate-ds/core";
|
|
3
|
+
import { generateTokenFileContent, generateUnifiedTokenCssContent } from "../tokens/index.js";
|
|
4
|
+
import { generateMainComponentContent, generateTypesContent, generateStoriesContent, generateTestsContent, generateIndexContent } from "./generate-placeholder-component-content.js";
|
|
5
|
+
/**
|
|
6
|
+
* Orchestrates writing the complete design system codebase to the filesystem.
|
|
7
|
+
*/
|
|
8
|
+
export async function writeScaffold(args) {
|
|
9
|
+
const { config, model, registry, graph, mappings, plan } = args;
|
|
10
|
+
const rootDir = config.project.rootDir || process.cwd();
|
|
11
|
+
const report = {
|
|
12
|
+
createdDirectories: [],
|
|
13
|
+
createdFiles: [],
|
|
14
|
+
skippedFiles: [],
|
|
15
|
+
writtenMetadataFiles: [],
|
|
16
|
+
};
|
|
17
|
+
// 1. Ensure Metadata directory exists
|
|
18
|
+
const metadataAbsPath = path.resolve(rootDir, config.output.metadataDir);
|
|
19
|
+
await ensureDir(metadataAbsPath);
|
|
20
|
+
report.createdDirectories.push(config.output.metadataDir);
|
|
21
|
+
// 2. Write Snapshot Metadata files (always overwrite)
|
|
22
|
+
const metadataFiles = [
|
|
23
|
+
"design-system.model.json",
|
|
24
|
+
"component-registry.json",
|
|
25
|
+
"dependency-graph.json",
|
|
26
|
+
"scaffold-plan.json"
|
|
27
|
+
];
|
|
28
|
+
await writeJson(path.join(metadataAbsPath, metadataFiles[0]), model);
|
|
29
|
+
await writeJson(path.join(metadataAbsPath, metadataFiles[1]), registry);
|
|
30
|
+
await writeJson(path.join(metadataAbsPath, metadataFiles[2]), graph);
|
|
31
|
+
await writeJson(path.join(metadataAbsPath, metadataFiles[3]), plan);
|
|
32
|
+
report.writtenMetadataFiles.push(...metadataFiles.map(f => path.join(config.output.metadataDir, f)));
|
|
33
|
+
// 3. Ensure all target Scaffold Directories exist
|
|
34
|
+
for (const dirPath of plan.directories) {
|
|
35
|
+
const absDirPath = path.resolve(rootDir, dirPath);
|
|
36
|
+
await ensureDir(absDirPath);
|
|
37
|
+
report.createdDirectories.push(dirPath);
|
|
38
|
+
}
|
|
39
|
+
// 4. Create Scaffold Files Safely
|
|
40
|
+
for (const filePlan of plan.files) {
|
|
41
|
+
const absFilePath = path.resolve(rootDir, filePlan.filePath);
|
|
42
|
+
let contentToWrite = filePlan.contentPlaceholder;
|
|
43
|
+
// Provide sensible default logic depending on the filePlan type
|
|
44
|
+
if (filePlan.type === "tokens") {
|
|
45
|
+
const fileName = path.basename(filePlan.filePath);
|
|
46
|
+
if (fileName === "tokens.css") {
|
|
47
|
+
const { content } = generateUnifiedTokenCssContent(model);
|
|
48
|
+
contentToWrite = content;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
// Find the associated token collection
|
|
52
|
+
const tokenBaseName = path.basename(filePlan.filePath, ".ts");
|
|
53
|
+
const targetCollection = model.tokens.find(t => t.name.toLowerCase().replace(/[^a-z0-9]/g, "") === tokenBaseName.toLowerCase().replace(/[^a-z0-9]/g, ""));
|
|
54
|
+
if (targetCollection) {
|
|
55
|
+
contentToWrite = generateTokenFileContent(targetCollection);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const parsed = path.parse(filePlan.filePath);
|
|
61
|
+
const cleanName = parsed.name.split(".")[0] || "Unknown";
|
|
62
|
+
switch (filePlan.type) {
|
|
63
|
+
case "react-component":
|
|
64
|
+
contentToWrite = generateMainComponentContent(cleanName, config.framework.typescript);
|
|
65
|
+
break;
|
|
66
|
+
case "types":
|
|
67
|
+
contentToWrite = generateTypesContent(cleanName);
|
|
68
|
+
break;
|
|
69
|
+
case "stories":
|
|
70
|
+
contentToWrite = generateStoriesContent(cleanName, config.framework.typescript);
|
|
71
|
+
break;
|
|
72
|
+
case "tests":
|
|
73
|
+
contentToWrite = generateTestsContent(cleanName);
|
|
74
|
+
break;
|
|
75
|
+
case "index":
|
|
76
|
+
contentToWrite = generateIndexContent(cleanName);
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Attempt to write text natively. `overwrite: false` protects user code
|
|
81
|
+
const wasWritten = await writeText(absFilePath, contentToWrite, { overwrite: false });
|
|
82
|
+
if (wasWritten) {
|
|
83
|
+
report.createdFiles.push(filePlan.filePath);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
report.skippedFiles.push(filePlan.filePath);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// De-duplicate directories safely for cleaner reporting
|
|
90
|
+
report.createdDirectories = Array.from(new Set(report.createdDirectories));
|
|
91
|
+
return report;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=write-scaffold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-scaffold.js","sourceRoot":"","sources":["../../src/scaffold/write-scaffold.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-css-tokens.d.ts","sourceRoot":"","sources":["../src/test-css-tokens.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { generateTokenCssContent } from "./tokens/generate-token-css.js";
|
|
2
|
+
const mockModel = {
|
|
3
|
+
name: "Mapped Collection",
|
|
4
|
+
id: "mapped-id",
|
|
5
|
+
tokens: [
|
|
6
|
+
// Mode A references Mode B
|
|
7
|
+
{
|
|
8
|
+
id: "VariableID:mapped-alias",
|
|
9
|
+
name: "mapped-alias",
|
|
10
|
+
type: "spacing",
|
|
11
|
+
value: { "Mode A": { id: "VariableID:scalar-alias" } }
|
|
12
|
+
},
|
|
13
|
+
// Direct reference
|
|
14
|
+
{
|
|
15
|
+
id: "scalar-alias",
|
|
16
|
+
name: "scalar-alias",
|
|
17
|
+
type: "spacing",
|
|
18
|
+
value: { id: "VariableID:pure-scalar" }
|
|
19
|
+
},
|
|
20
|
+
// Actual scalar
|
|
21
|
+
{
|
|
22
|
+
id: "pure-scalar",
|
|
23
|
+
name: "pure-scalar",
|
|
24
|
+
type: "spacing",
|
|
25
|
+
value: { "Default": { value: 32 } } // Structured scalar with mode!
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
};
|
|
29
|
+
const output = generateTokenCssContent(mockModel);
|
|
30
|
+
console.log(output);
|
|
31
|
+
if (output.includes("--ptb-mapped-collection-mapped-alias: 32px;")) {
|
|
32
|
+
console.log("✅ Recursive alias resolution test passed.");
|
|
33
|
+
process.exit(0);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.log("❌ Recursive alias resolution test failed.");
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=test-css-tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-css-tokens.js","sourceRoot":"","sources":["../src/test-css-tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,MAAM,SAAS,GAAG;IACd,IAAI,EAAE,mBAAmB;IACzB,EAAE,EAAE,WAAW;IACf,MAAM,EAAE;QACJ,2BAA2B;QAC3B;YACI,EAAE,EAAE,yBAAyB;YAC7B,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,yBAAyB,EAAE,EAAE;SACzD;QACD,mBAAmB;QACnB;YACI,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,EAAE,EAAE,EAAE,wBAAwB,EAAE;SAC1C;QACD,gBAAgB;QAChB;YACI,EAAE,EAAE,aAAa;YACjB,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,+BAA+B;SACtE;KACJ;CACJ,CAAC;AAEF,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAgB,CAAC,CAAC;AACzD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAEpB,IAAI,MAAM,CAAC,QAAQ,CAAC,6CAA6C,CAAC,EAAE,CAAC;IACjE,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;KAAM,CAAC;IACJ,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { DesignSystemModel, TokenCollection, DesignToken } from "@calibrate-ds/shared-types";
|
|
2
|
+
/**
|
|
3
|
+
* Generates vanilla CSS Variables content for a specific Token Collection.
|
|
4
|
+
*
|
|
5
|
+
* When richGlobalMap is provided (a collection-aware map built across all collections):
|
|
6
|
+
* - Alias tokens emit var(--ptb-next-layer-token) preserving the CSS cascade architecture
|
|
7
|
+
* - Primitive tokens emit the resolved scalar value with correct units
|
|
8
|
+
*
|
|
9
|
+
* Without richGlobalMap, falls back to resolving terminal values (same as before).
|
|
10
|
+
*/
|
|
11
|
+
export declare function generateTokenCssContent(collection: TokenCollection, richGlobalMap?: Map<string, {
|
|
12
|
+
token: DesignToken;
|
|
13
|
+
collectionName: string;
|
|
14
|
+
}>): string;
|
|
15
|
+
/**
|
|
16
|
+
* Generates a unified CSS Variables file containing all tokens from all collections.
|
|
17
|
+
* Correctly resolves alias chains across the entire model and applies units.
|
|
18
|
+
*/
|
|
19
|
+
export declare function generateUnifiedTokenCssContent(model: DesignSystemModel): {
|
|
20
|
+
content: string;
|
|
21
|
+
metrics: {
|
|
22
|
+
resolved: number;
|
|
23
|
+
unresolved: number;
|
|
24
|
+
nonScalar: number;
|
|
25
|
+
cycles: number;
|
|
26
|
+
withUnits: number;
|
|
27
|
+
unitless: number;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=generate-token-css.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-token-css.d.ts","sourceRoot":"","sources":["../../src/tokens/generate-token-css.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAoPlG;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACnC,UAAU,EAAE,eAAe,EAC3B,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,GAC5E,MAAM,CA+CR;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,iBAAiB,GAAG;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;KACpB,CAAA;CACJ,CA8FA"}
|
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
import { getPTBTokenVariableName } from "@calibrate-ds/core";
|
|
2
|
+
function getActiveValue(value) {
|
|
3
|
+
if (value === null || value === undefined)
|
|
4
|
+
return value;
|
|
5
|
+
if (typeof value !== "object")
|
|
6
|
+
return value;
|
|
7
|
+
// Check if it's an explicit alias reference
|
|
8
|
+
if ('id' in value && typeof value.id === "string")
|
|
9
|
+
return value;
|
|
10
|
+
// Check for RGBA color object
|
|
11
|
+
if ('r' in value && 'g' in value && 'b' in value)
|
|
12
|
+
return value;
|
|
13
|
+
// Check for structured primitive value
|
|
14
|
+
if ('value' in value)
|
|
15
|
+
return getActiveValue(value.value);
|
|
16
|
+
// Otherwise, assume it's a mode map
|
|
17
|
+
const keys = Object.keys(value);
|
|
18
|
+
if (keys.length > 0) {
|
|
19
|
+
for (const key of keys) {
|
|
20
|
+
if (key.toLowerCase().includes("default") || key === "0") {
|
|
21
|
+
return getActiveValue(value[key]);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return getActiveValue(value[keys[0]]);
|
|
25
|
+
}
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Recursively resolves a token's final scalar value by following alias links and ID references.
|
|
30
|
+
*/
|
|
31
|
+
function resolveTokenValue(token, allTokens, visited = new Set()) {
|
|
32
|
+
if (visited.has(token.id))
|
|
33
|
+
return { value: null, status: "cycle" };
|
|
34
|
+
visited.add(token.id);
|
|
35
|
+
// 1. Follow explicit aliasTargetId
|
|
36
|
+
if (token.aliasTargetId) {
|
|
37
|
+
const target = allTokens.get(token.aliasTargetId);
|
|
38
|
+
if (target)
|
|
39
|
+
return resolveTokenValue(target, allTokens, visited);
|
|
40
|
+
return { value: null, status: "unresolved" };
|
|
41
|
+
}
|
|
42
|
+
const activeRawValue = getActiveValue(token.value);
|
|
43
|
+
// 2. Follow extracted value object reference { id: "..." }
|
|
44
|
+
if (typeof activeRawValue === "object" && activeRawValue !== null && 'id' in activeRawValue && typeof activeRawValue.id === "string") {
|
|
45
|
+
const idToLookup = activeRawValue.id.replace(/^VariableID:/i, "");
|
|
46
|
+
const target = allTokens.get(idToLookup) || allTokens.get(activeRawValue.id);
|
|
47
|
+
if (target)
|
|
48
|
+
return resolveTokenValue(target, allTokens, visited);
|
|
49
|
+
return { value: null, status: "unresolved" };
|
|
50
|
+
}
|
|
51
|
+
// 3. Extracted RGBA color check
|
|
52
|
+
if (typeof activeRawValue === "object" && activeRawValue !== null && 'r' in activeRawValue && 'g' in activeRawValue && 'b' in activeRawValue) {
|
|
53
|
+
const r = Math.round(activeRawValue.r * 255);
|
|
54
|
+
const g = Math.round(activeRawValue.g * 255);
|
|
55
|
+
const b = Math.round(activeRawValue.b * 255);
|
|
56
|
+
const a = typeof activeRawValue.a === 'number' ? activeRawValue.a : 1;
|
|
57
|
+
if (a < 1) {
|
|
58
|
+
return { value: `rgba(${r}, ${g}, ${b}, ${a})`, status: "resolved" };
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
const toHex = (c) => {
|
|
62
|
+
const hex = c.toString(16);
|
|
63
|
+
return hex.length === 1 ? "0" + hex : hex;
|
|
64
|
+
};
|
|
65
|
+
return { value: `#${toHex(r)}${toHex(g)}${toHex(b)}`.toUpperCase(), status: "resolved" };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// 4. Check for structured/non-scalar objects (Typography strings left, etc)
|
|
69
|
+
if (typeof activeRawValue === "object" && activeRawValue !== null) {
|
|
70
|
+
return { value: null, status: "non-scalar" };
|
|
71
|
+
}
|
|
72
|
+
// 5. Handle primitive scalars (Strings/Numbers)
|
|
73
|
+
if (typeof activeRawValue === "string" || typeof activeRawValue === "number") {
|
|
74
|
+
if (typeof activeRawValue === "string" && activeRawValue.includes("VariableID:")) {
|
|
75
|
+
const idToLookup = activeRawValue.replace(/^VariableID:/i, "");
|
|
76
|
+
const target = allTokens.get(idToLookup) || allTokens.get(activeRawValue);
|
|
77
|
+
if (target)
|
|
78
|
+
return resolveTokenValue(target, allTokens, visited);
|
|
79
|
+
return { value: null, status: "unresolved" };
|
|
80
|
+
}
|
|
81
|
+
return { value: activeRawValue, status: "resolved" };
|
|
82
|
+
}
|
|
83
|
+
return { value: null, status: "unresolved" };
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Common design-tool fonts → web-safe CSS font stacks.
|
|
87
|
+
* Keyed by lowercase font family name.
|
|
88
|
+
*/
|
|
89
|
+
const FONT_FALLBACKS = {
|
|
90
|
+
"sf pro": "-apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Arial, sans-serif",
|
|
91
|
+
"sf pro display": "-apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Arial, sans-serif",
|
|
92
|
+
"sf pro text": "-apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Arial, sans-serif",
|
|
93
|
+
"sf pro rounded": "-apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Arial, sans-serif",
|
|
94
|
+
"sf mono": "\"SF Mono\", ui-monospace, SFMono-Regular, Menlo, Monaco, \"Cascadia Mono\", monospace",
|
|
95
|
+
"new york": "\"New York\", Georgia, \"Times New Roman\", serif",
|
|
96
|
+
"inter": "\"Helvetica Neue\", Arial, sans-serif",
|
|
97
|
+
"roboto": "\"Helvetica Neue\", Arial, sans-serif",
|
|
98
|
+
"roboto mono": "ui-monospace, monospace",
|
|
99
|
+
"open sans": "\"Helvetica Neue\", Arial, sans-serif",
|
|
100
|
+
"lato": "\"Helvetica Neue\", Arial, sans-serif",
|
|
101
|
+
"poppins": "\"Helvetica Neue\", Arial, sans-serif",
|
|
102
|
+
"nunito": "\"Helvetica Neue\", Arial, sans-serif",
|
|
103
|
+
"source sans pro": "\"Helvetica Neue\", Arial, sans-serif",
|
|
104
|
+
"source code pro": "ui-monospace, monospace",
|
|
105
|
+
"fira code": "ui-monospace, monospace",
|
|
106
|
+
"jetbrains mono": "ui-monospace, monospace",
|
|
107
|
+
"helvetica neue": "Helvetica, Arial, sans-serif",
|
|
108
|
+
"helvetica": "Arial, sans-serif",
|
|
109
|
+
"georgia": "\"Times New Roman\", serif",
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* Wraps a font family name in quotes (if needed) and appends web-safe fallbacks.
|
|
113
|
+
*/
|
|
114
|
+
function applyFontFallbacks(fontFamily) {
|
|
115
|
+
const key = fontFamily.toLowerCase().trim();
|
|
116
|
+
const known = FONT_FALLBACKS[key];
|
|
117
|
+
// Quote the primary font if it contains a space
|
|
118
|
+
const quoted = fontFamily.includes(" ") ? `"${fontFamily}"` : fontFamily;
|
|
119
|
+
if (known)
|
|
120
|
+
return `${quoted}, ${known}`;
|
|
121
|
+
// Generic fallback by font category guess
|
|
122
|
+
if (key.includes("mono") || key.includes("code") || key.includes("console")) {
|
|
123
|
+
return `${quoted}, ui-monospace, "Cascadia Code", monospace`;
|
|
124
|
+
}
|
|
125
|
+
if ((key.includes("serif") && !key.includes("sans")) || key.includes("georgia") || key.includes("times")) {
|
|
126
|
+
return `${quoted}, Georgia, "Times New Roman", serif`;
|
|
127
|
+
}
|
|
128
|
+
// Default: sans-serif stack
|
|
129
|
+
return `${quoted}, -apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial, sans-serif`;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Formats a resolved scalar value for CSS output (px suffix, units, font fallbacks).
|
|
133
|
+
*/
|
|
134
|
+
function formatCssValue(value, type, name) {
|
|
135
|
+
if (typeof value === "number") {
|
|
136
|
+
const lowerName = name.toLowerCase();
|
|
137
|
+
const lowerType = type.toLowerCase().replace(/[^a-z0-9]+/g, "");
|
|
138
|
+
// Always unitless: font weights (100–900), opacity (0–1), z-index, counters
|
|
139
|
+
const isUnitless = lowerName.includes("weight") ||
|
|
140
|
+
lowerName.includes("opacity") ||
|
|
141
|
+
lowerName.includes("z-index") ||
|
|
142
|
+
lowerName.includes("zindex") ||
|
|
143
|
+
lowerName.includes("index") ||
|
|
144
|
+
lowerName.includes("ratio") ||
|
|
145
|
+
lowerName.includes("columns") ||
|
|
146
|
+
lowerType.includes("fontweight") ||
|
|
147
|
+
lowerType.includes("opacity");
|
|
148
|
+
if (isUnitless)
|
|
149
|
+
return `${value}`;
|
|
150
|
+
// Line-height: unitless when < 10 (multiplier form), px otherwise
|
|
151
|
+
if (lowerType.includes("lineheight") || lowerName.includes("line-height") || lowerName.includes("lineheight")) {
|
|
152
|
+
return value < 10 ? `${value}` : `${value}px`;
|
|
153
|
+
}
|
|
154
|
+
const dimensionTypes = [
|
|
155
|
+
"spacing", "radius", "sizing", "borderwidth", "fontsize",
|
|
156
|
+
"dimension", "padding", "margin", "gap", "width", "height", "top", "right", "bottom", "left"
|
|
157
|
+
];
|
|
158
|
+
if (dimensionTypes.some(t => lowerType.includes(t)))
|
|
159
|
+
return `${value}px`;
|
|
160
|
+
if (lowerName.includes("spacing") ||
|
|
161
|
+
lowerName.includes("radius") ||
|
|
162
|
+
lowerName.includes("width") ||
|
|
163
|
+
lowerName.includes("height") ||
|
|
164
|
+
lowerName.includes("size") ||
|
|
165
|
+
lowerName.includes("gap") ||
|
|
166
|
+
lowerName.includes("padding") ||
|
|
167
|
+
lowerName.includes("margin") ||
|
|
168
|
+
lowerName.includes("scale"))
|
|
169
|
+
return `${value}px`;
|
|
170
|
+
// Name ends with -<N> (e.g. "border-4", "gap-16") — treat as dimension
|
|
171
|
+
// Guarded by isUnitless above, so weight-400, z-index-100 never reach here
|
|
172
|
+
if (/[-_]\d+$/.test(lowerName))
|
|
173
|
+
return `${value}px`;
|
|
174
|
+
return `${value}`;
|
|
175
|
+
}
|
|
176
|
+
// String: apply font fallbacks for font-family tokens
|
|
177
|
+
if (typeof value === "string") {
|
|
178
|
+
const nameLC = name.toLowerCase();
|
|
179
|
+
if (nameLC.includes("font") || nameLC.includes("family") || nameLC.includes("typeface")) {
|
|
180
|
+
return applyFontFallbacks(value);
|
|
181
|
+
}
|
|
182
|
+
return value;
|
|
183
|
+
}
|
|
184
|
+
return String(value);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Returns the CSS variable name for the direct alias target of a token (one hop only),
|
|
188
|
+
* preserving the cascade architecture: mapped → var(--alias-x) → var(--brand-y) → #hex.
|
|
189
|
+
* Returns null if the token is not an alias.
|
|
190
|
+
*/
|
|
191
|
+
function getDirectAliasVarName(token, richMap) {
|
|
192
|
+
let targetId = null;
|
|
193
|
+
if (token.aliasTargetId) {
|
|
194
|
+
targetId = token.aliasTargetId;
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
// Mirror the same extraction logic resolveTokenValue uses via getActiveValue,
|
|
198
|
+
// so that whatever format makes resolution work also triggers the var() path.
|
|
199
|
+
const active = getActiveValue(token.value);
|
|
200
|
+
if (typeof active === "string" && active.includes("VariableID:")) {
|
|
201
|
+
targetId = active.replace(/^VariableID:/i, "");
|
|
202
|
+
}
|
|
203
|
+
else if (typeof active === "object" && active !== null && "id" in active && typeof active.id === "string") {
|
|
204
|
+
// { id: "VariableID:30:592" } — raw Figma API alias format
|
|
205
|
+
targetId = active.id.replace(/^VariableID:/i, "");
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (!targetId)
|
|
209
|
+
return null;
|
|
210
|
+
// Try stripped and prefixed forms — whichever way the snapshot stored the IDs
|
|
211
|
+
const entry = richMap.get(targetId) ??
|
|
212
|
+
richMap.get(`VariableID:${targetId}`);
|
|
213
|
+
if (!entry)
|
|
214
|
+
return null;
|
|
215
|
+
return getPTBTokenVariableName(entry.collectionName, entry.token.name);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Generates vanilla CSS Variables content for a specific Token Collection.
|
|
219
|
+
*
|
|
220
|
+
* When richGlobalMap is provided (a collection-aware map built across all collections):
|
|
221
|
+
* - Alias tokens emit var(--ptb-next-layer-token) preserving the CSS cascade architecture
|
|
222
|
+
* - Primitive tokens emit the resolved scalar value with correct units
|
|
223
|
+
*
|
|
224
|
+
* Without richGlobalMap, falls back to resolving terminal values (same as before).
|
|
225
|
+
*/
|
|
226
|
+
export function generateTokenCssContent(collection, richGlobalMap) {
|
|
227
|
+
// Build a DesignToken-only map for resolveTokenValue (terminal scalar fallback)
|
|
228
|
+
const localMap = new Map(collection.tokens.map(t => [t.id, t]));
|
|
229
|
+
const resolveMap = richGlobalMap
|
|
230
|
+
? new Map([
|
|
231
|
+
...Array.from(richGlobalMap.entries()).map(([k, v]) => [k, v.token]),
|
|
232
|
+
...localMap,
|
|
233
|
+
])
|
|
234
|
+
: localMap;
|
|
235
|
+
let cssVars = "";
|
|
236
|
+
let skippedCount = 0;
|
|
237
|
+
for (const t of collection.tokens) {
|
|
238
|
+
const varName = getPTBTokenVariableName(collection.name, t.name);
|
|
239
|
+
// 1. Alias token → emit var() reference (one hop) to preserve cascade
|
|
240
|
+
if (richGlobalMap) {
|
|
241
|
+
const aliasVarName = getDirectAliasVarName(t, richGlobalMap);
|
|
242
|
+
if (aliasVarName) {
|
|
243
|
+
cssVars += ` ${varName}: var(${aliasVarName});\n`;
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// 2. Primitive token → resolve to terminal scalar
|
|
248
|
+
const { value, status } = resolveTokenValue(t, resolveMap);
|
|
249
|
+
if (status !== "resolved" || value === null) {
|
|
250
|
+
skippedCount++;
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
// Skip content strings — multi-word string values that are not font families
|
|
254
|
+
if (typeof value === "string" && /\s/.test(value)) {
|
|
255
|
+
const nameLC = t.name.toLowerCase();
|
|
256
|
+
const isFontFamily = nameLC.includes("font") || nameLC.includes("family") || nameLC.includes("typeface");
|
|
257
|
+
if (!isFontFamily) {
|
|
258
|
+
skippedCount++;
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
cssVars += ` ${varName}: ${formatCssValue(value, t.type, t.name)};\n`;
|
|
263
|
+
}
|
|
264
|
+
const header = `/**\n * Generated Design Tokens: ${collection.name} (CSS Variables)\n * Do not edit. This file is auto-generated by Calibrate.\n */\n`;
|
|
265
|
+
const skippedComment = skippedCount > 0 ? `\n/* Note: ${skippedCount} tokens were skipped from this local CSS output (unresolved or non-scalar). */\n` : "";
|
|
266
|
+
return `${header}${skippedComment}\n:root {\n${cssVars}}\n`;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Generates a unified CSS Variables file containing all tokens from all collections.
|
|
270
|
+
* Correctly resolves alias chains across the entire model and applies units.
|
|
271
|
+
*/
|
|
272
|
+
export function generateUnifiedTokenCssContent(model) {
|
|
273
|
+
// Build both maps: rich (collection-aware, for var() references) and flat (for terminal resolution)
|
|
274
|
+
const allTokens = new Map();
|
|
275
|
+
const richAllTokens = new Map();
|
|
276
|
+
for (const collection of model.tokens) {
|
|
277
|
+
for (const t of collection.tokens) {
|
|
278
|
+
const entry = { token: t, collectionName: collection.name };
|
|
279
|
+
allTokens.set(t.id, t);
|
|
280
|
+
richAllTokens.set(t.id, entry);
|
|
281
|
+
const stripped = t.id.replace(/^VariableID:/i, "");
|
|
282
|
+
if (stripped !== t.id) {
|
|
283
|
+
allTokens.set(stripped, t);
|
|
284
|
+
richAllTokens.set(stripped, entry);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
let cssVars = "";
|
|
289
|
+
const metrics = {
|
|
290
|
+
resolved: 0,
|
|
291
|
+
unresolved: 0,
|
|
292
|
+
nonScalar: 0,
|
|
293
|
+
cycles: 0,
|
|
294
|
+
withUnits: 0,
|
|
295
|
+
unitless: 0
|
|
296
|
+
};
|
|
297
|
+
for (const collection of model.tokens) {
|
|
298
|
+
let collectionVars = "";
|
|
299
|
+
let collectionSkipped = 0;
|
|
300
|
+
for (const t of collection.tokens) {
|
|
301
|
+
const varName = getPTBTokenVariableName(collection.name, t.name);
|
|
302
|
+
// Alias token → emit var() to preserve the cascade (theming-safe)
|
|
303
|
+
const aliasVarName = getDirectAliasVarName(t, richAllTokens);
|
|
304
|
+
if (aliasVarName) {
|
|
305
|
+
collectionVars += ` ${varName}: var(${aliasVarName});\n`;
|
|
306
|
+
metrics.resolved++;
|
|
307
|
+
continue;
|
|
308
|
+
}
|
|
309
|
+
// Primitive token → resolve to terminal scalar
|
|
310
|
+
const { value, status } = resolveTokenValue(t, allTokens);
|
|
311
|
+
if (status === "resolved" && value !== null) {
|
|
312
|
+
// Skip content strings that are not font families
|
|
313
|
+
if (typeof value === "string" && /\s/.test(value)) {
|
|
314
|
+
const nameLC = t.name.toLowerCase();
|
|
315
|
+
const isFontFamily = nameLC.includes("font") || nameLC.includes("family") || nameLC.includes("typeface");
|
|
316
|
+
if (!isFontFamily) {
|
|
317
|
+
collectionSkipped++;
|
|
318
|
+
metrics.unresolved++;
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
const valueStr = formatCssValue(value, t.type, t.name);
|
|
323
|
+
collectionVars += ` ${varName}: ${valueStr};\n`;
|
|
324
|
+
metrics.resolved++;
|
|
325
|
+
if (typeof value === "number") {
|
|
326
|
+
if (valueStr.endsWith("px"))
|
|
327
|
+
metrics.withUnits++;
|
|
328
|
+
else
|
|
329
|
+
metrics.unitless++;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
collectionSkipped++;
|
|
334
|
+
if (status === "unresolved")
|
|
335
|
+
metrics.unresolved++;
|
|
336
|
+
else if (status === "non-scalar")
|
|
337
|
+
metrics.nonScalar++;
|
|
338
|
+
else if (status === "cycle")
|
|
339
|
+
metrics.cycles++;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
if (collectionVars) {
|
|
343
|
+
cssVars += ` /* Collection: ${collection.name} */\n`;
|
|
344
|
+
if (collectionSkipped > 0)
|
|
345
|
+
cssVars += ` /* (${collectionSkipped} tokens skipped) */\n`;
|
|
346
|
+
cssVars += collectionVars + "\n";
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
const content = `/**
|
|
350
|
+
* Generated Design Tokens (Unified CSS Variables)
|
|
351
|
+
* Do not edit. This file is auto-generated by Calibrate.
|
|
352
|
+
*
|
|
353
|
+
* Metrics:
|
|
354
|
+
* - Resolved: ${metrics.resolved}
|
|
355
|
+
* - Applied px units: ${metrics.withUnits}
|
|
356
|
+
* - Emitted as unitless: ${metrics.unitless}
|
|
357
|
+
* - Unresolved references: ${metrics.unresolved}
|
|
358
|
+
* - Non-scalar / structured tokens: ${metrics.nonScalar}
|
|
359
|
+
* - Cycles: ${metrics.cycles}
|
|
360
|
+
*/
|
|
361
|
+
|
|
362
|
+
:root {
|
|
363
|
+
${cssVars}}
|
|
364
|
+
`;
|
|
365
|
+
return { content, metrics };
|
|
366
|
+
}
|
|
367
|
+
//# sourceMappingURL=generate-token-css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-token-css.js","sourceRoot":"","sources":["../../src/tokens/generate-token-css.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAA8B,MAAM,oBAAoB,CAAC;AAEzF,SAAS,cAAc,CAAC,KAAU;IAC9B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5C,4CAA4C;IAC5C,IAAI,IAAI,IAAI,KAAK,IAAI,OAAQ,KAAa,CAAC,EAAE,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAEzE,8BAA8B;IAC9B,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IAE/D,uCAAuC;IACvC,IAAI,OAAO,IAAI,KAAK;QAAE,OAAO,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEzD,oCAAoC;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;gBACvD,OAAO,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YACtC,CAAC;QACL,CAAC;QACD,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACtB,KAAkB,EAClB,SAAmC,EACnC,UAAU,IAAI,GAAG,EAAU;IAE3B,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAEtB,mCAAmC;IACnC,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAClD,IAAI,MAAM;YAAE,OAAO,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACjE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEnD,2DAA2D;IAC3D,IAAI,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,KAAK,IAAI,IAAI,IAAI,IAAI,cAAc,IAAI,OAAQ,cAAsB,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;QAC5I,MAAM,UAAU,GAAI,cAAsB,CAAC,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,GAAG,CAAE,cAAsB,CAAC,EAAE,CAAC,CAAC;QACtF,IAAI,MAAM;YAAE,OAAO,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACjE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IACjD,CAAC;IAED,gCAAgC;IAChC,IAAI,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,IAAI,GAAG,IAAI,cAAc,IAAI,GAAG,IAAI,cAAc,EAAE,CAAC;QAC3I,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAE,cAAsB,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QACtD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAE,cAAsB,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QACtD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAE,cAAsB,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QACtD,MAAM,CAAC,GAAG,OAAQ,cAAsB,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,cAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAExF,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACR,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QACzE,CAAC;aAAM,CAAC;YACJ,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE;gBACxB,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC3B,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAC9C,CAAC,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC7F,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,IAAI,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAChE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IACjD,CAAC;IAED,gDAAgD;IAChD,IAAI,OAAO,cAAc,KAAK,QAAQ,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;QAC3E,IAAI,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/E,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC1E,IAAI,MAAM;gBAAE,OAAO,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YACjE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;QACjD,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACzD,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,cAAc,GAA2B;IAC3C,QAAQ,EAAW,0EAA0E;IAC7F,gBAAgB,EAAG,0EAA0E;IAC7F,aAAa,EAAM,0EAA0E;IAC7F,gBAAgB,EAAG,0EAA0E;IAC7F,SAAS,EAAU,wFAAwF;IAC3G,UAAU,EAAS,mDAAmD;IACtE,OAAO,EAAY,uCAAuC;IAC1D,QAAQ,EAAW,uCAAuC;IAC1D,aAAa,EAAM,yBAAyB;IAC5C,WAAW,EAAQ,uCAAuC;IAC1D,MAAM,EAAa,uCAAuC;IAC1D,SAAS,EAAU,uCAAuC;IAC1D,QAAQ,EAAW,uCAAuC;IAC1D,iBAAiB,EAAE,uCAAuC;IAC1D,iBAAiB,EAAE,yBAAyB;IAC5C,WAAW,EAAQ,yBAAyB;IAC5C,gBAAgB,EAAG,yBAAyB;IAC5C,gBAAgB,EAAG,8BAA8B;IACjD,WAAW,EAAQ,mBAAmB;IACtC,SAAS,EAAU,4BAA4B;CAClD,CAAC;AAEF;;GAEG;AACH,SAAS,kBAAkB,CAAC,UAAkB;IAC1C,MAAM,GAAG,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAClC,gDAAgD;IAChD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;IAEzE,IAAI,KAAK;QAAE,OAAO,GAAG,MAAM,KAAK,KAAK,EAAE,CAAC;IAExC,0CAA0C;IAC1C,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1E,OAAO,GAAG,MAAM,4CAA4C,CAAC;IACjE,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACvG,OAAO,GAAG,MAAM,qCAAqC,CAAC;IAC1D,CAAC;IACD,4BAA4B;IAC5B,OAAO,GAAG,MAAM,0EAA0E,CAAC;AAC/F,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,KAAsB,EAAE,IAAY,EAAE,IAAY;IACtE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAEhE,4EAA4E;QAC5E,MAAM,UAAU,GACZ,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC5B,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC7B,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC7B,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC5B,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC3B,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC3B,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC7B,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC;YAChC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,UAAU;YAAE,OAAO,GAAG,KAAK,EAAE,CAAC;QAElC,kEAAkE;QAClE,IAAI,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5G,OAAO,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC;QAClD,CAAC;QAED,MAAM,cAAc,GAAG;YACnB,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU;YACxD,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM;SAC/F,CAAC;QACF,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,GAAG,KAAK,IAAI,CAAC;QAEzE,IACI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC7B,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC5B,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC3B,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC5B,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC1B,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;YACzB,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC7B,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC5B,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC7B,OAAO,GAAG,KAAK,IAAI,CAAC;QAEtB,uEAAuE;QACvE,2EAA2E;QAC3E,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,OAAO,GAAG,KAAK,IAAI,CAAC;QAEpD,OAAO,GAAG,KAAK,EAAE,CAAC;IACtB,CAAC;IAED,sDAAsD;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACtF,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAC1B,KAAkB,EAClB,OAAoE;IAEpE,IAAI,QAAQ,GAAkB,IAAI,CAAC;IAEnC,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACtB,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC;IACnC,CAAC;SAAM,CAAC;QACJ,8EAA8E;QAC9E,8EAA8E;QAC9E,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/D,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC;aAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,OAAQ,MAAc,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;YACnH,2DAA2D;YAC3D,QAAQ,GAAI,MAAc,CAAC,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;IAED,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,8EAA8E;IAC9E,MAAM,KAAK,GACP,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,OAAO,uBAAuB,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CACnC,UAA2B,EAC3B,aAA2E;IAE3E,gFAAgF;IAChF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAsB,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,MAAM,UAAU,GAA6B,aAAa;QACtD,CAAC,CAAC,IAAI,GAAG,CAAC;YACN,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAA0B,CAAC;YAC7F,GAAG,QAAQ;SACZ,CAAC;QACJ,CAAC,CAAC,QAAQ,CAAC;IAEf,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,uBAAuB,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAEjE,sEAAsE;QACtE,IAAI,aAAa,EAAE,CAAC;YAChB,MAAM,YAAY,GAAG,qBAAqB,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;YAC7D,IAAI,YAAY,EAAE,CAAC;gBACf,OAAO,IAAI,KAAK,OAAO,SAAS,YAAY,MAAM,CAAC;gBACnD,SAAS;YACb,CAAC;QACL,CAAC;QAED,kDAAkD;QAClD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QAE3D,IAAI,MAAM,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,YAAY,EAAE,CAAC;YACf,SAAS;QACb,CAAC;QAED,6EAA6E;QAC7E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACzG,IAAI,CAAC,YAAY,EAAE,CAAC;gBAAC,YAAY,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;QACpD,CAAC;QAED,OAAO,IAAI,KAAK,OAAO,KAAK,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3E,CAAC;IAED,MAAM,MAAM,GAAG,oCAAoC,UAAU,CAAC,IAAI,oFAAoF,CAAC;IACvJ,MAAM,cAAc,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,YAAY,kFAAkF,CAAC,CAAC,CAAC,EAAE,CAAC;IAE5J,OAAO,GAAG,MAAM,GAAG,cAAc,cAAc,OAAO,KAAK,CAAC;AAChE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAAC,KAAwB;IAWnE,oGAAoG;IACpG,MAAM,SAAS,GAAG,IAAI,GAAG,EAAuB,CAAC;IACjD,MAAM,aAAa,GAAG,IAAI,GAAG,EAA0D,CAAC;IACxF,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACpC,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,cAAc,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;YAC5D,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACvB,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC/B,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;YACnD,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;gBACpB,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAC3B,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACvC,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,MAAM,OAAO,GAAG;QACZ,QAAQ,EAAE,CAAC;QACX,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,CAAC;QACZ,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,CAAC;QACZ,QAAQ,EAAE,CAAC;KACd,CAAC;IAEF,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACpC,IAAI,cAAc,GAAG,EAAE,CAAC;QACxB,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAE1B,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,uBAAuB,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAEjE,kEAAkE;YAClE,MAAM,YAAY,GAAG,qBAAqB,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;YAC7D,IAAI,YAAY,EAAE,CAAC;gBACf,cAAc,IAAI,KAAK,OAAO,SAAS,YAAY,MAAM,CAAC;gBAC1D,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACnB,SAAS;YACb,CAAC;YAED,+CAA+C;YAC/C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAE1D,IAAI,MAAM,KAAK,UAAU,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC1C,kDAAkD;gBAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChD,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oBACpC,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;oBACzG,IAAI,CAAC,YAAY,EAAE,CAAC;wBAAC,iBAAiB,EAAE,CAAC;wBAAC,OAAO,CAAC,UAAU,EAAE,CAAC;wBAAC,SAAS;oBAAC,CAAC;gBAC/E,CAAC;gBAED,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBACvD,cAAc,IAAI,KAAK,OAAO,KAAK,QAAQ,KAAK,CAAC;gBACjD,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAEnB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC5B,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAAE,OAAO,CAAC,SAAS,EAAE,CAAC;;wBAC5C,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC5B,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,iBAAiB,EAAE,CAAC;gBACpB,IAAI,MAAM,KAAK,YAAY;oBAAE,OAAO,CAAC,UAAU,EAAE,CAAC;qBAC7C,IAAI,MAAM,KAAK,YAAY;oBAAE,OAAO,CAAC,SAAS,EAAE,CAAC;qBACjD,IAAI,MAAM,KAAK,OAAO;oBAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YAClD,CAAC;QACL,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACjB,OAAO,IAAI,oBAAoB,UAAU,CAAC,IAAI,OAAO,CAAC;YACtD,IAAI,iBAAiB,GAAG,CAAC;gBAAE,OAAO,IAAI,SAAS,iBAAiB,uBAAuB,CAAC;YACxF,OAAO,IAAI,cAAc,GAAG,IAAI,CAAC;QACrC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG;;;;;iBAKH,OAAO,CAAC,QAAQ;yBACR,OAAO,CAAC,SAAS;4BACd,OAAO,CAAC,QAAQ;8BACd,OAAO,CAAC,UAAU;uCACT,OAAO,CAAC,SAAS;eACzC,OAAO,CAAC,MAAM;;;;EAI3B,OAAO;CACR,CAAC;IAEE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { TokenCollection } from "@calibrate-ds/shared-types";
|
|
2
|
+
/**
|
|
3
|
+
* Generates TypeScript constant file content for a Token Collection.
|
|
4
|
+
*/
|
|
5
|
+
export declare function generateTokenFileContent(collection: TokenCollection): string;
|
|
6
|
+
//# sourceMappingURL=generate-token-file-content.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-token-file-content.d.ts","sourceRoot":"","sources":["../../src/tokens/generate-token-file-content.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,eAAe,GAAG,MAAM,CAwB5E"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates TypeScript constant file content for a Token Collection.
|
|
3
|
+
*/
|
|
4
|
+
export function generateTokenFileContent(collection) {
|
|
5
|
+
const safeName = collection.name.replace(/[^a-zA-Z0-9_]/g, "");
|
|
6
|
+
let tokensContent = "";
|
|
7
|
+
for (const t of collection.tokens) {
|
|
8
|
+
// We output only the default mode explicitly initially for a clean shape based on the canonical value
|
|
9
|
+
const jsonValue = JSON.stringify(t.value, null, 4).replace(/\n/g, "\n ");
|
|
10
|
+
tokensContent += `
|
|
11
|
+
"${t.name}": {
|
|
12
|
+
id: "${t.id}",
|
|
13
|
+
name: "${t.name}",
|
|
14
|
+
type: "${t.type}",
|
|
15
|
+
value: ${jsonValue}
|
|
16
|
+
},`;
|
|
17
|
+
}
|
|
18
|
+
return `/**
|
|
19
|
+
* Generated Design Tokens: ${collection.name}
|
|
20
|
+
* Do not edit. This file is auto-generated by Calibrate.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
export const ${safeName}Tokens = {${tokensContent}
|
|
24
|
+
} as const;
|
|
25
|
+
`;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=generate-token-file-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-token-file-content.js","sourceRoot":"","sources":["../../src/tokens/generate-token-file-content.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,UAA2B;IAClE,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAE/D,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QAClC,sGAAsG;QACtG,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC5E,aAAa,IAAI;KAChB,CAAC,CAAC,IAAI;WACA,CAAC,CAAC,EAAE;aACF,CAAC,CAAC,IAAI;aACN,CAAC,CAAC,IAAI;aACN,SAAS;KACjB,CAAC;IACJ,CAAC;IAED,OAAO;8BACqB,UAAU,CAAC,IAAI;;;;eAI9B,QAAQ,aAAa,aAAa;;CAEhD,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-typography-css.d.ts","sourceRoot":"","sources":["../../src/tokens/generate-typography-css.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAkB,MAAM,4BAA4B,CAAC;AAyFpF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CA0CtE"}
|