@weaverse/hydrogen 4.2.2 → 4.2.5
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.d.mts +71 -152
- package/dist/index.d.ts +71 -152
- package/dist/index.js +247 -301
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +250 -298
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createWithCache, generateCacheControlHeader, getSelectedProductOptions as getSelectedProductOptions$1 } from '@shopify/hydrogen';
|
|
2
|
+
import { Weaverse, WeaverseItemStore, loadScript, WeaverseRoot, isBrowser, EventEmitter } from '@weaverse/react';
|
|
2
3
|
export { isBrowser, isIframe, useChildInstances, useItemInstance, useParentInstance, useWeaverse } from '@weaverse/react';
|
|
3
4
|
import { useLoaderData, Await, useRevalidator, useNavigation, useLocation, useNavigate, useRouteLoaderData } from '@remix-run/react';
|
|
4
|
-
import { memo,
|
|
5
|
+
import { forwardRef, memo, Suspense, createContext, useEffect, useSyncExternalStore } from 'react';
|
|
5
6
|
import { ErrorBoundary } from 'react-error-boundary';
|
|
6
7
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
7
|
-
import { createWithCache, generateCacheControlHeader, getSelectedProductOptions as getSelectedProductOptions$1 } from '@shopify/hydrogen';
|
|
8
8
|
|
|
9
9
|
var __defProp = Object.defineProperty;
|
|
10
10
|
var __export = (target, all) => {
|
|
@@ -12,7 +12,7 @@ var __export = (target, all) => {
|
|
|
12
12
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
13
13
|
};
|
|
14
14
|
|
|
15
|
-
// src/utils.ts
|
|
15
|
+
// src/utils/index.ts
|
|
16
16
|
function getRequestQueries(request) {
|
|
17
17
|
let url = new URL(request.url);
|
|
18
18
|
return Array.from(url.searchParams.entries()).reduce(
|
|
@@ -72,17 +72,6 @@ function generateDataFromSchema({
|
|
|
72
72
|
}
|
|
73
73
|
return data;
|
|
74
74
|
}
|
|
75
|
-
function resizeShopifyImage(imageURL, size) {
|
|
76
|
-
try {
|
|
77
|
-
if (!imageURL.includes("cdn.shopify.com") || size === "original") {
|
|
78
|
-
return imageURL;
|
|
79
|
-
}
|
|
80
|
-
let [, path, ext] = imageURL.match(/(.*\/[\w-_.]+)\.(\w{2,4})/);
|
|
81
|
-
return `${path}_${size}.${ext}`;
|
|
82
|
-
} catch (e) {
|
|
83
|
-
return imageURL;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
75
|
function recursivelyAddDataItem(type, components, items, initData) {
|
|
87
76
|
const component = components.find((c) => c.schema.type === type);
|
|
88
77
|
if (!component) {
|
|
@@ -114,18 +103,8 @@ function recursivelyAddDataItem(type, components, items, initData) {
|
|
|
114
103
|
return id;
|
|
115
104
|
}
|
|
116
105
|
function getPreviewData(type, components, weaverseHost) {
|
|
117
|
-
|
|
118
|
-
project: {
|
|
119
|
-
id: "x",
|
|
120
|
-
weaverseShopId: "shopid",
|
|
121
|
-
name: "Section Preview"
|
|
122
|
-
},
|
|
123
|
-
// pageAssignment: {
|
|
124
|
-
// projectId: "x",
|
|
125
|
-
// type: "CUSTOM",
|
|
126
|
-
// locale: "en-us",
|
|
127
|
-
// handle: "",
|
|
128
|
-
// },
|
|
106
|
+
return {
|
|
107
|
+
project: { id: "x", weaverseShopId: "shop-id", name: "Section Preview" },
|
|
129
108
|
configs: {
|
|
130
109
|
projectId: "x",
|
|
131
110
|
weaverseHost,
|
|
@@ -143,239 +122,24 @@ function getPreviewData(type, components, weaverseHost) {
|
|
|
143
122
|
pathname: "/",
|
|
144
123
|
search: ""
|
|
145
124
|
}
|
|
125
|
+
},
|
|
126
|
+
page: {
|
|
127
|
+
id: "0",
|
|
128
|
+
name: "Preview section",
|
|
129
|
+
rootId: "1",
|
|
130
|
+
items: [
|
|
131
|
+
{
|
|
132
|
+
data: {},
|
|
133
|
+
id: "1",
|
|
134
|
+
type: "main",
|
|
135
|
+
children: [{ id: recursivelyAddDataItem(type, components, []) }]
|
|
136
|
+
}
|
|
137
|
+
]
|
|
146
138
|
}
|
|
147
139
|
};
|
|
148
|
-
let items = [];
|
|
149
|
-
const id = recursivelyAddDataItem(type, components, items);
|
|
150
|
-
const page = {
|
|
151
|
-
id: "0",
|
|
152
|
-
name: "Preview section",
|
|
153
|
-
rootId: "1",
|
|
154
|
-
items: [
|
|
155
|
-
{
|
|
156
|
-
data: {},
|
|
157
|
-
id: "1",
|
|
158
|
-
type: "main",
|
|
159
|
-
children: [
|
|
160
|
-
{
|
|
161
|
-
id
|
|
162
|
-
}
|
|
163
|
-
]
|
|
164
|
-
},
|
|
165
|
-
...items
|
|
166
|
-
]
|
|
167
|
-
};
|
|
168
|
-
const previewData = {
|
|
169
|
-
...initialData,
|
|
170
|
-
page
|
|
171
|
-
};
|
|
172
|
-
return previewData;
|
|
173
|
-
}
|
|
174
|
-
var ThemeSettingsStore = class extends EventEmitter {
|
|
175
|
-
settings = {};
|
|
176
|
-
countries;
|
|
177
|
-
schema;
|
|
178
|
-
publicEnv;
|
|
179
|
-
constructor(data) {
|
|
180
|
-
super();
|
|
181
|
-
let { theme, countries, schema: schema2, publicEnv } = data || {};
|
|
182
|
-
this.settings = { ...theme };
|
|
183
|
-
this.countries = countries;
|
|
184
|
-
this.schema = schema2;
|
|
185
|
-
this.publicEnv = publicEnv;
|
|
186
|
-
if (isBrowser) {
|
|
187
|
-
window.__weaverseThemeSettingsStore = this;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
updateThemeSettings = (newSettings) => {
|
|
191
|
-
this.settings = {
|
|
192
|
-
...this.settings,
|
|
193
|
-
...newSettings
|
|
194
|
-
};
|
|
195
|
-
this.emit(this.settings);
|
|
196
|
-
};
|
|
197
|
-
getSnapshot = () => {
|
|
198
|
-
return this.settings;
|
|
199
|
-
};
|
|
200
|
-
getServerSnapshot = () => {
|
|
201
|
-
return this.settings;
|
|
202
|
-
};
|
|
203
|
-
};
|
|
204
|
-
function useThemeSettingsStore() {
|
|
205
|
-
let data = useRouteLoaderData("root");
|
|
206
|
-
if (isBrowser && window.__weaverseThemeSettingsStore) {
|
|
207
|
-
return window.__weaverseThemeSettingsStore;
|
|
208
|
-
}
|
|
209
|
-
return new ThemeSettingsStore(data?.weaverseTheme);
|
|
210
140
|
}
|
|
211
|
-
function useThemeSettings() {
|
|
212
|
-
let themeSettingsStore = useThemeSettingsStore();
|
|
213
|
-
let settings = useSyncExternalStore(
|
|
214
|
-
themeSettingsStore.subscribe,
|
|
215
|
-
themeSettingsStore.getSnapshot,
|
|
216
|
-
themeSettingsStore.getServerSnapshot
|
|
217
|
-
);
|
|
218
|
-
return settings;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
// src/hooks/use-studio.ts
|
|
222
|
-
function useStudio(weaverse) {
|
|
223
|
-
let { revalidate } = useRevalidator();
|
|
224
|
-
let navigation = useNavigation();
|
|
225
|
-
let { pathname, search } = useLocation();
|
|
226
|
-
let navigate = useNavigate();
|
|
227
|
-
let themeSettingsStore = useThemeSettingsStore();
|
|
228
|
-
let { isDesignMode, weaverseHost, weaverseVersion, isPreviewMode } = weaverse;
|
|
229
|
-
useEffect(() => {
|
|
230
|
-
if (navigation.state === "idle") {
|
|
231
|
-
if (isPreviewMode) {
|
|
232
|
-
let previewSrc = `${weaverseHost}/static/studio/hydrogen/preview.js?v=${weaverseVersion}`;
|
|
233
|
-
loadScript(previewSrc).catch(console.error);
|
|
234
|
-
} else if (isDesignMode) {
|
|
235
|
-
weaverse.internal = {
|
|
236
|
-
...weaverse.internal,
|
|
237
|
-
navigate,
|
|
238
|
-
revalidate,
|
|
239
|
-
themeSettingsStore
|
|
240
|
-
};
|
|
241
|
-
let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`;
|
|
242
|
-
loadScript(studioSrc).then(() => {
|
|
243
|
-
window.weaverseStudio?.init(weaverse);
|
|
244
|
-
}).catch(console.error);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
}, [pathname, search, navigation.state]);
|
|
248
|
-
usePixel(weaverse);
|
|
249
|
-
}
|
|
250
|
-
function usePixel(context) {
|
|
251
|
-
let { projectId, pageId, weaverseHost, isDesignMode } = context;
|
|
252
|
-
useEffect(() => {
|
|
253
|
-
if (!projectId || !pageId || !weaverseHost || isDesignMode) return;
|
|
254
|
-
let url = `${weaverseHost}/api/public/px`;
|
|
255
|
-
let img = new Image();
|
|
256
|
-
img.onload = () => {
|
|
257
|
-
img.remove();
|
|
258
|
-
};
|
|
259
|
-
img.src = `${url}?projectId=${projectId}&pageId=${pageId}`;
|
|
260
|
-
}, []);
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
// src/Effect.tsx
|
|
264
|
-
var WeaverseEffect = memo(
|
|
265
|
-
({ context }) => {
|
|
266
|
-
useStudio(context);
|
|
267
|
-
return null;
|
|
268
|
-
}
|
|
269
|
-
);
|
|
270
141
|
|
|
271
|
-
// src/
|
|
272
|
-
var main_exports = {};
|
|
273
|
-
__export(main_exports, {
|
|
274
|
-
default: () => main_default,
|
|
275
|
-
schema: () => schema
|
|
276
|
-
});
|
|
277
|
-
var Main = forwardRef((props, ref) => {
|
|
278
|
-
let { children, dangerouslySetInnerHTML, ...rest } = props;
|
|
279
|
-
return /* @__PURE__ */ jsx(
|
|
280
|
-
"div",
|
|
281
|
-
{
|
|
282
|
-
ref,
|
|
283
|
-
...rest,
|
|
284
|
-
children,
|
|
285
|
-
dangerouslySetInnerHTML: children ? void 0 : dangerouslySetInnerHTML
|
|
286
|
-
}
|
|
287
|
-
);
|
|
288
|
-
});
|
|
289
|
-
var main_default = Main;
|
|
290
|
-
var schema = {
|
|
291
|
-
type: "main",
|
|
292
|
-
title: "Main",
|
|
293
|
-
inspector: []
|
|
294
|
-
};
|
|
295
|
-
|
|
296
|
-
// src/components/index.ts
|
|
297
|
-
var defaultComponents = [main_exports];
|
|
298
|
-
|
|
299
|
-
// src/context.ts
|
|
300
|
-
function registerComponents(components) {
|
|
301
|
-
for (const comp of components) {
|
|
302
|
-
comp?.schema?.type && WeaverseHydrogen.registerElement({
|
|
303
|
-
type: comp?.schema.type,
|
|
304
|
-
Component: comp.default,
|
|
305
|
-
schema: comp.schema,
|
|
306
|
-
loader: comp.loader
|
|
307
|
-
});
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
function createCachedWeaverseInstance(params) {
|
|
311
|
-
if (isBrowser) {
|
|
312
|
-
window.__weaverses = window.__weaverses || {};
|
|
313
|
-
let weaverse = window.__weaverses[params.pageId];
|
|
314
|
-
if (!weaverse || weaverse?.requestInfo?.pathname !== params.requestInfo.pathname || weaverse?.requestInfo?.search !== params.requestInfo.search) {
|
|
315
|
-
weaverse = new WeaverseHydrogen(params);
|
|
316
|
-
window.__weaverses[params.pageId] = weaverse;
|
|
317
|
-
}
|
|
318
|
-
if (weaverse?.isDesignMode) {
|
|
319
|
-
weaverse.requestInfo = params.requestInfo;
|
|
320
|
-
window.weaverseStudio?.refreshStudio(params);
|
|
321
|
-
}
|
|
322
|
-
return weaverse;
|
|
323
|
-
}
|
|
324
|
-
return new WeaverseHydrogen(params);
|
|
325
|
-
}
|
|
326
|
-
function createWeaverseInstance(weaverseData, components) {
|
|
327
|
-
let { page, configs, project, pageAssignment } = weaverseData || {};
|
|
328
|
-
registerComponents(components);
|
|
329
|
-
registerComponents(defaultComponents);
|
|
330
|
-
return createCachedWeaverseInstance({
|
|
331
|
-
...configs,
|
|
332
|
-
data: page,
|
|
333
|
-
pageId: page?.id,
|
|
334
|
-
internal: { project, pageAssignment }
|
|
335
|
-
});
|
|
336
|
-
}
|
|
337
|
-
var ThemeSettingsProvider = createContext(
|
|
338
|
-
null
|
|
339
|
-
);
|
|
340
|
-
ThemeSettingsProvider.displayName = "WeaverseThemeSettingsProvider";
|
|
341
|
-
var WeaverseHydrogenRoot = memo(
|
|
342
|
-
({
|
|
343
|
-
errorComponent: ErrorComponent = FallbackError,
|
|
344
|
-
components
|
|
345
|
-
}) => {
|
|
346
|
-
let loaderData = useLoaderData();
|
|
347
|
-
let data = loaderData?.weaverseData;
|
|
348
|
-
if (data) {
|
|
349
|
-
if (data instanceof Promise) {
|
|
350
|
-
return /* @__PURE__ */ jsx(ErrorBoundary, { fallbackRender: ErrorComponent, children: /* @__PURE__ */ jsx(Suspense, { children: /* @__PURE__ */ jsx(Await, { resolve: data, children: (resolvedData) => /* @__PURE__ */ jsx(RenderRoot, { data: resolvedData, components }) }) }) });
|
|
351
|
-
}
|
|
352
|
-
return /* @__PURE__ */ jsx(RenderRoot, { data, components });
|
|
353
|
-
}
|
|
354
|
-
return /* @__PURE__ */ jsx(
|
|
355
|
-
ErrorComponent,
|
|
356
|
-
{
|
|
357
|
-
error: { message: "No Weaverse data return from route loader!" }
|
|
358
|
-
}
|
|
359
|
-
);
|
|
360
|
-
}
|
|
361
|
-
);
|
|
362
|
-
function RenderRoot(props) {
|
|
363
|
-
let { data, components } = props;
|
|
364
|
-
let weaverse = createWeaverseInstance(data, components);
|
|
365
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
366
|
-
/* @__PURE__ */ jsx(WeaverseRoot, { context: weaverse }),
|
|
367
|
-
/* @__PURE__ */ jsx(WeaverseEffect, { context: weaverse })
|
|
368
|
-
] });
|
|
369
|
-
}
|
|
370
|
-
function withWeaverse(Component) {
|
|
371
|
-
return (props) => {
|
|
372
|
-
let { settings } = useThemeSettingsStore();
|
|
373
|
-
return /* @__PURE__ */ jsx(ThemeSettingsProvider.Provider, { value: settings, children: /* @__PURE__ */ jsx(Component, { ...props }) });
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
function FallbackError({ error }) {
|
|
377
|
-
return /* @__PURE__ */ jsx("div", { children: error?.message || "An unexpected error occurred" });
|
|
378
|
-
}
|
|
142
|
+
// src/weaverse-client.ts
|
|
379
143
|
var API_PATH = "api/public";
|
|
380
144
|
var DEFAULT_CACHE_STRATEGY = {
|
|
381
145
|
maxAge: 5,
|
|
@@ -396,13 +160,11 @@ var WeaverseClient = class {
|
|
|
396
160
|
env;
|
|
397
161
|
cache;
|
|
398
162
|
waitUntil;
|
|
399
|
-
countries;
|
|
400
163
|
constructor(args) {
|
|
401
164
|
const {
|
|
402
165
|
env,
|
|
403
166
|
storefront,
|
|
404
167
|
components,
|
|
405
|
-
countries,
|
|
406
168
|
cache,
|
|
407
169
|
waitUntil,
|
|
408
170
|
themeSchema,
|
|
@@ -415,7 +177,6 @@ var WeaverseClient = class {
|
|
|
415
177
|
this.env = env;
|
|
416
178
|
this.cache = cache;
|
|
417
179
|
this.waitUntil = waitUntil;
|
|
418
|
-
this.countries = countries;
|
|
419
180
|
this.withCache = createWithCache({ cache, waitUntil, request });
|
|
420
181
|
this.configs = getWeaverseConfigs(request, env);
|
|
421
182
|
this.basePageConfigs = {
|
|
@@ -506,7 +267,6 @@ var WeaverseClient = class {
|
|
|
506
267
|
data = {
|
|
507
268
|
...data,
|
|
508
269
|
schema: this.themeSchema,
|
|
509
|
-
countries: this.countries || [],
|
|
510
270
|
publicEnv: this.configs.publicEnv
|
|
511
271
|
};
|
|
512
272
|
}
|
|
@@ -600,7 +360,6 @@ var WeaverseClient = class {
|
|
|
600
360
|
...basePageConfigs,
|
|
601
361
|
requestInfo: {
|
|
602
362
|
i18n: storefront.i18n,
|
|
603
|
-
// TODO: @hta218 - migrate to Remix hooks
|
|
604
363
|
queries: getRequestQueries(request),
|
|
605
364
|
pathname: new URL(request.url).pathname,
|
|
606
365
|
search: new URL(request.url).search
|
|
@@ -635,14 +394,241 @@ var WeaverseClient = class {
|
|
|
635
394
|
return item;
|
|
636
395
|
};
|
|
637
396
|
};
|
|
397
|
+
|
|
398
|
+
// src/components/main.tsx
|
|
399
|
+
var main_exports = {};
|
|
400
|
+
__export(main_exports, {
|
|
401
|
+
default: () => main_default,
|
|
402
|
+
schema: () => schema
|
|
403
|
+
});
|
|
404
|
+
var Main = forwardRef((props, ref) => {
|
|
405
|
+
let { children, dangerouslySetInnerHTML, ...rest } = props;
|
|
406
|
+
return /* @__PURE__ */ jsx(
|
|
407
|
+
"div",
|
|
408
|
+
{
|
|
409
|
+
ref,
|
|
410
|
+
...rest,
|
|
411
|
+
children,
|
|
412
|
+
dangerouslySetInnerHTML: children ? void 0 : dangerouslySetInnerHTML
|
|
413
|
+
}
|
|
414
|
+
);
|
|
415
|
+
});
|
|
416
|
+
var main_default = Main;
|
|
417
|
+
var schema = {
|
|
418
|
+
type: "main",
|
|
419
|
+
title: "Main",
|
|
420
|
+
inspector: []
|
|
421
|
+
};
|
|
422
|
+
|
|
423
|
+
// src/components/index.ts
|
|
424
|
+
var defaultComponents = [main_exports];
|
|
425
|
+
var ThemeSettingsStore = class extends EventEmitter {
|
|
426
|
+
settings = {};
|
|
427
|
+
schema;
|
|
428
|
+
publicEnv;
|
|
429
|
+
constructor(data) {
|
|
430
|
+
super();
|
|
431
|
+
let { theme, schema: schema2, publicEnv } = data || {};
|
|
432
|
+
this.settings = { ...theme };
|
|
433
|
+
this.schema = schema2;
|
|
434
|
+
this.publicEnv = publicEnv;
|
|
435
|
+
if (isBrowser) {
|
|
436
|
+
window.__weaverseThemeSettingsStore = this;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
updateThemeSettings = (newSettings) => {
|
|
440
|
+
this.settings = {
|
|
441
|
+
...this.settings,
|
|
442
|
+
...newSettings
|
|
443
|
+
};
|
|
444
|
+
this.emit(this.settings);
|
|
445
|
+
};
|
|
446
|
+
getSnapshot = () => {
|
|
447
|
+
return this.settings;
|
|
448
|
+
};
|
|
449
|
+
getServerSnapshot = () => {
|
|
450
|
+
return this.settings;
|
|
451
|
+
};
|
|
452
|
+
};
|
|
453
|
+
function useThemeSettingsStore() {
|
|
454
|
+
let data = useRouteLoaderData("root");
|
|
455
|
+
if (isBrowser && window.__weaverseThemeSettingsStore) {
|
|
456
|
+
return window.__weaverseThemeSettingsStore;
|
|
457
|
+
}
|
|
458
|
+
return new ThemeSettingsStore(data?.weaverseTheme);
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
// src/utils/use-studio.ts
|
|
462
|
+
function useStudio(weaverse) {
|
|
463
|
+
let { revalidate } = useRevalidator();
|
|
464
|
+
let navigation = useNavigation();
|
|
465
|
+
let { pathname, search } = useLocation();
|
|
466
|
+
let navigate = useNavigate();
|
|
467
|
+
let themeSettingsStore = useThemeSettingsStore();
|
|
468
|
+
let { isDesignMode, weaverseHost, weaverseVersion, isPreviewMode } = weaverse;
|
|
469
|
+
useEffect(() => {
|
|
470
|
+
if (navigation.state === "idle") {
|
|
471
|
+
if (isPreviewMode) {
|
|
472
|
+
let previewSrc = `${weaverseHost}/static/studio/hydrogen/preview.js?v=${weaverseVersion}`;
|
|
473
|
+
loadScript(previewSrc).catch(console.error);
|
|
474
|
+
} else if (isDesignMode) {
|
|
475
|
+
weaverse.internal = {
|
|
476
|
+
...weaverse.internal,
|
|
477
|
+
navigate,
|
|
478
|
+
revalidate,
|
|
479
|
+
themeSettingsStore
|
|
480
|
+
};
|
|
481
|
+
let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`;
|
|
482
|
+
loadScript(studioSrc).then(() => {
|
|
483
|
+
window.weaverseStudio?.init(weaverse);
|
|
484
|
+
}).catch(console.error);
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
}, [pathname, search, navigation.state]);
|
|
488
|
+
usePixel(weaverse);
|
|
489
|
+
}
|
|
490
|
+
function usePixel(context) {
|
|
491
|
+
let { projectId, pageId, weaverseHost, isDesignMode } = context;
|
|
492
|
+
useEffect(() => {
|
|
493
|
+
if (!projectId || !pageId || !weaverseHost || isDesignMode) return;
|
|
494
|
+
let url = `${weaverseHost}/api/public/px`;
|
|
495
|
+
let img = new Image();
|
|
496
|
+
img.onload = () => img.remove();
|
|
497
|
+
img.src = `${url}?projectId=${projectId}&pageId=${pageId}`;
|
|
498
|
+
}, []);
|
|
499
|
+
}
|
|
500
|
+
var WeaverseHydrogenItem = class extends WeaverseItemStore {
|
|
501
|
+
constructor(initialData, weaverse) {
|
|
502
|
+
super(initialData, weaverse);
|
|
503
|
+
let { data, ...rest } = initialData;
|
|
504
|
+
Object.assign(this._store, this._schemaData, data, rest);
|
|
505
|
+
}
|
|
506
|
+
get Element() {
|
|
507
|
+
return super.Element;
|
|
508
|
+
}
|
|
509
|
+
get _schemaData() {
|
|
510
|
+
if (this.Element?.schema) {
|
|
511
|
+
let data = {};
|
|
512
|
+
let { inspector } = this.Element.schema;
|
|
513
|
+
if (inspector) {
|
|
514
|
+
for (let group of inspector) {
|
|
515
|
+
for (let input of group.inputs) {
|
|
516
|
+
let { name, defaultValue } = input;
|
|
517
|
+
if (name && defaultValue !== null && defaultValue !== void 0) {
|
|
518
|
+
data[name] = defaultValue;
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
return data;
|
|
524
|
+
}
|
|
525
|
+
return {};
|
|
526
|
+
}
|
|
527
|
+
};
|
|
528
|
+
Weaverse.ItemConstructor = WeaverseHydrogenItem;
|
|
529
|
+
var WeaverseHydrogen = class extends Weaverse {
|
|
530
|
+
platformType = "shopify-hydrogen";
|
|
531
|
+
pageId;
|
|
532
|
+
internal;
|
|
533
|
+
requestInfo;
|
|
534
|
+
static itemInstances;
|
|
535
|
+
static elementRegistry;
|
|
536
|
+
constructor(params) {
|
|
537
|
+
let { internal, pageId, requestInfo, ...coreParams } = params;
|
|
538
|
+
super({ ...coreParams });
|
|
539
|
+
this.internal = internal;
|
|
540
|
+
this.pageId = pageId;
|
|
541
|
+
this.requestInfo = requestInfo;
|
|
542
|
+
}
|
|
543
|
+
};
|
|
544
|
+
function createWeaverseInstance(params) {
|
|
545
|
+
if (isBrowser) {
|
|
546
|
+
window.__weaverses = window.__weaverses || {};
|
|
547
|
+
let weaverse = window.__weaverses[params.pageId];
|
|
548
|
+
if (!weaverse || weaverse?.requestInfo?.pathname !== params.requestInfo.pathname || weaverse?.requestInfo?.search !== params.requestInfo.search) {
|
|
549
|
+
weaverse = new WeaverseHydrogen(params);
|
|
550
|
+
window.__weaverses[params.pageId] = weaverse;
|
|
551
|
+
}
|
|
552
|
+
if (weaverse?.isDesignMode) {
|
|
553
|
+
weaverse.requestInfo = params.requestInfo;
|
|
554
|
+
window.weaverseStudio?.refreshStudio(params);
|
|
555
|
+
}
|
|
556
|
+
return weaverse;
|
|
557
|
+
}
|
|
558
|
+
return new WeaverseHydrogen(params);
|
|
559
|
+
}
|
|
560
|
+
var StudioBridge = memo(({ context }) => {
|
|
561
|
+
useStudio(context);
|
|
562
|
+
return null;
|
|
563
|
+
});
|
|
564
|
+
function RenderRoot(props) {
|
|
565
|
+
let { data, components } = props;
|
|
566
|
+
for (let comp of [...components, ...defaultComponents]) {
|
|
567
|
+
comp?.schema?.type && WeaverseHydrogen.registerElement({
|
|
568
|
+
type: comp?.schema.type,
|
|
569
|
+
Component: comp.default,
|
|
570
|
+
schema: comp.schema,
|
|
571
|
+
loader: comp.loader
|
|
572
|
+
});
|
|
573
|
+
}
|
|
574
|
+
let { page, configs, project, pageAssignment } = data || {};
|
|
575
|
+
let weaverse = createWeaverseInstance({
|
|
576
|
+
...configs,
|
|
577
|
+
data: page,
|
|
578
|
+
pageId: page?.id,
|
|
579
|
+
internal: { project, pageAssignment }
|
|
580
|
+
});
|
|
581
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
582
|
+
/* @__PURE__ */ jsx(WeaverseRoot, { context: weaverse }),
|
|
583
|
+
/* @__PURE__ */ jsx(StudioBridge, { context: weaverse })
|
|
584
|
+
] });
|
|
585
|
+
}
|
|
586
|
+
var WeaverseHydrogenRoot = memo(
|
|
587
|
+
({
|
|
588
|
+
components,
|
|
589
|
+
errorComponent: ErrorComponent = ({ error }) => /* @__PURE__ */ jsx("div", { children: error?.message || "An unexpected error occurred" })
|
|
590
|
+
}) => {
|
|
591
|
+
let loaderData = useLoaderData();
|
|
592
|
+
let data = loaderData?.weaverseData;
|
|
593
|
+
if (data) {
|
|
594
|
+
if (data instanceof Promise) {
|
|
595
|
+
return /* @__PURE__ */ jsx(ErrorBoundary, { fallbackRender: ErrorComponent, children: /* @__PURE__ */ jsx(Suspense, { children: /* @__PURE__ */ jsx(Await, { resolve: data, children: (resolvedData) => /* @__PURE__ */ jsx(RenderRoot, { data: resolvedData, components }) }) }) });
|
|
596
|
+
}
|
|
597
|
+
return /* @__PURE__ */ jsx(RenderRoot, { data, components });
|
|
598
|
+
}
|
|
599
|
+
return /* @__PURE__ */ jsx(
|
|
600
|
+
ErrorComponent,
|
|
601
|
+
{
|
|
602
|
+
error: { message: "No Weaverse data return from route loader!" }
|
|
603
|
+
}
|
|
604
|
+
);
|
|
605
|
+
}
|
|
606
|
+
);
|
|
607
|
+
var ThemeSettingsProvider = createContext(null);
|
|
608
|
+
ThemeSettingsProvider.displayName = "WeaverseThemeSettingsProvider";
|
|
609
|
+
function withWeaverse(Component) {
|
|
610
|
+
return (props) => {
|
|
611
|
+
let { settings } = useThemeSettingsStore();
|
|
612
|
+
return /* @__PURE__ */ jsx(ThemeSettingsProvider.Provider, { value: settings, children: /* @__PURE__ */ jsx(Component, { ...props }) });
|
|
613
|
+
};
|
|
614
|
+
}
|
|
615
|
+
function useThemeSettings() {
|
|
616
|
+
let themeSettingsStore = useThemeSettingsStore();
|
|
617
|
+
let settings = useSyncExternalStore(
|
|
618
|
+
themeSettingsStore.subscribe,
|
|
619
|
+
themeSettingsStore.getSnapshot,
|
|
620
|
+
themeSettingsStore.getServerSnapshot
|
|
621
|
+
);
|
|
622
|
+
return settings;
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
// src/index.ts
|
|
638
626
|
function getSelectedProductOptions(request) {
|
|
639
627
|
let options = getSelectedProductOptions$1(request);
|
|
640
628
|
return options.filter(
|
|
641
629
|
({ name }) => name !== "isDesignMode" && !name.startsWith("weaverse")
|
|
642
630
|
);
|
|
643
631
|
}
|
|
644
|
-
|
|
645
|
-
// src/placeholders.ts
|
|
646
632
|
var IMAGES_PLACEHOLDERS = {
|
|
647
633
|
logo_white: "https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg",
|
|
648
634
|
logo_black: "https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg",
|
|
@@ -675,40 +661,6 @@ var IMAGES_PLACEHOLDERS = {
|
|
|
675
661
|
product_18: "https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg"
|
|
676
662
|
};
|
|
677
663
|
|
|
678
|
-
|
|
679
|
-
var WeaverseHydrogen = class extends Weaverse {
|
|
680
|
-
platformType = "shopify-hydrogen";
|
|
681
|
-
pageId;
|
|
682
|
-
internal;
|
|
683
|
-
requestInfo;
|
|
684
|
-
static itemInstances;
|
|
685
|
-
static elementRegistry;
|
|
686
|
-
constructor(params) {
|
|
687
|
-
let { internal, pageId, requestInfo, ...coreParams } = params;
|
|
688
|
-
super({ ...coreParams });
|
|
689
|
-
this.internal = internal;
|
|
690
|
-
this.pageId = pageId;
|
|
691
|
-
this.requestInfo = requestInfo;
|
|
692
|
-
}
|
|
693
|
-
};
|
|
694
|
-
var WeaverseHydrogenItem = class extends WeaverseItemStore {
|
|
695
|
-
constructor(initialData, weaverse) {
|
|
696
|
-
super(initialData, weaverse);
|
|
697
|
-
let { data, ...rest } = initialData;
|
|
698
|
-
Object.assign(this._store, this._schemaData, data, rest);
|
|
699
|
-
}
|
|
700
|
-
get Element() {
|
|
701
|
-
return super.Element;
|
|
702
|
-
}
|
|
703
|
-
get _schemaData() {
|
|
704
|
-
if (this.Element?.schema) {
|
|
705
|
-
return generateDataFromSchema(this.Element.schema);
|
|
706
|
-
}
|
|
707
|
-
return {};
|
|
708
|
-
}
|
|
709
|
-
};
|
|
710
|
-
Weaverse.ItemConstructor = WeaverseHydrogenItem;
|
|
711
|
-
|
|
712
|
-
export { IMAGES_PLACEHOLDERS, WeaverseClient, WeaverseHydrogen, WeaverseHydrogenItem, WeaverseHydrogenRoot, generateDataFromSchema, getPreviewData, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, recursivelyAddDataItem, resizeShopifyImage, useThemeSettings, withWeaverse };
|
|
664
|
+
export { IMAGES_PLACEHOLDERS, WeaverseClient, WeaverseHydrogen, WeaverseHydrogenItem, WeaverseHydrogenRoot, getSelectedProductOptions, useThemeSettings, withWeaverse };
|
|
713
665
|
//# sourceMappingURL=index.mjs.map
|
|
714
666
|
//# sourceMappingURL=index.mjs.map
|