@weaverse/next 0.1.0-alpha.0 → 0.1.0-alpha.2
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 +165 -0
- package/dist/chunk-SS6QUKYY.mjs +149 -0
- package/dist/chunk-SS6QUKYY.mjs.map +1 -0
- package/dist/index.d.mts +145 -160
- package/dist/index.d.ts +145 -160
- package/dist/index.js +477 -18
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +407 -108
- package/dist/index.mjs.map +1 -1
- package/dist/server.d.mts +60 -0
- package/dist/server.d.ts +60 -0
- package/dist/server.js +662 -0
- package/dist/server.js.map +1 -0
- package/dist/server.mjs +513 -0
- package/dist/server.mjs.map +1 -0
- package/dist/types-DvEeLX6L.d.mts +321 -0
- package/dist/types-DvEeLX6L.d.ts +321 -0
- package/package.json +22 -3
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import { WeaverseElement, WeaverseResourcePickerData } from '@weaverse/react';
|
|
2
|
+
import { PageType, SchemaType } from '@weaverse/schema';
|
|
3
|
+
import { ReactNode, ComponentType, ForwardRefExoticComponent } from 'react';
|
|
4
|
+
|
|
5
|
+
interface WeaverseNextRequestInfo {
|
|
6
|
+
i18n?: WeaverseNextI18n;
|
|
7
|
+
pathname: string;
|
|
8
|
+
queries: Record<string, string | boolean>;
|
|
9
|
+
search: string;
|
|
10
|
+
}
|
|
11
|
+
interface WeaverseNextThemeSettingsStore {
|
|
12
|
+
getServerSnapshot: () => Record<string, unknown>;
|
|
13
|
+
getSnapshot: () => Record<string, unknown>;
|
|
14
|
+
publicEnv?: Record<string, string | undefined>;
|
|
15
|
+
schema?: unknown;
|
|
16
|
+
settings: Record<string, unknown>;
|
|
17
|
+
subscribe: (listener: () => void) => () => void;
|
|
18
|
+
updateThemeSettings: (next: Record<string, unknown>) => void;
|
|
19
|
+
}
|
|
20
|
+
interface WeaverseNextRuntimeInternal {
|
|
21
|
+
navigate?: (to: string, options?: {
|
|
22
|
+
preventScrollReset?: boolean;
|
|
23
|
+
} | Record<string, unknown>) => void;
|
|
24
|
+
pageAssignment?: unknown;
|
|
25
|
+
project?: unknown;
|
|
26
|
+
revalidate?: (options?: unknown) => Promise<void> | void;
|
|
27
|
+
themeSettingsStore?: WeaverseNextThemeSettingsStore;
|
|
28
|
+
}
|
|
29
|
+
interface WeaverseNextRuntimeConfig {
|
|
30
|
+
client?: WeaverseNextClient;
|
|
31
|
+
data: WeaverseNextLoaderData;
|
|
32
|
+
dataContext?: Record<string, unknown>;
|
|
33
|
+
navigate?: WeaverseNextRuntimeInternal['navigate'];
|
|
34
|
+
revalidate?: WeaverseNextRuntimeInternal['revalidate'];
|
|
35
|
+
themeSettingsStore?: WeaverseNextThemeSettingsStore;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Locale/market info passed through to component loaders and the Storefront
|
|
39
|
+
* client. Kept structurally close to Hydrogen's `WeaverseI18n` but without the
|
|
40
|
+
* `@shopify/hydrogen` `I18nBase` dependency so the adapter stays framework
|
|
41
|
+
* neutral.
|
|
42
|
+
*/
|
|
43
|
+
interface WeaverseNextI18n {
|
|
44
|
+
country?: string;
|
|
45
|
+
label?: string;
|
|
46
|
+
language?: string;
|
|
47
|
+
locale?: string;
|
|
48
|
+
pathPrefix?: string;
|
|
49
|
+
[key: string]: unknown;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Minimal Storefront client shape required by component loaders. The host app
|
|
53
|
+
* provides this (public or private token mode); Weaverse never owns it.
|
|
54
|
+
*/
|
|
55
|
+
interface WeaverseNextStorefront {
|
|
56
|
+
i18n?: WeaverseNextI18n;
|
|
57
|
+
query: (query: string, options?: unknown) => Promise<unknown>;
|
|
58
|
+
[key: string]: unknown;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* App-provided commerce context. `storefront` is the only v0 must-have; cart
|
|
62
|
+
* and customer-account stay app-owned and are passed through untouched.
|
|
63
|
+
*/
|
|
64
|
+
interface WeaverseNextCommerceContext {
|
|
65
|
+
cart?: unknown;
|
|
66
|
+
customerAccount?: unknown;
|
|
67
|
+
storefront?: WeaverseNextStorefront;
|
|
68
|
+
[key: string]: unknown;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Explicit, framework-neutral replacement for React Router's
|
|
72
|
+
* `LoaderFunctionArgs`. Built by the Next route/page from params + headers +
|
|
73
|
+
* searchParams instead of an implicit loader context.
|
|
74
|
+
*/
|
|
75
|
+
interface WeaverseNextRequestContext {
|
|
76
|
+
handle?: string;
|
|
77
|
+
headers?: Headers;
|
|
78
|
+
i18n?: WeaverseNextI18n;
|
|
79
|
+
isDesignMode?: boolean;
|
|
80
|
+
isPreviewMode?: boolean;
|
|
81
|
+
isRevisionPreview?: boolean;
|
|
82
|
+
pageType?: PageType;
|
|
83
|
+
pathname?: string;
|
|
84
|
+
searchParams?: URLSearchParams;
|
|
85
|
+
sectionType?: string;
|
|
86
|
+
url?: URL | string;
|
|
87
|
+
[key: string]: unknown;
|
|
88
|
+
}
|
|
89
|
+
/** A single serialized item in a Weaverse page tree. */
|
|
90
|
+
interface WeaverseNextComponentData {
|
|
91
|
+
children?: WeaverseNextComponentData[] | {
|
|
92
|
+
id: string;
|
|
93
|
+
}[];
|
|
94
|
+
data?: Record<string, unknown>;
|
|
95
|
+
id: string;
|
|
96
|
+
/** Attached by {@link runWeaverseComponentLoaders} after a loader runs. */
|
|
97
|
+
loaderData?: unknown;
|
|
98
|
+
type: string;
|
|
99
|
+
[key: string]: unknown;
|
|
100
|
+
}
|
|
101
|
+
/** Serialized page tree fetched from Weaverse. */
|
|
102
|
+
interface WeaverseNextPageData {
|
|
103
|
+
id: string;
|
|
104
|
+
items: WeaverseNextComponentData[];
|
|
105
|
+
name?: string;
|
|
106
|
+
rootId?: string;
|
|
107
|
+
[key: string]: unknown;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Top-level payload returned by `client.loadPage`. Kept close to Hydrogen's
|
|
111
|
+
* `WeaverseLoaderData` so registered components stay portable.
|
|
112
|
+
*/
|
|
113
|
+
interface WeaverseNextLoaderData {
|
|
114
|
+
configs?: Record<string, unknown>;
|
|
115
|
+
page: WeaverseNextPageData;
|
|
116
|
+
pageAssignment?: Record<string, unknown>;
|
|
117
|
+
project?: Record<string, unknown>;
|
|
118
|
+
[key: string]: unknown;
|
|
119
|
+
}
|
|
120
|
+
/** Props injected into every registered Weaverse component. */
|
|
121
|
+
interface WeaverseNextComponentProps<L = unknown> extends Partial<WeaverseElement> {
|
|
122
|
+
children?: ReactNode;
|
|
123
|
+
className?: string;
|
|
124
|
+
loaderData?: L;
|
|
125
|
+
[key: string]: unknown;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Arguments passed to a component `loader`. `commerce.storefront` is the
|
|
129
|
+
* explicit contract; `weaverse.storefront` exists as a compatibility alias for
|
|
130
|
+
* Pilot-style loaders that call `weaverse.storefront.query(...)`.
|
|
131
|
+
*/
|
|
132
|
+
interface WeaverseNextComponentLoaderArgs<TData = unknown> {
|
|
133
|
+
commerce?: WeaverseNextCommerceContext;
|
|
134
|
+
context?: WeaverseNextRequestContext;
|
|
135
|
+
data: TData;
|
|
136
|
+
weaverse: WeaverseNextClient;
|
|
137
|
+
}
|
|
138
|
+
/** Registered component module shape: `default` + `schema` + optional `loader`. */
|
|
139
|
+
interface WeaverseNextComponent<TProps extends WeaverseNextComponentProps = WeaverseNextComponentProps> {
|
|
140
|
+
default: ComponentType<TProps> | ForwardRefExoticComponent<TProps>;
|
|
141
|
+
loader?: (args: WeaverseNextComponentLoaderArgs) => Promise<unknown>;
|
|
142
|
+
schema: SchemaType;
|
|
143
|
+
}
|
|
144
|
+
/** Input for `client.loadPage`. The Next route maps `params` → `type/handle`. */
|
|
145
|
+
interface WeaverseNextLoadPageInput {
|
|
146
|
+
handle?: string;
|
|
147
|
+
locale?: string;
|
|
148
|
+
type?: PageType;
|
|
149
|
+
[key: string]: unknown;
|
|
150
|
+
}
|
|
151
|
+
interface WeaverseNextClientConfig {
|
|
152
|
+
commerce?: WeaverseNextCommerceContext;
|
|
153
|
+
components: WeaverseNextComponent[];
|
|
154
|
+
/**
|
|
155
|
+
* Injected page fetcher. v0 delegates network I/O to the host app so the
|
|
156
|
+
* adapter can be tested without real Weaverse API calls.
|
|
157
|
+
*/
|
|
158
|
+
fetchPage?: (input: WeaverseNextLoadPageInput) => Promise<WeaverseNextLoaderData | null>;
|
|
159
|
+
/** Injected theme-settings fetcher. */
|
|
160
|
+
fetchThemeSettings?: (context?: WeaverseNextRequestContext) => Promise<unknown>;
|
|
161
|
+
projectId: string;
|
|
162
|
+
requestContext?: WeaverseNextRequestContext;
|
|
163
|
+
themeSchema?: unknown;
|
|
164
|
+
themeSettings?: Record<string, unknown>;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Request-safe client returned by {@link createWeaverseNextClient}. Holds the
|
|
168
|
+
* registry/config plus the currently loaded page data, and is the object passed
|
|
169
|
+
* to component loaders as `weaverse`.
|
|
170
|
+
*/
|
|
171
|
+
interface WeaverseNextClient {
|
|
172
|
+
commerce?: WeaverseNextCommerceContext;
|
|
173
|
+
components: WeaverseNextComponent[];
|
|
174
|
+
/** Currently loaded page payload (set by `loadPage`). */
|
|
175
|
+
data: WeaverseNextLoaderData | null;
|
|
176
|
+
/** Data-connector context handed to the React renderer. */
|
|
177
|
+
dataContext: Record<string, unknown>;
|
|
178
|
+
loadPage: (input?: WeaverseNextLoadPageInput) => Promise<WeaverseNextLoaderData | null>;
|
|
179
|
+
loadThemeSettings: (context?: WeaverseNextRequestContext) => Promise<unknown>;
|
|
180
|
+
projectId: string;
|
|
181
|
+
requestContext?: WeaverseNextRequestContext;
|
|
182
|
+
/** Compatibility alias for `commerce.storefront`. */
|
|
183
|
+
storefront?: WeaverseNextStorefront;
|
|
184
|
+
themeSchema?: unknown;
|
|
185
|
+
themeSettings: Record<string, unknown>;
|
|
186
|
+
}
|
|
187
|
+
type WeaverseProduct = WeaverseResourcePickerData;
|
|
188
|
+
type WeaverseCollection = WeaverseResourcePickerData;
|
|
189
|
+
/**
|
|
190
|
+
* Project identifier accepted by {@link WeaverseNextServerClientConfig}. Either
|
|
191
|
+
* a static string or a (possibly async) resolver that reads the request
|
|
192
|
+
* context — matching Hydrogen's static/dynamic projectId support.
|
|
193
|
+
*/
|
|
194
|
+
type WeaverseNextProjectId = string | ((context?: WeaverseNextRequestContext) => string | Promise<string> | undefined);
|
|
195
|
+
/** Simple Next.js fetch cache options used for published-mode requests. */
|
|
196
|
+
interface WeaverseNextCacheConfig {
|
|
197
|
+
/** Maps to Next's `fetch(..., { next: { revalidate } })`. */
|
|
198
|
+
revalidate?: number | false;
|
|
199
|
+
/** Maps to Next's `fetch(..., { next: { tags } })`. */
|
|
200
|
+
tags?: string[];
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Per-request fetch options for {@link WeaverseNextServerClient.fetchWithCache}.
|
|
204
|
+
* Plain `RequestInit` plus the same simple Next cache knobs as
|
|
205
|
+
* {@link WeaverseNextCacheConfig}, so callers never need to import `next/*`.
|
|
206
|
+
*/
|
|
207
|
+
interface WeaverseNextFetchOptions extends RequestInit {
|
|
208
|
+
revalidate?: number | false;
|
|
209
|
+
tags?: string[];
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Public, client-safe Weaverse config bundle. Mirrors Hydrogen's
|
|
213
|
+
* `WeaverseProjectConfigs` minus server secrets — `weaverseApiKey` is never
|
|
214
|
+
* included so it cannot leak into serialized loader data.
|
|
215
|
+
*/
|
|
216
|
+
interface WeaverseNextConfigs {
|
|
217
|
+
isDesignMode: boolean;
|
|
218
|
+
isPreviewMode: boolean;
|
|
219
|
+
isRevisionPreview: boolean;
|
|
220
|
+
projectId: string;
|
|
221
|
+
publicEnv: Record<string, string | undefined>;
|
|
222
|
+
sectionType: string;
|
|
223
|
+
weaverseApiBase: string;
|
|
224
|
+
weaverseHost: string;
|
|
225
|
+
weaversePublicApiBase: string;
|
|
226
|
+
weaverseVersion: string;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Resolved base configs derived from request context + env. Includes the
|
|
230
|
+
* server-only `weaverseApiKey`, so this stays internal to the server client and
|
|
231
|
+
* is never serialized into loader data.
|
|
232
|
+
*/
|
|
233
|
+
interface WeaverseNextBaseConfigs {
|
|
234
|
+
envProjectId: string;
|
|
235
|
+
isDesignMode: boolean;
|
|
236
|
+
isPreviewMode: boolean;
|
|
237
|
+
isRevisionPreview: boolean;
|
|
238
|
+
publicEnv: Record<string, string | undefined>;
|
|
239
|
+
queryProjectId: string;
|
|
240
|
+
sectionType: string;
|
|
241
|
+
weaverseApiBase: string;
|
|
242
|
+
weaverseApiKey: string;
|
|
243
|
+
weaverseHost: string;
|
|
244
|
+
weaverseVersion: string;
|
|
245
|
+
}
|
|
246
|
+
/** Theme settings payload returned by {@link WeaverseNextServerClient.loadThemeSettings}. */
|
|
247
|
+
interface WeaverseNextThemeSettingsResponse {
|
|
248
|
+
_error?: string;
|
|
249
|
+
_loadFailed?: boolean;
|
|
250
|
+
merchantOverrides?: Record<string, unknown>;
|
|
251
|
+
publicEnv?: Record<string, string | undefined>;
|
|
252
|
+
schema?: unknown;
|
|
253
|
+
staticContent?: Record<string, unknown>;
|
|
254
|
+
theme?: Record<string, unknown>;
|
|
255
|
+
[key: string]: unknown;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Options for {@link WeaverseNextServerClient.loadThemeSettings}. Cache knobs
|
|
259
|
+
* only — the server client always reads the request context it was created
|
|
260
|
+
* with, so there is no per-call context override.
|
|
261
|
+
*/
|
|
262
|
+
interface WeaverseNextThemeSettingsOptions extends WeaverseNextCacheConfig {
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Config for {@link createWeaverseNextServerClient}. Unlike
|
|
266
|
+
* {@link WeaverseNextClientConfig} (which delegates network I/O to injected
|
|
267
|
+
* fetchers), the server client performs the real Weaverse API fetch itself, so
|
|
268
|
+
* it accepts request context, env, and cache options instead.
|
|
269
|
+
*/
|
|
270
|
+
interface WeaverseNextServerClientConfig {
|
|
271
|
+
cache?: WeaverseNextCacheConfig;
|
|
272
|
+
commerce?: WeaverseNextCommerceContext;
|
|
273
|
+
components: WeaverseNextComponent[];
|
|
274
|
+
/** Plain env map; falls back to `process.env` for any missing key. */
|
|
275
|
+
env?: Record<string, string | undefined>;
|
|
276
|
+
/** Custom `fetch` (mainly for tests); defaults to the global `fetch`. */
|
|
277
|
+
fetch?: typeof fetch;
|
|
278
|
+
/** Per-request network timeout in ms. Defaults to 10s. */
|
|
279
|
+
fetchTimeoutMs?: number;
|
|
280
|
+
projectId?: WeaverseNextProjectId;
|
|
281
|
+
requestContext?: WeaverseNextRequestContext;
|
|
282
|
+
themeSchema?: unknown;
|
|
283
|
+
themeSettings?: Record<string, unknown>;
|
|
284
|
+
/** Optional override for the resolved Weaverse public API base. */
|
|
285
|
+
weaverseApiBase?: string;
|
|
286
|
+
/** Optional override for the resolved Weaverse host. */
|
|
287
|
+
weaverseHost?: string;
|
|
288
|
+
weaverseVersion?: string;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Server-side Weaverse client returned by {@link createWeaverseNextServerClient}.
|
|
292
|
+
* Closes the gap with Hydrogen's `context.weaverse.loadPage(...)` by performing
|
|
293
|
+
* the real Weaverse API fetch in Next server components/route handlers. It is
|
|
294
|
+
* also assignable to {@link WeaverseNextClient} so it can be passed straight to
|
|
295
|
+
* `runWeaverseComponentLoaders` and the renderer/runtime.
|
|
296
|
+
*/
|
|
297
|
+
interface WeaverseNextServerClient extends WeaverseNextClient {
|
|
298
|
+
/** Public, client-safe resolved configs (no server secrets). */
|
|
299
|
+
configs: WeaverseNextConfigs;
|
|
300
|
+
fetchWithCache: <T = unknown>(url: string, options?: WeaverseNextFetchOptions) => Promise<T>;
|
|
301
|
+
loadPage: (input?: WeaverseNextLoadPageInput) => Promise<WeaverseNextLoaderData | null>;
|
|
302
|
+
/**
|
|
303
|
+
* Load theme settings. Pass cache options (`revalidate` / `tags`) only — the
|
|
304
|
+
* request context is the one the client was created with, so there is no
|
|
305
|
+
* per-call context override. The parameter is typed broadly purely to stay
|
|
306
|
+
* assignable to the base {@link WeaverseNextClient.loadThemeSettings}; any
|
|
307
|
+
* non-cache fields are ignored.
|
|
308
|
+
*/
|
|
309
|
+
loadThemeSettings: (options?: WeaverseNextThemeSettingsOptions | WeaverseNextRequestContext) => Promise<WeaverseNextThemeSettingsResponse>;
|
|
310
|
+
/** Resolve the effective projectId (query → function → string → env). */
|
|
311
|
+
resolveProjectId: () => Promise<string>;
|
|
312
|
+
}
|
|
313
|
+
/** Input for {@link WeaverseNextServerClient.loadPage}. */
|
|
314
|
+
interface WeaverseNextServerLoadPageInput extends WeaverseNextLoadPageInput {
|
|
315
|
+
/** Per-call cache override merged over the client-level `cache` config. */
|
|
316
|
+
cache?: WeaverseNextCacheConfig;
|
|
317
|
+
/** Route-level project override (multi-project), like Hydrogen. */
|
|
318
|
+
projectId?: string;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
export type { WeaverseNextThemeSettingsStore as A, WeaverseProduct as B, WeaverseCollection as W, WeaverseNextBaseConfigs as a, WeaverseNextCacheConfig as b, WeaverseNextClient as c, WeaverseNextClientConfig as d, WeaverseNextCommerceContext as e, WeaverseNextComponent as f, WeaverseNextComponentData as g, WeaverseNextComponentLoaderArgs as h, WeaverseNextComponentProps as i, WeaverseNextConfigs as j, WeaverseNextFetchOptions as k, WeaverseNextI18n as l, WeaverseNextLoadPageInput as m, WeaverseNextLoaderData as n, WeaverseNextPageData as o, WeaverseNextProjectId as p, WeaverseNextRequestContext as q, WeaverseNextRequestInfo as r, WeaverseNextRuntimeConfig as s, WeaverseNextRuntimeInternal as t, WeaverseNextServerClient as u, WeaverseNextServerClientConfig as v, WeaverseNextServerLoadPageInput as w, WeaverseNextStorefront as x, WeaverseNextThemeSettingsOptions as y, WeaverseNextThemeSettingsResponse as z };
|
package/package.json
CHANGED
|
@@ -2,11 +2,24 @@
|
|
|
2
2
|
"name": "@weaverse/next",
|
|
3
3
|
"author": "Weaverse Team",
|
|
4
4
|
"description": "Next.js App Router integration for building Weaverse-powered storefronts",
|
|
5
|
-
"version": "0.1.0-alpha.
|
|
5
|
+
"version": "0.1.0-alpha.2",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"typings": "dist/index.d.ts",
|
|
9
9
|
"module": "dist/index.mjs",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"import": "./dist/index.mjs",
|
|
14
|
+
"require": "./dist/index.js"
|
|
15
|
+
},
|
|
16
|
+
"./server": {
|
|
17
|
+
"types": "./dist/server.d.ts",
|
|
18
|
+
"import": "./dist/server.mjs",
|
|
19
|
+
"require": "./dist/server.js"
|
|
20
|
+
},
|
|
21
|
+
"./package.json": "./package.json"
|
|
22
|
+
},
|
|
10
23
|
"publishConfig": {
|
|
11
24
|
"access": "public",
|
|
12
25
|
"@weaverse:registry": "https://registry.npmjs.org"
|
|
@@ -30,7 +43,8 @@
|
|
|
30
43
|
},
|
|
31
44
|
"tsup": {
|
|
32
45
|
"entry": [
|
|
33
|
-
"src/index.ts"
|
|
46
|
+
"src/index.ts",
|
|
47
|
+
"src/server.ts"
|
|
34
48
|
],
|
|
35
49
|
"format": [
|
|
36
50
|
"esm",
|
|
@@ -40,13 +54,18 @@
|
|
|
40
54
|
"sourcemap": true,
|
|
41
55
|
"clean": true,
|
|
42
56
|
"outDir": "dist",
|
|
43
|
-
"treeshake": true
|
|
57
|
+
"treeshake": true,
|
|
58
|
+
"external": [
|
|
59
|
+
"next",
|
|
60
|
+
"next/navigation"
|
|
61
|
+
]
|
|
44
62
|
},
|
|
45
63
|
"dependencies": {
|
|
46
64
|
"@weaverse/react": "5.16.3",
|
|
47
65
|
"@weaverse/schema": "0.10.0"
|
|
48
66
|
},
|
|
49
67
|
"peerDependencies": {
|
|
68
|
+
"next": ">=14",
|
|
50
69
|
"react": ">=19",
|
|
51
70
|
"react-dom": ">=19"
|
|
52
71
|
}
|