@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 +69 -4
- package/dist/state-vocab.cjs.js +4 -4
- package/dist/state-vocab.es.js +120 -119
- package/dist/types/context.d.ts +3 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -103,7 +103,7 @@ defineState({
|
|
|
103
103
|
})
|
|
104
104
|
```
|
|
105
105
|
|
|
106
|
-
**Minimal API surface.**
|
|
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
|
|
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(
|
|
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 |
|
package/dist/state-vocab.cjs.js
CHANGED
|
@@ -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
|
|
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(
|
|
7
|
-
`),r=[],l=[];for(const s of
|
|
8
|
-
`),...l,t)}const se=t=>typeof t=="function",
|
|
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;
|
package/dist/state-vocab.es.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import
|
|
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
|
|
4
|
+
function Te() {
|
|
5
5
|
if (re) return C;
|
|
6
6
|
re = 1;
|
|
7
|
-
var t = Symbol.for("react.transitional.element"),
|
|
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 =
|
|
23
|
+
return C.Fragment = n, C.jsx = r, C.jsxs = r, C;
|
|
24
24
|
}
|
|
25
25
|
var N = {};
|
|
26
26
|
var ne;
|
|
27
|
-
function
|
|
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 ===
|
|
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
|
|
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
|
|
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
|
|
60
|
-
return e = e.displayName, e || (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
|
|
63
|
-
case
|
|
64
|
-
|
|
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(
|
|
66
|
+
return t(e(o));
|
|
67
67
|
} catch {
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
return null;
|
|
71
71
|
}
|
|
72
|
-
function
|
|
72
|
+
function n(e) {
|
|
73
73
|
return "" + e;
|
|
74
74
|
}
|
|
75
75
|
function r(e) {
|
|
76
76
|
try {
|
|
77
|
-
|
|
78
|
-
var
|
|
77
|
+
n(e);
|
|
78
|
+
var o = !1;
|
|
79
79
|
} catch {
|
|
80
|
-
|
|
80
|
+
o = !0;
|
|
81
81
|
}
|
|
82
|
-
if (
|
|
83
|
-
|
|
84
|
-
var f =
|
|
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
|
-
|
|
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
|
-
),
|
|
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 ===
|
|
94
|
+
if (typeof e == "object" && e !== null && e.$$typeof === P)
|
|
95
95
|
return "<...>";
|
|
96
96
|
try {
|
|
97
|
-
var
|
|
98
|
-
return
|
|
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
|
|
113
|
-
if (
|
|
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,
|
|
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
|
-
|
|
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
|
|
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
|
|
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:
|
|
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:
|
|
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,
|
|
169
|
-
var b =
|
|
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 (
|
|
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(
|
|
181
|
+
if (B.call(o, "key")) {
|
|
182
182
|
b = t(e);
|
|
183
|
-
var O = Object.keys(
|
|
184
|
-
return
|
|
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(
|
|
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
|
|
202
|
-
W !== "key" && (f[W] =
|
|
203
|
-
} else f =
|
|
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
|
-
),
|
|
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 ===
|
|
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 =
|
|
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,
|
|
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
|
-
|
|
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,
|
|
244
|
+
}, N.jsxs = function(e, o, f) {
|
|
245
245
|
var m = 1e4 > M.recentlyCreatedOwnerStacks++;
|
|
246
246
|
return w(
|
|
247
247
|
e,
|
|
248
|
-
|
|
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
|
|
259
|
-
return oe || (oe = 1, process.env.NODE_ENV === "production" ? 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
|
|
262
|
-
function D(t,
|
|
263
|
-
if (!
|
|
261
|
+
var we = ke();
|
|
262
|
+
function D(t, n, r) {
|
|
263
|
+
if (!n)
|
|
264
264
|
return t;
|
|
265
|
-
const l =
|
|
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
|
|
275
|
-
const l =
|
|
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,
|
|
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
|
-
},
|
|
288
|
+
}, n);
|
|
289
289
|
};
|
|
290
290
|
}
|
|
291
|
-
function
|
|
291
|
+
function Ae(t, n, r = []) {
|
|
292
292
|
return ae(
|
|
293
|
-
() => Pe(t,
|
|
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
|
|
299
|
+
const n = JSON.stringify(t, null, 2).split(`
|
|
300
300
|
`), r = [], l = [];
|
|
301
|
-
for (const s of
|
|
301
|
+
for (const s of n) {
|
|
302
302
|
const a = s.match(/^(\s*)"([^"]+)"(\s*:\s*)(.+)$/);
|
|
303
303
|
if (a) {
|
|
304
|
-
const [, i, c,
|
|
305
|
-
r.push(`${i}%c"${c}"%c${
|
|
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",
|
|
317
|
-
class
|
|
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(
|
|
324
|
-
return this.#t.add(
|
|
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(
|
|
333
|
-
return D(this.#e,
|
|
332
|
+
get(n) {
|
|
333
|
+
return D(this.#e, n);
|
|
334
334
|
}
|
|
335
|
-
set(
|
|
336
|
-
const l = D(this.#e,
|
|
337
|
-
|
|
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 =
|
|
341
|
-
function
|
|
342
|
-
|
|
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
|
|
346
|
-
return /* @__PURE__ */
|
|
346
|
+
const n = ae(() => new je(), []);
|
|
347
|
+
return /* @__PURE__ */ we.jsx(le.Provider, { value: n, children: t });
|
|
347
348
|
}
|
|
348
|
-
const
|
|
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
|
-
[
|
|
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(
|
|
362
|
-
const r =
|
|
363
|
-
|
|
364
|
-
const a = J(
|
|
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(
|
|
367
|
-
}, p =
|
|
368
|
-
|
|
367
|
+
k === null ? V(P) && _.setItem(u, v(P)) : d.set(u, S(k));
|
|
368
|
+
}, p = Ae(
|
|
369
|
+
n.onSet ?? (() => {
|
|
369
370
|
}),
|
|
370
|
-
|
|
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
|
|
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 (
|
|
384
|
-
if (
|
|
385
|
-
const u = D(
|
|
384
|
+
if (y)
|
|
385
|
+
if (R) {
|
|
386
|
+
const u = D(x, R);
|
|
386
387
|
u && se(u);
|
|
387
388
|
} else
|
|
388
|
-
se(
|
|
389
|
-
const g = D(
|
|
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
|
|
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",
|
|
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
|
|
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
|
-
} =
|
|
434
|
+
} = n;
|
|
434
435
|
let c = i.proxy.get(t);
|
|
435
436
|
c || (c = /* @__PURE__ */ new Map(), i.proxy.set(t, c));
|
|
436
|
-
const
|
|
437
|
-
if (
|
|
438
|
-
return
|
|
439
|
-
const
|
|
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" &&
|
|
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
|
-
(
|
|
451
|
-
),
|
|
452
|
-
A.map((
|
|
453
|
-
|
|
454
|
-
(...j) => E[
|
|
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, ...
|
|
466
|
+
), g = { ...E, ...x };
|
|
466
467
|
return p.set(S, g), g;
|
|
467
468
|
}
|
|
468
|
-
return v && typeof v == "object" ?
|
|
469
|
-
...
|
|
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,
|
|
475
|
+
return c.set(r, R), R;
|
|
475
476
|
}
|
|
476
|
-
function Ie(t,
|
|
477
|
-
return
|
|
478
|
-
...
|
|
479
|
-
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()
|
package/dist/types/context.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { type PropsWithChildren } from "react";
|
|
2
2
|
import VocabStore from "./store";
|
|
3
|
-
export declare function useVocabStoreContext(
|
|
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;
|