abachrome 0.1.3 → 0.1.5
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/CHANGELOG.md +5 -0
- data/lib/abachrome/abc_decimal.rb +2 -0
- data/lib/abachrome/color.rb +11 -1
- data/lib/abachrome/color_mixins/blend.rb +3 -1
- data/lib/abachrome/color_mixins/lighten.rb +3 -1
- data/lib/abachrome/color_mixins/to_colorspace.rb +3 -1
- data/lib/abachrome/color_mixins/to_lrgb.rb +3 -1
- data/lib/abachrome/color_mixins/to_oklab.rb +3 -1
- data/lib/abachrome/color_mixins/to_oklch.rb +3 -1
- data/lib/abachrome/color_mixins/to_srgb.rb +3 -1
- data/lib/abachrome/color_models/hsv.rb +3 -1
- data/lib/abachrome/color_models/lms.rb +2 -0
- data/lib/abachrome/color_models/oklab.rb +3 -1
- data/lib/abachrome/color_models/oklch.rb +3 -1
- data/lib/abachrome/color_models/rgb.rb +3 -1
- data/lib/abachrome/color_models/xyz.rb +1 -0
- data/lib/abachrome/color_space.rb +3 -1
- data/lib/abachrome/converter.rb +2 -0
- data/lib/abachrome/converters/base.rb +3 -1
- data/lib/abachrome/converters/lms_to_lrgb.rb +2 -0
- data/lib/abachrome/converters/lms_to_srgb.rb +2 -0
- data/lib/abachrome/converters/lms_to_xyz.rb +2 -0
- data/lib/abachrome/converters/lrgb_to_lms.rb +1 -0
- data/lib/abachrome/converters/lrgb_to_oklab.rb +3 -1
- data/lib/abachrome/converters/lrgb_to_srgb.rb +3 -1
- data/lib/abachrome/converters/lrgb_to_xyz.rb +2 -0
- data/lib/abachrome/converters/oklab_to_lms.rb +1 -0
- data/lib/abachrome/converters/oklab_to_lrgb.rb +2 -0
- data/lib/abachrome/converters/oklab_to_oklch.rb +3 -1
- data/lib/abachrome/converters/oklab_to_srgb.rb +3 -1
- data/lib/abachrome/converters/oklch_to_lrgb.rb +2 -0
- data/lib/abachrome/converters/oklch_to_oklab.rb +2 -0
- data/lib/abachrome/converters/oklch_to_srgb.rb +3 -1
- data/lib/abachrome/converters/oklch_to_xyz.rb +2 -0
- data/lib/abachrome/converters/srgb_to_lrgb.rb +3 -1
- data/lib/abachrome/converters/srgb_to_oklab.rb +3 -1
- data/lib/abachrome/converters/srgb_to_oklch.rb +3 -1
- data/lib/abachrome/converters/xyz_to_lms.rb +2 -0
- data/lib/abachrome/converters/xyz_to_oklab.rb +2 -0
- data/lib/abachrome/gamut/base.rb +3 -1
- data/lib/abachrome/gamut/p3.rb +3 -1
- data/lib/abachrome/gamut/rec2020.rb +3 -1
- data/lib/abachrome/gamut/srgb.rb +3 -1
- data/lib/abachrome/illuminants/base.rb +3 -1
- data/lib/abachrome/illuminants/d50.rb +3 -1
- data/lib/abachrome/illuminants/d55.rb +3 -1
- data/lib/abachrome/illuminants/d65.rb +3 -1
- data/lib/abachrome/illuminants/d75.rb +3 -1
- data/lib/abachrome/named/css.rb +3 -1
- data/lib/abachrome/named/tailwind.rb +301 -0
- data/lib/abachrome/outputs/css.rb +3 -1
- data/lib/abachrome/palette.rb +3 -1
- data/lib/abachrome/palette_mixins/interpolate.rb +3 -1
- data/lib/abachrome/palette_mixins/resample.rb +3 -1
- data/lib/abachrome/palette_mixins/stretch_luminance.rb +3 -1
- data/lib/abachrome/parsers/hex.rb +3 -1
- data/lib/abachrome/parsers/tailwind.rb +45 -0
- data/lib/abachrome/to_abcd.rb +3 -1
- data/lib/abachrome/version.rb +3 -1
- data/lib/abachrome.rb +13 -2
- metadata +5 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9600763490f935450197f31388435f33c7d82c6dbcf854a8f2d01d8c5a301367
|
|
4
|
+
data.tar.gz: 0e5fb3f804f9dd1332e37311f1e63e17b50aa6e204b67944c5338e18879b0ee8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 660d4f26b871b165eeb5bbf17c380ebe1ec8ba950746b409d6e44a26dab04c3ae95e3e8952ff9e60dccaef6d7cc5d2386bd8e24730214cabbbab2593b1bbe128
|
|
7
|
+
data.tar.gz: 101a8a42a9509aedd238b96e5327441b4d4f79efc33715d857b88f8614f4d72ec1fe0c6af41f629f0c53b8db888ec7cc448ec603e6a0c4d379ff7a0b609af23f
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
## [Unreleased]
|
|
2
2
|
|
|
3
|
+
## [0.1.4] - 2025-10-12
|
|
4
|
+
|
|
5
|
+
- Added `Color#to_hex` method for convenient hex string output
|
|
6
|
+
- Added `Abachrome.parse` method for parsing CSS color strings
|
|
7
|
+
|
|
3
8
|
## [0.1.3] - 2025-10-12
|
|
4
9
|
|
|
5
10
|
- Enhanced color parsing with support for additional CSS formats
|
data/lib/abachrome/color.rb
CHANGED
|
@@ -134,7 +134,7 @@ module Abachrome
|
|
|
134
134
|
end
|
|
135
135
|
|
|
136
136
|
# Returns a string representation of the color in the format "ColorSpaceName(coord1, coord2, coord3, alpha)"
|
|
137
|
-
#
|
|
137
|
+
#
|
|
138
138
|
# @return [String] A human-readable string representation of the color showing its
|
|
139
139
|
# color space name, coordinate values rounded to 3 decimal places, and alpha value
|
|
140
140
|
# (if not 1.0)
|
|
@@ -144,6 +144,14 @@ module Abachrome
|
|
|
144
144
|
"#{color_space.name}(#{coord_str}#{alpha_str})"
|
|
145
145
|
end
|
|
146
146
|
|
|
147
|
+
# Returns the color as a hexadecimal string representation.
|
|
148
|
+
#
|
|
149
|
+
# @return [String] A hex color string in the format "#RRGGBB" or "#RRGGBBAA" if alpha < 1.0
|
|
150
|
+
def to_hex
|
|
151
|
+
require_relative "outputs/css"
|
|
152
|
+
Outputs::CSS.format_hex(self)
|
|
153
|
+
end
|
|
154
|
+
|
|
147
155
|
private
|
|
148
156
|
|
|
149
157
|
# Validates that the number of coordinates matches the expected number for the color space.
|
|
@@ -159,3 +167,5 @@ module Abachrome
|
|
|
159
167
|
end
|
|
160
168
|
end
|
|
161
169
|
end
|
|
170
|
+
|
|
171
|
+
# Copyright (c) 2025 Durable Programming, LLC. All rights reserved.
|
data/lib/abachrome/converter.rb
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Copyright (c) 2025 Durable Programming, LLC. All rights reserved.
|
data/lib/abachrome/gamut/base.rb
CHANGED
data/lib/abachrome/gamut/p3.rb
CHANGED
data/lib/abachrome/gamut/srgb.rb
CHANGED
data/lib/abachrome/named/css.rb
CHANGED
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
#
|
|
2
|
+
|
|
3
|
+
module Abachrome
|
|
4
|
+
module Named
|
|
5
|
+
module Tailwind
|
|
6
|
+
# Tailwind CSS v3 color palette
|
|
7
|
+
# Each color has shades from 50 to 950
|
|
8
|
+
|
|
9
|
+
COLORS = {
|
|
10
|
+
'slate' => {
|
|
11
|
+
'50' => [248, 250, 252],
|
|
12
|
+
'100' => [241, 245, 249],
|
|
13
|
+
'200' => [226, 232, 240],
|
|
14
|
+
'300' => [203, 213, 225],
|
|
15
|
+
'400' => [148, 163, 184],
|
|
16
|
+
'500' => [100, 116, 139],
|
|
17
|
+
'600' => [71, 85, 105],
|
|
18
|
+
'700' => [51, 65, 85],
|
|
19
|
+
'800' => [30, 41, 59],
|
|
20
|
+
'900' => [15, 23, 42],
|
|
21
|
+
'950' => [2, 6, 23]
|
|
22
|
+
},
|
|
23
|
+
'gray' => {
|
|
24
|
+
'50' => [249, 250, 251],
|
|
25
|
+
'100' => [243, 244, 246],
|
|
26
|
+
'200' => [229, 231, 235],
|
|
27
|
+
'300' => [209, 213, 219],
|
|
28
|
+
'400' => [156, 163, 175],
|
|
29
|
+
'500' => [107, 114, 128],
|
|
30
|
+
'600' => [75, 85, 99],
|
|
31
|
+
'700' => [55, 65, 81],
|
|
32
|
+
'800' => [31, 41, 55],
|
|
33
|
+
'900' => [17, 24, 39],
|
|
34
|
+
'950' => [3, 7, 18]
|
|
35
|
+
},
|
|
36
|
+
'zinc' => {
|
|
37
|
+
'50' => [250, 250, 250],
|
|
38
|
+
'100' => [244, 244, 245],
|
|
39
|
+
'200' => [228, 228, 231],
|
|
40
|
+
'300' => [212, 212, 216],
|
|
41
|
+
'400' => [161, 161, 170],
|
|
42
|
+
'500' => [113, 113, 122],
|
|
43
|
+
'600' => [82, 82, 91],
|
|
44
|
+
'700' => [63, 63, 70],
|
|
45
|
+
'800' => [39, 39, 42],
|
|
46
|
+
'900' => [24, 24, 27],
|
|
47
|
+
'950' => [9, 9, 11]
|
|
48
|
+
},
|
|
49
|
+
'neutral' => {
|
|
50
|
+
'50' => [250, 250, 250],
|
|
51
|
+
'100' => [245, 245, 245],
|
|
52
|
+
'200' => [229, 229, 229],
|
|
53
|
+
'300' => [212, 212, 212],
|
|
54
|
+
'400' => [163, 163, 163],
|
|
55
|
+
'500' => [115, 115, 115],
|
|
56
|
+
'600' => [82, 82, 82],
|
|
57
|
+
'700' => [64, 64, 64],
|
|
58
|
+
'800' => [38, 38, 38],
|
|
59
|
+
'900' => [23, 23, 23],
|
|
60
|
+
'950' => [10, 10, 10]
|
|
61
|
+
},
|
|
62
|
+
'stone' => {
|
|
63
|
+
'50' => [250, 250, 249],
|
|
64
|
+
'100' => [245, 245, 244],
|
|
65
|
+
'200' => [231, 229, 228],
|
|
66
|
+
'300' => [214, 211, 209],
|
|
67
|
+
'400' => [168, 162, 158],
|
|
68
|
+
'500' => [120, 113, 108],
|
|
69
|
+
'600' => [87, 83, 78],
|
|
70
|
+
'700' => [68, 64, 60],
|
|
71
|
+
'800' => [41, 37, 36],
|
|
72
|
+
'900' => [28, 25, 23],
|
|
73
|
+
'950' => [12, 10, 9]
|
|
74
|
+
},
|
|
75
|
+
'red' => {
|
|
76
|
+
'50' => [254, 242, 242],
|
|
77
|
+
'100' => [254, 226, 226],
|
|
78
|
+
'200' => [254, 202, 202],
|
|
79
|
+
'300' => [252, 165, 165],
|
|
80
|
+
'400' => [248, 113, 113],
|
|
81
|
+
'500' => [239, 68, 68],
|
|
82
|
+
'600' => [220, 38, 38],
|
|
83
|
+
'700' => [185, 28, 28],
|
|
84
|
+
'800' => [153, 27, 27],
|
|
85
|
+
'900' => [127, 29, 29],
|
|
86
|
+
'950' => [69, 10, 10]
|
|
87
|
+
},
|
|
88
|
+
'orange' => {
|
|
89
|
+
'50' => [255, 247, 237],
|
|
90
|
+
'100' => [255, 237, 213],
|
|
91
|
+
'200' => [254, 215, 170],
|
|
92
|
+
'300' => [253, 186, 116],
|
|
93
|
+
'400' => [251, 146, 60],
|
|
94
|
+
'500' => [249, 115, 22],
|
|
95
|
+
'600' => [234, 88, 12],
|
|
96
|
+
'700' => [194, 65, 12],
|
|
97
|
+
'800' => [154, 52, 18],
|
|
98
|
+
'900' => [124, 45, 18],
|
|
99
|
+
'950' => [67, 20, 7]
|
|
100
|
+
},
|
|
101
|
+
'amber' => {
|
|
102
|
+
'50' => [255, 251, 235],
|
|
103
|
+
'100' => [254, 243, 199],
|
|
104
|
+
'200' => [253, 230, 138],
|
|
105
|
+
'300' => [252, 211, 77],
|
|
106
|
+
'400' => [251, 191, 36],
|
|
107
|
+
'500' => [245, 158, 11],
|
|
108
|
+
'600' => [217, 119, 6],
|
|
109
|
+
'700' => [180, 83, 9],
|
|
110
|
+
'800' => [146, 64, 14],
|
|
111
|
+
'900' => [120, 53, 15],
|
|
112
|
+
'950' => [69, 26, 3]
|
|
113
|
+
},
|
|
114
|
+
'yellow' => {
|
|
115
|
+
'50' => [254, 252, 232],
|
|
116
|
+
'100' => [254, 249, 195],
|
|
117
|
+
'200' => [254, 240, 138],
|
|
118
|
+
'300' => [253, 224, 71],
|
|
119
|
+
'400' => [250, 204, 21],
|
|
120
|
+
'500' => [234, 179, 8],
|
|
121
|
+
'600' => [202, 138, 4],
|
|
122
|
+
'700' => [161, 98, 7],
|
|
123
|
+
'800' => [133, 77, 14],
|
|
124
|
+
'900' => [113, 63, 18],
|
|
125
|
+
'950' => [66, 32, 6]
|
|
126
|
+
},
|
|
127
|
+
'lime' => {
|
|
128
|
+
'50' => [247, 254, 231],
|
|
129
|
+
'100' => [236, 252, 203],
|
|
130
|
+
'200' => [217, 249, 157],
|
|
131
|
+
'300' => [190, 242, 100],
|
|
132
|
+
'400' => [163, 230, 53],
|
|
133
|
+
'500' => [132, 204, 22],
|
|
134
|
+
'600' => [101, 163, 13],
|
|
135
|
+
'700' => [77, 124, 15],
|
|
136
|
+
'800' => [63, 98, 18],
|
|
137
|
+
'900' => [54, 83, 20],
|
|
138
|
+
'950' => [26, 46, 5]
|
|
139
|
+
},
|
|
140
|
+
'green' => {
|
|
141
|
+
'50' => [240, 253, 244],
|
|
142
|
+
'100' => [220, 252, 231],
|
|
143
|
+
'200' => [187, 247, 208],
|
|
144
|
+
'300' => [134, 239, 172],
|
|
145
|
+
'400' => [74, 222, 128],
|
|
146
|
+
'500' => [34, 197, 94],
|
|
147
|
+
'600' => [22, 163, 74],
|
|
148
|
+
'700' => [21, 128, 61],
|
|
149
|
+
'800' => [22, 101, 52],
|
|
150
|
+
'900' => [20, 83, 45],
|
|
151
|
+
'950' => [5, 46, 22]
|
|
152
|
+
},
|
|
153
|
+
'emerald' => {
|
|
154
|
+
'50' => [236, 253, 245],
|
|
155
|
+
'100' => [209, 250, 229],
|
|
156
|
+
'200' => [167, 243, 208],
|
|
157
|
+
'300' => [110, 231, 183],
|
|
158
|
+
'400' => [52, 211, 153],
|
|
159
|
+
'500' => [16, 185, 129],
|
|
160
|
+
'600' => [5, 150, 105],
|
|
161
|
+
'700' => [4, 120, 87],
|
|
162
|
+
'800' => [6, 95, 70],
|
|
163
|
+
'900' => [6, 78, 59],
|
|
164
|
+
'950' => [2, 44, 34]
|
|
165
|
+
},
|
|
166
|
+
'teal' => {
|
|
167
|
+
'50' => [240, 253, 250],
|
|
168
|
+
'100' => [204, 251, 241],
|
|
169
|
+
'200' => [153, 246, 228],
|
|
170
|
+
'300' => [94, 234, 212],
|
|
171
|
+
'400' => [45, 212, 191],
|
|
172
|
+
'500' => [20, 184, 166],
|
|
173
|
+
'600' => [13, 148, 136],
|
|
174
|
+
'700' => [15, 118, 110],
|
|
175
|
+
'800' => [17, 94, 89],
|
|
176
|
+
'900' => [19, 78, 74],
|
|
177
|
+
'950' => [4, 47, 46]
|
|
178
|
+
},
|
|
179
|
+
'cyan' => {
|
|
180
|
+
'50' => [236, 254, 255],
|
|
181
|
+
'100' => [207, 250, 254],
|
|
182
|
+
'200' => [165, 243, 252],
|
|
183
|
+
'300' => [103, 232, 249],
|
|
184
|
+
'400' => [34, 211, 238],
|
|
185
|
+
'500' => [6, 182, 212],
|
|
186
|
+
'600' => [8, 145, 178],
|
|
187
|
+
'700' => [14, 116, 144],
|
|
188
|
+
'800' => [21, 94, 117],
|
|
189
|
+
'900' => [22, 78, 99],
|
|
190
|
+
'950' => [8, 51, 68]
|
|
191
|
+
},
|
|
192
|
+
'sky' => {
|
|
193
|
+
'50' => [240, 249, 255],
|
|
194
|
+
'100' => [224, 242, 254],
|
|
195
|
+
'200' => [186, 230, 253],
|
|
196
|
+
'300' => [125, 211, 252],
|
|
197
|
+
'400' => [56, 189, 248],
|
|
198
|
+
'500' => [14, 165, 233],
|
|
199
|
+
'600' => [2, 132, 199],
|
|
200
|
+
'700' => [3, 105, 161],
|
|
201
|
+
'800' => [7, 89, 133],
|
|
202
|
+
'900' => [12, 74, 110],
|
|
203
|
+
'950' => [8, 47, 73]
|
|
204
|
+
},
|
|
205
|
+
'blue' => {
|
|
206
|
+
'50' => [239, 246, 255],
|
|
207
|
+
'100' => [219, 234, 254],
|
|
208
|
+
'200' => [191, 219, 254],
|
|
209
|
+
'300' => [147, 197, 253],
|
|
210
|
+
'400' => [96, 165, 250],
|
|
211
|
+
'500' => [59, 130, 246],
|
|
212
|
+
'600' => [37, 99, 235],
|
|
213
|
+
'700' => [29, 78, 216],
|
|
214
|
+
'800' => [30, 64, 175],
|
|
215
|
+
'900' => [30, 58, 138],
|
|
216
|
+
'950' => [23, 37, 84]
|
|
217
|
+
},
|
|
218
|
+
'indigo' => {
|
|
219
|
+
'50' => [238, 242, 255],
|
|
220
|
+
'100' => [224, 231, 255],
|
|
221
|
+
'200' => [199, 210, 254],
|
|
222
|
+
'300' => [165, 180, 252],
|
|
223
|
+
'400' => [129, 140, 248],
|
|
224
|
+
'500' => [99, 102, 241],
|
|
225
|
+
'600' => [79, 70, 229],
|
|
226
|
+
'700' => [67, 56, 202],
|
|
227
|
+
'800' => [55, 48, 163],
|
|
228
|
+
'900' => [49, 46, 129],
|
|
229
|
+
'950' => [30, 27, 75]
|
|
230
|
+
},
|
|
231
|
+
'violet' => {
|
|
232
|
+
'50' => [245, 243, 255],
|
|
233
|
+
'100' => [237, 233, 254],
|
|
234
|
+
'200' => [221, 214, 254],
|
|
235
|
+
'300' => [196, 181, 253],
|
|
236
|
+
'400' => [167, 139, 250],
|
|
237
|
+
'500' => [139, 92, 246],
|
|
238
|
+
'600' => [124, 58, 237],
|
|
239
|
+
'700' => [109, 40, 217],
|
|
240
|
+
'800' => [91, 33, 182],
|
|
241
|
+
'900' => [76, 29, 149],
|
|
242
|
+
'950' => [46, 16, 101]
|
|
243
|
+
},
|
|
244
|
+
'purple' => {
|
|
245
|
+
'50' => [250, 245, 255],
|
|
246
|
+
'100' => [243, 232, 255],
|
|
247
|
+
'200' => [233, 213, 255],
|
|
248
|
+
'300' => [216, 180, 254],
|
|
249
|
+
'400' => [192, 132, 252],
|
|
250
|
+
'500' => [168, 85, 247],
|
|
251
|
+
'600' => [147, 51, 234],
|
|
252
|
+
'700' => [126, 34, 206],
|
|
253
|
+
'800' => [107, 33, 168],
|
|
254
|
+
'900' => [88, 28, 135],
|
|
255
|
+
'950' => [59, 7, 100]
|
|
256
|
+
},
|
|
257
|
+
'fuchsia' => {
|
|
258
|
+
'50' => [253, 244, 255],
|
|
259
|
+
'100' => [250, 232, 255],
|
|
260
|
+
'200' => [245, 208, 254],
|
|
261
|
+
'300' => [240, 171, 252],
|
|
262
|
+
'400' => [232, 121, 249],
|
|
263
|
+
'500' => [217, 70, 239],
|
|
264
|
+
'600' => [192, 38, 211],
|
|
265
|
+
'700' => [162, 28, 175],
|
|
266
|
+
'800' => [134, 25, 143],
|
|
267
|
+
'900' => [112, 26, 117],
|
|
268
|
+
'950' => [74, 4, 78]
|
|
269
|
+
},
|
|
270
|
+
'pink' => {
|
|
271
|
+
'50' => [253, 242, 248],
|
|
272
|
+
'100' => [252, 231, 243],
|
|
273
|
+
'200' => [251, 207, 232],
|
|
274
|
+
'300' => [249, 168, 212],
|
|
275
|
+
'400' => [244, 114, 182],
|
|
276
|
+
'500' => [236, 72, 153],
|
|
277
|
+
'600' => [219, 39, 119],
|
|
278
|
+
'700' => [190, 24, 93],
|
|
279
|
+
'800' => [157, 23, 77],
|
|
280
|
+
'900' => [131, 24, 67],
|
|
281
|
+
'950' => [80, 7, 36]
|
|
282
|
+
},
|
|
283
|
+
'rose' => {
|
|
284
|
+
'50' => [255, 241, 242],
|
|
285
|
+
'100' => [255, 228, 230],
|
|
286
|
+
'200' => [254, 205, 211],
|
|
287
|
+
'300' => [253, 164, 175],
|
|
288
|
+
'400' => [251, 113, 133],
|
|
289
|
+
'500' => [244, 63, 94],
|
|
290
|
+
'600' => [225, 29, 72],
|
|
291
|
+
'700' => [190, 18, 60],
|
|
292
|
+
'800' => [159, 18, 57],
|
|
293
|
+
'900' => [136, 19, 55],
|
|
294
|
+
'950' => [76, 5, 25]
|
|
295
|
+
}
|
|
296
|
+
}.freeze
|
|
297
|
+
end
|
|
298
|
+
end
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
# Copyright (c) 2025 Durable Programming, LLC. All rights reserved.
|
data/lib/abachrome/palette.rb
CHANGED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#
|
|
2
|
+
|
|
3
|
+
module Abachrome
|
|
4
|
+
module Parsers
|
|
5
|
+
class Tailwind
|
|
6
|
+
# Matches Tailwind color patterns like:
|
|
7
|
+
# - gray-400
|
|
8
|
+
# - blue-900/20 (with opacity)
|
|
9
|
+
# - slate-50
|
|
10
|
+
TAILWIND_PATTERN = /^([a-z]+)-(\d+)(?:\/(\d+(?:\.\d+)?))?$/
|
|
11
|
+
|
|
12
|
+
def self.parse(input)
|
|
13
|
+
match = input.match(TAILWIND_PATTERN)
|
|
14
|
+
return nil unless match
|
|
15
|
+
|
|
16
|
+
color_name = match[1]
|
|
17
|
+
shade = match[2]
|
|
18
|
+
opacity = match[3]
|
|
19
|
+
|
|
20
|
+
# Look up the color in the Tailwind color palette
|
|
21
|
+
color_shades = Named::Tailwind::COLORS[color_name]
|
|
22
|
+
return nil unless color_shades
|
|
23
|
+
|
|
24
|
+
rgb_values = color_shades[shade]
|
|
25
|
+
return nil unless rgb_values
|
|
26
|
+
|
|
27
|
+
# Convert RGB values to 0-1 range
|
|
28
|
+
r, g, b = rgb_values.map { |v| v / 255.0 }
|
|
29
|
+
|
|
30
|
+
# Calculate alpha from opacity percentage if provided
|
|
31
|
+
alpha = if opacity
|
|
32
|
+
opacity_value = opacity.to_f
|
|
33
|
+
# Opacity in Tailwind is a percentage (0-100)
|
|
34
|
+
opacity_value / 100.0
|
|
35
|
+
else
|
|
36
|
+
1.0
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
Color.from_rgb(r, g, b, alpha)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Copyright (c) 2025 Durable Programming, LLC. All rights reserved.
|
data/lib/abachrome/to_abcd.rb
CHANGED
data/lib/abachrome/version.rb
CHANGED
data/lib/abachrome.rb
CHANGED
|
@@ -129,7 +129,7 @@ module Abachrome
|
|
|
129
129
|
end
|
|
130
130
|
|
|
131
131
|
# Creates a color object from a CSS color name.
|
|
132
|
-
#
|
|
132
|
+
#
|
|
133
133
|
# @param color_name [String] The CSS color name (e.g., 'red', 'blue', 'cornflowerblue').
|
|
134
134
|
# Case-insensitive.
|
|
135
135
|
# @return [Abachrome::Color, nil] A color object in the RGB color space if the name is valid,
|
|
@@ -141,6 +141,15 @@ module Abachrome
|
|
|
141
141
|
from_rgb(*rgb_values.map { |v| v / 255.0 })
|
|
142
142
|
end
|
|
143
143
|
|
|
144
|
+
# Parses a CSS color string and returns a Color object.
|
|
145
|
+
#
|
|
146
|
+
# @param css_string [String] The CSS color string to parse (e.g., "#ff0000", "rgb(255, 0, 0)", "red")
|
|
147
|
+
# @return [Abachrome::Color, nil] A Color object if parsing succeeds, nil otherwise
|
|
148
|
+
def parse(css_string)
|
|
149
|
+
require_relative "abachrome/parsers/css"
|
|
150
|
+
Parsers::CSS.parse(css_string)
|
|
151
|
+
end
|
|
152
|
+
|
|
144
153
|
# Convert a color from its current color space to another color space.
|
|
145
154
|
#
|
|
146
155
|
# @param color [Abachrome::Color] The color object to convert
|
|
@@ -172,4 +181,6 @@ module Abachrome
|
|
|
172
181
|
def register_converter(from_space, to_space, converter)
|
|
173
182
|
Converter.register(from_space, to_space, converter)
|
|
174
183
|
end
|
|
175
|
-
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# Copyright (c) 2025 Durable Programming, LLC. All rights reserved.
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: abachrome
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Durable Programming
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date: 1980-01-
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: dry-inflector
|
|
@@ -97,6 +96,7 @@ files:
|
|
|
97
96
|
- lib/abachrome/illuminants/d65.rb
|
|
98
97
|
- lib/abachrome/illuminants/d75.rb
|
|
99
98
|
- lib/abachrome/named/css.rb
|
|
99
|
+
- lib/abachrome/named/tailwind.rb
|
|
100
100
|
- lib/abachrome/outputs/css.rb
|
|
101
101
|
- lib/abachrome/palette.rb
|
|
102
102
|
- lib/abachrome/palette_mixins/interpolate.rb
|
|
@@ -104,6 +104,7 @@ files:
|
|
|
104
104
|
- lib/abachrome/palette_mixins/stretch_luminance.rb
|
|
105
105
|
- lib/abachrome/parsers/css.rb
|
|
106
106
|
- lib/abachrome/parsers/hex.rb
|
|
107
|
+
- lib/abachrome/parsers/tailwind.rb
|
|
107
108
|
- lib/abachrome/to_abcd.rb
|
|
108
109
|
- lib/abachrome/version.rb
|
|
109
110
|
- logo.png
|
|
@@ -117,7 +118,6 @@ metadata:
|
|
|
117
118
|
homepage_uri: https://github.com/durableprogramming/abachrome
|
|
118
119
|
source_code_uri: https://github.com/durableprogramming/abachrome
|
|
119
120
|
changelog_uri: https://github.com/durableprogramming/abachrome/blob/main/CHANGELOG.md
|
|
120
|
-
post_install_message:
|
|
121
121
|
rdoc_options: []
|
|
122
122
|
require_paths:
|
|
123
123
|
- lib
|
|
@@ -132,8 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
132
132
|
- !ruby/object:Gem::Version
|
|
133
133
|
version: '0'
|
|
134
134
|
requirements: []
|
|
135
|
-
rubygems_version: 3.
|
|
136
|
-
signing_key:
|
|
135
|
+
rubygems_version: 3.7.1
|
|
137
136
|
specification_version: 4
|
|
138
137
|
summary: A Ruby gem for parsing, manipulating, and managing colors
|
|
139
138
|
test_files: []
|