UNPKG

@studio-lumio/hooks

Version:

a compilation of react hooks we use to make our magic

3 lines (2 loc) 16.7 kB
var e=require("react"),n=require("@studio-freight/tempus");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=/*#__PURE__*/t(require("js-cookie"));function u(){var n=e.useState(!1),t=n[0],r=n[1];return e.useEffect(function(){r(!0)},[]),t}var o="undefined"!=typeof window?e.useLayoutEffect:e.useEffect;function i(e){return e?e.getBoundingClientRect():{bottom:0,height:0,left:0,right:0,top:0,width:0}}function c(n,t,r,u){var i=e.useRef(t);o(function(){i.current=t},[t]),e.useEffect(function(){var e,t=null!=(e=null==r?void 0:r.current)?e:window;if(t&&t.addEventListener){var o=function(e){return i.current(e)};return t.addEventListener(n,o,u),function(){t.removeEventListener(n,o,u)}}},[n,r,u])}var s=function(n){var t=e.useRef(n),r=e.useRef(),u=e.useRef(!1),o=e.useRef(!1),i=e.useState(0)[1];u.current&&(o.current=!0),e.useEffect(function(){return u.current||(r.current=t.current(),u.current=!0),i(function(e){return e+1}),function(){o.current&&r.current&&r.current()}},[])};function a(){var n=e.useRef(!0);return n.current?(n.current=!1,!0):n.current}var f=function(n){var t=e.useRef(n);t.current=n,s(function(){return function(){return t.current()}})};exports.useCookie=function(n){var t=e.useState(function(){return r.default.get(n)||null}),u=t[1];return[t[0],e.useCallback(function(e,t){r.default.set(n,e,t),u(e)},[n]),e.useCallback(function(){r.default.remove(n),u(null)},[n])]},exports.useCopyToClipboard=function(){var n=e.useState(null),t=n[1];return[n[0],function(e,n){try{var r;return null!=(r=navigator)&&r.clipboard?Promise.resolve(function(r,u){try{var o=Promise.resolve(navigator.clipboard.writeText(e)).then(function(){return t(e),n(),!0})}catch(e){return u(e)}return o&&o.then?o.then(void 0,u):o}(0,function(e){return console.warn("Copy failed",e),t(null),!1})):(console.warn("Clipboard not supported"),Promise.resolve(!1))}catch(e){return Promise.reject(e)}}]},exports.useDebounce=function(n,t){var r=e.useState(n),u=r[0],o=r[1];return e.useEffect(function(){var e=setTimeout(function(){return o(n)},t||500);return function(){clearTimeout(e)}},[n,t]),u},exports.useDebounceFn=function(n,t){var r=e.useRef(null),u=e.useRef(n);return e.useEffect(function(){u.current=n},[n]),function(){var e=arguments;r.current&&clearTimeout(r.current),r.current=setTimeout(function(){u.current.apply(u,[].slice.call(e))},t)}},exports.useDebug=function(){var n=u();return e.useMemo(function(){return n&&(window.location.href.includes("#debug")||"development"===process.env.NODE_ENV)&&!window.location.href.includes("#production")},[n])},exports.useDocumentReadyState=function(){var n=e.useState(function(){return"undefined"!=typeof document?document.readyState:"loading"}),t=n[0],r=n[1];return e.useEffect(function(){if("undefined"!=typeof document)return r(document.readyState),document.addEventListener("readystatechange",e,!1),function(){return document.removeEventListener("readystatechange",e,!1)};function e(){r(document.readyState)}},[]),t},exports.useDocumentTitle=function(n){e.useEffect(function(){document.title=n},[n])},exports.useEffectOnce=s,exports.useEventListener=c,exports.useFavicon=function(n){e.useEffect(function(){var e=document.querySelector("link[rel*='icon']")||document.createElement("link");e.type="image/x-icon",e.rel="shortcut icon",e.href=n,document.getElementsByTagName("head")[0].appendChild(e)},[n])},exports.useFirstMountState=a,exports.useFoucFix=function(){return e.useEffect(function(){console.debug("WARNING: Still using FOUC temp fix on route change. Has the Next.js bug not been fixed? See https://github.com/vercel/next.js/issues/17464");var e=Array.from(document.querySelectorAll('link[rel="stylesheet"][data-n-p]')).map(function(e){return{element:e,href:e.getAttribute("href")}});e.forEach(function(e){return e.element.removeAttribute("data-n-p")});var n=[],t=new MutationObserver(function(t){t.filter(function(e){var n=e.target;return"STYLE"===n.nodeName&&n.hasAttribute("data-n-href")}).map(function(e){var n=e.target;return{element:n,href:n.getAttribute("data-n-href")}}).forEach(function(e){var t=e.element,r=e.href;n.includes(r)?t.remove():(t.setAttribute("data-fouc-fix-n-href",r),t.removeAttribute("data-n-href"),n.push(r))}),e=e.reduce(function(e,t){var r=t.element;return n.includes(t.href)?r.remove():e.push(t),e},[])});return t.observe(document.head,{subtree:!0,attributeFilter:["media"]}),function(){return t.disconnect()}},[])},exports.useFrame=function(t,r){void 0===r&&(r=0),e.useEffect(function(){if(t)return n.raf.add(t,r),function(){return n.raf.remove(t)}},[t,r])},exports.useHover=function(){var n=e.useState(!1),t=n[0],r=n[1],u=e.useRef(null);return e.useEffect(function(){var e=u.current;if(e){var n=function(){r(!0)},t=function(){r(!1)};return e.addEventListener("mouseenter",n),e.addEventListener("mouseleave",t),function(){e.removeEventListener("mouseenter",n),e.removeEventListener("mouseleave",t)}}},[]),[u,t]},exports.useIOSToolbarState=function(){var n=e.useState(),t=n[0],r=n[1];return e.useEffect(function(){var e=window.navigator?window.navigator.userAgent:"",n=e.match(/iPad/i)||e.match(/iPhone/i),t=e.match(/WebKit/i),u=n&&t&&!e.match(/CriOS/i),o=window.innerHeight;function i(){var e=window.innerHeight;r(!(e-50>o))}if(u){if(!("standalone"in window.navigator)||!window.navigator.standalone)return document.addEventListener("scroll",i),function(){document.removeEventListener("scroll",i)};r(!1)}},[]),{isVisible:t}},exports.useIdle=function(n){void 0===n&&(n=6e4);var t=e.useState(!1),r=t[0],u=t[1];return e.useEffect(function(){var e,t,r,o=function(){u(!0)},i=(t=function(){u(!1),window.clearTimeout(e),e=window.setTimeout(o,n)},r=0,function(){var e=Date.now();e-r>=500&&(t(),r=e)}),c=function(){document.hidden||i()};return e=window.setTimeout(o,n),window.addEventListener("mousemove",i),window.addEventListener("mousedown",i),window.addEventListener("resize",i),window.addEventListener("keydown",i),window.addEventListener("touchstart",i),window.addEventListener("wheel",i),document.addEventListener("visibilitychange",c),function(){window.removeEventListener("mousemove",i),window.removeEventListener("mousedown",i),window.removeEventListener("resize",i),window.removeEventListener("keydown",i),window.removeEventListener("touchstart",i),window.removeEventListener("wheel",i),document.removeEventListener("visibilitychange",c),window.clearTimeout(e)}},[n]),r},exports.useIntersectionObserver=function(n,t){var r=void 0===n?{}:n,u=r.root,o=void 0===u?null:u,i=r.rootMargin,c=void 0===i?"0px":i,s=r.threshold,a=void 0===s?0:s,f=r.once,d=void 0!==f&&f,l=r.lazy,v=void 0!==l&&l,m=r.callback,w=void 0===m?function(){}:m;void 0===t&&(t=[]);var p=e.useRef(),h=e.useState(),E=h[0],y=h[1],g=e.useState(null),b=g[0],x=g[1];e.useEffect(function(){if(b){var e=new IntersectionObserver(function(n){var t=n[0];v?p.current=t:y(t),w(t),d&&t.isIntersecting&&e.disconnect()},{root:o,rootMargin:c,threshold:a});return e.observe(b),function(){e.disconnect()}}},[b,o,c,a,v,d].concat(t));var L=e.useCallback(function(){return p.current},[]);return[x,v?L:E]},exports.useInterval=function(n,t){var r=e.useRef(n);o(function(){r.current=n},[n]),e.useEffect(function(){if(t||0===t){var e=setInterval(function(){return r.current()},t);return function(){return clearInterval(e)}}},[t])},exports.useIsClient=u,exports.useIsMounted=function(){var n=e.useRef(!1),t=e.useCallback(function(){return n.current},[]);return e.useEffect(function(){return n.current=!0,function(){n.current=!1}},[]),t},exports.useIsTouchDevice=function(){var n=e.useState(!1),t=n[0],r=n[1],u=e.useCallback(function(){var e=!1;if("maxTouchPoints"in navigator)e=navigator.maxTouchPoints>0;else{var n=window.matchMedia("(pointer:coarse)");if(n&&"(pointer:coarse)"===n.media)e=!!n.matches;else{var t=window.navigator.userAgent;e=/\b(BlackBerry|webOS|iPhone|IEMobile)\b/i.test(t)||/\b(Android|Windows Phone|iPad|iPod)\b/i.test(t)}}r(!!e)},[]),o=e.useCallback(function(){u()},[u]);return e.useEffect(function(){return o(),window.addEventListener("resize",o,{passive:!0}),function(){window.removeEventListener("resize",o)}},[o]),t},exports.useIsVisible=function(n){var t=n.root,r=void 0===t?null:t,u=n.rootMargin,o=void 0===u?"0px":u,i=n.threshold,c=void 0===i?1:i,s=n.once,a=void 0!==s&&s,f=e.useRef(null),d=e.useRef(null),l=e.useState(!1),v=l[0],m=l[1],w=e.useCallback(function(e){d.current||(d.current=e)},[]),p=e.useCallback(function(e){0!==e.length&&m(e[0].isIntersecting)},[]);return e.useEffect(function(){return d.current&&(f.current=new IntersectionObserver(p,{root:r,rootMargin:o,threshold:c}),f.current.observe(d.current)),function(){f.current&&f.current.disconnect()}},[p]),e.useEffect(function(){a&&v&&f.current.disconnect()},[v]),{setRef:w,inView:v}},exports.useIsomorphicLayoutEffect=o,exports.useKeySequence=function(e){var n,t,r,u,o,i=e.sequence,c=e.callback;return t=(n={eventType:"keydown",keystrokeDelay:1e3})&&n.eventType||"keydown",r=n&&n.keystrokeDelay||1e3,u=[],o=Date.now(),document.addEventListener(t,function(e){var n=e.key.toLowerCase(),t=Date.now();t-o>r&&(u=[]),u.push(n),o=t,i===u.join("")&&c()}),null},exports.useLazyState=function(n,t){var r=e.useRef(n);return e.useEffect(function(){t(n,n)},[n,t]),[e.useCallback(function(){return r.current},[]),function(e){if("function"==typeof e){var n=e(r.current);return t(n,r.current),void(r.current=n)}e!==r.current&&(t(e,r.current),r.current=e)}]},exports.useList=function(n){void 0===n&&(n=[]);var t=e.useState(n),r=t[1];return[t[0],{set:e.useCallback(function(e){r(e)},[]),push:e.useCallback(function(e){r(function(n){return[].concat(n,[e])})},[]),removeAt:e.useCallback(function(e){r(function(n){return[].concat(n.slice(0,e),n.slice(e+1))})},[]),insertAt:e.useCallback(function(e,n){r(function(t){return[].concat(t.slice(0,e),[n],t.slice(e))})},[]),updateAt:e.useCallback(function(e,n){r(function(t){return t.map(function(t,r){return r===e?n:t})})},[]),clear:e.useCallback(function(){return r([])},[])}]},exports.useLocalStorage=function(n,t){var r=e.useState(function(){if("undefined"==typeof window)return t;try{var e=window.localStorage.getItem(n);return e?JSON.parse(e):t}catch(e){return console.log(e),t}}),u=r[0],o=r[1];return[u,function(e){try{var t=e instanceof Function?e(u):e;o(t),"undefined"!=typeof window&&window.localStorage.setItem(n,JSON.stringify(t))}catch(e){console.log(e)}},function(){try{"undefined"!=typeof window&&window.localStorage.removeItem(n)}catch(e){console.log(e)}}]},exports.useMediaQuery=function(n){var t=u(),r=e.useMemo(function(){if(t)try{return window.matchMedia(n)}catch(e){"production"!==process.env.NODE_ENV&&console.error(e)}return null},[n,t]),o=e.useState(void 0),i=o[0],c=o[1],s=e.useCallback(function(e){c(e.matches)},[]);return e.useEffect(function(){if(r)return s(r),r.addEventListener("change",s,{passive:!0}),function(){r.removeEventListener("change",s)}},[r,s,t]),i},exports.useObjectFit=function(n,t,r,u,o){void 0===n&&(n=1),void 0===t&&(t=1),void 0===r&&(r=1),void 0===u&&(u=1),void 0===o&&(o="cover");var i=e.useMemo(function(){if(!(n&&t&&r&&u))return[1,1];var e,i=n/t,c=r/u;if("contain"===o)e=i>c?t*c:n;else{if("cover"!==o)return[1,1];e=i>c?n:t*c}return[n/e,t/(e/c)]},[n,t,u,r,o]);return[1/i[0],1/i[1]]},exports.useOnClickOutside=function(e,n,t){void 0===t&&(t="mousedown"),c(t,function(t){var r=null==e?void 0:e.current;r&&!r.contains(t.target)&&n(t)})},exports.useOrientation=function(){var n=e.useState({angle:0,type:"landscape-primary"}),t=n[0],r=n[1];return e.useLayoutEffect(function(){var e,n=function(){var e=window.screen.orientation;r({angle:e.angle,type:e.type})},t=function(){r({type:"UNKNOWN",angle:window.orientation})};return null!=(e=window.screen)&&e.orientation?(n(),window.screen.orientation.addEventListener("change",n)):(t(),window.addEventListener("orientationchange",t)),function(){var e;null!=(e=window.screen)&&e.orientation?window.screen.orientation.removeEventListener("change",n):window.removeEventListener("orientationchange",t)}},[]),t},exports.usePageLeave=function(n,t){void 0===t&&(t=[]),e.useEffect(function(){if(n){var e=function(e){var t=(e=e||window.event).relatedTarget||e.toElement;t&&"HTML"!==t.nodeName||n()};return function(e){e&&e.addEventListener&&e.addEventListener.apply(e,[].slice.call(arguments,1))}(document,"mouseout",e),function(){!function(e){e&&e.removeEventListener&&e.removeEventListener.apply(e,[].slice.call(arguments,1))}(document,"mouseout",e)}}},t)},exports.usePageVisibility=function(){var n=e.useState(!document.hidden),t=n[0],r=n[1];return e.useEffect(function(){var e=function(){r(!document.hidden)};return document.addEventListener("visibilitychange",e),function(){document.removeEventListener("visibilitychange",e)}},[]),t},exports.useRealViewport=function(){var n=e.useCallback(function(){document.documentElement.style.setProperty("--vw",.01*document.documentElement.clientWidth+"px"),document.documentElement.style.setProperty("--dvh",.01*window.innerHeight+"px"),document.documentElement.style.setProperty("--svh",.01*document.documentElement.clientHeight+"px"),document.documentElement.style.setProperty("--lvh","1vh")},[]);return e.useLayoutEffect(function(){return window.addEventListener("resize",n,!1),n(),function(){window.removeEventListener("resize",n,!1)}},[n]),null},exports.useRect=function(n){var t=e.useState(i(n?n.current:null)),r=t[0],u=t[1],o=e.useCallback(function(){n.current&&u(i(n.current))},[n]);return e.useLayoutEffect(function(){var e=n.current;if(e){if(o(),"function"==typeof ResizeObserver){var t=new ResizeObserver(function(){return o()});return t.observe(e),function(){t&&(t.disconnect(),t=null)}}return window.addEventListener("resize",o),function(){window.removeEventListener("resize",o)}}},[n.current]),r},exports.useResizeObserver=function(n){var t=void 0===n?{}:n,r=t.lazy,u=void 0!==r&&r,o=t.debounce,i=void 0===o?500:o,c=t.box,s=void 0===c?"border-box":c,a=t.callback,f=void 0===a?function(){}:a,d=e.useRef(null),l=e.useState(null),v=l[0],m=l[1],w=e.useState(null),p=w[0],h=w[1],E=e.useRef(!1),y=e.useMemo(function(){return e=m,n=i,t=null,r=null,o=function(){var o=[].slice.call(arguments);if(!n)return e.apply(this,o);var i=this;return u(),r=function(){e.apply(i,o)},void(t=setTimeout(function(){t=null;var e=r;return r=null,e&&e()},n))},o.cancel=u=function(){t&&(clearTimeout(t),r=null,t=null)},o.flush=function(){var e=r;u(),e&&e()},o;var e,n,t,r,u,o},[i]),g=e.useCallback(function(e){var n=e[0];d.current=n,f(n),u||(E.current?m(n):y(n)),E.current=!1},[u,y,f]);e.useEffect(function(){if(p){E.current=!0;var e=new ResizeObserver(g);return e.observe(p,{box:s}),function(){e.disconnect(),y.cancel()}}},[p,i,s,g,y]);var b=e.useCallback(function(){return d.current},[]);return[h,u?b:v]},exports.useScript=function(n){e.useEffect(function(){var e=document.createElement("script");return e.src=n,e.async=!0,document.body.appendChild(e),function(){document.body.removeChild(e)}},[n])},exports.useSessionStorage=function(n,t){var r=e.useState(function(){if("undefined"==typeof window)return t;try{var e=window.sessionStorage.getItem(n);return e?JSON.parse(e):t}catch(e){return console.log(e),t}}),u=r[0],o=r[1];return[u,function(e){try{var t=e instanceof Function?e(u):e;o(t),"undefined"!=typeof window&&window.sessionStorage.setItem(n,JSON.stringify(t))}catch(e){console.log(e)}},function(){try{"undefined"!=typeof window&&window.sessionStorage.removeItem(n)}catch(e){console.log(e)}}]},exports.useSlots=function(n,t){void 0===n&&(n=[]),void 0===t&&(t=[]);var r=e.useMemo(function(){return t&&[t].flat()},[t]),u=e.useMemo(function(){return n&&[n].flat()},[n]);return e.useMemo(function(){if(r&&u){var e=u.map(function(e){var n;return null==(n=r.find(function(n){return n.type===e}))?void 0:n.props.children});return n[0]?e:e[0]}},[r,u])},exports.useThrottle=function(n,t){void 0===t&&(t=200);var r=e.useState(n),u=r[0],o=r[1],i=e.useRef(),c=e.useRef(null),s=e.useRef(0);return e.useEffect(function(){i.current?(c.current=n,s.current=!0):(o(n),i.current=setTimeout(function e(){s.current?(s.current=!1,o(c.current),i.current=setTimeout(e,t)):i.current=void 0},t))},[n]),f(function(){i.current&&clearTimeout(i.current)}),u},exports.useTimeout=function(n,t,r){void 0===r&&(r=[]);var u=e.useRef(n);e.useEffect(function(){u.current=n},[n]),e.useEffect(function(){var e=setTimeout(function(){return u.current()},t);return function(){clearTimeout(e)}},[t].concat(r))},exports.useUnmount=f,exports.useUpdateEffect=function(n,t){var r=a();e.useEffect(function(){if(!r)return n()},t)},exports.useWindowSize=function(){var n=e.useState({width:0,height:0}),t=n[0],r=n[1],u=function(){r({width:window.innerWidth,height:window.innerHeight})};return c("resize",u),o(function(){u()},[]),t}; //# sourceMappingURL=hooks.js.map