@yakocloud/state-vocab 2.1.2 → 2.2.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.
package/README.md CHANGED
@@ -149,10 +149,14 @@ const birthday = defineState({
149
149
  })
150
150
  ```
151
151
 
152
- ### `setupStorage(tree)`
152
+ ### `setupStorage(tree, options)`
153
153
 
154
154
  Wraps a nested object of `defineState()` nodes and injects dot-separated paths into each leaf. The returned object mirrors your tree structure.
155
155
 
156
+ | Parameter | Type | Description | Default
157
+ |---|---|---|
158
+ | `ssr` | `boolean \| undefined` | SSR support | false
159
+
156
160
  ```ts
157
161
  const storage = setupStorage({
158
162
  user: {
@@ -327,6 +331,7 @@ createRoot(document.getElementById('root')!).render(
327
331
  | `storage` | `Storage \| (() => Storage) \| undefined` | `undefined` (in-memory) |
328
332
  | `defaultValue` | `T \| undefined` | `undefined` |
329
333
  | `bidirectional` | `true \| undefined` | `undefined` |
334
+ | `autoSet` | `true \| undefined` | `undefined` |
330
335
  | `serialize` | `(v: T) => string` | `JSON.stringify` |
331
336
  | `deserialize` | `(v: string) => T` | `JSON.parse` |
332
337
 
@@ -346,5 +351,6 @@ React context provider. Must be an ancestor of any component using `.useState()`
346
351
  | `options.delayedSet` | `number \| undefined` | Debounce delay for `onSet` in ms |
347
352
  | `options.onSet` | `(next: D, prev: D) => void \| undefined` | Callback after state change |
348
353
  | `options.bidirectional` | `true \| undefined` | bidirectional state update to sync tabs |
354
+ | `options.autoSet` | `true \| undefined` | set the passed default value |
349
355
 
350
356
  Returns `[value, setValue, resetValue]`.
@@ -1,8 +1,8 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("react"),B=Symbol("state-def"),A=Symbol("state-path");function ie(t,c,o){if(!c)return t;const a=c.split(".");let r=t;for(const s of a)if(r!==null&&typeof r=="object"&&s in r)r=r[s];else return o;return r===void 0?o:r}function fe(t,c,o){const a=c.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(let s=0;s<a.length-1;s++){const f=a[s],u=a[s+1];(r[f]===void 0||r[f]===null)&&(r[f]=/^\d+$/.test(u)?[]:{}),r=r[f]}return r[a[a.length-1]]=o,t}function de(t,c=0){let o;return function(...a){o!==void 0&&clearTimeout(o),o=setTimeout(()=>{o=void 0,t.apply(this,a)},c)}}function me(t,c,o=[]){return y.useMemo(()=>de(t,c),o)}function be(t){const c=JSON.stringify(t,null,2).split(`
2
- `),o=[],a=[];for(const r of c){const s=r.match(/^(\s*)"([^"]+)"(\s*:\s*)(.+)$/);if(s){const[,f,u,p,v]=s;o.push(`${f}%c"${u}"%c${p}%c${v}`),a.push("color: #9cdcfe; font-weight: bold","color: #cccccc","color: #ce9178")}else o.push(`%c${r}`),a.push("color: #cccccc")}console.log(o.join(`
3
- `),...a,t)}var x={exports:{}},k={};var W;function ve(){if(W)return k;W=1;var t=Symbol.for("react.transitional.element"),c=Symbol.for("react.fragment");function o(a,r,s){var f=null;if(s!==void 0&&(f=""+s),r.key!==void 0&&(f=""+r.key),"key"in r){s={};for(var u in r)u!=="key"&&(s[u]=r[u])}else s=r;return r=s.ref,{$$typeof:t,type:a,key:f,ref:r!==void 0?r:null,props:s}}return k.Fragment=c,k.jsx=o,k.jsxs=o,k}var w={};var J;function Ee(){return J||(J=1,process.env.NODE_ENV!=="production"&&(function(){function t(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===ce?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case S:return"Fragment";case K:return"Profiler";case h:return"StrictMode";case ne:return"Suspense";case oe:return"SuspenseList";case se:return"Activity"}if(typeof e=="object")switch(typeof e.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),e.$$typeof){case d:return"Portal";case te:return e.displayName||"Context";case ee:return(e._context.displayName||"Context")+".Consumer";case re:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case ae:return n=e.displayName||null,n!==null?n:t(e.type)||"Memo";case j:n=e._payload,e=e._init;try{return t(e(n))}catch{}}return null}function c(e){return""+e}function o(e){try{c(e);var n=!1}catch{n=!0}if(n){n=console;var i=n.error,m=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return i.call(n,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",m),c(e)}}function a(e){if(e===S)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===j)return"<...>";try{var n=t(e);return n?"<"+n+">":"<...>"}catch{return"<...>"}}function r(){var e=N.A;return e===null?null:e.getOwner()}function s(){return Error("react-stack-top-frame")}function f(e){if(Y.call(e,"key")){var n=Object.getOwnPropertyDescriptor(e,"key").get;if(n&&n.isReactWarning)return!1}return e.key!==void 0}function u(e,n){function i(){M||(M=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",n))}i.isReactWarning=!0,Object.defineProperty(e,"key",{get:i,configurable:!0})}function p(){var e=t(this.type);return D[e]||(D[e]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),e=this.props.ref,e!==void 0?e:null}function v(e,n,i,m,P,V){var b=i.ref;return e={$$typeof:_,type:e,key:n,props:i,_owner:m},(b!==void 0?b:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:p}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:P}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:V}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function l(e,n,i,m,P,V){var b=n.children;if(b!==void 0)if(m)if(ue(b)){for(m=0;m<b.length;m++)R(b[m]);Object.freeze&&Object.freeze(b)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else R(b);if(Y.call(n,"key")){b=t(e);var g=Object.keys(n).filter(function(le){return le!=="key"});m=0<g.length?"{key: someKey, "+g.join(": ..., ")+": ...}":"{key: someKey}",z[b+m]||(g=0<g.length?"{"+g.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("react"),te=Symbol("state-def"),C=Symbol("state-path"),z=Symbol("state-ssr-support");function ie(t,s,o){if(!s)return t;const a=s.split(".");let r=t;for(const c of a)if(r!==null&&typeof r=="object"&&c in r)r=r[c];else return o;return r===void 0?o:r}function fe(t,s,o){const a=s.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(let c=0;c<a.length-1;c++){const u=a[c],l=a[c+1];(r[u]===void 0||r[u]===null)&&(r[u]=/^\d+$/.test(l)?[]:{}),r=r[u]}return r[a[a.length-1]]=o,t}function de(t,s=0){let o;return function(...a){o!==void 0&&clearTimeout(o),o=setTimeout(()=>{o=void 0,t.apply(this,a)},s)}}function me(t,s,o=[]){return S.useMemo(()=>de(t,s),o)}function be(t){const s=JSON.stringify(t,null,2).split(`
2
+ `),o=[],a=[];for(const r of s){const c=r.match(/^(\s*)"([^"]+)"(\s*:\s*)(.+)$/);if(c){const[,u,l,_,d]=c;o.push(`${u}%c"${l}"%c${_}%c${d}`),a.push("color: #9cdcfe; font-weight: bold","color: #cccccc","color: #ce9178")}else o.push(`%c${r}`),a.push("color: #cccccc")}console.log(o.join(`
3
+ `),...a,t)}var V={exports:{}},O={};var B;function ve(){if(B)return O;B=1;var t=Symbol.for("react.transitional.element"),s=Symbol.for("react.fragment");function o(a,r,c){var u=null;if(c!==void 0&&(u=""+c),r.key!==void 0&&(u=""+r.key),"key"in r){c={};for(var l in r)l!=="key"&&(c[l]=r[l])}else c=r;return r=c.ref,{$$typeof:t,type:a,key:u,ref:r!==void 0?r:null,props:c}}return O.Fragment=s,O.jsx=o,O.jsxs=o,O}var A={};var H;function Ee(){return H||(H=1,process.env.NODE_ENV!=="production"&&(function(){function t(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===ce?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case E:return"Fragment";case P:return"Profiler";case g:return"StrictMode";case x:return"Suspense";case oe:return"SuspenseList";case se:return"Activity"}if(typeof e=="object")switch(typeof e.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),e.$$typeof){case k:return"Portal";case h:return e.displayName||"Context";case v:return(e._context.displayName||"Context")+".Consumer";case I:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case ae:return n=e.displayName||null,n!==null?n:t(e.type)||"Memo";case M:n=e._payload,e=e._init;try{return t(e(n))}catch{}}return null}function s(e){return""+e}function o(e){try{s(e);var n=!1}catch{n=!0}if(n){n=console;var i=n.error,m=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return i.call(n,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",m),s(e)}}function a(e){if(e===E)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===M)return"<...>";try{var n=t(e);return n?"<"+n+">":"<...>"}catch{return"<...>"}}function r(){var e=Y.A;return e===null?null:e.getOwner()}function c(){return Error("react-stack-top-frame")}function u(e){if(W.call(e,"key")){var n=Object.getOwnPropertyDescriptor(e,"key").get;if(n&&n.isReactWarning)return!1}return e.key!==void 0}function l(e,n){function i(){J||(J=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",n))}i.isReactWarning=!0,Object.defineProperty(e,"key",{get:i,configurable:!0})}function _(){var e=t(this.type);return U[e]||(U[e]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),e=this.props.ref,e!==void 0?e:null}function d(e,n,i,m,j,F){var b=i.ref;return e={$$typeof:T,type:e,key:n,props:i,_owner:m},(b!==void 0?b:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:_}):Object.defineProperty(e,"ref",{enumerable:!1,value:null}),e._store={},Object.defineProperty(e._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(e,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(e,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:j}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:F}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function f(e,n,i,m,j,F){var b=n.children;if(b!==void 0)if(m)if(ue(b)){for(m=0;m<b.length;m++)p(b[m]);Object.freeze&&Object.freeze(b)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else p(b);if(W.call(n,"key")){b=t(e);var w=Object.keys(n).filter(function(le){return le!=="key"});m=0<w.length?"{key: someKey, "+w.join(": ..., ")+": ...}":"{key: someKey}",X[b+m]||(w=0<w.length?"{"+w.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
4
4
  let props = %s;
5
5
  <%s {...props} />
6
6
  React keys must be passed directly to JSX without using spread:
7
7
  let props = %s;
8
- <%s key={someKey} {...props} />`,m,b,g,b),z[b+m]=!0)}if(b=null,i!==void 0&&(o(i),b=""+i),f(n)&&(o(n.key),b=""+n.key),"key"in n){i={};for(var $ in n)$!=="key"&&(i[$]=n[$])}else i=n;return b&&u(i,typeof e=="function"?e.displayName||e.name||"Unknown":e),v(e,b,i,r(),P,V)}function R(e){T(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===j&&(e._payload.status==="fulfilled"?T(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function T(e){return typeof e=="object"&&e!==null&&e.$$typeof===_}var E=y,_=Symbol.for("react.transitional.element"),d=Symbol.for("react.portal"),S=Symbol.for("react.fragment"),h=Symbol.for("react.strict_mode"),K=Symbol.for("react.profiler"),ee=Symbol.for("react.consumer"),te=Symbol.for("react.context"),re=Symbol.for("react.forward_ref"),ne=Symbol.for("react.suspense"),oe=Symbol.for("react.suspense_list"),ae=Symbol.for("react.memo"),j=Symbol.for("react.lazy"),se=Symbol.for("react.activity"),ce=Symbol.for("react.client.reference"),N=E.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,Y=Object.prototype.hasOwnProperty,ue=Array.isArray,C=console.createTask?console.createTask:function(){return null};E={react_stack_bottom_frame:function(e){return e()}};var M,D={},F=E.react_stack_bottom_frame.bind(E,s)(),L=C(a(s)),z={};w.Fragment=S,w.jsx=function(e,n,i){var m=1e4>N.recentlyCreatedOwnerStacks++;return l(e,n,i,!1,m?Error("react-stack-top-frame"):F,m?C(a(e)):L)},w.jsxs=function(e,n,i){var m=1e4>N.recentlyCreatedOwnerStacks++;return l(e,n,i,!0,m?Error("react-stack-top-frame"):F,m?C(a(e)):L)}})()),w}var U;function pe(){return U||(U=1,process.env.NODE_ENV==="production"?x.exports=ve():x.exports=Ee()),x.exports}var _e=pe();const H=y.createContext({stateVocab:{},setStateVocab:()=>{}});function Se(){return y.useContext(H)}const Re=t=>{const{children:c,verbose:o}=t,[a,r]=y.useState({});return o&&be(a),_e.jsx(H.Provider,{value:{stateVocab:a,setStateVocab:r},children:c})},O=(t,c)=>o=>{const a={...o};return fe(a,t,c),a},I=(t,c)=>Z(t)??c,q=t=>{const{serialized:c,defaultValue:o,superDefaultValue:a,deserialize:r}=t;if(c===null){const s=I(o,a);return typeof s>"u"?void 0:s}return r(c)},ye=t=>typeof t=="function",Te=t=>typeof t=="function",Z=t=>Te(t)?t():t;function ge(t={}){const{serialize:c=JSON.stringify,deserialize:o=JSON.parse}=t,a=t.defaultValue,r=t.bidirectional,s=typeof window>"u"?void 0:Z(t.storage);return{[B]:!0,[A]:"",useState(f,u){u??={};const p=me(u.onSet??(()=>{}),u.delayedSet,[]),v=Se(),l=this[A],R=y.useMemo(()=>{if(!s)return;const _=s.getItem(l);return q({serialized:_,defaultValue:f,superDefaultValue:a,deserialize:o})},[l]),T=y.useMemo(()=>ie(v.stateVocab,l,R??I(f,a)),[v.stateVocab,R,l]);y.useEffect(()=>{!s||typeof R>"u"||v.setStateVocab(O(l,R))},[R]),y.useEffect(()=>{if(!u.bidirectional&&!r)return;const _=d=>{if(d.key!==l)return;const S=d.newValue,h=q({serialized:S,defaultValue:f,superDefaultValue:a,deserialize:o});v.setStateVocab(O(l,h)),p(h,E.current),E.current=h};return window.addEventListener("storage",_),()=>window.removeEventListener("storage",_)},[l,u.bidirectional,r]);const E=y.useRef(T);return[T,function(d){const S=ye(d)?d(E.current):d;v.setStateVocab(O(l,S)),p(S,E.current),s&&s.setItem(l,c(S)),E.current=S},function(){const d=I(f,a);if(typeof d>"u"){s?.removeItem(l);return}v.setStateVocab(O(l,d)),p(d,E.current),E.current=d,s&&s.setItem(l,c(d))}]},toString(){return this[A]}}}const G=new WeakMap,X=new WeakMap;function Q(t,c=""){let o=G.get(t);o||(o=new Map,G.set(t,o));const a=o.get(c);if(a)return a;const r=new Proxy(t,{get(s,f){const u=s[f],p=c?`${c}.${String(f)}`:String(f);if(u&&typeof u=="object"&&B in u){const v=u;let l=X.get(v);l||(l=new Map,X.set(v,l));const R=l.get(p);if(R)return R;const T=Reflect.ownKeys(v).filter(d=>typeof v[d]=="function"),E=Object.fromEntries(T.map(d=>[d,(...S)=>v[d].call({...v,[A]:p},...S)])),_={...v,...E};return l.set(p,_),_}return u&&typeof u=="object"?Q(u,p):u}});return o.set(c,r),r}function he(t){return Q(t)}exports.StorageProvider=Re;exports.defineState=ge;exports.setupStorage=he;
8
+ <%s key={someKey} {...props} />`,m,b,w,b),X[b+m]=!0)}if(b=null,i!==void 0&&(o(i),b=""+i),u(n)&&(o(n.key),b=""+n.key),"key"in n){i={};for(var L in n)L!=="key"&&(i[L]=n[L])}else i=n;return b&&l(i,typeof e=="function"?e.displayName||e.name||"Unknown":e),d(e,b,i,r(),j,F)}function p(e){R(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===M&&(e._payload.status==="fulfilled"?R(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function R(e){return typeof e=="object"&&e!==null&&e.$$typeof===T}var y=S,T=Symbol.for("react.transitional.element"),k=Symbol.for("react.portal"),E=Symbol.for("react.fragment"),g=Symbol.for("react.strict_mode"),P=Symbol.for("react.profiler"),v=Symbol.for("react.consumer"),h=Symbol.for("react.context"),I=Symbol.for("react.forward_ref"),x=Symbol.for("react.suspense"),oe=Symbol.for("react.suspense_list"),ae=Symbol.for("react.memo"),M=Symbol.for("react.lazy"),se=Symbol.for("react.activity"),ce=Symbol.for("react.client.reference"),Y=y.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,W=Object.prototype.hasOwnProperty,ue=Array.isArray,D=console.createTask?console.createTask:function(){return null};y={react_stack_bottom_frame:function(e){return e()}};var J,U={},q=y.react_stack_bottom_frame.bind(y,c)(),G=D(a(c)),X={};A.Fragment=E,A.jsx=function(e,n,i){var m=1e4>Y.recentlyCreatedOwnerStacks++;return f(e,n,i,!1,m?Error("react-stack-top-frame"):q,m?D(a(e)):G)},A.jsxs=function(e,n,i){var m=1e4>Y.recentlyCreatedOwnerStacks++;return f(e,n,i,!0,m?Error("react-stack-top-frame"):q,m?D(a(e)):G)}})()),A}var Z;function Se(){return Z||(Z=1,process.env.NODE_ENV==="production"?V.exports=ve():V.exports=Ee()),V.exports}var pe=Se();const re=S.createContext({stateVocab:{},setStateVocab:()=>{}});function _e(){return S.useContext(re)}const Re=t=>{const{children:s,verbose:o}=t,[a,r]=S.useState({});return o&&be(a),pe.jsx(re.Provider,{value:{stateVocab:a,setStateVocab:r},children:s})},N=(t,s)=>o=>{const a={...o};return fe(a,t,s),a},Q=t=>{const{serialized:s,defaultValue:o,superDefaultValue:a,deserialize:r}=t;if(s===null){const c=$(o)??a;return typeof c>"u"?void 0:c}return r(s)},Te=t=>typeof t=="function",ye=t=>typeof t=="function",$=t=>ye(t)?t():t,ge=typeof window>"u";function he(t={}){const{serialize:s=JSON.stringify,deserialize:o=JSON.parse}=t,a=t.defaultValue,r=t.bidirectional,c=t.autoSet,u=ge?void 0:$(t.storage);return{[te]:!0,[z]:!1,[C]:"",useState(l){l??={};const _=me(l.onSet??(()=>{}),l.delayedSet,[]),d=_e(),f=this[C],p=this[z],[R,y]=S.useState(!p);S.useEffect(()=>y(!0),[]);const T=S.useMemo(()=>{if(!R||!u)return;const v=u.getItem(f);return Q({defaultValue:l.defaultValue,serialized:v,superDefaultValue:a,deserialize:o})},[f,R]),k=S.useMemo(()=>ie(d.stateVocab,f,T??$(l.defaultValue)??a),[d.stateVocab,T,f]);S.useEffect(()=>{!u||typeof T>"u"||d.setStateVocab(N(f,T))},[T]),S.useEffect(()=>{if(!l.bidirectional&&!r)return;const v=h=>{if(h.key!==f)return;const I=h.newValue,x=Q({defaultValue:l.defaultValue,superDefaultValue:a,serialized:I,deserialize:o});d.setStateVocab(N(f,x)),_(x,E.current),E.current=x};return window.addEventListener("storage",v),()=>window.removeEventListener("storage",v)},[f,l.bidirectional,r]);const E=S.useRef(k),g=v=>{const h=Te(v)?v(E.current):v;d.setStateVocab(N(f,h)),_(h,E.current),u&&u.setItem(f,s(h)),E.current=h},P=()=>{const v=$(l.defaultValue)??a;if(typeof v>"u"){u?.removeItem(f);return}d.setStateVocab(N(f,v)),_(v,E.current),E.current=v,u&&u.setItem(f,s(v))};return S.useEffect(()=>{(l.autoSet||c)&&g(k)},[]),[k,g,P]},toString(){return this[C]}}}const K=new WeakMap,ee=new WeakMap;function ne(t,s){s??={};const{path:o="",ssr:a}=s;let r=K.get(t);r||(r=new Map,K.set(t,r));const c=r.get(o);if(c)return c;const u=new Proxy(t,{get(l,_){const d=l[_],f=o?`${o}.${String(_)}`:String(_);if(d&&typeof d=="object"&&te in d){const p=d;let R=ee.get(p);R||(R=new Map,ee.set(p,R));const y=R.get(f);if(y)return y;const T=Reflect.ownKeys(p).filter(g=>typeof p[g]=="function"),k=Object.fromEntries(T.map(g=>[g,(...P)=>p[g].call({...p,[C]:f,[z]:a},...P)])),E={...p,...k};return R.set(f,E),E}return d&&typeof d=="object"?ne(d,{path:f,ssr:a}):d}});return r.set(o,u),u}function ke(t,s){return ne(t,s)}exports.StorageProvider=Re;exports.defineState=he;exports.setupStorage=ke;
@@ -1,49 +1,49 @@
1
- import fe, { useMemo as $, createContext as de, useState as me, useContext as be, useEffect as W, useRef as ve } from "react";
2
- const H = Symbol("state-def"), O = Symbol("state-path");
3
- function Ee(t, c, o) {
4
- if (!c)
1
+ import de, { useMemo as z, createContext as me, useState as re, useContext as be, useEffect as V, useRef as ve } from "react";
2
+ const ne = Symbol("state-def"), C = Symbol("state-path"), W = Symbol("state-ssr-support");
3
+ function Ee(t, s, o) {
4
+ if (!s)
5
5
  return t;
6
- const a = c.split(".");
6
+ const a = s.split(".");
7
7
  let r = t;
8
- for (const s of a)
9
- if (r !== null && typeof r == "object" && s in r)
10
- r = r[s];
8
+ for (const c of a)
9
+ if (r !== null && typeof r == "object" && c in r)
10
+ r = r[c];
11
11
  else
12
12
  return o;
13
13
  return r === void 0 ? o : r;
14
14
  }
15
- function pe(t, c, o) {
16
- const a = c.replace(/\[(\d+)\]/g, ".$1").split(".");
15
+ function pe(t, s, o) {
16
+ const a = s.replace(/\[(\d+)\]/g, ".$1").split(".");
17
17
  let r = t;
18
- for (let s = 0; s < a.length - 1; s++) {
19
- const f = a[s], u = a[s + 1];
20
- (r[f] === void 0 || r[f] === null) && (r[f] = /^\d+$/.test(u) ? [] : {}), r = r[f];
18
+ for (let c = 0; c < a.length - 1; c++) {
19
+ const u = a[c], l = a[c + 1];
20
+ (r[u] === void 0 || r[u] === null) && (r[u] = /^\d+$/.test(l) ? [] : {}), r = r[u];
21
21
  }
22
22
  return r[a[a.length - 1]] = o, t;
23
23
  }
24
- function _e(t, c = 0) {
24
+ function _e(t, s = 0) {
25
25
  let o;
26
26
  return function(...a) {
27
27
  o !== void 0 && clearTimeout(o), o = setTimeout(() => {
28
28
  o = void 0, t.apply(this, a);
29
- }, c);
29
+ }, s);
30
30
  };
31
31
  }
32
- function Se(t, c, o = []) {
33
- return $(
34
- () => _e(t, c),
32
+ function Se(t, s, o = []) {
33
+ return z(
34
+ () => _e(t, s),
35
35
  // eslint-disable-next-line react-hooks/exhaustive-deps
36
36
  o
37
37
  );
38
38
  }
39
39
  function Re(t) {
40
- const c = JSON.stringify(t, null, 2).split(`
40
+ const s = JSON.stringify(t, null, 2).split(`
41
41
  `), o = [], a = [];
42
- for (const r of c) {
43
- const s = r.match(/^(\s*)"([^"]+)"(\s*:\s*)(.+)$/);
44
- if (s) {
45
- const [, f, u, p, v] = s;
46
- o.push(`${f}%c"${u}"%c${p}%c${v}`), a.push(
42
+ for (const r of s) {
43
+ const c = r.match(/^(\s*)"([^"]+)"(\s*:\s*)(.+)$/);
44
+ if (c) {
45
+ const [, u, l, _, d] = c;
46
+ o.push(`${u}%c"${l}"%c${_}%c${d}`), a.push(
47
47
  "color: #9cdcfe; font-weight: bold",
48
48
  "color: #cccccc",
49
49
  "color: #ce9178"
@@ -54,68 +54,68 @@ function Re(t) {
54
54
  console.log(o.join(`
55
55
  `), ...a, t);
56
56
  }
57
- var x = { exports: {} }, h = {};
58
- var J;
59
- function ye() {
60
- if (J) return h;
61
- J = 1;
62
- var t = Symbol.for("react.transitional.element"), c = Symbol.for("react.fragment");
63
- function o(a, r, s) {
64
- var f = null;
65
- if (s !== void 0 && (f = "" + s), r.key !== void 0 && (f = "" + r.key), "key" in r) {
66
- s = {};
67
- for (var u in r)
68
- u !== "key" && (s[u] = r[u]);
69
- } else s = r;
70
- return r = s.ref, {
57
+ var j = { exports: {} }, x = {};
58
+ var H;
59
+ function Te() {
60
+ if (H) return x;
61
+ H = 1;
62
+ var t = Symbol.for("react.transitional.element"), s = Symbol.for("react.fragment");
63
+ function o(a, r, c) {
64
+ var u = null;
65
+ if (c !== void 0 && (u = "" + c), r.key !== void 0 && (u = "" + r.key), "key" in r) {
66
+ c = {};
67
+ for (var l in r)
68
+ l !== "key" && (c[l] = r[l]);
69
+ } else c = r;
70
+ return r = c.ref, {
71
71
  $$typeof: t,
72
72
  type: a,
73
- key: f,
73
+ key: u,
74
74
  ref: r !== void 0 ? r : null,
75
- props: s
75
+ props: c
76
76
  };
77
77
  }
78
- return h.Fragment = c, h.jsx = o, h.jsxs = o, h;
78
+ return x.Fragment = s, x.jsx = o, x.jsxs = o, x;
79
79
  }
80
- var k = {};
81
- var U;
82
- function Te() {
83
- return U || (U = 1, process.env.NODE_ENV !== "production" && (function() {
80
+ var A = {};
81
+ var Z;
82
+ function ye() {
83
+ return Z || (Z = 1, process.env.NODE_ENV !== "production" && (function() {
84
84
  function t(e) {
85
85
  if (e == null) return null;
86
86
  if (typeof e == "function")
87
- return e.$$typeof === ue ? null : e.displayName || e.name || null;
87
+ return e.$$typeof === le ? null : e.displayName || e.name || null;
88
88
  if (typeof e == "string") return e;
89
89
  switch (e) {
90
- case S:
90
+ case E:
91
91
  return "Fragment";
92
- case ee:
92
+ case w:
93
93
  return "Profiler";
94
- case g:
94
+ case y:
95
95
  return "StrictMode";
96
- case oe:
96
+ case P:
97
97
  return "Suspense";
98
- case ae:
98
+ case se:
99
99
  return "SuspenseList";
100
- case ce:
100
+ case ue:
101
101
  return "Activity";
102
102
  }
103
103
  if (typeof e == "object")
104
104
  switch (typeof e.tag == "number" && console.error(
105
105
  "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
106
106
  ), e.$$typeof) {
107
- case d:
107
+ case g:
108
108
  return "Portal";
109
- case re:
109
+ case h:
110
110
  return e.displayName || "Context";
111
- case te:
111
+ case v:
112
112
  return (e._context.displayName || "Context") + ".Consumer";
113
- case ne:
113
+ case I:
114
114
  var n = e.render;
115
115
  return e = e.displayName, e || (e = n.displayName || n.name || "", e = e !== "" ? "ForwardRef(" + e + ")" : "ForwardRef"), e;
116
- case se:
116
+ case ce:
117
117
  return n = e.displayName || null, n !== null ? n : t(e.type) || "Memo";
118
- case A:
118
+ case Y:
119
119
  n = e._payload, e = e._init;
120
120
  try {
121
121
  return t(e(n));
@@ -124,12 +124,12 @@ function Te() {
124
124
  }
125
125
  return null;
126
126
  }
127
- function c(e) {
127
+ function s(e) {
128
128
  return "" + e;
129
129
  }
130
130
  function o(e) {
131
131
  try {
132
- c(e);
132
+ s(e);
133
133
  var n = !1;
134
134
  } catch {
135
135
  n = !0;
@@ -141,12 +141,12 @@ function Te() {
141
141
  n,
142
142
  "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
143
143
  m
144
- ), c(e);
144
+ ), s(e);
145
145
  }
146
146
  }
147
147
  function a(e) {
148
- if (e === S) return "<>";
149
- if (typeof e == "object" && e !== null && e.$$typeof === A)
148
+ if (e === E) return "<>";
149
+ if (typeof e == "object" && e !== null && e.$$typeof === Y)
150
150
  return "<...>";
151
151
  try {
152
152
  var n = t(e);
@@ -156,22 +156,22 @@ function Te() {
156
156
  }
157
157
  }
158
158
  function r() {
159
- var e = j.A;
159
+ var e = D.A;
160
160
  return e === null ? null : e.getOwner();
161
161
  }
162
- function s() {
162
+ function c() {
163
163
  return Error("react-stack-top-frame");
164
164
  }
165
- function f(e) {
166
- if (Y.call(e, "key")) {
165
+ function u(e) {
166
+ if (J.call(e, "key")) {
167
167
  var n = Object.getOwnPropertyDescriptor(e, "key").get;
168
168
  if (n && n.isReactWarning) return !1;
169
169
  }
170
170
  return e.key !== void 0;
171
171
  }
172
- function u(e, n) {
172
+ function l(e, n) {
173
173
  function i() {
174
- D || (D = !0, console.error(
174
+ U || (U = !0, console.error(
175
175
  "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",
176
176
  n
177
177
  ));
@@ -181,23 +181,23 @@ function Te() {
181
181
  configurable: !0
182
182
  });
183
183
  }
184
- function p() {
184
+ function _() {
185
185
  var e = t(this.type);
186
- return F[e] || (F[e] = !0, console.error(
186
+ return q[e] || (q[e] = !0, console.error(
187
187
  "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."
188
188
  )), e = this.props.ref, e !== void 0 ? e : null;
189
189
  }
190
- function v(e, n, i, m, w, C) {
190
+ function d(e, n, i, m, O, M) {
191
191
  var b = i.ref;
192
192
  return e = {
193
- $$typeof: _,
193
+ $$typeof: R,
194
194
  type: e,
195
195
  key: n,
196
196
  props: i,
197
197
  _owner: m
198
198
  }, (b !== void 0 ? b : null) !== null ? Object.defineProperty(e, "ref", {
199
199
  enumerable: !1,
200
- get: p
200
+ get: _
201
201
  }) : Object.defineProperty(e, "ref", { enumerable: !1, value: null }), e._store = {}, Object.defineProperty(e._store, "validated", {
202
202
  configurable: !1,
203
203
  enumerable: !1,
@@ -212,33 +212,33 @@ function Te() {
212
212
  configurable: !1,
213
213
  enumerable: !1,
214
214
  writable: !0,
215
- value: w
215
+ value: O
216
216
  }), Object.defineProperty(e, "_debugTask", {
217
217
  configurable: !1,
218
218
  enumerable: !1,
219
219
  writable: !0,
220
- value: C
220
+ value: M
221
221
  }), Object.freeze && (Object.freeze(e.props), Object.freeze(e)), e;
222
222
  }
223
- function l(e, n, i, m, w, C) {
223
+ function f(e, n, i, m, O, M) {
224
224
  var b = n.children;
225
225
  if (b !== void 0)
226
226
  if (m)
227
- if (le(b)) {
227
+ if (ie(b)) {
228
228
  for (m = 0; m < b.length; m++)
229
- R(b[m]);
229
+ p(b[m]);
230
230
  Object.freeze && Object.freeze(b);
231
231
  } else
232
232
  console.error(
233
233
  "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
234
234
  );
235
- else R(b);
236
- if (Y.call(n, "key")) {
235
+ else p(b);
236
+ if (J.call(n, "key")) {
237
237
  b = t(e);
238
- var T = Object.keys(n).filter(function(ie) {
239
- return ie !== "key";
238
+ var k = Object.keys(n).filter(function(fe) {
239
+ return fe !== "key";
240
240
  });
241
- m = 0 < T.length ? "{key: someKey, " + T.join(": ..., ") + ": ...}" : "{key: someKey}", z[b + m] || (T = 0 < T.length ? "{" + T.join(": ..., ") + ": ...}" : "{}", console.error(
241
+ m = 0 < k.length ? "{key: someKey, " + k.join(": ..., ") + ": ...}" : "{key: someKey}", B[b + m] || (k = 0 < k.length ? "{" + k.join(": ..., ") + ": ...}" : "{}", console.error(
242
242
  `A props object containing a "key" prop is being spread into JSX:
243
243
  let props = %s;
244
244
  <%s {...props} />
@@ -247,228 +247,246 @@ React keys must be passed directly to JSX without using spread:
247
247
  <%s key={someKey} {...props} />`,
248
248
  m,
249
249
  b,
250
- T,
250
+ k,
251
251
  b
252
- ), z[b + m] = !0);
252
+ ), B[b + m] = !0);
253
253
  }
254
- if (b = null, i !== void 0 && (o(i), b = "" + i), f(n) && (o(n.key), b = "" + n.key), "key" in n) {
254
+ if (b = null, i !== void 0 && (o(i), b = "" + i), u(n) && (o(n.key), b = "" + n.key), "key" in n) {
255
255
  i = {};
256
- for (var V in n)
257
- V !== "key" && (i[V] = n[V]);
256
+ for (var L in n)
257
+ L !== "key" && (i[L] = n[L]);
258
258
  } else i = n;
259
- return b && u(
259
+ return b && l(
260
260
  i,
261
261
  typeof e == "function" ? e.displayName || e.name || "Unknown" : e
262
- ), v(
262
+ ), d(
263
263
  e,
264
264
  b,
265
265
  i,
266
266
  r(),
267
- w,
268
- C
267
+ O,
268
+ M
269
269
  );
270
270
  }
271
- function R(e) {
272
- y(e) ? e._store && (e._store.validated = 1) : typeof e == "object" && e !== null && e.$$typeof === A && (e._payload.status === "fulfilled" ? y(e._payload.value) && e._payload.value._store && (e._payload.value._store.validated = 1) : e._store && (e._store.validated = 1));
271
+ function p(e) {
272
+ S(e) ? e._store && (e._store.validated = 1) : typeof e == "object" && e !== null && e.$$typeof === Y && (e._payload.status === "fulfilled" ? S(e._payload.value) && e._payload.value._store && (e._payload.value._store.validated = 1) : e._store && (e._store.validated = 1));
273
273
  }
274
- function y(e) {
275
- return typeof e == "object" && e !== null && e.$$typeof === _;
274
+ function S(e) {
275
+ return typeof e == "object" && e !== null && e.$$typeof === R;
276
276
  }
277
- var E = fe, _ = Symbol.for("react.transitional.element"), d = Symbol.for("react.portal"), S = Symbol.for("react.fragment"), g = Symbol.for("react.strict_mode"), ee = Symbol.for("react.profiler"), te = Symbol.for("react.consumer"), re = Symbol.for("react.context"), ne = Symbol.for("react.forward_ref"), oe = Symbol.for("react.suspense"), ae = Symbol.for("react.suspense_list"), se = Symbol.for("react.memo"), A = Symbol.for("react.lazy"), ce = Symbol.for("react.activity"), ue = Symbol.for("react.client.reference"), j = E.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, Y = Object.prototype.hasOwnProperty, le = Array.isArray, N = console.createTask ? console.createTask : function() {
277
+ var T = de, R = Symbol.for("react.transitional.element"), g = Symbol.for("react.portal"), E = Symbol.for("react.fragment"), y = Symbol.for("react.strict_mode"), w = Symbol.for("react.profiler"), v = Symbol.for("react.consumer"), h = Symbol.for("react.context"), I = Symbol.for("react.forward_ref"), P = Symbol.for("react.suspense"), se = Symbol.for("react.suspense_list"), ce = Symbol.for("react.memo"), Y = Symbol.for("react.lazy"), ue = Symbol.for("react.activity"), le = Symbol.for("react.client.reference"), D = T.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, J = Object.prototype.hasOwnProperty, ie = Array.isArray, F = console.createTask ? console.createTask : function() {
278
278
  return null;
279
279
  };
280
- E = {
280
+ T = {
281
281
  react_stack_bottom_frame: function(e) {
282
282
  return e();
283
283
  }
284
284
  };
285
- var D, F = {}, M = E.react_stack_bottom_frame.bind(
286
- E,
287
- s
288
- )(), L = N(a(s)), z = {};
289
- k.Fragment = S, k.jsx = function(e, n, i) {
290
- var m = 1e4 > j.recentlyCreatedOwnerStacks++;
291
- return l(
285
+ var U, q = {}, G = T.react_stack_bottom_frame.bind(
286
+ T,
287
+ c
288
+ )(), X = F(a(c)), B = {};
289
+ A.Fragment = E, A.jsx = function(e, n, i) {
290
+ var m = 1e4 > D.recentlyCreatedOwnerStacks++;
291
+ return f(
292
292
  e,
293
293
  n,
294
294
  i,
295
295
  !1,
296
- m ? Error("react-stack-top-frame") : M,
297
- m ? N(a(e)) : L
296
+ m ? Error("react-stack-top-frame") : G,
297
+ m ? F(a(e)) : X
298
298
  );
299
- }, k.jsxs = function(e, n, i) {
300
- var m = 1e4 > j.recentlyCreatedOwnerStacks++;
301
- return l(
299
+ }, A.jsxs = function(e, n, i) {
300
+ var m = 1e4 > D.recentlyCreatedOwnerStacks++;
301
+ return f(
302
302
  e,
303
303
  n,
304
304
  i,
305
305
  !0,
306
- m ? Error("react-stack-top-frame") : M,
307
- m ? N(a(e)) : L
306
+ m ? Error("react-stack-top-frame") : G,
307
+ m ? F(a(e)) : X
308
308
  );
309
309
  };
310
- })()), k;
310
+ })()), A;
311
311
  }
312
- var q;
313
- function ge() {
314
- return q || (q = 1, process.env.NODE_ENV === "production" ? x.exports = ye() : x.exports = Te()), x.exports;
312
+ var Q;
313
+ function he() {
314
+ return Q || (Q = 1, process.env.NODE_ENV === "production" ? j.exports = Te() : j.exports = ye()), j.exports;
315
315
  }
316
- var he = ge();
317
- const Z = de({
316
+ var ge = he();
317
+ const oe = me({
318
318
  stateVocab: {},
319
319
  setStateVocab: () => {
320
320
  }
321
321
  });
322
322
  function ke() {
323
- return be(Z);
323
+ return be(oe);
324
324
  }
325
325
  const Oe = (t) => {
326
- const { children: c, verbose: o } = t, [a, r] = me({});
327
- return o && Re(a), /* @__PURE__ */ he.jsx(Z.Provider, { value: { stateVocab: a, setStateVocab: r }, children: c });
328
- }, P = (t, c) => (o) => {
326
+ const { children: s, verbose: o } = t, [a, r] = re({});
327
+ return o && Re(a), /* @__PURE__ */ ge.jsx(oe.Provider, { value: { stateVocab: a, setStateVocab: r }, children: s });
328
+ }, N = (t, s) => (o) => {
329
329
  const a = { ...o };
330
- return pe(a, t, c), a;
331
- }, I = (t, c) => Q(t) ?? c, G = (t) => {
332
- const { serialized: c, defaultValue: o, superDefaultValue: a, deserialize: r } = t;
333
- if (c === null) {
334
- const s = I(o, a);
335
- return typeof s > "u" ? void 0 : s;
330
+ return pe(a, t, s), a;
331
+ }, K = (t) => {
332
+ const { serialized: s, defaultValue: o, superDefaultValue: a, deserialize: r } = t;
333
+ if (s === null) {
334
+ const c = $(o) ?? a;
335
+ return typeof c > "u" ? void 0 : c;
336
336
  }
337
- return r(c);
338
- }, we = (t) => typeof t == "function", xe = (t) => typeof t == "function", Q = (t) => xe(t) ? t() : t;
339
- function Ae(t = {}) {
337
+ return r(s);
338
+ }, we = (t) => typeof t == "function", Pe = (t) => typeof t == "function", $ = (t) => Pe(t) ? t() : t, xe = typeof window > "u";
339
+ function Ve(t = {}) {
340
340
  const {
341
- serialize: c = JSON.stringify,
341
+ serialize: s = JSON.stringify,
342
342
  deserialize: o = JSON.parse
343
- } = t, a = t.defaultValue, r = t.bidirectional, s = typeof window > "u" ? void 0 : Q(t.storage);
343
+ } = t, a = t.defaultValue, r = t.bidirectional, c = t.autoSet, u = xe ? void 0 : $(t.storage);
344
344
  return {
345
- [H]: !0,
345
+ [ne]: !0,
346
346
  // marks this object as a leaf in the router tree
347
- [O]: "",
347
+ [W]: !1,
348
+ // placeholder; injected at runtime by injectPaths()
349
+ [C]: "",
348
350
  // placeholder; injected at runtime by injectPaths()
349
- useState(f, u) {
350
- u ??= {};
351
- const p = Se(
352
- u.onSet ?? (() => {
351
+ useState(l) {
352
+ l ??= {};
353
+ const _ = Se(
354
+ l.onSet ?? (() => {
353
355
  }),
354
- u.delayedSet,
356
+ l.delayedSet,
355
357
  []
356
- ), v = ke(), l = this[O], R = $(
358
+ ), d = ke(), f = this[C], p = this[W], [S, T] = re(!p);
359
+ V(() => T(!0), []);
360
+ const R = z(
357
361
  () => {
358
- if (!s)
362
+ if (!S || !u)
359
363
  return;
360
- const _ = s.getItem(l);
361
- return G({
362
- serialized: _,
363
- defaultValue: f,
364
+ const v = u.getItem(f);
365
+ return K({
366
+ defaultValue: l.defaultValue,
367
+ serialized: v,
364
368
  superDefaultValue: a,
365
369
  deserialize: o
366
370
  });
367
371
  },
368
372
  // eslint-disable-next-line react-hooks/exhaustive-deps
369
- [l]
370
- ), y = $(
373
+ [f, S]
374
+ ), g = z(
371
375
  () => Ee(
372
- v.stateVocab,
373
- l,
374
- R ?? I(f, a)
376
+ d.stateVocab,
377
+ f,
378
+ R ?? $(l.defaultValue) ?? a
375
379
  ),
376
380
  // eslint-disable-next-line react-hooks/exhaustive-deps
377
381
  [
378
- v.stateVocab,
382
+ d.stateVocab,
379
383
  R,
380
- l
384
+ f
381
385
  ]
382
386
  );
383
- W(
387
+ V(
384
388
  () => {
385
- !s || typeof R > "u" || v.setStateVocab(P(l, R));
389
+ !u || typeof R > "u" || d.setStateVocab(N(f, R));
386
390
  },
387
391
  // eslint-disable-next-line react-hooks/exhaustive-deps
388
392
  [R]
389
- ), W(() => {
390
- if (!u.bidirectional && !r)
393
+ ), V(() => {
394
+ if (!l.bidirectional && !r)
391
395
  return;
392
- const _ = (d) => {
393
- if (d.key !== l)
396
+ const v = (h) => {
397
+ if (h.key !== f)
394
398
  return;
395
- const S = d.newValue, g = G({
396
- serialized: S,
397
- defaultValue: f,
399
+ const I = h.newValue, P = K({
400
+ defaultValue: l.defaultValue,
398
401
  superDefaultValue: a,
402
+ serialized: I,
399
403
  deserialize: o
400
404
  });
401
- v.setStateVocab(P(l, g)), p(g, E.current), E.current = g;
405
+ d.setStateVocab(N(f, P)), _(P, E.current), E.current = P;
402
406
  };
403
- return window.addEventListener("storage", _), () => window.removeEventListener("storage", _);
407
+ return window.addEventListener("storage", v), () => window.removeEventListener("storage", v);
404
408
  }, [
405
- l,
406
- u.bidirectional,
409
+ f,
410
+ l.bidirectional,
407
411
  r
408
412
  ]);
409
- const E = ve(y);
410
- return [
411
- y,
412
- function(d) {
413
- const S = we(d) ? d(E.current) : d;
414
- v.setStateVocab(P(l, S)), p(S, E.current), s && s.setItem(l, c(S)), E.current = S;
415
- },
416
- function() {
417
- const d = I(f, a);
418
- if (typeof d > "u") {
419
- s?.removeItem(l);
420
- return;
421
- }
422
- v.setStateVocab(P(l, d)), p(d, E.current), E.current = d, s && s.setItem(l, c(d));
413
+ const E = ve(g), y = (v) => {
414
+ const h = we(v) ? v(E.current) : v;
415
+ d.setStateVocab(N(f, h)), _(h, E.current), u && u.setItem(f, s(h)), E.current = h;
416
+ }, w = () => {
417
+ const v = $(l.defaultValue) ?? a;
418
+ if (typeof v > "u") {
419
+ u?.removeItem(f);
420
+ return;
423
421
  }
422
+ d.setStateVocab(N(f, v)), _(v, E.current), E.current = v, u && u.setItem(f, s(v));
423
+ };
424
+ return V(() => {
425
+ (l.autoSet || c) && y(g);
426
+ }, []), [
427
+ g,
428
+ y,
429
+ w
424
430
  ];
425
431
  },
426
432
  /** Returns the fully qualified job name (dot-separated path). */
427
433
  toString() {
428
- return this[O];
434
+ return this[C];
429
435
  }
430
436
  };
431
437
  }
432
- const X = /* @__PURE__ */ new WeakMap(), B = /* @__PURE__ */ new WeakMap();
433
- function K(t, c = "") {
434
- let o = X.get(t);
435
- o || (o = /* @__PURE__ */ new Map(), X.set(t, o));
436
- const a = o.get(c);
437
- if (a)
438
- return a;
439
- const r = new Proxy(t, {
440
- get(s, f) {
441
- const u = s[f], p = c ? `${c}.${String(f)}` : String(f);
442
- if (u && typeof u == "object" && H in u) {
443
- const v = u;
444
- let l = B.get(v);
445
- l || (l = /* @__PURE__ */ new Map(), B.set(v, l));
446
- const R = l.get(p);
447
- if (R)
448
- return R;
449
- const y = Reflect.ownKeys(v).filter(
450
- (d) => typeof v[d] == "function"
451
- ), E = Object.fromEntries(
452
- y.map((d) => [
453
- d,
454
- (...S) => v[d].call(
455
- { ...v, [O]: p },
456
- ...S
438
+ const ee = /* @__PURE__ */ new WeakMap(), te = /* @__PURE__ */ new WeakMap();
439
+ function ae(t, s) {
440
+ s ??= {};
441
+ const {
442
+ path: o = "",
443
+ ssr: a
444
+ } = s;
445
+ let r = ee.get(t);
446
+ r || (r = /* @__PURE__ */ new Map(), ee.set(t, r));
447
+ const c = r.get(o);
448
+ if (c)
449
+ return c;
450
+ const u = new Proxy(t, {
451
+ get(l, _) {
452
+ const d = l[_], f = o ? `${o}.${String(_)}` : String(_);
453
+ if (d && typeof d == "object" && ne in d) {
454
+ const p = d;
455
+ let S = te.get(p);
456
+ S || (S = /* @__PURE__ */ new Map(), te.set(p, S));
457
+ const T = S.get(f);
458
+ if (T)
459
+ return T;
460
+ const R = Reflect.ownKeys(p).filter(
461
+ (y) => typeof p[y] == "function"
462
+ ), g = Object.fromEntries(
463
+ R.map((y) => [
464
+ y,
465
+ (...w) => p[y].call(
466
+ {
467
+ ...p,
468
+ [C]: f,
469
+ [W]: a
470
+ },
471
+ ...w
457
472
  )
458
473
  ])
459
- ), _ = { ...v, ...E };
460
- return l.set(p, _), _;
474
+ ), E = { ...p, ...g };
475
+ return S.set(f, E), E;
461
476
  }
462
- return u && typeof u == "object" ? K(u, p) : u;
477
+ return d && typeof d == "object" ? ae(d, {
478
+ path: f,
479
+ ssr: a
480
+ }) : d;
463
481
  }
464
482
  });
465
- return o.set(c, r), r;
483
+ return r.set(o, u), u;
466
484
  }
467
- function je(t) {
468
- return K(t);
485
+ function je(t, s) {
486
+ return ae(t, s);
469
487
  }
470
488
  export {
471
489
  Oe as StorageProvider,
472
- Ae as defineState,
490
+ Ve as defineState,
473
491
  je as setupStorage
474
492
  };
@@ -1,2 +1,3 @@
1
1
  export declare const STATE_DEFINITION: unique symbol;
2
2
  export declare const STATE_PATH: unique symbol;
3
+ export declare const STATE_SSR_SUPPORT: unique symbol;
@@ -1 +1,3 @@
1
- export declare function setupStorage<T extends object>(nativeRouter: T): T;
1
+ export declare function setupStorage<T extends object>(native: T, options?: Partial<{
2
+ ssr: boolean;
3
+ }>): T;
@@ -1,19 +1,24 @@
1
- import { STATE_DEFINITION, STATE_PATH } from "./constants";
1
+ import { STATE_DEFINITION, STATE_PATH, STATE_SSR_SUPPORT } from "./constants";
2
2
  import type { ValueOrFactory, ValueOrTransformer } from "./types";
3
3
  export declare function defineState<T>(definitionOptions?: {
4
4
  storage?: ValueOrFactory<Storage>;
5
5
  defaultValue?: T;
6
6
  bidirectional?: true;
7
+ autoSet?: true;
7
8
  serialize?: (v: T) => string;
8
9
  deserialize?: (v: string) => T;
9
10
  }): {
10
11
  [STATE_DEFINITION]: boolean;
12
+ [STATE_SSR_SUPPORT]: boolean;
11
13
  [STATE_PATH]: string;
12
14
  useState<D = T>(this: {
13
15
  [STATE_PATH]: string;
14
- }, defaultValue?: ValueOrFactory<D>, options?: {
16
+ [STATE_SSR_SUPPORT]: boolean;
17
+ }, options?: {
18
+ defaultValue?: ValueOrFactory<D>;
15
19
  delayedSet?: number;
16
20
  bidirectional?: true;
21
+ autoSet?: true;
17
22
  onSet?(nextValue: NoInfer<D>, prevValue: NoInfer<D>): void;
18
23
  }): readonly [D, (nextValue: ValueOrTransformer<D>) => void, () => void];
19
24
  /** Returns the fully qualified job name (dot-separated path). */
@@ -3,7 +3,6 @@ import type { ValueOrTransformer, Transformer, ValueOrFactory } from "./types";
3
3
  export declare const embed: <D>(statePath: string, value: D) => (vocab: Vocab<D>) => {
4
4
  [x: string]: D;
5
5
  };
6
- export declare const genDefaultValue: <V>(defaultValue: ValueOrFactory<V>, superDefaltValue: unknown) => V;
7
6
  export declare const genStoredValue: <V>(options: {
8
7
  serialized: string | null;
9
8
  defaultValue: ValueOrFactory<V>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yakocloud/state-vocab",
3
- "version": "2.1.2",
3
+ "version": "2.2.1",
4
4
  "main": "dist/state-vocab.cjs.js",
5
5
  "module": "dist/state-vocab.es.js",
6
6
  "types": "dist/types/index.d.ts",