@adobe/design-data-spec 0.0.1 → 0.1.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 (128) hide show
  1. package/LICENSE +201 -0
  2. package/conformance/README.md +83 -10
  3. package/conformance/diff/cross-format/expected.json +27 -0
  4. package/conformance/diff/cross-format/new/tokens.tokens.json +8 -0
  5. package/conformance/diff/cross-format/old/tokens.json +7 -0
  6. package/conformance/diff/deprecated-new-token/expected.json +13 -0
  7. package/conformance/diff/deprecated-new-token/new/tokens.tokens.json +8 -0
  8. package/conformance/diff/deprecated-new-token/old/tokens.tokens.json +1 -0
  9. package/conformance/diff/deprecated-set-level/expected.json +13 -0
  10. package/conformance/diff/deprecated-set-level/new/tokens.tokens.json +10 -0
  11. package/conformance/diff/deprecated-set-level/old/tokens.tokens.json +1 -0
  12. package/conformance/diff/identical-tokens/expected.json +8 -0
  13. package/conformance/diff/identical-tokens/new/tokens.tokens.json +12 -0
  14. package/conformance/diff/identical-tokens/old/tokens.tokens.json +12 -0
  15. package/conformance/diff/matched-gaining-deprecated/expected.json +20 -0
  16. package/conformance/diff/matched-gaining-deprecated/new/tokens.tokens.json +8 -0
  17. package/conformance/diff/matched-gaining-deprecated/old/tokens.tokens.json +7 -0
  18. package/conformance/diff/property-nested-change/expected.json +27 -0
  19. package/conformance/diff/property-nested-change/new/tokens.tokens.json +10 -0
  20. package/conformance/diff/property-nested-change/old/tokens.tokens.json +10 -0
  21. package/conformance/diff/property-value-update/expected.json +21 -0
  22. package/conformance/diff/property-value-update/new/tokens.tokens.json +7 -0
  23. package/conformance/diff/property-value-update/old/tokens.tokens.json +7 -0
  24. package/conformance/diff/rename-by-uuid/expected.json +22 -0
  25. package/conformance/diff/rename-by-uuid/new/tokens.tokens.json +7 -0
  26. package/conformance/diff/rename-by-uuid/old/tokens.tokens.json +7 -0
  27. package/conformance/diff/rename-with-property-changes/expected.json +28 -0
  28. package/conformance/diff/rename-with-property-changes/new/tokens.tokens.json +7 -0
  29. package/conformance/diff/rename-with-property-changes/old/tokens.tokens.json +7 -0
  30. package/conformance/diff/replaced-by-pairing/expected.json +43 -0
  31. package/conformance/diff/replaced-by-pairing/new/tokens.tokens.json +7 -0
  32. package/conformance/diff/replaced-by-pairing/old/tokens.tokens.json +10 -0
  33. package/conformance/diff/reverted-token/expected.json +13 -0
  34. package/conformance/diff/reverted-token/new/tokens.tokens.json +7 -0
  35. package/conformance/diff/reverted-token/old/tokens.tokens.json +8 -0
  36. package/conformance/diff/simple-add-delete/expected.json +18 -0
  37. package/conformance/diff/simple-add-delete/new/tokens.tokens.json +7 -0
  38. package/conformance/diff/simple-add-delete/old/tokens.tokens.json +7 -0
  39. package/conformance/diff/uuid-backfill/expected.json +20 -0
  40. package/conformance/diff/uuid-backfill/new/tokens.tokens.json +7 -0
  41. package/conformance/diff/uuid-backfill/old/tokens.tokens.json +6 -0
  42. package/conformance/invalid/SPEC-008/dimension.json +5 -0
  43. package/conformance/invalid/SPEC-008/expected-errors.json +10 -0
  44. package/conformance/invalid/SPEC-008/tokens.tokens.json +15 -0
  45. package/conformance/invalid/SPEC-010/expected-errors.json +10 -0
  46. package/conformance/invalid/SPEC-010/tokens.tokens.json +9 -0
  47. package/conformance/invalid/SPEC-011/expected-errors.json +10 -0
  48. package/conformance/invalid/SPEC-011/tokens.tokens.json +22 -0
  49. package/conformance/invalid/SPEC-012/expected-errors.json +10 -0
  50. package/conformance/invalid/SPEC-012/tokens.tokens.json +13 -0
  51. package/conformance/invalid/SPEC-013/expected-errors.json +10 -0
  52. package/conformance/invalid/SPEC-013/tokens.tokens.json +8 -0
  53. package/conformance/invalid/SPEC-014/expected-errors.json +10 -0
  54. package/conformance/invalid/SPEC-014/tokens.tokens.json +9 -0
  55. package/conformance/query/and-conditions/expected.json +1 -0
  56. package/conformance/query/and-conditions/input/tokens.tokens.json +17 -0
  57. package/conformance/query/and-conditions/query.txt +1 -0
  58. package/conformance/query/and-or-precedence/expected.json +1 -0
  59. package/conformance/query/and-or-precedence/input/tokens.tokens.json +22 -0
  60. package/conformance/query/and-or-precedence/query.txt +1 -0
  61. package/conformance/query/empty-matches-all/expected.json +1 -0
  62. package/conformance/query/empty-matches-all/input/tokens.tokens.json +17 -0
  63. package/conformance/query/empty-matches-all/query.txt +1 -0
  64. package/conformance/query/negation/expected.json +1 -0
  65. package/conformance/query/negation/input/tokens.tokens.json +17 -0
  66. package/conformance/query/negation/query.txt +1 -0
  67. package/conformance/query/no-matches/expected.json +1 -0
  68. package/conformance/query/no-matches/input/tokens.tokens.json +7 -0
  69. package/conformance/query/no-matches/query.txt +1 -0
  70. package/conformance/query/or-conditions/expected.json +1 -0
  71. package/conformance/query/or-conditions/input/tokens.tokens.json +17 -0
  72. package/conformance/query/or-conditions/query.txt +1 -0
  73. package/conformance/query/schema-key/expected.json +1 -0
  74. package/conformance/query/schema-key/input/tokens.tokens.json +14 -0
  75. package/conformance/query/schema-key/query.txt +1 -0
  76. package/conformance/query/single-field/expected.json +1 -0
  77. package/conformance/query/single-field/input/tokens.tokens.json +17 -0
  78. package/conformance/query/single-field/query.txt +1 -0
  79. package/conformance/query/wildcard-prefix/expected.json +1 -0
  80. package/conformance/query/wildcard-prefix/input/tokens.tokens.json +17 -0
  81. package/conformance/query/wildcard-prefix/query.txt +1 -0
  82. package/conformance/query/wildcard-suffix/expected.json +1 -0
  83. package/conformance/query/wildcard-suffix/input/tokens.tokens.json +17 -0
  84. package/conformance/query/wildcard-suffix/query.txt +1 -0
  85. package/conformance/resolution/alias-resolved-after-cascade/dimensions/color-scheme.json +5 -0
  86. package/conformance/resolution/alias-resolved-after-cascade/expected.json +5 -0
  87. package/conformance/resolution/alias-resolved-after-cascade/input/tokens.tokens.json +12 -0
  88. package/conformance/resolution/alias-resolved-after-cascade/query.json +4 -0
  89. package/conformance/resolution/base-fallback/dimensions/color-scheme.json +5 -0
  90. package/conformance/resolution/base-fallback/expected.json +5 -0
  91. package/conformance/resolution/base-fallback/input/tokens.tokens.json +7 -0
  92. package/conformance/resolution/base-fallback/query.json +4 -0
  93. package/conformance/resolution/specificity-wins/dimensions/color-scheme.json +5 -0
  94. package/conformance/resolution/specificity-wins/expected.json +5 -0
  95. package/conformance/resolution/specificity-wins/input/tokens.tokens.json +12 -0
  96. package/conformance/resolution/specificity-wins/query.json +4 -0
  97. package/conformance/valid/lifecycle-with-last-modified.json +12 -0
  98. package/fields/anatomy.json +15 -0
  99. package/fields/color-scheme.json +15 -0
  100. package/fields/component.json +15 -0
  101. package/fields/contrast.json +15 -0
  102. package/fields/density.json +15 -0
  103. package/fields/object.json +15 -0
  104. package/fields/orientation.json +15 -0
  105. package/fields/position.json +15 -0
  106. package/fields/property.json +15 -0
  107. package/fields/scale.json +15 -0
  108. package/fields/shape.json +15 -0
  109. package/fields/size.json +15 -0
  110. package/fields/state.json +15 -0
  111. package/fields/structure.json +15 -0
  112. package/fields/substructure.json +15 -0
  113. package/fields/variant.json +15 -0
  114. package/package.json +4 -3
  115. package/rules/rules.yaml +65 -2
  116. package/schemas/cascade-file.schema.json +10 -0
  117. package/schemas/field.schema.json +85 -0
  118. package/schemas/manifest.schema.json +55 -1
  119. package/schemas/token.schema.json +97 -18
  120. package/spec/cascade.md +18 -2
  121. package/spec/diff.md +97 -0
  122. package/spec/dimensions.md +15 -6
  123. package/spec/evolution.md +99 -0
  124. package/spec/index.md +11 -8
  125. package/spec/manifest.md +18 -1
  126. package/spec/query.md +135 -0
  127. package/spec/taxonomy.md +189 -0
  128. package/spec/token-format.md +118 -19
@@ -0,0 +1,7 @@
1
+ [
2
+ {
3
+ "name": { "property": "old-prop", "component": "button" },
4
+ "value": "10px",
5
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001"
6
+ }
7
+ ]
@@ -0,0 +1,43 @@
1
+ {
2
+ "renamed": [
3
+ {
4
+ "old_name": "old-button-bg",
5
+ "new_name": "action-background-default",
6
+ "uuid": "aaaaaaaa-0002-4000-8000-000000000001",
7
+ "property_changes": [
8
+ {
9
+ "path": "deprecated",
10
+ "change_type": "deleted",
11
+ "original_value": "3.0.0"
12
+ },
13
+ {
14
+ "path": "deprecated_comment",
15
+ "change_type": "deleted",
16
+ "original_value": "Use action-background-default instead."
17
+ },
18
+ {
19
+ "path": "name.property",
20
+ "change_type": "updated",
21
+ "new_value": "action-background-default",
22
+ "original_value": "old-button-bg"
23
+ },
24
+ {
25
+ "path": "replaced_by",
26
+ "change_type": "deleted",
27
+ "original_value": "aaaaaaaa-0002-4000-8000-000000000001"
28
+ },
29
+ {
30
+ "path": "uuid",
31
+ "change_type": "updated",
32
+ "new_value": "aaaaaaaa-0002-4000-8000-000000000001",
33
+ "original_value": "aaaaaaaa-0001-4000-8000-000000000001"
34
+ }
35
+ ]
36
+ }
37
+ ],
38
+ "deprecated": [],
39
+ "reverted": [],
40
+ "added": [],
41
+ "deleted": [],
42
+ "updated": []
43
+ }
@@ -0,0 +1,7 @@
1
+ [
2
+ {
3
+ "name": { "property": "action-background-default" },
4
+ "value": "#0265dc",
5
+ "uuid": "aaaaaaaa-0002-4000-8000-000000000001"
6
+ }
7
+ ]
@@ -0,0 +1,10 @@
1
+ [
2
+ {
3
+ "name": { "property": "old-button-bg" },
4
+ "value": "#0265dc",
5
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001",
6
+ "deprecated": "3.0.0",
7
+ "deprecated_comment": "Use action-background-default instead.",
8
+ "replaced_by": "aaaaaaaa-0002-4000-8000-000000000001"
9
+ }
10
+ ]
@@ -0,0 +1,13 @@
1
+ {
2
+ "renamed": [],
3
+ "deprecated": [],
4
+ "reverted": [
5
+ {
6
+ "name": "reverted-prop",
7
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001"
8
+ }
9
+ ],
10
+ "added": [],
11
+ "deleted": [],
12
+ "updated": []
13
+ }
@@ -0,0 +1,7 @@
1
+ [
2
+ {
3
+ "name": { "property": "reverted-prop" },
4
+ "value": "#ffffff",
5
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001"
6
+ }
7
+ ]
@@ -0,0 +1,8 @@
1
+ [
2
+ {
3
+ "name": { "property": "reverted-prop" },
4
+ "deprecated": true,
5
+ "value": "#ffffff",
6
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001"
7
+ }
8
+ ]
@@ -0,0 +1,18 @@
1
+ {
2
+ "renamed": [],
3
+ "deprecated": [],
4
+ "reverted": [],
5
+ "added": [
6
+ {
7
+ "name": "new-only-token",
8
+ "uuid": "aaaaaaaa-0002-4000-8000-000000000001"
9
+ }
10
+ ],
11
+ "deleted": [
12
+ {
13
+ "name": "old-only-token",
14
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001"
15
+ }
16
+ ],
17
+ "updated": []
18
+ }
@@ -0,0 +1,7 @@
1
+ [
2
+ {
3
+ "name": { "property": "new-only-token" },
4
+ "value": "#000000",
5
+ "uuid": "aaaaaaaa-0002-4000-8000-000000000001"
6
+ }
7
+ ]
@@ -0,0 +1,7 @@
1
+ [
2
+ {
3
+ "name": { "property": "old-only-token" },
4
+ "value": "#ffffff",
5
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001"
6
+ }
7
+ ]
@@ -0,0 +1,20 @@
1
+ {
2
+ "renamed": [],
3
+ "deprecated": [],
4
+ "reverted": [],
5
+ "added": [],
6
+ "deleted": [],
7
+ "updated": [
8
+ {
9
+ "name": "background-color",
10
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001",
11
+ "property_changes": [
12
+ {
13
+ "path": "uuid",
14
+ "change_type": "added",
15
+ "new_value": "aaaaaaaa-0001-4000-8000-000000000001"
16
+ }
17
+ ]
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,7 @@
1
+ [
2
+ {
3
+ "name": { "property": "background-color" },
4
+ "value": "#ffffff",
5
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001"
6
+ }
7
+ ]
@@ -0,0 +1,6 @@
1
+ [
2
+ {
3
+ "name": { "property": "background-color" },
4
+ "value": "#ffffff"
5
+ }
6
+ ]
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "colorScheme",
3
+ "modes": ["light", "dark", "wireframe"],
4
+ "default": "light"
5
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "description": "A cascade token property that has non-default colorScheme variants (dark, wireframe) but no base/default variant (dimensionless or explicit light) MUST trigger SPEC-008.",
3
+ "errors": [
4
+ {
5
+ "rule_id": "SPEC-008",
6
+ "severity": "warning",
7
+ "message_pattern": "background-color-default"
8
+ }
9
+ ]
10
+ }
@@ -0,0 +1,15 @@
1
+ [
2
+ {
3
+ "name": { "property": "background-color-default", "colorScheme": "dark" },
4
+ "value": "#000000",
5
+ "uuid": "spec008-dark-4000-8000-000000000001"
6
+ },
7
+ {
8
+ "name": {
9
+ "property": "background-color-default",
10
+ "colorScheme": "wireframe"
11
+ },
12
+ "value": "#f5f5f5",
13
+ "uuid": "spec008-wire-4000-8000-000000000002"
14
+ }
15
+ ]
@@ -0,0 +1,10 @@
1
+ {
2
+ "layer": 2,
3
+ "errors": [
4
+ {
5
+ "rule_id": "SPEC-010",
6
+ "severity": "error",
7
+ "message_pattern": "replaced_by target UUID not found"
8
+ }
9
+ ]
10
+ }
@@ -0,0 +1,9 @@
1
+ [
2
+ {
3
+ "name": { "property": "deprecated-token" },
4
+ "value": "#ffffff",
5
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001",
6
+ "deprecated": "3.0.0",
7
+ "replaced_by": "bbbbbbbb-9999-4000-8000-000000000099"
8
+ }
9
+ ]
@@ -0,0 +1,10 @@
1
+ {
2
+ "layer": 2,
3
+ "errors": [
4
+ {
5
+ "rule_id": "SPEC-011",
6
+ "severity": "error",
7
+ "message_pattern": "replaced_by is an array but deprecated_comment is missing"
8
+ }
9
+ ]
10
+ }
@@ -0,0 +1,22 @@
1
+ [
2
+ {
3
+ "name": { "property": "split-token" },
4
+ "value": "#ffffff",
5
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001",
6
+ "deprecated": "3.0.0",
7
+ "replaced_by": [
8
+ "aaaaaaaa-0002-4000-8000-000000000001",
9
+ "aaaaaaaa-0003-4000-8000-000000000001"
10
+ ]
11
+ },
12
+ {
13
+ "name": { "property": "replacement-a" },
14
+ "value": "#eeeeee",
15
+ "uuid": "aaaaaaaa-0002-4000-8000-000000000001"
16
+ },
17
+ {
18
+ "name": { "property": "replacement-b" },
19
+ "value": "#dddddd",
20
+ "uuid": "aaaaaaaa-0003-4000-8000-000000000001"
21
+ }
22
+ ]
@@ -0,0 +1,10 @@
1
+ {
2
+ "layer": 2,
3
+ "errors": [
4
+ {
5
+ "rule_id": "SPEC-012",
6
+ "severity": "error",
7
+ "message_pattern": "has replaced_by but is not marked deprecated"
8
+ }
9
+ ]
10
+ }
@@ -0,0 +1,13 @@
1
+ [
2
+ {
3
+ "name": { "property": "not-deprecated-but-replaced" },
4
+ "value": "#ffffff",
5
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001",
6
+ "replaced_by": "aaaaaaaa-0002-4000-8000-000000000001"
7
+ },
8
+ {
9
+ "name": { "property": "replacement" },
10
+ "value": "#000000",
11
+ "uuid": "aaaaaaaa-0002-4000-8000-000000000001"
12
+ }
13
+ ]
@@ -0,0 +1,10 @@
1
+ {
2
+ "layer": 2,
3
+ "errors": [
4
+ {
5
+ "rule_id": "SPEC-013",
6
+ "severity": "error",
7
+ "message_pattern": "has plannedRemoval but is not marked deprecated"
8
+ }
9
+ ]
10
+ }
@@ -0,0 +1,8 @@
1
+ [
2
+ {
3
+ "name": { "property": "not-deprecated-but-planned-removal" },
4
+ "value": "#ffffff",
5
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001",
6
+ "plannedRemoval": "4.0.0"
7
+ }
8
+ ]
@@ -0,0 +1,10 @@
1
+ {
2
+ "layer": 2,
3
+ "errors": [
4
+ {
5
+ "rule_id": "SPEC-014",
6
+ "severity": "error",
7
+ "message_pattern": "lastModified .* earlier than introduced"
8
+ }
9
+ ]
10
+ }
@@ -0,0 +1,9 @@
1
+ [
2
+ {
3
+ "name": { "property": "last-modified-before-introduced" },
4
+ "value": "#ffffff",
5
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001",
6
+ "introduced": "2.0.0",
7
+ "lastModified": "1.5.0"
8
+ }
9
+ ]
@@ -0,0 +1 @@
1
+ ["aaaaaaaa-0001-4000-8000-000000000001"]
@@ -0,0 +1,17 @@
1
+ [
2
+ {
3
+ "name": { "property": "bg", "component": "button", "state": "hover" },
4
+ "value": "#aaaaaa",
5
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001"
6
+ },
7
+ {
8
+ "name": { "property": "bg", "component": "button" },
9
+ "value": "#bbbbbb",
10
+ "uuid": "aaaaaaaa-0002-4000-8000-000000000001"
11
+ },
12
+ {
13
+ "name": { "property": "bg", "component": "checkbox", "state": "hover" },
14
+ "value": "#cccccc",
15
+ "uuid": "aaaaaaaa-0003-4000-8000-000000000001"
16
+ }
17
+ ]
@@ -0,0 +1 @@
1
+ component=button,state=hover
@@ -0,0 +1 @@
1
+ ["aaaaaaaa-0001-4000-8000-000000000001", "aaaaaaaa-0003-4000-8000-000000000001"]
@@ -0,0 +1,22 @@
1
+ [
2
+ {
3
+ "name": { "property": "bg", "component": "button", "state": "hover" },
4
+ "value": "#aaaaaa",
5
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001"
6
+ },
7
+ {
8
+ "name": { "property": "bg", "component": "button", "state": "default" },
9
+ "value": "#bbbbbb",
10
+ "uuid": "aaaaaaaa-0002-4000-8000-000000000001"
11
+ },
12
+ {
13
+ "name": { "property": "bg", "component": "checkbox", "state": "default" },
14
+ "value": "#cccccc",
15
+ "uuid": "aaaaaaaa-0003-4000-8000-000000000001"
16
+ },
17
+ {
18
+ "name": { "property": "bg", "component": "slider", "state": "hover" },
19
+ "value": "#dddddd",
20
+ "uuid": "aaaaaaaa-0004-4000-8000-000000000001"
21
+ }
22
+ ]
@@ -0,0 +1 @@
1
+ component=button,state=hover|component=checkbox
@@ -0,0 +1 @@
1
+ ["aaaaaaaa-0001-4000-8000-000000000001", "aaaaaaaa-0002-4000-8000-000000000001", "aaaaaaaa-0003-4000-8000-000000000001"]
@@ -0,0 +1,17 @@
1
+ [
2
+ {
3
+ "name": { "property": "alpha" },
4
+ "value": "1",
5
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001"
6
+ },
7
+ {
8
+ "name": { "property": "beta" },
9
+ "value": "2",
10
+ "uuid": "aaaaaaaa-0002-4000-8000-000000000001"
11
+ },
12
+ {
13
+ "name": { "property": "gamma" },
14
+ "value": "3",
15
+ "uuid": "aaaaaaaa-0003-4000-8000-000000000001"
16
+ }
17
+ ]
@@ -0,0 +1 @@
1
+ ["aaaaaaaa-0002-4000-8000-000000000001", "aaaaaaaa-0003-4000-8000-000000000001"]
@@ -0,0 +1,17 @@
1
+ [
2
+ {
3
+ "name": { "property": "bg", "colorScheme": "light" },
4
+ "value": "#ffffff",
5
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001"
6
+ },
7
+ {
8
+ "name": { "property": "bg", "colorScheme": "dark" },
9
+ "value": "#000000",
10
+ "uuid": "aaaaaaaa-0002-4000-8000-000000000001"
11
+ },
12
+ {
13
+ "name": { "property": "bg" },
14
+ "value": "#888888",
15
+ "uuid": "aaaaaaaa-0003-4000-8000-000000000001"
16
+ }
17
+ ]
@@ -0,0 +1 @@
1
+ colorScheme!=light
@@ -0,0 +1,7 @@
1
+ [
2
+ {
3
+ "name": { "property": "bg", "component": "button" },
4
+ "value": "#ffffff",
5
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001"
6
+ }
7
+ ]
@@ -0,0 +1 @@
1
+ component=nonexistent
@@ -0,0 +1 @@
1
+ ["aaaaaaaa-0001-4000-8000-000000000001", "aaaaaaaa-0002-4000-8000-000000000001"]
@@ -0,0 +1,17 @@
1
+ [
2
+ {
3
+ "name": { "property": "bg", "component": "button" },
4
+ "value": "#aaaaaa",
5
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001"
6
+ },
7
+ {
8
+ "name": { "property": "bg", "component": "checkbox" },
9
+ "value": "#bbbbbb",
10
+ "uuid": "aaaaaaaa-0002-4000-8000-000000000001"
11
+ },
12
+ {
13
+ "name": { "property": "bg", "component": "slider" },
14
+ "value": "#cccccc",
15
+ "uuid": "aaaaaaaa-0003-4000-8000-000000000001"
16
+ }
17
+ ]
@@ -0,0 +1 @@
1
+ component=button|component=checkbox
@@ -0,0 +1 @@
1
+ ["aaaaaaaa-0001-4000-8000-000000000001"]
@@ -0,0 +1,14 @@
1
+ [
2
+ {
3
+ "name": { "property": "bg" },
4
+ "$schema": "https://example.com/color.json",
5
+ "value": "#ffffff",
6
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001"
7
+ },
8
+ {
9
+ "name": { "property": "spacing" },
10
+ "$schema": "https://example.com/dimension.json",
11
+ "value": "8px",
12
+ "uuid": "aaaaaaaa-0002-4000-8000-000000000001"
13
+ }
14
+ ]
@@ -0,0 +1 @@
1
+ $schema=https://example.com/color.json
@@ -0,0 +1 @@
1
+ ["aaaaaaaa-0001-4000-8000-000000000001"]
@@ -0,0 +1,17 @@
1
+ [
2
+ {
3
+ "name": { "property": "bg", "component": "button" },
4
+ "value": "#ffffff",
5
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001"
6
+ },
7
+ {
8
+ "name": { "property": "bg", "component": "checkbox" },
9
+ "value": "#eeeeee",
10
+ "uuid": "aaaaaaaa-0002-4000-8000-000000000001"
11
+ },
12
+ {
13
+ "name": { "property": "bg", "component": "slider" },
14
+ "value": "#dddddd",
15
+ "uuid": "aaaaaaaa-0003-4000-8000-000000000001"
16
+ }
17
+ ]
@@ -0,0 +1 @@
1
+ component=button
@@ -0,0 +1 @@
1
+ ["aaaaaaaa-0001-4000-8000-000000000001", "aaaaaaaa-0002-4000-8000-000000000001"]
@@ -0,0 +1,17 @@
1
+ [
2
+ {
3
+ "name": { "property": "background-color" },
4
+ "value": "#ffffff",
5
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001"
6
+ },
7
+ {
8
+ "name": { "property": "border-color" },
9
+ "value": "#cccccc",
10
+ "uuid": "aaaaaaaa-0002-4000-8000-000000000001"
11
+ },
12
+ {
13
+ "name": { "property": "font-size" },
14
+ "value": "14px",
15
+ "uuid": "aaaaaaaa-0003-4000-8000-000000000001"
16
+ }
17
+ ]
@@ -0,0 +1 @@
1
+ property=*-color
@@ -0,0 +1 @@
1
+ ["aaaaaaaa-0001-4000-8000-000000000001", "aaaaaaaa-0002-4000-8000-000000000001"]
@@ -0,0 +1,17 @@
1
+ [
2
+ {
3
+ "name": { "property": "color-default" },
4
+ "value": "#ffffff",
5
+ "uuid": "aaaaaaaa-0001-4000-8000-000000000001"
6
+ },
7
+ {
8
+ "name": { "property": "color-hover" },
9
+ "value": "#eeeeee",
10
+ "uuid": "aaaaaaaa-0002-4000-8000-000000000001"
11
+ },
12
+ {
13
+ "name": { "property": "font-size" },
14
+ "value": "14px",
15
+ "uuid": "aaaaaaaa-0003-4000-8000-000000000001"
16
+ }
17
+ ]
@@ -0,0 +1 @@
1
+ property=color-*
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "colorScheme",
3
+ "modes": ["light", "dark", "wireframe"],
4
+ "default": "light"
5
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "description": "Cascade selects the winning token first (by specificity). Alias chains ($ref) are resolved AFTER the cascade winner is determined — not before. The winner here is the dark alias token; following its $ref yields blue-600.",
3
+ "resolved": true,
4
+ "expected_uuid": "cccccccc-0001-4000-8000-000000000001"
5
+ }
@@ -0,0 +1,12 @@
1
+ [
2
+ {
3
+ "name": { "property": "action-color-default", "colorScheme": "dark" },
4
+ "$ref": "cccccccc-0002-4000-8000-000000000002",
5
+ "uuid": "cccccccc-0001-4000-8000-000000000001"
6
+ },
7
+ {
8
+ "name": { "property": "blue-600" },
9
+ "value": "#0050b3",
10
+ "uuid": "cccccccc-0002-4000-8000-000000000002"
11
+ }
12
+ ]
@@ -0,0 +1,4 @@
1
+ {
2
+ "property": "action-color-default",
3
+ "context": { "colorScheme": "dark" }
4
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "name": "colorScheme",
3
+ "modes": ["light", "dark", "wireframe"],
4
+ "default": "light"
5
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "description": "When only a base (dimensionless) variant exists, it MUST match any context. Querying for 'dark' resolves to the base token.",
3
+ "resolved": true,
4
+ "expected_uuid": "aaaaaaaa-0001-4000-8000-000000000001"
5
+ }