sass-embedded 1.79.3-x86-mingw32 → 1.79.4-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/exe/sass +1 -9
- data/ext/sass/dart-sass/src/sass.snapshot +0 -0
- data/lib/sass/compiler/connection.rb +1 -9
- data/lib/sass/compiler/host/protofier.rb +16 -55
- data/lib/sass/elf.rb +4 -4
- data/lib/sass/embedded/version.rb +1 -1
- data/lib/sass/value/color/channel.rb +79 -0
- data/lib/sass/value/color/conversions.rb +464 -0
- data/lib/sass/value/color/gamut_map_method/clip.rb +45 -0
- data/lib/sass/value/color/gamut_map_method/local_minde.rb +94 -0
- data/lib/sass/value/color/gamut_map_method.rb +45 -0
- data/lib/sass/value/color/interpolation_method.rb +51 -0
- data/lib/sass/value/color/space/a98_rgb.rb +57 -0
- data/lib/sass/value/color/space/display_p3.rb +57 -0
- data/lib/sass/value/color/space/hsl.rb +65 -0
- data/lib/sass/value/color/space/hwb.rb +70 -0
- data/lib/sass/value/color/space/lab.rb +77 -0
- data/lib/sass/value/color/space/lch.rb +53 -0
- data/lib/sass/value/color/space/lms.rb +129 -0
- data/lib/sass/value/color/space/oklab.rb +66 -0
- data/lib/sass/value/color/space/oklch.rb +54 -0
- data/lib/sass/value/color/space/prophoto_rgb.rb +59 -0
- data/lib/sass/value/color/space/rec2020.rb +69 -0
- data/lib/sass/value/color/space/rgb.rb +52 -0
- data/lib/sass/value/color/space/srgb.rb +141 -0
- data/lib/sass/value/color/space/srgb_linear.rb +72 -0
- data/lib/sass/value/color/space/utils.rb +86 -0
- data/lib/sass/value/color/space/xyz_d50.rb +100 -0
- data/lib/sass/value/color/space/xyz_d65.rb +57 -0
- data/lib/sass/value/color/space.rb +198 -0
- data/lib/sass/value/color.rb +537 -162
- data/lib/sass/value/fuzzy_math.rb +30 -3
- data/lib/sass/value/string.rb +1 -1
- metadata +29 -5
@@ -0,0 +1,464 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sass
|
4
|
+
module Value
|
5
|
+
class Color
|
6
|
+
# @see https:#www.w3.org/TR/css-color-4/#color-conversion-code.
|
7
|
+
# @see https://github.com/sass/dart-sass/blob/main/lib/src/value/color/conversions.dart
|
8
|
+
module Conversions
|
9
|
+
# The D50 white point.
|
10
|
+
D50 = [0.3457 / 0.3585, 1.00000, (1.0 - 0.3457 - 0.3585) / 0.3585].freeze
|
11
|
+
|
12
|
+
# The transformation matrix for converting LMS colors to OKLab.
|
13
|
+
#
|
14
|
+
# Note that this can't be directly multiplied with {XYZ_D65_TO_LMS}; see Color
|
15
|
+
# Level 4 spec for details on how to convert between XYZ and OKLab.
|
16
|
+
LMS_TO_OKLAB = [
|
17
|
+
0.2104542553, 0.7936177850, -0.0040720468,
|
18
|
+
1.9779984951, -2.4285922050, 0.4505937099,
|
19
|
+
0.0259040371, 0.7827717662, -0.8086757660
|
20
|
+
].freeze
|
21
|
+
|
22
|
+
# The transformation matrix for converting OKLab colors to LMS.
|
23
|
+
#
|
24
|
+
# Note that this can't be directly multiplied with {LMS_TO_XYZ_D65}; see Color
|
25
|
+
# Level 4 spec for details on how to convert between XYZ and OKLab.
|
26
|
+
OKLAB_TO_LMS = [
|
27
|
+
0.99999999845051981432, 0.396337792173767856780, 0.215803758060758803390,
|
28
|
+
1.00000000888176077670, -0.105561342323656349400, -0.063854174771705903402,
|
29
|
+
1.00000005467241091770, -0.089484182094965759684, -1.291485537864091739900
|
30
|
+
].freeze
|
31
|
+
|
32
|
+
# The transformation matrix for converting linear-light srgb colors to
|
33
|
+
# linear-light display-p3.
|
34
|
+
LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = [
|
35
|
+
0.82246196871436230, 0.17753803128563775, 0.00000000000000000,
|
36
|
+
0.03319419885096161, 0.96680580114903840, 0.00000000000000000,
|
37
|
+
0.01708263072112003, 0.07239744066396346, 0.91051992861491650
|
38
|
+
].freeze
|
39
|
+
|
40
|
+
# The transformation matrix for converting linear-light display-p3 colors to
|
41
|
+
# linear-light srgb.
|
42
|
+
LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = [
|
43
|
+
1.22494017628055980, -0.22494017628055996, 0.00000000000000000,
|
44
|
+
-0.04205695470968816, 1.04205695470968800, 0.00000000000000000,
|
45
|
+
-0.01963755459033443, -0.07863604555063188, 1.09827360014096630
|
46
|
+
].freeze
|
47
|
+
|
48
|
+
# The transformation matrix for converting linear-light srgb colors to
|
49
|
+
# linear-light a98-rgb.
|
50
|
+
LINEAR_SRGB_TO_LINEAR_A98_RGB = [
|
51
|
+
0.71512560685562470, 0.28487439314437535, 0.00000000000000000,
|
52
|
+
0.00000000000000000, 1.00000000000000000, 0.00000000000000000,
|
53
|
+
0.00000000000000000, 0.04116194845011846, 0.95883805154988160
|
54
|
+
].freeze
|
55
|
+
|
56
|
+
# The transformation matrix for converting linear-light a98-rgb colors to
|
57
|
+
# linear-light srgb.
|
58
|
+
LINEAR_A98_RGB_TO_LINEAR_SRGB = [
|
59
|
+
1.39835574396077830, -0.39835574396077830, 0.00000000000000000,
|
60
|
+
0.00000000000000000, 1.00000000000000000, 0.00000000000000000,
|
61
|
+
0.00000000000000000, -0.04292898929447326, 1.04292898929447330
|
62
|
+
].freeze
|
63
|
+
|
64
|
+
# The transformation matrix for converting linear-light srgb colors to
|
65
|
+
# linear-light rec2020.
|
66
|
+
LINEAR_SRGB_TO_LINEAR_REC2020 = [
|
67
|
+
0.62740389593469900, 0.32928303837788370, 0.04331306568741722,
|
68
|
+
0.06909728935823208, 0.91954039507545870, 0.01136231556630917,
|
69
|
+
0.01639143887515027, 0.08801330787722575, 0.89559525324762400
|
70
|
+
].freeze
|
71
|
+
|
72
|
+
# The transformation matrix for converting linear-light rec2020 colors to
|
73
|
+
# linear-light srgb.
|
74
|
+
LINEAR_REC2020_TO_LINEAR_SRGB = [
|
75
|
+
1.66049100210843450, -0.58764113878854950, -0.07284986331988487,
|
76
|
+
-0.12455047452159074, 1.13289989712596030, -0.00834942260436947,
|
77
|
+
-0.01815076335490530, -0.10057889800800737, 1.11872966136291270
|
78
|
+
].freeze
|
79
|
+
|
80
|
+
# The transformation matrix for converting linear-light srgb colors to xyz.
|
81
|
+
LINEAR_SRGB_TO_XYZ_D65 = [
|
82
|
+
0.41239079926595950, 0.35758433938387796, 0.18048078840183430,
|
83
|
+
0.21263900587151036, 0.71516867876775590, 0.07219231536073371,
|
84
|
+
0.01933081871559185, 0.11919477979462598, 0.95053215224966060
|
85
|
+
].freeze
|
86
|
+
|
87
|
+
# The transformation matrix for converting xyz colors to linear-light srgb.
|
88
|
+
XYZ_D65_TO_LINEAR_SRGB = [
|
89
|
+
3.24096994190452130, -1.53738317757009350, -0.49861076029300330,
|
90
|
+
-0.96924363628087980, 1.87596750150772060, 0.04155505740717561,
|
91
|
+
0.05563007969699360, -0.20397695888897657, 1.05697151424287860
|
92
|
+
].freeze
|
93
|
+
|
94
|
+
# The transformation matrix for converting linear-light srgb colors to lms.
|
95
|
+
LINEAR_SRGB_TO_LMS = [
|
96
|
+
0.41222147080000016, 0.53633253629999990, 0.05144599290000001,
|
97
|
+
0.21190349820000007, 0.68069954509999990, 0.10739695660000000,
|
98
|
+
0.08830246190000005, 0.28171883759999994, 0.62997870050000000
|
99
|
+
].freeze
|
100
|
+
|
101
|
+
# The transformation matrix for converting lms colors to linear-light srgb.
|
102
|
+
LMS_TO_LINEAR_SRGB = [
|
103
|
+
4.07674166134799300, -3.30771159040819240, 0.23096992872942781,
|
104
|
+
-1.26843800409217660, 2.60975740066337240, -0.34131939631021974,
|
105
|
+
-0.00419608654183720, -0.70341861445944950, 1.70761470093094480
|
106
|
+
].freeze
|
107
|
+
|
108
|
+
# The transformation matrix for converting linear-light srgb colors to
|
109
|
+
# linear-light prophoto-rgb.
|
110
|
+
LINEAR_SRGB_TO_LINEAR_PROPHOTO_RGB = [
|
111
|
+
0.52927697762261160, 0.33015450197849283, 0.14056852039889556,
|
112
|
+
0.09836585954044917, 0.87347071290696180, 0.02816342755258900,
|
113
|
+
0.01687534092138684, 0.11765941425612084, 0.86546524482249230
|
114
|
+
].freeze
|
115
|
+
|
116
|
+
# The transformation matrix for converting linear-light prophoto-rgb colors to
|
117
|
+
# linear-light srgb.
|
118
|
+
LINEAR_PROPHOTO_RGB_TO_LINEAR_SRGB = [
|
119
|
+
2.03438084951699600, -0.72763578993413420, -0.30674505958286180,
|
120
|
+
-0.22882573163305037, 1.23174254119010480, -0.00291680955705449,
|
121
|
+
-0.00855882878391742, -0.15326670213803720, 1.16182553092195470
|
122
|
+
].freeze
|
123
|
+
|
124
|
+
# The transformation matrix for converting linear-light srgb colors to xyz-d50.
|
125
|
+
LINEAR_SRGB_TO_XYZ_D50 = [
|
126
|
+
0.43606574687426936, 0.38515150959015960, 0.14307841996513868,
|
127
|
+
0.22249317711056518, 0.71688701309448240, 0.06061980979495235,
|
128
|
+
0.01392392146316939, 0.09708132423141015, 0.71409935681588070
|
129
|
+
].freeze
|
130
|
+
|
131
|
+
# The transformation matrix for converting xyz-d50 colors to linear-light srgb.
|
132
|
+
XYZ_D50_TO_LINEAR_SRGB = [
|
133
|
+
3.13413585290011780, -1.61738599801804200, -0.49066221791109754,
|
134
|
+
-0.97879547655577770, 1.91625437739598840, 0.03344287339036693,
|
135
|
+
0.07195539255794733, -0.22897675981518200, 1.40538603511311820
|
136
|
+
].freeze
|
137
|
+
|
138
|
+
# The transformation matrix for converting linear-light display-p3 colors to
|
139
|
+
# linear-light a98-rgb.
|
140
|
+
LINEAR_DISPLAY_P3_TO_LINEAR_A98_RGB = [
|
141
|
+
0.86400513747404840, 0.13599486252595164, 0.00000000000000000,
|
142
|
+
-0.04205695470968816, 1.04205695470968800, 0.00000000000000000,
|
143
|
+
-0.02056038078232985, -0.03250613804550798, 1.05306651882783790
|
144
|
+
].freeze
|
145
|
+
|
146
|
+
# The transformation matrix for converting linear-light a98-rgb colors to
|
147
|
+
# linear-light display-p3.
|
148
|
+
LINEAR_A98_RGB_TO_LINEAR_DISPLAY_P3 = [
|
149
|
+
1.15009441814101840, -0.15009441814101834, 0.00000000000000000,
|
150
|
+
0.04641729862941844, 0.95358270137058150, 0.00000000000000000,
|
151
|
+
0.02388759479083904, 0.02650477632633013, 0.94960762888283080
|
152
|
+
].freeze
|
153
|
+
|
154
|
+
# The transformation matrix for converting linear-light display-p3 colors to
|
155
|
+
# linear-light rec2020.
|
156
|
+
LINEAR_DISPLAY_P3_TO_LINEAR_REC2020 = [
|
157
|
+
0.75383303436172180, 0.19859736905261630, 0.04756959658566187,
|
158
|
+
0.04574384896535833, 0.94177721981169350, 0.01247893122294812,
|
159
|
+
-0.00121034035451832, 0.01760171730108989, 0.98360862305342840
|
160
|
+
].freeze
|
161
|
+
|
162
|
+
# The transformation matrix for converting linear-light rec2020 colors to
|
163
|
+
# linear-light display-p3.
|
164
|
+
LINEAR_REC2020_TO_LINEAR_DISPLAY_P3 = [
|
165
|
+
1.34357825258433200, -0.28217967052613570, -0.06139858205819628,
|
166
|
+
-0.06529745278911953, 1.07578791584857460, -0.01049046305945495,
|
167
|
+
0.00282178726170095, -0.01959849452449406, 1.01677670726279310
|
168
|
+
].freeze
|
169
|
+
|
170
|
+
# The transformation matrix for converting linear-light display-p3 colors to
|
171
|
+
# xyz.
|
172
|
+
LINEAR_DISPLAY_P3_TO_XYZ_D65 = [
|
173
|
+
0.48657094864821626, 0.26566769316909294, 0.19821728523436250,
|
174
|
+
0.22897456406974884, 0.69173852183650620, 0.07928691409374500,
|
175
|
+
0.00000000000000000, 0.04511338185890257, 1.04394436890097570
|
176
|
+
].freeze
|
177
|
+
|
178
|
+
# The transformation matrix for converting xyz colors to linear-light
|
179
|
+
# display-p3.
|
180
|
+
XYZ_D65_TO_LINEAR_DISPLAY_P3 = [
|
181
|
+
2.49349691194142450, -0.93138361791912360, -0.40271078445071684,
|
182
|
+
-0.82948896956157490, 1.76266406031834680, 0.02362468584194359,
|
183
|
+
0.03584583024378433, -0.07617238926804170, 0.95688452400768730
|
184
|
+
].freeze
|
185
|
+
|
186
|
+
# The transformation matrix for converting linear-light display-p3 colors to
|
187
|
+
# lms.
|
188
|
+
LINEAR_DISPLAY_P3_TO_LMS = [
|
189
|
+
0.48137985442585490, 0.46211836973903553, 0.05650177583510960,
|
190
|
+
0.22883194490233110, 0.65321681282840370, 0.11795124216926511,
|
191
|
+
0.08394575573016760, 0.22416526885956980, 0.69188897541026260
|
192
|
+
].freeze
|
193
|
+
|
194
|
+
# The transformation matrix for converting lms colors to linear-light
|
195
|
+
# display-p3.
|
196
|
+
LMS_TO_LINEAR_DISPLAY_P3 = [
|
197
|
+
3.12776898667772140, -2.25713579553953770, 0.12936680863610234,
|
198
|
+
-1.09100904738343900, 2.41333175827934370, -0.32232271065457110,
|
199
|
+
-0.02601081320950207, -0.50804132569306730, 1.53405213885176520
|
200
|
+
].freeze
|
201
|
+
|
202
|
+
# The transformation matrix for converting linear-light display-p3 colors to
|
203
|
+
# linear-light prophoto-rgb.
|
204
|
+
LINEAR_DISPLAY_P3_TO_LINEAR_PROPHOTO_RGB = [
|
205
|
+
0.63168691934035890, 0.21393038569465722, 0.15438269496498390,
|
206
|
+
0.08320371426648458, 0.88586513676302430, 0.03093114897049121,
|
207
|
+
-0.00127273456473881, 0.05075510433665735, 0.95051763022808140
|
208
|
+
].freeze
|
209
|
+
|
210
|
+
# The transformation matrix for converting linear-light prophoto-rgb colors to
|
211
|
+
# linear-light display-p3.
|
212
|
+
LINEAR_PROPHOTO_RGB_TO_LINEAR_DISPLAY_P3 = [
|
213
|
+
1.63257560870691790, -0.37977161848259840, -0.25280399022431950,
|
214
|
+
-0.15370040233755072, 1.16670254724250140, -0.01300214490495082,
|
215
|
+
0.01039319529676572, -0.06280731264959440, 1.05241411735282870
|
216
|
+
].freeze
|
217
|
+
|
218
|
+
# The transformation matrix for converting linear-light display-p3 colors to
|
219
|
+
# xyz-d50.
|
220
|
+
LINEAR_DISPLAY_P3_TO_XYZ_D50 = [
|
221
|
+
0.51514644296811600, 0.29200998206385770, 0.15713925139759397,
|
222
|
+
0.24120032212525520, 0.69222254113138180, 0.06657713674336294,
|
223
|
+
-0.00105013914714014, 0.04187827018907460, 0.78427647146852570
|
224
|
+
].freeze
|
225
|
+
|
226
|
+
# The transformation matrix for converting xyz-d50 colors to linear-light
|
227
|
+
# display-p3.
|
228
|
+
XYZ_D50_TO_LINEAR_DISPLAY_P3 = [
|
229
|
+
2.40393412185549730, -0.99003044249559310, -0.39761363181465614,
|
230
|
+
-0.84227001614546880, 1.79895801610670820, 0.01604562477090472,
|
231
|
+
0.04819381686413303, -0.09738519815446048, 1.27367136933212730
|
232
|
+
].freeze
|
233
|
+
|
234
|
+
# The transformation matrix for converting linear-light a98-rgb colors to
|
235
|
+
# linear-light rec2020.
|
236
|
+
LINEAR_A98_RGB_TO_LINEAR_REC2020 = [
|
237
|
+
0.87733384166365680, 0.07749370651571998, 0.04517245182062317,
|
238
|
+
0.09662259146620378, 0.89152732024418050, 0.01185008828961569,
|
239
|
+
0.02292106270284839, 0.04303668501067932, 0.93404225228647230
|
240
|
+
].freeze
|
241
|
+
|
242
|
+
# The transformation matrix for converting linear-light rec2020 colors to
|
243
|
+
# linear-light a98-rgb.
|
244
|
+
LINEAR_REC2020_TO_LINEAR_A98_RGB = [
|
245
|
+
1.15197839471591630, -0.09750305530240860, -0.05447533941350766,
|
246
|
+
-0.12455047452159074, 1.13289989712596030, -0.00834942260436947,
|
247
|
+
-0.02253038278105590, -0.04980650742838876, 1.07233689020944460
|
248
|
+
].freeze
|
249
|
+
|
250
|
+
# The transformation matrix for converting linear-light a98-rgb colors to xyz.
|
251
|
+
LINEAR_A98_RGB_TO_XYZ_D65 = [
|
252
|
+
0.57666904291013080, 0.18555823790654627, 0.18822864623499472,
|
253
|
+
0.29734497525053616, 0.62736356625546600, 0.07529145849399789,
|
254
|
+
0.02703136138641237, 0.07068885253582714, 0.99133753683763890
|
255
|
+
].freeze
|
256
|
+
|
257
|
+
# The transformation matrix for converting xyz colors to linear-light a98-rgb.
|
258
|
+
XYZ_D65_TO_LINEAR_A98_RGB = [
|
259
|
+
2.04158790381074600, -0.56500697427885960, -0.34473135077832950,
|
260
|
+
-0.96924363628087980, 1.87596750150772060, 0.04155505740717561,
|
261
|
+
0.01344428063203102, -0.11836239223101823, 1.01517499439120540
|
262
|
+
].freeze
|
263
|
+
|
264
|
+
# The transformation matrix for converting linear-light a98-rgb colors to lms.
|
265
|
+
LINEAR_A98_RGB_TO_LMS = [
|
266
|
+
0.57643226147714040, 0.36991322114441194, 0.05365451737844765,
|
267
|
+
0.29631647387335260, 0.59167612662650690, 0.11200739940014041,
|
268
|
+
0.12347825480374285, 0.21949869580674647, 0.65702304938951070
|
269
|
+
].freeze
|
270
|
+
|
271
|
+
# The transformation matrix for converting lms colors to linear-light a98-rgb.
|
272
|
+
LMS_TO_LINEAR_A98_RGB = [
|
273
|
+
2.55403684790806950, -1.62197620262602140, 0.06793935455575403,
|
274
|
+
-1.26843800409217660, 2.60975740066337240, -0.34131939631021974,
|
275
|
+
-0.05623474718052319, -0.56704183411879500, 1.62327658124261400
|
276
|
+
].freeze
|
277
|
+
|
278
|
+
# The transformation matrix for converting linear-light a98-rgb colors to
|
279
|
+
# linear-light prophoto-rgb.
|
280
|
+
LINEAR_A98_RGB_TO_LINEAR_PROPHOTO_RGB = [
|
281
|
+
0.74011750180477920, 0.11327951328898105, 0.14660298490623970,
|
282
|
+
0.13755046469802620, 0.83307708026948400, 0.02937245503248977,
|
283
|
+
0.02359772990871766, 0.07378347703906656, 0.90261879305221580
|
284
|
+
].freeze
|
285
|
+
|
286
|
+
# The transformation matrix for converting linear-light prophoto-rgb colors to
|
287
|
+
# linear-light a98-rgb.
|
288
|
+
LINEAR_PROPHOTO_RGB_TO_LINEAR_A98_RGB = [
|
289
|
+
1.38965124815152000, -0.16945907691487766, -0.22019217123664242,
|
290
|
+
-0.22882573163305037, 1.23174254119010480, -0.00291680955705449,
|
291
|
+
-0.01762544368426068, -0.09625702306122665, 1.11388246674548740
|
292
|
+
].freeze
|
293
|
+
|
294
|
+
# The transformation matrix for converting linear-light a98-rgb colors to
|
295
|
+
# xyz-d50.
|
296
|
+
LINEAR_A98_RGB_TO_XYZ_D50 = [
|
297
|
+
0.60977504188618140, 0.20530000261929401, 0.14922063192409227,
|
298
|
+
0.31112461220464155, 0.62565323083468560, 0.06322215696067286,
|
299
|
+
0.01947059555648168, 0.06087908649415867, 0.74475492045981980
|
300
|
+
].freeze
|
301
|
+
|
302
|
+
# The transformation matrix for converting xyz-d50 colors to linear-light
|
303
|
+
# a98-rgb.
|
304
|
+
XYZ_D50_TO_LINEAR_A98_RGB = [
|
305
|
+
1.96246703637688060, -0.61074234048150730, -0.34135809808271540,
|
306
|
+
-0.97879547655577770, 1.91625437739598840, 0.03344287339036693,
|
307
|
+
0.02870443944957101, -0.14067486633170680, 1.34891418141379370
|
308
|
+
].freeze
|
309
|
+
|
310
|
+
# The transformation matrix for converting linear-light rec2020 colors to xyz.
|
311
|
+
LINEAR_REC2020_TO_XYZ_D65 = [
|
312
|
+
0.63695804830129130, 0.14461690358620838, 0.16888097516417205,
|
313
|
+
0.26270021201126703, 0.67799807151887100, 0.05930171646986194,
|
314
|
+
0.00000000000000000, 0.02807269304908750, 1.06098505771079090
|
315
|
+
].freeze
|
316
|
+
|
317
|
+
# The transformation matrix for converting xyz colors to linear-light rec2020.
|
318
|
+
XYZ_D65_TO_LINEAR_REC2020 = [
|
319
|
+
1.71665118797126760, -0.35567078377639240, -0.25336628137365980,
|
320
|
+
-0.66668435183248900, 1.61648123663493900, 0.01576854581391113,
|
321
|
+
0.01763985744531091, -0.04277061325780865, 0.94210312123547400
|
322
|
+
].freeze
|
323
|
+
|
324
|
+
# The transformation matrix for converting linear-light rec2020 colors to lms.
|
325
|
+
LINEAR_REC2020_TO_LMS = [
|
326
|
+
0.61675578719908560, 0.36019839939276255, 0.02304581340815186,
|
327
|
+
0.26513306398328140, 0.63583936407771060, 0.09902757183900800,
|
328
|
+
0.10010263423281572, 0.20390651940192997, 0.69599084636525430
|
329
|
+
].freeze
|
330
|
+
|
331
|
+
# The transformation matrix for converting lms colors to linear-light rec2020.
|
332
|
+
LMS_TO_LINEAR_REC2020 = [
|
333
|
+
2.13990673569556170, -1.24638950878469060, 0.10648277296448995,
|
334
|
+
-0.88473586245815630, 2.16323098210838260, -0.27849511943390290,
|
335
|
+
-0.04857375801465988, -0.45450314291725170, 1.50307690088646130
|
336
|
+
].freeze
|
337
|
+
|
338
|
+
# The transformation matrix for converting linear-light rec2020 colors to
|
339
|
+
# linear-light prophoto-rgb.
|
340
|
+
LINEAR_REC2020_TO_LINEAR_PROPHOTO_RGB = [
|
341
|
+
0.83518733312972350, 0.04886884858605698, 0.11594381828421951,
|
342
|
+
0.05403324519953363, 0.92891840856920440, 0.01704834623126199,
|
343
|
+
-0.00234203897072539, 0.03633215316169465, 0.96600988580903070
|
344
|
+
].freeze
|
345
|
+
|
346
|
+
# The transformation matrix for converting linear-light prophoto-rgb colors to
|
347
|
+
# linear-light rec2020.
|
348
|
+
LINEAR_PROPHOTO_RGB_TO_LINEAR_REC2020 = [
|
349
|
+
1.20065932951740800, -0.05756805370122346, -0.14309127581618444,
|
350
|
+
-0.06994154955888504, 1.08061789759721400, -0.01067634803832895,
|
351
|
+
0.00554147334294746, -0.04078219298657951, 1.03524071964363200
|
352
|
+
].freeze
|
353
|
+
|
354
|
+
# The transformation matrix for converting linear-light rec2020 colors to
|
355
|
+
# xyz-d50.
|
356
|
+
LINEAR_REC2020_TO_XYZ_D50 = [
|
357
|
+
0.67351546318827600, 0.16569726370390453, 0.12508294953738705,
|
358
|
+
0.27905900514112060, 0.67531800574910980, 0.04562298910976962,
|
359
|
+
-0.00193242713400438, 0.02997782679282923, 0.79705920285163550
|
360
|
+
].freeze
|
361
|
+
|
362
|
+
# The transformation matrix for converting xyz-d50 colors to linear-light
|
363
|
+
# rec2020.
|
364
|
+
XYZ_D50_TO_LINEAR_REC2020 = [
|
365
|
+
1.64718490467176600, -0.39368189813164710, -0.23595963848828266,
|
366
|
+
-0.68266410741738180, 1.64771461274440760, 0.01281708338512084,
|
367
|
+
0.02966887665275675, -0.06292589642970030, 1.25355782018657710
|
368
|
+
].freeze
|
369
|
+
|
370
|
+
# The transformation matrix for converting xyz colors to lms.
|
371
|
+
XYZ_D65_TO_LMS = [
|
372
|
+
0.81902244321643190, 0.36190625628012210, -0.12887378261216414,
|
373
|
+
0.03298366719802710, 0.92928684689655460, 0.03614466816999844,
|
374
|
+
0.04817719956604625, 0.26423952494422764, 0.63354782581369370
|
375
|
+
].freeze
|
376
|
+
|
377
|
+
# The transformation matrix for converting lms colors to xyz.
|
378
|
+
LMS_TO_XYZ_D65 = [
|
379
|
+
1.22687987337415570, -0.55781499655548140, 0.28139105017721590,
|
380
|
+
-0.04057576262431372, 1.11228682939705960, -0.07171106666151703,
|
381
|
+
-0.07637294974672143, -0.42149332396279143, 1.58692402442724180
|
382
|
+
].freeze
|
383
|
+
|
384
|
+
# The transformation matrix for converting xyz colors to linear-light
|
385
|
+
# prophoto-rgb.
|
386
|
+
XYZ_D65_TO_LINEAR_PROPHOTO_RGB = [
|
387
|
+
1.40319046337749790, -0.22301514479051668, -0.10160668507413790,
|
388
|
+
-0.52623840216330720, 1.48163196292346440, 0.01701879027252688,
|
389
|
+
-0.01120226528622150, 0.01824640347962099, 0.91124722749150480
|
390
|
+
].freeze
|
391
|
+
|
392
|
+
# The transformation matrix for converting linear-light prophoto-rgb colors to
|
393
|
+
# xyz.
|
394
|
+
LINEAR_PROPHOTO_RGB_TO_XYZ_D65 = [
|
395
|
+
0.75559074229692100, 0.11271984265940525, 0.08214534209534540,
|
396
|
+
0.26832184357857190, 0.71511525666179120, 0.01656289975963685,
|
397
|
+
0.00391597276242580, -0.01293344283684181, 1.09807522083429450
|
398
|
+
].freeze
|
399
|
+
|
400
|
+
# The transformation matrix for converting xyz colors to xyz-d50.
|
401
|
+
XYZ_D65_TO_XYZ_D50 = [
|
402
|
+
1.04792979254499660, 0.02294687060160952, -0.05019226628920519,
|
403
|
+
0.02962780877005567, 0.99043442675388000, -0.01707379906341879,
|
404
|
+
-0.00924304064620452, 0.01505519149029816, 0.75187428142813700
|
405
|
+
].freeze
|
406
|
+
|
407
|
+
# The transformation matrix for converting xyz-d50 colors to xyz.
|
408
|
+
XYZ_D50_TO_XYZ_D65 = [
|
409
|
+
0.95547342148807520, -0.02309845494876452, 0.06325924320057065,
|
410
|
+
-0.02836970933386358, 1.00999539808130410, 0.02104144119191730,
|
411
|
+
0.01231401486448199, -0.02050764929889898, 1.33036592624212400
|
412
|
+
].freeze
|
413
|
+
|
414
|
+
# The transformation matrix for converting lms colors to linear-light
|
415
|
+
# prophoto-rgb.
|
416
|
+
LMS_TO_LINEAR_PROPHOTO_RGB = [
|
417
|
+
1.73835514985815240, -0.98795095237343430, 0.24959580241648663,
|
418
|
+
-0.70704942624914860, 1.93437008438177620, -0.22732065793919040,
|
419
|
+
-0.08407883426424761, -0.35754059702097796, 1.44161943124947150
|
420
|
+
].freeze
|
421
|
+
|
422
|
+
# The transformation matrix for converting linear-light prophoto-rgb colors to
|
423
|
+
# lms.
|
424
|
+
LINEAR_PROPHOTO_RGB_TO_LMS = [
|
425
|
+
0.71544846349294310, 0.35279154798172740, -0.06824001147467047,
|
426
|
+
0.27441165509049420, 0.66779764080811480, 0.05779070400139092,
|
427
|
+
0.10978443849083751, 0.18619828746596980, 0.70401727404319270
|
428
|
+
].freeze
|
429
|
+
|
430
|
+
# The transformation matrix for converting lms colors to xyz-d50.
|
431
|
+
LMS_TO_XYZ_D50 = [
|
432
|
+
1.28858621583908840, -0.53787174651736210, 0.21358120705405403,
|
433
|
+
-0.00253389352489796, 1.09231682453266550, -0.08978293089853581,
|
434
|
+
-0.06937383312514489, -0.29500839218634667, 1.18948682779245090
|
435
|
+
].freeze
|
436
|
+
|
437
|
+
# The transformation matrix for converting xyz-d50 colors to lms.
|
438
|
+
XYZ_D50_TO_LMS = [
|
439
|
+
0.77070004712402500, 0.34924839871072740, -0.11202352004249890,
|
440
|
+
0.00559650559780223, 0.93707232493333150, 0.06972569131301698,
|
441
|
+
0.04633715253432816, 0.25277530868525870, 0.85145807371608350
|
442
|
+
].freeze
|
443
|
+
|
444
|
+
# The transformation matrix for converting linear-light prophoto-rgb colors to
|
445
|
+
# xyz-d50.
|
446
|
+
LINEAR_PROPHOTO_RGB_TO_XYZ_D50 = [
|
447
|
+
0.79776664490064230, 0.13518129740053308, 0.03134773412839220,
|
448
|
+
0.28807482881940130, 0.71183523424187300, 0.00008993693872564,
|
449
|
+
0.00000000000000000, 0.00000000000000000, 0.82510460251046020
|
450
|
+
].freeze
|
451
|
+
|
452
|
+
# The transformation matrix for converting xyz-d50 colors to linear-light
|
453
|
+
# prophoto-rgb.
|
454
|
+
XYZ_D50_TO_LINEAR_PROPHOTO_RGB = [
|
455
|
+
1.34578688164715830, -0.25557208737979464, -0.05110186497554526,
|
456
|
+
-0.54463070512490190, 1.50824774284514680, 0.02052744743642139,
|
457
|
+
0.00000000000000000, 0.00000000000000000, 1.21196754563894520
|
458
|
+
].freeze
|
459
|
+
end
|
460
|
+
|
461
|
+
private_constant :Conversions
|
462
|
+
end
|
463
|
+
end
|
464
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sass
|
4
|
+
module Value
|
5
|
+
class Color
|
6
|
+
module GamutMapMethod
|
7
|
+
# @see https://github.com/sass/dart-sass/blob/main/lib/src/value/color/gamut_map_method/local_minde.dart
|
8
|
+
class Clip
|
9
|
+
include GamutMapMethod
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
super('clip')
|
13
|
+
end
|
14
|
+
|
15
|
+
def map(color)
|
16
|
+
space = color.send(:_space)
|
17
|
+
Color.send(:for_space_internal,
|
18
|
+
space,
|
19
|
+
_clamp_channel(color.send(:channel0_or_nil), space.channels[0]),
|
20
|
+
_clamp_channel(color.send(:channel1_or_nil), space.channels[1]),
|
21
|
+
_clamp_channel(color.send(:channel2_or_nil), space.channels[2]),
|
22
|
+
color.send(:alpha_or_nil))
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def _clamp_channel(value, channel)
|
28
|
+
return nil if value.nil?
|
29
|
+
|
30
|
+
case channel
|
31
|
+
when LinearChannel
|
32
|
+
FuzzyMath.clamp_like_css(value, channel.min, channel.max)
|
33
|
+
else
|
34
|
+
value
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
private_constant :Clip
|
40
|
+
|
41
|
+
CLIP = Clip.new
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sass
|
4
|
+
module Value
|
5
|
+
class Color
|
6
|
+
module GamutMapMethod
|
7
|
+
# @see https://github.com/sass/dart-sass/blob/main/lib/src/value/color/gamut_map_method/local_minde.dart
|
8
|
+
class LocalMinde
|
9
|
+
include GamutMapMethod
|
10
|
+
|
11
|
+
# A constant from the gamut-mapping algorithm.
|
12
|
+
JND = 0.02
|
13
|
+
|
14
|
+
private_constant :JND
|
15
|
+
|
16
|
+
# A constant from the gamut-mapping algorithm.
|
17
|
+
EPSILON = 0.0001
|
18
|
+
|
19
|
+
private_constant :EPSILON
|
20
|
+
|
21
|
+
def initialize
|
22
|
+
super('local-minde')
|
23
|
+
end
|
24
|
+
|
25
|
+
def map(color)
|
26
|
+
original_oklch = color.send(:_to_space, Space::OKLCH)
|
27
|
+
lightness = original_oklch.send(:channel0_or_nil)
|
28
|
+
hue = original_oklch.send(:channel2_or_nil)
|
29
|
+
alpha = original_oklch.send(:alpha_or_nil)
|
30
|
+
|
31
|
+
if FuzzyMath.greater_than_or_equals(lightness.nil? ? 0 : lightness, 1)
|
32
|
+
if color.legacy?
|
33
|
+
return Color.send(:_for_space,
|
34
|
+
Space::RGB, 255, 255, 255, color.send(:alpha_or_nil))
|
35
|
+
.send(:_to_space, color.send(:_space))
|
36
|
+
else
|
37
|
+
return Color.send(:for_space_internal,
|
38
|
+
color.send(:_space), 1, 1, 1, color.send(:alpha_or_nil))
|
39
|
+
end
|
40
|
+
elsif FuzzyMath.less_than_or_equals(lightness.nil? ? 0 : lightness, 0)
|
41
|
+
return Color.send(:_for_space,
|
42
|
+
Space::RGB, 0, 0, 0, color.send(:alpha_or_nil))
|
43
|
+
.send(:_to_space, color.send(:_space))
|
44
|
+
end
|
45
|
+
|
46
|
+
clipped = color.send(:_to_gamut, CLIP)
|
47
|
+
return clipped if _delta_eok(clipped, color) < JND
|
48
|
+
|
49
|
+
min = 0.0
|
50
|
+
max = original_oklch.send(:channel1)
|
51
|
+
min_in_gamut = true
|
52
|
+
while max - min > EPSILON
|
53
|
+
chroma = (min + max) / 2
|
54
|
+
|
55
|
+
current = Space::OKLCH.convert(color.send(:_space), lightness, chroma, hue, alpha)
|
56
|
+
|
57
|
+
if min_in_gamut && current.in_gamut?
|
58
|
+
min = chroma
|
59
|
+
next
|
60
|
+
end
|
61
|
+
|
62
|
+
clipped = current.send(:_to_gamut, CLIP)
|
63
|
+
e = _delta_eok(clipped, current)
|
64
|
+
|
65
|
+
if e < JND
|
66
|
+
return clipped if JND - e < EPSILON
|
67
|
+
|
68
|
+
min_in_gamut = false
|
69
|
+
min = chroma
|
70
|
+
else
|
71
|
+
max = chroma
|
72
|
+
end
|
73
|
+
end
|
74
|
+
clipped
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
def _delta_eok(color1, color2)
|
80
|
+
lab1 = color1.send(:_to_space, Space::OKLAB)
|
81
|
+
lab2 = color2.send(:_to_space, Space::OKLAB)
|
82
|
+
Math.sqrt(((lab1.send(:channel0) - lab2.send(:channel0))**2) +
|
83
|
+
((lab1.send(:channel1) - lab2.send(:channel1))**2) +
|
84
|
+
((lab1.send(:channel2) - lab2.send(:channel2))**2))
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
private_constant :LocalMinde
|
89
|
+
|
90
|
+
LOCAL_MINDE = LocalMinde.new
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sass
|
4
|
+
module Value
|
5
|
+
class Color
|
6
|
+
# @see https://github.com/sass/dart-sass/blob/main/lib/src/value/color/gamut_map_method.dart
|
7
|
+
module GamutMapMethod
|
8
|
+
# @return [::String]
|
9
|
+
attr_reader :name
|
10
|
+
|
11
|
+
# @param name [::String]
|
12
|
+
def initialize(name)
|
13
|
+
@name = name
|
14
|
+
end
|
15
|
+
|
16
|
+
class << self
|
17
|
+
# @param name [::String]
|
18
|
+
# @param argument_name [::String]
|
19
|
+
# @return [GamutMapMethod]
|
20
|
+
def from_name(name, argument_name = nil)
|
21
|
+
case name
|
22
|
+
when 'clip'
|
23
|
+
CLIP
|
24
|
+
when 'local-minde'
|
25
|
+
LOCAL_MINDE
|
26
|
+
else
|
27
|
+
raise Sass::ScriptError.new("Unknown gamut map method \"#{name}\".", argument_name)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# @param color [Color]
|
33
|
+
# @return [Color]
|
34
|
+
def map(color)
|
35
|
+
raise NotImplementedError, "[BUG] gamut map method #{name} doesn't implement map."
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
private_constant :GamutMapMethod
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
require_relative 'gamut_map_method/clip'
|
45
|
+
require_relative 'gamut_map_method/local_minde'
|