|
1139 | 1139 | { typ: exports.EnumToken.NumberTokenType, val: String(values[2]) }, |
1140 | 1140 | ]; |
1141 | 1141 | if (values.length == 4) { |
1142 | | - chi.push({ typ: exports.EnumToken.LiteralTokenType, val: '/' }, { typ: exports.EnumToken.PercentageTokenType, val: (values[3] * 100).toFixed() }); |
| 1142 | + chi.push({ typ: exports.EnumToken.LiteralTokenType, val: '/' }, { |
| 1143 | + typ: exports.EnumToken.PercentageTokenType, |
| 1144 | + val: (values[3] * 100).toFixed() |
| 1145 | + }); |
1143 | 1146 | } |
1144 | 1147 | return { |
1145 | 1148 | typ: exports.EnumToken.ColorTokenType, |
|
1173 | 1176 | return srgb2labvalues(...values); |
1174 | 1177 | } |
1175 | 1178 | function hwb2labvalues(token) { |
| 1179 | + const values = hwb2srgbvalues(token); |
| 1180 | + if (values == null) { |
| 1181 | + return null; |
| 1182 | + } |
1176 | 1183 | // @ts-ignore |
1177 | | - return srgb2labvalues(...hwb2srgbvalues(token)); |
| 1184 | + return srgb2labvalues(...values); |
1178 | 1185 | } |
1179 | 1186 | function lch2labvalues(token) { |
1180 | 1187 | const values = getLCHComponents(token); |
|
1254 | 1261 | } |
1255 | 1262 | for (let i = 0; i < components.length; i++) { |
1256 | 1263 | if (![exports.EnumToken.NumberTokenType, exports.EnumToken.PercentageTokenType, exports.EnumToken.AngleTokenType, exports.EnumToken.IdenTokenType].includes(components[i].typ)) { |
1257 | | - return []; |
| 1264 | + return null; |
1258 | 1265 | } |
1259 | 1266 | } |
1260 | 1267 | // @ts-ignore |
|
1286 | 1293 | // @ts-ignore |
1287 | 1294 | const xyz_d65 = XYZ_D50_to_D65(...xyz_d50); |
1288 | 1295 | // @ts-ignore |
1289 | | - const lin_srgb = XYZ_to_lin_sRGB(...xyz_d65); |
1290 | | - lin_srgb.map((value, i) => value > 0.0031308 ? 1.055 * Math.pow(value, 1 / 2.4) - 0.055 : 12.92 * value); |
1291 | | - // @ts-ignore |
1292 | | - return xyzd502srgb(...Lab_to_XYZ(l, a, b)); |
| 1296 | + return xyz2srgb(...xyz_d65); |
1293 | 1297 | } |
1294 | 1298 | // from https://www.w3.org/TR/css-color-4/#color-conversion-code |
1295 | 1299 | function Lab_to_XYZ(l, a, b) { |
|
1781 | 1785 | function okLabDistance(okLab1, okLab2) { |
1782 | 1786 | return Math.sqrt(Math.pow(okLab1[0] - okLab2[0], 2) + Math.pow(okLab1[1] - okLab2[1], 2) + Math.pow(okLab1[2] - okLab2[2], 2)); |
1783 | 1787 | } |
1784 | | - function isOkLabClose(color1, color2, threshold = 2.3) { |
| 1788 | + function isOkLabClose(color1, color2, threshold = .01) { |
1785 | 1789 | color1 = convertColor(color1, exports.ColorType.OKLAB); |
1786 | 1790 | color2 = convertColor(color2, exports.ColorType.OKLAB); |
1787 | 1791 | // console.error(JSON.stringify({color1, color2}, null, 1)); |
|
3820 | 3824 | case exports.ColorType.LCH: |
3821 | 3825 | return lch2HslToken(token); |
3822 | 3826 | case exports.ColorType.COLOR: |
| 3827 | + case exports.ColorType.XYZ: |
| 3828 | + case exports.ColorType.SRGB: |
| 3829 | + case exports.ColorType.REC2020: |
| 3830 | + case exports.ColorType.XYZ_D50: |
| 3831 | + case exports.ColorType.A98_RGB: |
| 3832 | + case exports.ColorType.DISPLAY_P3: |
| 3833 | + case exports.ColorType.SRGB_LINEAR: |
| 3834 | + case exports.ColorType.PROPHOTO_RGB: |
3823 | 3835 | return color2HslToken(token); |
3824 | 3836 | } |
3825 | 3837 | } |
|
3830 | 3842 | return rgb2hwbToken(token); |
3831 | 3843 | case exports.ColorType.HEX: |
3832 | 3844 | case exports.ColorType.LIT: |
3833 | | - // @ts-ignore |
3834 | 3845 | return rgb2hwbToken(token); |
3835 | 3846 | case exports.ColorType.HSL: |
3836 | 3847 | case exports.ColorType.HSLA: |
|
3846 | 3857 | case exports.ColorType.DEVICE_CMYK: |
3847 | 3858 | return cmyk2hwbToken(token); |
3848 | 3859 | case exports.ColorType.COLOR: |
| 3860 | + case exports.ColorType.XYZ: |
| 3861 | + case exports.ColorType.SRGB: |
| 3862 | + case exports.ColorType.REC2020: |
| 3863 | + case exports.ColorType.XYZ_D50: |
| 3864 | + case exports.ColorType.A98_RGB: |
| 3865 | + case exports.ColorType.DISPLAY_P3: |
| 3866 | + case exports.ColorType.SRGB_LINEAR: |
| 3867 | + case exports.ColorType.PROPHOTO_RGB: |
3849 | 3868 | return color2hwbToken(token); |
3850 | 3869 | } |
3851 | 3870 | } |
|
3872 | 3891 | case exports.ColorType.LCH: |
3873 | 3892 | return lch2cmykToken(token); |
3874 | 3893 | case exports.ColorType.COLOR: |
| 3894 | + case exports.ColorType.XYZ: |
| 3895 | + case exports.ColorType.SRGB: |
| 3896 | + case exports.ColorType.REC2020: |
| 3897 | + case exports.ColorType.XYZ_D50: |
| 3898 | + case exports.ColorType.A98_RGB: |
| 3899 | + case exports.ColorType.DISPLAY_P3: |
| 3900 | + case exports.ColorType.SRGB_LINEAR: |
| 3901 | + case exports.ColorType.PROPHOTO_RGB: |
3875 | 3902 | return color2cmykToken(token); |
3876 | 3903 | } |
3877 | 3904 | } |
|
3901 | 3928 | case exports.ColorType.LCH: |
3902 | 3929 | return lch2HexToken(token); |
3903 | 3930 | case exports.ColorType.COLOR: |
| 3931 | + case exports.ColorType.XYZ: |
| 3932 | + case exports.ColorType.SRGB: |
| 3933 | + case exports.ColorType.REC2020: |
| 3934 | + case exports.ColorType.XYZ_D50: |
| 3935 | + case exports.ColorType.A98_RGB: |
| 3936 | + case exports.ColorType.DISPLAY_P3: |
| 3937 | + case exports.ColorType.SRGB_LINEAR: |
| 3938 | + case exports.ColorType.PROPHOTO_RGB: |
3904 | 3939 | return color2HexToken(token); |
3905 | 3940 | case exports.ColorType.RGB: |
3906 | 3941 | case exports.ColorType.RGBA: |
|
3927 | 3962 | case exports.ColorType.LCH: |
3928 | 3963 | return lch2RgbToken(token); |
3929 | 3964 | case exports.ColorType.COLOR: |
| 3965 | + case exports.ColorType.XYZ: |
| 3966 | + case exports.ColorType.SRGB: |
| 3967 | + case exports.ColorType.REC2020: |
| 3968 | + case exports.ColorType.XYZ_D50: |
| 3969 | + case exports.ColorType.A98_RGB: |
| 3970 | + case exports.ColorType.DISPLAY_P3: |
| 3971 | + case exports.ColorType.SRGB_LINEAR: |
| 3972 | + case exports.ColorType.PROPHOTO_RGB: |
3930 | 3973 | return color2RgbToken(token); |
3931 | 3974 | } |
3932 | 3975 | } |
|
3952 | 3995 | case exports.ColorType.OKLCH: |
3953 | 3996 | return oklch2labToken(token); |
3954 | 3997 | case exports.ColorType.COLOR: |
| 3998 | + case exports.ColorType.XYZ: |
| 3999 | + case exports.ColorType.SRGB: |
| 4000 | + case exports.ColorType.REC2020: |
| 4001 | + case exports.ColorType.XYZ_D50: |
| 4002 | + case exports.ColorType.A98_RGB: |
| 4003 | + case exports.ColorType.DISPLAY_P3: |
| 4004 | + case exports.ColorType.SRGB_LINEAR: |
| 4005 | + case exports.ColorType.PROPHOTO_RGB: |
3955 | 4006 | return color2labToken(token); |
3956 | 4007 | } |
3957 | 4008 | } |
|
3977 | 4028 | case exports.ColorType.OKLCH: |
3978 | 4029 | return oklch2lchToken(token); |
3979 | 4030 | case exports.ColorType.COLOR: |
| 4031 | + case exports.ColorType.XYZ: |
| 4032 | + case exports.ColorType.SRGB: |
| 4033 | + case exports.ColorType.REC2020: |
| 4034 | + case exports.ColorType.XYZ_D50: |
| 4035 | + case exports.ColorType.A98_RGB: |
| 4036 | + case exports.ColorType.DISPLAY_P3: |
| 4037 | + case exports.ColorType.SRGB_LINEAR: |
| 4038 | + case exports.ColorType.PROPHOTO_RGB: |
3980 | 4039 | return color2lchToken(token); |
3981 | 4040 | } |
3982 | 4041 | } |
|
4002 | 4061 | case exports.ColorType.OKLCH: |
4003 | 4062 | return oklch2oklabToken(token); |
4004 | 4063 | case exports.ColorType.COLOR: |
| 4064 | + case exports.ColorType.XYZ: |
| 4065 | + case exports.ColorType.SRGB: |
| 4066 | + case exports.ColorType.REC2020: |
| 4067 | + case exports.ColorType.XYZ_D50: |
| 4068 | + case exports.ColorType.A98_RGB: |
| 4069 | + case exports.ColorType.DISPLAY_P3: |
| 4070 | + case exports.ColorType.SRGB_LINEAR: |
| 4071 | + case exports.ColorType.PROPHOTO_RGB: |
4005 | 4072 | return color2oklabToken(token); |
4006 | 4073 | } |
4007 | 4074 | } |
|
4027 | 4094 | case exports.ColorType.LCH: |
4028 | 4095 | return lch2oklchToken(token); |
4029 | 4096 | case exports.ColorType.COLOR: |
| 4097 | + case exports.ColorType.XYZ: |
| 4098 | + case exports.ColorType.SRGB: |
| 4099 | + case exports.ColorType.REC2020: |
| 4100 | + case exports.ColorType.XYZ_D50: |
| 4101 | + case exports.ColorType.A98_RGB: |
| 4102 | + case exports.ColorType.DISPLAY_P3: |
| 4103 | + case exports.ColorType.SRGB_LINEAR: |
| 4104 | + case exports.ColorType.PROPHOTO_RGB: |
4030 | 4105 | return color2oklchToken(token); |
4031 | 4106 | } |
4032 | 4107 | } |
4033 | 4108 | else if (colorFuncColorSpace.includes(exports.ColorType[to].toLowerCase().replaceAll('_', '-').toLowerCase().replaceAll('_', '-'))) { |
4034 | | - console.error(exports.ColorType[token.kin]); |
4035 | 4109 | switch (token.kin) { |
4036 | 4110 | case exports.ColorType.HEX: |
4037 | 4111 | case exports.ColorType.LIT: |
|
4136 | 4210 | if (values == null) { |
4137 | 4211 | return null; |
4138 | 4212 | } |
4139 | | - console.error({ srgb: values }); |
4140 | 4213 | return values2colortoken(values, to); |
4141 | 4214 | } |
4142 | 4215 | function srgb2srgbcolorspace(val, to) { |
|
4237 | 4310 | { typ: exports.EnumToken.NumberTokenType, val: String(values[2]) }, |
4238 | 4311 | ]; |
4239 | 4312 | if (values.length == 4) { |
4240 | | - chi.push({ typ: exports.EnumToken.PercentageTokenType, val: (values[3] * 100).toFixed() }); |
| 4313 | + chi.push({ typ: exports.EnumToken.LiteralTokenType, val: "/" }, { |
| 4314 | + typ: exports.EnumToken.PercentageTokenType, |
| 4315 | + val: (values[3] * 100).toFixed() |
| 4316 | + }); |
4241 | 4317 | } |
4242 | 4318 | const colorSpace = exports.ColorType[to].toLowerCase().replaceAll('_', '-'); |
4243 | 4319 | return colorFuncColorSpace.includes(colorSpace) ? { |
|
0 commit comments