cleo_design_tokens 0.2.4 → 0.3.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.
- checksums.yaml +4 -4
- data/lib/cleo_design_tokens/configuration.rb +3 -2
- data/lib/cleo_design_tokens/lookup_builder.rb +28 -5
- data/package.json +1 -1
- data/tokens/color/primitives.json +636 -106
- data/tokens/color/semantic.json +136 -827
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0a44c38f546ec1f31af8273066fa31c77538d6e9812225b0da0a763e5622afa6
|
|
4
|
+
data.tar.gz: 4a141717fc6df4973d260296903ce7e0f95525c6f9caee385ddf166877e7b615
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9049839cd022f9c7cb925a3c443ccad2e0ae2145d68d463bfc19afc2cc55564e52b496f09c6c9cb93a3835a73d25cc975e3b6c8c078cdaa3afc02901abec67dc
|
|
7
|
+
data.tar.gz: 273d641074a554f32656ff6beabf7e723a19f7dff52506f1a57f7119b4821a3fcf6bbeb76a4d3bf7ec0c10d9edfcdd1bfd520284f1bc6bdcb2e882fde9187f87
|
|
@@ -48,9 +48,10 @@ module CleoDesignTokens
|
|
|
48
48
|
private
|
|
49
49
|
|
|
50
50
|
def build_palette(experience)
|
|
51
|
+
primitives = LookupBuilder.build_lookup(@primitives, experience: experience).freeze
|
|
51
52
|
Palette.new(
|
|
52
|
-
primitives:
|
|
53
|
-
semantic: LookupBuilder.build_semantic_lookup(@semantic, experience: experience).freeze,
|
|
53
|
+
primitives: primitives,
|
|
54
|
+
semantic: LookupBuilder.build_semantic_lookup(@semantic, experience: experience, primitives: primitives).freeze,
|
|
54
55
|
)
|
|
55
56
|
end
|
|
56
57
|
end
|
|
@@ -21,8 +21,21 @@ module CleoDesignTokens
|
|
|
21
21
|
|
|
22
22
|
# Flattens `semantic.json` into a key -> SemanticEntry lookup, one entry
|
|
23
23
|
# per role — the theme axis lives inside the entry, not in the key.
|
|
24
|
-
def self.build_semantic_lookup(tree, experience: :current)
|
|
25
|
-
|
|
24
|
+
def self.build_semantic_lookup(tree, experience: :current, primitives: nil)
|
|
25
|
+
schema = tree["$schema"]
|
|
26
|
+
if tree.key?("$schema") && schema != "cleo-semantic-references/1"
|
|
27
|
+
raise UnknownExperienceError, "unsupported semantic schema: #{schema.inspect}"
|
|
28
|
+
end
|
|
29
|
+
references = schema == "cleo-semantic-references/1"
|
|
30
|
+
flatten_tree(tree) do |leaf, key|
|
|
31
|
+
snapshots = leaf["$experiences"]
|
|
32
|
+
if references && leaf.key?("$experiences") && !snapshots.is_a?(Hash)
|
|
33
|
+
raise UnknownExperienceError, "invalid semantic experiences for #{key.inspect}"
|
|
34
|
+
end
|
|
35
|
+
shared = references && (experience.to_s == "current" || !snapshots.is_a?(Hash) || !snapshots.key?("cleoRefresh"))
|
|
36
|
+
snapshot = shared ? leaf : experience_leaf(leaf, experience, key)
|
|
37
|
+
semantic_entry(snapshot, experience, key, primitives: primitives, references: references)
|
|
38
|
+
end
|
|
26
39
|
end
|
|
27
40
|
|
|
28
41
|
# Walks `tree`, turning each leaf into a lookup entry via the block —
|
|
@@ -70,20 +83,20 @@ module CleoDesignTokens
|
|
|
70
83
|
end
|
|
71
84
|
private_class_method :experience_leaf
|
|
72
85
|
|
|
73
|
-
def self.semantic_entry(leaf, experience, key)
|
|
86
|
+
def self.semantic_entry(leaf, experience, key, primitives:, references:)
|
|
74
87
|
themes = {}
|
|
75
88
|
raw_themes = leaf["$themes"] || {}
|
|
76
89
|
unless raw_themes.is_a?(Hash)
|
|
77
90
|
raise UnknownExperienceError, "design token #{key.inspect} has invalid themes for experience #{experience.inspect}"
|
|
78
91
|
end
|
|
79
92
|
raw_themes.each do |theme, override|
|
|
80
|
-
value = override.is_a?(Hash) ? override
|
|
93
|
+
value = override.is_a?(Hash) ? semantic_value(override, key, primitives: primitives, references: references) : nil
|
|
81
94
|
unless value.is_a?(String)
|
|
82
95
|
raise UnknownExperienceError, "design token #{key.inspect} has no value for theme #{theme.inspect} in experience #{experience.inspect}"
|
|
83
96
|
end
|
|
84
97
|
themes[theme] = value.freeze
|
|
85
98
|
end
|
|
86
|
-
value = leaf
|
|
99
|
+
value = semantic_value(leaf, key, primitives: primitives, references: references)
|
|
87
100
|
if (leaf.key?("$value") && !value.is_a?(String)) || (value.nil? && themes.empty?)
|
|
88
101
|
raise UnknownExperienceError, "design token #{key.inspect} has no semantic values for experience #{experience.inspect}"
|
|
89
102
|
end
|
|
@@ -93,5 +106,15 @@ module CleoDesignTokens
|
|
|
93
106
|
SemanticEntry.new(value&.freeze, themes.freeze)
|
|
94
107
|
end
|
|
95
108
|
private_class_method :semantic_entry
|
|
109
|
+
|
|
110
|
+
def self.semantic_value(binding, key, primitives:, references:)
|
|
111
|
+
return binding["$value"] unless references && binding.key?("$ref")
|
|
112
|
+
ref = binding["$ref"]
|
|
113
|
+
if !ref.is_a?(String) || !primitives&.key?(ref) || binding.key?("$value")
|
|
114
|
+
raise UnknownExperienceError, "invalid primitive reference #{ref.inspect} for #{key.inspect}"
|
|
115
|
+
end
|
|
116
|
+
primitives.fetch(ref)
|
|
117
|
+
end
|
|
118
|
+
private_class_method :semantic_value
|
|
96
119
|
end
|
|
97
120
|
end
|