@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.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,238 +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
|
-
};
|
|
259
|
-
img.src = `${url}?projectId=${projectId}&pageId=${pageId}`;
|
|
260
|
-
}, []);
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
// src/Effect.tsx
|
|
264
|
-
var WeaverseEffect = react$1.memo(
|
|
265
|
-
({ context }) => {
|
|
266
|
-
useStudio(context);
|
|
267
|
-
return null;
|
|
268
|
-
}
|
|
269
|
-
);
|
|
270
142
|
|
|
271
|
-
// src/
|
|
272
|
-
var main_exports = {};
|
|
273
|
-
__export(main_exports, {
|
|
274
|
-
default: () => main_default,
|
|
275
|
-
schema: () => schema
|
|
276
|
-
});
|
|
277
|
-
var Main = react$1.forwardRef((props, ref) => {
|
|
278
|
-
let { children, dangerouslySetInnerHTML, ...rest } = props;
|
|
279
|
-
return /* @__PURE__ */ jsxRuntime.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 (react.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 = react$1.createContext(
|
|
338
|
-
null
|
|
339
|
-
);
|
|
340
|
-
ThemeSettingsProvider.displayName = "WeaverseThemeSettingsProvider";
|
|
341
|
-
var WeaverseHydrogenRoot = react$1.memo(
|
|
342
|
-
({
|
|
343
|
-
errorComponent: ErrorComponent = FallbackError,
|
|
344
|
-
components
|
|
345
|
-
}) => {
|
|
346
|
-
let loaderData = react$2.useLoaderData();
|
|
347
|
-
let data = loaderData?.weaverseData;
|
|
348
|
-
if (data) {
|
|
349
|
-
if (data instanceof Promise) {
|
|
350
|
-
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 }) }) }) });
|
|
351
|
-
}
|
|
352
|
-
return /* @__PURE__ */ jsxRuntime.jsx(RenderRoot, { data, components });
|
|
353
|
-
}
|
|
354
|
-
return /* @__PURE__ */ jsxRuntime.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__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
366
|
-
/* @__PURE__ */ jsxRuntime.jsx(react.WeaverseRoot, { context: weaverse }),
|
|
367
|
-
/* @__PURE__ */ jsxRuntime.jsx(WeaverseEffect, { context: weaverse })
|
|
368
|
-
] });
|
|
369
|
-
}
|
|
370
|
-
function withWeaverse(Component) {
|
|
371
|
-
return (props) => {
|
|
372
|
-
let { settings } = useThemeSettingsStore();
|
|
373
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ThemeSettingsProvider.Provider, { value: settings, children: /* @__PURE__ */ jsxRuntime.jsx(Component, { ...props }) });
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
function FallbackError({ error }) {
|
|
377
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { children: error?.message || "An unexpected error occurred" });
|
|
378
|
-
}
|
|
143
|
+
// src/weaverse-client.ts
|
|
379
144
|
var API_PATH = "api/public";
|
|
380
145
|
var DEFAULT_CACHE_STRATEGY = {
|
|
381
146
|
maxAge: 5,
|
|
@@ -396,13 +161,11 @@ var WeaverseClient = class {
|
|
|
396
161
|
env;
|
|
397
162
|
cache;
|
|
398
163
|
waitUntil;
|
|
399
|
-
countries;
|
|
400
164
|
constructor(args) {
|
|
401
165
|
const {
|
|
402
166
|
env,
|
|
403
167
|
storefront,
|
|
404
168
|
components,
|
|
405
|
-
countries,
|
|
406
169
|
cache,
|
|
407
170
|
waitUntil,
|
|
408
171
|
themeSchema,
|
|
@@ -415,7 +178,6 @@ var WeaverseClient = class {
|
|
|
415
178
|
this.env = env;
|
|
416
179
|
this.cache = cache;
|
|
417
180
|
this.waitUntil = waitUntil;
|
|
418
|
-
this.countries = countries;
|
|
419
181
|
this.withCache = hydrogen.createWithCache({ cache, waitUntil, request });
|
|
420
182
|
this.configs = getWeaverseConfigs(request, env);
|
|
421
183
|
this.basePageConfigs = {
|
|
@@ -506,7 +268,6 @@ var WeaverseClient = class {
|
|
|
506
268
|
data = {
|
|
507
269
|
...data,
|
|
508
270
|
schema: this.themeSchema,
|
|
509
|
-
countries: this.countries || [],
|
|
510
271
|
publicEnv: this.configs.publicEnv
|
|
511
272
|
};
|
|
512
273
|
}
|
|
@@ -600,7 +361,6 @@ var WeaverseClient = class {
|
|
|
600
361
|
...basePageConfigs,
|
|
601
362
|
requestInfo: {
|
|
602
363
|
i18n: storefront.i18n,
|
|
603
|
-
// TODO: @hta218 - migrate to Remix hooks
|
|
604
364
|
queries: getRequestQueries(request),
|
|
605
365
|
pathname: new URL(request.url).pathname,
|
|
606
366
|
search: new URL(request.url).search
|
|
@@ -635,14 +395,241 @@ var WeaverseClient = class {
|
|
|
635
395
|
return item;
|
|
636
396
|
};
|
|
637
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
|
|
638
627
|
function getSelectedProductOptions(request) {
|
|
639
628
|
let options = hydrogen.getSelectedProductOptions(request);
|
|
640
629
|
return options.filter(
|
|
641
630
|
({ name }) => name !== "isDesignMode" && !name.startsWith("weaverse")
|
|
642
631
|
);
|
|
643
632
|
}
|
|
644
|
-
|
|
645
|
-
// src/placeholders.ts
|
|
646
633
|
var IMAGES_PLACEHOLDERS = {
|
|
647
634
|
logo_white: "https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg",
|
|
648
635
|
logo_black: "https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg",
|
|
@@ -675,40 +662,6 @@ var IMAGES_PLACEHOLDERS = {
|
|
|
675
662
|
product_18: "https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg"
|
|
676
663
|
};
|
|
677
664
|
|
|
678
|
-
// src/index.ts
|
|
679
|
-
var WeaverseHydrogen = class extends react.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 react.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
|
-
react.Weaverse.ItemConstructor = WeaverseHydrogenItem;
|
|
711
|
-
|
|
712
665
|
Object.defineProperty(exports, "isBrowser", {
|
|
713
666
|
enumerable: true,
|
|
714
667
|
get: function () { return react.isBrowser; }
|
|
@@ -738,13 +691,7 @@ exports.WeaverseClient = WeaverseClient;
|
|
|
738
691
|
exports.WeaverseHydrogen = WeaverseHydrogen;
|
|
739
692
|
exports.WeaverseHydrogenItem = WeaverseHydrogenItem;
|
|
740
693
|
exports.WeaverseHydrogenRoot = WeaverseHydrogenRoot;
|
|
741
|
-
exports.generateDataFromSchema = generateDataFromSchema;
|
|
742
|
-
exports.getPreviewData = getPreviewData;
|
|
743
|
-
exports.getRequestQueries = getRequestQueries;
|
|
744
694
|
exports.getSelectedProductOptions = getSelectedProductOptions;
|
|
745
|
-
exports.getWeaverseConfigs = getWeaverseConfigs;
|
|
746
|
-
exports.recursivelyAddDataItem = recursivelyAddDataItem;
|
|
747
|
-
exports.resizeShopifyImage = resizeShopifyImage;
|
|
748
695
|
exports.useThemeSettings = useThemeSettings;
|
|
749
696
|
exports.withWeaverse = withWeaverse;
|
|
750
697
|
//# sourceMappingURL=index.js.map
|