@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.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(
|
|
@@ -56,10 +56,9 @@ function getWeaverseConfigs(request, env) {
|
|
|
56
56
|
}
|
|
57
57
|
};
|
|
58
58
|
}
|
|
59
|
-
function generateDataFromSchema({
|
|
60
|
-
inspector
|
|
61
|
-
}) {
|
|
59
|
+
function generateDataFromSchema(schema2) {
|
|
62
60
|
let data = {};
|
|
61
|
+
let inspector = schema2?.inspector;
|
|
63
62
|
if (inspector) {
|
|
64
63
|
for (let group of inspector) {
|
|
65
64
|
for (let input of group.inputs) {
|
|
@@ -72,36 +71,19 @@ function generateDataFromSchema({
|
|
|
72
71
|
}
|
|
73
72
|
return data;
|
|
74
73
|
}
|
|
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
74
|
function recursivelyAddDataItem(type, components, items, initData) {
|
|
87
|
-
|
|
75
|
+
let component = components.find((c) => c.schema.type === type);
|
|
88
76
|
if (!component) {
|
|
89
77
|
return;
|
|
90
78
|
}
|
|
91
|
-
let
|
|
92
|
-
|
|
93
|
-
|
|
79
|
+
let childIds = [];
|
|
80
|
+
let id = crypto.randomUUID();
|
|
81
|
+
let { children, ...data } = component.schema?.presets || {};
|
|
94
82
|
if (children) {
|
|
95
|
-
for (
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
components,
|
|
100
|
-
items,
|
|
101
|
-
data2
|
|
102
|
-
);
|
|
103
|
-
childIDs.push({
|
|
104
|
-
id: childID
|
|
83
|
+
for (let c of children) {
|
|
84
|
+
let { type: type2, children: children2, ...data2 } = c;
|
|
85
|
+
childIds.push({
|
|
86
|
+
id: recursivelyAddDataItem(type2, components, items, data2)
|
|
105
87
|
});
|
|
106
88
|
}
|
|
107
89
|
}
|
|
@@ -109,23 +91,13 @@ function recursivelyAddDataItem(type, components, items, initData) {
|
|
|
109
91
|
data: { ...data, ...initData },
|
|
110
92
|
id,
|
|
111
93
|
type,
|
|
112
|
-
children:
|
|
94
|
+
children: childIds
|
|
113
95
|
});
|
|
114
96
|
return id;
|
|
115
97
|
}
|
|
116
98
|
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
|
-
// },
|
|
99
|
+
return {
|
|
100
|
+
project: { id: "x", weaverseShopId: "shop-id", name: "Section Preview" },
|
|
129
101
|
configs: {
|
|
130
102
|
projectId: "x",
|
|
131
103
|
weaverseHost,
|
|
@@ -143,239 +115,24 @@ function getPreviewData(type, components, weaverseHost) {
|
|
|
143
115
|
pathname: "/",
|
|
144
116
|
search: ""
|
|
145
117
|
}
|
|
118
|
+
},
|
|
119
|
+
page: {
|
|
120
|
+
id: "0",
|
|
121
|
+
name: "Preview section",
|
|
122
|
+
rootId: "1",
|
|
123
|
+
items: [
|
|
124
|
+
{
|
|
125
|
+
data: {},
|
|
126
|
+
id: "1",
|
|
127
|
+
type: "main",
|
|
128
|
+
children: [{ id: recursivelyAddDataItem(type, components, []) }]
|
|
129
|
+
}
|
|
130
|
+
]
|
|
146
131
|
}
|
|
147
132
|
};
|
|
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
|
-
}
|
|
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
133
|
}
|
|
220
134
|
|
|
221
|
-
// src/
|
|
222
|
-
function useStudio(weaverse) {
|
|
223
|
-
let { revalidate } = useRevalidator();
|
|
224
|
-
let navigation = useNavigation();
|
|
225
|
-
let { pathname, search } = useLocation();
|
|
226
|
-
let navigate = useNavigate();
|
|
227
|
-
let themeSettingsStore = useThemeSettingsStore();
|
|
228
|
-
let { isDesignMode, weaverseHost, weaverseVersion, isPreviewMode } = weaverse;
|
|
229
|
-
useEffect(() => {
|
|
230
|
-
if (navigation.state === "idle") {
|
|
231
|
-
if (isPreviewMode) {
|
|
232
|
-
let previewSrc = `${weaverseHost}/static/studio/hydrogen/preview.js?v=${weaverseVersion}`;
|
|
233
|
-
loadScript(previewSrc).catch(console.error);
|
|
234
|
-
} else if (isDesignMode) {
|
|
235
|
-
weaverse.internal = {
|
|
236
|
-
...weaverse.internal,
|
|
237
|
-
navigate,
|
|
238
|
-
revalidate,
|
|
239
|
-
themeSettingsStore
|
|
240
|
-
};
|
|
241
|
-
let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`;
|
|
242
|
-
loadScript(studioSrc).then(() => {
|
|
243
|
-
window.weaverseStudio?.init(weaverse);
|
|
244
|
-
}).catch(console.error);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
}, [pathname, search, navigation.state]);
|
|
248
|
-
usePixel(weaverse);
|
|
249
|
-
}
|
|
250
|
-
function usePixel(context) {
|
|
251
|
-
let { projectId, pageId, weaverseHost, isDesignMode } = context;
|
|
252
|
-
useEffect(() => {
|
|
253
|
-
if (!projectId || !pageId || !weaverseHost || isDesignMode) return;
|
|
254
|
-
let url = `${weaverseHost}/api/public/px`;
|
|
255
|
-
let img = new Image();
|
|
256
|
-
img.onload = () => {
|
|
257
|
-
img.remove();
|
|
258
|
-
};
|
|
259
|
-
img.src = `${url}?projectId=${projectId}&pageId=${pageId}`;
|
|
260
|
-
}, []);
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
// src/Effect.tsx
|
|
264
|
-
var WeaverseEffect = memo(
|
|
265
|
-
({ context }) => {
|
|
266
|
-
useStudio(context);
|
|
267
|
-
return null;
|
|
268
|
-
}
|
|
269
|
-
);
|
|
270
|
-
|
|
271
|
-
// src/components/main.tsx
|
|
272
|
-
var main_exports = {};
|
|
273
|
-
__export(main_exports, {
|
|
274
|
-
default: () => main_default,
|
|
275
|
-
schema: () => schema
|
|
276
|
-
});
|
|
277
|
-
var Main = forwardRef((props, ref) => {
|
|
278
|
-
let { children, dangerouslySetInnerHTML, ...rest } = props;
|
|
279
|
-
return /* @__PURE__ */ jsx(
|
|
280
|
-
"div",
|
|
281
|
-
{
|
|
282
|
-
ref,
|
|
283
|
-
...rest,
|
|
284
|
-
children,
|
|
285
|
-
dangerouslySetInnerHTML: children ? void 0 : dangerouslySetInnerHTML
|
|
286
|
-
}
|
|
287
|
-
);
|
|
288
|
-
});
|
|
289
|
-
var main_default = Main;
|
|
290
|
-
var schema = {
|
|
291
|
-
type: "main",
|
|
292
|
-
title: "Main",
|
|
293
|
-
inspector: []
|
|
294
|
-
};
|
|
295
|
-
|
|
296
|
-
// src/components/index.ts
|
|
297
|
-
var defaultComponents = [main_exports];
|
|
298
|
-
|
|
299
|
-
// src/context.ts
|
|
300
|
-
function registerComponents(components) {
|
|
301
|
-
for (const comp of components) {
|
|
302
|
-
comp?.schema?.type && WeaverseHydrogen.registerElement({
|
|
303
|
-
type: comp?.schema.type,
|
|
304
|
-
Component: comp.default,
|
|
305
|
-
schema: comp.schema,
|
|
306
|
-
loader: comp.loader
|
|
307
|
-
});
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
function createCachedWeaverseInstance(params) {
|
|
311
|
-
if (isBrowser) {
|
|
312
|
-
window.__weaverses = window.__weaverses || {};
|
|
313
|
-
let weaverse = window.__weaverses[params.pageId];
|
|
314
|
-
if (!weaverse || weaverse?.requestInfo?.pathname !== params.requestInfo.pathname || weaverse?.requestInfo?.search !== params.requestInfo.search) {
|
|
315
|
-
weaverse = new WeaverseHydrogen(params);
|
|
316
|
-
window.__weaverses[params.pageId] = weaverse;
|
|
317
|
-
}
|
|
318
|
-
if (weaverse?.isDesignMode) {
|
|
319
|
-
weaverse.requestInfo = params.requestInfo;
|
|
320
|
-
window.weaverseStudio?.refreshStudio(params);
|
|
321
|
-
}
|
|
322
|
-
return weaverse;
|
|
323
|
-
}
|
|
324
|
-
return new WeaverseHydrogen(params);
|
|
325
|
-
}
|
|
326
|
-
function createWeaverseInstance(weaverseData, components) {
|
|
327
|
-
let { page, configs, project, pageAssignment } = weaverseData || {};
|
|
328
|
-
registerComponents(components);
|
|
329
|
-
registerComponents(defaultComponents);
|
|
330
|
-
return createCachedWeaverseInstance({
|
|
331
|
-
...configs,
|
|
332
|
-
data: page,
|
|
333
|
-
pageId: page?.id,
|
|
334
|
-
internal: { project, pageAssignment }
|
|
335
|
-
});
|
|
336
|
-
}
|
|
337
|
-
var ThemeSettingsProvider = createContext(
|
|
338
|
-
null
|
|
339
|
-
);
|
|
340
|
-
ThemeSettingsProvider.displayName = "WeaverseThemeSettingsProvider";
|
|
341
|
-
var WeaverseHydrogenRoot = memo(
|
|
342
|
-
({
|
|
343
|
-
errorComponent: ErrorComponent = FallbackError,
|
|
344
|
-
components
|
|
345
|
-
}) => {
|
|
346
|
-
let loaderData = useLoaderData();
|
|
347
|
-
let data = loaderData?.weaverseData;
|
|
348
|
-
if (data) {
|
|
349
|
-
if (data instanceof Promise) {
|
|
350
|
-
return /* @__PURE__ */ jsx(ErrorBoundary, { fallbackRender: ErrorComponent, children: /* @__PURE__ */ jsx(Suspense, { children: /* @__PURE__ */ jsx(Await, { resolve: data, children: (resolvedData) => /* @__PURE__ */ jsx(RenderRoot, { data: resolvedData, components }) }) }) });
|
|
351
|
-
}
|
|
352
|
-
return /* @__PURE__ */ jsx(RenderRoot, { data, components });
|
|
353
|
-
}
|
|
354
|
-
return /* @__PURE__ */ jsx(
|
|
355
|
-
ErrorComponent,
|
|
356
|
-
{
|
|
357
|
-
error: { message: "No Weaverse data return from route loader!" }
|
|
358
|
-
}
|
|
359
|
-
);
|
|
360
|
-
}
|
|
361
|
-
);
|
|
362
|
-
function RenderRoot(props) {
|
|
363
|
-
let { data, components } = props;
|
|
364
|
-
let weaverse = createWeaverseInstance(data, components);
|
|
365
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
366
|
-
/* @__PURE__ */ jsx(WeaverseRoot, { context: weaverse }),
|
|
367
|
-
/* @__PURE__ */ jsx(WeaverseEffect, { context: weaverse })
|
|
368
|
-
] });
|
|
369
|
-
}
|
|
370
|
-
function withWeaverse(Component) {
|
|
371
|
-
return (props) => {
|
|
372
|
-
let { settings } = useThemeSettingsStore();
|
|
373
|
-
return /* @__PURE__ */ jsx(ThemeSettingsProvider.Provider, { value: settings, children: /* @__PURE__ */ jsx(Component, { ...props }) });
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
function FallbackError({ error }) {
|
|
377
|
-
return /* @__PURE__ */ jsx("div", { children: error?.message || "An unexpected error occurred" });
|
|
378
|
-
}
|
|
135
|
+
// src/weaverse-client.ts
|
|
379
136
|
var API_PATH = "api/public";
|
|
380
137
|
var DEFAULT_CACHE_STRATEGY = {
|
|
381
138
|
maxAge: 5,
|
|
@@ -396,13 +153,11 @@ var WeaverseClient = class {
|
|
|
396
153
|
env;
|
|
397
154
|
cache;
|
|
398
155
|
waitUntil;
|
|
399
|
-
countries;
|
|
400
156
|
constructor(args) {
|
|
401
157
|
const {
|
|
402
158
|
env,
|
|
403
159
|
storefront,
|
|
404
160
|
components,
|
|
405
|
-
countries,
|
|
406
161
|
cache,
|
|
407
162
|
waitUntil,
|
|
408
163
|
themeSchema,
|
|
@@ -415,7 +170,6 @@ var WeaverseClient = class {
|
|
|
415
170
|
this.env = env;
|
|
416
171
|
this.cache = cache;
|
|
417
172
|
this.waitUntil = waitUntil;
|
|
418
|
-
this.countries = countries;
|
|
419
173
|
this.withCache = createWithCache({ cache, waitUntil, request });
|
|
420
174
|
this.configs = getWeaverseConfigs(request, env);
|
|
421
175
|
this.basePageConfigs = {
|
|
@@ -471,10 +225,7 @@ var WeaverseClient = class {
|
|
|
471
225
|
);
|
|
472
226
|
}
|
|
473
227
|
loadThemeSettings = async (strategy) => {
|
|
474
|
-
let defaultThemeSettings =
|
|
475
|
-
if (this.themeSchema) {
|
|
476
|
-
defaultThemeSettings = generateDataFromSchema(this.themeSchema);
|
|
477
|
-
}
|
|
228
|
+
let defaultThemeSettings = generateDataFromSchema(this.themeSchema);
|
|
478
229
|
try {
|
|
479
230
|
let { API, configs } = this;
|
|
480
231
|
let { weaverseHost, projectId, isDesignMode } = configs;
|
|
@@ -496,7 +247,7 @@ var WeaverseClient = class {
|
|
|
496
247
|
});
|
|
497
248
|
}
|
|
498
249
|
let data = res || {};
|
|
499
|
-
if (
|
|
250
|
+
if (this.themeSchema?.inspector) {
|
|
500
251
|
data.theme = {
|
|
501
252
|
...defaultThemeSettings,
|
|
502
253
|
...data.theme
|
|
@@ -506,7 +257,6 @@ var WeaverseClient = class {
|
|
|
506
257
|
data = {
|
|
507
258
|
...data,
|
|
508
259
|
schema: this.themeSchema,
|
|
509
|
-
countries: this.countries || [],
|
|
510
260
|
publicEnv: this.configs.publicEnv
|
|
511
261
|
};
|
|
512
262
|
}
|
|
@@ -600,7 +350,6 @@ var WeaverseClient = class {
|
|
|
600
350
|
...basePageConfigs,
|
|
601
351
|
requestInfo: {
|
|
602
352
|
i18n: storefront.i18n,
|
|
603
|
-
// TODO: @hta218 - migrate to Remix hooks
|
|
604
353
|
queries: getRequestQueries(request),
|
|
605
354
|
pathname: new URL(request.url).pathname,
|
|
606
355
|
search: new URL(request.url).search
|
|
@@ -635,14 +384,224 @@ var WeaverseClient = class {
|
|
|
635
384
|
return item;
|
|
636
385
|
};
|
|
637
386
|
};
|
|
387
|
+
|
|
388
|
+
// src/components/main.tsx
|
|
389
|
+
var main_exports = {};
|
|
390
|
+
__export(main_exports, {
|
|
391
|
+
default: () => main_default,
|
|
392
|
+
schema: () => schema
|
|
393
|
+
});
|
|
394
|
+
var Main = forwardRef((props, ref) => {
|
|
395
|
+
let { children, dangerouslySetInnerHTML, ...rest } = props;
|
|
396
|
+
return /* @__PURE__ */ jsx(
|
|
397
|
+
"div",
|
|
398
|
+
{
|
|
399
|
+
ref,
|
|
400
|
+
...rest,
|
|
401
|
+
children,
|
|
402
|
+
dangerouslySetInnerHTML: children ? void 0 : dangerouslySetInnerHTML
|
|
403
|
+
}
|
|
404
|
+
);
|
|
405
|
+
});
|
|
406
|
+
var main_default = Main;
|
|
407
|
+
var schema = {
|
|
408
|
+
type: "main",
|
|
409
|
+
title: "Main",
|
|
410
|
+
inspector: []
|
|
411
|
+
};
|
|
412
|
+
|
|
413
|
+
// src/components/index.ts
|
|
414
|
+
var defaultComponents = [main_exports];
|
|
415
|
+
var ThemeSettingsStore = class extends EventEmitter {
|
|
416
|
+
settings = {};
|
|
417
|
+
schema;
|
|
418
|
+
publicEnv;
|
|
419
|
+
constructor(data) {
|
|
420
|
+
super();
|
|
421
|
+
let { theme, schema: schema2, publicEnv } = data || {};
|
|
422
|
+
this.settings = { ...theme };
|
|
423
|
+
this.schema = schema2;
|
|
424
|
+
this.publicEnv = publicEnv;
|
|
425
|
+
if (isBrowser) {
|
|
426
|
+
window.__weaverseThemeSettingsStore = this;
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
updateThemeSettings = (newSettings) => {
|
|
430
|
+
this.settings = {
|
|
431
|
+
...this.settings,
|
|
432
|
+
...newSettings
|
|
433
|
+
};
|
|
434
|
+
this.emit(this.settings);
|
|
435
|
+
};
|
|
436
|
+
getSnapshot = () => {
|
|
437
|
+
return this.settings;
|
|
438
|
+
};
|
|
439
|
+
getServerSnapshot = () => {
|
|
440
|
+
return this.settings;
|
|
441
|
+
};
|
|
442
|
+
};
|
|
443
|
+
function useThemeSettingsStore() {
|
|
444
|
+
let data = useRouteLoaderData("root");
|
|
445
|
+
if (isBrowser && window.__weaverseThemeSettingsStore) {
|
|
446
|
+
return window.__weaverseThemeSettingsStore;
|
|
447
|
+
}
|
|
448
|
+
return new ThemeSettingsStore(data?.weaverseTheme);
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
// src/utils/use-studio.ts
|
|
452
|
+
function useStudio(weaverse) {
|
|
453
|
+
let { revalidate } = useRevalidator();
|
|
454
|
+
let navigation = useNavigation();
|
|
455
|
+
let { pathname, search } = useLocation();
|
|
456
|
+
let navigate = useNavigate();
|
|
457
|
+
let themeSettingsStore = useThemeSettingsStore();
|
|
458
|
+
let { isDesignMode, weaverseHost, weaverseVersion, isPreviewMode } = weaverse;
|
|
459
|
+
useEffect(() => {
|
|
460
|
+
if (navigation.state === "idle") {
|
|
461
|
+
if (isPreviewMode) {
|
|
462
|
+
let previewSrc = `${weaverseHost}/static/studio/hydrogen/preview.js?v=${weaverseVersion}`;
|
|
463
|
+
loadScript(previewSrc).catch(console.error);
|
|
464
|
+
} else if (isDesignMode) {
|
|
465
|
+
weaverse.internal = {
|
|
466
|
+
...weaverse.internal,
|
|
467
|
+
navigate,
|
|
468
|
+
revalidate,
|
|
469
|
+
themeSettingsStore
|
|
470
|
+
};
|
|
471
|
+
let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`;
|
|
472
|
+
loadScript(studioSrc).then(() => {
|
|
473
|
+
window.weaverseStudio?.init(weaverse);
|
|
474
|
+
}).catch(console.error);
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
}, [pathname, search, navigation.state]);
|
|
478
|
+
usePixel(weaverse);
|
|
479
|
+
}
|
|
480
|
+
function usePixel(context) {
|
|
481
|
+
let { projectId, pageId, weaverseHost, isDesignMode } = context;
|
|
482
|
+
useEffect(() => {
|
|
483
|
+
if (!projectId || !pageId || !weaverseHost || isDesignMode) return;
|
|
484
|
+
let url = `${weaverseHost}/api/public/px`;
|
|
485
|
+
let img = new Image();
|
|
486
|
+
img.onload = () => img.remove();
|
|
487
|
+
img.src = `${url}?projectId=${projectId}&pageId=${pageId}`;
|
|
488
|
+
}, []);
|
|
489
|
+
}
|
|
490
|
+
var WeaverseHydrogenItem = class extends WeaverseItemStore {
|
|
491
|
+
constructor(initialData, weaverse) {
|
|
492
|
+
super(initialData, weaverse);
|
|
493
|
+
let { data, ...rest } = initialData;
|
|
494
|
+
let schemaData = generateDataFromSchema(this.Element.schema);
|
|
495
|
+
Object.assign(this._store, schemaData, data, rest);
|
|
496
|
+
}
|
|
497
|
+
get Element() {
|
|
498
|
+
return super.Element;
|
|
499
|
+
}
|
|
500
|
+
};
|
|
501
|
+
Weaverse.ItemConstructor = WeaverseHydrogenItem;
|
|
502
|
+
var WeaverseHydrogen = class extends Weaverse {
|
|
503
|
+
platformType = "shopify-hydrogen";
|
|
504
|
+
pageId;
|
|
505
|
+
internal;
|
|
506
|
+
requestInfo;
|
|
507
|
+
static itemInstances;
|
|
508
|
+
static elementRegistry;
|
|
509
|
+
constructor(params) {
|
|
510
|
+
let { internal, pageId, requestInfo, ...coreParams } = params;
|
|
511
|
+
super({ ...coreParams });
|
|
512
|
+
this.internal = internal;
|
|
513
|
+
this.pageId = pageId;
|
|
514
|
+
this.requestInfo = requestInfo;
|
|
515
|
+
}
|
|
516
|
+
};
|
|
517
|
+
function createWeaverseInstance(params) {
|
|
518
|
+
if (isBrowser) {
|
|
519
|
+
window.__weaverses = window.__weaverses || {};
|
|
520
|
+
let weaverse = window.__weaverses[params.pageId];
|
|
521
|
+
if (!weaverse || weaverse?.requestInfo?.pathname !== params.requestInfo.pathname || weaverse?.requestInfo?.search !== params.requestInfo.search) {
|
|
522
|
+
weaverse = new WeaverseHydrogen(params);
|
|
523
|
+
window.__weaverses[params.pageId] = weaverse;
|
|
524
|
+
}
|
|
525
|
+
if (weaverse?.isDesignMode) {
|
|
526
|
+
weaverse.requestInfo = params.requestInfo;
|
|
527
|
+
window.weaverseStudio?.refreshStudio(params);
|
|
528
|
+
}
|
|
529
|
+
return weaverse;
|
|
530
|
+
}
|
|
531
|
+
return new WeaverseHydrogen(params);
|
|
532
|
+
}
|
|
533
|
+
var StudioBridge = memo(({ context }) => {
|
|
534
|
+
useStudio(context);
|
|
535
|
+
return null;
|
|
536
|
+
});
|
|
537
|
+
function RenderRoot(props) {
|
|
538
|
+
let { data, components } = props;
|
|
539
|
+
for (let comp of [...components, ...defaultComponents]) {
|
|
540
|
+
comp?.schema?.type && WeaverseHydrogen.registerElement({
|
|
541
|
+
type: comp?.schema.type,
|
|
542
|
+
Component: comp.default,
|
|
543
|
+
schema: comp.schema,
|
|
544
|
+
loader: comp.loader
|
|
545
|
+
});
|
|
546
|
+
}
|
|
547
|
+
let { page, configs, project, pageAssignment } = data || {};
|
|
548
|
+
let weaverse = createWeaverseInstance({
|
|
549
|
+
...configs,
|
|
550
|
+
data: page,
|
|
551
|
+
pageId: page?.id,
|
|
552
|
+
internal: { project, pageAssignment }
|
|
553
|
+
});
|
|
554
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
555
|
+
/* @__PURE__ */ jsx(WeaverseRoot, { context: weaverse }),
|
|
556
|
+
/* @__PURE__ */ jsx(StudioBridge, { context: weaverse })
|
|
557
|
+
] });
|
|
558
|
+
}
|
|
559
|
+
var WeaverseHydrogenRoot = memo(
|
|
560
|
+
({
|
|
561
|
+
components,
|
|
562
|
+
errorComponent: ErrorComponent = ({ error }) => /* @__PURE__ */ jsx("div", { children: error?.message || "An unexpected error occurred" })
|
|
563
|
+
}) => {
|
|
564
|
+
let loaderData = useLoaderData();
|
|
565
|
+
let data = loaderData?.weaverseData;
|
|
566
|
+
if (data) {
|
|
567
|
+
if (data instanceof Promise) {
|
|
568
|
+
return /* @__PURE__ */ jsx(ErrorBoundary, { fallbackRender: ErrorComponent, children: /* @__PURE__ */ jsx(Suspense, { children: /* @__PURE__ */ jsx(Await, { resolve: data, children: (resolvedData) => /* @__PURE__ */ jsx(RenderRoot, { data: resolvedData, components }) }) }) });
|
|
569
|
+
}
|
|
570
|
+
return /* @__PURE__ */ jsx(RenderRoot, { data, components });
|
|
571
|
+
}
|
|
572
|
+
return /* @__PURE__ */ jsx(
|
|
573
|
+
ErrorComponent,
|
|
574
|
+
{
|
|
575
|
+
error: { message: "No Weaverse data return from route loader!" }
|
|
576
|
+
}
|
|
577
|
+
);
|
|
578
|
+
}
|
|
579
|
+
);
|
|
580
|
+
var ThemeSettingsProvider = createContext(null);
|
|
581
|
+
ThemeSettingsProvider.displayName = "WeaverseThemeSettingsProvider";
|
|
582
|
+
function withWeaverse(Component) {
|
|
583
|
+
return (props) => {
|
|
584
|
+
let { settings } = useThemeSettingsStore();
|
|
585
|
+
return /* @__PURE__ */ jsx(ThemeSettingsProvider.Provider, { value: settings, children: /* @__PURE__ */ jsx(Component, { ...props }) });
|
|
586
|
+
};
|
|
587
|
+
}
|
|
588
|
+
function useThemeSettings() {
|
|
589
|
+
let themeSettingsStore = useThemeSettingsStore();
|
|
590
|
+
let settings = useSyncExternalStore(
|
|
591
|
+
themeSettingsStore.subscribe,
|
|
592
|
+
themeSettingsStore.getSnapshot,
|
|
593
|
+
themeSettingsStore.getServerSnapshot
|
|
594
|
+
);
|
|
595
|
+
return settings;
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
// src/index.ts
|
|
638
599
|
function getSelectedProductOptions(request) {
|
|
639
600
|
let options = getSelectedProductOptions$1(request);
|
|
640
601
|
return options.filter(
|
|
641
602
|
({ name }) => name !== "isDesignMode" && !name.startsWith("weaverse")
|
|
642
603
|
);
|
|
643
604
|
}
|
|
644
|
-
|
|
645
|
-
// src/placeholders.ts
|
|
646
605
|
var IMAGES_PLACEHOLDERS = {
|
|
647
606
|
logo_white: "https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg",
|
|
648
607
|
logo_black: "https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg",
|
|
@@ -675,40 +634,6 @@ var IMAGES_PLACEHOLDERS = {
|
|
|
675
634
|
product_18: "https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg"
|
|
676
635
|
};
|
|
677
636
|
|
|
678
|
-
|
|
679
|
-
var WeaverseHydrogen = class extends Weaverse {
|
|
680
|
-
platformType = "shopify-hydrogen";
|
|
681
|
-
pageId;
|
|
682
|
-
internal;
|
|
683
|
-
requestInfo;
|
|
684
|
-
static itemInstances;
|
|
685
|
-
static elementRegistry;
|
|
686
|
-
constructor(params) {
|
|
687
|
-
let { internal, pageId, requestInfo, ...coreParams } = params;
|
|
688
|
-
super({ ...coreParams });
|
|
689
|
-
this.internal = internal;
|
|
690
|
-
this.pageId = pageId;
|
|
691
|
-
this.requestInfo = requestInfo;
|
|
692
|
-
}
|
|
693
|
-
};
|
|
694
|
-
var WeaverseHydrogenItem = class extends WeaverseItemStore {
|
|
695
|
-
constructor(initialData, weaverse) {
|
|
696
|
-
super(initialData, weaverse);
|
|
697
|
-
let { data, ...rest } = initialData;
|
|
698
|
-
Object.assign(this._store, this._schemaData, data, rest);
|
|
699
|
-
}
|
|
700
|
-
get Element() {
|
|
701
|
-
return super.Element;
|
|
702
|
-
}
|
|
703
|
-
get _schemaData() {
|
|
704
|
-
if (this.Element?.schema) {
|
|
705
|
-
return generateDataFromSchema(this.Element.schema);
|
|
706
|
-
}
|
|
707
|
-
return {};
|
|
708
|
-
}
|
|
709
|
-
};
|
|
710
|
-
Weaverse.ItemConstructor = WeaverseHydrogenItem;
|
|
711
|
-
|
|
712
|
-
export { IMAGES_PLACEHOLDERS, WeaverseClient, WeaverseHydrogen, WeaverseHydrogenItem, WeaverseHydrogenRoot, generateDataFromSchema, getPreviewData, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, recursivelyAddDataItem, resizeShopifyImage, useThemeSettings, withWeaverse };
|
|
637
|
+
export { IMAGES_PLACEHOLDERS, WeaverseClient, WeaverseHydrogen, WeaverseHydrogenItem, WeaverseHydrogenRoot, getSelectedProductOptions, useThemeSettings, withWeaverse };
|
|
713
638
|
//# sourceMappingURL=index.mjs.map
|
|
714
639
|
//# sourceMappingURL=index.mjs.map
|