@d-matrix/utils 1.2.5 → 1.2.6
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/algorithm.d.ts +1 -0
- package/dist/algorithm.js +21 -0
- package/dist/clipboard.d.ts +1 -1
- package/dist/clipboard.js +14 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -1
- package/dist/react.d.ts +4 -0
- package/dist/react.js +30 -1
- package/package.json +1 -1
- package/readme.md +16 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const moveMulti: <T extends unknown>(arr: T[], indexes: number[], start: number) => T[];
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
|
3
|
+
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
|
|
4
|
+
to[j] = from[i];
|
|
5
|
+
return to;
|
|
6
|
+
};
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.moveMulti = void 0;
|
|
9
|
+
var removeSymbol = Symbol('Placeholder for removed element');
|
|
10
|
+
var moveMulti = function (arr, indexes, start) {
|
|
11
|
+
var cloned = arr.slice();
|
|
12
|
+
for (var i = 0; i < cloned.length; i++) {
|
|
13
|
+
if (indexes.includes(i)) {
|
|
14
|
+
cloned[i] = removeSymbol;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
var els = arr.filter(function (__, i) { return indexes.includes(i); });
|
|
18
|
+
cloned.splice.apply(cloned, __spreadArray([start, 0], els));
|
|
19
|
+
return cloned.filter(function (v) { return v !== removeSymbol; });
|
|
20
|
+
};
|
|
21
|
+
exports.moveMulti = moveMulti;
|
package/dist/clipboard.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function writeImage(element: HTMLImageElement | null): Promise<unknown>;
|
|
1
|
+
export declare function writeImage(element: HTMLImageElement | null | string): Promise<unknown>;
|
package/dist/clipboard.js
CHANGED
|
@@ -52,11 +52,22 @@ function writeImage(element) {
|
|
|
52
52
|
var img = new Image();
|
|
53
53
|
//浏览器在加载图像时要使用匿名身份验证,以允许跨域资源共享(CORS)。
|
|
54
54
|
img.crossOrigin = 'anonymous';
|
|
55
|
-
|
|
55
|
+
if (typeof element === 'string') {
|
|
56
|
+
img.src = element;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
img.src = element.src;
|
|
60
|
+
}
|
|
56
61
|
img.onload = function () {
|
|
57
62
|
//创建一个画布,赋予画布宽高为图片的原始宽高
|
|
58
|
-
|
|
59
|
-
|
|
63
|
+
if (typeof element === 'string') {
|
|
64
|
+
canvas.width = img.width;
|
|
65
|
+
canvas.height = img.height;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
canvas.width = element.naturalWidth;
|
|
69
|
+
canvas.height = element.naturalHeight;
|
|
70
|
+
}
|
|
60
71
|
//防止有缓存,绘制之前先清除画布
|
|
61
72
|
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
|
|
62
73
|
ctx.drawImage(img, 0, 0);
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -19,9 +19,10 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
19
19
|
return result;
|
|
20
20
|
};
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.types = exports.date = exports.dom = exports.react = exports.clipboard = void 0;
|
|
22
|
+
exports.algorithm = exports.types = exports.date = exports.dom = exports.react = exports.clipboard = void 0;
|
|
23
23
|
exports.clipboard = __importStar(require("./clipboard"));
|
|
24
24
|
exports.react = __importStar(require("./react"));
|
|
25
25
|
exports.dom = __importStar(require("./dom"));
|
|
26
26
|
exports.date = __importStar(require("./date"));
|
|
27
27
|
exports.types = __importStar(require("./types"));
|
|
28
|
+
exports.algorithm = __importStar(require("./algorithm"));
|
package/dist/react.d.ts
CHANGED
|
@@ -7,4 +7,8 @@ declare type ContextMenuTarget = () => Element | Document | undefined | null;
|
|
|
7
7
|
* @param target 默认为 () => document
|
|
8
8
|
*/
|
|
9
9
|
export declare const useDisableContextMenu: (target?: ContextMenuTarget) => void;
|
|
10
|
+
/** 等价与类组件 setState(updater[, callback]) */
|
|
11
|
+
export declare function useStateCallback<T>(initialState: T): [T, (state: T, cb?: (state: T) => void) => void];
|
|
12
|
+
/** 用于判断组件是否挂载 */
|
|
13
|
+
export declare function useMountedRef(): React.MutableRefObject<boolean>;
|
|
10
14
|
export {};
|
package/dist/react.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.useDisableContextMenu = exports.cleanup = exports.render = void 0;
|
|
6
|
+
exports.useMountedRef = exports.useStateCallback = exports.useDisableContextMenu = exports.cleanup = exports.render = void 0;
|
|
7
7
|
var react_1 = require("react");
|
|
8
8
|
var react_dom_1 = __importDefault(require("react-dom"));
|
|
9
9
|
var container;
|
|
@@ -62,3 +62,32 @@ var useDisableContextMenu = function (target) {
|
|
|
62
62
|
}, []);
|
|
63
63
|
};
|
|
64
64
|
exports.useDisableContextMenu = useDisableContextMenu;
|
|
65
|
+
/** 等价与类组件 setState(updater[, callback]) */
|
|
66
|
+
function useStateCallback(initialState) {
|
|
67
|
+
var _a = react_1.useState(initialState), state = _a[0], setState = _a[1];
|
|
68
|
+
var cbRef = react_1.useRef(undefined);
|
|
69
|
+
var setStateCallback = react_1.useCallback(function (state, cb) {
|
|
70
|
+
cbRef.current = cb;
|
|
71
|
+
setState(state);
|
|
72
|
+
}, []);
|
|
73
|
+
react_1.useEffect(function () {
|
|
74
|
+
if (cbRef.current) {
|
|
75
|
+
cbRef.current(state);
|
|
76
|
+
cbRef.current = undefined;
|
|
77
|
+
}
|
|
78
|
+
}, [state]);
|
|
79
|
+
return [state, setStateCallback];
|
|
80
|
+
}
|
|
81
|
+
exports.useStateCallback = useStateCallback;
|
|
82
|
+
/** 用于判断组件是否挂载 */
|
|
83
|
+
function useMountedRef() {
|
|
84
|
+
var mountedRef = react_1.useRef(false);
|
|
85
|
+
react_1.useEffect(function () {
|
|
86
|
+
mountedRef.current = true;
|
|
87
|
+
return function () {
|
|
88
|
+
mountedRef.current = false;
|
|
89
|
+
};
|
|
90
|
+
}, []);
|
|
91
|
+
return mountedRef;
|
|
92
|
+
}
|
|
93
|
+
exports.useMountedRef = useMountedRef;
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -12,10 +12,11 @@ A dozen of utils for Front-End Development
|
|
|
12
12
|
- [dom](#dom)
|
|
13
13
|
- [date](#date)
|
|
14
14
|
- [types](#types)
|
|
15
|
+
- [algorithm]($algorithm)
|
|
15
16
|
|
|
16
17
|
### clipboard
|
|
17
18
|
|
|
18
|
-
- `clipboard.writeImage(element: HTMLImageElement): void`
|
|
19
|
+
- `clipboard.writeImage(element: HTMLImageElement | null | string): void`
|
|
19
20
|
|
|
20
21
|
复制图片到剪贴板。
|
|
21
22
|
|
|
@@ -59,6 +60,14 @@ const TestComp = () => {
|
|
|
59
60
|
}
|
|
60
61
|
```
|
|
61
62
|
|
|
63
|
+
- `useStateCallback<T>(initialState: T): [T, (state: T, cb?: (state: T) => void) => void]`
|
|
64
|
+
|
|
65
|
+
返回值`setState()`函数类似类组件中的`setState(updater[, callback])`,可以在`callback`中获取更新后的`state`
|
|
66
|
+
|
|
67
|
+
- `useMountedRef(): React.MutableRefObject<boolean>`
|
|
68
|
+
|
|
69
|
+
获取当前组件是否已挂载的 Hook
|
|
70
|
+
|
|
62
71
|
### dom
|
|
63
72
|
|
|
64
73
|
- `scrollToTop(element: Element | null | undefined): void`
|
|
@@ -80,6 +89,12 @@ type A = { a: number; b: number; c: number; };
|
|
|
80
89
|
type T0 = WithOptional<A, 'b' | 'c'>; // { a: number; b?: number; c?: number }
|
|
81
90
|
```
|
|
82
91
|
|
|
92
|
+
### algorithm
|
|
93
|
+
|
|
94
|
+
- `moveMulti = <T extends unknown>(arr: T[], indexes: number[], start: number): T[]`
|
|
95
|
+
|
|
96
|
+
移动多个元素到数组中指定的位置,用法,见[测试用例](tests/algorithm.cy.ts)
|
|
97
|
+
|
|
83
98
|
## 测试
|
|
84
99
|
|
|
85
100
|
运行全部组件测试
|