@navecss/tokens 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.
Files changed (121) hide show
  1. package/LICENSE +55 -0
  2. package/README.md +122 -0
  3. package/TOKENS.md +180 -0
  4. package/dist/breakpoints.d.ts +25 -0
  5. package/dist/breakpoints.js +44 -0
  6. package/dist/build-record.json +77 -0
  7. package/dist/core-contract.json +30 -0
  8. package/dist/lib/bin.d.ts +2 -0
  9. package/dist/lib/bin.js +113 -0
  10. package/dist/lib/builder.d.ts +21 -0
  11. package/dist/lib/builder.js +41 -0
  12. package/dist/lib/collision.d.ts +12 -0
  13. package/dist/lib/collision.js +46 -0
  14. package/dist/lib/composite-value.d.ts +3 -0
  15. package/dist/lib/composite-value.js +152 -0
  16. package/dist/lib/core-version.d.ts +12 -0
  17. package/dist/lib/core-version.js +40 -0
  18. package/dist/lib/dtcg-descriptions.d.ts +2 -0
  19. package/dist/lib/dtcg-descriptions.js +23 -0
  20. package/dist/lib/dtcg-malformed.d.ts +10 -0
  21. package/dist/lib/dtcg-malformed.js +56 -0
  22. package/dist/lib/dtcg-outputs.d.ts +2 -0
  23. package/dist/lib/dtcg-outputs.js +32 -0
  24. package/dist/lib/dtcg-shape.d.ts +13 -0
  25. package/dist/lib/dtcg-shape.js +113 -0
  26. package/dist/lib/errors.d.ts +23 -0
  27. package/dist/lib/errors.js +34 -0
  28. package/dist/lib/facade.d.ts +26 -0
  29. package/dist/lib/facade.js +97 -0
  30. package/dist/lib/formats.d.ts +6 -0
  31. package/dist/lib/formats.js +236 -0
  32. package/dist/lib/json-pointer.d.ts +2 -0
  33. package/dist/lib/json-pointer.js +28 -0
  34. package/dist/lib/overrides.d.ts +2 -0
  35. package/dist/lib/overrides.js +59 -0
  36. package/dist/lib/package-root.d.ts +2 -0
  37. package/dist/lib/package-root.js +31 -0
  38. package/dist/lib/reader.d.ts +8 -0
  39. package/dist/lib/reader.js +136 -0
  40. package/dist/lib/theming/adjacency-source.d.ts +20 -0
  41. package/dist/lib/theming/adjacency-source.js +103 -0
  42. package/dist/lib/theming/adjacency.d.ts +17 -0
  43. package/dist/lib/theming/adjacency.js +133 -0
  44. package/dist/lib/theming/build-record.d.ts +45 -0
  45. package/dist/lib/theming/build-record.js +87 -0
  46. package/dist/lib/theming/build-step.d.ts +14 -0
  47. package/dist/lib/theming/build-step.js +91 -0
  48. package/dist/lib/theming/color-math.d.ts +33 -0
  49. package/dist/lib/theming/color-math.js +125 -0
  50. package/dist/lib/theming/comment-open-tracker.d.ts +1 -0
  51. package/dist/lib/theming/comment-open-tracker.js +49 -0
  52. package/dist/lib/theming/consumer-build.d.ts +18 -0
  53. package/dist/lib/theming/consumer-build.js +29 -0
  54. package/dist/lib/theming/contact-sheet.d.ts +22 -0
  55. package/dist/lib/theming/contact-sheet.js +123 -0
  56. package/dist/lib/theming/contrast.d.ts +31 -0
  57. package/dist/lib/theming/contrast.js +133 -0
  58. package/dist/lib/theming/copy-lint.d.ts +13 -0
  59. package/dist/lib/theming/copy-lint.js +98 -0
  60. package/dist/lib/theming/core-contract.d.ts +29 -0
  61. package/dist/lib/theming/core-contract.js +71 -0
  62. package/dist/lib/theming/core-source.d.ts +2 -0
  63. package/dist/lib/theming/core-source.js +18 -0
  64. package/dist/lib/theming/css-color-4.d.ts +19 -0
  65. package/dist/lib/theming/css-color-4.js +66 -0
  66. package/dist/lib/theming/css-named-colours.d.ts +1 -0
  67. package/dist/lib/theming/css-named-colours.js +151 -0
  68. package/dist/lib/theming/descriptions.d.ts +1 -0
  69. package/dist/lib/theming/descriptions.js +21 -0
  70. package/dist/lib/theming/emit.d.ts +10 -0
  71. package/dist/lib/theming/emit.js +62 -0
  72. package/dist/lib/theming/feedback-signal.d.ts +11 -0
  73. package/dist/lib/theming/feedback-signal.js +23 -0
  74. package/dist/lib/theming/guard-message-probes.d.ts +6 -0
  75. package/dist/lib/theming/guard-message-probes.js +96 -0
  76. package/dist/lib/theming/ladder.d.ts +15 -0
  77. package/dist/lib/theming/ladder.js +81 -0
  78. package/dist/lib/theming/neutral.d.ts +12 -0
  79. package/dist/lib/theming/neutral.js +76 -0
  80. package/dist/lib/theming/on-star.d.ts +11 -0
  81. package/dist/lib/theming/on-star.js +87 -0
  82. package/dist/lib/theming/palette-record.d.ts +2 -0
  83. package/dist/lib/theming/palette-record.js +15 -0
  84. package/dist/lib/theming/pipeline.d.ts +43 -0
  85. package/dist/lib/theming/pipeline.js +104 -0
  86. package/dist/lib/theming/ramp.d.ts +34 -0
  87. package/dist/lib/theming/ramp.js +92 -0
  88. package/dist/lib/theming/seed-channel-split.d.ts +8 -0
  89. package/dist/lib/theming/seed-channel-split.js +99 -0
  90. package/dist/lib/theming/seed-form-parsers-css-color-4.d.ts +8 -0
  91. package/dist/lib/theming/seed-form-parsers-css-color-4.js +85 -0
  92. package/dist/lib/theming/seed-form-parsers.d.ts +6 -0
  93. package/dist/lib/theming/seed-form-parsers.js +155 -0
  94. package/dist/lib/theming/seed-ingest.d.ts +15 -0
  95. package/dist/lib/theming/seed-ingest.js +112 -0
  96. package/dist/lib/theming/seed-input.d.ts +22 -0
  97. package/dist/lib/theming/seed-input.js +1 -0
  98. package/dist/lib/theming/seed-refusal.d.ts +21 -0
  99. package/dist/lib/theming/seed-refusal.js +77 -0
  100. package/dist/lib/theming/semantics.d.ts +19 -0
  101. package/dist/lib/theming/semantics.js +71 -0
  102. package/dist/lib/theming/shipped-seeds.d.ts +2 -0
  103. package/dist/lib/theming/shipped-seeds.js +5 -0
  104. package/dist/lib/theming/step-table.d.ts +5 -0
  105. package/dist/lib/theming/step-table.js +26 -0
  106. package/dist/lib/theming/third-party-provenance.d.ts +9 -0
  107. package/dist/lib/theming/third-party-provenance.js +35 -0
  108. package/dist/lib/theming/tokens-source.d.ts +3 -0
  109. package/dist/lib/theming/tokens-source.js +61 -0
  110. package/dist/lib/token-name.d.ts +2 -0
  111. package/dist/lib/token-name.js +28 -0
  112. package/dist/lib/validate-report.d.ts +19 -0
  113. package/dist/lib/validate-report.js +93 -0
  114. package/dist/lib/validate.d.ts +16 -0
  115. package/dist/lib/validate.js +65 -0
  116. package/dist/palette-record.json +293 -0
  117. package/dist/tokens.css +433 -0
  118. package/dist/tokens.d.ts +90 -0
  119. package/dist/tokens.js +88 -0
  120. package/package.json +85 -0
  121. package/tokens.json +938 -0
@@ -0,0 +1,28 @@
1
+ const SPLIT_LOWER_UPPER_RE = /([\p{Ll}\d])(\p{Lu})/gu;
2
+ const SPLIT_UPPER_UPPER_RE = /(\p{Lu})([\p{Lu}][\p{Ll}])/gu;
3
+ const STRIP_RE = /[^\p{L}\d]+/gu;
4
+ function splitWords(value) {
5
+ let result = value.trim();
6
+ result = result
7
+ .replaceAll(SPLIT_LOWER_UPPER_RE, '$1\0$2')
8
+ .replaceAll(SPLIT_UPPER_UPPER_RE, '$1\0$2');
9
+ result = result.replaceAll(STRIP_RE, '\0');
10
+ let start = 0;
11
+ let end = result.length;
12
+ while (result.charAt(start) === '\0')
13
+ start++;
14
+ if (start === end)
15
+ return [];
16
+ while (result.charAt(end - 1) === '\0')
17
+ end--;
18
+ return result.slice(start, end).split('\0');
19
+ }
20
+ export function kebabName(path) {
21
+ return splitWords(path.join(' '))
22
+ .map((w) => w.toLowerCase())
23
+ .join('-');
24
+ }
25
+ export function nameFromPath(path) {
26
+ const namePath = path.length > 1 && path[0] === 'nave' ? path.slice(1) : path;
27
+ return kebabName(namePath);
28
+ }
@@ -0,0 +1,19 @@
1
+ import type { CoreContractManifest, ManifestVersionSkew } from './theming/core-contract.ts';
2
+ export interface ManifestFormatRefusal {
3
+ found: number;
4
+ supported: number;
5
+ }
6
+ export declare function checkManifestFormatSupport(manifest: CoreContractManifest): ManifestFormatRefusal | undefined;
7
+ export type CoreVersionReportStatus = {
8
+ status: 'resolved';
9
+ } | {
10
+ status: 'not-installed';
11
+ } | {
12
+ status: 'unresolvable';
13
+ } | {
14
+ message: string;
15
+ status: 'unreadable';
16
+ };
17
+ export declare function formatValidateReport(manifest: CoreContractManifest, missing: readonly string[], versionSkew: ManifestVersionSkew | undefined, coreVersionStatus?: CoreVersionReportStatus & {
18
+ supplied?: readonly string[];
19
+ }): string[];
@@ -0,0 +1,93 @@
1
+ import { MANIFEST_FORMAT_VERSION } from "./theming/core-contract.js";
2
+ export function checkManifestFormatSupport(manifest) {
3
+ if (manifest.formatVersion <= MANIFEST_FORMAT_VERSION)
4
+ return undefined;
5
+ return { found: manifest.formatVersion, supported: MANIFEST_FORMAT_VERSION };
6
+ }
7
+ const NAMESPACE_PREAMBLE = 'Contract names below are the emitted CSS custom-property spelling (for example ' +
8
+ '--nave-color-surface-base). Your DTCG 2025.10 source names the same node with the "--nave-" ' +
9
+ 'prefix dropped and hyphens read as a dotted path (color.surface.base).';
10
+ const SCOPE_STATEMENT = 'This check is one-directional: it reports every core contract name missing from your ' +
11
+ 'source. A token in your source beyond the contract is never an error.';
12
+ const NO_INSTALLED_CORE_DISCLAIMER = 'No installed @navecss/core was found, so no version-skew check ran.';
13
+ function producerOf(manifest) {
14
+ return `${manifest.producer.name}@${manifest.producer.version} (manifest format ${manifest.formatVersion})`;
15
+ }
16
+ function recordedProducerOf(manifest) {
17
+ return `the manifest's own recorded ${producerOf(manifest)}`;
18
+ }
19
+ function formatSuccessLine(manifest, coreStatus, suppliedCount) {
20
+ const checkable = manifest.tokens.length - suppliedCount;
21
+ const provenance = producerOf(manifest);
22
+ if (coreStatus.status === 'not-installed') {
23
+ const scope = checkable === 0
24
+ ? `every contract name is supplied by \`navecss-tokens build\`'s theming layer from ` +
25
+ `your seed, so none could have been checked as missing (true only if you build ` +
26
+ `with that tool)`
27
+ : `${checkable} name(s) checked`;
28
+ return `0 missing against ${recordedProducerOf(manifest)}, ${scope}. ${NO_INSTALLED_CORE_DISCLAIMER}`;
29
+ }
30
+ if (checkable === 0) {
31
+ return (`Every contract name is supplied by \`navecss-tokens build\`'s theming layer from your ` +
32
+ `seed, so none could have been checked as missing (true only if you build with that ` +
33
+ `tool). Manifest from ${provenance}.`);
34
+ }
35
+ return `0 missing. Checked ${checkable} name(s) from ${provenance}.`;
36
+ }
37
+ function formatMissingLines(manifest, missing, coreStatus, suppliedCount) {
38
+ if (missing.length === 0)
39
+ return [formatSuccessLine(manifest, coreStatus, suppliedCount)];
40
+ const provenance = coreStatus.status === 'not-installed'
41
+ ? `Checked against ${recordedProducerOf(manifest)}. ${NO_INSTALLED_CORE_DISCLAIMER}`
42
+ : `Checked against ${producerOf(manifest)}.`;
43
+ return [`${missing.length} missing name(s):`, ...missing.map((name) => ` ${name}`), provenance];
44
+ }
45
+ function formatSuppliedLines(supplied) {
46
+ if (supplied.length === 0)
47
+ return [];
48
+ return [
49
+ `${supplied.length} more name(s) are not in your source but are emitted by ` +
50
+ `\`navecss-tokens build\`'s theming layer from your seed, so they are not counted as ` +
51
+ `missing above (true only if you build with that tool):`,
52
+ ...supplied.map((name) => ` ${name}`),
53
+ ];
54
+ }
55
+ export function formatValidateReport(manifest, missing, versionSkew, coreVersionStatus) {
56
+ const coreStatus = coreVersionStatus ?? { status: 'resolved' };
57
+ const supplied = coreVersionStatus?.supplied ?? [];
58
+ const formatRefusal = checkManifestFormatSupport(manifest);
59
+ if (formatRefusal) {
60
+ return [
61
+ `Unrecognized manifest format: this manifest declares format ` +
62
+ `${formatRefusal.found}, and this @navecss/tokens understands manifest format ` +
63
+ `${formatRefusal.supported} at most. Upgrade @navecss/tokens to read this manifest.`,
64
+ ];
65
+ }
66
+ if (coreStatus.status === 'unreadable') {
67
+ return [
68
+ `Could not read the installed @navecss/core's package.json to check for version ` +
69
+ `skew (${coreStatus.message}). Reinstall @navecss/core and try again.`,
70
+ ];
71
+ }
72
+ if (coreStatus.status === 'unresolvable') {
73
+ return [
74
+ `Could not determine the installed @navecss/core's version: this @navecss/tokens ` +
75
+ `checks it via @navecss/core's own "./package.json" export, which the installed ` +
76
+ `@navecss/core does not declare. Upgrade @navecss/core, or reinstall matching ` +
77
+ `versions, before trusting a validate result.`,
78
+ ];
79
+ }
80
+ if (versionSkew) {
81
+ return [
82
+ `Version skew: this manifest was recorded against ${manifest.producer.name}@` +
83
+ `${versionSkew.recorded}, but the installed ${manifest.producer.name} is @` +
84
+ `${versionSkew.installed}. Reinstall matching versions before trusting this result.`,
85
+ ];
86
+ }
87
+ return [
88
+ NAMESPACE_PREAMBLE,
89
+ ...formatMissingLines(manifest, missing, coreStatus, supplied.length),
90
+ ...formatSuppliedLines(supplied),
91
+ SCOPE_STATEMENT,
92
+ ];
93
+ }
@@ -0,0 +1,16 @@
1
+ import type { CoreContractManifest } from './theming/core-contract.ts';
2
+ export type ValidateSourceKind = 'css' | 'json';
3
+ export declare function detectSourceKind(filePath: string): ValidateSourceKind | undefined;
4
+ export declare function scanDeclaredCustomProperties(css: string): Set<string>;
5
+ export declare function namesFromDtcgSource(source: unknown, sourceName?: string): Set<string>;
6
+ export type ValidateSourceLabel = {
7
+ path: string;
8
+ } | {
9
+ phrase: string;
10
+ };
11
+ export declare function namesFromSource(kind: ValidateSourceKind, content: string, source?: ValidateSourceLabel): Set<string>;
12
+ export declare function computeMissing(manifest: CoreContractManifest, kind: ValidateSourceKind, content: string, source?: ValidateSourceLabel): string[];
13
+ export declare function splitMissingBySupply(kind: ValidateSourceKind, notDeclared: readonly string[]): {
14
+ missing: string[];
15
+ supplied: string[];
16
+ };
@@ -0,0 +1,65 @@
1
+ import { UsageError } from "./errors.js";
2
+ import { readTokens } from "./reader.js";
3
+ import { validateAgainstManifest } from "./theming/core-contract.js";
4
+ import { shippedThemingPropertyNames } from "./theming/emit.js";
5
+ export function detectSourceKind(filePath) {
6
+ const lowered = filePath.toLowerCase();
7
+ if (lowered.endsWith('.css'))
8
+ return 'css';
9
+ if (lowered.endsWith('.json'))
10
+ return 'json';
11
+ return undefined;
12
+ }
13
+ const DECLARED_CUSTOM_PROPERTY_RE = /(--[a-zA-Z0-9-]+)\s*:/g;
14
+ const CSS_COMMENT_RE = /\/\*[\s\S]*?\*\//g;
15
+ export function scanDeclaredCustomProperties(css) {
16
+ const found = new Set();
17
+ const declarations = css.replaceAll(CSS_COMMENT_RE, '');
18
+ for (const match of declarations.matchAll(DECLARED_CUSTOM_PROPERTY_RE))
19
+ found.add(match[1]);
20
+ return found;
21
+ }
22
+ export function namesFromDtcgSource(source, sourceName) {
23
+ const tokens = readTokens(source, sourceName);
24
+ return new Set(tokens.map((t) => `--nave-${t.name}`));
25
+ }
26
+ const DEFAULT_SOURCE_LABEL = { phrase: 'this validate source' };
27
+ function printSourceLabel(source) {
28
+ return 'path' in source ? `"${source.path}"` : source.phrase;
29
+ }
30
+ export function namesFromSource(kind, content, source = DEFAULT_SOURCE_LABEL) {
31
+ if (kind === 'css')
32
+ return scanDeclaredCustomProperties(content);
33
+ const sourceLabel = printSourceLabel(source);
34
+ let parsed;
35
+ try {
36
+ parsed = JSON.parse(content);
37
+ }
38
+ catch (error) {
39
+ throw new UsageError(`${sourceLabel} is not valid JSON: ${error.message}`);
40
+ }
41
+ if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {
42
+ throw new UsageError(`${sourceLabel} is not a DTCG 2025.10 token document: its JSON root is ${describeRoot(parsed)}, ` +
43
+ `not an object.`);
44
+ }
45
+ return namesFromDtcgSource(parsed, 'path' in source ? source.path : undefined);
46
+ }
47
+ function describeRoot(root) {
48
+ if (root === null)
49
+ return 'null';
50
+ if (Array.isArray(root))
51
+ return 'an array';
52
+ return `a ${typeof root}`;
53
+ }
54
+ export function computeMissing(manifest, kind, content, source) {
55
+ return validateAgainstManifest(manifest, namesFromSource(kind, content, source));
56
+ }
57
+ export function splitMissingBySupply(kind, notDeclared) {
58
+ if (kind === 'css')
59
+ return { missing: [...notDeclared], supplied: [] };
60
+ const supplied = shippedThemingPropertyNames();
61
+ return {
62
+ missing: notDeclared.filter((name) => !supplied.has(name)),
63
+ supplied: notDeclared.filter((name) => supplied.has(name)),
64
+ };
65
+ }
@@ -0,0 +1,293 @@
1
+ {
2
+ "aboutThisFile": "This file is a resolved palette record: what this build produced for every semantic colour slot, in both schemes. It is not a DTCG 2025.10 document, and it is not meant to be read by a DTCG 2025.10 tool, because its keys are flat dotted names and most of its values are relative-colour-syntax strings, neither of which that format expresses. The token document is tokens.json, shipped beside it.",
3
+ "color.surface.base.light": {
4
+ "$type": "color",
5
+ "$value": "oklch(from var(--nave-color-tint) 1 0 h)"
6
+ },
7
+ "color.surface.base.dark": {
8
+ "$type": "color",
9
+ "$value": "oklch(from var(--nave-color-tint) 0.18 0.0067 h)"
10
+ },
11
+ "color.surface.raised.light": {
12
+ "$type": "color",
13
+ "$value": "oklch(from var(--nave-color-tint) 1 0 h)"
14
+ },
15
+ "color.surface.raised.dark": {
16
+ "$type": "color",
17
+ "$value": "oklch(from var(--nave-color-tint) 0.225 0.0067 h)"
18
+ },
19
+ "color.surface.overlay.light": {
20
+ "$type": "color",
21
+ "$value": "oklch(from var(--nave-color-tint) 1 0 h)"
22
+ },
23
+ "color.surface.overlay.dark": {
24
+ "$type": "color",
25
+ "$value": "oklch(from var(--nave-color-tint) 0.27 0.0067 h)"
26
+ },
27
+ "color.surface.sunken.light": {
28
+ "$type": "color",
29
+ "$value": "oklch(from var(--nave-color-tint) 0.985 0.0067 h)"
30
+ },
31
+ "color.surface.sunken.dark": {
32
+ "$type": "color",
33
+ "$value": "oklch(from var(--nave-color-tint) 0.12 0.0067 h)"
34
+ },
35
+ "color.surface.inverse.light": {
36
+ "$type": "color",
37
+ "$value": "oklch(from var(--nave-color-tint) 0.18 0.0067 h)"
38
+ },
39
+ "color.surface.inverse.dark": {
40
+ "$type": "color",
41
+ "$value": "oklch(from var(--nave-color-tint) 0.965 0.0067 h)"
42
+ },
43
+ "color.content.primary.light": {
44
+ "$type": "color",
45
+ "$value": "oklch(from var(--nave-color-tint) 0.18 0.0067 h)"
46
+ },
47
+ "color.content.primary.dark": {
48
+ "$type": "color",
49
+ "$value": "oklch(from var(--nave-color-tint) 0.965 0.0067 h)"
50
+ },
51
+ "color.content.secondary.light": {
52
+ "$type": "color",
53
+ "$value": "oklch(from var(--nave-color-tint) 0.37 0.0067 h)"
54
+ },
55
+ "color.content.secondary.dark": {
56
+ "$type": "color",
57
+ "$value": "oklch(from var(--nave-color-tint) 0.835 0.0067 h)"
58
+ },
59
+ "color.content.tertiary.light": {
60
+ "$type": "color",
61
+ "$value": "oklch(from var(--nave-color-tint) 0.47 0.0067 h)",
62
+ "$description": "Placeholder and hint text only."
63
+ },
64
+ "color.content.tertiary.dark": {
65
+ "$type": "color",
66
+ "$value": "oklch(from var(--nave-color-tint) 0.72 0.0067 h)",
67
+ "$description": "Placeholder and hint text only."
68
+ },
69
+ "color.content.disabled.light": {
70
+ "$type": "color",
71
+ "$value": "oklch(from var(--nave-color-tint) 0.835 0.0067 h)",
72
+ "$description": "Text inside a disabled interactive component."
73
+ },
74
+ "color.content.disabled.dark": {
75
+ "$type": "color",
76
+ "$value": "oklch(from var(--nave-color-tint) 0.37 0.0067 h)",
77
+ "$description": "Text inside a disabled interactive component."
78
+ },
79
+ "color.content.inverse.light": {
80
+ "$type": "color",
81
+ "$value": "oklch(from var(--nave-color-tint) 0.965 0.0067 h)",
82
+ "$description": "Declared foreground for surface.inverse."
83
+ },
84
+ "color.content.inverse.dark": {
85
+ "$type": "color",
86
+ "$value": "oklch(from var(--nave-color-tint) 0.18 0.0067 h)",
87
+ "$description": "Declared foreground for surface.inverse."
88
+ },
89
+ "color.content.link.light": {
90
+ "$type": "color",
91
+ "$value": "oklch(0.47 0.0748 186.17)",
92
+ "$description": "Do not distinguish a link by colour alone. Nave's own examples keep a non-colour distinction wherever this token is shown."
93
+ },
94
+ "color.content.link.dark": {
95
+ "$type": "color",
96
+ "$value": "oklch(0.835 0.123 186.17)",
97
+ "$description": "Do not distinguish a link by colour alone. Nave's own examples keep a non-colour distinction wherever this token is shown."
98
+ },
99
+ "color.border.default.light": {
100
+ "$type": "color",
101
+ "$value": "oklch(from var(--nave-color-tint) 0.905 0.0067 h)",
102
+ "$description": "Decorative dividers and card edges."
103
+ },
104
+ "color.border.default.dark": {
105
+ "$type": "color",
106
+ "$value": "oklch(from var(--nave-color-tint) 0.37 0.0067 h)",
107
+ "$description": "Decorative dividers and card edges."
108
+ },
109
+ "color.border.strong.light": {
110
+ "$type": "color",
111
+ "$value": "oklch(from var(--nave-color-tint) 0.72 0.0067 h)"
112
+ },
113
+ "color.border.strong.dark": {
114
+ "$type": "color",
115
+ "$value": "oklch(from var(--nave-color-tint) 0.47 0.0067 h)"
116
+ },
117
+ "color.border.control.light": {
118
+ "$type": "color",
119
+ "$value": "oklch(from var(--nave-color-tint) 0.59 0.0067 h)",
120
+ "$description": "Identifying boundary for a control (inputs, form boundaries, and the secondary action control)."
121
+ },
122
+ "color.border.control.dark": {
123
+ "$type": "color",
124
+ "$value": "oklch(from var(--nave-color-tint) 0.59 0.0067 h)",
125
+ "$description": "Identifying boundary for a control (inputs, form boundaries, and the secondary action control)."
126
+ },
127
+ "color.border.disabled.light": {
128
+ "$type": "color",
129
+ "$value": "oklch(from var(--nave-color-tint) 0.94 0.0067 h)"
130
+ },
131
+ "color.border.disabled.dark": {
132
+ "$type": "color",
133
+ "$value": "oklch(from var(--nave-color-tint) 0.27 0.0067 h)"
134
+ },
135
+ "color.border.focus.light": {
136
+ "$type": "color",
137
+ "$value": "oklch(0.59 0.0939 186.17)"
138
+ },
139
+ "color.border.focus.dark": {
140
+ "$type": "color",
141
+ "$value": "oklch(0.59 0.0939 186.17)"
142
+ },
143
+ "color.action.primary.light": {
144
+ "$type": "color",
145
+ "$value": "oklch(0.47 0.0748 186.17)"
146
+ },
147
+ "color.action.primary.dark": {
148
+ "$type": "color",
149
+ "$value": "oklch(0.835 0.123 186.17)"
150
+ },
151
+ "color.action.primary.hover.light": {
152
+ "$type": "color",
153
+ "$value": "oklch(0.37 0.0589 186.17)"
154
+ },
155
+ "color.action.primary.hover.dark": {
156
+ "$type": "color",
157
+ "$value": "oklch(0.905 0.1106 186.17)"
158
+ },
159
+ "color.action.primary.active.light": {
160
+ "$type": "color",
161
+ "$value": "oklch(0.27 0.0398 186.17)"
162
+ },
163
+ "color.action.primary.active.dark": {
164
+ "$type": "color",
165
+ "$value": "oklch(0.94 0.0574 186.17)"
166
+ },
167
+ "color.on-action.primary.light": {
168
+ "$type": "color",
169
+ "$value": "oklch(from var(--nave-color-tint) 1 0 h)"
170
+ },
171
+ "color.on-action.primary.dark": {
172
+ "$type": "color",
173
+ "$value": "oklch(from var(--nave-color-tint) 0.18 0.0067 h)"
174
+ },
175
+ "color.action.secondary.light": {
176
+ "$type": "color",
177
+ "$value": "oklch(from var(--nave-color-tint) 0.965 0.0067 h)"
178
+ },
179
+ "color.action.secondary.dark": {
180
+ "$type": "color",
181
+ "$value": "oklch(from var(--nave-color-tint) 0.27 0.0067 h)"
182
+ },
183
+ "color.feedback.danger.light": {
184
+ "$type": "color",
185
+ "$value": "oklch(0.47 0.1455 15.02)",
186
+ "$description": "Solid-background role for a destructive control or error state."
187
+ },
188
+ "color.feedback.danger.dark": {
189
+ "$type": "color",
190
+ "$value": "oklch(0.835 0.0661 15.02)",
191
+ "$description": "Solid-background role for a destructive control or error state."
192
+ },
193
+ "color.feedback.danger.foreground.light": {
194
+ "$type": "color",
195
+ "$value": "oklch(0.47 0.1455 15.02)",
196
+ "$description": "Foreground role for danger text and icons."
197
+ },
198
+ "color.feedback.danger.foreground.dark": {
199
+ "$type": "color",
200
+ "$value": "oklch(0.835 0.0661 15.02)",
201
+ "$description": "Foreground role for danger text and icons."
202
+ },
203
+ "color.on-feedback.danger.light": {
204
+ "$type": "color",
205
+ "$value": "oklch(from var(--nave-color-tint) 1 0 h)",
206
+ "$description": "Declared foreground for the solid feedback.danger background."
207
+ },
208
+ "color.on-feedback.danger.dark": {
209
+ "$type": "color",
210
+ "$value": "oklch(from var(--nave-color-tint) 0.18 0.0067 h)",
211
+ "$description": "Declared foreground for the solid feedback.danger background."
212
+ },
213
+ "color.feedback.warning.light": {
214
+ "$type": "color",
215
+ "$value": "oklch(from var(--nave-color-tint) 0.47 0.0067 h)",
216
+ "$description": "Solid-background role for a warning state (shared tinted-neutral family)."
217
+ },
218
+ "color.feedback.warning.dark": {
219
+ "$type": "color",
220
+ "$value": "oklch(from var(--nave-color-tint) 0.835 0.0067 h)",
221
+ "$description": "Solid-background role for a warning state (shared tinted-neutral family)."
222
+ },
223
+ "color.feedback.warning.foreground.light": {
224
+ "$type": "color",
225
+ "$value": "oklch(from var(--nave-color-tint) 0.47 0.0067 h)",
226
+ "$description": "Foreground role for warning text and icons."
227
+ },
228
+ "color.feedback.warning.foreground.dark": {
229
+ "$type": "color",
230
+ "$value": "oklch(from var(--nave-color-tint) 0.835 0.0067 h)",
231
+ "$description": "Foreground role for warning text and icons."
232
+ },
233
+ "color.on-feedback.warning.light": {
234
+ "$type": "color",
235
+ "$value": "oklch(from var(--nave-color-tint) 1 0 h)"
236
+ },
237
+ "color.on-feedback.warning.dark": {
238
+ "$type": "color",
239
+ "$value": "oklch(from var(--nave-color-tint) 0.18 0.0067 h)"
240
+ },
241
+ "color.feedback.success.light": {
242
+ "$type": "color",
243
+ "$value": "oklch(from var(--nave-color-tint) 0.47 0.0067 h)",
244
+ "$description": "Alias of feedback.warning (shared tinted-neutral family)."
245
+ },
246
+ "color.feedback.success.dark": {
247
+ "$type": "color",
248
+ "$value": "oklch(from var(--nave-color-tint) 0.835 0.0067 h)",
249
+ "$description": "Alias of feedback.warning (shared tinted-neutral family)."
250
+ },
251
+ "color.feedback.success.foreground.light": {
252
+ "$type": "color",
253
+ "$value": "oklch(from var(--nave-color-tint) 0.47 0.0067 h)"
254
+ },
255
+ "color.feedback.success.foreground.dark": {
256
+ "$type": "color",
257
+ "$value": "oklch(from var(--nave-color-tint) 0.835 0.0067 h)"
258
+ },
259
+ "color.on-feedback.success.light": {
260
+ "$type": "color",
261
+ "$value": "oklch(from var(--nave-color-tint) 1 0 h)"
262
+ },
263
+ "color.on-feedback.success.dark": {
264
+ "$type": "color",
265
+ "$value": "oklch(from var(--nave-color-tint) 0.18 0.0067 h)"
266
+ },
267
+ "color.feedback.info.light": {
268
+ "$type": "color",
269
+ "$value": "oklch(from var(--nave-color-tint) 0.47 0.0067 h)",
270
+ "$description": "Alias of feedback.warning (shared tinted-neutral family)."
271
+ },
272
+ "color.feedback.info.dark": {
273
+ "$type": "color",
274
+ "$value": "oklch(from var(--nave-color-tint) 0.835 0.0067 h)",
275
+ "$description": "Alias of feedback.warning (shared tinted-neutral family)."
276
+ },
277
+ "color.feedback.info.foreground.light": {
278
+ "$type": "color",
279
+ "$value": "oklch(from var(--nave-color-tint) 0.47 0.0067 h)"
280
+ },
281
+ "color.feedback.info.foreground.dark": {
282
+ "$type": "color",
283
+ "$value": "oklch(from var(--nave-color-tint) 0.835 0.0067 h)"
284
+ },
285
+ "color.on-feedback.info.light": {
286
+ "$type": "color",
287
+ "$value": "oklch(from var(--nave-color-tint) 1 0 h)"
288
+ },
289
+ "color.on-feedback.info.dark": {
290
+ "$type": "color",
291
+ "$value": "oklch(from var(--nave-color-tint) 0.18 0.0067 h)"
292
+ }
293
+ }