@digdir/designsystemet 0.0.0-next-20250710132619 → 0.0.0-react-side-effects-20260113071010

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 (122) hide show
  1. package/README.md +10 -2
  2. package/configs/test-tokens.config.json +38 -1
  3. package/dist/bin/config.js +55 -30
  4. package/dist/bin/designsystemet.d.ts +1 -1
  5. package/dist/bin/designsystemet.d.ts.map +1 -1
  6. package/dist/bin/designsystemet.js +1062 -658
  7. package/dist/color.base.template-Z7YWN2TF.json +22 -0
  8. package/dist/config.schema.json +139 -25
  9. package/dist/global-Y35YADVH.json +100 -0
  10. package/dist/src/colors/colorMetadata.d.ts +3 -0
  11. package/dist/src/colors/colorMetadata.d.ts.map +1 -1
  12. package/dist/src/colors/colorMetadata.js +10 -5
  13. package/dist/src/colors/index.js +11 -17
  14. package/dist/src/colors/theme.d.ts.map +1 -1
  15. package/dist/src/colors/theme.js +15 -18
  16. package/dist/src/colors/types.d.ts +1 -1
  17. package/dist/src/colors/types.d.ts.map +1 -1
  18. package/dist/src/config.d.ts +131 -1
  19. package/dist/src/config.d.ts.map +1 -1
  20. package/dist/src/config.js +47 -22
  21. package/dist/src/index.d.ts +1 -0
  22. package/dist/src/index.d.ts.map +1 -1
  23. package/dist/src/index.js +801 -584
  24. package/dist/src/migrations/beta-to-v1.js +5 -5
  25. package/dist/src/migrations/codemods/css/plugins.js +3 -3
  26. package/dist/src/migrations/codemods/css/run.js +2 -2
  27. package/dist/src/migrations/color-rename-next49.js +5 -5
  28. package/dist/src/migrations/index.js +5 -5
  29. package/dist/src/scripts/createJsonSchema.js +43 -18
  30. package/dist/src/scripts/update-preview-tokens.js +593 -459
  31. package/dist/src/scripts/update-template.d.ts.map +1 -1
  32. package/dist/src/scripts/update-template.js +406 -247
  33. package/dist/src/tokens/build.js +585 -235
  34. package/dist/src/tokens/create/defaults.js +27 -23
  35. package/dist/src/tokens/create/generators/$designsystemet.js +24 -28
  36. package/dist/src/tokens/create/generators/$metadata.d.ts.map +1 -1
  37. package/dist/src/tokens/create/generators/$metadata.js +1 -4
  38. package/dist/src/tokens/create/generators/$themes.js +0 -1
  39. package/dist/src/tokens/create/generators/color.d.ts +2 -2
  40. package/dist/src/tokens/create/generators/color.d.ts.map +1 -1
  41. package/dist/src/tokens/create/generators/color.js +77 -29
  42. package/dist/src/tokens/create/generators/semantic.d.ts +1 -265
  43. package/dist/src/tokens/create/generators/semantic.d.ts.map +1 -1
  44. package/dist/src/tokens/create/generators/semantic.js +263 -272
  45. package/dist/src/tokens/create/generators/theme.d.ts.map +1 -1
  46. package/dist/src/tokens/create/generators/theme.js +275 -5
  47. package/dist/src/tokens/create/write.d.ts.map +1 -1
  48. package/dist/src/tokens/create/write.js +35 -45
  49. package/dist/src/tokens/create.d.ts.map +1 -1
  50. package/dist/src/tokens/create.js +133 -328
  51. package/dist/src/tokens/format.js +690 -546
  52. package/dist/src/tokens/generate-config.d.ts +11 -0
  53. package/dist/src/tokens/generate-config.d.ts.map +1 -0
  54. package/dist/src/tokens/generate-config.js +202 -0
  55. package/dist/src/tokens/index.js +690 -546
  56. package/dist/src/tokens/process/configs/color.js +387 -70
  57. package/dist/src/tokens/process/configs/semantic.d.ts.map +1 -1
  58. package/dist/src/tokens/process/configs/semantic.js +389 -72
  59. package/dist/src/tokens/process/configs/shared.js +11 -4
  60. package/dist/src/tokens/process/configs/size-mode.d.ts +3 -0
  61. package/dist/src/tokens/process/configs/size-mode.d.ts.map +1 -0
  62. package/dist/src/tokens/process/configs/size-mode.js +1084 -0
  63. package/dist/src/tokens/process/configs/size.d.ts +3 -0
  64. package/dist/src/tokens/process/configs/size.d.ts.map +1 -0
  65. package/dist/src/tokens/process/configs/size.js +1086 -0
  66. package/dist/src/tokens/process/configs/type-scale.d.ts +3 -0
  67. package/dist/src/tokens/process/configs/type-scale.d.ts.map +1 -0
  68. package/dist/src/tokens/process/configs/type-scale.js +1084 -0
  69. package/dist/src/tokens/process/configs/typography.d.ts.map +1 -1
  70. package/dist/src/tokens/process/configs/typography.js +385 -68
  71. package/dist/src/tokens/process/configs.d.ts +3 -0
  72. package/dist/src/tokens/process/configs.d.ts.map +1 -1
  73. package/dist/src/tokens/process/configs.js +396 -77
  74. package/dist/src/tokens/process/formats/css/color.js +402 -83
  75. package/dist/src/tokens/process/formats/css/semantic.d.ts +0 -14
  76. package/dist/src/tokens/process/formats/css/semantic.d.ts.map +1 -1
  77. package/dist/src/tokens/process/formats/css/semantic.js +428 -113
  78. package/dist/src/tokens/process/formats/css/size-mode.d.ts +4 -0
  79. package/dist/src/tokens/process/formats/css/size-mode.d.ts.map +1 -0
  80. package/dist/src/tokens/process/formats/css/size-mode.js +1085 -0
  81. package/dist/src/tokens/process/formats/css/size.d.ts +21 -0
  82. package/dist/src/tokens/process/formats/css/size.d.ts.map +1 -0
  83. package/dist/src/tokens/process/formats/css/size.js +1087 -0
  84. package/dist/src/tokens/process/formats/css/type-scale.d.ts +3 -0
  85. package/dist/src/tokens/process/formats/css/type-scale.d.ts.map +1 -0
  86. package/dist/src/tokens/process/formats/css/type-scale.js +1086 -0
  87. package/dist/src/tokens/process/formats/css/typography.js +386 -67
  88. package/dist/src/tokens/process/formats/css.d.ts +3 -0
  89. package/dist/src/tokens/process/formats/css.d.ts.map +1 -1
  90. package/dist/src/tokens/process/formats/css.js +385 -68
  91. package/dist/src/tokens/process/output/declarations.d.ts +1 -0
  92. package/dist/src/tokens/process/output/declarations.d.ts.map +1 -1
  93. package/dist/src/tokens/process/output/declarations.js +504 -80
  94. package/dist/src/tokens/process/output/theme.d.ts.map +1 -1
  95. package/dist/src/tokens/process/output/theme.js +84 -39
  96. package/dist/src/tokens/process/platform.d.ts +16 -0
  97. package/dist/src/tokens/process/platform.d.ts.map +1 -1
  98. package/dist/src/tokens/process/platform.js +431 -107
  99. package/dist/src/tokens/process/transformers.js +11 -4
  100. package/dist/src/tokens/process/utils/getMultidimensionalThemes.d.ts.map +1 -1
  101. package/dist/src/tokens/process/utils/getMultidimensionalThemes.js +401 -77
  102. package/dist/src/tokens/process/utils/kebab-case.d.ts +5 -0
  103. package/dist/src/tokens/process/utils/kebab-case.d.ts.map +1 -0
  104. package/dist/src/tokens/process/utils/kebab-case.js +7 -0
  105. package/dist/src/tokens/template/design-tokens/primitives/modes/size/global.js +1 -1
  106. package/dist/src/tokens/template/design-tokens/semantic/color.base.template.js +1 -1
  107. package/dist/src/tokens/types.d.ts +1 -1
  108. package/dist/src/tokens/types.d.ts.map +1 -1
  109. package/dist/src/tokens/utils.d.ts +4 -1
  110. package/dist/src/tokens/utils.d.ts.map +1 -1
  111. package/dist/src/tokens/utils.js +24 -1
  112. package/dist/src/types.d.ts +6 -0
  113. package/dist/src/types.d.ts.map +1 -0
  114. package/dist/src/types.js +6 -0
  115. package/dist/src/utils.js +10 -10
  116. package/package.json +24 -28
  117. package/configs/digdir.config.json +0 -59
  118. package/dist/color.base.template-M7BHS4OV.json +0 -286
  119. package/dist/global-XVXVBKM6.json +0 -96
  120. package/dist/src/scripts/update-design-tokens.d.ts +0 -2
  121. package/dist/src/scripts/update-design-tokens.d.ts.map +0 -1
  122. package/dist/src/scripts/update-design-tokens.js +0 -37
package/README.md CHANGED
@@ -26,7 +26,7 @@ If a [config file](#using-a-config-file) you can also re-run with `"clean": true
26
26
  > ⚠️ **WARNING** ⚠️
27
27
  > The design tokens created by this tool are considered an implementation detail, and is subject
28
28
  > to change at any time without being considered a breaking change. We **only** support customisations
29
- > done through the CLI options. Direct editing of the design tokens are **not** supported.
29
+ > done through the CLI options and config. Direct editing of the design tokens are **not** supported.
30
30
  >
31
31
  > Since tokens may be added or removed at any time, it is necessary to routinely re-run this
32
32
  > command when upgrading the libraries. This will remove any direct edits to the design tokens.
@@ -49,7 +49,7 @@ Whenever a new version of the CLI is released, or you have done changes, we reco
49
49
  ### Using a config file
50
50
 
51
51
  > ⚠️ **WARNING** ⚠️
52
- > This feature is experimental. The config schema may change at any time.
52
+ > The typography feature is experimental. The config schema may change at any time.
53
53
 
54
54
 
55
55
  The `tokens create` command supports a config file. It will auto-detect a `designsystemet.config.json` file in the current directory. You can also use the `--config <path>` option to supply a different config name and location.
@@ -105,3 +105,11 @@ npx @digdir/designsystemet tokens build
105
105
  #### Complex config example
106
106
 
107
107
  Have a look at the `*.config.json` files under the `packages/cli` in the Github repo for more complex examples.
108
+
109
+ #### Create config from existing tokens
110
+
111
+ You can get a minimal config file, meaning without overrides, generated from existing design tokens using the following command:
112
+
113
+ ```sh
114
+ npx @digdir/designsystemet generate-config-from-tokens --dir <path to design tokens>
115
+ ```
@@ -20,7 +20,44 @@
20
20
  "typography": {
21
21
  "fontFamily": "Inter"
22
22
  },
23
- "borderRadius": 8
23
+ "borderRadius": 8,
24
+ "overrides": {
25
+ "colors": {
26
+ "dominant": {
27
+ "background-default": {
28
+ "light": "#ff0000",
29
+ "dark": "#000fff"
30
+ },
31
+ "background-tinted": {
32
+ "light": "#f0ff00",
33
+ "dark": "#ff00ff"
34
+ }
35
+ },
36
+ "danger": {
37
+ "background-default": {
38
+ "light": "#0000ff",
39
+ "dark": "#0000ff"
40
+ }
41
+ }
42
+ },
43
+ "severity": {
44
+ "danger": "#ff00ff"
45
+ },
46
+ "linkVisited": {
47
+ "light": "#ff1234",
48
+ "dark": "#1234ff"
49
+ },
50
+ "focus": {
51
+ "inner": {
52
+ "light": "#00ff00",
53
+ "dark": "#00ffff"
54
+ },
55
+ "outer": {
56
+ "light": "#ffff00",
57
+ "dark": "#ff00aa"
58
+ }
59
+ }
60
+ }
24
61
  },
25
62
  "other-org": {
26
63
  "colors": {
@@ -1,16 +1,22 @@
1
1
  // bin/config.ts
2
2
  import path2 from "path";
3
- import chalk3 from "chalk";
3
+ import pc3 from "picocolors";
4
4
  import * as R8 from "ramda";
5
5
 
6
6
  // src/config.ts
7
- import chalk from "chalk";
7
+ import pc from "picocolors";
8
8
  import * as R7 from "ramda";
9
- import { z } from "zod/v4";
10
- import { fromError } from "zod-validation-error/v4";
9
+ import { z } from "zod";
10
+ import { fromError } from "zod-validation-error";
11
11
 
12
12
  // src/colors/colorMetadata.ts
13
13
  import * as R from "ramda";
14
+ var baseColors = {
15
+ info: "#0A71C0",
16
+ success: "#068718",
17
+ warning: "#EA9B1B",
18
+ danger: "#C01B1B"
19
+ };
14
20
  var colorMetadata = {
15
21
  "background-default": {
16
22
  number: 1,
@@ -254,6 +260,8 @@ var colorMetadata = {
254
260
  }
255
261
  };
256
262
  var colorMetadataByNumber = R.indexBy((metadata) => metadata.number, Object.values(colorMetadata));
263
+ var colorNames = Object.keys(colorMetadata);
264
+ var baseColorNames = Object.keys(baseColors);
257
265
 
258
266
  // src/colors/theme.ts
259
267
  import chroma2 from "chroma-js";
@@ -274,18 +282,7 @@ var convertToHex = (color) => {
274
282
  };
275
283
 
276
284
  // src/colors/theme.ts
277
- var RESERVED_COLORS = [
278
- "neutral",
279
- "success",
280
- "warning",
281
- "danger",
282
- "info",
283
- "blue",
284
- "green",
285
- "orange",
286
- "purple",
287
- "red"
288
- ];
285
+ var RESERVED_COLORS = ["neutral", "success", "warning", "danger", "info"];
289
286
 
290
287
  // src/tokens/create/defaults.ts
291
288
  import * as R3 from "ramda";
@@ -334,12 +331,12 @@ function makeFriendlyError(err) {
334
331
  const optionName = mapPathToOptionName(issue.path);
335
332
  const errorCode = `(error code: ${issue.code})`;
336
333
  const optionMessage = optionName ? ` or CLI option --${optionName}` : "";
337
- return ` - Error in JSON value ${chalk.red(issuePath)}${optionMessage}:
338
- ${issue.message} ${chalk.dim(errorCode)}`;
334
+ return ` - Error in JSON value ${pc.red(issuePath)}${optionMessage}:
335
+ ${issue.message} ${pc.dim(errorCode)}`;
339
336
  }).join("\n")
340
337
  });
341
338
  } catch (_err2) {
342
- console.error(chalk.red(err instanceof Error ? err.message : "Unknown error occurred while parsing config file"));
339
+ console.error(pc.red(err instanceof Error ? err.message : "Unknown error occurred while parsing config file"));
343
340
  console.error(err instanceof Error ? err.stack : "No stack trace available");
344
341
  }
345
342
  }
@@ -347,7 +344,7 @@ function validateConfig(schema, unvalidatedConfig, configPath) {
347
344
  try {
348
345
  return schema.parse(unvalidatedConfig);
349
346
  } catch (err) {
350
- console.error(chalk.redBright(`Invalid config file at ${chalk.red(configPath)}`));
347
+ console.error(pc.redBright(`Invalid config file at ${pc.red(configPath)}`));
351
348
  const validationError = makeFriendlyError(err);
352
349
  console.error(validationError?.toString());
353
350
  process.exit(1);
@@ -360,7 +357,7 @@ function parseConfig(configFile, configPath) {
360
357
  try {
361
358
  return JSON.parse(configFile);
362
359
  } catch (err) {
363
- console.error(chalk.redBright(`Failed parsing config file at ${chalk.red(configPath)}`));
360
+ console.error(pc.redBright(`Failed parsing config file at ${pc.red(configPath)}`));
364
361
  const validationError = makeFriendlyError(err);
365
362
  console.error(validationError?.toString());
366
363
  process.exit(1);
@@ -389,16 +386,44 @@ var colorCategorySchema = z.record(
389
386
  ).refine((colors) => !Object.keys(colors).some((key) => RESERVED_COLORS.includes(key.toLowerCase())), {
390
387
  error: `Color names cannot include reserved names: ${RESERVED_COLORS.join(", ")}`
391
388
  }).describe("An object with one or more color definitions. The property name is used as the color name.");
389
+ var colorModeOverrideSchema = z.object({
390
+ light: colorSchema.optional().describe("A hex color that overrides light mode"),
391
+ dark: colorSchema.optional().describe("A hex color that overrides dark mode")
392
+ }).describe('Override values for semantic color tokens like "background-subtle", "border-default", etc.');
393
+ var colorWeightOverrideSchema = z.partialRecord(z.enum([...colorNames]), colorModeOverrideSchema).describe('The name of the color to add overrides for, e.g. "accent"');
394
+ var semanticColorOverrideSchema = z.record(z.string(), colorWeightOverrideSchema).describe("An object with color names as keys");
395
+ var severityColorOverrideSchema = z.partialRecord(z.enum(baseColorNames), colorSchema.describe("A hex color, which is used for creating a color scale")).optional().describe("An object with severity color names as keys");
396
+ var linkVisitedOverrideSchema = z.object({
397
+ light: colorSchema.optional().describe("A hex color that overrides light mode"),
398
+ dark: colorSchema.optional().describe("A hex color that overrides dark mode")
399
+ }).describe('Overrides for the "link-visited" color');
400
+ var focusOverrideSchema = z.object({
401
+ inner: z.object({
402
+ light: colorSchema.optional().describe("A hex color that overrides light mode"),
403
+ dark: colorSchema.optional().describe("A hex color that overrides dark mode")
404
+ }).optional().describe('Overrides for the "focus-inner" color'),
405
+ outer: z.object({
406
+ light: colorSchema.optional().describe("A hex color that overrides light mode"),
407
+ dark: colorSchema.optional().describe("A hex color that overrides dark mode")
408
+ }).optional().describe('Overrides for the "focus-outer" color')
409
+ }).describe("Overrides for the focus colors");
410
+ var overridesSchema = z.object({
411
+ colors: semanticColorOverrideSchema.optional(),
412
+ severity: severityColorOverrideSchema.optional(),
413
+ linkVisited: linkVisitedOverrideSchema.optional(),
414
+ focus: focusOverrideSchema.optional()
415
+ }).describe("Overrides for generated design tokens. Currently only supports colors defined in your theme").optional();
392
416
  var themeSchema = z.object({
393
417
  colors: z.object({
394
418
  main: colorCategorySchema,
395
419
  support: colorCategorySchema.optional().default({}),
396
- neutral: colorSchema
420
+ neutral: colorSchema.describe("A hex color, which is used for creating a color scale.")
397
421
  }).meta({ description: "Defines the colors for this theme" }),
398
422
  typography: z.object({
399
423
  fontFamily: z.string().meta({ description: "Sets the font-family for this theme" })
400
424
  }).describe("Defines the typography for a given theme").optional(),
401
- borderRadius: z.number().meta({ description: "Defines the border-radius for this theme" }).optional()
425
+ borderRadius: z.number().meta({ description: "Defines the border-radius for this theme" }).optional(),
426
+ overrides: overridesSchema
402
427
  }).meta({ description: "An object defining a theme. The property name holding the object becomes the theme name." });
403
428
  var commonConfig = z.object({
404
429
  clean: z.boolean().meta({ description: "Delete the output directory before building or creating tokens" }).optional()
@@ -413,10 +438,10 @@ var configFileCreateSchema = _configFileCreateSchema.extend(commonConfig.shape);
413
438
 
414
439
  // src/utils.ts
415
440
  import fs from "fs/promises";
416
- import chalk2 from "chalk";
441
+ import pc2 from "picocolors";
417
442
  var readFile = async (path3, dry, allowFileNotFound) => {
418
443
  if (dry) {
419
- console.log(`${chalk2.blue("readFile")} ${path3}`);
444
+ console.log(`${pc2.blue("readFile")} ${path3}`);
420
445
  return Promise.resolve("");
421
446
  }
422
447
  try {
@@ -450,11 +475,11 @@ async function readConfigFile(configPath, allowFileNotFound = true) {
450
475
  if (allowFileNotFound) {
451
476
  return "";
452
477
  }
453
- console.error(chalk3.redBright(`Could not read config file at ${chalk3.blue(resolvedPath)}`));
478
+ console.error(pc3.redBright(`Could not read config file at ${pc3.blue(resolvedPath)}`));
454
479
  throw err;
455
480
  }
456
481
  if (configFile) {
457
- console.log(`Found config file: ${chalk3.green(resolvedPath)}`);
482
+ console.log(`Found config file: ${pc3.green(resolvedPath)}`);
458
483
  }
459
484
  return configFile;
460
485
  }
@@ -465,11 +490,11 @@ async function parseCreateConfig(configFile, options) {
465
490
  (x) => /* @__PURE__ */ new Set([...R8.keys(x.colors.main), ...R8.keys(x.colors.support)])
466
491
  );
467
492
  if (!R8.all(R8.equals(R8.__, themeColors[0]), themeColors)) {
468
- console.error(chalk3.redBright(`In config, all themes must have the same custom color names, but we found:`));
493
+ console.error(pc3.redBright(`In config, all themes must have the same custom color names, but we found:`));
469
494
  const themeNames = R8.keys(configParsed.themes ?? {});
470
495
  themeColors.forEach((colors, index) => {
471
- const colorNames = Array.from(colors);
472
- console.log(` - ${themeNames[index]}: ${colorNames.join(", ")}`);
496
+ const colorNames2 = Array.from(colors);
497
+ console.log(` - ${themeNames[index]}: ${colorNames2.join(", ")}`);
473
498
  });
474
499
  console.log();
475
500
  process.exit(1);
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- export {};
2
+ export declare const figletAscii = "\n _____ _ _ _\n| __ \\ (_) | | | |\n| | | | ___ ___ _ __ _ _ __ ___ _ _ ___| |_ ___ _ __ ___ ___| |_\n| | | |/ _ \\/ __| |/ _` | '_ \\/ __| | | / __| __/ _ \\ '_ ` _ \\ / _ \\ __|\n| |__| | __/\\__ \\ | (_| | | | \\__ \\ |_| \\__ \\ || __/ | | | | | __/ |_\n|_____/ \\___||___/_|\\__, |_| |_|___/\\__, |___/\\__\\___|_| |_| |_|\\___|\\__|\n __/ | __/ |\n |___/ |___/\n";
3
3
  //# sourceMappingURL=designsystemet.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"designsystemet.d.ts","sourceRoot":"","sources":["../../bin/designsystemet.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"designsystemet.d.ts","sourceRoot":"","sources":["../../bin/designsystemet.ts"],"names":[],"mappings":";AAeA,eAAO,MAAM,WAAW,4iBASvB,CAAC"}