UNPKG

react-box-tools

Version:

Box tools react components, utils and hooks

2 lines (1 loc) 4.02 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("./useOutClick-BPW052ac.cjs"),d=require("./json-D1ap35pd.cjs"),n=require("react"),m=require("./useUpdateEffect-DyqkA7tm.cjs"),h=require("./useResizeObserver-kdwFPGIj.cjs"),E=require("./useDebounce-CBvTkINX.cjs"),b=(e,t)=>{const s=n.useCallback(()=>{if(!d.isDOM)return t;try{const r=window.localStorage.getItem(e);return r?d.parseJSON(r):t}catch(r){return console.warn(`Error reading localStorage key “${e}”:`,r),t}},[t,e]),[o,i]=n.useState(s),l=g(r=>{d.isDOM||console.warn(`Tried setting localStorage key “${e}” even though environment is not a client`);try{const a=r instanceof Function?r(o):r;window.localStorage.setItem(e,JSON.stringify(a)),i(a),window.dispatchEvent(new Event("local-storage"))}catch(a){console.warn(`Error setting localStorage key “${e}”:`,a)}});n.useEffect(()=>{i(s())},[s]);const w=n.useCallback(r=>{r!=null&&r.key&&r.key!==e||i(s())},[e,s]);return c.useEventListener("storage",w),c.useEventListener("local-storage",w),[o,l]};function g(e){const t=n.useRef(()=>{throw new Error("Cannot call an event handler while rendering.")});return c.useIsomorphicLayoutEffect(()=>{t.current=e},[e]),n.useCallback((...s)=>t.current(...s),[t])}function v(){const e=n.useRef(!0);return e.current?(e.current=!1,!0):e.current}function I(e,t){const s=n.useRef(e);c.useIsomorphicLayoutEffect(()=>{s.current=e},[e]),n.useEffect(()=>{if(!t&&t!==0)return;const o=setInterval(()=>{s.current()},t);return()=>{clearInterval(o)}},[t])}function L(e,t){const s=n.useRef(e);c.useIsomorphicLayoutEffect(()=>{s.current=e},[e]),n.useEffect(()=>{if(!t&&t!==0)return;const o=setTimeout(()=>{s.current()},t);return()=>{clearTimeout(o)}},[t])}function C(){const[e,t]=n.useState({width:0,height:0}),s=()=>{t({...e,width:window.innerWidth,height:window.innerHeight})};return c.useEventListener("resize",s),c.useIsomorphicLayoutEffect(()=>{s()},[]),e}function O(e,t){const s=n.useCallback(()=>{if(typeof window>"u")return t;try{const r=window.sessionStorage.getItem(e);return r?d.parseJSON(r):t}catch(r){return console.warn(`Error reading sessionStorage key “${e}”:`,r),t}},[t,e]),[o,i]=n.useState(s),l=g(r=>{typeof window>"u"&&console.warn(`Tried setting sessionStorage key “${e}” even though environment is not a client`);try{const a=r instanceof Function?r(o):r;window.sessionStorage.setItem(e,JSON.stringify(a)),i(a),window.dispatchEvent(new Event("session-storage"))}catch(a){console.warn(`Error setting sessionStorage key “${e}”:`,a)}});n.useEffect(()=>{i(s())},[s]);const w=n.useCallback(r=>{r!=null&&r.key&&r.key!==e||i(s())},[e,s]);return c.useEventListener("storage",w),c.useEventListener("session-storage",w),[o,l]}const T=(e,t=500,s)=>{const[o,i]=n.useState(s),l=n.useRef(Date.now());return n.useEffect(()=>{if(Date.now()>=l.current+t)l.current=Date.now(),o&&e(o);else{const w=setTimeout(()=>{l.current=Date.now(),o&&e(o)},t);return()=>{clearTimeout(w)}}},[o,t]),i},R=(e,t)=>{const[s,o]=n.useState({top:0,height:0,width:0,left:0}),i=()=>{if(e.current){const{scrollTop:f,scrollHeight:u,scrollLeft:S,scrollWidth:p}=e.current;o({top:f,height:u,width:p,left:S})}},l=E.useDebounce(i,t??500);return c.useEventListener("scroll",l,e),{...s,fn:(...f)=>{var u;(u=e.current)==null||u.scroll(...f)},to:(...f)=>{var u;(u=e.current)==null||u.scrollTo(...f)},by:(...f)=>{var u;(u=e.current)==null||u.scrollBy(...f)},intoView:f=>{var u;(u=e.current)==null||u.scrollIntoView(f)}}};exports.useEventListener=c.useEventListener;exports.useIsomorphicLayoutEffect=c.useIsomorphicLayoutEffect;exports.useOutClick=c.useOutClick;exports.useUpdateEffect=m.useUpdateEffect;exports.useIntersectionObserver=h.useIntersectionObserver;exports.useResizeObserver=h.useResizeObserver;exports.useDebounce=E.useDebounce;exports.useEventCallback=g;exports.useFirstRender=v;exports.useInterval=I;exports.useLocalStorage=b;exports.useScroll=R;exports.useSessionStorage=O;exports.useThrottle=T;exports.useTimeout=L;exports.useWindowResize=C;