@leafer-in/color 1.0.3

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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2023-present, Chao (Leafer) Wan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # @leafer-in/color
package/dist/color.cjs ADDED
@@ -0,0 +1,307 @@
1
+ 'use strict';
2
+
3
+ var draw = require('@leafer-ui/draw');
4
+
5
+ const colorNames = {
6
+ transparent: 'FFF0',
7
+ aliceblue: 'F0F8FF',
8
+ antiquewhite: 'FAEBD7',
9
+ aqua: '0FF',
10
+ aquamarine: '7FFFD4',
11
+ azure: 'F0FFFF',
12
+ beige: 'F5F5DC',
13
+ bisque: 'FFE4C4',
14
+ black: '0',
15
+ blanchedalmond: 'FFEBCD',
16
+ blue: '00F',
17
+ blueviolet: '8A2BE2',
18
+ brown: 'A52A2A',
19
+ burlywood: 'DEB887',
20
+ cadetblue: '5F9EA0',
21
+ chartreuse: '7FFF00',
22
+ chocolate: 'D2691E',
23
+ coral: 'FF7F50',
24
+ cornflowerblue: '6495ED',
25
+ cornsilk: 'FFF8DC',
26
+ crimson: 'DC143C',
27
+ cyan: '0FF',
28
+ darkblue: '00008B',
29
+ darkcyan: '008B8B',
30
+ darkgoldenrod: 'B8860B',
31
+ darkgray: 'A9',
32
+ darkgreen: '006400',
33
+ darkgrey: 'A9',
34
+ darkkhaki: 'BDB76B',
35
+ darkmagenta: '8B008B',
36
+ darkolivegreen: '556B2F',
37
+ darkorange: 'FF8C00',
38
+ darkorchid: '9932CC',
39
+ darkred: '8B0000',
40
+ darksalmon: 'E9967A',
41
+ darkseagreen: '8FBC8F',
42
+ darkslateblue: '483D8B',
43
+ darkslategray: '2F4F4F',
44
+ darkslategrey: '2F4F4F',
45
+ darkturquoise: '00CED1',
46
+ darkviolet: '9400D3',
47
+ deeppink: 'FF1493',
48
+ deepskyblue: '00BFFF',
49
+ dimgray: '69',
50
+ dimgrey: '69',
51
+ dodgerblue: '1E90FF',
52
+ firebrick: 'B22222',
53
+ floralwhite: 'FFFAF0',
54
+ forestgreen: '228B22',
55
+ fuchsia: 'F0F',
56
+ gainsboro: 'DC',
57
+ ghostwhite: 'F8F8FF',
58
+ gold: 'FFD700',
59
+ goldenrod: 'DAA520',
60
+ gray: '80',
61
+ green: '008000',
62
+ greenyellow: 'ADFF2F',
63
+ grey: '80',
64
+ honeydew: 'F0FFF0',
65
+ hotpink: 'FF69B4',
66
+ indianred: 'CD5C5C',
67
+ indigo: '4B0082',
68
+ ivory: 'FFFFF0',
69
+ khaki: 'F0E68C',
70
+ lavender: 'E6E6FA',
71
+ lavenderblush: 'FFF0F5',
72
+ lawngreen: '7CFC00',
73
+ lemonchiffon: 'FFFACD',
74
+ lightblue: 'ADD8E6',
75
+ lightcoral: 'F08080',
76
+ lightcyan: 'E0FFFF',
77
+ lightgoldenrodyellow: 'FAFAD2',
78
+ lightgray: 'D3',
79
+ lightgreen: '90EE90',
80
+ lightgrey: 'D3',
81
+ lightpink: 'FFB6C1',
82
+ lightsalmon: 'FFA07A',
83
+ lightseagreen: '20B2AA',
84
+ lightskyblue: '87CEFA',
85
+ lightslategray: '789',
86
+ lightslategrey: '789',
87
+ lightsteelblue: 'B0C4DE',
88
+ lightyellow: 'FFFFE0',
89
+ lime: '00FF00',
90
+ limegreen: '32CD32',
91
+ linen: 'FAF0E6',
92
+ magenta: 'FF00FF',
93
+ maroon: '800000',
94
+ mediumaquamarine: '66CDAA',
95
+ mediumblue: '0000CD',
96
+ mediumorchid: 'BA55D3',
97
+ mediumpurple: '9370DB',
98
+ mediumseagreen: '3CB371',
99
+ mediumslateblue: '7B68EE',
100
+ mediumspringgreen: '00FA9A',
101
+ mediumturquoise: '48D1CC',
102
+ mediumvioletred: 'C71585',
103
+ midnightblue: '191970',
104
+ mintcream: 'F5FFFA',
105
+ mistyrose: 'FFE4E1',
106
+ moccasin: 'FFE4B5',
107
+ navajowhite: 'FFDEAD',
108
+ navy: '000080',
109
+ oldlace: 'FDF5E6',
110
+ olive: '808000',
111
+ olivedrab: '6B8E23',
112
+ orange: 'FFA500',
113
+ orangered: 'FF4500',
114
+ orchid: 'DA70D6',
115
+ palegoldenrod: 'EEE8AA',
116
+ palegreen: '98FB98',
117
+ paleturquoise: 'AFEEEE',
118
+ palevioletred: 'D87093',
119
+ papayawhip: 'FFEFD5',
120
+ peachpuff: 'FFDAB9',
121
+ peru: 'CD853F',
122
+ pink: 'FFC0CB',
123
+ plum: 'DDA0DD',
124
+ powderblue: 'B0E0E6',
125
+ purple: '800080',
126
+ rebeccapurple: '639',
127
+ red: 'F00',
128
+ rosybrown: 'BC8F8F',
129
+ royalblue: '4169E1',
130
+ saddlebrown: '8B4513',
131
+ salmon: 'FA8072',
132
+ sandybrown: 'F4A460',
133
+ seagreen: '2E8B57',
134
+ seashell: 'FFF5EE',
135
+ sienna: 'A0522D',
136
+ silver: 'C0',
137
+ skyblue: '87CEEB',
138
+ slateblue: '6A5ACD',
139
+ slategray: '708090',
140
+ slategrey: '708090',
141
+ snow: 'FFFAFA',
142
+ springgreen: '00FF7F',
143
+ steelblue: '4682B4',
144
+ tan: 'D2B48C',
145
+ teal: '008080',
146
+ thistle: 'D8BFD8',
147
+ tomato: 'FF6347',
148
+ turquoise: '40E0D0',
149
+ violet: 'EE82EE',
150
+ wheat: 'F5DEB3',
151
+ white: 'F',
152
+ whitesmoke: 'F5',
153
+ yellow: 'FF0',
154
+ yellowgreen: '9ACD32'
155
+ };
156
+
157
+ const rgbMatch = /^rgb\((\d+),\s*(\d+),\s*(\d+)/i;
158
+ const rgbaMatch = /^rgba\((\d+),\s*(\d+),\s*(\d+),\s*(\d*\.?\d+)/i;
159
+ const hslMatch = /^hsl\((\d+),\s*(\d+)%\s*,\s*(\d+)%/i;
160
+ const hslaMatch = /^hsla\((\d+),\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d*\.?\d+)/i;
161
+ const int = parseInt, float = parseFloat, { round } = Math;
162
+ let cache = {}, totalCache = 0;
163
+ function colorToRGBA(color, opacity) {
164
+ let RGBA;
165
+ let useOpacity = opacity !== undefined && opacity !== 1;
166
+ if (typeof color === 'string') {
167
+ const cacheColor = cache[color];
168
+ if (cacheColor) {
169
+ RGBA = Object.assign({}, cacheColor);
170
+ }
171
+ else {
172
+ switch (color[0]) {
173
+ case '#':
174
+ RGBA = hexToRGBA(color);
175
+ break;
176
+ case 'R':
177
+ case 'r':
178
+ if (color[4] === '(' && rgbaMatch.test(color))
179
+ RGBA = rgbaToRGBA(color);
180
+ else if (color[3] === '(' && rgbMatch.test(color))
181
+ RGBA = rgbToRGBA(color);
182
+ break;
183
+ case 'H':
184
+ case 'h':
185
+ if (color[4] === '(' && hslaMatch.test(color))
186
+ RGBA = hslaToRGBA(color);
187
+ else if (color[3] === '(' && hslMatch.test(color))
188
+ RGBA = hslToRGBA(color);
189
+ break;
190
+ }
191
+ if (!RGBA) {
192
+ const value = colorNames[color.toLowerCase()];
193
+ if (value)
194
+ RGBA = hexToRGBA('#' + value);
195
+ }
196
+ if (RGBA) {
197
+ totalCache++;
198
+ if (totalCache > 10000)
199
+ cache = {}, totalCache = 0;
200
+ cache[color] = Object.assign({}, RGBA);
201
+ }
202
+ }
203
+ }
204
+ else if (typeof color === 'object') {
205
+ if (color.a === undefined)
206
+ color.a = 1;
207
+ if (useOpacity)
208
+ color = Object.assign({}, color);
209
+ RGBA = color;
210
+ }
211
+ if (!RGBA)
212
+ RGBA = { r: 255, g: 255, b: 255, a: 1 };
213
+ if (useOpacity)
214
+ RGBA.a *= opacity;
215
+ return RGBA;
216
+ }
217
+ function hexToRGBA(color) {
218
+ let r, g, b, a = 1;
219
+ switch (color.length) {
220
+ case 9:
221
+ r = int(color.slice(1, 3), 16);
222
+ g = int(color.slice(3, 5), 16);
223
+ b = int(color.slice(5, 7), 16);
224
+ a = int(color.slice(7, 9), 16) / 255;
225
+ break;
226
+ case 7:
227
+ r = int(color.slice(1, 3), 16);
228
+ g = int(color.slice(3, 5), 16);
229
+ b = int(color.slice(5, 7), 16);
230
+ break;
231
+ case 5:
232
+ r = int(color[1] + color[1], 16);
233
+ g = int(color[2] + color[2], 16);
234
+ b = int(color[3] + color[3], 16);
235
+ a = int(color[4] + color[4], 16) / 255;
236
+ break;
237
+ case 4:
238
+ r = int(color[1] + color[1], 16);
239
+ g = int(color[2] + color[2], 16);
240
+ b = int(color[3] + color[3], 16);
241
+ break;
242
+ case 3:
243
+ r = g = b = int(color[1] + color[2], 16);
244
+ break;
245
+ case 2:
246
+ r = g = b = int(color[1] + color[1], 16);
247
+ break;
248
+ }
249
+ return { r, g, b, a };
250
+ }
251
+ function rgbToRGBA(color) {
252
+ const match = rgbMatch.exec(color);
253
+ return {
254
+ r: int(match[1]),
255
+ g: int(match[2]),
256
+ b: int(match[3]),
257
+ a: 1
258
+ };
259
+ }
260
+ function rgbaToRGBA(color) {
261
+ const match = rgbaMatch.exec(color);
262
+ return {
263
+ r: int(match[1]),
264
+ g: int(match[2]),
265
+ b: int(match[3]),
266
+ a: float(match[4])
267
+ };
268
+ }
269
+ function hslToRGBA(color) {
270
+ const match = hslMatch.exec(color);
271
+ return hsla(float(match[1]), float(match[2]), float(match[3]), 1);
272
+ }
273
+ function hslaToRGBA(color) {
274
+ const match = hslaMatch.exec(color);
275
+ return hsla(float(match[1]), float(match[2]), float(match[3]), float(match[4]));
276
+ }
277
+ const n1 = 1 / 6, n2 = 0.5, n3 = 2 / 3, n4 = 1 / 3;
278
+ function hue(p, q, t) {
279
+ if (t < 0)
280
+ t++;
281
+ else if (t > 1)
282
+ t--;
283
+ if (t < n1)
284
+ return p + (q - p) * 6 * t;
285
+ if (t < n2)
286
+ return q;
287
+ if (t < n3)
288
+ return p + (q - p) * (n3 - t) * 6;
289
+ return p;
290
+ }
291
+ function hsla(h, s, l, a = 1) {
292
+ let r, g, b;
293
+ h /= 360, s /= 100, l /= 100;
294
+ if (s === 0) {
295
+ r = g = b = l;
296
+ }
297
+ else {
298
+ let q = l < 0.5 ? l * (1 + s) : l + s - l * s;
299
+ let p = 2 * l - q;
300
+ r = hue(p, q, h + n4);
301
+ g = hue(p, q, h);
302
+ b = hue(p, q, h - n4);
303
+ }
304
+ return { r: round(r * 255), g: round(g * 255), b: round(b * 255), a };
305
+ }
306
+
307
+ draw.ColorConvert.object = colorToRGBA;
@@ -0,0 +1,305 @@
1
+ import { ColorConvert } from '@leafer-ui/draw';
2
+
3
+ const colorNames = {
4
+ transparent: 'FFF0',
5
+ aliceblue: 'F0F8FF',
6
+ antiquewhite: 'FAEBD7',
7
+ aqua: '0FF',
8
+ aquamarine: '7FFFD4',
9
+ azure: 'F0FFFF',
10
+ beige: 'F5F5DC',
11
+ bisque: 'FFE4C4',
12
+ black: '0',
13
+ blanchedalmond: 'FFEBCD',
14
+ blue: '00F',
15
+ blueviolet: '8A2BE2',
16
+ brown: 'A52A2A',
17
+ burlywood: 'DEB887',
18
+ cadetblue: '5F9EA0',
19
+ chartreuse: '7FFF00',
20
+ chocolate: 'D2691E',
21
+ coral: 'FF7F50',
22
+ cornflowerblue: '6495ED',
23
+ cornsilk: 'FFF8DC',
24
+ crimson: 'DC143C',
25
+ cyan: '0FF',
26
+ darkblue: '00008B',
27
+ darkcyan: '008B8B',
28
+ darkgoldenrod: 'B8860B',
29
+ darkgray: 'A9',
30
+ darkgreen: '006400',
31
+ darkgrey: 'A9',
32
+ darkkhaki: 'BDB76B',
33
+ darkmagenta: '8B008B',
34
+ darkolivegreen: '556B2F',
35
+ darkorange: 'FF8C00',
36
+ darkorchid: '9932CC',
37
+ darkred: '8B0000',
38
+ darksalmon: 'E9967A',
39
+ darkseagreen: '8FBC8F',
40
+ darkslateblue: '483D8B',
41
+ darkslategray: '2F4F4F',
42
+ darkslategrey: '2F4F4F',
43
+ darkturquoise: '00CED1',
44
+ darkviolet: '9400D3',
45
+ deeppink: 'FF1493',
46
+ deepskyblue: '00BFFF',
47
+ dimgray: '69',
48
+ dimgrey: '69',
49
+ dodgerblue: '1E90FF',
50
+ firebrick: 'B22222',
51
+ floralwhite: 'FFFAF0',
52
+ forestgreen: '228B22',
53
+ fuchsia: 'F0F',
54
+ gainsboro: 'DC',
55
+ ghostwhite: 'F8F8FF',
56
+ gold: 'FFD700',
57
+ goldenrod: 'DAA520',
58
+ gray: '80',
59
+ green: '008000',
60
+ greenyellow: 'ADFF2F',
61
+ grey: '80',
62
+ honeydew: 'F0FFF0',
63
+ hotpink: 'FF69B4',
64
+ indianred: 'CD5C5C',
65
+ indigo: '4B0082',
66
+ ivory: 'FFFFF0',
67
+ khaki: 'F0E68C',
68
+ lavender: 'E6E6FA',
69
+ lavenderblush: 'FFF0F5',
70
+ lawngreen: '7CFC00',
71
+ lemonchiffon: 'FFFACD',
72
+ lightblue: 'ADD8E6',
73
+ lightcoral: 'F08080',
74
+ lightcyan: 'E0FFFF',
75
+ lightgoldenrodyellow: 'FAFAD2',
76
+ lightgray: 'D3',
77
+ lightgreen: '90EE90',
78
+ lightgrey: 'D3',
79
+ lightpink: 'FFB6C1',
80
+ lightsalmon: 'FFA07A',
81
+ lightseagreen: '20B2AA',
82
+ lightskyblue: '87CEFA',
83
+ lightslategray: '789',
84
+ lightslategrey: '789',
85
+ lightsteelblue: 'B0C4DE',
86
+ lightyellow: 'FFFFE0',
87
+ lime: '00FF00',
88
+ limegreen: '32CD32',
89
+ linen: 'FAF0E6',
90
+ magenta: 'FF00FF',
91
+ maroon: '800000',
92
+ mediumaquamarine: '66CDAA',
93
+ mediumblue: '0000CD',
94
+ mediumorchid: 'BA55D3',
95
+ mediumpurple: '9370DB',
96
+ mediumseagreen: '3CB371',
97
+ mediumslateblue: '7B68EE',
98
+ mediumspringgreen: '00FA9A',
99
+ mediumturquoise: '48D1CC',
100
+ mediumvioletred: 'C71585',
101
+ midnightblue: '191970',
102
+ mintcream: 'F5FFFA',
103
+ mistyrose: 'FFE4E1',
104
+ moccasin: 'FFE4B5',
105
+ navajowhite: 'FFDEAD',
106
+ navy: '000080',
107
+ oldlace: 'FDF5E6',
108
+ olive: '808000',
109
+ olivedrab: '6B8E23',
110
+ orange: 'FFA500',
111
+ orangered: 'FF4500',
112
+ orchid: 'DA70D6',
113
+ palegoldenrod: 'EEE8AA',
114
+ palegreen: '98FB98',
115
+ paleturquoise: 'AFEEEE',
116
+ palevioletred: 'D87093',
117
+ papayawhip: 'FFEFD5',
118
+ peachpuff: 'FFDAB9',
119
+ peru: 'CD853F',
120
+ pink: 'FFC0CB',
121
+ plum: 'DDA0DD',
122
+ powderblue: 'B0E0E6',
123
+ purple: '800080',
124
+ rebeccapurple: '639',
125
+ red: 'F00',
126
+ rosybrown: 'BC8F8F',
127
+ royalblue: '4169E1',
128
+ saddlebrown: '8B4513',
129
+ salmon: 'FA8072',
130
+ sandybrown: 'F4A460',
131
+ seagreen: '2E8B57',
132
+ seashell: 'FFF5EE',
133
+ sienna: 'A0522D',
134
+ silver: 'C0',
135
+ skyblue: '87CEEB',
136
+ slateblue: '6A5ACD',
137
+ slategray: '708090',
138
+ slategrey: '708090',
139
+ snow: 'FFFAFA',
140
+ springgreen: '00FF7F',
141
+ steelblue: '4682B4',
142
+ tan: 'D2B48C',
143
+ teal: '008080',
144
+ thistle: 'D8BFD8',
145
+ tomato: 'FF6347',
146
+ turquoise: '40E0D0',
147
+ violet: 'EE82EE',
148
+ wheat: 'F5DEB3',
149
+ white: 'F',
150
+ whitesmoke: 'F5',
151
+ yellow: 'FF0',
152
+ yellowgreen: '9ACD32'
153
+ };
154
+
155
+ const rgbMatch = /^rgb\((\d+),\s*(\d+),\s*(\d+)/i;
156
+ const rgbaMatch = /^rgba\((\d+),\s*(\d+),\s*(\d+),\s*(\d*\.?\d+)/i;
157
+ const hslMatch = /^hsl\((\d+),\s*(\d+)%\s*,\s*(\d+)%/i;
158
+ const hslaMatch = /^hsla\((\d+),\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d*\.?\d+)/i;
159
+ const int = parseInt, float = parseFloat, { round } = Math;
160
+ let cache = {}, totalCache = 0;
161
+ function colorToRGBA(color, opacity) {
162
+ let RGBA;
163
+ let useOpacity = opacity !== undefined && opacity !== 1;
164
+ if (typeof color === 'string') {
165
+ const cacheColor = cache[color];
166
+ if (cacheColor) {
167
+ RGBA = Object.assign({}, cacheColor);
168
+ }
169
+ else {
170
+ switch (color[0]) {
171
+ case '#':
172
+ RGBA = hexToRGBA(color);
173
+ break;
174
+ case 'R':
175
+ case 'r':
176
+ if (color[4] === '(' && rgbaMatch.test(color))
177
+ RGBA = rgbaToRGBA(color);
178
+ else if (color[3] === '(' && rgbMatch.test(color))
179
+ RGBA = rgbToRGBA(color);
180
+ break;
181
+ case 'H':
182
+ case 'h':
183
+ if (color[4] === '(' && hslaMatch.test(color))
184
+ RGBA = hslaToRGBA(color);
185
+ else if (color[3] === '(' && hslMatch.test(color))
186
+ RGBA = hslToRGBA(color);
187
+ break;
188
+ }
189
+ if (!RGBA) {
190
+ const value = colorNames[color.toLowerCase()];
191
+ if (value)
192
+ RGBA = hexToRGBA('#' + value);
193
+ }
194
+ if (RGBA) {
195
+ totalCache++;
196
+ if (totalCache > 10000)
197
+ cache = {}, totalCache = 0;
198
+ cache[color] = Object.assign({}, RGBA);
199
+ }
200
+ }
201
+ }
202
+ else if (typeof color === 'object') {
203
+ if (color.a === undefined)
204
+ color.a = 1;
205
+ if (useOpacity)
206
+ color = Object.assign({}, color);
207
+ RGBA = color;
208
+ }
209
+ if (!RGBA)
210
+ RGBA = { r: 255, g: 255, b: 255, a: 1 };
211
+ if (useOpacity)
212
+ RGBA.a *= opacity;
213
+ return RGBA;
214
+ }
215
+ function hexToRGBA(color) {
216
+ let r, g, b, a = 1;
217
+ switch (color.length) {
218
+ case 9:
219
+ r = int(color.slice(1, 3), 16);
220
+ g = int(color.slice(3, 5), 16);
221
+ b = int(color.slice(5, 7), 16);
222
+ a = int(color.slice(7, 9), 16) / 255;
223
+ break;
224
+ case 7:
225
+ r = int(color.slice(1, 3), 16);
226
+ g = int(color.slice(3, 5), 16);
227
+ b = int(color.slice(5, 7), 16);
228
+ break;
229
+ case 5:
230
+ r = int(color[1] + color[1], 16);
231
+ g = int(color[2] + color[2], 16);
232
+ b = int(color[3] + color[3], 16);
233
+ a = int(color[4] + color[4], 16) / 255;
234
+ break;
235
+ case 4:
236
+ r = int(color[1] + color[1], 16);
237
+ g = int(color[2] + color[2], 16);
238
+ b = int(color[3] + color[3], 16);
239
+ break;
240
+ case 3:
241
+ r = g = b = int(color[1] + color[2], 16);
242
+ break;
243
+ case 2:
244
+ r = g = b = int(color[1] + color[1], 16);
245
+ break;
246
+ }
247
+ return { r, g, b, a };
248
+ }
249
+ function rgbToRGBA(color) {
250
+ const match = rgbMatch.exec(color);
251
+ return {
252
+ r: int(match[1]),
253
+ g: int(match[2]),
254
+ b: int(match[3]),
255
+ a: 1
256
+ };
257
+ }
258
+ function rgbaToRGBA(color) {
259
+ const match = rgbaMatch.exec(color);
260
+ return {
261
+ r: int(match[1]),
262
+ g: int(match[2]),
263
+ b: int(match[3]),
264
+ a: float(match[4])
265
+ };
266
+ }
267
+ function hslToRGBA(color) {
268
+ const match = hslMatch.exec(color);
269
+ return hsla(float(match[1]), float(match[2]), float(match[3]), 1);
270
+ }
271
+ function hslaToRGBA(color) {
272
+ const match = hslaMatch.exec(color);
273
+ return hsla(float(match[1]), float(match[2]), float(match[3]), float(match[4]));
274
+ }
275
+ const n1 = 1 / 6, n2 = 0.5, n3 = 2 / 3, n4 = 1 / 3;
276
+ function hue(p, q, t) {
277
+ if (t < 0)
278
+ t++;
279
+ else if (t > 1)
280
+ t--;
281
+ if (t < n1)
282
+ return p + (q - p) * 6 * t;
283
+ if (t < n2)
284
+ return q;
285
+ if (t < n3)
286
+ return p + (q - p) * (n3 - t) * 6;
287
+ return p;
288
+ }
289
+ function hsla(h, s, l, a = 1) {
290
+ let r, g, b;
291
+ h /= 360, s /= 100, l /= 100;
292
+ if (s === 0) {
293
+ r = g = b = l;
294
+ }
295
+ else {
296
+ let q = l < 0.5 ? l * (1 + s) : l + s - l * s;
297
+ let p = 2 * l - q;
298
+ r = hue(p, q, h + n4);
299
+ g = hue(p, q, h);
300
+ b = hue(p, q, h - n4);
301
+ }
302
+ return { r: round(r * 255), g: round(g * 255), b: round(b * 255), a };
303
+ }
304
+
305
+ ColorConvert.object = colorToRGBA;
@@ -0,0 +1 @@
1
+ import{ColorConvert as e}from"@leafer-ui/draw";const F={transparent:"FFF0",aliceblue:"F0F8FF",antiquewhite:"FAEBD7",aqua:"0FF",aquamarine:"7FFFD4",azure:"F0FFFF",beige:"F5F5DC",bisque:"FFE4C4",black:"0",blanchedalmond:"FFEBCD",blue:"00F",blueviolet:"8A2BE2",brown:"A52A2A",burlywood:"DEB887",cadetblue:"5F9EA0",chartreuse:"7FFF00",chocolate:"D2691E",coral:"FF7F50",cornflowerblue:"6495ED",cornsilk:"FFF8DC",crimson:"DC143C",cyan:"0FF",darkblue:"00008B",darkcyan:"008B8B",darkgoldenrod:"B8860B",darkgray:"A9",darkgreen:"006400",darkgrey:"A9",darkkhaki:"BDB76B",darkmagenta:"8B008B",darkolivegreen:"556B2F",darkorange:"FF8C00",darkorchid:"9932CC",darkred:"8B0000",darksalmon:"E9967A",darkseagreen:"8FBC8F",darkslateblue:"483D8B",darkslategray:"2F4F4F",darkslategrey:"2F4F4F",darkturquoise:"00CED1",darkviolet:"9400D3",deeppink:"FF1493",deepskyblue:"00BFFF",dimgray:"69",dimgrey:"69",dodgerblue:"1E90FF",firebrick:"B22222",floralwhite:"FFFAF0",forestgreen:"228B22",fuchsia:"F0F",gainsboro:"DC",ghostwhite:"F8F8FF",gold:"FFD700",goldenrod:"DAA520",gray:"80",green:"008000",greenyellow:"ADFF2F",grey:"80",honeydew:"F0FFF0",hotpink:"FF69B4",indianred:"CD5C5C",indigo:"4B0082",ivory:"FFFFF0",khaki:"F0E68C",lavender:"E6E6FA",lavenderblush:"FFF0F5",lawngreen:"7CFC00",lemonchiffon:"FFFACD",lightblue:"ADD8E6",lightcoral:"F08080",lightcyan:"E0FFFF",lightgoldenrodyellow:"FAFAD2",lightgray:"D3",lightgreen:"90EE90",lightgrey:"D3",lightpink:"FFB6C1",lightsalmon:"FFA07A",lightseagreen:"20B2AA",lightskyblue:"87CEFA",lightslategray:"789",lightslategrey:"789",lightsteelblue:"B0C4DE",lightyellow:"FFFFE0",lime:"00FF00",limegreen:"32CD32",linen:"FAF0E6",magenta:"FF00FF",maroon:"800000",mediumaquamarine:"66CDAA",mediumblue:"0000CD",mediumorchid:"BA55D3",mediumpurple:"9370DB",mediumseagreen:"3CB371",mediumslateblue:"7B68EE",mediumspringgreen:"00FA9A",mediumturquoise:"48D1CC",mediumvioletred:"C71585",midnightblue:"191970",mintcream:"F5FFFA",mistyrose:"FFE4E1",moccasin:"FFE4B5",navajowhite:"FFDEAD",navy:"000080",oldlace:"FDF5E6",olive:"808000",olivedrab:"6B8E23",orange:"FFA500",orangered:"FF4500",orchid:"DA70D6",palegoldenrod:"EEE8AA",palegreen:"98FB98",paleturquoise:"AFEEEE",palevioletred:"D87093",papayawhip:"FFEFD5",peachpuff:"FFDAB9",peru:"CD853F",pink:"FFC0CB",plum:"DDA0DD",powderblue:"B0E0E6",purple:"800080",rebeccapurple:"639",red:"F00",rosybrown:"BC8F8F",royalblue:"4169E1",saddlebrown:"8B4513",salmon:"FA8072",sandybrown:"F4A460",seagreen:"2E8B57",seashell:"FFF5EE",sienna:"A0522D",silver:"C0",skyblue:"87CEEB",slateblue:"6A5ACD",slategray:"708090",slategrey:"708090",snow:"FFFAFA",springgreen:"00FF7F",steelblue:"4682B4",tan:"D2B48C",teal:"008080",thistle:"D8BFD8",tomato:"FF6347",turquoise:"40E0D0",violet:"EE82EE",wheat:"F5DEB3",white:"F",whitesmoke:"F5",yellow:"FF0",yellowgreen:"9ACD32"},r=/^rgb\((\d+),\s*(\d+),\s*(\d+)/i,a=/^rgba\((\d+),\s*(\d+),\s*(\d+),\s*(\d*\.?\d+)/i,l=/^hsl\((\d+),\s*(\d+)%\s*,\s*(\d+)%/i,i=/^hsla\((\d+),\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d*\.?\d+)/i,t=parseInt,n=parseFloat,{round:s}=Math;let o={},d=0;function g(e){let F,r,a,l=1;switch(e.length){case 9:F=t(e.slice(1,3),16),r=t(e.slice(3,5),16),a=t(e.slice(5,7),16),l=t(e.slice(7,9),16)/255;break;case 7:F=t(e.slice(1,3),16),r=t(e.slice(3,5),16),a=t(e.slice(5,7),16);break;case 5:F=t(e[1]+e[1],16),r=t(e[2]+e[2],16),a=t(e[3]+e[3],16),l=t(e[4]+e[4],16)/255;break;case 4:F=t(e[1]+e[1],16),r=t(e[2]+e[2],16),a=t(e[3]+e[3],16);break;case 3:F=r=a=t(e[1]+e[2],16);break;case 2:F=r=a=t(e[1]+e[1],16)}return{r:F,g:r,b:a,a:l}}const c=1/6,u=.5,b=2/3,D=1/3;function E(e,F,r){return r<0?r++:r>1&&r--,r<c?e+6*(F-e)*r:r<u?F:r<b?e+(F-e)*(b-r)*6:e}function h(e,F,r,a=1){let l,i,t;if(e/=360,r/=100,0===(F/=100))l=i=t=r;else{let a=r<.5?r*(1+F):r+F-r*F,n=2*r-a;l=E(n,a,e+D),i=E(n,a,e),t=E(n,a,e-D)}return{r:s(255*l),g:s(255*i),b:s(255*t),a:a}}e.object=function(e,s){let c,u=void 0!==s&&1!==s;if("string"==typeof e){const s=o[e];if(s)c=Object.assign({},s);else{switch(e[0]){case"#":c=g(e);break;case"R":case"r":"("===e[4]&&a.test(e)?c=function(e){const F=a.exec(e);return{r:t(F[1]),g:t(F[2]),b:t(F[3]),a:n(F[4])}}(e):"("===e[3]&&r.test(e)&&(c=function(e){const F=r.exec(e);return{r:t(F[1]),g:t(F[2]),b:t(F[3]),a:1}}(e));break;case"H":case"h":"("===e[4]&&i.test(e)?c=function(e){const F=i.exec(e);return h(n(F[1]),n(F[2]),n(F[3]),n(F[4]))}(e):"("===e[3]&&l.test(e)&&(c=function(e){const F=l.exec(e);return h(n(F[1]),n(F[2]),n(F[3]),1)}(e))}if(!c){const r=F[e.toLowerCase()];r&&(c=g("#"+r))}c&&(d++,d>1e4&&(o={},d=0),o[e]=Object.assign({},c))}}else"object"==typeof e&&(void 0===e.a&&(e.a=1),u&&(e=Object.assign({},e)),c=e);return c||(c={r:255,g:255,b:255,a:1}),u&&(c.a*=s),c};
package/dist/color.js ADDED
@@ -0,0 +1,308 @@
1
+ (function (draw) {
2
+ 'use strict';
3
+
4
+ const colorNames = {
5
+ transparent: 'FFF0',
6
+ aliceblue: 'F0F8FF',
7
+ antiquewhite: 'FAEBD7',
8
+ aqua: '0FF',
9
+ aquamarine: '7FFFD4',
10
+ azure: 'F0FFFF',
11
+ beige: 'F5F5DC',
12
+ bisque: 'FFE4C4',
13
+ black: '0',
14
+ blanchedalmond: 'FFEBCD',
15
+ blue: '00F',
16
+ blueviolet: '8A2BE2',
17
+ brown: 'A52A2A',
18
+ burlywood: 'DEB887',
19
+ cadetblue: '5F9EA0',
20
+ chartreuse: '7FFF00',
21
+ chocolate: 'D2691E',
22
+ coral: 'FF7F50',
23
+ cornflowerblue: '6495ED',
24
+ cornsilk: 'FFF8DC',
25
+ crimson: 'DC143C',
26
+ cyan: '0FF',
27
+ darkblue: '00008B',
28
+ darkcyan: '008B8B',
29
+ darkgoldenrod: 'B8860B',
30
+ darkgray: 'A9',
31
+ darkgreen: '006400',
32
+ darkgrey: 'A9',
33
+ darkkhaki: 'BDB76B',
34
+ darkmagenta: '8B008B',
35
+ darkolivegreen: '556B2F',
36
+ darkorange: 'FF8C00',
37
+ darkorchid: '9932CC',
38
+ darkred: '8B0000',
39
+ darksalmon: 'E9967A',
40
+ darkseagreen: '8FBC8F',
41
+ darkslateblue: '483D8B',
42
+ darkslategray: '2F4F4F',
43
+ darkslategrey: '2F4F4F',
44
+ darkturquoise: '00CED1',
45
+ darkviolet: '9400D3',
46
+ deeppink: 'FF1493',
47
+ deepskyblue: '00BFFF',
48
+ dimgray: '69',
49
+ dimgrey: '69',
50
+ dodgerblue: '1E90FF',
51
+ firebrick: 'B22222',
52
+ floralwhite: 'FFFAF0',
53
+ forestgreen: '228B22',
54
+ fuchsia: 'F0F',
55
+ gainsboro: 'DC',
56
+ ghostwhite: 'F8F8FF',
57
+ gold: 'FFD700',
58
+ goldenrod: 'DAA520',
59
+ gray: '80',
60
+ green: '008000',
61
+ greenyellow: 'ADFF2F',
62
+ grey: '80',
63
+ honeydew: 'F0FFF0',
64
+ hotpink: 'FF69B4',
65
+ indianred: 'CD5C5C',
66
+ indigo: '4B0082',
67
+ ivory: 'FFFFF0',
68
+ khaki: 'F0E68C',
69
+ lavender: 'E6E6FA',
70
+ lavenderblush: 'FFF0F5',
71
+ lawngreen: '7CFC00',
72
+ lemonchiffon: 'FFFACD',
73
+ lightblue: 'ADD8E6',
74
+ lightcoral: 'F08080',
75
+ lightcyan: 'E0FFFF',
76
+ lightgoldenrodyellow: 'FAFAD2',
77
+ lightgray: 'D3',
78
+ lightgreen: '90EE90',
79
+ lightgrey: 'D3',
80
+ lightpink: 'FFB6C1',
81
+ lightsalmon: 'FFA07A',
82
+ lightseagreen: '20B2AA',
83
+ lightskyblue: '87CEFA',
84
+ lightslategray: '789',
85
+ lightslategrey: '789',
86
+ lightsteelblue: 'B0C4DE',
87
+ lightyellow: 'FFFFE0',
88
+ lime: '00FF00',
89
+ limegreen: '32CD32',
90
+ linen: 'FAF0E6',
91
+ magenta: 'FF00FF',
92
+ maroon: '800000',
93
+ mediumaquamarine: '66CDAA',
94
+ mediumblue: '0000CD',
95
+ mediumorchid: 'BA55D3',
96
+ mediumpurple: '9370DB',
97
+ mediumseagreen: '3CB371',
98
+ mediumslateblue: '7B68EE',
99
+ mediumspringgreen: '00FA9A',
100
+ mediumturquoise: '48D1CC',
101
+ mediumvioletred: 'C71585',
102
+ midnightblue: '191970',
103
+ mintcream: 'F5FFFA',
104
+ mistyrose: 'FFE4E1',
105
+ moccasin: 'FFE4B5',
106
+ navajowhite: 'FFDEAD',
107
+ navy: '000080',
108
+ oldlace: 'FDF5E6',
109
+ olive: '808000',
110
+ olivedrab: '6B8E23',
111
+ orange: 'FFA500',
112
+ orangered: 'FF4500',
113
+ orchid: 'DA70D6',
114
+ palegoldenrod: 'EEE8AA',
115
+ palegreen: '98FB98',
116
+ paleturquoise: 'AFEEEE',
117
+ palevioletred: 'D87093',
118
+ papayawhip: 'FFEFD5',
119
+ peachpuff: 'FFDAB9',
120
+ peru: 'CD853F',
121
+ pink: 'FFC0CB',
122
+ plum: 'DDA0DD',
123
+ powderblue: 'B0E0E6',
124
+ purple: '800080',
125
+ rebeccapurple: '639',
126
+ red: 'F00',
127
+ rosybrown: 'BC8F8F',
128
+ royalblue: '4169E1',
129
+ saddlebrown: '8B4513',
130
+ salmon: 'FA8072',
131
+ sandybrown: 'F4A460',
132
+ seagreen: '2E8B57',
133
+ seashell: 'FFF5EE',
134
+ sienna: 'A0522D',
135
+ silver: 'C0',
136
+ skyblue: '87CEEB',
137
+ slateblue: '6A5ACD',
138
+ slategray: '708090',
139
+ slategrey: '708090',
140
+ snow: 'FFFAFA',
141
+ springgreen: '00FF7F',
142
+ steelblue: '4682B4',
143
+ tan: 'D2B48C',
144
+ teal: '008080',
145
+ thistle: 'D8BFD8',
146
+ tomato: 'FF6347',
147
+ turquoise: '40E0D0',
148
+ violet: 'EE82EE',
149
+ wheat: 'F5DEB3',
150
+ white: 'F',
151
+ whitesmoke: 'F5',
152
+ yellow: 'FF0',
153
+ yellowgreen: '9ACD32'
154
+ };
155
+
156
+ const rgbMatch = /^rgb\((\d+),\s*(\d+),\s*(\d+)/i;
157
+ const rgbaMatch = /^rgba\((\d+),\s*(\d+),\s*(\d+),\s*(\d*\.?\d+)/i;
158
+ const hslMatch = /^hsl\((\d+),\s*(\d+)%\s*,\s*(\d+)%/i;
159
+ const hslaMatch = /^hsla\((\d+),\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d*\.?\d+)/i;
160
+ const int = parseInt, float = parseFloat, { round } = Math;
161
+ let cache = {}, totalCache = 0;
162
+ function colorToRGBA(color, opacity) {
163
+ let RGBA;
164
+ let useOpacity = opacity !== undefined && opacity !== 1;
165
+ if (typeof color === 'string') {
166
+ const cacheColor = cache[color];
167
+ if (cacheColor) {
168
+ RGBA = Object.assign({}, cacheColor);
169
+ }
170
+ else {
171
+ switch (color[0]) {
172
+ case '#':
173
+ RGBA = hexToRGBA(color);
174
+ break;
175
+ case 'R':
176
+ case 'r':
177
+ if (color[4] === '(' && rgbaMatch.test(color))
178
+ RGBA = rgbaToRGBA(color);
179
+ else if (color[3] === '(' && rgbMatch.test(color))
180
+ RGBA = rgbToRGBA(color);
181
+ break;
182
+ case 'H':
183
+ case 'h':
184
+ if (color[4] === '(' && hslaMatch.test(color))
185
+ RGBA = hslaToRGBA(color);
186
+ else if (color[3] === '(' && hslMatch.test(color))
187
+ RGBA = hslToRGBA(color);
188
+ break;
189
+ }
190
+ if (!RGBA) {
191
+ const value = colorNames[color.toLowerCase()];
192
+ if (value)
193
+ RGBA = hexToRGBA('#' + value);
194
+ }
195
+ if (RGBA) {
196
+ totalCache++;
197
+ if (totalCache > 10000)
198
+ cache = {}, totalCache = 0;
199
+ cache[color] = Object.assign({}, RGBA);
200
+ }
201
+ }
202
+ }
203
+ else if (typeof color === 'object') {
204
+ if (color.a === undefined)
205
+ color.a = 1;
206
+ if (useOpacity)
207
+ color = Object.assign({}, color);
208
+ RGBA = color;
209
+ }
210
+ if (!RGBA)
211
+ RGBA = { r: 255, g: 255, b: 255, a: 1 };
212
+ if (useOpacity)
213
+ RGBA.a *= opacity;
214
+ return RGBA;
215
+ }
216
+ function hexToRGBA(color) {
217
+ let r, g, b, a = 1;
218
+ switch (color.length) {
219
+ case 9:
220
+ r = int(color.slice(1, 3), 16);
221
+ g = int(color.slice(3, 5), 16);
222
+ b = int(color.slice(5, 7), 16);
223
+ a = int(color.slice(7, 9), 16) / 255;
224
+ break;
225
+ case 7:
226
+ r = int(color.slice(1, 3), 16);
227
+ g = int(color.slice(3, 5), 16);
228
+ b = int(color.slice(5, 7), 16);
229
+ break;
230
+ case 5:
231
+ r = int(color[1] + color[1], 16);
232
+ g = int(color[2] + color[2], 16);
233
+ b = int(color[3] + color[3], 16);
234
+ a = int(color[4] + color[4], 16) / 255;
235
+ break;
236
+ case 4:
237
+ r = int(color[1] + color[1], 16);
238
+ g = int(color[2] + color[2], 16);
239
+ b = int(color[3] + color[3], 16);
240
+ break;
241
+ case 3:
242
+ r = g = b = int(color[1] + color[2], 16);
243
+ break;
244
+ case 2:
245
+ r = g = b = int(color[1] + color[1], 16);
246
+ break;
247
+ }
248
+ return { r, g, b, a };
249
+ }
250
+ function rgbToRGBA(color) {
251
+ const match = rgbMatch.exec(color);
252
+ return {
253
+ r: int(match[1]),
254
+ g: int(match[2]),
255
+ b: int(match[3]),
256
+ a: 1
257
+ };
258
+ }
259
+ function rgbaToRGBA(color) {
260
+ const match = rgbaMatch.exec(color);
261
+ return {
262
+ r: int(match[1]),
263
+ g: int(match[2]),
264
+ b: int(match[3]),
265
+ a: float(match[4])
266
+ };
267
+ }
268
+ function hslToRGBA(color) {
269
+ const match = hslMatch.exec(color);
270
+ return hsla(float(match[1]), float(match[2]), float(match[3]), 1);
271
+ }
272
+ function hslaToRGBA(color) {
273
+ const match = hslaMatch.exec(color);
274
+ return hsla(float(match[1]), float(match[2]), float(match[3]), float(match[4]));
275
+ }
276
+ const n1 = 1 / 6, n2 = 0.5, n3 = 2 / 3, n4 = 1 / 3;
277
+ function hue(p, q, t) {
278
+ if (t < 0)
279
+ t++;
280
+ else if (t > 1)
281
+ t--;
282
+ if (t < n1)
283
+ return p + (q - p) * 6 * t;
284
+ if (t < n2)
285
+ return q;
286
+ if (t < n3)
287
+ return p + (q - p) * (n3 - t) * 6;
288
+ return p;
289
+ }
290
+ function hsla(h, s, l, a = 1) {
291
+ let r, g, b;
292
+ h /= 360, s /= 100, l /= 100;
293
+ if (s === 0) {
294
+ r = g = b = l;
295
+ }
296
+ else {
297
+ let q = l < 0.5 ? l * (1 + s) : l + s - l * s;
298
+ let p = 2 * l - q;
299
+ r = hue(p, q, h + n4);
300
+ g = hue(p, q, h);
301
+ b = hue(p, q, h - n4);
302
+ }
303
+ return { r: round(r * 255), g: round(g * 255), b: round(b * 255), a };
304
+ }
305
+
306
+ draw.ColorConvert.object = colorToRGBA;
307
+
308
+ })(LeaferUI);
@@ -0,0 +1 @@
1
+ "use strict";var e=require("@leafer-ui/draw");const F={transparent:"FFF0",aliceblue:"F0F8FF",antiquewhite:"FAEBD7",aqua:"0FF",aquamarine:"7FFFD4",azure:"F0FFFF",beige:"F5F5DC",bisque:"FFE4C4",black:"0",blanchedalmond:"FFEBCD",blue:"00F",blueviolet:"8A2BE2",brown:"A52A2A",burlywood:"DEB887",cadetblue:"5F9EA0",chartreuse:"7FFF00",chocolate:"D2691E",coral:"FF7F50",cornflowerblue:"6495ED",cornsilk:"FFF8DC",crimson:"DC143C",cyan:"0FF",darkblue:"00008B",darkcyan:"008B8B",darkgoldenrod:"B8860B",darkgray:"A9",darkgreen:"006400",darkgrey:"A9",darkkhaki:"BDB76B",darkmagenta:"8B008B",darkolivegreen:"556B2F",darkorange:"FF8C00",darkorchid:"9932CC",darkred:"8B0000",darksalmon:"E9967A",darkseagreen:"8FBC8F",darkslateblue:"483D8B",darkslategray:"2F4F4F",darkslategrey:"2F4F4F",darkturquoise:"00CED1",darkviolet:"9400D3",deeppink:"FF1493",deepskyblue:"00BFFF",dimgray:"69",dimgrey:"69",dodgerblue:"1E90FF",firebrick:"B22222",floralwhite:"FFFAF0",forestgreen:"228B22",fuchsia:"F0F",gainsboro:"DC",ghostwhite:"F8F8FF",gold:"FFD700",goldenrod:"DAA520",gray:"80",green:"008000",greenyellow:"ADFF2F",grey:"80",honeydew:"F0FFF0",hotpink:"FF69B4",indianred:"CD5C5C",indigo:"4B0082",ivory:"FFFFF0",khaki:"F0E68C",lavender:"E6E6FA",lavenderblush:"FFF0F5",lawngreen:"7CFC00",lemonchiffon:"FFFACD",lightblue:"ADD8E6",lightcoral:"F08080",lightcyan:"E0FFFF",lightgoldenrodyellow:"FAFAD2",lightgray:"D3",lightgreen:"90EE90",lightgrey:"D3",lightpink:"FFB6C1",lightsalmon:"FFA07A",lightseagreen:"20B2AA",lightskyblue:"87CEFA",lightslategray:"789",lightslategrey:"789",lightsteelblue:"B0C4DE",lightyellow:"FFFFE0",lime:"00FF00",limegreen:"32CD32",linen:"FAF0E6",magenta:"FF00FF",maroon:"800000",mediumaquamarine:"66CDAA",mediumblue:"0000CD",mediumorchid:"BA55D3",mediumpurple:"9370DB",mediumseagreen:"3CB371",mediumslateblue:"7B68EE",mediumspringgreen:"00FA9A",mediumturquoise:"48D1CC",mediumvioletred:"C71585",midnightblue:"191970",mintcream:"F5FFFA",mistyrose:"FFE4E1",moccasin:"FFE4B5",navajowhite:"FFDEAD",navy:"000080",oldlace:"FDF5E6",olive:"808000",olivedrab:"6B8E23",orange:"FFA500",orangered:"FF4500",orchid:"DA70D6",palegoldenrod:"EEE8AA",palegreen:"98FB98",paleturquoise:"AFEEEE",palevioletred:"D87093",papayawhip:"FFEFD5",peachpuff:"FFDAB9",peru:"CD853F",pink:"FFC0CB",plum:"DDA0DD",powderblue:"B0E0E6",purple:"800080",rebeccapurple:"639",red:"F00",rosybrown:"BC8F8F",royalblue:"4169E1",saddlebrown:"8B4513",salmon:"FA8072",sandybrown:"F4A460",seagreen:"2E8B57",seashell:"FFF5EE",sienna:"A0522D",silver:"C0",skyblue:"87CEEB",slateblue:"6A5ACD",slategray:"708090",slategrey:"708090",snow:"FFFAFA",springgreen:"00FF7F",steelblue:"4682B4",tan:"D2B48C",teal:"008080",thistle:"D8BFD8",tomato:"FF6347",turquoise:"40E0D0",violet:"EE82EE",wheat:"F5DEB3",white:"F",whitesmoke:"F5",yellow:"FF0",yellowgreen:"9ACD32"},r=/^rgb\((\d+),\s*(\d+),\s*(\d+)/i,a=/^rgba\((\d+),\s*(\d+),\s*(\d+),\s*(\d*\.?\d+)/i,l=/^hsl\((\d+),\s*(\d+)%\s*,\s*(\d+)%/i,i=/^hsla\((\d+),\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d*\.?\d+)/i,t=parseInt,n=parseFloat,{round:s}=Math;let o={},d=0;function g(e){let F,r,a,l=1;switch(e.length){case 9:F=t(e.slice(1,3),16),r=t(e.slice(3,5),16),a=t(e.slice(5,7),16),l=t(e.slice(7,9),16)/255;break;case 7:F=t(e.slice(1,3),16),r=t(e.slice(3,5),16),a=t(e.slice(5,7),16);break;case 5:F=t(e[1]+e[1],16),r=t(e[2]+e[2],16),a=t(e[3]+e[3],16),l=t(e[4]+e[4],16)/255;break;case 4:F=t(e[1]+e[1],16),r=t(e[2]+e[2],16),a=t(e[3]+e[3],16);break;case 3:F=r=a=t(e[1]+e[2],16);break;case 2:F=r=a=t(e[1]+e[1],16)}return{r:F,g:r,b:a,a:l}}const c=1/6,u=.5,b=2/3,D=1/3;function E(e,F,r){return r<0?r++:r>1&&r--,r<c?e+6*(F-e)*r:r<u?F:r<b?e+(F-e)*(b-r)*6:e}function h(e,F,r,a=1){let l,i,t;if(e/=360,r/=100,0===(F/=100))l=i=t=r;else{let a=r<.5?r*(1+F):r+F-r*F,n=2*r-a;l=E(n,a,e+D),i=E(n,a,e),t=E(n,a,e-D)}return{r:s(255*l),g:s(255*i),b:s(255*t),a:a}}e.ColorConvert.object=function(e,s){let c,u=void 0!==s&&1!==s;if("string"==typeof e){const s=o[e];if(s)c=Object.assign({},s);else{switch(e[0]){case"#":c=g(e);break;case"R":case"r":"("===e[4]&&a.test(e)?c=function(e){const F=a.exec(e);return{r:t(F[1]),g:t(F[2]),b:t(F[3]),a:n(F[4])}}(e):"("===e[3]&&r.test(e)&&(c=function(e){const F=r.exec(e);return{r:t(F[1]),g:t(F[2]),b:t(F[3]),a:1}}(e));break;case"H":case"h":"("===e[4]&&i.test(e)?c=function(e){const F=i.exec(e);return h(n(F[1]),n(F[2]),n(F[3]),n(F[4]))}(e):"("===e[3]&&l.test(e)&&(c=function(e){const F=l.exec(e);return h(n(F[1]),n(F[2]),n(F[3]),1)}(e))}if(!c){const r=F[e.toLowerCase()];r&&(c=g("#"+r))}c&&(d++,d>1e4&&(o={},d=0),o[e]=Object.assign({},c))}}else"object"==typeof e&&(void 0===e.a&&(e.a=1),u&&(e=Object.assign({},e)),c=e);return c||(c={r:255,g:255,b:255,a:1}),u&&(c.a*=s),c};
@@ -0,0 +1 @@
1
+ !function(e){"use strict";const F={transparent:"FFF0",aliceblue:"F0F8FF",antiquewhite:"FAEBD7",aqua:"0FF",aquamarine:"7FFFD4",azure:"F0FFFF",beige:"F5F5DC",bisque:"FFE4C4",black:"0",blanchedalmond:"FFEBCD",blue:"00F",blueviolet:"8A2BE2",brown:"A52A2A",burlywood:"DEB887",cadetblue:"5F9EA0",chartreuse:"7FFF00",chocolate:"D2691E",coral:"FF7F50",cornflowerblue:"6495ED",cornsilk:"FFF8DC",crimson:"DC143C",cyan:"0FF",darkblue:"00008B",darkcyan:"008B8B",darkgoldenrod:"B8860B",darkgray:"A9",darkgreen:"006400",darkgrey:"A9",darkkhaki:"BDB76B",darkmagenta:"8B008B",darkolivegreen:"556B2F",darkorange:"FF8C00",darkorchid:"9932CC",darkred:"8B0000",darksalmon:"E9967A",darkseagreen:"8FBC8F",darkslateblue:"483D8B",darkslategray:"2F4F4F",darkslategrey:"2F4F4F",darkturquoise:"00CED1",darkviolet:"9400D3",deeppink:"FF1493",deepskyblue:"00BFFF",dimgray:"69",dimgrey:"69",dodgerblue:"1E90FF",firebrick:"B22222",floralwhite:"FFFAF0",forestgreen:"228B22",fuchsia:"F0F",gainsboro:"DC",ghostwhite:"F8F8FF",gold:"FFD700",goldenrod:"DAA520",gray:"80",green:"008000",greenyellow:"ADFF2F",grey:"80",honeydew:"F0FFF0",hotpink:"FF69B4",indianred:"CD5C5C",indigo:"4B0082",ivory:"FFFFF0",khaki:"F0E68C",lavender:"E6E6FA",lavenderblush:"FFF0F5",lawngreen:"7CFC00",lemonchiffon:"FFFACD",lightblue:"ADD8E6",lightcoral:"F08080",lightcyan:"E0FFFF",lightgoldenrodyellow:"FAFAD2",lightgray:"D3",lightgreen:"90EE90",lightgrey:"D3",lightpink:"FFB6C1",lightsalmon:"FFA07A",lightseagreen:"20B2AA",lightskyblue:"87CEFA",lightslategray:"789",lightslategrey:"789",lightsteelblue:"B0C4DE",lightyellow:"FFFFE0",lime:"00FF00",limegreen:"32CD32",linen:"FAF0E6",magenta:"FF00FF",maroon:"800000",mediumaquamarine:"66CDAA",mediumblue:"0000CD",mediumorchid:"BA55D3",mediumpurple:"9370DB",mediumseagreen:"3CB371",mediumslateblue:"7B68EE",mediumspringgreen:"00FA9A",mediumturquoise:"48D1CC",mediumvioletred:"C71585",midnightblue:"191970",mintcream:"F5FFFA",mistyrose:"FFE4E1",moccasin:"FFE4B5",navajowhite:"FFDEAD",navy:"000080",oldlace:"FDF5E6",olive:"808000",olivedrab:"6B8E23",orange:"FFA500",orangered:"FF4500",orchid:"DA70D6",palegoldenrod:"EEE8AA",palegreen:"98FB98",paleturquoise:"AFEEEE",palevioletred:"D87093",papayawhip:"FFEFD5",peachpuff:"FFDAB9",peru:"CD853F",pink:"FFC0CB",plum:"DDA0DD",powderblue:"B0E0E6",purple:"800080",rebeccapurple:"639",red:"F00",rosybrown:"BC8F8F",royalblue:"4169E1",saddlebrown:"8B4513",salmon:"FA8072",sandybrown:"F4A460",seagreen:"2E8B57",seashell:"FFF5EE",sienna:"A0522D",silver:"C0",skyblue:"87CEEB",slateblue:"6A5ACD",slategray:"708090",slategrey:"708090",snow:"FFFAFA",springgreen:"00FF7F",steelblue:"4682B4",tan:"D2B48C",teal:"008080",thistle:"D8BFD8",tomato:"FF6347",turquoise:"40E0D0",violet:"EE82EE",wheat:"F5DEB3",white:"F",whitesmoke:"F5",yellow:"FF0",yellowgreen:"9ACD32"},r=/^rgb\((\d+),\s*(\d+),\s*(\d+)/i,a=/^rgba\((\d+),\s*(\d+),\s*(\d+),\s*(\d*\.?\d+)/i,l=/^hsl\((\d+),\s*(\d+)%\s*,\s*(\d+)%/i,i=/^hsla\((\d+),\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d*\.?\d+)/i,t=parseInt,n=parseFloat,{round:s}=Math;let o={},d=0;function c(e){let F,r,a,l=1;switch(e.length){case 9:F=t(e.slice(1,3),16),r=t(e.slice(3,5),16),a=t(e.slice(5,7),16),l=t(e.slice(7,9),16)/255;break;case 7:F=t(e.slice(1,3),16),r=t(e.slice(3,5),16),a=t(e.slice(5,7),16);break;case 5:F=t(e[1]+e[1],16),r=t(e[2]+e[2],16),a=t(e[3]+e[3],16),l=t(e[4]+e[4],16)/255;break;case 4:F=t(e[1]+e[1],16),r=t(e[2]+e[2],16),a=t(e[3]+e[3],16);break;case 3:F=r=a=t(e[1]+e[2],16);break;case 2:F=r=a=t(e[1]+e[1],16)}return{r:F,g:r,b:a,a:l}}const g=1/6,u=.5,b=2/3,D=1/3;function E(e,F,r){return r<0?r++:r>1&&r--,r<g?e+6*(F-e)*r:r<u?F:r<b?e+(F-e)*(b-r)*6:e}function h(e,F,r,a=1){let l,i,t;if(e/=360,r/=100,0===(F/=100))l=i=t=r;else{let a=r<.5?r*(1+F):r+F-r*F,n=2*r-a;l=E(n,a,e+D),i=E(n,a,e),t=E(n,a,e-D)}return{r:s(255*l),g:s(255*i),b:s(255*t),a:a}}e.ColorConvert.object=function(e,s){let g,u=void 0!==s&&1!==s;if("string"==typeof e){const s=o[e];if(s)g=Object.assign({},s);else{switch(e[0]){case"#":g=c(e);break;case"R":case"r":"("===e[4]&&a.test(e)?g=function(e){const F=a.exec(e);return{r:t(F[1]),g:t(F[2]),b:t(F[3]),a:n(F[4])}}(e):"("===e[3]&&r.test(e)&&(g=function(e){const F=r.exec(e);return{r:t(F[1]),g:t(F[2]),b:t(F[3]),a:1}}(e));break;case"H":case"h":"("===e[4]&&i.test(e)?g=function(e){const F=i.exec(e);return h(n(F[1]),n(F[2]),n(F[3]),n(F[4]))}(e):"("===e[3]&&l.test(e)&&(g=function(e){const F=l.exec(e);return h(n(F[1]),n(F[2]),n(F[3]),1)}(e))}if(!g){const r=F[e.toLowerCase()];r&&(g=c("#"+r))}g&&(d++,d>1e4&&(o={},d=0),o[e]=Object.assign({},g))}}else"object"==typeof e&&(void 0===e.a&&(e.a=1),u&&(e=Object.assign({},e)),g=e);return g||(g={r:255,g:255,b:255,a:1}),u&&(g.a*=s),g}}(LeaferUI);
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@leafer-in/color",
3
+ "version": "1.0.3",
4
+ "description": "@leafer-in/color",
5
+ "author": "Chao (Leafer) Wan",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "main": "dist/color.esm.js",
9
+ "exports": {
10
+ "import": "./dist/color.esm.js",
11
+ "require": "./dist/color.cjs",
12
+ "types": "./types/index.d.ts"
13
+ },
14
+ "types": "types/index.d.ts",
15
+ "unpkg": "dist/color.js",
16
+ "jsdelivr": "dist/color.js",
17
+ "files": [
18
+ "src",
19
+ "types",
20
+ "dist"
21
+ ],
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "https://github.com/leaferjs/in.git"
25
+ },
26
+ "homepage": "https://github.com/leaferjs/in/tree/main/packages/color",
27
+ "bugs": "https://github.com/leaferjs/in/issues",
28
+ "keywords": [
29
+ "leafer color",
30
+ "leafer-color",
31
+ "leafer-in",
32
+ "color",
33
+ "leafer-ui",
34
+ "leaferjs"
35
+ ],
36
+ "dependencies": {
37
+ "@leafer-ui/draw": "^1.0.3",
38
+ "@leafer-ui/interface": "^1.0.3",
39
+ "@leafer-in/interface": "^1.0.3"
40
+ }
41
+ }
package/src/colors.ts ADDED
@@ -0,0 +1,156 @@
1
+ import { IObject } from '@leafer-ui/interface'
2
+
3
+ // https://www.w3.org/TR/css-color-4/#named-colors
4
+
5
+ export const colorNames: IObject = {
6
+ transparent: 'FFF0', // 透明色
7
+
8
+ aliceblue: 'F0F8FF', // 爱丽丝蓝
9
+ antiquewhite: 'FAEBD7', // 古董白
10
+ aqua: '0FF', // 水绿色
11
+ aquamarine: '7FFFD4', // 海洋绿
12
+ azure: 'F0FFFF', // 天蓝色
13
+ beige: 'F5F5DC', // 米色
14
+ bisque: 'FFE4C4', // 米黄色
15
+ black: '0', // 黑色
16
+ blanchedalmond: 'FFEBCD', // 蛋白色
17
+ blue: '00F', // 蓝色
18
+ blueviolet: '8A2BE2', // 蓝紫色
19
+ brown: 'A52A2A', // 棕色
20
+ burlywood: 'DEB887', // 土褐色
21
+ cadetblue: '5F9EA0', // 军校蓝
22
+ chartreuse: '7FFF00', // 黄绿色
23
+ chocolate: 'D2691E', // 巧克力色
24
+ coral: 'FF7F50', // 珊瑚色
25
+ cornflowerblue: '6495ED', // 矢车菊蓝
26
+ cornsilk: 'FFF8DC', // 玉米色
27
+ crimson: 'DC143C', // 绯红色
28
+ cyan: '0FF', // 青色
29
+ darkblue: '00008B', // 深蓝色
30
+ darkcyan: '008B8B', // 深青色
31
+ darkgoldenrod: 'B8860B', // 深金黄
32
+ darkgray: 'A9', // 深灰色
33
+ darkgreen: '006400', // 深绿色
34
+ darkgrey: 'A9', // 深灰色
35
+ darkkhaki: 'BDB76B', // 深卡其色
36
+ darkmagenta: '8B008B', // 深洋红色
37
+ darkolivegreen: '556B2F', // 深橄榄绿
38
+ darkorange: 'FF8C00', // 深橙色
39
+ darkorchid: '9932CC', // 深紫罗兰色
40
+ darkred: '8B0000', // 深红色
41
+ darksalmon: 'E9967A', // 深鲑鱼色
42
+ darkseagreen: '8FBC8F', // 深海洋绿
43
+ darkslateblue: '483D8B', // 深板岩蓝色
44
+ darkslategray: '2F4F4F', // 深板岩灰色
45
+ darkslategrey: '2F4F4F', // 深板岩灰色
46
+ darkturquoise: '00CED1', // 深青绿色
47
+ darkviolet: '9400D3', // 深紫罗兰色
48
+ deeppink: 'FF1493', // 深粉色
49
+ deepskyblue: '00BFFF', // 深天蓝色
50
+ dimgray: '69', // 暗灰色
51
+ dimgrey: '69', // 暗灰色
52
+ dodgerblue: '1E90FF', // 道奇蓝
53
+ firebrick: 'B22222', // 火砖色
54
+ floralwhite: 'FFFAF0', // 花卉白
55
+ forestgreen: '228B22', // 森林绿
56
+ fuchsia: 'F0F', // 紫红色
57
+ gainsboro: 'DC', // 银白色
58
+ ghostwhite: 'F8F8FF', // 幽灵白
59
+ gold: 'FFD700', // 金色
60
+ goldenrod: 'DAA520', // 金棒色
61
+ gray: '80', // 灰色
62
+ green: '008000', // 绿色
63
+ greenyellow: 'ADFF2F', // 黄绿色
64
+ grey: '80', // 灰色
65
+ honeydew: 'F0FFF0', // 蜂蜜露
66
+ hotpink: 'FF69B4', // 热粉色
67
+ indianred: 'CD5C5C', // 印度红
68
+ indigo: '4B0082', // 靛蓝色
69
+ ivory: 'FFFFF0', // 象牙色
70
+ khaki: 'F0E68C', // 卡其色
71
+ lavender: 'E6E6FA', // 薰衣草紫
72
+ lavenderblush: 'FFF0F5', // 紫罗兰红
73
+ lawngreen: '7CFC00', // 草坪绿
74
+ lemonchiffon: 'FFFACD', // 柠檬薄纱
75
+ lightblue: 'ADD8E6', // 浅蓝色
76
+ lightcoral: 'F08080', // 浅珊瑚色
77
+ lightcyan: 'E0FFFF', // 浅青色
78
+ lightgoldenrodyellow: 'FAFAD2', // 浅金黄色
79
+ lightgray: 'D3', // 浅灰色
80
+ lightgreen: '90EE90', // 浅绿色
81
+ lightgrey: 'D3', // 浅灰色
82
+ lightpink: 'FFB6C1', // 浅粉色
83
+ lightsalmon: 'FFA07A', // 浅鲑鱼色
84
+ lightseagreen: '20B2AA', // 浅海洋绿
85
+ lightskyblue: '87CEFA', // 浅天空蓝
86
+ lightslategray: '789', // 浅板岩灰色
87
+ lightslategrey: '789', // 浅板岩灰色
88
+ lightsteelblue: 'B0C4DE', // 浅钢蓝
89
+ lightyellow: 'FFFFE0', // 浅黄色
90
+ lime: '00FF00', // 酸橙色
91
+ limegreen: '32CD32', // 酸橙绿色
92
+ linen: 'FAF0E6', // 亚麻色
93
+ magenta: 'FF00FF', // 洋红色
94
+ maroon: '800000', // 栗色
95
+ mediumaquamarine: '66CDAA', // 中等海洋绿
96
+ mediumblue: '0000CD', // 中等蓝色
97
+ mediumorchid: 'BA55D3', // 中等兰花色
98
+ mediumpurple: '9370DB', // 中等紫色
99
+ mediumseagreen: '3CB371', // 中等海洋绿
100
+ mediumslateblue: '7B68EE', // 中等板岩蓝色
101
+ mediumspringgreen: '00FA9A', // 中等春绿色
102
+ mediumturquoise: '48D1CC', // 中等青绿色
103
+ mediumvioletred: 'C71585', // 中等紫罗兰红
104
+ midnightblue: '191970', // 午夜蓝
105
+ mintcream: 'F5FFFA', // 薄荷奶油色
106
+ mistyrose: 'FFE4E1', // 薄雾玫瑰色
107
+ moccasin: 'FFE4B5', // 鹿皮色
108
+ navajowhite: 'FFDEAD', // 纳瓦霍白
109
+ navy: '000080', // 海军蓝
110
+ oldlace: 'FDF5E6', // 古董花边
111
+ olive: '808000', // 橄榄色
112
+ olivedrab: '6B8E23', // 橄榄褐色
113
+ orange: 'FFA500', // 橙色
114
+ orangered: 'FF4500', // 橙红色
115
+ orchid: 'DA70D6', // 兰花色
116
+ palegoldenrod: 'EEE8AA', // 苍金黄色
117
+ palegreen: '98FB98', // 苍绿色
118
+ paleturquoise: 'AFEEEE', // 苍绿色
119
+ palevioletred: 'D87093', // 苍紫罗兰红
120
+ papayawhip: 'FFEFD5', // 木瓜色
121
+ peachpuff: 'FFDAB9', // 桃色
122
+ peru: 'CD853F', // 秘鲁色
123
+ pink: 'FFC0CB', // 粉色
124
+ plum: 'DDA0DD', // 李子色
125
+ powderblue: 'B0E0E6', // 粉蓝色
126
+ purple: '800080', // 紫色
127
+ rebeccapurple: '639', // 丽贝卡紫色
128
+ red: 'F00', // 红色
129
+ rosybrown: 'BC8F8F', // 玫瑰棕色
130
+ royalblue: '4169E1', // 皇家蓝
131
+ saddlebrown: '8B4513', // 鞍棕色
132
+ salmon: 'FA8072', // 鲑鱼色
133
+ sandybrown: 'F4A460', // 沙棕色
134
+ seagreen: '2E8B57', // 海洋绿
135
+ seashell: 'FFF5EE', // 海贝壳
136
+ sienna: 'A0522D', // 黄土色
137
+ silver: 'C0', // 银色
138
+ skyblue: '87CEEB', // 天空蓝
139
+ slateblue: '6A5ACD', // 板岩蓝色
140
+ slategray: '708090', // 板岩灰色
141
+ slategrey: '708090', // 板岩灰色
142
+ snow: 'FFFAFA', // 雪色
143
+ springgreen: '00FF7F', // 春绿色
144
+ steelblue: '4682B4', // 钢蓝色
145
+ tan: 'D2B48C', // 黄褐色
146
+ teal: '008080', // 蓝绿色
147
+ thistle: 'D8BFD8', // 蓟色
148
+ tomato: 'FF6347', // 番茄色
149
+ turquoise: '40E0D0', // 绿宝石色
150
+ violet: 'EE82EE', // 紫罗兰色
151
+ wheat: 'F5DEB3', // 小麦色
152
+ white: 'F', // 白色
153
+ whitesmoke: 'F5', // 白烟色
154
+ yellow: 'FF0', // 黄色
155
+ yellowgreen: '9ACD32' // 黄绿色
156
+ }
package/src/helper.ts ADDED
@@ -0,0 +1,169 @@
1
+ import { IColor, IObject, IRGBA } from '@leafer-ui/interface'
2
+
3
+ import { colorNames } from './colors'
4
+
5
+
6
+ const rgbMatch = /^rgb\((\d+),\s*(\d+),\s*(\d+)/i
7
+ const rgbaMatch = /^rgba\((\d+),\s*(\d+),\s*(\d+),\s*(\d*\.?\d+)/i
8
+
9
+ const hslMatch = /^hsl\((\d+),\s*(\d+)%\s*,\s*(\d+)%/i
10
+ const hslaMatch = /^hsla\((\d+),\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d*\.?\d+)/i
11
+
12
+ const int = parseInt, float = parseFloat, { round } = Math
13
+
14
+
15
+ let cache: IObject = {}, totalCache = 0
16
+
17
+ export function colorToRGBA(color: IColor, opacity?: number): IRGBA {
18
+
19
+ let RGBA: IRGBA
20
+ let useOpacity = opacity !== undefined && opacity !== 1
21
+
22
+ if (typeof color === 'string') {
23
+
24
+ const cacheColor = cache[color]
25
+
26
+ if (cacheColor) {
27
+
28
+ RGBA = { ...cacheColor }
29
+
30
+ } else {
31
+
32
+ switch (color[0]) {
33
+ case '#':
34
+ RGBA = hexToRGBA(color)
35
+ break
36
+ case 'R':
37
+ case 'r':
38
+ if (color[4] === '(' && rgbaMatch.test(color)) RGBA = rgbaToRGBA(color)
39
+ else if (color[3] === '(' && rgbMatch.test(color)) RGBA = rgbToRGBA(color)
40
+ break
41
+ case 'H':
42
+ case 'h':
43
+ if (color[4] === '(' && hslaMatch.test(color)) RGBA = hslaToRGBA(color)
44
+ else if (color[3] === '(' && hslMatch.test(color)) RGBA = hslToRGBA(color)
45
+ break
46
+ }
47
+
48
+ if (!RGBA) {
49
+ const value = colorNames[color.toLowerCase()]
50
+ if (value) RGBA = hexToRGBA('#' + value)
51
+ }
52
+
53
+ if (RGBA) {
54
+ totalCache++
55
+ if (totalCache > 10000) cache = {}, totalCache = 0
56
+ cache[color] = { ...RGBA }
57
+ }
58
+ }
59
+
60
+ } else if (typeof color === 'object') {
61
+
62
+ if (color.a === undefined) color.a = 1
63
+ if (useOpacity) color = { ...color }
64
+
65
+ RGBA = color as IRGBA
66
+
67
+ }
68
+
69
+ if (!RGBA) RGBA = { r: 255, g: 255, b: 255, a: 1 }
70
+ if (useOpacity) RGBA.a *= opacity
71
+
72
+ return RGBA
73
+ }
74
+
75
+
76
+ function hexToRGBA(color: string): IRGBA {
77
+ let r, g, b, a = 1
78
+ switch (color.length) {
79
+ case 9: // #FF0000FF
80
+ r = int(color.slice(1, 3), 16)
81
+ g = int(color.slice(3, 5), 16)
82
+ b = int(color.slice(5, 7), 16)
83
+ a = int(color.slice(7, 9), 16) / 255
84
+ break
85
+ case 7: // #FF0000
86
+ r = int(color.slice(1, 3), 16)
87
+ g = int(color.slice(3, 5), 16)
88
+ b = int(color.slice(5, 7), 16)
89
+ break
90
+ case 5: // #F00F => #FF0000FF
91
+ r = int(color[1] + color[1], 16)
92
+ g = int(color[2] + color[2], 16)
93
+ b = int(color[3] + color[3], 16)
94
+ a = int(color[4] + color[4], 16) / 255
95
+ break
96
+ case 4: // #F00 => #FF0000
97
+ r = int(color[1] + color[1], 16)
98
+ g = int(color[2] + color[2], 16)
99
+ b = int(color[3] + color[3], 16)
100
+ break
101
+ case 3: // #F0 => #F0F0F0 非标准
102
+ r = g = b = int(color[1] + color[2], 16)
103
+ break
104
+ case 2: // #F => #FFFFFF 非标准
105
+ r = g = b = int(color[1] + color[1], 16)
106
+ break
107
+ }
108
+
109
+ return { r, g, b, a }
110
+ }
111
+
112
+
113
+ function rgbToRGBA(color: string): IRGBA {
114
+ const match = rgbMatch.exec(color) // rgb(255, 255, 255)
115
+ return {
116
+ r: int(match[1]),
117
+ g: int(match[2]),
118
+ b: int(match[3]),
119
+ a: 1
120
+ }
121
+ }
122
+
123
+ function rgbaToRGBA(color: string): IRGBA {
124
+ const match = rgbaMatch.exec(color) // rgba(255, 255, 255, 1)
125
+ return {
126
+ r: int(match[1]),
127
+ g: int(match[2]),
128
+ b: int(match[3]),
129
+ a: float(match[4])
130
+ }
131
+ }
132
+
133
+
134
+ function hslToRGBA(color: string): IRGBA {
135
+ const match = hslMatch.exec(color) // hsl(360,100%, 100%)
136
+ return hsla(float(match[1]), float(match[2]), float(match[3]), 1)
137
+ }
138
+
139
+ function hslaToRGBA(color: string): IRGBA {
140
+ const match = hslaMatch.exec(color) // hsl(360,100%, 100%, 1)
141
+ return hsla(float(match[1]), float(match[2]), float(match[3]), float(match[4]))
142
+ }
143
+
144
+
145
+ const n1 = 1 / 6, n2 = 0.5, n3 = 2 / 3, n4 = 1 / 3
146
+
147
+ function hue(p: number, q: number, t: number) {
148
+ if (t < 0) t++
149
+ else if (t > 1) t--
150
+ if (t < n1) return p + (q - p) * 6 * t
151
+ if (t < n2) return q
152
+ if (t < n3) return p + (q - p) * (n3 - t) * 6
153
+ return p
154
+ }
155
+
156
+ function hsla(h: number, s: number, l: number, a = 1): IRGBA {
157
+ let r, g, b
158
+ h /= 360, s /= 100, l /= 100
159
+ if (s === 0) {
160
+ r = g = b = l
161
+ } else {
162
+ let q = l < 0.5 ? l * (1 + s) : l + s - l * s
163
+ let p = 2 * l - q
164
+ r = hue(p, q, h + n4)
165
+ g = hue(p, q, h)
166
+ b = hue(p, q, h - n4)
167
+ }
168
+ return { r: round(r * 255), g: round(g * 255), b: round(b * 255), a }
169
+ }
package/src/index.ts ADDED
@@ -0,0 +1,5 @@
1
+ import { ColorConvert } from '@leafer-ui/draw'
2
+
3
+ import { colorToRGBA } from './helper'
4
+
5
+ ColorConvert.object = colorToRGBA
@@ -0,0 +1,2 @@
1
+
2
+ export { }