@studiometa/js-toolkit 2.6.5 → 2.8.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/features.cjs +27 -0
- package/Base/features.cjs.map +7 -0
- package/Base/features.d.ts +2 -0
- package/Base/features.js +5 -0
- package/Base/features.js.map +7 -0
- package/Base/index.cjs +12 -15
- package/Base/index.cjs.map +2 -2
- package/Base/index.d.ts +11 -15
- package/Base/index.js +10 -6
- package/Base/index.js.map +2 -2
- package/Base/managers/AsyncChildrenManager.cjs +61 -0
- package/Base/managers/AsyncChildrenManager.cjs.map +7 -0
- package/Base/managers/AsyncChildrenManager.d.ts +18 -0
- package/Base/managers/AsyncChildrenManager.js +39 -0
- package/Base/managers/AsyncChildrenManager.js.map +7 -0
- package/Base/managers/ChildrenManager.cjs +32 -29
- package/Base/managers/ChildrenManager.cjs.map +2 -2
- package/Base/managers/ChildrenManager.d.ts +21 -1
- package/Base/managers/ChildrenManager.js +32 -29
- package/Base/managers/ChildrenManager.js.map +2 -2
- package/Base/managers/EventsManager.cjs.map +2 -2
- package/Base/managers/EventsManager.js.map +2 -2
- package/Base/managers/OptionsManager.d.ts +9 -9
- package/Base/managers/RefsManager.cjs +13 -8
- package/Base/managers/RefsManager.cjs.map +2 -2
- package/Base/managers/RefsManager.js +14 -9
- package/Base/managers/RefsManager.js.map +2 -2
- package/Base/managers/ResponsiveOptionsManager.d.ts +1 -1
- package/Base/managers/ServicesManager.d.ts +2 -2
- package/Base/managers/index.cjs +41 -0
- package/Base/managers/index.cjs.map +7 -0
- package/Base/managers/index.d.ts +8 -0
- package/Base/managers/index.js +19 -0
- package/Base/managers/index.js.map +7 -0
- package/Base/types.cjs.map +1 -1
- package/Base/types.d.ts +1 -1
- package/Base/utils.cjs +15 -1
- package/Base/utils.cjs.map +2 -2
- package/Base/utils.d.ts +1 -0
- package/Base/utils.js +15 -1
- package/Base/utils.js.map +2 -2
- package/decorators/index.cjs +1 -1
- package/decorators/index.cjs.map +2 -2
- package/decorators/index.d.ts +1 -1
- package/decorators/index.js +1 -1
- package/decorators/index.js.map +1 -1
- package/decorators/withBreakpointManager.cjs.map +2 -2
- package/decorators/withBreakpointManager.js.map +2 -2
- package/decorators/withBreakpointObserver.cjs.map +2 -2
- package/decorators/withBreakpointObserver.js.map +2 -2
- package/decorators/withDrag.cjs.map +2 -2
- package/decorators/withDrag.d.ts +1 -1
- package/decorators/withDrag.js.map +2 -2
- package/decorators/withMountWhenInView.cjs.map +2 -2
- package/decorators/withMountWhenInView.js.map +2 -2
- package/decorators/withResponsiveOptions.cjs.map +2 -2
- package/decorators/withResponsiveOptions.js.map +2 -2
- package/decorators/withScrolledInView/index.cjs +22 -0
- package/decorators/withScrolledInView/index.cjs.map +7 -0
- package/decorators/withScrolledInView/index.d.ts +2 -0
- package/decorators/withScrolledInView/index.js +3 -0
- package/decorators/withScrolledInView/index.js.map +7 -0
- package/decorators/withScrolledInView/types.cjs +19 -0
- package/decorators/withScrolledInView/types.cjs.map +7 -0
- package/decorators/withScrolledInView/types.d.ts +2 -0
- package/decorators/withScrolledInView/types.js +1 -0
- package/decorators/withScrolledInView/types.js.map +7 -0
- package/decorators/withScrolledInView/utils.cjs +99 -0
- package/decorators/withScrolledInView/utils.cjs.map +7 -0
- package/decorators/withScrolledInView/utils.d.ts +17 -0
- package/decorators/withScrolledInView/utils.js +77 -0
- package/decorators/withScrolledInView/utils.js.map +7 -0
- package/decorators/{withScrolledInView.cjs → withScrolledInView/withScrolledInView.cjs} +25 -10
- package/decorators/withScrolledInView/withScrolledInView.cjs.map +7 -0
- package/decorators/{withScrolledInView.d.ts → withScrolledInView/withScrolledInView.d.ts} +6 -5
- package/decorators/{withScrolledInView.js → withScrolledInView/withScrolledInView.js} +31 -9
- package/decorators/withScrolledInView/withScrolledInView.js.map +7 -0
- package/decorators/withVue2.cjs.map +2 -2
- package/decorators/withVue2.js.map +2 -2
- package/helpers/createApp.cjs +23 -19
- package/helpers/createApp.cjs.map +2 -2
- package/helpers/createApp.d.ts +6 -1
- package/helpers/createApp.js +23 -19
- package/helpers/createApp.js.map +2 -2
- package/helpers/getClosestParent.cjs +3 -11
- package/helpers/getClosestParent.cjs.map +2 -2
- package/helpers/getClosestParent.js +3 -11
- package/helpers/getClosestParent.js.map +2 -2
- package/helpers/getInstanceFromElement.cjs.map +2 -2
- package/helpers/getInstanceFromElement.js.map +2 -2
- package/helpers/importOnInteraction.cjs.map +2 -2
- package/helpers/importOnInteraction.js.map +2 -2
- package/helpers/importWhenIdle.cjs.map +2 -2
- package/helpers/importWhenIdle.d.ts +1 -1
- package/helpers/importWhenIdle.js.map +2 -2
- package/index.cjs.map +1 -1
- package/index.d.ts +1 -1
- package/index.js.map +1 -1
- package/package.json +2 -2
- package/services/drag.cjs +1 -1
- package/services/drag.cjs.map +3 -3
- package/services/drag.d.ts +21 -24
- package/services/drag.js.map +3 -3
- package/services/index.d.ts +7 -7
- package/services/key.cjs +1 -1
- package/services/key.cjs.map +3 -3
- package/services/key.d.ts +8 -9
- package/services/key.js.map +3 -3
- package/services/load.cjs +1 -1
- package/services/load.cjs.map +3 -3
- package/services/load.d.ts +6 -5
- package/services/load.js.map +3 -3
- package/services/pointer.cjs +1 -1
- package/services/pointer.cjs.map +3 -3
- package/services/pointer.d.ts +10 -10
- package/services/pointer.js.map +3 -3
- package/services/raf.cjs +4 -4
- package/services/raf.cjs.map +3 -3
- package/services/raf.d.ts +6 -7
- package/services/raf.js +3 -3
- package/services/raf.js.map +3 -3
- package/services/resize.cjs +1 -1
- package/services/resize.cjs.map +3 -3
- package/services/resize.d.ts +8 -9
- package/services/resize.js.map +3 -3
- package/services/scroll.cjs +1 -1
- package/services/scroll.cjs.map +3 -3
- package/services/scroll.d.ts +16 -17
- package/services/scroll.js.map +3 -3
- package/services/service.cjs +2 -2
- package/services/service.cjs.map +3 -3
- package/services/service.d.ts +12 -14
- package/services/service.js +1 -1
- package/services/service.js.map +3 -3
- package/utils/Queue.cjs +60 -0
- package/utils/Queue.cjs.map +7 -0
- package/utils/Queue.d.ts +44 -0
- package/utils/Queue.js +38 -0
- package/utils/Queue.js.map +7 -0
- package/utils/collide/boundingRectToCircle.cjs +3 -2
- package/utils/collide/boundingRectToCircle.cjs.map +3 -3
- package/utils/collide/boundingRectToCircle.d.ts +8 -13
- package/utils/collide/boundingRectToCircle.js +2 -1
- package/utils/collide/boundingRectToCircle.js.map +3 -3
- package/utils/collide/collideCircleCircle.cjs +1 -1
- package/utils/collide/collideCircleCircle.cjs.map +1 -1
- package/utils/collide/collideCircleCircle.d.ts +1 -15
- package/utils/collide/collideCircleCircle.js.map +1 -1
- package/utils/collide/collideCircleRect.cjs +1 -1
- package/utils/collide/collideCircleRect.cjs.map +1 -1
- package/utils/collide/collideCircleRect.d.ts +1 -33
- package/utils/collide/collideCircleRect.js.map +1 -1
- package/utils/collide/collidePointCircle.cjs +1 -1
- package/utils/collide/collidePointCircle.cjs.map +1 -1
- package/utils/collide/collidePointCircle.d.ts +1 -25
- package/utils/collide/collidePointCircle.js.map +1 -1
- package/utils/collide/collidePointRect.cjs +1 -1
- package/utils/collide/collidePointRect.cjs.map +1 -1
- package/utils/collide/collidePointRect.d.ts +1 -29
- package/utils/collide/collidePointRect.js.map +1 -1
- package/utils/collide/collideRectRect.cjs +1 -1
- package/utils/collide/collideRectRect.cjs.map +1 -1
- package/utils/collide/collideRectRect.d.ts +1 -19
- package/utils/collide/collideRectRect.js.map +1 -1
- package/utils/collide/index.cjs +1 -1
- package/utils/collide/index.cjs.map +1 -1
- package/utils/collide/index.d.ts +9 -6
- package/utils/collide/index.js.map +1 -1
- package/utils/css/animate.cjs +32 -16
- package/utils/css/animate.cjs.map +4 -4
- package/utils/css/animate.d.ts +12 -11
- package/utils/css/animate.js +31 -15
- package/utils/css/animate.js.map +4 -4
- package/utils/css/classes.cjs +1 -1
- package/utils/css/classes.cjs.map +3 -3
- package/utils/css/classes.d.ts +3 -16
- package/utils/css/classes.js.map +3 -3
- package/utils/css/getOffsetSizes.cjs +2 -2
- package/utils/css/getOffsetSizes.cjs.map +3 -3
- package/utils/css/getOffsetSizes.d.ts +0 -2
- package/utils/css/getOffsetSizes.js +1 -1
- package/utils/css/getOffsetSizes.js.map +3 -3
- package/utils/css/matrix.cjs +1 -1
- package/utils/css/matrix.cjs.map +3 -3
- package/utils/css/matrix.d.ts +10 -8
- package/utils/css/matrix.js.map +3 -3
- package/utils/css/styles.cjs +1 -1
- package/utils/css/styles.cjs.map +3 -3
- package/utils/css/styles.d.ts +2 -10
- package/utils/css/styles.js.map +3 -3
- package/utils/css/transform.cjs +1 -1
- package/utils/css/transform.cjs.map +3 -3
- package/utils/css/transform.d.ts +5 -27
- package/utils/css/transform.js.map +3 -3
- package/utils/css/transition.cjs +2 -2
- package/utils/css/transition.cjs.map +3 -3
- package/utils/css/transition.d.ts +11 -15
- package/utils/css/transition.js +1 -1
- package/utils/css/transition.js.map +3 -3
- package/utils/debounce.cjs +1 -1
- package/utils/debounce.cjs.map +3 -3
- package/utils/debounce.d.ts +3 -3
- package/utils/debounce.js.map +3 -3
- package/utils/dom/ancestors.cjs +37 -0
- package/utils/dom/ancestors.cjs.map +7 -0
- package/utils/dom/ancestors.d.ts +8 -0
- package/utils/dom/ancestors.js +15 -0
- package/utils/dom/ancestors.js.map +7 -0
- package/utils/dom/index.cjs +21 -0
- package/utils/dom/index.cjs.map +7 -0
- package/utils/dom/index.d.ts +1 -0
- package/utils/dom/index.js +2 -0
- package/utils/dom/index.js.map +7 -0
- package/utils/focusTrap.cjs +4 -2
- package/utils/focusTrap.cjs.map +3 -3
- package/utils/focusTrap.d.ts +3 -4
- package/utils/focusTrap.js +3 -1
- package/utils/focusTrap.js.map +3 -3
- package/utils/has.cjs +1 -1
- package/utils/has.cjs.map +3 -3
- package/utils/has.d.ts +1 -3
- package/utils/has.js.map +3 -3
- package/utils/history.cjs +1 -1
- package/utils/history.cjs.map +3 -3
- package/utils/history.d.ts +10 -10
- package/utils/history.js.map +3 -3
- package/utils/index.cjs +3 -0
- package/utils/index.cjs.map +2 -2
- package/utils/index.d.ts +2 -0
- package/utils/index.js +3 -0
- package/utils/index.js.map +2 -2
- package/utils/is.cjs +2 -2
- package/utils/is.cjs.map +3 -3
- package/utils/is.d.ts +26 -8
- package/utils/is.js +1 -1
- package/utils/is.js.map +3 -3
- package/utils/keyCodes.cjs +1 -1
- package/utils/keyCodes.cjs.map +2 -2
- package/utils/keyCodes.d.ts +10 -10
- package/utils/keyCodes.js.map +2 -2
- package/utils/math/clamp.cjs +1 -1
- package/utils/math/clamp.cjs.map +3 -3
- package/utils/math/clamp.js.map +3 -3
- package/utils/math/clamp01.cjs +1 -1
- package/utils/math/clamp01.cjs.map +3 -3
- package/utils/math/clamp01.js.map +3 -3
- package/utils/math/createEases.cjs +1 -1
- package/utils/math/createEases.cjs.map +3 -3
- package/utils/math/createEases.d.ts +3 -6
- package/utils/math/createEases.js.map +3 -3
- package/utils/math/damp.cjs +1 -1
- package/utils/math/damp.cjs.map +3 -3
- package/utils/math/damp.js.map +3 -3
- package/utils/math/ease.cjs +1 -1
- package/utils/math/ease.cjs.map +3 -3
- package/utils/math/ease.d.ts +21 -21
- package/utils/math/ease.js.map +3 -3
- package/utils/math/index.cjs +1 -1
- package/utils/math/index.cjs.map +1 -1
- package/utils/math/index.d.ts +10 -10
- package/utils/math/index.js.map +1 -1
- package/utils/math/inertiaFinalValue.cjs +1 -1
- package/utils/math/inertiaFinalValue.cjs.map +3 -3
- package/utils/math/inertiaFinalValue.js.map +3 -3
- package/utils/math/lerp.cjs +1 -1
- package/utils/math/lerp.cjs.map +3 -3
- package/utils/math/lerp.js.map +3 -3
- package/utils/math/map.cjs +1 -1
- package/utils/math/map.cjs.map +3 -3
- package/utils/math/map.js.map +3 -3
- package/utils/math/round.cjs +1 -1
- package/utils/math/round.cjs.map +3 -3
- package/utils/math/round.js.map +3 -3
- package/utils/memoize.cjs +6 -2
- package/utils/memoize.cjs.map +3 -3
- package/utils/memoize.d.ts +18 -28
- package/utils/memoize.js +5 -1
- package/utils/memoize.js.map +3 -3
- package/utils/nextFrame.cjs +1 -1
- package/utils/nextFrame.cjs.map +3 -3
- package/utils/nextFrame.d.ts +3 -6
- package/utils/nextFrame.js.map +3 -3
- package/utils/nextMicrotask.cjs +1 -1
- package/utils/nextMicrotask.cjs.map +3 -3
- package/utils/nextMicrotask.d.ts +1 -5
- package/utils/nextMicrotask.js.map +3 -3
- package/utils/nextTick.cjs +5 -5
- package/utils/nextTick.cjs.map +3 -3
- package/utils/nextTick.d.ts +1 -5
- package/utils/nextTick.js +4 -4
- package/utils/nextTick.js.map +3 -3
- package/utils/noop.cjs +1 -1
- package/utils/noop.cjs.map +3 -3
- package/utils/noop.d.ts +2 -5
- package/utils/noop.js.map +3 -3
- package/utils/object/autoBind.cjs +1 -1
- package/utils/object/autoBind.cjs.map +3 -3
- package/utils/object/autoBind.d.ts +5 -4
- package/utils/object/autoBind.js.map +3 -3
- package/utils/object/getAllProperties.cjs +3 -3
- package/utils/object/getAllProperties.cjs.map +3 -3
- package/utils/object/getAllProperties.d.ts +1 -1
- package/utils/object/getAllProperties.js +2 -2
- package/utils/object/getAllProperties.js.map +3 -3
- package/utils/object/index.cjs +1 -1
- package/utils/object/index.cjs.map +1 -1
- package/utils/object/index.d.ts +2 -2
- package/utils/object/index.js.map +1 -1
- package/utils/scheduler.cjs +2 -2
- package/utils/scheduler.cjs.map +3 -3
- package/utils/scheduler.d.ts +4 -13
- package/utils/scheduler.js +1 -1
- package/utils/scheduler.js.map +3 -3
- package/utils/scrollTo.cjs +1 -1
- package/utils/scrollTo.cjs.map +3 -3
- package/utils/scrollTo.d.ts +0 -3
- package/utils/scrollTo.js.map +3 -3
- package/utils/string/index.cjs +1 -1
- package/utils/string/index.cjs.map +1 -1
- package/utils/string/index.d.ts +10 -10
- package/utils/string/index.js.map +1 -1
- package/utils/string/withLeadingCharacters.cjs +1 -1
- package/utils/string/withLeadingCharacters.cjs.map +3 -3
- package/utils/string/withLeadingCharacters.js.map +3 -3
- package/utils/string/withLeadingSlash.cjs +1 -1
- package/utils/string/withLeadingSlash.cjs.map +3 -3
- package/utils/string/withLeadingSlash.js.map +3 -3
- package/utils/string/withTrailingCharacters.cjs +1 -1
- package/utils/string/withTrailingCharacters.cjs.map +3 -3
- package/utils/string/withTrailingCharacters.js.map +3 -3
- package/utils/string/withTrailingSlash.cjs +1 -1
- package/utils/string/withTrailingSlash.cjs.map +3 -3
- package/utils/string/withTrailingSlash.js.map +3 -3
- package/utils/string/withoutLeadingCharacters.cjs +1 -1
- package/utils/string/withoutLeadingCharacters.cjs.map +3 -3
- package/utils/string/withoutLeadingCharacters.js.map +3 -3
- package/utils/string/withoutLeadingCharactersRecursive.cjs +1 -1
- package/utils/string/withoutLeadingCharactersRecursive.cjs.map +3 -3
- package/utils/string/withoutLeadingCharactersRecursive.js.map +3 -3
- package/utils/string/withoutLeadingSlash.cjs +1 -1
- package/utils/string/withoutLeadingSlash.cjs.map +3 -3
- package/utils/string/withoutLeadingSlash.js.map +3 -3
- package/utils/string/withoutTrailingCharacters.cjs +1 -1
- package/utils/string/withoutTrailingCharacters.cjs.map +3 -3
- package/utils/string/withoutTrailingCharacters.js.map +3 -3
- package/utils/string/withoutTrailingCharactersRecursive.cjs +1 -1
- package/utils/string/withoutTrailingCharactersRecursive.cjs.map +3 -3
- package/utils/string/withoutTrailingCharactersRecursive.js.map +3 -3
- package/utils/string/withoutTrailingSlash.cjs +1 -1
- package/utils/string/withoutTrailingSlash.cjs.map +3 -3
- package/utils/string/withoutTrailingSlash.js.map +3 -3
- package/utils/throttle.cjs +2 -2
- package/utils/throttle.cjs.map +3 -3
- package/utils/throttle.d.ts +1 -1
- package/utils/throttle.js +1 -1
- package/utils/throttle.js.map +3 -3
- package/utils/tween.cjs +4 -3
- package/utils/tween.cjs.map +3 -3
- package/utils/tween.d.ts +17 -24
- package/utils/tween.js +3 -2
- package/utils/tween.js.map +3 -3
- package/decorators/withScrolledInView.cjs.map +0 -7
- package/decorators/withScrolledInView.js.map +0 -7
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../packages/js-toolkit/utils/collide/collideCircleRect.
|
|
3
|
+
"sources": ["../../../packages/js-toolkit/utils/collide/collideCircleRect.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 * @typedef {Object} Circle\n * @property {number} x Circle's x position\n * @property {number} y Circle's y position\n * @property {number} radius Circle's radius\n */\n\n/**\n * Test if a circle collides with a rectangle.\n * Inspired by http://www.jeffreythompson.org/collision-detection/circle-rect.php\n *\n * @param {Circle} circle Circle\n * @param {Rect} rect Rectangle\n * @returns {boolean} Are the sides of the circle touching the rectangle ?\n */\nexport default function collideCircleRect(circle, rect) {\n // temporary variables to set edges for testing\n let testX = circle.x;\n let testY = circle.y;\n\n // which edge is closest?\n if (circle.x < rect.x) {\n testX = rect.x; // test left edge\n } else if (circle.x > rect.x + rect.width) {\n testX = rect.x + rect.width; // right edge\n }\n\n if (circle.y < rect.y) {\n testY = rect.y; // top edge\n } else if (circle.y > rect.y + rect.height) {\n testY = rect.y + rect.height; // bottom edge\n }\n\n // get distance from closest edges\n const distX = circle.x - testX;\n const distY = circle.y - testY;\n const distance = Math.sqrt(distX * distX + distY * distY);\n\n // if the distance is less than the radius, collision!\n if (distance <= circle.radius) {\n return true;\n }\n return false;\n}\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBe,SAAR,kBAAmC,QAAQ,MAAM;AAEtD,MAAI,QAAQ,OAAO;AACnB,MAAI,QAAQ,OAAO;AAGnB,MAAI,OAAO,IAAI,KAAK,GAAG;AACrB,YAAQ,KAAK;AAAA,EACf,WAAW,OAAO,IAAI,KAAK,IAAI,KAAK,OAAO;AACzC,YAAQ,KAAK,IAAI,KAAK;AAAA,EACxB;AAEA,MAAI,OAAO,IAAI,KAAK,GAAG;AACrB,YAAQ,KAAK;AAAA,EACf,WAAW,OAAO,IAAI,KAAK,IAAI,KAAK,QAAQ;AAC1C,YAAQ,KAAK,IAAI,KAAK;AAAA,EACxB;AAGA,QAAM,QAAQ,OAAO,IAAI;AACzB,QAAM,QAAQ,OAAO,IAAI;AACzB,QAAM,WAAW,KAAK,KAAK,QAAQ,QAAQ,QAAQ,KAAK;AAGxD,MAAI,YAAY,OAAO,QAAQ;AAC7B,WAAO;AAAA,EACT;AACA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
@@ -19,36 +19,4 @@
|
|
|
19
19
|
* @param {Rect} rect Rectangle
|
|
20
20
|
* @returns {boolean} Are the sides of the circle touching the rectangle ?
|
|
21
21
|
*/
|
|
22
|
-
export default function collideCircleRect(circle:
|
|
23
|
-
export type Rect = {
|
|
24
|
-
/**
|
|
25
|
-
* Rectangle's x position
|
|
26
|
-
*/
|
|
27
|
-
x: number;
|
|
28
|
-
/**
|
|
29
|
-
* Rectangle's y position
|
|
30
|
-
*/
|
|
31
|
-
y: number;
|
|
32
|
-
/**
|
|
33
|
-
* Rectangle's width
|
|
34
|
-
*/
|
|
35
|
-
width: number;
|
|
36
|
-
/**
|
|
37
|
-
* Rectangle's height
|
|
38
|
-
*/
|
|
39
|
-
height: number;
|
|
40
|
-
};
|
|
41
|
-
export type Circle = {
|
|
42
|
-
/**
|
|
43
|
-
* Circle's x position
|
|
44
|
-
*/
|
|
45
|
-
x: number;
|
|
46
|
-
/**
|
|
47
|
-
* Circle's y position
|
|
48
|
-
*/
|
|
49
|
-
y: number;
|
|
50
|
-
/**
|
|
51
|
-
* Circle's radius
|
|
52
|
-
*/
|
|
53
|
-
radius: number;
|
|
54
|
-
};
|
|
22
|
+
export default function collideCircleRect(circle: any, rect: any): boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../packages/js-toolkit/utils/collide/collideCircleRect.
|
|
3
|
+
"sources": ["../../../packages/js-toolkit/utils/collide/collideCircleRect.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 * @typedef {Object} Circle\n * @property {number} x Circle's x position\n * @property {number} y Circle's y position\n * @property {number} radius Circle's radius\n */\n\n/**\n * Test if a circle collides with a rectangle.\n * Inspired by http://www.jeffreythompson.org/collision-detection/circle-rect.php\n *\n * @param {Circle} circle Circle\n * @param {Rect} rect Rectangle\n * @returns {boolean} Are the sides of the circle touching the rectangle ?\n */\nexport default function collideCircleRect(circle, rect) {\n // temporary variables to set edges for testing\n let testX = circle.x;\n let testY = circle.y;\n\n // which edge is closest?\n if (circle.x < rect.x) {\n testX = rect.x; // test left edge\n } else if (circle.x > rect.x + rect.width) {\n testX = rect.x + rect.width; // right edge\n }\n\n if (circle.y < rect.y) {\n testY = rect.y; // top edge\n } else if (circle.y > rect.y + rect.height) {\n testY = rect.y + rect.height; // bottom edge\n }\n\n // get distance from closest edges\n const distX = circle.x - testX;\n const distY = circle.y - testY;\n const distance = Math.sqrt(distX * distX + distY * distY);\n\n // if the distance is less than the radius, collision!\n if (distance <= circle.radius) {\n return true;\n }\n return false;\n}\n"],
|
|
5
5
|
"mappings": "AAuBe,SAAR,kBAAmC,QAAQ,MAAM;AAEtD,MAAI,QAAQ,OAAO;AACnB,MAAI,QAAQ,OAAO;AAGnB,MAAI,OAAO,IAAI,KAAK,GAAG;AACrB,YAAQ,KAAK;AAAA,EACf,WAAW,OAAO,IAAI,KAAK,IAAI,KAAK,OAAO;AACzC,YAAQ,KAAK,IAAI,KAAK;AAAA,EACxB;AAEA,MAAI,OAAO,IAAI,KAAK,GAAG;AACrB,YAAQ,KAAK;AAAA,EACf,WAAW,OAAO,IAAI,KAAK,IAAI,KAAK,QAAQ;AAC1C,YAAQ,KAAK,IAAI,KAAK;AAAA,EACxB;AAGA,QAAM,QAAQ,OAAO,IAAI;AACzB,QAAM,QAAQ,OAAO,IAAI;AACzB,QAAM,WAAW,KAAK,KAAK,QAAQ,QAAQ,QAAQ,KAAK;AAGxD,MAAI,YAAY,OAAO,QAAQ;AAC7B,WAAO;AAAA,EACT;AACA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
@@ -16,7 +16,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
};
|
|
17
17
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
18
|
|
|
19
|
-
// packages/js-toolkit/utils/collide/collidePointCircle.
|
|
19
|
+
// packages/js-toolkit/utils/collide/collidePointCircle.ts
|
|
20
20
|
var collidePointCircle_exports = {};
|
|
21
21
|
__export(collidePointCircle_exports, {
|
|
22
22
|
default: () => collidePointCircle
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../packages/js-toolkit/utils/collide/collidePointCircle.
|
|
3
|
+
"sources": ["../../../packages/js-toolkit/utils/collide/collidePointCircle.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} Circle\n * @property {number} x Circle's x position\n * @property {number} y Circle's y position\n * @property {number} radius Circle's radius\n */\n\n/**\n * Test if a point is inside a circle.\n * Inspired by http://www.jeffreythompson.org/collision-detection/point-circle.php\n *\n * @param {Point} point Point\n * @param {Circle} circle Circle\n * @returns {boolean} Is the point inside the circle's bounds ?\n */\nexport default function collidePointCircle(point, circle) {\n // get distance between the point and circle's center\n // using the Pythagorean Theorem\n const distX = point.x - circle.x;\n const distY = point.y - circle.y;\n const distance = Math.sqrt(distX * distX + distY * distY);\n\n // if the distance is less than the circle's\n // radius the point is inside!\n return distance <= circle.radius;\n}\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBe,SAAR,mBAAoC,OAAO,QAAQ;AAGxD,QAAM,QAAQ,MAAM,IAAI,OAAO;AAC/B,QAAM,QAAQ,MAAM,IAAI,OAAO;AAC/B,QAAM,WAAW,KAAK,KAAK,QAAQ,QAAQ,QAAQ,KAAK;AAIxD,SAAO,YAAY,OAAO;AAC5B;",
|
|
6
6
|
"names": []
|
|
@@ -17,28 +17,4 @@
|
|
|
17
17
|
* @param {Circle} circle Circle
|
|
18
18
|
* @returns {boolean} Is the point inside the circle's bounds ?
|
|
19
19
|
*/
|
|
20
|
-
export default function collidePointCircle(point:
|
|
21
|
-
export type Point = {
|
|
22
|
-
/**
|
|
23
|
-
* Point's x position
|
|
24
|
-
*/
|
|
25
|
-
x: number;
|
|
26
|
-
/**
|
|
27
|
-
* Point's y position
|
|
28
|
-
*/
|
|
29
|
-
y: number;
|
|
30
|
-
};
|
|
31
|
-
export type Circle = {
|
|
32
|
-
/**
|
|
33
|
-
* Circle's x position
|
|
34
|
-
*/
|
|
35
|
-
x: number;
|
|
36
|
-
/**
|
|
37
|
-
* Circle's y position
|
|
38
|
-
*/
|
|
39
|
-
y: number;
|
|
40
|
-
/**
|
|
41
|
-
* Circle's radius
|
|
42
|
-
*/
|
|
43
|
-
radius: number;
|
|
44
|
-
};
|
|
20
|
+
export default function collidePointCircle(point: any, circle: any): boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../packages/js-toolkit/utils/collide/collidePointCircle.
|
|
3
|
+
"sources": ["../../../packages/js-toolkit/utils/collide/collidePointCircle.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} Circle\n * @property {number} x Circle's x position\n * @property {number} y Circle's y position\n * @property {number} radius Circle's radius\n */\n\n/**\n * Test if a point is inside a circle.\n * Inspired by http://www.jeffreythompson.org/collision-detection/point-circle.php\n *\n * @param {Point} point Point\n * @param {Circle} circle Circle\n * @returns {boolean} Is the point inside the circle's bounds ?\n */\nexport default function collidePointCircle(point, circle) {\n // get distance between the point and circle's center\n // using the Pythagorean Theorem\n const distX = point.x - circle.x;\n const distY = point.y - circle.y;\n const distance = Math.sqrt(distX * distX + distY * distY);\n\n // if the distance is less than the circle's\n // radius the point is inside!\n return distance <= circle.radius;\n}\n"],
|
|
5
5
|
"mappings": "AAqBe,SAAR,mBAAoC,OAAO,QAAQ;AAGxD,QAAM,QAAQ,MAAM,IAAI,OAAO;AAC/B,QAAM,QAAQ,MAAM,IAAI,OAAO;AAC/B,QAAM,WAAW,KAAK,KAAK,QAAQ,QAAQ,QAAQ,KAAK;AAIxD,SAAO,YAAY,OAAO;AAC5B;",
|
|
6
6
|
"names": []
|
|
@@ -16,7 +16,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
};
|
|
17
17
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
18
|
|
|
19
|
-
// packages/js-toolkit/utils/collide/collidePointRect.
|
|
19
|
+
// packages/js-toolkit/utils/collide/collidePointRect.ts
|
|
20
20
|
var collidePointRect_exports = {};
|
|
21
21
|
__export(collidePointRect_exports, {
|
|
22
22
|
default: () => collidePointRect
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../packages/js-toolkit/utils/collide/collidePointRect.
|
|
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
5
|
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBe,SAAR,iBAAkC,OAAO,MAAM;AACpD,SACE,MAAM,KAAK,KAAK,KAChB,MAAM,KAAK,KAAK,IAAI,KAAK,SACzB,MAAM,KAAK,KAAK,KAChB,MAAM,KAAK,KAAK,IAAI,KAAK;AAE7B;",
|
|
6
6
|
"names": []
|
|
@@ -18,32 +18,4 @@
|
|
|
18
18
|
* @param {Rect} rect Rectangle
|
|
19
19
|
* @returns {boolean} Is the point inside the rectangle's bounds ?
|
|
20
20
|
*/
|
|
21
|
-
export default function collidePointRect(point:
|
|
22
|
-
export type Point = {
|
|
23
|
-
/**
|
|
24
|
-
* Point's x position
|
|
25
|
-
*/
|
|
26
|
-
x: number;
|
|
27
|
-
/**
|
|
28
|
-
* Point's y position
|
|
29
|
-
*/
|
|
30
|
-
y: number;
|
|
31
|
-
};
|
|
32
|
-
export type Rect = {
|
|
33
|
-
/**
|
|
34
|
-
* Rectangle's x position
|
|
35
|
-
*/
|
|
36
|
-
x: number;
|
|
37
|
-
/**
|
|
38
|
-
* Rectangle's y position
|
|
39
|
-
*/
|
|
40
|
-
y: number;
|
|
41
|
-
/**
|
|
42
|
-
* Rectangle's width
|
|
43
|
-
*/
|
|
44
|
-
width: number;
|
|
45
|
-
/**
|
|
46
|
-
* Rectangle's height
|
|
47
|
-
*/
|
|
48
|
-
height: number;
|
|
49
|
-
};
|
|
21
|
+
export default function collidePointRect(point: any, rect: any): boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../packages/js-toolkit/utils/collide/collidePointRect.
|
|
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
5
|
"mappings": "AAsBe,SAAR,iBAAkC,OAAO,MAAM;AACpD,SACE,MAAM,KAAK,KAAK,KAChB,MAAM,KAAK,KAAK,IAAI,KAAK,SACzB,MAAM,KAAK,KAAK,KAChB,MAAM,KAAK,KAAK,IAAI,KAAK;AAE7B;",
|
|
6
6
|
"names": []
|
|
@@ -16,7 +16,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
};
|
|
17
17
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
18
|
|
|
19
|
-
// packages/js-toolkit/utils/collide/collideRectRect.
|
|
19
|
+
// packages/js-toolkit/utils/collide/collideRectRect.ts
|
|
20
20
|
var collideRectRect_exports = {};
|
|
21
21
|
__export(collideRectRect_exports, {
|
|
22
22
|
default: () => collideRectRect
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../packages/js-toolkit/utils/collide/collideRectRect.
|
|
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
5
|
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBe,SAAR,gBAAiC,OAAO,OAAO;AACpD,SACE,MAAM,IAAI,MAAM,SAAS,MAAM,KAC/B,MAAM,KAAK,MAAM,IAAI,MAAM,SAC3B,MAAM,IAAI,MAAM,UAAU,MAAM,KAChC,MAAM,KAAK,MAAM,IAAI,MAAM;AAE/B;",
|
|
6
6
|
"names": []
|
|
@@ -13,22 +13,4 @@
|
|
|
13
13
|
* @param {Rect} rect2 Rectangle 2
|
|
14
14
|
* @returns {boolean} Are the sides of one rectangle touching the other ?
|
|
15
15
|
*/
|
|
16
|
-
export default function collideRectRect(rect1:
|
|
17
|
-
export type Rect = {
|
|
18
|
-
/**
|
|
19
|
-
* Rectangle's x position
|
|
20
|
-
*/
|
|
21
|
-
x: number;
|
|
22
|
-
/**
|
|
23
|
-
* Rectangle's y position
|
|
24
|
-
*/
|
|
25
|
-
y: number;
|
|
26
|
-
/**
|
|
27
|
-
* Rectangle's width
|
|
28
|
-
*/
|
|
29
|
-
width: number;
|
|
30
|
-
/**
|
|
31
|
-
* Rectangle's height
|
|
32
|
-
*/
|
|
33
|
-
height: number;
|
|
34
|
-
};
|
|
16
|
+
export default function collideRectRect(rect1: any, rect2: any): boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../packages/js-toolkit/utils/collide/collideRectRect.
|
|
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
5
|
"mappings": "AAgBe,SAAR,gBAAiC,OAAO,OAAO;AACpD,SACE,MAAM,IAAI,MAAM,SAAS,MAAM,KAC/B,MAAM,KAAK,MAAM,IAAI,MAAM,SAC3B,MAAM,IAAI,MAAM,UAAU,MAAM,KAChC,MAAM,KAAK,MAAM,IAAI,MAAM;AAE/B;",
|
|
6
6
|
"names": []
|
package/utils/collide/index.cjs
CHANGED
|
@@ -22,7 +22,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
22
22
|
));
|
|
23
23
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
24
|
|
|
25
|
-
// packages/js-toolkit/utils/collide/index.
|
|
25
|
+
// packages/js-toolkit/utils/collide/index.ts
|
|
26
26
|
var collide_exports = {};
|
|
27
27
|
__export(collide_exports, {
|
|
28
28
|
boundingRectToCircle: () => import_boundingRectToCircle.default,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../packages/js-toolkit/utils/collide/index.
|
|
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
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": []
|
package/utils/collide/index.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export { default as
|
|
5
|
-
export { default as
|
|
6
|
-
export { default as
|
|
1
|
+
/**
|
|
2
|
+
* Inspired by http://www.jeffreythompson.org/collision-detection/
|
|
3
|
+
*/
|
|
4
|
+
export { default as boundingRectToCircle } from './boundingRectToCircle.js';
|
|
5
|
+
export { default as collideCircleCircle } from './collideCircleCircle.js';
|
|
6
|
+
export { default as collideCircleRect } from './collideCircleRect.js';
|
|
7
|
+
export { default as collidePointCircle } from './collidePointCircle.js';
|
|
8
|
+
export { default as collidePointRect } from './collidePointRect.js';
|
|
9
|
+
export { default as collideRectRect } from './collideRectRect.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../packages/js-toolkit/utils/collide/index.
|
|
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
5
|
"mappings": "AAGA,SAAoB,WAAXA,gBAAuC;AAChD,SAAoB,WAAXA,gBAAsC;AAC/C,SAAoB,WAAXA,gBAAoC;AAC7C,SAAoB,WAAXA,gBAAqC;AAC9C,SAAoB,WAAXA,gBAAmC;AAC5C,SAAoB,WAAXA,gBAAkC;",
|
|
6
6
|
"names": ["default"]
|
package/utils/css/animate.cjs
CHANGED
|
@@ -22,7 +22,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
22
22
|
));
|
|
23
23
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
24
|
|
|
25
|
-
// packages/js-toolkit/utils/css/animate.
|
|
25
|
+
// packages/js-toolkit/utils/css/animate.ts
|
|
26
26
|
var animate_exports = {};
|
|
27
27
|
__export(animate_exports, {
|
|
28
28
|
animate: () => animate
|
|
@@ -83,7 +83,7 @@ var transformRenderStrategies = {
|
|
|
83
83
|
};
|
|
84
84
|
function render(element, from, to, progress) {
|
|
85
85
|
const stepProgress = to.easing((0, import_math.map)(progress, from.offset, to.offset, 0, 1));
|
|
86
|
-
import_scheduler.domScheduler.read(
|
|
86
|
+
import_scheduler.domScheduler.read(() => {
|
|
87
87
|
let opacity = false;
|
|
88
88
|
if ((0, import_is.isDefined)(from.opacity) || (0, import_is.isDefined)(to.opacity)) {
|
|
89
89
|
opacity = (0, import_math.map)(stepProgress, 0, 1, from.opacity ?? 1, to.opacity ?? 1);
|
|
@@ -96,18 +96,35 @@ function render(element, from, to, progress) {
|
|
|
96
96
|
} else if (element.style.transformOrigin) {
|
|
97
97
|
transformOrigin = "";
|
|
98
98
|
}
|
|
99
|
+
let customProperties = false;
|
|
100
|
+
if ((0, import_is.isDefined)(from.vars) && (0, import_is.isDefined)(to.vars)) {
|
|
101
|
+
customProperties = from.vars.map((customPropertyName) => {
|
|
102
|
+
const customPropertyValue = (0, import_math.lerp)(
|
|
103
|
+
from[customPropertyName],
|
|
104
|
+
to[customPropertyName],
|
|
105
|
+
stepProgress
|
|
106
|
+
);
|
|
107
|
+
return [customPropertyName, customPropertyValue];
|
|
108
|
+
});
|
|
109
|
+
}
|
|
99
110
|
const props = Object.fromEntries(
|
|
100
|
-
import_transform.TRANSFORM_PROPS.filter((name) => (0, import_is.isDefined)(from[name]) || (0, import_is.isDefined)(to[name])).map((name) =>
|
|
101
|
-
|
|
102
|
-
|
|
111
|
+
import_transform.TRANSFORM_PROPS.filter((name) => (0, import_is.isDefined)(from[name]) || (0, import_is.isDefined)(to[name])).map((name) => [
|
|
112
|
+
name,
|
|
113
|
+
transformRenderStrategies[name](element, from[name], to[name], stepProgress)
|
|
114
|
+
])
|
|
103
115
|
);
|
|
104
|
-
import_scheduler.domScheduler.write(
|
|
116
|
+
import_scheduler.domScheduler.write(() => {
|
|
105
117
|
if (opacity !== false) {
|
|
106
118
|
element.style.opacity = opacity;
|
|
107
119
|
}
|
|
108
120
|
if (transformOrigin !== false) {
|
|
109
121
|
element.style.transformOrigin = transformOrigin;
|
|
110
122
|
}
|
|
123
|
+
if (customProperties !== false) {
|
|
124
|
+
customProperties.forEach((customProperty) => {
|
|
125
|
+
element.style.setProperty(customProperty[0], customProperty[1].toString());
|
|
126
|
+
});
|
|
127
|
+
}
|
|
111
128
|
(0, import_transform.default)(element, props);
|
|
112
129
|
});
|
|
113
130
|
});
|
|
@@ -118,7 +135,8 @@ function singleAnimate(element, keyframes, options = {}) {
|
|
|
118
135
|
(keyframe, index) => ({
|
|
119
136
|
...keyframe,
|
|
120
137
|
offset: keyframe.offset ?? index / keyframesCount,
|
|
121
|
-
easing: (0, import_tween.normalizeEase)(keyframe.easing)
|
|
138
|
+
easing: (0, import_tween.normalizeEase)(keyframe.easing),
|
|
139
|
+
vars: Object.keys(keyframe).filter((key2) => key2.startsWith("--"))
|
|
122
140
|
})
|
|
123
141
|
);
|
|
124
142
|
if (!running.has(element)) {
|
|
@@ -155,15 +173,13 @@ function animate(elementOrElements, keyframes, options = {}) {
|
|
|
155
173
|
elementOrElements,
|
|
156
174
|
(element) => singleAnimate(element, keyframes, options)
|
|
157
175
|
);
|
|
158
|
-
const delegate = (key) => {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
});
|
|
166
|
-
};
|
|
176
|
+
const delegate = (key) => (...args) => {
|
|
177
|
+
if (key === "progress" && args.length === 0) {
|
|
178
|
+
return controls[0][key]();
|
|
179
|
+
}
|
|
180
|
+
controls.forEach((control) => {
|
|
181
|
+
control[key](...args);
|
|
182
|
+
});
|
|
167
183
|
};
|
|
168
184
|
return {
|
|
169
185
|
start: delegate("start"),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../packages/js-toolkit/utils/css/animate.
|
|
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';\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
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA0B;AAC1B,gBAAgD;AAChD,uBAA2C;AAC3C,uBAA0C;AAC1C,mBAAqC;AAErC,mBAA6B;
|
|
6
|
-
"names": ["scheduler", "transform"]
|
|
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 customProperties.forEach((customProperty) => {\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) => key.startsWith('--')),\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 runningKeys.forEach((runningPause, runningKey) => {\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 controls.forEach((control) => {\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
|
+
"names": ["scheduler", "transform", "key"]
|
|
7
7
|
}
|
package/utils/css/animate.d.ts
CHANGED
|
@@ -1,21 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* @param {import('../tween.js').TweenOptions} [options]
|
|
6
|
-
* @returns {Animate}
|
|
7
|
-
*/
|
|
8
|
-
export function animate(elementOrElements: HTMLElement | HTMLElement[] | NodeListOf<HTMLElement>, keyframes: Keyframe[], options?: import('../tween.js').TweenOptions): Animate;
|
|
9
|
-
export type TransformProps = import('./transform.js').TransformProps;
|
|
1
|
+
import type { TransformProps } from './transform.js';
|
|
2
|
+
import type { EasingFunction } from '../math/index.js';
|
|
3
|
+
import type { BezierCurve, TweenOptions } from '../tween.js';
|
|
4
|
+
export type CSSCustomPropertyName = `--${string}`;
|
|
10
5
|
export type Keyframe = TransformProps & {
|
|
11
6
|
opacity?: number;
|
|
12
7
|
transformOrigin?: string;
|
|
13
|
-
easing?:
|
|
8
|
+
easing?: EasingFunction | BezierCurve;
|
|
14
9
|
offset?: number;
|
|
10
|
+
[key: CSSCustomPropertyName]: number;
|
|
15
11
|
};
|
|
16
12
|
export type NormalizedKeyframe = Keyframe & {
|
|
17
|
-
easing:
|
|
13
|
+
easing: EasingFunction;
|
|
18
14
|
offset: number;
|
|
15
|
+
vars: string[];
|
|
19
16
|
};
|
|
20
17
|
export type Animate = {
|
|
21
18
|
start: () => void;
|
|
@@ -24,3 +21,7 @@ export type Animate = {
|
|
|
24
21
|
finish: () => void;
|
|
25
22
|
progress: (value?: number) => number;
|
|
26
23
|
};
|
|
24
|
+
/**
|
|
25
|
+
* Animate one or more elements.
|
|
26
|
+
*/
|
|
27
|
+
export declare function animate(elementOrElements: HTMLElement | HTMLElement[] | NodeListOf<HTMLElement>, keyframes: Keyframe[], options?: TweenOptions): Animate;
|
package/utils/css/animate.js
CHANGED
|
@@ -53,7 +53,7 @@ const transformRenderStrategies = {
|
|
|
53
53
|
};
|
|
54
54
|
function render(element, from, to, progress) {
|
|
55
55
|
const stepProgress = to.easing(map(progress, from.offset, to.offset, 0, 1));
|
|
56
|
-
scheduler.read(
|
|
56
|
+
scheduler.read(() => {
|
|
57
57
|
let opacity = false;
|
|
58
58
|
if (isDefined(from.opacity) || isDefined(to.opacity)) {
|
|
59
59
|
opacity = map(stepProgress, 0, 1, from.opacity ?? 1, to.opacity ?? 1);
|
|
@@ -66,18 +66,35 @@ function render(element, from, to, progress) {
|
|
|
66
66
|
} else if (element.style.transformOrigin) {
|
|
67
67
|
transformOrigin = "";
|
|
68
68
|
}
|
|
69
|
+
let customProperties = false;
|
|
70
|
+
if (isDefined(from.vars) && isDefined(to.vars)) {
|
|
71
|
+
customProperties = from.vars.map((customPropertyName) => {
|
|
72
|
+
const customPropertyValue = lerp(
|
|
73
|
+
from[customPropertyName],
|
|
74
|
+
to[customPropertyName],
|
|
75
|
+
stepProgress
|
|
76
|
+
);
|
|
77
|
+
return [customPropertyName, customPropertyValue];
|
|
78
|
+
});
|
|
79
|
+
}
|
|
69
80
|
const props = Object.fromEntries(
|
|
70
|
-
TRANSFORM_PROPS.filter((name) => isDefined(from[name]) || isDefined(to[name])).map((name) =>
|
|
71
|
-
|
|
72
|
-
|
|
81
|
+
TRANSFORM_PROPS.filter((name) => isDefined(from[name]) || isDefined(to[name])).map((name) => [
|
|
82
|
+
name,
|
|
83
|
+
transformRenderStrategies[name](element, from[name], to[name], stepProgress)
|
|
84
|
+
])
|
|
73
85
|
);
|
|
74
|
-
scheduler.write(
|
|
86
|
+
scheduler.write(() => {
|
|
75
87
|
if (opacity !== false) {
|
|
76
88
|
element.style.opacity = opacity;
|
|
77
89
|
}
|
|
78
90
|
if (transformOrigin !== false) {
|
|
79
91
|
element.style.transformOrigin = transformOrigin;
|
|
80
92
|
}
|
|
93
|
+
if (customProperties !== false) {
|
|
94
|
+
customProperties.forEach((customProperty) => {
|
|
95
|
+
element.style.setProperty(customProperty[0], customProperty[1].toString());
|
|
96
|
+
});
|
|
97
|
+
}
|
|
81
98
|
transform(element, props);
|
|
82
99
|
});
|
|
83
100
|
});
|
|
@@ -88,7 +105,8 @@ function singleAnimate(element, keyframes, options = {}) {
|
|
|
88
105
|
(keyframe, index) => ({
|
|
89
106
|
...keyframe,
|
|
90
107
|
offset: keyframe.offset ?? index / keyframesCount,
|
|
91
|
-
easing: normalizeEase(keyframe.easing)
|
|
108
|
+
easing: normalizeEase(keyframe.easing),
|
|
109
|
+
vars: Object.keys(keyframe).filter((key2) => key2.startsWith("--"))
|
|
92
110
|
})
|
|
93
111
|
);
|
|
94
112
|
if (!running.has(element)) {
|
|
@@ -125,15 +143,13 @@ function animate(elementOrElements, keyframes, options = {}) {
|
|
|
125
143
|
elementOrElements,
|
|
126
144
|
(element) => singleAnimate(element, keyframes, options)
|
|
127
145
|
);
|
|
128
|
-
const delegate = (key) => {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
});
|
|
136
|
-
};
|
|
146
|
+
const delegate = (key) => (...args) => {
|
|
147
|
+
if (key === "progress" && args.length === 0) {
|
|
148
|
+
return controls[0][key]();
|
|
149
|
+
}
|
|
150
|
+
controls.forEach((control) => {
|
|
151
|
+
control[key](...args);
|
|
152
|
+
});
|
|
137
153
|
};
|
|
138
154
|
return {
|
|
139
155
|
start: delegate("start"),
|