{"version":3,"file":"remix.mjs","sources":["../../src/remix.ts"],"sourcesContent":["import {\n    acquireProjectionNode,\n    animateLayout,\n    buildHTMLStyles,\n    buildSVGAttrs,\n    flushLayoutSnapshots,\n    frame,\n    HTMLVisualElement,\n    isControllingVariants,\n    isForcedMotionValue,\n    isMotionValue,\n    isSVGTag,\n    isVariantNode,\n    resolveMotionValue,\n    resolveVariantFromProps,\n    scopeMotion as createScope,\n    scrapeHTMLMotionValuesFromProps,\n    scrapeSVGMotionValuesFromProps,\n    SVGVisualElement,\n    visualElementStore,\n    type LayoutAnimationBuilder,\n    type MotionNodeOptions,\n    type MotionScope,\n    type MotionValue,\n    type PresenceContextProps,\n    type ReducedMotionConfig,\n    type ResolvedValues,\n    type ScopeOptions,\n    type ScopeSetup,\n    type Transition,\n    type VariantLabels,\n} from \"motion-dom\"\nimport { createElement, createMixin } from \"remix/component\"\nimport type { Handle, RemixNode } from \"remix/component\"\nimport { DragGesture } from \"./gestures/drag\"\nimport { PanGesture } from \"./gestures/pan\"\nimport { animations } from \"./motion/features/animations\"\nimport { gestureAnimations } from \"./motion/features/gestures\"\nimport { loadFeatures } from \"./motion/features/load-features\"\nimport { isValidMotionProp } from \"./motion/utils/valid-prop\"\nimport { lowercaseSVGElements } from \"./render/svg/lowercase-elements\"\nimport { createReorder } from \"./remix-reorder\"\n\ntype Values = Record<string, any>\n\nexport type MotionStyle = Record<\n    string,\n    string | number | MotionValue | undefined\n>\n\n/**\n * The same props as React's `<motion.div>`, without React's DOM props.\n */\nexport interface MotionProps extends MotionNodeOptions {\n    style?: MotionStyle\n}\n\nexport interface MotionConfigProps {\n    transition?: Transition\n    reducedMotion?: ReducedMotionConfig\n    children?: RemixNode\n}\n\nexport interface AnimatePresenceProps {\n    /**\n     * Set to `false` to skip the `initial` animation of the motion elements\n     * rendered with `AnimatePresence`'s first render.\n     */\n    initial?: boolean\n\n    /**\n     * - `\"sync\"`: Elements enter and exit at the same time.\n     * - `\"wait\"`: New elements render after the exiting elements are removed.\n     * - `\"popLayout\"`: Exiting elements are taken out of the layout with\n     *   `position: absolute`, so the elements around them can move at once.\n     */\n    mode?: \"sync\" | \"wait\" | \"popLayout\"\n\n    /**\n     * In \"popLayout\" mode, the side exiting elements stay pinned to.\n     *\n     * @default \"left\"\n     */\n    anchorX?: \"left\" | \"right\"\n\n    /**\n     * In \"popLayout\" mode, the side exiting elements stay pinned to.\n     *\n     * @default \"top\"\n     */\n    anchorY?: \"top\" | \"bottom\"\n\n    /**\n     * A value that replaces `custom` on exiting elements, to resolve\n     * dynamic `exit` variants with the latest data.\n     */\n    custom?: any\n\n    /**\n     * Called when every exiting element is removed.\n     */\n    onExitComplete?: VoidFunction\n\n    children?: RemixNode\n}\n\nexport interface LayoutGroupProps {\n    /**\n     * Prefixes every `layoutId` inside, so separate groups can use the\n     * same `layoutId`s without animating between each other.\n     */\n    id?: string\n    children?: RemixNode\n}\n\ninterface VariantContext {\n    initial?: false | VariantLabels\n    animate?: VariantLabels\n}\n\ninterface PresenceGroup {\n    props: AnimatePresenceProps\n    isFirstRender: boolean\n}\n\nlet featuresLoaded = false\n\nfunction loadRemixFeatures() {\n    if (featuresLoaded) return\n    featuresLoaded = true\n    loadFeatures({\n        ...animations,\n        ...gestureAnimations,\n        pan: { Feature: PanGesture },\n        drag: { Feature: DragGesture },\n    })\n}\n\n/**\n * Set a default `transition` and `reducedMotion` for every motion element\n * below it.\n *\n * @public\n */\nexport function MotionConfig(\n    handle: Handle<MotionConfigProps, MotionConfigProps>\n) {\n    return () => {\n        const { children, ...config } = handle.props\n        handle.context.set({\n            ...(handle.context.get(MotionConfig) as MotionConfigProps),\n            ...config,\n        })\n        return children\n    }\n}\n\nconst flatten = (node: RemixNode): any[] =>\n    Array.isArray(node) ? (node as any[]).flat(Infinity) : [node]\n\n/**\n * A motion component is a component, so Remix can't see the key of the\n * element it renders. Pass the key to the element, so Remix keeps the\n * element when the component is reordered.\n */\nconst withPresenceKey = (child: any) =>\n    child?.key != null && motionComponents.has(child.type)\n        ? { ...child, props: { ...child.props, presenceKey: child.key } }\n        : child\n\n/**\n * What a child of `AnimatePresence` tells the motion elements inside it.\n */\ninterface PresenceChildContext {\n    isPresent: boolean\n    custom?: any\n    /**\n     * Exits registered while the child exits. It's removed when they finish.\n     */\n    exits: Promise<void>[]\n    /**\n     * In \"popLayout\" mode, whether an element has left the layout yet.\n     */\n    popLayout?: boolean\n    popped?: boolean\n    anchorX?: \"left\" | \"right\"\n    anchorY?: \"top\" | \"bottom\"\n}\n\ninterface PresenceChildProps {\n    isPresent: boolean\n    custom?: any\n    popLayout?: boolean\n    anchorX?: \"left\" | \"right\"\n    anchorY?: \"top\" | \"bottom\"\n    onExitComplete: VoidFunction\n    children?: RemixNode\n}\n\n/**\n * Keeps an exiting child of `AnimatePresence` until the exits of the\n * motion elements inside it finish, as React's PresenceChild.\n */\nfunction PresenceChild(\n    handle: Handle<PresenceChildProps, PresenceChildContext>\n) {\n    let exitId = 0\n    let popped = false\n    let exits: Promise<void>[] = []\n\n    return () => {\n        const { isPresent, children } = handle.props\n        if (isPresent) exits = []\n        const context: PresenceChildContext = {\n            ...handle.props,\n            exits,\n            popped,\n        }\n        handle.context.set(context)\n\n        /**\n         * Every exit registered since the child started exiting, checked\n         * by the latest render only.\n         */\n        const id = ++exitId\n        if (isPresent) {\n            popped = false\n        } else {\n            handle.queueTask(() => {\n                popped ||= !!context.popped\n                Promise.all([...exits]).then(() => {\n                    if (id === exitId) handle.props.onExitComplete()\n                })\n            })\n        }\n\n        return children\n    }\n}\n\ninterface PresenceItem {\n    key: any\n    child: any\n    isPresent: boolean\n}\n\nconst getKey = (child: any, index: number) => child?.key ?? \"__i\" + index\n\n/**\n * Keep removed children of `AnimatePresence` until their motion elements\n * finish their `exit` animations. Also choose how entering and exiting\n * children share the screen, skip their first `initial` animation, and\n * know when exits finish.\n *\n * @public\n */\nexport function AnimatePresence(\n    handle: Handle<AnimatePresenceProps, PresenceGroup>\n) {\n    let items: PresenceItem[] = []\n    const exited = new Set<any>()\n\n    const group: PresenceGroup = {\n        props: handle.props,\n        isFirstRender: true,\n    }\n\n    const remove = (key: any) => {\n        exited.add(key)\n        handle.update()\n    }\n\n    return () => {\n        handle.context.set(group)\n        if (group.isFirstRender) {\n            handle.queueTask(() => (group.isFirstRender = false))\n        }\n\n        const { mode, custom } = handle.props\n        const present = flatten(handle.props.children).filter(\n            (child) => child != null && child !== false && child !== true\n        )\n        const presentKeys = new Map(\n            present.map((child, i) => [getKey(child, i), child])\n        )\n\n        /**\n         * Merge the present children with the exiting ones, which keep\n         * their place.\n         */\n        const next: PresenceItem[] = present.map((child, i) => ({\n            key: getKey(child, i),\n            child,\n            isPresent: true,\n        }))\n        items.forEach((item, i) => {\n            if (presentKeys.has(item.key) || exited.has(item.key)) return\n            next.splice(Math.min(i, next.length), 0, {\n                ...item,\n                isPresent: false,\n            })\n        })\n\n        const hadExited = exited.size > 0\n        exited.clear()\n        items = next\n\n        /**\n         * Once every exit finishes. Not when an exiting child comes back.\n         */\n        const isExiting = next.some((item) => !item.isPresent)\n        if (hadExited && !isExiting) {\n            handle.queueTask(() => handle.props.onExitComplete?.())\n        }\n\n        /**\n         * In \"wait\" mode, render the new children once the old ones\n         * have exited.\n         */\n        const shown =\n            mode === \"wait\" && isExiting\n                ? next.filter((item) => !item.isPresent)\n                : next\n\n        return shown.map(({ key, child, isPresent }) =>\n            createElement(\n                PresenceChild,\n                {\n                    key,\n                    isPresent,\n                    custom,\n                    popLayout: mode === \"popLayout\",\n                    anchorX: handle.props.anchorX,\n                    anchorY: handle.props.anchorY,\n                    onExitComplete: () => remove(key),\n                },\n                withPresenceKey(child)\n            )\n        )\n    }\n}\n\n/**\n * Inside `AnimatePresence`: keep the exiting child until `exit` resolves,\n * like React's `safeToRemove`. Call it in each render while `isPresent()`\n * is `false`.\n *\n * @public\n */\nexport function holdPresence(handle: Handle<any, any>, exit: Promise<void>) {\n    const context = handle.context.get(PresenceChild) as\n        | PresenceChildContext\n        | undefined\n    context && !context.isPresent && context.exits.push(exit)\n}\n\n/**\n * Inside `AnimatePresence`: whether the component is present, or exiting.\n *\n * @public\n */\nexport function isPresent(handle: Handle<any, any>) {\n    const context = handle.context.get(PresenceChild) as\n        | PresenceChildContext\n        | undefined\n    return context?.isPresent ?? true\n}\n\n/**\n * Inside `AnimatePresence`: the `custom` value of `AnimatePresence`, while\n * the component exits.\n *\n * @public\n */\nexport function getPresenceData(handle: Handle<any, any>) {\n    return (\n        handle.context.get(PresenceChild) as PresenceChildContext | undefined\n    )?.custom\n}\n\n/**\n * Give the `layoutId`s inside an `id`, so separate groups don't animate\n * between each other.\n *\n * @public\n */\nexport function LayoutGroup(\n    handle: Handle<LayoutGroupProps, LayoutGroupProps>\n) {\n    return () => {\n        const parent = (handle.context.get(LayoutGroup) as LayoutGroupProps)?.id\n        const { id } = handle.props\n        handle.context.set({\n            id: parent && id ? parent + \"-\" + id : id || parent,\n        })\n        return handle.props.children\n    }\n}\n\n/**\n * Passes variant labels from a motion component to the motion components\n * inside it, so their server render starts in the inherited variant.\n */\nfunction VariantProvider(\n    handle: Handle<\n        { value: VariantContext; children?: RemixNode },\n        VariantContext\n    >\n) {\n    return () => {\n        handle.context.set(handle.props.value)\n        return handle.props.children\n    }\n}\n\nconst isLabels = (value: unknown): value is VariantLabels =>\n    typeof value === \"string\" || Array.isArray(value)\n\nfunction getVariantContext(\n    props: MotionProps,\n    parent?: VariantContext\n): VariantContext | undefined {\n    if (!isControllingVariants(props as any)) {\n        return props.inherit === false ? undefined : parent\n    }\n    return {\n        initial:\n            props.initial === false || isLabels(props.initial)\n                ? props.initial\n                : undefined,\n        animate: isLabels(props.animate) ? props.animate : undefined,\n    }\n}\n\nconst isSVGElement = (tag: string) =>\n    !tag.includes(\"-\") &&\n    (lowercaseSVGElements.includes(tag) || /[A-Z]/u.test(tag))\n\n/**\n * The values a motion element renders before it animates, as React's\n * `makeLatestValues`.\n */\nfunction makeLatestValues(\n    props: MotionProps,\n    context: VariantContext | undefined,\n    isSVG: boolean,\n    isInitialBlocked?: boolean\n) {\n    const values: ResolvedValues = {}\n\n    const motionValues = (\n        isSVG ? scrapeSVGMotionValuesFromProps : scrapeHTMLMotionValuesFromProps\n    )(props as any, {}, undefined as any)\n    for (const key in motionValues) {\n        values[key] = resolveMotionValue(motionValues[key])\n    }\n\n    let { initial, animate } = props\n    if (\n        context &&\n        isVariantNode(props as any) &&\n        !isControllingVariants(props as any) &&\n        props.inherit !== false\n    ) {\n        if (initial === undefined) initial = context.initial\n        if (animate === undefined) animate = context.animate\n    }\n\n    const isBlocked = isInitialBlocked || initial === false\n    const toSet = isBlocked ? animate : initial\n    if (!toSet || typeof toSet === \"boolean\") return values\n\n    for (const definition of Array.isArray(toSet) ? toSet : [toSet]) {\n        const resolved = resolveVariantFromProps(props as any, definition)\n        if (!resolved) continue\n\n        const { transitionEnd, transition, ...target } = resolved as Values\n        for (const key in target) {\n            let value = target[key]\n            if (Array.isArray(value)) {\n                value = value[isBlocked ? value.length - 1 : 0]\n            }\n            if (value !== null) values[key] = value\n        }\n        Object.assign(values, transitionEnd)\n    }\n\n    return values\n}\n\n/**\n * Split `style` into what Remix renders and what Motion owns: motion\n * values and transforms like `x`, which the VisualElement renders.\n */\nfunction splitStyle(style: MotionStyle | undefined, props: MotionProps) {\n    const css: Values = {}\n    for (const key in style) {\n        const value = style[key]\n        if (!isMotionValue(value) && !isForcedMotionValue(key, props as any)) {\n            css[key] = value\n        }\n    }\n    return css\n}\n\nconst createRenderState = () => ({\n    style: {},\n    vars: {},\n    transform: {},\n    transformOrigin: {},\n    attrs: {},\n})\n\n/**\n * The style, and attributes for SVG, that render `latestValues`.\n */\nfunction renderValues(\n    latestValues: ResolvedValues,\n    props: MotionProps,\n    tag: string,\n    isSVG: boolean\n): Values {\n    const state = createRenderState()\n    if (isSVG) {\n        buildSVGAttrs(\n            state,\n            latestValues,\n            isSVGTag(tag),\n            props.transformTemplate,\n            props.style\n        )\n    } else {\n        buildHTMLStyles(state, latestValues, props.transformTemplate)\n    }\n    return { ...state.attrs, style: { ...state.vars, ...state.style } }\n}\n\n/**\n * Run each callback even if an earlier one throws, and report the error.\n */\nconst run = (callback: VoidFunction) => {\n    try {\n        callback()\n    } catch (error) {\n        queueMicrotask(() => {\n            throw error\n        })\n    }\n}\n\n/**\n * Elements inserted in one commit are mounted together on the next\n * microtask, so every parent exists before its children look it up.\n * Remix inserts children before their parents.\n */\nlet insertQueue:\n    | Array<[create: VoidFunction, mount: VoidFunction, animate: VoidFunction]>\n    | undefined\n\nfunction queueInsert(\n    create: VoidFunction,\n    mount: VoidFunction,\n    animate: VoidFunction\n) {\n    if (!insertQueue) {\n        insertQueue = []\n        queueMicrotask(flushInserts)\n    }\n    insertQueue.push([create, mount, animate])\n}\n\n/**\n * Mount the elements inserted in this commit. Also runs before a layout\n * snapshot, in case they update again before the microtask.\n */\nfunction flushInserts() {\n    const queue = insertQueue\n    if (!queue) return\n    insertQueue = undefined\n\n    // Parents first, so children join their variant tree...\n    for (let i = queue.length - 1; i >= 0; i--) run(queue[i][0])\n    for (let i = queue.length - 1; i >= 0; i--) run(queue[i][1])\n    // ...and children animate first, as with React's effects.\n    for (const [, , animate] of queue) run(animate)\n}\n\n/**\n * Updates queued in one commit: every element gets its new props before\n * any of them animates, as React's insertion effects run before its\n * effects. So a variant change from a parent animates its children with\n * their new transitions.\n */\nlet updateQueue: Array<[update: VoidFunction, animate: VoidFunction]> | undefined\n\nfunction queueUpdate(update: VoidFunction, animate: VoidFunction) {\n    if (!updateQueue) {\n        updateQueue = []\n        queueMicrotask(() => {\n            const queue = updateQueue!\n            updateQueue = undefined\n            for (const [update] of queue) run(update)\n            // Parents render first, so animate in reverse: children first.\n            for (let i = queue.length - 1; i >= 0; i--) run(queue[i][1])\n        })\n    }\n    updateQueue.push([update, animate])\n}\n\ntype AnyVisualElement = HTMLVisualElement | SVGVisualElement\n\n/**\n * Elements created and not yet mounted, so children inserted in the same\n * commit can find their parent.\n */\nconst pendingElements = /*@__PURE__*/ new WeakMap<Element, AnyVisualElement>()\n\nfunction findParent(element: Element) {\n    for (let node = element.parentElement; node; node = node.parentElement) {\n        const parent = pendingElements.get(node) || visualElementStore.get(node)\n        if (parent) return parent as AnyVisualElement\n    }\n    return undefined\n}\n\ninterface Presence {\n    /**\n     * Start this element's exit, if it has one.\n     */\n    exit(): Promise<void> | undefined\n\n    /**\n     * Return to present after an exit was cancelled.\n     */\n    enter(): void\n}\n\n/**\n * Remix only tells the root of a removed subtree that it's leaving, so\n * the root starts the exits of the motion elements inside it, as\n * AnimatePresence does in React, and waits for all of them.\n */\nconst presences = /*@__PURE__*/ new WeakMap<Element, Presence>()\n\n/**\n * Take an exiting element out of the layout, where it is now, so the\n * elements around it move at once. Returns a function that puts it back.\n */\nfunction measurePop(node: Element) {\n    if (!(node instanceof HTMLElement)) return\n    const parent = node.offsetParent as HTMLElement | null\n    const { offsetTop: top, offsetLeft: left } = node\n    const { width, height } = getComputedStyle(node)\n    const w = parseFloat(width)\n    const h = parseFloat(height)\n    return {\n        top,\n        left,\n        right: (parent?.offsetWidth || 0) - w - left,\n        bottom: (parent?.offsetHeight || 0) - h - top,\n        width,\n        height,\n    }\n}\n\ntype PopBox = NonNullable<ReturnType<typeof measurePop>>\n\nfunction popLayout(\n    node: Element,\n    box = measurePop(node),\n    anchorX: \"left\" | \"right\" = \"left\",\n    anchorY: \"top\" | \"bottom\" = \"top\"\n) {\n    if (!(node instanceof HTMLElement) || !box) return\n    const { style } = node\n    const popped: Values = {\n        position: \"absolute\",\n        width: box.width,\n        height: box.height,\n        [anchorX]: box[anchorX] + \"px\",\n        [anchorY]: box[anchorY] + \"px\",\n    }\n    const previous: Values = {}\n    for (const key in popped) previous[key] = style[key as any]\n    Object.assign(style, popped)\n    return () => Object.assign(style, previous)\n}\n\nconst getLayoutNode = (node: Element) =>\n    acquireProjectionNode(node as HTMLElement)[0]\n\n/**\n * layoutId elements exiting within AnimatePresence, and how to finish\n * their exit. A layout snapshot resets node options, so they're marked\n * again after each one.\n */\nconst exitingLayouts = /*@__PURE__*/ new Map<Element, VoidFunction>()\n\nfunction markLayoutExit(node: Element) {\n    const projection = getLayoutNode(node)\n    projection.isPresent = false\n    /**\n     * Nodes created in this snapshot promote in document order, so an\n     * exiting node can resume from the one that takes over from it.\n     */\n    projection.resumeFrom = undefined\n    projection.setOptions({ onExitComplete: exitingLayouts.get(node) })\n    return projection\n}\n\n/**\n * Layout animations: every host with `layout` or `layoutId` that is about\n * to update shares one animateLayout() for the whole document. It must\n * snapshot synchronously in `beforeUpdate`, as Remix changes the DOM\n * straight after, and finishes when the first host commits.\n */\nlet layoutPass:\n    | { builder: LayoutAnimationBuilder; commit: VoidFunction }\n    | undefined\n\nfunction snapshotLayout() {\n    if (layoutPass) return\n    flushInserts()\n\n    let commit!: VoidFunction\n    const committed = new Promise<void>((resolve) => {\n        commit = () => {\n            // A late fallback mustn't end a newer pass.\n            if (layoutPass?.commit === commit) layoutPass = undefined\n            resolve()\n        }\n    })\n\n    layoutPass = {\n        builder: animateLayout(document.documentElement, () => committed),\n        commit,\n    }\n    flushLayoutSnapshots()\n    exitingLayouts.forEach((_, node) => markLayoutExit(node))\n\n    /**\n     * If the update is abandoned, don't block the next one.\n     */\n    requestAnimationFrame(commit)\n}\n\n/**\n * Animate to the latest props. Then forget which children entered with\n * this render, so the next children's `delayChildren` stagger starts\n * from 0, as in React.\n */\nfunction animateChanges(visualElement: AnyVisualElement | undefined) {\n    if (!visualElement) return\n    visualElement.animationState?.animateChanges()\n    visualElement.enteringChildren = undefined\n}\n\nlet presenceId = 0\n\nconst motionMixin = /*@__PURE__*/ createMixin<Element, [props: MotionProps]>(\n    (handle, tag) => {\n        const isSVG = isSVGElement(tag)\n        let props: MotionProps = {}\n        let element: Element | undefined\n        let visualElement: AnyVisualElement | undefined\n        let releaseProjection: VoidFunction | undefined\n        let initialValues: Values | undefined\n        let presence: PresenceContextProps | null = null\n        let isExiting = false\n        let isInitialBlocked: boolean | undefined\n        const id = String(presenceId++)\n\n        const getConfig = () =>\n            handle.context.get(MotionConfig) as MotionConfigProps | undefined\n        const getVariantParent = () =>\n            handle.context.get(VariantProvider) as VariantContext | undefined\n        const getGroup = () =>\n            handle.context.get(AnimatePresence) as PresenceGroup | undefined\n        const getPresenceChild = () =>\n            handle.context.get(PresenceChild) as\n                | PresenceChildContext\n                | undefined\n\n        /**\n         * Inside AnimatePresence: the exit this element started.\n         */\n        let exitDone: Promise<void> | undefined\n        let exitResolvers: VoidFunction[] = []\n        let pop: VoidFunction | undefined\n        let popBox: PopBox | undefined\n        let restoreLayout: VoidFunction | undefined\n\n        const getProps = (): MotionProps => {\n            const transition = props.transition ?? getConfig()?.transition\n            return transition ? { ...props, transition } : props\n        }\n\n        const getLayoutId = () => {\n            const group = (\n                handle.context.get(LayoutGroup) as LayoutGroupProps | undefined\n            )?.id\n            const { layoutId } = props\n            return group && layoutId ? group + \"-\" + layoutId : layoutId\n        }\n\n        const setPresence = (\n            isPresent: boolean,\n            onExitComplete?: VoidFunction\n        ) => {\n            const custom = getPresenceChild()?.custom\n            presence = {\n                id,\n                isPresent,\n                register: () => () => {},\n                onExitComplete,\n                custom: custom === undefined ? props.custom : custom,\n            }\n            visualElement!.update(getProps() as any, presence)\n            visualElement!.updateFeatures()\n        }\n\n        /**\n         * Drag measures layout, so it needs a projection node before its\n         * feature mounts, including when drag is turned on later. A\n         * layoutId element joins its stack when it mounts, as in React.\n         */\n        const acquireProjection = (node: Element) => {\n            if (!props.drag && !getLayoutId()) return\n            releaseProjection ||= acquireProjectionNode(node as HTMLElement)[1]\n            props.drag &&\n                getLayoutNode(node).setOptions({ alwaysMeasureLayout: true })\n        }\n\n        /**\n         * Exit within AnimatePresence: animate `exit`, and hand a layoutId\n         * over to the element that replaces it, as React's exit does.\n         */\n        const startExit = (layoutId?: string) => {\n            const current = visualElement!\n            const exits: Promise<void>[] = []\n\n            if (props.exit) {\n                isExiting = true\n                exits.push(\n                    new Promise<void>((resolve) => {\n                        exitResolvers.push(resolve)\n                        handle.queueTask(() => {\n                            if (visualElement === current && isExiting) {\n                                setPresence(false, resolve)\n                            } else resolve()\n                        })\n                    })\n                )\n            }\n\n            const node = element!\n            if (layoutId) {\n                exits.push(\n                    new Promise<void>((resolve) => {\n                        exitingLayouts.set(node, () => {\n                            exitingLayouts.delete(node)\n                            resolve()\n                        })\n                        /**\n                         * Measure the layout now, before the DOM changes,\n                         * and hand over as React does before its commit.\n                         */\n                        snapshotLayout()\n                        const projection = markLayoutExit(node)\n                        /**\n                         * If an element replaces this one, it crossfades\n                         * from it and calls onExitComplete.\n                         */\n                        projection.relegate() ||\n                            frame.postRender(() => {\n                                const stack = projection.getStack()\n                                if (!stack || stack.lead === projection) {\n                                    exitingLayouts.get(node)?.()\n                                }\n                            })\n                    })\n                )\n            }\n\n            // In case this element didn't update in the commit.\n            handle.queueTask(beforeLayout)\n            if (layoutId) handle.queueTask(() => layoutPass?.commit())\n\n            return Promise.all(exits).then(() => {})\n        }\n\n        handle.addEventListener(\"insert\", ({ node }) => {\n            element = node\n            loadRemixFeatures()\n\n            presences.set(node, {\n                exit: () => {\n                    if (!props.exit || !visualElement || isExiting) return\n                    isExiting = true\n                    return new Promise<void>((resolve) =>\n                        setPresence(false, resolve)\n                    )\n                },\n                enter: () => {\n                    if (!isExiting || !visualElement) return\n                    isExiting = false\n                    setPresence(true)\n                },\n            })\n\n            queueInsert(\n                () => {\n                    /**\n                     * Removed before it mounted.\n                     */\n                    if (element !== node) return\n\n                    const nodeProps = getProps()\n                    const VisualElement = isSVG\n                        ? SVGVisualElement\n                        : HTMLVisualElement\n                    visualElement = new VisualElement({\n                        parent: findParent(node),\n                        props: nodeProps as any,\n                        presenceContext: presence,\n                        blockInitialAnimation: isInitialBlocked,\n                        reducedMotionConfig: getConfig()?.reducedMotion,\n                        visualState: {\n                            latestValues: makeLatestValues(\n                                nodeProps,\n                                getVariantParent(),\n                                isSVG,\n                                isInitialBlocked\n                            ),\n                            renderState: createRenderState(),\n                        },\n                    }) as AnyVisualElement\n                    pendingElements.set(node, visualElement)\n                },\n                () => {\n                    pendingElements.delete(node)\n                    if (element !== node || !visualElement) return\n\n                    visualElement.mount(node as any)\n\n                    /**\n                     * The element rendered its first values. Render the\n                     * latest, in case they changed before it mounted.\n                     */\n                    visualElement.scheduleRenderMicrotask()\n\n                    acquireProjection(node)\n                    visualElement.updateFeatures()\n                },\n                () => {\n                    if (element === node) animateChanges(visualElement)\n                }\n            )\n        })\n\n        handle.addEventListener(\"beforeRemove\", (event) => {\n            const node = element\n            if (!node || isExiting || getPresenceChild()) return\n\n            const leaving = [node, ...node.querySelectorAll(\"*\")]\n                .map((el) => presences.get(el))\n                .filter(Boolean) as Presence[]\n            const exited = leaving\n                .map((presence) => presence.exit())\n                .filter(Boolean)\n\n            if (!exited.length) return\n\n            let cancel!: VoidFunction\n            const done = new Promise<void>((resolve) => {\n                cancel = resolve\n                Promise.all(exited).then(() => resolve())\n            })\n\n            event.persistNode((signal) => {\n                const reclaim = () => {\n                    leaving.forEach((presence) => presence.enter())\n                    cancel()\n                }\n                if (signal.aborted) reclaim()\n                signal.addEventListener(\"abort\", reclaim)\n                return done\n            })\n        })\n\n        handle.addEventListener(\"remove\", () => {\n            if (element) {\n                presences.delete(element)\n                // Removed by its own component mid-exit: its exits are done.\n                exitingLayouts.get(element)?.()\n            }\n            exitResolvers.forEach((resolve) => resolve())\n            exitResolvers = []\n            releaseProjection?.()\n            visualElement?.unmount()\n            releaseProjection = visualElement = element = undefined\n            presence = null\n        })\n\n        /**\n         * After the DOM changes, before the layout animation measures it:\n         * take an exiting element out of the layout.\n         */\n        const beforeLayout = () => {\n            pop?.()\n            pop = undefined\n        }\n\n        handle.addEventListener(\"beforeUpdate\", ({ node }) => {\n            /**\n             * Where this element is before the DOM changes, in case it\n             * exits in this update and leaves the layout.\n             */\n            if (getPresenceChild()?.popLayout && !exitDone) {\n                popBox = measurePop(node)\n            }\n\n            const hasLayout = props.layout || props.layoutId\n            if (hasLayout) snapshotLayout()\n            else if (!getPresenceChild()?.popLayout) return\n\n            /**\n             * Set the options once this render's props have arrived, after\n             * the snapshot has reset them, and before the layout animation\n             * starts.\n             */\n            queueMicrotask(() => {\n                beforeLayout()\n                // Removed in this update.\n                if (!hasLayout || element !== node) return\n                /**\n                 * The layout animation's node, which isn't always the\n                 * VisualElement's: animateLayout() can adopt the element\n                 * before it mounts.\n                 */\n                getLayoutNode(node).setOptions({\n                    transition: getProps().transition as any,\n                    animationType:\n                        typeof props.layout === \"string\"\n                            ? props.layout\n                            : \"both\",\n                    layoutAnchor: props.layoutAnchor,\n                    crossfade: props.layoutCrossfade,\n                })\n            })\n        })\n\n        handle.addEventListener(\"commit\", () => layoutPass?.commit())\n\n        return (nextProps, hostProps) => {\n            props = {\n                ...nextProps,\n                style: (hostProps.style as any) ?? nextProps.style,\n            }\n\n            /**\n             * Motion renders motion values passed as attributes, like\n             * <motion.circle cx={cx} />, so Remix never sees them.\n             */\n            const motionAttrs: Values = {}\n            for (const key in hostProps) {\n                const value = (hostProps as Values)[key]\n                if (key !== \"style\" && isMotionValue(value)) {\n                    ;(props as Values)[key] = value\n                    motionAttrs[key] = undefined\n                }\n            }\n\n            const { layout } = props\n            const layoutId = getLayoutId()\n\n            const presenceChild = getPresenceChild()\n            if (presenceChild && visualElement && element) {\n                if (!presenceChild.isPresent) {\n                    if (!exitDone) {\n                        exitDone = startExit(layoutId)\n                        /**\n                         * The outermost motion element of the child leaves\n                         * the layout. Parents render before children.\n                         */\n                        if (presenceChild.popLayout && !presenceChild.popped) {\n                            presenceChild.popped = true\n                            const node = element\n                            const { anchorX, anchorY } = presenceChild\n                            const box = popBox\n                            pop = () =>\n                                (restoreLayout = popLayout(\n                                    node,\n                                    box,\n                                    anchorX,\n                                    anchorY\n                                ))\n                        }\n                    }\n                    presenceChild.exits.push(exitDone)\n                } else if (exitDone) {\n                    exitDone = pop = undefined\n                    exitResolvers = []\n                    restoreLayout?.()\n                    restoreLayout = undefined\n                    if (isExiting) {\n                        isExiting = false\n                        setPresence(true)\n                    }\n                    if (exitingLayouts.delete(element)) {\n                        const projection = getLayoutNode(element)\n                        projection.isPresent = true\n                        projection.setOptions({ onExitComplete: undefined })\n                        projection.promote()\n                    }\n                }\n            }\n\n            /**\n             * A layoutId element inserted during a layout pass animates\n             * from the element it replaces, with its own transition.\n             */\n            if (layoutId && layoutPass && !element) {\n                layoutPass.builder.shared(layoutId, getProps().transition || {})\n            }\n\n            if (visualElement) {\n                const current = visualElement\n                handle.queueTask(() =>\n                    queueUpdate(\n                        () => {\n                            if (visualElement !== current) return\n                            current.update(getProps() as any, presence)\n                            acquireProjection(element!)\n                            current.updateFeatures()\n                        },\n                        () => visualElement === current && animateChanges(current)\n                    )\n                )\n            }\n\n            /**\n             * Render the values Motion starts from, on the server too. Keep\n             * rendering the same values on later renders, so Remix's\n             * per-property diff never overwrites what Motion animated.\n             */\n            if (!initialValues) {\n                const group = getGroup()\n                isInitialBlocked =\n                    group?.isFirstRender && group.props.initial === false\n                initialValues = renderValues(\n                    makeLatestValues(\n                        getProps(),\n                        getVariantParent(),\n                        isSVG,\n                        isInitialBlocked\n                    ),\n                    props,\n                    tag,\n                    isSVG\n                )\n            }\n\n            const { style: initialStyle, ...attrs } = initialValues\n            const patch: Values = { ...motionAttrs, ...attrs }\n            const style = { ...splitStyle(props.style, props), ...initialStyle }\n\n            /**\n             * As React: no ghost image, text selection or scrolling in the\n             * drag direction, and tap gestures are keyboard accessible.\n             */\n            if (!isSVG) {\n                const { drag } = props\n                if (drag && props.dragListener !== false) {\n                    patch.draggable = false\n                    style.userSelect =\n                        style.WebkitUserSelect =\n                        style.WebkitTouchCallout =\n                            \"none\"\n                    style.touchAction =\n                        drag === true ? \"none\" : `pan-${drag === \"x\" ? \"y\" : \"x\"}`\n                }\n                if (\n                    hostProps.tabIndex === undefined &&\n                    (props.onTap || props.onTapStart || props.whileTap)\n                ) {\n                    patch.tabIndex = 0\n                }\n            }\n            if (Object.keys(style).length) patch.style = style\n            if (layout) patch[\"data-layout\"] = layout === true ? \"\" : layout\n            if (layoutId) patch[\"data-layout-id\"] = layoutId\n\n            return createElement(handle.element, { ...hostProps, ...patch })\n        }\n    }\n)\n\nexport type MotionComponentProps = MotionProps & {\n    children?: RemixNode | MotionValue\n    [key: string]: any\n}\n\nexport type MotionComponent = (\n    handle: Handle<MotionComponentProps>\n) => () => RemixNode\n\nconst motionComponents = /*@__PURE__*/ new WeakSet<MotionComponent>()\n\nfunction createMotionComponent(tag: string): MotionComponent {\n    const component: MotionComponent = (handle) => {\n        let text: { value: MotionValue; initial: string } | undefined\n\n        return () => {\n            let { children, mix, presenceKey, ...rest } = handle.props\n            const motionProps: Values = {}\n            const hostProps: Values = {}\n\n            for (const key in rest) {\n                if (key === \"style\" || !isValidMotionProp(key)) {\n                    hostProps[key] = rest[key]\n                }\n                if (isValidMotionProp(key)) motionProps[key] = rest[key]\n            }\n\n            /**\n             * A motion value child renders its first value. Motion then\n             * updates the text, so keep rendering the same text.\n             */\n            if (isMotionValue(children)) {\n                motionProps.children = children\n                if (text?.value !== children) {\n                    text = { value: children, initial: String(children.get()) }\n                }\n                children = text.initial\n            }\n\n            const parent = handle.context.get(VariantProvider) as\n                | VariantContext\n                | undefined\n\n            return createElement(\n                tag,\n                {\n                    ...hostProps,\n                    ...(presenceKey != null && { key: presenceKey }),\n                    mix: [motionMixin(motionProps), mix],\n                },\n                createElement(\n                    VariantProvider,\n                    { value: getVariantContext(motionProps, parent) },\n                    children\n                )\n            )\n        }\n    }\n    motionComponents.add(component)\n    return component\n}\n\nconst components = /*@__PURE__*/ new Map<string, MotionComponent>()\n\ntype Motion = typeof motionMixin & {\n    [Tag in\n        | keyof HTMLElementTagNameMap\n        | keyof SVGElementTagNameMap]: MotionComponent\n}\n\n/**\n * Animate elements with Motion in Remix 3, with the same props as React's\n * `<motion.div>`:\n *\n * ```tsx\n * <motion.ul initial=\"hidden\" animate=\"visible\" variants={list}>\n *     {items.map((item) => (\n *         <motion.li key={item.id} variants={item} exit={{ opacity: 0 }} />\n *     ))}\n * </motion.ul>\n * ```\n *\n * `initial` is rendered on the server. `exit` keeps an element, and\n * everything inside it, in the DOM until its exit animation finishes.\n *\n * `motion(props)` is the same as a mixin for any element, as used by the\n * components.\n *\n * Experimental: Remix 3's component API is new, so this API can change\n * in a minor release.\n *\n * @public\n */\nexport const motion = /*@__PURE__*/ new Proxy(motionMixin, {\n    get(target, key, receiver) {\n        if (typeof key !== \"string\" || key in target) {\n            return Reflect.get(target, key, receiver)\n        }\n        let component = components.get(key)\n        if (!component) {\n            component = createMotionComponent(key)\n            components.set(key, component)\n        }\n        return component\n    },\n}) as Motion\n\nconst scopeMixin = /*@__PURE__*/ createMixin<\n    HTMLElement,\n    [setup: ScopeSetup, options?: ScopeOptions]\n>(\n    (handle) => {\n        let setup: ScopeSetup = () => {}\n        let scopeOptions: ScopeOptions | undefined\n        let scope: MotionScope | undefined\n\n        handle.addEventListener(\"insert\", ({ node }) => {\n            scope = createScope(node, (s) => setup(s), scopeOptions)\n        })\n\n        handle.addEventListener(\"remove\", () => {\n            scope?.cancel()\n            scope = undefined\n        })\n\n        return (nextSetup, nextOptions) => {\n            setup = nextSetup\n            scopeOptions = nextOptions\n            return handle.element\n        }\n    },\n    { ssr: false }\n)\n\n/**\n * The `mix` form of vanilla `scopeMotion()`: run `setup` in a scope rooted\n * at this element, so selectors resolve inside it. Everything it starts is\n * cancelled, and inline styles restored, when the element is removed.\n *\n * ```tsx\n * <ul mix={scopeMotion(() => {\n *     animate(\"li\", { opacity: [0, 1] }, { delay: stagger(0.05) })\n * })} />\n * ```\n *\n * @public\n */\nexport const scopeMotion = scopeMixin\n\n/**\n * Drag, or grab with Space and move with the arrow keys, to reorder a\n * list, with the same props as React's `Reorder`:\n *\n * ```tsx\n * <Reorder.Group values={items} onReorder={(next) => {\n *     items = next\n *     handle.update()\n * }}>\n *     {items.map((item) => (\n *         <Reorder.Item key={item} value={item}>{item}</Reorder.Item>\n *     ))}\n * </Reorder.Group>\n * ```\n *\n * @public\n */\nexport const Reorder = /*@__PURE__*/ createReorder(motion)\n"],"names":["createScope"],"mappings":"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"}