@yakocloud/state-vocab 3.1.2 → 3.1.3

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
@@ -103,7 +103,7 @@ defineState({
103
103
  })
104
104
  ```
105
105
 
106
- **Minimal API surface.** Two exports: `defineState`, `setupStorage`. No actions, reducers, selectors, or stores to configure.
106
+ **Minimal API surface.** Three exports: `defineState`, `setupStorage`, `VocabStateProvider`. No actions, reducers, selectors, or stores to configure.
107
107
 
108
108
  ## Installation
109
109
 
@@ -115,8 +115,13 @@ npm install @yakocloud/state-vocab react react-dom
115
115
 
116
116
  ## Quick Start
117
117
 
118
+ Wrap your app with `VocabStateProvider` at the root — this initializes an isolated store for the component tree. Then define and use state anywhere inside it.
119
+ Library SSR-requirements:
120
+ - `Per-request store`: A Next.js server can handle multiple requests simultaneously. This means that the store should be created per request and should not be shared across requests.
121
+ - `SSR friendly`: Next.js applications are rendered twice, first on the server and again on the client. Having different outputs on both the client and the server will result in "hydration errors." The store will have to be initialized on the server and then re-initialized on the client with the same data in order to avoid that.
122
+
118
123
  ```tsx
119
- import { setupStorage, defineState } from '@yakocloud/state-vocab'
124
+ import { setupStorage, defineState, VocabStateProvider } from '@yakocloud/state-vocab'
120
125
 
121
126
  type Theme = 'Dark' | 'White' | 'System'
122
127
 
@@ -131,6 +136,14 @@ const storage = setupStorage({
131
136
  },
132
137
  })
133
138
 
139
+ function App() {
140
+ return (
141
+ <VocabStateProvider>
142
+ <Settings />
143
+ </VocabStateProvider>
144
+ )
145
+ }
146
+
134
147
  function Settings() {
135
148
  const [theme, setTheme] = storage.path.to.theme.useState()
136
149
 
@@ -144,6 +157,38 @@ function Settings() {
144
157
  }
145
158
  ```
146
159
 
160
+ ## Setup
161
+
162
+ ### `VocabStateProvider`
163
+
164
+ All components that call `.useState()` must be descendants of `VocabStateProvider`. It creates an isolated `VocabStore` instance for its subtree — multiple providers can coexist in the same app without sharing state.
165
+
166
+ ```tsx
167
+ import { VocabStateProvider } from '@yakocloud/state-vocab'
168
+
169
+ // Wrap your app root
170
+ createRoot(document.getElementById('root')!).render(
171
+ <React.StrictMode>
172
+ <VocabStateProvider>
173
+ <App />
174
+ </VocabStateProvider>
175
+ </React.StrictMode>
176
+ )
177
+ ```
178
+
179
+ You can mount multiple independent providers — each gets its own store:
180
+
181
+ ```tsx
182
+ // Two isolated state trees — state does not bleed between them
183
+ <VocabStateProvider>
184
+ <WidgetA />
185
+ </VocabStateProvider>
186
+
187
+ <VocabStateProvider>
188
+ <WidgetB />
189
+ </VocabStateProvider>
190
+ ```
191
+
147
192
  ## Core Concepts
148
193
 
149
194
  ### `defineState(options?)`
@@ -247,6 +292,8 @@ With `ssr: true`:
247
292
 
248
293
  This guarantees the server and client produce identical markup, and the value from storage is applied without a visible flash.
249
294
 
295
+ Wrap your page or app root with `VocabStateProvider` as usual — it works correctly in both SSR and client environments.
296
+
250
297
  ## `useState` Hook
251
298
 
252
299
  Each state node exposes a `.useState()` method that works like React's built-in `useState` but adds persistence and callbacks.
@@ -325,7 +372,9 @@ const storage = setupStorage({
325
372
  ## Full Example
326
373
 
327
374
  ```tsx
328
- import { setupStorage, defineState } from '@yakocloud/state-vocab'
375
+ import React from 'react'
376
+ import { createRoot } from 'react-dom/client'
377
+ import { setupStorage, defineState, VocabStateProvider } from '@yakocloud/state-vocab'
329
378
 
330
379
  type Theme = 'Dark' | 'White' | 'System'
331
380
 
@@ -409,7 +458,13 @@ function Dashboard() {
409
458
  )
410
459
  }
411
460
 
412
- createRoot(document.getElementById('root')!).render(<Page />)
461
+ createRoot(document.getElementById('root')!).render(
462
+ <React.StrictMode>
463
+ <VocabStateProvider>
464
+ <Page />
465
+ </VocabStateProvider>
466
+ </React.StrictMode>
467
+ )
413
468
  ```
414
469
 
415
470
  ## API Reference
@@ -434,6 +489,16 @@ createRoot(document.getElementById('root')!).render(<Page />)
434
489
 
435
490
  Returns a proxied copy of `tree` with paths injected into all leaf nodes.
436
491
 
492
+ ### `VocabStateProvider`
493
+
494
+ A React context provider that initializes a `VocabStore` for its subtree. Required — all components calling `.useState()` must be descendants of this provider.
495
+
496
+ ```tsx
497
+ <VocabStateProvider>
498
+ <App />
499
+ </VocabStateProvider>
500
+ ```
501
+
437
502
  ### `node.useState(options?)`
438
503
 
439
504
  | Option | Type | Description |
@@ -1,8 +1,8 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const E=require("react");var Y={exports:{}},N={};var te;function be(){if(te)return N;te=1;var t=Symbol.for("react.transitional.element"),o=Symbol.for("react.fragment");function r(l,s,a){var i=null;if(a!==void 0&&(i=""+a),s.key!==void 0&&(i=""+s.key),"key"in s){a={};for(var c in s)c!=="key"&&(a[c]=s[c])}else a=s;return s=a.ref,{$$typeof:t,type:l,key:i,ref:s!==void 0?s:null,props:a}}return N.Fragment=o,N.jsx=r,N.jsxs=r,N}var V={};var re;function me(){return re||(re=1,process.env.NODE_ENV!=="production"&&(function(){function t(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===ie?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case _:return"Fragment";case x:return"Profiler";case O:return"StrictMode";case F:return"Suspense";case u:return"SuspenseList";case w: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 p:return"Portal";case T:return e.displayName||"Context";case k:return(e._context.displayName||"Context")+".Consumer";case C:var n=e.render;return e=e.displayName,e||(e=n.displayName||n.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case y:return n=e.displayName||null,n!==null?n:t(e.type)||"Memo";case A:n=e._payload,e=e._init;try{return t(e(n))}catch{}}return null}function o(e){return""+e}function r(e){try{o(e);var n=!1}catch{n=!0}if(n){n=console;var f=n.error,b=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return f.call(n,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",b),o(e)}}function l(e){if(e===_)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===A)return"<...>";try{var n=t(e);return n?"<"+n+">":"<...>"}catch{return"<...>"}}function s(){var e=z.A;return e===null?null:e.getOwner()}function a(){return Error("react-stack-top-frame")}function i(e){if(X.call(e,"key")){var n=Object.getOwnPropertyDescriptor(e,"key").get;if(n&&n.isReactWarning)return!1}return e.key!==void 0}function c(e,n){function f(){H||(H=!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))}f.isReactWarning=!0,Object.defineProperty(e,"key",{get:f,configurable:!0})}function g(){var e=t(this.type);return Z[e]||(Z[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 R(e,n,f,b,I,W){var m=f.ref;return e={$$typeof:S,type:e,key:n,props:f,_owner:b},(m!==void 0?m:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:g}):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:I}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:W}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function P(e,n,f,b,I,W){var m=n.children;if(m!==void 0)if(b)if(fe(m)){for(b=0;b<m.length;b++)d(m[b]);Object.freeze&&Object.freeze(m)}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 d(m);if(X.call(n,"key")){m=t(e);var j=Object.keys(n).filter(function(de){return de!=="key"});b=0<j.length?"{key: someKey, "+j.join(": ..., ")+": ...}":"{key: someKey}",ee[m+b]||(j=0<j.length?"{"+j.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 E=require("react");var Y={exports:{}},N={};var te;function me(){if(te)return N;te=1;var t=Symbol.for("react.transitional.element"),n=Symbol.for("react.fragment");function r(l,s,a){var i=null;if(a!==void 0&&(i=""+a),s.key!==void 0&&(i=""+s.key),"key"in s){a={};for(var c in s)c!=="key"&&(a[c]=s[c])}else a=s;return s=a.ref,{$$typeof:t,type:l,key:i,ref:s!==void 0?s:null,props:a}}return N.Fragment=n,N.jsx=r,N.jsxs=r,N}var V={};var re;function ve(){return re||(re=1,process.env.NODE_ENV!=="production"&&(function(){function t(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===fe?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case _:return"Fragment";case x:return"Profiler";case O:return"StrictMode";case F:return"Suspense";case u:return"SuspenseList";case w: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 p:return"Portal";case g:return e.displayName||"Context";case k:return(e._context.displayName||"Context")+".Consumer";case C:var o=e.render;return e=e.displayName,e||(e=o.displayName||o.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case y:return o=e.displayName||null,o!==null?o:t(e.type)||"Memo";case A:o=e._payload,e=e._init;try{return t(e(o))}catch{}}return null}function n(e){return""+e}function r(e){try{n(e);var o=!1}catch{o=!0}if(o){o=console;var f=o.error,b=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return f.call(o,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",b),n(e)}}function l(e){if(e===_)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===A)return"<...>";try{var o=t(e);return o?"<"+o+">":"<...>"}catch{return"<...>"}}function s(){var e=z.A;return e===null?null:e.getOwner()}function a(){return Error("react-stack-top-frame")}function i(e){if(X.call(e,"key")){var o=Object.getOwnPropertyDescriptor(e,"key").get;if(o&&o.isReactWarning)return!1}return e.key!==void 0}function c(e,o){function f(){H||(H=!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)",o))}f.isReactWarning=!0,Object.defineProperty(e,"key",{get:f,configurable:!0})}function R(){var e=t(this.type);return Z[e]||(Z[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 T(e,o,f,b,I,W){var m=f.ref;return e={$$typeof:S,type:e,key:o,props:f,_owner:b},(m!==void 0?m:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:R}):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:I}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:W}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function P(e,o,f,b,I,W){var m=o.children;if(m!==void 0)if(b)if(de(m)){for(b=0;b<m.length;b++)d(m[b]);Object.freeze&&Object.freeze(m)}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 d(m);if(X.call(o,"key")){m=t(e);var j=Object.keys(o).filter(function(be){return be!=="key"});b=0<j.length?"{key: someKey, "+j.join(": ..., ")+": ...}":"{key: someKey}",ee[m+b]||(j=0<j.length?"{"+j.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
2
2
  let props = %s;
3
3
  <%s {...props} />
4
4
  React keys must be passed directly to JSX without using spread:
5
5
  let props = %s;
6
- <%s key={someKey} {...props} />`,b,m,j,m),ee[m+b]=!0)}if(m=null,f!==void 0&&(r(f),m=""+f),i(n)&&(r(n.key),m=""+n.key),"key"in n){f={};for(var J in n)J!=="key"&&(f[J]=n[J])}else f=n;return m&&c(f,typeof e=="function"?e.displayName||e.name||"Unknown":e),R(e,m,f,s(),I,W)}function d(e){v(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===A&&(e._payload.status==="fulfilled"?v(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function v(e){return typeof e=="object"&&e!==null&&e.$$typeof===S}var h=E,S=Symbol.for("react.transitional.element"),p=Symbol.for("react.portal"),_=Symbol.for("react.fragment"),O=Symbol.for("react.strict_mode"),x=Symbol.for("react.profiler"),k=Symbol.for("react.consumer"),T=Symbol.for("react.context"),C=Symbol.for("react.forward_ref"),F=Symbol.for("react.suspense"),u=Symbol.for("react.suspense_list"),y=Symbol.for("react.memo"),A=Symbol.for("react.lazy"),w=Symbol.for("react.activity"),ie=Symbol.for("react.client.reference"),z=h.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,X=Object.prototype.hasOwnProperty,fe=Array.isArray,L=console.createTask?console.createTask:function(){return null};h={react_stack_bottom_frame:function(e){return e()}};var H,Z={},Q=h.react_stack_bottom_frame.bind(h,a)(),K=L(l(a)),ee={};V.Fragment=_,V.jsx=function(e,n,f){var b=1e4>z.recentlyCreatedOwnerStacks++;return P(e,n,f,!1,b?Error("react-stack-top-frame"):Q,b?L(l(e)):K)},V.jsxs=function(e,n,f){var b=1e4>z.recentlyCreatedOwnerStacks++;return P(e,n,f,!0,b?Error("react-stack-top-frame"):Q,b?L(l(e)):K)}})()),V}var ne;function ve(){return ne||(ne=1,process.env.NODE_ENV==="production"?Y.exports=be():Y.exports=me()),Y.exports}var Ee=ve();function D(t,o,r){if(!o)return t;const l=o.split(".");let s=t;for(const a of l)if(s!==null&&typeof s=="object"&&a in s)s=s[a];else return r;return s===void 0?r:s}function Se(t,o,r){const l=o.replace(/\[(\d+)\]/g,".$1").split(".");let s=t;for(let a=0;a<l.length-1;a++){const i=l[a],c=l[a+1];(s[i]===void 0||s[i]===null)&&(s[i]=/^\d+$/.test(c)?[]:{}),s=s[i]}return s[l[l.length-1]]=r,t}function pe(t,o=0){let r;return function(...l){r!==void 0&&clearTimeout(r),r=setTimeout(()=>{r=void 0,t.apply(this,l)},o)}}function he(t,o,r=[]){return E.useMemo(()=>pe(t,o),r)}function oe(t){const o=JSON.stringify(t,null,2).split(`
7
- `),r=[],l=[];for(const s of o){const a=s.match(/^(\s*)"([^"]+)"(\s*:\s*)(.+)$/);if(a){const[,i,c,g,R]=a;r.push(`${i}%c"${c}"%c${g}%c${R}`),l.push("color: #9cdcfe; font-weight: bold","color: #cccccc","color: #ce9178")}else r.push(`%c${s}`),l.push("color: #cccccc")}console.log(r.join(`
8
- `),...l,t)}const se=t=>typeof t=="function",_e=t=>typeof t=="function",$=t=>typeof t<"u",U=t=>_e(t)?t():t;class ye{#e;#t;constructor(){this.uid=Math.random().toString(36).slice(2),this.#e={},this.#t=new Set}subscribe(o){return this.#t.add(o),()=>this.#t.delete(o)}getClientSnapshot(){return this.#e}getServerSnapshot(){return this.#e}get(o){return D(this.#e,o)}set(o,r){const l=D(this.#e,o),s=se(r)?r(l):r,a={...this.#e};Se(a,o,s),this.#e=a,this.#t.forEach(i=>i())}}const ae=E.createContext({});function Re(){return E.useContext(ae)}function Te({children:t}){const o=E.useMemo(()=>new ye,[]);return Ee.jsx(ae.Provider,{value:o,children:t})}const ce=Symbol("state-def"),M=Symbol("state-path"),q=Symbol("state-verbose"),G=Symbol("state-verbose-path"),B=Symbol("state-ssr"),ue=typeof window>"u",ge=ue?E.useEffect:E.useLayoutEffect;function ke(t={}){return{[ce]:!0,[M]:"",[q]:!1,[G]:"",[B]:!1,useState(o){const r=ue?void 0:U(t.storage),l=U(t.defaultValue),s=t.bidirectional;o??={};const a=U(o.defaultValue)??l,i=o.bidirectional??s,c=this[M],g=this[q],R=this[G],P=this[B],d=Re(),v=t.serialize??JSON.stringify,h=t.deserialize??JSON.parse,S=(u,y,A)=>{const w=y.getItem(u);w===null?$(A)&&y.setItem(u,v(A)):d.set(u,h(w))},p=he(o.onSet??(()=>{}),o.delayedSet,[]),_=E.useRef(void 0),O=E.useRef(!1);if(!O.current){O.current=!0;let u=d.get(c);$(u)||(u=a,$(u)&&d.set(c,u)),!P&&r&&S(c,r,u)}const x=E.useSyncExternalStore(d.subscribe.bind(d),d.getClientSnapshot.bind(d),d.getServerSnapshot.bind(d));if(g)if(R){const u=D(x,R);u&&oe(u)}else oe(x);const k=D(x,c,a);_.current=k,ge(()=>{!P||!r||S(c,r,k)},[]);const T=E.useEffectEvent(u=>{if(u.key!==c)return;const y=u.newValue,w=(y===null?null:h(y))??a;$(w)&&(d.set(c,w),p(w,_.current))});E.useEffect(()=>{if(i)return window.addEventListener("storage",T),()=>window.removeEventListener("storage",T)},[i]);const C=E.useCallback(u=>{const y=se(u)?u(_.current):u;d.set(c,y),p(y,_.current),r&&r.setItem(c,v(y))},[c,r,p]),F=E.useCallback(()=>{const u=a;if(!$(u)){r?.removeItem(c);return}d.set(c,u),p(u,_.current),r&&r.setItem(c,v(u))},[c,a,r,p]);return[k,C,F]},toString(){return this[M]}}}function le(t,o){const{path:r="",verbose:l,verbosePath:s,ssr:a,cache:i}=o;let c=i.proxy.get(t);c||(c=new Map,i.proxy.set(t,c));const g=c.get(r);if(g)return g;const R=new Proxy(t,{get(P,d){const v=P[d],h=r?`${r}.${String(d)}`:String(d);if(v&&typeof v=="object"&&ce in v){const S=v;let p=i.leaf.get(S);p||(p=new Map,i.leaf.set(S,p));const _=p.get(h);if(_)return _;const O=Reflect.ownKeys(S).filter(T=>typeof S[T]=="function"),x=Object.fromEntries(O.map(T=>[T,(...C)=>S[T].call({...S,[M]:h,[q]:l,[G]:s,[B]:a},...C)])),k={...S,...x};return p.set(h,k),k}return v&&typeof v=="object"?le(v,{...o,path:h}):v}});return c.set(r,R),R}function we(t,o){return le(t,{...o,verbosePath:o?.verbosePath??"",cache:{proxy:new WeakMap,leaf:new WeakMap}})}exports.VocabStateProvider=Te;exports.defineState=ke;exports.setupStorage=we;
6
+ <%s key={someKey} {...props} />`,b,m,j,m),ee[m+b]=!0)}if(m=null,f!==void 0&&(r(f),m=""+f),i(o)&&(r(o.key),m=""+o.key),"key"in o){f={};for(var J in o)J!=="key"&&(f[J]=o[J])}else f=o;return m&&c(f,typeof e=="function"?e.displayName||e.name||"Unknown":e),T(e,m,f,s(),I,W)}function d(e){v(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===A&&(e._payload.status==="fulfilled"?v(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function v(e){return typeof e=="object"&&e!==null&&e.$$typeof===S}var h=E,S=Symbol.for("react.transitional.element"),p=Symbol.for("react.portal"),_=Symbol.for("react.fragment"),O=Symbol.for("react.strict_mode"),x=Symbol.for("react.profiler"),k=Symbol.for("react.consumer"),g=Symbol.for("react.context"),C=Symbol.for("react.forward_ref"),F=Symbol.for("react.suspense"),u=Symbol.for("react.suspense_list"),y=Symbol.for("react.memo"),A=Symbol.for("react.lazy"),w=Symbol.for("react.activity"),fe=Symbol.for("react.client.reference"),z=h.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,X=Object.prototype.hasOwnProperty,de=Array.isArray,L=console.createTask?console.createTask:function(){return null};h={react_stack_bottom_frame:function(e){return e()}};var H,Z={},Q=h.react_stack_bottom_frame.bind(h,a)(),K=L(l(a)),ee={};V.Fragment=_,V.jsx=function(e,o,f){var b=1e4>z.recentlyCreatedOwnerStacks++;return P(e,o,f,!1,b?Error("react-stack-top-frame"):Q,b?L(l(e)):K)},V.jsxs=function(e,o,f){var b=1e4>z.recentlyCreatedOwnerStacks++;return P(e,o,f,!0,b?Error("react-stack-top-frame"):Q,b?L(l(e)):K)}})()),V}var ne;function Ee(){return ne||(ne=1,process.env.NODE_ENV==="production"?Y.exports=me():Y.exports=ve()),Y.exports}var Se=Ee();function D(t,n,r){if(!n)return t;const l=n.split(".");let s=t;for(const a of l)if(s!==null&&typeof s=="object"&&a in s)s=s[a];else return r;return s===void 0?r:s}function pe(t,n,r){const l=n.replace(/\[(\d+)\]/g,".$1").split(".");let s=t;for(let a=0;a<l.length-1;a++){const i=l[a],c=l[a+1];(s[i]===void 0||s[i]===null)&&(s[i]=/^\d+$/.test(c)?[]:{}),s=s[i]}return s[l[l.length-1]]=r,t}function he(t,n=0){let r;return function(...l){r!==void 0&&clearTimeout(r),r=setTimeout(()=>{r=void 0,t.apply(this,l)},n)}}function _e(t,n,r=[]){return E.useMemo(()=>he(t,n),r)}function oe(t){const n=JSON.stringify(t,null,2).split(`
7
+ `),r=[],l=[];for(const s of n){const a=s.match(/^(\s*)"([^"]+)"(\s*:\s*)(.+)$/);if(a){const[,i,c,R,T]=a;r.push(`${i}%c"${c}"%c${R}%c${T}`),l.push("color: #9cdcfe; font-weight: bold","color: #cccccc","color: #ce9178")}else r.push(`%c${s}`),l.push("color: #cccccc")}console.log(r.join(`
8
+ `),...l,t)}const se=t=>typeof t=="function",ye=t=>typeof t=="function",$=t=>typeof t<"u",U=t=>ye(t)?t():t;class Re{#e;#t;constructor(){this.uid=Math.random().toString(36).slice(2),this.#e={},this.#t=new Set}subscribe(n){return this.#t.add(n),()=>this.#t.delete(n)}getClientSnapshot(){return this.#e}getServerSnapshot(){return this.#e}get(n){return D(this.#e,n)}set(n,r){const l=D(this.#e,n),s=se(r)?r(l):r,a={...this.#e};pe(a,n,s),this.#e=a,this.#t.forEach(i=>i())}}const ae=E.createContext({});function ce(t={}){const n=E.useContext(ae);return t.verbose&&console.log(`[${ce.name}]: `,n.uid),n}function Te({children:t}){const n=E.useMemo(()=>new Re,[]);return Se.jsx(ae.Provider,{value:n,children:t})}const ue=Symbol("state-def"),M=Symbol("state-path"),q=Symbol("state-verbose"),G=Symbol("state-verbose-path"),B=Symbol("state-ssr"),le=typeof window>"u",ge=le?E.useEffect:E.useLayoutEffect;function ke(t={}){return{[ue]:!0,[M]:"",[q]:!1,[G]:"",[B]:!1,useState(n){const r=le?void 0:U(t.storage),l=U(t.defaultValue),s=t.bidirectional;n??={};const a=U(n.defaultValue)??l,i=n.bidirectional??s,c=this[M],R=this[q],T=this[G],P=this[B],d=ce({verbose:R}),v=t.serialize??JSON.stringify,h=t.deserialize??JSON.parse,S=(u,y,A)=>{const w=y.getItem(u);w===null?$(A)&&y.setItem(u,v(A)):d.set(u,h(w))},p=_e(n.onSet??(()=>{}),n.delayedSet,[]),_=E.useRef(void 0),O=E.useRef(!1);if(!O.current){O.current=!0;let u=d.get(c);$(u)||(u=a,$(u)&&d.set(c,u)),!P&&r&&S(c,r,u)}const x=E.useSyncExternalStore(d.subscribe.bind(d),d.getClientSnapshot.bind(d),d.getServerSnapshot.bind(d));if(R)if(T){const u=D(x,T);u&&oe(u)}else oe(x);const k=D(x,c,a);_.current=k,ge(()=>{!P||!r||S(c,r,k)},[]);const g=E.useEffectEvent(u=>{if(u.key!==c)return;const y=u.newValue,w=(y===null?null:h(y))??a;$(w)&&(d.set(c,w),p(w,_.current))});E.useEffect(()=>{if(i)return window.addEventListener("storage",g),()=>window.removeEventListener("storage",g)},[i]);const C=E.useCallback(u=>{const y=se(u)?u(_.current):u;d.set(c,y),p(y,_.current),r&&r.setItem(c,v(y))},[c,r,p]),F=E.useCallback(()=>{const u=a;if(!$(u)){r?.removeItem(c);return}d.set(c,u),p(u,_.current),r&&r.setItem(c,v(u))},[c,a,r,p]);return[k,C,F]},toString(){return this[M]}}}function ie(t,n){const{path:r="",verbose:l,verbosePath:s,ssr:a,cache:i}=n;let c=i.proxy.get(t);c||(c=new Map,i.proxy.set(t,c));const R=c.get(r);if(R)return R;const T=new Proxy(t,{get(P,d){const v=P[d],h=r?`${r}.${String(d)}`:String(d);if(v&&typeof v=="object"&&ue in v){const S=v;let p=i.leaf.get(S);p||(p=new Map,i.leaf.set(S,p));const _=p.get(h);if(_)return _;const O=Reflect.ownKeys(S).filter(g=>typeof S[g]=="function"),x=Object.fromEntries(O.map(g=>[g,(...C)=>S[g].call({...S,[M]:h,[q]:l,[G]:s,[B]:a},...C)])),k={...S,...x};return p.set(h,k),k}return v&&typeof v=="object"?ie(v,{...n,path:h}):v}});return c.set(r,T),T}function we(t,n){return ie(t,{...n,verbosePath:n?.verbosePath??"",cache:{proxy:new WeakMap,leaf:new WeakMap}})}exports.VocabStateProvider=Te;exports.defineState=ke;exports.setupStorage=we;
@@ -1,10 +1,10 @@
1
- import Ee, { useMemo as ae, createContext as pe, useContext as Se, useRef as ee, useSyncExternalStore as he, useEffect as ce, useLayoutEffect as _e, useEffectEvent as ye, useCallback as te } from "react";
1
+ import pe, { useMemo as ae, createContext as Se, useContext as he, useRef as ee, useSyncExternalStore as _e, useEffect as ce, useLayoutEffect as ye, useEffectEvent as Re, useCallback as te } from "react";
2
2
  var I = { exports: {} }, C = {};
3
3
  var re;
4
- function Re() {
4
+ function Te() {
5
5
  if (re) return C;
6
6
  re = 1;
7
- var t = Symbol.for("react.transitional.element"), o = Symbol.for("react.fragment");
7
+ var t = Symbol.for("react.transitional.element"), n = Symbol.for("react.fragment");
8
8
  function r(l, s, a) {
9
9
  var i = null;
10
10
  if (a !== void 0 && (i = "" + a), s.key !== void 0 && (i = "" + s.key), "key" in s) {
@@ -20,21 +20,21 @@ function Re() {
20
20
  props: a
21
21
  };
22
22
  }
23
- return C.Fragment = o, C.jsx = r, C.jsxs = r, C;
23
+ return C.Fragment = n, C.jsx = r, C.jsxs = r, C;
24
24
  }
25
25
  var N = {};
26
26
  var ne;
27
- function Te() {
27
+ function ge() {
28
28
  return ne || (ne = 1, process.env.NODE_ENV !== "production" && (function() {
29
29
  function t(e) {
30
30
  if (e == null) return null;
31
31
  if (typeof e == "function")
32
- return e.$$typeof === me ? null : e.displayName || e.name || null;
32
+ return e.$$typeof === be ? null : e.displayName || e.name || null;
33
33
  if (typeof e == "string") return e;
34
34
  switch (e) {
35
35
  case h:
36
36
  return "Fragment";
37
- case P:
37
+ case x:
38
38
  return "Profiler";
39
39
  case A:
40
40
  return "StrictMode";
@@ -51,51 +51,51 @@ function Te() {
51
51
  ), e.$$typeof) {
52
52
  case p:
53
53
  return "Portal";
54
- case R:
54
+ case T:
55
55
  return e.displayName || "Context";
56
56
  case g:
57
57
  return (e._context.displayName || "Context") + ".Consumer";
58
58
  case j:
59
- var n = e.render;
60
- return e = e.displayName, e || (e = n.displayName || n.name || "", e = e !== "" ? "ForwardRef(" + e + ")" : "ForwardRef"), e;
59
+ var o = e.render;
60
+ return e = e.displayName, e || (e = o.displayName || o.name || "", e = e !== "" ? "ForwardRef(" + e + ")" : "ForwardRef"), e;
61
61
  case _:
62
- return n = e.displayName || null, n !== null ? n : t(e.type) || "Memo";
63
- case x:
64
- n = e._payload, e = e._init;
62
+ return o = e.displayName || null, o !== null ? o : t(e.type) || "Memo";
63
+ case P:
64
+ o = e._payload, e = e._init;
65
65
  try {
66
- return t(e(n));
66
+ return t(e(o));
67
67
  } catch {
68
68
  }
69
69
  }
70
70
  return null;
71
71
  }
72
- function o(e) {
72
+ function n(e) {
73
73
  return "" + e;
74
74
  }
75
75
  function r(e) {
76
76
  try {
77
- o(e);
78
- var n = !1;
77
+ n(e);
78
+ var o = !1;
79
79
  } catch {
80
- n = !0;
80
+ o = !0;
81
81
  }
82
- if (n) {
83
- n = console;
84
- var f = n.error, m = typeof Symbol == "function" && Symbol.toStringTag && e[Symbol.toStringTag] || e.constructor.name || "Object";
82
+ if (o) {
83
+ o = console;
84
+ var f = o.error, m = typeof Symbol == "function" && Symbol.toStringTag && e[Symbol.toStringTag] || e.constructor.name || "Object";
85
85
  return f.call(
86
- n,
86
+ o,
87
87
  "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
88
88
  m
89
- ), o(e);
89
+ ), n(e);
90
90
  }
91
91
  }
92
92
  function l(e) {
93
93
  if (e === h) return "<>";
94
- if (typeof e == "object" && e !== null && e.$$typeof === x)
94
+ if (typeof e == "object" && e !== null && e.$$typeof === P)
95
95
  return "<...>";
96
96
  try {
97
- var n = t(e);
98
- return n ? "<" + n + ">" : "<...>";
97
+ var o = t(e);
98
+ return o ? "<" + o + ">" : "<...>";
99
99
  } catch {
100
100
  return "<...>";
101
101
  }
@@ -109,16 +109,16 @@ function Te() {
109
109
  }
110
110
  function i(e) {
111
111
  if (B.call(e, "key")) {
112
- var n = Object.getOwnPropertyDescriptor(e, "key").get;
113
- if (n && n.isReactWarning) return !1;
112
+ var o = Object.getOwnPropertyDescriptor(e, "key").get;
113
+ if (o && o.isReactWarning) return !1;
114
114
  }
115
115
  return e.key !== void 0;
116
116
  }
117
- function c(e, n) {
117
+ function c(e, o) {
118
118
  function f() {
119
119
  X || (X = !0, console.error(
120
120
  "%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)",
121
- n
121
+ o
122
122
  ));
123
123
  }
124
124
  f.isReactWarning = !0, Object.defineProperty(e, "key", {
@@ -126,23 +126,23 @@ function Te() {
126
126
  configurable: !0
127
127
  });
128
128
  }
129
- function T() {
129
+ function y() {
130
130
  var e = t(this.type);
131
131
  return H[e] || (H[e] = !0, console.error(
132
132
  "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."
133
133
  )), e = this.props.ref, e !== void 0 ? e : null;
134
134
  }
135
- function y(e, n, f, m, $, L) {
135
+ function R(e, o, f, m, $, L) {
136
136
  var b = f.ref;
137
137
  return e = {
138
138
  $$typeof: E,
139
139
  type: e,
140
- key: n,
140
+ key: o,
141
141
  props: f,
142
142
  _owner: m
143
143
  }, (b !== void 0 ? b : null) !== null ? Object.defineProperty(e, "ref", {
144
144
  enumerable: !1,
145
- get: T
145
+ get: y
146
146
  }) : Object.defineProperty(e, "ref", { enumerable: !1, value: null }), e._store = {}, Object.defineProperty(e._store, "validated", {
147
147
  configurable: !1,
148
148
  enumerable: !1,
@@ -165,11 +165,11 @@ function Te() {
165
165
  value: L
166
166
  }), Object.freeze && (Object.freeze(e.props), Object.freeze(e)), e;
167
167
  }
168
- function w(e, n, f, m, $, L) {
169
- var b = n.children;
168
+ function w(e, o, f, m, $, L) {
169
+ var b = o.children;
170
170
  if (b !== void 0)
171
171
  if (m)
172
- if (be(b)) {
172
+ if (ve(b)) {
173
173
  for (m = 0; m < b.length; m++)
174
174
  d(b[m]);
175
175
  Object.freeze && Object.freeze(b);
@@ -178,10 +178,10 @@ function Te() {
178
178
  "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
179
179
  );
180
180
  else d(b);
181
- if (B.call(n, "key")) {
181
+ if (B.call(o, "key")) {
182
182
  b = t(e);
183
- var O = Object.keys(n).filter(function(ve) {
184
- return ve !== "key";
183
+ var O = Object.keys(o).filter(function(Ee) {
184
+ return Ee !== "key";
185
185
  });
186
186
  m = 0 < O.length ? "{key: someKey, " + O.join(": ..., ") + ": ...}" : "{key: someKey}", K[b + m] || (O = 0 < O.length ? "{" + O.join(": ..., ") + ": ...}" : "{}", console.error(
187
187
  `A props object containing a "key" prop is being spread into JSX:
@@ -196,15 +196,15 @@ React keys must be passed directly to JSX without using spread:
196
196
  b
197
197
  ), K[b + m] = !0);
198
198
  }
199
- if (b = null, f !== void 0 && (r(f), b = "" + f), i(n) && (r(n.key), b = "" + n.key), "key" in n) {
199
+ if (b = null, f !== void 0 && (r(f), b = "" + f), i(o) && (r(o.key), b = "" + o.key), "key" in o) {
200
200
  f = {};
201
- for (var W in n)
202
- W !== "key" && (f[W] = n[W]);
203
- } else f = n;
201
+ for (var W in o)
202
+ W !== "key" && (f[W] = o[W]);
203
+ } else f = o;
204
204
  return b && c(
205
205
  f,
206
206
  typeof e == "function" ? e.displayName || e.name || "Unknown" : e
207
- ), y(
207
+ ), R(
208
208
  e,
209
209
  b,
210
210
  f,
@@ -214,12 +214,12 @@ React keys must be passed directly to JSX without using spread:
214
214
  );
215
215
  }
216
216
  function d(e) {
217
- v(e) ? e._store && (e._store.validated = 1) : typeof e == "object" && e !== null && e.$$typeof === x && (e._payload.status === "fulfilled" ? v(e._payload.value) && e._payload.value._store && (e._payload.value._store.validated = 1) : e._store && (e._store.validated = 1));
217
+ v(e) ? e._store && (e._store.validated = 1) : typeof e == "object" && e !== null && e.$$typeof === P && (e._payload.status === "fulfilled" ? v(e._payload.value) && e._payload.value._store && (e._payload.value._store.validated = 1) : e._store && (e._store.validated = 1));
218
218
  }
219
219
  function v(e) {
220
220
  return typeof e == "object" && e !== null && e.$$typeof === E;
221
221
  }
222
- var S = Ee, E = Symbol.for("react.transitional.element"), p = Symbol.for("react.portal"), h = Symbol.for("react.fragment"), A = Symbol.for("react.strict_mode"), P = Symbol.for("react.profiler"), g = Symbol.for("react.consumer"), R = Symbol.for("react.context"), j = Symbol.for("react.forward_ref"), F = Symbol.for("react.suspense"), u = Symbol.for("react.suspense_list"), _ = Symbol.for("react.memo"), x = Symbol.for("react.lazy"), k = Symbol.for("react.activity"), me = Symbol.for("react.client.reference"), M = S.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, B = Object.prototype.hasOwnProperty, be = Array.isArray, z = console.createTask ? console.createTask : function() {
222
+ var S = pe, E = Symbol.for("react.transitional.element"), p = Symbol.for("react.portal"), h = Symbol.for("react.fragment"), A = Symbol.for("react.strict_mode"), x = Symbol.for("react.profiler"), g = Symbol.for("react.consumer"), T = Symbol.for("react.context"), j = Symbol.for("react.forward_ref"), F = Symbol.for("react.suspense"), u = Symbol.for("react.suspense_list"), _ = Symbol.for("react.memo"), P = Symbol.for("react.lazy"), k = Symbol.for("react.activity"), be = Symbol.for("react.client.reference"), M = S.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, B = Object.prototype.hasOwnProperty, ve = Array.isArray, z = console.createTask ? console.createTask : function() {
223
223
  return null;
224
224
  };
225
225
  S = {
@@ -231,21 +231,21 @@ React keys must be passed directly to JSX without using spread:
231
231
  S,
232
232
  a
233
233
  )(), Q = z(l(a)), K = {};
234
- N.Fragment = h, N.jsx = function(e, n, f) {
234
+ N.Fragment = h, N.jsx = function(e, o, f) {
235
235
  var m = 1e4 > M.recentlyCreatedOwnerStacks++;
236
236
  return w(
237
237
  e,
238
- n,
238
+ o,
239
239
  f,
240
240
  !1,
241
241
  m ? Error("react-stack-top-frame") : Z,
242
242
  m ? z(l(e)) : Q
243
243
  );
244
- }, N.jsxs = function(e, n, f) {
244
+ }, N.jsxs = function(e, o, f) {
245
245
  var m = 1e4 > M.recentlyCreatedOwnerStacks++;
246
246
  return w(
247
247
  e,
248
- n,
248
+ o,
249
249
  f,
250
250
  !0,
251
251
  m ? Error("react-stack-top-frame") : Z,
@@ -255,14 +255,14 @@ React keys must be passed directly to JSX without using spread:
255
255
  })()), N;
256
256
  }
257
257
  var oe;
258
- function ge() {
259
- return oe || (oe = 1, process.env.NODE_ENV === "production" ? I.exports = Re() : I.exports = Te()), I.exports;
258
+ function ke() {
259
+ return oe || (oe = 1, process.env.NODE_ENV === "production" ? I.exports = Te() : I.exports = ge()), I.exports;
260
260
  }
261
- var ke = ge();
262
- function D(t, o, r) {
263
- if (!o)
261
+ var we = ke();
262
+ function D(t, n, r) {
263
+ if (!n)
264
264
  return t;
265
- const l = o.split(".");
265
+ const l = n.split(".");
266
266
  let s = t;
267
267
  for (const a of l)
268
268
  if (s !== null && typeof s == "object" && a in s)
@@ -271,8 +271,8 @@ function D(t, o, r) {
271
271
  return r;
272
272
  return s === void 0 ? r : s;
273
273
  }
274
- function we(t, o, r) {
275
- const l = o.replace(/\[(\d+)\]/g, ".$1").split(".");
274
+ function xe(t, n, r) {
275
+ const l = n.replace(/\[(\d+)\]/g, ".$1").split(".");
276
276
  let s = t;
277
277
  for (let a = 0; a < l.length - 1; a++) {
278
278
  const i = l[a], c = l[a + 1];
@@ -280,29 +280,29 @@ function we(t, o, r) {
280
280
  }
281
281
  return s[l[l.length - 1]] = r, t;
282
282
  }
283
- function Pe(t, o = 0) {
283
+ function Pe(t, n = 0) {
284
284
  let r;
285
285
  return function(...l) {
286
286
  r !== void 0 && clearTimeout(r), r = setTimeout(() => {
287
287
  r = void 0, t.apply(this, l);
288
- }, o);
288
+ }, n);
289
289
  };
290
290
  }
291
- function xe(t, o, r = []) {
291
+ function Ae(t, n, r = []) {
292
292
  return ae(
293
- () => Pe(t, o),
293
+ () => Pe(t, n),
294
294
  // eslint-disable-next-line react-hooks/exhaustive-deps
295
295
  r
296
296
  );
297
297
  }
298
298
  function se(t) {
299
- const o = JSON.stringify(t, null, 2).split(`
299
+ const n = JSON.stringify(t, null, 2).split(`
300
300
  `), r = [], l = [];
301
- for (const s of o) {
301
+ for (const s of n) {
302
302
  const a = s.match(/^(\s*)"([^"]+)"(\s*:\s*)(.+)$/);
303
303
  if (a) {
304
- const [, i, c, T, y] = a;
305
- r.push(`${i}%c"${c}"%c${T}%c${y}`), l.push(
304
+ const [, i, c, y, R] = a;
305
+ r.push(`${i}%c"${c}"%c${y}%c${R}`), l.push(
306
306
  "color: #9cdcfe; font-weight: bold",
307
307
  "color: #cccccc",
308
308
  "color: #ce9178"
@@ -313,15 +313,15 @@ function se(t) {
313
313
  console.log(r.join(`
314
314
  `), ...l, t);
315
315
  }
316
- const ue = (t) => typeof t == "function", Ae = (t) => typeof t == "function", V = (t) => typeof t < "u", J = (t) => Ae(t) ? t() : t;
317
- class Oe {
316
+ const ue = (t) => typeof t == "function", Oe = (t) => typeof t == "function", V = (t) => typeof t < "u", J = (t) => Oe(t) ? t() : t;
317
+ class je {
318
318
  #e;
319
319
  #t;
320
320
  constructor() {
321
321
  this.uid = Math.random().toString(36).slice(2), this.#e = {}, this.#t = /* @__PURE__ */ new Set();
322
322
  }
323
- subscribe(o) {
324
- return this.#t.add(o), () => this.#t.delete(o);
323
+ subscribe(n) {
324
+ return this.#t.add(n), () => this.#t.delete(n);
325
325
  }
326
326
  getClientSnapshot() {
327
327
  return this.#e;
@@ -329,26 +329,27 @@ class Oe {
329
329
  getServerSnapshot() {
330
330
  return this.#e;
331
331
  }
332
- get(o) {
333
- return D(this.#e, o);
332
+ get(n) {
333
+ return D(this.#e, n);
334
334
  }
335
- set(o, r) {
336
- const l = D(this.#e, o), s = ue(r) ? r(l) : r, a = { ...this.#e };
337
- we(a, o, s), this.#e = a, this.#t.forEach((i) => i());
335
+ set(n, r) {
336
+ const l = D(this.#e, n), s = ue(r) ? r(l) : r, a = { ...this.#e };
337
+ xe(a, n, s), this.#e = a, this.#t.forEach((i) => i());
338
338
  }
339
339
  }
340
- const le = pe({});
341
- function je() {
342
- return Se(le);
340
+ const le = Se({});
341
+ function ie(t = {}) {
342
+ const n = he(le);
343
+ return t.verbose && console.log(`[${ie.name}]: `, n.uid), n;
343
344
  }
344
345
  function Ve({ children: t }) {
345
- const o = ae(() => new Oe(), []);
346
- return /* @__PURE__ */ ke.jsx(le.Provider, { value: o, children: t });
346
+ const n = ae(() => new je(), []);
347
+ return /* @__PURE__ */ we.jsx(le.Provider, { value: n, children: t });
347
348
  }
348
- const ie = Symbol("state-def"), Y = Symbol("state-path"), U = Symbol("state-verbose"), q = Symbol("state-verbose-path"), G = Symbol("state-ssr"), fe = typeof window > "u", Ce = fe ? ce : _e;
349
+ const fe = Symbol("state-def"), Y = Symbol("state-path"), U = Symbol("state-verbose"), q = Symbol("state-verbose-path"), G = Symbol("state-ssr"), de = typeof window > "u", Ce = de ? ce : ye;
349
350
  function $e(t = {}) {
350
351
  return {
351
- [ie]: !0,
352
+ [fe]: !0,
352
353
  // marks this object as a leaf in the router tree
353
354
  [Y]: "",
354
355
  // placeholder; injected at runtime by injectPaths()
@@ -358,16 +359,16 @@ function $e(t = {}) {
358
359
  // placeholder
359
360
  [G]: !1,
360
361
  // placeholder
361
- useState(o) {
362
- const r = fe ? void 0 : J(t.storage), l = J(t.defaultValue), s = t.bidirectional;
363
- o ??= {};
364
- const a = J(o.defaultValue) ?? l, i = o.bidirectional ?? s, c = this[Y], T = this[U], y = this[q], w = this[G], d = je(), v = t.serialize ?? JSON.stringify, S = t.deserialize ?? JSON.parse, E = (u, _, x) => {
362
+ useState(n) {
363
+ const r = de ? void 0 : J(t.storage), l = J(t.defaultValue), s = t.bidirectional;
364
+ n ??= {};
365
+ const a = J(n.defaultValue) ?? l, i = n.bidirectional ?? s, c = this[Y], y = this[U], R = this[q], w = this[G], d = ie({ verbose: y }), v = t.serialize ?? JSON.stringify, S = t.deserialize ?? JSON.parse, E = (u, _, P) => {
365
366
  const k = _.getItem(u);
366
- k === null ? V(x) && _.setItem(u, v(x)) : d.set(u, S(k));
367
- }, p = xe(
368
- o.onSet ?? (() => {
367
+ k === null ? V(P) && _.setItem(u, v(P)) : d.set(u, S(k));
368
+ }, p = Ae(
369
+ n.onSet ?? (() => {
369
370
  }),
370
- o.delayedSet,
371
+ n.delayedSet,
371
372
  []
372
373
  ), h = ee(void 0), A = ee(!1);
373
374
  if (!A.current) {
@@ -375,22 +376,22 @@ function $e(t = {}) {
375
376
  let u = d.get(c);
376
377
  V(u) || (u = a, V(u) && d.set(c, u)), !w && r && E(c, r, u);
377
378
  }
378
- const P = he(
379
+ const x = _e(
379
380
  d.subscribe.bind(d),
380
381
  d.getClientSnapshot.bind(d),
381
382
  d.getServerSnapshot.bind(d)
382
383
  );
383
- if (T)
384
- if (y) {
385
- const u = D(P, y);
384
+ if (y)
385
+ if (R) {
386
+ const u = D(x, R);
386
387
  u && se(u);
387
388
  } else
388
- se(P);
389
- const g = D(P, c, a);
389
+ se(x);
390
+ const g = D(x, c, a);
390
391
  h.current = g, Ce(() => {
391
392
  !w || !r || E(c, r, g);
392
393
  }, []);
393
- const R = ye((u) => {
394
+ const T = Re((u) => {
394
395
  if (u.key !== c)
395
396
  return;
396
397
  const _ = u.newValue, k = (_ === null ? null : S(_)) ?? a;
@@ -398,7 +399,7 @@ function $e(t = {}) {
398
399
  });
399
400
  ce(() => {
400
401
  if (i)
401
- return window.addEventListener("storage", R), () => window.removeEventListener("storage", R);
402
+ return window.addEventListener("storage", T), () => window.removeEventListener("storage", T);
402
403
  }, [i]);
403
404
  const j = te((u) => {
404
405
  const _ = ue(u) ? u(h.current) : u;
@@ -423,23 +424,23 @@ function $e(t = {}) {
423
424
  }
424
425
  };
425
426
  }
426
- function de(t, o) {
427
+ function me(t, n) {
427
428
  const {
428
429
  path: r = "",
429
430
  verbose: l,
430
431
  verbosePath: s,
431
432
  ssr: a,
432
433
  cache: i
433
- } = o;
434
+ } = n;
434
435
  let c = i.proxy.get(t);
435
436
  c || (c = /* @__PURE__ */ new Map(), i.proxy.set(t, c));
436
- const T = c.get(r);
437
- if (T)
438
- return T;
439
- const y = new Proxy(t, {
437
+ const y = c.get(r);
438
+ if (y)
439
+ return y;
440
+ const R = new Proxy(t, {
440
441
  get(w, d) {
441
442
  const v = w[d], S = r ? `${r}.${String(d)}` : String(d);
442
- if (v && typeof v == "object" && ie in v) {
443
+ if (v && typeof v == "object" && fe in v) {
443
444
  const E = v;
444
445
  let p = i.leaf.get(E);
445
446
  p || (p = /* @__PURE__ */ new Map(), i.leaf.set(E, p));
@@ -447,11 +448,11 @@ function de(t, o) {
447
448
  if (h)
448
449
  return h;
449
450
  const A = Reflect.ownKeys(E).filter(
450
- (R) => typeof E[R] == "function"
451
- ), P = Object.fromEntries(
452
- A.map((R) => [
453
- R,
454
- (...j) => E[R].call(
451
+ (T) => typeof E[T] == "function"
452
+ ), x = Object.fromEntries(
453
+ A.map((T) => [
454
+ T,
455
+ (...j) => E[T].call(
455
456
  {
456
457
  ...E,
457
458
  [Y]: S,
@@ -462,21 +463,21 @@ function de(t, o) {
462
463
  ...j
463
464
  )
464
465
  ])
465
- ), g = { ...E, ...P };
466
+ ), g = { ...E, ...x };
466
467
  return p.set(S, g), g;
467
468
  }
468
- return v && typeof v == "object" ? de(v, {
469
- ...o,
469
+ return v && typeof v == "object" ? me(v, {
470
+ ...n,
470
471
  path: S
471
472
  }) : v;
472
473
  }
473
474
  });
474
- return c.set(r, y), y;
475
+ return c.set(r, R), R;
475
476
  }
476
- function Ie(t, o) {
477
- return de(t, {
478
- ...o,
479
- verbosePath: o?.verbosePath ?? "",
477
+ function Ie(t, n) {
478
+ return me(t, {
479
+ ...n,
480
+ verbosePath: n?.verbosePath ?? "",
480
481
  cache: {
481
482
  proxy: /* @__PURE__ */ new WeakMap(),
482
483
  leaf: /* @__PURE__ */ new WeakMap()
@@ -1,4 +1,6 @@
1
1
  import { type PropsWithChildren } from "react";
2
2
  import VocabStore from "./store";
3
- export declare function useVocabStoreContext(): VocabStore;
3
+ export declare function useVocabStoreContext(options?: {
4
+ verbose?: boolean;
5
+ }): VocabStore;
4
6
  export declare function VocabStoreContextProvider({ children }: PropsWithChildren): import("react/jsx-runtime").JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yakocloud/state-vocab",
3
- "version": "3.1.2",
3
+ "version": "3.1.3",
4
4
  "main": "dist/state-vocab.cjs.js",
5
5
  "module": "dist/state-vocab.es.js",
6
6
  "types": "dist/types/index.d.ts",