@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 +21 -0
- package/README.md +1 -0
- package/dist/color.cjs +307 -0
- package/dist/color.esm.js +305 -0
- package/dist/color.esm.min.js +1 -0
- package/dist/color.js +308 -0
- package/dist/color.min.cjs +1 -0
- package/dist/color.min.js +1 -0
- package/package.json +41 -0
- package/src/colors.ts +156 -0
- package/src/helper.ts +169 -0
- package/src/index.ts +5 -0
- package/types/index.d.ts +2 -0
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
package/types/index.d.ts
ADDED