@yakocloud/state-vocab 3.1.2 → 3.1.4

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 _=require("react");var M={exports:{}},I={};var re;function ve(){if(re)return I;re=1;var t=Symbol.for("react.transitional.element"),n=Symbol.for("react.fragment");function r(u,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:u,key:i,ref:s!==void 0?s:null,props:a}}return I.Fragment=n,I.jsx=r,I.jsxs=r,I}var $={};var ne;function Ee(){return ne||(ne=1,process.env.NODE_ENV!=="production"&&(function(){function t(e){if(e==null)return null;if(typeof e=="function")return e.$$typeof===de?null:e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case p:return"Fragment";case O:return"Profiler";case k:return"StrictMode";case J:return"Suspense";case l:return"SuspenseList";case x: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 h:return"Portal";case w:return e.displayName||"Context";case P:return(e._context.displayName||"Context")+".Consumer";case V:var o=e.render;return e=e.displayName,e||(e=o.displayName||o.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case T:return o=e.displayName||null,o!==null?o:t(e.type)||"Memo";case j: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 d=o.error,v=typeof Symbol=="function"&&Symbol.toStringTag&&e[Symbol.toStringTag]||e.constructor.name||"Object";return d.call(o,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",v),n(e)}}function u(e){if(e===p)return"<>";if(typeof e=="object"&&e!==null&&e.$$typeof===j)return"<...>";try{var o=t(e);return o?"<"+o+">":"<...>"}catch{return"<...>"}}function s(){var e=W.A;return e===null?null:e.getOwner()}function a(){return Error("react-stack-top-frame")}function i(e){if(H.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 d(){Z||(Z=!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))}d.isReactWarning=!0,Object.defineProperty(e,"key",{get:d,configurable:!0})}function y(){var e=t(this.type);return Q[e]||(Q[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,o,d,v,Y,q){var E=d.ref;return e={$$typeof:S,type:e,key:o,props:d,_owner:v},(E!==void 0?E:null)!==null?Object.defineProperty(e,"ref",{enumerable:!1,get:y}):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:Y}),Object.defineProperty(e,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:q}),Object.freeze&&(Object.freeze(e.props),Object.freeze(e)),e}function g(e,o,d,v,Y,q){var E=o.children;if(E!==void 0)if(v)if(be(E)){for(v=0;v<E.length;v++)f(E[v]);Object.freeze&&Object.freeze(E)}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 f(E);if(H.call(o,"key")){E=t(e);var N=Object.keys(o).filter(function(me){return me!=="key"});v=0<N.length?"{key: someKey, "+N.join(": ..., ")+": ...}":"{key: someKey}",te[E+v]||(N=0<N.length?"{"+N.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} />`,v,E,N,E),te[E+v]=!0)}if(E=null,d!==void 0&&(r(d),E=""+d),i(o)&&(r(o.key),E=""+o.key),"key"in o){d={};for(var G in o)G!=="key"&&(d[G]=o[G])}else d=o;return E&&c(d,typeof e=="function"?e.displayName||e.name||"Unknown":e),R(e,E,d,s(),Y,q)}function f(e){b(e)?e._store&&(e._store.validated=1):typeof e=="object"&&e!==null&&e.$$typeof===j&&(e._payload.status==="fulfilled"?b(e._payload.value)&&e._payload.value._store&&(e._payload.value._store.validated=1):e._store&&(e._store.validated=1))}function b(e){return typeof e=="object"&&e!==null&&e.$$typeof===S}var m=_,S=Symbol.for("react.transitional.element"),h=Symbol.for("react.portal"),p=Symbol.for("react.fragment"),k=Symbol.for("react.strict_mode"),O=Symbol.for("react.profiler"),P=Symbol.for("react.consumer"),w=Symbol.for("react.context"),V=Symbol.for("react.forward_ref"),J=Symbol.for("react.suspense"),l=Symbol.for("react.suspense_list"),T=Symbol.for("react.memo"),j=Symbol.for("react.lazy"),x=Symbol.for("react.activity"),de=Symbol.for("react.client.reference"),W=m.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,H=Object.prototype.hasOwnProperty,be=Array.isArray,U=console.createTask?console.createTask:function(){return null};m={react_stack_bottom_frame:function(e){return e()}};var Z,Q={},K=m.react_stack_bottom_frame.bind(m,a)(),ee=U(u(a)),te={};$.Fragment=p,$.jsx=function(e,o,d){var v=1e4>W.recentlyCreatedOwnerStacks++;return g(e,o,d,!1,v?Error("react-stack-top-frame"):K,v?U(u(e)):ee)},$.jsxs=function(e,o,d){var v=1e4>W.recentlyCreatedOwnerStacks++;return g(e,o,d,!0,v?Error("react-stack-top-frame"):K,v?U(u(e)):ee)}})()),$}var oe;function Se(){return oe||(oe=1,process.env.NODE_ENV==="production"?M.exports=ve():M.exports=Ee()),M.exports}var he=Se();function L(t,n,r){if(!n)return t;const u=n.split(".");let s=t;for(const a of u)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 u=n.replace(/\[(\d+)\]/g,".$1").split(".");let s=t;for(let a=0;a<u.length-1;a++){const i=u[a],c=u[a+1];(s[i]===void 0||s[i]===null)&&(s[i]=/^\d+$/.test(c)?[]:{}),s=s[i]}return s[u[u.length-1]]=r,t}function _e(t,n=0){let r;return function(...u){r!==void 0&&clearTimeout(r),r=setTimeout(()=>{r=void 0,t.apply(this,u)},n)}}function ye(t,n,r=[]){return _.useMemo(()=>_e(t,n),r)}function se(t){const n=JSON.stringify(t,null,2).split(`
7
+ `),r=[],u=[];for(const s of n){const a=s.match(/^(\s*)"([^"]+)"(\s*:\s*)(.+)$/);if(a){const[,i,c,y,R]=a;r.push(`${i}%c"${c}"%c${y}%c${R}`),u.push("color: #9cdcfe; font-weight: bold","color: #cccccc","color: #ce9178")}else r.push(`%c${s}`),u.push("color: #cccccc")}console.log(r.join(`
8
+ `),...u,t)}const ue=t=>typeof t=="function",Re=t=>typeof t=="function",A=t=>typeof t<"u",C=t=>Re(t)?t():t;class Te{#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 L(this.#e,n)}set(n,r){const u=L(this.#e,n),s=ue(r)?r(u):r,a={...this.#e};pe(a,n,s),this.#e=a,this.#t.forEach(i=>i())}}const le=_.createContext({});function ae(t={}){const n=_.useContext(le);return t.verbose&&console.log(`[Store uid]: ${n.uid}`),n}function ge({children:t}){const n=_.useMemo(()=>new Te,[]);return he.jsx(le.Provider,{value:n,children:t})}const ie=Symbol("state-def"),z=Symbol("state-path"),D=Symbol("state-verbose"),B=Symbol("state-verbose-path"),F=Symbol("state-ssr"),X=typeof window>"u",ce=X?_.useEffect:_.useLayoutEffect;function ke(t={}){return{[ie]:!0,[z]:"",[D]:!1,[B]:"",[F]:!1,useState(n){const r=X?void 0:C(t.storage),u=C(t.defaultValue),s=t.bidirectional;n??={};const a=C(n.defaultValue)??u,i=n.bidirectional??s,c=this[z],y=this[D],R=this[B],g=this[F],f=ae({verbose:y}),b=t.serialize??JSON.stringify,m=t.deserialize??JSON.parse,S=(l,T,j)=>{const x=T.getItem(l);x===null?A(j)&&T.setItem(l,b(j)):f.set(l,m(x))},h=ye(n.onSet??(()=>{}),n.delayedSet,[]),p=_.useRef(void 0),k=_.useRef(!1);if(!k.current){k.current=!0;let l=f.get(c);A(l)||(l=a,A(l)&&f.set(c,l)),!g&&r&&S(c,r,l)}const O=_.useSyncExternalStore(f.subscribe.bind(f),f.getClientSnapshot.bind(f),f.getServerSnapshot.bind(f));if(y)if(R){const l=L(O,R);l&&se(l)}else se(O);const P=L(O,c,a);p.current=P,ce(()=>{!g||!r||S(c,r,P)},[]);const w=_.useEffectEvent(l=>{if(l.key!==c)return;const T=l.newValue,x=(T===null?null:m(T))??a;A(x)&&(f.set(c,x),h(x,p.current))});_.useEffect(()=>{if(i)return window.addEventListener("storage",w),()=>window.removeEventListener("storage",w)},[i]);const V=_.useCallback(l=>{const T=ue(l)?l(p.current):l;f.set(c,T),h(T,p.current),r&&r.setItem(c,b(T))},[f,c,h,r,b]),J=_.useCallback(()=>{const l=a;if(!A(l)){r?.removeItem(c);return}f.set(c,l),h(l,p.current),r&&r.setItem(c,b(l))},[a,f,c,h,r,b]);return[P,V,J]},useInitialState(n){const r=X?void 0:C(t.storage),u=C(t.defaultValue);n??={};const s=C(n.defaultValue)??u,a=this[z],i=this[D],c=this[F],y=ae({verbose:i}),R=t.serialize??JSON.stringify,g=t.deserialize??JSON.parse,f=(S,h,p)=>{const k=h.getItem(S);k===null?A(p)&&h.setItem(S,R(p)):y.set(S,g(k))},b=_.useRef(!1);let m;b.current||(b.current=!0,m=y.get(a),A(m)||(m=s,A(m)&&y.set(a,m)),!c&&r&&f(a,r,m)),ce(()=>{!c||!r||f(a,r,m)},[])},toString(){return this[z]}}}function fe(t,n){const{path:r="",verbose:u,verbosePath:s,ssr:a,cache:i}=n;let c=i.proxy.get(t);c||(c=new Map,i.proxy.set(t,c));const y=c.get(r);if(y)return y;const R=new Proxy(t,{get(g,f){const b=g[f],m=r?`${r}.${String(f)}`:String(f);if(b&&typeof b=="object"&&ie in b){const S=b;let h=i.leaf.get(S);h||(h=new Map,i.leaf.set(S,h));const p=h.get(m);if(p)return p;const k=Reflect.ownKeys(S).filter(w=>typeof S[w]=="function"),O=Object.fromEntries(k.map(w=>[w,(...V)=>S[w].call({...S,[z]:m,[D]:u,[B]:s,[F]:a},...V)])),P={...S,...O};return h.set(m,P),P}return b&&typeof b=="object"?fe(b,{...n,path:m}):b}});return c.set(r,R),R}function we(t,n){return fe(t,{...n,verbosePath:n?.verbosePath??"",cache:{proxy:new WeakMap,leaf:new WeakMap}})}exports.VocabStateProvider=ge;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";
2
- var I = { exports: {} }, C = {};
3
- var re;
4
- function Re() {
5
- if (re) return C;
6
- re = 1;
7
- var t = Symbol.for("react.transitional.element"), o = Symbol.for("react.fragment");
1
+ import he, { useMemo as ue, createContext as pe, useContext as _e, useRef as G, useEffect as ie, useLayoutEffect as ye, useSyncExternalStore as Re, useEffectEvent as Te, useCallback as re } from "react";
2
+ var Y = { exports: {} }, V = {};
3
+ var ne;
4
+ function ge() {
5
+ if (ne) return V;
6
+ ne = 1;
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,129 +20,129 @@ function Re() {
20
20
  props: a
21
21
  };
22
22
  }
23
- return C.Fragment = o, C.jsx = r, C.jsxs = r, C;
23
+ return V.Fragment = n, V.jsx = r, V.jsxs = r, V;
24
24
  }
25
- var N = {};
26
- var ne;
27
- function Te() {
28
- return ne || (ne = 1, process.env.NODE_ENV !== "production" && (function() {
25
+ var I = {};
26
+ var oe;
27
+ function ke() {
28
+ return oe || (oe = 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 === ve ? null : e.displayName || e.name || null;
33
33
  if (typeof e == "string") return e;
34
34
  switch (e) {
35
- case h:
35
+ case p:
36
36
  return "Fragment";
37
- case P:
38
- return "Profiler";
39
37
  case A:
38
+ return "Profiler";
39
+ case g:
40
40
  return "StrictMode";
41
- case F:
41
+ case L:
42
42
  return "Suspense";
43
43
  case u:
44
44
  return "SuspenseList";
45
- case k:
45
+ case x:
46
46
  return "Activity";
47
47
  }
48
48
  if (typeof e == "object")
49
49
  switch (typeof e.tag == "number" && console.error(
50
50
  "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
51
51
  ), e.$$typeof) {
52
- case p:
52
+ case h:
53
53
  return "Portal";
54
- case R:
54
+ case k:
55
55
  return e.displayName || "Context";
56
- case g:
56
+ case w:
57
57
  return (e._context.displayName || "Context") + ".Consumer";
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;
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;
58
+ case C:
59
+ var o = e.render;
60
+ return e = e.displayName, e || (e = o.displayName || o.name || "", e = e !== "" ? "ForwardRef(" + e + ")" : "ForwardRef"), e;
61
+ case R:
62
+ return o = e.displayName || null, o !== null ? o : t(e.type) || "Memo";
63
+ case O:
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";
85
- return f.call(
86
- n,
82
+ if (o) {
83
+ o = console;
84
+ var d = o.error, v = typeof Symbol == "function" && Symbol.toStringTag && e[Symbol.toStringTag] || e.constructor.name || "Object";
85
+ return d.call(
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
- m
89
- ), o(e);
88
+ v
89
+ ), n(e);
90
90
  }
91
91
  }
92
92
  function l(e) {
93
- if (e === h) return "<>";
94
- if (typeof e == "object" && e !== null && e.$$typeof === x)
93
+ if (e === p) return "<>";
94
+ if (typeof e == "object" && e !== null && e.$$typeof === O)
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
  }
102
102
  }
103
103
  function s() {
104
- var e = M.A;
104
+ var e = J.A;
105
105
  return e === null ? null : e.getOwner();
106
106
  }
107
107
  function a() {
108
108
  return Error("react-stack-top-frame");
109
109
  }
110
110
  function i(e) {
111
- if (B.call(e, "key")) {
112
- var n = Object.getOwnPropertyDescriptor(e, "key").get;
113
- if (n && n.isReactWarning) return !1;
111
+ if (H.call(e, "key")) {
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) {
118
- function f() {
119
- X || (X = !0, console.error(
117
+ function c(e, o) {
118
+ function d() {
119
+ Z || (Z = !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
- f.isReactWarning = !0, Object.defineProperty(e, "key", {
125
- get: f,
124
+ d.isReactWarning = !0, Object.defineProperty(e, "key", {
125
+ get: d,
126
126
  configurable: !0
127
127
  });
128
128
  }
129
- function T() {
129
+ function _() {
130
130
  var e = t(this.type);
131
- return H[e] || (H[e] = !0, console.error(
131
+ return Q[e] || (Q[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) {
136
- var b = f.ref;
135
+ function y(e, o, d, v, z, U) {
136
+ var E = d.ref;
137
137
  return e = {
138
- $$typeof: E,
138
+ $$typeof: S,
139
139
  type: e,
140
- key: n,
141
- props: f,
142
- _owner: m
143
- }, (b !== void 0 ? b : null) !== null ? Object.defineProperty(e, "ref", {
140
+ key: o,
141
+ props: d,
142
+ _owner: v
143
+ }, (E !== void 0 ? E : null) !== null ? Object.defineProperty(e, "ref", {
144
144
  enumerable: !1,
145
- get: T
145
+ get: _
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,
@@ -157,112 +157,112 @@ function Te() {
157
157
  configurable: !1,
158
158
  enumerable: !1,
159
159
  writable: !0,
160
- value: $
160
+ value: z
161
161
  }), Object.defineProperty(e, "_debugTask", {
162
162
  configurable: !1,
163
163
  enumerable: !1,
164
164
  writable: !0,
165
- value: L
165
+ value: U
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;
170
- if (b !== void 0)
171
- if (m)
172
- if (be(b)) {
173
- for (m = 0; m < b.length; m++)
174
- d(b[m]);
175
- Object.freeze && Object.freeze(b);
168
+ function T(e, o, d, v, z, U) {
169
+ var E = o.children;
170
+ if (E !== void 0)
171
+ if (v)
172
+ if (Ee(E)) {
173
+ for (v = 0; v < E.length; v++)
174
+ f(E[v]);
175
+ Object.freeze && Object.freeze(E);
176
176
  } else
177
177
  console.error(
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
- else d(b);
181
- if (B.call(n, "key")) {
182
- b = t(e);
183
- var O = Object.keys(n).filter(function(ve) {
184
- return ve !== "key";
180
+ else f(E);
181
+ if (H.call(o, "key")) {
182
+ E = t(e);
183
+ var j = Object.keys(o).filter(function(Se) {
184
+ return Se !== "key";
185
185
  });
186
- m = 0 < O.length ? "{key: someKey, " + O.join(": ..., ") + ": ...}" : "{key: someKey}", K[b + m] || (O = 0 < O.length ? "{" + O.join(": ..., ") + ": ...}" : "{}", console.error(
186
+ v = 0 < j.length ? "{key: someKey, " + j.join(": ..., ") + ": ...}" : "{key: someKey}", te[E + v] || (j = 0 < j.length ? "{" + j.join(": ..., ") + ": ...}" : "{}", console.error(
187
187
  `A props object containing a "key" prop is being spread into JSX:
188
188
  let props = %s;
189
189
  <%s {...props} />
190
190
  React keys must be passed directly to JSX without using spread:
191
191
  let props = %s;
192
192
  <%s key={someKey} {...props} />`,
193
- m,
194
- b,
195
- O,
196
- b
197
- ), K[b + m] = !0);
193
+ v,
194
+ E,
195
+ j,
196
+ E
197
+ ), te[E + v] = !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) {
200
- f = {};
201
- for (var W in n)
202
- W !== "key" && (f[W] = n[W]);
203
- } else f = n;
204
- return b && c(
205
- f,
199
+ if (E = null, d !== void 0 && (r(d), E = "" + d), i(o) && (r(o.key), E = "" + o.key), "key" in o) {
200
+ d = {};
201
+ for (var q in o)
202
+ q !== "key" && (d[q] = o[q]);
203
+ } else d = o;
204
+ return E && c(
205
+ d,
206
206
  typeof e == "function" ? e.displayName || e.name || "Unknown" : e
207
207
  ), y(
208
208
  e,
209
- b,
210
- f,
209
+ E,
210
+ d,
211
211
  s(),
212
- $,
213
- L
212
+ z,
213
+ U
214
214
  );
215
215
  }
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));
216
+ function f(e) {
217
+ m(e) ? e._store && (e._store.validated = 1) : typeof e == "object" && e !== null && e.$$typeof === O && (e._payload.status === "fulfilled" ? m(e._payload.value) && e._payload.value._store && (e._payload.value._store.validated = 1) : e._store && (e._store.validated = 1));
218
218
  }
219
- function v(e) {
220
- return typeof e == "object" && e !== null && e.$$typeof === E;
219
+ function m(e) {
220
+ return typeof e == "object" && e !== null && e.$$typeof === S;
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 b = he, S = Symbol.for("react.transitional.element"), h = Symbol.for("react.portal"), p = Symbol.for("react.fragment"), g = Symbol.for("react.strict_mode"), A = Symbol.for("react.profiler"), w = Symbol.for("react.consumer"), k = Symbol.for("react.context"), C = Symbol.for("react.forward_ref"), L = Symbol.for("react.suspense"), u = Symbol.for("react.suspense_list"), R = Symbol.for("react.memo"), O = Symbol.for("react.lazy"), x = Symbol.for("react.activity"), ve = Symbol.for("react.client.reference"), J = b.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, H = Object.prototype.hasOwnProperty, Ee = Array.isArray, W = console.createTask ? console.createTask : function() {
223
223
  return null;
224
224
  };
225
- S = {
225
+ b = {
226
226
  react_stack_bottom_frame: function(e) {
227
227
  return e();
228
228
  }
229
229
  };
230
- var X, H = {}, Z = S.react_stack_bottom_frame.bind(
231
- S,
230
+ var Z, Q = {}, K = b.react_stack_bottom_frame.bind(
231
+ b,
232
232
  a
233
- )(), Q = z(l(a)), K = {};
234
- N.Fragment = h, N.jsx = function(e, n, f) {
235
- var m = 1e4 > M.recentlyCreatedOwnerStacks++;
236
- return w(
233
+ )(), ee = W(l(a)), te = {};
234
+ I.Fragment = p, I.jsx = function(e, o, d) {
235
+ var v = 1e4 > J.recentlyCreatedOwnerStacks++;
236
+ return T(
237
237
  e,
238
- n,
239
- f,
238
+ o,
239
+ d,
240
240
  !1,
241
- m ? Error("react-stack-top-frame") : Z,
242
- m ? z(l(e)) : Q
241
+ v ? Error("react-stack-top-frame") : K,
242
+ v ? W(l(e)) : ee
243
243
  );
244
- }, N.jsxs = function(e, n, f) {
245
- var m = 1e4 > M.recentlyCreatedOwnerStacks++;
246
- return w(
244
+ }, I.jsxs = function(e, o, d) {
245
+ var v = 1e4 > J.recentlyCreatedOwnerStacks++;
246
+ return T(
247
247
  e,
248
- n,
249
- f,
248
+ o,
249
+ d,
250
250
  !0,
251
- m ? Error("react-stack-top-frame") : Z,
252
- m ? z(l(e)) : Q
251
+ v ? Error("react-stack-top-frame") : K,
252
+ v ? W(l(e)) : ee
253
253
  );
254
254
  };
255
- })()), N;
255
+ })()), I;
256
256
  }
257
- var oe;
258
- function ge() {
259
- return oe || (oe = 1, process.env.NODE_ENV === "production" ? I.exports = Re() : I.exports = Te()), I.exports;
257
+ var se;
258
+ function we() {
259
+ return se || (se = 1, process.env.NODE_ENV === "production" ? Y.exports = ge() : Y.exports = ke()), Y.exports;
260
260
  }
261
- var ke = ge();
262
- function D(t, o, r) {
263
- if (!o)
261
+ var xe = we();
262
+ function M(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 Pe(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 Ae(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 = []) {
292
- return ae(
293
- () => Pe(t, o),
291
+ function Oe(t, n, r = []) {
292
+ return ue(
293
+ () => Ae(t, n),
294
294
  // eslint-disable-next-line react-hooks/exhaustive-deps
295
295
  r
296
296
  );
297
297
  }
298
- function se(t) {
299
- const o = JSON.stringify(t, null, 2).split(`
298
+ function ae(t) {
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] = a;
305
+ r.push(`${i}%c"${c}"%c${_}%c${y}`), 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 fe = (t) => typeof t == "function", je = (t) => typeof t == "function", P = (t) => typeof t < "u", N = (t) => je(t) ? t() : t;
317
+ class Ne {
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,154 +329,167 @@ 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 M(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 = M(this.#e, n), s = fe(r) ? r(l) : r, a = { ...this.#e };
337
+ Pe(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 de = pe({});
341
+ function ce(t = {}) {
342
+ const n = _e(de);
343
+ return t.verbose && console.log(`[Store uid]: ${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 = ue(() => new Ne(), []);
347
+ return /* @__PURE__ */ xe.jsx(de.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
- function $e(t = {}) {
349
+ const me = Symbol("state-def"), $ = Symbol("state-path"), D = Symbol("state-verbose"), B = Symbol("state-verbose-path"), F = Symbol("state-ssr"), X = typeof window > "u", le = X ? ie : ye;
350
+ function Ie(t = {}) {
350
351
  return {
351
- [ie]: !0,
352
+ [me]: !0,
352
353
  // marks this object as a leaf in the router tree
353
- [Y]: "",
354
+ [$]: "",
354
355
  // placeholder; injected at runtime by injectPaths()
355
- [U]: !1,
356
+ [D]: !1,
356
357
  // placeholder
357
- [q]: "",
358
+ [B]: "",
358
359
  // placeholder
359
- [G]: !1,
360
+ [F]: !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) => {
365
- const k = _.getItem(u);
366
- k === null ? V(x) && _.setItem(u, v(x)) : d.set(u, S(k));
367
- }, p = xe(
368
- o.onSet ?? (() => {
362
+ useState(n) {
363
+ const r = X ? void 0 : N(t.storage), l = N(t.defaultValue), s = t.bidirectional;
364
+ n ??= {};
365
+ const a = N(n.defaultValue) ?? l, i = n.bidirectional ?? s, c = this[$], _ = this[D], y = this[B], T = this[F], f = ce({ verbose: _ }), m = t.serialize ?? JSON.stringify, b = t.deserialize ?? JSON.parse, S = (u, R, O) => {
366
+ const x = R.getItem(u);
367
+ x === null ? P(O) && R.setItem(u, m(O)) : f.set(u, b(x));
368
+ }, h = Oe(
369
+ n.onSet ?? (() => {
369
370
  }),
370
- o.delayedSet,
371
+ n.delayedSet,
371
372
  []
372
- ), h = ee(void 0), A = ee(!1);
373
- if (!A.current) {
374
- A.current = !0;
375
- let u = d.get(c);
376
- V(u) || (u = a, V(u) && d.set(c, u)), !w && r && E(c, r, u);
373
+ ), p = G(void 0), g = G(!1);
374
+ if (!g.current) {
375
+ g.current = !0;
376
+ let u = f.get(c);
377
+ P(u) || (u = a, P(u) && f.set(c, u)), !T && r && S(c, r, u);
377
378
  }
378
- const P = he(
379
- d.subscribe.bind(d),
380
- d.getClientSnapshot.bind(d),
381
- d.getServerSnapshot.bind(d)
379
+ const A = Re(
380
+ f.subscribe.bind(f),
381
+ f.getClientSnapshot.bind(f),
382
+ f.getServerSnapshot.bind(f)
382
383
  );
383
- if (T)
384
+ if (_)
384
385
  if (y) {
385
- const u = D(P, y);
386
- u && se(u);
386
+ const u = M(A, y);
387
+ u && ae(u);
387
388
  } else
388
- se(P);
389
- const g = D(P, c, a);
390
- h.current = g, Ce(() => {
391
- !w || !r || E(c, r, g);
389
+ ae(A);
390
+ const w = M(A, c, a);
391
+ p.current = w, le(() => {
392
+ !T || !r || S(c, r, w);
392
393
  }, []);
393
- const R = ye((u) => {
394
+ const k = Te((u) => {
394
395
  if (u.key !== c)
395
396
  return;
396
- const _ = u.newValue, k = (_ === null ? null : S(_)) ?? a;
397
- V(k) && (d.set(c, k), p(k, h.current));
397
+ const R = u.newValue, x = (R === null ? null : b(R)) ?? a;
398
+ P(x) && (f.set(c, x), h(x, p.current));
398
399
  });
399
- ce(() => {
400
+ ie(() => {
400
401
  if (i)
401
- return window.addEventListener("storage", R), () => window.removeEventListener("storage", R);
402
+ return window.addEventListener("storage", k), () => window.removeEventListener("storage", k);
402
403
  }, [i]);
403
- const j = te((u) => {
404
- const _ = ue(u) ? u(h.current) : u;
405
- d.set(c, _), p(_, h.current), r && r.setItem(c, v(_));
406
- }, [c, r, p]), F = te(() => {
404
+ const C = re((u) => {
405
+ const R = fe(u) ? u(p.current) : u;
406
+ f.set(c, R), h(R, p.current), r && r.setItem(c, m(R));
407
+ }, [f, c, h, r, m]), L = re(() => {
407
408
  const u = a;
408
- if (!V(u)) {
409
+ if (!P(u)) {
409
410
  r?.removeItem(c);
410
411
  return;
411
412
  }
412
- d.set(c, u), p(u, h.current), r && r.setItem(c, v(u));
413
- }, [c, a, r, p]);
413
+ f.set(c, u), h(u, p.current), r && r.setItem(c, m(u));
414
+ }, [a, f, c, h, r, m]);
414
415
  return [
415
- g,
416
- j,
417
- F
416
+ w,
417
+ C,
418
+ L
418
419
  ];
419
420
  },
421
+ useInitialState(n) {
422
+ const r = X ? void 0 : N(t.storage), l = N(t.defaultValue);
423
+ n ??= {};
424
+ const s = N(n.defaultValue) ?? l, a = this[$], i = this[D], c = this[F], _ = ce({ verbose: i }), y = t.serialize ?? JSON.stringify, T = t.deserialize ?? JSON.parse, f = (S, h, p) => {
425
+ const g = h.getItem(S);
426
+ g === null ? P(p) && h.setItem(S, y(p)) : _.set(S, T(g));
427
+ }, m = G(!1);
428
+ let b;
429
+ m.current || (m.current = !0, b = _.get(a), P(b) || (b = s, P(b) && _.set(a, b)), !c && r && f(a, r, b)), le(() => {
430
+ !c || !r || f(a, r, b);
431
+ }, []);
432
+ },
420
433
  /** Returns the fully qualified job name (dot-separated path). */
421
434
  toString() {
422
- return this[Y];
435
+ return this[$];
423
436
  }
424
437
  };
425
438
  }
426
- function de(t, o) {
439
+ function be(t, n) {
427
440
  const {
428
441
  path: r = "",
429
442
  verbose: l,
430
443
  verbosePath: s,
431
444
  ssr: a,
432
445
  cache: i
433
- } = o;
446
+ } = n;
434
447
  let c = i.proxy.get(t);
435
448
  c || (c = /* @__PURE__ */ new Map(), i.proxy.set(t, c));
436
- const T = c.get(r);
437
- if (T)
438
- return T;
449
+ const _ = c.get(r);
450
+ if (_)
451
+ return _;
439
452
  const y = new Proxy(t, {
440
- get(w, d) {
441
- const v = w[d], S = r ? `${r}.${String(d)}` : String(d);
442
- if (v && typeof v == "object" && ie in v) {
443
- const E = v;
444
- let p = i.leaf.get(E);
445
- p || (p = /* @__PURE__ */ new Map(), i.leaf.set(E, p));
446
- const h = p.get(S);
447
- if (h)
448
- return h;
449
- 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(
453
+ get(T, f) {
454
+ const m = T[f], b = r ? `${r}.${String(f)}` : String(f);
455
+ if (m && typeof m == "object" && me in m) {
456
+ const S = m;
457
+ let h = i.leaf.get(S);
458
+ h || (h = /* @__PURE__ */ new Map(), i.leaf.set(S, h));
459
+ const p = h.get(b);
460
+ if (p)
461
+ return p;
462
+ const g = Reflect.ownKeys(S).filter(
463
+ (k) => typeof S[k] == "function"
464
+ ), A = Object.fromEntries(
465
+ g.map((k) => [
466
+ k,
467
+ (...C) => S[k].call(
455
468
  {
456
- ...E,
457
- [Y]: S,
458
- [U]: l,
459
- [q]: s,
460
- [G]: a
469
+ ...S,
470
+ [$]: b,
471
+ [D]: l,
472
+ [B]: s,
473
+ [F]: a
461
474
  },
462
- ...j
475
+ ...C
463
476
  )
464
477
  ])
465
- ), g = { ...E, ...P };
466
- return p.set(S, g), g;
478
+ ), w = { ...S, ...A };
479
+ return h.set(b, w), w;
467
480
  }
468
- return v && typeof v == "object" ? de(v, {
469
- ...o,
470
- path: S
471
- }) : v;
481
+ return m && typeof m == "object" ? be(m, {
482
+ ...n,
483
+ path: b
484
+ }) : m;
472
485
  }
473
486
  });
474
487
  return c.set(r, y), y;
475
488
  }
476
- function Ie(t, o) {
477
- return de(t, {
478
- ...o,
479
- verbosePath: o?.verbosePath ?? "",
489
+ function $e(t, n) {
490
+ return be(t, {
491
+ ...n,
492
+ verbosePath: n?.verbosePath ?? "",
480
493
  cache: {
481
494
  proxy: /* @__PURE__ */ new WeakMap(),
482
495
  leaf: /* @__PURE__ */ new WeakMap()
@@ -485,6 +498,6 @@ function Ie(t, o) {
485
498
  }
486
499
  export {
487
500
  Ve as VocabStateProvider,
488
- $e as defineState,
489
- Ie as setupStorage
501
+ Ie as defineState,
502
+ $e as setupStorage
490
503
  };
@@ -1,4 +1,9 @@
1
1
  import { type PropsWithChildren } from "react";
2
2
  import VocabStore from "./store";
3
- export declare function useVocabStoreContext(): VocabStore;
3
+ /**
4
+ * @see method from from https://zustand.docs.pmnd.rs/learn/guides/nextjs
5
+ */
6
+ export declare function useVocabStoreContext(options?: {
7
+ verbose?: boolean;
8
+ }): VocabStore;
4
9
  export declare function VocabStoreContextProvider({ children }: PropsWithChildren): import("react/jsx-runtime").JSX.Element;
@@ -23,6 +23,16 @@ export declare function defineState<D>(definitionOptions?: {
23
23
  bidirectional?: true;
24
24
  onSet?(nextValue: NoInfer<D>, prevValue: NoInfer<D>): void;
25
25
  }): readonly [D, (nextValue: ValueOrTransformer<D>) => void, () => void];
26
+ useInitialState(this: {
27
+ [STATE_PATH]: string;
28
+ [STATE_VERBOSE]: boolean;
29
+ [STATE_SSR]: boolean;
30
+ }, options?: {
31
+ defaultValue?: ValueOrFactory<D>;
32
+ delayedSet?: number;
33
+ bidirectional?: true;
34
+ onSet?(nextValue: NoInfer<D>, prevValue: NoInfer<D>): void;
35
+ }): void;
26
36
  /** Returns the fully qualified job name (dot-separated path). */
27
37
  toString(this: {
28
38
  [STATE_PATH]: string;
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.4",
4
4
  "main": "dist/state-vocab.cjs.js",
5
5
  "module": "dist/state-vocab.es.js",
6
6
  "types": "dist/types/index.d.ts",