@alessiofrittoli/react-hooks 1.1.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/README.md +387 -73
  2. package/dist/eslint.js +1 -2
  3. package/dist/eslint.mjs +1 -2
  4. package/dist/index.d.mts +940 -11
  5. package/dist/index.d.ts +940 -11
  6. package/dist/index.js +1 -2
  7. package/dist/index.mjs +1 -2
  8. package/package.json +132 -145
  9. package/dist/browser-api/index.d.mts +0 -6
  10. package/dist/browser-api/index.d.ts +0 -6
  11. package/dist/browser-api/index.js +0 -2
  12. package/dist/browser-api/index.js.map +0 -1
  13. package/dist/browser-api/index.mjs +0 -2
  14. package/dist/browser-api/index.mjs.map +0 -1
  15. package/dist/browser-api/storage/index.d.mts +0 -4
  16. package/dist/browser-api/storage/index.d.ts +0 -4
  17. package/dist/browser-api/storage/index.js +0 -2
  18. package/dist/browser-api/storage/index.js.map +0 -1
  19. package/dist/browser-api/storage/index.mjs +0 -2
  20. package/dist/browser-api/storage/index.mjs.map +0 -1
  21. package/dist/browser-api/storage/useLocalStorage.d.mts +0 -11
  22. package/dist/browser-api/storage/useLocalStorage.d.ts +0 -11
  23. package/dist/browser-api/storage/useLocalStorage.js +0 -2
  24. package/dist/browser-api/storage/useLocalStorage.js.map +0 -1
  25. package/dist/browser-api/storage/useLocalStorage.mjs +0 -2
  26. package/dist/browser-api/storage/useLocalStorage.mjs.map +0 -1
  27. package/dist/browser-api/storage/useSessionStorage.d.mts +0 -11
  28. package/dist/browser-api/storage/useSessionStorage.d.ts +0 -11
  29. package/dist/browser-api/storage/useSessionStorage.js +0 -2
  30. package/dist/browser-api/storage/useSessionStorage.js.map +0 -1
  31. package/dist/browser-api/storage/useSessionStorage.mjs +0 -2
  32. package/dist/browser-api/storage/useSessionStorage.mjs.map +0 -1
  33. package/dist/browser-api/storage/useStorage.d.mts +0 -12
  34. package/dist/browser-api/storage/useStorage.d.ts +0 -12
  35. package/dist/browser-api/storage/useStorage.js +0 -2
  36. package/dist/browser-api/storage/useStorage.js.map +0 -1
  37. package/dist/browser-api/storage/useStorage.mjs +0 -2
  38. package/dist/browser-api/storage/useStorage.mjs.map +0 -1
  39. package/dist/browser-api/useIsPortrait.d.mts +0 -10
  40. package/dist/browser-api/useIsPortrait.d.ts +0 -10
  41. package/dist/browser-api/useIsPortrait.js +0 -2
  42. package/dist/browser-api/useIsPortrait.js.map +0 -1
  43. package/dist/browser-api/useIsPortrait.mjs +0 -2
  44. package/dist/browser-api/useIsPortrait.mjs.map +0 -1
  45. package/dist/browser-api/useMediaQuery.d.mts +0 -11
  46. package/dist/browser-api/useMediaQuery.d.ts +0 -11
  47. package/dist/browser-api/useMediaQuery.js +0 -2
  48. package/dist/browser-api/useMediaQuery.js.map +0 -1
  49. package/dist/browser-api/useMediaQuery.mjs +0 -2
  50. package/dist/browser-api/useMediaQuery.mjs.map +0 -1
  51. package/dist/dom-api/index.d.mts +0 -2
  52. package/dist/dom-api/index.d.ts +0 -2
  53. package/dist/dom-api/index.js +0 -2
  54. package/dist/dom-api/index.js.map +0 -1
  55. package/dist/dom-api/index.mjs +0 -2
  56. package/dist/dom-api/index.mjs.map +0 -1
  57. package/dist/dom-api/useFocusTrap.d.mts +0 -15
  58. package/dist/dom-api/useFocusTrap.d.ts +0 -15
  59. package/dist/dom-api/useFocusTrap.js +0 -2
  60. package/dist/dom-api/useFocusTrap.js.map +0 -1
  61. package/dist/dom-api/useFocusTrap.mjs +0 -2
  62. package/dist/dom-api/useFocusTrap.mjs.map +0 -1
  63. package/dist/dom-api/useScrollBlock.d.mts +0 -8
  64. package/dist/dom-api/useScrollBlock.d.ts +0 -8
  65. package/dist/dom-api/useScrollBlock.js +0 -2
  66. package/dist/dom-api/useScrollBlock.js.map +0 -1
  67. package/dist/dom-api/useScrollBlock.mjs +0 -2
  68. package/dist/dom-api/useScrollBlock.mjs.map +0 -1
  69. package/dist/eslint.js.map +0 -1
  70. package/dist/eslint.mjs.map +0 -1
  71. package/dist/index.js.map +0 -1
  72. package/dist/index.mjs.map +0 -1
  73. package/dist/misc/index.d.mts +0 -3
  74. package/dist/misc/index.d.ts +0 -3
  75. package/dist/misc/index.js +0 -2
  76. package/dist/misc/index.js.map +0 -1
  77. package/dist/misc/index.mjs +0 -2
  78. package/dist/misc/index.mjs.map +0 -1
  79. package/dist/misc/useIsClient.d.mts +0 -8
  80. package/dist/misc/useIsClient.d.ts +0 -8
  81. package/dist/misc/useIsClient.js +0 -2
  82. package/dist/misc/useIsClient.js.map +0 -1
  83. package/dist/misc/useIsClient.mjs +0 -2
  84. package/dist/misc/useIsClient.mjs.map +0 -1
  85. package/dist/misc/useIsFirstRender.d.mts +0 -9
  86. package/dist/misc/useIsFirstRender.d.ts +0 -9
  87. package/dist/misc/useIsFirstRender.js +0 -2
  88. package/dist/misc/useIsFirstRender.js.map +0 -1
  89. package/dist/misc/useIsFirstRender.mjs +0 -2
  90. package/dist/misc/useIsFirstRender.mjs.map +0 -1
  91. package/dist/misc/usePagination.d.mts +0 -12
  92. package/dist/misc/usePagination.d.ts +0 -12
  93. package/dist/misc/usePagination.js +0 -2
  94. package/dist/misc/usePagination.js.map +0 -1
  95. package/dist/misc/usePagination.mjs +0 -2
  96. package/dist/misc/usePagination.mjs.map +0 -1
  97. package/dist/misc/useUpdateEffect.d.mts +0 -9
  98. package/dist/misc/useUpdateEffect.d.ts +0 -9
  99. package/dist/misc/useUpdateEffect.js +0 -2
  100. package/dist/misc/useUpdateEffect.js.map +0 -1
  101. package/dist/misc/useUpdateEffect.mjs +0 -2
  102. package/dist/misc/useUpdateEffect.mjs.map +0 -1
package/dist/index.js CHANGED
@@ -1,2 +1 @@
1
- 'use strict';var react=require('react'),LocalStorage=require('@alessiofrittoli/web-utils/storage/LocalStorage'),SessionStorage=require('@alessiofrittoli/web-utils/storage/SessionStorage'),browserApi=require('@alessiofrittoli/web-utils/browser-api'),device=require('@alessiofrittoli/web-utils/device'),dom=require('@alessiofrittoli/web-utils/dom');var f=(e,t,r="local")=>{let s=react.useCallback(()=>(r==="local"?LocalStorage.LocalStorage:SessionStorage.SessionStorage).get(e)??t,[r,e,t]),[c,l]=react.useState(t),a=react.useCallback(o=>{l(i=>{let u=o instanceof Function?o(i):o;return (typeof window<"u"&&r==="local"?LocalStorage.LocalStorage:SessionStorage.SessionStorage).set(e,u),u});},[r,e]);return react.useEffect(()=>{l(s());},[s]),[c,a]};var z=(e,t)=>f(e,t,"local");var W=(e,t)=>f(e,t,"session");var E=e=>{let[t,r]=react.useState(browserApi.getMediaMatches(e)),s=react.useCallback(()=>r(browserApi.getMediaMatches(e)),[e]);return react.useEffect(()=>{let c=window.matchMedia(e);return s(),c.addEventListener("change",s),()=>{c.removeEventListener("change",s);}},[e,s]),t};var re=()=>E(device.portraitMediaQuery);var C=["input","select","textarea","button","[href]",'[tabindex]:not([tabindex="-1"])'].join(", "),ce=e=>{let[t,r]=react.useState(false),s=react.useRef(null),c=react.useCallback(a=>{s.current=document.activeElement;let o=a||e?.current||false;if(o)return r(o)},[e]),l=react.useCallback(()=>{s.current?.focus(),r(false);},[]);return react.useEffect(()=>{if(!t)return;let a=o=>{if(o.key!=="Tab")return;let i=Array.from(t.querySelectorAll(C)),u=i.at(0),m=i.at(-1);if(!o.shiftKey){document.activeElement===m&&(o.preventDefault(),u?.focus());return}document.activeElement===u&&(o.preventDefault(),m?.focus());};return document.addEventListener("keydown",a),()=>{document.removeEventListener("keydown",a);}},[t]),[c,l]};var fe=e=>{let t=react.useCallback(()=>dom.blockScroll(e?.current||void 0),[e]),r=react.useCallback(()=>dom.restoreScroll(e?.current||void 0),[e]);return [t,r]};var Te=()=>{let[e,t]=react.useState(false);return react.useEffect(()=>t(true),[]),e};var g=()=>{let e=react.useRef(true);return e.current?(e.current=false,true):e.current};var Re=(e,t)=>{let r=g();react.useEffect(()=>{if(!r)return e()},t);};exports.useFocusTrap=ce;exports.useIsClient=Te;exports.useIsFirstRender=g;exports.useIsPortrait=re;exports.useLocalStorage=z;exports.useMediaQuery=E;exports.useScrollBlock=fe;exports.useSessionStorage=W;exports.useStorage=f;exports.useUpdateEffect=Re;//# sourceMappingURL=index.js.map
2
- //# sourceMappingURL=index.js.map
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _react = require('react');var _LocalStorage = require('@alessiofrittoli/web-utils/storage/LocalStorage');var _SessionStorage = require('@alessiofrittoli/web-utils/storage/SessionStorage');var v=(e,r,t="local")=>{let n=_react.useCallback.call(void 0, ()=>_nullishCoalesce((t==="local"?_LocalStorage.LocalStorage:_SessionStorage.SessionStorage).get(e), () => (r)),[t,e,r]),[i,a]=_react.useState.call(void 0, r),o=_react.useCallback.call(void 0, s=>{a(l=>{let u=s instanceof Function?s(l):s;return(typeof window<"u"&&t==="local"?_LocalStorage.LocalStorage:_SessionStorage.SessionStorage).set(e,u),u})},[t,e]);return _react.useEffect.call(void 0, ()=>{a(n())},[n]),[i,o]};var D=(e,r)=>v(e,r,"local");var he=(e,r)=>v(e,r,"session");var w=()=>{let[e,r]=_react.useState.call(void 0, !1);return _react.useEffect.call(void 0, ()=>r(!0),[]),e};var I=()=>{let e=_react.useRef.call(void 0, !0);return e.current?(e.current=!1,!0):e.current};var M=(e,r)=>{let t=I();_react.useEffect.call(void 0, ()=>{if(!t)return e()},r)};var _browserapi = require('@alessiofrittoli/web-utils/browser-api');var E=e=>{let[r,t]=_react.useState.call(void 0, _browserapi.getMediaMatches.call(void 0, e)),n=_react.useCallback.call(void 0, ()=>t(_browserapi.getMediaMatches.call(void 0, e)),[e]);return _react.useEffect.call(void 0, ()=>{let i=window.matchMedia(e);return n(),i.addEventListener("change",n),()=>{i.removeEventListener("change",n)}},[e,n]),r};var Je=(e={})=>{let r=w(),t=E("(prefers-color-scheme: dark)"),{initial:n=t,docClassNames:i=[]}=e,[a,o]=D("dark-mode",n),s=_nullishCoalesce(a, () => (t)),[l,u]=i,c=_react.useRef.call(void 0, {light:"",dark:""});return M(()=>{o(t)},[t,o]),_react.useEffect.call(void 0, ()=>{l&&document.documentElement.classList.toggle(l,s),u&&document.documentElement.classList.toggle(u,!s)},[s,l,u]),_react.useEffect.call(void 0, ()=>{document.head.querySelectorAll('meta[name="theme-color"]').forEach(p=>{let m=p.getAttribute("media"),f=p.getAttribute("content");if(f){if(!m||m==="(prefers-color-scheme: light)"){c.current.light=f;return}c.current.dark=f}})},[]),M(()=>{let p=c.current.dark,m=c.current.light;a&&!p||!a&&!m||document.head.querySelectorAll('meta[name="theme-color"]').forEach(f=>{f.setAttribute("content",a?p:m)})},[a]),{isDarkMode:r?s:!1,isDarkOS:r?t:!1,toggleDarkMode:_react.useCallback.call(void 0, ()=>o(p=>!p),[o]),enableDarkMode:_react.useCallback.call(void 0, ()=>o(!0),[o]),disableDarkMode:_react.useCallback.call(void 0, ()=>o(!1),[o])}};function _e(e,r){let{target:t,query:n,options:i,listener:a,onLoad:o,onCleanUp:s}=r;_react.useEffect.call(void 0, ()=>{let l=Array.isArray(e)?e:[e],u=_nullishCoalesce((n?window.matchMedia(n):t&&"current"in t?t.current:t), () => (window));if(u.addEventListener)return _optionalChain([o, 'optionalCall', _2 => _2()]),l.map(c=>{u.addEventListener(c,a,i)}),()=>{l.map(c=>{u.removeEventListener(c,a,i)}),_optionalChain([s, 'optionalCall', _3 => _3()])}},[e,t,n,i,a,o,s])}var _device = require('@alessiofrittoli/web-utils/device');var ot=()=>E(_device.portraitMediaQuery);var ne=["input","select","textarea","button","[href]",'[tabindex]:not([tabindex="-1"])'].join(", "),ut= exports.useFocusTrap =e=>{let[r,t]=_react.useState.call(void 0, !1),n=_react.useRef.call(void 0, null),i=_react.useCallback.call(void 0, o=>{n.current=document.activeElement;let s=o||_optionalChain([e, 'optionalAccess', _4 => _4.current])||!1;if(s)return t(s)},[e]),a=_react.useCallback.call(void 0, ()=>{_optionalChain([n, 'access', _5 => _5.current, 'optionalAccess', _6 => _6.focus, 'call', _7 => _7()]),t(!1)},[]);return _react.useEffect.call(void 0, ()=>{if(!r)return;let o=s=>{if(s.key!=="Tab")return;let l=Array.from(r.querySelectorAll(ne)),u=l.at(0),c=l.at(-1);if(!s.shiftKey){document.activeElement===c&&(s.preventDefault(),_optionalChain([u, 'optionalAccess', _8 => _8.focus, 'call', _9 => _9()]));return}document.activeElement===u&&(s.preventDefault(),_optionalChain([c, 'optionalAccess', _10 => _10.focus, 'call', _11 => _11()]))};return document.addEventListener("keydown",o),()=>{document.removeEventListener("keydown",o)}},[r]),[i,a]};var pt=(e,r={})=>{let{initial:t=!1,once:n,amount:i,margin:a,root:o,enable:s=!0,onStart:l}=r,u=_react.useRef.call(void 0, !0),[c,p]=_react.useState.call(void 0, t),[m,f]=_react.useState.call(void 0, s),T=_react.useMemo.call(void 0, ()=>{if(!m||typeof IntersectionObserver>"u")return;let F=i==="all"?1:i==="some"?.5:i;try{return new IntersectionObserver(async([y],g)=>{if(!y)return;let k=y.isIntersecting;try{if(await _optionalChain([l, 'optionalCall', _12 => _12(y,g)]),!u.current)return;p(k)}catch(Q){console.error(Q)}k&&n&&g.disconnect()},{root:o||void 0,rootMargin:a,threshold:F})}catch(y){console.error(y)}},[o,a,i,n,m,l]);return _react.useEffect.call(void 0, ()=>{if(u.current=!0,!(!m||!e.current||!T))return T.observe(e.current),()=>{u.current=!1,T.disconnect()}},[e,T,m]),{inView:c,enabled:m,observer:T,setInView:p,setEnabled:f}};var _dom = require('@alessiofrittoli/web-utils/dom');var vt=e=>{let r=_react.useCallback.call(void 0, ()=>_dom.blockScroll.call(void 0, _optionalChain([e, 'optionalAccess', _13 => _13.current])||void 0),[e]),t=_react.useCallback.call(void 0, ()=>_dom.restoreScroll.call(void 0, _optionalChain([e, 'optionalAccess', _14 => _14.current])||void 0),[e]);return[r,t]};var A=(e,r={})=>{let{delay:t=1,args:n}=r;_react.useEffect.call(void 0, ()=>{let i=setTimeout(e,t,...n||[]);return()=>clearTimeout(i)},[t,n,e])};var kt=(e,r=500)=>{let[t,n]=_react.useState.call(void 0, e),i=_react.useMemo.call(void 0, ()=>[e],[e]);return A(n,{delay:r,args:i}),t};function U(e,r={}){let{delay:t=1,args:n,autoplay:i=!0,runOnStart:a=!1,updateState:o=!1}=r,s=_react.useRef.call(void 0, void 0),[l,u]=_react.useState.call(void 0, i),c=_react.useCallback.call(void 0, ()=>s.current?(clearInterval(s.current),s.current=void 0,!0):!1,[]),p=_react.useCallback.call(void 0, ()=>{let f=c();return a&&(n?e(...n):e()),s.current=setInterval(e,t,...n||[]),!f&&o&&u(!0),s.current},[t,n,o,a,e,c]),m=_react.useCallback.call(void 0, ()=>{c()&&o&&u(!1)},[o,c]);return _react.useEffect.call(void 0, ()=>{if(i)return p(),m},[i,p,m]),o?{isActive:l,start:p,stop:m}:{start:p,stop:m}}var Ht=(e,r={})=>{let{delay:t=1,args:n}=r;_react.useEffect.call(void 0, ()=>{let i=setInterval(e,t,...n||[]);return()=>clearInterval(i)},[t,n,e])};function At(e,r={}){let{autoplay:t=!0}=r,n=U(e,{autoplay:!1,...r}),{start:i,stop:a}=n,o=_react.useCallback.call(void 0, ()=>document.hidden?a():i(),[i,a]),s=_react.useCallback.call(void 0, ()=>{if(document.addEventListener("visibilitychange",o),!document.hidden)return i()},[i,o]),l=_react.useCallback.call(void 0, ()=>{a(),document.removeEventListener("visibilitychange",o)},[a,o]);return _react.useEffect.call(void 0, ()=>{if(t)return s(),l},[t,s,l]),{...n,start:s,stop:l}}function $t(e,r={}){let{delay:t=1,args:n,autoplay:i=!0,runOnStart:a=!1,updateState:o=!1}=r,s=_react.useRef.call(void 0, void 0),[l,u]=_react.useState.call(void 0, i),c=_react.useCallback.call(void 0, ()=>s.current?(clearTimeout(s.current),s.current=void 0,!0):!1,[]),p=_react.useCallback.call(void 0, ()=>{let f=c();return a&&(n?e(...n):e()),s.current=setTimeout(()=>{if(s.current=void 0,o&&u(!1),n)return e(...n);e()},t),!f&&o&&u(!0),s.current},[t,n,o,a,e,c]),m=_react.useCallback.call(void 0, ()=>{c()&&o&&u(!1)},[o,c]);return _react.useEffect.call(void 0, ()=>{if(i)return p(),m},[i,p,m]),o?{isActive:l,start:p,stop:m}:{start:p,stop:m}}exports.useDarkMode = Je; exports.useDebounce = kt; exports.useEventListener = _e; exports.useFocusTrap = ut; exports.useInView = pt; exports.useInterval = U; exports.useIntervalWhenVisible = At; exports.useIsClient = w; exports.useIsFirstRender = I; exports.useIsPortrait = ot; exports.useLightInterval = Ht; exports.useLightTimeout = A; exports.useLocalStorage = D; exports.useMediaQuery = E; exports.useScrollBlock = vt; exports.useSessionStorage = he; exports.useStorage = v; exports.useTimeout = $t; exports.useUpdateEffect = M;
package/dist/index.mjs CHANGED
@@ -1,2 +1 @@
1
- import {useCallback,useState,useEffect,useRef}from'react';import {LocalStorage}from'@alessiofrittoli/web-utils/storage/LocalStorage';import {SessionStorage}from'@alessiofrittoli/web-utils/storage/SessionStorage';import {getMediaMatches}from'@alessiofrittoli/web-utils/browser-api';import {portraitMediaQuery}from'@alessiofrittoli/web-utils/device';import {blockScroll,restoreScroll}from'@alessiofrittoli/web-utils/dom';var m=(e,t,r="local")=>{let s=useCallback(()=>(r==="local"?LocalStorage:SessionStorage).get(e)??t,[r,e,t]),[a,i]=useState(t),u=useCallback(o=>{i(f=>{let l=o instanceof Function?o(f):o;return (typeof window<"u"&&r==="local"?LocalStorage:SessionStorage).set(e,l),l});},[r,e]);return useEffect(()=>{i(s());},[s]),[a,u]};var G=(e,t)=>m(e,t,"local");var X=(e,t)=>m(e,t,"session");var b=e=>{let[t,r]=useState(getMediaMatches(e)),s=useCallback(()=>r(getMediaMatches(e)),[e]);return useEffect(()=>{let a=window.matchMedia(e);return s(),a.addEventListener("change",s),()=>{a.removeEventListener("change",s);}},[e,s]),t};var oe=()=>b(portraitMediaQuery);var y=["input","select","textarea","button","[href]",'[tabindex]:not([tabindex="-1"])'].join(", "),ae=e=>{let[t,r]=useState(false),s=useRef(null),a=useCallback(u=>{s.current=document.activeElement;let o=u||e?.current||false;if(o)return r(o)},[e]),i=useCallback(()=>{s.current?.focus(),r(false);},[]);return useEffect(()=>{if(!t)return;let u=o=>{if(o.key!=="Tab")return;let f=Array.from(t.querySelectorAll(y)),l=f.at(0),p=f.at(-1);if(!o.shiftKey){document.activeElement===p&&(o.preventDefault(),l?.focus());return}document.activeElement===l&&(o.preventDefault(),p?.focus());};return document.addEventListener("keydown",u),()=>{document.removeEventListener("keydown",u);}},[t]),[a,i]};var me=e=>{let t=useCallback(()=>blockScroll(e?.current||void 0),[e]),r=useCallback(()=>restoreScroll(e?.current||void 0),[e]);return [t,r]};var Se=()=>{let[e,t]=useState(false);return useEffect(()=>t(true),[]),e};var x=()=>{let e=useRef(true);return e.current?(e.current=false,true):e.current};var Le=(e,t)=>{let r=x();useEffect(()=>{if(!r)return e()},t);};export{ae as useFocusTrap,Se as useIsClient,x as useIsFirstRender,oe as useIsPortrait,G as useLocalStorage,b as useMediaQuery,me as useScrollBlock,X as useSessionStorage,m as useStorage,Le as useUpdateEffect};//# sourceMappingURL=index.mjs.map
2
- //# sourceMappingURL=index.mjs.map
1
+ import{useCallback as R,useEffect as j,useState as B}from"react";import{LocalStorage as h}from"@alessiofrittoli/web-utils/storage/LocalStorage";import{SessionStorage as D}from"@alessiofrittoli/web-utils/storage/SessionStorage";var E=(e,r,t="local")=>{let n=R(()=>(t==="local"?h:D).get(e)??r,[t,e,r]),[i,a]=B(r),o=R(s=>{a(l=>{let u=s instanceof Function?s(l):s;return(typeof window<"u"&&t==="local"?h:D).set(e,u),u})},[t,e]);return j(()=>{a(n())},[n]),[i,o]};var w=(e,r)=>E(e,r,"local");var De=(e,r)=>E(e,r,"session");import{useCallback as S,useEffect as V,useRef as Y}from"react";import{useEffect as N,useState as q}from"react";var I=()=>{let[e,r]=q(!1);return N(()=>r(!0),[]),e};import{useRef as P}from"react";var H=()=>{let e=P(!0);return e.current?(e.current=!1,!0):e.current};import{useEffect as z}from"react";var x=(e,r)=>{let t=H();z(()=>{if(!t)return e()},r)};import{useCallback as G,useEffect as J,useState as X}from"react";import{getMediaMatches as C}from"@alessiofrittoli/web-utils/browser-api";var M=e=>{let[r,t]=X(C(e)),n=G(()=>t(C(e)),[e]);return J(()=>{let i=window.matchMedia(e);return n(),i.addEventListener("change",n),()=>{i.removeEventListener("change",n)}},[e,n]),r};var Xe=(e={})=>{let r=I(),t=M("(prefers-color-scheme: dark)"),{initial:n=t,docClassNames:i=[]}=e,[a,o]=w("dark-mode",n),s=a??t,[l,u]=i,c=Y({light:"",dark:""});return x(()=>{o(t)},[t,o]),V(()=>{l&&document.documentElement.classList.toggle(l,s),u&&document.documentElement.classList.toggle(u,!s)},[s,l,u]),V(()=>{document.head.querySelectorAll('meta[name="theme-color"]').forEach(p=>{let m=p.getAttribute("media"),T=p.getAttribute("content");if(T){if(!m||m==="(prefers-color-scheme: light)"){c.current.light=T;return}c.current.dark=T}})},[]),x(()=>{let p=c.current.dark,m=c.current.light;a&&!p||!a&&!m||document.head.querySelectorAll('meta[name="theme-color"]').forEach(T=>{T.setAttribute("content",a?p:m)})},[a]),{isDarkMode:r?s:!1,isDarkOS:r?t:!1,toggleDarkMode:S(()=>o(p=>!p),[o]),enableDarkMode:S(()=>o(!0),[o]),disableDarkMode:S(()=>o(!1),[o])}};import{useEffect as Z}from"react";function et(e,r){let{target:t,query:n,options:i,listener:a,onLoad:o,onCleanUp:s}=r;Z(()=>{let l=Array.isArray(e)?e:[e],u=(n?window.matchMedia(n):t&&"current"in t?t.current:t)??window;if(u.addEventListener)return o?.(),l.map(c=>{u.addEventListener(c,a,i)}),()=>{l.map(c=>{u.removeEventListener(c,a,i)}),s?.()}},[e,t,n,i,a,o,s])}import{portraitMediaQuery as _}from"@alessiofrittoli/web-utils/device";var st=()=>M(_);import{useCallback as K,useEffect as ee,useRef as te,useState as ne}from"react";var re=["input","select","textarea","button","[href]",'[tabindex]:not([tabindex="-1"])'].join(", "),ct=e=>{let[r,t]=ne(!1),n=te(null),i=K(o=>{n.current=document.activeElement;let s=o||e?.current||!1;if(s)return t(s)},[e]),a=K(()=>{n.current?.focus(),t(!1)},[]);return ee(()=>{if(!r)return;let o=s=>{if(s.key!=="Tab")return;let l=Array.from(r.querySelectorAll(re)),u=l.at(0),c=l.at(-1);if(!s.shiftKey){document.activeElement===c&&(s.preventDefault(),u?.focus());return}document.activeElement===u&&(s.preventDefault(),c?.focus())};return document.addEventListener("keydown",o),()=>{document.removeEventListener("keydown",o)}},[r]),[i,a]};import{useEffect as oe,useMemo as se,useRef as ie,useState as W}from"react";var dt=(e,r={})=>{let{initial:t=!1,once:n,amount:i,margin:a,root:o,enable:s=!0,onStart:l}=r,u=ie(!0),[c,p]=W(t),[m,T]=W(s),y=se(()=>{if(!m||typeof IntersectionObserver>"u")return;let Q=i==="all"?1:i==="some"?.5:i;try{return new IntersectionObserver(async([v],k)=>{if(!v)return;let O=v.isIntersecting;try{if(await l?.(v,k),!u.current)return;p(O)}catch($){console.error($)}O&&n&&k.disconnect()},{root:o||void 0,rootMargin:a,threshold:Q})}catch(v){console.error(v)}},[o,a,i,n,m,l]);return oe(()=>{if(u.current=!0,!(!m||!e.current||!y))return y.observe(e.current),()=>{u.current=!1,y.disconnect()}},[e,y,m]),{inView:c,enabled:m,observer:y,setInView:p,setEnabled:T}};import{useCallback as A}from"react";import{blockScroll as ae,restoreScroll as ue}from"@alessiofrittoli/web-utils/dom";var Et=e=>{let r=A(()=>ae(e?.current||void 0),[e]),t=A(()=>ue(e?.current||void 0),[e]);return[r,t]};import{useMemo as le,useState as me}from"react";import{useEffect as ce}from"react";var U=(e,r={})=>{let{delay:t=1,args:n}=r;ce(()=>{let i=setTimeout(e,t,...n||[]);return()=>clearTimeout(i)},[t,n,e])};var Ot=(e,r=500)=>{let[t,n]=me(e),i=le(()=>[e],[e]);return U(n,{delay:r,args:i}),t};import{useCallback as b,useEffect as pe,useRef as de,useState as fe}from"react";function F(e,r={}){let{delay:t=1,args:n,autoplay:i=!0,runOnStart:a=!1,updateState:o=!1}=r,s=de(void 0),[l,u]=fe(i),c=b(()=>s.current?(clearInterval(s.current),s.current=void 0,!0):!1,[]),p=b(()=>{let T=c();return a&&(n?e(...n):e()),s.current=setInterval(e,t,...n||[]),!T&&o&&u(!0),s.current},[t,n,o,a,e,c]),m=b(()=>{c()&&o&&u(!1)},[o,c]);return pe(()=>{if(i)return p(),m},[i,p,m]),o?{isActive:l,start:p,stop:m}:{start:p,stop:m}}import{useEffect as Te}from"react";var Ct=(e,r={})=>{let{delay:t=1,args:n}=r;Te(()=>{let i=setInterval(e,t,...n||[]);return()=>clearInterval(i)},[t,n,e])};import{useCallback as L,useEffect as ye}from"react";function Ut(e,r={}){let{autoplay:t=!0}=r,n=F(e,{autoplay:!1,...r}),{start:i,stop:a}=n,o=L(()=>document.hidden?a():i(),[i,a]),s=L(()=>{if(document.addEventListener("visibilitychange",o),!document.hidden)return i()},[i,o]),l=L(()=>{a(),document.removeEventListener("visibilitychange",o)},[a,o]);return ye(()=>{if(t)return s(),l},[t,s,l]),{...n,start:s,stop:l}}import{useCallback as g,useEffect as ve,useRef as Ee,useState as Me}from"react";function jt(e,r={}){let{delay:t=1,args:n,autoplay:i=!0,runOnStart:a=!1,updateState:o=!1}=r,s=Ee(void 0),[l,u]=Me(i),c=g(()=>s.current?(clearTimeout(s.current),s.current=void 0,!0):!1,[]),p=g(()=>{let T=c();return a&&(n?e(...n):e()),s.current=setTimeout(()=>{if(s.current=void 0,o&&u(!1),n)return e(...n);e()},t),!T&&o&&u(!0),s.current},[t,n,o,a,e,c]),m=g(()=>{c()&&o&&u(!1)},[o,c]);return ve(()=>{if(i)return p(),m},[i,p,m]),o?{isActive:l,start:p,stop:m}:{start:p,stop:m}}export{Xe as useDarkMode,Ot as useDebounce,et as useEventListener,ct as useFocusTrap,dt as useInView,F as useInterval,Ut as useIntervalWhenVisible,I as useIsClient,H as useIsFirstRender,st as useIsPortrait,Ct as useLightInterval,U as useLightTimeout,w as useLocalStorage,M as useMediaQuery,Et as useScrollBlock,De as useSessionStorage,E as useStorage,jt as useTimeout,x as useUpdateEffect};
package/package.json CHANGED
@@ -1,146 +1,133 @@
1
1
  {
2
- "name": "@alessiofrittoli/react-hooks",
3
- "version": "1.1.0",
4
- "description": "TypeScript React utility Hooks",
5
- "author": {
6
- "name": "Alessio Frittoli",
7
- "email": "info@alessiofrittoli.it",
8
- "url": "https://alessiofrittoli.it"
9
- },
10
- "license": "MIT",
11
- "funding": [
12
- {
13
- "type": "github",
14
- "url": "https://github.com/sponsors/alessiofrittoli"
15
- }
16
- ],
17
- "keywords": [
18
- "react",
19
- "react-hooks"
20
- ],
21
- "homepage": "https://github.com/alessiofrittoli/react-hooks#readme",
22
- "bugs": {
23
- "url": "https://github.com/alessiofrittoli/react-hooks/issues",
24
- "email": "info@alessiofrittoli.it"
25
- },
26
- "repository": {
27
- "type": "git",
28
- "url": "git+https://github.com/alessiofrittoli/react-hooks.git"
29
- },
30
- "main": "./dist/index.js",
31
- "module": "./dist/index.mjs",
32
- "types": "./dist/index.d.ts",
33
- "files": [
34
- "dist"
35
- ],
36
- "exports": {
37
- ".": {
38
- "types": "./dist/index.d.ts",
39
- "import": "./dist/index.mjs",
40
- "require": "./dist/index.js"
41
- },
42
- "./browser-api": {
43
- "types": "./dist/browser-api/index.d.ts",
44
- "import": "./dist/browser-api/index.mjs",
45
- "require": "./dist/browser-api/index.js"
46
- },
47
- "./browser-api/storage": {
48
- "types": "./dist/browser-api/storage/index.d.ts",
49
- "import": "./dist/browser-api/storage/index.mjs",
50
- "require": "./dist/browser-api/storage/index.js"
51
- },
52
- "./dom-api": {
53
- "types": "./dist/dom-api/index.d.ts",
54
- "import": "./dist/dom-api/index.mjs",
55
- "require": "./dist/dom-api/index.js"
56
- },
57
- "./misc": {
58
- "types": "./dist/misc/index.d.ts",
59
- "import": "./dist/misc/index.mjs",
60
- "require": "./dist/misc/index.js"
61
- },
62
- "./eslint": {
63
- "types": "./dist/eslint.d.ts",
64
- "import": "./dist/eslint.mjs",
65
- "require": "./dist/eslint.js"
66
- }
67
- },
68
- "sideEffects": false,
69
- "scripts": {
70
- "//1a": "*********************************************************************",
71
- "//1b": "*********************** BUILD - LINT - RELEASE **********************",
72
- "//1c": "*********************************************************************",
73
- "build": "pnpm lint && pnpm test:ci && tsup",
74
- "build:watch": "tsup --watch",
75
- "lint": "eslint",
76
- "release": "node scripts/publish.js --verbose --npm",
77
- "//2a": "*********************************************************************",
78
- "//2b": "***************************** UNIT TESTS ****************************",
79
- "//2c": "*********************************************************************",
80
- "test": "jest --verbose",
81
- "test:watch": "jest --watchAll --verbose",
82
- "test:ci": "jest --ci --verbose",
83
- "//3a": "*********************************************************************",
84
- "//3b": "************************ UNIT TESTS COVERAGE ************************",
85
- "//3c": "*********************************************************************",
86
- "test:coverage": "pnpm test:watch --coverage",
87
- "test:coverage:ci": "pnpm test:ci --coverage",
88
- "test:serve-coverage": "http-server ./coverage/lcov-report --gzip true -p 0 -o --silent",
89
- "test:coverage:serve": "concurrently --prefix none --kill-others \"pnpm test:coverage\" \"pnpm test:serve-coverage\"",
90
- "//4a": "*********************************************************************",
91
- "//4b": "************************ TARGETED UNIT TESTS ************************",
92
- "//4c": "*********************************************************************",
93
- "test:storage": "pnpm test:watch browser-api/storage/*",
94
- "test:browser-api": "pnpm test:watch --testPathPattern='browser-api/(?!storage/).*\\.test\\.(js|jsx|ts|tsx)'",
95
- "test:dom-api": "pnpm test:watch dom-api/*",
96
- "test:misc": "pnpm test:watch misc/*"
97
- },
98
- "pnpm": {
99
- "onlyBuiltDependencies": [
100
- "@alessiofrittoli/type-utils",
101
- "esbuild"
102
- ]
103
- },
104
- "devDependencies": {
105
- "@alessiofrittoli/node-scripts": "^2.4.0",
106
- "@eslint/compat": "^1.2.8",
107
- "@eslint/eslintrc": "^3.3.1",
108
- "@eslint/js": "^9.25.1",
109
- "@jest/globals": "^29.7.0",
110
- "@testing-library/dom": "^10.4.0",
111
- "@testing-library/jest-dom": "^6.6.3",
112
- "@testing-library/react": "^16.3.0",
113
- "@testing-library/user-event": "^14.6.1",
114
- "@types/jest": "^29.5.14",
115
- "@types/node": "^22.15.2",
116
- "@types/react": "^19.1.2",
117
- "@types/react-dom": "^19.1.2",
118
- "concurrently": "^9.1.2",
119
- "dotenv": "^16.5.0",
120
- "eslint": "^9.25.1",
121
- "eslint-plugin-react": "^7.37.5",
122
- "eslint-plugin-react-hooks": "^5.2.0",
123
- "globals": "^16.0.0",
124
- "http-server": "^14.1.1",
125
- "jest": "^29.7.0",
126
- "jest-environment-jsdom": "^29.7.0",
127
- "react": "^19.1.0",
128
- "react-dom": "^19.1.0",
129
- "ts-jest": "^29.3.2",
130
- "ts-node": "^10.9.2",
131
- "tsup": "^8.4.0",
132
- "typescript": "^5.8.3",
133
- "typescript-eslint": "^8.31.0"
134
- },
135
- "dependencies": {
136
- "@alessiofrittoli/math-utils": "^1.12.0",
137
- "@alessiofrittoli/type-utils": "^1.7.0",
138
- "@alessiofrittoli/web-utils": "^1.9.1"
139
- },
140
- "peerDependencies": {
141
- "@types/react": "^19",
142
- "@types/react-dom": "^19",
143
- "react": "^19",
144
- "react-dom": "^19"
145
- }
146
- }
2
+ "name": "@alessiofrittoli/react-hooks",
3
+ "version": "2.0.0",
4
+ "description": "TypeScript React utility Hooks",
5
+ "author": {
6
+ "name": "Alessio Frittoli",
7
+ "email": "info@alessiofrittoli.it",
8
+ "url": "https://alessiofrittoli.it"
9
+ },
10
+ "license": "MIT",
11
+ "funding": [
12
+ {
13
+ "type": "github",
14
+ "url": "https://github.com/sponsors/alessiofrittoli"
15
+ }
16
+ ],
17
+ "keywords": [
18
+ "react",
19
+ "react-hooks"
20
+ ],
21
+ "homepage": "https://github.com/alessiofrittoli/react-hooks#readme",
22
+ "bugs": {
23
+ "url": "https://github.com/alessiofrittoli/react-hooks/issues",
24
+ "email": "info@alessiofrittoli.it"
25
+ },
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "git+https://github.com/alessiofrittoli/react-hooks.git"
29
+ },
30
+ "main": "./dist/index.js",
31
+ "module": "./dist/index.mjs",
32
+ "types": "./dist/index.d.ts",
33
+ "files": [
34
+ "dist"
35
+ ],
36
+ "exports": {
37
+ ".": {
38
+ "import": {
39
+ "types": "./dist/index.d.mts",
40
+ "default": "./dist/index.mjs"
41
+ },
42
+ "require": {
43
+ "types": "./dist/index.d.ts",
44
+ "default": "./dist/index.js"
45
+ }
46
+ },
47
+ "./eslint": {
48
+ "import": {
49
+ "types": "./dist/eslint.d.mts",
50
+ "default": "./dist/eslint.mjs"
51
+ },
52
+ "require": {
53
+ "types": "./dist/eslint.d.ts",
54
+ "default": "./dist/eslint.js"
55
+ }
56
+ }
57
+ },
58
+ "sideEffects": false,
59
+ "devDependencies": {
60
+ "@alessiofrittoli/event-emitter": "^1.4.0",
61
+ "@alessiofrittoli/node-scripts": "^2.5.0",
62
+ "@eslint/compat": "^1.2.9",
63
+ "@eslint/eslintrc": "^3.3.1",
64
+ "@eslint/js": "^9.26.0",
65
+ "@jest/globals": "^29.7.0",
66
+ "@testing-library/dom": "^10.4.0",
67
+ "@testing-library/jest-dom": "^6.6.3",
68
+ "@testing-library/react": "^16.3.0",
69
+ "@testing-library/user-event": "^14.6.1",
70
+ "@types/jest": "^29.5.14",
71
+ "@types/node": "^22.15.18",
72
+ "@types/react": "^19.1.4",
73
+ "@types/react-dom": "^19.1.5",
74
+ "concurrently": "^9.1.2",
75
+ "dotenv": "^16.5.0",
76
+ "eslint": "^9.26.0",
77
+ "eslint-plugin-react": "^7.37.5",
78
+ "eslint-plugin-react-hooks": "^5.2.0",
79
+ "globals": "^16.1.0",
80
+ "http-server": "^14.1.1",
81
+ "jest": "^29.7.0",
82
+ "jest-environment-jsdom": "^29.7.0",
83
+ "react": "^19.1.0",
84
+ "react-dom": "^19.1.0",
85
+ "ts-jest": "^29.3.3",
86
+ "ts-node": "^10.9.2",
87
+ "tsup": "^8.4.0",
88
+ "typescript": "^5.8.3",
89
+ "typescript-eslint": "^8.32.1"
90
+ },
91
+ "dependencies": {
92
+ "@alessiofrittoli/math-utils": "^1.13.0",
93
+ "@alessiofrittoli/type-utils": "^1.8.0",
94
+ "@alessiofrittoli/web-utils": "^1.10.0"
95
+ },
96
+ "peerDependencies": {
97
+ "@types/react": "^19",
98
+ "@types/react-dom": "^19",
99
+ "react": "^19",
100
+ "react-dom": "^19"
101
+ },
102
+ "scripts": {
103
+ "//1a": "*********************************************************************",
104
+ "//1b": "******************** DEV - BUILD - LINT - RELEASE *******************",
105
+ "//1c": "*********************************************************************",
106
+ "dev": "NODE_ENV=development tsup --watch",
107
+ "build:prod": "NODE_ENV=production tsup",
108
+ "build": "pnpm lint && pnpm test:ci && pnpm build:prod",
109
+ "lint": "eslint",
110
+ "release": "node scripts/publish.js --verbose --npm",
111
+ "//2a": "*********************************************************************",
112
+ "//2b": "***************************** UNIT TESTS ****************************",
113
+ "//2c": "*********************************************************************",
114
+ "test": "jest --verbose",
115
+ "test:watch": "jest --watchAll --verbose",
116
+ "test:ci": "jest --ci --verbose",
117
+ "//3a": "*********************************************************************",
118
+ "//3b": "************************ UNIT TESTS COVERAGE ************************",
119
+ "//3c": "*********************************************************************",
120
+ "test:coverage": "pnpm test:watch --coverage",
121
+ "test:coverage:ci": "pnpm test:ci --coverage",
122
+ "test:serve-coverage": "http-server ./coverage/lcov-report --gzip true -p 0 -o --silent",
123
+ "test:coverage:serve": "concurrently --prefix none --kill-others \"pnpm test:coverage\" \"pnpm test:serve-coverage\"",
124
+ "//4a": "*********************************************************************",
125
+ "//4b": "************************ TARGETED UNIT TESTS ************************",
126
+ "//4c": "*********************************************************************",
127
+ "test:storage": "pnpm test:watch browser-api/storage/*",
128
+ "test:browser-api": "pnpm test:watch --testPathPattern='browser-api/(?!storage/).*\\.test\\.(js|jsx|ts|tsx)'",
129
+ "test:dom-api": "pnpm test:watch dom-api/*",
130
+ "test:misc": "pnpm test:watch misc/*",
131
+ "test:timers": "pnpm test:watch timers/*"
132
+ }
133
+ }
@@ -1,6 +0,0 @@
1
- export { useStorage } from './storage/useStorage.mjs';
2
- export { useLocalStorage } from './storage/useLocalStorage.mjs';
3
- export { useSessionStorage } from './storage/useSessionStorage.mjs';
4
- export { useIsPortrait } from './useIsPortrait.mjs';
5
- export { useMediaQuery } from './useMediaQuery.mjs';
6
- import 'react';
@@ -1,6 +0,0 @@
1
- export { useStorage } from './storage/useStorage.js';
2
- export { useLocalStorage } from './storage/useLocalStorage.js';
3
- export { useSessionStorage } from './storage/useSessionStorage.js';
4
- export { useIsPortrait } from './useIsPortrait.js';
5
- export { useMediaQuery } from './useMediaQuery.js';
6
- import 'react';
@@ -1,2 +0,0 @@
1
- 'use strict';var react=require('react'),LocalStorage=require('@alessiofrittoli/web-utils/storage/LocalStorage'),SessionStorage=require('@alessiofrittoli/web-utils/storage/SessionStorage'),browserApi=require('@alessiofrittoli/web-utils/browser-api'),device=require('@alessiofrittoli/web-utils/device');var n=(e,t,r="local")=>{let o=react.useCallback(()=>(r==="local"?LocalStorage.LocalStorage:SessionStorage.SessionStorage).get(e)??t,[r,e,t]),[a,i]=react.useState(t),p=react.useCallback(c=>{i(S=>{let u=c instanceof Function?c(S):c;return (typeof window<"u"&&r==="local"?LocalStorage.LocalStorage:SessionStorage.SessionStorage).set(e,u),u});},[r,e]);return react.useEffect(()=>{i(o());},[o]),[a,p]};var R=(e,t)=>n(e,t,"local");var H=(e,t)=>n(e,t,"session");var g=e=>{let[t,r]=react.useState(browserApi.getMediaMatches(e)),o=react.useCallback(()=>r(browserApi.getMediaMatches(e)),[e]);return react.useEffect(()=>{let a=window.matchMedia(e);return o(),a.addEventListener("change",o),()=>{a.removeEventListener("change",o);}},[e,o]),t};var N=()=>g(device.portraitMediaQuery);exports.useIsPortrait=N;exports.useLocalStorage=R;exports.useMediaQuery=g;exports.useSessionStorage=H;exports.useStorage=n;//# sourceMappingURL=index.js.map
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/browser-api/storage/useStorage.ts","../../src/browser-api/storage/useLocalStorage.ts","../../src/browser-api/storage/useSessionStorage.ts","../../src/browser-api/useMediaQuery.ts","../../src/browser-api/useIsPortrait.ts"],"names":["useStorage","key","initialValue","type","readValue","useCallback","LocalStorage","SessionStorage","storedValue","setStoredValue","useState","setValue","value","valueToStore","useEffect","useLocalStorage","useSessionStorage","useMediaQuery","query","matches","setMatches","getMediaMatches","matchMediaChangeHandler","matchMedia","useIsPortrait","portraitMediaQuery"],"mappings":"6SAcO,IAAMA,EAAa,CACzBC,CAAAA,CACAC,CACAC,CAAAA,CAAAA,CAA+B,OACO,GAAA,CAEtC,IAAMC,CAAYC,CAAAA,iBAAAA,CAAa,KAC5BF,CAAS,GAAA,OAAA,CAAUG,0BAAeC,6BAClC,EAAA,GAAA,CAAQN,CAAI,CAAA,EAAKC,CACjB,CAAA,CAAEC,EAAMF,CAAKC,CAAAA,CAAa,CAAE,CAQzB,CAAA,CAAEM,EAAaC,CAAe,CAAA,CAAIC,cAAoBR,CAAAA,CAAa,CAQnES,CAAAA,CAAAA,CAAWN,kBAAiCO,CAAS,EAAA,CAE1DH,EAAgBD,CAAe,EAAA,CAC9B,IAAMK,CAAeD,CAAAA,CAAAA,YAAiB,QAAWA,CAAAA,CAAAA,CAAOJ,CAAY,CAAA,CAAII,EAEvE,OACA,CAAA,OAAO,OAAW,GAClBT,EAAAA,CAAAA,GAAS,QAAUG,yBAAeC,CAAAA,6BAAAA,EACjC,GAAKN,CAAAA,CAAAA,CAAKY,CAAa,CAAA,CAElBA,CACR,CAAE,EAGH,EAAG,CAAEV,CAAAA,CAAMF,CAAI,CAAE,CAAA,CAEjB,OAAAa,eAAAA,CAAW,IAAM,CAChBL,EAAgBL,CAAU,EAAE,EAC7B,CAAG,CAAA,CAAEA,CAAU,CAAE,CAAA,CAEV,CAAEI,CAAAA,CAAaG,CAAS,CAChC,ECpDaI,IAAAA,CAAAA,CAAkB,CAC9Bd,CACAC,CAAAA,CAAAA,GACIF,EAAYC,CAAKC,CAAAA,CAAAA,CAAc,OAAQ,ECHrC,IAAMc,EAAoB,CAChCf,CAAAA,CACAC,IACIF,CAAYC,CAAAA,CAAAA,CAAKC,EAAc,SAAU,ECCvC,IAAMe,CAAkBC,CAAAA,CAAAA,EAAmB,CAEjD,GAAM,CAAEC,CAASC,CAAAA,CAAW,EAAIV,cAAUW,CAAAA,0BAAAA,CAAiBH,CAAM,CAAE,CAAA,CAC7DI,CAA0BjB,CAAAA,iBAAAA,CAAa,IAAMe,CAAAA,CAAYC,2BAAiBH,CAAM,CAAE,EAAG,CAAEA,CAAM,CAAE,CAGrG,CAAA,OAAAJ,eAAW,CAAA,IAAM,CAEhB,IAAMS,EAAa,MAAO,CAAA,UAAA,CAAYL,CAAM,CAE5C,CAAA,OAAAI,GAEAC,CAAAA,CAAAA,CAAW,gBAAkB,CAAA,QAAA,CAAUD,CAAwB,CAAA,CAExD,IAAM,CACZC,CAAAA,CAAW,oBAAqB,QAAUD,CAAAA,CAAwB,EACnE,CAED,CAAA,CAAG,CAAEJ,CAAAA,CAAOI,CAAwB,CAAE,EAE/BH,CAER,ECxBaK,IAAAA,CAAAA,CAAgB,IAAMP,CAAAA,CAAeQ,yBAAmB","file":"index.js","sourcesContent":["import { useCallback, useEffect, useState } from 'react'\nimport { LocalStorage } from '@alessiofrittoli/web-utils/storage/LocalStorage'\nimport { SessionStorage } from '@alessiofrittoli/web-utils/storage/SessionStorage'\n\ntype Value<T>\t\t= T | undefined | null\ntype SetValue<T>\t= React.Dispatch<React.SetStateAction<T>>\n\n/**\n * Easly handle Local or Session Storage State.\n * \n * @param\tkey\t\t\t\tThe storage item key.\n * @param\tinitialValue\tThe storage item initial value.\n * @param\ttype\t\t\t( Optional ) The storage API to use. Default: `local`.\n */\nexport const useStorage = <T = string>(\n\tkey\t\t\t\t: string,\n\tinitialValue?\t: T,\n\ttype\t\t\t: 'local' | 'session' = 'local'\n): [ Value<T>, SetValue<Value<T>> ] => {\n\n\tconst readValue = useCallback( () => (\n\t\t( type === 'local' ? LocalStorage : SessionStorage )\n\t\t\t.get<T>( key ) ?? initialValue\n\t), [ type, key, initialValue ] )\n\n\n\t/**\n\t * State to store our value.\n\t * Pass initial state function to useState so logic is only executed once.\n\t * \n\t */\n\tconst [ storedValue, setStoredValue ] = useState<Value<T>>( initialValue )\n\n\t/**\n\t * Return a wrapped version of useState's setter function that\n\t * persists the new value to localStorage | sessionStorage.\n\t * \n\t * @param value The SetStateAction value.\n\t */\n\tconst setValue = useCallback<SetValue<Value<T>>>( value => {\n\n\t\tsetStoredValue( storedValue => {\n\t\t\tconst valueToStore = value instanceof Function ? value( storedValue ) : value\n\t\n\t\t\t;(\n\t\t\t\ttypeof window !== 'undefined' &&\n\t\t\t\ttype === 'local' ? LocalStorage : SessionStorage\n\t\t\t).set( key, valueToStore )\n\n\t\t\treturn valueToStore\n\t\t} )\n\n\n\t}, [ type, key ] )\n\n\tuseEffect( () => {\n\t\tsetStoredValue( readValue() )\n\t}, [ readValue ] )\n\n\treturn [ storedValue, setValue ]\n}","import { useStorage } from './useStorage'\n\n/**\n * useLocalStorage hook.\n * \n * @param\tkey\t\t\t\tThe local storage item key.\n * @param\tinitialValue\tThe local storage item initial value.\n */\nexport const useLocalStorage = <T = string>(\n\tkey\t\t\t\t: string,\n\tinitialValue?\t: T\n) => useStorage( key, initialValue, 'local' )","import { useStorage } from './useStorage'\n\n/**\n * useSessionStorage hook.\n * \n * @param\tkey\t\t\t\tThe session item key.\n * @param\tinitialValue\tThe session item initial value.\n */\nexport const useSessionStorage = <T = string>(\n\tkey\t\t\t\t: string,\n\tinitialValue?\t: T\n) => useStorage( key, initialValue, 'session' )","import { useCallback, useEffect, useState } from 'react'\nimport { getMediaMatches } from '@alessiofrittoli/web-utils/browser-api'\n\n\n/**\n * Get Document Media matches and listen for changes.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia)\n *\n * @param\tquery A string specifying the media query to parse into a `MediaQueryList`.\n * @returns\tA boolean value that returns `true` if the document currently matches the media query list, or `false` if not.\n */\nexport const useMediaQuery = ( query: string ) => {\n\n\tconst [ matches, setMatches ]\t= useState( getMediaMatches( query ) )\n\tconst matchMediaChangeHandler\t= useCallback( () => setMatches( getMediaMatches( query ) ), [ query ] )\n\n\n\tuseEffect( () => {\n\n\t\tconst matchMedia = window.matchMedia( query )\n\t\t// Triggered at the first client-side load\n\t\tmatchMediaChangeHandler()\n\t\t// Listen matchMedia\n\t\tmatchMedia.addEventListener( 'change', matchMediaChangeHandler )\n\n\t\treturn () => {\n\t\t\tmatchMedia.removeEventListener( 'change', matchMediaChangeHandler )\n\t\t}\n\n\t}, [ query, matchMediaChangeHandler ] )\n\n\treturn matches\n\t\n}","import { useMediaQuery } from './useMediaQuery'\nimport { portraitMediaQuery } from '@alessiofrittoli/web-utils/device'\n\n/**\n * Check if device is portrait oriented.\n * \n * State get updated when device orientation changes.\n *\n * @returns\t`true` if the device is portrait oriented, `false` otherwise.\n */\nexport const useIsPortrait = () => useMediaQuery( portraitMediaQuery )"]}
@@ -1,2 +0,0 @@
1
- import {useCallback,useState,useEffect}from'react';import {LocalStorage}from'@alessiofrittoli/web-utils/storage/LocalStorage';import {SessionStorage}from'@alessiofrittoli/web-utils/storage/SessionStorage';import {getMediaMatches}from'@alessiofrittoli/web-utils/browser-api';import {portraitMediaQuery}from'@alessiofrittoli/web-utils/device';var c=(e,t,r="local")=>{let o=useCallback(()=>(r==="local"?LocalStorage:SessionStorage).get(e)??t,[r,e,t]),[n,u]=useState(t),S=useCallback(i=>{u(T=>{let l=i instanceof Function?i(T):i;return (typeof window<"u"&&r==="local"?LocalStorage:SessionStorage).set(e,l),l});},[r,e]);return useEffect(()=>{u(o());},[o]),[n,S]};var A=(e,t)=>c(e,t,"local");var I=(e,t)=>c(e,t,"session");var p=e=>{let[t,r]=useState(getMediaMatches(e)),o=useCallback(()=>r(getMediaMatches(e)),[e]);return useEffect(()=>{let n=window.matchMedia(e);return o(),n.addEventListener("change",o),()=>{n.removeEventListener("change",o);}},[e,o]),t};var O=()=>p(portraitMediaQuery);export{O as useIsPortrait,A as useLocalStorage,p as useMediaQuery,I as useSessionStorage,c as useStorage};//# sourceMappingURL=index.mjs.map
2
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/browser-api/storage/useStorage.ts","../../src/browser-api/storage/useLocalStorage.ts","../../src/browser-api/storage/useSessionStorage.ts","../../src/browser-api/useMediaQuery.ts","../../src/browser-api/useIsPortrait.ts"],"names":["useStorage","key","initialValue","type","readValue","useCallback","LocalStorage","SessionStorage","storedValue","setStoredValue","useState","setValue","value","valueToStore","useEffect","useLocalStorage","useSessionStorage","useMediaQuery","query","matches","setMatches","getMediaMatches","matchMediaChangeHandler","matchMedia","useIsPortrait","portraitMediaQuery"],"mappings":"qVAcO,IAAMA,EAAa,CACzBC,CAAAA,CACAC,CACAC,CAAAA,CAAAA,CAA+B,OACO,GAAA,CAEtC,IAAMC,CAAYC,CAAAA,WAAAA,CAAa,KAC5BF,CAAS,GAAA,OAAA,CAAUG,aAAeC,cAClC,EAAA,GAAA,CAAQN,CAAI,CAAA,EAAKC,CACjB,CAAA,CAAEC,EAAMF,CAAKC,CAAAA,CAAa,CAAE,CAQzB,CAAA,CAAEM,EAAaC,CAAe,CAAA,CAAIC,QAAoBR,CAAAA,CAAa,CAQnES,CAAAA,CAAAA,CAAWN,YAAiCO,CAAS,EAAA,CAE1DH,EAAgBD,CAAe,EAAA,CAC9B,IAAMK,CAAeD,CAAAA,CAAAA,YAAiB,QAAWA,CAAAA,CAAAA,CAAOJ,CAAY,CAAA,CAAII,EAEvE,OACA,CAAA,OAAO,OAAW,GAClBT,EAAAA,CAAAA,GAAS,QAAUG,YAAeC,CAAAA,cAAAA,EACjC,GAAKN,CAAAA,CAAAA,CAAKY,CAAa,CAAA,CAElBA,CACR,CAAE,EAGH,EAAG,CAAEV,CAAAA,CAAMF,CAAI,CAAE,CAAA,CAEjB,OAAAa,SAAAA,CAAW,IAAM,CAChBL,EAAgBL,CAAU,EAAE,EAC7B,CAAG,CAAA,CAAEA,CAAU,CAAE,CAAA,CAEV,CAAEI,CAAAA,CAAaG,CAAS,CAChC,ECpDaI,IAAAA,CAAAA,CAAkB,CAC9Bd,CACAC,CAAAA,CAAAA,GACIF,EAAYC,CAAKC,CAAAA,CAAAA,CAAc,OAAQ,ECHrC,IAAMc,EAAoB,CAChCf,CAAAA,CACAC,IACIF,CAAYC,CAAAA,CAAAA,CAAKC,EAAc,SAAU,ECCvC,IAAMe,CAAkBC,CAAAA,CAAAA,EAAmB,CAEjD,GAAM,CAAEC,CAASC,CAAAA,CAAW,EAAIV,QAAUW,CAAAA,eAAAA,CAAiBH,CAAM,CAAE,CAAA,CAC7DI,CAA0BjB,CAAAA,WAAAA,CAAa,IAAMe,CAAAA,CAAYC,gBAAiBH,CAAM,CAAE,EAAG,CAAEA,CAAM,CAAE,CAGrG,CAAA,OAAAJ,SAAW,CAAA,IAAM,CAEhB,IAAMS,EAAa,MAAO,CAAA,UAAA,CAAYL,CAAM,CAE5C,CAAA,OAAAI,GAEAC,CAAAA,CAAAA,CAAW,gBAAkB,CAAA,QAAA,CAAUD,CAAwB,CAAA,CAExD,IAAM,CACZC,CAAAA,CAAW,oBAAqB,QAAUD,CAAAA,CAAwB,EACnE,CAED,CAAA,CAAG,CAAEJ,CAAAA,CAAOI,CAAwB,CAAE,EAE/BH,CAER,ECxBaK,IAAAA,CAAAA,CAAgB,IAAMP,CAAAA,CAAeQ,kBAAmB","file":"index.mjs","sourcesContent":["import { useCallback, useEffect, useState } from 'react'\nimport { LocalStorage } from '@alessiofrittoli/web-utils/storage/LocalStorage'\nimport { SessionStorage } from '@alessiofrittoli/web-utils/storage/SessionStorage'\n\ntype Value<T>\t\t= T | undefined | null\ntype SetValue<T>\t= React.Dispatch<React.SetStateAction<T>>\n\n/**\n * Easly handle Local or Session Storage State.\n * \n * @param\tkey\t\t\t\tThe storage item key.\n * @param\tinitialValue\tThe storage item initial value.\n * @param\ttype\t\t\t( Optional ) The storage API to use. Default: `local`.\n */\nexport const useStorage = <T = string>(\n\tkey\t\t\t\t: string,\n\tinitialValue?\t: T,\n\ttype\t\t\t: 'local' | 'session' = 'local'\n): [ Value<T>, SetValue<Value<T>> ] => {\n\n\tconst readValue = useCallback( () => (\n\t\t( type === 'local' ? LocalStorage : SessionStorage )\n\t\t\t.get<T>( key ) ?? initialValue\n\t), [ type, key, initialValue ] )\n\n\n\t/**\n\t * State to store our value.\n\t * Pass initial state function to useState so logic is only executed once.\n\t * \n\t */\n\tconst [ storedValue, setStoredValue ] = useState<Value<T>>( initialValue )\n\n\t/**\n\t * Return a wrapped version of useState's setter function that\n\t * persists the new value to localStorage | sessionStorage.\n\t * \n\t * @param value The SetStateAction value.\n\t */\n\tconst setValue = useCallback<SetValue<Value<T>>>( value => {\n\n\t\tsetStoredValue( storedValue => {\n\t\t\tconst valueToStore = value instanceof Function ? value( storedValue ) : value\n\t\n\t\t\t;(\n\t\t\t\ttypeof window !== 'undefined' &&\n\t\t\t\ttype === 'local' ? LocalStorage : SessionStorage\n\t\t\t).set( key, valueToStore )\n\n\t\t\treturn valueToStore\n\t\t} )\n\n\n\t}, [ type, key ] )\n\n\tuseEffect( () => {\n\t\tsetStoredValue( readValue() )\n\t}, [ readValue ] )\n\n\treturn [ storedValue, setValue ]\n}","import { useStorage } from './useStorage'\n\n/**\n * useLocalStorage hook.\n * \n * @param\tkey\t\t\t\tThe local storage item key.\n * @param\tinitialValue\tThe local storage item initial value.\n */\nexport const useLocalStorage = <T = string>(\n\tkey\t\t\t\t: string,\n\tinitialValue?\t: T\n) => useStorage( key, initialValue, 'local' )","import { useStorage } from './useStorage'\n\n/**\n * useSessionStorage hook.\n * \n * @param\tkey\t\t\t\tThe session item key.\n * @param\tinitialValue\tThe session item initial value.\n */\nexport const useSessionStorage = <T = string>(\n\tkey\t\t\t\t: string,\n\tinitialValue?\t: T\n) => useStorage( key, initialValue, 'session' )","import { useCallback, useEffect, useState } from 'react'\nimport { getMediaMatches } from '@alessiofrittoli/web-utils/browser-api'\n\n\n/**\n * Get Document Media matches and listen for changes.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia)\n *\n * @param\tquery A string specifying the media query to parse into a `MediaQueryList`.\n * @returns\tA boolean value that returns `true` if the document currently matches the media query list, or `false` if not.\n */\nexport const useMediaQuery = ( query: string ) => {\n\n\tconst [ matches, setMatches ]\t= useState( getMediaMatches( query ) )\n\tconst matchMediaChangeHandler\t= useCallback( () => setMatches( getMediaMatches( query ) ), [ query ] )\n\n\n\tuseEffect( () => {\n\n\t\tconst matchMedia = window.matchMedia( query )\n\t\t// Triggered at the first client-side load\n\t\tmatchMediaChangeHandler()\n\t\t// Listen matchMedia\n\t\tmatchMedia.addEventListener( 'change', matchMediaChangeHandler )\n\n\t\treturn () => {\n\t\t\tmatchMedia.removeEventListener( 'change', matchMediaChangeHandler )\n\t\t}\n\n\t}, [ query, matchMediaChangeHandler ] )\n\n\treturn matches\n\t\n}","import { useMediaQuery } from './useMediaQuery'\nimport { portraitMediaQuery } from '@alessiofrittoli/web-utils/device'\n\n/**\n * Check if device is portrait oriented.\n * \n * State get updated when device orientation changes.\n *\n * @returns\t`true` if the device is portrait oriented, `false` otherwise.\n */\nexport const useIsPortrait = () => useMediaQuery( portraitMediaQuery )"]}
@@ -1,4 +0,0 @@
1
- export { useStorage } from './useStorage.mjs';
2
- export { useLocalStorage } from './useLocalStorage.mjs';
3
- export { useSessionStorage } from './useSessionStorage.mjs';
4
- import 'react';
@@ -1,4 +0,0 @@
1
- export { useStorage } from './useStorage.js';
2
- export { useLocalStorage } from './useLocalStorage.js';
3
- export { useSessionStorage } from './useSessionStorage.js';
4
- import 'react';
@@ -1,2 +0,0 @@
1
- 'use strict';var react=require('react'),LocalStorage=require('@alessiofrittoli/web-utils/storage/LocalStorage'),SessionStorage=require('@alessiofrittoli/web-utils/storage/SessionStorage');var r=(e,o,t="local")=>{let n=react.useCallback(()=>(t==="local"?LocalStorage.LocalStorage:SessionStorage.SessionStorage).get(e)??o,[t,e,o]),[T,l]=react.useState(o),f=react.useCallback(s=>{l(g=>{let u=s instanceof Function?s(g):s;return (typeof window<"u"&&t==="local"?LocalStorage.LocalStorage:SessionStorage.SessionStorage).set(e,u),u});},[t,e]);return react.useEffect(()=>{l(n());},[n]),[T,f]};var b=(e,o)=>r(e,o,"local");var D=(e,o)=>r(e,o,"session");exports.useLocalStorage=b;exports.useSessionStorage=D;exports.useStorage=r;//# sourceMappingURL=index.js.map
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/browser-api/storage/useStorage.ts","../../../src/browser-api/storage/useLocalStorage.ts","../../../src/browser-api/storage/useSessionStorage.ts"],"names":["useStorage","key","initialValue","type","readValue","useCallback","LocalStorage","SessionStorage","storedValue","setStoredValue","useState","setValue","value","valueToStore","useEffect","useLocalStorage","useSessionStorage"],"mappings":"4LAcaA,IAAAA,CAAAA,CAAa,CACzBC,CAAAA,CACAC,CACAC,CAAAA,CAAAA,CAA+B,OACO,GAAA,CAEtC,IAAMC,CAAAA,CAAYC,iBAAa,CAAA,IAAA,CAC5BF,CAAS,GAAA,OAAA,CAAUG,0BAAeC,6BAClC,EAAA,GAAA,CAAQN,CAAI,CAAA,EAAKC,CACjB,CAAA,CAAEC,CAAMF,CAAAA,CAAAA,CAAKC,CAAa,CAAE,CAQzB,CAAA,CAAEM,CAAaC,CAAAA,CAAe,CAAIC,CAAAA,cAAAA,CAAoBR,CAAa,CAAA,CAQnES,CAAWN,CAAAA,iBAAAA,CAAiCO,CAAS,EAAA,CAE1DH,CAAgBD,CAAAA,CAAAA,EAAe,CAC9B,IAAMK,CAAeD,CAAAA,CAAAA,YAAiB,QAAWA,CAAAA,CAAAA,CAAOJ,CAAY,CAAII,CAAAA,CAAAA,CAEvE,OACA,CAAA,OAAO,MAAW,CAAA,GAAA,EAClBT,CAAS,GAAA,OAAA,CAAUG,yBAAeC,CAAAA,6BAAAA,EACjC,GAAKN,CAAAA,CAAAA,CAAKY,CAAa,CAAA,CAElBA,CACR,CAAE,EAGH,CAAA,CAAG,CAAEV,CAAAA,CAAMF,CAAI,CAAE,CAEjB,CAAA,OAAAa,eAAW,CAAA,IAAM,CAChBL,CAAAA,CAAgBL,CAAU,EAAE,EAC7B,CAAG,CAAA,CAAEA,CAAU,CAAE,CAEV,CAAA,CAAEI,CAAaG,CAAAA,CAAS,CAChC,ECpDaI,IAAAA,CAAAA,CAAkB,CAC9Bd,CAAAA,CACAC,CACIF,GAAAA,CAAAA,CAAYC,CAAKC,CAAAA,CAAAA,CAAc,OAAQ,ECH/Bc,IAAAA,CAAAA,CAAoB,CAChCf,CAAAA,CACAC,CACIF,GAAAA,CAAAA,CAAYC,CAAKC,CAAAA,CAAAA,CAAc,SAAU","file":"index.js","sourcesContent":["import { useCallback, useEffect, useState } from 'react'\nimport { LocalStorage } from '@alessiofrittoli/web-utils/storage/LocalStorage'\nimport { SessionStorage } from '@alessiofrittoli/web-utils/storage/SessionStorage'\n\ntype Value<T>\t\t= T | undefined | null\ntype SetValue<T>\t= React.Dispatch<React.SetStateAction<T>>\n\n/**\n * Easly handle Local or Session Storage State.\n * \n * @param\tkey\t\t\t\tThe storage item key.\n * @param\tinitialValue\tThe storage item initial value.\n * @param\ttype\t\t\t( Optional ) The storage API to use. Default: `local`.\n */\nexport const useStorage = <T = string>(\n\tkey\t\t\t\t: string,\n\tinitialValue?\t: T,\n\ttype\t\t\t: 'local' | 'session' = 'local'\n): [ Value<T>, SetValue<Value<T>> ] => {\n\n\tconst readValue = useCallback( () => (\n\t\t( type === 'local' ? LocalStorage : SessionStorage )\n\t\t\t.get<T>( key ) ?? initialValue\n\t), [ type, key, initialValue ] )\n\n\n\t/**\n\t * State to store our value.\n\t * Pass initial state function to useState so logic is only executed once.\n\t * \n\t */\n\tconst [ storedValue, setStoredValue ] = useState<Value<T>>( initialValue )\n\n\t/**\n\t * Return a wrapped version of useState's setter function that\n\t * persists the new value to localStorage | sessionStorage.\n\t * \n\t * @param value The SetStateAction value.\n\t */\n\tconst setValue = useCallback<SetValue<Value<T>>>( value => {\n\n\t\tsetStoredValue( storedValue => {\n\t\t\tconst valueToStore = value instanceof Function ? value( storedValue ) : value\n\t\n\t\t\t;(\n\t\t\t\ttypeof window !== 'undefined' &&\n\t\t\t\ttype === 'local' ? LocalStorage : SessionStorage\n\t\t\t).set( key, valueToStore )\n\n\t\t\treturn valueToStore\n\t\t} )\n\n\n\t}, [ type, key ] )\n\n\tuseEffect( () => {\n\t\tsetStoredValue( readValue() )\n\t}, [ readValue ] )\n\n\treturn [ storedValue, setValue ]\n}","import { useStorage } from './useStorage'\n\n/**\n * useLocalStorage hook.\n * \n * @param\tkey\t\t\t\tThe local storage item key.\n * @param\tinitialValue\tThe local storage item initial value.\n */\nexport const useLocalStorage = <T = string>(\n\tkey\t\t\t\t: string,\n\tinitialValue?\t: T\n) => useStorage( key, initialValue, 'local' )","import { useStorage } from './useStorage'\n\n/**\n * useSessionStorage hook.\n * \n * @param\tkey\t\t\t\tThe session item key.\n * @param\tinitialValue\tThe session item initial value.\n */\nexport const useSessionStorage = <T = string>(\n\tkey\t\t\t\t: string,\n\tinitialValue?\t: T\n) => useStorage( key, initialValue, 'session' )"]}
@@ -1,2 +0,0 @@
1
- import {useCallback,useState,useEffect}from'react';import {LocalStorage}from'@alessiofrittoli/web-utils/storage/LocalStorage';import {SessionStorage}from'@alessiofrittoli/web-utils/storage/SessionStorage';var r=(e,o,t="local")=>{let l=useCallback(()=>(t==="local"?LocalStorage:SessionStorage).get(e)??o,[t,e,o]),[f,u]=useState(o),g=useCallback(s=>{u(m=>{let c=s instanceof Function?s(m):s;return (typeof window<"u"&&t==="local"?LocalStorage:SessionStorage).set(e,c),c});},[t,e]);return useEffect(()=>{u(l());},[l]),[f,g]};var h=(e,o)=>r(e,o,"local");var E=(e,o)=>r(e,o,"session");export{h as useLocalStorage,E as useSessionStorage,r as useStorage};//# sourceMappingURL=index.mjs.map
2
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/browser-api/storage/useStorage.ts","../../../src/browser-api/storage/useLocalStorage.ts","../../../src/browser-api/storage/useSessionStorage.ts"],"names":["useStorage","key","initialValue","type","readValue","useCallback","LocalStorage","SessionStorage","storedValue","setStoredValue","useState","setValue","value","valueToStore","useEffect","useLocalStorage","useSessionStorage"],"mappings":"6MAcaA,IAAAA,CAAAA,CAAa,CACzBC,CAAAA,CACAC,CACAC,CAAAA,CAAAA,CAA+B,OACO,GAAA,CAEtC,IAAMC,CAAAA,CAAYC,WAAa,CAAA,IAAA,CAC5BF,CAAS,GAAA,OAAA,CAAUG,aAAeC,cAClC,EAAA,GAAA,CAAQN,CAAI,CAAA,EAAKC,CACjB,CAAA,CAAEC,CAAMF,CAAAA,CAAAA,CAAKC,CAAa,CAAE,CAQzB,CAAA,CAAEM,CAAaC,CAAAA,CAAe,CAAIC,CAAAA,QAAAA,CAAoBR,CAAa,CAAA,CAQnES,CAAWN,CAAAA,WAAAA,CAAiCO,CAAS,EAAA,CAE1DH,CAAgBD,CAAAA,CAAAA,EAAe,CAC9B,IAAMK,CAAeD,CAAAA,CAAAA,YAAiB,QAAWA,CAAAA,CAAAA,CAAOJ,CAAY,CAAII,CAAAA,CAAAA,CAEvE,OACA,CAAA,OAAO,MAAW,CAAA,GAAA,EAClBT,CAAS,GAAA,OAAA,CAAUG,YAAeC,CAAAA,cAAAA,EACjC,GAAKN,CAAAA,CAAAA,CAAKY,CAAa,CAAA,CAElBA,CACR,CAAE,EAGH,CAAA,CAAG,CAAEV,CAAAA,CAAMF,CAAI,CAAE,CAEjB,CAAA,OAAAa,SAAW,CAAA,IAAM,CAChBL,CAAAA,CAAgBL,CAAU,EAAE,EAC7B,CAAG,CAAA,CAAEA,CAAU,CAAE,CAEV,CAAA,CAAEI,CAAaG,CAAAA,CAAS,CAChC,ECpDaI,IAAAA,CAAAA,CAAkB,CAC9Bd,CAAAA,CACAC,CACIF,GAAAA,CAAAA,CAAYC,CAAKC,CAAAA,CAAAA,CAAc,OAAQ,ECH/Bc,IAAAA,CAAAA,CAAoB,CAChCf,CAAAA,CACAC,CACIF,GAAAA,CAAAA,CAAYC,CAAKC,CAAAA,CAAAA,CAAc,SAAU","file":"index.mjs","sourcesContent":["import { useCallback, useEffect, useState } from 'react'\nimport { LocalStorage } from '@alessiofrittoli/web-utils/storage/LocalStorage'\nimport { SessionStorage } from '@alessiofrittoli/web-utils/storage/SessionStorage'\n\ntype Value<T>\t\t= T | undefined | null\ntype SetValue<T>\t= React.Dispatch<React.SetStateAction<T>>\n\n/**\n * Easly handle Local or Session Storage State.\n * \n * @param\tkey\t\t\t\tThe storage item key.\n * @param\tinitialValue\tThe storage item initial value.\n * @param\ttype\t\t\t( Optional ) The storage API to use. Default: `local`.\n */\nexport const useStorage = <T = string>(\n\tkey\t\t\t\t: string,\n\tinitialValue?\t: T,\n\ttype\t\t\t: 'local' | 'session' = 'local'\n): [ Value<T>, SetValue<Value<T>> ] => {\n\n\tconst readValue = useCallback( () => (\n\t\t( type === 'local' ? LocalStorage : SessionStorage )\n\t\t\t.get<T>( key ) ?? initialValue\n\t), [ type, key, initialValue ] )\n\n\n\t/**\n\t * State to store our value.\n\t * Pass initial state function to useState so logic is only executed once.\n\t * \n\t */\n\tconst [ storedValue, setStoredValue ] = useState<Value<T>>( initialValue )\n\n\t/**\n\t * Return a wrapped version of useState's setter function that\n\t * persists the new value to localStorage | sessionStorage.\n\t * \n\t * @param value The SetStateAction value.\n\t */\n\tconst setValue = useCallback<SetValue<Value<T>>>( value => {\n\n\t\tsetStoredValue( storedValue => {\n\t\t\tconst valueToStore = value instanceof Function ? value( storedValue ) : value\n\t\n\t\t\t;(\n\t\t\t\ttypeof window !== 'undefined' &&\n\t\t\t\ttype === 'local' ? LocalStorage : SessionStorage\n\t\t\t).set( key, valueToStore )\n\n\t\t\treturn valueToStore\n\t\t} )\n\n\n\t}, [ type, key ] )\n\n\tuseEffect( () => {\n\t\tsetStoredValue( readValue() )\n\t}, [ readValue ] )\n\n\treturn [ storedValue, setValue ]\n}","import { useStorage } from './useStorage'\n\n/**\n * useLocalStorage hook.\n * \n * @param\tkey\t\t\t\tThe local storage item key.\n * @param\tinitialValue\tThe local storage item initial value.\n */\nexport const useLocalStorage = <T = string>(\n\tkey\t\t\t\t: string,\n\tinitialValue?\t: T\n) => useStorage( key, initialValue, 'local' )","import { useStorage } from './useStorage'\n\n/**\n * useSessionStorage hook.\n * \n * @param\tkey\t\t\t\tThe session item key.\n * @param\tinitialValue\tThe session item initial value.\n */\nexport const useSessionStorage = <T = string>(\n\tkey\t\t\t\t: string,\n\tinitialValue?\t: T\n) => useStorage( key, initialValue, 'session' )"]}
@@ -1,11 +0,0 @@
1
- import * as react from 'react';
2
-
3
- /**
4
- * useLocalStorage hook.
5
- *
6
- * @param key The local storage item key.
7
- * @param initialValue The local storage item initial value.
8
- */
9
- declare const useLocalStorage: <T = string>(key: string, initialValue?: T) => [T | null | undefined, (value: react.SetStateAction<T | null | undefined>) => void];
10
-
11
- export { useLocalStorage };
@@ -1,11 +0,0 @@
1
- import * as react from 'react';
2
-
3
- /**
4
- * useLocalStorage hook.
5
- *
6
- * @param key The local storage item key.
7
- * @param initialValue The local storage item initial value.
8
- */
9
- declare const useLocalStorage: <T = string>(key: string, initialValue?: T) => [T | null | undefined, (value: react.SetStateAction<T | null | undefined>) => void];
10
-
11
- export { useLocalStorage };
@@ -1,2 +0,0 @@
1
- 'use strict';var react=require('react'),LocalStorage=require('@alessiofrittoli/web-utils/storage/LocalStorage'),SessionStorage=require('@alessiofrittoli/web-utils/storage/SessionStorage');var S=(e,t,o="local")=>{let r=react.useCallback(()=>(o==="local"?LocalStorage.LocalStorage:SessionStorage.SessionStorage).get(e)??t,[o,e,t]),[T,s]=react.useState(t),i=react.useCallback(a=>{s(f=>{let l=a instanceof Function?a(f):a;return (typeof window<"u"&&o==="local"?LocalStorage.LocalStorage:SessionStorage.SessionStorage).set(e,l),l});},[o,e]);return react.useEffect(()=>{s(r());},[r]),[T,i]};var b=(e,t)=>S(e,t,"local");exports.useLocalStorage=b;//# sourceMappingURL=useLocalStorage.js.map
2
- //# sourceMappingURL=useLocalStorage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/browser-api/storage/useStorage.ts","../../../src/browser-api/storage/useLocalStorage.ts"],"names":["useStorage","key","initialValue","type","readValue","useCallback","LocalStorage","SessionStorage","storedValue","setStoredValue","useState","setValue","value","valueToStore","useEffect","useLocalStorage"],"mappings":"4LAcO,IAAMA,CAAAA,CAAa,CACzBC,CAAAA,CACAC,EACAC,CAA+B,CAAA,OAAA,GACO,CAEtC,IAAMC,CAAYC,CAAAA,iBAAAA,CAAa,KAC5BF,CAAS,GAAA,OAAA,CAAUG,yBAAeC,CAAAA,6BAAAA,EAClC,GAAQN,CAAAA,CAAI,GAAKC,CACjB,CAAA,CAAEC,CAAMF,CAAAA,CAAAA,CAAKC,CAAa,CAAE,EAQzB,CAAEM,CAAAA,CAAaC,CAAe,CAAA,CAAIC,cAAoBR,CAAAA,CAAa,CAQnES,CAAAA,CAAAA,CAAWN,iBAAiCO,CAAAA,CAAAA,EAAS,CAE1DH,CAAAA,CAAgBD,CAAe,EAAA,CAC9B,IAAMK,CAAeD,CAAAA,CAAAA,YAAiB,QAAWA,CAAAA,CAAAA,CAAOJ,CAAY,CAAA,CAAII,EAEvE,OACA,CAAA,OAAO,MAAW,CAAA,GAAA,EAClBT,CAAS,GAAA,OAAA,CAAUG,0BAAeC,6BACjC,EAAA,GAAA,CAAKN,CAAKY,CAAAA,CAAa,CAElBA,CAAAA,CACR,CAAE,EAGH,CAAA,CAAG,CAAEV,CAAAA,CAAMF,CAAI,CAAE,EAEjB,OAAAa,eAAAA,CAAW,IAAM,CAChBL,CAAgBL,CAAAA,CAAAA,EAAY,EAC7B,CAAA,CAAG,CAAEA,CAAU,CAAE,CAAA,CAEV,CAAEI,CAAaG,CAAAA,CAAS,CAChC,CAAA,CCpDaI,IAAAA,CAAAA,CAAkB,CAC9Bd,CAAAA,CACAC,CACIF,GAAAA,CAAAA,CAAYC,CAAKC,CAAAA,CAAAA,CAAc,OAAQ","file":"useLocalStorage.js","sourcesContent":["import { useCallback, useEffect, useState } from 'react'\nimport { LocalStorage } from '@alessiofrittoli/web-utils/storage/LocalStorage'\nimport { SessionStorage } from '@alessiofrittoli/web-utils/storage/SessionStorage'\n\ntype Value<T>\t\t= T | undefined | null\ntype SetValue<T>\t= React.Dispatch<React.SetStateAction<T>>\n\n/**\n * Easly handle Local or Session Storage State.\n * \n * @param\tkey\t\t\t\tThe storage item key.\n * @param\tinitialValue\tThe storage item initial value.\n * @param\ttype\t\t\t( Optional ) The storage API to use. Default: `local`.\n */\nexport const useStorage = <T = string>(\n\tkey\t\t\t\t: string,\n\tinitialValue?\t: T,\n\ttype\t\t\t: 'local' | 'session' = 'local'\n): [ Value<T>, SetValue<Value<T>> ] => {\n\n\tconst readValue = useCallback( () => (\n\t\t( type === 'local' ? LocalStorage : SessionStorage )\n\t\t\t.get<T>( key ) ?? initialValue\n\t), [ type, key, initialValue ] )\n\n\n\t/**\n\t * State to store our value.\n\t * Pass initial state function to useState so logic is only executed once.\n\t * \n\t */\n\tconst [ storedValue, setStoredValue ] = useState<Value<T>>( initialValue )\n\n\t/**\n\t * Return a wrapped version of useState's setter function that\n\t * persists the new value to localStorage | sessionStorage.\n\t * \n\t * @param value The SetStateAction value.\n\t */\n\tconst setValue = useCallback<SetValue<Value<T>>>( value => {\n\n\t\tsetStoredValue( storedValue => {\n\t\t\tconst valueToStore = value instanceof Function ? value( storedValue ) : value\n\t\n\t\t\t;(\n\t\t\t\ttypeof window !== 'undefined' &&\n\t\t\t\ttype === 'local' ? LocalStorage : SessionStorage\n\t\t\t).set( key, valueToStore )\n\n\t\t\treturn valueToStore\n\t\t} )\n\n\n\t}, [ type, key ] )\n\n\tuseEffect( () => {\n\t\tsetStoredValue( readValue() )\n\t}, [ readValue ] )\n\n\treturn [ storedValue, setValue ]\n}","import { useStorage } from './useStorage'\n\n/**\n * useLocalStorage hook.\n * \n * @param\tkey\t\t\t\tThe local storage item key.\n * @param\tinitialValue\tThe local storage item initial value.\n */\nexport const useLocalStorage = <T = string>(\n\tkey\t\t\t\t: string,\n\tinitialValue?\t: T\n) => useStorage( key, initialValue, 'local' )"]}
@@ -1,2 +0,0 @@
1
- import {useCallback,useState,useEffect}from'react';import {LocalStorage}from'@alessiofrittoli/web-utils/storage/LocalStorage';import {SessionStorage}from'@alessiofrittoli/web-utils/storage/SessionStorage';var S=(e,t,o="local")=>{let r=useCallback(()=>(o==="local"?LocalStorage:SessionStorage).get(e)??t,[o,e,t]),[T,s]=useState(t),i=useCallback(a=>{s(f=>{let l=a instanceof Function?a(f):a;return (typeof window<"u"&&o==="local"?LocalStorage:SessionStorage).set(e,l),l});},[o,e]);return useEffect(()=>{s(r());},[r]),[T,i]};var h=(e,t)=>S(e,t,"local");export{h as useLocalStorage};//# sourceMappingURL=useLocalStorage.mjs.map
2
- //# sourceMappingURL=useLocalStorage.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/browser-api/storage/useStorage.ts","../../../src/browser-api/storage/useLocalStorage.ts"],"names":["useStorage","key","initialValue","type","readValue","useCallback","LocalStorage","SessionStorage","storedValue","setStoredValue","useState","setValue","value","valueToStore","useEffect","useLocalStorage"],"mappings":"6MAcO,IAAMA,CAAAA,CAAa,CACzBC,CAAAA,CACAC,EACAC,CAA+B,CAAA,OAAA,GACO,CAEtC,IAAMC,CAAYC,CAAAA,WAAAA,CAAa,KAC5BF,CAAS,GAAA,OAAA,CAAUG,YAAeC,CAAAA,cAAAA,EAClC,GAAQN,CAAAA,CAAI,GAAKC,CACjB,CAAA,CAAEC,CAAMF,CAAAA,CAAAA,CAAKC,CAAa,CAAE,EAQzB,CAAEM,CAAAA,CAAaC,CAAe,CAAA,CAAIC,QAAoBR,CAAAA,CAAa,CAQnES,CAAAA,CAAAA,CAAWN,WAAiCO,CAAAA,CAAAA,EAAS,CAE1DH,CAAAA,CAAgBD,CAAe,EAAA,CAC9B,IAAMK,CAAeD,CAAAA,CAAAA,YAAiB,QAAWA,CAAAA,CAAAA,CAAOJ,CAAY,CAAA,CAAII,EAEvE,OACA,CAAA,OAAO,MAAW,CAAA,GAAA,EAClBT,CAAS,GAAA,OAAA,CAAUG,aAAeC,cACjC,EAAA,GAAA,CAAKN,CAAKY,CAAAA,CAAa,CAElBA,CAAAA,CACR,CAAE,EAGH,CAAA,CAAG,CAAEV,CAAAA,CAAMF,CAAI,CAAE,EAEjB,OAAAa,SAAAA,CAAW,IAAM,CAChBL,CAAgBL,CAAAA,CAAAA,EAAY,EAC7B,CAAA,CAAG,CAAEA,CAAU,CAAE,CAAA,CAEV,CAAEI,CAAaG,CAAAA,CAAS,CAChC,CAAA,CCpDaI,IAAAA,CAAAA,CAAkB,CAC9Bd,CAAAA,CACAC,CACIF,GAAAA,CAAAA,CAAYC,CAAKC,CAAAA,CAAAA,CAAc,OAAQ","file":"useLocalStorage.mjs","sourcesContent":["import { useCallback, useEffect, useState } from 'react'\nimport { LocalStorage } from '@alessiofrittoli/web-utils/storage/LocalStorage'\nimport { SessionStorage } from '@alessiofrittoli/web-utils/storage/SessionStorage'\n\ntype Value<T>\t\t= T | undefined | null\ntype SetValue<T>\t= React.Dispatch<React.SetStateAction<T>>\n\n/**\n * Easly handle Local or Session Storage State.\n * \n * @param\tkey\t\t\t\tThe storage item key.\n * @param\tinitialValue\tThe storage item initial value.\n * @param\ttype\t\t\t( Optional ) The storage API to use. Default: `local`.\n */\nexport const useStorage = <T = string>(\n\tkey\t\t\t\t: string,\n\tinitialValue?\t: T,\n\ttype\t\t\t: 'local' | 'session' = 'local'\n): [ Value<T>, SetValue<Value<T>> ] => {\n\n\tconst readValue = useCallback( () => (\n\t\t( type === 'local' ? LocalStorage : SessionStorage )\n\t\t\t.get<T>( key ) ?? initialValue\n\t), [ type, key, initialValue ] )\n\n\n\t/**\n\t * State to store our value.\n\t * Pass initial state function to useState so logic is only executed once.\n\t * \n\t */\n\tconst [ storedValue, setStoredValue ] = useState<Value<T>>( initialValue )\n\n\t/**\n\t * Return a wrapped version of useState's setter function that\n\t * persists the new value to localStorage | sessionStorage.\n\t * \n\t * @param value The SetStateAction value.\n\t */\n\tconst setValue = useCallback<SetValue<Value<T>>>( value => {\n\n\t\tsetStoredValue( storedValue => {\n\t\t\tconst valueToStore = value instanceof Function ? value( storedValue ) : value\n\t\n\t\t\t;(\n\t\t\t\ttypeof window !== 'undefined' &&\n\t\t\t\ttype === 'local' ? LocalStorage : SessionStorage\n\t\t\t).set( key, valueToStore )\n\n\t\t\treturn valueToStore\n\t\t} )\n\n\n\t}, [ type, key ] )\n\n\tuseEffect( () => {\n\t\tsetStoredValue( readValue() )\n\t}, [ readValue ] )\n\n\treturn [ storedValue, setValue ]\n}","import { useStorage } from './useStorage'\n\n/**\n * useLocalStorage hook.\n * \n * @param\tkey\t\t\t\tThe local storage item key.\n * @param\tinitialValue\tThe local storage item initial value.\n */\nexport const useLocalStorage = <T = string>(\n\tkey\t\t\t\t: string,\n\tinitialValue?\t: T\n) => useStorage( key, initialValue, 'local' )"]}
@@ -1,11 +0,0 @@
1
- import * as react from 'react';
2
-
3
- /**
4
- * useSessionStorage hook.
5
- *
6
- * @param key The session item key.
7
- * @param initialValue The session item initial value.
8
- */
9
- declare const useSessionStorage: <T = string>(key: string, initialValue?: T) => [T | null | undefined, (value: react.SetStateAction<T | null | undefined>) => void];
10
-
11
- export { useSessionStorage };
@@ -1,11 +0,0 @@
1
- import * as react from 'react';
2
-
3
- /**
4
- * useSessionStorage hook.
5
- *
6
- * @param key The session item key.
7
- * @param initialValue The session item initial value.
8
- */
9
- declare const useSessionStorage: <T = string>(key: string, initialValue?: T) => [T | null | undefined, (value: react.SetStateAction<T | null | undefined>) => void];
10
-
11
- export { useSessionStorage };
@@ -1,2 +0,0 @@
1
- 'use strict';var react=require('react'),LocalStorage=require('@alessiofrittoli/web-utils/storage/LocalStorage'),SessionStorage=require('@alessiofrittoli/web-utils/storage/SessionStorage');var S=(e,t,o="local")=>{let r=react.useCallback(()=>(o==="local"?LocalStorage.LocalStorage:SessionStorage.SessionStorage).get(e)??t,[o,e,t]),[T,a]=react.useState(t),i=react.useCallback(s=>{a(f=>{let n=s instanceof Function?s(f):s;return (typeof window<"u"&&o==="local"?LocalStorage.LocalStorage:SessionStorage.SessionStorage).set(e,n),n});},[o,e]);return react.useEffect(()=>{a(r());},[r]),[T,i]};var h=(e,t)=>S(e,t,"session");exports.useSessionStorage=h;//# sourceMappingURL=useSessionStorage.js.map
2
- //# sourceMappingURL=useSessionStorage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/browser-api/storage/useStorage.ts","../../../src/browser-api/storage/useSessionStorage.ts"],"names":["useStorage","key","initialValue","type","readValue","useCallback","LocalStorage","SessionStorage","storedValue","setStoredValue","useState","setValue","value","valueToStore","useEffect","useSessionStorage"],"mappings":"4LAcO,IAAMA,CAAAA,CAAa,CACzBC,CAAAA,CACAC,EACAC,CAA+B,CAAA,OAAA,GACO,CAEtC,IAAMC,CAAYC,CAAAA,iBAAAA,CAAa,KAC5BF,CAAS,GAAA,OAAA,CAAUG,yBAAeC,CAAAA,6BAAAA,EAClC,GAAQN,CAAAA,CAAI,GAAKC,CACjB,CAAA,CAAEC,CAAMF,CAAAA,CAAAA,CAAKC,CAAa,CAAE,EAQzB,CAAEM,CAAAA,CAAaC,CAAe,CAAA,CAAIC,cAAoBR,CAAAA,CAAa,CAQnES,CAAAA,CAAAA,CAAWN,iBAAiCO,CAAAA,CAAAA,EAAS,CAE1DH,CAAAA,CAAgBD,CAAe,EAAA,CAC9B,IAAMK,CAAeD,CAAAA,CAAAA,YAAiB,QAAWA,CAAAA,CAAAA,CAAOJ,CAAY,CAAA,CAAII,EAEvE,OACA,CAAA,OAAO,MAAW,CAAA,GAAA,EAClBT,CAAS,GAAA,OAAA,CAAUG,0BAAeC,6BACjC,EAAA,GAAA,CAAKN,CAAKY,CAAAA,CAAa,CAElBA,CAAAA,CACR,CAAE,EAGH,CAAA,CAAG,CAAEV,CAAAA,CAAMF,CAAI,CAAE,EAEjB,OAAAa,eAAAA,CAAW,IAAM,CAChBL,CAAgBL,CAAAA,CAAAA,EAAY,EAC7B,CAAA,CAAG,CAAEA,CAAU,CAAE,CAAA,CAEV,CAAEI,CAAaG,CAAAA,CAAS,CAChC,CAAA,CCpDaI,IAAAA,CAAAA,CAAoB,CAChCd,CAAAA,CACAC,CACIF,GAAAA,CAAAA,CAAYC,CAAKC,CAAAA,CAAAA,CAAc,SAAU","file":"useSessionStorage.js","sourcesContent":["import { useCallback, useEffect, useState } from 'react'\nimport { LocalStorage } from '@alessiofrittoli/web-utils/storage/LocalStorage'\nimport { SessionStorage } from '@alessiofrittoli/web-utils/storage/SessionStorage'\n\ntype Value<T>\t\t= T | undefined | null\ntype SetValue<T>\t= React.Dispatch<React.SetStateAction<T>>\n\n/**\n * Easly handle Local or Session Storage State.\n * \n * @param\tkey\t\t\t\tThe storage item key.\n * @param\tinitialValue\tThe storage item initial value.\n * @param\ttype\t\t\t( Optional ) The storage API to use. Default: `local`.\n */\nexport const useStorage = <T = string>(\n\tkey\t\t\t\t: string,\n\tinitialValue?\t: T,\n\ttype\t\t\t: 'local' | 'session' = 'local'\n): [ Value<T>, SetValue<Value<T>> ] => {\n\n\tconst readValue = useCallback( () => (\n\t\t( type === 'local' ? LocalStorage : SessionStorage )\n\t\t\t.get<T>( key ) ?? initialValue\n\t), [ type, key, initialValue ] )\n\n\n\t/**\n\t * State to store our value.\n\t * Pass initial state function to useState so logic is only executed once.\n\t * \n\t */\n\tconst [ storedValue, setStoredValue ] = useState<Value<T>>( initialValue )\n\n\t/**\n\t * Return a wrapped version of useState's setter function that\n\t * persists the new value to localStorage | sessionStorage.\n\t * \n\t * @param value The SetStateAction value.\n\t */\n\tconst setValue = useCallback<SetValue<Value<T>>>( value => {\n\n\t\tsetStoredValue( storedValue => {\n\t\t\tconst valueToStore = value instanceof Function ? value( storedValue ) : value\n\t\n\t\t\t;(\n\t\t\t\ttypeof window !== 'undefined' &&\n\t\t\t\ttype === 'local' ? LocalStorage : SessionStorage\n\t\t\t).set( key, valueToStore )\n\n\t\t\treturn valueToStore\n\t\t} )\n\n\n\t}, [ type, key ] )\n\n\tuseEffect( () => {\n\t\tsetStoredValue( readValue() )\n\t}, [ readValue ] )\n\n\treturn [ storedValue, setValue ]\n}","import { useStorage } from './useStorage'\n\n/**\n * useSessionStorage hook.\n * \n * @param\tkey\t\t\t\tThe session item key.\n * @param\tinitialValue\tThe session item initial value.\n */\nexport const useSessionStorage = <T = string>(\n\tkey\t\t\t\t: string,\n\tinitialValue?\t: T\n) => useStorage( key, initialValue, 'session' )"]}
@@ -1,2 +0,0 @@
1
- import {useCallback,useState,useEffect}from'react';import {LocalStorage}from'@alessiofrittoli/web-utils/storage/LocalStorage';import {SessionStorage}from'@alessiofrittoli/web-utils/storage/SessionStorage';var S=(e,t,o="local")=>{let r=useCallback(()=>(o==="local"?LocalStorage:SessionStorage).get(e)??t,[o,e,t]),[T,a]=useState(t),i=useCallback(s=>{a(f=>{let n=s instanceof Function?s(f):s;return (typeof window<"u"&&o==="local"?LocalStorage:SessionStorage).set(e,n),n});},[o,e]);return useEffect(()=>{a(r());},[r]),[T,i]};var A=(e,t)=>S(e,t,"session");export{A as useSessionStorage};//# sourceMappingURL=useSessionStorage.mjs.map
2
- //# sourceMappingURL=useSessionStorage.mjs.map