@wfrog/vc-ui 1.0.0 → 1.1.0

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.
Files changed (109) hide show
  1. package/README.md +2 -2
  2. package/dist/es/chunk/{BMzd-IS6.mjs → 09Ec85_u.mjs} +13 -13
  3. package/dist/es/chunk/{su2Zrql0.mjs → 4eyJqDa9.mjs} +1 -1
  4. package/dist/es/chunk/{Dqz1zvKN.mjs → 73YgKz3H.mjs} +1 -1
  5. package/dist/es/chunk/{Dh4jaUSg.mjs → B5UQmWXg.mjs} +5 -5
  6. package/dist/es/chunk/{CVlj9F0I.mjs → BHsNc7jl.mjs} +4 -3
  7. package/dist/es/chunk/{CEm0brzD.mjs → BI0vrXwX.mjs} +2 -1
  8. package/dist/es/chunk/{BJS5Pdfp.mjs → BTpNRPQW.mjs} +1 -1
  9. package/dist/es/chunk/{De_EXLIy.mjs → BUEEWLrd.mjs} +1 -1
  10. package/dist/es/chunk/{C5hWsUfD.mjs → BcTuAX8r.mjs} +2 -2
  11. package/dist/es/chunk/{DyDMGLoF.mjs → Bl2KlMdP.mjs} +3 -2
  12. package/dist/es/chunk/{ViP2SEY4.mjs → Bp9jXKX0.mjs} +2 -3
  13. package/dist/es/chunk/{C2LgraHx.mjs → BpqBBo4z.mjs} +2 -3
  14. package/dist/es/chunk/{CS4VKsqy.mjs → BsGCX4td.mjs} +1 -1
  15. package/dist/es/chunk/{-EkpfdcW.mjs → BsLJxiSC.mjs} +46 -8
  16. package/dist/es/chunk/{zfg5SOj1.mjs → BtTIs3tG.mjs} +3 -3
  17. package/dist/es/chunk/{B_tU9Nax.mjs → BzedaLtg.mjs} +1 -1
  18. package/dist/es/chunk/{Dvi7RsXg.mjs → C7wQNvSS.mjs} +10 -9
  19. package/dist/es/chunk/{8rLUmOVR.mjs → CBSopeeE.mjs} +3 -2
  20. package/dist/es/chunk/{Coex0GxM.mjs → CLCfXfvv.mjs} +10 -10
  21. package/dist/es/chunk/{DqUIKX7f.mjs → CLMc8GzD.mjs} +8 -7
  22. package/dist/es/chunk/{D3uV7vm-.mjs → CLbj8G-F.mjs} +3 -3
  23. package/dist/es/chunk/{C7iSSBUr.mjs → CPERtDRX.mjs} +5 -5
  24. package/dist/es/chunk/{VAdRxe-1.mjs → Cbhe4I9Z.mjs} +1 -1
  25. package/dist/es/chunk/{D5259bwd.mjs → CizMbf5K.mjs} +2 -1
  26. package/dist/es/chunk/CsLIbnzG.mjs +64 -0
  27. package/dist/es/chunk/{Ce9ApjrT.mjs → Cu6erWl4.mjs} +4 -4
  28. package/dist/es/chunk/{VCrtRnxt.mjs → D0LB3gF-.mjs} +7 -7
  29. package/dist/es/chunk/{D3DXeVfC.mjs → DFOLES4O.mjs} +60 -16
  30. package/dist/es/chunk/{E_WRn0OP.mjs → DRoyW749.mjs} +58 -264
  31. package/dist/es/chunk/{D389hx_T.mjs → DTLPXrjb.mjs} +1 -1
  32. package/dist/es/chunk/{DZACQ9LT.mjs → DXPWe_a5.mjs} +2 -2
  33. package/dist/es/chunk/{BWcCXRRK.mjs → DZD-YnCt.mjs} +4 -4
  34. package/dist/es/chunk/{BdDihk0t.mjs → DaCDeO95.mjs} +591 -562
  35. package/dist/es/chunk/{CZ4ggqDE.mjs → DihosKp1.mjs} +6 -6
  36. package/dist/es/chunk/{aibQ9WSZ.mjs → Dk6Bx0KT.mjs} +1 -1
  37. package/dist/es/chunk/{CyxEcbcy.mjs → DouIsSPi.mjs} +1 -1
  38. package/dist/es/chunk/{HSv8BL8o.mjs → DrgvuOYH.mjs} +2 -1
  39. package/dist/es/chunk/{DhhdKtyu.mjs → DwKWIlzw.mjs} +9 -8
  40. package/dist/es/chunk/{BX-Ogf7p.mjs → FHvLvzEB.mjs} +23 -23
  41. package/dist/es/chunk/{CMABHk8B.mjs → HAog8AWU.mjs} +22 -22
  42. package/dist/es/chunk/{Spa-JKB4.mjs → NQBKROII.mjs} +127 -2
  43. package/dist/es/chunk/{BAtns-Mc.mjs → OEa4tYPF.mjs} +1 -1
  44. package/dist/es/chunk/{JCIyOUEY.mjs → XwSiBVsA.mjs} +3 -2
  45. package/dist/es/chunk/{CaTfZePA.mjs → axpwSky6.mjs} +5 -5
  46. package/dist/es/chunk/{DMHNh_tw.mjs → cPBw23yt.mjs} +3 -3
  47. package/dist/es/chunk/{nWBcrYxV.mjs → f0-vIQGp.mjs} +3 -5
  48. package/dist/es/components/awesome-icon/awesome-icon.mjs +4 -6
  49. package/dist/es/components/backbottom/backbottom.mjs +2 -2
  50. package/dist/es/components/button/button.mjs +8 -8
  51. package/dist/es/components/choice/choice.mjs +2 -2
  52. package/dist/es/components/choice-boolean/choice-boolean.mjs +1 -1
  53. package/dist/es/components/config-provider/config-provider.mjs +1 -1
  54. package/dist/es/components/config-provider/config-provider2.mjs +1 -1
  55. package/dist/es/components/cropper/cropper.mjs +150 -15
  56. package/dist/es/components/currency/currency.mjs +6 -6
  57. package/dist/es/components/daterange-picker/daterange-picker.mjs +25 -23
  58. package/dist/es/components/dialog/dialog.mjs +11 -12
  59. package/dist/es/components/dialog-camera-upload/dialog-camera-upload.mjs +20 -23
  60. package/dist/es/components/dialog-map-point/dialog-map-point.mjs +8 -13
  61. package/dist/es/components/dialog-upload-images/dialog-upload-images.mjs +12 -16
  62. package/dist/es/components/drag-verify/components/image.vue.d.ts +54 -0
  63. package/dist/es/components/drag-verify/components/text.vue.d.ts +22 -0
  64. package/dist/es/components/drag-verify/drag-verify.d.ts +22 -0
  65. package/dist/es/components/drag-verify/drag-verify.mjs +475 -0
  66. package/dist/es/components/drag-verify/drag-verify.vue.d.ts +123 -0
  67. package/dist/es/components/drag-verify/helper.d.ts +2 -0
  68. package/dist/es/components/drag-verify/index.css +117 -0
  69. package/dist/es/components/drag-verify/index.d.ts +4 -0
  70. package/dist/es/components/drag-verify/index.mjs +6 -0
  71. package/dist/es/components/drawer/drawer.mjs +12 -13
  72. package/dist/es/components/easy-pagination/easy-pagination.mjs +4 -4
  73. package/dist/es/components/el-icon/el-icon.mjs +2 -2
  74. package/dist/es/components/flag/flag.mjs +1 -1
  75. package/dist/es/components/icon/icon.mjs +2 -2
  76. package/dist/es/components/icon/icon2.mjs +1 -1
  77. package/dist/es/components/image/image.mjs +5 -5
  78. package/dist/es/components/input/input.mjs +4 -4
  79. package/dist/es/components/input-number/input-number.mjs +5 -5
  80. package/dist/es/components/pca-picker/pca-picker.mjs +21 -23
  81. package/dist/es/components/qr-code/qr-code.mjs +1 -1
  82. package/dist/es/components/screenfull/screenfull.mjs +5 -5
  83. package/dist/es/components/select/select.mjs +7 -7
  84. package/dist/es/components/single-player/single-player.mjs +16 -16
  85. package/dist/es/components/svg-icon/svg-icon.mjs +2 -2
  86. package/dist/es/components/switch/switch.mjs +2 -2
  87. package/dist/es/components/sync-scroll-container/sync-scroll-container.mjs +3 -3
  88. package/dist/es/components/tags/tags.mjs +9 -9
  89. package/dist/es/components/text-ellipsis/text-ellipsis.mjs +4 -4
  90. package/dist/es/components/thousand-input/thousand-input.mjs +4 -4
  91. package/dist/es/components/tinymce/index.css +1 -1
  92. package/dist/es/components/tinymce/tinymce.mjs +7 -10
  93. package/dist/es/components/tree-picker/tree-picker.mjs +11 -12
  94. package/dist/es/components/upload-file/upload-file.mjs +6 -9
  95. package/dist/es/index.d.ts +1 -0
  96. package/dist/es/index.mjs +26 -24
  97. package/dist/es/use/useSmallScreen/index.mjs +1 -1
  98. package/dist/global.d.ts +1 -0
  99. package/dist/index.css +118 -1
  100. package/package.json +3 -6
  101. package/dist/es/chunk/BAGoDD49.mjs +0 -36
  102. package/dist/es/chunk/CD98REcR.mjs +0 -666
  103. package/dist/es/chunk/CEClY-_T.mjs +0 -445
  104. package/dist/es/chunk/Fo0dZYnz.mjs +0 -128
  105. package/dist/es/chunk/O-uhUKF4.mjs +0 -43
  106. package/dist/es/chunk/qY9OvNHY.mjs +0 -283
  107. package/dist/es/components/cdn-tag.vue.d.ts +0 -5
  108. package/dist/es/components/document.vue.d.ts +0 -14
  109. package/dist/es/components/example-wrapper.vue.d.ts +0 -19
@@ -1,75 +1,242 @@
1
- import { a as getAugmentedNamespace, c as commonjsGlobal, g as getDefaultExportFromCjs } from './BAGoDD49.mjs';
2
- import { i as isObjectLike, b as baseGetTag } from './Fo0dZYnz.mjs';
3
- import { b as baseUnary, n as nodeUtil } from './O-uhUKF4.mjs';
4
-
5
- /** `Object#toString` result references. */
6
- var dateTag = '[object Date]';
1
+ const isClient = typeof window !== "undefined";
2
+ const defaultWindow = isClient ? window : void 0;
3
+
4
+ const baseCdnUrl = {
5
+ jsdelivr: "//cdn.jsdelivr.net/npm",
6
+ // jsdelivr.net
7
+ defaultBase: defaultWindow?.vc?.cdn?.host || "//cdn.staticfile.org",
8
+ localCDN: defaultWindow?.vc?.cdn?.path || "/local-cdn"
9
+ };
10
+ const cdnMapping = {
11
+ // 全屏
12
+ screenfull: (version = "5.2.0") => ({
13
+ version,
14
+ instance: () => defaultWindow && defaultWindow.screenfull,
15
+ source: {
16
+ jsdelivr: { js: [`${baseCdnUrl.jsdelivr}/screenfull@${version}`] },
17
+ defaultBase: { js: [`${baseCdnUrl.defaultBase}/screenfull.js/${version}/screenfull.min.js`] },
18
+ localCDN: { js: [`${baseCdnUrl.localCDN}/screenfull/${version}/screenfull.min.js`] }
19
+ }
20
+ }),
21
+ // 复制黏贴
22
+ clipboard: (version = "2.0.8") => ({
23
+ version,
24
+ instance: () => defaultWindow && defaultWindow.ClipboardJS,
25
+ source: {
26
+ jsdelivr: { js: [`${baseCdnUrl.jsdelivr}/clipboard@${version}`] },
27
+ defaultBase: { js: [`${baseCdnUrl.defaultBase}/clipboard.js/${version}/clipboard.min.js`] },
28
+ localCDN: { js: [`${baseCdnUrl.localCDN}/clipboard/${version}/clipboard.min.js`] }
29
+ }
30
+ }),
31
+ // 富文本编辑器
32
+ tinymce: (version = "5.8.1") => ({
33
+ version,
34
+ instance: () => defaultWindow && defaultWindow.tinyMCE,
35
+ source: {
36
+ jsdelivr: { js: [`${baseCdnUrl.jsdelivr}/tinymce@${version}`] },
37
+ defaultBase: { js: [`${baseCdnUrl.defaultBase}/tinymce/${version}/tinymce.min.js`] },
38
+ localCDN: { js: [`${baseCdnUrl.localCDN}/tinymce/${version}/tinymce.min.js`] }
39
+ }
40
+ }),
41
+ // 二维码生成
42
+ QRCode: (version = "1.5.1") => ({
43
+ version,
44
+ instance: () => defaultWindow && defaultWindow.QRCode,
45
+ source: {
46
+ jsdelivr: { js: [`${baseCdnUrl.jsdelivr}/qrcode@${version}/build/qrcode.min.js`] },
47
+ defaultBase: { js: [`${baseCdnUrl.defaultBase}/qrcodejs/${version}/qrcode.min.js`] },
48
+ localCDN: { js: [`${baseCdnUrl.localCDN}/qrcode/${version}/qrcode.min.js`] }
49
+ }
50
+ }),
51
+ // 千分位
52
+ cleave: (version = "1.6.0") => ({
53
+ version,
54
+ instance: () => defaultWindow && defaultWindow.Cleave,
55
+ source: {
56
+ jsdelivr: { js: [`${baseCdnUrl.jsdelivr}/cleave.js@${version}`] },
57
+ defaultBase: { js: [`${baseCdnUrl.defaultBase}/cleave.js/${version}/cleave.min.js`] },
58
+ localCDN: { js: [`${baseCdnUrl.localCDN}/cleave/${version}/cleave.min.js`] }
59
+ }
60
+ }),
61
+ // fontawesome 全量css版本
62
+ fontawesomeCss: (version = "6.1.2") => ({
63
+ version,
64
+ instance: () => window,
65
+ source: {
66
+ jsdelivr: { js: [], css: [`${baseCdnUrl.jsdelivr}/@fortawesome/fontawesome-free@${version}/css/all.min.css`] },
67
+ defaultBase: { js: [], css: [`${baseCdnUrl.defaultBase}/font-awesome/${version}/css/all.min.css`] },
68
+ localCDN: { js: [], css: [`${baseCdnUrl.localCDN}/font-awesome/${version}/css/all.min.css`] }
69
+ }
70
+ }),
71
+ // fontawesome 全量js版本
72
+ fontawesomeJs: (version = "6.1.2") => ({
73
+ version,
74
+ instance: () => window,
75
+ source: {
76
+ jsdelivr: { js: [`${baseCdnUrl.jsdelivr}/@fortawesome/fontawesome-free@${version}/js/all.min.js`] },
77
+ defaultBase: { js: [`${baseCdnUrl.defaultBase}/font-awesome/${version}/js/all.min.js`] },
78
+ localCDN: { js: [`${baseCdnUrl.localCDN}/font-awesome/${version}/js/all.min.js`] }
79
+ }
80
+ }),
81
+ cropper: (version = "1.5.12") => ({
82
+ version,
83
+ instance: () => defaultWindow && defaultWindow.Cropper,
84
+ source: {
85
+ jsdelivr: { js: [`${baseCdnUrl.jsdelivr}/cropperjs@${version}`], css: [`${baseCdnUrl.jsdelivr}/cropperjs@${version}/dist/cropper.min.css`] },
86
+ defaultBase: { js: [`${baseCdnUrl.defaultBase}/cropperjs/${version}/cropper.min.js`], css: [`${baseCdnUrl.defaultBase}/cropperjs/${version}/cropper.min.css`] },
87
+ localCDN: { js: [`${baseCdnUrl.localCDN}/cropperjs/${version}/cropper.min.js`], css: [`${baseCdnUrl.localCDN}/cropperjs/${version}/cropper.min.css`] }
88
+ }
89
+ }),
90
+ // flagIcons
91
+ flagIcons: (version = "6.6.6") => ({
92
+ version,
93
+ instance: () => window,
94
+ source: {
95
+ jsdelivr: { js: [], css: [`${baseCdnUrl.jsdelivr}/flag-icons@${version}/css/flag-icons.min.css`] },
96
+ defaultBase: { js: [], css: [`${baseCdnUrl.defaultBase}/flag-icons/${version}/css/flag-icons.min.css`] },
97
+ localCDN: { js: [], css: [`${baseCdnUrl.localCDN}/flag-icons/${version}/css/flag-icons.min.css`] }
98
+ }
99
+ })
100
+ };
101
+ function cdnSource(name, version) {
102
+ const cdnName = defaultWindow?.vc?.cdn?.name || "jsdelivr";
103
+ const resource = cdnMapping[name];
104
+ if (!resource) {
105
+ const defaultResource = {
106
+ instance: () => ({}),
107
+ js: [`${baseCdnUrl.defaultBase}/${cdnName}.js/${version}/${cdnName}.min.js`],
108
+ css: [`${baseCdnUrl.defaultBase}/${cdnName}/${version}/${cdnName}.min.css`]
109
+ };
110
+ return defaultResource;
111
+ }
112
+ const item = resource(version);
113
+ return Object.assign({ instance: void 0, js: [], css: [], version: "" }, { ...item.source[cdnName], instance: item.instance, version: item.version });
114
+ }
7
115
 
8
- /**
9
- * The base implementation of `_.isDate` without Node.js optimizations.
10
- *
11
- * @private
12
- * @param {*} value The value to check.
13
- * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
14
- */
15
- function baseIsDate(value) {
16
- return isObjectLike(value) && baseGetTag(value) == dateTag;
116
+ const FLAG_LOADEED = "yes";
117
+ function isScriptLoaded(url) {
118
+ const script = url && document.querySelector(`script[src="${url}"]`);
119
+ return !!(script && script.dataset.loader === FLAG_LOADEED);
120
+ }
121
+ function getScript(url) {
122
+ const script = url && document.querySelector(`script[src="${url}"]`);
123
+ return script && !script.dataset.loader ? script : null;
124
+ }
125
+ const isCssLoaded = (url) => !!(url && document.querySelector(`link[href="${url}"]`));
126
+ function loadScriptSingle(url) {
127
+ return new Promise((resolve, reject) => {
128
+ if (isScriptLoaded(url)) {
129
+ resolve(true);
130
+ } else {
131
+ const myScript = getScript(url);
132
+ if (!myScript) {
133
+ const head = document.getElementsByTagName("head")[0];
134
+ const script = document.createElement("script");
135
+ script.type = "text/javascript";
136
+ script.src = url;
137
+ script.onload = () => {
138
+ script.dataset.loaded = FLAG_LOADEED;
139
+ resolve(true);
140
+ };
141
+ script.onerror = () => {
142
+ head.removeChild(script);
143
+ reject(new Error("load failed"));
144
+ };
145
+ head.appendChild(script);
146
+ } else {
147
+ const timeout = 1e4;
148
+ const interval = 10;
149
+ let times = 0;
150
+ const timer = setInterval(() => {
151
+ times += interval;
152
+ if (times >= timeout) {
153
+ clearInterval(timer);
154
+ reject(new Error("time out!"));
155
+ }
156
+ if (myScript.dataset.loaded === FLAG_LOADEED) {
157
+ clearInterval(timer);
158
+ resolve(true);
159
+ }
160
+ }, interval);
161
+ }
162
+ }
163
+ });
164
+ }
165
+ async function loadScript(urls, options = { sequence: true }) {
166
+ if (options.sequence) {
167
+ try {
168
+ for (let i = 0; i < urls.length; i += 1) {
169
+ await loadScriptSingle(urls[i]);
170
+ }
171
+ return Promise.resolve(true);
172
+ } catch (e) {
173
+ return Promise.reject(e);
174
+ }
175
+ }
176
+ return Promise.all(urls.map((url) => loadScriptSingle(url)));
17
177
  }
178
+ function loadCss(urls) {
179
+ const head = document.getElementsByTagName("head")[0];
180
+ urls.filter((url) => !isCssLoaded(url)).forEach((url) => {
181
+ const link = document.createElement("link");
182
+ link.type = "text/css";
183
+ link.rel = "stylesheet";
184
+ link.href = url;
185
+ head.appendChild(link);
186
+ });
187
+ }
188
+ function loadCdnSingle(name, version) {
189
+ const { js = [], css, instance } = cdnSource(name, version) || {};
190
+ Array.isArray(css) && css.length > 0 && loadCss(css);
191
+ return new Promise((resolve, reject) => {
192
+ loadScript(js).then(() => resolve(instance?.())).catch(() => reject(new Error(`加载 ${name} 失败`)));
193
+ });
194
+ }
195
+ const loadCdn = (names) => Promise.all(names.map((name) => loadCdnSingle(name)));
196
+ const index$1 = {
197
+ loadScriptSingle,
198
+ loadScript,
199
+ loadCss,
200
+ loadCdnSingle,
201
+ loadCdn,
202
+ baseCdnUrl,
203
+ cdnMapping,
204
+ cdnSource
205
+ };
18
206
 
19
- /* Node.js helper references. */
20
- var nodeIsDate = nodeUtil && nodeUtil.isDate;
207
+ var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
21
208
 
22
- /**
23
- * Checks if `value` is classified as a `Date` object.
24
- *
25
- * @static
26
- * @memberOf _
27
- * @since 0.1.0
28
- * @category Lang
29
- * @param {*} value The value to check.
30
- * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
31
- * @example
32
- *
33
- * _.isDate(new Date);
34
- * // => true
35
- *
36
- * _.isDate('Mon April 23 2012');
37
- * // => false
38
- */
39
- var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;
40
-
41
- /** `Object#toString` result references. */
42
- var numberTag = '[object Number]';
209
+ function getDefaultExportFromCjs (x) {
210
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
211
+ }
43
212
 
44
- /**
45
- * Checks if `value` is classified as a `Number` primitive or object.
46
- *
47
- * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
48
- * classified as numbers, use the `_.isFinite` method.
49
- *
50
- * @static
51
- * @memberOf _
52
- * @since 0.1.0
53
- * @category Lang
54
- * @param {*} value The value to check.
55
- * @returns {boolean} Returns `true` if `value` is a number, else `false`.
56
- * @example
57
- *
58
- * _.isNumber(3);
59
- * // => true
60
- *
61
- * _.isNumber(Number.MIN_VALUE);
62
- * // => true
63
- *
64
- * _.isNumber(Infinity);
65
- * // => true
66
- *
67
- * _.isNumber('3');
68
- * // => false
69
- */
70
- function isNumber(value) {
71
- return typeof value == 'number' ||
72
- (isObjectLike(value) && baseGetTag(value) == numberTag);
213
+ function getAugmentedNamespace(n) {
214
+ if (Object.prototype.hasOwnProperty.call(n, '__esModule')) return n;
215
+ var f = n.default;
216
+ if (typeof f == "function") {
217
+ var a = function a () {
218
+ var isInstance = false;
219
+ try {
220
+ isInstance = this instanceof a;
221
+ } catch {}
222
+ if (isInstance) {
223
+ return Reflect.construct(f, arguments, this.constructor);
224
+ }
225
+ return f.apply(this, arguments);
226
+ };
227
+ a.prototype = f.prototype;
228
+ } else a = {};
229
+ Object.defineProperty(a, '__esModule', {value: true});
230
+ Object.keys(n).forEach(function (k) {
231
+ var d = Object.getOwnPropertyDescriptor(n, k);
232
+ Object.defineProperty(a, k, d.get ? d : {
233
+ enumerable: true,
234
+ get: function () {
235
+ return n[k];
236
+ }
237
+ });
238
+ });
239
+ return a;
73
240
  }
74
241
 
75
242
  var aes$1 = {exports: {}};
@@ -83,8 +250,8 @@ var core$1 = {exports: {}};
83
250
  const __viteBrowserExternal = {};
84
251
 
85
252
  const __viteBrowserExternal$1 = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
86
- __proto__: null,
87
- default: __viteBrowserExternal
253
+ __proto__: null,
254
+ default: __viteBrowserExternal
88
255
  }, Symbol.toStringTag, { value: 'Module' }));
89
256
 
90
257
  const require$$0 = /*@__PURE__*/getAugmentedNamespace(__viteBrowserExternal$1);
@@ -1121,7 +1288,7 @@ function requireMd5 () {
1121
1288
  var M_offset_14 = M[offset + 14];
1122
1289
  var M_offset_15 = M[offset + 15];
1123
1290
 
1124
- // Working varialbes
1291
+ // Working variables
1125
1292
  var a = H[0];
1126
1293
  var b = H[1];
1127
1294
  var c = H[2];
@@ -2545,14 +2712,19 @@ function requireCipherCore () {
2545
2712
  * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);
2546
2713
  * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');
2547
2714
  */
2548
- execute: function (password, keySize, ivSize, salt) {
2715
+ execute: function (password, keySize, ivSize, salt, hasher) {
2549
2716
  // Generate random salt
2550
2717
  if (!salt) {
2551
2718
  salt = WordArray.random(64/8);
2552
2719
  }
2553
2720
 
2554
2721
  // Derive key and IV
2555
- var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);
2722
+ if (!hasher) {
2723
+ var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);
2724
+ } else {
2725
+ var key = EvpKDF.create({ keySize: keySize + ivSize, hasher: hasher }).compute(password, salt);
2726
+ }
2727
+
2556
2728
 
2557
2729
  // Separate key and IV
2558
2730
  var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);
@@ -2599,7 +2771,7 @@ function requireCipherCore () {
2599
2771
  cfg = this.cfg.extend(cfg);
2600
2772
 
2601
2773
  // Derive key and other params
2602
- var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);
2774
+ var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher);
2603
2775
 
2604
2776
  // Add IV to config
2605
2777
  cfg.iv = derivedParams.iv;
@@ -2638,7 +2810,7 @@ function requireCipherCore () {
2638
2810
  ciphertext = this._parse(ciphertext, cfg.format);
2639
2811
 
2640
2812
  // Derive key and other params
2641
- var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);
2813
+ var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher);
2642
2814
 
2643
2815
  // Add IV to config
2644
2816
  cfg.iv = derivedParams.iv;
@@ -2925,496 +3097,353 @@ function requireEncUtf8 () {
2925
3097
  var encUtf8Exports = requireEncUtf8();
2926
3098
  const encUtf8 = /*@__PURE__*/getDefaultExportFromCjs(encUtf8Exports);
2927
3099
 
2928
- const defaultImageOption = {
2929
- format: 'image/png',
2930
- quality: 1,
2931
- };
2932
- // canvas转dataURL,todo:测试
2933
- const canvasToDataURL = (canvas, option) => {
2934
- const myOption = { ...defaultImageOption, ...option };
2935
- return canvas.toDataURL(myOption.format, myOption.quality);
2936
- };
2937
- // img转canvas,可以是dataurl/src,todo:测试
2938
- const imageToCanvas = (data) => new Promise((resolve, reject) => {
2939
- const canvas = document.createElement('CANVAS');
2940
- const ctx = canvas.getContext('2d');
2941
- const img = new Image();
2942
- img.onload = () => {
2943
- if (!ctx) {
2944
- return;
2945
- }
2946
- canvas.width = img.width;
2947
- canvas.height = img.height;
2948
- ctx.drawImage(img, 0, 0);
2949
- resolve(canvas);
2950
- };
2951
- img.onerror = () => {
2952
- reject(new Error('图片加载错误'));
2953
- };
2954
- img.src = data;
2955
- });
2956
- // canvas转image,todo:测试
2957
- const canvasToImage = (canvas, option) => {
2958
- const img = new Image();
2959
- img.src = canvasToDataURL(canvas, option);
2960
- return img;
2961
- };
2962
- // File/Blob对象转DataURL,todo:测试
2963
- const fileOrBlobToDataURL = (obj) => new Promise((resolve, reject) => {
2964
- const file = new FileReader();
2965
- file.readAsDataURL(obj);
2966
- file.onload = e => {
2967
- if (e.target && e.target.result) {
2968
- resolve(e.target.result);
2969
- }
2970
- else {
2971
- reject(new Error('文件加载失败'));
2972
- }
2973
- };
2974
- file.onerror = () => {
2975
- reject(new Error('文件加载错误'));
2976
- };
2977
- });
2978
- const dataURLtoUint8Array = (dataurl) => {
2979
- const arr = dataurl.split(',');
2980
- const match = arr[0].match(/:(.*?);/);
2981
- if (!match) {
2982
- throw new Error('dataURL数据错误');
2983
- }
2984
- const mime = match[1];
2985
- const bstr = atob(arr[1]);
2986
- let n = bstr.length;
2987
- const u8arr = new Uint8Array(n);
2988
- while (n--) {
2989
- u8arr[n] = bstr.charCodeAt(n);
2990
- }
2991
- return { uint8Array: u8arr, type: mime };
2992
- };
2993
- // DataURL转Blob对象,todo:测试
2994
- const dataURLToBlob = (dataurl) => {
2995
- const data = dataURLtoUint8Array(dataurl);
2996
- return new Blob([data.uint8Array], { type: data.type });
2997
- };
2998
- // DataURL转File对象,todo:测试
2999
- const dataURLToFile = (dataurl, fileName) => {
3000
- const data = dataURLtoUint8Array(dataurl);
3001
- return new File([data.uint8Array], fileName, { type: data.type });
3002
- };
3003
- const blobToFile = (blob, fileName) => new File([blob], fileName, { type: blob.type, lastModified: Date.now() });
3004
- // Blob转image,todo:测试
3005
- const blobToImage = (blob) => new Promise((resolve, reject) => {
3006
- fileOrBlobToDataURL(blob).then(dataurl => {
3007
- const img = new Image();
3008
- img.src = dataurl;
3009
- resolve(img);
3010
- }).then(e => reject(e));
3011
- });
3012
- // image转Blob,todo:测试
3013
- const imageToBlob = (data) => new Promise((resolve, reject) => {
3014
- imageToCanvas(data).then(canvas => {
3015
- resolve(dataURLToBlob(canvasToDataURL(canvas)));
3016
- }).catch(e => reject(e));
3017
- });
3018
- // Blob图片转canvas,todo:测试
3019
- const blobToCanvas = (blob) => new Promise((resolve, reject) => {
3020
- fileOrBlobToDataURL(blob).then(dataurl => {
3021
- imageToCanvas(dataurl)
3022
- .then(canvas => resolve(canvas))
3023
- .catch(e => reject(e));
3024
- }).catch(e => reject(e));
3025
- });
3026
- // canvas图片转Blob,todo:测试
3027
- const canvasToBlob = (canvas) => dataURLToBlob(canvasToDataURL(canvas));
3028
- // image(url/dataurl)转dataURL,todo:测试
3029
- const imageToDataURL = (data) => new Promise((resolve, reject) => {
3030
- imageToCanvas(data)
3031
- .then(canvas => resolve(canvasToDataURL(canvas)))
3032
- .catch(e => reject(e));
3033
- });
3034
- // dataURL转image,todo:测试
3035
- const dataURLToImage = (dataurl) => {
3036
- const img = new Image();
3037
- img.src = dataurl;
3038
- return img;
3039
- };
3040
- // 字符串转ArrayBuffer,todo:测试
3041
- const stringToArrayBuffer = (s) => {
3042
- const buf = new ArrayBuffer(s.length);
3043
- const view = new Uint8Array(buf);
3044
- for (let i = 0; i !== s.length; i += 1) {
3045
- view[i] = s.charCodeAt(i) & 0xFF;
3046
- }
3047
- return buf;
3048
- };
3049
- var file = {
3050
- canvasToDataURL,
3051
- imageToCanvas,
3052
- canvasToImage,
3053
- fileOrBlobToDataURL,
3054
- dataURLtoUint8Array,
3055
- dataURLToBlob,
3056
- dataURLToFile,
3057
- blobToImage,
3058
- imageToBlob,
3059
- blobToCanvas,
3060
- blobToFile,
3061
- canvasToBlob,
3062
- imageToDataURL,
3063
- dataURLToImage,
3064
- stringToArrayBuffer,
3065
- };
3100
+ /** Detect free variable `global` from Node.js. */
3101
+ var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
3066
3102
 
3067
- const isClient = typeof window !== 'undefined';
3068
- const defaultWindow = isClient ? window : undefined;
3069
-
3070
- const SECRET_KEY = 'THIS_IS_SECRET';
3071
- // 带有效期的localStorage
3072
- // 删除指定的localStorge
3073
- function remove(key, option) {
3074
- const { instance = localStorage } = option || {};
3075
- instance.removeItem(key);
3076
- }
3077
- // 设置localStorge
3078
- function set(key, value, option) {
3079
- const { expires, encrypt, secret, instance = localStorage } = option || {};
3080
- let type = 'undefined';
3081
- isNumber(expires) && (type = 'number');
3082
- isDate(expires) && (type = 'date');
3083
- const createAt = new Date().getTime();
3084
- const val = encrypt ? AES.encrypt(JSON.stringify(value), secret || SECRET_KEY).toString() : value;
3085
- const item = {
3086
- val,
3087
- type,
3088
- createAt,
3089
- encrypt: !!encrypt,
3090
- };
3091
- const handle = {
3092
- date: () => { item.expires = new Date(expires).getTime(); },
3093
- number: () => { item.expires = expires ? +expires : 99999; },
3094
- };
3095
- handle[type] && handle[type]();
3096
- instance.setItem(key, JSON.stringify(item));
3097
- }
3098
- // 获取localStorge
3099
- function get(key, option) {
3100
- const { secret, instance = localStorage } = option || {};
3101
- const val = instance.getItem(key);
3102
- if (val === null) {
3103
- return undefined;
3104
- }
3105
- const item = JSON.parse(val); // 未做类型转换
3106
- let result = undefined;
3107
- const handle = {
3108
- date() {
3109
- if (new Date() > new Date(item.expires)) { // 过期
3110
- remove(key);
3111
- result = undefined;
3112
- }
3113
- else {
3114
- result = item.val;
3115
- }
3116
- },
3117
- number() {
3118
- const ss = (new Date().getTime() - item.createAt) / 1000;
3119
- if (ss > +item.expires) { // 过期
3120
- remove(key);
3121
- result = undefined;
3122
- }
3123
- else {
3124
- result = item.val;
3125
- }
3126
- },
3127
- undefined() {
3128
- result = item.val;
3129
- },
3130
- };
3131
- handle[item.type] && handle[item.type]();
3132
- if (!result) {
3133
- return undefined;
3134
- }
3135
- try {
3136
- result = item.encrypt ? JSON.parse(AES.decrypt(result, secret || SECRET_KEY).toString(encUtf8)) : result;
3137
- }
3138
- catch (err) {
3139
- console.warn(err);
3140
- result = undefined;
3141
- }
3142
- return result;
3143
- }
3144
- const info = () => {
3145
- const count = (instance) => {
3146
- let size = 0;
3147
- for (const item in instance) {
3148
- if (Object.prototype.hasOwnProperty.call(instance, item)) {
3149
- size += instance.getItem(item)?.length || 0;
3150
- }
3151
- }
3152
- return `${(size / 1024).toFixed(2)} KB`;
3153
- };
3154
- const totalSpace = () => new Promise(resolve => {
3155
- let test = '0123456789';
3156
- do {
3157
- test += test;
3158
- } while (test.length < 10240);
3159
- let sum = test;
3160
- const timer = setInterval(() => {
3161
- sum += test;
3162
- try {
3163
- if (defaultWindow) {
3164
- defaultWindow.localStorage.removeItem('test-storage-space');
3165
- defaultWindow.localStorage.setItem('test-storage-space', sum);
3166
- }
3167
- }
3168
- catch {
3169
- resolve(`${sum.length / 1024} KB`);
3170
- clearInterval(timer);
3171
- }
3172
- }, 0);
3173
- });
3174
- return {
3175
- sessionSpace: count(sessionStorage),
3176
- localSpace: count(localStorage),
3177
- totalSpace,
3178
- };
3179
- };
3180
- var storage = {
3181
- set,
3182
- get,
3183
- remove,
3184
- info,
3185
- };
3103
+ /** Detect free variable `self`. */
3104
+ var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
3186
3105
 
3187
- const baseCdnUrl = {
3188
- jsdelivr: '//cdn.jsdelivr.net/npm',
3189
- defaultBase: defaultWindow ? (defaultWindow.h_utils?.cdn?.host || '//cdn.staticfile.org') : '',
3190
- localCDN: defaultWindow ? (defaultWindow.h_utils?.cdn?.path || '/local-cdn') : '',
3191
- };
3192
- const cdnMapping = {
3193
- // 全屏
3194
- screenfull: (version = '5.2.0') => ({
3195
- version,
3196
- instance: () => defaultWindow ? defaultWindow.screenfull : undefined,
3197
- source: {
3198
- jsdelivr: { js: [`${baseCdnUrl.jsdelivr}/screenfull@${version}`] },
3199
- defaultBase: { js: [`${baseCdnUrl.defaultBase}/screenfull.js/${version}/screenfull.min.js`] },
3200
- localCDN: { js: [`${baseCdnUrl.localCDN}/screenfull/${version}/screenfull.min.js`] },
3201
- },
3202
- }),
3203
- // 复制黏贴
3204
- clipboard: (version = '2.0.8') => ({
3205
- version,
3206
- instance: () => defaultWindow ? defaultWindow.ClipboardJS : undefined,
3207
- source: {
3208
- jsdelivr: { js: [`${baseCdnUrl.jsdelivr}/clipboard@${version}`] },
3209
- defaultBase: { js: [`${baseCdnUrl.defaultBase}/clipboard.js/${version}/clipboard.min.js`] },
3210
- localCDN: { js: [`${baseCdnUrl.localCDN}/clipboard/${version}/clipboard.min.js`] },
3211
- },
3212
- }),
3213
- // 富文本编辑器
3214
- tinymce: (version = '5.8.1') => ({
3215
- version,
3216
- instance: () => defaultWindow ? defaultWindow.tinyMCE : undefined,
3217
- source: {
3218
- jsdelivr: { js: [`${baseCdnUrl.jsdelivr}/tinymce@${version}`] },
3219
- defaultBase: { js: [`${baseCdnUrl.defaultBase}/tinymce/${version}/tinymce.min.js`] },
3220
- localCDN: { js: [`${baseCdnUrl.localCDN}/tinymce/${version}/tinymce.min.js`] },
3221
- },
3222
- }),
3223
- // 二维码生成
3224
- qrcodeGe: (version = '1.4.4') => ({
3225
- version,
3226
- instance: () => defaultWindow ? defaultWindow.qrcode : undefined,
3227
- source: {
3228
- jsdelivr: { js: [`${baseCdnUrl.jsdelivr}/qrcode-generator@${version}`] },
3229
- defaultBase: { js: [`${baseCdnUrl.defaultBase}/qrcode-generator/${version}/qrcode.min.js`] },
3230
- localCDN: { js: [`${baseCdnUrl.localCDN}/qrcode-generator/${version}/qrcode.min.js`] },
3231
- },
3232
- }),
3233
- // 二维码生成
3234
- QRCode: (version = '1.5.1') => ({
3235
- version,
3236
- instance: () => defaultWindow ? defaultWindow.QRCode : undefined,
3237
- source: {
3238
- jsdelivr: { js: [`${baseCdnUrl.jsdelivr}/qrcode@${version}/build/qrcode.min.js`] },
3239
- defaultBase: { js: [`${baseCdnUrl.defaultBase}/qrcodejs/${version}/qrcode.min.js`] },
3240
- localCDN: { js: [`${baseCdnUrl.localCDN}/qrcode/${version}/qrcode.min.js`] },
3241
- },
3242
- }),
3243
- // 千分位
3244
- cleave: (version = '1.6.0') => ({
3245
- version,
3246
- instance: () => defaultWindow ? defaultWindow.Cleave : undefined,
3247
- source: {
3248
- jsdelivr: { js: [`${baseCdnUrl.jsdelivr}/cleave.js@${version}`] },
3249
- defaultBase: { js: [`${baseCdnUrl.defaultBase}/cleave.js/${version}/cleave.min.js`] },
3250
- localCDN: { js: [`${baseCdnUrl.localCDN}/cleave/${version}/cleave.min.js`] },
3251
- },
3252
- }),
3253
- // fontawesome 全量css版本
3254
- fontawesomeCss: (version = '6.1.2') => ({
3255
- version,
3256
- instance: () => defaultWindow,
3257
- source: {
3258
- jsdelivr: { js: [], css: [`${baseCdnUrl.jsdelivr}/@fortawesome/fontawesome-free@${version}/css/all.min.css`] },
3259
- defaultBase: { js: [], css: [`${baseCdnUrl.defaultBase}/font-awesome/${version}/css/all.min.css`] },
3260
- localCDN: { js: [], css: [`${baseCdnUrl.localCDN}/font-awesome/${version}/css/all.min.css`] },
3261
- },
3262
- }),
3263
- // fontawesome 全量js版本
3264
- fontawesomeJs: (version = '6.1.2') => ({
3265
- version,
3266
- instance: () => defaultWindow,
3267
- source: {
3268
- jsdelivr: { js: [`${baseCdnUrl.jsdelivr}/@fortawesome/fontawesome-free@${version}/js/all.min.js`] },
3269
- defaultBase: { js: [`${baseCdnUrl.defaultBase}/font-awesome/${version}/js/all.min.js`] },
3270
- localCDN: { js: [`${baseCdnUrl.localCDN}/font-awesome/${version}/js/all.min.js`] },
3271
- },
3272
- }),
3273
- cropper: (version = '1.5.12') => ({
3274
- version,
3275
- instance: () => defaultWindow ? defaultWindow.Cropper : undefined,
3276
- source: {
3277
- jsdelivr: { js: [`${baseCdnUrl.jsdelivr}/cropperjs@${version}`], css: [`${baseCdnUrl.jsdelivr}/cropperjs@${version}/dist/cropper.min.css`] },
3278
- defaultBase: { js: [`${baseCdnUrl.defaultBase}/cropperjs/${version}/cropper.min.js`], css: [`${baseCdnUrl.defaultBase}/cropperjs/${version}/cropper.min.css`] },
3279
- localCDN: { js: [`${baseCdnUrl.localCDN}/cropperjs/${version}/cropper.min.js`], css: [`${baseCdnUrl.localCDN}/cropperjs/${version}/cropper.min.css`] },
3280
- },
3281
- }),
3282
- // flagIcons
3283
- flagIcons: (version = '6.6.6') => ({
3284
- version,
3285
- instance: () => defaultWindow,
3286
- source: {
3287
- jsdelivr: { js: [], css: [`${baseCdnUrl.jsdelivr}/flag-icons@${version}/css/flag-icons.min.css`] },
3288
- defaultBase: { js: [], css: [`${baseCdnUrl.defaultBase}/flag-icons/${version}/css/flag-icons.min.css`] },
3289
- localCDN: { js: [], css: [`${baseCdnUrl.localCDN}/flag-icons/${version}/css/flag-icons.min.css`] },
3290
- },
3291
- }),
3292
- };
3293
- const cdnSource = (name, version) => {
3294
- if (!defaultWindow) {
3295
- return;
3296
- }
3297
- const cdnName = (window.h_utils?.cdn?.name || 'jsdelivr');
3298
- const resource = cdnMapping[name];
3299
- if (!resource) {
3300
- const defaultResource = {
3301
- instance: () => ({}),
3302
- js: [`${baseCdnUrl.defaultBase}/${cdnName}.js/${version}/${cdnName}.min.js`],
3303
- css: [`${baseCdnUrl.defaultBase}/${cdnName}/${version}/${cdnName}.min.css`],
3304
- };
3305
- return defaultResource;
3306
- }
3307
- const item = resource(version);
3308
- return Object.assign({ instance: undefined, js: [], css: [], version: '' }, { ...item.source[cdnName], instance: item.instance, version: item.version });
3309
- };
3106
+ /** Used as a reference to the global object. */
3107
+ var root = freeGlobal || freeSelf || Function('return this')();
3108
+
3109
+ /** Built-in value references. */
3110
+ var Symbol$1 = root.Symbol;
3111
+
3112
+ /** Used for built-in method references. */
3113
+ var objectProto$1 = Object.prototype;
3114
+
3115
+ /** Used to check objects for own properties. */
3116
+ var hasOwnProperty = objectProto$1.hasOwnProperty;
3117
+
3118
+ /**
3119
+ * Used to resolve the
3120
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
3121
+ * of values.
3122
+ */
3123
+ var nativeObjectToString$1 = objectProto$1.toString;
3124
+
3125
+ /** Built-in value references. */
3126
+ var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined;
3127
+
3128
+ /**
3129
+ * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
3130
+ *
3131
+ * @private
3132
+ * @param {*} value The value to query.
3133
+ * @returns {string} Returns the raw `toStringTag`.
3134
+ */
3135
+ function getRawTag(value) {
3136
+ var isOwn = hasOwnProperty.call(value, symToStringTag$1),
3137
+ tag = value[symToStringTag$1];
3138
+
3139
+ try {
3140
+ value[symToStringTag$1] = undefined;
3141
+ var unmasked = true;
3142
+ } catch (e) {}
3143
+
3144
+ var result = nativeObjectToString$1.call(value);
3145
+ if (unmasked) {
3146
+ if (isOwn) {
3147
+ value[symToStringTag$1] = tag;
3148
+ } else {
3149
+ delete value[symToStringTag$1];
3150
+ }
3151
+ }
3152
+ return result;
3153
+ }
3154
+
3155
+ /** Used for built-in method references. */
3156
+ var objectProto = Object.prototype;
3157
+
3158
+ /**
3159
+ * Used to resolve the
3160
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
3161
+ * of values.
3162
+ */
3163
+ var nativeObjectToString = objectProto.toString;
3164
+
3165
+ /**
3166
+ * Converts `value` to a string using `Object.prototype.toString`.
3167
+ *
3168
+ * @private
3169
+ * @param {*} value The value to convert.
3170
+ * @returns {string} Returns the converted string.
3171
+ */
3172
+ function objectToString(value) {
3173
+ return nativeObjectToString.call(value);
3174
+ }
3175
+
3176
+ /** `Object#toString` result references. */
3177
+ var nullTag = '[object Null]',
3178
+ undefinedTag = '[object Undefined]';
3179
+
3180
+ /** Built-in value references. */
3181
+ var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined;
3182
+
3183
+ /**
3184
+ * The base implementation of `getTag` without fallbacks for buggy environments.
3185
+ *
3186
+ * @private
3187
+ * @param {*} value The value to query.
3188
+ * @returns {string} Returns the `toStringTag`.
3189
+ */
3190
+ function baseGetTag(value) {
3191
+ if (value == null) {
3192
+ return value === undefined ? undefinedTag : nullTag;
3193
+ }
3194
+ return (symToStringTag && symToStringTag in Object(value))
3195
+ ? getRawTag(value)
3196
+ : objectToString(value);
3197
+ }
3198
+
3199
+ /**
3200
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
3201
+ * and has a `typeof` result of "object".
3202
+ *
3203
+ * @static
3204
+ * @memberOf _
3205
+ * @since 4.0.0
3206
+ * @category Lang
3207
+ * @param {*} value The value to check.
3208
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
3209
+ * @example
3210
+ *
3211
+ * _.isObjectLike({});
3212
+ * // => true
3213
+ *
3214
+ * _.isObjectLike([1, 2, 3]);
3215
+ * // => true
3216
+ *
3217
+ * _.isObjectLike(_.noop);
3218
+ * // => false
3219
+ *
3220
+ * _.isObjectLike(null);
3221
+ * // => false
3222
+ */
3223
+ function isObjectLike(value) {
3224
+ return value != null && typeof value == 'object';
3225
+ }
3226
+
3227
+ /**
3228
+ * The base implementation of `_.unary` without support for storing metadata.
3229
+ *
3230
+ * @private
3231
+ * @param {Function} func The function to cap arguments for.
3232
+ * @returns {Function} Returns the new capped function.
3233
+ */
3234
+ function baseUnary(func) {
3235
+ return function(value) {
3236
+ return func(value);
3237
+ };
3238
+ }
3239
+
3240
+ /** Detect free variable `exports`. */
3241
+ var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
3242
+
3243
+ /** Detect free variable `module`. */
3244
+ var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
3245
+
3246
+ /** Detect the popular CommonJS extension `module.exports`. */
3247
+ var moduleExports = freeModule && freeModule.exports === freeExports;
3248
+
3249
+ /** Detect free variable `process` from Node.js. */
3250
+ var freeProcess = moduleExports && freeGlobal.process;
3251
+
3252
+ /** Used to access faster Node.js helpers. */
3253
+ var nodeUtil = (function() {
3254
+ try {
3255
+ // Use `util.types` for Node.js 10+.
3256
+ var types = freeModule && freeModule.require && freeModule.require('util').types;
3257
+
3258
+ if (types) {
3259
+ return types;
3260
+ }
3261
+
3262
+ // Legacy `process.binding('util')` for Node.js < 10.
3263
+ return freeProcess && freeProcess.binding && freeProcess.binding('util');
3264
+ } catch (e) {}
3265
+ }());
3266
+
3267
+ /** `Object#toString` result references. */
3268
+ var dateTag = '[object Date]';
3269
+
3270
+ /**
3271
+ * The base implementation of `_.isDate` without Node.js optimizations.
3272
+ *
3273
+ * @private
3274
+ * @param {*} value The value to check.
3275
+ * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
3276
+ */
3277
+ function baseIsDate(value) {
3278
+ return isObjectLike(value) && baseGetTag(value) == dateTag;
3279
+ }
3280
+
3281
+ /* Node.js helper references. */
3282
+ var nodeIsDate = nodeUtil && nodeUtil.isDate;
3283
+
3284
+ /**
3285
+ * Checks if `value` is classified as a `Date` object.
3286
+ *
3287
+ * @static
3288
+ * @memberOf _
3289
+ * @since 0.1.0
3290
+ * @category Lang
3291
+ * @param {*} value The value to check.
3292
+ * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
3293
+ * @example
3294
+ *
3295
+ * _.isDate(new Date);
3296
+ * // => true
3297
+ *
3298
+ * _.isDate('Mon April 23 2012');
3299
+ * // => false
3300
+ */
3301
+ var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;
3310
3302
 
3311
- // 动态加载js文件和css文件
3312
- const FLAG_LOADEED = 'yes';
3313
- // 指定url的js是否已加载
3314
- const isScriptLoaded = (url) => {
3315
- const script = url && document.querySelector(`script[src="${url}"]`);
3316
- return !!(script && script.dataset.loader === FLAG_LOADEED);
3317
- };
3318
- // 获取指定url正在加载中的的js,如还未加载返回null
3319
- const getScript = (url) => {
3320
- const script = url && document.querySelector(`script[src="${url}"]`);
3321
- return script && !script.dataset.loader ? script : null;
3322
- };
3323
- // 指定url的css是否已加载
3324
- const isCssLoaded = (url) => !!(url && document.querySelector(`link[href="${url}"]`));
3325
- // 加载单个js
3326
- const loadScriptSingle = (url) => new Promise((resolve, reject) => {
3327
- // 如果已经加载,直接返回
3328
- if (isScriptLoaded(url)) {
3329
- resolve(true);
3330
- }
3331
- else {
3332
- const myScript = getScript(url);
3333
- // (非)多个程序同时加载同一个cdn资源
3334
- if (!myScript) {
3335
- const head = document.getElementsByTagName('head')[0];
3336
- const script = document.createElement('script');
3337
- script.type = 'text/javascript';
3338
- script.src = url;
3339
- script.onload = () => {
3340
- script.dataset.loaded = FLAG_LOADEED;
3341
- resolve(true);
3342
- };
3343
- // 加载失败删除标签,并返回reject
3344
- script.onerror = () => {
3345
- head.removeChild(script);
3346
- reject(new Error('load failed'));
3347
- };
3348
- head.appendChild(script);
3349
- }
3350
- else { // 多个程序同时加载同一个cdn资源,则用计时器检测loader状态
3351
- const timeout = 10000; // 检测超时上限
3352
- const interval = 10; // 检测频率
3353
- let times = 0; // 已用时
3354
- const timer = setInterval(() => {
3355
- times += interval;
3356
- // 加载超时
3357
- if (times >= timeout) {
3358
- clearInterval(timer);
3359
- reject(new Error('time out!'));
3360
- }
3361
- if (myScript.dataset.loaded === FLAG_LOADEED) {
3362
- clearInterval(timer);
3363
- resolve(true);
3364
- }
3365
- }, interval);
3366
- }
3367
- }
3368
- });
3369
- // 加载js
3370
- const loadScript = async (urls, options = { sequence: true }) => {
3371
- // 按顺序加载
3372
- if (options.sequence) {
3373
- try {
3374
- for (let i = 0; i < urls.length; i += 1) {
3375
- await loadScriptSingle(urls[i]);
3376
- }
3377
- return Promise.resolve(true);
3378
- }
3379
- catch (e) {
3380
- return Promise.reject(e);
3381
- }
3382
- }
3383
- return Promise.all(urls.map(url => loadScriptSingle(url)));
3384
- };
3385
- // 加载css
3386
- const loadCss = (urls) => {
3387
- const head = document.getElementsByTagName('head')[0];
3388
- urls.filter(url => !isCssLoaded(url))
3389
- .forEach(url => {
3390
- const link = document.createElement('link');
3391
- link.type = 'text/css';
3392
- link.rel = 'stylesheet';
3393
- link.href = url;
3394
- head.appendChild(link);
3395
- });
3396
- };
3397
- // 按库名加载cdn资源
3398
- const loadCdnSingle = (name, version) => {
3399
- const { js = [], css, instance } = cdnSource(name, version) || {};
3400
- Array.isArray(css) && css.length > 0 && loadCss(css);
3401
- return new Promise((resolve, reject) => {
3402
- loadScript(js)
3403
- .then(() => resolve(instance?.()))
3404
- .catch(() => reject(new Error(`加载 ${name} 失败`)));
3405
- });
3406
- };
3407
- // 按库名批量加载cdn资源
3408
- const loadCdn = (names) => Promise.all(names.map(name => loadCdnSingle(name)));
3409
- var index = {
3410
- loadScriptSingle,
3411
- loadScript,
3412
- loadCss,
3413
- loadCdnSingle,
3414
- loadCdn,
3415
- baseCdnUrl,
3416
- cdnMapping,
3417
- cdnSource,
3303
+ /** `Object#toString` result references. */
3304
+ var numberTag = '[object Number]';
3305
+
3306
+ /**
3307
+ * Checks if `value` is classified as a `Number` primitive or object.
3308
+ *
3309
+ * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
3310
+ * classified as numbers, use the `_.isFinite` method.
3311
+ *
3312
+ * @static
3313
+ * @memberOf _
3314
+ * @since 0.1.0
3315
+ * @category Lang
3316
+ * @param {*} value The value to check.
3317
+ * @returns {boolean} Returns `true` if `value` is a number, else `false`.
3318
+ * @example
3319
+ *
3320
+ * _.isNumber(3);
3321
+ * // => true
3322
+ *
3323
+ * _.isNumber(Number.MIN_VALUE);
3324
+ * // => true
3325
+ *
3326
+ * _.isNumber(Infinity);
3327
+ * // => true
3328
+ *
3329
+ * _.isNumber('3');
3330
+ * // => false
3331
+ */
3332
+ function isNumber(value) {
3333
+ return typeof value == 'number' ||
3334
+ (isObjectLike(value) && baseGetTag(value) == numberTag);
3335
+ }
3336
+
3337
+ const SECRET_KEY = "THIS_IS_SECRET";
3338
+ function remove(key, option) {
3339
+ const { instance = localStorage } = option || {};
3340
+ instance.removeItem(key);
3341
+ }
3342
+ function set(key, value, option) {
3343
+ const { expires, encrypt, secret, instance = localStorage } = option || {};
3344
+ let type = "undefined";
3345
+ isNumber(expires) && (type = "number");
3346
+ isDate(expires) && (type = "date");
3347
+ const createAt = (/* @__PURE__ */ new Date()).getTime();
3348
+ const val = encrypt ? AES.encrypt(JSON.stringify(value), secret || SECRET_KEY).toString() : value;
3349
+ const item = {
3350
+ val,
3351
+ type,
3352
+ createAt,
3353
+ encrypt: !!encrypt
3354
+ };
3355
+ const handle = {
3356
+ date: () => {
3357
+ item.expires = new Date(expires).getTime();
3358
+ },
3359
+ number: () => {
3360
+ item.expires = expires ? +expires : 99999;
3361
+ }
3362
+ };
3363
+ handle[type] && handle[type]();
3364
+ instance.setItem(key, JSON.stringify(item));
3365
+ }
3366
+ function get(key, option) {
3367
+ const { secret, instance = localStorage } = option || {};
3368
+ const val = instance.getItem(key);
3369
+ if (val === null) {
3370
+ return void 0;
3371
+ }
3372
+ const item = JSON.parse(val);
3373
+ let result;
3374
+ const handle = {
3375
+ date() {
3376
+ if (/* @__PURE__ */ new Date() > new Date(item.expires)) {
3377
+ remove(key);
3378
+ result = void 0;
3379
+ } else {
3380
+ result = item.val;
3381
+ }
3382
+ },
3383
+ number() {
3384
+ const ss = ((/* @__PURE__ */ new Date()).getTime() - item.createAt) / 1e3;
3385
+ if (ss > +item.expires) {
3386
+ remove(key);
3387
+ result = void 0;
3388
+ } else {
3389
+ result = item.val;
3390
+ }
3391
+ },
3392
+ undefined() {
3393
+ result = item.val;
3394
+ }
3395
+ };
3396
+ handle[item.type] && handle[item.type]();
3397
+ if (!result) {
3398
+ return void 0;
3399
+ }
3400
+ try {
3401
+ result = item.encrypt ? JSON.parse(AES.decrypt(result, secret || SECRET_KEY).toString(encUtf8)) : result;
3402
+ } catch (err) {
3403
+ console.warn(err);
3404
+ result = void 0;
3405
+ }
3406
+ return result;
3407
+ }
3408
+ function info() {
3409
+ const count = (instance) => {
3410
+ let size = 0;
3411
+ for (const item in instance) {
3412
+ if (Object.prototype.hasOwnProperty.call(instance, item)) {
3413
+ size += instance.getItem(item)?.length || 0;
3414
+ }
3415
+ }
3416
+ return `${(size / 1024).toFixed(2)} KB`;
3417
+ };
3418
+ const remainingSpace = (storage = localStorage) => new Promise((resolve) => {
3419
+ const STORAGE_TEST_KEY = "test-storage-space";
3420
+ let test = "0123456789";
3421
+ do {
3422
+ test += test;
3423
+ } while (test.length < 10240);
3424
+ let sum = test;
3425
+ const timer = setInterval(() => {
3426
+ sum += test;
3427
+ try {
3428
+ storage.removeItem(STORAGE_TEST_KEY);
3429
+ storage.setItem(STORAGE_TEST_KEY, sum);
3430
+ } catch {
3431
+ resolve(`${sum.length / 1024} KB`);
3432
+ clearInterval(timer);
3433
+ }
3434
+ }, 0);
3435
+ });
3436
+ return {
3437
+ sessionSpace: count(sessionStorage),
3438
+ localSpace: count(localStorage),
3439
+ remainingSpace
3440
+ };
3441
+ }
3442
+ const index = {
3443
+ set,
3444
+ get,
3445
+ remove,
3446
+ info
3418
3447
  };
3419
3448
 
3420
- export { defaultWindow as d, file as f, index as i, storage as s };
3449
+ export { index as a, index$1 as i };