{"mappings":";+JAuCM,SAAAA,EAAAC,EAAA,GAAA,CAGF,IAAAC,EAAAC,EAAAC,CAAA,cAEsB,MAAA,CAAA,GAAA,IAAA,iDAOtBC,EAAAC,EAAA,cAGQ,OAAAC,EAAAF,CAAA,CAER,EAAA,CAAAJ,CAAA,CAAA,kCAOA,MAAA,CAAAO,GAAAC,EAAA,CAAA,GAAAC,CAAA,EAAA,CAAA,EAAA,CACJ,cAuBI,OAAAF,EAAAL,EAAAC,CAAA,CAAA,CACJ,CAEM,SAAAI,EAAAN,EAAA,CACF,OAAAA,IAAA,KAAA,GAAAA,EAAA,SACJ","names":["usePresence","subscribe","context","useContext","PresenceContext","id","useId","register","isPresent","onExitComplete","safeToRemove"],"sources":["../esm/npm/framer-motion@12.38.0/node_modules/framer-motion/src/components/AnimatePresence/use-presence.ts"],"sourcesContent":["\"use client\"\n\nimport { useCallback, useContext, useEffect, useId } from \"react\"\nimport {\n    PresenceContext,\n    PresenceContextProps,\n} from \"../../context/PresenceContext\"\n\nexport type SafeToRemove = () =\u003e void\n\ntype AlwaysPresent = [true, null]\n\ntype Present = [true]\n\ntype NotPresent = [false, SafeToRemove]\n\n/**\n * When a component is the child of `AnimatePresence`, it can use `usePresence`\n * to access information about whether it's still present in the React tree.\n *\n * ```jsx\n * import { usePresence } from \"framer-motion\"\n *\n * export const Component = () =\u003e {\n *   const [isPresent, safeToRemove] = usePresence()\n *\n *   useEffect(() =\u003e {\n *     !isPresent \u0026\u0026 setTimeout(safeToRemove, 1000)\n *   }, [isPresent])\n *\n *   return \u003cdiv /\u003e\n * }\n * ```\n *\n * If `isPresent` is `false`, it means that a component has been removed from the tree,\n * but `AnimatePresence` won't really remove it until `safeToRemove` has been called.\n *\n * @public\n */\nexport function usePresence(\n    subscribe: boolean = true\n): AlwaysPresent | Present | NotPresent {\n    const context = useContext(PresenceContext)\n\n    if (context === null) return [true, null]\n\n    const { isPresent, onExitComplete, register } = context\n\n    // It's safe to call the following hooks conditionally (after an early return) because the context will always\n    // either be null or non-null for the lifespan of the component.\n\n    const id = useId()\n    useEffect(() =\u003e {\n        if (subscribe) {\n            return register(id)\n        }\n    }, [subscribe])\n\n    const safeToRemove = useCallback(\n        () =\u003e subscribe \u0026\u0026 onExitComplete \u0026\u0026 onExitComplete(id),\n        [id, onExitComplete, subscribe]\n    )\n\n    return !isPresent \u0026\u0026 onExitComplete ? [false, safeToRemove] : [true]\n}\n\n/**\n * Similar to `usePresence`, except `useIsPresent` simply returns whether or not the component is present.\n * There is no `safeToRemove` function.\n *\n * ```jsx\n * import { useIsPresent } from \"framer-motion\"\n *\n * export const Component = () =\u003e {\n *   const isPresent = useIsPresent()\n *\n *   useEffect(() =\u003e {\n *     !isPresent \u0026\u0026 console.log(\"I've been removed!\")\n *   }, [isPresent])\n *\n *   return \u003cdiv /\u003e\n * }\n * ```\n *\n * @public\n */\nexport function useIsPresent() {\n    return isPresent(useContext(PresenceContext))\n}\n\nexport function isPresent(context: PresenceContextProps | null) {\n    return context === null ? true : context.isPresent\n}\n"],"version":3}
