foxact 0.2.38 → 0.2.40

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 (110) hide show
  1. package/context-state/index.cjs +1 -1
  2. package/context-state/index.js +1 -1
  3. package/context-state/index.mjs +1 -1
  4. package/create-fixed-array/index.cjs +1 -1
  5. package/create-fixed-array/index.d.ts +3 -3
  6. package/create-fixed-array/index.js +1 -1
  7. package/create-fixed-array/index.mjs +1 -1
  8. package/create-local-storage-state/index.cjs +1 -0
  9. package/create-local-storage-state/index.d.ts +24 -0
  10. package/create-local-storage-state/index.js +1 -0
  11. package/create-local-storage-state/index.mjs +1 -0
  12. package/create-session-storage-state/index.cjs +1 -0
  13. package/create-session-storage-state/index.d.ts +25 -0
  14. package/create-session-storage-state/index.js +1 -0
  15. package/create-session-storage-state/index.mjs +1 -0
  16. package/create-storage-hook/index.cjs +1 -1
  17. package/create-storage-hook/index.d.ts +4 -3
  18. package/create-storage-hook/index.js +1 -1
  19. package/create-storage-hook/index.mjs +1 -1
  20. package/create-storage-state-factory/index.cjs +1 -0
  21. package/create-storage-state-factory/index.d.ts +11 -0
  22. package/create-storage-state-factory/index.js +1 -0
  23. package/create-storage-state-factory/index.mjs +1 -0
  24. package/current-year/index.cjs +1 -1
  25. package/current-year/index.js +1 -1
  26. package/current-year/index.mjs +1 -1
  27. package/no-ssr/index.cjs +1 -1
  28. package/no-ssr/index.d.ts +2 -2
  29. package/no-ssr/index.js +1 -1
  30. package/no-ssr/index.mjs +1 -1
  31. package/nullthrow/index.d.ts +1 -1
  32. package/nullthrow/index.mjs +1 -1
  33. package/package.json +128 -92
  34. package/rem/index.cjs +1 -1
  35. package/rem/index.js +1 -1
  36. package/rem/index.mjs +1 -1
  37. package/sizes.json +1 -1
  38. package/use-abortable-effect/index.cjs +1 -1
  39. package/use-abortable-effect/index.d.ts +2 -2
  40. package/use-abortable-effect/index.js +1 -1
  41. package/use-abortable-effect/index.mjs +1 -1
  42. package/use-array/index.d.ts +1 -1
  43. package/use-array/index.mjs +1 -1
  44. package/use-clipboard/index.cjs +1 -1
  45. package/use-clipboard/index.d.ts +1 -0
  46. package/use-clipboard/index.js +1 -1
  47. package/use-clipboard/index.mjs +1 -1
  48. package/use-component-will-receive-update/index.cjs +1 -0
  49. package/use-component-will-receive-update/index.d.ts +6 -0
  50. package/use-component-will-receive-update/index.js +1 -0
  51. package/use-component-will-receive-update/index.mjs +1 -0
  52. package/use-composition-input/index.cjs +1 -1
  53. package/use-composition-input/index.d.ts +1 -1
  54. package/use-composition-input/index.js +1 -1
  55. package/use-composition-input/index.mjs +1 -1
  56. package/use-debounced-value/index.cjs +1 -1
  57. package/use-debounced-value/index.js +1 -1
  58. package/use-debounced-value/index.mjs +1 -1
  59. package/use-error-boundary/index.cjs +1 -1
  60. package/use-error-boundary/index.d.ts +1 -1
  61. package/use-error-boundary/index.js +1 -1
  62. package/use-error-boundary/index.mjs +1 -1
  63. package/use-is-client/index.cjs +1 -1
  64. package/use-is-client/index.d.ts +1 -1
  65. package/use-is-client/index.js +1 -1
  66. package/use-is-client/index.mjs +1 -1
  67. package/use-isomorphic-layout-effect/index.cjs +1 -1
  68. package/use-isomorphic-layout-effect/index.d.ts +3 -3
  69. package/use-isomorphic-layout-effect/index.js +1 -1
  70. package/use-isomorphic-layout-effect/index.mjs +1 -1
  71. package/use-local-storage/index.d.ts +3 -3
  72. package/use-map/index.d.ts +1 -1
  73. package/use-map/index.mjs +1 -1
  74. package/use-media-query/index.cjs +1 -1
  75. package/use-media-query/index.d.ts +1 -1
  76. package/use-media-query/index.js +1 -1
  77. package/use-media-query/index.mjs +1 -1
  78. package/use-next-link/index.cjs +1 -1
  79. package/use-next-link/index.d.ts +3 -1
  80. package/use-next-link/index.js +1 -1
  81. package/use-next-link/index.mjs +1 -1
  82. package/use-next-pathname/index.d.ts +1 -1
  83. package/use-next-pathname/index.mjs +1 -1
  84. package/use-react-router-enable-concurrent-navigation/index.cjs +1 -1
  85. package/use-react-router-enable-concurrent-navigation/index.d.ts +2 -2
  86. package/use-react-router-enable-concurrent-navigation/index.js +1 -1
  87. package/use-react-router-enable-concurrent-navigation/index.mjs +1 -1
  88. package/use-react-router-is-match/index.d.ts +1 -1
  89. package/use-react-router-is-match/index.mjs +1 -1
  90. package/use-retimer/index.cjs +1 -1
  91. package/use-retimer/index.d.ts +1 -1
  92. package/use-retimer/index.js +1 -1
  93. package/use-retimer/index.mjs +1 -1
  94. package/use-session-storage/index.d.ts +3 -3
  95. package/use-set/index.d.ts +1 -1
  96. package/use-set/index.mjs +1 -1
  97. package/use-singleton/index.cjs +1 -1
  98. package/use-singleton/index.d.ts +1 -1
  99. package/use-singleton/index.js +1 -1
  100. package/use-singleton/index.mjs +1 -1
  101. package/use-stable-handler-only-when-you-know-what-you-are-doing-or-you-will-be-fired/index.cjs +1 -1
  102. package/use-stable-handler-only-when-you-know-what-you-are-doing-or-you-will-be-fired/index.js +1 -1
  103. package/use-stable-handler-only-when-you-know-what-you-are-doing-or-you-will-be-fired/index.mjs +1 -1
  104. package/use-uncontrolled/index.cjs +1 -1
  105. package/use-uncontrolled/index.js +1 -1
  106. package/use-uncontrolled/index.mjs +1 -1
  107. package/use-url-hash-state/index.cjs +1 -1
  108. package/use-url-hash-state/index.d.ts +1 -1
  109. package/use-url-hash-state/index.js +1 -1
  110. package/use-url-hash-state/index.mjs +1 -1
@@ -1 +1 @@
1
- "use strict";var e=require("react/jsx-runtime");require("client-only");var t=require("react"),r=require("../noop/index.cjs");exports.createContextState=function(n){const o=t.createContext(n),u=t.createContext(r.noop);return[r=>{let{children:c}=r;const[i,s]=t.useState(n);return e.jsx(o.Provider,{value:i,children:e.jsx(u.Provider,{value:s,children:c})})},()=>t.useContext(o),()=>t.useContext(u),o]};
1
+ "use strict";var e=require("react/jsx-runtime");require("client-only");var t=require("react"),r=require("../noop/index.cjs");exports.createContextState=function(n){const o=/*#__PURE__*/t.createContext(n),u=/*#__PURE__*/t.createContext(r.noop);return[r=>{let{children:c}=r;const[i,s]=t.useState(n);return /*#__PURE__*/e.jsx(o.Provider,{value:i,children:/*#__PURE__*/e.jsx(u.Provider,{value:s,children:c})})},()=>t.useContext(o),()=>t.useContext(u),o]};
@@ -1 +1 @@
1
- "use strict";var e=require("react/jsx-runtime");require("client-only");var t=require("react"),r=require("../noop/index.js");exports.createContextState=function(n){const o=t.createContext(n),u=t.createContext(r.noop);return[r=>{let{children:i}=r;const[c,s]=t.useState(n);return e.jsx(o.Provider,{value:c,children:e.jsx(u.Provider,{value:s,children:i})})},()=>t.useContext(o),()=>t.useContext(u),o]};
1
+ "use strict";var e=require("react/jsx-runtime");require("client-only");var t=require("react"),r=require("../noop/index.js");exports.createContextState=function(n){const o=/*#__PURE__*/t.createContext(n),u=/*#__PURE__*/t.createContext(r.noop);return[r=>{let{children:i}=r;const[c,s]=t.useState(n);return /*#__PURE__*/e.jsx(o.Provider,{value:c,children:/*#__PURE__*/e.jsx(u.Provider,{value:s,children:i})})},()=>t.useContext(o),()=>t.useContext(u),o]};
@@ -1 +1 @@
1
- import{jsx as r}from"react/jsx-runtime";import"client-only";import{createContext as t,useContext as e,useState as o}from"react";import{noop as n}from"../noop/index.mjs";function i(i){const c=t(i),m=t(n);return[t=>{let{children:e}=t;const[n,l]=o(i);return r(c.Provider,{value:n,children:r(m.Provider,{value:l,children:e})})},()=>e(c),()=>e(m),c]}export{i as createContextState};
1
+ import{jsx as r}from"react/jsx-runtime";import"client-only";import{createContext as t,useContext as e,useState as o}from"react";import{noop as n}from"../noop/index.mjs";function i(i){const c=/*#__PURE__*/t(i),m=/*#__PURE__*/t(n);return[t=>{let{children:e}=t;const[n,l]=o(i);return /*#__PURE__*/r(c.Provider,{value:n,children:/*#__PURE__*/r(m.Provider,{value:l,children:e})})},()=>e(c),()=>e(m),c]}export{i as createContextState};
@@ -1 +1 @@
1
- "use strict";const e=new Map,r=e=>{const r=Array.from(Array(e).keys());return"development"===process.env.NODE_ENV&&Object.freeze(r),r},t=t=>{if(e.has(t))return e.get(t);const s=r(t);return e.set(t,s),s},s=new Map,a=e=>{let t,a;return s.has(e)&&(a=(t=s.get(e)).deref()),a||(t=new WeakRef(a=r(e)),s.set(e,t)),a},n="function"==typeof WeakRef?a:t;exports.createFixedArray=n,exports.createFixedArrayWithGC=a,exports.createFixedArrayWithoutGC=t;
1
+ "use strict";const e=new Map;function t(e){const t=Array.from(Array(e).keys());return"development"===process.env.NODE_ENV&&Object.freeze(t),t}function r(r){if(e.has(r))return e.get(r);const n=t(r);return e.set(r,n),n}const n=new Map;function o(e){let r,o;return n.has(e)&&(o=(r=n.get(e)).deref()),o||(r=new WeakRef(o=t(e)),n.set(e,r)),o}const s="function"==typeof WeakRef?o:r;exports.createFixedArray=s,exports.createFixedArrayWithGC=o,exports.createFixedArrayWithoutGC=r;
@@ -1,5 +1,5 @@
1
- declare const createFixedArrayWithoutGC: (length: number) => readonly number[];
2
- declare const createFixedArrayWithGC: (length: number) => readonly number[];
3
- declare const createFixedArray: (length: number) => readonly number[];
1
+ declare function createFixedArrayWithoutGC(length: number): readonly number[];
2
+ declare function createFixedArrayWithGC(length: number): readonly number[];
3
+ declare const createFixedArray: typeof createFixedArrayWithGC;
4
4
 
5
5
  export { createFixedArray, createFixedArrayWithGC, createFixedArrayWithoutGC };
@@ -1 +1 @@
1
- "use strict";const e=new Map,r=e=>{const r=Array.from(Array(e).keys());return"development"===process.env.NODE_ENV&&Object.freeze(r),r},t=t=>{if(e.has(t))return e.get(t);const s=r(t);return e.set(t,s),s},s=new Map,a=e=>{let t,a;return s.has(e)&&(a=(t=s.get(e)).deref()),a||(t=new WeakRef(a=r(e)),s.set(e,t)),a},n="function"==typeof WeakRef?a:t;exports.createFixedArray=n,exports.createFixedArrayWithGC=a,exports.createFixedArrayWithoutGC=t;
1
+ "use strict";const e=new Map;function t(e){const t=Array.from(Array(e).keys());return"development"===process.env.NODE_ENV&&Object.freeze(t),t}function r(r){if(e.has(r))return e.get(r);const n=t(r);return e.set(r,n),n}const n=new Map;function o(e){let r,o;return n.has(e)&&(o=(r=n.get(e)).deref()),o||(r=new WeakRef(o=t(e)),n.set(e,r)),o}const s="function"==typeof WeakRef?o:r;exports.createFixedArray=s,exports.createFixedArrayWithGC=o,exports.createFixedArrayWithoutGC=r;
@@ -1 +1 @@
1
- const e=new Map,r=e=>{const r=Array.from(Array(e).keys());return"development"===process.env.NODE_ENV&&Object.freeze(r),r},t=t=>{if(e.has(t))return e.get(t);const a=r(t);return e.set(t,a),a},a=new Map,n=e=>{let t,n;return a.has(e)&&(n=(t=a.get(e)).deref()),n||(t=new WeakRef(n=r(e)),a.set(e,t)),n},o="function"==typeof WeakRef?n:t;export{o as createFixedArray,n as createFixedArrayWithGC,t as createFixedArrayWithoutGC};
1
+ const e=new Map;function t(e){const t=Array.from(Array(e).keys());return"development"===process.env.NODE_ENV&&Object.freeze(t),t}function r(r){if(e.has(r))return e.get(r);const n=t(r);return e.set(r,n),n}const n=new Map;function o(e){let r,o;return n.has(e)&&(o=(r=n.get(e)).deref()),o||(r=new WeakRef(o=t(e)),n.set(e,r)),o}const a="function"==typeof WeakRef?o:r;export{a as createFixedArray,o as createFixedArrayWithGC,r as createFixedArrayWithoutGC};
@@ -0,0 +1 @@
1
+ "use strict";require("client-only");var e=require("../create-storage-state-factory/index.cjs");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 r=e.createStorageStateFactory("localStorage");exports.createLocalStorageState=r;
@@ -0,0 +1,24 @@
1
+ import { StateHook, ValueHook, SetValueHook } from '../create-storage-state-factory/index.js';
2
+ import { NotUndefined, UseStorageRawOption, UseStorageParserOption } from '../create-storage-hook/index.js';
3
+
4
+ /**
5
+ * @see https://foxact.skk.moe/create-local-storage-state
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * const [useOpenState, useOpen] = createLocalStorageState(
10
+ * 'open', // storage key
11
+ * false, // server default value
12
+ * { raw: false } // options
13
+ * );
14
+ *
15
+ * const [open, setOpen] = useOpenState();
16
+ * const open = useOpen();
17
+ * ```
18
+ */
19
+ declare const createLocalStorageState: {
20
+ <T>(key: string, serverValue: NotUndefined<T>, options?: UseStorageRawOption | UseStorageParserOption<T>): readonly [StateHook<T>, ValueHook<T>, SetValueHook<T | null>];
21
+ <T>(key: string, serverValue?: undefined, options?: UseStorageRawOption | UseStorageParserOption<T>): readonly [StateHook<T | null>, ValueHook<T | null>, SetValueHook<T | null>];
22
+ };
23
+
24
+ export { createLocalStorageState };
@@ -0,0 +1 @@
1
+ "use strict";require("client-only");var e=require("../create-storage-state-factory/index.js");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 r=e.createStorageStateFactory("localStorage");exports.createLocalStorageState=r;
@@ -0,0 +1 @@
1
+ import"client-only";import{createStorageStateFactory as o}from"../create-storage-state-factory/index.mjs";import"../create-storage-hook/index.mjs";import"react";import"../noop/index.mjs";import"../use-isomorphic-layout-effect/index.mjs";import"../no-ssr/index.mjs";const t=o("localStorage");export{t as createLocalStorageState};
@@ -0,0 +1 @@
1
+ "use strict";require("client-only");var e=require("../create-storage-state-factory/index.cjs");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 r=e.createStorageStateFactory("sessionStorage");exports.createSessionStorageState=r;
@@ -0,0 +1,25 @@
1
+ import { StateHook, ValueHook, SetValueHook } from '../create-storage-state-factory/index.js';
2
+ import { NotUndefined, UseStorageRawOption, UseStorageParserOption } from '../create-storage-hook/index.js';
3
+
4
+ /**
5
+ * @see https://foxact.skk.moe/create-session-storage-state
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * ```ts
10
+ * const [useOpenState, useOpen] = createSessionStorageState(
11
+ * 'open', // storage key
12
+ * false, // server default value
13
+ * { raw: false } // options
14
+ * );
15
+ *
16
+ * const [open, setOpen] = useOpenState();
17
+ * const open = useOpen();
18
+ * ```
19
+ */
20
+ declare const createSessionStorageState: {
21
+ <T>(key: string, serverValue: NotUndefined<T>, options?: UseStorageRawOption | UseStorageParserOption<T>): readonly [StateHook<T>, ValueHook<T>, SetValueHook<T | null>];
22
+ <T>(key: string, serverValue?: undefined, options?: UseStorageRawOption | UseStorageParserOption<T>): readonly [StateHook<T | null>, ValueHook<T | null>, SetValueHook<T | null>];
23
+ };
24
+
25
+ export { createSessionStorageState };
@@ -0,0 +1 @@
1
+ "use strict";require("client-only");var e=require("../create-storage-state-factory/index.js");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 r=e.createStorageStateFactory("sessionStorage");exports.createSessionStorageState=r;
@@ -0,0 +1 @@
1
+ import"client-only";import{createStorageStateFactory as o}from"../create-storage-state-factory/index.mjs";import"../create-storage-hook/index.mjs";import"react";import"../noop/index.mjs";import"../use-isomorphic-layout-effect/index.mjs";import"../no-ssr/index.mjs";const e=o("sessionStorage");export{e as createSessionStorageState};
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react"),o=require("../noop/index.cjs"),t=require("../use-isomorphic-layout-effect/index.cjs"),n=require("../no-ssr/index.cjs");const r=e=>"function"==typeof e,a=e=>e,i=()=>{throw n.noSSRError("useLocalStorage cannot be used on the server without a serverValue")};exports.createStorage=function(n){const l="localStorage"===n?"foxact-use-local-storage":"foxact-use-session-storage",c="localStorage"===n?"foxact/use-local-storage":"foxact/use-session-storage",s="undefined"!=typeof window?e=>{window.dispatchEvent(new CustomEvent(l,{detail:e}))}:o.noop,u="undefined"!=typeof window?(e,o)=>{try{window[n].setItem(e,o)}catch(e){console.warn("[".concat(c,"] Failed to set value to ").concat(n,", it might be blocked"))}finally{s(e)}}:o.noop,d="undefined"!=typeof window?e=>{try{window[n].removeItem(e)}catch(e){console.warn("[".concat(c,"] Failed to remove value from ").concat(n,", it might be blocked"))}finally{s(e)}}:o.noop,w=e=>{if("undefined"==typeof window)return null;try{return window[n].getItem(e)}catch(e){return console.warn("[".concat(c,"] Failed to get value from ").concat(n,", it might be blocked")),null}};return{useStorage:function(n,c){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{serializer:JSON.stringify,deserializer:JSON.parse};const f=e.useCallback(e=>{if("undefined"==typeof window)return o.noop;const t=o=>{"key"in o&&o.key!==n||e()},r=o=>{o.detail===n&&e()};return window.addEventListener("storage",t),window.addEventListener(l,r),()=>{window.removeEventListener("storage",t),window.removeEventListener(l,r)}},[n]),v=s.raw?a:s.serializer,y=s.raw?a:s.deserializer,g=void 0!==c?()=>v(c):i,m=e.useSyncExternalStore(f,()=>w(n),g),p=e.useMemo(()=>null===m?null:y(m),[m,y]),h=e.useCallback(e=>{try{const o=r(e)?e(null!=p?p:null):e;null===o?d(n):u(n,v(o))}catch(e){console.warn(e)}},[n,v,p]);return t.useLayoutEffect(()=>{null===w(n)&&void 0!==c&&u(n,v(c))},[y,n,v,c]),[null===p?void 0===c?null:c:p,h]},useSetStorage:(o,t)=>e.useCallback(e=>{try{null===e?d(o):u(o,t(e))}catch(e){console.warn(e)}},[o,t])}};
1
+ "use strict";require("client-only");var e=require("react"),o=require("../noop/index.cjs"),t=require("../use-isomorphic-layout-effect/index.cjs"),n=require("../no-ssr/index.cjs");const r=e=>"function"==typeof e,a=e=>e;function i(){throw n.noSSRError("useLocalStorage cannot be used on the server without a serverValue")}exports.createStorage=function(n){const l="localStorage"===n?"foxact-use-local-storage":"foxact-use-session-storage",c="localStorage"===n?"foxact/use-local-storage":"foxact/use-session-storage",s="undefined"==typeof window?o.noop:e=>{window.dispatchEvent(new CustomEvent(l,{detail:e}))},u="undefined"==typeof window?o.noop:(e,o)=>{try{window[n].setItem(e,o)}catch(e){console.warn("[".concat(c,"] Failed to set value to ").concat(n,", it might be blocked"))}finally{s(e)}},d="undefined"==typeof window?o.noop:e=>{try{window[n].removeItem(e)}catch(e){console.warn("[".concat(c,"] Failed to remove value from ").concat(n,", it might be blocked"))}finally{s(e)}},w=e=>{if("undefined"==typeof window)return null;try{return window[n].getItem(e)}catch(e){return console.warn("[".concat(c,"] Failed to get value from ").concat(n,", it might be blocked")),null}};return{useStorage:function(n,c){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{raw:!1,serializer:JSON.stringify,deserializer:JSON.parse};const f=e.useCallback(e=>{if("undefined"==typeof window)return o.noop;const t=o=>{"key"in o&&o.key!==n||e()},r=o=>{o.detail===n&&e()};return window.addEventListener("storage",t),window.addEventListener(l,r),()=>{window.removeEventListener("storage",t),window.removeEventListener(l,r)}},[n]),v=s.raw?a:s.serializer,y=s.raw?a:s.deserializer,g=void 0===c?i:()=>v(c),m=e.useSyncExternalStore(f,()=>w(n),g),p=e.useMemo(()=>null===m?null:y(m),[m,y]),h=e.useCallback(e=>{try{const o=r(e)?e(null!=p?p:null):e;null===o?d(n):u(n,v(o))}catch(e){console.warn(e)}},[n,v,p]);return t.useLayoutEffect(()=>{null===w(n)&&void 0!==c&&u(n,v(c))},[y,n,v,c]),[null===p?void 0===c?null:c:p,h]},useSetStorage:(o,t)=>e.useCallback(e=>{try{null===e?d(o):u(o,t(e))}catch(e){console.warn(e)}},[o,t])}};
@@ -1,5 +1,6 @@
1
1
  type StorageType = 'localStorage' | 'sessionStorage';
2
2
  type NotUndefined<T> = T extends undefined ? never : T;
3
+ type StateHookTuple<T> = readonly [T, React.Dispatch<React.SetStateAction<T | null>>];
3
4
  type CustomStorageEvent = CustomEvent<string>;
4
5
  declare global {
5
6
  interface WindowEventMap {
@@ -19,10 +20,10 @@ interface UseStorageParserOption<T> {
19
20
  }
20
21
  declare function createStorage(type: StorageType): {
21
22
  useStorage: {
22
- <T>(key: string, serverValue: NotUndefined<T>, options?: UseStorageRawOption | UseStorageParserOption<T>): readonly [T, React.Dispatch<React.SetStateAction<T | null>>];
23
- <T>(key: string, serverValue?: undefined, options?: UseStorageRawOption | UseStorageParserOption<T>): readonly [T | null, React.Dispatch<React.SetStateAction<T | null>>];
23
+ <T>(key: string, serverValue: NotUndefined<T>, options?: UseStorageRawOption | UseStorageParserOption<T>): StateHookTuple<T>;
24
+ <T>(key: string, serverValue?: undefined, options?: UseStorageRawOption | UseStorageParserOption<T>): StateHookTuple<T | null>;
24
25
  };
25
26
  useSetStorage: <T>(key: string, serializer: Serializer<T>) => (v: T | null) => void;
26
27
  };
27
28
 
28
- export { type Deserializer, type Serializer, type UseStorageParserOption, type UseStorageRawOption, createStorage };
29
+ export { type Deserializer, type NotUndefined, type Serializer, type StateHookTuple, type StorageType, type UseStorageParserOption, type UseStorageRawOption, createStorage };
@@ -1 +1 @@
1
- "use strict";require("client-only");var e=require("react"),o=require("../noop/index.js"),t=require("../use-isomorphic-layout-effect/index.js"),n=require("../no-ssr/index.js");const r=e=>"function"==typeof e,a=e=>e,i=()=>{throw n.noSSRError("useLocalStorage cannot be used on the server without a serverValue")};exports.createStorage=function(n){const l="localStorage"===n?"foxact-use-local-storage":"foxact-use-session-storage",s="localStorage"===n?"foxact/use-local-storage":"foxact/use-session-storage",c="undefined"!=typeof window?e=>{window.dispatchEvent(new CustomEvent(l,{detail:e}))}:o.noop,u="undefined"!=typeof window?(e,o)=>{try{window[n].setItem(e,o)}catch(e){console.warn("[".concat(s,"] Failed to set value to ").concat(n,", it might be blocked"))}finally{c(e)}}:o.noop,d="undefined"!=typeof window?e=>{try{window[n].removeItem(e)}catch(e){console.warn("[".concat(s,"] Failed to remove value from ").concat(n,", it might be blocked"))}finally{c(e)}}:o.noop,w=e=>{if("undefined"==typeof window)return null;try{return window[n].getItem(e)}catch(e){return console.warn("[".concat(s,"] Failed to get value from ").concat(n,", it might be blocked")),null}};return{useStorage:function(n,s){let c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{serializer:JSON.stringify,deserializer:JSON.parse};const f=e.useCallback(e=>{if("undefined"==typeof window)return o.noop;const t=o=>{"key"in o&&o.key!==n||e()},r=o=>{o.detail===n&&e()};return window.addEventListener("storage",t),window.addEventListener(l,r),()=>{window.removeEventListener("storage",t),window.removeEventListener(l,r)}},[n]),v=c.raw?a:c.serializer,y=c.raw?a:c.deserializer,g=void 0!==s?()=>v(s):i,m=e.useSyncExternalStore(f,()=>w(n),g),p=e.useMemo(()=>null===m?null:y(m),[m,y]),h=e.useCallback(e=>{try{const o=r(e)?e(null!=p?p:null):e;null===o?d(n):u(n,v(o))}catch(e){console.warn(e)}},[n,v,p]);return t.useLayoutEffect(()=>{null===w(n)&&void 0!==s&&u(n,v(s))},[y,n,v,s]),[null===p?void 0===s?null:s:p,h]},useSetStorage:(o,t)=>e.useCallback(e=>{try{null===e?d(o):u(o,t(e))}catch(e){console.warn(e)}},[o,t])}};
1
+ "use strict";require("client-only");var e=require("react"),o=require("../noop/index.js"),t=require("../use-isomorphic-layout-effect/index.js"),n=require("../no-ssr/index.js");const r=e=>"function"==typeof e,a=e=>e;function i(){throw n.noSSRError("useLocalStorage cannot be used on the server without a serverValue")}exports.createStorage=function(n){const l="localStorage"===n?"foxact-use-local-storage":"foxact-use-session-storage",s="localStorage"===n?"foxact/use-local-storage":"foxact/use-session-storage",c="undefined"==typeof window?o.noop:e=>{window.dispatchEvent(new CustomEvent(l,{detail:e}))},u="undefined"==typeof window?o.noop:(e,o)=>{try{window[n].setItem(e,o)}catch(e){console.warn("[".concat(s,"] Failed to set value to ").concat(n,", it might be blocked"))}finally{c(e)}},d="undefined"==typeof window?o.noop:e=>{try{window[n].removeItem(e)}catch(e){console.warn("[".concat(s,"] Failed to remove value from ").concat(n,", it might be blocked"))}finally{c(e)}},w=e=>{if("undefined"==typeof window)return null;try{return window[n].getItem(e)}catch(e){return console.warn("[".concat(s,"] Failed to get value from ").concat(n,", it might be blocked")),null}};return{useStorage:function(n,s){let c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{raw:!1,serializer:JSON.stringify,deserializer:JSON.parse};const f=e.useCallback(e=>{if("undefined"==typeof window)return o.noop;const t=o=>{"key"in o&&o.key!==n||e()},r=o=>{o.detail===n&&e()};return window.addEventListener("storage",t),window.addEventListener(l,r),()=>{window.removeEventListener("storage",t),window.removeEventListener(l,r)}},[n]),v=c.raw?a:c.serializer,y=c.raw?a:c.deserializer,g=void 0===s?i:()=>v(s),m=e.useSyncExternalStore(f,()=>w(n),g),p=e.useMemo(()=>null===m?null:y(m),[m,y]),h=e.useCallback(e=>{try{const o=r(e)?e(null!=p?p:null):e;null===o?d(n):u(n,v(o))}catch(e){console.warn(e)}},[n,v,p]);return t.useLayoutEffect(()=>{null===w(n)&&void 0!==s&&u(n,v(s))},[y,n,v,s]),[null===p?void 0===s?null:s:p,h]},useSetStorage:(o,t)=>e.useCallback(e=>{try{null===e?d(o):u(o,t(e))}catch(e){console.warn(e)}},[o,t])}};
@@ -1 +1 @@
1
- import"client-only";import{useCallback as e,useSyncExternalStore as o,useMemo as t}from"react";import{noop as n}from"../noop/index.mjs";import{useLayoutEffect as r}from"../use-isomorphic-layout-effect/index.mjs";import{noSSRError as i}from"../no-ssr/index.mjs";const a=e=>"function"==typeof e,l=e=>e,c=()=>{throw i("useLocalStorage cannot be used on the server without a serverValue")};function s(i){const s="localStorage"===i?"foxact-use-local-storage":"foxact-use-session-storage",d="localStorage"===i?"foxact/use-local-storage":"foxact/use-session-storage",u="undefined"!=typeof window?e=>{window.dispatchEvent(new CustomEvent(s,{detail:e}))}:n,w="undefined"!=typeof window?(e,o)=>{try{window[i].setItem(e,o)}catch(e){console.warn("[".concat(d,"] Failed to set value to ").concat(i,", it might be blocked"))}finally{u(e)}}:n,f="undefined"!=typeof window?e=>{try{window[i].removeItem(e)}catch(e){console.warn("[".concat(d,"] Failed to remove value from ").concat(i,", it might be blocked"))}finally{u(e)}}:n,m=e=>{if("undefined"==typeof window)return null;try{return window[i].getItem(e)}catch(e){return console.warn("[".concat(d,"] Failed to get value from ").concat(i,", it might be blocked")),null}};return{useStorage:function(i,d){let u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{serializer:JSON.stringify,deserializer:JSON.parse};const g=e(e=>{if("undefined"==typeof window)return n;const o=o=>{"key"in o&&o.key!==i||e()},t=o=>{o.detail===i&&e()};return window.addEventListener("storage",o),window.addEventListener(s,t),()=>{window.removeEventListener("storage",o),window.removeEventListener(s,t)}},[i]),v=u.raw?l:u.serializer,y=u.raw?l:u.deserializer,p=o(g,()=>m(i),void 0!==d?()=>v(d):c),h=t(()=>null===p?null:y(p),[p,y]),S=e(e=>{try{const o=a(e)?e(null!=h?h:null):e;null===o?f(i):w(i,v(o))}catch(e){console.warn(e)}},[i,v,h]);return r(()=>{null===m(i)&&void 0!==d&&w(i,v(d))},[y,i,v,d]),[null===h?void 0===d?null:d:h,S]},useSetStorage:(o,t)=>e(e=>{try{null===e?f(o):w(o,t(e))}catch(e){console.warn(e)}},[o,t])}}export{s as createStorage};
1
+ import"client-only";import{useCallback as e,useSyncExternalStore as o,useMemo as t}from"react";import{noop as n}from"../noop/index.mjs";import{useLayoutEffect as r}from"../use-isomorphic-layout-effect/index.mjs";import{noSSRError as i}from"../no-ssr/index.mjs";const a=e=>"function"==typeof e,l=e=>e;function c(){throw i("useLocalStorage cannot be used on the server without a serverValue")}function s(i){const s="localStorage"===i?"foxact-use-local-storage":"foxact-use-session-storage",d="localStorage"===i?"foxact/use-local-storage":"foxact/use-session-storage",u="undefined"==typeof window?n:e=>{window.dispatchEvent(new CustomEvent(s,{detail:e}))},w="undefined"==typeof window?n:(e,o)=>{try{window[i].setItem(e,o)}catch(e){console.warn("[".concat(d,"] Failed to set value to ").concat(i,", it might be blocked"))}finally{u(e)}},f="undefined"==typeof window?n:e=>{try{window[i].removeItem(e)}catch(e){console.warn("[".concat(d,"] Failed to remove value from ").concat(i,", it might be blocked"))}finally{u(e)}},m=e=>{if("undefined"==typeof window)return null;try{return window[i].getItem(e)}catch(e){return console.warn("[".concat(d,"] Failed to get value from ").concat(i,", it might be blocked")),null}};return{useStorage:function(i,d){let u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{raw:!1,serializer:JSON.stringify,deserializer:JSON.parse};const g=e(e=>{if("undefined"==typeof window)return n;const o=o=>{"key"in o&&o.key!==i||e()},t=o=>{o.detail===i&&e()};return window.addEventListener("storage",o),window.addEventListener(s,t),()=>{window.removeEventListener("storage",o),window.removeEventListener(s,t)}},[i]),v=u.raw?l:u.serializer,y=u.raw?l:u.deserializer,p=o(g,()=>m(i),void 0===d?c:()=>v(d)),h=t(()=>null===p?null:y(p),[p,y]),S=e(e=>{try{const o=a(e)?e(null!=h?h:null):e;null===o?f(i):w(i,v(o))}catch(e){console.warn(e)}},[i,v,h]);return r(()=>{null===m(i)&&void 0!==d&&w(i,v(d))},[y,i,v,d]),[null===h?void 0===d?null:d:h,S]},useSetStorage:(o,t)=>e(e=>{try{null===e?f(o):w(o,t(e))}catch(e){console.warn(e)}},[o,t])}}export{s as createStorage};
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../create-storage-hook/index.cjs");require("client-only"),require("react"),require("../noop/index.cjs"),require("../use-isomorphic-layout-effect/index.cjs"),require("../no-ssr/index.cjs");const r=e=>e;exports.createStorageStateFactory=function(t){return function(i,o){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{raw:!1,serializer:JSON.stringify,deserializer:JSON.parse};const{useStorage:a,useSetStorage:n}=e.createStorage(t);return[()=>a(i,o,s),()=>a(i,o,s)[0],()=>n(i,s.raw?r:s.serializer)]}};
@@ -0,0 +1,11 @@
1
+ import { StateHookTuple, StorageType, NotUndefined, UseStorageRawOption, UseStorageParserOption } from '../create-storage-hook/index.js';
2
+
3
+ type ValueHook<T> = () => T;
4
+ type SetValueHook<T> = () => (value: T) => void;
5
+ type StateHook<T> = () => StateHookTuple<T>;
6
+ declare function createStorageStateFactory(type: StorageType): {
7
+ <T>(key: string, serverValue: NotUndefined<T>, options?: UseStorageRawOption | UseStorageParserOption<T>): readonly [StateHook<T>, ValueHook<T>, SetValueHook<T | null>];
8
+ <T>(key: string, serverValue?: undefined, options?: UseStorageRawOption | UseStorageParserOption<T>): readonly [StateHook<T | null>, ValueHook<T | null>, SetValueHook<T | null>];
9
+ };
10
+
11
+ export { type SetValueHook, type StateHook, type ValueHook, createStorageStateFactory };
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../create-storage-hook/index.js");require("client-only"),require("react"),require("../noop/index.js"),require("../use-isomorphic-layout-effect/index.js"),require("../no-ssr/index.js");const r=e=>e;exports.createStorageStateFactory=function(t){return function(i,o){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{raw:!1,serializer:JSON.stringify,deserializer:JSON.parse};const{useStorage:a,useSetStorage:n}=e.createStorage(t);return[()=>a(i,o,s),()=>a(i,o,s)[0],()=>n(i,s.raw?r:s.serializer)]}};
@@ -0,0 +1 @@
1
+ import{createStorage as e}from"../create-storage-hook/index.mjs";import"client-only";import"react";import"../noop/index.mjs";import"../use-isomorphic-layout-effect/index.mjs";import"../no-ssr/index.mjs";const r=e=>e;function t(t){return function(o,i){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{raw:!1,serializer:JSON.stringify,deserializer:JSON.parse};const{useStorage:s,useSetStorage:a}=e(t);return[()=>s(o,i,n),()=>s(o,i,n)[0],()=>a(o,n.raw?r:n.serializer)]}}export{t as createStorageStateFactory};
@@ -1,2 +1,2 @@
1
1
  'use client';
2
- "use strict";var e=require("react/jsx-runtime"),r=require("react"),t=require("../use-isomorphic-layout-effect/index.cjs");require("client-only");const n=r.memo(n=>{let{defaultYear:i,...u}=n;"undefined"==typeof window&&void 0===i&&console.warn('[foxact/current-year] "defaultYear" is required during the server-side rendering.');const[s,a]=r.useState(i||new Date().getFullYear());return t.useIsomorphicLayoutEffect(()=>{a(new Date().getFullYear())},[]),e.jsx("span",{...u,children:s})});"production"!==process.env.NODE_ENV&&(n.displayName="CurrentYear"),exports.CurrentYear=n;
2
+ "use strict";var e=require("react/jsx-runtime"),r=require("react"),t=require("../use-isomorphic-layout-effect/index.cjs");require("client-only");const n=/*#__PURE__*/r.memo(n=>{let{defaultYear:i,...u}=n;"undefined"==typeof window&&void 0===i&&console.warn('[foxact/current-year] "defaultYear" is required during the server-side rendering.');const[s,a]=r.useState(i||new Date().getFullYear());return t.useIsomorphicLayoutEffect(()=>{a(new Date().getFullYear())},[]),/*#__PURE__*/e.jsx("span",{...u,children:s})});"production"!==process.env.NODE_ENV&&(n.displayName="CurrentYear"),exports.CurrentYear=n;
@@ -1,2 +1,2 @@
1
1
  'use client';
2
- "use strict";var e=require("react/jsx-runtime"),r=require("react"),t=require("../use-isomorphic-layout-effect/index.js");require("client-only");const n=r.memo(n=>{let{defaultYear:i,...u}=n;"undefined"==typeof window&&void 0===i&&console.warn('[foxact/current-year] "defaultYear" is required during the server-side rendering.');const[s,a]=r.useState(i||new Date().getFullYear());return t.useIsomorphicLayoutEffect(()=>{a(new Date().getFullYear())},[]),e.jsx("span",{...u,children:s})});"production"!==process.env.NODE_ENV&&(n.displayName="CurrentYear"),exports.CurrentYear=n;
2
+ "use strict";var e=require("react/jsx-runtime"),r=require("react"),t=require("../use-isomorphic-layout-effect/index.js");require("client-only");const n=/*#__PURE__*/r.memo(n=>{let{defaultYear:i,...u}=n;"undefined"==typeof window&&void 0===i&&console.warn('[foxact/current-year] "defaultYear" is required during the server-side rendering.');const[s,a]=r.useState(i||new Date().getFullYear());return t.useIsomorphicLayoutEffect(()=>{a(new Date().getFullYear())},[]),/*#__PURE__*/e.jsx("span",{...u,children:s})});"production"!==process.env.NODE_ENV&&(n.displayName="CurrentYear"),exports.CurrentYear=n;
@@ -1,2 +1,2 @@
1
1
  'use client';
2
- import{jsx as e}from"react/jsx-runtime";import{memo as r,useState as t}from"react";import{useIsomorphicLayoutEffect as n}from"../use-isomorphic-layout-effect/index.mjs";import"client-only";const o=r(r=>{let{defaultYear:o,...i}=r;"undefined"==typeof window&&void 0===o&&console.warn('[foxact/current-year] "defaultYear" is required during the server-side rendering.');const[a,s]=t(o||new Date().getFullYear());return n(()=>{s(new Date().getFullYear())},[]),e("span",{...i,children:a})});"production"!==process.env.NODE_ENV&&(o.displayName="CurrentYear");export{o as CurrentYear};
2
+ import{jsx as e}from"react/jsx-runtime";import{memo as r,useState as t}from"react";import{useIsomorphicLayoutEffect as n}from"../use-isomorphic-layout-effect/index.mjs";import"client-only";const o=/*#__PURE__*/r(r=>{let{defaultYear:o,...i}=r;"undefined"==typeof window&&void 0===o&&console.warn('[foxact/current-year] "defaultYear" is required during the server-side rendering.');const[a,s]=t(o||new Date().getFullYear());return n(()=>{s(new Date().getFullYear())},[]),/*#__PURE__*/e("span",{...i,children:a})});"production"!==process.env.NODE_ENV&&(o.displayName="CurrentYear");export{o as CurrentYear};
package/no-ssr/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";const r=Object.getOwnPropertyDescriptor(Error,"stackTraceLimit"),t=(null==r?void 0:r.writable)&&"number"==typeof r.value,e=function(r){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"BAILOUT_TO_CLIENT_SIDE_RENDERING";const o=Error.stackTraceLimit;t&&(Error.stackTraceLimit=0);const i=Error(r);return t&&(Error.stackTraceLimit=o),i.digest=e,i.recoverableError="NO_SSR",i};exports.noSSR=r=>{if("undefined"==typeof window)throw e(r)},exports.noSSRError=e;
1
+ "use strict";const r=Object.getOwnPropertyDescriptor(Error,"stackTraceLimit"),t=(null==r?void 0:r.writable)&&"number"==typeof r.value;function e(r){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"BAILOUT_TO_CLIENT_SIDE_RENDERING";const o=Error.stackTraceLimit;t&&(Error.stackTraceLimit=0);const i=Error(r);return t&&(Error.stackTraceLimit=o),i.digest=e,i.recoverableError="NO_SSR",i}exports.noSSR=function(r){if("undefined"==typeof window)throw e(r)},exports.noSSRError=e;
package/no-ssr/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /** @private */
2
- declare const noSSRError: (errorMessage?: string | undefined, nextjsDigest?: string) => Error;
2
+ declare function noSSRError(errorMessage?: string, nextjsDigest?: string): Error;
3
3
  /** @see https://foxact.skk.moe/no-ssr */
4
- declare const noSSR: (extraMessage?: string) => void;
4
+ declare function noSSR(extraMessage?: string): void;
5
5
 
6
6
  export { noSSR, noSSRError };
package/no-ssr/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";const r=Object.getOwnPropertyDescriptor(Error,"stackTraceLimit"),t=(null==r?void 0:r.writable)&&"number"==typeof r.value,e=function(r){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"BAILOUT_TO_CLIENT_SIDE_RENDERING";const o=Error.stackTraceLimit;t&&(Error.stackTraceLimit=0);const i=Error(r);return t&&(Error.stackTraceLimit=o),i.digest=e,i.recoverableError="NO_SSR",i};exports.noSSR=r=>{if("undefined"==typeof window)throw e(r)},exports.noSSRError=e;
1
+ "use strict";const r=Object.getOwnPropertyDescriptor(Error,"stackTraceLimit"),t=(null==r?void 0:r.writable)&&"number"==typeof r.value;function e(r){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"BAILOUT_TO_CLIENT_SIDE_RENDERING";const o=Error.stackTraceLimit;t&&(Error.stackTraceLimit=0);const i=Error(r);return t&&(Error.stackTraceLimit=o),i.digest=e,i.recoverableError="NO_SSR",i}exports.noSSR=function(r){if("undefined"==typeof window)throw e(r)},exports.noSSRError=e;
package/no-ssr/index.mjs CHANGED
@@ -1 +1 @@
1
- const r=Object.getOwnPropertyDescriptor(Error,"stackTraceLimit"),t=(null==r?void 0:r.writable)&&"number"==typeof r.value,e=function(r){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"BAILOUT_TO_CLIENT_SIDE_RENDERING";const o=Error.stackTraceLimit;t&&(Error.stackTraceLimit=0);const i=Error(r);return t&&(Error.stackTraceLimit=o),i.digest=e,i.recoverableError="NO_SSR",i},o=r=>{if("undefined"==typeof window)throw e(r)};export{o as noSSR,e as noSSRError};
1
+ const r=Object.getOwnPropertyDescriptor(Error,"stackTraceLimit"),t=(null==r?void 0:r.writable)&&"number"==typeof r.value;function o(r){let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"BAILOUT_TO_CLIENT_SIDE_RENDERING";const e=Error.stackTraceLimit;t&&(Error.stackTraceLimit=0);const i=Error(r);return t&&(Error.stackTraceLimit=e),i.digest=o,i.recoverableError="NO_SSR",i}function e(r){if("undefined"==typeof window)throw o(r)}export{e as noSSR,o as noSSRError};
@@ -1,4 +1,4 @@
1
1
  /** @see https://foxact.skk.moe/invariant-nullthrow */
2
- declare const nullthrow: <T>(value: T, message?: string) => NonNullable<T>;
2
+ declare function nullthrow<T>(value: T, message?: string): NonNullable<T>;
3
3
 
4
4
  export { nullthrow };
@@ -1 +1 @@
1
- const n=function(n){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'[foxact/invariant] "value" is null or undefined';if(null==n)throw TypeError(r);return n};export{n as nullthrow};
1
+ function n(n){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:'[foxact/invariant] "value" is null or undefined';if(null==n)throw TypeError(r);return n}export{n as nullthrow};