{"version":3,"file":"size-rollup-motion.js","sources":["../../motion-utils/dist/es/array.mjs","../../motion-utils/dist/es/clamp.mjs","../../motion-utils/dist/es/format-error-message.mjs","../../motion-utils/dist/es/errors.mjs","../../motion-utils/dist/es/global-config.mjs","../../motion-utils/dist/es/is-numerical-string.mjs","../../motion-utils/dist/es/is-object.mjs","../../motion-utils/dist/es/is-zero-value-string.mjs","../../motion-utils/dist/es/memo.mjs","../../motion-utils/dist/es/noop.mjs","../../motion-utils/dist/es/pipe.mjs","../../motion-utils/dist/es/progress.mjs","../../motion-utils/dist/es/subscription-manager.mjs","../../motion-utils/dist/es/time-conversion.mjs","../../motion-utils/dist/es/velocity-per-second.mjs","../../motion-utils/dist/es/easing/cubic-bezier.mjs","../../motion-utils/dist/es/easing/modifiers/mirror.mjs","../../motion-utils/dist/es/easing/modifiers/reverse.mjs","../../motion-utils/dist/es/easing/back.mjs","../../motion-utils/dist/es/easing/anticipate.mjs","../../motion-utils/dist/es/easing/circ.mjs","../../motion-utils/dist/es/easing/ease.mjs","../../motion-utils/dist/es/easing/utils/is-bezier-definition.mjs","../../motion-utils/dist/es/easing/utils/map.mjs","../lib/context/LayoutGroupContext.js","../lib/context/LazyContext.js","../lib/context/MotionConfigContext.js","../lib/context/MotionContext/index.js","../../motion-dom/dist/es/frameloop/order.mjs","../../motion-dom/dist/es/frameloop/batcher.mjs","../../motion-dom/dist/es/frameloop/render-step.mjs","../../motion-dom/dist/es/frameloop/frame.mjs","../../motion-dom/dist/es/frameloop/sync-time.mjs","../../motion-dom/dist/es/animation/utils/is-css-variable.mjs","../../motion-dom/dist/es/value/types/numbers/index.mjs","../../motion-dom/dist/es/value/types/utils/sanitize.mjs","../../motion-dom/dist/es/value/types/utils/float-regex.mjs","../../motion-dom/dist/es/value/types/utils/single-color-regex.mjs","../../motion-dom/dist/es/value/types/color/utils.mjs","../../motion-dom/dist/es/value/types/utils/is-nullish.mjs","../../motion-dom/dist/es/value/types/color/rgba.mjs","../../motion-dom/dist/es/value/types/color/hex.mjs","../../motion-dom/dist/es/value/types/numbers/units.mjs","../../motion-dom/dist/es/value/types/color/hsla.mjs","../../motion-dom/dist/es/value/types/color/index.mjs","../../motion-dom/dist/es/value/types/utils/color-regex.mjs","../../motion-dom/dist/es/value/types/complex/index.mjs","../../motion-dom/dist/es/value/types/color/hsla-to-rgba.mjs","../../motion-dom/dist/es/utils/mix/immediate.mjs","../../motion-dom/dist/es/utils/mix/number.mjs","../../motion-dom/dist/es/utils/mix/color.mjs","../../motion-dom/dist/es/utils/mix/visibility.mjs","../../motion-dom/dist/es/utils/mix/complex.mjs","../../motion-dom/dist/es/utils/mix/index.mjs","../../motion-dom/dist/es/animation/drivers/frame.mjs","../../motion-dom/dist/es/animation/waapi/utils/linear.mjs","../../motion-dom/dist/es/animation/generators/utils/calc-duration.mjs","../../motion-dom/dist/es/animation/generators/spring.mjs","../../motion-dom/dist/es/animation/generators/utils/create-generator-easing.mjs","../../motion-dom/dist/es/animation/generators/utils/velocity.mjs","../../motion-dom/dist/es/animation/generators/inertia.mjs","../../motion-dom/dist/es/utils/interpolate.mjs","../../motion-dom/dist/es/animation/keyframes/offsets/default.mjs","../../motion-dom/dist/es/animation/keyframes/offsets/fill.mjs","../../motion-dom/dist/es/animation/generators/keyframes.mjs","../../motion-utils/dist/es/easing/utils/is-easing-array.mjs","../../motion-dom/dist/es/animation/keyframes/offsets/time.mjs","../../motion-dom/dist/es/animation/keyframes/get-final.mjs","../../motion-dom/dist/es/animation/utils/replace-transition-type.mjs","../../motion-dom/dist/es/animation/utils/WithPromise.mjs","../../motion-dom/dist/es/animation/JSAnimation.mjs","../../motion-dom/dist/es/render/dom/parse-transform.mjs","../../motion-dom/dist/es/render/utils/keys-transform.mjs","../../motion-dom/dist/es/animation/keyframes/utils/unit-conversion.mjs","../../motion-dom/dist/es/animation/keyframes/KeyframesResolver.mjs","../../motion-dom/dist/es/animation/keyframes/utils/fill-wildcards.mjs","../../motion-dom/dist/es/render/dom/style-set.mjs","../../motion-dom/dist/es/render/dom/is-css-var.mjs","../../motion-dom/dist/es/utils/supports/flags.mjs","../../motion-dom/dist/es/utils/supports/memo.mjs","../../motion-dom/dist/es/utils/supports/scroll-timeline.mjs","../../motion-dom/dist/es/utils/supports/linear-easing.mjs","../../motion-dom/dist/es/animation/waapi/easing/cubic-bezier.mjs","../../motion-dom/dist/es/animation/waapi/easing/supported.mjs","../../motion-dom/dist/es/animation/waapi/easing/map-easing.mjs","../../motion-dom/dist/es/animation/waapi/start-waapi-animation.mjs","../../motion-dom/dist/es/animation/generators/utils/is-generator.mjs","../../motion-dom/dist/es/animation/NativeAnimation.mjs","../../motion-dom/dist/es/animation/waapi/utils/apply-generator.mjs","../../motion-dom/dist/es/animation/waapi/utils/unsupported-easing.mjs","../../motion-dom/dist/es/animation/NativeAnimationExtended.mjs","../../motion-dom/dist/es/animation/utils/is-animatable.mjs","../../motion-dom/dist/es/animation/utils/make-animation-instant.mjs","../../motion-dom/dist/es/animation/waapi/utils/accelerated-values.mjs","../../motion-dom/dist/es/animation/waapi/utils/is-browser-color.mjs","../../motion-dom/dist/es/animation/waapi/supports/waapi.mjs","../../motion-dom/dist/es/animation/AsyncMotionValueAnimation.mjs","../../motion-dom/dist/es/animation/utils/can-animate.mjs","../../motion-dom/dist/es/animation/utils/calc-child-stagger.mjs","../../motion-dom/dist/es/value/index.mjs","../../motion-dom/dist/es/animation/utils/resolve-transition.mjs","../../motion-dom/dist/es/animation/utils/get-value-transition.mjs","../../motion-dom/dist/es/animation/utils/default-transitions.mjs","../../motion-dom/dist/es/animation/utils/is-transition-defined.mjs","../../motion-dom/dist/es/animation/interfaces/motion-value.mjs","../../motion-dom/dist/es/animation/utils/css-variables-conversion.mjs","../../motion-dom/dist/es/render/utils/resolve-variants.mjs","../../motion-dom/dist/es/render/utils/resolve-dynamic-variants.mjs","../../motion-dom/dist/es/render/utils/keys-position.mjs","../../motion-dom/dist/es/render/utils/is-keyframes-target.mjs","../../motion-dom/dist/es/render/utils/setters.mjs","../../motion-dom/dist/es/value/utils/is-motion-value.mjs","../../motion-dom/dist/es/value/will-change/add-will-change.mjs","../../motion-dom/dist/es/value/will-change/is.mjs","../../motion-dom/dist/es/render/dom/utils/camel-to-dash.mjs","../../motion-dom/dist/es/animation/optimized-appear/data-id.mjs","../../motion-dom/dist/es/animation/optimized-appear/get-appear-id.mjs","../../motion-dom/dist/es/animation/interfaces/visual-element-target.mjs","../../motion-dom/dist/es/animation/interfaces/visual-element-variant.mjs","../../motion-dom/dist/es/value/types/auto.mjs","../../motion-dom/dist/es/value/types/test.mjs","../../motion-dom/dist/es/value/types/dimensions.mjs","../../motion-dom/dist/es/animation/keyframes/utils/is-none.mjs","../../motion-dom/dist/es/value/types/complex/filter.mjs","../../motion-dom/dist/es/value/types/complex/mask.mjs","../../motion-dom/dist/es/value/types/int.mjs","../../motion-dom/dist/es/value/types/maps/number.mjs","../../motion-dom/dist/es/value/types/maps/transform.mjs","../../motion-dom/dist/es/value/types/maps/defaults.mjs","../../motion-dom/dist/es/value/types/utils/animatable-none.mjs","../../motion-dom/dist/es/animation/keyframes/utils/make-none-animatable.mjs","../../motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.mjs","../../motion-dom/dist/es/utils/resolve-elements.mjs","../../motion-dom/dist/es/value/types/utils/get-as-type.mjs","../../motion-dom/dist/es/frameloop/microtask.mjs","../../motion-dom/dist/es/gestures/drag/state/is-active.mjs","../../motion-dom/dist/es/gestures/utils/setup.mjs","../../motion-dom/dist/es/gestures/hover.mjs","../../motion-dom/dist/es/gestures/utils/is-node-or-child.mjs","../../motion-dom/dist/es/gestures/utils/is-primary-pointer.mjs","../../motion-dom/dist/es/gestures/press/utils/is-keyboard-accessible.mjs","../../motion-dom/dist/es/gestures/press/utils/state.mjs","../../motion-dom/dist/es/gestures/press/utils/keyboard.mjs","../../motion-dom/dist/es/gestures/press/index.mjs","../../motion-dom/dist/es/utils/is-html-element.mjs","../../motion-dom/dist/es/utils/is-svg-element.mjs","../../motion-dom/dist/es/resize/handle-element.mjs","../../motion-dom/dist/es/resize/handle-window.mjs","../../motion-dom/dist/es/resize/index.mjs","../../motion-dom/dist/es/value/types/utils/find.mjs","../../motion-dom/dist/es/projection/geometry/models.mjs","../../motion-dom/dist/es/render/store.mjs","../../motion-dom/dist/es/render/utils/is-animation-controls.mjs","../../motion-dom/dist/es/render/utils/is-variant-label.mjs","../../motion-dom/dist/es/render/utils/variant-props.mjs","../../motion-dom/dist/es/render/utils/is-controlling-variants.mjs","../../motion-dom/dist/es/render/utils/reduced-motion/state.mjs","../../motion-dom/dist/es/render/utils/reduced-motion/index.mjs","../../motion-dom/dist/es/render/VisualElement.mjs","../../motion-dom/dist/es/render/utils/motion-values.mjs","../../motion-dom/dist/es/render/dom/DOMVisualElement.mjs","../../motion-dom/dist/es/render/Feature.mjs","../../motion-dom/dist/es/projection/geometry/conversion.mjs","../../motion-dom/dist/es/projection/utils/has-transform.mjs","../../motion-dom/dist/es/projection/geometry/delta-apply.mjs","../../motion-dom/dist/es/projection/utils/measure.mjs","../../motion-dom/dist/es/render/html/utils/build-transform.mjs","../../motion-dom/dist/es/render/html/utils/build-styles.mjs","../../motion-dom/dist/es/render/html/utils/render.mjs","../../motion-dom/dist/es/projection/styles/scale-border-radius.mjs","../../motion-dom/dist/es/projection/styles/scale-box-shadow.mjs","../../motion-dom/dist/es/projection/styles/scale-correction.mjs","../../motion-dom/dist/es/render/utils/is-forced-motion-value.mjs","../../motion-dom/dist/es/render/html/utils/scrape-motion-values.mjs","../../motion-dom/dist/es/render/html/HTMLVisualElement.mjs","../../motion-dom/dist/es/render/svg/utils/path.mjs","../../motion-dom/dist/es/render/svg/utils/build-attrs.mjs","../../motion-dom/dist/es/render/svg/utils/camel-case-attrs.mjs","../../motion-dom/dist/es/render/svg/utils/is-svg-tag.mjs","../../motion-dom/dist/es/render/svg/utils/scrape-motion-values.mjs","../../motion-dom/dist/es/render/svg/SVGVisualElement.mjs","../../motion-dom/dist/es/render/svg/utils/render.mjs","../../motion-dom/dist/es/render/utils/get-variant-context.mjs","../../motion-dom/dist/es/render/utils/shallow-compare.mjs","../../motion-dom/dist/es/render/utils/animation-state.mjs","../../motion-dom/dist/es/animation/interfaces/visual-element.mjs","../../motion-dom/dist/es/projection/geometry/copy.mjs","../../motion-dom/dist/es/projection/geometry/delta-calc.mjs","../../motion-dom/dist/es/projection/geometry/delta-remove.mjs","../../motion-dom/dist/es/projection/geometry/utils.mjs","../../motion-dom/dist/es/projection/utils/each-axis.mjs","../../motion-dom/dist/es/projection/animation/mix-values.mjs","../../motion-dom/dist/es/events/add-dom-event.mjs","../../motion-dom/dist/es/projection/utils/compare-by-depth.mjs","../../motion-dom/dist/es/projection/utils/flat-tree.mjs","../../motion-dom/dist/es/value/utils/resolve-motion-value.mjs","../../motion-dom/dist/es/projection/shared/stack.mjs","../../motion-dom/dist/es/projection/node/state.mjs","../../motion-dom/dist/es/projection/node/create-projection-node.mjs","../../motion-dom/dist/es/utils/is-svg-svg-element.mjs","../../motion-dom/dist/es/utils/delay.mjs","../../motion-dom/dist/es/animation/animate/single-value.mjs","../../motion-dom/dist/es/projection/styles/transform.mjs","../../motion-dom/dist/es/projection/node/DocumentProjectionNode.mjs","../../motion-dom/dist/es/projection/node/HTMLProjectionNode.mjs","../lib/context/MotionContext/create.js","../lib/context/MotionContext/utils.js","../lib/render/html/utils/create-render-state.js","../lib/render/html/use-props.js","../lib/render/svg/utils/create-render-state.js","../lib/render/svg/use-props.js","../lib/motion/utils/valid-prop.js","../lib/render/dom/utils/filter-props.js","../lib/render/svg/lowercase-elements.js","../lib/render/dom/utils/is-svg-component.js","../lib/render/dom/use-render.js","../lib/context/PresenceContext.js","../lib/motion/utils/use-visual-state.js","../lib/utils/use-constant.js","../lib/render/html/use-html-visual-state.js","../lib/render/svg/use-svg-visual-state.js","../lib/motion/features/definitions.js","../lib/motion/utils/symbol.js","../lib/motion/utils/use-motion-ref.js","../lib/context/SwitchLayoutGroupContext.js","../lib/utils/is-ref-object.js","../lib/utils/is-browser.js","../lib/utils/use-isomorphic-effect.js","../lib/motion/utils/use-visual-element.js","../lib/motion/index.js","../lib/motion/features/load-features.js","../lib/render/dom/create-visual-element.js","../lib/motion/features/animation/exit.js","../lib/motion/features/animations.js","../lib/motion/features/animation/index.js","../lib/events/event-info.js","../lib/events/add-pointer-event.js","../lib/utils/get-context-window.js","../lib/utils/distance.js","../lib/gestures/pan/PanSession.js","../lib/gestures/drag/utils/constraints.js","../lib/gestures/drag/VisualElementDragControls.js","../../motion-dom/dist/es/gestures/drag/state/set-active.mjs","../lib/gestures/pan/index.js","../lib/motion/features/layout/MeasureLayout.js","../lib/components/AnimatePresence/use-presence.js","../lib/motion/features/drag.js","../lib/gestures/drag/index.js","../lib/gestures/hover.js","../lib/gestures/press.js","../lib/motion/features/viewport/observers.js","../lib/motion/features/viewport/index.js","../lib/motion/features/gestures.js","../lib/render/components/motion/feature-bundle.js","../lib/gestures/focus.js","../lib/motion/features/layout.js","../lib/render/components/motion/create.js","../lib/render/components/motion/elements.js","../lib/render/components/motion/size.js"],"sourcesContent":["function addUniqueItem(arr, item) {\n if (arr.indexOf(item) === -1)\n arr.push(item);\n}\nfunction removeItem(arr, item) {\n const index = arr.indexOf(item);\n if (index > -1)\n arr.splice(index, 1);\n}\n// Adapted from array-move\nfunction moveItem([...arr], fromIndex, toIndex) {\n const startIndex = fromIndex < 0 ? arr.length + fromIndex : fromIndex;\n if (startIndex >= 0 && startIndex < arr.length) {\n const endIndex = toIndex < 0 ? arr.length + toIndex : toIndex;\n const [item] = arr.splice(fromIndex, 1);\n arr.splice(endIndex, 0, item);\n }\n return arr;\n}\n\nexport { addUniqueItem, moveItem, removeItem };\n//# sourceMappingURL=array.mjs.map\n","const clamp = (min, max, v) => {\n if (v > max)\n return max;\n if (v < min)\n return min;\n return v;\n};\n\nexport { clamp };\n//# sourceMappingURL=clamp.mjs.map\n","function formatErrorMessage(message, errorCode) {\n return errorCode\n ? `${message}. For more information and steps for solving, visit https://motion.dev/troubleshooting/${errorCode}`\n : message;\n}\n\nexport { formatErrorMessage };\n//# sourceMappingURL=format-error-message.mjs.map\n","import { formatErrorMessage } from './format-error-message.mjs';\n\nlet warning = () => { };\nlet invariant = () => { };\nif (typeof process !== \"undefined\" &&\n process.env?.NODE_ENV !== \"production\") {\n warning = (check, message, errorCode) => {\n if (!check && typeof console !== \"undefined\") {\n console.warn(formatErrorMessage(message, errorCode));\n }\n };\n invariant = (check, message, errorCode) => {\n if (!check) {\n throw new Error(formatErrorMessage(message, errorCode));\n }\n };\n}\n\nexport { invariant, warning };\n//# sourceMappingURL=errors.mjs.map\n","const MotionGlobalConfig = {};\n\nexport { MotionGlobalConfig };\n//# sourceMappingURL=global-config.mjs.map\n","/**\n * Check if value is a numerical string, ie a string that is purely a number eg \"100\" or \"-100.1\"\n */\nconst isNumericalString = (v) => /^-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)$/u.test(v);\n\nexport { isNumericalString };\n//# sourceMappingURL=is-numerical-string.mjs.map\n","const isObject = (value) => typeof value === \"object\" && value !== null;\n\nexport { isObject };\n//# sourceMappingURL=is-object.mjs.map\n","/**\n * Check if the value is a zero value string like \"0px\" or \"0%\"\n */\nconst isZeroValueString = (v) => /^0[^.\\s]+$/u.test(v);\n\nexport { isZeroValueString };\n//# sourceMappingURL=is-zero-value-string.mjs.map\n","/*#__NO_SIDE_EFFECTS__*/\nfunction memo(callback) {\n let result;\n return () => {\n if (result === undefined)\n result = callback();\n return result;\n };\n}\n\nexport { memo };\n//# sourceMappingURL=memo.mjs.map\n","/*#__NO_SIDE_EFFECTS__*/\nconst noop = (any) => any;\n\nexport { noop };\n//# sourceMappingURL=noop.mjs.map\n","/**\n * Pipe\n * Compose other transformers to run linearily\n * pipe(min(20), max(40))\n * @param {...functions} transformers\n * @return {function}\n */\nconst pipe = (...transformers) => transformers.reduce((a, b) => (v) => b(a(v)));\n\nexport { pipe };\n//# sourceMappingURL=pipe.mjs.map\n","/*\n Progress within given range\n\n Given a lower limit and an upper limit, we return the progress\n (expressed as a number 0-1) represented by the given value, and\n limit that progress to within 0-1.\n*/\n/*#__NO_SIDE_EFFECTS__*/\nconst progress = (from, to, value) => {\n const range = to - from;\n return range ? (value - from) / range : 1;\n};\n\nexport { progress };\n//# sourceMappingURL=progress.mjs.map\n","import { addUniqueItem, removeItem } from './array.mjs';\n\nclass SubscriptionManager {\n constructor() {\n this.subscriptions = [];\n }\n add(handler) {\n addUniqueItem(this.subscriptions, handler);\n return () => removeItem(this.subscriptions, handler);\n }\n notify(a, b, c) {\n const numSubscriptions = this.subscriptions.length;\n if (!numSubscriptions)\n return;\n if (numSubscriptions === 1) {\n /**\n * If there's only a single handler we can just call it without invoking a loop.\n */\n this.subscriptions[0](a, b, c);\n }\n else {\n for (let i = 0; i < numSubscriptions; i++) {\n /**\n * Check whether the handler exists before firing as it's possible\n * the subscriptions were modified during this loop running.\n */\n const handler = this.subscriptions[i];\n handler && handler(a, b, c);\n }\n }\n }\n getSize() {\n return this.subscriptions.length;\n }\n clear() {\n this.subscriptions.length = 0;\n }\n}\n\nexport { SubscriptionManager };\n//# sourceMappingURL=subscription-manager.mjs.map\n","/**\n * Converts seconds to milliseconds\n *\n * @param seconds - Time in seconds.\n * @return milliseconds - Converted time in milliseconds.\n */\n/*#__NO_SIDE_EFFECTS__*/\nconst secondsToMilliseconds = (seconds) => seconds * 1000;\n/*#__NO_SIDE_EFFECTS__*/\nconst millisecondsToSeconds = (milliseconds) => milliseconds / 1000;\n\nexport { millisecondsToSeconds, secondsToMilliseconds };\n//# sourceMappingURL=time-conversion.mjs.map\n","/*\n Convert velocity into velocity per second\n*/\n/*#__NO_SIDE_EFFECTS__*/\nconst velocityPerSecond = (velocity, frameDuration) => frameDuration ? velocity * (1000 / frameDuration) : 0;\n\nexport { velocityPerSecond };\n//# sourceMappingURL=velocity-per-second.mjs.map\n","import { noop } from '../noop.mjs';\n\n/*\n Bezier function generator\n This has been modified from Gaëtan Renaudeau's BezierEasing\n https://github.com/gre/bezier-easing/blob/master/src/index.js\n https://github.com/gre/bezier-easing/blob/master/LICENSE\n \n I've removed the newtonRaphsonIterate algo because in benchmarking it\n wasn't noticeably faster than binarySubdivision, indeed removing it\n usually improved times, depending on the curve.\n I also removed the lookup table, as for the added bundle size and loop we're\n only cutting ~4 or so subdivision iterations. I bumped the max iterations up\n to 12 to compensate and this still tended to be faster for no perceivable\n loss in accuracy.\n Usage\n const easeOut = cubicBezier(.17,.67,.83,.67);\n const x = easeOut(0.5); // returns 0.627...\n*/\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nconst calcBezier = (t, a1, a2) => (((1.0 - 3.0 * a2 + 3.0 * a1) * t + (3.0 * a2 - 6.0 * a1)) * t + 3.0 * a1) *\n t;\nconst subdivisionPrecision = 0.0000001;\nconst subdivisionMaxIterations = 12;\nfunction binarySubdivide(x, lowerBound, upperBound, mX1, mX2) {\n let currentX;\n let currentT;\n let i = 0;\n do {\n currentT = lowerBound + (upperBound - lowerBound) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - x;\n if (currentX > 0.0) {\n upperBound = currentT;\n }\n else {\n lowerBound = currentT;\n }\n } while (Math.abs(currentX) > subdivisionPrecision &&\n ++i < subdivisionMaxIterations);\n return currentT;\n}\n/*#__NO_SIDE_EFFECTS__*/\nfunction cubicBezier(mX1, mY1, mX2, mY2) {\n // If this is a linear gradient, return linear easing\n if (mX1 === mY1 && mX2 === mY2)\n return noop;\n const getTForX = (aX) => binarySubdivide(aX, 0, 1, mX1, mX2);\n // If animation is at start/end, return t without easing\n return (t) => t === 0 || t === 1 ? t : calcBezier(getTForX(t), mY1, mY2);\n}\n\nexport { cubicBezier };\n//# sourceMappingURL=cubic-bezier.mjs.map\n","// Accepts an easing function and returns a new one that outputs mirrored values for\n// the second half of the animation. Turns easeIn into easeInOut.\n/*#__NO_SIDE_EFFECTS__*/\nconst mirrorEasing = (easing) => (p) => p <= 0.5 ? easing(2 * p) / 2 : (2 - easing(2 * (1 - p))) / 2;\n\nexport { mirrorEasing };\n//# sourceMappingURL=mirror.mjs.map\n","// Accepts an easing function and returns a new one that outputs reversed values.\n// Turns easeIn into easeOut.\n/*#__NO_SIDE_EFFECTS__*/\nconst reverseEasing = (easing) => (p) => 1 - easing(1 - p);\n\nexport { reverseEasing };\n//# sourceMappingURL=reverse.mjs.map\n","import { cubicBezier } from './cubic-bezier.mjs';\nimport { mirrorEasing } from './modifiers/mirror.mjs';\nimport { reverseEasing } from './modifiers/reverse.mjs';\n\nconst backOut = /*@__PURE__*/ cubicBezier(0.33, 1.53, 0.69, 0.99);\nconst backIn = /*@__PURE__*/ reverseEasing(backOut);\nconst backInOut = /*@__PURE__*/ mirrorEasing(backIn);\n\nexport { backIn, backInOut, backOut };\n//# sourceMappingURL=back.mjs.map\n","import { backIn } from './back.mjs';\n\nconst anticipate = (p) => p >= 1\n ? 1\n : (p *= 2) < 1\n ? 0.5 * backIn(p)\n : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n\nexport { anticipate };\n//# sourceMappingURL=anticipate.mjs.map\n","import { mirrorEasing } from './modifiers/mirror.mjs';\nimport { reverseEasing } from './modifiers/reverse.mjs';\n\nconst circIn = (p) => 1 - Math.sin(Math.acos(p));\nconst circOut = reverseEasing(circIn);\nconst circInOut = mirrorEasing(circIn);\n\nexport { circIn, circInOut, circOut };\n//# sourceMappingURL=circ.mjs.map\n","import { cubicBezier } from './cubic-bezier.mjs';\n\nconst easeIn = /*@__PURE__*/ cubicBezier(0.42, 0, 1, 1);\nconst easeOut = /*@__PURE__*/ cubicBezier(0, 0, 0.58, 1);\nconst easeInOut = /*@__PURE__*/ cubicBezier(0.42, 0, 0.58, 1);\n\nexport { easeIn, easeInOut, easeOut };\n//# sourceMappingURL=ease.mjs.map\n","/*#__NO_SIDE_EFFECTS__*/\nconst isBezierDefinition = (easing) => Array.isArray(easing) && typeof easing[0] === \"number\";\n\nexport { isBezierDefinition };\n//# sourceMappingURL=is-bezier-definition.mjs.map\n","import { invariant } from '../../errors.mjs';\nimport { noop } from '../../noop.mjs';\nimport { anticipate } from '../anticipate.mjs';\nimport { backOut, backInOut, backIn } from '../back.mjs';\nimport { circOut, circInOut, circIn } from '../circ.mjs';\nimport { cubicBezier } from '../cubic-bezier.mjs';\nimport { easeOut, easeInOut, easeIn } from '../ease.mjs';\nimport { isBezierDefinition } from './is-bezier-definition.mjs';\n\nconst easingLookup = {\n linear: noop,\n easeIn,\n easeInOut,\n easeOut,\n circIn,\n circInOut,\n circOut,\n backIn,\n backInOut,\n backOut,\n anticipate,\n};\nconst isValidEasing = (easing) => {\n return typeof easing === \"string\";\n};\nconst easingDefinitionToFunction = (definition) => {\n if (isBezierDefinition(definition)) {\n // If cubic bezier definition, create bezier curve\n invariant(definition.length === 4, `Cubic bezier arrays must contain four numerical values.`, \"cubic-bezier-length\");\n const [x1, y1, x2, y2] = definition;\n return cubicBezier(x1, y1, x2, y2);\n }\n else if (isValidEasing(definition)) {\n // Else lookup from table\n invariant(easingLookup[definition] !== undefined, `Invalid easing type '${definition}'`, \"invalid-easing-type\");\n return easingLookup[definition];\n }\n return definition;\n};\n\nexport { easingDefinitionToFunction };\n//# sourceMappingURL=map.mjs.map\n","\"use client\";\nimport { createContext } from \"react\";\nexport const LayoutGroupContext = createContext({});\n//# sourceMappingURL=LayoutGroupContext.js.map","\"use client\";\nimport { createContext } from \"react\";\nexport const LazyContext = createContext({ strict: false });\n//# sourceMappingURL=LazyContext.js.map","\"use client\";\nimport { createContext } from \"react\";\n/**\n * @public\n */\nexport const MotionConfigContext = createContext({\n transformPagePoint: (p) => p,\n isStatic: false,\n reducedMotion: \"never\",\n});\n//# sourceMappingURL=MotionConfigContext.js.map","\"use client\";\nimport { createContext } from \"react\";\nexport const MotionContext = /* @__PURE__ */ createContext({});\n//# sourceMappingURL=index.js.map","const stepsOrder = [\n \"setup\", // Compute\n \"read\", // Read\n \"resolveKeyframes\", // Write/Read/Write/Read\n \"preUpdate\", // Compute\n \"update\", // Compute\n \"preRender\", // Compute\n \"render\", // Write\n \"postRender\", // Compute\n];\n\nexport { stepsOrder };\n//# sourceMappingURL=order.mjs.map\n","import { MotionGlobalConfig } from 'motion-utils';\nimport { stepsOrder } from './order.mjs';\nimport { createRenderStep } from './render-step.mjs';\n\nconst maxElapsed = 40;\nfunction createRenderBatcher(scheduleNextBatch, allowKeepAlive) {\n let runNextFrame = false;\n let useDefaultElapsed = true;\n const state = {\n delta: 0.0,\n timestamp: 0.0,\n isProcessing: false,\n };\n const flagRunNextFrame = () => (runNextFrame = true);\n const steps = stepsOrder.reduce((acc, key) => {\n acc[key] = createRenderStep(flagRunNextFrame, allowKeepAlive ? key : undefined);\n return acc;\n }, {});\n const { setup, read, resolveKeyframes, preUpdate, update, preRender, render, postRender, } = steps;\n const processBatch = () => {\n const useManualTiming = MotionGlobalConfig.useManualTiming;\n const timestamp = useManualTiming\n ? state.timestamp\n : performance.now();\n runNextFrame = false;\n if (!useManualTiming) {\n state.delta = useDefaultElapsed\n ? 1000 / 60\n : Math.max(Math.min(timestamp - state.timestamp, maxElapsed), 1);\n }\n state.timestamp = timestamp;\n state.isProcessing = true;\n // Unrolled render loop for better per-frame performance\n setup.process(state);\n read.process(state);\n resolveKeyframes.process(state);\n preUpdate.process(state);\n update.process(state);\n preRender.process(state);\n render.process(state);\n postRender.process(state);\n state.isProcessing = false;\n if (runNextFrame && allowKeepAlive) {\n useDefaultElapsed = false;\n scheduleNextBatch(processBatch);\n }\n };\n const wake = () => {\n runNextFrame = true;\n useDefaultElapsed = true;\n if (!state.isProcessing) {\n scheduleNextBatch(processBatch);\n }\n };\n const schedule = stepsOrder.reduce((acc, key) => {\n const step = steps[key];\n acc[key] = (process, keepAlive = false, immediate = false) => {\n if (!runNextFrame)\n wake();\n return step.schedule(process, keepAlive, immediate);\n };\n return acc;\n }, {});\n const cancel = (process) => {\n for (let i = 0; i < stepsOrder.length; i++) {\n steps[stepsOrder[i]].cancel(process);\n }\n };\n return { schedule, cancel, state, steps };\n}\n\nexport { createRenderBatcher };\n//# sourceMappingURL=batcher.mjs.map\n","import { statsBuffer } from '../stats/buffer.mjs';\n\nfunction createRenderStep(runNextFrame, stepName) {\n /**\n * We create and reuse two queues, one to queue jobs for the current frame\n * and one for the next. We reuse to avoid triggering GC after x frames.\n */\n let thisFrame = new Set();\n let nextFrame = new Set();\n /**\n * Track whether we're currently processing jobs in this step. This way\n * we can decide whether to schedule new jobs for this frame or next.\n */\n let isProcessing = false;\n let flushNextFrame = false;\n /**\n * A set of processes which were marked keepAlive when scheduled.\n */\n const toKeepAlive = new WeakSet();\n let latestFrameData = {\n delta: 0.0,\n timestamp: 0.0,\n isProcessing: false,\n };\n let numCalls = 0;\n function triggerCallback(callback) {\n if (toKeepAlive.has(callback)) {\n step.schedule(callback);\n runNextFrame();\n }\n numCalls++;\n callback(latestFrameData);\n }\n const step = {\n /**\n * Schedule a process to run on the next frame.\n */\n schedule: (callback, keepAlive = false, immediate = false) => {\n const addToCurrentFrame = immediate && isProcessing;\n const queue = addToCurrentFrame ? thisFrame : nextFrame;\n if (keepAlive)\n toKeepAlive.add(callback);\n queue.add(callback);\n return callback;\n },\n /**\n * Cancel the provided callback from running on the next frame.\n */\n cancel: (callback) => {\n nextFrame.delete(callback);\n toKeepAlive.delete(callback);\n },\n /**\n * Execute all schedule callbacks.\n */\n process: (frameData) => {\n latestFrameData = frameData;\n /**\n * If we're already processing we've probably been triggered by a flushSync\n * inside an existing process. Instead of executing, mark flushNextFrame\n * as true and ensure we flush the following frame at the end of this one.\n */\n if (isProcessing) {\n flushNextFrame = true;\n return;\n }\n isProcessing = true;\n // Swap this frame and the next to avoid GC\n const prevFrame = thisFrame;\n thisFrame = nextFrame;\n nextFrame = prevFrame;\n // Execute this frame\n thisFrame.forEach(triggerCallback);\n /**\n * If we're recording stats then\n */\n if (stepName && statsBuffer.value) {\n statsBuffer.value.frameloop[stepName].push(numCalls);\n }\n numCalls = 0;\n // Clear the frame so no callbacks remain. This is to avoid\n // memory leaks should this render step not run for a while.\n thisFrame.clear();\n isProcessing = false;\n if (flushNextFrame) {\n flushNextFrame = false;\n step.process(frameData);\n }\n },\n };\n return step;\n}\n\nexport { createRenderStep };\n//# sourceMappingURL=render-step.mjs.map\n","import { noop } from 'motion-utils';\nimport { createRenderBatcher } from './batcher.mjs';\n\nconst { schedule: frame, cancel: cancelFrame, state: frameData, steps: frameSteps, } = /* @__PURE__ */ createRenderBatcher(typeof requestAnimationFrame !== \"undefined\" ? requestAnimationFrame : noop, true);\n\nexport { cancelFrame, frame, frameData, frameSteps };\n//# sourceMappingURL=frame.mjs.map\n","import { MotionGlobalConfig } from 'motion-utils';\nimport { frameData } from './frame.mjs';\n\nlet now;\nfunction clearTime() {\n now = undefined;\n}\n/**\n * An eventloop-synchronous alternative to performance.now().\n *\n * Ensures that time measurements remain consistent within a synchronous context.\n * Usually calling performance.now() twice within the same synchronous context\n * will return different values which isn't useful for animations when we're usually\n * trying to sync animations to the same frame.\n */\nconst time = {\n now: () => {\n if (now === undefined) {\n time.set(frameData.isProcessing || MotionGlobalConfig.useManualTiming\n ? frameData.timestamp\n : performance.now());\n }\n return now;\n },\n set: (newTime) => {\n now = newTime;\n queueMicrotask(clearTime);\n },\n};\n\nexport { time };\n//# sourceMappingURL=sync-time.mjs.map\n","const checkStringStartsWith = (token) => (key) => typeof key === \"string\" && key.startsWith(token);\nconst isCSSVariableName = \n/*@__PURE__*/ checkStringStartsWith(\"--\");\nconst startsAsVariableToken = \n/*@__PURE__*/ checkStringStartsWith(\"var(--\");\nconst isCSSVariableToken = (value) => {\n const startsWithToken = startsAsVariableToken(value);\n if (!startsWithToken)\n return false;\n // Ensure any comments are stripped from the value as this can harm performance of the regex.\n return singleCssVariableRegex.test(value.split(\"/*\")[0].trim());\n};\nconst singleCssVariableRegex = /var\\(--(?:[\\w-]+\\s*|[\\w-]+\\s*,(?:\\s*[^)(\\s]|\\s*\\((?:[^)(]|\\([^)(]*\\))*\\))+\\s*)\\)$/iu;\n/**\n * Check if a value contains a CSS variable anywhere (e.g. inside calc()).\n * Unlike isCSSVariableToken which checks if the value IS a var() token,\n * this checks if the value CONTAINS var() somewhere in the string.\n */\nfunction containsCSSVariable(value) {\n if (typeof value !== \"string\")\n return false;\n // Strip comments to avoid false positives\n return value.split(\"/*\")[0].includes(\"var(--\");\n}\n\nexport { containsCSSVariable, isCSSVariableName, isCSSVariableToken };\n//# sourceMappingURL=is-css-variable.mjs.map\n","import { clamp } from 'motion-utils';\n\nconst number = {\n test: (v) => typeof v === \"number\",\n parse: parseFloat,\n transform: (v) => v,\n};\nconst alpha = {\n ...number,\n transform: (v) => clamp(0, 1, v),\n};\nconst scale = {\n ...number,\n default: 1,\n};\n\nexport { alpha, number, scale };\n//# sourceMappingURL=index.mjs.map\n","// If this number is a decimal, make it just five decimal places\n// to avoid exponents\nconst sanitize = (v) => Math.round(v * 100000) / 100000;\n\nexport { sanitize };\n//# sourceMappingURL=sanitize.mjs.map\n","const floatRegex = /-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/gu;\n\nexport { floatRegex };\n//# sourceMappingURL=float-regex.mjs.map\n","const singleColorRegex = /^(?:#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\))$/iu;\n\nexport { singleColorRegex };\n//# sourceMappingURL=single-color-regex.mjs.map\n","import { floatRegex } from '../utils/float-regex.mjs';\nimport { isNullish } from '../utils/is-nullish.mjs';\nimport { singleColorRegex } from '../utils/single-color-regex.mjs';\n\n/**\n * Returns true if the provided string is a color, ie rgba(0,0,0,0) or #000,\n * but false if a number or multiple colors\n */\nconst isColorString = (type, testProp) => (v) => {\n return Boolean((typeof v === \"string\" &&\n singleColorRegex.test(v) &&\n v.startsWith(type)) ||\n (testProp &&\n !isNullish(v) &&\n Object.prototype.hasOwnProperty.call(v, testProp)));\n};\nconst splitColor = (aName, bName, cName) => (v) => {\n if (typeof v !== \"string\")\n return v;\n const [a, b, c, alpha] = v.match(floatRegex);\n return {\n [aName]: parseFloat(a),\n [bName]: parseFloat(b),\n [cName]: parseFloat(c),\n alpha: alpha !== undefined ? parseFloat(alpha) : 1,\n };\n};\n\nexport { isColorString, splitColor };\n//# sourceMappingURL=utils.mjs.map\n","function isNullish(v) {\n return v == null;\n}\n\nexport { isNullish };\n//# sourceMappingURL=is-nullish.mjs.map\n","import { clamp } from 'motion-utils';\nimport { number, alpha } from '../numbers/index.mjs';\nimport { sanitize } from '../utils/sanitize.mjs';\nimport { splitColor, isColorString } from './utils.mjs';\n\nconst clampRgbUnit = (v) => clamp(0, 255, v);\nconst rgbUnit = {\n ...number,\n transform: (v) => Math.round(clampRgbUnit(v)),\n};\nconst rgba = {\n test: /*@__PURE__*/ isColorString(\"rgb\", \"red\"),\n parse: /*@__PURE__*/ splitColor(\"red\", \"green\", \"blue\"),\n transform: ({ red, green, blue, alpha: alpha$1 = 1 }) => \"rgba(\" +\n rgbUnit.transform(red) +\n \", \" +\n rgbUnit.transform(green) +\n \", \" +\n rgbUnit.transform(blue) +\n \", \" +\n sanitize(alpha.transform(alpha$1)) +\n \")\",\n};\n\nexport { rgbUnit, rgba };\n//# sourceMappingURL=rgba.mjs.map\n","import { rgba } from './rgba.mjs';\nimport { isColorString } from './utils.mjs';\n\nfunction parseHex(v) {\n let r = \"\";\n let g = \"\";\n let b = \"\";\n let a = \"\";\n // If we have 6 characters, ie #FF0000\n if (v.length > 5) {\n r = v.substring(1, 3);\n g = v.substring(3, 5);\n b = v.substring(5, 7);\n a = v.substring(7, 9);\n // Or we have 3 characters, ie #F00\n }\n else {\n r = v.substring(1, 2);\n g = v.substring(2, 3);\n b = v.substring(3, 4);\n a = v.substring(4, 5);\n r += r;\n g += g;\n b += b;\n a += a;\n }\n return {\n red: parseInt(r, 16),\n green: parseInt(g, 16),\n blue: parseInt(b, 16),\n alpha: a ? parseInt(a, 16) / 255 : 1,\n };\n}\nconst hex = {\n test: /*@__PURE__*/ isColorString(\"#\"),\n parse: parseHex,\n transform: rgba.transform,\n};\n\nexport { hex };\n//# sourceMappingURL=hex.mjs.map\n","/*#__NO_SIDE_EFFECTS__*/\nconst createUnitType = (unit) => ({\n test: (v) => typeof v === \"string\" && v.endsWith(unit) && v.split(\" \").length === 1,\n parse: parseFloat,\n transform: (v) => `${v}${unit}`,\n});\nconst degrees = /*@__PURE__*/ createUnitType(\"deg\");\nconst percent = /*@__PURE__*/ createUnitType(\"%\");\nconst px = /*@__PURE__*/ createUnitType(\"px\");\nconst vh = /*@__PURE__*/ createUnitType(\"vh\");\nconst vw = /*@__PURE__*/ createUnitType(\"vw\");\nconst progressPercentage = /*@__PURE__*/ (() => ({\n ...percent,\n parse: (v) => percent.parse(v) / 100,\n transform: (v) => percent.transform(v * 100),\n}))();\n\nexport { degrees, percent, progressPercentage, px, vh, vw };\n//# sourceMappingURL=units.mjs.map\n","import { alpha } from '../numbers/index.mjs';\nimport { percent } from '../numbers/units.mjs';\nimport { sanitize } from '../utils/sanitize.mjs';\nimport { splitColor, isColorString } from './utils.mjs';\n\nconst hsla = {\n test: /*@__PURE__*/ isColorString(\"hsl\", \"hue\"),\n parse: /*@__PURE__*/ splitColor(\"hue\", \"saturation\", \"lightness\"),\n transform: ({ hue, saturation, lightness, alpha: alpha$1 = 1 }) => {\n return (\"hsla(\" +\n Math.round(hue) +\n \", \" +\n percent.transform(sanitize(saturation)) +\n \", \" +\n percent.transform(sanitize(lightness)) +\n \", \" +\n sanitize(alpha.transform(alpha$1)) +\n \")\");\n },\n};\n\nexport { hsla };\n//# sourceMappingURL=hsla.mjs.map\n","import { hex } from './hex.mjs';\nimport { hsla } from './hsla.mjs';\nimport { rgba } from './rgba.mjs';\n\nconst color = {\n test: (v) => rgba.test(v) || hex.test(v) || hsla.test(v),\n parse: (v) => {\n if (rgba.test(v)) {\n return rgba.parse(v);\n }\n else if (hsla.test(v)) {\n return hsla.parse(v);\n }\n else {\n return hex.parse(v);\n }\n },\n transform: (v) => {\n return typeof v === \"string\"\n ? v\n : v.hasOwnProperty(\"red\")\n ? rgba.transform(v)\n : hsla.transform(v);\n },\n getAnimatableNone: (v) => {\n const parsed = color.parse(v);\n parsed.alpha = 0;\n return color.transform(parsed);\n },\n};\n\nexport { color };\n//# sourceMappingURL=index.mjs.map\n","const colorRegex = /(?:#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\))/giu;\n\nexport { colorRegex };\n//# sourceMappingURL=color-regex.mjs.map\n","import { color } from '../color/index.mjs';\nimport { colorRegex } from '../utils/color-regex.mjs';\nimport { floatRegex } from '../utils/float-regex.mjs';\nimport { sanitize } from '../utils/sanitize.mjs';\n\nfunction test(v) {\n return (isNaN(v) &&\n typeof v === \"string\" &&\n (v.match(floatRegex)?.length || 0) +\n (v.match(colorRegex)?.length || 0) >\n 0);\n}\nconst NUMBER_TOKEN = \"number\";\nconst COLOR_TOKEN = \"color\";\nconst VAR_TOKEN = \"var\";\nconst VAR_FUNCTION_TOKEN = \"var(\";\nconst SPLIT_TOKEN = \"${}\";\n// this regex consists of the `singleCssVariableRegex|rgbHSLValueRegex|digitRegex`\nconst complexRegex = /var\\s*\\(\\s*--(?:[\\w-]+\\s*|[\\w-]+\\s*,(?:\\s*[^)(\\s]|\\s*\\((?:[^)(]|\\([^)(]*\\))*\\))+\\s*)\\)|#[\\da-f]{3,8}|(?:rgb|hsl)a?\\((?:-?[\\d.]+%?[,\\s]+){2}-?[\\d.]+%?\\s*(?:[,/]\\s*)?(?:\\b\\d+(?:\\.\\d+)?|\\.\\d+)?%?\\)|-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)/giu;\nfunction analyseComplexValue(value) {\n const originalValue = value.toString();\n const values = [];\n const indexes = {\n color: [],\n number: [],\n var: [],\n };\n const types = [];\n let i = 0;\n const tokenised = originalValue.replace(complexRegex, (parsedValue) => {\n if (color.test(parsedValue)) {\n indexes.color.push(i);\n types.push(COLOR_TOKEN);\n values.push(color.parse(parsedValue));\n }\n else if (parsedValue.startsWith(VAR_FUNCTION_TOKEN)) {\n indexes.var.push(i);\n types.push(VAR_TOKEN);\n values.push(parsedValue);\n }\n else {\n indexes.number.push(i);\n types.push(NUMBER_TOKEN);\n values.push(parseFloat(parsedValue));\n }\n ++i;\n return SPLIT_TOKEN;\n });\n const split = tokenised.split(SPLIT_TOKEN);\n return { values, split, indexes, types };\n}\nfunction parseComplexValue(v) {\n return analyseComplexValue(v).values;\n}\nfunction buildTransformer({ split, types }) {\n const numSections = split.length;\n return (v) => {\n let output = \"\";\n for (let i = 0; i < numSections; i++) {\n output += split[i];\n if (v[i] !== undefined) {\n const type = types[i];\n if (type === NUMBER_TOKEN) {\n output += sanitize(v[i]);\n }\n else if (type === COLOR_TOKEN) {\n output += color.transform(v[i]);\n }\n else {\n output += v[i];\n }\n }\n }\n return output;\n };\n}\nfunction createTransformer(source) {\n return buildTransformer(analyseComplexValue(source));\n}\nconst convertNumbersToZero = (v) => typeof v === \"number\" ? 0 : color.test(v) ? color.getAnimatableNone(v) : v;\n/**\n * Convert a parsed value to its zero equivalent, but preserve numbers\n * that act as divisors in CSS calc() expressions.\n *\n * analyseComplexValue extracts numbers from CSS strings and puts the\n * surrounding text into a `split` template array. For example:\n * \"calc(var(--gap) / 5)\" → values: [var(--gap), 5]\n * split: [\"calc(\", \" / \", \")\"]\n *\n * When building a zero-equivalent for animation, naively zeroing all\n * numbers turns the divisor into 0 → \"calc(var(--gap) / 0)\" → NaN.\n * We detect this by checking whether the text preceding a number\n * (split[i]) ends with \"/\" — the CSS calc division operator.\n */\nconst convertToZero = (value, splitBefore) => {\n if (typeof value === \"number\") {\n return splitBefore?.trim().endsWith(\"/\") ? value : 0;\n }\n return convertNumbersToZero(value);\n};\nfunction getAnimatableNone(v) {\n const info = analyseComplexValue(v);\n const transformer = buildTransformer(info);\n return transformer(info.values.map((value, i) => convertToZero(value, info.split[i])));\n}\nconst complex = {\n test,\n parse: parseComplexValue,\n createTransformer,\n getAnimatableNone,\n};\n\nexport { analyseComplexValue, complex };\n//# sourceMappingURL=index.mjs.map\n","// Adapted from https://gist.github.com/mjackson/5311256\nfunction hueToRgb(p, q, t) {\n if (t < 0)\n t += 1;\n if (t > 1)\n t -= 1;\n if (t < 1 / 6)\n return p + (q - p) * 6 * t;\n if (t < 1 / 2)\n return q;\n if (t < 2 / 3)\n return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\nfunction hslaToRgba({ hue, saturation, lightness, alpha }) {\n hue /= 360;\n saturation /= 100;\n lightness /= 100;\n let red = 0;\n let green = 0;\n let blue = 0;\n if (!saturation) {\n red = green = blue = lightness;\n }\n else {\n const q = lightness < 0.5\n ? lightness * (1 + saturation)\n : lightness + saturation - lightness * saturation;\n const p = 2 * lightness - q;\n red = hueToRgb(p, q, hue + 1 / 3);\n green = hueToRgb(p, q, hue);\n blue = hueToRgb(p, q, hue - 1 / 3);\n }\n return {\n red: Math.round(red * 255),\n green: Math.round(green * 255),\n blue: Math.round(blue * 255),\n alpha,\n };\n}\n\nexport { hslaToRgba };\n//# sourceMappingURL=hsla-to-rgba.mjs.map\n","function mixImmediate(a, b) {\n return (p) => (p > 0 ? b : a);\n}\n\nexport { mixImmediate };\n//# sourceMappingURL=immediate.mjs.map\n","/*\n Value in range from progress\n\n Given a lower limit and an upper limit, we return the value within\n that range as expressed by progress (usually a number from 0 to 1)\n\n So progress = 0.5 would change\n\n from -------- to\n\n to\n\n from ---- to\n\n E.g. from = 10, to = 20, progress = 0.5 => 15\n\n @param [number]: Lower limit of range\n @param [number]: Upper limit of range\n @param [number]: The progress between lower and upper limits expressed 0-1\n @return [number]: Value as calculated from progress within range (not limited within range)\n*/\nconst mixNumber = (from, to, progress) => {\n return from + (to - from) * progress;\n};\n\nexport { mixNumber };\n//# sourceMappingURL=number.mjs.map\n","import { warning } from 'motion-utils';\nimport { hex } from '../../value/types/color/hex.mjs';\nimport { hsla } from '../../value/types/color/hsla.mjs';\nimport { hslaToRgba } from '../../value/types/color/hsla-to-rgba.mjs';\nimport { rgba } from '../../value/types/color/rgba.mjs';\nimport { mixImmediate } from './immediate.mjs';\nimport { mixNumber } from './number.mjs';\n\n// Linear color space blending\n// Explained https://www.youtube.com/watch?v=LKnqECcg6Gw\n// Demonstrated http://codepen.io/osublake/pen/xGVVaN\nconst mixLinearColor = (from, to, v) => {\n const fromExpo = from * from;\n const expo = v * (to * to - fromExpo) + fromExpo;\n return expo < 0 ? 0 : Math.sqrt(expo);\n};\nconst colorTypes = [hex, rgba, hsla];\nconst getColorType = (v) => colorTypes.find((type) => type.test(v));\nfunction asRGBA(color) {\n const type = getColorType(color);\n warning(Boolean(type), `'${color}' is not an animatable color. Use the equivalent color code instead.`, \"color-not-animatable\");\n if (!Boolean(type))\n return false;\n let model = type.parse(color);\n if (type === hsla) {\n // TODO Remove this cast - needed since Motion's stricter typing\n model = hslaToRgba(model);\n }\n return model;\n}\nconst mixColor = (from, to) => {\n const fromRGBA = asRGBA(from);\n const toRGBA = asRGBA(to);\n if (!fromRGBA || !toRGBA) {\n return mixImmediate(from, to);\n }\n const blended = { ...fromRGBA };\n return (v) => {\n blended.red = mixLinearColor(fromRGBA.red, toRGBA.red, v);\n blended.green = mixLinearColor(fromRGBA.green, toRGBA.green, v);\n blended.blue = mixLinearColor(fromRGBA.blue, toRGBA.blue, v);\n blended.alpha = mixNumber(fromRGBA.alpha, toRGBA.alpha, v);\n return rgba.transform(blended);\n };\n};\n\nexport { mixColor, mixLinearColor };\n//# sourceMappingURL=color.mjs.map\n","const invisibleValues = new Set([\"none\", \"hidden\"]);\n/**\n * Returns a function that, when provided a progress value between 0 and 1,\n * will return the \"none\" or \"hidden\" string only when the progress is that of\n * the origin or target.\n */\nfunction mixVisibility(origin, target) {\n if (invisibleValues.has(origin)) {\n return (p) => (p <= 0 ? origin : target);\n }\n else {\n return (p) => (p >= 1 ? target : origin);\n }\n}\n\nexport { invisibleValues, mixVisibility };\n//# sourceMappingURL=visibility.mjs.map\n","import { pipe, warning } from 'motion-utils';\nimport { isCSSVariableToken } from '../../animation/utils/is-css-variable.mjs';\nimport { color } from '../../value/types/color/index.mjs';\nimport { complex, analyseComplexValue } from '../../value/types/complex/index.mjs';\nimport { mixColor } from './color.mjs';\nimport { mixImmediate } from './immediate.mjs';\nimport { mixNumber as mixNumber$1 } from './number.mjs';\nimport { invisibleValues, mixVisibility } from './visibility.mjs';\n\nfunction mixNumber(a, b) {\n return (p) => mixNumber$1(a, b, p);\n}\nfunction getMixer(a) {\n if (typeof a === \"number\") {\n return mixNumber;\n }\n else if (typeof a === \"string\") {\n return isCSSVariableToken(a)\n ? mixImmediate\n : color.test(a)\n ? mixColor\n : mixComplex;\n }\n else if (Array.isArray(a)) {\n return mixArray;\n }\n else if (typeof a === \"object\") {\n return color.test(a) ? mixColor : mixObject;\n }\n return mixImmediate;\n}\nfunction mixArray(a, b) {\n const output = [...a];\n const numValues = output.length;\n const blendValue = a.map((v, i) => getMixer(v)(v, b[i]));\n return (p) => {\n for (let i = 0; i < numValues; i++) {\n output[i] = blendValue[i](p);\n }\n return output;\n };\n}\nfunction mixObject(a, b) {\n const output = { ...a, ...b };\n const blendValue = {};\n for (const key in output) {\n if (a[key] !== undefined && b[key] !== undefined) {\n blendValue[key] = getMixer(a[key])(a[key], b[key]);\n }\n }\n return (v) => {\n for (const key in blendValue) {\n output[key] = blendValue[key](v);\n }\n return output;\n };\n}\nfunction matchOrder(origin, target) {\n const orderedOrigin = [];\n const pointers = { color: 0, var: 0, number: 0 };\n for (let i = 0; i < target.values.length; i++) {\n const type = target.types[i];\n const originIndex = origin.indexes[type][pointers[type]];\n const originValue = origin.values[originIndex] ?? 0;\n orderedOrigin[i] = originValue;\n pointers[type]++;\n }\n return orderedOrigin;\n}\nconst mixComplex = (origin, target) => {\n const template = complex.createTransformer(target);\n const originStats = analyseComplexValue(origin);\n const targetStats = analyseComplexValue(target);\n const canInterpolate = originStats.indexes.var.length === targetStats.indexes.var.length &&\n originStats.indexes.color.length === targetStats.indexes.color.length &&\n originStats.indexes.number.length >= targetStats.indexes.number.length;\n if (canInterpolate) {\n if ((invisibleValues.has(origin) &&\n !targetStats.values.length) ||\n (invisibleValues.has(target) &&\n !originStats.values.length)) {\n return mixVisibility(origin, target);\n }\n return pipe(mixArray(matchOrder(originStats, targetStats), targetStats.values), template);\n }\n else {\n warning(true, `Complex values '${origin}' and '${target}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`, \"complex-values-different\");\n return mixImmediate(origin, target);\n }\n};\n\nexport { getMixer, mixArray, mixComplex, mixObject };\n//# sourceMappingURL=complex.mjs.map\n","import { getMixer } from './complex.mjs';\nimport { mixNumber } from './number.mjs';\n\nfunction mix(from, to, p) {\n if (typeof from === \"number\" &&\n typeof to === \"number\" &&\n typeof p === \"number\") {\n return mixNumber(from, to, p);\n }\n const mixer = getMixer(from);\n return mixer(from, to);\n}\n\nexport { mix };\n//# sourceMappingURL=index.mjs.map\n","import { time } from '../../frameloop/sync-time.mjs';\nimport { frameData, cancelFrame, frame } from '../../frameloop/frame.mjs';\n\nconst frameloopDriver = (update) => {\n const passTimestamp = ({ timestamp }) => update(timestamp);\n return {\n start: (keepAlive = true) => frame.update(passTimestamp, keepAlive),\n stop: () => cancelFrame(passTimestamp),\n /**\n * If we're processing this frame we can use the\n * framelocked timestamp to keep things in sync.\n */\n now: () => (frameData.isProcessing ? frameData.timestamp : time.now()),\n };\n};\n\nexport { frameloopDriver };\n//# sourceMappingURL=frame.mjs.map\n","const generateLinearEasing = (easing, duration, // as milliseconds\nresolution = 10 // as milliseconds\n) => {\n let points = \"\";\n const numPoints = Math.max(Math.round(duration / resolution), 2);\n for (let i = 0; i < numPoints; i++) {\n points += Math.round(easing(i / (numPoints - 1)) * 10000) / 10000 + \", \";\n }\n return `linear(${points.substring(0, points.length - 2)})`;\n};\n\nexport { generateLinearEasing };\n//# sourceMappingURL=linear.mjs.map\n","/**\n * Implement a practical max duration for keyframe generation\n * to prevent infinite loops\n */\nconst maxGeneratorDuration = 20000;\nfunction calcGeneratorDuration(generator) {\n let duration = 0;\n const timeStep = 50;\n let state = generator.next(duration);\n while (!state.done && duration < maxGeneratorDuration) {\n duration += timeStep;\n state = generator.next(duration);\n }\n return duration >= maxGeneratorDuration ? Infinity : duration;\n}\n\nexport { calcGeneratorDuration, maxGeneratorDuration };\n//# sourceMappingURL=calc-duration.mjs.map\n","import { millisecondsToSeconds, clamp, secondsToMilliseconds, warning } from 'motion-utils';\nimport { generateLinearEasing } from '../waapi/utils/linear.mjs';\nimport { calcGeneratorDuration, maxGeneratorDuration } from './utils/calc-duration.mjs';\nimport { createGeneratorEasing } from './utils/create-generator-easing.mjs';\n\nconst springDefaults = {\n // Default spring physics\n stiffness: 100,\n damping: 10,\n mass: 1.0,\n velocity: 0.0,\n // Default duration/bounce-based options\n duration: 800, // in ms\n bounce: 0.3,\n visualDuration: 0.3, // in seconds\n // Rest thresholds\n restSpeed: {\n granular: 0.01,\n default: 2,\n },\n restDelta: {\n granular: 0.005,\n default: 0.5,\n },\n // Limits\n minDuration: 0.01, // in seconds\n maxDuration: 10.0, // in seconds\n minDamping: 0.05,\n maxDamping: 1,\n};\nfunction calcAngularFreq(undampedFreq, dampingRatio) {\n return undampedFreq * Math.sqrt(1 - dampingRatio * dampingRatio);\n}\nconst rootIterations = 12;\nfunction approximateRoot(envelope, derivative, initialGuess) {\n let result = initialGuess;\n for (let i = 1; i < rootIterations; i++) {\n result = result - envelope(result) / derivative(result);\n }\n return result;\n}\n/**\n * This is ported from the Framer implementation of duration-based spring resolution.\n */\nconst safeMin = 0.001;\nfunction findSpring({ duration = springDefaults.duration, bounce = springDefaults.bounce, velocity = springDefaults.velocity, mass = springDefaults.mass, }) {\n let envelope;\n let derivative;\n warning(duration <= secondsToMilliseconds(springDefaults.maxDuration), \"Spring duration must be 10 seconds or less\", \"spring-duration-limit\");\n let dampingRatio = 1 - bounce;\n /**\n * Restrict dampingRatio and duration to within acceptable ranges.\n */\n dampingRatio = clamp(springDefaults.minDamping, springDefaults.maxDamping, dampingRatio);\n duration = clamp(springDefaults.minDuration, springDefaults.maxDuration, millisecondsToSeconds(duration));\n if (dampingRatio < 1) {\n /**\n * Underdamped spring\n */\n envelope = (undampedFreq) => {\n const exponentialDecay = undampedFreq * dampingRatio;\n const delta = exponentialDecay * duration;\n const a = exponentialDecay - velocity;\n const b = calcAngularFreq(undampedFreq, dampingRatio);\n const c = Math.exp(-delta);\n return safeMin - (a / b) * c;\n };\n derivative = (undampedFreq) => {\n const exponentialDecay = undampedFreq * dampingRatio;\n const delta = exponentialDecay * duration;\n const d = delta * velocity + velocity;\n const e = Math.pow(dampingRatio, 2) * Math.pow(undampedFreq, 2) * duration;\n const f = Math.exp(-delta);\n const g = calcAngularFreq(Math.pow(undampedFreq, 2), dampingRatio);\n const factor = -envelope(undampedFreq) + safeMin > 0 ? -1 : 1;\n return (factor * ((d - e) * f)) / g;\n };\n }\n else {\n /**\n * Critically-damped spring\n */\n envelope = (undampedFreq) => {\n const a = Math.exp(-undampedFreq * duration);\n const b = (undampedFreq - velocity) * duration + 1;\n return -safeMin + a * b;\n };\n derivative = (undampedFreq) => {\n const a = Math.exp(-undampedFreq * duration);\n const b = (velocity - undampedFreq) * (duration * duration);\n return a * b;\n };\n }\n const initialGuess = 5 / duration;\n const undampedFreq = approximateRoot(envelope, derivative, initialGuess);\n duration = secondsToMilliseconds(duration);\n if (isNaN(undampedFreq)) {\n return {\n stiffness: springDefaults.stiffness,\n damping: springDefaults.damping,\n duration,\n };\n }\n else {\n const stiffness = Math.pow(undampedFreq, 2) * mass;\n return {\n stiffness,\n damping: dampingRatio * 2 * Math.sqrt(mass * stiffness),\n duration,\n };\n }\n}\nconst durationKeys = [\"duration\", \"bounce\"];\nconst physicsKeys = [\"stiffness\", \"damping\", \"mass\"];\nfunction isSpringType(options, keys) {\n return keys.some((key) => options[key] !== undefined);\n}\nfunction getSpringOptions(options) {\n let springOptions = {\n velocity: springDefaults.velocity,\n stiffness: springDefaults.stiffness,\n damping: springDefaults.damping,\n mass: springDefaults.mass,\n isResolvedFromDuration: false,\n ...options,\n };\n // stiffness/damping/mass overrides duration/bounce\n if (!isSpringType(options, physicsKeys) &&\n isSpringType(options, durationKeys)) {\n // Time-defined springs should ignore inherited velocity.\n // Velocity from interrupted animations can cause findSpring()\n // to compute wildly different spring parameters, leading to\n // massive oscillation on small-range animations.\n springOptions.velocity = 0;\n if (options.visualDuration) {\n const visualDuration = options.visualDuration;\n const root = (2 * Math.PI) / (visualDuration * 1.2);\n const stiffness = root * root;\n const damping = 2 *\n clamp(0.05, 1, 1 - (options.bounce || 0)) *\n Math.sqrt(stiffness);\n springOptions = {\n ...springOptions,\n mass: springDefaults.mass,\n stiffness,\n damping,\n };\n }\n else {\n const derived = findSpring({ ...options, velocity: 0 });\n springOptions = {\n ...springOptions,\n ...derived,\n mass: springDefaults.mass,\n };\n springOptions.isResolvedFromDuration = true;\n }\n }\n return springOptions;\n}\nfunction spring(optionsOrVisualDuration = springDefaults.visualDuration, bounce = springDefaults.bounce) {\n const options = typeof optionsOrVisualDuration !== \"object\"\n ? {\n visualDuration: optionsOrVisualDuration,\n keyframes: [0, 1],\n bounce,\n }\n : optionsOrVisualDuration;\n let { restSpeed, restDelta } = options;\n const origin = options.keyframes[0];\n const target = options.keyframes[options.keyframes.length - 1];\n /**\n * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator\n * to reduce GC during animation.\n */\n const state = { done: false, value: origin };\n const { stiffness, damping, mass, duration, velocity, isResolvedFromDuration, } = getSpringOptions({\n ...options,\n velocity: -millisecondsToSeconds(options.velocity || 0),\n });\n const initialVelocity = velocity || 0.0;\n const dampingRatio = damping / (2 * Math.sqrt(stiffness * mass));\n const initialDelta = target - origin;\n const undampedAngularFreq = millisecondsToSeconds(Math.sqrt(stiffness / mass));\n /**\n * If we're working on a granular scale, use smaller defaults for determining\n * when the spring is finished.\n *\n * These defaults have been selected emprically based on what strikes a good\n * ratio between feeling good and finishing as soon as changes are imperceptible.\n */\n const isGranularScale = Math.abs(initialDelta) < 5;\n restSpeed || (restSpeed = isGranularScale\n ? springDefaults.restSpeed.granular\n : springDefaults.restSpeed.default);\n restDelta || (restDelta = isGranularScale\n ? springDefaults.restDelta.granular\n : springDefaults.restDelta.default);\n let resolveSpring;\n let resolveVelocity;\n // Underdamped coefficients, hoisted for use in the inlined next() hot path\n let angularFreq;\n let A;\n let sinCoeff;\n let cosCoeff;\n if (dampingRatio < 1) {\n angularFreq = calcAngularFreq(undampedAngularFreq, dampingRatio);\n A =\n (initialVelocity +\n dampingRatio * undampedAngularFreq * initialDelta) /\n angularFreq;\n // Underdamped spring\n resolveSpring = (t) => {\n const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n return (target -\n envelope *\n (A * Math.sin(angularFreq * t) +\n initialDelta * Math.cos(angularFreq * t)));\n };\n // Analytical derivative of underdamped spring (px/ms)\n sinCoeff =\n dampingRatio * undampedAngularFreq * A + initialDelta * angularFreq;\n cosCoeff =\n dampingRatio * undampedAngularFreq * initialDelta - A * angularFreq;\n resolveVelocity = (t) => {\n const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n return envelope *\n (sinCoeff * Math.sin(angularFreq * t) +\n cosCoeff * Math.cos(angularFreq * t));\n };\n }\n else if (dampingRatio === 1) {\n // Critically damped spring\n resolveSpring = (t) => target -\n Math.exp(-undampedAngularFreq * t) *\n (initialDelta +\n (initialVelocity + undampedAngularFreq * initialDelta) * t);\n // Analytical derivative of critically damped spring (px/ms)\n const C = initialVelocity + undampedAngularFreq * initialDelta;\n resolveVelocity = (t) => Math.exp(-undampedAngularFreq * t) *\n (undampedAngularFreq * C * t - initialVelocity);\n }\n else {\n // Overdamped spring\n const dampedAngularFreq = undampedAngularFreq * Math.sqrt(dampingRatio * dampingRatio - 1);\n resolveSpring = (t) => {\n const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n // When performing sinh or cosh values can hit Infinity so we cap them here\n const freqForT = Math.min(dampedAngularFreq * t, 300);\n return (target -\n (envelope *\n ((initialVelocity +\n dampingRatio * undampedAngularFreq * initialDelta) *\n Math.sinh(freqForT) +\n dampedAngularFreq *\n initialDelta *\n Math.cosh(freqForT))) /\n dampedAngularFreq);\n };\n // Analytical derivative of overdamped spring (px/ms)\n const P = (initialVelocity +\n dampingRatio * undampedAngularFreq * initialDelta) /\n dampedAngularFreq;\n const sinhCoeff = dampingRatio * undampedAngularFreq * P - initialDelta * dampedAngularFreq;\n const coshCoeff = dampingRatio * undampedAngularFreq * initialDelta - P * dampedAngularFreq;\n resolveVelocity = (t) => {\n const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n const freqForT = Math.min(dampedAngularFreq * t, 300);\n return envelope *\n (sinhCoeff * Math.sinh(freqForT) +\n coshCoeff * Math.cosh(freqForT));\n };\n }\n const generator = {\n calculatedDuration: isResolvedFromDuration ? duration || null : null,\n velocity: (t) => secondsToMilliseconds(resolveVelocity(t)),\n next: (t) => {\n /**\n * For underdamped physics springs we need both position and\n * velocity each tick. Compute shared trig values once to avoid\n * duplicate Math.exp/sin/cos calls on the hot path.\n */\n if (!isResolvedFromDuration && dampingRatio < 1) {\n const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n const sin = Math.sin(angularFreq * t);\n const cos = Math.cos(angularFreq * t);\n const current = target -\n envelope *\n (A * sin + initialDelta * cos);\n const currentVelocity = secondsToMilliseconds(envelope *\n (sinCoeff * sin + cosCoeff * cos));\n state.done =\n Math.abs(currentVelocity) <= restSpeed &&\n Math.abs(target - current) <= restDelta;\n state.value = state.done ? target : current;\n return state;\n }\n const current = resolveSpring(t);\n if (!isResolvedFromDuration) {\n const currentVelocity = secondsToMilliseconds(resolveVelocity(t));\n state.done =\n Math.abs(currentVelocity) <= restSpeed &&\n Math.abs(target - current) <= restDelta;\n }\n else {\n state.done = t >= duration;\n }\n state.value = state.done ? target : current;\n return state;\n },\n toString: () => {\n const calculatedDuration = Math.min(calcGeneratorDuration(generator), maxGeneratorDuration);\n const easing = generateLinearEasing((progress) => generator.next(calculatedDuration * progress).value, calculatedDuration, 30);\n return calculatedDuration + \"ms \" + easing;\n },\n toTransition: () => { },\n };\n return generator;\n}\nspring.applyToOptions = (options) => {\n const generatorOptions = createGeneratorEasing(options, 100, spring);\n options.ease = generatorOptions.ease;\n options.duration = secondsToMilliseconds(generatorOptions.duration);\n options.type = \"keyframes\";\n return options;\n};\n\nexport { spring };\n//# sourceMappingURL=spring.mjs.map\n","import { millisecondsToSeconds } from 'motion-utils';\nimport { calcGeneratorDuration, maxGeneratorDuration } from './calc-duration.mjs';\n\n/**\n * Create a progress => progress easing function from a generator.\n */\nfunction createGeneratorEasing(options, scale = 100, createGenerator) {\n const generator = createGenerator({ ...options, keyframes: [0, scale] });\n const duration = Math.min(calcGeneratorDuration(generator), maxGeneratorDuration);\n return {\n type: \"keyframes\",\n ease: (progress) => {\n return generator.next(duration * progress).value / scale;\n },\n duration: millisecondsToSeconds(duration),\n };\n}\n\nexport { createGeneratorEasing };\n//# sourceMappingURL=create-generator-easing.mjs.map\n","import { velocityPerSecond } from 'motion-utils';\n\nconst velocitySampleDuration = 5; // ms\nfunction getGeneratorVelocity(resolveValue, t, current) {\n const prevT = Math.max(t - velocitySampleDuration, 0);\n return velocityPerSecond(current - resolveValue(prevT), t - prevT);\n}\n\nexport { getGeneratorVelocity };\n//# sourceMappingURL=velocity.mjs.map\n","import { spring } from './spring.mjs';\nimport { getGeneratorVelocity } from './utils/velocity.mjs';\n\nfunction inertia({ keyframes, velocity = 0.0, power = 0.8, timeConstant = 325, bounceDamping = 10, bounceStiffness = 500, modifyTarget, min, max, restDelta = 0.5, restSpeed, }) {\n const origin = keyframes[0];\n const state = {\n done: false,\n value: origin,\n };\n const isOutOfBounds = (v) => (min !== undefined && v < min) || (max !== undefined && v > max);\n const nearestBoundary = (v) => {\n if (min === undefined)\n return max;\n if (max === undefined)\n return min;\n return Math.abs(min - v) < Math.abs(max - v) ? min : max;\n };\n let amplitude = power * velocity;\n const ideal = origin + amplitude;\n const target = modifyTarget === undefined ? ideal : modifyTarget(ideal);\n /**\n * If the target has changed we need to re-calculate the amplitude, otherwise\n * the animation will start from the wrong position.\n */\n if (target !== ideal)\n amplitude = target - origin;\n const calcDelta = (t) => -amplitude * Math.exp(-t / timeConstant);\n const calcLatest = (t) => target + calcDelta(t);\n const applyFriction = (t) => {\n const delta = calcDelta(t);\n const latest = calcLatest(t);\n state.done = Math.abs(delta) <= restDelta;\n state.value = state.done ? target : latest;\n };\n /**\n * Ideally this would resolve for t in a stateless way, we could\n * do that by always precalculating the animation but as we know\n * this will be done anyway we can assume that spring will\n * be discovered during that.\n */\n let timeReachedBoundary;\n let spring$1;\n const checkCatchBoundary = (t) => {\n if (!isOutOfBounds(state.value))\n return;\n timeReachedBoundary = t;\n spring$1 = spring({\n keyframes: [state.value, nearestBoundary(state.value)],\n velocity: getGeneratorVelocity(calcLatest, t, state.value), // TODO: This should be passing * 1000\n damping: bounceDamping,\n stiffness: bounceStiffness,\n restDelta,\n restSpeed,\n });\n };\n checkCatchBoundary(0);\n return {\n calculatedDuration: null,\n next: (t) => {\n /**\n * We need to resolve the friction to figure out if we need a\n * spring but we don't want to do this twice per frame. So here\n * we flag if we updated for this frame and later if we did\n * we can skip doing it again.\n */\n let hasUpdatedFrame = false;\n if (!spring$1 && timeReachedBoundary === undefined) {\n hasUpdatedFrame = true;\n applyFriction(t);\n checkCatchBoundary(t);\n }\n /**\n * If we have a spring and the provided t is beyond the moment the friction\n * animation crossed the min/max boundary, use the spring.\n */\n if (timeReachedBoundary !== undefined && t >= timeReachedBoundary) {\n return spring$1.next(t - timeReachedBoundary);\n }\n else {\n !hasUpdatedFrame && applyFriction(t);\n return state;\n }\n },\n };\n}\n\nexport { inertia };\n//# sourceMappingURL=inertia.mjs.map\n","import { invariant, clamp, MotionGlobalConfig, noop, pipe, progress } from 'motion-utils';\nimport { mix } from './mix/index.mjs';\n\nfunction createMixers(output, ease, customMixer) {\n const mixers = [];\n const mixerFactory = customMixer || MotionGlobalConfig.mix || mix;\n const numMixers = output.length - 1;\n for (let i = 0; i < numMixers; i++) {\n let mixer = mixerFactory(output[i], output[i + 1]);\n if (ease) {\n const easingFunction = Array.isArray(ease) ? ease[i] || noop : ease;\n mixer = pipe(easingFunction, mixer);\n }\n mixers.push(mixer);\n }\n return mixers;\n}\n/**\n * Create a function that maps from a numerical input array to a generic output array.\n *\n * Accepts:\n * - Numbers\n * - Colors (hex, hsl, hsla, rgb, rgba)\n * - Complex (combinations of one or more numbers or strings)\n *\n * ```jsx\n * const mixColor = interpolate([0, 1], ['#fff', '#000'])\n *\n * mixColor(0.5) // 'rgba(128, 128, 128, 1)'\n * ```\n *\n * TODO Revisit this approach once we've moved to data models for values,\n * probably not needed to pregenerate mixer functions.\n *\n * @public\n */\nfunction interpolate(input, output, { clamp: isClamp = true, ease, mixer } = {}) {\n const inputLength = input.length;\n invariant(inputLength === output.length, \"Both input and output ranges must be the same length\", \"range-length\");\n /**\n * If we're only provided a single input, we can just make a function\n * that returns the output.\n */\n if (inputLength === 1)\n return () => output[0];\n if (inputLength === 2 && output[0] === output[1])\n return () => output[1];\n const isZeroDeltaRange = input[0] === input[1];\n // If input runs highest -> lowest, reverse both arrays\n if (input[0] > input[inputLength - 1]) {\n input = [...input].reverse();\n output = [...output].reverse();\n }\n const mixers = createMixers(output, ease, mixer);\n const numMixers = mixers.length;\n const interpolator = (v) => {\n if (isZeroDeltaRange && v < input[0])\n return output[0];\n let i = 0;\n if (numMixers > 1) {\n for (; i < input.length - 2; i++) {\n if (v < input[i + 1])\n break;\n }\n }\n const progressInRange = progress(input[i], input[i + 1], v);\n return mixers[i](progressInRange);\n };\n return isClamp\n ? (v) => interpolator(clamp(input[0], input[inputLength - 1], v))\n : interpolator;\n}\n\nexport { interpolate };\n//# sourceMappingURL=interpolate.mjs.map\n","import { fillOffset } from './fill.mjs';\n\nfunction defaultOffset(arr) {\n const offset = [0];\n fillOffset(offset, arr.length - 1);\n return offset;\n}\n\nexport { defaultOffset };\n//# sourceMappingURL=default.mjs.map\n","import { progress } from 'motion-utils';\nimport { mixNumber } from '../../../utils/mix/number.mjs';\n\nfunction fillOffset(offset, remaining) {\n const min = offset[offset.length - 1];\n for (let i = 1; i <= remaining; i++) {\n const offsetProgress = progress(0, remaining, i);\n offset.push(mixNumber(min, 1, offsetProgress));\n }\n}\n\nexport { fillOffset };\n//# sourceMappingURL=fill.mjs.map\n","import { easeInOut, isEasingArray, easingDefinitionToFunction } from 'motion-utils';\nimport { interpolate } from '../../utils/interpolate.mjs';\nimport { defaultOffset } from '../keyframes/offsets/default.mjs';\nimport { convertOffsetToTimes } from '../keyframes/offsets/time.mjs';\n\nfunction defaultEasing(values, easing) {\n return values.map(() => easing || easeInOut).splice(0, values.length - 1);\n}\nfunction keyframes({ duration = 300, keyframes: keyframeValues, times, ease = \"easeInOut\", }) {\n /**\n * Easing functions can be externally defined as strings. Here we convert them\n * into actual functions.\n */\n const easingFunctions = isEasingArray(ease)\n ? ease.map(easingDefinitionToFunction)\n : easingDefinitionToFunction(ease);\n /**\n * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator\n * to reduce GC during animation.\n */\n const state = {\n done: false,\n value: keyframeValues[0],\n };\n /**\n * Create a times array based on the provided 0-1 offsets\n */\n const absoluteTimes = convertOffsetToTimes(\n // Only use the provided offsets if they're the correct length\n // TODO Maybe we should warn here if there's a length mismatch\n times && times.length === keyframeValues.length\n ? times\n : defaultOffset(keyframeValues), duration);\n const mapTimeToKeyframe = interpolate(absoluteTimes, keyframeValues, {\n ease: Array.isArray(easingFunctions)\n ? easingFunctions\n : defaultEasing(keyframeValues, easingFunctions),\n });\n return {\n calculatedDuration: duration,\n next: (t) => {\n state.value = mapTimeToKeyframe(t);\n state.done = t >= duration;\n return state;\n },\n };\n}\n\nexport { defaultEasing, keyframes };\n//# sourceMappingURL=keyframes.mjs.map\n","/*#__NO_SIDE_EFFECTS__*/\nconst isEasingArray = (ease) => {\n return Array.isArray(ease) && typeof ease[0] !== \"number\";\n};\n\nexport { isEasingArray };\n//# sourceMappingURL=is-easing-array.mjs.map\n","function convertOffsetToTimes(offset, duration) {\n return offset.map((o) => o * duration);\n}\n\nexport { convertOffsetToTimes };\n//# sourceMappingURL=time.mjs.map\n","const isNotNull = (value) => value !== null;\nfunction getFinalKeyframe(keyframes, { repeat, repeatType = \"loop\" }, finalKeyframe, speed = 1) {\n const resolvedKeyframes = keyframes.filter(isNotNull);\n const useFirstKeyframe = speed < 0 || (repeat && repeatType !== \"loop\" && repeat % 2 === 1);\n const index = useFirstKeyframe ? 0 : resolvedKeyframes.length - 1;\n return !index || finalKeyframe === undefined\n ? resolvedKeyframes[index]\n : finalKeyframe;\n}\n\nexport { getFinalKeyframe };\n//# sourceMappingURL=get-final.mjs.map\n","import { inertia } from '../generators/inertia.mjs';\nimport { keyframes } from '../generators/keyframes.mjs';\nimport { spring } from '../generators/spring.mjs';\n\nconst transitionTypeMap = {\n decay: inertia,\n inertia,\n tween: keyframes,\n keyframes: keyframes,\n spring,\n};\nfunction replaceTransitionType(transition) {\n if (typeof transition.type === \"string\") {\n transition.type = transitionTypeMap[transition.type];\n }\n}\n\nexport { replaceTransitionType };\n//# sourceMappingURL=replace-transition-type.mjs.map\n","class WithPromise {\n constructor() {\n this.updateFinished();\n }\n get finished() {\n return this._finished;\n }\n updateFinished() {\n this._finished = new Promise((resolve) => {\n this.resolve = resolve;\n });\n }\n notifyFinished() {\n this.resolve();\n }\n /**\n * Allows the animation to be awaited.\n *\n * @deprecated Use `finished` instead.\n */\n then(onResolve, onReject) {\n return this.finished.then(onResolve, onReject);\n }\n}\n\nexport { WithPromise };\n//# sourceMappingURL=WithPromise.mjs.map\n","import { invariant, pipe, clamp, millisecondsToSeconds, secondsToMilliseconds } from 'motion-utils';\nimport { time } from '../frameloop/sync-time.mjs';\nimport { activeAnimations } from '../stats/animation-count.mjs';\nimport { mix } from '../utils/mix/index.mjs';\nimport { frameloopDriver } from './drivers/frame.mjs';\nimport { inertia } from './generators/inertia.mjs';\nimport { keyframes } from './generators/keyframes.mjs';\nimport { calcGeneratorDuration } from './generators/utils/calc-duration.mjs';\nimport { getGeneratorVelocity } from './generators/utils/velocity.mjs';\nimport { getFinalKeyframe } from './keyframes/get-final.mjs';\nimport { replaceTransitionType } from './utils/replace-transition-type.mjs';\nimport { WithPromise } from './utils/WithPromise.mjs';\n\nconst percentToProgress = (percent) => percent / 100;\nclass JSAnimation extends WithPromise {\n constructor(options) {\n super();\n this.state = \"idle\";\n this.startTime = null;\n this.isStopped = false;\n /**\n * The current time of the animation.\n */\n this.currentTime = 0;\n /**\n * The time at which the animation was paused.\n */\n this.holdTime = null;\n /**\n * Playback speed as a factor. 0 would be stopped, -1 reverse and 2 double speed.\n */\n this.playbackSpeed = 1;\n /**\n * Reusable state object for the delay phase to avoid\n * allocating a new object every frame.\n */\n this.delayState = {\n done: false,\n value: undefined,\n };\n /**\n * This method is bound to the instance to fix a pattern where\n * animation.stop is returned as a reference from a useEffect.\n */\n this.stop = () => {\n const { motionValue } = this.options;\n if (motionValue && motionValue.updatedAt !== time.now()) {\n this.tick(time.now());\n }\n this.isStopped = true;\n if (this.state === \"idle\")\n return;\n this.teardown();\n this.options.onStop?.();\n };\n activeAnimations.mainThread++;\n this.options = options;\n this.initAnimation();\n this.play();\n if (options.autoplay === false)\n this.pause();\n }\n initAnimation() {\n const { options } = this;\n replaceTransitionType(options);\n const { type = keyframes, repeat = 0, repeatDelay = 0, repeatType, velocity = 0, } = options;\n let { keyframes: keyframes$1 } = options;\n const generatorFactory = type || keyframes;\n if (process.env.NODE_ENV !== \"production\" &&\n generatorFactory !== keyframes) {\n invariant(keyframes$1.length <= 2, `Only two keyframes currently supported with spring and inertia animations. Trying to animate ${keyframes$1}`, \"spring-two-frames\");\n }\n if (generatorFactory !== keyframes &&\n typeof keyframes$1[0] !== \"number\") {\n this.mixKeyframes = pipe(percentToProgress, mix(keyframes$1[0], keyframes$1[1]));\n keyframes$1 = [0, 100];\n }\n const generator = generatorFactory({ ...options, keyframes: keyframes$1 });\n /**\n * If we have a mirror repeat type we need to create a second generator that outputs the\n * mirrored (not reversed) animation and later ping pong between the two generators.\n */\n if (repeatType === \"mirror\") {\n this.mirroredGenerator = generatorFactory({\n ...options,\n keyframes: [...keyframes$1].reverse(),\n velocity: -velocity,\n });\n }\n /**\n * If duration is undefined and we have repeat options,\n * we need to calculate a duration from the generator.\n *\n * We set it to the generator itself to cache the duration.\n * Any timeline resolver will need to have already precalculated\n * the duration by this step.\n */\n if (generator.calculatedDuration === null) {\n generator.calculatedDuration = calcGeneratorDuration(generator);\n }\n const { calculatedDuration } = generator;\n this.calculatedDuration = calculatedDuration;\n this.resolvedDuration = calculatedDuration + repeatDelay;\n this.totalDuration = this.resolvedDuration * (repeat + 1) - repeatDelay;\n this.generator = generator;\n }\n updateTime(timestamp) {\n const animationTime = Math.round(timestamp - this.startTime) * this.playbackSpeed;\n // Update currentTime\n if (this.holdTime !== null) {\n this.currentTime = this.holdTime;\n }\n else {\n // Rounding the time because floating point arithmetic is not always accurate, e.g. 3000.367 - 1000.367 =\n // 2000.0000000000002. This is a problem when we are comparing the currentTime with the duration, for\n // example.\n this.currentTime = animationTime;\n }\n }\n tick(timestamp, sample = false) {\n const { generator, totalDuration, mixKeyframes, mirroredGenerator, resolvedDuration, calculatedDuration, } = this;\n if (this.startTime === null)\n return generator.next(0);\n const { delay = 0, keyframes, repeat, repeatType, repeatDelay, type, onUpdate, finalKeyframe, } = this.options;\n /**\n * requestAnimationFrame timestamps can come through as lower than\n * the startTime as set by performance.now(). Here we prevent this,\n * though in the future it could be possible to make setting startTime\n * a pending operation that gets resolved here.\n */\n if (this.speed > 0) {\n this.startTime = Math.min(this.startTime, timestamp);\n }\n else if (this.speed < 0) {\n this.startTime = Math.min(timestamp - totalDuration / this.speed, this.startTime);\n }\n if (sample) {\n this.currentTime = timestamp;\n }\n else {\n this.updateTime(timestamp);\n }\n // Rebase on delay\n const timeWithoutDelay = this.currentTime - delay * (this.playbackSpeed >= 0 ? 1 : -1);\n const isInDelayPhase = this.playbackSpeed >= 0\n ? timeWithoutDelay < 0\n : timeWithoutDelay > totalDuration;\n this.currentTime = Math.max(timeWithoutDelay, 0);\n // If this animation has finished, set the current time to the total duration.\n if (this.state === \"finished\" && this.holdTime === null) {\n this.currentTime = totalDuration;\n }\n let elapsed = this.currentTime;\n let frameGenerator = generator;\n if (repeat) {\n /**\n * Get the current progress (0-1) of the animation. If t is >\n * than duration we'll get values like 2.5 (midway through the\n * third iteration)\n */\n const progress = Math.min(this.currentTime, totalDuration) / resolvedDuration;\n /**\n * Get the current iteration (0 indexed). For instance the floor of\n * 2.5 is 2.\n */\n let currentIteration = Math.floor(progress);\n /**\n * Get the current progress of the iteration by taking the remainder\n * so 2.5 is 0.5 through iteration 2\n */\n let iterationProgress = progress % 1.0;\n /**\n * If iteration progress is 1 we count that as the end\n * of the previous iteration.\n */\n if (!iterationProgress && progress >= 1) {\n iterationProgress = 1;\n }\n iterationProgress === 1 && currentIteration--;\n currentIteration = Math.min(currentIteration, repeat + 1);\n /**\n * Reverse progress if we're not running in \"normal\" direction\n */\n const isOddIteration = Boolean(currentIteration % 2);\n if (isOddIteration) {\n if (repeatType === \"reverse\") {\n iterationProgress = 1 - iterationProgress;\n if (repeatDelay) {\n iterationProgress -= repeatDelay / resolvedDuration;\n }\n }\n else if (repeatType === \"mirror\") {\n frameGenerator = mirroredGenerator;\n }\n }\n elapsed = clamp(0, 1, iterationProgress) * resolvedDuration;\n }\n /**\n * If we're in negative time, set state as the initial keyframe.\n * This prevents delay: x, duration: 0 animations from finishing\n * instantly.\n */\n let state;\n if (isInDelayPhase) {\n this.delayState.value = keyframes[0];\n state = this.delayState;\n }\n else {\n state = frameGenerator.next(elapsed);\n }\n if (mixKeyframes && !isInDelayPhase) {\n state.value = mixKeyframes(state.value);\n }\n let { done } = state;\n if (!isInDelayPhase && calculatedDuration !== null) {\n done =\n this.playbackSpeed >= 0\n ? this.currentTime >= totalDuration\n : this.currentTime <= 0;\n }\n const isAnimationFinished = this.holdTime === null &&\n (this.state === \"finished\" || (this.state === \"running\" && done));\n // TODO: The exception for inertia could be cleaner here\n if (isAnimationFinished && type !== inertia) {\n state.value = getFinalKeyframe(keyframes, this.options, finalKeyframe, this.speed);\n }\n if (onUpdate) {\n onUpdate(state.value);\n }\n if (isAnimationFinished) {\n this.finish();\n }\n return state;\n }\n /**\n * Allows the returned animation to be awaited or promise-chained. Currently\n * resolves when the animation finishes at all but in a future update could/should\n * reject if its cancels.\n */\n then(resolve, reject) {\n return this.finished.then(resolve, reject);\n }\n get duration() {\n return millisecondsToSeconds(this.calculatedDuration);\n }\n get iterationDuration() {\n const { delay = 0 } = this.options || {};\n return this.duration + millisecondsToSeconds(delay);\n }\n get time() {\n return millisecondsToSeconds(this.currentTime);\n }\n set time(newTime) {\n newTime = secondsToMilliseconds(newTime);\n this.currentTime = newTime;\n if (this.startTime === null ||\n this.holdTime !== null ||\n this.playbackSpeed === 0) {\n this.holdTime = newTime;\n }\n else if (this.driver) {\n this.startTime = this.driver.now() - newTime / this.playbackSpeed;\n }\n if (this.driver) {\n this.driver.start(false);\n }\n else {\n this.startTime = 0;\n this.state = \"paused\";\n this.holdTime = newTime;\n this.tick(newTime);\n }\n }\n /**\n * Returns the generator's velocity at the current time in units/second.\n * Uses the analytical derivative when available (springs), avoiding\n * the MotionValue's frame-dependent velocity estimation.\n */\n getGeneratorVelocity() {\n const t = this.currentTime;\n if (t <= 0)\n return this.options.velocity || 0;\n if (this.generator.velocity) {\n return this.generator.velocity(t);\n }\n // Fallback: finite difference\n const current = this.generator.next(t).value;\n return getGeneratorVelocity((s) => this.generator.next(s).value, t, current);\n }\n get speed() {\n return this.playbackSpeed;\n }\n set speed(newSpeed) {\n const hasChanged = this.playbackSpeed !== newSpeed;\n if (hasChanged && this.driver) {\n this.updateTime(time.now());\n }\n this.playbackSpeed = newSpeed;\n if (hasChanged && this.driver) {\n this.time = millisecondsToSeconds(this.currentTime);\n }\n }\n play() {\n if (this.isStopped)\n return;\n const { driver = frameloopDriver, startTime } = this.options;\n if (!this.driver) {\n this.driver = driver((timestamp) => this.tick(timestamp));\n }\n this.options.onPlay?.();\n const now = this.driver.now();\n if (this.state === \"finished\") {\n this.updateFinished();\n this.startTime = now;\n }\n else if (this.holdTime !== null) {\n this.startTime = now - this.holdTime;\n }\n else if (!this.startTime) {\n this.startTime = startTime ?? now;\n }\n if (this.state === \"finished\" && this.speed < 0) {\n this.startTime += this.calculatedDuration;\n }\n this.holdTime = null;\n /**\n * Set playState to running only after we've used it in\n * the previous logic.\n */\n this.state = \"running\";\n this.driver.start();\n }\n pause() {\n this.state = \"paused\";\n this.updateTime(time.now());\n this.holdTime = this.currentTime;\n }\n complete() {\n if (this.state !== \"running\") {\n this.play();\n }\n this.state = \"finished\";\n this.holdTime = null;\n }\n finish() {\n this.notifyFinished();\n this.teardown();\n this.state = \"finished\";\n this.options.onComplete?.();\n }\n cancel() {\n this.holdTime = null;\n this.startTime = 0;\n this.tick(0);\n this.teardown();\n this.options.onCancel?.();\n }\n teardown() {\n this.state = \"idle\";\n this.stopDriver();\n this.startTime = this.holdTime = null;\n activeAnimations.mainThread--;\n }\n stopDriver() {\n if (!this.driver)\n return;\n this.driver.stop();\n this.driver = undefined;\n }\n sample(sampleTime) {\n this.startTime = 0;\n return this.tick(sampleTime, true);\n }\n attachTimeline(timeline) {\n if (this.options.allowFlatten) {\n this.options.type = \"keyframes\";\n this.options.ease = \"linear\";\n this.initAnimation();\n }\n this.driver?.stop();\n return timeline.observe(this);\n }\n}\n// Legacy function support\nfunction animateValue(options) {\n return new JSAnimation(options);\n}\n\nexport { JSAnimation, animateValue };\n//# sourceMappingURL=JSAnimation.mjs.map\n","const radToDeg = (rad) => (rad * 180) / Math.PI;\nconst rotate = (v) => {\n const angle = radToDeg(Math.atan2(v[1], v[0]));\n return rebaseAngle(angle);\n};\nconst matrix2dParsers = {\n x: 4,\n y: 5,\n translateX: 4,\n translateY: 5,\n scaleX: 0,\n scaleY: 3,\n scale: (v) => (Math.abs(v[0]) + Math.abs(v[3])) / 2,\n rotate,\n rotateZ: rotate,\n skewX: (v) => radToDeg(Math.atan(v[1])),\n skewY: (v) => radToDeg(Math.atan(v[2])),\n skew: (v) => (Math.abs(v[1]) + Math.abs(v[2])) / 2,\n};\nconst rebaseAngle = (angle) => {\n angle = angle % 360;\n if (angle < 0)\n angle += 360;\n return angle;\n};\nconst rotateZ = rotate;\nconst scaleX = (v) => Math.sqrt(v[0] * v[0] + v[1] * v[1]);\nconst scaleY = (v) => Math.sqrt(v[4] * v[4] + v[5] * v[5]);\nconst matrix3dParsers = {\n x: 12,\n y: 13,\n z: 14,\n translateX: 12,\n translateY: 13,\n translateZ: 14,\n scaleX,\n scaleY,\n scale: (v) => (scaleX(v) + scaleY(v)) / 2,\n rotateX: (v) => rebaseAngle(radToDeg(Math.atan2(v[6], v[5]))),\n rotateY: (v) => rebaseAngle(radToDeg(Math.atan2(-v[2], v[0]))),\n rotateZ,\n rotate: rotateZ,\n skewX: (v) => radToDeg(Math.atan(v[4])),\n skewY: (v) => radToDeg(Math.atan(v[1])),\n skew: (v) => (Math.abs(v[1]) + Math.abs(v[4])) / 2,\n};\nfunction defaultTransformValue(name) {\n return name.includes(\"scale\") ? 1 : 0;\n}\nfunction parseValueFromTransform(transform, name) {\n if (!transform || transform === \"none\") {\n return defaultTransformValue(name);\n }\n const matrix3dMatch = transform.match(/^matrix3d\\(([-\\d.e\\s,]+)\\)$/u);\n let parsers;\n let match;\n if (matrix3dMatch) {\n parsers = matrix3dParsers;\n match = matrix3dMatch;\n }\n else {\n const matrix2dMatch = transform.match(/^matrix\\(([-\\d.e\\s,]+)\\)$/u);\n parsers = matrix2dParsers;\n match = matrix2dMatch;\n }\n if (!match) {\n return defaultTransformValue(name);\n }\n const valueParser = parsers[name];\n const values = match[1].split(\",\").map(convertTransformToNumber);\n return typeof valueParser === \"function\"\n ? valueParser(values)\n : values[valueParser];\n}\nconst readTransformValue = (instance, name) => {\n const { transform = \"none\" } = getComputedStyle(instance);\n return parseValueFromTransform(transform, name);\n};\nfunction convertTransformToNumber(value) {\n return parseFloat(value.trim());\n}\n\nexport { defaultTransformValue, parseValueFromTransform, readTransformValue };\n//# sourceMappingURL=parse-transform.mjs.map\n","/**\n * Generate a list of every possible transform key.\n */\nconst transformPropOrder = [\n \"transformPerspective\",\n \"x\",\n \"y\",\n \"z\",\n \"translateX\",\n \"translateY\",\n \"translateZ\",\n \"scale\",\n \"scaleX\",\n \"scaleY\",\n \"rotate\",\n \"rotateX\",\n \"rotateY\",\n \"rotateZ\",\n \"skew\",\n \"skewX\",\n \"skewY\",\n];\n/**\n * A quick lookup for transform props.\n *\n * `pathRotation` is a transform for routing purposes (skipped from raw\n * style application, wired to the transform composite, flags transform\n * dirty) but is intentionally NOT in `transformPropOrder` — it is\n * composed onto `rotate` at the build sites, not serialized in its own\n * slot, and must stay out of the order-array consumers (parse-transform,\n * unit-conversion, keys-position).\n */\nconst transformProps = /*@__PURE__*/ (() => new Set([...transformPropOrder, \"pathRotation\"]))();\n\nexport { transformPropOrder, transformProps };\n//# sourceMappingURL=keys-transform.mjs.map\n","import { parseValueFromTransform } from '../../../render/dom/parse-transform.mjs';\nimport { transformPropOrder } from '../../../render/utils/keys-transform.mjs';\nimport { number } from '../../../value/types/numbers/index.mjs';\nimport { px } from '../../../value/types/numbers/units.mjs';\n\nconst isNumOrPxType = (v) => v === number || v === px;\nconst transformKeys = new Set([\"x\", \"y\", \"z\"]);\nconst nonTranslationalTransformKeys = transformPropOrder.filter((key) => !transformKeys.has(key));\nfunction removeNonTranslationalTransform(visualElement) {\n const removedTransforms = [];\n nonTranslationalTransformKeys.forEach((key) => {\n const value = visualElement.getValue(key);\n if (value !== undefined) {\n removedTransforms.push([key, value.get()]);\n value.set(key.startsWith(\"scale\") ? 1 : 0);\n }\n });\n return removedTransforms;\n}\nconst positionalValues = {\n // Dimensions\n width: ({ x }, { paddingLeft = \"0\", paddingRight = \"0\", boxSizing }) => {\n const width = x.max - x.min;\n return boxSizing === \"border-box\"\n ? width\n : width - parseFloat(paddingLeft) - parseFloat(paddingRight);\n },\n height: ({ y }, { paddingTop = \"0\", paddingBottom = \"0\", boxSizing }) => {\n const height = y.max - y.min;\n return boxSizing === \"border-box\"\n ? height\n : height - parseFloat(paddingTop) - parseFloat(paddingBottom);\n },\n top: (_bbox, { top }) => parseFloat(top),\n left: (_bbox, { left }) => parseFloat(left),\n bottom: ({ y }, { top }) => parseFloat(top) + (y.max - y.min),\n right: ({ x }, { left }) => parseFloat(left) + (x.max - x.min),\n // Transform\n x: (_bbox, { transform }) => parseValueFromTransform(transform, \"x\"),\n y: (_bbox, { transform }) => parseValueFromTransform(transform, \"y\"),\n};\n// Alias translate longform names\npositionalValues.translateX = positionalValues.x;\npositionalValues.translateY = positionalValues.y;\n\nexport { isNumOrPxType, positionalValues, removeNonTranslationalTransform };\n//# sourceMappingURL=unit-conversion.mjs.map\n","import { fillWildcards } from './utils/fill-wildcards.mjs';\nimport { removeNonTranslationalTransform } from './utils/unit-conversion.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst toResolve = new Set();\nlet isScheduled = false;\nlet anyNeedsMeasurement = false;\nlet isForced = false;\nfunction measureAllKeyframes() {\n if (anyNeedsMeasurement) {\n const resolversToMeasure = Array.from(toResolve).filter((resolver) => resolver.needsMeasurement);\n const elementsToMeasure = new Set(resolversToMeasure.map((resolver) => resolver.element));\n const transformsToRestore = new Map();\n /**\n * Write pass\n * If we're measuring elements we want to remove bounding box-changing transforms.\n */\n elementsToMeasure.forEach((element) => {\n const removedTransforms = removeNonTranslationalTransform(element);\n if (!removedTransforms.length)\n return;\n transformsToRestore.set(element, removedTransforms);\n element.render();\n });\n // Read\n resolversToMeasure.forEach((resolver) => resolver.measureInitialState());\n // Write\n elementsToMeasure.forEach((element) => {\n element.render();\n const restore = transformsToRestore.get(element);\n if (restore) {\n restore.forEach(([key, value]) => {\n element.getValue(key)?.set(value);\n });\n }\n });\n // Read\n resolversToMeasure.forEach((resolver) => resolver.measureEndState());\n // Write\n resolversToMeasure.forEach((resolver) => {\n if (resolver.suspendedScrollY !== undefined) {\n window.scrollTo(0, resolver.suspendedScrollY);\n }\n });\n }\n anyNeedsMeasurement = false;\n isScheduled = false;\n toResolve.forEach((resolver) => resolver.complete(isForced));\n toResolve.clear();\n}\nfunction readAllKeyframes() {\n toResolve.forEach((resolver) => {\n resolver.readKeyframes();\n if (resolver.needsMeasurement) {\n anyNeedsMeasurement = true;\n }\n });\n}\nfunction flushKeyframeResolvers() {\n isForced = true;\n readAllKeyframes();\n measureAllKeyframes();\n isForced = false;\n}\nclass KeyframeResolver {\n constructor(unresolvedKeyframes, onComplete, name, motionValue, element, isAsync = false) {\n this.state = \"pending\";\n /**\n * Track whether this resolver is async. If it is, it'll be added to the\n * resolver queue and flushed in the next frame. Resolvers that aren't going\n * to trigger read/write thrashing don't need to be async.\n */\n this.isAsync = false;\n /**\n * Track whether this resolver needs to perform a measurement\n * to resolve its keyframes.\n */\n this.needsMeasurement = false;\n this.unresolvedKeyframes = [...unresolvedKeyframes];\n this.onComplete = onComplete;\n this.name = name;\n this.motionValue = motionValue;\n this.element = element;\n this.isAsync = isAsync;\n }\n scheduleResolve() {\n this.state = \"scheduled\";\n if (this.isAsync) {\n toResolve.add(this);\n if (!isScheduled) {\n isScheduled = true;\n frame.read(readAllKeyframes);\n frame.resolveKeyframes(measureAllKeyframes);\n }\n }\n else {\n this.readKeyframes();\n this.complete();\n }\n }\n readKeyframes() {\n const { unresolvedKeyframes, name, element, motionValue } = this;\n // If initial keyframe is null we need to read it from the DOM\n if (unresolvedKeyframes[0] === null) {\n const currentValue = motionValue?.get();\n // TODO: This doesn't work if the final keyframe is a wildcard\n const finalKeyframe = unresolvedKeyframes[unresolvedKeyframes.length - 1];\n if (currentValue !== undefined) {\n unresolvedKeyframes[0] = currentValue;\n }\n else if (element && name) {\n const valueAsRead = element.readValue(name, finalKeyframe);\n if (valueAsRead !== undefined && valueAsRead !== null) {\n unresolvedKeyframes[0] = valueAsRead;\n }\n }\n if (unresolvedKeyframes[0] === undefined) {\n unresolvedKeyframes[0] = finalKeyframe;\n }\n if (motionValue && currentValue === undefined) {\n motionValue.set(unresolvedKeyframes[0]);\n }\n }\n fillWildcards(unresolvedKeyframes);\n }\n setFinalKeyframe() { }\n measureInitialState() { }\n renderEndStyles() { }\n measureEndState() { }\n complete(isForcedComplete = false) {\n this.state = \"complete\";\n this.onComplete(this.unresolvedKeyframes, this.finalKeyframe, isForcedComplete);\n toResolve.delete(this);\n }\n cancel() {\n if (this.state === \"scheduled\") {\n toResolve.delete(this);\n this.state = \"pending\";\n }\n }\n resume() {\n if (this.state === \"pending\")\n this.scheduleResolve();\n }\n}\n\nexport { KeyframeResolver, flushKeyframeResolvers };\n//# sourceMappingURL=KeyframesResolver.mjs.map\n","function fillWildcards(keyframes) {\n for (let i = 1; i < keyframes.length; i++) {\n keyframes[i] ?? (keyframes[i] = keyframes[i - 1]);\n }\n}\n\nexport { fillWildcards };\n//# sourceMappingURL=fill-wildcards.mjs.map\n","import { isCSSVar } from './is-css-var.mjs';\n\nfunction setStyle(element, name, value) {\n isCSSVar(name)\n ? element.style.setProperty(name, value)\n : (element.style[name] = value);\n}\n\nexport { setStyle };\n//# sourceMappingURL=style-set.mjs.map\n","const isCSSVar = (name) => name.startsWith(\"--\");\n\nexport { isCSSVar };\n//# sourceMappingURL=is-css-var.mjs.map\n","/**\n * Add the ability for test suites to manually set support flags\n * to better test more environments.\n */\nconst supportsFlags = {};\n\nexport { supportsFlags };\n//# sourceMappingURL=flags.mjs.map\n","import { memo } from 'motion-utils';\nimport { supportsFlags } from './flags.mjs';\n\nfunction memoSupports(callback, supportsFlag) {\n const memoized = memo(callback);\n return () => supportsFlags[supportsFlag] ?? memoized();\n}\n\nexport { memoSupports };\n//# sourceMappingURL=memo.mjs.map\n","import { memoSupports } from './memo.mjs';\n\nconst supportsScrollTimeline = /* @__PURE__ */ memoSupports(() => window.ScrollTimeline !== undefined, \"scrollTimeline\");\nconst supportsViewTimeline = /* @__PURE__ */ memoSupports(() => window.ViewTimeline !== undefined, \"viewTimeline\");\n\nexport { supportsScrollTimeline, supportsViewTimeline };\n//# sourceMappingURL=scroll-timeline.mjs.map\n","import { memoSupports } from './memo.mjs';\n\nconst supportsLinearEasing = /*@__PURE__*/ memoSupports(() => {\n try {\n document\n .createElement(\"div\")\n .animate({ opacity: 0 }, { easing: \"linear(0, 1)\" });\n }\n catch (e) {\n return false;\n }\n return true;\n}, \"linearEasing\");\n\nexport { supportsLinearEasing };\n//# sourceMappingURL=linear-easing.mjs.map\n","const cubicBezierAsString = ([a, b, c, d]) => `cubic-bezier(${a}, ${b}, ${c}, ${d})`;\n\nexport { cubicBezierAsString };\n//# sourceMappingURL=cubic-bezier.mjs.map\n","import { cubicBezierAsString } from './cubic-bezier.mjs';\n\nconst supportedWaapiEasing = {\n linear: \"linear\",\n ease: \"ease\",\n easeIn: \"ease-in\",\n easeOut: \"ease-out\",\n easeInOut: \"ease-in-out\",\n circIn: /*@__PURE__*/ cubicBezierAsString([0, 0.65, 0.55, 1]),\n circOut: /*@__PURE__*/ cubicBezierAsString([0.55, 0, 1, 0.45]),\n backIn: /*@__PURE__*/ cubicBezierAsString([0.31, 0.01, 0.66, -0.59]),\n backOut: /*@__PURE__*/ cubicBezierAsString([0.33, 1.53, 0.69, 0.99]),\n};\n\nexport { supportedWaapiEasing };\n//# sourceMappingURL=supported.mjs.map\n","import { isBezierDefinition } from 'motion-utils';\nimport { supportsLinearEasing } from '../../../utils/supports/linear-easing.mjs';\nimport { generateLinearEasing } from '../utils/linear.mjs';\nimport { cubicBezierAsString } from './cubic-bezier.mjs';\nimport { supportedWaapiEasing } from './supported.mjs';\n\nfunction mapEasingToNativeEasing(easing, duration) {\n if (!easing) {\n return undefined;\n }\n else if (typeof easing === \"function\") {\n return supportsLinearEasing()\n ? generateLinearEasing(easing, duration)\n : \"ease-out\";\n }\n else if (isBezierDefinition(easing)) {\n return cubicBezierAsString(easing);\n }\n else if (Array.isArray(easing)) {\n return easing.map((segmentEasing) => mapEasingToNativeEasing(segmentEasing, duration) ||\n supportedWaapiEasing.easeOut);\n }\n else {\n return supportedWaapiEasing[easing];\n }\n}\n\nexport { mapEasingToNativeEasing };\n//# sourceMappingURL=map-easing.mjs.map\n","import { activeAnimations } from '../../stats/animation-count.mjs';\nimport { statsBuffer } from '../../stats/buffer.mjs';\nimport { mapEasingToNativeEasing } from './easing/map-easing.mjs';\n\nfunction startWaapiAnimation(element, valueName, keyframes, { delay = 0, duration = 300, repeat = 0, repeatType = \"loop\", ease = \"easeOut\", times, } = {}, pseudoElement = undefined) {\n const keyframeOptions = {\n [valueName]: keyframes,\n };\n if (times)\n keyframeOptions.offset = times;\n const easing = mapEasingToNativeEasing(ease, duration);\n /**\n * If this is an easing array, apply to keyframes, not animation as a whole\n */\n if (Array.isArray(easing))\n keyframeOptions.easing = easing;\n if (statsBuffer.value) {\n activeAnimations.waapi++;\n }\n const options = {\n delay,\n duration,\n easing: !Array.isArray(easing) ? easing : \"linear\",\n fill: \"both\",\n iterations: repeat + 1,\n direction: repeatType === \"reverse\" ? \"alternate\" : \"normal\",\n };\n if (pseudoElement)\n options.pseudoElement = pseudoElement;\n const animation = element.animate(keyframeOptions, options);\n if (statsBuffer.value) {\n animation.finished.finally(() => {\n activeAnimations.waapi--;\n });\n }\n return animation;\n}\n\nexport { startWaapiAnimation };\n//# sourceMappingURL=start-waapi-animation.mjs.map\n","function isGenerator(type) {\n return typeof type === \"function\" && \"applyToOptions\" in type;\n}\n\nexport { isGenerator };\n//# sourceMappingURL=is-generator.mjs.map\n","import { invariant, millisecondsToSeconds, secondsToMilliseconds, noop } from 'motion-utils';\nimport { setStyle } from '../render/dom/style-set.mjs';\nimport { supportsScrollTimeline } from '../utils/supports/scroll-timeline.mjs';\nimport { getFinalKeyframe } from './keyframes/get-final.mjs';\nimport { WithPromise } from './utils/WithPromise.mjs';\nimport { startWaapiAnimation } from './waapi/start-waapi-animation.mjs';\nimport { applyGeneratorOptions } from './waapi/utils/apply-generator.mjs';\n\n/**\n * NativeAnimation implements AnimationPlaybackControls for the browser's Web Animations API.\n */\nclass NativeAnimation extends WithPromise {\n constructor(options) {\n super();\n this.finishedTime = null;\n this.isStopped = false;\n /**\n * Tracks a manually-set start time that takes precedence over WAAPI's\n * dynamic startTime. This is cleared when play() or time setter is called,\n * allowing WAAPI to take over timing.\n */\n this.manualStartTime = null;\n if (!options)\n return;\n const { element, name, keyframes, pseudoElement, allowFlatten = false, finalKeyframe, onComplete, } = options;\n this.isPseudoElement = Boolean(pseudoElement);\n this.allowFlatten = allowFlatten;\n this.options = options;\n invariant(typeof options.type !== \"string\", `Mini animate() doesn't support \"type\" as a string.`, \"mini-spring\");\n const transition = applyGeneratorOptions(options);\n this.animation = startWaapiAnimation(element, name, keyframes, transition, pseudoElement);\n if (transition.autoplay === false) {\n this.animation.pause();\n }\n this.animation.onfinish = () => {\n this.finishedTime = this.time;\n if (!pseudoElement) {\n const keyframe = getFinalKeyframe(keyframes, this.options, finalKeyframe, this.speed);\n if (this.updateMotionValue) {\n this.updateMotionValue(keyframe);\n }\n /**\n * If we can, we want to commit the final style as set by the user,\n * rather than the computed keyframe value supplied by the animation.\n * We always do this, even when a motion value is present, to prevent\n * a visual flash in Firefox where the WAAPI animation's fill is removed\n * during cancel() before the scheduled render can apply the correct value.\n */\n setStyle(element, name, keyframe);\n this.animation.cancel();\n }\n onComplete?.();\n this.notifyFinished();\n };\n }\n play() {\n if (this.isStopped)\n return;\n this.manualStartTime = null;\n this.animation.play();\n if (this.state === \"finished\") {\n this.updateFinished();\n }\n }\n pause() {\n this.animation.pause();\n }\n complete() {\n this.animation.finish?.();\n }\n cancel() {\n try {\n this.animation.cancel();\n }\n catch (e) { }\n }\n stop() {\n if (this.isStopped)\n return;\n this.isStopped = true;\n const { state } = this;\n if (state === \"idle\" || state === \"finished\") {\n return;\n }\n if (this.updateMotionValue) {\n this.updateMotionValue();\n }\n else {\n this.commitStyles();\n }\n if (!this.isPseudoElement)\n this.cancel();\n }\n /**\n * WAAPI doesn't natively have any interruption capabilities.\n *\n * In this method, we commit styles back to the DOM before cancelling\n * the animation.\n *\n * This is designed to be overridden by NativeAnimationExtended, which\n * will create a renderless JS animation and sample it twice to calculate\n * its current value, \"previous\" value, and therefore allow\n * Motion to also correctly calculate velocity for any subsequent animation\n * while deferring the commit until the next animation frame.\n */\n commitStyles() {\n const element = this.options?.element;\n if (!this.isPseudoElement && element?.isConnected) {\n this.animation.commitStyles?.();\n }\n }\n get duration() {\n const duration = this.animation.effect?.getComputedTiming?.().duration || 0;\n return millisecondsToSeconds(Number(duration));\n }\n get iterationDuration() {\n const { delay = 0 } = this.options || {};\n return this.duration + millisecondsToSeconds(delay);\n }\n get time() {\n return millisecondsToSeconds(Number(this.animation.currentTime) || 0);\n }\n set time(newTime) {\n const wasFinished = this.finishedTime !== null;\n this.manualStartTime = null;\n this.finishedTime = null;\n this.animation.currentTime = secondsToMilliseconds(newTime);\n if (wasFinished) {\n this.animation.pause();\n }\n }\n /**\n * The playback speed of the animation.\n * 1 = normal speed, 2 = double speed, 0.5 = half speed.\n */\n get speed() {\n return this.animation.playbackRate;\n }\n set speed(newSpeed) {\n // Allow backwards playback after finishing\n if (newSpeed < 0)\n this.finishedTime = null;\n this.animation.playbackRate = newSpeed;\n }\n get state() {\n return this.finishedTime !== null\n ? \"finished\"\n : this.animation.playState;\n }\n get startTime() {\n return this.manualStartTime ?? Number(this.animation.startTime);\n }\n set startTime(newStartTime) {\n this.manualStartTime = this.animation.startTime = newStartTime;\n }\n /**\n * Attaches a timeline to the animation, for instance the `ScrollTimeline`.\n */\n attachTimeline({ timeline, rangeStart, rangeEnd, observe, }) {\n if (this.allowFlatten) {\n this.animation.effect?.updateTiming({ easing: \"linear\" });\n }\n this.animation.onfinish = null;\n if (timeline && supportsScrollTimeline()) {\n this.animation.timeline = timeline;\n if (rangeStart)\n this.animation.rangeStart = rangeStart;\n if (rangeEnd)\n this.animation.rangeEnd = rangeEnd;\n return noop;\n }\n else {\n return observe(this);\n }\n }\n}\n\nexport { NativeAnimation };\n//# sourceMappingURL=NativeAnimation.mjs.map\n","import { supportsLinearEasing } from '../../../utils/supports/linear-easing.mjs';\nimport { isGenerator } from '../../generators/utils/is-generator.mjs';\n\nfunction applyGeneratorOptions({ type, ...options }) {\n if (isGenerator(type) && supportsLinearEasing()) {\n return type.applyToOptions(options);\n }\n else {\n options.duration ?? (options.duration = 300);\n options.ease ?? (options.ease = \"easeOut\");\n }\n return options;\n}\n\nexport { applyGeneratorOptions };\n//# sourceMappingURL=apply-generator.mjs.map\n","import { circInOut, backInOut, anticipate } from 'motion-utils';\n\nconst unsupportedEasingFunctions = {\n anticipate,\n backInOut,\n circInOut,\n};\nfunction isUnsupportedEase(key) {\n return key in unsupportedEasingFunctions;\n}\nfunction replaceStringEasing(transition) {\n if (typeof transition.ease === \"string\" &&\n isUnsupportedEase(transition.ease)) {\n transition.ease = unsupportedEasingFunctions[transition.ease];\n }\n}\n\nexport { replaceStringEasing };\n//# sourceMappingURL=unsupported-easing.mjs.map\n","import { clamp } from 'motion-utils';\nimport { time } from '../frameloop/sync-time.mjs';\nimport { setStyle } from '../render/dom/style-set.mjs';\nimport { JSAnimation } from './JSAnimation.mjs';\nimport { NativeAnimation } from './NativeAnimation.mjs';\nimport { replaceTransitionType } from './utils/replace-transition-type.mjs';\nimport { replaceStringEasing } from './waapi/utils/unsupported-easing.mjs';\n\n/**\n * 10ms is chosen here as it strikes a balance between smooth\n * results (more than one keyframe per frame at 60fps) and\n * keyframe quantity.\n */\nconst sampleDelta = 10; //ms\nclass NativeAnimationExtended extends NativeAnimation {\n constructor(options) {\n /**\n * The base NativeAnimation function only supports a subset\n * of Motion easings, and WAAPI also only supports some\n * easing functions via string/cubic-bezier definitions.\n *\n * This function replaces those unsupported easing functions\n * with a JS easing function. This will later get compiled\n * to a linear() easing function.\n */\n replaceStringEasing(options);\n /**\n * Ensure we replace the transition type with a generator function\n * before passing to WAAPI.\n *\n * TODO: Does this have a better home? It could be shared with\n * JSAnimation.\n */\n replaceTransitionType(options);\n super(options);\n /**\n * Only set startTime when the animation should autoplay.\n * Setting startTime on a paused WAAPI animation unpauses it\n * (per the WAAPI spec), which breaks autoplay: false.\n */\n if (options.startTime !== undefined && options.autoplay !== false) {\n this.startTime = options.startTime;\n }\n this.options = options;\n }\n /**\n * WAAPI doesn't natively have any interruption capabilities.\n *\n * Rather than read committed styles back out of the DOM, we can\n * create a renderless JS animation and sample it twice to calculate\n * its current value, \"previous\" value, and therefore allow\n * Motion to calculate velocity for any subsequent animation.\n */\n updateMotionValue(value) {\n const { motionValue, onUpdate, onComplete, element, ...options } = this.options;\n if (!motionValue)\n return;\n if (value !== undefined) {\n motionValue.set(value);\n return;\n }\n const sampleAnimation = new JSAnimation({\n ...options,\n autoplay: false,\n });\n /**\n * Use wall-clock elapsed time for sampling.\n * Under CPU load, WAAPI's currentTime may not reflect actual\n * elapsed time, causing incorrect sampling and visual jumps.\n */\n const sampleTime = Math.max(sampleDelta, time.now() - this.startTime);\n const delta = clamp(0, sampleDelta, sampleTime - sampleDelta);\n const current = sampleAnimation.sample(sampleTime).value;\n /**\n * Write the estimated value to inline style so it persists\n * after cancel(), covering the async gap before the next\n * animation starts.\n */\n const { name } = this.options;\n if (element && name)\n setStyle(element, name, current);\n motionValue.setWithVelocity(sampleAnimation.sample(Math.max(0, sampleTime - delta)).value, current, delta);\n sampleAnimation.stop();\n }\n}\n\nexport { NativeAnimationExtended };\n//# sourceMappingURL=NativeAnimationExtended.mjs.map\n","import { complex } from '../../value/types/complex/index.mjs';\n\n/**\n * Check if a value is animatable. Examples:\n *\n * ✅: 100, \"100px\", \"#fff\"\n * ❌: \"block\", \"url(2.jpg)\"\n * @param value\n *\n * @internal\n */\nconst isAnimatable = (value, name) => {\n // If the list of keys that might be non-animatable grows, replace with Set\n if (name === \"zIndex\")\n return false;\n // If it's a number or a keyframes array, we can animate it. We might at some point\n // need to do a deep isAnimatable check of keyframes, or let Popmotion handle this,\n // but for now lets leave it like this for performance reasons\n if (typeof value === \"number\" || Array.isArray(value))\n return true;\n if (typeof value === \"string\" && // It's animatable if we have a string\n (complex.test(value) || value === \"0\") && // And it contains numbers and/or colors\n !value.startsWith(\"url(\") // Unless it starts with \"url(\"\n ) {\n return true;\n }\n return false;\n};\n\nexport { isAnimatable };\n//# sourceMappingURL=is-animatable.mjs.map\n","function makeAnimationInstant(options) {\n options.duration = 0;\n options.type = \"keyframes\";\n}\n\nexport { makeAnimationInstant };\n//# sourceMappingURL=make-animation-instant.mjs.map\n","/**\n * A list of values that can be hardware-accelerated.\n */\nconst acceleratedValues = new Set([\n \"opacity\",\n \"clipPath\",\n \"filter\",\n \"transform\",\n // TODO: Can be accelerated but currently disabled until https://issues.chromium.org/issues/41491098 is resolved\n // or until we implement support for linear() easing.\n // \"background-color\"\n]);\n\nexport { acceleratedValues };\n//# sourceMappingURL=accelerated-values.mjs.map\n","const browserColorFunctions = /^(?:oklch|oklab|lab|lch|color|color-mix|light-dark)\\(/;\nfunction hasBrowserOnlyColors(keyframes) {\n for (let i = 0; i < keyframes.length; i++) {\n if (typeof keyframes[i] === \"string\" &&\n browserColorFunctions.test(keyframes[i])) {\n return true;\n }\n }\n return false;\n}\n\nexport { hasBrowserOnlyColors };\n//# sourceMappingURL=is-browser-color.mjs.map\n","import { memo } from 'motion-utils';\nimport { acceleratedValues } from '../utils/accelerated-values.mjs';\nimport { hasBrowserOnlyColors } from '../utils/is-browser-color.mjs';\n\nconst colorProperties = new Set([\n \"color\",\n \"backgroundColor\",\n \"outlineColor\",\n \"fill\",\n \"stroke\",\n \"borderColor\",\n \"borderTopColor\",\n \"borderRightColor\",\n \"borderBottomColor\",\n \"borderLeftColor\",\n]);\nconst supportsWaapi = /*@__PURE__*/ memo(() => Object.hasOwnProperty.call(Element.prototype, \"animate\"));\nfunction supportsBrowserAnimation(options) {\n const { motionValue, name, repeatDelay, repeatType, damping, type, keyframes, } = options;\n const subject = motionValue?.owner?.current;\n /**\n * We use this check instead of isHTMLElement() because we explicitly\n * **don't** want elements in different timing contexts (i.e. popups)\n * to be accelerated, as it's not possible to sync these animations\n * properly with those driven from the main window frameloop.\n */\n if (!(subject instanceof HTMLElement)) {\n return false;\n }\n const { onUpdate, transformTemplate } = motionValue.owner.getProps();\n return (supportsWaapi() &&\n name &&\n /**\n * Force WAAPI for color properties with browser-only color formats\n * (oklch, oklab, lab, lch, etc.) that the JS animation path can't parse.\n */\n (acceleratedValues.has(name) ||\n (colorProperties.has(name) &&\n hasBrowserOnlyColors(keyframes))) &&\n (name !== \"transform\" || !transformTemplate) &&\n /**\n * If we're outputting values to onUpdate then we can't use WAAPI as there's\n * no way to read the value from WAAPI every frame.\n */\n !onUpdate &&\n !repeatDelay &&\n repeatType !== \"mirror\" &&\n damping !== 0 &&\n type !== \"inertia\");\n}\n\nexport { supportsBrowserAnimation };\n//# sourceMappingURL=waapi.mjs.map\n","import { MotionGlobalConfig, noop } from 'motion-utils';\nimport { time } from '../frameloop/sync-time.mjs';\nimport { JSAnimation } from './JSAnimation.mjs';\nimport { getFinalKeyframe } from './keyframes/get-final.mjs';\nimport { KeyframeResolver, flushKeyframeResolvers } from './keyframes/KeyframesResolver.mjs';\nimport { NativeAnimationExtended } from './NativeAnimationExtended.mjs';\nimport { canAnimate } from './utils/can-animate.mjs';\nimport { makeAnimationInstant } from './utils/make-animation-instant.mjs';\nimport { WithPromise } from './utils/WithPromise.mjs';\nimport { supportsBrowserAnimation } from './waapi/supports/waapi.mjs';\n\n/**\n * Maximum time allowed between an animation being created and it being\n * resolved for us to use the latter as the start time.\n *\n * This is to ensure that while we prefer to \"start\" an animation as soon\n * as it's triggered, we also want to avoid a visual jump if there's a big delay\n * between these two moments.\n */\nconst MAX_RESOLVE_DELAY = 40;\nclass AsyncMotionValueAnimation extends WithPromise {\n constructor({ autoplay = true, delay = 0, type = \"keyframes\", repeat = 0, repeatDelay = 0, repeatType = \"loop\", keyframes, name, motionValue, element, ...options }) {\n super();\n /**\n * Bound to support return animation.stop pattern\n */\n this.stop = () => {\n if (this._animation) {\n this._animation.stop();\n this.stopTimeline?.();\n }\n this.keyframeResolver?.cancel();\n };\n this.createdAt = time.now();\n const optionsWithDefaults = {\n autoplay,\n delay,\n type,\n repeat,\n repeatDelay,\n repeatType,\n name,\n motionValue,\n element,\n ...options,\n };\n const KeyframeResolver$1 = element?.KeyframeResolver || KeyframeResolver;\n this.keyframeResolver = new KeyframeResolver$1(keyframes, (resolvedKeyframes, finalKeyframe, forced) => this.onKeyframesResolved(resolvedKeyframes, finalKeyframe, optionsWithDefaults, !forced), name, motionValue, element);\n this.keyframeResolver?.scheduleResolve();\n }\n onKeyframesResolved(keyframes, finalKeyframe, options, sync) {\n this.keyframeResolver = undefined;\n const { name, type, velocity, delay, isHandoff, onUpdate } = options;\n this.resolvedAt = time.now();\n /**\n * If we can't animate this value with the resolved keyframes\n * then we should complete it immediately.\n */\n let canAnimateValue = true;\n if (!canAnimate(keyframes, name, type, velocity)) {\n canAnimateValue = false;\n if (MotionGlobalConfig.instantAnimations || !delay) {\n onUpdate?.(getFinalKeyframe(keyframes, options, finalKeyframe));\n }\n keyframes[0] = keyframes[keyframes.length - 1];\n makeAnimationInstant(options);\n options.repeat = 0;\n }\n /**\n * Resolve startTime for the animation.\n *\n * This method uses the createdAt and resolvedAt to calculate the\n * animation startTime. *Ideally*, we would use the createdAt time as t=0\n * as the following frame would then be the first frame of the animation in\n * progress, which would feel snappier.\n *\n * However, if there's a delay (main thread work) between the creation of\n * the animation and the first committed frame, we prefer to use resolvedAt\n * to avoid a sudden jump into the animation.\n */\n const startTime = sync\n ? !this.resolvedAt\n ? this.createdAt\n : this.resolvedAt - this.createdAt > MAX_RESOLVE_DELAY\n ? this.resolvedAt\n : this.createdAt\n : undefined;\n const resolvedOptions = {\n startTime,\n finalKeyframe,\n ...options,\n keyframes,\n };\n /**\n * Animate via WAAPI if possible. If this is a handoff animation, the optimised animation will be running via\n * WAAPI. Therefore, this animation must be JS to ensure it runs \"under\" the\n * optimised animation.\n *\n * Also skip WAAPI when keyframes aren't animatable, as the resolved\n * values may not be valid CSS and would trigger browser warnings.\n */\n const useWaapi = canAnimateValue &&\n !isHandoff &&\n supportsBrowserAnimation(resolvedOptions);\n const element = resolvedOptions.motionValue?.owner?.current;\n let animation;\n if (useWaapi) {\n try {\n animation = new NativeAnimationExtended({\n ...resolvedOptions,\n element,\n });\n }\n catch {\n animation = new JSAnimation(resolvedOptions);\n }\n }\n else {\n animation = new JSAnimation(resolvedOptions);\n }\n animation.finished.then(() => {\n this.notifyFinished();\n }).catch(noop);\n if (this.pendingTimeline) {\n this.stopTimeline = animation.attachTimeline(this.pendingTimeline);\n this.pendingTimeline = undefined;\n }\n this._animation = animation;\n }\n get finished() {\n if (!this._animation) {\n return this._finished;\n }\n else {\n return this.animation.finished;\n }\n }\n then(onResolve, _onReject) {\n return this.finished.finally(onResolve).then(() => { });\n }\n get animation() {\n if (!this._animation) {\n this.keyframeResolver?.resume();\n flushKeyframeResolvers();\n }\n return this._animation;\n }\n get duration() {\n return this.animation.duration;\n }\n get iterationDuration() {\n return this.animation.iterationDuration;\n }\n get time() {\n return this.animation.time;\n }\n set time(newTime) {\n this.animation.time = newTime;\n }\n get speed() {\n return this.animation.speed;\n }\n get state() {\n return this.animation.state;\n }\n set speed(newSpeed) {\n this.animation.speed = newSpeed;\n }\n get startTime() {\n return this.animation.startTime;\n }\n attachTimeline(timeline) {\n if (this._animation) {\n this.stopTimeline = this.animation.attachTimeline(timeline);\n }\n else {\n this.pendingTimeline = timeline;\n }\n return () => this.stop();\n }\n play() {\n this.animation.play();\n }\n pause() {\n this.animation.pause();\n }\n complete() {\n this.animation.complete();\n }\n cancel() {\n if (this._animation) {\n this.animation.cancel();\n }\n this.keyframeResolver?.cancel();\n }\n}\n\nexport { AsyncMotionValueAnimation };\n//# sourceMappingURL=AsyncMotionValueAnimation.mjs.map\n","import { warning } from 'motion-utils';\nimport { isGenerator } from '../generators/utils/is-generator.mjs';\nimport { isAnimatable } from './is-animatable.mjs';\n\nfunction hasKeyframesChanged(keyframes) {\n const current = keyframes[0];\n if (keyframes.length === 1)\n return true;\n for (let i = 0; i < keyframes.length; i++) {\n if (keyframes[i] !== current)\n return true;\n }\n}\nfunction canAnimate(keyframes, name, type, velocity) {\n /**\n * Check if we're able to animate between the start and end keyframes,\n * and throw a warning if we're attempting to animate between one that's\n * animatable and another that isn't.\n */\n const originKeyframe = keyframes[0];\n if (originKeyframe === null) {\n return false;\n }\n /**\n * These aren't traditionally animatable but we do support them.\n * In future we could look into making this more generic or replacing\n * this function with mix() === mixImmediate\n */\n if (name === \"display\" || name === \"visibility\")\n return true;\n const targetKeyframe = keyframes[keyframes.length - 1];\n const isOriginAnimatable = isAnimatable(originKeyframe, name);\n const isTargetAnimatable = isAnimatable(targetKeyframe, name);\n warning(isOriginAnimatable === isTargetAnimatable, `You are trying to animate ${name} from \"${originKeyframe}\" to \"${targetKeyframe}\". \"${isOriginAnimatable ? targetKeyframe : originKeyframe}\" is not an animatable value.`, \"value-not-animatable\");\n // Always skip if any of these are true\n if (!isOriginAnimatable || !isTargetAnimatable) {\n return false;\n }\n return (hasKeyframesChanged(keyframes) ||\n ((type === \"spring\" || isGenerator(type)) && velocity));\n}\n\nexport { canAnimate };\n//# sourceMappingURL=can-animate.mjs.map\n","function calcChildStagger(children, child, delayChildren, staggerChildren = 0, staggerDirection = 1) {\n const index = Array.from(children)\n .sort((a, b) => a.sortNodePosition(b))\n .indexOf(child);\n const numChildren = children.size;\n const maxStaggerDuration = (numChildren - 1) * staggerChildren;\n const delayIsFunction = typeof delayChildren === \"function\";\n return delayIsFunction\n ? delayChildren(index, numChildren)\n : staggerDirection === 1\n ? index * staggerChildren\n : maxStaggerDuration - index * staggerChildren;\n}\n\nexport { calcChildStagger };\n//# sourceMappingURL=calc-child-stagger.mjs.map\n","import { warnOnce, SubscriptionManager, velocityPerSecond } from 'motion-utils';\nimport { time } from '../frameloop/sync-time.mjs';\nimport { frame } from '../frameloop/frame.mjs';\n\n/**\n * Maximum time between the value of two frames, beyond which we\n * assume the velocity has since been 0.\n */\nconst MAX_VELOCITY_DELTA = 30;\nconst isFloat = (value) => {\n return !isNaN(parseFloat(value));\n};\nconst collectMotionValues = {\n current: undefined,\n};\n/**\n * `MotionValue` is used to track the state and velocity of motion values.\n *\n * @public\n */\nclass MotionValue {\n /**\n * @param init - The initiating value\n * @param config - Optional configuration options\n *\n * - `transformer`: A function to transform incoming values with.\n */\n constructor(init, options = {}) {\n /**\n * Tracks whether this value can output a velocity. Currently this is only true\n * if the value is numerical, but we might be able to widen the scope here and support\n * other value types.\n *\n * @internal\n */\n this.canTrackVelocity = null;\n /**\n * An object containing a SubscriptionManager for each active event.\n */\n this.events = {};\n this.updateAndNotify = (v) => {\n const currentTime = time.now();\n /**\n * If we're updating the value during another frame or eventloop\n * than the previous frame, then the we set the previous frame value\n * to current.\n */\n if (this.updatedAt !== currentTime) {\n this.setPrevFrameValue();\n }\n this.prev = this.current;\n this.setCurrent(v);\n // Update update subscribers\n if (this.current !== this.prev) {\n this.events.change?.notify(this.current);\n if (this.dependents) {\n for (const dependent of this.dependents) {\n dependent.dirty();\n }\n }\n }\n };\n this.hasAnimated = false;\n this.setCurrent(init);\n this.owner = options.owner;\n }\n setCurrent(current) {\n this.current = current;\n this.updatedAt = time.now();\n if (this.canTrackVelocity === null && current !== undefined) {\n this.canTrackVelocity = isFloat(this.current);\n }\n }\n setPrevFrameValue(prevFrameValue = this.current) {\n this.prevFrameValue = prevFrameValue;\n this.prevUpdatedAt = this.updatedAt;\n }\n /**\n * Adds a function that will be notified when the `MotionValue` is updated.\n *\n * It returns a function that, when called, will cancel the subscription.\n *\n * When calling `onChange` inside a React component, it should be wrapped with the\n * `useEffect` hook. As it returns an unsubscribe function, this should be returned\n * from the `useEffect` function to ensure you don't add duplicate subscribers..\n *\n * ```jsx\n * export const MyComponent = () => {\n * const x = useMotionValue(0)\n * const y = useMotionValue(0)\n * const opacity = useMotionValue(1)\n *\n * useEffect(() => {\n * function updateOpacity() {\n * const maxXY = Math.max(x.get(), y.get())\n * const newOpacity = transform(maxXY, [0, 100], [1, 0])\n * opacity.set(newOpacity)\n * }\n *\n * const unsubscribeX = x.on(\"change\", updateOpacity)\n * const unsubscribeY = y.on(\"change\", updateOpacity)\n *\n * return () => {\n * unsubscribeX()\n * unsubscribeY()\n * }\n * }, [])\n *\n * return \n * }\n * ```\n *\n * @param subscriber - A function that receives the latest value.\n * @returns A function that, when called, will cancel this subscription.\n *\n * @deprecated\n */\n onChange(subscription) {\n if (process.env.NODE_ENV !== \"production\") {\n warnOnce(false, `value.onChange(callback) is deprecated. Switch to value.on(\"change\", callback).`);\n }\n return this.on(\"change\", subscription);\n }\n on(eventName, callback) {\n if (!this.events[eventName]) {\n this.events[eventName] = new SubscriptionManager();\n }\n const unsubscribe = this.events[eventName].add(callback);\n if (eventName === \"change\") {\n return () => {\n unsubscribe();\n /**\n * If we have no more change listeners by the start\n * of the next frame, stop active animations.\n */\n frame.read(() => {\n if (!this.events.change.getSize()) {\n this.stop();\n }\n });\n };\n }\n return unsubscribe;\n }\n clearListeners() {\n for (const eventManagers in this.events) {\n this.events[eventManagers].clear();\n }\n }\n /**\n * Attaches a passive effect to the `MotionValue`.\n */\n attach(passiveEffect, stopPassiveEffect) {\n this.passiveEffect = passiveEffect;\n this.stopPassiveEffect = stopPassiveEffect;\n }\n /**\n * Sets the state of the `MotionValue`.\n *\n * @remarks\n *\n * ```jsx\n * const x = useMotionValue(0)\n * x.set(10)\n * ```\n *\n * @param latest - Latest value to set.\n * @param render - Whether to notify render subscribers. Defaults to `true`\n *\n * @public\n */\n set(v) {\n if (!this.passiveEffect) {\n this.updateAndNotify(v);\n }\n else {\n this.passiveEffect(v, this.updateAndNotify);\n }\n }\n setWithVelocity(prev, current, delta) {\n this.set(current);\n this.prev = undefined;\n this.prevFrameValue = prev;\n this.prevUpdatedAt = this.updatedAt - delta;\n }\n /**\n * Set the state of the `MotionValue`, stopping any active animations,\n * effects, and resets velocity to `0`.\n */\n jump(v, endAnimation = true) {\n this.updateAndNotify(v);\n this.prev = v;\n this.prevUpdatedAt = this.prevFrameValue = undefined;\n endAnimation && this.stop();\n if (this.stopPassiveEffect)\n this.stopPassiveEffect();\n }\n dirty() {\n this.events.change?.notify(this.current);\n }\n addDependent(dependent) {\n if (!this.dependents) {\n this.dependents = new Set();\n }\n this.dependents.add(dependent);\n }\n removeDependent(dependent) {\n if (this.dependents) {\n this.dependents.delete(dependent);\n }\n }\n /**\n * Returns the latest state of `MotionValue`\n *\n * @returns - The latest state of `MotionValue`\n *\n * @public\n */\n get() {\n if (collectMotionValues.current) {\n collectMotionValues.current.push(this);\n }\n return this.current;\n }\n /**\n * @public\n */\n getPrevious() {\n return this.prev;\n }\n /**\n * Returns the latest velocity of `MotionValue`\n *\n * @returns - The latest velocity of `MotionValue`. Returns `0` if the state is non-numerical.\n *\n * @public\n */\n getVelocity() {\n const currentTime = time.now();\n if (!this.canTrackVelocity ||\n this.prevFrameValue === undefined ||\n currentTime - this.updatedAt > MAX_VELOCITY_DELTA) {\n return 0;\n }\n const delta = Math.min(this.updatedAt - this.prevUpdatedAt, MAX_VELOCITY_DELTA);\n // Casts because of parseFloat's poor typing\n return velocityPerSecond(parseFloat(this.current) -\n parseFloat(this.prevFrameValue), delta);\n }\n /**\n * Registers a new animation to control this `MotionValue`. Only one\n * animation can drive a `MotionValue` at one time.\n *\n * ```jsx\n * value.start()\n * ```\n *\n * @param animation - A function that starts the provided animation\n */\n start(startAnimation) {\n this.stop();\n return new Promise((resolve) => {\n this.hasAnimated = true;\n this.animation = startAnimation(resolve);\n if (this.events.animationStart) {\n this.events.animationStart.notify();\n }\n }).then(() => {\n if (this.events.animationComplete) {\n this.events.animationComplete.notify();\n }\n this.clearAnimation();\n });\n }\n /**\n * Stop the currently active animation.\n *\n * @public\n */\n stop() {\n if (this.animation) {\n this.animation.stop();\n if (this.events.animationCancel) {\n this.events.animationCancel.notify();\n }\n }\n this.clearAnimation();\n }\n /**\n * Returns `true` if this value is currently animating.\n *\n * @public\n */\n isAnimating() {\n return !!this.animation;\n }\n clearAnimation() {\n delete this.animation;\n }\n /**\n * Destroy and clean up subscribers to this `MotionValue`.\n *\n * The `MotionValue` hooks like `useMotionValue` and `useTransform` automatically\n * handle the lifecycle of the returned `MotionValue`, so this method is only necessary if you've manually\n * created a `MotionValue` via the `motionValue` function.\n *\n * @public\n */\n destroy() {\n this.dependents?.clear();\n this.events.destroy?.notify();\n this.clearListeners();\n this.stop();\n if (this.stopPassiveEffect) {\n this.stopPassiveEffect();\n }\n }\n}\nfunction motionValue(init, options) {\n return new MotionValue(init, options);\n}\n\nexport { MotionValue, collectMotionValues, motionValue };\n//# sourceMappingURL=index.mjs.map\n","/**\n * If `transition` has `inherit: true`, shallow-merge it with\n * `parentTransition` (child keys win) and strip the `inherit` key.\n * Otherwise return `transition` unchanged.\n */\nfunction resolveTransition(transition, parentTransition) {\n if (transition?.inherit && parentTransition) {\n const { inherit: _, ...rest } = transition;\n return { ...parentTransition, ...rest };\n }\n return transition;\n}\n\nexport { resolveTransition };\n//# sourceMappingURL=resolve-transition.mjs.map\n","import { resolveTransition } from './resolve-transition.mjs';\n\nfunction getValueTransition(transition, key) {\n const valueTransition = transition?.[key] ??\n transition?.[\"default\"] ??\n transition;\n if (valueTransition !== transition) {\n return resolveTransition(valueTransition, transition);\n }\n return valueTransition;\n}\n\nexport { getValueTransition };\n//# sourceMappingURL=get-value-transition.mjs.map\n","import { transformProps } from '../../render/utils/keys-transform.mjs';\n\nconst underDampedSpring = {\n type: \"spring\",\n stiffness: 500,\n damping: 25,\n restSpeed: 10,\n};\nconst criticallyDampedSpring = (target) => ({\n type: \"spring\",\n stiffness: 550,\n damping: target === 0 ? 2 * Math.sqrt(550) : 30,\n restSpeed: 10,\n});\nconst keyframesTransition = {\n type: \"keyframes\",\n duration: 0.8,\n};\n/**\n * Default easing curve is a slightly shallower version of\n * the default browser easing curve.\n */\nconst ease = {\n type: \"keyframes\",\n ease: [0.25, 0.1, 0.35, 1],\n duration: 0.3,\n};\nconst getDefaultTransition = (valueKey, { keyframes }) => {\n if (keyframes.length > 2) {\n return keyframesTransition;\n }\n else if (transformProps.has(valueKey)) {\n return valueKey.startsWith(\"scale\")\n ? criticallyDampedSpring(keyframes[1])\n : underDampedSpring;\n }\n return ease;\n};\n\nexport { getDefaultTransition };\n//# sourceMappingURL=default-transitions.mjs.map\n","const orchestrationKeys = new Set([\n \"when\",\n \"delay\",\n \"delayChildren\",\n \"staggerChildren\",\n \"staggerDirection\",\n \"repeat\",\n \"repeatType\",\n \"repeatDelay\",\n \"from\",\n \"elapsed\",\n]);\n/**\n * Decide whether a transition is defined on a given Transition.\n * This filters out orchestration options and returns true\n * if any options are left.\n */\nfunction isTransitionDefined(transition) {\n for (const key in transition) {\n if (!orchestrationKeys.has(key))\n return true;\n }\n return false;\n}\n\nexport { isTransitionDefined };\n//# sourceMappingURL=is-transition-defined.mjs.map\n","import { secondsToMilliseconds, MotionGlobalConfig } from 'motion-utils';\nimport { AsyncMotionValueAnimation } from '../AsyncMotionValueAnimation.mjs';\nimport { JSAnimation } from '../JSAnimation.mjs';\nimport { getValueTransition } from '../utils/get-value-transition.mjs';\nimport { makeAnimationInstant } from '../utils/make-animation-instant.mjs';\nimport { getDefaultTransition } from '../utils/default-transitions.mjs';\nimport { getFinalKeyframe } from '../keyframes/get-final.mjs';\nimport { isTransitionDefined } from '../utils/is-transition-defined.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst animateMotionValue = (name, value, target, transition = {}, element, isHandoff) => (onComplete) => {\n const valueTransition = getValueTransition(transition, name) || {};\n /**\n * Most transition values are currently completely overwritten by value-specific\n * transitions. In the future it'd be nicer to blend these transitions. But for now\n * delay actually does inherit from the root transition if not value-specific.\n */\n const delay = valueTransition.delay || transition.delay || 0;\n /**\n * Elapsed isn't a public transition option but can be passed through from\n * optimized appear effects in milliseconds.\n */\n let { elapsed = 0 } = transition;\n elapsed = elapsed - secondsToMilliseconds(delay);\n const options = {\n keyframes: Array.isArray(target) ? target : [null, target],\n ease: \"easeOut\",\n velocity: value.getVelocity(),\n ...valueTransition,\n delay: -elapsed,\n onUpdate: (v) => {\n value.set(v);\n valueTransition.onUpdate && valueTransition.onUpdate(v);\n },\n onComplete: () => {\n onComplete();\n valueTransition.onComplete && valueTransition.onComplete();\n },\n name,\n motionValue: value,\n element: isHandoff ? undefined : element,\n };\n /**\n * If there's no transition defined for this value, we can generate\n * unique transition settings for this value.\n */\n if (!isTransitionDefined(valueTransition)) {\n Object.assign(options, getDefaultTransition(name, options));\n }\n /**\n * Both WAAPI and our internal animation functions use durations\n * as defined by milliseconds, while our external API defines them\n * as seconds.\n */\n options.duration && (options.duration = secondsToMilliseconds(options.duration));\n options.repeatDelay && (options.repeatDelay = secondsToMilliseconds(options.repeatDelay));\n /**\n * Support deprecated way to set initial value. Prefer keyframe syntax.\n */\n if (options.from !== undefined) {\n options.keyframes[0] = options.from;\n }\n let shouldSkip = false;\n if (options.type === false ||\n (options.duration === 0 && !options.repeatDelay)) {\n makeAnimationInstant(options);\n if (options.delay === 0) {\n shouldSkip = true;\n }\n }\n if (MotionGlobalConfig.instantAnimations ||\n MotionGlobalConfig.skipAnimations ||\n element?.shouldSkipAnimations ||\n valueTransition.skipAnimations) {\n shouldSkip = true;\n makeAnimationInstant(options);\n options.delay = 0;\n }\n /**\n * If the transition type or easing has been explicitly set by the user\n * then we don't want to allow flattening the animation.\n */\n options.allowFlatten = !valueTransition.type && !valueTransition.ease;\n /**\n * If we can or must skip creating the animation, and apply only\n * the final keyframe, do so. We also check once keyframes are resolved but\n * this early check prevents the need to create an animation at all.\n */\n if (shouldSkip && !isHandoff && value.get() !== undefined) {\n const finalKeyframe = getFinalKeyframe(options.keyframes, valueTransition);\n if (finalKeyframe !== undefined) {\n frame.update(() => {\n options.onUpdate(finalKeyframe);\n options.onComplete();\n });\n return;\n }\n }\n return valueTransition.isSync\n ? new JSAnimation(options)\n : new AsyncMotionValueAnimation(options);\n};\n\nexport { animateMotionValue };\n//# sourceMappingURL=motion-value.mjs.map\n","import { invariant, isNumericalString } from 'motion-utils';\nimport { isCSSVariableToken } from './is-css-variable.mjs';\n\n/**\n * Parse Framer's special CSS variable format into a CSS token and a fallback.\n *\n * ```\n * `var(--foo, #fff)` => [`--foo`, '#fff']\n * ```\n *\n * @param current\n */\nconst splitCSSVariableRegex = \n// eslint-disable-next-line redos-detector/no-unsafe-regex -- false positive, as it can match a lot of words\n/^var\\(--(?:([\\w-]+)|([\\w-]+), ?([a-zA-Z\\d ()%#.,-]+))\\)/u;\nfunction parseCSSVariable(current) {\n const match = splitCSSVariableRegex.exec(current);\n if (!match)\n return [,];\n const [, token1, token2, fallback] = match;\n return [`--${token1 ?? token2}`, fallback];\n}\nconst maxDepth = 4;\nfunction getVariableValue(current, element, depth = 1) {\n invariant(depth <= maxDepth, `Max CSS variable fallback depth detected in property \"${current}\". This may indicate a circular fallback dependency.`, \"max-css-var-depth\");\n const [token, fallback] = parseCSSVariable(current);\n // No CSS variable detected\n if (!token)\n return;\n // Attempt to read this CSS variable off the element\n const resolved = window.getComputedStyle(element).getPropertyValue(token);\n if (resolved) {\n const trimmed = resolved.trim();\n return isNumericalString(trimmed) ? parseFloat(trimmed) : trimmed;\n }\n return isCSSVariableToken(fallback)\n ? getVariableValue(fallback, element, depth + 1)\n : fallback;\n}\n\nexport { getVariableValue, parseCSSVariable };\n//# sourceMappingURL=css-variables-conversion.mjs.map\n","function getValueState(visualElement) {\n const state = [{}, {}];\n visualElement?.values.forEach((value, key) => {\n state[0][key] = value.get();\n state[1][key] = value.getVelocity();\n });\n return state;\n}\nfunction resolveVariantFromProps(props, definition, custom, visualElement) {\n /**\n * If the variant definition is a function, resolve.\n */\n if (typeof definition === \"function\") {\n const [current, velocity] = getValueState(visualElement);\n definition = definition(custom !== undefined ? custom : props.custom, current, velocity);\n }\n /**\n * If the variant definition is a variant label, or\n * the function returned a variant label, resolve.\n */\n if (typeof definition === \"string\") {\n definition = props.variants && props.variants[definition];\n }\n /**\n * At this point we've resolved both functions and variant labels,\n * but the resolved variant label might itself have been a function.\n * If so, resolve. This can only have returned a valid target object.\n */\n if (typeof definition === \"function\") {\n const [current, velocity] = getValueState(visualElement);\n definition = definition(custom !== undefined ? custom : props.custom, current, velocity);\n }\n return definition;\n}\n\nexport { resolveVariantFromProps };\n//# sourceMappingURL=resolve-variants.mjs.map\n","import { resolveVariantFromProps } from './resolve-variants.mjs';\n\nfunction resolveVariant(visualElement, definition, custom) {\n const props = visualElement.getProps();\n return resolveVariantFromProps(props, definition, custom !== undefined ? custom : props.custom, visualElement);\n}\n\nexport { resolveVariant };\n//# sourceMappingURL=resolve-dynamic-variants.mjs.map\n","import { transformPropOrder } from './keys-transform.mjs';\n\nconst positionalKeys = new Set([\n \"width\",\n \"height\",\n \"top\",\n \"left\",\n \"right\",\n \"bottom\",\n ...transformPropOrder,\n]);\n\nexport { positionalKeys };\n//# sourceMappingURL=keys-position.mjs.map\n","const isKeyframesTarget = (v) => {\n return Array.isArray(v);\n};\n\nexport { isKeyframesTarget };\n//# sourceMappingURL=is-keyframes-target.mjs.map\n","import { motionValue } from '../../value/index.mjs';\nimport { resolveVariant } from './resolve-dynamic-variants.mjs';\nimport { isKeyframesTarget } from './is-keyframes-target.mjs';\n\n/**\n * Set VisualElement's MotionValue, creating a new MotionValue for it if\n * it doesn't exist.\n */\nfunction setMotionValue(visualElement, key, value) {\n if (visualElement.hasValue(key)) {\n visualElement.getValue(key).set(value);\n }\n else {\n visualElement.addValue(key, motionValue(value));\n }\n}\nfunction resolveFinalValueInKeyframes(v) {\n // TODO maybe throw if v.length - 1 is placeholder token?\n return isKeyframesTarget(v) ? v[v.length - 1] || 0 : v;\n}\nfunction setTarget(visualElement, definition) {\n const resolved = resolveVariant(visualElement, definition);\n let { transitionEnd = {}, transition = {}, ...target } = resolved || {};\n target = { ...target, ...transitionEnd };\n for (const key in target) {\n const value = resolveFinalValueInKeyframes(target[key]);\n setMotionValue(visualElement, key, value);\n }\n}\n\nexport { setTarget };\n//# sourceMappingURL=setters.mjs.map\n","const isMotionValue = (value) => Boolean(value && value.getVelocity);\n\nexport { isMotionValue };\n//# sourceMappingURL=is-motion-value.mjs.map\n","import { MotionGlobalConfig } from 'motion-utils';\nimport { isWillChangeMotionValue } from './is.mjs';\n\nfunction addValueToWillChange(visualElement, key) {\n const willChange = visualElement.getValue(\"willChange\");\n /**\n * It could be that a user has set willChange to a regular MotionValue,\n * in which case we can't add the value to it.\n */\n if (isWillChangeMotionValue(willChange)) {\n return willChange.add(key);\n }\n else if (!willChange && MotionGlobalConfig.WillChange) {\n const newWillChange = new MotionGlobalConfig.WillChange(\"auto\");\n visualElement.addValue(\"willChange\", newWillChange);\n newWillChange.add(key);\n }\n}\n\nexport { addValueToWillChange };\n//# sourceMappingURL=add-will-change.mjs.map\n","import { isMotionValue } from '../utils/is-motion-value.mjs';\n\nfunction isWillChangeMotionValue(value) {\n return Boolean(isMotionValue(value) && value.add);\n}\n\nexport { isWillChangeMotionValue };\n//# sourceMappingURL=is.mjs.map\n","function camelToDash(str) {\n return str.replace(/([A-Z])/g, (match) => `-${match.toLowerCase()}`);\n}\n\nexport { camelToDash };\n//# sourceMappingURL=camel-to-dash.mjs.map\n","import { camelToDash } from '../../render/dom/utils/camel-to-dash.mjs';\n\nconst optimizedAppearDataId = \"framerAppearId\";\nconst optimizedAppearDataAttribute = \"data-\" + camelToDash(optimizedAppearDataId);\n\nexport { optimizedAppearDataAttribute, optimizedAppearDataId };\n//# sourceMappingURL=data-id.mjs.map\n","import { optimizedAppearDataAttribute } from './data-id.mjs';\n\nfunction getOptimisedAppearId(visualElement) {\n return visualElement.props[optimizedAppearDataAttribute];\n}\n\nexport { getOptimisedAppearId };\n//# sourceMappingURL=get-appear-id.mjs.map\n","import { getValueTransition } from '../utils/get-value-transition.mjs';\nimport { resolveTransition } from '../utils/resolve-transition.mjs';\nimport { positionalKeys } from '../../render/utils/keys-position.mjs';\nimport { setTarget } from '../../render/utils/setters.mjs';\nimport { addValueToWillChange } from '../../value/will-change/add-will-change.mjs';\nimport { getOptimisedAppearId } from '../optimized-appear/get-appear-id.mjs';\nimport { animateMotionValue } from './motion-value.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\n/**\n * Decide whether we should block this animation. Previously, we achieved this\n * just by checking whether the key was listed in protectedKeys, but this\n * posed problems if an animation was triggered by afterChildren and protectedKeys\n * had been set to true in the meantime.\n */\nfunction shouldBlockAnimation({ protectedKeys, needsAnimating }, key) {\n const shouldBlock = protectedKeys.hasOwnProperty(key) && needsAnimating[key] !== true;\n needsAnimating[key] = false;\n return shouldBlock;\n}\nfunction animateTarget(visualElement, targetAndTransition, { delay = 0, transitionOverride, type } = {}) {\n let { transition, transitionEnd, ...target } = targetAndTransition;\n const defaultTransition = visualElement.getDefaultTransition();\n transition = transition\n ? resolveTransition(transition, defaultTransition)\n : defaultTransition;\n const reduceMotion = transition?.reduceMotion;\n const skipAnimations = transition?.skipAnimations;\n if (transitionOverride)\n transition = transitionOverride;\n const animations = [];\n const animationTypeState = type &&\n visualElement.animationState &&\n visualElement.animationState.getState()[type];\n const path = transition?.path;\n if (path) {\n // path mutates `target` to claim x/y; loop below skips them.\n path.animateVisualElement(visualElement, target, transition, delay, animations);\n }\n for (const key in target) {\n const value = visualElement.getValue(key, visualElement.latestValues[key] ?? null);\n const valueTarget = target[key];\n if (valueTarget === undefined ||\n (animationTypeState &&\n shouldBlockAnimation(animationTypeState, key))) {\n continue;\n }\n const valueTransition = {\n delay,\n ...getValueTransition(transition || {}, key),\n };\n if (skipAnimations)\n valueTransition.skipAnimations = true;\n /**\n * If the value is already at the defined target, skip the animation.\n * We still re-assert the value via frame.update to take precedence\n * over any stale transitionEnd callbacks from previous animations.\n */\n const currentValue = value.get();\n if (currentValue !== undefined &&\n !value.isAnimating() &&\n !Array.isArray(valueTarget) &&\n valueTarget === currentValue &&\n !valueTransition.velocity) {\n frame.update(() => value.set(valueTarget));\n continue;\n }\n /**\n * If this is the first time a value is being animated, check\n * to see if we're handling off from an existing animation.\n */\n let isHandoff = false;\n if (window.MotionHandoffAnimation) {\n const appearId = getOptimisedAppearId(visualElement);\n if (appearId) {\n const startTime = window.MotionHandoffAnimation(appearId, key, frame);\n if (startTime !== null) {\n valueTransition.startTime = startTime;\n isHandoff = true;\n }\n }\n }\n addValueToWillChange(visualElement, key);\n const shouldReduceMotion = reduceMotion ?? visualElement.shouldReduceMotion;\n value.start(animateMotionValue(key, value, valueTarget, shouldReduceMotion && positionalKeys.has(key)\n ? { type: false }\n : valueTransition, visualElement, isHandoff));\n const animation = value.animation;\n if (animation) {\n animations.push(animation);\n }\n }\n if (transitionEnd) {\n const applyTransitionEnd = () => frame.update(() => {\n transitionEnd && setTarget(visualElement, transitionEnd);\n });\n if (animations.length) {\n Promise.all(animations).then(applyTransitionEnd);\n }\n else {\n applyTransitionEnd();\n }\n }\n return animations;\n}\n\nexport { animateTarget };\n//# sourceMappingURL=visual-element-target.mjs.map\n","import { resolveVariant } from '../../render/utils/resolve-dynamic-variants.mjs';\nimport { calcChildStagger } from '../utils/calc-child-stagger.mjs';\nimport { animateTarget } from './visual-element-target.mjs';\n\nfunction animateVariant(visualElement, variant, options = {}) {\n const resolved = resolveVariant(visualElement, variant, options.type === \"exit\"\n ? visualElement.presenceContext?.custom\n : undefined);\n let { transition = visualElement.getDefaultTransition() || {} } = resolved || {};\n if (options.transitionOverride) {\n transition = options.transitionOverride;\n }\n /**\n * If we have a variant, create a callback that runs it as an animation.\n * Otherwise, we resolve a Promise immediately for a composable no-op.\n */\n const getAnimation = resolved\n ? () => Promise.all(animateTarget(visualElement, resolved, options))\n : () => Promise.resolve();\n /**\n * If we have children, create a callback that runs all their animations.\n * Otherwise, we resolve a Promise immediately for a composable no-op.\n */\n const getChildAnimations = visualElement.variantChildren && visualElement.variantChildren.size\n ? (forwardDelay = 0) => {\n const { delayChildren = 0, staggerChildren, staggerDirection, } = transition;\n return animateChildren(visualElement, variant, forwardDelay, delayChildren, staggerChildren, staggerDirection, options);\n }\n : () => Promise.resolve();\n /**\n * If the transition explicitly defines a \"when\" option, we need to resolve either\n * this animation or all children animations before playing the other.\n */\n const { when } = transition;\n if (when) {\n const [first, last] = when === \"beforeChildren\"\n ? [getAnimation, getChildAnimations]\n : [getChildAnimations, getAnimation];\n return first().then(() => last());\n }\n else {\n return Promise.all([getAnimation(), getChildAnimations(options.delay)]);\n }\n}\nfunction animateChildren(visualElement, variant, delay = 0, delayChildren = 0, staggerChildren = 0, staggerDirection = 1, options) {\n const animations = [];\n for (const child of visualElement.variantChildren) {\n child.notify(\"AnimationStart\", variant);\n animations.push(animateVariant(child, variant, {\n ...options,\n delay: delay +\n (typeof delayChildren === \"function\" ? 0 : delayChildren) +\n calcChildStagger(visualElement.variantChildren, child, delayChildren, staggerChildren, staggerDirection),\n }).then(() => child.notify(\"AnimationComplete\", variant)));\n }\n return Promise.all(animations);\n}\n\nexport { animateVariant };\n//# sourceMappingURL=visual-element-variant.mjs.map\n","/**\n * ValueType for \"auto\"\n */\nconst auto = {\n test: (v) => v === \"auto\",\n parse: (v) => v,\n};\n\nexport { auto };\n//# sourceMappingURL=auto.mjs.map\n","/**\n * Tests a provided value against a ValueType\n */\nconst testValueType = (v) => (type) => type.test(v);\n\nexport { testValueType };\n//# sourceMappingURL=test.mjs.map\n","import { auto } from './auto.mjs';\nimport { number } from './numbers/index.mjs';\nimport { px, percent, degrees, vw, vh } from './numbers/units.mjs';\nimport { testValueType } from './test.mjs';\n\n/**\n * A list of value types commonly used for dimensions\n */\nconst dimensionValueTypes = [number, px, percent, degrees, vw, vh, auto];\n/**\n * Tests a dimensional value against the list of dimension ValueTypes\n */\nconst findDimensionValueType = (v) => dimensionValueTypes.find(testValueType(v));\n\nexport { dimensionValueTypes, findDimensionValueType };\n//# sourceMappingURL=dimensions.mjs.map\n","import { isZeroValueString } from 'motion-utils';\n\nfunction isNone(value) {\n if (typeof value === \"number\") {\n return value === 0;\n }\n else if (value !== null) {\n return value === \"none\" || value === \"0\" || isZeroValueString(value);\n }\n else {\n return true;\n }\n}\n\nexport { isNone };\n//# sourceMappingURL=is-none.mjs.map\n","import { complex } from './index.mjs';\nimport { floatRegex } from '../utils/float-regex.mjs';\n\n/**\n * Properties that should default to 1 or 100%\n */\nconst maxDefaults = new Set([\"brightness\", \"contrast\", \"saturate\", \"opacity\"]);\nfunction applyDefaultFilter(v) {\n const [name, value] = v.slice(0, -1).split(\"(\");\n if (name === \"drop-shadow\")\n return v;\n const [number] = value.match(floatRegex) || [];\n if (!number)\n return v;\n const unit = value.replace(number, \"\");\n let defaultValue = maxDefaults.has(name) ? 1 : 0;\n if (number !== value)\n defaultValue *= 100;\n return name + \"(\" + defaultValue + unit + \")\";\n}\nconst functionRegex = /\\b([a-z-]*)\\(.*?\\)/gu;\nconst filter = {\n ...complex,\n getAnimatableNone: (v) => {\n const functions = v.match(functionRegex);\n return functions ? functions.map(applyDefaultFilter).join(\" \") : v;\n },\n};\n\nexport { filter };\n//# sourceMappingURL=filter.mjs.map\n","import { complex } from './index.mjs';\n\nconst mask = {\n ...complex,\n getAnimatableNone: (v) => {\n const parsed = complex.parse(v);\n const transformer = complex.createTransformer(v);\n return transformer(parsed.map((v) => typeof v === \"number\" ? 0 : typeof v === \"object\" ? { ...v, alpha: 1 } : v));\n },\n};\n\nexport { mask };\n//# sourceMappingURL=mask.mjs.map\n","import { number } from './numbers/index.mjs';\n\nconst int = {\n ...number,\n transform: Math.round,\n};\n\nexport { int };\n//# sourceMappingURL=int.mjs.map\n","import { int } from '../int.mjs';\nimport { alpha } from '../numbers/index.mjs';\nimport { px } from '../numbers/units.mjs';\nimport { transformValueTypes } from './transform.mjs';\n\nconst numberValueTypes = {\n // Border props\n borderWidth: px,\n borderTopWidth: px,\n borderRightWidth: px,\n borderBottomWidth: px,\n borderLeftWidth: px,\n borderRadius: px,\n borderTopLeftRadius: px,\n borderTopRightRadius: px,\n borderBottomRightRadius: px,\n borderBottomLeftRadius: px,\n // Positioning props\n width: px,\n maxWidth: px,\n height: px,\n maxHeight: px,\n top: px,\n right: px,\n bottom: px,\n left: px,\n inset: px,\n insetBlock: px,\n insetBlockStart: px,\n insetBlockEnd: px,\n insetInline: px,\n insetInlineStart: px,\n insetInlineEnd: px,\n // Spacing props\n padding: px,\n paddingTop: px,\n paddingRight: px,\n paddingBottom: px,\n paddingLeft: px,\n paddingBlock: px,\n paddingBlockStart: px,\n paddingBlockEnd: px,\n paddingInline: px,\n paddingInlineStart: px,\n paddingInlineEnd: px,\n margin: px,\n marginTop: px,\n marginRight: px,\n marginBottom: px,\n marginLeft: px,\n marginBlock: px,\n marginBlockStart: px,\n marginBlockEnd: px,\n marginInline: px,\n marginInlineStart: px,\n marginInlineEnd: px,\n // Typography\n fontSize: px,\n // Misc\n backgroundPositionX: px,\n backgroundPositionY: px,\n ...transformValueTypes,\n zIndex: int,\n // SVG\n fillOpacity: alpha,\n strokeOpacity: alpha,\n numOctaves: int,\n};\n\nexport { numberValueTypes };\n//# sourceMappingURL=number.mjs.map\n","import { alpha, scale } from '../numbers/index.mjs';\nimport { px, progressPercentage, degrees } from '../numbers/units.mjs';\n\nconst transformValueTypes = {\n rotate: degrees,\n /**\n * Internal channel for `transition.path` orientToPath. Composed onto\n * `rotate` at the transform-build sites so the user's `rotate` is\n * never read or overwritten. Not part of `transformPropOrder`.\n */\n pathRotation: degrees,\n rotateX: degrees,\n rotateY: degrees,\n rotateZ: degrees,\n scale,\n scaleX: scale,\n scaleY: scale,\n scaleZ: scale,\n skew: degrees,\n skewX: degrees,\n skewY: degrees,\n distance: px,\n translateX: px,\n translateY: px,\n translateZ: px,\n x: px,\n y: px,\n z: px,\n perspective: px,\n transformPerspective: px,\n opacity: alpha,\n originX: progressPercentage,\n originY: progressPercentage,\n originZ: px,\n};\n\nexport { transformValueTypes };\n//# sourceMappingURL=transform.mjs.map\n","import { color } from '../color/index.mjs';\nimport { filter } from '../complex/filter.mjs';\nimport { mask } from '../complex/mask.mjs';\nimport { numberValueTypes } from './number.mjs';\n\n/**\n * A map of default value types for common values\n */\nconst defaultValueTypes = {\n ...numberValueTypes,\n // Color props\n color,\n backgroundColor: color,\n outlineColor: color,\n fill: color,\n stroke: color,\n // Border props\n borderColor: color,\n borderTopColor: color,\n borderRightColor: color,\n borderBottomColor: color,\n borderLeftColor: color,\n filter,\n WebkitFilter: filter,\n mask,\n WebkitMask: mask,\n};\n/**\n * Gets the default ValueType for the provided value key\n */\nconst getDefaultValueType = (key) => defaultValueTypes[key];\n\nexport { defaultValueTypes, getDefaultValueType };\n//# sourceMappingURL=defaults.mjs.map\n","import { complex } from '../complex/index.mjs';\nimport { filter } from '../complex/filter.mjs';\nimport { mask } from '../complex/mask.mjs';\nimport { getDefaultValueType } from '../maps/defaults.mjs';\n\nconst customTypes = /*@__PURE__*/ new Set([filter, mask]);\nfunction getAnimatableNone(key, value) {\n let defaultValueType = getDefaultValueType(key);\n if (!customTypes.has(defaultValueType))\n defaultValueType = complex;\n // If value is not recognised as animatable, ie \"none\", create an animatable version origin based on the target\n return defaultValueType.getAnimatableNone\n ? defaultValueType.getAnimatableNone(value)\n : undefined;\n}\n\nexport { getAnimatableNone };\n//# sourceMappingURL=animatable-none.mjs.map\n","import { analyseComplexValue } from '../../../value/types/complex/index.mjs';\nimport { getAnimatableNone } from '../../../value/types/utils/animatable-none.mjs';\n\n/**\n * If we encounter keyframes like \"none\" or \"0\" and we also have keyframes like\n * \"#fff\" or \"200px 200px\" we want to find a keyframe to serve as a template for\n * the \"none\" keyframes. In this case \"#fff\" or \"200px 200px\" - then these get turned into\n * zero equivalents, i.e. \"#fff0\" or \"0px 0px\".\n */\nconst invalidTemplates = new Set([\"auto\", \"none\", \"0\"]);\nfunction makeNoneKeyframesAnimatable(unresolvedKeyframes, noneKeyframeIndexes, name) {\n let i = 0;\n let animatableTemplate = undefined;\n while (i < unresolvedKeyframes.length && !animatableTemplate) {\n const keyframe = unresolvedKeyframes[i];\n if (typeof keyframe === \"string\" &&\n !invalidTemplates.has(keyframe) &&\n analyseComplexValue(keyframe).values.length) {\n animatableTemplate = unresolvedKeyframes[i];\n }\n i++;\n }\n if (animatableTemplate && name) {\n for (const noneIndex of noneKeyframeIndexes) {\n unresolvedKeyframes[noneIndex] = getAnimatableNone(name, animatableTemplate);\n }\n }\n}\n\nexport { makeNoneKeyframesAnimatable };\n//# sourceMappingURL=make-none-animatable.mjs.map\n","import { positionalKeys } from '../../render/utils/keys-position.mjs';\nimport { findDimensionValueType } from '../../value/types/dimensions.mjs';\nimport { getVariableValue } from '../utils/css-variables-conversion.mjs';\nimport { isCSSVariableToken, containsCSSVariable } from '../utils/is-css-variable.mjs';\nimport { KeyframeResolver } from './KeyframesResolver.mjs';\nimport { isNone } from './utils/is-none.mjs';\nimport { makeNoneKeyframesAnimatable } from './utils/make-none-animatable.mjs';\nimport { positionalValues, isNumOrPxType } from './utils/unit-conversion.mjs';\n\nclass DOMKeyframesResolver extends KeyframeResolver {\n constructor(unresolvedKeyframes, onComplete, name, motionValue, element) {\n super(unresolvedKeyframes, onComplete, name, motionValue, element, true);\n }\n readKeyframes() {\n const { unresolvedKeyframes, element, name } = this;\n if (!element || !element.current)\n return;\n super.readKeyframes();\n /**\n * If any keyframe is a CSS variable, we need to find its value by sampling the element\n */\n for (let i = 0; i < unresolvedKeyframes.length; i++) {\n let keyframe = unresolvedKeyframes[i];\n if (typeof keyframe === \"string\") {\n keyframe = keyframe.trim();\n if (isCSSVariableToken(keyframe)) {\n const resolved = getVariableValue(keyframe, element.current);\n if (resolved !== undefined) {\n unresolvedKeyframes[i] = resolved;\n }\n if (i === unresolvedKeyframes.length - 1) {\n this.finalKeyframe = keyframe;\n }\n }\n }\n }\n /**\n * Resolve \"none\" values. We do this potentially twice - once before and once after measuring keyframes.\n * This could be seen as inefficient but it's a trade-off to avoid measurements in more situations, which\n * have a far bigger performance impact.\n */\n this.resolveNoneKeyframes();\n /**\n * Check to see if unit type has changed. If so schedule jobs that will\n * temporarily set styles to the destination keyframes.\n * Skip if we have more than two keyframes or this isn't a positional value.\n * TODO: We can throw if there are multiple keyframes and the value type changes.\n */\n if (!positionalKeys.has(name) || unresolvedKeyframes.length !== 2) {\n return;\n }\n const [origin, target] = unresolvedKeyframes;\n const originType = findDimensionValueType(origin);\n const targetType = findDimensionValueType(target);\n /**\n * If one keyframe contains embedded CSS variables (e.g. in calc()) and the other\n * doesn't, we need to measure to convert to pixels. This handles GitHub issue #3410.\n */\n const originHasVar = containsCSSVariable(origin);\n const targetHasVar = containsCSSVariable(target);\n if (originHasVar !== targetHasVar && positionalValues[name]) {\n this.needsMeasurement = true;\n return;\n }\n /**\n * Either we don't recognise these value types or we can animate between them.\n */\n if (originType === targetType)\n return;\n /**\n * If both values are numbers or pixels, we can animate between them by\n * converting them to numbers.\n */\n if (isNumOrPxType(originType) && isNumOrPxType(targetType)) {\n for (let i = 0; i < unresolvedKeyframes.length; i++) {\n const value = unresolvedKeyframes[i];\n if (typeof value === \"string\") {\n unresolvedKeyframes[i] = parseFloat(value);\n }\n }\n }\n else if (positionalValues[name]) {\n /**\n * Else, the only way to resolve this is by measuring the element.\n */\n this.needsMeasurement = true;\n }\n }\n resolveNoneKeyframes() {\n const { unresolvedKeyframes, name } = this;\n const noneKeyframeIndexes = [];\n for (let i = 0; i < unresolvedKeyframes.length; i++) {\n if (unresolvedKeyframes[i] === null ||\n isNone(unresolvedKeyframes[i])) {\n noneKeyframeIndexes.push(i);\n }\n }\n if (noneKeyframeIndexes.length) {\n makeNoneKeyframesAnimatable(unresolvedKeyframes, noneKeyframeIndexes, name);\n }\n }\n measureInitialState() {\n const { element, unresolvedKeyframes, name } = this;\n if (!element || !element.current)\n return;\n if (name === \"height\") {\n this.suspendedScrollY = window.pageYOffset;\n }\n this.measuredOrigin = positionalValues[name](element.measureViewportBox(), window.getComputedStyle(element.current));\n unresolvedKeyframes[0] = this.measuredOrigin;\n // Set final key frame to measure after next render\n const measureKeyframe = unresolvedKeyframes[unresolvedKeyframes.length - 1];\n if (measureKeyframe !== undefined) {\n element.getValue(name, measureKeyframe).jump(measureKeyframe, false);\n }\n }\n measureEndState() {\n const { element, name, unresolvedKeyframes } = this;\n if (!element || !element.current)\n return;\n const value = element.getValue(name);\n value && value.jump(this.measuredOrigin, false);\n const finalKeyframeIndex = unresolvedKeyframes.length - 1;\n const finalKeyframe = unresolvedKeyframes[finalKeyframeIndex];\n unresolvedKeyframes[finalKeyframeIndex] = positionalValues[name](element.measureViewportBox(), window.getComputedStyle(element.current));\n if (finalKeyframe !== null && this.finalKeyframe === undefined) {\n this.finalKeyframe = finalKeyframe;\n }\n // If we removed transform values, reapply them before the next render\n if (this.removedTransforms?.length) {\n this.removedTransforms.forEach(([unsetTransformName, unsetTransformValue]) => {\n element\n .getValue(unsetTransformName)\n .set(unsetTransformValue);\n });\n }\n this.resolveNoneKeyframes();\n }\n}\n\nexport { DOMKeyframesResolver };\n//# sourceMappingURL=DOMKeyframesResolver.mjs.map\n","function resolveElements(elementOrSelector, scope, selectorCache) {\n if (elementOrSelector == null) {\n return [];\n }\n if (elementOrSelector instanceof EventTarget) {\n return [elementOrSelector];\n }\n else if (typeof elementOrSelector === \"string\") {\n let root = document;\n if (scope) {\n root = scope.current;\n }\n const elements = selectorCache?.[elementOrSelector] ??\n root.querySelectorAll(elementOrSelector);\n return elements ? Array.from(elements) : [];\n }\n return Array.from(elementOrSelector).filter((element) => element != null);\n}\n\nexport { resolveElements };\n//# sourceMappingURL=resolve-elements.mjs.map\n","/**\n * Provided a value and a ValueType, returns the value as that value type.\n */\nconst getValueAsType = (value, type) => {\n return type && typeof value === \"number\"\n ? type.transform(value)\n : value;\n};\n\nexport { getValueAsType };\n//# sourceMappingURL=get-as-type.mjs.map\n","import { createRenderBatcher } from './batcher.mjs';\n\nconst { schedule: microtask, cancel: cancelMicrotask } = \n/* @__PURE__ */ createRenderBatcher(queueMicrotask, false);\n\nexport { cancelMicrotask, microtask };\n//# sourceMappingURL=microtask.mjs.map\n","const isDragging = {\n x: false,\n y: false,\n};\nfunction isDragActive() {\n return isDragging.x || isDragging.y;\n}\n\nexport { isDragActive, isDragging };\n//# sourceMappingURL=is-active.mjs.map\n","import { resolveElements } from '../../utils/resolve-elements.mjs';\n\nfunction setupGesture(elementOrSelector, options) {\n const elements = resolveElements(elementOrSelector);\n const gestureAbortController = new AbortController();\n const eventOptions = {\n passive: true,\n ...options,\n signal: gestureAbortController.signal,\n };\n const cancel = () => gestureAbortController.abort();\n return [elements, eventOptions, cancel];\n}\n\nexport { setupGesture };\n//# sourceMappingURL=setup.mjs.map\n","import { isDragActive } from './drag/state/is-active.mjs';\nimport { setupGesture } from './utils/setup.mjs';\n\nfunction isValidHover(event) {\n return !(event.pointerType === \"touch\" || isDragActive());\n}\n/**\n * Create a hover gesture. hover() is different to .addEventListener(\"pointerenter\")\n * in that it has an easier syntax, filters out polyfilled touch events, interoperates\n * with drag gestures, and automatically removes the \"pointerennd\" event listener when the hover ends.\n *\n * @public\n */\nfunction hover(elementOrSelector, onHoverStart, options = {}) {\n const [elements, eventOptions, cancel] = setupGesture(elementOrSelector, options);\n elements.forEach((element) => {\n let isPressed = false;\n let deferredHoverEnd = false;\n let hoverEndCallback;\n const removePointerLeave = () => {\n element.removeEventListener(\"pointerleave\", onPointerLeave);\n };\n const endHover = (event) => {\n if (hoverEndCallback) {\n hoverEndCallback(event);\n hoverEndCallback = undefined;\n }\n removePointerLeave();\n };\n const onPointerUp = (event) => {\n isPressed = false;\n window.removeEventListener(\"pointerup\", onPointerUp);\n window.removeEventListener(\"pointercancel\", onPointerUp);\n if (deferredHoverEnd) {\n deferredHoverEnd = false;\n endHover(event);\n }\n };\n const onPointerDown = () => {\n isPressed = true;\n window.addEventListener(\"pointerup\", onPointerUp, eventOptions);\n window.addEventListener(\"pointercancel\", onPointerUp, eventOptions);\n };\n const onPointerLeave = (leaveEvent) => {\n if (leaveEvent.pointerType === \"touch\")\n return;\n if (isPressed) {\n deferredHoverEnd = true;\n return;\n }\n endHover(leaveEvent);\n };\n const onPointerEnter = (enterEvent) => {\n if (!isValidHover(enterEvent))\n return;\n deferredHoverEnd = false;\n const onHoverEnd = onHoverStart(element, enterEvent);\n if (typeof onHoverEnd !== \"function\")\n return;\n hoverEndCallback = onHoverEnd;\n element.addEventListener(\"pointerleave\", onPointerLeave, eventOptions);\n };\n element.addEventListener(\"pointerenter\", onPointerEnter, eventOptions);\n element.addEventListener(\"pointerdown\", onPointerDown, eventOptions);\n });\n return cancel;\n}\n\nexport { hover };\n//# sourceMappingURL=hover.mjs.map\n","/**\n * Recursively traverse up the tree to check whether the provided child node\n * is the parent or a descendant of it.\n *\n * @param parent - Element to find\n * @param child - Element to test against parent\n */\nconst isNodeOrChild = (parent, child) => {\n if (!child) {\n return false;\n }\n else if (parent === child) {\n return true;\n }\n else {\n return isNodeOrChild(parent, child.parentElement);\n }\n};\n\nexport { isNodeOrChild };\n//# sourceMappingURL=is-node-or-child.mjs.map\n","const isPrimaryPointer = (event) => {\n if (event.pointerType === \"mouse\") {\n return typeof event.button !== \"number\" || event.button <= 0;\n }\n else {\n /**\n * isPrimary is true for all mice buttons, whereas every touch point\n * is regarded as its own input. So subsequent concurrent touch points\n * will be false.\n *\n * Specifically match against false here as incomplete versions of\n * PointerEvents in very old browser might have it set as undefined.\n */\n return event.isPrimary !== false;\n }\n};\n\nexport { isPrimaryPointer };\n//# sourceMappingURL=is-primary-pointer.mjs.map\n","const keyboardAccessibleElements = new Set([\n \"BUTTON\",\n \"INPUT\",\n \"SELECT\",\n \"TEXTAREA\",\n \"A\",\n]);\n/**\n * Checks if an element is natively keyboard accessible (focusable).\n * Used by the press gesture to determine if we need to add tabIndex.\n */\nfunction isElementKeyboardAccessible(element) {\n return (keyboardAccessibleElements.has(element.tagName) ||\n element.isContentEditable === true);\n}\nconst textInputElements = new Set([\"INPUT\", \"SELECT\", \"TEXTAREA\"]);\n/**\n * Checks if an element has text selection or direct interaction behavior\n * that should block drag gestures from starting.\n *\n * This specifically targets form controls where the user might want to select\n * text or interact with the control (e.g., sliders, dropdowns).\n *\n * Buttons and links are NOT included because they don't have click-and-move\n * actions of their own - they only respond to click events, so dragging\n * should still work when initiated from these elements.\n */\nfunction isElementTextInput(element) {\n return (textInputElements.has(element.tagName) ||\n element.isContentEditable === true);\n}\n\nexport { isElementKeyboardAccessible, isElementTextInput };\n//# sourceMappingURL=is-keyboard-accessible.mjs.map\n","const isPressing = new WeakSet();\n\nexport { isPressing };\n//# sourceMappingURL=state.mjs.map\n","import { isPressing } from './state.mjs';\n\n/**\n * Filter out events that are not \"Enter\" keys.\n */\nfunction filterEvents(callback) {\n return (event) => {\n if (event.key !== \"Enter\")\n return;\n callback(event);\n };\n}\nfunction firePointerEvent(target, type) {\n target.dispatchEvent(new PointerEvent(\"pointer\" + type, { isPrimary: true, bubbles: true }));\n}\nconst enableKeyboardPress = (focusEvent, eventOptions) => {\n const element = focusEvent.currentTarget;\n if (!element)\n return;\n const handleKeydown = filterEvents(() => {\n if (isPressing.has(element))\n return;\n firePointerEvent(element, \"down\");\n const handleKeyup = filterEvents(() => {\n firePointerEvent(element, \"up\");\n });\n const handleBlur = () => firePointerEvent(element, \"cancel\");\n element.addEventListener(\"keyup\", handleKeyup, eventOptions);\n element.addEventListener(\"blur\", handleBlur, eventOptions);\n });\n element.addEventListener(\"keydown\", handleKeydown, eventOptions);\n /**\n * Add an event listener that fires on blur to remove the keydown events.\n */\n element.addEventListener(\"blur\", () => element.removeEventListener(\"keydown\", handleKeydown), eventOptions);\n};\n\nexport { enableKeyboardPress };\n//# sourceMappingURL=keyboard.mjs.map\n","import { isHTMLElement } from '../../utils/is-html-element.mjs';\nimport { isDragActive } from '../drag/state/is-active.mjs';\nimport { isNodeOrChild } from '../utils/is-node-or-child.mjs';\nimport { isPrimaryPointer } from '../utils/is-primary-pointer.mjs';\nimport { setupGesture } from '../utils/setup.mjs';\nimport { isElementKeyboardAccessible } from './utils/is-keyboard-accessible.mjs';\nimport { enableKeyboardPress } from './utils/keyboard.mjs';\nimport { isPressing } from './utils/state.mjs';\n\n/**\n * Filter out events that are not primary pointer events, or are triggering\n * while a Motion gesture is active.\n */\nfunction isValidPressEvent(event) {\n return isPrimaryPointer(event) && !isDragActive();\n}\nconst claimedPointerDownEvents = new WeakSet();\n/**\n * Create a press gesture.\n *\n * Press is different to `\"pointerdown\"`, `\"pointerup\"` in that it\n * automatically filters out secondary pointer events like right\n * click and multitouch.\n *\n * It also adds accessibility support for keyboards, where\n * an element with a press gesture will receive focus and\n * trigger on Enter `\"keydown\"` and `\"keyup\"` events.\n *\n * This is different to a browser's `\"click\"` event, which does\n * respond to keyboards but only for the `\"click\"` itself, rather\n * than the press start and end/cancel. The element also needs\n * to be focusable for this to work, whereas a press gesture will\n * make an element focusable by default.\n *\n * @public\n */\nfunction press(targetOrSelector, onPressStart, options = {}) {\n const [targets, eventOptions, cancelEvents] = setupGesture(targetOrSelector, options);\n const startPress = (startEvent) => {\n const target = startEvent.currentTarget;\n if (!isValidPressEvent(startEvent))\n return;\n if (claimedPointerDownEvents.has(startEvent))\n return;\n isPressing.add(target);\n if (options.stopPropagation) {\n claimedPointerDownEvents.add(startEvent);\n }\n const onPressEnd = onPressStart(target, startEvent);\n const onPointerEnd = (endEvent, success) => {\n window.removeEventListener(\"pointerup\", onPointerUp);\n window.removeEventListener(\"pointercancel\", onPointerCancel);\n if (isPressing.has(target)) {\n isPressing.delete(target);\n }\n if (!isValidPressEvent(endEvent)) {\n return;\n }\n if (typeof onPressEnd === \"function\") {\n onPressEnd(endEvent, { success });\n }\n };\n const onPointerUp = (upEvent) => {\n onPointerEnd(upEvent, target === window ||\n target === document ||\n options.useGlobalTarget ||\n isNodeOrChild(target, upEvent.target));\n };\n const onPointerCancel = (cancelEvent) => {\n onPointerEnd(cancelEvent, false);\n };\n window.addEventListener(\"pointerup\", onPointerUp, eventOptions);\n window.addEventListener(\"pointercancel\", onPointerCancel, eventOptions);\n };\n targets.forEach((target) => {\n const pointerDownTarget = options.useGlobalTarget ? window : target;\n pointerDownTarget.addEventListener(\"pointerdown\", startPress, eventOptions);\n if (isHTMLElement(target)) {\n target.addEventListener(\"focus\", (event) => enableKeyboardPress(event, eventOptions));\n if (!isElementKeyboardAccessible(target) &&\n !target.hasAttribute(\"tabindex\")) {\n target.tabIndex = 0;\n }\n }\n });\n return cancelEvents;\n}\n\nexport { press };\n//# sourceMappingURL=index.mjs.map\n","import { isObject } from 'motion-utils';\n\n/**\n * Checks if an element is an HTML element in a way\n * that works across iframes\n */\nfunction isHTMLElement(element) {\n return (isObject(element) &&\n \"offsetHeight\" in element &&\n !(\"ownerSVGElement\" in element));\n}\n\nexport { isHTMLElement };\n//# sourceMappingURL=is-html-element.mjs.map\n","import { isObject } from 'motion-utils';\n\n/**\n * Checks if an element is an SVG element in a way\n * that works across iframes\n */\nfunction isSVGElement(element) {\n return isObject(element) && \"ownerSVGElement\" in element;\n}\n\nexport { isSVGElement };\n//# sourceMappingURL=is-svg-element.mjs.map\n","import { isSVGElement } from '../utils/is-svg-element.mjs';\nimport { resolveElements } from '../utils/resolve-elements.mjs';\n\nconst resizeHandlers = new WeakMap();\nlet observer;\nconst getSize = (borderBoxAxis, svgAxis, htmlAxis) => (target, borderBoxSize) => {\n if (borderBoxSize && borderBoxSize[0]) {\n return borderBoxSize[0][(borderBoxAxis + \"Size\")];\n }\n else if (isSVGElement(target) && \"getBBox\" in target) {\n return target.getBBox()[svgAxis];\n }\n else {\n return target[htmlAxis];\n }\n};\nconst getWidth = /*@__PURE__*/ getSize(\"inline\", \"width\", \"offsetWidth\");\nconst getHeight = /*@__PURE__*/ getSize(\"block\", \"height\", \"offsetHeight\");\nfunction notifyTarget({ target, borderBoxSize }) {\n resizeHandlers.get(target)?.forEach((handler) => {\n handler(target, {\n get width() {\n return getWidth(target, borderBoxSize);\n },\n get height() {\n return getHeight(target, borderBoxSize);\n },\n });\n });\n}\nfunction notifyAll(entries) {\n entries.forEach(notifyTarget);\n}\nfunction createResizeObserver() {\n if (typeof ResizeObserver === \"undefined\")\n return;\n observer = new ResizeObserver(notifyAll);\n}\nfunction resizeElement(target, handler) {\n if (!observer)\n createResizeObserver();\n const elements = resolveElements(target);\n elements.forEach((element) => {\n let elementHandlers = resizeHandlers.get(element);\n if (!elementHandlers) {\n elementHandlers = new Set();\n resizeHandlers.set(element, elementHandlers);\n }\n elementHandlers.add(handler);\n observer?.observe(element);\n });\n return () => {\n elements.forEach((element) => {\n const elementHandlers = resizeHandlers.get(element);\n elementHandlers?.delete(handler);\n if (!elementHandlers?.size) {\n observer?.unobserve(element);\n }\n });\n };\n}\n\nexport { resizeElement };\n//# sourceMappingURL=handle-element.mjs.map\n","const windowCallbacks = new Set();\nlet windowResizeHandler;\nfunction createWindowResizeHandler() {\n windowResizeHandler = () => {\n const info = {\n get width() {\n return window.innerWidth;\n },\n get height() {\n return window.innerHeight;\n },\n };\n windowCallbacks.forEach((callback) => callback(info));\n };\n window.addEventListener(\"resize\", windowResizeHandler);\n}\nfunction resizeWindow(callback) {\n windowCallbacks.add(callback);\n if (!windowResizeHandler)\n createWindowResizeHandler();\n return () => {\n windowCallbacks.delete(callback);\n if (!windowCallbacks.size &&\n typeof windowResizeHandler === \"function\") {\n window.removeEventListener(\"resize\", windowResizeHandler);\n windowResizeHandler = undefined;\n }\n };\n}\n\nexport { resizeWindow };\n//# sourceMappingURL=handle-window.mjs.map\n","import { resizeElement } from './handle-element.mjs';\nimport { resizeWindow } from './handle-window.mjs';\n\nfunction resize(a, b) {\n return typeof a === \"function\" ? resizeWindow(a) : resizeElement(a, b);\n}\n\nexport { resize };\n//# sourceMappingURL=index.mjs.map\n","import { color } from '../color/index.mjs';\nimport { complex } from '../complex/index.mjs';\nimport { dimensionValueTypes } from '../dimensions.mjs';\nimport { testValueType } from '../test.mjs';\n\n/**\n * A list of all ValueTypes\n */\nconst valueTypes = [...dimensionValueTypes, color, complex];\n/**\n * Tests a value against the list of ValueTypes\n */\nconst findValueType = (v) => valueTypes.find(testValueType(v));\n\nexport { findValueType };\n//# sourceMappingURL=find.mjs.map\n","const createAxisDelta = () => ({\n translate: 0,\n scale: 1,\n origin: 0,\n originPoint: 0,\n});\nconst createDelta = () => ({\n x: createAxisDelta(),\n y: createAxisDelta(),\n});\nconst createAxis = () => ({ min: 0, max: 0 });\nconst createBox = () => ({\n x: createAxis(),\n y: createAxis(),\n});\n\nexport { createAxis, createAxisDelta, createBox, createDelta };\n//# sourceMappingURL=models.mjs.map\n","const visualElementStore = new WeakMap();\n\nexport { visualElementStore };\n//# sourceMappingURL=store.mjs.map\n","function isAnimationControls(v) {\n return (v !== null &&\n typeof v === \"object\" &&\n typeof v.start === \"function\");\n}\n\nexport { isAnimationControls };\n//# sourceMappingURL=is-animation-controls.mjs.map\n","/**\n * Decides if the supplied variable is variant label\n */\nfunction isVariantLabel(v) {\n return typeof v === \"string\" || Array.isArray(v);\n}\n\nexport { isVariantLabel };\n//# sourceMappingURL=is-variant-label.mjs.map\n","const variantPriorityOrder = [\n \"animate\",\n \"whileInView\",\n \"whileFocus\",\n \"whileHover\",\n \"whileTap\",\n \"whileDrag\",\n \"exit\",\n];\nconst variantProps = [\"initial\", ...variantPriorityOrder];\n\nexport { variantPriorityOrder, variantProps };\n//# sourceMappingURL=variant-props.mjs.map\n","import { isAnimationControls } from './is-animation-controls.mjs';\nimport { isVariantLabel } from './is-variant-label.mjs';\nimport { variantProps } from './variant-props.mjs';\n\nfunction isControllingVariants(props) {\n return (isAnimationControls(props.animate) ||\n variantProps.some((name) => isVariantLabel(props[name])));\n}\nfunction isVariantNode(props) {\n return Boolean(isControllingVariants(props) || props.variants);\n}\n\nexport { isControllingVariants, isVariantNode };\n//# sourceMappingURL=is-controlling-variants.mjs.map\n","// Does this device prefer reduced motion? Returns `null` server-side.\nconst prefersReducedMotion = { current: null };\nconst hasReducedMotionListener = { current: false };\n\nexport { hasReducedMotionListener, prefersReducedMotion };\n//# sourceMappingURL=state.mjs.map\n","import { hasReducedMotionListener, prefersReducedMotion } from './state.mjs';\n\nconst isBrowser = typeof window !== \"undefined\";\nfunction initPrefersReducedMotion() {\n hasReducedMotionListener.current = true;\n if (!isBrowser)\n return;\n if (window.matchMedia) {\n const motionMediaQuery = window.matchMedia(\"(prefers-reduced-motion)\");\n const setReducedMotionPreferences = () => (prefersReducedMotion.current = motionMediaQuery.matches);\n motionMediaQuery.addEventListener(\"change\", setReducedMotionPreferences);\n setReducedMotionPreferences();\n }\n else {\n prefersReducedMotion.current = false;\n }\n}\n\nexport { hasReducedMotionListener, initPrefersReducedMotion, prefersReducedMotion };\n//# sourceMappingURL=index.mjs.map\n","import { warnOnce, secondsToMilliseconds, isNumericalString, isZeroValueString, SubscriptionManager } from 'motion-utils';\nimport { KeyframeResolver } from '../animation/keyframes/KeyframesResolver.mjs';\nimport { NativeAnimation } from '../animation/NativeAnimation.mjs';\nimport { acceleratedValues } from '../animation/waapi/utils/accelerated-values.mjs';\nimport { microtask } from '../frameloop/microtask.mjs';\nimport { time } from '../frameloop/sync-time.mjs';\nimport { createBox } from '../projection/geometry/models.mjs';\nimport { motionValue } from '../value/index.mjs';\nimport { complex } from '../value/types/complex/index.mjs';\nimport { getAnimatableNone } from '../value/types/utils/animatable-none.mjs';\nimport { findValueType } from '../value/types/utils/find.mjs';\nimport { isMotionValue } from '../value/utils/is-motion-value.mjs';\nimport { visualElementStore } from './store.mjs';\nimport { isControllingVariants, isVariantNode } from './utils/is-controlling-variants.mjs';\nimport { transformProps } from './utils/keys-transform.mjs';\nimport { updateMotionValuesFromProps } from './utils/motion-values.mjs';\nimport { initPrefersReducedMotion } from './utils/reduced-motion/index.mjs';\nimport { resolveVariantFromProps } from './utils/resolve-variants.mjs';\nimport { hasReducedMotionListener, prefersReducedMotion } from './utils/reduced-motion/state.mjs';\nimport { frame, cancelFrame } from '../frameloop/frame.mjs';\n\nconst propEventHandlers = [\n \"AnimationStart\",\n \"AnimationComplete\",\n \"Update\",\n \"BeforeLayoutMeasure\",\n \"LayoutMeasure\",\n \"LayoutAnimationStart\",\n \"LayoutAnimationComplete\",\n];\n/**\n * Static feature definitions - can be injected by framework layer\n */\nlet featureDefinitions = {};\n/**\n * Set feature definitions for all VisualElements.\n * This should be called by the framework layer (e.g., framer-motion) during initialization.\n */\nfunction setFeatureDefinitions(definitions) {\n featureDefinitions = definitions;\n}\n/**\n * Get the current feature definitions\n */\nfunction getFeatureDefinitions() {\n return featureDefinitions;\n}\n/**\n * A VisualElement is an imperative abstraction around UI elements such as\n * HTMLElement, SVGElement, Three.Object3D etc.\n */\nclass VisualElement {\n /**\n * This method takes React props and returns found MotionValues. For example, HTML\n * MotionValues will be found within the style prop, whereas for Three.js within attribute arrays.\n *\n * This isn't an abstract method as it needs calling in the constructor, but it is\n * intended to be one.\n */\n scrapeMotionValuesFromProps(_props, _prevProps, _visualElement) {\n return {};\n }\n constructor({ parent, props, presenceContext, reducedMotionConfig, skipAnimations, blockInitialAnimation, visualState, }, options = {}) {\n /**\n * A reference to the current underlying Instance, e.g. a HTMLElement\n * or Three.Mesh etc.\n */\n this.current = null;\n /**\n * A set containing references to this VisualElement's children.\n */\n this.children = new Set();\n /**\n * Determine what role this visual element should take in the variant tree.\n */\n this.isVariantNode = false;\n this.isControllingVariants = false;\n /**\n * Decides whether this VisualElement should animate in reduced motion\n * mode.\n *\n * TODO: This is currently set on every individual VisualElement but feels\n * like it could be set globally.\n */\n this.shouldReduceMotion = null;\n /**\n * Decides whether animations should be skipped for this VisualElement.\n * Useful for E2E tests and visual regression testing.\n */\n this.shouldSkipAnimations = false;\n /**\n * A map of all motion values attached to this visual element. Motion\n * values are source of truth for any given animated value. A motion\n * value might be provided externally by the component via props.\n */\n this.values = new Map();\n this.KeyframeResolver = KeyframeResolver;\n /**\n * Cleanup functions for active features (hover/tap/exit etc)\n */\n this.features = {};\n /**\n * A map of every subscription that binds the provided or generated\n * motion values onChange listeners to this visual element.\n */\n this.valueSubscriptions = new Map();\n /**\n * A reference to the previously-provided motion values as returned\n * from scrapeMotionValuesFromProps. We use the keys in here to determine\n * if any motion values need to be removed after props are updated.\n */\n this.prevMotionValues = {};\n /**\n * Track whether this element has been mounted before, to detect\n * remounts after Suspense unmount/remount cycles.\n */\n this.hasBeenMounted = false;\n /**\n * An object containing a SubscriptionManager for each active event.\n */\n this.events = {};\n /**\n * An object containing an unsubscribe function for each prop event subscription.\n * For example, every \"Update\" event can have multiple subscribers via\n * VisualElement.on(), but only one of those can be defined via the onUpdate prop.\n */\n this.propEventSubscriptions = {};\n this.notifyUpdate = () => this.notify(\"Update\", this.latestValues);\n this.render = () => {\n if (!this.current)\n return;\n this.triggerBuild();\n this.renderInstance(this.current, this.renderState, this.props.style, this.projection);\n };\n this.renderScheduledAt = 0.0;\n this.scheduleRender = () => {\n const now = time.now();\n if (this.renderScheduledAt < now) {\n this.renderScheduledAt = now;\n frame.render(this.render, false, true);\n }\n };\n const { latestValues, renderState } = visualState;\n this.latestValues = latestValues;\n this.baseTarget = { ...latestValues };\n this.initialValues = props.initial ? { ...latestValues } : {};\n this.renderState = renderState;\n this.parent = parent;\n this.props = props;\n this.presenceContext = presenceContext;\n this.depth = parent ? parent.depth + 1 : 0;\n this.reducedMotionConfig = reducedMotionConfig;\n this.skipAnimationsConfig = skipAnimations;\n this.options = options;\n this.blockInitialAnimation = Boolean(blockInitialAnimation);\n this.isControllingVariants = isControllingVariants(props);\n this.isVariantNode = isVariantNode(props);\n if (this.isVariantNode) {\n this.variantChildren = new Set();\n }\n this.manuallyAnimateOnMount = Boolean(parent && parent.current);\n /**\n * Any motion values that are provided to the element when created\n * aren't yet bound to the element, as this would technically be impure.\n * However, we iterate through the motion values and set them to the\n * initial values for this component.\n *\n * TODO: This is impure and we should look at changing this to run on mount.\n * Doing so will break some tests but this isn't necessarily a breaking change,\n * more a reflection of the test.\n */\n const { willChange, ...initialMotionValues } = this.scrapeMotionValuesFromProps(props, {}, this);\n for (const key in initialMotionValues) {\n const value = initialMotionValues[key];\n if (latestValues[key] !== undefined && isMotionValue(value)) {\n value.set(latestValues[key]);\n }\n }\n }\n mount(instance) {\n /**\n * If this element has been mounted before (e.g. after a Suspense\n * unmount/remount), reset motion values to their initial state\n * so animations replay correctly from initial → animate.\n */\n if (this.hasBeenMounted) {\n for (const key in this.initialValues) {\n this.values.get(key)?.jump(this.initialValues[key]);\n this.latestValues[key] = this.initialValues[key];\n }\n }\n this.current = instance;\n visualElementStore.set(instance, this);\n if (this.projection && !this.projection.instance) {\n this.projection.mount(instance);\n }\n if (this.parent && this.isVariantNode && !this.isControllingVariants) {\n this.removeFromVariantTree = this.parent.addVariantChild(this);\n }\n this.values.forEach((value, key) => this.bindToMotionValue(key, value));\n /**\n * Determine reduced motion preference. Only initialize the matchMedia\n * listener if we actually need the dynamic value (i.e., when config\n * is neither \"never\" nor \"always\").\n */\n if (this.reducedMotionConfig === \"never\") {\n this.shouldReduceMotion = false;\n }\n else if (this.reducedMotionConfig === \"always\") {\n this.shouldReduceMotion = true;\n }\n else {\n if (!hasReducedMotionListener.current) {\n initPrefersReducedMotion();\n }\n this.shouldReduceMotion = prefersReducedMotion.current;\n }\n if (process.env.NODE_ENV !== \"production\") {\n warnOnce(this.shouldReduceMotion !== true, \"You have Reduced Motion enabled on your device. Animations may not appear as expected.\", \"reduced-motion-disabled\");\n }\n /**\n * Set whether animations should be skipped based on the config.\n */\n this.shouldSkipAnimations = this.skipAnimationsConfig ?? false;\n this.parent?.addChild(this);\n this.update(this.props, this.presenceContext);\n this.hasBeenMounted = true;\n }\n unmount() {\n this.projection && this.projection.unmount();\n cancelFrame(this.notifyUpdate);\n cancelFrame(this.render);\n this.valueSubscriptions.forEach((remove) => remove());\n this.valueSubscriptions.clear();\n this.removeFromVariantTree && this.removeFromVariantTree();\n this.parent?.removeChild(this);\n for (const key in this.events) {\n this.events[key].clear();\n }\n for (const key in this.features) {\n const feature = this.features[key];\n if (feature) {\n feature.unmount();\n feature.isMounted = false;\n }\n }\n this.current = null;\n }\n addChild(child) {\n this.children.add(child);\n this.enteringChildren ?? (this.enteringChildren = new Set());\n this.enteringChildren.add(child);\n }\n removeChild(child) {\n this.children.delete(child);\n this.enteringChildren && this.enteringChildren.delete(child);\n }\n bindToMotionValue(key, value) {\n if (this.valueSubscriptions.has(key)) {\n this.valueSubscriptions.get(key)();\n }\n if (value.accelerate &&\n acceleratedValues.has(key) &&\n this.current instanceof HTMLElement) {\n const { factory, keyframes, times, ease, duration } = value.accelerate;\n const animation = new NativeAnimation({\n element: this.current,\n name: key,\n keyframes,\n times,\n ease,\n duration: secondsToMilliseconds(duration),\n });\n const cleanup = factory(animation);\n this.valueSubscriptions.set(key, () => {\n cleanup();\n animation.cancel();\n });\n return;\n }\n const valueIsTransform = transformProps.has(key);\n if (valueIsTransform && this.onBindTransform) {\n this.onBindTransform();\n }\n const removeOnChange = value.on(\"change\", (latestValue) => {\n this.latestValues[key] = latestValue;\n this.props.onUpdate && frame.preRender(this.notifyUpdate);\n if (valueIsTransform && this.projection) {\n this.projection.isTransformDirty = true;\n }\n this.scheduleRender();\n });\n let removeSyncCheck;\n if (typeof window !== \"undefined\" &&\n window.MotionCheckAppearSync) {\n removeSyncCheck = window.MotionCheckAppearSync(this, key, value);\n }\n this.valueSubscriptions.set(key, () => {\n removeOnChange();\n if (removeSyncCheck)\n removeSyncCheck();\n // Defer to MotionValue.on(\"change\") auto-stop so React 19 remounts\n // can resubscribe before the animation is cancelled (#3315).\n });\n }\n sortNodePosition(other) {\n /**\n * If these nodes aren't even of the same type we can't compare their depth.\n */\n if (!this.current ||\n !this.sortInstanceNodePosition ||\n this.type !== other.type) {\n return 0;\n }\n return this.sortInstanceNodePosition(this.current, other.current);\n }\n updateFeatures() {\n let key = \"animation\";\n for (key in featureDefinitions) {\n const featureDefinition = featureDefinitions[key];\n if (!featureDefinition)\n continue;\n const { isEnabled, Feature: FeatureConstructor } = featureDefinition;\n /**\n * If this feature is enabled but not active, make a new instance.\n */\n if (!this.features[key] &&\n FeatureConstructor &&\n isEnabled(this.props)) {\n this.features[key] = new FeatureConstructor(this);\n }\n /**\n * If we have a feature, mount or update it.\n */\n if (this.features[key]) {\n const feature = this.features[key];\n if (feature.isMounted) {\n feature.update();\n }\n else {\n feature.mount();\n feature.isMounted = true;\n }\n }\n }\n }\n triggerBuild() {\n this.build(this.renderState, this.latestValues, this.props);\n }\n /**\n * Measure the current viewport box with or without transforms.\n * Only measures axis-aligned boxes, rotate and skew must be manually\n * removed with a re-render to work.\n */\n measureViewportBox() {\n return this.current\n ? this.measureInstanceViewportBox(this.current, this.props)\n : createBox();\n }\n getStaticValue(key) {\n return this.latestValues[key];\n }\n setStaticValue(key, value) {\n this.latestValues[key] = value;\n }\n /**\n * Update the provided props. Ensure any newly-added motion values are\n * added to our map, old ones removed, and listeners updated.\n */\n update(props, presenceContext) {\n if (props.transformTemplate || this.props.transformTemplate) {\n this.scheduleRender();\n }\n this.prevProps = this.props;\n this.props = props;\n this.prevPresenceContext = this.presenceContext;\n this.presenceContext = presenceContext;\n /**\n * Update prop event handlers ie onAnimationStart, onAnimationComplete\n */\n for (let i = 0; i < propEventHandlers.length; i++) {\n const key = propEventHandlers[i];\n if (this.propEventSubscriptions[key]) {\n this.propEventSubscriptions[key]();\n delete this.propEventSubscriptions[key];\n }\n const listenerName = (\"on\" + key);\n const listener = props[listenerName];\n if (listener) {\n this.propEventSubscriptions[key] = this.on(key, listener);\n }\n }\n this.prevMotionValues = updateMotionValuesFromProps(this, this.scrapeMotionValuesFromProps(props, this.prevProps || {}, this), this.prevMotionValues);\n if (this.handleChildMotionValue) {\n this.handleChildMotionValue();\n }\n }\n getProps() {\n return this.props;\n }\n /**\n * Returns the variant definition with a given name.\n */\n getVariant(name) {\n return this.props.variants ? this.props.variants[name] : undefined;\n }\n /**\n * Returns the defined default transition on this component.\n */\n getDefaultTransition() {\n return this.props.transition;\n }\n getTransformPagePoint() {\n return this.props.transformPagePoint;\n }\n getClosestVariantNode() {\n return this.isVariantNode\n ? this\n : this.parent\n ? this.parent.getClosestVariantNode()\n : undefined;\n }\n /**\n * Add a child visual element to our set of children.\n */\n addVariantChild(child) {\n const closestVariantNode = this.getClosestVariantNode();\n if (closestVariantNode) {\n closestVariantNode.variantChildren &&\n closestVariantNode.variantChildren.add(child);\n return () => closestVariantNode.variantChildren.delete(child);\n }\n }\n /**\n * Add a motion value and bind it to this visual element.\n */\n addValue(key, value) {\n // Remove existing value if it exists\n const existingValue = this.values.get(key);\n if (value !== existingValue) {\n if (existingValue)\n this.removeValue(key);\n this.bindToMotionValue(key, value);\n this.values.set(key, value);\n this.latestValues[key] = value.get();\n }\n }\n /**\n * Remove a motion value and unbind any active subscriptions.\n */\n removeValue(key) {\n this.values.delete(key);\n const unsubscribe = this.valueSubscriptions.get(key);\n if (unsubscribe) {\n unsubscribe();\n this.valueSubscriptions.delete(key);\n }\n delete this.latestValues[key];\n this.removeValueFromRenderState(key, this.renderState);\n }\n /**\n * Check whether we have a motion value for this key\n */\n hasValue(key) {\n return this.values.has(key);\n }\n getValue(key, defaultValue) {\n if (this.props.values && this.props.values[key]) {\n return this.props.values[key];\n }\n let value = this.values.get(key);\n if (value === undefined && defaultValue !== undefined) {\n value = motionValue(defaultValue === null ? undefined : defaultValue, { owner: this });\n this.addValue(key, value);\n }\n return value;\n }\n /**\n * If we're trying to animate to a previously unencountered value,\n * we need to check for it in our state and as a last resort read it\n * directly from the instance (which might have performance implications).\n */\n readValue(key, target) {\n let value = this.latestValues[key] !== undefined || !this.current\n ? this.latestValues[key]\n : this.getBaseTargetFromProps(this.props, key) ??\n this.readValueFromInstance(this.current, key, this.options);\n if (value !== undefined && value !== null) {\n if (typeof value === \"string\" &&\n (isNumericalString(value) || isZeroValueString(value))) {\n // If this is a number read as a string, ie \"0\" or \"200\", convert it to a number\n value = parseFloat(value);\n }\n else if (!findValueType(value) && complex.test(target)) {\n value = getAnimatableNone(key, target);\n }\n this.setBaseTarget(key, isMotionValue(value) ? value.get() : value);\n }\n return isMotionValue(value) ? value.get() : value;\n }\n /**\n * Set the base target to later animate back to. This is currently\n * only hydrated on creation and when we first read a value.\n */\n setBaseTarget(key, value) {\n this.baseTarget[key] = value;\n }\n /**\n * Find the base target for a value thats been removed from all animation\n * props.\n */\n getBaseTarget(key) {\n const { initial } = this.props;\n let valueFromInitial;\n if (typeof initial === \"string\" || typeof initial === \"object\") {\n const variant = resolveVariantFromProps(this.props, initial, this.presenceContext?.custom);\n if (variant) {\n valueFromInitial = variant[key];\n }\n }\n /**\n * If this value still exists in the current initial variant, read that.\n */\n if (initial && valueFromInitial !== undefined) {\n return valueFromInitial;\n }\n /**\n * Alternatively, if this VisualElement config has defined a getBaseTarget\n * so we can read the value from an alternative source, try that.\n */\n const target = this.getBaseTargetFromProps(this.props, key);\n if (target !== undefined && !isMotionValue(target))\n return target;\n /**\n * If the value was initially defined on initial, but it doesn't any more,\n * return undefined. Otherwise return the value as initially read from the DOM.\n */\n return this.initialValues[key] !== undefined &&\n valueFromInitial === undefined\n ? undefined\n : this.baseTarget[key];\n }\n on(eventName, callback) {\n if (!this.events[eventName]) {\n this.events[eventName] = new SubscriptionManager();\n }\n return this.events[eventName].add(callback);\n }\n notify(eventName, ...args) {\n if (this.events[eventName]) {\n this.events[eventName].notify(...args);\n }\n }\n scheduleRenderMicrotask() {\n microtask.render(this.render);\n }\n}\n\nexport { VisualElement, getFeatureDefinitions, setFeatureDefinitions };\n//# sourceMappingURL=VisualElement.mjs.map\n","import { motionValue } from '../../value/index.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\n/**\n * Updates motion values from props changes.\n * Uses `any` type for element to avoid circular dependencies with VisualElement.\n */\nfunction updateMotionValuesFromProps(element, next, prev) {\n for (const key in next) {\n const nextValue = next[key];\n const prevValue = prev[key];\n if (isMotionValue(nextValue)) {\n /**\n * If this is a motion value found in props or style, we want to add it\n * to our visual element's motion value map.\n */\n element.addValue(key, nextValue);\n }\n else if (isMotionValue(prevValue)) {\n /**\n * If we're swapping from a motion value to a static value,\n * create a new motion value from that\n */\n element.addValue(key, motionValue(nextValue, { owner: element }));\n }\n else if (prevValue !== nextValue) {\n /**\n * If this is a flat value that has changed, update the motion value\n * or create one if it doesn't exist. We only want to do this if we're\n * not handling the value with our animation state.\n */\n if (element.hasValue(key)) {\n const existingValue = element.getValue(key);\n if (existingValue.liveStyle === true) {\n existingValue.jump(nextValue);\n }\n else if (!existingValue.hasAnimated) {\n existingValue.set(nextValue);\n }\n }\n else {\n const latestValue = element.getStaticValue(key);\n element.addValue(key, motionValue(latestValue !== undefined ? latestValue : nextValue, { owner: element }));\n }\n }\n }\n // Handle removed values\n for (const key in prev) {\n if (next[key] === undefined)\n element.removeValue(key);\n }\n return next;\n}\n\nexport { updateMotionValuesFromProps };\n//# sourceMappingURL=motion-values.mjs.map\n","import { isMotionValue } from '../../value/utils/is-motion-value.mjs';\nimport { DOMKeyframesResolver } from '../../animation/keyframes/DOMKeyframesResolver.mjs';\nimport { VisualElement } from '../VisualElement.mjs';\n\nclass DOMVisualElement extends VisualElement {\n constructor() {\n super(...arguments);\n this.KeyframeResolver = DOMKeyframesResolver;\n }\n sortInstanceNodePosition(a, b) {\n /**\n * compareDocumentPosition returns a bitmask, by using the bitwise &\n * we're returning true if 2 in that bitmask is set to true. 2 is set\n * to true if b preceeds a.\n */\n return a.compareDocumentPosition(b) & 2 ? 1 : -1;\n }\n getBaseTargetFromProps(props, key) {\n const style = props.style;\n return style ? style[key] : undefined;\n }\n removeValueFromRenderState(key, { vars, style }) {\n delete vars[key];\n delete style[key];\n }\n handleChildMotionValue() {\n if (this.childSubscription) {\n this.childSubscription();\n delete this.childSubscription;\n }\n const { children } = this.props;\n if (isMotionValue(children)) {\n this.childSubscription = children.on(\"change\", (latest) => {\n if (this.current) {\n this.current.textContent = `${latest}`;\n }\n });\n }\n }\n}\n\nexport { DOMVisualElement };\n//# sourceMappingURL=DOMVisualElement.mjs.map\n","/**\n * Feature base class for extending VisualElement functionality.\n * Features are plugins that can be mounted/unmounted to add behavior\n * like gestures, animations, or layout tracking.\n */\nclass Feature {\n constructor(node) {\n this.isMounted = false;\n this.node = node;\n }\n update() { }\n}\n\nexport { Feature };\n//# sourceMappingURL=Feature.mjs.map\n","/**\n * Bounding boxes tend to be defined as top, left, right, bottom. For various operations\n * it's easier to consider each axis individually. This function returns a bounding box\n * as a map of single-axis min/max values.\n */\nfunction convertBoundingBoxToBox({ top, left, right, bottom, }) {\n return {\n x: { min: left, max: right },\n y: { min: top, max: bottom },\n };\n}\nfunction convertBoxToBoundingBox({ x, y }) {\n return { top: y.min, right: x.max, bottom: y.max, left: x.min };\n}\n/**\n * Applies a TransformPoint function to a bounding box. TransformPoint is usually a function\n * provided by Framer to allow measured points to be corrected for device scaling. This is used\n * when measuring DOM elements and DOM event points.\n */\nfunction transformBoxPoints(point, transformPoint) {\n if (!transformPoint)\n return point;\n const topLeft = transformPoint({ x: point.left, y: point.top });\n const bottomRight = transformPoint({ x: point.right, y: point.bottom });\n return {\n top: topLeft.y,\n left: topLeft.x,\n bottom: bottomRight.y,\n right: bottomRight.x,\n };\n}\n\nexport { convertBoundingBoxToBox, convertBoxToBoundingBox, transformBoxPoints };\n//# sourceMappingURL=conversion.mjs.map\n","function isIdentityScale(scale) {\n return scale === undefined || scale === 1;\n}\nfunction hasScale({ scale, scaleX, scaleY }) {\n return (!isIdentityScale(scale) ||\n !isIdentityScale(scaleX) ||\n !isIdentityScale(scaleY));\n}\nfunction hasTransform(values) {\n return (hasScale(values) ||\n has2DTranslate(values) ||\n values.z ||\n values.rotate ||\n values.rotateX ||\n values.rotateY ||\n values.skewX ||\n values.skewY);\n}\nfunction has2DTranslate(values) {\n return is2DTranslate(values.x) || is2DTranslate(values.y);\n}\nfunction is2DTranslate(value) {\n return value && value !== \"0%\";\n}\n\nexport { has2DTranslate, hasScale, hasTransform };\n//# sourceMappingURL=has-transform.mjs.map\n","import { mixNumber } from '../../utils/mix/number.mjs';\nimport { hasTransform } from '../utils/has-transform.mjs';\n\n/**\n * Scales a point based on a factor and an originPoint\n */\nfunction scalePoint(point, scale, originPoint) {\n const distanceFromOrigin = point - originPoint;\n const scaled = scale * distanceFromOrigin;\n return originPoint + scaled;\n}\n/**\n * Applies a translate/scale delta to a point\n */\nfunction applyPointDelta(point, translate, scale, originPoint, boxScale) {\n if (boxScale !== undefined) {\n point = scalePoint(point, boxScale, originPoint);\n }\n return scalePoint(point, scale, originPoint) + translate;\n}\n/**\n * Applies a translate/scale delta to an axis\n */\nfunction applyAxisDelta(axis, translate = 0, scale = 1, originPoint, boxScale) {\n axis.min = applyPointDelta(axis.min, translate, scale, originPoint, boxScale);\n axis.max = applyPointDelta(axis.max, translate, scale, originPoint, boxScale);\n}\n/**\n * Applies a translate/scale delta to a box\n */\nfunction applyBoxDelta(box, { x, y }) {\n applyAxisDelta(box.x, x.translate, x.scale, x.originPoint);\n applyAxisDelta(box.y, y.translate, y.scale, y.originPoint);\n}\nconst TREE_SCALE_SNAP_MIN = 0.999999999999;\nconst TREE_SCALE_SNAP_MAX = 1.0000000000001;\n/**\n * Apply a tree of deltas to a box. We do this to calculate the effect of all the transforms\n * in a tree upon our box before then calculating how to project it into our desired viewport-relative box\n *\n * This is the final nested loop within updateLayoutDelta for future refactoring\n */\nfunction applyTreeDeltas(box, treeScale, treePath, isSharedTransition = false) {\n const treeLength = treePath.length;\n if (!treeLength)\n return;\n // Reset the treeScale\n treeScale.x = treeScale.y = 1;\n let node;\n let delta;\n for (let i = 0; i < treeLength; i++) {\n node = treePath[i];\n delta = node.projectionDelta;\n /**\n * TODO: Prefer to remove this, but currently we have motion components with\n * display: contents in Framer.\n */\n const { visualElement } = node.options;\n if (visualElement &&\n visualElement.props.style &&\n visualElement.props.style.display === \"contents\") {\n continue;\n }\n if (isSharedTransition &&\n node.options.layoutScroll &&\n node.scroll &&\n node !== node.root) {\n translateAxis(box.x, -node.scroll.offset.x);\n translateAxis(box.y, -node.scroll.offset.y);\n }\n if (delta) {\n // Incoporate each ancestor's scale into a cumulative treeScale for this component\n treeScale.x *= delta.x.scale;\n treeScale.y *= delta.y.scale;\n // Apply each ancestor's calculated delta into this component's recorded layout box\n applyBoxDelta(box, delta);\n }\n if (isSharedTransition && hasTransform(node.latestValues)) {\n transformBox(box, node.latestValues, node.layout?.layoutBox);\n }\n }\n /**\n * Snap tree scale back to 1 if it's within a non-perceivable threshold.\n * This will help reduce useless scales getting rendered.\n */\n if (treeScale.x < TREE_SCALE_SNAP_MAX &&\n treeScale.x > TREE_SCALE_SNAP_MIN) {\n treeScale.x = 1.0;\n }\n if (treeScale.y < TREE_SCALE_SNAP_MAX &&\n treeScale.y > TREE_SCALE_SNAP_MIN) {\n treeScale.y = 1.0;\n }\n}\nfunction translateAxis(axis, distance) {\n axis.min += distance;\n axis.max += distance;\n}\n/**\n * Apply a transform to an axis from the latest resolved motion values.\n * This function basically acts as a bridge between a flat motion value map\n * and applyAxisDelta\n */\nfunction transformAxis(axis, axisTranslate, axisScale, boxScale, axisOrigin = 0.5) {\n const originPoint = mixNumber(axis.min, axis.max, axisOrigin);\n // Apply the axis delta to the final axis\n applyAxisDelta(axis, axisTranslate, axisScale, originPoint, boxScale);\n}\nfunction resolveAxisTranslate(value, axis) {\n if (typeof value === \"string\") {\n return (parseFloat(value) / 100) * (axis.max - axis.min);\n }\n return value;\n}\n/**\n * Apply a transform to a box from the latest resolved motion values.\n */\nfunction transformBox(box, transform, sourceBox) {\n const resolveBox = sourceBox ?? box;\n transformAxis(box.x, resolveAxisTranslate(transform.x, resolveBox.x), transform.scaleX, transform.scale, transform.originX);\n transformAxis(box.y, resolveAxisTranslate(transform.y, resolveBox.y), transform.scaleY, transform.scale, transform.originY);\n}\n\nexport { applyAxisDelta, applyBoxDelta, applyPointDelta, applyTreeDeltas, scalePoint, transformAxis, transformBox, translateAxis };\n//# sourceMappingURL=delta-apply.mjs.map\n","import { convertBoundingBoxToBox, transformBoxPoints } from '../geometry/conversion.mjs';\nimport { translateAxis } from '../geometry/delta-apply.mjs';\n\nfunction measureViewportBox(instance, transformPoint) {\n return convertBoundingBoxToBox(transformBoxPoints(instance.getBoundingClientRect(), transformPoint));\n}\nfunction measurePageBox(element, rootProjectionNode, transformPagePoint) {\n const viewportBox = measureViewportBox(element, transformPagePoint);\n const { scroll } = rootProjectionNode;\n if (scroll) {\n translateAxis(viewportBox.x, scroll.offset.x);\n translateAxis(viewportBox.y, scroll.offset.y);\n }\n return viewportBox;\n}\n\nexport { measurePageBox, measureViewportBox };\n//# sourceMappingURL=measure.mjs.map\n","import { getValueAsType } from '../../../value/types/utils/get-as-type.mjs';\nimport { numberValueTypes } from '../../../value/types/maps/number.mjs';\nimport { transformPropOrder } from '../../utils/keys-transform.mjs';\n\nconst translateAlias = {\n x: \"translateX\",\n y: \"translateY\",\n z: \"translateZ\",\n transformPerspective: \"perspective\",\n};\nconst numTransforms = transformPropOrder.length;\n/**\n * Build a CSS transform style from individual x/y/scale etc properties.\n *\n * This outputs with a default order of transforms/scales/rotations, this can be customised by\n * providing a transformTemplate function.\n */\nfunction buildTransform(latestValues, transform, transformTemplate) {\n // The transform string we're going to build into.\n let transformString = \"\";\n let transformIsDefault = true;\n /**\n * Loop over all possible transforms in order, adding the ones that\n * are present to the transform string.\n */\n for (let i = 0; i < numTransforms; i++) {\n const key = transformPropOrder[i];\n const value = latestValues[key];\n if (value === undefined)\n continue;\n let valueIsDefault = true;\n if (typeof value === \"number\") {\n valueIsDefault = value === (key.startsWith(\"scale\") ? 1 : 0);\n }\n else {\n const parsed = parseFloat(value);\n valueIsDefault = key.startsWith(\"scale\") ? parsed === 1 : parsed === 0;\n }\n if (!valueIsDefault || transformTemplate) {\n const valueAsType = getValueAsType(value, numberValueTypes[key]);\n if (!valueIsDefault) {\n transformIsDefault = false;\n const transformName = translateAlias[key] || key;\n transformString += `${transformName}(${valueAsType}) `;\n }\n if (transformTemplate) {\n transform[key] = valueAsType;\n }\n }\n }\n // `pathRotation` composes onto `rotate` as a separate additive term so\n // the user's `rotate` is never clobbered. Deliberately not a slot in\n // `transformPropOrder`.\n const pathRotation = latestValues.pathRotation;\n if (pathRotation) {\n transformIsDefault = false;\n transformString += `rotate(${getValueAsType(pathRotation, numberValueTypes.pathRotation)}) `;\n }\n transformString = transformString.trim();\n // If we have a custom `transform` template, pass our transform values and\n // generated transformString to that before returning\n if (transformTemplate) {\n transformString = transformTemplate(transform, transformIsDefault ? \"\" : transformString);\n }\n else if (transformIsDefault) {\n transformString = \"none\";\n }\n return transformString;\n}\n\nexport { buildTransform };\n//# sourceMappingURL=build-transform.mjs.map\n","import { getValueAsType } from '../../../value/types/utils/get-as-type.mjs';\nimport { numberValueTypes } from '../../../value/types/maps/number.mjs';\nimport { transformProps } from '../../utils/keys-transform.mjs';\nimport { isCSSVariableName } from '../../../animation/utils/is-css-variable.mjs';\nimport { buildTransform } from './build-transform.mjs';\n\nfunction buildHTMLStyles(state, latestValues, transformTemplate) {\n const { style, vars, transformOrigin } = state;\n // Track whether we encounter any transform or transformOrigin values.\n let hasTransform = false;\n let hasTransformOrigin = false;\n /**\n * Loop over all our latest animated values and decide whether to handle them\n * as a style or CSS variable.\n *\n * Transforms and transform origins are kept separately for further processing.\n */\n for (const key in latestValues) {\n const value = latestValues[key];\n if (transformProps.has(key)) {\n // If this is a transform, flag to enable further transform processing\n hasTransform = true;\n continue;\n }\n else if (isCSSVariableName(key)) {\n vars[key] = value;\n continue;\n }\n else {\n // Convert the value to its default value type, ie 0 -> \"0px\"\n const valueAsType = getValueAsType(value, numberValueTypes[key]);\n if (key.startsWith(\"origin\")) {\n // If this is a transform origin, flag and enable further transform-origin processing\n hasTransformOrigin = true;\n transformOrigin[key] =\n valueAsType;\n }\n else {\n style[key] = valueAsType;\n }\n }\n }\n if (!latestValues.transform) {\n if (hasTransform || transformTemplate) {\n style.transform = buildTransform(latestValues, state.transform, transformTemplate);\n }\n else if (style.transform) {\n /**\n * If we have previously created a transform but currently don't have any,\n * reset transform style to none.\n */\n style.transform = \"none\";\n }\n }\n /**\n * Build a transformOrigin style. Uses the same defaults as the browser for\n * undefined origins.\n */\n if (hasTransformOrigin) {\n const { originX = \"50%\", originY = \"50%\", originZ = 0, } = transformOrigin;\n style.transformOrigin = `${originX} ${originY} ${originZ}`;\n }\n}\n\nexport { buildHTMLStyles };\n//# sourceMappingURL=build-styles.mjs.map\n","function renderHTML(element, { style, vars }, styleProp, projection) {\n const elementStyle = element.style;\n let key;\n for (key in style) {\n // CSSStyleDeclaration has [index: number]: string; in the types, so we use that as key type.\n elementStyle[key] = style[key];\n }\n // Write projection styles directly to element style\n projection?.applyProjectionStyles(elementStyle, styleProp);\n for (key in vars) {\n // Loop over any CSS variables and assign those.\n // They can only be assigned using `setProperty`.\n elementStyle.setProperty(key, vars[key]);\n }\n}\n\nexport { renderHTML };\n//# sourceMappingURL=render.mjs.map\n","import { px } from '../../value/types/numbers/units.mjs';\n\nfunction pixelsToPercent(pixels, axis) {\n if (axis.max === axis.min)\n return 0;\n return (pixels / (axis.max - axis.min)) * 100;\n}\n/**\n * We always correct borderRadius as a percentage rather than pixels to reduce paints.\n * For example, if you are projecting a box that is 100px wide with a 10px borderRadius\n * into a box that is 200px wide with a 20px borderRadius, that is actually a 10%\n * borderRadius in both states. If we animate between the two in pixels that will trigger\n * a paint each time. If we animate between the two in percentage we'll avoid a paint.\n */\nconst correctBorderRadius = {\n correct: (latest, node) => {\n if (!node.target)\n return latest;\n /**\n * If latest is a string, if it's a percentage we can return immediately as it's\n * going to be stretched appropriately. Otherwise, if it's a pixel, convert it to a number.\n */\n if (typeof latest === \"string\") {\n if (px.test(latest)) {\n latest = parseFloat(latest);\n }\n else {\n return latest;\n }\n }\n /**\n * If latest is a number, it's a pixel value. We use the current viewportBox to calculate that\n * pixel value as a percentage of each axis\n */\n const x = pixelsToPercent(latest, node.target.x);\n const y = pixelsToPercent(latest, node.target.y);\n return `${x}% ${y}%`;\n },\n};\n\nexport { correctBorderRadius, pixelsToPercent };\n//# sourceMappingURL=scale-border-radius.mjs.map\n","import { complex } from '../../value/types/complex/index.mjs';\nimport { mixNumber } from '../../utils/mix/number.mjs';\n\nconst correctBoxShadow = {\n correct: (latest, { treeScale, projectionDelta }) => {\n const original = latest;\n const shadow = complex.parse(latest);\n // TODO: Doesn't support multiple shadows\n if (shadow.length > 5)\n return original;\n const template = complex.createTransformer(latest);\n const offset = typeof shadow[0] !== \"number\" ? 1 : 0;\n // Calculate the overall context scale\n const xScale = projectionDelta.x.scale * treeScale.x;\n const yScale = projectionDelta.y.scale * treeScale.y;\n shadow[0 + offset] /= xScale;\n shadow[1 + offset] /= yScale;\n /**\n * Ideally we'd correct x and y scales individually, but because blur and\n * spread apply to both we have to take a scale average and apply that instead.\n * We could potentially improve the outcome of this by incorporating the ratio between\n * the two scales.\n */\n const averageScale = mixNumber(xScale, yScale, 0.5);\n // Blur\n if (typeof shadow[2 + offset] === \"number\")\n shadow[2 + offset] /= averageScale;\n // Spread\n if (typeof shadow[3 + offset] === \"number\")\n shadow[3 + offset] /= averageScale;\n return template(shadow);\n },\n};\n\nexport { correctBoxShadow };\n//# sourceMappingURL=scale-box-shadow.mjs.map\n","import { isCSSVariableName } from '../../animation/utils/is-css-variable.mjs';\nimport { correctBorderRadius } from './scale-border-radius.mjs';\nimport { correctBoxShadow } from './scale-box-shadow.mjs';\n\nconst scaleCorrectors = {\n borderRadius: {\n ...correctBorderRadius,\n applyTo: [\n \"borderTopLeftRadius\",\n \"borderTopRightRadius\",\n \"borderBottomLeftRadius\",\n \"borderBottomRightRadius\",\n ],\n },\n borderTopLeftRadius: correctBorderRadius,\n borderTopRightRadius: correctBorderRadius,\n borderBottomLeftRadius: correctBorderRadius,\n borderBottomRightRadius: correctBorderRadius,\n boxShadow: correctBoxShadow,\n};\nfunction addScaleCorrector(correctors) {\n for (const key in correctors) {\n scaleCorrectors[key] = correctors[key];\n if (isCSSVariableName(key)) {\n scaleCorrectors[key].isCSSVariable = true;\n }\n }\n}\n\nexport { addScaleCorrector, scaleCorrectors };\n//# sourceMappingURL=scale-correction.mjs.map\n","import { transformProps } from './keys-transform.mjs';\nimport { scaleCorrectors } from '../../projection/styles/scale-correction.mjs';\nexport { addScaleCorrector } from '../../projection/styles/scale-correction.mjs';\n\nfunction isForcedMotionValue(key, { layout, layoutId }) {\n return (transformProps.has(key) ||\n key.startsWith(\"origin\") ||\n ((layout || layoutId !== undefined) &&\n (!!scaleCorrectors[key] || key === \"opacity\")));\n}\n\nexport { isForcedMotionValue, scaleCorrectors };\n//# sourceMappingURL=is-forced-motion-value.mjs.map\n","import { isMotionValue } from '../../../value/utils/is-motion-value.mjs';\nimport { isForcedMotionValue } from '../../utils/is-forced-motion-value.mjs';\n\nfunction scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n const style = props.style;\n const prevStyle = prevProps?.style;\n const newValues = {};\n if (!style)\n return newValues;\n for (const key in style) {\n if (isMotionValue(style[key]) ||\n (prevStyle && isMotionValue(prevStyle[key])) ||\n isForcedMotionValue(key, props) ||\n visualElement?.getValue(key)?.liveStyle !== undefined) {\n newValues[key] = style[key];\n }\n }\n return newValues;\n}\n\nexport { scrapeMotionValuesFromProps };\n//# sourceMappingURL=scrape-motion-values.mjs.map\n","import { isCSSVariableName } from '../../animation/utils/is-css-variable.mjs';\nimport { transformProps } from '../utils/keys-transform.mjs';\nimport { defaultTransformValue, readTransformValue } from '../dom/parse-transform.mjs';\nimport { measureViewportBox } from '../../projection/utils/measure.mjs';\nimport { DOMVisualElement } from '../dom/DOMVisualElement.mjs';\nimport { buildHTMLStyles } from './utils/build-styles.mjs';\nimport { renderHTML } from './utils/render.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\n\nfunction getComputedStyle(element) {\n return window.getComputedStyle(element);\n}\nclass HTMLVisualElement extends DOMVisualElement {\n constructor() {\n super(...arguments);\n this.type = \"html\";\n this.renderInstance = renderHTML;\n }\n readValueFromInstance(instance, key) {\n if (transformProps.has(key)) {\n return this.projection?.isProjecting\n ? defaultTransformValue(key)\n : readTransformValue(instance, key);\n }\n else {\n const computedStyle = getComputedStyle(instance);\n const value = (isCSSVariableName(key)\n ? computedStyle.getPropertyValue(key)\n : computedStyle[key]) || 0;\n return typeof value === \"string\" ? value.trim() : value;\n }\n }\n measureInstanceViewportBox(instance, { transformPagePoint }) {\n return measureViewportBox(instance, transformPagePoint);\n }\n build(renderState, latestValues, props) {\n buildHTMLStyles(renderState, latestValues, props.transformTemplate);\n }\n scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n return scrapeMotionValuesFromProps(props, prevProps, visualElement);\n }\n}\n\nexport { HTMLVisualElement, getComputedStyle };\n//# sourceMappingURL=HTMLVisualElement.mjs.map\n","const dashKeys = {\n offset: \"stroke-dashoffset\",\n array: \"stroke-dasharray\",\n};\nconst camelKeys = {\n offset: \"strokeDashoffset\",\n array: \"strokeDasharray\",\n};\n/**\n * Build SVG path properties. Uses the path's measured length to convert\n * our custom pathLength, pathSpacing and pathOffset into stroke-dashoffset\n * and stroke-dasharray attributes.\n *\n * This function is mutative to reduce per-frame GC.\n *\n * Note: We use unitless values for stroke-dasharray and stroke-dashoffset\n * because Safari incorrectly scales px values when the page is zoomed.\n */\nfunction buildSVGPath(attrs, length, spacing = 1, offset = 0, useDashCase = true) {\n // Normalise path length by setting SVG attribute pathLength to 1\n attrs.pathLength = 1;\n // We use dash case when setting attributes directly to the DOM node and camel case\n // when defining props on a React component.\n const keys = useDashCase ? dashKeys : camelKeys;\n // Build the dash offset (unitless to avoid Safari zoom bug)\n attrs[keys.offset] = `${-offset}`;\n // Build the dash array (unitless to avoid Safari zoom bug)\n attrs[keys.array] = `${length} ${spacing}`;\n}\n\nexport { buildSVGPath };\n//# sourceMappingURL=path.mjs.map\n","import { buildHTMLStyles } from '../../html/utils/build-styles.mjs';\nimport { buildSVGPath } from './path.mjs';\n\n/**\n * CSS Motion Path properties that should remain as CSS styles on SVG elements.\n */\nconst cssMotionPathProperties = [\n \"offsetDistance\",\n \"offsetPath\",\n \"offsetRotate\",\n \"offsetAnchor\",\n];\n/**\n * Build SVG visual attributes, like cx and style.transform\n */\nfunction buildSVGAttrs(state, { attrX, attrY, attrScale, pathLength, pathSpacing = 1, pathOffset = 0, \n// This is object creation, which we try to avoid per-frame.\n...latest }, isSVGTag, transformTemplate, styleProp) {\n buildHTMLStyles(state, latest, transformTemplate);\n /**\n * For svg tags we just want to make sure viewBox is animatable and treat all the styles\n * as normal HTML tags.\n */\n if (isSVGTag) {\n if (state.style.viewBox) {\n state.attrs.viewBox = state.style.viewBox;\n }\n return;\n }\n state.attrs = state.style;\n state.style = {};\n const { attrs, style } = state;\n /**\n * However, we apply transforms as CSS transforms.\n * So if we detect a transform, transformOrigin we take it from attrs and copy it into style.\n */\n if (attrs.transform) {\n style.transform = attrs.transform;\n delete attrs.transform;\n }\n if (style.transform || attrs.transformOrigin) {\n style.transformOrigin = attrs.transformOrigin ?? \"50% 50%\";\n delete attrs.transformOrigin;\n }\n if (style.transform) {\n /**\n * SVG's element transform-origin uses its own median as a reference.\n * Therefore, transformBox becomes a fill-box\n */\n style.transformBox = styleProp?.transformBox ?? \"fill-box\";\n delete attrs.transformBox;\n }\n for (const key of cssMotionPathProperties) {\n if (attrs[key] !== undefined) {\n style[key] = attrs[key];\n delete attrs[key];\n }\n }\n // Render attrX/attrY/attrScale as attributes\n if (attrX !== undefined)\n attrs.x = attrX;\n if (attrY !== undefined)\n attrs.y = attrY;\n if (attrScale !== undefined)\n attrs.scale = attrScale;\n // Build SVG path if one has been defined\n if (pathLength !== undefined) {\n buildSVGPath(attrs, pathLength, pathSpacing, pathOffset, false);\n }\n}\n\nexport { buildSVGAttrs };\n//# sourceMappingURL=build-attrs.mjs.map\n","/**\n * A set of attribute names that are always read/written as camel case.\n */\nconst camelCaseAttributes = new Set([\n \"baseFrequency\",\n \"diffuseConstant\",\n \"kernelMatrix\",\n \"kernelUnitLength\",\n \"keySplines\",\n \"keyTimes\",\n \"limitingConeAngle\",\n \"markerHeight\",\n \"markerWidth\",\n \"numOctaves\",\n \"targetX\",\n \"targetY\",\n \"surfaceScale\",\n \"specularConstant\",\n \"specularExponent\",\n \"stdDeviation\",\n \"tableValues\",\n \"viewBox\",\n \"gradientTransform\",\n \"pathLength\",\n \"startOffset\",\n \"textLength\",\n \"lengthAdjust\",\n]);\n\nexport { camelCaseAttributes };\n//# sourceMappingURL=camel-case-attrs.mjs.map\n","const isSVGTag = (tag) => typeof tag === \"string\" && tag.toLowerCase() === \"svg\";\n\nexport { isSVGTag };\n//# sourceMappingURL=is-svg-tag.mjs.map\n","import { isMotionValue } from '../../../value/utils/is-motion-value.mjs';\nimport { transformPropOrder } from '../../utils/keys-transform.mjs';\nimport { scrapeMotionValuesFromProps as scrapeMotionValuesFromProps$1 } from '../../html/utils/scrape-motion-values.mjs';\n\nfunction scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n const newValues = scrapeMotionValuesFromProps$1(props, prevProps, visualElement);\n for (const key in props) {\n if (isMotionValue(props[key]) ||\n isMotionValue(prevProps[key])) {\n const targetKey = transformPropOrder.indexOf(key) !== -1\n ? \"attr\" + key.charAt(0).toUpperCase() + key.substring(1)\n : key;\n newValues[targetKey] = props[key];\n }\n }\n return newValues;\n}\n\nexport { scrapeMotionValuesFromProps };\n//# sourceMappingURL=scrape-motion-values.mjs.map\n","import { transformProps } from '../utils/keys-transform.mjs';\nimport { getDefaultValueType } from '../../value/types/maps/defaults.mjs';\nimport { createBox } from '../../projection/geometry/models.mjs';\nimport { DOMVisualElement } from '../dom/DOMVisualElement.mjs';\nimport { camelToDash } from '../dom/utils/camel-to-dash.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { camelCaseAttributes } from './utils/camel-case-attrs.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\nimport { renderSVG } from './utils/render.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\n\nclass SVGVisualElement extends DOMVisualElement {\n constructor() {\n super(...arguments);\n this.type = \"svg\";\n this.isSVGTag = false;\n this.measureInstanceViewportBox = createBox;\n }\n getBaseTargetFromProps(props, key) {\n return props[key];\n }\n readValueFromInstance(instance, key) {\n if (transformProps.has(key)) {\n const defaultType = getDefaultValueType(key);\n return defaultType ? defaultType.default || 0 : 0;\n }\n key = !camelCaseAttributes.has(key) ? camelToDash(key) : key;\n return instance.getAttribute(key);\n }\n scrapeMotionValuesFromProps(props, prevProps, visualElement) {\n return scrapeMotionValuesFromProps(props, prevProps, visualElement);\n }\n build(renderState, latestValues, props) {\n buildSVGAttrs(renderState, latestValues, this.isSVGTag, props.transformTemplate, props.style);\n }\n renderInstance(instance, renderState, styleProp, projection) {\n renderSVG(instance, renderState, styleProp, projection);\n }\n mount(instance) {\n this.isSVGTag = isSVGTag(instance.tagName);\n super.mount(instance);\n }\n}\n\nexport { SVGVisualElement };\n//# sourceMappingURL=SVGVisualElement.mjs.map\n","import { camelToDash } from '../../dom/utils/camel-to-dash.mjs';\nimport { renderHTML } from '../../html/utils/render.mjs';\nimport { camelCaseAttributes } from './camel-case-attrs.mjs';\n\nfunction renderSVG(element, renderState, _styleProp, projection) {\n renderHTML(element, renderState, undefined, projection);\n for (const key in renderState.attrs) {\n element.setAttribute(!camelCaseAttributes.has(key) ? camelToDash(key) : key, renderState.attrs[key]);\n }\n}\n\nexport { renderSVG };\n//# sourceMappingURL=render.mjs.map\n","import { isVariantLabel } from './is-variant-label.mjs';\nimport { variantProps } from './variant-props.mjs';\n\nconst numVariantProps = variantProps.length;\n/**\n * Get variant context from a visual element's parent chain.\n * Uses `any` type for visualElement to avoid circular dependencies.\n */\nfunction getVariantContext(visualElement) {\n if (!visualElement)\n return undefined;\n if (!visualElement.isControllingVariants) {\n const context = visualElement.parent\n ? getVariantContext(visualElement.parent) || {}\n : {};\n if (visualElement.props.initial !== undefined) {\n context.initial = visualElement.props.initial;\n }\n return context;\n }\n const context = {};\n for (let i = 0; i < numVariantProps; i++) {\n const name = variantProps[i];\n const prop = visualElement.props[name];\n if (isVariantLabel(prop) || prop === false) {\n context[name] = prop;\n }\n }\n return context;\n}\n\nexport { getVariantContext };\n//# sourceMappingURL=get-variant-context.mjs.map\n","function shallowCompare(next, prev) {\n if (!Array.isArray(prev))\n return false;\n const prevLength = prev.length;\n if (prevLength !== next.length)\n return false;\n for (let i = 0; i < prevLength; i++) {\n if (prev[i] !== next[i])\n return false;\n }\n return true;\n}\n\nexport { shallowCompare };\n//# sourceMappingURL=shallow-compare.mjs.map\n","import { animateVisualElement } from '../../animation/interfaces/visual-element.mjs';\nimport { calcChildStagger } from '../../animation/utils/calc-child-stagger.mjs';\nimport { getVariantContext } from './get-variant-context.mjs';\nimport { isAnimationControls } from './is-animation-controls.mjs';\nimport { isKeyframesTarget } from './is-keyframes-target.mjs';\nimport { isVariantLabel } from './is-variant-label.mjs';\nimport { resolveVariant } from './resolve-dynamic-variants.mjs';\nimport { shallowCompare } from './shallow-compare.mjs';\nimport { variantPriorityOrder } from './variant-props.mjs';\n\nconst reversePriorityOrder = [...variantPriorityOrder].reverse();\nconst numAnimationTypes = variantPriorityOrder.length;\nfunction createAnimateFunction(visualElement) {\n return (animations) => {\n return Promise.all(animations.map(({ animation, options }) => animateVisualElement(visualElement, animation, options)));\n };\n}\nfunction createAnimationState(visualElement) {\n let animate = createAnimateFunction(visualElement);\n let state = createState();\n let isInitialRender = true;\n /**\n * Track whether the animation state has been reset (e.g. via StrictMode\n * double-invocation or Suspense unmount/remount). On the first\n * animateChanges() call after a reset we need to behave like the initial\n * render for variant-inheritance checks, even though isInitialRender is\n * already false.\n */\n let wasReset = false;\n /**\n * This function will be used to reduce the animation definitions for\n * each active animation type into an object of resolved values for it.\n */\n const buildResolvedTypeValues = (type) => (acc, definition) => {\n const resolved = resolveVariant(visualElement, definition, type === \"exit\"\n ? visualElement.presenceContext?.custom\n : undefined);\n if (resolved) {\n const { transition, transitionEnd, ...target } = resolved;\n acc = { ...acc, ...target, ...transitionEnd };\n }\n return acc;\n };\n /**\n * This just allows us to inject mocked animation functions\n * @internal\n */\n function setAnimateFunction(makeAnimator) {\n animate = makeAnimator(visualElement);\n }\n /**\n * When we receive new props, we need to:\n * 1. Create a list of protected keys for each type. This is a directory of\n * value keys that are currently being \"handled\" by types of a higher priority\n * so that whenever an animation is played of a given type, these values are\n * protected from being animated.\n * 2. Determine if an animation type needs animating.\n * 3. Determine if any values have been removed from a type and figure out\n * what to animate those to.\n */\n function animateChanges(changedActiveType) {\n const { props } = visualElement;\n const context = getVariantContext(visualElement.parent) || {};\n /**\n * A list of animations that we'll build into as we iterate through the animation\n * types. This will get executed at the end of the function.\n */\n const animations = [];\n /**\n * Keep track of which values have been removed. Then, as we hit lower priority\n * animation types, we can check if they contain removed values and animate to that.\n */\n const removedKeys = new Set();\n /**\n * A dictionary of all encountered keys. This is an object to let us build into and\n * copy it without iteration. Each time we hit an animation type we set its protected\n * keys - the keys its not allowed to animate - to the latest version of this object.\n */\n let encounteredKeys = {};\n /**\n * If a variant has been removed at a given index, and this component is controlling\n * variant animations, we want to ensure lower-priority variants are forced to animate.\n */\n let removedVariantIndex = Infinity;\n /**\n * Iterate through all animation types in reverse priority order. For each, we want to\n * detect which values it's handling and whether or not they've changed (and therefore\n * need to be animated). If any values have been removed, we want to detect those in\n * lower priority props and flag for animation.\n */\n for (let i = 0; i < numAnimationTypes; i++) {\n const type = reversePriorityOrder[i];\n const typeState = state[type];\n const prop = props[type] !== undefined\n ? props[type]\n : context[type];\n const propIsVariant = isVariantLabel(prop);\n /**\n * If this type has *just* changed isActive status, set activeDelta\n * to that status. Otherwise set to null.\n */\n const activeDelta = type === changedActiveType ? typeState.isActive : null;\n if (activeDelta === false)\n removedVariantIndex = i;\n /**\n * If this prop is an inherited variant, rather than been set directly on the\n * component itself, we want to make sure we allow the parent to trigger animations.\n *\n * TODO: Can probably change this to a !isControllingVariants check\n */\n let isInherited = prop === context[type] &&\n prop !== props[type] &&\n propIsVariant;\n if (isInherited &&\n (isInitialRender || wasReset) &&\n visualElement.manuallyAnimateOnMount) {\n isInherited = false;\n }\n /**\n * Set all encountered keys so far as the protected keys for this type. This will\n * be any key that has been animated or otherwise handled by active, higher-priortiy types.\n */\n typeState.protectedKeys = { ...encounteredKeys };\n // Check if we can skip analysing this prop early\n if (\n // If it isn't active and hasn't *just* been set as inactive\n (!typeState.isActive && activeDelta === null) ||\n // If we didn't and don't have any defined prop for this animation type\n (!prop && !typeState.prevProp) ||\n // Or if the prop doesn't define an animation\n isAnimationControls(prop) ||\n typeof prop === \"boolean\") {\n continue;\n }\n /**\n * If exit is already active and wasn't just activated, skip\n * re-processing to prevent interrupting running exit animations.\n * Re-resolving exit with a changed custom value can start new\n * value animations that stop the originals, leaving the exit\n * animation promise unresolved and the component stuck in the DOM.\n */\n if (type === \"exit\" && typeState.isActive && activeDelta !== true) {\n if (typeState.prevResolvedValues) {\n encounteredKeys = {\n ...encounteredKeys,\n ...typeState.prevResolvedValues,\n };\n }\n continue;\n }\n /**\n * As we go look through the values defined on this type, if we detect\n * a changed value or a value that was removed in a higher priority, we set\n * this to true and add this prop to the animation list.\n */\n const variantDidChange = checkVariantsDidChange(typeState.prevProp, prop);\n let shouldAnimateType = variantDidChange ||\n // If we're making this variant active, we want to always make it active\n (type === changedActiveType &&\n typeState.isActive &&\n !isInherited &&\n propIsVariant) ||\n // If we removed a higher-priority variant (i is in reverse order)\n (i > removedVariantIndex && propIsVariant);\n let handledRemovedValues = false;\n /**\n * As animations can be set as variant lists, variants or target objects, we\n * coerce everything to an array if it isn't one already\n */\n const definitionList = Array.isArray(prop) ? prop : [prop];\n /**\n * Build an object of all the resolved values. We'll use this in the subsequent\n * animateChanges calls to determine whether a value has changed.\n */\n let resolvedValues = definitionList.reduce(buildResolvedTypeValues(type), {});\n if (activeDelta === false)\n resolvedValues = {};\n /**\n * Now we need to loop through all the keys in the prev prop and this prop,\n * and decide:\n * 1. If the value has changed, and needs animating\n * 2. If it has been removed, and needs adding to the removedKeys set\n * 3. If it has been removed in a higher priority type and needs animating\n * 4. If it hasn't been removed in a higher priority but hasn't changed, and\n * needs adding to the type's protectedKeys list.\n */\n const { prevResolvedValues = {} } = typeState;\n const allKeys = {\n ...prevResolvedValues,\n ...resolvedValues,\n };\n const markToAnimate = (key) => {\n shouldAnimateType = true;\n if (removedKeys.has(key)) {\n handledRemovedValues = true;\n removedKeys.delete(key);\n }\n typeState.needsAnimating[key] = true;\n const motionValue = visualElement.getValue(key);\n if (motionValue)\n motionValue.liveStyle = false;\n };\n for (const key in allKeys) {\n const next = resolvedValues[key];\n const prev = prevResolvedValues[key];\n // If we've already handled this we can just skip ahead\n if (encounteredKeys.hasOwnProperty(key))\n continue;\n /**\n * If the value has changed, we probably want to animate it.\n */\n let valueHasChanged = false;\n if (isKeyframesTarget(next) && isKeyframesTarget(prev)) {\n valueHasChanged =\n !shallowCompare(next, prev) || variantDidChange;\n }\n else {\n valueHasChanged = next !== prev;\n }\n if (valueHasChanged) {\n if (next !== undefined && next !== null) {\n // If next is defined and doesn't equal prev, it needs animating\n markToAnimate(key);\n }\n else {\n // If it's undefined, it's been removed.\n removedKeys.add(key);\n }\n }\n else if (next !== undefined && removedKeys.has(key)) {\n /**\n * If next hasn't changed and it isn't undefined, we want to check if it's\n * been removed by a higher priority\n */\n markToAnimate(key);\n }\n else {\n /**\n * If it hasn't changed, we add it to the list of protected values\n * to ensure it doesn't get animated.\n */\n typeState.protectedKeys[key] = true;\n }\n }\n /**\n * Update the typeState so next time animateChanges is called we can compare the\n * latest prop and resolvedValues to these.\n */\n typeState.prevProp = prop;\n typeState.prevResolvedValues = resolvedValues;\n if (typeState.isActive) {\n encounteredKeys = { ...encounteredKeys, ...resolvedValues };\n }\n if ((isInitialRender || wasReset) &&\n visualElement.blockInitialAnimation) {\n shouldAnimateType = false;\n }\n /**\n * If this is an inherited prop we want to skip this animation\n * unless the inherited variants haven't changed on this render.\n */\n const willAnimateViaParent = isInherited && variantDidChange;\n const needsAnimating = !willAnimateViaParent || handledRemovedValues;\n if (shouldAnimateType && needsAnimating) {\n animations.push(...definitionList.map((animation) => {\n const options = { type };\n /**\n * If we're performing the initial animation, but we're not\n * rendering at the same time as the variant-controlling parent,\n * we want to use the parent's transition to calculate the stagger.\n */\n if (typeof animation === \"string\" &&\n (isInitialRender || wasReset) &&\n !willAnimateViaParent &&\n visualElement.manuallyAnimateOnMount &&\n visualElement.parent) {\n const { parent } = visualElement;\n const parentVariant = resolveVariant(parent, animation);\n if (parent.enteringChildren && parentVariant) {\n const { delayChildren } = parentVariant.transition || {};\n options.delay = calcChildStagger(parent.enteringChildren, visualElement, delayChildren);\n }\n }\n return {\n animation: animation,\n options,\n };\n }));\n }\n }\n /**\n * If there are some removed value that haven't been dealt with,\n * we need to create a new animation that falls back either to the value\n * defined in the style prop, or the last read value.\n */\n if (removedKeys.size) {\n const fallbackAnimation = {};\n /**\n * If the initial prop contains a transition we can use that, otherwise\n * allow the animation function to use the visual element's default.\n */\n if (typeof props.initial !== \"boolean\") {\n const initialTransition = resolveVariant(visualElement, Array.isArray(props.initial)\n ? props.initial[0]\n : props.initial);\n if (initialTransition && initialTransition.transition) {\n fallbackAnimation.transition = initialTransition.transition;\n }\n }\n removedKeys.forEach((key) => {\n const fallbackTarget = visualElement.getBaseTarget(key);\n const motionValue = visualElement.getValue(key);\n if (motionValue)\n motionValue.liveStyle = true;\n // @ts-expect-error - @mattgperry to figure if we should do something here\n fallbackAnimation[key] = fallbackTarget ?? null;\n });\n animations.push({ animation: fallbackAnimation });\n }\n let shouldAnimate = Boolean(animations.length);\n if (isInitialRender &&\n (props.initial === false || props.initial === props.animate) &&\n !visualElement.manuallyAnimateOnMount) {\n shouldAnimate = false;\n }\n isInitialRender = false;\n wasReset = false;\n return shouldAnimate ? animate(animations) : Promise.resolve();\n }\n /**\n * Change whether a certain animation type is active.\n */\n function setActive(type, isActive) {\n // If the active state hasn't changed, we can safely do nothing here\n if (state[type].isActive === isActive)\n return Promise.resolve();\n // Propagate active change to children\n visualElement.variantChildren?.forEach((child) => child.animationState?.setActive(type, isActive));\n state[type].isActive = isActive;\n const animations = animateChanges(type);\n for (const key in state) {\n state[key].protectedKeys = {};\n }\n return animations;\n }\n return {\n animateChanges,\n setActive,\n setAnimateFunction,\n getState: () => state,\n reset: () => {\n state = createState();\n wasReset = true;\n },\n };\n}\nfunction checkVariantsDidChange(prev, next) {\n if (typeof next === \"string\") {\n return next !== prev;\n }\n else if (Array.isArray(next)) {\n return !shallowCompare(next, prev);\n }\n return false;\n}\nfunction createTypeState(isActive = false) {\n return {\n isActive,\n protectedKeys: {},\n needsAnimating: {},\n prevResolvedValues: {},\n };\n}\nfunction createState() {\n return {\n animate: createTypeState(true),\n whileInView: createTypeState(),\n whileHover: createTypeState(),\n whileTap: createTypeState(),\n whileDrag: createTypeState(),\n whileFocus: createTypeState(),\n exit: createTypeState(),\n };\n}\n\nexport { checkVariantsDidChange, createAnimationState };\n//# sourceMappingURL=animation-state.mjs.map\n","import { resolveVariant } from '../../render/utils/resolve-dynamic-variants.mjs';\nimport { animateTarget } from './visual-element-target.mjs';\nimport { animateVariant } from './visual-element-variant.mjs';\n\nfunction animateVisualElement(visualElement, definition, options = {}) {\n visualElement.notify(\"AnimationStart\", definition);\n let animation;\n if (Array.isArray(definition)) {\n const animations = definition.map((variant) => animateVariant(visualElement, variant, options));\n animation = Promise.all(animations);\n }\n else if (typeof definition === \"string\") {\n animation = animateVariant(visualElement, definition, options);\n }\n else {\n const resolvedDefinition = typeof definition === \"function\"\n ? resolveVariant(visualElement, definition, options.custom)\n : definition;\n animation = Promise.all(animateTarget(visualElement, resolvedDefinition, options));\n }\n return animation.then(() => {\n visualElement.notify(\"AnimationComplete\", definition);\n });\n}\n\nexport { animateVisualElement };\n//# sourceMappingURL=visual-element.mjs.map\n","/**\n * Reset an axis to the provided origin box.\n *\n * This is a mutative operation.\n */\nfunction copyAxisInto(axis, originAxis) {\n axis.min = originAxis.min;\n axis.max = originAxis.max;\n}\n/**\n * Reset a box to the provided origin box.\n *\n * This is a mutative operation.\n */\nfunction copyBoxInto(box, originBox) {\n copyAxisInto(box.x, originBox.x);\n copyAxisInto(box.y, originBox.y);\n}\n/**\n * Reset a delta to the provided origin box.\n *\n * This is a mutative operation.\n */\nfunction copyAxisDeltaInto(delta, originDelta) {\n delta.translate = originDelta.translate;\n delta.scale = originDelta.scale;\n delta.originPoint = originDelta.originPoint;\n delta.origin = originDelta.origin;\n}\n\nexport { copyAxisDeltaInto, copyAxisInto, copyBoxInto };\n//# sourceMappingURL=copy.mjs.map\n","import { mixNumber } from '../../utils/mix/number.mjs';\n\nconst SCALE_PRECISION = 0.0001;\nconst SCALE_MIN = 1 - SCALE_PRECISION;\nconst SCALE_MAX = 1 + SCALE_PRECISION;\nconst TRANSLATE_PRECISION = 0.01;\nconst TRANSLATE_MIN = 0 - TRANSLATE_PRECISION;\nconst TRANSLATE_MAX = 0 + TRANSLATE_PRECISION;\nfunction calcLength(axis) {\n return axis.max - axis.min;\n}\nfunction isNear(value, target, maxDistance) {\n return Math.abs(value - target) <= maxDistance;\n}\nfunction calcAxisDelta(delta, source, target, origin = 0.5) {\n delta.origin = origin;\n delta.originPoint = mixNumber(source.min, source.max, delta.origin);\n delta.scale = calcLength(target) / calcLength(source);\n delta.translate =\n mixNumber(target.min, target.max, delta.origin) - delta.originPoint;\n if ((delta.scale >= SCALE_MIN && delta.scale <= SCALE_MAX) ||\n isNaN(delta.scale)) {\n delta.scale = 1.0;\n }\n if ((delta.translate >= TRANSLATE_MIN &&\n delta.translate <= TRANSLATE_MAX) ||\n isNaN(delta.translate)) {\n delta.translate = 0.0;\n }\n}\nfunction calcBoxDelta(delta, source, target, origin) {\n calcAxisDelta(delta.x, source.x, target.x, origin ? origin.originX : undefined);\n calcAxisDelta(delta.y, source.y, target.y, origin ? origin.originY : undefined);\n}\nfunction calcRelativeAxis(target, relative, parent, anchor = 0) {\n const anchorPoint = anchor\n ? mixNumber(parent.min, parent.max, anchor)\n : parent.min;\n target.min = anchorPoint + relative.min;\n target.max = target.min + calcLength(relative);\n}\nfunction calcRelativeBox(target, relative, parent, anchor) {\n calcRelativeAxis(target.x, relative.x, parent.x, anchor?.x);\n calcRelativeAxis(target.y, relative.y, parent.y, anchor?.y);\n}\nfunction calcRelativeAxisPosition(target, layout, parent, anchor = 0) {\n const anchorPoint = anchor\n ? mixNumber(parent.min, parent.max, anchor)\n : parent.min;\n target.min = layout.min - anchorPoint;\n target.max = target.min + calcLength(layout);\n}\nfunction calcRelativePosition(target, layout, parent, anchor) {\n calcRelativeAxisPosition(target.x, layout.x, parent.x, anchor?.x);\n calcRelativeAxisPosition(target.y, layout.y, parent.y, anchor?.y);\n}\n\nexport { calcAxisDelta, calcBoxDelta, calcLength, calcRelativeAxis, calcRelativeAxisPosition, calcRelativeBox, calcRelativePosition, isNear };\n//# sourceMappingURL=delta-calc.mjs.map\n","import { mixNumber } from '../../utils/mix/number.mjs';\nimport { percent } from '../../value/types/numbers/units.mjs';\nimport { scalePoint } from './delta-apply.mjs';\n\n/**\n * Remove a delta from a point. This is essentially the steps of applyPointDelta in reverse\n */\nfunction removePointDelta(point, translate, scale, originPoint, boxScale) {\n point -= translate;\n point = scalePoint(point, 1 / scale, originPoint);\n if (boxScale !== undefined) {\n point = scalePoint(point, 1 / boxScale, originPoint);\n }\n return point;\n}\n/**\n * Remove a delta from an axis. This is essentially the steps of applyAxisDelta in reverse\n */\nfunction removeAxisDelta(axis, translate = 0, scale = 1, origin = 0.5, boxScale, originAxis = axis, sourceAxis = axis) {\n if (percent.test(translate)) {\n translate = parseFloat(translate);\n const relativeProgress = mixNumber(sourceAxis.min, sourceAxis.max, translate / 100);\n translate = relativeProgress - sourceAxis.min;\n }\n if (typeof translate !== \"number\")\n return;\n let originPoint = mixNumber(originAxis.min, originAxis.max, origin);\n if (axis === originAxis)\n originPoint -= translate;\n axis.min = removePointDelta(axis.min, translate, scale, originPoint, boxScale);\n axis.max = removePointDelta(axis.max, translate, scale, originPoint, boxScale);\n}\n/**\n * Remove a transforms from an axis. This is essentially the steps of applyAxisTransforms in reverse\n * and acts as a bridge between motion values and removeAxisDelta\n */\nfunction removeAxisTransforms(axis, transforms, [key, scaleKey, originKey], origin, sourceAxis) {\n removeAxisDelta(axis, transforms[key], transforms[scaleKey], transforms[originKey], transforms.scale, origin, sourceAxis);\n}\n/**\n * The names of the motion values we want to apply as translation, scale and origin.\n */\nconst xKeys = [\"x\", \"scaleX\", \"originX\"];\nconst yKeys = [\"y\", \"scaleY\", \"originY\"];\n/**\n * Remove a transforms from an box. This is essentially the steps of applyAxisBox in reverse\n * and acts as a bridge between motion values and removeAxisDelta\n */\nfunction removeBoxTransforms(box, transforms, originBox, sourceBox) {\n removeAxisTransforms(box.x, transforms, xKeys, originBox ? originBox.x : undefined, sourceBox ? sourceBox.x : undefined);\n removeAxisTransforms(box.y, transforms, yKeys, originBox ? originBox.y : undefined, sourceBox ? sourceBox.y : undefined);\n}\n\nexport { removeAxisDelta, removeAxisTransforms, removeBoxTransforms, removePointDelta };\n//# sourceMappingURL=delta-remove.mjs.map\n","import { calcLength } from './delta-calc.mjs';\n\nfunction isAxisDeltaZero(delta) {\n return delta.translate === 0 && delta.scale === 1;\n}\nfunction isDeltaZero(delta) {\n return isAxisDeltaZero(delta.x) && isAxisDeltaZero(delta.y);\n}\nfunction axisEquals(a, b) {\n return a.min === b.min && a.max === b.max;\n}\nfunction boxEquals(a, b) {\n return axisEquals(a.x, b.x) && axisEquals(a.y, b.y);\n}\nfunction axisEqualsRounded(a, b) {\n return (Math.round(a.min) === Math.round(b.min) &&\n Math.round(a.max) === Math.round(b.max));\n}\nfunction boxEqualsRounded(a, b) {\n return axisEqualsRounded(a.x, b.x) && axisEqualsRounded(a.y, b.y);\n}\nfunction aspectRatio(box) {\n return calcLength(box.x) / calcLength(box.y);\n}\nfunction axisDeltaEquals(a, b) {\n return (a.translate === b.translate &&\n a.scale === b.scale &&\n a.originPoint === b.originPoint);\n}\n\nexport { aspectRatio, axisDeltaEquals, axisEquals, axisEqualsRounded, boxEquals, boxEqualsRounded, isDeltaZero };\n//# sourceMappingURL=utils.mjs.map\n","function eachAxis(callback) {\n return [callback(\"x\"), callback(\"y\")];\n}\n\nexport { eachAxis };\n//# sourceMappingURL=each-axis.mjs.map\n","import { mixNumber } from '../../utils/mix/number.mjs';\nimport { percent, px } from '../../value/types/numbers/units.mjs';\nimport { progress, circOut, noop } from 'motion-utils';\n\nconst borderLabels = [\n \"borderTopLeftRadius\",\n \"borderTopRightRadius\",\n \"borderBottomLeftRadius\",\n \"borderBottomRightRadius\",\n];\nconst numBorders = borderLabels.length;\nconst asNumber = (value) => typeof value === \"string\" ? parseFloat(value) : value;\nconst isPx = (value) => typeof value === \"number\" || px.test(value);\nfunction mixValues(target, follow, lead, progress, shouldCrossfadeOpacity, isOnlyMember) {\n if (shouldCrossfadeOpacity) {\n target.opacity = mixNumber(0, lead.opacity ?? 1, easeCrossfadeIn(progress));\n target.opacityExit = mixNumber(follow.opacity ?? 1, 0, easeCrossfadeOut(progress));\n }\n else if (isOnlyMember) {\n target.opacity = mixNumber(follow.opacity ?? 1, lead.opacity ?? 1, progress);\n }\n /**\n * Mix border radius\n */\n for (let i = 0; i < numBorders; i++) {\n const borderLabel = borderLabels[i];\n let followRadius = getRadius(follow, borderLabel);\n let leadRadius = getRadius(lead, borderLabel);\n if (followRadius === undefined && leadRadius === undefined)\n continue;\n followRadius || (followRadius = 0);\n leadRadius || (leadRadius = 0);\n const canMix = followRadius === 0 ||\n leadRadius === 0 ||\n isPx(followRadius) === isPx(leadRadius);\n if (canMix) {\n target[borderLabel] = Math.max(mixNumber(asNumber(followRadius), asNumber(leadRadius), progress), 0);\n if (percent.test(leadRadius) || percent.test(followRadius)) {\n target[borderLabel] += \"%\";\n }\n }\n else {\n target[borderLabel] = leadRadius;\n }\n }\n /**\n * Mix rotation\n */\n if (follow.rotate || lead.rotate) {\n target.rotate = mixNumber(follow.rotate || 0, lead.rotate || 0, progress);\n }\n}\nfunction getRadius(values, radiusName) {\n return values[radiusName] !== undefined\n ? values[radiusName]\n : values.borderRadius;\n}\nconst easeCrossfadeIn = /*@__PURE__*/ compress(0, 0.5, circOut);\nconst easeCrossfadeOut = /*@__PURE__*/ compress(0.5, 0.95, noop);\nfunction compress(min, max, easing) {\n return (p) => {\n // Could replace ifs with clamp\n if (p < min)\n return 0;\n if (p > max)\n return 1;\n return easing(progress(min, max, p));\n };\n}\n\nexport { mixValues };\n//# sourceMappingURL=mix-values.mjs.map\n","function addDomEvent(target, eventName, handler, options = { passive: true }) {\n target.addEventListener(eventName, handler, options);\n return () => target.removeEventListener(eventName, handler);\n}\n\nexport { addDomEvent };\n//# sourceMappingURL=add-dom-event.mjs.map\n","const compareByDepth = (a, b) => a.depth - b.depth;\n\nexport { compareByDepth };\n//# sourceMappingURL=compare-by-depth.mjs.map\n","import { addUniqueItem, removeItem } from 'motion-utils';\nimport { compareByDepth } from './compare-by-depth.mjs';\n\nclass FlatTree {\n constructor() {\n this.children = [];\n this.isDirty = false;\n }\n add(child) {\n addUniqueItem(this.children, child);\n this.isDirty = true;\n }\n remove(child) {\n removeItem(this.children, child);\n this.isDirty = true;\n }\n forEach(callback) {\n this.isDirty && this.children.sort(compareByDepth);\n this.isDirty = false;\n this.children.forEach(callback);\n }\n}\n\nexport { FlatTree };\n//# sourceMappingURL=flat-tree.mjs.map\n","import { isMotionValue } from './is-motion-value.mjs';\n\n/**\n * If the provided value is a MotionValue, this returns the actual value, otherwise just the value itself\n */\nfunction resolveMotionValue(value) {\n return isMotionValue(value) ? value.get() : value;\n}\n\nexport { resolveMotionValue };\n//# sourceMappingURL=resolve-motion-value.mjs.map\n","import { addUniqueItem, removeItem } from 'motion-utils';\n\nclass NodeStack {\n constructor() {\n this.members = [];\n }\n add(node) {\n addUniqueItem(this.members, node);\n for (let i = this.members.length - 1; i >= 0; i--) {\n const member = this.members[i];\n if (member === node || member === this.lead || member === this.prevLead)\n continue;\n const inst = member.instance;\n if ((!inst || inst.isConnected === false) && !member.snapshot) {\n removeItem(this.members, member);\n member.unmount();\n }\n }\n node.scheduleRender();\n }\n remove(node) {\n removeItem(this.members, node);\n if (node === this.prevLead)\n this.prevLead = undefined;\n if (node === this.lead) {\n const prevLead = this.members[this.members.length - 1];\n if (prevLead)\n this.promote(prevLead);\n }\n }\n relegate(node) {\n for (let i = this.members.indexOf(node) - 1; i >= 0; i--) {\n const member = this.members[i];\n if (member.isPresent !== false && member.instance?.isConnected !== false) {\n this.promote(member);\n return true;\n }\n }\n return false;\n }\n promote(node, preserveFollowOpacity) {\n const prevLead = this.lead;\n if (node === prevLead)\n return;\n this.prevLead = prevLead;\n this.lead = node;\n node.show();\n if (prevLead) {\n prevLead.updateSnapshot();\n node.scheduleRender();\n const { layoutDependency: prevDep } = prevLead.options;\n const { layoutDependency: nextDep } = node.options;\n if (prevDep === undefined || prevDep !== nextDep) {\n node.resumeFrom = prevLead;\n if (preserveFollowOpacity)\n prevLead.preserveOpacity = true;\n if (prevLead.snapshot) {\n node.snapshot = prevLead.snapshot;\n node.snapshot.latestValues =\n prevLead.animationValues || prevLead.latestValues;\n }\n if (node.root?.isUpdating)\n node.isLayoutDirty = true;\n }\n if (node.options.crossfade === false)\n prevLead.hide();\n }\n }\n exitAnimationComplete() {\n this.members.forEach((member) => {\n member.options.onExitComplete?.();\n member.resumingFrom?.options.onExitComplete?.();\n });\n }\n scheduleRender() {\n this.members.forEach((member) => member.instance && member.scheduleRender(false));\n }\n removeLeadSnapshot() {\n if (this.lead?.snapshot)\n this.lead.snapshot = undefined;\n }\n}\n\nexport { NodeStack };\n//# sourceMappingURL=stack.mjs.map\n","/**\n * This should only ever be modified on the client otherwise it'll\n * persist through server requests. If we need instanced states we\n * could lazy-init via root.\n */\nconst globalProjectionState = {\n /**\n * Global flag as to whether the tree has animated since the last time\n * we resized the window\n */\n hasAnimatedSinceResize: true,\n /**\n * We set this to true once, on the first update. Any nodes added to the tree beyond that\n * update will be given a `data-projection-id` attribute.\n */\n hasEverUpdated: false,\n};\n\nexport { globalProjectionState };\n//# sourceMappingURL=state.mjs.map\n","import { SubscriptionManager, clamp, noop } from 'motion-utils';\nimport { animateSingleValue } from '../../animation/animate/single-value.mjs';\nimport { getOptimisedAppearId } from '../../animation/optimized-appear/get-appear-id.mjs';\nimport { getValueTransition } from '../../animation/utils/get-value-transition.mjs';\nimport { microtask } from '../../frameloop/microtask.mjs';\nimport { time } from '../../frameloop/sync-time.mjs';\nimport { scaleCorrectors } from '../styles/scale-correction.mjs';\nimport { activeAnimations } from '../../stats/animation-count.mjs';\nimport { statsBuffer } from '../../stats/buffer.mjs';\nimport { delay } from '../../utils/delay.mjs';\nimport { isSVGElement } from '../../utils/is-svg-element.mjs';\nimport { isSVGSVGElement } from '../../utils/is-svg-svg-element.mjs';\nimport { mixNumber } from '../../utils/mix/number.mjs';\nimport { motionValue } from '../../value/index.mjs';\nimport { resolveMotionValue } from '../../value/utils/resolve-motion-value.mjs';\nimport { mixValues } from '../animation/mix-values.mjs';\nimport { copyBoxInto, copyAxisDeltaInto, copyAxisInto } from '../geometry/copy.mjs';\nimport { translateAxis, transformBox, applyBoxDelta, applyTreeDeltas } from '../geometry/delta-apply.mjs';\nimport { calcLength, calcRelativeBox, calcRelativePosition, calcBoxDelta, isNear } from '../geometry/delta-calc.mjs';\nimport { removeBoxTransforms } from '../geometry/delta-remove.mjs';\nimport { createBox, createDelta } from '../geometry/models.mjs';\nimport { boxEqualsRounded, isDeltaZero, axisDeltaEquals, boxEquals, aspectRatio } from '../geometry/utils.mjs';\nimport { NodeStack } from '../shared/stack.mjs';\nimport { buildProjectionTransform } from '../styles/transform.mjs';\nimport { eachAxis } from '../utils/each-axis.mjs';\nimport { FlatTree } from '../utils/flat-tree.mjs';\nimport { hasTransform, hasScale, has2DTranslate } from '../utils/has-transform.mjs';\nimport { globalProjectionState } from './state.mjs';\nimport { frame, cancelFrame, frameData, frameSteps } from '../../frameloop/frame.mjs';\n\nconst metrics = {\n nodes: 0,\n calculatedTargetDeltas: 0,\n calculatedProjections: 0,\n};\nconst transformAxes = [\"\", \"X\", \"Y\", \"Z\"];\n/**\n * We use 1000 as the animation target as 0-1000 maps better to pixels than 0-1\n * which has a noticeable difference in spring animations\n */\nconst animationTarget = 1000;\nlet id = 0;\nfunction resetDistortingTransform(key, visualElement, values, sharedAnimationValues) {\n const { latestValues } = visualElement;\n // Record the distorting transform and then temporarily set it to 0\n if (latestValues[key]) {\n values[key] = latestValues[key];\n visualElement.setStaticValue(key, 0);\n if (sharedAnimationValues) {\n sharedAnimationValues[key] = 0;\n }\n }\n}\nfunction cancelTreeOptimisedTransformAnimations(projectionNode) {\n projectionNode.hasCheckedOptimisedAppear = true;\n if (projectionNode.root === projectionNode)\n return;\n const { visualElement } = projectionNode.options;\n if (!visualElement)\n return;\n const appearId = getOptimisedAppearId(visualElement);\n if (window.MotionHasOptimisedAnimation(appearId, \"transform\")) {\n const { layout, layoutId } = projectionNode.options;\n window.MotionCancelOptimisedAnimation(appearId, \"transform\", frame, !(layout || layoutId));\n }\n const { parent } = projectionNode;\n if (parent && !parent.hasCheckedOptimisedAppear) {\n cancelTreeOptimisedTransformAnimations(parent);\n }\n}\nfunction createProjectionNode({ attachResizeListener, defaultParent, measureScroll, checkIsScrollRoot, resetTransform, }) {\n return class ProjectionNode {\n constructor(latestValues = {}, parent = defaultParent?.()) {\n /**\n * A unique ID generated for every projection node.\n */\n this.id = id++;\n /**\n * An id that represents a unique session instigated by startUpdate.\n */\n this.animationId = 0;\n this.animationCommitId = 0;\n /**\n * A Set containing all this component's children. This is used to iterate\n * through the children.\n *\n * TODO: This could be faster to iterate as a flat array stored on the root node.\n */\n this.children = new Set();\n /**\n * Options for the node. We use this to configure what kind of layout animations\n * we should perform (if any).\n */\n this.options = {};\n /**\n * We use this to detect when its safe to shut down part of a projection tree.\n * We have to keep projecting children for scale correction and relative projection\n * until all their parents stop performing layout animations.\n */\n this.isTreeAnimating = false;\n this.isAnimationBlocked = false;\n /**\n * Flag to true if we think this layout has been changed. We can't always know this,\n * currently we set it to true every time a component renders, or if it has a layoutDependency\n * if that has changed between renders. Additionally, components can be grouped by LayoutGroup\n * and if one node is dirtied, they all are.\n */\n this.isLayoutDirty = false;\n /**\n * Flag to true if we think the projection calculations for this node needs\n * recalculating as a result of an updated transform or layout animation.\n */\n this.isProjectionDirty = false;\n /**\n * Flag to true if the layout *or* transform has changed. This then gets propagated\n * throughout the projection tree, forcing any element below to recalculate on the next frame.\n */\n this.isSharedProjectionDirty = false;\n /**\n * Flag transform dirty. This gets propagated throughout the whole tree but is only\n * respected by shared nodes.\n */\n this.isTransformDirty = false;\n /**\n * Block layout updates for instant layout transitions throughout the tree.\n */\n this.updateManuallyBlocked = false;\n this.updateBlockedByResize = false;\n /**\n * Set to true between the start of the first `willUpdate` call and the end of the `didUpdate`\n * call.\n */\n this.isUpdating = false;\n /**\n * If this is an SVG element we currently disable projection transforms\n */\n this.isSVG = false;\n /**\n * Flag to true (during promotion) if a node doing an instant layout transition needs to reset\n * its projection styles.\n */\n this.needsReset = false;\n /**\n * Flags whether this node should have its transform reset prior to measuring.\n */\n this.shouldResetTransform = false;\n /**\n * Store whether this node has been checked for optimised appear animations. As\n * effects fire bottom-up, and we want to look up the tree for appear animations,\n * this makes sure we only check each path once, stopping at nodes that\n * have already been checked.\n */\n this.hasCheckedOptimisedAppear = false;\n /**\n * An object representing the calculated contextual/accumulated/tree scale.\n * This will be used to scale calculcated projection transforms, as these are\n * calculated in screen-space but need to be scaled for elements to layoutly\n * make it to their calculated destinations.\n *\n * TODO: Lazy-init\n */\n this.treeScale = { x: 1, y: 1 };\n /**\n *\n */\n this.eventHandlers = new Map();\n this.hasTreeAnimated = false;\n this.layoutVersion = 0;\n // Note: Currently only running on root node\n this.updateScheduled = false;\n this.scheduleUpdate = () => this.update();\n this.projectionUpdateScheduled = false;\n this.checkUpdateFailed = () => {\n if (this.isUpdating) {\n this.isUpdating = false;\n this.clearAllSnapshots();\n }\n };\n /**\n * This is a multi-step process as shared nodes might be of different depths. Nodes\n * are sorted by depth order, so we need to resolve the entire tree before moving to\n * the next step.\n */\n this.updateProjection = () => {\n this.projectionUpdateScheduled = false;\n /**\n * Reset debug counts. Manually resetting rather than creating a new\n * object each frame.\n */\n if (statsBuffer.value) {\n metrics.nodes =\n metrics.calculatedTargetDeltas =\n metrics.calculatedProjections =\n 0;\n }\n this.nodes.forEach(propagateDirtyNodes);\n this.nodes.forEach(resolveTargetDelta);\n this.nodes.forEach(calcProjection);\n this.nodes.forEach(cleanDirtyNodes);\n if (statsBuffer.addProjectionMetrics) {\n statsBuffer.addProjectionMetrics(metrics);\n }\n };\n /**\n * Frame calculations\n */\n this.resolvedRelativeTargetAt = 0.0;\n this.linkedParentVersion = 0;\n this.hasProjected = false;\n this.isVisible = true;\n this.animationProgress = 0;\n /**\n * Shared layout\n */\n // TODO Only running on root node\n this.sharedNodes = new Map();\n this.latestValues = latestValues;\n this.root = parent ? parent.root || parent : this;\n this.path = parent ? [...parent.path, parent] : [];\n this.parent = parent;\n this.depth = parent ? parent.depth + 1 : 0;\n for (let i = 0; i < this.path.length; i++) {\n this.path[i].shouldResetTransform = true;\n }\n if (this.root === this)\n this.nodes = new FlatTree();\n }\n addEventListener(name, handler) {\n if (!this.eventHandlers.has(name)) {\n this.eventHandlers.set(name, new SubscriptionManager());\n }\n return this.eventHandlers.get(name).add(handler);\n }\n notifyListeners(name, ...args) {\n const subscriptionManager = this.eventHandlers.get(name);\n subscriptionManager && subscriptionManager.notify(...args);\n }\n hasListeners(name) {\n return this.eventHandlers.has(name);\n }\n /**\n * Lifecycles\n */\n mount(instance) {\n if (this.instance)\n return;\n this.isSVG = isSVGElement(instance) && !isSVGSVGElement(instance);\n this.instance = instance;\n const { layoutId, layout, visualElement } = this.options;\n if (visualElement && !visualElement.current) {\n visualElement.mount(instance);\n }\n this.root.nodes.add(this);\n this.parent && this.parent.children.add(this);\n if (this.root.hasTreeAnimated && (layout || layoutId)) {\n this.isLayoutDirty = true;\n }\n if (attachResizeListener) {\n let cancelDelay;\n let innerWidth = 0;\n const resizeUnblockUpdate = () => (this.root.updateBlockedByResize = false);\n // Set initial innerWidth in a frame.read callback to batch the read\n frame.read(() => {\n innerWidth = window.innerWidth;\n });\n attachResizeListener(instance, () => {\n const newInnerWidth = window.innerWidth;\n if (newInnerWidth === innerWidth)\n return;\n innerWidth = newInnerWidth;\n this.root.updateBlockedByResize = true;\n cancelDelay && cancelDelay();\n cancelDelay = delay(resizeUnblockUpdate, 250);\n if (globalProjectionState.hasAnimatedSinceResize) {\n globalProjectionState.hasAnimatedSinceResize = false;\n this.nodes.forEach(finishAnimation);\n }\n });\n }\n if (layoutId) {\n this.root.registerSharedNode(layoutId, this);\n }\n // Only register the handler if it requires layout animation\n if (this.options.animate !== false &&\n visualElement &&\n (layoutId || layout)) {\n this.addEventListener(\"didUpdate\", ({ delta, hasLayoutChanged, hasRelativeLayoutChanged, layout: newLayout, }) => {\n if (this.isTreeAnimationBlocked()) {\n this.target = undefined;\n this.relativeTarget = undefined;\n return;\n }\n // TODO: Check here if an animation exists\n const layoutTransition = this.options.transition ||\n visualElement.getDefaultTransition() ||\n defaultLayoutTransition;\n const { onLayoutAnimationStart, onLayoutAnimationComplete, } = visualElement.getProps();\n /**\n * The target layout of the element might stay the same,\n * but its position relative to its parent has changed.\n */\n const hasTargetChanged = !this.targetLayout ||\n !boxEqualsRounded(this.targetLayout, newLayout);\n /*\n * Note: Disabled to fix relative animations always triggering new\n * layout animations. If this causes further issues, we can try\n * a different approach to detecting relative target changes.\n */\n // || hasRelativeLayoutChanged\n /**\n * If the layout hasn't seemed to have changed, it might be that the\n * element is visually in the same place in the document but its position\n * relative to its parent has indeed changed. So here we check for that.\n */\n const hasOnlyRelativeTargetChanged = !hasLayoutChanged && hasRelativeLayoutChanged;\n if (this.options.layoutRoot ||\n this.resumeFrom ||\n hasOnlyRelativeTargetChanged ||\n (hasLayoutChanged &&\n (hasTargetChanged || !this.currentAnimation))) {\n if (this.resumeFrom) {\n this.resumingFrom = this.resumeFrom;\n this.resumingFrom.resumingFrom = undefined;\n }\n const animationOptions = {\n ...getValueTransition(layoutTransition, \"layout\"),\n onPlay: onLayoutAnimationStart,\n onComplete: onLayoutAnimationComplete,\n };\n if (visualElement.shouldReduceMotion ||\n this.options.layoutRoot) {\n animationOptions.delay = 0;\n animationOptions.type = false;\n }\n this.startAnimation(animationOptions);\n /**\n * Set animation origin after starting animation to avoid layout jump\n * caused by stopping previous layout animation\n */\n this.setAnimationOrigin(delta, hasOnlyRelativeTargetChanged, animationOptions\n .path);\n }\n else {\n /**\n * If the layout hasn't changed and we have an animation that hasn't started yet,\n * finish it immediately. Otherwise it will be animating from a location\n * that was probably never committed to screen and look like a jumpy box.\n */\n if (!hasLayoutChanged) {\n finishAnimation(this);\n }\n if (this.isLead() && this.options.onExitComplete) {\n this.options.onExitComplete();\n }\n }\n this.targetLayout = newLayout;\n });\n }\n }\n unmount() {\n this.options.layoutId && this.willUpdate();\n this.root.nodes.remove(this);\n const stack = this.getStack();\n stack && stack.remove(this);\n this.parent && this.parent.children.delete(this);\n this.instance = undefined;\n this.eventHandlers.clear();\n cancelFrame(this.updateProjection);\n }\n // only on the root\n blockUpdate() {\n this.updateManuallyBlocked = true;\n }\n unblockUpdate() {\n this.updateManuallyBlocked = false;\n }\n isUpdateBlocked() {\n return this.updateManuallyBlocked || this.updateBlockedByResize;\n }\n isTreeAnimationBlocked() {\n return (this.isAnimationBlocked ||\n (this.parent && this.parent.isTreeAnimationBlocked()) ||\n false);\n }\n // Note: currently only running on root node\n startUpdate() {\n if (this.isUpdateBlocked())\n return;\n this.isUpdating = true;\n this.nodes && this.nodes.forEach(resetSkewAndRotation);\n this.animationId++;\n }\n getTransformTemplate() {\n const { visualElement } = this.options;\n return visualElement && visualElement.getProps().transformTemplate;\n }\n willUpdate(shouldNotifyListeners = true) {\n this.root.hasTreeAnimated = true;\n if (this.root.isUpdateBlocked()) {\n this.options.onExitComplete && this.options.onExitComplete();\n return;\n }\n /**\n * If we're running optimised appear animations then these must be\n * cancelled before measuring the DOM. This is so we can measure\n * the true layout of the element rather than the WAAPI animation\n * which will be unaffected by the resetSkewAndRotate step.\n *\n * Note: This is a DOM write. Worst case scenario is this is sandwiched\n * between other snapshot reads which will cause unnecessary style recalculations.\n * This has to happen here though, as we don't yet know which nodes will need\n * snapshots in startUpdate(), but we only want to cancel optimised animations\n * if a layout animation measurement is actually going to be affected by them.\n */\n if (window.MotionCancelOptimisedAnimation &&\n !this.hasCheckedOptimisedAppear) {\n cancelTreeOptimisedTransformAnimations(this);\n }\n !this.root.isUpdating && this.root.startUpdate();\n if (this.isLayoutDirty)\n return;\n this.isLayoutDirty = true;\n for (let i = 0; i < this.path.length; i++) {\n const node = this.path[i];\n node.shouldResetTransform = true;\n /**\n * Percentage translates resolve against layoutBox dimensions,\n * so ancestors with them must be re-measured after transform reset.\n */\n if (typeof node.latestValues.x === \"string\" ||\n typeof node.latestValues.y === \"string\") {\n node.isLayoutDirty = true;\n }\n node.updateScroll(\"snapshot\");\n if (node.options.layoutRoot) {\n node.willUpdate(false);\n }\n }\n const { layoutId, layout } = this.options;\n if (layoutId === undefined && !layout)\n return;\n const transformTemplate = this.getTransformTemplate();\n this.prevTransformTemplateValue = transformTemplate\n ? transformTemplate(this.latestValues, \"\")\n : undefined;\n this.updateSnapshot();\n shouldNotifyListeners && this.notifyListeners(\"willUpdate\");\n }\n update() {\n this.updateScheduled = false;\n const updateWasBlocked = this.isUpdateBlocked();\n // When doing an instant transition, we skip the layout update,\n // but should still clean up the measurements so that the next\n // snapshot could be taken correctly.\n if (updateWasBlocked) {\n const wasBlockedByResize = this.updateBlockedByResize;\n this.unblockUpdate();\n this.updateBlockedByResize = false;\n this.clearAllSnapshots();\n /**\n * When blocked by resize, still measure layouts so\n * callbacks like onLayoutMeasure fire (e.g. Reorder).\n * Skip notifyLayoutUpdate to prevent animations.\n */\n if (wasBlockedByResize) {\n this.nodes.forEach(forceLayoutMeasure);\n }\n this.nodes.forEach(clearMeasurements);\n return;\n }\n /**\n * If this is a repeat of didUpdate then ignore the animation.\n */\n if (this.animationId <= this.animationCommitId) {\n this.nodes.forEach(clearIsLayoutDirty);\n return;\n }\n this.animationCommitId = this.animationId;\n if (!this.isUpdating) {\n this.nodes.forEach(clearIsLayoutDirty);\n }\n else {\n this.isUpdating = false;\n /**\n * Ensure animation-blocked nodes (e.g. during drag)\n * get measured even when memoized (willUpdate skipped).\n */\n this.nodes.forEach(ensureDraggedNodesSnapshotted);\n /**\n * Write\n */\n this.nodes.forEach(resetTransformStyle);\n /**\n * Read ==================\n */\n // Update layout measurements of updated children\n this.nodes.forEach(updateLayout);\n /**\n * Write\n */\n // Notify listeners that the layout is updated\n this.nodes.forEach(notifyLayoutUpdate);\n }\n this.clearAllSnapshots();\n /**\n * Manually flush any pending updates. Ideally\n * we could leave this to the following requestAnimationFrame but this seems\n * to leave a flash of incorrectly styled content.\n */\n const now = time.now();\n frameData.delta = clamp(0, 1000 / 60, now - frameData.timestamp);\n frameData.timestamp = now;\n frameData.isProcessing = true;\n frameSteps.update.process(frameData);\n frameSteps.preRender.process(frameData);\n frameSteps.render.process(frameData);\n frameData.isProcessing = false;\n }\n didUpdate() {\n if (!this.updateScheduled) {\n this.updateScheduled = true;\n microtask.read(this.scheduleUpdate);\n }\n }\n clearAllSnapshots() {\n this.nodes.forEach(clearSnapshot);\n this.sharedNodes.forEach(removeLeadSnapshots);\n }\n scheduleUpdateProjection() {\n if (!this.projectionUpdateScheduled) {\n this.projectionUpdateScheduled = true;\n frame.preRender(this.updateProjection, false, true);\n }\n }\n scheduleCheckAfterUnmount() {\n /**\n * If the unmounting node is in a layoutGroup and did trigger a willUpdate,\n * we manually call didUpdate to give a chance to the siblings to animate.\n * Otherwise, cleanup all snapshots to prevents future nodes from reusing them.\n */\n frame.postRender(() => {\n if (this.isLayoutDirty) {\n this.root.didUpdate();\n }\n else {\n this.root.checkUpdateFailed();\n }\n });\n }\n /**\n * Update measurements\n */\n updateSnapshot() {\n if (this.snapshot || !this.instance)\n return;\n this.snapshot = this.measure();\n if (this.snapshot &&\n !calcLength(this.snapshot.measuredBox.x) &&\n !calcLength(this.snapshot.measuredBox.y)) {\n this.snapshot = undefined;\n }\n }\n updateLayout() {\n if (!this.instance)\n return;\n this.updateScroll();\n if (!(this.options.alwaysMeasureLayout && this.isLead()) &&\n !this.isLayoutDirty) {\n return;\n }\n /**\n * When a node is mounted, it simply resumes from the prevLead's\n * snapshot instead of taking a new one, but the ancestors scroll\n * might have updated while the prevLead is unmounted. We need to\n * update the scroll again to make sure the layout we measure is\n * up to date.\n */\n if (this.resumeFrom && !this.resumeFrom.instance) {\n for (let i = 0; i < this.path.length; i++) {\n const node = this.path[i];\n node.updateScroll();\n }\n }\n const prevLayout = this.layout;\n this.layout = this.measure(false);\n this.layoutVersion++;\n if (!this.layoutCorrected)\n this.layoutCorrected = createBox();\n this.isLayoutDirty = false;\n this.projectionDelta = undefined;\n this.notifyListeners(\"measure\", this.layout.layoutBox);\n const { visualElement } = this.options;\n visualElement &&\n visualElement.notify(\"LayoutMeasure\", this.layout.layoutBox, prevLayout ? prevLayout.layoutBox : undefined);\n }\n updateScroll(phase = \"measure\") {\n let needsMeasurement = Boolean(this.options.layoutScroll && this.instance);\n if (this.scroll &&\n this.scroll.animationId === this.root.animationId &&\n this.scroll.phase === phase) {\n needsMeasurement = false;\n }\n if (needsMeasurement && this.instance) {\n const isRoot = checkIsScrollRoot(this.instance);\n this.scroll = {\n animationId: this.root.animationId,\n phase,\n isRoot,\n offset: measureScroll(this.instance),\n wasRoot: this.scroll ? this.scroll.isRoot : isRoot,\n };\n }\n }\n resetTransform() {\n if (!resetTransform)\n return;\n const isResetRequested = this.isLayoutDirty ||\n this.shouldResetTransform ||\n this.options.alwaysMeasureLayout;\n const hasProjection = this.projectionDelta && !isDeltaZero(this.projectionDelta);\n const transformTemplate = this.getTransformTemplate();\n const transformTemplateValue = transformTemplate\n ? transformTemplate(this.latestValues, \"\")\n : undefined;\n const transformTemplateHasChanged = transformTemplateValue !== this.prevTransformTemplateValue;\n if (isResetRequested &&\n this.instance &&\n (hasProjection ||\n hasTransform(this.latestValues) ||\n transformTemplateHasChanged)) {\n resetTransform(this.instance, transformTemplateValue);\n this.shouldResetTransform = false;\n this.scheduleRender();\n }\n }\n measure(removeTransform = true) {\n const pageBox = this.measurePageBox();\n let layoutBox = this.removeElementScroll(pageBox);\n /**\n * Measurements taken during the pre-render stage\n * still have transforms applied so we remove them\n * via calculation.\n */\n if (removeTransform) {\n layoutBox = this.removeTransform(layoutBox);\n }\n roundBox(layoutBox);\n return {\n animationId: this.root.animationId,\n measuredBox: pageBox,\n layoutBox,\n latestValues: {},\n source: this.id,\n };\n }\n measurePageBox() {\n const { visualElement } = this.options;\n if (!visualElement)\n return createBox();\n const box = visualElement.measureViewportBox();\n const wasInScrollRoot = this.scroll?.wasRoot || this.path.some(checkNodeWasScrollRoot);\n if (!wasInScrollRoot) {\n // Remove viewport scroll to give page-relative coordinates\n const { scroll } = this.root;\n if (scroll) {\n translateAxis(box.x, scroll.offset.x);\n translateAxis(box.y, scroll.offset.y);\n }\n }\n return box;\n }\n removeElementScroll(box) {\n const boxWithoutScroll = createBox();\n copyBoxInto(boxWithoutScroll, box);\n if (this.scroll?.wasRoot) {\n return boxWithoutScroll;\n }\n /**\n * Performance TODO: Keep a cumulative scroll offset down the tree\n * rather than loop back up the path.\n */\n for (let i = 0; i < this.path.length; i++) {\n const node = this.path[i];\n const { scroll, options } = node;\n if (node !== this.root && scroll && options.layoutScroll) {\n /**\n * If this is a new scroll root, we want to remove all previous scrolls\n * from the viewport box.\n */\n if (scroll.wasRoot) {\n copyBoxInto(boxWithoutScroll, box);\n }\n translateAxis(boxWithoutScroll.x, scroll.offset.x);\n translateAxis(boxWithoutScroll.y, scroll.offset.y);\n }\n }\n return boxWithoutScroll;\n }\n applyTransform(box, transformOnly = false, output) {\n const withTransforms = output || createBox();\n copyBoxInto(withTransforms, box);\n for (let i = 0; i < this.path.length; i++) {\n const node = this.path[i];\n if (!transformOnly &&\n node.options.layoutScroll &&\n node.scroll &&\n node !== node.root) {\n translateAxis(withTransforms.x, -node.scroll.offset.x);\n translateAxis(withTransforms.y, -node.scroll.offset.y);\n }\n if (!hasTransform(node.latestValues))\n continue;\n transformBox(withTransforms, node.latestValues, node.layout?.layoutBox);\n }\n if (hasTransform(this.latestValues)) {\n transformBox(withTransforms, this.latestValues, this.layout?.layoutBox);\n }\n return withTransforms;\n }\n removeTransform(box) {\n const boxWithoutTransform = createBox();\n copyBoxInto(boxWithoutTransform, box);\n for (let i = 0; i < this.path.length; i++) {\n const node = this.path[i];\n if (!hasTransform(node.latestValues))\n continue;\n let sourceBox;\n if (node.instance) {\n hasScale(node.latestValues) && node.updateSnapshot();\n sourceBox = createBox();\n copyBoxInto(sourceBox, node.measurePageBox());\n }\n removeBoxTransforms(boxWithoutTransform, node.latestValues, node.snapshot?.layoutBox, sourceBox);\n }\n if (hasTransform(this.latestValues)) {\n removeBoxTransforms(boxWithoutTransform, this.latestValues);\n }\n return boxWithoutTransform;\n }\n setTargetDelta(delta) {\n this.targetDelta = delta;\n this.root.scheduleUpdateProjection();\n this.isProjectionDirty = true;\n }\n setOptions(options) {\n this.options = {\n ...this.options,\n ...options,\n crossfade: options.crossfade !== undefined ? options.crossfade : true,\n };\n }\n clearMeasurements() {\n this.scroll = undefined;\n this.layout = undefined;\n this.snapshot = undefined;\n this.prevTransformTemplateValue = undefined;\n this.targetDelta = undefined;\n this.target = undefined;\n this.isLayoutDirty = false;\n }\n forceRelativeParentToResolveTarget() {\n if (!this.relativeParent)\n return;\n /**\n * If the parent target isn't up-to-date, force it to update.\n * This is an unfortunate de-optimisation as it means any updating relative\n * projection will cause all the relative parents to recalculate back\n * up the tree.\n */\n if (this.relativeParent.resolvedRelativeTargetAt !==\n frameData.timestamp) {\n this.relativeParent.resolveTargetDelta(true);\n }\n }\n resolveTargetDelta(forceRecalculation = false) {\n /**\n * Once the dirty status of nodes has been spread through the tree, we also\n * need to check if we have a shared node of a different depth that has itself\n * been dirtied.\n */\n const lead = this.getLead();\n this.isProjectionDirty || (this.isProjectionDirty = lead.isProjectionDirty);\n this.isTransformDirty || (this.isTransformDirty = lead.isTransformDirty);\n this.isSharedProjectionDirty || (this.isSharedProjectionDirty = lead.isSharedProjectionDirty);\n const isShared = Boolean(this.resumingFrom) || this !== lead;\n /**\n * We don't use transform for this step of processing so we don't\n * need to check whether any nodes have changed transform.\n */\n const canSkip = !(forceRecalculation ||\n (isShared && this.isSharedProjectionDirty) ||\n this.isProjectionDirty ||\n this.parent?.isProjectionDirty ||\n this.attemptToResolveRelativeTarget ||\n this.root.updateBlockedByResize);\n if (canSkip)\n return;\n const { layout, layoutId } = this.options;\n /**\n * If we have no layout, we can't perform projection, so early return\n */\n if (!this.layout || !(layout || layoutId))\n return;\n this.resolvedRelativeTargetAt = frameData.timestamp;\n const relativeParent = this.getClosestProjectingParent();\n if (relativeParent &&\n this.linkedParentVersion !== relativeParent.layoutVersion &&\n !relativeParent.options.layoutRoot) {\n this.removeRelativeTarget();\n }\n /**\n * If we don't have a targetDelta but do have a layout, we can attempt to resolve\n * a relativeParent. This will allow a component to perform scale correction\n * even if no animation has started.\n */\n if (!this.targetDelta && !this.relativeTarget) {\n if (this.options.layoutAnchor !== false &&\n relativeParent &&\n relativeParent.layout) {\n this.createRelativeTarget(relativeParent, this.layout.layoutBox, relativeParent.layout.layoutBox);\n }\n else {\n this.removeRelativeTarget();\n }\n }\n /**\n * If we have no relative target or no target delta our target isn't valid\n * for this frame.\n */\n if (!this.relativeTarget && !this.targetDelta)\n return;\n /**\n * Lazy-init target data structure\n */\n if (!this.target) {\n this.target = createBox();\n this.targetWithTransforms = createBox();\n }\n /**\n * If we've got a relative box for this component, resolve it into a target relative to the parent.\n */\n if (this.relativeTarget &&\n this.relativeTargetOrigin &&\n this.relativeParent &&\n this.relativeParent.target) {\n this.forceRelativeParentToResolveTarget();\n calcRelativeBox(this.target, this.relativeTarget, this.relativeParent.target, this.options.layoutAnchor || undefined);\n /**\n * If we've only got a targetDelta, resolve it into a target\n */\n }\n else if (this.targetDelta) {\n if (Boolean(this.resumingFrom)) {\n this.applyTransform(this.layout.layoutBox, false, this.target);\n }\n else {\n copyBoxInto(this.target, this.layout.layoutBox);\n }\n applyBoxDelta(this.target, this.targetDelta);\n }\n else {\n /**\n * If no target, use own layout as target\n */\n copyBoxInto(this.target, this.layout.layoutBox);\n }\n /**\n * If we've been told to attempt to resolve a relative target, do so.\n */\n if (this.attemptToResolveRelativeTarget) {\n this.attemptToResolveRelativeTarget = false;\n if (this.options.layoutAnchor !== false &&\n relativeParent &&\n Boolean(relativeParent.resumingFrom) ===\n Boolean(this.resumingFrom) &&\n !relativeParent.options.layoutScroll &&\n relativeParent.target &&\n this.animationProgress !== 1) {\n this.createRelativeTarget(relativeParent, this.target, relativeParent.target);\n }\n else {\n this.relativeParent = this.relativeTarget = undefined;\n }\n }\n /**\n * Increase debug counter for resolved target deltas\n */\n if (statsBuffer.value) {\n metrics.calculatedTargetDeltas++;\n }\n }\n getClosestProjectingParent() {\n if (!this.parent ||\n hasScale(this.parent.latestValues) ||\n has2DTranslate(this.parent.latestValues)) {\n return undefined;\n }\n if (this.parent.isProjecting()) {\n return this.parent;\n }\n else {\n return this.parent.getClosestProjectingParent();\n }\n }\n isProjecting() {\n return Boolean((this.relativeTarget ||\n this.targetDelta ||\n this.options.layoutRoot) &&\n this.layout);\n }\n createRelativeTarget(relativeParent, layout, parentLayout) {\n this.relativeParent = relativeParent;\n this.linkedParentVersion = relativeParent.layoutVersion;\n this.forceRelativeParentToResolveTarget();\n this.relativeTarget = createBox();\n this.relativeTargetOrigin = createBox();\n calcRelativePosition(this.relativeTargetOrigin, layout, parentLayout, this.options.layoutAnchor || undefined);\n copyBoxInto(this.relativeTarget, this.relativeTargetOrigin);\n }\n removeRelativeTarget() {\n this.relativeParent = this.relativeTarget = undefined;\n }\n calcProjection() {\n const lead = this.getLead();\n const isShared = Boolean(this.resumingFrom) || this !== lead;\n let canSkip = true;\n /**\n * If this is a normal layout animation and neither this node nor its nearest projecting\n * is dirty then we can't skip.\n */\n if (this.isProjectionDirty || this.parent?.isProjectionDirty) {\n canSkip = false;\n }\n /**\n * If this is a shared layout animation and this node's shared projection is dirty then\n * we can't skip.\n */\n if (isShared &&\n (this.isSharedProjectionDirty || this.isTransformDirty)) {\n canSkip = false;\n }\n /**\n * If we have resolved the target this frame we must recalculate the\n * projection to ensure it visually represents the internal calculations.\n */\n if (this.resolvedRelativeTargetAt === frameData.timestamp) {\n canSkip = false;\n }\n if (canSkip)\n return;\n const { layout, layoutId } = this.options;\n /**\n * If this section of the tree isn't animating we can\n * delete our target sources for the following frame.\n */\n this.isTreeAnimating = Boolean((this.parent && this.parent.isTreeAnimating) ||\n this.currentAnimation ||\n this.pendingAnimation);\n if (!this.isTreeAnimating) {\n this.targetDelta = this.relativeTarget = undefined;\n }\n if (!this.layout || !(layout || layoutId))\n return;\n /**\n * Reset the corrected box with the latest values from box, as we're then going\n * to perform mutative operations on it.\n */\n copyBoxInto(this.layoutCorrected, this.layout.layoutBox);\n /**\n * Record previous tree scales before updating.\n */\n const prevTreeScaleX = this.treeScale.x;\n const prevTreeScaleY = this.treeScale.y;\n /**\n * Apply all the parent deltas to this box to produce the corrected box. This\n * is the layout box, as it will appear on screen as a result of the transforms of its parents.\n */\n applyTreeDeltas(this.layoutCorrected, this.treeScale, this.path, isShared);\n /**\n * If this layer needs to perform scale correction but doesn't have a target,\n * use the layout as the target.\n */\n if (lead.layout &&\n !lead.target &&\n (this.treeScale.x !== 1 || this.treeScale.y !== 1)) {\n lead.target = lead.layout.layoutBox;\n lead.targetWithTransforms = createBox();\n }\n const { target } = lead;\n if (!target) {\n /**\n * If we don't have a target to project into, but we were previously\n * projecting, we want to remove the stored transform and schedule\n * a render to ensure the elements reflect the removed transform.\n */\n if (this.prevProjectionDelta) {\n this.createProjectionDeltas();\n this.scheduleRender();\n }\n return;\n }\n if (!this.projectionDelta || !this.prevProjectionDelta) {\n this.createProjectionDeltas();\n }\n else {\n copyAxisDeltaInto(this.prevProjectionDelta.x, this.projectionDelta.x);\n copyAxisDeltaInto(this.prevProjectionDelta.y, this.projectionDelta.y);\n }\n /**\n * Update the delta between the corrected box and the target box before user-set transforms were applied.\n * This will allow us to calculate the corrected borderRadius and boxShadow to compensate\n * for our layout reprojection, but still allow them to be scaled correctly by the user.\n * It might be that to simplify this we may want to accept that user-set scale is also corrected\n * and we wouldn't have to keep and calc both deltas, OR we could support a user setting\n * to allow people to choose whether these styles are corrected based on just the\n * layout reprojection or the final bounding box.\n */\n calcBoxDelta(this.projectionDelta, this.layoutCorrected, target, this.latestValues);\n if (this.treeScale.x !== prevTreeScaleX ||\n this.treeScale.y !== prevTreeScaleY ||\n !axisDeltaEquals(this.projectionDelta.x, this.prevProjectionDelta.x) ||\n !axisDeltaEquals(this.projectionDelta.y, this.prevProjectionDelta.y)) {\n this.hasProjected = true;\n this.scheduleRender();\n this.notifyListeners(\"projectionUpdate\", target);\n }\n /**\n * Increase debug counter for recalculated projections\n */\n if (statsBuffer.value) {\n metrics.calculatedProjections++;\n }\n }\n hide() {\n this.isVisible = false;\n // TODO: Schedule render\n }\n show() {\n this.isVisible = true;\n // TODO: Schedule render\n }\n scheduleRender(notifyAll = true) {\n this.options.visualElement?.scheduleRender();\n if (notifyAll) {\n const stack = this.getStack();\n stack && stack.scheduleRender();\n }\n if (this.resumingFrom && !this.resumingFrom.instance) {\n this.resumingFrom = undefined;\n }\n }\n createProjectionDeltas() {\n this.prevProjectionDelta = createDelta();\n this.projectionDelta = createDelta();\n this.projectionDeltaWithTransform = createDelta();\n }\n setAnimationOrigin(delta, hasOnlyRelativeTargetChanged = false, pathFn) {\n const snapshot = this.snapshot;\n const snapshotLatestValues = snapshot ? snapshot.latestValues : {};\n const mixedValues = { ...this.latestValues };\n const targetDelta = createDelta();\n if (!this.relativeParent ||\n !this.relativeParent.options.layoutRoot) {\n this.relativeTarget = this.relativeTargetOrigin = undefined;\n }\n this.attemptToResolveRelativeTarget = !hasOnlyRelativeTargetChanged;\n const relativeLayout = createBox();\n const snapshotSource = snapshot ? snapshot.source : undefined;\n const layoutSource = this.layout ? this.layout.source : undefined;\n const isSharedLayoutAnimation = snapshotSource !== layoutSource;\n const stack = this.getStack();\n const isOnlyMember = !stack || stack.members.length <= 1;\n const shouldCrossfadeOpacity = Boolean(isSharedLayoutAnimation &&\n !isOnlyMember &&\n this.options.crossfade === true &&\n !this.path.some(hasOpacityCrossfade));\n this.animationProgress = 0;\n let prevRelativeTarget;\n // The path decides whether the layout shift is worth curving\n // (distance floor) and resolves the interpolator from the delta.\n const interpolate = pathFn?.interpolateProjection(delta);\n this.mixTargetDelta = (latest) => {\n const progress = latest / 1000;\n const point = interpolate?.(progress);\n if (point) {\n targetDelta.x.translate = point.x;\n targetDelta.x.scale = mixNumber(delta.x.scale, 1, progress);\n targetDelta.x.origin = delta.x.origin;\n targetDelta.x.originPoint = delta.x.originPoint;\n targetDelta.y.translate = point.y;\n targetDelta.y.scale = mixNumber(delta.y.scale, 1, progress);\n targetDelta.y.origin = delta.y.origin;\n targetDelta.y.originPoint = delta.y.originPoint;\n }\n else {\n mixAxisDeltaLinear(targetDelta.x, delta.x, progress);\n mixAxisDeltaLinear(targetDelta.y, delta.y, progress);\n }\n this.setTargetDelta(targetDelta);\n if (this.relativeTarget &&\n this.relativeTargetOrigin &&\n this.layout &&\n this.relativeParent &&\n this.relativeParent.layout) {\n calcRelativePosition(relativeLayout, this.layout.layoutBox, this.relativeParent.layout.layoutBox, this.options.layoutAnchor || undefined);\n mixBox(this.relativeTarget, this.relativeTargetOrigin, relativeLayout, progress);\n /**\n * If this is an unchanged relative target we can consider the\n * projection not dirty.\n */\n if (prevRelativeTarget &&\n boxEquals(this.relativeTarget, prevRelativeTarget)) {\n this.isProjectionDirty = false;\n }\n if (!prevRelativeTarget)\n prevRelativeTarget = createBox();\n copyBoxInto(prevRelativeTarget, this.relativeTarget);\n }\n if (isSharedLayoutAnimation) {\n this.animationValues = mixedValues;\n mixValues(mixedValues, snapshotLatestValues, this.latestValues, progress, shouldCrossfadeOpacity, isOnlyMember);\n }\n if (point && point.rotate !== undefined) {\n // Dedicated `pathRotation` channel, not `rotate`, so an\n // animating `rotate` is composed with, never clobbered.\n if (!this.animationValues)\n this.animationValues = mixedValues;\n this.animationValues.pathRotation = point.rotate;\n }\n this.root.scheduleUpdateProjection();\n this.scheduleRender();\n this.animationProgress = progress;\n };\n this.mixTargetDelta(this.options.layoutRoot ? 1000 : 0);\n }\n startAnimation(options) {\n this.notifyListeners(\"animationStart\");\n this.currentAnimation?.stop();\n this.resumingFrom?.currentAnimation?.stop();\n if (this.pendingAnimation) {\n cancelFrame(this.pendingAnimation);\n this.pendingAnimation = undefined;\n }\n /**\n * Start the animation in the next frame to have a frame with progress 0,\n * where the target is the same as when the animation started, so we can\n * calculate the relative positions correctly for instant transitions.\n */\n this.pendingAnimation = frame.update(() => {\n globalProjectionState.hasAnimatedSinceResize = true;\n activeAnimations.layout++;\n this.motionValue || (this.motionValue = motionValue(0));\n this.motionValue.jump(0, false);\n this.currentAnimation = animateSingleValue(this.motionValue, [0, 1000], {\n ...options,\n velocity: 0,\n isSync: true,\n onUpdate: (latest) => {\n this.mixTargetDelta(latest);\n options.onUpdate && options.onUpdate(latest);\n },\n onStop: () => {\n activeAnimations.layout--;\n },\n onComplete: () => {\n activeAnimations.layout--;\n options.onComplete && options.onComplete();\n this.completeAnimation();\n },\n });\n if (this.resumingFrom) {\n this.resumingFrom.currentAnimation = this.currentAnimation;\n }\n this.pendingAnimation = undefined;\n });\n }\n completeAnimation() {\n if (this.resumingFrom) {\n this.resumingFrom.currentAnimation = undefined;\n this.resumingFrom.preserveOpacity = undefined;\n }\n const stack = this.getStack();\n stack && stack.exitAnimationComplete();\n this.resumingFrom =\n this.currentAnimation =\n this.animationValues =\n undefined;\n this.notifyListeners(\"animationComplete\");\n }\n finishAnimation() {\n if (this.currentAnimation) {\n this.mixTargetDelta && this.mixTargetDelta(animationTarget);\n this.currentAnimation.stop();\n }\n this.completeAnimation();\n }\n applyTransformsToTarget() {\n const lead = this.getLead();\n let { targetWithTransforms, target, layout, latestValues } = lead;\n if (!targetWithTransforms || !target || !layout)\n return;\n /**\n * If we're only animating position, and this element isn't the lead element,\n * then instead of projecting into the lead box we instead want to calculate\n * a new target that aligns the two boxes but maintains the layout shape.\n */\n if (this !== lead &&\n this.layout &&\n layout &&\n shouldAnimatePositionOnly(this.options.animationType, this.layout.layoutBox, layout.layoutBox)) {\n target = this.target || createBox();\n const xLength = calcLength(this.layout.layoutBox.x);\n target.x.min = lead.target.x.min;\n target.x.max = target.x.min + xLength;\n const yLength = calcLength(this.layout.layoutBox.y);\n target.y.min = lead.target.y.min;\n target.y.max = target.y.min + yLength;\n }\n copyBoxInto(targetWithTransforms, target);\n /**\n * Apply the latest user-set transforms to the targetBox to produce the targetBoxFinal.\n * This is the final box that we will then project into by calculating a transform delta and\n * applying it to the corrected box.\n */\n transformBox(targetWithTransforms, latestValues);\n /**\n * Update the delta between the corrected box and the final target box, after\n * user-set transforms are applied to it. This will be used by the renderer to\n * create a transform style that will reproject the element from its layout layout\n * into the desired bounding box.\n */\n calcBoxDelta(this.projectionDeltaWithTransform, this.layoutCorrected, targetWithTransforms, latestValues);\n }\n registerSharedNode(layoutId, node) {\n if (!this.sharedNodes.has(layoutId)) {\n this.sharedNodes.set(layoutId, new NodeStack());\n }\n const stack = this.sharedNodes.get(layoutId);\n stack.add(node);\n const config = node.options.initialPromotionConfig;\n node.promote({\n transition: config ? config.transition : undefined,\n preserveFollowOpacity: config && config.shouldPreserveFollowOpacity\n ? config.shouldPreserveFollowOpacity(node)\n : undefined,\n });\n }\n isLead() {\n const stack = this.getStack();\n return stack ? stack.lead === this : true;\n }\n getLead() {\n const { layoutId } = this.options;\n return layoutId ? this.getStack()?.lead || this : this;\n }\n getPrevLead() {\n const { layoutId } = this.options;\n return layoutId ? this.getStack()?.prevLead : undefined;\n }\n getStack() {\n const { layoutId } = this.options;\n if (layoutId)\n return this.root.sharedNodes.get(layoutId);\n }\n promote({ needsReset, transition, preserveFollowOpacity, } = {}) {\n const stack = this.getStack();\n if (stack)\n stack.promote(this, preserveFollowOpacity);\n if (needsReset) {\n this.projectionDelta = undefined;\n this.needsReset = true;\n }\n if (transition)\n this.setOptions({ transition });\n }\n relegate() {\n const stack = this.getStack();\n if (stack) {\n return stack.relegate(this);\n }\n else {\n return false;\n }\n }\n resetSkewAndRotation() {\n const { visualElement } = this.options;\n if (!visualElement)\n return;\n // If there's no detected skew or rotation values, we can early return without a forced render.\n let hasDistortingTransform = false;\n /**\n * An unrolled check for rotation values. Most elements don't have any rotation and\n * skipping the nested loop and new object creation is 50% faster.\n */\n const { latestValues } = visualElement;\n if (latestValues.z ||\n latestValues.rotate ||\n latestValues.rotateX ||\n latestValues.rotateY ||\n latestValues.rotateZ ||\n latestValues.skewX ||\n latestValues.skewY) {\n hasDistortingTransform = true;\n }\n // If there's no distorting values, we don't need to do any more.\n if (!hasDistortingTransform)\n return;\n const resetValues = {};\n if (latestValues.z) {\n resetDistortingTransform(\"z\", visualElement, resetValues, this.animationValues);\n }\n // Check the skew and rotate value of all axes and reset to 0\n for (let i = 0; i < transformAxes.length; i++) {\n resetDistortingTransform(`rotate${transformAxes[i]}`, visualElement, resetValues, this.animationValues);\n resetDistortingTransform(`skew${transformAxes[i]}`, visualElement, resetValues, this.animationValues);\n }\n // Force a render of this element to apply the transform with all skews and rotations\n // set to 0.\n visualElement.render();\n // Put back all the values we reset\n for (const key in resetValues) {\n visualElement.setStaticValue(key, resetValues[key]);\n if (this.animationValues) {\n this.animationValues[key] = resetValues[key];\n }\n }\n // Schedule a render for the next frame. This ensures we won't visually\n // see the element with the reset rotate value applied.\n visualElement.scheduleRender();\n }\n applyProjectionStyles(targetStyle, // CSSStyleDeclaration - doesn't allow numbers to be assigned to properties\n styleProp) {\n if (!this.instance || this.isSVG)\n return;\n if (!this.isVisible) {\n targetStyle.visibility = \"hidden\";\n return;\n }\n const transformTemplate = this.getTransformTemplate();\n if (this.needsReset) {\n this.needsReset = false;\n targetStyle.visibility = \"\";\n targetStyle.opacity = \"\";\n targetStyle.pointerEvents =\n resolveMotionValue(styleProp?.pointerEvents) || \"\";\n targetStyle.transform = transformTemplate\n ? transformTemplate(this.latestValues, \"\")\n : \"none\";\n return;\n }\n const lead = this.getLead();\n if (!this.projectionDelta || !this.layout || !lead.target) {\n if (this.options.layoutId) {\n targetStyle.opacity =\n this.latestValues.opacity !== undefined\n ? this.latestValues.opacity\n : 1;\n targetStyle.pointerEvents =\n resolveMotionValue(styleProp?.pointerEvents) || \"\";\n }\n if (this.hasProjected && !hasTransform(this.latestValues)) {\n targetStyle.transform = transformTemplate\n ? transformTemplate({}, \"\")\n : \"none\";\n this.hasProjected = false;\n }\n return;\n }\n targetStyle.visibility = \"\";\n const valuesToRender = lead.animationValues || lead.latestValues;\n this.applyTransformsToTarget();\n let transform = buildProjectionTransform(this.projectionDeltaWithTransform, this.treeScale, valuesToRender);\n if (transformTemplate) {\n transform = transformTemplate(valuesToRender, transform);\n }\n targetStyle.transform = transform;\n const { x, y } = this.projectionDelta;\n targetStyle.transformOrigin = `${x.origin * 100}% ${y.origin * 100}% 0`;\n if (lead.animationValues) {\n /**\n * If the lead component is animating, assign this either the entering/leaving\n * opacity\n */\n targetStyle.opacity =\n lead === this\n ? valuesToRender.opacity ??\n this.latestValues.opacity ??\n 1\n : this.preserveOpacity\n ? this.latestValues.opacity\n : valuesToRender.opacityExit;\n }\n else {\n /**\n * Or we're not animating at all, set the lead component to its layout\n * opacity and other components to hidden.\n */\n targetStyle.opacity =\n lead === this\n ? valuesToRender.opacity !== undefined\n ? valuesToRender.opacity\n : \"\"\n : valuesToRender.opacityExit !== undefined\n ? valuesToRender.opacityExit\n : 0;\n }\n /**\n * Apply scale correction\n */\n for (const key in scaleCorrectors) {\n if (valuesToRender[key] === undefined)\n continue;\n const { correct, applyTo, isCSSVariable } = scaleCorrectors[key];\n /**\n * Only apply scale correction to the value if we have an\n * active projection transform. Otherwise these values become\n * vulnerable to distortion if the element changes size without\n * a corresponding layout animation.\n */\n const corrected = transform === \"none\"\n ? valuesToRender[key]\n : correct(valuesToRender[key], lead);\n if (applyTo) {\n const num = applyTo.length;\n for (let i = 0; i < num; i++) {\n targetStyle[applyTo[i]] = corrected;\n }\n }\n else {\n // If this is a CSS variable, set it directly on the instance.\n // Replacing this function from creating styles to setting them\n // would be a good place to remove per frame object creation\n if (isCSSVariable) {\n this.options.visualElement.renderState.vars[key] = corrected;\n }\n else {\n targetStyle[key] = corrected;\n }\n }\n }\n /**\n * Disable pointer events on follow components. This is to ensure\n * that if a follow component covers a lead component it doesn't block\n * pointer events on the lead.\n */\n if (this.options.layoutId) {\n targetStyle.pointerEvents =\n lead === this\n ? resolveMotionValue(styleProp?.pointerEvents) || \"\"\n : \"none\";\n }\n }\n clearSnapshot() {\n this.resumeFrom = this.snapshot = undefined;\n }\n // Only run on root\n resetTree() {\n this.root.nodes.forEach((node) => node.currentAnimation?.stop());\n this.root.nodes.forEach(clearMeasurements);\n this.root.sharedNodes.clear();\n }\n };\n}\nfunction updateLayout(node) {\n node.updateLayout();\n}\nfunction notifyLayoutUpdate(node) {\n const snapshot = node.resumeFrom?.snapshot || node.snapshot;\n if (node.isLead() &&\n node.layout &&\n snapshot &&\n node.hasListeners(\"didUpdate\")) {\n const { layoutBox: layout, measuredBox: measuredLayout } = node.layout;\n const { animationType } = node.options;\n const isShared = snapshot.source !== node.layout.source;\n // TODO Maybe we want to also resize the layout snapshot so we don't trigger\n // animations for instance if layout=\"size\" and an element has only changed position\n if (animationType === \"size\") {\n eachAxis((axis) => {\n const axisSnapshot = isShared\n ? snapshot.measuredBox[axis]\n : snapshot.layoutBox[axis];\n const length = calcLength(axisSnapshot);\n axisSnapshot.min = layout[axis].min;\n axisSnapshot.max = axisSnapshot.min + length;\n });\n }\n else if (animationType === \"x\" || animationType === \"y\") {\n const snapAxis = animationType === \"x\" ? \"y\" : \"x\";\n copyAxisInto(isShared\n ? snapshot.measuredBox[snapAxis]\n : snapshot.layoutBox[snapAxis], layout[snapAxis]);\n }\n else if (shouldAnimatePositionOnly(animationType, snapshot.layoutBox, layout)) {\n eachAxis((axis) => {\n const axisSnapshot = isShared\n ? snapshot.measuredBox[axis]\n : snapshot.layoutBox[axis];\n const length = calcLength(layout[axis]);\n axisSnapshot.max = axisSnapshot.min + length;\n /**\n * Ensure relative target gets resized and rerendererd\n */\n if (node.relativeTarget && !node.currentAnimation) {\n node.isProjectionDirty = true;\n node.relativeTarget[axis].max =\n node.relativeTarget[axis].min + length;\n }\n });\n }\n const layoutDelta = createDelta();\n calcBoxDelta(layoutDelta, layout, snapshot.layoutBox);\n const visualDelta = createDelta();\n if (isShared) {\n calcBoxDelta(visualDelta, node.applyTransform(measuredLayout, true), snapshot.measuredBox);\n }\n else {\n calcBoxDelta(visualDelta, layout, snapshot.layoutBox);\n }\n const hasLayoutChanged = !isDeltaZero(layoutDelta);\n let hasRelativeLayoutChanged = false;\n if (!node.resumeFrom) {\n const relativeParent = node.getClosestProjectingParent();\n /**\n * If the relativeParent is itself resuming from a different element then\n * the relative snapshot is not relavent\n */\n if (relativeParent && !relativeParent.resumeFrom) {\n const { snapshot: parentSnapshot, layout: parentLayout } = relativeParent;\n if (parentSnapshot && parentLayout) {\n const anchor = node.options.layoutAnchor || undefined;\n const relativeSnapshot = createBox();\n calcRelativePosition(relativeSnapshot, snapshot.layoutBox, parentSnapshot.layoutBox, anchor);\n const relativeLayout = createBox();\n calcRelativePosition(relativeLayout, layout, parentLayout.layoutBox, anchor);\n if (!boxEqualsRounded(relativeSnapshot, relativeLayout)) {\n hasRelativeLayoutChanged = true;\n }\n if (relativeParent.options.layoutRoot) {\n node.relativeTarget = relativeLayout;\n node.relativeTargetOrigin = relativeSnapshot;\n node.relativeParent = relativeParent;\n }\n }\n }\n }\n node.notifyListeners(\"didUpdate\", {\n layout,\n snapshot,\n delta: visualDelta,\n layoutDelta,\n hasLayoutChanged,\n hasRelativeLayoutChanged,\n });\n }\n else if (node.isLead()) {\n const { onExitComplete } = node.options;\n onExitComplete && onExitComplete();\n }\n /**\n * Clearing transition\n * TODO: Investigate why this transition is being passed in as {type: false } from Framer\n * and why we need it at all\n */\n node.options.transition = undefined;\n}\nfunction propagateDirtyNodes(node) {\n /**\n * Increase debug counter for nodes encountered this frame\n */\n if (statsBuffer.value) {\n metrics.nodes++;\n }\n if (!node.parent)\n return;\n /**\n * If this node isn't projecting, propagate isProjectionDirty. It will have\n * no performance impact but it will allow the next child that *is* projecting\n * but *isn't* dirty to just check its parent to see if *any* ancestor needs\n * correcting.\n */\n if (!node.isProjecting()) {\n node.isProjectionDirty = node.parent.isProjectionDirty;\n }\n /**\n * Propagate isSharedProjectionDirty and isTransformDirty\n * throughout the whole tree. A future revision can take another look at\n * this but for safety we still recalcualte shared nodes.\n */\n node.isSharedProjectionDirty || (node.isSharedProjectionDirty = Boolean(node.isProjectionDirty ||\n node.parent.isProjectionDirty ||\n node.parent.isSharedProjectionDirty));\n node.isTransformDirty || (node.isTransformDirty = node.parent.isTransformDirty);\n}\nfunction cleanDirtyNodes(node) {\n node.isProjectionDirty =\n node.isSharedProjectionDirty =\n node.isTransformDirty =\n false;\n}\nfunction clearSnapshot(node) {\n node.clearSnapshot();\n}\nfunction clearMeasurements(node) {\n node.clearMeasurements();\n}\nfunction forceLayoutMeasure(node) {\n node.isLayoutDirty = true;\n node.updateLayout();\n}\nfunction clearIsLayoutDirty(node) {\n node.isLayoutDirty = false;\n}\n/**\n * When a node is animation-blocked (e.g. during drag) and its component\n * didn't re-render (memoized), willUpdate() is never called so there's\n * no snapshot. Use the previous layout as a snapshot and mark dirty so\n * resetTransform/updateLayout/notifyLayoutUpdate process it normally.\n */\nfunction ensureDraggedNodesSnapshotted(node) {\n if (node.isAnimationBlocked && node.layout && !node.isLayoutDirty) {\n node.snapshot = node.layout;\n node.isLayoutDirty = true;\n }\n}\nfunction resetTransformStyle(node) {\n const { visualElement } = node.options;\n if (visualElement && visualElement.getProps().onBeforeLayoutMeasure) {\n visualElement.notify(\"BeforeLayoutMeasure\");\n }\n node.resetTransform();\n}\nfunction finishAnimation(node) {\n node.finishAnimation();\n node.targetDelta = node.relativeTarget = node.target = undefined;\n node.isProjectionDirty = true;\n}\nfunction resolveTargetDelta(node) {\n node.resolveTargetDelta();\n}\nfunction calcProjection(node) {\n node.calcProjection();\n}\nfunction resetSkewAndRotation(node) {\n node.resetSkewAndRotation();\n}\nfunction removeLeadSnapshots(stack) {\n stack.removeLeadSnapshot();\n}\nfunction mixAxisDeltaLinear(output, delta, p) {\n output.translate = mixNumber(delta.translate, 0, p);\n output.scale = mixNumber(delta.scale, 1, p);\n output.origin = delta.origin;\n output.originPoint = delta.originPoint;\n}\nfunction mixAxis(output, from, to, p) {\n output.min = mixNumber(from.min, to.min, p);\n output.max = mixNumber(from.max, to.max, p);\n}\nfunction mixBox(output, from, to, p) {\n mixAxis(output.x, from.x, to.x, p);\n mixAxis(output.y, from.y, to.y, p);\n}\nfunction hasOpacityCrossfade(node) {\n return (node.animationValues && node.animationValues.opacityExit !== undefined);\n}\nconst defaultLayoutTransition = {\n duration: 0.45,\n ease: [0.4, 0, 0.1, 1],\n};\nconst userAgentContains = (string) => typeof navigator !== \"undefined\" &&\n navigator.userAgent &&\n navigator.userAgent.toLowerCase().includes(string);\n/**\n * Measured bounding boxes must be rounded in Safari and\n * left untouched in Chrome, otherwise non-integer layouts within scaled-up elements\n * can appear to jump.\n */\nconst roundPoint = userAgentContains(\"applewebkit/\") && !userAgentContains(\"chrome/\")\n ? Math.round\n : noop;\nfunction roundAxis(axis) {\n // Round to the nearest .5 pixels to support subpixel layouts\n axis.min = roundPoint(axis.min);\n axis.max = roundPoint(axis.max);\n}\nfunction roundBox(box) {\n roundAxis(box.x);\n roundAxis(box.y);\n}\nfunction shouldAnimatePositionOnly(animationType, snapshot, layout) {\n return (animationType === \"position\" ||\n (animationType === \"preserve-aspect\" &&\n !isNear(aspectRatio(snapshot), aspectRatio(layout), 0.2)));\n}\nfunction checkNodeWasScrollRoot(node) {\n return node !== node.root && node.scroll?.wasRoot;\n}\n\nexport { cleanDirtyNodes, createProjectionNode, mixAxis, mixBox, propagateDirtyNodes };\n//# sourceMappingURL=create-projection-node.mjs.map\n","import { isSVGElement } from './is-svg-element.mjs';\n\n/**\n * Checks if an element is specifically an SVGSVGElement (the root SVG element)\n * in a way that works across iframes\n */\nfunction isSVGSVGElement(element) {\n return isSVGElement(element) && element.tagName === \"svg\";\n}\n\nexport { isSVGSVGElement };\n//# sourceMappingURL=is-svg-svg-element.mjs.map\n","import { time } from '../frameloop/sync-time.mjs';\nimport { secondsToMilliseconds } from 'motion-utils';\nimport { frame, cancelFrame } from '../frameloop/frame.mjs';\n\n/**\n * Timeout defined in ms\n */\nfunction delay(callback, timeout) {\n const start = time.now();\n const checkElapsed = ({ timestamp }) => {\n const elapsed = timestamp - start;\n if (elapsed >= timeout) {\n cancelFrame(checkElapsed);\n callback(elapsed - timeout);\n }\n };\n frame.setup(checkElapsed, true);\n return () => cancelFrame(checkElapsed);\n}\nfunction delayInSeconds(callback, timeout) {\n return delay(callback, secondsToMilliseconds(timeout));\n}\n\nexport { delay, delayInSeconds };\n//# sourceMappingURL=delay.mjs.map\n","import { animateMotionValue } from '../interfaces/motion-value.mjs';\nimport { motionValue } from '../../value/index.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nfunction animateSingleValue(value, keyframes, options) {\n const motionValue$1 = isMotionValue(value) ? value : motionValue(value);\n motionValue$1.start(animateMotionValue(\"\", motionValue$1, keyframes, options));\n return motionValue$1.animation;\n}\n\nexport { animateSingleValue };\n//# sourceMappingURL=single-value.mjs.map\n","function buildProjectionTransform(delta, treeScale, latestTransform) {\n let transform = \"\";\n /**\n * The translations we use to calculate are always relative to the viewport coordinate space.\n * But when we apply scales, we also scale the coordinate space of an element and its children.\n * For instance if we have a treeScale (the culmination of all parent scales) of 0.5 and we need\n * to move an element 100 pixels, we actually need to move it 200 in within that scaled space.\n */\n const xTranslate = delta.x.translate / treeScale.x;\n const yTranslate = delta.y.translate / treeScale.y;\n const zTranslate = latestTransform?.z || 0;\n if (xTranslate || yTranslate || zTranslate) {\n transform = `translate3d(${xTranslate}px, ${yTranslate}px, ${zTranslate}px) `;\n }\n /**\n * Apply scale correction for the tree transform.\n * This will apply scale to the screen-orientated axes.\n */\n if (treeScale.x !== 1 || treeScale.y !== 1) {\n transform += `scale(${1 / treeScale.x}, ${1 / treeScale.y}) `;\n }\n if (latestTransform) {\n const { transformPerspective, rotate, pathRotation, rotateX, rotateY, skewX, skewY, } = latestTransform;\n if (transformPerspective)\n transform = `perspective(${transformPerspective}px) ${transform}`;\n if (rotate)\n transform += `rotate(${rotate}deg) `;\n // Additive `rotate()` so user `rotate` isn't clobbered.\n if (pathRotation)\n transform += `rotate(${pathRotation}deg) `;\n if (rotateX)\n transform += `rotateX(${rotateX}deg) `;\n if (rotateY)\n transform += `rotateY(${rotateY}deg) `;\n if (skewX)\n transform += `skewX(${skewX}deg) `;\n if (skewY)\n transform += `skewY(${skewY}deg) `;\n }\n /**\n * Apply scale to match the size of the element to the size we want it.\n * This will apply scale to the element-orientated axes.\n */\n const elementScaleX = delta.x.scale * treeScale.x;\n const elementScaleY = delta.y.scale * treeScale.y;\n if (elementScaleX !== 1 || elementScaleY !== 1) {\n transform += `scale(${elementScaleX}, ${elementScaleY})`;\n }\n return transform || \"none\";\n}\n\nexport { buildProjectionTransform };\n//# sourceMappingURL=transform.mjs.map\n","import { addDomEvent } from '../../events/add-dom-event.mjs';\nimport { createProjectionNode } from './create-projection-node.mjs';\n\nconst DocumentProjectionNode = createProjectionNode({\n attachResizeListener: (ref, notify) => addDomEvent(ref, \"resize\", notify),\n measureScroll: () => ({\n x: document.documentElement.scrollLeft || document.body?.scrollLeft || 0,\n y: document.documentElement.scrollTop || document.body?.scrollTop || 0,\n }),\n checkIsScrollRoot: () => true,\n});\n\nexport { DocumentProjectionNode };\n//# sourceMappingURL=DocumentProjectionNode.mjs.map\n","import { createProjectionNode } from './create-projection-node.mjs';\nimport { DocumentProjectionNode } from './DocumentProjectionNode.mjs';\n\nconst rootProjectionNode = {\n current: undefined,\n};\nconst HTMLProjectionNode = createProjectionNode({\n measureScroll: (instance) => ({\n x: instance.scrollLeft,\n y: instance.scrollTop,\n }),\n defaultParent: () => {\n if (!rootProjectionNode.current) {\n const documentNode = new DocumentProjectionNode({});\n documentNode.mount(window);\n documentNode.setOptions({ layoutScroll: true });\n rootProjectionNode.current = documentNode;\n }\n return rootProjectionNode.current;\n },\n resetTransform: (instance, value) => {\n instance.style.transform = value !== undefined ? value : \"none\";\n },\n checkIsScrollRoot: (instance) => Boolean(window.getComputedStyle(instance).position === \"fixed\"),\n});\n\nexport { HTMLProjectionNode, rootProjectionNode };\n//# sourceMappingURL=HTMLProjectionNode.mjs.map\n","\"use client\";\nimport { useContext, useMemo } from \"react\";\nimport { MotionContext } from \".\";\nimport { getCurrentTreeVariants } from \"./utils\";\nexport function useCreateMotionContext(props) {\n const { initial, animate } = getCurrentTreeVariants(props, useContext(MotionContext));\n return useMemo(() => ({ initial, animate }), [variantLabelsAsDependency(initial), variantLabelsAsDependency(animate)]);\n}\nfunction variantLabelsAsDependency(prop) {\n return Array.isArray(prop) ? prop.join(\" \") : prop;\n}\n//# sourceMappingURL=create.js.map","import { isControllingVariants, isVariantLabel } from \"motion-dom\";\nexport function getCurrentTreeVariants(props, context) {\n if (isControllingVariants(props)) {\n const { initial, animate } = props;\n return {\n initial: initial === false || isVariantLabel(initial)\n ? initial\n : undefined,\n animate: isVariantLabel(animate) ? animate : undefined,\n };\n }\n return props.inherit !== false ? context : {};\n}\n//# sourceMappingURL=utils.js.map","export const createHtmlRenderState = () => ({\n style: {},\n transform: {},\n transformOrigin: {},\n vars: {},\n});\n//# sourceMappingURL=create-render-state.js.map","\"use client\";\nimport { buildHTMLStyles, isForcedMotionValue, isMotionValue } from \"motion-dom\";\nimport { useMemo } from \"react\";\nimport { createHtmlRenderState } from \"./utils/create-render-state\";\nexport function copyRawValuesOnly(target, source, props) {\n for (const key in source) {\n if (!isMotionValue(source[key]) && !isForcedMotionValue(key, props)) {\n target[key] = source[key];\n }\n }\n}\nfunction useInitialMotionValues({ transformTemplate }, visualState) {\n return useMemo(() => {\n const state = createHtmlRenderState();\n buildHTMLStyles(state, visualState, transformTemplate);\n return Object.assign({}, state.vars, state.style);\n }, [visualState]);\n}\nfunction useStyle(props, visualState) {\n const styleProp = props.style || {};\n const style = {};\n /**\n * Copy non-Motion Values straight into style\n */\n copyRawValuesOnly(style, styleProp, props);\n Object.assign(style, useInitialMotionValues(props, visualState));\n return style;\n}\nexport function useHTMLProps(props, visualState) {\n // The `any` isn't ideal but it is the type of createElement props argument\n const htmlProps = {};\n const style = useStyle(props, visualState);\n if (props.drag && props.dragListener !== false) {\n // Disable the ghost element when a user drags\n htmlProps.draggable = false;\n // Disable text selection\n style.userSelect =\n style.WebkitUserSelect =\n style.WebkitTouchCallout =\n \"none\";\n // Disable scrolling on the draggable direction\n style.touchAction =\n props.drag === true\n ? \"none\"\n : `pan-${props.drag === \"x\" ? \"y\" : \"x\"}`;\n }\n if (props.tabIndex === undefined &&\n (props.onTap || props.onTapStart || props.whileTap)) {\n htmlProps.tabIndex = 0;\n }\n htmlProps.style = style;\n return htmlProps;\n}\n//# sourceMappingURL=use-props.js.map","import { createHtmlRenderState } from \"../../html/utils/create-render-state\";\nexport const createSvgRenderState = () => ({\n ...createHtmlRenderState(),\n attrs: {},\n});\n//# sourceMappingURL=create-render-state.js.map","\"use client\";\nimport { buildSVGAttrs, isSVGTag } from \"motion-dom\";\nimport { useMemo } from \"react\";\nimport { copyRawValuesOnly } from \"../html/use-props\";\nimport { createSvgRenderState } from \"./utils/create-render-state\";\nexport function useSVGProps(props, visualState, _isStatic, Component) {\n const visualProps = useMemo(() => {\n const state = createSvgRenderState();\n buildSVGAttrs(state, visualState, isSVGTag(Component), props.transformTemplate, props.style);\n return {\n ...state.attrs,\n style: { ...state.style },\n };\n }, [visualState]);\n if (props.style) {\n const rawStyles = {};\n copyRawValuesOnly(rawStyles, props.style, props);\n visualProps.style = { ...rawStyles, ...visualProps.style };\n }\n return visualProps;\n}\n//# sourceMappingURL=use-props.js.map","/**\n * A list of all valid MotionProps.\n *\n * @privateRemarks\n * This doesn't throw if a `MotionProp` name is missing - it should.\n */\nconst validMotionProps = new Set([\n \"animate\",\n \"exit\",\n \"variants\",\n \"initial\",\n \"style\",\n \"values\",\n \"variants\",\n \"transition\",\n \"transformTemplate\",\n \"custom\",\n \"inherit\",\n \"onBeforeLayoutMeasure\",\n \"onAnimationStart\",\n \"onAnimationComplete\",\n \"onUpdate\",\n \"onDragStart\",\n \"onDrag\",\n \"onDragEnd\",\n \"onMeasureDragConstraints\",\n \"onDirectionLock\",\n \"onDragTransitionEnd\",\n \"_dragX\",\n \"_dragY\",\n \"onHoverStart\",\n \"onHoverEnd\",\n \"onViewportEnter\",\n \"onViewportLeave\",\n \"globalTapTarget\",\n \"propagate\",\n \"ignoreStrict\",\n \"viewport\",\n]);\n/**\n * Check whether a prop name is a valid `MotionProp` key.\n *\n * @param key - Name of the property to check\n * @returns `true` is key is a valid `MotionProp`.\n *\n * @public\n */\nexport function isValidMotionProp(key) {\n return (key.startsWith(\"while\") ||\n (key.startsWith(\"drag\") && key !== \"draggable\") ||\n key.startsWith(\"layout\") ||\n key.startsWith(\"onTap\") ||\n key.startsWith(\"onPan\") ||\n key.startsWith(\"onLayout\") ||\n validMotionProps.has(key));\n}\n//# sourceMappingURL=valid-prop.js.map","import { isMotionValue } from \"motion-dom\";\nimport { isValidMotionProp } from \"../../../motion/utils/valid-prop\";\nlet shouldForward = (key) => !isValidMotionProp(key);\nexport function loadExternalIsValidProp(isValidProp) {\n if (typeof isValidProp !== \"function\")\n return;\n // Explicitly filter our events\n shouldForward = (key) => key.startsWith(\"on\") ? !isValidMotionProp(key) : isValidProp(key);\n}\n/**\n * Emotion and Styled Components both allow users to pass through arbitrary props to their components\n * to dynamically generate CSS. They both use the `@emotion/is-prop-valid` package to determine which\n * of these should be passed to the underlying DOM node.\n *\n * However, when styling a Motion component `styled(motion.div)`, both packages pass through *all* props\n * as it's seen as an arbitrary component rather than a DOM node. Motion only allows arbitrary props\n * passed through the `custom` prop so it doesn't *need* the payload or computational overhead of\n * `@emotion/is-prop-valid`, however to fix this problem we need to use it.\n *\n * By making it an optionalDependency we can offer this functionality only in the situations where it's\n * actually required.\n */\ntry {\n /**\n * We attempt to import this package but require won't be defined in esm environments, in that case\n * isPropValid will have to be provided via `MotionContext`. In a 6.0.0 this should probably be removed\n * in favour of explicit injection.\n *\n * String concatenation prevents bundlers like webpack (e.g. Storybook)\n * from statically resolving this optional dependency at build time.\n */\n const emotionPkg = \"@emotion/is-prop-\" + \"valid\";\n loadExternalIsValidProp(require(emotionPkg).default);\n}\ncatch {\n // We don't need to actually do anything here - the fallback is the existing `isPropValid`.\n}\nexport function filterProps(props, isDom, forwardMotionProps) {\n const filteredProps = {};\n for (const key in props) {\n /**\n * values is considered a valid prop by Emotion, so if it's present\n * this will be rendered out to the DOM unless explicitly filtered.\n *\n * We check the type as it could be used with the `feColorMatrix`\n * element, which we support.\n */\n if (key === \"values\" && typeof props.values === \"object\")\n continue;\n if (isMotionValue(props[key]))\n continue;\n if (shouldForward(key) ||\n (forwardMotionProps === true && isValidMotionProp(key)) ||\n (!isDom && !isValidMotionProp(key)) ||\n // If trying to use native HTML drag events, forward drag listeners\n (props[\"draggable\"] &&\n key.startsWith(\"onDrag\"))) {\n filteredProps[key] =\n props[key];\n }\n }\n return filteredProps;\n}\n//# sourceMappingURL=filter-props.js.map","/**\n * We keep these listed separately as we use the lowercase tag names as part\n * of the runtime bundle to detect SVG components\n */\nexport const lowercaseSVGElements = [\n \"animate\",\n \"circle\",\n \"defs\",\n \"desc\",\n \"ellipse\",\n \"g\",\n \"image\",\n \"line\",\n \"filter\",\n \"marker\",\n \"mask\",\n \"metadata\",\n \"path\",\n \"pattern\",\n \"polygon\",\n \"polyline\",\n \"rect\",\n \"stop\",\n \"switch\",\n \"symbol\",\n \"svg\",\n \"text\",\n \"tspan\",\n \"use\",\n \"view\",\n];\n//# sourceMappingURL=lowercase-elements.js.map","import { lowercaseSVGElements } from \"../../svg/lowercase-elements\";\nexport function isSVGComponent(Component) {\n if (\n /**\n * If it's not a string, it's a custom React component. Currently we only support\n * HTML custom React components.\n */\n typeof Component !== \"string\" ||\n /**\n * If it contains a dash, the element is a custom HTML webcomponent.\n */\n Component.includes(\"-\")) {\n return false;\n }\n else if (\n /**\n * If it's in our list of lowercase SVG tags, it's an SVG component\n */\n lowercaseSVGElements.indexOf(Component) > -1 ||\n /**\n * If it contains a capital letter, it's an SVG component\n */\n /[A-Z]/u.test(Component)) {\n return true;\n }\n return false;\n}\n//# sourceMappingURL=is-svg-component.js.map","\"use client\";\nimport { isMotionValue } from \"motion-dom\";\nimport { Fragment, createElement, useMemo } from \"react\";\nimport { useHTMLProps } from \"../html/use-props\";\nimport { useSVGProps } from \"../svg/use-props\";\nimport { filterProps } from \"./utils/filter-props\";\nimport { isSVGComponent } from \"./utils/is-svg-component\";\nexport function useRender(Component, props, ref, { latestValues, }, isStatic, forwardMotionProps = false, isSVG) {\n const useVisualProps = (isSVG ?? isSVGComponent(Component)) ? useSVGProps : useHTMLProps;\n const visualProps = useVisualProps(props, latestValues, isStatic, Component);\n const filteredProps = filterProps(props, typeof Component === \"string\", forwardMotionProps);\n const elementProps = Component !== Fragment ? { ...filteredProps, ...visualProps, ref } : {};\n /**\n * If component has been handed a motion value as its child,\n * memoise its initial value and render that. Subsequent updates\n * will be handled by the onChange handler\n */\n const { children } = props;\n const renderedChildren = useMemo(() => (isMotionValue(children) ? children.get() : children), [children]);\n return createElement(Component, {\n ...elementProps,\n children: renderedChildren,\n });\n}\n//# sourceMappingURL=use-render.js.map","\"use client\";\nimport { createContext } from \"react\";\n/**\n * @public\n */\nexport const PresenceContext = \n/* @__PURE__ */ createContext(null);\n//# sourceMappingURL=PresenceContext.js.map","\"use client\";\nimport { isAnimationControls, isControllingVariants as checkIsControllingVariants, isVariantNode as checkIsVariantNode, resolveVariantFromProps, } from \"motion-dom\";\nimport { useContext } from \"react\";\nimport { MotionContext } from \"../../context/MotionContext\";\nimport { PresenceContext, } from \"../../context/PresenceContext\";\nimport { useConstant } from \"../../utils/use-constant\";\nimport { resolveMotionValue } from \"motion-dom\";\nfunction makeState({ scrapeMotionValuesFromProps, createRenderState, }, props, context, presenceContext) {\n const state = {\n latestValues: makeLatestValues(props, context, presenceContext, scrapeMotionValuesFromProps),\n renderState: createRenderState(),\n };\n return state;\n}\nfunction makeLatestValues(props, context, presenceContext, scrapeMotionValues) {\n const values = {};\n const motionValues = scrapeMotionValues(props, {});\n for (const key in motionValues) {\n values[key] = resolveMotionValue(motionValues[key]);\n }\n let { initial, animate } = props;\n const isControllingVariants = checkIsControllingVariants(props);\n const isVariantNode = checkIsVariantNode(props);\n if (context &&\n isVariantNode &&\n !isControllingVariants &&\n props.inherit !== false) {\n if (initial === undefined)\n initial = context.initial;\n if (animate === undefined)\n animate = context.animate;\n }\n let isInitialAnimationBlocked = presenceContext\n ? presenceContext.initial === false\n : false;\n isInitialAnimationBlocked = isInitialAnimationBlocked || initial === false;\n const variantToSet = isInitialAnimationBlocked ? animate : initial;\n if (variantToSet &&\n typeof variantToSet !== \"boolean\" &&\n !isAnimationControls(variantToSet)) {\n const list = Array.isArray(variantToSet) ? variantToSet : [variantToSet];\n for (let i = 0; i < list.length; i++) {\n const resolved = resolveVariantFromProps(props, list[i]);\n if (resolved) {\n const { transitionEnd, transition, ...target } = resolved;\n for (const key in target) {\n let valueTarget = target[key];\n if (Array.isArray(valueTarget)) {\n /**\n * Take final keyframe if the initial animation is blocked because\n * we want to initialise at the end of that blocked animation.\n */\n const index = isInitialAnimationBlocked\n ? valueTarget.length - 1\n : 0;\n valueTarget = valueTarget[index];\n }\n if (valueTarget !== null) {\n values[key] = valueTarget;\n }\n }\n for (const key in transitionEnd) {\n values[key] = transitionEnd[key];\n }\n }\n }\n }\n return values;\n}\nexport const makeUseVisualState = (config) => (props, isStatic) => {\n const context = useContext(MotionContext);\n const presenceContext = useContext(PresenceContext);\n const make = () => makeState(config, props, context, presenceContext);\n return isStatic ? make() : useConstant(make);\n};\n//# sourceMappingURL=use-visual-state.js.map","\"use client\";\nimport { useRef } from \"react\";\n/**\n * Creates a constant value over the lifecycle of a component.\n *\n * Even if `useMemo` is provided an empty array as its final argument, it doesn't offer\n * a guarantee that it won't re-run for performance reasons later on. By using `useConstant`\n * you can ensure that initialisers don't execute twice or more.\n */\nexport function useConstant(init) {\n const ref = useRef(null);\n if (ref.current === null) {\n ref.current = init();\n }\n return ref.current;\n}\n//# sourceMappingURL=use-constant.js.map","\"use client\";\nimport { scrapeHTMLMotionValuesFromProps } from \"motion-dom\";\nimport { makeUseVisualState } from \"../../motion/utils/use-visual-state\";\nimport { createHtmlRenderState } from \"./utils/create-render-state\";\nexport const useHTMLVisualState = /*@__PURE__*/ makeUseVisualState({\n scrapeMotionValuesFromProps: scrapeHTMLMotionValuesFromProps,\n createRenderState: createHtmlRenderState,\n});\n//# sourceMappingURL=use-html-visual-state.js.map","\"use client\";\nimport { scrapeSVGMotionValuesFromProps } from \"motion-dom\";\nimport { makeUseVisualState } from \"../../motion/utils/use-visual-state\";\nimport { createSvgRenderState } from \"./utils/create-render-state\";\nexport const useSVGVisualState = /*@__PURE__*/ makeUseVisualState({\n scrapeMotionValuesFromProps: scrapeSVGMotionValuesFromProps,\n createRenderState: createSvgRenderState,\n});\n//# sourceMappingURL=use-svg-visual-state.js.map","import { getFeatureDefinitions, setFeatureDefinitions } from \"motion-dom\";\nconst featureProps = {\n animation: [\n \"animate\",\n \"variants\",\n \"whileHover\",\n \"whileTap\",\n \"exit\",\n \"whileInView\",\n \"whileFocus\",\n \"whileDrag\",\n ],\n exit: [\"exit\"],\n drag: [\"drag\", \"dragControls\"],\n focus: [\"whileFocus\"],\n hover: [\"whileHover\", \"onHoverStart\", \"onHoverEnd\"],\n tap: [\"whileTap\", \"onTap\", \"onTapStart\", \"onTapCancel\"],\n pan: [\"onPan\", \"onPanStart\", \"onPanSessionStart\", \"onPanEnd\"],\n inView: [\"whileInView\", \"onViewportEnter\", \"onViewportLeave\"],\n layout: [\"layout\", \"layoutId\"],\n};\nlet isInitialized = false;\n/**\n * Initialize feature definitions with isEnabled checks.\n * This must be called before any motion components are rendered.\n */\nexport function initFeatureDefinitions() {\n if (isInitialized)\n return;\n const initialFeatureDefinitions = {};\n for (const key in featureProps) {\n initialFeatureDefinitions[key] = {\n isEnabled: (props) => featureProps[key].some((name) => !!props[name]),\n };\n }\n setFeatureDefinitions(initialFeatureDefinitions);\n isInitialized = true;\n}\n/**\n * Get the current feature definitions, initializing if needed.\n */\nexport function getInitializedFeatureDefinitions() {\n initFeatureDefinitions();\n return getFeatureDefinitions();\n}\n//# sourceMappingURL=definitions.js.map","export const motionComponentSymbol = Symbol.for(\"motionComponentSymbol\");\n//# sourceMappingURL=symbol.js.map","\"use client\";\nimport { useCallback, useInsertionEffect, useRef } from \"react\";\n/**\n * Creates a ref function that, when called, hydrates the provided\n * external ref and VisualElement.\n */\nexport function useMotionRef(visualState, visualElement, externalRef) {\n /**\n * Store externalRef in a ref to avoid including it in the useCallback\n * dependency array. Including externalRef in dependencies causes issues\n * with libraries like Radix UI that create new callback refs on each render\n * when using asChild - this would cause the callback to be recreated,\n * triggering element remounts and breaking AnimatePresence exit animations.\n */\n const externalRefContainer = useRef(externalRef);\n useInsertionEffect(() => {\n externalRefContainer.current = externalRef;\n });\n // Store cleanup function returned by callback refs (React 19 feature)\n const refCleanup = useRef(null);\n return useCallback((instance) => {\n if (instance) {\n visualState.onMount?.(instance);\n }\n if (visualElement) {\n instance ? visualElement.mount(instance) : visualElement.unmount();\n }\n const ref = externalRefContainer.current;\n if (typeof ref === \"function\") {\n if (instance) {\n const cleanup = ref(instance);\n if (typeof cleanup === \"function\") {\n refCleanup.current = cleanup;\n }\n }\n else if (refCleanup.current) {\n refCleanup.current();\n refCleanup.current = null;\n }\n else {\n ref(instance);\n }\n }\n else if (ref) {\n ;\n ref.current = instance;\n }\n }, [visualElement]);\n}\n//# sourceMappingURL=use-motion-ref.js.map","\"use client\";\nimport { createContext } from \"react\";\n/**\n * Internal, exported only for usage in Framer\n */\nexport const SwitchLayoutGroupContext = createContext({});\n//# sourceMappingURL=SwitchLayoutGroupContext.js.map","export function isRefObject(ref) {\n return (ref &&\n typeof ref === \"object\" &&\n Object.prototype.hasOwnProperty.call(ref, \"current\"));\n}\n//# sourceMappingURL=is-ref-object.js.map","export const isBrowser = typeof window !== \"undefined\";\n//# sourceMappingURL=is-browser.js.map","\"use client\";\nimport { useEffect, useLayoutEffect } from \"react\";\nimport { isBrowser } from \"./is-browser\";\nexport const useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;\n//# sourceMappingURL=use-isomorphic-effect.js.map","\"use client\";\nimport { optimizedAppearDataAttribute, } from \"motion-dom\";\nimport { useContext, useEffect, useInsertionEffect, useRef } from \"react\";\nimport { LazyContext } from \"../../context/LazyContext\";\nimport { MotionConfigContext } from \"../../context/MotionConfigContext\";\nimport { MotionContext } from \"../../context/MotionContext\";\nimport { PresenceContext } from \"../../context/PresenceContext\";\nimport { SwitchLayoutGroupContext, } from \"../../context/SwitchLayoutGroupContext\";\nimport { isRefObject } from \"../../utils/is-ref-object\";\nimport { useIsomorphicLayoutEffect } from \"../../utils/use-isomorphic-effect\";\nexport function useVisualElement(Component, visualState, props, createVisualElement, ProjectionNodeConstructor, isSVG) {\n const { visualElement: parent } = useContext(MotionContext);\n const lazyContext = useContext(LazyContext);\n const presenceContext = useContext(PresenceContext);\n const motionConfig = useContext(MotionConfigContext);\n const reducedMotionConfig = motionConfig.reducedMotion;\n const skipAnimations = motionConfig.skipAnimations;\n const visualElementRef = useRef(null);\n /**\n * Track whether the component has been through React's commit phase.\n * Used to detect when LazyMotion features load after the component has mounted.\n */\n const hasMountedOnce = useRef(false);\n /**\n * If we haven't preloaded a renderer, check to see if we have one lazy-loaded\n */\n createVisualElement =\n createVisualElement ||\n lazyContext.renderer;\n if (!visualElementRef.current && createVisualElement) {\n visualElementRef.current = createVisualElement(Component, {\n visualState,\n parent,\n props,\n presenceContext,\n blockInitialAnimation: presenceContext\n ? presenceContext.initial === false\n : false,\n reducedMotionConfig,\n skipAnimations,\n isSVG,\n });\n /**\n * If the component has already mounted before features loaded (e.g. via\n * LazyMotion with async feature loading), we need to force the initial\n * animation to run. Otherwise state changes that occurred before features\n * loaded will be lost and the element will snap to its final state.\n */\n if (hasMountedOnce.current && visualElementRef.current) {\n visualElementRef.current.manuallyAnimateOnMount = true;\n }\n }\n const visualElement = visualElementRef.current;\n /**\n * Load Motion gesture and animation features. These are rendered as renderless\n * components so each feature can optionally make use of React lifecycle methods.\n */\n const initialLayoutGroupConfig = useContext(SwitchLayoutGroupContext);\n if (visualElement &&\n !visualElement.projection &&\n ProjectionNodeConstructor &&\n (visualElement.type === \"html\" || visualElement.type === \"svg\")) {\n createProjectionNode(visualElementRef.current, props, ProjectionNodeConstructor, initialLayoutGroupConfig);\n }\n const isMounted = useRef(false);\n useInsertionEffect(() => {\n /**\n * Check the component has already mounted before calling\n * `update` unnecessarily. This ensures we skip the initial update.\n */\n if (visualElement && isMounted.current) {\n visualElement.update(props, presenceContext);\n }\n });\n /**\n * Cache this value as we want to know whether HandoffAppearAnimations\n * was present on initial render - it will be deleted after this.\n */\n const optimisedAppearId = props[optimizedAppearDataAttribute];\n const wantsHandoff = useRef(Boolean(optimisedAppearId) &&\n typeof window !== \"undefined\" &&\n !window.MotionHandoffIsComplete?.(optimisedAppearId) &&\n window.MotionHasOptimisedAnimation?.(optimisedAppearId));\n useIsomorphicLayoutEffect(() => {\n /**\n * Track that this component has mounted. This is used to detect when\n * LazyMotion features load after the component has already committed.\n */\n hasMountedOnce.current = true;\n if (!visualElement)\n return;\n isMounted.current = true;\n window.MotionIsMounted = true;\n visualElement.updateFeatures();\n visualElement.scheduleRenderMicrotask();\n /**\n * Ideally this function would always run in a useEffect.\n *\n * However, if we have optimised appear animations to handoff from,\n * it needs to happen synchronously to ensure there's no flash of\n * incorrect styles in the event of a hydration error.\n *\n * So if we detect a situtation where optimised appear animations\n * are running, we use useLayoutEffect to trigger animations.\n */\n if (wantsHandoff.current && visualElement.animationState) {\n visualElement.animationState.animateChanges();\n }\n });\n useEffect(() => {\n if (!visualElement)\n return;\n if (!wantsHandoff.current && visualElement.animationState) {\n visualElement.animationState.animateChanges();\n }\n if (wantsHandoff.current) {\n // This ensures all future calls to animateChanges() in this component will run in useEffect\n queueMicrotask(() => {\n window.MotionHandoffMarkAsComplete?.(optimisedAppearId);\n });\n wantsHandoff.current = false;\n }\n /**\n * Now we've finished triggering animations for this element we\n * can wipe the enteringChildren set for the next render.\n */\n visualElement.enteringChildren = undefined;\n });\n return visualElement;\n}\nfunction createProjectionNode(visualElement, props, ProjectionNodeConstructor, initialPromotionConfig) {\n const { layoutId, layout, drag, dragConstraints, layoutScroll, layoutRoot, layoutAnchor, layoutCrossfade, } = props;\n visualElement.projection = new ProjectionNodeConstructor(visualElement.latestValues, props[\"data-framer-portal-id\"]\n ? undefined\n : getClosestProjectingNode(visualElement.parent));\n visualElement.projection.setOptions({\n layoutId,\n layout,\n alwaysMeasureLayout: Boolean(drag) || (dragConstraints && isRefObject(dragConstraints)),\n visualElement,\n /**\n * TODO: Update options in an effect. This could be tricky as it'll be too late\n * to update by the time layout animations run.\n * We also need to fix this safeToRemove by linking it up to the one returned by usePresence,\n * ensuring it gets called if there's no potential layout animations.\n *\n */\n animationType: typeof layout === \"string\" ? layout : \"both\",\n initialPromotionConfig,\n crossfade: layoutCrossfade,\n layoutScroll,\n layoutRoot,\n layoutAnchor,\n });\n}\nfunction getClosestProjectingNode(visualElement) {\n if (!visualElement)\n return undefined;\n return visualElement.options.allowProjection !== false\n ? visualElement.projection\n : getClosestProjectingNode(visualElement.parent);\n}\n//# sourceMappingURL=use-visual-element.js.map","\"use client\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { invariant, warning } from \"motion-utils\";\nimport { forwardRef, useContext } from \"react\";\nimport { LayoutGroupContext } from \"../context/LayoutGroupContext\";\nimport { LazyContext } from \"../context/LazyContext\";\nimport { MotionConfigContext } from \"../context/MotionConfigContext\";\nimport { MotionContext } from \"../context/MotionContext\";\nimport { useCreateMotionContext } from \"../context/MotionContext/create\";\nimport { useRender } from \"../render/dom/use-render\";\nimport { isSVGComponent } from \"../render/dom/utils/is-svg-component\";\nimport { useHTMLVisualState } from \"../render/html/use-html-visual-state\";\nimport { useSVGVisualState } from \"../render/svg/use-svg-visual-state\";\nimport { getInitializedFeatureDefinitions } from \"./features/definitions\";\nimport { loadFeatures } from \"./features/load-features\";\nimport { motionComponentSymbol } from \"./utils/symbol\";\nimport { useMotionRef } from \"./utils/use-motion-ref\";\nimport { useVisualElement } from \"./utils/use-visual-element\";\n/**\n * Create a `motion` component.\n *\n * This function accepts a Component argument, which can be either a string (ie \"div\"\n * for `motion.div`), or an actual React component.\n *\n * Alongside this is a config option which provides a way of rendering the provided\n * component \"offline\", or outside the React render cycle.\n */\nexport function createMotionComponent(Component, { forwardMotionProps = false, type } = {}, preloadedFeatures, createVisualElement) {\n preloadedFeatures && loadFeatures(preloadedFeatures);\n /**\n * Determine whether to use SVG or HTML rendering based on:\n * 1. Explicit `type` option (highest priority)\n * 2. Auto-detection via `isSVGComponent`\n */\n const isSVG = type ? type === \"svg\" : isSVGComponent(Component);\n const useVisualState = isSVG ? useSVGVisualState : useHTMLVisualState;\n function MotionDOMComponent(props, externalRef) {\n /**\n * If we need to measure the element we load this functionality in a\n * separate class component in order to gain access to getSnapshotBeforeUpdate.\n */\n let MeasureLayout;\n const configAndProps = {\n ...useContext(MotionConfigContext),\n ...props,\n layoutId: useLayoutId(props),\n };\n const { isStatic } = configAndProps;\n const context = useCreateMotionContext(props);\n const visualState = useVisualState(props, isStatic);\n if (!isStatic && typeof window !== \"undefined\") {\n useStrictMode(configAndProps, preloadedFeatures);\n const layoutProjection = getProjectionFunctionality(configAndProps);\n MeasureLayout = layoutProjection.MeasureLayout;\n /**\n * Create a VisualElement for this component. A VisualElement provides a common\n * interface to renderer-specific APIs (ie DOM/Three.js etc) as well as\n * providing a way of rendering to these APIs outside of the React render loop\n * for more performant animations and interactions\n */\n context.visualElement = useVisualElement(Component, visualState, configAndProps, createVisualElement, layoutProjection.ProjectionNode, isSVG);\n }\n /**\n * The mount order and hierarchy is specific to ensure our element ref\n * is hydrated by the time features fire their effects.\n */\n return (_jsxs(MotionContext.Provider, { value: context, children: [MeasureLayout && context.visualElement ? (_jsx(MeasureLayout, { visualElement: context.visualElement, ...configAndProps })) : null, useRender(Component, props, useMotionRef(visualState, context.visualElement, externalRef), visualState, isStatic, forwardMotionProps, isSVG)] }));\n }\n MotionDOMComponent.displayName = `motion.${typeof Component === \"string\"\n ? Component\n : `create(${Component.displayName ?? Component.name ?? \"\"})`}`;\n const ForwardRefMotionComponent = forwardRef(MotionDOMComponent);\n ForwardRefMotionComponent[motionComponentSymbol] = Component;\n return ForwardRefMotionComponent;\n}\nfunction useLayoutId({ layoutId }) {\n const layoutGroupId = useContext(LayoutGroupContext).id;\n return layoutGroupId && layoutId !== undefined\n ? layoutGroupId + \"-\" + layoutId\n : layoutId;\n}\nfunction useStrictMode(configAndProps, preloadedFeatures) {\n const isStrict = useContext(LazyContext).strict;\n /**\n * If we're in development mode, check to make sure we're not rendering a motion component\n * as a child of LazyMotion, as this will break the file-size benefits of using it.\n */\n if (process.env.NODE_ENV !== \"production\" &&\n preloadedFeatures &&\n isStrict) {\n const strictMessage = \"You have rendered a `motion` component within a `LazyMotion` component. This will break tree shaking. Import and render a `m` component instead.\";\n configAndProps.ignoreStrict\n ? warning(false, strictMessage, \"lazy-strict-mode\")\n : invariant(false, strictMessage, \"lazy-strict-mode\");\n }\n}\nfunction getProjectionFunctionality(props) {\n const featureDefinitions = getInitializedFeatureDefinitions();\n const { drag, layout } = featureDefinitions;\n if (!drag && !layout)\n return {};\n const combined = { ...drag, ...layout };\n return {\n MeasureLayout: drag?.isEnabled(props) || layout?.isEnabled(props)\n ? combined.MeasureLayout\n : undefined,\n ProjectionNode: combined.ProjectionNode,\n };\n}\n//# sourceMappingURL=index.js.map","import { setFeatureDefinitions } from \"motion-dom\";\nimport { getInitializedFeatureDefinitions } from \"./definitions\";\nexport function loadFeatures(features) {\n const featureDefinitions = getInitializedFeatureDefinitions();\n for (const key in features) {\n featureDefinitions[key] = {\n ...featureDefinitions[key],\n ...features[key],\n };\n }\n setFeatureDefinitions(featureDefinitions);\n}\n//# sourceMappingURL=load-features.js.map","import { HTMLVisualElement, SVGVisualElement } from \"motion-dom\";\nimport { Fragment } from \"react\";\nimport { isSVGComponent } from \"./utils/is-svg-component\";\nexport const createDomVisualElement = (Component, options) => {\n /**\n * Use explicit isSVG override if provided, otherwise auto-detect\n */\n const isSVG = options.isSVG ?? isSVGComponent(Component);\n return isSVG\n ? new SVGVisualElement(options)\n : new HTMLVisualElement(options, {\n allowProjection: Component !== Fragment,\n });\n};\n//# sourceMappingURL=create-visual-element.js.map","import { Feature, resolveVariant } from \"motion-dom\";\nlet id = 0;\nexport class ExitAnimationFeature extends Feature {\n constructor() {\n super(...arguments);\n this.id = id++;\n this.isExitComplete = false;\n }\n update() {\n if (!this.node.presenceContext)\n return;\n const { isPresent, onExitComplete } = this.node.presenceContext;\n const { isPresent: prevIsPresent } = this.node.prevPresenceContext || {};\n if (!this.node.animationState || isPresent === prevIsPresent) {\n return;\n }\n if (isPresent && prevIsPresent === false) {\n /**\n * When re-entering, if the exit animation already completed\n * (element is at rest), reset to initial values so the enter\n * animation replays from the correct position.\n */\n if (this.isExitComplete) {\n const { initial, custom } = this.node.getProps();\n if (typeof initial === \"string\" ||\n (typeof initial === \"object\" &&\n initial !== null &&\n !Array.isArray(initial))) {\n const resolved = resolveVariant(this.node, initial, custom);\n if (resolved) {\n const { transition, transitionEnd, ...target } = resolved;\n for (const key in target) {\n this.node\n .getValue(key)\n ?.jump(target[key]);\n }\n }\n }\n this.node.animationState.reset();\n this.node.animationState.animateChanges();\n }\n else {\n this.node.animationState.setActive(\"exit\", false);\n }\n this.isExitComplete = false;\n return;\n }\n const exitAnimation = this.node.animationState.setActive(\"exit\", !isPresent);\n if (onExitComplete && !isPresent) {\n exitAnimation.then(() => {\n this.isExitComplete = true;\n onExitComplete(this.id);\n });\n }\n }\n mount() {\n const { register, onExitComplete } = this.node.presenceContext || {};\n if (onExitComplete) {\n onExitComplete(this.id);\n }\n if (register) {\n this.unmount = register(this.id);\n }\n }\n unmount() { }\n}\n//# sourceMappingURL=exit.js.map","import { AnimationFeature } from \"./animation\";\nimport { ExitAnimationFeature } from \"./animation/exit\";\nexport const animations = {\n animation: {\n Feature: AnimationFeature,\n },\n exit: {\n Feature: ExitAnimationFeature,\n },\n};\n//# sourceMappingURL=animations.js.map","import { createAnimationState, Feature, isAnimationControls, } from \"motion-dom\";\nexport class AnimationFeature extends Feature {\n /**\n * We dynamically generate the AnimationState manager as it contains a reference\n * to the underlying animation library. We only want to load that if we load this,\n * so people can optionally code split it out using the `m` component.\n */\n constructor(node) {\n super(node);\n node.animationState || (node.animationState = createAnimationState(node));\n }\n updateAnimationControlsSubscription() {\n const { animate } = this.node.getProps();\n if (isAnimationControls(animate)) {\n this.unmountControls = animate.subscribe(this.node);\n }\n }\n /**\n * Subscribe any provided AnimationControls to the component's VisualElement\n */\n mount() {\n this.updateAnimationControlsSubscription();\n }\n update() {\n const { animate } = this.node.getProps();\n const { animate: prevAnimate } = this.node.prevProps || {};\n if (animate !== prevAnimate) {\n this.updateAnimationControlsSubscription();\n }\n }\n unmount() {\n this.node.animationState.reset();\n this.unmountControls?.();\n }\n}\n//# sourceMappingURL=index.js.map","import { isPrimaryPointer } from \"motion-dom\";\nexport function extractEventInfo(event) {\n return {\n point: {\n x: event.pageX,\n y: event.pageY,\n },\n };\n}\nexport const addPointerInfo = (handler) => (event) => isPrimaryPointer(event) && handler(event, extractEventInfo(event));\n//# sourceMappingURL=event-info.js.map","import { addDomEvent } from \"motion-dom\";\nimport { addPointerInfo } from \"./event-info\";\nexport function addPointerEvent(target, eventName, handler, options) {\n return addDomEvent(target, eventName, addPointerInfo(handler), options);\n}\n//# sourceMappingURL=add-pointer-event.js.map","// Fixes https://github.com/motiondivision/motion/issues/2270\nexport const getContextWindow = ({ current }) => {\n return current ? current.ownerDocument.defaultView : null;\n};\n//# sourceMappingURL=get-context-window.js.map","export const distance = (a, b) => Math.abs(a - b);\nexport function distance2D(a, b) {\n // Multi-dimensional\n const xDelta = distance(a.x, b.x);\n const yDelta = distance(a.y, b.y);\n return Math.sqrt(xDelta ** 2 + yDelta ** 2);\n}\n//# sourceMappingURL=distance.js.map","import { cancelFrame, frame, frameData, isPrimaryPointer } from \"motion-dom\";\nimport { millisecondsToSeconds, pipe, secondsToMilliseconds, } from \"motion-utils\";\nimport { addPointerEvent } from \"../../events/add-pointer-event\";\nimport { extractEventInfo } from \"../../events/event-info\";\nimport { distance2D } from \"../../utils/distance\";\nconst overflowStyles = /*#__PURE__*/ new Set([\"auto\", \"scroll\"]);\n/**\n * @internal\n */\nexport class PanSession {\n constructor(event, handlers, { transformPagePoint, contextWindow = window, dragSnapToOrigin = false, distanceThreshold = 3, element, } = {}) {\n /**\n * @internal\n */\n this.startEvent = null;\n /**\n * @internal\n */\n this.lastMoveEvent = null;\n /**\n * @internal\n */\n this.lastMoveEventInfo = null;\n /**\n * Raw (untransformed) event info, re-transformed each frame\n * so transformPagePoint sees the current parent matrix.\n * @internal\n */\n this.lastRawMoveEventInfo = null;\n /**\n * @internal\n */\n this.handlers = {};\n /**\n * @internal\n */\n this.contextWindow = window;\n /**\n * Scroll positions of scrollable ancestors and window.\n * @internal\n */\n this.scrollPositions = new Map();\n /**\n * Cleanup function for scroll listeners.\n * @internal\n */\n this.removeScrollListeners = null;\n this.onElementScroll = (event) => {\n this.handleScroll(event.target);\n };\n this.onWindowScroll = () => {\n this.handleScroll(window);\n };\n this.updatePoint = () => {\n if (!(this.lastMoveEvent && this.lastMoveEventInfo))\n return;\n // Re-transform raw point through current transformPagePoint so\n // animated parent transforms (e.g. rotation) are picked up each frame\n if (this.lastRawMoveEventInfo) {\n this.lastMoveEventInfo = transformPoint(this.lastRawMoveEventInfo, this.transformPagePoint);\n }\n const info = getPanInfo(this.lastMoveEventInfo, this.history);\n const isPanStarted = this.startEvent !== null;\n // Only start panning if the offset is larger than 3 pixels. If we make it\n // any larger than this we'll want to reset the pointer history\n // on the first update to avoid visual snapping to the cursor.\n const isDistancePastThreshold = distance2D(info.offset, { x: 0, y: 0 }) >= this.distanceThreshold;\n if (!isPanStarted && !isDistancePastThreshold)\n return;\n const { point } = info;\n const { timestamp } = frameData;\n this.history.push({ ...point, timestamp });\n const { onStart, onMove } = this.handlers;\n if (!isPanStarted) {\n onStart && onStart(this.lastMoveEvent, info);\n this.startEvent = this.lastMoveEvent;\n }\n onMove && onMove(this.lastMoveEvent, info);\n };\n this.handlePointerMove = (event, info) => {\n this.lastMoveEvent = event;\n this.lastRawMoveEventInfo = info;\n this.lastMoveEventInfo = transformPoint(info, this.transformPagePoint);\n // Throttle mouse move event to once per frame\n frame.update(this.updatePoint, true);\n };\n this.handlePointerUp = (event, info) => {\n this.end();\n const { onEnd, onSessionEnd, resumeAnimation } = this.handlers;\n // Resume animation if dragSnapToOrigin is set OR if no drag started (user just clicked)\n // This ensures constraint animations continue when interrupted by a click\n if (this.dragSnapToOrigin || !this.startEvent) {\n resumeAnimation && resumeAnimation();\n }\n if (!(this.lastMoveEvent && this.lastMoveEventInfo))\n return;\n const panInfo = getPanInfo(event.type === \"pointercancel\"\n ? this.lastMoveEventInfo\n : transformPoint(info, this.transformPagePoint), this.history);\n if (this.startEvent && onEnd) {\n onEnd(event, panInfo);\n }\n onSessionEnd && onSessionEnd(event, panInfo);\n };\n // If we have more than one touch, don't start detecting this gesture\n if (!isPrimaryPointer(event))\n return;\n this.dragSnapToOrigin = dragSnapToOrigin;\n this.handlers = handlers;\n this.transformPagePoint = transformPagePoint;\n this.distanceThreshold = distanceThreshold;\n this.contextWindow = contextWindow || window;\n const info = extractEventInfo(event);\n const initialInfo = transformPoint(info, this.transformPagePoint);\n const { point } = initialInfo;\n const { timestamp } = frameData;\n this.history = [{ ...point, timestamp }];\n const { onSessionStart } = handlers;\n onSessionStart &&\n onSessionStart(event, getPanInfo(initialInfo, this.history));\n this.removeListeners = pipe(addPointerEvent(this.contextWindow, \"pointermove\", this.handlePointerMove), addPointerEvent(this.contextWindow, \"pointerup\", this.handlePointerUp), addPointerEvent(this.contextWindow, \"pointercancel\", this.handlePointerUp));\n // Start scroll tracking if element provided\n if (element) {\n this.startScrollTracking(element);\n }\n }\n /**\n * Start tracking scroll on ancestors and window.\n */\n startScrollTracking(element) {\n // Store initial scroll positions for scrollable ancestors\n let current = element.parentElement;\n while (current) {\n const style = getComputedStyle(current);\n if (overflowStyles.has(style.overflowX) ||\n overflowStyles.has(style.overflowY)) {\n this.scrollPositions.set(current, {\n x: current.scrollLeft,\n y: current.scrollTop,\n });\n }\n current = current.parentElement;\n }\n // Track window scroll\n this.scrollPositions.set(window, {\n x: window.scrollX,\n y: window.scrollY,\n });\n // Capture listener catches element scroll events as they bubble\n window.addEventListener(\"scroll\", this.onElementScroll, {\n capture: true,\n });\n // Direct window scroll listener (window scroll doesn't bubble)\n window.addEventListener(\"scroll\", this.onWindowScroll);\n this.removeScrollListeners = () => {\n window.removeEventListener(\"scroll\", this.onElementScroll, {\n capture: true,\n });\n window.removeEventListener(\"scroll\", this.onWindowScroll);\n };\n }\n /**\n * Handle scroll compensation during drag.\n *\n * For element scroll: adjusts history origin since pageX/pageY doesn't change.\n * For window scroll: adjusts lastMoveEventInfo since pageX/pageY would change.\n */\n handleScroll(target) {\n const initial = this.scrollPositions.get(target);\n if (!initial)\n return;\n const isWindow = target === window;\n const current = isWindow\n ? { x: window.scrollX, y: window.scrollY }\n : {\n x: target.scrollLeft,\n y: target.scrollTop,\n };\n const delta = { x: current.x - initial.x, y: current.y - initial.y };\n if (delta.x === 0 && delta.y === 0)\n return;\n if (isWindow) {\n // Window scroll: pageX/pageY changes, so update lastMoveEventInfo\n if (this.lastMoveEventInfo) {\n this.lastMoveEventInfo.point.x += delta.x;\n this.lastMoveEventInfo.point.y += delta.y;\n }\n }\n else {\n // Element scroll: pageX/pageY unchanged, so adjust history origin\n if (this.history.length > 0) {\n this.history[0].x -= delta.x;\n this.history[0].y -= delta.y;\n }\n }\n this.scrollPositions.set(target, current);\n frame.update(this.updatePoint, true);\n }\n updateHandlers(handlers) {\n this.handlers = handlers;\n }\n end() {\n this.removeListeners && this.removeListeners();\n this.removeScrollListeners && this.removeScrollListeners();\n this.scrollPositions.clear();\n cancelFrame(this.updatePoint);\n }\n}\nfunction transformPoint(info, transformPagePoint) {\n return transformPagePoint ? { point: transformPagePoint(info.point) } : info;\n}\nfunction subtractPoint(a, b) {\n return { x: a.x - b.x, y: a.y - b.y };\n}\nfunction getPanInfo({ point }, history) {\n return {\n point,\n delta: subtractPoint(point, lastDevicePoint(history)),\n offset: subtractPoint(point, startDevicePoint(history)),\n velocity: getVelocity(history, 0.1),\n };\n}\nfunction startDevicePoint(history) {\n return history[0];\n}\nfunction lastDevicePoint(history) {\n return history[history.length - 1];\n}\nfunction getVelocity(history, timeDelta) {\n if (history.length < 2) {\n return { x: 0, y: 0 };\n }\n let i = history.length - 1;\n let timestampedPoint = null;\n const lastPoint = lastDevicePoint(history);\n while (i >= 0) {\n timestampedPoint = history[i];\n if (lastPoint.timestamp - timestampedPoint.timestamp >\n secondsToMilliseconds(timeDelta)) {\n break;\n }\n i--;\n }\n if (!timestampedPoint) {\n return { x: 0, y: 0 };\n }\n /**\n * If the selected point is the pointer-down origin (history[0]),\n * there are better movement points available, and the time gap\n * is suspiciously large (>2x timeDelta), use the next point instead.\n * This prevents stale pointer-down points from diluting velocity\n * in hold-then-flick gestures.\n */\n if (timestampedPoint === history[0] &&\n history.length > 2 &&\n lastPoint.timestamp - timestampedPoint.timestamp >\n secondsToMilliseconds(timeDelta) * 2) {\n timestampedPoint = history[1];\n }\n const time = millisecondsToSeconds(lastPoint.timestamp - timestampedPoint.timestamp);\n if (time === 0) {\n return { x: 0, y: 0 };\n }\n const currentVelocity = {\n x: (lastPoint.x - timestampedPoint.x) / time,\n y: (lastPoint.y - timestampedPoint.y) / time,\n };\n if (currentVelocity.x === Infinity) {\n currentVelocity.x = 0;\n }\n if (currentVelocity.y === Infinity) {\n currentVelocity.y = 0;\n }\n return currentVelocity;\n}\n//# sourceMappingURL=PanSession.js.map","import { calcLength, mixNumber } from \"motion-dom\";\nimport { progress as calcProgress, clamp, } from \"motion-utils\";\n/**\n * Apply constraints to a point. These constraints are both physical along an\n * axis, and an elastic factor that determines how much to constrain the point\n * by if it does lie outside the defined parameters.\n */\nexport function applyConstraints(point, { min, max }, elastic) {\n if (min !== undefined && point < min) {\n // If we have a min point defined, and this is outside of that, constrain\n point = elastic\n ? mixNumber(min, point, elastic.min)\n : Math.max(point, min);\n }\n else if (max !== undefined && point > max) {\n // If we have a max point defined, and this is outside of that, constrain\n point = elastic\n ? mixNumber(max, point, elastic.max)\n : Math.min(point, max);\n }\n return point;\n}\n/**\n * Calculates a min projection point based on a pointer, pointer progress\n * within the drag target, and constraints.\n *\n * For instance if an element was 100px width, we were dragging from 0.25\n * along this axis, the pointer is at 200px, and there were no constraints,\n * we would calculate a min projection point of 175px.\n */\nexport function calcConstrainedMinPoint(point, length, progress, constraints, elastic) {\n // Calculate a min point for this axis and apply it to the current pointer\n const min = point - length * progress;\n return constraints ? applyConstraints(min, constraints, elastic) : min;\n}\n/**\n * Calculate constraints in terms of the viewport when defined relatively to the\n * measured axis. This is measured from the nearest edge, so a max constraint of 200\n * on an axis with a max value of 300 would return a constraint of 500 - axis length\n */\nexport function calcRelativeAxisConstraints(axis, min, max) {\n return {\n min: min !== undefined ? axis.min + min : undefined,\n max: max !== undefined\n ? axis.max + max - (axis.max - axis.min)\n : undefined,\n };\n}\n/**\n * Calculate constraints in terms of the viewport when\n * defined relatively to the measured bounding box.\n */\nexport function calcRelativeConstraints(layoutBox, { top, left, bottom, right }) {\n return {\n x: calcRelativeAxisConstraints(layoutBox.x, left, right),\n y: calcRelativeAxisConstraints(layoutBox.y, top, bottom),\n };\n}\n/**\n * Calculate viewport constraints when defined as another viewport-relative axis\n */\nexport function calcViewportAxisConstraints(layoutAxis, constraintsAxis) {\n let min = constraintsAxis.min - layoutAxis.min;\n let max = constraintsAxis.max - layoutAxis.max;\n // If the constraints axis is actually smaller than the layout axis then we can\n // flip the constraints\n if (constraintsAxis.max - constraintsAxis.min <\n layoutAxis.max - layoutAxis.min) {\n ;\n [min, max] = [max, min];\n }\n return { min, max };\n}\n/**\n * Calculate viewport constraints when defined as another viewport-relative box\n */\nexport function calcViewportConstraints(layoutBox, constraintsBox) {\n return {\n x: calcViewportAxisConstraints(layoutBox.x, constraintsBox.x),\n y: calcViewportAxisConstraints(layoutBox.y, constraintsBox.y),\n };\n}\n/**\n * Calculate a transform origin relative to the source axis, between 0-1, that results\n * in an asthetically pleasing scale/transform needed to project from source to target.\n */\nexport function calcOrigin(source, target) {\n let origin = 0.5;\n const sourceLength = calcLength(source);\n const targetLength = calcLength(target);\n if (targetLength > sourceLength) {\n origin = calcProgress(target.min, target.max - sourceLength, source.min);\n }\n else if (sourceLength > targetLength) {\n origin = calcProgress(source.min, source.max - targetLength, target.min);\n }\n return clamp(0, 1, origin);\n}\n/**\n * Calculate the relative progress of one constraints box relative to another.\n * Imagine a page scroll bar. At the top, this would return 0, at the bottom, 1.\n * Anywhere in-between, a value between 0 and 1.\n *\n * This also handles flipped constraints, for instance a draggable container within\n * a smaller viewport like a scrollable view.\n */\nexport function calcProgressWithinConstraints(layoutBox, constraintsBox) {\n return {\n x: calcOrigin(layoutBox.x, constraintsBox.x),\n y: calcOrigin(layoutBox.y, constraintsBox.y),\n };\n}\n/**\n * Calculate the an axis position based on two axes and a progress value.\n */\nexport function calcPositionFromProgress(axis, constraints, progress) {\n const axisLength = axis.max - axis.min;\n const min = mixNumber(constraints.min, constraints.max - axisLength, progress);\n return { min, max: min + axisLength };\n}\n/**\n * Rebase the calculated viewport constraints relative to the layout.min point.\n */\nexport function rebaseAxisConstraints(layout, constraints) {\n const relativeConstraints = {};\n if (constraints.min !== undefined) {\n relativeConstraints.min = constraints.min - layout.min;\n }\n if (constraints.max !== undefined) {\n relativeConstraints.max = constraints.max - layout.min;\n }\n return relativeConstraints;\n}\nexport const defaultElastic = 0.35;\n/**\n * Accepts a dragElastic prop and returns resolved elastic values for each axis.\n */\nexport function resolveDragElastic(dragElastic = defaultElastic) {\n if (dragElastic === false) {\n dragElastic = 0;\n }\n else if (dragElastic === true) {\n dragElastic = defaultElastic;\n }\n return {\n x: resolveAxisElastic(dragElastic, \"left\", \"right\"),\n y: resolveAxisElastic(dragElastic, \"top\", \"bottom\"),\n };\n}\nexport function resolveAxisElastic(dragElastic, minLabel, maxLabel) {\n return {\n min: resolvePointElastic(dragElastic, minLabel),\n max: resolvePointElastic(dragElastic, maxLabel),\n };\n}\nexport function resolvePointElastic(dragElastic, label) {\n return typeof dragElastic === \"number\"\n ? dragElastic\n : dragElastic[label] || 0;\n}\n//# sourceMappingURL=constraints.js.map","import { addValueToWillChange, animateMotionValue, calcLength, convertBoundingBoxToBox, convertBoxToBoundingBox, createBox, eachAxis, frame, isElementTextInput, measurePageBox, mixNumber, percent, resize, setDragLock, } from \"motion-dom\";\nimport { invariant } from \"motion-utils\";\nimport { addDomEvent } from \"motion-dom\";\nimport { addPointerEvent } from \"../../events/add-pointer-event\";\nimport { extractEventInfo } from \"../../events/event-info\";\nimport { getContextWindow } from \"../../utils/get-context-window\";\nimport { isRefObject } from \"../../utils/is-ref-object\";\nimport { PanSession } from \"../pan/PanSession\";\nimport { applyConstraints, calcOrigin, calcRelativeConstraints, calcViewportConstraints, defaultElastic, rebaseAxisConstraints, resolveDragElastic, } from \"./utils/constraints\";\nexport const elementDragControls = new WeakMap();\nexport class VisualElementDragControls {\n constructor(visualElement) {\n this.openDragLock = null;\n this.isDragging = false;\n this.currentDirection = null;\n this.originPoint = { x: 0, y: 0 };\n /**\n * The permitted boundaries of travel, in pixels.\n */\n this.constraints = false;\n this.hasMutatedConstraints = false;\n /**\n * The per-axis resolved elastic values.\n */\n this.elastic = createBox();\n /**\n * The latest pointer event. Used as fallback when the `cancel` and `stop` functions are called without arguments.\n */\n this.latestPointerEvent = null;\n /**\n * The latest pan info. Used as fallback when the `cancel` and `stop` functions are called without arguments.\n */\n this.latestPanInfo = null;\n this.visualElement = visualElement;\n }\n start(originEvent, { snapToCursor = false, distanceThreshold } = {}) {\n /**\n * Don't start dragging if this component is exiting\n */\n const { presenceContext } = this.visualElement;\n if (presenceContext && presenceContext.isPresent === false)\n return;\n const onSessionStart = (event) => {\n if (snapToCursor) {\n this.snapToCursor(extractEventInfo(event).point);\n }\n this.stopAnimation();\n };\n const onStart = (event, info) => {\n // Attempt to grab the global drag gesture lock - maybe make this part of PanSession\n const { drag, dragPropagation, onDragStart } = this.getProps();\n if (drag && !dragPropagation) {\n if (this.openDragLock)\n this.openDragLock();\n this.openDragLock = setDragLock(drag);\n // If we don 't have the lock, don't start dragging\n if (!this.openDragLock)\n return;\n }\n this.latestPointerEvent = event;\n this.latestPanInfo = info;\n this.isDragging = true;\n this.currentDirection = null;\n this.resolveConstraints();\n if (this.visualElement.projection) {\n this.visualElement.projection.isAnimationBlocked = true;\n this.visualElement.projection.target = undefined;\n }\n /**\n * Record gesture origin and pointer offset\n */\n eachAxis((axis) => {\n let current = this.getAxisMotionValue(axis).get() || 0;\n /**\n * If the MotionValue is a percentage value convert to px\n */\n if (percent.test(current)) {\n const { projection } = this.visualElement;\n if (projection && projection.layout) {\n const measuredAxis = projection.layout.layoutBox[axis];\n if (measuredAxis) {\n const length = calcLength(measuredAxis);\n current = length * (parseFloat(current) / 100);\n }\n }\n }\n this.originPoint[axis] = current;\n });\n // Fire onDragStart event\n if (onDragStart) {\n frame.update(() => onDragStart(event, info), false, true);\n }\n addValueToWillChange(this.visualElement, \"transform\");\n const { animationState } = this.visualElement;\n animationState && animationState.setActive(\"whileDrag\", true);\n };\n const onMove = (event, info) => {\n this.latestPointerEvent = event;\n this.latestPanInfo = info;\n const { dragPropagation, dragDirectionLock, onDirectionLock, onDrag, } = this.getProps();\n // If we didn't successfully receive the gesture lock, early return.\n if (!dragPropagation && !this.openDragLock)\n return;\n const { offset } = info;\n // Attempt to detect drag direction if directionLock is true\n if (dragDirectionLock && this.currentDirection === null) {\n this.currentDirection = getCurrentDirection(offset);\n // If we've successfully set a direction, notify listener\n if (this.currentDirection !== null) {\n onDirectionLock && onDirectionLock(this.currentDirection);\n }\n return;\n }\n // Update each point with the latest position\n this.updateAxis(\"x\", info.point, offset);\n this.updateAxis(\"y\", info.point, offset);\n /**\n * Ideally we would leave the renderer to fire naturally at the end of\n * this frame but if the element is about to change layout as the result\n * of a re-render we want to ensure the browser can read the latest\n * bounding box to ensure the pointer and element don't fall out of sync.\n */\n this.visualElement.render();\n /**\n * This must fire after the render call as it might trigger a state\n * change which itself might trigger a layout update.\n */\n if (onDrag) {\n frame.update(() => onDrag(event, info), false, true);\n }\n };\n const onSessionEnd = (event, info) => {\n this.latestPointerEvent = event;\n this.latestPanInfo = info;\n this.stop(event, info);\n this.latestPointerEvent = null;\n this.latestPanInfo = null;\n };\n const resumeAnimation = () => {\n const { dragSnapToOrigin: snap } = this.getProps();\n if (snap || this.constraints) {\n this.startAnimation({ x: 0, y: 0 });\n }\n };\n const { dragSnapToOrigin } = this.getProps();\n this.panSession = new PanSession(originEvent, {\n onSessionStart,\n onStart,\n onMove,\n onSessionEnd,\n resumeAnimation,\n }, {\n transformPagePoint: this.visualElement.getTransformPagePoint(),\n dragSnapToOrigin,\n distanceThreshold,\n contextWindow: getContextWindow(this.visualElement),\n element: this.visualElement.current,\n });\n }\n /**\n * @internal\n */\n stop(event, panInfo) {\n const finalEvent = event || this.latestPointerEvent;\n const finalPanInfo = panInfo || this.latestPanInfo;\n const isDragging = this.isDragging;\n this.cancel();\n if (!isDragging || !finalPanInfo || !finalEvent)\n return;\n const { velocity } = finalPanInfo;\n this.startAnimation(velocity);\n const { onDragEnd } = this.getProps();\n if (onDragEnd) {\n frame.postRender(() => onDragEnd(finalEvent, finalPanInfo));\n }\n }\n /**\n * @internal\n */\n cancel() {\n this.isDragging = false;\n const { projection, animationState } = this.visualElement;\n if (projection) {\n projection.isAnimationBlocked = false;\n }\n this.endPanSession();\n const { dragPropagation } = this.getProps();\n if (!dragPropagation && this.openDragLock) {\n this.openDragLock();\n this.openDragLock = null;\n }\n animationState && animationState.setActive(\"whileDrag\", false);\n }\n /**\n * Clean up the pan session without modifying other drag state.\n * This is used during unmount to ensure event listeners are removed\n * without affecting projection animations or drag locks.\n * @internal\n */\n endPanSession() {\n this.panSession && this.panSession.end();\n this.panSession = undefined;\n }\n updateAxis(axis, _point, offset) {\n const { drag } = this.getProps();\n // If we're not dragging this axis, do an early return.\n if (!offset || !shouldDrag(axis, drag, this.currentDirection))\n return;\n const axisValue = this.getAxisMotionValue(axis);\n let next = this.originPoint[axis] + offset[axis];\n // Apply constraints\n if (this.constraints && this.constraints[axis]) {\n next = applyConstraints(next, this.constraints[axis], this.elastic[axis]);\n }\n axisValue.set(next);\n }\n resolveConstraints() {\n const { dragConstraints, dragElastic } = this.getProps();\n const layout = this.visualElement.projection &&\n !this.visualElement.projection.layout\n ? this.visualElement.projection.measure(false)\n : this.visualElement.projection?.layout;\n const prevConstraints = this.constraints;\n if (dragConstraints && isRefObject(dragConstraints)) {\n if (!this.constraints) {\n this.constraints = this.resolveRefConstraints();\n }\n }\n else {\n if (dragConstraints && layout) {\n this.constraints = calcRelativeConstraints(layout.layoutBox, dragConstraints);\n }\n else {\n this.constraints = false;\n }\n }\n this.elastic = resolveDragElastic(dragElastic);\n /**\n * If we're outputting to external MotionValues, we want to rebase the measured constraints\n * from viewport-relative to component-relative. This only applies to relative (non-ref)\n * constraints, as ref-based constraints from calcViewportConstraints are already in the\n * correct coordinate space for the motion value transform offset.\n */\n if (prevConstraints !== this.constraints &&\n !isRefObject(dragConstraints) &&\n layout &&\n this.constraints &&\n !this.hasMutatedConstraints) {\n eachAxis((axis) => {\n if (this.constraints !== false &&\n this.getAxisMotionValue(axis)) {\n this.constraints[axis] = rebaseAxisConstraints(layout.layoutBox[axis], this.constraints[axis]);\n }\n });\n }\n }\n resolveRefConstraints() {\n const { dragConstraints: constraints, onMeasureDragConstraints } = this.getProps();\n if (!constraints || !isRefObject(constraints))\n return false;\n const constraintsElement = constraints.current;\n invariant(constraintsElement !== null, \"If `dragConstraints` is set as a React ref, that ref must be passed to another component's `ref` prop.\", \"drag-constraints-ref\");\n const { projection } = this.visualElement;\n // TODO\n if (!projection || !projection.layout)\n return false;\n /**\n * Refresh the root scroll offset so the constraint's viewport box\n * translates to correct page coordinates. The scroll captured at\n * drag mount can be stale if the document was scrolled afterwards —\n * e.g. via the browser restoring scroll on refresh, or an ancestor\n * layout effect running after this element's mount (#2829).\n *\n * Clear the cached scroll first so `updateScroll` bypasses its\n * per-animationId cache and re-reads the live value.\n */\n if (projection.root) {\n projection.root.scroll = undefined;\n projection.root.updateScroll();\n }\n const constraintsBox = measurePageBox(constraintsElement, projection.root, this.visualElement.getTransformPagePoint());\n let measuredConstraints = calcViewportConstraints(projection.layout.layoutBox, constraintsBox);\n /**\n * If there's an onMeasureDragConstraints listener we call it and\n * if different constraints are returned, set constraints to that\n */\n if (onMeasureDragConstraints) {\n const userConstraints = onMeasureDragConstraints(convertBoxToBoundingBox(measuredConstraints));\n this.hasMutatedConstraints = !!userConstraints;\n if (userConstraints) {\n measuredConstraints = convertBoundingBoxToBox(userConstraints);\n }\n }\n return measuredConstraints;\n }\n startAnimation(velocity) {\n const { drag, dragMomentum, dragElastic, dragTransition, dragSnapToOrigin, onDragTransitionEnd, } = this.getProps();\n const constraints = this.constraints || {};\n const momentumAnimations = eachAxis((axis) => {\n if (!shouldDrag(axis, drag, this.currentDirection)) {\n return;\n }\n let transition = (constraints && constraints[axis]) || {};\n if (dragSnapToOrigin === true ||\n dragSnapToOrigin === axis)\n transition = { min: 0, max: 0 };\n /**\n * Overdamp the boundary spring if `dragElastic` is disabled. There's still a frame\n * of spring animations so we should look into adding a disable spring option to `inertia`.\n * We could do something here where we affect the `bounceStiffness` and `bounceDamping`\n * using the value of `dragElastic`.\n */\n const bounceStiffness = dragElastic ? 200 : 1000000;\n const bounceDamping = dragElastic ? 40 : 10000000;\n const inertia = {\n type: \"inertia\",\n velocity: dragMomentum ? velocity[axis] : 0,\n bounceStiffness,\n bounceDamping,\n timeConstant: 750,\n restDelta: 1,\n restSpeed: 10,\n ...dragTransition,\n ...transition,\n };\n // If we're not animating on an externally-provided `MotionValue` we can use the\n // component's animation controls which will handle interactions with whileHover (etc),\n // otherwise we just have to animate the `MotionValue` itself.\n return this.startAxisValueAnimation(axis, inertia);\n });\n // Run all animations and then resolve the new drag constraints.\n return Promise.all(momentumAnimations).then(onDragTransitionEnd);\n }\n startAxisValueAnimation(axis, transition) {\n const axisValue = this.getAxisMotionValue(axis);\n addValueToWillChange(this.visualElement, axis);\n return axisValue.start(animateMotionValue(axis, axisValue, 0, transition, this.visualElement, false));\n }\n stopAnimation() {\n eachAxis((axis) => this.getAxisMotionValue(axis).stop());\n }\n /**\n * Drag works differently depending on which props are provided.\n *\n * - If _dragX and _dragY are provided, we output the gesture delta directly to those motion values.\n * - Otherwise, we apply the delta to the x/y motion values.\n */\n getAxisMotionValue(axis) {\n const dragKey = `_drag${axis.toUpperCase()}`;\n const props = this.visualElement.getProps();\n const externalMotionValue = props[dragKey];\n return externalMotionValue\n ? externalMotionValue\n : this.visualElement.getValue(axis, this.visualElement.latestValues[axis] ?? 0);\n }\n snapToCursor(point) {\n eachAxis((axis) => {\n const { drag } = this.getProps();\n // If we're not dragging this axis, do an early return.\n if (!shouldDrag(axis, drag, this.currentDirection))\n return;\n const { projection } = this.visualElement;\n const axisValue = this.getAxisMotionValue(axis);\n if (projection && projection.layout) {\n const { min, max } = projection.layout.layoutBox[axis];\n /**\n * The layout measurement includes the current transform value,\n * so we need to add it back to get the correct snap position.\n * This fixes an issue where elements with initial coordinates\n * would snap to the wrong position on the first drag.\n */\n const current = axisValue.get() || 0;\n axisValue.set(point[axis] - mixNumber(min, max, 0.5) + current);\n }\n });\n }\n /**\n * When the viewport resizes we want to check if the measured constraints\n * have changed and, if so, reposition the element within those new constraints\n * relative to where it was before the resize.\n */\n scalePositionWithinConstraints() {\n if (!this.visualElement.current)\n return;\n const { drag, dragConstraints } = this.getProps();\n const { projection } = this.visualElement;\n if (!isRefObject(dragConstraints) || !projection || !this.constraints)\n return;\n /**\n * Stop current animations as there can be visual glitching if we try to do\n * this mid-animation\n */\n this.stopAnimation();\n /**\n * Record the relative position of the dragged element relative to the\n * constraints box and save as a progress value.\n */\n const boxProgress = { x: 0, y: 0 };\n eachAxis((axis) => {\n const axisValue = this.getAxisMotionValue(axis);\n if (axisValue && this.constraints !== false) {\n const latest = axisValue.get();\n boxProgress[axis] = calcOrigin({ min: latest, max: latest }, this.constraints[axis]);\n }\n });\n /**\n * Update the layout of this element and resolve the latest drag constraints\n */\n const { transformTemplate } = this.visualElement.getProps();\n this.visualElement.current.style.transform = transformTemplate\n ? transformTemplate({}, \"\")\n : \"none\";\n projection.root && projection.root.updateScroll();\n projection.updateLayout();\n /**\n * Reset constraints so resolveConstraints() will recalculate them\n * with the freshly measured layout rather than returning the cached value.\n */\n this.constraints = false;\n this.resolveConstraints();\n /**\n * For each axis, calculate the current progress of the layout axis\n * within the new constraints.\n */\n eachAxis((axis) => {\n if (!shouldDrag(axis, drag, null))\n return;\n /**\n * Calculate a new transform based on the previous box progress\n */\n const axisValue = this.getAxisMotionValue(axis);\n const { min, max } = this.constraints[axis];\n axisValue.set(mixNumber(min, max, boxProgress[axis]));\n });\n /**\n * Flush the updated transform to the DOM synchronously to prevent\n * a visual flash at the element's CSS layout position (0,0) when\n * the transform was stripped for measurement.\n */\n this.visualElement.render();\n }\n addListeners() {\n if (!this.visualElement.current)\n return;\n elementDragControls.set(this.visualElement, this);\n const element = this.visualElement.current;\n /**\n * Attach a pointerdown event listener on this DOM element to initiate drag tracking.\n */\n const stopPointerListener = addPointerEvent(element, \"pointerdown\", (event) => {\n const { drag, dragListener = true } = this.getProps();\n const target = event.target;\n /**\n * Only block drag if clicking on a text input child element\n * (input, textarea, select, contenteditable) where users might\n * want to select text or interact with the control.\n *\n * Buttons and links don't block drag since they don't have\n * click-and-move actions of their own.\n */\n const isClickingTextInputChild = target !== element && isElementTextInput(target);\n if (drag && dragListener && !isClickingTextInputChild) {\n this.start(event);\n }\n });\n /**\n * If using ref-based constraints, observe both the draggable element\n * and the constraint container for size changes via ResizeObserver.\n * Setup is deferred because dragConstraints.current is null when\n * addListeners first runs (React hasn't committed the ref yet).\n */\n let stopResizeObservers;\n const measureDragConstraints = () => {\n const { dragConstraints } = this.getProps();\n if (isRefObject(dragConstraints) && dragConstraints.current) {\n this.constraints = this.resolveRefConstraints();\n if (!stopResizeObservers) {\n stopResizeObservers = startResizeObservers(element, dragConstraints.current, () => this.scalePositionWithinConstraints());\n }\n }\n };\n const { projection } = this.visualElement;\n const stopMeasureLayoutListener = projection.addEventListener(\"measure\", measureDragConstraints);\n if (projection && !projection.layout) {\n projection.root && projection.root.updateScroll();\n projection.updateLayout();\n }\n frame.read(measureDragConstraints);\n /**\n * Attach a window resize listener to scale the draggable target within its defined\n * constraints as the window resizes.\n */\n const stopResizeListener = addDomEvent(window, \"resize\", () => this.scalePositionWithinConstraints());\n /**\n * If the element's layout changes, calculate the delta and apply that to\n * the drag gesture's origin point.\n */\n const stopLayoutUpdateListener = projection.addEventListener(\"didUpdate\", (({ delta, hasLayoutChanged }) => {\n if (this.isDragging && hasLayoutChanged) {\n eachAxis((axis) => {\n const motionValue = this.getAxisMotionValue(axis);\n if (!motionValue)\n return;\n this.originPoint[axis] += delta[axis].translate;\n motionValue.set(motionValue.get() + delta[axis].translate);\n });\n this.visualElement.render();\n }\n }));\n return () => {\n stopResizeListener();\n stopPointerListener();\n stopMeasureLayoutListener();\n stopLayoutUpdateListener && stopLayoutUpdateListener();\n stopResizeObservers && stopResizeObservers();\n };\n }\n getProps() {\n const props = this.visualElement.getProps();\n const { drag = false, dragDirectionLock = false, dragPropagation = false, dragConstraints = false, dragElastic = defaultElastic, dragMomentum = true, } = props;\n return {\n ...props,\n drag,\n dragDirectionLock,\n dragPropagation,\n dragConstraints,\n dragElastic,\n dragMomentum,\n };\n }\n}\nfunction skipFirstCall(callback) {\n let isFirst = true;\n return () => {\n if (isFirst) {\n isFirst = false;\n return;\n }\n callback();\n };\n}\nfunction startResizeObservers(element, constraintsElement, onResize) {\n const stopElement = resize(element, skipFirstCall(onResize));\n const stopContainer = resize(constraintsElement, skipFirstCall(onResize));\n return () => {\n stopElement();\n stopContainer();\n };\n}\nfunction shouldDrag(direction, drag, currentDirection) {\n return ((drag === true || drag === direction) &&\n (currentDirection === null || currentDirection === direction));\n}\n/**\n * Based on an x/y offset determine the current drag direction. If both axis' offsets are lower\n * than the provided threshold, return `null`.\n *\n * @param offset - The x/y offset from origin.\n * @param lockThreshold - (Optional) - the minimum absolute offset before we can determine a drag direction.\n */\nfunction getCurrentDirection(offset, lockThreshold = 10) {\n let direction = null;\n if (Math.abs(offset.y) > lockThreshold) {\n direction = \"y\";\n }\n else if (Math.abs(offset.x) > lockThreshold) {\n direction = \"x\";\n }\n return direction;\n}\nexport function expectsResolvedDragConstraints({ dragConstraints, onMeasureDragConstraints, }) {\n return isRefObject(dragConstraints) && !!onMeasureDragConstraints;\n}\n//# sourceMappingURL=VisualElementDragControls.js.map","import { isDragging } from './is-active.mjs';\n\nfunction setDragLock(axis) {\n if (axis === \"x\" || axis === \"y\") {\n if (isDragging[axis]) {\n return null;\n }\n else {\n isDragging[axis] = true;\n return () => {\n isDragging[axis] = false;\n };\n }\n }\n else {\n if (isDragging.x || isDragging.y) {\n return null;\n }\n else {\n isDragging.x = isDragging.y = true;\n return () => {\n isDragging.x = isDragging.y = false;\n };\n }\n }\n}\n\nexport { setDragLock };\n//# sourceMappingURL=set-active.mjs.map\n","import { Feature, frame } from \"motion-dom\";\nimport { noop } from \"motion-utils\";\nimport { addPointerEvent } from \"../../events/add-pointer-event\";\nimport { getContextWindow } from \"../../utils/get-context-window\";\nimport { PanSession } from \"./PanSession\";\nconst asyncHandler = (handler) => (event, info) => {\n if (handler) {\n frame.update(() => handler(event, info), false, true);\n }\n};\nexport class PanGesture extends Feature {\n constructor() {\n super(...arguments);\n this.removePointerDownListener = noop;\n }\n onPointerDown(pointerDownEvent) {\n this.session = new PanSession(pointerDownEvent, this.createPanHandlers(), {\n transformPagePoint: this.node.getTransformPagePoint(),\n contextWindow: getContextWindow(this.node),\n });\n }\n createPanHandlers() {\n const { onPanSessionStart, onPanStart, onPan, onPanEnd } = this.node.getProps();\n return {\n onSessionStart: asyncHandler(onPanSessionStart),\n onStart: asyncHandler(onPanStart),\n onMove: asyncHandler(onPan),\n onEnd: (event, info) => {\n delete this.session;\n if (onPanEnd) {\n frame.postRender(() => onPanEnd(event, info));\n }\n },\n };\n }\n mount() {\n this.removePointerDownListener = addPointerEvent(this.node.current, \"pointerdown\", (event) => this.onPointerDown(event));\n }\n update() {\n this.session && this.session.updateHandlers(this.createPanHandlers());\n }\n unmount() {\n this.removePointerDownListener();\n this.session && this.session.end();\n }\n}\n//# sourceMappingURL=index.js.map","\"use client\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { frame, microtask, globalProjectionState } from \"motion-dom\";\nimport { Component, useContext } from \"react\";\nimport { usePresence } from \"../../../components/AnimatePresence/use-presence\";\nimport { LayoutGroupContext, } from \"../../../context/LayoutGroupContext\";\nimport { SwitchLayoutGroupContext } from \"../../../context/SwitchLayoutGroupContext\";\n/**\n * Track whether we've taken any snapshots yet. If not,\n * we can safely skip notification of didUpdate.\n *\n * Difficult to capture in a test but to prevent flickering\n * we must set this to true either on update or unmount.\n * Running `next-env/layout-id` in Safari will show this behaviour if broken.\n */\nlet hasTakenAnySnapshot = false;\nclass MeasureLayoutWithContext extends Component {\n /**\n * This only mounts projection nodes for components that\n * need measuring, we might want to do it for all components\n * in order to incorporate transforms\n */\n componentDidMount() {\n const { visualElement, layoutGroup, switchLayoutGroup, layoutId } = this.props;\n const { projection } = visualElement;\n if (projection) {\n if (layoutGroup.group)\n layoutGroup.group.add(projection);\n if (switchLayoutGroup && switchLayoutGroup.register && layoutId) {\n switchLayoutGroup.register(projection);\n }\n if (hasTakenAnySnapshot) {\n projection.root.didUpdate();\n }\n projection.addEventListener(\"animationComplete\", () => {\n this.safeToRemove();\n });\n projection.setOptions({\n ...projection.options,\n layoutDependency: this.props.layoutDependency,\n onExitComplete: () => this.safeToRemove(),\n });\n }\n globalProjectionState.hasEverUpdated = true;\n }\n getSnapshotBeforeUpdate(prevProps) {\n const { layoutDependency, visualElement, drag, isPresent } = this.props;\n const { projection } = visualElement;\n if (!projection)\n return null;\n /**\n * TODO: We use this data in relegate to determine whether to\n * promote a previous element. There's no guarantee its presence data\n * will have updated by this point - if a bug like this arises it will\n * have to be that we markForRelegation and then find a new lead some other way,\n * perhaps in didUpdate\n */\n projection.isPresent = isPresent;\n if (prevProps.layoutDependency !== layoutDependency) {\n projection.setOptions({\n ...projection.options,\n layoutDependency,\n });\n }\n hasTakenAnySnapshot = true;\n if (drag ||\n prevProps.layoutDependency !== layoutDependency ||\n layoutDependency === undefined ||\n prevProps.isPresent !== isPresent) {\n projection.willUpdate();\n }\n else {\n this.safeToRemove();\n }\n if (prevProps.isPresent !== isPresent) {\n if (isPresent) {\n projection.promote();\n }\n else if (!projection.relegate()) {\n /**\n * If there's another stack member taking over from this one,\n * it's in charge of the exit animation and therefore should\n * be in charge of the safe to remove. Otherwise we call it here.\n */\n frame.postRender(() => {\n const stack = projection.getStack();\n if (!stack || !stack.members.length) {\n this.safeToRemove();\n }\n });\n }\n }\n return null;\n }\n componentDidUpdate() {\n const { visualElement, layoutAnchor } = this.props;\n const { projection } = visualElement;\n if (projection) {\n projection.options.layoutAnchor = layoutAnchor;\n projection.root.didUpdate();\n microtask.postRender(() => {\n if (!projection.currentAnimation && projection.isLead()) {\n this.safeToRemove();\n }\n });\n }\n }\n componentWillUnmount() {\n const { visualElement, layoutGroup, switchLayoutGroup: promoteContext, } = this.props;\n const { projection } = visualElement;\n hasTakenAnySnapshot = true;\n if (projection) {\n projection.scheduleCheckAfterUnmount();\n if (layoutGroup && layoutGroup.group)\n layoutGroup.group.remove(projection);\n if (promoteContext && promoteContext.deregister)\n promoteContext.deregister(projection);\n }\n }\n safeToRemove() {\n const { safeToRemove } = this.props;\n safeToRemove && safeToRemove();\n }\n render() {\n return null;\n }\n}\nexport function MeasureLayout(props) {\n const [isPresent, safeToRemove] = usePresence();\n const layoutGroup = useContext(LayoutGroupContext);\n return (_jsx(MeasureLayoutWithContext, { ...props, layoutGroup: layoutGroup, switchLayoutGroup: useContext(SwitchLayoutGroupContext), isPresent: isPresent, safeToRemove: safeToRemove }));\n}\n//# sourceMappingURL=MeasureLayout.js.map","\"use client\";\nimport { useCallback, useContext, useEffect, useId } from \"react\";\nimport { PresenceContext, } from \"../../context/PresenceContext\";\n/**\n * When a component is the child of `AnimatePresence`, it can use `usePresence`\n * to access information about whether it's still present in the React tree.\n *\n * ```jsx\n * import { usePresence } from \"framer-motion\"\n *\n * export const Component = () => {\n * const [isPresent, safeToRemove] = usePresence()\n *\n * useEffect(() => {\n * !isPresent && setTimeout(safeToRemove, 1000)\n * }, [isPresent])\n *\n * return
\n * }\n * ```\n *\n * If `isPresent` is `false`, it means that a component has been removed from the tree,\n * but `AnimatePresence` won't really remove it until `safeToRemove` has been called.\n *\n * @public\n */\nexport function usePresence(subscribe = true) {\n const context = useContext(PresenceContext);\n if (context === null)\n return [true, null];\n const { isPresent, onExitComplete, register } = context;\n // It's safe to call the following hooks conditionally (after an early return) because the context will always\n // either be null or non-null for the lifespan of the component.\n const id = useId();\n useEffect(() => {\n if (subscribe) {\n return register(id);\n }\n }, [subscribe]);\n const safeToRemove = useCallback(() => subscribe && onExitComplete && onExitComplete(id), [id, onExitComplete, subscribe]);\n return !isPresent && onExitComplete ? [false, safeToRemove] : [true];\n}\n/**\n * Similar to `usePresence`, except `useIsPresent` simply returns whether or not the component is present.\n * There is no `safeToRemove` function.\n *\n * ```jsx\n * import { useIsPresent } from \"framer-motion\"\n *\n * export const Component = () => {\n * const isPresent = useIsPresent()\n *\n * useEffect(() => {\n * !isPresent && console.log(\"I've been removed!\")\n * }, [isPresent])\n *\n * return
\n * }\n * ```\n *\n * @public\n */\nexport function useIsPresent() {\n return isPresent(useContext(PresenceContext));\n}\nexport function isPresent(context) {\n return context === null ? true : context.isPresent;\n}\n//# sourceMappingURL=use-presence.js.map","import { DragGesture } from \"../../gestures/drag\";\nimport { PanGesture } from \"../../gestures/pan\";\nimport { HTMLProjectionNode } from \"../../projection\";\nimport { MeasureLayout } from \"./layout/MeasureLayout\";\nexport const drag = {\n pan: {\n Feature: PanGesture,\n },\n drag: {\n Feature: DragGesture,\n ProjectionNode: HTMLProjectionNode,\n MeasureLayout,\n },\n};\n//# sourceMappingURL=drag.js.map","import { Feature } from \"motion-dom\";\nimport { noop } from \"motion-utils\";\nimport { VisualElementDragControls } from \"./VisualElementDragControls\";\nexport class DragGesture extends Feature {\n constructor(node) {\n super(node);\n this.removeGroupControls = noop;\n this.removeListeners = noop;\n this.controls = new VisualElementDragControls(node);\n }\n mount() {\n // If we've been provided a DragControls for manual control over the drag gesture,\n // subscribe this component to it on mount.\n const { dragControls } = this.node.getProps();\n if (dragControls) {\n this.removeGroupControls = dragControls.subscribe(this.controls);\n }\n this.removeListeners = this.controls.addListeners() || noop;\n }\n update() {\n const { dragControls } = this.node.getProps();\n const { dragControls: prevDragControls } = this.node.prevProps || {};\n if (dragControls !== prevDragControls) {\n this.removeGroupControls();\n if (dragControls) {\n this.removeGroupControls = dragControls.subscribe(this.controls);\n }\n }\n }\n unmount() {\n this.removeGroupControls();\n this.removeListeners();\n /**\n * In React 19, during list reorder reconciliation, components may\n * briefly unmount and remount while the drag is still active. If we're\n * actively dragging, we should NOT end the pan session - it will\n * continue tracking pointer events via its window-level listeners.\n *\n * The pan session will be properly cleaned up when:\n * 1. The drag ends naturally (pointerup/pointercancel)\n * 2. The component is truly removed from the DOM\n */\n if (!this.controls.isDragging) {\n this.controls.endPanSession();\n }\n }\n}\n//# sourceMappingURL=index.js.map","import { Feature, frame, hover } from \"motion-dom\";\nimport { extractEventInfo } from \"../events/event-info\";\nfunction handleHoverEvent(node, event, lifecycle) {\n const { props } = node;\n if (node.animationState && props.whileHover) {\n node.animationState.setActive(\"whileHover\", lifecycle === \"Start\");\n }\n const eventName = (\"onHover\" + lifecycle);\n const callback = props[eventName];\n if (callback) {\n frame.postRender(() => callback(event, extractEventInfo(event)));\n }\n}\nexport class HoverGesture extends Feature {\n mount() {\n const { current } = this.node;\n if (!current)\n return;\n this.unmount = hover(current, (_element, startEvent) => {\n handleHoverEvent(this.node, startEvent, \"Start\");\n return (endEvent) => handleHoverEvent(this.node, endEvent, \"End\");\n });\n }\n unmount() { }\n}\n//# sourceMappingURL=hover.js.map","import { Feature, frame, press } from \"motion-dom\";\nimport { extractEventInfo } from \"../events/event-info\";\nfunction handlePressEvent(node, event, lifecycle) {\n const { props } = node;\n if (node.current instanceof HTMLButtonElement && node.current.disabled) {\n return;\n }\n if (node.animationState && props.whileTap) {\n node.animationState.setActive(\"whileTap\", lifecycle === \"Start\");\n }\n const eventName = (\"onTap\" + (lifecycle === \"End\" ? \"\" : lifecycle));\n const callback = props[eventName];\n if (callback) {\n frame.postRender(() => callback(event, extractEventInfo(event)));\n }\n}\nexport class PressGesture extends Feature {\n mount() {\n const { current } = this.node;\n if (!current)\n return;\n const { globalTapTarget, propagate } = this.node.props;\n this.unmount = press(current, (_element, startEvent) => {\n handlePressEvent(this.node, startEvent, \"Start\");\n return (endEvent, { success }) => handlePressEvent(this.node, endEvent, success ? \"End\" : \"Cancel\");\n }, {\n useGlobalTarget: globalTapTarget,\n stopPropagation: propagate?.tap === false,\n });\n }\n unmount() { }\n}\n//# sourceMappingURL=press.js.map","/**\n * Map an IntersectionHandler callback to an element. We only ever make one handler for one\n * element, so even though these handlers might all be triggered by different\n * observers, we can keep them in the same map.\n */\nconst observerCallbacks = new WeakMap();\n/**\n * Multiple observers can be created for multiple element/document roots. Each with\n * different settings. So here we store dictionaries of observers to each root,\n * using serialised settings (threshold/margin) as lookup keys.\n */\nconst observers = new WeakMap();\nconst fireObserverCallback = (entry) => {\n const callback = observerCallbacks.get(entry.target);\n callback && callback(entry);\n};\nconst fireAllObserverCallbacks = (entries) => {\n entries.forEach(fireObserverCallback);\n};\nfunction initIntersectionObserver({ root, ...options }) {\n const lookupRoot = root || document;\n /**\n * If we don't have an observer lookup map for this root, create one.\n */\n if (!observers.has(lookupRoot)) {\n observers.set(lookupRoot, {});\n }\n const rootObservers = observers.get(lookupRoot);\n const key = JSON.stringify(options);\n /**\n * If we don't have an observer for this combination of root and settings,\n * create one.\n */\n if (!rootObservers[key]) {\n rootObservers[key] = new IntersectionObserver(fireAllObserverCallbacks, { root, ...options });\n }\n return rootObservers[key];\n}\nexport function observeIntersection(element, options, callback) {\n const rootInteresectionObserver = initIntersectionObserver(options);\n observerCallbacks.set(element, callback);\n rootInteresectionObserver.observe(element);\n return () => {\n observerCallbacks.delete(element);\n rootInteresectionObserver.unobserve(element);\n };\n}\n//# sourceMappingURL=observers.js.map","import { Feature } from \"motion-dom\";\nimport { observeIntersection } from \"./observers\";\nconst thresholdNames = {\n some: 0,\n all: 1,\n};\nexport class InViewFeature extends Feature {\n constructor() {\n super(...arguments);\n this.hasEnteredView = false;\n this.isInView = false;\n }\n startObserver() {\n this.stopObserver?.();\n const { viewport = {} } = this.node.getProps();\n const { root, margin: rootMargin, amount = \"some\", once } = viewport;\n const options = {\n root: root ? root.current : undefined,\n rootMargin,\n threshold: typeof amount === \"number\" ? amount : thresholdNames[amount],\n };\n const onIntersectionUpdate = (entry) => {\n const { isIntersecting } = entry;\n /**\n * If there's been no change in the viewport state, early return.\n */\n if (this.isInView === isIntersecting)\n return;\n this.isInView = isIntersecting;\n /**\n * Handle hasEnteredView. If this is only meant to run once, and\n * element isn't visible, early return. Otherwise set hasEnteredView to true.\n */\n if (once && !isIntersecting && this.hasEnteredView) {\n return;\n }\n else if (isIntersecting) {\n this.hasEnteredView = true;\n }\n if (this.node.animationState) {\n this.node.animationState.setActive(\"whileInView\", isIntersecting);\n }\n /**\n * Use the latest committed props rather than the ones in scope\n * when this observer is created\n */\n const { onViewportEnter, onViewportLeave } = this.node.getProps();\n const callback = isIntersecting ? onViewportEnter : onViewportLeave;\n callback && callback(entry);\n };\n this.stopObserver = observeIntersection(this.node.current, options, onIntersectionUpdate);\n }\n mount() {\n this.startObserver();\n }\n update() {\n if (typeof IntersectionObserver === \"undefined\")\n return;\n const { props, prevProps } = this.node;\n const hasOptionsChanged = [\"amount\", \"margin\", \"root\"].some(hasViewportOptionChanged(props, prevProps));\n if (hasOptionsChanged) {\n this.startObserver();\n }\n }\n unmount() {\n this.stopObserver?.();\n this.hasEnteredView = false;\n this.isInView = false;\n }\n}\nfunction hasViewportOptionChanged({ viewport = {} }, { viewport: prevViewport = {} } = {}) {\n return (name) => viewport[name] !== prevViewport[name];\n}\n//# sourceMappingURL=index.js.map","import { HoverGesture } from \"../../gestures/hover\";\nimport { FocusGesture } from \"../../gestures/focus\";\nimport { PressGesture } from \"../../gestures/press\";\nimport { InViewFeature } from \"./viewport\";\nexport const gestureAnimations = {\n inView: {\n Feature: InViewFeature,\n },\n tap: {\n Feature: PressGesture,\n },\n focus: {\n Feature: FocusGesture,\n },\n hover: {\n Feature: HoverGesture,\n },\n};\n//# sourceMappingURL=gestures.js.map","import { animations } from \"../../../motion/features/animations\";\nimport { drag } from \"../../../motion/features/drag\";\nimport { gestureAnimations } from \"../../../motion/features/gestures\";\nimport { layout } from \"../../../motion/features/layout\";\nexport const featureBundle = {\n ...animations,\n ...gestureAnimations,\n ...drag,\n ...layout,\n};\n//# sourceMappingURL=feature-bundle.js.map","import { Feature, addDomEvent } from \"motion-dom\";\nimport { pipe } from \"motion-utils\";\nexport class FocusGesture extends Feature {\n constructor() {\n super(...arguments);\n this.isActive = false;\n }\n onFocus() {\n let isFocusVisible = false;\n /**\n * If this element doesn't match focus-visible then don't\n * apply whileHover. But, if matches throws that focus-visible\n * is not a valid selector then in that browser outline styles will be applied\n * to the element by default and we want to match that behaviour with whileFocus.\n */\n try {\n isFocusVisible = this.node.current.matches(\":focus-visible\");\n }\n catch (e) {\n isFocusVisible = true;\n }\n if (!isFocusVisible || !this.node.animationState)\n return;\n this.node.animationState.setActive(\"whileFocus\", true);\n this.isActive = true;\n }\n onBlur() {\n if (!this.isActive || !this.node.animationState)\n return;\n this.node.animationState.setActive(\"whileFocus\", false);\n this.isActive = false;\n }\n mount() {\n this.unmount = pipe(addDomEvent(this.node.current, \"focus\", () => this.onFocus()), addDomEvent(this.node.current, \"blur\", () => this.onBlur()));\n }\n unmount() { }\n}\n//# sourceMappingURL=focus.js.map","import { HTMLProjectionNode } from \"motion-dom\";\nimport { MeasureLayout } from \"./layout/MeasureLayout\";\nexport const layout = {\n layout: {\n ProjectionNode: HTMLProjectionNode,\n MeasureLayout,\n },\n};\n//# sourceMappingURL=layout.js.map","import { createMotionComponent } from \"../../../motion\";\nimport { createDomVisualElement } from \"../../dom/create-visual-element\";\nimport { featureBundle } from \"./feature-bundle\";\nexport function createMotionComponentWithFeatures(Component, options) {\n return createMotionComponent(Component, options, featureBundle, createDomVisualElement);\n}\n//# sourceMappingURL=create.js.map","\"use client\";\nimport { createMotionComponentWithFeatures as createMotionComponent } from \"./create\";\n/**\n * HTML components\n */\nexport const MotionA = /*@__PURE__*/ createMotionComponent(\"a\");\nexport const MotionAbbr = /*@__PURE__*/ createMotionComponent(\"abbr\");\nexport const MotionAddress = /*@__PURE__*/ createMotionComponent(\"address\");\nexport const MotionArea = /*@__PURE__*/ createMotionComponent(\"area\");\nexport const MotionArticle = /*@__PURE__*/ createMotionComponent(\"article\");\nexport const MotionAside = /*@__PURE__*/ createMotionComponent(\"aside\");\nexport const MotionAudio = /*@__PURE__*/ createMotionComponent(\"audio\");\nexport const MotionB = /*@__PURE__*/ createMotionComponent(\"b\");\nexport const MotionBase = /*@__PURE__*/ createMotionComponent(\"base\");\nexport const MotionBdi = /*@__PURE__*/ createMotionComponent(\"bdi\");\nexport const MotionBdo = /*@__PURE__*/ createMotionComponent(\"bdo\");\nexport const MotionBig = /*@__PURE__*/ createMotionComponent(\"big\");\nexport const MotionBlockquote = \n/*@__PURE__*/ createMotionComponent(\"blockquote\");\nexport const MotionBody = /*@__PURE__*/ createMotionComponent(\"body\");\nexport const MotionButton = /*@__PURE__*/ createMotionComponent(\"button\");\nexport const MotionCanvas = /*@__PURE__*/ createMotionComponent(\"canvas\");\nexport const MotionCaption = /*@__PURE__*/ createMotionComponent(\"caption\");\nexport const MotionCite = /*@__PURE__*/ createMotionComponent(\"cite\");\nexport const MotionCode = /*@__PURE__*/ createMotionComponent(\"code\");\nexport const MotionCol = /*@__PURE__*/ createMotionComponent(\"col\");\nexport const MotionColgroup = /*@__PURE__*/ createMotionComponent(\"colgroup\");\nexport const MotionData = /*@__PURE__*/ createMotionComponent(\"data\");\nexport const MotionDatalist = /*@__PURE__*/ createMotionComponent(\"datalist\");\nexport const MotionDd = /*@__PURE__*/ createMotionComponent(\"dd\");\nexport const MotionDel = /*@__PURE__*/ createMotionComponent(\"del\");\nexport const MotionDetails = /*@__PURE__*/ createMotionComponent(\"details\");\nexport const MotionDfn = /*@__PURE__*/ createMotionComponent(\"dfn\");\nexport const MotionDialog = /*@__PURE__*/ createMotionComponent(\"dialog\");\nexport const MotionDiv = /*@__PURE__*/ createMotionComponent(\"div\");\nexport const MotionDl = /*@__PURE__*/ createMotionComponent(\"dl\");\nexport const MotionDt = /*@__PURE__*/ createMotionComponent(\"dt\");\nexport const MotionEm = /*@__PURE__*/ createMotionComponent(\"em\");\nexport const MotionEmbed = /*@__PURE__*/ createMotionComponent(\"embed\");\nexport const MotionFieldset = /*@__PURE__*/ createMotionComponent(\"fieldset\");\nexport const MotionFigcaption = \n/*@__PURE__*/ createMotionComponent(\"figcaption\");\nexport const MotionFigure = /*@__PURE__*/ createMotionComponent(\"figure\");\nexport const MotionFooter = /*@__PURE__*/ createMotionComponent(\"footer\");\nexport const MotionForm = /*@__PURE__*/ createMotionComponent(\"form\");\nexport const MotionH1 = /*@__PURE__*/ createMotionComponent(\"h1\");\nexport const MotionH2 = /*@__PURE__*/ createMotionComponent(\"h2\");\nexport const MotionH3 = /*@__PURE__*/ createMotionComponent(\"h3\");\nexport const MotionH4 = /*@__PURE__*/ createMotionComponent(\"h4\");\nexport const MotionH5 = /*@__PURE__*/ createMotionComponent(\"h5\");\nexport const MotionH6 = /*@__PURE__*/ createMotionComponent(\"h6\");\nexport const MotionHead = /*@__PURE__*/ createMotionComponent(\"head\");\nexport const MotionHeader = /*@__PURE__*/ createMotionComponent(\"header\");\nexport const MotionHgroup = /*@__PURE__*/ createMotionComponent(\"hgroup\");\nexport const MotionHr = /*@__PURE__*/ createMotionComponent(\"hr\");\nexport const MotionHtml = /*@__PURE__*/ createMotionComponent(\"html\");\nexport const MotionI = /*@__PURE__*/ createMotionComponent(\"i\");\nexport const MotionIframe = /*@__PURE__*/ createMotionComponent(\"iframe\");\nexport const MotionImg = /*@__PURE__*/ createMotionComponent(\"img\");\nexport const MotionInput = /*@__PURE__*/ createMotionComponent(\"input\");\nexport const MotionIns = /*@__PURE__*/ createMotionComponent(\"ins\");\nexport const MotionKbd = /*@__PURE__*/ createMotionComponent(\"kbd\");\nexport const MotionKeygen = /*@__PURE__*/ createMotionComponent(\"keygen\");\nexport const MotionLabel = /*@__PURE__*/ createMotionComponent(\"label\");\nexport const MotionLegend = /*@__PURE__*/ createMotionComponent(\"legend\");\nexport const MotionLi = /*@__PURE__*/ createMotionComponent(\"li\");\nexport const MotionLink = /*@__PURE__*/ createMotionComponent(\"link\");\nexport const MotionMain = /*@__PURE__*/ createMotionComponent(\"main\");\nexport const MotionMap = /*@__PURE__*/ createMotionComponent(\"map\");\nexport const MotionMark = /*@__PURE__*/ createMotionComponent(\"mark\");\nexport const MotionMenu = /*@__PURE__*/ createMotionComponent(\"menu\");\nexport const MotionMenuitem = /*@__PURE__*/ createMotionComponent(\"menuitem\");\nexport const MotionMeter = /*@__PURE__*/ createMotionComponent(\"meter\");\nexport const MotionNav = /*@__PURE__*/ createMotionComponent(\"nav\");\nexport const MotionObject = /*@__PURE__*/ createMotionComponent(\"object\");\nexport const MotionOl = /*@__PURE__*/ createMotionComponent(\"ol\");\nexport const MotionOptgroup = /*@__PURE__*/ createMotionComponent(\"optgroup\");\nexport const MotionOption = /*@__PURE__*/ createMotionComponent(\"option\");\nexport const MotionOutput = /*@__PURE__*/ createMotionComponent(\"output\");\nexport const MotionP = /*@__PURE__*/ createMotionComponent(\"p\");\nexport const MotionParam = /*@__PURE__*/ createMotionComponent(\"param\");\nexport const MotionPicture = /*@__PURE__*/ createMotionComponent(\"picture\");\nexport const MotionPre = /*@__PURE__*/ createMotionComponent(\"pre\");\nexport const MotionProgress = /*@__PURE__*/ createMotionComponent(\"progress\");\nexport const MotionQ = /*@__PURE__*/ createMotionComponent(\"q\");\nexport const MotionRp = /*@__PURE__*/ createMotionComponent(\"rp\");\nexport const MotionRt = /*@__PURE__*/ createMotionComponent(\"rt\");\nexport const MotionRuby = /*@__PURE__*/ createMotionComponent(\"ruby\");\nexport const MotionS = /*@__PURE__*/ createMotionComponent(\"s\");\nexport const MotionSamp = /*@__PURE__*/ createMotionComponent(\"samp\");\nexport const MotionScript = /*@__PURE__*/ createMotionComponent(\"script\");\nexport const MotionSection = /*@__PURE__*/ createMotionComponent(\"section\");\nexport const MotionSelect = /*@__PURE__*/ createMotionComponent(\"select\");\nexport const MotionSmall = /*@__PURE__*/ createMotionComponent(\"small\");\nexport const MotionSource = /*@__PURE__*/ createMotionComponent(\"source\");\nexport const MotionSpan = /*@__PURE__*/ createMotionComponent(\"span\");\nexport const MotionStrong = /*@__PURE__*/ createMotionComponent(\"strong\");\nexport const MotionStyle = /*@__PURE__*/ createMotionComponent(\"style\");\nexport const MotionSub = /*@__PURE__*/ createMotionComponent(\"sub\");\nexport const MotionSummary = /*@__PURE__*/ createMotionComponent(\"summary\");\nexport const MotionSup = /*@__PURE__*/ createMotionComponent(\"sup\");\nexport const MotionTable = /*@__PURE__*/ createMotionComponent(\"table\");\nexport const MotionTbody = /*@__PURE__*/ createMotionComponent(\"tbody\");\nexport const MotionTd = /*@__PURE__*/ createMotionComponent(\"td\");\nexport const MotionTextarea = /*@__PURE__*/ createMotionComponent(\"textarea\");\nexport const MotionTfoot = /*@__PURE__*/ createMotionComponent(\"tfoot\");\nexport const MotionTh = /*@__PURE__*/ createMotionComponent(\"th\");\nexport const MotionThead = /*@__PURE__*/ createMotionComponent(\"thead\");\nexport const MotionTime = /*@__PURE__*/ createMotionComponent(\"time\");\nexport const MotionTitle = /*@__PURE__*/ createMotionComponent(\"title\");\nexport const MotionTr = /*@__PURE__*/ createMotionComponent(\"tr\");\nexport const MotionTrack = /*@__PURE__*/ createMotionComponent(\"track\");\nexport const MotionU = /*@__PURE__*/ createMotionComponent(\"u\");\nexport const MotionUl = /*@__PURE__*/ createMotionComponent(\"ul\");\nexport const MotionVideo = /*@__PURE__*/ createMotionComponent(\"video\");\nexport const MotionWbr = /*@__PURE__*/ createMotionComponent(\"wbr\");\nexport const MotionWebview = /*@__PURE__*/ createMotionComponent(\"webview\");\n/**\n * SVG components\n */\nexport const MotionAnimate = /*@__PURE__*/ createMotionComponent(\"animate\");\nexport const MotionCircle = /*@__PURE__*/ createMotionComponent(\"circle\");\nexport const MotionDefs = /*@__PURE__*/ createMotionComponent(\"defs\");\nexport const MotionDesc = /*@__PURE__*/ createMotionComponent(\"desc\");\nexport const MotionEllipse = /*@__PURE__*/ createMotionComponent(\"ellipse\");\nexport const MotionG = /*@__PURE__*/ createMotionComponent(\"g\");\nexport const MotionImage = /*@__PURE__*/ createMotionComponent(\"image\");\nexport const MotionLine = /*@__PURE__*/ createMotionComponent(\"line\");\nexport const MotionFilter = /*@__PURE__*/ createMotionComponent(\"filter\");\nexport const MotionMarker = /*@__PURE__*/ createMotionComponent(\"marker\");\nexport const MotionMask = /*@__PURE__*/ createMotionComponent(\"mask\");\nexport const MotionMetadata = /*@__PURE__*/ createMotionComponent(\"metadata\");\nexport const MotionPath = /*@__PURE__*/ createMotionComponent(\"path\");\nexport const MotionPattern = /*@__PURE__*/ createMotionComponent(\"pattern\");\nexport const MotionPolygon = /*@__PURE__*/ createMotionComponent(\"polygon\");\nexport const MotionPolyline = /*@__PURE__*/ createMotionComponent(\"polyline\");\nexport const MotionRect = /*@__PURE__*/ createMotionComponent(\"rect\");\nexport const MotionStop = /*@__PURE__*/ createMotionComponent(\"stop\");\nexport const MotionSvg = /*@__PURE__*/ createMotionComponent(\"svg\");\nexport const MotionSymbol = /*@__PURE__*/ createMotionComponent(\"symbol\");\nexport const MotionText = /*@__PURE__*/ createMotionComponent(\"text\");\nexport const MotionTspan = /*@__PURE__*/ createMotionComponent(\"tspan\");\nexport const MotionUse = /*@__PURE__*/ createMotionComponent(\"use\");\nexport const MotionView = /*@__PURE__*/ createMotionComponent(\"view\");\nexport const MotionClipPath = /*@__PURE__*/ createMotionComponent(\"clipPath\");\nexport const MotionFeBlend = /*@__PURE__*/ createMotionComponent(\"feBlend\");\nexport const MotionFeColorMatrix = \n/*@__PURE__*/ createMotionComponent(\"feColorMatrix\");\nexport const MotionFeComponentTransfer = /*@__PURE__*/ createMotionComponent(\"feComponentTransfer\");\nexport const MotionFeComposite = \n/*@__PURE__*/ createMotionComponent(\"feComposite\");\nexport const MotionFeConvolveMatrix = \n/*@__PURE__*/ createMotionComponent(\"feConvolveMatrix\");\nexport const MotionFeDiffuseLighting = \n/*@__PURE__*/ createMotionComponent(\"feDiffuseLighting\");\nexport const MotionFeDisplacementMap = \n/*@__PURE__*/ createMotionComponent(\"feDisplacementMap\");\nexport const MotionFeDistantLight = \n/*@__PURE__*/ createMotionComponent(\"feDistantLight\");\nexport const MotionFeDropShadow = \n/*@__PURE__*/ createMotionComponent(\"feDropShadow\");\nexport const MotionFeFlood = /*@__PURE__*/ createMotionComponent(\"feFlood\");\nexport const MotionFeFuncA = /*@__PURE__*/ createMotionComponent(\"feFuncA\");\nexport const MotionFeFuncB = /*@__PURE__*/ createMotionComponent(\"feFuncB\");\nexport const MotionFeFuncG = /*@__PURE__*/ createMotionComponent(\"feFuncG\");\nexport const MotionFeFuncR = /*@__PURE__*/ createMotionComponent(\"feFuncR\");\nexport const MotionFeGaussianBlur = \n/*@__PURE__*/ createMotionComponent(\"feGaussianBlur\");\nexport const MotionFeImage = /*@__PURE__*/ createMotionComponent(\"feImage\");\nexport const MotionFeMerge = /*@__PURE__*/ createMotionComponent(\"feMerge\");\nexport const MotionFeMergeNode = \n/*@__PURE__*/ createMotionComponent(\"feMergeNode\");\nexport const MotionFeMorphology = \n/*@__PURE__*/ createMotionComponent(\"feMorphology\");\nexport const MotionFeOffset = /*@__PURE__*/ createMotionComponent(\"feOffset\");\nexport const MotionFePointLight = \n/*@__PURE__*/ createMotionComponent(\"fePointLight\");\nexport const MotionFeSpecularLighting = \n/*@__PURE__*/ createMotionComponent(\"feSpecularLighting\");\nexport const MotionFeSpotLight = \n/*@__PURE__*/ createMotionComponent(\"feSpotLight\");\nexport const MotionFeTile = /*@__PURE__*/ createMotionComponent(\"feTile\");\nexport const MotionFeTurbulence = \n/*@__PURE__*/ createMotionComponent(\"feTurbulence\");\nexport const MotionForeignObject = \n/*@__PURE__*/ createMotionComponent(\"foreignObject\");\nexport const MotionLinearGradient = \n/*@__PURE__*/ createMotionComponent(\"linearGradient\");\nexport const MotionRadialGradient = \n/*@__PURE__*/ createMotionComponent(\"radialGradient\");\nexport const MotionTextPath = /*@__PURE__*/ createMotionComponent(\"textPath\");\n//# sourceMappingURL=elements.js.map","import { motion } from \"./\";\nexport const MotionDiv = motion.div;\n//# sourceMappingURL=size.js.map"],"names":["addUniqueItem","arr","item","indexOf","push","removeItem","index","splice","clamp","min","max","v","formatErrorMessage","message","errorCode","warning","invariant","process","env","NODE_ENV","check","console","warn","Error","MotionGlobalConfig","isNumericalString","test","isObject","value","isZeroValueString","memo","callback","result","undefined","noop","any","pipe","transformers","reduce","a","b","progress","from","to","range","SubscriptionManager","constructor","this","subscriptions","add","handler","notify","c","numSubscriptions","length","i","getSize","clear","secondsToMilliseconds","seconds","millisecondsToSeconds","milliseconds","velocityPerSecond","velocity","frameDuration","calcBezier","t","a1","a2","cubicBezier","mX1","mY1","mX2","mY2","getTForX","aX","x","lowerBound","upperBound","currentX","currentT","Math","abs","binarySubdivide","mirrorEasing","easing","p","reverseEasing","backOut","backIn","backInOut","anticipate","pow","circIn","sin","acos","circOut","circInOut","easeIn","easeOut","easeInOut","isBezierDefinition","Array","isArray","easingLookup","linear","easingDefinitionToFunction","definition","x1","y1","x2","y2","LayoutGroupContext","createContext","LazyContext","strict","MotionConfigContext","transformPagePoint","isStatic","reducedMotion","MotionContext","stepsOrder","createRenderBatcher","scheduleNextBatch","allowKeepAlive","runNextFrame","useDefaultElapsed","state","delta","timestamp","isProcessing","flagRunNextFrame","steps","acc","key","thisFrame","Set","nextFrame","flushNextFrame","toKeepAlive","WeakSet","latestFrameData","triggerCallback","has","step","schedule","keepAlive","immediate","queue","cancel","delete","frameData","prevFrame","forEach","createRenderStep","setup","read","resolveKeyframes","preUpdate","update","preRender","render","postRender","processBatch","useManualTiming","performance","now","frame","cancelFrame","frameSteps","requestAnimationFrame","clearTime","time","set","newTime","queueMicrotask","checkStringStartsWith","token","startsWith","isCSSVariableName","startsAsVariableToken","isCSSVariableToken","singleCssVariableRegex","split","trim","containsCSSVariable","includes","number","parse","parseFloat","transform","alpha","scale","default","sanitize","round","floatRegex","singleColorRegex","isColorString","type","testProp","Boolean","isNullish","Object","prototype","hasOwnProperty","call","splitColor","aName","bName","cName","match","rgbUnit","clampRgbUnit","rgba","red","green","blue","alpha$1","hex","r","g","substring","parseInt","createUnitType","unit","endsWith","degrees","percent","px","vh","vw","progressPercentage","hsla","hue","saturation","lightness","color","getAnimatableNone","parsed","colorRegex","NUMBER_TOKEN","COLOR_TOKEN","complexRegex","analyseComplexValue","originalValue","toString","values","indexes","var","types","replace","parsedValue","buildTransformer","numSections","output","convertToZero","splitBefore","complex","isNaN","createTransformer","source","info","transformer","map","hueToRgb","q","mixImmediate","mixNumber","mixLinearColor","fromExpo","expo","sqrt","colorTypes","asRGBA","find","model","hslaToRgba","mixColor","fromRGBA","toRGBA","blended","invisibleValues","mixNumber$1","getMixer","mixComplex","mixArray","mixObject","numValues","blendValue","origin","target","template","originStats","targetStats","mixVisibility","orderedOrigin","pointers","originIndex","originValue","matchOrder","mix","mixer","frameloopDriver","passTimestamp","start","stop","generateLinearEasing","duration","resolution","points","numPoints","maxGeneratorDuration","calcGeneratorDuration","generator","next","done","Infinity","springDefaults","granular","calcAngularFreq","undampedFreq","dampingRatio","safeMin","durationKeys","physicsKeys","isSpringType","options","keys","some","getSpringOptions","springOptions","stiffness","damping","mass","isResolvedFromDuration","visualDuration","root","PI","bounce","derived","envelope","derivative","exponentialDecay","exp","d","e","f","initialGuess","approximateRoot","findSpring","spring","optionsOrVisualDuration","keyframes","restSpeed","restDelta","initialVelocity","initialDelta","undampedAngularFreq","isGranularScale","resolveSpring","resolveVelocity","angularFreq","A","sinCoeff","cosCoeff","cos","C","dampedAngularFreq","freqForT","sinh","cosh","P","sinhCoeff","coshCoeff","calculatedDuration","current","currentVelocity","toTransition","applyToOptions","generatorOptions","createGenerator","ease","createGeneratorEasing","getGeneratorVelocity","resolveValue","prevT","inertia","power","timeConstant","bounceDamping","bounceStiffness","modifyTarget","nearestBoundary","amplitude","ideal","calcDelta","calcLatest","applyFriction","latest","timeReachedBoundary","spring$1","checkCatchBoundary","hasUpdatedFrame","interpolate","input","isClamp","inputLength","isZeroDeltaRange","reverse","mixers","customMixer","mixerFactory","numMixers","easingFunction","createMixers","interpolator","progressInRange","defaultOffset","offset","remaining","offsetProgress","fillOffset","keyframeValues","times","easingFunctions","isEasingArray","absoluteTimes","o","convertOffsetToTimes","mapTimeToKeyframe","isNotNull","getFinalKeyframe","repeat","repeatType","finalKeyframe","speed","resolvedKeyframes","filter","transitionTypeMap","decay","tween","replaceTransitionType","transition","WithPromise","updateFinished","finished","_finished","Promise","resolve","notifyFinished","then","onResolve","onReject","percentToProgress","JSAnimation","super","startTime","isStopped","currentTime","holdTime","playbackSpeed","delayState","motionValue","updatedAt","tick","teardown","onStop","initAnimation","play","autoplay","pause","repeatDelay","keyframes$1","generatorFactory","mixKeyframes","mirroredGenerator","resolvedDuration","totalDuration","updateTime","animationTime","sample","delay","onUpdate","timeWithoutDelay","isInDelayPhase","elapsed","frameGenerator","currentIteration","floor","iterationProgress","isAnimationFinished","finish","reject","iterationDuration","driver","s","newSpeed","hasChanged","onPlay","complete","onComplete","onCancel","stopDriver","sampleTime","attachTimeline","timeline","allowFlatten","observe","radToDeg","rad","rotate","angle","atan2","rebaseAngle","matrix2dParsers","y","translateX","translateY","scaleX","scaleY","rotateZ","skewX","atan","skewY","skew","matrix3dParsers","z","translateZ","rotateX","rotateY","defaultTransformValue","name","parseValueFromTransform","matrix3dMatch","parsers","matrix2dMatch","valueParser","convertTransformToNumber","transformPropOrder","transformProps","isNumOrPxType","transformKeys","nonTranslationalTransformKeys","positionalValues","width","paddingLeft","paddingRight","boxSizing","height","paddingTop","paddingBottom","top","_bbox","left","bottom","right","toResolve","isScheduled","anyNeedsMeasurement","isForced","measureAllKeyframes","resolversToMeasure","resolver","needsMeasurement","elementsToMeasure","element","transformsToRestore","Map","removedTransforms","visualElement","getValue","get","removeNonTranslationalTransform","measureInitialState","restore","measureEndState","suspendedScrollY","window","scrollTo","readAllKeyframes","readKeyframes","KeyframeResolver","unresolvedKeyframes","isAsync","scheduleResolve","currentValue","valueAsRead","readValue","fillWildcards","setFinalKeyframe","renderEndStyles","isForcedComplete","resume","setStyle","isCSSVar","style","setProperty","supportsFlags","memoSupports","supportsFlag","memoized","supportsScrollTimeline","ScrollTimeline","supportsLinearEasing","document","createElement","animate","opacity","cubicBezierAsString","supportedWaapiEasing","mapEasingToNativeEasing","segmentEasing","startWaapiAnimation","valueName","pseudoElement","keyframeOptions","fill","iterations","direction","isGenerator","NativeAnimation","finishedTime","manualStartTime","isPseudoElement","applyGeneratorOptions","animation","onfinish","keyframe","updateMotionValue","commitStyles","isConnected","effect","getComputedTiming","Number","wasFinished","playbackRate","playState","newStartTime","rangeStart","rangeEnd","updateTiming","unsupportedEasingFunctions","replaceStringEasing","NativeAnimationExtended","sampleAnimation","setWithVelocity","isAnimatable","makeAnimationInstant","acceleratedValues","browserColorFunctions","colorProperties","supportsWaapi","Element","supportsBrowserAnimation","subject","owner","HTMLElement","transformTemplate","getProps","hasBrowserOnlyColors","AsyncMotionValueAnimation","_animation","stopTimeline","keyframeResolver","createdAt","optionsWithDefaults","KeyframeResolver$1","forced","onKeyframesResolved","sync","isHandoff","resolvedAt","canAnimateValue","originKeyframe","targetKeyframe","isOriginAnimatable","isTargetAnimatable","hasKeyframesChanged","canAnimate","instantAnimations","resolvedOptions","useWaapi","catch","pendingTimeline","_onReject","finally","calcChildStagger","children","child","delayChildren","staggerChildren","staggerDirection","sort","sortNodePosition","numChildren","size","maxStaggerDuration","MotionValue","init","canTrackVelocity","events","updateAndNotify","setPrevFrameValue","prev","setCurrent","change","dependents","dependent","dirty","hasAnimated","prevFrameValue","prevUpdatedAt","onChange","subscription","on","eventName","unsubscribe","clearListeners","eventManagers","attach","passiveEffect","stopPassiveEffect","jump","endAnimation","addDependent","removeDependent","getPrevious","getVelocity","startAnimation","animationStart","animationComplete","clearAnimation","animationCancel","isAnimating","destroy","resolveTransition","parentTransition","inherit","_","rest","getValueTransition","valueTransition","underDampedSpring","keyframesTransition","getDefaultTransition","valueKey","orchestrationKeys","animateMotionValue","isTransitionDefined","assign","shouldSkip","skipAnimations","shouldSkipAnimations","isSync","splitCSSVariableRegex","getVariableValue","depth","fallback","exec","token1","token2","parseCSSVariable","resolved","getComputedStyle","getPropertyValue","trimmed","getValueState","resolveVariantFromProps","props","custom","variants","resolveVariant","positionalKeys","isKeyframesTarget","setMotionValue","hasValue","addValue","resolveFinalValueInKeyframes","isMotionValue","addValueToWillChange","willChange","WillChange","newWillChange","camelToDash","str","toLowerCase","optimizedAppearDataAttribute","getOptimisedAppearId","shouldBlockAnimation","protectedKeys","needsAnimating","shouldBlock","animateTarget","targetAndTransition","transitionOverride","transitionEnd","defaultTransition","reduceMotion","animations","animationTypeState","animationState","getState","path","animateVisualElement","latestValues","valueTarget","MotionHandoffAnimation","appearId","shouldReduceMotion","applyTransitionEnd","setTarget","all","animateVariant","variant","presenceContext","getAnimation","getChildAnimations","variantChildren","forwardDelay","animateChildren","when","first","last","testValueType","dimensionValueTypes","findDimensionValueType","isNone","maxDefaults","applyDefaultFilter","slice","defaultValue","functionRegex","functions","join","mask","int","numberValueTypes","borderWidth","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderRadius","borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius","maxWidth","maxHeight","inset","insetBlock","insetBlockStart","insetBlockEnd","insetInline","insetInlineStart","insetInlineEnd","padding","paddingBlock","paddingBlockStart","paddingBlockEnd","paddingInline","paddingInlineStart","paddingInlineEnd","margin","marginTop","marginRight","marginBottom","marginLeft","marginBlock","marginBlockStart","marginBlockEnd","marginInline","marginInlineStart","marginInlineEnd","fontSize","backgroundPositionX","backgroundPositionY","pathRotation","scaleZ","distance","perspective","transformPerspective","originX","originY","originZ","zIndex","fillOpacity","strokeOpacity","numOctaves","defaultValueTypes","backgroundColor","outlineColor","stroke","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","WebkitFilter","WebkitMask","getDefaultValueType","customTypes","defaultValueType","invalidTemplates","DOMKeyframesResolver","resolveNoneKeyframes","originType","targetType","noneKeyframeIndexes","animatableTemplate","noneIndex","makeNoneKeyframesAnimatable","pageYOffset","measuredOrigin","measureViewportBox","measureKeyframe","finalKeyframeIndex","unsetTransformName","unsetTransformValue","resolveElements","elementOrSelector","scope","selectorCache","EventTarget","elements","querySelectorAll","getValueAsType","microtask","isDragging","isDragActive","setupGesture","gestureAbortController","AbortController","passive","signal","abort","hover","onHoverStart","eventOptions","hoverEndCallback","isPressed","deferredHoverEnd","endHover","event","removeEventListener","onPointerLeave","onPointerUp","leaveEvent","pointerType","addEventListener","enterEvent","onHoverEnd","isNodeOrChild","parent","parentElement","isPrimaryPointer","button","isPrimary","keyboardAccessibleElements","textInputElements","isPressing","filterEvents","firePointerEvent","dispatchEvent","PointerEvent","bubbles","isValidPressEvent","claimedPointerDownEvents","press","targetOrSelector","onPressStart","targets","cancelEvents","startPress","startEvent","currentTarget","stopPropagation","onPressEnd","onPointerEnd","endEvent","success","onPointerCancel","upEvent","useGlobalTarget","cancelEvent","focusEvent","handleKeydown","handleKeyup","enableKeyboardPress","tagName","isContentEditable","isElementKeyboardAccessible","hasAttribute","tabIndex","isSVGElement","resizeHandlers","WeakMap","observer","borderBoxAxis","svgAxis","htmlAxis","borderBoxSize","getBBox","getWidth","getHeight","notifyTarget","notifyAll","entries","resizeElement","ResizeObserver","elementHandlers","unobserve","windowCallbacks","windowResizeHandler","resizeWindow","innerWidth","innerHeight","resize","valueTypes","createBox","visualElementStore","isAnimationControls","isVariantLabel","variantPriorityOrder","variantProps","isControllingVariants","isVariantNode","prefersReducedMotion","hasReducedMotionListener","isBrowser","propEventHandlers","featureDefinitions","setFeatureDefinitions","definitions","VisualElement","scrapeMotionValuesFromProps","_props","_prevProps","_visualElement","reducedMotionConfig","blockInitialAnimation","visualState","features","valueSubscriptions","prevMotionValues","hasBeenMounted","propEventSubscriptions","notifyUpdate","triggerBuild","renderInstance","renderState","projection","renderScheduledAt","scheduleRender","baseTarget","initialValues","initial","skipAnimationsConfig","manuallyAnimateOnMount","initialMotionValues","mount","instance","removeFromVariantTree","addVariantChild","bindToMotionValue","matchMedia","motionMediaQuery","setReducedMotionPreferences","matches","initPrefersReducedMotion","addChild","unmount","remove","removeChild","feature","isMounted","enteringChildren","accelerate","factory","cleanup","valueIsTransform","onBindTransform","removeOnChange","latestValue","isTransformDirty","removeSyncCheck","MotionCheckAppearSync","other","sortInstanceNodePosition","updateFeatures","featureDefinition","isEnabled","Feature","FeatureConstructor","build","measureInstanceViewportBox","getStaticValue","setStaticValue","prevProps","prevPresenceContext","listener","nextValue","prevValue","existingValue","liveStyle","removeValue","updateMotionValuesFromProps","handleChildMotionValue","getVariant","getTransformPagePoint","getClosestVariantNode","closestVariantNode","removeValueFromRenderState","getBaseTargetFromProps","readValueFromInstance","setBaseTarget","getBaseTarget","valueFromInitial","args","scheduleRenderMicrotask","DOMVisualElement","arguments","compareDocumentPosition","vars","childSubscription","textContent","node","convertBoundingBoxToBox","isIdentityScale","hasScale","hasTransform","has2DTranslate","is2DTranslate","scalePoint","point","originPoint","applyPointDelta","translate","boxScale","applyAxisDelta","axis","applyBoxDelta","box","TREE_SCALE_SNAP_MIN","TREE_SCALE_SNAP_MAX","translateAxis","transformAxis","axisTranslate","axisScale","axisOrigin","resolveAxisTranslate","transformBox","sourceBox","resolveBox","transformPoint","topLeft","bottomRight","transformBoxPoints","getBoundingClientRect","translateAlias","numTransforms","buildHTMLStyles","transformOrigin","hasTransformOrigin","valueAsType","transformString","transformIsDefault","valueIsDefault","buildTransform","renderHTML","styleProp","elementStyle","applyProjectionStyles","pixelsToPercent","pixels","correctBorderRadius","correct","correctBoxShadow","treeScale","projectionDelta","original","shadow","xScale","yScale","averageScale","scaleCorrectors","applyTo","boxShadow","isForcedMotionValue","layout","layoutId","prevStyle","newValues","HTMLVisualElement","isProjecting","readTransformValue","computedStyle","dashKeys","array","camelKeys","cssMotionPathProperties","buildSVGAttrs","attrX","attrY","attrScale","pathLength","pathSpacing","pathOffset","isSVGTag","viewBox","attrs","spacing","useDashCase","buildSVGPath","camelCaseAttributes","tag","scrapeMotionValuesFromProps$1","charAt","toUpperCase","SVGVisualElement","defaultType","getAttribute","_styleProp","setAttribute","renderSVG","numVariantProps","getVariantContext","context","prop","shallowCompare","prevLength","reversePriorityOrder","numAnimationTypes","createAnimateFunction","resolvedDefinition","createAnimationState","createState","isInitialRender","wasReset","buildResolvedTypeValues","animateChanges","changedActiveType","removedKeys","encounteredKeys","removedVariantIndex","typeState","propIsVariant","activeDelta","isActive","isInherited","prevProp","prevResolvedValues","variantDidChange","checkVariantsDidChange","shouldAnimateType","handledRemovedValues","definitionList","resolvedValues","allKeys","markToAnimate","valueHasChanged","willAnimateViaParent","parentVariant","fallbackAnimation","initialTransition","fallbackTarget","shouldAnimate","setActive","setAnimateFunction","makeAnimator","reset","createTypeState","whileInView","whileHover","whileTap","whileDrag","whileFocus","exit","copyAxisInto","originAxis","copyBoxInto","originBox","copyAxisDeltaInto","originDelta","calcLength","calcAxisDelta","calcBoxDelta","calcRelativeAxis","relative","anchor","anchorPoint","calcRelativeAxisPosition","calcRelativePosition","removePointDelta","removeAxisTransforms","transforms","scaleKey","originKey","sourceAxis","removeAxisDelta","xKeys","yKeys","removeBoxTransforms","isAxisDeltaZero","isDeltaZero","axisEquals","axisEqualsRounded","boxEqualsRounded","aspectRatio","axisDeltaEquals","eachAxis","borderLabels","numBorders","asNumber","isPx","getRadius","radiusName","easeCrossfadeIn","compress","easeCrossfadeOut","addDomEvent","compareByDepth","FlatTree","isDirty","resolveMotionValue","NodeStack","members","member","lead","prevLead","inst","snapshot","promote","relegate","isPresent","preserveFollowOpacity","show","updateSnapshot","layoutDependency","prevDep","nextDep","resumeFrom","preserveOpacity","animationValues","isUpdating","isLayoutDirty","crossfade","hide","exitAnimationComplete","onExitComplete","resumingFrom","removeLeadSnapshot","globalProjectionState","hasAnimatedSinceResize","hasEverUpdated","transformAxes","id","resetDistortingTransform","sharedAnimationValues","cancelTreeOptimisedTransformAnimations","projectionNode","hasCheckedOptimisedAppear","MotionHasOptimisedAnimation","MotionCancelOptimisedAnimation","createProjectionNode","attachResizeListener","defaultParent","measureScroll","checkIsScrollRoot","resetTransform","animationId","animationCommitId","isTreeAnimating","isAnimationBlocked","isProjectionDirty","isSharedProjectionDirty","updateManuallyBlocked","updateBlockedByResize","isSVG","needsReset","shouldResetTransform","eventHandlers","hasTreeAnimated","layoutVersion","updateScheduled","scheduleUpdate","projectionUpdateScheduled","checkUpdateFailed","clearAllSnapshots","updateProjection","nodes","propagateDirtyNodes","resolveTargetDelta","calcProjection","cleanDirtyNodes","resolvedRelativeTargetAt","linkedParentVersion","hasProjected","isVisible","animationProgress","sharedNodes","notifyListeners","subscriptionManager","hasListeners","cancelDelay","resizeUnblockUpdate","newInnerWidth","timeout","checkElapsed","finishAnimation","registerSharedNode","hasLayoutChanged","hasRelativeLayoutChanged","newLayout","isTreeAnimationBlocked","relativeTarget","layoutTransition","defaultLayoutTransition","onLayoutAnimationStart","onLayoutAnimationComplete","hasTargetChanged","targetLayout","hasOnlyRelativeTargetChanged","layoutRoot","currentAnimation","animationOptions","setAnimationOrigin","isLead","willUpdate","stack","getStack","blockUpdate","unblockUpdate","isUpdateBlocked","startUpdate","resetSkewAndRotation","getTransformTemplate","shouldNotifyListeners","updateScroll","prevTransformTemplateValue","wasBlockedByResize","forceLayoutMeasure","clearMeasurements","clearIsLayoutDirty","ensureDraggedNodesSnapshotted","resetTransformStyle","updateLayout","notifyLayoutUpdate","didUpdate","clearSnapshot","removeLeadSnapshots","scheduleUpdateProjection","scheduleCheckAfterUnmount","measure","measuredBox","alwaysMeasureLayout","prevLayout","layoutCorrected","layoutBox","phase","layoutScroll","scroll","isRoot","wasRoot","isResetRequested","hasProjection","transformTemplateValue","transformTemplateHasChanged","removeTransform","pageBox","measurePageBox","removeElementScroll","roundAxis","checkNodeWasScrollRoot","boxWithoutScroll","applyTransform","transformOnly","withTransforms","boxWithoutTransform","setTargetDelta","targetDelta","setOptions","forceRelativeParentToResolveTarget","relativeParent","forceRecalculation","getLead","isShared","attemptToResolveRelativeTarget","getClosestProjectingParent","removeRelativeTarget","layoutAnchor","createRelativeTarget","targetWithTransforms","relativeTargetOrigin","parentLayout","canSkip","pendingAnimation","prevTreeScaleX","prevTreeScaleY","treePath","isSharedTransition","treeLength","display","applyTreeDeltas","prevProjectionDelta","createProjectionDeltas","projectionDeltaWithTransform","pathFn","snapshotLatestValues","mixedValues","relativeLayout","isSharedLayoutAnimation","isOnlyMember","shouldCrossfadeOpacity","hasOpacityCrossfade","prevRelativeTarget","interpolateProjection","mixTargetDelta","mixAxisDeltaLinear","mixAxis","follow","opacityExit","borderLabel","followRadius","leadRadius","mixValues","motionValue$1","animateSingleValue","completeAnimation","applyTransformsToTarget","shouldAnimatePositionOnly","animationType","xLength","yLength","config","initialPromotionConfig","shouldPreserveFollowOpacity","getPrevLead","hasDistortingTransform","resetValues","targetStyle","visibility","pointerEvents","valuesToRender","latestTransform","xTranslate","yTranslate","zTranslate","elementScaleX","elementScaleY","buildProjectionTransform","isCSSVariable","corrected","num","resetTree","measuredLayout","axisSnapshot","snapAxis","layoutDelta","visualDelta","parentSnapshot","relativeSnapshot","onBeforeLayoutMeasure","userAgentContains","string","navigator","userAgent","roundPoint","maxDistance","DocumentProjectionNode","ref","documentElement","scrollLeft","body","scrollTop","rootProjectionNode","HTMLProjectionNode","documentNode","position","useCreateMotionContext","getCurrentTreeVariants","useContext","useMemo","variantLabelsAsDependency","createHtmlRenderState","copyRawValuesOnly","useStyle","useInitialMotionValues","useHTMLProps","htmlProps","drag","dragListener","draggable","userSelect","WebkitUserSelect","WebkitTouchCallout","touchAction","onTap","onTapStart","createSvgRenderState","useSVGProps","_isStatic","Component","visualProps","rawStyles","validMotionProps","isValidMotionProp","shouldForward","isValidProp","require","lowercaseSVGElements","isSVGComponent","useRender","forwardMotionProps","filteredProps","isDom","filterProps","elementProps","Fragment","renderedChildren","PresenceContext","makeLatestValues","scrapeMotionValues","motionValues","checkIsControllingVariants","checkIsVariantNode","isInitialAnimationBlocked","variantToSet","list","makeUseVisualState","make","createRenderState","makeState","useRef","useConstant","useHTMLVisualState","scrapeHTMLMotionValuesFromProps","useSVGVisualState","scrapeSVGMotionValuesFromProps","featureProps","focus","tap","pan","inView","isInitialized","getInitializedFeatureDefinitions","initialFeatureDefinitions","initFeatureDefinitions","motionComponentSymbol","Symbol","for","useMotionRef","externalRef","externalRefContainer","useInsertionEffect","refCleanup","useCallback","onMount","SwitchLayoutGroupContext","isRefObject","useIsomorphicLayoutEffect","useLayoutEffect","useEffect","useVisualElement","createVisualElement","ProjectionNodeConstructor","lazyContext","motionConfig","visualElementRef","hasMountedOnce","renderer","initialLayoutGroupConfig","dragConstraints","layoutCrossfade","getClosestProjectingNode","optimisedAppearId","wantsHandoff","MotionHandoffIsComplete","MotionIsMounted","MotionHandoffMarkAsComplete","allowProjection","createMotionComponent","preloadedFeatures","loadFeatures","useVisualState","MotionDOMComponent","MeasureLayout","configAndProps","useLayoutId","layoutProjection","combined","ProjectionNode","getProjectionFunctionality","_jsxs","Provider","_jsx","displayName","ForwardRefMotionComponent","forwardRef","layoutGroupId","createDomVisualElement","updateAnimationControlsSubscription","unmountControls","subscribe","prevAnimate","isExitComplete","prevIsPresent","exitAnimation","register","extractEventInfo","pageX","pageY","addPointerEvent","addPointerInfo","getContextWindow","ownerDocument","defaultView","overflowStyles","PanSession","handlers","contextWindow","dragSnapToOrigin","distanceThreshold","lastMoveEvent","lastMoveEventInfo","lastRawMoveEventInfo","scrollPositions","removeScrollListeners","onElementScroll","handleScroll","onWindowScroll","updatePoint","getPanInfo","history","isPanStarted","isDistancePastThreshold","xDelta","yDelta","distance2D","onStart","onMove","handlePointerMove","handlePointerUp","end","onEnd","onSessionEnd","resumeAnimation","panInfo","initialInfo","onSessionStart","removeListeners","startScrollTracking","overflowX","overflowY","scrollX","scrollY","capture","isWindow","updateHandlers","subtractPoint","lastDevicePoint","startDevicePoint","timeDelta","timestampedPoint","lastPoint","calcRelativeAxisConstraints","calcViewportAxisConstraints","layoutAxis","constraintsAxis","defaultElastic","resolveAxisElastic","dragElastic","minLabel","maxLabel","resolvePointElastic","label","elementDragControls","VisualElementDragControls","openDragLock","currentDirection","constraints","hasMutatedConstraints","elastic","latestPointerEvent","latestPanInfo","originEvent","snapToCursor","panSession","stopAnimation","dragPropagation","onDragStart","resolveConstraints","getAxisMotionValue","measuredAxis","dragDirectionLock","onDirectionLock","onDrag","lockThreshold","getCurrentDirection","updateAxis","snap","finalEvent","finalPanInfo","onDragEnd","endPanSession","_point","shouldDrag","axisValue","applyConstraints","prevConstraints","resolveRefConstraints","calcRelativeConstraints","resolveDragElastic","relativeConstraints","rebaseAxisConstraints","onMeasureDragConstraints","constraintsElement","constraintsBox","viewportBox","measuredConstraints","calcViewportConstraints","userConstraints","convertBoxToBoundingBox","dragMomentum","dragTransition","onDragTransitionEnd","momentumAnimations","startAxisValueAnimation","dragKey","externalMotionValue","scalePositionWithinConstraints","boxProgress","sourceLength","targetLength","calcProgress","calcOrigin","addListeners","stopPointerListener","isClickingTextInputChild","isElementTextInput","stopResizeObservers","measureDragConstraints","onResize","stopElement","skipFirstCall","stopContainer","startResizeObservers","stopMeasureLayoutListener","stopResizeListener","stopLayoutUpdateListener","isFirst","asyncHandler","hasTakenAnySnapshot","MeasureLayoutWithContext","componentDidMount","layoutGroup","switchLayoutGroup","group","safeToRemove","getSnapshotBeforeUpdate","componentDidUpdate","componentWillUnmount","promoteContext","deregister","useId","usePresence","removePointerDownListener","onPointerDown","pointerDownEvent","session","createPanHandlers","onPanSessionStart","onPanStart","onPan","onPanEnd","removeGroupControls","controls","dragControls","prevDragControls","handleHoverEvent","lifecycle","handlePressEvent","HTMLButtonElement","disabled","observerCallbacks","observers","fireObserverCallback","entry","fireAllObserverCallbacks","observeIntersection","rootInteresectionObserver","lookupRoot","rootObservers","JSON","stringify","IntersectionObserver","initIntersectionObserver","thresholdNames","featureBundle","hasEnteredView","isInView","startObserver","stopObserver","viewport","rootMargin","amount","once","threshold","isIntersecting","onViewportEnter","onViewportLeave","prevViewport","hasViewportOptionChanged","globalTapTarget","propagate","_element","onFocus","isFocusVisible","onBlur","createMotionComponentWithFeatures","MotionDiv"],"mappings":"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"}