@studiometa/js-toolkit 2.0.0-rc.2 → 2.1.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 +54 -18
- package/Base/index.d.ts +47 -26
- package/Base/index.js +54 -18
- package/Base/managers/AbstractManager.cjs +56 -0
- package/Base/managers/AbstractManager.d.ts +44 -0
- package/Base/managers/AbstractManager.js +35 -0
- package/Base/managers/ChildrenManager.cjs +79 -100
- package/Base/managers/ChildrenManager.d.ts +8 -83
- package/Base/managers/ChildrenManager.js +76 -100
- package/Base/managers/EventsManager.cjs +75 -99
- package/Base/managers/EventsManager.d.ts +37 -113
- package/Base/managers/EventsManager.js +75 -99
- package/Base/managers/OptionsManager.cjs +65 -79
- package/Base/managers/OptionsManager.d.ts +41 -80
- package/Base/managers/OptionsManager.js +66 -80
- package/Base/managers/RefsManager.cjs +44 -68
- package/Base/managers/RefsManager.d.ts +12 -66
- package/Base/managers/RefsManager.js +41 -69
- package/Base/managers/ResponsiveOptionsManager.cjs +62 -0
- package/Base/managers/ResponsiveOptionsManager.d.ts +26 -0
- package/Base/managers/ResponsiveOptionsManager.js +37 -0
- package/Base/managers/ServicesManager.cjs +7 -10
- package/Base/managers/ServicesManager.d.ts +16 -19
- package/Base/managers/ServicesManager.js +7 -10
- package/Base/utils.d.ts +4 -4
- package/decorators/index.cjs +2 -0
- package/decorators/index.d.ts +1 -0
- package/decorators/index.js +6 -4
- package/decorators/withBreakpointManager.cjs +0 -1
- package/decorators/withBreakpointManager.d.ts +2 -2
- package/decorators/withBreakpointManager.js +0 -1
- package/decorators/withBreakpointObserver.cjs +1 -2
- package/decorators/withBreakpointObserver.d.ts +1 -1
- package/decorators/withBreakpointObserver.js +1 -2
- package/decorators/withDrag.d.ts +1 -1
- package/decorators/withExtraConfig.d.ts +1 -1
- package/decorators/withFreezedOptions.cjs +12 -3
- package/decorators/withFreezedOptions.d.ts +1 -1
- package/decorators/withFreezedOptions.js +13 -3
- package/decorators/withIntersectionObserver.cjs +0 -1
- package/decorators/withIntersectionObserver.d.ts +1 -1
- package/decorators/withIntersectionObserver.js +0 -1
- package/decorators/withMountWhenInView.cjs +0 -1
- package/decorators/withMountWhenInView.d.ts +1 -1
- package/decorators/withMountWhenInView.js +0 -1
- package/decorators/withResponsiveOptions.cjs +39 -0
- package/decorators/withResponsiveOptions.d.ts +8 -0
- package/decorators/withResponsiveOptions.js +14 -0
- package/decorators/withScrolledInView.cjs +58 -23
- package/decorators/withScrolledInView.d.ts +5 -3
- package/decorators/withScrolledInView.js +59 -24
- package/helpers/createApp.d.ts +3 -26
- package/helpers/getInstanceFromElement.cjs +32 -0
- package/helpers/getInstanceFromElement.d.ts +14 -0
- package/helpers/getInstanceFromElement.js +10 -0
- package/helpers/importOnInteraction.d.ts +3 -5
- package/helpers/importWhenIdle.d.ts +3 -5
- package/helpers/importWhenVisible.d.ts +4 -6
- package/helpers/index.cjs +2 -0
- package/helpers/index.d.ts +1 -0
- package/helpers/index.js +8 -6
- package/helpers/utils.d.ts +3 -4
- package/package.json +2 -1
- package/services/Service.d.ts +9 -9
- package/services/drag.cjs +0 -1
- package/services/drag.d.ts +3 -3
- package/services/drag.js +0 -1
- package/services/key.d.ts +1 -1
- package/services/load.d.ts +1 -1
- package/services/pointer.d.ts +1 -1
- package/services/raf.d.ts +1 -1
- package/services/resize.cjs +2 -2
- package/services/resize.d.ts +1 -1
- package/services/resize.js +2 -2
- package/services/scroll.cjs +3 -1
- package/services/scroll.d.ts +1 -1
- package/services/scroll.js +3 -1
- package/utils/collide/boundingRectToCircle.d.ts +5 -5
- package/utils/collide/collideCircleCircle.d.ts +4 -4
- package/utils/collide/collideCircleRect.d.ts +8 -8
- package/utils/collide/collidePointCircle.d.ts +6 -6
- package/utils/collide/collidePointRect.d.ts +7 -7
- package/utils/collide/collideRectRect.d.ts +5 -5
- package/utils/css/animate.cjs +190 -0
- package/utils/css/animate.d.ts +57 -0
- package/utils/css/animate.js +165 -0
- package/utils/css/classes.cjs +3 -3
- package/utils/css/classes.d.ts +10 -10
- package/utils/css/classes.js +3 -3
- package/utils/css/getOffsetSizes.cjs +47 -0
- package/utils/css/getOffsetSizes.d.ts +15 -0
- package/utils/css/getOffsetSizes.js +25 -0
- package/utils/css/index.cjs +6 -0
- package/utils/css/index.d.ts +3 -0
- package/utils/css/index.js +9 -4
- package/utils/css/matrix.d.ts +14 -15
- package/utils/css/styles.d.ts +2 -2
- package/utils/css/transform.cjs +91 -0
- package/utils/css/transform.d.ts +43 -0
- package/utils/css/transform.js +66 -0
- package/utils/css/transition.cjs +2 -0
- package/utils/css/transition.d.ts +2 -2
- package/utils/css/transition.js +2 -0
- package/utils/debounce.d.ts +4 -4
- package/utils/focusTrap.cjs +1 -1
- package/utils/focusTrap.d.ts +1 -0
- package/utils/focusTrap.js +1 -1
- package/utils/history.d.ts +13 -11
- package/utils/index.cjs +4 -0
- package/utils/index.d.ts +2 -0
- package/utils/index.js +4 -0
- package/utils/isDefined.cjs +28 -0
- package/utils/isDefined.d.ts +7 -0
- package/utils/isDefined.js +6 -0
- package/utils/isFunction.cjs +28 -0
- package/utils/isFunction.d.ts +7 -0
- package/utils/isFunction.js +6 -0
- package/utils/math/clamp.d.ts +1 -1
- package/utils/math/clamp01.d.ts +1 -1
- package/utils/math/damp.d.ts +6 -6
- package/utils/math/ease.d.ts +7 -7
- package/utils/math/index.cjs +2 -0
- package/utils/math/index.d.ts +1 -0
- package/utils/math/index.js +2 -0
- package/utils/math/inertiaFinalValue.d.ts +5 -5
- package/utils/math/lerp.d.ts +4 -4
- package/utils/math/map.d.ts +6 -6
- package/utils/math/round.d.ts +4 -4
- package/utils/memoize.d.ts +1 -1
- package/utils/nextFrame.d.ts +3 -4
- package/utils/nextMicrotask.d.ts +1 -1
- package/utils/nextTick.d.ts +1 -1
- package/utils/object/autoBind.d.ts +3 -3
- package/utils/object/getAllProperties.d.ts +3 -3
- package/utils/object/isObject.d.ts +1 -1
- package/utils/scrollTo.cjs +1 -1
- package/utils/scrollTo.d.ts +1 -1
- package/utils/scrollTo.js +1 -1
- package/utils/string/withLeadingCharacters.d.ts +3 -2
- package/utils/string/withLeadingSlash.d.ts +1 -1
- package/utils/string/withTrailingCharacters.d.ts +3 -2
- package/utils/string/withTrailingSlash.d.ts +1 -1
- package/utils/string/withoutLeadingCharacters.d.ts +3 -2
- package/utils/string/withoutLeadingCharactersRecursive.d.ts +3 -2
- package/utils/string/withoutLeadingSlash.d.ts +1 -1
- package/utils/string/withoutTrailingCharacters.d.ts +3 -2
- package/utils/string/withoutTrailingCharactersRecursive.d.ts +3 -2
- package/utils/string/withoutTrailingSlash.d.ts +1 -1
- package/utils/throttle.cjs +1 -1
- package/utils/throttle.d.ts +3 -3
- package/utils/throttle.js +1 -1
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
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
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
|
|
22
|
+
// packages/js-toolkit/utils/css/animate.js
|
|
23
|
+
var animate_exports = {};
|
|
24
|
+
__export(animate_exports, {
|
|
25
|
+
animate: () => animate
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(animate_exports);
|
|
28
|
+
var import_easing = require("@motionone/easing");
|
|
29
|
+
var import_math = require("../math/index.cjs");
|
|
30
|
+
var import_isDefined = __toESM(require("../isDefined.cjs"), 1);
|
|
31
|
+
var import_transform = __toESM(require("./transform.cjs"), 1);
|
|
32
|
+
var id = 0;
|
|
33
|
+
var running = /* @__PURE__ */ new WeakMap();
|
|
34
|
+
var noop = () => {
|
|
35
|
+
};
|
|
36
|
+
var PROGRESS_PRECISION = 1e-4;
|
|
37
|
+
var CSSUnitConverter = {
|
|
38
|
+
"%": (value, sizeRef) => value * sizeRef / 100,
|
|
39
|
+
vh: (value) => value * window.innerHeight / 100,
|
|
40
|
+
vw: (value) => value * window.innerWidth / 100,
|
|
41
|
+
vmin: (value) => value * Math.min(window.innerWidth, window.innerHeight) / 100,
|
|
42
|
+
vmax: (value) => value * Math.max(window.innerWidth, window.innerHeight) / 100
|
|
43
|
+
};
|
|
44
|
+
function getAnimationStepValue(val, sizeRef) {
|
|
45
|
+
if (typeof val === "number") {
|
|
46
|
+
return val;
|
|
47
|
+
}
|
|
48
|
+
if (!val[1] || !CSSUnitConverter[val[1]]) {
|
|
49
|
+
return val[0];
|
|
50
|
+
}
|
|
51
|
+
return CSSUnitConverter[val[1]](val[0], sizeRef);
|
|
52
|
+
}
|
|
53
|
+
function linear(value) {
|
|
54
|
+
return value;
|
|
55
|
+
}
|
|
56
|
+
function normalizeEase(ease) {
|
|
57
|
+
if (!(0, import_isDefined.default)(ease)) {
|
|
58
|
+
return linear;
|
|
59
|
+
}
|
|
60
|
+
if (Array.isArray(ease)) {
|
|
61
|
+
return (0, import_easing.cubicBezier)(...ease);
|
|
62
|
+
}
|
|
63
|
+
return ease;
|
|
64
|
+
}
|
|
65
|
+
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);
|
|
66
|
+
var widthBasedTranslateRenderStrategy = generateTranslateRenderStrategy("offsetWidth");
|
|
67
|
+
var heightBasedTranslateRenderStrategy = generateTranslateRenderStrategy("offsetHeight");
|
|
68
|
+
var generateLerpRenderStrategy = (defaultValue) => (element, fromValue, toValue, progress) => (0, import_math.lerp)(fromValue != null ? fromValue : defaultValue, toValue != null ? toValue : defaultValue, progress);
|
|
69
|
+
var scaleRenderStrategy = generateLerpRenderStrategy(1);
|
|
70
|
+
var degreesRenderStrategy = generateLerpRenderStrategy(0);
|
|
71
|
+
var transformRenderStrategies = {
|
|
72
|
+
x: widthBasedTranslateRenderStrategy,
|
|
73
|
+
y: heightBasedTranslateRenderStrategy,
|
|
74
|
+
z: widthBasedTranslateRenderStrategy,
|
|
75
|
+
scale: scaleRenderStrategy,
|
|
76
|
+
scaleX: scaleRenderStrategy,
|
|
77
|
+
scaleY: scaleRenderStrategy,
|
|
78
|
+
scaleZ: scaleRenderStrategy,
|
|
79
|
+
skew: degreesRenderStrategy,
|
|
80
|
+
skewX: degreesRenderStrategy,
|
|
81
|
+
skewY: degreesRenderStrategy,
|
|
82
|
+
rotate: degreesRenderStrategy,
|
|
83
|
+
rotateX: degreesRenderStrategy,
|
|
84
|
+
rotateY: degreesRenderStrategy,
|
|
85
|
+
rotateZ: degreesRenderStrategy
|
|
86
|
+
};
|
|
87
|
+
function render(element, from, to, progress) {
|
|
88
|
+
var _a, _b;
|
|
89
|
+
const stepProgress = to.easing((0, import_math.map)(progress, from.offset, to.offset, 0, 1));
|
|
90
|
+
if ((0, import_isDefined.default)(from.opacity) || (0, import_isDefined.default)(to.opacity)) {
|
|
91
|
+
element.style.opacity = (0, import_math.map)(stepProgress, 0, 1, (_a = from.opacity) != null ? _a : 1, (_b = to.opacity) != null ? _b : 1);
|
|
92
|
+
} else if (element.style.opacity) {
|
|
93
|
+
element.style.opacity = "";
|
|
94
|
+
}
|
|
95
|
+
if ((0, import_isDefined.default)(to.transformOrigin)) {
|
|
96
|
+
element.style.transformOrigin = to.transformOrigin;
|
|
97
|
+
} else if (element.style.transformOrigin) {
|
|
98
|
+
element.style.transformOrigin = "";
|
|
99
|
+
}
|
|
100
|
+
(0, import_transform.default)(element, Object.fromEntries(import_transform.TRANSFORM_PROPS.filter((name) => (0, import_isDefined.default)(from[name]) || (0, import_isDefined.default)(to[name])).map((name) => {
|
|
101
|
+
return [name, transformRenderStrategies[name](element, from[name], to[name], stepProgress)];
|
|
102
|
+
})));
|
|
103
|
+
}
|
|
104
|
+
function animate(element, keyframes, options = {}) {
|
|
105
|
+
var _a;
|
|
106
|
+
let progressValue = 0;
|
|
107
|
+
let easedProgress = 0;
|
|
108
|
+
if (!running.has(element)) {
|
|
109
|
+
running.set(element, /* @__PURE__ */ new Map());
|
|
110
|
+
}
|
|
111
|
+
const ease = normalizeEase(options.easing);
|
|
112
|
+
let duration = (_a = options.duration) != null ? _a : 1;
|
|
113
|
+
duration *= 1e3;
|
|
114
|
+
let startTime = performance.now();
|
|
115
|
+
let endTime = startTime + duration;
|
|
116
|
+
const key = `animate-${id}`;
|
|
117
|
+
id += 1;
|
|
118
|
+
const { onProgress = noop, onFinish = noop } = options;
|
|
119
|
+
let isRunning = false;
|
|
120
|
+
const keyframesCount = keyframes.length - 1;
|
|
121
|
+
const normalizedKeyframes = keyframes.map((keyframe, index) => {
|
|
122
|
+
var _a2;
|
|
123
|
+
return {
|
|
124
|
+
...keyframe,
|
|
125
|
+
offset: (_a2 = keyframe.offset) != null ? _a2 : index / keyframesCount,
|
|
126
|
+
easing: normalizeEase(keyframe.easing)
|
|
127
|
+
};
|
|
128
|
+
});
|
|
129
|
+
function pause() {
|
|
130
|
+
isRunning = false;
|
|
131
|
+
}
|
|
132
|
+
function progress(newProgress) {
|
|
133
|
+
if (typeof newProgress === "undefined") {
|
|
134
|
+
return progressValue;
|
|
135
|
+
}
|
|
136
|
+
progressValue = newProgress;
|
|
137
|
+
if (Math.abs(1 - progressValue) < PROGRESS_PRECISION) {
|
|
138
|
+
progressValue = 1;
|
|
139
|
+
pause();
|
|
140
|
+
requestAnimationFrame(() => onFinish(progressValue, easedProgress));
|
|
141
|
+
}
|
|
142
|
+
easedProgress = ease(progressValue);
|
|
143
|
+
let toIndex = 0;
|
|
144
|
+
while (normalizedKeyframes[toIndex] && normalizedKeyframes[toIndex].offset <= easedProgress && normalizedKeyframes[toIndex].offset !== 1) {
|
|
145
|
+
toIndex += 1;
|
|
146
|
+
}
|
|
147
|
+
render(element, normalizedKeyframes[toIndex - 1], normalizedKeyframes[toIndex], easedProgress);
|
|
148
|
+
onProgress(progressValue, easedProgress);
|
|
149
|
+
return progressValue;
|
|
150
|
+
}
|
|
151
|
+
function tick(time) {
|
|
152
|
+
if (!isRunning) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
progress((0, import_math.clamp01)((0, import_math.map)(time, startTime, endTime, 0, 1)));
|
|
156
|
+
requestAnimationFrame(tick);
|
|
157
|
+
}
|
|
158
|
+
function start() {
|
|
159
|
+
const runningKeys = running.get(element);
|
|
160
|
+
runningKeys.forEach((runningPause, runningKey) => {
|
|
161
|
+
runningPause();
|
|
162
|
+
runningKeys.delete(runningKey);
|
|
163
|
+
});
|
|
164
|
+
runningKeys.set(key, pause);
|
|
165
|
+
running.set(element, runningKeys);
|
|
166
|
+
startTime = performance.now();
|
|
167
|
+
endTime = startTime + duration;
|
|
168
|
+
progressValue = 0;
|
|
169
|
+
easedProgress = 0;
|
|
170
|
+
isRunning = true;
|
|
171
|
+
requestAnimationFrame(tick);
|
|
172
|
+
}
|
|
173
|
+
function play() {
|
|
174
|
+
if (isRunning) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
startTime = performance.now() - (0, import_math.lerp)(0, duration, progressValue);
|
|
178
|
+
endTime = startTime + duration;
|
|
179
|
+
isRunning = true;
|
|
180
|
+
requestAnimationFrame(tick);
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
start,
|
|
184
|
+
finish: () => progress(1),
|
|
185
|
+
pause,
|
|
186
|
+
play,
|
|
187
|
+
progress
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
if (module.exports.default) module.exports = module.exports.default;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {import('./transform.js').TransformProps} TransformProps
|
|
3
|
+
* @typedef {import('../math/ease.js').EasingFunction} EasingFn
|
|
4
|
+
* @typedef {[number, number, number, number]} BezierCurve
|
|
5
|
+
* @typedef {{
|
|
6
|
+
* duration?: number;
|
|
7
|
+
* easing?: EasingFn|BezierCurve;
|
|
8
|
+
* onProgress?: (progress: number, easedProgress: number) => void;
|
|
9
|
+
* onFinish?: (progress: number, easedProgress: number) => void;
|
|
10
|
+
* }} Options
|
|
11
|
+
* @typedef {TransformProps & {
|
|
12
|
+
* opacity?: number;
|
|
13
|
+
* transformOrigin?: string;
|
|
14
|
+
* easing?: EasingFn|BezierCurve;
|
|
15
|
+
* offset?: number;
|
|
16
|
+
* }} Keyframe
|
|
17
|
+
* @typedef {Keyframe & {
|
|
18
|
+
* easing: EasingFn;
|
|
19
|
+
* offset: number;
|
|
20
|
+
* }} NormalizedKeyframe
|
|
21
|
+
* @typedef {{
|
|
22
|
+
* start: () => void;
|
|
23
|
+
* pause: () => void;
|
|
24
|
+
* play: () => void;
|
|
25
|
+
* finish: () => void;
|
|
26
|
+
* progress: (value: number?) => number
|
|
27
|
+
* }} Animate
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Animate an element.
|
|
31
|
+
* @param {HTMLElement} element
|
|
32
|
+
* @param {Keyframe[]} keyframes
|
|
33
|
+
* @param {Options} options
|
|
34
|
+
* @returns {Animate}
|
|
35
|
+
*/
|
|
36
|
+
export function animate(element: HTMLElement, keyframes: Keyframe[], options?: Options): Animate;
|
|
37
|
+
export type TransformProps = import('./transform.js').TransformProps;
|
|
38
|
+
export type EasingFn = import('../math/ease.js').EasingFunction;
|
|
39
|
+
export type BezierCurve = [number, number, number, number];
|
|
40
|
+
export type Options = Options;
|
|
41
|
+
export type Keyframe = TransformProps & {
|
|
42
|
+
opacity?: number;
|
|
43
|
+
transformOrigin?: string;
|
|
44
|
+
easing?: EasingFn | [number, number, number, number];
|
|
45
|
+
offset?: number;
|
|
46
|
+
};
|
|
47
|
+
export type NormalizedKeyframe = Keyframe & {
|
|
48
|
+
easing: EasingFn;
|
|
49
|
+
offset: number;
|
|
50
|
+
};
|
|
51
|
+
export type Animate = {
|
|
52
|
+
start: () => void;
|
|
53
|
+
pause: () => void;
|
|
54
|
+
play: () => void;
|
|
55
|
+
finish: () => void;
|
|
56
|
+
progress: (value: number | null) => number;
|
|
57
|
+
};
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { cubicBezier } from "@motionone/easing";
|
|
2
|
+
import { lerp, map, clamp01 } from "../math/index.js";
|
|
3
|
+
import isDefined from "../isDefined.js";
|
|
4
|
+
import transform, { TRANSFORM_PROPS } from "./transform.js";
|
|
5
|
+
let id = 0;
|
|
6
|
+
const running = /* @__PURE__ */ new WeakMap();
|
|
7
|
+
const noop = () => {
|
|
8
|
+
};
|
|
9
|
+
const PROGRESS_PRECISION = 1e-4;
|
|
10
|
+
const CSSUnitConverter = {
|
|
11
|
+
"%": (value, sizeRef) => value * sizeRef / 100,
|
|
12
|
+
vh: (value) => value * window.innerHeight / 100,
|
|
13
|
+
vw: (value) => value * window.innerWidth / 100,
|
|
14
|
+
vmin: (value) => value * Math.min(window.innerWidth, window.innerHeight) / 100,
|
|
15
|
+
vmax: (value) => value * Math.max(window.innerWidth, window.innerHeight) / 100
|
|
16
|
+
};
|
|
17
|
+
function getAnimationStepValue(val, sizeRef) {
|
|
18
|
+
if (typeof val === "number") {
|
|
19
|
+
return val;
|
|
20
|
+
}
|
|
21
|
+
if (!val[1] || !CSSUnitConverter[val[1]]) {
|
|
22
|
+
return val[0];
|
|
23
|
+
}
|
|
24
|
+
return CSSUnitConverter[val[1]](val[0], sizeRef);
|
|
25
|
+
}
|
|
26
|
+
function linear(value) {
|
|
27
|
+
return value;
|
|
28
|
+
}
|
|
29
|
+
function normalizeEase(ease) {
|
|
30
|
+
if (!isDefined(ease)) {
|
|
31
|
+
return linear;
|
|
32
|
+
}
|
|
33
|
+
if (Array.isArray(ease)) {
|
|
34
|
+
return cubicBezier(...ease);
|
|
35
|
+
}
|
|
36
|
+
return ease;
|
|
37
|
+
}
|
|
38
|
+
const generateTranslateRenderStrategy = (sizeRef) => (element, fromValue, toValue, progress) => lerp(getAnimationStepValue(fromValue != null ? fromValue : 0, element[sizeRef]), getAnimationStepValue(toValue != null ? toValue : 0, element[sizeRef]), progress);
|
|
39
|
+
const widthBasedTranslateRenderStrategy = generateTranslateRenderStrategy("offsetWidth");
|
|
40
|
+
const heightBasedTranslateRenderStrategy = generateTranslateRenderStrategy("offsetHeight");
|
|
41
|
+
const generateLerpRenderStrategy = (defaultValue) => (element, fromValue, toValue, progress) => lerp(fromValue != null ? fromValue : defaultValue, toValue != null ? toValue : defaultValue, progress);
|
|
42
|
+
const scaleRenderStrategy = generateLerpRenderStrategy(1);
|
|
43
|
+
const degreesRenderStrategy = generateLerpRenderStrategy(0);
|
|
44
|
+
const transformRenderStrategies = {
|
|
45
|
+
x: widthBasedTranslateRenderStrategy,
|
|
46
|
+
y: heightBasedTranslateRenderStrategy,
|
|
47
|
+
z: widthBasedTranslateRenderStrategy,
|
|
48
|
+
scale: scaleRenderStrategy,
|
|
49
|
+
scaleX: scaleRenderStrategy,
|
|
50
|
+
scaleY: scaleRenderStrategy,
|
|
51
|
+
scaleZ: scaleRenderStrategy,
|
|
52
|
+
skew: degreesRenderStrategy,
|
|
53
|
+
skewX: degreesRenderStrategy,
|
|
54
|
+
skewY: degreesRenderStrategy,
|
|
55
|
+
rotate: degreesRenderStrategy,
|
|
56
|
+
rotateX: degreesRenderStrategy,
|
|
57
|
+
rotateY: degreesRenderStrategy,
|
|
58
|
+
rotateZ: degreesRenderStrategy
|
|
59
|
+
};
|
|
60
|
+
function render(element, from, to, progress) {
|
|
61
|
+
var _a, _b;
|
|
62
|
+
const stepProgress = to.easing(map(progress, from.offset, to.offset, 0, 1));
|
|
63
|
+
if (isDefined(from.opacity) || isDefined(to.opacity)) {
|
|
64
|
+
element.style.opacity = map(stepProgress, 0, 1, (_a = from.opacity) != null ? _a : 1, (_b = to.opacity) != null ? _b : 1);
|
|
65
|
+
} else if (element.style.opacity) {
|
|
66
|
+
element.style.opacity = "";
|
|
67
|
+
}
|
|
68
|
+
if (isDefined(to.transformOrigin)) {
|
|
69
|
+
element.style.transformOrigin = to.transformOrigin;
|
|
70
|
+
} else if (element.style.transformOrigin) {
|
|
71
|
+
element.style.transformOrigin = "";
|
|
72
|
+
}
|
|
73
|
+
transform(element, Object.fromEntries(TRANSFORM_PROPS.filter((name) => isDefined(from[name]) || isDefined(to[name])).map((name) => {
|
|
74
|
+
return [name, transformRenderStrategies[name](element, from[name], to[name], stepProgress)];
|
|
75
|
+
})));
|
|
76
|
+
}
|
|
77
|
+
function animate(element, keyframes, options = {}) {
|
|
78
|
+
var _a;
|
|
79
|
+
let progressValue = 0;
|
|
80
|
+
let easedProgress = 0;
|
|
81
|
+
if (!running.has(element)) {
|
|
82
|
+
running.set(element, /* @__PURE__ */ new Map());
|
|
83
|
+
}
|
|
84
|
+
const ease = normalizeEase(options.easing);
|
|
85
|
+
let duration = (_a = options.duration) != null ? _a : 1;
|
|
86
|
+
duration *= 1e3;
|
|
87
|
+
let startTime = performance.now();
|
|
88
|
+
let endTime = startTime + duration;
|
|
89
|
+
const key = `animate-${id}`;
|
|
90
|
+
id += 1;
|
|
91
|
+
const { onProgress = noop, onFinish = noop } = options;
|
|
92
|
+
let isRunning = false;
|
|
93
|
+
const keyframesCount = keyframes.length - 1;
|
|
94
|
+
const normalizedKeyframes = keyframes.map((keyframe, index) => {
|
|
95
|
+
var _a2;
|
|
96
|
+
return {
|
|
97
|
+
...keyframe,
|
|
98
|
+
offset: (_a2 = keyframe.offset) != null ? _a2 : index / keyframesCount,
|
|
99
|
+
easing: normalizeEase(keyframe.easing)
|
|
100
|
+
};
|
|
101
|
+
});
|
|
102
|
+
function pause() {
|
|
103
|
+
isRunning = false;
|
|
104
|
+
}
|
|
105
|
+
function progress(newProgress) {
|
|
106
|
+
if (typeof newProgress === "undefined") {
|
|
107
|
+
return progressValue;
|
|
108
|
+
}
|
|
109
|
+
progressValue = newProgress;
|
|
110
|
+
if (Math.abs(1 - progressValue) < PROGRESS_PRECISION) {
|
|
111
|
+
progressValue = 1;
|
|
112
|
+
pause();
|
|
113
|
+
requestAnimationFrame(() => onFinish(progressValue, easedProgress));
|
|
114
|
+
}
|
|
115
|
+
easedProgress = ease(progressValue);
|
|
116
|
+
let toIndex = 0;
|
|
117
|
+
while (normalizedKeyframes[toIndex] && normalizedKeyframes[toIndex].offset <= easedProgress && normalizedKeyframes[toIndex].offset !== 1) {
|
|
118
|
+
toIndex += 1;
|
|
119
|
+
}
|
|
120
|
+
render(element, normalizedKeyframes[toIndex - 1], normalizedKeyframes[toIndex], easedProgress);
|
|
121
|
+
onProgress(progressValue, easedProgress);
|
|
122
|
+
return progressValue;
|
|
123
|
+
}
|
|
124
|
+
function tick(time) {
|
|
125
|
+
if (!isRunning) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
progress(clamp01(map(time, startTime, endTime, 0, 1)));
|
|
129
|
+
requestAnimationFrame(tick);
|
|
130
|
+
}
|
|
131
|
+
function start() {
|
|
132
|
+
const runningKeys = running.get(element);
|
|
133
|
+
runningKeys.forEach((runningPause, runningKey) => {
|
|
134
|
+
runningPause();
|
|
135
|
+
runningKeys.delete(runningKey);
|
|
136
|
+
});
|
|
137
|
+
runningKeys.set(key, pause);
|
|
138
|
+
running.set(element, runningKeys);
|
|
139
|
+
startTime = performance.now();
|
|
140
|
+
endTime = startTime + duration;
|
|
141
|
+
progressValue = 0;
|
|
142
|
+
easedProgress = 0;
|
|
143
|
+
isRunning = true;
|
|
144
|
+
requestAnimationFrame(tick);
|
|
145
|
+
}
|
|
146
|
+
function play() {
|
|
147
|
+
if (isRunning) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
startTime = performance.now() - lerp(0, duration, progressValue);
|
|
151
|
+
endTime = startTime + duration;
|
|
152
|
+
isRunning = true;
|
|
153
|
+
requestAnimationFrame(tick);
|
|
154
|
+
}
|
|
155
|
+
return {
|
|
156
|
+
start,
|
|
157
|
+
finish: () => progress(1),
|
|
158
|
+
pause,
|
|
159
|
+
play,
|
|
160
|
+
progress
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
export {
|
|
164
|
+
animate
|
|
165
|
+
};
|
package/utils/css/classes.cjs
CHANGED
|
@@ -24,7 +24,7 @@ __export(classes_exports, {
|
|
|
24
24
|
toggle: () => toggle
|
|
25
25
|
});
|
|
26
26
|
module.exports = __toCommonJS(classes_exports);
|
|
27
|
-
function setClasses(element, classNames, method
|
|
27
|
+
function setClasses(element, classNames, method, forceToggle) {
|
|
28
28
|
if (!element || !classNames) {
|
|
29
29
|
return;
|
|
30
30
|
}
|
|
@@ -36,12 +36,12 @@ function setClasses(element, classNames, method = "add", forceToggle = void 0) {
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
function add(element, classNames) {
|
|
39
|
-
setClasses(element, classNames);
|
|
39
|
+
setClasses(element, classNames, "add");
|
|
40
40
|
}
|
|
41
41
|
function remove(element, classNames) {
|
|
42
42
|
setClasses(element, classNames, "remove");
|
|
43
43
|
}
|
|
44
|
-
function toggle(element, classNames, force
|
|
44
|
+
function toggle(element, classNames, force) {
|
|
45
45
|
setClasses(element, classNames, "toggle", force);
|
|
46
46
|
}
|
|
47
47
|
if (module.exports.default) module.exports = module.exports.default;
|
package/utils/css/classes.d.ts
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Add class names to an element.
|
|
3
3
|
*
|
|
4
|
-
* @param
|
|
5
|
-
* @param
|
|
6
|
-
* @
|
|
4
|
+
* @param {HTMLElement} element The element to update.
|
|
5
|
+
* @param {string|string[]} classNames A string of class names.
|
|
6
|
+
* @returns {void}
|
|
7
7
|
*/
|
|
8
8
|
export function add(element: HTMLElement, classNames: string | string[]): void;
|
|
9
9
|
/**
|
|
10
10
|
* Remove class names from an element.
|
|
11
11
|
*
|
|
12
|
-
* @param
|
|
13
|
-
* @param
|
|
14
|
-
* @
|
|
12
|
+
* @param {HTMLElement} element The element to update.
|
|
13
|
+
* @param {string|string[]} classNames A string of class names.
|
|
14
|
+
* @returns {void}
|
|
15
15
|
*/
|
|
16
16
|
export function remove(element: HTMLElement, classNames: string | string[]): void;
|
|
17
17
|
/**
|
|
18
18
|
* Toggle class names from an element.
|
|
19
19
|
*
|
|
20
|
-
* @param
|
|
21
|
-
* @param
|
|
22
|
-
* @param
|
|
23
|
-
* @
|
|
20
|
+
* @param {HTMLElement} element The element to update.
|
|
21
|
+
* @param {string|string[]} classNames A string of class names.
|
|
22
|
+
* @param {boolean} [force] Force toggle?
|
|
23
|
+
* @returns {void}
|
|
24
24
|
*/
|
|
25
25
|
export function toggle(element: HTMLElement, classNames: string | string[], force?: boolean): void;
|
package/utils/css/classes.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function setClasses(element, classNames, method
|
|
1
|
+
function setClasses(element, classNames, method, forceToggle) {
|
|
2
2
|
if (!element || !classNames) {
|
|
3
3
|
return;
|
|
4
4
|
}
|
|
@@ -10,12 +10,12 @@ function setClasses(element, classNames, method = "add", forceToggle = void 0) {
|
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
function add(element, classNames) {
|
|
13
|
-
setClasses(element, classNames);
|
|
13
|
+
setClasses(element, classNames, "add");
|
|
14
14
|
}
|
|
15
15
|
function remove(element, classNames) {
|
|
16
16
|
setClasses(element, classNames, "remove");
|
|
17
17
|
}
|
|
18
|
-
function toggle(element, classNames, force
|
|
18
|
+
function toggle(element, classNames, force) {
|
|
19
19
|
setClasses(element, classNames, "toggle", force);
|
|
20
20
|
}
|
|
21
21
|
export {
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// packages/js-toolkit/utils/css/getOffsetSizes.js
|
|
20
|
+
var getOffsetSizes_exports = {};
|
|
21
|
+
__export(getOffsetSizes_exports, {
|
|
22
|
+
default: () => getOffsetSizes
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(getOffsetSizes_exports);
|
|
25
|
+
function getOffsetSizes(element) {
|
|
26
|
+
let parent = element;
|
|
27
|
+
let x = -window.pageXOffset;
|
|
28
|
+
let y = -window.pageYOffset;
|
|
29
|
+
while (parent) {
|
|
30
|
+
x += parent.offsetLeft;
|
|
31
|
+
y += parent.offsetTop;
|
|
32
|
+
parent = parent.offsetParent;
|
|
33
|
+
}
|
|
34
|
+
const width = element.offsetWidth;
|
|
35
|
+
const height = element.offsetWidth;
|
|
36
|
+
return {
|
|
37
|
+
x,
|
|
38
|
+
y,
|
|
39
|
+
width,
|
|
40
|
+
height,
|
|
41
|
+
top: y,
|
|
42
|
+
right: width + x,
|
|
43
|
+
bottom: height + y,
|
|
44
|
+
left: x
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (module.exports.default) module.exports = module.exports.default;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get a `DOMRect` like `Object` for an element, without its transforms.
|
|
3
|
+
* @param {HTMLElement} element
|
|
4
|
+
* @returns {{ x: number, y: number, width: number, height: number, top: number, right: number, bottom: number, left: number }}
|
|
5
|
+
*/
|
|
6
|
+
export default function getOffsetSizes(element: HTMLElement): {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
top: number;
|
|
12
|
+
right: number;
|
|
13
|
+
bottom: number;
|
|
14
|
+
left: number;
|
|
15
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
function getOffsetSizes(element) {
|
|
2
|
+
let parent = element;
|
|
3
|
+
let x = -window.pageXOffset;
|
|
4
|
+
let y = -window.pageYOffset;
|
|
5
|
+
while (parent) {
|
|
6
|
+
x += parent.offsetLeft;
|
|
7
|
+
y += parent.offsetTop;
|
|
8
|
+
parent = parent.offsetParent;
|
|
9
|
+
}
|
|
10
|
+
const width = element.offsetWidth;
|
|
11
|
+
const height = element.offsetWidth;
|
|
12
|
+
return {
|
|
13
|
+
x,
|
|
14
|
+
y,
|
|
15
|
+
width,
|
|
16
|
+
height,
|
|
17
|
+
top: y,
|
|
18
|
+
right: width + x,
|
|
19
|
+
bottom: height + y,
|
|
20
|
+
left: x
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export {
|
|
24
|
+
getOffsetSizes as default
|
|
25
|
+
};
|
package/utils/css/index.cjs
CHANGED
|
@@ -16,6 +16,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
}
|
|
17
17
|
return to;
|
|
18
18
|
};
|
|
19
|
+
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
19
20
|
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
21
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
22
|
|
|
@@ -24,15 +25,20 @@ var css_exports = {};
|
|
|
24
25
|
__export(css_exports, {
|
|
25
26
|
addClass: () => import_classes.add,
|
|
26
27
|
addStyle: () => import_styles.add,
|
|
28
|
+
getOffsetSizes: () => import_getOffsetSizes.default,
|
|
27
29
|
matrix: () => import_matrix.default,
|
|
28
30
|
removeClass: () => import_classes.remove,
|
|
29
31
|
removeStyle: () => import_styles.remove,
|
|
30
32
|
toggleClass: () => import_classes.toggle,
|
|
33
|
+
transform: () => import_transform.default,
|
|
31
34
|
transition: () => import_transition.default
|
|
32
35
|
});
|
|
33
36
|
module.exports = __toCommonJS(css_exports);
|
|
37
|
+
__reExport(css_exports, require("./animate.cjs"), module.exports);
|
|
34
38
|
var import_classes = require("./classes.cjs");
|
|
35
39
|
var import_styles = require("./styles.cjs");
|
|
40
|
+
var import_getOffsetSizes = __toESM(require("./getOffsetSizes.cjs"), 1);
|
|
36
41
|
var import_matrix = __toESM(require("./matrix.cjs"), 1);
|
|
42
|
+
var import_transform = __toESM(require("./transform.cjs"), 1);
|
|
37
43
|
var import_transition = __toESM(require("./transition.cjs"), 1);
|
|
38
44
|
if (module.exports.default) module.exports = module.exports.default;
|
package/utils/css/index.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
export * from "./animate.js";
|
|
2
|
+
export { default as getOffsetSizes } from "./getOffsetSizes.js";
|
|
1
3
|
export { default as matrix } from "./matrix.js";
|
|
4
|
+
export { default as transform } from "./transform.js";
|
|
2
5
|
export { default as transition } from "./transition.js";
|
|
3
6
|
export { add as addClass, remove as removeClass, toggle as toggleClass } from "./classes.js";
|
|
4
7
|
export { add as addStyle, remove as removeStyle } from "./styles.js";
|
package/utils/css/index.js
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
|
+
export * from "./animate.js";
|
|
1
2
|
import { add, remove, toggle } from "./classes.js";
|
|
2
3
|
import { add as add2, remove as remove2 } from "./styles.js";
|
|
3
|
-
import { default as default2 } from "./
|
|
4
|
-
import { default as default3 } from "./
|
|
4
|
+
import { default as default2 } from "./getOffsetSizes.js";
|
|
5
|
+
import { default as default3 } from "./matrix.js";
|
|
6
|
+
import { default as default4 } from "./transform.js";
|
|
7
|
+
import { default as default5 } from "./transition.js";
|
|
5
8
|
export {
|
|
6
9
|
add as addClass,
|
|
7
10
|
add2 as addStyle,
|
|
8
|
-
default2 as
|
|
11
|
+
default2 as getOffsetSizes,
|
|
12
|
+
default3 as matrix,
|
|
9
13
|
remove as removeClass,
|
|
10
14
|
remove2 as removeStyle,
|
|
11
15
|
toggle as toggleClass,
|
|
12
|
-
|
|
16
|
+
default4 as transform,
|
|
17
|
+
default5 as transition
|
|
13
18
|
};
|