@zcrkey/js-utils 0.0.6 → 0.0.9
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/dist/cjs/color.d.ts +195 -0
- package/dist/cjs/color.js +357 -0
- package/dist/cjs/index.d.ts +5 -4
- package/dist/cjs/index.js +7 -4
- package/dist/cjs/{objUtil.js → obj.js} +4 -4
- package/dist/{esm/treeUtil.d.ts → cjs/tree.d.ts} +6 -2
- package/dist/cjs/{treeUtil.js → tree.js} +46 -12
- package/dist/cjs/util.d.ts +17 -5
- package/dist/cjs/util.js +39 -4
- package/dist/esm/color.d.ts +195 -0
- package/dist/esm/color.js +500 -0
- package/dist/esm/index.d.ts +5 -4
- package/dist/esm/index.js +3 -2
- package/dist/{cjs/treeUtil.d.ts → esm/tree.d.ts} +6 -2
- package/dist/esm/{treeUtil.js → tree.js} +39 -10
- package/dist/esm/util.d.ts +17 -5
- package/dist/esm/util.js +53 -4
- package/dist/umd/index.umd.js +1 -1
- package/package.json +1 -1
- /package/dist/cjs/{objUtil.d.ts → obj.d.ts} +0 -0
- /package/dist/esm/{objUtil.d.ts → obj.d.ts} +0 -0
- /package/dist/esm/{objUtil.js → obj.js} +0 -0
|
@@ -0,0 +1,500 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
3
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
4
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
5
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
6
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
7
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
8
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
9
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
10
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
11
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
12
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
13
|
+
var CrColorUtil = /*#__PURE__*/function () {
|
|
14
|
+
function CrColorUtil() {
|
|
15
|
+
_classCallCheck(this, CrColorUtil);
|
|
16
|
+
}
|
|
17
|
+
_createClass(CrColorUtil, null, [{
|
|
18
|
+
key: "hexToRgb",
|
|
19
|
+
value:
|
|
20
|
+
/**
|
|
21
|
+
* hex 转 rgb 数组 [r,g,b] r/g/b范围 0-255
|
|
22
|
+
* @param hex 支持 #fff / #ffffff / fff / ffffff 格式
|
|
23
|
+
*/
|
|
24
|
+
function hexToRgb(hex) {
|
|
25
|
+
var hexVal = hex.replace('#', '');
|
|
26
|
+
if (hexVal.length === 3) {
|
|
27
|
+
hexVal = hexVal.split('').map(function (c) {
|
|
28
|
+
return c + c;
|
|
29
|
+
}).join('');
|
|
30
|
+
}
|
|
31
|
+
var hexInt = parseInt(hexVal, 16);
|
|
32
|
+
var r = hexInt >> 16 & 255;
|
|
33
|
+
var g = hexInt >> 8 & 255;
|
|
34
|
+
var b = hexInt & 255;
|
|
35
|
+
return [r, g, b];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* rgb 转 hex 标准格式
|
|
40
|
+
* @param r 0-255
|
|
41
|
+
* @param g 0-255
|
|
42
|
+
* @param b 0-255
|
|
43
|
+
*/
|
|
44
|
+
}, {
|
|
45
|
+
key: "rgbToHex",
|
|
46
|
+
value: function rgbToHex(r, g, b) {
|
|
47
|
+
var clamp = function clamp(val) {
|
|
48
|
+
return Math.max(0, Math.min(255, Math.round(val)));
|
|
49
|
+
};
|
|
50
|
+
var red = clamp(r);
|
|
51
|
+
var green = clamp(g);
|
|
52
|
+
var blue = clamp(b);
|
|
53
|
+
return '#' + this.twoDigits(red.toString(16)) + this.twoDigits(green.toString(16)) + this.twoDigits(blue.toString(16));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* 将 rgb 格式转为 hsv 格式
|
|
58
|
+
* input: r,g,b in [0,1], out: h in [0,360) and s,v in [0,1]
|
|
59
|
+
* @param r 0-1
|
|
60
|
+
* @param g 0-1
|
|
61
|
+
* @param b 0-1
|
|
62
|
+
*/
|
|
63
|
+
}, {
|
|
64
|
+
key: "rgb2hsv",
|
|
65
|
+
value: function rgb2hsv(r, g, b) {
|
|
66
|
+
var v = Math.max(r, g, b);
|
|
67
|
+
var n = v - Math.min(r, g, b);
|
|
68
|
+
var h = n && (v == r ? (g - b) / n : v == g ? 2 + (b - r) / n : 4 + (r - g) / n);
|
|
69
|
+
return [60 * (h < 0 ? h + 6 : h), v && n / v, v];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* 将 hsv 格式转为 rgb 格式
|
|
74
|
+
* input: h in [0,360] and s,v in [0,1] - output: r,g,b in [0,1]
|
|
75
|
+
* @param h 0-360
|
|
76
|
+
* @param s 0-1
|
|
77
|
+
* @param v 0-1
|
|
78
|
+
*/
|
|
79
|
+
}, {
|
|
80
|
+
key: "hsv2rgb",
|
|
81
|
+
value: function hsv2rgb(h, s, v) {
|
|
82
|
+
var f = function f(n) {
|
|
83
|
+
var k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (n + h / 60) % 6;
|
|
84
|
+
return v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);
|
|
85
|
+
};
|
|
86
|
+
return [f(5), f(3), f(1)];
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* hex 转 rgba 格式字符串 可直接用于css
|
|
91
|
+
* @param hex 支持 #fff / #ffffff / fff / ffffff 格式
|
|
92
|
+
* @param alpha 透明度 0-1 默认1(完全不透明)
|
|
93
|
+
* @returns 例: rgba(255,255,255,0.5)
|
|
94
|
+
*/
|
|
95
|
+
}, {
|
|
96
|
+
key: "hexToRgba",
|
|
97
|
+
value: function hexToRgba(hex) {
|
|
98
|
+
var alpha = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
99
|
+
var _this$hexToRgb = this.hexToRgb(hex),
|
|
100
|
+
_this$hexToRgb2 = _slicedToArray(_this$hexToRgb, 3),
|
|
101
|
+
r = _this$hexToRgb2[0],
|
|
102
|
+
g = _this$hexToRgb2[1],
|
|
103
|
+
b = _this$hexToRgb2[2];
|
|
104
|
+
var validAlpha = Math.max(0, Math.min(1, alpha));
|
|
105
|
+
return "rgba(".concat(r, ", ").concat(g, ", ").concat(b, ", ").concat(validAlpha, ")");
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* 给hex颜色添加透明度,返回 8位带透明通道的hex格式 #RRGGBBAA (CSS常用)
|
|
110
|
+
* @param hex 支持 #fff / #ffffff / fff / ffffff 格式
|
|
111
|
+
* @param alpha 透明度 0-1 默认1(完全不透明)
|
|
112
|
+
* @returns 例: #ffffff80 #ff000033
|
|
113
|
+
*/
|
|
114
|
+
}, {
|
|
115
|
+
key: "hexAddAlpha",
|
|
116
|
+
value: function hexAddAlpha(hex) {
|
|
117
|
+
var alpha = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
118
|
+
var pureHex = hex.replace('#', '');
|
|
119
|
+
pureHex = pureHex.length === 3 ? pureHex.split('').map(function (char) {
|
|
120
|
+
return char + char;
|
|
121
|
+
}).join('') : pureHex;
|
|
122
|
+
var validAlpha = Math.max(0, Math.min(1, alpha));
|
|
123
|
+
var alphaHex = this.twoDigits(Math.round(validAlpha * 255).toString(16));
|
|
124
|
+
return "#".concat(pureHex).concat(alphaHex);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* rgba 转 hex 格式
|
|
129
|
+
* @param r 0-255
|
|
130
|
+
* @param g 0-255
|
|
131
|
+
* @param b 0-255
|
|
132
|
+
*/
|
|
133
|
+
}, {
|
|
134
|
+
key: "rgbaToHex",
|
|
135
|
+
value: function rgbaToHex(r, g, b) {
|
|
136
|
+
return this.rgbToHex(r, g, b);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* hsv 转 hex 十六进制颜色
|
|
141
|
+
* @param h 色相 0-360
|
|
142
|
+
* @param s 饱和度 0-1
|
|
143
|
+
* @param v 明度 0-1
|
|
144
|
+
*/
|
|
145
|
+
}, {
|
|
146
|
+
key: "hsvToHex",
|
|
147
|
+
value: function hsvToHex(h, s, v) {
|
|
148
|
+
var _this$hsv2rgb = this.hsv2rgb(h, s, v),
|
|
149
|
+
_this$hsv2rgb2 = _slicedToArray(_this$hsv2rgb, 3),
|
|
150
|
+
r = _this$hsv2rgb2[0],
|
|
151
|
+
g = _this$hsv2rgb2[1],
|
|
152
|
+
b = _this$hsv2rgb2[2];
|
|
153
|
+
return this.rgbToHex(Math.round(r * 255), Math.round(g * 255), Math.round(b * 255));
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* hex 转 hsv 格式
|
|
158
|
+
* @param hex 支持 #fff / #ffffff / fff / ffffff 格式
|
|
159
|
+
* @returns [h:0-360, s:0-1, v:0-1]
|
|
160
|
+
*/
|
|
161
|
+
}, {
|
|
162
|
+
key: "hexToHsv",
|
|
163
|
+
value: function hexToHsv(hex) {
|
|
164
|
+
var _this$hexToRgb3 = this.hexToRgb(hex),
|
|
165
|
+
_this$hexToRgb4 = _slicedToArray(_this$hexToRgb3, 3),
|
|
166
|
+
r = _this$hexToRgb4[0],
|
|
167
|
+
g = _this$hexToRgb4[1],
|
|
168
|
+
b = _this$hexToRgb4[2];
|
|
169
|
+
return this.rgb2hsv(r / 255, g / 255, b / 255);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* 颜色加深处理 - 基于hex颜色
|
|
174
|
+
* @param hex 支持 #fff / #ffffff / fff / ffffff 格式
|
|
175
|
+
* @param level 加深程度 0-1 0不变 1最深(接近黑色)
|
|
176
|
+
*/
|
|
177
|
+
}, {
|
|
178
|
+
key: "darkenColor",
|
|
179
|
+
value: function darkenColor(hex, level) {
|
|
180
|
+
var _this$hexToRgb5 = this.hexToRgb(hex),
|
|
181
|
+
_this$hexToRgb6 = _slicedToArray(_this$hexToRgb5, 3),
|
|
182
|
+
r = _this$hexToRgb6[0],
|
|
183
|
+
g = _this$hexToRgb6[1],
|
|
184
|
+
b = _this$hexToRgb6[2];
|
|
185
|
+
var clamp = function clamp(val) {
|
|
186
|
+
return Math.max(0, Math.min(255, val));
|
|
187
|
+
};
|
|
188
|
+
var darkR = clamp(r - r * level);
|
|
189
|
+
var darkG = clamp(g - g * level);
|
|
190
|
+
var darkB = clamp(b - b * level);
|
|
191
|
+
return this.rgbToHex(darkR, darkG, darkB);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* 颜色减淡/提亮处理 - 基于hex颜色
|
|
196
|
+
* @param hex 支持 #fff / #ffffff / fff / ffffff 格式
|
|
197
|
+
* @param level 减淡程度 0-1 0不变 1最亮(接近白色)
|
|
198
|
+
*/
|
|
199
|
+
}, {
|
|
200
|
+
key: "lightenColor",
|
|
201
|
+
value: function lightenColor(hex, level) {
|
|
202
|
+
var _this$hexToRgb7 = this.hexToRgb(hex),
|
|
203
|
+
_this$hexToRgb8 = _slicedToArray(_this$hexToRgb7, 3),
|
|
204
|
+
r = _this$hexToRgb8[0],
|
|
205
|
+
g = _this$hexToRgb8[1],
|
|
206
|
+
b = _this$hexToRgb8[2];
|
|
207
|
+
var clamp = function clamp(val) {
|
|
208
|
+
return Math.max(0, Math.min(255, val));
|
|
209
|
+
};
|
|
210
|
+
var lightR = clamp(r + (255 - r) * level);
|
|
211
|
+
var lightG = clamp(g + (255 - g) * level);
|
|
212
|
+
var lightB = clamp(b + (255 - b) * level);
|
|
213
|
+
return this.rgbToHex(lightR, lightG, lightB);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* 解析8位带透明的hex #RRGGBBAA 为 普通hex + 透明度
|
|
218
|
+
* @param hex8 8位带透明的十六进制颜色 例:#ffffff80
|
|
219
|
+
* @returns { hex: '#ffffff', alpha: 0.5 }
|
|
220
|
+
*/
|
|
221
|
+
}, {
|
|
222
|
+
key: "parseHex8",
|
|
223
|
+
value: function parseHex8(hex8) {
|
|
224
|
+
var pureHex = hex8.replace('#', '');
|
|
225
|
+
if (pureHex.length !== 8) return {
|
|
226
|
+
hex: hex8,
|
|
227
|
+
alpha: 1
|
|
228
|
+
};
|
|
229
|
+
var hex = "#".concat(pureHex.slice(0, 6));
|
|
230
|
+
var alphaHex = pureHex.slice(6);
|
|
231
|
+
var alpha = Math.round(parseInt(alphaHex, 16) / 255 * 100) / 100;
|
|
232
|
+
return {
|
|
233
|
+
hex: hex,
|
|
234
|
+
alpha: alpha
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* rgb 数组 转 rgb/rgba 字符串
|
|
240
|
+
* @param rgb [r,g,b] 0-255
|
|
241
|
+
* @param alpha 透明度0-1 传则返回rgba,不传返回rgb
|
|
242
|
+
*/
|
|
243
|
+
}, {
|
|
244
|
+
key: "rgbToStr",
|
|
245
|
+
value: function rgbToStr(rgb, alpha) {
|
|
246
|
+
var _rgb = _slicedToArray(rgb, 3),
|
|
247
|
+
r = _rgb[0],
|
|
248
|
+
g = _rgb[1],
|
|
249
|
+
b = _rgb[2];
|
|
250
|
+
return alpha !== undefined ? "rgba(".concat(r, ", ").concat(g, ", ").concat(b, ", ").concat(Math.max(0, Math.min(1, alpha)), ")") : "rgb(".concat(r, ", ").concat(g, ", ").concat(b, ")");
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Hex颜色字符串 转 十进制数值(6位纯颜色值,无透明通道,专用于颜色运算)
|
|
255
|
+
* @param hex 支持 #fff / #ffffff / fff / ffffff 格式
|
|
256
|
+
* @returns 十进制数值 例:#ff0000 → 16711680,非法入参返回 0
|
|
257
|
+
*/
|
|
258
|
+
}, {
|
|
259
|
+
key: "hexToNumber",
|
|
260
|
+
value: function hexToNumber(hex) {
|
|
261
|
+
var pureHex = hex.replace('#', '');
|
|
262
|
+
// 严谨校验:只允许3位/6位纯十六进制颜色,非法值返回0,避免NaN
|
|
263
|
+
if (!/^[0-9a-fA-F]{3}|[0-9a-fA-F]{6}$/.test(pureHex)) {
|
|
264
|
+
return 0;
|
|
265
|
+
}
|
|
266
|
+
return parseInt(pureHex, 16);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* 十进制数值 转回 Hex颜色字符串(无透明通道 标准6位)
|
|
271
|
+
* @param num 十进制数值 例:16711680 → #ff0000
|
|
272
|
+
* @returns 标准6位十六进制颜色 #RRGGBB 格式
|
|
273
|
+
*/
|
|
274
|
+
}, {
|
|
275
|
+
key: "numberToHex",
|
|
276
|
+
value: function numberToHex(num) {
|
|
277
|
+
// 位运算拆解R/G/B通道,值范围永远0-255,再转16进制字符串+补零
|
|
278
|
+
var r = this.twoDigits((num >> 16 & 255).toString(16));
|
|
279
|
+
var g = this.twoDigits((num >> 8 & 255).toString(16));
|
|
280
|
+
var b = this.twoDigits((num & 255).toString(16));
|
|
281
|
+
return "#".concat(r).concat(g).concat(b);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* ARGB颜色字符串 转 十进制数值(8位带透明通道,专用于带透明的颜色运算)
|
|
286
|
+
* @param argb 支持 #AARRGGBB / AARRGGBB 格式 例:#80FFFFFF、80FFFFFF
|
|
287
|
+
* @returns 十进制数值 例:#80FFFFFF → 2147483647,非法入参/格式错误返回 0
|
|
288
|
+
*/
|
|
289
|
+
}, {
|
|
290
|
+
key: "argbToNumber",
|
|
291
|
+
value: function argbToNumber(argb) {
|
|
292
|
+
var pureArgb = argb.replace('#', '');
|
|
293
|
+
if (!/^[0-9a-fA-F]{8}$/.test(pureArgb)) {
|
|
294
|
+
return 0;
|
|
295
|
+
}
|
|
296
|
+
return parseInt(pureArgb, 16);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* 十进制数值 转回 ARGB颜色字符串(8位带透明通道,标准#AARRGGBB格式)
|
|
301
|
+
* @param num 十进制数值 例:2147483647 → #80ffffff
|
|
302
|
+
* @returns 标准ARGB颜色字符串 #AARRGGBB 小写格式
|
|
303
|
+
*/
|
|
304
|
+
}, {
|
|
305
|
+
key: "numberToArgb",
|
|
306
|
+
value: function numberToArgb(num) {
|
|
307
|
+
var a = this.twoDigits((num >> 24 & 255).toString(16));
|
|
308
|
+
var r = this.twoDigits((num >> 16 & 255).toString(16));
|
|
309
|
+
var g = this.twoDigits((num >> 8 & 255).toString(16));
|
|
310
|
+
var b = this.twoDigits((num & 255).toString(16));
|
|
311
|
+
return "#".concat(a).concat(r).concat(g).concat(b);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* 生成随机Hex颜色
|
|
316
|
+
* @param withSharp 是否带#号 默认为true
|
|
317
|
+
* @returns 随机hex颜色
|
|
318
|
+
*/
|
|
319
|
+
}, {
|
|
320
|
+
key: "randomHexColor",
|
|
321
|
+
value: function randomHexColor() {
|
|
322
|
+
var withSharp = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
323
|
+
var hex = this.twoDigits(Math.floor(Math.random() * 16).toString(16)) + this.twoDigits(Math.floor(Math.random() * 16).toString(16)) + this.twoDigits(Math.floor(Math.random() * 16).toString(16)) + this.twoDigits(Math.floor(Math.random() * 16).toString(16)) + this.twoDigits(Math.floor(Math.random() * 16).toString(16)) + this.twoDigits(Math.floor(Math.random() * 16).toString(16));
|
|
324
|
+
return withSharp ? "#".concat(hex) : hex;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* 反色处理 - 取颜色的补色(比如黑色→白色,白色→黑色)
|
|
329
|
+
* @param hex 目标颜色
|
|
330
|
+
* @returns 反色hex
|
|
331
|
+
*/
|
|
332
|
+
}, {
|
|
333
|
+
key: "reverseColor",
|
|
334
|
+
value: function reverseColor(hex) {
|
|
335
|
+
var _this$hexToRgb9 = this.hexToRgb(hex),
|
|
336
|
+
_this$hexToRgb10 = _slicedToArray(_this$hexToRgb9, 3),
|
|
337
|
+
r = _this$hexToRgb10[0],
|
|
338
|
+
g = _this$hexToRgb10[1],
|
|
339
|
+
b = _this$hexToRgb10[2];
|
|
340
|
+
return this.rgbToHex(255 - r, 255 - g, 255 - b);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* 校验是否为合法的hex颜色
|
|
345
|
+
* @param hex 待校验的颜色字符串
|
|
346
|
+
* @returns true=合法 false=不合法
|
|
347
|
+
*/
|
|
348
|
+
}, {
|
|
349
|
+
key: "isHexColor",
|
|
350
|
+
value: function isHexColor(hex) {
|
|
351
|
+
return /^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(hex);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* 标准6位Hex颜色 转 ARGB 8位颜色格式 ( 核心:ARGB格式是 #AARRGGBB )
|
|
356
|
+
* @param hex 6位标准hex 支持 #ffffff / ffffff / #fff / fff
|
|
357
|
+
* @param alpha 透明度 0~1 默认 1 (完全不透明)
|
|
358
|
+
* @returns 8位ARGB格式颜色 例:#80FFFFFF 半透明白色
|
|
359
|
+
*/
|
|
360
|
+
}, {
|
|
361
|
+
key: "hexToArgb",
|
|
362
|
+
value: function hexToArgb(hex) {
|
|
363
|
+
var alpha = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
364
|
+
var pureHex = hex.replace('#', '');
|
|
365
|
+
if (pureHex.length === 3) {
|
|
366
|
+
pureHex = pureHex.split('').map(function (char) {
|
|
367
|
+
return char + char;
|
|
368
|
+
}).join('');
|
|
369
|
+
}
|
|
370
|
+
var validAlpha = Math.max(0, Math.min(1, alpha));
|
|
371
|
+
var alphaHex = this.twoDigits(Math.round(validAlpha * 255).toString(16));
|
|
372
|
+
return "#".concat(alphaHex).concat(pureHex);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* ARGB 8位颜色格式 转回 标准6位Hex颜色 + 独立的透明度值 ( 反向解析 )
|
|
377
|
+
* @param argb 8位ARGB格式颜色 必须是 #AARRGGBB 格式 例:#80FFFFFF
|
|
378
|
+
* @returns { hex: '#ffffff', alpha: 0.5 } 标准hex + 0~1的透明度
|
|
379
|
+
*/
|
|
380
|
+
}, {
|
|
381
|
+
key: "argbToHex",
|
|
382
|
+
value: function argbToHex(argb) {
|
|
383
|
+
var pureArgb = argb.replace('#', '');
|
|
384
|
+
if (pureArgb.length !== 8) {
|
|
385
|
+
console.warn('传入的不是合法的ARGB格式,格式必须是 #AARRGGBB');
|
|
386
|
+
return {
|
|
387
|
+
hex: argb,
|
|
388
|
+
alpha: 1
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
var alphaHex = pureArgb.slice(0, 2);
|
|
392
|
+
var hexVal = pureArgb.slice(2);
|
|
393
|
+
var alpha = Math.round(parseInt(alphaHex, 16) / 255 * 100) / 100;
|
|
394
|
+
return {
|
|
395
|
+
hex: "#".concat(hexVal),
|
|
396
|
+
alpha: alpha
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
/**
|
|
401
|
+
* ARGB格式(#AARRGGBB) 转 RRGGBBAA格式(#RRGGBBAA)
|
|
402
|
+
* @param argb #AARRGGBB
|
|
403
|
+
* @returns #RRGGBBAA
|
|
404
|
+
*/
|
|
405
|
+
}, {
|
|
406
|
+
key: "argbToRgbaHex",
|
|
407
|
+
value: function argbToRgbaHex(argb) {
|
|
408
|
+
var pureArgb = argb.replace('#', '');
|
|
409
|
+
if (pureArgb.length !== 8) return argb;
|
|
410
|
+
return "#".concat(pureArgb.slice(2)).concat(pureArgb.slice(0, 2));
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* RRGGBBAA格式(#RRGGBBAA) 转 ARGB格式(#AARRGGBB)
|
|
415
|
+
* @param rgbaHex #RRGGBBAA
|
|
416
|
+
* @returns #AARRGGBB
|
|
417
|
+
*/
|
|
418
|
+
}, {
|
|
419
|
+
key: "rgbaHexToArgb",
|
|
420
|
+
value: function rgbaHexToArgb(rgbaHex) {
|
|
421
|
+
var pureRgba = rgbaHex.replace('#', '');
|
|
422
|
+
if (pureRgba.length !== 8) return rgbaHex;
|
|
423
|
+
return "#".concat(pureRgba.slice(6)).concat(pureRgba.slice(0, 6));
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* 调整颜色饱和度
|
|
428
|
+
* @param hex 目标颜色
|
|
429
|
+
* @param level 调整程度 0-2 1=不变 <1=降低饱和度 >1=提高饱和度
|
|
430
|
+
* @returns 调整后的hex颜色
|
|
431
|
+
*/
|
|
432
|
+
}, {
|
|
433
|
+
key: "adjustSaturation",
|
|
434
|
+
value: function adjustSaturation(hex, level) {
|
|
435
|
+
var _this$hexToHsv = this.hexToHsv(hex),
|
|
436
|
+
_this$hexToHsv2 = _slicedToArray(_this$hexToHsv, 3),
|
|
437
|
+
h = _this$hexToHsv2[0],
|
|
438
|
+
s = _this$hexToHsv2[1],
|
|
439
|
+
v = _this$hexToHsv2[2];
|
|
440
|
+
var newS = Math.max(0, Math.min(1, s * level));
|
|
441
|
+
return this.hsvToHex(h, newS, v);
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
* 调整颜色明度
|
|
446
|
+
* @param hex 目标颜色
|
|
447
|
+
* @param level 调整程度 0-2 1=不变 <1=降低明度 >1=提高明度
|
|
448
|
+
* @returns 调整后的hex颜色
|
|
449
|
+
*/
|
|
450
|
+
}, {
|
|
451
|
+
key: "adjustBrightness",
|
|
452
|
+
value: function adjustBrightness(hex, level) {
|
|
453
|
+
var _this$hexToHsv3 = this.hexToHsv(hex),
|
|
454
|
+
_this$hexToHsv4 = _slicedToArray(_this$hexToHsv3, 3),
|
|
455
|
+
h = _this$hexToHsv4[0],
|
|
456
|
+
s = _this$hexToHsv4[1],
|
|
457
|
+
v = _this$hexToHsv4[2];
|
|
458
|
+
var newV = Math.max(0, Math.min(1, v * level));
|
|
459
|
+
return this.hsvToHex(h, s, newV);
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
/**
|
|
463
|
+
* 普通6位Hex+透明度 → 直接返回ARGB对应的十进制数值
|
|
464
|
+
* @param hex 支持 #fff / #ffffff 格式
|
|
465
|
+
* @param alpha 透明度 0-1
|
|
466
|
+
* @returns ARGB十进制数值
|
|
467
|
+
*/
|
|
468
|
+
}, {
|
|
469
|
+
key: "hexAlphaToArgbNumber",
|
|
470
|
+
value: function hexAlphaToArgbNumber(hex) {
|
|
471
|
+
var alpha = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
472
|
+
var argbStr = this.hexToArgb(hex, alpha);
|
|
473
|
+
return this.argbToNumber(argbStr);
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* ARGB十进制数值 → 解析出 普通Hex + 0-1透明度
|
|
478
|
+
* @param num ARGB十进制数值
|
|
479
|
+
* @returns { hex: '#ffffff', alpha: 0.5 }
|
|
480
|
+
*/
|
|
481
|
+
}, {
|
|
482
|
+
key: "argbNumberToHexAlpha",
|
|
483
|
+
value: function argbNumberToHexAlpha(num) {
|
|
484
|
+
var argbStr = this.numberToArgb(num);
|
|
485
|
+
return this.argbToHex(argbStr);
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
/**
|
|
489
|
+
* 补零成两位字符
|
|
490
|
+
*/
|
|
491
|
+
}, {
|
|
492
|
+
key: "twoDigits",
|
|
493
|
+
value: function twoDigits(num) {
|
|
494
|
+
var s = num.toString();
|
|
495
|
+
return s.length === 1 ? '0' + s : s;
|
|
496
|
+
}
|
|
497
|
+
}]);
|
|
498
|
+
return CrColorUtil;
|
|
499
|
+
}();
|
|
500
|
+
export { CrColorUtil as default };
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
export { default as CrColorUtil } from './color';
|
|
1
2
|
export type * from './eventCenter';
|
|
2
3
|
export { default as CrEventCenter } from './eventCenter';
|
|
3
|
-
export type * from './
|
|
4
|
-
export { default as CrObjUtil } from './
|
|
4
|
+
export type * from './obj';
|
|
5
|
+
export { default as CrObjUtil } from './obj';
|
|
5
6
|
export { default as CrStorage } from './storage';
|
|
6
|
-
export type * from './
|
|
7
|
-
export { default as CrTreeUtil } from './
|
|
7
|
+
export type * from './tree';
|
|
8
|
+
export { default as CrTreeUtil } from './tree';
|
|
8
9
|
export { default as CrUtil } from './util';
|
package/dist/esm/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
export { default as CrColorUtil } from "./color";
|
|
1
2
|
export { default as CrEventCenter } from "./eventCenter";
|
|
2
|
-
export { default as CrObjUtil } from "./
|
|
3
|
+
export { default as CrObjUtil } from "./obj";
|
|
3
4
|
export { default as CrStorage } from "./storage";
|
|
4
|
-
export { default as CrTreeUtil } from "./
|
|
5
|
+
export { default as CrTreeUtil } from "./tree";
|
|
5
6
|
export { default as CrUtil } from "./util";
|
|
@@ -21,13 +21,17 @@ export default class CrTreeUtil {
|
|
|
21
21
|
* 树形数据转列表数据
|
|
22
22
|
* @param tree
|
|
23
23
|
* @param options
|
|
24
|
+
* @param options.idField 默认值 id
|
|
25
|
+
* @param options.parentIdField 默认值 parentId
|
|
24
26
|
* @param options.childrenField 默认值 children
|
|
25
|
-
* @param options.
|
|
27
|
+
* @param options.rootParentValue 根节点的父值,默认值 null
|
|
26
28
|
* @returns
|
|
27
29
|
*/
|
|
28
30
|
static treeToList<T extends Record<string, any>>(tree: T[], options?: {
|
|
31
|
+
idField?: string;
|
|
32
|
+
parentIdField?: string;
|
|
29
33
|
childrenField?: string;
|
|
30
|
-
|
|
34
|
+
rootParentValue?: any;
|
|
31
35
|
}): T[];
|
|
32
36
|
/**
|
|
33
37
|
* 获取扁平化父数据(包含自身)
|
|
@@ -17,6 +17,7 @@ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _d
|
|
|
17
17
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
18
18
|
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
19
19
|
import { cloneDeep as _cloneDeep, find as _find, get as _get, keyBy as _keyBy } from 'lodash';
|
|
20
|
+
import CrUtil from "./util";
|
|
20
21
|
var CrTreeUtil = /*#__PURE__*/function () {
|
|
21
22
|
function CrTreeUtil() {
|
|
22
23
|
_classCallCheck(this, CrTreeUtil);
|
|
@@ -116,31 +117,59 @@ var CrTreeUtil = /*#__PURE__*/function () {
|
|
|
116
117
|
* 树形数据转列表数据
|
|
117
118
|
* @param tree
|
|
118
119
|
* @param options
|
|
120
|
+
* @param options.idField 默认值 id
|
|
121
|
+
* @param options.parentIdField 默认值 parentId
|
|
119
122
|
* @param options.childrenField 默认值 children
|
|
120
|
-
* @param options.
|
|
123
|
+
* @param options.rootParentValue 根节点的父值,默认值 null
|
|
121
124
|
* @returns
|
|
122
125
|
*/
|
|
123
126
|
}, {
|
|
124
127
|
key: "treeToList",
|
|
125
128
|
value: function treeToList(tree, options) {
|
|
126
129
|
var _ref2 = options || {},
|
|
130
|
+
_ref2$idField = _ref2.idField,
|
|
131
|
+
idField = _ref2$idField === void 0 ? 'id' : _ref2$idField,
|
|
132
|
+
_ref2$parentIdField = _ref2.parentIdField,
|
|
133
|
+
parentIdField = _ref2$parentIdField === void 0 ? 'parentId' : _ref2$parentIdField,
|
|
127
134
|
_ref2$childrenField = _ref2.childrenField,
|
|
128
135
|
childrenField = _ref2$childrenField === void 0 ? 'children' : _ref2$childrenField,
|
|
129
|
-
_ref2$
|
|
130
|
-
|
|
136
|
+
_ref2$rootParentValue = _ref2.rootParentValue,
|
|
137
|
+
rootParentValue = _ref2$rootParentValue === void 0 ? null : _ref2$rootParentValue;
|
|
131
138
|
var result = [];
|
|
132
|
-
var
|
|
133
|
-
|
|
134
|
-
|
|
139
|
+
var originQueue = _cloneDeep(_toConsumableArray(tree));
|
|
140
|
+
var queue = originQueue.map(function (node) {
|
|
141
|
+
return {
|
|
142
|
+
node: node,
|
|
143
|
+
parentId: rootParentValue
|
|
144
|
+
};
|
|
145
|
+
});
|
|
146
|
+
var _loop = function _loop() {
|
|
147
|
+
var _ref3 = queue.shift(),
|
|
148
|
+
node = _ref3.node,
|
|
149
|
+
parentId = _ref3.parentId;
|
|
150
|
+
if (!node || !CrUtil.isObject(node)) {
|
|
151
|
+
return 1; // continue
|
|
152
|
+
}
|
|
135
153
|
var children = node[childrenField];
|
|
154
|
+
var nodeId = node[idField];
|
|
136
155
|
var _ = node[childrenField],
|
|
137
156
|
rest = _objectWithoutProperties(node, [childrenField].map(_toPropertyKey));
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
157
|
+
var flatNode = _objectSpread(_objectSpread({}, rest), {}, _defineProperty({}, parentIdField, parentId));
|
|
158
|
+
result.push(flatNode);
|
|
159
|
+
if (children && CrUtil.isArray(children) && children.length > 0) {
|
|
160
|
+
var childQueue = children.map(function (childNode) {
|
|
161
|
+
return {
|
|
162
|
+
node: childNode,
|
|
163
|
+
parentId: nodeId
|
|
164
|
+
};
|
|
165
|
+
});
|
|
166
|
+
queue.push.apply(queue, _toConsumableArray(childQueue));
|
|
141
167
|
}
|
|
168
|
+
};
|
|
169
|
+
while (queue.length) {
|
|
170
|
+
if (_loop()) continue;
|
|
142
171
|
}
|
|
143
|
-
return
|
|
172
|
+
return result;
|
|
144
173
|
}
|
|
145
174
|
|
|
146
175
|
/**
|
package/dist/esm/util.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export default class CrUtil {
|
|
|
10
10
|
* @param value
|
|
11
11
|
* @returns boolean
|
|
12
12
|
*/
|
|
13
|
-
static isObject
|
|
13
|
+
static isObject(value: unknown): value is Record<string | number, unknown>;
|
|
14
14
|
/**
|
|
15
15
|
* 判断是否为空对象
|
|
16
16
|
* @param value
|
|
@@ -91,7 +91,7 @@ export default class CrUtil {
|
|
|
91
91
|
* @param settings.idField 默认值 id
|
|
92
92
|
* @param settings.pidField 默认值 parentId
|
|
93
93
|
* @param settings.childrenField 默认值 children
|
|
94
|
-
* @deprecated 即将移除,使用 {@link
|
|
94
|
+
* @deprecated 即将移除,使用 {@link CrTreeUtil.listToTree} 替代
|
|
95
95
|
* @returns
|
|
96
96
|
*/
|
|
97
97
|
static listToTreeData(listData: any[], settings?: {
|
|
@@ -108,7 +108,7 @@ export default class CrUtil {
|
|
|
108
108
|
* @param settings.idField 默认值 id
|
|
109
109
|
* @param settings.pidField 默认值 parentId
|
|
110
110
|
* @param settings.childrenField 默认值 children
|
|
111
|
-
* @deprecated 即将移除,使用 {@link
|
|
111
|
+
* @deprecated 即将移除,使用 {@link CrTreeUtil.treeToList} 替代
|
|
112
112
|
* @returns
|
|
113
113
|
*/
|
|
114
114
|
static treeDataToListData(treeData: any[], pid?: string | number, settings?: {
|
|
@@ -125,7 +125,7 @@ export default class CrUtil {
|
|
|
125
125
|
* @param settings.valueField 默认值 value
|
|
126
126
|
* @param settings.idField 默认值 id
|
|
127
127
|
* @param settings.pidField 默认值 parentId
|
|
128
|
-
* @deprecated 即将移除,使用 {@link
|
|
128
|
+
* @deprecated 即将移除,使用 {@link CrTreeUtil.getFlatParentDatas} 替代
|
|
129
129
|
* @returns
|
|
130
130
|
*/
|
|
131
131
|
static getParentNodes<T, R extends Record<string, any>>(listData: R[], value: number | string, settings?: {
|
|
@@ -201,9 +201,21 @@ export default class CrUtil {
|
|
|
201
201
|
*/
|
|
202
202
|
static compareDataDiff(data1: any, data2: any): Record<string, "added" | "removed" | "modified">;
|
|
203
203
|
/**
|
|
204
|
-
*
|
|
204
|
+
* 格式化为千分位,主要用于展示格式化
|
|
205
205
|
* @param value
|
|
206
206
|
* @returns 12345.6789 => 12,345.6789
|
|
207
207
|
*/
|
|
208
208
|
static fmtThousands(value: number | string | undefined): string;
|
|
209
|
+
/**
|
|
210
|
+
* 格式化为千分位格式
|
|
211
|
+
* @param value
|
|
212
|
+
* @returns
|
|
213
|
+
*/
|
|
214
|
+
static formatThousands(value?: string | number): string;
|
|
215
|
+
/**
|
|
216
|
+
* 解析千分位格式
|
|
217
|
+
* @param value
|
|
218
|
+
* @returns
|
|
219
|
+
*/
|
|
220
|
+
static parseThousands(value?: string | number): string;
|
|
209
221
|
}
|