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 }; //# sourceMappingURL=waapi.mjs.map