@kongyo2/cards-css 0.3.0 → 0.3.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/spring.js +22 -10
- package/dist/spring.js.map +1 -1
- package/dist/ticker.js +3 -8
- package/dist/ticker.js.map +1 -1
- package/dist-types/spring.d.ts +3 -1
- package/dist-types/spring.d.ts.map +1 -1
- package/dist-types/ticker.d.ts +3 -2
- package/dist-types/ticker.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/spring.ts +25 -10
- package/src/ticker.ts +5 -14
package/dist/spring.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { loop, now } from "./ticker.js";
|
|
2
2
|
import { Subscribers } from "./subscribers.js";
|
|
3
|
+
const MAX_FRAME_DELTA = 2;
|
|
4
|
+
const clampFrameDelta = (dt) => Math.max(0, Math.min(dt, MAX_FRAME_DELTA));
|
|
3
5
|
const tickScalar = (ctx, axis, lastValue, currentValue, targetValue) => {
|
|
4
6
|
const delta = targetValue - currentValue;
|
|
5
7
|
const velocity = (currentValue - lastValue) / (ctx.dt || 1 / 60);
|
|
@@ -51,7 +53,8 @@ export class Spring {
|
|
|
51
53
|
cancelTask = false;
|
|
52
54
|
task = null;
|
|
53
55
|
lastTime = 0;
|
|
54
|
-
|
|
56
|
+
settlePromise = null;
|
|
57
|
+
settleResolve = null;
|
|
55
58
|
subscribers = new Subscribers(() => this.value);
|
|
56
59
|
constructor(value, opts = {}) {
|
|
57
60
|
this.value = value;
|
|
@@ -73,7 +76,6 @@ export class Spring {
|
|
|
73
76
|
}
|
|
74
77
|
set(newValue, opts = {}) {
|
|
75
78
|
this.targetValue = newValue;
|
|
76
|
-
const token = (this.currentToken = {});
|
|
77
79
|
if (opts.hard || (this.stiffness >= 1 && this.damping >= 1)) {
|
|
78
80
|
this.cancelTask = true;
|
|
79
81
|
if (this.task) {
|
|
@@ -84,6 +86,7 @@ export class Spring {
|
|
|
84
86
|
this.lastValue = newValue;
|
|
85
87
|
this.value = newValue;
|
|
86
88
|
this.notify();
|
|
89
|
+
this.resolveSettle();
|
|
87
90
|
return Promise.resolve();
|
|
88
91
|
}
|
|
89
92
|
if (opts.soft) {
|
|
@@ -91,11 +94,10 @@ export class Spring {
|
|
|
91
94
|
this.invMassRecoveryRate = 1 / (rate * 60);
|
|
92
95
|
this.invMass = 0;
|
|
93
96
|
}
|
|
94
|
-
|
|
95
|
-
if (!handle) {
|
|
97
|
+
if (!this.task) {
|
|
96
98
|
this.lastTime = now();
|
|
97
99
|
this.cancelTask = false;
|
|
98
|
-
|
|
100
|
+
this.task = loop((time) => {
|
|
99
101
|
if (this.cancelTask) {
|
|
100
102
|
this.cancelTask = false;
|
|
101
103
|
this.task = null;
|
|
@@ -109,7 +111,7 @@ export class Spring {
|
|
|
109
111
|
precision: this.precision,
|
|
110
112
|
axes: this.axes,
|
|
111
113
|
settled: true,
|
|
112
|
-
dt: ((time - this.lastTime) * 60) / 1000,
|
|
114
|
+
dt: clampFrameDelta(((time - this.lastTime) * 60) / 1000),
|
|
113
115
|
};
|
|
114
116
|
const next = tick(ctx, this.lastValue, this.value, this.targetValue);
|
|
115
117
|
this.lastTime = time;
|
|
@@ -118,19 +120,29 @@ export class Spring {
|
|
|
118
120
|
this.notify();
|
|
119
121
|
if (ctx.settled) {
|
|
120
122
|
this.task = null;
|
|
123
|
+
this.resolveSettle();
|
|
121
124
|
}
|
|
122
125
|
return !ctx.settled;
|
|
123
126
|
});
|
|
124
|
-
this.task = handle;
|
|
125
127
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
128
|
+
if (!this.settlePromise) {
|
|
129
|
+
this.settlePromise = new Promise((resolve) => {
|
|
130
|
+
this.settleResolve = resolve;
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
return this.settlePromise;
|
|
134
|
+
}
|
|
135
|
+
resolveSettle() {
|
|
136
|
+
const resolve = this.settleResolve;
|
|
137
|
+
this.settlePromise = null;
|
|
138
|
+
this.settleResolve = null;
|
|
139
|
+
resolve?.();
|
|
129
140
|
}
|
|
130
141
|
destroy() {
|
|
131
142
|
this.cancelTask = true;
|
|
132
143
|
this.task?.abort();
|
|
133
144
|
this.task = null;
|
|
145
|
+
this.resolveSettle();
|
|
134
146
|
this.subscribers.clear();
|
|
135
147
|
}
|
|
136
148
|
}
|
package/dist/spring.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spring.js","sourceRoot":"","sources":["../src/spring.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"spring.js","sourceRoot":"","sources":["../src/spring.ts"],"names":[],"mappings":"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"}
|
package/dist/ticker.js
CHANGED
|
@@ -5,9 +5,8 @@ const raf = typeof requestAnimationFrame !== "undefined"
|
|
|
5
5
|
const tasks = new Set();
|
|
6
6
|
const runTasks = (time) => {
|
|
7
7
|
tasks.forEach((task) => {
|
|
8
|
-
if (!task
|
|
8
|
+
if (!task(time)) {
|
|
9
9
|
tasks.delete(task);
|
|
10
|
-
task.f();
|
|
11
10
|
}
|
|
12
11
|
});
|
|
13
12
|
if (tasks.size !== 0) {
|
|
@@ -15,17 +14,13 @@ const runTasks = (time) => {
|
|
|
15
14
|
}
|
|
16
15
|
};
|
|
17
16
|
export const loop = (callback) => {
|
|
18
|
-
let task;
|
|
19
17
|
if (tasks.size === 0) {
|
|
20
18
|
raf(runTasks);
|
|
21
19
|
}
|
|
20
|
+
tasks.add(callback);
|
|
22
21
|
return {
|
|
23
|
-
promise: new Promise((fulfil) => {
|
|
24
|
-
task = { c: callback, f: fulfil };
|
|
25
|
-
tasks.add(task);
|
|
26
|
-
}),
|
|
27
22
|
abort: () => {
|
|
28
|
-
tasks.delete(
|
|
23
|
+
tasks.delete(callback);
|
|
29
24
|
},
|
|
30
25
|
};
|
|
31
26
|
};
|
package/dist/ticker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ticker.js","sourceRoot":"","sources":["../src/ticker.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,GAAG,GAAG,GAAW,EAAE,CAAC,CAAC,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAEvG,MAAM,GAAG,GACP,OAAO,qBAAqB,KAAK,WAAW;IAC1C,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"ticker.js","sourceRoot":"","sources":["../src/ticker.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,GAAG,GAAG,GAAW,EAAE,CAAC,CAAC,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAEvG,MAAM,GAAG,GACP,OAAO,qBAAqB,KAAK,WAAW;IAC1C,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AAQrD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAQ,CAAC;AAE9B,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAQ,EAAE;IACtC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAChB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrB,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChB,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,QAAc,EAAc,EAAE;IACjD,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrB,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChB,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpB,OAAO;QACL,KAAK,EAAE,GAAG,EAAE;YACV,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
|
package/dist-types/spring.d.ts
CHANGED
|
@@ -29,13 +29,15 @@ export declare class Spring<T extends SpringValue> {
|
|
|
29
29
|
private cancelTask;
|
|
30
30
|
private task;
|
|
31
31
|
private lastTime;
|
|
32
|
-
private
|
|
32
|
+
private settlePromise;
|
|
33
|
+
private settleResolve;
|
|
33
34
|
private readonly subscribers;
|
|
34
35
|
constructor(value: T, opts?: SpringOpts);
|
|
35
36
|
get current(): T;
|
|
36
37
|
subscribe(fn: (value: T) => void): () => void;
|
|
37
38
|
private notify;
|
|
38
39
|
set(newValue: T, opts?: SpringSetOpts): Promise<void>;
|
|
40
|
+
private resolveSettle;
|
|
39
41
|
destroy(): void;
|
|
40
42
|
}
|
|
41
43
|
//# sourceMappingURL=spring.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spring.d.ts","sourceRoot":"","sources":["../src/spring.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE1D,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACzB;
|
|
1
|
+
{"version":3,"file":"spring.d.ts","sourceRoot":"","sources":["../src/spring.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE1D,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CACzB;AAqED,qBAAa,MAAM,CAAC,CAAC,SAAS,WAAW;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,SAAS,CAAC;IAEjD,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,SAAS,CAAI;IACrB,OAAO,CAAC,WAAW,CAAI;IACvB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwC;gBAExD,KAAK,EAAE,CAAC,EAAE,IAAI,GAAE,UAAe;IAU3C,IAAI,OAAO,IAAI,CAAC,CAEf;IAED,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,MAAM,IAAI;IAI7C,OAAO,CAAC,MAAM;IAId,GAAG,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA+DzD,OAAO,CAAC,aAAa;IAOrB,OAAO,IAAI,IAAI;CAOhB"}
|
package/dist-types/ticker.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export declare const now: () => number;
|
|
2
|
+
type Task = (time: number) => boolean;
|
|
2
3
|
export interface TaskHandle {
|
|
3
|
-
promise: Promise<void>;
|
|
4
4
|
abort: () => void;
|
|
5
5
|
}
|
|
6
|
-
export declare const loop: (callback:
|
|
6
|
+
export declare const loop: (callback: Task) => TaskHandle;
|
|
7
|
+
export {};
|
|
7
8
|
//# sourceMappingURL=ticker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ticker.d.ts","sourceRoot":"","sources":["../src/ticker.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,GAAG,QAAO,MAA+E,CAAC;
|
|
1
|
+
{"version":3,"file":"ticker.d.ts","sourceRoot":"","sources":["../src/ticker.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,GAAG,QAAO,MAA+E,CAAC;AAOvG,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;AAEtC,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAeD,eAAO,MAAM,IAAI,GAAI,UAAU,IAAI,KAAG,UAUrC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kongyo2/cards-css",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Framework-agnostic holographic trading-card effect (tilt, shine, glare, holo / reverse / cosmos / glitter) with procedurally code-generated textures.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
package/src/spring.ts
CHANGED
|
@@ -39,6 +39,10 @@ interface AxisDynamics {
|
|
|
39
39
|
precision: number;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
const MAX_FRAME_DELTA = 2;
|
|
43
|
+
|
|
44
|
+
const clampFrameDelta = (dt: number): number => Math.max(0, Math.min(dt, MAX_FRAME_DELTA));
|
|
45
|
+
|
|
42
46
|
const tickScalar = (
|
|
43
47
|
ctx: FrameContext,
|
|
44
48
|
axis: AxisDynamics,
|
|
@@ -100,7 +104,8 @@ export class Spring<T extends SpringValue> {
|
|
|
100
104
|
private cancelTask = false;
|
|
101
105
|
private task: TaskHandle | null = null;
|
|
102
106
|
private lastTime = 0;
|
|
103
|
-
private
|
|
107
|
+
private settlePromise: Promise<void> | null = null;
|
|
108
|
+
private settleResolve: (() => void) | null = null;
|
|
104
109
|
private readonly subscribers = new Subscribers<T>(() => this.value);
|
|
105
110
|
|
|
106
111
|
constructor(value: T, opts: SpringOpts = {}) {
|
|
@@ -127,7 +132,6 @@ export class Spring<T extends SpringValue> {
|
|
|
127
132
|
|
|
128
133
|
set(newValue: T, opts: SpringSetOpts = {}): Promise<void> {
|
|
129
134
|
this.targetValue = newValue;
|
|
130
|
-
const token = (this.currentToken = {});
|
|
131
135
|
|
|
132
136
|
if (opts.hard || (this.stiffness >= 1 && this.damping >= 1)) {
|
|
133
137
|
this.cancelTask = true;
|
|
@@ -139,6 +143,7 @@ export class Spring<T extends SpringValue> {
|
|
|
139
143
|
this.lastValue = newValue;
|
|
140
144
|
this.value = newValue;
|
|
141
145
|
this.notify();
|
|
146
|
+
this.resolveSettle();
|
|
142
147
|
return Promise.resolve();
|
|
143
148
|
}
|
|
144
149
|
|
|
@@ -148,11 +153,10 @@ export class Spring<T extends SpringValue> {
|
|
|
148
153
|
this.invMass = 0;
|
|
149
154
|
}
|
|
150
155
|
|
|
151
|
-
|
|
152
|
-
if (!handle) {
|
|
156
|
+
if (!this.task) {
|
|
153
157
|
this.lastTime = now();
|
|
154
158
|
this.cancelTask = false;
|
|
155
|
-
|
|
159
|
+
this.task = loop((time) => {
|
|
156
160
|
if (this.cancelTask) {
|
|
157
161
|
this.cancelTask = false;
|
|
158
162
|
this.task = null;
|
|
@@ -166,7 +170,7 @@ export class Spring<T extends SpringValue> {
|
|
|
166
170
|
precision: this.precision,
|
|
167
171
|
axes: this.axes,
|
|
168
172
|
settled: true,
|
|
169
|
-
dt: ((time - this.lastTime) * 60) / 1000,
|
|
173
|
+
dt: clampFrameDelta(((time - this.lastTime) * 60) / 1000),
|
|
170
174
|
};
|
|
171
175
|
const next = tick(ctx, this.lastValue, this.value, this.targetValue);
|
|
172
176
|
this.lastTime = time;
|
|
@@ -175,21 +179,32 @@ export class Spring<T extends SpringValue> {
|
|
|
175
179
|
this.notify();
|
|
176
180
|
if (ctx.settled) {
|
|
177
181
|
this.task = null;
|
|
182
|
+
this.resolveSettle();
|
|
178
183
|
}
|
|
179
184
|
return !ctx.settled;
|
|
180
185
|
});
|
|
181
|
-
this.task = handle;
|
|
182
186
|
}
|
|
183
187
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
188
|
+
if (!this.settlePromise) {
|
|
189
|
+
this.settlePromise = new Promise<void>((resolve) => {
|
|
190
|
+
this.settleResolve = resolve;
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
return this.settlePromise;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
private resolveSettle(): void {
|
|
197
|
+
const resolve = this.settleResolve;
|
|
198
|
+
this.settlePromise = null;
|
|
199
|
+
this.settleResolve = null;
|
|
200
|
+
resolve?.();
|
|
187
201
|
}
|
|
188
202
|
|
|
189
203
|
destroy(): void {
|
|
190
204
|
this.cancelTask = true;
|
|
191
205
|
this.task?.abort();
|
|
192
206
|
this.task = null;
|
|
207
|
+
this.resolveSettle();
|
|
193
208
|
this.subscribers.clear();
|
|
194
209
|
}
|
|
195
210
|
}
|
package/src/ticker.ts
CHANGED
|
@@ -5,13 +5,9 @@ const raf: (cb: (time: number) => void) => void =
|
|
|
5
5
|
? (cb) => requestAnimationFrame(cb)
|
|
6
6
|
: (cb) => setTimeout(() => cb(now()), 1000 / 60);
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
c: (time: number) => boolean;
|
|
10
|
-
f: () => void;
|
|
11
|
-
}
|
|
8
|
+
type Task = (time: number) => boolean;
|
|
12
9
|
|
|
13
10
|
export interface TaskHandle {
|
|
14
|
-
promise: Promise<void>;
|
|
15
11
|
abort: () => void;
|
|
16
12
|
}
|
|
17
13
|
|
|
@@ -19,9 +15,8 @@ const tasks = new Set<Task>();
|
|
|
19
15
|
|
|
20
16
|
const runTasks = (time: number): void => {
|
|
21
17
|
tasks.forEach((task) => {
|
|
22
|
-
if (!task
|
|
18
|
+
if (!task(time)) {
|
|
23
19
|
tasks.delete(task);
|
|
24
|
-
task.f();
|
|
25
20
|
}
|
|
26
21
|
});
|
|
27
22
|
if (tasks.size !== 0) {
|
|
@@ -29,18 +24,14 @@ const runTasks = (time: number): void => {
|
|
|
29
24
|
}
|
|
30
25
|
};
|
|
31
26
|
|
|
32
|
-
export const loop = (callback:
|
|
33
|
-
let task: Task;
|
|
27
|
+
export const loop = (callback: Task): TaskHandle => {
|
|
34
28
|
if (tasks.size === 0) {
|
|
35
29
|
raf(runTasks);
|
|
36
30
|
}
|
|
31
|
+
tasks.add(callback);
|
|
37
32
|
return {
|
|
38
|
-
promise: new Promise<void>((fulfil) => {
|
|
39
|
-
task = { c: callback, f: fulfil };
|
|
40
|
-
tasks.add(task);
|
|
41
|
-
}),
|
|
42
33
|
abort: () => {
|
|
43
|
-
tasks.delete(
|
|
34
|
+
tasks.delete(callback);
|
|
44
35
|
},
|
|
45
36
|
};
|
|
46
37
|
};
|