framer-motion 12.7.4 → 12.7.5-alpha.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/README.md +1 -1
- package/dist/cjs/client.js +1 -1
- package/dist/cjs/{create-BErHrlzf.js → create-C7kXmWbI.js} +99 -2828
- package/dist/cjs/dom-mini.js +82 -66
- package/dist/cjs/dom.js +264 -3000
- package/dist/cjs/index.js +138 -196
- package/dist/cjs/m.js +13 -170
- package/dist/cjs/mini.js +77 -9
- package/dist/dom-mini.js +1 -1
- package/dist/dom.d.ts +5 -94
- package/dist/dom.js +1 -1
- package/dist/es/animation/animate/sequence.mjs +1 -1
- package/dist/es/animation/animators/waapi/animate-elements.mjs +78 -10
- package/dist/es/animation/interfaces/motion-value.mjs +11 -30
- package/dist/es/animation/interfaces/visual-element-target.mjs +1 -2
- package/dist/es/animation/optimized-appear/store-id.mjs +1 -1
- package/dist/es/animation/sequence/create.mjs +2 -5
- package/dist/es/animation/sequence/utils/edit.mjs +2 -3
- package/dist/es/animation/utils/default-transitions.mjs +1 -1
- package/dist/es/animation/utils/stagger.mjs +1 -1
- package/dist/es/components/Reorder/utils/check-reorder.mjs +1 -1
- package/dist/es/dom.mjs +2 -18
- package/dist/es/gestures/drag/VisualElementDragControls.mjs +1 -3
- package/dist/es/gestures/drag/utils/constraints.mjs +2 -3
- package/dist/es/gestures/focus.mjs +1 -1
- package/dist/es/gestures/pan/PanSession.mjs +1 -2
- package/dist/es/index.mjs +3 -24
- package/dist/es/motion/utils/is-forced-motion-value.mjs +1 -1
- package/dist/es/projection/animation/mix-values.mjs +2 -4
- package/dist/es/projection/geometry/delta-apply.mjs +1 -1
- package/dist/es/projection/geometry/delta-calc.mjs +1 -1
- package/dist/es/projection/geometry/delta-remove.mjs +1 -2
- package/dist/es/projection/node/create-projection-node.mjs +3 -7
- package/dist/es/projection/styles/scale-border-radius.mjs +1 -1
- package/dist/es/projection/styles/scale-box-shadow.mjs +1 -2
- package/dist/es/projection/styles/scale-correction.mjs +1 -1
- package/dist/es/projection.mjs +1 -3
- package/dist/es/render/VisualElement.mjs +2 -9
- package/dist/es/render/dom/DOMVisualElement.mjs +1 -1
- package/dist/es/render/dom/scroll/attach-animation.mjs +17 -0
- package/dist/es/render/dom/scroll/attach-function.mjs +23 -0
- package/dist/es/render/dom/scroll/index.mjs +6 -82
- package/dist/es/render/dom/scroll/offsets/index.mjs +2 -3
- package/dist/es/render/dom/scroll/utils/get-timeline.mjs +29 -0
- package/dist/es/render/html/HTMLVisualElement.mjs +1 -3
- package/dist/es/render/html/utils/build-styles.mjs +1 -4
- package/dist/es/render/html/utils/build-transform.mjs +1 -3
- package/dist/es/render/svg/SVGVisualElement.mjs +1 -3
- package/dist/es/render/svg/config-motion.mjs +1 -2
- package/dist/es/render/svg/utils/path.mjs +1 -1
- package/dist/es/render/svg/utils/scrape-motion-values.mjs +1 -1
- package/dist/es/render/svg/utils/transform-origin.mjs +1 -1
- package/dist/es/render/utils/motion-values.mjs +1 -1
- package/dist/es/utils/delay.mjs +1 -1
- package/dist/es/utils/transform.mjs +1 -1
- package/dist/es/utils/use-cycle.mjs +1 -1
- package/dist/es/utils/use-instant-transition.mjs +4 -4
- package/dist/es/value/use-spring.mjs +2 -3
- package/dist/es/value/use-will-change/get-will-change-name.mjs +1 -2
- package/dist/framer-motion.dev.js +3853 -3394
- package/dist/framer-motion.js +1 -1
- package/dist/m.d.ts +3 -50
- package/dist/mini.js +1 -1
- package/dist/size-rollup-animate.js +1 -1
- package/dist/size-rollup-dom-animation-assets.js +1 -1
- package/dist/size-rollup-dom-animation.js +1 -1
- package/dist/size-rollup-dom-max-assets.js +1 -1
- package/dist/size-rollup-dom-max.js +1 -1
- package/dist/size-rollup-m.js +1 -1
- package/dist/size-rollup-motion.js +1 -1
- package/dist/size-rollup-scroll.js +1 -1
- package/dist/size-rollup-waapi-animate.js +1 -1
- package/dist/types/client.d.ts +4 -3
- package/dist/types/index.d.ts +56 -351
- package/dist/{types.d-B50aGbjN.d.ts → types.d-B1Voffvi.d.ts} +3 -138
- package/package.json +9 -9
- package/dist/es/animation/animators/AcceleratedAnimation.mjs +0 -319
- package/dist/es/animation/animators/BaseAnimation.mjs +0 -120
- package/dist/es/animation/animators/MainThreadAnimation.mjs +0 -394
- package/dist/es/animation/animators/drivers/driver-frameloop.mjs +0 -16
- package/dist/es/animation/animators/utils/accelerated-values.mjs +0 -14
- package/dist/es/animation/animators/utils/can-animate.mjs +0 -42
- package/dist/es/animation/animators/waapi/utils/supports-waapi.mjs +0 -5
- package/dist/es/animation/generators/inertia.mjs +0 -87
- package/dist/es/animation/generators/keyframes.mjs +0 -51
- package/dist/es/animation/generators/spring/defaults.mjs +0 -27
- package/dist/es/animation/generators/spring/find.mjs +0 -85
- package/dist/es/animation/generators/spring/index.mjs +0 -174
- package/dist/es/animation/generators/utils/velocity.mjs +0 -9
- package/dist/es/animation/utils/is-animatable.mjs +0 -30
- package/dist/es/animation/utils/is-none.mjs +0 -15
- package/dist/es/easing/anticipate.mjs +0 -5
- package/dist/es/easing/back.mjs +0 -9
- package/dist/es/easing/circ.mjs +0 -8
- package/dist/es/easing/cubic-bezier.mjs +0 -51
- package/dist/es/easing/ease.mjs +0 -7
- package/dist/es/easing/modifiers/mirror.mjs +0 -5
- package/dist/es/easing/modifiers/reverse.mjs +0 -5
- package/dist/es/easing/steps.mjs +0 -15
- package/dist/es/easing/utils/get-easing-for-segment.mjs +0 -8
- package/dist/es/easing/utils/is-easing-array.mjs +0 -5
- package/dist/es/easing/utils/map.mjs +0 -37
- package/dist/es/render/dom/DOMKeyframesResolver.mjs +0 -130
- package/dist/es/render/dom/scroll/observe.mjs +0 -18
- package/dist/es/render/dom/utils/css-variables-conversion.mjs +0 -42
- package/dist/es/render/dom/utils/is-css-variable.mjs +0 -15
- package/dist/es/render/dom/utils/unit-conversion.mjs +0 -36
- package/dist/es/render/dom/value-types/animatable-none.mjs +0 -15
- package/dist/es/render/dom/value-types/defaults.mjs +0 -30
- package/dist/es/render/dom/value-types/dimensions.mjs +0 -15
- package/dist/es/render/dom/value-types/find.mjs +0 -15
- package/dist/es/render/dom/value-types/get-as-type.mjs +0 -10
- package/dist/es/render/dom/value-types/number-browser.mjs +0 -41
- package/dist/es/render/dom/value-types/number.mjs +0 -18
- package/dist/es/render/dom/value-types/test.mjs +0 -6
- package/dist/es/render/dom/value-types/transform.mjs +0 -31
- package/dist/es/render/dom/value-types/type-auto.mjs +0 -9
- package/dist/es/render/dom/value-types/type-int.mjs +0 -8
- package/dist/es/render/html/utils/keys-position.mjs +0 -13
- package/dist/es/render/html/utils/keys-transform.mjs +0 -28
- package/dist/es/render/html/utils/make-none-animatable.mjs +0 -30
- package/dist/es/render/html/utils/parse-transform.mjs +0 -83
- package/dist/es/render/utils/KeyframesResolver.mjs +0 -163
- package/dist/es/utils/clamp.mjs +0 -9
- package/dist/es/utils/hsla-to-rgba.mjs +0 -42
- package/dist/es/utils/interpolate.mjs +0 -76
- package/dist/es/utils/is-numerical-string.mjs +0 -6
- package/dist/es/utils/is-zero-value-string.mjs +0 -6
- package/dist/es/utils/mix/color.mjs +0 -47
- package/dist/es/utils/mix/complex.mjs +0 -93
- package/dist/es/utils/mix/immediate.mjs +0 -5
- package/dist/es/utils/mix/index.mjs +0 -14
- package/dist/es/utils/mix/number.mjs +0 -26
- package/dist/es/utils/mix/visibility.mjs +0 -16
- package/dist/es/utils/offsets/default.mjs +0 -9
- package/dist/es/utils/offsets/fill.mjs +0 -12
- package/dist/es/utils/offsets/time.mjs +0 -5
- package/dist/es/utils/pipe.mjs +0 -11
- package/dist/es/utils/use-instant-transition-state.mjs +0 -5
- package/dist/es/utils/wrap.mjs +0 -6
- package/dist/es/value/types/color/hex.mjs +0 -40
- package/dist/es/value/types/color/hsla.mjs +0 -22
- package/dist/es/value/types/color/index.mjs +0 -27
- package/dist/es/value/types/color/rgba.mjs +0 -25
- package/dist/es/value/types/color/utils.mjs +0 -29
- package/dist/es/value/types/complex/filter.mjs +0 -30
- package/dist/es/value/types/complex/index.mjs +0 -91
- package/dist/es/value/types/numbers/index.mjs +0 -17
- package/dist/es/value/types/numbers/units.mjs +0 -17
- package/dist/es/value/types/utils/color-regex.mjs +0 -3
- package/dist/es/value/types/utils/float-regex.mjs +0 -3
- package/dist/es/value/types/utils/is-nullish.mjs +0 -5
- package/dist/es/value/types/utils/sanitize.mjs +0 -5
- package/dist/es/value/types/utils/single-color-regex.mjs +0 -3
package/dist/cjs/dom-mini.js
CHANGED
|
@@ -5,58 +5,6 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var motionDom = require('motion-dom');
|
|
6
6
|
var motionUtils = require('motion-utils');
|
|
7
7
|
|
|
8
|
-
const wrap = (min, max, v) => {
|
|
9
|
-
const rangeSize = max - min;
|
|
10
|
-
return ((((v - min) % rangeSize) + rangeSize) % rangeSize) + min;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
const isEasingArray = (ease) => {
|
|
14
|
-
return Array.isArray(ease) && typeof ease[0] !== "number";
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
function getEasingForSegment(easing, i) {
|
|
18
|
-
return isEasingArray(easing) ? easing[wrap(0, easing.length, i)] : easing;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/*
|
|
22
|
-
Value in range from progress
|
|
23
|
-
|
|
24
|
-
Given a lower limit and an upper limit, we return the value within
|
|
25
|
-
that range as expressed by progress (usually a number from 0 to 1)
|
|
26
|
-
|
|
27
|
-
So progress = 0.5 would change
|
|
28
|
-
|
|
29
|
-
from -------- to
|
|
30
|
-
|
|
31
|
-
to
|
|
32
|
-
|
|
33
|
-
from ---- to
|
|
34
|
-
|
|
35
|
-
E.g. from = 10, to = 20, progress = 0.5 => 15
|
|
36
|
-
|
|
37
|
-
@param [number]: Lower limit of range
|
|
38
|
-
@param [number]: Upper limit of range
|
|
39
|
-
@param [number]: The progress between lower and upper limits expressed 0-1
|
|
40
|
-
@return [number]: Value as calculated from progress within range (not limited within range)
|
|
41
|
-
*/
|
|
42
|
-
const mixNumber = (from, to, progress) => {
|
|
43
|
-
return from + (to - from) * progress;
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
function fillOffset(offset, remaining) {
|
|
47
|
-
const min = offset[offset.length - 1];
|
|
48
|
-
for (let i = 1; i <= remaining; i++) {
|
|
49
|
-
const offsetProgress = motionUtils.progress(0, remaining, i);
|
|
50
|
-
offset.push(mixNumber(min, 1, offsetProgress));
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function defaultOffset(arr) {
|
|
55
|
-
const offset = [0];
|
|
56
|
-
fillOffset(offset, arr.length - 1);
|
|
57
|
-
return offset;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
8
|
const isMotionValue = (value) => Boolean(value && value.getVelocity);
|
|
61
9
|
|
|
62
10
|
function isDOMKeyframes(keyframes) {
|
|
@@ -121,8 +69,8 @@ function addKeyframes(sequence, keyframes, easing, offset, startTime, endTime) {
|
|
|
121
69
|
for (let i = 0; i < keyframes.length; i++) {
|
|
122
70
|
sequence.push({
|
|
123
71
|
value: keyframes[i],
|
|
124
|
-
at: mixNumber(startTime, endTime, offset[i]),
|
|
125
|
-
easing: getEasingForSegment(easing, i),
|
|
72
|
+
at: motionDom.mixNumber(startTime, endTime, offset[i]),
|
|
73
|
+
easing: motionUtils.getEasingForSegment(easing, i),
|
|
126
74
|
});
|
|
127
75
|
}
|
|
128
76
|
}
|
|
@@ -196,7 +144,7 @@ function createAnimationsFromSequence(sequence, { defaultTransition = {}, ...seq
|
|
|
196
144
|
let maxDuration = 0;
|
|
197
145
|
const resolveValueSequence = (valueKeyframes, valueTransition, valueSequence, elementIndex = 0, numSubjects = 0) => {
|
|
198
146
|
const valueKeyframesAsList = keyframesAsList(valueKeyframes);
|
|
199
|
-
const { delay = 0, times = defaultOffset(valueKeyframesAsList), type = "keyframes", repeat, repeatType, repeatDelay = 0, ...remainingTransition } = valueTransition;
|
|
147
|
+
const { delay = 0, times = motionDom.defaultOffset(valueKeyframesAsList), type = "keyframes", repeat, repeatType, repeatDelay = 0, ...remainingTransition } = valueTransition;
|
|
200
148
|
let { ease = defaultTransition.ease || "easeOut", duration } = valueTransition;
|
|
201
149
|
/**
|
|
202
150
|
* Resolve stagger() if defined.
|
|
@@ -244,7 +192,7 @@ function createAnimationsFromSequence(sequence, { defaultTransition = {}, ...seq
|
|
|
244
192
|
* Fill out if offset if fewer offsets than keyframes
|
|
245
193
|
*/
|
|
246
194
|
const remainder = times.length - valueKeyframesAsList.length;
|
|
247
|
-
remainder > 0 && fillOffset(times, remainder);
|
|
195
|
+
remainder > 0 && motionDom.fillOffset(times, remainder);
|
|
248
196
|
/**
|
|
249
197
|
* If only one value has been set, ie [1], push a null to the start of
|
|
250
198
|
* the keyframe array. This will let us mark a keyframe at this point
|
|
@@ -268,7 +216,7 @@ function createAnimationsFromSequence(sequence, { defaultTransition = {}, ...seq
|
|
|
268
216
|
times.push(originalTimes[keyframeIndex] + (repeatIndex + 1));
|
|
269
217
|
ease.push(keyframeIndex === 0
|
|
270
218
|
? "linear"
|
|
271
|
-
: getEasingForSegment(originalEase, keyframeIndex - 1));
|
|
219
|
+
: motionUtils.getEasingForSegment(originalEase, keyframeIndex - 1));
|
|
272
220
|
}
|
|
273
221
|
}
|
|
274
222
|
normalizeTimes(times, repeat);
|
|
@@ -395,7 +343,27 @@ function animateElements(elementOrSelector, keyframes, options, scope) {
|
|
|
395
343
|
const elements = motionDom.resolveElements(elementOrSelector, scope);
|
|
396
344
|
const numElements = elements.length;
|
|
397
345
|
motionUtils.invariant(Boolean(numElements), "No valid element provided.");
|
|
398
|
-
|
|
346
|
+
/**
|
|
347
|
+
* WAAPI doesn't support interrupting animations.
|
|
348
|
+
*
|
|
349
|
+
* Therefore, starting animations requires a three-step process:
|
|
350
|
+
* 1. Stop existing animations (write styles to DOM)
|
|
351
|
+
* 2. Resolve keyframes (read styles from DOM)
|
|
352
|
+
* 3. Create new animations (write styles to DOM)
|
|
353
|
+
*
|
|
354
|
+
* The hybrid `animate()` function uses AsyncAnimation to resolve
|
|
355
|
+
* keyframes before creating new animations, which removes style
|
|
356
|
+
* thrashing. Here, we have much stricter filesize constraints.
|
|
357
|
+
* Therefore we do this in a synchronous way that ensures that
|
|
358
|
+
* at least within `animate()` calls there is no style thrashing.
|
|
359
|
+
*
|
|
360
|
+
* In the motion-native-animate-mini-interrupt benchmark this
|
|
361
|
+
* was 80% faster than a single loop.
|
|
362
|
+
*/
|
|
363
|
+
const animationDefinitions = [];
|
|
364
|
+
/**
|
|
365
|
+
* Step 1: Build options and stop existing animations (write)
|
|
366
|
+
*/
|
|
399
367
|
for (let i = 0; i < numElements; i++) {
|
|
400
368
|
const element = elements[i];
|
|
401
369
|
const elementTransition = { ...options };
|
|
@@ -406,21 +374,69 @@ function animateElements(elementOrSelector, keyframes, options, scope) {
|
|
|
406
374
|
elementTransition.delay = elementTransition.delay(i, numElements);
|
|
407
375
|
}
|
|
408
376
|
for (const valueName in keyframes) {
|
|
409
|
-
|
|
377
|
+
let valueKeyframes = keyframes[valueName];
|
|
378
|
+
if (!Array.isArray(valueKeyframes)) {
|
|
379
|
+
valueKeyframes = [valueKeyframes];
|
|
380
|
+
}
|
|
410
381
|
const valueOptions = {
|
|
411
382
|
...motionDom.getValueTransition(elementTransition, valueName),
|
|
412
383
|
};
|
|
413
384
|
valueOptions.duration && (valueOptions.duration = motionUtils.secondsToMilliseconds(valueOptions.duration));
|
|
414
385
|
valueOptions.delay && (valueOptions.delay = motionUtils.secondsToMilliseconds(valueOptions.delay));
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
386
|
+
/**
|
|
387
|
+
* If there's an existing animation playing on this element then stop it
|
|
388
|
+
* before creating a new one.
|
|
389
|
+
*/
|
|
390
|
+
const map = motionDom.getAnimationMap(element);
|
|
391
|
+
const key = motionDom.animationMapKey(valueName, valueOptions.pseudoElement || "");
|
|
392
|
+
const currentAnimation = map.get(key);
|
|
393
|
+
currentAnimation && currentAnimation.stop();
|
|
394
|
+
animationDefinitions.push({
|
|
395
|
+
map,
|
|
396
|
+
key,
|
|
397
|
+
unresolvedKeyframes: valueKeyframes,
|
|
398
|
+
options: {
|
|
399
|
+
...valueOptions,
|
|
400
|
+
element,
|
|
401
|
+
name: valueName,
|
|
402
|
+
allowFlatten: !elementTransition.type && !elementTransition.ease,
|
|
403
|
+
},
|
|
404
|
+
});
|
|
422
405
|
}
|
|
423
406
|
}
|
|
407
|
+
/**
|
|
408
|
+
* Step 2: Resolve keyframes (read)
|
|
409
|
+
*/
|
|
410
|
+
for (let i = 0; i < animationDefinitions.length; i++) {
|
|
411
|
+
const { unresolvedKeyframes, options: animationOptions } = animationDefinitions[i];
|
|
412
|
+
const { element, name, pseudoElement } = animationOptions;
|
|
413
|
+
if (!pseudoElement && unresolvedKeyframes[0] === null) {
|
|
414
|
+
unresolvedKeyframes[0] = motionDom.getComputedStyle(element, name);
|
|
415
|
+
}
|
|
416
|
+
motionDom.fillWildcards(unresolvedKeyframes);
|
|
417
|
+
motionDom.applyPxDefaults(unresolvedKeyframes, name);
|
|
418
|
+
/**
|
|
419
|
+
* If we only have one keyframe, explicitly read the initial keyframe
|
|
420
|
+
* from the computed style. This is to ensure consistency with WAAPI behaviour
|
|
421
|
+
* for restarting animations, for instance .play() after finish, when it
|
|
422
|
+
* has one vs two keyframes.
|
|
423
|
+
*/
|
|
424
|
+
if (!pseudoElement && unresolvedKeyframes.length < 2) {
|
|
425
|
+
unresolvedKeyframes.unshift(motionDom.getComputedStyle(element, name));
|
|
426
|
+
}
|
|
427
|
+
animationOptions.keyframes = unresolvedKeyframes;
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Step 3: Create new animations (write)
|
|
431
|
+
*/
|
|
432
|
+
const animations = [];
|
|
433
|
+
for (let i = 0; i < animationDefinitions.length; i++) {
|
|
434
|
+
const { map, key, options: animationOptions } = animationDefinitions[i];
|
|
435
|
+
const animation = new motionDom.NativeAnimation(animationOptions);
|
|
436
|
+
map.set(key, animation);
|
|
437
|
+
animation.finished.finally(() => map.delete(key));
|
|
438
|
+
animations.push(animation);
|
|
439
|
+
}
|
|
424
440
|
return animations;
|
|
425
441
|
}
|
|
426
442
|
|