abachrome 0.1.0 → 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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/.envrc +3 -0
  3. data/README.md +10 -0
  4. data/Rakefile +12 -0
  5. data/devenv.lock +88 -17
  6. data/devenv.nix +2 -1
  7. data/devenv.yaml +5 -12
  8. data/lib/abachrome/abc_decimal.rb +202 -8
  9. data/lib/abachrome/color.rb +77 -2
  10. data/lib/abachrome/color_mixins/blend.rb +53 -2
  11. data/lib/abachrome/color_mixins/lighten.rb +49 -2
  12. data/lib/abachrome/color_mixins/to_colorspace.rb +67 -2
  13. data/lib/abachrome/color_mixins/to_lrgb.rb +70 -2
  14. data/lib/abachrome/color_mixins/to_oklab.rb +67 -2
  15. data/lib/abachrome/color_mixins/to_oklch.rb +60 -2
  16. data/lib/abachrome/color_mixins/to_srgb.rb +77 -2
  17. data/lib/abachrome/color_models/hsv.rb +25 -2
  18. data/lib/abachrome/color_models/oklab.rb +19 -2
  19. data/lib/abachrome/color_models/oklch.rb +42 -2
  20. data/lib/abachrome/color_models/rgb.rb +28 -2
  21. data/lib/abachrome/color_space.rb +76 -2
  22. data/lib/abachrome/converter.rb +57 -3
  23. data/lib/abachrome/converters/base.rb +69 -2
  24. data/lib/abachrome/converters/lrgb_to_oklab.rb +28 -2
  25. data/lib/abachrome/converters/lrgb_to_srgb.rb +27 -2
  26. data/lib/abachrome/converters/oklab_to_lrgb.rb +34 -2
  27. data/lib/abachrome/converters/oklab_to_oklch.rb +31 -2
  28. data/lib/abachrome/converters/oklab_to_srgb.rb +27 -2
  29. data/lib/abachrome/converters/oklch_to_lrgb.rb +25 -2
  30. data/lib/abachrome/converters/oklch_to_oklab.rb +27 -2
  31. data/lib/abachrome/converters/oklch_to_srgb.rb +26 -2
  32. data/lib/abachrome/converters/srgb_to_lrgb.rb +26 -2
  33. data/lib/abachrome/converters/srgb_to_oklab.rb +28 -2
  34. data/lib/abachrome/converters/srgb_to_oklch.rb +27 -2
  35. data/lib/abachrome/gamut/base.rb +2 -2
  36. data/lib/abachrome/gamut/p3.rb +2 -2
  37. data/lib/abachrome/gamut/rec2020.rb +2 -2
  38. data/lib/abachrome/gamut/srgb.rb +20 -2
  39. data/lib/abachrome/illuminants/base.rb +2 -2
  40. data/lib/abachrome/illuminants/d50.rb +2 -2
  41. data/lib/abachrome/illuminants/d55.rb +2 -2
  42. data/lib/abachrome/illuminants/d65.rb +2 -2
  43. data/lib/abachrome/illuminants/d75.rb +2 -2
  44. data/lib/abachrome/named/css.rb +149 -158
  45. data/lib/abachrome/outputs/css.rb +2 -2
  46. data/lib/abachrome/palette.rb +112 -2
  47. data/lib/abachrome/palette_mixins/interpolate.rb +20 -2
  48. data/lib/abachrome/palette_mixins/resample.rb +2 -2
  49. data/lib/abachrome/palette_mixins/stretch_luminance.rb +2 -2
  50. data/lib/abachrome/parsers/hex.rb +2 -2
  51. data/lib/abachrome/to_abcd.rb +10 -2
  52. data/lib/abachrome/version.rb +2 -2
  53. data/lib/abachrome.rb +78 -2
  54. data/logo.png +0 -0
  55. data/logo.webp +0 -0
  56. metadata +15 -67
@@ -1,4 +1,22 @@
1
- # frozen_string_literal: true
1
+ # Abachrome::Gamut::SRGB - sRGB color gamut definition and validation
2
+ #
3
+ # This module defines the sRGB color gamut within the Abachrome color manipulation library.
4
+ # The sRGB gamut represents the range of colors that can be displayed on standard monitors
5
+ # and is the default color space for web content and most consumer displays. It uses the
6
+ # D65 white point and specific primary color coordinates that define the boundaries of
7
+ # reproducible colors in the sRGB color space.
8
+ #
9
+ # Key features:
10
+ # - Defines sRGB primary color coordinates for red, green, and blue
11
+ # - Uses D65 illuminant as the white point reference for proper color reproduction
12
+ # - Provides gamut boundary validation to ensure colors fall within displayable ranges
13
+ # - Implements color containment checking for RGB coordinate validation
14
+ # - Automatically registers with the global gamut registry for system-wide access
15
+ # - Serves as the foundation for sRGB color space conversions and display output
16
+ #
17
+ # The sRGB gamut is essential for ensuring colors are properly represented on standard
18
+ # displays and provides the color boundary definitions needed for gamut mapping operations
19
+ # when converting between different color spaces or preparing colors for web and print output.
2
20
 
3
21
  require_relative "base"
4
22
 
@@ -24,4 +42,4 @@ module Abachrome
24
42
 
25
43
  register(SRGB.new)
26
44
  end
27
- end
45
+ end
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: true
1
+ #
2
2
 
3
3
  module Abachrome
4
4
  module Illuminants
@@ -30,4 +30,4 @@ module Abachrome
30
30
  end
31
31
  end
32
32
  end
33
- end
33
+ end
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: true
1
+ #
2
2
 
3
3
  module Abachrome
4
4
  module Illuminants
@@ -28,4 +28,4 @@ module Abachrome
28
28
  end
29
29
  end
30
30
  end
31
- end
31
+ end
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: true
1
+ #
2
2
 
3
3
  module Abachrome
4
4
  module Illuminants
@@ -24,4 +24,4 @@ module Abachrome
24
24
  end
25
25
  end
26
26
  end
27
- end
27
+ end
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: true
1
+ #
2
2
 
3
3
  module Abachrome
4
4
  module Illuminants
@@ -32,4 +32,4 @@ module Abachrome
32
32
  end
33
33
  end
34
34
  end
35
- end
35
+ end
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: true
1
+ #
2
2
 
3
3
  module Abachrome
4
4
  module Illuminants
@@ -24,4 +24,4 @@ module Abachrome
24
24
  end
25
25
  end
26
26
  end
27
- end
27
+ end
@@ -1,164 +1,155 @@
1
- # frozen_string_literal: true
2
-
3
- # Colors courtesy of w3c:
4
- # https://www.w3.org/wiki/CSS/Properties/color/keywords
5
1
  #
2
+
6
3
  module Abachrome
7
4
  module Named
8
5
  module CSS
9
- ColorNames = {
10
- "aliceblue" => [240, 248, 255],
11
- "antiquewhite" => [250, 235, 215],
12
- "aqua" => [0, 255, 255],
13
- "aquamarine" => [127, 255, 212],
14
- "azure" => [240, 255, 255],
15
- "beige" => [245, 245, 220],
16
- "bisque" => [255, 228, 196],
17
- "black" => [0, 0, 0],
18
- "blanchedalmond" => [255, 235, 205],
19
- "blue" => [0, 0, 255],
20
- "blueviolet" => [138, 43, 226],
21
- "brown" => [165, 42, 42],
22
- "burlywood" => [222, 184, 135],
23
- "cadetblue" => [95, 158, 160],
24
- "chartreuse" => [127, 255, 0],
25
- "chocolate" => [210, 105, 30],
26
- "coral" => [255, 127, 80],
27
- "cornflowerblue" => [100, 149, 237],
28
- "cornsilk" => [255, 248, 220],
29
- "crimson" => [220, 20, 60],
30
- "cyan" => [0, 255, 255],
31
- "darkblue" => [0, 0, 139],
32
- "darkcyan" => [0, 139, 139],
33
- "darkgoldenrod" => [184, 134, 11],
34
- "darkgray" => [169, 169, 169],
35
- "darkgreen" => [0, 100, 0],
36
- "darkgrey" => [169, 169, 169],
37
- "darkkhaki" => [189, 183, 107],
38
- "darkmagenta" => [139, 0, 139],
39
- "darkolivegreen" => [85, 107, 47],
40
- "darkorange" => [255, 140, 0],
41
- "darkorchid" => [153, 50, 204],
42
- "darkred" => [139, 0, 0],
43
- "darksalmon" => [233, 150, 122],
44
- "darkseagreen" => [143, 188, 143],
45
- "darkslateblue" => [72, 61, 139],
46
- "darkslategray" => [47, 79, 79],
47
- "darkslategrey" => [47, 79, 79],
48
- "darkturquoise" => [0, 206, 209],
49
- "darkviolet" => [148, 0, 211],
50
- "deeppink" => [255, 20, 147],
51
- "deepskyblue" => [0, 191, 255],
52
- "dimgray" => [105, 105, 105],
53
- "dimgrey" => [105, 105, 105],
54
- "dodgerblue" => [30, 144, 255],
55
- "firebrick" => [178, 34, 34],
56
- "floralwhite" => [255, 250, 240],
57
- "forestgreen" => [34, 139, 34],
58
- "fuchsia" => [255, 0, 255],
59
- "gainsboro" => [220, 220, 220],
60
- "ghostwhite" => [248, 248, 255],
61
- "gold" => [255, 215, 0],
62
- "goldenrod" => [218, 165, 32],
63
- "gray" => [128, 128, 128],
64
- "green" => [0, 128, 0],
65
- "greenyellow" => [173, 255, 47],
66
- "grey" => [128, 128, 128],
67
- "honeydew" => [240, 255, 240],
68
- "hotpink" => [255, 105, 180],
69
- "indianred" => [205, 92, 92],
70
- "indigo" => [75, 0, 130],
71
- "ivory" => [255, 255, 240],
72
- "khaki" => [240, 230, 140],
73
- "lavender" => [230, 230, 250],
74
- "lavenderblush" => [255, 240, 245],
75
- "lawngreen" => [124, 252, 0],
76
- "lemonchiffon" => [255, 250, 205],
77
- "lightblue" => [173, 216, 230],
78
- "lightcoral" => [240, 128, 128],
79
- "lightcyan" => [224, 255, 255],
80
- "lightgoldenrodyellow" => [250, 250, 210],
81
- "lightgray" => [211, 211, 211],
82
- "lightgreen" => [144, 238, 144],
83
- "lightgrey" => [211, 211, 211],
84
- "lightpink" => [255, 182, 193],
85
- "lightsalmon" => [255, 160, 122],
86
- "lightseagreen" => [32, 178, 170],
87
- "lightskyblue" => [135, 206, 250],
88
- "lightslategray" => [119, 136, 153],
89
- "lightslategrey" => [119, 136, 153],
90
- "lightsteelblue" => [176, 196, 222],
91
- "lightyellow" => [255, 255, 224],
92
- "lime" => [0, 255, 0],
93
- "limegreen" => [50, 205, 50],
94
- "linen" => [250, 240, 230],
95
- "magenta" => [255, 0, 255],
96
- "maroon" => [128, 0, 0],
97
- "mediumaquamarine" => [102, 205, 170],
98
- "mediumblue" => [0, 0, 205],
99
- "mediumorchid" => [186, 85, 211],
100
- "mediumpurple" => [147, 112, 219],
101
- "mediumseagreen" => [60, 179, 113],
102
- "mediumslateblue" => [123, 104, 238],
103
- "mediumspringgreen" => [0, 250, 154],
104
- "mediumturquoise" => [72, 209, 204],
105
- "mediumvioletred" => [199, 21, 133],
106
- "midnightblue" => [25, 25, 112],
107
- "mintcream" => [245, 255, 250],
108
- "mistyrose" => [255, 228, 225],
109
- "moccasin" => [255, 228, 181],
110
- "navajowhite" => [255, 222, 173],
111
- "navy" => [0, 0, 128],
112
- "oldlace" => [253, 245, 230],
113
- "olive" => [128, 128, 0],
114
- "olivedrab" => [107, 142, 35],
115
- "orange" => [255, 165, 0],
116
- "orangered" => [255, 69, 0],
117
- "orchid" => [218, 112, 214],
118
- "palegoldenrod" => [238, 232, 170],
119
- "palegreen" => [152, 251, 152],
120
- "paleturquoise" => [175, 238, 238],
121
- "palevioletred" => [219, 112, 147],
122
- "papayawhip" => [255, 239, 213],
123
- "peachpuff" => [255, 218, 185],
124
- "peru" => [205, 133, 63],
125
- "pink" => [255, 192, 203],
126
- "plum" => [221, 160, 221],
127
- "powderblue" => [176, 224, 230],
128
- "purple" => [128, 0, 128],
129
- "red" => [255, 0, 0],
130
- "rosybrown" => [188, 143, 143],
131
- "royalblue" => [65, 105, 225],
132
- "saddlebrown" => [139, 69, 19],
133
- "salmon" => [250, 128, 114],
134
- "sandybrown" => [244, 164, 96],
135
- "seagreen" => [46, 139, 87],
136
- "seashell" => [255, 245, 238],
137
- "sienna" => [160, 82, 45],
138
- "silver" => [192, 192, 192],
139
- "skyblue" => [135, 206, 235],
140
- "slateblue" => [106, 90, 205],
141
- "slategray" => [112, 128, 144],
142
- "slategrey" => [112, 128, 144],
143
- "snow" => [255, 250, 250],
144
- "springgreen" => [0, 255, 127],
145
- "steelblue" => [70, 130, 180],
146
- "tan" => [210, 180, 140],
147
- "teal" => [0, 128, 128],
148
- "thistle" => [216, 191, 216],
149
- "tomato" => [255, 99, 71],
150
- "turquoise" => [64, 224, 208],
151
- "violet" => [238, 130, 238],
152
- "wheat" => [245, 222, 179],
153
- "white" => [255, 255, 255],
154
- "whitesmoke" => [245, 245, 245],
155
- "yellow" => [255, 255, 0],
156
- "yellowgreen" => [154, 205, 50]
157
- }.freeze
158
-
159
- def method_missing(name, *args, &block)
160
- ColorNames[name] || super
161
- end
6
+ def self.aliceblue; [240, 248, 255] end
7
+ def self.antiquewhite; [250, 235, 215] end
8
+ def self.aqua; [0, 255, 255] end
9
+ def self.aquamarine; [127, 255, 212] end
10
+ def self.azure; [240, 255, 255] end
11
+ def self.beige; [245, 245, 220] end
12
+ def self.bisque; [255, 228, 196] end
13
+ def self.black; [0, 0, 0] end
14
+ def self.blanchedalmond; [255, 235, 205] end
15
+ def self.blue; [0, 0, 255] end
16
+ def self.blueviolet; [138, 43, 226] end
17
+ def self.brown; [165, 42, 42] end
18
+ def self.burlywood; [222, 184, 135] end
19
+ def self.cadetblue; [95, 158, 160] end
20
+ def self.chartreuse; [127, 255, 0] end
21
+ def self.chocolate; [210, 105, 30] end
22
+ def self.coral; [255, 127, 80] end
23
+ def self.cornflowerblue; [100, 149, 237] end
24
+ def self.cornsilk; [255, 248, 220] end
25
+ def self.crimson; [220, 20, 60] end
26
+ def self.cyan; [0, 255, 255] end
27
+ def self.darkblue; [0, 0, 139] end
28
+ def self.darkcyan; [0, 139, 139] end
29
+ def self.darkgoldenrod; [184, 134, 11] end
30
+ def self.darkgray; [169, 169, 169] end
31
+ def self.darkgreen; [0, 100, 0] end
32
+ def self.darkgrey; [169, 169, 169] end
33
+ def self.darkkhaki; [189, 183, 107] end
34
+ def self.darkmagenta; [139, 0, 139] end
35
+ def self.darkolivegreen; [85, 107, 47] end
36
+ def self.darkorange; [255, 140, 0] end
37
+ def self.darkorchid; [153, 50, 204] end
38
+ def self.darkred; [139, 0, 0] end
39
+ def self.darksalmon; [233, 150, 122] end
40
+ def self.darkseagreen; [143, 188, 143] end
41
+ def self.darkslateblue; [72, 61, 139] end
42
+ def self.darkslategray; [47, 79, 79] end
43
+ def self.darkslategrey; [47, 79, 79] end
44
+ def self.darkturquoise; [0, 206, 209] end
45
+ def self.darkviolet; [148, 0, 211] end
46
+ def self.deeppink; [255, 20, 147] end
47
+ def self.deepskyblue; [0, 191, 255] end
48
+ def self.dimgray; [105, 105, 105] end
49
+ def self.dimgrey; [105, 105, 105] end
50
+ def self.dodgerblue; [30, 144, 255] end
51
+ def self.firebrick; [178, 34, 34] end
52
+ def self.floralwhite; [255, 250, 240] end
53
+ def self.forestgreen; [34, 139, 34] end
54
+ def self.fuchsia; [255, 0, 255] end
55
+ def self.gainsboro; [220, 220, 220] end
56
+ def self.ghostwhite; [248, 248, 255] end
57
+ def self.gold; [255, 215, 0] end
58
+ def self.goldenrod; [218, 165, 32] end
59
+ def self.gray; [128, 128, 128] end
60
+ def self.green; [0, 128, 0] end
61
+ def self.greenyellow; [173, 255, 47] end
62
+ def self.grey; [128, 128, 128] end
63
+ def self.honeydew; [240, 255, 240] end
64
+ def self.hotpink; [255, 105, 180] end
65
+ def self.indianred; [205, 92, 92] end
66
+ def self.indigo; [75, 0, 130] end
67
+ def self.ivory; [255, 255, 240] end
68
+ def self.khaki; [240, 230, 140] end
69
+ def self.lavender; [230, 230, 250] end
70
+ def self.lavenderblush; [255, 240, 245] end
71
+ def self.lawngreen; [124, 252, 0] end
72
+ def self.lemonchiffon; [255, 250, 205] end
73
+ def self.lightblue; [173, 216, 230] end
74
+ def self.lightcoral; [240, 128, 128] end
75
+ def self.lightcyan; [224, 255, 255] end
76
+ def self.lightgoldenrodyellow; [250, 250, 210] end
77
+ def self.lightgray; [211, 211, 211] end
78
+ def self.lightgreen; [144, 238, 144] end
79
+ def self.lightgrey; [211, 211, 211] end
80
+ def self.lightpink; [255, 182, 193] end
81
+ def self.lightsalmon; [255, 160, 122] end
82
+ def self.lightseagreen; [32, 178, 170] end
83
+ def self.lightskyblue; [135, 206, 250] end
84
+ def self.lightslategray; [119, 136, 153] end
85
+ def self.lightslategrey; [119, 136, 153] end
86
+ def self.lightsteelblue; [176, 196, 222] end
87
+ def self.lightyellow; [255, 255, 224] end
88
+ def self.lime; [0, 255, 0] end
89
+ def self.limegreen; [50, 205, 50] end
90
+ def self.linen; [250, 240, 230] end
91
+ def self.magenta; [255, 0, 255] end
92
+ def self.maroon; [128, 0, 0] end
93
+ def self.mediumaquamarine; [102, 205, 170] end
94
+ def self.mediumblue; [0, 0, 205] end
95
+ def self.mediumorchid; [186, 85, 211] end
96
+ def self.mediumpurple; [147, 112, 219] end
97
+ def self.mediumseagreen; [60, 179, 113] end
98
+ def self.mediumslateblue; [123, 104, 238] end
99
+ def self.mediumspringgreen; [0, 250, 154] end
100
+ def self.mediumturquoise; [72, 209, 204] end
101
+ def self.mediumvioletred; [199, 21, 133] end
102
+ def self.midnightblue; [25, 25, 112] end
103
+ def self.mintcream; [245, 255, 250] end
104
+ def self.mistyrose; [255, 228, 225] end
105
+ def self.moccasin; [255, 228, 181] end
106
+ def self.navajowhite; [255, 222, 173] end
107
+ def self.navy; [0, 0, 128] end
108
+ def self.oldlace; [253, 245, 230] end
109
+ def self.olive; [128, 128, 0] end
110
+ def self.olivedrab; [107, 142, 35] end
111
+ def self.orange; [255, 165, 0] end
112
+ def self.orangered; [255, 69, 0] end
113
+ def self.orchid; [218, 112, 214] end
114
+ def self.palegoldenrod; [238, 232, 170] end
115
+ def self.palegreen; [152, 251, 152] end
116
+ def self.paleturquoise; [175, 238, 238] end
117
+ def self.palevioletred; [219, 112, 147] end
118
+ def self.papayawhip; [255, 239, 213] end
119
+ def self.peachpuff; [255, 218, 185] end
120
+ def self.peru; [205, 133, 63] end
121
+ def self.pink; [255, 192, 203] end
122
+ def self.plum; [221, 160, 221] end
123
+ def self.powderblue; [176, 224, 230] end
124
+ def self.purple; [128, 0, 128] end
125
+ def self.red; [255, 0, 0] end
126
+ def self.rosybrown; [188, 143, 143] end
127
+ def self.royalblue; [65, 105, 225] end
128
+ def self.saddlebrown; [139, 69, 19] end
129
+ def self.salmon; [250, 128, 114] end
130
+ def self.sandybrown; [244, 164, 96] end
131
+ def self.seagreen; [46, 139, 87] end
132
+ def self.seashell; [255, 245, 238] end
133
+ def self.sienna; [160, 82, 45] end
134
+ def self.silver; [192, 192, 192] end
135
+ def self.skyblue; [135, 206, 235] end
136
+ def self.slateblue; [106, 90, 205] end
137
+ def self.slategray; [112, 128, 144] end
138
+ def self.slategrey; [112, 128, 144] end
139
+ def self.snow; [255, 250, 250] end
140
+ def self.springgreen; [0, 255, 127] end
141
+ def self.steelblue; [70, 130, 180] end
142
+ def self.tan; [210, 180, 140] end
143
+ def self.teal; [0, 128, 128] end
144
+ def self.thistle; [216, 191, 216] end
145
+ def self.tomato; [255, 99, 71] end
146
+ def self.turquoise; [64, 224, 208] end
147
+ def self.violet; [238, 130, 238] end
148
+ def self.wheat; [245, 222, 179] end
149
+ def self.white; [255, 255, 255] end
150
+ def self.whitesmoke; [245, 245, 245] end
151
+ def self.yellow; [255, 255, 0] end
152
+ def self.yellowgreen; [154, 205, 50] end
162
153
  end
163
154
  end
164
- end
155
+ end
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: true
1
+ #
2
2
 
3
3
  require_relative "../color"
4
4
  require_relative "../color_space"
@@ -114,4 +114,4 @@ module Abachrome
114
114
  end
115
115
  end
116
116
  end
117
- end
117
+ end