@erudilabs/use-fullscreen
Version:
use-fullscreen allows to enter/exit fullscreen
1 lines • 2.01 kB
JavaScript
var e=(e,n,r)=>new Promise(((l,t)=>{var u=e=>{try{o(r.next(e))}catch(e){t(e)}},c=e=>{try{o(r.throw(e))}catch(e){t(e)}},o=e=>e.done?l(e.value):Promise.resolve(e.value).then(u,c);o((r=r.apply(e,n)).next())}));import{useCallback as n,useRef as r,useState as l,useEffect as t}from"react";function u(){const e=window.document;return e.fullscreenElement||e.webkitFullscreenElement||e.mozFullScreenElement||e.msFullscreenElement}var c=["","webkit","moz","ms"];function o(e,{onFullScreen:n,onError:r}){return c.forEach((l=>{e.addEventListener(`${l}fullscreenchange`,n),e.addEventListener(`${l}fullscreenerror`,r)})),()=>{c.forEach((l=>{e.removeEventListener(`${l}fullscreenchange`,n),e.removeEventListener(`${l}fullscreenerror`,r)}))}}function i(){const[c,i]=l(!1),s=r(),m=n((e=>{i(e.target===u())}),[i]),d=n((e=>{i(!1),console.error(`[@erudilabs/use-fullscreen]: Error attempting full-screen mode method: ${e} (${e.target})`)}),[i]),f=n((()=>e(this,null,(function*(){u()?yield function(){return e(this,null,(function*(){const e=window.document;return"function"==typeof e.exitFullscreen?e.exitFullscreen():"function"==typeof e.msExitFullscreen?e.msExitFullscreen():"function"==typeof e.webkitExitFullscreen?e.webkitExitFullscreen():"function"==typeof e.mozCancelFullScreen?e.mozCancelFullScreen():null}))}():yield function(n){return e(this,null,(function*(){var e,r,l,t,u;const c=n;return(null==(e=c.requestFullscreen)?void 0:e.call(c))||(null==(r=c.msRequestFullscreen)?void 0:r.call(c))||(null==(l=c.webkitEnterFullscreen)?void 0:l.call(c))||(null==(t=c.webkitRequestFullscreen)?void 0:t.call(c))||(null==(u=c.mozRequestFullscreen)?void 0:u.call(c))}))}(s.current)}))),[]),a=n((e=>{s.current=null===e?window.document.documentElement:e}),[]);return t((()=>!s.current&&window.document?(s.current=window.document.documentElement,o(s.current,{onFullScreen:m,onError:d})):s.current?o(s.current,{onFullScreen:m,onError:d}):void 0),[]),{ref:a,toggle:f,fullscreen:c}}export{i as useFullscreen};//# sourceMappingURL=index.mjs.map