state-in-url 8.0.0 → 8.0.1

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 (31) hide show
  1. package/dist/constants/constants.cjs +1 -1
  2. package/dist/constants/constants.mjs +1 -1
  3. package/dist/package.json +1 -1
  4. package/dist/react/useUrlState/useUrlState.cjs +1 -1
  5. package/dist/react-router/useUrlState/useUrlState.cjs +1 -1
  6. package/dist/react-router/useUrlState/useUrlState.d.ts +1 -1
  7. package/dist/react-router/useUrlState/useUrlState.mjs +1 -1
  8. package/dist/react-router6/useUrlState/useUrlState.cjs +1 -1
  9. package/dist/react-router6/useUrlState/useUrlState.d.ts +1 -1
  10. package/dist/react-router6/useUrlState/useUrlState.mjs +1 -1
  11. package/dist/remix/useUrlState/useUrlState.cjs +1 -1
  12. package/dist/remix/useUrlState/useUrlState.d.ts +1 -1
  13. package/dist/remix/useUrlState/useUrlState.mjs +1 -1
  14. package/dist/useIsomorphicLayoutEffect.cjs +1 -1
  15. package/dist/useIsomorphicLayoutEffect.mjs +1 -1
  16. package/dist/useLinkProps/useLinkProps.mjs +1 -1
  17. package/dist/useUrlEncode/useUrlEncode.cjs +1 -1
  18. package/dist/useUrlStateBase/useUrlStateBase.cjs +1 -1
  19. package/dist/useUrlStateBase/useUrlStateBase.mjs +1 -1
  20. package/dist/utils.cjs +1 -1
  21. package/dist/utils.d.ts +2 -1
  22. package/dist/utils.mjs +1 -1
  23. package/package.json +1 -1
  24. package/skills/astro-setup/SKILL.md +1 -1
  25. package/skills/feature-state-hook/SKILL.md +1 -1
  26. package/skills/form-library-integration/SKILL.md +1 -1
  27. package/skills/input-handling/SKILL.md +1 -1
  28. package/skills/nextjs-ssr/SKILL.md +1 -1
  29. package/skills/react-no-router/SKILL.md +1 -1
  30. package/skills/react-router-remix-setup/SKILL.md +1 -1
  31. package/skills/shared-state-no-url/SKILL.md +1 -1
@@ -1 +1 @@
1
- "use strict";var e=require("../utils.cjs");const i={date:"\u23F2",undefined:"\u2219undefined"};const u=e.isSafari?330:70;exports.SYMBOLS=i;exports.TIMEOUT=u;
1
+ "use strict";var e=require("../utils.cjs");const i={date:"\u23F2",undefined:"\u2219undefined"};const t=e.isWebKit?330:70;exports.SYMBOLS=i;exports.TIMEOUT=t;
@@ -1 +1 @@
1
- import{isSafari as e}from"../utils.mjs";const n={date:"\u23F2",undefined:"\u2219undefined"};const d=e?330:70;export{n as SYMBOLS,d as TIMEOUT};
1
+ import{isWebKit as e}from"../utils.mjs";const n={date:"\u23F2",undefined:"\u2219undefined"};const t=e?330:70;export{n as SYMBOLS,t as TIMEOUT};
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "state-in-url",
3
- "version": "8.0.0",
3
+ "version": "8.0.1",
4
4
  "description": "Store state in URL as in object, types and structure are preserved, with TS validation. Same API as React.useState, wthout any hasssle or boilerplate. Next.js@14-16, react-router@6-7, remix@2, and Astro.",
5
5
  "homepage": "https://state-in-url.dev",
6
6
  "repository": {
@@ -1 +1 @@
1
- "use strict";var P=require("react");var f=require("../../parseSPObj.cjs");var m=require("../../useUrlStateBase/useUrlStateBase.cjs");var t=require("../../utils.cjs");function g(e){return e&&e.__esModule?e:{default:e}}var a=g(P);function k(e,s){const{state:o,updateState:n,updateUrl:c,reset:i,getState:S,pendingUrlUpdate:p}=m.useUrlStateBase(e,t.routerHistory,({parse:r})=>t.isSSR?f.parseSPObj(t.filterUnknownParams(e,s?.searchParams),e):r(t.filterUnknownParamsClient(e,s?.searchParams||t.getSearch())));const l=a.default.useCallback(()=>{if(p())return;n(t.filterUnknownParams(e,f.parseSPObj(Object.fromEntries(t.getParams(t.getSearch()).entries()),e)))},[]);a.default.useEffect(()=>{l();return t.subscribeToUrl(l)},[l]);const u=a.default.useMemo(()=>({replace:s?.replace??true}),[s?.replace]);const U=a.default.useCallback((r,b)=>c(r,{...u,...b}),[c,u]);const d=a.default.useCallback(r=>{i({...u,...r})},[i,u]);return{setState:n,setUrl:U,urlState:o,reset:d,getState:S}}exports.useUrlState=k;
1
+ "use strict";var P=require("react");var o=require("../../parseSPObj.cjs");var m=require("../../useUrlStateBase/useUrlStateBase.cjs");var t=require("../../utils.cjs");function g(e){return e&&e.__esModule?e:{default:e}}var a=g(P);function k(e,s){const{state:f,updateState:n,updateUrl:c,reset:i,getState:S,pendingUrlUpdate:p}=m.useUrlStateBase(e,t.routerHistory,({parse:r})=>t.isSSR?o.parseSPObj(t.filterUnknownParams(e,s?.searchParams),e):r(t.filterUnknownParamsClient(e,s?.searchParams||t.getSearch())));const l=a.default.useCallback(()=>{if(p())return;n(t.filterUnknownParams(e,o.parseSPObj(Object.fromEntries(t.getParams(t.getSearch()).entries()),e)))},[]);a.default.useEffect(()=>{l();return t.subscribeToUrl(l)},[l]);const u=a.default.useMemo(()=>({replace:s?.replace??true}),[s?.replace]);const U=a.default.useCallback((r,b)=>c(r,{...u,...b}),[c,u]);const d=a.default.useCallback(r=>{i({...u,...r})},[i,u]);return{setState:n,setUrl:U,urlState:f,reset:d,getState:S}}exports.useUrlState=k;
@@ -1 +1 @@
1
- "use strict";var P=require("react");var o=require("react-router");var _=require("../../parseSPObj.cjs");var k=require("../../useUrlStateBase/useUrlStateBase.cjs");var u=require("../../utils.cjs");function R(e){return e&&e.__esModule?e:{default:e}}var a=R(P);function h(e,l){const S=l?.useHistory;const s=a.default.useMemo(()=>({...j,replace:l?.replace,preventScrollReset:l?.preventScrollReset}),[]);const n=o.useNavigate();const d=a.default.useMemo(()=>S?u.routerHistory:{replace:(t,r)=>n(t,{...s,...r}),push:(t,r)=>n(t,{...s,...r})},[n]);const[c]=o.useSearchParams();const v=o.useHref("/");const{state:U,updateState:i,updateUrl:f,getState:m,reset:p,pendingUrlUpdate:b}=k.useUrlStateBase(e,d,({parse:t})=>t(u.filterUnknownParamsClient(e,c.entries())),v);const g=a.default.useCallback((t,r)=>f(t,{...s,...r}),[f]);a.default.useEffect(()=>{if(!b()){i(u.assignValue(e,u.filterUnknownParams(e,_.parseSPObj(Object.fromEntries([...c.entries()]),e))))}},[c]);const q=a.default.useCallback(t=>{p({...s,...t})},[p]);return{setState:i,setUrl:g,urlState:U,reset:q,getState:m}}const j={replace:true,preventScrollReset:true};exports.useUrlState=h;
1
+ "use strict";var P=require("react");var o=require("react-router");var _=require("../../parseSPObj.cjs");var k=require("../../useUrlStateBase/useUrlStateBase.cjs");var u=require("../../utils.cjs");function j(e){return e&&e.__esModule?e:{default:e}}var s=j(P);function C(e,r){const v=r?.useHistory;const l=s.default.useMemo(()=>({...i,replace:r?.replace??i.replace,preventScrollReset:r?.preventScrollReset??i.preventScrollReset}),[r?.replace,r?.preventScrollReset]);const n=o.useNavigate();const d=s.default.useMemo(()=>v?u.routerHistory:{replace:(t,a)=>n(t,{...l,...a,replace:true}),push:(t,a)=>n(t,{...l,...a,replace:false})},[n]);const[c]=o.useSearchParams();const U=o.useHref("/");const{state:m,updateState:p,updateUrl:f,getState:R,reset:S,pendingUrlUpdate:b}=k.useUrlStateBase(e,d,({parse:t})=>t(u.filterUnknownParamsClient(e,c.entries())),U);const g=s.default.useCallback((t,a)=>f(t,{...l,...a}),[f]);s.default.useEffect(()=>{if(!b()){p(u.assignValue(e,u.filterUnknownParams(e,_.parseSPObj(Object.fromEntries([...c.entries()]),e))))}},[c]);const q=s.default.useCallback(t=>{S({...l,...t})},[S]);return{setState:p,setUrl:g,urlState:m,reset:q,getState:R}}const i={replace:true,preventScrollReset:true};exports.useUrlState=C;
@@ -5,7 +5,7 @@ import { type JSONCompatible } from '../../utils';
5
5
  *
6
6
  * @param {JSONCompatible<T>} [defaultState] Fallback (default) values for state
7
7
  * @param {Object} params - Object with other parameters
8
- * @param {NavigateOptions} params.NavigateOptions See type from [`react-router-dom`](https://api.reactrouter.com/v7/interfaces/react_router.NavigateOptions.html)
8
+ * @param {NavigateOptions} params.NavigateOptions See type from [`react-router-dom`](https://api.reactrouter.com/v7/interfaces/react-router.NavigateOptions.html)
9
9
  * @param {boolean} params.replace replace URL or push, default `true`
10
10
  * @param {boolean} params.useHistory use window.history for navigation, default `false`
11
11
  * @param {boolean} params.preventScrollReset keep scroll position, default `true`
@@ -1 +1 @@
1
- import s from"react";import{useNavigate as d,useSearchParams as k,useHref as P}from"react-router";import{parseSPObj as h}from"../../parseSPObj.mjs";import{useUrlStateBase as C}from"../../useUrlStateBase/useUrlStateBase.mjs";import{routerHistory as H,filterUnknownParamsClient as R,assignValue as j,filterUnknownParams as w}from"../../utils.mjs";function y(t,o){const i=o?.useHistory;const a=s.useMemo(()=>({...E,replace:o?.replace,preventScrollReset:o?.preventScrollReset}),[]);const n=d();const m=s.useMemo(()=>i?H:{replace:(e,r)=>n(e,{...a,...r}),push:(e,r)=>n(e,{...a,...r})},[n]);const[l]=k();const f=P("/");const{state:S,updateState:c,updateUrl:u,getState:U,reset:p,pendingUrlUpdate:g}=C(t,m,({parse:e})=>e(R(t,l.entries())),f);const b=s.useCallback((e,r)=>u(e,{...a,...r}),[u]);s.useEffect(()=>{if(!g()){c(j(t,w(t,h(Object.fromEntries([...l.entries()]),t))))}},[l]);const v=s.useCallback(e=>{p({...a,...e})},[p]);return{setState:c,setUrl:b,urlState:S,reset:v,getState:U}}const E={replace:true,preventScrollReset:true};export{y as useUrlState};
1
+ import a from"react";import{useNavigate as d,useSearchParams as k,useHref as P}from"react-router";import{parseSPObj as C}from"../../parseSPObj.mjs";import{useUrlStateBase as H}from"../../useUrlStateBase/useUrlStateBase.mjs";import{routerHistory as h,filterUnknownParamsClient as j,assignValue as w,filterUnknownParams as y}from"../../utils.mjs";function E(t,r){const m=r?.useHistory;const o=a.useMemo(()=>({...c,replace:r?.replace??c.replace,preventScrollReset:r?.preventScrollReset??c.preventScrollReset}),[r?.replace,r?.preventScrollReset]);const l=d();const f=a.useMemo(()=>m?h:{replace:(e,s)=>l(e,{...o,...s,replace:true}),push:(e,s)=>l(e,{...o,...s,replace:false})},[l]);const[n]=k();const S=P("/");const{state:U,updateState:p,updateUrl:u,getState:v,reset:i,pendingUrlUpdate:g}=H(t,f,({parse:e})=>e(j(t,n.entries())),S);const R=a.useCallback((e,s)=>u(e,{...o,...s}),[u]);a.useEffect(()=>{if(!g()){p(w(t,y(t,C(Object.fromEntries([...n.entries()]),t))))}},[n]);const b=a.useCallback(e=>{i({...o,...e})},[i]);return{setState:p,setUrl:R,urlState:U,reset:b,getState:v}}const c={replace:true,preventScrollReset:true};export{E as useUrlState};
@@ -1 +1 @@
1
- "use strict";var O=require("react");var o=require("react-router-dom");var P=require("../../parseSPObj.cjs");var _=require("../../useUrlStateBase/useUrlStateBase.cjs");var l=require("../../utils.cjs");function k(t){return t&&t.__esModule?t:{default:t}}var s=k(O);function j(t,r){const d=r?.useHistory;const u=s.default.useMemo(()=>{const e={...S};if(r?.replace!==void 0)e.replace=r.replace;if(r?.preventScrollReset!==void 0)e.preventScrollReset=r.preventScrollReset;return e},[r?.replace,r?.preventScrollReset]);const n=o.useNavigate();const v=s.default.useMemo(()=>d?l.routerHistory:{replace:(e,a)=>n(e,{...u,...a}),push:(e,a)=>n(e,{...u,...a})},[n]);const[c]=o.useSearchParams();const U=o.useHref("/");const{state:m,updateState:i,updateUrl:p,getState:R,reset:f,pendingUrlUpdate:b}=_.useUrlStateBase(t,v,({parse:e})=>e(l.filterUnknownParamsClient(t,c.entries())),U);const g=s.default.useCallback((e,a)=>p(e,{...u,...a}),[p]);s.default.useEffect(()=>{if(!b()){i(l.assignValue(t,l.filterUnknownParams(t,P.parseSPObj(Object.fromEntries([...c.entries()]),t))))}},[c]);const q=s.default.useCallback(e=>{f({...u,...e})},[f]);return{setState:i,setUrl:g,urlState:m,reset:q,getState:R}}const S={replace:true,preventScrollReset:true};exports.defaultOpts=S;exports.useUrlState=j;
1
+ "use strict";var O=require("react");var o=require("react-router-dom");var P=require("../../parseSPObj.cjs");var _=require("../../useUrlStateBase/useUrlStateBase.cjs");var u=require("../../utils.cjs");function k(t){return t&&t.__esModule?t:{default:t}}var s=k(O);function j(t,r){const d=r?.useHistory;const l=s.default.useMemo(()=>{const e={...S};if(r?.replace!==void 0)e.replace=r.replace;if(r?.preventScrollReset!==void 0)e.preventScrollReset=r.preventScrollReset;return e},[r?.replace,r?.preventScrollReset]);const n=o.useNavigate();const v=s.default.useMemo(()=>d?u.routerHistory:{replace:(e,a)=>n(e,{...l,...a,replace:true}),push:(e,a)=>n(e,{...l,...a,replace:false})},[n]);const[c]=o.useSearchParams();const U=o.useHref("/");const{state:m,updateState:i,updateUrl:p,getState:R,reset:f,pendingUrlUpdate:b}=_.useUrlStateBase(t,v,({parse:e})=>e(u.filterUnknownParamsClient(t,c.entries())),U);const g=s.default.useCallback((e,a)=>p(e,{...l,...a}),[p]);s.default.useEffect(()=>{if(!b()){i(u.assignValue(t,u.filterUnknownParams(t,P.parseSPObj(Object.fromEntries([...c.entries()]),t))))}},[c]);const q=s.default.useCallback(e=>{f({...l,...e})},[f]);return{setState:i,setUrl:g,urlState:m,reset:q,getState:R}}const S={replace:true,preventScrollReset:true};exports.defaultOpts=S;exports.useUrlState=j;
@@ -5,7 +5,7 @@ import { type JSONCompatible } from '../../utils';
5
5
  *
6
6
  * @param {JSONCompatible<T>} [defaultState] Fallback (default) values for state
7
7
  * @param {Object} params - Object with other parameters
8
- * @param {NavigateOptions} params.NavigateOptions See type from [`react-router-dom`](https://api.reactrouter.com/v7/interfaces/react_router.NavigateOptions.html)
8
+ * @param {NavigateOptions} params.NavigateOptions See type from [`react-router-dom`](https://api.reactrouter.com/v7/interfaces/react-router.NavigateOptions.html)
9
9
  * @param {boolean} params.replace replace URL or push, default `true`
10
10
  * @param {boolean} params.useHistory use window.history for navigation, default `false`
11
11
  * @param {boolean} params.preventScrollReset keep scroll position, default `true`
@@ -1 +1 @@
1
- import o from"react";import{useNavigate as b,useSearchParams as k,useHref as P}from"react-router-dom";import{parseSPObj as C}from"../../parseSPObj.mjs";import{useUrlStateBase as H}from"../../useUrlStateBase/useUrlStateBase.mjs";import{routerHistory as O,filterUnknownParamsClient as h,assignValue as j,filterUnknownParams as w}from"../../utils.mjs";function y(r,t){const f=t?.useHistory;const a=o.useMemo(()=>{const e={...i};if(t?.replace!==void 0)e.replace=t.replace;if(t?.preventScrollReset!==void 0)e.preventScrollReset=t.preventScrollReset;return e},[t?.replace,t?.preventScrollReset]);const n=b();const m=o.useMemo(()=>f?O:{replace:(e,s)=>n(e,{...a,...s}),push:(e,s)=>n(e,{...a,...s})},[n]);const[l]=k();const S=P("/");const{state:v,updateState:c,updateUrl:p,getState:U,reset:u,pendingUrlUpdate:d}=H(r,m,({parse:e})=>e(h(r,l.entries())),S);const R=o.useCallback((e,s)=>p(e,{...a,...s}),[p]);o.useEffect(()=>{if(!d()){c(j(r,w(r,C(Object.fromEntries([...l.entries()]),r))))}},[l]);const g=o.useCallback(e=>{u({...a,...e})},[u]);return{setState:c,setUrl:R,urlState:v,reset:g,getState:U}}const i={replace:true,preventScrollReset:true};export{i as defaultOpts,y as useUrlState};
1
+ import a from"react";import{useNavigate as b,useSearchParams as k,useHref as P}from"react-router-dom";import{parseSPObj as C}from"../../parseSPObj.mjs";import{useUrlStateBase as H}from"../../useUrlStateBase/useUrlStateBase.mjs";import{routerHistory as O,filterUnknownParamsClient as h,assignValue as j,filterUnknownParams as w}from"../../utils.mjs";function y(r,t){const f=t?.useHistory;const o=a.useMemo(()=>{const e={...i};if(t?.replace!==void 0)e.replace=t.replace;if(t?.preventScrollReset!==void 0)e.preventScrollReset=t.preventScrollReset;return e},[t?.replace,t?.preventScrollReset]);const l=b();const m=a.useMemo(()=>f?O:{replace:(e,s)=>l(e,{...o,...s,replace:true}),push:(e,s)=>l(e,{...o,...s,replace:false})},[l]);const[n]=k();const S=P("/");const{state:v,updateState:c,updateUrl:p,getState:U,reset:u,pendingUrlUpdate:d}=H(r,m,({parse:e})=>e(h(r,n.entries())),S);const R=a.useCallback((e,s)=>p(e,{...o,...s}),[p]);a.useEffect(()=>{if(!d()){c(j(r,w(r,C(Object.fromEntries([...n.entries()]),r))))}},[n]);const g=a.useCallback(e=>{u({...o,...e})},[u]);return{setState:c,setUrl:R,urlState:v,reset:g,getState:U}}const i={replace:true,preventScrollReset:true};export{i as defaultOpts,y as useUrlState};
@@ -1 +1 @@
1
- "use strict";var O=require("react");var i=require("@remix-run/react");var P=require("../../parseSPObj.cjs");var _=require("../../useUrlStateBase/useUrlStateBase.cjs");var u=require("../../utils.cjs");function k(e){return e&&e.__esModule?e:{default:e}}var s=k(O);function j(e,r){const d=r?.useHistory;const l=s.default.useMemo(()=>({...n,replace:r?.replace??n.replace,preventScrollReset:r?.preventScrollReset??n.preventScrollReset}),[r?.replace,r?.preventScrollReset]);const c=i.useNavigate();const v=s.default.useMemo(()=>d?u.routerHistory:{replace:(t,a)=>c(t,{...l,...a}),push:(t,a)=>c(t,{...l,...a})},[c]);const[o]=i.useSearchParams();const U=i.useHref("/");const{state:m,updateState:p,updateUrl:f,getState:b,reset:S,pendingUrlUpdate:R}=_.useUrlStateBase(e,v,({parse:t})=>t(u.filterUnknownParamsClient(e,o.entries())),U);const g=s.default.useCallback((t,a)=>f(t,{...l,...a}),[f]);s.default.useEffect(()=>{if(!R()){p(u.assignValue(e,u.filterUnknownParams(e,P.parseSPObj(Object.fromEntries([...o.entries()]),e))))}},[o]);const q=s.default.useCallback(t=>{S({...l,...t})},[S]);return{setState:p,setUrl:g,urlState:m,reset:q,getState:b}}const n={replace:true,preventScrollReset:true};exports.defaultOpts=n;exports.useUrlState=j;
1
+ "use strict";var O=require("react");var p=require("@remix-run/react");var P=require("../../parseSPObj.cjs");var _=require("../../useUrlStateBase/useUrlStateBase.cjs");var u=require("../../utils.cjs");function k(e){return e&&e.__esModule?e:{default:e}}var s=k(O);function j(e,r){const d=r?.useHistory;const l=s.default.useMemo(()=>({...n,replace:r?.replace??n.replace,preventScrollReset:r?.preventScrollReset??n.preventScrollReset}),[r?.replace,r?.preventScrollReset]);const c=p.useNavigate();const v=s.default.useMemo(()=>d?u.routerHistory:{replace:(t,a)=>c(t,{...l,...a,replace:true}),push:(t,a)=>c(t,{...l,...a,replace:false})},[c]);const[o]=p.useSearchParams();const U=p.useHref("/");const{state:m,updateState:i,updateUrl:f,getState:b,reset:S,pendingUrlUpdate:R}=_.useUrlStateBase(e,v,({parse:t})=>t(u.filterUnknownParamsClient(e,o.entries())),U);const g=s.default.useCallback((t,a)=>f(t,{...l,...a}),[f]);s.default.useEffect(()=>{if(!R()){i(u.assignValue(e,u.filterUnknownParams(e,P.parseSPObj(Object.fromEntries([...o.entries()]),e))))}},[o]);const q=s.default.useCallback(t=>{S({...l,...t})},[S]);return{setState:i,setUrl:g,urlState:m,reset:q,getState:b}}const n={replace:true,preventScrollReset:true};exports.defaultOpts=n;exports.useUrlState=j;
@@ -5,7 +5,7 @@ import { type JSONCompatible } from '../../utils';
5
5
  *
6
6
  * @param {JSONCompatible<T>} [defaultState] Fallback (default) values for state
7
7
  * @param {Object} params - Object with other parameters
8
- * @param {NavigateOptions} params.NavigateOptions See type from [`react-router-dom`](https://api.reactrouter.com/v7/interfaces/react_router.NavigateOptions.html)
8
+ * @param {NavigateOptions} params.NavigateOptions See type from [`react-router-dom`](https://api.reactrouter.com/v7/interfaces/react-router.NavigateOptions.html)
9
9
  * @param {boolean} params.replace replace URL or push, default `true`
10
10
  * @param {boolean} params.useHistory use window.history for navigation, default `false`
11
11
  * @param {boolean} params.preventScrollReset keep scroll position, default `true`
@@ -1 +1 @@
1
- import a from"react";import{useNavigate as g,useSearchParams as k,useHref as P}from"@remix-run/react";import{parseSPObj as C}from"../../parseSPObj.mjs";import{useUrlStateBase as H}from"../../useUrlStateBase/useUrlStateBase.mjs";import{routerHistory as O,filterUnknownParamsClient as h,assignValue as j,filterUnknownParams as w}from"../../utils.mjs";function y(t,r){const m=r?.useHistory;const o=a.useMemo(()=>({...l,replace:r?.replace??l.replace,preventScrollReset:r?.preventScrollReset??l.preventScrollReset}),[r?.replace,r?.preventScrollReset]);const n=g();const f=a.useMemo(()=>m?O:{replace:(e,s)=>n(e,{...o,...s}),push:(e,s)=>n(e,{...o,...s})},[n]);const[c]=k();const S=P("/");const{state:U,updateState:p,updateUrl:u,getState:v,reset:i,pendingUrlUpdate:R}=H(t,f,({parse:e})=>e(h(t,c.entries())),S);const b=a.useCallback((e,s)=>u(e,{...o,...s}),[u]);a.useEffect(()=>{if(!R()){p(j(t,w(t,C(Object.fromEntries([...c.entries()]),t))))}},[c]);const d=a.useCallback(e=>{i({...o,...e})},[i]);return{setState:p,setUrl:b,urlState:U,reset:d,getState:v}}const l={replace:true,preventScrollReset:true};export{l as defaultOpts,y as useUrlState};
1
+ import a from"react";import{useNavigate as g,useSearchParams as k,useHref as P}from"@remix-run/react";import{parseSPObj as C}from"../../parseSPObj.mjs";import{useUrlStateBase as H}from"../../useUrlStateBase/useUrlStateBase.mjs";import{routerHistory as O,filterUnknownParamsClient as h,assignValue as j,filterUnknownParams as w}from"../../utils.mjs";function y(t,r){const m=r?.useHistory;const o=a.useMemo(()=>({...l,replace:r?.replace??l.replace,preventScrollReset:r?.preventScrollReset??l.preventScrollReset}),[r?.replace,r?.preventScrollReset]);const n=g();const f=a.useMemo(()=>m?O:{replace:(e,s)=>n(e,{...o,...s,replace:true}),push:(e,s)=>n(e,{...o,...s,replace:false})},[n]);const[c]=k();const S=P("/");const{state:U,updateState:p,updateUrl:u,getState:v,reset:i,pendingUrlUpdate:R}=H(t,f,({parse:e})=>e(h(t,c.entries())),S);const b=a.useCallback((e,s)=>u(e,{...o,...s}),[u]);a.useEffect(()=>{if(!R()){p(j(t,w(t,C(Object.fromEntries([...c.entries()]),t))))}},[c]);const d=a.useCallback(e=>{i({...o,...e})},[i]);return{setState:p,setUrl:b,urlState:U,reset:d,getState:v}}const l={replace:true,preventScrollReset:true};export{l as defaultOpts,y as useUrlState};
@@ -1 +1 @@
1
- "use strict";var u=require("react");function f(t){return t&&t.__esModule?t:{default:t}}var e=f(u);const o=typeof window==="undefined"?e.default.useEffect:e.default.useLayoutEffect;exports.useIsomorphicLayoutEffect=o;
1
+ "use strict";var u=require("react");function f(e){return e&&e.__esModule?e:{default:e}}var t=f(u);const o=typeof window==="undefined"?t.default.useEffect:t.default.useLayoutEffect;exports.useIsomorphicLayoutEffect=o;
@@ -1 +1 @@
1
- import e from"react";const o=typeof window==="undefined"?e.useEffect:e.useLayoutEffect;export{o as useIsomorphicLayoutEffect};
1
+ import o from"react";const e=typeof window==="undefined"?o.useEffect:o.useLayoutEffect;export{e as useIsomorphicLayoutEffect};
@@ -1 +1 @@
1
- import o from"react";import{decodeState as a}from"../encodeState/encodeState.mjs";import{stateMap as i}from"../subscribers.mjs";import{filterUnknownParamsClient as f}from"../utils.mjs";import{hrefWithState as c}from"./hrefWithState.mjs";const m=/^[a-z][a-z\d+\-.]*:|^\/\//i;function u(e){return e.defaultPrevented||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||!!e.currentTarget?.target}function l(e){return i.get(e)??a(f(e,window.location.search),e)}function s(e,r){return o.useCallback(t=>({href:t,onClick:n=>{if(m.test(t)||u(n))return;n.preventDefault();r(c(t,e,l(e),window.location.search))}}),[e,r])}export{s as useLinkProps};
1
+ import n from"react";import{decodeState as a}from"../encodeState/encodeState.mjs";import{stateMap as i}from"../subscribers.mjs";import{filterUnknownParamsClient as f}from"../utils.mjs";import{hrefWithState as c}from"./hrefWithState.mjs";const m=/^[a-z][a-z\d+\-.]*:|^\/\//i;function u(e){return e.defaultPrevented||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||!!e.currentTarget?.target}function l(e){return i.get(e)??a(f(e,window.location.search),e)}function s(e,r){return n.useCallback(t=>({href:t,onClick:o=>{if(m.test(t)||u(o))return;o.preventDefault();r(c(t,e,l(e),window.location.search))}}),[e,r])}export{s as useLinkProps};
@@ -1 +1 @@
1
- "use strict";var l=require("react");var u=require("../encodeState/encodeState.cjs");function d(e){return e&&e.__esModule?e:{default:e}}var a=d(l);function o(e){const n=a.default.useCallback((t,c)=>{return u.encodeState(t,e,c)},[e]);const r=a.default.useCallback(t=>u.decodeState(t,e),[e]);return{parse:r,stringify:n}}exports.useUrlEncode=o;
1
+ "use strict";var c=require("react");var u=require("../encodeState/encodeState.cjs");function l(e){return e&&e.__esModule?e:{default:e}}var a=l(c);function d(e){const n=a.default.useCallback((t,o)=>{return u.encodeState(t,e,o)},[e]);const r=a.default.useCallback(t=>u.decodeState(t,e),[e]);return{parse:r,stringify:n}}exports.useUrlEncode=d;
@@ -1 +1 @@
1
- "use strict";var _=require("react");var k=require("../constants/constants.cjs");var C=require("../useIsomorphicLayoutEffect.cjs");var L=require("../useSharedState/useSharedState.cjs");var T=require("../useUrlEncode/useUrlEncode.cjs");var r=require("../utils.cjs");function I(t){return t&&t.__esModule?t:{default:t}}var l=I(_);let s;let a;function P(t,o,S,m){const{parse:d,stringify:f}=T.useUrlEncode(t);const{state:g,getState:u,setState:n}=L.useSharedState(t,()=>S?.({parse:d})||t);const i=l.default.useRef();if(i.current===void 0)i.current=r.getSearch();C.useIsomorphicLayoutEffect(()=>{const e=()=>{n(d(r.filterUnknownParamsClient(t,r.getSearch())))};window.addEventListener(r.popstateEv,e);if(i.current!==r.getSearch())e();return()=>{window.removeEventListener(r.popstateEv,e)}},[]);const c=l.default.useCallback((e,U)=>{const h=typeof e==="function"?e(u(),t):{...u(),...e};const p=f(h,r.getOtherParams(t,window.location.search));const v=b(window.location.pathname,m);const w=`${v}${p.length?"?":""}${p}${window.location.hash}`;const $=`${v}${window.location.search}${window.location.hash}`;if(w===$)return;n(h);const{replace:q,...y}=U||{};clearTimeout(s);s=void 0;a={router:o,method:q?"replace":"push",url:w,opts:y};s=setTimeout(()=>{if(a){a.router[a.method](a.url,a.opts);a=void 0}s=void 0},k.TIMEOUT)},[o,f,u]);const E=l.default.useCallback(e=>{n(t);c(t,e)},[c,n]);return{updateState:n,updateUrl:c,state:g,reset:E,getState:u,pendingUrlUpdate:()=>s!==void 0}}function b(t,o){if(!o||o==="/"){return t}return t.slice(o.length)}exports.useUrlStateBase=P;
1
+ "use strict";var M=require("react");var O=require("../constants/constants.cjs");var P=require("../useIsomorphicLayoutEffect.cjs");var R=require("../useSharedState/useSharedState.cjs");var j=require("../useUrlEncode/useUrlEncode.cjs");var n=require("../utils.cjs");function D(t){return t&&t.__esModule?t:{default:t}}var l=D(M);let f;let s;let a;let v;let m=0;const S=()=>window.location.pathname+window.location.search;function d(){a=void 0;v?.();v=void 0}function g(){if(!a)return void 0;const t=S();if(t===a.from&&t!==a.to){return a}d();return void 0}function H(t,e){const o=g()?.from??S();if(o===t){d();return}a={from:o,to:t,search:e};v??=n.subscribeToUrl(d)}function V(t){if(t.pathname!==window.location.pathname)return;const e=g();const o=t.pathname+t.search;if(e?.to===o)return;const c=o===S();if(c&&!e)return;const i=c?"replace":t.method;t.router[i](t.url,t.opts);H(o,t.search)}function W(t,e,o,c){const{parse:i,stringify:E}=j.useUrlEncode(t);const{state:L,getState:u,setState:h}=R.useSharedState(t,()=>o?.({parse:i})||t);const p=l.default.useRef();if(p.current===void 0)p.current=n.getSearch();P.useIsomorphicLayoutEffect(()=>{const r=()=>{h(i(n.filterUnknownParamsClient(t,n.getSearch())))};window.addEventListener(n.popstateEv,r);if(p.current!==n.getSearch())r();return()=>{window.removeEventListener(n.popstateEv,r)}},[]);l.default.useEffect(()=>{m+=1;return()=>{m-=1;if(m===0)d()}},[]);const w=l.default.useCallback((r,y)=>{const U=typeof r==="function"?r(u(),t):{...u(),...r};h(U);const $=s?.search??g()?.search??window.location.search;const q=E(U,n.getOtherParams(t,$));const T=q.length?`?${q}`:"";const _=x(window.location.pathname,c);const b=`${_}${T}${window.location.hash}`;if(b===`${_}${$}${window.location.hash}`)return;const{replace:C,...I}=y||{};clearTimeout(f);s={router:e,method:C?"replace":"push",url:b,pathname:window.location.pathname,search:T,opts:I};f=setTimeout(()=>{f=void 0;if(!s)return;const B=s;s=void 0;V(B)},O.TIMEOUT)},[e,E,u]);const k=l.default.useCallback(r=>w(t,r),[w]);return{updateState:h,updateUrl:w,state:L,reset:k,getState:u,pendingUrlUpdate:()=>f!==void 0}}function x(t,e){if(!e||e==="/"){return t}return t.slice(e.length)}exports.useUrlStateBase=W;
@@ -1 +1 @@
1
- import u from"react";import{TIMEOUT as T}from"../constants/constants.mjs";import{useIsomorphicLayoutEffect as L}from"../useIsomorphicLayoutEffect.mjs";import{useSharedState as P}from"../useSharedState/useSharedState.mjs";import{useUrlEncode as b}from"../useUrlEncode/useUrlEncode.mjs";import{getSearch as l,popstateEv as v,filterUnknownParamsClient as I,getOtherParams as O}from"../utils.mjs";let i;let o;function x(t,r,g,S){const{parse:p,stringify:d}=b(t);const{state:$,getState:s,setState:n}=P(t,()=>g?.({parse:p})||t);const a=u.useRef();if(a.current===void 0)a.current=l();L(()=>{const e=()=>{n(p(I(t,l())))};window.addEventListener(v,e);if(a.current!==l())e();return()=>{window.removeEventListener(v,e)}},[]);const c=u.useCallback((e,U)=>{const m=typeof e==="function"?e(s(),t):{...s(),...e};const f=d(m,O(t,window.location.search));const h=B(window.location.pathname,S);const w=`${h}${f.length?"?":""}${f}${window.location.hash}`;const k=`${h}${window.location.search}${window.location.hash}`;if(w===k)return;n(m);const{replace:y,...C}=U||{};clearTimeout(i);i=void 0;o={router:r,method:y?"replace":"push",url:w,opts:C};i=setTimeout(()=>{if(o){o.router[o.method](o.url,o.opts);o=void 0}i=void 0},T)},[r,d,s]);const E=u.useCallback(e=>{n(t);c(t,e)},[c,n]);return{updateState:n,updateUrl:c,state:$,reset:E,getState:s,pendingUrlUpdate:()=>i!==void 0}}function B(t,r){if(!r||r==="/"){return t}return t.slice(r.length)}export{x as useUrlStateBase};
1
+ import u from"react";import{TIMEOUT as x}from"../constants/constants.mjs";import{useIsomorphicLayoutEffect as B}from"../useIsomorphicLayoutEffect.mjs";import{useSharedState as H}from"../useSharedState/useSharedState.mjs";import{useUrlEncode as M}from"../useUrlEncode/useUrlEncode.mjs";import{getSearch as h,popstateEv as L,filterUnknownParamsClient as V,getOtherParams as W,subscribeToUrl as _}from"../utils.mjs";let f;let a;let n;let w;let v=0;const g=()=>window.location.pathname+window.location.search;function l(){n=void 0;w?.();w=void 0}function S(){if(!n)return void 0;const t=g();if(t===n.from&&t!==n.to){return n}l();return void 0}function q(t,o){const r=S()?.from??g();if(r===t){l();return}n={from:r,to:t,search:o};w??=_(l)}function z(t){if(t.pathname!==window.location.pathname)return;const o=S();const r=t.pathname+t.search;if(o?.to===r)return;const i=r===g();if(i&&!o)return;const s=i?"replace":t.method;t.router[s](t.url,t.opts);q(r,t.search)}function A(t,o,r,i){const{parse:s,stringify:U}=M(t);const{state:y,getState:c,setState:m}=H(t,()=>r?.({parse:s})||t);const p=u.useRef();if(p.current===void 0)p.current=h();B(()=>{const e=()=>{m(s(V(t,h())))};window.addEventListener(L,e);if(p.current!==h())e();return()=>{window.removeEventListener(L,e)}},[]);u.useEffect(()=>{v+=1;return()=>{v-=1;if(v===0)l()}},[]);const d=u.useCallback((e,O)=>{const $=typeof e==="function"?e(c(),t):{...c(),...e};m($);const E=a?.search??S()?.search??window.location.search;const T=U($,W(t,E));const b=T.length?`?${T}`:"";const k=D(window.location.pathname,i);const C=`${k}${b}${window.location.hash}`;if(C===`${k}${E}${window.location.hash}`)return;const{replace:P,...R}=O||{};clearTimeout(f);a={router:o,method:P?"replace":"push",url:C,pathname:window.location.pathname,search:b,opts:R};f=setTimeout(()=>{f=void 0;if(!a)return;const j=a;a=void 0;z(j)},x)},[o,U,c]);const I=u.useCallback(e=>d(t,e),[d]);return{updateState:m,updateUrl:d,state:y,reset:I,getState:c,pendingUrlUpdate:()=>f!==void 0}}function D(t,o){if(!o||o==="/"){return t}return t.slice(o.length)}export{A as useUrlStateBase};
package/dist/utils.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";const a=n=>{if(n===null)return"null";const t=typeof n;if(t!=="object")return t;if(Array.isArray(n))return"array";if(n instanceof Date)return"date";return"object"};const w=n=>{const t=a(n);return t!=="object"&&t!=="array"};const i=typeof window==="undefined";const h=n=>{if(n instanceof URLSearchParams){return n}if(typeof n==="string"){const t=n.indexOf("?");return new URLSearchParams(t===-1?n:n.slice(t+1))}return new URLSearchParams};const y=(n,t)=>{if(n.length!==t.length)return false;return n.every((r,s)=>c(r,t[s]))};const p=(n,t)=>{const r=Object.keys(n);const s=Object.keys(t);if(r.length!==s.length)return false;return r.every(e=>c(n[e],t[e]))};const c=(n,t)=>{if(n===t)return true;if(n==null||t==null)return false;const r=a(n);const s=a(t);if(r!==s)return false;if(w(n))return false;if(r==="array"){return y(n,t)}if(r==="object"){return p(n,t)}return JSON.stringify(n)===JSON.stringify(t)};function S(n,t){const r=new URLSearchParams;const s=f(n,[...new URLSearchParams(t||"").entries()]);for(const[e,o]of s){r.set(e,o)}return r.toString()}function g(n,t){const r=Object.keys(n);const s=new URLSearchParams;for(const[e,o]of new URLSearchParams(t)){!r.includes(e)&&s.set(e,o)}return s}function m(n,t){const r=t instanceof URLSearchParams?[...t.entries()]:Object.entries(t||{});return Object.fromEntries(f(n,r))}function f(n,t){const r=Object.keys(n);const s=[];for(let e=0;e<t.length;e++){if(r.includes(t[e]?.[0])){s.push([t[e][0].replace(/\+/g," "),t[e][1]])}}return s}function P(n,t){const r=Object.assign({},n);for(const[s]of Object.entries(n)){const e=s;const o=t[e]!==void 0;r[e]=o?t[e]:n[e]}return r}const b={push:n=>{if(typeof window!=="undefined"){window.history.pushState(null,"",n)}},replace:n=>{if(typeof window!=="undefined"){window.history.replaceState(null,"",n)}}};const U=/apple/i.test(!i&&navigator?.userAgent||"");const u="popstate";function O(){return i?"":window.location.search}const l=new Set;let d=false;function j(){if(d||i)return;d=true;for(const n of["pushState","replaceState"]){const t=window.history[n];window.history[n]=function r(...s){const e=t.apply(this,s);queueMicrotask(()=>{for(const o of[...l])o()});return e}}}function v(n){if(i)return()=>void 0;j();l.add(n);window.addEventListener(u,n);return()=>{l.delete(n);window.removeEventListener(u,n)}}exports.assignValue=P;exports.filterUnknown=f;exports.filterUnknownParams=m;exports.filterUnknownParamsClient=S;exports.getOtherParams=g;exports.getParams=h;exports.getSearch=O;exports.isEqual=c;exports.isPrimitive=w;exports.isSSR=i;exports.isSafari=U;exports.popstateEv=u;exports.routerHistory=b;exports.subscribeToUrl=v;exports.typeOf=a;
1
+ "use strict";const a=n=>{if(n===null)return"null";const t=typeof n;if(t!=="object")return t;if(Array.isArray(n))return"array";if(n instanceof Date)return"date";return"object"};const w=n=>{const t=a(n);return t!=="object"&&t!=="array"};const i=typeof window==="undefined";const y=n=>{if(n instanceof URLSearchParams){return n}if(typeof n==="string"){const t=n.indexOf("?");return new URLSearchParams(t===-1?n:n.slice(t+1))}return new URLSearchParams};const p=(n,t)=>{if(n.length!==t.length)return false;return n.every((e,s)=>c(e,t[s]))};const g=(n,t)=>{const e=Object.keys(n);const s=Object.keys(t);if(e.length!==s.length)return false;return e.every(r=>c(n[r],t[r]))};const c=(n,t)=>{if(n===t)return true;if(n==null||t==null)return false;const e=a(n);const s=a(t);if(e!==s)return false;if(w(n))return false;if(e==="array"){return p(n,t)}if(e==="object"){return g(n,t)}return JSON.stringify(n)===JSON.stringify(t)};function S(n,t){const e=new URLSearchParams;const s=f(n,[...new URLSearchParams(t||"").entries()]);for(const[r,o]of s){e.set(r,o)}return e.toString()}function b(n,t){const e=Object.keys(n);const s=new URLSearchParams;for(const[r,o]of new URLSearchParams(t)){if(!e.includes(r))s.set(r,o)}return s}function m(n,t){const e=t instanceof URLSearchParams?[...t.entries()]:Object.entries(t||{});return Object.fromEntries(f(n,e))}function f(n,t){const e=Object.keys(n);const s=[];for(let r=0;r<t.length;r++){if(e.includes(t[r]?.[0])){s.push([t[r][0].replace(/\+/g," "),t[r][1]])}}return s}function P(n,t){const e=Object.assign({},n);for(const[s]of Object.entries(n)){const r=s;const o=t[r]!==void 0;e[r]=o?t[r]:n[r]}return e}const U={push:n=>{if(typeof window!=="undefined"){window.history.pushState(null,"",n)}},replace:n=>{if(typeof window!=="undefined"){window.history.replaceState(null,"",n)}}};const d=n=>/AppleWebKit\/[6-9]\d\d/.test(n);const O=d(!i&&navigator?.userAgent||"");const u="popstate";function j(){return i?"":window.location.search}const l=new Set;let h=false;function v(){if(h||i)return;h=true;for(const n of["pushState","replaceState"]){const t=window.history[n];window.history[n]=function e(...s){const r=t.apply(this,s);queueMicrotask(()=>{for(const o of[...l])o()});return r}}}function k(n){if(i)return()=>void 0;v();l.add(n);window.addEventListener(u,n);return()=>{l.delete(n);window.removeEventListener(u,n)}}exports.assignValue=P;exports.filterUnknown=f;exports.filterUnknownParams=m;exports.filterUnknownParamsClient=S;exports.getOtherParams=b;exports.getParams=y;exports.getSearch=j;exports.isEqual=c;exports.isPrimitive=w;exports.isSSR=i;exports.isWebKit=O;exports.isWebKitUserAgent=d;exports.popstateEv=u;exports.routerHistory=U;exports.subscribeToUrl=k;exports.typeOf=a;
package/dist/utils.d.ts CHANGED
@@ -33,7 +33,8 @@ export interface Router {
33
33
  replace: (href: string, opts?: object) => void;
34
34
  }
35
35
  export declare const routerHistory: Router;
36
- export declare const isSafari: boolean;
36
+ export declare const isWebKitUserAgent: (userAgent: string) => boolean;
37
+ export declare const isWebKit: boolean;
37
38
  export declare const popstateEv = "popstate";
38
39
  export declare function getSearch(): string;
39
40
  type UrlCb = () => void;
package/dist/utils.mjs CHANGED
@@ -1 +1 @@
1
- const c=n=>{if(n===null)return"null";const t=typeof n;if(t!=="object")return t;if(Array.isArray(n))return"array";if(n instanceof Date)return"date";return"object"};const w=n=>{const t=c(n);return t!=="object"&&t!=="array"};const i=typeof window==="undefined";const h=n=>{if(n instanceof URLSearchParams){return n}if(typeof n==="string"){const t=n.indexOf("?");return new URLSearchParams(t===-1?n:n.slice(t+1))}return new URLSearchParams};const y=(n,t)=>{if(n.length!==t.length)return false;return n.every((r,s)=>a(r,t[s]))};const p=(n,t)=>{const r=Object.keys(n);const s=Object.keys(t);if(r.length!==s.length)return false;return r.every(e=>a(n[e],t[e]))};const a=(n,t)=>{if(n===t)return true;if(n==null||t==null)return false;const r=c(n);const s=c(t);if(r!==s)return false;if(w(n))return false;if(r==="array"){return y(n,t)}if(r==="object"){return p(n,t)}return JSON.stringify(n)===JSON.stringify(t)};function S(n,t){const r=new URLSearchParams;const s=f(n,[...new URLSearchParams(t||"").entries()]);for(const[e,o]of s){r.set(e,o)}return r.toString()}function g(n,t){const r=Object.keys(n);const s=new URLSearchParams;for(const[e,o]of new URLSearchParams(t)){!r.includes(e)&&s.set(e,o)}return s}function m(n,t){const r=t instanceof URLSearchParams?[...t.entries()]:Object.entries(t||{});return Object.fromEntries(f(n,r))}function f(n,t){const r=Object.keys(n);const s=[];for(let e=0;e<t.length;e++){if(r.includes(t[e]?.[0])){s.push([t[e][0].replace(/\+/g," "),t[e][1]])}}return s}function b(n,t){const r=Object.assign({},n);for(const[s]of Object.entries(n)){const e=s;const o=t[e]!==void 0;r[e]=o?t[e]:n[e]}return r}const O={push:n=>{if(typeof window!=="undefined"){window.history.pushState(null,"",n)}},replace:n=>{if(typeof window!=="undefined"){window.history.replaceState(null,"",n)}}};const P=/apple/i.test(!i&&navigator?.userAgent||"");const u="popstate";function j(){return i?"":window.location.search}const l=new Set;let d=false;function U(){if(d||i)return;d=true;for(const n of["pushState","replaceState"]){const t=window.history[n];window.history[n]=function r(...s){const e=t.apply(this,s);queueMicrotask(()=>{for(const o of[...l])o()});return e}}}function v(n){if(i)return()=>void 0;U();l.add(n);window.addEventListener(u,n);return()=>{l.delete(n);window.removeEventListener(u,n)}}export{b as assignValue,f as filterUnknown,m as filterUnknownParams,S as filterUnknownParamsClient,g as getOtherParams,h as getParams,j as getSearch,a as isEqual,w as isPrimitive,i as isSSR,P as isSafari,u as popstateEv,O as routerHistory,v as subscribeToUrl,c as typeOf};
1
+ const c=n=>{if(n===null)return"null";const t=typeof n;if(t!=="object")return t;if(Array.isArray(n))return"array";if(n instanceof Date)return"date";return"object"};const w=n=>{const t=c(n);return t!=="object"&&t!=="array"};const i=typeof window==="undefined";const y=n=>{if(n instanceof URLSearchParams){return n}if(typeof n==="string"){const t=n.indexOf("?");return new URLSearchParams(t===-1?n:n.slice(t+1))}return new URLSearchParams};const p=(n,t)=>{if(n.length!==t.length)return false;return n.every((e,s)=>a(e,t[s]))};const S=(n,t)=>{const e=Object.keys(n);const s=Object.keys(t);if(e.length!==s.length)return false;return e.every(r=>a(n[r],t[r]))};const a=(n,t)=>{if(n===t)return true;if(n==null||t==null)return false;const e=c(n);const s=c(t);if(e!==s)return false;if(w(n))return false;if(e==="array"){return p(n,t)}if(e==="object"){return S(n,t)}return JSON.stringify(n)===JSON.stringify(t)};function g(n,t){const e=new URLSearchParams;const s=f(n,[...new URLSearchParams(t||"").entries()]);for(const[r,o]of s){e.set(r,o)}return e.toString()}function b(n,t){const e=Object.keys(n);const s=new URLSearchParams;for(const[r,o]of new URLSearchParams(t)){if(!e.includes(r))s.set(r,o)}return s}function m(n,t){const e=t instanceof URLSearchParams?[...t.entries()]:Object.entries(t||{});return Object.fromEntries(f(n,e))}function f(n,t){const e=Object.keys(n);const s=[];for(let r=0;r<t.length;r++){if(e.includes(t[r]?.[0])){s.push([t[r][0].replace(/\+/g," "),t[r][1]])}}return s}function O(n,t){const e=Object.assign({},n);for(const[s]of Object.entries(n)){const r=s;const o=t[r]!==void 0;e[r]=o?t[r]:n[r]}return e}const P={push:n=>{if(typeof window!=="undefined"){window.history.pushState(null,"",n)}},replace:n=>{if(typeof window!=="undefined"){window.history.replaceState(null,"",n)}}};const d=n=>/AppleWebKit\/[6-9]\d\d/.test(n);const U=d(!i&&navigator?.userAgent||"");const u="popstate";function j(){return i?"":window.location.search}const l=new Set;let h=false;function v(){if(h||i)return;h=true;for(const n of["pushState","replaceState"]){const t=window.history[n];window.history[n]=function e(...s){const r=t.apply(this,s);queueMicrotask(()=>{for(const o of[...l])o()});return r}}}function L(n){if(i)return()=>void 0;v();l.add(n);window.addEventListener(u,n);return()=>{l.delete(n);window.removeEventListener(u,n)}}export{O as assignValue,f as filterUnknown,m as filterUnknownParams,g as filterUnknownParamsClient,b as getOtherParams,y as getParams,j as getSearch,a as isEqual,w as isPrimitive,i as isSSR,U as isWebKit,d as isWebKitUserAgent,u as popstateEv,P as routerHistory,L as subscribeToUrl,c as typeOf};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "state-in-url",
3
- "version": "8.0.0",
3
+ "version": "8.0.1",
4
4
  "description": "Store state in URL as in object, types and structure are preserved, with TS validation. Same API as React.useState, wthout any hasssle or boilerplate. Next.js@14-16, react-router@6-7, remix@2, and Astro.",
5
5
  "homepage": "https://state-in-url.dev",
6
6
  "repository": {
@@ -18,7 +18,7 @@ sources:
18
18
  metadata:
19
19
  type: framework
20
20
  library: state-in-url
21
- library_version: '8.0.0'
21
+ library_version: '8.0.1'
22
22
  framework: astro
23
23
  ---
24
24
 
@@ -16,7 +16,7 @@ sources:
16
16
  metadata:
17
17
  type: core
18
18
  library: state-in-url
19
- library_version: '8.0.0'
19
+ library_version: '8.0.1'
20
20
  ---
21
21
 
22
22
  # state-in-url — Feature state hook
@@ -15,7 +15,7 @@ sources:
15
15
  metadata:
16
16
  type: composition
17
17
  library: state-in-url
18
- library_version: '8.0.0'
18
+ library_version: '8.0.1'
19
19
  ---
20
20
 
21
21
  This skill builds on `state-in-url/feature-state-hook`. Read it first for the module-scoped default-state rule.
@@ -16,7 +16,7 @@ sources:
16
16
  metadata:
17
17
  type: core
18
18
  library: state-in-url
19
- library_version: '8.0.0'
19
+ library_version: '8.0.1'
20
20
  ---
21
21
 
22
22
  This skill builds on `state-in-url/feature-state-hook`. Read it first for the module-scoped default-state rule.
@@ -17,7 +17,7 @@ sources:
17
17
  metadata:
18
18
  type: framework
19
19
  library: state-in-url
20
- library_version: '8.0.0'
20
+ library_version: '8.0.1'
21
21
  framework: react
22
22
  ---
23
23
 
@@ -18,7 +18,7 @@ sources:
18
18
  metadata:
19
19
  type: framework
20
20
  library: state-in-url
21
- library_version: '8.0.0'
21
+ library_version: '8.0.1'
22
22
  framework: react
23
23
  ---
24
24
 
@@ -17,7 +17,7 @@ sources:
17
17
  metadata:
18
18
  type: framework
19
19
  library: state-in-url
20
- library_version: '8.0.0'
20
+ library_version: '8.0.1'
21
21
  framework: react
22
22
  ---
23
23
 
@@ -14,7 +14,7 @@ sources:
14
14
  metadata:
15
15
  type: core
16
16
  library: state-in-url
17
- library_version: '8.0.0'
17
+ library_version: '8.0.1'
18
18
  ---
19
19
 
20
20
  # state-in-url — Shared state without URL sync