@digdir/designsystemet 1.5.1 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/configs/test-tokens.config.json +15 -1
  2. package/dist/bin/config.js +14 -3
  3. package/dist/bin/designsystemet.js +106 -44
  4. package/dist/config.schema.json +52 -0
  5. package/dist/src/colors/colorMetadata.d.ts +1 -0
  6. package/dist/src/colors/colorMetadata.d.ts.map +1 -1
  7. package/dist/src/colors/colorMetadata.js +2 -0
  8. package/dist/src/colors/index.js +2 -0
  9. package/dist/src/colors/theme.js +1 -0
  10. package/dist/src/config.d.ts +70 -0
  11. package/dist/src/config.d.ts.map +1 -1
  12. package/dist/src/config.js +12 -1
  13. package/dist/src/index.js +91 -38
  14. package/dist/src/scripts/createJsonSchema.js +12 -1
  15. package/dist/src/scripts/update-preview-tokens.js +79 -27
  16. package/dist/src/tokens/build.js +46 -28
  17. package/dist/src/tokens/create/generators/$designsystemet.js +11 -11
  18. package/dist/src/tokens/create/generators/color.d.ts +2 -1
  19. package/dist/src/tokens/create/generators/color.d.ts.map +1 -1
  20. package/dist/src/tokens/create/generators/color.js +40 -6
  21. package/dist/src/tokens/create/write.js +11 -11
  22. package/dist/src/tokens/create.js +44 -10
  23. package/dist/src/tokens/format.js +90 -38
  24. package/dist/src/tokens/index.js +90 -38
  25. package/dist/src/tokens/process/configs/color.js +30 -12
  26. package/dist/src/tokens/process/configs/semantic.js +30 -12
  27. package/dist/src/tokens/process/configs/size-mode.js +30 -12
  28. package/dist/src/tokens/process/configs/size.js +30 -12
  29. package/dist/src/tokens/process/configs/type-scale.js +30 -12
  30. package/dist/src/tokens/process/configs/typography.js +30 -12
  31. package/dist/src/tokens/process/configs.js +35 -17
  32. package/dist/src/tokens/process/formats/css/color.js +30 -12
  33. package/dist/src/tokens/process/formats/css/semantic.js +30 -12
  34. package/dist/src/tokens/process/formats/css/size-mode.js +30 -12
  35. package/dist/src/tokens/process/formats/css/size.d.ts +4 -0
  36. package/dist/src/tokens/process/formats/css/size.d.ts.map +1 -1
  37. package/dist/src/tokens/process/formats/css/size.js +32 -13
  38. package/dist/src/tokens/process/formats/css/type-scale.d.ts.map +1 -1
  39. package/dist/src/tokens/process/formats/css/type-scale.js +30 -12
  40. package/dist/src/tokens/process/formats/css/typography.js +32 -14
  41. package/dist/src/tokens/process/formats/css.js +30 -12
  42. package/dist/src/tokens/process/output/declarations.js +41 -23
  43. package/dist/src/tokens/process/output/theme.js +11 -11
  44. package/dist/src/tokens/process/platform.js +35 -17
  45. package/dist/src/tokens/process/utils/getMultidimensionalThemes.js +30 -12
  46. package/dist/src/tokens/types.d.ts +1 -1
  47. package/dist/src/tokens/types.d.ts.map +1 -1
  48. package/package.json +11 -11
@@ -1 +1 @@
1
- {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../../../../src/tokens/create/generators/color.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAS,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAWvD,eAAO,MAAM,mBAAmB,GAAI,WAAW,MAAM,EAAE,aAAa,WAAW,EAAE,QAAQ,MAAM,KAAG,QAYjG,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,aAAa,WAAW,KAAG,QAgB9D,CAAC"}
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../../../../src/tokens/create/generators/color.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAS,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAgBvD,eAAO,MAAM,mBAAmB,GAC9B,WAAW,MAAM,EACjB,aAAa,WAAW,EACxB,QAAQ,MAAM,EACd,YAAY,mBAAmB,KAC9B,QAkDF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,aAAa,WAAW,KAAG,QAgB9D,CAAC"}
@@ -253,6 +253,7 @@ var colorMetadata = {
253
253
  }
254
254
  };
255
255
  var colorMetadataByNumber = R.indexBy((metadata) => metadata.number, Object.values(colorMetadata));
256
+ var colorNames = Object.keys(colorMetadata);
256
257
 
257
258
  // src/colors/theme.ts
258
259
  import chroma2 from "chroma-js";
@@ -333,18 +334,51 @@ var generateColorContrast = (color, type) => {
333
334
  };
334
335
 
335
336
  // src/tokens/create/generators/color.ts
336
- var generateColor = (colorArray) => {
337
+ var generateColor = (colorArray, overrides) => {
337
338
  const obj = {};
338
339
  const $type = "color";
339
340
  for (const index in colorArray) {
340
- obj[Number(index) + 1] = { $type, $value: colorArray[index].hex };
341
+ const position = Number(index) + 1;
342
+ const overrideValue = overrides?.[position];
343
+ obj[position] = {
344
+ $type,
345
+ $value: overrideValue || colorArray[index].hex
346
+ };
341
347
  }
342
348
  return obj;
343
349
  };
344
- var generateColorScheme = (themeName, colorScheme, colors) => {
345
- const main = R3.map((color) => generateColor(generateColorScale(color, colorScheme)), colors.main);
346
- const support = R3.map((color) => generateColor(generateColorScale(color, colorScheme)), colors.support);
347
- const neutral = generateColor(generateColorScale(colors.neutral, colorScheme));
350
+ var generateColorScheme = (themeName, colorScheme, colors, overrides) => {
351
+ const createColorOverrides = (colorName) => {
352
+ if (!overrides?.colors || !(colorName in overrides.colors)) {
353
+ return void 0;
354
+ }
355
+ const colorOverrides = overrides.colors[colorName];
356
+ const positionOverrides = {};
357
+ Object.entries(colorOverrides).forEach(([semanticTokenName, modeOverrides]) => {
358
+ const position = colorMetadata[semanticTokenName].number;
359
+ if (position) {
360
+ let overrideValue;
361
+ if (colorScheme === "light" && modeOverrides.light) {
362
+ overrideValue = modeOverrides.light;
363
+ } else if (colorScheme === "dark" && modeOverrides.dark) {
364
+ overrideValue = modeOverrides.dark;
365
+ }
366
+ if (overrideValue) {
367
+ positionOverrides[position] = overrideValue;
368
+ }
369
+ }
370
+ });
371
+ return Object.keys(positionOverrides).length > 0 ? positionOverrides : void 0;
372
+ };
373
+ const main = R3.mapObjIndexed(
374
+ (color, colorName) => generateColor(generateColorScale(color, colorScheme), createColorOverrides(colorName)),
375
+ colors.main
376
+ );
377
+ const support = R3.mapObjIndexed(
378
+ (color, colorName) => generateColor(generateColorScale(color, colorScheme), createColorOverrides(colorName)),
379
+ colors.support
380
+ );
381
+ const neutral = generateColor(generateColorScale(colors.neutral, colorScheme), createColorOverrides("neutral"));
348
382
  return {
349
383
  [themeName]: {
350
384
  ...main,
@@ -46,11 +46,11 @@ var readFile = async (path2, dry, allowFileNotFound) => {
46
46
  // package.json
47
47
  var package_default = {
48
48
  name: "@digdir/designsystemet",
49
- version: "1.5.1",
49
+ version: "1.6.1",
50
50
  description: "CLI for Designsystemet",
51
51
  author: "Designsystemet team",
52
52
  engines: {
53
- node: ">=22.19.0"
53
+ node: ">=20 <25"
54
54
  },
55
55
  repository: {
56
56
  type: "git",
@@ -98,7 +98,7 @@ var package_default = {
98
98
  "test:tokens-build-config-tailwind": "pnpm run designsystemet tokens build -t ./temp/config/design-tokens -o ./temp/config/build --clean --experimental-tailwind",
99
99
  "test:tokens-create-and-build-options": "pnpm test:tokens-create-options && pnpm test:tokens-build",
100
100
  "test:tokens-create-and-build-config": "pnpm test:tokens-create-config && pnpm test:tokens-build-config",
101
- test: "pnpm test:tokens-create-and-build-options && pnpm test:tokens-create-and-build-config",
101
+ test: "node -v && pnpm test:tokens-create-and-build-options && pnpm test:tokens-create-and-build-config",
102
102
  "digdir:tokens-build": "pnpm run designsystemet tokens build -t ../../internal/design-tokens -o ../../packages/theme/brand --clean --experimental-tailwind",
103
103
  "digdir:tokens-create": "pnpm run designsystemet tokens create --config ./configs/digdir.config.json",
104
104
  "update:template": "tsx ./src/scripts/update-template.ts",
@@ -113,30 +113,30 @@ var package_default = {
113
113
  "change-case": "^5.4.4",
114
114
  "chroma-js": "^3.1.2",
115
115
  "colorjs.io": "^0.6.0-alpha.1",
116
- commander: "^14.0.0",
116
+ commander: "^14.0.1",
117
117
  "fast-glob": "^3.3.3",
118
118
  hsluv: "^1.0.1",
119
119
  "object-hash": "^3.0.0",
120
120
  picocolors: "^1.1.1",
121
121
  postcss: "^8.5.6",
122
122
  ramda: "^0.31.3",
123
- "style-dictionary": "^5.0.4",
124
- zod: "^4.1.5",
125
- "zod-validation-error": "^4.0.1"
123
+ "style-dictionary": "^5.1.0",
124
+ zod: "^4.1.11",
125
+ "zod-validation-error": "^4.0.2"
126
126
  },
127
127
  devDependencies: {
128
128
  "@tokens-studio/types": "0.5.2",
129
129
  "@types/apca-w3": "^0.1.3",
130
130
  "@types/chroma-js": "^3.1.1",
131
131
  "@types/fs-extra": "^11.0.4",
132
- "@types/node": "^22.18.1",
132
+ "@types/node": "^22.18.8",
133
133
  "@types/object-hash": "^3.0.6",
134
134
  "@types/ramda": "^0.31.1",
135
- "fs-extra": "^11.3.1",
135
+ "fs-extra": "^11.3.2",
136
136
  tslib: "^2.8.1",
137
137
  tsup: "^8.5.0",
138
- tsx: "^4.20.5",
139
- typescript: "^5.9.2"
138
+ tsx: "^4.20.6",
139
+ typescript: "^5.9.3"
140
140
  }
141
141
  };
142
142
 
@@ -1248,6 +1248,7 @@ var colorMetadata = {
1248
1248
  }
1249
1249
  };
1250
1250
  var colorMetadataByNumber = R2.indexBy((metadata) => metadata.number, Object.values(colorMetadata));
1251
+ var colorNames = Object.keys(colorMetadata);
1251
1252
 
1252
1253
  // src/colors/theme.ts
1253
1254
  import chroma2 from "chroma-js";
@@ -1328,18 +1329,51 @@ var generateColorContrast = (color, type) => {
1328
1329
  };
1329
1330
 
1330
1331
  // src/tokens/create/generators/color.ts
1331
- var generateColor = (colorArray) => {
1332
+ var generateColor = (colorArray, overrides) => {
1332
1333
  const obj = {};
1333
1334
  const $type = "color";
1334
1335
  for (const index in colorArray) {
1335
- obj[Number(index) + 1] = { $type, $value: colorArray[index].hex };
1336
+ const position = Number(index) + 1;
1337
+ const overrideValue = overrides?.[position];
1338
+ obj[position] = {
1339
+ $type,
1340
+ $value: overrideValue || colorArray[index].hex
1341
+ };
1336
1342
  }
1337
1343
  return obj;
1338
1344
  };
1339
- var generateColorScheme = (themeName, colorScheme, colors) => {
1340
- const main = R4.map((color) => generateColor(generateColorScale(color, colorScheme)), colors.main);
1341
- const support = R4.map((color) => generateColor(generateColorScale(color, colorScheme)), colors.support);
1342
- const neutral = generateColor(generateColorScale(colors.neutral, colorScheme));
1345
+ var generateColorScheme = (themeName, colorScheme, colors, overrides) => {
1346
+ const createColorOverrides = (colorName) => {
1347
+ if (!overrides?.colors || !(colorName in overrides.colors)) {
1348
+ return void 0;
1349
+ }
1350
+ const colorOverrides = overrides.colors[colorName];
1351
+ const positionOverrides = {};
1352
+ Object.entries(colorOverrides).forEach(([semanticTokenName, modeOverrides]) => {
1353
+ const position = colorMetadata[semanticTokenName].number;
1354
+ if (position) {
1355
+ let overrideValue;
1356
+ if (colorScheme === "light" && modeOverrides.light) {
1357
+ overrideValue = modeOverrides.light;
1358
+ } else if (colorScheme === "dark" && modeOverrides.dark) {
1359
+ overrideValue = modeOverrides.dark;
1360
+ }
1361
+ if (overrideValue) {
1362
+ positionOverrides[position] = overrideValue;
1363
+ }
1364
+ }
1365
+ });
1366
+ return Object.keys(positionOverrides).length > 0 ? positionOverrides : void 0;
1367
+ };
1368
+ const main = R4.mapObjIndexed(
1369
+ (color, colorName) => generateColor(generateColorScale(color, colorScheme), createColorOverrides(colorName)),
1370
+ colors.main
1371
+ );
1372
+ const support = R4.mapObjIndexed(
1373
+ (color, colorName) => generateColor(generateColorScale(color, colorScheme), createColorOverrides(colorName)),
1374
+ colors.support
1375
+ );
1376
+ const neutral = generateColor(generateColorScale(colors.neutral, colorScheme), createColorOverrides("neutral"));
1343
1377
  return {
1344
1378
  [themeName]: {
1345
1379
  ...main,
@@ -1804,8 +1838,8 @@ var generateSemantic = (colors) => {
1804
1838
  ["main-color", mainColorNames],
1805
1839
  ["support-color", supportColorNames]
1806
1840
  ];
1807
- for (const [colorCategory, colorNames] of categories) {
1808
- for (const colorName of colorNames) {
1841
+ for (const [colorCategory, colorNames2] of categories) {
1842
+ for (const colorName of colorNames2) {
1809
1843
  const category = colorCategory.replace("-color", "");
1810
1844
  const customColorTokens = {
1811
1845
  color: {
@@ -2061,7 +2095,7 @@ var cliOptions = {
2061
2095
  }
2062
2096
  };
2063
2097
  var createTokens = async (opts) => {
2064
- const { colors, typography, name, borderRadius } = opts;
2098
+ const { colors, typography, name, borderRadius, overrides } = opts;
2065
2099
  const colorSchemes = ["light", "dark"];
2066
2100
  const semantic = generateSemantic(colors);
2067
2101
  const tokenSets = new Map([
@@ -2079,7 +2113,7 @@ var createTokens = async (opts) => {
2079
2113
  [`primitives/modes/typography/secondary/${name}`, generateTypography(name, typography)],
2080
2114
  ...colorSchemes.flatMap((scheme) => [
2081
2115
  [`primitives/modes/color-scheme/${scheme}/global`, generateColorGlobal(scheme)],
2082
- [`primitives/modes/color-scheme/${scheme}/${name}`, generateColorScheme(name, scheme, colors)]
2116
+ [`primitives/modes/color-scheme/${scheme}/${name}`, generateColorScheme(name, scheme, colors, overrides)]
2083
2117
  ]),
2084
2118
  [`themes/${name}`, generateTheme(colors, name, borderRadius)],
2085
2119
  ["semantic/color", semantic.color],
@@ -1582,6 +1582,7 @@ var colorMetadata = {
1582
1582
  }
1583
1583
  };
1584
1584
  var colorMetadataByNumber = R2.indexBy((metadata) => metadata.number, Object.values(colorMetadata));
1585
+ var colorNames = Object.keys(colorMetadata);
1585
1586
 
1586
1587
  // src/colors/theme.ts
1587
1588
  import chroma2 from "chroma-js";
@@ -1662,18 +1663,51 @@ var generateColorContrast = (color, type) => {
1662
1663
  };
1663
1664
 
1664
1665
  // src/tokens/create/generators/color.ts
1665
- var generateColor = (colorArray) => {
1666
+ var generateColor = (colorArray, overrides) => {
1666
1667
  const obj = {};
1667
1668
  const $type = "color";
1668
1669
  for (const index in colorArray) {
1669
- obj[Number(index) + 1] = { $type, $value: colorArray[index].hex };
1670
+ const position = Number(index) + 1;
1671
+ const overrideValue = overrides?.[position];
1672
+ obj[position] = {
1673
+ $type,
1674
+ $value: overrideValue || colorArray[index].hex
1675
+ };
1670
1676
  }
1671
1677
  return obj;
1672
1678
  };
1673
- var generateColorScheme = (themeName, colorScheme2, colors) => {
1674
- const main = R4.map((color) => generateColor(generateColorScale(color, colorScheme2)), colors.main);
1675
- const support = R4.map((color) => generateColor(generateColorScale(color, colorScheme2)), colors.support);
1676
- const neutral = generateColor(generateColorScale(colors.neutral, colorScheme2));
1679
+ var generateColorScheme = (themeName, colorScheme2, colors, overrides) => {
1680
+ const createColorOverrides = (colorName) => {
1681
+ if (!overrides?.colors || !(colorName in overrides.colors)) {
1682
+ return void 0;
1683
+ }
1684
+ const colorOverrides = overrides.colors[colorName];
1685
+ const positionOverrides = {};
1686
+ Object.entries(colorOverrides).forEach(([semanticTokenName, modeOverrides]) => {
1687
+ const position = colorMetadata[semanticTokenName].number;
1688
+ if (position) {
1689
+ let overrideValue;
1690
+ if (colorScheme2 === "light" && modeOverrides.light) {
1691
+ overrideValue = modeOverrides.light;
1692
+ } else if (colorScheme2 === "dark" && modeOverrides.dark) {
1693
+ overrideValue = modeOverrides.dark;
1694
+ }
1695
+ if (overrideValue) {
1696
+ positionOverrides[position] = overrideValue;
1697
+ }
1698
+ }
1699
+ });
1700
+ return Object.keys(positionOverrides).length > 0 ? positionOverrides : void 0;
1701
+ };
1702
+ const main = R4.mapObjIndexed(
1703
+ (color, colorName) => generateColor(generateColorScale(color, colorScheme2), createColorOverrides(colorName)),
1704
+ colors.main
1705
+ );
1706
+ const support = R4.mapObjIndexed(
1707
+ (color, colorName) => generateColor(generateColorScale(color, colorScheme2), createColorOverrides(colorName)),
1708
+ colors.support
1709
+ );
1710
+ const neutral = generateColor(generateColorScale(colors.neutral, colorScheme2), createColorOverrides("neutral"));
1677
1711
  return {
1678
1712
  [themeName]: {
1679
1713
  ...main,
@@ -2138,8 +2172,8 @@ var generateSemantic = (colors) => {
2138
2172
  ["main-color", mainColorNames],
2139
2173
  ["support-color", supportColorNames]
2140
2174
  ];
2141
- for (const [colorCategory2, colorNames] of categories) {
2142
- for (const colorName of colorNames) {
2175
+ for (const [colorCategory2, colorNames2] of categories) {
2176
+ for (const colorName of colorNames2) {
2143
2177
  const category = colorCategory2.replace("-color", "");
2144
2178
  const customColorTokens = {
2145
2179
  color: {
@@ -2379,7 +2413,7 @@ var generateTypography = (themeName, { fontFamily }) => {
2379
2413
 
2380
2414
  // src/tokens/create.ts
2381
2415
  var createTokens = async (opts) => {
2382
- const { colors, typography: typography2, name, borderRadius } = opts;
2416
+ const { colors, typography: typography2, name, borderRadius, overrides } = opts;
2383
2417
  const colorSchemes = ["light", "dark"];
2384
2418
  const semantic2 = generateSemantic(colors);
2385
2419
  const tokenSets = new Map([
@@ -2397,7 +2431,7 @@ var createTokens = async (opts) => {
2397
2431
  [`primitives/modes/typography/secondary/${name}`, generateTypography(name, typography2)],
2398
2432
  ...colorSchemes.flatMap((scheme) => [
2399
2433
  [`primitives/modes/color-scheme/${scheme}/global`, generateColorGlobal(scheme)],
2400
- [`primitives/modes/color-scheme/${scheme}/${name}`, generateColorScheme(name, scheme, colors)]
2434
+ [`primitives/modes/color-scheme/${scheme}/${name}`, generateColorScheme(name, scheme, colors, overrides)]
2401
2435
  ]),
2402
2436
  [`themes/${name}`, generateTheme(colors, name, borderRadius)],
2403
2437
  ["semantic/color", semantic2.color],
@@ -2417,11 +2451,11 @@ import * as R8 from "ramda";
2417
2451
  // package.json
2418
2452
  var package_default = {
2419
2453
  name: "@digdir/designsystemet",
2420
- version: "1.5.1",
2454
+ version: "1.6.1",
2421
2455
  description: "CLI for Designsystemet",
2422
2456
  author: "Designsystemet team",
2423
2457
  engines: {
2424
- node: ">=22.19.0"
2458
+ node: ">=20 <25"
2425
2459
  },
2426
2460
  repository: {
2427
2461
  type: "git",
@@ -2469,7 +2503,7 @@ var package_default = {
2469
2503
  "test:tokens-build-config-tailwind": "pnpm run designsystemet tokens build -t ./temp/config/design-tokens -o ./temp/config/build --clean --experimental-tailwind",
2470
2504
  "test:tokens-create-and-build-options": "pnpm test:tokens-create-options && pnpm test:tokens-build",
2471
2505
  "test:tokens-create-and-build-config": "pnpm test:tokens-create-config && pnpm test:tokens-build-config",
2472
- test: "pnpm test:tokens-create-and-build-options && pnpm test:tokens-create-and-build-config",
2506
+ test: "node -v && pnpm test:tokens-create-and-build-options && pnpm test:tokens-create-and-build-config",
2473
2507
  "digdir:tokens-build": "pnpm run designsystemet tokens build -t ../../internal/design-tokens -o ../../packages/theme/brand --clean --experimental-tailwind",
2474
2508
  "digdir:tokens-create": "pnpm run designsystemet tokens create --config ./configs/digdir.config.json",
2475
2509
  "update:template": "tsx ./src/scripts/update-template.ts",
@@ -2484,30 +2518,30 @@ var package_default = {
2484
2518
  "change-case": "^5.4.4",
2485
2519
  "chroma-js": "^3.1.2",
2486
2520
  "colorjs.io": "^0.6.0-alpha.1",
2487
- commander: "^14.0.0",
2521
+ commander: "^14.0.1",
2488
2522
  "fast-glob": "^3.3.3",
2489
2523
  hsluv: "^1.0.1",
2490
2524
  "object-hash": "^3.0.0",
2491
2525
  picocolors: "^1.1.1",
2492
2526
  postcss: "^8.5.6",
2493
2527
  ramda: "^0.31.3",
2494
- "style-dictionary": "^5.0.4",
2495
- zod: "^4.1.5",
2496
- "zod-validation-error": "^4.0.1"
2528
+ "style-dictionary": "^5.1.0",
2529
+ zod: "^4.1.11",
2530
+ "zod-validation-error": "^4.0.2"
2497
2531
  },
2498
2532
  devDependencies: {
2499
2533
  "@tokens-studio/types": "0.5.2",
2500
2534
  "@types/apca-w3": "^0.1.3",
2501
2535
  "@types/chroma-js": "^3.1.1",
2502
2536
  "@types/fs-extra": "^11.0.4",
2503
- "@types/node": "^22.18.1",
2537
+ "@types/node": "^22.18.8",
2504
2538
  "@types/object-hash": "^3.0.6",
2505
2539
  "@types/ramda": "^0.31.1",
2506
- "fs-extra": "^11.3.1",
2540
+ "fs-extra": "^11.3.2",
2507
2541
  tslib: "^2.8.1",
2508
2542
  tsup: "^8.5.0",
2509
- tsx: "^4.20.5",
2510
- typescript: "^5.9.2"
2543
+ tsx: "^4.20.6",
2544
+ typescript: "^5.9.3"
2511
2545
  }
2512
2546
  };
2513
2547
 
@@ -2566,11 +2600,11 @@ function isColorCategoryToken(token, category) {
2566
2600
  var isDigit = (s) => /^\d+$/.test(s);
2567
2601
  function traverseObj(obj, fn) {
2568
2602
  for (const key in obj) {
2569
- const prop4 = obj[key];
2570
- if (prop4 != null) {
2571
- fn.apply(null, [obj, key, prop4]);
2572
- if (typeof prop4 === "object") {
2573
- traverseObj(prop4, fn);
2603
+ const prop3 = obj[key];
2604
+ if (prop3 != null) {
2605
+ fn.apply(null, [obj, key, prop3]);
2606
+ if (typeof prop3 === "object") {
2607
+ traverseObj(prop3, fn);
2574
2608
  }
2575
2609
  }
2576
2610
  }
@@ -3101,13 +3135,33 @@ ${content}
3101
3135
  // src/tokens/process/formats/css/type-scale.ts
3102
3136
  import * as R15 from "ramda";
3103
3137
  import { createPropertyFormatter as createPropertyFormatter6 } from "style-dictionary/utils";
3104
- var typographyFontFamilyPredicate2 = R15.allPass([
3138
+ var isTypographyFontFamilyToken = R15.allPass([
3105
3139
  R15.pathSatisfies(R15.includes("typography"), ["path"]),
3106
3140
  R15.pathSatisfies(R15.includes("fontFamily"), ["path"])
3107
3141
  ]);
3108
- function formatTypographySizeToken(token) {
3109
- return { ...token, $value: `calc(${token.$value} * var(--_ds-font-size-factor))` };
3110
- }
3142
+ var formatTypographySizeToken = (format, token) => {
3143
+ const [name, value] = format(token).replace(/;$/, "").split(": ");
3144
+ let calc;
3145
+ let round;
3146
+ if (R15.startsWith(["font-size"], token.path)) {
3147
+ calc = `calc(${value} * var(--_ds-font-size-factor))`;
3148
+ round = `round(${calc}, 1px)`;
3149
+ } else {
3150
+ calc = value;
3151
+ }
3152
+ return { name, calc, round: round ?? calc };
3153
+ };
3154
+ var formatTypographySizeTokens = (format, tokens) => R15.reduce(
3155
+ (acc, token) => {
3156
+ const { name, calc, round } = formatTypographySizeToken(format, token);
3157
+ acc.tokens.push(token);
3158
+ acc.calc.push(`${name}: ${calc};`);
3159
+ acc.round.push(`${name}: ${round};`);
3160
+ return acc;
3161
+ },
3162
+ { tokens: [], calc: [], round: [] },
3163
+ tokens
3164
+ );
3111
3165
  var typeScale = {
3112
3166
  name: "ds/css-type-scale",
3113
3167
  format: async ({ dictionary, file, options, platform }) => {
@@ -3120,18 +3174,16 @@ var typeScale = {
3120
3174
  format: "css",
3121
3175
  usesDtcg
3122
3176
  });
3123
- const filteredTokens = R15.reject(typographyFontFamilyPredicate2, dictionary.allTokens);
3124
- const tokens = R15.map(formatTypographySizeToken, filteredTokens);
3125
- const formattedMap = tokens.map((token) => ({
3126
- token,
3127
- formatted: format(token)
3177
+ const filteredTokens = R15.reject(R15.anyPass([isTypographyFontFamilyToken]), dictionary.allTokens);
3178
+ const formattedTokens = formatTypographySizeTokens(format, filteredTokens);
3179
+ const formattedMap = formattedTokens.round.map((t, i) => ({
3180
+ token: formattedTokens.tokens[i],
3181
+ formatted: t
3128
3182
  }));
3129
3183
  buildOptions.buildTokenFormats[destination] = formattedMap;
3130
- const formattedTokens = formattedMap.map(R15.prop("formatted")).join("\n");
3131
3184
  const sizeFactor = ` --_ds-font-size-factor: calc(var(--ds-size-mode-font-size) / (var(--ds-size-base) / ${basePxFontSize}));`;
3132
3185
  const content = `${selector} {
3133
- ${sizeFactor}
3134
- ${formattedTokens}
3186
+ ${sizeFactor}${sizingTemplate(formattedTokens)}
3135
3187
  }`;
3136
3188
  const body = R15.isNotNil(layer) ? `@layer ${layer} {
3137
3189
  ${content}