{"version":3,"file":"react-screen-wake-lock.cjs","sources":["../src/use-wake-lock.ts"],"sourcesContent":["import * as React from 'react';\n\nconst warn = (content: string) =>\n  console.warn('[react-screen-wake-lock]: ' + content);\n\nexport interface WakeLockOptions {\n  onError?: (error: Error) => void;\n  onRequest?: () => void;\n  onRelease?: EventListener;\n  reacquireOnPageVisible?: boolean;\n}\n\nexport const useWakeLock = ({\n  onError,\n  onRequest,\n  onRelease,\n  reacquireOnPageVisible = false,\n}: WakeLockOptions | undefined = {}) => {\n  const [released, setReleased] = React.useState<boolean | undefined>();\n  const wakeLock = React.useRef<WakeLockSentinel | null>(null);\n\n  // https://caniuse.com/mdn-api_wakelock\n  const isSupported = typeof window !== 'undefined' && 'wakeLock' in navigator;\n\n  const request = React.useCallback(\n    async (type: WakeLockType = 'screen') => {\n      const isWakeLockAlreadyDefined = wakeLock.current != null;\n      if (!isSupported) {\n        return warn(\n          \"Calling the `request` function has no effect, Wake Lock Screen API isn't supported\"\n        );\n      }\n      if (isWakeLockAlreadyDefined) {\n        return warn(\n          'Calling `request` multiple times without `release` has no effect'\n        );\n      }\n\n      try {\n        wakeLock.current = await navigator.wakeLock.request(type);\n\n        wakeLock.current.onrelease = (e: Event) => {\n          // Default to `true` - `released` API is experimental: https://caniuse.com/mdn-api_wakelocksentinel_released\n          setReleased((wakeLock.current && wakeLock.current.released) || true);\n          onRelease && onRelease(e);\n          wakeLock.current = null;\n        };\n\n        onRequest && onRequest();\n        setReleased((wakeLock.current && wakeLock.current.released) || false);\n      } catch (error: any) {\n        onError && onError(error);\n      }\n    },\n    [isSupported, onRequest, onError, onRelease]\n  );\n\n  const release = React.useCallback(async () => {\n    const isWakeLockUndefined = wakeLock.current == null;\n    if (!isSupported) {\n      return warn(\n        \"Calling the `release` function has no effect, Wake Lock Screen API isn't supported\"\n      );\n    }\n\n    if (isWakeLockUndefined) {\n      return warn('Calling `release` before `request` has no effect.');\n    }\n\n    wakeLock.current && (await wakeLock.current.release());\n  }, [isSupported]);\n\n  React.useEffect(() => {\n    if (reacquireOnPageVisible) {\n      const handleVisibilityChange = async () => {\n        if (wakeLock.current && document.visibilityState === 'visible') {\n          try {\n            wakeLock.current = await navigator.wakeLock.request('screen');\n          } catch (error: any) {\n            onError?.(error);\n          }\n        }\n      };\n\n      document.addEventListener('visibilitychange', handleVisibilityChange);\n      return () => {\n        document.removeEventListener('visibilitychange', handleVisibilityChange);\n      };\n    }\n    return undefined;\n  }, [reacquireOnPageVisible, onError]);\n\n  return {\n    isSupported,\n    request,\n    released,\n    release,\n    type: (wakeLock.current && wakeLock.current.type) || undefined,\n  };\n};\n"],"names":["warn","content","console","_temp","_ref","onError","onRequest","onRelease","_ref$reacquireOnPageV","reacquireOnPageVisible","_React$useState","React","useState","released","setReleased","wakeLock","useRef","isSupported","window","navigator","request","useCallback","type","isWakeLockAlreadyDefined","current","Promise","resolve","_temp2","_catch","then","_navigator$wakeLock$r","onrelease","e","error","reject","release","_wakeLock$current$rel","_temp3","useEffect","handleVisibilityChange","_temp5","document","visibilityState","_temp4","_navigator$wakeLock$r2","addEventListener","removeEventListener","undefined"],"mappings":"4YAEA,IAAMA,EAAO,SAACC,GAAe,OAC3BC,QAAQF,KAAK,6BAA+BC,EAAQ,sBAS3B,SAAHE,OAKeC,OAAA,IAAAD,EAAN,GAAEA,EAJjCE,EAAOD,EAAPC,QACAC,EAASF,EAATE,UACAC,EAASH,EAATG,UAASC,EAAAJ,EACTK,uBAAAA,OAAyB,IAAHD,GAAQA,EAE9BE,EAAgCC,EAAMC,WAA/BC,EAAQH,EAAEI,GAAAA,EAAWJ,EAAA,GACtBK,EAAWJ,EAAMK,OAAgC,MAGjDC,EAAgC,oBAAXC,QAA0B,aAAcC,UAE7DC,EAAUT,EAAMU,qBACbC,QAAA,IAAAA,IAAAA,EAAqB,UAAY,IACtC,IAAMC,EAA+C,MAApBR,EAASS,QAC1C,IAAKP,EACH,OAAAQ,QAAAC,QAAO1B,EACL,uFAGJ,GAAIuB,EACF,OAAAE,QAAAC,QAAO1B,EACL,qEAEH,IAAA2B,EAAAC,EAAA,kBAEGH,QAAAC,QACuBP,UAAUJ,SAASK,QAAQE,IAAKO,cAAAC,GAAzDf,EAASS,QAAOM,EAEhBf,EAASS,QAAQO,UAAY,SAACC,GAE5BlB,EAAaC,EAASS,SAAWT,EAASS,QAAQX,WAAa,GAC/DN,GAAaA,EAAUyB,GACvBjB,EAASS,QAAU,IACrB,EAEAlB,GAAaA,IACbQ,EAAaC,EAASS,SAAWT,EAASS,QAAQX,WAAa,EAAO,EACxE,EAASoB,SAAAA,GACP5B,GAAWA,EAAQ4B,EACrB,GAAC,OAAAR,QAAAC,QAAAC,GAAAA,EAAAE,KAAAF,EAAAE,KACH,WAAA,QAAA,EAAA,CAAC,MAAAG,GAAA,OAAAP,QAAAS,OAAAF,EACD,CAAA,EAAA,CAACf,EAAaX,EAAWD,EAASE,IAG9B4B,EAAUxB,EAAMU,YAAW,WAAA,IAE/B,OAOEI,QAAAC,QAPGT,EAD2C,MAApBF,EAASS,QAQ5BxB,EAAK,qDAGde,EAASS,QAAOC,QAAAC,QAAWX,EAASS,QAAQW,WAASN,cAZVO,GAYY,QAAFC,EAT5CrC,EACL,sFASN,CAAC,MAAAgC,GAAAP,OAAAA,QAAAS,OAAAF,EAAA,CAAA,EAAE,CAACf,IAsBJ,OApBAN,EAAM2B,UAAU,WACd,GAAI7B,EAAwB,CAC1B,IAAM8B,aAAsB,QAAcC,EAAA,WAAA,GACpCzB,EAASS,SAAwC,YAA7BiB,SAASC,gBAA6B,CAAA,IAAAC,EAAAf,EACxD,WAAA,OAAAH,QAAAC,QACuBP,UAAUJ,SAASK,QAAQ,WAASS,KAAA,SAAAe,GAA7D7B,EAASS,QAAOoB,CAA8C,EAChE,EAAC,SAAQX,GACA,MAAP5B,GAAAA,EAAU4B,EACZ,GAACU,GAAAA,GAAAA,EAAAd,KAAA,OAAAc,EAAAd,KAAAJ,WAAAA,EAAAA,CAAAA,CANqC,GAMrCA,OAAAA,QAAAC,QAAAc,GAAAA,EAAAX,KAAAW,EAAAX,KAEL,WAAA,QAAA,EAAA,CAAC,MAAAG,UAAAP,QAAAS,OAAAF,EAEDS,CAAAA,EACA,OADAA,SAASI,iBAAiB,mBAAoBN,GACvC,WACLE,SAASK,oBAAoB,mBAAoBP,EACnD,CACF,CAEF,EAAG,CAAC9B,EAAwBJ,IAErB,CACLY,YAAAA,EACAG,QAAAA,EACAP,SAAAA,EACAsB,QAAAA,EACAb,KAAOP,EAASS,SAAWT,EAASS,QAAQF,WAASyB,EAEzD"}