@weaverse/hydrogen 4.2.1 → 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 +73 -153
- package/dist/index.d.ts +73 -153
- package/dist/index.js +247 -300
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +250 -297
- 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,238 +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
|
-
};
|
|
258
|
-
img.src = `${url}?projectId=${projectId}&pageId=${pageId}`;
|
|
259
|
-
}, []);
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
// src/Effect.tsx
|
|
263
|
-
var WeaverseEffect = memo(
|
|
264
|
-
({ context }) => {
|
|
265
|
-
useStudio(context);
|
|
266
|
-
return null;
|
|
267
|
-
}
|
|
268
|
-
);
|
|
269
141
|
|
|
270
|
-
// src/
|
|
271
|
-
var main_exports = {};
|
|
272
|
-
__export(main_exports, {
|
|
273
|
-
default: () => main_default,
|
|
274
|
-
schema: () => schema
|
|
275
|
-
});
|
|
276
|
-
var Main = forwardRef((props, ref) => {
|
|
277
|
-
let { children, dangerouslySetInnerHTML, ...rest } = props;
|
|
278
|
-
return /* @__PURE__ */ jsx(
|
|
279
|
-
"div",
|
|
280
|
-
{
|
|
281
|
-
ref,
|
|
282
|
-
...rest,
|
|
283
|
-
children,
|
|
284
|
-
dangerouslySetInnerHTML: children ? void 0 : dangerouslySetInnerHTML
|
|
285
|
-
}
|
|
286
|
-
);
|
|
287
|
-
});
|
|
288
|
-
var main_default = Main;
|
|
289
|
-
var schema = {
|
|
290
|
-
type: "main",
|
|
291
|
-
title: "Main",
|
|
292
|
-
inspector: []
|
|
293
|
-
};
|
|
294
|
-
|
|
295
|
-
// src/components/index.ts
|
|
296
|
-
var defaultComponents = [main_exports];
|
|
297
|
-
|
|
298
|
-
// src/context.ts
|
|
299
|
-
function registerComponents(components) {
|
|
300
|
-
for (const comp of components) {
|
|
301
|
-
comp?.schema?.type && WeaverseHydrogen.registerElement({
|
|
302
|
-
type: comp?.schema.type,
|
|
303
|
-
Component: comp.default,
|
|
304
|
-
schema: comp.schema,
|
|
305
|
-
loader: comp.loader
|
|
306
|
-
});
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
function createCachedWeaverseInstance(params) {
|
|
310
|
-
if (isBrowser) {
|
|
311
|
-
window.__weaverses = window.__weaverses || {};
|
|
312
|
-
let weaverse = window.__weaverses[params.pageId];
|
|
313
|
-
if (!weaverse || weaverse?.requestInfo?.pathname !== params.requestInfo.pathname || weaverse?.requestInfo?.search !== params.requestInfo.search) {
|
|
314
|
-
weaverse = new WeaverseHydrogen(params);
|
|
315
|
-
window.__weaverses[params.pageId] = weaverse;
|
|
316
|
-
}
|
|
317
|
-
if (weaverse?.isDesignMode) {
|
|
318
|
-
weaverse.requestInfo = params.requestInfo;
|
|
319
|
-
window.weaverseStudio?.refreshStudio(params);
|
|
320
|
-
}
|
|
321
|
-
return weaverse;
|
|
322
|
-
}
|
|
323
|
-
return new WeaverseHydrogen(params);
|
|
324
|
-
}
|
|
325
|
-
function createWeaverseInstance(weaverseData, components) {
|
|
326
|
-
let { page, configs, project, pageAssignment } = weaverseData || {};
|
|
327
|
-
registerComponents(components);
|
|
328
|
-
registerComponents(defaultComponents);
|
|
329
|
-
return createCachedWeaverseInstance({
|
|
330
|
-
...configs,
|
|
331
|
-
data: page,
|
|
332
|
-
pageId: page?.id,
|
|
333
|
-
internal: { project, pageAssignment }
|
|
334
|
-
});
|
|
335
|
-
}
|
|
336
|
-
var ThemeSettingsProvider = createContext(
|
|
337
|
-
null
|
|
338
|
-
);
|
|
339
|
-
ThemeSettingsProvider.displayName = "WeaverseThemeSettingsProvider";
|
|
340
|
-
var WeaverseHydrogenRoot = memo(
|
|
341
|
-
({
|
|
342
|
-
errorComponent: ErrorComponent = FallbackError,
|
|
343
|
-
components
|
|
344
|
-
}) => {
|
|
345
|
-
let loaderData = useLoaderData();
|
|
346
|
-
let data = loaderData?.weaverseData;
|
|
347
|
-
if (data) {
|
|
348
|
-
if (data instanceof Promise) {
|
|
349
|
-
return /* @__PURE__ */ jsx(ErrorBoundary, { fallbackRender: ErrorComponent, children: /* @__PURE__ */ jsx(Suspense, { children: /* @__PURE__ */ jsx(Await, { resolve: data, children: (resolvedData) => /* @__PURE__ */ jsx(RenderRoot, { data: resolvedData, components }) }) }) });
|
|
350
|
-
}
|
|
351
|
-
return /* @__PURE__ */ jsx(RenderRoot, { data, components });
|
|
352
|
-
}
|
|
353
|
-
return /* @__PURE__ */ jsx(
|
|
354
|
-
ErrorComponent,
|
|
355
|
-
{
|
|
356
|
-
error: { message: "No Weaverse data return from route loader!" }
|
|
357
|
-
}
|
|
358
|
-
);
|
|
359
|
-
}
|
|
360
|
-
);
|
|
361
|
-
function RenderRoot(props) {
|
|
362
|
-
let { data, components } = props;
|
|
363
|
-
let weaverse = createWeaverseInstance(data, components);
|
|
364
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
365
|
-
/* @__PURE__ */ jsx(WeaverseRoot, { context: weaverse }),
|
|
366
|
-
/* @__PURE__ */ jsx(WeaverseEffect, { context: weaverse })
|
|
367
|
-
] });
|
|
368
|
-
}
|
|
369
|
-
function withWeaverse(Component) {
|
|
370
|
-
return (props) => {
|
|
371
|
-
let { settings } = useThemeSettingsStore();
|
|
372
|
-
return /* @__PURE__ */ jsx(ThemeSettingsProvider.Provider, { value: settings, children: /* @__PURE__ */ jsx(Component, { ...props }) });
|
|
373
|
-
};
|
|
374
|
-
}
|
|
375
|
-
function FallbackError({ error }) {
|
|
376
|
-
return /* @__PURE__ */ jsx("div", { children: error?.message || "An unexpected error occurred" });
|
|
377
|
-
}
|
|
142
|
+
// src/weaverse-client.ts
|
|
378
143
|
var API_PATH = "api/public";
|
|
379
144
|
var DEFAULT_CACHE_STRATEGY = {
|
|
380
145
|
maxAge: 5,
|
|
@@ -395,13 +160,11 @@ var WeaverseClient = class {
|
|
|
395
160
|
env;
|
|
396
161
|
cache;
|
|
397
162
|
waitUntil;
|
|
398
|
-
countries;
|
|
399
163
|
constructor(args) {
|
|
400
164
|
const {
|
|
401
165
|
env,
|
|
402
166
|
storefront,
|
|
403
167
|
components,
|
|
404
|
-
countries,
|
|
405
168
|
cache,
|
|
406
169
|
waitUntil,
|
|
407
170
|
themeSchema,
|
|
@@ -414,7 +177,6 @@ var WeaverseClient = class {
|
|
|
414
177
|
this.env = env;
|
|
415
178
|
this.cache = cache;
|
|
416
179
|
this.waitUntil = waitUntil;
|
|
417
|
-
this.countries = countries;
|
|
418
180
|
this.withCache = createWithCache({ cache, waitUntil, request });
|
|
419
181
|
this.configs = getWeaverseConfigs(request, env);
|
|
420
182
|
this.basePageConfigs = {
|
|
@@ -505,7 +267,6 @@ var WeaverseClient = class {
|
|
|
505
267
|
data = {
|
|
506
268
|
...data,
|
|
507
269
|
schema: this.themeSchema,
|
|
508
|
-
countries: this.countries || [],
|
|
509
270
|
publicEnv: this.configs.publicEnv
|
|
510
271
|
};
|
|
511
272
|
}
|
|
@@ -599,7 +360,6 @@ var WeaverseClient = class {
|
|
|
599
360
|
...basePageConfigs,
|
|
600
361
|
requestInfo: {
|
|
601
362
|
i18n: storefront.i18n,
|
|
602
|
-
// TODO: @hta218 - migrate to Remix hooks
|
|
603
363
|
queries: getRequestQueries(request),
|
|
604
364
|
pathname: new URL(request.url).pathname,
|
|
605
365
|
search: new URL(request.url).search
|
|
@@ -634,14 +394,241 @@ var WeaverseClient = class {
|
|
|
634
394
|
return item;
|
|
635
395
|
};
|
|
636
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
|
|
637
626
|
function getSelectedProductOptions(request) {
|
|
638
627
|
let options = getSelectedProductOptions$1(request);
|
|
639
628
|
return options.filter(
|
|
640
629
|
({ name }) => name !== "isDesignMode" && !name.startsWith("weaverse")
|
|
641
630
|
);
|
|
642
631
|
}
|
|
643
|
-
|
|
644
|
-
// src/placeholders.ts
|
|
645
632
|
var IMAGES_PLACEHOLDERS = {
|
|
646
633
|
logo_white: "https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg",
|
|
647
634
|
logo_black: "https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg",
|
|
@@ -674,40 +661,6 @@ var IMAGES_PLACEHOLDERS = {
|
|
|
674
661
|
product_18: "https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg"
|
|
675
662
|
};
|
|
676
663
|
|
|
677
|
-
|
|
678
|
-
var WeaverseHydrogen = class extends Weaverse {
|
|
679
|
-
platformType = "shopify-hydrogen";
|
|
680
|
-
pageId;
|
|
681
|
-
internal;
|
|
682
|
-
requestInfo;
|
|
683
|
-
static itemInstances;
|
|
684
|
-
static elementRegistry;
|
|
685
|
-
constructor(params) {
|
|
686
|
-
let { internal, pageId, requestInfo, ...coreParams } = params;
|
|
687
|
-
super({ ...coreParams });
|
|
688
|
-
this.internal = internal;
|
|
689
|
-
this.pageId = pageId;
|
|
690
|
-
this.requestInfo = requestInfo;
|
|
691
|
-
}
|
|
692
|
-
};
|
|
693
|
-
var WeaverseHydrogenItem = class extends WeaverseItemStore {
|
|
694
|
-
constructor(initialData, weaverse) {
|
|
695
|
-
super(initialData, weaverse);
|
|
696
|
-
let { data, ...rest } = initialData;
|
|
697
|
-
Object.assign(this._store, this._schemaData, data, rest);
|
|
698
|
-
}
|
|
699
|
-
get Element() {
|
|
700
|
-
return super.Element;
|
|
701
|
-
}
|
|
702
|
-
get _schemaData() {
|
|
703
|
-
if (this.Element?.schema) {
|
|
704
|
-
return generateDataFromSchema(this.Element.schema);
|
|
705
|
-
}
|
|
706
|
-
return {};
|
|
707
|
-
}
|
|
708
|
-
};
|
|
709
|
-
Weaverse.ItemConstructor = WeaverseHydrogenItem;
|
|
710
|
-
|
|
711
|
-
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 };
|
|
712
665
|
//# sourceMappingURL=index.mjs.map
|
|
713
666
|
//# sourceMappingURL=index.mjs.map
|