first commit
This commit is contained in:
3
node_modules/motion-dom/dist/es/animation/waapi/easing/cubic-bezier.mjs
generated
vendored
Normal file
3
node_modules/motion-dom/dist/es/animation/waapi/easing/cubic-bezier.mjs
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
const cubicBezierAsString = ([a, b, c, d]) => `cubic-bezier(${a}, ${b}, ${c}, ${d})`;
|
||||
|
||||
export { cubicBezierAsString };
|
||||
14
node_modules/motion-dom/dist/es/animation/waapi/easing/is-supported.mjs
generated
vendored
Normal file
14
node_modules/motion-dom/dist/es/animation/waapi/easing/is-supported.mjs
generated
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
import { isBezierDefinition } from 'motion-utils';
|
||||
import { supportsLinearEasing } from '../../../utils/supports/linear-easing.mjs';
|
||||
import { supportedWaapiEasing } from './supported.mjs';
|
||||
|
||||
function isWaapiSupportedEasing(easing) {
|
||||
return Boolean((typeof easing === "function" && supportsLinearEasing()) ||
|
||||
!easing ||
|
||||
(typeof easing === "string" &&
|
||||
(easing in supportedWaapiEasing || supportsLinearEasing())) ||
|
||||
isBezierDefinition(easing) ||
|
||||
(Array.isArray(easing) && easing.every(isWaapiSupportedEasing)));
|
||||
}
|
||||
|
||||
export { isWaapiSupportedEasing };
|
||||
28
node_modules/motion-dom/dist/es/animation/waapi/easing/map-easing.mjs
generated
vendored
Normal file
28
node_modules/motion-dom/dist/es/animation/waapi/easing/map-easing.mjs
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
import { isBezierDefinition } from 'motion-utils';
|
||||
import { supportsLinearEasing } from '../../../utils/supports/linear-easing.mjs';
|
||||
import { generateLinearEasing } from '../utils/linear.mjs';
|
||||
import { cubicBezierAsString } from './cubic-bezier.mjs';
|
||||
import { supportedWaapiEasing } from './supported.mjs';
|
||||
|
||||
function mapEasingToNativeEasing(easing, duration) {
|
||||
if (!easing) {
|
||||
return undefined;
|
||||
}
|
||||
else if (typeof easing === "function") {
|
||||
return supportsLinearEasing()
|
||||
? generateLinearEasing(easing, duration)
|
||||
: "ease-out";
|
||||
}
|
||||
else if (isBezierDefinition(easing)) {
|
||||
return cubicBezierAsString(easing);
|
||||
}
|
||||
else if (Array.isArray(easing)) {
|
||||
return easing.map((segmentEasing) => mapEasingToNativeEasing(segmentEasing, duration) ||
|
||||
supportedWaapiEasing.easeOut);
|
||||
}
|
||||
else {
|
||||
return supportedWaapiEasing[easing];
|
||||
}
|
||||
}
|
||||
|
||||
export { mapEasingToNativeEasing };
|
||||
15
node_modules/motion-dom/dist/es/animation/waapi/easing/supported.mjs
generated
vendored
Normal file
15
node_modules/motion-dom/dist/es/animation/waapi/easing/supported.mjs
generated
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
import { cubicBezierAsString } from './cubic-bezier.mjs';
|
||||
|
||||
const supportedWaapiEasing = {
|
||||
linear: "linear",
|
||||
ease: "ease",
|
||||
easeIn: "ease-in",
|
||||
easeOut: "ease-out",
|
||||
easeInOut: "ease-in-out",
|
||||
circIn: /*@__PURE__*/ cubicBezierAsString([0, 0.65, 0.55, 1]),
|
||||
circOut: /*@__PURE__*/ cubicBezierAsString([0.55, 0, 1, 0.45]),
|
||||
backIn: /*@__PURE__*/ cubicBezierAsString([0.31, 0.01, 0.66, -0.59]),
|
||||
backOut: /*@__PURE__*/ cubicBezierAsString([0.33, 1.53, 0.69, 0.99]),
|
||||
};
|
||||
|
||||
export { supportedWaapiEasing };
|
||||
39
node_modules/motion-dom/dist/es/animation/waapi/start-waapi-animation.mjs
generated
vendored
Normal file
39
node_modules/motion-dom/dist/es/animation/waapi/start-waapi-animation.mjs
generated
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
import { activeAnimations } from '../../stats/animation-count.mjs';
|
||||
import { statsBuffer } from '../../stats/buffer.mjs';
|
||||
import { mapEasingToNativeEasing } from './easing/map-easing.mjs';
|
||||
|
||||
function startWaapiAnimation(element, valueName, keyframes, { delay = 0, duration = 300, repeat = 0, repeatType = "loop", ease = "easeOut", times, } = {}, pseudoElement = undefined) {
|
||||
const keyframeOptions = {
|
||||
[valueName]: keyframes,
|
||||
};
|
||||
if (times)
|
||||
keyframeOptions.offset = times;
|
||||
const easing = mapEasingToNativeEasing(ease, duration);
|
||||
/**
|
||||
* If this is an easing array, apply to keyframes, not animation as a whole
|
||||
*/
|
||||
if (Array.isArray(easing))
|
||||
keyframeOptions.easing = easing;
|
||||
if (statsBuffer.value) {
|
||||
activeAnimations.waapi++;
|
||||
}
|
||||
const options = {
|
||||
delay,
|
||||
duration,
|
||||
easing: !Array.isArray(easing) ? easing : "linear",
|
||||
fill: "both",
|
||||
iterations: repeat + 1,
|
||||
direction: repeatType === "reverse" ? "alternate" : "normal",
|
||||
};
|
||||
if (pseudoElement)
|
||||
options.pseudoElement = pseudoElement;
|
||||
const animation = element.animate(keyframeOptions, options);
|
||||
if (statsBuffer.value) {
|
||||
animation.finished.finally(() => {
|
||||
activeAnimations.waapi--;
|
||||
});
|
||||
}
|
||||
return animation;
|
||||
}
|
||||
|
||||
export { startWaapiAnimation };
|
||||
13
node_modules/motion-dom/dist/es/animation/waapi/supports/partial-keyframes.mjs
generated
vendored
Normal file
13
node_modules/motion-dom/dist/es/animation/waapi/supports/partial-keyframes.mjs
generated
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
import { memo } from 'motion-utils';
|
||||
|
||||
const supportsPartialKeyframes = /*@__PURE__*/ memo(() => {
|
||||
try {
|
||||
document.createElement("div").animate({ opacity: [1] });
|
||||
}
|
||||
catch (e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
export { supportsPartialKeyframes };
|
||||
43
node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.mjs
generated
vendored
Normal file
43
node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.mjs
generated
vendored
Normal file
@@ -0,0 +1,43 @@
|
||||
import { memo } from 'motion-utils';
|
||||
|
||||
/**
|
||||
* A list of values that can be hardware-accelerated.
|
||||
*/
|
||||
const acceleratedValues = new Set([
|
||||
"opacity",
|
||||
"clipPath",
|
||||
"filter",
|
||||
"transform",
|
||||
// TODO: Could be re-enabled now we have support for linear() easing
|
||||
// "background-color"
|
||||
]);
|
||||
const supportsWaapi = /*@__PURE__*/ memo(() => Object.hasOwnProperty.call(Element.prototype, "animate"));
|
||||
function supportsBrowserAnimation(options) {
|
||||
const { motionValue, name, repeatDelay, repeatType, damping, type } = options;
|
||||
const subject = motionValue?.owner?.current;
|
||||
/**
|
||||
* We use this check instead of isHTMLElement() because we explicitly
|
||||
* **don't** want elements in different timing contexts (i.e. popups)
|
||||
* to be accelerated, as it's not possible to sync these animations
|
||||
* properly with those driven from the main window frameloop.
|
||||
*/
|
||||
if (!(subject instanceof HTMLElement)) {
|
||||
return false;
|
||||
}
|
||||
const { onUpdate, transformTemplate } = motionValue.owner.getProps();
|
||||
return (supportsWaapi() &&
|
||||
name &&
|
||||
acceleratedValues.has(name) &&
|
||||
(name !== "transform" || !transformTemplate) &&
|
||||
/**
|
||||
* If we're outputting values to onUpdate then we can't use WAAPI as there's
|
||||
* no way to read the value from WAAPI every frame.
|
||||
*/
|
||||
!onUpdate &&
|
||||
!repeatDelay &&
|
||||
repeatType !== "mirror" &&
|
||||
damping !== 0 &&
|
||||
type !== "inertia");
|
||||
}
|
||||
|
||||
export { supportsBrowserAnimation };
|
||||
14
node_modules/motion-dom/dist/es/animation/waapi/utils/accelerated-values.mjs
generated
vendored
Normal file
14
node_modules/motion-dom/dist/es/animation/waapi/utils/accelerated-values.mjs
generated
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
/**
|
||||
* A list of values that can be hardware-accelerated.
|
||||
*/
|
||||
const acceleratedValues = new Set([
|
||||
"opacity",
|
||||
"clipPath",
|
||||
"filter",
|
||||
"transform",
|
||||
// TODO: Can be accelerated but currently disabled until https://issues.chromium.org/issues/41491098 is resolved
|
||||
// or until we implement support for linear() easing.
|
||||
// "background-color"
|
||||
]);
|
||||
|
||||
export { acceleratedValues };
|
||||
15
node_modules/motion-dom/dist/es/animation/waapi/utils/apply-generator.mjs
generated
vendored
Normal file
15
node_modules/motion-dom/dist/es/animation/waapi/utils/apply-generator.mjs
generated
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
import { supportsLinearEasing } from '../../../utils/supports/linear-easing.mjs';
|
||||
import { isGenerator } from '../../generators/utils/is-generator.mjs';
|
||||
|
||||
function applyGeneratorOptions({ type, ...options }) {
|
||||
if (isGenerator(type) && supportsLinearEasing()) {
|
||||
return type.applyToOptions(options);
|
||||
}
|
||||
else {
|
||||
options.duration ?? (options.duration = 300);
|
||||
options.ease ?? (options.ease = "easeOut");
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
export { applyGeneratorOptions };
|
||||
12
node_modules/motion-dom/dist/es/animation/waapi/utils/linear.mjs
generated
vendored
Normal file
12
node_modules/motion-dom/dist/es/animation/waapi/utils/linear.mjs
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
const generateLinearEasing = (easing, duration, // as milliseconds
|
||||
resolution = 10 // as milliseconds
|
||||
) => {
|
||||
let points = "";
|
||||
const numPoints = Math.max(Math.round(duration / resolution), 2);
|
||||
for (let i = 0; i < numPoints; i++) {
|
||||
points += Math.round(easing(i / (numPoints - 1)) * 10000) / 10000 + ", ";
|
||||
}
|
||||
return `linear(${points.substring(0, points.length - 2)})`;
|
||||
};
|
||||
|
||||
export { generateLinearEasing };
|
||||
39
node_modules/motion-dom/dist/es/animation/waapi/utils/px-values.mjs
generated
vendored
Normal file
39
node_modules/motion-dom/dist/es/animation/waapi/utils/px-values.mjs
generated
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
const pxValues = new Set([
|
||||
// Border props
|
||||
"borderWidth",
|
||||
"borderTopWidth",
|
||||
"borderRightWidth",
|
||||
"borderBottomWidth",
|
||||
"borderLeftWidth",
|
||||
"borderRadius",
|
||||
"radius",
|
||||
"borderTopLeftRadius",
|
||||
"borderTopRightRadius",
|
||||
"borderBottomRightRadius",
|
||||
"borderBottomLeftRadius",
|
||||
// Positioning props
|
||||
"width",
|
||||
"maxWidth",
|
||||
"height",
|
||||
"maxHeight",
|
||||
"top",
|
||||
"right",
|
||||
"bottom",
|
||||
"left",
|
||||
// Spacing props
|
||||
"padding",
|
||||
"paddingTop",
|
||||
"paddingRight",
|
||||
"paddingBottom",
|
||||
"paddingLeft",
|
||||
"margin",
|
||||
"marginTop",
|
||||
"marginRight",
|
||||
"marginBottom",
|
||||
"marginLeft",
|
||||
// Misc
|
||||
"backgroundPositionX",
|
||||
"backgroundPositionY",
|
||||
]);
|
||||
|
||||
export { pxValues };
|
||||
18
node_modules/motion-dom/dist/es/animation/waapi/utils/unsupported-easing.mjs
generated
vendored
Normal file
18
node_modules/motion-dom/dist/es/animation/waapi/utils/unsupported-easing.mjs
generated
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
import { anticipate, backInOut, circInOut } from 'motion-utils';
|
||||
|
||||
const unsupportedEasingFunctions = {
|
||||
anticipate,
|
||||
backInOut,
|
||||
circInOut,
|
||||
};
|
||||
function isUnsupportedEase(key) {
|
||||
return key in unsupportedEasingFunctions;
|
||||
}
|
||||
function replaceStringEasing(transition) {
|
||||
if (typeof transition.ease === "string" &&
|
||||
isUnsupportedEase(transition.ease)) {
|
||||
transition.ease = unsupportedEasingFunctions[transition.ease];
|
||||
}
|
||||
}
|
||||
|
||||
export { replaceStringEasing };
|
||||
Reference in New Issue
Block a user