@gx-design-vue/pro-utils 0.1.4 → 0.2.0-alpha.1
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 +73 -2
- package/dist/array/index.d.ts +5 -0
- package/dist/array/index.js +6 -0
- package/dist/array/slice.d.ts +11 -0
- package/dist/array/slice.js +29 -0
- package/dist/array/sort.d.ts +41 -0
- package/dist/array/sort.js +65 -0
- package/dist/array/tree.d.ts +83 -0
- package/dist/array/tree.js +157 -0
- package/dist/array/unique.d.ts +12 -0
- package/dist/array/unique.js +14 -0
- package/dist/base64/index.d.ts +26 -0
- package/dist/base64/index.js +106 -0
- package/dist/class/index.d.ts +2 -0
- package/dist/class/index.js +3 -0
- package/dist/class/prefix.d.ts +25 -0
- package/dist/class/prefix.js +15 -0
- package/dist/clone/cloneDeep.d.ts +30 -0
- package/dist/clone/cloneDeep.js +35 -0
- package/dist/clone/cloneDeepWith.d.ts +14 -0
- package/dist/clone/cloneDeepWith.js +150 -0
- package/dist/clone/getTag.d.ts +10 -0
- package/dist/clone/getTag.js +13 -0
- package/dist/clone/index.d.ts +3 -0
- package/dist/clone/index.js +4 -0
- package/dist/clone/symbols.d.ts +10 -0
- package/dist/clone/symbols.js +13 -0
- package/dist/clone/tags.d.ts +47 -0
- package/dist/clone/tags.js +48 -0
- package/dist/dom/event.d.ts +21 -0
- package/dist/dom/event.js +26 -0
- package/dist/dom/index.d.ts +5 -0
- package/dist/dom/index.js +6 -0
- package/dist/dom/measure.d.ts +19 -0
- package/dist/dom/measure.js +42 -0
- package/dist/dom/raf.d.ts +14 -0
- package/dist/dom/raf.js +44 -0
- package/dist/dom/scroll.d.ts +20 -0
- package/dist/dom/scroll.js +97 -0
- package/dist/file/config.d.ts +13 -0
- package/dist/file/config.js +81 -0
- package/dist/file/convert.d.ts +41 -0
- package/dist/file/convert.js +69 -0
- package/dist/file/index.d.ts +5 -0
- package/dist/file/index.js +6 -0
- package/dist/file/media.d.ts +35 -0
- package/dist/file/media.js +161 -0
- package/dist/file/type.d.ts +25 -0
- package/dist/file/type.js +58 -0
- package/dist/function/copy.d.ts +12 -0
- package/dist/function/copy.js +13 -0
- package/dist/function/getValue.d.ts +12 -0
- package/dist/function/getValue.js +19 -0
- package/dist/function/index.d.ts +5 -0
- package/dist/function/index.js +6 -0
- package/dist/function/object.d.ts +24 -0
- package/dist/function/object.js +33 -0
- package/dist/function/run.d.ts +11 -0
- package/dist/function/run.js +15 -0
- package/dist/index.d.ts +59 -26
- package/dist/index.js +61 -0
- package/dist/is/base64.d.ts +17 -0
- package/dist/is/base64.js +27 -0
- package/dist/is/browser.d.ts +9 -0
- package/dist/is/browser.js +14 -0
- package/dist/is/deepEqual.d.ts +13 -0
- package/dist/is/deepEqual.js +62 -0
- package/dist/is/device.d.ts +21 -0
- package/dist/is/device.js +37 -0
- package/dist/is/equal.d.ts +12 -0
- package/dist/is/equal.js +34 -0
- package/dist/is/img.d.ts +10 -0
- package/dist/is/img.js +13 -0
- package/dist/is/index.d.ts +16 -0
- package/dist/is/index.js +17 -0
- package/dist/is/nil.d.ts +17 -0
- package/dist/is/nil.js +22 -0
- package/dist/is/plainObject.d.ts +17 -0
- package/dist/is/plainObject.js +30 -0
- package/dist/is/primitive.d.ts +10 -0
- package/dist/is/primitive.js +13 -0
- package/dist/is/server.d.ts +9 -0
- package/dist/is/server.js +10 -0
- package/dist/is/type.d.ts +60 -0
- package/dist/is/type.js +84 -0
- package/dist/is/typedArray.d.ts +30 -0
- package/dist/is/typedArray.js +33 -0
- package/dist/is/unsafeProperty.d.ts +10 -0
- package/dist/is/unsafeProperty.js +18 -0
- package/dist/is/url.d.ts +10 -0
- package/dist/is/url.js +20 -0
- package/dist/is/valid.d.ts +17 -0
- package/dist/is/valid.js +23 -0
- package/dist/merge/index.d.ts +19 -5
- package/dist/merge/index.js +42 -0
- package/dist/merge/mergeWith.d.ts +12 -0
- package/dist/merge/mergeWith.js +31 -0
- package/dist/merge/useDeepMege.d.ts +46 -0
- package/dist/merge/useDeepMege.js +56 -0
- package/dist/number/chinese.d.ts +10 -0
- package/dist/number/chinese.js +46 -0
- package/dist/number/format.d.ts +27 -0
- package/dist/number/format.js +72 -0
- package/dist/number/index.d.ts +3 -0
- package/dist/number/index.js +4 -0
- package/dist/object/classNames.d.ts +10 -0
- package/dist/object/classNames.js +30 -0
- package/dist/object/index.d.ts +5 -0
- package/dist/object/index.js +6 -0
- package/dist/object/omitBoolean.d.ts +10 -0
- package/dist/object/omitBoolean.js +13 -0
- package/dist/object/omitUndefined.d.ts +12 -0
- package/dist/object/omitUndefined.js +18 -0
- package/dist/object/omitUndefinedAndEmptyArr.d.ts +10 -0
- package/dist/object/omitUndefinedAndEmptyArr.js +19 -0
- package/dist/pro-utils.esm.js +948 -0
- package/dist/pro-utils.js +1 -0
- package/dist/string/duration.d.ts +10 -0
- package/dist/string/duration.js +25 -0
- package/dist/string/empty.d.ts +14 -0
- package/dist/string/empty.js +26 -0
- package/dist/string/index.d.ts +5 -0
- package/dist/string/index.js +6 -0
- package/dist/string/nanoid.d.ts +9 -0
- package/dist/string/nanoid.js +32 -0
- package/dist/string/uuid.d.ts +34 -0
- package/dist/string/uuid.js +57 -0
- package/dist/table/column.d.ts +27 -0
- package/dist/table/column.js +42 -0
- package/dist/table/index.d.ts +3 -0
- package/dist/table/index.js +4 -0
- package/dist/table/page.d.ts +13 -0
- package/dist/table/page.js +23 -0
- package/dist/typing.d.ts +262 -0
- package/dist/typing.js +1 -0
- package/dist/vue/index.d.ts +2 -0
- package/dist/vue/index.js +3 -0
- package/dist/vue/slots.d.ts +56 -0
- package/dist/vue/slots.js +89 -0
- package/package.json +45 -64
- package/dist/classNames/index.d.ts +0 -2
- package/dist/components/FieldLabel/index.d.ts +0 -77
- package/dist/components/FieldLabel/index.less +0 -107
- package/dist/components/LabelIconTip/index.d.ts +0 -20
- package/dist/components/LabelIconTip/index.less +0 -38
- package/dist/design/ant-design-theme.less +0 -4
- package/dist/design/ant-design-vue.less +0 -1
- package/dist/design/config.less +0 -2
- package/dist/isBrowser/index.d.ts +0 -1
- package/dist/isDeepEqualReact/index.d.ts +0 -1
- package/dist/isServer.d.ts +0 -2
- package/dist/omitBoolean/index.d.ts +0 -6
- package/dist/omitUndefined/index.d.ts +0 -5
- package/dist/pro-utils.es.js +0 -1044
- package/dist/pro-utils.umd.js +0 -1
- package/dist/proUtils.less +0 -4
- package/dist/scroll/easings.d.ts +0 -1
- package/dist/scroll/getScroll.d.ts +0 -2
- package/dist/scroll/index.d.ts +0 -4
- package/dist/scroll/raf.d.ts +0 -9
- package/dist/scroll/scrollTo.d.ts +0 -10
- package/dist/scroll/throttleByAnimationFrame.d.ts +0 -5
- package/dist/slots/index.d.ts +0 -9
- package/dist/style/index.less +0 -2
- package/dist/style.css +0 -1
- package/dist/style.less +0 -3
- package/dist/typings/index.d.ts +0 -30
- package/dist/utils/config.d.ts +0 -8
- package/dist/utils/index.d.ts +0 -208
- package/dist/utils/validate.d.ts +0 -25
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/class/prefix.d.ts
|
|
2
|
+
interface PrefixCls {
|
|
3
|
+
/** 后缀类名 */
|
|
4
|
+
suffixCls?: string;
|
|
5
|
+
/** 自定义前缀 */
|
|
6
|
+
customizePrefixCls?: string;
|
|
7
|
+
/** 是否为 pro 组件 */
|
|
8
|
+
isPor?: boolean;
|
|
9
|
+
/** 类名 */
|
|
10
|
+
className?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 获取前缀类名
|
|
14
|
+
*
|
|
15
|
+
* @param options - 配置选项
|
|
16
|
+
* @returns 完整类名
|
|
17
|
+
*/
|
|
18
|
+
declare function getPrefixCls({
|
|
19
|
+
suffixCls,
|
|
20
|
+
customizePrefixCls,
|
|
21
|
+
isPor,
|
|
22
|
+
className
|
|
23
|
+
}: PrefixCls): string;
|
|
24
|
+
//#endregion
|
|
25
|
+
export { PrefixCls, getPrefixCls };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/class/prefix.ts
|
|
2
|
+
/**
|
|
3
|
+
* 获取前缀类名
|
|
4
|
+
*
|
|
5
|
+
* @param options - 配置选项
|
|
6
|
+
* @returns 完整类名
|
|
7
|
+
*/
|
|
8
|
+
function getPrefixCls({ suffixCls, customizePrefixCls, isPor, className }) {
|
|
9
|
+
const prefixCls = className || (isPor ? "gx-pro" : "gx");
|
|
10
|
+
if (customizePrefixCls) return customizePrefixCls;
|
|
11
|
+
return suffixCls ? `${prefixCls}-${suffixCls}` : prefixCls;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
//#endregion
|
|
15
|
+
export { getPrefixCls };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
//#region src/clone/cloneDeep.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 深度克隆对象
|
|
4
|
+
*
|
|
5
|
+
* @template T - 对象类型
|
|
6
|
+
* @param obj - 要克隆的对象
|
|
7
|
+
* @returns 克隆后的对象
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* // 克隆原始值
|
|
11
|
+
* const num = 29;
|
|
12
|
+
* const clonedNum = cloneDeep(num);
|
|
13
|
+
* console.log(clonedNum); // 29
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* // 克隆数组
|
|
17
|
+
* const arr = [1, 2, 3];
|
|
18
|
+
* const clonedArr = cloneDeep(arr);
|
|
19
|
+
* console.log(clonedArr); // [1, 2, 3]
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* // 克隆嵌套对象
|
|
23
|
+
* const obj = { a: 1, b: { c: 1 } };
|
|
24
|
+
* const clonedObj = cloneDeep(obj);
|
|
25
|
+
* obj.b.c = 2;
|
|
26
|
+
* console.log(clonedObj.b.c); // 1
|
|
27
|
+
*/
|
|
28
|
+
declare function cloneDeep<T>(obj: T): T;
|
|
29
|
+
//#endregion
|
|
30
|
+
export { cloneDeep };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { cloneDeepWithImpl } from "./cloneDeepWith.js";
|
|
2
|
+
|
|
3
|
+
//#region src/clone/cloneDeep.ts
|
|
4
|
+
/**
|
|
5
|
+
* 深度克隆对象
|
|
6
|
+
*
|
|
7
|
+
* @template T - 对象类型
|
|
8
|
+
* @param obj - 要克隆的对象
|
|
9
|
+
* @returns 克隆后的对象
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* // 克隆原始值
|
|
13
|
+
* const num = 29;
|
|
14
|
+
* const clonedNum = cloneDeep(num);
|
|
15
|
+
* console.log(clonedNum); // 29
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* // 克隆数组
|
|
19
|
+
* const arr = [1, 2, 3];
|
|
20
|
+
* const clonedArr = cloneDeep(arr);
|
|
21
|
+
* console.log(clonedArr); // [1, 2, 3]
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* // 克隆嵌套对象
|
|
25
|
+
* const obj = { a: 1, b: { c: 1 } };
|
|
26
|
+
* const clonedObj = cloneDeep(obj);
|
|
27
|
+
* obj.b.c = 2;
|
|
28
|
+
* console.log(clonedObj.b.c); // 1
|
|
29
|
+
*/
|
|
30
|
+
function cloneDeep(obj) {
|
|
31
|
+
return cloneDeepWithImpl(obj, void 0, obj, /* @__PURE__ */ new Map(), void 0);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
//#endregion
|
|
35
|
+
export { cloneDeep };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
//#region src/clone/cloneDeepWith.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 深度克隆对象(带自定义处理)
|
|
4
|
+
*
|
|
5
|
+
* @template T - 对象类型
|
|
6
|
+
* @param obj - 要克隆的对象
|
|
7
|
+
* @param cloneValue - 自定义克隆函数
|
|
8
|
+
* @returns 克隆后的对象
|
|
9
|
+
*/
|
|
10
|
+
declare function cloneDeepWith<T>(obj: T, cloneValue: (value: any, key: PropertyKey | undefined, obj: T, stack: Map<any, any>) => any): T;
|
|
11
|
+
declare function cloneDeepWithImpl<T>(valueToClone: any, keyToClone: PropertyKey | undefined, objectToClone: T, stack?: Map<any, any>, cloneValue?: ((value: any, key: PropertyKey | undefined, obj: T, stack: Map<any, any>) => any) | undefined): T;
|
|
12
|
+
declare function copyProperties<T>(target: any, source: any, objectToClone?: T, stack?: Map<any, any> | undefined, cloneValue?: ((value: any, key: PropertyKey | undefined, obj: T, stack: Map<any, any>) => any) | undefined): void;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { cloneDeepWith, cloneDeepWithImpl, copyProperties };
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { isPrimitive } from "../is/primitive.js";
|
|
2
|
+
import { isTypedArray } from "../is/typedArray.js";
|
|
3
|
+
import "../is/index.js";
|
|
4
|
+
import { getTag } from "./getTag.js";
|
|
5
|
+
import { getSymbols } from "./symbols.js";
|
|
6
|
+
import { argumentsTag, arrayBufferTag, arrayTag, booleanTag, dataViewTag, dateTag, float32ArrayTag, float64ArrayTag, int16ArrayTag, int32ArrayTag, int8ArrayTag, mapTag, numberTag, objectTag, regexpTag, setTag, stringTag, symbolTag, uint16ArrayTag, uint32ArrayTag, uint8ArrayTag, uint8ClampedArrayTag } from "./tags.js";
|
|
7
|
+
|
|
8
|
+
//#region src/clone/cloneDeepWith.ts
|
|
9
|
+
/**
|
|
10
|
+
* 深度克隆对象(带自定义处理)
|
|
11
|
+
*
|
|
12
|
+
* @template T - 对象类型
|
|
13
|
+
* @param obj - 要克隆的对象
|
|
14
|
+
* @param cloneValue - 自定义克隆函数
|
|
15
|
+
* @returns 克隆后的对象
|
|
16
|
+
*/
|
|
17
|
+
function cloneDeepWith(obj, cloneValue) {
|
|
18
|
+
return cloneDeepWithImpl(obj, void 0, obj, /* @__PURE__ */ new Map(), cloneValue);
|
|
19
|
+
}
|
|
20
|
+
function cloneDeepWithImpl(valueToClone, keyToClone, objectToClone, stack = /* @__PURE__ */ new Map(), cloneValue = void 0) {
|
|
21
|
+
const cloned = cloneValue?.(valueToClone, keyToClone, objectToClone, stack);
|
|
22
|
+
if (cloned !== void 0) return cloned;
|
|
23
|
+
if (isPrimitive(valueToClone)) return valueToClone;
|
|
24
|
+
if (stack.has(valueToClone)) return stack.get(valueToClone);
|
|
25
|
+
if (Array.isArray(valueToClone)) {
|
|
26
|
+
const result = Array.from({ length: valueToClone.length });
|
|
27
|
+
stack.set(valueToClone, result);
|
|
28
|
+
for (let i = 0; i < valueToClone.length; i++) result[i] = cloneDeepWithImpl(valueToClone[i], i, objectToClone, stack, cloneValue);
|
|
29
|
+
if (Object.prototype.hasOwnProperty.call(valueToClone, "index")) result.index = valueToClone.index;
|
|
30
|
+
if (Object.prototype.hasOwnProperty.call(valueToClone, "input")) result.input = valueToClone.input;
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
if (valueToClone instanceof Date) return new Date(valueToClone.getTime());
|
|
34
|
+
if (valueToClone instanceof RegExp) {
|
|
35
|
+
const result = new RegExp(valueToClone.source, valueToClone.flags);
|
|
36
|
+
result.lastIndex = valueToClone.lastIndex;
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
if (valueToClone instanceof Map) {
|
|
40
|
+
const result = /* @__PURE__ */ new Map();
|
|
41
|
+
stack.set(valueToClone, result);
|
|
42
|
+
for (const [key, value] of valueToClone) result.set(key, cloneDeepWithImpl(value, key, objectToClone, stack, cloneValue));
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
if (valueToClone instanceof Set) {
|
|
46
|
+
const result = /* @__PURE__ */ new Set();
|
|
47
|
+
stack.set(valueToClone, result);
|
|
48
|
+
for (const value of valueToClone) result.add(cloneDeepWithImpl(value, void 0, objectToClone, stack, cloneValue));
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
if (typeof Buffer !== "undefined" && Buffer.isBuffer(valueToClone)) return valueToClone.subarray();
|
|
52
|
+
if (isTypedArray(valueToClone)) {
|
|
53
|
+
const result = new (Object.getPrototypeOf(valueToClone)).constructor(valueToClone.length);
|
|
54
|
+
stack.set(valueToClone, result);
|
|
55
|
+
for (let i = 0; i < valueToClone.length; i++) result[i] = cloneDeepWithImpl(valueToClone[i], i, objectToClone, stack, cloneValue);
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
if (valueToClone instanceof ArrayBuffer || typeof SharedArrayBuffer !== "undefined" && valueToClone instanceof SharedArrayBuffer) return valueToClone.slice(0);
|
|
59
|
+
if (valueToClone instanceof DataView) {
|
|
60
|
+
const result = new DataView(valueToClone.buffer.slice(0), valueToClone.byteOffset, valueToClone.byteLength);
|
|
61
|
+
stack.set(valueToClone, result);
|
|
62
|
+
copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
if (typeof File !== "undefined" && valueToClone instanceof File) {
|
|
66
|
+
const result = new File([valueToClone], valueToClone.name, { type: valueToClone.type });
|
|
67
|
+
stack.set(valueToClone, result);
|
|
68
|
+
copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
if (typeof Blob !== "undefined" && valueToClone instanceof Blob) {
|
|
72
|
+
const result = new Blob([valueToClone], { type: valueToClone.type });
|
|
73
|
+
stack.set(valueToClone, result);
|
|
74
|
+
copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
if (valueToClone instanceof Error) {
|
|
78
|
+
const result = new valueToClone.constructor();
|
|
79
|
+
stack.set(valueToClone, result);
|
|
80
|
+
result.message = valueToClone.message;
|
|
81
|
+
result.name = valueToClone.name;
|
|
82
|
+
result.stack = valueToClone.stack;
|
|
83
|
+
result.cause = valueToClone.cause;
|
|
84
|
+
copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
if (typeof valueToClone === "boolean") {
|
|
88
|
+
const result = Boolean(valueToClone.valueOf());
|
|
89
|
+
stack.set(valueToClone, result);
|
|
90
|
+
copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
if (typeof valueToClone === "number") {
|
|
94
|
+
const result = Number(valueToClone.valueOf());
|
|
95
|
+
stack.set(valueToClone, result);
|
|
96
|
+
copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
if (typeof valueToClone === "string") {
|
|
100
|
+
const result = String(valueToClone.valueOf());
|
|
101
|
+
stack.set(valueToClone, result);
|
|
102
|
+
copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
if (typeof valueToClone === "object" && isCloneableObject(valueToClone)) {
|
|
106
|
+
const result = Object.create(Object.getPrototypeOf(valueToClone));
|
|
107
|
+
stack.set(valueToClone, result);
|
|
108
|
+
copyProperties(result, valueToClone, objectToClone, stack, cloneValue);
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
return valueToClone;
|
|
112
|
+
}
|
|
113
|
+
function copyProperties(target, source, objectToClone = target, stack, cloneValue) {
|
|
114
|
+
const keys = [...Object.keys(source), ...getSymbols(source)];
|
|
115
|
+
for (let i = 0; i < keys.length; i++) {
|
|
116
|
+
const key = keys[i];
|
|
117
|
+
const descriptor = Object.getOwnPropertyDescriptor(target, key);
|
|
118
|
+
if (descriptor == null || descriptor.writable) target[key] = cloneDeepWithImpl(source[key], key, objectToClone, stack, cloneValue);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function isCloneableObject(object) {
|
|
122
|
+
switch (getTag(object)) {
|
|
123
|
+
case argumentsTag:
|
|
124
|
+
case arrayTag:
|
|
125
|
+
case arrayBufferTag:
|
|
126
|
+
case dataViewTag:
|
|
127
|
+
case booleanTag:
|
|
128
|
+
case dateTag:
|
|
129
|
+
case float32ArrayTag:
|
|
130
|
+
case float64ArrayTag:
|
|
131
|
+
case int8ArrayTag:
|
|
132
|
+
case int16ArrayTag:
|
|
133
|
+
case int32ArrayTag:
|
|
134
|
+
case mapTag:
|
|
135
|
+
case numberTag:
|
|
136
|
+
case objectTag:
|
|
137
|
+
case regexpTag:
|
|
138
|
+
case setTag:
|
|
139
|
+
case stringTag:
|
|
140
|
+
case symbolTag:
|
|
141
|
+
case uint8ArrayTag:
|
|
142
|
+
case uint8ClampedArrayTag:
|
|
143
|
+
case uint16ArrayTag:
|
|
144
|
+
case uint32ArrayTag: return true;
|
|
145
|
+
default: return false;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
//#endregion
|
|
150
|
+
export { cloneDeepWith, cloneDeepWithImpl, copyProperties };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
//#region src/clone/tags.d.ts
|
|
2
|
+
/** 参数标签 */
|
|
3
|
+
declare const argumentsTag = "[object Arguments]";
|
|
4
|
+
/** 数组标签 */
|
|
5
|
+
declare const arrayTag = "[object Array]";
|
|
6
|
+
/** 数组缓冲区标签 */
|
|
7
|
+
declare const arrayBufferTag = "[object ArrayBuffer]";
|
|
8
|
+
/** 布尔标签 */
|
|
9
|
+
declare const booleanTag = "[object Boolean]";
|
|
10
|
+
/** 数据视图标签 */
|
|
11
|
+
declare const dataViewTag = "[object DataView]";
|
|
12
|
+
/** 日期标签 */
|
|
13
|
+
declare const dateTag = "[object Date]";
|
|
14
|
+
/** Float32 数组标签 */
|
|
15
|
+
declare const float32ArrayTag = "[object Float32Array]";
|
|
16
|
+
/** Float64 数组标签 */
|
|
17
|
+
declare const float64ArrayTag = "[object Float64Array]";
|
|
18
|
+
/** Int8 数组标签 */
|
|
19
|
+
declare const int8ArrayTag = "[object Int8Array]";
|
|
20
|
+
/** Int16 数组标签 */
|
|
21
|
+
declare const int16ArrayTag = "[object Int16Array]";
|
|
22
|
+
/** Int32 数组标签 */
|
|
23
|
+
declare const int32ArrayTag = "[object Int32Array]";
|
|
24
|
+
/** Map 标签 */
|
|
25
|
+
declare const mapTag = "[object Map]";
|
|
26
|
+
/** 数字标签 */
|
|
27
|
+
declare const numberTag = "[object Number]";
|
|
28
|
+
/** 对象标签 */
|
|
29
|
+
declare const objectTag = "[object Object]";
|
|
30
|
+
/** 正则标签 */
|
|
31
|
+
declare const regexpTag = "[object RegExp]";
|
|
32
|
+
/** Set 标签 */
|
|
33
|
+
declare const setTag = "[object Set]";
|
|
34
|
+
/** 字符串标签 */
|
|
35
|
+
declare const stringTag = "[object String]";
|
|
36
|
+
/** Symbol 标签 */
|
|
37
|
+
declare const symbolTag = "[object Symbol]";
|
|
38
|
+
/** Uint8 数组标签 */
|
|
39
|
+
declare const uint8ArrayTag = "[object Uint8Array]";
|
|
40
|
+
/** Uint8Clamped 数组标签 */
|
|
41
|
+
declare const uint8ClampedArrayTag = "[object Uint8ClampedArray]";
|
|
42
|
+
/** Uint16 数组标签 */
|
|
43
|
+
declare const uint16ArrayTag = "[object Uint16Array]";
|
|
44
|
+
/** Uint32 数组标签 */
|
|
45
|
+
declare const uint32ArrayTag = "[object Uint32Array]";
|
|
46
|
+
//#endregion
|
|
47
|
+
export { argumentsTag, arrayBufferTag, arrayTag, booleanTag, dataViewTag, dateTag, float32ArrayTag, float64ArrayTag, int16ArrayTag, int32ArrayTag, int8ArrayTag, mapTag, numberTag, objectTag, regexpTag, setTag, stringTag, symbolTag, uint16ArrayTag, uint32ArrayTag, uint8ArrayTag, uint8ClampedArrayTag };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
//#region src/clone/tags.ts
|
|
2
|
+
/** 参数标签 */
|
|
3
|
+
const argumentsTag = "[object Arguments]";
|
|
4
|
+
/** 数组标签 */
|
|
5
|
+
const arrayTag = "[object Array]";
|
|
6
|
+
/** 数组缓冲区标签 */
|
|
7
|
+
const arrayBufferTag = "[object ArrayBuffer]";
|
|
8
|
+
/** 布尔标签 */
|
|
9
|
+
const booleanTag = "[object Boolean]";
|
|
10
|
+
/** 数据视图标签 */
|
|
11
|
+
const dataViewTag = "[object DataView]";
|
|
12
|
+
/** 日期标签 */
|
|
13
|
+
const dateTag = "[object Date]";
|
|
14
|
+
/** Float32 数组标签 */
|
|
15
|
+
const float32ArrayTag = "[object Float32Array]";
|
|
16
|
+
/** Float64 数组标签 */
|
|
17
|
+
const float64ArrayTag = "[object Float64Array]";
|
|
18
|
+
/** Int8 数组标签 */
|
|
19
|
+
const int8ArrayTag = "[object Int8Array]";
|
|
20
|
+
/** Int16 数组标签 */
|
|
21
|
+
const int16ArrayTag = "[object Int16Array]";
|
|
22
|
+
/** Int32 数组标签 */
|
|
23
|
+
const int32ArrayTag = "[object Int32Array]";
|
|
24
|
+
/** Map 标签 */
|
|
25
|
+
const mapTag = "[object Map]";
|
|
26
|
+
/** 数字标签 */
|
|
27
|
+
const numberTag = "[object Number]";
|
|
28
|
+
/** 对象标签 */
|
|
29
|
+
const objectTag = "[object Object]";
|
|
30
|
+
/** 正则标签 */
|
|
31
|
+
const regexpTag = "[object RegExp]";
|
|
32
|
+
/** Set 标签 */
|
|
33
|
+
const setTag = "[object Set]";
|
|
34
|
+
/** 字符串标签 */
|
|
35
|
+
const stringTag = "[object String]";
|
|
36
|
+
/** Symbol 标签 */
|
|
37
|
+
const symbolTag = "[object Symbol]";
|
|
38
|
+
/** Uint8 数组标签 */
|
|
39
|
+
const uint8ArrayTag = "[object Uint8Array]";
|
|
40
|
+
/** Uint8Clamped 数组标签 */
|
|
41
|
+
const uint8ClampedArrayTag = "[object Uint8ClampedArray]";
|
|
42
|
+
/** Uint16 数组标签 */
|
|
43
|
+
const uint16ArrayTag = "[object Uint16Array]";
|
|
44
|
+
/** Uint32 数组标签 */
|
|
45
|
+
const uint32ArrayTag = "[object Uint32Array]";
|
|
46
|
+
|
|
47
|
+
//#endregion
|
|
48
|
+
export { argumentsTag, arrayBufferTag, arrayTag, booleanTag, dataViewTag, dateTag, float32ArrayTag, float64ArrayTag, int16ArrayTag, int32ArrayTag, int8ArrayTag, mapTag, numberTag, objectTag, regexpTag, setTag, stringTag, symbolTag, uint16ArrayTag, uint32ArrayTag, uint8ArrayTag, uint8ClampedArrayTag };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/dom/event.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* 绑定事件
|
|
4
|
+
*
|
|
5
|
+
* @param element - DOM 元素
|
|
6
|
+
* @param event - 事件名
|
|
7
|
+
* @param handler - 事件处理函数
|
|
8
|
+
* @param useCapture - 是否捕获阶段
|
|
9
|
+
*/
|
|
10
|
+
declare function on(element: HTMLElement | Document | Window | null, event: string, handler: EventListenerOrEventListenerObject, useCapture?: boolean): void;
|
|
11
|
+
/**
|
|
12
|
+
* 解绑事件
|
|
13
|
+
*
|
|
14
|
+
* @param element - DOM 元素
|
|
15
|
+
* @param event - 事件名
|
|
16
|
+
* @param handler - 事件处理函数
|
|
17
|
+
* @param useCapture - 是否捕获阶段
|
|
18
|
+
*/
|
|
19
|
+
declare function off(element: HTMLElement | Document | Window | null, event: string, handler: EventListenerOrEventListenerObject, useCapture?: boolean): void;
|
|
20
|
+
//#endregion
|
|
21
|
+
export { off, on };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//#region src/dom/event.ts
|
|
2
|
+
/**
|
|
3
|
+
* 绑定事件
|
|
4
|
+
*
|
|
5
|
+
* @param element - DOM 元素
|
|
6
|
+
* @param event - 事件名
|
|
7
|
+
* @param handler - 事件处理函数
|
|
8
|
+
* @param useCapture - 是否捕获阶段
|
|
9
|
+
*/
|
|
10
|
+
function on(element, event, handler, useCapture = false) {
|
|
11
|
+
if (element && event && handler) element.addEventListener(event, handler, useCapture);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* 解绑事件
|
|
15
|
+
*
|
|
16
|
+
* @param element - DOM 元素
|
|
17
|
+
* @param event - 事件名
|
|
18
|
+
* @param handler - 事件处理函数
|
|
19
|
+
* @param useCapture - 是否捕获阶段
|
|
20
|
+
*/
|
|
21
|
+
function off(element, event, handler, useCapture = false) {
|
|
22
|
+
if (element && event && handler) element.removeEventListener(event, handler, useCapture);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
//#endregion
|
|
26
|
+
export { off, on };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { off, on } from "./event.js";
|
|
2
|
+
import { getTextWidth } from "./measure.js";
|
|
3
|
+
import wrapperRaf from "./raf.js";
|
|
4
|
+
import { ScrollToOptions, easeInOutCubic, getScroll, getScrollContainer, isInContainer, isScroll, isWindow, scrollTo } from "./scroll.js";
|
|
5
|
+
export { ScrollToOptions, easeInOutCubic, getScroll, getScrollContainer, getTextWidth, isInContainer, isScroll, isWindow, off, on, wrapperRaf as raf, scrollTo };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { off, on } from "./event.js";
|
|
2
|
+
import { getTextWidth } from "./measure.js";
|
|
3
|
+
import wrapperRaf from "./raf.js";
|
|
4
|
+
import { easeInOutCubic, getScroll, getScrollContainer, isInContainer, isScroll, isWindow, scrollTo } from "./scroll.js";
|
|
5
|
+
|
|
6
|
+
export { easeInOutCubic, getScroll, getScrollContainer, getTextWidth, isInContainer, isScroll, isWindow, off, on, wrapperRaf as raf, scrollTo };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { CSSProperties } from "vue";
|
|
2
|
+
|
|
3
|
+
//#region src/dom/measure.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* 获取文字宽度或高度
|
|
6
|
+
*
|
|
7
|
+
* @param str - 文字内容
|
|
8
|
+
* @param options - 配置选项
|
|
9
|
+
* @returns 宽度或高度
|
|
10
|
+
*/
|
|
11
|
+
declare function getTextWidth(str: string, options: {
|
|
12
|
+
id?: string;
|
|
13
|
+
type?: 'width' | 'height';
|
|
14
|
+
createName?: string;
|
|
15
|
+
removeAfter?: boolean;
|
|
16
|
+
cssObject?: CSSProperties;
|
|
17
|
+
}): number;
|
|
18
|
+
//#endregion
|
|
19
|
+
export { getTextWidth };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { isBoolean, isObject } from "../is/type.js";
|
|
2
|
+
import "../is/index.js";
|
|
3
|
+
|
|
4
|
+
//#region src/dom/measure.ts
|
|
5
|
+
/**
|
|
6
|
+
* 获取文字宽度或高度
|
|
7
|
+
*
|
|
8
|
+
* @param str - 文字内容
|
|
9
|
+
* @param options - 配置选项
|
|
10
|
+
* @returns 宽度或高度
|
|
11
|
+
*/
|
|
12
|
+
function getTextWidth(str, options) {
|
|
13
|
+
let number = 0;
|
|
14
|
+
const removeAfter = isBoolean(options.removeAfter) ? options.removeAfter : true;
|
|
15
|
+
const targetElId = options.id || "hiddenElement";
|
|
16
|
+
const targetElStyle = {
|
|
17
|
+
opacity: 0,
|
|
18
|
+
visibility: "hidden",
|
|
19
|
+
position: "fixed",
|
|
20
|
+
zIndex: -1,
|
|
21
|
+
top: 0,
|
|
22
|
+
left: 0
|
|
23
|
+
};
|
|
24
|
+
let targetEl = document.querySelector(`#${targetElId}`);
|
|
25
|
+
if (!targetEl) {
|
|
26
|
+
const el = document.createElement("div");
|
|
27
|
+
el.id = targetElId;
|
|
28
|
+
document.body.appendChild(el);
|
|
29
|
+
targetEl = document.querySelector(`#${targetElId}`);
|
|
30
|
+
}
|
|
31
|
+
Object.assign(targetEl.style, targetElStyle);
|
|
32
|
+
const sourceEl = document.createElement(options.createName || "span");
|
|
33
|
+
sourceEl.innerHTML = str;
|
|
34
|
+
if (options.cssObject || isObject(options.cssObject)) Object.assign(sourceEl.style, options.cssObject);
|
|
35
|
+
targetEl.append(sourceEl);
|
|
36
|
+
number = sourceEl.getBoundingClientRect()[options.type || "width"];
|
|
37
|
+
if (removeAfter) targetEl.removeChild(sourceEl);
|
|
38
|
+
return number;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
//#endregion
|
|
42
|
+
export { getTextWidth };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
//#region src/dom/raf.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* requestAnimationFrame 封装
|
|
4
|
+
*
|
|
5
|
+
* @param callback - 回调函数
|
|
6
|
+
* @param times - 执行次数
|
|
7
|
+
* @returns 任务 ID
|
|
8
|
+
*/
|
|
9
|
+
declare function wrapperRaf(callback: () => void, times?: number): number;
|
|
10
|
+
declare namespace wrapperRaf {
|
|
11
|
+
var cancel: (id: number) => void;
|
|
12
|
+
}
|
|
13
|
+
//#endregion
|
|
14
|
+
export { wrapperRaf as default };
|
package/dist/dom/raf.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
//#region src/dom/raf.ts
|
|
2
|
+
let raf = (callback) => setTimeout(callback, 16);
|
|
3
|
+
let caf = (num) => clearTimeout(num);
|
|
4
|
+
if (typeof window !== "undefined" && "requestAnimationFrame" in window) {
|
|
5
|
+
raf = (callback) => window.requestAnimationFrame(callback);
|
|
6
|
+
caf = (handle) => window.cancelAnimationFrame(handle);
|
|
7
|
+
}
|
|
8
|
+
let rafUUID = 0;
|
|
9
|
+
const rafIds = /* @__PURE__ */ new Map();
|
|
10
|
+
function cleanup(id) {
|
|
11
|
+
rafIds.delete(id);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* requestAnimationFrame 封装
|
|
15
|
+
*
|
|
16
|
+
* @param callback - 回调函数
|
|
17
|
+
* @param times - 执行次数
|
|
18
|
+
* @returns 任务 ID
|
|
19
|
+
*/
|
|
20
|
+
function wrapperRaf(callback, times = 1) {
|
|
21
|
+
rafUUID += 1;
|
|
22
|
+
const id = rafUUID;
|
|
23
|
+
function callRef(leftTimes) {
|
|
24
|
+
if (leftTimes === 0) {
|
|
25
|
+
cleanup(id);
|
|
26
|
+
callback();
|
|
27
|
+
} else {
|
|
28
|
+
const realId = raf(() => {
|
|
29
|
+
callRef(leftTimes - 1);
|
|
30
|
+
});
|
|
31
|
+
rafIds.set(id, realId);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
callRef(times);
|
|
35
|
+
return id;
|
|
36
|
+
}
|
|
37
|
+
wrapperRaf.cancel = (id) => {
|
|
38
|
+
const realId = rafIds.get(id);
|
|
39
|
+
cleanup(realId);
|
|
40
|
+
return caf(realId);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
//#endregion
|
|
44
|
+
export { wrapperRaf as default };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Nullable } from "../typing.js";
|
|
2
|
+
|
|
3
|
+
//#region src/dom/scroll.d.ts
|
|
4
|
+
interface ScrollToOptions {
|
|
5
|
+
/** Scroll container, default as window */
|
|
6
|
+
getContainer?: () => HTMLElement | Window | Document;
|
|
7
|
+
/** Scroll end callback */
|
|
8
|
+
callback?: () => any;
|
|
9
|
+
/** Animation duration, default as 450 */
|
|
10
|
+
duration?: number;
|
|
11
|
+
}
|
|
12
|
+
declare function easeInOutCubic(t: number, b: number, c: number, d: number): number;
|
|
13
|
+
declare function isScroll(el: HTMLElement, isVertical?: Nullable<boolean>): RegExpMatchArray;
|
|
14
|
+
declare function getScrollContainer(el: HTMLElement, isVertical?: Nullable<boolean>): (Window & typeof globalThis) | HTMLElement;
|
|
15
|
+
declare function isInContainer(el: HTMLElement, container: HTMLElement): boolean;
|
|
16
|
+
declare function isWindow(obj: any): boolean;
|
|
17
|
+
declare function getScroll(target: HTMLElement | Window | Document | null, top: boolean): number;
|
|
18
|
+
declare function scrollTo(y: number, options?: ScrollToOptions): void;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { ScrollToOptions, easeInOutCubic, getScroll, getScrollContainer, isInContainer, isScroll, isWindow, scrollTo };
|