{"version":3,"file":"useIsMounted.mjs","sources":["../../../../src/lib/hooks/shared/useIsMounted.ts"],"sourcesContent":["/**\n * @file useIsMounted Hook\n * @description Utility hook to track component mounted state and prevent updates after unmount\n *\n * This hook is essential for preventing memory leaks and \"Can't perform a React state update\n * on an unmounted component\" warnings. Use it to guard async operations and state updates.\n *\n * @example\n * ```tsx\n * function DataFetcher() {\n *   const isMounted = useIsMounted();\n *   const [data, setData] = useState(null);\n *\n *   useEffect(() => {\n *     fetchData().then(result => {\n *       if (isMounted()) {\n *         setData(result);\n *       }\n *     });\n *   }, [isMounted]);\n *\n *   return <div>{data}</div>;\n * }\n * ```\n */\n\nimport { useRef, useEffect, useCallback } from 'react';\n\n/**\n * Hook to track if component is currently mounted\n *\n * Returns a function that returns true if the component is still mounted.\n * This is useful for preventing state updates on unmounted components.\n *\n * @returns Function that returns true if component is mounted\n */\nexport function useIsMounted(): () => boolean {\n  const mountedRef = useRef(false);\n\n  useEffect(() => {\n    mountedRef.current = true;\n    return () => {\n      mountedRef.current = false;\n    };\n  }, []);\n\n  return useCallback(() => mountedRef.current, []);\n}\n\n/**\n * Hook that provides both a check function and a guard wrapper\n *\n * @example\n * ```tsx\n * const { isMounted, ifMounted } = useMountedState();\n *\n * // Direct check\n * if (isMounted()) {\n *   setState(value);\n * }\n *\n * // Guard wrapper\n * ifMounted(() => setState(value));\n * ```\n */\nexport function useMountedState(): {\n  isMounted: () => boolean;\n  ifMounted: <T>(fn: () => T) => T | undefined;\n} {\n  const isMounted = useIsMounted();\n\n  const ifMounted = useCallback(\n    <T>(fn: () => T): T | undefined => {\n      if (isMounted()) {\n        return fn();\n      }\n      return undefined;\n    },\n    [isMounted]\n  );\n\n  return { isMounted, ifMounted };\n}\n"],"names":["useIsMounted","mountedRef","useRef","useEffect","useCallback","useMountedState","isMounted","ifMounted","fn"],"mappings":";AAoCO,SAASA,IAA8B;AAC5C,QAAMC,IAAaC,EAAO,EAAK;AAE/B,SAAAC,EAAU,OACRF,EAAW,UAAU,IACd,MAAM;AACX,IAAAA,EAAW,UAAU;AAAA,EACvB,IACC,CAAA,CAAE,GAEEG,EAAY,MAAMH,EAAW,SAAS,CAAA,CAAE;AACjD;AAkBO,SAASI,IAGd;AACA,QAAMC,IAAYN,EAAA,GAEZO,IAAYH;AAAA,IAChB,CAAII,MAA+B;AACjC,UAAIF;AACF,eAAOE,EAAA;AAAA,IAGX;AAAA,IACA,CAACF,CAAS;AAAA,EAAA;AAGZ,SAAO,EAAE,WAAAA,GAAW,WAAAC,EAAA;AACtB;"}