@weaverse/hydrogen 1.3.2 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,12 +1,183 @@
1
1
  // src/index.ts
2
- export * from "@weaverse/react";
2
+ import {
3
+ Weaverse,
4
+ WeaverseItemStore
5
+ } from "@weaverse/react";
3
6
 
4
- // src/client.ts
5
- import "@shopify/hydrogen";
7
+ // src/WeaverseHydrogenRoot.tsx
8
+ import { Await, useLoaderData } from "@remix-run/react";
9
+ import { WeaverseRoot } from "@weaverse/react";
10
+ import React, { Suspense } from "react";
11
+ import { ErrorBoundary } from "react-error-boundary";
12
+
13
+ // src/context.ts
14
+ import { isBrowser } from "@weaverse/react";
15
+ import { createContext } from "react";
16
+ function createCachedWeaverseInstance(params, components) {
17
+ if (isBrowser) {
18
+ window.__weaverses = window.__weaverses || [];
19
+ let weaverse = window.__weaverses.find((w) => {
20
+ let { pathname, search } = w.requestInfo;
21
+ let { __cachedId } = w.data;
22
+ return pathname === params.requestInfo.pathname && search === params.requestInfo.search && __cachedId === params.data.__cachedId;
23
+ });
24
+ if (!weaverse) {
25
+ weaverse = new WeaverseHydrogen(params, components);
26
+ window.__weaverses.push(weaverse);
27
+ console.log("\u{1F4BF} Weaverse", weaverse);
28
+ }
29
+ return weaverse;
30
+ }
31
+ return new WeaverseHydrogen(params, components);
32
+ }
33
+ function createWeaverseInstance(weaverseData, components) {
34
+ let { page, configs, project, pageAssignment } = weaverseData || {};
35
+ let weaverse = createCachedWeaverseInstance(
36
+ {
37
+ ...configs,
38
+ data: page || {},
39
+ pageId: page?.id,
40
+ internal: { project, pageAssignment }
41
+ },
42
+ components
43
+ );
44
+ return weaverse;
45
+ }
46
+ var ThemeProvider = createContext(null);
47
+ ThemeProvider.displayName = "WeaverseThemeProvider";
48
+
49
+ // src/hooks/use-studio.ts
50
+ import { useNavigate, useRevalidator } from "@remix-run/react";
51
+ import { isIframe, loadScript } from "@weaverse/react";
52
+ import { useEffect } from "react";
53
+
54
+ // src/hooks/use-theme-context.ts
55
+ import { useContext } from "react";
56
+ function useThemeContext() {
57
+ let themeContext = useContext(ThemeProvider);
58
+ if (!themeContext) {
59
+ throw new Error(
60
+ `useThemeContext must be used within a ThemeProvider. Make sure to wrap your app in the withWeaverse HoC.`
61
+ );
62
+ }
63
+ return themeContext;
64
+ }
65
+
66
+ // src/hooks/use-studio.ts
67
+ function useStudio(weaverse) {
68
+ let { revalidate } = useRevalidator();
69
+ let navigate = useNavigate();
70
+ let themeSettingsStore = useThemeContext();
71
+ let { isDesignMode, weaverseHost, weaverseVersion } = weaverse;
72
+ let isStudio = isIframe && isDesignMode && weaverseHost && weaverseVersion;
73
+ useEffect(() => {
74
+ if (isStudio) {
75
+ weaverse.internal = {
76
+ ...weaverse.internal,
77
+ navigate,
78
+ revalidate,
79
+ themeSettingsStore
80
+ };
81
+ window.__weaverse = weaverse;
82
+ if (window.weaverseStudio) {
83
+ window.weaverseStudio.init(weaverse);
84
+ } else {
85
+ let studioSrc = `${weaverseHost}/assets/studio/hydrogen/index.js?v=${weaverseVersion}`;
86
+ loadScript(studioSrc);
87
+ }
88
+ }
89
+ }, [weaverse]);
90
+ }
91
+
92
+ // src/hooks/use-theme-settings.ts
93
+ import { useSyncExternalStore } from "react";
94
+ var ThemeSettingsStore = class {
95
+ settings = null;
96
+ listeners = [];
97
+ countries;
98
+ schema;
99
+ publicEnv;
100
+ constructor(data) {
101
+ let { theme, countries, schema, publicEnv } = data || {};
102
+ this.settings = theme || null;
103
+ this.countries = countries;
104
+ this.schema = schema;
105
+ this.publicEnv = publicEnv;
106
+ }
107
+ updateThemeSettings = (newSettings) => {
108
+ this.settings = { ...this.settings, ...newSettings };
109
+ this.emitChange();
110
+ };
111
+ subscribe = (listener) => {
112
+ this.listeners = [...this.listeners, listener];
113
+ return () => {
114
+ this.listeners = this.listeners.filter((l) => l !== listener);
115
+ };
116
+ };
117
+ getSnapshot = () => {
118
+ return this.settings;
119
+ };
120
+ getServerSnapshot = () => {
121
+ return this.settings;
122
+ };
123
+ emitChange = () => {
124
+ for (let listener of this.listeners) {
125
+ listener();
126
+ }
127
+ };
128
+ };
129
+ function useThemeSettings() {
130
+ let themeSettingsStore = useThemeContext();
131
+ let settings = useSyncExternalStore(
132
+ themeSettingsStore.subscribe,
133
+ themeSettingsStore.getSnapshot,
134
+ themeSettingsStore.getServerSnapshot
135
+ );
136
+ return settings;
137
+ }
138
+
139
+ // src/WeaverseHydrogenRoot.tsx
140
+ function WeaverseHydrogenRoot({
141
+ errorComponent: ErrorComponent = FallbackError,
142
+ components
143
+ }) {
144
+ let loaderData = useLoaderData();
145
+ let data = loaderData?.weaverseData;
146
+ if (data) {
147
+ if (data instanceof Promise) {
148
+ return /* @__PURE__ */ React.createElement(ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__PURE__ */ React.createElement(Suspense, null, /* @__PURE__ */ React.createElement(Await, { resolve: data }, (resolvedData) => {
149
+ return /* @__PURE__ */ React.createElement(RenderRoot, { data: resolvedData, components });
150
+ })));
151
+ }
152
+ return /* @__PURE__ */ React.createElement(RenderRoot, { data, components });
153
+ }
154
+ return /* @__PURE__ */ React.createElement(
155
+ ErrorComponent,
156
+ {
157
+ error: { message: "No Weaverse data return from route loader!" }
158
+ }
159
+ );
160
+ }
161
+ function RenderRoot(props) {
162
+ let { data, components } = props;
163
+ let weaverse = createWeaverseInstance(data, components);
164
+ useStudio(weaverse);
165
+ return /* @__PURE__ */ React.createElement(WeaverseRoot, { context: weaverse });
166
+ }
167
+ function withWeaverse(Component) {
168
+ return (props) => {
169
+ let { weaverseTheme } = useLoaderData();
170
+ let themeSettingsStore = new ThemeSettingsStore(weaverseTheme);
171
+ return /* @__PURE__ */ React.createElement(ThemeProvider.Provider, { value: themeSettingsStore }, /* @__PURE__ */ React.createElement(Component, { ...props }));
172
+ };
173
+ }
174
+ function FallbackError({ error }) {
175
+ return /* @__PURE__ */ React.createElement("div", null, error?.message || "An unexpected error occurred");
176
+ }
6
177
 
7
178
  // package.json
8
179
  var package_default = {
9
- version: "1.3.2",
180
+ version: "1.4.1",
10
181
  license: "MIT",
11
182
  main: "dist/index.js",
12
183
  typings: "dist/index.d.ts",
@@ -18,7 +189,7 @@ var package_default = {
18
189
  "dist/*"
19
190
  ],
20
191
  engines: {
21
- node: ">=10"
192
+ node: ">=16"
22
193
  },
23
194
  scripts: {
24
195
  start: "npm run dev",
@@ -41,7 +212,7 @@ var package_default = {
41
212
  dependencies: {
42
213
  "@remix-run/react": "1.19.1",
43
214
  "@shopify/hydrogen": "2023.7.8",
44
- "@weaverse/react": "1.3.2",
215
+ "@weaverse/react": "1.4.1",
45
216
  "react-error-boundary": "^4.0.11"
46
217
  },
47
218
  devDependencies: {
@@ -80,51 +251,61 @@ function getWeaverseConfigs(request, env) {
80
251
  }
81
252
  };
82
253
  }
83
- function getWeaverseCsp(request) {
84
- let url = new URL(request.url);
85
- let weaverseHost = url.searchParams.get("weaverseHost");
86
- let weaverseHosts = ["https://*.weaverse.io"];
87
- if (weaverseHost) {
88
- weaverseHosts.push(weaverseHost);
89
- }
90
- return {
91
- frameAncestors: weaverseHosts,
92
- defaultSrc: [
93
- "'self'",
94
- "https://cdn.shopify.com",
95
- "https://shopify.com",
96
- "https://*.youtube.com",
97
- ...weaverseHosts
98
- ],
99
- styleSrc: [
100
- "'self'",
101
- "'unsafe-inline'",
102
- "https://cdn.shopify.com",
103
- ...weaverseHosts
104
- ]
105
- };
106
- }
107
254
 
108
- // src/client.ts
255
+ // src/weaverse-client.ts
109
256
  var WeaverseClient = class {
257
+ API = "api/public/project";
258
+ clientVersion = package_default.version;
259
+ basePageConfigs;
260
+ basePageRequestBody;
261
+ storefront;
262
+ // storefront: Storefront<I18nLocale>
263
+ components;
264
+ countries;
265
+ themeSchema;
266
+ configs;
267
+ withCache;
268
+ // withCache: ReturnType<typeof createWithCache>
110
269
  constructor(args) {
111
- this.API = "api/public/project";
112
- this.clientVersion = package_default.version;
113
- this.fetchWithCache = (url, options) => {
114
- let cacheKey = [url, options.body];
115
- let { strategy = this.storefront.CacheShort(), ...reqInit } = options;
116
- let res = this.withCache(cacheKey, strategy, async () => {
117
- let response = await fetch(url, reqInit);
118
- if (!response.ok) {
119
- throw new Error("Something went wrong. Skipping cache.");
120
- }
121
- return await response.json();
122
- });
123
- return res;
270
+ let { configs, storefront, components, countries, withCache, themeSchema } = args;
271
+ this.storefront = storefront;
272
+ this.components = components;
273
+ this.countries = countries;
274
+ this.themeSchema = themeSchema;
275
+ this.configs = configs;
276
+ this.withCache = withCache;
277
+ this.basePageConfigs = {
278
+ projectId: configs.projectId,
279
+ weaverseHost: configs.weaverseHost,
280
+ weaverseVersion: configs.weaverseVersion,
281
+ isDesignMode: configs.isDesignMode
124
282
  };
125
- this.loadThemeSettings = async (strategy) => {
283
+ this.basePageRequestBody = {
284
+ countries,
285
+ isDesignMode: this.configs.isDesignMode,
286
+ i18n: storefront.i18n,
287
+ projectId: this.configs.projectId
288
+ };
289
+ }
290
+ fetchWithCache = (url, options) => {
291
+ let cacheKey = [url, options.body];
292
+ let { strategy = this.storefront.CacheShort(), ...reqInit } = options;
293
+ let res = this.withCache(cacheKey, strategy, async () => {
294
+ let response = await fetch(url, reqInit);
295
+ if (!response.ok) {
296
+ throw new Error("Something went wrong. Skipping cache.");
297
+ }
298
+ return await response.json();
299
+ });
300
+ return res;
301
+ };
302
+ loadThemeSettings = async (strategy) => {
303
+ try {
126
304
  let { API, configs } = this;
127
305
  let { weaverseHost, projectId } = configs;
306
+ if (!projectId) {
307
+ throw new Error("Missing Weaverse projectId!");
308
+ }
128
309
  let res = await this.fetchWithCache(
129
310
  `${weaverseHost}/${API}/${projectId}/configs`,
130
311
  { strategy }
@@ -142,312 +323,161 @@ var WeaverseClient = class {
142
323
  }
143
324
  }
144
325
  return data;
145
- };
146
- this.loadPage = async (args, configs = {}) => {
147
- return new Promise(async (resolve, reject) => {
148
- try {
149
- let { request, params } = args;
150
- let { strategy, ...pageLoadParams } = configs;
151
- let body = {
152
- ...this.basePageRequestBody,
153
- params: pageLoadParams,
154
- url: request.url
155
- };
156
- let reqInit = {
157
- method: "POST",
158
- body: JSON.stringify(body)
159
- };
160
- let url = `${this.configs.weaverseHost}/${this.API}`;
161
- let payload;
162
- if (this.configs.isDesignMode) {
163
- payload = await fetch(url, reqInit).then((res) => res.json());
164
- } else {
165
- payload = await this.fetchWithCache(url, {
166
- ...reqInit,
167
- strategy
168
- });
169
- }
170
- let { page, project, pageAssignment } = payload;
171
- if (!page || !project || !pageAssignment) {
172
- return reject(
173
- new Error(
174
- // @ts-ignore
175
- payload?.error || "Invalid Weaverse project payload!"
176
- )
177
- );
178
- }
179
- if (page?.items) {
180
- let items = page.items;
181
- page.items = await Promise.all(
182
- items.map((item) => this.execComponentLoader(item, args))
183
- );
184
- }
185
- let data = {
186
- page,
187
- project,
188
- pageAssignment,
189
- configs: {
190
- ...this.basePageConfigs,
191
- requestInfo: {
192
- params,
193
- i18n: this.storefront.i18n,
194
- queries: getRequestQueries(request),
195
- pathname: new URL(request.url).pathname,
196
- search: new URL(request.url).search
197
- }
198
- }
199
- };
200
- return resolve(data);
201
- } catch (err) {
202
- console.log(`\u274C [Weaverse page]`, err);
203
- reject(err);
326
+ } catch (err) {
327
+ console.log(`\u274C [Weaverse theme settings]`, err);
328
+ return null;
329
+ }
330
+ };
331
+ loadPage = async (args, configs = {}) => {
332
+ return new Promise(async (resolve, reject) => {
333
+ try {
334
+ if (!this.configs.projectId) {
335
+ throw new Error("Missing Weaverse projectId!");
204
336
  }
205
- });
206
- };
207
- this.execComponentLoader = async (item, args) => {
208
- let schema = this.components.find(
209
- ({ schema: schema2 }) => schema2?.type === item.type
210
- );
211
- let { loader } = schema || {};
212
- if (loader && typeof loader === "function") {
213
- try {
214
- return {
215
- ...item,
216
- loaderData: await loader({
217
- itemData: item,
218
- ...args
219
- })
220
- };
221
- } catch (err) {
222
- console.log(`\u274C [Weaverse item loader]`, item.id, err);
223
- return item;
337
+ let { request, params } = args;
338
+ let { strategy, ...pageLoadParams } = configs;
339
+ let body = {
340
+ ...this.basePageRequestBody,
341
+ params: pageLoadParams,
342
+ url: request.url
343
+ };
344
+ let reqInit = {
345
+ method: "POST",
346
+ body: JSON.stringify(body)
347
+ };
348
+ let url = `${this.configs.weaverseHost}/${this.API}`;
349
+ let payload;
350
+ if (this.configs.isDesignMode) {
351
+ payload = await fetch(url, reqInit).then((res) => res.json());
352
+ } else {
353
+ payload = await this.fetchWithCache(url, {
354
+ ...reqInit,
355
+ strategy
356
+ });
224
357
  }
358
+ let { page, project, pageAssignment } = payload;
359
+ if (!page || !project || !pageAssignment) {
360
+ throw new Error(
361
+ // @ts-ignore
362
+ payload?.error || "Invalid Weaverse project payload!"
363
+ );
364
+ }
365
+ if (page?.items) {
366
+ let items = page.items;
367
+ page.items = await Promise.all(
368
+ items.map((item) => this.execComponentLoader(item, args))
369
+ );
370
+ }
371
+ let data = {
372
+ page,
373
+ project,
374
+ pageAssignment,
375
+ configs: {
376
+ ...this.basePageConfigs,
377
+ requestInfo: {
378
+ params,
379
+ i18n: this.storefront.i18n,
380
+ queries: getRequestQueries(request),
381
+ pathname: new URL(request.url).pathname,
382
+ search: new URL(request.url).search
383
+ }
384
+ }
385
+ };
386
+ return resolve(data);
387
+ } catch (err) {
388
+ console.log(`\u274C [Weaverse page]`, err);
389
+ reject(err);
225
390
  }
226
- return item;
227
- };
228
- let { configs, storefront, components, countries, withCache, themeSchema } = args;
229
- this.storefront = storefront;
230
- this.components = components;
231
- this.countries = countries;
232
- this.themeSchema = themeSchema;
233
- this.configs = configs;
234
- this.withCache = withCache;
235
- this.basePageConfigs = {
236
- projectId: configs.projectId,
237
- weaverseHost: configs.weaverseHost,
238
- weaverseVersion: configs.weaverseVersion,
239
- isDesignMode: configs.isDesignMode
240
- };
241
- this.basePageRequestBody = {
242
- countries,
243
- isDesignMode: this.configs.isDesignMode,
244
- i18n: storefront.i18n,
245
- projectId: this.configs.projectId
246
- };
247
- }
248
- };
249
-
250
- // src/hooks/use-theme-settings.ts
251
- import { useSyncExternalStore } from "react";
252
-
253
- // src/hooks/use-theme-context.ts
254
- import { useContext } from "react";
255
-
256
- // src/context.ts
257
- import { Weaverse, isBrowser } from "@weaverse/react";
258
- import { createContext } from "react";
259
- function createCachedWeaverseInstance(init) {
260
- if (isBrowser) {
261
- window.__weaverses = window.__weaverses || [];
262
- let weaverse = window.__weaverses.find((w) => {
263
- let { pathname, search } = w.requestInfo;
264
- let { __cachedId } = w.data;
265
- return pathname === init.requestInfo.pathname && search === init.requestInfo.search && __cachedId === init.data.__cachedId;
266
- });
267
- if (!weaverse) {
268
- weaverse = new Weaverse(init);
269
- window.__weaverses.push(weaverse);
270
- console.log("\u{1F4BF} Weaverse", weaverse);
271
- }
272
- return weaverse;
273
- }
274
- return new Weaverse(init);
275
- }
276
- function createWeaverseInstance(weaverseData, components) {
277
- let { page, configs, project, pageAssignment } = weaverseData || {};
278
- let weaverse = createCachedWeaverseInstance({
279
- ...configs,
280
- data: page || {},
281
- pageId: page?.id,
282
- platformType: "shopify-hydrogen",
283
- internal: { project, pageAssignment }
284
- });
285
- components.forEach((comp) => {
286
- weaverse.registerElement({
287
- type: comp?.schema?.type,
288
- Component: comp?.default,
289
- schema: comp?.schema,
290
- loader: comp?.loader
291
391
  });
292
- });
293
- return weaverse;
294
- }
295
- var ThemeProvider = createContext(null);
296
- ThemeProvider.displayName = "WeaverseThemeProvider";
297
-
298
- // src/hooks/use-theme-context.ts
299
- function useThemeContext() {
300
- let themeContext = useContext(ThemeProvider);
301
- if (!themeContext) {
302
- throw new Error(
303
- `useThemeContext must be used within a ThemeProvider. Make sure to wrap your app in the withWeaverse HoC.`
392
+ };
393
+ execComponentLoader = async (item, args) => {
394
+ let schema = this.components.find(
395
+ ({ schema: schema2 }) => schema2?.type === item.type
304
396
  );
305
- }
306
- return themeContext;
307
- }
308
-
309
- // src/hooks/use-theme-settings.ts
310
- var ThemeSettingsStore = class {
311
- constructor(data) {
312
- this.settings = null;
313
- this.listeners = [];
314
- this.updateThemeSettings = (newSettings) => {
315
- this.settings = { ...this.settings, ...newSettings };
316
- this.emitChange();
317
- };
318
- this.subscribe = (listener) => {
319
- this.listeners = [...this.listeners, listener];
320
- return () => {
321
- this.listeners = this.listeners.filter((l) => l !== listener);
322
- };
323
- };
324
- this.getSnapshot = () => {
325
- return this.settings;
326
- };
327
- this.getServerSnapshot = () => {
328
- return this.settings;
329
- };
330
- this.emitChange = () => {
331
- for (let listener of this.listeners) {
332
- listener();
397
+ let { loader } = schema || {};
398
+ if (loader && typeof loader === "function") {
399
+ try {
400
+ return {
401
+ ...item,
402
+ loaderData: await loader({
403
+ itemData: item,
404
+ ...args
405
+ })
406
+ };
407
+ } catch (err) {
408
+ console.log(`\u274C [Weaverse item loader]`, item.id, err);
409
+ return item;
333
410
  }
334
- };
335
- let { theme, countries, schema, publicEnv } = data || {};
336
- this.settings = theme || null;
337
- this.countries = countries;
338
- this.schema = schema;
339
- this.publicEnv = publicEnv;
340
- }
411
+ }
412
+ return item;
413
+ };
341
414
  };
342
- function useThemeSettings() {
343
- let themeSettingsStore = useThemeContext();
344
- let settings = useSyncExternalStore(
345
- themeSettingsStore.subscribe,
346
- themeSettingsStore.getSnapshot,
347
- themeSettingsStore.getServerSnapshot
348
- );
349
- return settings;
350
- }
351
415
 
352
416
  // src/wrappers.ts
353
417
  import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from "@shopify/hydrogen";
354
- import { createContentSecurityPolicy as hydrogen_createContentSecurityPolicy } from "@shopify/hydrogen";
355
418
  function getSelectedProductOptions(request) {
356
419
  let options = hydrogen_getSelectedProductOptions(request);
357
420
  return options.filter(
358
421
  ({ name }) => name !== "isDesignMode" && !name.startsWith("weaverse")
359
422
  );
360
423
  }
361
- function createContentSecurityPolicy(request, directives) {
362
- let weaverseDirectives = getWeaverseCsp(request);
363
- return hydrogen_createContentSecurityPolicy({
364
- ...directives,
365
- ...weaverseDirectives
366
- });
367
- }
368
-
369
- // src/WeaverseHydrogenRoot.tsx
370
- import { Await, useLoaderData } from "@remix-run/react";
371
- import { WeaverseRoot } from "@weaverse/react";
372
- import React, { Suspense } from "react";
373
- import { ErrorBoundary } from "react-error-boundary";
374
424
 
375
- // src/hooks/use-studio.ts
376
- import { useNavigate, useRevalidator } from "@remix-run/react";
377
- import { isIframe, loadScript } from "@weaverse/react";
378
- import { useEffect } from "react";
379
- function useStudio(weaverse) {
380
- let { revalidate } = useRevalidator();
381
- let navigate = useNavigate();
382
- let themeSettingsStore = useThemeContext();
383
- let { isDesignMode, weaverseHost, weaverseVersion } = weaverse;
384
- let isStudio = isIframe && isDesignMode && weaverseHost && weaverseVersion;
385
- useEffect(() => {
386
- if (isStudio) {
387
- weaverse.internal = {
388
- ...weaverse.internal,
389
- navigate,
390
- revalidate,
391
- themeSettingsStore
392
- };
393
- window.__weaverse = weaverse;
394
- if (window.weaverseStudio) {
395
- window.weaverseStudio.init(weaverse);
396
- } else {
397
- let studioSrc = `${weaverseHost}/assets/studio/hydrogen/index.js?v=${weaverseVersion}`;
398
- loadScript(studioSrc);
425
+ // src/index.ts
426
+ var WeaverseHydrogen = class extends Weaverse {
427
+ platformType = "shopify-hydrogen";
428
+ pageId;
429
+ internal;
430
+ requestInfo;
431
+ constructor(params, components) {
432
+ let { internal, pageId, requestInfo, ...coreParams } = params;
433
+ super({ ...coreParams, ItemConstructor: WeaverseHydrogenItem });
434
+ this.internal = internal;
435
+ this.pageId = pageId;
436
+ this.requestInfo = requestInfo;
437
+ this.registerComponents(components);
438
+ }
439
+ registerElement(element) {
440
+ super.registerElement(element);
441
+ }
442
+ registerComponents(components) {
443
+ components.forEach((comp) => {
444
+ this.registerElement({
445
+ type: comp?.schema?.type,
446
+ Component: comp?.default,
447
+ schema: comp?.schema,
448
+ loader: comp?.loader
449
+ });
450
+ });
451
+ }
452
+ };
453
+ var WeaverseHydrogenItem = class extends WeaverseItemStore {
454
+ constructor(intialData, weaverse) {
455
+ super(intialData, weaverse);
456
+ let { data, ...rest } = intialData;
457
+ this._store = { ...data, ...rest };
458
+ }
459
+ get Element() {
460
+ return super.Element;
461
+ }
462
+ get data() {
463
+ let defaultData = this.Element?.schema?.inspector?.flatMap((group) => group.inputs)?.reduce((a, { defaultValue, name }) => {
464
+ if (name && defaultValue !== null && defaultValue !== void 0) {
465
+ a[name] = defaultValue;
399
466
  }
400
- }
401
- }, [weaverse]);
402
- }
403
-
404
- // src/WeaverseHydrogenRoot.tsx
405
- function WeaverseHydrogenRoot({
406
- errorComponent: ErrorComponent = FallbackError,
407
- components
408
- }) {
409
- let loaderData = useLoaderData();
410
- let data = loaderData?.weaverseData;
411
- if (data) {
412
- if (data instanceof Promise) {
413
- return /* @__PURE__ */ React.createElement(ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__PURE__ */ React.createElement(Suspense, null, /* @__PURE__ */ React.createElement(Await, { resolve: data }, (resolvedData) => {
414
- return /* @__PURE__ */ React.createElement(RenderRoot, { data: resolvedData, components });
415
- })));
416
- }
417
- return /* @__PURE__ */ React.createElement(RenderRoot, { data, components });
467
+ return a;
468
+ }, {});
469
+ return { ...defaultData, ...super.data };
418
470
  }
419
- return /* @__PURE__ */ React.createElement(
420
- ErrorComponent,
421
- {
422
- error: { message: "No Weaverse data return from route loader!" }
423
- }
424
- );
425
- }
426
- function RenderRoot(props) {
427
- let { data, components } = props;
428
- let weaverse = createWeaverseInstance(data, components);
429
- useStudio(weaverse);
430
- return /* @__PURE__ */ React.createElement(WeaverseRoot, { context: weaverse });
431
- }
432
- var withWeaverse = (Component) => {
433
- return (props) => {
434
- let { weaverseTheme } = useLoaderData();
435
- let themeSettingsStore = new ThemeSettingsStore(weaverseTheme);
436
- return /* @__PURE__ */ React.createElement(ThemeProvider.Provider, { value: themeSettingsStore }, /* @__PURE__ */ React.createElement(Component, { ...props }));
437
- };
438
471
  };
439
- function FallbackError({ error }) {
440
- return /* @__PURE__ */ React.createElement("div", null, error?.message || "An unexpected error occurred");
441
- }
442
472
  export {
443
473
  ThemeSettingsStore,
444
474
  WeaverseClient,
475
+ WeaverseHydrogen,
476
+ WeaverseHydrogenItem,
445
477
  WeaverseHydrogenRoot,
446
- createContentSecurityPolicy,
447
478
  getRequestQueries,
448
479
  getSelectedProductOptions,
449
480
  getWeaverseConfigs,
450
- getWeaverseCsp,
451
481
  useThemeSettings,
452
482
  withWeaverse
453
483
  };