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