@studiometa/js-toolkit 2.2.3 → 2.3.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/index.cjs +60 -68
- package/Base/index.d.ts +0 -8
- package/Base/index.js +67 -81
- package/Base/managers/AbstractManager.cjs +5 -10
- package/Base/managers/AbstractManager.js +5 -11
- package/Base/managers/ChildrenManager.cjs +2 -11
- package/Base/managers/ChildrenManager.js +2 -12
- package/Base/managers/EventsManager.cjs +61 -67
- package/Base/managers/EventsManager.js +61 -68
- package/Base/managers/OptionsManager.cjs +26 -27
- package/Base/managers/OptionsManager.js +26 -28
- package/Base/managers/RefsManager.cjs +9 -7
- package/Base/managers/RefsManager.js +9 -7
- package/Base/managers/ResponsiveOptionsManager.cjs +4 -1
- package/Base/managers/ResponsiveOptionsManager.js +4 -1
- package/Base/managers/ServicesManager.cjs +6 -11
- package/Base/managers/ServicesManager.js +7 -13
- package/Base/utils.cjs +23 -1
- package/Base/utils.d.ts +25 -0
- package/Base/utils.js +23 -1
- package/decorators/withBreakpointManager.cjs +15 -5
- package/decorators/withBreakpointManager.js +15 -5
- package/decorators/withBreakpointObserver.cjs +19 -18
- package/decorators/withBreakpointObserver.js +19 -19
- package/decorators/withDrag.cjs +6 -11
- package/decorators/withDrag.js +6 -12
- package/decorators/withExtraConfig.cjs +3 -8
- package/decorators/withExtraConfig.js +3 -9
- package/decorators/withFreezedOptions.cjs +1 -9
- package/decorators/withFreezedOptions.js +1 -10
- package/decorators/withIntersectionObserver.cjs +11 -16
- package/decorators/withIntersectionObserver.js +11 -17
- package/decorators/withMountWhenInView.cjs +12 -17
- package/decorators/withMountWhenInView.js +12 -18
- package/decorators/withScrolledInView.cjs +30 -35
- package/decorators/withScrolledInView.js +30 -36
- package/decorators/withVue2.cjs +20 -18
- package/decorators/withVue2.js +20 -19
- package/helpers/getInstanceFromElement.cjs +1 -2
- package/helpers/getInstanceFromElement.js +1 -2
- package/helpers/importOnInteraction.cjs +3 -2
- package/helpers/importOnInteraction.js +3 -2
- package/helpers/importWhenIdle.cjs +2 -3
- package/helpers/importWhenIdle.js +2 -3
- package/helpers/importWhenVisible.cjs +3 -2
- package/helpers/importWhenVisible.js +3 -2
- package/helpers/utils.cjs +3 -2
- package/helpers/utils.js +3 -2
- package/package.json +4 -1
- package/services/key.cjs +1 -1
- package/services/key.js +1 -1
- package/services/pointer.cjs +2 -3
- package/services/pointer.js +2 -3
- package/services/raf.cjs +2 -5
- package/services/raf.js +1 -1
- package/utils/css/animate.cjs +33 -98
- package/utils/css/animate.d.ts +4 -16
- package/utils/css/animate.js +31 -96
- package/utils/css/classes.cjs +2 -1
- package/utils/css/classes.js +2 -1
- package/utils/css/matrix.cjs +1 -2
- package/utils/css/matrix.js +1 -2
- package/utils/css/styles.cjs +2 -5
- package/utils/css/styles.js +1 -1
- package/utils/css/transform.cjs +14 -18
- package/utils/css/transform.js +2 -3
- package/utils/css/transition.cjs +7 -10
- package/utils/css/transition.js +7 -11
- package/utils/focusTrap.cjs +2 -1
- package/utils/focusTrap.js +2 -1
- package/utils/{isFunction.cjs → has.cjs} +7 -7
- package/utils/has.d.ts +6 -0
- package/utils/has.js +6 -0
- package/utils/history.cjs +5 -7
- package/utils/history.js +4 -3
- package/utils/index.cjs +5 -5
- package/utils/index.d.ts +3 -2
- package/utils/index.js +5 -5
- package/utils/{isDefined.cjs → is.cjs} +20 -8
- package/utils/is.d.ts +8 -0
- package/utils/is.js +18 -0
- package/utils/math/inertiaFinalValue.cjs +5 -3
- package/utils/math/inertiaFinalValue.js +2 -3
- package/utils/nextFrame.cjs +5 -3
- package/utils/nextFrame.js +5 -3
- package/utils/nextMicrotask.cjs +2 -1
- package/utils/nextMicrotask.js +2 -1
- package/utils/nextTick.cjs +2 -1
- package/utils/nextTick.js +2 -1
- package/utils/object/autoBind.cjs +3 -2
- package/utils/object/autoBind.js +3 -2
- package/utils/object/getAllProperties.cjs +2 -1
- package/utils/object/getAllProperties.js +2 -1
- package/utils/object/index.cjs +1 -3
- package/utils/object/index.d.ts +0 -1
- package/utils/object/index.js +1 -3
- package/utils/tween.cjs +113 -0
- package/utils/tween.d.ts +25 -0
- package/utils/tween.js +88 -0
- package/utils/isDefined.d.ts +0 -7
- package/utils/isDefined.js +0 -6
- package/utils/isFunction.d.ts +0 -7
- package/utils/isFunction.js +0 -6
- package/utils/object/isObject.cjs +0 -28
- package/utils/object/isObject.d.ts +0 -7
- package/utils/object/isObject.js +0 -6
|
@@ -31,8 +31,7 @@ function importWhenIdle(fn, options) {
|
|
|
31
31
|
});
|
|
32
32
|
};
|
|
33
33
|
return new Promise((resolve) => {
|
|
34
|
-
|
|
35
|
-
const timeout = (_a = options == null ? void 0 : options.timeout) != null ? _a : 1;
|
|
34
|
+
const timeout = options?.timeout ?? 1;
|
|
36
35
|
if (!("requestIdleCallback" in window)) {
|
|
37
36
|
setTimeout(() => {
|
|
38
37
|
resolver(resolve);
|
|
@@ -42,7 +41,7 @@ function importWhenIdle(fn, options) {
|
|
|
42
41
|
setTimeout(() => {
|
|
43
42
|
resolver(resolve);
|
|
44
43
|
}, 0);
|
|
45
|
-
}, { timeout: options
|
|
44
|
+
}, { timeout: options?.timeout });
|
|
46
45
|
}
|
|
47
46
|
});
|
|
48
47
|
}
|
|
@@ -7,8 +7,7 @@ function importWhenIdle(fn, options) {
|
|
|
7
7
|
});
|
|
8
8
|
};
|
|
9
9
|
return new Promise((resolve) => {
|
|
10
|
-
|
|
11
|
-
const timeout = (_a = options == null ? void 0 : options.timeout) != null ? _a : 1;
|
|
10
|
+
const timeout = options?.timeout ?? 1;
|
|
12
11
|
if (!("requestIdleCallback" in window)) {
|
|
13
12
|
setTimeout(() => {
|
|
14
13
|
resolver(resolve);
|
|
@@ -18,7 +17,7 @@ function importWhenIdle(fn, options) {
|
|
|
18
17
|
setTimeout(() => {
|
|
19
18
|
resolver(resolve);
|
|
20
19
|
}, 0);
|
|
21
|
-
}, { timeout: options
|
|
20
|
+
}, { timeout: options?.timeout });
|
|
22
21
|
}
|
|
23
22
|
});
|
|
24
23
|
}
|
|
@@ -23,13 +23,14 @@ __export(importWhenVisible_exports, {
|
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(importWhenVisible_exports);
|
|
25
25
|
var import_utils = require("./utils.cjs");
|
|
26
|
+
var import_utils2 = require("../utils/index.cjs");
|
|
26
27
|
function importWhenVisible(fn, nameOrSelectorOrElement, parent, observerOptions = {}) {
|
|
27
28
|
let ResolvedClass;
|
|
28
29
|
const resolver = (resolve, cb) => {
|
|
29
30
|
fn().then((module2) => {
|
|
30
31
|
ResolvedClass = "default" in module2 ? module2.default : module2;
|
|
31
32
|
resolve(ResolvedClass);
|
|
32
|
-
if (
|
|
33
|
+
if ((0, import_utils2.isFunction)(cb)) {
|
|
33
34
|
cb();
|
|
34
35
|
}
|
|
35
36
|
});
|
|
@@ -43,7 +44,7 @@ function importWhenVisible(fn, nameOrSelectorOrElement, parent, observerOptions
|
|
|
43
44
|
}, 0);
|
|
44
45
|
}
|
|
45
46
|
}, observerOptions);
|
|
46
|
-
const elements = (0, import_utils.getTargetElements)(nameOrSelectorOrElement, parent
|
|
47
|
+
const elements = (0, import_utils.getTargetElements)(nameOrSelectorOrElement, parent?.$el);
|
|
47
48
|
elements.forEach((element) => observer.observe(element));
|
|
48
49
|
});
|
|
49
50
|
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { getTargetElements } from "./utils.js";
|
|
2
|
+
import { isFunction } from "../utils/index.js";
|
|
2
3
|
function importWhenVisible(fn, nameOrSelectorOrElement, parent, observerOptions = {}) {
|
|
3
4
|
let ResolvedClass;
|
|
4
5
|
const resolver = (resolve, cb) => {
|
|
5
6
|
fn().then((module) => {
|
|
6
7
|
ResolvedClass = "default" in module ? module.default : module;
|
|
7
8
|
resolve(ResolvedClass);
|
|
8
|
-
if (
|
|
9
|
+
if (isFunction(cb)) {
|
|
9
10
|
cb();
|
|
10
11
|
}
|
|
11
12
|
});
|
|
@@ -19,7 +20,7 @@ function importWhenVisible(fn, nameOrSelectorOrElement, parent, observerOptions
|
|
|
19
20
|
}, 0);
|
|
20
21
|
}
|
|
21
22
|
}, observerOptions);
|
|
22
|
-
const elements = getTargetElements(nameOrSelectorOrElement, parent
|
|
23
|
+
const elements = getTargetElements(nameOrSelectorOrElement, parent?.$el);
|
|
23
24
|
elements.forEach((element) => observer.observe(element));
|
|
24
25
|
});
|
|
25
26
|
}
|
package/helpers/utils.cjs
CHANGED
|
@@ -23,11 +23,12 @@ __export(utils_exports, {
|
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(utils_exports);
|
|
25
25
|
var import_utils = require("../Base/utils.cjs");
|
|
26
|
+
var import_utils2 = require("../utils/index.cjs");
|
|
26
27
|
function getTargetElements(nameOrSelectorOrElement, context) {
|
|
27
|
-
if (
|
|
28
|
+
if ((0, import_utils2.isString)(nameOrSelectorOrElement)) {
|
|
28
29
|
return (0, import_utils.getComponentElements)(nameOrSelectorOrElement, context);
|
|
29
30
|
}
|
|
30
|
-
if (!
|
|
31
|
+
if (!(0, import_utils2.isArray)(nameOrSelectorOrElement)) {
|
|
31
32
|
return [nameOrSelectorOrElement];
|
|
32
33
|
}
|
|
33
34
|
return nameOrSelectorOrElement;
|
package/helpers/utils.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { getComponentElements } from "../Base/utils.js";
|
|
2
|
+
import { isString, isArray } from "../utils/index.js";
|
|
2
3
|
function getTargetElements(nameOrSelectorOrElement, context) {
|
|
3
|
-
if (
|
|
4
|
+
if (isString(nameOrSelectorOrElement)) {
|
|
4
5
|
return getComponentElements(nameOrSelectorOrElement, context);
|
|
5
6
|
}
|
|
6
|
-
if (!
|
|
7
|
+
if (!isArray(nameOrSelectorOrElement)) {
|
|
7
8
|
return [nameOrSelectorOrElement];
|
|
8
9
|
}
|
|
9
10
|
return nameOrSelectorOrElement;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@studiometa/js-toolkit",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "A set of useful little bits of JavaScript to boost your project! 🚀",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -41,5 +41,8 @@
|
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@motionone/easing": "^10.9.0",
|
|
43
43
|
"deepmerge": "^4.2.2"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"vue": "2.6"
|
|
44
47
|
}
|
|
45
48
|
}
|
package/services/key.cjs
CHANGED
|
@@ -40,7 +40,7 @@ function createKeyService() {
|
|
|
40
40
|
if (!previousEvent) {
|
|
41
41
|
props.triggered = 0;
|
|
42
42
|
}
|
|
43
|
-
if (props.event.type === "keydown" &&
|
|
43
|
+
if (props.event.type === "keydown" && previousEvent?.type === "keydown") {
|
|
44
44
|
props.triggered += 1;
|
|
45
45
|
} else {
|
|
46
46
|
props.triggered = 1;
|
package/services/key.js
CHANGED
|
@@ -13,7 +13,7 @@ function createKeyService() {
|
|
|
13
13
|
if (!previousEvent) {
|
|
14
14
|
props.triggered = 0;
|
|
15
15
|
}
|
|
16
|
-
if (props.event.type === "keydown" &&
|
|
16
|
+
if (props.event.type === "keydown" && previousEvent?.type === "keydown") {
|
|
17
17
|
props.triggered += 1;
|
|
18
18
|
} else {
|
|
19
19
|
props.triggered = 1;
|
package/services/pointer.cjs
CHANGED
|
@@ -29,15 +29,14 @@ function isTouchEvent(event) {
|
|
|
29
29
|
var events = ["mousemove", "touchmove", "mousedown", "touchstart", "mouseup", "touchend"];
|
|
30
30
|
function createPointerService() {
|
|
31
31
|
function updateProps(event) {
|
|
32
|
-
var _a, _b;
|
|
33
32
|
props.event = event;
|
|
34
33
|
const yLast = props.y;
|
|
35
34
|
const xLast = props.x;
|
|
36
|
-
const y = isTouchEvent(event) ?
|
|
35
|
+
const y = isTouchEvent(event) ? event.touches[0]?.clientY : event.clientY;
|
|
37
36
|
if (y !== props.y) {
|
|
38
37
|
props.y = y;
|
|
39
38
|
}
|
|
40
|
-
const x = isTouchEvent(event) ?
|
|
39
|
+
const x = isTouchEvent(event) ? event.touches[0]?.clientX : event.clientX;
|
|
41
40
|
if (x !== props.x) {
|
|
42
41
|
props.x = x;
|
|
43
42
|
}
|
package/services/pointer.js
CHANGED
|
@@ -5,15 +5,14 @@ function isTouchEvent(event) {
|
|
|
5
5
|
const events = ["mousemove", "touchmove", "mousedown", "touchstart", "mouseup", "touchend"];
|
|
6
6
|
function createPointerService() {
|
|
7
7
|
function updateProps(event) {
|
|
8
|
-
var _a, _b;
|
|
9
8
|
props.event = event;
|
|
10
9
|
const yLast = props.y;
|
|
11
10
|
const xLast = props.x;
|
|
12
|
-
const y = isTouchEvent(event) ?
|
|
11
|
+
const y = isTouchEvent(event) ? event.touches[0]?.clientY : event.clientY;
|
|
13
12
|
if (y !== props.y) {
|
|
14
13
|
props.y = y;
|
|
15
14
|
}
|
|
16
|
-
const x = isTouchEvent(event) ?
|
|
15
|
+
const x = isTouchEvent(event) ? event.touches[0]?.clientX : event.clientX;
|
|
17
16
|
if (x !== props.x) {
|
|
18
17
|
props.x = x;
|
|
19
18
|
}
|
package/services/raf.cjs
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
var __create = Object.create;
|
|
2
1
|
var __defProp = Object.defineProperty;
|
|
3
2
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
5
|
var __export = (target, all) => {
|
|
8
6
|
for (var name in all)
|
|
@@ -16,7 +14,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
14
|
}
|
|
17
15
|
return to;
|
|
18
16
|
};
|
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
|
|
20
17
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
18
|
|
|
22
19
|
// packages/js-toolkit/services/raf.js
|
|
@@ -28,7 +25,7 @@ module.exports = __toCommonJS(raf_exports);
|
|
|
28
25
|
var import_service = require("./service.cjs");
|
|
29
26
|
var import_nextFrame = require("../utils/nextFrame.cjs");
|
|
30
27
|
var import_scheduler = require("../utils/scheduler.cjs");
|
|
31
|
-
var
|
|
28
|
+
var import_is = require("../utils/is.cjs");
|
|
32
29
|
var scheduler = (0, import_scheduler.useScheduler)(["update", "render"]);
|
|
33
30
|
function createRafService() {
|
|
34
31
|
let isTicking = false;
|
|
@@ -37,7 +34,7 @@ function createRafService() {
|
|
|
37
34
|
callbacks.forEach(function forEachCallback(callback) {
|
|
38
35
|
scheduler.update(function rafUpdate() {
|
|
39
36
|
const render = callback(props2);
|
|
40
|
-
if ((0,
|
|
37
|
+
if ((0, import_is.isFunction)(render)) {
|
|
41
38
|
scheduler.render(function rafRender() {
|
|
42
39
|
render(props2);
|
|
43
40
|
});
|
package/services/raf.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useService } from "./service.js";
|
|
2
2
|
import { getRaf as getRequestAnimationFrame } from "../utils/nextFrame.js";
|
|
3
3
|
import { useScheduler } from "../utils/scheduler.js";
|
|
4
|
-
import isFunction from "../utils/
|
|
4
|
+
import { isFunction } from "../utils/is.js";
|
|
5
5
|
const scheduler = useScheduler(["update", "render"]);
|
|
6
6
|
function createRafService() {
|
|
7
7
|
let isTicking = false;
|
package/utils/css/animate.cjs
CHANGED
|
@@ -25,16 +25,13 @@ __export(animate_exports, {
|
|
|
25
25
|
animate: () => animate
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(animate_exports);
|
|
28
|
-
var import_easing = require("@motionone/easing");
|
|
29
28
|
var import_math = require("../math/index.cjs");
|
|
30
|
-
var
|
|
29
|
+
var import_is = require("../is.cjs");
|
|
31
30
|
var import_transform = __toESM(require("./transform.cjs"), 1);
|
|
32
|
-
var import_raf = __toESM(require("../../services/raf.cjs"), 1);
|
|
33
31
|
var import_scheduler = require("../scheduler.cjs");
|
|
34
|
-
var
|
|
32
|
+
var import_tween = require("../tween.cjs");
|
|
35
33
|
var id = 0;
|
|
36
34
|
var running = /* @__PURE__ */ new WeakMap();
|
|
37
|
-
var PROGRESS_PRECISION = 1e-4;
|
|
38
35
|
var CSSUnitConverter = {
|
|
39
36
|
"%": (value, getSizeRef) => value * getSizeRef() / 100,
|
|
40
37
|
vh: (value) => value * window.innerHeight / 100,
|
|
@@ -43,7 +40,7 @@ var CSSUnitConverter = {
|
|
|
43
40
|
vmax: (value) => value * Math.max(window.innerWidth, window.innerHeight) / 100
|
|
44
41
|
};
|
|
45
42
|
function getAnimationStepValue(val, getSizeRef) {
|
|
46
|
-
if (
|
|
43
|
+
if ((0, import_is.isNumber)(val)) {
|
|
47
44
|
return val;
|
|
48
45
|
}
|
|
49
46
|
if (!val[1] || !CSSUnitConverter[val[1]]) {
|
|
@@ -51,19 +48,10 @@ function getAnimationStepValue(val, getSizeRef) {
|
|
|
51
48
|
}
|
|
52
49
|
return CSSUnitConverter[val[1]](val[0], getSizeRef);
|
|
53
50
|
}
|
|
54
|
-
|
|
55
|
-
if (!(0, import_isDefined.default)(ease)) {
|
|
56
|
-
return import_noop.noopValue;
|
|
57
|
-
}
|
|
58
|
-
if (Array.isArray(ease)) {
|
|
59
|
-
return (0, import_easing.cubicBezier)(...ease);
|
|
60
|
-
}
|
|
61
|
-
return ease;
|
|
62
|
-
}
|
|
63
|
-
var generateTranslateRenderStrategy = (sizeRef) => (element, fromValue, toValue, progress) => (0, import_math.lerp)(getAnimationStepValue(fromValue != null ? fromValue : 0, () => element[sizeRef]), getAnimationStepValue(toValue != null ? toValue : 0, () => element[sizeRef]), progress);
|
|
51
|
+
var generateTranslateRenderStrategy = (sizeRef) => (element, fromValue, toValue, progress) => (0, import_math.lerp)(getAnimationStepValue(fromValue ?? 0, () => element[sizeRef]), getAnimationStepValue(toValue ?? 0, () => element[sizeRef]), progress);
|
|
64
52
|
var widthBasedTranslateRenderStrategy = generateTranslateRenderStrategy("offsetWidth");
|
|
65
53
|
var heightBasedTranslateRenderStrategy = generateTranslateRenderStrategy("offsetHeight");
|
|
66
|
-
var generateLerpRenderStrategy = (defaultValue) => (element, fromValue, toValue, progress) => (0, import_math.lerp)(fromValue
|
|
54
|
+
var generateLerpRenderStrategy = (defaultValue) => (element, fromValue, toValue, progress) => (0, import_math.lerp)(fromValue ?? defaultValue, toValue ?? defaultValue, progress);
|
|
67
55
|
var scaleRenderStrategy = generateLerpRenderStrategy(1);
|
|
68
56
|
var degreesRenderStrategy = generateLerpRenderStrategy(0);
|
|
69
57
|
var transformRenderStrategies = {
|
|
@@ -85,20 +73,19 @@ var transformRenderStrategies = {
|
|
|
85
73
|
function render(element, from, to, progress) {
|
|
86
74
|
const stepProgress = to.easing((0, import_math.map)(progress, from.offset, to.offset, 0, 1));
|
|
87
75
|
import_scheduler.domScheduler.read(function renderRead() {
|
|
88
|
-
var _a, _b;
|
|
89
76
|
let opacity = false;
|
|
90
|
-
if ((0,
|
|
91
|
-
opacity = (0, import_math.map)(stepProgress, 0, 1,
|
|
77
|
+
if ((0, import_is.isDefined)(from.opacity) || (0, import_is.isDefined)(to.opacity)) {
|
|
78
|
+
opacity = (0, import_math.map)(stepProgress, 0, 1, from.opacity ?? 1, to.opacity ?? 1);
|
|
92
79
|
} else if (element.style.opacity) {
|
|
93
80
|
opacity = "";
|
|
94
81
|
}
|
|
95
82
|
let transformOrigin = false;
|
|
96
|
-
if ((0,
|
|
83
|
+
if ((0, import_is.isDefined)(to.transformOrigin)) {
|
|
97
84
|
transformOrigin = to.transformOrigin;
|
|
98
85
|
} else if (element.style.transformOrigin) {
|
|
99
86
|
transformOrigin = "";
|
|
100
87
|
}
|
|
101
|
-
const props = Object.fromEntries(import_transform.TRANSFORM_PROPS.filter((name) => (0,
|
|
88
|
+
const props = Object.fromEntries(import_transform.TRANSFORM_PROPS.filter((name) => (0, import_is.isDefined)(from[name]) || (0, import_is.isDefined)(to[name])).map((name) => {
|
|
102
89
|
return [name, transformRenderStrategies[name](element, from[name], to[name], stepProgress)];
|
|
103
90
|
}));
|
|
104
91
|
import_scheduler.domScheduler.write(function renderWrite() {
|
|
@@ -113,91 +100,39 @@ function render(element, from, to, progress) {
|
|
|
113
100
|
});
|
|
114
101
|
}
|
|
115
102
|
function animate(element, keyframes, options = {}) {
|
|
116
|
-
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
103
|
+
const keyframesCount = keyframes.length - 1;
|
|
104
|
+
const normalizedKeyframes = keyframes.map((keyframe, index) => ({
|
|
105
|
+
...keyframe,
|
|
106
|
+
offset: keyframe.offset ?? index / keyframesCount,
|
|
107
|
+
easing: (0, import_tween.normalizeEase)(keyframe.easing)
|
|
108
|
+
}));
|
|
120
109
|
if (!running.has(element)) {
|
|
121
110
|
running.set(element, /* @__PURE__ */ new Map());
|
|
122
111
|
}
|
|
123
|
-
const ease = normalizeEase(options.easing);
|
|
124
|
-
let duration = (_a = options.duration) != null ? _a : 1;
|
|
125
|
-
duration *= 1e3;
|
|
126
|
-
let startTime = performance.now();
|
|
127
|
-
let endTime = startTime + duration;
|
|
128
112
|
const key = `animate-${id}`;
|
|
129
113
|
id += 1;
|
|
130
|
-
|
|
131
|
-
let isRunning = false;
|
|
132
|
-
const keyframesCount = keyframes.length - 1;
|
|
133
|
-
const normalizedKeyframes = keyframes.map((keyframe, index) => {
|
|
134
|
-
var _a2;
|
|
135
|
-
return {
|
|
136
|
-
...keyframe,
|
|
137
|
-
offset: (_a2 = keyframe.offset) != null ? _a2 : index / keyframesCount,
|
|
138
|
-
easing: normalizeEase(keyframe.easing)
|
|
139
|
-
};
|
|
140
|
-
});
|
|
141
|
-
function pause() {
|
|
142
|
-
isRunning = false;
|
|
143
|
-
raf.remove(key);
|
|
144
|
-
}
|
|
145
|
-
function progress(newProgress) {
|
|
146
|
-
if (typeof newProgress === "undefined") {
|
|
147
|
-
return progressValue;
|
|
148
|
-
}
|
|
149
|
-
progressValue = newProgress;
|
|
150
|
-
if (Math.abs(1 - progressValue) < PROGRESS_PRECISION) {
|
|
151
|
-
progressValue = 1;
|
|
152
|
-
pause();
|
|
153
|
-
import_scheduler.domScheduler.afterWrite(() => onFinish(progressValue, easedProgress));
|
|
154
|
-
}
|
|
155
|
-
easedProgress = ease(progressValue);
|
|
114
|
+
function callback(progress) {
|
|
156
115
|
let toIndex = 0;
|
|
157
|
-
while (normalizedKeyframes[toIndex] && normalizedKeyframes[toIndex].offset <=
|
|
116
|
+
while (normalizedKeyframes[toIndex] && normalizedKeyframes[toIndex].offset <= progress && normalizedKeyframes[toIndex].offset !== 1) {
|
|
158
117
|
toIndex += 1;
|
|
159
118
|
}
|
|
160
|
-
render(element, normalizedKeyframes[toIndex - 1], normalizedKeyframes[toIndex],
|
|
161
|
-
onProgress(progressValue, easedProgress);
|
|
162
|
-
return progressValue;
|
|
163
|
-
}
|
|
164
|
-
function tick(props) {
|
|
165
|
-
if (!isRunning) {
|
|
166
|
-
raf.remove(key);
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
progress((0, import_math.clamp01)((0, import_math.map)(props.time, startTime, endTime, 0, 1)));
|
|
170
|
-
}
|
|
171
|
-
function start() {
|
|
172
|
-
const runningKeys = running.get(element);
|
|
173
|
-
runningKeys.forEach((runningPause, runningKey) => {
|
|
174
|
-
runningPause();
|
|
175
|
-
runningKeys.delete(runningKey);
|
|
176
|
-
});
|
|
177
|
-
runningKeys.set(key, pause);
|
|
178
|
-
running.set(element, runningKeys);
|
|
179
|
-
startTime = performance.now();
|
|
180
|
-
endTime = startTime + duration;
|
|
181
|
-
progressValue = 0;
|
|
182
|
-
easedProgress = 0;
|
|
183
|
-
isRunning = true;
|
|
184
|
-
raf.add(key, tick);
|
|
119
|
+
render(element, normalizedKeyframes[toIndex - 1], normalizedKeyframes[toIndex], progress);
|
|
185
120
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
121
|
+
const controls = (0, import_tween.tween)(callback, {
|
|
122
|
+
...options,
|
|
123
|
+
onStart() {
|
|
124
|
+
if ((0, import_is.isFunction)(options.onStart)) {
|
|
125
|
+
options.onStart();
|
|
126
|
+
}
|
|
127
|
+
const runningKeys = running.get(element);
|
|
128
|
+
runningKeys.forEach((runningPause, runningKey) => {
|
|
129
|
+
runningPause();
|
|
130
|
+
runningKeys.delete(runningKey);
|
|
131
|
+
});
|
|
132
|
+
runningKeys.set(key, controls.pause);
|
|
133
|
+
running.set(element, runningKeys);
|
|
189
134
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
isRunning = true;
|
|
193
|
-
raf.add(key, tick);
|
|
194
|
-
}
|
|
195
|
-
return {
|
|
196
|
-
start,
|
|
197
|
-
finish: () => progress(1),
|
|
198
|
-
pause,
|
|
199
|
-
play,
|
|
200
|
-
progress
|
|
201
|
-
};
|
|
135
|
+
});
|
|
136
|
+
return controls;
|
|
202
137
|
}
|
|
203
138
|
if (module.exports.default) module.exports = module.exports.default;
|
package/utils/css/animate.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @typedef {import('./transform.js').TransformProps} TransformProps
|
|
3
|
-
* @typedef {[number, number, number, number]} BezierCurve
|
|
4
3
|
* @typedef {TransformProps & {
|
|
5
4
|
* opacity?: number;
|
|
6
5
|
* transformOrigin?: string;
|
|
7
|
-
* easing?: import('../math/createEases.js').EasingFunction|BezierCurve;
|
|
6
|
+
* easing?: import('../math/createEases.js').EasingFunction|import('../tween.js').BezierCurve;
|
|
8
7
|
* offset?: number;
|
|
9
8
|
* }} Keyframe
|
|
10
9
|
* @typedef {Keyframe & {
|
|
@@ -23,26 +22,15 @@
|
|
|
23
22
|
* Animate an element.
|
|
24
23
|
* @param {HTMLElement} element
|
|
25
24
|
* @param {Keyframe[]} keyframes
|
|
26
|
-
* @param {
|
|
27
|
-
* duration?: number;
|
|
28
|
-
* easing?: import('../math/createEases.js').EasingFunction|BezierCurve;
|
|
29
|
-
* onProgress?: (progress: number, easedProgress: number) => void;
|
|
30
|
-
* onFinish?: (progress: number, easedProgress: number) => void;
|
|
31
|
-
* }} [options]
|
|
25
|
+
* @param {import('../tween.js').TweenOptions} [options]
|
|
32
26
|
* @returns {Animate}
|
|
33
27
|
*/
|
|
34
|
-
export function animate(element: HTMLElement, keyframes: Keyframe[], options?:
|
|
35
|
-
duration?: number;
|
|
36
|
-
easing?: import('../math/createEases.js').EasingFunction | BezierCurve;
|
|
37
|
-
onProgress?: (progress: number, easedProgress: number) => void;
|
|
38
|
-
onFinish?: (progress: number, easedProgress: number) => void;
|
|
39
|
-
}): Animate;
|
|
28
|
+
export function animate(element: HTMLElement, keyframes: Keyframe[], options?: import('../tween.js').TweenOptions): Animate;
|
|
40
29
|
export type TransformProps = import('./transform.js').TransformProps;
|
|
41
|
-
export type BezierCurve = [number, number, number, number];
|
|
42
30
|
export type Keyframe = TransformProps & {
|
|
43
31
|
opacity?: number;
|
|
44
32
|
transformOrigin?: string;
|
|
45
|
-
easing?: import('../math/createEases.js').EasingFunction |
|
|
33
|
+
easing?: import('../math/createEases.js').EasingFunction | import('../tween.js').BezierCurve;
|
|
46
34
|
offset?: number;
|
|
47
35
|
};
|
|
48
36
|
export type NormalizedKeyframe = Keyframe & {
|
package/utils/css/animate.js
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import isDefined from "../isDefined.js";
|
|
1
|
+
import { lerp, map } from "../math/index.js";
|
|
2
|
+
import { isDefined, isFunction, isNumber } from "../is.js";
|
|
4
3
|
import transform, { TRANSFORM_PROPS } from "./transform.js";
|
|
5
|
-
import useRaf from "../../services/raf.js";
|
|
6
4
|
import { domScheduler as scheduler } from "../scheduler.js";
|
|
7
|
-
import {
|
|
5
|
+
import { tween, normalizeEase } from "../tween.js";
|
|
8
6
|
let id = 0;
|
|
9
7
|
const running = /* @__PURE__ */ new WeakMap();
|
|
10
|
-
const PROGRESS_PRECISION = 1e-4;
|
|
11
8
|
const CSSUnitConverter = {
|
|
12
9
|
"%": (value, getSizeRef) => value * getSizeRef() / 100,
|
|
13
10
|
vh: (value) => value * window.innerHeight / 100,
|
|
@@ -16,7 +13,7 @@ const CSSUnitConverter = {
|
|
|
16
13
|
vmax: (value) => value * Math.max(window.innerWidth, window.innerHeight) / 100
|
|
17
14
|
};
|
|
18
15
|
function getAnimationStepValue(val, getSizeRef) {
|
|
19
|
-
if (
|
|
16
|
+
if (isNumber(val)) {
|
|
20
17
|
return val;
|
|
21
18
|
}
|
|
22
19
|
if (!val[1] || !CSSUnitConverter[val[1]]) {
|
|
@@ -24,19 +21,10 @@ function getAnimationStepValue(val, getSizeRef) {
|
|
|
24
21
|
}
|
|
25
22
|
return CSSUnitConverter[val[1]](val[0], getSizeRef);
|
|
26
23
|
}
|
|
27
|
-
|
|
28
|
-
if (!isDefined(ease)) {
|
|
29
|
-
return noopValue;
|
|
30
|
-
}
|
|
31
|
-
if (Array.isArray(ease)) {
|
|
32
|
-
return cubicBezier(...ease);
|
|
33
|
-
}
|
|
34
|
-
return ease;
|
|
35
|
-
}
|
|
36
|
-
const generateTranslateRenderStrategy = (sizeRef) => (element, fromValue, toValue, progress) => lerp(getAnimationStepValue(fromValue != null ? fromValue : 0, () => element[sizeRef]), getAnimationStepValue(toValue != null ? toValue : 0, () => element[sizeRef]), progress);
|
|
24
|
+
const generateTranslateRenderStrategy = (sizeRef) => (element, fromValue, toValue, progress) => lerp(getAnimationStepValue(fromValue ?? 0, () => element[sizeRef]), getAnimationStepValue(toValue ?? 0, () => element[sizeRef]), progress);
|
|
37
25
|
const widthBasedTranslateRenderStrategy = generateTranslateRenderStrategy("offsetWidth");
|
|
38
26
|
const heightBasedTranslateRenderStrategy = generateTranslateRenderStrategy("offsetHeight");
|
|
39
|
-
const generateLerpRenderStrategy = (defaultValue) => (element, fromValue, toValue, progress) => lerp(fromValue
|
|
27
|
+
const generateLerpRenderStrategy = (defaultValue) => (element, fromValue, toValue, progress) => lerp(fromValue ?? defaultValue, toValue ?? defaultValue, progress);
|
|
40
28
|
const scaleRenderStrategy = generateLerpRenderStrategy(1);
|
|
41
29
|
const degreesRenderStrategy = generateLerpRenderStrategy(0);
|
|
42
30
|
const transformRenderStrategies = {
|
|
@@ -58,10 +46,9 @@ const transformRenderStrategies = {
|
|
|
58
46
|
function render(element, from, to, progress) {
|
|
59
47
|
const stepProgress = to.easing(map(progress, from.offset, to.offset, 0, 1));
|
|
60
48
|
scheduler.read(function renderRead() {
|
|
61
|
-
var _a, _b;
|
|
62
49
|
let opacity = false;
|
|
63
50
|
if (isDefined(from.opacity) || isDefined(to.opacity)) {
|
|
64
|
-
opacity = map(stepProgress, 0, 1,
|
|
51
|
+
opacity = map(stepProgress, 0, 1, from.opacity ?? 1, to.opacity ?? 1);
|
|
65
52
|
} else if (element.style.opacity) {
|
|
66
53
|
opacity = "";
|
|
67
54
|
}
|
|
@@ -86,92 +73,40 @@ function render(element, from, to, progress) {
|
|
|
86
73
|
});
|
|
87
74
|
}
|
|
88
75
|
function animate(element, keyframes, options = {}) {
|
|
89
|
-
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
76
|
+
const keyframesCount = keyframes.length - 1;
|
|
77
|
+
const normalizedKeyframes = keyframes.map((keyframe, index) => ({
|
|
78
|
+
...keyframe,
|
|
79
|
+
offset: keyframe.offset ?? index / keyframesCount,
|
|
80
|
+
easing: normalizeEase(keyframe.easing)
|
|
81
|
+
}));
|
|
93
82
|
if (!running.has(element)) {
|
|
94
83
|
running.set(element, /* @__PURE__ */ new Map());
|
|
95
84
|
}
|
|
96
|
-
const ease = normalizeEase(options.easing);
|
|
97
|
-
let duration = (_a = options.duration) != null ? _a : 1;
|
|
98
|
-
duration *= 1e3;
|
|
99
|
-
let startTime = performance.now();
|
|
100
|
-
let endTime = startTime + duration;
|
|
101
85
|
const key = `animate-${id}`;
|
|
102
86
|
id += 1;
|
|
103
|
-
|
|
104
|
-
let isRunning = false;
|
|
105
|
-
const keyframesCount = keyframes.length - 1;
|
|
106
|
-
const normalizedKeyframes = keyframes.map((keyframe, index) => {
|
|
107
|
-
var _a2;
|
|
108
|
-
return {
|
|
109
|
-
...keyframe,
|
|
110
|
-
offset: (_a2 = keyframe.offset) != null ? _a2 : index / keyframesCount,
|
|
111
|
-
easing: normalizeEase(keyframe.easing)
|
|
112
|
-
};
|
|
113
|
-
});
|
|
114
|
-
function pause() {
|
|
115
|
-
isRunning = false;
|
|
116
|
-
raf.remove(key);
|
|
117
|
-
}
|
|
118
|
-
function progress(newProgress) {
|
|
119
|
-
if (typeof newProgress === "undefined") {
|
|
120
|
-
return progressValue;
|
|
121
|
-
}
|
|
122
|
-
progressValue = newProgress;
|
|
123
|
-
if (Math.abs(1 - progressValue) < PROGRESS_PRECISION) {
|
|
124
|
-
progressValue = 1;
|
|
125
|
-
pause();
|
|
126
|
-
scheduler.afterWrite(() => onFinish(progressValue, easedProgress));
|
|
127
|
-
}
|
|
128
|
-
easedProgress = ease(progressValue);
|
|
87
|
+
function callback(progress) {
|
|
129
88
|
let toIndex = 0;
|
|
130
|
-
while (normalizedKeyframes[toIndex] && normalizedKeyframes[toIndex].offset <=
|
|
89
|
+
while (normalizedKeyframes[toIndex] && normalizedKeyframes[toIndex].offset <= progress && normalizedKeyframes[toIndex].offset !== 1) {
|
|
131
90
|
toIndex += 1;
|
|
132
91
|
}
|
|
133
|
-
render(element, normalizedKeyframes[toIndex - 1], normalizedKeyframes[toIndex],
|
|
134
|
-
onProgress(progressValue, easedProgress);
|
|
135
|
-
return progressValue;
|
|
136
|
-
}
|
|
137
|
-
function tick(props) {
|
|
138
|
-
if (!isRunning) {
|
|
139
|
-
raf.remove(key);
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
progress(clamp01(map(props.time, startTime, endTime, 0, 1)));
|
|
143
|
-
}
|
|
144
|
-
function start() {
|
|
145
|
-
const runningKeys = running.get(element);
|
|
146
|
-
runningKeys.forEach((runningPause, runningKey) => {
|
|
147
|
-
runningPause();
|
|
148
|
-
runningKeys.delete(runningKey);
|
|
149
|
-
});
|
|
150
|
-
runningKeys.set(key, pause);
|
|
151
|
-
running.set(element, runningKeys);
|
|
152
|
-
startTime = performance.now();
|
|
153
|
-
endTime = startTime + duration;
|
|
154
|
-
progressValue = 0;
|
|
155
|
-
easedProgress = 0;
|
|
156
|
-
isRunning = true;
|
|
157
|
-
raf.add(key, tick);
|
|
92
|
+
render(element, normalizedKeyframes[toIndex - 1], normalizedKeyframes[toIndex], progress);
|
|
158
93
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
94
|
+
const controls = tween(callback, {
|
|
95
|
+
...options,
|
|
96
|
+
onStart() {
|
|
97
|
+
if (isFunction(options.onStart)) {
|
|
98
|
+
options.onStart();
|
|
99
|
+
}
|
|
100
|
+
const runningKeys = running.get(element);
|
|
101
|
+
runningKeys.forEach((runningPause, runningKey) => {
|
|
102
|
+
runningPause();
|
|
103
|
+
runningKeys.delete(runningKey);
|
|
104
|
+
});
|
|
105
|
+
runningKeys.set(key, controls.pause);
|
|
106
|
+
running.set(element, runningKeys);
|
|
162
107
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
isRunning = true;
|
|
166
|
-
raf.add(key, tick);
|
|
167
|
-
}
|
|
168
|
-
return {
|
|
169
|
-
start,
|
|
170
|
-
finish: () => progress(1),
|
|
171
|
-
pause,
|
|
172
|
-
play,
|
|
173
|
-
progress
|
|
174
|
-
};
|
|
108
|
+
});
|
|
109
|
+
return controls;
|
|
175
110
|
}
|
|
176
111
|
export {
|
|
177
112
|
animate
|
package/utils/css/classes.cjs
CHANGED
|
@@ -24,11 +24,12 @@ __export(classes_exports, {
|
|
|
24
24
|
toggle: () => toggle
|
|
25
25
|
});
|
|
26
26
|
module.exports = __toCommonJS(classes_exports);
|
|
27
|
+
var import_is = require("../is.cjs");
|
|
27
28
|
function setClasses(element, classNames, method, forceToggle) {
|
|
28
29
|
if (!element || !classNames) {
|
|
29
30
|
return;
|
|
30
31
|
}
|
|
31
|
-
const normalizedClassNames =
|
|
32
|
+
const normalizedClassNames = (0, import_is.isArray)(classNames) ? classNames : classNames.split(" ");
|
|
32
33
|
if (method !== "toggle") {
|
|
33
34
|
element.classList[method](...normalizedClassNames);
|
|
34
35
|
} else {
|