@weaverse/hydrogen 4.2.2 → 4.2.6
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 +70 -152
- package/dist/index.d.ts +70 -152
- package/dist/index.js +243 -324
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +246 -321
- 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(
|
|
@@ -57,10 +57,9 @@ function getWeaverseConfigs(request, env) {
|
|
|
57
57
|
}
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
|
-
function generateDataFromSchema({
|
|
61
|
-
inspector
|
|
62
|
-
}) {
|
|
60
|
+
function generateDataFromSchema(schema2) {
|
|
63
61
|
let data = {};
|
|
62
|
+
let inspector = schema2?.inspector;
|
|
64
63
|
if (inspector) {
|
|
65
64
|
for (let group of inspector) {
|
|
66
65
|
for (let input of group.inputs) {
|
|
@@ -73,36 +72,19 @@ function generateDataFromSchema({
|
|
|
73
72
|
}
|
|
74
73
|
return data;
|
|
75
74
|
}
|
|
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
75
|
function recursivelyAddDataItem(type, components, items, initData) {
|
|
88
|
-
|
|
76
|
+
let component = components.find((c) => c.schema.type === type);
|
|
89
77
|
if (!component) {
|
|
90
78
|
return;
|
|
91
79
|
}
|
|
92
|
-
let
|
|
93
|
-
|
|
94
|
-
|
|
80
|
+
let childIds = [];
|
|
81
|
+
let id = crypto.randomUUID();
|
|
82
|
+
let { children, ...data } = component.schema?.presets || {};
|
|
95
83
|
if (children) {
|
|
96
|
-
for (
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
components,
|
|
101
|
-
items,
|
|
102
|
-
data2
|
|
103
|
-
);
|
|
104
|
-
childIDs.push({
|
|
105
|
-
id: childID
|
|
84
|
+
for (let c of children) {
|
|
85
|
+
let { type: type2, children: children2, ...data2 } = c;
|
|
86
|
+
childIds.push({
|
|
87
|
+
id: recursivelyAddDataItem(type2, components, items, data2)
|
|
106
88
|
});
|
|
107
89
|
}
|
|
108
90
|
}
|
|
@@ -110,23 +92,13 @@ function recursivelyAddDataItem(type, components, items, initData) {
|
|
|
110
92
|
data: { ...data, ...initData },
|
|
111
93
|
id,
|
|
112
94
|
type,
|
|
113
|
-
children:
|
|
95
|
+
children: childIds
|
|
114
96
|
});
|
|
115
97
|
return id;
|
|
116
98
|
}
|
|
117
99
|
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
|
-
// },
|
|
100
|
+
return {
|
|
101
|
+
project: { id: "x", weaverseShopId: "shop-id", name: "Section Preview" },
|
|
130
102
|
configs: {
|
|
131
103
|
projectId: "x",
|
|
132
104
|
weaverseHost,
|
|
@@ -144,239 +116,24 @@ function getPreviewData(type, components, weaverseHost) {
|
|
|
144
116
|
pathname: "/",
|
|
145
117
|
search: ""
|
|
146
118
|
}
|
|
119
|
+
},
|
|
120
|
+
page: {
|
|
121
|
+
id: "0",
|
|
122
|
+
name: "Preview section",
|
|
123
|
+
rootId: "1",
|
|
124
|
+
items: [
|
|
125
|
+
{
|
|
126
|
+
data: {},
|
|
127
|
+
id: "1",
|
|
128
|
+
type: "main",
|
|
129
|
+
children: [{ id: recursivelyAddDataItem(type, components, []) }]
|
|
130
|
+
}
|
|
131
|
+
]
|
|
147
132
|
}
|
|
148
133
|
};
|
|
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
|
-
}
|
|
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
134
|
}
|
|
221
135
|
|
|
222
|
-
// src/
|
|
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
|
-
|
|
272
|
-
// src/components/main.tsx
|
|
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
|
-
}
|
|
136
|
+
// src/weaverse-client.ts
|
|
380
137
|
var API_PATH = "api/public";
|
|
381
138
|
var DEFAULT_CACHE_STRATEGY = {
|
|
382
139
|
maxAge: 5,
|
|
@@ -397,13 +154,11 @@ var WeaverseClient = class {
|
|
|
397
154
|
env;
|
|
398
155
|
cache;
|
|
399
156
|
waitUntil;
|
|
400
|
-
countries;
|
|
401
157
|
constructor(args) {
|
|
402
158
|
const {
|
|
403
159
|
env,
|
|
404
160
|
storefront,
|
|
405
161
|
components,
|
|
406
|
-
countries,
|
|
407
162
|
cache,
|
|
408
163
|
waitUntil,
|
|
409
164
|
themeSchema,
|
|
@@ -416,7 +171,6 @@ var WeaverseClient = class {
|
|
|
416
171
|
this.env = env;
|
|
417
172
|
this.cache = cache;
|
|
418
173
|
this.waitUntil = waitUntil;
|
|
419
|
-
this.countries = countries;
|
|
420
174
|
this.withCache = hydrogen.createWithCache({ cache, waitUntil, request });
|
|
421
175
|
this.configs = getWeaverseConfigs(request, env);
|
|
422
176
|
this.basePageConfigs = {
|
|
@@ -472,10 +226,7 @@ var WeaverseClient = class {
|
|
|
472
226
|
);
|
|
473
227
|
}
|
|
474
228
|
loadThemeSettings = async (strategy) => {
|
|
475
|
-
let defaultThemeSettings =
|
|
476
|
-
if (this.themeSchema) {
|
|
477
|
-
defaultThemeSettings = generateDataFromSchema(this.themeSchema);
|
|
478
|
-
}
|
|
229
|
+
let defaultThemeSettings = generateDataFromSchema(this.themeSchema);
|
|
479
230
|
try {
|
|
480
231
|
let { API, configs } = this;
|
|
481
232
|
let { weaverseHost, projectId, isDesignMode } = configs;
|
|
@@ -497,7 +248,7 @@ var WeaverseClient = class {
|
|
|
497
248
|
});
|
|
498
249
|
}
|
|
499
250
|
let data = res || {};
|
|
500
|
-
if (
|
|
251
|
+
if (this.themeSchema?.inspector) {
|
|
501
252
|
data.theme = {
|
|
502
253
|
...defaultThemeSettings,
|
|
503
254
|
...data.theme
|
|
@@ -507,7 +258,6 @@ var WeaverseClient = class {
|
|
|
507
258
|
data = {
|
|
508
259
|
...data,
|
|
509
260
|
schema: this.themeSchema,
|
|
510
|
-
countries: this.countries || [],
|
|
511
261
|
publicEnv: this.configs.publicEnv
|
|
512
262
|
};
|
|
513
263
|
}
|
|
@@ -601,7 +351,6 @@ var WeaverseClient = class {
|
|
|
601
351
|
...basePageConfigs,
|
|
602
352
|
requestInfo: {
|
|
603
353
|
i18n: storefront.i18n,
|
|
604
|
-
// TODO: @hta218 - migrate to Remix hooks
|
|
605
354
|
queries: getRequestQueries(request),
|
|
606
355
|
pathname: new URL(request.url).pathname,
|
|
607
356
|
search: new URL(request.url).search
|
|
@@ -636,14 +385,224 @@ var WeaverseClient = class {
|
|
|
636
385
|
return item;
|
|
637
386
|
};
|
|
638
387
|
};
|
|
388
|
+
|
|
389
|
+
// src/components/main.tsx
|
|
390
|
+
var main_exports = {};
|
|
391
|
+
__export(main_exports, {
|
|
392
|
+
default: () => main_default,
|
|
393
|
+
schema: () => schema
|
|
394
|
+
});
|
|
395
|
+
var Main = react$1.forwardRef((props, ref) => {
|
|
396
|
+
let { children, dangerouslySetInnerHTML, ...rest } = props;
|
|
397
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
398
|
+
"div",
|
|
399
|
+
{
|
|
400
|
+
ref,
|
|
401
|
+
...rest,
|
|
402
|
+
children,
|
|
403
|
+
dangerouslySetInnerHTML: children ? void 0 : dangerouslySetInnerHTML
|
|
404
|
+
}
|
|
405
|
+
);
|
|
406
|
+
});
|
|
407
|
+
var main_default = Main;
|
|
408
|
+
var schema = {
|
|
409
|
+
type: "main",
|
|
410
|
+
title: "Main",
|
|
411
|
+
inspector: []
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
// src/components/index.ts
|
|
415
|
+
var defaultComponents = [main_exports];
|
|
416
|
+
var ThemeSettingsStore = class extends react.EventEmitter {
|
|
417
|
+
settings = {};
|
|
418
|
+
schema;
|
|
419
|
+
publicEnv;
|
|
420
|
+
constructor(data) {
|
|
421
|
+
super();
|
|
422
|
+
let { theme, schema: schema2, publicEnv } = data || {};
|
|
423
|
+
this.settings = { ...theme };
|
|
424
|
+
this.schema = schema2;
|
|
425
|
+
this.publicEnv = publicEnv;
|
|
426
|
+
if (react.isBrowser) {
|
|
427
|
+
window.__weaverseThemeSettingsStore = this;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
updateThemeSettings = (newSettings) => {
|
|
431
|
+
this.settings = {
|
|
432
|
+
...this.settings,
|
|
433
|
+
...newSettings
|
|
434
|
+
};
|
|
435
|
+
this.emit(this.settings);
|
|
436
|
+
};
|
|
437
|
+
getSnapshot = () => {
|
|
438
|
+
return this.settings;
|
|
439
|
+
};
|
|
440
|
+
getServerSnapshot = () => {
|
|
441
|
+
return this.settings;
|
|
442
|
+
};
|
|
443
|
+
};
|
|
444
|
+
function useThemeSettingsStore() {
|
|
445
|
+
let data = react$2.useRouteLoaderData("root");
|
|
446
|
+
if (react.isBrowser && window.__weaverseThemeSettingsStore) {
|
|
447
|
+
return window.__weaverseThemeSettingsStore;
|
|
448
|
+
}
|
|
449
|
+
return new ThemeSettingsStore(data?.weaverseTheme);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
// src/utils/use-studio.ts
|
|
453
|
+
function useStudio(weaverse) {
|
|
454
|
+
let { revalidate } = react$2.useRevalidator();
|
|
455
|
+
let navigation = react$2.useNavigation();
|
|
456
|
+
let { pathname, search } = react$2.useLocation();
|
|
457
|
+
let navigate = react$2.useNavigate();
|
|
458
|
+
let themeSettingsStore = useThemeSettingsStore();
|
|
459
|
+
let { isDesignMode, weaverseHost, weaverseVersion, isPreviewMode } = weaverse;
|
|
460
|
+
react$1.useEffect(() => {
|
|
461
|
+
if (navigation.state === "idle") {
|
|
462
|
+
if (isPreviewMode) {
|
|
463
|
+
let previewSrc = `${weaverseHost}/static/studio/hydrogen/preview.js?v=${weaverseVersion}`;
|
|
464
|
+
react.loadScript(previewSrc).catch(console.error);
|
|
465
|
+
} else if (isDesignMode) {
|
|
466
|
+
weaverse.internal = {
|
|
467
|
+
...weaverse.internal,
|
|
468
|
+
navigate,
|
|
469
|
+
revalidate,
|
|
470
|
+
themeSettingsStore
|
|
471
|
+
};
|
|
472
|
+
let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`;
|
|
473
|
+
react.loadScript(studioSrc).then(() => {
|
|
474
|
+
window.weaverseStudio?.init(weaverse);
|
|
475
|
+
}).catch(console.error);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
}, [pathname, search, navigation.state]);
|
|
479
|
+
usePixel(weaverse);
|
|
480
|
+
}
|
|
481
|
+
function usePixel(context) {
|
|
482
|
+
let { projectId, pageId, weaverseHost, isDesignMode } = context;
|
|
483
|
+
react$1.useEffect(() => {
|
|
484
|
+
if (!projectId || !pageId || !weaverseHost || isDesignMode) return;
|
|
485
|
+
let url = `${weaverseHost}/api/public/px`;
|
|
486
|
+
let img = new Image();
|
|
487
|
+
img.onload = () => img.remove();
|
|
488
|
+
img.src = `${url}?projectId=${projectId}&pageId=${pageId}`;
|
|
489
|
+
}, []);
|
|
490
|
+
}
|
|
491
|
+
var WeaverseHydrogenItem = class extends react.WeaverseItemStore {
|
|
492
|
+
constructor(initialData, weaverse) {
|
|
493
|
+
super(initialData, weaverse);
|
|
494
|
+
let { data, ...rest } = initialData;
|
|
495
|
+
let schemaData = generateDataFromSchema(this.Element.schema);
|
|
496
|
+
Object.assign(this._store, schemaData, data, rest);
|
|
497
|
+
}
|
|
498
|
+
get Element() {
|
|
499
|
+
return super.Element;
|
|
500
|
+
}
|
|
501
|
+
};
|
|
502
|
+
react.Weaverse.ItemConstructor = WeaverseHydrogenItem;
|
|
503
|
+
var WeaverseHydrogen = class extends react.Weaverse {
|
|
504
|
+
platformType = "shopify-hydrogen";
|
|
505
|
+
pageId;
|
|
506
|
+
internal;
|
|
507
|
+
requestInfo;
|
|
508
|
+
static itemInstances;
|
|
509
|
+
static elementRegistry;
|
|
510
|
+
constructor(params) {
|
|
511
|
+
let { internal, pageId, requestInfo, ...coreParams } = params;
|
|
512
|
+
super({ ...coreParams });
|
|
513
|
+
this.internal = internal;
|
|
514
|
+
this.pageId = pageId;
|
|
515
|
+
this.requestInfo = requestInfo;
|
|
516
|
+
}
|
|
517
|
+
};
|
|
518
|
+
function createWeaverseInstance(params) {
|
|
519
|
+
if (react.isBrowser) {
|
|
520
|
+
window.__weaverses = window.__weaverses || {};
|
|
521
|
+
let weaverse = window.__weaverses[params.pageId];
|
|
522
|
+
if (!weaverse || weaverse?.requestInfo?.pathname !== params.requestInfo.pathname || weaverse?.requestInfo?.search !== params.requestInfo.search) {
|
|
523
|
+
weaverse = new WeaverseHydrogen(params);
|
|
524
|
+
window.__weaverses[params.pageId] = weaverse;
|
|
525
|
+
}
|
|
526
|
+
if (weaverse?.isDesignMode) {
|
|
527
|
+
weaverse.requestInfo = params.requestInfo;
|
|
528
|
+
window.weaverseStudio?.refreshStudio(params);
|
|
529
|
+
}
|
|
530
|
+
return weaverse;
|
|
531
|
+
}
|
|
532
|
+
return new WeaverseHydrogen(params);
|
|
533
|
+
}
|
|
534
|
+
var StudioBridge = react$1.memo(({ context }) => {
|
|
535
|
+
useStudio(context);
|
|
536
|
+
return null;
|
|
537
|
+
});
|
|
538
|
+
function RenderRoot(props) {
|
|
539
|
+
let { data, components } = props;
|
|
540
|
+
for (let comp of [...components, ...defaultComponents]) {
|
|
541
|
+
comp?.schema?.type && WeaverseHydrogen.registerElement({
|
|
542
|
+
type: comp?.schema.type,
|
|
543
|
+
Component: comp.default,
|
|
544
|
+
schema: comp.schema,
|
|
545
|
+
loader: comp.loader
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
let { page, configs, project, pageAssignment } = data || {};
|
|
549
|
+
let weaverse = createWeaverseInstance({
|
|
550
|
+
...configs,
|
|
551
|
+
data: page,
|
|
552
|
+
pageId: page?.id,
|
|
553
|
+
internal: { project, pageAssignment }
|
|
554
|
+
});
|
|
555
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
556
|
+
/* @__PURE__ */ jsxRuntime.jsx(react.WeaverseRoot, { context: weaverse }),
|
|
557
|
+
/* @__PURE__ */ jsxRuntime.jsx(StudioBridge, { context: weaverse })
|
|
558
|
+
] });
|
|
559
|
+
}
|
|
560
|
+
var WeaverseHydrogenRoot = react$1.memo(
|
|
561
|
+
({
|
|
562
|
+
components,
|
|
563
|
+
errorComponent: ErrorComponent = ({ error }) => /* @__PURE__ */ jsxRuntime.jsx("div", { children: error?.message || "An unexpected error occurred" })
|
|
564
|
+
}) => {
|
|
565
|
+
let loaderData = react$2.useLoaderData();
|
|
566
|
+
let data = loaderData?.weaverseData;
|
|
567
|
+
if (data) {
|
|
568
|
+
if (data instanceof Promise) {
|
|
569
|
+
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 }) }) }) });
|
|
570
|
+
}
|
|
571
|
+
return /* @__PURE__ */ jsxRuntime.jsx(RenderRoot, { data, components });
|
|
572
|
+
}
|
|
573
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
574
|
+
ErrorComponent,
|
|
575
|
+
{
|
|
576
|
+
error: { message: "No Weaverse data return from route loader!" }
|
|
577
|
+
}
|
|
578
|
+
);
|
|
579
|
+
}
|
|
580
|
+
);
|
|
581
|
+
var ThemeSettingsProvider = react$1.createContext(null);
|
|
582
|
+
ThemeSettingsProvider.displayName = "WeaverseThemeSettingsProvider";
|
|
583
|
+
function withWeaverse(Component) {
|
|
584
|
+
return (props) => {
|
|
585
|
+
let { settings } = useThemeSettingsStore();
|
|
586
|
+
return /* @__PURE__ */ jsxRuntime.jsx(ThemeSettingsProvider.Provider, { value: settings, children: /* @__PURE__ */ jsxRuntime.jsx(Component, { ...props }) });
|
|
587
|
+
};
|
|
588
|
+
}
|
|
589
|
+
function useThemeSettings() {
|
|
590
|
+
let themeSettingsStore = useThemeSettingsStore();
|
|
591
|
+
let settings = react$1.useSyncExternalStore(
|
|
592
|
+
themeSettingsStore.subscribe,
|
|
593
|
+
themeSettingsStore.getSnapshot,
|
|
594
|
+
themeSettingsStore.getServerSnapshot
|
|
595
|
+
);
|
|
596
|
+
return settings;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
// src/index.ts
|
|
639
600
|
function getSelectedProductOptions(request) {
|
|
640
601
|
let options = hydrogen.getSelectedProductOptions(request);
|
|
641
602
|
return options.filter(
|
|
642
603
|
({ name }) => name !== "isDesignMode" && !name.startsWith("weaverse")
|
|
643
604
|
);
|
|
644
605
|
}
|
|
645
|
-
|
|
646
|
-
// src/placeholders.ts
|
|
647
606
|
var IMAGES_PLACEHOLDERS = {
|
|
648
607
|
logo_white: "https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg",
|
|
649
608
|
logo_black: "https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg",
|
|
@@ -676,40 +635,6 @@ var IMAGES_PLACEHOLDERS = {
|
|
|
676
635
|
product_18: "https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg"
|
|
677
636
|
};
|
|
678
637
|
|
|
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
638
|
Object.defineProperty(exports, "isBrowser", {
|
|
714
639
|
enumerable: true,
|
|
715
640
|
get: function () { return react.isBrowser; }
|
|
@@ -739,13 +664,7 @@ exports.WeaverseClient = WeaverseClient;
|
|
|
739
664
|
exports.WeaverseHydrogen = WeaverseHydrogen;
|
|
740
665
|
exports.WeaverseHydrogenItem = WeaverseHydrogenItem;
|
|
741
666
|
exports.WeaverseHydrogenRoot = WeaverseHydrogenRoot;
|
|
742
|
-
exports.generateDataFromSchema = generateDataFromSchema;
|
|
743
|
-
exports.getPreviewData = getPreviewData;
|
|
744
|
-
exports.getRequestQueries = getRequestQueries;
|
|
745
667
|
exports.getSelectedProductOptions = getSelectedProductOptions;
|
|
746
|
-
exports.getWeaverseConfigs = getWeaverseConfigs;
|
|
747
|
-
exports.recursivelyAddDataItem = recursivelyAddDataItem;
|
|
748
|
-
exports.resizeShopifyImage = resizeShopifyImage;
|
|
749
668
|
exports.useThemeSettings = useThemeSettings;
|
|
750
669
|
exports.withWeaverse = withWeaverse;
|
|
751
670
|
//# sourceMappingURL=index.js.map
|