@hrnec06/util 1.5.3 → 1.6.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/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lib/Disposables.d.ts +14 -0
- package/dist/cjs/lib/Disposables.js +60 -0
- package/dist/cjs/lib/Disposables.js.map +1 -0
- package/dist/cjs/types.d.ts +1 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/Disposables.d.ts +14 -0
- package/dist/esm/lib/Disposables.js +57 -0
- package/dist/esm/lib/Disposables.js.map +1 -0
- package/dist/esm/types.d.ts +1 -0
- package/package.json +1 -1
package/dist/cjs/index.d.ts
CHANGED
package/dist/cjs/index.js
CHANGED
|
@@ -26,5 +26,6 @@ __exportStar(require("./lib/UnitsCalculator.js"), exports);
|
|
|
26
26
|
__exportStar(require("./lib/Listenable.js"), exports);
|
|
27
27
|
__exportStar(require("./lib/AsyncClass.js"), exports);
|
|
28
28
|
__exportStar(require("./lib/Flags.js"), exports);
|
|
29
|
+
__exportStar(require("./lib/Disposables.js"), exports);
|
|
29
30
|
__exportStar(require("./types.js"), exports);
|
|
30
31
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,+CAA6B;AAC7B,8CAA4B;AAC5B,8CAA4B;AAC5B,8CAA4B;AAC5B,4CAA0B;AAC1B,gDAA8B;AAC9B,6CAA2B;AAE3B,2DAAyC;AACzC,sDAAoC;AACpC,sDAAoC;AACpC,iDAA+B;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,+CAA6B;AAC7B,8CAA4B;AAC5B,8CAA4B;AAC5B,8CAA4B;AAC5B,4CAA0B;AAC1B,gDAA8B;AAC9B,6CAA2B;AAE3B,2DAAyC;AACzC,sDAAoC;AACpC,sDAAoC;AACpC,iDAA+B;AAC/B,uDAAqC;AAErC,6CAA2B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface Disposables {
|
|
2
|
+
addEventListener: <TEventName extends keyof WindowEventMap>(element: HTMLElement | Window | Document, name: TEventName, listener: (event: WindowEventMap[TEventName]) => any, options?: boolean | AddEventListenerOptions | undefined) => () => void;
|
|
3
|
+
requestAnimationFrame: (callback: FrameRequestCallback) => () => void;
|
|
4
|
+
nextFrame: (callback: FrameRequestCallback) => () => void;
|
|
5
|
+
setTimeout: (callback: (_: void) => void, delay?: number | undefined) => () => void;
|
|
6
|
+
style: (node: ElementCSSInlineStyle, property: string, value: string) => () => void;
|
|
7
|
+
group: (callback: (d: unknown) => void) => () => void;
|
|
8
|
+
add: (callback: () => void) => () => void;
|
|
9
|
+
dispose: () => void;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* @credit https://github.com/tailwindlabs/headlessui/blob/main/packages/%40headlessui-react/src/utils/disposables.ts
|
|
13
|
+
*/
|
|
14
|
+
export declare function disposables(): Disposables;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.disposables = disposables;
|
|
4
|
+
/**
|
|
5
|
+
* @credit https://github.com/tailwindlabs/headlessui/blob/main/packages/%40headlessui-react/src/utils/disposables.ts
|
|
6
|
+
*/
|
|
7
|
+
function disposables() {
|
|
8
|
+
const _disposables = [];
|
|
9
|
+
const api = {
|
|
10
|
+
addEventListener: (element, name, listener, options) => {
|
|
11
|
+
element.addEventListener(name, listener, options);
|
|
12
|
+
return api.add(() => element.removeEventListener(name, listener, options));
|
|
13
|
+
},
|
|
14
|
+
requestAnimationFrame: (...args) => {
|
|
15
|
+
const raf = requestAnimationFrame(...args);
|
|
16
|
+
return api.add(() => cancelAnimationFrame(raf));
|
|
17
|
+
},
|
|
18
|
+
nextFrame: (...args) => {
|
|
19
|
+
return api.requestAnimationFrame(() => {
|
|
20
|
+
return api.requestAnimationFrame(...args);
|
|
21
|
+
});
|
|
22
|
+
},
|
|
23
|
+
setTimeout: (...args) => {
|
|
24
|
+
const t = setTimeout(...args);
|
|
25
|
+
return api.add(() => clearTimeout(t));
|
|
26
|
+
},
|
|
27
|
+
style: (node, property, value) => {
|
|
28
|
+
const previous = node.style.getPropertyValue(property);
|
|
29
|
+
Object.assign(node.style, { [property]: value });
|
|
30
|
+
return api.add(() => {
|
|
31
|
+
Object.assign(node.style, { [property]: previous });
|
|
32
|
+
});
|
|
33
|
+
},
|
|
34
|
+
group: (callback) => {
|
|
35
|
+
const d = disposables();
|
|
36
|
+
callback(d);
|
|
37
|
+
return api.add(() => d.dispose());
|
|
38
|
+
},
|
|
39
|
+
add: (callback) => {
|
|
40
|
+
if (!_disposables.includes(callback)) {
|
|
41
|
+
_disposables.push(callback);
|
|
42
|
+
}
|
|
43
|
+
return () => {
|
|
44
|
+
const idx = _disposables.indexOf(callback);
|
|
45
|
+
if (idx >= 0) {
|
|
46
|
+
for (let dispose of _disposables.splice(idx, 1)) {
|
|
47
|
+
dispose();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
dispose: () => {
|
|
53
|
+
for (const dispose of _disposables.splice(0)) {
|
|
54
|
+
dispose();
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
return api;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=Disposables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Disposables.js","sourceRoot":"","sources":["../../../src/lib/Disposables.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/types.d.ts
CHANGED
|
@@ -33,4 +33,5 @@ export type TypeOfMap = {
|
|
|
33
33
|
export type ClassInitializer<C extends abstract new (...args: any) => any, Strict extends boolean = true> = Strict extends true ? (new (...params: ConstructorParameters<C>) => InstanceType<C>) : (new (...args: any[]) => InstanceType<C>);
|
|
34
34
|
export declare namespace ReactUtils {
|
|
35
35
|
type SetState<T> = React.Dispatch<React.SetStateAction<T>>;
|
|
36
|
+
type State<T> = [T, SetState<T>];
|
|
36
37
|
}
|
package/dist/esm/index.d.ts
CHANGED
package/dist/esm/index.js
CHANGED
|
@@ -10,5 +10,6 @@ export * from './lib/UnitsCalculator.js';
|
|
|
10
10
|
export * from './lib/Listenable.js';
|
|
11
11
|
export * from './lib/AsyncClass.js';
|
|
12
12
|
export * from './lib/Flags.js';
|
|
13
|
+
export * from './lib/Disposables.js';
|
|
13
14
|
export * from './types.js';
|
|
14
15
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAE3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAE3B,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AAErC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface Disposables {
|
|
2
|
+
addEventListener: <TEventName extends keyof WindowEventMap>(element: HTMLElement | Window | Document, name: TEventName, listener: (event: WindowEventMap[TEventName]) => any, options?: boolean | AddEventListenerOptions | undefined) => () => void;
|
|
3
|
+
requestAnimationFrame: (callback: FrameRequestCallback) => () => void;
|
|
4
|
+
nextFrame: (callback: FrameRequestCallback) => () => void;
|
|
5
|
+
setTimeout: (callback: (_: void) => void, delay?: number | undefined) => () => void;
|
|
6
|
+
style: (node: ElementCSSInlineStyle, property: string, value: string) => () => void;
|
|
7
|
+
group: (callback: (d: unknown) => void) => () => void;
|
|
8
|
+
add: (callback: () => void) => () => void;
|
|
9
|
+
dispose: () => void;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* @credit https://github.com/tailwindlabs/headlessui/blob/main/packages/%40headlessui-react/src/utils/disposables.ts
|
|
13
|
+
*/
|
|
14
|
+
export declare function disposables(): Disposables;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @credit https://github.com/tailwindlabs/headlessui/blob/main/packages/%40headlessui-react/src/utils/disposables.ts
|
|
3
|
+
*/
|
|
4
|
+
export function disposables() {
|
|
5
|
+
const _disposables = [];
|
|
6
|
+
const api = {
|
|
7
|
+
addEventListener: (element, name, listener, options) => {
|
|
8
|
+
element.addEventListener(name, listener, options);
|
|
9
|
+
return api.add(() => element.removeEventListener(name, listener, options));
|
|
10
|
+
},
|
|
11
|
+
requestAnimationFrame: (...args) => {
|
|
12
|
+
const raf = requestAnimationFrame(...args);
|
|
13
|
+
return api.add(() => cancelAnimationFrame(raf));
|
|
14
|
+
},
|
|
15
|
+
nextFrame: (...args) => {
|
|
16
|
+
return api.requestAnimationFrame(() => {
|
|
17
|
+
return api.requestAnimationFrame(...args);
|
|
18
|
+
});
|
|
19
|
+
},
|
|
20
|
+
setTimeout: (...args) => {
|
|
21
|
+
const t = setTimeout(...args);
|
|
22
|
+
return api.add(() => clearTimeout(t));
|
|
23
|
+
},
|
|
24
|
+
style: (node, property, value) => {
|
|
25
|
+
const previous = node.style.getPropertyValue(property);
|
|
26
|
+
Object.assign(node.style, { [property]: value });
|
|
27
|
+
return api.add(() => {
|
|
28
|
+
Object.assign(node.style, { [property]: previous });
|
|
29
|
+
});
|
|
30
|
+
},
|
|
31
|
+
group: (callback) => {
|
|
32
|
+
const d = disposables();
|
|
33
|
+
callback(d);
|
|
34
|
+
return api.add(() => d.dispose());
|
|
35
|
+
},
|
|
36
|
+
add: (callback) => {
|
|
37
|
+
if (!_disposables.includes(callback)) {
|
|
38
|
+
_disposables.push(callback);
|
|
39
|
+
}
|
|
40
|
+
return () => {
|
|
41
|
+
const idx = _disposables.indexOf(callback);
|
|
42
|
+
if (idx >= 0) {
|
|
43
|
+
for (let dispose of _disposables.splice(idx, 1)) {
|
|
44
|
+
dispose();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
dispose: () => {
|
|
50
|
+
for (const dispose of _disposables.splice(0)) {
|
|
51
|
+
dispose();
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
return api;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=Disposables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Disposables.js","sourceRoot":"","sources":["../../../src/lib/Disposables.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -33,4 +33,5 @@ export type TypeOfMap = {
|
|
|
33
33
|
export type ClassInitializer<C extends abstract new (...args: any) => any, Strict extends boolean = true> = Strict extends true ? (new (...params: ConstructorParameters<C>) => InstanceType<C>) : (new (...args: any[]) => InstanceType<C>);
|
|
34
34
|
export declare namespace ReactUtils {
|
|
35
35
|
type SetState<T> = React.Dispatch<React.SetStateAction<T>>;
|
|
36
|
+
type State<T> = [T, SetState<T>];
|
|
36
37
|
}
|