@kitlangton/solid-motion 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/components/MotionConfig.tsx","../src/context/MotionContext.ts","../src/context/PresenceContext.ts","../src/context/MotionContext/utils.ts","../src/context/MotionContext/create.ts","../src/render/svg/lowercase-elements.ts","../src/render/dom/is-svg-component.ts","../src/motion/utils/valid-prop.ts","../src/render/dom/filter-props.ts","../src/render/dom/create-visual-element.ts","../src/render/html/utils/create-render-state.ts","../src/render/dom/style.ts","../src/render/html/use-props.ts","../src/render/svg/utils/create-render-state.ts","../src/render/svg/use-props.ts","../src/motion/utils/use-visual-state.ts","../src/motion/features/definitions.ts","../src/motion/features/load-features.ts","../src/motion/features/animation/index.ts","../src/motion/features/animation/exit.ts","../src/motion/features/animations.ts","../src/events/event-info.ts","../src/events/add-pointer-event.ts","../src/utils/get-context-window.ts","../src/utils/is-ref-object.ts","../src/utils/distance.ts","../src/gestures/pan/PanSession.ts","../src/gestures/drag/utils/constraints.ts","../src/gestures/drag/VisualElementDragControls.ts","../src/gestures/drag/index.ts","../src/gestures/pan/index.ts","../src/gestures/hover.ts","../src/gestures/press.ts","../src/gestures/focus.ts","../src/motion/features/gestures.ts","../src/motion/features/feature-bundle.ts","../src/motion/utils/drag-projection.ts","../src/motion/index.tsx","../src/components/AnimatePresence.tsx","../src/value/use-motion-value.ts","../src/value/use-transform.ts","../src/value/use-spring.ts","../src/value/use-motion-value-event.ts","../src/value/use-velocity.ts","../src/utils/use-reduced-motion.ts","../src/animation/utils/is-dom-keyframes.ts","../src/animation/animate/resolve-subjects.ts","../src/animation/sequence/utils/calc-repeat-duration.ts","../src/animation/sequence/utils/calc-time.ts","../src/animation/sequence/utils/edit.ts","../src/animation/sequence/utils/normalize-times.ts","../src/animation/sequence/utils/sort.ts","../src/animation/sequence/create.ts","../src/animation/utils/create-visual-element.ts","../src/animation/animate/subject.ts","../src/animation/animate/sequence.ts","../src/animation/animate/index.ts"],"sourcesContent":["import type { JSX } from \"solid-js\"\nimport { createContext, splitProps, useContext } from \"solid-js\"\nimport type { TransformPoint } from \"motion-utils\"\nimport type { Transition } from \"motion-dom\"\n\nexport type ReducedMotionConfig = \"always\" | \"never\" | \"user\"\n\nexport interface MotionConfigContext {\n transformPagePoint: TransformPoint\n isStatic: boolean\n transition?: Transition\n reducedMotion?: ReducedMotionConfig\n nonce?: string\n skipAnimations?: boolean\n}\n\nconst defaultContext: MotionConfigContext = {\n transformPagePoint: ((p) => p) as TransformPoint,\n isStatic: false,\n reducedMotion: \"never\",\n}\n\nexport const MotionConfigContext = createContext<MotionConfigContext>(defaultContext)\n\nexport function MotionConfig(props: Partial<MotionConfigContext> & { children?: JSX.Element }) {\n const parent = useContext(MotionConfigContext)\n const [local, contextProps] = splitProps(props, [\"children\"])\n const value = { ...parent, ...contextProps }\n return <MotionConfigContext.Provider value={value}>{local.children}</MotionConfigContext.Provider>\n}\n","import { createContext } from \"solid-js\"\nimport type { VisualElement } from \"motion-dom\"\n\nexport interface MotionContextProps<Instance = unknown> {\n visualElement?: VisualElement<Instance>\n initial?: false | string | string[]\n animate?: string | string[]\n}\n\nexport const MotionContext = createContext<MotionContextProps>({})\n","import { createContext, type Accessor } from \"solid-js\"\nimport type { PresenceContextProps as MotionDomPresenceContextProps } from \"motion-dom\"\nimport type { VariantLabels } from \"../motion/types\"\n\nexport type { MotionDomPresenceContextProps as ResolvedPresenceContextProps }\n\nexport interface PresenceContextProps {\n id: Accessor<string>\n isPresent: Accessor<boolean>\n register?: (id: string | number) => () => void\n onExitComplete?: (id: string | number) => void\n initial: Accessor<false | VariantLabels | undefined>\n custom: Accessor<any>\n}\n\nexport const PresenceContext = createContext<PresenceContextProps | null>(null)\n","import { isControllingVariants, isVariantLabel } from \"motion-dom\"\nimport type { MotionProps } from \"../../motion/types\"\nimport type { MotionContextProps } from \"../MotionContext\"\n\nexport function getCurrentTreeVariants(props: MotionProps, context: MotionContextProps): MotionContextProps {\n if (isControllingVariants(props)) {\n const { initial, animate } = props\n return {\n initial: initial === false || isVariantLabel(initial) ? (initial as any) : undefined,\n animate: isVariantLabel(animate) ? animate : undefined,\n }\n }\n\n return props.inherit !== false ? context : {}\n}\n","import { createEffect, createSignal } from \"solid-js\"\nimport type { MotionProps } from \"../../motion/types\"\nimport type { MotionContextProps } from \"../MotionContext\"\nimport { getCurrentTreeVariants } from \"./utils\"\n\nexport function createMotionContext<Instance>(\n props: MotionProps,\n parentContext: MotionContextProps,\n): MotionContextProps<Instance> {\n const [initial, setInitial] = createSignal<MotionContextProps[\"initial\"]>()\n const [animate, setAnimate] = createSignal<MotionContextProps[\"animate\"]>()\n\n createEffect(() => {\n const variants = getCurrentTreeVariants(props, parentContext)\n setInitial(variants.initial)\n setAnimate(variants.animate)\n })\n\n\n return {\n get initial() {\n return initial()\n },\n get animate() {\n return animate()\n },\n }\n}\n","export const lowercaseSVGElements = [\n \"animate\",\n \"circle\",\n \"defs\",\n \"desc\",\n \"ellipse\",\n \"g\",\n \"image\",\n \"line\",\n \"filter\",\n \"marker\",\n \"mask\",\n \"metadata\",\n \"path\",\n \"pattern\",\n \"polygon\",\n \"polyline\",\n \"rect\",\n \"stop\",\n \"switch\",\n \"symbol\",\n \"svg\",\n \"text\",\n \"tspan\",\n \"use\",\n \"view\",\n]\n","import { lowercaseSVGElements } from \"../svg/lowercase-elements\"\n\nexport function isSVGComponent(Component: string | ((props: any) => any)) {\n if (typeof Component !== \"string\" || Component.includes(\"-\")) {\n return false\n }\n\n if (lowercaseSVGElements.indexOf(Component) > -1 || /[A-Z]/u.test(Component)) {\n return true\n }\n\n return false\n}\n","const validMotionProps = new Set<string>([\n \"animate\",\n \"exit\",\n \"variants\",\n \"initial\",\n \"style\",\n \"values\",\n \"transition\",\n \"transformTemplate\",\n \"custom\",\n \"inherit\",\n \"onBeforeLayoutMeasure\",\n \"onAnimationStart\",\n \"onAnimationComplete\",\n \"onUpdate\",\n \"onDragStart\",\n \"onDrag\",\n \"onDragEnd\",\n \"onMeasureDragConstraints\",\n \"onDirectionLock\",\n \"onDragTransitionEnd\",\n \"_dragX\",\n \"_dragY\",\n \"onHoverStart\",\n \"onHoverEnd\",\n \"onViewportEnter\",\n \"onViewportLeave\",\n \"globalTapTarget\",\n \"ignoreStrict\",\n \"viewport\",\n])\n\nexport function isValidMotionProp(key: string) {\n return (\n key.startsWith(\"while\") ||\n (key.startsWith(\"drag\") && key !== \"draggable\") ||\n key.startsWith(\"layout\") ||\n key.startsWith(\"onTap\") ||\n key.startsWith(\"onPan\") ||\n key.startsWith(\"onLayout\") ||\n validMotionProps.has(key)\n )\n}\n","import type { MotionProps } from \"../../motion/types\"\nimport { isValidMotionProp } from \"../../motion/utils/valid-prop\"\n\nexport function filterProps(props: MotionProps, isDom: boolean, forwardMotionProps: boolean) {\n const filteredProps: Record<string, unknown> = {}\n\n for (const key in props) {\n if (key === \"values\" && typeof (props as any).values === \"object\") continue\n\n if (\n !isValidMotionProp(key) ||\n (forwardMotionProps === true && isValidMotionProp(key)) ||\n (!isDom && !isValidMotionProp(key)) ||\n ((props as any).draggable && key.startsWith(\"onDrag\"))\n ) {\n filteredProps[key] = (props as any)[key]\n }\n }\n\n return filteredProps\n}\n","import { HTMLVisualElement, SVGVisualElement } from \"motion-dom\"\nimport { isSVGComponent } from \"./is-svg-component\"\nimport type { CreateVisualElement, VisualElementOptions } from \"../types\"\n\nexport const createDomVisualElement: CreateVisualElement = (\n Component: string | ((props: any) => any),\n options: VisualElementOptions<HTMLElement | SVGElement>,\n) => {\n const isSVG = options.isSVG ?? isSVGComponent(Component)\n\n return isSVG\n ? new SVGVisualElement(options)\n : new HTMLVisualElement(options, {\n allowProjection: Component !== \"svg\",\n })\n}\n","import type { HTMLRenderState } from \"motion-dom\"\n\nexport const createHtmlRenderState = (): HTMLRenderState => ({\n style: {},\n transform: {},\n transformOrigin: {},\n vars: {},\n})\n","// Motion builds CSSStyleDeclaration-shaped objects. Solid applies style objects\n// with setProperty(), which requires CSS property names (including vendor prefixes).\nexport function toSolidStyle(style: Record<string, unknown>) {\n const result: Record<string, unknown> = {}\n for (const key in style) {\n const name = key.startsWith(\"--\")\n ? key\n : key.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`).replace(/^ms-/, \"-ms-\")\n result[name] = style[key]\n }\n return result\n}\n","import { AnyResolvedKeyframe, buildHTMLStyles, isForcedMotionValue, isMotionValue, MotionValue } from \"motion-dom\"\nimport type { MotionProps } from \"../../motion/types\"\nimport type { ResolvedValues } from \"../types\"\nimport { createHtmlRenderState } from \"./utils/create-render-state\"\nimport { toSolidStyle } from \"../dom/style\"\n\nexport function copyRawValuesOnly(\n target: ResolvedValues,\n source: { [key: string]: AnyResolvedKeyframe | MotionValue },\n props: MotionProps,\n) {\n for (const key in source) {\n if (!isMotionValue(source[key]) && !isForcedMotionValue(key, props)) {\n target[key] = source[key] as AnyResolvedKeyframe\n }\n }\n}\n\nfunction resolveInitialMotionValues({ transformTemplate }: MotionProps, visualState: ResolvedValues) {\n const state = createHtmlRenderState()\n buildHTMLStyles(state, visualState, transformTemplate)\n return { ...state.vars, ...state.style }\n}\n\nfunction resolveStyle(props: MotionProps, visualState: ResolvedValues) {\n const styleProp = props.style || {}\n const style: ResolvedValues = {}\n\n copyRawValuesOnly(style, styleProp as any, props)\n Object.assign(style, resolveInitialMotionValues(props, visualState))\n\n return style\n}\n\nexport function resolveHTMLProps(props: MotionProps, visualState: ResolvedValues) {\n const htmlProps: Record<string, unknown> = {}\n const style = resolveStyle(props, visualState)\n\n if (props.drag && (props as any).dragListener !== false) {\n ;(htmlProps as any).draggable = false\n ;(style as any).userSelect = (style as any).WebkitUserSelect = (style as any).WebkitTouchCallout = \"none\"\n ;(style as any).touchAction = props.drag === true ? \"none\" : `pan-${props.drag === \"x\" ? \"y\" : \"x\"}`\n }\n\n if ((props as any).tabIndex === undefined && ((props as any).onTap || (props as any).onTapStart || props.whileTap)) {\n ;(htmlProps as any).tabIndex = 0\n }\n\n ;(htmlProps as any).style = toSolidStyle(style)\n return htmlProps\n}\n","import type { SVGRenderState } from \"motion-dom\"\nimport { createHtmlRenderState } from \"../../html/utils/create-render-state\"\n\nexport const createSvgRenderState = (): SVGRenderState => ({\n ...createHtmlRenderState(),\n attrs: {},\n})\n","import { buildSVGAttrs, isSVGTag } from \"motion-dom\"\nimport type { MotionProps } from \"../../motion/types\"\nimport type { ResolvedValues } from \"../types\"\nimport { copyRawValuesOnly } from \"../html/use-props\"\nimport { createSvgRenderState } from \"./utils/create-render-state\"\nimport { toSolidStyle } from \"../dom/style\"\n\nexport function resolveSVGProps(props: MotionProps, visualState: ResolvedValues, Component: string) {\n const state = createSvgRenderState()\n\n buildSVGAttrs(state, visualState, isSVGTag(Component), props.transformTemplate, props.style)\n\n const visualProps: Record<string, unknown> = {\n ...state.attrs,\n style: { ...state.style },\n }\n\n if (props.style) {\n const rawStyles: Record<string, unknown> = {}\n copyRawValuesOnly(rawStyles as any, props.style as any, props)\n ;(visualProps as any).style = { ...rawStyles, ...(visualProps as any).style }\n }\n\n const pathLength = (visualState as any).pathLength\n const pathSpacing = (visualState as any).pathSpacing\n const pathOffset = (visualState as any).pathOffset\n\n if (pathLength !== undefined) {\n const spacing = pathSpacing ?? 1 - Number(pathLength)\n ;(visualProps as any).pathLength = 1\n ;(visualProps as any)[\"stroke-dasharray\"] = `${pathLength} ${spacing}`\n ;(visualProps as any)[\"stroke-dashoffset\"] = `${-Number(pathOffset ?? 0)}`\n }\n\n visualProps.style = toSolidStyle(visualProps.style as Record<string, unknown>)\n return visualProps\n}\n","import {\n AnyResolvedKeyframe,\n isAnimationControls,\n isControllingVariants as checkIsControllingVariants,\n isVariantNode as checkIsVariantNode,\n ResolvedValues,\n resolveVariantFromProps,\n resolveMotionValue,\n type ScrapeMotionValuesFromProps,\n} from \"motion-dom\"\nimport type { MotionContextProps } from \"../../context/MotionContext\"\nimport type { ResolvedPresenceContextProps } from \"../../context/PresenceContext\"\nimport type { MotionProps } from \"../types\"\n\nexport interface VisualState<Instance, RenderState> {\n renderState: RenderState\n latestValues: ResolvedValues\n onMount?: (instance: Instance) => void\n}\n\nexport interface UseVisualStateConfig<RenderState> {\n scrapeMotionValuesFromProps: ScrapeMotionValuesFromProps\n createRenderState: () => RenderState\n}\n\nfunction makeState<I, RS>(\n { scrapeMotionValuesFromProps, createRenderState }: UseVisualStateConfig<RS>,\n props: MotionProps,\n context: MotionContextProps,\n presenceContext: ResolvedPresenceContextProps | null,\n) {\n const state: VisualState<I, RS> = {\n latestValues: makeLatestValues(props, context, presenceContext, scrapeMotionValuesFromProps),\n renderState: createRenderState(),\n }\n\n return state\n}\n\nfunction makeLatestValues(\n props: MotionProps,\n context: MotionContextProps,\n presenceContext: ResolvedPresenceContextProps | null,\n scrapeMotionValues: ScrapeMotionValuesFromProps,\n) {\n const values: ResolvedValues = {}\n\n const motionValues = scrapeMotionValues(props, {})\n for (const key in motionValues) {\n values[key] = resolveMotionValue(motionValues[key])\n }\n\n let { initial, animate } = props\n const isControllingVariants = checkIsControllingVariants(props)\n const isVariantNode = checkIsVariantNode(props)\n\n if (context && isVariantNode && !isControllingVariants && props.inherit !== false) {\n if (initial === undefined) initial = context.initial\n if (animate === undefined) animate = context.animate\n }\n\n let isInitialAnimationBlocked = presenceContext ? presenceContext.initial === false : false\n isInitialAnimationBlocked = isInitialAnimationBlocked || initial === false\n\n const variantToSet = isInitialAnimationBlocked ? animate : initial\n\n if (variantToSet && typeof variantToSet !== \"boolean\" && !isAnimationControls(variantToSet)) {\n const list = Array.isArray(variantToSet) ? variantToSet : [variantToSet]\n for (let i = 0; i < list.length; i++) {\n const resolved = resolveVariantFromProps(props, list[i] as any)\n if (resolved) {\n const { transitionEnd, transition, ...target } = resolved\n for (const key in target) {\n let valueTarget = target[key as keyof typeof target]\n\n if (Array.isArray(valueTarget)) {\n const index = isInitialAnimationBlocked ? valueTarget.length - 1 : 0\n valueTarget = valueTarget[index] as any\n }\n\n if (valueTarget !== null) {\n values[key] = valueTarget as AnyResolvedKeyframe\n }\n }\n for (const key in transitionEnd) {\n values[key] = transitionEnd[key as keyof typeof transitionEnd] as AnyResolvedKeyframe\n }\n }\n }\n }\n\n return values\n}\n\nexport function makeVisualState<I, RS>(\n config: UseVisualStateConfig<RS>,\n props: MotionProps,\n context: MotionContextProps,\n presenceContext: ResolvedPresenceContextProps | null,\n): VisualState<I, RS> {\n return makeState(config, props, context, presenceContext)\n}\n","import { getFeatureDefinitions, setFeatureDefinitions } from \"motion-dom\"\nimport type { MotionProps } from \"../types\"\n\nconst featureProps = {\n animation: [\"animate\", \"variants\", \"whileHover\", \"whileTap\", \"exit\", \"whileInView\", \"whileFocus\", \"whileDrag\"],\n exit: [\"exit\"],\n drag: [\"drag\", \"dragControls\"],\n focus: [\"whileFocus\"],\n hover: [\"whileHover\", \"onHoverStart\", \"onHoverEnd\"],\n tap: [\"whileTap\", \"onTap\", \"onTapStart\", \"onTapCancel\"],\n pan: [\"onPan\", \"onPanStart\", \"onPanSessionStart\", \"onPanEnd\"],\n inView: [\"whileInView\", \"onViewportEnter\", \"onViewportLeave\"],\n layout: [\"layout\", \"layoutId\"],\n}\n\nlet isInitialized = false\n\nexport function initFeatureDefinitions() {\n if (isInitialized) return\n\n const initialFeatureDefinitions: Record<string, any> = {}\n\n for (const key in featureProps) {\n initialFeatureDefinitions[key] = {\n isEnabled: (props: MotionProps) =>\n featureProps[key as keyof typeof featureProps].some((name: string) => Boolean((props as any)[name])),\n }\n }\n\n setFeatureDefinitions(initialFeatureDefinitions)\n isInitialized = true\n}\n\nexport function getInitializedFeatureDefinitions(): ReturnType<typeof getFeatureDefinitions> {\n initFeatureDefinitions()\n return getFeatureDefinitions()\n}\n","import { setFeatureDefinitions } from \"motion-dom\"\nimport { getInitializedFeatureDefinitions } from \"./definitions\"\n\nexport function loadFeatures(features: Record<string, unknown>) {\n const featureDefinitions = getInitializedFeatureDefinitions() as any\n\n for (const key in features) {\n featureDefinitions[key] = {\n ...featureDefinitions[key],\n ...(features as any)[key],\n }\n }\n\n setFeatureDefinitions(featureDefinitions)\n}\n","import { createAnimationState, Feature, isAnimationControls, type VisualElement } from \"motion-dom\"\n\nexport class AnimationFeature extends Feature<unknown> {\n unmountControls?: () => void\n\n constructor(node: VisualElement) {\n super(node)\n node.animationState ||= createAnimationState(node)\n }\n\n updateAnimationControlsSubscription() {\n const { animate } = this.node.getProps()\n if (isAnimationControls(animate)) {\n this.unmountControls = animate.subscribe(this.node)\n }\n }\n\n mount() {\n this.updateAnimationControlsSubscription()\n }\n\n update() {\n const { animate } = this.node.getProps()\n const { animate: prevAnimate } = this.node.prevProps || {}\n if (animate !== prevAnimate) {\n this.updateAnimationControlsSubscription()\n }\n }\n\n unmount() {\n this.node.animationState?.reset()\n this.unmountControls?.()\n }\n}\n","import { Feature } from \"motion-dom\"\n\nlet id = 0\n\nexport class ExitAnimationFeature extends Feature<unknown> {\n private id: number = id++\n\n update() {\n if (!this.node.presenceContext) return\n\n const { isPresent, onExitComplete } = this.node.presenceContext\n const { isPresent: prevIsPresent } = this.node.prevPresenceContext || {}\n\n if (!this.node.animationState || isPresent === prevIsPresent) {\n return\n }\n\n const exitAnimation = this.node.animationState.setActive(\"exit\", !isPresent)\n\n if (onExitComplete && !isPresent) {\n exitAnimation.then(() => {\n onExitComplete(this.id)\n })\n }\n }\n\n mount() {\n const { register, onExitComplete } = this.node.presenceContext || {}\n\n if (onExitComplete) {\n onExitComplete(this.id)\n }\n\n if (register) {\n this.unmount = register(this.id)\n }\n }\n\n unmount() {}\n}\n","import { AnimationFeature } from \"./animation\"\nimport { ExitAnimationFeature } from \"./animation/exit\"\n\nexport const animations = {\n animation: {\n Feature: AnimationFeature,\n },\n exit: {\n Feature: ExitAnimationFeature,\n },\n}\n","import { EventInfo, isPrimaryPointer } from \"motion-dom\"\n\nexport type EventListenerWithPointInfo = (\n e: PointerEvent,\n info: EventInfo\n) => void\n\nexport function extractEventInfo(event: PointerEvent): EventInfo {\n return {\n point: {\n x: event.pageX,\n y: event.pageY,\n },\n }\n}\n\nexport const addPointerInfo = (\n handler: EventListenerWithPointInfo\n): EventListener => {\n return (event: Event) => {\n const pointer = event as PointerEvent\n if (isPrimaryPointer(pointer)) handler(pointer, extractEventInfo(pointer))\n }\n}\n","import { addDomEvent } from \"motion-dom\"\nimport { addPointerInfo, EventListenerWithPointInfo } from \"./event-info\"\n\nexport function addPointerEvent(\n target: EventTarget,\n eventName: string,\n handler: EventListenerWithPointInfo,\n options?: AddEventListenerOptions\n) {\n return addDomEvent(target, eventName, addPointerInfo(handler), options)\n}\n","import type { VisualElement } from \"motion-dom\"\n\n// Fixes https://github.com/motiondivision/motion/issues/2270\nexport const getContextWindow = ({ current }: VisualElement<Element>) => {\n return current ? current.ownerDocument.defaultView : null\n}\n","import { MutableRefObject } from \"./safe-react-types\"\n\nexport function isRefObject<E = any>(ref: any): ref is MutableRefObject<E> {\n return (\n ref &&\n typeof ref === \"object\" &&\n Object.prototype.hasOwnProperty.call(ref, \"current\")\n )\n}\n","import { Point } from \"motion-utils\"\n\nexport const distance = (a: number, b: number) => Math.abs(a - b)\n\nexport function distance2D(a: Point, b: Point): number {\n // Multi-dimensional\n const xDelta = distance(a.x, b.x)\n const yDelta = distance(a.y, b.y)\n return Math.sqrt(xDelta ** 2 + yDelta ** 2)\n}\n","import type { EventInfo, PanInfo } from \"motion-dom\"\nimport { cancelFrame, frame, frameData, isPrimaryPointer } from \"motion-dom\"\nimport {\n millisecondsToSeconds,\n pipe,\n Point,\n secondsToMilliseconds,\n TransformPoint,\n} from \"motion-utils\"\nimport { addPointerEvent } from \"../../events/add-pointer-event\"\nimport { extractEventInfo } from \"../../events/event-info\"\nimport { distance2D } from \"../../utils/distance\"\n\ntype PanHandler = (event: PointerEvent, info: PanInfo) => void\n\ninterface PanSessionHandlers {\n onSessionStart: PanHandler\n onStart: PanHandler\n onMove: PanHandler\n onEnd: PanHandler\n onSessionEnd: PanHandler\n resumeAnimation: () => void\n}\n\ninterface PanSessionOptions {\n transformPagePoint?: TransformPoint\n dragSnapToOrigin?: boolean\n distanceThreshold?: number\n contextWindow?: (Window & typeof globalThis) | null\n /**\n * Element being dragged. When provided, scroll events on its\n * ancestors and window are compensated so the gesture continues\n * smoothly during scroll.\n */\n element?: HTMLElement | null\n}\n\ninterface TimestampedPoint extends Point {\n timestamp: number\n}\n\nconst overflowStyles = /*#__PURE__*/ new Set([\"auto\", \"scroll\"])\n\n/**\n * @internal\n */\nexport class PanSession {\n /**\n * @internal\n */\n private history: TimestampedPoint[] = []\n\n /**\n * @internal\n */\n private startEvent: PointerEvent | null = null\n\n /**\n * @internal\n */\n private lastMoveEvent: PointerEvent | null = null\n\n /**\n * @internal\n */\n private lastMoveEventInfo: EventInfo | null = null\n\n /**\n * @internal\n */\n private transformPagePoint?: TransformPoint\n\n /**\n * @internal\n */\n private handlers: Partial<PanSessionHandlers> = {}\n\n /**\n * @internal\n */\n private removeListeners: Function = () => {}\n\n /**\n * For determining if an animation should resume after it is interupted\n *\n * @internal\n */\n private dragSnapToOrigin = false\n\n /**\n * The distance after which panning should start.\n *\n * @internal\n */\n private distanceThreshold = 3\n\n /**\n * @internal\n */\n private contextWindow: PanSessionOptions[\"contextWindow\"] = window\n\n /**\n * Scroll positions of scrollable ancestors and window.\n * @internal\n */\n private scrollPositions: Map<Element | Window, Point> = new Map()\n\n /**\n * Cleanup function for scroll listeners.\n * @internal\n */\n private removeScrollListeners: (() => void) | null = null\n\n constructor(\n event: PointerEvent,\n handlers: Partial<PanSessionHandlers>,\n {\n transformPagePoint,\n contextWindow = window,\n dragSnapToOrigin = false,\n distanceThreshold = 3,\n element,\n }: PanSessionOptions = {}\n ) {\n // If we have more than one touch, don't start detecting this gesture\n if (!isPrimaryPointer(event)) return\n\n this.dragSnapToOrigin = dragSnapToOrigin\n this.handlers = handlers\n this.transformPagePoint = transformPagePoint\n this.distanceThreshold = distanceThreshold\n this.contextWindow = contextWindow || window\n\n const info = extractEventInfo(event)\n const initialInfo = transformPoint(info, this.transformPagePoint)\n const { point } = initialInfo\n\n const { timestamp } = frameData\n\n this.history = [{ ...point, timestamp }]\n\n const { onSessionStart } = handlers\n onSessionStart &&\n onSessionStart(event, getPanInfo(initialInfo, this.history))\n\n this.removeListeners = pipe(\n addPointerEvent(\n this.contextWindow,\n \"pointermove\",\n this.handlePointerMove\n ),\n addPointerEvent(\n this.contextWindow,\n \"pointerup\",\n this.handlePointerUp\n ),\n addPointerEvent(\n this.contextWindow,\n \"pointercancel\",\n this.handlePointerUp\n )\n )\n\n // Start scroll tracking if element provided\n if (element) {\n this.startScrollTracking(element)\n }\n }\n\n /**\n * Start tracking scroll on ancestors and window.\n */\n private startScrollTracking(element: HTMLElement): void {\n // Store initial scroll positions for scrollable ancestors\n let current = element.parentElement\n while (current) {\n const style = getComputedStyle(current)\n if (\n overflowStyles.has(style.overflowX) ||\n overflowStyles.has(style.overflowY)\n ) {\n this.scrollPositions.set(current, {\n x: current.scrollLeft,\n y: current.scrollTop,\n })\n }\n current = current.parentElement\n }\n\n // Track window scroll\n this.scrollPositions.set(window, {\n x: window.scrollX,\n y: window.scrollY,\n })\n\n // Capture listener catches element scroll events as they bubble\n window.addEventListener(\"scroll\", this.onElementScroll, {\n capture: true,\n passive: true,\n })\n\n // Direct window scroll listener (window scroll doesn't bubble)\n window.addEventListener(\"scroll\", this.onWindowScroll, {\n passive: true,\n })\n\n this.removeScrollListeners = () => {\n window.removeEventListener(\"scroll\", this.onElementScroll, {\n capture: true,\n })\n window.removeEventListener(\"scroll\", this.onWindowScroll)\n }\n }\n\n private onElementScroll = (event: Event): void => {\n this.handleScroll(event.target as Element)\n }\n\n private onWindowScroll = (): void => {\n this.handleScroll(window)\n }\n\n /**\n * Handle scroll compensation during drag.\n *\n * For element scroll: adjusts history origin since pageX/pageY doesn't change.\n * For window scroll: adjusts lastMoveEventInfo since pageX/pageY would change.\n */\n private handleScroll(target: Element | Window): void {\n const initial = this.scrollPositions.get(target)\n if (!initial) return\n\n const isWindow = target === window\n const current = isWindow\n ? { x: window.scrollX, y: window.scrollY }\n : {\n x: (target as Element).scrollLeft,\n y: (target as Element).scrollTop,\n }\n\n const delta = { x: current.x - initial.x, y: current.y - initial.y }\n if (delta.x === 0 && delta.y === 0) return\n\n if (isWindow) {\n // Window scroll: pageX/pageY changes, so update lastMoveEventInfo\n if (this.lastMoveEventInfo) {\n this.lastMoveEventInfo.point.x += delta.x\n this.lastMoveEventInfo.point.y += delta.y\n }\n } else {\n // Element scroll: pageX/pageY unchanged, so adjust history origin\n if (this.history.length > 0) {\n this.history[0].x -= delta.x\n this.history[0].y -= delta.y\n }\n }\n\n this.scrollPositions.set(target, current)\n frame.update(this.updatePoint, true)\n }\n\n private updatePoint = () => {\n if (!(this.lastMoveEvent && this.lastMoveEventInfo)) return\n\n const info = getPanInfo(this.lastMoveEventInfo, this.history)\n const isPanStarted = this.startEvent !== null\n\n // Only start panning if the offset is larger than 3 pixels. If we make it\n // any larger than this we'll want to reset the pointer history\n // on the first update to avoid visual snapping to the cursor.\n const isDistancePastThreshold =\n distance2D(info.offset, { x: 0, y: 0 }) >= this.distanceThreshold\n\n if (!isPanStarted && !isDistancePastThreshold) return\n\n const { point } = info\n const { timestamp } = frameData\n this.history.push({ ...point, timestamp })\n\n const { onStart, onMove } = this.handlers\n\n if (!isPanStarted) {\n onStart && onStart(this.lastMoveEvent, info)\n this.startEvent = this.lastMoveEvent\n }\n\n onMove && onMove(this.lastMoveEvent, info)\n }\n\n private handlePointerMove = (event: PointerEvent, info: EventInfo) => {\n this.lastMoveEvent = event\n this.lastMoveEventInfo = transformPoint(info, this.transformPagePoint)\n\n // Throttle mouse move event to once per frame\n frame.update(this.updatePoint, true)\n }\n\n private handlePointerUp = (event: PointerEvent, info: EventInfo) => {\n this.end()\n\n const { onEnd, onSessionEnd, resumeAnimation } = this.handlers\n\n // Resume animation if dragSnapToOrigin is set OR if no drag started (user just clicked)\n // This ensures constraint animations continue when interrupted by a click\n if (this.dragSnapToOrigin || !this.startEvent) {\n resumeAnimation && resumeAnimation()\n }\n if (!(this.lastMoveEvent && this.lastMoveEventInfo)) return\n\n const panInfo = getPanInfo(\n event.type === \"pointercancel\"\n ? this.lastMoveEventInfo\n : transformPoint(info, this.transformPagePoint),\n this.history\n )\n\n if (this.startEvent && onEnd) {\n onEnd(event, panInfo)\n }\n\n onSessionEnd && onSessionEnd(event, panInfo)\n }\n\n updateHandlers(handlers: Partial<PanSessionHandlers>) {\n this.handlers = handlers\n }\n\n end() {\n this.removeListeners && this.removeListeners()\n this.removeScrollListeners && this.removeScrollListeners()\n this.scrollPositions.clear()\n cancelFrame(this.updatePoint)\n }\n}\n\nfunction transformPoint(\n info: EventInfo,\n transformPagePoint?: (point: Point) => Point\n) {\n return transformPagePoint ? { point: transformPagePoint(info.point) } : info\n}\n\nfunction subtractPoint(a: Point, b: Point): Point {\n return { x: a.x - b.x, y: a.y - b.y }\n}\n\nfunction getPanInfo({ point }: EventInfo, history: TimestampedPoint[]) {\n return {\n point,\n delta: subtractPoint(point, lastDevicePoint(history)),\n offset: subtractPoint(point, startDevicePoint(history)),\n velocity: getVelocity(history, 0.1),\n }\n}\n\nfunction startDevicePoint(history: TimestampedPoint[]): TimestampedPoint {\n return history[0]\n}\n\nfunction lastDevicePoint(history: TimestampedPoint[]): TimestampedPoint {\n return history[history.length - 1]\n}\n\nfunction getVelocity(history: TimestampedPoint[], timeDelta: number): Point {\n if (history.length < 2) {\n return { x: 0, y: 0 }\n }\n\n let i = history.length - 1\n let timestampedPoint: TimestampedPoint | null = null\n const lastPoint = lastDevicePoint(history)\n while (i >= 0) {\n timestampedPoint = history[i]\n if (\n lastPoint.timestamp - timestampedPoint.timestamp >\n secondsToMilliseconds(timeDelta)\n ) {\n break\n }\n i--\n }\n\n if (!timestampedPoint) {\n return { x: 0, y: 0 }\n }\n\n const time = millisecondsToSeconds(\n lastPoint.timestamp - timestampedPoint.timestamp\n )\n if (time === 0) {\n return { x: 0, y: 0 }\n }\n\n const currentVelocity = {\n x: (lastPoint.x - timestampedPoint.x) / time,\n y: (lastPoint.y - timestampedPoint.y) / time,\n }\n\n if (currentVelocity.x === Infinity) {\n currentVelocity.x = 0\n }\n if (currentVelocity.y === Infinity) {\n currentVelocity.y = 0\n }\n\n return currentVelocity\n}\n","import { calcLength, mixNumber, type DragElastic, type ResolvedConstraints } from \"motion-dom\"\nimport {\n Axis,\n BoundingBox,\n Box,\n progress as calcProgress,\n clamp,\n Point,\n} from \"motion-utils\"\n\n/**\n * Apply constraints to a point. These constraints are both physical along an\n * axis, and an elastic factor that determines how much to constrain the point\n * by if it does lie outside the defined parameters.\n */\nexport function applyConstraints(\n point: number,\n { min, max }: Partial<Axis>,\n elastic?: Axis\n): number {\n if (min !== undefined && point < min) {\n // If we have a min point defined, and this is outside of that, constrain\n point = elastic\n ? mixNumber(min, point, elastic.min)\n : Math.max(point, min)\n } else if (max !== undefined && point > max) {\n // If we have a max point defined, and this is outside of that, constrain\n point = elastic\n ? mixNumber(max, point, elastic.max)\n : Math.min(point, max)\n }\n\n return point\n}\n\n/**\n * Calculates a min projection point based on a pointer, pointer progress\n * within the drag target, and constraints.\n *\n * For instance if an element was 100px width, we were dragging from 0.25\n * along this axis, the pointer is at 200px, and there were no constraints,\n * we would calculate a min projection point of 175px.\n */\nexport function calcConstrainedMinPoint(\n point: number,\n length: number,\n progress: number,\n constraints?: Partial<Axis>,\n elastic?: Axis\n): number {\n // Calculate a min point for this axis and apply it to the current pointer\n const min = point - length * progress\n\n return constraints ? applyConstraints(min, constraints, elastic) : min\n}\n\n/**\n * Calculate constraints in terms of the viewport when defined relatively to the\n * measured axis. This is measured from the nearest edge, so a max constraint of 200\n * on an axis with a max value of 300 would return a constraint of 500 - axis length\n */\nexport function calcRelativeAxisConstraints(\n axis: Axis,\n min?: number,\n max?: number\n): Partial<Axis> {\n return {\n min: min !== undefined ? axis.min + min : undefined,\n max:\n max !== undefined\n ? axis.max + max - (axis.max - axis.min)\n : undefined,\n }\n}\n\n/**\n * Calculate constraints in terms of the viewport when\n * defined relatively to the measured bounding box.\n */\nexport function calcRelativeConstraints(\n layoutBox: Box,\n { top, left, bottom, right }: Partial<BoundingBox>\n): ResolvedConstraints {\n return {\n x: calcRelativeAxisConstraints(layoutBox.x, left, right),\n y: calcRelativeAxisConstraints(layoutBox.y, top, bottom),\n }\n}\n\n/**\n * Calculate viewport constraints when defined as another viewport-relative axis\n */\nexport function calcViewportAxisConstraints(\n layoutAxis: Axis,\n constraintsAxis: Axis\n) {\n let min = constraintsAxis.min - layoutAxis.min\n let max = constraintsAxis.max - layoutAxis.max\n\n // If the constraints axis is actually smaller than the layout axis then we can\n // flip the constraints\n if (\n constraintsAxis.max - constraintsAxis.min <\n layoutAxis.max - layoutAxis.min\n ) {\n ;[min, max] = [max, min]\n }\n\n return { min, max }\n}\n\n/**\n * Calculate viewport constraints when defined as another viewport-relative box\n */\nexport function calcViewportConstraints(layoutBox: Box, constraintsBox: Box) {\n return {\n x: calcViewportAxisConstraints(layoutBox.x, constraintsBox.x),\n y: calcViewportAxisConstraints(layoutBox.y, constraintsBox.y),\n }\n}\n\n/**\n * Calculate a transform origin relative to the source axis, between 0-1, that results\n * in an asthetically pleasing scale/transform needed to project from source to target.\n */\nexport function calcOrigin(source: Axis, target: Axis): number {\n let origin = 0.5\n const sourceLength = calcLength(source)\n const targetLength = calcLength(target)\n\n if (targetLength > sourceLength) {\n origin = calcProgress(target.min, target.max - sourceLength, source.min)\n } else if (sourceLength > targetLength) {\n origin = calcProgress(source.min, source.max - targetLength, target.min)\n }\n\n return clamp(0, 1, origin)\n}\n\n/**\n * Calculate the relative progress of one constraints box relative to another.\n * Imagine a page scroll bar. At the top, this would return 0, at the bottom, 1.\n * Anywhere in-between, a value between 0 and 1.\n *\n * This also handles flipped constraints, for instance a draggable container within\n * a smaller viewport like a scrollable view.\n */\nexport function calcProgressWithinConstraints(\n layoutBox: Box,\n constraintsBox: Box\n): Point {\n return {\n x: calcOrigin(layoutBox.x, constraintsBox.x),\n y: calcOrigin(layoutBox.y, constraintsBox.y),\n }\n}\n\n/**\n * Calculate the an axis position based on two axes and a progress value.\n */\nexport function calcPositionFromProgress(\n axis: Axis,\n constraints: Axis,\n progress: number\n): Axis {\n const axisLength = axis.max - axis.min\n const min = mixNumber(\n constraints.min,\n constraints.max - axisLength,\n progress\n )\n return { min, max: min + axisLength }\n}\n\n/**\n * Rebase the calculated viewport constraints relative to the layout.min point.\n */\nexport function rebaseAxisConstraints(\n layout: Axis,\n constraints: Partial<Axis>\n): Partial<Axis> {\n const relativeConstraints: Partial<Axis> = {}\n\n if (constraints.min !== undefined) {\n relativeConstraints.min = constraints.min - layout.min\n }\n\n if (constraints.max !== undefined) {\n relativeConstraints.max = constraints.max - layout.min\n }\n\n return relativeConstraints\n}\n\nexport const defaultElastic = 0.35\n/**\n * Accepts a dragElastic prop and returns resolved elastic values for each axis.\n */\nexport function resolveDragElastic(\n dragElastic: DragElastic = defaultElastic\n): Box {\n if (dragElastic === false) {\n dragElastic = 0\n } else if (dragElastic === true) {\n dragElastic = defaultElastic\n }\n\n return {\n x: resolveAxisElastic(dragElastic, \"left\", \"right\"),\n y: resolveAxisElastic(dragElastic, \"top\", \"bottom\"),\n }\n}\n\nexport function resolveAxisElastic(\n dragElastic: DragElastic,\n minLabel: string,\n maxLabel: string\n): Axis {\n return {\n min: resolvePointElastic(dragElastic, minLabel),\n max: resolvePointElastic(dragElastic, maxLabel),\n }\n}\n\nexport function resolvePointElastic(\n dragElastic: DragElastic,\n label: string\n): number {\n return typeof dragElastic === \"number\"\n ? dragElastic\n : dragElastic[label as keyof typeof dragElastic] || 0\n}\n","import {\n addValueToWillChange,\n animateMotionValue,\n calcLength,\n convertBoundingBoxToBox,\n convertBoxToBoundingBox,\n createBox,\n eachAxis,\n frame,\n cancelFrame,\n measurePageBox,\n mixNumber,\n PanInfo,\n percent,\n ResolvedConstraints,\n setDragLock,\n Transition,\n type VisualElement,\n} from \"motion-dom\"\nimport { Axis, Point, invariant } from \"motion-utils\"\nimport { addDomEvent, type LayoutUpdateData } from \"motion-dom\"\nimport { addPointerEvent } from \"../../events/add-pointer-event\"\nimport { extractEventInfo } from \"../../events/event-info\"\nimport { MotionProps } from \"../../motion/types\"\nimport { getContextWindow } from \"../../utils/get-context-window\"\nimport { isRefObject } from \"../../utils/is-ref-object\"\nimport { PanSession } from \"../pan/PanSession\"\nimport {\n applyConstraints,\n calcOrigin,\n calcRelativeConstraints,\n calcViewportConstraints,\n defaultElastic,\n rebaseAxisConstraints,\n resolveDragElastic,\n} from \"./utils/constraints\"\n\nexport const elementDragControls = new WeakMap<\n VisualElement,\n VisualElementDragControls\n>()\n\nexport interface DragControlOptions {\n /**\n * This distance after which dragging starts and a direction is locked in.\n *\n * @public\n */\n distanceThreshold?: number\n\n /**\n * Whether to immediately snap to the cursor when dragging starts.\n *\n * @public\n */\n snapToCursor?: boolean\n}\n\ntype DragDirection = \"x\" | \"y\"\n\nexport class VisualElementDragControls {\n private visualElement: VisualElement<HTMLElement>\n\n private panSession?: PanSession\n\n private openDragLock: VoidFunction | null = null\n\n isDragging = false\n private currentDirection: DragDirection | null = null\n\n private originPoint: Point = { x: 0, y: 0 }\n\n /**\n * The permitted boundaries of travel, in pixels.\n */\n private constraints: ResolvedConstraints | false = false\n\n private hasMutatedConstraints = false\n\n /**\n * The per-axis resolved elastic values.\n */\n private elastic = createBox()\n\n /**\n * The latest pointer event. Used as fallback when the `cancel` and `stop` functions are called without arguments.\n */\n private latestPointerEvent: PointerEvent | null = null\n\n /**\n * The latest pan info. Used as fallback when the `cancel` and `stop` functions are called without arguments.\n */\n private latestPanInfo: PanInfo | null = null\n\n constructor(visualElement: VisualElement<HTMLElement>) {\n this.visualElement = visualElement\n }\n\n start(\n originEvent: PointerEvent,\n { snapToCursor = false, distanceThreshold }: DragControlOptions = {}\n ) {\n /**\n * Don't start dragging if this component is exiting\n */\n const { presenceContext } = this.visualElement\n if (presenceContext && presenceContext.isPresent === false) return\n\n const onSessionStart = (event: PointerEvent) => {\n // Stop or pause animations based on context:\n // - snapToCursor: stop because we'll set new position values\n // - otherwise: pause to allow resume if no drag starts (for constraint animations)\n if (snapToCursor) {\n this.stopAnimation()\n this.snapToCursor(extractEventInfo(event).point)\n } else {\n this.pauseAnimation()\n }\n }\n\n const onStart = (event: PointerEvent, info: PanInfo) => {\n // Stop any paused animation so motion values reflect true current position\n // (pauseAnimation was called in onSessionStart to allow resume if no drag started)\n this.stopAnimation()\n\n // Attempt to grab the global drag gesture lock - maybe make this part of PanSession\n const { drag, dragPropagation, onDragStart } = this.getProps()\n\n if (drag && !dragPropagation) {\n if (this.openDragLock) this.openDragLock()\n\n this.openDragLock = setDragLock(drag)\n\n // If we don 't have the lock, don't start dragging\n if (!this.openDragLock) return\n }\n\n this.latestPointerEvent = event\n this.latestPanInfo = info\n this.isDragging = true\n\n this.currentDirection = null\n\n this.resolveConstraints()\n\n if (this.visualElement.projection) {\n this.visualElement.projection.isAnimationBlocked = true\n this.visualElement.projection.target = undefined\n }\n\n /**\n * Record gesture origin and pointer offset\n */\n eachAxis((axis) => {\n let current = this.getAxisMotionValue(axis).get() || 0\n\n /**\n * If the MotionValue is a percentage value convert to px\n */\n if (percent.test(current)) {\n const { projection } = this.visualElement\n\n if (projection && projection.layout) {\n const measuredAxis = projection.layout.layoutBox[axis]\n\n if (measuredAxis) {\n const length = calcLength(measuredAxis)\n current = length * (parseFloat(current) / 100)\n }\n }\n }\n\n this.originPoint[axis] = current\n })\n\n // Fire onDragStart event\n if (onDragStart) {\n frame.postRender(() => onDragStart(event, info))\n }\n\n addValueToWillChange(this.visualElement, \"transform\")\n\n const { animationState } = this.visualElement\n animationState && animationState.setActive(\"whileDrag\", true)\n }\n\n const onMove = (event: PointerEvent, info: PanInfo) => {\n this.latestPointerEvent = event\n this.latestPanInfo = info\n\n const {\n dragPropagation,\n dragDirectionLock,\n onDirectionLock,\n onDrag,\n } = this.getProps()\n\n // If we didn't successfully receive the gesture lock, early return.\n if (!dragPropagation && !this.openDragLock) return\n\n const { offset } = info\n // Attempt to detect drag direction if directionLock is true\n if (dragDirectionLock && this.currentDirection === null) {\n this.currentDirection = getCurrentDirection(offset)\n\n // If we've successfully set a direction, notify listener\n if (this.currentDirection !== null) {\n onDirectionLock && onDirectionLock(this.currentDirection)\n }\n\n return\n }\n\n // Update each point with the latest position\n this.updateAxis(\"x\", info.point, offset)\n this.updateAxis(\"y\", info.point, offset)\n\n /**\n * Ideally we would leave the renderer to fire naturally at the end of\n * this frame but if the element is about to change layout as the result\n * of a re-render we want to ensure the browser can read the latest\n * bounding box to ensure the pointer and element don't fall out of sync.\n */\n this.visualElement.render()\n\n /**\n * This must fire after the render call as it might trigger a state\n * change which itself might trigger a layout update.\n */\n onDrag && onDrag(event, info)\n }\n\n const onSessionEnd = (event: PointerEvent, info: PanInfo) => {\n this.latestPointerEvent = event\n this.latestPanInfo = info\n\n this.stop(event, info)\n\n this.latestPointerEvent = null\n this.latestPanInfo = null\n }\n\n const resumeAnimation = () =>\n eachAxis(\n (axis) =>\n this.getAnimationState(axis) === \"paused\" &&\n this.getAxisMotionValue(axis).animation?.play()\n )\n\n const { dragSnapToOrigin } = this.getProps()\n this.panSession = new PanSession(\n originEvent,\n {\n onSessionStart,\n onStart,\n onMove,\n onSessionEnd,\n resumeAnimation,\n },\n {\n transformPagePoint: this.visualElement.getTransformPagePoint(),\n dragSnapToOrigin,\n distanceThreshold,\n contextWindow: getContextWindow(this.visualElement),\n element: this.visualElement.current,\n }\n )\n }\n\n /**\n * @internal\n */\n stop(event?: PointerEvent, panInfo?: PanInfo) {\n const finalEvent = event || this.latestPointerEvent\n const finalPanInfo = panInfo || this.latestPanInfo\n\n const isDragging = this.isDragging\n this.cancel()\n if (!isDragging || !finalPanInfo || !finalEvent) return\n\n const { velocity } = finalPanInfo\n this.startAnimation(velocity)\n\n const { onDragEnd } = this.getProps()\n if (onDragEnd) {\n frame.postRender(() => onDragEnd(finalEvent, finalPanInfo))\n }\n }\n\n /**\n * @internal\n */\n cancel() {\n this.isDragging = false\n\n const { projection, animationState } = this.visualElement\n\n if (projection) {\n projection.isAnimationBlocked = false\n }\n\n this.endPanSession()\n\n const { dragPropagation } = this.getProps()\n\n if (!dragPropagation && this.openDragLock) {\n this.openDragLock()\n this.openDragLock = null\n }\n\n animationState && animationState.setActive(\"whileDrag\", false)\n }\n\n /**\n * Clean up the pan session without modifying other drag state.\n * This is used during unmount to ensure event listeners are removed\n * without affecting projection animations or drag locks.\n * @internal\n */\n endPanSession() {\n this.panSession && this.panSession.end()\n this.panSession = undefined\n }\n\n /** Final owner disposal, including any release inertia on external values. */\n dispose() {\n this.cancel()\n this.stopAnimation()\n elementDragControls.delete(this.visualElement)\n }\n\n private updateAxis(axis: DragDirection, _point: Point, offset?: Point) {\n const { drag } = this.getProps()\n\n // If we're not dragging this axis, do an early return.\n if (!offset || !shouldDrag(axis, drag, this.currentDirection)) return\n\n const axisValue = this.getAxisMotionValue(axis)\n let next = this.originPoint[axis] + offset[axis]\n\n // Apply constraints\n if (this.constraints && this.constraints[axis]) {\n next = applyConstraints(\n next,\n this.constraints[axis],\n this.elastic[axis]\n )\n }\n\n axisValue.set(next)\n }\n\n private resolveConstraints() {\n const { dragConstraints, dragElastic } = this.getProps()\n\n const layout =\n this.visualElement.projection &&\n !this.visualElement.projection.layout\n ? this.visualElement.projection.measure(false)\n : this.visualElement.projection?.layout\n\n const prevConstraints = this.constraints\n\n if (dragConstraints && isRefObject(dragConstraints)) {\n if (!this.constraints) {\n this.constraints = this.resolveRefConstraints()\n }\n } else {\n if (dragConstraints && layout) {\n this.constraints = calcRelativeConstraints(\n layout.layoutBox,\n dragConstraints\n )\n } else {\n this.constraints = false\n }\n }\n\n this.elastic = resolveDragElastic(dragElastic)\n\n /**\n * If we're outputting to external MotionValues, we want to rebase the measured constraints\n * from viewport-relative to component-relative.\n */\n if (\n prevConstraints !== this.constraints &&\n layout &&\n this.constraints &&\n !this.hasMutatedConstraints\n ) {\n eachAxis((axis) => {\n if (\n this.constraints !== false &&\n this.getAxisMotionValue(axis)\n ) {\n this.constraints[axis] = rebaseAxisConstraints(\n layout.layoutBox[axis],\n this.constraints[axis]\n )\n }\n })\n }\n }\n\n private resolveRefConstraints() {\n const { dragConstraints: constraints, onMeasureDragConstraints } =\n this.getProps()\n if (!constraints || !isRefObject(constraints)) return false\n\n const constraintsElement = constraints.current as HTMLElement\n\n invariant(\n constraintsElement !== null,\n \"If `dragConstraints` is set as a React ref, that ref must be passed to another component's `ref` prop.\",\n \"drag-constraints-ref\"\n )\n\n const { projection } = this.visualElement\n\n // TODO\n if (!projection || !projection.layout) return false\n\n const constraintsBox = measurePageBox(\n constraintsElement,\n projection.root!,\n this.visualElement.getTransformPagePoint()\n )\n\n let measuredConstraints = calcViewportConstraints(\n projection.layout.layoutBox,\n constraintsBox\n )\n\n /**\n * If there's an onMeasureDragConstraints listener we call it and\n * if different constraints are returned, set constraints to that\n */\n if (onMeasureDragConstraints) {\n const userConstraints = onMeasureDragConstraints(\n convertBoxToBoundingBox(measuredConstraints)\n )\n\n this.hasMutatedConstraints = !!userConstraints\n\n if (userConstraints) {\n measuredConstraints = convertBoundingBoxToBox(userConstraints)\n }\n }\n\n return measuredConstraints\n }\n\n private startAnimation(velocity: Point) {\n const {\n drag,\n dragMomentum,\n dragElastic,\n dragTransition,\n dragSnapToOrigin,\n onDragTransitionEnd,\n } = this.getProps()\n\n const constraints: Partial<ResolvedConstraints> = this.constraints || {}\n\n const momentumAnimations = eachAxis((axis) => {\n if (!shouldDrag(axis, drag, this.currentDirection)) {\n return\n }\n\n let transition = (constraints && constraints[axis]) || {}\n\n if (dragSnapToOrigin) transition = { min: 0, max: 0 }\n\n /**\n * Overdamp the boundary spring if `dragElastic` is disabled. There's still a frame\n * of spring animations so we should look into adding a disable spring option to `inertia`.\n * We could do something here where we affect the `bounceStiffness` and `bounceDamping`\n * using the value of `dragElastic`.\n */\n const bounceStiffness = dragElastic ? 200 : 1000000\n const bounceDamping = dragElastic ? 40 : 10000000\n\n const inertia: Transition = {\n type: \"inertia\",\n velocity: dragMomentum ? velocity[axis] : 0,\n bounceStiffness,\n bounceDamping,\n timeConstant: 750,\n restDelta: 1,\n restSpeed: 10,\n ...dragTransition,\n ...transition,\n }\n\n // If we're not animating on an externally-provided `MotionValue` we can use the\n // component's animation controls which will handle interactions with whileHover (etc),\n // otherwise we just have to animate the `MotionValue` itself.\n return this.startAxisValueAnimation(axis, inertia)\n })\n\n // Run all animations and then resolve the new drag constraints.\n return Promise.all(momentumAnimations).then(onDragTransitionEnd)\n }\n\n private startAxisValueAnimation(\n axis: DragDirection,\n transition: Transition\n ) {\n const axisValue = this.getAxisMotionValue(axis)\n\n addValueToWillChange(this.visualElement, axis)\n\n return axisValue.start(\n animateMotionValue(\n axis,\n axisValue,\n 0,\n transition,\n this.visualElement,\n false\n )\n )\n }\n\n private stopAnimation() {\n eachAxis((axis) => this.getAxisMotionValue(axis).stop())\n }\n\n private pauseAnimation() {\n eachAxis((axis) => this.getAxisMotionValue(axis).animation?.pause())\n }\n\n private getAnimationState(axis: DragDirection) {\n return this.getAxisMotionValue(axis).animation?.state\n }\n\n /**\n * Drag works differently depending on which props are provided.\n *\n * - If _dragX and _dragY are provided, we output the gesture delta directly to those motion values.\n * - Otherwise, we apply the delta to the x/y motion values.\n */\n private getAxisMotionValue(axis: DragDirection) {\n const dragKey =\n `_drag${axis.toUpperCase()}` as `_drag${Uppercase<DragDirection>}`\n const props = this.visualElement.getProps()\n const externalMotionValue = props[dragKey]\n\n return externalMotionValue\n ? externalMotionValue\n : this.visualElement.getValue(\n axis,\n (props.initial\n ? props.initial[axis as keyof typeof props.initial]\n : undefined) || 0\n )\n }\n\n private snapToCursor(point: Point) {\n eachAxis((axis) => {\n const { drag } = this.getProps()\n\n // If we're not dragging this axis, do an early return.\n if (!shouldDrag(axis, drag, this.currentDirection)) return\n\n const { projection } = this.visualElement\n const axisValue = this.getAxisMotionValue(axis)\n\n if (projection && projection.layout) {\n const { min, max } = projection.layout.layoutBox[axis]\n\n /**\n * The layout measurement includes the current transform value,\n * so we need to add it back to get the correct snap position.\n * This fixes an issue where elements with initial coordinates\n * would snap to the wrong position on the first drag.\n */\n const current = axisValue.get() || 0\n\n axisValue.set(point[axis] - mixNumber(min, max, 0.5) + current)\n }\n })\n }\n\n /**\n * When the viewport resizes we want to check if the measured constraints\n * have changed and, if so, reposition the element within those new constraints\n * relative to where it was before the resize.\n */\n scalePositionWithinConstraints() {\n if (!this.visualElement.current) return\n\n const { drag, dragConstraints } = this.getProps()\n const { projection } = this.visualElement\n if (!isRefObject(dragConstraints) || !projection || !this.constraints)\n return\n\n /**\n * Stop current animations as there can be visual glitching if we try to do\n * this mid-animation\n */\n this.stopAnimation()\n\n /**\n * Record the relative position of the dragged element relative to the\n * constraints box and save as a progress value.\n */\n const boxProgress = { x: 0, y: 0 }\n eachAxis((axis) => {\n const axisValue = this.getAxisMotionValue(axis)\n if (axisValue && this.constraints !== false) {\n const latest = axisValue.get()\n boxProgress[axis] = calcOrigin(\n { min: latest, max: latest },\n this.constraints[axis] as Axis\n )\n }\n })\n\n /**\n * Update the layout of this element and resolve the latest drag constraints\n */\n const { transformTemplate } = this.visualElement.getProps()\n this.visualElement.current.style.transform = transformTemplate\n ? transformTemplate({}, \"\")\n : \"none\"\n projection.root && projection.root.updateScroll()\n projection.updateLayout()\n this.resolveConstraints()\n\n /**\n * For each axis, calculate the current progress of the layout axis\n * within the new constraints.\n */\n eachAxis((axis) => {\n if (!shouldDrag(axis, drag, null)) return\n\n /**\n * Calculate a new transform based on the previous box progress\n */\n const axisValue = this.getAxisMotionValue(axis)\n const { min, max } = (this.constraints as ResolvedConstraints)[\n axis\n ] as Axis\n axisValue.set(mixNumber(min, max, boxProgress[axis]))\n })\n }\n\n addListeners() {\n if (!this.visualElement.current) return\n elementDragControls.set(this.visualElement, this)\n const element = this.visualElement.current\n\n /**\n * Attach a pointerdown event listener on this DOM element to initiate drag tracking.\n */\n const stopPointerListener = addPointerEvent(\n element,\n \"pointerdown\",\n (event) => {\n const { drag, dragListener = true } = this.getProps()\n const target = event.target as Element\n\n /**\n * Allow dragging from buttons/links (e.g. carousel items), while\n * preserving text editing and native input interactions.\n */\n const isClickingTextInputChild =\n target !== element &&\n (Boolean(target.closest(\"input, textarea, select\")) ||\n (target instanceof HTMLElement && target.isContentEditable))\n\n if (drag && dragListener && !isClickingTextInputChild) {\n this.start(event)\n }\n }\n )\n\n const measureDragConstraints = () => {\n const { dragConstraints } = this.getProps()\n if (isRefObject(dragConstraints) && dragConstraints.current) {\n this.constraints = this.resolveRefConstraints()\n }\n }\n\n const { projection } = this.visualElement\n\n const stopMeasureLayoutListener = projection!.addEventListener(\n \"measure\",\n measureDragConstraints\n )\n\n if (projection && !projection!.layout) {\n projection.root && projection.root.updateScroll()\n projection.updateLayout()\n }\n\n frame.read(measureDragConstraints)\n\n /**\n * Attach a window resize listener to scale the draggable target within its defined\n * constraints as the window resizes.\n */\n const stopResizeListener = addDomEvent(window, \"resize\", () =>\n this.scalePositionWithinConstraints()\n )\n\n /**\n * If the element's layout changes, calculate the delta and apply that to\n * the drag gesture's origin point.\n */\n const stopLayoutUpdateListener = projection!.addEventListener(\n \"didUpdate\",\n (({ delta, hasLayoutChanged }: LayoutUpdateData) => {\n if (this.isDragging && hasLayoutChanged) {\n eachAxis((axis) => {\n const motionValue = this.getAxisMotionValue(axis)\n if (!motionValue) return\n\n this.originPoint[axis] += delta[axis].translate\n motionValue.set(\n motionValue.get() + delta[axis].translate\n )\n })\n\n this.visualElement.render()\n }\n }) as any\n )\n\n return () => {\n cancelFrame(measureDragConstraints)\n stopResizeListener()\n stopPointerListener()\n stopMeasureLayoutListener()\n stopLayoutUpdateListener && stopLayoutUpdateListener()\n }\n }\n\n getProps(): MotionProps {\n const props = this.visualElement.getProps()\n const {\n drag = false,\n dragDirectionLock = false,\n dragPropagation = false,\n dragConstraints = false,\n dragElastic = defaultElastic,\n dragMomentum = true,\n } = props\n return {\n ...props,\n drag,\n dragDirectionLock,\n dragPropagation,\n dragConstraints,\n dragElastic,\n dragMomentum,\n }\n }\n}\n\nfunction shouldDrag(\n direction: DragDirection,\n drag: boolean | DragDirection | undefined,\n currentDirection: null | DragDirection\n) {\n return (\n (drag === true || drag === direction) &&\n (currentDirection === null || currentDirection === direction)\n )\n}\n\n/**\n * Based on an x/y offset determine the current drag direction. If both axis' offsets are lower\n * than the provided threshold, return `null`.\n *\n * @param offset - The x/y offset from origin.\n * @param lockThreshold - (Optional) - the minimum absolute offset before we can determine a drag direction.\n */\nfunction getCurrentDirection(\n offset: Point,\n lockThreshold = 10\n): DragDirection | null {\n let direction: DragDirection | null = null\n\n if (Math.abs(offset.y) > lockThreshold) {\n direction = \"y\"\n } else if (Math.abs(offset.x) > lockThreshold) {\n direction = \"x\"\n }\n\n return direction\n}\n\nexport function expectsResolvedDragConstraints({\n dragConstraints,\n onMeasureDragConstraints,\n}: MotionProps) {\n return isRefObject(dragConstraints) && !!onMeasureDragConstraints\n}\n","import { Feature, type VisualElement } from \"motion-dom\"\nimport { noop } from \"motion-utils\"\nimport { VisualElementDragControls } from \"./VisualElementDragControls\"\n\nexport class DragGesture extends Feature<HTMLElement> {\n controls: VisualElementDragControls\n\n removeGroupControls: Function = noop\n removeListeners: Function = noop\n\n constructor(node: VisualElement<HTMLElement>) {\n super(node)\n this.controls = new VisualElementDragControls(node)\n }\n\n mount() {\n // If we've been provided a DragControls for manual control over the drag gesture,\n // subscribe this component to it on mount.\n const { dragControls } = this.node.getProps()\n\n if (dragControls) {\n this.removeGroupControls = dragControls.subscribe(this.controls)\n }\n\n this.removeListeners = this.controls.addListeners() || noop\n }\n\n update() {\n const { dragControls } = this.node.getProps()\n const { dragControls: prevDragControls } = this.node.prevProps || {}\n\n if (dragControls !== prevDragControls) {\n this.removeGroupControls()\n if (dragControls) {\n this.removeGroupControls = dragControls.subscribe(this.controls)\n }\n }\n }\n\n unmount() {\n this.removeGroupControls()\n this.removeListeners()\n /**\n * In React 19, during list reorder reconciliation, components may\n * briefly unmount and remount while the drag is still active. If we're\n * actively dragging, we should NOT end the pan session - it will\n * continue tracking pointer events via its window-level listeners.\n *\n * The pan session will be properly cleaned up when:\n * 1. The drag ends naturally (pointerup/pointercancel)\n * 2. The component is truly removed from the DOM\n */\n if (!this.controls.isDragging) {\n this.controls.endPanSession()\n }\n }\n}\n","import { Feature, frame, type PanInfo } from \"motion-dom\"\nimport { noop } from \"motion-utils\"\nimport { addPointerEvent } from \"../../events/add-pointer-event\"\nimport { getContextWindow } from \"../../utils/get-context-window\"\nimport { PanSession } from \"./PanSession\"\n\ntype PanEventHandler = (event: PointerEvent, info: PanInfo) => void\nconst asyncHandler =\n (handler?: PanEventHandler) => (event: PointerEvent, info: PanInfo) => {\n if (handler) {\n frame.postRender(() => handler(event, info))\n }\n }\n\nexport class PanGesture extends Feature<Element> {\n private session?: PanSession\n\n private removePointerDownListener: Function = noop\n\n onPointerDown(pointerDownEvent: PointerEvent) {\n this.session = new PanSession(\n pointerDownEvent,\n this.createPanHandlers(),\n {\n transformPagePoint: this.node.getTransformPagePoint(),\n contextWindow: getContextWindow(this.node),\n }\n )\n }\n\n createPanHandlers() {\n const { onPanSessionStart, onPanStart, onPan, onPanEnd } =\n this.node.getProps()\n\n return {\n onSessionStart: asyncHandler(onPanSessionStart),\n onStart: asyncHandler(onPanStart),\n onMove: onPan,\n onEnd: (event: PointerEvent, info: PanInfo) => {\n delete this.session\n if (onPanEnd) {\n frame.postRender(() => onPanEnd(event, info))\n }\n },\n }\n }\n\n mount() {\n this.removePointerDownListener = addPointerEvent(\n this.node.current!,\n \"pointerdown\",\n (event: PointerEvent) => this.onPointerDown(event)\n )\n }\n\n update() {\n this.session && this.session.updateHandlers(this.createPanHandlers())\n }\n\n unmount() {\n this.removePointerDownListener()\n this.session && this.session.end()\n }\n}\n","import { Feature, frame, hover, type VisualElement } from \"motion-dom\"\nimport { extractEventInfo } from \"../events/event-info\"\n\nfunction handleHoverEvent(\n node: VisualElement<Element>,\n event: PointerEvent,\n lifecycle: \"Start\" | \"End\"\n) {\n const { props } = node\n\n if (node.animationState && props.whileHover) {\n node.animationState.setActive(\"whileHover\", lifecycle === \"Start\")\n }\n\n const eventName = (\"onHover\" + lifecycle) as \"onHoverStart\" | \"onHoverEnd\"\n const callback = props[eventName]\n if (callback) {\n frame.postRender(() => callback(event, extractEventInfo(event)))\n }\n}\n\nexport class HoverGesture extends Feature<Element> {\n mount() {\n const { current } = this.node\n if (!current) return\n\n this.unmount = hover(current, (_element, startEvent) => {\n handleHoverEvent(this.node, startEvent, \"Start\")\n\n return (endEvent) => handleHoverEvent(this.node, endEvent, \"End\")\n })\n }\n\n unmount() {}\n}\n","import { Feature, frame, press, type VisualElement } from \"motion-dom\"\nimport { extractEventInfo } from \"../events/event-info\"\n\nfunction handlePressEvent(\n node: VisualElement<Element>,\n event: PointerEvent,\n lifecycle: \"Start\" | \"End\" | \"Cancel\"\n) {\n const { props } = node\n\n if (node.current instanceof HTMLButtonElement && node.current.disabled) {\n return\n }\n\n if (node.animationState && props.whileTap) {\n node.animationState.setActive(\"whileTap\", lifecycle === \"Start\")\n }\n\n const eventName = (\"onTap\" + (lifecycle === \"End\" ? \"\" : lifecycle)) as\n | \"onTapStart\"\n | \"onTap\"\n | \"onTapCancel\"\n\n const callback = props[eventName]\n if (callback) {\n frame.postRender(() => callback(event, extractEventInfo(event)))\n }\n}\n\nexport class PressGesture extends Feature<Element> {\n mount() {\n const { current } = this.node\n if (!current) return\n\n this.unmount = press(\n current,\n (_element, startEvent) => {\n handlePressEvent(this.node, startEvent, \"Start\")\n\n return (endEvent, { success }) =>\n handlePressEvent(\n this.node,\n endEvent,\n success ? \"End\" : \"Cancel\"\n )\n },\n { useGlobalTarget: this.node.props.globalTapTarget }\n )\n }\n\n unmount() {}\n}\n","import { Feature, addDomEvent } from \"motion-dom\"\nimport { pipe } from \"motion-utils\"\n\nexport class FocusGesture extends Feature<Element> {\n private isActive = false\n\n onFocus() {\n let isFocusVisible = false\n\n /**\n * If this element doesn't match focus-visible then don't\n * apply whileHover. But, if matches throws that focus-visible\n * is not a valid selector then in that browser outline styles will be applied\n * to the element by default and we want to match that behaviour with whileFocus.\n */\n try {\n isFocusVisible = this.node.current!.matches(\":focus-visible\")\n } catch (e) {\n isFocusVisible = true\n }\n\n if (!isFocusVisible || !this.node.animationState) return\n\n this.node.animationState.setActive(\"whileFocus\", true)\n this.isActive = true\n }\n\n onBlur() {\n if (!this.isActive || !this.node.animationState) return\n this.node.animationState.setActive(\"whileFocus\", false)\n this.isActive = false\n }\n\n mount() {\n this.unmount = pipe(\n addDomEvent(this.node.current!, \"focus\", () => this.onFocus()),\n addDomEvent(this.node.current!, \"blur\", () => this.onBlur())\n ) as VoidFunction\n }\n\n unmount() {}\n}\n","import { DragGesture as UpstreamDragGesture } from \"../../gestures/drag\"\nimport { PanGesture } from \"../../gestures/pan\"\nimport { HoverGesture } from \"../../gestures/hover\"\nimport { PressGesture } from \"../../gestures/press\"\nimport { FocusGesture } from \"../../gestures/focus\"\n\nclass DragGesture extends UpstreamDragGesture {\n unmount() {\n // Solid disposal is final. Always release the window listeners and global\n // drag lock, including when an element is removed in the middle of a drag.\n this.controls.dispose()\n super.unmount()\n }\n}\n\nexport const gestures = {\n drag: { Feature: DragGesture },\n pan: { Feature: PanGesture },\n hover: { Feature: HoverGesture },\n tap: { Feature: PressGesture },\n focus: { Feature: FocusGesture },\n}\n","import { animations } from \"./animations\"\nimport { gestures } from \"./gestures\"\n\nexport const featureBundle = {\n ...animations,\n ...gestures,\n}\n","import { HTMLProjectionNode, type VisualElement } from \"motion-dom\"\nimport type { MotionProps } from \"../types\"\n\nexport function prepareDragProjection(node: VisualElement<HTMLElement | SVGElement>, props: MotionProps) {\n if (node.projection || !(props.drag || props.dragControls)) return\n // Drag constraints use Motion's geometry measurement, without enabling layout\n // animation or shared layout IDs. Non-draggable elements pay no projection cost.\n node.projection = new HTMLProjectionNode(node.latestValues, node.parent?.projection)\n node.projection.setOptions({\n visualElement: node,\n alwaysMeasureLayout: true,\n layout: false,\n animationType: \"both\",\n })\n if (node.current) node.projection.mount(node.current)\n}\n","import { createEffect, createMemo, onCleanup, onMount, splitProps, useContext } from \"solid-js\"\nimport { Dynamic } from \"solid-js/web\"\nimport { scrapeHTMLMotionValuesFromProps, scrapeSVGMotionValuesFromProps, type VisualElement } from \"motion-dom\"\nimport { MotionConfigContext } from \"../components/MotionConfig\"\nimport { MotionContext } from \"../context/MotionContext\"\nimport { PresenceContext } from \"../context/PresenceContext\"\nimport { createMotionContext } from \"../context/MotionContext/create\"\nimport { isSVGComponent } from \"../render/dom/is-svg-component\"\nimport { filterProps } from \"../render/dom/filter-props\"\nimport { createDomVisualElement } from \"../render/dom/create-visual-element\"\nimport { resolveHTMLProps } from \"../render/html/use-props\"\nimport { resolveSVGProps } from \"../render/svg/use-props\"\nimport { createHtmlRenderState } from \"../render/html/utils/create-render-state\"\nimport { createSvgRenderState } from \"../render/svg/utils/create-render-state\"\nimport type { CreateVisualElement } from \"../render/types\"\nimport { makeVisualState } from \"./utils/use-visual-state\"\nimport type { MotionProps } from \"./types\"\nimport { loadFeatures } from \"./features/load-features\"\nimport { featureBundle } from \"./features/feature-bundle\"\nimport { prepareDragProjection } from \"./utils/drag-projection\"\n\nexport interface MotionComponentOptions {\n forwardMotionProps?: boolean\n type?: \"html\" | \"svg\"\n}\n\nconst isBrowser = typeof window !== \"undefined\"\n\nfunction useVisualState(\n isSVG: boolean,\n props: MotionProps,\n context: ReturnType<typeof createMotionContext>,\n presenceContext: any,\n) {\n const config = isSVG\n ? {\n scrapeMotionValuesFromProps: scrapeSVGMotionValuesFromProps,\n createRenderState: createSvgRenderState,\n }\n : {\n scrapeMotionValuesFromProps: scrapeHTMLMotionValuesFromProps,\n createRenderState: createHtmlRenderState,\n }\n\n return makeVisualState(config, props, context, presenceContext)\n}\n\nexport function createMotionComponent(\n Component: string | ((props: any) => any),\n { forwardMotionProps = false, type }: MotionComponentOptions = {},\n preloadedFeatures?: Record<string, unknown>,\n createVisualElement?: CreateVisualElement,\n) {\n if (preloadedFeatures) {\n loadFeatures(preloadedFeatures as any)\n }\n\n const isSVG = type ? type === \"svg\" : isSVGComponent(Component)\n\n return function MotionDOMComponent(props: MotionProps & { ref?: any }) {\n const motionConfig = useContext(MotionConfigContext)\n const parentContext = useContext(MotionContext)\n const rawPresenceContext = useContext(PresenceContext)\n const presenceContext = createMemo(() => {\n if (!rawPresenceContext) return null\n\n const resolved = {\n id: rawPresenceContext.id(),\n isPresent: rawPresenceContext.isPresent(),\n initial: rawPresenceContext.initial(),\n custom: rawPresenceContext.custom(),\n onExitComplete: rawPresenceContext.onExitComplete,\n register: rawPresenceContext.register ?? (() => () => {}),\n }\n\n return resolved\n })\n\n const ownProps = createMemo(() => {\n const nextProps: MotionProps = {}\n for (const key in props) {\n // Solid children are lazy factories, not inert React element values.\n // Reading them here creates a second subtree on each animation update,\n // overwriting refs with detached nodes. Resolve them only in the provider.\n if (key === \"children\") continue\n ;(nextProps as any)[key] = (props as any)[key]\n }\n return nextProps\n })\n // Config feeds the visual element, but must not render as DOM attributes.\n const getLatestProps = createMemo((): MotionProps => ({ ...motionConfig, ...ownProps() }))\n\n const isStatic = createMemo(() => Boolean((getLatestProps() as any).isStatic))\n\n const context = createMotionContext(props, parentContext)\n const visualState = useVisualState(isSVG, props, context, presenceContext())\n\n let visualElement: VisualElement<HTMLElement | SVGElement> | undefined\n\n const initialPresenceContext = presenceContext()\n\n if (!isStatic() && isBrowser) {\n visualElement = (createVisualElement || createDomVisualElement)(Component, {\n visualState,\n parent: parentContext.visualElement,\n props: getLatestProps(),\n presenceContext: initialPresenceContext,\n blockInitialAnimation: initialPresenceContext ? initialPresenceContext.initial === false : false,\n reducedMotionConfig: motionConfig.reducedMotion,\n skipAnimations: motionConfig.skipAnimations,\n isSVG,\n })\n if (visualElement) prepareDragProjection(visualElement, getLatestProps())\n }\n\n context.visualElement = visualElement\n\n const [local, rest] = splitProps(props as any, [\"ref\", \"children\"])\n const elementProps = createMemo(() => {\n const latestProps = getLatestProps()\n const filtered = filterProps(ownProps(), typeof Component === \"string\", forwardMotionProps) as Record<\n string,\n unknown\n >\n delete filtered.children\n delete filtered.ref\n const componentTag = typeof Component === \"string\" ? Component : \"svg\"\n const visualProps = isSVG\n ? resolveSVGProps(latestProps, visualState.latestValues, componentTag)\n : resolveHTMLProps(latestProps, visualState.latestValues)\n\n return { ...filtered, ...visualProps }\n })\n\n onMount(() => {\n if (!visualElement) return\n visualElement.scheduleRenderMicrotask()\n })\n\n createEffect(() => {\n if (!visualElement) return\n const nextProps = getLatestProps()\n const nextPresenceContext = presenceContext()\n visualElement.update(nextProps, nextPresenceContext)\n prepareDragProjection(visualElement, nextProps)\n visualElement.updateFeatures()\n if (visualElement.current && visualElement.animationState) {\n visualElement.animationState.animateChanges()\n }\n })\n\n onCleanup(() => {\n visualElement?.unmount()\n })\n\n const setRef = (instance: HTMLElement | SVGElement | null) => {\n if (!instance) return\n visualElement?.mount(instance)\n if (visualElement && parentContext.visualElement) {\n const parent = parentContext.visualElement as any\n ;(visualElement as any).parent = parent\n if (typeof parent.depth === \"number\") {\n ;(visualElement as any).depth = parent.depth + 1\n }\n if ((visualElement as any).isVariantNode && !(visualElement as any).isControllingVariants) {\n ;(visualElement as any).removeFromVariantTree?.()\n if (typeof parent.addVariantChild === \"function\") {\n ;(visualElement as any).removeFromVariantTree = parent.addVariantChild(visualElement as any)\n }\n }\n }\n visualState.onMount?.(instance as any)\n\n const externalRef = local.ref\n if (typeof externalRef === \"function\") {\n externalRef(instance)\n } else if (externalRef && typeof externalRef === \"object\") {\n ;(externalRef as any).current = instance\n }\n }\n\n return (\n <MotionContext.Provider value={context}>\n <Dynamic component={Component as any} {...elementProps()} ref={setRef}>\n {local.children}\n </Dynamic>\n </MotionContext.Provider>\n )\n }\n}\n\nexport function createMotionComponentWithFeatures(\n Component: string | ((props: any) => any),\n options?: MotionComponentOptions,\n) {\n return createMotionComponent(Component, options, featureBundle, createDomVisualElement)\n}\n\ntype MotionFactory = {\n create: typeof createMotionComponentWithFeatures\n <T extends string | ((props: any) => any)>(\n component: T,\n options?: MotionComponentOptions,\n ): (props: MotionProps & { ref?: any }) => any\n [key: string]: any\n}\n\nconst componentCache = new Map<string, ReturnType<typeof createMotionComponentWithFeatures>>()\nconst motionProxy = new Proxy(createMotionComponentWithFeatures as MotionFactory, {\n get: (target, key) => {\n if (key === \"create\") return createMotionComponentWithFeatures\n if (typeof key !== \"string\") return Reflect.get(target, key)\n let component = componentCache.get(key)\n if (!component) {\n component = createMotionComponentWithFeatures(key)\n componentCache.set(key, component)\n }\n return component\n },\n})\n\nexport const motion = motionProxy\nexport const m = motionProxy\n","import { batch, children, createEffect, createMemo, createSignal, For, Index, mergeProps, on, onMount, splitProps, untrack, useContext } from \"solid-js\"\nimport { PresenceContext } from \"../context/PresenceContext\"\nimport type { AnimatePresenceProps, PresenceChildState, ChildKey } from \"./AnimatePresenceTypes.js\"\n\nlet presenceCounter = 0\nlet autoKeyIndex = 0\nconst autoKeyMap = new WeakMap<object, ChildKey>()\n\n/**\n * AnimatePresence for Solid.js\n * \n * Enables exit animations by keeping elements in the DOM\n * until their exit animations complete.\n * \n * @example\n * ```solid\n * <AnimatePresence>\n * {show() && (\n * <motion.div\n * exit={{ opacity: 0 }}\n * />\n * )}\n * </AnimatePresence>\n * ```\n */\nexport function AnimatePresence(props: AnimatePresenceProps) {\n const merged = mergeProps(\n {\n initial: true,\n mode: \"sync\" as const,\n presenceAffectsLayout: true,\n },\n props\n )\n\n const [local, others] = splitProps(merged, [\n \"children\",\n \"when\",\n \"presenceKey\",\n \"initial\",\n \"onExitComplete\",\n \"mode\",\n \"presenceAffectsLayout\",\n \"custom\",\n \"anchorX\",\n \"root\",\n ])\n\n // Track if this is the initial render\n let isInitialRender = true\n\n let didWarn = false\n const warnNonFactory = () => {\n if (didWarn) return\n didWarn = true\n console.warn(\n \"[AnimatePresence] Solid requires children to be a function for exit animations to work reliably. \" +\n \"Use <AnimatePresence when={condition}>{() => <motion.div .../>}</AnimatePresence>.\"\n )\n }\n\n if (local.when !== undefined) {\n const currentChild = createMemo(() => {\n if (!local.when) return undefined\n const childrenValue = local.children as any\n const getChild = () => {\n let value = typeof childrenValue === \"function\" ? childrenValue() : childrenValue\n if (typeof value === \"function\" && value.length === 0) {\n value = value()\n }\n return value\n }\n if (typeof childrenValue !== \"function\") {\n warnNonFactory()\n }\n return { key: local.presenceKey ?? \"index-0\", getChild }\n })\n\n type Child = NonNullable<ReturnType<typeof currentChild>>\n const initialChild = currentChild()\n const [rendered, setRendered] = createSignal<Child[]>(initialChild ? [initialChild] : [])\n\n createEffect(on(currentChild, (next) => {\n const previous = untrack(rendered)\n const exiting = previous.filter((child) => child.key !== next?.key)\n // Reuse the mounted record on reentry, so its exit can reverse in place.\n const present = next && (previous.find((child) => child.key === next.key) ?? next)\n setRendered(local.mode === \"wait\" && exiting.length\n ? exiting\n : present ? [present, ...exiting] : exiting)\n }, { defer: true }))\n\n onMount(() => { isInitialRender = false })\n\n return (\n <For each={rendered()}>\n {(child) => {\n const isPresent = () => currentChild()?.key === child.key\n\n const onExitComplete = () => {\n const next = untrack(currentChild)\n const previous = untrack(rendered)\n if (next?.key === child.key || !previous.includes(child)) return\n const remaining = previous.filter((item) => item !== child)\n const hasExits = remaining.some((item) => item.key !== next?.key)\n setRendered(!hasExits && next\n ? [remaining.find((item) => item.key === next.key) ?? next]\n : remaining)\n if (!hasExits) local.onExitComplete?.()\n }\n\n return (\n <PresenceChild\n key={child.key}\n isPresent={isPresent}\n onExitComplete={isPresent() ? undefined : onExitComplete}\n initial={isInitialRender && !local.initial ? false : undefined}\n custom={local.custom}\n presenceAffectsLayout={local.presenceAffectsLayout}\n getChild={child.getChild}\n childKey={child.key}\n mode={local.mode}\n anchorX={local.anchorX}\n root={local.root}\n />\n )\n }}\n </For>\n )\n }\n\n const resolveChildrenList = () => {\n const childrenValue = local.children as any\n\n if (local.when !== undefined) {\n if (!local.when) return []\n if (typeof childrenValue !== \"function\") {\n warnNonFactory()\n }\n const getChild = typeof childrenValue === \"function\" ? childrenValue : () => childrenValue\n const key = local.presenceKey ?? \"index-0\"\n return [{ key, getChild }]\n }\n\n const child = typeof childrenValue === \"function\" ? childrenValue() : childrenValue\n if (!child || child === true) return []\n const list = Array.isArray(child) ? child : [child]\n return list\n .filter((item) => item !== false && item != null)\n .map((item, index) => ({\n key: getChildKey(item, index),\n getChild: () => item,\n }))\n }\n\n // Track present children (filtered to elements only)\n const presentChildren = createMemo(() => resolveChildrenList())\n\n // Track which keys are currently present\n const presentKeys = createMemo(() => {\n return presentChildren().map((child) => child.key)\n })\n\n // Track all children that should be rendered (including exiting ones)\n const [allChildren, setAllChildren] = createSignal<PresenceChildState[]>([], { equals: false })\n\n // Track exit completion status per key\n const [exitStatus, setExitStatus] = createSignal<Map<ChildKey, boolean>>(new Map(), { equals: false })\n\n // Handle child changes\n createEffect(() => {\n const current = presentChildren()\n const currentKeys = presentKeys()\n const prev = untrack(allChildren)\n const prevExitStatus = untrack(exitStatus)\n\n let nextExitStatus = prevExitStatus\n let exitStatusChanged = false\n\n // Identify exiting children\n const exitingChildren = prev.filter((child) => !currentKeys.includes(child.key))\n\n // Clear exit tracking for children that re-entered\n prevExitStatus.forEach((_, key) => {\n if (currentKeys.includes(key)) {\n if (!exitStatusChanged) {\n nextExitStatus = new Map(prevExitStatus)\n exitStatusChanged = true\n }\n nextExitStatus.delete(key)\n }\n })\n\n // Mark exiting children\n exitingChildren.forEach((child) => {\n if (!prevExitStatus.has(child.key)) {\n if (!exitStatusChanged) {\n nextExitStatus = new Map(prevExitStatus)\n exitStatusChanged = true\n }\n nextExitStatus.set(child.key, false)\n }\n })\n\n if (exitStatusChanged) {\n setExitStatus(nextExitStatus)\n }\n\n // Build new allChildren array\n const nextChildren: PresenceChildState[] = []\n\n // Add all current children\n for (let i = 0; i < current.length; i++) {\n const child = current[i]\n nextChildren.push({\n key: child.key,\n getChild: child.getChild,\n isPresent: true,\n index: i,\n })\n }\n\n // In \"wait\" mode, only show exiting children until they're all done\n if (local.mode === \"wait\" && exitingChildren.length > 0) {\n nextChildren.length = 0\n exitingChildren.forEach((child) => {\n nextChildren.push({\n ...child,\n isPresent: false,\n })\n })\n } else {\n // In \"sync\" and \"popLayout\" modes, include exiting children alongside present ones\n exitingChildren.forEach((child) => {\n nextChildren.push({\n ...child,\n isPresent: false,\n })\n })\n }\n\n const isSame =\n prev.length === nextChildren.length &&\n prev.every((child, index) => {\n const next = nextChildren[index]\n return child.key === next.key && child.getChild === next.getChild && child.isPresent === next.isPresent\n })\n\n if (!isSame) {\n setAllChildren(nextChildren)\n }\n })\n\n // Check if all exits are complete\n const allExitsComplete = createMemo(() => {\n const status = exitStatus()\n if (!status.size) return false\n for (const isComplete of status.values()) {\n if (!isComplete) return false\n }\n return true\n })\n\n // Handle completion\n createEffect(() => {\n if (allExitsComplete()) {\n // All exits done, clean up and notify\n batch(() => {\n setExitStatus(new Map())\n // Filter to only present children\n const current = presentChildren()\n const keys = presentKeys()\n setAllChildren(\n current.map((child, i) => ({\n key: child.key,\n getChild: child.getChild,\n isPresent: true,\n index: i,\n }))\n )\n })\n local.onExitComplete?.()\n }\n })\n\n // Mark initial render complete after first mount\n onMount(() => {\n isInitialRender = false\n })\n\n return (\n <Index each={allChildren()}>\n {(childState) => {\n const state = childState\n const isPresent = () => state().isPresent\n\n const onExitComplete = () => {\n const status = untrack(exitStatus)\n const key = state().key\n if (!status.has(key)) return\n batch(() => {\n setExitStatus((map) => {\n const newMap = new Map(map)\n if (!newMap.has(key)) return newMap\n newMap.set(key, true)\n return newMap\n })\n })\n }\n\n return (\n <PresenceChild\n key={state().key}\n isPresent={isPresent}\n onExitComplete={isPresent() ? undefined : onExitComplete}\n initial={isInitialRender && !local.initial ? false : undefined}\n custom={local.custom}\n presenceAffectsLayout={local.presenceAffectsLayout}\n getChild={state().getChild}\n childKey={state().key}\n mode={local.mode}\n anchorX={local.anchorX}\n root={local.root}\n />\n )\n }}\n </Index>\n )\n}\n\nfunction PopChild(props: {\n children: any\n isPresent: boolean\n anchorX?: \"left\" | \"right\"\n root?: HTMLElement | ShadowRoot\n}) {\n let container: HTMLDivElement | undefined\n let wasPresent = props.isPresent\n const [style, setStyle] = createSignal<Record<string, string>>({ display: \"contents\" })\n\n createEffect(() => {\n const now = props.isPresent\n if (wasPresent && !now) {\n const target = (container?.firstElementChild as HTMLElement | null) ?? container\n if (target) {\n const rect = target.getBoundingClientRect()\n const parent = target.offsetParent as HTMLElement | null\n const parentRect = parent ? parent.getBoundingClientRect() : { left: 0, top: 0, width: 0 }\n const top = rect.top - parentRect.top\n const left = rect.left - parentRect.left\n const right = parent ? parentRect.width - rect.width - left : 0\n const x =\n props.anchorX === \"right\"\n ? { right: `${right}px`, left: \"auto\" }\n : { left: `${left}px`, right: \"auto\" }\n\n setStyle({\n position: \"absolute\",\n top: `${top}px`,\n width: `${rect.width}px`,\n height: `${rect.height}px`,\n ...x,\n })\n }\n } else if (now) {\n setStyle({ display: \"contents\" })\n }\n wasPresent = now\n })\n\n return (\n <div ref={(el) => (container = el)} style={style()}>\n {props.children}\n </div>\n )\n}\n\n/**\n * Individual presence child wrapper\n */\nfunction PresenceChild(props: {\n key: ChildKey\n isPresent: () => boolean\n getChild: () => any\n childKey: ChildKey\n onExitComplete?: () => void\n initial?: false | string | string[]\n custom?: any\n presenceAffectsLayout?: boolean\n mode?: \"sync\" | \"wait\" | \"popLayout\"\n anchorX?: \"left\" | \"right\"\n root?: HTMLElement | ShadowRoot\n}) {\n const presenceId = String(presenceCounter++)\n const [local, others] = splitProps(props, [\n \"isPresent\",\n \"getChild\",\n \"childKey\",\n \"onExitComplete\",\n \"initial\",\n \"custom\",\n \"presenceAffectsLayout\",\n \"mode\",\n \"anchorX\",\n \"root\",\n ])\n\n // Track registered exit handlers from child motion components\n const [registeredChildren, setRegisteredChildren] = createSignal<Map<string, boolean>>(new Map())\n\n // Create presence context for this child\n const register = (childId: string | number) => {\n const key = String(childId)\n batch(() => {\n setRegisteredChildren((map) => {\n const newMap = new Map(map)\n newMap.set(key, false)\n return newMap\n })\n })\n return () => {\n batch(() => {\n setRegisteredChildren((map) => {\n const newMap = new Map(map)\n newMap.delete(key)\n return newMap\n })\n })\n }\n }\n\n const onExitComplete = (childId: string | number) => {\n if (!local.onExitComplete) return\n const key = String(childId)\n batch(() => {\n setRegisteredChildren((map) => {\n const newMap = new Map(map)\n newMap.set(key, true)\n return newMap\n })\n })\n\n const allComplete = Array.from(registeredChildren().values()).every(Boolean)\n if (allComplete) {\n local.onExitComplete?.()\n }\n }\n\n createEffect(\n on(\n local.isPresent,\n (present) => {\n const current = untrack(registeredChildren)\n\n if (current.size) {\n setRegisteredChildren((map) => {\n const newMap = new Map(map)\n newMap.forEach((_, key) => newMap.set(key, false))\n return newMap\n })\n }\n\n if (!present && current.size === 0) {\n local.onExitComplete?.()\n }\n },\n { defer: true },\n ),\n )\n\n const resolvedInitial = (): false | string | string[] | undefined => {\n if (local.initial === false) return false\n if (typeof local.initial === \"string\" || Array.isArray(local.initial)) return local.initial\n return undefined\n }\n\n const presenceContext = createMemo(() => ({\n id: () => presenceId,\n isPresent: local.isPresent,\n initial: () => resolvedInitial(),\n custom: () => local.custom,\n onExitComplete,\n register,\n }))\n\n return (\n <PresenceContext.Provider value={presenceContext()}>\n <PresenceChildContent\n getChild={local.getChild}\n childKey={local.childKey}\n isPresent={local.isPresent}\n mode={local.mode}\n anchorX={local.anchorX}\n root={local.root}\n />\n </PresenceContext.Provider>\n )\n}\n\nfunction PresenceChildContent(props: {\n getChild: () => any\n childKey: ChildKey\n isPresent: () => boolean\n mode?: \"sync\" | \"wait\" | \"popLayout\"\n anchorX?: \"left\" | \"right\"\n root?: HTMLElement | ShadowRoot\n}) {\n const resolved = children(() => {\n props.childKey\n return untrack(() => props.getChild())\n })\n\n if (props.mode === \"popLayout\") {\n return (\n <PopChild isPresent={props.isPresent()} anchorX={props.anchorX} root={props.root}>\n {resolved()}\n </PopChild>\n )\n }\n\n return resolved()\n}\n\n/**\n * Get a unique key for a child element\n */\nfunction getChildKey(child: any, index: number): ChildKey {\n if (!child) return \"\"\n const directKey = child.key ?? child.id ?? child?.props?.key\n if (directKey != null && directKey !== \"\") return directKey\n if (typeof child === \"string\" || typeof child === \"number\") return child\n if (typeof child === \"object\" || typeof child === \"function\") {\n const cached = autoKeyMap.get(child as object)\n if (cached) return cached\n }\n const nextKey = `index-${index}`\n if (typeof child === \"object\" || typeof child === \"function\") {\n autoKeyMap.set(child as object, nextKey)\n }\n return nextKey\n}\n\n/**\n * Hook to access presence state and signal safe removal\n */\nexport function usePresence(): [boolean, (() => void) | null] {\n const context = useContext(PresenceContext)\n\n if (!context) {\n return [true, null]\n }\n\n const isPresent = context.isPresent()\n \n const safeToRemove = () => {\n if (context.onExitComplete) {\n context.onExitComplete(context.id())\n }\n }\n\n return [!isPresent ? false : true, !isPresent ? safeToRemove : null]\n}\n\n/**\n * Simple hook to check if component is present\n */\nexport function useIsPresent(): boolean {\n const context = useContext(PresenceContext)\n if (!context) return true\n return context.isPresent()\n}\n","import { motionValue, type MotionValue } from \"motion-dom\"\nimport { onCleanup, useContext } from \"solid-js\"\nimport { MotionConfigContext } from \"../components/MotionConfig\"\n\n/**\n * Creates a MotionValue to track state and velocity.\n */\nexport function useMotionValue<T>(initial: T): MotionValue<T> {\n const value = motionValue(initial)\n const { isStatic } = useContext(MotionConfigContext)\n\n if (isStatic) {\n const unsubscribe = value.on(\"change\", () => {})\n onCleanup(() => unsubscribe())\n }\n\n onCleanup(() => value.destroy())\n\n return value\n}\n","import {\n AnyResolvedKeyframe,\n mapValue,\n MotionValue,\n transform,\n TransformOptions,\n transformValue,\n} from \"motion-dom\"\nimport { onCleanup } from \"solid-js\"\n\nexport type InputRange = number[]\ntype SingleTransformer<I, O> = (input: I) => O\ntype MultiTransformer<I, O> = (input: I[]) => O\ntype Transformer<I, O> =\n | SingleTransformer<I, O>\n | MultiTransformer<AnyResolvedKeyframe, O>\n\nexport function useTransform<I, O>(\n value: MotionValue<number>,\n inputRange: InputRange,\n outputRange: O[],\n options?: TransformOptions<O>,\n): MotionValue<O>\n\nexport function useTransform<I, O>(\n input: MotionValue<I>,\n transformer: SingleTransformer<I, O>,\n): MotionValue<O>\n\nexport function useTransform<I, O>(\n input:\n | MotionValue<string>[]\n | MotionValue<number>[]\n | MotionValue<AnyResolvedKeyframe>[],\n transformer: MultiTransformer<I, O>,\n): MotionValue<O>\n\nexport function useTransform<I, O>(transformer: () => O): MotionValue<O>\n\nexport function useTransform<I, O>(\n input:\n | MotionValue<I>\n | MotionValue<string>[]\n | MotionValue<number>[]\n | MotionValue<AnyResolvedKeyframe>[]\n | (() => O),\n inputRangeOrTransformer?: InputRange | Transformer<I, O>,\n outputRange?: O[],\n options?: TransformOptions<O>,\n): MotionValue<O> {\n if (typeof input === \"function\") {\n const value = transformValue(input)\n onCleanup(() => value.destroy())\n return value\n }\n\n let value: MotionValue<O>\n\n if (Array.isArray(input)) {\n const transformer =\n typeof inputRangeOrTransformer === \"function\"\n ? (inputRangeOrTransformer as MultiTransformer<AnyResolvedKeyframe, O>)\n : (transform(inputRangeOrTransformer as InputRange, outputRange as O[], options) as unknown as MultiTransformer<\n AnyResolvedKeyframe,\n O\n >)\n\n value = transformValue(() =>\n (transformer as MultiTransformer<AnyResolvedKeyframe, O>)(\n input.map((item) => item.get()) as AnyResolvedKeyframe[],\n ),\n )\n } else if (typeof inputRangeOrTransformer === \"function\") {\n const transformer = inputRangeOrTransformer as SingleTransformer<I, O>\n value = transformValue(() => transformer((input as MotionValue<I>).get()))\n } else {\n value = mapValue(\n input as unknown as MotionValue<number>,\n inputRangeOrTransformer as InputRange,\n outputRange as O[],\n options,\n )\n }\n\n onCleanup(() => value.destroy())\n return value\n}\n","import {\n AnyResolvedKeyframe,\n isMotionValue,\n MotionValue,\n SpringOptions,\n cancelFrame,\n frame,\n JSAnimation,\n motionValue,\n} from \"motion-dom\"\nimport { useContext } from \"solid-js\"\nimport { MotionConfigContext } from \"../components/MotionConfig\"\nimport { useTransform } from \"./use-transform\"\nimport { onCleanup } from \"solid-js\"\n\nexport function useSpring(source: MotionValue<string>, options?: SpringOptions): MotionValue<string>\nexport function useSpring(source: string, options?: SpringOptions): MotionValue<string>\nexport function useSpring(source: MotionValue<number>, options?: SpringOptions): MotionValue<number>\nexport function useSpring(source: number, options?: SpringOptions): MotionValue<number>\nexport function useSpring(\n source: MotionValue<string> | MotionValue<number> | AnyResolvedKeyframe,\n options: SpringOptions = {},\n) {\n const { isStatic } = useContext(MotionConfigContext)\n const getFromSource = () => (isMotionValue(source) ? source.get() : source)\n\n if (isStatic) {\n return useTransform(getFromSource)\n }\n\n const initial = getFromSource() as string | number\n const value = motionValue(initial)\n const unit = typeof initial === \"string\" ? initial.replace(/[\\d.-]/g, \"\") : \"\"\n const parse = (latest: string | number) => unit ? `${parseFloat(String(latest))}${unit}` : parseFloat(String(latest))\n let target = initial\n let setter: (value: string | number) => void\n let disposed = false\n const stop = () => {\n cancelFrame(start)\n value.stop()\n }\n // motion-dom 12.30's springValue queues an anonymous callback that survives\n // destroy(). Keep the scheduled work owned and cancellable by this Solid scope.\n const start = () => {\n if (disposed) return\n value.stop()\n const from = parseFloat(String(value.get()))\n const to = parseFloat(String(target))\n if (from === to) return\n value.start((onComplete) => new JSAnimation({\n keyframes: [from, to],\n velocity: value.getVelocity(),\n type: \"spring\",\n restDelta: 0.001,\n restSpeed: 0.01,\n ...options,\n onUpdate: (latest) => setter(parse(latest)),\n onComplete,\n }))\n }\n value.attach((latest, set) => {\n target = latest\n setter = set\n frame.postRender(start)\n }, stop)\n const unsubscribe = isMotionValue(source)\n ? source.on(\"change\", (latest) => value.set(parse(latest)))\n : undefined\n\n value.on(\"destroy\", () => {\n disposed = true\n unsubscribe?.()\n stop()\n })\n onCleanup(() => value.destroy())\n\n return value\n}\n","import type { MotionValue, MotionValueEventCallbacks } from \"motion-dom\"\nimport { onCleanup } from \"solid-js\"\n\n/** Subscribe during setup and unsubscribe when the Solid owner is disposed. */\nexport function useMotionValueEvent<V, EventName extends keyof MotionValueEventCallbacks<V>>(\n value: MotionValue<V>,\n event: EventName,\n callback: MotionValueEventCallbacks<V>[EventName],\n) {\n onCleanup(value.on(event, callback))\n}\n","import { cancelFrame, frame, type MotionValue } from \"motion-dom\"\nimport { onCleanup } from \"solid-js\"\nimport { useMotionValue } from \"./use-motion-value\"\nimport { useMotionValueEvent } from \"./use-motion-value-event\"\n\n/** Track velocity, including its return to zero after the source stops changing. */\nexport function useVelocity(value: MotionValue<number>): MotionValue<number> {\n const velocity = useMotionValue(value.getVelocity())\n const update = () => {\n const latest = value.getVelocity()\n velocity.set(latest)\n if (latest) frame.update(update)\n }\n\n useMotionValueEvent(value, \"change\", () => frame.update(update, false, true))\n onCleanup(() => cancelFrame(update))\n return velocity\n}\n","import { createSignal, onCleanup, type Accessor } from \"solid-js\"\n\n/**\n * Reactive device preference. Read as `shouldReduceMotion()` in tracked code.\n * Returns null on the server or when matchMedia is unavailable.\n */\nexport function useReducedMotion(): Accessor<boolean | null> {\n if (typeof window === \"undefined\" || !window.matchMedia) return () => null\n\n const media = window.matchMedia(\"(prefers-reduced-motion: reduce)\")\n const [reduced, setReduced] = createSignal(media.matches)\n const update = () => setReduced(media.matches)\n media.addEventListener(\"change\", update)\n onCleanup(() => media.removeEventListener(\"change\", update))\n return reduced\n}\n","import type { DOMKeyframesDefinition } from \"motion-dom\"\n\nexport function isDOMKeyframes(keyframes: unknown): keyframes is DOMKeyframesDefinition {\n return typeof keyframes === \"object\" && !Array.isArray(keyframes)\n}\n","import type { AnimationScope, DOMKeyframesDefinition, SelectorCache } from \"motion-dom\"\nimport { resolveElements } from \"motion-dom\"\nimport type { ObjectTarget } from \"../sequence/types\"\nimport { isDOMKeyframes } from \"../utils/is-dom-keyframes\"\n\nexport function resolveSubjects<O extends {}>(\n subject: string | Element | Element[] | NodeListOf<Element> | O | O[] | null | undefined,\n keyframes: DOMKeyframesDefinition | ObjectTarget<O>,\n scope?: AnimationScope,\n selectorCache?: SelectorCache,\n) {\n if (subject == null) {\n return []\n }\n\n if (typeof subject === \"string\" && isDOMKeyframes(keyframes)) {\n return resolveElements(subject, scope, selectorCache)\n } else if (subject instanceof NodeList) {\n return Array.from(subject)\n } else if (Array.isArray(subject)) {\n return subject.filter((s) => s != null)\n } else {\n return [subject]\n }\n}\n","export function calculateRepeatDuration(duration: number, repeat: number, _repeatDelay: number): number {\n return duration * (repeat + 1)\n}\n","import type { SequenceTime } from \"../types\"\n\nexport function calcNextTime(current: number, next: SequenceTime, prev: number, labels: Map<string, number>): number {\n if (typeof next === \"number\") {\n return next\n } else if (next.startsWith(\"-\") || next.startsWith(\"+\")) {\n return Math.max(0, current + parseFloat(next))\n } else if (next === \"<\") {\n return prev\n } else if (next.startsWith(\"<\")) {\n return Math.max(0, prev + parseFloat(next.slice(1)))\n } else {\n return labels.get(next) ?? current\n }\n}\n","import { mixNumber, UnresolvedValueKeyframe } from \"motion-dom\"\nimport { Easing, getEasingForSegment, removeItem } from \"motion-utils\"\nimport type { ValueSequence } from \"../types\"\n\nexport function eraseKeyframes(sequence: ValueSequence, startTime: number, endTime: number): void {\n for (let i = 0; i < sequence.length; i++) {\n const keyframe = sequence[i]\n\n if (keyframe.at > startTime && keyframe.at < endTime) {\n removeItem(sequence, keyframe)\n i--\n }\n }\n}\n\nexport function addKeyframes(\n sequence: ValueSequence,\n keyframes: UnresolvedValueKeyframe[],\n easing: Easing | Easing[],\n offset: number[],\n startTime: number,\n endTime: number,\n): void {\n eraseKeyframes(sequence, startTime, endTime)\n\n for (let i = 0; i < keyframes.length; i++) {\n sequence.push({\n value: keyframes[i],\n at: mixNumber(startTime, endTime, offset[i]),\n easing: getEasingForSegment(easing, i),\n })\n }\n}\n","export function normalizeTimes(times: number[], repeat: number): void {\n for (let i = 0; i < times.length; i++) {\n times[i] = times[i] / (repeat + 1)\n }\n}\n","import type { AbsoluteKeyframe } from \"../types\"\n\nexport function compareByTime(a: AbsoluteKeyframe, b: AbsoluteKeyframe): number {\n if (a.at === b.at) {\n if (a.value === null) return 1\n if (b.value === null) return -1\n return 0\n } else {\n return a.at - b.at\n }\n}\n","import {\n AnimationScope,\n createGeneratorEasing,\n defaultOffset,\n DOMKeyframesDefinition,\n AnimationOptions as DynamicAnimationOptions,\n fillOffset,\n GeneratorFactory,\n isGenerator,\n isMotionValue,\n Transition,\n UnresolvedValueKeyframe,\n type AnyResolvedKeyframe,\n type MotionValue,\n} from \"motion-dom\"\nimport { Easing, getEasingForSegment, invariant, progress, secondsToMilliseconds } from \"motion-utils\"\nimport { resolveSubjects } from \"../animate/resolve-subjects\"\nimport {\n AnimationSequence,\n At,\n ResolvedAnimationDefinitions,\n SequenceMap,\n SequenceOptions,\n ValueSequence,\n} from \"./types\"\nimport { calculateRepeatDuration } from \"./utils/calc-repeat-duration\"\nimport { calcNextTime } from \"./utils/calc-time\"\nimport { addKeyframes } from \"./utils/edit\"\nimport { normalizeTimes } from \"./utils/normalize-times\"\nimport { compareByTime } from \"./utils/sort\"\n\nconst defaultSegmentEasing = \"easeInOut\"\nconst MAX_REPEAT = 20\n\nexport function createAnimationsFromSequence(\n sequence: AnimationSequence,\n { defaultTransition = {}, ...sequenceTransition }: SequenceOptions = {},\n scope?: AnimationScope,\n generators?: { [key: string]: GeneratorFactory },\n): ResolvedAnimationDefinitions {\n const defaultDuration = defaultTransition.duration || 0.3\n const animationDefinitions: ResolvedAnimationDefinitions = new Map()\n const sequences = new Map<Element | MotionValue, SequenceMap>()\n const elementCache = {}\n const timeLabels = new Map<string, number>()\n\n let prevTime = 0\n let currentTime = 0\n let totalDuration = 0\n\n for (let i = 0; i < sequence.length; i++) {\n const segment = sequence[i]\n\n if (typeof segment === \"string\") {\n timeLabels.set(segment, currentTime)\n continue\n } else if (!Array.isArray(segment)) {\n timeLabels.set(segment.name, calcNextTime(currentTime, segment.at, prevTime, timeLabels))\n continue\n }\n\n let [subject, keyframes, transition = {}] = segment\n\n if (transition.at !== undefined) {\n currentTime = calcNextTime(currentTime, transition.at, prevTime, timeLabels)\n }\n\n let maxDuration = 0\n\n const resolveValueSequence = (\n valueKeyframes: UnresolvedValueKeyframe | UnresolvedValueKeyframe[],\n valueTransition: Transition | DynamicAnimationOptions,\n valueSequence: ValueSequence,\n elementIndex = 0,\n numSubjects = 0,\n ) => {\n const valueKeyframesAsList = keyframesAsList(valueKeyframes)\n const {\n delay = 0,\n times = defaultOffset(valueKeyframesAsList),\n type = defaultTransition.type || \"keyframes\",\n repeat,\n repeatType,\n repeatDelay = 0,\n ...remainingTransition\n } = valueTransition\n let { ease = defaultTransition.ease || \"easeOut\", duration } = valueTransition\n\n const calculatedDelay = typeof delay === \"function\" ? delay(elementIndex, numSubjects) : delay\n\n const numKeyframes = valueKeyframesAsList.length\n const createGenerator = isGenerator(type) ? type : generators?.[type || \"keyframes\"]\n\n if (numKeyframes <= 2 && createGenerator) {\n let absoluteDelta = 100\n if (numKeyframes === 2 && isNumberKeyframesArray(valueKeyframesAsList)) {\n const delta = valueKeyframesAsList[1] - valueKeyframesAsList[0]\n absoluteDelta = Math.abs(delta)\n }\n\n const springTransition = {\n ...defaultTransition,\n ...remainingTransition,\n }\n if (duration !== undefined) {\n springTransition.duration = secondsToMilliseconds(duration)\n }\n\n const springEasing = createGeneratorEasing(springTransition, absoluteDelta, createGenerator)\n\n ease = springEasing.ease\n duration = springEasing.duration\n }\n\n duration = duration ?? defaultDuration\n\n const startTime = currentTime + calculatedDelay\n\n if (times.length === 1 && times[0] === 0) {\n times[1] = 1\n }\n\n const remainder = times.length - valueKeyframesAsList.length\n remainder > 0 && fillOffset(times, remainder)\n\n valueKeyframesAsList.length === 1 && valueKeyframesAsList.unshift(null)\n\n if (repeat) {\n invariant(repeat < MAX_REPEAT, \"Repeat count too high, must be less than 20\", \"repeat-count-high\")\n\n duration = calculateRepeatDuration(duration ?? defaultDuration, repeat, repeatDelay)\n\n const originalKeyframes = [...valueKeyframesAsList]\n const originalTimes = [...times]\n ease = Array.isArray(ease) ? [...ease] : [ease]\n const originalEase = [...ease]\n\n for (let repeatIndex = 0; repeatIndex < repeat; repeatIndex++) {\n valueKeyframesAsList.push(...originalKeyframes)\n\n for (let keyframeIndex = 0; keyframeIndex < originalKeyframes.length; keyframeIndex++) {\n times.push(originalTimes[keyframeIndex] + (repeatIndex + 1))\n ease.push(keyframeIndex === 0 ? \"linear\" : getEasingForSegment(originalEase, keyframeIndex - 1))\n }\n }\n\n normalizeTimes(times, repeat)\n }\n\n const targetTime = startTime + (duration ?? defaultDuration)\n\n addKeyframes(valueSequence, valueKeyframesAsList, ease as Easing | Easing[], times, startTime, targetTime)\n\n maxDuration = Math.max(calculatedDelay + duration, maxDuration)\n totalDuration = Math.max(targetTime, totalDuration)\n }\n\n if (isMotionValue(subject)) {\n const subjectSequence = getSubjectSequence(subject, sequences)\n resolveValueSequence(keyframes as AnyResolvedKeyframe, transition, getValueSequence(\"default\", subjectSequence))\n } else {\n const subjects = resolveSubjects(subject, keyframes as DOMKeyframesDefinition, scope, elementCache)\n\n const numSubjects = subjects.length\n\n for (let subjectIndex = 0; subjectIndex < numSubjects; subjectIndex++) {\n keyframes = keyframes as DOMKeyframesDefinition\n transition = transition as DynamicAnimationOptions\n\n const thisSubject = subjects[subjectIndex]\n const subjectSequence = getSubjectSequence(thisSubject, sequences)\n\n for (const key in keyframes) {\n resolveValueSequence(\n keyframes[key as keyof typeof keyframes] as UnresolvedValueKeyframe,\n getValueTransition(transition, key),\n getValueSequence(key, subjectSequence),\n subjectIndex,\n numSubjects,\n )\n }\n }\n }\n\n prevTime = currentTime\n currentTime += maxDuration\n }\n\n sequences.forEach((valueSequences, element) => {\n for (const key in valueSequences) {\n const valueSequence = valueSequences[key]\n valueSequence.sort(compareByTime)\n\n const keyframes: UnresolvedValueKeyframe[] = []\n const valueOffset: number[] = []\n const valueEasing: Easing[] = []\n\n for (let i = 0; i < valueSequence.length; i++) {\n const { at, value, easing } = valueSequence[i]\n keyframes.push(value)\n valueOffset.push(progress(0, totalDuration, at))\n valueEasing.push(easing || \"easeOut\")\n }\n\n if (valueOffset[0] !== 0) {\n valueOffset.unshift(0)\n keyframes.unshift(keyframes[0])\n valueEasing.unshift(defaultSegmentEasing)\n }\n\n if (valueOffset[valueOffset.length - 1] !== 1) {\n valueOffset.push(1)\n keyframes.push(null)\n }\n\n if (!animationDefinitions.has(element)) {\n animationDefinitions.set(element, {\n keyframes: {},\n transition: {},\n })\n }\n\n const definition = animationDefinitions.get(element)!\n definition.keyframes[key] = keyframes\n\n const { type: _type, ...remainingDefaultTransition } = defaultTransition\n definition.transition[key] = {\n ...remainingDefaultTransition,\n duration: totalDuration,\n ease: valueEasing,\n times: valueOffset,\n ...sequenceTransition,\n }\n }\n })\n\n return animationDefinitions\n}\n\nfunction getSubjectSequence<O extends {}>(\n subject: Element | MotionValue | O,\n sequences: Map<Element | MotionValue | O, SequenceMap>,\n): SequenceMap {\n !sequences.has(subject) && sequences.set(subject, {})\n return sequences.get(subject)!\n}\n\nfunction getValueSequence(name: string, sequences: SequenceMap): ValueSequence {\n if (!sequences[name]) sequences[name] = []\n return sequences[name]\n}\n\nfunction keyframesAsList(keyframes: UnresolvedValueKeyframe | UnresolvedValueKeyframe[]): UnresolvedValueKeyframe[] {\n return Array.isArray(keyframes) ? keyframes : [keyframes]\n}\n\nexport function getValueTransition(transition: DynamicAnimationOptions & At, key: string): DynamicAnimationOptions {\n return transition && (transition as any)[key]\n ? {\n ...transition,\n ...((transition as any)[key] as Transition),\n }\n : { ...transition }\n}\n\nconst isNumber = (keyframe: unknown) => typeof keyframe === \"number\"\nconst isNumberKeyframesArray = (keyframes: UnresolvedValueKeyframe[]): keyframes is number[] =>\n keyframes.every(isNumber)\n","import {\n HTMLVisualElement,\n isSVGElement,\n isSVGSVGElement,\n ObjectVisualElement,\n SVGVisualElement,\n visualElementStore,\n} from \"motion-dom\"\n\nexport function createDOMVisualElement(element: HTMLElement | SVGElement) {\n const options = {\n presenceContext: null,\n props: {},\n visualState: {\n renderState: {\n transform: {},\n transformOrigin: {},\n style: {},\n vars: {},\n attrs: {},\n },\n latestValues: {},\n },\n }\n\n const node =\n isSVGElement(element) && !isSVGSVGElement(element)\n ? new SVGVisualElement(options as any)\n : new HTMLVisualElement(options as any)\n\n node.mount(element as any)\n visualElementStore.set(element, node)\n}\n\nexport function createObjectVisualElement(subject: Object) {\n const options = {\n presenceContext: null,\n props: {},\n visualState: {\n renderState: {\n output: {},\n },\n latestValues: {},\n },\n }\n\n const node = new ObjectVisualElement(options as any)\n node.mount(subject as any)\n visualElementStore.set(subject, node)\n}\n","import {\n animateTarget,\n AnimationPlaybackControlsWithThen,\n AnimationScope,\n AnyResolvedKeyframe,\n DOMKeyframesDefinition,\n AnimationOptions as DynamicAnimationOptions,\n ElementOrSelector,\n isMotionValue,\n MotionValue,\n TargetAndTransition,\n UnresolvedValueKeyframe,\n ValueAnimationTransition,\n visualElementStore,\n} from \"motion-dom\"\nimport { invariant } from \"motion-utils\"\nimport type { ObjectTarget } from \"../sequence/types\"\nimport { createDOMVisualElement, createObjectVisualElement } from \"../utils/create-visual-element\"\nimport { isDOMKeyframes } from \"../utils/is-dom-keyframes\"\nimport { resolveSubjects } from \"./resolve-subjects\"\nimport { animateSingleValue } from \"motion-dom\"\n\nexport type AnimationSubject = Element | MotionValue<any> | any\n\nfunction isSingleValue(subject: unknown, keyframes: unknown): subject is MotionValue | AnyResolvedKeyframe {\n return (\n isMotionValue(subject) || typeof subject === \"number\" || (typeof subject === \"string\" && !isDOMKeyframes(keyframes))\n )\n}\n\nexport function animateSubject(\n value: string | MotionValue<string>,\n keyframes: string | UnresolvedValueKeyframe<string>[],\n options?: ValueAnimationTransition<string>,\n): AnimationPlaybackControlsWithThen[]\nexport function animateSubject(\n value: number | MotionValue<number>,\n keyframes: number | UnresolvedValueKeyframe<number>[],\n options?: ValueAnimationTransition<number>,\n): AnimationPlaybackControlsWithThen[]\nexport function animateSubject(\n element: ElementOrSelector,\n keyframes: DOMKeyframesDefinition,\n options?: DynamicAnimationOptions,\n scope?: AnimationScope,\n): AnimationPlaybackControlsWithThen[]\nexport function animateSubject<O extends Object>(\n object: O | O[],\n keyframes: ObjectTarget<O>,\n options?: DynamicAnimationOptions,\n): AnimationPlaybackControlsWithThen[]\nexport function animateSubject<O extends Object>(\n subject: MotionValue<number> | MotionValue<string> | number | string | ElementOrSelector | O | O[],\n keyframes:\n | number\n | string\n | UnresolvedValueKeyframe<number>[]\n | UnresolvedValueKeyframe<string>[]\n | DOMKeyframesDefinition\n | ObjectTarget<O>,\n options?: ValueAnimationTransition<number> | ValueAnimationTransition<string> | DynamicAnimationOptions,\n scope?: AnimationScope,\n): AnimationPlaybackControlsWithThen[] {\n const animations: AnimationPlaybackControlsWithThen[] = []\n\n if (isSingleValue(subject, keyframes)) {\n animations.push(\n animateSingleValue(\n subject,\n isDOMKeyframes(keyframes) ? (keyframes as any).default || keyframes : keyframes,\n options ? (options as any).default || options : options,\n ),\n )\n } else {\n if (subject == null) {\n return animations\n }\n\n const subjects = resolveSubjects(subject, keyframes as DOMKeyframesDefinition, scope)\n\n const numSubjects = subjects.length\n\n invariant(Boolean(numSubjects), \"No valid elements provided.\", \"no-valid-elements\")\n\n for (let i = 0; i < numSubjects; i++) {\n const thisSubject = subjects[i]\n\n const createVisualElement = thisSubject instanceof Element ? createDOMVisualElement : createObjectVisualElement\n\n if (!visualElementStore.has(thisSubject)) {\n createVisualElement(thisSubject as any)\n }\n\n const visualElement = visualElementStore.get(thisSubject)!\n const transition = { ...options }\n\n if (\"delay\" in transition && typeof transition.delay === \"function\") {\n transition.delay = transition.delay(i, numSubjects)\n }\n\n animations.push(...animateTarget(visualElement, { ...(keyframes as {}), transition } as TargetAndTransition, {}))\n }\n }\n\n return animations\n}\n","import type { AnimationPlaybackControlsWithThen, AnimationScope } from \"motion-dom\"\nimport { spring } from \"motion-dom\"\nimport { createAnimationsFromSequence } from \"../sequence/create\"\nimport type { AnimationSequence, SequenceOptions } from \"../sequence/types\"\nimport { animateSubject } from \"./subject\"\n\nexport function animateSequence(sequence: AnimationSequence, options?: SequenceOptions, scope?: AnimationScope) {\n const animations: AnimationPlaybackControlsWithThen[] = []\n\n const animationDefinitions = createAnimationsFromSequence(sequence, options, scope, { spring })\n\n animationDefinitions.forEach(({ keyframes, transition }, subject) => {\n animations.push(...animateSubject(subject, keyframes, transition))\n })\n\n return animations\n}\n","import type {\n AnimationPlaybackControlsWithThen,\n AnimationScope,\n DOMKeyframesDefinition,\n AnimationOptions as DynamicAnimationOptions,\n ElementOrSelector,\n MotionValue,\n UnresolvedValueKeyframe,\n ValueAnimationTransition,\n} from \"motion-dom\"\nimport { GroupAnimationWithThen } from \"motion-dom\"\nimport { removeItem } from \"motion-utils\"\nimport type { AnimationSequence, ObjectTarget, SequenceOptions } from \"../sequence/types\"\nimport { animateSequence } from \"./sequence\"\nimport { animateSubject } from \"./subject\"\n\nfunction isSequence(value: unknown): value is AnimationSequence {\n return Array.isArray(value) && value.some(Array.isArray)\n}\n\ninterface ScopedAnimateOptions {\n scope?: AnimationScope\n reduceMotion?: boolean\n}\n\nexport function createScopedAnimate(options: ScopedAnimateOptions = {}) {\n const { scope, reduceMotion } = options\n\n function scopedAnimate(sequence: AnimationSequence, options?: SequenceOptions): AnimationPlaybackControlsWithThen\n function scopedAnimate(\n value: string | MotionValue<string>,\n keyframes: string | UnresolvedValueKeyframe<string>[],\n options?: ValueAnimationTransition<string>,\n ): AnimationPlaybackControlsWithThen\n function scopedAnimate(\n value: number | MotionValue<number>,\n keyframes: number | UnresolvedValueKeyframe<number>[],\n options?: ValueAnimationTransition<number>,\n ): AnimationPlaybackControlsWithThen\n function scopedAnimate<V extends string | number>(\n value: V | MotionValue<V>,\n keyframes: V | UnresolvedValueKeyframe<V>[],\n options?: ValueAnimationTransition<V>,\n ): AnimationPlaybackControlsWithThen\n function scopedAnimate(\n element: ElementOrSelector,\n keyframes: DOMKeyframesDefinition,\n options?: DynamicAnimationOptions,\n ): AnimationPlaybackControlsWithThen\n function scopedAnimate<O extends {}>(\n object: O | O[],\n keyframes: ObjectTarget<O>,\n options?: DynamicAnimationOptions,\n ): AnimationPlaybackControlsWithThen\n function scopedAnimate<O extends {}>(\n subjectOrSequence:\n | AnimationSequence\n | MotionValue<number>\n | MotionValue<string>\n | number\n | string\n | ElementOrSelector\n | O\n | O[],\n optionsOrKeyframes?:\n | SequenceOptions\n | number\n | string\n | UnresolvedValueKeyframe<number>[]\n | UnresolvedValueKeyframe<string>[]\n | DOMKeyframesDefinition\n | ObjectTarget<O>,\n options?: ValueAnimationTransition<number> | ValueAnimationTransition<string> | DynamicAnimationOptions,\n ): AnimationPlaybackControlsWithThen {\n let animations: AnimationPlaybackControlsWithThen[] = []\n let animationOnComplete: VoidFunction | undefined\n\n if (isSequence(subjectOrSequence)) {\n animations = animateSequence(\n subjectOrSequence,\n reduceMotion !== undefined\n ? { reduceMotion, ...(optionsOrKeyframes as SequenceOptions) }\n : (optionsOrKeyframes as SequenceOptions),\n scope,\n )\n } else {\n const { onComplete, ...rest } = options || {}\n if (typeof onComplete === \"function\") {\n animationOnComplete = onComplete as VoidFunction\n }\n animations = animateSubject(\n subjectOrSequence as ElementOrSelector,\n optionsOrKeyframes as DOMKeyframesDefinition,\n (reduceMotion !== undefined ? { reduceMotion, ...rest } : rest) as DynamicAnimationOptions,\n scope,\n )\n }\n\n const animation = new GroupAnimationWithThen(animations)\n\n if (animationOnComplete) {\n animation.finished.then(animationOnComplete)\n }\n\n if (scope) {\n scope.animations.push(animation)\n animation.finished.then(() => {\n removeItem(scope.animations, animation)\n })\n }\n\n return animation\n }\n\n return scopedAnimate\n}\n\nexport const animate = createScopedAnimate()\n"],"names":["defaultContext","transformPagePoint","p","isStatic","reducedMotion","MotionConfigContext","createContext","MotionConfig","props","parent","useContext","local","contextProps","splitProps","value","_$createComponent","Provider","children","animate","style","isControllingVariants","checkIsControllingVariants","isVariantNode","checkIsVariantNode","event","info","point","timestamp","calcProgress","motionValue","DragGesture","UpstreamDragGesture","isBrowser","window","useVisualState","isSVG","context","presenceContext","config","scrapeMotionValuesFromProps","scrapeSVGMotionValuesFromProps","createRenderState","createSvgRenderState","scrapeHTMLMotionValuesFromProps","createHtmlRenderState","makeVisualState","createMotionComponent","Component","forwardMotionProps","type","preloadedFeatures","createVisualElement","loadFeatures","isSVGComponent","MotionDOMComponent","motionConfig","parentContext","MotionContext","rawPresenceContext","PresenceContext","createMemo","resolved","id","isPresent","initial","custom","onExitComplete","register","ownProps","nextProps","key","getLatestProps","Boolean","createMotionContext","visualState","visualElement","initialPresenceContext","createDomVisualElement","blockInitialAnimation","reducedMotionConfig","skipAnimations","prepareDragProjection","rest","elementProps","latestProps","filtered","filterProps","ref","componentTag","visualProps","resolveSVGProps","latestValues","resolveHTMLProps","onMount","scheduleRenderMicrotask","createEffect","nextPresenceContext","update","updateFeatures","current","animationState","animateChanges","onCleanup","unmount","setRef","instance","mount","depth","removeFromVariantTree","addVariantChild","externalRef","Dynamic","_$mergeProps","component","createMotionComponentWithFeatures","options","featureBundle","componentCache","Map","motionProxy","Proxy","get","target","Reflect","set","motion","m","presenceCounter","autoKeyMap","WeakMap","AnimatePresence","merged","mergeProps","mode","presenceAffectsLayout","others","isInitialRender","didWarn","warnNonFactory","console","warn","when","undefined","currentChild","childrenValue","getChild","length","presenceKey","initialChild","rendered","setRendered","createSignal","on","next","previous","untrack","exiting","filter","child","present","find","defer","For","each","includes","remaining","item","hasExits","some","PresenceChild","childKey","anchorX","root","resolveChildrenList","list","Array","isArray","map","index","getChildKey","presentChildren","presentKeys","allChildren","setAllChildren","equals","exitStatus","setExitStatus","currentKeys","prev","prevExitStatus","nextExitStatus","exitStatusChanged","exitingChildren","forEach","_","delete","has","nextChildren","i","push","isSame","every","allExitsComplete","status","size","isComplete","values","batch","Index","childState","state","newMap","PopChild","container","wasPresent","setStyle","display","now","firstElementChild","rect","getBoundingClientRect","offsetParent","parentRect","left","top","width","right","x","position","height","_el$","_$getNextElement","_tmpl$","_$use","el","_$insert","_$effect","_$p","_$style","presenceId","String","registeredChildren","setRegisteredChildren","childId","allComplete","from","resolvedInitial","PresenceChildContent","directKey","cached","nextKey","usePresence","safeToRemove","useIsPresent","animations"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/components/MotionConfig.tsx","../src/context/MotionContext.ts","../src/context/PresenceContext.ts","../src/context/MotionContext/utils.ts","../src/context/MotionContext/create.ts","../src/render/svg/lowercase-elements.ts","../src/render/dom/is-svg-component.ts","../src/motion/utils/valid-prop.ts","../src/render/dom/filter-props.ts","../src/render/dom/create-visual-element.ts","../src/render/html/utils/create-render-state.ts","../src/render/dom/style.ts","../src/render/html/use-props.ts","../src/render/svg/utils/create-render-state.ts","../src/render/svg/use-props.ts","../src/motion/utils/use-visual-state.ts","../src/motion/features/definitions.ts","../src/motion/features/load-features.ts","../src/motion/features/animation/index.ts","../src/motion/features/animation/exit.ts","../src/motion/features/animations.ts","../src/events/event-info.ts","../src/events/add-pointer-event.ts","../src/utils/get-context-window.ts","../src/utils/is-ref-object.ts","../src/utils/distance.ts","../src/gestures/pan/PanSession.ts","../src/gestures/drag/utils/constraints.ts","../src/gestures/drag/VisualElementDragControls.ts","../src/gestures/drag/index.ts","../src/gestures/pan/index.ts","../src/gestures/hover.ts","../src/gestures/press.ts","../src/gestures/focus.ts","../src/motion/features/gestures.ts","../src/motion/features/feature-bundle.ts","../src/motion/utils/drag-projection.ts","../src/motion/index.tsx","../src/components/AnimatePresence.tsx","../src/value/use-motion-value.ts","../src/value/use-transform.ts","../src/value/use-spring.ts","../src/value/use-motion-value-event.ts","../src/value/use-velocity.ts","../src/utils/use-reduced-motion.ts","../src/animation/utils/is-dom-keyframes.ts","../src/animation/animate/resolve-subjects.ts","../src/animation/sequence/utils/calc-repeat-duration.ts","../src/animation/sequence/utils/calc-time.ts","../src/animation/sequence/utils/edit.ts","../src/animation/sequence/utils/normalize-times.ts","../src/animation/sequence/utils/sort.ts","../src/animation/sequence/create.ts","../src/animation/utils/create-visual-element.ts","../src/animation/animate/subject.ts","../src/animation/animate/sequence.ts","../src/animation/animate/index.ts"],"sourcesContent":["import type { JSX } from \"solid-js\"\nimport { createContext, splitProps, useContext } from \"solid-js\"\nimport type { TransformPoint } from \"motion-utils\"\nimport type { Transition } from \"motion-dom\"\n\nexport type ReducedMotionConfig = \"always\" | \"never\" | \"user\"\n\nexport interface MotionConfigContext {\n transformPagePoint: TransformPoint\n isStatic: boolean\n transition?: Transition\n reducedMotion?: ReducedMotionConfig\n nonce?: string\n skipAnimations?: boolean\n}\n\nconst defaultContext: MotionConfigContext = {\n transformPagePoint: ((p) => p) as TransformPoint,\n isStatic: false,\n reducedMotion: \"never\",\n}\n\nexport const MotionConfigContext = createContext<MotionConfigContext>(defaultContext)\n\nexport function MotionConfig(props: Partial<MotionConfigContext> & { children?: JSX.Element }) {\n const parent = useContext(MotionConfigContext)\n const [local, contextProps] = splitProps(props, [\"children\"])\n const value = { ...parent, ...contextProps }\n return <MotionConfigContext.Provider value={value}>{local.children}</MotionConfigContext.Provider>\n}\n","import { createContext } from \"solid-js\"\nimport type { VisualElement } from \"motion-dom\"\n\nexport interface MotionContextProps<Instance = unknown> {\n visualElement?: VisualElement<Instance>\n initial?: false | string | string[]\n animate?: string | string[]\n}\n\nexport const MotionContext = createContext<MotionContextProps>({})\n","import { createContext, type Accessor } from \"solid-js\"\nimport type { PresenceContextProps as MotionDomPresenceContextProps } from \"motion-dom\"\nimport type { VariantLabels } from \"../motion/types\"\n\nexport type { MotionDomPresenceContextProps as ResolvedPresenceContextProps }\n\nexport interface PresenceContextProps {\n id: Accessor<string>\n isPresent: Accessor<boolean>\n register?: (id: string | number) => () => void\n onExitComplete?: (id: string | number) => void\n initial: Accessor<false | VariantLabels | undefined>\n custom: Accessor<any>\n}\n\nexport const PresenceContext = createContext<PresenceContextProps | null>(null)\n","import { isControllingVariants, isVariantLabel } from \"motion-dom\"\nimport type { MotionProps } from \"../../motion/types\"\nimport type { MotionContextProps } from \"../MotionContext\"\n\nexport function getCurrentTreeVariants(props: MotionProps, context: MotionContextProps): MotionContextProps {\n if (isControllingVariants(props)) {\n const { initial, animate } = props\n return {\n initial: initial === false || isVariantLabel(initial) ? (initial as any) : undefined,\n animate: isVariantLabel(animate) ? animate : undefined,\n }\n }\n\n return props.inherit !== false ? context : {}\n}\n","import { createEffect, createSignal } from \"solid-js\"\nimport type { MotionProps } from \"../../motion/types\"\nimport type { MotionContextProps } from \"../MotionContext\"\nimport { getCurrentTreeVariants } from \"./utils\"\n\nexport function createMotionContext<Instance>(\n props: MotionProps,\n parentContext: MotionContextProps,\n): MotionContextProps<Instance> {\n const [initial, setInitial] = createSignal<MotionContextProps[\"initial\"]>()\n const [animate, setAnimate] = createSignal<MotionContextProps[\"animate\"]>()\n\n createEffect(() => {\n const variants = getCurrentTreeVariants(props, parentContext)\n setInitial(variants.initial)\n setAnimate(variants.animate)\n })\n\n\n return {\n get initial() {\n return initial()\n },\n get animate() {\n return animate()\n },\n }\n}\n","export const lowercaseSVGElements = [\n \"animate\",\n \"circle\",\n \"defs\",\n \"desc\",\n \"ellipse\",\n \"g\",\n \"image\",\n \"line\",\n \"filter\",\n \"marker\",\n \"mask\",\n \"metadata\",\n \"path\",\n \"pattern\",\n \"polygon\",\n \"polyline\",\n \"rect\",\n \"stop\",\n \"switch\",\n \"symbol\",\n \"svg\",\n \"text\",\n \"tspan\",\n \"use\",\n \"view\",\n]\n","import { lowercaseSVGElements } from \"../svg/lowercase-elements\"\n\nexport function isSVGComponent(Component: string | ((props: any) => any)) {\n if (typeof Component !== \"string\" || Component.includes(\"-\")) {\n return false\n }\n\n if (lowercaseSVGElements.indexOf(Component) > -1 || /[A-Z]/u.test(Component)) {\n return true\n }\n\n return false\n}\n","const validMotionProps = new Set<string>([\n \"animate\",\n \"exit\",\n \"variants\",\n \"initial\",\n \"style\",\n \"values\",\n \"transition\",\n \"transformTemplate\",\n \"custom\",\n \"inherit\",\n \"onBeforeLayoutMeasure\",\n \"onAnimationStart\",\n \"onAnimationComplete\",\n \"onUpdate\",\n \"onDragStart\",\n \"onDrag\",\n \"onDragEnd\",\n \"onMeasureDragConstraints\",\n \"onDirectionLock\",\n \"onDragTransitionEnd\",\n \"_dragX\",\n \"_dragY\",\n \"onHoverStart\",\n \"onHoverEnd\",\n \"onViewportEnter\",\n \"onViewportLeave\",\n \"globalTapTarget\",\n \"ignoreStrict\",\n \"viewport\",\n])\n\nexport function isValidMotionProp(key: string) {\n return (\n key.startsWith(\"while\") ||\n (key.startsWith(\"drag\") && key !== \"draggable\") ||\n key.startsWith(\"layout\") ||\n key.startsWith(\"onTap\") ||\n key.startsWith(\"onPan\") ||\n key.startsWith(\"onLayout\") ||\n validMotionProps.has(key)\n )\n}\n","import type { MotionProps } from \"../../motion/types\"\nimport { isValidMotionProp } from \"../../motion/utils/valid-prop\"\n\nexport function filterProps(props: MotionProps, isDom: boolean, forwardMotionProps: boolean) {\n const filteredProps: Record<string, unknown> = {}\n\n for (const key in props) {\n if (key === \"values\" && typeof (props as any).values === \"object\") continue\n\n if (\n !isValidMotionProp(key) ||\n (forwardMotionProps === true && isValidMotionProp(key)) ||\n (!isDom && !isValidMotionProp(key)) ||\n ((props as any).draggable && key.startsWith(\"onDrag\"))\n ) {\n filteredProps[key] = (props as any)[key]\n }\n }\n\n return filteredProps\n}\n","import { HTMLVisualElement, SVGVisualElement } from \"motion-dom\"\nimport { isSVGComponent } from \"./is-svg-component\"\nimport type { CreateVisualElement, VisualElementOptions } from \"../types\"\n\nexport const createDomVisualElement: CreateVisualElement = (\n Component: string | ((props: any) => any),\n options: VisualElementOptions<HTMLElement | SVGElement>,\n) => {\n const isSVG = options.isSVG ?? isSVGComponent(Component)\n\n return isSVG\n ? new SVGVisualElement(options)\n : new HTMLVisualElement(options, {\n allowProjection: Component !== \"svg\",\n })\n}\n","import type { HTMLRenderState } from \"motion-dom\"\n\nexport const createHtmlRenderState = (): HTMLRenderState => ({\n style: {},\n transform: {},\n transformOrigin: {},\n vars: {},\n})\n","// Motion builds CSSStyleDeclaration-shaped objects. Solid applies style objects\n// with setProperty(), which requires CSS property names (including vendor prefixes).\nexport function toSolidStyle(style: Record<string, unknown>) {\n const result: Record<string, unknown> = {}\n for (const key in style) {\n const name = key.startsWith(\"--\")\n ? key\n : key.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`).replace(/^ms-/, \"-ms-\")\n result[name] = style[key]\n }\n return result\n}\n","import { AnyResolvedKeyframe, buildHTMLStyles, isForcedMotionValue, isMotionValue, MotionValue } from \"motion-dom\"\nimport type { MotionProps } from \"../../motion/types\"\nimport type { ResolvedValues } from \"../types\"\nimport { createHtmlRenderState } from \"./utils/create-render-state\"\nimport { toSolidStyle } from \"../dom/style\"\n\nexport function copyRawValuesOnly(\n target: ResolvedValues,\n source: { [key: string]: AnyResolvedKeyframe | MotionValue },\n props: MotionProps,\n) {\n for (const key in source) {\n if (!isMotionValue(source[key]) && !isForcedMotionValue(key, props)) {\n target[key] = source[key] as AnyResolvedKeyframe\n }\n }\n}\n\nfunction resolveInitialMotionValues({ transformTemplate }: MotionProps, visualState: ResolvedValues) {\n const state = createHtmlRenderState()\n buildHTMLStyles(state, visualState, transformTemplate)\n return { ...state.vars, ...state.style }\n}\n\nfunction resolveStyle(props: MotionProps, visualState: ResolvedValues) {\n const styleProp = props.style || {}\n const style: ResolvedValues = {}\n\n copyRawValuesOnly(style, styleProp as any, props)\n Object.assign(style, resolveInitialMotionValues(props, visualState))\n\n return style\n}\n\nexport function resolveHTMLProps(props: MotionProps, visualState: ResolvedValues) {\n const htmlProps: Record<string, unknown> = {}\n const style = resolveStyle(props, visualState)\n\n if (props.drag && (props as any).dragListener !== false) {\n ;(htmlProps as any).draggable = false\n ;(style as any).userSelect = (style as any).WebkitUserSelect = (style as any).WebkitTouchCallout = \"none\"\n ;(style as any).touchAction = props.drag === true ? \"none\" : `pan-${props.drag === \"x\" ? \"y\" : \"x\"}`\n }\n\n if ((props as any).tabIndex === undefined && ((props as any).onTap || (props as any).onTapStart || props.whileTap)) {\n ;(htmlProps as any).tabIndex = 0\n }\n\n ;(htmlProps as any).style = toSolidStyle(style)\n return htmlProps\n}\n","import type { SVGRenderState } from \"motion-dom\"\nimport { createHtmlRenderState } from \"../../html/utils/create-render-state\"\n\nexport const createSvgRenderState = (): SVGRenderState => ({\n ...createHtmlRenderState(),\n attrs: {},\n})\n","import { buildSVGAttrs, isSVGTag } from \"motion-dom\"\nimport type { MotionProps } from \"../../motion/types\"\nimport type { ResolvedValues } from \"../types\"\nimport { copyRawValuesOnly } from \"../html/use-props\"\nimport { createSvgRenderState } from \"./utils/create-render-state\"\nimport { toSolidStyle } from \"../dom/style\"\n\nexport function resolveSVGProps(props: MotionProps, visualState: ResolvedValues, Component: string) {\n const state = createSvgRenderState()\n\n buildSVGAttrs(state, visualState, isSVGTag(Component), props.transformTemplate, props.style)\n\n const visualProps: Record<string, unknown> = {\n ...state.attrs,\n style: { ...state.style },\n }\n\n if (props.style) {\n const rawStyles: Record<string, unknown> = {}\n copyRawValuesOnly(rawStyles as any, props.style as any, props)\n ;(visualProps as any).style = { ...rawStyles, ...(visualProps as any).style }\n }\n\n const pathLength = (visualState as any).pathLength\n const pathSpacing = (visualState as any).pathSpacing\n const pathOffset = (visualState as any).pathOffset\n\n if (pathLength !== undefined) {\n const spacing = pathSpacing ?? 1 - Number(pathLength)\n ;(visualProps as any).pathLength = 1\n ;(visualProps as any)[\"stroke-dasharray\"] = `${pathLength} ${spacing}`\n ;(visualProps as any)[\"stroke-dashoffset\"] = `${-Number(pathOffset ?? 0)}`\n }\n\n visualProps.style = toSolidStyle(visualProps.style as Record<string, unknown>)\n return visualProps\n}\n","import {\n AnyResolvedKeyframe,\n isAnimationControls,\n isControllingVariants as checkIsControllingVariants,\n isVariantNode as checkIsVariantNode,\n ResolvedValues,\n resolveVariantFromProps,\n resolveMotionValue,\n type ScrapeMotionValuesFromProps,\n} from \"motion-dom\"\nimport type { MotionContextProps } from \"../../context/MotionContext\"\nimport type { ResolvedPresenceContextProps } from \"../../context/PresenceContext\"\nimport type { MotionProps } from \"../types\"\n\nexport interface VisualState<Instance, RenderState> {\n renderState: RenderState\n latestValues: ResolvedValues\n onMount?: (instance: Instance) => void\n}\n\nexport interface UseVisualStateConfig<RenderState> {\n scrapeMotionValuesFromProps: ScrapeMotionValuesFromProps\n createRenderState: () => RenderState\n}\n\nfunction makeState<I, RS>(\n { scrapeMotionValuesFromProps, createRenderState }: UseVisualStateConfig<RS>,\n props: MotionProps,\n context: MotionContextProps,\n presenceContext: ResolvedPresenceContextProps | null,\n) {\n const state: VisualState<I, RS> = {\n latestValues: makeLatestValues(props, context, presenceContext, scrapeMotionValuesFromProps),\n renderState: createRenderState(),\n }\n\n return state\n}\n\nfunction makeLatestValues(\n props: MotionProps,\n context: MotionContextProps,\n presenceContext: ResolvedPresenceContextProps | null,\n scrapeMotionValues: ScrapeMotionValuesFromProps,\n) {\n const values: ResolvedValues = {}\n\n const motionValues = scrapeMotionValues(props, {})\n for (const key in motionValues) {\n values[key] = resolveMotionValue(motionValues[key])\n }\n\n let { initial, animate } = props\n const isControllingVariants = checkIsControllingVariants(props)\n const isVariantNode = checkIsVariantNode(props)\n\n if (context && isVariantNode && !isControllingVariants && props.inherit !== false) {\n if (initial === undefined) initial = context.initial\n if (animate === undefined) animate = context.animate\n }\n\n let isInitialAnimationBlocked = presenceContext ? presenceContext.initial === false : false\n isInitialAnimationBlocked = isInitialAnimationBlocked || initial === false\n\n const variantToSet = isInitialAnimationBlocked ? animate : initial\n\n if (variantToSet && typeof variantToSet !== \"boolean\" && !isAnimationControls(variantToSet)) {\n const list = Array.isArray(variantToSet) ? variantToSet : [variantToSet]\n for (let i = 0; i < list.length; i++) {\n const resolved = resolveVariantFromProps(props, list[i] as any)\n if (resolved) {\n const { transitionEnd, transition, ...target } = resolved\n for (const key in target) {\n let valueTarget = target[key as keyof typeof target]\n\n if (Array.isArray(valueTarget)) {\n const index = isInitialAnimationBlocked ? valueTarget.length - 1 : 0\n valueTarget = valueTarget[index] as any\n }\n\n if (valueTarget !== null) {\n values[key] = valueTarget as AnyResolvedKeyframe\n }\n }\n for (const key in transitionEnd) {\n values[key] = transitionEnd[key as keyof typeof transitionEnd] as AnyResolvedKeyframe\n }\n }\n }\n }\n\n return values\n}\n\nexport function makeVisualState<I, RS>(\n config: UseVisualStateConfig<RS>,\n props: MotionProps,\n context: MotionContextProps,\n presenceContext: ResolvedPresenceContextProps | null,\n): VisualState<I, RS> {\n return makeState(config, props, context, presenceContext)\n}\n","import { getFeatureDefinitions, setFeatureDefinitions } from \"motion-dom\"\nimport type { MotionProps } from \"../types\"\n\nconst featureProps = {\n animation: [\"animate\", \"variants\", \"whileHover\", \"whileTap\", \"exit\", \"whileInView\", \"whileFocus\", \"whileDrag\"],\n exit: [\"exit\"],\n drag: [\"drag\", \"dragControls\"],\n focus: [\"whileFocus\"],\n hover: [\"whileHover\", \"onHoverStart\", \"onHoverEnd\"],\n tap: [\"whileTap\", \"onTap\", \"onTapStart\", \"onTapCancel\"],\n pan: [\"onPan\", \"onPanStart\", \"onPanSessionStart\", \"onPanEnd\"],\n inView: [\"whileInView\", \"onViewportEnter\", \"onViewportLeave\"],\n layout: [\"layout\", \"layoutId\"],\n}\n\nlet isInitialized = false\n\nexport function initFeatureDefinitions() {\n if (isInitialized) return\n\n const initialFeatureDefinitions: Record<string, any> = {}\n\n for (const key in featureProps) {\n initialFeatureDefinitions[key] = {\n isEnabled: (props: MotionProps) =>\n featureProps[key as keyof typeof featureProps].some((name: string) => Boolean((props as any)[name])),\n }\n }\n\n setFeatureDefinitions(initialFeatureDefinitions)\n isInitialized = true\n}\n\nexport function getInitializedFeatureDefinitions(): ReturnType<typeof getFeatureDefinitions> {\n initFeatureDefinitions()\n return getFeatureDefinitions()\n}\n","import { setFeatureDefinitions } from \"motion-dom\"\nimport { getInitializedFeatureDefinitions } from \"./definitions\"\n\nexport function loadFeatures(features: Record<string, unknown>) {\n const featureDefinitions = getInitializedFeatureDefinitions() as any\n\n for (const key in features) {\n featureDefinitions[key] = {\n ...featureDefinitions[key],\n ...(features as any)[key],\n }\n }\n\n setFeatureDefinitions(featureDefinitions)\n}\n","import { createAnimationState, Feature, isAnimationControls, type VisualElement } from \"motion-dom\"\n\nexport class AnimationFeature extends Feature<unknown> {\n unmountControls?: () => void\n\n constructor(node: VisualElement) {\n super(node)\n node.animationState ||= createAnimationState(node)\n }\n\n updateAnimationControlsSubscription() {\n const { animate } = this.node.getProps()\n if (isAnimationControls(animate)) {\n this.unmountControls = animate.subscribe(this.node)\n }\n }\n\n mount() {\n this.updateAnimationControlsSubscription()\n }\n\n update() {\n const { animate } = this.node.getProps()\n const { animate: prevAnimate } = this.node.prevProps || {}\n if (animate !== prevAnimate) {\n this.updateAnimationControlsSubscription()\n }\n }\n\n unmount() {\n this.node.animationState?.reset()\n this.unmountControls?.()\n }\n}\n","import { Feature } from \"motion-dom\"\n\nlet id = 0\n\nexport class ExitAnimationFeature extends Feature<unknown> {\n private id: number = id++\n\n update() {\n if (!this.node.presenceContext) return\n\n const { isPresent, onExitComplete } = this.node.presenceContext\n const { isPresent: prevIsPresent } = this.node.prevPresenceContext || {}\n\n if (!this.node.animationState || isPresent === prevIsPresent) {\n return\n }\n\n const exitAnimation = this.node.animationState.setActive(\"exit\", !isPresent)\n\n if (onExitComplete && !isPresent) {\n exitAnimation.then(() => {\n onExitComplete(this.id)\n })\n }\n }\n\n mount() {\n const { register, onExitComplete } = this.node.presenceContext || {}\n\n if (onExitComplete) {\n onExitComplete(this.id)\n }\n\n if (register) {\n this.unmount = register(this.id)\n }\n }\n\n unmount() {}\n}\n","import { AnimationFeature } from \"./animation\"\nimport { ExitAnimationFeature } from \"./animation/exit\"\n\nexport const animations = {\n animation: {\n Feature: AnimationFeature,\n },\n exit: {\n Feature: ExitAnimationFeature,\n },\n}\n","import { EventInfo, isPrimaryPointer } from \"motion-dom\"\n\nexport type EventListenerWithPointInfo = (\n e: PointerEvent,\n info: EventInfo\n) => void\n\nexport function extractEventInfo(event: PointerEvent): EventInfo {\n return {\n point: {\n x: event.pageX,\n y: event.pageY,\n },\n }\n}\n\nexport const addPointerInfo = (\n handler: EventListenerWithPointInfo\n): EventListener => {\n return (event: Event) => {\n const pointer = event as PointerEvent\n if (isPrimaryPointer(pointer)) handler(pointer, extractEventInfo(pointer))\n }\n}\n","import { addDomEvent } from \"motion-dom\"\nimport { addPointerInfo, EventListenerWithPointInfo } from \"./event-info\"\n\nexport function addPointerEvent(\n target: EventTarget,\n eventName: string,\n handler: EventListenerWithPointInfo,\n options?: AddEventListenerOptions\n) {\n return addDomEvent(target, eventName, addPointerInfo(handler), options)\n}\n","import type { VisualElement } from \"motion-dom\"\n\n// Fixes https://github.com/motiondivision/motion/issues/2270\nexport const getContextWindow = ({ current }: VisualElement<Element>) => {\n return current ? current.ownerDocument.defaultView : null\n}\n","import { MutableRefObject } from \"./safe-react-types\"\n\nexport function isRefObject<E = any>(ref: any): ref is MutableRefObject<E> {\n return (\n ref &&\n typeof ref === \"object\" &&\n Object.prototype.hasOwnProperty.call(ref, \"current\")\n )\n}\n","import { Point } from \"motion-utils\"\n\nexport const distance = (a: number, b: number) => Math.abs(a - b)\n\nexport function distance2D(a: Point, b: Point): number {\n // Multi-dimensional\n const xDelta = distance(a.x, b.x)\n const yDelta = distance(a.y, b.y)\n return Math.sqrt(xDelta ** 2 + yDelta ** 2)\n}\n","import type { EventInfo, PanInfo } from \"motion-dom\"\nimport {\n cancelFrame,\n frame,\n frameData,\n isPrimaryPointer,\n time,\n} from \"motion-dom\"\nimport {\n millisecondsToSeconds,\n pipe,\n Point,\n secondsToMilliseconds,\n TransformPoint,\n} from \"motion-utils\"\nimport { addPointerEvent } from \"../../events/add-pointer-event\"\nimport { extractEventInfo } from \"../../events/event-info\"\nimport { distance2D } from \"../../utils/distance\"\n\ntype PanHandler = (event: PointerEvent, info: PanInfo) => void\n\ninterface PanSessionHandlers {\n onSessionStart: PanHandler\n onStart: PanHandler\n onMove: PanHandler\n onEnd: PanHandler\n onSessionEnd: PanHandler\n resumeAnimation: () => void\n}\n\ninterface PanSessionOptions {\n transformPagePoint?: TransformPoint\n dragSnapToOrigin?: boolean | \"x\" | \"y\"\n distanceThreshold?: number\n contextWindow?: (Window & typeof globalThis) | null\n /**\n * Element being dragged. When provided, scroll events on its\n * ancestors and window are compensated so the gesture continues\n * smoothly during scroll.\n */\n element?: HTMLElement | null\n}\n\ninterface TimestampedPoint extends Point {\n timestamp: number\n}\n\nconst overflowStyles = /*#__PURE__*/ new Set([\"auto\", \"scroll\"])\n\n/**\n * @internal\n */\nexport class PanSession {\n /**\n * @internal\n */\n private history: TimestampedPoint[] = []\n\n /**\n * @internal\n */\n private startEvent: PointerEvent | null = null\n\n /**\n * @internal\n */\n private lastMoveEvent: PointerEvent | null = null\n\n /**\n * @internal\n */\n private lastMoveEventInfo: EventInfo | null = null\n\n /**\n * Raw (untransformed) event info, re-transformed each frame\n * so transformPagePoint sees the current parent matrix.\n * @internal\n */\n private lastRawMoveEventInfo: EventInfo | null = null\n\n /**\n * Whether a pointermove has arrived since the last updatePoint.\n * @internal\n */\n private hasPendingMove?: boolean\n\n /**\n * @internal\n */\n private transformPagePoint?: TransformPoint\n\n /**\n * @internal\n */\n private handlers: Partial<PanSessionHandlers> = {}\n\n /**\n * @internal\n */\n private removeListeners: Function = () => {}\n\n /**\n * For determining if an animation should resume after it is interrupted\n *\n * @internal\n */\n private dragSnapToOrigin: boolean | \"x\" | \"y\" = false\n\n /**\n * The distance after which panning should start.\n *\n * @internal\n */\n private distanceThreshold = 3\n\n /**\n * @internal\n */\n private contextWindow: PanSessionOptions[\"contextWindow\"] = window\n\n /**\n * Scroll positions of scrollable ancestors and window.\n * @internal\n */\n private scrollPositions: Map<Element | Window, Point> = new Map()\n\n /**\n * Cleanup function for scroll listeners.\n * @internal\n */\n private removeScrollListeners: (() => void) | null = null\n\n constructor(\n event: PointerEvent,\n handlers: Partial<PanSessionHandlers>,\n {\n transformPagePoint,\n contextWindow = window,\n dragSnapToOrigin = false,\n distanceThreshold = 3,\n element,\n }: PanSessionOptions = {}\n ) {\n // If we have more than one touch, don't start detecting this gesture\n if (!isPrimaryPointer(event)) return\n\n this.dragSnapToOrigin = dragSnapToOrigin\n this.handlers = handlers\n this.transformPagePoint = transformPagePoint\n this.distanceThreshold = distanceThreshold\n this.contextWindow = contextWindow || window\n\n const info = extractEventInfo(event)\n const initialInfo = transformPoint(info, this.transformPagePoint)\n const { point } = initialInfo\n\n const { timestamp } = frameData\n\n this.history = [{ ...point, timestamp }]\n\n const { onSessionStart } = handlers\n onSessionStart &&\n onSessionStart(event, getPanInfo(initialInfo, this.history))\n\n // Listen in the capture phase so a descendant calling\n // stopPropagation() (e.g. in its own pointerup handler) can't\n // prevent the gesture from ending. See #2794.\n const eventOptions = { passive: true, capture: true }\n this.removeListeners = pipe(\n addPointerEvent(\n this.contextWindow,\n \"pointermove\",\n this.handlePointerMove,\n eventOptions\n ),\n addPointerEvent(\n this.contextWindow,\n \"pointerup\",\n this.handlePointerUp,\n eventOptions\n ),\n addPointerEvent(\n this.contextWindow,\n \"pointercancel\",\n this.handlePointerUp,\n eventOptions\n )\n )\n\n // Start scroll tracking if element provided\n if (element) {\n this.startScrollTracking(element)\n }\n }\n\n /**\n * Start tracking scroll on ancestors and window.\n */\n private startScrollTracking(element: HTMLElement): void {\n // Store initial scroll positions for scrollable ancestors\n let current = element.parentElement\n while (current) {\n const style = getComputedStyle(current)\n if (\n overflowStyles.has(style.overflowX) ||\n overflowStyles.has(style.overflowY)\n ) {\n this.scrollPositions.set(current, {\n x: current.scrollLeft,\n y: current.scrollTop,\n })\n }\n current = current.parentElement\n }\n\n // Track window scroll\n this.scrollPositions.set(window, {\n x: window.scrollX,\n y: window.scrollY,\n })\n\n // Capture listener catches element scroll events as they bubble\n window.addEventListener(\"scroll\", this.onElementScroll, {\n capture: true,\n })\n\n // Direct window scroll listener (window scroll doesn't bubble)\n window.addEventListener(\"scroll\", this.onWindowScroll)\n\n this.removeScrollListeners = () => {\n window.removeEventListener(\"scroll\", this.onElementScroll, {\n capture: true,\n })\n window.removeEventListener(\"scroll\", this.onWindowScroll)\n }\n }\n\n private onElementScroll = (event: Event): void => {\n this.handleScroll(event.target as Element)\n }\n\n private onWindowScroll = (): void => {\n this.handleScroll(window)\n }\n\n /**\n * Handle scroll compensation during drag.\n *\n * For element scroll: adjusts history origin since pageX/pageY doesn't change.\n * For window scroll: adjusts lastMoveEventInfo since pageX/pageY would change.\n */\n private handleScroll(target: Element | Window): void {\n const initial = this.scrollPositions.get(target)\n if (!initial) return\n\n const isWindow = target === window\n const current = isWindow\n ? { x: window.scrollX, y: window.scrollY }\n : {\n x: (target as Element).scrollLeft,\n y: (target as Element).scrollTop,\n }\n\n const delta = { x: current.x - initial.x, y: current.y - initial.y }\n if (delta.x === 0 && delta.y === 0) return\n\n if (isWindow) {\n // Window scroll: pageX/pageY changes, so update lastMoveEventInfo\n if (this.lastMoveEventInfo) {\n this.lastMoveEventInfo.point.x += delta.x\n this.lastMoveEventInfo.point.y += delta.y\n }\n } else {\n // Element scroll: pageX/pageY unchanged, so adjust history origin\n if (this.history.length > 0) {\n this.history[0].x -= delta.x\n this.history[0].y -= delta.y\n }\n }\n\n this.scrollPositions.set(target, current)\n frame.update(this.updatePoint, true)\n }\n\n private updatePoint = () => {\n if (!(this.lastMoveEvent && this.lastMoveEventInfo)) return\n this.hasPendingMove = false\n\n // Re-transform raw point through current transformPagePoint so\n // animated parent transforms (e.g. rotation) are picked up each frame\n if (this.lastRawMoveEventInfo) {\n this.lastMoveEventInfo = transformPoint(\n this.lastRawMoveEventInfo,\n this.transformPagePoint\n )\n }\n\n const info = getPanInfo(this.lastMoveEventInfo, this.history)\n const isPanStarted = this.startEvent !== null\n\n // Only start panning if the offset is larger than 3 pixels. If we make it\n // any larger than this we'll want to reset the pointer history\n // on the first update to avoid visual snapping to the cursor.\n const isDistancePastThreshold =\n distance2D(info.offset, { x: 0, y: 0 }) >= this.distanceThreshold\n\n if (!isPanStarted && !isDistancePastThreshold) return\n\n const { point } = info\n this.history.push({ ...point, timestamp: time.now() })\n\n const { onStart, onMove } = this.handlers\n\n if (!isPanStarted) {\n onStart && onStart(this.lastMoveEvent, info)\n this.startEvent = this.lastMoveEvent\n }\n\n onMove && onMove(this.lastMoveEvent, info)\n }\n\n private handlePointerMove = (event: PointerEvent, info: EventInfo) => {\n this.lastMoveEvent = event\n this.lastRawMoveEventInfo = info\n this.lastMoveEventInfo = transformPoint(info, this.transformPagePoint)\n this.hasPendingMove = true\n\n // Throttle mouse move event to once per frame\n frame.update(this.updatePoint, true)\n }\n\n private handlePointerUp = (event: PointerEvent, info: EventInfo) => {\n // Browsers flush a coalesced pointermove immediately before\n // pointerup, so the final move can still be waiting for a frame.\n this.hasPendingMove && this.updatePoint()\n this.end()\n\n const { onEnd, onSessionEnd, resumeAnimation } = this.handlers\n\n // Resume animation if dragSnapToOrigin is set OR if no drag started (user just clicked)\n // This ensures constraint animations continue when interrupted by a click\n if (this.dragSnapToOrigin || !this.startEvent) {\n resumeAnimation && resumeAnimation()\n }\n if (!(this.lastMoveEvent && this.lastMoveEventInfo)) return\n\n const panInfo = getPanInfo(\n event.type === \"pointercancel\"\n ? this.lastMoveEventInfo\n : transformPoint(info, this.transformPagePoint),\n this.history\n )\n\n if (this.startEvent && onEnd) {\n onEnd(event, panInfo)\n }\n\n onSessionEnd && onSessionEnd(event, panInfo)\n }\n\n updateHandlers(handlers: Partial<PanSessionHandlers>) {\n this.handlers = handlers\n }\n\n end() {\n this.removeListeners && this.removeListeners()\n this.removeScrollListeners && this.removeScrollListeners()\n this.scrollPositions.clear()\n cancelFrame(this.updatePoint)\n }\n}\n\nfunction transformPoint(\n info: EventInfo,\n transformPagePoint?: (point: Point) => Point\n) {\n return transformPagePoint ? { point: transformPagePoint(info.point) } : info\n}\n\nfunction subtractPoint(a: Point, b: Point): Point {\n return { x: a.x - b.x, y: a.y - b.y }\n}\n\nfunction getPanInfo({ point }: EventInfo, history: TimestampedPoint[]) {\n return {\n point,\n delta: subtractPoint(point, lastDevicePoint(history)),\n offset: subtractPoint(point, startDevicePoint(history)),\n velocity: getVelocity(history, 0.1),\n }\n}\n\nfunction startDevicePoint(history: TimestampedPoint[]): TimestampedPoint {\n return history[0]\n}\n\nfunction lastDevicePoint(history: TimestampedPoint[]): TimestampedPoint {\n return history[history.length - 1]\n}\n\nfunction getVelocity(history: TimestampedPoint[], timeDelta: number): Point {\n if (history.length < 2) {\n return { x: 0, y: 0 }\n }\n\n let i = history.length - 1\n let timestampedPoint: TimestampedPoint | null = null\n const lastPoint = lastDevicePoint(history)\n while (i >= 0) {\n timestampedPoint = history[i]\n if (\n lastPoint.timestamp - timestampedPoint.timestamp >\n secondsToMilliseconds(timeDelta)\n ) {\n break\n }\n i--\n }\n\n if (!timestampedPoint) {\n return { x: 0, y: 0 }\n }\n\n /**\n * If the selected point is the pointer-down origin (history[0]),\n * there are better movement points available, and the time gap\n * is suspiciously large (>2x timeDelta), use the next point instead.\n * This prevents stale pointer-down points from diluting velocity\n * in hold-then-flick gestures.\n */\n if (\n timestampedPoint === history[0] &&\n history.length > 2 &&\n lastPoint.timestamp - timestampedPoint.timestamp >\n secondsToMilliseconds(timeDelta) * 2\n ) {\n timestampedPoint = history[1]\n }\n\n const seconds = millisecondsToSeconds(\n lastPoint.timestamp - timestampedPoint.timestamp\n )\n if (seconds === 0) {\n return { x: 0, y: 0 }\n }\n\n const currentVelocity = {\n x: (lastPoint.x - timestampedPoint.x) / seconds,\n y: (lastPoint.y - timestampedPoint.y) / seconds,\n }\n\n if (currentVelocity.x === Infinity) {\n currentVelocity.x = 0\n }\n if (currentVelocity.y === Infinity) {\n currentVelocity.y = 0\n }\n\n return currentVelocity\n}\n","import { calcLength, mixNumber, type DragElastic, type ResolvedConstraints } from \"motion-dom\"\nimport {\n Axis,\n BoundingBox,\n Box,\n progress as calcProgress,\n clamp,\n Point,\n} from \"motion-utils\"\n\n/**\n * Apply constraints to a point. These constraints are both physical along an\n * axis, and an elastic factor that determines how much to constrain the point\n * by if it does lie outside the defined parameters.\n */\nexport function applyConstraints(\n point: number,\n { min, max }: Partial<Axis>,\n elastic?: Axis\n): number {\n if (min !== undefined && point < min) {\n // If we have a min point defined, and this is outside of that, constrain\n point = elastic\n ? mixNumber(min, point, elastic.min)\n : Math.max(point, min)\n } else if (max !== undefined && point > max) {\n // If we have a max point defined, and this is outside of that, constrain\n point = elastic\n ? mixNumber(max, point, elastic.max)\n : Math.min(point, max)\n }\n\n return point\n}\n\n/**\n * Calculates a min projection point based on a pointer, pointer progress\n * within the drag target, and constraints.\n *\n * For instance if an element was 100px width, we were dragging from 0.25\n * along this axis, the pointer is at 200px, and there were no constraints,\n * we would calculate a min projection point of 175px.\n */\nexport function calcConstrainedMinPoint(\n point: number,\n length: number,\n progress: number,\n constraints?: Partial<Axis>,\n elastic?: Axis\n): number {\n // Calculate a min point for this axis and apply it to the current pointer\n const min = point - length * progress\n\n return constraints ? applyConstraints(min, constraints, elastic) : min\n}\n\n/**\n * Calculate constraints in terms of the viewport when defined relatively to the\n * measured axis. This is measured from the nearest edge, so a max constraint of 200\n * on an axis with a max value of 300 would return a constraint of 500 - axis length\n */\nexport function calcRelativeAxisConstraints(\n axis: Axis,\n min?: number,\n max?: number\n): Partial<Axis> {\n return {\n min: min !== undefined ? axis.min + min : undefined,\n max:\n max !== undefined\n ? axis.max + max - (axis.max - axis.min)\n : undefined,\n }\n}\n\n/**\n * Calculate constraints in terms of the viewport when\n * defined relatively to the measured bounding box.\n */\nexport function calcRelativeConstraints(\n layoutBox: Box,\n { top, left, bottom, right }: Partial<BoundingBox>\n): ResolvedConstraints {\n return {\n x: calcRelativeAxisConstraints(layoutBox.x, left, right),\n y: calcRelativeAxisConstraints(layoutBox.y, top, bottom),\n }\n}\n\n/**\n * Calculate viewport constraints when defined as another viewport-relative axis\n */\nexport function calcViewportAxisConstraints(\n layoutAxis: Axis,\n constraintsAxis: Axis\n) {\n let min = constraintsAxis.min - layoutAxis.min\n let max = constraintsAxis.max - layoutAxis.max\n\n // If the constraints axis is actually smaller than the layout axis then we can\n // flip the constraints\n if (\n constraintsAxis.max - constraintsAxis.min <\n layoutAxis.max - layoutAxis.min\n ) {\n ;[min, max] = [max, min]\n }\n\n return { min, max }\n}\n\n/**\n * Calculate viewport constraints when defined as another viewport-relative box\n */\nexport function calcViewportConstraints(layoutBox: Box, constraintsBox: Box) {\n return {\n x: calcViewportAxisConstraints(layoutBox.x, constraintsBox.x),\n y: calcViewportAxisConstraints(layoutBox.y, constraintsBox.y),\n }\n}\n\n/**\n * Calculate a transform origin relative to the source axis, between 0-1, that results\n * in an aesthetically pleasing scale/transform needed to project from source to target.\n */\nexport function calcOrigin(source: Axis, target: Axis): number {\n let origin = 0.5\n const sourceLength = calcLength(source)\n const targetLength = calcLength(target)\n\n if (targetLength > sourceLength) {\n origin = calcProgress(target.min, target.max - sourceLength, source.min)\n } else if (sourceLength > targetLength) {\n origin = calcProgress(source.min, source.max - targetLength, target.min)\n }\n\n return clamp(0, 1, origin)\n}\n\n/**\n * Calculate the relative progress of one constraints box relative to another.\n * Imagine a page scroll bar. At the top, this would return 0, at the bottom, 1.\n * Anywhere in-between, a value between 0 and 1.\n *\n * This also handles flipped constraints, for instance a draggable container within\n * a smaller viewport like a scrollable view.\n */\nexport function calcProgressWithinConstraints(\n layoutBox: Box,\n constraintsBox: Box\n): Point {\n return {\n x: calcOrigin(layoutBox.x, constraintsBox.x),\n y: calcOrigin(layoutBox.y, constraintsBox.y),\n }\n}\n\n/**\n * Calculate the an axis position based on two axes and a progress value.\n */\nexport function calcPositionFromProgress(\n axis: Axis,\n constraints: Axis,\n progress: number\n): Axis {\n const axisLength = axis.max - axis.min\n const min = mixNumber(\n constraints.min,\n constraints.max - axisLength,\n progress\n )\n return { min, max: min + axisLength }\n}\n\n/**\n * Rebase the calculated viewport constraints relative to the layout.min point.\n */\nexport function rebaseAxisConstraints(\n layout: Axis,\n constraints: Partial<Axis>\n): Partial<Axis> {\n const relativeConstraints: Partial<Axis> = {}\n\n if (constraints.min !== undefined) {\n relativeConstraints.min = constraints.min - layout.min\n }\n\n if (constraints.max !== undefined) {\n relativeConstraints.max = constraints.max - layout.min\n }\n\n return relativeConstraints\n}\n\nexport const defaultElastic = 0.35\n/**\n * Accepts a dragElastic prop and returns resolved elastic values for each axis.\n */\nexport function resolveDragElastic(\n dragElastic: DragElastic = defaultElastic\n): Box {\n if (dragElastic === false) {\n dragElastic = 0\n } else if (dragElastic === true) {\n dragElastic = defaultElastic\n }\n\n return {\n x: resolveAxisElastic(dragElastic, \"left\", \"right\"),\n y: resolveAxisElastic(dragElastic, \"top\", \"bottom\"),\n }\n}\n\nexport function resolveAxisElastic(\n dragElastic: DragElastic,\n minLabel: string,\n maxLabel: string\n): Axis {\n return {\n min: resolvePointElastic(dragElastic, minLabel),\n max: resolvePointElastic(dragElastic, maxLabel),\n }\n}\n\nexport function resolvePointElastic(\n dragElastic: DragElastic,\n label: string\n): number {\n return typeof dragElastic === \"number\"\n ? dragElastic\n : dragElastic[label as keyof typeof dragElastic] || 0\n}\n","import {\n addValueToWillChange,\n animateMotionValue,\n calcLength,\n convertBoundingBoxToBox,\n convertBoxToBoundingBox,\n createBox,\n eachAxis,\n frame,\n isElementTextInput,\n cancelFrame,\n measurePageBox,\n mixNumber,\n PanInfo,\n percent,\n ResolvedConstraints,\n resize,\n setDragLock,\n Transition,\n type VisualElement,\n} from \"motion-dom\"\nimport { Axis, Point, invariant } from \"motion-utils\"\nimport { addDomEvent, type LayoutUpdateData } from \"motion-dom\"\nimport { addPointerEvent } from \"../../events/add-pointer-event\"\nimport { MotionProps } from \"../../motion/types\"\nimport { getContextWindow } from \"../../utils/get-context-window\"\nimport { isRefObject } from \"../../utils/is-ref-object\"\nimport { PanSession } from \"../pan/PanSession\"\nimport {\n applyConstraints,\n calcOrigin,\n calcRelativeConstraints,\n calcViewportConstraints,\n defaultElastic,\n rebaseAxisConstraints,\n resolveDragElastic,\n} from \"./utils/constraints\"\n\nexport const elementDragControls = new WeakMap<\n VisualElement,\n VisualElementDragControls\n>()\n\nexport interface DragControlOptions {\n /**\n * This distance after which dragging starts and a direction is locked in.\n *\n * @public\n */\n distanceThreshold?: number\n\n /**\n * Whether to immediately snap to the cursor when dragging starts.\n *\n * @public\n */\n snapToCursor?: boolean\n}\n\ntype DragDirection = \"x\" | \"y\"\n\nexport class VisualElementDragControls {\n private visualElement: VisualElement<HTMLElement>\n\n private panSession?: PanSession\n\n private openDragLock: VoidFunction | null = null\n\n isDragging = false\n private currentDirection: DragDirection | null = null\n\n private originPoint: Point = { x: 0, y: 0 }\n\n /**\n * The permitted boundaries of travel, in pixels.\n */\n private constraints: ResolvedConstraints | false = false\n\n private hasMutatedConstraints = false\n\n /**\n * The per-axis resolved elastic values.\n */\n private elastic = createBox()\n\n /**\n * The latest pointer event. Used as fallback when the `cancel` and `stop` functions are called without arguments.\n */\n private latestPointerEvent: PointerEvent | null = null\n\n /**\n * The latest pan info. Used as fallback when the `cancel` and `stop` functions are called without arguments.\n */\n private latestPanInfo: PanInfo | null = null\n\n constructor(visualElement: VisualElement<HTMLElement>) {\n this.visualElement = visualElement\n }\n\n start(\n originEvent: PointerEvent,\n { snapToCursor = false, distanceThreshold }: DragControlOptions = {}\n ) {\n /**\n * Don't start dragging if this component is exiting\n */\n const { presenceContext } = this.visualElement\n if (presenceContext && presenceContext.isPresent === false) return\n\n const onSessionStart = (event: PointerEvent) => {\n if (snapToCursor) this.snapToCursor(event)\n this.stopAnimation()\n }\n\n const onStart = (event: PointerEvent, info: PanInfo) => {\n // Attempt to grab the global drag gesture lock - maybe make this part of PanSession\n const { drag, dragPropagation, onDragStart } = this.getProps()\n\n if (drag && !dragPropagation) {\n if (this.openDragLock) this.openDragLock()\n\n this.openDragLock = setDragLock(drag)\n\n // If we don 't have the lock, don't start dragging\n if (!this.openDragLock) return\n }\n\n this.latestPointerEvent = event\n this.latestPanInfo = info\n this.isDragging = true\n\n this.currentDirection = null\n\n this.resolveConstraints()\n\n if (this.visualElement.projection) {\n this.visualElement.projection.isAnimationBlocked = true\n this.visualElement.projection.target = undefined\n }\n\n /**\n * Record gesture origin and pointer offset\n */\n eachAxis((axis) => {\n let current = this.getAxisMotionValue(axis).get() || 0\n\n /**\n * If the MotionValue is a percentage value convert to px\n */\n if (percent.test(current)) {\n const { projection } = this.visualElement\n\n if (projection && projection.layout) {\n const measuredAxis = projection.layout.layoutBox[axis]\n\n if (measuredAxis) {\n const length = calcLength(measuredAxis)\n current = length * (parseFloat(current) / 100)\n }\n }\n }\n\n this.originPoint[axis] = current\n })\n\n // Fire onDragStart event\n if (onDragStart) {\n frame.update(() => onDragStart(event, info), false, true)\n }\n\n addValueToWillChange(this.visualElement, \"transform\")\n\n const { animationState } = this.visualElement\n animationState && animationState.setActive(\"whileDrag\", true)\n }\n\n const onMove = (event: PointerEvent, info: PanInfo) => {\n this.latestPointerEvent = event\n this.latestPanInfo = info\n\n const {\n dragPropagation,\n dragDirectionLock,\n onDirectionLock,\n onDrag,\n } = this.getProps()\n\n // If we didn't successfully receive the gesture lock, early return.\n if (!dragPropagation && !this.openDragLock) return\n\n const { offset } = info\n // Attempt to detect drag direction if directionLock is true\n if (dragDirectionLock && this.currentDirection === null) {\n this.currentDirection = getCurrentDirection(offset)\n\n // If we've successfully set a direction, notify listener\n if (this.currentDirection !== null) {\n onDirectionLock && onDirectionLock(this.currentDirection)\n }\n\n return\n }\n\n // Update each point with the latest position\n this.updateAxis(\"x\", info.point, offset)\n this.updateAxis(\"y\", info.point, offset)\n\n /**\n * Ideally we would leave the renderer to fire naturally at the end of\n * this frame but if the element is about to change layout as the result\n * of a re-render we want to ensure the browser can read the latest\n * bounding box to ensure the pointer and element don't fall out of sync.\n */\n this.visualElement.render()\n\n /**\n * This must fire after the render call as it might trigger a state\n * change which itself might trigger a layout update.\n */\n if (onDrag) {\n frame.update(() => onDrag(event, info), false, true)\n }\n }\n\n const onSessionEnd = (event: PointerEvent, info: PanInfo) => {\n this.latestPointerEvent = event\n this.latestPanInfo = info\n\n this.stop(event, info)\n\n this.latestPointerEvent = null\n this.latestPanInfo = null\n }\n\n const resumeAnimation = () => {\n const { dragSnapToOrigin: snap } = this.getProps()\n if (snap || this.constraints) {\n this.startAnimation({ x: 0, y: 0 })\n }\n }\n\n const { dragSnapToOrigin } = this.getProps()\n this.panSession = new PanSession(\n originEvent,\n {\n onSessionStart,\n onStart,\n onMove,\n onSessionEnd,\n resumeAnimation,\n },\n {\n transformPagePoint: this.visualElement.getTransformPagePoint(),\n dragSnapToOrigin,\n distanceThreshold,\n contextWindow: getContextWindow(this.visualElement),\n element: this.visualElement.current,\n }\n )\n }\n\n /**\n * @internal\n */\n stop(event?: PointerEvent, panInfo?: PanInfo) {\n const finalEvent = event || this.latestPointerEvent\n const finalPanInfo = panInfo || this.latestPanInfo\n\n const isDragging = this.isDragging\n this.cancel()\n if (!isDragging || !finalPanInfo || !finalEvent) return\n\n const { velocity } = finalPanInfo\n this.startAnimation(velocity)\n\n const { onDragEnd } = this.getProps()\n if (onDragEnd) {\n frame.postRender(() => onDragEnd(finalEvent, finalPanInfo))\n }\n }\n\n /**\n * @internal\n */\n cancel() {\n this.isDragging = false\n\n const { projection, animationState } = this.visualElement\n\n if (projection) {\n projection.isAnimationBlocked = false\n }\n\n this.endPanSession()\n\n const { dragPropagation } = this.getProps()\n\n if (!dragPropagation && this.openDragLock) {\n this.openDragLock()\n this.openDragLock = null\n }\n\n animationState && animationState.setActive(\"whileDrag\", false)\n }\n\n /**\n * Clean up the pan session without modifying other drag state.\n * This is used during unmount to ensure event listeners are removed\n * without affecting projection animations or drag locks.\n * @internal\n */\n endPanSession() {\n this.panSession && this.panSession.end()\n this.panSession = undefined\n }\n\n /** Final owner disposal, including any release inertia on external values. */\n dispose() {\n this.cancel()\n this.stopAnimation()\n elementDragControls.delete(this.visualElement)\n }\n\n private updateAxis(axis: DragDirection, _point: Point, offset?: Point) {\n const { drag } = this.getProps()\n\n // If we're not dragging this axis, do an early return.\n if (!offset || !shouldDrag(axis, drag, this.currentDirection)) return\n\n const axisValue = this.getAxisMotionValue(axis)\n let next = this.originPoint[axis] + offset[axis]\n\n // Apply constraints\n if (this.constraints && this.constraints[axis]) {\n next = applyConstraints(\n next,\n this.constraints[axis],\n this.elastic[axis]\n )\n }\n\n axisValue.set(next)\n }\n\n private resolveConstraints() {\n const { dragConstraints, dragElastic } = this.getProps()\n\n const layout =\n this.visualElement.projection &&\n !this.visualElement.projection.layout\n ? this.visualElement.projection.measure(false)\n : this.visualElement.projection?.layout\n\n const prevConstraints = this.constraints\n\n if (dragConstraints && isRefObject(dragConstraints)) {\n if (!this.constraints) {\n this.constraints = this.resolveRefConstraints()\n }\n } else {\n if (dragConstraints && layout) {\n this.constraints = calcRelativeConstraints(\n layout.layoutBox,\n dragConstraints\n )\n } else {\n this.constraints = false\n }\n }\n\n this.elastic = resolveDragElastic(dragElastic)\n\n /**\n * If we're outputting to external MotionValues, we want to rebase the measured constraints\n * from viewport-relative to component-relative. This only applies to relative (non-ref)\n * constraints, as ref-based constraints from calcViewportConstraints are already in the\n * correct coordinate space for the motion value transform offset.\n */\n if (\n prevConstraints !== this.constraints &&\n !isRefObject(dragConstraints) &&\n layout &&\n this.constraints &&\n !this.hasMutatedConstraints\n ) {\n eachAxis((axis) => {\n if (\n this.constraints !== false &&\n this.getAxisMotionValue(axis)\n ) {\n this.constraints[axis] = rebaseAxisConstraints(\n layout.layoutBox[axis],\n this.constraints[axis]\n )\n }\n })\n }\n }\n\n private resolveRefConstraints() {\n const { dragConstraints: constraints, onMeasureDragConstraints } =\n this.getProps()\n if (!constraints || !isRefObject(constraints)) return false\n\n const constraintsElement = constraints.current as HTMLElement\n\n invariant(\n constraintsElement !== null,\n \"If `dragConstraints` is set as a React ref, that ref must be passed to another component's `ref` prop.\",\n \"drag-constraints-ref\"\n )\n\n const { projection } = this.visualElement\n\n // TODO\n if (!projection || !projection.layout) return false\n\n /**\n * Refresh the root scroll offset so the constraint's viewport box\n * translates to correct page coordinates. The scroll captured at\n * drag mount can be stale if the document was scrolled afterwards —\n * e.g. via the browser restoring scroll on refresh, or an ancestor\n * layout effect running after this element's mount (#2829).\n *\n * Clear the cached scroll first so `updateScroll` bypasses its\n * per-animationId cache and re-reads the live value.\n */\n if (projection.root) {\n projection.root.scroll = undefined\n projection.root.updateScroll()\n }\n\n const constraintsBox = measurePageBox(\n constraintsElement,\n projection.root!,\n this.visualElement.getTransformPagePoint()\n )\n\n let measuredConstraints = calcViewportConstraints(\n projection.layout.layoutBox,\n constraintsBox\n )\n\n /**\n * If there's an onMeasureDragConstraints listener we call it and\n * if different constraints are returned, set constraints to that\n */\n if (onMeasureDragConstraints) {\n const userConstraints = onMeasureDragConstraints(\n convertBoxToBoundingBox(measuredConstraints)\n )\n\n this.hasMutatedConstraints = !!userConstraints\n\n if (userConstraints) {\n measuredConstraints = convertBoundingBoxToBox(userConstraints)\n }\n }\n\n return measuredConstraints\n }\n\n private startAnimation(velocity: Point) {\n const {\n drag,\n dragMomentum,\n dragElastic,\n dragTransition,\n dragSnapToOrigin,\n onDragTransitionEnd,\n } = this.getProps()\n\n const constraints: Partial<ResolvedConstraints> = this.constraints || {}\n\n const momentumAnimations = eachAxis((axis) => {\n if (!shouldDrag(axis, drag, this.currentDirection)) {\n return\n }\n\n let transition = (constraints && constraints[axis]) || {}\n\n if (\n dragSnapToOrigin === true ||\n (dragSnapToOrigin as unknown) === axis\n )\n transition = { min: 0, max: 0 }\n\n /**\n * Overdamp the boundary spring if `dragElastic` is disabled. There's still a frame\n * of spring animations so we should look into adding a disable spring option to `inertia`.\n * We could do something here where we affect the `bounceStiffness` and `bounceDamping`\n * using the value of `dragElastic`.\n */\n const bounceStiffness = dragElastic ? 200 : 1000000\n const bounceDamping = dragElastic ? 40 : 10000000\n\n const inertia: Transition = {\n type: \"inertia\",\n velocity: dragMomentum ? velocity[axis] : 0,\n bounceStiffness,\n bounceDamping,\n timeConstant: 750,\n restDelta: 1,\n restSpeed: 10,\n ...dragTransition,\n ...transition,\n }\n\n // If we're not animating on an externally-provided `MotionValue` we can use the\n // component's animation controls which will handle interactions with whileHover (etc),\n // otherwise we just have to animate the `MotionValue` itself.\n return this.startAxisValueAnimation(axis, inertia)\n })\n\n // Run all animations and then resolve the new drag constraints.\n return Promise.all(momentumAnimations).then(onDragTransitionEnd)\n }\n\n private startAxisValueAnimation(\n axis: DragDirection,\n transition: Transition\n ) {\n const axisValue = this.getAxisMotionValue(axis)\n\n addValueToWillChange(this.visualElement, axis)\n\n return axisValue.start(\n animateMotionValue(\n axis,\n axisValue,\n 0,\n transition,\n this.visualElement,\n false\n )\n )\n }\n\n private stopAnimation() {\n eachAxis((axis) => this.getAxisMotionValue(axis).stop())\n }\n\n /**\n * Drag works differently depending on which props are provided.\n *\n * - If _dragX and _dragY are provided, we output the gesture delta directly to those motion values.\n * - Otherwise, we apply the delta to the x/y motion values.\n */\n private getAxisMotionValue(axis: DragDirection) {\n const dragKey =\n `_drag${axis.toUpperCase()}` as `_drag${Uppercase<DragDirection>}`\n const props = this.visualElement.getProps()\n const externalMotionValue = props[dragKey]\n\n return externalMotionValue\n ? externalMotionValue\n : this.visualElement.getValue(\n axis,\n this.visualElement.latestValues[axis] ?? 0\n )\n }\n\n /**\n * Measure the live box - projection.layout may or may not include the\n * drag transform, depending on when it was measured.\n */\n private snapToCursor({ clientX, clientY }: PointerEvent) {\n const { drag } = this.getProps()\n const point = { x: clientX, y: clientY }\n const cursor =\n this.visualElement.getTransformPagePoint()?.(point) || point\n const box = this.visualElement.measureViewportBox()\n\n eachAxis((axis) => {\n if (!shouldDrag(axis, drag, this.currentDirection)) return\n\n const axisValue = this.getAxisMotionValue(axis)\n const { min, max } = box[axis]\n\n axisValue.set(\n (axisValue.get() || 0) + cursor[axis] - mixNumber(min, max, 0.5)\n )\n })\n }\n\n /**\n * When the viewport resizes we want to check if the measured constraints\n * have changed and, if so, reposition the element within those new constraints\n * relative to where it was before the resize.\n */\n scalePositionWithinConstraints() {\n if (!this.visualElement.current) return\n\n const { drag, dragConstraints } = this.getProps()\n const { projection } = this.visualElement\n if (!isRefObject(dragConstraints) || !projection || !this.constraints)\n return\n\n /**\n * Stop current animations as there can be visual glitching if we try to do\n * this mid-animation\n */\n this.stopAnimation()\n\n /**\n * Record the relative position of the dragged element relative to the\n * constraints box and save as a progress value.\n */\n const constraints = this.constraints as ResolvedConstraints\n const boxProgress = { x: 0, y: 0 }\n eachAxis((axis) => {\n const latest = this.getAxisMotionValue(axis).get()\n boxProgress[axis] = calcOrigin(\n { min: latest, max: latest },\n constraints[axis] as Axis\n )\n })\n\n /**\n * Update the layout of this element and resolve the latest drag constraints\n */\n const { transformTemplate } = this.visualElement.getProps()\n this.visualElement.current.style.transform = transformTemplate\n ? transformTemplate({}, \"\")\n : \"none\"\n projection.root && projection.root.updateScroll()\n projection.updateLayout()\n\n /**\n * Reset constraints so resolveConstraints() will recalculate them\n * with the freshly measured layout rather than returning the cached value.\n */\n this.constraints = false\n this.resolveConstraints()\n\n /**\n * For each axis, calculate the current progress of the layout axis\n * within the new constraints.\n */\n eachAxis((axis) => {\n const axisValue = this.getAxisMotionValue(axis)\n\n /**\n * An element resting at its origin has no offset to preserve,\n * and re-projecting 0 into the new constraints would move it.\n */\n if (!shouldDrag(axis, drag, null) || !axisValue.get()) return\n\n /**\n * Calculate a new transform based on the previous box progress\n */\n const { min, max } = (this.constraints as ResolvedConstraints)[\n axis\n ] as Axis\n axisValue.set(mixNumber(min, max, boxProgress[axis]))\n })\n\n /**\n * Flush the updated transform to the DOM synchronously to prevent\n * a visual flash at the element's CSS layout position (0,0) when\n * the transform was stripped for measurement.\n */\n this.visualElement.render()\n }\n\n addListeners() {\n if (!this.visualElement.current) return\n elementDragControls.set(this.visualElement, this)\n const element = this.visualElement.current\n\n /**\n * Attach a pointerdown event listener on this DOM element to initiate drag tracking.\n */\n const stopPointerListener = addPointerEvent(\n element,\n \"pointerdown\",\n (event) => {\n const { drag, dragListener = true } = this.getProps()\n const target = event.target as Element\n\n /**\n * Only block drag if clicking on a text input child element\n * (input, textarea, select, contenteditable) where users might\n * want to select text or interact with the control.\n *\n * Buttons and links don't block drag since they don't have\n * click-and-move actions of their own.\n */\n const isClickingTextInputChild =\n target !== element && isElementTextInput(target)\n\n if (drag && dragListener && !isClickingTextInputChild) {\n this.start(event)\n }\n }\n )\n\n /**\n * If using ref-based constraints, observe both the draggable element\n * and the constraint container for size changes via ResizeObserver.\n * Setup is deferred because dragConstraints.current is null when\n * addListeners first runs (React hasn't committed the ref yet).\n */\n let stopResizeObservers: VoidFunction | undefined\n\n const measureDragConstraints = () => {\n const { dragConstraints } = this.getProps()\n if (isRefObject(dragConstraints) && dragConstraints.current) {\n this.constraints = this.resolveRefConstraints()\n\n if (!stopResizeObservers) {\n stopResizeObservers = startResizeObservers(\n element,\n dragConstraints.current as HTMLElement,\n () => this.scalePositionWithinConstraints()\n )\n }\n }\n }\n\n const { projection } = this.visualElement\n\n const stopMeasureLayoutListener = projection!.addEventListener(\n \"measure\",\n measureDragConstraints\n )\n\n if (projection && !projection!.layout) {\n projection.root && projection.root.updateScroll()\n projection.updateLayout()\n }\n\n frame.read(measureDragConstraints)\n\n /**\n * Attach a window resize listener to scale the draggable target within its defined\n * constraints as the window resizes.\n */\n const stopResizeListener = addDomEvent(window, \"resize\", () =>\n this.scalePositionWithinConstraints()\n )\n\n /**\n * If the element's layout changes, calculate the delta and apply that to\n * the drag gesture's origin point.\n */\n const stopLayoutUpdateListener = projection!.addEventListener(\n \"didUpdate\",\n (({ delta, hasLayoutChanged }: LayoutUpdateData) => {\n if (this.isDragging && hasLayoutChanged) {\n eachAxis((axis) => {\n const motionValue = this.getAxisMotionValue(axis)\n if (!motionValue) return\n\n this.originPoint[axis] += delta[axis].translate\n motionValue.set(\n motionValue.get() + delta[axis].translate\n )\n })\n\n this.visualElement.render()\n }\n }) as any\n )\n\n return () => {\n cancelFrame(measureDragConstraints)\n stopResizeListener()\n stopPointerListener()\n stopMeasureLayoutListener()\n stopLayoutUpdateListener && stopLayoutUpdateListener()\n stopResizeObservers && stopResizeObservers()\n }\n }\n\n getProps(): MotionProps {\n const props = this.visualElement.getProps()\n const {\n drag = false,\n dragDirectionLock = false,\n dragPropagation = false,\n dragConstraints = false,\n dragElastic = defaultElastic,\n dragMomentum = true,\n } = props\n return {\n ...props,\n drag,\n dragDirectionLock,\n dragPropagation,\n dragConstraints,\n dragElastic,\n dragMomentum,\n }\n }\n}\n\nfunction skipFirstCall(callback: VoidFunction): VoidFunction {\n let isFirst = true\n return () => {\n if (isFirst) {\n isFirst = false\n return\n }\n callback()\n }\n}\n\nfunction startResizeObservers(\n element: HTMLElement,\n constraintsElement: HTMLElement,\n onResize: VoidFunction\n): VoidFunction {\n const stopElement = resize(element, skipFirstCall(onResize))\n const stopContainer = resize(constraintsElement, skipFirstCall(onResize))\n return () => {\n stopElement()\n stopContainer()\n }\n}\n\nfunction shouldDrag(\n direction: DragDirection,\n drag: boolean | DragDirection | undefined,\n currentDirection: null | DragDirection\n) {\n return (\n (drag === true || drag === direction) &&\n (currentDirection === null || currentDirection === direction)\n )\n}\n\n/**\n * Based on an x/y offset determine the current drag direction. If both axis' offsets are lower\n * than the provided threshold, return `null`.\n *\n * @param offset - The x/y offset from origin.\n * @param lockThreshold - (Optional) - the minimum absolute offset before we can determine a drag direction.\n */\nfunction getCurrentDirection(\n offset: Point,\n lockThreshold = 10\n): DragDirection | null {\n let direction: DragDirection | null = null\n\n if (Math.abs(offset.y) > lockThreshold) {\n direction = \"y\"\n } else if (Math.abs(offset.x) > lockThreshold) {\n direction = \"x\"\n }\n\n return direction\n}\n\nexport function expectsResolvedDragConstraints({\n dragConstraints,\n onMeasureDragConstraints,\n}: MotionProps) {\n return isRefObject(dragConstraints) && !!onMeasureDragConstraints\n}\n","import { Feature, type VisualElement } from \"motion-dom\"\nimport { noop } from \"motion-utils\"\nimport { VisualElementDragControls } from \"./VisualElementDragControls\"\n\nexport class DragGesture extends Feature<HTMLElement> {\n controls: VisualElementDragControls\n\n removeGroupControls: Function = noop\n removeListeners: Function = noop\n\n constructor(node: VisualElement<HTMLElement>) {\n super(node)\n this.controls = new VisualElementDragControls(node)\n }\n\n mount() {\n // If we've been provided a DragControls for manual control over the drag gesture,\n // subscribe this component to it on mount.\n const { dragControls } = this.node.getProps()\n\n if (dragControls) {\n this.removeGroupControls = dragControls.subscribe(this.controls)\n }\n\n this.removeListeners = this.controls.addListeners() || noop\n }\n\n update() {\n const { dragControls } = this.node.getProps()\n const { dragControls: prevDragControls } = this.node.prevProps || {}\n\n if (dragControls !== prevDragControls) {\n this.removeGroupControls()\n if (dragControls) {\n this.removeGroupControls = dragControls.subscribe(this.controls)\n }\n }\n }\n\n unmount() {\n this.removeGroupControls()\n this.removeListeners()\n /**\n * In React 19, during list reorder reconciliation, components may\n * briefly unmount and remount while the drag is still active. If we're\n * actively dragging, we should NOT end the pan session - it will\n * continue tracking pointer events via its window-level listeners.\n *\n * The pan session will be properly cleaned up when:\n * 1. The drag ends naturally (pointerup/pointercancel)\n * 2. The component is truly removed from the DOM\n */\n if (!this.controls.isDragging) {\n this.controls.endPanSession()\n }\n }\n}\n","import { Feature, frame, type PanInfo } from \"motion-dom\"\nimport { noop } from \"motion-utils\"\nimport { addPointerEvent } from \"../../events/add-pointer-event\"\nimport { getContextWindow } from \"../../utils/get-context-window\"\nimport { PanSession } from \"./PanSession\"\n\ntype PanEventHandler = (event: PointerEvent, info: PanInfo) => void\nconst asyncHandler =\n (handler?: PanEventHandler) => (event: PointerEvent, info: PanInfo) => {\n if (handler) {\n frame.update(() => handler(event, info), false, true)\n }\n }\n\nexport class PanGesture extends Feature<Element> {\n private session?: PanSession\n\n private removePointerDownListener: Function = noop\n\n onPointerDown(pointerDownEvent: PointerEvent) {\n this.session = new PanSession(\n pointerDownEvent,\n this.createPanHandlers(),\n {\n transformPagePoint: this.node.getTransformPagePoint(),\n contextWindow: getContextWindow(this.node),\n }\n )\n }\n\n createPanHandlers() {\n const { onPanSessionStart, onPanStart, onPan, onPanEnd } =\n this.node.getProps()\n\n return {\n onSessionStart: asyncHandler(onPanSessionStart),\n onStart: asyncHandler(onPanStart),\n onMove: asyncHandler(onPan),\n onEnd: (event: PointerEvent, info: PanInfo) => {\n delete this.session\n if (onPanEnd) {\n frame.postRender(() => onPanEnd(event, info))\n }\n },\n }\n }\n\n mount() {\n this.removePointerDownListener = addPointerEvent(\n this.node.current!,\n \"pointerdown\",\n (event: PointerEvent) => this.onPointerDown(event)\n )\n }\n\n update() {\n this.session && this.session.updateHandlers(this.createPanHandlers())\n }\n\n unmount() {\n this.removePointerDownListener()\n this.session && this.session.end()\n }\n}\n","import { Feature, frame, hover, type VisualElement } from \"motion-dom\"\nimport { extractEventInfo } from \"../events/event-info\"\n\nfunction handleHoverEvent(\n node: VisualElement<Element>,\n event: PointerEvent,\n lifecycle: \"Start\" | \"End\"\n) {\n const { props } = node\n\n if (node.animationState && props.whileHover) {\n node.animationState.setActive(\"whileHover\", lifecycle === \"Start\")\n }\n\n const eventName = (\"onHover\" + lifecycle) as \"onHoverStart\" | \"onHoverEnd\"\n const callback = props[eventName]\n if (callback) {\n frame.postRender(() => callback(event, extractEventInfo(event)))\n }\n}\n\nexport class HoverGesture extends Feature<Element> {\n mount() {\n const { current } = this.node\n if (!current) return\n\n this.unmount = hover(current, (_element, startEvent) => {\n handleHoverEvent(this.node, startEvent, \"Start\")\n\n return (endEvent) => handleHoverEvent(this.node, endEvent, \"End\")\n })\n }\n\n unmount() {}\n}\n","import { Feature, frame, press, type VisualElement } from \"motion-dom\"\nimport { extractEventInfo } from \"../events/event-info\"\n\nfunction handlePressEvent(\n node: VisualElement<Element>,\n event: PointerEvent,\n lifecycle: \"Start\" | \"End\" | \"Cancel\"\n) {\n const { props } = node\n\n if (node.current instanceof HTMLButtonElement && node.current.disabled) {\n return\n }\n\n if (node.animationState && props.whileTap) {\n node.animationState.setActive(\"whileTap\", lifecycle === \"Start\")\n }\n\n const eventName = (\"onTap\" + (lifecycle === \"End\" ? \"\" : lifecycle)) as\n | \"onTapStart\"\n | \"onTap\"\n | \"onTapCancel\"\n\n const callback = props[eventName]\n if (callback) {\n frame.postRender(() => callback(event, extractEventInfo(event)))\n }\n}\n\nexport class PressGesture extends Feature<Element> {\n mount() {\n const { current } = this.node\n if (!current) return\n\n const { globalTapTarget, propagate } = this.node.props\n\n this.unmount = press(\n current,\n (_element, startEvent) => {\n handlePressEvent(this.node, startEvent, \"Start\")\n\n return (endEvent, { success }) =>\n handlePressEvent(\n this.node,\n endEvent,\n success ? \"End\" : \"Cancel\"\n )\n },\n {\n useGlobalTarget: globalTapTarget,\n stopPropagation: propagate?.tap === false,\n }\n )\n }\n\n unmount() {}\n}\n","import { Feature, addDomEvent } from \"motion-dom\"\nimport { pipe } from \"motion-utils\"\n\nexport class FocusGesture extends Feature<Element> {\n private isActive = false\n\n onFocus() {\n let isFocusVisible = false\n\n /**\n * If this element doesn't match focus-visible then don't\n * apply whileHover. But, if matches throws that focus-visible\n * is not a valid selector then in that browser outline styles will be applied\n * to the element by default and we want to match that behaviour with whileFocus.\n */\n try {\n isFocusVisible = this.node.current!.matches(\":focus-visible\")\n } catch (e) {\n isFocusVisible = true\n }\n\n if (!isFocusVisible || !this.node.animationState) return\n\n this.node.animationState.setActive(\"whileFocus\", true)\n this.isActive = true\n }\n\n onBlur() {\n if (!this.isActive || !this.node.animationState) return\n this.node.animationState.setActive(\"whileFocus\", false)\n this.isActive = false\n }\n\n mount() {\n this.unmount = pipe(\n addDomEvent(this.node.current!, \"focus\", () => this.onFocus()),\n addDomEvent(this.node.current!, \"blur\", () => this.onBlur())\n ) as VoidFunction\n }\n\n unmount() {}\n}\n","import { DragGesture as UpstreamDragGesture } from \"../../gestures/drag\"\nimport { PanGesture } from \"../../gestures/pan\"\nimport { HoverGesture } from \"../../gestures/hover\"\nimport { PressGesture } from \"../../gestures/press\"\nimport { FocusGesture } from \"../../gestures/focus\"\n\nclass DragGesture extends UpstreamDragGesture {\n unmount() {\n // Solid disposal is final. Always release the window listeners and global\n // drag lock, including when an element is removed in the middle of a drag.\n this.controls.dispose()\n super.unmount()\n }\n}\n\nexport const gestures = {\n drag: { Feature: DragGesture },\n pan: { Feature: PanGesture },\n hover: { Feature: HoverGesture },\n tap: { Feature: PressGesture },\n focus: { Feature: FocusGesture },\n}\n","import { animations } from \"./animations\"\nimport { gestures } from \"./gestures\"\n\nexport const featureBundle = {\n ...animations,\n ...gestures,\n}\n","import { HTMLProjectionNode, type VisualElement } from \"motion-dom\"\nimport type { MotionProps } from \"../types\"\n\nexport function prepareDragProjection(node: VisualElement<HTMLElement | SVGElement>, props: MotionProps) {\n if (node.projection || !(props.drag || props.dragControls)) return\n // Drag constraints use Motion's geometry measurement, without enabling layout\n // animation or shared layout IDs. Non-draggable elements pay no projection cost.\n node.projection = new HTMLProjectionNode(node.latestValues, node.parent?.projection)\n node.projection.setOptions({\n visualElement: node,\n alwaysMeasureLayout: true,\n layout: false,\n animationType: \"both\",\n })\n if (node.current) node.projection.mount(node.current)\n}\n","import { createEffect, createMemo, onCleanup, onMount, splitProps, useContext } from \"solid-js\"\nimport { Dynamic } from \"solid-js/web\"\nimport { scrapeHTMLMotionValuesFromProps, scrapeSVGMotionValuesFromProps, type VisualElement } from \"motion-dom\"\nimport { MotionConfigContext } from \"../components/MotionConfig\"\nimport { MotionContext } from \"../context/MotionContext\"\nimport { PresenceContext } from \"../context/PresenceContext\"\nimport { createMotionContext } from \"../context/MotionContext/create\"\nimport { isSVGComponent } from \"../render/dom/is-svg-component\"\nimport { filterProps } from \"../render/dom/filter-props\"\nimport { createDomVisualElement } from \"../render/dom/create-visual-element\"\nimport { resolveHTMLProps } from \"../render/html/use-props\"\nimport { resolveSVGProps } from \"../render/svg/use-props\"\nimport { createHtmlRenderState } from \"../render/html/utils/create-render-state\"\nimport { createSvgRenderState } from \"../render/svg/utils/create-render-state\"\nimport type { CreateVisualElement } from \"../render/types\"\nimport { makeVisualState } from \"./utils/use-visual-state\"\nimport type { MotionProps } from \"./types\"\nimport { loadFeatures } from \"./features/load-features\"\nimport { featureBundle } from \"./features/feature-bundle\"\nimport { prepareDragProjection } from \"./utils/drag-projection\"\n\nexport interface MotionComponentOptions {\n forwardMotionProps?: boolean\n type?: \"html\" | \"svg\"\n}\n\nconst isBrowser = typeof window !== \"undefined\"\n\nfunction useVisualState(\n isSVG: boolean,\n props: MotionProps,\n context: ReturnType<typeof createMotionContext>,\n presenceContext: any,\n) {\n const config = isSVG\n ? {\n scrapeMotionValuesFromProps: scrapeSVGMotionValuesFromProps,\n createRenderState: createSvgRenderState,\n }\n : {\n scrapeMotionValuesFromProps: scrapeHTMLMotionValuesFromProps,\n createRenderState: createHtmlRenderState,\n }\n\n return makeVisualState(config, props, context, presenceContext)\n}\n\nexport function createMotionComponent(\n Component: string | ((props: any) => any),\n { forwardMotionProps = false, type }: MotionComponentOptions = {},\n preloadedFeatures?: Record<string, unknown>,\n createVisualElement?: CreateVisualElement,\n) {\n if (preloadedFeatures) {\n loadFeatures(preloadedFeatures as any)\n }\n\n const isSVG = type ? type === \"svg\" : isSVGComponent(Component)\n\n return function MotionDOMComponent(props: MotionProps & { ref?: any }) {\n const motionConfig = useContext(MotionConfigContext)\n const parentContext = useContext(MotionContext)\n const rawPresenceContext = useContext(PresenceContext)\n const presenceContext = createMemo(() => {\n if (!rawPresenceContext) return null\n\n const resolved = {\n id: rawPresenceContext.id(),\n isPresent: rawPresenceContext.isPresent(),\n initial: rawPresenceContext.initial(),\n custom: rawPresenceContext.custom(),\n onExitComplete: rawPresenceContext.onExitComplete,\n register: rawPresenceContext.register ?? (() => () => {}),\n }\n\n return resolved\n })\n\n const ownProps = createMemo(() => {\n const nextProps: MotionProps = {}\n for (const key in props) {\n // Solid children are lazy factories, not inert React element values.\n // Reading them here creates a second subtree on each animation update,\n // overwriting refs with detached nodes. Resolve them only in the provider.\n if (key === \"children\") continue\n ;(nextProps as any)[key] = (props as any)[key]\n }\n return nextProps\n })\n // Config feeds the visual element, but must not render as DOM attributes.\n const getLatestProps = createMemo((): MotionProps => ({ ...motionConfig, ...ownProps() }))\n\n const isStatic = createMemo(() => Boolean((getLatestProps() as any).isStatic))\n\n const context = createMotionContext(props, parentContext)\n const visualState = useVisualState(isSVG, props, context, presenceContext())\n\n let visualElement: VisualElement<HTMLElement | SVGElement> | undefined\n\n const initialPresenceContext = presenceContext()\n\n if (!isStatic() && isBrowser) {\n visualElement = (createVisualElement || createDomVisualElement)(Component, {\n visualState,\n parent: parentContext.visualElement,\n props: getLatestProps(),\n presenceContext: initialPresenceContext,\n blockInitialAnimation: initialPresenceContext ? initialPresenceContext.initial === false : false,\n reducedMotionConfig: motionConfig.reducedMotion,\n skipAnimations: motionConfig.skipAnimations,\n isSVG,\n })\n if (visualElement) prepareDragProjection(visualElement, getLatestProps())\n }\n\n context.visualElement = visualElement\n\n const [local, rest] = splitProps(props as any, [\"ref\", \"children\"])\n const elementProps = createMemo(() => {\n const latestProps = getLatestProps()\n const filtered = filterProps(ownProps(), typeof Component === \"string\", forwardMotionProps) as Record<\n string,\n unknown\n >\n delete filtered.children\n delete filtered.ref\n const componentTag = typeof Component === \"string\" ? Component : \"svg\"\n const visualProps = isSVG\n ? resolveSVGProps(latestProps, visualState.latestValues, componentTag)\n : resolveHTMLProps(latestProps, visualState.latestValues)\n\n return { ...filtered, ...visualProps }\n })\n\n onMount(() => {\n if (!visualElement) return\n visualElement.scheduleRenderMicrotask()\n })\n\n createEffect(() => {\n if (!visualElement) return\n const nextProps = getLatestProps()\n const nextPresenceContext = presenceContext()\n visualElement.update(nextProps, nextPresenceContext)\n prepareDragProjection(visualElement, nextProps)\n visualElement.updateFeatures()\n if (visualElement.current && visualElement.animationState) {\n visualElement.animationState.animateChanges()\n }\n })\n\n onCleanup(() => {\n visualElement?.unmount()\n })\n\n const setRef = (instance: HTMLElement | SVGElement | null) => {\n if (!instance) return\n visualElement?.mount(instance)\n if (visualElement && parentContext.visualElement) {\n const parent = parentContext.visualElement as any\n ;(visualElement as any).parent = parent\n if (typeof parent.depth === \"number\") {\n ;(visualElement as any).depth = parent.depth + 1\n }\n if ((visualElement as any).isVariantNode && !(visualElement as any).isControllingVariants) {\n ;(visualElement as any).removeFromVariantTree?.()\n if (typeof parent.addVariantChild === \"function\") {\n ;(visualElement as any).removeFromVariantTree = parent.addVariantChild(visualElement as any)\n }\n }\n }\n visualState.onMount?.(instance as any)\n\n const externalRef = local.ref\n if (typeof externalRef === \"function\") {\n externalRef(instance)\n } else if (externalRef && typeof externalRef === \"object\") {\n ;(externalRef as any).current = instance\n }\n }\n\n return (\n <MotionContext.Provider value={context}>\n <Dynamic component={Component as any} {...elementProps()} ref={setRef}>\n {local.children}\n </Dynamic>\n </MotionContext.Provider>\n )\n }\n}\n\nexport function createMotionComponentWithFeatures(\n Component: string | ((props: any) => any),\n options?: MotionComponentOptions,\n) {\n return createMotionComponent(Component, options, featureBundle, createDomVisualElement)\n}\n\ntype MotionFactory = {\n create: typeof createMotionComponentWithFeatures\n <T extends string | ((props: any) => any)>(\n component: T,\n options?: MotionComponentOptions,\n ): (props: MotionProps & { ref?: any }) => any\n [key: string]: any\n}\n\nconst componentCache = new Map<string, ReturnType<typeof createMotionComponentWithFeatures>>()\nconst motionProxy = new Proxy(createMotionComponentWithFeatures as MotionFactory, {\n get: (target, key) => {\n if (key === \"create\") return createMotionComponentWithFeatures\n if (typeof key !== \"string\") return Reflect.get(target, key)\n let component = componentCache.get(key)\n if (!component) {\n component = createMotionComponentWithFeatures(key)\n componentCache.set(key, component)\n }\n return component\n },\n})\n\nexport const motion = motionProxy\nexport const m = motionProxy\n","import { batch, children, createEffect, createMemo, createSignal, For, Index, mergeProps, on, onMount, splitProps, untrack, useContext } from \"solid-js\"\nimport { PresenceContext } from \"../context/PresenceContext\"\nimport type { AnimatePresenceProps, PresenceChildState, ChildKey } from \"./AnimatePresenceTypes.js\"\n\nlet presenceCounter = 0\nlet autoKeyIndex = 0\nconst autoKeyMap = new WeakMap<object, ChildKey>()\n\n/**\n * AnimatePresence for Solid.js\n * \n * Enables exit animations by keeping elements in the DOM\n * until their exit animations complete.\n * \n * @example\n * ```solid\n * <AnimatePresence>\n * {show() && (\n * <motion.div\n * exit={{ opacity: 0 }}\n * />\n * )}\n * </AnimatePresence>\n * ```\n */\nexport function AnimatePresence(props: AnimatePresenceProps) {\n const merged = mergeProps(\n {\n initial: true,\n mode: \"sync\" as const,\n presenceAffectsLayout: true,\n },\n props\n )\n\n const [local, others] = splitProps(merged, [\n \"children\",\n \"when\",\n \"presenceKey\",\n \"initial\",\n \"onExitComplete\",\n \"mode\",\n \"presenceAffectsLayout\",\n \"custom\",\n \"anchorX\",\n \"root\",\n ])\n\n // Track if this is the initial render\n let isInitialRender = true\n\n let didWarn = false\n const warnNonFactory = () => {\n if (didWarn) return\n didWarn = true\n console.warn(\n \"[AnimatePresence] Solid requires children to be a function for exit animations to work reliably. \" +\n \"Use <AnimatePresence when={condition}>{() => <motion.div .../>}</AnimatePresence>.\"\n )\n }\n\n if (local.when !== undefined) {\n const currentChild = createMemo(() => {\n if (!local.when) return undefined\n const childrenValue = local.children as any\n const getChild = () => {\n let value = typeof childrenValue === \"function\" ? childrenValue() : childrenValue\n if (typeof value === \"function\" && value.length === 0) {\n value = value()\n }\n return value\n }\n if (typeof childrenValue !== \"function\") {\n warnNonFactory()\n }\n return { key: local.presenceKey ?? \"index-0\", getChild }\n })\n\n type Child = NonNullable<ReturnType<typeof currentChild>>\n const initialChild = currentChild()\n const [rendered, setRendered] = createSignal<Child[]>(initialChild ? [initialChild] : [])\n\n createEffect(on(currentChild, (next) => {\n const previous = untrack(rendered)\n const exiting = previous.filter((child) => child.key !== next?.key)\n // Reuse the mounted record on reentry, so its exit can reverse in place.\n const present = next && (previous.find((child) => child.key === next.key) ?? next)\n setRendered(local.mode === \"wait\" && exiting.length\n ? exiting\n : present ? [present, ...exiting] : exiting)\n }, { defer: true }))\n\n onMount(() => { isInitialRender = false })\n\n return (\n <For each={rendered()}>\n {(child) => {\n const isPresent = () => currentChild()?.key === child.key\n\n const onExitComplete = () => {\n const next = untrack(currentChild)\n const previous = untrack(rendered)\n if (next?.key === child.key || !previous.includes(child)) return\n const remaining = previous.filter((item) => item !== child)\n const hasExits = remaining.some((item) => item.key !== next?.key)\n setRendered(!hasExits && next\n ? [remaining.find((item) => item.key === next.key) ?? next]\n : remaining)\n if (!hasExits) local.onExitComplete?.()\n }\n\n return (\n <PresenceChild\n key={child.key}\n isPresent={isPresent}\n onExitComplete={isPresent() ? undefined : onExitComplete}\n initial={isInitialRender && !local.initial ? false : undefined}\n custom={local.custom}\n presenceAffectsLayout={local.presenceAffectsLayout}\n getChild={child.getChild}\n childKey={child.key}\n mode={local.mode}\n anchorX={local.anchorX}\n root={local.root}\n />\n )\n }}\n </For>\n )\n }\n\n const resolveChildrenList = () => {\n const childrenValue = local.children as any\n\n if (local.when !== undefined) {\n if (!local.when) return []\n if (typeof childrenValue !== \"function\") {\n warnNonFactory()\n }\n const getChild = typeof childrenValue === \"function\" ? childrenValue : () => childrenValue\n const key = local.presenceKey ?? \"index-0\"\n return [{ key, getChild }]\n }\n\n const child = typeof childrenValue === \"function\" ? childrenValue() : childrenValue\n if (!child || child === true) return []\n const list = Array.isArray(child) ? child : [child]\n return list\n .filter((item) => item !== false && item != null)\n .map((item, index) => ({\n key: getChildKey(item, index),\n getChild: () => item,\n }))\n }\n\n // Track present children (filtered to elements only)\n const presentChildren = createMemo(() => resolveChildrenList())\n\n // Track which keys are currently present\n const presentKeys = createMemo(() => {\n return presentChildren().map((child) => child.key)\n })\n\n // Track all children that should be rendered (including exiting ones)\n const [allChildren, setAllChildren] = createSignal<PresenceChildState[]>([], { equals: false })\n\n // Track exit completion status per key\n const [exitStatus, setExitStatus] = createSignal<Map<ChildKey, boolean>>(new Map(), { equals: false })\n\n // Handle child changes\n createEffect(() => {\n const current = presentChildren()\n const currentKeys = presentKeys()\n const prev = untrack(allChildren)\n const prevExitStatus = untrack(exitStatus)\n\n let nextExitStatus = prevExitStatus\n let exitStatusChanged = false\n\n // Identify exiting children\n const exitingChildren = prev.filter((child) => !currentKeys.includes(child.key))\n\n // Clear exit tracking for children that re-entered\n prevExitStatus.forEach((_, key) => {\n if (currentKeys.includes(key)) {\n if (!exitStatusChanged) {\n nextExitStatus = new Map(prevExitStatus)\n exitStatusChanged = true\n }\n nextExitStatus.delete(key)\n }\n })\n\n // Mark exiting children\n exitingChildren.forEach((child) => {\n if (!prevExitStatus.has(child.key)) {\n if (!exitStatusChanged) {\n nextExitStatus = new Map(prevExitStatus)\n exitStatusChanged = true\n }\n nextExitStatus.set(child.key, false)\n }\n })\n\n if (exitStatusChanged) {\n setExitStatus(nextExitStatus)\n }\n\n // Build new allChildren array\n const nextChildren: PresenceChildState[] = []\n\n // Add all current children\n for (let i = 0; i < current.length; i++) {\n const child = current[i]\n nextChildren.push({\n key: child.key,\n getChild: child.getChild,\n isPresent: true,\n index: i,\n })\n }\n\n // In \"wait\" mode, only show exiting children until they're all done\n if (local.mode === \"wait\" && exitingChildren.length > 0) {\n nextChildren.length = 0\n exitingChildren.forEach((child) => {\n nextChildren.push({\n ...child,\n isPresent: false,\n })\n })\n } else {\n // In \"sync\" and \"popLayout\" modes, include exiting children alongside present ones\n exitingChildren.forEach((child) => {\n nextChildren.push({\n ...child,\n isPresent: false,\n })\n })\n }\n\n const isSame =\n prev.length === nextChildren.length &&\n prev.every((child, index) => {\n const next = nextChildren[index]\n return child.key === next.key && child.getChild === next.getChild && child.isPresent === next.isPresent\n })\n\n if (!isSame) {\n setAllChildren(nextChildren)\n }\n })\n\n // Check if all exits are complete\n const allExitsComplete = createMemo(() => {\n const status = exitStatus()\n if (!status.size) return false\n for (const isComplete of status.values()) {\n if (!isComplete) return false\n }\n return true\n })\n\n // Handle completion\n createEffect(() => {\n if (allExitsComplete()) {\n // All exits done, clean up and notify\n batch(() => {\n setExitStatus(new Map())\n // Filter to only present children\n const current = presentChildren()\n const keys = presentKeys()\n setAllChildren(\n current.map((child, i) => ({\n key: child.key,\n getChild: child.getChild,\n isPresent: true,\n index: i,\n }))\n )\n })\n local.onExitComplete?.()\n }\n })\n\n // Mark initial render complete after first mount\n onMount(() => {\n isInitialRender = false\n })\n\n return (\n <Index each={allChildren()}>\n {(childState) => {\n const state = childState\n const isPresent = () => state().isPresent\n\n const onExitComplete = () => {\n const status = untrack(exitStatus)\n const key = state().key\n if (!status.has(key)) return\n batch(() => {\n setExitStatus((map) => {\n const newMap = new Map(map)\n if (!newMap.has(key)) return newMap\n newMap.set(key, true)\n return newMap\n })\n })\n }\n\n return (\n <PresenceChild\n key={state().key}\n isPresent={isPresent}\n onExitComplete={isPresent() ? undefined : onExitComplete}\n initial={isInitialRender && !local.initial ? false : undefined}\n custom={local.custom}\n presenceAffectsLayout={local.presenceAffectsLayout}\n getChild={state().getChild}\n childKey={state().key}\n mode={local.mode}\n anchorX={local.anchorX}\n root={local.root}\n />\n )\n }}\n </Index>\n )\n}\n\nfunction PopChild(props: {\n children: any\n isPresent: boolean\n anchorX?: \"left\" | \"right\"\n root?: HTMLElement | ShadowRoot\n}) {\n let container: HTMLDivElement | undefined\n let wasPresent = props.isPresent\n const [style, setStyle] = createSignal<Record<string, string>>({ display: \"contents\" })\n\n createEffect(() => {\n const now = props.isPresent\n if (wasPresent && !now) {\n const target = (container?.firstElementChild as HTMLElement | null) ?? container\n if (target) {\n const rect = target.getBoundingClientRect()\n const parent = target.offsetParent as HTMLElement | null\n const parentRect = parent ? parent.getBoundingClientRect() : { left: 0, top: 0, width: 0 }\n const top = rect.top - parentRect.top\n const left = rect.left - parentRect.left\n const right = parent ? parentRect.width - rect.width - left : 0\n const x =\n props.anchorX === \"right\"\n ? { right: `${right}px`, left: \"auto\" }\n : { left: `${left}px`, right: \"auto\" }\n\n setStyle({\n position: \"absolute\",\n top: `${top}px`,\n width: `${rect.width}px`,\n height: `${rect.height}px`,\n ...x,\n })\n }\n } else if (now) {\n setStyle({ display: \"contents\" })\n }\n wasPresent = now\n })\n\n return (\n <div ref={(el) => (container = el)} style={style()}>\n {props.children}\n </div>\n )\n}\n\n/**\n * Individual presence child wrapper\n */\nfunction PresenceChild(props: {\n key: ChildKey\n isPresent: () => boolean\n getChild: () => any\n childKey: ChildKey\n onExitComplete?: () => void\n initial?: false | string | string[]\n custom?: any\n presenceAffectsLayout?: boolean\n mode?: \"sync\" | \"wait\" | \"popLayout\"\n anchorX?: \"left\" | \"right\"\n root?: HTMLElement | ShadowRoot\n}) {\n const presenceId = String(presenceCounter++)\n const [local, others] = splitProps(props, [\n \"isPresent\",\n \"getChild\",\n \"childKey\",\n \"onExitComplete\",\n \"initial\",\n \"custom\",\n \"presenceAffectsLayout\",\n \"mode\",\n \"anchorX\",\n \"root\",\n ])\n\n // Track registered exit handlers from child motion components\n const [registeredChildren, setRegisteredChildren] = createSignal<Map<string, boolean>>(new Map())\n\n // Create presence context for this child\n const register = (childId: string | number) => {\n const key = String(childId)\n batch(() => {\n setRegisteredChildren((map) => {\n const newMap = new Map(map)\n newMap.set(key, false)\n return newMap\n })\n })\n return () => {\n batch(() => {\n setRegisteredChildren((map) => {\n const newMap = new Map(map)\n newMap.delete(key)\n return newMap\n })\n })\n }\n }\n\n const onExitComplete = (childId: string | number) => {\n if (!local.onExitComplete) return\n const key = String(childId)\n batch(() => {\n setRegisteredChildren((map) => {\n const newMap = new Map(map)\n newMap.set(key, true)\n return newMap\n })\n })\n\n const allComplete = Array.from(registeredChildren().values()).every(Boolean)\n if (allComplete) {\n local.onExitComplete?.()\n }\n }\n\n createEffect(\n on(\n local.isPresent,\n (present) => {\n const current = untrack(registeredChildren)\n\n if (current.size) {\n setRegisteredChildren((map) => {\n const newMap = new Map(map)\n newMap.forEach((_, key) => newMap.set(key, false))\n return newMap\n })\n }\n\n if (!present && current.size === 0) {\n local.onExitComplete?.()\n }\n },\n { defer: true },\n ),\n )\n\n const resolvedInitial = (): false | string | string[] | undefined => {\n if (local.initial === false) return false\n if (typeof local.initial === \"string\" || Array.isArray(local.initial)) return local.initial\n return undefined\n }\n\n const presenceContext = createMemo(() => ({\n id: () => presenceId,\n isPresent: local.isPresent,\n initial: () => resolvedInitial(),\n custom: () => local.custom,\n onExitComplete,\n register,\n }))\n\n return (\n <PresenceContext.Provider value={presenceContext()}>\n <PresenceChildContent\n getChild={local.getChild}\n childKey={local.childKey}\n isPresent={local.isPresent}\n mode={local.mode}\n anchorX={local.anchorX}\n root={local.root}\n />\n </PresenceContext.Provider>\n )\n}\n\nfunction PresenceChildContent(props: {\n getChild: () => any\n childKey: ChildKey\n isPresent: () => boolean\n mode?: \"sync\" | \"wait\" | \"popLayout\"\n anchorX?: \"left\" | \"right\"\n root?: HTMLElement | ShadowRoot\n}) {\n const resolved = children(() => {\n props.childKey\n return untrack(() => props.getChild())\n })\n\n if (props.mode === \"popLayout\") {\n return (\n <PopChild isPresent={props.isPresent()} anchorX={props.anchorX} root={props.root}>\n {resolved()}\n </PopChild>\n )\n }\n\n return resolved()\n}\n\n/**\n * Get a unique key for a child element\n */\nfunction getChildKey(child: any, index: number): ChildKey {\n if (!child) return \"\"\n const directKey = child.key ?? child.id ?? child?.props?.key\n if (directKey != null && directKey !== \"\") return directKey\n if (typeof child === \"string\" || typeof child === \"number\") return child\n if (typeof child === \"object\" || typeof child === \"function\") {\n const cached = autoKeyMap.get(child as object)\n if (cached) return cached\n }\n const nextKey = `index-${index}`\n if (typeof child === \"object\" || typeof child === \"function\") {\n autoKeyMap.set(child as object, nextKey)\n }\n return nextKey\n}\n\n/**\n * Hook to access presence state and signal safe removal\n */\nexport function usePresence(): [boolean, (() => void) | null] {\n const context = useContext(PresenceContext)\n\n if (!context) {\n return [true, null]\n }\n\n const isPresent = context.isPresent()\n \n const safeToRemove = () => {\n if (context.onExitComplete) {\n context.onExitComplete(context.id())\n }\n }\n\n return [!isPresent ? false : true, !isPresent ? safeToRemove : null]\n}\n\n/**\n * Simple hook to check if component is present\n */\nexport function useIsPresent(): boolean {\n const context = useContext(PresenceContext)\n if (!context) return true\n return context.isPresent()\n}\n","import { motionValue, type MotionValue } from \"motion-dom\"\nimport { onCleanup, useContext } from \"solid-js\"\nimport { MotionConfigContext } from \"../components/MotionConfig\"\n\n/**\n * Creates a MotionValue to track state and velocity.\n */\nexport function useMotionValue<T>(initial: T): MotionValue<T> {\n const value = motionValue(initial)\n const { isStatic } = useContext(MotionConfigContext)\n\n if (isStatic) {\n const unsubscribe = value.on(\"change\", () => {})\n onCleanup(() => unsubscribe())\n }\n\n onCleanup(() => value.destroy())\n\n return value\n}\n","import {\n AnyResolvedKeyframe,\n mapValue,\n MotionValue,\n transform,\n TransformOptions,\n transformValue,\n} from \"motion-dom\"\nimport { onCleanup } from \"solid-js\"\n\nexport type InputRange = number[]\ntype SingleTransformer<I, O> = (input: I) => O\ntype MultiTransformer<I, O> = (input: I[]) => O\ntype Transformer<I, O> =\n | SingleTransformer<I, O>\n | MultiTransformer<AnyResolvedKeyframe, O>\n\nexport function useTransform<I, O>(\n value: MotionValue<number>,\n inputRange: InputRange,\n outputRange: O[],\n options?: TransformOptions<O>,\n): MotionValue<O>\n\nexport function useTransform<I, O>(\n input: MotionValue<I>,\n transformer: SingleTransformer<I, O>,\n): MotionValue<O>\n\nexport function useTransform<I, O>(\n input:\n | MotionValue<string>[]\n | MotionValue<number>[]\n | MotionValue<AnyResolvedKeyframe>[],\n transformer: MultiTransformer<I, O>,\n): MotionValue<O>\n\nexport function useTransform<I, O>(transformer: () => O): MotionValue<O>\n\nexport function useTransform<I, O>(\n input:\n | MotionValue<I>\n | MotionValue<string>[]\n | MotionValue<number>[]\n | MotionValue<AnyResolvedKeyframe>[]\n | (() => O),\n inputRangeOrTransformer?: InputRange | Transformer<I, O>,\n outputRange?: O[],\n options?: TransformOptions<O>,\n): MotionValue<O> {\n if (typeof input === \"function\") {\n const value = transformValue(input)\n onCleanup(() => value.destroy())\n return value\n }\n\n let value: MotionValue<O>\n\n if (Array.isArray(input)) {\n const transformer =\n typeof inputRangeOrTransformer === \"function\"\n ? (inputRangeOrTransformer as MultiTransformer<AnyResolvedKeyframe, O>)\n : (transform(inputRangeOrTransformer as InputRange, outputRange as O[], options) as unknown as MultiTransformer<\n AnyResolvedKeyframe,\n O\n >)\n\n value = transformValue(() =>\n (transformer as MultiTransformer<AnyResolvedKeyframe, O>)(\n input.map((item) => item.get()) as AnyResolvedKeyframe[],\n ),\n )\n } else if (typeof inputRangeOrTransformer === \"function\") {\n const transformer = inputRangeOrTransformer as SingleTransformer<I, O>\n value = transformValue(() => transformer((input as MotionValue<I>).get()))\n } else {\n value = mapValue(\n input as unknown as MotionValue<number>,\n inputRangeOrTransformer as InputRange,\n outputRange as O[],\n options,\n )\n }\n\n onCleanup(() => value.destroy())\n return value\n}\n","import {\n AnyResolvedKeyframe,\n isMotionValue,\n MotionValue,\n SpringOptions,\n cancelFrame,\n frame,\n JSAnimation,\n motionValue,\n} from \"motion-dom\"\nimport { useContext } from \"solid-js\"\nimport { MotionConfigContext } from \"../components/MotionConfig\"\nimport { useTransform } from \"./use-transform\"\nimport { onCleanup } from \"solid-js\"\n\nexport function useSpring(source: MotionValue<string>, options?: SpringOptions): MotionValue<string>\nexport function useSpring(source: string, options?: SpringOptions): MotionValue<string>\nexport function useSpring(source: MotionValue<number>, options?: SpringOptions): MotionValue<number>\nexport function useSpring(source: number, options?: SpringOptions): MotionValue<number>\nexport function useSpring(\n source: MotionValue<string> | MotionValue<number> | AnyResolvedKeyframe,\n options: SpringOptions = {},\n) {\n const { isStatic } = useContext(MotionConfigContext)\n const getFromSource = () => (isMotionValue(source) ? source.get() : source)\n\n if (isStatic) {\n return useTransform(getFromSource)\n }\n\n const initial = getFromSource() as string | number\n const value = motionValue(initial)\n const unit = typeof initial === \"string\" ? initial.replace(/[\\d.-]/g, \"\") : \"\"\n const parse = (latest: string | number) => unit ? `${parseFloat(String(latest))}${unit}` : parseFloat(String(latest))\n let target = initial\n let setter: (value: string | number) => void\n let disposed = false\n const stop = () => {\n cancelFrame(start)\n value.stop()\n }\n // motion-dom's springValue queues an anonymous callback that survives\n // destroy(). Keep the scheduled work owned and cancellable by this Solid scope.\n const start = () => {\n if (disposed) return\n value.stop()\n const from = parseFloat(String(value.get()))\n const to = parseFloat(String(target))\n if (from === to) return\n value.start((onComplete) => new JSAnimation({\n keyframes: [from, to],\n velocity: value.getVelocity(),\n type: \"spring\",\n restDelta: 0.001,\n restSpeed: 0.01,\n ...options,\n onUpdate: (latest) => setter(parse(latest)),\n onComplete,\n }))\n }\n value.attach((latest, set) => {\n target = latest\n setter = set\n frame.postRender(start)\n }, stop)\n const unsubscribe = isMotionValue(source)\n ? source.on(\"change\", (latest) => value.set(parse(latest)))\n : undefined\n\n value.on(\"destroy\", () => {\n disposed = true\n unsubscribe?.()\n stop()\n })\n onCleanup(() => value.destroy())\n\n return value\n}\n","import type { MotionValue, MotionValueEventCallbacks } from \"motion-dom\"\nimport { onCleanup } from \"solid-js\"\n\n/** Subscribe during setup and unsubscribe when the Solid owner is disposed. */\nexport function useMotionValueEvent<V, EventName extends keyof MotionValueEventCallbacks<V>>(\n value: MotionValue<V>,\n event: EventName,\n callback: MotionValueEventCallbacks<V>[EventName],\n) {\n onCleanup(value.on(event, callback))\n}\n","import { cancelFrame, frame, type MotionValue } from \"motion-dom\"\nimport { onCleanup } from \"solid-js\"\nimport { useMotionValue } from \"./use-motion-value\"\nimport { useMotionValueEvent } from \"./use-motion-value-event\"\n\n/** Track velocity, including its return to zero after the source stops changing. */\nexport function useVelocity(value: MotionValue<number>): MotionValue<number> {\n const velocity = useMotionValue(value.getVelocity())\n const update = () => {\n const latest = value.getVelocity()\n velocity.set(latest)\n if (latest) frame.update(update)\n }\n\n useMotionValueEvent(value, \"change\", () => frame.update(update, false, true))\n onCleanup(() => cancelFrame(update))\n return velocity\n}\n","import { createSignal, onCleanup, type Accessor } from \"solid-js\"\n\n/**\n * Reactive device preference. Read as `shouldReduceMotion()` in tracked code.\n * Returns null on the server or when matchMedia is unavailable.\n */\nexport function useReducedMotion(): Accessor<boolean | null> {\n if (typeof window === \"undefined\" || !window.matchMedia) return () => null\n\n const media = window.matchMedia(\"(prefers-reduced-motion: reduce)\")\n const [reduced, setReduced] = createSignal(media.matches)\n const update = () => setReduced(media.matches)\n media.addEventListener(\"change\", update)\n onCleanup(() => media.removeEventListener(\"change\", update))\n return reduced\n}\n","import type { DOMKeyframesDefinition } from \"motion-dom\"\n\nexport function isDOMKeyframes(keyframes: unknown): keyframes is DOMKeyframesDefinition {\n return typeof keyframes === \"object\" && !Array.isArray(keyframes)\n}\n","import type { AnimationScope, DOMKeyframesDefinition, SelectorCache } from \"motion-dom\"\nimport { resolveElements } from \"motion-dom\"\nimport type { ObjectTarget } from \"../sequence/types\"\nimport { isDOMKeyframes } from \"../utils/is-dom-keyframes\"\n\nexport function resolveSubjects<O extends {}>(\n subject: string | Element | Element[] | NodeListOf<Element> | O | O[] | null | undefined,\n keyframes: DOMKeyframesDefinition | ObjectTarget<O>,\n scope?: AnimationScope,\n selectorCache?: SelectorCache,\n) {\n if (subject == null) {\n return []\n }\n\n if (typeof subject === \"string\" && isDOMKeyframes(keyframes)) {\n return resolveElements(subject, scope, selectorCache)\n } else if (subject instanceof NodeList) {\n return Array.from(subject)\n } else if (Array.isArray(subject)) {\n return subject.filter((s) => s != null)\n } else {\n return [subject]\n }\n}\n","export function calculateRepeatDuration(duration: number, repeat: number, _repeatDelay: number): number {\n return duration * (repeat + 1)\n}\n","import type { SequenceTime } from \"../types\"\n\nexport function calcNextTime(current: number, next: SequenceTime, prev: number, labels: Map<string, number>): number {\n if (typeof next === \"number\") {\n return next\n } else if (next.startsWith(\"-\") || next.startsWith(\"+\")) {\n return Math.max(0, current + parseFloat(next))\n } else if (next === \"<\") {\n return prev\n } else if (next.startsWith(\"<\")) {\n return Math.max(0, prev + parseFloat(next.slice(1)))\n } else {\n return labels.get(next) ?? current\n }\n}\n","import { mixNumber, UnresolvedValueKeyframe } from \"motion-dom\"\nimport { Easing, getEasingForSegment, removeItem } from \"motion-utils\"\nimport type { ValueSequence } from \"../types\"\n\nexport function eraseKeyframes(sequence: ValueSequence, startTime: number, endTime: number): void {\n for (let i = 0; i < sequence.length; i++) {\n const keyframe = sequence[i]\n\n if (keyframe.at > startTime && keyframe.at < endTime) {\n removeItem(sequence, keyframe)\n i--\n }\n }\n}\n\nexport function addKeyframes(\n sequence: ValueSequence,\n keyframes: UnresolvedValueKeyframe[],\n easing: Easing | Easing[],\n offset: number[],\n startTime: number,\n endTime: number,\n): void {\n eraseKeyframes(sequence, startTime, endTime)\n\n for (let i = 0; i < keyframes.length; i++) {\n sequence.push({\n value: keyframes[i],\n at: mixNumber(startTime, endTime, offset[i]),\n easing: getEasingForSegment(easing, i),\n })\n }\n}\n","export function normalizeTimes(times: number[], repeat: number): void {\n for (let i = 0; i < times.length; i++) {\n times[i] = times[i] / (repeat + 1)\n }\n}\n","import type { AbsoluteKeyframe } from \"../types\"\n\nexport function compareByTime(a: AbsoluteKeyframe, b: AbsoluteKeyframe): number {\n if (a.at === b.at) {\n if (a.value === null) return 1\n if (b.value === null) return -1\n return 0\n } else {\n return a.at - b.at\n }\n}\n","import {\n AnimationScope,\n createGeneratorEasing,\n defaultOffset,\n DOMKeyframesDefinition,\n AnimationOptions as DynamicAnimationOptions,\n fillOffset,\n GeneratorFactory,\n isGenerator,\n isMotionValue,\n Transition,\n UnresolvedValueKeyframe,\n type AnyResolvedKeyframe,\n type MotionValue,\n} from \"motion-dom\"\nimport { Easing, getEasingForSegment, invariant, progress, secondsToMilliseconds } from \"motion-utils\"\nimport { resolveSubjects } from \"../animate/resolve-subjects\"\nimport {\n AnimationSequence,\n At,\n ResolvedAnimationDefinitions,\n SequenceMap,\n SequenceOptions,\n ValueSequence,\n} from \"./types\"\nimport { calculateRepeatDuration } from \"./utils/calc-repeat-duration\"\nimport { calcNextTime } from \"./utils/calc-time\"\nimport { addKeyframes } from \"./utils/edit\"\nimport { normalizeTimes } from \"./utils/normalize-times\"\nimport { compareByTime } from \"./utils/sort\"\n\nconst defaultSegmentEasing = \"easeInOut\"\nconst MAX_REPEAT = 20\n\nexport function createAnimationsFromSequence(\n sequence: AnimationSequence,\n { defaultTransition = {}, ...sequenceTransition }: SequenceOptions = {},\n scope?: AnimationScope,\n generators?: { [key: string]: GeneratorFactory },\n): ResolvedAnimationDefinitions {\n const defaultDuration = defaultTransition.duration || 0.3\n const animationDefinitions: ResolvedAnimationDefinitions = new Map()\n const sequences = new Map<Element | MotionValue, SequenceMap>()\n const elementCache = {}\n const timeLabels = new Map<string, number>()\n\n let prevTime = 0\n let currentTime = 0\n let totalDuration = 0\n\n for (let i = 0; i < sequence.length; i++) {\n const segment = sequence[i]\n\n if (typeof segment === \"string\") {\n timeLabels.set(segment, currentTime)\n continue\n } else if (!Array.isArray(segment)) {\n timeLabels.set(segment.name, calcNextTime(currentTime, segment.at, prevTime, timeLabels))\n continue\n }\n\n let [subject, keyframes, transition = {}] = segment\n\n if (transition.at !== undefined) {\n currentTime = calcNextTime(currentTime, transition.at, prevTime, timeLabels)\n }\n\n let maxDuration = 0\n\n const resolveValueSequence = (\n valueKeyframes: UnresolvedValueKeyframe | UnresolvedValueKeyframe[],\n valueTransition: Transition | DynamicAnimationOptions,\n valueSequence: ValueSequence,\n elementIndex = 0,\n numSubjects = 0,\n ) => {\n const valueKeyframesAsList = keyframesAsList(valueKeyframes)\n const {\n delay = 0,\n times = defaultOffset(valueKeyframesAsList),\n type = defaultTransition.type || \"keyframes\",\n repeat,\n repeatType,\n repeatDelay = 0,\n ...remainingTransition\n } = valueTransition\n let { ease = defaultTransition.ease || \"easeOut\", duration } = valueTransition\n\n const calculatedDelay = typeof delay === \"function\" ? delay(elementIndex, numSubjects) : delay\n\n const numKeyframes = valueKeyframesAsList.length\n const createGenerator = isGenerator(type) ? type : generators?.[type || \"keyframes\"]\n\n if (numKeyframes <= 2 && createGenerator) {\n let absoluteDelta = 100\n if (numKeyframes === 2 && isNumberKeyframesArray(valueKeyframesAsList)) {\n const delta = valueKeyframesAsList[1] - valueKeyframesAsList[0]\n absoluteDelta = Math.abs(delta)\n }\n\n const springTransition = {\n ...defaultTransition,\n ...remainingTransition,\n }\n if (duration !== undefined) {\n springTransition.duration = secondsToMilliseconds(duration)\n }\n\n const springEasing = createGeneratorEasing(springTransition, absoluteDelta, createGenerator)\n\n ease = springEasing.ease\n duration = springEasing.duration\n }\n\n duration = duration ?? defaultDuration\n\n const startTime = currentTime + calculatedDelay\n\n if (times.length === 1 && times[0] === 0) {\n times[1] = 1\n }\n\n const remainder = times.length - valueKeyframesAsList.length\n remainder > 0 && fillOffset(times, remainder)\n\n valueKeyframesAsList.length === 1 && valueKeyframesAsList.unshift(null)\n\n if (repeat) {\n invariant(repeat < MAX_REPEAT, \"Repeat count too high, must be less than 20\", \"repeat-count-high\")\n\n duration = calculateRepeatDuration(duration ?? defaultDuration, repeat, repeatDelay)\n\n const originalKeyframes = [...valueKeyframesAsList]\n const originalTimes = [...times]\n ease = Array.isArray(ease) ? [...ease] : [ease]\n const originalEase = [...ease]\n\n for (let repeatIndex = 0; repeatIndex < repeat; repeatIndex++) {\n valueKeyframesAsList.push(...originalKeyframes)\n\n for (let keyframeIndex = 0; keyframeIndex < originalKeyframes.length; keyframeIndex++) {\n times.push(originalTimes[keyframeIndex] + (repeatIndex + 1))\n ease.push(keyframeIndex === 0 ? \"linear\" : getEasingForSegment(originalEase, keyframeIndex - 1))\n }\n }\n\n normalizeTimes(times, repeat)\n }\n\n const targetTime = startTime + (duration ?? defaultDuration)\n\n addKeyframes(valueSequence, valueKeyframesAsList, ease as Easing | Easing[], times, startTime, targetTime)\n\n maxDuration = Math.max(calculatedDelay + duration, maxDuration)\n totalDuration = Math.max(targetTime, totalDuration)\n }\n\n if (isMotionValue(subject)) {\n const subjectSequence = getSubjectSequence(subject, sequences)\n resolveValueSequence(keyframes as AnyResolvedKeyframe, transition, getValueSequence(\"default\", subjectSequence))\n } else {\n const subjects = resolveSubjects(subject, keyframes as DOMKeyframesDefinition, scope, elementCache)\n\n const numSubjects = subjects.length\n\n for (let subjectIndex = 0; subjectIndex < numSubjects; subjectIndex++) {\n keyframes = keyframes as DOMKeyframesDefinition\n transition = transition as DynamicAnimationOptions\n\n const thisSubject = subjects[subjectIndex]\n const subjectSequence = getSubjectSequence(thisSubject, sequences)\n\n for (const key in keyframes) {\n resolveValueSequence(\n keyframes[key as keyof typeof keyframes] as UnresolvedValueKeyframe,\n getValueTransition(transition, key),\n getValueSequence(key, subjectSequence),\n subjectIndex,\n numSubjects,\n )\n }\n }\n }\n\n prevTime = currentTime\n currentTime += maxDuration\n }\n\n sequences.forEach((valueSequences, element) => {\n for (const key in valueSequences) {\n const valueSequence = valueSequences[key]\n valueSequence.sort(compareByTime)\n\n const keyframes: UnresolvedValueKeyframe[] = []\n const valueOffset: number[] = []\n const valueEasing: Easing[] = []\n\n for (let i = 0; i < valueSequence.length; i++) {\n const { at, value, easing } = valueSequence[i]\n keyframes.push(value)\n valueOffset.push(progress(0, totalDuration, at))\n valueEasing.push(easing || \"easeOut\")\n }\n\n if (valueOffset[0] !== 0) {\n valueOffset.unshift(0)\n keyframes.unshift(keyframes[0])\n valueEasing.unshift(defaultSegmentEasing)\n }\n\n if (valueOffset[valueOffset.length - 1] !== 1) {\n valueOffset.push(1)\n keyframes.push(null)\n }\n\n if (!animationDefinitions.has(element)) {\n animationDefinitions.set(element, {\n keyframes: {},\n transition: {},\n })\n }\n\n const definition = animationDefinitions.get(element)!\n definition.keyframes[key] = keyframes\n\n const { type: _type, ...remainingDefaultTransition } = defaultTransition\n definition.transition[key] = {\n ...remainingDefaultTransition,\n duration: totalDuration,\n ease: valueEasing,\n times: valueOffset,\n ...sequenceTransition,\n }\n }\n })\n\n return animationDefinitions\n}\n\nfunction getSubjectSequence<O extends {}>(\n subject: Element | MotionValue | O,\n sequences: Map<Element | MotionValue | O, SequenceMap>,\n): SequenceMap {\n !sequences.has(subject) && sequences.set(subject, {})\n return sequences.get(subject)!\n}\n\nfunction getValueSequence(name: string, sequences: SequenceMap): ValueSequence {\n if (!sequences[name]) sequences[name] = []\n return sequences[name]\n}\n\nfunction keyframesAsList(keyframes: UnresolvedValueKeyframe | UnresolvedValueKeyframe[]): UnresolvedValueKeyframe[] {\n return Array.isArray(keyframes) ? keyframes : [keyframes]\n}\n\nexport function getValueTransition(transition: DynamicAnimationOptions & At, key: string): DynamicAnimationOptions {\n return transition && (transition as any)[key]\n ? {\n ...transition,\n ...((transition as any)[key] as Transition),\n }\n : { ...transition }\n}\n\nconst isNumber = (keyframe: unknown) => typeof keyframe === \"number\"\nconst isNumberKeyframesArray = (keyframes: UnresolvedValueKeyframe[]): keyframes is number[] =>\n keyframes.every(isNumber)\n","import {\n HTMLVisualElement,\n isSVGElement,\n isSVGSVGElement,\n ObjectVisualElement,\n SVGVisualElement,\n visualElementStore,\n} from \"motion-dom\"\n\nexport function createDOMVisualElement(element: HTMLElement | SVGElement) {\n const options = {\n presenceContext: null,\n props: {},\n visualState: {\n renderState: {\n transform: {},\n transformOrigin: {},\n style: {},\n vars: {},\n attrs: {},\n },\n latestValues: {},\n },\n }\n\n const node =\n isSVGElement(element) && !isSVGSVGElement(element)\n ? new SVGVisualElement(options as any)\n : new HTMLVisualElement(options as any)\n\n node.mount(element as any)\n visualElementStore.set(element, node)\n}\n\nexport function createObjectVisualElement(subject: Object) {\n const options = {\n presenceContext: null,\n props: {},\n visualState: {\n renderState: {\n output: {},\n },\n latestValues: {},\n },\n }\n\n const node = new ObjectVisualElement(options as any)\n node.mount(subject as any)\n visualElementStore.set(subject, node)\n}\n","import {\n animateTarget,\n AnimationPlaybackControlsWithThen,\n AnimationScope,\n AnyResolvedKeyframe,\n DOMKeyframesDefinition,\n AnimationOptions as DynamicAnimationOptions,\n ElementOrSelector,\n isMotionValue,\n MotionValue,\n TargetAndTransition,\n UnresolvedValueKeyframe,\n ValueAnimationTransition,\n visualElementStore,\n} from \"motion-dom\"\nimport { invariant } from \"motion-utils\"\nimport type { ObjectTarget } from \"../sequence/types\"\nimport { createDOMVisualElement, createObjectVisualElement } from \"../utils/create-visual-element\"\nimport { isDOMKeyframes } from \"../utils/is-dom-keyframes\"\nimport { resolveSubjects } from \"./resolve-subjects\"\nimport { animateSingleValue } from \"motion-dom\"\n\nexport type AnimationSubject = Element | MotionValue<any> | any\n\nfunction isSingleValue(subject: unknown, keyframes: unknown): subject is MotionValue | AnyResolvedKeyframe {\n return (\n isMotionValue(subject) || typeof subject === \"number\" || (typeof subject === \"string\" && !isDOMKeyframes(keyframes))\n )\n}\n\nexport function animateSubject(\n value: string | MotionValue<string>,\n keyframes: string | UnresolvedValueKeyframe<string>[],\n options?: ValueAnimationTransition<string>,\n): AnimationPlaybackControlsWithThen[]\nexport function animateSubject(\n value: number | MotionValue<number>,\n keyframes: number | UnresolvedValueKeyframe<number>[],\n options?: ValueAnimationTransition<number>,\n): AnimationPlaybackControlsWithThen[]\nexport function animateSubject(\n element: ElementOrSelector,\n keyframes: DOMKeyframesDefinition,\n options?: DynamicAnimationOptions,\n scope?: AnimationScope,\n): AnimationPlaybackControlsWithThen[]\nexport function animateSubject<O extends Object>(\n object: O | O[],\n keyframes: ObjectTarget<O>,\n options?: DynamicAnimationOptions,\n): AnimationPlaybackControlsWithThen[]\nexport function animateSubject<O extends Object>(\n subject: MotionValue<number> | MotionValue<string> | number | string | ElementOrSelector | O | O[],\n keyframes:\n | number\n | string\n | UnresolvedValueKeyframe<number>[]\n | UnresolvedValueKeyframe<string>[]\n | DOMKeyframesDefinition\n | ObjectTarget<O>,\n options?: ValueAnimationTransition<number> | ValueAnimationTransition<string> | DynamicAnimationOptions,\n scope?: AnimationScope,\n): AnimationPlaybackControlsWithThen[] {\n const animations: AnimationPlaybackControlsWithThen[] = []\n\n if (isSingleValue(subject, keyframes)) {\n animations.push(\n animateSingleValue(\n subject,\n isDOMKeyframes(keyframes) ? (keyframes as any).default || keyframes : keyframes,\n options ? (options as any).default || options : options,\n ),\n )\n } else {\n if (subject == null) {\n return animations\n }\n\n const subjects = resolveSubjects(subject, keyframes as DOMKeyframesDefinition, scope)\n\n const numSubjects = subjects.length\n\n invariant(Boolean(numSubjects), \"No valid elements provided.\", \"no-valid-elements\")\n\n for (let i = 0; i < numSubjects; i++) {\n const thisSubject = subjects[i]\n\n const createVisualElement = thisSubject instanceof Element ? createDOMVisualElement : createObjectVisualElement\n\n if (!visualElementStore.has(thisSubject)) {\n createVisualElement(thisSubject as any)\n }\n\n const visualElement = visualElementStore.get(thisSubject)!\n const transition = { ...options }\n\n if (\"delay\" in transition && typeof transition.delay === \"function\") {\n transition.delay = transition.delay(i, numSubjects)\n }\n\n animations.push(...animateTarget(visualElement, { ...(keyframes as {}), transition } as TargetAndTransition, {}))\n }\n }\n\n return animations\n}\n","import type { AnimationPlaybackControlsWithThen, AnimationScope } from \"motion-dom\"\nimport { spring } from \"motion-dom\"\nimport { createAnimationsFromSequence } from \"../sequence/create\"\nimport type { AnimationSequence, SequenceOptions } from \"../sequence/types\"\nimport { animateSubject } from \"./subject\"\n\nexport function animateSequence(sequence: AnimationSequence, options?: SequenceOptions, scope?: AnimationScope) {\n const animations: AnimationPlaybackControlsWithThen[] = []\n\n const animationDefinitions = createAnimationsFromSequence(sequence, options, scope, { spring })\n\n animationDefinitions.forEach(({ keyframes, transition }, subject) => {\n animations.push(...animateSubject(subject, keyframes, transition))\n })\n\n return animations\n}\n","import type {\n AnimationPlaybackControlsWithThen,\n AnimationScope,\n DOMKeyframesDefinition,\n AnimationOptions as DynamicAnimationOptions,\n ElementOrSelector,\n MotionValue,\n UnresolvedValueKeyframe,\n ValueAnimationTransition,\n} from \"motion-dom\"\nimport { GroupAnimationWithThen } from \"motion-dom\"\nimport { removeItem } from \"motion-utils\"\nimport type { AnimationSequence, ObjectTarget, SequenceOptions } from \"../sequence/types\"\nimport { animateSequence } from \"./sequence\"\nimport { animateSubject } from \"./subject\"\n\nfunction isSequence(value: unknown): value is AnimationSequence {\n return Array.isArray(value) && value.some(Array.isArray)\n}\n\ninterface ScopedAnimateOptions {\n scope?: AnimationScope\n reduceMotion?: boolean\n}\n\nexport function createScopedAnimate(options: ScopedAnimateOptions = {}) {\n const { scope, reduceMotion } = options\n\n function scopedAnimate(sequence: AnimationSequence, options?: SequenceOptions): AnimationPlaybackControlsWithThen\n function scopedAnimate(\n value: string | MotionValue<string>,\n keyframes: string | UnresolvedValueKeyframe<string>[],\n options?: ValueAnimationTransition<string>,\n ): AnimationPlaybackControlsWithThen\n function scopedAnimate(\n value: number | MotionValue<number>,\n keyframes: number | UnresolvedValueKeyframe<number>[],\n options?: ValueAnimationTransition<number>,\n ): AnimationPlaybackControlsWithThen\n function scopedAnimate<V extends string | number>(\n value: V | MotionValue<V>,\n keyframes: V | UnresolvedValueKeyframe<V>[],\n options?: ValueAnimationTransition<V>,\n ): AnimationPlaybackControlsWithThen\n function scopedAnimate(\n element: ElementOrSelector,\n keyframes: DOMKeyframesDefinition,\n options?: DynamicAnimationOptions,\n ): AnimationPlaybackControlsWithThen\n function scopedAnimate<O extends {}>(\n object: O | O[],\n keyframes: ObjectTarget<O>,\n options?: DynamicAnimationOptions,\n ): AnimationPlaybackControlsWithThen\n function scopedAnimate<O extends {}>(\n subjectOrSequence:\n | AnimationSequence\n | MotionValue<number>\n | MotionValue<string>\n | number\n | string\n | ElementOrSelector\n | O\n | O[],\n optionsOrKeyframes?:\n | SequenceOptions\n | number\n | string\n | UnresolvedValueKeyframe<number>[]\n | UnresolvedValueKeyframe<string>[]\n | DOMKeyframesDefinition\n | ObjectTarget<O>,\n options?: ValueAnimationTransition<number> | ValueAnimationTransition<string> | DynamicAnimationOptions,\n ): AnimationPlaybackControlsWithThen {\n let animations: AnimationPlaybackControlsWithThen[] = []\n let animationOnComplete: VoidFunction | undefined\n\n if (isSequence(subjectOrSequence)) {\n animations = animateSequence(\n subjectOrSequence,\n reduceMotion !== undefined\n ? { reduceMotion, ...(optionsOrKeyframes as SequenceOptions) }\n : (optionsOrKeyframes as SequenceOptions),\n scope,\n )\n } else {\n const { onComplete, ...rest } = options || {}\n if (typeof onComplete === \"function\") {\n animationOnComplete = onComplete as VoidFunction\n }\n animations = animateSubject(\n subjectOrSequence as ElementOrSelector,\n optionsOrKeyframes as DOMKeyframesDefinition,\n (reduceMotion !== undefined ? { reduceMotion, ...rest } : rest) as DynamicAnimationOptions,\n scope,\n )\n }\n\n const animation = new GroupAnimationWithThen(animations)\n\n if (animationOnComplete) {\n animation.finished.then(animationOnComplete)\n }\n\n if (scope) {\n scope.animations.push(animation)\n animation.finished.then(() => {\n removeItem(scope.animations, animation)\n })\n }\n\n return animation\n }\n\n return scopedAnimate\n}\n\nexport const animate = createScopedAnimate()\n"],"names":["defaultContext","transformPagePoint","p","isStatic","reducedMotion","MotionConfigContext","createContext","MotionConfig","props","parent","useContext","local","contextProps","splitProps","value","_$createComponent","Provider","children","animate","style","isControllingVariants","checkIsControllingVariants","isVariantNode","checkIsVariantNode","event","info","point","calcProgress","motionValue","DragGesture","UpstreamDragGesture","isBrowser","window","useVisualState","isSVG","context","presenceContext","config","scrapeMotionValuesFromProps","scrapeSVGMotionValuesFromProps","createRenderState","createSvgRenderState","scrapeHTMLMotionValuesFromProps","createHtmlRenderState","makeVisualState","createMotionComponent","Component","forwardMotionProps","type","preloadedFeatures","createVisualElement","loadFeatures","isSVGComponent","MotionDOMComponent","motionConfig","parentContext","MotionContext","rawPresenceContext","PresenceContext","createMemo","resolved","id","isPresent","initial","custom","onExitComplete","register","ownProps","nextProps","key","getLatestProps","Boolean","createMotionContext","visualState","visualElement","initialPresenceContext","createDomVisualElement","blockInitialAnimation","reducedMotionConfig","skipAnimations","prepareDragProjection","rest","elementProps","latestProps","filtered","filterProps","ref","componentTag","visualProps","resolveSVGProps","latestValues","resolveHTMLProps","onMount","scheduleRenderMicrotask","createEffect","nextPresenceContext","update","updateFeatures","current","animationState","animateChanges","onCleanup","unmount","setRef","instance","mount","depth","removeFromVariantTree","addVariantChild","externalRef","Dynamic","_$mergeProps","component","createMotionComponentWithFeatures","options","featureBundle","componentCache","Map","motionProxy","Proxy","get","target","Reflect","set","motion","m","presenceCounter","autoKeyMap","WeakMap","AnimatePresence","merged","mergeProps","mode","presenceAffectsLayout","others","isInitialRender","didWarn","warnNonFactory","console","warn","when","undefined","currentChild","childrenValue","getChild","length","presenceKey","initialChild","rendered","setRendered","createSignal","on","next","previous","untrack","exiting","filter","child","present","find","defer","For","each","includes","remaining","item","hasExits","some","PresenceChild","childKey","anchorX","root","resolveChildrenList","list","Array","isArray","map","index","getChildKey","presentChildren","presentKeys","allChildren","setAllChildren","equals","exitStatus","setExitStatus","currentKeys","prev","prevExitStatus","nextExitStatus","exitStatusChanged","exitingChildren","forEach","_","delete","has","nextChildren","i","push","isSame","every","allExitsComplete","status","size","isComplete","values","batch","Index","childState","state","newMap","PopChild","container","wasPresent","setStyle","display","now","firstElementChild","rect","getBoundingClientRect","offsetParent","parentRect","left","top","width","right","x","position","height","_el$","_$getNextElement","_tmpl$","_$use","el","_$insert","_$effect","_$p","_$style","presenceId","String","registeredChildren","setRegisteredChildren","childId","allComplete","from","resolvedInitial","PresenceChildContent","directKey","cached","nextKey","usePresence","safeToRemove","useIsPresent","animations"],"mappings":"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"}