@studiometa/js-toolkit 2.10.3 → 2.12.0
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/Base/Base.cjs +155 -60
- package/Base/Base.cjs.map +2 -2
- package/Base/Base.d.ts +1 -1
- package/Base/Base.js +138 -38
- package/Base/Base.js.map +2 -2
- package/Base/managers/AbstractManager.cjs +21 -0
- package/Base/managers/AbstractManager.cjs.map +2 -2
- package/Base/managers/AbstractManager.d.ts +1 -0
- package/Base/managers/AbstractManager.js +21 -0
- package/Base/managers/AbstractManager.js.map +2 -2
- package/Base/managers/ChildrenManager.cjs +41 -8
- package/Base/managers/ChildrenManager.cjs.map +3 -3
- package/Base/managers/ChildrenManager.js +41 -8
- package/Base/managers/ChildrenManager.js.map +2 -2
- package/Base/managers/EventsManager.cjs +94 -9
- package/Base/managers/EventsManager.cjs.map +2 -2
- package/Base/managers/EventsManager.d.ts +1 -0
- package/Base/managers/EventsManager.js +90 -9
- package/Base/managers/EventsManager.js.map +2 -2
- package/Base/managers/OptionsManager.cjs +29 -2
- package/Base/managers/OptionsManager.cjs.map +2 -2
- package/Base/managers/OptionsManager.d.ts +1 -0
- package/Base/managers/OptionsManager.js +25 -2
- package/Base/managers/OptionsManager.js.map +2 -2
- package/Base/managers/RefsManager.cjs +32 -5
- package/Base/managers/RefsManager.cjs.map +2 -2
- package/Base/managers/RefsManager.d.ts +1 -1
- package/Base/managers/RefsManager.js +40 -6
- package/Base/managers/RefsManager.js.map +2 -2
- package/Base/managers/ResponsiveOptionsManager.cjs +22 -6
- package/Base/managers/ResponsiveOptionsManager.cjs.map +2 -2
- package/Base/managers/ResponsiveOptionsManager.js +22 -6
- package/Base/managers/ResponsiveOptionsManager.js.map +2 -2
- package/Base/managers/ServicesManager.cjs +54 -4
- package/Base/managers/ServicesManager.cjs.map +2 -2
- package/Base/managers/ServicesManager.js +54 -4
- package/Base/managers/ServicesManager.js.map +2 -2
- package/Base/utils.cjs +4 -0
- package/Base/utils.cjs.map +2 -2
- package/Base/utils.d.ts +1 -0
- package/Base/utils.js +4 -0
- package/Base/utils.js.map +2 -2
- package/decorators/index.cjs +3 -2
- package/decorators/index.cjs.map +2 -2
- package/decorators/index.d.ts +3 -2
- package/decorators/index.js +3 -2
- package/decorators/index.js.map +2 -2
- package/decorators/withBreakpointManager.cjs +14 -4
- package/decorators/withBreakpointManager.cjs.map +2 -2
- package/decorators/withBreakpointManager.js +14 -4
- package/decorators/withBreakpointManager.js.map +2 -2
- package/decorators/withBreakpointObserver.cjs +11 -1
- package/decorators/withBreakpointObserver.cjs.map +2 -2
- package/decorators/withBreakpointObserver.js +12 -2
- package/decorators/withBreakpointObserver.js.map +2 -2
- package/decorators/withDrag.cjs +6 -0
- package/decorators/withDrag.cjs.map +1 -1
- package/decorators/withDrag.js +6 -0
- package/decorators/withDrag.js.map +1 -1
- package/decorators/withExtraConfig.cjs +7 -0
- package/decorators/withExtraConfig.cjs.map +1 -1
- package/decorators/withExtraConfig.js +3 -0
- package/decorators/withExtraConfig.js.map +1 -1
- package/decorators/withFreezedOptions.cjs +8 -0
- package/decorators/withFreezedOptions.cjs.map +2 -2
- package/decorators/withFreezedOptions.js +8 -0
- package/decorators/withFreezedOptions.js.map +2 -2
- package/decorators/withIntersectionObserver.cjs +10 -1
- package/decorators/withIntersectionObserver.cjs.map +2 -2
- package/decorators/withIntersectionObserver.js +10 -1
- package/decorators/withIntersectionObserver.js.map +2 -2
- package/decorators/withMountOnMediaQuery.cjs +16 -0
- package/decorators/withMountOnMediaQuery.cjs.map +2 -2
- package/decorators/withMountOnMediaQuery.js +16 -0
- package/decorators/withMountOnMediaQuery.js.map +2 -2
- package/decorators/withMountWhenInView.cjs +21 -0
- package/decorators/withMountWhenInView.cjs.map +2 -2
- package/decorators/withMountWhenInView.js +21 -0
- package/decorators/withMountWhenInView.js.map +2 -2
- package/decorators/withRelativePointer.cjs +56 -0
- package/decorators/withRelativePointer.cjs.map +7 -0
- package/decorators/withRelativePointer.d.ts +13 -0
- package/decorators/withRelativePointer.js +34 -0
- package/decorators/withRelativePointer.js.map +7 -0
- package/decorators/withResponsiveOptions.cjs +3 -0
- package/decorators/withResponsiveOptions.cjs.map +1 -1
- package/decorators/withResponsiveOptions.js +3 -0
- package/decorators/withResponsiveOptions.js.map +1 -1
- package/decorators/withScrolledInView/utils.cjs +6 -6
- package/decorators/withScrolledInView/utils.cjs.map +2 -2
- package/decorators/withScrolledInView/utils.js +7 -7
- package/decorators/withScrolledInView/utils.js.map +2 -2
- package/decorators/withScrolledInView/withScrolledInView.cjs +33 -0
- package/decorators/withScrolledInView/withScrolledInView.cjs.map +2 -2
- package/decorators/withScrolledInView/withScrolledInView.js +33 -0
- package/decorators/withScrolledInView/withScrolledInView.js.map +2 -2
- package/decorators/withVue2.cjs +3 -0
- package/decorators/withVue2.cjs.map +1 -1
- package/decorators/withVue2.js +3 -0
- package/decorators/withVue2.js.map +1 -1
- package/helpers/createApp.cjs +2 -2
- package/helpers/createApp.cjs.map +2 -2
- package/helpers/createApp.js +2 -2
- package/helpers/createApp.js.map +2 -2
- package/helpers/getClosestParent.cjs +4 -0
- package/helpers/getClosestParent.cjs.map +1 -1
- package/helpers/getDirectChildren.cjs.map +1 -1
- package/helpers/getDirectChildren.js.map +1 -1
- package/helpers/importOnInteraction.cjs +4 -4
- package/helpers/importOnInteraction.cjs.map +2 -2
- package/helpers/importOnInteraction.js +4 -4
- package/helpers/importOnInteraction.js.map +2 -2
- package/helpers/importWhenPrefersMotion.cjs +4 -0
- package/helpers/importWhenPrefersMotion.cjs.map +1 -1
- package/helpers/importWhenVisible.cjs +2 -1
- package/helpers/importWhenVisible.cjs.map +2 -2
- package/helpers/importWhenVisible.js +2 -1
- package/helpers/importWhenVisible.js.map +2 -2
- package/helpers/index.cjs +4 -0
- package/helpers/index.cjs.map +1 -1
- package/package.json +5 -2
- package/services/drag.cjs +12 -8
- package/services/drag.cjs.map +2 -2
- package/services/drag.js +8 -8
- package/services/drag.js.map +2 -2
- package/services/index.cjs +4 -0
- package/services/index.cjs.map +1 -1
- package/services/key.cjs +6 -2
- package/services/key.cjs.map +2 -2
- package/services/key.js +2 -2
- package/services/key.js.map +2 -2
- package/services/load.cjs +3 -0
- package/services/load.cjs.map +2 -2
- package/services/load.js +3 -0
- package/services/load.js.map +2 -2
- package/services/pointer.cjs +33 -20
- package/services/pointer.cjs.map +3 -3
- package/services/pointer.d.ts +1 -3
- package/services/pointer.js +33 -20
- package/services/pointer.js.map +3 -3
- package/services/raf.cjs +2 -2
- package/services/raf.cjs.map +2 -2
- package/services/raf.js +2 -2
- package/services/raf.js.map +2 -2
- package/services/resize.cjs +4 -0
- package/services/resize.cjs.map +1 -1
- package/services/scroll.cjs +4 -0
- package/services/scroll.cjs.map +1 -1
- package/services/service.cjs +2 -2
- package/services/service.cjs.map +2 -2
- package/services/service.js +2 -2
- package/services/service.js.map +2 -2
- package/utils/Queue.cjs +30 -0
- package/utils/Queue.cjs.map +1 -1
- package/utils/Queue.js +30 -0
- package/utils/Queue.js.map +1 -1
- package/utils/SmartQueue.cjs +16 -0
- package/utils/SmartQueue.cjs.map +2 -2
- package/utils/SmartQueue.js +12 -0
- package/utils/SmartQueue.js.map +2 -2
- package/utils/collide/collidePointRect.cjs +4 -1
- package/utils/collide/collidePointRect.cjs.map +1 -1
- package/utils/collide/collidePointRect.js +4 -1
- package/utils/collide/collidePointRect.js.map +1 -1
- package/utils/collide/collideRectRect.cjs +4 -1
- package/utils/collide/collideRectRect.cjs.map +1 -1
- package/utils/collide/collideRectRect.js +4 -1
- package/utils/collide/collideRectRect.js.map +1 -1
- package/utils/collide/index.cjs +4 -0
- package/utils/collide/index.cjs.map +1 -1
- package/utils/css/animate.cjs +21 -12
- package/utils/css/animate.cjs.map +2 -2
- package/utils/css/animate.js +17 -12
- package/utils/css/animate.js.map +2 -2
- package/utils/css/classes.cjs +2 -3
- package/utils/css/classes.cjs.map +2 -2
- package/utils/css/classes.js +2 -3
- package/utils/css/classes.js.map +2 -2
- package/utils/css/index.cjs +4 -0
- package/utils/css/index.cjs.map +1 -1
- package/utils/css/matrix.cjs.map +1 -1
- package/utils/css/matrix.js.map +1 -1
- package/utils/css/styles.cjs +2 -2
- package/utils/css/styles.cjs.map +2 -2
- package/utils/css/styles.js +2 -2
- package/utils/css/styles.js.map +2 -2
- package/utils/css/transform.cjs.map +1 -1
- package/utils/css/transform.js.map +1 -1
- package/utils/css/transition.cjs +19 -0
- package/utils/css/transition.cjs.map +2 -2
- package/utils/css/transition.js +15 -0
- package/utils/css/transition.js.map +2 -2
- package/utils/focusTrap.cjs +4 -0
- package/utils/focusTrap.cjs.map +2 -2
- package/utils/focusTrap.d.ts +1 -0
- package/utils/focusTrap.js.map +2 -2
- package/utils/history.cjs +6 -5
- package/utils/history.cjs.map +2 -2
- package/utils/history.js +6 -5
- package/utils/history.js.map +2 -2
- package/utils/index.cjs +4 -0
- package/utils/index.cjs.map +1 -1
- package/utils/math/clamp.cjs.map +2 -2
- package/utils/math/clamp.d.ts +1 -0
- package/utils/math/clamp.js.map +2 -2
- package/utils/math/clamp01.cjs +4 -0
- package/utils/math/clamp01.cjs.map +2 -2
- package/utils/math/clamp01.d.ts +1 -0
- package/utils/math/clamp01.js.map +2 -2
- package/utils/math/index.cjs +4 -0
- package/utils/math/index.cjs.map +1 -1
- package/utils/math/inertiaFinalValue.cjs +4 -0
- package/utils/math/inertiaFinalValue.cjs.map +1 -1
- package/utils/nextFrame.cjs.map +2 -2
- package/utils/nextFrame.d.ts +1 -0
- package/utils/nextFrame.js.map +2 -2
- package/utils/noop.cjs.map +2 -2
- package/utils/noop.d.ts +1 -0
- package/utils/noop.js.map +2 -2
- package/utils/object/autoBind.cjs +11 -5
- package/utils/object/autoBind.cjs.map +2 -2
- package/utils/object/autoBind.js +7 -5
- package/utils/object/autoBind.js.map +2 -2
- package/utils/object/index.cjs +4 -0
- package/utils/object/index.cjs.map +1 -1
- package/utils/scheduler.cjs +4 -4
- package/utils/scheduler.cjs.map +2 -2
- package/utils/scheduler.js +4 -4
- package/utils/scheduler.js.map +2 -2
- package/utils/scrollTo.cjs +4 -0
- package/utils/scrollTo.cjs.map +2 -2
- package/utils/scrollTo.d.ts +1 -0
- package/utils/scrollTo.js.map +2 -2
- package/utils/string/endsWith.cjs +35 -0
- package/utils/string/endsWith.cjs.map +7 -0
- package/utils/string/endsWith.d.ts +8 -0
- package/utils/string/endsWith.js +13 -0
- package/utils/string/endsWith.js.map +7 -0
- package/utils/string/index.cjs +7 -0
- package/utils/string/index.cjs.map +2 -2
- package/utils/string/index.d.ts +2 -0
- package/utils/string/index.js +2 -0
- package/utils/string/index.js.map +2 -2
- package/utils/string/startsWith.cjs +35 -0
- package/utils/string/startsWith.cjs.map +7 -0
- package/utils/string/startsWith.d.ts +8 -0
- package/utils/string/startsWith.js +13 -0
- package/utils/string/startsWith.js.map +7 -0
- package/utils/string/withLeadingCharacters.cjs +4 -0
- package/utils/string/withLeadingCharacters.cjs.map +1 -1
- package/utils/string/withLeadingCharacters.js.map +1 -1
- package/utils/string/withLeadingSlash.cjs +4 -0
- package/utils/string/withLeadingSlash.cjs.map +1 -1
- package/utils/string/withTrailingCharacters.cjs +4 -0
- package/utils/string/withTrailingCharacters.cjs.map +1 -1
- package/utils/string/withTrailingCharacters.js.map +1 -1
- package/utils/string/withTrailingSlash.cjs +4 -0
- package/utils/string/withTrailingSlash.cjs.map +1 -1
- package/utils/string/withoutLeadingCharacters.cjs.map +1 -1
- package/utils/string/withoutLeadingCharacters.js.map +1 -1
- package/utils/string/withoutLeadingCharactersRecursive.cjs +4 -0
- package/utils/string/withoutLeadingCharactersRecursive.cjs.map +1 -1
- package/utils/string/withoutLeadingCharactersRecursive.js.map +1 -1
- package/utils/string/withoutLeadingSlash.cjs +4 -0
- package/utils/string/withoutLeadingSlash.cjs.map +1 -1
- package/utils/string/withoutTrailingCharacters.cjs.map +1 -1
- package/utils/string/withoutTrailingCharacters.js.map +1 -1
- package/utils/string/withoutTrailingCharactersRecursive.cjs +4 -0
- package/utils/string/withoutTrailingCharactersRecursive.cjs.map +1 -1
- package/utils/string/withoutTrailingCharactersRecursive.js.map +1 -1
- package/utils/string/withoutTrailingSlash.cjs +4 -0
- package/utils/string/withoutTrailingSlash.cjs.map +1 -1
- package/utils/tween.cjs +4 -0
- package/utils/tween.cjs.map +1 -1
- package/utils/tween.js.map +1 -1
package/utils/Queue.cjs
CHANGED
|
@@ -23,14 +23,35 @@ __export(Queue_exports, {
|
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(Queue_exports);
|
|
25
25
|
var Queue = class {
|
|
26
|
+
/**
|
|
27
|
+
* List of tasks.
|
|
28
|
+
*/
|
|
26
29
|
tasks = [];
|
|
30
|
+
/**
|
|
31
|
+
* Number of tasks running in a single batch.
|
|
32
|
+
*/
|
|
27
33
|
concurrency = 10;
|
|
34
|
+
/**
|
|
35
|
+
* A function to schedule the next batch.
|
|
36
|
+
*/
|
|
28
37
|
waiter;
|
|
38
|
+
/**
|
|
39
|
+
* Is schedule running?
|
|
40
|
+
*/
|
|
29
41
|
isScheduled = false;
|
|
42
|
+
/**
|
|
43
|
+
* Constructor.
|
|
44
|
+
*
|
|
45
|
+
* @param {number} concurrency Number of tasks running in a single batch.
|
|
46
|
+
* @param {(cb: (...args:unknown[]) => unknown) => unknown} waiter Scheduler for the next batch execution.
|
|
47
|
+
*/
|
|
30
48
|
constructor(concurrency, waiter = (cb) => cb()) {
|
|
31
49
|
this.concurrency = concurrency;
|
|
32
50
|
this.waiter = waiter;
|
|
33
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Add a task to the queue.
|
|
54
|
+
*/
|
|
34
55
|
add(task) {
|
|
35
56
|
const p = new Promise((resolve) => {
|
|
36
57
|
this.tasks.push(() => resolve(task()));
|
|
@@ -38,6 +59,9 @@ var Queue = class {
|
|
|
38
59
|
this.scheduleFlush();
|
|
39
60
|
return p;
|
|
40
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Schedule next flush.
|
|
64
|
+
*/
|
|
41
65
|
scheduleFlush() {
|
|
42
66
|
if (this.isScheduled) {
|
|
43
67
|
return;
|
|
@@ -45,6 +69,9 @@ var Queue = class {
|
|
|
45
69
|
this.isScheduled = true;
|
|
46
70
|
this.waiter(() => this.flush());
|
|
47
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Flush current batch.
|
|
74
|
+
*/
|
|
48
75
|
flush() {
|
|
49
76
|
this.run(this.tasks.splice(0, this.concurrency));
|
|
50
77
|
this.isScheduled = false;
|
|
@@ -52,6 +79,9 @@ var Queue = class {
|
|
|
52
79
|
this.scheduleFlush();
|
|
53
80
|
}
|
|
54
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Run the queue.
|
|
84
|
+
*/
|
|
55
85
|
run(tasks) {
|
|
56
86
|
let task;
|
|
57
87
|
while (task = tasks.shift()) {
|
package/utils/Queue.cjs.map
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../packages/js-toolkit/utils/Queue.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Manage tasks in a queue.\n */\nexport class Queue {\n /**\n * List of tasks.\n */\n tasks: Array<(...args: unknown[]) => unknown> = [];\n\n /**\n * Number of tasks running in a single batch.\n */\n concurrency = 10;\n\n /**\n * A function to schedule the next batch.\n */\n waiter: (cb: (...args: unknown[]) => unknown) => unknown;\n\n /**\n * Is schedule running?\n */\n isScheduled = false;\n\n /**\n * Constructor.\n *\n * @param {number} concurrency Number of tasks running in a single batch.\n * @param {(cb: (...args:unknown[]) => unknown) => unknown} waiter Scheduler for the next batch execution.\n */\n constructor(\n concurrency: number,\n waiter: (cb: (...args: unknown[]) => unknown) => unknown = (cb) => cb(),\n ) {\n this.concurrency = concurrency;\n this.waiter = waiter;\n }\n\n /**\n * Add a task to the queue.\n */\n add(task: () => unknown) {\n const p = new Promise((resolve) => {\n this.tasks.push(() => resolve(task()));\n });\n this.scheduleFlush();\n return p;\n }\n\n /**\n * Schedule next flush.\n */\n scheduleFlush() {\n if (this.isScheduled) {\n return;\n }\n\n this.isScheduled = true;\n this.waiter(() => this.flush());\n }\n\n /**\n * Flush current batch.\n */\n flush() {\n this.run(this.tasks.splice(0, this.concurrency));\n this.isScheduled = false;\n\n if (this.tasks.length > 0) {\n this.scheduleFlush();\n }\n }\n\n /**\n * Run the queue.\n */\n run(tasks: Array<(...args: unknown[]) => unknown>) {\n let task;\n // eslint-disable-next-line no-cond-assign\n while ((task = tasks.shift())) {\n task();\n }\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,IAAM,QAAN,MAAY;AAAA,EAIjB,QAAgD,CAAC;AAAA,EAKjD,cAAc;AAAA,EAKd;AAAA,EAKA,cAAc;AAAA,EAQd,YACE,aACA,SAA2D,CAAC,OAAO,GAAG,GACtE;AACA,SAAK,cAAc;AACnB,SAAK,SAAS;AAAA,EAChB;AAAA,EAKA,IAAI,MAAqB;AACvB,UAAM,IAAI,IAAI,QAAQ,CAAC,YAAY;AACjC,WAAK,MAAM,KAAK,MAAM,QAAQ,KAAK,CAAC,CAAC;AAAA,IACvC,CAAC;AACD,SAAK,cAAc;AACnB,WAAO;AAAA,EACT;AAAA,EAKA,gBAAgB;AACd,QAAI,KAAK,aAAa;AACpB;AAAA,IACF;AAEA,SAAK,cAAc;AACnB,SAAK,OAAO,MAAM,KAAK,MAAM,CAAC;AAAA,EAChC;AAAA,EAKA,QAAQ;AACN,SAAK,IAAI,KAAK,MAAM,OAAO,GAAG,KAAK,WAAW,CAAC;AAC/C,SAAK,cAAc;AAEnB,QAAI,KAAK,MAAM,SAAS,GAAG;AACzB,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAKA,IAAI,OAA+C;AACjD,QAAI;AAEJ,WAAQ,OAAO,MAAM,MAAM,GAAI;AAC7B,WAAK;AAAA,IACP;AAAA,EACF;AACF;",
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,IAAM,QAAN,MAAY;AAAA;AAAA;AAAA;AAAA,EAIjB,QAAgD,CAAC;AAAA;AAAA;AAAA;AAAA,EAKjD,cAAc;AAAA;AAAA;AAAA;AAAA,EAKd;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQd,YACE,aACA,SAA2D,CAAC,OAAO,GAAG,GACtE;AACA,SAAK,cAAc;AACnB,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAAqB;AACvB,UAAM,IAAI,IAAI,QAAQ,CAAC,YAAY;AACjC,WAAK,MAAM,KAAK,MAAM,QAAQ,KAAK,CAAC,CAAC;AAAA,IACvC,CAAC;AACD,SAAK,cAAc;AACnB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB;AACd,QAAI,KAAK,aAAa;AACpB;AAAA,IACF;AAEA,SAAK,cAAc;AACnB,SAAK,OAAO,MAAM,KAAK,MAAM,CAAC;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ;AACN,SAAK,IAAI,KAAK,MAAM,OAAO,GAAG,KAAK,WAAW,CAAC;AAC/C,SAAK,cAAc;AAEnB,QAAI,KAAK,MAAM,SAAS,GAAG;AACzB,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAA+C;AACjD,QAAI;AAEJ,WAAQ,OAAO,MAAM,MAAM,GAAI;AAC7B,WAAK;AAAA,IACP;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/utils/Queue.js
CHANGED
|
@@ -1,12 +1,33 @@
|
|
|
1
1
|
class Queue {
|
|
2
|
+
/**
|
|
3
|
+
* List of tasks.
|
|
4
|
+
*/
|
|
2
5
|
tasks = [];
|
|
6
|
+
/**
|
|
7
|
+
* Number of tasks running in a single batch.
|
|
8
|
+
*/
|
|
3
9
|
concurrency = 10;
|
|
10
|
+
/**
|
|
11
|
+
* A function to schedule the next batch.
|
|
12
|
+
*/
|
|
4
13
|
waiter;
|
|
14
|
+
/**
|
|
15
|
+
* Is schedule running?
|
|
16
|
+
*/
|
|
5
17
|
isScheduled = false;
|
|
18
|
+
/**
|
|
19
|
+
* Constructor.
|
|
20
|
+
*
|
|
21
|
+
* @param {number} concurrency Number of tasks running in a single batch.
|
|
22
|
+
* @param {(cb: (...args:unknown[]) => unknown) => unknown} waiter Scheduler for the next batch execution.
|
|
23
|
+
*/
|
|
6
24
|
constructor(concurrency, waiter = (cb) => cb()) {
|
|
7
25
|
this.concurrency = concurrency;
|
|
8
26
|
this.waiter = waiter;
|
|
9
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Add a task to the queue.
|
|
30
|
+
*/
|
|
10
31
|
add(task) {
|
|
11
32
|
const p = new Promise((resolve) => {
|
|
12
33
|
this.tasks.push(() => resolve(task()));
|
|
@@ -14,6 +35,9 @@ class Queue {
|
|
|
14
35
|
this.scheduleFlush();
|
|
15
36
|
return p;
|
|
16
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Schedule next flush.
|
|
40
|
+
*/
|
|
17
41
|
scheduleFlush() {
|
|
18
42
|
if (this.isScheduled) {
|
|
19
43
|
return;
|
|
@@ -21,6 +45,9 @@ class Queue {
|
|
|
21
45
|
this.isScheduled = true;
|
|
22
46
|
this.waiter(() => this.flush());
|
|
23
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Flush current batch.
|
|
50
|
+
*/
|
|
24
51
|
flush() {
|
|
25
52
|
this.run(this.tasks.splice(0, this.concurrency));
|
|
26
53
|
this.isScheduled = false;
|
|
@@ -28,6 +55,9 @@ class Queue {
|
|
|
28
55
|
this.scheduleFlush();
|
|
29
56
|
}
|
|
30
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Run the queue.
|
|
60
|
+
*/
|
|
31
61
|
run(tasks) {
|
|
32
62
|
let task;
|
|
33
63
|
while (task = tasks.shift()) {
|
package/utils/Queue.js.map
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../packages/js-toolkit/utils/Queue.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Manage tasks in a queue.\n */\nexport class Queue {\n /**\n * List of tasks.\n */\n tasks: Array<(...args: unknown[]) => unknown> = [];\n\n /**\n * Number of tasks running in a single batch.\n */\n concurrency = 10;\n\n /**\n * A function to schedule the next batch.\n */\n waiter: (cb: (...args: unknown[]) => unknown) => unknown;\n\n /**\n * Is schedule running?\n */\n isScheduled = false;\n\n /**\n * Constructor.\n *\n * @param {number} concurrency Number of tasks running in a single batch.\n * @param {(cb: (...args:unknown[]) => unknown) => unknown} waiter Scheduler for the next batch execution.\n */\n constructor(\n concurrency: number,\n waiter: (cb: (...args: unknown[]) => unknown) => unknown = (cb) => cb(),\n ) {\n this.concurrency = concurrency;\n this.waiter = waiter;\n }\n\n /**\n * Add a task to the queue.\n */\n add(task: () => unknown) {\n const p = new Promise((resolve) => {\n this.tasks.push(() => resolve(task()));\n });\n this.scheduleFlush();\n return p;\n }\n\n /**\n * Schedule next flush.\n */\n scheduleFlush() {\n if (this.isScheduled) {\n return;\n }\n\n this.isScheduled = true;\n this.waiter(() => this.flush());\n }\n\n /**\n * Flush current batch.\n */\n flush() {\n this.run(this.tasks.splice(0, this.concurrency));\n this.isScheduled = false;\n\n if (this.tasks.length > 0) {\n this.scheduleFlush();\n }\n }\n\n /**\n * Run the queue.\n */\n run(tasks: Array<(...args: unknown[]) => unknown>) {\n let task;\n // eslint-disable-next-line no-cond-assign\n while ((task = tasks.shift())) {\n task();\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "AAGO,MAAM,MAAM;AAAA,EAIjB,QAAgD,CAAC;AAAA,EAKjD,cAAc;AAAA,EAKd;AAAA,EAKA,cAAc;AAAA,EAQd,YACE,aACA,SAA2D,CAAC,OAAO,GAAG,GACtE;AACA,SAAK,cAAc;AACnB,SAAK,SAAS;AAAA,EAChB;AAAA,EAKA,IAAI,MAAqB;AACvB,UAAM,IAAI,IAAI,QAAQ,CAAC,YAAY;AACjC,WAAK,MAAM,KAAK,MAAM,QAAQ,KAAK,CAAC,CAAC;AAAA,IACvC,CAAC;AACD,SAAK,cAAc;AACnB,WAAO;AAAA,EACT;AAAA,EAKA,gBAAgB;AACd,QAAI,KAAK,aAAa;AACpB;AAAA,IACF;AAEA,SAAK,cAAc;AACnB,SAAK,OAAO,MAAM,KAAK,MAAM,CAAC;AAAA,EAChC;AAAA,EAKA,QAAQ;AACN,SAAK,IAAI,KAAK,MAAM,OAAO,GAAG,KAAK,WAAW,CAAC;AAC/C,SAAK,cAAc;AAEnB,QAAI,KAAK,MAAM,SAAS,GAAG;AACzB,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAKA,IAAI,OAA+C;AACjD,QAAI;AAEJ,WAAQ,OAAO,MAAM,MAAM,GAAI;AAC7B,WAAK;AAAA,IACP;AAAA,EACF;AACF;",
|
|
5
|
+
"mappings": "AAGO,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA,EAIjB,QAAgD,CAAC;AAAA;AAAA;AAAA;AAAA,EAKjD,cAAc;AAAA;AAAA;AAAA;AAAA,EAKd;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQd,YACE,aACA,SAA2D,CAAC,OAAO,GAAG,GACtE;AACA,SAAK,cAAc;AACnB,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,MAAqB;AACvB,UAAM,IAAI,IAAI,QAAQ,CAAC,YAAY;AACjC,WAAK,MAAM,KAAK,MAAM,QAAQ,KAAK,CAAC,CAAC;AAAA,IACvC,CAAC;AACD,SAAK,cAAc;AACnB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB;AACd,QAAI,KAAK,aAAa;AACpB;AAAA,IACF;AAEA,SAAK,cAAc;AACnB,SAAK,OAAO,MAAM,KAAK,MAAM,CAAC;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ;AACN,SAAK,IAAI,KAAK,MAAM,OAAO,GAAG,KAAK,WAAW,CAAC;AAC/C,SAAK,cAAc;AAEnB,QAAI,KAAK,MAAM,SAAS,GAAG;AACzB,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAA+C;AACjD,QAAI;AAEJ,WAAQ,OAAO,MAAM,MAAM,GAAI;AAC7B,WAAK;AAAA,IACP;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/utils/SmartQueue.cjs
CHANGED
|
@@ -17,6 +17,10 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
17
|
return to;
|
|
18
18
|
};
|
|
19
19
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
20
24
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
25
|
mod
|
|
22
26
|
));
|
|
@@ -32,10 +36,19 @@ var import_Queue = require("./Queue.cjs");
|
|
|
32
36
|
var import_nextTick = __toESM(require("./nextTick.cjs"), 1);
|
|
33
37
|
var LONG_TASK_DURATION = 40;
|
|
34
38
|
var SmartQueue = class extends import_Queue.Queue {
|
|
39
|
+
/**
|
|
40
|
+
* A function to schedule the next batch.
|
|
41
|
+
*/
|
|
35
42
|
waiter = import_nextTick.default;
|
|
43
|
+
/**
|
|
44
|
+
* Class constructor.
|
|
45
|
+
*/
|
|
36
46
|
constructor() {
|
|
37
47
|
super(Number.POSITIVE_INFINITY, import_nextTick.default);
|
|
38
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Flush current batch.
|
|
51
|
+
*/
|
|
39
52
|
flush() {
|
|
40
53
|
this.run(this.tasks);
|
|
41
54
|
this.isScheduled = false;
|
|
@@ -43,6 +56,9 @@ var SmartQueue = class extends import_Queue.Queue {
|
|
|
43
56
|
this.scheduleFlush();
|
|
44
57
|
}
|
|
45
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* Run the queue.
|
|
61
|
+
*/
|
|
46
62
|
run(tasks) {
|
|
47
63
|
let task;
|
|
48
64
|
const start = performance.now();
|
package/utils/SmartQueue.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../packages/js-toolkit/utils/SmartQueue.ts"],
|
|
4
|
-
"sourcesContent": ["import { Queue } from './Queue.js';\nimport nextTick from './nextTick.js';\n\n/**\n * A task is considered long if it blocks the main thread for more thant 50ms.\n * By using 40ms as a limit, we make the bet that we can avoid long running\n * tasks by dispatching small tasks smartly.\n * @see https://developer.mozilla.org/en-US/docs/Glossary/Long_task\n */\nconst LONG_TASK_DURATION = 40;\n\n/**\n * Manage tasks in a smart queue.\n * Tasks will be automatically batch-called inside a single event loop\n * lasting no more than 50ms, which is considered a long task.\n */\nexport class SmartQueue extends Queue {\n /**\n * A function to schedule the next batch.\n */\n waiter = nextTick;\n\n /**\n * Class constructor.\n */\n constructor() {\n super(Number.POSITIVE_INFINITY, nextTick);\n }\n\n /**\n * Flush current batch.\n */\n flush() {\n this.run(this.tasks);\n this.isScheduled = false;\n\n if (this.tasks.length > 0) {\n this.scheduleFlush();\n }\n }\n\n /**\n * Run the queue.\n */\n run(tasks: Array<(...args: unknown[]) => unknown>) {\n let task;\n const start = performance.now();\n let now = start;\n // eslint-disable-next-line no-cond-assign\n while (now - start < LONG_TASK_DURATION && (task = tasks.shift())) {\n task();\n now = performance.now();\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { Queue } from './Queue.js';\nimport nextTick from './nextTick.js';\n\n/**\n * A task is considered long if it blocks the main thread for more thant 50ms.\n * By using 40ms as a limit, we make the bet that we can avoid long running\n * tasks by dispatching small tasks smartly.\n *\n * @see https://developer.mozilla.org/en-US/docs/Glossary/Long_task\n */\nconst LONG_TASK_DURATION = 40;\n\n/**\n * Manage tasks in a smart queue.\n * Tasks will be automatically batch-called inside a single event loop\n * lasting no more than 50ms, which is considered a long task.\n */\nexport class SmartQueue extends Queue {\n /**\n * A function to schedule the next batch.\n */\n waiter = nextTick;\n\n /**\n * Class constructor.\n */\n constructor() {\n super(Number.POSITIVE_INFINITY, nextTick);\n }\n\n /**\n * Flush current batch.\n */\n flush() {\n this.run(this.tasks);\n this.isScheduled = false;\n\n if (this.tasks.length > 0) {\n this.scheduleFlush();\n }\n }\n\n /**\n * Run the queue.\n */\n run(tasks: Array<(...args: unknown[]) => unknown>) {\n let task;\n const start = performance.now();\n let now = start;\n // eslint-disable-next-line no-cond-assign\n while (now - start < LONG_TASK_DURATION && (task = tasks.shift())) {\n task();\n now = performance.now();\n }\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAsB;AACtB,sBAAqB;AASrB,IAAM,qBAAqB;AAOpB,IAAM,aAAN,cAAyB,mBAAM;AAAA;AAAA;AAAA;AAAA,EAIpC,SAAS,gBAAAA;AAAA;AAAA;AAAA;AAAA,EAKT,cAAc;AACZ,UAAM,OAAO,mBAAmB,gBAAAA,OAAQ;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ;AACN,SAAK,IAAI,KAAK,KAAK;AACnB,SAAK,cAAc;AAEnB,QAAI,KAAK,MAAM,SAAS,GAAG;AACzB,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAA+C;AACjD,QAAI;AACJ,UAAM,QAAQ,YAAY,IAAI;AAC9B,QAAI,MAAM;AAEV,WAAO,MAAM,QAAQ,uBAAuB,OAAO,MAAM,MAAM,IAAI;AACjE,WAAK;AACL,YAAM,YAAY,IAAI;AAAA,IACxB;AAAA,EACF;AACF;",
|
|
6
6
|
"names": ["nextTick"]
|
|
7
7
|
}
|
package/utils/SmartQueue.js
CHANGED
|
@@ -2,10 +2,19 @@ import { Queue } from "./Queue.js";
|
|
|
2
2
|
import nextTick from "./nextTick.js";
|
|
3
3
|
const LONG_TASK_DURATION = 40;
|
|
4
4
|
class SmartQueue extends Queue {
|
|
5
|
+
/**
|
|
6
|
+
* A function to schedule the next batch.
|
|
7
|
+
*/
|
|
5
8
|
waiter = nextTick;
|
|
9
|
+
/**
|
|
10
|
+
* Class constructor.
|
|
11
|
+
*/
|
|
6
12
|
constructor() {
|
|
7
13
|
super(Number.POSITIVE_INFINITY, nextTick);
|
|
8
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Flush current batch.
|
|
17
|
+
*/
|
|
9
18
|
flush() {
|
|
10
19
|
this.run(this.tasks);
|
|
11
20
|
this.isScheduled = false;
|
|
@@ -13,6 +22,9 @@ class SmartQueue extends Queue {
|
|
|
13
22
|
this.scheduleFlush();
|
|
14
23
|
}
|
|
15
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Run the queue.
|
|
27
|
+
*/
|
|
16
28
|
run(tasks) {
|
|
17
29
|
let task;
|
|
18
30
|
const start = performance.now();
|
package/utils/SmartQueue.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../packages/js-toolkit/utils/SmartQueue.ts"],
|
|
4
|
-
"sourcesContent": ["import { Queue } from './Queue.js';\nimport nextTick from './nextTick.js';\n\n/**\n * A task is considered long if it blocks the main thread for more thant 50ms.\n * By using 40ms as a limit, we make the bet that we can avoid long running\n * tasks by dispatching small tasks smartly.\n * @see https://developer.mozilla.org/en-US/docs/Glossary/Long_task\n */\nconst LONG_TASK_DURATION = 40;\n\n/**\n * Manage tasks in a smart queue.\n * Tasks will be automatically batch-called inside a single event loop\n * lasting no more than 50ms, which is considered a long task.\n */\nexport class SmartQueue extends Queue {\n /**\n * A function to schedule the next batch.\n */\n waiter = nextTick;\n\n /**\n * Class constructor.\n */\n constructor() {\n super(Number.POSITIVE_INFINITY, nextTick);\n }\n\n /**\n * Flush current batch.\n */\n flush() {\n this.run(this.tasks);\n this.isScheduled = false;\n\n if (this.tasks.length > 0) {\n this.scheduleFlush();\n }\n }\n\n /**\n * Run the queue.\n */\n run(tasks: Array<(...args: unknown[]) => unknown>) {\n let task;\n const start = performance.now();\n let now = start;\n // eslint-disable-next-line no-cond-assign\n while (now - start < LONG_TASK_DURATION && (task = tasks.shift())) {\n task();\n now = performance.now();\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,aAAa;AACtB,OAAO,cAAc;
|
|
4
|
+
"sourcesContent": ["import { Queue } from './Queue.js';\nimport nextTick from './nextTick.js';\n\n/**\n * A task is considered long if it blocks the main thread for more thant 50ms.\n * By using 40ms as a limit, we make the bet that we can avoid long running\n * tasks by dispatching small tasks smartly.\n *\n * @see https://developer.mozilla.org/en-US/docs/Glossary/Long_task\n */\nconst LONG_TASK_DURATION = 40;\n\n/**\n * Manage tasks in a smart queue.\n * Tasks will be automatically batch-called inside a single event loop\n * lasting no more than 50ms, which is considered a long task.\n */\nexport class SmartQueue extends Queue {\n /**\n * A function to schedule the next batch.\n */\n waiter = nextTick;\n\n /**\n * Class constructor.\n */\n constructor() {\n super(Number.POSITIVE_INFINITY, nextTick);\n }\n\n /**\n * Flush current batch.\n */\n flush() {\n this.run(this.tasks);\n this.isScheduled = false;\n\n if (this.tasks.length > 0) {\n this.scheduleFlush();\n }\n }\n\n /**\n * Run the queue.\n */\n run(tasks: Array<(...args: unknown[]) => unknown>) {\n let task;\n const start = performance.now();\n let now = start;\n // eslint-disable-next-line no-cond-assign\n while (now - start < LONG_TASK_DURATION && (task = tasks.shift())) {\n task();\n now = performance.now();\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,aAAa;AACtB,OAAO,cAAc;AASrB,MAAM,qBAAqB;AAOpB,MAAM,mBAAmB,MAAM;AAAA;AAAA;AAAA;AAAA,EAIpC,SAAS;AAAA;AAAA;AAAA;AAAA,EAKT,cAAc;AACZ,UAAM,OAAO,mBAAmB,QAAQ;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ;AACN,SAAK,IAAI,KAAK,KAAK;AACnB,SAAK,cAAc;AAEnB,QAAI,KAAK,MAAM,SAAS,GAAG;AACzB,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAA+C;AACjD,QAAI;AACJ,UAAM,QAAQ,YAAY,IAAI;AAC9B,QAAI,MAAM;AAEV,WAAO,MAAM,QAAQ,uBAAuB,OAAO,MAAM,MAAM,IAAI;AACjE,WAAK;AACL,YAAM,YAAY,IAAI;AAAA,IACxB;AAAA,EACF;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -23,7 +23,10 @@ __export(collidePointRect_exports, {
|
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(collidePointRect_exports);
|
|
25
25
|
function collidePointRect(point, rect) {
|
|
26
|
-
return point.x >= rect.x &&
|
|
26
|
+
return point.x >= rect.x && // right of the left edge AND
|
|
27
|
+
point.x <= rect.x + rect.width && // left of the right edge AND
|
|
28
|
+
point.y >= rect.y && // below the top AND
|
|
29
|
+
point.y <= rect.y + rect.height;
|
|
27
30
|
}
|
|
28
31
|
if (module.exports.default) module.exports = module.exports.default;
|
|
29
32
|
//# sourceMappingURL=collidePointRect.cjs.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/js-toolkit/utils/collide/collidePointRect.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * @typedef {Object} Point\n * @property {number} x Point's x position\n * @property {number} y Point's y position\n */\n\n/**\n * @typedef {Object} Rect\n * @property {number} x Rectangle's x position\n * @property {number} y Rectangle's y position\n * @property {number} width Rectangle's width\n * @property {number} height Rectangle's height\n */\n\n/**\n * Test if a point collides with a rectangle.\n * Inspired by http://www.jeffreythompson.org/collision-detection/point-rect.php\n *\n * @param {Point} point Point\n * @param {Rect} rect Rectangle\n * @returns {boolean} Is the point inside the rectangle's bounds ?\n */\nexport default function collidePointRect(point, rect) {\n return (\n point.x >= rect.x && // right of the left edge AND\n point.x <= rect.x + rect.width && // left of the right edge AND\n point.y >= rect.y && // below the top AND\n point.y <= rect.y + rect.height // above the bottom\n );\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBe,SAAR,iBAAkC,OAAO,MAAM;AACpD,SACE,MAAM,KAAK,KAAK,
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBe,SAAR,iBAAkC,OAAO,MAAM;AACpD,SACE,MAAM,KAAK,KAAK;AAAA,EAChB,MAAM,KAAK,KAAK,IAAI,KAAK;AAAA,EACzB,MAAM,KAAK,KAAK;AAAA,EAChB,MAAM,KAAK,KAAK,IAAI,KAAK;AAE7B;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
function collidePointRect(point, rect) {
|
|
2
|
-
return point.x >= rect.x &&
|
|
2
|
+
return point.x >= rect.x && // right of the left edge AND
|
|
3
|
+
point.x <= rect.x + rect.width && // left of the right edge AND
|
|
4
|
+
point.y >= rect.y && // below the top AND
|
|
5
|
+
point.y <= rect.y + rect.height;
|
|
3
6
|
}
|
|
4
7
|
export {
|
|
5
8
|
collidePointRect as default
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/js-toolkit/utils/collide/collidePointRect.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * @typedef {Object} Point\n * @property {number} x Point's x position\n * @property {number} y Point's y position\n */\n\n/**\n * @typedef {Object} Rect\n * @property {number} x Rectangle's x position\n * @property {number} y Rectangle's y position\n * @property {number} width Rectangle's width\n * @property {number} height Rectangle's height\n */\n\n/**\n * Test if a point collides with a rectangle.\n * Inspired by http://www.jeffreythompson.org/collision-detection/point-rect.php\n *\n * @param {Point} point Point\n * @param {Rect} rect Rectangle\n * @returns {boolean} Is the point inside the rectangle's bounds ?\n */\nexport default function collidePointRect(point, rect) {\n return (\n point.x >= rect.x && // right of the left edge AND\n point.x <= rect.x + rect.width && // left of the right edge AND\n point.y >= rect.y && // below the top AND\n point.y <= rect.y + rect.height // above the bottom\n );\n}\n"],
|
|
5
|
-
"mappings": "AAsBe,SAAR,iBAAkC,OAAO,MAAM;AACpD,SACE,MAAM,KAAK,KAAK,
|
|
5
|
+
"mappings": "AAsBe,SAAR,iBAAkC,OAAO,MAAM;AACpD,SACE,MAAM,KAAK,KAAK;AAAA,EAChB,MAAM,KAAK,KAAK,IAAI,KAAK;AAAA,EACzB,MAAM,KAAK,KAAK;AAAA,EAChB,MAAM,KAAK,KAAK,IAAI,KAAK;AAE7B;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -23,7 +23,10 @@ __export(collideRectRect_exports, {
|
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(collideRectRect_exports);
|
|
25
25
|
function collideRectRect(rect1, rect2) {
|
|
26
|
-
return rect1.x + rect1.width >= rect2.x &&
|
|
26
|
+
return rect1.x + rect1.width >= rect2.x && // rect1 right edge past rect2 left AND
|
|
27
|
+
rect1.x <= rect2.x + rect2.width && // rect1 left edge past rect2 right AND
|
|
28
|
+
rect1.y + rect1.height >= rect2.y && // rect1 top edge past rect2 bottom AND
|
|
29
|
+
rect1.y <= rect2.y + rect2.height;
|
|
27
30
|
}
|
|
28
31
|
if (module.exports.default) module.exports = module.exports.default;
|
|
29
32
|
//# sourceMappingURL=collideRectRect.cjs.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/js-toolkit/utils/collide/collideRectRect.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * @typedef {Object} Rect\n * @property {number} x Rectangle's x position\n * @property {number} y Rectangle's y position\n * @property {number} width Rectangle's width\n * @property {number} height Rectangle's height\n */\n\n/**\n * Test if a rectangle collides with another rectangle.\n * Inspired by http://www.jeffreythompson.org/collision-detection/rect-rect.php\n *\n * @param {Rect} rect1 Rectangle 1\n * @param {Rect} rect2 Rectangle 2\n * @returns {boolean} Are the sides of one rectangle touching the other ?\n */\nexport default function collideRectRect(rect1, rect2) {\n return (\n rect1.x + rect1.width >= rect2.x && // rect1 right edge past rect2 left AND\n rect1.x <= rect2.x + rect2.width && // rect1 left edge past rect2 right AND\n rect1.y + rect1.height >= rect2.y && // rect1 top edge past rect2 bottom AND\n rect1.y <= rect2.y + rect2.height // rect1 bottom edge past rect2 top\n );\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBe,SAAR,gBAAiC,OAAO,OAAO;AACpD,SACE,MAAM,IAAI,MAAM,SAAS,MAAM,
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBe,SAAR,gBAAiC,OAAO,OAAO;AACpD,SACE,MAAM,IAAI,MAAM,SAAS,MAAM;AAAA,EAC/B,MAAM,KAAK,MAAM,IAAI,MAAM;AAAA,EAC3B,MAAM,IAAI,MAAM,UAAU,MAAM;AAAA,EAChC,MAAM,KAAK,MAAM,IAAI,MAAM;AAE/B;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
function collideRectRect(rect1, rect2) {
|
|
2
|
-
return rect1.x + rect1.width >= rect2.x &&
|
|
2
|
+
return rect1.x + rect1.width >= rect2.x && // rect1 right edge past rect2 left AND
|
|
3
|
+
rect1.x <= rect2.x + rect2.width && // rect1 left edge past rect2 right AND
|
|
4
|
+
rect1.y + rect1.height >= rect2.y && // rect1 top edge past rect2 bottom AND
|
|
5
|
+
rect1.y <= rect2.y + rect2.height;
|
|
3
6
|
}
|
|
4
7
|
export {
|
|
5
8
|
collideRectRect as default
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/js-toolkit/utils/collide/collideRectRect.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * @typedef {Object} Rect\n * @property {number} x Rectangle's x position\n * @property {number} y Rectangle's y position\n * @property {number} width Rectangle's width\n * @property {number} height Rectangle's height\n */\n\n/**\n * Test if a rectangle collides with another rectangle.\n * Inspired by http://www.jeffreythompson.org/collision-detection/rect-rect.php\n *\n * @param {Rect} rect1 Rectangle 1\n * @param {Rect} rect2 Rectangle 2\n * @returns {boolean} Are the sides of one rectangle touching the other ?\n */\nexport default function collideRectRect(rect1, rect2) {\n return (\n rect1.x + rect1.width >= rect2.x && // rect1 right edge past rect2 left AND\n rect1.x <= rect2.x + rect2.width && // rect1 left edge past rect2 right AND\n rect1.y + rect1.height >= rect2.y && // rect1 top edge past rect2 bottom AND\n rect1.y <= rect2.y + rect2.height // rect1 bottom edge past rect2 top\n );\n}\n"],
|
|
5
|
-
"mappings": "AAgBe,SAAR,gBAAiC,OAAO,OAAO;AACpD,SACE,MAAM,IAAI,MAAM,SAAS,MAAM,
|
|
5
|
+
"mappings": "AAgBe,SAAR,gBAAiC,OAAO,OAAO;AACpD,SACE,MAAM,IAAI,MAAM,SAAS,MAAM;AAAA,EAC/B,MAAM,KAAK,MAAM,IAAI,MAAM;AAAA,EAC3B,MAAM,IAAI,MAAM,UAAU,MAAM;AAAA,EAChC,MAAM,KAAK,MAAM,IAAI,MAAM;AAE/B;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/utils/collide/index.cjs
CHANGED
|
@@ -17,6 +17,10 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
17
|
return to;
|
|
18
18
|
};
|
|
19
19
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
20
24
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
25
|
mod
|
|
22
26
|
));
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/js-toolkit/utils/collide/index.ts"],
|
|
4
4
|
"sourcesContent": ["/**\n * Inspired by http://www.jeffreythompson.org/collision-detection/\n */\nexport { default as boundingRectToCircle } from './boundingRectToCircle.js';\nexport { default as collideCircleCircle } from './collideCircleCircle.js';\nexport { default as collideCircleRect } from './collideCircleRect.js';\nexport { default as collidePointCircle } from './collidePointCircle.js';\nexport { default as collidePointRect } from './collidePointRect.js';\nexport { default as collideRectRect } from './collideRectRect.js';\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kCAAgD;AAChD,iCAA+C;AAC/C,+BAA6C;AAC7C,gCAA8C;AAC9C,8BAA4C;AAC5C,6BAA2C;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/utils/css/animate.cjs
CHANGED
|
@@ -17,6 +17,10 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
17
|
return to;
|
|
18
18
|
};
|
|
19
19
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
20
24
|
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
25
|
mod
|
|
22
26
|
));
|
|
@@ -34,6 +38,7 @@ var import_transform = __toESM(require("./transform.cjs"), 1);
|
|
|
34
38
|
var import_scheduler = require("../scheduler.cjs");
|
|
35
39
|
var import_tween = require("../tween.cjs");
|
|
36
40
|
var import_utils = require("./utils.cjs");
|
|
41
|
+
var import_string = require("../string/index.cjs");
|
|
37
42
|
var id = 0;
|
|
38
43
|
var running = /* @__PURE__ */ new WeakMap();
|
|
39
44
|
var CSSUnitConverter = {
|
|
@@ -55,6 +60,7 @@ function getAnimationStepValue(val, getSizeRef) {
|
|
|
55
60
|
var generateTranslateRenderStrategy = (sizeRef) => (element, fromValue, toValue, progress) => (0, import_math.lerp)(
|
|
56
61
|
getAnimationStepValue(
|
|
57
62
|
fromValue ?? 0,
|
|
63
|
+
/* istanbul ignore next */
|
|
58
64
|
() => element[sizeRef]
|
|
59
65
|
),
|
|
60
66
|
getAnimationStepValue(toValue ?? 0, () => element[sizeRef]),
|
|
@@ -121,9 +127,9 @@ function render(element, from, to, progress) {
|
|
|
121
127
|
element.style.transformOrigin = transformOrigin;
|
|
122
128
|
}
|
|
123
129
|
if (customProperties !== false) {
|
|
124
|
-
|
|
130
|
+
for (const customProperty of customProperties) {
|
|
125
131
|
element.style.setProperty(customProperty[0], customProperty[1].toString());
|
|
126
|
-
}
|
|
132
|
+
}
|
|
127
133
|
}
|
|
128
134
|
(0, import_transform.default)(element, props);
|
|
129
135
|
});
|
|
@@ -136,7 +142,7 @@ function singleAnimate(element, keyframes, options = {}) {
|
|
|
136
142
|
...keyframe,
|
|
137
143
|
offset: keyframe.offset ?? index / keyframesCount,
|
|
138
144
|
easing: (0, import_tween.normalizeEase)(keyframe.easing),
|
|
139
|
-
vars: Object.keys(keyframe).filter((key2) =>
|
|
145
|
+
vars: Object.keys(keyframe).filter((key2) => (0, import_string.startsWith)(key2, "--"))
|
|
140
146
|
})
|
|
141
147
|
);
|
|
142
148
|
if (!running.has(element)) {
|
|
@@ -158,10 +164,10 @@ function singleAnimate(element, keyframes, options = {}) {
|
|
|
158
164
|
options.onStart();
|
|
159
165
|
}
|
|
160
166
|
const runningKeys = running.get(element);
|
|
161
|
-
runningKeys.
|
|
167
|
+
for (const [runningKey, runningPause] of runningKeys.entries()) {
|
|
162
168
|
runningPause();
|
|
163
169
|
runningKeys.delete(runningKey);
|
|
164
|
-
}
|
|
170
|
+
}
|
|
165
171
|
runningKeys.set(key, controls.pause);
|
|
166
172
|
running.set(element, runningKeys);
|
|
167
173
|
}
|
|
@@ -173,14 +179,17 @@ function animate(elementOrElements, keyframes, options = {}) {
|
|
|
173
179
|
elementOrElements,
|
|
174
180
|
(element) => singleAnimate(element, keyframes, options)
|
|
175
181
|
);
|
|
176
|
-
const delegate = (key) => (
|
|
177
|
-
|
|
178
|
-
|
|
182
|
+
const delegate = (key) => (
|
|
183
|
+
// eslint-disable-next-line consistent-return
|
|
184
|
+
(...args) => {
|
|
185
|
+
if (key === "progress" && args.length === 0) {
|
|
186
|
+
return controls[0][key]();
|
|
187
|
+
}
|
|
188
|
+
for (const control of controls) {
|
|
189
|
+
control[key](...args);
|
|
190
|
+
}
|
|
179
191
|
}
|
|
180
|
-
|
|
181
|
-
control[key](...args);
|
|
182
|
-
});
|
|
183
|
-
};
|
|
192
|
+
);
|
|
184
193
|
return {
|
|
185
194
|
start: delegate("start"),
|
|
186
195
|
pause: delegate("pause"),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/js-toolkit/utils/css/animate.ts"],
|
|
4
|
-
"sourcesContent": ["import { lerp, map } from '../math/index.js';\nimport { isDefined, isFunction, isNumber } from '../is.js';\nimport transform, { TRANSFORM_PROPS } from './transform.js';\nimport { domScheduler as scheduler } from '../scheduler.js';\nimport { tween, normalizeEase } from '../tween.js';\n// eslint-disable-next-line import/extensions\nimport { eachElements } from './utils.js';\nimport type { TransformProps } from './transform.js';\nimport type { EasingFunction } from '../math/index.js';\nimport type { BezierCurve, TweenOptions } from '../tween.js';\n\nexport type CSSCustomPropertyName = `--${string}`;\n\nexport type Keyframe = TransformProps & {\n opacity?: number;\n transformOrigin?: string;\n easing?: EasingFunction | BezierCurve;\n offset?: number;\n [key: CSSCustomPropertyName]: number;\n};\n\nexport type NormalizedKeyframe = Keyframe & {\n easing: EasingFunction;\n offset: number;\n vars: string[];\n};\n\nexport type Animate = {\n start: () => void;\n pause: () => void;\n play: () => void;\n finish: () => void;\n progress: (value?: number) => number;\n};\n\nlet id = 0;\nconst running = new WeakMap();\n\nconst CSSUnitConverter = {\n '%': (value, getSizeRef) => (value * getSizeRef()) / 100,\n vh: (value) => (value * window.innerHeight) / 100,\n vw: (value) => (value * window.innerWidth) / 100,\n vmin: (value) => (value * Math.min(window.innerWidth, window.innerHeight)) / 100,\n vmax: (value) => (value * Math.max(window.innerWidth, window.innerHeight)) / 100,\n};\n\n/**\n * Get the value from a step property.\n */\nfunction getAnimationStepValue(val: number | [number, string], getSizeRef: () => number): number {\n if (isNumber(val)) {\n return val;\n }\n\n if (!val[1] || !CSSUnitConverter[val[1]]) {\n return val[0];\n }\n\n return CSSUnitConverter[val[1]](val[0], getSizeRef);\n}\n\nconst generateTranslateRenderStrategy = (sizeRef) => (element, fromValue, toValue, progress) =>\n lerp(\n getAnimationStepValue(\n fromValue ?? 0,\n /* istanbul ignore next */\n () => element[sizeRef],\n ),\n getAnimationStepValue(toValue ?? 0, () => element[sizeRef]),\n progress,\n );\nconst widthBasedTranslateRenderStrategy = generateTranslateRenderStrategy('offsetWidth');\nconst heightBasedTranslateRenderStrategy = generateTranslateRenderStrategy('offsetHeight');\n\nconst generateLerpRenderStrategy = (defaultValue) => (element, fromValue, toValue, progress) =>\n lerp(fromValue ?? defaultValue, toValue ?? defaultValue, progress);\nconst scaleRenderStrategy = generateLerpRenderStrategy(1);\nconst degreesRenderStrategy = generateLerpRenderStrategy(0);\n\nconst transformRenderStrategies = {\n x: widthBasedTranslateRenderStrategy,\n y: heightBasedTranslateRenderStrategy,\n z: widthBasedTranslateRenderStrategy,\n scale: scaleRenderStrategy,\n scaleX: scaleRenderStrategy,\n scaleY: scaleRenderStrategy,\n scaleZ: scaleRenderStrategy,\n skew: degreesRenderStrategy,\n skewX: degreesRenderStrategy,\n skewY: degreesRenderStrategy,\n rotate: degreesRenderStrategy,\n rotateX: degreesRenderStrategy,\n rotateY: degreesRenderStrategy,\n rotateZ: degreesRenderStrategy,\n};\n\n/**\n * Render an element style based on 2 keyframes and a progress value.\n */\nfunction render(\n element: HTMLElement,\n from: NormalizedKeyframe,\n to: NormalizedKeyframe,\n progress: number,\n) {\n const stepProgress = to.easing(map(progress, from.offset, to.offset, 0, 1));\n\n scheduler.read(() => {\n let opacity: false | number | string = false;\n if (isDefined(from.opacity) || isDefined(to.opacity)) {\n opacity = map(stepProgress, 0, 1, from.opacity ?? 1, to.opacity ?? 1);\n } else if (element.style.opacity) {\n opacity = '';\n }\n\n let transformOrigin: false | string = false;\n if (isDefined(to.transformOrigin)) {\n transformOrigin = to.transformOrigin;\n } else if (element.style.transformOrigin) {\n transformOrigin = '';\n }\n\n let customProperties: false | [string, number][] = false;\n if (isDefined(from.vars) && isDefined(to.vars)) {\n customProperties = from.vars.map((customPropertyName) => {\n const customPropertyValue = lerp(\n from[customPropertyName],\n to[customPropertyName],\n stepProgress,\n );\n return [customPropertyName, customPropertyValue];\n });\n }\n\n const props = Object.fromEntries(\n TRANSFORM_PROPS.filter((name) => isDefined(from[name]) || isDefined(to[name])).map((name) => [\n name,\n transformRenderStrategies[name](element, from[name], to[name], stepProgress),\n ]),\n );\n scheduler.write(() => {\n if (opacity !== false) {\n // @ts-ignore\n element.style.opacity = opacity;\n }\n if (transformOrigin !== false) {\n element.style.transformOrigin = transformOrigin;\n }\n if (customProperties !== false) {\n
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { lerp, map } from '../math/index.js';\nimport { isDefined, isFunction, isNumber } from '../is.js';\nimport transform, { TRANSFORM_PROPS } from './transform.js';\nimport { domScheduler as scheduler } from '../scheduler.js';\nimport { tween, normalizeEase } from '../tween.js';\n// eslint-disable-next-line import/extensions\nimport { eachElements } from './utils.js';\nimport { startsWith } from '../string/index.js';\nimport type { TransformProps } from './transform.js';\nimport type { EasingFunction } from '../math/index.js';\nimport type { BezierCurve, TweenOptions } from '../tween.js';\n\nexport type CSSCustomPropertyName = `--${string}`;\n\nexport type Keyframe = TransformProps & {\n opacity?: number;\n transformOrigin?: string;\n easing?: EasingFunction | BezierCurve;\n offset?: number;\n [key: CSSCustomPropertyName]: number;\n};\n\nexport type NormalizedKeyframe = Keyframe & {\n easing: EasingFunction;\n offset: number;\n vars: string[];\n};\n\nexport type Animate = {\n start: () => void;\n pause: () => void;\n play: () => void;\n finish: () => void;\n progress: (value?: number) => number;\n};\n\nlet id = 0;\nconst running = new WeakMap();\n\nconst CSSUnitConverter = {\n '%': (value, getSizeRef) => (value * getSizeRef()) / 100,\n vh: (value) => (value * window.innerHeight) / 100,\n vw: (value) => (value * window.innerWidth) / 100,\n vmin: (value) => (value * Math.min(window.innerWidth, window.innerHeight)) / 100,\n vmax: (value) => (value * Math.max(window.innerWidth, window.innerHeight)) / 100,\n};\n\n/**\n * Get the value from a step property.\n */\nfunction getAnimationStepValue(val: number | [number, string], getSizeRef: () => number): number {\n if (isNumber(val)) {\n return val;\n }\n\n if (!val[1] || !CSSUnitConverter[val[1]]) {\n return val[0];\n }\n\n return CSSUnitConverter[val[1]](val[0], getSizeRef);\n}\n\nconst generateTranslateRenderStrategy = (sizeRef) => (element, fromValue, toValue, progress) =>\n lerp(\n getAnimationStepValue(\n fromValue ?? 0,\n /* istanbul ignore next */\n () => element[sizeRef],\n ),\n getAnimationStepValue(toValue ?? 0, () => element[sizeRef]),\n progress,\n );\nconst widthBasedTranslateRenderStrategy = generateTranslateRenderStrategy('offsetWidth');\nconst heightBasedTranslateRenderStrategy = generateTranslateRenderStrategy('offsetHeight');\n\nconst generateLerpRenderStrategy = (defaultValue) => (element, fromValue, toValue, progress) =>\n lerp(fromValue ?? defaultValue, toValue ?? defaultValue, progress);\nconst scaleRenderStrategy = generateLerpRenderStrategy(1);\nconst degreesRenderStrategy = generateLerpRenderStrategy(0);\n\nconst transformRenderStrategies = {\n x: widthBasedTranslateRenderStrategy,\n y: heightBasedTranslateRenderStrategy,\n z: widthBasedTranslateRenderStrategy,\n scale: scaleRenderStrategy,\n scaleX: scaleRenderStrategy,\n scaleY: scaleRenderStrategy,\n scaleZ: scaleRenderStrategy,\n skew: degreesRenderStrategy,\n skewX: degreesRenderStrategy,\n skewY: degreesRenderStrategy,\n rotate: degreesRenderStrategy,\n rotateX: degreesRenderStrategy,\n rotateY: degreesRenderStrategy,\n rotateZ: degreesRenderStrategy,\n};\n\n/**\n * Render an element style based on 2 keyframes and a progress value.\n */\nfunction render(\n element: HTMLElement,\n from: NormalizedKeyframe,\n to: NormalizedKeyframe,\n progress: number,\n) {\n const stepProgress = to.easing(map(progress, from.offset, to.offset, 0, 1));\n\n scheduler.read(() => {\n let opacity: false | number | string = false;\n if (isDefined(from.opacity) || isDefined(to.opacity)) {\n opacity = map(stepProgress, 0, 1, from.opacity ?? 1, to.opacity ?? 1);\n } else if (element.style.opacity) {\n opacity = '';\n }\n\n let transformOrigin: false | string = false;\n if (isDefined(to.transformOrigin)) {\n transformOrigin = to.transformOrigin;\n } else if (element.style.transformOrigin) {\n transformOrigin = '';\n }\n\n let customProperties: false | [string, number][] = false;\n if (isDefined(from.vars) && isDefined(to.vars)) {\n customProperties = from.vars.map((customPropertyName) => {\n const customPropertyValue = lerp(\n from[customPropertyName],\n to[customPropertyName],\n stepProgress,\n );\n return [customPropertyName, customPropertyValue];\n });\n }\n\n const props = Object.fromEntries(\n TRANSFORM_PROPS.filter((name) => isDefined(from[name]) || isDefined(to[name])).map((name) => [\n name,\n transformRenderStrategies[name](element, from[name], to[name], stepProgress),\n ]),\n );\n scheduler.write(() => {\n if (opacity !== false) {\n // @ts-ignore\n element.style.opacity = opacity;\n }\n if (transformOrigin !== false) {\n element.style.transformOrigin = transformOrigin;\n }\n if (customProperties !== false) {\n for (const customProperty of customProperties) {\n element.style.setProperty(customProperty[0], customProperty[1].toString());\n }\n }\n transform(element, props);\n });\n });\n}\n\n/**\n * Animate an element.\n */\nfunction singleAnimate(\n element: HTMLElement,\n keyframes: Keyframe[],\n options: TweenOptions = {},\n): Animate {\n const keyframesCount = keyframes.length - 1;\n const normalizedKeyframes = keyframes.map(\n (keyframe, index): NormalizedKeyframe => ({\n ...keyframe,\n offset: keyframe.offset ?? index / keyframesCount,\n easing: normalizeEase(keyframe.easing),\n vars: Object.keys(keyframe).filter((key) => startsWith(key, '--')),\n }),\n );\n\n if (!running.has(element)) {\n running.set(element, new Map());\n }\n\n const key = `animate-${id}`;\n id += 1;\n\n /**\n * Set the progress value.\n */\n function callback(progress: number) {\n let toIndex = 0;\n while (\n normalizedKeyframes[toIndex] &&\n normalizedKeyframes[toIndex].offset <= progress &&\n normalizedKeyframes[toIndex].offset !== 1\n ) {\n toIndex += 1;\n }\n\n render(element, normalizedKeyframes[toIndex - 1], normalizedKeyframes[toIndex], progress);\n }\n\n const controls = tween(callback, {\n ...options,\n onStart() {\n if (isFunction(options.onStart)) {\n options.onStart();\n }\n // Stop running instances\n const runningKeys = running.get(element);\n for (const [runningKey, runningPause] of runningKeys.entries()) {\n runningPause();\n runningKeys.delete(runningKey);\n }\n runningKeys.set(key, controls.pause);\n running.set(element, runningKeys);\n },\n });\n\n return controls;\n}\n\n/**\n * Animate one or more elements.\n */\nexport function animate(\n elementOrElements: HTMLElement | HTMLElement[] | NodeListOf<HTMLElement>,\n keyframes: Keyframe[],\n options: TweenOptions = {},\n): Animate {\n const controls = eachElements(elementOrElements, (element) =>\n singleAnimate(element, keyframes, options),\n );\n\n const delegate =\n (key) =>\n // eslint-disable-next-line consistent-return\n (...args) => {\n if (key === 'progress' && args.length === 0) {\n return controls[0][key]();\n }\n\n for (const control of controls) {\n control[key](...args);\n }\n };\n\n return {\n start: delegate('start'),\n pause: delegate('pause'),\n finish: delegate('finish'),\n play: delegate('play'),\n progress: delegate('progress'),\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["scheduler", "transform", "key"]
|
|
7
7
|
}
|
package/utils/css/animate.js
CHANGED
|
@@ -4,6 +4,7 @@ import transform, { TRANSFORM_PROPS } from "./transform.js";
|
|
|
4
4
|
import { domScheduler as scheduler } from "../scheduler.js";
|
|
5
5
|
import { tween, normalizeEase } from "../tween.js";
|
|
6
6
|
import { eachElements } from "./utils.js";
|
|
7
|
+
import { startsWith } from "../string/index.js";
|
|
7
8
|
let id = 0;
|
|
8
9
|
const running = /* @__PURE__ */ new WeakMap();
|
|
9
10
|
const CSSUnitConverter = {
|
|
@@ -25,6 +26,7 @@ function getAnimationStepValue(val, getSizeRef) {
|
|
|
25
26
|
const generateTranslateRenderStrategy = (sizeRef) => (element, fromValue, toValue, progress) => lerp(
|
|
26
27
|
getAnimationStepValue(
|
|
27
28
|
fromValue ?? 0,
|
|
29
|
+
/* istanbul ignore next */
|
|
28
30
|
() => element[sizeRef]
|
|
29
31
|
),
|
|
30
32
|
getAnimationStepValue(toValue ?? 0, () => element[sizeRef]),
|
|
@@ -91,9 +93,9 @@ function render(element, from, to, progress) {
|
|
|
91
93
|
element.style.transformOrigin = transformOrigin;
|
|
92
94
|
}
|
|
93
95
|
if (customProperties !== false) {
|
|
94
|
-
|
|
96
|
+
for (const customProperty of customProperties) {
|
|
95
97
|
element.style.setProperty(customProperty[0], customProperty[1].toString());
|
|
96
|
-
}
|
|
98
|
+
}
|
|
97
99
|
}
|
|
98
100
|
transform(element, props);
|
|
99
101
|
});
|
|
@@ -106,7 +108,7 @@ function singleAnimate(element, keyframes, options = {}) {
|
|
|
106
108
|
...keyframe,
|
|
107
109
|
offset: keyframe.offset ?? index / keyframesCount,
|
|
108
110
|
easing: normalizeEase(keyframe.easing),
|
|
109
|
-
vars: Object.keys(keyframe).filter((key2) =>
|
|
111
|
+
vars: Object.keys(keyframe).filter((key2) => startsWith(key2, "--"))
|
|
110
112
|
})
|
|
111
113
|
);
|
|
112
114
|
if (!running.has(element)) {
|
|
@@ -128,10 +130,10 @@ function singleAnimate(element, keyframes, options = {}) {
|
|
|
128
130
|
options.onStart();
|
|
129
131
|
}
|
|
130
132
|
const runningKeys = running.get(element);
|
|
131
|
-
runningKeys.
|
|
133
|
+
for (const [runningKey, runningPause] of runningKeys.entries()) {
|
|
132
134
|
runningPause();
|
|
133
135
|
runningKeys.delete(runningKey);
|
|
134
|
-
}
|
|
136
|
+
}
|
|
135
137
|
runningKeys.set(key, controls.pause);
|
|
136
138
|
running.set(element, runningKeys);
|
|
137
139
|
}
|
|
@@ -143,14 +145,17 @@ function animate(elementOrElements, keyframes, options = {}) {
|
|
|
143
145
|
elementOrElements,
|
|
144
146
|
(element) => singleAnimate(element, keyframes, options)
|
|
145
147
|
);
|
|
146
|
-
const delegate = (key) => (
|
|
147
|
-
|
|
148
|
-
|
|
148
|
+
const delegate = (key) => (
|
|
149
|
+
// eslint-disable-next-line consistent-return
|
|
150
|
+
(...args) => {
|
|
151
|
+
if (key === "progress" && args.length === 0) {
|
|
152
|
+
return controls[0][key]();
|
|
153
|
+
}
|
|
154
|
+
for (const control of controls) {
|
|
155
|
+
control[key](...args);
|
|
156
|
+
}
|
|
149
157
|
}
|
|
150
|
-
|
|
151
|
-
control[key](...args);
|
|
152
|
-
});
|
|
153
|
-
};
|
|
158
|
+
);
|
|
154
159
|
return {
|
|
155
160
|
start: delegate("start"),
|
|
156
161
|
pause: delegate("pause"),
|