{"version":3,"file":"animation-state.mjs","sources":["../../../../src/render/utils/animation-state.ts"],"sourcesContent":["import type {\n AnimationDefinition,\n TargetAndTransition,\n VariantLabels,\n} from \"../../node/types\"\nimport type { AnimationType } from \"../types\"\nimport type { VisualElementAnimationOptions } from \"../../animation/interfaces/types\"\nimport { animateVisualElement } from \"../../animation/interfaces/visual-element\"\nimport { calcChildStagger } from \"../../animation/utils/calc-child-stagger\"\nimport { isMotionValue } from \"../../value/utils/is-motion-value\"\nimport { isAnimationControls } from \"./is-animation-controls\"\nimport { isVariantLabel } from \"./is-variant-label\"\nimport { getTypeCustom, resolveVariant } from \"./resolve-dynamic-variants\"\nimport { shallowCompare } from \"./shallow-compare\"\nimport { variantPriorityOrder } from \"./variant-props\"\n\nexport type { VisualElementAnimationOptions }\n\nexport interface AnimationState {\n animateChanges: (type?: AnimationType) => Promise\n setActive: (\n type: AnimationType,\n isActive: boolean,\n options?: VisualElementAnimationOptions\n ) => Promise\n setAnimateFunction: (fn: any) => void\n getState: () => { [key: string]: AnimationTypeState }\n reset: () => void\n}\n\ninterface DefinitionAndOptions {\n animation: AnimationDefinition\n options?: VisualElementAnimationOptions\n}\n\nexport type AnimationList = string[] | TargetAndTransition[]\n\n/**\n * Type for the animate function that can be injected.\n * This allows the animation implementation to be provided by the framework layer.\n */\nexport type AnimateFunction = (animations: DefinitionAndOptions[]) => Promise\n\nconst reversePriorityOrder = [...variantPriorityOrder].reverse()\n\n/**\n * Diffs the element's animation props (one layer per AnimationType, highest\n * priority wins each value) against the previous call and starts animations\n * for what changed.\n *\n * Uses `any` type for visualElement to avoid circular dependencies. It reads\n * props, parent, presenceContext, variantChildren, enteringChildren,\n * manuallyAnimateOnMount, blockInitialAnimation, getValue(),\n * getBaseTargetFromProps(), baseTarget and initialValues.\n */\nexport function createAnimationState(visualElement: any): AnimationState {\n let animate: AnimateFunction = (animations) =>\n Promise.all(\n animations.map(({ animation, options }) =>\n animateVisualElement(visualElement, animation, options)\n )\n )\n let state = createState()\n let isInitialRender = true\n\n /**\n * After a reset (StrictMode, Suspense, AnimatePresence re-entry) the next\n * animateChanges() mounts again, but initial={false} no longer applies.\n */\n let wasReset = false\n\n function animateChanges(changedActiveType?: AnimationType) {\n const { props, parent, manuallyAnimateOnMount } = visualElement\n const isMounting = isInitialRender || wasReset\n const animations: DefinitionAndOptions[] = []\n\n /**\n * Values removed from a type. A lower-priority type that defines\n * them animates them back, otherwise they fall back to a base target.\n */\n const removedKeys = new Set()\n\n /**\n * Values claimed by active, higher-priority types.\n */\n let encounteredKeys: { [key: string]: any } = {}\n\n /**\n * Once a type has been deactivated, lower-priority variant labels\n * re-animate so variant children animate back too.\n */\n let removedVariantIndex = Infinity\n\n /**\n * Variant labels are inherited from the closest variant-controlling\n * ancestor, unless an element on the way has inherit={false}.\n */\n let source = visualElement\n do source = source.props.inherit !== false && source.parent\n while (source && !source.isControllingVariants)\n\n reversePriorityOrder.forEach((type, i) => {\n const typeState = state[type]\n const ownProp = props[type]\n const inheritedProp = source && source.props[type]\n const prop =\n ownProp !== undefined\n ? ownProp\n : isVariantLabel(inheritedProp) || inheritedProp === false\n ? inheritedProp\n : undefined\n const propIsVariant = isVariantLabel(prop)\n const activeDelta =\n type === changedActiveType ? typeState.isActive : null\n\n if (activeDelta === false) removedVariantIndex = i\n\n /**\n * Inherited labels are animated by the parent through\n * variantChildren, unless this element mounted after its parent.\n */\n const isInherited =\n propIsVariant &&\n ownProp === undefined &&\n !(isMounting && manuallyAnimateOnMount)\n\n typeState.protectedKeys = { ...encounteredKeys }\n\n if (\n (!typeState.isActive && activeDelta === null) ||\n (!prop && !typeState.prevProp) ||\n isAnimationControls(prop) ||\n typeof prop === \"boolean\"\n ) {\n return\n }\n\n /**\n * Don't re-resolve a running exit: a changed custom would start\n * new value animations that stop the originals, leaving the exit\n * promise unresolved and the element stuck in the DOM.\n */\n if (type === \"exit\" && typeState.isActive && activeDelta !== true) {\n encounteredKeys = {\n ...encounteredKeys,\n ...typeState.prevResolvedValues,\n }\n return\n }\n\n const variantDidChange = checkVariantsDidChange(\n typeState.prevProp,\n prop\n )\n let shouldAnimateType =\n variantDidChange ||\n (propIsVariant &&\n ((activeDelta && !isInherited) || i > removedVariantIndex))\n let handledRemovedValues = false\n const definitionList = Array.isArray(prop) ? prop : [prop]\n let resolvedValues: { [key: string]: any } = {}\n\n if (activeDelta !== false) {\n for (const definition of definitionList) {\n const { transition, transitionEnd, ...target } =\n resolveVariant(\n visualElement,\n definition,\n getTypeCustom(visualElement, type)\n ) || {}\n resolvedValues = {\n ...resolvedValues,\n ...target,\n ...transitionEnd,\n }\n }\n }\n\n const { prevResolvedValues } = typeState\n\n for (const key in { ...prevResolvedValues, ...resolvedValues }) {\n if (key in encounteredKeys) continue\n\n const next = resolvedValues[key]\n const prev = prevResolvedValues[key]\n\n /**\n * Keyframes compare by value, but replay whenever the\n * variant label changed.\n */\n const valueHasChanged =\n Array.isArray(next) && Array.isArray(prev)\n ? !shallowCompare(next, prev) || variantDidChange\n : next !== prev\n\n if (\n valueHasChanged &&\n (next === undefined || next === null)\n ) {\n removedKeys.add(key)\n } else if (\n valueHasChanged ||\n (next !== undefined && removedKeys.has(key))\n ) {\n shouldAnimateType = true\n if (removedKeys.delete(key)) handledRemovedValues = true\n typeState.needsAnimating[key] = true\n\n const motionValue = visualElement.getValue(key)\n if (motionValue) motionValue.liveStyle = false\n } else {\n typeState.protectedKeys[key] = true\n }\n }\n\n typeState.prevProp = prop\n typeState.prevResolvedValues = resolvedValues\n\n if (typeState.isActive) {\n encounteredKeys = { ...encounteredKeys, ...resolvedValues }\n }\n\n if (\n shouldAnimateType &&\n (!(isInherited && variantDidChange) || handledRemovedValues)\n ) {\n for (const animation of definitionList) {\n const options: VisualElementAnimationOptions = { type }\n\n /**\n * Elements that mount into an already-mounted parent\n * animate themselves, staggered by the parent variant's\n * delayChildren.\n */\n if (\n typeof animation === \"string\" &&\n isMounting &&\n manuallyAnimateOnMount &&\n parent?.enteringChildren\n ) {\n const delayChildren = resolveVariant(parent, animation)\n ?.transition?.delayChildren\n\n options.delay = calcChildStagger(\n parent.enteringChildren,\n visualElement,\n delayChildren\n )\n }\n\n animations.push({ animation, options })\n }\n }\n })\n\n /**\n * Removed values that no lower-priority type defines animate back to\n * initial, then style, then the value as first read. If initial no\n * longer defines a value it once did, it stays where it is.\n */\n if (removedKeys.size) {\n const { initial } = props\n const fallbackAnimation: { [key: string]: any } = {}\n const resolvedInitial =\n typeof initial !== \"boolean\" &&\n resolveVariant(\n visualElement,\n Array.isArray(initial) ? initial[0] : initial,\n visualElement.presenceContext?.custom\n )\n\n if (resolvedInitial && resolvedInitial.transition) {\n fallbackAnimation.transition = resolvedInitial.transition\n }\n\n removedKeys.forEach((key) => {\n const motionValue = visualElement.getValue(key)\n if (motionValue) motionValue.liveStyle = true\n\n const fromInitial =\n resolvedInitial && !Array.isArray(initial)\n ? (resolvedInitial as any)[key]\n : undefined\n const fromProps = visualElement.getBaseTargetFromProps(\n props,\n key\n )\n\n fallbackAnimation[key] =\n (fromInitial !== undefined\n ? fromInitial\n : fromProps !== undefined && !isMotionValue(fromProps)\n ? fromProps\n : visualElement.initialValues[key] === undefined\n ? visualElement.baseTarget[key]\n : undefined) ?? null\n\n /**\n * If it stays where it is, that's now its base. Otherwise a\n * later removal (like a gesture ending) would also stay,\n * leaving the value stuck. Stop first so accelerated\n * animations sync the value they reached. In practice initial\n * only changes like this with Fast Refresh, so this is\n * dev-only (#3787).\n */\n if (\n process.env.NODE_ENV !== \"production\" &&\n fallbackAnimation[key] === null &&\n visualElement.initialValues[key] !== undefined\n ) {\n delete visualElement.initialValues[key]\n motionValue?.stop()\n visualElement.baseTarget[key] = motionValue?.get()\n }\n })\n\n animations.push({ animation: fallbackAnimation })\n }\n\n const blockAnimation =\n (isMounting && visualElement.blockInitialAnimation) ||\n (isInitialRender &&\n !manuallyAnimateOnMount &&\n (props.initial === false || props.initial === props.animate))\n\n isInitialRender = wasReset = false\n\n return !blockAnimation && animations.length\n ? animate(animations)\n : Promise.resolve()\n }\n\n /**\n * Change whether a certain animation type is active.\n */\n function setActive(type: AnimationType, isActive: boolean) {\n if (state[type].isActive === isActive) return Promise.resolve()\n\n visualElement.variantChildren?.forEach((child: any) =>\n child.animationState?.setActive(type, isActive)\n )\n\n state[type].isActive = isActive\n\n const animations = animateChanges(type)\n\n for (const key in state) {\n state[key as AnimationType].protectedKeys = {}\n }\n\n return animations\n }\n\n return {\n animateChanges,\n setActive,\n /**\n * Allows tests to inject a mocked animate function.\n * @internal\n */\n setAnimateFunction: (makeAnimator) => {\n animate = makeAnimator(visualElement)\n },\n getState: () => state,\n reset: () => {\n state = createState()\n wasReset = true\n },\n }\n}\n\nexport function checkVariantsDidChange(prev: any, next: any) {\n if (typeof next === \"string\") {\n return next !== prev\n } else if (Array.isArray(next)) {\n return !shallowCompare(next, prev)\n }\n\n return false\n}\n\nexport interface AnimationTypeState {\n isActive: boolean\n protectedKeys: { [key: string]: true }\n needsAnimating: { [key: string]: boolean }\n prevResolvedValues: { [key: string]: any }\n prevProp?: VariantLabels | TargetAndTransition\n}\n\nfunction createState() {\n const state = {} as { [K in AnimationType]: AnimationTypeState }\n\n for (const type of variantPriorityOrder) {\n state[type] = {\n isActive: type === \"animate\",\n protectedKeys: {},\n needsAnimating: {},\n prevResolvedValues: {},\n }\n }\n\n return state\n}\n"],"names":[],"mappings":"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"}