{"version":3,"sources":["webpack:///./node_modules/framer-motion/dist/framer-motion.es.js"],"names":["isRefObject","ref","hasOwnProperty","SubscriptionManager","this","subscriptions","Set","prototype","add","handler","_this","delete","notify","a","b","c","e_1","_a","size","_b","_c","next","done","value","e_1_1","error","return","call","clear","MotionValue","init","timeDelta","lastUpdated","updateSubscribers","renderSubscribers","canTrackVelocity","updateAndNotify","v","render","prev","current","delta","timestamp","postRender","scheduleVelocityCheck","velocityCheck","set","isNaN","parseFloat","onChange","subscription","clearListeners","onRenderRequest","get","attach","passiveEffect","getPrevious","getVelocity","start","animation","stop","Promise","resolve","stopAnimation","then","clearAnimation","isAnimating","destroy","motionValue","VisualElement","parent","children","latest","values","Map","valueSubscriptions","config","update","onUpdate","triggerRender","element","mount","unmount","externalRef","rootParent","treePath","depth","subscribe","child","hasValue","key","has","addValue","removeValue","setSingleStaticValue","subscribeToValue","getValue","defaultValue","undefined","forEachValue","callback","forEach","getInstance","updateConfig","setStaticValues","scheduleRender","scheduleUpdateLayoutDelta","preRender","updateLayoutDelta","unsubscribeOnChange","unsubscribeOnRender","removeFromParent","_","noop","any","convertBoundingBoxToAxisBox","top","x","min","left","max","right","y","bottom","copyAxisBox","box","zeroDelta","translate","scale","origin","originPoint","int","transform","Math","round","defaultValueTypes","color","backgroundColor","outlineColor","fill","stroke","borderColor","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","borderWidth","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderRadius","radius","borderTopLeftRadius","borderTopRightRadius","borderBottomRightRadius","borderBottomLeftRadius","width","maxWidth","height","maxHeight","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","margin","marginTop","marginRight","marginBottom","marginLeft","rotate","rotateX","rotateY","rotateZ","scaleX","scaleY","scaleZ","skew","skewX","skewY","distance","translateX","translateY","translateZ","z","perspective","transformPerspective","opacity","originX","originY","originZ","zIndex","fillOpacity","strokeOpacity","numOctaves","dimensionValueTypes","test","parse","testValueType","type","findDimensionValueType","find","valueTypes","findValueType","getDefaultValueType","getValueAsType","transformAxes","boxDistortingKeys","transformProps","sortTransformProps","indexOf","operationKey","isDistorting","axesKey","push","transformPropSet","isTransformProp","transformOriginProps","isTransformOriginProp","translateAlias","buildLayoutProjectionTransform","treeScale","identityProjection","isCSSVariable","startsWith","isCSSVariable$1","cssVariableRegex","getVariableValue","match","exec","parseCSSVariable","token","fallback","resolved","window","getComputedStyle","getPropertyValue","pixelsToPercent","pixels","axis","borderCorrectionDefinition","process","viewportBox","valueScaleCorrection","applyTo","boxShadow","_viewportBox","original","containsCSSVariables","includes","cssVariables","replace","shadow","length","template","createTransformer","offset","xScale","yScale","averageScale","output","i_1","cssVariable","buildHTMLStyles","style","vars","transformOrigin","transformKeys","isLayoutProjectionEnabled","deltaFinal","targetBox","enableHardwareAcceleration","transformTemplate","allowTransformNone","hasTransform","hasTransformOrigin","transformIsNone","valueType","valueAsType","default","bucket","corrected","num","i","transformString","sort","numTransformKeys","buildBoxDistortingTransforms","trim","buildLayoutProjectionTransformOrigin","transformIsDefault","transformHasZ","buildTransform","_d","buildTransformOrigin","resetAxis","originAxis","scalePoint","point","applyPointDelta","boxScale","applyAxisDelta","applyBoxDelta","applyAxisTransforms","final","transforms","scaleKey","originKey","axisOrigin","xKeys","yKeys","removePointDelta","removeAxisTransforms","removeAxisDelta","isNear","target","maxDistance","calcOrigin","source","sourceLength","targetLength","updateAxisDelta","sourcePoint","calcTranslate","updateBoxDelta","eachAxis","secondsToMilliseconds","seconds","easingLookup","linear","easeIn","easeInOut","easeOut","circIn","circInOut","circOut","backIn","backInOut","backOut","anticipate","bounceIn","bounceInOut","bounceOut","easingDefinitionToFunction","definition","Array","isArray","x1","y1","x2","y2","isAnimatable","isKeyframesTarget","underDampedSpring","stiffness","damping","restDelta","restSpeed","overDampedSpring","to","linearTween","ease","duration","keyframes","defaultTransitions","convertTransitionToAnimationOptions","yoyo","loop","flip","times","transition","options","repeatDelay","isEasingArray","map","repeatType","repeat","getPopmotionAnimationOptions","valueKey","transitionFactory","from","hydrateKeyframes","when","delay","delayChildren","staggerChildren","staggerDirection","Object","keys","isTransitionDefined","startAnimation","onComplete","delayTimer","controls","valueTransition","isTargetAnimatable","getAnimatableNone","isOriginAnimatable","velocity","getAnimation","_e","getDelayFromTransition","setTimeout","clearTimeout","getBoundingBox","transformPagePoint","transformPoint","topLeft","bottomRight","transformBoundingBox","getBoundingClientRect","HTMLVisualElement","_super","apply","arguments","defaultConfig","reactStyle","layoutUpdateListeners","layoutMeasureListeners","viewportBoxUpdateListeners","hasViewportBoxUpdated","targetBoxFinal","prevTreeScale","deltaTransform","stopLayoutAxisAnimation","isTargetBoxLocked","axisProgress","updateLayoutDeltas","fireUpdateLayoutDelta","clean","read","layoutOrigin","readNativeValue","defaultValueType","enableLayoutProjection","hide","isVisible","show","onLayoutUpdate","onLayoutMeasure","onViewportBoxUpdate","layoutReady","prevViewportBox","getBoundingBoxWithoutTransforms","bbox","snapshotBoundingBox","rebaseTargetBox","force","shouldRebase","setAxisTarget","measureLayout","boxCorrected","lockTargetBox","unlockTargetBox","stopLayoutAnimation","resetTransform","targetAxis","startLayoutAxisAnimation","progress","originBox","parentTreeScale","parentDelta","treeLength","applyTreeDeltas","updateTransformDeltas","finalBox","build","visibility","assign","setProperty","useConstant","calcOrigin$1","progressToPixels","dashKeys","array","camelKeys","unmeasured","buildSVGAttrs","attrs","dimensions","totalPathLength","attrX","attrY","pathLength","pathSpacing","pathOffset","calcSVGTransformOrigin","totalLength","spacing","useDashCase","buildSVGPath","camelCaseAttributes","CAMEL_CASE_PATTERN","camelToDash","str","toLowerCase","SVGVisualElement","measure","getBBox","e","tagName","getTotalLength","getAttribute","setAttribute","svgTagNames","isSVGComponent","Component","PresenceContext","usePresence","context","isPresent","onExitComplete","register","id","useUniqueId","counter","incrementId","useDomVisualElement","props","isStatic","visualElement","layoutId","validMotionProps","isValidMotionProp","isPropValid","emotionIsPropValid_1","forwardedProps","domProps","filterProps","visualProps","buildSVGProps","drag","htmlProps","userSelect","draggable","buildHTMLProps","BoundingBoxDimension","positionalKeys","isPositionalKey","setAndResetVelocity","isNumOrPxType","getPosFromMatrix","matrix","pos","split","getTranslateFromMatrix","pos2","pos3","_bbox","matrix3d","nonTranslationalTransformKeys","filter","positionalValues","checkAndConvertChangedValueTypes","transitionEnd","targetPositionalKeys","removedTransformValues","hasAttemptedToRemoveTransformValues","changedValueTypeKeys","toType","fromType","numKeyframes","removedTransforms","removeNonTranslationalTransform","convertedTarget","changedKeys","originBbox","elementComputedStyle","display","originComputedStyle","targetBbox","convertChangedValueTypes","unitConversion","some","hasPositionalKey","parseDomVariant","HTMLElement","resolveCSSVariables","AnimationControls","hasMounted","pendingAnimations","componentControls","setVariants","variants","setDefaultTransition","defaultTransition","transitionOverride","animations_1","all","MotionContext","static","isVariantLabel","isAnimationControls","useMotionContext","parentContext","initialState","initial","animate","whileTap","whileHover","presenceContext","presenceId","isPresenceRoot","shouldPropagateControls","targetInitial","targetAnimate","initialDependency","animateDependency","isReducedMotion","isInitialOnly","isInitialRender","useInitialOrEveryRender","initialToApply","checkShouldInheritVariant","inherit","isMotionValue","isForcedMotionValue","layout","addMotionValues","isStyle","foundMotionValue","reservedNames","empty","resolveFinalValueInKeyframes","VisualElementAnimationControls","makeTargetAnimatable","baseTarget","overrides","resolvedOverrides","activeOverrides","setProps","setValues","isActive","priority","resolveVariant","transformValues","targetValue","checkForNewValues","newValueKeys","numNewValues","readValue","variant","custom","getHighestPriority","setOverride","overrideIndex","startOverride","override","clearOverride","highest","resetIsAnimating","overrideTarget","remainingValues","onStart","applyVariantLabels","variantLabelList","reverse","opts","animateVariantLabels","animateVariant","animationDefinition","getOriginFromTransition","getOrigin","animatable","animations","valueTarget","allAnimations","variantLabels","label","variantLabel","getChildrenAnimations","forwardDelay","animateChildren","first","last","maxStaggerDuration","generateStaggerDuration","childControls","onAnimationStart","onAnimationComplete","checkOverrideIsAnimating","numOverrides","resolvedOverride","addChild","removeChild","resetChildren","useVisualElementAnimation","subscribeToParentControls","parentControls","unmountProps","Presence","VisibilityAction","MotionConfigContext","p","features","defaultHandler","sortByDepth","createBatcher","queue","flush","order","presence","Present","isSharedLayout","forceUpdate","SharedLayoutContext","useIsomorphicLayoutEffect","createMotionComponent","defaultFeatures","useVisualElement","animationControlsConfig","shouldInheritVariant","isForced","existsAsProp","existsAsStyle","propIsMotionValue","styleIsMotionValue","useMotionValues","plugins","allFeatures","numFeatures","shouldRender","getComponent","localContext","useFeatures","component","syncLayout","remove","useSnapshotOnUnmount","Provider","createLock","name","lock","globalHorizontalLock","globalVerticalLock","getGlobalLock","openHorizontal_1","openVertical_1","isViewportScrollBlocked","document","addEventListener","event","preventDefault","passive","unblockViewportScroll","addDomEvent","eventName","removeEventListener","isMouseEvent","PointerEvent","pointerType","MouseEvent","isTouchEvent","touches","defaultPagePoint","pageX","pageY","pointFromTouch","pointType","changedTouches","pointFromMouse","extractEventInfo","getViewportPointFromEvent","Point","wrapHandler","shouldFilterPrimaryPointer","listener","eventHandler","button","filterPrimaryPointer","isBrowser$2","mouseEventNames","pointerdown","pointermove","pointerup","pointercancel","pointerover","pointerout","pointerenter","pointerleave","touchEventNames","getPointerEventName","onpointerdown","ontouchstart","onmousedown","addPointerEvent","usePointerEvent","useDomEvent","subtract","relativeTo","idOrElem","elem","localElem","getElementById","rect","scrollX","scrollY","PanSession","handlers","startEvent","lastMoveEvent","lastMoveEventInfo","updatePoint","info","getPanInfo","history","isPanStarted","isDistancePastThreshold","onMove","initialInfo","onSessionStart","removeOnPointerMove","handlePointerMove","removeOnPointerUp","handlePointerUp","removeListeners","buttons","end","onEnd","panInfo","updateHandlers","lastDevicePoint","startDevicePoint","getVelocity$1","timestampedPoint","lastPoint","time","currentVelocity","Infinity","applyConstraints","elastic","calcRelativeAxisConstraints","calcViewportAxisConstraints","layoutAxis","constraintsAxis","lastPointerEvent","elementDragControls","WeakMap","VisualElementDragControls","isDragging","currentDirection","constraints","hasMutatedConstraints","cursorProgress","openGlobalLock","panSession","originEvent","snapToCursor","stopMotion","dragPropagation","prepareBoundingBox","resolveDragConstraints","axisValue","getAxisMotionValue","onDragStart","dragDirectionLock","lockThreshold","direction","abs","getCurrentDirection","onDirectionLock","updateAxis","onDrag","dragConstraints","resolveRefConstraints","layoutBox","calcRelativeConstraints","relativeConstraints","onMeasureDragConstraints","constraintsElement","constraintsBox","measuredConstraints","calcViewportConstraints","userConstraints","convertAxisBoxToBoundingBox","cancelDrag","dragMomentum","dragElastic","onDragEnd","animateDragEnd","length_1","center","updateVisualElementAxis","shouldDrag","updateAxisMotionValue","nextValue","axisLayout","axisLength","calcConstrainedMinPoint","updateProps","_f","_g","remainingProps","dragKey","toUpperCase","dragTransition","momentumAnimations","bounceStiffness","bounceDamping","inertia","timeConstant","startAxisValueAnimation","onDragTransitionEnd","currentValue","boxProgress","calcPositionFromProgress","stopPointerListener","dragListener","stopResizeListener","stopLayoutUpdateListener","prevSnapshot","makeRenderlessComponent","hook","groupDragControls","dragControls","useDrag","Drag","useUnmountEffect","order$1","getGesturePriority","gesture","tapGesturePriority","hoverPriority","filterTouch","useGestures","onPan","onPanStart","onPanEnd","onPanSessionStart","hasPanEvents","usePanGesture","onTap","onTapStart","onTapCancel","hasTapListeners","isTapping","cancelPointerEventListener","removePointerUp","onPointerUp","openGestureLock","isNodeOrChild","parentElement","useTapGesture","onHoverStart","onHoverEnd","useHoverGesture","AnimatePropType","gestureProps","GestureComponent","Gestures","ExitComponent","exit","isPlayingExitAnimation","Exit","targetWithoutTransition","mergeTransitionEnd","resolveVariantLabels","unresolvedVariant","AnimatePropComponents","Target","targetAndTransition","prevValues","targetToAnimate","animatingTarget","finalTarget","shouldAnimateOnMount","isValidValue","valueHasUpdated","prevLength","shallowCompare","useAnimateProp","VariantLabel","targetVariants","parentAlreadyMounted","oldVariant","newVariant","shouldAnimate","join","useVariants","AnimationSubscription","unsubscribe","useAnimationGroupSubscription","isAnimationSubscription","animationProps","animatePropTypeTests","prop","Animation","animatePropType","Animate","frameTarget","stopAxisAnimation","visibilityAction","shouldStackAnimate","safeToRemove","boxHasMoved","hasMoved","animateAxis","Hide","onLayoutAnimationComplete","componentDidMount","unsubLayoutReady","componentWillUnmount","crossfadeOpacity","crossfade","layoutProgress","createCrossfadeAnimation","frame","tweenAxis","unsubscribeProgress","easeCrossfadeIn","easeCrossfadeOut","AnimateLayoutContextProvider","hasAxisMoved","compress","easing","AnimateLayout","Measure","getSnapshotBeforeUpdate","syncUpdate","componentDidUpdate","MeasureContextProvider","createElement","MeasureLayout","createMotionProxy","componentCache","Proxy","motion","getPresenceId","PresenceChild","_onExitComplete","presenceAffectsLayout","presenceChildren","newChildrenMap","childId","allComplete","isComplete","getChildKey","AnimatePresence","exitBeforeEnter","forceRender","forcedRenderCount","setForcedRenderCount","useForceUpdate","layoutContext","filteredChildren","filtered","onlyElements","presentChildren","allChildren","exiting","updateChildLookup","childrenToRender","presentKeys","targetKeys","numPresent","insertionIndex","splice","removeIndex","findIndex","presentChild","createSwitchAnimation","stack","lead","Entering","prevLead","Show","getFollowOrigin","Exiting","getFollowTarget","stackLead","stackLeadPresence","follow","getLeadTransition","getLeadTarget","getLeadOrigin","LayoutStack","hasChildren","snapshot","boundingBox","latestMotionValues","index","stackChild","updateLeadAndFollow","prevFollow","leadIndex","numInStack","lastIsPresent","findLeadAndFollow","updateSnapshot","isLeadPresent","AnimateSharedLayout","stacks","updateScheduled","renderScheduled","syncContext","scheduleUpdate","updateStacks","startLayoutAnimation","shouldComponentUpdate","createAnimation","getStack","addToStack","removeFromStack","useMotionValue","createScrollMotionValues","scrollXProgress","scrollYProgress","prefersReducedMotion","matchMedia","motionMediaQuery_1","setReducedMotionPreferences","matches","addListener","useAnimation","animationControls","DragControls","nativeEvent","StateVisualElement"],"mappings":"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","file":"05d954cf-ae497a446052259291f9.js","sourcesContent":["import { __values, __assign, __spread, __rest, __read, __extends } from 'tslib';\nimport sync, { getFrameData, cancelSync } from 'framesync';\nimport { velocityPerSecond, mix, clamp, distance, progress, cubicBezier, linear, easeIn, easeInOut, easeOut, circIn, circInOut, circOut, backIn, backInOut, backOut, anticipate, bounceIn, bounceInOut, bounceOut, inertia, animate, interpolate, wrap } from 'popmotion';\nimport { invariant, warning } from 'hey-listen';\nimport { number, color, complex, px, percent, degrees, vw, vh, scale, alpha, progressPercentage } from 'style-value-types';\nimport React, { useRef, createContext, useContext, useEffect, createElement, useMemo, useLayoutEffect, forwardRef, Fragment, Component as Component$1, useCallback, useState, cloneElement, Children, isValidElement } from 'react';\n\nvar isRefObject = function isRefObject(ref) {\n return typeof ref === \"object\" && ref.hasOwnProperty(\"current\");\n};\n/**\n * A generic subscription manager.\n */\n\n\nvar SubscriptionManager =\n/** @class */\nfunction () {\n function SubscriptionManager() {\n this.subscriptions = new Set();\n }\n\n SubscriptionManager.prototype.add = function (handler) {\n var _this = this;\n\n this.subscriptions.add(handler);\n return function () {\n return void _this.subscriptions.delete(handler);\n };\n };\n\n SubscriptionManager.prototype.notify = function (\n /**\n * Using ...args would be preferable but it's array creation and this\n * might be fired every frame.\n */\n a, b, c) {\n var e_1, _a;\n\n if (!this.subscriptions.size) return;\n\n try {\n for (var _b = __values(this.subscriptions), _c = _b.next(); !_c.done; _c = _b.next()) {\n var handler = _c.value;\n handler(a, b, c);\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n };\n\n SubscriptionManager.prototype.clear = function () {\n this.subscriptions.clear();\n };\n\n return SubscriptionManager;\n}();\n\nvar isFloat = function isFloat(value) {\n return !isNaN(parseFloat(value));\n};\n/**\n * `MotionValue` is used to track the state and velocity of motion values.\n *\n * @public\n */\n\n\nvar MotionValue =\n/** @class */\nfunction () {\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 function MotionValue(init) {\n var _this = this;\n /**\n * Duration, in milliseconds, since last updating frame.\n *\n * @internal\n */\n\n\n this.timeDelta = 0;\n /**\n * Timestamp of the last time this `MotionValue` was updated.\n *\n * @internal\n */\n\n this.lastUpdated = 0;\n /**\n * Functions to notify when the `MotionValue` updates.\n *\n * @internal\n */\n\n this.updateSubscribers = new SubscriptionManager();\n /**\n * Functions to notify when the `MotionValue` updates and `render` is set to `true`.\n *\n * @internal\n */\n\n this.renderSubscribers = new SubscriptionManager();\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\n this.canTrackVelocity = false;\n\n this.updateAndNotify = function (v, render) {\n if (render === void 0) {\n render = true;\n }\n\n _this.prev = _this.current;\n _this.current = v;\n\n if (_this.prev !== _this.current) {\n _this.updateSubscribers.notify(_this.current);\n }\n\n if (render) {\n _this.renderSubscribers.notify(_this.current);\n } // Update timestamp\n\n\n var _a = getFrameData(),\n delta = _a.delta,\n timestamp = _a.timestamp;\n\n if (_this.lastUpdated !== timestamp) {\n _this.timeDelta = delta;\n _this.lastUpdated = timestamp;\n sync.postRender(_this.scheduleVelocityCheck);\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\n\n this.scheduleVelocityCheck = function () {\n return sync.postRender(_this.velocityCheck);\n };\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\n\n this.velocityCheck = function (_a) {\n var timestamp = _a.timestamp;\n\n if (timestamp !== _this.lastUpdated) {\n _this.prev = _this.current;\n }\n };\n\n this.set(init, false);\n this.canTrackVelocity = isFloat(this.current);\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 * @library\n *\n * ```jsx\n * function 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.onChange(updateOpacity)\n * const unsubscribeY = y.onChange(updateOpacity)\n *\n * return () => {\n * unsubscribeX()\n * unsubscribeY()\n * }\n * }, [])\n *\n * return \n * }\n * ```\n *\n * @motion\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.onChange(updateOpacity)\n * const unsubscribeY = y.onChange(updateOpacity)\n *\n * return () => {\n * unsubscribeX()\n * unsubscribeY()\n * }\n * }, [])\n *\n * return \n * }\n * ```\n *\n * @internalremarks\n *\n * We could look into a `useOnChange` hook if the above lifecycle management proves confusing.\n *\n * ```jsx\n * useOnChange(x, () => {})\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 * @public\n */\n\n\n MotionValue.prototype.onChange = function (subscription) {\n return this.updateSubscribers.add(subscription);\n };\n\n MotionValue.prototype.clearListeners = function () {\n this.updateSubscribers.clear();\n };\n /**\n * Adds a function that will be notified when the `MotionValue` requests a render.\n *\n * @param subscriber - A function that's provided the latest value.\n * @returns A function that, when called, will cancel this subscription.\n *\n * @internal\n */\n\n\n MotionValue.prototype.onRenderRequest = function (subscription) {\n // Render immediately\n subscription(this.get());\n return this.renderSubscribers.add(subscription);\n };\n /**\n * Attaches a passive effect to the `MotionValue`.\n *\n * @internal\n */\n\n\n MotionValue.prototype.attach = function (passiveEffect) {\n this.passiveEffect = passiveEffect;\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\n\n MotionValue.prototype.set = function (v, render) {\n if (render === void 0) {\n render = true;\n }\n\n if (!render || !this.passiveEffect) {\n this.updateAndNotify(v, render);\n } else {\n this.passiveEffect(v, this.updateAndNotify);\n }\n };\n /**\n * Returns the latest state of `MotionValue`\n *\n * @returns - The latest state of `MotionValue`\n *\n * @public\n */\n\n\n MotionValue.prototype.get = function () {\n return this.current;\n };\n /**\n * @public\n */\n\n\n MotionValue.prototype.getPrevious = function () {\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\n\n MotionValue.prototype.getVelocity = function () {\n // This could be isFloat(this.prev) && isFloat(this.current), but that would be wasteful\n return this.canTrackVelocity ? // These casts could be avoided if parseFloat would be typed better\n velocityPerSecond(parseFloat(this.current) - parseFloat(this.prev), this.timeDelta) : 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\n\n MotionValue.prototype.start = function (animation) {\n var _this = this;\n\n this.stop();\n return new Promise(function (resolve) {\n _this.stopAnimation = animation(resolve);\n }).then(function () {\n return _this.clearAnimation();\n });\n };\n /**\n * Stop the currently active animation.\n *\n * @public\n */\n\n\n MotionValue.prototype.stop = function () {\n if (this.stopAnimation) this.stopAnimation();\n this.clearAnimation();\n };\n /**\n * Returns `true` if this value is currently animating.\n *\n * @public\n */\n\n\n MotionValue.prototype.isAnimating = function () {\n return !!this.stopAnimation;\n };\n\n MotionValue.prototype.clearAnimation = function () {\n this.stopAnimation = null;\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\n\n MotionValue.prototype.destroy = function () {\n this.updateSubscribers.clear();\n this.renderSubscribers.clear();\n this.stop();\n };\n\n return MotionValue;\n}();\n/**\n * @internal\n */\n\n\nfunction motionValue(init) {\n return new MotionValue(init);\n}\n/**\n * VisualElement is an abstract class that provides a generic animation-optimised interface to the\n * underlying renderer.\n *\n * Currently many features interact directly with HTMLVisualElement/SVGVisualElement\n * but the idea is we can create, for instance, a ThreeVisualElement that extends\n * VisualElement and we can quickly offer all the same features.\n */\n\n\nvar VisualElement =\n/** @class */\nfunction () {\n function VisualElement(parent, ref) {\n var _this = this; // An iterable list of current children\n\n\n this.children = new Set(); // The latest resolved MotionValues\n\n this.latest = {}; // A map of MotionValues used to animate this element\n\n this.values = new Map(); // Unsubscription callbacks for MotionValue subscriptions\n\n this.valueSubscriptions = new Map(); // A configuration for this VisualElement, each derived class can extend this.\n\n this.config = {}; // A pre-bound call to the user-provided `onUpdate` callback. This won't\n // be called more than once per frame.\n\n this.update = function () {\n return _this.config.onUpdate(_this.latest);\n }; // Pre-bound version of render\n\n\n this.triggerRender = function () {\n return _this.render();\n }; // This function gets passed to the rendered component's `ref` prop\n // and is used to mount/unmount the VisualElement\n\n\n this.ref = function (element) {\n element ? _this.mount(element) : _this.unmount();\n if (!_this.externalRef) return;\n\n if (typeof _this.externalRef === \"function\") {\n _this.externalRef(element);\n } else if (isRefObject(_this.externalRef)) {\n _this.externalRef.current = element;\n }\n }; // Create a relationship with the provided parent.\n\n\n this.parent = parent;\n this.rootParent = parent ? parent.rootParent : this;\n this.treePath = parent ? __spread(parent.treePath, [parent]) : []; // Calculate the depth of this node in the VisualElement graph\n\n this.depth = parent ? parent.depth + 1 : 0; // A reference to any externally-defined React ref. This might live better\n // outside the VisualElement and be handled in a hook.\n\n this.externalRef = ref;\n }\n\n VisualElement.prototype.subscribe = function (child) {\n var _this = this;\n\n this.children.add(child);\n return function () {\n return _this.children.delete(child);\n };\n }; // Check whether this element has a MotionValue of the provided key\n\n\n VisualElement.prototype.hasValue = function (key) {\n return this.values.has(key);\n }; // Add a MotionValue\n\n\n VisualElement.prototype.addValue = function (key, value) {\n if (this.hasValue(key)) this.removeValue(key);\n this.values.set(key, value);\n this.setSingleStaticValue(key, value.get());\n this.subscribeToValue(key, value);\n }; // Remove a MotionValue\n\n\n VisualElement.prototype.removeValue = function (key) {\n var _a;\n\n (_a = this.valueSubscriptions.get(key)) === null || _a === void 0 ? void 0 : _a();\n this.valueSubscriptions.delete(key);\n this.values.delete(key);\n delete this.latest[key];\n };\n\n VisualElement.prototype.getValue = function (key, defaultValue) {\n var value = this.values.get(key);\n\n if (value === undefined && defaultValue !== undefined) {\n value = new MotionValue(defaultValue);\n this.addValue(key, value);\n }\n\n return value;\n }; // Iterate over all MotionValues\n\n\n VisualElement.prototype.forEachValue = function (callback) {\n this.values.forEach(callback);\n }; // Get the underlying rendered instance of this VisualElement. For instance in\n // HTMLVisualElement this will be a HTMLElement.\n\n\n VisualElement.prototype.getInstance = function () {\n return this.element;\n };\n\n VisualElement.prototype.updateConfig = function (config) {\n if (config === void 0) {\n config = {};\n }\n\n this.config = __assign({}, config);\n }; // Set a single `latest` value\n\n\n VisualElement.prototype.setSingleStaticValue = function (key, value) {\n this.latest[key] = value;\n }; // Statically set values to `latest` without needing a MotionValue\n\n\n VisualElement.prototype.setStaticValues = function (values, value) {\n if (typeof values === \"string\") {\n this.setSingleStaticValue(values, value);\n } else {\n for (var key in values) {\n this.setSingleStaticValue(key, values[key]);\n }\n }\n };\n\n VisualElement.prototype.scheduleRender = function () {\n sync.render(this.triggerRender, false, true);\n };\n\n VisualElement.prototype.scheduleUpdateLayoutDelta = function () {\n sync.preRender(this.rootParent.updateLayoutDelta, false, true);\n };\n\n VisualElement.prototype.subscribeToValue = function (key, value) {\n var _this = this;\n\n var onChange = function onChange(latest) {\n _this.setSingleStaticValue(key, latest); // Schedule onUpdate if we have an onUpdate listener and the component has mounted\n\n\n _this.element && _this.config.onUpdate && sync.update(_this.update, false, true);\n };\n\n var onRender = function onRender() {\n _this.element && _this.scheduleRender();\n };\n\n var unsubscribeOnChange = value.onChange(onChange);\n var unsubscribeOnRender = value.onRenderRequest(onRender);\n this.valueSubscriptions.set(key, function () {\n unsubscribeOnChange();\n unsubscribeOnRender();\n });\n }; // Mount the VisualElement with the actual DOM element\n\n\n VisualElement.prototype.mount = function (element) {\n invariant(!!element, \"No ref found. Ensure components created with motion.custom forward refs using React.forwardRef\");\n\n if (this.parent) {\n this.removeFromParent = this.parent.subscribe(this);\n }\n /**\n * Save the element to this.element as a semantic API, this.current to the VisualElement\n * is compatible with existing RefObject APIs.\n */\n\n\n this.element = this.current = element;\n }; // Unmount the VisualElement and cancel any scheduled updates\n\n\n VisualElement.prototype.unmount = function () {\n var _this = this;\n\n this.forEachValue(function (_, key) {\n return _this.removeValue(key);\n });\n cancelSync.update(this.update);\n cancelSync.render(this.render);\n this.removeFromParent && this.removeFromParent();\n };\n\n return VisualElement;\n}();\n\nfunction noop(any) {\n return any;\n}\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 */\n\n\nfunction convertBoundingBoxToAxisBox(_a) {\n var top = _a.top,\n left = _a.left,\n right = _a.right,\n bottom = _a.bottom;\n return {\n x: {\n min: left,\n max: right\n },\n y: {\n min: top,\n max: bottom\n }\n };\n}\n\nfunction convertAxisBoxToBoundingBox(_a) {\n var x = _a.x,\n y = _a.y;\n return {\n top: y.min,\n bottom: y.max,\n left: x.min,\n right: x.max\n };\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 */\n\n\nfunction transformBoundingBox(_a, transformPoint) {\n var top = _a.top,\n left = _a.left,\n bottom = _a.bottom,\n right = _a.right;\n\n if (transformPoint === void 0) {\n transformPoint = noop;\n }\n\n var topLeft = transformPoint({\n x: left,\n y: top\n });\n var bottomRight = transformPoint({\n x: right,\n y: bottom\n });\n return {\n top: topLeft.y,\n left: topLeft.x,\n bottom: bottomRight.y,\n right: bottomRight.x\n };\n}\n/**\n * Create an empty axis box of zero size\n */\n\n\nfunction axisBox() {\n return {\n x: {\n min: 0,\n max: 1\n },\n y: {\n min: 0,\n max: 1\n }\n };\n}\n\nfunction copyAxisBox(box) {\n return {\n x: __assign({}, box.x),\n y: __assign({}, box.y)\n };\n}\n/**\n * Create an empty box delta\n */\n\n\nvar zeroDelta = {\n translate: 0,\n scale: 1,\n origin: 0,\n originPoint: 0\n};\n\nfunction delta() {\n return {\n x: __assign({}, zeroDelta),\n y: __assign({}, zeroDelta)\n };\n}\n/**\n * ValueType for \"auto\"\n */\n\n\nvar auto = {\n test: function test(v) {\n return v === \"auto\";\n },\n parse: function parse(v) {\n return v;\n }\n};\n/**\n * ValueType for ints\n */\n\nvar int = __assign(__assign({}, number), {\n transform: Math.round\n});\n/**\n * A map of default value types for common values\n */\n\n\nvar defaultValueTypes = {\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 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: int,\n // SVG\n fillOpacity: alpha,\n strokeOpacity: alpha,\n numOctaves: int\n};\n/**\n * A list of value types commonly used for dimensions\n */\n\nvar dimensionValueTypes = [number, px, percent, degrees, vw, vh, auto];\n/**\n * Tests a provided value against a ValueType\n */\n\nvar testValueType = function testValueType(v) {\n return function (type) {\n return type.test(v);\n };\n};\n/**\n * Tests a dimensional value against the list of dimension ValueTypes\n */\n\n\nvar findDimensionValueType = function findDimensionValueType(v) {\n return dimensionValueTypes.find(testValueType(v));\n};\n/**\n * A list of all ValueTypes\n */\n\n\nvar valueTypes = __spread(dimensionValueTypes, [color, complex]);\n/**\n * Tests a value against the list of ValueTypes\n */\n\n\nvar findValueType = function findValueType(v) {\n return valueTypes.find(testValueType(v));\n};\n/**\n * Gets the default ValueType for the provided value key\n */\n\n\nvar getDefaultValueType = function getDefaultValueType(key) {\n return defaultValueTypes[key];\n};\n/**\n * Provided a value and a ValueType, returns the value as that value type.\n */\n\n\nvar getValueAsType = function getValueAsType(value, type) {\n return type && typeof value === \"number\" ? type.transform(value) : value;\n};\n/**\n * A list of all transformable axes. We'll use this list to generated a version\n * of each axes for each transform.\n */\n\n\nvar transformAxes = [\"\", \"X\", \"Y\", \"Z\"];\n/**\n * An ordered array of each transformable value. By default, transform values\n * will be sorted to this order.\n */\n\nvar order = [\"perspective\", \"translate\", \"scale\", \"rotate\", \"skew\"];\n/**\n * Used to store the keys of all transforms that will distorted a measured bounding box.\n */\n\nvar boxDistortingKeys = new Set();\n/**\n * Generate a list of every possible transform key.\n */\n\nvar transformProps = [\"transformPerspective\", \"x\", \"y\", \"z\"];\norder.forEach(function (operationKey) {\n var isDistorting = new Set([\"rotate\", \"skew\"]).has(operationKey);\n transformAxes.forEach(function (axesKey) {\n var key = operationKey + axesKey;\n transformProps.push(key);\n isDistorting && boxDistortingKeys.add(key);\n });\n});\n/**\n * A function to use with Array.sort to sort transform keys by their default order.\n */\n\nfunction sortTransformProps(a, b) {\n return transformProps.indexOf(a) - transformProps.indexOf(b);\n}\n/**\n * A quick lookup for transform props.\n */\n\n\nvar transformPropSet = new Set(transformProps);\n\nfunction isTransformProp(key) {\n return transformPropSet.has(key);\n}\n/**\n * A quick lookup for transform origin props\n */\n\n\nvar transformOriginProps = new Set([\"originX\", \"originY\", \"originZ\"]);\n\nfunction isTransformOriginProp(key) {\n return transformOriginProps.has(key);\n}\n\nvar translateAlias = {\n x: \"translateX\",\n y: \"translateY\",\n z: \"translateZ\",\n transformPerspective: \"perspective\"\n};\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 */\n\nfunction buildTransform(transform, transformKeys, transformTemplate, transformIsDefault, enableHardwareAcceleration, allowTransformNone) {\n if (enableHardwareAcceleration === void 0) {\n enableHardwareAcceleration = true;\n }\n\n if (allowTransformNone === void 0) {\n allowTransformNone = true;\n } // The transform string we're going to build into.\n\n\n var transformString = \"\"; // Transform keys into their default order - this will determine the output order.\n\n transformKeys.sort(sortTransformProps); // Track whether the defined transform has a defined z so we don't add a\n // second to enable hardware acceleration\n\n var transformHasZ = false; // Loop over each transform and build them into transformString\n\n var numTransformKeys = transformKeys.length;\n\n for (var i = 0; i < numTransformKeys; i++) {\n var key = transformKeys[i];\n transformString += (translateAlias[key] || key) + \"(\" + transform[key] + \") \";\n if (key === \"z\") transformHasZ = true;\n }\n\n if (!transformHasZ && enableHardwareAcceleration) {\n transformString += \"translateZ(0)\";\n } else {\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\n\n if (transformTemplate) {\n transformString = transformTemplate(transform, transformIsDefault ? \"\" : transformString);\n } else if (allowTransformNone && transformIsDefault) {\n transformString = \"none\";\n }\n\n return transformString;\n}\n/**\n * Build a transformOrigin style. Uses the same defaults as the browser for\n * undefined origins.\n */\n\n\nfunction buildTransformOrigin(_a) {\n var _b = _a.originX,\n originX = _b === void 0 ? \"50%\" : _b,\n _c = _a.originY,\n originY = _c === void 0 ? \"50%\" : _c,\n _d = _a.originZ,\n originZ = _d === void 0 ? 0 : _d;\n return originX + \" \" + originY + \" \" + originZ;\n}\n/**\n * Build a transform style that takes a calculated delta between the element's current\n * space on screen and projects it into the desired space.\n */\n\n\nfunction buildLayoutProjectionTransform(_a, treeScale) {\n var x = _a.x,\n y = _a.y;\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\n var xTranslate = x.translate / treeScale.x;\n var yTranslate = y.translate / treeScale.y;\n return \"translate3d(\" + xTranslate + \"px, \" + yTranslate + \"px, 0) scale(\" + x.scale + \", \" + y.scale + \")\";\n}\n\nvar identityProjection = buildLayoutProjectionTransform(delta(), {\n x: 1,\n y: 1\n});\n/**\n * Take the calculated delta origin and apply it as a transform string.\n */\n\nfunction buildLayoutProjectionTransformOrigin(_a) {\n var x = _a.x,\n y = _a.y;\n return x.origin * 100 + \"% \" + y.origin * 100 + \"% 0\";\n}\n/**\n * Build a transform string only from the properties that distort bounding box measurements\n * (rotate and skew)\n */\n\n\nfunction buildBoxDistortingTransforms(transform, transformKeys) {\n var transformString = \"\";\n transformKeys.sort(sortTransformProps);\n var numTransformKeys = transformKeys.length;\n\n for (var i = 0; i < numTransformKeys; i++) {\n var key = transformKeys[i];\n\n if (boxDistortingKeys.has(key)) {\n transformString += key + \"(\" + transform[key] + \") \";\n }\n }\n\n return transformString;\n}\n/**\n * Returns true if the provided key is a CSS variable\n */\n\n\nfunction isCSSVariable(key) {\n return key.startsWith(\"--\");\n}\n\nfunction isCSSVariable$1(value) {\n return typeof value === \"string\" && value.startsWith(\"var(--\");\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 */\n\n\nvar cssVariableRegex = /var\\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\\)/;\n\nfunction parseCSSVariable(current) {\n var match = cssVariableRegex.exec(current);\n if (!match) return [,];\n\n var _a = __read(match, 3),\n token = _a[1],\n fallback = _a[2];\n\n return [token, fallback];\n}\n\nvar maxDepth = 4;\n\nfunction getVariableValue(current, element, depth) {\n if (depth === void 0) {\n depth = 1;\n }\n\n invariant(depth <= maxDepth, \"Max CSS variable fallback depth detected in property \\\"\" + current + \"\\\". This may indicate a circular fallback dependency.\");\n\n var _a = __read(parseCSSVariable(current), 2),\n token = _a[0],\n fallback = _a[1]; // No CSS variable detected\n\n\n if (!token) return; // Attempt to read this CSS variable off the element\n\n var resolved = window.getComputedStyle(element).getPropertyValue(token);\n\n if (resolved) {\n return resolved;\n } else if (isCSSVariable$1(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 } else {\n return fallback;\n }\n}\n/**\n * Resolve CSS variables from\n *\n * @internal\n */\n\n\nfunction resolveCSSVariables(visualElement, _a, transitionEnd) {\n var _b;\n\n var target = __rest(_a, []);\n\n var element = visualElement.getInstance();\n if (!(element instanceof HTMLElement)) return {\n target: target,\n transitionEnd: 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\n if (transitionEnd) {\n transitionEnd = __assign({}, transitionEnd);\n } // Go through existing `MotionValue`s and ensure any existing CSS variables are resolved\n\n\n visualElement.forEachValue(function (value) {\n var current = value.get();\n if (!isCSSVariable$1(current)) return;\n var resolved = getVariableValue(current, element);\n if (resolved) value.set(resolved);\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\n for (var key in target) {\n var current = target[key];\n if (!isCSSVariable$1(current)) continue;\n var resolved = getVariableValue(current, element);\n if (!resolved) continue; // Clone target if it hasn't already been\n\n target[key] = resolved; // 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\n if (transitionEnd) (_b = transitionEnd[key]) !== null && _b !== void 0 ? _b : transitionEnd[key] = current;\n }\n\n return {\n target: target,\n transitionEnd: transitionEnd\n };\n}\n\nfunction pixelsToPercent(pixels, axis) {\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 */\n\n\nfunction correctBorderRadius(latest, viewportBox) {\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 } 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\n\n var x = pixelsToPercent(latest, viewportBox.x);\n var y = pixelsToPercent(latest, viewportBox.y);\n return x + \"% \" + y + \"%\";\n}\n\nvar varToken = \"_$css\";\n\nfunction correctBoxShadow(latest, _viewportBox, delta, treeScale) {\n var original = latest;\n /**\n * We need to first strip and store CSS variables from the string.\n */\n\n var containsCSSVariables = latest.includes(\"var(\");\n var cssVariables = [];\n\n if (containsCSSVariables) {\n latest = latest.replace(cssVariableRegex, function (match) {\n cssVariables.push(match);\n return varToken;\n });\n }\n\n var shadow = complex.parse(latest); // TODO: Doesn't support multiple shadows\n\n if (shadow.length > 5) return original;\n var template = complex.createTransformer(latest);\n var offset = typeof shadow[0] !== \"number\" ? 1 : 0; // Calculate the overall context scale\n\n var xScale = delta.x.scale * treeScale.x;\n var yScale = delta.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\n var averageScale = mix(xScale, yScale, 0.5); // Blur\n\n if (typeof shadow[2 + offset] === \"number\") shadow[2 + offset] /= averageScale; // Spread\n\n if (typeof shadow[3 + offset] === \"number\") shadow[3 + offset] /= averageScale;\n var output = template(shadow);\n\n if (containsCSSVariables) {\n var i_1 = 0;\n output = output.replace(varToken, function () {\n var cssVariable = cssVariables[i_1];\n i_1++;\n return cssVariable;\n });\n }\n\n return output;\n}\n\nvar borderCorrectionDefinition = {\n process: correctBorderRadius\n};\nvar valueScaleCorrection = {\n borderRadius: __assign(__assign({}, borderCorrectionDefinition), {\n applyTo: [\"borderTopLeftRadius\", \"borderTopRightRadius\", \"borderBottomLeftRadius\", \"borderBottomRightRadius\"]\n }),\n borderTopLeftRadius: borderCorrectionDefinition,\n borderTopRightRadius: borderCorrectionDefinition,\n borderBottomLeftRadius: borderCorrectionDefinition,\n borderBottomRightRadius: borderCorrectionDefinition,\n boxShadow: {\n process: correctBoxShadow\n }\n};\n/**\n * @internal\n */\n\nfunction addScaleCorrection(correctors) {\n for (var key in correctors) {\n valueScaleCorrection[key] = correctors[key];\n }\n}\n/**\n * Build style and CSS variables\n *\n * This function converts a Motion style prop:\n *\n * { x: 100, width: 100, originX: 0.5 }\n *\n * Into an object with default value types applied and default\n * transform order set:\n *\n * {\n * transform: 'translateX(100px) translateZ(0)`,\n * width: '100px',\n * transformOrigin: '50% 50%'\n * }\n *\n * Styles are saved to `style` and CSS vars to `vars`.\n *\n * This function works with mutative data structures.\n */\n\n\nfunction buildHTMLStyles(latest, style, vars, transform, transformOrigin, transformKeys, _a, isLayoutProjectionEnabled, delta, deltaFinal, treeScale, targetBox) {\n var enableHardwareAcceleration = _a.enableHardwareAcceleration,\n transformTemplate = _a.transformTemplate,\n allowTransformNone = _a.allowTransformNone; // Empty the transformKeys array. As we're throwing out refs to its items\n // this might not be as cheap as suspected. Maybe using the array as a buffer\n // with a manual incrementation would be better.\n\n transformKeys.length = 0; // Track whether we encounter any transform or transformOrigin values.\n\n var hasTransform = false;\n var hasTransformOrigin = false; // Does the calculated transform essentially equal \"none\"?\n\n var transformIsNone = true;\n /**\n * Loop over all our latest animated values and decide whether to handle them\n * as a style or CSS variable. Transforms and transform origins are kept seperately\n * for further processing\n */\n\n for (var key in latest) {\n var value = latest[key]; // Convert the value to its default value type, ie 0 -> \"0px\"\n\n var valueType = getDefaultValueType(key);\n var valueAsType = getValueAsType(value, valueType);\n\n if (isTransformProp(key)) {\n // If this is a transform, flag and enable further transform processing\n hasTransform = true;\n transform[key] = valueAsType;\n transformKeys.push(key);\n if (!transformIsNone) continue; // If all the transform keys we've so far encountered are their default value\n // then check to see if this one isn't\n\n var defaultValue = valueType.default !== undefined ? valueType.default : 0;\n if (value !== defaultValue) transformIsNone = false;\n } else if (isTransformOriginProp(key)) {\n // If this is a transform origin, flag and enable further transform-origin processing\n transformOrigin[key] = valueAsType;\n hasTransformOrigin = true;\n } else if (key !== \"transform\" || typeof value !== \"function\") {\n // Handle all remaining values. Decide which map to save to depending\n // on whether this is a CSS variable\n var bucket = isCSSVariable(key) ? vars : style; // If we need to perform scale correction, and we have a handler for this\n // value type (ie borderRadius), perform it\n\n if (isLayoutProjectionEnabled && valueScaleCorrection[key]) {\n var corrected = valueScaleCorrection[key].process(value, targetBox, delta, treeScale);\n /**\n * Scale-correctable values can define a number of other values to break\n * down into. For instance borderRadius needs applying to borderBottomLeftRadius etc\n */\n\n var applyTo = valueScaleCorrection[key].applyTo;\n\n if (applyTo) {\n var num = applyTo.length;\n\n for (var i = 0; i < num; i++) {\n bucket[applyTo[i]] = corrected;\n }\n } else {\n bucket[key] = corrected;\n }\n } else {\n bucket[key] = valueAsType;\n }\n }\n }\n /**\n * Build transform and transformOrigin. If we're performing layout projection these need\n * to be based off the deltaFinal data. Any user-set origins will have been pre-baked\n * into the deltaFinal.\n */\n\n\n if (isLayoutProjectionEnabled) {\n style.transform = buildLayoutProjectionTransform(deltaFinal, treeScale);\n if (style.transform === identityProjection) style.transform = \"\";\n /**\n * If we have transform styles, build only those that distort bounding boxes (rotate/skew)\n * as translations and scales will already have been used to calculate deltaFinal.\n */\n\n if (hasTransform) {\n style.transform += \" \" + buildBoxDistortingTransforms(transform, transformKeys);\n style.transform = style.transform.trim();\n }\n\n if (transformTemplate) {\n style.transform = transformTemplate(transform, style.transform);\n }\n\n style.transformOrigin = buildLayoutProjectionTransformOrigin(deltaFinal);\n } else {\n if (hasTransform) {\n style.transform = buildTransform(transform, transformKeys, transformTemplate, transformIsNone, enableHardwareAcceleration, allowTransformNone);\n }\n\n if (hasTransformOrigin) {\n style.transformOrigin = buildTransformOrigin(transformOrigin);\n }\n }\n}\n/**\n * Reset an axis to the provided origin box.\n *\n * This is a mutative operation.\n */\n\n\nfunction resetAxis(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 */\n\n\nfunction resetBox(box, originBox) {\n resetAxis(box.x, originBox.x);\n resetAxis(box.y, originBox.y);\n}\n/**\n * Scales a point based on a factor and an originPoint\n */\n\n\nfunction scalePoint(point, scale, originPoint) {\n var distanceFromOrigin = point - originPoint;\n var scaled = scale * distanceFromOrigin;\n return originPoint + scaled;\n}\n/**\n * Applies a translate/scale delta to a point\n */\n\n\nfunction applyPointDelta(point, translate, scale, originPoint, boxScale) {\n if (boxScale !== undefined) {\n point = scalePoint(point, boxScale, originPoint);\n }\n\n return scalePoint(point, scale, originPoint) + translate;\n}\n/**\n * Applies a translate/scale delta to an axis\n */\n\n\nfunction applyAxisDelta(axis, translate, scale, originPoint, boxScale) {\n if (translate === void 0) {\n translate = 0;\n }\n\n if (scale === void 0) {\n scale = 1;\n }\n\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 */\n\n\nfunction applyBoxDelta(box, _a) {\n var x = _a.x,\n y = _a.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 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 */\n\n\nfunction applyAxisTransforms(final, axis, transforms, _a) {\n var _b = __read(_a, 3),\n key = _b[0],\n scaleKey = _b[1],\n originKey = _b[2]; // Copy the current axis to the final axis before mutation\n\n\n final.min = axis.min;\n final.max = axis.max;\n var axisOrigin = transforms[originKey] !== undefined ? transforms[originKey] : 0.5;\n var originPoint = mix(axis.min, axis.max, axisOrigin); // Apply the axis delta to the final axis\n\n applyAxisDelta(final, 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 */\n\n\nvar xKeys = [\"x\", \"scaleX\", \"originX\"];\nvar yKeys = [\"y\", \"scaleY\", \"originY\"];\n/**\n * Apply a transform to a box from the latest resolved motion values.\n */\n\nfunction applyBoxTransforms(finalBox, box, transforms) {\n applyAxisTransforms(finalBox.x, box.x, transforms, xKeys);\n applyAxisTransforms(finalBox.y, box.y, transforms, yKeys);\n}\n/**\n * Remove a delta from a point. This is essentially the steps of applyPointDelta in reverse\n */\n\n\nfunction removePointDelta(point, translate, scale, originPoint, boxScale) {\n point -= translate;\n point = scalePoint(point, 1 / scale, originPoint);\n\n if (boxScale !== undefined) {\n point = scalePoint(point, 1 / boxScale, originPoint);\n }\n\n return point;\n}\n/**\n * Remove a delta from an axis. This is essentially the steps of applyAxisDelta in reverse\n */\n\n\nfunction removeAxisDelta(axis, translate, scale, origin, boxScale) {\n if (translate === void 0) {\n translate = 0;\n }\n\n if (scale === void 0) {\n scale = 1;\n }\n\n if (origin === void 0) {\n origin = 0.5;\n }\n\n var originPoint = mix(axis.min, axis.max, origin) - 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 */\n\n\nfunction removeAxisTransforms(axis, transforms, _a) {\n var _b = __read(_a, 3),\n key = _b[0],\n scaleKey = _b[1],\n originKey = _b[2];\n\n removeAxisDelta(axis, transforms[key], transforms[scaleKey], transforms[originKey], transforms.scale);\n}\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 */\n\n\nfunction removeBoxTransforms(box, transforms) {\n removeAxisTransforms(box.x, transforms, xKeys);\n removeAxisTransforms(box.y, transforms, yKeys);\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 HTMLVisualElement.updateLayoutDelta\n */\n\n\nfunction applyTreeDeltas(box, treePath) {\n var treeLength = treePath.length;\n\n for (var i = 0; i < treeLength; i++) {\n applyBoxDelta(box, treePath[i].delta);\n }\n}\n\nvar clampProgress = function clampProgress(v) {\n return clamp(0, 1, v);\n};\n/**\n * Returns true if the provided value is within maxDistance of the provided target\n */\n\n\nfunction isNear(value, target, maxDistance) {\n if (target === void 0) {\n target = 0;\n }\n\n if (maxDistance === void 0) {\n maxDistance = 0.01;\n }\n\n return distance(value, target) < maxDistance;\n}\n/**\n * Calculate the translate needed to be applied to source to get target\n */\n\n\nfunction calcTranslate(source, target, origin) {\n var sourcePoint = mix(source.min, source.max, origin);\n var targetPoint = mix(target.min, target.max, origin);\n return targetPoint - sourcePoint;\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 */\n\n\nfunction calcOrigin(source, target) {\n var origin = 0.5;\n var sourceLength = source.max - source.min;\n var targetLength = target.max - target.min;\n\n if (targetLength > sourceLength) {\n origin = progress(target.min, target.max - sourceLength, source.min);\n } else if (sourceLength > targetLength) {\n origin = progress(source.min, source.max - targetLength, target.min);\n }\n\n return clampProgress(origin);\n}\n/**\n * Update the AxisDelta with a transform that projects source into target.\n *\n * The transform `origin` is optional. If not provided, it'll be automatically\n * calculated based on the relative positions of the two bounding boxes.\n */\n\n\nfunction updateAxisDelta(delta, source, target, origin) {\n var sourceLength = source.max - source.min;\n var targetLength = target.max - target.min;\n delta.origin = origin === undefined ? calcOrigin(source, target) : origin;\n delta.originPoint = mix(source.min, source.max, delta.origin);\n delta.scale = targetLength / sourceLength;\n if (isNear(delta.scale, 1, 0.0001)) delta.scale = 1;\n delta.translate = calcTranslate(source, target, delta.origin);\n if (isNear(delta.translate)) delta.translate = 0;\n}\n/**\n * Update the BoxDelta with a transform that projects the source into the target.\n *\n * The transform `origin` is optional. If not provided, it'll be automatically\n * calculated based on the relative positions of the two bounding boxes.\n */\n\n\nfunction updateBoxDelta(delta, source, target, origin) {\n updateAxisDelta(delta.x, source.x, target.x, origin);\n updateAxisDelta(delta.y, source.y, target.y, origin);\n}\n/**\n * Update the treeScale by incorporating the parent's latest scale into its treeScale.\n */\n\n\nfunction updateTreeScale(treeScale, parentTreeScale, parentDelta) {\n treeScale.x = parentTreeScale.x * parentDelta.x.scale;\n treeScale.y = parentTreeScale.y * parentDelta.y.scale;\n} // Call a handler once for each axis\n\n\nfunction eachAxis(handler) {\n return [handler(\"x\"), handler(\"y\")];\n}\n/**\n * Converts seconds to milliseconds\n *\n * @param seconds - Time in seconds.\n * @return milliseconds - Converted time in milliseconds.\n */\n\n\nvar secondsToMilliseconds = function secondsToMilliseconds(seconds) {\n return seconds * 1000;\n};\n\nvar easingLookup = {\n linear: linear,\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 bounceIn: bounceIn,\n bounceInOut: bounceInOut,\n bounceOut: bounceOut\n};\n\nvar easingDefinitionToFunction = function 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\n var _a = __read(definition, 4),\n x1 = _a[0],\n y1 = _a[1],\n x2 = _a[2],\n y2 = _a[3];\n\n return cubicBezier(x1, y1, x2, y2);\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\n return definition;\n};\n\nvar isEasingArray = function isEasingArray(ease) {\n return Array.isArray(ease) && typeof ease[0] !== \"number\";\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 */\n\n\nvar isAnimatable = function isAnimatable(key, value) {\n // If the list of keys tat might be non-animatable grows, replace with Set\n if (key === \"zIndex\") return false; // 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\n if (typeof value === \"number\" || Array.isArray(value)) return true;\n\n if (typeof value === \"string\" && // It's animatable if we have a string\n complex.test(value) && // And it contains numbers and/or colors\n !value.startsWith(\"url(\") // Unless it starts with \"url(\"\n ) {\n return true;\n }\n\n return false;\n};\n\nvar isKeyframesTarget = function isKeyframesTarget(v) {\n return Array.isArray(v);\n};\n\nvar underDampedSpring = function underDampedSpring() {\n return {\n type: \"spring\",\n stiffness: 500,\n damping: 25,\n restDelta: 0.5,\n restSpeed: 10\n };\n};\n\nvar overDampedSpring = function overDampedSpring(to) {\n return {\n type: \"spring\",\n stiffness: 550,\n damping: to === 0 ? 100 : 30,\n restDelta: 0.01,\n restSpeed: 10\n };\n};\n\nvar linearTween = function linearTween() {\n return {\n type: \"keyframes\",\n ease: \"linear\",\n duration: 0.3\n };\n};\n\nvar keyframes = function keyframes(values) {\n return {\n type: \"keyframes\",\n duration: 0.8,\n values: values\n };\n};\n\nvar defaultTransitions = {\n x: underDampedSpring,\n y: underDampedSpring,\n z: underDampedSpring,\n rotate: underDampedSpring,\n rotateX: underDampedSpring,\n rotateY: underDampedSpring,\n rotateZ: underDampedSpring,\n scaleX: overDampedSpring,\n scaleY: overDampedSpring,\n scale: overDampedSpring,\n opacity: linearTween,\n backgroundColor: linearTween,\n color: linearTween,\n default: overDampedSpring\n};\n\nvar getDefaultTransition = function getDefaultTransition(valueKey, to) {\n var transitionFactory;\n\n if (isKeyframesTarget(to)) {\n transitionFactory = keyframes;\n } else {\n transitionFactory = defaultTransitions[valueKey] || defaultTransitions.default;\n }\n\n return __assign({\n to: to\n }, transitionFactory(to));\n};\n/**\n * Decide whether a transition is defined on a given Transition.\n * This filters out orchestration options and returns true\n * if any options are left.\n */\n\n\nfunction isTransitionDefined(_a) {\n var when = _a.when,\n delay = _a.delay,\n delayChildren = _a.delayChildren,\n staggerChildren = _a.staggerChildren,\n staggerDirection = _a.staggerDirection,\n repeat = _a.repeat,\n repeatType = _a.repeatType,\n repeatDelay = _a.repeatDelay,\n from = _a.from,\n transition = __rest(_a, [\"when\", \"delay\", \"delayChildren\", \"staggerChildren\", \"staggerDirection\", \"repeat\", \"repeatType\", \"repeatDelay\", \"from\"]);\n\n return !!Object.keys(transition).length;\n}\n/**\n * Convert Framer Motion's Transition type into Popmotion-compatible options.\n */\n\n\nfunction convertTransitionToAnimationOptions(_a) {\n var yoyo = _a.yoyo,\n loop = _a.loop,\n flip = _a.flip,\n ease = _a.ease,\n times = _a.times,\n transition = __rest(_a, [\"yoyo\", \"loop\", \"flip\", \"ease\", \"times\"]);\n\n var options = __assign({}, transition);\n\n if (times) {\n options.offset = times;\n }\n /**\n * Convert any existing durations from seconds to milliseconds\n */\n\n\n if (transition.duration) options[\"duration\"] = secondsToMilliseconds(transition.duration);\n if (transition.repeatDelay) options.repeatDelay = secondsToMilliseconds(transition.repeatDelay);\n /**\n * Map easing names to Popmotion's easing functions\n */\n\n if (ease) {\n options[\"ease\"] = isEasingArray(ease) ? ease.map(easingDefinitionToFunction) : easingDefinitionToFunction(ease);\n }\n /**\n * Support legacy transition API\n */\n\n\n if (transition.type === \"tween\") options.type = \"keyframes\";\n\n if (yoyo) {\n options.repeatType = \"reverse\";\n } else if (loop) {\n options.repeatType = \"loop\";\n } else if (flip) {\n options.repeatType = \"mirror\";\n }\n\n options.repeat = loop || yoyo || flip || transition.repeat;\n /**\n * TODO: Popmotion 9 has the ability to automatically detect whether to use\n * a keyframes or spring animation, but does so by detecting velocity and other spring options.\n * It'd be good to introduce a similar thing here.\n */\n\n if (transition.type !== \"spring\") options.type = \"keyframes\";\n return options;\n}\n/**\n * Get the delay for a value by checking Transition with decreasing specificity.\n */\n\n\nfunction getDelayFromTransition(transition, key) {\n var _a, _b, _c, _d, _e;\n\n return (_e = (_d = (_b = (_a = transition[key]) === null || _a === void 0 ? void 0 : _a.delay) !== null && _b !== void 0 ? _b : (_c = transition[\"default\"]) === null || _c === void 0 ? void 0 : _c.delay) !== null && _d !== void 0 ? _d : transition.delay) !== null && _e !== void 0 ? _e : 0;\n}\n\nfunction hydrateKeyframes(options) {\n if (Array.isArray(options.to) && options.to[0] === null) {\n options.to = __spread(options.to);\n options.to[0] = options.from;\n }\n\n return options;\n}\n\nfunction getPopmotionAnimationOptions(transition, options, key) {\n var _a;\n\n if (Array.isArray(options.to)) {\n (_a = transition.duration) !== null && _a !== void 0 ? _a : transition.duration = 0.8;\n }\n\n hydrateKeyframes(options);\n /**\n * Get a default transition if none is determined to be defined.\n */\n\n if (!isTransitionDefined(transition)) {\n transition = __assign(__assign({}, transition), getDefaultTransition(key, options.to));\n }\n\n return __assign(__assign({}, options), convertTransitionToAnimationOptions(transition));\n}\n/**\n *\n */\n\n\nfunction getAnimation(key, value, target, transition, onComplete) {\n var valueTransition = transition[key] || transition[\"default\"] || transition;\n var origin = value.get();\n var isTargetAnimatable = isAnimatable(key, target);\n /**\n * If we're trying to animate from \"none\", try and get an animatable version\n * of the target. This could be improved to work both ways.\n */\n\n if (origin === \"none\" && isTargetAnimatable && typeof target === \"string\") {\n origin = complex.getAnimatableNone(target);\n }\n\n var isOriginAnimatable = isAnimatable(key, origin);\n warning(isOriginAnimatable === isTargetAnimatable, \"You are trying to animate \" + key + \" from \\\"\" + origin + \"\\\" to \\\"\" + target + \"\\\". \" + origin + \" is not an animatable value - to enable this animation set \" + origin + \" to a value animatable to \" + target + \" via the `style` property.\");\n\n function start() {\n var options = {\n from: origin,\n to: target,\n velocity: value.getVelocity(),\n onComplete: onComplete,\n onUpdate: function onUpdate(v) {\n return value.set(v);\n }\n };\n return valueTransition.type === \"inertia\" || valueTransition.type === \"decay\" ? inertia(__assign(__assign({}, options), valueTransition)) : animate(getPopmotionAnimationOptions(valueTransition, options, key));\n }\n\n function set() {\n value.set(target);\n onComplete();\n return {\n stop: function stop() {}\n };\n }\n\n return !isOriginAnimatable || !isTargetAnimatable || valueTransition.type === false ? set : start;\n}\n/**\n * Start animation on a MotionValue. This function is an interface between\n * Framer Motion and Popmotion\n *\n * @internal\n */\n\n\nfunction startAnimation(key, value, target, transition) {\n if (transition === void 0) {\n transition = {};\n }\n\n return value.start(function (onComplete) {\n var delayTimer;\n var controls;\n var animation = getAnimation(key, value, target, transition, onComplete);\n var delay = getDelayFromTransition(transition, key);\n\n var start = function start() {\n return controls = animation();\n };\n\n if (delay) {\n delayTimer = setTimeout(start, secondsToMilliseconds(delay));\n } else {\n start();\n }\n\n return function () {\n clearTimeout(delayTimer);\n controls === null || controls === void 0 ? void 0 : controls.stop();\n };\n });\n}\n/**\n * Measure and return the element bounding box.\n *\n * We convert the box into an AxisBox2D to make it easier to work with each axis\n * individually and programmatically.\n *\n * This function optionally accepts a transformPagePoint function which allows us to compensate\n * for, for instance, measuring the element within a scaled plane like a Framer devivce preview component.\n */\n\n\nfunction getBoundingBox(element, transformPagePoint) {\n var box = element.getBoundingClientRect();\n return convertBoundingBoxToAxisBox(transformBoundingBox(box, transformPagePoint));\n}\n/**\n * A VisualElement for HTMLElements\n */\n\n\nvar HTMLVisualElement =\n/** @class */\nfunction (_super) {\n __extends(HTMLVisualElement, _super);\n\n function HTMLVisualElement() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n *\n */\n\n\n _this.defaultConfig = {\n enableHardwareAcceleration: true,\n allowTransformNone: true\n };\n /**\n * A mutable record of styles we want to apply directly to the rendered Element\n * every frame. We use a mutable data structure to reduce GC during animations.\n */\n\n _this.style = {};\n /**\n * A record of styles we only want to apply via React. This gets set in useMotionValues\n * and applied in the render function. I'd prefer this to live somewhere else to decouple\n * VisualElement from React but works for now.\n */\n\n _this.reactStyle = {};\n /**\n * A mutable record of CSS variables we want to apply directly to the rendered Element\n * every frame. We use a mutable data structure to reduce GC during animations.\n */\n\n _this.vars = {};\n /**\n * A mutable record of transforms we want to apply directly to the rendered Element\n * every frame. We use a mutable data structure to reduce GC during animations.\n */\n\n _this.transform = {};\n /**\n * A mutable record of transform origins we want to apply directly to the rendered Element\n * every frame. We use a mutable data structure to reduce GC during animations.\n */\n\n _this.transformOrigin = {};\n /**\n * A mutable record of transform keys we want to apply to the rendered Element. We order\n * this to order transforms in the desired order. We use a mutable data structure to reduce GC during animations.\n */\n\n _this.transformKeys = [];\n _this.config = _this.defaultConfig;\n /**\n * ========================================\n * Layout\n * ========================================\n */\n\n _this.isLayoutProjectionEnabled = false;\n /**\n * A set of layout update event handlers. These are only called once all layouts have been read,\n * making it safe to perform DOM write operations.\n */\n\n _this.layoutUpdateListeners = new SubscriptionManager();\n _this.layoutMeasureListeners = new SubscriptionManager();\n _this.viewportBoxUpdateListeners = new SubscriptionManager();\n /**\n * Keep track of whether the viewport box has been updated since the last render.\n * If it has, we want to fire the onViewportBoxUpdate listener.\n */\n\n _this.hasViewportBoxUpdated = false;\n /**\n * The visual target we want to project our component into on a given frame\n * before applying transforms defined in `animate` or `style`.\n *\n * This is considered mutable to avoid object creation on each frame.\n */\n\n _this.targetBoxFinal = axisBox();\n /**\n * The overall scale of the local coordinate system as transformed by all parents\n * of this component. We use this for scale correction on our calculated layouts\n * and scale-affected values like `boxShadow`.\n *\n * This is considered mutable to avoid object creation on each frame.\n */\n\n _this.treeScale = {\n x: 1,\n y: 1\n };\n _this.prevTreeScale = {\n x: 1,\n y: 1\n };\n /**\n * The delta between the boxCorrected and the desired\n * targetBox (before user-set transforms are applied). The calculated output will be\n * handed to the renderer and used as part of the style correction calculations, for\n * instance calculating how to display the desired border-radius correctly.\n *\n * This is considered mutable to avoid object creation on each frame.\n */\n\n _this.delta = delta();\n /**\n * The delta between the boxCorrected and the desired targetBoxFinal. The calculated\n * output will be handed to the renderer and used to project the boxCorrected into\n * the targetBoxFinal.\n *\n * This is considered mutable to avoid object creation on each frame.\n */\n\n _this.deltaFinal = delta();\n /**\n * The computed transform string to apply deltaFinal to the element. Currently this is only\n * being used to diff and decide whether to render on the current frame, but a minor optimisation\n * could be to provide this to the buildHTMLStyle function.\n */\n\n _this.deltaTransform = identityProjection;\n /**\n *\n */\n\n _this.stopLayoutAxisAnimation = {\n x: function x() {},\n y: function y() {}\n };\n _this.isTargetBoxLocked = false;\n /**\n *\n */\n\n _this.axisProgress = {\n x: motionValue(0),\n y: motionValue(0)\n };\n\n _this.updateLayoutDelta = function () {\n _this.isLayoutProjectionEnabled && _this.box && _this.updateLayoutDeltas();\n /**\n * Ensure all children layouts are also updated.\n *\n * This uses a pre-bound function executor rather than a lamda to avoid creating a new function\n * multiple times per frame (source of mid-animation GC)\n */\n\n _this.children.forEach(fireUpdateLayoutDelta);\n };\n\n return _this;\n }\n /**\n * When a value is removed, we want to make sure it's removed from all rendered data structures.\n */\n\n\n HTMLVisualElement.prototype.removeValue = function (key) {\n _super.prototype.removeValue.call(this, key);\n\n delete this.vars[key];\n delete this.style[key];\n };\n /**\n * Empty the mutable data structures by re-creating them. We can do this every React render\n * as the comparative workload to the rest of the render is very low and this is also when\n * we want to reflect values that might have been removed by the render.\n */\n\n\n HTMLVisualElement.prototype.clean = function () {\n this.style = {};\n this.vars = {};\n this.transform = {};\n };\n\n HTMLVisualElement.prototype.updateConfig = function (config) {\n if (config === void 0) {\n config = {};\n }\n\n this.config = __assign(__assign({}, this.defaultConfig), config);\n };\n /**\n * Read a value directly from the HTMLElement style.\n */\n\n\n HTMLVisualElement.prototype.read = function (key) {\n return this.getComputedStyle()[key] || 0;\n };\n\n HTMLVisualElement.prototype.addValue = function (key, value) {\n _super.prototype.addValue.call(this, key, value); // If we have rotate values we want to foce the layoutOrigin used in layout projection\n // to the center of the element.\n\n\n if (key.startsWith(\"rotate\")) this.layoutOrigin = 0.5;\n };\n /**\n * Read a value directly from the HTMLElement in case it's not defined by a Motion\n * prop. If it's a transform, we just return a pre-defined default value as reading these\n * out of a matrix is either error-prone or can incur a big payload for little benefit.\n */\n\n\n HTMLVisualElement.prototype.readNativeValue = function (key) {\n if (isTransformProp(key)) {\n var defaultValueType = getDefaultValueType(key);\n return defaultValueType ? defaultValueType.default || 0 : 0;\n } else {\n return this.read(key);\n }\n };\n\n HTMLVisualElement.prototype.enableLayoutProjection = function () {\n this.isLayoutProjectionEnabled = true;\n };\n\n HTMLVisualElement.prototype.hide = function () {\n if (this.isVisible === false) return;\n this.isVisible = false;\n this.scheduleRender();\n };\n\n HTMLVisualElement.prototype.show = function () {\n if (this.isVisible === true) return;\n this.isVisible = true;\n this.scheduleRender();\n };\n /**\n * Register an event listener to fire when the layout is updated. We might want to expose support\n * for this via a `motion` prop.\n */\n\n\n HTMLVisualElement.prototype.onLayoutUpdate = function (callback) {\n return this.layoutUpdateListeners.add(callback);\n };\n\n HTMLVisualElement.prototype.onLayoutMeasure = function (callback) {\n return this.layoutMeasureListeners.add(callback);\n };\n\n HTMLVisualElement.prototype.onViewportBoxUpdate = function (callback) {\n return this.viewportBoxUpdateListeners.add(callback);\n };\n /**\n * To be called when all layouts are successfully updated. In turn we can notify layoutUpdate\n * subscribers.\n */\n\n\n HTMLVisualElement.prototype.layoutReady = function (config) {\n this.layoutUpdateListeners.notify(this.box, this.prevViewportBox || this.box, config);\n };\n /**\n * Measure and return the Element's bounding box. We convert it to a AxisBox2D\n * structure to make it easier to work on each individual axis generically.\n */\n\n\n HTMLVisualElement.prototype.getBoundingBox = function () {\n var transformPagePoint = this.config.transformPagePoint;\n return getBoundingBox(this.element, transformPagePoint);\n };\n\n HTMLVisualElement.prototype.getBoundingBoxWithoutTransforms = function () {\n var bbox = this.getBoundingBox();\n removeBoxTransforms(bbox, this.latest);\n return bbox;\n };\n /**\n * Return the computed style after a render.\n */\n\n\n HTMLVisualElement.prototype.getComputedStyle = function () {\n return window.getComputedStyle(this.element);\n };\n /**\n * Record the bounding box as it exists before a re-render.\n */\n\n\n HTMLVisualElement.prototype.snapshotBoundingBox = function () {\n this.prevViewportBox = this.getBoundingBoxWithoutTransforms();\n /**\n * Update targetBox to match the prevViewportBox. This is just to ensure\n * that targetBox is affected by scroll in the same way as the measured box\n */\n\n this.rebaseTargetBox(false, this.prevViewportBox);\n };\n\n HTMLVisualElement.prototype.rebaseTargetBox = function (force, box) {\n var _this = this;\n\n if (force === void 0) {\n force = false;\n }\n\n if (box === void 0) {\n box = this.box;\n }\n\n var _a = this.axisProgress,\n x = _a.x,\n y = _a.y;\n var shouldRebase = this.box && !this.isTargetBoxLocked && !x.isAnimating() && !y.isAnimating();\n\n if (force || shouldRebase) {\n eachAxis(function (axis) {\n var _a = box[axis],\n min = _a.min,\n max = _a.max;\n\n _this.setAxisTarget(axis, min, max);\n });\n }\n };\n\n HTMLVisualElement.prototype.measureLayout = function () {\n var _this = this;\n\n this.box = this.getBoundingBox();\n this.boxCorrected = copyAxisBox(this.box);\n if (!this.targetBox) this.targetBox = copyAxisBox(this.box);\n this.layoutMeasureListeners.notify(this.box, this.prevViewportBox || this.box);\n sync.update(function () {\n return _this.rebaseTargetBox();\n });\n };\n\n HTMLVisualElement.prototype.lockTargetBox = function () {\n this.isTargetBoxLocked = true;\n };\n\n HTMLVisualElement.prototype.unlockTargetBox = function () {\n this.stopLayoutAnimation();\n this.isTargetBoxLocked = false;\n };\n /**\n * Reset the transform on the current Element. This is called as part\n * of a batched process across the entire layout tree. To remove this write\n * cycle it'd be interesting to see if it's possible to \"undo\" all the current\n * layout transforms up the tree in the same way this.getBoundingBoxWithoutTransforms\n * works\n */\n\n\n HTMLVisualElement.prototype.resetTransform = function () {\n var transformTemplate = this.config.transformTemplate;\n this.element.style.transform = transformTemplate ? transformTemplate({}, \"\") : \"none\"; // Ensure that whatever happens next, we restore our transform\n\n this.scheduleRender();\n };\n /**\n * Set new min/max boundaries to project an axis into\n */\n\n\n HTMLVisualElement.prototype.setAxisTarget = function (axis, min, max) {\n var targetAxis = this.targetBox[axis];\n targetAxis.min = min;\n targetAxis.max = max; // Flag that we want to fire the onViewportBoxUpdate event handler\n\n this.hasViewportBoxUpdated = true;\n this.rootParent.scheduleUpdateLayoutDelta();\n };\n /**\n *\n */\n\n\n HTMLVisualElement.prototype.startLayoutAxisAnimation = function (axis, transition) {\n var _this = this;\n\n var progress = this.axisProgress[axis];\n var _a = this.targetBox[axis],\n min = _a.min,\n max = _a.max;\n var length = max - min;\n progress.clearListeners();\n progress.set(min);\n progress.set(min); // Set twice to hard-reset velocity\n\n progress.onChange(function (v) {\n return _this.setAxisTarget(axis, v, v + length);\n });\n return startAnimation(axis, progress, 0, transition);\n };\n\n HTMLVisualElement.prototype.stopLayoutAnimation = function () {\n var _this = this;\n\n eachAxis(function (axis) {\n return _this.axisProgress[axis].stop();\n });\n };\n /**\n * Update the layout deltas to reflect the relative positions of the layout\n * and the desired target box\n */\n\n\n HTMLVisualElement.prototype.updateLayoutDeltas = function () {\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 resetBox(this.boxCorrected, this.box);\n /**\n * If this component has a parent, update this treeScale by incorporating the parent's\n * delta into its treeScale.\n */\n\n if (this.parent) {\n this.prevTreeScale.x = this.treeScale.x;\n this.prevTreeScale.y = this.treeScale.y;\n updateTreeScale(this.treeScale, this.parent.treeScale, this.parent.delta);\n }\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\n\n applyTreeDeltas(this.boxCorrected, this.treePath);\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\n updateBoxDelta(this.delta, this.boxCorrected, this.targetBox, this.layoutOrigin);\n /**\n * If we have a listener for the viewport box, fire it.\n */\n\n this.hasViewportBoxUpdated && this.viewportBoxUpdateListeners.notify(this.targetBox, this.delta);\n this.hasViewportBoxUpdated = false;\n /**\n * Ensure this element renders on the next frame if the projection transform has changed.\n */\n\n var deltaTransform = buildLayoutProjectionTransform(this.delta, this.treeScale);\n\n if (deltaTransform !== this.deltaTransform || // Also compare calculated treeScale, for values that rely on only this for scale correction.\n this.prevTreeScale.x !== this.treeScale.x || this.prevTreeScale.y !== this.treeScale.y) {\n this.scheduleRender();\n }\n\n this.deltaTransform = deltaTransform;\n };\n\n HTMLVisualElement.prototype.updateTransformDeltas = function () {\n if (!this.isLayoutProjectionEnabled || !this.box) return;\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\n applyBoxTransforms(this.targetBoxFinal, this.targetBox, this.latest);\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 actual layout\n * into the desired bounding box.\n */\n\n updateBoxDelta(this.deltaFinal, this.boxCorrected, this.targetBoxFinal, this.layoutOrigin);\n };\n /**\n * ========================================\n * Build & render\n * ========================================\n */\n\n /**\n * Build a style prop using the latest resolved MotionValues\n */\n\n\n HTMLVisualElement.prototype.build = function () {\n this.updateTransformDeltas();\n\n if (this.isVisible !== undefined) {\n this.style.visibility = this.isVisible ? \"visible\" : \"hidden\";\n }\n\n buildHTMLStyles(this.latest, this.style, this.vars, this.transform, this.transformOrigin, this.transformKeys, this.config, this.isLayoutProjectionEnabled && !!this.box, this.delta, this.deltaFinal, this.treeScale, this.targetBoxFinal);\n };\n /**\n * Render the Element by rebuilding and applying the latest styles and vars.\n */\n\n\n HTMLVisualElement.prototype.render = function () {\n // Rebuild the latest animated values into style and vars caches.\n this.build(); // Directly assign style into the Element's style prop. In tests Object.assign is the\n // fastest way to assign styles.\n\n Object.assign(this.element.style, this.style); // Loop over any CSS variables and assign those.\n\n for (var key in this.vars) {\n this.element.style.setProperty(key, this.vars[key]);\n }\n };\n\n return HTMLVisualElement;\n}(VisualElement);\n/**\n * Pre-bound version of updateLayoutDelta so we're not creating a new function multiple\n * times per frame.\n */\n\n\nvar fireUpdateLayoutDelta = function fireUpdateLayoutDelta(child) {\n return child.updateLayoutDelta();\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 */\n\n\nfunction useConstant(init) {\n var ref = useRef(null);\n\n if (ref.current === null) {\n ref.current = init();\n }\n\n return ref.current;\n}\n\nfunction calcOrigin$1(origin, offset, size) {\n return typeof origin === \"string\" ? origin : 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 */\n\n\nfunction calcSVGTransformOrigin(dimensions, originX, originY) {\n var pxOriginX = calcOrigin$1(originX, dimensions.x, dimensions.width);\n var pxOriginY = calcOrigin$1(originY, dimensions.y, dimensions.height);\n return pxOriginX + \" \" + pxOriginY;\n} // Convert a progress 0-1 to a pixels value based on the provided length\n\n\nvar progressToPixels = function progressToPixels(progress, length) {\n return px.transform(progress * length);\n};\n\nvar dashKeys = {\n offset: \"stroke-dashoffset\",\n array: \"stroke-dasharray\"\n};\nvar camelKeys = {\n offset: \"strokeDashoffset\",\n array: \"strokeDasharray\"\n};\n/**\n * Build SVG path properties. Uses the path's measured length to convert\n * our custom pathLength, pathSpacing and pathOffset into stroke-dashoffset\n * and stroke-dasharray attributes.\n *\n * This function is mutative to reduce per-frame GC.\n */\n\nfunction buildSVGPath(attrs, totalLength, length, spacing, offset, useDashCase) {\n if (spacing === void 0) {\n spacing = 1;\n }\n\n if (offset === void 0) {\n offset = 0;\n }\n\n if (useDashCase === void 0) {\n useDashCase = true;\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\n\n var keys = useDashCase ? dashKeys : camelKeys; // Build the dash offset\n\n attrs[keys.offset] = progressToPixels(-offset, totalLength); // Build the dash array\n\n var pathLength = progressToPixels(length, totalLength);\n var pathSpacing = progressToPixels(spacing, totalLength);\n attrs[keys.array] = pathLength + \" \" + pathSpacing;\n}\n\nvar unmeasured = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n};\n/**\n * Build SVG visual attrbutes, like cx and style.transform\n */\n\nfunction buildSVGAttrs(_a, style, vars, attrs, transform, transformOrigin, transformKeys, config, dimensions, totalPathLength, isLayoutProjectionEnabled, delta, deltaFinal, treeScale, targetBox) {\n var attrX = _a.attrX,\n attrY = _a.attrY,\n originX = _a.originX,\n originY = _a.originY,\n pathLength = _a.pathLength,\n _b = _a.pathSpacing,\n pathSpacing = _b === void 0 ? 1 : _b,\n _c = _a.pathOffset,\n pathOffset = _c === void 0 ? 0 : _c,\n // This is object creation, which we try to avoid per-frame.\n latest = __rest(_a, [\"attrX\", \"attrY\", \"originX\", \"originY\", \"pathLength\", \"pathSpacing\", \"pathOffset\"]);\n /**\n * With SVG we treat all animated values as attributes rather than CSS, so we build into attrs\n */\n\n\n buildHTMLStyles(latest, attrs, vars, transform, transformOrigin, transformKeys, config, isLayoutProjectionEnabled, delta, deltaFinal, treeScale, targetBox);\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\n if (attrs.transform) {\n style.transform = attrs.transform;\n delete attrs.transform;\n } // Parse transformOrigin\n\n\n if (originX !== undefined || originY !== undefined || style.transform) {\n style.transformOrigin = calcSVGTransformOrigin(dimensions || unmeasured, originX !== undefined ? originX : 0.5, originY !== undefined ? originY : 0.5);\n } // Treat x/y not as shortcuts but as actual attributes\n\n\n if (attrX !== undefined) attrs.x = attrX;\n if (attrY !== undefined) attrs.y = attrY; // Build SVG path if one has been measured\n\n if (totalPathLength !== undefined && pathLength !== undefined) {\n buildSVGPath(attrs, totalPathLength, pathLength, pathSpacing, pathOffset, false);\n }\n\n return attrs;\n}\n/**\n * A set of attribute names that are always read/written as camel case.\n */\n\n\nvar camelCaseAttributes = new Set([\"baseFrequency\", \"diffuseConstant\", \"kernelMatrix\", \"kernelUnitLength\", \"keySplines\", \"keyTimes\", \"limitingConeAngle\", \"markerHeight\", \"markerWidth\", \"numOctaves\", \"targetX\", \"targetY\", \"surfaceScale\", \"specularConstant\", \"specularExponent\", \"stdDeviation\", \"tableValues\", \"viewBox\"]);\nvar CAMEL_CASE_PATTERN = /([a-z])([A-Z])/g;\nvar REPLACE_TEMPLATE = \"$1-$2\";\n/**\n * Convert camelCase to dash-case properties.\n */\n\nvar camelToDash = function camelToDash(str) {\n return str.replace(CAMEL_CASE_PATTERN, REPLACE_TEMPLATE).toLowerCase();\n};\n/**\n * A VisualElement for SVGElements. Inherits from and extends HTMLVisualElement as the two\n * share data structures.\n */\n\n\nvar SVGVisualElement =\n/** @class */\nfunction (_super) {\n __extends(SVGVisualElement, _super);\n\n function SVGVisualElement() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * A mutable record of attributes we want to apply directly to the rendered Element\n * every frame. We use a mutable data structure to reduce GC during animations.\n */\n\n\n _this.attrs = {};\n /**\n * We disable hardware acceleration for SVG transforms as they're not currently able to be accelerated.\n */\n\n _this.defaultConfig = {\n enableHardwareAcceleration: false\n };\n /**\n * Without duplicating this call from HTMLVisualElement we end up with HTMLVisualElement.defaultConfig\n * being assigned to config\n */\n\n _this.config = _this.defaultConfig;\n return _this;\n }\n /**\n * Measure the SVG element on mount. This can affect page rendering so there might be a\n * better time to perform this - for instance dynamically only if there's a transform-origin dependent\n * transform being set (like rotate)\n */\n\n\n SVGVisualElement.prototype.mount = function (element) {\n _super.prototype.mount.call(this, element);\n\n this.measure();\n };\n /**\n * Update the SVG dimensions and path length\n */\n\n\n SVGVisualElement.prototype.measure = function () {\n try {\n this.dimensions = typeof this.element.getBBox === \"function\" ? this.element.getBBox() : this.element.getBoundingClientRect();\n } catch (e) {\n // Most likely trying to measure an unrendered element under Firefox\n this.dimensions = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n\n if (isPath(this.element)) {\n this.totalPathLength = this.element.getTotalLength();\n }\n };\n /**\n * Empty the mutable data structures in case attrs have been removed between renders.\n */\n\n\n SVGVisualElement.prototype.clean = function () {\n _super.prototype.clean.call(this);\n\n this.attrs = {};\n };\n /**\n * Read an attribute directly from the SVGElement\n */\n\n\n SVGVisualElement.prototype.read = function (key) {\n key = !camelCaseAttributes.has(key) ? camelToDash(key) : key;\n return this.element.getAttribute(key);\n };\n\n SVGVisualElement.prototype.build = function () {\n this.updateTransformDeltas();\n buildSVGAttrs(this.latest, this.style, this.vars, this.attrs, this.transform, this.transformOrigin, this.transformKeys, this.config, this.dimensions, this.totalPathLength, this.isLayoutProjectionEnabled && !!this.box, this.delta, this.deltaFinal, this.treeScale, this.targetBoxFinal);\n };\n\n SVGVisualElement.prototype.render = function () {\n // Update HTML styles and CSS variables\n _super.prototype.render.call(this); // Loop through attributes and apply them to the SVGElement\n\n\n for (var key in this.attrs) {\n this.element.setAttribute(!camelCaseAttributes.has(key) ? camelToDash(key) : key, this.attrs[key]);\n }\n };\n\n return SVGVisualElement;\n}(HTMLVisualElement);\n\nfunction isPath(element) {\n return element.tagName === \"path\";\n}\n/**\n * @internal\n */\n\n/**\n * @internal\n */\n\n\nvar svgElements = [\"animate\", \"circle\", \"clipPath\", \"defs\", \"desc\", \"ellipse\", \"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \"feConvolveMatrix\", \"feDiffuseLighting\", \"feDisplacementMap\", \"feDistantLight\", \"feDropShadow\", \"feFlood\", \"feFuncA\", \"feFuncB\", \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \"feMorphology\", \"feOffset\", \"fePointLight\", \"feSpecularLighting\", \"feSpotLight\", \"feTile\", \"feTurbulence\", \"filter\", \"foreignObject\", \"g\", \"image\", \"line\", \"linearGradient\", \"marker\", \"mask\", \"metadata\", \"path\", \"pattern\", \"polygon\", \"polyline\", \"radialGradient\", \"rect\", \"stop\", \"svg\", \"switch\", \"symbol\", \"text\", \"textPath\", \"tspan\", \"use\", \"view\"];\nvar svgTagNames = new Set(svgElements);\n/**\n * Determine whether this is a HTML or SVG component based on if the provided\n * Component is a string and a recognised SVG tag. A potentially better way to\n * do this would be to offer a `motion.customSVG` function and determine this\n * when we generate the `motion.circle` etc components.\n */\n\nfunction isSVGComponent(Component) {\n return typeof Component === \"string\" && svgTagNames.has(Component);\n}\n/**\n * @public\n */\n\n\nvar PresenceContext = createContext(null);\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 */\n\nfunction usePresence() {\n var context = useContext(PresenceContext);\n if (context === null) return [true, null];\n var isPresent = context.isPresent,\n onExitComplete = context.onExitComplete,\n register = context.register; // 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 // Replace with useOpaqueId when released in React\n\n var id = useUniqueId();\n useEffect(function () {\n return register(id);\n }, []);\n\n var safeToRemove = function safeToRemove() {\n return onExitComplete === null || onExitComplete === void 0 ? void 0 : onExitComplete(id);\n };\n\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 */\n\n\nfunction useIsPresent() {\n var context = useContext(PresenceContext);\n return context === null ? true : context.isPresent;\n}\n\nvar counter = 0;\n\nvar incrementId = function incrementId() {\n return counter++;\n};\n\nvar useUniqueId = function useUniqueId() {\n return useConstant(incrementId);\n};\n/**\n * DOM-flavoured variation of the useVisualElement hook. Used to create either a HTMLVisualElement\n * or SVGVisualElement for the component.\n */\n\n\nvar useDomVisualElement = function useDomVisualElement(Component, props, parent, isStatic, ref) {\n var visualElement = useConstant(function () {\n var DOMVisualElement = isSVGComponent(Component) ? SVGVisualElement : HTMLVisualElement;\n return new DOMVisualElement(parent, ref);\n });\n visualElement.updateConfig(__assign({\n enableHardwareAcceleration: !isStatic\n }, props));\n visualElement.layoutId = props.layoutId;\n var isPresent = useIsPresent();\n visualElement.isPresent = props.isPresent !== undefined ? props.isPresent : isPresent;\n useEffect(function () {\n if (props.onViewportBoxUpdate) {\n return visualElement.onViewportBoxUpdate(props.onViewportBoxUpdate);\n }\n }, [props.onViewportBoxUpdate]);\n return visualElement;\n};\n/**\n * A list of all valid MotionProps.\n *\n * @internalremarks\n * This doesn't throw if a `MotionProp` name is missing - it should.\n */\n\n\nvar validMotionProps = new Set([\"initial\", \"animate\", \"exit\", \"style\", \"variants\", \"transition\", \"transformTemplate\", \"transformValues\", \"custom\", \"inherit\", \"static\", \"layout\", \"layoutId\", \"onLayoutAnimationComplete\", \"onViewportBoxUpdate\", \"onAnimationStart\", \"onAnimationComplete\", \"onUpdate\", \"onDragStart\", \"onDrag\", \"onDragEnd\", \"onMeasureDragConstraints\", \"onDirectionLock\", \"onDragTransitionEnd\", \"drag\", \"dragControls\", \"dragListener\", \"dragConstraints\", \"dragDirectionLock\", \"_dragX\", \"_dragY\", \"dragElastic\", \"dragMomentum\", \"dragPropagation\", \"dragTransition\", \"onPan\", \"onPanStart\", \"onPanEnd\", \"onPanSessionStart\", \"onTap\", \"onTapStart\", \"onTapCancel\", \"whileHover\", \"whileTap\", \"onHoverEnd\", \"onHoverStart\"]);\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 */\n\nfunction isValidMotionProp(key) {\n return validMotionProps.has(key);\n}\n\nvar isPropValid = function isPropValid(key) {\n return !isValidMotionProp(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 */\n\n\ntry {\n var emotionIsPropValid_1 = require(\"@emotion/is-prop-valid\").default;\n\n isPropValid = function isPropValid(key) {\n // Handle events explicitly as Emotion validates them all as true\n if (key.startsWith(\"on\")) {\n return !isValidMotionProp(key);\n } else {\n return emotionIsPropValid_1(key);\n }\n };\n} catch (_a) {// We don't need to actually do anything here - the fallback is the existing `isPropValid`.\n}\n\nfunction filterProps(props) {\n var domProps = {};\n\n for (var key in props) {\n if (isPropValid(key)) domProps[key] = props[key];\n }\n\n return domProps;\n}\n\nfunction buildHTMLProps(visualElement, _a) {\n var drag = _a.drag; // The `any` isn't ideal but it is the type of createElement props argument\n\n var htmlProps = {\n style: __assign(__assign(__assign({}, visualElement.reactStyle), visualElement.style), visualElement.vars)\n };\n\n if (!!drag) {\n // Disable text selection\n htmlProps.style.userSelect = \"none\"; // Disable the ghost element when a user drags\n\n htmlProps.draggable = false;\n }\n\n return htmlProps;\n}\n/**\n * Build React props for SVG elements\n */\n\n\nfunction buildSVGProps(visualElement) {\n return __assign(__assign({}, visualElement.attrs), {\n style: __assign({}, visualElement.reactStyle)\n });\n}\n\nfunction render(Component, props, visualElement) {\n // Only filter props from components we control, ie `motion.div`. If this\n // is a custom component pass along everything provided to it.\n var forwardedProps = typeof Component === \"string\" ? filterProps(props) : props;\n /**\n * Every render, empty and rebuild the animated values to be applied to our Element.\n * During animation these data structures are used in a mutable fashion to reduce\n * garbage collection, but between renders we can flush them to remove values\n * that might have been taken out of the provided props.\n */\n\n visualElement.clean();\n visualElement.build(); // Generate props to visually render this component\n\n var visualProps = isSVGComponent(Component) ? buildSVGProps(visualElement) : buildHTMLProps(visualElement, props);\n return createElement(Component, __assign(__assign(__assign({}, forwardedProps), {\n ref: visualElement.ref\n }), visualProps));\n}\n\nvar positionalKeys = new Set([\"width\", \"height\", \"top\", \"left\", \"right\", \"bottom\", \"x\", \"y\"]);\n\nvar isPositionalKey = function isPositionalKey(key) {\n return positionalKeys.has(key);\n};\n\nvar hasPositionalKey = function hasPositionalKey(target) {\n return Object.keys(target).some(isPositionalKey);\n};\n\nvar setAndResetVelocity = function setAndResetVelocity(value, to) {\n // Looks odd but setting it twice doesn't render, it'll just\n // set both prev and current to the latest value\n value.set(to, false);\n value.set(to);\n};\n\nvar isNumOrPxType = function isNumOrPxType(v) {\n return v === number || v === px;\n};\n\nvar BoundingBoxDimension;\n\n(function (BoundingBoxDimension) {\n BoundingBoxDimension[\"width\"] = \"width\";\n BoundingBoxDimension[\"height\"] = \"height\";\n BoundingBoxDimension[\"left\"] = \"left\";\n BoundingBoxDimension[\"right\"] = \"right\";\n BoundingBoxDimension[\"top\"] = \"top\";\n BoundingBoxDimension[\"bottom\"] = \"bottom\";\n})(BoundingBoxDimension || (BoundingBoxDimension = {}));\n\nvar getPosFromMatrix = function getPosFromMatrix(matrix, pos) {\n return parseFloat(matrix.split(\", \")[pos]);\n};\n\nvar getTranslateFromMatrix = function getTranslateFromMatrix(pos2, pos3) {\n return function (_bbox, _a) {\n var transform = _a.transform;\n if (transform === \"none\" || !transform) return 0;\n var matrix3d = transform.match(/^matrix3d\\((.+)\\)$/);\n\n if (matrix3d) {\n return getPosFromMatrix(matrix3d[1], pos3);\n } else {\n var matrix = transform.match(/^matrix\\((.+)\\)$/);\n\n if (matrix) {\n return getPosFromMatrix(matrix[1], pos2);\n } else {\n return 0;\n }\n }\n };\n};\n\nvar transformKeys = new Set([\"x\", \"y\", \"z\"]);\nvar nonTranslationalTransformKeys = transformProps.filter(function (key) {\n return !transformKeys.has(key);\n});\n\nfunction removeNonTranslationalTransform(visualElement) {\n var removedTransforms = [];\n nonTranslationalTransformKeys.forEach(function (key) {\n var value = visualElement.getValue(key);\n\n if (value !== undefined) {\n removedTransforms.push([key, value.get()]);\n value.set(key.startsWith(\"scale\") ? 1 : 0);\n }\n }); // Apply changes to element before measurement\n\n if (removedTransforms.length) visualElement.render();\n return removedTransforms;\n}\n\nvar positionalValues = {\n // Dimensions\n width: function width(_a) {\n var x = _a.x;\n return x.max - x.min;\n },\n height: function height(_a) {\n var y = _a.y;\n return y.max - y.min;\n },\n top: function top(_bbox, _a) {\n var top = _a.top;\n return parseFloat(top);\n },\n left: function left(_bbox, _a) {\n var left = _a.left;\n return parseFloat(left);\n },\n bottom: function bottom(_a, _b) {\n var y = _a.y;\n var top = _b.top;\n return parseFloat(top) + (y.max - y.min);\n },\n right: function right(_a, _b) {\n var x = _a.x;\n var left = _b.left;\n return parseFloat(left) + (x.max - x.min);\n },\n // Transform\n x: getTranslateFromMatrix(4, 13),\n y: getTranslateFromMatrix(5, 14)\n};\n\nvar convertChangedValueTypes = function convertChangedValueTypes(target, visualElement, changedKeys) {\n var originBbox = visualElement.getBoundingBox();\n var elementComputedStyle = visualElement.getComputedStyle();\n var display = elementComputedStyle.display,\n top = elementComputedStyle.top,\n left = elementComputedStyle.left,\n bottom = elementComputedStyle.bottom,\n right = elementComputedStyle.right,\n transform = elementComputedStyle.transform;\n var originComputedStyle = {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n transform: transform\n }; // If the element is currently set to display: \"none\", make it visible before\n // measuring the target bounding box\n\n if (display === \"none\") {\n visualElement.setStaticValues(\"display\", target.display || \"block\");\n } // Apply the latest values (as set in checkAndConvertChangedValueTypes)\n\n\n visualElement.render();\n var targetBbox = visualElement.getBoundingBox();\n changedKeys.forEach(function (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 var value = visualElement.getValue(key);\n setAndResetVelocity(value, positionalValues[key](originBbox, originComputedStyle));\n target[key] = positionalValues[key](targetBbox, elementComputedStyle);\n });\n return target;\n};\n\nvar checkAndConvertChangedValueTypes = function checkAndConvertChangedValueTypes(visualElement, target, origin, transitionEnd) {\n if (origin === void 0) {\n origin = {};\n }\n\n if (transitionEnd === void 0) {\n transitionEnd = {};\n }\n\n target = __assign({}, target);\n transitionEnd = __assign({}, transitionEnd);\n var targetPositionalKeys = Object.keys(target).filter(isPositionalKey); // 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\n var removedTransformValues = [];\n var hasAttemptedToRemoveTransformValues = false;\n var changedValueTypeKeys = [];\n targetPositionalKeys.forEach(function (key) {\n var value = visualElement.getValue(key);\n if (!visualElement.hasValue(key)) return;\n var from = origin[key];\n var to = target[key];\n var fromType = findDimensionValueType(from);\n var toType; // 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\n if (isKeyframesTarget(to)) {\n var numKeyframes = to.length;\n\n for (var i = to[0] === null ? 1 : 0; i < numKeyframes; i++) {\n if (!toType) {\n toType = findDimensionValueType(to[i]);\n invariant(toType === fromType || isNumOrPxType(fromType) && isNumOrPxType(toType), \"Keyframes must be of the same dimension as the current value\");\n } else {\n invariant(findDimensionValueType(to[i]) === toType, \"All keyframes must be of the same type\");\n }\n }\n } else {\n toType = findDimensionValueType(to);\n }\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 var current = value.get();\n\n if (typeof current === \"string\") {\n value.set(parseFloat(current));\n }\n\n if (typeof to === \"string\") {\n target[key] = parseFloat(to);\n } else if (Array.isArray(to) && toType === px) {\n target[key] = to.map(parseFloat);\n }\n } else if ((fromType === null || fromType === void 0 ? void 0 : fromType.transform) && (toType === null || toType === void 0 ? void 0 : toType.transform) && (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 } else {\n target[key] = fromType.transform(to);\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 = removeNonTranslationalTransform(visualElement);\n hasAttemptedToRemoveTransformValues = true;\n }\n\n changedValueTypeKeys.push(key);\n transitionEnd[key] = transitionEnd[key] !== undefined ? transitionEnd[key] : target[key];\n setAndResetVelocity(value, to);\n }\n }\n });\n\n if (changedValueTypeKeys.length) {\n var convertedTarget = convertChangedValueTypes(target, visualElement, changedValueTypeKeys); // If we removed transform values, reapply them before the next render\n\n if (removedTransformValues.length) {\n removedTransformValues.forEach(function (_a) {\n var _b = __read(_a, 2),\n key = _b[0],\n value = _b[1];\n\n visualElement.getValue(key).set(value);\n });\n } // Reapply original values\n\n\n visualElement.render();\n return {\n target: convertedTarget,\n transitionEnd: transitionEnd\n };\n } else {\n return {\n target: target,\n transitionEnd: transitionEnd\n };\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 */\n\n\nfunction unitConversion(visualElement, target, origin, transitionEnd) {\n return hasPositionalKey(target) ? checkAndConvertChangedValueTypes(visualElement, target, origin, transitionEnd) : {\n target: target,\n transitionEnd: transitionEnd\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 */\n\n\nvar parseDomVariant = function parseDomVariant(visualElement, target, origin, transitionEnd) {\n var resolved = resolveCSSVariables(visualElement, target, transitionEnd);\n target = resolved.target;\n transitionEnd = resolved.transitionEnd;\n return unitConversion(visualElement, target, origin, transitionEnd);\n};\n/**\n * Use callback either only on the initial render or on all renders. In concurrent mode\n * the \"initial\" render might run multiple times\n *\n * @param callback - Callback to run\n * @param isInitialOnly - Set to `true` to only run on initial render, or `false` for all renders. Defaults to `false`.\n *\n * @public\n */\n\n\nfunction useInitialOrEveryRender(callback, isInitialOnly) {\n if (isInitialOnly === void 0) {\n isInitialOnly = false;\n }\n\n var isInitialRender = useRef(true);\n\n if (!isInitialOnly || isInitialOnly && isInitialRender.current) {\n callback();\n }\n\n isInitialRender.current = false;\n}\n/**\n * Control animations on one or more components.\n *\n * @public\n */\n\n\nvar AnimationControls =\n/** @class */\nfunction () {\n function AnimationControls() {\n /**\n * Track whether the host component has mounted.\n *\n * @internal\n */\n this.hasMounted = false;\n /**\n * Pending animations that are started before a component is mounted.\n *\n * @internal\n */\n\n this.pendingAnimations = [];\n /**\n * A collection of linked component animation controls.\n *\n * @internal\n */\n\n this.componentControls = new Set();\n }\n /**\n * Set variants on this and all child components.\n *\n * @param variants - The variants to set\n *\n * @internal\n */\n\n\n AnimationControls.prototype.setVariants = function (variants) {\n this.variants = variants;\n this.componentControls.forEach(function (controls) {\n return controls.setVariants(variants);\n });\n };\n /**\n * Set a default transition on this and all child components\n *\n * @param transition - The default transition to set\n *\n * @internal\n */\n\n\n AnimationControls.prototype.setDefaultTransition = function (transition) {\n this.defaultTransition = transition;\n this.componentControls.forEach(function (controls) {\n return controls.setDefaultTransition(transition);\n });\n };\n /**\n * Subscribes a component's animation controls to this.\n *\n * @param controls - The controls to subscribe\n * @returns An unsubscribe function.\n *\n * @internal\n */\n\n\n AnimationControls.prototype.subscribe = function (controls) {\n var _this = this;\n\n this.componentControls.add(controls);\n if (this.variants) controls.setVariants(this.variants);\n if (this.defaultTransition) controls.setDefaultTransition(this.defaultTransition);\n return function () {\n return _this.componentControls.delete(controls);\n };\n };\n /**\n * Starts an animation on all linked components.\n *\n * @remarks\n *\n * ```jsx\n * controls.start(\"variantLabel\")\n * controls.start({\n * x: 0,\n * transition: { duration: 1 }\n * })\n * ```\n *\n * @param definition - Properties or variant label to animate to\n * @param transition - Optional `transtion` to apply to a variant\n * @returns - A `Promise` that resolves when all animations have completed.\n *\n * @public\n */\n\n\n AnimationControls.prototype.start = function (definition, transitionOverride) {\n var _this = this;\n\n if (this.hasMounted) {\n var animations_1 = [];\n this.componentControls.forEach(function (controls) {\n var animation = controls.start(definition, {\n transitionOverride: transitionOverride\n });\n animations_1.push(animation);\n });\n return Promise.all(animations_1);\n } else {\n return new Promise(function (resolve) {\n _this.pendingAnimations.push({\n animation: [definition, transitionOverride],\n resolve: resolve\n });\n });\n }\n };\n /**\n * Instantly set to a set of properties or a variant.\n *\n * ```jsx\n * // With properties\n * controls.set({ opacity: 0 })\n *\n * // With variants\n * controls.set(\"hidden\")\n * ```\n *\n * @internalremarks\n * We could perform a similar trick to `.start` where this can be called before mount\n * and we maintain a list of of pending actions that get applied on mount. But the\n * expectation of `set` is that it happens synchronously and this would be difficult\n * to do before any children have even attached themselves. It's also poor practise\n * and we should discourage render-synchronous `.start` calls rather than lean into this.\n *\n * @public\n */\n\n\n AnimationControls.prototype.set = function (definition) {\n invariant(this.hasMounted, \"controls.set() should only be called after a component has mounted. Consider calling within a useEffect hook.\");\n return this.componentControls.forEach(function (controls) {\n return controls.apply(definition);\n });\n };\n /**\n * Stops animations on all linked components.\n *\n * ```jsx\n * controls.stop()\n * ```\n *\n * @public\n */\n\n\n AnimationControls.prototype.stop = function () {\n this.componentControls.forEach(function (controls) {\n return controls.stop();\n });\n };\n /**\n * Initialises the animation controls.\n *\n * @internal\n */\n\n\n AnimationControls.prototype.mount = function () {\n var _this = this;\n\n this.hasMounted = true;\n this.pendingAnimations.forEach(function (_a) {\n var animation = _a.animation,\n resolve = _a.resolve;\n return _this.start.apply(_this, __spread(animation)).then(resolve);\n });\n };\n /**\n * Stops all child animations when the host component unmounts.\n *\n * @internal\n */\n\n\n AnimationControls.prototype.unmount = function () {\n this.hasMounted = false;\n this.stop();\n };\n\n return AnimationControls;\n}();\n/**\n * @internal\n */\n\n\nvar animationControls = function animationControls() {\n return new AnimationControls();\n};\n/**\n * @internal\n */\n\n\nvar MotionContext = createContext({\n static: false\n});\n\nvar isVariantLabel = function isVariantLabel(v) {\n return typeof v === \"string\" || Array.isArray(v);\n};\n\nvar isAnimationControls = function isAnimationControls(v) {\n return v instanceof AnimationControls;\n};\n/**\n * Set up the context for children motion components.\n *\n * We also use this opportunity to apply `initial` values\n */\n\n\nvar useMotionContext = function useMotionContext(parentContext, controls, visualElement, isStatic, _a) {\n if (isStatic === void 0) {\n isStatic = false;\n }\n\n var initial = _a.initial,\n animate = _a.animate,\n variants = _a.variants,\n whileTap = _a.whileTap,\n whileHover = _a.whileHover,\n layoutId = _a.layoutId; // Determine whether this is a root element of an AnimatePresence component\n\n var presenceContext = useContext(PresenceContext);\n var presenceId = presenceContext === null || presenceContext === void 0 ? void 0 : presenceContext.id;\n visualElement.isPresenceRoot = parentContext.presenceId !== presenceId; // Override initial with that from a parent context, if defined\n\n if ((presenceContext === null || presenceContext === void 0 ? void 0 : presenceContext.initial) !== undefined) {\n initial = presenceContext.initial;\n }\n\n var initialState;\n\n if (initial === false && !isAnimationControls(animate)) {\n initialState = animate;\n } else if (typeof initial !== \"boolean\") {\n initialState = initial;\n } // Track mounted status so children can detect whether they were present during their\n // parent's first render\n\n\n var hasMounted = useRef(false); // We propagate this component's VisualElementAnimationControls *if* we're being provided variants,\n // if we're being used to control variants, or if we're being passed animation controls.\n // Otherwise this component should be \"invisible\" to variant propagation. This is a slight concession\n // to Framer X where every `Frame` is a `motion` component and it might be if we change that in the future\n // that this restriction is removed.\n\n var shouldPropagateControls = variants || isVariantLabel(animate) || isVariantLabel(whileTap) || isVariantLabel(whileHover) || isAnimationControls(animate); // If this component's `initial` prop is a variant label, propagate it. Otherwise pass the parent's.\n\n var targetInitial = isVariantLabel(initialState) ? initialState : parentContext.initial; // If this is a variant tree we need to propagate the `animate` prop in case new children are added after\n // the tree initially animates.\n\n var targetAnimate = isVariantLabel(animate) ? animate : parentContext.animate; // Only allow `initial` to trigger context re-renders if this is a `static` component (ie we're on the Framer canvas)\n // or in another non-animation/interaction environment.\n\n var initialDependency = isStatic ? targetInitial : null; // Only allow `animate` to trigger context re-renders if it's a variant label. If this is an array of\n // variant labels there's probably an optimisation to deep-compare but it might be an over-optimisation.\n // We want to do this as we rely on React's component rendering order each render cycle to determine\n // the new order of any child components for the `staggerChildren` functionality.\n\n var animateDependency = shouldPropagateControls && isVariantLabel(targetAnimate) ? targetAnimate : null; // The context to provide to the child. We `useMemo` because although `controls` and `initial` are\n // unlikely to change, by making the context an object it'll be considered a new value every render.\n // So all child motion components will re-render as a result.\n\n var context = useMemo(function () {\n return {\n controls: shouldPropagateControls ? controls : parentContext.controls,\n initial: targetInitial,\n animate: targetAnimate,\n visualElement: visualElement,\n hasMounted: hasMounted,\n isReducedMotion: parentContext.isReducedMotion,\n presenceId: presenceId\n };\n }, [initialDependency, animateDependency, parentContext.isReducedMotion, animate, layoutId, presenceId]); // Update the `static` property every render. This is unlikely to change but also essentially free.\n\n context.static = isStatic; // Set initial state. If this is a static component (ie in Framer canvas), respond to updates\n // in `initial`.\n\n useInitialOrEveryRender(function () {\n var initialToApply = initialState || parentContext.initial;\n initialToApply && controls.apply(initialToApply);\n }, !isStatic);\n useEffect(function () {\n hasMounted.current = true;\n }, []);\n return context;\n};\n\nvar checkShouldInheritVariant = function checkShouldInheritVariant(_a) {\n var animate = _a.animate,\n variants = _a.variants,\n _b = _a.inherit,\n inherit = _b === void 0 ? true : _b;\n return inherit && !!variants && (!animate || animate instanceof AnimationControls);\n};\n\nvar isMotionValue = function isMotionValue(value) {\n return value instanceof MotionValue;\n};\n\nfunction isForcedMotionValue(key, _a) {\n var layout = _a.layout,\n layoutId = _a.layoutId;\n return isTransformProp(key) || isTransformOriginProp(key) || (layout || layoutId !== undefined) && !!valueScaleCorrection[key];\n}\n/**\n * Scrape props for MotionValues and add/remove them to this component's\n * VisualElement\n */\n\n\nfunction useMotionValues(visualElement, props) {\n var prev = useConstant(empty);\n /**\n * Remove MotionValues that are no longer present\n */\n\n for (var key in prev) {\n var isForced = isForcedMotionValue(key, props);\n var existsAsProp = props[key];\n var existsAsStyle = props.style && props.style[key];\n var propIsMotionValue = existsAsProp && isMotionValue(props[key]);\n var styleIsMotionValue = existsAsStyle && isMotionValue(props.style[key]);\n var transformRemoved = isForced && !existsAsProp && !existsAsStyle;\n var motionValueRemoved = !isForced && !propIsMotionValue && !styleIsMotionValue;\n\n if (transformRemoved || motionValueRemoved) {\n visualElement.removeValue(key);\n delete prev[key];\n }\n }\n /**\n * Add incoming MotionValues\n */\n\n\n addMotionValues(visualElement, prev, props, false, props);\n if (props.style) addMotionValues(visualElement, prev, props.style, true, props);\n /**\n * Transform custom values if provided a handler, ie size -> width/height\n * Ideally we'd ditch this by removing support for size and other custom values from Framer.\n */\n\n if (props.transformValues) {\n visualElement.reactStyle = props.transformValues(visualElement.reactStyle);\n }\n}\n/**\n * Add incoming MotionValues\n *\n * TODO: Type the VisualElements properly\n */\n\n\nfunction addMotionValues(visualElement, prev, source, isStyle, props) {\n if (isStyle === void 0) {\n isStyle = false;\n }\n\n if (isStyle) visualElement.reactStyle = {};\n\n for (var key in source) {\n var value = source[key];\n var foundMotionValue = false;\n\n if (isMotionValue(value)) {\n // If this is a MotionValue, add it if it isn't a reserved key\n if (!reservedNames.has(key)) {\n visualElement.addValue(key, value);\n foundMotionValue = true;\n }\n } else if (isForcedMotionValue(key, props)) {\n // If this is a transform prop, always create a MotionValue\n // to ensure we can reconcile them all together.\n if (!visualElement.hasValue(key)) {\n visualElement.addValue(key, motionValue(value));\n } else if (value !== prev[key]) {\n // If the MotionValue already exists, update it with the\n // latest incoming value\n var motion = visualElement.getValue(key);\n motion.set(value);\n }\n\n foundMotionValue = true;\n } else if (isStyle) {\n visualElement.reactStyle[key] = value;\n }\n\n if (foundMotionValue) prev[key] = value;\n }\n}\n/**\n * These are props we accept as MotionValues but don't want to add\n * to the VisualElement\n */\n\n\nvar reservedNames = new Set([]);\n\nvar empty = function empty() {\n return {};\n};\n\nvar isCustomValue = function isCustomValue(v) {\n return Boolean(v && typeof v === \"object\" && v.mix && v.toValue);\n};\n\nvar resolveFinalValueInKeyframes = function 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 * Check if value is a numerical string, ie a string that is purely a number eg \"100\" or \"-100.1\"\n */\n\n\nvar isNumericalString = function isNumericalString(v) {\n return /^\\-?\\d*\\.?\\d+$/.test(v);\n};\n/**\n * Get the current value of every `MotionValue` in a `VisualElement`\n */\n\n\nvar getCurrent = function getCurrent(visualElement) {\n var current = {};\n visualElement.forEachValue(function (value, key) {\n return current[key] = value.get();\n });\n return current;\n};\n/**\n * Get the current velocity of every `MotionValue` in a `VisualElement`\n */\n\n\nvar getVelocity = function getVelocity(visualElement) {\n var velocity = {};\n visualElement.forEachValue(function (value, key) {\n return velocity[key] = value.getVelocity();\n });\n return velocity;\n};\n/**\n * Check if value is a function that returns a `Target`. A generic typeof === 'function'\n * check, just helps with typing.\n */\n\n\nvar isTargetResolver = function isTargetResolver(p) {\n return typeof p === \"function\";\n};\n/**\n * Check if value is a list of variant labels\n */\n\n\nvar isVariantLabels = function isVariantLabels(v) {\n return Array.isArray(v);\n};\n/**\n * Control animations for a single component\n *\n * @internal\n */\n\n\nvar VisualElementAnimationControls =\n/** @class */\nfunction () {\n function VisualElementAnimationControls(visualElement, _a) {\n var _this = this;\n\n var makeTargetAnimatable = _a.makeTargetAnimatable;\n /**\n * A reference to the component's latest props. We could probably ditch this in\n * favour to a reference to the `custom` prop now we don't send all props through\n * to target resolvers.\n */\n\n this.props = {};\n /**\n * The component's variants, as provided by `variants`\n */\n\n this.variants = {};\n /**\n * A set of values that we animate back to when a value is cleared of all overrides.\n */\n\n this.baseTarget = {};\n /**\n * A series of target overrides that we can animate to/from when overrides are set/cleared.\n */\n\n this.overrides = [];\n /**\n * A series of target overrides as they were originally resolved.\n */\n\n this.resolvedOverrides = [];\n /**\n * A Set of currently active override indexes\n */\n\n this.activeOverrides = new Set();\n /**\n * A Set of value keys that are currently animating.\n */\n\n this.isAnimating = new Set();\n /**\n * Check if the associated `VisualElement` has a key with the provided string.\n * Pre-bound to the class so we can provide directly to the `filter` in `checkForNewValues`.\n */\n\n this.hasValue = function (key) {\n return !_this.visualElement.hasValue(key);\n };\n\n this.visualElement = visualElement;\n this.makeTargetAnimatable = makeTargetAnimatable;\n this.visualElement.forEachValue(function (value, key) {\n return _this.baseTarget[key] = value.get();\n });\n }\n /**\n * Set the reference to the component's props.\n * @param props -\n */\n\n\n VisualElementAnimationControls.prototype.setProps = function (props) {\n this.props = props;\n };\n /**\n * Set the reference to the component's variants\n * @param variants -\n */\n\n\n VisualElementAnimationControls.prototype.setVariants = function (variants) {\n if (variants) this.variants = variants;\n };\n /**\n * Set the component's default transition\n * @param transition -\n */\n\n\n VisualElementAnimationControls.prototype.setDefaultTransition = function (transition) {\n if (transition) this.defaultTransition = transition;\n };\n /**\n * Set motion values without animation.\n *\n * @param definition -\n * @param isActive -\n */\n\n\n VisualElementAnimationControls.prototype.setValues = function (definition, _a) {\n var _b = _a === void 0 ? {} : _a,\n _c = _b.isActive,\n isActive = _c === void 0 ? new Set() : _c,\n priority = _b.priority;\n\n var _d = this.resolveVariant(definition),\n target = _d.target,\n transitionEnd = _d.transitionEnd;\n\n target = this.transformValues(__assign(__assign({}, target), transitionEnd));\n\n for (var key in target) {\n if (isActive.has(key)) return;\n isActive.add(key);\n\n if (target) {\n var targetValue = resolveFinalValueInKeyframes(target[key]);\n\n if (this.visualElement.hasValue(key)) {\n var value = this.visualElement.getValue(key);\n value && value.set(targetValue);\n } else {\n this.visualElement.addValue(key, motionValue(targetValue));\n }\n\n if (!priority) this.baseTarget[key] = targetValue;\n }\n }\n };\n /**\n * Allows `transformValues` to be set by a component that allows us to\n * transform the values in a given `Target`. This allows Framer Library\n * to extend Framer Motion to animate `Color` variables etc. Currently we have\n * to manually support these extended types here in Framer Motion.\n *\n * @param values -\n */\n\n\n VisualElementAnimationControls.prototype.transformValues = function (values) {\n var transformValues = this.props.transformValues;\n return transformValues ? transformValues(values) : values;\n };\n /**\n * Check a `Target` for new values we haven't animated yet, and add them\n * to the `MotionValueMap`.\n *\n * Currently there's functionality here that is DOM-specific, we should allow\n * this functionality to be injected by the factory that creates DOM-specific\n * components.\n *\n * @param target -\n */\n\n\n VisualElementAnimationControls.prototype.checkForNewValues = function (target) {\n var newValueKeys = Object.keys(target).filter(this.hasValue);\n var numNewValues = newValueKeys.length;\n if (!numNewValues) return;\n\n for (var i = 0; i < numNewValues; i++) {\n var key = newValueKeys[i];\n var targetValue = target[key];\n var value = null; // If this is a keyframes value, we can attempt to use the first value in the\n // array as that's going to be the first value of the animation anyway\n\n if (Array.isArray(targetValue)) {\n value = targetValue[0];\n } // If it isn't a keyframes or the first keyframes value was set as `null`, read the\n // value from the DOM. It might be worth investigating whether to check props (for SVG)\n // or props.style (for HTML) if the value exists there before attempting to read.\n\n\n if (value === null) {\n var readValue = this.visualElement.readNativeValue(key);\n value = readValue !== undefined ? readValue : target[key];\n invariant(value !== null, \"No initial value for \\\"\" + key + \"\\\" can be inferred. Ensure an initial value for \\\"\" + key + \"\\\" is defined on the component.\");\n }\n\n if (typeof value === \"string\" && isNumericalString(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 } else if (!findValueType(value) && complex.test(targetValue)) {\n // If value is not recognised as animatable, ie \"none\", create an animatable version origin based on the target\n value = complex.getAnimatableNone(targetValue);\n }\n\n this.visualElement.addValue(key, motionValue(value));\n this.baseTarget[key] = value;\n }\n };\n /**\n * Resolve a variant from its label or resolver into an actual `Target` we can animate to.\n * @param variant -\n */\n\n\n VisualElementAnimationControls.prototype.resolveVariant = function (variant, _a) {\n var custom = (_a === void 0 ? {} : _a).custom;\n\n if (!variant) {\n return {\n target: undefined,\n transition: undefined,\n transitionEnd: undefined\n };\n }\n\n if (isTargetResolver(variant)) {\n // resolve current and velocity\n variant = variant(custom !== null && custom !== void 0 ? custom : this.props.custom, getCurrent(this.visualElement), getVelocity(this.visualElement));\n }\n\n var _b = variant.transition,\n transition = _b === void 0 ? this.defaultTransition : _b,\n transitionEnd = variant.transitionEnd,\n target = __rest(variant, [\"transition\", \"transitionEnd\"]);\n\n return {\n transition: transition,\n transitionEnd: transitionEnd,\n target: target\n };\n };\n /**\n * Get the highest active override priority index\n */\n\n\n VisualElementAnimationControls.prototype.getHighestPriority = function () {\n if (!this.activeOverrides.size) return 0;\n return Math.max.apply(Math, __spread(Array.from(this.activeOverrides)));\n };\n /**\n * Set an override. We add this layer of indirection so if, for instance, a tap gesture\n * starts and overrides a hover gesture, when we clear the tap gesture and fallback to the\n * hover gesture, if that hover gesture has changed in the meantime we can go to that rather\n * than the one that was resolved when the hover gesture animation started.\n *\n * @param definition -\n * @param overrideIndex -\n */\n\n\n VisualElementAnimationControls.prototype.setOverride = function (definition, overrideIndex) {\n this.overrides[overrideIndex] = definition;\n\n if (this.children) {\n this.children.forEach(function (child) {\n return child.setOverride(definition, overrideIndex);\n });\n }\n };\n /**\n * Start an override animation.\n * @param overrideIndex -\n */\n\n\n VisualElementAnimationControls.prototype.startOverride = function (overrideIndex) {\n var override = this.overrides[overrideIndex];\n\n if (override) {\n return this.start(override, {\n priority: overrideIndex\n });\n }\n };\n /**\n * Clear an override. We check every value we animated to in this override to see if\n * its present on any lower-priority overrides. If not, we animate it back to its base target.\n * @param overrideIndex -\n */\n\n\n VisualElementAnimationControls.prototype.clearOverride = function (overrideIndex) {\n var _this = this;\n\n if (this.children) {\n this.children.forEach(function (child) {\n return child.clearOverride(overrideIndex);\n });\n }\n\n var override = this.overrides[overrideIndex];\n if (!override) return;\n this.activeOverrides.delete(overrideIndex);\n var highest = this.getHighestPriority();\n this.resetIsAnimating();\n\n if (highest) {\n var highestOverride = this.overrides[highest];\n highestOverride && this.startOverride(highest);\n } // Figure out which remaining values were affected by the override and animate those\n\n\n var overrideTarget = this.resolvedOverrides[overrideIndex];\n if (!overrideTarget) return;\n var remainingValues = {};\n\n for (var key in this.baseTarget) {\n if (overrideTarget[key] !== undefined) {\n remainingValues[key] = this.baseTarget[key];\n }\n }\n\n this.onStart();\n this.animate(remainingValues).then(function () {\n return _this.onComplete();\n });\n };\n /**\n * Apply a target/variant without any animation\n */\n\n\n VisualElementAnimationControls.prototype.apply = function (definition) {\n if (Array.isArray(definition)) {\n return this.applyVariantLabels(definition);\n } else if (typeof definition === \"string\") {\n return this.applyVariantLabels([definition]);\n } else {\n this.setValues(definition);\n }\n };\n /**\n * Apply variant labels without animation\n */\n\n\n VisualElementAnimationControls.prototype.applyVariantLabels = function (variantLabelList) {\n var _this = this;\n\n var isActive = new Set();\n\n var reversedList = __spread(variantLabelList).reverse();\n\n reversedList.forEach(function (key) {\n var _a = _this.resolveVariant(_this.variants[key]),\n target = _a.target,\n transitionEnd = _a.transitionEnd;\n\n target && _this.setValues(target, {\n isActive: isActive\n });\n transitionEnd && _this.setValues(transitionEnd, {\n isActive: isActive\n });\n\n if (_this.children && _this.children.size) {\n _this.children.forEach(function (child) {\n return child.applyVariantLabels(variantLabelList);\n });\n }\n });\n };\n\n VisualElementAnimationControls.prototype.start = function (definition, opts) {\n var _this = this;\n\n if (opts === void 0) {\n opts = {};\n }\n\n if (opts.priority) {\n this.activeOverrides.add(opts.priority);\n }\n\n this.resetIsAnimating(opts.priority);\n var animation;\n\n if (isVariantLabels(definition)) {\n animation = this.animateVariantLabels(definition, opts);\n } else if (typeof definition === \"string\") {\n animation = this.animateVariant(definition, opts);\n } else {\n animation = this.animate(definition, opts);\n }\n\n this.onStart();\n return animation.then(function () {\n return _this.onComplete();\n });\n };\n\n VisualElementAnimationControls.prototype.animate = function (animationDefinition, _a) {\n var _this = this;\n\n if (_a === void 0) {\n _a = {};\n }\n\n var _b = _a.delay,\n delay = _b === void 0 ? 0 : _b,\n _c = _a.priority,\n priority = _c === void 0 ? 0 : _c,\n transitionOverride = _a.transitionOverride,\n opts = __rest(_a, [\"delay\", \"priority\", \"transitionOverride\"]);\n\n var _d = this.resolveVariant(animationDefinition, opts),\n target = _d.target,\n transition = _d.transition,\n transitionEnd = _d.transitionEnd;\n\n if (transitionOverride) {\n transition = transitionOverride;\n }\n\n if (!target) return Promise.resolve();\n target = this.transformValues(target);\n\n if (transitionEnd) {\n transitionEnd = this.transformValues(transitionEnd);\n }\n\n this.checkForNewValues(target);\n var origin = this.transformValues(getOrigin(target, transition, this.visualElement));\n\n if (this.makeTargetAnimatable) {\n var animatable = this.makeTargetAnimatable(this.visualElement, target, origin, transitionEnd);\n target = animatable.target;\n transitionEnd = animatable.transitionEnd;\n }\n\n if (priority) {\n this.resolvedOverrides[priority] = target;\n }\n\n this.checkForNewValues(target);\n var animations = [];\n\n for (var key in target) {\n var value = this.visualElement.getValue(key);\n if (!value || !target || target[key] === undefined) continue;\n var valueTarget = target[key];\n\n if (!priority) {\n this.baseTarget[key] = resolveFinalValueInKeyframes(valueTarget);\n }\n\n if (this.isAnimating.has(key)) continue;\n this.isAnimating.add(key);\n animations.push(startAnimation(key, value, valueTarget, __assign({\n delay: delay\n }, transition)));\n }\n\n var allAnimations = Promise.all(animations);\n return transitionEnd ? allAnimations.then(function () {\n _this.setValues(transitionEnd, {\n priority: priority\n });\n }) : allAnimations;\n };\n\n VisualElementAnimationControls.prototype.animateVariantLabels = function (variantLabels, opts) {\n var _this = this;\n\n var animations = __spread(variantLabels).reverse().map(function (label) {\n return _this.animateVariant(label, opts);\n });\n\n return Promise.all(animations);\n };\n\n VisualElementAnimationControls.prototype.animateVariant = function (variantLabel, opts) {\n var _this = this;\n\n var priority = opts && opts.priority || 0;\n var variant = this.variants[variantLabel];\n var transition = variant ? this.resolveVariant(variant, opts).transition || {} : {};\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\n var getAnimation = variant ? function () {\n return _this.animate(variant, opts);\n } : function () {\n return Promise.resolve();\n };\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\n var getChildrenAnimations = this.children ? function (forwardDelay) {\n if (forwardDelay === void 0) {\n forwardDelay = 0;\n }\n\n var _a = transition.delayChildren,\n delayChildren = _a === void 0 ? 0 : _a;\n return _this.animateChildren(variantLabel, delayChildren + forwardDelay, transition.staggerChildren, transition.staggerDirection, priority, opts === null || opts === void 0 ? void 0 : opts.custom);\n } : function () {\n return Promise.resolve();\n };\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\n var when = transition.when;\n\n if (when) {\n var _a = __read(when === \"beforeChildren\" ? [getAnimation, getChildrenAnimations] : [getChildrenAnimations, getAnimation], 2),\n first = _a[0],\n last = _a[1];\n\n return first().then(last);\n } else {\n return Promise.all([getAnimation(), getChildrenAnimations(opts === null || opts === void 0 ? void 0 : opts.delay)]);\n }\n };\n\n VisualElementAnimationControls.prototype.animateChildren = function (variantLabel, delayChildren, staggerChildren, staggerDirection, priority, custom) {\n if (delayChildren === void 0) {\n delayChildren = 0;\n }\n\n if (staggerChildren === void 0) {\n staggerChildren = 0;\n }\n\n if (staggerDirection === void 0) {\n staggerDirection = 1;\n }\n\n if (priority === void 0) {\n priority = 0;\n }\n\n if (!this.children) {\n return Promise.resolve();\n }\n\n var animations = [];\n var maxStaggerDuration = (this.children.size - 1) * staggerChildren;\n var generateStaggerDuration = staggerDirection === 1 ? function (i) {\n return i * staggerChildren;\n } : function (i) {\n return maxStaggerDuration - i * staggerChildren;\n };\n Array.from(this.children).forEach(function (childControls, i) {\n var animation = childControls.animateVariant(variantLabel, {\n priority: priority,\n delay: delayChildren + generateStaggerDuration(i),\n custom: custom\n });\n animations.push(animation);\n });\n return Promise.all(animations);\n };\n\n VisualElementAnimationControls.prototype.onStart = function () {\n var onAnimationStart = this.props.onAnimationStart;\n onAnimationStart && onAnimationStart();\n };\n\n VisualElementAnimationControls.prototype.onComplete = function () {\n var onAnimationComplete = this.props.onAnimationComplete;\n onAnimationComplete && onAnimationComplete();\n };\n\n VisualElementAnimationControls.prototype.checkOverrideIsAnimating = function (priority) {\n var numOverrides = this.overrides.length;\n\n for (var i = priority + 1; i < numOverrides; i++) {\n var resolvedOverride = this.resolvedOverrides[i];\n\n if (resolvedOverride) {\n for (var key in resolvedOverride) {\n this.isAnimating.add(key);\n }\n }\n }\n };\n\n VisualElementAnimationControls.prototype.resetIsAnimating = function (priority) {\n if (priority === void 0) {\n priority = 0;\n }\n\n this.isAnimating.clear(); // If this isn't the highest priority gesture, block the animation\n // of anything that's currently being animated\n\n if (priority < this.getHighestPriority()) {\n this.checkOverrideIsAnimating(priority);\n }\n\n if (this.children) {\n this.children.forEach(function (child) {\n return child.resetIsAnimating(priority);\n });\n }\n };\n\n VisualElementAnimationControls.prototype.stop = function () {\n this.visualElement.forEachValue(function (value) {\n return value.stop();\n });\n };\n /**\n * Add the controls of a child component.\n * @param controls -\n */\n\n\n VisualElementAnimationControls.prototype.addChild = function (controls) {\n if (!this.children) {\n this.children = new Set();\n }\n\n this.children.add(controls); // We set child overrides when `setOverride` is called, but also have to do it here\n // as the first time `setOverride` is called all the children might not have been added yet.\n\n this.overrides.forEach(function (override, i) {\n override && controls.setOverride(override, i);\n });\n };\n\n VisualElementAnimationControls.prototype.removeChild = function (controls) {\n if (!this.children) {\n return;\n }\n\n this.children.delete(controls);\n };\n\n VisualElementAnimationControls.prototype.resetChildren = function () {\n if (this.children) this.children.clear();\n };\n\n return VisualElementAnimationControls;\n}();\n\nfunction getOriginFromTransition(key, transition) {\n if (!transition) return;\n var valueTransition = transition[key] || transition[\"default\"] || transition;\n return valueTransition.from;\n}\n\nfunction getOrigin(target, transition, visualElement) {\n var _a, _b;\n\n var origin = {};\n\n for (var key in target) {\n origin[key] = (_a = getOriginFromTransition(key, transition)) !== null && _a !== void 0 ? _a : (_b = visualElement.getValue(key)) === null || _b === void 0 ? void 0 : _b.get();\n }\n\n return origin;\n}\n/**\n * Creates an imperative set of controls to trigger animations.\n *\n * This allows a consolidated, uniform API for animations, to be triggered by other APIs like the `animate` prop, or the gesture handlers.\n *\n * @internal\n */\n\n\nfunction useVisualElementAnimation(visualElement, props, config) {\n var subscribeToParentControls = checkShouldInheritVariant(props);\n var variants = props.variants,\n transition = props.transition;\n var parentControls = useContext(MotionContext).controls;\n var presenceContext = useContext(PresenceContext);\n var controls = useConstant(function () {\n return new VisualElementAnimationControls(visualElement, config);\n }); // Reset and resubscribe children every render to ensure stagger order is correct\n\n if (!presenceContext || presenceContext.isPresent) {\n controls.resetChildren();\n controls.setProps(props);\n controls.setVariants(variants);\n controls.setDefaultTransition(transition);\n } // We have to subscribe to the parent controls within a useEffect rather than during render,\n // as\n\n\n useEffect(function () {\n if (subscribeToParentControls && parentControls) {\n parentControls.addChild(controls);\n }\n });\n useEffect(function () {\n return function () {\n // Remove reference to onAnimationComplete from controls. All the MotionValues\n // are unsubscribed from this component separately. We let animations run out\n // as they might be animating other components.\n var onAnimationComplete = props.onAnimationComplete,\n unmountProps = __rest(props, [\"onAnimationComplete\"]);\n\n controls.setProps(unmountProps);\n parentControls && parentControls.removeChild(controls);\n };\n }, []);\n return controls;\n}\n/**\n * @public\n */\n\n\nvar MotionConfigContext = createContext({\n transformPagePoint: function transformPagePoint(p) {\n return p;\n },\n features: []\n});\n/**\n * MotionConfig can be used in combination with the `m` component to cut bundle size\n * and dynamically load only the features you use.\n *\n * ```jsx\n * import {\n * m as motion,\n * AnimationFeature,\n * MotionConfig\n * } from \"framer-motion\"\n *\n * export function App() {\n * return (\n * \n * \n * \n * )\n * }\n * ```\n *\n * @public\n */\n\nfunction MotionConfig(_a) {\n var children = _a.children,\n _b = _a.features,\n features = _b === void 0 ? [] : _b,\n props = __rest(_a, [\"children\", \"features\"]);\n\n var pluginContext = useContext(MotionConfigContext);\n\n var loadedFeatures = __spread(pluginContext.features, features); // We do want to rerender children when the number of loaded features changes\n\n\n var value = useMemo(function () {\n return {\n features: loadedFeatures\n };\n }, [loadedFeatures.length]); // Mutative to prevent triggering rerenders in all listening\n // components every time this component renders\n\n for (var key in props) {\n value[key] = props[key];\n }\n\n return createElement(MotionConfigContext.Provider, {\n value: value\n }, children);\n}\n/**\n * Load features via renderless components based on the provided MotionProps\n */\n\n\nfunction useFeatures(defaultFeatures, isStatic, visualElement, controls, props, context, parentContext, shouldInheritVariant) {\n var plugins = useContext(MotionConfigContext); // If this is a static component, or we're rendering on the server, we don't load\n // any feature components\n\n if (isStatic || typeof window === \"undefined\") return null;\n\n var allFeatures = __spread(defaultFeatures, plugins.features);\n\n var numFeatures = allFeatures.length;\n var features = []; // Decide which features we should render and add them to the returned array\n\n for (var i = 0; i < numFeatures; i++) {\n var _a = allFeatures[i],\n shouldRender = _a.shouldRender,\n key = _a.key,\n getComponent = _a.getComponent;\n\n if (shouldRender(props, parentContext)) {\n var Component = getComponent(props);\n Component && features.push(createElement(Component, __assign({\n key: key\n }, props, {\n localContext: context,\n parentContext: parentContext,\n visualElement: visualElement,\n controls: controls,\n inherit: shouldInheritVariant\n })));\n }\n }\n\n return features;\n}\n\nvar Presence;\n\n(function (Presence) {\n Presence[Presence[\"Entering\"] = 0] = \"Entering\";\n Presence[Presence[\"Present\"] = 1] = \"Present\";\n Presence[Presence[\"Exiting\"] = 2] = \"Exiting\";\n})(Presence || (Presence = {}));\n\nvar VisibilityAction;\n\n(function (VisibilityAction) {\n VisibilityAction[VisibilityAction[\"Hide\"] = 0] = \"Hide\";\n VisibilityAction[VisibilityAction[\"Show\"] = 1] = \"Show\";\n})(VisibilityAction || (VisibilityAction = {}));\n/**\n * Default handlers for batching VisualElements\n */\n\n\nvar defaultHandler = {\n measureLayout: function measureLayout(child) {\n return child.measureLayout();\n },\n layoutReady: function layoutReady(child) {\n return child.layoutReady();\n }\n};\n/**\n * Sort VisualElements by tree depth, so we process the highest elements first.\n */\n\nvar sortByDepth = function sortByDepth(a, b) {\n return a.depth - b.depth;\n};\n/**\n * Create a batcher to process VisualElements\n */\n\n\nfunction createBatcher() {\n var queue = new Set();\n\n var add = function add(child) {\n return queue.add(child);\n };\n\n var flush = function flush(_a) {\n var _b = _a === void 0 ? defaultHandler : _a,\n measureLayout = _b.measureLayout,\n layoutReady = _b.layoutReady;\n\n var order = Array.from(queue).sort(sortByDepth);\n /**\n * Write: Reset any transforms on children elements so we can read their actual layout\n */\n\n order.forEach(function (child) {\n return child.resetTransform();\n });\n /**\n * Read: Measure the actual layout\n */\n\n order.forEach(measureLayout);\n /**\n * Write: Notify the VisualElements they're ready for further write operations.\n */\n\n order.forEach(layoutReady);\n /**\n * After all children have started animating, ensure any Entering components are set to Present.\n * If we add deferred animations (set up all animations and then start them in two loops) this\n * could be moved to the start loop. But it needs to happen after all the animations configs\n * are generated in AnimateSharedLayout as this relies on presence data\n */\n\n order.forEach(function (child) {\n if (child.isPresent) child.presence = Presence.Present;\n });\n queue.clear();\n };\n\n return {\n add: add,\n flush: flush\n };\n}\n\nfunction isSharedLayout(context) {\n return !!context.forceUpdate;\n}\n\nvar SharedLayoutContext = createContext(createBatcher());\nvar isBrowser = typeof window !== \"undefined\";\nvar useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;\n\nfunction useSnapshotOnUnmount(visualElement) {\n var syncLayout = useContext(SharedLayoutContext);\n useIsomorphicLayoutEffect(function () {\n return function () {\n if (isSharedLayout(syncLayout)) {\n syncLayout.remove(visualElement);\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 *\n * @internal\n */\n\n\nfunction createMotionComponent(Component, _a) {\n var defaultFeatures = _a.defaultFeatures,\n useVisualElement = _a.useVisualElement,\n render = _a.render,\n animationControlsConfig = _a.animationControlsConfig;\n\n function MotionComponent(props, externalRef) {\n var parentContext = useContext(MotionContext);\n var shouldInheritVariant = checkShouldInheritVariant(props);\n /**\n * If a component isStatic, we only visually update it as a\n * result of a React re-render, rather than any interactions or animations.\n * If this component or any ancestor isStatic, we disable hardware acceleration\n * and don't load any additional functionality.\n */\n\n var isStatic = parentContext.static || props.static || false;\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\n var visualElement = useVisualElement(Component, props, parentContext.visualElement, isStatic, externalRef);\n /**\n * Scrape MotionValues from props and add/remove them to/from\n * the VisualElement as necessary.\n */\n\n useMotionValues(visualElement, props);\n /**\n * Create animation controls for the VisualElement. It might be\n * interesting to try and combine this with VisualElement itself in a further refactor.\n */\n\n var controls = useVisualElementAnimation(visualElement, props, animationControlsConfig);\n /**\n * Build the MotionContext to pass on to the next `motion` component.\n */\n\n var context = useMotionContext(parentContext, controls, visualElement, isStatic, props);\n /**\n * Load features as renderless components unless the component isStatic\n */\n\n var features = useFeatures(defaultFeatures, isStatic, visualElement, controls, props, context, parentContext, shouldInheritVariant);\n var component = render(Component, props, visualElement);\n /**\n * If this component is a child of AnimateSharedLayout, we need to snapshot the component\n * before it's unmounted. This lives here rather than in features/layout/Measure because\n * as a child component its unmount effect runs after this component has been unmounted.\n */\n\n useSnapshotOnUnmount(visualElement); // The mount order and hierarchy is specific to ensure our element ref is hydrated by the time\n // all plugins and features has to execute.\n\n return createElement(Fragment, null, createElement(MotionContext.Provider, {\n value: context\n }, component), features);\n }\n\n return forwardRef(MotionComponent);\n}\n\nfunction createLock(name) {\n var lock = null;\n return function () {\n var openLock = function openLock() {\n lock = null;\n };\n\n if (lock === null) {\n lock = name;\n return openLock;\n }\n\n return false;\n };\n}\n\nvar globalHorizontalLock = createLock(\"dragHorizontal\");\nvar globalVerticalLock = createLock(\"dragVertical\");\n\nfunction getGlobalLock(drag) {\n var lock = false;\n\n if (drag === \"y\") {\n lock = globalVerticalLock();\n } else if (drag === \"x\") {\n lock = globalHorizontalLock();\n } else {\n var openHorizontal_1 = globalHorizontalLock();\n var openVertical_1 = globalVerticalLock();\n\n if (openHorizontal_1 && openVertical_1) {\n lock = function lock() {\n openHorizontal_1();\n openVertical_1();\n };\n } else {\n // Release the locks because we don't use them\n if (openHorizontal_1) openHorizontal_1();\n if (openVertical_1) openVertical_1();\n }\n }\n\n return lock;\n}\n\nvar isViewportScrollBlocked = false;\nvar isBrowser$1 = typeof window !== \"undefined\";\n\nif (isBrowser$1) {\n document.addEventListener(\"touchmove\", function (event) {\n if (isViewportScrollBlocked) {\n event.preventDefault();\n }\n }, {\n passive: false\n });\n}\n\nvar blockViewportScroll = function blockViewportScroll() {\n return isViewportScrollBlocked = true;\n};\n\nvar unblockViewportScroll = function unblockViewportScroll() {\n return isViewportScrollBlocked = false;\n};\n\nfunction addDomEvent(target, eventName, handler, options) {\n if (!handler) return;\n target.addEventListener(eventName, handler, options);\n return function () {\n return target.removeEventListener(eventName, handler, options);\n };\n}\n/**\n * Attaches an event listener directly to the provided DOM element.\n *\n * Bypassing React's event system can be desirable, for instance when attaching non-passive\n * event handlers.\n *\n * ```jsx\n * const ref = useRef(null)\n *\n * useDomEvent(ref, 'wheel', onWheel, { passive: false })\n *\n * return
\n * ```\n *\n * @param ref - React.RefObject that's been provided to the element you want to bind the listener to.\n * @param eventName - Name of the event you want listen for.\n * @param handler - Function to fire when receiving the event.\n * @param options - Options to pass to `Event.addEventListener`.\n *\n * @public\n */\n\n\nfunction useDomEvent(ref, eventName, handler, options) {\n useEffect(function () {\n var element = ref.current;\n\n if (handler && element) {\n return addDomEvent(element, eventName, handler, options);\n }\n }, [ref, eventName, handler, options]);\n}\n\nfunction isMouseEvent(event) {\n // PointerEvent inherits from MouseEvent so we can't use a straight instanceof check.\n if (typeof PointerEvent !== \"undefined\" && event instanceof PointerEvent) {\n return !!(event.pointerType === \"mouse\");\n }\n\n return event instanceof MouseEvent;\n}\n\nfunction isTouchEvent(event) {\n var hasTouches = !!event.touches;\n return hasTouches;\n}\n/**\n * Filters out events not attached to the primary pointer (currently left mouse button)\n * @param eventHandler\n */\n\n\nfunction filterPrimaryPointer(eventHandler) {\n if (!eventHandler) return undefined;\n return function (event) {\n var isMouseEvent = event instanceof MouseEvent;\n var isPrimaryPointer = !isMouseEvent || isMouseEvent && event.button === 0;\n\n if (isPrimaryPointer) {\n eventHandler(event);\n }\n };\n}\n\nvar defaultPagePoint = {\n pageX: 0,\n pageY: 0\n};\n\nfunction pointFromTouch(e, pointType) {\n if (pointType === void 0) {\n pointType = \"page\";\n }\n\n var primaryTouch = e.touches[0] || e.changedTouches[0];\n var point = primaryTouch || defaultPagePoint;\n return {\n x: point[pointType + \"X\"],\n y: point[pointType + \"Y\"]\n };\n}\n\nfunction pointFromMouse(point, pointType) {\n if (pointType === void 0) {\n pointType = \"page\";\n }\n\n return {\n x: point[pointType + \"X\"],\n y: point[pointType + \"Y\"]\n };\n}\n\nfunction extractEventInfo(event, pointType) {\n if (pointType === void 0) {\n pointType = \"page\";\n }\n\n return {\n point: isTouchEvent(event) ? pointFromTouch(event, pointType) : pointFromMouse(event, pointType)\n };\n}\n\nfunction getViewportPointFromEvent(event) {\n return extractEventInfo(event, \"client\");\n}\n\nvar wrapHandler = function wrapHandler(handler, shouldFilterPrimaryPointer) {\n if (shouldFilterPrimaryPointer === void 0) {\n shouldFilterPrimaryPointer = false;\n }\n\n if (!handler) return;\n\n var listener = function listener(event) {\n return handler(event, extractEventInfo(event));\n };\n\n return shouldFilterPrimaryPointer ? filterPrimaryPointer(listener) : listener;\n};\n\nvar isBrowser$2 = typeof window !== \"undefined\"; // We check for event support via functions in case they've been mocked by a testing suite.\n\nvar supportsPointerEvents = function supportsPointerEvents() {\n return isBrowser$2 && window.onpointerdown === null;\n};\n\nvar supportsTouchEvents = function supportsTouchEvents() {\n return isBrowser$2 && window.ontouchstart === null;\n};\n\nvar supportsMouseEvents = function supportsMouseEvents() {\n return isBrowser$2 && window.onmousedown === null;\n};\n\nvar mouseEventNames = {\n pointerdown: \"mousedown\",\n pointermove: \"mousemove\",\n pointerup: \"mouseup\",\n pointercancel: \"mousecancel\",\n pointerover: \"mouseover\",\n pointerout: \"mouseout\",\n pointerenter: \"mouseenter\",\n pointerleave: \"mouseleave\"\n};\nvar touchEventNames = {\n pointerdown: \"touchstart\",\n pointermove: \"touchmove\",\n pointerup: \"touchend\",\n pointercancel: \"touchcancel\"\n};\n\nfunction getPointerEventName(name) {\n if (supportsPointerEvents()) {\n return name;\n } else if (supportsTouchEvents()) {\n return touchEventNames[name];\n } else if (supportsMouseEvents()) {\n return mouseEventNames[name];\n }\n\n return name;\n}\n\nfunction addPointerEvent(target, eventName, handler, options) {\n return addDomEvent(target, getPointerEventName(eventName), wrapHandler(handler, eventName === \"pointerdown\"), options);\n}\n\nfunction usePointerEvent(ref, eventName, handler, options) {\n return useDomEvent(ref, getPointerEventName(eventName), wrapHandler(handler, eventName === \"pointerdown\"), options);\n}\n/** @public */\n\n\nvar Point;\n\n(function (Point) {\n /** @beta */\n Point.subtract = function (a, b) {\n return {\n x: a.x - b.x,\n y: a.y - b.y\n };\n };\n /** @beta */\n\n\n Point.relativeTo = function (idOrElem) {\n var elem;\n\n var getElem = function getElem() {\n // Caching element here could be leaky because of React lifecycle\n if (elem !== undefined) return elem;\n\n if (typeof idOrElem === \"string\") {\n elem = document.getElementById(idOrElem);\n } else {\n elem = idOrElem;\n }\n\n return elem;\n };\n\n return function (_a) {\n var x = _a.x,\n y = _a.y;\n var localElem = getElem();\n if (!localElem) return undefined;\n var rect = localElem.getBoundingClientRect();\n return {\n x: x - rect.left - window.scrollX,\n y: y - rect.top - window.scrollY\n };\n };\n };\n})(Point || (Point = {}));\n/**\n * @internal\n */\n\n\nvar PanSession =\n/** @class */\nfunction () {\n function PanSession(event, handlers, _a) {\n var _this = this;\n\n var transformPagePoint = (_a === void 0 ? {} : _a).transformPagePoint;\n /**\n * @internal\n */\n\n this.startEvent = null;\n /**\n * @internal\n */\n\n this.lastMoveEvent = null;\n /**\n * @internal\n */\n\n this.lastMoveEventInfo = null;\n /**\n * @internal\n */\n\n this.handlers = {};\n\n this.updatePoint = function () {\n if (!(_this.lastMoveEvent && _this.lastMoveEventInfo)) return;\n var info = getPanInfo(_this.lastMoveEventInfo, _this.history);\n var isPanStarted = _this.startEvent !== null; // 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\n var isDistancePastThreshold = distance(info.offset, {\n x: 0,\n y: 0\n }) >= 3;\n if (!isPanStarted && !isDistancePastThreshold) return;\n var point = info.point;\n var timestamp = getFrameData().timestamp;\n\n _this.history.push(__assign(__assign({}, point), {\n timestamp: timestamp\n }));\n\n var _a = _this.handlers,\n onStart = _a.onStart,\n onMove = _a.onMove;\n\n if (!isPanStarted) {\n onStart && onStart(_this.lastMoveEvent, info);\n _this.startEvent = _this.lastMoveEvent;\n }\n\n onMove && onMove(_this.lastMoveEvent, info);\n }; // If we have more than one touch, don't start detecting this gesture\n\n\n if (isTouchEvent(event) && event.touches.length > 1) return;\n this.handlers = handlers;\n this.transformPagePoint = transformPagePoint;\n var info = extractEventInfo(event);\n var initialInfo = transformPoint(info, this.transformPagePoint);\n var point = initialInfo.point;\n var timestamp = getFrameData().timestamp;\n this.history = [__assign(__assign({}, point), {\n timestamp: timestamp\n })];\n var onSessionStart = handlers.onSessionStart;\n onSessionStart && onSessionStart(event, getPanInfo(initialInfo, this.history));\n var removeOnPointerMove = addPointerEvent(window, \"pointermove\", function (event, info) {\n return _this.handlePointerMove(event, info);\n });\n var removeOnPointerUp = addPointerEvent(window, \"pointerup\", function (event, info) {\n return _this.handlePointerUp(event, info);\n });\n\n this.removeListeners = function () {\n removeOnPointerMove && removeOnPointerMove();\n removeOnPointerUp && removeOnPointerUp();\n };\n }\n\n PanSession.prototype.handlePointerMove = function (event, info) {\n this.lastMoveEvent = event;\n this.lastMoveEventInfo = transformPoint(info, this.transformPagePoint); // Because Safari doesn't trigger mouseup events when it's above a `