@window-splitter/state 0.6.3 → 0.6.4
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/.turbo/turbo-build.log +1 -1
- package/.turbo/turbo-lint.log +1 -1
- package/CHANGELOG.md +12 -0
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js +2 -2
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/raf.d.ts +12 -0
- package/dist/commonjs/raf.d.ts.map +1 -0
- package/dist/commonjs/raf.js +82 -0
- package/dist/commonjs/raf.js.map +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/raf.d.ts +12 -0
- package/dist/esm/raf.d.ts.map +1 -0
- package/dist/esm/raf.js +78 -0
- package/dist/esm/raf.js.map +1 -0
- package/package.json +3 -4
- package/src/index.ts +1 -1
- package/src/raf.ts +105 -0
package/dist/esm/raf.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
function eachSafely(values, each) {
|
|
3
|
+
values.forEach((value) => {
|
|
4
|
+
try {
|
|
5
|
+
each(value);
|
|
6
|
+
}
|
|
7
|
+
catch (e) {
|
|
8
|
+
// eslint-disable-next-line no-console
|
|
9
|
+
console.error(e);
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
/** The number of pending tasks */
|
|
14
|
+
let pendingCount = 0;
|
|
15
|
+
function makeQueue() {
|
|
16
|
+
let next = new Set();
|
|
17
|
+
let current = next;
|
|
18
|
+
return {
|
|
19
|
+
add(fn) {
|
|
20
|
+
pendingCount += current == next && !next.has(fn) ? 1 : 0;
|
|
21
|
+
next.add(fn);
|
|
22
|
+
},
|
|
23
|
+
delete(fn) {
|
|
24
|
+
pendingCount -= current == next && next.has(fn) ? 1 : 0;
|
|
25
|
+
return next.delete(fn);
|
|
26
|
+
},
|
|
27
|
+
flush(arg) {
|
|
28
|
+
if (current.size) {
|
|
29
|
+
next = new Set();
|
|
30
|
+
pendingCount -= current.size;
|
|
31
|
+
eachSafely(current, (fn) => fn(arg) && next.add(fn));
|
|
32
|
+
pendingCount += next.size;
|
|
33
|
+
current = next;
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const updateQueue = makeQueue();
|
|
39
|
+
const nativeRaf = typeof window != "undefined" ? window.requestAnimationFrame : () => { };
|
|
40
|
+
/**
|
|
41
|
+
* Schedule an update for next frame.
|
|
42
|
+
* Your function can return `true` to repeat next frame.
|
|
43
|
+
*/
|
|
44
|
+
export const raf = (fn) => schedule(fn, updateQueue);
|
|
45
|
+
raf.now =
|
|
46
|
+
typeof performance != "undefined" ? () => performance.now() : Date.now;
|
|
47
|
+
raf.batchedUpdates = (fn) => fn();
|
|
48
|
+
/** The most recent timestamp. */
|
|
49
|
+
let ts = -1;
|
|
50
|
+
function schedule(fn, queue) {
|
|
51
|
+
queue.add(fn);
|
|
52
|
+
start();
|
|
53
|
+
}
|
|
54
|
+
function start() {
|
|
55
|
+
if (ts < 0) {
|
|
56
|
+
ts = 0;
|
|
57
|
+
nativeRaf(loop);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function stop() {
|
|
61
|
+
ts = -1;
|
|
62
|
+
}
|
|
63
|
+
function loop() {
|
|
64
|
+
if (~ts) {
|
|
65
|
+
nativeRaf(loop);
|
|
66
|
+
raf.batchedUpdates(update);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function update() {
|
|
70
|
+
const prevTs = ts;
|
|
71
|
+
ts = raf.now();
|
|
72
|
+
if (!pendingCount) {
|
|
73
|
+
stop();
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
updateQueue.flush(prevTs ? Math.min(64, ts - prevTs) : 16.667);
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=raf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raf.js","sourceRoot":"","sources":["../../src/raf.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\ninterface Eachable<T> {\n forEach(cb: (value: T) => void): void;\n}\n\nfunction eachSafely<T>(values: Eachable<T>, each: (value: T) => void) {\n values.forEach((value) => {\n try {\n each(value);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e as Error);\n }\n });\n}\n\n/** The number of pending tasks */\nlet pendingCount = 0;\n\ninterface Queue<T extends (...args: any[]) => any = (...args: any[]) => any> {\n add: (fn: T) => void;\n delete: (fn: T) => boolean;\n flush: (arg?: any) => void;\n}\n\nfunction makeQueue<T extends (...args: any[]) => any>(): Queue<T> {\n let next = new Set<T>();\n let current = next;\n return {\n add(fn) {\n pendingCount += current == next && !next.has(fn) ? 1 : 0;\n next.add(fn);\n },\n delete(fn) {\n pendingCount -= current == next && next.has(fn) ? 1 : 0;\n return next.delete(fn);\n },\n flush(arg) {\n if (current.size) {\n next = new Set();\n pendingCount -= current.size;\n eachSafely(current, (fn) => fn(arg) && next.add(fn));\n pendingCount += next.size;\n current = next;\n }\n },\n };\n}\n\ntype FrameUpdateFn = (dt: number) => boolean | void;\n\nconst updateQueue = makeQueue<FrameUpdateFn>();\n\nconst nativeRaf =\n typeof window != \"undefined\" ? window.requestAnimationFrame : () => {};\n\n/**\n * Schedule an update for next frame.\n * Your function can return `true` to repeat next frame.\n */\nexport const raf = (fn: FrameUpdateFn) => schedule(fn, updateQueue);\n\nraf.now =\n typeof performance != \"undefined\" ? () => performance.now() : Date.now;\nraf.batchedUpdates = (fn: () => void) => fn();\n\n/** The most recent timestamp. */\nlet ts = -1;\n\nfunction schedule<T extends (...args: any[]) => any>(fn: T, queue: Queue<T>) {\n queue.add(fn);\n start();\n}\n\nfunction start() {\n if (ts < 0) {\n ts = 0;\n nativeRaf(loop);\n }\n}\n\nfunction stop() {\n ts = -1;\n}\n\nfunction loop() {\n if (~ts) {\n nativeRaf(loop);\n raf.batchedUpdates(update);\n }\n}\n\nfunction update() {\n const prevTs = ts;\n ts = raf.now();\n\n if (!pendingCount) {\n stop();\n\n return;\n }\n\n updateQueue.flush(prevTs ? Math.min(64, ts - prevTs) : 16.667);\n}\n"]}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@window-splitter/state",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "0.6.
|
|
5
|
+
"version": "0.6.4",
|
|
6
6
|
"description": "A state machine for a WAI-ARIA compliant window splitter",
|
|
7
7
|
"homepage": "https://react-window-splitter-six.vercel.app",
|
|
8
8
|
"repository": {
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
},
|
|
29
29
|
"license": "MIT",
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"@internal/eslint-config": "0.6.
|
|
31
|
+
"@internal/eslint-config": "0.6.4",
|
|
32
32
|
"@testing-library/react": "^16.0.0",
|
|
33
33
|
"@types/big.js": "^6.2.2",
|
|
34
34
|
"@vitest/browser": "^3.1.2",
|
|
@@ -43,7 +43,6 @@
|
|
|
43
43
|
"vitest": "^3.1.2"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@react-spring/rafz": "^9.7.4",
|
|
47
46
|
"big.js": "^6.2.1"
|
|
48
47
|
},
|
|
49
48
|
"tshy": {
|
|
@@ -77,5 +76,5 @@
|
|
|
77
76
|
"window"
|
|
78
77
|
],
|
|
79
78
|
"types": "./dist/commonjs/index.d.ts",
|
|
80
|
-
"gitHead": "
|
|
79
|
+
"gitHead": "4c79ff47da745b8fb7e047927cff2a4bd482f1de"
|
|
81
80
|
}
|
package/src/index.ts
CHANGED
package/src/raf.ts
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
|
|
3
|
+
interface Eachable<T> {
|
|
4
|
+
forEach(cb: (value: T) => void): void;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
function eachSafely<T>(values: Eachable<T>, each: (value: T) => void) {
|
|
8
|
+
values.forEach((value) => {
|
|
9
|
+
try {
|
|
10
|
+
each(value);
|
|
11
|
+
} catch (e) {
|
|
12
|
+
// eslint-disable-next-line no-console
|
|
13
|
+
console.error(e as Error);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** The number of pending tasks */
|
|
19
|
+
let pendingCount = 0;
|
|
20
|
+
|
|
21
|
+
interface Queue<T extends (...args: any[]) => any = (...args: any[]) => any> {
|
|
22
|
+
add: (fn: T) => void;
|
|
23
|
+
delete: (fn: T) => boolean;
|
|
24
|
+
flush: (arg?: any) => void;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function makeQueue<T extends (...args: any[]) => any>(): Queue<T> {
|
|
28
|
+
let next = new Set<T>();
|
|
29
|
+
let current = next;
|
|
30
|
+
return {
|
|
31
|
+
add(fn) {
|
|
32
|
+
pendingCount += current == next && !next.has(fn) ? 1 : 0;
|
|
33
|
+
next.add(fn);
|
|
34
|
+
},
|
|
35
|
+
delete(fn) {
|
|
36
|
+
pendingCount -= current == next && next.has(fn) ? 1 : 0;
|
|
37
|
+
return next.delete(fn);
|
|
38
|
+
},
|
|
39
|
+
flush(arg) {
|
|
40
|
+
if (current.size) {
|
|
41
|
+
next = new Set();
|
|
42
|
+
pendingCount -= current.size;
|
|
43
|
+
eachSafely(current, (fn) => fn(arg) && next.add(fn));
|
|
44
|
+
pendingCount += next.size;
|
|
45
|
+
current = next;
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
type FrameUpdateFn = (dt: number) => boolean | void;
|
|
52
|
+
|
|
53
|
+
const updateQueue = makeQueue<FrameUpdateFn>();
|
|
54
|
+
|
|
55
|
+
const nativeRaf =
|
|
56
|
+
typeof window != "undefined" ? window.requestAnimationFrame : () => {};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Schedule an update for next frame.
|
|
60
|
+
* Your function can return `true` to repeat next frame.
|
|
61
|
+
*/
|
|
62
|
+
export const raf = (fn: FrameUpdateFn) => schedule(fn, updateQueue);
|
|
63
|
+
|
|
64
|
+
raf.now =
|
|
65
|
+
typeof performance != "undefined" ? () => performance.now() : Date.now;
|
|
66
|
+
raf.batchedUpdates = (fn: () => void) => fn();
|
|
67
|
+
|
|
68
|
+
/** The most recent timestamp. */
|
|
69
|
+
let ts = -1;
|
|
70
|
+
|
|
71
|
+
function schedule<T extends (...args: any[]) => any>(fn: T, queue: Queue<T>) {
|
|
72
|
+
queue.add(fn);
|
|
73
|
+
start();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function start() {
|
|
77
|
+
if (ts < 0) {
|
|
78
|
+
ts = 0;
|
|
79
|
+
nativeRaf(loop);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function stop() {
|
|
84
|
+
ts = -1;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function loop() {
|
|
88
|
+
if (~ts) {
|
|
89
|
+
nativeRaf(loop);
|
|
90
|
+
raf.batchedUpdates(update);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function update() {
|
|
95
|
+
const prevTs = ts;
|
|
96
|
+
ts = raf.now();
|
|
97
|
+
|
|
98
|
+
if (!pendingCount) {
|
|
99
|
+
stop();
|
|
100
|
+
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
updateQueue.flush(prevTs ? Math.min(64, ts - prevTs) : 16.667);
|
|
105
|
+
}
|