cli + tui to publish to leaflet (wip) & manage tasks, notes & watch/read lists 馃崈
charm
leaflet
readability
golang
1// This module contains colors from github.com/charmbracelet/x/exp/charmtone
2//
3// See: https://github.com/charmbracelet/x/blob/main/exp/charmtone/charmtone.go
4package ui
5
6import (
7 "fmt"
8 "image/color"
9 "slices"
10
11 "github.com/lucasb-eyer/go-colorful"
12)
13
14var _ color.Color = Key(0)
15
16// Key is a type for color keys.
17type Key int
18
19const (
20 Cumin Key = iota
21 Tang
22 Yam
23 Paprika
24 Bengal
25 Uni
26 Sriracha
27 Coral
28 Salmon
29 Chili
30 Cherry
31 Tuna
32 Macaron
33 Pony
34 Cheeky
35 Flamingo
36 Dolly
37 Blush
38 Urchin
39 Mochi
40 Lilac
41 Prince
42 Violet
43 Mauve
44 Grape
45 Plum
46 Orchid
47 Jelly
48 Charple
49 Hazy
50 Ox
51 Sapphire
52 Guppy
53 Oceania
54 Thunder
55 Anchovy
56 Damson
57 Malibu
58 Sardine
59 Zinc
60 Turtle
61 Lichen
62 Guac
63 Julep
64 Bok
65 Mustard
66 Citron
67 Zest
68 Pepper
69 BBQ
70 Charcoal
71 Iron
72 Oyster
73 Squid
74 Smoke
75 Ash
76 Salt
77 Butter
78
79 // Diffs: additions. The brightest color in this set is Julep, defined above.
80 Pickle
81 Gator
82 Spinach
83
84 // Diffs: deletions. The brightest color in this set is Cherry, defined above.
85 Pom
86 Steak
87 Toast
88
89 // Provisional.
90 NeueGuac
91 NeueZinc
92)
93
94func (k Key) Hex() string {
95 switch k {
96 case Cumin:
97 return "#BF976F"
98 case Tang:
99 return "#FF985A"
100 case Yam:
101 return "#FFB587"
102 case Paprika:
103 return "#D36C64"
104 case Bengal:
105 return "#FF6E63"
106 case Uni:
107 return "#FF937D"
108 case Sriracha:
109 return "#EB4268"
110 case Coral:
111 return "#FF577D"
112 case Salmon:
113 return "#FF7F90"
114 case Chili:
115 return "#E23080"
116 case Cherry:
117 return "#FF388B"
118 case Tuna:
119 return "#FF6DAA"
120 case Macaron:
121 return "#E940B0"
122 case Pony:
123 return "#FF4FBF"
124 case Cheeky:
125 return "#FF79D0"
126 case Flamingo:
127 return "#F947E3"
128 case Dolly:
129 return "#FF60FF"
130 case Blush:
131 return "#FF84FF"
132 case Urchin:
133 return "#C337E0"
134 case Mochi:
135 return "#EB5DFF"
136 case Lilac:
137 return "#F379FF"
138 case Prince:
139 return "#9C35E1"
140 case Violet:
141 return "#C259FF"
142 case Mauve:
143 return "#D46EFF"
144 case Grape:
145 return "#7134DD"
146 case Plum:
147 return "#9953FF"
148 case Orchid:
149 return "#AD6EFF"
150 case Jelly:
151 return "#4A30D9"
152 case Charple:
153 return "#6B50FF"
154 case Hazy:
155 return "#8B75FF"
156 case Ox:
157 return "#3331B2"
158 case Sapphire:
159 return "#4949FF"
160 case Guppy:
161 return "#7272FF"
162 case Oceania:
163 return "#2B55B3"
164 case Thunder:
165 return "#4776FF"
166 case Anchovy:
167 return "#719AFC"
168 case Damson:
169 return "#007AB8"
170 case Malibu:
171 return "#00A4FF"
172 case Sardine:
173 return "#4FBEFE"
174 case Zinc:
175 return "#10B1AE"
176 case Turtle:
177 return "#0ADCD9"
178 case Lichen:
179 return "#5CDFEA"
180 case Guac:
181 return "#12C78F"
182 case Julep:
183 return "#00FFB2"
184 case Bok:
185 return "#68FFD6"
186 case Mustard:
187 return "#F5EF34"
188 case Citron:
189 return "#E8FF27"
190 case Zest:
191 return "#E8FE96"
192 case Pepper:
193 return "#201F26"
194 case BBQ:
195 return "#2d2c35"
196 case Charcoal:
197 return "#3A3943"
198 case Iron:
199 return "#4D4C57"
200 case Oyster:
201 return "#605F6B"
202 case Squid:
203 return "#858392"
204 case Smoke:
205 return "#BFBCC8"
206 case Ash:
207 return "#DFDBDD"
208 case Salt:
209 return "#F1EFEF"
210 case Butter:
211 return "#FFFAF1"
212 // Diffs: additions.
213 case Pickle:
214 return "#00A475"
215 case Gator:
216 return "#18463D"
217 case Spinach:
218 return "#1C3634"
219 // Diffs: deletions.
220 case Pom:
221 return "#AB2454"
222 case Steak:
223 return "#582238"
224 case Toast:
225 return "#412130"
226 // Provisional.
227 case NeueGuac:
228 return "#00b875"
229 case NeueZinc:
230 return "#0e9996"
231 default:
232 return ""
233 }
234}
235
236func (k Key) String() string {
237 switch k {
238 case Cumin:
239 return "Cumin"
240 case Tang:
241 return "Tang"
242 case Yam:
243 return "Yam"
244 case Paprika:
245 return "Paprika"
246 case Bengal:
247 return "Bengal"
248 case Uni:
249 return "Uni"
250 case Sriracha:
251 return "Sriracha"
252 case Coral:
253 return "Coral"
254 case Salmon:
255 return "Salmon"
256 case Chili:
257 return "Chili"
258 case Cherry:
259 return "Cherry"
260 case Tuna:
261 return "Tuna"
262 case Macaron:
263 return "Macaron"
264 case Pony:
265 return "Pony"
266 case Cheeky:
267 return "Cheeky"
268 case Flamingo:
269 return "Flamingo"
270 case Dolly:
271 return "Dolly"
272 case Blush:
273 return "Blush"
274 case Urchin:
275 return "Urchin"
276 case Mochi:
277 return "Mochi"
278 case Lilac:
279 return "Lilac"
280 case Prince:
281 return "Prince"
282 case Violet:
283 return "Violet"
284 case Mauve:
285 return "Mauve"
286 case Grape:
287 return "Grape"
288 case Plum:
289 return "Plum"
290 case Orchid:
291 return "Orchid"
292 case Jelly:
293 return "Jelly"
294 case Charple:
295 return "Charple"
296 case Hazy:
297 return "Hazy"
298 case Ox:
299 return "Ox"
300 case Sapphire:
301 return "Sapphire"
302 case Guppy:
303 return "Guppy"
304 case Oceania:
305 return "Oceania"
306 case Thunder:
307 return "Thunder"
308 case Anchovy:
309 return "Anchovy"
310 case Damson:
311 return "Damson"
312 case Malibu:
313 return "Malibu"
314 case Sardine:
315 return "Sardine"
316 case Zinc:
317 return "Zinc"
318 case Turtle:
319 return "Turtle"
320 case Lichen:
321 return "Lichen"
322 case Guac:
323 return "Guac"
324 case Julep:
325 return "Julep"
326 case Bok:
327 return "Bok"
328 case Mustard:
329 return "Mustard"
330 case Citron:
331 return "Citron"
332 case Zest:
333 return "Zest"
334 case Pepper:
335 return "Pepper"
336 case BBQ:
337 return "BBQ"
338 case Charcoal:
339 return "Charcoal"
340 case Iron:
341 return "Iron"
342 case Oyster:
343 return "Oyster"
344 case Squid:
345 return "Squid"
346 case Smoke:
347 return "Smoke"
348 case Ash:
349 return "Ash"
350 case Salt:
351 return "Salt"
352 case Butter:
353 return "Butter"
354 case Pickle:
355 return "Pickle"
356 case Gator:
357 return "Gator"
358 case Spinach:
359 return "Spinach"
360 case Pom:
361 return "Pom"
362 case Steak:
363 return "Steak"
364 case Toast:
365 return "Toast"
366 case NeueGuac:
367 return "NeueGuac"
368 case NeueZinc:
369 return "NeueZinc"
370 default:
371 return fmt.Sprintf("Key(%d)", int(k))
372 }
373}
374
375// RGBA returns the red, green, blue, and alpha values of the color for interface [color.Color]
376func (k Key) RGBA() (r, g, b, a uint32) {
377 c, err := colorful.Hex(k.Hex())
378 if err != nil {
379 panic(fmt.Sprintf("invalid color key %d: %s: %v", k, k.String(), err))
380 }
381 return c.RGBA()
382}
383
384func (k Key) IsPrimary() bool {
385 return slices.Contains(PrimaryColors, k)
386}
387
388func (k Key) IsSecondary() bool {
389 return slices.Contains(SecondaryColors, k)
390}
391
392func (k Key) IsTertiary() bool {
393 return slices.Contains(TertiaryColors, k)
394}