@canonical/terrazzo-plugin-css 0.0.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 +49 -0
- package/dist/esm/artifact/classifyTier.js +7 -0
- package/dist/esm/artifact/classifyTier.js.map +1 -0
- package/dist/esm/artifact/index.js +5 -0
- package/dist/esm/artifact/index.js.map +1 -0
- package/dist/esm/artifact/makeArtifactToken.js +36 -0
- package/dist/esm/artifact/makeArtifactToken.js.map +1 -0
- package/dist/esm/artifact/makeDerivedArtifactToken.js +29 -0
- package/dist/esm/artifact/makeDerivedArtifactToken.js.map +1 -0
- package/dist/esm/artifact/serializeArtifact.js +4 -0
- package/dist/esm/artifact/serializeArtifact.js.map +1 -0
- package/dist/esm/css-ast/addDeclUnique.js +7 -0
- package/dist/esm/css-ast/addDeclUnique.js.map +1 -0
- package/dist/esm/css-ast/decl.js +4 -0
- package/dist/esm/css-ast/decl.js.map +1 -0
- package/dist/esm/css-ast/hasDecl.js +4 -0
- package/dist/esm/css-ast/hasDecl.js.map +1 -0
- package/dist/esm/css-ast/index.js +7 -0
- package/dist/esm/css-ast/index.js.map +1 -0
- package/dist/esm/css-ast/printNode.js +28 -0
- package/dist/esm/css-ast/printNode.js.map +1 -0
- package/dist/esm/css-ast/printRules.js +13 -0
- package/dist/esm/css-ast/printRules.js.map +1 -0
- package/dist/esm/css-ast/rule.js +4 -0
- package/dist/esm/css-ast/rule.js.map +1 -0
- package/dist/esm/index.js +14 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/layers/index.js +3 -0
- package/dist/esm/layers/index.js.map +1 -0
- package/dist/esm/layers/resolveLayerConfig.js +10 -0
- package/dist/esm/layers/resolveLayerConfig.js.map +1 -0
- package/dist/esm/layers/wrapInLayer.js +14 -0
- package/dist/esm/layers/wrapInLayer.js.map +1 -0
- package/dist/esm/light-dark/buildLightDarkDeclarations.js +14 -0
- package/dist/esm/light-dark/buildLightDarkDeclarations.js.map +1 -0
- package/dist/esm/light-dark/index.js +3 -0
- package/dist/esm/light-dark/index.js.map +1 -0
- package/dist/esm/light-dark/wrapLightDark.js +13 -0
- package/dist/esm/light-dark/wrapLightDark.js.map +1 -0
- package/dist/esm/modifiers/buildModifierContextCSS.js +11 -0
- package/dist/esm/modifiers/buildModifierContextCSS.js.map +1 -0
- package/dist/esm/modifiers/computeModifierContext.js +75 -0
- package/dist/esm/modifiers/computeModifierContext.js.map +1 -0
- package/dist/esm/modifiers/getAliasTarget.js +10 -0
- package/dist/esm/modifiers/getAliasTarget.js.map +1 -0
- package/dist/esm/modifiers/index.js +4 -0
- package/dist/esm/modifiers/index.js.map +1 -0
- package/dist/esm/naming.js +33 -0
- package/dist/esm/naming.js.map +1 -0
- package/dist/esm/plugin.js +916 -0
- package/dist/esm/plugin.js.map +1 -0
- package/dist/esm/types.js +8 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/types/artifact/classifyTier.d.ts +10 -0
- package/dist/types/artifact/classifyTier.d.ts.map +1 -0
- package/dist/types/artifact/index.d.ts +5 -0
- package/dist/types/artifact/index.d.ts.map +1 -0
- package/dist/types/artifact/makeArtifactToken.d.ts +19 -0
- package/dist/types/artifact/makeArtifactToken.d.ts.map +1 -0
- package/dist/types/artifact/makeDerivedArtifactToken.d.ts +17 -0
- package/dist/types/artifact/makeDerivedArtifactToken.d.ts.map +1 -0
- package/dist/types/artifact/serializeArtifact.d.ts +6 -0
- package/dist/types/artifact/serializeArtifact.d.ts.map +1 -0
- package/dist/types/css-ast/addDeclUnique.d.ts +4 -0
- package/dist/types/css-ast/addDeclUnique.d.ts.map +1 -0
- package/dist/types/css-ast/decl.d.ts +4 -0
- package/dist/types/css-ast/decl.d.ts.map +1 -0
- package/dist/types/css-ast/hasDecl.d.ts +4 -0
- package/dist/types/css-ast/hasDecl.d.ts.map +1 -0
- package/dist/types/css-ast/index.d.ts +7 -0
- package/dist/types/css-ast/index.d.ts.map +1 -0
- package/dist/types/css-ast/printNode.d.ts +7 -0
- package/dist/types/css-ast/printNode.d.ts.map +1 -0
- package/dist/types/css-ast/printRules.d.ts +4 -0
- package/dist/types/css-ast/printRules.d.ts.map +1 -0
- package/dist/types/css-ast/rule.d.ts +4 -0
- package/dist/types/css-ast/rule.d.ts.map +1 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/layers/index.d.ts +3 -0
- package/dist/types/layers/index.d.ts.map +1 -0
- package/dist/types/layers/resolveLayerConfig.d.ts +6 -0
- package/dist/types/layers/resolveLayerConfig.d.ts.map +1 -0
- package/dist/types/layers/wrapInLayer.d.ts +3 -0
- package/dist/types/layers/wrapInLayer.d.ts.map +1 -0
- package/dist/types/light-dark/buildLightDarkDeclarations.d.ts +3 -0
- package/dist/types/light-dark/buildLightDarkDeclarations.d.ts.map +1 -0
- package/dist/types/light-dark/index.d.ts +3 -0
- package/dist/types/light-dark/index.d.ts.map +1 -0
- package/dist/types/light-dark/wrapLightDark.d.ts +8 -0
- package/dist/types/light-dark/wrapLightDark.d.ts.map +1 -0
- package/dist/types/modifiers/buildModifierContextCSS.d.ts +3 -0
- package/dist/types/modifiers/buildModifierContextCSS.d.ts.map +1 -0
- package/dist/types/modifiers/computeModifierContext.d.ts +3 -0
- package/dist/types/modifiers/computeModifierContext.d.ts.map +1 -0
- package/dist/types/modifiers/getAliasTarget.d.ts +7 -0
- package/dist/types/modifiers/getAliasTarget.d.ts.map +1 -0
- package/dist/types/modifiers/index.d.ts +4 -0
- package/dist/types/modifiers/index.d.ts.map +1 -0
- package/dist/types/naming.d.ts +24 -0
- package/dist/types/naming.d.ts.map +1 -0
- package/dist/types/plugin.d.ts +73 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/types.d.ts +223 -0
- package/dist/types/types.d.ts.map +1 -0
- package/package.json +31 -0
package/README.md
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# @canonical/terrazzo-plugin-css
|
|
2
|
+
|
|
3
|
+
Terrazzo CSS plugin for Canonical design tokens. Transforms DTCG token definitions into CSS custom properties.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- CSS `light-dark()` colour mode output
|
|
8
|
+
- Modifier families (criticality, emphasis, importance, surface, typography)
|
|
9
|
+
- `@layer` ordering
|
|
10
|
+
- `@media` query scoping for mode variants
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
bun add -d @canonical/terrazzo-plugin-css
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Usage
|
|
19
|
+
|
|
20
|
+
Add the plugin to your `terrazzo.config.ts`:
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
import { defineConfig } from "@terrazzo/cli";
|
|
24
|
+
import { canonicalPlugin } from "@canonical/terrazzo-plugin-css";
|
|
25
|
+
|
|
26
|
+
export default defineConfig({
|
|
27
|
+
tokens: ["./tokens/canonical/canonical.resolver.json"],
|
|
28
|
+
outDir: "./dist/",
|
|
29
|
+
plugins: [canonicalPlugin()],
|
|
30
|
+
});
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Configuration
|
|
34
|
+
|
|
35
|
+
`canonicalPlugin()` accepts an options object:
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
canonicalPlugin({
|
|
39
|
+
tokensDir: "./tokens/canonical", // Base directory for token sources
|
|
40
|
+
});
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Development
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
bun run build # Compile plugin (tsc)
|
|
47
|
+
bun run test # Run tests
|
|
48
|
+
bun run check # Lint + type check
|
|
49
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classifyTier.js","sourceRoot":"","sources":["../../../src/artifact/classifyTier.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,QAAgB,EAChB,OAA2B;IAE3B,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAC5B,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as classifyTier } from "./classifyTier.js";
|
|
2
|
+
export { default as makeArtifactToken } from "./makeArtifactToken.js";
|
|
3
|
+
export { default as makeDerivedArtifactToken } from "./makeDerivedArtifactToken.js";
|
|
4
|
+
export { default as serializeArtifact } from "./serializeArtifact.js";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/artifact/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export default function makeArtifactToken(params) {
|
|
2
|
+
const isPaired = params.valueLight !== undefined &&
|
|
3
|
+
params.valueDark !== undefined &&
|
|
4
|
+
params.valueLight !== params.valueDark;
|
|
5
|
+
const token = {
|
|
6
|
+
cssVar: params.cssVar,
|
|
7
|
+
id: params.id,
|
|
8
|
+
type: params.type,
|
|
9
|
+
tier: params.tier,
|
|
10
|
+
isPaired,
|
|
11
|
+
cssOutputFile: params.cssOutputFile,
|
|
12
|
+
};
|
|
13
|
+
if (params.description !== undefined) {
|
|
14
|
+
token.description = params.description;
|
|
15
|
+
}
|
|
16
|
+
if (params.declarations !== undefined && params.declarations.length > 0) {
|
|
17
|
+
token.declarations = params.declarations;
|
|
18
|
+
}
|
|
19
|
+
if (params.aliasChain !== undefined) {
|
|
20
|
+
token.aliasChain = params.aliasChain;
|
|
21
|
+
}
|
|
22
|
+
if (params.valueLight !== undefined) {
|
|
23
|
+
token.valueLight = params.valueLight;
|
|
24
|
+
}
|
|
25
|
+
if (params.valueDark !== undefined) {
|
|
26
|
+
token.valueDark = params.valueDark;
|
|
27
|
+
}
|
|
28
|
+
if (params.sourceFile !== undefined) {
|
|
29
|
+
token.sourceFile = params.sourceFile;
|
|
30
|
+
}
|
|
31
|
+
if (params.sourceLine !== undefined) {
|
|
32
|
+
token.sourceLine = params.sourceLine;
|
|
33
|
+
}
|
|
34
|
+
return token;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=makeArtifactToken.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"makeArtifactToken.js","sourceRoot":"","sources":["../../../src/artifact/makeArtifactToken.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,MAazC;IACC,MAAM,QAAQ,GACZ,MAAM,CAAC,UAAU,KAAK,SAAS;QAC/B,MAAM,CAAC,SAAS,KAAK,SAAS;QAC9B,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,SAAS,CAAC;IAEzC,MAAM,KAAK,GAAkB;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ;QACR,aAAa,EAAE,MAAM,CAAC,aAAa;KACpC,CAAC;IAEF,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACrC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACzC,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxE,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IAC3C,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACpC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACvC,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACpC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACvC,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACnC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACrC,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACpC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACvC,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACpC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACvC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export default function makeDerivedArtifactToken(params) {
|
|
2
|
+
const isPaired = params.valueLight !== undefined &&
|
|
3
|
+
params.valueDark !== undefined &&
|
|
4
|
+
params.valueLight !== params.valueDark;
|
|
5
|
+
const token = {
|
|
6
|
+
cssVar: params.cssVar,
|
|
7
|
+
id: null,
|
|
8
|
+
type: params.type,
|
|
9
|
+
tier: params.tier,
|
|
10
|
+
isPaired,
|
|
11
|
+
cssOutputFile: params.cssOutputFile,
|
|
12
|
+
derivedFrom: params.derivedFrom,
|
|
13
|
+
derivation: params.derivation,
|
|
14
|
+
};
|
|
15
|
+
if (params.description !== undefined) {
|
|
16
|
+
token.description = params.description;
|
|
17
|
+
}
|
|
18
|
+
if (params.declarations !== undefined && params.declarations.length > 0) {
|
|
19
|
+
token.declarations = params.declarations;
|
|
20
|
+
}
|
|
21
|
+
if (params.valueLight !== undefined) {
|
|
22
|
+
token.valueLight = params.valueLight;
|
|
23
|
+
}
|
|
24
|
+
if (params.valueDark !== undefined) {
|
|
25
|
+
token.valueDark = params.valueDark;
|
|
26
|
+
}
|
|
27
|
+
return token;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=makeDerivedArtifactToken.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"makeDerivedArtifactToken.js","sourceRoot":"","sources":["../../../src/artifact/makeDerivedArtifactToken.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAAC,MAWhD;IACC,MAAM,QAAQ,GACZ,MAAM,CAAC,UAAU,KAAK,SAAS;QAC/B,MAAM,CAAC,SAAS,KAAK,SAAS;QAC9B,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,SAAS,CAAC;IAEzC,MAAM,KAAK,GAAkB;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ;QACR,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;IAEF,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACrC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACzC,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxE,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;IAC3C,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACpC,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACvC,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACnC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IACrC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializeArtifact.js","sourceRoot":"","sources":["../../../src/artifact/serializeArtifact.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,QAAkB;IAC1D,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addDeclUnique.js","sourceRoot":"","sources":["../../../src/css-ast/addDeclUnique.ts"],"names":[],"mappings":"AAEA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,CAAC,OAAO,UAAU,aAAa,CACnC,IAAe,EACf,WAA2B;IAE3B,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decl.js","sourceRoot":"","sources":["../../../src/css-ast/decl.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,IAAI,CAC1B,QAAgB,EAChB,KAAa,EACb,OAAgB;IAEhB,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hasDecl.js","sourceRoot":"","sources":["../../../src/css-ast/hasDecl.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,IAAe,EAAE,QAAgB;IAC/D,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;AAC/E,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { default as addDeclUnique } from "./addDeclUnique.js";
|
|
2
|
+
export { default as decl } from "./decl.js";
|
|
3
|
+
export { default as hasDecl } from "./hasDecl.js";
|
|
4
|
+
export { default as printNode } from "./printNode.js";
|
|
5
|
+
export { default as printRules } from "./printRules.js";
|
|
6
|
+
export { default as rule } from "./rule.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/css-ast/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export default function printNode(node, { indentChar, indentLv }) {
|
|
2
|
+
const indent = indentChar.repeat(indentLv);
|
|
3
|
+
if (node.type === "Declaration") {
|
|
4
|
+
let out = "";
|
|
5
|
+
if (node.comment) {
|
|
6
|
+
out += `${indent}/* ${node.comment} */\n`;
|
|
7
|
+
}
|
|
8
|
+
out += `${indent}${node.property}: ${node.value};\n`;
|
|
9
|
+
return out;
|
|
10
|
+
}
|
|
11
|
+
// Rule — skip if empty prelude or children
|
|
12
|
+
if (!node.prelude.length || !node.children.length) {
|
|
13
|
+
return "";
|
|
14
|
+
}
|
|
15
|
+
let childOutput = "";
|
|
16
|
+
for (const child of node.children) {
|
|
17
|
+
childOutput += printNode(child, { indentChar, indentLv: indentLv + 1 });
|
|
18
|
+
}
|
|
19
|
+
if (!childOutput.trim()) {
|
|
20
|
+
return "";
|
|
21
|
+
}
|
|
22
|
+
let out = "";
|
|
23
|
+
out += `${indent}${node.prelude.join(`,\n${indent}`)} {\n`;
|
|
24
|
+
out += childOutput;
|
|
25
|
+
out += `${indent}}\n`;
|
|
26
|
+
return out;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=printNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"printNode.js","sourceRoot":"","sources":["../../../src/css-ast/printNode.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,SAAS,CAC/B,IAAa,EACb,EAAE,UAAU,EAAE,QAAQ,EAA4C;IAElE,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE3C,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAChC,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,GAAG,IAAI,GAAG,MAAM,MAAM,IAAI,CAAC,OAAO,OAAO,CAAC;QAC5C,CAAC;QACD,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,KAAK,CAAC;QACrD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,2CAA2C;IAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAClD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,WAAW,IAAI,SAAS,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,CAAC;IAC3D,GAAG,IAAI,WAAW,CAAC;IACnB,GAAG,IAAI,GAAG,MAAM,KAAK,CAAC;IACtB,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import printNode from "./printNode.js";
|
|
2
|
+
export default function printRules(nodes, opts = {}) {
|
|
3
|
+
const { indentChar = "\t", indentLv = 0 } = opts;
|
|
4
|
+
let output = "";
|
|
5
|
+
for (const node of nodes) {
|
|
6
|
+
if (output && node.type === "Rule") {
|
|
7
|
+
output += "\n";
|
|
8
|
+
}
|
|
9
|
+
output += printNode(node, { indentChar, indentLv });
|
|
10
|
+
}
|
|
11
|
+
return output.trimEnd();
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=printRules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"printRules.js","sourceRoot":"","sources":["../../../src/css-ast/printRules.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAEvC,MAAM,CAAC,OAAO,UAAU,UAAU,CAChC,KAAgB,EAChB,OAAqB,EAAE;IAEvB,MAAM,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC;IACjD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACnC,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC;QACD,MAAM,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule.js","sourceRoot":"","sources":["../../../src/css-ast/rule.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,IAAI,CAC1B,OAAiB,EACjB,WAAsB,EAAE;IAExB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @canonical/terrazzo-plugin-css-v2
|
|
3
|
+
*
|
|
4
|
+
* Custom Terrazzo plugin for Canonical design tokens.
|
|
5
|
+
* Modifier contracts, light-dark pairing, layer wrapping, artifact emission.
|
|
6
|
+
*/
|
|
7
|
+
export { classifyTier, makeArtifactToken, makeDerivedArtifactToken, serializeArtifact, } from "./artifact/index.js";
|
|
8
|
+
export { addDeclUnique, decl, hasDecl, printNode, printRules, rule, } from "./css-ast/index.js";
|
|
9
|
+
export { resolveLayerConfig, wrapInLayer } from "./layers/index.js";
|
|
10
|
+
export { buildLightDarkDeclarations, wrapLightDark, } from "./light-dark/index.js";
|
|
11
|
+
export { buildModifierContextCSS, computeModifierContext, getAliasTarget, } from "./modifiers/index.js";
|
|
12
|
+
export { prefixVar, tokenIdToCssVar } from "./naming.js";
|
|
13
|
+
export { canonicalPlugin } from "./plugin.js";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,aAAa,EACb,IAAI,EACJ,OAAO,EACP,SAAS,EACT,UAAU,EACV,IAAI,GACL,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EACL,0BAA0B,EAC1B,aAAa,GACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/layers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
const DEFAULT_LAYERS = {
|
|
2
|
+
tokens: "ds.tokens",
|
|
3
|
+
modifiers: "ds.modifiers",
|
|
4
|
+
surfaces: "ds.surfaces",
|
|
5
|
+
states: "ds.states",
|
|
6
|
+
};
|
|
7
|
+
export default function resolveLayerConfig(partial) {
|
|
8
|
+
return { ...DEFAULT_LAYERS, ...partial };
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=resolveLayerConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveLayerConfig.js","sourceRoot":"","sources":["../../../src/layers/resolveLayerConfig.ts"],"names":[],"mappings":"AAKA,MAAM,cAAc,GAAwB;IAC1C,MAAM,EAAE,WAAW;IACnB,SAAS,EAAE,cAAc;IACzB,QAAQ,EAAE,aAAa;IACvB,MAAM,EAAE,WAAW;CACpB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,kBAAkB,CACxC,OAAsC;IAEtC,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,OAAO,EAAE,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wrap CSS nodes in an `@layer` rule. Returns nodes unwrapped if `layerName` is null.
|
|
3
|
+
*
|
|
4
|
+
* @example wrapInLayer("ds.tokens", [decl("--x", "1")]) => rule(["@layer ds.tokens"], [...])
|
|
5
|
+
* @example wrapInLayer(null, [decl("--x", "1")]) => [decl("--x", "1")]
|
|
6
|
+
*/
|
|
7
|
+
import rule from "../css-ast/rule.js";
|
|
8
|
+
export default function wrapInLayer(layerName, children) {
|
|
9
|
+
if (layerName === null) {
|
|
10
|
+
return children;
|
|
11
|
+
}
|
|
12
|
+
return [rule([`@layer ${layerName}`], children)];
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=wrapInLayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapInLayer.js","sourceRoot":"","sources":["../../../src/layers/wrapInLayer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,IAAI,MAAM,oBAAoB,CAAC;AAGtC,MAAM,CAAC,OAAO,UAAU,WAAW,CACjC,SAAwB,EACxB,QAAmB;IAEnB,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build paired `light-dark()` declarations from parallel light/dark token arrays.
|
|
3
|
+
*
|
|
4
|
+
* Matches tokens by CSS variable name, produces a `LightDarkPair[]`
|
|
5
|
+
* and generates CSS declaration nodes.
|
|
6
|
+
*
|
|
7
|
+
* @returns Array of CSS declaration nodes for the merged values.
|
|
8
|
+
*/
|
|
9
|
+
import decl from "../css-ast/decl.js";
|
|
10
|
+
import wrapLightDark from "./wrapLightDark.js";
|
|
11
|
+
export default function buildLightDarkDeclarations(pairs) {
|
|
12
|
+
return pairs.map((pair) => decl(pair.property, wrapLightDark(pair.light, pair.dark)));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=buildLightDarkDeclarations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildLightDarkDeclarations.js","sourceRoot":"","sources":["../../../src/light-dark/buildLightDarkDeclarations.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,IAAI,MAAM,oBAAoB,CAAC;AAEtC,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAE/C,MAAM,CAAC,OAAO,UAAU,0BAA0B,CAChD,KAAsB;IAEtB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAC1D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/light-dark/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AACxF,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wrap two values in `light-dark()`. Returns the plain value if both are identical.
|
|
3
|
+
*
|
|
4
|
+
* @example wrapLightDark("oklch(0.5 0.1 200)", "oklch(0.8 0.1 200)") => "light-dark(oklch(0.5 0.1 200), oklch(0.8 0.1 200))"
|
|
5
|
+
* @example wrapLightDark("#000", "#000") => "#000"
|
|
6
|
+
*/
|
|
7
|
+
export default function wrapLightDark(light, dark) {
|
|
8
|
+
if (light === dark) {
|
|
9
|
+
return light;
|
|
10
|
+
}
|
|
11
|
+
return `light-dark(${light}, ${dark})`;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=wrapLightDark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapLightDark.js","sourceRoot":"","sources":["../../../src/light-dark/wrapLightDark.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,KAAa,EAAE,IAAY;IAC/D,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,cAAc,KAAK,KAAK,IAAI,GAAG,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build CSS nodes for a modifier context (class selector + declarations).
|
|
3
|
+
*/
|
|
4
|
+
import rule from "../css-ast/rule.js";
|
|
5
|
+
export default function buildModifierContextCSS(ctx) {
|
|
6
|
+
if (ctx.declarations.length === 0) {
|
|
7
|
+
return [];
|
|
8
|
+
}
|
|
9
|
+
return [rule([ctx.selector], ctx.declarations)];
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=buildModifierContextCSS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildModifierContextCSS.js","sourceRoot":"","sources":["../../../src/modifiers/buildModifierContextCSS.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,IAAI,MAAM,oBAAoB,CAAC;AAGtC,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAC7C,GAAoB;IAEpB,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute modifier channel declarations for a single family context.
|
|
3
|
+
*
|
|
4
|
+
* Shadow detection uses THREE strategies (tried in order):
|
|
5
|
+
* 1. **Alias map** — if the token ID exists in `aliasMap`, the source file
|
|
6
|
+
* explicitly declares it as an override. This is the primary strategy
|
|
7
|
+
* because Terrazzo's resolver normalises `source.loc` to the resolver
|
|
8
|
+
* file URL and `destructiveMerge` can fail to override `$value` when
|
|
9
|
+
* the token structure uses `$root` at different nesting levels.
|
|
10
|
+
* 2. **Value comparison** — if `$value` differs between base and overlay
|
|
11
|
+
* (deep equality via JSON serialization).
|
|
12
|
+
* 3. **Source location comparison** — legacy fallback for unit tests that
|
|
13
|
+
* don't populate `$value` or `aliasMap`.
|
|
14
|
+
*
|
|
15
|
+
* Alias target resolution uses (in order):
|
|
16
|
+
* 1. `aliasMap` parameter (pre-built from modifier source files)
|
|
17
|
+
* 2. `getAliasTarget()` on the overlay token (DTCG `aliasOf` or `$extensions`)
|
|
18
|
+
* 3. Falls back to the token's own CSS variable (identity)
|
|
19
|
+
*
|
|
20
|
+
* @param family - Family name (e.g. "anticipation")
|
|
21
|
+
* @param context - Context name (e.g. "constructive")
|
|
22
|
+
* @param baseTokens - Base-resolution token map (from `resolver.apply({})`)
|
|
23
|
+
* @param overlayTokens - Context-resolution token map
|
|
24
|
+
* @param prefix - CSS variable prefix (default: "modifier"). Use "surface" for surface layers.
|
|
25
|
+
* @param aliasMap - Optional map of token ID -> alias target ID (from source files).
|
|
26
|
+
* @returns A `ModifierContext` with computed declarations.
|
|
27
|
+
*/
|
|
28
|
+
import decl from "../css-ast/decl.js";
|
|
29
|
+
import { prefixVar, tokenIdToCssVar } from "../naming.js";
|
|
30
|
+
import getAliasTarget from "./getAliasTarget.js";
|
|
31
|
+
/**
|
|
32
|
+
* Detect whether an overlay token shadows its base counterpart.
|
|
33
|
+
*
|
|
34
|
+
* Uses value comparison when both tokens have `$value`, otherwise
|
|
35
|
+
* falls back to source location comparison for backward compatibility.
|
|
36
|
+
*/
|
|
37
|
+
function isShadowedToken(base, overlay) {
|
|
38
|
+
// Primary: compare $value via JSON serialization
|
|
39
|
+
if (base.$value !== undefined && overlay.$value !== undefined) {
|
|
40
|
+
return JSON.stringify(base.$value) !== JSON.stringify(overlay.$value);
|
|
41
|
+
}
|
|
42
|
+
// Fallback: source location comparison (for unit tests)
|
|
43
|
+
if (base.source?.loc !== undefined || overlay.source?.loc !== undefined) {
|
|
44
|
+
return base.source?.loc !== overlay.source?.loc;
|
|
45
|
+
}
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
export default function computeModifierContext(family, context, baseTokens, overlayTokens, prefix = "modifier", aliasMap, selectorOverride) {
|
|
49
|
+
const declarations = [];
|
|
50
|
+
for (const [id, overlay] of Object.entries(overlayTokens)) {
|
|
51
|
+
const base = baseTokens[id];
|
|
52
|
+
if (!base) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
// Primary: alias map declares this token as explicitly overridden
|
|
56
|
+
const inAliasMap = aliasMap != null && id in aliasMap;
|
|
57
|
+
// Fallback: value or loc comparison for tokens not in alias map
|
|
58
|
+
const isShadowed = inAliasMap || isShadowedToken(base, overlay);
|
|
59
|
+
if (!isShadowed) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
const cssVar = tokenIdToCssVar(id);
|
|
63
|
+
const channelVar = prefixVar(cssVar, prefix);
|
|
64
|
+
const target = aliasMap?.[id] ?? getAliasTarget(overlay);
|
|
65
|
+
const aliasTarget = target ? tokenIdToCssVar(target) : cssVar;
|
|
66
|
+
declarations.push(decl(channelVar, `var(${aliasTarget})`));
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
family,
|
|
70
|
+
context,
|
|
71
|
+
selector: selectorOverride ?? `.${context}`,
|
|
72
|
+
declarations,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=computeModifierContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"computeModifierContext.js","sourceRoot":"","sources":["../../../src/modifiers/computeModifierContext.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,cAAc,MAAM,qBAAqB,CAAC;AAEjD;;;;;GAKG;AACH,SAAS,eAAe,CAAC,IAAkB,EAAE,OAAqB;IAChE,iDAAiD;IACjD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9D,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE,CAAC;IACD,wDAAwD;IACxD,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,KAAK,SAAS,EAAE,CAAC;QACxE,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAC5C,MAAc,EACd,OAAe,EACf,UAAwC,EACxC,aAA2C,EAC3C,MAAM,GAAG,UAAU,EACnB,QAAiC,EACjC,gBAAyB;IAEzB,MAAM,YAAY,GAAG,EAAE,CAAC;IAExB,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QAED,kEAAkE;QAClE,MAAM,UAAU,GAAG,QAAQ,IAAI,IAAI,IAAI,EAAE,IAAI,QAAQ,CAAC;QACtD,gEAAgE;QAChE,MAAM,UAAU,GAAG,UAAU,IAAI,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAChE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC,EAAE,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;QACzD,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9D,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,WAAW,GAAG,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO;QACL,MAAM;QACN,OAAO;QACP,QAAQ,EAAE,gBAAgB,IAAI,IAAI,OAAO,EAAE;QAC3C,YAAY;KACb,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export default function getAliasTarget(token) {
|
|
2
|
+
if (token.aliasOf)
|
|
3
|
+
return token.aliasOf;
|
|
4
|
+
const ext = token.$extensions?.["com.canonical.modifier"];
|
|
5
|
+
if (ext && typeof ext === "object" && "aliasOf" in ext) {
|
|
6
|
+
return ext.aliasOf;
|
|
7
|
+
}
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=getAliasTarget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getAliasTarget.js","sourceRoot":"","sources":["../../../src/modifiers/getAliasTarget.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,OAAO,UAAU,cAAc,CACpC,KAAmB;IAEnB,IAAI,KAAK,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IACxC,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,wBAAwB,CAAC,CAAC;IAC1D,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;QACvD,OAAQ,GAA2B,CAAC,OAAO,CAAC;IAC9C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modifiers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token ID to CSS custom property name conversion.
|
|
3
|
+
*
|
|
4
|
+
* Dot-to-hyphen with camelCase preserved, `$root` stripped.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Convert a DTCG token ID to a CSS custom property name.
|
|
8
|
+
*
|
|
9
|
+
* Rules:
|
|
10
|
+
* 1. Strip the `.$root` terminal if present
|
|
11
|
+
* 2. Replace every `.` with `-`
|
|
12
|
+
* 3. Prepend `--`
|
|
13
|
+
*
|
|
14
|
+
* @example tokenIdToCssVar("color.foreground.primary.$root") => "--color-foreground-primary"
|
|
15
|
+
* @example tokenIdToCssVar("typography.heading.1.fontSize") => "--typography-heading-1-fontSize"
|
|
16
|
+
*/
|
|
17
|
+
export function tokenIdToCssVar(id) {
|
|
18
|
+
let name = id;
|
|
19
|
+
// Strip terminal .$root (only when it is the last segment)
|
|
20
|
+
if (name.endsWith(".$root")) {
|
|
21
|
+
name = name.slice(0, -6);
|
|
22
|
+
}
|
|
23
|
+
return `--${name.replaceAll(".", "-")}`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Add a channel prefix to a CSS variable name.
|
|
27
|
+
*
|
|
28
|
+
* @example prefixVar("--color-foreground-primary", "modifier") => "--modifier-color-foreground-primary"
|
|
29
|
+
*/
|
|
30
|
+
export function prefixVar(cssVar, prefix) {
|
|
31
|
+
return `--${prefix}-${cssVar.slice(2)}`;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=naming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../../src/naming.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,EAAU;IACxC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,2DAA2D;IAC3D,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,MAAc;IACtD,OAAO,KAAK,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,CAAC"}
|