{"version":3,"file":"static/chunks/89-3cbb06dd2897ee37.js","mappings":"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","sources":["webpack://_N_E/./node_modules/framer-motion/dist/es/context/MotionConfigContext.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/context/MotionContext/index.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/context/PresenceContext.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/is-browser.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/context/LazyContext.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/is-ref-object.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/utils/is-variant-label.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/utils/is-animation-controls.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/utils/variant-props.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/utils/is-controlling-variants.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/context/MotionContext/utils.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/context/MotionContext/create.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/motion/features/definitions.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/motion/features/load-features.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/context/LayoutGroupContext.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/motion/utils/symbol.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/motion/index.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/motion-proxy.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/svg/lowercase-elements.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/projection/styles/scale-correction.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/html/utils/transform.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/motion/utils/is-forced-motion-value.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/value/utils/is-motion-value.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/html/utils/build-transform.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/utils/is-css-variable.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/value-types/get-as-type.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/clamp.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/value/types/numbers/index.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/value/types/utils.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/value/types/numbers/units.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/value-types/type-int.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/value-types/number.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/html/utils/build-styles.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/html/utils/create-render-state.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/html/use-props.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/motion/utils/valid-prop.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/utils/filter-props.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/svg/utils/transform-origin.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/svg/utils/path.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/svg/utils/build-attrs.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/svg/utils/is-svg-tag.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/svg/use-props.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/use-render.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/utils/camel-to-dash.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/html/utils/render.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/svg/utils/camel-case-attrs.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/svg/utils/render.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/html/utils/scrape-motion-values.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/svg/utils/scrape-motion-values.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/utils/resolve-variants.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/use-constant.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/utils/is-keyframes-target.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/resolve-value.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/value/utils/resolve-motion-value.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/motion/utils/use-visual-state.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/noop.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/frameloop/render-step.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/frameloop/batcher.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/frameloop/frame.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/svg/config-motion.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/html/config-motion.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/utils/create-config.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/events/add-dom-event.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/events/utils/is-primary-pointer.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/events/event-info.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/events/add-pointer-event.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/pipe.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/gestures/drag/utils/lock.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/motion/features/Feature.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/gestures/hover.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/gestures/focus.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/gestures/utils/is-node-or-child.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/gestures/press.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/motion/features/viewport/observers.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/motion/features/viewport/index.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/motion/features/gestures.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/shallow-compare.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/utils/resolve-dynamic-variants.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/optimized-appear/data-id.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/errors.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/time-conversion.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/use-instant-transition-state.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/easing/utils/is-bezier-definition.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/animators/waapi/easing.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/animators/waapi/index.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/animators/waapi/utils/get-final-keyframe.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/easing/cubic-bezier.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/easing/ease.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/easing/utils/is-easing-array.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/easing/modifiers/mirror.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/easing/modifiers/reverse.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/easing/circ.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/easing/back.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/easing/anticipate.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/easing/utils/map.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/value/types/color/utils.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/value/types/color/rgba.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/value/types/color/hex.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/value/types/color/hsla.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/value/types/color/index.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/mix.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/hsla-to-rgba.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/mix-color.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/value/types/complex/index.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/mix-complex.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/progress.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/interpolate.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/offsets/fill.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/offsets/default.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/offsets/time.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/generators/keyframes.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/velocity-per-second.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/generators/utils/velocity.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/generators/spring/find.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/generators/spring/index.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/generators/inertia.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/animators/js/driver-frameloop.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/generators/utils/calc-duration.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/animators/js/index.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/memo.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/animators/waapi/create-accelerated-animation.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/animators/instant.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/utils/default-transitions.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/utils/is-animatable.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/value/types/complex/filter.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/value-types/defaults.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/value-types/animatable-none.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/is-zero-value-string.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/utils/is-none.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/utils/keyframes.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/utils/transitions.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/interfaces/motion-value.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/value/use-will-change/is.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/is-numerical-string.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/array.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/subscription-manager.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/value/index.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/value-types/test.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/value-types/type-auto.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/value-types/dimensions.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/value-types/find.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/utils/setters.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/interfaces/visual-element-target.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/interfaces/visual-element-variant.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/interfaces/visual-element.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/utils/animation-state.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/motion/features/animation/index.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/motion/features/animation/exit.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/motion/features/animations.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/distance.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/projection/geometry/delta-calc.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/projection/geometry/models.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/projection/utils/each-axis.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/projection/geometry/conversion.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/projection/utils/has-transform.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/projection/geometry/delta-apply.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/projection/utils/measure.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/gestures/drag/index.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/gestures/pan/index.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/projection/node/state.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/projection/styles/scale-border-radius.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/projection/styles/scale-box-shadow.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/projection/animation/mix-values.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/projection/geometry/copy.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/projection/geometry/delta-remove.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/projection/geometry/utils.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/projection/shared/stack.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/projection/styles/transform.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/utils/compare-by-depth.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/utils/flat-tree.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/delay.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/debug/record.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/utils/is-svg-element.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/animation/interfaces/single-value.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/projection/node/DocumentProjectionNode.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/projection/node/HTMLProjectionNode.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/motion/features/drag.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/utils/css-variables-conversion.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/utils/unit-conversion.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/utils/parse-dom-variant.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/reduced-motion/state.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/utils/reduced-motion/index.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/utils/motion-values.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/store.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/VisualElement.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/DOMVisualElement.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/html/HTMLVisualElement.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/svg/SVGVisualElement.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/create-visual-element.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/motion/features/layout.mjs","webpack://_N_E/./node_modules/framer-motion/dist/es/render/dom/motion.mjs","webpack://_N_E/"],"sourcesContent":["import { createContext } from 'react';\n\n/**\n * @public\n */\nconst MotionConfigContext = createContext({\n transformPagePoint: (p) => p,\n isStatic: false,\n reducedMotion: \"never\",\n});\n\nexport { MotionConfigContext };\n","import { createContext } from 'react';\n\nconst MotionContext = createContext({});\n\nexport { MotionContext };\n","import { createContext } from 'react';\n\n/**\n * @public\n */\nconst PresenceContext = createContext(null);\n\nexport { PresenceContext };\n","const isBrowser = typeof document !== \"undefined\";\n\nexport { isBrowser };\n","import { useLayoutEffect, useEffect } from 'react';\nimport { isBrowser } from './is-browser.mjs';\n\nconst useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;\n\nexport { useIsomorphicLayoutEffect };\n","import { createContext } from 'react';\n\nconst LazyContext = createContext({ strict: false });\n\nexport { LazyContext };\n","import { useContext, useRef, useInsertionEffect, useEffect } from 'react';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { MotionContext } from '../../context/MotionContext/index.mjs';\nimport { useIsomorphicLayoutEffect } from '../../utils/use-isomorphic-effect.mjs';\nimport { LazyContext } from '../../context/LazyContext.mjs';\nimport { MotionConfigContext } from '../../context/MotionConfigContext.mjs';\n\nfunction useVisualElement(Component, visualState, props, createVisualElement) {\n const { visualElement: parent } = useContext(MotionContext);\n const lazyContext = useContext(LazyContext);\n const presenceContext = useContext(PresenceContext);\n const reducedMotionConfig = useContext(MotionConfigContext).reducedMotion;\n const visualElementRef = useRef();\n /**\n * If we haven't preloaded a renderer, check to see if we have one lazy-loaded\n */\n createVisualElement = createVisualElement || 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 });\n }\n const visualElement = visualElementRef.current;\n useInsertionEffect(() => {\n visualElement && visualElement.update(props, presenceContext);\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 canHandoff = useRef(Boolean(window.HandoffAppearAnimations));\n useIsomorphicLayoutEffect(() => {\n if (!visualElement)\n return;\n visualElement.render();\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 (canHandoff.current && visualElement.animationState) {\n visualElement.animationState.animateChanges();\n }\n });\n useEffect(() => {\n if (!visualElement)\n return;\n visualElement.updateFeatures();\n if (!canHandoff.current && visualElement.animationState) {\n visualElement.animationState.animateChanges();\n }\n /**\n * Once we've handed off animations we can delete HandoffAppearAnimations\n * so components added after the initial render can animate changes\n * in useEffect vs useLayoutEffect.\n */\n window.HandoffAppearAnimations = undefined;\n canHandoff.current = false;\n });\n return visualElement;\n}\n\nexport { useVisualElement };\n","function isRefObject(ref) {\n return (typeof ref === \"object\" &&\n Object.prototype.hasOwnProperty.call(ref, \"current\"));\n}\n\nexport { isRefObject };\n","import { useCallback } from 'react';\nimport { isRefObject } from '../../utils/is-ref-object.mjs';\n\n/**\n * Creates a ref function that, when called, hydrates the provided\n * external ref and VisualElement.\n */\nfunction useMotionRef(visualState, visualElement, externalRef) {\n return useCallback((instance) => {\n instance && visualState.mount && visualState.mount(instance);\n if (visualElement) {\n instance\n ? visualElement.mount(instance)\n : visualElement.unmount();\n }\n if (externalRef) {\n if (typeof externalRef === \"function\") {\n externalRef(instance);\n }\n else if (isRefObject(externalRef)) {\n externalRef.current = instance;\n }\n }\n }, \n /**\n * Only pass a new ref callback to React if we've received a visual element\n * factory. Otherwise we'll be mounting/remounting every time externalRef\n * or other dependencies change.\n */\n [visualElement]);\n}\n\nexport { useMotionRef };\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","function isAnimationControls(v) {\n return typeof v === \"object\" && typeof v.start === \"function\";\n}\n\nexport { isAnimationControls };\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","import { isAnimationControls } from '../../animation/utils/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","import { isVariantLabel } from '../../render/utils/is-variant-label.mjs';\nimport { isControllingVariants } from '../../render/utils/is-controlling-variants.mjs';\n\nfunction 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\nexport { getCurrentTreeVariants };\n","import { useContext, useMemo } from 'react';\nimport { MotionContext } from './index.mjs';\nimport { getCurrentTreeVariants } from './utils.mjs';\n\nfunction 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\nexport { useCreateMotionContext };\n","const 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};\nconst featureDefinitions = {};\nfor (const key in featureProps) {\n featureDefinitions[key] = {\n isEnabled: (props) => featureProps[key].some((name) => !!props[name]),\n };\n}\n\nexport { featureDefinitions };\n","import { featureDefinitions } from './definitions.mjs';\n\nfunction loadFeatures(features) {\n for (const key in features) {\n featureDefinitions[key] = {\n ...featureDefinitions[key],\n ...features[key],\n };\n }\n}\n\nexport { loadFeatures };\n","import { createContext } from 'react';\n\nconst LayoutGroupContext = createContext({});\n\nexport { LayoutGroupContext };\n","import { createContext } from 'react';\n\n/**\n * Internal, exported only for usage in Framer\n */\nconst SwitchLayoutGroupContext = createContext({});\n\nexport { SwitchLayoutGroupContext };\n","const motionComponentSymbol = Symbol.for(\"motionComponentSymbol\");\n\nexport { motionComponentSymbol };\n","import * as React from 'react';\nimport { forwardRef, useContext } from 'react';\nimport { MotionConfigContext } from '../context/MotionConfigContext.mjs';\nimport { MotionContext } from '../context/MotionContext/index.mjs';\nimport { useVisualElement } from './utils/use-visual-element.mjs';\nimport { useMotionRef } from './utils/use-motion-ref.mjs';\nimport { useCreateMotionContext } from '../context/MotionContext/create.mjs';\nimport { loadFeatures } from './features/load-features.mjs';\nimport { isBrowser } from '../utils/is-browser.mjs';\nimport { LayoutGroupContext } from '../context/LayoutGroupContext.mjs';\nimport { LazyContext } from '../context/LazyContext.mjs';\nimport { SwitchLayoutGroupContext } from '../context/SwitchLayoutGroupContext.mjs';\nimport { motionComponentSymbol } from './utils/symbol.mjs';\n\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 */\nfunction createMotionComponent({ preloadedFeatures, createVisualElement, useRender, useVisualState, Component, }) {\n preloadedFeatures && loadFeatures(preloadedFeatures);\n function MotionComponent(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 && isBrowser) {\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);\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 const isStrict = useContext(LazyContext).strict;\n if (context.visualElement) {\n MeasureLayout = context.visualElement.loadFeatures(\n // Note: Pass the full new combined props to correctly re-render dynamic feature components.\n configAndProps, isStrict, preloadedFeatures, initialLayoutGroupConfig);\n }\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 (React.createElement(MotionContext.Provider, { value: context },\n MeasureLayout && context.visualElement ? (React.createElement(MeasureLayout, { visualElement: context.visualElement, ...configAndProps })) : null,\n useRender(Component, props, useMotionRef(visualState, context.visualElement, externalRef), visualState, isStatic, context.visualElement)));\n }\n const ForwardRefComponent = forwardRef(MotionComponent);\n ForwardRefComponent[motionComponentSymbol] = Component;\n return ForwardRefComponent;\n}\nfunction useLayoutId({ layoutId }) {\n const layoutGroupId = useContext(LayoutGroupContext).id;\n return layoutGroupId && layoutId !== undefined\n ? layoutGroupId + \"-\" + layoutId\n : layoutId;\n}\n\nexport { createMotionComponent };\n","import { createMotionComponent } from '../../motion/index.mjs';\n\n/**\n * Convert any React component into a `motion` component. The provided component\n * **must** use `React.forwardRef` to the underlying DOM component you want to animate.\n *\n * ```jsx\n * const Component = React.forwardRef((props, ref) => {\n * return
\n * })\n *\n * const MotionComponent = motion(Component)\n * ```\n *\n * @public\n */\nfunction createMotionProxy(createConfig) {\n function custom(Component, customMotionComponentConfig = {}) {\n return createMotionComponent(createConfig(Component, customMotionComponentConfig));\n }\n if (typeof Proxy === \"undefined\") {\n return custom;\n }\n /**\n * A cache of generated `motion` components, e.g `motion.div`, `motion.input` etc.\n * Rather than generating them anew every render.\n */\n const componentCache = new Map();\n return new Proxy(custom, {\n /**\n * Called when `motion` is referenced with a prop: `motion.div`, `motion.input` etc.\n * The prop name is passed through as `key` and we can use that to generate a `motion`\n * DOM component with that name.\n */\n get: (_target, key) => {\n /**\n * If this element doesn't exist in the component cache, create it and cache.\n */\n if (!componentCache.has(key)) {\n componentCache.set(key, custom(key));\n }\n return componentCache.get(key);\n },\n });\n}\n\nexport { createMotionProxy };\n","/**\n * We keep these listed seperately as we use the lowercase tag names as part\n * of the runtime bundle to detect SVG components\n */\nconst 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\nexport { lowercaseSVGElements };\n","import { lowercaseSVGElements } from '../../svg/lowercase-elements.mjs';\n\nfunction 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]/.test(Component)) {\n return true;\n }\n return false;\n}\n\nexport { isSVGComponent };\n","const scaleCorrectors = {};\nfunction addScaleCorrector(correctors) {\n Object.assign(scaleCorrectors, correctors);\n}\n\nexport { addScaleCorrector, scaleCorrectors };\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 */\nconst transformProps = new Set(transformPropOrder);\n\nexport { transformPropOrder, transformProps };\n","import { scaleCorrectors } from '../../projection/styles/scale-correction.mjs';\nimport { transformProps } from '../../render/html/utils/transform.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 };\n","const isMotionValue = (value) => Boolean(value && value.getVelocity);\n\nexport { isMotionValue };\n","import { transformPropOrder } from './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(transform, { enableHardwareAcceleration = true, allowTransformNone = true, }, transformIsDefault, transformTemplate) {\n // The transform string we're going to build into.\n let transformString = \"\";\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 if (transform[key] !== undefined) {\n const transformName = translateAlias[key] || key;\n transformString += `${transformName}(${transform[key]}) `;\n }\n }\n if (enableHardwareAcceleration && !transform.z) {\n transformString += \"translateZ(0)\";\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 (allowTransformNone && transformIsDefault) {\n transformString = \"none\";\n }\n return transformString;\n}\n\nexport { buildTransform };\n","const checkStringStartsWith = (token) => (key) => typeof key === \"string\" && key.startsWith(token);\nconst isCSSVariableName = checkStringStartsWith(\"--\");\nconst isCSSVariableToken = checkStringStartsWith(\"var(--\");\nconst cssVariableRegex = /var\\s*\\(\\s*--[\\w-]+(\\s*,\\s*(?:(?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)+)?\\s*\\)/g;\n\nexport { cssVariableRegex, isCSSVariableName, isCSSVariableToken };\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","const clamp = (min, max, v) => Math.min(Math.max(v, min), max);\n\nexport { clamp };\n","import { clamp } from '../../../utils/clamp.mjs';\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","/**\n * TODO: When we move from string as a source of truth to data models\n * everything in this folder should probably be referred to as models vs types\n */\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;\nconst floatRegex = /(-)?([\\d]*\\.?[\\d])+/g;\nconst colorRegex = /(#[0-9a-f]{3,8}|(rgb|hsl)a?\\((-?[\\d\\.]+%?[,\\s]+){2}(-?[\\d\\.]+%?)\\s*[\\,\\/]?\\s*[\\d\\.]*%?\\))/gi;\nconst singleColorRegex = /^(#[0-9a-f]{3,8}|(rgb|hsl)a?\\((-?[\\d\\.]+%?[,\\s]+){2}(-?[\\d\\.]+%?)\\s*[\\,\\/]?\\s*[\\d\\.]*%?\\))$/i;\nfunction isString(v) {\n return typeof v === \"string\";\n}\n\nexport { colorRegex, floatRegex, isString, sanitize, singleColorRegex };\n","import { isString } from '../utils.mjs';\n\nconst createUnitType = (unit) => ({\n test: (v) => isString(v) && v.endsWith(unit) && v.split(\" \").length === 1,\n parse: parseFloat,\n transform: (v) => `${v}${unit}`,\n});\nconst degrees = createUnitType(\"deg\");\nconst percent = createUnitType(\"%\");\nconst px = createUnitType(\"px\");\nconst vh = createUnitType(\"vh\");\nconst vw = createUnitType(\"vw\");\nconst progressPercentage = {\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","import { number } from '../../../value/types/numbers/index.mjs';\n\nconst int = {\n ...number,\n transform: Math.round,\n};\n\nexport { int };\n","import { scale, alpha } from '../../../value/types/numbers/index.mjs';\nimport { px, degrees, progressPercentage } from '../../../value/types/numbers/units.mjs';\nimport { int } from './type-int.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 radius: 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 size: px,\n top: px,\n right: px,\n bottom: px,\n left: px,\n // Spacing props\n padding: px,\n paddingTop: px,\n paddingRight: px,\n paddingBottom: px,\n paddingLeft: px,\n margin: px,\n marginTop: px,\n marginRight: px,\n marginBottom: px,\n marginLeft: px,\n // Transform props\n rotate: 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 // Misc\n zIndex: int,\n // SVG\n fillOpacity: alpha,\n strokeOpacity: alpha,\n numOctaves: int,\n};\n\nexport { numberValueTypes };\n","import { buildTransform } from './build-transform.mjs';\nimport { isCSSVariableName } from '../../dom/utils/is-css-variable.mjs';\nimport { transformProps } from './transform.mjs';\nimport { getValueAsType } from '../../dom/value-types/get-as-type.mjs';\nimport { numberValueTypes } from '../../dom/value-types/number.mjs';\n\nfunction buildHTMLStyles(state, latestValues, options, transformTemplate) {\n const { style, vars, transform, transformOrigin } = state;\n // Track whether we encounter any transform or transformOrigin values.\n let hasTransform = false;\n let hasTransformOrigin = false;\n // Does the calculated transform essentially equal \"none\"?\n let transformIsNone = true;\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 seperately for further processing.\n */\n for (const key in latestValues) {\n const value = latestValues[key];\n /**\n * If this is a CSS variable we don't do any further processing.\n */\n if (isCSSVariableName(key)) {\n vars[key] = value;\n continue;\n }\n // Convert the value to its default value type, ie 0 -> \"0px\"\n const valueType = numberValueTypes[key];\n const valueAsType = getValueAsType(value, valueType);\n if (transformProps.has(key)) {\n // If this is a transform, flag to enable further transform processing\n hasTransform = true;\n transform[key] = valueAsType;\n // If we already know we have a non-default transform, early return\n if (!transformIsNone)\n continue;\n // Otherwise check to see if this is a default transform\n if (value !== (valueType.default || 0))\n transformIsNone = false;\n }\n else if (key.startsWith(\"origin\")) {\n // If this is a transform origin, flag and enable further transform-origin processing\n hasTransformOrigin = true;\n transformOrigin[key] = valueAsType;\n }\n else {\n style[key] = valueAsType;\n }\n }\n if (!latestValues.transform) {\n if (hasTransform || transformTemplate) {\n style.transform = buildTransform(state.transform, options, transformIsNone, 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","const createHtmlRenderState = () => ({\n style: {},\n transform: {},\n transformOrigin: {},\n vars: {},\n});\n\nexport { createHtmlRenderState };\n","import { useMemo } from 'react';\nimport { isForcedMotionValue } from '../../motion/utils/is-forced-motion-value.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\nimport { buildHTMLStyles } from './utils/build-styles.mjs';\nimport { createHtmlRenderState } from './utils/create-render-state.mjs';\n\nfunction 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, isStatic) {\n return useMemo(() => {\n const state = createHtmlRenderState();\n buildHTMLStyles(state, visualState, { enableHardwareAcceleration: !isStatic }, transformTemplate);\n return Object.assign({}, state.vars, state.style);\n }, [visualState]);\n}\nfunction useStyle(props, visualState, isStatic) {\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, isStatic));\n return props.transformValues ? props.transformValues(style) : style;\n}\nfunction useHTMLProps(props, visualState, isStatic) {\n // The `any` isn't ideal but it is the type of createElement props argument\n const htmlProps = {};\n const style = useStyle(props, visualState, isStatic);\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\nexport { copyRawValuesOnly, useHTMLProps };\n","/**\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 \"transformValues\",\n \"custom\",\n \"inherit\",\n \"onLayoutAnimationStart\",\n \"onLayoutAnimationComplete\",\n \"onLayoutMeasure\",\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 \"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 */\nfunction 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 validMotionProps.has(key));\n}\n\nexport { isValidMotionProp };\n","import { isValidMotionProp } from '../../../motion/utils/valid-prop.mjs';\n\nlet shouldForward = (key) => !isValidMotionProp(key);\nfunction loadExternalIsValidProp(isValidProp) {\n if (!isValidProp)\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 loadExternalIsValidProp(require(\"@emotion/is-prop-valid\").default);\n}\ncatch (_a) {\n // We don't need to actually do anything here - the fallback is the existing `isPropValid`.\n}\nfunction 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 (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\"] && key.startsWith(\"onDrag\"))) {\n filteredProps[key] = props[key];\n }\n }\n return filteredProps;\n}\n\nexport { filterProps, loadExternalIsValidProp };\n","import { px } from '../../../value/types/numbers/units.mjs';\n\nfunction calcOrigin(origin, offset, size) {\n return typeof origin === \"string\"\n ? origin\n : px.transform(offset + size * origin);\n}\n/**\n * The SVG transform origin defaults are different to CSS and is less intuitive,\n * so we use the measured dimensions of the SVG to reconcile these.\n */\nfunction calcSVGTransformOrigin(dimensions, originX, originY) {\n const pxOriginX = calcOrigin(originX, dimensions.x, dimensions.width);\n const pxOriginY = calcOrigin(originY, dimensions.y, dimensions.height);\n return `${pxOriginX} ${pxOriginY}`;\n}\n\nexport { calcSVGTransformOrigin };\n","import { px } from '../../../value/types/numbers/units.mjs';\n\nconst 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 */\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\n attrs[keys.offset] = px.transform(-offset);\n // Build the dash array\n const pathLength = px.transform(length);\n const pathSpacing = px.transform(spacing);\n attrs[keys.array] = `${pathLength} ${pathSpacing}`;\n}\n\nexport { buildSVGPath };\n","import { buildHTMLStyles } from '../../html/utils/build-styles.mjs';\nimport { calcSVGTransformOrigin } from './transform-origin.mjs';\nimport { buildSVGPath } from './path.mjs';\n\n/**\n * Build SVG visual attrbutes, like cx and style.transform\n */\nfunction buildSVGAttrs(state, { attrX, attrY, attrScale, originX, originY, pathLength, pathSpacing = 1, pathOffset = 0, \n// This is object creation, which we try to avoid per-frame.\n...latest }, options, isSVGTag, transformTemplate) {\n buildHTMLStyles(state, latest, options, 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, dimensions } = state;\n /**\n * However, we apply transforms as CSS transforms. So if we detect a transform we take it from attrs\n * and copy it into style.\n */\n if (attrs.transform) {\n if (dimensions)\n style.transform = attrs.transform;\n delete attrs.transform;\n }\n // Parse transformOrigin\n if (dimensions &&\n (originX !== undefined || originY !== undefined || style.transform)) {\n style.transformOrigin = calcSVGTransformOrigin(dimensions, originX !== undefined ? originX : 0.5, originY !== undefined ? originY : 0.5);\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","import { createHtmlRenderState } from '../../html/utils/create-render-state.mjs';\n\nconst createSvgRenderState = () => ({\n ...createHtmlRenderState(),\n attrs: {},\n});\n\nexport { createSvgRenderState };\n","const isSVGTag = (tag) => typeof tag === \"string\" && tag.toLowerCase() === \"svg\";\n\nexport { isSVGTag };\n","import { useMemo } from 'react';\nimport { copyRawValuesOnly } from '../html/use-props.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { createSvgRenderState } from './utils/create-render-state.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\n\nfunction useSVGProps(props, visualState, _isStatic, Component) {\n const visualProps = useMemo(() => {\n const state = createSvgRenderState();\n buildSVGAttrs(state, visualState, { enableHardwareAcceleration: false }, isSVGTag(Component), props.transformTemplate);\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\nexport { useSVGProps };\n","import { useMemo, createElement } from 'react';\nimport { useHTMLProps } from '../html/use-props.mjs';\nimport { filterProps } from './utils/filter-props.mjs';\nimport { isSVGComponent } from './utils/is-svg-component.mjs';\nimport { useSVGProps } from '../svg/use-props.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nfunction createUseRender(forwardMotionProps = false) {\n const useRender = (Component, props, ref, { latestValues }, isStatic) => {\n const useVisualProps = isSVGComponent(Component)\n ? useSVGProps\n : useHTMLProps;\n const visualProps = useVisualProps(props, latestValues, isStatic, Component);\n const filteredProps = filterProps(props, typeof Component === \"string\", forwardMotionProps);\n const elementProps = {\n ...filteredProps,\n ...visualProps,\n ref,\n };\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 return useRender;\n}\n\nexport { createUseRender };\n","/**\n * Convert camelCase to dash-case properties.\n */\nconst camelToDash = (str) => str.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n\nexport { camelToDash };\n","function renderHTML(element, { style, vars }, styleProp, projection) {\n Object.assign(element.style, style, projection && projection.getProjectionStyles(styleProp));\n // Loop over any CSS variables and assign those.\n for (const key in vars) {\n element.style.setProperty(key, vars[key]);\n }\n}\n\nexport { renderHTML };\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","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","import { isForcedMotionValue } from '../../../motion/utils/is-forced-motion-value.mjs';\nimport { isMotionValue } from '../../../value/utils/is-motion-value.mjs';\n\nfunction scrapeMotionValuesFromProps(props, prevProps) {\n const { style } = props;\n const newValues = {};\n for (const key in style) {\n if (isMotionValue(style[key]) ||\n (prevProps.style && isMotionValue(prevProps.style[key])) ||\n isForcedMotionValue(key, props)) {\n newValues[key] = style[key];\n }\n }\n return newValues;\n}\n\nexport { scrapeMotionValuesFromProps };\n","import { isMotionValue } from '../../../value/utils/is-motion-value.mjs';\nimport { scrapeMotionValuesFromProps as scrapeMotionValuesFromProps$1 } from '../../html/utils/scrape-motion-values.mjs';\nimport { transformPropOrder } from '../../html/utils/transform.mjs';\n\nfunction scrapeMotionValuesFromProps(props, prevProps) {\n const newValues = scrapeMotionValuesFromProps$1(props, prevProps);\n for (const key in props) {\n if (isMotionValue(props[key]) || 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","function resolveVariantFromProps(props, definition, custom, currentValues = {}, currentVelocity = {}) {\n /**\n * If the variant definition is a function, resolve.\n */\n if (typeof definition === \"function\") {\n definition = definition(custom !== undefined ? custom : props.custom, currentValues, currentVelocity);\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 definition = definition(custom !== undefined ? custom : props.custom, currentValues, currentVelocity);\n }\n return definition;\n}\n\nexport { resolveVariantFromProps };\n","import { useRef } from 'react';\n\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 */\nfunction useConstant(init) {\n const ref = useRef(null);\n if (ref.current === null) {\n ref.current = init();\n }\n return ref.current;\n}\n\nexport { useConstant };\n","const isKeyframesTarget = (v) => {\n return Array.isArray(v);\n};\n\nexport { isKeyframesTarget };\n","import { isKeyframesTarget } from '../animation/utils/is-keyframes-target.mjs';\n\nconst isCustomValue = (v) => {\n return Boolean(v && typeof v === \"object\" && v.mix && v.toValue);\n};\nconst resolveFinalValueInKeyframes = (v) => {\n // TODO maybe throw if v.length - 1 is placeholder token?\n return isKeyframesTarget(v) ? v[v.length - 1] || 0 : v;\n};\n\nexport { isCustomValue, resolveFinalValueInKeyframes };\n","import { isCustomValue } from '../../utils/resolve-value.mjs';\nimport { 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 *\n * TODO: Remove and move to library\n */\nfunction resolveMotionValue(value) {\n const unwrappedValue = isMotionValue(value) ? value.get() : value;\n return isCustomValue(unwrappedValue)\n ? unwrappedValue.toValue()\n : unwrappedValue;\n}\n\nexport { resolveMotionValue };\n","import { useContext } from 'react';\nimport { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\nimport { resolveVariantFromProps } from '../../render/utils/resolve-variants.mjs';\nimport { useConstant } from '../../utils/use-constant.mjs';\nimport { resolveMotionValue } from '../../value/utils/resolve-motion-value.mjs';\nimport { MotionContext } from '../../context/MotionContext/index.mjs';\nimport { isControllingVariants, isVariantNode } from '../../render/utils/is-controlling-variants.mjs';\n\nfunction makeState({ scrapeMotionValuesFromProps, createRenderState, onMount, }, props, context, presenceContext) {\n const state = {\n latestValues: makeLatestValues(props, context, presenceContext, scrapeMotionValuesFromProps),\n renderState: createRenderState(),\n };\n if (onMount) {\n state.mount = (instance) => onMount(props, instance, state);\n }\n return state;\n}\nconst 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};\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$1 = isControllingVariants(props);\n const isVariantNode$1 = isVariantNode(props);\n if (context &&\n isVariantNode$1 &&\n !isControllingVariants$1 &&\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 list.forEach((definition) => {\n const resolved = resolveVariantFromProps(props, definition);\n if (!resolved)\n return;\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 return values;\n}\n\nexport { makeUseVisualState };\n","const noop = (any) => any;\n\nexport { noop };\n","class Queue {\n constructor() {\n this.order = [];\n this.scheduled = new Set();\n }\n add(process) {\n if (!this.scheduled.has(process)) {\n this.scheduled.add(process);\n this.order.push(process);\n return true;\n }\n }\n remove(process) {\n const index = this.order.indexOf(process);\n if (index !== -1) {\n this.order.splice(index, 1);\n this.scheduled.delete(process);\n }\n }\n clear() {\n this.order.length = 0;\n this.scheduled.clear();\n }\n}\nfunction createRenderStep(runNextFrame) {\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 Queue();\n let nextFrame = new Queue();\n let numToRun = 0;\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 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 if (queue.add(callback) && addToCurrentFrame && isProcessing) {\n // If we're adding it to the currently running queue, update its measured size\n numToRun = thisFrame.order.length;\n }\n return callback;\n },\n /**\n * Cancel the provided callback from running on the next frame.\n */\n cancel: (callback) => {\n nextFrame.remove(callback);\n toKeepAlive.delete(callback);\n },\n /**\n * Execute all schedule callbacks.\n */\n process: (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 [thisFrame, nextFrame] = [nextFrame, thisFrame];\n // Clear the next frame queue\n nextFrame.clear();\n // Execute this frame\n numToRun = thisFrame.order.length;\n if (numToRun) {\n for (let i = 0; i < numToRun; i++) {\n const callback = thisFrame.order[i];\n callback(frameData);\n if (toKeepAlive.has(callback)) {\n step.schedule(callback);\n runNextFrame();\n }\n }\n }\n isProcessing = false;\n if (flushNextFrame) {\n flushNextFrame = false;\n step.process(frameData);\n }\n },\n };\n return step;\n}\n\nexport { createRenderStep };\n","import { createRenderStep } from './render-step.mjs';\n\nconst stepsOrder = [\n \"prepare\",\n \"read\",\n \"update\",\n \"preRender\",\n \"render\",\n \"postRender\",\n];\nconst maxElapsed = 40;\nfunction createRenderBatcher(scheduleNextBatch, allowKeepAlive) {\n let runNextFrame = false;\n let useDefaultElapsed = true;\n const state = {\n delta: 0,\n timestamp: 0,\n isProcessing: false,\n };\n const steps = stepsOrder.reduce((acc, key) => {\n acc[key] = createRenderStep(() => (runNextFrame = true));\n return acc;\n }, {});\n const processStep = (stepId) => steps[stepId].process(state);\n const processBatch = () => {\n const timestamp = performance.now();\n runNextFrame = false;\n state.delta = useDefaultElapsed\n ? 1000 / 60\n : Math.max(Math.min(timestamp - state.timestamp, maxElapsed), 1);\n state.timestamp = timestamp;\n state.isProcessing = true;\n stepsOrder.forEach(processStep);\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) => stepsOrder.forEach((key) => steps[key].cancel(process));\n return { schedule, cancel, state, steps };\n}\n\nexport { createRenderBatcher, stepsOrder };\n","import { noop } from '../utils/noop.mjs';\nimport { createRenderBatcher } from './batcher.mjs';\n\nconst { schedule: frame, cancel: cancelFrame, state: frameData, steps, } = createRenderBatcher(typeof requestAnimationFrame !== \"undefined\" ? requestAnimationFrame : noop, true);\n\nexport { cancelFrame, frame, frameData, steps };\n","import { renderSVG } from './utils/render.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\nimport { makeUseVisualState } from '../../motion/utils/use-visual-state.mjs';\nimport { createSvgRenderState } from './utils/create-render-state.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst svgMotionConfig = {\n useVisualState: makeUseVisualState({\n scrapeMotionValuesFromProps: scrapeMotionValuesFromProps,\n createRenderState: createSvgRenderState,\n onMount: (props, instance, { renderState, latestValues }) => {\n frame.read(() => {\n try {\n renderState.dimensions =\n typeof instance.getBBox ===\n \"function\"\n ? instance.getBBox()\n : instance.getBoundingClientRect();\n }\n catch (e) {\n // Most likely trying to measure an unrendered element under Firefox\n renderState.dimensions = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n };\n }\n });\n frame.render(() => {\n buildSVGAttrs(renderState, latestValues, { enableHardwareAcceleration: false }, isSVGTag(instance.tagName), props.transformTemplate);\n renderSVG(instance, renderState);\n });\n },\n }),\n};\n\nexport { svgMotionConfig };\n","import { makeUseVisualState } from '../../motion/utils/use-visual-state.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\nimport { createHtmlRenderState } from './utils/create-render-state.mjs';\n\nconst htmlMotionConfig = {\n useVisualState: makeUseVisualState({\n scrapeMotionValuesFromProps,\n createRenderState: createHtmlRenderState,\n }),\n};\n\nexport { htmlMotionConfig };\n","import { isSVGComponent } from './is-svg-component.mjs';\nimport { createUseRender } from '../use-render.mjs';\nimport { svgMotionConfig } from '../../svg/config-motion.mjs';\nimport { htmlMotionConfig } from '../../html/config-motion.mjs';\n\nfunction createDomMotionConfig(Component, { forwardMotionProps = false }, preloadedFeatures, createVisualElement) {\n const baseConfig = isSVGComponent(Component)\n ? svgMotionConfig\n : htmlMotionConfig;\n return {\n ...baseConfig,\n preloadedFeatures,\n useRender: createUseRender(forwardMotionProps),\n createVisualElement,\n Component,\n };\n}\n\nexport { createDomMotionConfig };\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","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","import { isPrimaryPointer } from './utils/is-primary-pointer.mjs';\n\nfunction extractEventInfo(event, pointType = \"page\") {\n return {\n point: {\n x: event[pointType + \"X\"],\n y: event[pointType + \"Y\"],\n },\n };\n}\nconst addPointerInfo = (handler) => {\n return (event) => isPrimaryPointer(event) && handler(event, extractEventInfo(event));\n};\n\nexport { addPointerInfo, extractEventInfo };\n","import { addDomEvent } from './add-dom-event.mjs';\nimport { addPointerInfo } from './event-info.mjs';\n\nfunction addPointerEvent(target, eventName, handler, options) {\n return addDomEvent(target, eventName, addPointerInfo(handler), options);\n}\n\nexport { addPointerEvent };\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 combineFunctions = (a, b) => (v) => b(a(v));\nconst pipe = (...transformers) => transformers.reduce(combineFunctions);\n\nexport { pipe };\n","function createLock(name) {\n let lock = null;\n return () => {\n const openLock = () => {\n lock = null;\n };\n if (lock === null) {\n lock = name;\n return openLock;\n }\n return false;\n };\n}\nconst globalHorizontalLock = createLock(\"dragHorizontal\");\nconst globalVerticalLock = createLock(\"dragVertical\");\nfunction getGlobalLock(drag) {\n let lock = false;\n if (drag === \"y\") {\n lock = globalVerticalLock();\n }\n else if (drag === \"x\") {\n lock = globalHorizontalLock();\n }\n else {\n const openHorizontal = globalHorizontalLock();\n const openVertical = globalVerticalLock();\n if (openHorizontal && openVertical) {\n lock = () => {\n openHorizontal();\n openVertical();\n };\n }\n else {\n // Release the locks because we don't use them\n if (openHorizontal)\n openHorizontal();\n if (openVertical)\n openVertical();\n }\n }\n return lock;\n}\nfunction isDragActive() {\n // Check the gesture lock - if we get it, it means no drag gesture is active\n // and we can safely fire the tap gesture.\n const openGestureLock = getGlobalLock(true);\n if (!openGestureLock)\n return true;\n openGestureLock();\n return false;\n}\n\nexport { createLock, getGlobalLock, isDragActive };\n","class Feature {\n constructor(node) {\n this.isMounted = false;\n this.node = node;\n }\n update() { }\n}\n\nexport { Feature };\n","import { addPointerEvent } from '../events/add-pointer-event.mjs';\nimport { pipe } from '../utils/pipe.mjs';\nimport { isDragActive } from './drag/utils/lock.mjs';\nimport { Feature } from '../motion/features/Feature.mjs';\nimport { frame } from '../frameloop/frame.mjs';\n\nfunction addHoverEvent(node, isActive) {\n const eventName = \"pointer\" + (isActive ? \"enter\" : \"leave\");\n const callbackName = \"onHover\" + (isActive ? \"Start\" : \"End\");\n const handleEvent = (event, info) => {\n if (event.type === \"touch\" || isDragActive())\n return;\n const props = node.getProps();\n if (node.animationState && props.whileHover) {\n node.animationState.setActive(\"whileHover\", isActive);\n }\n if (props[callbackName]) {\n frame.update(() => props[callbackName](event, info));\n }\n };\n return addPointerEvent(node.current, eventName, handleEvent, {\n passive: !node.getProps()[callbackName],\n });\n}\nclass HoverGesture extends Feature {\n mount() {\n this.unmount = pipe(addHoverEvent(this.node, true), addHoverEvent(this.node, false));\n }\n unmount() { }\n}\n\nexport { HoverGesture };\n","import { addDomEvent } from '../events/add-dom-event.mjs';\nimport { Feature } from '../motion/features/Feature.mjs';\nimport { pipe } from '../utils/pipe.mjs';\n\nclass 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\nexport { FocusGesture };\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","import { extractEventInfo } from '../events/event-info.mjs';\nimport { addDomEvent } from '../events/add-dom-event.mjs';\nimport { addPointerEvent } from '../events/add-pointer-event.mjs';\nimport { Feature } from '../motion/features/Feature.mjs';\nimport { pipe } from '../utils/pipe.mjs';\nimport { isDragActive } from './drag/utils/lock.mjs';\nimport { isNodeOrChild } from './utils/is-node-or-child.mjs';\nimport { noop } from '../utils/noop.mjs';\nimport { frame } from '../frameloop/frame.mjs';\n\nfunction fireSyntheticPointerEvent(name, handler) {\n if (!handler)\n return;\n const syntheticPointerEvent = new PointerEvent(\"pointer\" + name);\n handler(syntheticPointerEvent, extractEventInfo(syntheticPointerEvent));\n}\nclass PressGesture extends Feature {\n constructor() {\n super(...arguments);\n this.removeStartListeners = noop;\n this.removeEndListeners = noop;\n this.removeAccessibleListeners = noop;\n this.startPointerPress = (startEvent, startInfo) => {\n this.removeEndListeners();\n if (this.isPressing)\n return;\n const props = this.node.getProps();\n const endPointerPress = (endEvent, endInfo) => {\n if (!this.checkPressEnd())\n return;\n const { onTap, onTapCancel } = this.node.getProps();\n frame.update(() => {\n /**\n * We only count this as a tap gesture if the event.target is the same\n * as, or a child of, this component's element\n */\n !isNodeOrChild(this.node.current, endEvent.target)\n ? onTapCancel && onTapCancel(endEvent, endInfo)\n : onTap && onTap(endEvent, endInfo);\n });\n };\n const removePointerUpListener = addPointerEvent(window, \"pointerup\", endPointerPress, { passive: !(props.onTap || props[\"onPointerUp\"]) });\n const removePointerCancelListener = addPointerEvent(window, \"pointercancel\", (cancelEvent, cancelInfo) => this.cancelPress(cancelEvent, cancelInfo), { passive: !(props.onTapCancel || props[\"onPointerCancel\"]) });\n this.removeEndListeners = pipe(removePointerUpListener, removePointerCancelListener);\n this.startPress(startEvent, startInfo);\n };\n this.startAccessiblePress = () => {\n const handleKeydown = (keydownEvent) => {\n if (keydownEvent.key !== \"Enter\" || this.isPressing)\n return;\n const handleKeyup = (keyupEvent) => {\n if (keyupEvent.key !== \"Enter\" || !this.checkPressEnd())\n return;\n fireSyntheticPointerEvent(\"up\", (event, info) => {\n const { onTap } = this.node.getProps();\n if (onTap) {\n frame.update(() => onTap(event, info));\n }\n });\n };\n this.removeEndListeners();\n this.removeEndListeners = addDomEvent(this.node.current, \"keyup\", handleKeyup);\n fireSyntheticPointerEvent(\"down\", (event, info) => {\n this.startPress(event, info);\n });\n };\n const removeKeydownListener = addDomEvent(this.node.current, \"keydown\", handleKeydown);\n const handleBlur = () => {\n if (!this.isPressing)\n return;\n fireSyntheticPointerEvent(\"cancel\", (cancelEvent, cancelInfo) => this.cancelPress(cancelEvent, cancelInfo));\n };\n const removeBlurListener = addDomEvent(this.node.current, \"blur\", handleBlur);\n this.removeAccessibleListeners = pipe(removeKeydownListener, removeBlurListener);\n };\n }\n startPress(event, info) {\n this.isPressing = true;\n const { onTapStart, whileTap } = this.node.getProps();\n /**\n * Ensure we trigger animations before firing event callback\n */\n if (whileTap && this.node.animationState) {\n this.node.animationState.setActive(\"whileTap\", true);\n }\n if (onTapStart) {\n frame.update(() => onTapStart(event, info));\n }\n }\n checkPressEnd() {\n this.removeEndListeners();\n this.isPressing = false;\n const props = this.node.getProps();\n if (props.whileTap && this.node.animationState) {\n this.node.animationState.setActive(\"whileTap\", false);\n }\n return !isDragActive();\n }\n cancelPress(event, info) {\n if (!this.checkPressEnd())\n return;\n const { onTapCancel } = this.node.getProps();\n if (onTapCancel) {\n frame.update(() => onTapCancel(event, info));\n }\n }\n mount() {\n const props = this.node.getProps();\n const removePointerListener = addPointerEvent(this.node.current, \"pointerdown\", this.startPointerPress, { passive: !(props.onTapStart || props[\"onPointerStart\"]) });\n const removeFocusListener = addDomEvent(this.node.current, \"focus\", this.startAccessiblePress);\n this.removeStartListeners = pipe(removePointerListener, removeFocusListener);\n }\n unmount() {\n this.removeStartListeners();\n this.removeEndListeners();\n this.removeAccessibleListeners();\n }\n}\n\nexport { PressGesture };\n","/**\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}\nfunction 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\nexport { observeIntersection };\n","import { Feature } from '../Feature.mjs';\nimport { observeIntersection } from './observers.mjs';\n\nconst thresholdNames = {\n some: 0,\n all: 1,\n};\nclass InViewFeature extends Feature {\n constructor() {\n super(...arguments);\n this.hasEnteredView = false;\n this.isInView = false;\n }\n startObserver() {\n this.unmount();\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 return 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}\nfunction hasViewportOptionChanged({ viewport = {} }, { viewport: prevViewport = {} } = {}) {\n return (name) => viewport[name] !== prevViewport[name];\n}\n\nexport { InViewFeature };\n","import { HoverGesture } from '../../gestures/hover.mjs';\nimport { FocusGesture } from '../../gestures/focus.mjs';\nimport { PressGesture } from '../../gestures/press.mjs';\nimport { InViewFeature } from './viewport/index.mjs';\n\nconst 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\nexport { gestureAnimations };\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","import { resolveVariantFromProps } from './resolve-variants.mjs';\n\n/**\n * Creates an object containing the latest state of every MotionValue on a VisualElement\n */\nfunction getCurrent(visualElement) {\n const current = {};\n visualElement.values.forEach((value, key) => (current[key] = value.get()));\n return current;\n}\n/**\n * Creates an object containing the latest velocity of every MotionValue on a VisualElement\n */\nfunction getVelocity(visualElement) {\n const velocity = {};\n visualElement.values.forEach((value, key) => (velocity[key] = value.getVelocity()));\n return velocity;\n}\nfunction resolveVariant(visualElement, definition, custom) {\n const props = visualElement.getProps();\n return resolveVariantFromProps(props, definition, custom !== undefined ? custom : props.custom, getCurrent(visualElement), getVelocity(visualElement));\n}\n\nexport { resolveVariant };\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","import { noop } from './noop.mjs';\n\nlet warning = noop;\nlet invariant = noop;\nif (process.env.NODE_ENV !== \"production\") {\n warning = (check, message) => {\n if (!check && typeof console !== \"undefined\") {\n console.warn(message);\n }\n };\n invariant = (check, message) => {\n if (!check) {\n throw new Error(message);\n }\n };\n}\n\nexport { invariant, warning };\n","/**\n * Converts seconds to milliseconds\n *\n * @param seconds - Time in seconds.\n * @return milliseconds - Converted time in milliseconds.\n */\nconst secondsToMilliseconds = (seconds) => seconds * 1000;\nconst millisecondsToSeconds = (milliseconds) => milliseconds / 1000;\n\nexport { millisecondsToSeconds, secondsToMilliseconds };\n","const instantAnimationState = {\n current: false,\n};\n\nexport { instantAnimationState };\n","const isBezierDefinition = (easing) => Array.isArray(easing) && typeof easing[0] === \"number\";\n\nexport { isBezierDefinition };\n","import { isBezierDefinition } from '../../../easing/utils/is-bezier-definition.mjs';\n\nfunction isWaapiSupportedEasing(easing) {\n return Boolean(!easing ||\n (typeof easing === \"string\" && supportedWaapiEasing[easing]) ||\n isBezierDefinition(easing) ||\n (Array.isArray(easing) && easing.every(isWaapiSupportedEasing)));\n}\nconst cubicBezierAsString = ([a, b, c, d]) => `cubic-bezier(${a}, ${b}, ${c}, ${d})`;\nconst supportedWaapiEasing = {\n linear: \"linear\",\n ease: \"ease\",\n easeIn: \"ease-in\",\n easeOut: \"ease-out\",\n easeInOut: \"ease-in-out\",\n circIn: cubicBezierAsString([0, 0.65, 0.55, 1]),\n circOut: cubicBezierAsString([0.55, 0, 1, 0.45]),\n backIn: cubicBezierAsString([0.31, 0.01, 0.66, -0.59]),\n backOut: cubicBezierAsString([0.33, 1.53, 0.69, 0.99]),\n};\nfunction mapEasingToNativeEasing(easing) {\n if (!easing)\n return undefined;\n return isBezierDefinition(easing)\n ? cubicBezierAsString(easing)\n : Array.isArray(easing)\n ? easing.map(mapEasingToNativeEasing)\n : supportedWaapiEasing[easing];\n}\n\nexport { cubicBezierAsString, isWaapiSupportedEasing, mapEasingToNativeEasing, supportedWaapiEasing };\n","import { mapEasingToNativeEasing } from './easing.mjs';\n\nfunction animateStyle(element, valueName, keyframes, { delay = 0, duration, repeat = 0, repeatType = \"loop\", ease, times, } = {}) {\n const keyframeOptions = { [valueName]: keyframes };\n if (times)\n keyframeOptions.offset = times;\n const easing = mapEasingToNativeEasing(ease);\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 return element.animate(keyframeOptions, {\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}\n\nexport { animateStyle };\n","function getFinalKeyframe(keyframes, { repeat, repeatType = \"loop\" }) {\n const index = repeat && repeatType !== \"loop\" && repeat % 2 === 1\n ? 0\n : keyframes.length - 1;\n return keyframes[index];\n}\n\nexport { getFinalKeyframe };\n","import { noop } from '../utils/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 noticiably 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}\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","import { cubicBezier } from './cubic-bezier.mjs';\n\nconst easeIn = cubicBezier(0.42, 0, 1, 1);\nconst easeOut = cubicBezier(0, 0, 0.58, 1);\nconst easeInOut = cubicBezier(0.42, 0, 0.58, 1);\n\nexport { easeIn, easeInOut, easeOut };\n","const isEasingArray = (ease) => {\n return Array.isArray(ease) && typeof ease[0] !== \"number\";\n};\n\nexport { isEasingArray };\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.\nconst mirrorEasing = (easing) => (p) => p <= 0.5 ? easing(2 * p) / 2 : (2 - easing(2 * (1 - p))) / 2;\n\nexport { mirrorEasing };\n","// Accepts an easing function and returns a new one that outputs reversed values.\n// Turns easeIn into easeOut.\nconst reverseEasing = (easing) => (p) => 1 - easing(1 - p);\n\nexport { reverseEasing };\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(circOut);\n\nexport { circIn, circInOut, circOut };\n","import { cubicBezier } from './cubic-bezier.mjs';\nimport { mirrorEasing } from './modifiers/mirror.mjs';\nimport { reverseEasing } from './modifiers/reverse.mjs';\n\nconst backOut = cubicBezier(0.33, 1.53, 0.69, 0.99);\nconst backIn = reverseEasing(backOut);\nconst backInOut = mirrorEasing(backIn);\n\nexport { backIn, backInOut, backOut };\n","import { backIn } from './back.mjs';\n\nconst anticipate = (p) => (p *= 2) < 1 ? 0.5 * backIn(p) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n\nexport { anticipate };\n","import { invariant } from '../../utils/errors.mjs';\nimport { cubicBezier } from '../cubic-bezier.mjs';\nimport { noop } from '../../utils/noop.mjs';\nimport { easeIn, easeInOut, easeOut } from '../ease.mjs';\nimport { circIn, circInOut, circOut } from '../circ.mjs';\nimport { backIn, backInOut, backOut } from '../back.mjs';\nimport { anticipate } from '../anticipate.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 easingDefinitionToFunction = (definition) => {\n if (Array.isArray(definition)) {\n // If cubic bezier definition, create bezier curve\n invariant(definition.length === 4, `Cubic bezier arrays must contain four numerical values.`);\n const [x1, y1, x2, y2] = definition;\n return cubicBezier(x1, y1, x2, y2);\n }\n else if (typeof definition === \"string\") {\n // Else lookup from table\n invariant(easingLookup[definition] !== undefined, `Invalid easing type '${definition}'`);\n return easingLookup[definition];\n }\n return definition;\n};\n\nexport { easingDefinitionToFunction };\n","import { isString, singleColorRegex, floatRegex } from '../utils.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((isString(v) && singleColorRegex.test(v) && v.startsWith(type)) ||\n (testProp && Object.prototype.hasOwnProperty.call(v, testProp)));\n};\nconst splitColor = (aName, bName, cName) => (v) => {\n if (!isString(v))\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","import { clamp } from '../../../utils/clamp.mjs';\nimport { number, alpha } from '../numbers/index.mjs';\nimport { sanitize } from '../utils.mjs';\nimport { isColorString, splitColor } 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: isColorString(\"rgb\", \"red\"),\n parse: 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","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: isColorString(\"#\"),\n parse: parseHex,\n transform: rgba.transform,\n};\n\nexport { hex };\n","import { alpha } from '../numbers/index.mjs';\nimport { percent } from '../numbers/units.mjs';\nimport { sanitize } from '../utils.mjs';\nimport { isColorString, splitColor } from './utils.mjs';\n\nconst hsla = {\n test: isColorString(\"hsl\", \"hue\"),\n parse: 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","import { isString } from '../utils.mjs';\nimport { 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 isString(v)\n ? v\n : v.hasOwnProperty(\"red\")\n ? rgba.transform(v)\n : hsla.transform(v);\n },\n};\n\nexport { color };\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 mix = (from, to, progress) => -progress * from + progress * to + from;\n\nexport { mix };\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","import { mix } from './mix.mjs';\nimport { invariant } from './errors.mjs';\nimport { hslaToRgba } from './hsla-to-rgba.mjs';\nimport { hex } from '../value/types/color/hex.mjs';\nimport { rgba } from '../value/types/color/rgba.mjs';\nimport { hsla } from '../value/types/color/hsla.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 return Math.sqrt(Math.max(0, v * (to * to - fromExpo) + fromExpo));\n};\nconst colorTypes = [hex, rgba, hsla];\nconst getColorType = (v) => colorTypes.find((type) => type.test(v));\nfunction asRGBA(color) {\n const type = getColorType(color);\n invariant(Boolean(type), `'${color}' is not an animatable color. Use the equivalent color code instead.`);\n let model = type.parse(color);\n if (type === hsla) {\n // TODO Remove this cast - needed since Framer 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 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 = mix(fromRGBA.alpha, toRGBA.alpha, v);\n return rgba.transform(blended);\n };\n};\n\nexport { mixColor, mixLinearColor };\n","import { cssVariableRegex } from '../../../render/dom/utils/is-css-variable.mjs';\nimport { noop } from '../../../utils/noop.mjs';\nimport { color } from '../color/index.mjs';\nimport { number } from '../numbers/index.mjs';\nimport { colorRegex, floatRegex, isString, sanitize } from '../utils.mjs';\n\nfunction test(v) {\n var _a, _b;\n return (isNaN(v) &&\n isString(v) &&\n (((_a = v.match(floatRegex)) === null || _a === void 0 ? void 0 : _a.length) || 0) +\n (((_b = v.match(colorRegex)) === null || _b === void 0 ? void 0 : _b.length) || 0) >\n 0);\n}\nconst cssVarTokeniser = {\n regex: cssVariableRegex,\n countKey: \"Vars\",\n token: \"${v}\",\n parse: noop,\n};\nconst colorTokeniser = {\n regex: colorRegex,\n countKey: \"Colors\",\n token: \"${c}\",\n parse: color.parse,\n};\nconst numberTokeniser = {\n regex: floatRegex,\n countKey: \"Numbers\",\n token: \"${n}\",\n parse: number.parse,\n};\nfunction tokenise(info, { regex, countKey, token, parse }) {\n const matches = info.tokenised.match(regex);\n if (!matches)\n return;\n info[\"num\" + countKey] = matches.length;\n info.tokenised = info.tokenised.replace(regex, token);\n info.values.push(...matches.map(parse));\n}\nfunction analyseComplexValue(value) {\n const originalValue = value.toString();\n const info = {\n value: originalValue,\n tokenised: originalValue,\n values: [],\n numVars: 0,\n numColors: 0,\n numNumbers: 0,\n };\n if (info.value.includes(\"var(--\"))\n tokenise(info, cssVarTokeniser);\n tokenise(info, colorTokeniser);\n tokenise(info, numberTokeniser);\n return info;\n}\nfunction parseComplexValue(v) {\n return analyseComplexValue(v).values;\n}\nfunction createTransformer(source) {\n const { values, numColors, numVars, tokenised } = analyseComplexValue(source);\n const numValues = values.length;\n return (v) => {\n let output = tokenised;\n for (let i = 0; i < numValues; i++) {\n if (i < numVars) {\n output = output.replace(cssVarTokeniser.token, v[i]);\n }\n else if (i < numVars + numColors) {\n output = output.replace(colorTokeniser.token, color.transform(v[i]));\n }\n else {\n output = output.replace(numberTokeniser.token, sanitize(v[i]));\n }\n }\n return output;\n };\n}\nconst convertNumbersToZero = (v) => typeof v === \"number\" ? 0 : v;\nfunction getAnimatableNone(v) {\n const parsed = parseComplexValue(v);\n const transformer = createTransformer(v);\n return transformer(parsed.map(convertNumbersToZero));\n}\nconst complex = {\n test,\n parse: parseComplexValue,\n createTransformer,\n getAnimatableNone,\n};\n\nexport { analyseComplexValue, complex };\n","import { mix } from './mix.mjs';\nimport { mixColor } from './mix-color.mjs';\nimport { pipe } from './pipe.mjs';\nimport { warning } from './errors.mjs';\nimport { color } from '../value/types/color/index.mjs';\nimport { complex, analyseComplexValue } from '../value/types/complex/index.mjs';\n\nconst mixImmediate = (origin, target) => (p) => `${p > 0 ? target : origin}`;\nfunction getMixer(origin, target) {\n if (typeof origin === \"number\") {\n return (v) => mix(origin, target, v);\n }\n else if (color.test(origin)) {\n return mixColor(origin, target);\n }\n else {\n return origin.startsWith(\"var(\")\n ? mixImmediate(origin, target)\n : mixComplex(origin, target);\n }\n}\nconst mixArray = (from, to) => {\n const output = [...from];\n const numValues = output.length;\n const blendValue = from.map((fromThis, i) => getMixer(fromThis, to[i]));\n return (v) => {\n for (let i = 0; i < numValues; i++) {\n output[i] = blendValue[i](v);\n }\n return output;\n };\n};\nconst mixObject = (origin, target) => {\n const output = { ...origin, ...target };\n const blendValue = {};\n for (const key in output) {\n if (origin[key] !== undefined && target[key] !== undefined) {\n blendValue[key] = getMixer(origin[key], target[key]);\n }\n }\n return (v) => {\n for (const key in blendValue) {\n output[key] = blendValue[key](v);\n }\n return output;\n };\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.numVars === targetStats.numVars &&\n originStats.numColors === targetStats.numColors &&\n originStats.numNumbers >= targetStats.numNumbers;\n if (canInterpolate) {\n return pipe(mixArray(originStats.values, 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.`);\n return mixImmediate(origin, target);\n }\n};\n\nexport { mixArray, mixComplex, mixObject };\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 @param [number]: Lower limit\n @param [number]: Upper limit\n @param [number]: Value to find progress within given range\n @return [number]: Progress of value within range as expressed 0-1\n*/\nconst progress = (from, to, value) => {\n const toFromDifference = to - from;\n return toFromDifference === 0 ? 1 : (value - from) / toFromDifference;\n};\n\nexport { progress };\n","import { invariant } from './errors.mjs';\nimport { color } from '../value/types/color/index.mjs';\nimport { clamp } from './clamp.mjs';\nimport { mix } from './mix.mjs';\nimport { mixColor } from './mix-color.mjs';\nimport { mixComplex, mixArray, mixObject } from './mix-complex.mjs';\nimport { pipe } from './pipe.mjs';\nimport { progress } from './progress.mjs';\nimport { noop } from './noop.mjs';\n\nconst mixNumber = (from, to) => (p) => mix(from, to, p);\nfunction detectMixerFactory(v) {\n if (typeof v === \"number\") {\n return mixNumber;\n }\n else if (typeof v === \"string\") {\n return color.test(v) ? mixColor : mixComplex;\n }\n else if (Array.isArray(v)) {\n return mixArray;\n }\n else if (typeof v === \"object\") {\n return mixObject;\n }\n return mixNumber;\n}\nfunction createMixers(output, ease, customMixer) {\n const mixers = [];\n const mixerFactory = customMixer || detectMixerFactory(output[0]);\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 Revist 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\");\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 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 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","import { mix } from '../mix.mjs';\nimport { progress } from '../progress.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(mix(min, 1, offsetProgress));\n }\n}\n\nexport { fillOffset };\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","function convertOffsetToTimes(offset, duration) {\n return offset.map((o) => o * duration);\n}\n\nexport { convertOffsetToTimes };\n","import { easeInOut } from '../../easing/ease.mjs';\nimport { isEasingArray } from '../../easing/utils/is-easing-array.mjs';\nimport { easingDefinitionToFunction } from '../../easing/utils/map.mjs';\nimport { interpolate } from '../../utils/interpolate.mjs';\nimport { defaultOffset } from '../../utils/offsets/default.mjs';\nimport { convertOffsetToTimes } from '../../utils/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","/*\n Convert velocity into velocity per second\n\n @param [number]: Unit per frame\n @param [number]: Frame duration in ms\n*/\nfunction velocityPerSecond(velocity, frameDuration) {\n return frameDuration ? velocity * (1000 / frameDuration) : 0;\n}\n\nexport { velocityPerSecond };\n","import { velocityPerSecond } from '../../../utils/velocity-per-second.mjs';\n\nconst velocitySampleDuration = 5; // ms\nfunction calcGeneratorVelocity(resolveValue, t, current) {\n const prevT = Math.max(t - velocitySampleDuration, 0);\n return velocityPerSecond(current - resolveValue(prevT), t - prevT);\n}\n\nexport { calcGeneratorVelocity };\n","import { warning } from '../../../utils/errors.mjs';\nimport { clamp } from '../../../utils/clamp.mjs';\nimport { secondsToMilliseconds, millisecondsToSeconds } from '../../../utils/time-conversion.mjs';\n\nconst safeMin = 0.001;\nconst minDuration = 0.01;\nconst maxDuration = 10.0;\nconst minDamping = 0.05;\nconst maxDamping = 1;\nfunction findSpring({ duration = 800, bounce = 0.25, velocity = 0, mass = 1, }) {\n let envelope;\n let derivative;\n warning(duration <= secondsToMilliseconds(maxDuration), \"Spring duration must be 10 seconds or less\");\n let dampingRatio = 1 - bounce;\n /**\n * Restrict dampingRatio and duration to within acceptable ranges.\n */\n dampingRatio = clamp(minDamping, maxDamping, dampingRatio);\n duration = clamp(minDuration, 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: 100,\n damping: 10,\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 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}\nfunction calcAngularFreq(undampedFreq, dampingRatio) {\n return undampedFreq * Math.sqrt(1 - dampingRatio * dampingRatio);\n}\n\nexport { calcAngularFreq, findSpring, maxDamping, maxDuration, minDamping, minDuration };\n","import { millisecondsToSeconds } from '../../../utils/time-conversion.mjs';\nimport { calcGeneratorVelocity } from '../utils/velocity.mjs';\nimport { findSpring, calcAngularFreq } from './find.mjs';\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: 0.0,\n stiffness: 100,\n damping: 10,\n mass: 1.0,\n isResolvedFromDuration: false,\n ...options,\n };\n // stiffness/damping/mass overrides duration/bounce\n if (!isSpringType(options, physicsKeys) &&\n isSpringType(options, durationKeys)) {\n const derived = findSpring(options);\n springOptions = {\n ...springOptions,\n ...derived,\n velocity: 0.0,\n mass: 1.0,\n };\n springOptions.isResolvedFromDuration = true;\n }\n return springOptions;\n}\nfunction spring({ keyframes, restDelta, restSpeed, ...options }) {\n const origin = keyframes[0];\n const target = keyframes[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, velocity, duration, isResolvedFromDuration, } = getSpringOptions(options);\n const initialVelocity = velocity ? -millisecondsToSeconds(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 ? 0.01 : 2);\n restDelta || (restDelta = isGranularScale ? 0.005 : 0.5);\n let resolveSpring;\n if (dampingRatio < 1) {\n const angularFreq = calcAngularFreq(undampedAngularFreq, dampingRatio);\n // Underdamped spring\n resolveSpring = (t) => {\n const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n return (target -\n envelope *\n (((initialVelocity +\n dampingRatio * undampedAngularFreq * initialDelta) /\n angularFreq) *\n Math.sin(angularFreq * t) +\n initialDelta * 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 }\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 }\n return {\n calculatedDuration: isResolvedFromDuration ? duration || null : null,\n next: (t) => {\n const current = resolveSpring(t);\n if (!isResolvedFromDuration) {\n let currentVelocity = initialVelocity;\n if (t !== 0) {\n /**\n * We only need to calculate velocity for under-damped springs\n * as over- and critically-damped springs can't overshoot, so\n * checking only for displacement is enough.\n */\n if (dampingRatio < 1) {\n currentVelocity = calcGeneratorVelocity(resolveSpring, t, current);\n }\n else {\n currentVelocity = 0;\n }\n }\n const isBelowVelocityThreshold = Math.abs(currentVelocity) <= restSpeed;\n const isBelowDisplacementThreshold = Math.abs(target - current) <= restDelta;\n state.done =\n isBelowVelocityThreshold && isBelowDisplacementThreshold;\n }\n else {\n state.done = t >= duration;\n }\n state.value = state.done ? target : current;\n return state;\n },\n };\n}\n\nexport { spring };\n","import { spring } from './spring/index.mjs';\nimport { calcGeneratorVelocity } 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: calcGeneratorVelocity(calcLatest, t, state.value),\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","import { frame, cancelFrame, frameData } from '../../../frameloop/frame.mjs';\n\nconst frameloopDriver = (update) => {\n const passTimestamp = ({ timestamp }) => update(timestamp);\n return {\n start: () => frame.update(passTimestamp, true),\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 : performance.now(),\n };\n};\n\nexport { frameloopDriver };\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","import { keyframes } from '../../generators/keyframes.mjs';\nimport { spring } from '../../generators/spring/index.mjs';\nimport { inertia } from '../../generators/inertia.mjs';\nimport { frameloopDriver } from './driver-frameloop.mjs';\nimport { interpolate } from '../../../utils/interpolate.mjs';\nimport { clamp } from '../../../utils/clamp.mjs';\nimport { millisecondsToSeconds, secondsToMilliseconds } from '../../../utils/time-conversion.mjs';\nimport { calcGeneratorDuration } from '../../generators/utils/calc-duration.mjs';\n\nconst types = {\n decay: inertia,\n inertia,\n tween: keyframes,\n keyframes: keyframes,\n spring,\n};\n/**\n * Animate a single value on the main thread.\n *\n * This function is written, where functionality overlaps,\n * to be largely spec-compliant with WAAPI to allow fungibility\n * between the two.\n */\nfunction animateValue({ autoplay = true, delay = 0, driver = frameloopDriver, keyframes: keyframes$1, type = \"keyframes\", repeat = 0, repeatDelay = 0, repeatType = \"loop\", onPlay, onStop, onComplete, onUpdate, ...options }) {\n let speed = 1;\n let hasStopped = false;\n let resolveFinishedPromise;\n let currentFinishedPromise;\n /**\n * Resolve the current Promise every time we enter the\n * finished state. This is WAAPI-compatible behaviour.\n */\n const updateFinishedPromise = () => {\n currentFinishedPromise = new Promise((resolve) => {\n resolveFinishedPromise = resolve;\n });\n };\n // Create the first finished promise\n updateFinishedPromise();\n let animationDriver;\n const generatorFactory = types[type] || keyframes;\n /**\n * If this isn't the keyframes generator and we've been provided\n * strings as keyframes, we need to interpolate these.\n * TODO: Support velocity for units and complex value types/\n */\n let mapNumbersToKeyframes;\n if (generatorFactory !== keyframes &&\n typeof keyframes$1[0] !== \"number\") {\n mapNumbersToKeyframes = interpolate([0, 100], keyframes$1, {\n clamp: false,\n });\n keyframes$1 = [0, 100];\n }\n const generator = generatorFactory({ ...options, keyframes: keyframes$1 });\n let mirroredGenerator;\n if (repeatType === \"mirror\") {\n mirroredGenerator = generatorFactory({\n ...options,\n keyframes: [...keyframes$1].reverse(),\n velocity: -(options.velocity || 0),\n });\n }\n let playState = \"idle\";\n let holdTime = null;\n let startTime = null;\n let cancelTime = null;\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 && repeat) {\n generator.calculatedDuration = calcGeneratorDuration(generator);\n }\n const { calculatedDuration } = generator;\n let resolvedDuration = Infinity;\n let totalDuration = Infinity;\n if (calculatedDuration !== null) {\n resolvedDuration = calculatedDuration + repeatDelay;\n totalDuration = resolvedDuration * (repeat + 1) - repeatDelay;\n }\n let currentTime = 0;\n const tick = (timestamp) => {\n if (startTime === null)\n return;\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 (speed > 0)\n startTime = Math.min(startTime, timestamp);\n if (speed < 0)\n startTime = Math.min(timestamp - totalDuration / speed, startTime);\n if (holdTime !== null) {\n currentTime = 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 currentTime = Math.round(timestamp - startTime) * speed;\n }\n // Rebase on delay\n const timeWithoutDelay = currentTime - delay * (speed >= 0 ? 1 : -1);\n const isInDelayPhase = speed >= 0 ? timeWithoutDelay < 0 : timeWithoutDelay > totalDuration;\n currentTime = Math.max(timeWithoutDelay, 0);\n /**\n * If this animation has finished, set the current time\n * to the total duration.\n */\n if (playState === \"finished\" && holdTime === null) {\n currentTime = totalDuration;\n }\n let elapsed = 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 = currentTime / 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 iterationIsOdd = Boolean(currentIteration % 2);\n if (iterationIsOdd) {\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 let p = clamp(0, 1, iterationProgress);\n if (currentTime > totalDuration) {\n p = repeatType === \"reverse\" && iterationIsOdd ? 1 : 0;\n }\n elapsed = p * 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 const state = isInDelayPhase\n ? { done: false, value: keyframes$1[0] }\n : frameGenerator.next(elapsed);\n if (mapNumbersToKeyframes) {\n state.value = mapNumbersToKeyframes(state.value);\n }\n let { done } = state;\n if (!isInDelayPhase && calculatedDuration !== null) {\n done = speed >= 0 ? currentTime >= totalDuration : currentTime <= 0;\n }\n const isAnimationFinished = holdTime === null &&\n (playState === \"finished\" || (playState === \"running\" && done));\n if (onUpdate) {\n onUpdate(state.value);\n }\n if (isAnimationFinished) {\n finish();\n }\n return state;\n };\n const stopAnimationDriver = () => {\n animationDriver && animationDriver.stop();\n animationDriver = undefined;\n };\n const cancel = () => {\n playState = \"idle\";\n stopAnimationDriver();\n resolveFinishedPromise();\n updateFinishedPromise();\n startTime = cancelTime = null;\n };\n const finish = () => {\n playState = \"finished\";\n onComplete && onComplete();\n stopAnimationDriver();\n resolveFinishedPromise();\n };\n const play = () => {\n if (hasStopped)\n return;\n if (!animationDriver)\n animationDriver = driver(tick);\n const now = animationDriver.now();\n onPlay && onPlay();\n if (holdTime !== null) {\n startTime = now - holdTime;\n }\n else if (!startTime || playState === \"finished\") {\n startTime = now;\n }\n if (playState === \"finished\") {\n updateFinishedPromise();\n }\n cancelTime = startTime;\n holdTime = null;\n /**\n * Set playState to running only after we've used it in\n * the previous logic.\n */\n playState = \"running\";\n animationDriver.start();\n };\n if (autoplay) {\n play();\n }\n const controls = {\n then(resolve, reject) {\n return currentFinishedPromise.then(resolve, reject);\n },\n get time() {\n return millisecondsToSeconds(currentTime);\n },\n set time(newTime) {\n newTime = secondsToMilliseconds(newTime);\n currentTime = newTime;\n if (holdTime !== null || !animationDriver || speed === 0) {\n holdTime = newTime;\n }\n else {\n startTime = animationDriver.now() - newTime / speed;\n }\n },\n get duration() {\n const duration = generator.calculatedDuration === null\n ? calcGeneratorDuration(generator)\n : generator.calculatedDuration;\n return millisecondsToSeconds(duration);\n },\n get speed() {\n return speed;\n },\n set speed(newSpeed) {\n if (newSpeed === speed || !animationDriver)\n return;\n speed = newSpeed;\n controls.time = millisecondsToSeconds(currentTime);\n },\n get state() {\n return playState;\n },\n play,\n pause: () => {\n playState = \"paused\";\n holdTime = currentTime;\n },\n stop: () => {\n hasStopped = true;\n if (playState === \"idle\")\n return;\n playState = \"idle\";\n onStop && onStop();\n cancel();\n },\n cancel: () => {\n if (cancelTime !== null)\n tick(cancelTime);\n cancel();\n },\n complete: () => {\n playState = \"finished\";\n },\n sample: (elapsed) => {\n startTime = 0;\n return tick(elapsed);\n },\n };\n return controls;\n}\n\nexport { animateValue };\n","function memo(callback) {\n let result;\n return () => {\n if (result === undefined)\n result = callback();\n return result;\n };\n}\n\nexport { memo };\n","import { animateStyle } from './index.mjs';\nimport { isWaapiSupportedEasing } from './easing.mjs';\nimport { getFinalKeyframe } from './utils/get-final-keyframe.mjs';\nimport { animateValue } from '../js/index.mjs';\nimport { millisecondsToSeconds, secondsToMilliseconds } from '../../../utils/time-conversion.mjs';\nimport { memo } from '../../../utils/memo.mjs';\nimport { noop } from '../../../utils/noop.mjs';\nimport { frameData, frame, cancelFrame } from '../../../frameloop/frame.mjs';\n\nconst supportsWaapi = memo(() => Object.hasOwnProperty.call(Element.prototype, \"animate\"));\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 \"backgroundColor\",\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\n/**\n * Implement a practical max duration for keyframe generation\n * to prevent infinite loops\n */\nconst maxDuration = 20000;\nconst requiresPregeneratedKeyframes = (valueName, options) => options.type === \"spring\" ||\n valueName === \"backgroundColor\" ||\n !isWaapiSupportedEasing(options.ease);\nfunction createAcceleratedAnimation(value, valueName, { onUpdate, onComplete, ...options }) {\n const canAccelerateAnimation = supportsWaapi() &&\n acceleratedValues.has(valueName) &&\n !options.repeatDelay &&\n options.repeatType !== \"mirror\" &&\n options.damping !== 0 &&\n options.type !== \"inertia\";\n if (!canAccelerateAnimation)\n return false;\n /**\n * TODO: Unify with js/index\n */\n let hasStopped = false;\n let resolveFinishedPromise;\n let currentFinishedPromise;\n /**\n * Resolve the current Promise every time we enter the\n * finished state. This is WAAPI-compatible behaviour.\n */\n const updateFinishedPromise = () => {\n currentFinishedPromise = new Promise((resolve) => {\n resolveFinishedPromise = resolve;\n });\n };\n // Create the first finished promise\n updateFinishedPromise();\n let { keyframes, duration = 300, ease, times } = options;\n /**\n * If this animation needs pre-generated keyframes then generate.\n */\n if (requiresPregeneratedKeyframes(valueName, options)) {\n const sampleAnimation = animateValue({\n ...options,\n repeat: 0,\n delay: 0,\n });\n let state = { done: false, value: keyframes[0] };\n const pregeneratedKeyframes = [];\n /**\n * Bail after 20 seconds of pre-generated keyframes as it's likely\n * we're heading for an infinite loop.\n */\n let t = 0;\n while (!state.done && t < maxDuration) {\n state = sampleAnimation.sample(t);\n pregeneratedKeyframes.push(state.value);\n t += sampleDelta;\n }\n times = undefined;\n keyframes = pregeneratedKeyframes;\n duration = t - sampleDelta;\n ease = \"linear\";\n }\n const animation = animateStyle(value.owner.current, valueName, keyframes, {\n ...options,\n duration,\n /**\n * This function is currently not called if ease is provided\n * as a function so the cast is safe.\n *\n * However it would be possible for a future refinement to port\n * in easing pregeneration from Motion One for browsers that\n * support the upcoming `linear()` easing function.\n */\n ease: ease,\n times,\n });\n /**\n * WAAPI animations don't resolve startTime synchronously. But a blocked\n * thread could delay the startTime resolution by a noticeable amount.\n * For synching handoff animations with the new Motion animation we want\n * to ensure startTime is synchronously set.\n */\n if (options.syncStart) {\n animation.startTime = frameData.isProcessing\n ? frameData.timestamp\n : document.timeline\n ? document.timeline.currentTime\n : performance.now();\n }\n const cancelAnimation = () => animation.cancel();\n const safeCancel = () => {\n frame.update(cancelAnimation);\n resolveFinishedPromise();\n updateFinishedPromise();\n };\n /**\n * Prefer the `onfinish` prop as it's more widely supported than\n * the `finished` promise.\n *\n * Here, we synchronously set the provided MotionValue to the end\n * keyframe. If we didn't, when the WAAPI animation is finished it would\n * be removed from the element which would then revert to its old styles.\n */\n animation.onfinish = () => {\n value.set(getFinalKeyframe(keyframes, options));\n onComplete && onComplete();\n safeCancel();\n };\n /**\n * Animation interrupt callback.\n */\n const controls = {\n then(resolve, reject) {\n return currentFinishedPromise.then(resolve, reject);\n },\n attachTimeline(timeline) {\n animation.timeline = timeline;\n animation.onfinish = null;\n return noop;\n },\n get time() {\n return millisecondsToSeconds(animation.currentTime || 0);\n },\n set time(newTime) {\n animation.currentTime = secondsToMilliseconds(newTime);\n },\n get speed() {\n return animation.playbackRate;\n },\n set speed(newSpeed) {\n animation.playbackRate = newSpeed;\n },\n get duration() {\n return millisecondsToSeconds(duration);\n },\n play: () => {\n if (hasStopped)\n return;\n animation.play();\n /**\n * Cancel any pending cancel tasks\n */\n cancelFrame(cancelAnimation);\n },\n pause: () => animation.pause(),\n stop: () => {\n hasStopped = true;\n if (animation.playState === \"idle\")\n return;\n /**\n * WAAPI doesn't natively have any interruption capabilities.\n *\n * Rather than read commited 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 const { currentTime } = animation;\n if (currentTime) {\n const sampleAnimation = animateValue({\n ...options,\n autoplay: false,\n });\n value.setWithVelocity(sampleAnimation.sample(currentTime - sampleDelta).value, sampleAnimation.sample(currentTime).value, sampleDelta);\n }\n safeCancel();\n },\n complete: () => animation.finish(),\n cancel: safeCancel,\n };\n return controls;\n}\n\nexport { createAcceleratedAnimation };\n","import { animateValue } from './js/index.mjs';\nimport { noop } from '../../utils/noop.mjs';\n\nfunction createInstantAnimation({ keyframes, delay, onUpdate, onComplete, }) {\n const setValue = () => {\n onUpdate && onUpdate(keyframes[keyframes.length - 1]);\n onComplete && onComplete();\n /**\n * TODO: As this API grows it could make sense to always return\n * animateValue. This will be a bigger project as animateValue\n * is frame-locked whereas this function resolves instantly.\n * This is a behavioural change and also has ramifications regarding\n * assumptions within tests.\n */\n return {\n time: 0,\n speed: 1,\n duration: 0,\n play: (noop),\n pause: (noop),\n stop: (noop),\n then: (resolve) => {\n resolve();\n return Promise.resolve();\n },\n cancel: (noop),\n complete: (noop),\n };\n };\n return delay\n ? animateValue({\n keyframes: [0, 1],\n duration: 0,\n delay,\n onComplete: setValue,\n })\n : setValue();\n}\n\nexport { createInstantAnimation };\n","import { transformProps } from '../../render/html/utils/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","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 = (key, value) => {\n // If the list of keys tat might be non-animatable grows, replace with Set\n if (key === \"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","import { complex } from './index.mjs';\nimport { floatRegex } from '../utils.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 = /([a-z-]*)\\(.*?\\)/g;\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","import { color } from '../../../value/types/color/index.mjs';\nimport { filter } from '../../../value/types/complex/filter.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};\n/**\n * Gets the default ValueType for the provided value key\n */\nconst getDefaultValueType = (key) => defaultValueTypes[key];\n\nexport { defaultValueTypes, getDefaultValueType };\n","import { complex } from '../../../value/types/complex/index.mjs';\nimport { filter } from '../../../value/types/complex/filter.mjs';\nimport { getDefaultValueType } from './defaults.mjs';\n\nfunction getAnimatableNone(key, value) {\n let defaultValueType = getDefaultValueType(key);\n if (defaultValueType !== filter)\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","/**\n * Check if the value is a zero value string like \"0px\" or \"0%\"\n */\nconst isZeroValueString = (v) => /^0[^.\\s]+$/.test(v);\n\nexport { isZeroValueString };\n","import { isZeroValueString } from '../../utils/is-zero-value-string.mjs';\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}\n\nexport { isNone };\n","import { getAnimatableNone } from '../../render/dom/value-types/animatable-none.mjs';\nimport { isAnimatable } from './is-animatable.mjs';\nimport { isNone } from './is-none.mjs';\n\nfunction getKeyframes(value, valueName, target, transition) {\n const isTargetAnimatable = isAnimatable(valueName, target);\n let keyframes;\n if (Array.isArray(target)) {\n keyframes = [...target];\n }\n else {\n keyframes = [null, target];\n }\n const defaultOrigin = transition.from !== undefined ? transition.from : value.get();\n let animatableTemplateValue = undefined;\n const noneKeyframeIndexes = [];\n for (let i = 0; i < keyframes.length; i++) {\n /**\n * Fill null/wildcard keyframes\n */\n if (keyframes[i] === null) {\n keyframes[i] = i === 0 ? defaultOrigin : keyframes[i - 1];\n }\n if (isNone(keyframes[i])) {\n noneKeyframeIndexes.push(i);\n }\n // TODO: Clean this conditional, it works for now\n if (typeof keyframes[i] === \"string\" &&\n keyframes[i] !== \"none\" &&\n keyframes[i] !== \"0\") {\n animatableTemplateValue = keyframes[i];\n }\n }\n if (isTargetAnimatable &&\n noneKeyframeIndexes.length &&\n animatableTemplateValue) {\n for (let i = 0; i < noneKeyframeIndexes.length; i++) {\n const index = noneKeyframeIndexes[i];\n keyframes[index] = getAnimatableNone(valueName, animatableTemplateValue);\n }\n }\n return keyframes;\n}\n\nexport { getKeyframes };\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({ when, delay: _delay, delayChildren, staggerChildren, staggerDirection, repeat, repeatType, repeatDelay, from, elapsed, ...transition }) {\n return !!Object.keys(transition).length;\n}\nfunction getValueTransition(transition, key) {\n return transition[key] || transition[\"default\"] || transition;\n}\n\nexport { getValueTransition, isTransitionDefined };\n","import { warning } from '../../utils/errors.mjs';\nimport { secondsToMilliseconds } from '../../utils/time-conversion.mjs';\nimport { instantAnimationState } from '../../utils/use-instant-transition-state.mjs';\nimport { createAcceleratedAnimation } from '../animators/waapi/create-accelerated-animation.mjs';\nimport { createInstantAnimation } from '../animators/instant.mjs';\nimport { getDefaultTransition } from '../utils/default-transitions.mjs';\nimport { isAnimatable } from '../utils/is-animatable.mjs';\nimport { getKeyframes } from '../utils/keyframes.mjs';\nimport { getValueTransition, isTransitionDefined } from '../utils/transitions.mjs';\nimport { animateValue } from '../animators/js/index.mjs';\n\nconst animateMotionValue = (valueName, value, target, transition = {}) => {\n return (onComplete) => {\n const valueTransition = getValueTransition(transition, valueName) || {};\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 keyframes = getKeyframes(value, valueName, target, valueTransition);\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 const targetKeyframe = keyframes[keyframes.length - 1];\n const isOriginAnimatable = isAnimatable(valueName, originKeyframe);\n const isTargetAnimatable = isAnimatable(valueName, targetKeyframe);\n warning(isOriginAnimatable === isTargetAnimatable, `You are trying to animate ${valueName} from \"${originKeyframe}\" to \"${targetKeyframe}\". ${originKeyframe} is not an animatable value - to enable this animation set ${originKeyframe} to a value animatable to ${targetKeyframe} via the \\`style\\` property.`);\n let options = {\n keyframes,\n velocity: value.getVelocity(),\n ease: \"easeOut\",\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 };\n /**\n * If there's no transition defined for this value, we can generate\n * unqiue transition settings for this value.\n */\n if (!isTransitionDefined(valueTransition)) {\n options = {\n ...options,\n ...getDefaultTransition(valueName, options),\n };\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 if (options.duration) {\n options.duration = secondsToMilliseconds(options.duration);\n }\n if (options.repeatDelay) {\n options.repeatDelay = secondsToMilliseconds(options.repeatDelay);\n }\n if (!isOriginAnimatable ||\n !isTargetAnimatable ||\n instantAnimationState.current ||\n valueTransition.type === false) {\n /**\n * If we can't animate this value, or the global instant animation flag is set,\n * or this is simply defined as an instant transition, return an instant transition.\n */\n return createInstantAnimation(instantAnimationState.current\n ? { ...options, delay: 0 }\n : options);\n }\n /**\n * Animate via WAAPI if possible.\n */\n if (value.owner &&\n value.owner.current instanceof HTMLElement &&\n !value.owner.getProps().onUpdate) {\n const acceleratedAnimation = createAcceleratedAnimation(value, valueName, options);\n if (acceleratedAnimation)\n return acceleratedAnimation;\n }\n /**\n * If we didn't create an accelerated animation, create a JS animation\n */\n return animateValue(options);\n };\n};\n\nexport { animateMotionValue };\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","/**\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+$/.test(v);\n\nexport { isNumericalString };\n","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","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","import { SubscriptionManager } from '../utils/subscription-manager.mjs';\nimport { velocityPerSecond } from '../utils/velocity-per-second.mjs';\nimport { warnOnce } from '../utils/warn-once.mjs';\nimport { frame, frameData } from '../frameloop/frame.mjs';\n\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 * @internal\n */\n constructor(init, options = {}) {\n /**\n * This will be replaced by the build step with the latest version number.\n * When MotionValues are provided to motion components, warn if versions are mixed.\n */\n this.version = \"10.16.4\";\n /**\n * Duration, in milliseconds, since last updating frame.\n *\n * @internal\n */\n this.timeDelta = 0;\n /**\n * Timestamp of the last time this `MotionValue` was updated.\n *\n * @internal\n */\n this.lastUpdated = 0;\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 = false;\n /**\n * An object containing a SubscriptionManager for each active event.\n */\n this.events = {};\n this.updateAndNotify = (v, render = true) => {\n this.prev = this.current;\n this.current = v;\n // Update timestamp\n const { delta, timestamp } = frameData;\n if (this.lastUpdated !== timestamp) {\n this.timeDelta = delta;\n this.lastUpdated = timestamp;\n frame.postRender(this.scheduleVelocityCheck);\n }\n // Update update subscribers\n if (this.prev !== this.current && this.events.change) {\n this.events.change.notify(this.current);\n }\n // Update velocity subscribers\n if (this.events.velocityChange) {\n this.events.velocityChange.notify(this.getVelocity());\n }\n // Update render subscribers\n if (render && this.events.renderRequest) {\n this.events.renderRequest.notify(this.current);\n }\n };\n /**\n * Schedule a velocity check for the next frame.\n *\n * This is an instanced and bound function to prevent generating a new\n * function once per frame.\n *\n * @internal\n */\n this.scheduleVelocityCheck = () => frame.postRender(this.velocityCheck);\n /**\n * Updates `prev` with `current` if the value hasn't been updated this frame.\n * This ensures velocity calculations return `0`.\n *\n * This is an instanced and bound function to prevent generating a new\n * function once per frame.\n *\n * @internal\n */\n this.velocityCheck = ({ timestamp }) => {\n if (timestamp !== this.lastUpdated) {\n this.prev = this.current;\n if (this.events.velocityChange) {\n this.events.velocityChange.notify(this.getVelocity());\n }\n }\n };\n this.hasAnimated = false;\n this.prev = this.current = init;\n this.canTrackVelocity = isFloat(this.current);\n this.owner = options.owner;\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 * @internal\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, render = true) {\n if (!render || !this.passiveEffect) {\n this.updateAndNotify(v, render);\n }\n else {\n this.passiveEffect(v, this.updateAndNotify);\n }\n }\n setWithVelocity(prev, current, delta) {\n this.set(current);\n this.prev = prev;\n this.timeDelta = 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) {\n this.updateAndNotify(v);\n this.prev = v;\n this.stop();\n if (this.stopPassiveEffect)\n this.stopPassiveEffect();\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 // This could be isFloat(this.prev) && isFloat(this.current), but that would be wasteful\n return this.canTrackVelocity\n ? // These casts could be avoided if parseFloat would be typed better\n velocityPerSecond(parseFloat(this.current) -\n parseFloat(this.prev), this.timeDelta)\n : 0;\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 * @internal\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.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","/**\n * Tests a provided value against a ValueType\n */\nconst testValueType = (v) => (type) => type.test(v);\n\nexport { testValueType };\n","/**\n * ValueType for \"auto\"\n */\nconst auto = {\n test: (v) => v === \"auto\",\n parse: (v) => v,\n};\n\nexport { auto };\n","import { number } from '../../../value/types/numbers/index.mjs';\nimport { px, percent, degrees, vw, vh } from '../../../value/types/numbers/units.mjs';\nimport { testValueType } from './test.mjs';\nimport { auto } from './type-auto.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","import { color } from '../../../value/types/color/index.mjs';\nimport { complex } from '../../../value/types/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","import { isNumericalString } from '../../utils/is-numerical-string.mjs';\nimport { isZeroValueString } from '../../utils/is-zero-value-string.mjs';\nimport { resolveFinalValueInKeyframes } from '../../utils/resolve-value.mjs';\nimport { motionValue } from '../../value/index.mjs';\nimport { complex } from '../../value/types/complex/index.mjs';\nimport { getAnimatableNone } from '../dom/value-types/animatable-none.mjs';\nimport { findValueType } from '../dom/value-types/find.mjs';\nimport { resolveVariant } from './resolve-dynamic-variants.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 setTarget(visualElement, definition) {\n const resolved = resolveVariant(visualElement, definition);\n let { transitionEnd = {}, transition = {}, ...target } = resolved ? visualElement.makeTargetAnimatable(resolved, false) : {};\n target = { ...target, ...transitionEnd };\n for (const key in target) {\n const value = resolveFinalValueInKeyframes(target[key]);\n setMotionValue(visualElement, key, value);\n }\n}\nfunction setVariants(visualElement, variantLabels) {\n const reversedLabels = [...variantLabels].reverse();\n reversedLabels.forEach((key) => {\n const variant = visualElement.getVariant(key);\n variant && setTarget(visualElement, variant);\n if (visualElement.variantChildren) {\n visualElement.variantChildren.forEach((child) => {\n setVariants(child, variantLabels);\n });\n }\n });\n}\nfunction setValues(visualElement, definition) {\n if (Array.isArray(definition)) {\n return setVariants(visualElement, definition);\n }\n else if (typeof definition === \"string\") {\n return setVariants(visualElement, [definition]);\n }\n else {\n setTarget(visualElement, definition);\n }\n}\nfunction checkTargetForNewValues(visualElement, target, origin) {\n var _a, _b;\n const newValueKeys = Object.keys(target).filter((key) => !visualElement.hasValue(key));\n const numNewValues = newValueKeys.length;\n if (!numNewValues)\n return;\n for (let i = 0; i < numNewValues; i++) {\n const key = newValueKeys[i];\n const targetValue = target[key];\n let value = null;\n /**\n * If the target is a series of keyframes, we can use the first value\n * in the array. If this first value is null, we'll still need to read from the DOM.\n */\n if (Array.isArray(targetValue)) {\n value = targetValue[0];\n }\n /**\n * If the target isn't keyframes, or the first keyframe was null, we need to\n * first check if an origin value was explicitly defined in the transition as \"from\",\n * if not read the value from the DOM. As an absolute fallback, take the defined target value.\n */\n if (value === null) {\n value = (_b = (_a = origin[key]) !== null && _a !== void 0 ? _a : visualElement.readValue(key)) !== null && _b !== void 0 ? _b : target[key];\n }\n /**\n * If value is still undefined or null, ignore it. Preferably this would throw,\n * but this was causing issues in Framer.\n */\n if (value === undefined || value === null)\n continue;\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(targetValue)) {\n value = getAnimatableNone(key, targetValue);\n }\n visualElement.addValue(key, motionValue(value, { owner: visualElement }));\n if (origin[key] === undefined) {\n origin[key] = value;\n }\n if (value !== null)\n visualElement.setBaseTarget(key, value);\n }\n}\nfunction getOriginFromTransition(key, transition) {\n if (!transition)\n return;\n const valueTransition = transition[key] || transition[\"default\"] || transition;\n return valueTransition.from;\n}\nfunction getOrigin(target, transition, visualElement) {\n const origin = {};\n for (const key in target) {\n const transitionOrigin = getOriginFromTransition(key, transition);\n if (transitionOrigin !== undefined) {\n origin[key] = transitionOrigin;\n }\n else {\n const value = visualElement.getValue(key);\n if (value) {\n origin[key] = value.get();\n }\n }\n }\n return origin;\n}\n\nexport { checkTargetForNewValues, getOrigin, getOriginFromTransition, setTarget, setValues };\n","import { transformProps } from '../../render/html/utils/transform.mjs';\nimport { optimizedAppearDataAttribute } from '../optimized-appear/data-id.mjs';\nimport { animateMotionValue } from './motion-value.mjs';\nimport { isWillChangeMotionValue } from '../../value/use-will-change/is.mjs';\nimport { setTarget } from '../../render/utils/setters.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, definition, { delay = 0, transitionOverride, type } = {}) {\n let { transition = visualElement.getDefaultTransition(), transitionEnd, ...target } = visualElement.makeTargetAnimatable(definition);\n const willChange = visualElement.getValue(\"willChange\");\n if (transitionOverride)\n transition = transitionOverride;\n const animations = [];\n const animationTypeState = type &&\n visualElement.animationState &&\n visualElement.animationState.getState()[type];\n for (const key in target) {\n const value = visualElement.getValue(key);\n const valueTarget = target[key];\n if (!value ||\n valueTarget === undefined ||\n (animationTypeState &&\n shouldBlockAnimation(animationTypeState, key))) {\n continue;\n }\n const valueTransition = {\n delay,\n elapsed: 0,\n ...transition,\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 if (window.HandoffAppearAnimations && !value.hasAnimated) {\n const appearId = visualElement.getProps()[optimizedAppearDataAttribute];\n if (appearId) {\n valueTransition.elapsed = window.HandoffAppearAnimations(appearId, key, value, frame);\n valueTransition.syncStart = true;\n }\n }\n value.start(animateMotionValue(key, value, valueTarget, visualElement.shouldReduceMotion && transformProps.has(key)\n ? { type: false }\n : valueTransition));\n const animation = value.animation;\n if (isWillChangeMotionValue(willChange)) {\n willChange.add(key);\n animation.then(() => willChange.remove(key));\n }\n animations.push(animation);\n }\n if (transitionEnd) {\n Promise.all(animations).then(() => {\n transitionEnd && setTarget(visualElement, transitionEnd);\n });\n }\n return animations;\n}\n\nexport { animateTarget };\n","import { resolveVariant } from '../../render/utils/resolve-dynamic-variants.mjs';\nimport { animateTarget } from './visual-element-target.mjs';\n\nfunction animateVariant(visualElement, variant, options = {}) {\n const resolved = resolveVariant(visualElement, variant, options.custom);\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, delayChildren + forwardDelay, 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, delayChildren = 0, staggerChildren = 0, staggerDirection = 1, options) {\n const animations = [];\n const maxStaggerDuration = (visualElement.variantChildren.size - 1) * staggerChildren;\n const generateStaggerDuration = staggerDirection === 1\n ? (i = 0) => i * staggerChildren\n : (i = 0) => maxStaggerDuration - i * staggerChildren;\n Array.from(visualElement.variantChildren)\n .sort(sortByTreeOrder)\n .forEach((child, i) => {\n child.notify(\"AnimationStart\", variant);\n animations.push(animateVariant(child, variant, {\n ...options,\n delay: delayChildren + generateStaggerDuration(i),\n }).then(() => child.notify(\"AnimationComplete\", variant)));\n });\n return Promise.all(animations);\n}\nfunction sortByTreeOrder(a, b) {\n return a.sortNodePosition(b);\n}\n\nexport { animateVariant, sortByTreeOrder };\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(() => visualElement.notify(\"AnimationComplete\", definition));\n}\n\nexport { animateVisualElement };\n","import { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';\nimport { isKeyframesTarget } from '../../animation/utils/is-keyframes-target.mjs';\nimport { shallowCompare } from '../../utils/shallow-compare.mjs';\nimport { isVariantLabel } from './is-variant-label.mjs';\nimport { resolveVariant } from './resolve-dynamic-variants.mjs';\nimport { variantPriorityOrder } from './variant-props.mjs';\nimport { animateVisualElement } from '../../animation/interfaces/visual-element.mjs';\n\nconst reversePriorityOrder = [...variantPriorityOrder].reverse();\nconst numAnimationTypes = variantPriorityOrder.length;\nfunction animateList(visualElement) {\n return (animations) => Promise.all(animations.map(({ animation, options }) => animateVisualElement(visualElement, animation, options)));\n}\nfunction createAnimationState(visualElement) {\n let animate = animateList(visualElement);\n const state = createState();\n let isInitialRender = true;\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 = (acc, definition) => {\n const resolved = resolveVariant(visualElement, definition);\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(options, changedActiveType) {\n const props = visualElement.getProps();\n const context = visualElement.getVariantContext(true) || {};\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 ? props[type] : 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] && prop !== props[type] && propIsVariant;\n /**\n *\n */\n if (isInherited &&\n isInitialRender &&\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 * 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 /**\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, {});\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 removedKeys.delete(key);\n typeState.needsAnimating[key] = true;\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 if (next !== prev) {\n /**\n * If both values are keyframes, we need to shallow compare them to\n * detect whether any value has changed. If it has, we animate it.\n */\n if (isKeyframesTarget(next) && isKeyframesTarget(prev)) {\n if (!shallowCompare(next, prev) || variantDidChange) {\n markToAnimate(key);\n }\n else {\n /**\n * If it hasn't changed, we want to ensure it doesn't animate by\n * adding it to the list of protected keys.\n */\n typeState.protectedKeys[key] = true;\n }\n }\n else if (next !== undefined) {\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 /**\n *\n */\n if (typeState.isActive) {\n encounteredKeys = { ...encounteredKeys, ...resolvedValues };\n }\n if (isInitialRender && visualElement.blockInitialAnimation) {\n shouldAnimateType = false;\n }\n /**\n * If this is an inherited prop we want to hard-block animations\n * TODO: Test as this should probably still handle animations triggered\n * by removed values?\n */\n if (shouldAnimateType && !isInherited) {\n animations.push(...definitionList.map((animation) => ({\n animation: animation,\n options: { type, ...options },\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 removedKeys.forEach((key) => {\n const fallbackTarget = visualElement.getBaseTarget(key);\n if (fallbackTarget !== undefined) {\n fallbackAnimation[key] = fallbackTarget;\n }\n });\n animations.push({ animation: fallbackAnimation });\n }\n let shouldAnimate = Boolean(animations.length);\n if (isInitialRender &&\n props.initial === false &&\n !visualElement.manuallyAnimateOnMount) {\n shouldAnimate = false;\n }\n isInitialRender = 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, options) {\n var _a;\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 (_a = visualElement.variantChildren) === null || _a === void 0 ? void 0 : _a.forEach((child) => { var _a; return (_a = child.animationState) === null || _a === void 0 ? void 0 : _a.setActive(type, isActive); });\n state[type].isActive = isActive;\n const animations = animateChanges(options, 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 };\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","import { isAnimationControls } from '../../../animation/utils/is-animation-controls.mjs';\nimport { createAnimationState } from '../../../render/utils/animation-state.mjs';\nimport { Feature } from '../Feature.mjs';\n\nclass 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 this.unmount();\n if (isAnimationControls(animate)) {\n this.unmount = 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}\n\nexport { AnimationFeature };\n","import { Feature } from '../Feature.mjs';\n\nlet id = 0;\nclass ExitAnimationFeature extends Feature {\n constructor() {\n super(...arguments);\n this.id = id++;\n }\n update() {\n if (!this.node.presenceContext)\n return;\n const { isPresent, onExitComplete, custom } = this.node.presenceContext;\n const { isPresent: prevIsPresent } = this.node.prevPresenceContext || {};\n if (!this.node.animationState || isPresent === prevIsPresent) {\n return;\n }\n const exitAnimation = this.node.animationState.setActive(\"exit\", !isPresent, { custom: custom !== null && custom !== void 0 ? custom : this.node.getProps().custom });\n if (onExitComplete && !isPresent) {\n exitAnimation.then(() => onExitComplete(this.id));\n }\n }\n mount() {\n const { register } = this.node.presenceContext || {};\n if (register) {\n this.unmount = register(this.id);\n }\n }\n unmount() { }\n}\n\nexport { ExitAnimationFeature };\n","import { AnimationFeature } from './animation/index.mjs';\nimport { ExitAnimationFeature } from './animation/exit.mjs';\n\nconst animations = {\n animation: {\n Feature: AnimationFeature,\n },\n exit: {\n Feature: ExitAnimationFeature,\n },\n};\n\nexport { animations };\n","const distance = (a, b) => Math.abs(a - b);\nfunction 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\nexport { distance, distance2D };\n","import { extractEventInfo } from '../../events/event-info.mjs';\nimport { secondsToMilliseconds, millisecondsToSeconds } from '../../utils/time-conversion.mjs';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { pipe } from '../../utils/pipe.mjs';\nimport { distance2D } from '../../utils/distance.mjs';\nimport { isPrimaryPointer } from '../../events/utils/is-primary-pointer.mjs';\nimport { frame, cancelFrame, frameData } from '../../frameloop/frame.mjs';\n\n/**\n * @internal\n */\nclass PanSession {\n constructor(event, handlers, { transformPagePoint } = {}) {\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 * @internal\n */\n this.handlers = {};\n this.updatePoint = () => {\n if (!(this.lastMoveEvent && this.lastMoveEventInfo))\n return;\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 cursoe.\n const isDistancePastThreshold = distance2D(info.offset, { x: 0, y: 0 }) >= 3;\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.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 if (!(this.lastMoveEvent && this.lastMoveEventInfo))\n return;\n const { onEnd, onSessionEnd } = this.handlers;\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.handlers = handlers;\n this.transformPagePoint = transformPagePoint;\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(window, \"pointermove\", this.handlePointerMove), addPointerEvent(window, \"pointerup\", this.handlePointerUp), addPointerEvent(window, \"pointercancel\", this.handlePointerUp));\n }\n updateHandlers(handlers) {\n this.handlers = handlers;\n }\n end() {\n this.removeListeners && this.removeListeners();\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 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\nexport { PanSession };\n","import { mix } from '../../utils/mix.mjs';\n\nfunction calcLength(axis) {\n return axis.max - axis.min;\n}\nfunction isNear(value, target = 0, maxDistance = 0.01) {\n return Math.abs(value - target) <= maxDistance;\n}\nfunction calcAxisDelta(delta, source, target, origin = 0.5) {\n delta.origin = origin;\n delta.originPoint = mix(source.min, source.max, delta.origin);\n delta.scale = calcLength(target) / calcLength(source);\n if (isNear(delta.scale, 1, 0.0001) || isNaN(delta.scale))\n delta.scale = 1;\n delta.translate =\n mix(target.min, target.max, delta.origin) - delta.originPoint;\n if (isNear(delta.translate) || isNaN(delta.translate))\n delta.translate = 0;\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) {\n target.min = parent.min + relative.min;\n target.max = target.min + calcLength(relative);\n}\nfunction calcRelativeBox(target, relative, parent) {\n calcRelativeAxis(target.x, relative.x, parent.x);\n calcRelativeAxis(target.y, relative.y, parent.y);\n}\nfunction calcRelativeAxisPosition(target, layout, parent) {\n target.min = layout.min - parent.min;\n target.max = target.min + calcLength(layout);\n}\nfunction calcRelativePosition(target, layout, parent) {\n calcRelativeAxisPosition(target.x, layout.x, parent.x);\n calcRelativeAxisPosition(target.y, layout.y, parent.y);\n}\n\nexport { calcAxisDelta, calcBoxDelta, calcLength, calcRelativeAxis, calcRelativeAxisPosition, calcRelativeBox, calcRelativePosition, isNear };\n","import { progress } from '../../../utils/progress.mjs';\nimport { calcLength } from '../../../projection/geometry/delta-calc.mjs';\nimport { clamp } from '../../../utils/clamp.mjs';\nimport { mix } from '../../../utils/mix.mjs';\n\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 */\nfunction 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 ? mix(min, point, elastic.min) : 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 ? mix(max, point, elastic.max) : Math.min(point, max);\n }\n return point;\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 */\nfunction 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 */\nfunction 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 */\nfunction 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 [min, max] = [max, min];\n }\n return { min, max };\n}\n/**\n * Calculate viewport constraints when defined as another viewport-relative box\n */\nfunction 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 */\nfunction calcOrigin(source, target) {\n let origin = 0.5;\n const sourceLength = calcLength(source);\n const targetLength = calcLength(target);\n if (targetLength > sourceLength) {\n origin = progress(target.min, target.max - sourceLength, source.min);\n }\n else if (sourceLength > targetLength) {\n origin = progress(source.min, source.max - targetLength, target.min);\n }\n return clamp(0, 1, origin);\n}\n/**\n * Rebase the calculated viewport constraints relative to the layout.min point.\n */\nfunction 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}\nconst defaultElastic = 0.35;\n/**\n * Accepts a dragElastic prop and returns resolved elastic values for each axis.\n */\nfunction 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}\nfunction resolveAxisElastic(dragElastic, minLabel, maxLabel) {\n return {\n min: resolvePointElastic(dragElastic, minLabel),\n max: resolvePointElastic(dragElastic, maxLabel),\n };\n}\nfunction resolvePointElastic(dragElastic, label) {\n return typeof dragElastic === \"number\"\n ? dragElastic\n : dragElastic[label] || 0;\n}\n\nexport { applyConstraints, calcOrigin, calcRelativeAxisConstraints, calcRelativeConstraints, calcViewportAxisConstraints, calcViewportConstraints, defaultElastic, rebaseAxisConstraints, resolveAxisElastic, resolveDragElastic, resolvePointElastic };\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","function eachAxis(callback) {\n return [callback(\"x\"), callback(\"y\")];\n}\n\nexport { eachAxis };\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","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}\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","import { mix } from '../../utils/mix.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}\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 instance = node.instance;\n if (instance &&\n instance.style &&\n instance.style.display === \"contents\") {\n continue;\n }\n if (isSharedTransition &&\n node.options.layoutScroll &&\n node.scroll &&\n node !== node.root) {\n transformBox(box, {\n x: -node.scroll.offset.x,\n y: -node.scroll.offset.y,\n });\n }\n if (delta) {\n // Incoporate each ancestor's scale into a culmulative 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);\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 treeScale.x = snapToDefault(treeScale.x);\n treeScale.y = snapToDefault(treeScale.y);\n}\nfunction snapToDefault(scale) {\n if (Number.isInteger(scale))\n return scale;\n return scale > 1.0000000000001 || scale < 0.999999999999 ? scale : 1;\n}\nfunction translateAxis(axis, distance) {\n axis.min = axis.min + distance;\n axis.max = 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, transforms, [key, scaleKey, originKey]) {\n const axisOrigin = transforms[originKey] !== undefined ? transforms[originKey] : 0.5;\n const originPoint = mix(axis.min, axis.max, axisOrigin);\n // Apply the axis delta to the final axis\n applyAxisDelta(axis, transforms[key], transforms[scaleKey], originPoint, transforms.scale);\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 * Apply a transform to a box from the latest resolved motion values.\n */\nfunction transformBox(box, transform) {\n transformAxis(box.x, transform, xKeys);\n transformAxis(box.y, transform, yKeys);\n}\n\nexport { applyAxisDelta, applyBoxDelta, applyPointDelta, applyTreeDeltas, scalePoint, transformAxis, transformBox, translateAxis };\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","import { invariant } from '../../utils/errors.mjs';\nimport { PanSession } from '../pan/PanSession.mjs';\nimport { getGlobalLock } from './utils/lock.mjs';\nimport { isRefObject } from '../../utils/is-ref-object.mjs';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { applyConstraints, calcRelativeConstraints, resolveDragElastic, calcViewportConstraints, defaultElastic, rebaseAxisConstraints, calcOrigin } from './utils/constraints.mjs';\nimport { createBox } from '../../projection/geometry/models.mjs';\nimport { eachAxis } from '../../projection/utils/each-axis.mjs';\nimport { measurePageBox } from '../../projection/utils/measure.mjs';\nimport { extractEventInfo } from '../../events/event-info.mjs';\nimport { convertBoxToBoundingBox, convertBoundingBoxToBox } from '../../projection/geometry/conversion.mjs';\nimport { addDomEvent } from '../../events/add-dom-event.mjs';\nimport { calcLength } from '../../projection/geometry/delta-calc.mjs';\nimport { mix } from '../../utils/mix.mjs';\nimport { percent } from '../../value/types/numbers/units.mjs';\nimport { animateMotionValue } from '../../animation/interfaces/motion-value.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst elementDragControls = new WeakMap();\n/**\n *\n */\n// let latestPointerEvent: PointerEvent\nclass VisualElementDragControls {\n constructor(visualElement) {\n // This is a reference to the global drag gesture lock, ensuring only one component\n // can \"capture\" the drag of one or both axes.\n // TODO: Look into moving this into pansession?\n this.openGlobalLock = 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 this.visualElement = visualElement;\n }\n start(originEvent, { snapToCursor = false } = {}) {\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 // Stop any animations on both axis values immediately. This allows the user to throw and catch\n // the component.\n this.stopAnimation();\n if (snapToCursor) {\n this.snapToCursor(extractEventInfo(event, \"page\").point);\n }\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.openGlobalLock)\n this.openGlobalLock();\n this.openGlobalLock = getGlobalLock(drag);\n // If we don 't have the lock, don't start dragging\n if (!this.openGlobalLock)\n return;\n }\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\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 const { animationState } = this.visualElement;\n animationState && animationState.setActive(\"whileDrag\", true);\n };\n const onMove = (event, info) => {\n // latestPointerEvent = event\n const { dragPropagation, dragDirectionLock, onDirectionLock, onDrag, } = this.getProps();\n // If we didn't successfully receive the gesture lock, early return.\n if (!dragPropagation && !this.openGlobalLock)\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 onDrag && onDrag(event, info);\n };\n const onSessionEnd = (event, info) => this.stop(event, info);\n this.panSession = new PanSession(originEvent, {\n onSessionStart,\n onStart,\n onMove,\n onSessionEnd,\n }, { transformPagePoint: this.visualElement.getTransformPagePoint() });\n }\n stop(event, info) {\n const isDragging = this.isDragging;\n this.cancel();\n if (!isDragging)\n return;\n const { velocity } = info;\n this.startAnimation(velocity);\n const { onDragEnd } = this.getProps();\n if (onDragEnd) {\n frame.update(() => onDragEnd(event, info));\n }\n }\n cancel() {\n this.isDragging = false;\n const { projection, animationState } = this.visualElement;\n if (projection) {\n projection.isAnimationBlocked = false;\n }\n this.panSession && this.panSession.end();\n this.panSession = undefined;\n const { dragPropagation } = this.getProps();\n if (!dragPropagation && this.openGlobalLock) {\n this.openGlobalLock();\n this.openGlobalLock = null;\n }\n animationState && animationState.setActive(\"whileDrag\", false);\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 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.\n */\n if (prevConstraints !== this.constraints &&\n layout &&\n this.constraints &&\n !this.hasMutatedConstraints) {\n eachAxis((axis) => {\n if (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.\");\n const { projection } = this.visualElement;\n // TODO\n if (!projection || !projection.layout)\n return false;\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)\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 return axisValue.start(animateMotionValue(axis, axisValue, 0, transition));\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, (props.initial ? props.initial[axis] : undefined) || 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 axisValue.set(point[axis] - mix(min, max, 0.5));\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) {\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 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(mix(min, max, boxProgress[axis]));\n });\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 drag && dragListener && this.start(event);\n });\n const measureDragConstraints = () => {\n const { dragConstraints } = this.getProps();\n if (isRefObject(dragConstraints)) {\n this.constraints = this.resolveRefConstraints();\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 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 };\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 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}\n\nexport { VisualElementDragControls, elementDragControls };\n","import { Feature } from '../../motion/features/Feature.mjs';\nimport { noop } from '../../utils/noop.mjs';\nimport { VisualElementDragControls } from './VisualElementDragControls.mjs';\n\nclass 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 unmount() {\n this.removeGroupControls();\n this.removeListeners();\n }\n}\n\nexport { DragGesture };\n","import { PanSession } from './PanSession.mjs';\nimport { addPointerEvent } from '../../events/add-pointer-event.mjs';\nimport { Feature } from '../../motion/features/Feature.mjs';\nimport { noop } from '../../utils/noop.mjs';\nimport { frame } from '../../frameloop/frame.mjs';\n\nconst asyncHandler = (handler) => (event, info) => {\n if (handler) {\n frame.update(() => handler(event, info));\n }\n};\nclass PanGesture extends Feature {\n constructor() {\n super(...arguments);\n this.removePointerDownListener = noop;\n }\n onPointerDown(pointerDownEvent) {\n this.session = new PanSession(pointerDownEvent, this.createPanHandlers(), { transformPagePoint: this.node.getTransformPagePoint() });\n }\n createPanHandlers() {\n const { onPanSessionStart, onPanStart, onPan, onPanEnd } = this.node.getProps();\n return {\n onSessionStart: asyncHandler(onPanSessionStart),\n onStart: asyncHandler(onPanStart),\n onMove: onPan,\n onEnd: (event, info) => {\n delete this.session;\n if (onPanEnd) {\n frame.update(() => 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\nexport { PanGesture };\n","import { useContext, useId, useEffect } from 'react';\nimport { PresenceContext } from '../../context/PresenceContext.mjs';\n\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 the tree, but\n * `AnimatePresence` won't really remove it until `safeToRemove` has been called.\n *\n * @public\n */\nfunction usePresence() {\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(() => register(id), []);\n const safeToRemove = () => onExitComplete && onExitComplete(id);\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 */\nfunction useIsPresent() {\n return isPresent(useContext(PresenceContext));\n}\nfunction isPresent(context) {\n return context === null ? true : context.isPresent;\n}\n\nexport { isPresent, useIsPresent, usePresence };\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","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","import { mix } from '../../utils/mix.mjs';\nimport { complex } from '../../value/types/complex/index.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 = mix(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","import React__default, { useContext } from 'react';\nimport { usePresence } from '../../../components/AnimatePresence/use-presence.mjs';\nimport { LayoutGroupContext } from '../../../context/LayoutGroupContext.mjs';\nimport { SwitchLayoutGroupContext } from '../../../context/SwitchLayoutGroupContext.mjs';\nimport { globalProjectionState } from '../../../projection/node/state.mjs';\nimport { correctBorderRadius } from '../../../projection/styles/scale-border-radius.mjs';\nimport { correctBoxShadow } from '../../../projection/styles/scale-box-shadow.mjs';\nimport { addScaleCorrector } from '../../../projection/styles/scale-correction.mjs';\nimport { frame } from '../../../frameloop/frame.mjs';\n\nclass MeasureLayoutWithContext extends React__default.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 addScaleCorrector(defaultScaleCorrectors);\n if (projection) {\n if (layoutGroup.group)\n layoutGroup.group.add(projection);\n if (switchLayoutGroup && switchLayoutGroup.register && layoutId) {\n switchLayoutGroup.register(projection);\n }\n projection.root.didUpdate();\n projection.addEventListener(\"animationComplete\", () => {\n this.safeToRemove();\n });\n projection.setOptions({\n ...projection.options,\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.projection;\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 (drag ||\n prevProps.layoutDependency !== layoutDependency ||\n layoutDependency === undefined) {\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 { projection } = this.props.visualElement;\n if (projection) {\n projection.root.didUpdate();\n queueMicrotask(() => {\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 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}\nfunction MeasureLayout(props) {\n const [isPresent, safeToRemove] = usePresence();\n const layoutGroup = useContext(LayoutGroupContext);\n return (React__default.createElement(MeasureLayoutWithContext, { ...props, layoutGroup: layoutGroup, switchLayoutGroup: useContext(SwitchLayoutGroupContext), isPresent: isPresent, safeToRemove: safeToRemove }));\n}\nconst defaultScaleCorrectors = {\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};\n\nexport { MeasureLayout };\n","import { circOut } from '../../easing/circ.mjs';\nimport { progress } from '../../utils/progress.mjs';\nimport { mix } from '../../utils/mix.mjs';\nimport { noop } from '../../utils/noop.mjs';\nimport { percent, px } from '../../value/types/numbers/units.mjs';\n\nconst borders = [\"TopLeft\", \"TopRight\", \"BottomLeft\", \"BottomRight\"];\nconst numBorders = borders.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 = mix(0, \n // TODO Reinstate this if only child\n lead.opacity !== undefined ? lead.opacity : 1, easeCrossfadeIn(progress));\n target.opacityExit = mix(follow.opacity !== undefined ? follow.opacity : 1, 0, easeCrossfadeOut(progress));\n }\n else if (isOnlyMember) {\n target.opacity = mix(follow.opacity !== undefined ? follow.opacity : 1, lead.opacity !== undefined ? lead.opacity : 1, progress);\n }\n /**\n * Mix border radius\n */\n for (let i = 0; i < numBorders; i++) {\n const borderLabel = `border${borders[i]}Radius`;\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(mix(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 = mix(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}\n// /**\n// * We only want to mix the background color if there's a follow element\n// * that we're not crossfading opacity between. For instance with switch\n// * AnimateSharedLayout animations, this helps the illusion of a continuous\n// * element being animated but also cuts down on the number of paints triggered\n// * for elements where opacity is doing that work for us.\n// */\n// if (\n// !hasFollowElement &&\n// latestLeadValues.backgroundColor &&\n// latestFollowValues.backgroundColor\n// ) {\n// /**\n// * This isn't ideal performance-wise as mixColor is creating a new function every frame.\n// * We could probably create a mixer that runs at the start of the animation but\n// * the idea behind the crossfader is that it runs dynamically between two potentially\n// * changing targets (ie opacity or borderRadius may be animating independently via variants)\n// */\n// leadState.backgroundColor = followState.backgroundColor = mixColor(\n// latestFollowValues.backgroundColor as string,\n// latestLeadValues.backgroundColor as string\n// )(p)\n// }\nconst easeCrossfadeIn = compress(0, 0.5, circOut);\nconst easeCrossfadeOut = 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","/**\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\nexport { copyAxisInto, copyBoxInto };\n","import { mix } from '../../utils/mix.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 = mix(sourceAxis.min, sourceAxis.max, translate / 100);\n translate = relativeProgress - sourceAxis.min;\n }\n if (typeof translate !== \"number\")\n return;\n let originPoint = mix(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","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 boxEquals(a, b) {\n return (a.x.min === b.x.min &&\n a.x.max === b.x.max &&\n a.y.min === b.y.min &&\n a.y.max === b.y.max);\n}\nfunction boxEqualsRounded(a, b) {\n return (Math.round(a.x.min) === Math.round(b.x.min) &&\n Math.round(a.x.max) === Math.round(b.x.max) &&\n Math.round(a.y.min) === Math.round(b.y.min) &&\n Math.round(a.y.max) === Math.round(b.y.max));\n}\nfunction aspectRatio(box) {\n return calcLength(box.x) / calcLength(box.y);\n}\n\nexport { aspectRatio, boxEquals, boxEqualsRounded, isDeltaZero };\n","import { addUniqueItem, removeItem } from '../../utils/array.mjs';\n\nclass NodeStack {\n constructor() {\n this.members = [];\n }\n add(node) {\n addUniqueItem(this.members, node);\n node.scheduleRender();\n }\n remove(node) {\n removeItem(this.members, node);\n if (node === this.prevLead) {\n this.prevLead = undefined;\n }\n if (node === this.lead) {\n const prevLead = this.members[this.members.length - 1];\n if (prevLead) {\n this.promote(prevLead);\n }\n }\n }\n relegate(node) {\n const indexOfNode = this.members.findIndex((member) => node === member);\n if (indexOfNode === 0)\n return false;\n /**\n * Find the next projection node that is present\n */\n let prevLead;\n for (let i = indexOfNode; i >= 0; i--) {\n const member = this.members[i];\n if (member.isPresent !== false) {\n prevLead = member;\n break;\n }\n }\n if (prevLead) {\n this.promote(prevLead);\n return true;\n }\n else {\n return false;\n }\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.instance && prevLead.scheduleRender();\n node.scheduleRender();\n node.resumeFrom = prevLead;\n if (preserveFollowOpacity) {\n node.resumeFrom.preserveOpacity = true;\n }\n if (prevLead.snapshot) {\n node.snapshot = prevLead.snapshot;\n node.snapshot.latestValues =\n prevLead.animationValues || prevLead.latestValues;\n }\n if (node.root && node.root.isUpdating) {\n node.isLayoutDirty = true;\n }\n const { crossfade } = node.options;\n if (crossfade === false) {\n prevLead.hide();\n }\n /**\n * TODO:\n * - Test border radius when previous node was deleted\n * - boxShadow mixing\n * - Shared between element A in scrolled container and element B (scroll stays the same or changes)\n * - Shared between element A in transformed container and element B (transform stays the same or changes)\n * - Shared between element A in scrolled page and element B (scroll stays the same or changes)\n * ---\n * - Crossfade opacity of root nodes\n * - layoutId changes after animation\n * - layoutId changes mid animation\n */\n }\n }\n exitAnimationComplete() {\n this.members.forEach((node) => {\n const { options, resumingFrom } = node;\n options.onExitComplete && options.onExitComplete();\n if (resumingFrom) {\n resumingFrom.options.onExitComplete &&\n resumingFrom.options.onExitComplete();\n }\n });\n }\n scheduleRender() {\n this.members.forEach((node) => {\n node.instance && node.scheduleRender(false);\n });\n }\n /**\n * Clear any leads that have been removed this render to prevent them from being\n * used in future animations and to prevent memory leaks\n */\n removeLeadSnapshot() {\n if (this.lead && this.lead.snapshot) {\n this.lead.snapshot = undefined;\n }\n }\n}\n\nexport { NodeStack };\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 if (xTranslate || yTranslate) {\n transform = `translate3d(${xTranslate}px, ${yTranslate}px, 0) `;\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 { rotate, rotateX, rotateY } = latestTransform;\n if (rotate)\n transform += `rotate(${rotate}deg) `;\n if (rotateX)\n transform += `rotateX(${rotateX}deg) `;\n if (rotateY)\n transform += `rotateY(${rotateY}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","const compareByDepth = (a, b) => a.depth - b.depth;\n\nexport { compareByDepth };\n","import { addUniqueItem, removeItem } from '../../utils/array.mjs';\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","import { frame, cancelFrame } from '../frameloop/frame.mjs';\n\n/**\n * Timeout defined in ms\n */\nfunction delay(callback, timeout) {\n const start = performance.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.read(checkElapsed, true);\n return () => cancelFrame(checkElapsed);\n}\n\nexport { delay };\n","function record(data) {\n if (window.MotionDebug) {\n window.MotionDebug.record(data);\n }\n}\n\nexport { record };\n","function isSVGElement(element) {\n return element instanceof SVGElement && element.tagName !== \"svg\";\n}\n\nexport { isSVGElement };\n","import { animateMotionValue } from './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","import { SubscriptionManager } from '../../utils/subscription-manager.mjs';\nimport { mixValues } from '../animation/mix-values.mjs';\nimport { copyBoxInto } from '../geometry/copy.mjs';\nimport { translateAxis, transformBox, applyBoxDelta, applyTreeDeltas } from '../geometry/delta-apply.mjs';\nimport { calcRelativePosition, calcRelativeBox, calcBoxDelta, calcLength, isNear } from '../geometry/delta-calc.mjs';\nimport { removeBoxTransforms } from '../geometry/delta-remove.mjs';\nimport { createBox, createDelta } from '../geometry/models.mjs';\nimport { getValueTransition } from '../../animation/utils/transitions.mjs';\nimport { boxEqualsRounded, isDeltaZero, aspectRatio, boxEquals } from '../geometry/utils.mjs';\nimport { NodeStack } from '../shared/stack.mjs';\nimport { scaleCorrectors } from '../styles/scale-correction.mjs';\nimport { buildProjectionTransform } from '../styles/transform.mjs';\nimport { eachAxis } from '../utils/each-axis.mjs';\nimport { hasTransform, hasScale, has2DTranslate } from '../utils/has-transform.mjs';\nimport { FlatTree } from '../../render/utils/flat-tree.mjs';\nimport { resolveMotionValue } from '../../value/utils/resolve-motion-value.mjs';\nimport { globalProjectionState } from './state.mjs';\nimport { delay } from '../../utils/delay.mjs';\nimport { mix } from '../../utils/mix.mjs';\nimport { record } from '../../debug/record.mjs';\nimport { isSVGElement } from '../../render/dom/utils/is-svg-element.mjs';\nimport { animateSingleValue } from '../../animation/interfaces/single-value.mjs';\nimport { clamp } from '../../utils/clamp.mjs';\nimport { cancelFrame, frameData, steps, frame } from '../../frameloop/frame.mjs';\nimport { noop } from '../../utils/noop.mjs';\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;\n/**\n * Use a mutable data object for debug data so as to not create a new\n * object every frame.\n */\nconst projectionFrameData = {\n type: \"projectionFrame\",\n totalNodes: 0,\n resolvedTargetDeltas: 0,\n recalculatedProjection: 0,\n};\nfunction createProjectionNode({ attachResizeListener, defaultParent, measureScroll, checkIsScrollRoot, resetTransform, }) {\n return class ProjectionNode {\n constructor(latestValues = {}, parent = defaultParent === null || defaultParent === void 0 ? void 0 : 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 /**\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 * 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 // Note: Currently only running on root node\n this.updateScheduled = 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 /**\n * Reset debug counts. Manually resetting rather than creating a new\n * object each frame.\n */\n projectionFrameData.totalNodes =\n projectionFrameData.resolvedTargetDeltas =\n projectionFrameData.recalculatedProjection =\n 0;\n this.nodes.forEach(propagateDirtyNodes);\n this.nodes.forEach(resolveTargetDelta);\n this.nodes.forEach(calcProjection);\n this.nodes.forEach(cleanDirtyNodes);\n record(projectionFrameData);\n };\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, isLayoutDirty = this.root.hasTreeAnimated) {\n if (this.instance)\n return;\n this.isSVG = isSVGElement(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 (isLayoutDirty && (layout || layoutId)) {\n this.isLayoutDirty = true;\n }\n if (attachResizeListener) {\n let cancelDelay;\n const resizeUnblockUpdate = () => (this.root.updateBlockedByResize = false);\n attachResizeListener(instance, () => {\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, hasRelativeTargetChanged, 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 targetChanged = !this.targetLayout ||\n !boxEqualsRounded(this.targetLayout, newLayout) ||\n hasRelativeTargetChanged;\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 && hasRelativeTargetChanged;\n if (this.options.layoutRoot ||\n (this.resumeFrom && this.resumeFrom.instance) ||\n hasOnlyRelativeTargetChanged ||\n (hasLayoutChanged &&\n (targetChanged || !this.currentAnimation))) {\n if (this.resumeFrom) {\n this.resumingFrom = this.resumeFrom;\n this.resumingFrom.resumingFrom = undefined;\n }\n this.setAnimationOrigin(delta, hasOnlyRelativeTargetChanged);\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 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 commited 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 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(resetRotation);\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 !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 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 this.unblockUpdate();\n this.clearAllSnapshots();\n this.nodes.forEach(clearMeasurements);\n return;\n }\n if (!this.isUpdating) {\n this.nodes.forEach(clearIsLayoutDirty);\n }\n this.isUpdating = false;\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 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 = performance.now();\n frameData.delta = clamp(0, 1000 / 60, now - frameData.timestamp);\n frameData.timestamp = now;\n frameData.isProcessing = true;\n steps.update.process(frameData);\n steps.preRender.process(frameData);\n steps.render.process(frameData);\n frameData.isProcessing = false;\n }\n didUpdate() {\n if (!this.updateScheduled) {\n this.updateScheduled = true;\n queueMicrotask(() => this.update());\n }\n }\n clearAllSnapshots() {\n this.nodes.forEach(clearSnapshot);\n this.sharedNodes.forEach(removeLeadSnapshots);\n }\n scheduleUpdateProjection() {\n frame.preRender(this.updateProjection, false, true);\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 }\n updateLayout() {\n if (!this.instance)\n return;\n // TODO: Incorporate into a forwarded scroll offset\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.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) {\n this.scroll = {\n animationId: this.root.animationId,\n phase,\n isRoot: checkIsScrollRoot(this.instance),\n offset: measureScroll(this.instance),\n };\n }\n }\n resetTransform() {\n if (!resetTransform)\n return;\n const isResetRequested = this.isLayoutDirty || this.shouldResetTransform;\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 (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 // 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 return box;\n }\n removeElementScroll(box) {\n const boxWithoutScroll = createBox();\n copyBoxInto(boxWithoutScroll, box);\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.isRoot) {\n copyBoxInto(boxWithoutScroll, box);\n const { scroll: rootScroll } = this.root;\n /**\n * Undo the application of page scroll that was originally added\n * to the measured bounding box.\n */\n if (rootScroll) {\n translateAxis(boxWithoutScroll.x, -rootScroll.offset.x);\n translateAxis(boxWithoutScroll.y, -rootScroll.offset.y);\n }\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) {\n const withTransforms = 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 transformBox(withTransforms, {\n x: -node.scroll.offset.x,\n y: -node.scroll.offset.y,\n });\n }\n if (!hasTransform(node.latestValues))\n continue;\n transformBox(withTransforms, node.latestValues);\n }\n if (hasTransform(this.latestValues)) {\n transformBox(withTransforms, this.latestValues);\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 (!node.instance)\n continue;\n if (!hasTransform(node.latestValues))\n continue;\n hasScale(node.latestValues) && node.updateSnapshot();\n const sourceBox = createBox();\n const nodeBox = node.measurePageBox();\n copyBoxInto(sourceBox, nodeBox);\n removeBoxTransforms(boxWithoutTransform, node.latestValues, node.snapshot ? node.snapshot.layoutBox : undefined, 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 var _a;\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 ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.isProjectionDirty) ||\n this.attemptToResolveRelativeTarget);\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 /**\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 // TODO If this is unsuccessful this currently happens every frame\n if (!this.targetDelta && !this.relativeTarget) {\n // TODO: This is a semi-repetition of further down this function, make DRY\n const relativeParent = this.getClosestProjectingParent();\n if (relativeParent &&\n relativeParent.layout &&\n this.animationProgress !== 1) {\n this.relativeParent = relativeParent;\n this.forceRelativeParentToResolveTarget();\n this.relativeTarget = createBox();\n this.relativeTargetOrigin = createBox();\n calcRelativePosition(this.relativeTargetOrigin, this.layout.layoutBox, relativeParent.layout.layoutBox);\n copyBoxInto(this.relativeTarget, this.relativeTargetOrigin);\n }\n else {\n this.relativeParent = this.relativeTarget = undefined;\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);\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 // TODO: This is creating a new object every frame\n this.target = this.applyTransform(this.layout.layoutBox);\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 const relativeParent = this.getClosestProjectingParent();\n if (relativeParent &&\n Boolean(relativeParent.resumingFrom) ===\n Boolean(this.resumingFrom) &&\n !relativeParent.options.layoutScroll &&\n relativeParent.target &&\n this.animationProgress !== 1) {\n this.relativeParent = relativeParent;\n this.forceRelativeParentToResolveTarget();\n this.relativeTarget = createBox();\n this.relativeTargetOrigin = createBox();\n calcRelativePosition(this.relativeTargetOrigin, this.target, relativeParent.target);\n copyBoxInto(this.relativeTarget, this.relativeTargetOrigin);\n }\n else {\n this.relativeParent = this.relativeTarget = undefined;\n }\n }\n /**\n * Increase debug counter for resolved target deltas\n */\n projectionFrameData.resolvedTargetDeltas++;\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 calcProjection() {\n var _a;\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 || ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.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 }\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.projectionTransform) {\n this.projectionDelta = createDelta();\n this.projectionTransform = \"none\";\n this.scheduleRender();\n }\n return;\n }\n if (!this.projectionDelta) {\n this.projectionDelta = createDelta();\n this.projectionDeltaWithTransform = createDelta();\n }\n const prevProjectionTransform = this.projectionTransform;\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 this.projectionTransform = buildProjectionTransform(this.projectionDelta, this.treeScale);\n if (this.projectionTransform !== prevProjectionTransform ||\n this.treeScale.x !== prevTreeScaleX ||\n this.treeScale.y !== prevTreeScaleY) {\n this.hasProjected = true;\n this.scheduleRender();\n this.notifyListeners(\"projectionUpdate\", target);\n }\n /**\n * Increase debug counter for recalculated projections\n */\n projectionFrameData.recalculatedProjection++;\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.scheduleRender && this.options.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 setAnimationOrigin(delta, hasOnlyRelativeTargetChanged = false) {\n const snapshot = this.snapshot;\n const snapshotLatestValues = snapshot\n ? snapshot.latestValues\n : {};\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 this.mixTargetDelta = (latest) => {\n const progress = latest / 1000;\n mixAxisDelta(targetDelta.x, delta.x, progress);\n mixAxisDelta(targetDelta.y, delta.y, progress);\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);\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 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 && this.currentAnimation.stop();\n if (this.resumingFrom && this.resumingFrom.currentAnimation) {\n this.resumingFrom.currentAnimation.stop();\n }\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 this.currentAnimation = animateSingleValue(0, animationTarget, {\n ...options,\n onUpdate: (latest) => {\n this.mixTargetDelta(latest);\n options.onUpdate && options.onUpdate(latest);\n },\n onComplete: () => {\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 var _a;\n const { layoutId } = this.options;\n return layoutId ? ((_a = this.getStack()) === null || _a === void 0 ? void 0 : _a.lead) || this : this;\n }\n getPrevLead() {\n var _a;\n const { layoutId } = this.options;\n return layoutId ? (_a = this.getStack()) === null || _a === void 0 ? void 0 : _a.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 resetRotation() {\n const { visualElement } = this.options;\n if (!visualElement)\n return;\n // If there's no detected rotation values, we can early return without a forced render.\n let hasRotate = 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.rotate ||\n latestValues.rotateX ||\n latestValues.rotateY ||\n latestValues.rotateZ) {\n hasRotate = true;\n }\n // If there's no rotation values, we don't need to do any more.\n if (!hasRotate)\n return;\n const resetValues = {};\n // Check the rotate value of all axes and reset to 0\n for (let i = 0; i < transformAxes.length; i++) {\n const key = \"rotate\" + transformAxes[i];\n // Record the rotation and then temporarily set it to 0\n if (latestValues[key]) {\n resetValues[key] = latestValues[key];\n visualElement.setStaticValue(key, 0);\n }\n }\n // Force a render of this element to apply the transform with all 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 }\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 getProjectionStyles(styleProp = {}) {\n var _a, _b;\n // TODO: Return lifecycle-persistent object\n const styles = {};\n if (!this.instance || this.isSVG)\n return styles;\n if (!this.isVisible) {\n return { visibility: \"hidden\" };\n }\n else {\n styles.visibility = \"\";\n }\n const transformTemplate = this.getTransformTemplate();\n if (this.needsReset) {\n this.needsReset = false;\n styles.opacity = \"\";\n styles.pointerEvents =\n resolveMotionValue(styleProp.pointerEvents) || \"\";\n styles.transform = transformTemplate\n ? transformTemplate(this.latestValues, \"\")\n : \"none\";\n return styles;\n }\n const lead = this.getLead();\n if (!this.projectionDelta || !this.layout || !lead.target) {\n const emptyStyles = {};\n if (this.options.layoutId) {\n emptyStyles.opacity =\n this.latestValues.opacity !== undefined\n ? this.latestValues.opacity\n : 1;\n emptyStyles.pointerEvents =\n resolveMotionValue(styleProp.pointerEvents) || \"\";\n }\n if (this.hasProjected && !hasTransform(this.latestValues)) {\n emptyStyles.transform = transformTemplate\n ? transformTemplate({}, \"\")\n : \"none\";\n this.hasProjected = false;\n }\n return emptyStyles;\n }\n const valuesToRender = lead.animationValues || lead.latestValues;\n this.applyTransformsToTarget();\n styles.transform = buildProjectionTransform(this.projectionDeltaWithTransform, this.treeScale, valuesToRender);\n if (transformTemplate) {\n styles.transform = transformTemplate(valuesToRender, styles.transform);\n }\n const { x, y } = this.projectionDelta;\n styles.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 styles.opacity =\n lead === this\n ? (_b = (_a = valuesToRender.opacity) !== null && _a !== void 0 ? _a : this.latestValues.opacity) !== null && _b !== void 0 ? _b : 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 styles.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 } = 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 = styles.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 styles[applyTo[i]] = corrected;\n }\n }\n else {\n styles[key] = corrected;\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 styles.pointerEvents =\n lead === this\n ? resolveMotionValue(styleProp.pointerEvents) || \"\"\n : \"none\";\n }\n return styles;\n }\n clearSnapshot() {\n this.resumeFrom = this.snapshot = undefined;\n }\n // Only run on root\n resetTree() {\n this.root.nodes.forEach((node) => { var _a; return (_a = node.currentAnimation) === null || _a === void 0 ? void 0 : _a.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 var _a;\n const snapshot = ((_a = node.resumeFrom) === null || _a === void 0 ? void 0 : _a.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 (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 hasRelativeTargetChanged = 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 relativeSnapshot = createBox();\n calcRelativePosition(relativeSnapshot, snapshot.layoutBox, parentSnapshot.layoutBox);\n const relativeLayout = createBox();\n calcRelativePosition(relativeLayout, layout, parentLayout.layoutBox);\n if (!boxEqualsRounded(relativeSnapshot, relativeLayout)) {\n hasRelativeTargetChanged = 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 hasRelativeTargetChanged,\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 projectionFrameData.totalNodes++;\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 clearIsLayoutDirty(node) {\n node.isLayoutDirty = false;\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 resetRotation(node) {\n node.resetRotation();\n}\nfunction removeLeadSnapshots(stack) {\n stack.removeLeadSnapshot();\n}\nfunction mixAxisDelta(output, delta, p) {\n output.translate = mix(delta.translate, 0, p);\n output.scale = mix(delta.scale, 1, p);\n output.origin = delta.origin;\n output.originPoint = delta.originPoint;\n}\nfunction mixAxis(output, from, to, p) {\n output.min = mix(from.min, to.min, p);\n output.max = mix(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.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}\n\nexport { cleanDirtyNodes, createProjectionNode, mixAxis, mixAxisDelta, mixBox, propagateDirtyNodes };\n","import { createProjectionNode } from './create-projection-node.mjs';\nimport { addDomEvent } from '../../events/add-dom-event.mjs';\n\nconst DocumentProjectionNode = createProjectionNode({\n attachResizeListener: (ref, notify) => addDomEvent(ref, \"resize\", notify),\n measureScroll: () => ({\n x: document.documentElement.scrollLeft || document.body.scrollLeft,\n y: document.documentElement.scrollTop || document.body.scrollTop,\n }),\n checkIsScrollRoot: () => true,\n});\n\nexport { DocumentProjectionNode };\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","import { DragGesture } from '../../gestures/drag/index.mjs';\nimport { PanGesture } from '../../gestures/pan/index.mjs';\nimport { MeasureLayout } from './layout/MeasureLayout.mjs';\nimport { HTMLProjectionNode } from '../../projection/node/HTMLProjectionNode.mjs';\n\nconst drag = {\n pan: {\n Feature: PanGesture,\n },\n drag: {\n Feature: DragGesture,\n ProjectionNode: HTMLProjectionNode,\n MeasureLayout,\n },\n};\n\nexport { drag };\n","import { invariant } from '../../../utils/errors.mjs';\nimport { isNumericalString } from '../../../utils/is-numerical-string.mjs';\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 = /var\\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\\)/;\nfunction parseCSSVariable(current) {\n const match = splitCSSVariableRegex.exec(current);\n if (!match)\n return [,];\n const [, token, fallback] = match;\n return [token, 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.`);\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 else if (isCSSVariableToken(fallback)) {\n // The fallback might itself be a CSS variable, in which case we attempt to resolve it too.\n return getVariableValue(fallback, element, depth + 1);\n }\n else {\n return fallback;\n }\n}\n/**\n * Resolve CSS variables from\n *\n * @internal\n */\nfunction resolveCSSVariables(visualElement, { ...target }, transitionEnd) {\n const element = visualElement.current;\n if (!(element instanceof Element))\n return { target, transitionEnd };\n // If `transitionEnd` isn't `undefined`, clone it. We could clone `target` and `transitionEnd`\n // only if they change but I think this reads clearer and this isn't a performance-critical path.\n if (transitionEnd) {\n transitionEnd = { ...transitionEnd };\n }\n // Go through existing `MotionValue`s and ensure any existing CSS variables are resolved\n visualElement.values.forEach((value) => {\n const current = value.get();\n if (!isCSSVariableToken(current))\n return;\n const resolved = getVariableValue(current, element);\n if (resolved)\n value.set(resolved);\n });\n // Cycle through every target property and resolve CSS variables. Currently\n // we only read single-var properties like `var(--foo)`, not `calc(var(--foo) + 20px)`\n for (const key in target) {\n const current = target[key];\n if (!isCSSVariableToken(current))\n continue;\n const resolved = getVariableValue(current, element);\n if (!resolved)\n continue;\n // Clone target if it hasn't already been\n target[key] = resolved;\n if (!transitionEnd)\n transitionEnd = {};\n // If the user hasn't already set this key on `transitionEnd`, set it to the unresolved\n // CSS variable. This will ensure that after the animation the component will reflect\n // changes in the value of the CSS variable.\n if (transitionEnd[key] === undefined) {\n transitionEnd[key] = current;\n }\n }\n return { target, transitionEnd };\n}\n\nexport { parseCSSVariable, resolveCSSVariables };\n","import { isKeyframesTarget } from '../../../animation/utils/is-keyframes-target.mjs';\nimport { invariant } from '../../../utils/errors.mjs';\nimport { transformPropOrder } from '../../html/utils/transform.mjs';\nimport { findDimensionValueType } from '../value-types/dimensions.mjs';\nimport { isBrowser } from '../../../utils/is-browser.mjs';\nimport { number } from '../../../value/types/numbers/index.mjs';\nimport { px } from '../../../value/types/numbers/units.mjs';\n\nconst positionalKeys = new Set([\n \"width\",\n \"height\",\n \"top\",\n \"left\",\n \"right\",\n \"bottom\",\n \"x\",\n \"y\",\n \"translateX\",\n \"translateY\",\n]);\nconst isPositionalKey = (key) => positionalKeys.has(key);\nconst hasPositionalKey = (target) => {\n return Object.keys(target).some(isPositionalKey);\n};\nconst isNumOrPxType = (v) => v === number || v === px;\nconst getPosFromMatrix = (matrix, pos) => parseFloat(matrix.split(\", \")[pos]);\nconst getTranslateFromMatrix = (pos2, pos3) => (_bbox, { transform }) => {\n if (transform === \"none\" || !transform)\n return 0;\n const matrix3d = transform.match(/^matrix3d\\((.+)\\)$/);\n if (matrix3d) {\n return getPosFromMatrix(matrix3d[1], pos3);\n }\n else {\n const matrix = transform.match(/^matrix\\((.+)\\)$/);\n if (matrix) {\n return getPosFromMatrix(matrix[1], pos2);\n }\n else {\n return 0;\n }\n }\n};\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 // Apply changes to element before measurement\n if (removedTransforms.length)\n visualElement.render();\n return removedTransforms;\n}\nconst positionalValues = {\n // Dimensions\n width: ({ x }, { paddingLeft = \"0\", paddingRight = \"0\" }) => x.max - x.min - parseFloat(paddingLeft) - parseFloat(paddingRight),\n height: ({ y }, { paddingTop = \"0\", paddingBottom = \"0\" }) => y.max - y.min - parseFloat(paddingTop) - parseFloat(paddingBottom),\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: getTranslateFromMatrix(4, 13),\n y: getTranslateFromMatrix(5, 14),\n};\n// Alias translate longform names\npositionalValues.translateX = positionalValues.x;\npositionalValues.translateY = positionalValues.y;\nconst convertChangedValueTypes = (target, visualElement, changedKeys) => {\n const originBbox = visualElement.measureViewportBox();\n const element = visualElement.current;\n const elementComputedStyle = getComputedStyle(element);\n const { display } = elementComputedStyle;\n const origin = {};\n // If the element is currently set to display: \"none\", make it visible before\n // measuring the target bounding box\n if (display === \"none\") {\n visualElement.setStaticValue(\"display\", target.display || \"block\");\n }\n /**\n * Record origins before we render and update styles\n */\n changedKeys.forEach((key) => {\n origin[key] = positionalValues[key](originBbox, elementComputedStyle);\n });\n // Apply the latest values (as set in checkAndConvertChangedValueTypes)\n visualElement.render();\n const targetBbox = visualElement.measureViewportBox();\n changedKeys.forEach((key) => {\n // Restore styles to their **calculated computed style**, not their actual\n // originally set style. This allows us to animate between equivalent pixel units.\n const value = visualElement.getValue(key);\n value && value.jump(origin[key]);\n target[key] = positionalValues[key](targetBbox, elementComputedStyle);\n });\n return target;\n};\nconst checkAndConvertChangedValueTypes = (visualElement, target, origin = {}, transitionEnd = {}) => {\n target = { ...target };\n transitionEnd = { ...transitionEnd };\n const targetPositionalKeys = Object.keys(target).filter(isPositionalKey);\n // We want to remove any transform values that could affect the element's bounding box before\n // it's measured. We'll reapply these later.\n let removedTransformValues = [];\n let hasAttemptedToRemoveTransformValues = false;\n const changedValueTypeKeys = [];\n targetPositionalKeys.forEach((key) => {\n const value = visualElement.getValue(key);\n if (!visualElement.hasValue(key))\n return;\n let from = origin[key];\n let fromType = findDimensionValueType(from);\n const to = target[key];\n let toType;\n // TODO: The current implementation of this basically throws an error\n // if you try and do value conversion via keyframes. There's probably\n // a way of doing this but the performance implications would need greater scrutiny,\n // as it'd be doing multiple resize-remeasure operations.\n if (isKeyframesTarget(to)) {\n const numKeyframes = to.length;\n const fromIndex = to[0] === null ? 1 : 0;\n from = to[fromIndex];\n fromType = findDimensionValueType(from);\n for (let i = fromIndex; i < numKeyframes; i++) {\n /**\n * Don't allow wildcard keyframes to be used to detect\n * a difference in value types.\n */\n if (to[i] === null)\n break;\n if (!toType) {\n toType = findDimensionValueType(to[i]);\n invariant(toType === fromType ||\n (isNumOrPxType(fromType) && isNumOrPxType(toType)), \"Keyframes must be of the same dimension as the current value\");\n }\n else {\n invariant(findDimensionValueType(to[i]) === toType, \"All keyframes must be of the same type\");\n }\n }\n }\n else {\n toType = findDimensionValueType(to);\n }\n if (fromType !== toType) {\n // If they're both just number or px, convert them both to numbers rather than\n // relying on resize/remeasure to convert (which is wasteful in this situation)\n if (isNumOrPxType(fromType) && isNumOrPxType(toType)) {\n const current = value.get();\n if (typeof current === \"string\") {\n value.set(parseFloat(current));\n }\n if (typeof to === \"string\") {\n target[key] = parseFloat(to);\n }\n else if (Array.isArray(to) && toType === px) {\n target[key] = to.map(parseFloat);\n }\n }\n else if ((fromType === null || fromType === void 0 ? void 0 : fromType.transform) &&\n (toType === null || toType === void 0 ? void 0 : toType.transform) &&\n (from === 0 || to === 0)) {\n // If one or the other value is 0, it's safe to coerce it to the\n // type of the other without measurement\n if (from === 0) {\n value.set(toType.transform(from));\n }\n else {\n target[key] = fromType.transform(to);\n }\n }\n else {\n // If we're going to do value conversion via DOM measurements, we first\n // need to remove non-positional transform values that could affect the bbox measurements.\n if (!hasAttemptedToRemoveTransformValues) {\n removedTransformValues =\n removeNonTranslationalTransform(visualElement);\n hasAttemptedToRemoveTransformValues = true;\n }\n changedValueTypeKeys.push(key);\n transitionEnd[key] =\n transitionEnd[key] !== undefined\n ? transitionEnd[key]\n : target[key];\n value.jump(to);\n }\n }\n });\n if (changedValueTypeKeys.length) {\n const scrollY = changedValueTypeKeys.indexOf(\"height\") >= 0\n ? window.pageYOffset\n : null;\n const convertedTarget = convertChangedValueTypes(target, visualElement, changedValueTypeKeys);\n // If we removed transform values, reapply them before the next render\n if (removedTransformValues.length) {\n removedTransformValues.forEach(([key, value]) => {\n visualElement.getValue(key).set(value);\n });\n }\n // Reapply original values\n visualElement.render();\n // Restore scroll position\n if (isBrowser && scrollY !== null) {\n window.scrollTo({ top: scrollY });\n }\n return { target: convertedTarget, transitionEnd };\n }\n else {\n return { target, transitionEnd };\n }\n};\n/**\n * Convert value types for x/y/width/height/top/left/bottom/right\n *\n * Allows animation between `'auto'` -> `'100%'` or `0` -> `'calc(50% - 10vw)'`\n *\n * @internal\n */\nfunction unitConversion(visualElement, target, origin, transitionEnd) {\n return hasPositionalKey(target)\n ? checkAndConvertChangedValueTypes(visualElement, target, origin, transitionEnd)\n : { target, transitionEnd };\n}\n\nexport { positionalValues, unitConversion };\n","import { resolveCSSVariables } from './css-variables-conversion.mjs';\nimport { unitConversion } from './unit-conversion.mjs';\n\n/**\n * Parse a DOM variant to make it animatable. This involves resolving CSS variables\n * and ensuring animations like \"20%\" => \"calc(50vw)\" are performed in pixels.\n */\nconst parseDomVariant = (visualElement, target, origin, transitionEnd) => {\n const resolved = resolveCSSVariables(visualElement, target, transitionEnd);\n target = resolved.target;\n transitionEnd = resolved.transitionEnd;\n return unitConversion(visualElement, target, origin, transitionEnd);\n};\n\nexport { parseDomVariant };\n","// Does this device prefer reduced motion? Returns `null` server-side.\nconst prefersReducedMotion = { current: null };\nconst hasReducedMotionListener = { current: false };\n\nexport { hasReducedMotionListener, prefersReducedMotion };\n","import { isBrowser } from '../is-browser.mjs';\nimport { hasReducedMotionListener, prefersReducedMotion } from './state.mjs';\n\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.addListener(setReducedMotionPreferences);\n setReducedMotionPreferences();\n }\n else {\n prefersReducedMotion.current = false;\n }\n}\n\nexport { initPrefersReducedMotion };\n","import { isWillChangeMotionValue } from '../../value/use-will-change/is.mjs';\nimport { warnOnce } from '../../utils/warn-once.mjs';\nimport { motionValue } from '../../value/index.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nfunction updateMotionValuesFromProps(element, next, prev) {\n const { willChange } = next;\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 if (isWillChangeMotionValue(willChange)) {\n willChange.add(key);\n }\n /**\n * Check the version of the incoming motion value with this version\n * and warn against mismatches.\n */\n if (process.env.NODE_ENV === \"development\") {\n warnOnce(nextValue.version === \"10.16.4\", `Attempting to mix Framer Motion versions ${nextValue.version} with 10.16.4 may not work as expected.`);\n }\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 if (isWillChangeMotionValue(willChange)) {\n willChange.remove(key);\n }\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 // TODO: Only update values that aren't being animated or even looked at\n !existingValue.hasAnimated && existingValue.set(nextValue);\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","const visualElementStore = new WeakMap();\n\nexport { visualElementStore };\n","import { warning, invariant } from '../utils/errors.mjs';\nimport { createBox } from '../projection/geometry/models.mjs';\nimport { isRefObject } from '../utils/is-ref-object.mjs';\nimport { initPrefersReducedMotion } from '../utils/reduced-motion/index.mjs';\nimport { hasReducedMotionListener, prefersReducedMotion } from '../utils/reduced-motion/state.mjs';\nimport { SubscriptionManager } from '../utils/subscription-manager.mjs';\nimport { motionValue } from '../value/index.mjs';\nimport { isWillChangeMotionValue } from '../value/use-will-change/is.mjs';\nimport { isMotionValue } from '../value/utils/is-motion-value.mjs';\nimport { transformProps } from './html/utils/transform.mjs';\nimport { isControllingVariants, isVariantNode } from './utils/is-controlling-variants.mjs';\nimport { isVariantLabel } from './utils/is-variant-label.mjs';\nimport { updateMotionValuesFromProps } from './utils/motion-values.mjs';\nimport { resolveVariantFromProps } from './utils/resolve-variants.mjs';\nimport { warnOnce } from '../utils/warn-once.mjs';\nimport { featureDefinitions } from '../motion/features/definitions.mjs';\nimport { variantProps } from './utils/variant-props.mjs';\nimport { visualElementStore } from './store.mjs';\nimport { frame, cancelFrame } from '../frameloop/frame.mjs';\n\nconst featureNames = Object.keys(featureDefinitions);\nconst numFeatures = featureNames.length;\nconst propEventHandlers = [\n \"AnimationStart\",\n \"AnimationComplete\",\n \"Update\",\n \"BeforeLayoutMeasure\",\n \"LayoutMeasure\",\n \"LayoutAnimationStart\",\n \"LayoutAnimationComplete\",\n];\nconst numVariantProps = variantProps.length;\n/**\n * A VisualElement is an imperative abstraction around UI elements such as\n * HTMLElement, SVGElement, Three.Object3D etc.\n */\nclass VisualElement {\n constructor({ parent, props, presenceContext, reducedMotionConfig, 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 * 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 /**\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 * 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.scheduleRender = () => frame.render(this.render, false, true);\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.options = options;\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 neccessarily a breaking change,\n * more a reflection of the test.\n */\n const { willChange, ...initialMotionValues } = this.scrapeMotionValuesFromProps(props, {});\n for (const key in initialMotionValues) {\n const value = initialMotionValues[key];\n if (latestValues[key] !== undefined && isMotionValue(value)) {\n value.set(latestValues[key], false);\n if (isWillChangeMotionValue(willChange)) {\n willChange.add(key);\n }\n }\n }\n }\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) {\n return {};\n }\n mount(instance) {\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 if (!hasReducedMotionListener.current) {\n initPrefersReducedMotion();\n }\n this.shouldReduceMotion =\n this.reducedMotionConfig === \"never\"\n ? false\n : this.reducedMotionConfig === \"always\"\n ? true\n : prefersReducedMotion.current;\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.\");\n }\n if (this.parent)\n this.parent.children.add(this);\n this.update(this.props, this.presenceContext);\n }\n unmount() {\n visualElementStore.delete(this.current);\n this.projection && this.projection.unmount();\n cancelFrame(this.notifyUpdate);\n cancelFrame(this.render);\n this.valueSubscriptions.forEach((remove) => remove());\n this.removeFromVariantTree && this.removeFromVariantTree();\n this.parent && this.parent.children.delete(this);\n for (const key in this.events) {\n this.events[key].clear();\n }\n for (const key in this.features) {\n this.features[key].unmount();\n }\n this.current = null;\n }\n bindToMotionValue(key, value) {\n const valueIsTransform = transformProps.has(key);\n const removeOnChange = value.on(\"change\", (latestValue) => {\n this.latestValues[key] = latestValue;\n this.props.onUpdate &&\n frame.update(this.notifyUpdate, false, true);\n if (valueIsTransform && this.projection) {\n this.projection.isTransformDirty = true;\n }\n });\n const removeOnRenderRequest = value.on(\"renderRequest\", this.scheduleRender);\n this.valueSubscriptions.set(key, () => {\n removeOnChange();\n removeOnRenderRequest();\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 loadFeatures({ children, ...renderedProps }, isStrict, preloadedFeatures, initialLayoutGroupConfig) {\n let ProjectionNodeConstructor;\n let MeasureLayout;\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 renderedProps.ignoreStrict\n ? warning(false, strictMessage)\n : invariant(false, strictMessage);\n }\n for (let i = 0; i < numFeatures; i++) {\n const name = featureNames[i];\n const { isEnabled, Feature: FeatureConstructor, ProjectionNode, MeasureLayout: MeasureLayoutComponent, } = featureDefinitions[name];\n if (ProjectionNode)\n ProjectionNodeConstructor = ProjectionNode;\n if (isEnabled(renderedProps)) {\n if (!this.features[name] && FeatureConstructor) {\n this.features[name] = new FeatureConstructor(this);\n }\n if (MeasureLayoutComponent) {\n MeasureLayout = MeasureLayoutComponent;\n }\n }\n }\n if (!this.projection && ProjectionNodeConstructor) {\n this.projection = new ProjectionNodeConstructor(this.latestValues, this.parent && this.parent.projection);\n const { layoutId, layout, drag, dragConstraints, layoutScroll, layoutRoot, } = renderedProps;\n this.projection.setOptions({\n layoutId,\n layout,\n alwaysMeasureLayout: Boolean(drag) ||\n (dragConstraints && isRefObject(dragConstraints)),\n visualElement: this,\n scheduleRender: () => this.scheduleRender(),\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: initialLayoutGroupConfig,\n layoutScroll,\n layoutRoot,\n });\n }\n return MeasureLayout;\n }\n updateFeatures() {\n for (const key in this.features) {\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 triggerBuild() {\n this.build(this.renderState, this.latestValues, this.options, 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 * Make a target animatable by Popmotion. For instance, if we're\n * trying to animate width from 100px to 100vw we need to measure 100vw\n * in pixels to determine what we really need to animate to. This is also\n * pluggable to support Framer's custom value types like Color,\n * and CSS variables.\n */\n makeTargetAnimatable(target, canMutate = true) {\n return this.makeTargetAnimatableFromInstance(target, this.props, canMutate);\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 listener = props[\"on\" + key];\n if (listener) {\n this.propEventSubscriptions[key] = this.on(key, listener);\n }\n }\n this.prevMotionValues = updateMotionValuesFromProps(this, this.scrapeMotionValuesFromProps(props, this.prevProps), 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 getVariantContext(startAtParent = false) {\n if (startAtParent) {\n return this.parent ? this.parent.getVariantContext() : undefined;\n }\n if (!this.isControllingVariants) {\n const context = this.parent\n ? this.parent.getVariantContext() || {}\n : {};\n if (this.props.initial !== undefined) {\n context.initial = this.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 = this.props[name];\n if (isVariantLabel(prop) || prop === false) {\n context[name] = prop;\n }\n }\n return context;\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 if (value !== this.values.get(key)) {\n this.removeValue(key);\n this.bindToMotionValue(key, value);\n }\n this.values.set(key, value);\n this.latestValues[key] = value.get();\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, { 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) {\n var _a;\n return this.latestValues[key] !== undefined || !this.current\n ? this.latestValues[key]\n : (_a = this.getBaseTargetFromProps(this.props, key)) !== null && _a !== void 0 ? _a : this.readValueFromInstance(this.current, key, this.options);\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 var _a;\n const { initial } = this.props;\n const valueFromInitial = typeof initial === \"string\" || typeof initial === \"object\"\n ? (_a = resolveVariantFromProps(this.props, initial)) === null || _a === void 0 ? void 0 : _a[key]\n : undefined;\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}\n\nexport { VisualElement };\n","import { getOrigin, checkTargetForNewValues } from '../utils/setters.mjs';\nimport { parseDomVariant } from './utils/parse-dom-variant.mjs';\nimport { VisualElement } from '../VisualElement.mjs';\n\nclass DOMVisualElement extends VisualElement {\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 return props.style ? props.style[key] : undefined;\n }\n removeValueFromRenderState(key, { vars, style }) {\n delete vars[key];\n delete style[key];\n }\n makeTargetAnimatableFromInstance({ transition, transitionEnd, ...target }, { transformValues }, isMounted) {\n let origin = getOrigin(target, transition || {}, this);\n /**\n * If Framer has provided a function to convert `Color` etc value types, convert them\n */\n if (transformValues) {\n if (transitionEnd)\n transitionEnd = transformValues(transitionEnd);\n if (target)\n target = transformValues(target);\n if (origin)\n origin = transformValues(origin);\n }\n if (isMounted) {\n checkTargetForNewValues(this, target, origin);\n const parsed = parseDomVariant(this, target, origin, transitionEnd);\n transitionEnd = parsed.transitionEnd;\n target = parsed.target;\n }\n return {\n transition,\n transitionEnd,\n ...target,\n };\n }\n}\n\nexport { DOMVisualElement };\n","import { buildHTMLStyles } from './utils/build-styles.mjs';\nimport { isCSSVariableName } from '../dom/utils/is-css-variable.mjs';\nimport { transformProps } from './utils/transform.mjs';\nimport { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\nimport { renderHTML } from './utils/render.mjs';\nimport { getDefaultValueType } from '../dom/value-types/defaults.mjs';\nimport { measureViewportBox } from '../../projection/utils/measure.mjs';\nimport { DOMVisualElement } from '../dom/DOMVisualElement.mjs';\nimport { isMotionValue } from '../../value/utils/is-motion-value.mjs';\n\nfunction getComputedStyle(element) {\n return window.getComputedStyle(element);\n}\nclass HTMLVisualElement extends DOMVisualElement {\n readValueFromInstance(instance, key) {\n if (transformProps.has(key)) {\n const defaultType = getDefaultValueType(key);\n return defaultType ? defaultType.default || 0 : 0;\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, options, props) {\n buildHTMLStyles(renderState, latestValues, options, props.transformTemplate);\n }\n scrapeMotionValuesFromProps(props, prevProps) {\n return scrapeMotionValuesFromProps(props, prevProps);\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 renderInstance(instance, renderState, styleProp, projection) {\n renderHTML(instance, renderState, styleProp, projection);\n }\n}\n\nexport { HTMLVisualElement, getComputedStyle };\n","import { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';\nimport { DOMVisualElement } from '../dom/DOMVisualElement.mjs';\nimport { buildSVGAttrs } from './utils/build-attrs.mjs';\nimport { camelToDash } from '../dom/utils/camel-to-dash.mjs';\nimport { camelCaseAttributes } from './utils/camel-case-attrs.mjs';\nimport { transformProps } from '../html/utils/transform.mjs';\nimport { renderSVG } from './utils/render.mjs';\nimport { getDefaultValueType } from '../dom/value-types/defaults.mjs';\nimport { createBox } from '../../projection/geometry/models.mjs';\nimport { isSVGTag } from './utils/is-svg-tag.mjs';\n\nclass SVGVisualElement extends DOMVisualElement {\n constructor() {\n super(...arguments);\n this.isSVGTag = false;\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 measureInstanceViewportBox() {\n return createBox();\n }\n scrapeMotionValuesFromProps(props, prevProps) {\n return scrapeMotionValuesFromProps(props, prevProps);\n }\n build(renderState, latestValues, options, props) {\n buildSVGAttrs(renderState, latestValues, options, this.isSVGTag, props.transformTemplate);\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","import { HTMLVisualElement } from '../html/HTMLVisualElement.mjs';\nimport { SVGVisualElement } from '../svg/SVGVisualElement.mjs';\nimport { isSVGComponent } from './utils/is-svg-component.mjs';\n\nconst createDomVisualElement = (Component, options) => {\n return isSVGComponent(Component)\n ? new SVGVisualElement(options, { enableHardwareAcceleration: false })\n : new HTMLVisualElement(options, { enableHardwareAcceleration: true });\n};\n\nexport { createDomVisualElement };\n","import { HTMLProjectionNode } from '../../projection/node/HTMLProjectionNode.mjs';\nimport { MeasureLayout } from './layout/MeasureLayout.mjs';\n\nconst layout = {\n layout: {\n ProjectionNode: HTMLProjectionNode,\n MeasureLayout,\n },\n};\n\nexport { layout };\n","import { createMotionComponent } from '../../motion/index.mjs';\nimport { createMotionProxy } from './motion-proxy.mjs';\nimport { createDomMotionConfig } from './utils/create-config.mjs';\nimport { gestureAnimations } from '../../motion/features/gestures.mjs';\nimport { animations } from '../../motion/features/animations.mjs';\nimport { drag } from '../../motion/features/drag.mjs';\nimport { createDomVisualElement } from './create-visual-element.mjs';\nimport { layout } from '../../motion/features/layout.mjs';\n\nconst preloadedFeatures = {\n ...animations,\n ...gestureAnimations,\n ...drag,\n ...layout,\n};\n/**\n * HTML & SVG components, optimised for use with gestures and animation. These can be used as\n * drop-in replacements for any HTML & SVG component, all CSS & SVG properties are supported.\n *\n * @public\n */\nconst motion = /*@__PURE__*/ createMotionProxy((Component, config) => createDomMotionConfig(Component, config, preloadedFeatures, createDomVisualElement));\n/**\n * Create a DOM `motion` component with the provided string. This is primarily intended\n * as a full alternative to `motion` for consumers who have to support environments that don't\n * support `Proxy`.\n *\n * ```javascript\n * import { createDomMotionComponent } from \"framer-motion\"\n *\n * const motion = {\n * div: createDomMotionComponent('div')\n * }\n * ```\n *\n * @public\n */\nfunction createDomMotionComponent(key) {\n return createMotionComponent(createDomMotionConfig(key, { forwardMotionProps: false }, preloadedFeatures, createDomVisualElement));\n}\n\nexport { createDomMotionComponent, motion };\n","\"use strict\";\n(self[\"webpackChunk_N_E\"] = self[\"webpackChunk_N_E\"] || []).push([[89],{\n\n/***/ 60089:\n/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {\n\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"E\": function() { return /* binding */ motion; }\n});\n\n// UNUSED EXPORTS: createDomMotionComponent\n\n// EXTERNAL MODULE: ./node_modules/react/index.js\nvar react = __webpack_require__(67294);\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/context/MotionConfigContext.mjs\n\n\n/**\n * @public\n */\nconst MotionConfigContext = (0,react.createContext)({\n transformPagePoint: (p) => p,\n isStatic: false,\n reducedMotion: \"never\",\n});\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/context/MotionContext/index.mjs\n\n\nconst MotionContext = (0,react.createContext)({});\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/context/PresenceContext.mjs\n\n\n/**\n * @public\n */\nconst PresenceContext_PresenceContext = (0,react.createContext)(null);\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/is-browser.mjs\nconst isBrowser = typeof document !== \"undefined\";\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.mjs\n\n\n\nconst useIsomorphicLayoutEffect = isBrowser ? react.useLayoutEffect : react.useEffect;\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/context/LazyContext.mjs\n\n\nconst LazyContext = (0,react.createContext)({ strict: false });\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs\n\n\n\n\n\n\n\nfunction useVisualElement(Component, visualState, props, createVisualElement) {\n const { visualElement: parent } = (0,react.useContext)(MotionContext);\n const lazyContext = (0,react.useContext)(LazyContext);\n const presenceContext = (0,react.useContext)(PresenceContext_PresenceContext);\n const reducedMotionConfig = (0,react.useContext)(MotionConfigContext).reducedMotion;\n const visualElementRef = (0,react.useRef)();\n /**\n * If we haven't preloaded a renderer, check to see if we have one lazy-loaded\n */\n createVisualElement = createVisualElement || 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 });\n }\n const visualElement = visualElementRef.current;\n (0,react.useInsertionEffect)(() => {\n visualElement && visualElement.update(props, presenceContext);\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 canHandoff = (0,react.useRef)(Boolean(window.HandoffAppearAnimations));\n useIsomorphicLayoutEffect(() => {\n if (!visualElement)\n return;\n visualElement.render();\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 (canHandoff.current && visualElement.animationState) {\n visualElement.animationState.animateChanges();\n }\n });\n (0,react.useEffect)(() => {\n if (!visualElement)\n return;\n visualElement.updateFeatures();\n if (!canHandoff.current && visualElement.animationState) {\n visualElement.animationState.animateChanges();\n }\n /**\n * Once we've handed off animations we can delete HandoffAppearAnimations\n * so components added after the initial render can animate changes\n * in useEffect vs useLayoutEffect.\n */\n window.HandoffAppearAnimations = undefined;\n canHandoff.current = false;\n });\n return visualElement;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/is-ref-object.mjs\nfunction isRefObject(ref) {\n return (typeof ref === \"object\" &&\n Object.prototype.hasOwnProperty.call(ref, \"current\"));\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.mjs\n\n\n\n/**\n * Creates a ref function that, when called, hydrates the provided\n * external ref and VisualElement.\n */\nfunction useMotionRef(visualState, visualElement, externalRef) {\n return (0,react.useCallback)((instance) => {\n instance && visualState.mount && visualState.mount(instance);\n if (visualElement) {\n instance\n ? visualElement.mount(instance)\n : visualElement.unmount();\n }\n if (externalRef) {\n if (typeof externalRef === \"function\") {\n externalRef(instance);\n }\n else if (isRefObject(externalRef)) {\n externalRef.current = instance;\n }\n }\n }, \n /**\n * Only pass a new ref callback to React if we've received a visual element\n * factory. Otherwise we'll be mounting/remounting every time externalRef\n * or other dependencies change.\n */\n [visualElement]);\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/utils/is-variant-label.mjs\n/**\n * Decides if the supplied variable is variant label\n */\nfunction isVariantLabel(v) {\n return typeof v === \"string\" || Array.isArray(v);\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/utils/is-animation-controls.mjs\nfunction isAnimationControls(v) {\n return typeof v === \"object\" && typeof v.start === \"function\";\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/utils/variant-props.mjs\nconst variantPriorityOrder = [\n \"animate\",\n \"whileInView\",\n \"whileFocus\",\n \"whileHover\",\n \"whileTap\",\n \"whileDrag\",\n \"exit\",\n];\nconst variantProps = [\"initial\", ...variantPriorityOrder];\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/utils/is-controlling-variants.mjs\n\n\n\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/context/MotionContext/utils.mjs\n\n\n\nfunction 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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/context/MotionContext/create.mjs\n\n\n\n\nfunction useCreateMotionContext(props) {\n const { initial, animate } = getCurrentTreeVariants(props, (0,react.useContext)(MotionContext));\n return (0,react.useMemo)(() => ({ initial, animate }), [variantLabelsAsDependency(initial), variantLabelsAsDependency(animate)]);\n}\nfunction variantLabelsAsDependency(prop) {\n return Array.isArray(prop) ? prop.join(\" \") : prop;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/motion/features/definitions.mjs\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};\nconst featureDefinitions = {};\nfor (const key in featureProps) {\n featureDefinitions[key] = {\n isEnabled: (props) => featureProps[key].some((name) => !!props[name]),\n };\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/motion/features/load-features.mjs\n\n\nfunction loadFeatures(features) {\n for (const key in features) {\n featureDefinitions[key] = {\n ...featureDefinitions[key],\n ...features[key],\n };\n }\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/context/LayoutGroupContext.mjs\n\n\nconst LayoutGroupContext = (0,react.createContext)({});\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.mjs\n\n\n/**\n * Internal, exported only for usage in Framer\n */\nconst SwitchLayoutGroupContext = (0,react.createContext)({});\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/motion/utils/symbol.mjs\nconst motionComponentSymbol = Symbol.for(\"motionComponentSymbol\");\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/motion/index.mjs\n\n\n\n\n\n\n\n\n\n\n\n\n\n\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 */\nfunction motion_createMotionComponent({ preloadedFeatures, createVisualElement, useRender, useVisualState, Component, }) {\n preloadedFeatures && loadFeatures(preloadedFeatures);\n function MotionComponent(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 ...(0,react.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 && isBrowser) {\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);\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 = (0,react.useContext)(SwitchLayoutGroupContext);\n const isStrict = (0,react.useContext)(LazyContext).strict;\n if (context.visualElement) {\n MeasureLayout = context.visualElement.loadFeatures(\n // Note: Pass the full new combined props to correctly re-render dynamic feature components.\n configAndProps, isStrict, preloadedFeatures, initialLayoutGroupConfig);\n }\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 (react.createElement(MotionContext.Provider, { value: context },\n MeasureLayout && context.visualElement ? (react.createElement(MeasureLayout, { visualElement: context.visualElement, ...configAndProps })) : null,\n useRender(Component, props, useMotionRef(visualState, context.visualElement, externalRef), visualState, isStatic, context.visualElement)));\n }\n const ForwardRefComponent = (0,react.forwardRef)(MotionComponent);\n ForwardRefComponent[motionComponentSymbol] = Component;\n return ForwardRefComponent;\n}\nfunction useLayoutId({ layoutId }) {\n const layoutGroupId = (0,react.useContext)(LayoutGroupContext).id;\n return layoutGroupId && layoutId !== undefined\n ? layoutGroupId + \"-\" + layoutId\n : layoutId;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/motion-proxy.mjs\n\n\n/**\n * Convert any React component into a `motion` component. The provided component\n * **must** use `React.forwardRef` to the underlying DOM component you want to animate.\n *\n * ```jsx\n * const Component = React.forwardRef((props, ref) => {\n * return
\n * })\n *\n * const MotionComponent = motion(Component)\n * ```\n *\n * @public\n */\nfunction createMotionProxy(createConfig) {\n function custom(Component, customMotionComponentConfig = {}) {\n return motion_createMotionComponent(createConfig(Component, customMotionComponentConfig));\n }\n if (typeof Proxy === \"undefined\") {\n return custom;\n }\n /**\n * A cache of generated `motion` components, e.g `motion.div`, `motion.input` etc.\n * Rather than generating them anew every render.\n */\n const componentCache = new Map();\n return new Proxy(custom, {\n /**\n * Called when `motion` is referenced with a prop: `motion.div`, `motion.input` etc.\n * The prop name is passed through as `key` and we can use that to generate a `motion`\n * DOM component with that name.\n */\n get: (_target, key) => {\n /**\n * If this element doesn't exist in the component cache, create it and cache.\n */\n if (!componentCache.has(key)) {\n componentCache.set(key, custom(key));\n }\n return componentCache.get(key);\n },\n });\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/svg/lowercase-elements.mjs\n/**\n * We keep these listed seperately as we use the lowercase tag names as part\n * of the runtime bundle to detect SVG components\n */\nconst 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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.mjs\n\n\nfunction 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]/.test(Component)) {\n return true;\n }\n return false;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/projection/styles/scale-correction.mjs\nconst scaleCorrectors = {};\nfunction addScaleCorrector(correctors) {\n Object.assign(scaleCorrectors, correctors);\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/html/utils/transform.mjs\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 */\nconst transformProps = new Set(transformPropOrder);\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/motion/utils/is-forced-motion-value.mjs\n\n\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/value/utils/is-motion-value.mjs\nconst isMotionValue = (value) => Boolean(value && value.getVelocity);\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/html/utils/build-transform.mjs\n\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(transform, { enableHardwareAcceleration = true, allowTransformNone = true, }, transformIsDefault, transformTemplate) {\n // The transform string we're going to build into.\n let transformString = \"\";\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 if (transform[key] !== undefined) {\n const transformName = translateAlias[key] || key;\n transformString += `${transformName}(${transform[key]}) `;\n }\n }\n if (enableHardwareAcceleration && !transform.z) {\n transformString += \"translateZ(0)\";\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 (allowTransformNone && transformIsDefault) {\n transformString = \"none\";\n }\n return transformString;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/utils/is-css-variable.mjs\nconst checkStringStartsWith = (token) => (key) => typeof key === \"string\" && key.startsWith(token);\nconst isCSSVariableName = checkStringStartsWith(\"--\");\nconst isCSSVariableToken = checkStringStartsWith(\"var(--\");\nconst cssVariableRegex = /var\\s*\\(\\s*--[\\w-]+(\\s*,\\s*(?:(?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)+)?\\s*\\)/g;\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/value-types/get-as-type.mjs\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/clamp.mjs\nconst clamp = (min, max, v) => Math.min(Math.max(v, min), max);\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/value/types/numbers/index.mjs\n\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/value/types/utils.mjs\n/**\n * TODO: When we move from string as a source of truth to data models\n * everything in this folder should probably be referred to as models vs types\n */\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;\nconst floatRegex = /(-)?([\\d]*\\.?[\\d])+/g;\nconst colorRegex = /(#[0-9a-f]{3,8}|(rgb|hsl)a?\\((-?[\\d\\.]+%?[,\\s]+){2}(-?[\\d\\.]+%?)\\s*[\\,\\/]?\\s*[\\d\\.]*%?\\))/gi;\nconst singleColorRegex = /^(#[0-9a-f]{3,8}|(rgb|hsl)a?\\((-?[\\d\\.]+%?[,\\s]+){2}(-?[\\d\\.]+%?)\\s*[\\,\\/]?\\s*[\\d\\.]*%?\\))$/i;\nfunction isString(v) {\n return typeof v === \"string\";\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/value/types/numbers/units.mjs\n\n\nconst createUnitType = (unit) => ({\n test: (v) => isString(v) && v.endsWith(unit) && v.split(\" \").length === 1,\n parse: parseFloat,\n transform: (v) => `${v}${unit}`,\n});\nconst degrees = createUnitType(\"deg\");\nconst percent = createUnitType(\"%\");\nconst px = createUnitType(\"px\");\nconst vh = createUnitType(\"vh\");\nconst vw = createUnitType(\"vw\");\nconst progressPercentage = {\n ...percent,\n parse: (v) => percent.parse(v) / 100,\n transform: (v) => percent.transform(v * 100),\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/value-types/type-int.mjs\n\n\nconst type_int_int = {\n ...number,\n transform: Math.round,\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/value-types/number.mjs\n\n\n\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 radius: 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 size: px,\n top: px,\n right: px,\n bottom: px,\n left: px,\n // Spacing props\n padding: px,\n paddingTop: px,\n paddingRight: px,\n paddingBottom: px,\n paddingLeft: px,\n margin: px,\n marginTop: px,\n marginRight: px,\n marginBottom: px,\n marginLeft: px,\n // Transform props\n rotate: degrees,\n rotateX: degrees,\n rotateY: degrees,\n rotateZ: degrees,\n scale: 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 // Misc\n zIndex: type_int_int,\n // SVG\n fillOpacity: alpha,\n strokeOpacity: alpha,\n numOctaves: type_int_int,\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/html/utils/build-styles.mjs\n\n\n\n\n\n\nfunction buildHTMLStyles(state, latestValues, options, transformTemplate) {\n const { style, vars, transform, transformOrigin } = state;\n // Track whether we encounter any transform or transformOrigin values.\n let hasTransform = false;\n let hasTransformOrigin = false;\n // Does the calculated transform essentially equal \"none\"?\n let transformIsNone = true;\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 seperately for further processing.\n */\n for (const key in latestValues) {\n const value = latestValues[key];\n /**\n * If this is a CSS variable we don't do any further processing.\n */\n if (isCSSVariableName(key)) {\n vars[key] = value;\n continue;\n }\n // Convert the value to its default value type, ie 0 -> \"0px\"\n const valueType = numberValueTypes[key];\n const valueAsType = getValueAsType(value, valueType);\n if (transformProps.has(key)) {\n // If this is a transform, flag to enable further transform processing\n hasTransform = true;\n transform[key] = valueAsType;\n // If we already know we have a non-default transform, early return\n if (!transformIsNone)\n continue;\n // Otherwise check to see if this is a default transform\n if (value !== (valueType.default || 0))\n transformIsNone = false;\n }\n else if (key.startsWith(\"origin\")) {\n // If this is a transform origin, flag and enable further transform-origin processing\n hasTransformOrigin = true;\n transformOrigin[key] = valueAsType;\n }\n else {\n style[key] = valueAsType;\n }\n }\n if (!latestValues.transform) {\n if (hasTransform || transformTemplate) {\n style.transform = buildTransform(state.transform, options, transformIsNone, 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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/html/utils/create-render-state.mjs\nconst createHtmlRenderState = () => ({\n style: {},\n transform: {},\n transformOrigin: {},\n vars: {},\n});\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/html/use-props.mjs\n\n\n\n\n\n\nfunction 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, isStatic) {\n return (0,react.useMemo)(() => {\n const state = createHtmlRenderState();\n buildHTMLStyles(state, visualState, { enableHardwareAcceleration: !isStatic }, transformTemplate);\n return Object.assign({}, state.vars, state.style);\n }, [visualState]);\n}\nfunction useStyle(props, visualState, isStatic) {\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, isStatic));\n return props.transformValues ? props.transformValues(style) : style;\n}\nfunction useHTMLProps(props, visualState, isStatic) {\n // The `any` isn't ideal but it is the type of createElement props argument\n const htmlProps = {};\n const style = useStyle(props, visualState, isStatic);\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/motion/utils/valid-prop.mjs\n/**\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 \"transformValues\",\n \"custom\",\n \"inherit\",\n \"onLayoutAnimationStart\",\n \"onLayoutAnimationComplete\",\n \"onLayoutMeasure\",\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 \"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 */\nfunction 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 validMotionProps.has(key));\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/utils/filter-props.mjs\n\n\nlet shouldForward = (key) => !isValidMotionProp(key);\nfunction loadExternalIsValidProp(isValidProp) {\n if (!isValidProp)\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 loadExternalIsValidProp(require(\"@emotion/is-prop-valid\").default);\n}\ncatch (_a) {\n // We don't need to actually do anything here - the fallback is the existing `isPropValid`.\n}\nfunction 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 (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\"] && key.startsWith(\"onDrag\"))) {\n filteredProps[key] = props[key];\n }\n }\n return filteredProps;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/svg/utils/transform-origin.mjs\n\n\nfunction calcOrigin(origin, offset, size) {\n return typeof origin === \"string\"\n ? origin\n : px.transform(offset + size * origin);\n}\n/**\n * The SVG transform origin defaults are different to CSS and is less intuitive,\n * so we use the measured dimensions of the SVG to reconcile these.\n */\nfunction calcSVGTransformOrigin(dimensions, originX, originY) {\n const pxOriginX = calcOrigin(originX, dimensions.x, dimensions.width);\n const pxOriginY = calcOrigin(originY, dimensions.y, dimensions.height);\n return `${pxOriginX} ${pxOriginY}`;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/svg/utils/path.mjs\n\n\nconst 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 */\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\n attrs[keys.offset] = px.transform(-offset);\n // Build the dash array\n const pathLength = px.transform(length);\n const pathSpacing = px.transform(spacing);\n attrs[keys.array] = `${pathLength} ${pathSpacing}`;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/svg/utils/build-attrs.mjs\n\n\n\n\n/**\n * Build SVG visual attrbutes, like cx and style.transform\n */\nfunction buildSVGAttrs(state, { attrX, attrY, attrScale, originX, originY, pathLength, pathSpacing = 1, pathOffset = 0, \n// This is object creation, which we try to avoid per-frame.\n...latest }, options, isSVGTag, transformTemplate) {\n buildHTMLStyles(state, latest, options, 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, dimensions } = state;\n /**\n * However, we apply transforms as CSS transforms. So if we detect a transform we take it from attrs\n * and copy it into style.\n */\n if (attrs.transform) {\n if (dimensions)\n style.transform = attrs.transform;\n delete attrs.transform;\n }\n // Parse transformOrigin\n if (dimensions &&\n (originX !== undefined || originY !== undefined || style.transform)) {\n style.transformOrigin = calcSVGTransformOrigin(dimensions, originX !== undefined ? originX : 0.5, originY !== undefined ? originY : 0.5);\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.mjs\n\n\nconst createSvgRenderState = () => ({\n ...createHtmlRenderState(),\n attrs: {},\n});\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/svg/utils/is-svg-tag.mjs\nconst isSVGTag = (tag) => typeof tag === \"string\" && tag.toLowerCase() === \"svg\";\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/svg/use-props.mjs\n\n\n\n\n\n\nfunction useSVGProps(props, visualState, _isStatic, Component) {\n const visualProps = (0,react.useMemo)(() => {\n const state = createSvgRenderState();\n buildSVGAttrs(state, visualState, { enableHardwareAcceleration: false }, isSVGTag(Component), props.transformTemplate);\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/use-render.mjs\n\n\n\n\n\n\n\nfunction createUseRender(forwardMotionProps = false) {\n const useRender = (Component, props, ref, { latestValues }, isStatic) => {\n const useVisualProps = isSVGComponent(Component)\n ? useSVGProps\n : useHTMLProps;\n const visualProps = useVisualProps(props, latestValues, isStatic, Component);\n const filteredProps = filterProps(props, typeof Component === \"string\", forwardMotionProps);\n const elementProps = {\n ...filteredProps,\n ...visualProps,\n ref,\n };\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 = (0,react.useMemo)(() => (isMotionValue(children) ? children.get() : children), [children]);\n return (0,react.createElement)(Component, {\n ...elementProps,\n children: renderedChildren,\n });\n };\n return useRender;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/utils/camel-to-dash.mjs\n/**\n * Convert camelCase to dash-case properties.\n */\nconst camelToDash = (str) => str.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/html/utils/render.mjs\nfunction renderHTML(element, { style, vars }, styleProp, projection) {\n Object.assign(element.style, style, projection && projection.getProjectionStyles(styleProp));\n // Loop over any CSS variables and assign those.\n for (const key in vars) {\n element.style.setProperty(key, vars[key]);\n }\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/svg/utils/camel-case-attrs.mjs\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/svg/utils/render.mjs\n\n\n\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/html/utils/scrape-motion-values.mjs\n\n\n\nfunction scrapeMotionValuesFromProps(props, prevProps) {\n const { style } = props;\n const newValues = {};\n for (const key in style) {\n if (isMotionValue(style[key]) ||\n (prevProps.style && isMotionValue(prevProps.style[key])) ||\n isForcedMotionValue(key, props)) {\n newValues[key] = style[key];\n }\n }\n return newValues;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/svg/utils/scrape-motion-values.mjs\n\n\n\n\nfunction scrape_motion_values_scrapeMotionValuesFromProps(props, prevProps) {\n const newValues = scrapeMotionValuesFromProps(props, prevProps);\n for (const key in props) {\n if (isMotionValue(props[key]) || 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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/utils/resolve-variants.mjs\nfunction resolveVariantFromProps(props, definition, custom, currentValues = {}, currentVelocity = {}) {\n /**\n * If the variant definition is a function, resolve.\n */\n if (typeof definition === \"function\") {\n definition = definition(custom !== undefined ? custom : props.custom, currentValues, currentVelocity);\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 definition = definition(custom !== undefined ? custom : props.custom, currentValues, currentVelocity);\n }\n return definition;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/use-constant.mjs\n\n\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 */\nfunction useConstant(init) {\n const ref = (0,react.useRef)(null);\n if (ref.current === null) {\n ref.current = init();\n }\n return ref.current;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/utils/is-keyframes-target.mjs\nconst isKeyframesTarget = (v) => {\n return Array.isArray(v);\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/resolve-value.mjs\n\n\nconst isCustomValue = (v) => {\n return Boolean(v && typeof v === \"object\" && v.mix && v.toValue);\n};\nconst resolveFinalValueInKeyframes = (v) => {\n // TODO maybe throw if v.length - 1 is placeholder token?\n return isKeyframesTarget(v) ? v[v.length - 1] || 0 : v;\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/value/utils/resolve-motion-value.mjs\n\n\n\n/**\n * If the provided value is a MotionValue, this returns the actual value, otherwise just the value itself\n *\n * TODO: Remove and move to library\n */\nfunction resolveMotionValue(value) {\n const unwrappedValue = isMotionValue(value) ? value.get() : value;\n return isCustomValue(unwrappedValue)\n ? unwrappedValue.toValue()\n : unwrappedValue;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/motion/utils/use-visual-state.mjs\n\n\n\n\n\n\n\n\n\nfunction makeState({ scrapeMotionValuesFromProps, createRenderState, onMount, }, props, context, presenceContext) {\n const state = {\n latestValues: makeLatestValues(props, context, presenceContext, scrapeMotionValuesFromProps),\n renderState: createRenderState(),\n };\n if (onMount) {\n state.mount = (instance) => onMount(props, instance, state);\n }\n return state;\n}\nconst makeUseVisualState = (config) => (props, isStatic) => {\n const context = (0,react.useContext)(MotionContext);\n const presenceContext = (0,react.useContext)(PresenceContext_PresenceContext);\n const make = () => makeState(config, props, context, presenceContext);\n return isStatic ? make() : useConstant(make);\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$1 = isControllingVariants(props);\n const isVariantNode$1 = isVariantNode(props);\n if (context &&\n isVariantNode$1 &&\n !isControllingVariants$1 &&\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 list.forEach((definition) => {\n const resolved = resolveVariantFromProps(props, definition);\n if (!resolved)\n return;\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 return values;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/noop.mjs\nconst noop = (any) => any;\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/frameloop/render-step.mjs\nclass Queue {\n constructor() {\n this.order = [];\n this.scheduled = new Set();\n }\n add(process) {\n if (!this.scheduled.has(process)) {\n this.scheduled.add(process);\n this.order.push(process);\n return true;\n }\n }\n remove(process) {\n const index = this.order.indexOf(process);\n if (index !== -1) {\n this.order.splice(index, 1);\n this.scheduled.delete(process);\n }\n }\n clear() {\n this.order.length = 0;\n this.scheduled.clear();\n }\n}\nfunction createRenderStep(runNextFrame) {\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 Queue();\n let nextFrame = new Queue();\n let numToRun = 0;\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 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 if (queue.add(callback) && addToCurrentFrame && isProcessing) {\n // If we're adding it to the currently running queue, update its measured size\n numToRun = thisFrame.order.length;\n }\n return callback;\n },\n /**\n * Cancel the provided callback from running on the next frame.\n */\n cancel: (callback) => {\n nextFrame.remove(callback);\n toKeepAlive.delete(callback);\n },\n /**\n * Execute all schedule callbacks.\n */\n process: (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 [thisFrame, nextFrame] = [nextFrame, thisFrame];\n // Clear the next frame queue\n nextFrame.clear();\n // Execute this frame\n numToRun = thisFrame.order.length;\n if (numToRun) {\n for (let i = 0; i < numToRun; i++) {\n const callback = thisFrame.order[i];\n callback(frameData);\n if (toKeepAlive.has(callback)) {\n step.schedule(callback);\n runNextFrame();\n }\n }\n }\n isProcessing = false;\n if (flushNextFrame) {\n flushNextFrame = false;\n step.process(frameData);\n }\n },\n };\n return step;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/frameloop/batcher.mjs\n\n\nconst stepsOrder = [\n \"prepare\",\n \"read\",\n \"update\",\n \"preRender\",\n \"render\",\n \"postRender\",\n];\nconst maxElapsed = 40;\nfunction createRenderBatcher(scheduleNextBatch, allowKeepAlive) {\n let runNextFrame = false;\n let useDefaultElapsed = true;\n const state = {\n delta: 0,\n timestamp: 0,\n isProcessing: false,\n };\n const steps = stepsOrder.reduce((acc, key) => {\n acc[key] = createRenderStep(() => (runNextFrame = true));\n return acc;\n }, {});\n const processStep = (stepId) => steps[stepId].process(state);\n const processBatch = () => {\n const timestamp = performance.now();\n runNextFrame = false;\n state.delta = useDefaultElapsed\n ? 1000 / 60\n : Math.max(Math.min(timestamp - state.timestamp, maxElapsed), 1);\n state.timestamp = timestamp;\n state.isProcessing = true;\n stepsOrder.forEach(processStep);\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) => stepsOrder.forEach((key) => steps[key].cancel(process));\n return { schedule, cancel, state, steps };\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/frameloop/frame.mjs\n\n\n\nconst { schedule: frame_frame, cancel: cancelFrame, state: frameData, steps, } = createRenderBatcher(typeof requestAnimationFrame !== \"undefined\" ? requestAnimationFrame : noop, true);\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/svg/config-motion.mjs\n\n\n\n\n\n\n\n\nconst svgMotionConfig = {\n useVisualState: makeUseVisualState({\n scrapeMotionValuesFromProps: scrape_motion_values_scrapeMotionValuesFromProps,\n createRenderState: createSvgRenderState,\n onMount: (props, instance, { renderState, latestValues }) => {\n frame_frame.read(() => {\n try {\n renderState.dimensions =\n typeof instance.getBBox ===\n \"function\"\n ? instance.getBBox()\n : instance.getBoundingClientRect();\n }\n catch (e) {\n // Most likely trying to measure an unrendered element under Firefox\n renderState.dimensions = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n };\n }\n });\n frame_frame.render(() => {\n buildSVGAttrs(renderState, latestValues, { enableHardwareAcceleration: false }, isSVGTag(instance.tagName), props.transformTemplate);\n renderSVG(instance, renderState);\n });\n },\n }),\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/html/config-motion.mjs\n\n\n\n\nconst htmlMotionConfig = {\n useVisualState: makeUseVisualState({\n scrapeMotionValuesFromProps: scrapeMotionValuesFromProps,\n createRenderState: createHtmlRenderState,\n }),\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/utils/create-config.mjs\n\n\n\n\n\nfunction create_config_createDomMotionConfig(Component, { forwardMotionProps = false }, preloadedFeatures, createVisualElement) {\n const baseConfig = isSVGComponent(Component)\n ? svgMotionConfig\n : htmlMotionConfig;\n return {\n ...baseConfig,\n preloadedFeatures,\n useRender: createUseRender(forwardMotionProps),\n createVisualElement,\n Component,\n };\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/events/add-dom-event.mjs\nfunction addDomEvent(target, eventName, handler, options = { passive: true }) {\n target.addEventListener(eventName, handler, options);\n return () => target.removeEventListener(eventName, handler);\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/events/utils/is-primary-pointer.mjs\nconst 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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/events/event-info.mjs\n\n\nfunction extractEventInfo(event, pointType = \"page\") {\n return {\n point: {\n x: event[pointType + \"X\"],\n y: event[pointType + \"Y\"],\n },\n };\n}\nconst addPointerInfo = (handler) => {\n return (event) => isPrimaryPointer(event) && handler(event, extractEventInfo(event));\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/events/add-pointer-event.mjs\n\n\n\nfunction addPointerEvent(target, eventName, handler, options) {\n return addDomEvent(target, eventName, addPointerInfo(handler), options);\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/pipe.mjs\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 combineFunctions = (a, b) => (v) => b(a(v));\nconst pipe = (...transformers) => transformers.reduce(combineFunctions);\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/gestures/drag/utils/lock.mjs\nfunction createLock(name) {\n let lock = null;\n return () => {\n const openLock = () => {\n lock = null;\n };\n if (lock === null) {\n lock = name;\n return openLock;\n }\n return false;\n };\n}\nconst globalHorizontalLock = createLock(\"dragHorizontal\");\nconst globalVerticalLock = createLock(\"dragVertical\");\nfunction getGlobalLock(drag) {\n let lock = false;\n if (drag === \"y\") {\n lock = globalVerticalLock();\n }\n else if (drag === \"x\") {\n lock = globalHorizontalLock();\n }\n else {\n const openHorizontal = globalHorizontalLock();\n const openVertical = globalVerticalLock();\n if (openHorizontal && openVertical) {\n lock = () => {\n openHorizontal();\n openVertical();\n };\n }\n else {\n // Release the locks because we don't use them\n if (openHorizontal)\n openHorizontal();\n if (openVertical)\n openVertical();\n }\n }\n return lock;\n}\nfunction isDragActive() {\n // Check the gesture lock - if we get it, it means no drag gesture is active\n // and we can safely fire the tap gesture.\n const openGestureLock = getGlobalLock(true);\n if (!openGestureLock)\n return true;\n openGestureLock();\n return false;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/motion/features/Feature.mjs\nclass Feature {\n constructor(node) {\n this.isMounted = false;\n this.node = node;\n }\n update() { }\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/gestures/hover.mjs\n\n\n\n\n\n\nfunction addHoverEvent(node, isActive) {\n const eventName = \"pointer\" + (isActive ? \"enter\" : \"leave\");\n const callbackName = \"onHover\" + (isActive ? \"Start\" : \"End\");\n const handleEvent = (event, info) => {\n if (event.type === \"touch\" || isDragActive())\n return;\n const props = node.getProps();\n if (node.animationState && props.whileHover) {\n node.animationState.setActive(\"whileHover\", isActive);\n }\n if (props[callbackName]) {\n frame_frame.update(() => props[callbackName](event, info));\n }\n };\n return addPointerEvent(node.current, eventName, handleEvent, {\n passive: !node.getProps()[callbackName],\n });\n}\nclass HoverGesture extends Feature {\n mount() {\n this.unmount = pipe(addHoverEvent(this.node, true), addHoverEvent(this.node, false));\n }\n unmount() { }\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/gestures/focus.mjs\n\n\n\n\nclass 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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/gestures/utils/is-node-or-child.mjs\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/gestures/press.mjs\n\n\n\n\n\n\n\n\n\n\nfunction fireSyntheticPointerEvent(name, handler) {\n if (!handler)\n return;\n const syntheticPointerEvent = new PointerEvent(\"pointer\" + name);\n handler(syntheticPointerEvent, extractEventInfo(syntheticPointerEvent));\n}\nclass PressGesture extends Feature {\n constructor() {\n super(...arguments);\n this.removeStartListeners = noop;\n this.removeEndListeners = noop;\n this.removeAccessibleListeners = noop;\n this.startPointerPress = (startEvent, startInfo) => {\n this.removeEndListeners();\n if (this.isPressing)\n return;\n const props = this.node.getProps();\n const endPointerPress = (endEvent, endInfo) => {\n if (!this.checkPressEnd())\n return;\n const { onTap, onTapCancel } = this.node.getProps();\n frame_frame.update(() => {\n /**\n * We only count this as a tap gesture if the event.target is the same\n * as, or a child of, this component's element\n */\n !isNodeOrChild(this.node.current, endEvent.target)\n ? onTapCancel && onTapCancel(endEvent, endInfo)\n : onTap && onTap(endEvent, endInfo);\n });\n };\n const removePointerUpListener = addPointerEvent(window, \"pointerup\", endPointerPress, { passive: !(props.onTap || props[\"onPointerUp\"]) });\n const removePointerCancelListener = addPointerEvent(window, \"pointercancel\", (cancelEvent, cancelInfo) => this.cancelPress(cancelEvent, cancelInfo), { passive: !(props.onTapCancel || props[\"onPointerCancel\"]) });\n this.removeEndListeners = pipe(removePointerUpListener, removePointerCancelListener);\n this.startPress(startEvent, startInfo);\n };\n this.startAccessiblePress = () => {\n const handleKeydown = (keydownEvent) => {\n if (keydownEvent.key !== \"Enter\" || this.isPressing)\n return;\n const handleKeyup = (keyupEvent) => {\n if (keyupEvent.key !== \"Enter\" || !this.checkPressEnd())\n return;\n fireSyntheticPointerEvent(\"up\", (event, info) => {\n const { onTap } = this.node.getProps();\n if (onTap) {\n frame_frame.update(() => onTap(event, info));\n }\n });\n };\n this.removeEndListeners();\n this.removeEndListeners = addDomEvent(this.node.current, \"keyup\", handleKeyup);\n fireSyntheticPointerEvent(\"down\", (event, info) => {\n this.startPress(event, info);\n });\n };\n const removeKeydownListener = addDomEvent(this.node.current, \"keydown\", handleKeydown);\n const handleBlur = () => {\n if (!this.isPressing)\n return;\n fireSyntheticPointerEvent(\"cancel\", (cancelEvent, cancelInfo) => this.cancelPress(cancelEvent, cancelInfo));\n };\n const removeBlurListener = addDomEvent(this.node.current, \"blur\", handleBlur);\n this.removeAccessibleListeners = pipe(removeKeydownListener, removeBlurListener);\n };\n }\n startPress(event, info) {\n this.isPressing = true;\n const { onTapStart, whileTap } = this.node.getProps();\n /**\n * Ensure we trigger animations before firing event callback\n */\n if (whileTap && this.node.animationState) {\n this.node.animationState.setActive(\"whileTap\", true);\n }\n if (onTapStart) {\n frame_frame.update(() => onTapStart(event, info));\n }\n }\n checkPressEnd() {\n this.removeEndListeners();\n this.isPressing = false;\n const props = this.node.getProps();\n if (props.whileTap && this.node.animationState) {\n this.node.animationState.setActive(\"whileTap\", false);\n }\n return !isDragActive();\n }\n cancelPress(event, info) {\n if (!this.checkPressEnd())\n return;\n const { onTapCancel } = this.node.getProps();\n if (onTapCancel) {\n frame_frame.update(() => onTapCancel(event, info));\n }\n }\n mount() {\n const props = this.node.getProps();\n const removePointerListener = addPointerEvent(this.node.current, \"pointerdown\", this.startPointerPress, { passive: !(props.onTapStart || props[\"onPointerStart\"]) });\n const removeFocusListener = addDomEvent(this.node.current, \"focus\", this.startAccessiblePress);\n this.removeStartListeners = pipe(removePointerListener, removeFocusListener);\n }\n unmount() {\n this.removeStartListeners();\n this.removeEndListeners();\n this.removeAccessibleListeners();\n }\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/motion/features/viewport/observers.mjs\n/**\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}\nfunction 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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/motion/features/viewport/index.mjs\n\n\n\nconst thresholdNames = {\n some: 0,\n all: 1,\n};\nclass InViewFeature extends Feature {\n constructor() {\n super(...arguments);\n this.hasEnteredView = false;\n this.isInView = false;\n }\n startObserver() {\n this.unmount();\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 return 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}\nfunction hasViewportOptionChanged({ viewport = {} }, { viewport: prevViewport = {} } = {}) {\n return (name) => viewport[name] !== prevViewport[name];\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/motion/features/gestures.mjs\n\n\n\n\n\nconst 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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/shallow-compare.mjs\nfunction 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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/utils/resolve-dynamic-variants.mjs\n\n\n/**\n * Creates an object containing the latest state of every MotionValue on a VisualElement\n */\nfunction getCurrent(visualElement) {\n const current = {};\n visualElement.values.forEach((value, key) => (current[key] = value.get()));\n return current;\n}\n/**\n * Creates an object containing the latest velocity of every MotionValue on a VisualElement\n */\nfunction getVelocity(visualElement) {\n const velocity = {};\n visualElement.values.forEach((value, key) => (velocity[key] = value.getVelocity()));\n return velocity;\n}\nfunction resolveVariant(visualElement, definition, custom) {\n const props = visualElement.getProps();\n return resolveVariantFromProps(props, definition, custom !== undefined ? custom : props.custom, getCurrent(visualElement), getVelocity(visualElement));\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/optimized-appear/data-id.mjs\n\n\nconst optimizedAppearDataId = \"framerAppearId\";\nconst optimizedAppearDataAttribute = \"data-\" + camelToDash(optimizedAppearDataId);\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/errors.mjs\n\n\nlet warning = noop;\nlet invariant = noop;\nif (false) {}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/time-conversion.mjs\n/**\n * Converts seconds to milliseconds\n *\n * @param seconds - Time in seconds.\n * @return milliseconds - Converted time in milliseconds.\n */\nconst secondsToMilliseconds = (seconds) => seconds * 1000;\nconst millisecondsToSeconds = (milliseconds) => milliseconds / 1000;\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/use-instant-transition-state.mjs\nconst instantAnimationState = {\n current: false,\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/easing/utils/is-bezier-definition.mjs\nconst isBezierDefinition = (easing) => Array.isArray(easing) && typeof easing[0] === \"number\";\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/animators/waapi/easing.mjs\n\n\nfunction isWaapiSupportedEasing(easing) {\n return Boolean(!easing ||\n (typeof easing === \"string\" && supportedWaapiEasing[easing]) ||\n isBezierDefinition(easing) ||\n (Array.isArray(easing) && easing.every(isWaapiSupportedEasing)));\n}\nconst cubicBezierAsString = ([a, b, c, d]) => `cubic-bezier(${a}, ${b}, ${c}, ${d})`;\nconst supportedWaapiEasing = {\n linear: \"linear\",\n ease: \"ease\",\n easeIn: \"ease-in\",\n easeOut: \"ease-out\",\n easeInOut: \"ease-in-out\",\n circIn: cubicBezierAsString([0, 0.65, 0.55, 1]),\n circOut: cubicBezierAsString([0.55, 0, 1, 0.45]),\n backIn: cubicBezierAsString([0.31, 0.01, 0.66, -0.59]),\n backOut: cubicBezierAsString([0.33, 1.53, 0.69, 0.99]),\n};\nfunction mapEasingToNativeEasing(easing) {\n if (!easing)\n return undefined;\n return isBezierDefinition(easing)\n ? cubicBezierAsString(easing)\n : Array.isArray(easing)\n ? easing.map(mapEasingToNativeEasing)\n : supportedWaapiEasing[easing];\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/animators/waapi/index.mjs\n\n\nfunction animateStyle(element, valueName, keyframes, { delay = 0, duration, repeat = 0, repeatType = \"loop\", ease, times, } = {}) {\n const keyframeOptions = { [valueName]: keyframes };\n if (times)\n keyframeOptions.offset = times;\n const easing = mapEasingToNativeEasing(ease);\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 return element.animate(keyframeOptions, {\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}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/animators/waapi/utils/get-final-keyframe.mjs\nfunction getFinalKeyframe(keyframes, { repeat, repeatType = \"loop\" }) {\n const index = repeat && repeatType !== \"loop\" && repeat % 2 === 1\n ? 0\n : keyframes.length - 1;\n return keyframes[index];\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/easing/cubic-bezier.mjs\n\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 noticiably 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}\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/easing/ease.mjs\n\n\nconst easeIn = cubicBezier(0.42, 0, 1, 1);\nconst easeOut = cubicBezier(0, 0, 0.58, 1);\nconst easeInOut = cubicBezier(0.42, 0, 0.58, 1);\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/easing/utils/is-easing-array.mjs\nconst isEasingArray = (ease) => {\n return Array.isArray(ease) && typeof ease[0] !== \"number\";\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/easing/modifiers/mirror.mjs\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.\nconst mirrorEasing = (easing) => (p) => p <= 0.5 ? easing(2 * p) / 2 : (2 - easing(2 * (1 - p))) / 2;\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/easing/modifiers/reverse.mjs\n// Accepts an easing function and returns a new one that outputs reversed values.\n// Turns easeIn into easeOut.\nconst reverseEasing = (easing) => (p) => 1 - easing(1 - p);\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/easing/circ.mjs\n\n\n\nconst circIn = (p) => 1 - Math.sin(Math.acos(p));\nconst circOut = reverseEasing(circIn);\nconst circInOut = mirrorEasing(circOut);\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/easing/back.mjs\n\n\n\n\nconst backOut = cubicBezier(0.33, 1.53, 0.69, 0.99);\nconst backIn = reverseEasing(backOut);\nconst backInOut = mirrorEasing(backIn);\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/easing/anticipate.mjs\n\n\nconst anticipate = (p) => (p *= 2) < 1 ? 0.5 * backIn(p) : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/easing/utils/map.mjs\n\n\n\n\n\n\n\n\nconst easingLookup = {\n linear: noop,\n easeIn: easeIn,\n easeInOut: easeInOut,\n easeOut: easeOut,\n circIn: circIn,\n circInOut: circInOut,\n circOut: circOut,\n backIn: backIn,\n backInOut: backInOut,\n backOut: backOut,\n anticipate: anticipate,\n};\nconst easingDefinitionToFunction = (definition) => {\n if (Array.isArray(definition)) {\n // If cubic bezier definition, create bezier curve\n invariant(definition.length === 4, `Cubic bezier arrays must contain four numerical values.`);\n const [x1, y1, x2, y2] = definition;\n return cubicBezier(x1, y1, x2, y2);\n }\n else if (typeof definition === \"string\") {\n // Else lookup from table\n invariant(easingLookup[definition] !== undefined, `Invalid easing type '${definition}'`);\n return easingLookup[definition];\n }\n return definition;\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/value/types/color/utils.mjs\n\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((isString(v) && singleColorRegex.test(v) && v.startsWith(type)) ||\n (testProp && Object.prototype.hasOwnProperty.call(v, testProp)));\n};\nconst splitColor = (aName, bName, cName) => (v) => {\n if (!isString(v))\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/value/types/color/rgba.mjs\n\n\n\n\n\nconst clampRgbUnit = (v) => clamp(0, 255, v);\nconst rgbUnit = {\n ...number,\n transform: (v) => Math.round(clampRgbUnit(v)),\n};\nconst rgba = {\n test: isColorString(\"rgb\", \"red\"),\n parse: 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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/value/types/color/hex.mjs\n\n\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: isColorString(\"#\"),\n parse: parseHex,\n transform: rgba.transform,\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/value/types/color/hsla.mjs\n\n\n\n\n\nconst hsla = {\n test: isColorString(\"hsl\", \"hue\"),\n parse: 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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/value/types/color/index.mjs\n\n\n\n\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 isString(v)\n ? v\n : v.hasOwnProperty(\"red\")\n ? rgba.transform(v)\n : hsla.transform(v);\n },\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/mix.mjs\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 mix = (from, to, progress) => -progress * from + progress * to + from;\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/hsla-to-rgba.mjs\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/mix-color.mjs\n\n\n\n\n\n\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 return Math.sqrt(Math.max(0, v * (to * to - fromExpo) + fromExpo));\n};\nconst colorTypes = [hex, rgba, hsla];\nconst getColorType = (v) => colorTypes.find((type) => type.test(v));\nfunction asRGBA(color) {\n const type = getColorType(color);\n invariant(Boolean(type), `'${color}' is not an animatable color. Use the equivalent color code instead.`);\n let model = type.parse(color);\n if (type === hsla) {\n // TODO Remove this cast - needed since Framer 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 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 = mix(fromRGBA.alpha, toRGBA.alpha, v);\n return rgba.transform(blended);\n };\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/value/types/complex/index.mjs\n\n\n\n\n\n\nfunction test(v) {\n var _a, _b;\n return (isNaN(v) &&\n isString(v) &&\n (((_a = v.match(floatRegex)) === null || _a === void 0 ? void 0 : _a.length) || 0) +\n (((_b = v.match(colorRegex)) === null || _b === void 0 ? void 0 : _b.length) || 0) >\n 0);\n}\nconst cssVarTokeniser = {\n regex: cssVariableRegex,\n countKey: \"Vars\",\n token: \"${v}\",\n parse: noop,\n};\nconst colorTokeniser = {\n regex: colorRegex,\n countKey: \"Colors\",\n token: \"${c}\",\n parse: color.parse,\n};\nconst numberTokeniser = {\n regex: floatRegex,\n countKey: \"Numbers\",\n token: \"${n}\",\n parse: number.parse,\n};\nfunction tokenise(info, { regex, countKey, token, parse }) {\n const matches = info.tokenised.match(regex);\n if (!matches)\n return;\n info[\"num\" + countKey] = matches.length;\n info.tokenised = info.tokenised.replace(regex, token);\n info.values.push(...matches.map(parse));\n}\nfunction analyseComplexValue(value) {\n const originalValue = value.toString();\n const info = {\n value: originalValue,\n tokenised: originalValue,\n values: [],\n numVars: 0,\n numColors: 0,\n numNumbers: 0,\n };\n if (info.value.includes(\"var(--\"))\n tokenise(info, cssVarTokeniser);\n tokenise(info, colorTokeniser);\n tokenise(info, numberTokeniser);\n return info;\n}\nfunction parseComplexValue(v) {\n return analyseComplexValue(v).values;\n}\nfunction createTransformer(source) {\n const { values, numColors, numVars, tokenised } = analyseComplexValue(source);\n const numValues = values.length;\n return (v) => {\n let output = tokenised;\n for (let i = 0; i < numValues; i++) {\n if (i < numVars) {\n output = output.replace(cssVarTokeniser.token, v[i]);\n }\n else if (i < numVars + numColors) {\n output = output.replace(colorTokeniser.token, color.transform(v[i]));\n }\n else {\n output = output.replace(numberTokeniser.token, sanitize(v[i]));\n }\n }\n return output;\n };\n}\nconst convertNumbersToZero = (v) => typeof v === \"number\" ? 0 : v;\nfunction getAnimatableNone(v) {\n const parsed = parseComplexValue(v);\n const transformer = createTransformer(v);\n return transformer(parsed.map(convertNumbersToZero));\n}\nconst complex = {\n test,\n parse: parseComplexValue,\n createTransformer,\n getAnimatableNone,\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/mix-complex.mjs\n\n\n\n\n\n\n\nconst mixImmediate = (origin, target) => (p) => `${p > 0 ? target : origin}`;\nfunction getMixer(origin, target) {\n if (typeof origin === \"number\") {\n return (v) => mix(origin, target, v);\n }\n else if (color.test(origin)) {\n return mixColor(origin, target);\n }\n else {\n return origin.startsWith(\"var(\")\n ? mixImmediate(origin, target)\n : mixComplex(origin, target);\n }\n}\nconst mixArray = (from, to) => {\n const output = [...from];\n const numValues = output.length;\n const blendValue = from.map((fromThis, i) => getMixer(fromThis, to[i]));\n return (v) => {\n for (let i = 0; i < numValues; i++) {\n output[i] = blendValue[i](v);\n }\n return output;\n };\n};\nconst mixObject = (origin, target) => {\n const output = { ...origin, ...target };\n const blendValue = {};\n for (const key in output) {\n if (origin[key] !== undefined && target[key] !== undefined) {\n blendValue[key] = getMixer(origin[key], target[key]);\n }\n }\n return (v) => {\n for (const key in blendValue) {\n output[key] = blendValue[key](v);\n }\n return output;\n };\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.numVars === targetStats.numVars &&\n originStats.numColors === targetStats.numColors &&\n originStats.numNumbers >= targetStats.numNumbers;\n if (canInterpolate) {\n return pipe(mixArray(originStats.values, 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.`);\n return mixImmediate(origin, target);\n }\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/progress.mjs\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 @param [number]: Lower limit\n @param [number]: Upper limit\n @param [number]: Value to find progress within given range\n @return [number]: Progress of value within range as expressed 0-1\n*/\nconst progress = (from, to, value) => {\n const toFromDifference = to - from;\n return toFromDifference === 0 ? 1 : (value - from) / toFromDifference;\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/interpolate.mjs\n\n\n\n\n\n\n\n\n\n\nconst mixNumber = (from, to) => (p) => mix(from, to, p);\nfunction detectMixerFactory(v) {\n if (typeof v === \"number\") {\n return mixNumber;\n }\n else if (typeof v === \"string\") {\n return color.test(v) ? mixColor : mixComplex;\n }\n else if (Array.isArray(v)) {\n return mixArray;\n }\n else if (typeof v === \"object\") {\n return mixObject;\n }\n return mixNumber;\n}\nfunction createMixers(output, ease, customMixer) {\n const mixers = [];\n const mixerFactory = customMixer || detectMixerFactory(output[0]);\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 Revist 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\");\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 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 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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/offsets/fill.mjs\n\n\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(mix(min, 1, offsetProgress));\n }\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/offsets/default.mjs\n\n\nfunction defaultOffset(arr) {\n const offset = [0];\n fillOffset(offset, arr.length - 1);\n return offset;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/offsets/time.mjs\nfunction convertOffsetToTimes(offset, duration) {\n return offset.map((o) => o * duration);\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/generators/keyframes.mjs\n\n\n\n\n\n\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/velocity-per-second.mjs\n/*\n Convert velocity into velocity per second\n\n @param [number]: Unit per frame\n @param [number]: Frame duration in ms\n*/\nfunction velocityPerSecond(velocity, frameDuration) {\n return frameDuration ? velocity * (1000 / frameDuration) : 0;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/generators/utils/velocity.mjs\n\n\nconst velocitySampleDuration = 5; // ms\nfunction calcGeneratorVelocity(resolveValue, t, current) {\n const prevT = Math.max(t - velocitySampleDuration, 0);\n return velocityPerSecond(current - resolveValue(prevT), t - prevT);\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/generators/spring/find.mjs\n\n\n\n\nconst safeMin = 0.001;\nconst minDuration = 0.01;\nconst maxDuration = 10.0;\nconst minDamping = 0.05;\nconst maxDamping = 1;\nfunction findSpring({ duration = 800, bounce = 0.25, velocity = 0, mass = 1, }) {\n let envelope;\n let derivative;\n warning(duration <= secondsToMilliseconds(maxDuration), \"Spring duration must be 10 seconds or less\");\n let dampingRatio = 1 - bounce;\n /**\n * Restrict dampingRatio and duration to within acceptable ranges.\n */\n dampingRatio = clamp(minDamping, maxDamping, dampingRatio);\n duration = clamp(minDuration, 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: 100,\n damping: 10,\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 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}\nfunction calcAngularFreq(undampedFreq, dampingRatio) {\n return undampedFreq * Math.sqrt(1 - dampingRatio * dampingRatio);\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/generators/spring/index.mjs\n\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: 0.0,\n stiffness: 100,\n damping: 10,\n mass: 1.0,\n isResolvedFromDuration: false,\n ...options,\n };\n // stiffness/damping/mass overrides duration/bounce\n if (!isSpringType(options, physicsKeys) &&\n isSpringType(options, durationKeys)) {\n const derived = findSpring(options);\n springOptions = {\n ...springOptions,\n ...derived,\n velocity: 0.0,\n mass: 1.0,\n };\n springOptions.isResolvedFromDuration = true;\n }\n return springOptions;\n}\nfunction spring({ keyframes, restDelta, restSpeed, ...options }) {\n const origin = keyframes[0];\n const target = keyframes[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, velocity, duration, isResolvedFromDuration, } = getSpringOptions(options);\n const initialVelocity = velocity ? -millisecondsToSeconds(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 ? 0.01 : 2);\n restDelta || (restDelta = isGranularScale ? 0.005 : 0.5);\n let resolveSpring;\n if (dampingRatio < 1) {\n const angularFreq = calcAngularFreq(undampedAngularFreq, dampingRatio);\n // Underdamped spring\n resolveSpring = (t) => {\n const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n return (target -\n envelope *\n (((initialVelocity +\n dampingRatio * undampedAngularFreq * initialDelta) /\n angularFreq) *\n Math.sin(angularFreq * t) +\n initialDelta * 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 }\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 }\n return {\n calculatedDuration: isResolvedFromDuration ? duration || null : null,\n next: (t) => {\n const current = resolveSpring(t);\n if (!isResolvedFromDuration) {\n let currentVelocity = initialVelocity;\n if (t !== 0) {\n /**\n * We only need to calculate velocity for under-damped springs\n * as over- and critically-damped springs can't overshoot, so\n * checking only for displacement is enough.\n */\n if (dampingRatio < 1) {\n currentVelocity = calcGeneratorVelocity(resolveSpring, t, current);\n }\n else {\n currentVelocity = 0;\n }\n }\n const isBelowVelocityThreshold = Math.abs(currentVelocity) <= restSpeed;\n const isBelowDisplacementThreshold = Math.abs(target - current) <= restDelta;\n state.done =\n isBelowVelocityThreshold && isBelowDisplacementThreshold;\n }\n else {\n state.done = t >= duration;\n }\n state.value = state.done ? target : current;\n return state;\n },\n };\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/generators/inertia.mjs\n\n\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: calcGeneratorVelocity(calcLatest, t, state.value),\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/animators/js/driver-frameloop.mjs\n\n\nconst frameloopDriver = (update) => {\n const passTimestamp = ({ timestamp }) => update(timestamp);\n return {\n start: () => frame_frame.update(passTimestamp, true),\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 : performance.now(),\n };\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/generators/utils/calc-duration.mjs\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/animators/js/index.mjs\n\n\n\n\n\n\n\n\n\nconst types = {\n decay: inertia,\n inertia: inertia,\n tween: keyframes,\n keyframes: keyframes,\n spring: spring,\n};\n/**\n * Animate a single value on the main thread.\n *\n * This function is written, where functionality overlaps,\n * to be largely spec-compliant with WAAPI to allow fungibility\n * between the two.\n */\nfunction animateValue({ autoplay = true, delay = 0, driver = frameloopDriver, keyframes: keyframes$1, type = \"keyframes\", repeat = 0, repeatDelay = 0, repeatType = \"loop\", onPlay, onStop, onComplete, onUpdate, ...options }) {\n let speed = 1;\n let hasStopped = false;\n let resolveFinishedPromise;\n let currentFinishedPromise;\n /**\n * Resolve the current Promise every time we enter the\n * finished state. This is WAAPI-compatible behaviour.\n */\n const updateFinishedPromise = () => {\n currentFinishedPromise = new Promise((resolve) => {\n resolveFinishedPromise = resolve;\n });\n };\n // Create the first finished promise\n updateFinishedPromise();\n let animationDriver;\n const generatorFactory = types[type] || keyframes;\n /**\n * If this isn't the keyframes generator and we've been provided\n * strings as keyframes, we need to interpolate these.\n * TODO: Support velocity for units and complex value types/\n */\n let mapNumbersToKeyframes;\n if (generatorFactory !== keyframes &&\n typeof keyframes$1[0] !== \"number\") {\n mapNumbersToKeyframes = interpolate([0, 100], keyframes$1, {\n clamp: false,\n });\n keyframes$1 = [0, 100];\n }\n const generator = generatorFactory({ ...options, keyframes: keyframes$1 });\n let mirroredGenerator;\n if (repeatType === \"mirror\") {\n mirroredGenerator = generatorFactory({\n ...options,\n keyframes: [...keyframes$1].reverse(),\n velocity: -(options.velocity || 0),\n });\n }\n let playState = \"idle\";\n let holdTime = null;\n let startTime = null;\n let cancelTime = null;\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 && repeat) {\n generator.calculatedDuration = calcGeneratorDuration(generator);\n }\n const { calculatedDuration } = generator;\n let resolvedDuration = Infinity;\n let totalDuration = Infinity;\n if (calculatedDuration !== null) {\n resolvedDuration = calculatedDuration + repeatDelay;\n totalDuration = resolvedDuration * (repeat + 1) - repeatDelay;\n }\n let currentTime = 0;\n const tick = (timestamp) => {\n if (startTime === null)\n return;\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 (speed > 0)\n startTime = Math.min(startTime, timestamp);\n if (speed < 0)\n startTime = Math.min(timestamp - totalDuration / speed, startTime);\n if (holdTime !== null) {\n currentTime = 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 currentTime = Math.round(timestamp - startTime) * speed;\n }\n // Rebase on delay\n const timeWithoutDelay = currentTime - delay * (speed >= 0 ? 1 : -1);\n const isInDelayPhase = speed >= 0 ? timeWithoutDelay < 0 : timeWithoutDelay > totalDuration;\n currentTime = Math.max(timeWithoutDelay, 0);\n /**\n * If this animation has finished, set the current time\n * to the total duration.\n */\n if (playState === \"finished\" && holdTime === null) {\n currentTime = totalDuration;\n }\n let elapsed = 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 = currentTime / 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 iterationIsOdd = Boolean(currentIteration % 2);\n if (iterationIsOdd) {\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 let p = clamp(0, 1, iterationProgress);\n if (currentTime > totalDuration) {\n p = repeatType === \"reverse\" && iterationIsOdd ? 1 : 0;\n }\n elapsed = p * 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 const state = isInDelayPhase\n ? { done: false, value: keyframes$1[0] }\n : frameGenerator.next(elapsed);\n if (mapNumbersToKeyframes) {\n state.value = mapNumbersToKeyframes(state.value);\n }\n let { done } = state;\n if (!isInDelayPhase && calculatedDuration !== null) {\n done = speed >= 0 ? currentTime >= totalDuration : currentTime <= 0;\n }\n const isAnimationFinished = holdTime === null &&\n (playState === \"finished\" || (playState === \"running\" && done));\n if (onUpdate) {\n onUpdate(state.value);\n }\n if (isAnimationFinished) {\n finish();\n }\n return state;\n };\n const stopAnimationDriver = () => {\n animationDriver && animationDriver.stop();\n animationDriver = undefined;\n };\n const cancel = () => {\n playState = \"idle\";\n stopAnimationDriver();\n resolveFinishedPromise();\n updateFinishedPromise();\n startTime = cancelTime = null;\n };\n const finish = () => {\n playState = \"finished\";\n onComplete && onComplete();\n stopAnimationDriver();\n resolveFinishedPromise();\n };\n const play = () => {\n if (hasStopped)\n return;\n if (!animationDriver)\n animationDriver = driver(tick);\n const now = animationDriver.now();\n onPlay && onPlay();\n if (holdTime !== null) {\n startTime = now - holdTime;\n }\n else if (!startTime || playState === \"finished\") {\n startTime = now;\n }\n if (playState === \"finished\") {\n updateFinishedPromise();\n }\n cancelTime = startTime;\n holdTime = null;\n /**\n * Set playState to running only after we've used it in\n * the previous logic.\n */\n playState = \"running\";\n animationDriver.start();\n };\n if (autoplay) {\n play();\n }\n const controls = {\n then(resolve, reject) {\n return currentFinishedPromise.then(resolve, reject);\n },\n get time() {\n return millisecondsToSeconds(currentTime);\n },\n set time(newTime) {\n newTime = secondsToMilliseconds(newTime);\n currentTime = newTime;\n if (holdTime !== null || !animationDriver || speed === 0) {\n holdTime = newTime;\n }\n else {\n startTime = animationDriver.now() - newTime / speed;\n }\n },\n get duration() {\n const duration = generator.calculatedDuration === null\n ? calcGeneratorDuration(generator)\n : generator.calculatedDuration;\n return millisecondsToSeconds(duration);\n },\n get speed() {\n return speed;\n },\n set speed(newSpeed) {\n if (newSpeed === speed || !animationDriver)\n return;\n speed = newSpeed;\n controls.time = millisecondsToSeconds(currentTime);\n },\n get state() {\n return playState;\n },\n play,\n pause: () => {\n playState = \"paused\";\n holdTime = currentTime;\n },\n stop: () => {\n hasStopped = true;\n if (playState === \"idle\")\n return;\n playState = \"idle\";\n onStop && onStop();\n cancel();\n },\n cancel: () => {\n if (cancelTime !== null)\n tick(cancelTime);\n cancel();\n },\n complete: () => {\n playState = \"finished\";\n },\n sample: (elapsed) => {\n startTime = 0;\n return tick(elapsed);\n },\n };\n return controls;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/memo.mjs\nfunction memo(callback) {\n let result;\n return () => {\n if (result === undefined)\n result = callback();\n return result;\n };\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/animators/waapi/create-accelerated-animation.mjs\n\n\n\n\n\n\n\n\n\nconst supportsWaapi = memo(() => Object.hasOwnProperty.call(Element.prototype, \"animate\"));\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 \"backgroundColor\",\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\n/**\n * Implement a practical max duration for keyframe generation\n * to prevent infinite loops\n */\nconst create_accelerated_animation_maxDuration = 20000;\nconst requiresPregeneratedKeyframes = (valueName, options) => options.type === \"spring\" ||\n valueName === \"backgroundColor\" ||\n !isWaapiSupportedEasing(options.ease);\nfunction createAcceleratedAnimation(value, valueName, { onUpdate, onComplete, ...options }) {\n const canAccelerateAnimation = supportsWaapi() &&\n acceleratedValues.has(valueName) &&\n !options.repeatDelay &&\n options.repeatType !== \"mirror\" &&\n options.damping !== 0 &&\n options.type !== \"inertia\";\n if (!canAccelerateAnimation)\n return false;\n /**\n * TODO: Unify with js/index\n */\n let hasStopped = false;\n let resolveFinishedPromise;\n let currentFinishedPromise;\n /**\n * Resolve the current Promise every time we enter the\n * finished state. This is WAAPI-compatible behaviour.\n */\n const updateFinishedPromise = () => {\n currentFinishedPromise = new Promise((resolve) => {\n resolveFinishedPromise = resolve;\n });\n };\n // Create the first finished promise\n updateFinishedPromise();\n let { keyframes, duration = 300, ease, times } = options;\n /**\n * If this animation needs pre-generated keyframes then generate.\n */\n if (requiresPregeneratedKeyframes(valueName, options)) {\n const sampleAnimation = animateValue({\n ...options,\n repeat: 0,\n delay: 0,\n });\n let state = { done: false, value: keyframes[0] };\n const pregeneratedKeyframes = [];\n /**\n * Bail after 20 seconds of pre-generated keyframes as it's likely\n * we're heading for an infinite loop.\n */\n let t = 0;\n while (!state.done && t < create_accelerated_animation_maxDuration) {\n state = sampleAnimation.sample(t);\n pregeneratedKeyframes.push(state.value);\n t += sampleDelta;\n }\n times = undefined;\n keyframes = pregeneratedKeyframes;\n duration = t - sampleDelta;\n ease = \"linear\";\n }\n const animation = animateStyle(value.owner.current, valueName, keyframes, {\n ...options,\n duration,\n /**\n * This function is currently not called if ease is provided\n * as a function so the cast is safe.\n *\n * However it would be possible for a future refinement to port\n * in easing pregeneration from Motion One for browsers that\n * support the upcoming `linear()` easing function.\n */\n ease: ease,\n times,\n });\n /**\n * WAAPI animations don't resolve startTime synchronously. But a blocked\n * thread could delay the startTime resolution by a noticeable amount.\n * For synching handoff animations with the new Motion animation we want\n * to ensure startTime is synchronously set.\n */\n if (options.syncStart) {\n animation.startTime = frameData.isProcessing\n ? frameData.timestamp\n : document.timeline\n ? document.timeline.currentTime\n : performance.now();\n }\n const cancelAnimation = () => animation.cancel();\n const safeCancel = () => {\n frame_frame.update(cancelAnimation);\n resolveFinishedPromise();\n updateFinishedPromise();\n };\n /**\n * Prefer the `onfinish` prop as it's more widely supported than\n * the `finished` promise.\n *\n * Here, we synchronously set the provided MotionValue to the end\n * keyframe. If we didn't, when the WAAPI animation is finished it would\n * be removed from the element which would then revert to its old styles.\n */\n animation.onfinish = () => {\n value.set(getFinalKeyframe(keyframes, options));\n onComplete && onComplete();\n safeCancel();\n };\n /**\n * Animation interrupt callback.\n */\n const controls = {\n then(resolve, reject) {\n return currentFinishedPromise.then(resolve, reject);\n },\n attachTimeline(timeline) {\n animation.timeline = timeline;\n animation.onfinish = null;\n return noop;\n },\n get time() {\n return millisecondsToSeconds(animation.currentTime || 0);\n },\n set time(newTime) {\n animation.currentTime = secondsToMilliseconds(newTime);\n },\n get speed() {\n return animation.playbackRate;\n },\n set speed(newSpeed) {\n animation.playbackRate = newSpeed;\n },\n get duration() {\n return millisecondsToSeconds(duration);\n },\n play: () => {\n if (hasStopped)\n return;\n animation.play();\n /**\n * Cancel any pending cancel tasks\n */\n cancelFrame(cancelAnimation);\n },\n pause: () => animation.pause(),\n stop: () => {\n hasStopped = true;\n if (animation.playState === \"idle\")\n return;\n /**\n * WAAPI doesn't natively have any interruption capabilities.\n *\n * Rather than read commited 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 const { currentTime } = animation;\n if (currentTime) {\n const sampleAnimation = animateValue({\n ...options,\n autoplay: false,\n });\n value.setWithVelocity(sampleAnimation.sample(currentTime - sampleDelta).value, sampleAnimation.sample(currentTime).value, sampleDelta);\n }\n safeCancel();\n },\n complete: () => animation.finish(),\n cancel: safeCancel,\n };\n return controls;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/animators/instant.mjs\n\n\n\nfunction createInstantAnimation({ keyframes, delay, onUpdate, onComplete, }) {\n const setValue = () => {\n onUpdate && onUpdate(keyframes[keyframes.length - 1]);\n onComplete && onComplete();\n /**\n * TODO: As this API grows it could make sense to always return\n * animateValue. This will be a bigger project as animateValue\n * is frame-locked whereas this function resolves instantly.\n * This is a behavioural change and also has ramifications regarding\n * assumptions within tests.\n */\n return {\n time: 0,\n speed: 1,\n duration: 0,\n play: (noop),\n pause: (noop),\n stop: (noop),\n then: (resolve) => {\n resolve();\n return Promise.resolve();\n },\n cancel: (noop),\n complete: (noop),\n };\n };\n return delay\n ? animateValue({\n keyframes: [0, 1],\n duration: 0,\n delay,\n onComplete: setValue,\n })\n : setValue();\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/utils/default-transitions.mjs\n\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/utils/is-animatable.mjs\n\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 = (key, value) => {\n // If the list of keys tat might be non-animatable grows, replace with Set\n if (key === \"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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/value/types/complex/filter.mjs\n\n\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 = /([a-z-]*)\\(.*?\\)/g;\nconst filter = {\n ...complex,\n getAnimatableNone: (v) => {\n const functions = v.match(functionRegex);\n return functions ? functions.map(applyDefaultFilter).join(\" \") : v;\n },\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/value-types/defaults.mjs\n\n\n\n\n/**\n * A map of default value types for common values\n */\nconst defaultValueTypes = {\n ...numberValueTypes,\n // Color props\n color: 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: filter,\n WebkitFilter: filter,\n};\n/**\n * Gets the default ValueType for the provided value key\n */\nconst getDefaultValueType = (key) => defaultValueTypes[key];\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/value-types/animatable-none.mjs\n\n\n\n\nfunction animatable_none_getAnimatableNone(key, value) {\n let defaultValueType = getDefaultValueType(key);\n if (defaultValueType !== filter)\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/is-zero-value-string.mjs\n/**\n * Check if the value is a zero value string like \"0px\" or \"0%\"\n */\nconst isZeroValueString = (v) => /^0[^.\\s]+$/.test(v);\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/utils/is-none.mjs\n\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}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/utils/keyframes.mjs\n\n\n\n\nfunction getKeyframes(value, valueName, target, transition) {\n const isTargetAnimatable = isAnimatable(valueName, target);\n let keyframes;\n if (Array.isArray(target)) {\n keyframes = [...target];\n }\n else {\n keyframes = [null, target];\n }\n const defaultOrigin = transition.from !== undefined ? transition.from : value.get();\n let animatableTemplateValue = undefined;\n const noneKeyframeIndexes = [];\n for (let i = 0; i < keyframes.length; i++) {\n /**\n * Fill null/wildcard keyframes\n */\n if (keyframes[i] === null) {\n keyframes[i] = i === 0 ? defaultOrigin : keyframes[i - 1];\n }\n if (isNone(keyframes[i])) {\n noneKeyframeIndexes.push(i);\n }\n // TODO: Clean this conditional, it works for now\n if (typeof keyframes[i] === \"string\" &&\n keyframes[i] !== \"none\" &&\n keyframes[i] !== \"0\") {\n animatableTemplateValue = keyframes[i];\n }\n }\n if (isTargetAnimatable &&\n noneKeyframeIndexes.length &&\n animatableTemplateValue) {\n for (let i = 0; i < noneKeyframeIndexes.length; i++) {\n const index = noneKeyframeIndexes[i];\n keyframes[index] = animatable_none_getAnimatableNone(valueName, animatableTemplateValue);\n }\n }\n return keyframes;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/utils/transitions.mjs\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({ when, delay: _delay, delayChildren, staggerChildren, staggerDirection, repeat, repeatType, repeatDelay, from, elapsed, ...transition }) {\n return !!Object.keys(transition).length;\n}\nfunction getValueTransition(transition, key) {\n return transition[key] || transition[\"default\"] || transition;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/interfaces/motion-value.mjs\n\n\n\n\n\n\n\n\n\n\n\nconst animateMotionValue = (valueName, value, target, transition = {}) => {\n return (onComplete) => {\n const valueTransition = getValueTransition(transition, valueName) || {};\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 keyframes = getKeyframes(value, valueName, target, valueTransition);\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 const targetKeyframe = keyframes[keyframes.length - 1];\n const isOriginAnimatable = isAnimatable(valueName, originKeyframe);\n const isTargetAnimatable = isAnimatable(valueName, targetKeyframe);\n warning(isOriginAnimatable === isTargetAnimatable, `You are trying to animate ${valueName} from \"${originKeyframe}\" to \"${targetKeyframe}\". ${originKeyframe} is not an animatable value - to enable this animation set ${originKeyframe} to a value animatable to ${targetKeyframe} via the \\`style\\` property.`);\n let options = {\n keyframes,\n velocity: value.getVelocity(),\n ease: \"easeOut\",\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 };\n /**\n * If there's no transition defined for this value, we can generate\n * unqiue transition settings for this value.\n */\n if (!isTransitionDefined(valueTransition)) {\n options = {\n ...options,\n ...getDefaultTransition(valueName, options),\n };\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 if (options.duration) {\n options.duration = secondsToMilliseconds(options.duration);\n }\n if (options.repeatDelay) {\n options.repeatDelay = secondsToMilliseconds(options.repeatDelay);\n }\n if (!isOriginAnimatable ||\n !isTargetAnimatable ||\n instantAnimationState.current ||\n valueTransition.type === false) {\n /**\n * If we can't animate this value, or the global instant animation flag is set,\n * or this is simply defined as an instant transition, return an instant transition.\n */\n return createInstantAnimation(instantAnimationState.current\n ? { ...options, delay: 0 }\n : options);\n }\n /**\n * Animate via WAAPI if possible.\n */\n if (value.owner &&\n value.owner.current instanceof HTMLElement &&\n !value.owner.getProps().onUpdate) {\n const acceleratedAnimation = createAcceleratedAnimation(value, valueName, options);\n if (acceleratedAnimation)\n return acceleratedAnimation;\n }\n /**\n * If we didn't create an accelerated animation, create a JS animation\n */\n return animateValue(options);\n };\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/value/use-will-change/is.mjs\n\n\nfunction isWillChangeMotionValue(value) {\n return Boolean(isMotionValue(value) && value.add);\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/is-numerical-string.mjs\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+$/.test(v);\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/array.mjs\nfunction 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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/subscription-manager.mjs\n\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/value/index.mjs\n\n\n\n\n\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 * @internal\n */\n constructor(init, options = {}) {\n /**\n * This will be replaced by the build step with the latest version number.\n * When MotionValues are provided to motion components, warn if versions are mixed.\n */\n this.version = \"10.16.4\";\n /**\n * Duration, in milliseconds, since last updating frame.\n *\n * @internal\n */\n this.timeDelta = 0;\n /**\n * Timestamp of the last time this `MotionValue` was updated.\n *\n * @internal\n */\n this.lastUpdated = 0;\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 = false;\n /**\n * An object containing a SubscriptionManager for each active event.\n */\n this.events = {};\n this.updateAndNotify = (v, render = true) => {\n this.prev = this.current;\n this.current = v;\n // Update timestamp\n const { delta, timestamp } = frameData;\n if (this.lastUpdated !== timestamp) {\n this.timeDelta = delta;\n this.lastUpdated = timestamp;\n frame_frame.postRender(this.scheduleVelocityCheck);\n }\n // Update update subscribers\n if (this.prev !== this.current && this.events.change) {\n this.events.change.notify(this.current);\n }\n // Update velocity subscribers\n if (this.events.velocityChange) {\n this.events.velocityChange.notify(this.getVelocity());\n }\n // Update render subscribers\n if (render && this.events.renderRequest) {\n this.events.renderRequest.notify(this.current);\n }\n };\n /**\n * Schedule a velocity check for the next frame.\n *\n * This is an instanced and bound function to prevent generating a new\n * function once per frame.\n *\n * @internal\n */\n this.scheduleVelocityCheck = () => frame_frame.postRender(this.velocityCheck);\n /**\n * Updates `prev` with `current` if the value hasn't been updated this frame.\n * This ensures velocity calculations return `0`.\n *\n * This is an instanced and bound function to prevent generating a new\n * function once per frame.\n *\n * @internal\n */\n this.velocityCheck = ({ timestamp }) => {\n if (timestamp !== this.lastUpdated) {\n this.prev = this.current;\n if (this.events.velocityChange) {\n this.events.velocityChange.notify(this.getVelocity());\n }\n }\n };\n this.hasAnimated = false;\n this.prev = this.current = init;\n this.canTrackVelocity = isFloat(this.current);\n this.owner = options.owner;\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 (false) {}\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_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 * @internal\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, render = true) {\n if (!render || !this.passiveEffect) {\n this.updateAndNotify(v, render);\n }\n else {\n this.passiveEffect(v, this.updateAndNotify);\n }\n }\n setWithVelocity(prev, current, delta) {\n this.set(current);\n this.prev = prev;\n this.timeDelta = 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) {\n this.updateAndNotify(v);\n this.prev = v;\n this.stop();\n if (this.stopPassiveEffect)\n this.stopPassiveEffect();\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 // This could be isFloat(this.prev) && isFloat(this.current), but that would be wasteful\n return this.canTrackVelocity\n ? // These casts could be avoided if parseFloat would be typed better\n velocityPerSecond(parseFloat(this.current) -\n parseFloat(this.prev), this.timeDelta)\n : 0;\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 * @internal\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.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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/value-types/test.mjs\n/**\n * Tests a provided value against a ValueType\n */\nconst testValueType = (v) => (type) => type.test(v);\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/value-types/type-auto.mjs\n/**\n * ValueType for \"auto\"\n */\nconst auto = {\n test: (v) => v === \"auto\",\n parse: (v) => v,\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/value-types/dimensions.mjs\n\n\n\n\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/value-types/find.mjs\n\n\n\n\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/utils/setters.mjs\n\n\n\n\n\n\n\n\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 setTarget(visualElement, definition) {\n const resolved = resolveVariant(visualElement, definition);\n let { transitionEnd = {}, transition = {}, ...target } = resolved ? visualElement.makeTargetAnimatable(resolved, false) : {};\n target = { ...target, ...transitionEnd };\n for (const key in target) {\n const value = resolveFinalValueInKeyframes(target[key]);\n setMotionValue(visualElement, key, value);\n }\n}\nfunction setVariants(visualElement, variantLabels) {\n const reversedLabels = [...variantLabels].reverse();\n reversedLabels.forEach((key) => {\n const variant = visualElement.getVariant(key);\n variant && setTarget(visualElement, variant);\n if (visualElement.variantChildren) {\n visualElement.variantChildren.forEach((child) => {\n setVariants(child, variantLabels);\n });\n }\n });\n}\nfunction setValues(visualElement, definition) {\n if (Array.isArray(definition)) {\n return setVariants(visualElement, definition);\n }\n else if (typeof definition === \"string\") {\n return setVariants(visualElement, [definition]);\n }\n else {\n setTarget(visualElement, definition);\n }\n}\nfunction checkTargetForNewValues(visualElement, target, origin) {\n var _a, _b;\n const newValueKeys = Object.keys(target).filter((key) => !visualElement.hasValue(key));\n const numNewValues = newValueKeys.length;\n if (!numNewValues)\n return;\n for (let i = 0; i < numNewValues; i++) {\n const key = newValueKeys[i];\n const targetValue = target[key];\n let value = null;\n /**\n * If the target is a series of keyframes, we can use the first value\n * in the array. If this first value is null, we'll still need to read from the DOM.\n */\n if (Array.isArray(targetValue)) {\n value = targetValue[0];\n }\n /**\n * If the target isn't keyframes, or the first keyframe was null, we need to\n * first check if an origin value was explicitly defined in the transition as \"from\",\n * if not read the value from the DOM. As an absolute fallback, take the defined target value.\n */\n if (value === null) {\n value = (_b = (_a = origin[key]) !== null && _a !== void 0 ? _a : visualElement.readValue(key)) !== null && _b !== void 0 ? _b : target[key];\n }\n /**\n * If value is still undefined or null, ignore it. Preferably this would throw,\n * but this was causing issues in Framer.\n */\n if (value === undefined || value === null)\n continue;\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(targetValue)) {\n value = animatable_none_getAnimatableNone(key, targetValue);\n }\n visualElement.addValue(key, motionValue(value, { owner: visualElement }));\n if (origin[key] === undefined) {\n origin[key] = value;\n }\n if (value !== null)\n visualElement.setBaseTarget(key, value);\n }\n}\nfunction getOriginFromTransition(key, transition) {\n if (!transition)\n return;\n const valueTransition = transition[key] || transition[\"default\"] || transition;\n return valueTransition.from;\n}\nfunction getOrigin(target, transition, visualElement) {\n const origin = {};\n for (const key in target) {\n const transitionOrigin = getOriginFromTransition(key, transition);\n if (transitionOrigin !== undefined) {\n origin[key] = transitionOrigin;\n }\n else {\n const value = visualElement.getValue(key);\n if (value) {\n origin[key] = value.get();\n }\n }\n }\n return origin;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/interfaces/visual-element-target.mjs\n\n\n\n\n\n\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, definition, { delay = 0, transitionOverride, type } = {}) {\n let { transition = visualElement.getDefaultTransition(), transitionEnd, ...target } = visualElement.makeTargetAnimatable(definition);\n const willChange = visualElement.getValue(\"willChange\");\n if (transitionOverride)\n transition = transitionOverride;\n const animations = [];\n const animationTypeState = type &&\n visualElement.animationState &&\n visualElement.animationState.getState()[type];\n for (const key in target) {\n const value = visualElement.getValue(key);\n const valueTarget = target[key];\n if (!value ||\n valueTarget === undefined ||\n (animationTypeState &&\n shouldBlockAnimation(animationTypeState, key))) {\n continue;\n }\n const valueTransition = {\n delay,\n elapsed: 0,\n ...transition,\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 if (window.HandoffAppearAnimations && !value.hasAnimated) {\n const appearId = visualElement.getProps()[optimizedAppearDataAttribute];\n if (appearId) {\n valueTransition.elapsed = window.HandoffAppearAnimations(appearId, key, value, frame_frame);\n valueTransition.syncStart = true;\n }\n }\n value.start(animateMotionValue(key, value, valueTarget, visualElement.shouldReduceMotion && transformProps.has(key)\n ? { type: false }\n : valueTransition));\n const animation = value.animation;\n if (isWillChangeMotionValue(willChange)) {\n willChange.add(key);\n animation.then(() => willChange.remove(key));\n }\n animations.push(animation);\n }\n if (transitionEnd) {\n Promise.all(animations).then(() => {\n transitionEnd && setTarget(visualElement, transitionEnd);\n });\n }\n return animations;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/interfaces/visual-element-variant.mjs\n\n\n\nfunction animateVariant(visualElement, variant, options = {}) {\n const resolved = resolveVariant(visualElement, variant, options.custom);\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, delayChildren + forwardDelay, 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, delayChildren = 0, staggerChildren = 0, staggerDirection = 1, options) {\n const animations = [];\n const maxStaggerDuration = (visualElement.variantChildren.size - 1) * staggerChildren;\n const generateStaggerDuration = staggerDirection === 1\n ? (i = 0) => i * staggerChildren\n : (i = 0) => maxStaggerDuration - i * staggerChildren;\n Array.from(visualElement.variantChildren)\n .sort(sortByTreeOrder)\n .forEach((child, i) => {\n child.notify(\"AnimationStart\", variant);\n animations.push(animateVariant(child, variant, {\n ...options,\n delay: delayChildren + generateStaggerDuration(i),\n }).then(() => child.notify(\"AnimationComplete\", variant)));\n });\n return Promise.all(animations);\n}\nfunction sortByTreeOrder(a, b) {\n return a.sortNodePosition(b);\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/interfaces/visual-element.mjs\n\n\n\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(() => visualElement.notify(\"AnimationComplete\", definition));\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/utils/animation-state.mjs\n\n\n\n\n\n\n\n\nconst reversePriorityOrder = [...variantPriorityOrder].reverse();\nconst numAnimationTypes = variantPriorityOrder.length;\nfunction animateList(visualElement) {\n return (animations) => Promise.all(animations.map(({ animation, options }) => animateVisualElement(visualElement, animation, options)));\n}\nfunction createAnimationState(visualElement) {\n let animate = animateList(visualElement);\n const state = createState();\n let isInitialRender = true;\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 = (acc, definition) => {\n const resolved = resolveVariant(visualElement, definition);\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(options, changedActiveType) {\n const props = visualElement.getProps();\n const context = visualElement.getVariantContext(true) || {};\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 ? props[type] : 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] && prop !== props[type] && propIsVariant;\n /**\n *\n */\n if (isInherited &&\n isInitialRender &&\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 * 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 /**\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, {});\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 removedKeys.delete(key);\n typeState.needsAnimating[key] = true;\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 if (next !== prev) {\n /**\n * If both values are keyframes, we need to shallow compare them to\n * detect whether any value has changed. If it has, we animate it.\n */\n if (isKeyframesTarget(next) && isKeyframesTarget(prev)) {\n if (!shallowCompare(next, prev) || variantDidChange) {\n markToAnimate(key);\n }\n else {\n /**\n * If it hasn't changed, we want to ensure it doesn't animate by\n * adding it to the list of protected keys.\n */\n typeState.protectedKeys[key] = true;\n }\n }\n else if (next !== undefined) {\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 /**\n *\n */\n if (typeState.isActive) {\n encounteredKeys = { ...encounteredKeys, ...resolvedValues };\n }\n if (isInitialRender && visualElement.blockInitialAnimation) {\n shouldAnimateType = false;\n }\n /**\n * If this is an inherited prop we want to hard-block animations\n * TODO: Test as this should probably still handle animations triggered\n * by removed values?\n */\n if (shouldAnimateType && !isInherited) {\n animations.push(...definitionList.map((animation) => ({\n animation: animation,\n options: { type, ...options },\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 removedKeys.forEach((key) => {\n const fallbackTarget = visualElement.getBaseTarget(key);\n if (fallbackTarget !== undefined) {\n fallbackAnimation[key] = fallbackTarget;\n }\n });\n animations.push({ animation: fallbackAnimation });\n }\n let shouldAnimate = Boolean(animations.length);\n if (isInitialRender &&\n props.initial === false &&\n !visualElement.manuallyAnimateOnMount) {\n shouldAnimate = false;\n }\n isInitialRender = 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, options) {\n var _a;\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 (_a = visualElement.variantChildren) === null || _a === void 0 ? void 0 : _a.forEach((child) => { var _a; return (_a = child.animationState) === null || _a === void 0 ? void 0 : _a.setActive(type, isActive); });\n state[type].isActive = isActive;\n const animations = animateChanges(options, 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 };\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/motion/features/animation/index.mjs\n\n\n\n\nclass 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 this.unmount();\n if (isAnimationControls(animate)) {\n this.unmount = 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}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/motion/features/animation/exit.mjs\n\n\nlet id = 0;\nclass ExitAnimationFeature extends Feature {\n constructor() {\n super(...arguments);\n this.id = id++;\n }\n update() {\n if (!this.node.presenceContext)\n return;\n const { isPresent, onExitComplete, custom } = this.node.presenceContext;\n const { isPresent: prevIsPresent } = this.node.prevPresenceContext || {};\n if (!this.node.animationState || isPresent === prevIsPresent) {\n return;\n }\n const exitAnimation = this.node.animationState.setActive(\"exit\", !isPresent, { custom: custom !== null && custom !== void 0 ? custom : this.node.getProps().custom });\n if (onExitComplete && !isPresent) {\n exitAnimation.then(() => onExitComplete(this.id));\n }\n }\n mount() {\n const { register } = this.node.presenceContext || {};\n if (register) {\n this.unmount = register(this.id);\n }\n }\n unmount() { }\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/motion/features/animations.mjs\n\n\n\nconst animations = {\n animation: {\n Feature: AnimationFeature,\n },\n exit: {\n Feature: ExitAnimationFeature,\n },\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/distance.mjs\nconst distance = (a, b) => Math.abs(a - b);\nfunction 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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs\n\n\n\n\n\n\n\n\n/**\n * @internal\n */\nclass PanSession {\n constructor(event, handlers, { transformPagePoint } = {}) {\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 * @internal\n */\n this.handlers = {};\n this.updatePoint = () => {\n if (!(this.lastMoveEvent && this.lastMoveEventInfo))\n return;\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 cursoe.\n const isDistancePastThreshold = distance2D(info.offset, { x: 0, y: 0 }) >= 3;\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.lastMoveEventInfo = transformPoint(info, this.transformPagePoint);\n // Throttle mouse move event to once per frame\n frame_frame.update(this.updatePoint, true);\n };\n this.handlePointerUp = (event, info) => {\n this.end();\n if (!(this.lastMoveEvent && this.lastMoveEventInfo))\n return;\n const { onEnd, onSessionEnd } = this.handlers;\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.handlers = handlers;\n this.transformPagePoint = transformPagePoint;\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(window, \"pointermove\", this.handlePointerMove), addPointerEvent(window, \"pointerup\", this.handlePointerUp), addPointerEvent(window, \"pointercancel\", this.handlePointerUp));\n }\n updateHandlers(handlers) {\n this.handlers = handlers;\n }\n end() {\n this.removeListeners && this.removeListeners();\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: PanSession_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 PanSession_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 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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/projection/geometry/delta-calc.mjs\n\n\nfunction calcLength(axis) {\n return axis.max - axis.min;\n}\nfunction isNear(value, target = 0, maxDistance = 0.01) {\n return Math.abs(value - target) <= maxDistance;\n}\nfunction calcAxisDelta(delta, source, target, origin = 0.5) {\n delta.origin = origin;\n delta.originPoint = mix(source.min, source.max, delta.origin);\n delta.scale = calcLength(target) / calcLength(source);\n if (isNear(delta.scale, 1, 0.0001) || isNaN(delta.scale))\n delta.scale = 1;\n delta.translate =\n mix(target.min, target.max, delta.origin) - delta.originPoint;\n if (isNear(delta.translate) || isNaN(delta.translate))\n delta.translate = 0;\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) {\n target.min = parent.min + relative.min;\n target.max = target.min + calcLength(relative);\n}\nfunction calcRelativeBox(target, relative, parent) {\n calcRelativeAxis(target.x, relative.x, parent.x);\n calcRelativeAxis(target.y, relative.y, parent.y);\n}\nfunction calcRelativeAxisPosition(target, layout, parent) {\n target.min = layout.min - parent.min;\n target.max = target.min + calcLength(layout);\n}\nfunction calcRelativePosition(target, layout, parent) {\n calcRelativeAxisPosition(target.x, layout.x, parent.x);\n calcRelativeAxisPosition(target.y, layout.y, parent.y);\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs\n\n\n\n\n\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 */\nfunction 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 ? mix(min, point, elastic.min) : 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 ? mix(max, point, elastic.max) : Math.min(point, max);\n }\n return point;\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 */\nfunction 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 */\nfunction 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 */\nfunction 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 [min, max] = [max, min];\n }\n return { min, max };\n}\n/**\n * Calculate viewport constraints when defined as another viewport-relative box\n */\nfunction 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 */\nfunction constraints_calcOrigin(source, target) {\n let origin = 0.5;\n const sourceLength = calcLength(source);\n const targetLength = calcLength(target);\n if (targetLength > sourceLength) {\n origin = progress(target.min, target.max - sourceLength, source.min);\n }\n else if (sourceLength > targetLength) {\n origin = progress(source.min, source.max - targetLength, target.min);\n }\n return clamp(0, 1, origin);\n}\n/**\n * Rebase the calculated viewport constraints relative to the layout.min point.\n */\nfunction 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}\nconst defaultElastic = 0.35;\n/**\n * Accepts a dragElastic prop and returns resolved elastic values for each axis.\n */\nfunction 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}\nfunction resolveAxisElastic(dragElastic, minLabel, maxLabel) {\n return {\n min: resolvePointElastic(dragElastic, minLabel),\n max: resolvePointElastic(dragElastic, maxLabel),\n };\n}\nfunction resolvePointElastic(dragElastic, label) {\n return typeof dragElastic === \"number\"\n ? dragElastic\n : dragElastic[label] || 0;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/projection/geometry/models.mjs\nconst 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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/projection/utils/each-axis.mjs\nfunction eachAxis(callback) {\n return [callback(\"x\"), callback(\"y\")];\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/projection/geometry/conversion.mjs\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/projection/utils/has-transform.mjs\nfunction 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}\nfunction has2DTranslate(values) {\n return is2DTranslate(values.x) || is2DTranslate(values.y);\n}\nfunction is2DTranslate(value) {\n return value && value !== \"0%\";\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/projection/geometry/delta-apply.mjs\n\n\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}\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 instance = node.instance;\n if (instance &&\n instance.style &&\n instance.style.display === \"contents\") {\n continue;\n }\n if (isSharedTransition &&\n node.options.layoutScroll &&\n node.scroll &&\n node !== node.root) {\n transformBox(box, {\n x: -node.scroll.offset.x,\n y: -node.scroll.offset.y,\n });\n }\n if (delta) {\n // Incoporate each ancestor's scale into a culmulative 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);\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 treeScale.x = snapToDefault(treeScale.x);\n treeScale.y = snapToDefault(treeScale.y);\n}\nfunction snapToDefault(scale) {\n if (Number.isInteger(scale))\n return scale;\n return scale > 1.0000000000001 || scale < 0.999999999999 ? scale : 1;\n}\nfunction translateAxis(axis, distance) {\n axis.min = axis.min + distance;\n axis.max = 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, transforms, [key, scaleKey, originKey]) {\n const axisOrigin = transforms[originKey] !== undefined ? transforms[originKey] : 0.5;\n const originPoint = mix(axis.min, axis.max, axisOrigin);\n // Apply the axis delta to the final axis\n applyAxisDelta(axis, transforms[key], transforms[scaleKey], originPoint, transforms.scale);\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 * Apply a transform to a box from the latest resolved motion values.\n */\nfunction transformBox(box, transform) {\n transformAxis(box.x, transform, xKeys);\n transformAxis(box.y, transform, yKeys);\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/projection/utils/measure.mjs\n\n\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst elementDragControls = new WeakMap();\n/**\n *\n */\n// let latestPointerEvent: PointerEvent\nclass VisualElementDragControls {\n constructor(visualElement) {\n // This is a reference to the global drag gesture lock, ensuring only one component\n // can \"capture\" the drag of one or both axes.\n // TODO: Look into moving this into pansession?\n this.openGlobalLock = 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 this.visualElement = visualElement;\n }\n start(originEvent, { snapToCursor = false } = {}) {\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 // Stop any animations on both axis values immediately. This allows the user to throw and catch\n // the component.\n this.stopAnimation();\n if (snapToCursor) {\n this.snapToCursor(extractEventInfo(event, \"page\").point);\n }\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.openGlobalLock)\n this.openGlobalLock();\n this.openGlobalLock = getGlobalLock(drag);\n // If we don 't have the lock, don't start dragging\n if (!this.openGlobalLock)\n return;\n }\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\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_frame.update(() => onDragStart(event, info), false, true);\n }\n const { animationState } = this.visualElement;\n animationState && animationState.setActive(\"whileDrag\", true);\n };\n const onMove = (event, info) => {\n // latestPointerEvent = event\n const { dragPropagation, dragDirectionLock, onDirectionLock, onDrag, } = this.getProps();\n // If we didn't successfully receive the gesture lock, early return.\n if (!dragPropagation && !this.openGlobalLock)\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 onDrag && onDrag(event, info);\n };\n const onSessionEnd = (event, info) => this.stop(event, info);\n this.panSession = new PanSession(originEvent, {\n onSessionStart,\n onStart,\n onMove,\n onSessionEnd,\n }, { transformPagePoint: this.visualElement.getTransformPagePoint() });\n }\n stop(event, info) {\n const isDragging = this.isDragging;\n this.cancel();\n if (!isDragging)\n return;\n const { velocity } = info;\n this.startAnimation(velocity);\n const { onDragEnd } = this.getProps();\n if (onDragEnd) {\n frame_frame.update(() => onDragEnd(event, info));\n }\n }\n cancel() {\n this.isDragging = false;\n const { projection, animationState } = this.visualElement;\n if (projection) {\n projection.isAnimationBlocked = false;\n }\n this.panSession && this.panSession.end();\n this.panSession = undefined;\n const { dragPropagation } = this.getProps();\n if (!dragPropagation && this.openGlobalLock) {\n this.openGlobalLock();\n this.openGlobalLock = null;\n }\n animationState && animationState.setActive(\"whileDrag\", false);\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 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.\n */\n if (prevConstraints !== this.constraints &&\n layout &&\n this.constraints &&\n !this.hasMutatedConstraints) {\n eachAxis((axis) => {\n if (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.\");\n const { projection } = this.visualElement;\n // TODO\n if (!projection || !projection.layout)\n return false;\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)\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 return axisValue.start(animateMotionValue(axis, axisValue, 0, transition));\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, (props.initial ? props.initial[axis] : undefined) || 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 axisValue.set(point[axis] - mix(min, max, 0.5));\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) {\n const latest = axisValue.get();\n boxProgress[axis] = constraints_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 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(mix(min, max, boxProgress[axis]));\n });\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 drag && dragListener && this.start(event);\n });\n const measureDragConstraints = () => {\n const { dragConstraints } = this.getProps();\n if (isRefObject(dragConstraints)) {\n this.constraints = this.resolveRefConstraints();\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 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 };\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 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}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/gestures/drag/index.mjs\n\n\n\n\nclass 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 unmount() {\n this.removeGroupControls();\n this.removeListeners();\n }\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/gestures/pan/index.mjs\n\n\n\n\n\n\nconst asyncHandler = (handler) => (event, info) => {\n if (handler) {\n frame_frame.update(() => handler(event, info));\n }\n};\nclass PanGesture extends Feature {\n constructor() {\n super(...arguments);\n this.removePointerDownListener = noop;\n }\n onPointerDown(pointerDownEvent) {\n this.session = new PanSession(pointerDownEvent, this.createPanHandlers(), { transformPagePoint: this.node.getTransformPagePoint() });\n }\n createPanHandlers() {\n const { onPanSessionStart, onPanStart, onPan, onPanEnd } = this.node.getProps();\n return {\n onSessionStart: asyncHandler(onPanSessionStart),\n onStart: asyncHandler(onPanStart),\n onMove: onPan,\n onEnd: (event, info) => {\n delete this.session;\n if (onPanEnd) {\n frame_frame.update(() => 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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs\n\n\n\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 the tree, but\n * `AnimatePresence` won't really remove it until `safeToRemove` has been called.\n *\n * @public\n */\nfunction usePresence() {\n const context = (0,react.useContext)(PresenceContext_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 = (0,react.useId)();\n (0,react.useEffect)(() => register(id), []);\n const safeToRemove = () => onExitComplete && onExitComplete(id);\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 */\nfunction useIsPresent() {\n return isPresent(useContext(PresenceContext));\n}\nfunction isPresent(context) {\n return context === null ? true : context.isPresent;\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/projection/node/state.mjs\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/projection/styles/scale-border-radius.mjs\n\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/projection/styles/scale-box-shadow.mjs\n\n\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 = mix(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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs\n\n\n\n\n\n\n\n\n\n\nclass MeasureLayoutWithContext extends react.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 addScaleCorrector(defaultScaleCorrectors);\n if (projection) {\n if (layoutGroup.group)\n layoutGroup.group.add(projection);\n if (switchLayoutGroup && switchLayoutGroup.register && layoutId) {\n switchLayoutGroup.register(projection);\n }\n projection.root.didUpdate();\n projection.addEventListener(\"animationComplete\", () => {\n this.safeToRemove();\n });\n projection.setOptions({\n ...projection.options,\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.projection;\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 (drag ||\n prevProps.layoutDependency !== layoutDependency ||\n layoutDependency === undefined) {\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_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 { projection } = this.props.visualElement;\n if (projection) {\n projection.root.didUpdate();\n queueMicrotask(() => {\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 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}\nfunction MeasureLayout(props) {\n const [isPresent, safeToRemove] = usePresence();\n const layoutGroup = (0,react.useContext)(LayoutGroupContext);\n return (react.createElement(MeasureLayoutWithContext, { ...props, layoutGroup: layoutGroup, switchLayoutGroup: (0,react.useContext)(SwitchLayoutGroupContext), isPresent: isPresent, safeToRemove: safeToRemove }));\n}\nconst defaultScaleCorrectors = {\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};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/projection/animation/mix-values.mjs\n\n\n\n\n\n\nconst borders = [\"TopLeft\", \"TopRight\", \"BottomLeft\", \"BottomRight\"];\nconst numBorders = borders.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 = mix(0, \n // TODO Reinstate this if only child\n lead.opacity !== undefined ? lead.opacity : 1, easeCrossfadeIn(progress));\n target.opacityExit = mix(follow.opacity !== undefined ? follow.opacity : 1, 0, easeCrossfadeOut(progress));\n }\n else if (isOnlyMember) {\n target.opacity = mix(follow.opacity !== undefined ? follow.opacity : 1, lead.opacity !== undefined ? lead.opacity : 1, progress);\n }\n /**\n * Mix border radius\n */\n for (let i = 0; i < numBorders; i++) {\n const borderLabel = `border${borders[i]}Radius`;\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(mix(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 = mix(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}\n// /**\n// * We only want to mix the background color if there's a follow element\n// * that we're not crossfading opacity between. For instance with switch\n// * AnimateSharedLayout animations, this helps the illusion of a continuous\n// * element being animated but also cuts down on the number of paints triggered\n// * for elements where opacity is doing that work for us.\n// */\n// if (\n// !hasFollowElement &&\n// latestLeadValues.backgroundColor &&\n// latestFollowValues.backgroundColor\n// ) {\n// /**\n// * This isn't ideal performance-wise as mixColor is creating a new function every frame.\n// * We could probably create a mixer that runs at the start of the animation but\n// * the idea behind the crossfader is that it runs dynamically between two potentially\n// * changing targets (ie opacity or borderRadius may be animating independently via variants)\n// */\n// leadState.backgroundColor = followState.backgroundColor = mixColor(\n// latestFollowValues.backgroundColor as string,\n// latestLeadValues.backgroundColor as string\n// )(p)\n// }\nconst easeCrossfadeIn = compress(0, 0.5, circOut);\nconst easeCrossfadeOut = 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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/projection/geometry/copy.mjs\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\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/projection/geometry/delta-remove.mjs\n\n\n\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 = mix(sourceAxis.min, sourceAxis.max, translate / 100);\n translate = relativeProgress - sourceAxis.min;\n }\n if (typeof translate !== \"number\")\n return;\n let originPoint = mix(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 delta_remove_xKeys = [\"x\", \"scaleX\", \"originX\"];\nconst delta_remove_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, delta_remove_xKeys, originBox ? originBox.x : undefined, sourceBox ? sourceBox.x : undefined);\n removeAxisTransforms(box.y, transforms, delta_remove_yKeys, originBox ? originBox.y : undefined, sourceBox ? sourceBox.y : undefined);\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/projection/geometry/utils.mjs\n\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 boxEquals(a, b) {\n return (a.x.min === b.x.min &&\n a.x.max === b.x.max &&\n a.y.min === b.y.min &&\n a.y.max === b.y.max);\n}\nfunction boxEqualsRounded(a, b) {\n return (Math.round(a.x.min) === Math.round(b.x.min) &&\n Math.round(a.x.max) === Math.round(b.x.max) &&\n Math.round(a.y.min) === Math.round(b.y.min) &&\n Math.round(a.y.max) === Math.round(b.y.max));\n}\nfunction aspectRatio(box) {\n return calcLength(box.x) / calcLength(box.y);\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/projection/shared/stack.mjs\n\n\nclass NodeStack {\n constructor() {\n this.members = [];\n }\n add(node) {\n addUniqueItem(this.members, node);\n node.scheduleRender();\n }\n remove(node) {\n removeItem(this.members, node);\n if (node === this.prevLead) {\n this.prevLead = undefined;\n }\n if (node === this.lead) {\n const prevLead = this.members[this.members.length - 1];\n if (prevLead) {\n this.promote(prevLead);\n }\n }\n }\n relegate(node) {\n const indexOfNode = this.members.findIndex((member) => node === member);\n if (indexOfNode === 0)\n return false;\n /**\n * Find the next projection node that is present\n */\n let prevLead;\n for (let i = indexOfNode; i >= 0; i--) {\n const member = this.members[i];\n if (member.isPresent !== false) {\n prevLead = member;\n break;\n }\n }\n if (prevLead) {\n this.promote(prevLead);\n return true;\n }\n else {\n return false;\n }\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.instance && prevLead.scheduleRender();\n node.scheduleRender();\n node.resumeFrom = prevLead;\n if (preserveFollowOpacity) {\n node.resumeFrom.preserveOpacity = true;\n }\n if (prevLead.snapshot) {\n node.snapshot = prevLead.snapshot;\n node.snapshot.latestValues =\n prevLead.animationValues || prevLead.latestValues;\n }\n if (node.root && node.root.isUpdating) {\n node.isLayoutDirty = true;\n }\n const { crossfade } = node.options;\n if (crossfade === false) {\n prevLead.hide();\n }\n /**\n * TODO:\n * - Test border radius when previous node was deleted\n * - boxShadow mixing\n * - Shared between element A in scrolled container and element B (scroll stays the same or changes)\n * - Shared between element A in transformed container and element B (transform stays the same or changes)\n * - Shared between element A in scrolled page and element B (scroll stays the same or changes)\n * ---\n * - Crossfade opacity of root nodes\n * - layoutId changes after animation\n * - layoutId changes mid animation\n */\n }\n }\n exitAnimationComplete() {\n this.members.forEach((node) => {\n const { options, resumingFrom } = node;\n options.onExitComplete && options.onExitComplete();\n if (resumingFrom) {\n resumingFrom.options.onExitComplete &&\n resumingFrom.options.onExitComplete();\n }\n });\n }\n scheduleRender() {\n this.members.forEach((node) => {\n node.instance && node.scheduleRender(false);\n });\n }\n /**\n * Clear any leads that have been removed this render to prevent them from being\n * used in future animations and to prevent memory leaks\n */\n removeLeadSnapshot() {\n if (this.lead && this.lead.snapshot) {\n this.lead.snapshot = undefined;\n }\n }\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/projection/styles/transform.mjs\nfunction 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 if (xTranslate || yTranslate) {\n transform = `translate3d(${xTranslate}px, ${yTranslate}px, 0) `;\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 { rotate, rotateX, rotateY } = latestTransform;\n if (rotate)\n transform += `rotate(${rotate}deg) `;\n if (rotateX)\n transform += `rotateX(${rotateX}deg) `;\n if (rotateY)\n transform += `rotateY(${rotateY}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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/utils/compare-by-depth.mjs\nconst compareByDepth = (a, b) => a.depth - b.depth;\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/utils/flat-tree.mjs\n\n\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/delay.mjs\n\n\n/**\n * Timeout defined in ms\n */\nfunction delay(callback, timeout) {\n const start = performance.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_frame.read(checkElapsed, true);\n return () => cancelFrame(checkElapsed);\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/debug/record.mjs\nfunction record(data) {\n if (window.MotionDebug) {\n window.MotionDebug.record(data);\n }\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/utils/is-svg-element.mjs\nfunction isSVGElement(element) {\n return element instanceof SVGElement && element.tagName !== \"svg\";\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/animation/interfaces/single-value.mjs\n\n\n\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\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 create_projection_node_id = 0;\n/**\n * Use a mutable data object for debug data so as to not create a new\n * object every frame.\n */\nconst projectionFrameData = {\n type: \"projectionFrame\",\n totalNodes: 0,\n resolvedTargetDeltas: 0,\n recalculatedProjection: 0,\n};\nfunction createProjectionNode({ attachResizeListener, defaultParent, measureScroll, checkIsScrollRoot, resetTransform, }) {\n return class ProjectionNode {\n constructor(latestValues = {}, parent = defaultParent === null || defaultParent === void 0 ? void 0 : defaultParent()) {\n /**\n * A unique ID generated for every projection node.\n */\n this.id = create_projection_node_id++;\n /**\n * An id that represents a unique session instigated by startUpdate.\n */\n this.animationId = 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 * 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 // Note: Currently only running on root node\n this.updateScheduled = 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 /**\n * Reset debug counts. Manually resetting rather than creating a new\n * object each frame.\n */\n projectionFrameData.totalNodes =\n projectionFrameData.resolvedTargetDeltas =\n projectionFrameData.recalculatedProjection =\n 0;\n this.nodes.forEach(propagateDirtyNodes);\n this.nodes.forEach(resolveTargetDelta);\n this.nodes.forEach(calcProjection);\n this.nodes.forEach(cleanDirtyNodes);\n record(projectionFrameData);\n };\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, isLayoutDirty = this.root.hasTreeAnimated) {\n if (this.instance)\n return;\n this.isSVG = isSVGElement(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 (isLayoutDirty && (layout || layoutId)) {\n this.isLayoutDirty = true;\n }\n if (attachResizeListener) {\n let cancelDelay;\n const resizeUnblockUpdate = () => (this.root.updateBlockedByResize = false);\n attachResizeListener(instance, () => {\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, hasRelativeTargetChanged, 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 targetChanged = !this.targetLayout ||\n !boxEqualsRounded(this.targetLayout, newLayout) ||\n hasRelativeTargetChanged;\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 && hasRelativeTargetChanged;\n if (this.options.layoutRoot ||\n (this.resumeFrom && this.resumeFrom.instance) ||\n hasOnlyRelativeTargetChanged ||\n (hasLayoutChanged &&\n (targetChanged || !this.currentAnimation))) {\n if (this.resumeFrom) {\n this.resumingFrom = this.resumeFrom;\n this.resumingFrom.resumingFrom = undefined;\n }\n this.setAnimationOrigin(delta, hasOnlyRelativeTargetChanged);\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 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 commited 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 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(resetRotation);\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 !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 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 this.unblockUpdate();\n this.clearAllSnapshots();\n this.nodes.forEach(clearMeasurements);\n return;\n }\n if (!this.isUpdating) {\n this.nodes.forEach(clearIsLayoutDirty);\n }\n this.isUpdating = false;\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 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 = performance.now();\n frameData.delta = clamp(0, 1000 / 60, now - frameData.timestamp);\n frameData.timestamp = now;\n frameData.isProcessing = true;\n steps.update.process(frameData);\n steps.preRender.process(frameData);\n steps.render.process(frameData);\n frameData.isProcessing = false;\n }\n didUpdate() {\n if (!this.updateScheduled) {\n this.updateScheduled = true;\n queueMicrotask(() => this.update());\n }\n }\n clearAllSnapshots() {\n this.nodes.forEach(clearSnapshot);\n this.sharedNodes.forEach(removeLeadSnapshots);\n }\n scheduleUpdateProjection() {\n frame_frame.preRender(this.updateProjection, false, true);\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_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 }\n updateLayout() {\n if (!this.instance)\n return;\n // TODO: Incorporate into a forwarded scroll offset\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.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) {\n this.scroll = {\n animationId: this.root.animationId,\n phase,\n isRoot: checkIsScrollRoot(this.instance),\n offset: measureScroll(this.instance),\n };\n }\n }\n resetTransform() {\n if (!resetTransform)\n return;\n const isResetRequested = this.isLayoutDirty || this.shouldResetTransform;\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 (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 // 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 return box;\n }\n removeElementScroll(box) {\n const boxWithoutScroll = createBox();\n copyBoxInto(boxWithoutScroll, box);\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.isRoot) {\n copyBoxInto(boxWithoutScroll, box);\n const { scroll: rootScroll } = this.root;\n /**\n * Undo the application of page scroll that was originally added\n * to the measured bounding box.\n */\n if (rootScroll) {\n translateAxis(boxWithoutScroll.x, -rootScroll.offset.x);\n translateAxis(boxWithoutScroll.y, -rootScroll.offset.y);\n }\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) {\n const withTransforms = 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 transformBox(withTransforms, {\n x: -node.scroll.offset.x,\n y: -node.scroll.offset.y,\n });\n }\n if (!hasTransform(node.latestValues))\n continue;\n transformBox(withTransforms, node.latestValues);\n }\n if (hasTransform(this.latestValues)) {\n transformBox(withTransforms, this.latestValues);\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 (!node.instance)\n continue;\n if (!hasTransform(node.latestValues))\n continue;\n hasScale(node.latestValues) && node.updateSnapshot();\n const sourceBox = createBox();\n const nodeBox = node.measurePageBox();\n copyBoxInto(sourceBox, nodeBox);\n removeBoxTransforms(boxWithoutTransform, node.latestValues, node.snapshot ? node.snapshot.layoutBox : undefined, 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 var _a;\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 ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.isProjectionDirty) ||\n this.attemptToResolveRelativeTarget);\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 /**\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 // TODO If this is unsuccessful this currently happens every frame\n if (!this.targetDelta && !this.relativeTarget) {\n // TODO: This is a semi-repetition of further down this function, make DRY\n const relativeParent = this.getClosestProjectingParent();\n if (relativeParent &&\n relativeParent.layout &&\n this.animationProgress !== 1) {\n this.relativeParent = relativeParent;\n this.forceRelativeParentToResolveTarget();\n this.relativeTarget = createBox();\n this.relativeTargetOrigin = createBox();\n calcRelativePosition(this.relativeTargetOrigin, this.layout.layoutBox, relativeParent.layout.layoutBox);\n copyBoxInto(this.relativeTarget, this.relativeTargetOrigin);\n }\n else {\n this.relativeParent = this.relativeTarget = undefined;\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);\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 // TODO: This is creating a new object every frame\n this.target = this.applyTransform(this.layout.layoutBox);\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 const relativeParent = this.getClosestProjectingParent();\n if (relativeParent &&\n Boolean(relativeParent.resumingFrom) ===\n Boolean(this.resumingFrom) &&\n !relativeParent.options.layoutScroll &&\n relativeParent.target &&\n this.animationProgress !== 1) {\n this.relativeParent = relativeParent;\n this.forceRelativeParentToResolveTarget();\n this.relativeTarget = createBox();\n this.relativeTargetOrigin = createBox();\n calcRelativePosition(this.relativeTargetOrigin, this.target, relativeParent.target);\n copyBoxInto(this.relativeTarget, this.relativeTargetOrigin);\n }\n else {\n this.relativeParent = this.relativeTarget = undefined;\n }\n }\n /**\n * Increase debug counter for resolved target deltas\n */\n projectionFrameData.resolvedTargetDeltas++;\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 calcProjection() {\n var _a;\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 || ((_a = this.parent) === null || _a === void 0 ? void 0 : _a.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 }\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.projectionTransform) {\n this.projectionDelta = createDelta();\n this.projectionTransform = \"none\";\n this.scheduleRender();\n }\n return;\n }\n if (!this.projectionDelta) {\n this.projectionDelta = createDelta();\n this.projectionDeltaWithTransform = createDelta();\n }\n const prevProjectionTransform = this.projectionTransform;\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 this.projectionTransform = buildProjectionTransform(this.projectionDelta, this.treeScale);\n if (this.projectionTransform !== prevProjectionTransform ||\n this.treeScale.x !== prevTreeScaleX ||\n this.treeScale.y !== prevTreeScaleY) {\n this.hasProjected = true;\n this.scheduleRender();\n this.notifyListeners(\"projectionUpdate\", target);\n }\n /**\n * Increase debug counter for recalculated projections\n */\n projectionFrameData.recalculatedProjection++;\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.scheduleRender && this.options.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 setAnimationOrigin(delta, hasOnlyRelativeTargetChanged = false) {\n const snapshot = this.snapshot;\n const snapshotLatestValues = snapshot\n ? snapshot.latestValues\n : {};\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 this.mixTargetDelta = (latest) => {\n const progress = latest / 1000;\n mixAxisDelta(targetDelta.x, delta.x, progress);\n mixAxisDelta(targetDelta.y, delta.y, progress);\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);\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 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 && this.currentAnimation.stop();\n if (this.resumingFrom && this.resumingFrom.currentAnimation) {\n this.resumingFrom.currentAnimation.stop();\n }\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_frame.update(() => {\n globalProjectionState.hasAnimatedSinceResize = true;\n this.currentAnimation = animateSingleValue(0, animationTarget, {\n ...options,\n onUpdate: (latest) => {\n this.mixTargetDelta(latest);\n options.onUpdate && options.onUpdate(latest);\n },\n onComplete: () => {\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 var _a;\n const { layoutId } = this.options;\n return layoutId ? ((_a = this.getStack()) === null || _a === void 0 ? void 0 : _a.lead) || this : this;\n }\n getPrevLead() {\n var _a;\n const { layoutId } = this.options;\n return layoutId ? (_a = this.getStack()) === null || _a === void 0 ? void 0 : _a.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 resetRotation() {\n const { visualElement } = this.options;\n if (!visualElement)\n return;\n // If there's no detected rotation values, we can early return without a forced render.\n let hasRotate = 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.rotate ||\n latestValues.rotateX ||\n latestValues.rotateY ||\n latestValues.rotateZ) {\n hasRotate = true;\n }\n // If there's no rotation values, we don't need to do any more.\n if (!hasRotate)\n return;\n const resetValues = {};\n // Check the rotate value of all axes and reset to 0\n for (let i = 0; i < transformAxes.length; i++) {\n const key = \"rotate\" + transformAxes[i];\n // Record the rotation and then temporarily set it to 0\n if (latestValues[key]) {\n resetValues[key] = latestValues[key];\n visualElement.setStaticValue(key, 0);\n }\n }\n // Force a render of this element to apply the transform with all 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 }\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 getProjectionStyles(styleProp = {}) {\n var _a, _b;\n // TODO: Return lifecycle-persistent object\n const styles = {};\n if (!this.instance || this.isSVG)\n return styles;\n if (!this.isVisible) {\n return { visibility: \"hidden\" };\n }\n else {\n styles.visibility = \"\";\n }\n const transformTemplate = this.getTransformTemplate();\n if (this.needsReset) {\n this.needsReset = false;\n styles.opacity = \"\";\n styles.pointerEvents =\n resolveMotionValue(styleProp.pointerEvents) || \"\";\n styles.transform = transformTemplate\n ? transformTemplate(this.latestValues, \"\")\n : \"none\";\n return styles;\n }\n const lead = this.getLead();\n if (!this.projectionDelta || !this.layout || !lead.target) {\n const emptyStyles = {};\n if (this.options.layoutId) {\n emptyStyles.opacity =\n this.latestValues.opacity !== undefined\n ? this.latestValues.opacity\n : 1;\n emptyStyles.pointerEvents =\n resolveMotionValue(styleProp.pointerEvents) || \"\";\n }\n if (this.hasProjected && !hasTransform(this.latestValues)) {\n emptyStyles.transform = transformTemplate\n ? transformTemplate({}, \"\")\n : \"none\";\n this.hasProjected = false;\n }\n return emptyStyles;\n }\n const valuesToRender = lead.animationValues || lead.latestValues;\n this.applyTransformsToTarget();\n styles.transform = buildProjectionTransform(this.projectionDeltaWithTransform, this.treeScale, valuesToRender);\n if (transformTemplate) {\n styles.transform = transformTemplate(valuesToRender, styles.transform);\n }\n const { x, y } = this.projectionDelta;\n styles.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 styles.opacity =\n lead === this\n ? (_b = (_a = valuesToRender.opacity) !== null && _a !== void 0 ? _a : this.latestValues.opacity) !== null && _b !== void 0 ? _b : 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 styles.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 } = 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 = styles.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 styles[applyTo[i]] = corrected;\n }\n }\n else {\n styles[key] = corrected;\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 styles.pointerEvents =\n lead === this\n ? resolveMotionValue(styleProp.pointerEvents) || \"\"\n : \"none\";\n }\n return styles;\n }\n clearSnapshot() {\n this.resumeFrom = this.snapshot = undefined;\n }\n // Only run on root\n resetTree() {\n this.root.nodes.forEach((node) => { var _a; return (_a = node.currentAnimation) === null || _a === void 0 ? void 0 : _a.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 var _a;\n const snapshot = ((_a = node.resumeFrom) === null || _a === void 0 ? void 0 : _a.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 (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 hasRelativeTargetChanged = 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 relativeSnapshot = createBox();\n calcRelativePosition(relativeSnapshot, snapshot.layoutBox, parentSnapshot.layoutBox);\n const relativeLayout = createBox();\n calcRelativePosition(relativeLayout, layout, parentLayout.layoutBox);\n if (!boxEqualsRounded(relativeSnapshot, relativeLayout)) {\n hasRelativeTargetChanged = 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 hasRelativeTargetChanged,\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 projectionFrameData.totalNodes++;\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 clearIsLayoutDirty(node) {\n node.isLayoutDirty = false;\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 resetRotation(node) {\n node.resetRotation();\n}\nfunction removeLeadSnapshots(stack) {\n stack.removeLeadSnapshot();\n}\nfunction mixAxisDelta(output, delta, p) {\n output.translate = mix(delta.translate, 0, p);\n output.scale = mix(delta.scale, 1, p);\n output.origin = delta.origin;\n output.originPoint = delta.originPoint;\n}\nfunction mixAxis(output, from, to, p) {\n output.min = mix(from.min, to.min, p);\n output.max = mix(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.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}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/projection/node/DocumentProjectionNode.mjs\n\n\n\nconst DocumentProjectionNode = createProjectionNode({\n attachResizeListener: (ref, notify) => addDomEvent(ref, \"resize\", notify),\n measureScroll: () => ({\n x: document.documentElement.scrollLeft || document.body.scrollLeft,\n y: document.documentElement.scrollTop || document.body.scrollTop,\n }),\n checkIsScrollRoot: () => true,\n});\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/projection/node/HTMLProjectionNode.mjs\n\n\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/motion/features/drag.mjs\n\n\n\n\n\nconst drag = {\n pan: {\n Feature: PanGesture,\n },\n drag: {\n Feature: DragGesture,\n ProjectionNode: HTMLProjectionNode,\n MeasureLayout: MeasureLayout,\n },\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/utils/css-variables-conversion.mjs\n\n\n\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 = /var\\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\\)/;\nfunction parseCSSVariable(current) {\n const match = splitCSSVariableRegex.exec(current);\n if (!match)\n return [,];\n const [, token, fallback] = match;\n return [token, 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.`);\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 else if (isCSSVariableToken(fallback)) {\n // The fallback might itself be a CSS variable, in which case we attempt to resolve it too.\n return getVariableValue(fallback, element, depth + 1);\n }\n else {\n return fallback;\n }\n}\n/**\n * Resolve CSS variables from\n *\n * @internal\n */\nfunction resolveCSSVariables(visualElement, { ...target }, transitionEnd) {\n const element = visualElement.current;\n if (!(element instanceof Element))\n return { target, transitionEnd };\n // If `transitionEnd` isn't `undefined`, clone it. We could clone `target` and `transitionEnd`\n // only if they change but I think this reads clearer and this isn't a performance-critical path.\n if (transitionEnd) {\n transitionEnd = { ...transitionEnd };\n }\n // Go through existing `MotionValue`s and ensure any existing CSS variables are resolved\n visualElement.values.forEach((value) => {\n const current = value.get();\n if (!isCSSVariableToken(current))\n return;\n const resolved = getVariableValue(current, element);\n if (resolved)\n value.set(resolved);\n });\n // Cycle through every target property and resolve CSS variables. Currently\n // we only read single-var properties like `var(--foo)`, not `calc(var(--foo) + 20px)`\n for (const key in target) {\n const current = target[key];\n if (!isCSSVariableToken(current))\n continue;\n const resolved = getVariableValue(current, element);\n if (!resolved)\n continue;\n // Clone target if it hasn't already been\n target[key] = resolved;\n if (!transitionEnd)\n transitionEnd = {};\n // If the user hasn't already set this key on `transitionEnd`, set it to the unresolved\n // CSS variable. This will ensure that after the animation the component will reflect\n // changes in the value of the CSS variable.\n if (transitionEnd[key] === undefined) {\n transitionEnd[key] = current;\n }\n }\n return { target, transitionEnd };\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/utils/unit-conversion.mjs\n\n\n\n\n\n\n\n\nconst positionalKeys = new Set([\n \"width\",\n \"height\",\n \"top\",\n \"left\",\n \"right\",\n \"bottom\",\n \"x\",\n \"y\",\n \"translateX\",\n \"translateY\",\n]);\nconst isPositionalKey = (key) => positionalKeys.has(key);\nconst hasPositionalKey = (target) => {\n return Object.keys(target).some(isPositionalKey);\n};\nconst isNumOrPxType = (v) => v === number || v === px;\nconst getPosFromMatrix = (matrix, pos) => parseFloat(matrix.split(\", \")[pos]);\nconst getTranslateFromMatrix = (pos2, pos3) => (_bbox, { transform }) => {\n if (transform === \"none\" || !transform)\n return 0;\n const matrix3d = transform.match(/^matrix3d\\((.+)\\)$/);\n if (matrix3d) {\n return getPosFromMatrix(matrix3d[1], pos3);\n }\n else {\n const matrix = transform.match(/^matrix\\((.+)\\)$/);\n if (matrix) {\n return getPosFromMatrix(matrix[1], pos2);\n }\n else {\n return 0;\n }\n }\n};\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 // Apply changes to element before measurement\n if (removedTransforms.length)\n visualElement.render();\n return removedTransforms;\n}\nconst positionalValues = {\n // Dimensions\n width: ({ x }, { paddingLeft = \"0\", paddingRight = \"0\" }) => x.max - x.min - parseFloat(paddingLeft) - parseFloat(paddingRight),\n height: ({ y }, { paddingTop = \"0\", paddingBottom = \"0\" }) => y.max - y.min - parseFloat(paddingTop) - parseFloat(paddingBottom),\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: getTranslateFromMatrix(4, 13),\n y: getTranslateFromMatrix(5, 14),\n};\n// Alias translate longform names\npositionalValues.translateX = positionalValues.x;\npositionalValues.translateY = positionalValues.y;\nconst convertChangedValueTypes = (target, visualElement, changedKeys) => {\n const originBbox = visualElement.measureViewportBox();\n const element = visualElement.current;\n const elementComputedStyle = getComputedStyle(element);\n const { display } = elementComputedStyle;\n const origin = {};\n // If the element is currently set to display: \"none\", make it visible before\n // measuring the target bounding box\n if (display === \"none\") {\n visualElement.setStaticValue(\"display\", target.display || \"block\");\n }\n /**\n * Record origins before we render and update styles\n */\n changedKeys.forEach((key) => {\n origin[key] = positionalValues[key](originBbox, elementComputedStyle);\n });\n // Apply the latest values (as set in checkAndConvertChangedValueTypes)\n visualElement.render();\n const targetBbox = visualElement.measureViewportBox();\n changedKeys.forEach((key) => {\n // Restore styles to their **calculated computed style**, not their actual\n // originally set style. This allows us to animate between equivalent pixel units.\n const value = visualElement.getValue(key);\n value && value.jump(origin[key]);\n target[key] = positionalValues[key](targetBbox, elementComputedStyle);\n });\n return target;\n};\nconst checkAndConvertChangedValueTypes = (visualElement, target, origin = {}, transitionEnd = {}) => {\n target = { ...target };\n transitionEnd = { ...transitionEnd };\n const targetPositionalKeys = Object.keys(target).filter(isPositionalKey);\n // We want to remove any transform values that could affect the element's bounding box before\n // it's measured. We'll reapply these later.\n let removedTransformValues = [];\n let hasAttemptedToRemoveTransformValues = false;\n const changedValueTypeKeys = [];\n targetPositionalKeys.forEach((key) => {\n const value = visualElement.getValue(key);\n if (!visualElement.hasValue(key))\n return;\n let from = origin[key];\n let fromType = findDimensionValueType(from);\n const to = target[key];\n let toType;\n // TODO: The current implementation of this basically throws an error\n // if you try and do value conversion via keyframes. There's probably\n // a way of doing this but the performance implications would need greater scrutiny,\n // as it'd be doing multiple resize-remeasure operations.\n if (isKeyframesTarget(to)) {\n const numKeyframes = to.length;\n const fromIndex = to[0] === null ? 1 : 0;\n from = to[fromIndex];\n fromType = findDimensionValueType(from);\n for (let i = fromIndex; i < numKeyframes; i++) {\n /**\n * Don't allow wildcard keyframes to be used to detect\n * a difference in value types.\n */\n if (to[i] === null)\n break;\n if (!toType) {\n toType = findDimensionValueType(to[i]);\n invariant(toType === fromType ||\n (isNumOrPxType(fromType) && isNumOrPxType(toType)), \"Keyframes must be of the same dimension as the current value\");\n }\n else {\n invariant(findDimensionValueType(to[i]) === toType, \"All keyframes must be of the same type\");\n }\n }\n }\n else {\n toType = findDimensionValueType(to);\n }\n if (fromType !== toType) {\n // If they're both just number or px, convert them both to numbers rather than\n // relying on resize/remeasure to convert (which is wasteful in this situation)\n if (isNumOrPxType(fromType) && isNumOrPxType(toType)) {\n const current = value.get();\n if (typeof current === \"string\") {\n value.set(parseFloat(current));\n }\n if (typeof to === \"string\") {\n target[key] = parseFloat(to);\n }\n else if (Array.isArray(to) && toType === px) {\n target[key] = to.map(parseFloat);\n }\n }\n else if ((fromType === null || fromType === void 0 ? void 0 : fromType.transform) &&\n (toType === null || toType === void 0 ? void 0 : toType.transform) &&\n (from === 0 || to === 0)) {\n // If one or the other value is 0, it's safe to coerce it to the\n // type of the other without measurement\n if (from === 0) {\n value.set(toType.transform(from));\n }\n else {\n target[key] = fromType.transform(to);\n }\n }\n else {\n // If we're going to do value conversion via DOM measurements, we first\n // need to remove non-positional transform values that could affect the bbox measurements.\n if (!hasAttemptedToRemoveTransformValues) {\n removedTransformValues =\n removeNonTranslationalTransform(visualElement);\n hasAttemptedToRemoveTransformValues = true;\n }\n changedValueTypeKeys.push(key);\n transitionEnd[key] =\n transitionEnd[key] !== undefined\n ? transitionEnd[key]\n : target[key];\n value.jump(to);\n }\n }\n });\n if (changedValueTypeKeys.length) {\n const scrollY = changedValueTypeKeys.indexOf(\"height\") >= 0\n ? window.pageYOffset\n : null;\n const convertedTarget = convertChangedValueTypes(target, visualElement, changedValueTypeKeys);\n // If we removed transform values, reapply them before the next render\n if (removedTransformValues.length) {\n removedTransformValues.forEach(([key, value]) => {\n visualElement.getValue(key).set(value);\n });\n }\n // Reapply original values\n visualElement.render();\n // Restore scroll position\n if (isBrowser && scrollY !== null) {\n window.scrollTo({ top: scrollY });\n }\n return { target: convertedTarget, transitionEnd };\n }\n else {\n return { target, transitionEnd };\n }\n};\n/**\n * Convert value types for x/y/width/height/top/left/bottom/right\n *\n * Allows animation between `'auto'` -> `'100%'` or `0` -> `'calc(50% - 10vw)'`\n *\n * @internal\n */\nfunction unitConversion(visualElement, target, origin, transitionEnd) {\n return hasPositionalKey(target)\n ? checkAndConvertChangedValueTypes(visualElement, target, origin, transitionEnd)\n : { target, transitionEnd };\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/utils/parse-dom-variant.mjs\n\n\n\n/**\n * Parse a DOM variant to make it animatable. This involves resolving CSS variables\n * and ensuring animations like \"20%\" => \"calc(50vw)\" are performed in pixels.\n */\nconst parseDomVariant = (visualElement, target, origin, transitionEnd) => {\n const resolved = resolveCSSVariables(visualElement, target, transitionEnd);\n target = resolved.target;\n transitionEnd = resolved.transitionEnd;\n return unitConversion(visualElement, target, origin, transitionEnd);\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/reduced-motion/state.mjs\n// Does this device prefer reduced motion? Returns `null` server-side.\nconst prefersReducedMotion = { current: null };\nconst hasReducedMotionListener = { current: false };\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/utils/reduced-motion/index.mjs\n\n\n\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.addListener(setReducedMotionPreferences);\n setReducedMotionPreferences();\n }\n else {\n prefersReducedMotion.current = false;\n }\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/utils/motion-values.mjs\n\n\n\n\n\nfunction updateMotionValuesFromProps(element, next, prev) {\n const { willChange } = next;\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 if (isWillChangeMotionValue(willChange)) {\n willChange.add(key);\n }\n /**\n * Check the version of the incoming motion value with this version\n * and warn against mismatches.\n */\n if (false) {}\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 if (isWillChangeMotionValue(willChange)) {\n willChange.remove(key);\n }\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 // TODO: Only update values that aren't being animated or even looked at\n !existingValue.hasAnimated && existingValue.set(nextValue);\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/store.mjs\nconst visualElementStore = new WeakMap();\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/VisualElement.mjs\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst featureNames = Object.keys(featureDefinitions);\nconst numFeatures = featureNames.length;\nconst propEventHandlers = [\n \"AnimationStart\",\n \"AnimationComplete\",\n \"Update\",\n \"BeforeLayoutMeasure\",\n \"LayoutMeasure\",\n \"LayoutAnimationStart\",\n \"LayoutAnimationComplete\",\n];\nconst numVariantProps = variantProps.length;\n/**\n * A VisualElement is an imperative abstraction around UI elements such as\n * HTMLElement, SVGElement, Three.Object3D etc.\n */\nclass VisualElement {\n constructor({ parent, props, presenceContext, reducedMotionConfig, 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 * 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 /**\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 * 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.scheduleRender = () => frame_frame.render(this.render, false, true);\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.options = options;\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 neccessarily a breaking change,\n * more a reflection of the test.\n */\n const { willChange, ...initialMotionValues } = this.scrapeMotionValuesFromProps(props, {});\n for (const key in initialMotionValues) {\n const value = initialMotionValues[key];\n if (latestValues[key] !== undefined && isMotionValue(value)) {\n value.set(latestValues[key], false);\n if (isWillChangeMotionValue(willChange)) {\n willChange.add(key);\n }\n }\n }\n }\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) {\n return {};\n }\n mount(instance) {\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 if (!hasReducedMotionListener.current) {\n initPrefersReducedMotion();\n }\n this.shouldReduceMotion =\n this.reducedMotionConfig === \"never\"\n ? false\n : this.reducedMotionConfig === \"always\"\n ? true\n : prefersReducedMotion.current;\n if (false) {}\n if (this.parent)\n this.parent.children.add(this);\n this.update(this.props, this.presenceContext);\n }\n unmount() {\n visualElementStore[\"delete\"](this.current);\n this.projection && this.projection.unmount();\n cancelFrame(this.notifyUpdate);\n cancelFrame(this.render);\n this.valueSubscriptions.forEach((remove) => remove());\n this.removeFromVariantTree && this.removeFromVariantTree();\n this.parent && this.parent.children.delete(this);\n for (const key in this.events) {\n this.events[key].clear();\n }\n for (const key in this.features) {\n this.features[key].unmount();\n }\n this.current = null;\n }\n bindToMotionValue(key, value) {\n const valueIsTransform = transformProps.has(key);\n const removeOnChange = value.on(\"change\", (latestValue) => {\n this.latestValues[key] = latestValue;\n this.props.onUpdate &&\n frame_frame.update(this.notifyUpdate, false, true);\n if (valueIsTransform && this.projection) {\n this.projection.isTransformDirty = true;\n }\n });\n const removeOnRenderRequest = value.on(\"renderRequest\", this.scheduleRender);\n this.valueSubscriptions.set(key, () => {\n removeOnChange();\n removeOnRenderRequest();\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 loadFeatures({ children, ...renderedProps }, isStrict, preloadedFeatures, initialLayoutGroupConfig) {\n let ProjectionNodeConstructor;\n let MeasureLayout;\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 (false) {}\n for (let i = 0; i < numFeatures; i++) {\n const name = featureNames[i];\n const { isEnabled, Feature: FeatureConstructor, ProjectionNode, MeasureLayout: MeasureLayoutComponent, } = featureDefinitions[name];\n if (ProjectionNode)\n ProjectionNodeConstructor = ProjectionNode;\n if (isEnabled(renderedProps)) {\n if (!this.features[name] && FeatureConstructor) {\n this.features[name] = new FeatureConstructor(this);\n }\n if (MeasureLayoutComponent) {\n MeasureLayout = MeasureLayoutComponent;\n }\n }\n }\n if (!this.projection && ProjectionNodeConstructor) {\n this.projection = new ProjectionNodeConstructor(this.latestValues, this.parent && this.parent.projection);\n const { layoutId, layout, drag, dragConstraints, layoutScroll, layoutRoot, } = renderedProps;\n this.projection.setOptions({\n layoutId,\n layout,\n alwaysMeasureLayout: Boolean(drag) ||\n (dragConstraints && isRefObject(dragConstraints)),\n visualElement: this,\n scheduleRender: () => this.scheduleRender(),\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: initialLayoutGroupConfig,\n layoutScroll,\n layoutRoot,\n });\n }\n return MeasureLayout;\n }\n updateFeatures() {\n for (const key in this.features) {\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 triggerBuild() {\n this.build(this.renderState, this.latestValues, this.options, 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 * Make a target animatable by Popmotion. For instance, if we're\n * trying to animate width from 100px to 100vw we need to measure 100vw\n * in pixels to determine what we really need to animate to. This is also\n * pluggable to support Framer's custom value types like Color,\n * and CSS variables.\n */\n makeTargetAnimatable(target, canMutate = true) {\n return this.makeTargetAnimatableFromInstance(target, this.props, canMutate);\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 listener = props[\"on\" + key];\n if (listener) {\n this.propEventSubscriptions[key] = this.on(key, listener);\n }\n }\n this.prevMotionValues = updateMotionValuesFromProps(this, this.scrapeMotionValuesFromProps(props, this.prevProps), 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 getVariantContext(startAtParent = false) {\n if (startAtParent) {\n return this.parent ? this.parent.getVariantContext() : undefined;\n }\n if (!this.isControllingVariants) {\n const context = this.parent\n ? this.parent.getVariantContext() || {}\n : {};\n if (this.props.initial !== undefined) {\n context.initial = this.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 = this.props[name];\n if (isVariantLabel(prop) || prop === false) {\n context[name] = prop;\n }\n }\n return context;\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 if (value !== this.values.get(key)) {\n this.removeValue(key);\n this.bindToMotionValue(key, value);\n }\n this.values.set(key, value);\n this.latestValues[key] = value.get();\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, { 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) {\n var _a;\n return this.latestValues[key] !== undefined || !this.current\n ? this.latestValues[key]\n : (_a = this.getBaseTargetFromProps(this.props, key)) !== null && _a !== void 0 ? _a : this.readValueFromInstance(this.current, key, this.options);\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 var _a;\n const { initial } = this.props;\n const valueFromInitial = typeof initial === \"string\" || typeof initial === \"object\"\n ? (_a = resolveVariantFromProps(this.props, initial)) === null || _a === void 0 ? void 0 : _a[key]\n : undefined;\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}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/DOMVisualElement.mjs\n\n\n\n\nclass DOMVisualElement extends VisualElement {\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 return props.style ? props.style[key] : undefined;\n }\n removeValueFromRenderState(key, { vars, style }) {\n delete vars[key];\n delete style[key];\n }\n makeTargetAnimatableFromInstance({ transition, transitionEnd, ...target }, { transformValues }, isMounted) {\n let origin = getOrigin(target, transition || {}, this);\n /**\n * If Framer has provided a function to convert `Color` etc value types, convert them\n */\n if (transformValues) {\n if (transitionEnd)\n transitionEnd = transformValues(transitionEnd);\n if (target)\n target = transformValues(target);\n if (origin)\n origin = transformValues(origin);\n }\n if (isMounted) {\n checkTargetForNewValues(this, target, origin);\n const parsed = parseDomVariant(this, target, origin, transitionEnd);\n transitionEnd = parsed.transitionEnd;\n target = parsed.target;\n }\n return {\n transition,\n transitionEnd,\n ...target,\n };\n }\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/html/HTMLVisualElement.mjs\n\n\n\n\n\n\n\n\n\n\nfunction HTMLVisualElement_getComputedStyle(element) {\n return window.getComputedStyle(element);\n}\nclass HTMLVisualElement extends DOMVisualElement {\n readValueFromInstance(instance, key) {\n if (transformProps.has(key)) {\n const defaultType = getDefaultValueType(key);\n return defaultType ? defaultType.default || 0 : 0;\n }\n else {\n const computedStyle = HTMLVisualElement_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, options, props) {\n buildHTMLStyles(renderState, latestValues, options, props.transformTemplate);\n }\n scrapeMotionValuesFromProps(props, prevProps) {\n return scrapeMotionValuesFromProps(props, prevProps);\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 renderInstance(instance, renderState, styleProp, projection) {\n renderHTML(instance, renderState, styleProp, projection);\n }\n}\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/svg/SVGVisualElement.mjs\n\n\n\n\n\n\n\n\n\n\n\nclass SVGVisualElement extends DOMVisualElement {\n constructor() {\n super(...arguments);\n this.isSVGTag = false;\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 measureInstanceViewportBox() {\n return createBox();\n }\n scrapeMotionValuesFromProps(props, prevProps) {\n return scrape_motion_values_scrapeMotionValuesFromProps(props, prevProps);\n }\n build(renderState, latestValues, options, props) {\n buildSVGAttrs(renderState, latestValues, options, this.isSVGTag, props.transformTemplate);\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\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/create-visual-element.mjs\n\n\n\n\nconst create_visual_element_createDomVisualElement = (Component, options) => {\n return isSVGComponent(Component)\n ? new SVGVisualElement(options, { enableHardwareAcceleration: false })\n : new HTMLVisualElement(options, { enableHardwareAcceleration: true });\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/motion/features/layout.mjs\n\n\n\nconst layout = {\n layout: {\n ProjectionNode: HTMLProjectionNode,\n MeasureLayout: MeasureLayout,\n },\n};\n\n\n\n;// CONCATENATED MODULE: ./node_modules/framer-motion/dist/es/render/dom/motion.mjs\n\n\n\n\n\n\n\n\n\nconst preloadedFeatures = {\n ...animations,\n ...gestureAnimations,\n ...drag,\n ...layout,\n};\n/**\n * HTML & SVG components, optimised for use with gestures and animation. These can be used as\n * drop-in replacements for any HTML & SVG component, all CSS & SVG properties are supported.\n *\n * @public\n */\nconst motion = /*@__PURE__*/ createMotionProxy((Component, config) => create_config_createDomMotionConfig(Component, config, preloadedFeatures, create_visual_element_createDomVisualElement));\n/**\n * Create a DOM `motion` component with the provided string. This is primarily intended\n * as a full alternative to `motion` for consumers who have to support environments that don't\n * support `Proxy`.\n *\n * ```javascript\n * import { createDomMotionComponent } from \"framer-motion\"\n *\n * const motion = {\n * div: createDomMotionComponent('div')\n * }\n * ```\n *\n * @public\n */\nfunction createDomMotionComponent(key) {\n return createMotionComponent(createDomMotionConfig(key, { forwardMotionProps: false }, preloadedFeatures, createDomVisualElement));\n}\n\n\n\n\n/***/ })\n\n}]);"],"names":["self","push","__unused_webpack___webpack_module__","__webpack_exports__","__webpack_require__","result","d","motion","isValidProp","callback","react","MotionConfigContext","createContext","transformPagePoint","p","isStatic","reducedMotion","MotionContext","PresenceContext_PresenceContext","isBrowser","document","useIsomorphicLayoutEffect","useLayoutEffect","useEffect","LazyContext","strict","isRefObject","ref","Object","prototype","hasOwnProperty","call","isVariantLabel","v","Array","isArray","isAnimationControls","start","variantPriorityOrder","variantProps","isControllingVariants","props","animate","some","name","isVariantNode","Boolean","variants","variantLabelsAsDependency","prop","join","featureProps","animation","exit","drag","focus","hover","tap","pan","inView","layout","featureDefinitions","key","isEnabled","LayoutGroupContext","SwitchLayoutGroupContext","motionComponentSymbol","Symbol","for","lowercaseSVGElements","isSVGComponent","Component","includes","indexOf","test","scaleCorrectors","transformPropOrder","transformProps","Set","isForcedMotionValue","layoutId","has","startsWith","undefined","isMotionValue","value","getVelocity","translateAlias","x","y","z","transformPerspective","numTransforms","length","checkStringStartsWith","token","isCSSVariableName","isCSSVariableToken","getValueAsType","type","transform","clamp","min","max","Math","number","parse","parseFloat","alpha","scale","default","sanitize","round","floatRegex","colorRegex","singleColorRegex","isString","createUnitType","endsWith","unit","split","degrees","percent","px","vh","vw","progressPercentage","type_int_int","numberValueTypes","borderWidth","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderRadius","radius","borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius","width","maxWidth","height","maxHeight","size","top","right","bottom","left","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","margin","marginTop","marginRight","marginBottom","marginLeft","rotate","rotateX","rotateY","rotateZ","scaleX","scaleY","scaleZ","skew","skewX","skewY","distance","translateX","translateY","translateZ","perspective","opacity","originX","originY","originZ","zIndex","fillOpacity","strokeOpacity","numOctaves","buildHTMLStyles","state","latestValues","options","transformTemplate","style","vars","transformOrigin","hasTransform","hasTransformOrigin","transformIsNone","valueType","valueAsType","buildTransform","enableHardwareAcceleration","allowTransformNone","transformIsDefault","transformString","i","transformName","trim","createHtmlRenderState","copyRawValuesOnly","target","source","useHTMLProps","visualState","htmlProps","useStyle","styleProp","assign","useInitialMotionValues","useMemo","transformValues","dragListener","draggable","userSelect","WebkitUserSelect","WebkitTouchCallout","touchAction","tabIndex","onTap","onTapStart","whileTap","validMotionProps","isValidMotionProp","shouldForward","require","_a","calcOrigin","origin","offset","dashKeys","array","camelKeys","buildSVGAttrs","attrX","attrY","attrScale","pathLength","pathSpacing","pathOffset","latest","isSVGTag","viewBox","attrs","dimensions","calcSVGTransformOrigin","pxOriginX","pxOriginY","buildSVGPath","spacing","useDashCase","keys","createSvgRenderState","tag","toLowerCase","useSVGProps","_isStatic","visualProps","rawStyles","camelToDash","str","replace","renderHTML","element","projection","getProjectionStyles","setProperty","camelCaseAttributes","renderSVG","renderState","_styleProp","setAttribute","scrapeMotionValuesFromProps","prevProps","newValues","scrape_motion_values_scrapeMotionValuesFromProps","targetKey","charAt","toUpperCase","substring","resolveVariantFromProps","definition","custom","currentValues","currentVelocity","isKeyframesTarget","isCustomValue","mix","toValue","resolveFinalValueInKeyframes","resolveMotionValue","unwrappedValue","get","makeUseVisualState","context","useContext","presenceContext","make","makeState","createRenderState","onMount","makeLatestValues","scrapeMotionValues","values","motionValues","initial","isControllingVariants$1","isVariantNode$1","inherit","isInitialAnimationBlocked","variantToSet","list","forEach","resolved","transitionEnd","transition","valueTarget","index","mount","instance","config","useConstant","init","useRef","current","noop","any","Queue","constructor","order","scheduled","add","process","remove","splice","delete","clear","stepsOrder","schedule","frame_frame","cancel","cancelFrame","frameData","steps","createRenderBatcher","scheduleNextBatch","allowKeepAlive","runNextFrame","useDefaultElapsed","delta","timestamp","isProcessing","reduce","acc","createRenderStep","thisFrame","nextFrame","numToRun","flushNextFrame","toKeepAlive","WeakSet","step","keepAlive","immediate","addToCurrentFrame","queue","processStep","stepId","processBatch","performance","now","wake","requestAnimationFrame","svgMotionConfig","useVisualState","read","getBBox","getBoundingClientRect","e","render","tagName","htmlMotionConfig","addDomEvent","eventName","handler","passive","addEventListener","removeEventListener","isPrimaryPointer","event","pointerType","button","isPrimary","extractEventInfo","pointType","point","addPointerInfo","addPointerEvent","combineFunctions","a","b","pipe","transformers","createLock","lock","openLock","globalHorizontalLock","globalVerticalLock","getGlobalLock","openHorizontal","openVertical","isDragActive","openGestureLock","Feature","node","isMounted","update","addHoverEvent","isActive","callbackName","handleEvent","info","getProps","animationState","whileHover","setActive","isNodeOrChild","parent","child","parentElement","fireSyntheticPointerEvent","syntheticPointerEvent","PointerEvent","observerCallbacks","WeakMap","observers","fireObserverCallback","entry","fireAllObserverCallbacks","entries","thresholdNames","all","shallowCompare","next","prev","prevLength","resolveVariant","visualElement","getCurrent","velocity","optimizedAppearDataAttribute","secondsToMilliseconds","seconds","millisecondsToSeconds","milliseconds","instantAnimationState","isBezierDefinition","easing","cubicBezierAsString","c","supportedWaapiEasing","linear","ease","easeIn","easeOut","easeInOut","circIn","circOut","backIn","backOut","calcBezier","t","a1","a2","cubicBezier","mX1","mY1","mX2","mY2","getTForX","binarySubdivide","lowerBound","upperBound","currentX","currentT","abs","aX","isEasingArray","mirrorEasing","reverseEasing","sin","acos","circInOut","backInOut","anticipate","pow","easingLookup","easingDefinitionToFunction","invariant","x1","y1","x2","y2","isColorString","testProp","splitColor","aName","bName","cName","match","clampRgbUnit","rgbUnit","rgba","red","green","blue","alpha$1","hex","r","g","parseInt","hsla","hue","saturation","lightness","color","from","to","progress","hueToRgb","q","mixLinearColor","fromExpo","sqrt","colorTypes","getColorType","find","asRGBA","model","hslaToRgba","mixColor","fromRGBA","toRGBA","blended","cssVarTokeniser","regex","countKey","colorTokeniser","numberTokeniser","tokenise","matches","tokenised","map","analyseComplexValue","originalValue","toString","numVars","numColors","numNumbers","parseComplexValue","createTransformer","numValues","output","convertNumbersToZero","complex","_b","isNaN","getAnimatableNone","parsed","transformer","mixImmediate","getMixer","mixComplex","mixArray","blendValue","fromThis","mixObject","template","originStats","targetStats","canInterpolate","warning","toFromDifference","mixNumber","interpolate","input","isClamp","mixer","inputLength","reverse","mixers","createMixers","customMixer","mixerFactory","detectMixerFactory","numMixers","easingFunction","interpolator","progressInRange","keyframes","duration","keyframeValues","times","easingFunctions","done","absoluteTimes","defaultOffset","arr","fillOffset","remaining","offsetProgress","o","mapTimeToKeyframe","calculatedDuration","calcGeneratorVelocity","resolveValue","frameDuration","prevT","calcAngularFreq","undampedFreq","dampingRatio","durationKeys","physicsKeys","isSpringType","spring","restDelta","restSpeed","resolveSpring","stiffness","damping","mass","isResolvedFromDuration","getSpringOptions","springOptions","derived","findSpring","bounce","envelope","derivative","exponentialDecay","safeMin","exp","factor","f","initialGuess","approximateRoot","initialVelocity","initialDelta","undampedAngularFreq","isGranularScale","angularFreq","cos","dampedAngularFreq","freqForT","sinh","cosh","isBelowVelocityThreshold","isBelowDisplacementThreshold","inertia","power","timeConstant","bounceDamping","bounceStiffness","modifyTarget","timeReachedBoundary","spring$1","isOutOfBounds","nearestBoundary","amplitude","ideal","calcDelta","calcLatest","applyFriction","checkCatchBoundary","hasUpdatedFrame","frameloopDriver","passTimestamp","stop","calcGeneratorDuration","generator","Infinity","types","decay","tween","animateValue","autoplay","delay","driver","keyframes$1","repeat","repeatDelay","repeatType","onPlay","onStop","onComplete","onUpdate","resolveFinishedPromise","currentFinishedPromise","animationDriver","mapNumbersToKeyframes","mirroredGenerator","speed","hasStopped","updateFinishedPromise","Promise","resolve","generatorFactory","playState","holdTime","startTime","cancelTime","resolvedDuration","totalDuration","currentTime","tick","timeWithoutDelay","isInDelayPhase","elapsed","frameGenerator","currentIteration","floor","iterationProgress","iterationIsOdd","isAnimationFinished","finish","stopAnimationDriver","play","controls","then","reject","time","newTime","newSpeed","sample","supportsWaapi","Element","acceleratedValues","requiresPregeneratedKeyframes","valueName","isWaapiSupportedEasing","every","underDampedSpring","criticallyDampedSpring","keyframesTransition","getDefaultTransition","valueKey","isAnimatable","maxDefaults","applyDefaultFilter","slice","defaultValue","functionRegex","filter","functions","defaultValueTypes","backgroundColor","outlineColor","fill","stroke","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","WebkitFilter","getDefaultValueType","animatable_none_getAnimatableNone","defaultValueType","isZeroValueString","getValueTransition","animateMotionValue","valueTransition","getKeyframes","animatableTemplateValue","isTargetAnimatable","defaultOrigin","noneKeyframeIndexes","originKeyframe","targetKeyframe","isOriginAnimatable","set","isTransitionDefined","when","_delay","delayChildren","staggerChildren","staggerDirection","createInstantAnimation","setValue","pause","complete","owner","HTMLElement","acceleratedAnimation","createAcceleratedAnimation","canAccelerateAnimation","sampleAnimation","pregeneratedKeyframes","animateStyle","keyframeOptions","mapEasingToNativeEasing","iterations","direction","syncStart","timeline","cancelAnimation","safeCancel","onfinish","getFinalKeyframe","attachTimeline","playbackRate","setWithVelocity","isWillChangeMotionValue","isNumericalString","addUniqueItem","item","removeItem","SubscriptionManager","subscriptions","notify","numSubscriptions","getSize","isFloat","collectMotionValues","MotionValue","version","timeDelta","lastUpdated","canTrackVelocity","events","updateAndNotify","postRender","scheduleVelocityCheck","change","velocityChange","renderRequest","velocityCheck","hasAnimated","onChange","subscription","on","unsubscribe","clearListeners","eventManagers","attach","passiveEffect","stopPassiveEffect","jump","getPrevious","startAnimation","animationStart","animationComplete","clearAnimation","animationCancel","isAnimating","destroy","motionValue","testValueType","dimensionValueTypes","findDimensionValueType","valueTypes","findValueType","animateTarget","transitionOverride","makeTargetAnimatable","willChange","getValue","animations","animationTypeState","getState","shouldBlockAnimation","protectedKeys","needsAnimating","shouldBlock","window","HandoffAppearAnimations","appearId","shouldReduceMotion","setTarget","hasValue","addValue","animateVariant","variant","getAnimation","getChildAnimations","variantChildren","forwardDelay","animateChildren","maxStaggerDuration","generateStaggerDuration","sort","sortByTreeOrder","first","last","sortNodePosition","reversePriorityOrder","numAnimationTypes","createTypeState","prevResolvedValues","id","PanSession","handlers","startEvent","lastMoveEvent","lastMoveEventInfo","updatePoint","getPanInfo","history","isPanStarted","isDistancePastThreshold","distance2D","xDelta","yDelta","onStart","onMove","handlePointerMove","transformPoint","handlePointerUp","end","onEnd","onSessionEnd","panInfo","initialInfo","onSessionStart","removeListeners","updateHandlers","subtractPoint","lastDevicePoint","PanSession_getVelocity","timestampedPoint","lastPoint","calcLength","axis","isNear","maxDistance","calcAxisDelta","originPoint","translate","calcBoxDelta","calcRelativeAxis","relative","calcRelativeAxisPosition","calcRelativePosition","calcRelativeAxisConstraints","calcViewportAxisConstraints","layoutAxis","constraintsAxis","resolveAxisElastic","dragElastic","minLabel","maxLabel","resolvePointElastic","label","createAxisDelta","createDelta","createAxis","createBox","eachAxis","convertBoundingBoxToBox","isIdentityScale","hasScale","has2DTranslate","is2DTranslate","applyPointDelta","boxScale","scalePoint","applyAxisDelta","applyBoxDelta","box","snapToDefault","isInteger","translateAxis","transformAxis","transforms","scaleKey","originKey","axisOrigin","xKeys","yKeys","transformBox","measureViewportBox","transformBoxPoints","topLeft","bottomRight","elementDragControls","VisualElementDragControls","openGlobalLock","isDragging","currentDirection","constraints","hasMutatedConstraints","elastic","originEvent","snapToCursor","isPresent","stopAnimation","dragPropagation","onDragStart","resolveConstraints","isAnimationBlocked","getAxisMotionValue","measuredAxis","layoutBox","dragDirectionLock","onDirectionLock","onDrag","getCurrentDirection","lockThreshold","updateAxis","panSession","getTransformPagePoint","onDragEnd","_point","shouldDrag","axisValue","applyConstraints","dragConstraints","prevConstraints","resolveRefConstraints","calcRelativeConstraints","resolveDragElastic","rebaseAxisConstraints","relativeConstraints","onMeasureDragConstraints","constraintsElement","constraintsBox","measurePageBox","rootProjectionNode","viewportBox","scroll","root","measuredConstraints","userConstraints","convertBoxToBoundingBox","dragMomentum","dragTransition","dragSnapToOrigin","onDragTransitionEnd","momentumAnimations","startAxisValueAnimation","dragKey","externalMotionValue","scalePositionWithinConstraints","boxProgress","constraints_calcOrigin","sourceLength","targetLength","updateScroll","updateLayout","addListeners","stopPointerListener","measureDragConstraints","stopMeasureLayoutListener","stopResizeListener","stopLayoutUpdateListener","hasLayoutChanged","asyncHandler","globalProjectionState","hasAnimatedSinceResize","hasEverUpdated","pixelsToPercent","pixels","correctBorderRadius","MeasureLayoutWithContext","componentDidMount","layoutGroup","switchLayoutGroup","defaultScaleCorrectors","group","register","didUpdate","safeToRemove","setOptions","onExitComplete","getSnapshotBeforeUpdate","layoutDependency","willUpdate","promote","relegate","stack","getStack","members","componentDidUpdate","queueMicrotask","currentAnimation","isLead","componentWillUnmount","promoteContext","scheduleCheckAfterUnmount","deregister","MeasureLayout","usePresence","useId","createElement","applyTo","boxShadow","treeScale","projectionDelta","shadow","xScale","yScale","averageScale","borders","numBorders","asNumber","isPx","getRadius","radiusName","easeCrossfadeIn","compress","easeCrossfadeOut","copyAxisInto","originAxis","copyBoxInto","originBox","removePointDelta","removeAxisTransforms","sourceAxis","removeAxisDelta","relativeProgress","delta_remove_xKeys","delta_remove_yKeys","removeBoxTransforms","sourceBox","isAxisDeltaZero","isDeltaZero","boxEqualsRounded","aspectRatio","NodeStack","scheduleRender","prevLead","lead","indexOfNode","findIndex","member","preserveFollowOpacity","show","resumeFrom","preserveOpacity","snapshot","animationValues","isUpdating","isLayoutDirty","crossfade","hide","exitAnimationComplete","resumingFrom","removeLeadSnapshot","buildProjectionTransform","latestTransform","xTranslate","yTranslate","elementScaleX","elementScaleY","compareByDepth","depth","FlatTree","children","isDirty","transformAxes","create_projection_node_id","projectionFrameData","totalNodes","resolvedTargetDeltas","recalculatedProjection","createProjectionNode","attachResizeListener","defaultParent","measureScroll","checkIsScrollRoot","resetTransform","animationId","isTreeAnimating","isProjectionDirty","isSharedProjectionDirty","isTransformDirty","updateManuallyBlocked","updateBlockedByResize","isSVG","needsReset","shouldResetTransform","eventHandlers","Map","hasTreeAnimated","updateScheduled","checkUpdateFailed","clearAllSnapshots","updateProjection","nodes","propagateDirtyNodes","resolveTargetDelta","calcProjection","cleanDirtyNodes","MotionDebug","record","hasProjected","isVisible","animationProgress","sharedNodes","path","notifyListeners","args","subscriptionManager","hasListeners","SVGElement","cancelDelay","resizeUnblockUpdate","timeout","checkElapsed","finishAnimation","registerSharedNode","hasRelativeTargetChanged","newLayout","isTreeAnimationBlocked","relativeTarget","layoutTransition","defaultLayoutTransition","onLayoutAnimationStart","onLayoutAnimationComplete","targetChanged","targetLayout","hasOnlyRelativeTargetChanged","layoutRoot","setAnimationOrigin","animationOptions","unmount","blockUpdate","unblockUpdate","isUpdateBlocked","startUpdate","resetRotation","getTransformTemplate","shouldNotifyListeners","prevTransformTemplateValue","updateSnapshot","updateWasBlocked","clearMeasurements","clearIsLayoutDirty","resetTransformStyle","notifyLayoutUpdate","preRender","clearSnapshot","removeLeadSnapshots","scheduleUpdateProjection","measure","alwaysMeasureLayout","prevLayout","layoutCorrected","phase","needsMeasurement","layoutScroll","isRoot","isResetRequested","hasProjection","transformTemplateValue","transformTemplateHasChanged","removeTransform","pageBox","removeElementScroll","roundAxis","measuredBox","boxWithoutScroll","rootScroll","applyTransform","transformOnly","withTransforms","boxWithoutTransform","nodeBox","setTargetDelta","targetDelta","forceRelativeParentToResolveTarget","relativeParent","resolvedRelativeTargetAt","forceRecalculation","getLead","isShared","canSkip","attemptToResolveRelativeTarget","getClosestProjectingParent","relativeTargetOrigin","targetWithTransforms","isProjecting","pendingAnimation","prevTreeScaleX","prevTreeScaleY","applyTreeDeltas","treePath","isSharedTransition","treeLength","display","projectionTransform","projectionDeltaWithTransform","prevProjectionTransform","notifyAll","prevRelativeTarget","snapshotLatestValues","mixedValues","relativeLayout","snapshotSource","layoutSource","isSharedLayoutAnimation","isOnlyMember","shouldCrossfadeOpacity","hasOpacityCrossfade","mixTargetDelta","mixAxisDelta","mixAxis","mixValues","follow","opacityExit","borderLabel","followRadius","leadRadius","canMix","animateSingleValue","motionValue$1","completeAnimation","applyTransformsToTarget","shouldAnimatePositionOnly","animationType","xLength","yLength","initialPromotionConfig","shouldPreserveFollowOpacity","getPrevLead","hasRotate","resetValues","setStaticValue","styles","visibility","pointerEvents","emptyStyles","valuesToRender","correct","corrected","num","resetTree","measuredLayout","axisSnapshot","layoutDelta","visualDelta","parentSnapshot","parentLayout","relativeSnapshot","onBeforeLayoutMeasure","userAgentContains","navigator","userAgent","string","roundPoint","DocumentProjectionNode","documentElement","scrollLeft","body","scrollTop","HTMLProjectionNode","documentNode","getComputedStyle","position","splitCSSVariableRegex","getVariableValue","fallback","parseCSSVariable","exec","getPropertyValue","trimmed","positionalKeys","isPositionalKey","hasPositionalKey","isNumOrPxType","getPosFromMatrix","matrix","pos","getTranslateFromMatrix","pos2","pos3","_bbox","matrix3d","transformKeys","nonTranslationalTransformKeys","positionalValues","convertChangedValueTypes","changedKeys","originBbox","elementComputedStyle","targetBbox","checkAndConvertChangedValueTypes","targetPositionalKeys","removedTransformValues","hasAttemptedToRemoveTransformValues","changedValueTypeKeys","toType","fromType","numKeyframes","fromIndex","removeNonTranslationalTransform","removedTransforms","scrollY","pageYOffset","convertedTarget","scrollTo","parseDomVariant","resolveCSSVariables","prefersReducedMotion","hasReducedMotionListener","visualElementStore","featureNames","numFeatures","propEventHandlers","numVariantProps","VisualElement","reducedMotionConfig","features","valueSubscriptions","prevMotionValues","propEventSubscriptions","notifyUpdate","triggerBuild","renderInstance","baseTarget","initialValues","manuallyAnimateOnMount","initialMotionValues","_props","_prevProps","removeFromVariantTree","addVariantChild","bindToMotionValue","initPrefersReducedMotion","matchMedia","motionMediaQuery","setReducedMotionPreferences","addListener","valueIsTransform","removeOnChange","latestValue","removeOnRenderRequest","other","sortInstanceNodePosition","loadFeatures","renderedProps","isStrict","preloadedFeatures","initialLayoutGroupConfig","ProjectionNodeConstructor","FeatureConstructor","ProjectionNode","MeasureLayoutComponent","updateFeatures","feature","build","measureInstanceViewportBox","getStaticValue","canMutate","makeTargetAnimatableFromInstance","prevPresenceContext","listener","updateMotionValuesFromProps","nextValue","prevValue","existingValue","removeValue","handleChildMotionValue","getVariant","getClosestVariantNode","getVariantContext","startAtParent","closestVariantNode","removeValueFromRenderState","readValue","getBaseTargetFromProps","readValueFromInstance","setBaseTarget","getBaseTarget","valueFromInitial","DOMVisualElement","compareDocumentPosition","getOrigin","transitionOrigin","getOriginFromTransition","checkTargetForNewValues","newValueKeys","numNewValues","targetValue","HTMLVisualElement","defaultType","computedStyle","childSubscription","textContent","SVGVisualElement","arguments","getAttribute","create_visual_element_createDomVisualElement","createAnimationState","animateVisualElement","resolvedDefinition","whileInView","whileDrag","whileFocus","isInitialRender","buildResolvedTypeValues","animateChanges","changedActiveType","removedKeys","encounteredKeys","removedVariantIndex","typeState","propIsVariant","activeDelta","isInherited","prevProp","variantDidChange","shouldAnimateType","definitionList","resolvedValues","allKeys","markToAnimate","blockInitialAnimation","fallbackAnimation","fallbackTarget","shouldAnimate","setAnimateFunction","makeAnimator","updateAnimationControlsSubscription","subscribe","prevAnimate","prevIsPresent","exitAnimation","hasEnteredView","isInView","startObserver","viewport","rootMargin","amount","once","threshold","onIntersectionUpdate","isIntersecting","onViewportEnter","onViewportLeave","observeIntersection","rootInteresectionObserver","initIntersectionObserver","lookupRoot","rootObservers","JSON","stringify","IntersectionObserver","observe","unobserve","hasOptionsChanged","hasViewportOptionChanged","prevViewport","removeStartListeners","removeEndListeners","removeAccessibleListeners","startPointerPress","startInfo","isPressing","endPointerPress","endEvent","endInfo","checkPressEnd","onTapCancel","removePointerUpListener","removePointerCancelListener","cancelEvent","cancelInfo","cancelPress","startPress","startAccessiblePress","handleKeydown","keydownEvent","handleKeyup","keyupEvent","removeKeydownListener","handleBlur","removeBlurListener","removePointerListener","removeFocusListener","onFocus","isFocusVisible","onBlur","removePointerDownListener","onPointerDown","pointerDownEvent","session","createPanHandlers","onPanSessionStart","onPanStart","onPan","onPanEnd","removeGroupControls","dragControls","createMotionProxy","createConfig","customMotionComponentConfig","motion_createMotionComponent","createVisualElement","useRender","ForwardRefComponent","forwardRef","externalRef","configAndProps","useLayoutId","layoutGroupId","useCreateMotionContext","getCurrentTreeVariants","useVisualElement","lazyContext","visualElementRef","renderer","useInsertionEffect","canHandoff","Provider","useCallback","Proxy","componentCache","_target","create_config_createDomMotionConfig","forwardMotionProps","baseConfig","createUseRender","useVisualProps","filteredProps","filterProps","isDom","elementProps","renderedChildren"],"sourceRoot":""}