foxact 0.2.26 → 0.2.28

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 (111) hide show
  1. package/compose-context-provider/index.cjs +1 -1
  2. package/compose-context-provider/index.js +1 -1
  3. package/compose-context-provider/index.mjs +1 -1
  4. package/context-state/index.cjs +1 -1
  5. package/context-state/index.js +1 -1
  6. package/context-state/index.mjs +1 -1
  7. package/create-context-state/index.cjs +1 -1
  8. package/create-context-state/index.js +1 -1
  9. package/create-context-state/index.mjs +1 -1
  10. package/create-fixed-array/index.cjs +1 -1
  11. package/create-fixed-array/index.js +1 -1
  12. package/create-fixed-array/index.mjs +1 -1
  13. package/create-storage-hook/index.cjs +1 -0
  14. package/create-storage-hook/index.d.ts +27 -0
  15. package/create-storage-hook/index.js +1 -0
  16. package/create-storage-hook/index.mjs +1 -0
  17. package/invariant/index.cjs +1 -0
  18. package/invariant/index.d.ts +4 -0
  19. package/invariant/index.js +1 -0
  20. package/invariant/index.mjs +1 -0
  21. package/no-ssr/index.cjs +1 -1
  22. package/no-ssr/index.js +1 -1
  23. package/no-ssr/index.mjs +1 -1
  24. package/noop/index.cjs +1 -1
  25. package/noop/index.js +1 -1
  26. package/noop/index.mjs +1 -1
  27. package/nullthrow/index.cjs +1 -0
  28. package/nullthrow/index.d.ts +4 -0
  29. package/nullthrow/index.js +1 -0
  30. package/nullthrow/index.mjs +1 -0
  31. package/package.json +194 -157
  32. package/rem/index.cjs +1 -1
  33. package/rem/index.js +1 -1
  34. package/rem/index.mjs +1 -1
  35. package/request-idle-callback/index.cjs +1 -1
  36. package/request-idle-callback/index.js +1 -1
  37. package/request-idle-callback/index.mjs +1 -1
  38. package/sizes.json +1 -1
  39. package/typescript-happy-forward-ref/index.cjs +1 -1
  40. package/typescript-happy-forward-ref/index.js +1 -1
  41. package/typescript-happy-forward-ref/index.mjs +1 -1
  42. package/use/index.cjs +1 -1
  43. package/use/index.js +1 -1
  44. package/use/index.mjs +1 -1
  45. package/use-array/index.cjs +1 -1
  46. package/use-array/index.js +1 -1
  47. package/use-array/index.mjs +1 -1
  48. package/use-clipboard/index.cjs +1 -1
  49. package/use-clipboard/index.js +1 -1
  50. package/use-clipboard/index.mjs +1 -1
  51. package/use-composition-input/index.cjs +1 -1
  52. package/use-composition-input/index.js +1 -1
  53. package/use-composition-input/index.mjs +1 -1
  54. package/use-debounced-state/index.cjs +1 -1
  55. package/use-debounced-state/index.js +1 -1
  56. package/use-debounced-state/index.mjs +1 -1
  57. package/use-debounced-value/index.cjs +1 -1
  58. package/use-debounced-value/index.js +1 -1
  59. package/use-debounced-value/index.mjs +1 -1
  60. package/use-error-boundary/index.cjs +1 -1
  61. package/use-error-boundary/index.js +1 -1
  62. package/use-error-boundary/index.mjs +1 -1
  63. package/use-intersection/index.cjs +1 -1
  64. package/use-intersection/index.js +1 -1
  65. package/use-intersection/index.mjs +1 -1
  66. package/use-is-client/index.cjs +1 -1
  67. package/use-is-client/index.js +1 -1
  68. package/use-is-client/index.mjs +1 -1
  69. package/use-isomorphic-layout-effect/index.cjs +1 -1
  70. package/use-isomorphic-layout-effect/index.d.ts +3 -3
  71. package/use-isomorphic-layout-effect/index.js +1 -1
  72. package/use-isomorphic-layout-effect/index.mjs +1 -1
  73. package/use-local-storage/index.cjs +1 -1
  74. package/use-local-storage/index.d.ts +5 -21
  75. package/use-local-storage/index.js +1 -1
  76. package/use-local-storage/index.mjs +1 -1
  77. package/use-map/index.cjs +1 -1
  78. package/use-map/index.js +1 -1
  79. package/use-map/index.mjs +1 -1
  80. package/use-next-pathname/index.cjs +1 -1
  81. package/use-next-pathname/index.js +1 -1
  82. package/use-next-pathname/index.mjs +1 -1
  83. package/use-react-router-enable-concurrent-navigation/index.cjs +1 -1
  84. package/use-react-router-enable-concurrent-navigation/index.js +1 -1
  85. package/use-react-router-enable-concurrent-navigation/index.mjs +1 -1
  86. package/use-react-router-is-match/index.cjs +1 -1
  87. package/use-react-router-is-match/index.js +1 -1
  88. package/use-react-router-is-match/index.mjs +1 -1
  89. package/use-retimer/index.cjs +1 -1
  90. package/use-retimer/index.js +1 -1
  91. package/use-retimer/index.mjs +1 -1
  92. package/use-session-storage/index.cjs +1 -0
  93. package/use-session-storage/index.d.ts +8 -0
  94. package/use-session-storage/index.js +1 -0
  95. package/use-session-storage/index.mjs +1 -0
  96. package/use-set/index.cjs +1 -1
  97. package/use-set/index.js +1 -1
  98. package/use-set/index.mjs +1 -1
  99. package/use-singleton/index.cjs +1 -1
  100. package/use-singleton/index.js +1 -1
  101. package/use-singleton/index.mjs +1 -1
  102. package/use-stable-handler-only-when-you-know-what-you-are-doing-or-you-will-be-fired/index.cjs +1 -1
  103. package/use-stable-handler-only-when-you-know-what-you-are-doing-or-you-will-be-fired/index.js +1 -1
  104. package/use-stable-handler-only-when-you-know-what-you-are-doing-or-you-will-be-fired/index.mjs +1 -1
  105. package/use-uncontrolled/index.cjs +1 -1
  106. package/use-uncontrolled/index.js +1 -1
  107. package/use-uncontrolled/index.mjs +1 -1
  108. package/use-url-hash-state/index.cjs +1 -1
  109. package/use-url-hash-state/index.d.ts +13 -3
  110. package/use-url-hash-state/index.js +1 -1
  111. package/use-url-hash-state/index.mjs +1 -1
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react"),r=require("../use-singleton/index.cjs");exports.useCompositionInput=t=>{const u=r.useSingleton(()=>({c:!1,e:!1})),c=e.useCallback(e=>{if("value"in e.target){const r=e.target.value;u.current.c?u.current.e=!1:(t(r),u.current.e=!0)}},[t,u]),n=e.useCallback(()=>{u.current.c=!0,u.current.e=!1},[u]),s=e.useCallback(e=>{u.current.c=!1,u.current.e||c(e)},[u,c]);return{onChange:c,onCompositionStart:n,onCompositionEnd:s}};
1
+ "use strict";require("client-only");var e=require("react"),r=require("../use-singleton/index.cjs");exports.useCompositionInput=t=>{const u=r.useSingleton(()=>({c:!1,e:!1})),c=e.useCallback(e=>{if("value"in e.target){const r=e.target.value;u.current.c?u.current.e=!1:(t(r),u.current.e=!0)}},[t,u]),n=e.useCallback(()=>{u.current.c=!0,u.current.e=!1},[u]),s=e.useCallback(e=>{u.current.c=!1,u.current.e||c(e)},[u,c]);return{onChange:c,onCompositionStart:n,onCompositionEnd:s}};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react"),r=require("../use-singleton/index.js");exports.useCompositionInput=t=>{const u=r.useSingleton(()=>({c:!1,e:!1})),n=e.useCallback(e=>{if("value"in e.target){const r=e.target.value;u.current.c?u.current.e=!1:(t(r),u.current.e=!0)}},[t,u]),c=e.useCallback(()=>{u.current.c=!0,u.current.e=!1},[u]),s=e.useCallback(e=>{u.current.c=!1,u.current.e||n(e)},[u,n]);return{onChange:n,onCompositionStart:c,onCompositionEnd:s}};
1
+ "use strict";require("client-only");var e=require("react"),r=require("../use-singleton/index.js");exports.useCompositionInput=t=>{const u=r.useSingleton(()=>({c:!1,e:!1})),n=e.useCallback(e=>{if("value"in e.target){const r=e.target.value;u.current.c?u.current.e=!1:(t(r),u.current.e=!0)}},[t,u]),c=e.useCallback(()=>{u.current.c=!0,u.current.e=!1},[u]),s=e.useCallback(e=>{u.current.c=!1,u.current.e||n(e)},[u,n]);return{onChange:n,onCompositionStart:c,onCompositionEnd:s}};
@@ -1 +1 @@
1
- import"client-only";import{useCallback as r}from"react";import{useSingleton as e}from"../use-singleton/index.mjs";const t=t=>{const n=e(()=>({c:!1,e:!1})),c=r(r=>{if("value"in r.target){const e=r.target.value;n.current.c?n.current.e=!1:(t(e),n.current.e=!0)}},[t,n]),o=r(()=>{n.current.c=!0,n.current.e=!1},[n]),u=r(r=>{n.current.c=!1,n.current.e||c(r)},[n,c]);return{onChange:c,onCompositionStart:o,onCompositionEnd:u}};export{t as useCompositionInput};
1
+ import"client-only";import{useCallback as r}from"react";import{useSingleton as e}from"../use-singleton/index.mjs";const t=t=>{const n=e(()=>({c:!1,e:!1})),c=r(r=>{if("value"in r.target){const e=r.target.value;n.current.c?n.current.e=!1:(t(e),n.current.e=!0)}},[t,n]),o=r(()=>{n.current.c=!0,n.current.e=!1},[n]),u=r(r=>{n.current.c=!1,n.current.e||c(r)},[n,c]);return{onChange:c,onCompositionStart:o,onCompositionEnd:u}};export{t as useCompositionInput};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react"),r=require("../use-retimer/index.cjs");exports.useDebouncedState=function(t,u){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const[s,c]=e.useState(t),i=e.useRef(!0),a=r.useRetimer(),l=e.useCallback(e=>{i.current&&n?c(e):a(window.setTimeout(()=>{i.current=!0,c(e)},u)),i.current=!1},[n,a,u]),o=e.useCallback(e=>{a(),c(e)},[a]);return[s,l,o]};
1
+ "use strict";require("client-only");var e=require("react"),r=require("../use-retimer/index.cjs");exports.useDebouncedState=function(t,u){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const[s,c]=e.useState(t),i=e.useRef(!0),a=r.useRetimer();return[s,e.useCallback(e=>{i.current&&n?c(e):a(window.setTimeout(()=>{i.current=!0,c(e)},u)),i.current=!1},[n,a,u]),e.useCallback(e=>{a(),c(e)},[a])]};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react"),r=require("../use-retimer/index.js");exports.useDebouncedState=function(t,u){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const[s,i]=e.useState(t),c=e.useRef(!0),a=r.useRetimer(),l=e.useCallback(e=>{c.current&&n?i(e):a(window.setTimeout(()=>{c.current=!0,i(e)},u)),c.current=!1},[n,a,u]),o=e.useCallback(e=>{a(),i(e)},[a]);return[s,l,o]};
1
+ "use strict";require("client-only");var e=require("react"),r=require("../use-retimer/index.js");exports.useDebouncedState=function(t,u){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const[s,i]=e.useState(t),c=e.useRef(!0),a=r.useRetimer();return[s,e.useCallback(e=>{c.current&&n?i(e):a(window.setTimeout(()=>{c.current=!0,i(e)},u)),c.current=!1},[n,a,u]),e.useCallback(e=>{a(),i(e)},[a])]};
@@ -1 +1 @@
1
- import"client-only";import{useState as e,useRef as t,useCallback as r}from"react";import{useRetimer as n}from"../use-retimer/index.mjs";function o(o,i){let u=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const[c,m]=e(o),s=t(!0),d=n(),l=r(e=>{s.current&&u?m(e):d(window.setTimeout(()=>{s.current=!0,m(e)},i)),s.current=!1},[u,d,i]),p=r(e=>{d(),m(e)},[d]);return[c,l,p]}export{o as useDebouncedState};
1
+ import"client-only";import{useState as e,useRef as t,useCallback as r}from"react";import{useRetimer as n}from"../use-retimer/index.mjs";function o(o,i){let u=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const[c,m]=e(o),s=t(!0),d=n();return[c,r(e=>{s.current&&u?m(e):d(window.setTimeout(()=>{s.current=!0,m(e)},i)),s.current=!1},[u,d,i]),r(e=>{d(),m(e)},[d])]}export{o as useDebouncedState};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react");exports.useDebouncedValue=function(t,u){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("function"==typeof t)throw TypeError("useDebouncedValue does not support function as value");const[n,o]=e.useState(t),c=e.useRef(!0);return e.useEffect(()=>{let e=!1,n=null;return c.current&&r?(c.current=!1,o(t)):n=window.setTimeout(()=>{c.current=!0,o(t)},u),()=>{n&&window.clearTimeout(n)}},[t,r,u]),n};
1
+ "use strict";require("client-only");var e=require("react");exports.useDebouncedValue=function(t,u){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("function"==typeof t)throw TypeError("useDebouncedValue does not support function as value");const[n,o]=e.useState(t),c=e.useRef(!0);return e.useEffect(()=>{let e=!1,n=null;return c.current&&r?(c.current=!1,o(t)):n=window.setTimeout(()=>{c.current=!0,o(t)},u),()=>{n&&window.clearTimeout(n)}},[t,r,u]),n};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react");exports.useDebouncedValue=function(t,u){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("function"==typeof t)throw TypeError("useDebouncedValue does not support function as value");const[n,o]=e.useState(t),c=e.useRef(!0);return e.useEffect(()=>{let e=!1,n=null;return c.current&&r?(c.current=!1,o(t)):n=window.setTimeout(()=>{c.current=!0,o(t)},u),()=>{n&&window.clearTimeout(n)}},[t,r,u]),n};
1
+ "use strict";require("client-only");var e=require("react");exports.useDebouncedValue=function(t,u){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("function"==typeof t)throw TypeError("useDebouncedValue does not support function as value");const[n,o]=e.useState(t),c=e.useRef(!0);return e.useEffect(()=>{let e=!1,n=null;return c.current&&r?(c.current=!1,o(t)):n=window.setTimeout(()=>{c.current=!0,o(t)},u),()=>{n&&window.clearTimeout(n)}},[t,r,u]),n};
@@ -1 +1 @@
1
- import"client-only";import{useState as e,useRef as t,useEffect as o}from"react";function n(n,r){let u=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("function"==typeof n)throw TypeError("useDebouncedValue does not support function as value");const[c,i]=e(n),l=t(!0);return o(()=>{let e=!1,t=null;return l.current&&u?(l.current=!1,i(n)):t=window.setTimeout(()=>{l.current=!0,i(n)},r),()=>{t&&window.clearTimeout(t)}},[n,u,r]),c}export{n as useDebouncedValue};
1
+ import"client-only";import{useState as e,useRef as t,useEffect as o}from"react";function n(n,r){let u=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("function"==typeof n)throw TypeError("useDebouncedValue does not support function as value");const[c,i]=e(n),l=t(!0);return o(()=>{let e=!1,t=null;return l.current&&u?(l.current=!1,i(n)):t=window.setTimeout(()=>{l.current=!0,i(n)},r),()=>{t&&window.clearTimeout(t)}},[n,u,r]),c}export{n as useDebouncedValue};
@@ -1 +1 @@
1
- "use strict";require("client-only");var r=require("react");const t=r=>!1!==r&&null!=r;exports.useErrorBoundary=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const[n,o]=r.useState(!1);if(t(e))throw e;if(t(n))throw n;return o};
1
+ "use strict";require("client-only");var r=require("react");const t=r=>!1!==r&&null!=r;exports.useErrorBoundary=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const[n,o]=r.useState(!1);if(t(e))throw e;if(t(n))throw n;return o};
@@ -1 +1 @@
1
- "use strict";require("client-only");var r=require("react");const t=r=>!1!==r&&null!=r;exports.useErrorBoundary=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const[n,o]=r.useState(!1);if(t(e))throw e;if(t(n))throw n;return o};
1
+ "use strict";require("client-only");var r=require("react");const t=r=>!1!==r&&null!=r;exports.useErrorBoundary=function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const[n,o]=r.useState(!1);if(t(e))throw e;if(t(n))throw n;return o};
@@ -1 +1 @@
1
- import"client-only";import{useState as o}from"react";const r=o=>!1!==o&&null!=o,t=function(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const[n,e]=o(!1);if(r(t))throw t;if(r(n))throw n;return e};export{t as useErrorBoundary};
1
+ import"client-only";import{useState as o}from"react";const r=o=>!1!==o&&null!=o,t=function(){let t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const[n,e]=o(!1);if(r(t))throw t;if(r(n))throw n;return e};export{t as useErrorBoundary};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react"),t=require("../request-idle-callback/index.cjs");const n="function"==typeof IntersectionObserver,r=new Map,o=[];exports.useIntersection=function(c){let{rootRef:i,rootMargin:s,disabled:u}=c;const[l,a]=e.useState(!1),f=e.useRef(null);e.useEffect(()=>{if(n){if(u||l)return;const e=f.current;if(null==e?void 0:e.tagName)return function(e,t,n){const{id:c,observer:i,elements:s}=function(e){let t;const n={root:e.root||null,margin:e.rootMargin||""},c=o.find(e=>e.root===n.root&&e.margin===n.margin);if(c&&(t=r.get(c)))return t;const i=new Map,s=new IntersectionObserver(e=>{e.forEach(e=>{const t=i.get(e.target),n=e.isIntersecting||e.intersectionRatio>0;t&&n&&t(n)})},e);return t={id:n,observer:s,elements:i},o.push(n),r.set(n,t),t}(n);return s.set(e,t),i.observe(e),function(){if(s.delete(e),i.unobserve(e),0===s.size){i.disconnect(),r.delete(c);const e=o.findIndex(e=>e.root===c.root&&e.margin===c.margin);e>-1&&o.splice(e,1)}}}(e,e=>e&&a(!0),{root:null==i?void 0:i.current,rootMargin:s})}if(!l){const e=t.requestIdleCallback(()=>a(!0));return()=>t.cancelIdleCallback(e)}},[u,s,i,l]);const d=e.useCallback(()=>{a(!1)},[]),g=e.useCallback(e=>{f.current=e},[]);return[g,l,d]};
1
+ "use strict";require("client-only");var e=require("react"),t=require("../request-idle-callback/index.cjs");const n="function"==typeof IntersectionObserver,r=new Map,o=[];exports.useIntersection=function(c){let{rootRef:i,rootMargin:s,disabled:u}=c;const[l,a]=e.useState(!1),f=e.useRef(null);e.useEffect(()=>{if(n){if(u||l)return;const e=f.current;if(null==e?void 0:e.tagName)return function(e,t,n){const{id:c,observer:i,elements:s}=function(e){let t;const n={root:e.root||null,margin:e.rootMargin||""},c=o.find(e=>e.root===n.root&&e.margin===n.margin);if(c&&(t=r.get(c)))return t;const i=new Map;return t={id:n,observer:new IntersectionObserver(e=>{e.forEach(e=>{const t=i.get(e.target),n=e.isIntersecting||e.intersectionRatio>0;t&&n&&t(n)})},e),elements:i},o.push(n),r.set(n,t),t}(n);return s.set(e,t),i.observe(e),function(){if(s.delete(e),i.unobserve(e),0===s.size){i.disconnect(),r.delete(c);const e=o.findIndex(e=>e.root===c.root&&e.margin===c.margin);e>-1&&o.splice(e,1)}}}(e,e=>e&&a(!0),{root:null==i?void 0:i.current,rootMargin:s})}if(!l){const e=t.requestIdleCallback(()=>a(!0));return()=>t.cancelIdleCallback(e)}},[u,s,i,l]);const d=e.useCallback(()=>{a(!1)},[]);return[e.useCallback(e=>{f.current=e},[]),l,d]};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react"),t=require("../request-idle-callback/index.js");const n="function"==typeof IntersectionObserver,r=new Map,o=[];exports.useIntersection=function(c){let{rootRef:i,rootMargin:s,disabled:u}=c;const[l,a]=e.useState(!1),f=e.useRef(null);e.useEffect(()=>{if(n){if(u||l)return;const e=f.current;if(null==e?void 0:e.tagName)return function(e,t,n){const{id:c,observer:i,elements:s}=function(e){let t;const n={root:e.root||null,margin:e.rootMargin||""},c=o.find(e=>e.root===n.root&&e.margin===n.margin);if(c&&(t=r.get(c)))return t;const i=new Map,s=new IntersectionObserver(e=>{e.forEach(e=>{const t=i.get(e.target),n=e.isIntersecting||e.intersectionRatio>0;t&&n&&t(n)})},e);return t={id:n,observer:s,elements:i},o.push(n),r.set(n,t),t}(n);return s.set(e,t),i.observe(e),function(){if(s.delete(e),i.unobserve(e),0===s.size){i.disconnect(),r.delete(c);const e=o.findIndex(e=>e.root===c.root&&e.margin===c.margin);e>-1&&o.splice(e,1)}}}(e,e=>e&&a(!0),{root:null==i?void 0:i.current,rootMargin:s})}if(!l){const e=t.requestIdleCallback(()=>a(!0));return()=>t.cancelIdleCallback(e)}},[u,s,i,l]);const d=e.useCallback(()=>{a(!1)},[]),g=e.useCallback(e=>{f.current=e},[]);return[g,l,d]};
1
+ "use strict";require("client-only");var e=require("react"),t=require("../request-idle-callback/index.js");const n="function"==typeof IntersectionObserver,r=new Map,o=[];exports.useIntersection=function(c){let{rootRef:i,rootMargin:s,disabled:u}=c;const[l,a]=e.useState(!1),f=e.useRef(null);e.useEffect(()=>{if(n){if(u||l)return;const e=f.current;if(null==e?void 0:e.tagName)return function(e,t,n){const{id:c,observer:i,elements:s}=function(e){let t;const n={root:e.root||null,margin:e.rootMargin||""},c=o.find(e=>e.root===n.root&&e.margin===n.margin);if(c&&(t=r.get(c)))return t;const i=new Map;return t={id:n,observer:new IntersectionObserver(e=>{e.forEach(e=>{const t=i.get(e.target),n=e.isIntersecting||e.intersectionRatio>0;t&&n&&t(n)})},e),elements:i},o.push(n),r.set(n,t),t}(n);return s.set(e,t),i.observe(e),function(){if(s.delete(e),i.unobserve(e),0===s.size){i.disconnect(),r.delete(c);const e=o.findIndex(e=>e.root===c.root&&e.margin===c.margin);e>-1&&o.splice(e,1)}}}(e,e=>e&&a(!0),{root:null==i?void 0:i.current,rootMargin:s})}if(!l){const e=t.requestIdleCallback(()=>a(!0));return()=>t.cancelIdleCallback(e)}},[u,s,i,l]);const d=e.useCallback(()=>{a(!1)},[]);return[e.useCallback(e=>{f.current=e},[]),l,d]};
@@ -1 +1 @@
1
- import"client-only";import{useState as t,useRef as n,useEffect as e,useCallback as r}from"react";import{requestIdleCallback as o,cancelIdleCallback as i}from"../request-idle-callback/index.mjs";const c="function"==typeof IntersectionObserver;function s(s){let{rootRef:f,rootMargin:a,disabled:m}=s;const[g,d]=t(!1),p=n(null);e(()=>{if(c){if(m||g)return;const t=p.current;if(null==t?void 0:t.tagName)return function(t,n,e){const{id:r,observer:o,elements:i}=function(t){let n;const e={root:t.root||null,margin:t.rootMargin||""},r=l.find(t=>t.root===e.root&&t.margin===e.margin);if(r&&(n=u.get(r)))return n;const o=new Map,i=new IntersectionObserver(t=>{t.forEach(t=>{const n=o.get(t.target),e=t.isIntersecting||t.intersectionRatio>0;n&&e&&n(e)})},t);return n={id:e,observer:i,elements:o},l.push(e),u.set(e,n),n}(e);return i.set(t,n),o.observe(t),function(){if(i.delete(t),o.unobserve(t),0===i.size){o.disconnect(),u.delete(r);const t=l.findIndex(t=>t.root===r.root&&t.margin===r.margin);t>-1&&l.splice(t,1)}}}(t,t=>t&&d(!0),{root:null==f?void 0:f.current,rootMargin:a})}if(!g){const t=o(()=>d(!0));return()=>i(t)}},[m,a,f,g]);const v=r(()=>{d(!1)},[]),b=r(t=>{p.current=t},[]);return[b,g,v]}const u=new Map,l=[];export{s as useIntersection};
1
+ import"client-only";import{useState as t,useRef as n,useEffect as e,useCallback as r}from"react";import{requestIdleCallback as o,cancelIdleCallback as i}from"../request-idle-callback/index.mjs";const c="function"==typeof IntersectionObserver;function s(s){let{rootRef:f,rootMargin:a,disabled:m}=s;const[g,d]=t(!1),p=n(null);e(()=>{if(c){if(m||g)return;const t=p.current;if(null==t?void 0:t.tagName)return function(t,n,e){const{id:r,observer:o,elements:i}=function(t){let n;const e={root:t.root||null,margin:t.rootMargin||""},r=l.find(t=>t.root===e.root&&t.margin===e.margin);if(r&&(n=u.get(r)))return n;const o=new Map;return n={id:e,observer:new IntersectionObserver(t=>{t.forEach(t=>{const n=o.get(t.target),e=t.isIntersecting||t.intersectionRatio>0;n&&e&&n(e)})},t),elements:o},l.push(e),u.set(e,n),n}(e);return i.set(t,n),o.observe(t),function(){if(i.delete(t),o.unobserve(t),0===i.size){o.disconnect(),u.delete(r);const t=l.findIndex(t=>t.root===r.root&&t.margin===r.margin);t>-1&&l.splice(t,1)}}}(t,t=>t&&d(!0),{root:null==f?void 0:f.current,rootMargin:a})}if(!g){const t=o(()=>d(!0));return()=>i(t)}},[m,a,f,g]);const v=r(()=>{d(!1)},[]);return[r(t=>{p.current=t},[]),g,v]}const u=new Map,l=[];export{s as useIntersection};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react");exports.useIsClient=()=>{const[t,r]=e.useState(!1);return e.useEffect(()=>{r(!0)},[]),t};
1
+ "use strict";require("client-only");var e=require("react");exports.useIsClient=()=>{const[t,r]=e.useState(!1);return e.useEffect(()=>{r(!0)},[]),t};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react");exports.useIsClient=()=>{const[t,r]=e.useState(!1);return e.useEffect(()=>{r(!0)},[]),t};
1
+ "use strict";require("client-only");var e=require("react");exports.useIsClient=()=>{const[t,r]=e.useState(!1);return e.useEffect(()=>{r(!0)},[]),t};
@@ -1 +1 @@
1
- import"client-only";import{useState as t,useEffect as o}from"react";const r=()=>{const[r,e]=t(!1);return o(()=>{e(!0)},[]),r};export{r as useIsClient};
1
+ import"client-only";import{useState as t,useEffect as o}from"react";const r=()=>{const[r,e]=t(!1);return o(()=>{e(!0)},[]),r};export{r as useIsClient};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react");const t="undefined"!=typeof window?e.useLayoutEffect:e.useEffect;exports.useIsomorphicLayoutEffect=t,exports.useLayoutEffect=t;
1
+ "use strict";require("client-only");var e=require("react");const t="undefined"!=typeof window?e.useLayoutEffect:e.useEffect;exports.useIsomorphicLayoutEffect=t,exports.useLayoutEffect=t;
@@ -1,8 +1,8 @@
1
- import { useLayoutEffect as useLayoutEffect$1 } from 'react';
1
+ import { useEffect } from 'react';
2
2
 
3
3
  /** @see https://foxact.skk.moe/use-isomorphic-layout-effect */
4
- declare const useIsomorphicLayoutEffect: typeof useLayoutEffect$1;
4
+ declare const useIsomorphicLayoutEffect: typeof useEffect;
5
5
  /** @see https://foxact.skk.moe/use-isomorphic-layout-effect */
6
- declare const useLayoutEffect: typeof useLayoutEffect$1;
6
+ declare const useLayoutEffect: typeof useEffect;
7
7
 
8
8
  export { useIsomorphicLayoutEffect, useLayoutEffect };
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react");const t="undefined"!=typeof window?e.useLayoutEffect:e.useEffect;exports.useIsomorphicLayoutEffect=t,exports.useLayoutEffect=t;
1
+ "use strict";require("client-only");var e=require("react");const t="undefined"!=typeof window?e.useLayoutEffect:e.useEffect;exports.useIsomorphicLayoutEffect=t,exports.useLayoutEffect=t;
@@ -1 +1 @@
1
- import"client-only";import{useLayoutEffect as o,useEffect as t}from"react";const e="undefined"!=typeof window?o:t,f=e;export{e as useIsomorphicLayoutEffect,f as useLayoutEffect};
1
+ import"client-only";import{useLayoutEffect as o,useEffect as t}from"react";const e="undefined"!=typeof window?o:t,f=e;export{e as useIsomorphicLayoutEffect,f as useLayoutEffect};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react"),n=require("../noop/index.cjs"),o=require("../use-isomorphic-layout-effect/index.cjs"),r=require("../no-ssr/index.cjs");const t="foxact-local-storage",i=e=>{"undefined"!=typeof window&&window.dispatchEvent(new CustomEvent(t,{detail:e}))},l=(e,n)=>{if("undefined"!=typeof window)try{window.localStorage.setItem(e,n)}catch(e){console.error(e)}finally{i(e)}},a=e=>{if("undefined"!=typeof window)try{window.localStorage.removeItem(e)}catch(e){console.error(e)}finally{i(e)}},s=e=>{if("undefined"==typeof window)return null;try{return window.localStorage.getItem(e)}catch(e){return console.warn(e),null}},u=()=>{throw r.noSSRError("useLocalStorage cannot be used on the server without a serverValue")},c=e=>"function"==typeof e,d=e=>e;exports.useLocalStorage=function(r,i){var w;let f=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{serializer:JSON.stringify,deserializer:JSON.parse};const y=e.useCallback(e=>{if("undefined"==typeof window)return n.noop;const o=n=>{"key"in n&&n.key!==r||e()},i=n=>{n.detail===r&&e()};return window.addEventListener("storage",o),window.addEventListener(t,i),()=>{window.removeEventListener("storage",o),window.removeEventListener(t,i)}},[r]),v=f.raw?d:f.serializer,p=f.raw?d:f.deserializer,g=void 0!==i?()=>v(i):u,h=e.useSyncExternalStore(y,()=>s(r),g),S=e.useMemo(()=>null===h?null:p(h),[h,p]),m=e.useCallback(e=>{try{const n=c(e)?e(null!=S?S:null):e;null===n?a(r):l(r,v(n))}catch(e){console.warn(e)}},[r,v,S]);return o.useIsomorphicLayoutEffect(()=>{null===s(r)&&void 0!==i&&l(r,v(i))},[p,r,v,i]),[null!==(w=null!=S?S:i)&&void 0!==w?w:null,m]};
1
+ "use strict";require("client-only");var e=require("../create-storage-hook/index.cjs");require("react"),require("../noop/index.cjs"),require("../use-isomorphic-layout-effect/index.cjs"),require("../no-ssr/index.cjs");const{useStorage:r,useSetStorage:o}=e.createStorage("localStorage");exports.useLocalStorage=r,exports.useSetLocalStorage=o;
@@ -1,24 +1,8 @@
1
1
  import * as react from 'react';
2
+ import { UseStorageRawOption, UseStorageParserOption, Serializer } from '../create-storage-hook/index.js';
3
+ export { Deserializer } from '../create-storage-hook/index.js';
2
4
 
3
- declare const FOXACT_LOCAL_STORAGE_EVENT_KEY = "foxact-local-storage";
4
- type CustomStorageEvent = CustomEvent<string>;
5
- declare global {
6
- interface WindowEventMap {
7
- [FOXACT_LOCAL_STORAGE_EVENT_KEY]: CustomStorageEvent;
8
- }
9
- }
10
- type Serializer<T> = (value: T) => string;
11
- type Deserializer<T> = (value: string) => T;
12
- interface UseLocalStorageRawOption {
13
- raw: true;
14
- }
15
- interface UseLocalStorageParserOption<T> {
16
- raw?: false;
17
- serializer: Serializer<T>;
18
- deserializer: Deserializer<T>;
19
- }
20
- type NotUndefined<T> = T extends undefined ? never : T;
21
- /** @see https://foxact.skk.moe/use-local-storage */
22
- declare function useLocalStorage<T>(key: string, serverValue?: NotUndefined<T> | undefined, options?: UseLocalStorageRawOption | UseLocalStorageParserOption<T>): readonly [NonNullable<T> | null, react.Dispatch<react.SetStateAction<T | null>>];
5
+ declare const useLocalStorage: <T>(key: string, serverValue?: (T extends undefined ? never : T) | undefined, options?: UseStorageRawOption | UseStorageParserOption<T>) => readonly [NonNullable<T> | null, react.Dispatch<react.SetStateAction<T | null>>];
6
+ declare const useSetLocalStorage: <T>(key: string, serializer: Serializer<T>) => (v: T | null) => void;
23
7
 
24
- export { type Deserializer, type Serializer, type UseLocalStorageParserOption, type UseLocalStorageRawOption, useLocalStorage };
8
+ export { Serializer, UseStorageParserOption as UseLocalStorageParserOption, UseStorageRawOption as UseLocalStorageRawOption, useLocalStorage, useSetLocalStorage };
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react"),n=require("../noop/index.js"),o=require("../use-isomorphic-layout-effect/index.js"),r=require("../no-ssr/index.js");const t="foxact-local-storage",i=e=>{"undefined"!=typeof window&&window.dispatchEvent(new CustomEvent(t,{detail:e}))},l=(e,n)=>{if("undefined"!=typeof window)try{window.localStorage.setItem(e,n)}catch(e){console.error(e)}finally{i(e)}},a=e=>{if("undefined"!=typeof window)try{window.localStorage.removeItem(e)}catch(e){console.error(e)}finally{i(e)}},s=e=>{if("undefined"==typeof window)return null;try{return window.localStorage.getItem(e)}catch(e){return console.warn(e),null}},u=()=>{throw r.noSSRError("useLocalStorage cannot be used on the server without a serverValue")},d=e=>"function"==typeof e,c=e=>e;exports.useLocalStorage=function(r,i){var w;let f=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{serializer:JSON.stringify,deserializer:JSON.parse};const y=e.useCallback(e=>{if("undefined"==typeof window)return n.noop;const o=n=>{"key"in n&&n.key!==r||e()},i=n=>{n.detail===r&&e()};return window.addEventListener("storage",o),window.addEventListener(t,i),()=>{window.removeEventListener("storage",o),window.removeEventListener(t,i)}},[r]),v=f.raw?c:f.serializer,p=f.raw?c:f.deserializer,g=void 0!==i?()=>v(i):u,h=e.useSyncExternalStore(y,()=>s(r),g),S=e.useMemo(()=>null===h?null:p(h),[h,p]),m=e.useCallback(e=>{try{const n=d(e)?e(null!=S?S:null):e;null===n?a(r):l(r,v(n))}catch(e){console.warn(e)}},[r,v,S]);return o.useIsomorphicLayoutEffect(()=>{null===s(r)&&void 0!==i&&l(r,v(i))},[p,r,v,i]),[null!==(w=null!=S?S:i)&&void 0!==w?w:null,m]};
1
+ "use strict";require("client-only");var e=require("../create-storage-hook/index.js");require("react"),require("../noop/index.js"),require("../use-isomorphic-layout-effect/index.js"),require("../no-ssr/index.js");const{useStorage:r,useSetStorage:o}=e.createStorage("localStorage");exports.useLocalStorage=r,exports.useSetLocalStorage=o;
@@ -1 +1 @@
1
- import"client-only";import{useCallback as e,useSyncExternalStore as n,useMemo as o}from"react";import{noop as t}from"../noop/index.mjs";import{useIsomorphicLayoutEffect as r}from"../use-isomorphic-layout-effect/index.mjs";import{noSSRError as i}from"../no-ssr/index.mjs";const l="foxact-local-storage",a=e=>{"undefined"!=typeof window&&window.dispatchEvent(new CustomEvent(l,{detail:e}))},d=(e,n)=>{if("undefined"!=typeof window)try{window.localStorage.setItem(e,n)}catch(e){console.error(e)}finally{a(e)}},s=e=>{if("undefined"!=typeof window)try{window.localStorage.removeItem(e)}catch(e){console.error(e)}finally{a(e)}},w=e=>{if("undefined"==typeof window)return null;try{return window.localStorage.getItem(e)}catch(e){return console.warn(e),null}},u=()=>{throw i("useLocalStorage cannot be used on the server without a serverValue")},c=e=>"function"==typeof e,f=e=>e;function m(i,a){var m;let y=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{serializer:JSON.stringify,deserializer:JSON.parse};const p=e(e=>{if("undefined"==typeof window)return t;const n=n=>{"key"in n&&n.key!==i||e()},o=n=>{n.detail===i&&e()};return window.addEventListener("storage",n),window.addEventListener(l,o),()=>{window.removeEventListener("storage",n),window.removeEventListener(l,o)}},[i]),v=y.raw?f:y.serializer,g=y.raw?f:y.deserializer,h=void 0!==a?()=>v(a):u,S=n(p,()=>w(i),h),E=o(()=>null===S?null:g(S),[S,g]),L=e(e=>{try{const n=c(e)?e(null!=E?E:null):e;null===n?s(i):d(i,v(n))}catch(e){console.warn(e)}},[i,v,E]);return r(()=>{null===w(i)&&void 0!==a&&d(i,v(a))},[g,i,v,a]),[null!==(m=null!=E?E:a)&&void 0!==m?m:null,L]}export{m as useLocalStorage};
1
+ import"client-only";import{createStorage as o}from"../create-storage-hook/index.mjs";import"react";import"../noop/index.mjs";import"../use-isomorphic-layout-effect/index.mjs";import"../no-ssr/index.mjs";const{useStorage:e,useSetStorage:t}=o("localStorage");export{e as useLocalStorage,t as useSetLocalStorage};
package/use-map/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react");exports.useMap=function(){let a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>new Map;const[t,l]=e.useState(a),s=e.useCallback((e,a)=>l(t=>(t.set(e,a),new Map(t))),[]),n=e.useCallback(e=>l(a=>a.has(e)?(a.delete(e),new Map(a)):a),[]),u=e.useCallback(()=>l(new Map),[]),r=e.useCallback(e=>l(e),[]);return[t,s,n,u,r]};
1
+ "use strict";require("client-only");var e=require("react");exports.useMap=function(){let a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>new Map;const[t,l]=e.useState(a),s=e.useCallback((e,a)=>l(t=>(t.set(e,a),new Map(t))),[]),n=e.useCallback(e=>l(a=>a.has(e)?(a.delete(e),new Map(a)):a),[]);return[t,s,n,e.useCallback(()=>l(new Map),[]),e.useCallback(e=>l(e),[])]};
package/use-map/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react");exports.useMap=function(){let a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>new Map;const[t,l]=e.useState(a),s=e.useCallback((e,a)=>l(t=>(t.set(e,a),new Map(t))),[]),n=e.useCallback(e=>l(a=>a.has(e)?(a.delete(e),new Map(a)):a),[]),u=e.useCallback(()=>l(new Map),[]),r=e.useCallback(e=>l(e),[]);return[t,s,n,u,r]};
1
+ "use strict";require("client-only");var e=require("react");exports.useMap=function(){let a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>new Map;const[t,l]=e.useState(a),s=e.useCallback((e,a)=>l(t=>(t.set(e,a),new Map(t))),[]),n=e.useCallback(e=>l(a=>a.has(e)?(a.delete(e),new Map(a)):a),[]);return[t,s,n,e.useCallback(()=>l(new Map),[]),e.useCallback(e=>l(e),[])]};
package/use-map/index.mjs CHANGED
@@ -1 +1 @@
1
- import"client-only";import{useState as e,useCallback as t}from"react";const n=function(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>new Map;const[o,p]=e(n),a=t((e,t)=>p(n=>(n.set(e,t),new Map(n))),[]),r=t(e=>p(t=>t.has(e)?(t.delete(e),new Map(t)):t),[]),c=t(()=>p(new Map),[]),i=t(e=>p(e),[]);return[o,a,r,c,i]};export{n as useMap};
1
+ import"client-only";import{useState as e,useCallback as t}from"react";const n=function(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>new Map;const[o,p]=e(n),a=t((e,t)=>p(n=>(n.set(e,t),new Map(n))),[]),r=t(e=>p(t=>t.has(e)?(t.delete(e),new Map(t)):t),[]);return[o,a,r,t(()=>p(new Map),[]),t(e=>p(e),[])]};export{n as useMap};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("next/router.js"),t=require("react");exports.useNextPathname=function(){let r=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const{asPath:n}=e.useRouter();return t.useMemo(()=>{const e=n.split(/[#?]/)[0];return r?e.endsWith("/")?e:"".concat(e,"/"):e},[r,n])};
1
+ "use strict";require("client-only");var e=require("next/router.js"),t=require("react");exports.useNextPathname=function(){let r=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const{asPath:n}=e.useRouter();return t.useMemo(()=>{const e=n.split(/[#?]/)[0];return r?e.endsWith("/")?e:"".concat(e,"/"):e},[r,n])};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("next/router.js"),t=require("react");exports.useNextPathname=function(){let r=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const{asPath:n}=e.useRouter();return t.useMemo(()=>{const e=n.split(/[#?]/)[0];return r?e.endsWith("/")?e:"".concat(e,"/"):e},[r,n])};
1
+ "use strict";require("client-only");var e=require("next/router.js"),t=require("react");exports.useNextPathname=function(){let r=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const{asPath:n}=e.useRouter();return t.useMemo(()=>{const e=n.split(/[#?]/)[0];return r?e.endsWith("/")?e:"".concat(e,"/"):e},[r,n])};
@@ -1 +1 @@
1
- import"client-only";import{useRouter as t}from"next/router.js";import{useMemo as n}from"react";const o=function(){let o=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const{asPath:e}=t();return n(()=>{const t=e.split(/[#?]/)[0];return o?t.endsWith("/")?t:"".concat(t,"/"):t},[o,e])};export{o as useNextPathname};
1
+ import"client-only";import{useRouter as t}from"next/router.js";import{useMemo as n}from"react";const o=function(){let o=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const{asPath:e}=t();return n(()=>{const t=e.split(/[#?]/)[0];return o?t.endsWith("/")?t:"".concat(t,"/"):t},[o,e])};export{o as useNextPathname};
@@ -1,2 +1,2 @@
1
1
  'use client';
2
- "use strict";require("client-only");var r=require("react"),e=require("react-router-dom");const t=()=>{const{navigator:t}=r.useContext(e.UNSAFE_NavigationContext);if(!t)throw TypeError("[foxact] useReactRouterEnableConcurrentNavigation must be used under <RouterProvider /> or a Router component (e.g. <BrowserRouter />)");r.useEffect(()=>{const e=t.go.bind(t),n=t.push.bind(t),o=t.replace.bind(t);return t.go=function(){for(var n=arguments.length,o=Array(n),a=0;a<n;a++)o[a]=arguments[a];return r.startTransition(()=>e.apply(t,o))},t.push=function(){for(var e=arguments.length,o=Array(e),a=0;a<e;a++)o[a]=arguments[a];return r.startTransition(()=>n.apply(t,o))},t.replace=function(){for(var e=arguments.length,n=Array(e),a=0;a<e;a++)n[a]=arguments[a];return r.startTransition(()=>o.apply(t,n))},()=>{t.go=e,t.push=n,t.replace=o}},[t])};exports.ReactRouterConcurrentNavigationProvider=r=>{let{children:e}=r;return t(),e},exports.useReactRouterEnableConcurrentNavigation=t;
2
+ "use strict";require("client-only");var r=require("react"),e=require("react-router-dom");const t=()=>{const{navigator:t}=r.useContext(e.UNSAFE_NavigationContext);if(!t)throw TypeError("[foxact] useReactRouterEnableConcurrentNavigation must be used under <RouterProvider /> or a Router component (e.g. <BrowserRouter />)");r.useEffect(()=>{const e=t.go.bind(t),n=t.push.bind(t),o=t.replace.bind(t);return t.go=function(){for(var n=arguments.length,o=Array(n),a=0;a<n;a++)o[a]=arguments[a];return r.startTransition(()=>e.apply(t,o))},t.push=function(){for(var e=arguments.length,o=Array(e),a=0;a<e;a++)o[a]=arguments[a];return r.startTransition(()=>n.apply(t,o))},t.replace=function(){for(var e=arguments.length,n=Array(e),a=0;a<e;a++)n[a]=arguments[a];return r.startTransition(()=>o.apply(t,n))},()=>{t.go=e,t.push=n,t.replace=o}},[t])};exports.ReactRouterConcurrentNavigationProvider=r=>{let{children:e}=r;return t(),e},exports.useReactRouterEnableConcurrentNavigation=t;
@@ -1,2 +1,2 @@
1
1
  'use client';
2
- "use strict";require("client-only");var r=require("react"),e=require("react-router-dom");const t=()=>{const{navigator:t}=r.useContext(e.UNSAFE_NavigationContext);if(!t)throw TypeError("[foxact] useReactRouterEnableConcurrentNavigation must be used under <RouterProvider /> or a Router component (e.g. <BrowserRouter />)");r.useEffect(()=>{const e=t.go.bind(t),n=t.push.bind(t),o=t.replace.bind(t);return t.go=function(){for(var n=arguments.length,o=Array(n),a=0;a<n;a++)o[a]=arguments[a];return r.startTransition(()=>e.apply(t,o))},t.push=function(){for(var e=arguments.length,o=Array(e),a=0;a<e;a++)o[a]=arguments[a];return r.startTransition(()=>n.apply(t,o))},t.replace=function(){for(var e=arguments.length,n=Array(e),a=0;a<e;a++)n[a]=arguments[a];return r.startTransition(()=>o.apply(t,n))},()=>{t.go=e,t.push=n,t.replace=o}},[t])};exports.ReactRouterConcurrentNavigationProvider=r=>{let{children:e}=r;return t(),e},exports.useReactRouterEnableConcurrentNavigation=t;
2
+ "use strict";require("client-only");var r=require("react"),e=require("react-router-dom");const t=()=>{const{navigator:t}=r.useContext(e.UNSAFE_NavigationContext);if(!t)throw TypeError("[foxact] useReactRouterEnableConcurrentNavigation must be used under <RouterProvider /> or a Router component (e.g. <BrowserRouter />)");r.useEffect(()=>{const e=t.go.bind(t),n=t.push.bind(t),o=t.replace.bind(t);return t.go=function(){for(var n=arguments.length,o=Array(n),a=0;a<n;a++)o[a]=arguments[a];return r.startTransition(()=>e.apply(t,o))},t.push=function(){for(var e=arguments.length,o=Array(e),a=0;a<e;a++)o[a]=arguments[a];return r.startTransition(()=>n.apply(t,o))},t.replace=function(){for(var e=arguments.length,n=Array(e),a=0;a<e;a++)n[a]=arguments[a];return r.startTransition(()=>o.apply(t,n))},()=>{t.go=e,t.push=n,t.replace=o}},[t])};exports.ReactRouterConcurrentNavigationProvider=r=>{let{children:e}=r;return t(),e},exports.useReactRouterEnableConcurrentNavigation=t;
@@ -1,2 +1,2 @@
1
1
  'use client';
2
- import"client-only";import{useContext as r,useEffect as e,startTransition as o}from"react";import{UNSAFE_NavigationContext as t}from"react-router-dom";const n=()=>{const{navigator:n}=r(t);if(!n)throw TypeError("[foxact] useReactRouterEnableConcurrentNavigation must be used under <RouterProvider /> or a Router component (e.g. <BrowserRouter />)");e(()=>{const r=n.go.bind(n),e=n.push.bind(n),t=n.replace.bind(n);return n.go=function(){for(var e=arguments.length,t=Array(e),a=0;a<e;a++)t[a]=arguments[a];return o(()=>r.apply(n,t))},n.push=function(){for(var r=arguments.length,t=Array(r),a=0;a<r;a++)t[a]=arguments[a];return o(()=>e.apply(n,t))},n.replace=function(){for(var r=arguments.length,e=Array(r),a=0;a<r;a++)e[a]=arguments[a];return o(()=>t.apply(n,e))},()=>{n.go=r,n.push=e,n.replace=t}},[n])},a=r=>{let{children:e}=r;return n(),e};export{a as ReactRouterConcurrentNavigationProvider,n as useReactRouterEnableConcurrentNavigation};
2
+ import"client-only";import{useContext as r,useEffect as e,startTransition as o}from"react";import{UNSAFE_NavigationContext as t}from"react-router-dom";const n=()=>{const{navigator:n}=r(t);if(!n)throw TypeError("[foxact] useReactRouterEnableConcurrentNavigation must be used under <RouterProvider /> or a Router component (e.g. <BrowserRouter />)");e(()=>{const r=n.go.bind(n),e=n.push.bind(n),t=n.replace.bind(n);return n.go=function(){for(var e=arguments.length,t=Array(e),a=0;a<e;a++)t[a]=arguments[a];return o(()=>r.apply(n,t))},n.push=function(){for(var r=arguments.length,t=Array(r),a=0;a<r;a++)t[a]=arguments[a];return o(()=>e.apply(n,t))},n.replace=function(){for(var r=arguments.length,e=Array(r),a=0;a<r;a++)e[a]=arguments[a];return o(()=>t.apply(n,e))},()=>{n.go=r,n.push=e,n.replace=t}},[n])},a=r=>{let{children:e}=r;return n(),e};export{a as ReactRouterConcurrentNavigationProvider,n as useReactRouterEnableConcurrentNavigation};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react"),t=require("react-router-dom");exports.useReactRouterIsMatch=function(r){let{relative:a,caseSensitive:o=!1,end:n=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{pathname:s}=t.useLocation(),{navigator:{encodeLocation:u}}=e.useContext(t.UNSAFE_NavigationContext),i=t.useResolvedPath(r,{relative:a});return e.useMemo(()=>{let e=s,t=u?u(i).pathname:i.pathname;return o||(e=e.toLowerCase(),t=t.toLowerCase()),e===t||!n&&e.startsWith(t)&&"/"===e.charAt(t.length)},[u,i,s,o,n])};
1
+ "use strict";require("client-only");var e=require("react"),t=require("react-router-dom");exports.useReactRouterIsMatch=function(r){let{relative:a,caseSensitive:o=!1,end:n=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{pathname:s}=t.useLocation(),{navigator:{encodeLocation:u}}=e.useContext(t.UNSAFE_NavigationContext),i=t.useResolvedPath(r,{relative:a});return e.useMemo(()=>{let e=s,t=u?u(i).pathname:i.pathname;return o||(e=e.toLowerCase(),t=t.toLowerCase()),e===t||!n&&e.startsWith(t)&&"/"===e.charAt(t.length)},[u,i,s,o,n])};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react"),t=require("react-router-dom");exports.useReactRouterIsMatch=function(r){let{relative:a,caseSensitive:o=!1,end:n=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{pathname:s}=t.useLocation(),{navigator:{encodeLocation:u}}=e.useContext(t.UNSAFE_NavigationContext),i=t.useResolvedPath(r,{relative:a});return e.useMemo(()=>{let e=s,t=u?u(i).pathname:i.pathname;return o||(e=e.toLowerCase(),t=t.toLowerCase()),e===t||!n&&e.startsWith(t)&&"/"===e.charAt(t.length)},[u,i,s,o,n])};
1
+ "use strict";require("client-only");var e=require("react"),t=require("react-router-dom");exports.useReactRouterIsMatch=function(r){let{relative:a,caseSensitive:o=!1,end:n=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{pathname:s}=t.useLocation(),{navigator:{encodeLocation:u}}=e.useContext(t.UNSAFE_NavigationContext),i=t.useResolvedPath(r,{relative:a});return e.useMemo(()=>{let e=s,t=u?u(i).pathname:i.pathname;return o||(e=e.toLowerCase(),t=t.toLowerCase()),e===t||!n&&e.startsWith(t)&&"/"===e.charAt(t.length)},[u,i,s,o,n])};
@@ -1 +1 @@
1
- import"client-only";import{useContext as t,useMemo as e}from"react";import{useLocation as r,UNSAFE_NavigationContext as o,useResolvedPath as a}from"react-router-dom";const n=function(n){let{relative:c,caseSensitive:m=!1,end:h=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{pathname:i}=r(),{navigator:{encodeLocation:s}}=t(o),p=a(n,{relative:c});return e(()=>{let t=i,e=s?s(p).pathname:p.pathname;return m||(t=t.toLowerCase(),e=e.toLowerCase()),t===e||!h&&t.startsWith(e)&&"/"===t.charAt(e.length)},[s,p,i,m,h])};export{n as useReactRouterIsMatch};
1
+ import"client-only";import{useContext as t,useMemo as e}from"react";import{useLocation as r,UNSAFE_NavigationContext as o,useResolvedPath as a}from"react-router-dom";const n=function(n){let{relative:c,caseSensitive:m=!1,end:h=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{pathname:i}=r(),{navigator:{encodeLocation:s}}=t(o),p=a(n,{relative:c});return e(()=>{let t=i,e=s?s(p).pathname:p.pathname;return m||(t=t.toLowerCase(),e=e.toLowerCase()),t===e||!h&&t.startsWith(e)&&"/"===t.charAt(e.length)},[s,p,i,m,h])};export{n as useReactRouterIsMatch};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react");exports.useRetimer=()=>{const r=e.useRef();return e.useCallback(e=>{"number"==typeof r.current&&clearTimeout(r.current),r.current=e},[])};
1
+ "use strict";require("client-only");var e=require("react");exports.useRetimer=()=>{const r=e.useRef();return e.useCallback(e=>{"number"==typeof r.current&&clearTimeout(r.current),r.current=e},[])};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react");exports.useRetimer=()=>{const r=e.useRef();return e.useCallback(e=>{"number"==typeof r.current&&clearTimeout(r.current),r.current=e},[])};
1
+ "use strict";require("client-only");var e=require("react");exports.useRetimer=()=>{const r=e.useRef();return e.useCallback(e=>{"number"==typeof r.current&&clearTimeout(r.current),r.current=e},[])};
@@ -1 +1 @@
1
- import"client-only";import{useRef as r,useCallback as e}from"react";const t=()=>{const t=r();return e(r=>{"number"==typeof t.current&&clearTimeout(t.current),t.current=r},[])};export{t as useRetimer};
1
+ import"client-only";import{useRef as r,useCallback as e}from"react";const t=()=>{const t=r();return e(r=>{"number"==typeof t.current&&clearTimeout(t.current),t.current=r},[])};export{t as useRetimer};
@@ -0,0 +1 @@
1
+ "use strict";require("client-only");var e=require("../create-storage-hook/index.cjs");require("react"),require("../noop/index.cjs"),require("../use-isomorphic-layout-effect/index.cjs"),require("../no-ssr/index.cjs");const{useStorage:r,useSetStorage:s}=e.createStorage("sessionStorage");exports.useSessionStorage=r,exports.useSetSessionStorage=s;
@@ -0,0 +1,8 @@
1
+ import * as react from 'react';
2
+ import { UseStorageRawOption, UseStorageParserOption, Serializer } from '../create-storage-hook/index.js';
3
+ export { Deserializer } from '../create-storage-hook/index.js';
4
+
5
+ declare const useSessionStorage: <T>(key: string, serverValue?: (T extends undefined ? never : T) | undefined, options?: UseStorageRawOption | UseStorageParserOption<T>) => readonly [NonNullable<T> | null, react.Dispatch<react.SetStateAction<T | null>>];
6
+ declare const useSetSessionStorage: <T>(key: string, serializer: Serializer<T>) => (v: T | null) => void;
7
+
8
+ export { Serializer, UseStorageParserOption as UseSessionStorageParserOption, UseStorageRawOption as UseSessionStorageRawOption, useSessionStorage, useSetSessionStorage };
@@ -0,0 +1 @@
1
+ "use strict";require("client-only");var e=require("../create-storage-hook/index.js");require("react"),require("../noop/index.js"),require("../use-isomorphic-layout-effect/index.js"),require("../no-ssr/index.js");const{useStorage:r,useSetStorage:s}=e.createStorage("sessionStorage");exports.useSessionStorage=r,exports.useSetSessionStorage=s;
@@ -0,0 +1 @@
1
+ import"client-only";import{createStorage as e}from"../create-storage-hook/index.mjs";import"react";import"../noop/index.mjs";import"../use-isomorphic-layout-effect/index.mjs";import"../no-ssr/index.mjs";const{useStorage:o,useSetStorage:s}=e("sessionStorage");export{o as useSessionStorage,s as useSetSessionStorage};
package/use-set/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react");exports.useSet=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>new Set;const[a,l]=e.useState(t),s=e.useCallback(e=>l(t=>t.has(e)?t:new Set([...t,e])),[]),n=e.useCallback(e=>l(t=>t.has(e)?(t.delete(e),new Set(t)):t),[]),u=e.useCallback(()=>l(new Set),[]),r=e.useCallback(e=>l(e),[]);return[a,s,n,u,r]};
1
+ "use strict";require("client-only");var e=require("react");exports.useSet=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>new Set;const[a,l]=e.useState(t),s=e.useCallback(e=>l(t=>t.has(e)?t:new Set([...t,e])),[]),n=e.useCallback(e=>l(t=>t.has(e)?(t.delete(e),new Set(t)):t),[]);return[a,s,n,e.useCallback(()=>l(new Set),[]),e.useCallback(e=>l(e),[])]};
package/use-set/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react");exports.useSet=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>new Set;const[a,l]=e.useState(t),s=e.useCallback(e=>l(t=>t.has(e)?t:new Set([...t,e])),[]),n=e.useCallback(e=>l(t=>t.has(e)?(t.delete(e),new Set(t)):t),[]),u=e.useCallback(()=>l(new Set),[]),r=e.useCallback(e=>l(e),[]);return[a,s,n,u,r]};
1
+ "use strict";require("client-only");var e=require("react");exports.useSet=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>new Set;const[a,l]=e.useState(t),s=e.useCallback(e=>l(t=>t.has(e)?t:new Set([...t,e])),[]),n=e.useCallback(e=>l(t=>t.has(e)?(t.delete(e),new Set(t)):t),[]);return[a,s,n,e.useCallback(()=>l(new Set),[]),e.useCallback(e=>l(e),[])]};
package/use-set/index.mjs CHANGED
@@ -1 +1 @@
1
- import"client-only";import{useState as e,useCallback as t}from"react";const n=function(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>new Set;const[o,r]=e(n),c=t(e=>r(t=>t.has(e)?t:new Set([...t,e])),[]),i=t(e=>r(t=>t.has(e)?(t.delete(e),new Set(t)):t),[]),l=t(()=>r(new Set),[]),s=t(e=>r(e),[]);return[o,c,i,l,s]};export{n as useSet};
1
+ import"client-only";import{useState as e,useCallback as t}from"react";const n=function(){let n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>new Set;const[o,r]=e(n),c=t(e=>r(t=>t.has(e)?t:new Set([...t,e])),[]),i=t(e=>r(t=>t.has(e)?(t.delete(e),new Set(t)):t),[]);return[o,c,i,t(()=>r(new Set),[]),t(e=>r(e),[])]};export{n as useSet};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react");exports.useSingleton=r=>{const t=e.useRef();return t.current||(t.current=r()),t};
1
+ "use strict";require("client-only");var e=require("react");exports.useSingleton=r=>{const t=e.useRef();return t.current||(t.current=r()),t};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react");exports.useSingleton=r=>{const t=e.useRef();return t.current||(t.current=r()),t};
1
+ "use strict";require("client-only");var e=require("react");exports.useSingleton=r=>{const t=e.useRef();return t.current||(t.current=r()),t};
@@ -1 +1 @@
1
- import"client-only";import{useRef as r}from"react";const t=t=>{const n=r();return n.current||(n.current=t()),n};export{t as useSingleton};
1
+ import"client-only";import{useRef as r}from"react";const t=t=>{const n=r();return n.current||(n.current=t()),n};export{t as useSingleton};
@@ -1 +1 @@
1
- "use strict";var e=require("react");const t="undefined"!=typeof window?e.useInsertionEffect||e.useLayoutEffect:e.useEffect;function n(){throw Error("foxact: the stablized handler cannot be invoked before the component has mounted.")}exports.useStableHandler=function(r){const o=e.useRef(n);return t(()=>{o.current=r},[r]),e.useCallback(function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];const r=o.current;return r(...t)},[])};
1
+ "use strict";var e=require("react");const t="undefined"!=typeof window?e.useInsertionEffect||e.useLayoutEffect:e.useEffect;function n(){throw Error("foxact: the stablized handler cannot be invoked before the component has mounted.")}exports.useStableHandler=function(r){const o=e.useRef(n);return t(()=>{o.current=r},[r]),e.useCallback(function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,o.current)(...t)},[])};
@@ -1 +1 @@
1
- "use strict";var e=require("react");const t="undefined"!=typeof window?e.useInsertionEffect||e.useLayoutEffect:e.useEffect;function n(){throw Error("foxact: the stablized handler cannot be invoked before the component has mounted.")}exports.useStableHandler=function(r){const o=e.useRef(n);return t(()=>{o.current=r},[r]),e.useCallback(function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];const r=o.current;return r(...t)},[])};
1
+ "use strict";var e=require("react");const t="undefined"!=typeof window?e.useInsertionEffect||e.useLayoutEffect:e.useEffect;function n(){throw Error("foxact: the stablized handler cannot be invoked before the component has mounted.")}exports.useStableHandler=function(r){const o=e.useRef(n);return t(()=>{o.current=r},[r]),e.useCallback(function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,o.current)(...t)},[])};
@@ -1 +1 @@
1
- import n,{useLayoutEffect as e,useEffect as t,useRef as r,useCallback as o}from"react";const c="undefined"!=typeof window?n.useInsertionEffect||e:t;function f(n){const e=r(u);return c(()=>{e.current=n},[n]),o(function(){for(var n=arguments.length,t=Array(n),r=0;r<n;r++)t[r]=arguments[r];const o=e.current;return o(...t)},[])}function u(){throw Error("foxact: the stablized handler cannot be invoked before the component has mounted.")}export{f as useStableHandler};
1
+ import e,{useLayoutEffect as n,useEffect as t,useRef as r,useCallback as o}from"react";const c="undefined"!=typeof window?e.useInsertionEffect||n:t;function f(e){const n=r(u);return c(()=>{n.current=e},[e]),o(function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return(0,n.current)(...t)},[])}function u(){throw Error("foxact: the stablized handler cannot be invoked before the component has mounted.")}export{f as useStableHandler};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react");const r=e=>e;exports.useUncontrolled=function(t){let u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r;const n=e.useRef(null),[c,l]=e.useReducer((e,r)=>u(r),t),s=e.useCallback(()=>{n.current&&l(n.current.value)},[]);return[c,s,n]};
1
+ "use strict";require("client-only");var e=require("react");const r=e=>e;exports.useUncontrolled=function(t){let u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r;const n=e.useRef(null),[c,l]=e.useReducer((e,r)=>u(r),t);return[c,e.useCallback(()=>{n.current&&l(n.current.value)},[]),n]};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react");const r=e=>e;exports.useUncontrolled=function(t){let u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r;const n=e.useRef(null),[c,l]=e.useReducer((e,r)=>u(r),t),s=e.useCallback(()=>{n.current&&l(n.current.value)},[]);return[c,s,n]};
1
+ "use strict";require("client-only");var e=require("react");const r=e=>e;exports.useUncontrolled=function(t){let u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r;const n=e.useRef(null),[c,l]=e.useReducer((e,r)=>u(r),t);return[c,e.useCallback(()=>{n.current&&l(n.current.value)},[]),n]};
@@ -1 +1 @@
1
- import"client-only";import{useRef as t,useReducer as n,useCallback as r}from"react";const e=t=>t;function o(o){let l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e;const c=t(null),[u,i]=n((t,n)=>l(n),o),m=r(()=>{c.current&&i(c.current.value)},[]);return[u,m,c]}export{o as useUncontrolled};
1
+ import"client-only";import{useRef as t,useReducer as n,useCallback as r}from"react";const e=t=>t;function o(o){let l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e;const c=t(null),[u,i]=n((t,n)=>l(n),o);return[u,r(()=>{c.current&&i(c.current.value)},[]),c]}export{o as useUncontrolled};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react"),n=require("../noop/index.cjs"),t=require("../use-stable-handler-only-when-you-know-what-you-are-doing-or-you-will-be-fired/index.cjs");const o=e=>e,r=(()=>{if("undefined"==typeof window)return e=>n.noop;let e=!1;const t=new Set,o=()=>{t.forEach(e=>e())};return n=>(t.add(n),e||(e=!0,window.addEventListener("hashchange",o)),()=>{t.delete(n)})})(),s=e=>"function"==typeof e;exports.unstable_useUrlHashState=function(n,a){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:o;const i=t.useStableHandler(l);return[e.useSyncExternalStore(r,()=>{const e=new URLSearchParams(location.hash.slice(1)),t=e.get(n);return null!==t?l(t):a},()=>a),e.useCallback(e=>{let t;const o=location.hash,r=new URLSearchParams(o.slice(1));if(s(e)){const o=r.get(n);t=e(null!==o?i(o):a)}else t=e;t===a||void 0===t?r.delete(n):r.set(n,JSON.stringify(t));const l=r.toString();o!==l&&(location.hash=l)},[a,n,i])]};
1
+ "use strict";require("client-only");var e=require("react"),r=require("../noop/index.cjs"),n=require("../no-ssr/index.cjs");const t=e=>e,a=(()=>{if("undefined"==typeof window)return e=>r.noop;let e=!1;const n=new Set,t=()=>{n.forEach(e=>e())};return r=>(n.add(r),e||(e=!0,window.addEventListener("hashchange",t)),()=>{n.delete(r)})})(),l=e=>"function"==typeof e,o=()=>{throw n.noSSRError("useUrlHashState cannot be used on the server without a serverValue")};exports.unstable_useUrlHashState=function(r,n){var s;let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{serializer:t,deserializer:t};const u=i.raw?t:i.serializer,c=i.raw?t:i.deserializer,d=void 0!==n?()=>u(n):o,h=e.useSyncExternalStore(a,()=>new URLSearchParams(location.hash.slice(1)).get(r),d),w=e.useMemo(()=>null===h?null!=n?n:null:c(h),[n,c,h]),S=e.useCallback(e=>{const t=location.hash,a=new URLSearchParams(t.slice(1)),o=l(e)?e(w):e;o===n||null===o?a.delete(r):a.set(r,u(o));const s=a.toString();t!==s&&(location.hash=s)},[n,w,r,u]);return[(s=null!=w?w:n)!==null&&void 0!==s?s:null,S]};
@@ -1,5 +1,15 @@
1
+ type NotUndefined<T> = T extends undefined ? never : T;
2
+ type Serializer<T> = (value: T) => string;
3
+ type Deserializer<T> = (value: string) => T;
4
+ interface UseUrlHashStateRawOption {
5
+ raw: true;
6
+ }
7
+ interface UseUrlHashStateParserOption<T> {
8
+ raw?: false;
9
+ serializer: Serializer<T>;
10
+ deserializer: Deserializer<T>;
11
+ }
1
12
  /** @see https://foxact.skk.moe/use-url-hash-state */
2
- declare function useUrlHashState<T>(key: string, defaultValue?: undefined): readonly [T | undefined, React.Dispatch<React.SetStateAction<T | undefined>>];
3
- declare function useUrlHashState<T>(key: string, defaultValue: T, transform?: (value: string) => T): readonly [T, React.Dispatch<React.SetStateAction<T>>];
13
+ declare function useUrlHashState<T>(key: string, defaultValue?: NotUndefined<T> | undefined, options?: UseUrlHashStateRawOption | UseUrlHashStateParserOption<T>): readonly [NonNullable<T> | null, (v: React.SetStateAction<T | null>) => void];
4
14
 
5
- export { useUrlHashState as unstable_useUrlHashState };
15
+ export { type Deserializer, type Serializer, type UseUrlHashStateParserOption, type UseUrlHashStateRawOption, useUrlHashState as unstable_useUrlHashState };
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react"),n=require("../noop/index.js"),t=require("../use-stable-handler-only-when-you-know-what-you-are-doing-or-you-will-be-fired/index.js");const o=e=>e,r=(()=>{if("undefined"==typeof window)return e=>n.noop;let e=!1;const t=new Set,o=()=>{t.forEach(e=>e())};return n=>(t.add(n),e||(e=!0,window.addEventListener("hashchange",o)),()=>{t.delete(n)})})(),s=e=>"function"==typeof e;exports.unstable_useUrlHashState=function(n,a){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:o;const i=t.useStableHandler(l);return[e.useSyncExternalStore(r,()=>{const e=new URLSearchParams(location.hash.slice(1)),t=e.get(n);return null!==t?l(t):a},()=>a),e.useCallback(e=>{let t;const o=location.hash,r=new URLSearchParams(o.slice(1));if(s(e)){const o=r.get(n);t=e(null!==o?i(o):a)}else t=e;t===a||void 0===t?r.delete(n):r.set(n,JSON.stringify(t));const l=r.toString();o!==l&&(location.hash=l)},[a,n,i])]};
1
+ "use strict";require("client-only");var e=require("react"),r=require("../noop/index.js"),n=require("../no-ssr/index.js");const t=e=>e,a=(()=>{if("undefined"==typeof window)return e=>r.noop;let e=!1;const n=new Set,t=()=>{n.forEach(e=>e())};return r=>(n.add(r),e||(e=!0,window.addEventListener("hashchange",t)),()=>{n.delete(r)})})(),l=e=>"function"==typeof e,o=()=>{throw n.noSSRError("useUrlHashState cannot be used on the server without a serverValue")};exports.unstable_useUrlHashState=function(r,n){var s;let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{serializer:t,deserializer:t};const u=i.raw?t:i.serializer,c=i.raw?t:i.deserializer,d=void 0!==n?()=>u(n):o,h=e.useSyncExternalStore(a,()=>new URLSearchParams(location.hash.slice(1)).get(r),d),w=e.useMemo(()=>null===h?null!=n?n:null:c(h),[n,c,h]),S=e.useCallback(e=>{const t=location.hash,a=new URLSearchParams(t.slice(1)),o=l(e)?e(w):e;o===n||null===o?a.delete(r):a.set(r,u(o));const s=a.toString();t!==s&&(location.hash=s)},[n,w,r,u]);return[(s=null!=w?w:n)!==null&&void 0!==s?s:null,S]};
@@ -1 +1 @@
1
- import"client-only";import{useSyncExternalStore as e,useCallback as t}from"react";import{noop as n}from"../noop/index.mjs";import{useStableHandler as o}from"../use-stable-handler-only-when-you-know-what-you-are-doing-or-you-will-be-fired/index.mjs";const r=e=>e,s=(()=>{if("undefined"==typeof window)return e=>n;let e=!1;const t=new Set,o=()=>{t.forEach(e=>e())};return n=>(t.add(n),e||(e=!0,window.addEventListener("hashchange",o)),()=>{t.delete(n)})})(),a=e=>"function"==typeof e;function i(n,i){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:r;const c=o(l);return[e(s,()=>{const e=new URLSearchParams(location.hash.slice(1)),t=e.get(n);return null!==t?l(t):i},()=>i),t(e=>{let t;const o=location.hash,r=new URLSearchParams(o.slice(1));if(a(e)){const o=r.get(n);t=e(null!==o?c(o):i)}else t=e;t===i||void 0===t?r.delete(n):r.set(n,JSON.stringify(t));const s=r.toString();o!==s&&(location.hash=s)},[i,n,c])]}export{i as unstable_useUrlHashState};
1
+ import"client-only";import{useSyncExternalStore as e,useMemo as t,useCallback as n}from"react";import{noop as r}from"../noop/index.mjs";import{noSSRError as o}from"../no-ssr/index.mjs";const a=e=>e,l=(()=>{if("undefined"==typeof window)return e=>r;let e=!1;const t=new Set,n=()=>{t.forEach(e=>e())};return r=>(t.add(r),e||(e=!0,window.addEventListener("hashchange",n)),()=>{t.delete(r)})})(),s=e=>"function"==typeof e,i=()=>{throw o("useUrlHashState cannot be used on the server without a serverValue")};function u(r,o){var u;let c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{serializer:a,deserializer:a};const h=c.raw?a:c.serializer,d=c.raw?a:c.deserializer,m=e(l,()=>new URLSearchParams(location.hash.slice(1)).get(r),void 0!==o?()=>h(o):i),w=t(()=>null===m?null!=o?o:null:d(m),[o,d,m]),f=n(e=>{const t=location.hash,n=new URLSearchParams(t.slice(1)),a=s(e)?e(w):e;a===o||null===a?n.delete(r):n.set(r,h(a));const l=n.toString();t!==l&&(location.hash=l)},[o,w,r,h]);return[(u=null!=w?w:o)!==null&&void 0!==u?u:null,f]}export{u as unstable_useUrlHashState};