@weaverse/hydrogen 1.1.20 → 1.2.1

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 CHANGED
@@ -123,12 +123,11 @@ type WeaverseThemeConfigs = {
123
123
  countries: Localizations;
124
124
  };
125
125
  type WeaverseInternal = {
126
- themeConfigs: WeaverseThemeConfigs;
127
126
  pageAssignment: HydrogenPageAssignment;
128
127
  project: HydrogenProjectType;
129
128
  navigate: NavigateFunction;
130
129
  revalidate: () => void;
131
- publicEnv?: PublicEnv;
130
+ themeSettingsStore: WeaverseThemeSettingsStore;
132
131
  };
133
132
  type HydrogenComponentPresets = {
134
133
  type: string;
@@ -244,6 +243,12 @@ type WeaverseThemeSettingsStore = {
244
243
  subscribe(listener: () => void): () => void;
245
244
  getSnapshot(): HydrogenThemeSettings | null;
246
245
  getServerSnapshot(): HydrogenThemeSettings | null;
246
+ settings: HydrogenThemeSettings | null;
247
+ listeners: (() => void)[];
248
+ emitChange(): void;
249
+ countries: Localizations;
250
+ schema: HydrogenThemeSchema;
251
+ publicEnv?: PublicEnv;
247
252
  };
248
253
  type HydrogenThemeEnv = {
249
254
  WEAVERSE_PROJECT_ID: string;
@@ -266,7 +271,6 @@ declare global {
266
271
  interface Window {
267
272
  __weaverse: WeaverseHydrogen;
268
273
  __weaverses: WeaverseHydrogen[];
269
- __weaverseThemeSettingsStore: WeaverseThemeSettingsStore;
270
274
  }
271
275
  }
272
276
 
@@ -291,6 +295,24 @@ declare class WeaverseClient {
291
295
  }
292
296
  declare function createWeaverseClient(args: WeaverseClientArgs): WeaverseClient;
293
297
 
298
+ declare class ThemeSettingsStore implements WeaverseThemeSettingsStore {
299
+ settings: HydrogenThemeSettings | null;
300
+ listeners: (() => void)[];
301
+ countries: Localizations;
302
+ schema: HydrogenThemeSchema;
303
+ publicEnv?: PublicEnv;
304
+ constructor({ theme, countries, schema, publicEnv, }: {
305
+ theme: HydrogenThemeSettings;
306
+ countries: Localizations;
307
+ schema: HydrogenThemeSchema;
308
+ publicEnv?: PublicEnv;
309
+ });
310
+ updateThemeSettings: (newSettings: HydrogenThemeSettings) => void;
311
+ subscribe: (listener: () => void) => (() => void);
312
+ getSnapshot: () => HydrogenThemeSettings | null;
313
+ getServerSnapshot: () => HydrogenThemeSettings | null;
314
+ emitChange: () => void;
315
+ }
294
316
  declare function useThemeSettings<T = HydrogenThemeSettings>(): T;
295
317
 
296
318
  declare function getRequestQueries<T = Record<string, string | boolean>>(request: Request): T;
@@ -311,5 +333,6 @@ declare function createContentSecurityPolicy(request: Request, directives?: Reco
311
333
  };
312
334
 
313
335
  declare function WeaverseHydrogenRoot({ errorComponent: ErrorComponent, components, }: WeaverseHydrogenRootProps): React__default.JSX.Element;
336
+ declare let withWeaverse: (Component: React__default.ComponentType<any>) => (props: any) => React__default.JSX.Element;
314
337
 
315
- export { AllCacheOptions, ComponentLoaderArgs, FetchProjectPayload, FetchProjectRequestBody, FetchWithCacheOptions, HydrogenComponent, HydrogenComponentData, HydrogenComponentInstance, HydrogenComponentLoaderFunction, HydrogenComponentPresets, HydrogenComponentProps, HydrogenComponentSchema, HydrogenElement, HydrogenPageAssignment, HydrogenPageConfigs, HydrogenPageData, HydrogenProjectConfig, HydrogenProjectType, HydrogenThemeEnv, HydrogenThemeInfo, HydrogenThemeSchema, HydrogenThemeSettings, HydrogenToolbarAction, I18nLocale, InspectorGroup, Locale, Localizations, PageLoadParams, PageType, PublicEnv, RouteLoaderArgs, WeaverseClient, WeaverseClientArgs, WeaverseHydrogen, WeaverseHydrogenInit, WeaverseHydrogenRoot, WeaverseHydrogenRootProps, WeaverseInternal, WeaverseLoaderData, WeaverseLoaderRequestInfo, WeaverseProjectConfigs, WeaverseStorefrontData, WeaverseStudioQueries, WeaverseThemeConfigs, WeaverseThemeSettingsStore, createContentSecurityPolicy, createWeaverseClient, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, getWeaverseCsp, useThemeSettings };
338
+ export { AllCacheOptions, ComponentLoaderArgs, FetchProjectPayload, FetchProjectRequestBody, FetchWithCacheOptions, HydrogenComponent, HydrogenComponentData, HydrogenComponentInstance, HydrogenComponentLoaderFunction, HydrogenComponentPresets, HydrogenComponentProps, HydrogenComponentSchema, HydrogenElement, HydrogenPageAssignment, HydrogenPageConfigs, HydrogenPageData, HydrogenProjectConfig, HydrogenProjectType, HydrogenThemeEnv, HydrogenThemeInfo, HydrogenThemeSchema, HydrogenThemeSettings, HydrogenToolbarAction, I18nLocale, InspectorGroup, Locale, Localizations, PageLoadParams, PageType, PublicEnv, RouteLoaderArgs, ThemeSettingsStore, WeaverseClient, WeaverseClientArgs, WeaverseHydrogen, WeaverseHydrogenInit, WeaverseHydrogenRoot, WeaverseHydrogenRootProps, WeaverseInternal, WeaverseLoaderData, WeaverseLoaderRequestInfo, WeaverseProjectConfigs, WeaverseStorefrontData, WeaverseStudioQueries, WeaverseThemeConfigs, WeaverseThemeSettingsStore, createContentSecurityPolicy, createWeaverseClient, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, getWeaverseCsp, useThemeSettings, withWeaverse };
package/dist/index.d.ts CHANGED
@@ -123,12 +123,11 @@ type WeaverseThemeConfigs = {
123
123
  countries: Localizations;
124
124
  };
125
125
  type WeaverseInternal = {
126
- themeConfigs: WeaverseThemeConfigs;
127
126
  pageAssignment: HydrogenPageAssignment;
128
127
  project: HydrogenProjectType;
129
128
  navigate: NavigateFunction;
130
129
  revalidate: () => void;
131
- publicEnv?: PublicEnv;
130
+ themeSettingsStore: WeaverseThemeSettingsStore;
132
131
  };
133
132
  type HydrogenComponentPresets = {
134
133
  type: string;
@@ -244,6 +243,12 @@ type WeaverseThemeSettingsStore = {
244
243
  subscribe(listener: () => void): () => void;
245
244
  getSnapshot(): HydrogenThemeSettings | null;
246
245
  getServerSnapshot(): HydrogenThemeSettings | null;
246
+ settings: HydrogenThemeSettings | null;
247
+ listeners: (() => void)[];
248
+ emitChange(): void;
249
+ countries: Localizations;
250
+ schema: HydrogenThemeSchema;
251
+ publicEnv?: PublicEnv;
247
252
  };
248
253
  type HydrogenThemeEnv = {
249
254
  WEAVERSE_PROJECT_ID: string;
@@ -266,7 +271,6 @@ declare global {
266
271
  interface Window {
267
272
  __weaverse: WeaverseHydrogen;
268
273
  __weaverses: WeaverseHydrogen[];
269
- __weaverseThemeSettingsStore: WeaverseThemeSettingsStore;
270
274
  }
271
275
  }
272
276
 
@@ -291,6 +295,24 @@ declare class WeaverseClient {
291
295
  }
292
296
  declare function createWeaverseClient(args: WeaverseClientArgs): WeaverseClient;
293
297
 
298
+ declare class ThemeSettingsStore implements WeaverseThemeSettingsStore {
299
+ settings: HydrogenThemeSettings | null;
300
+ listeners: (() => void)[];
301
+ countries: Localizations;
302
+ schema: HydrogenThemeSchema;
303
+ publicEnv?: PublicEnv;
304
+ constructor({ theme, countries, schema, publicEnv, }: {
305
+ theme: HydrogenThemeSettings;
306
+ countries: Localizations;
307
+ schema: HydrogenThemeSchema;
308
+ publicEnv?: PublicEnv;
309
+ });
310
+ updateThemeSettings: (newSettings: HydrogenThemeSettings) => void;
311
+ subscribe: (listener: () => void) => (() => void);
312
+ getSnapshot: () => HydrogenThemeSettings | null;
313
+ getServerSnapshot: () => HydrogenThemeSettings | null;
314
+ emitChange: () => void;
315
+ }
294
316
  declare function useThemeSettings<T = HydrogenThemeSettings>(): T;
295
317
 
296
318
  declare function getRequestQueries<T = Record<string, string | boolean>>(request: Request): T;
@@ -311,5 +333,6 @@ declare function createContentSecurityPolicy(request: Request, directives?: Reco
311
333
  };
312
334
 
313
335
  declare function WeaverseHydrogenRoot({ errorComponent: ErrorComponent, components, }: WeaverseHydrogenRootProps): React__default.JSX.Element;
336
+ declare let withWeaverse: (Component: React__default.ComponentType<any>) => (props: any) => React__default.JSX.Element;
314
337
 
315
- export { AllCacheOptions, ComponentLoaderArgs, FetchProjectPayload, FetchProjectRequestBody, FetchWithCacheOptions, HydrogenComponent, HydrogenComponentData, HydrogenComponentInstance, HydrogenComponentLoaderFunction, HydrogenComponentPresets, HydrogenComponentProps, HydrogenComponentSchema, HydrogenElement, HydrogenPageAssignment, HydrogenPageConfigs, HydrogenPageData, HydrogenProjectConfig, HydrogenProjectType, HydrogenThemeEnv, HydrogenThemeInfo, HydrogenThemeSchema, HydrogenThemeSettings, HydrogenToolbarAction, I18nLocale, InspectorGroup, Locale, Localizations, PageLoadParams, PageType, PublicEnv, RouteLoaderArgs, WeaverseClient, WeaverseClientArgs, WeaverseHydrogen, WeaverseHydrogenInit, WeaverseHydrogenRoot, WeaverseHydrogenRootProps, WeaverseInternal, WeaverseLoaderData, WeaverseLoaderRequestInfo, WeaverseProjectConfigs, WeaverseStorefrontData, WeaverseStudioQueries, WeaverseThemeConfigs, WeaverseThemeSettingsStore, createContentSecurityPolicy, createWeaverseClient, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, getWeaverseCsp, useThemeSettings };
338
+ export { AllCacheOptions, ComponentLoaderArgs, FetchProjectPayload, FetchProjectRequestBody, FetchWithCacheOptions, HydrogenComponent, HydrogenComponentData, HydrogenComponentInstance, HydrogenComponentLoaderFunction, HydrogenComponentPresets, HydrogenComponentProps, HydrogenComponentSchema, HydrogenElement, HydrogenPageAssignment, HydrogenPageConfigs, HydrogenPageData, HydrogenProjectConfig, HydrogenProjectType, HydrogenThemeEnv, HydrogenThemeInfo, HydrogenThemeSchema, HydrogenThemeSettings, HydrogenToolbarAction, I18nLocale, InspectorGroup, Locale, Localizations, PageLoadParams, PageType, PublicEnv, RouteLoaderArgs, ThemeSettingsStore, WeaverseClient, WeaverseClientArgs, WeaverseHydrogen, WeaverseHydrogenInit, WeaverseHydrogenRoot, WeaverseHydrogenRootProps, WeaverseInternal, WeaverseLoaderData, WeaverseLoaderRequestInfo, WeaverseProjectConfigs, WeaverseStorefrontData, WeaverseStudioQueries, WeaverseThemeConfigs, WeaverseThemeSettingsStore, createContentSecurityPolicy, createWeaverseClient, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, getWeaverseCsp, useThemeSettings, withWeaverse };
package/dist/index.js CHANGED
@@ -31,6 +31,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
31
31
  // src/index.ts
32
32
  var src_exports = {};
33
33
  __export(src_exports, {
34
+ ThemeSettingsStore: () => ThemeSettingsStore,
34
35
  WeaverseClient: () => WeaverseClient,
35
36
  WeaverseHydrogenRoot: () => WeaverseHydrogenRoot,
36
37
  createContentSecurityPolicy: () => createContentSecurityPolicy,
@@ -39,7 +40,8 @@ __export(src_exports, {
39
40
  getSelectedProductOptions: () => getSelectedProductOptions,
40
41
  getWeaverseConfigs: () => getWeaverseConfigs,
41
42
  getWeaverseCsp: () => getWeaverseCsp,
42
- useThemeSettings: () => useThemeSettings
43
+ useThemeSettings: () => useThemeSettings,
44
+ withWeaverse: () => withWeaverse
43
45
  });
44
46
  module.exports = __toCommonJS(src_exports);
45
47
  __reExport(src_exports, require("@weaverse/react"), module.exports);
@@ -49,7 +51,7 @@ var import_hydrogen = require("@shopify/hydrogen");
49
51
 
50
52
  // package.json
51
53
  var package_default = {
52
- version: "1.1.20",
54
+ version: "1.2.1",
53
55
  license: "MIT",
54
56
  main: "dist/index.js",
55
57
  typings: "dist/index.d.ts",
@@ -83,8 +85,8 @@ var package_default = {
83
85
  author: "Weaverse Team",
84
86
  dependencies: {
85
87
  "@remix-run/react": "1.19.1",
86
- "@shopify/hydrogen": "2023.7.7",
87
- "@weaverse/react": "1.1.20",
88
+ "@shopify/hydrogen": "2023.7.8",
89
+ "@weaverse/react": "1.2.1",
88
90
  "react-error-boundary": "^4.0.11"
89
91
  },
90
92
  devDependencies: {
@@ -200,7 +202,7 @@ var WeaverseClient = class {
200
202
  method: "POST",
201
203
  body: JSON.stringify(body)
202
204
  };
203
- let url = `${this.configs.weaverseHost}/api/public/project`;
205
+ let url = `${this.configs.weaverseHost}/${this.API}`;
204
206
  let payload;
205
207
  if (this.configs.isDesignMode) {
206
208
  payload = await fetch(url, reqInit).then((res) => res.json());
@@ -294,86 +296,13 @@ function createWeaverseClient(args) {
294
296
  }
295
297
 
296
298
  // src/hooks/use-theme-settings.ts
297
- var import_react = require("@remix-run/react");
298
- var import_react2 = require("@weaverse/react");
299
299
  var import_react3 = require("react");
300
- var settings = null;
301
- var listeners = [];
302
- var themeSettingsStore = {
303
- updateThemeSettings(newSettings) {
304
- settings = { ...settings, ...newSettings };
305
- emitChange();
306
- },
307
- subscribe(listener) {
308
- listeners = [...listeners, listener];
309
- return () => {
310
- listeners = listeners.filter((l) => l !== listener);
311
- };
312
- },
313
- getSnapshot() {
314
- return settings;
315
- },
316
- getServerSnapshot() {
317
- return settings;
318
- }
319
- };
320
- function emitChange() {
321
- for (let listener of listeners) {
322
- listener();
323
- }
324
- }
325
- if (import_react2.isBrowser) {
326
- window.__weaverseThemeSettingsStore = themeSettingsStore;
327
- }
328
- function useThemeSettings() {
329
- let settings2 = (0, import_react3.useSyncExternalStore)(
330
- themeSettingsStore.subscribe,
331
- themeSettingsStore.getSnapshot,
332
- themeSettingsStore.getServerSnapshot
333
- );
334
- let { weaverseTheme } = (0, import_react.useLoaderData)();
335
- (0, import_react3.useEffect)(() => {
336
- if (weaverseTheme) {
337
- let settings3 = weaverseTheme.theme;
338
- if (settings3) {
339
- themeSettingsStore.updateThemeSettings(settings3);
340
- }
341
- } else {
342
- console.warn(
343
- `'weaverseTheme' should be returned from root loader in order to get global settings from 'useThemeSettings'.`
344
- );
345
- }
346
- }, [weaverseTheme]);
347
- return settings2;
348
- }
349
-
350
- // src/wrappers.ts
351
- var import_hydrogen2 = require("@shopify/hydrogen");
352
- var import_hydrogen3 = require("@shopify/hydrogen");
353
- function getSelectedProductOptions(request) {
354
- let options = (0, import_hydrogen2.getSelectedProductOptions)(request);
355
- return options.filter(
356
- ({ name }) => name !== "isDesignMode" && !name.startsWith("weaverse")
357
- );
358
- }
359
- function createContentSecurityPolicy(request, directives) {
360
- let weaverseDirectives = getWeaverseCsp(request);
361
- return (0, import_hydrogen3.createContentSecurityPolicy)({
362
- ...directives,
363
- ...weaverseDirectives
364
- });
365
- }
366
-
367
- // src/WeaverseHydrogenRoot.tsx
368
- var import_react8 = require("@remix-run/react");
369
- var import_react9 = require("@weaverse/react");
370
- var import_react10 = __toESM(require("react"));
371
- var import_react_error_boundary = require("react-error-boundary");
372
300
 
373
301
  // src/context.ts
374
- var import_react4 = require("@weaverse/react");
302
+ var import_react = require("@weaverse/react");
303
+ var import_react2 = require("react");
375
304
  function createCachedWeaverseInstance(init) {
376
- if (import_react4.isBrowser) {
305
+ if (import_react.isBrowser) {
377
306
  window.__weaverses = window.__weaverses || [];
378
307
  let weaverse = window.__weaverses.find((w) => {
379
308
  let { pathname, search } = w.requestInfo;
@@ -381,13 +310,13 @@ function createCachedWeaverseInstance(init) {
381
310
  return pathname === init.requestInfo.pathname && search === init.requestInfo.search && __cachedId === init.data.__cachedId;
382
311
  });
383
312
  if (!weaverse) {
384
- weaverse = new import_react4.Weaverse(init);
313
+ weaverse = new import_react.Weaverse(init);
385
314
  window.__weaverses.push(weaverse);
386
315
  console.log("\u{1F4BF} Weaverse", weaverse);
387
316
  }
388
317
  return weaverse;
389
318
  }
390
- return new import_react4.Weaverse(init);
319
+ return new import_react.Weaverse(init);
391
320
  }
392
321
  function createWeaverseInstance(weaverseData, components) {
393
322
  let { page, configs, project, pageAssignment } = weaverseData || {};
@@ -408,33 +337,103 @@ function createWeaverseInstance(weaverseData, components) {
408
337
  });
409
338
  return weaverse;
410
339
  }
340
+ var ThemeProvider = (0, import_react2.createContext)(null);
341
+ ThemeProvider.displayName = "WeaverseThemeProvider";
342
+
343
+ // src/hooks/use-theme-settings.ts
344
+ var ThemeSettingsStore = class {
345
+ constructor({
346
+ theme,
347
+ countries,
348
+ schema,
349
+ publicEnv
350
+ }) {
351
+ this.settings = null;
352
+ this.listeners = [];
353
+ this.updateThemeSettings = (newSettings) => {
354
+ this.settings = { ...this.settings, ...newSettings };
355
+ this.emitChange();
356
+ };
357
+ this.subscribe = (listener) => {
358
+ this.listeners = [...this.listeners, listener];
359
+ return () => {
360
+ this.listeners = this.listeners.filter((l) => l !== listener);
361
+ };
362
+ };
363
+ this.getSnapshot = () => {
364
+ return this.settings;
365
+ };
366
+ this.getServerSnapshot = () => {
367
+ return this.settings;
368
+ };
369
+ this.emitChange = () => {
370
+ for (const listener of this.listeners) {
371
+ listener();
372
+ }
373
+ };
374
+ this.settings = theme;
375
+ this.countries = countries;
376
+ this.schema = schema;
377
+ this.publicEnv = publicEnv;
378
+ }
379
+ };
380
+ function useThemeSettings() {
381
+ let themeSettingsStore = (0, import_react3.useContext)(ThemeProvider);
382
+ let settings = (0, import_react3.useSyncExternalStore)(
383
+ themeSettingsStore.subscribe,
384
+ themeSettingsStore.getSnapshot,
385
+ themeSettingsStore.getServerSnapshot
386
+ );
387
+ return settings;
388
+ }
389
+
390
+ // src/wrappers.ts
391
+ var import_hydrogen2 = require("@shopify/hydrogen");
392
+ var import_hydrogen3 = require("@shopify/hydrogen");
393
+ function getSelectedProductOptions(request) {
394
+ let options = (0, import_hydrogen2.getSelectedProductOptions)(request);
395
+ return options.filter(
396
+ ({ name }) => name !== "isDesignMode" && !name.startsWith("weaverse")
397
+ );
398
+ }
399
+ function createContentSecurityPolicy(request, directives) {
400
+ let weaverseDirectives = getWeaverseCsp(request);
401
+ return (0, import_hydrogen3.createContentSecurityPolicy)({
402
+ ...directives,
403
+ ...weaverseDirectives
404
+ });
405
+ }
406
+
407
+ // src/WeaverseHydrogenRoot.tsx
408
+ var import_react7 = require("@remix-run/react");
409
+ var import_react8 = require("@weaverse/react");
410
+ var import_react9 = __toESM(require("react"));
411
+ var import_react_error_boundary = require("react-error-boundary");
411
412
 
412
413
  // src/hooks/use-studio.ts
413
- var import_react5 = require("@remix-run/react");
414
- var import_react6 = require("@weaverse/react");
415
- var import_react7 = require("react");
414
+ var import_react4 = require("@remix-run/react");
415
+ var import_react5 = require("@weaverse/react");
416
+ var import_react6 = require("react");
416
417
  function useStudio(weaverse) {
417
- let { weaverseTheme } = (0, import_react5.useRouteLoaderData)("root");
418
- let navigate = (0, import_react5.useNavigate)();
419
- let { revalidate } = (0, import_react5.useRevalidator)();
420
- let { countries, schema, publicEnv } = weaverseTheme || {};
418
+ let navigate = (0, import_react4.useNavigate)();
419
+ let { revalidate } = (0, import_react4.useRevalidator)();
420
+ let themeSettingsStore = (0, import_react6.useContext)(ThemeProvider);
421
421
  let { isDesignMode, weaverseHost, weaverseVersion } = weaverse;
422
- let isStudio = import_react6.isIframe && isDesignMode && weaverseHost && weaverseVersion;
423
- (0, import_react7.useEffect)(() => {
422
+ let isStudio = import_react5.isIframe && isDesignMode && weaverseHost && weaverseVersion;
423
+ (0, import_react6.useEffect)(() => {
424
424
  if (isStudio) {
425
425
  weaverse.internal = {
426
426
  ...weaverse.internal,
427
- publicEnv,
428
427
  navigate,
429
428
  revalidate,
430
- themeConfigs: { schema, countries }
429
+ themeSettingsStore
431
430
  };
432
431
  window.__weaverse = weaverse;
433
432
  if (window.weaverseStudio) {
434
433
  window.weaverseStudio.init(weaverse);
435
434
  } else {
436
435
  let studioSrc = `${weaverseHost}/assets/studio/hydrogen/index.js?v=${weaverseVersion}`;
437
- (0, import_react6.loadScript)(studioSrc);
436
+ (0, import_react5.loadScript)(studioSrc);
438
437
  }
439
438
  }
440
439
  }, [weaverse]);
@@ -445,37 +444,45 @@ function WeaverseHydrogenRoot({
445
444
  errorComponent: ErrorComponent,
446
445
  components
447
446
  }) {
448
- let loaderData = (0, import_react8.useLoaderData)();
447
+ let loaderData = (0, import_react7.useLoaderData)();
449
448
  let data = loaderData?.weaverseData;
450
449
  if (data) {
451
450
  if (data instanceof Promise) {
452
- return /* @__PURE__ */ import_react10.default.createElement(
451
+ return /* @__PURE__ */ import_react9.default.createElement(
453
452
  import_react_error_boundary.ErrorBoundary,
454
453
  {
455
- fallbackRender: ErrorComponent || (() => /* @__PURE__ */ import_react10.default.createElement(import_react10.default.Fragment, null, "An error occurred!"))
454
+ fallbackRender: ErrorComponent || (() => /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, "An error occurred!"))
456
455
  },
457
- /* @__PURE__ */ import_react10.default.createElement(import_react10.Suspense, null, /* @__PURE__ */ import_react10.default.createElement(import_react8.Await, { resolve: data }, (resolvedData) => {
458
- return /* @__PURE__ */ import_react10.default.createElement(RenderRoot, { data: resolvedData, components });
456
+ /* @__PURE__ */ import_react9.default.createElement(import_react9.Suspense, null, /* @__PURE__ */ import_react9.default.createElement(import_react7.Await, { resolve: data }, (resolvedData) => {
457
+ return /* @__PURE__ */ import_react9.default.createElement(RenderRoot, { data: resolvedData, components });
459
458
  }))
460
459
  );
461
460
  }
462
- return /* @__PURE__ */ import_react10.default.createElement(RenderRoot, { data, components });
461
+ return /* @__PURE__ */ import_react9.default.createElement(RenderRoot, { data, components });
463
462
  }
464
- return ErrorComponent ? /* @__PURE__ */ import_react10.default.createElement(
463
+ return ErrorComponent ? /* @__PURE__ */ import_react9.default.createElement(
465
464
  ErrorComponent,
466
465
  {
467
466
  error: { message: "No Weaverse data return from route loader!" }
468
467
  }
469
- ) : /* @__PURE__ */ import_react10.default.createElement(import_react10.default.Fragment, null, "No Weaverse data return from route loader!");
468
+ ) : /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, "No Weaverse data return from route loader!");
470
469
  }
471
470
  function RenderRoot(props) {
472
471
  let { data, components } = props;
473
472
  let weaverse = createWeaverseInstance(data, components);
474
473
  useStudio(weaverse);
475
- return /* @__PURE__ */ import_react10.default.createElement(import_react9.WeaverseRoot, { context: weaverse });
474
+ return /* @__PURE__ */ import_react9.default.createElement(import_react8.WeaverseRoot, { context: weaverse });
476
475
  }
476
+ var withWeaverse = (Component) => {
477
+ return (props) => {
478
+ let { weaverseTheme } = (0, import_react7.useLoaderData)();
479
+ let themeSettingsStore = new ThemeSettingsStore(weaverseTheme);
480
+ return /* @__PURE__ */ import_react9.default.createElement(ThemeProvider.Provider, { value: themeSettingsStore }, /* @__PURE__ */ import_react9.default.createElement(Component, { ...props }));
481
+ };
482
+ };
477
483
  // Annotate the CommonJS export names for ESM import in node:
478
484
  0 && (module.exports = {
485
+ ThemeSettingsStore,
479
486
  WeaverseClient,
480
487
  WeaverseHydrogenRoot,
481
488
  createContentSecurityPolicy,
@@ -485,5 +492,6 @@ function RenderRoot(props) {
485
492
  getWeaverseConfigs,
486
493
  getWeaverseCsp,
487
494
  useThemeSettings,
495
+ withWeaverse,
488
496
  ...require("@weaverse/react")
489
497
  });
package/dist/index.mjs CHANGED
@@ -6,7 +6,7 @@ import "@shopify/hydrogen";
6
6
 
7
7
  // package.json
8
8
  var package_default = {
9
- version: "1.1.20",
9
+ version: "1.2.1",
10
10
  license: "MIT",
11
11
  main: "dist/index.js",
12
12
  typings: "dist/index.d.ts",
@@ -40,8 +40,8 @@ var package_default = {
40
40
  author: "Weaverse Team",
41
41
  dependencies: {
42
42
  "@remix-run/react": "1.19.1",
43
- "@shopify/hydrogen": "2023.7.7",
44
- "@weaverse/react": "1.1.20",
43
+ "@shopify/hydrogen": "2023.7.8",
44
+ "@weaverse/react": "1.2.1",
45
45
  "react-error-boundary": "^4.0.11"
46
46
  },
47
47
  devDependencies: {
@@ -157,7 +157,7 @@ var WeaverseClient = class {
157
157
  method: "POST",
158
158
  body: JSON.stringify(body)
159
159
  };
160
- let url = `${this.configs.weaverseHost}/api/public/project`;
160
+ let url = `${this.configs.weaverseHost}/${this.API}`;
161
161
  let payload;
162
162
  if (this.configs.isDesignMode) {
163
163
  payload = await fetch(url, reqInit).then((res) => res.json());
@@ -251,86 +251,13 @@ function createWeaverseClient(args) {
251
251
  }
252
252
 
253
253
  // src/hooks/use-theme-settings.ts
254
- import { useLoaderData } from "@remix-run/react";
255
- import { isBrowser } from "@weaverse/react";
256
- import { useEffect, useSyncExternalStore } from "react";
257
- var settings = null;
258
- var listeners = [];
259
- var themeSettingsStore = {
260
- updateThemeSettings(newSettings) {
261
- settings = { ...settings, ...newSettings };
262
- emitChange();
263
- },
264
- subscribe(listener) {
265
- listeners = [...listeners, listener];
266
- return () => {
267
- listeners = listeners.filter((l) => l !== listener);
268
- };
269
- },
270
- getSnapshot() {
271
- return settings;
272
- },
273
- getServerSnapshot() {
274
- return settings;
275
- }
276
- };
277
- function emitChange() {
278
- for (let listener of listeners) {
279
- listener();
280
- }
281
- }
282
- if (isBrowser) {
283
- window.__weaverseThemeSettingsStore = themeSettingsStore;
284
- }
285
- function useThemeSettings() {
286
- let settings2 = useSyncExternalStore(
287
- themeSettingsStore.subscribe,
288
- themeSettingsStore.getSnapshot,
289
- themeSettingsStore.getServerSnapshot
290
- );
291
- let { weaverseTheme } = useLoaderData();
292
- useEffect(() => {
293
- if (weaverseTheme) {
294
- let settings3 = weaverseTheme.theme;
295
- if (settings3) {
296
- themeSettingsStore.updateThemeSettings(settings3);
297
- }
298
- } else {
299
- console.warn(
300
- `'weaverseTheme' should be returned from root loader in order to get global settings from 'useThemeSettings'.`
301
- );
302
- }
303
- }, [weaverseTheme]);
304
- return settings2;
305
- }
306
-
307
- // src/wrappers.ts
308
- import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from "@shopify/hydrogen";
309
- import { createContentSecurityPolicy as hydrogen_createContentSecurityPolicy } from "@shopify/hydrogen";
310
- function getSelectedProductOptions(request) {
311
- let options = hydrogen_getSelectedProductOptions(request);
312
- return options.filter(
313
- ({ name }) => name !== "isDesignMode" && !name.startsWith("weaverse")
314
- );
315
- }
316
- function createContentSecurityPolicy(request, directives) {
317
- let weaverseDirectives = getWeaverseCsp(request);
318
- return hydrogen_createContentSecurityPolicy({
319
- ...directives,
320
- ...weaverseDirectives
321
- });
322
- }
323
-
324
- // src/WeaverseHydrogenRoot.tsx
325
- import { Await, useLoaderData as useLoaderData2 } from "@remix-run/react";
326
- import { WeaverseRoot } from "@weaverse/react";
327
- import React, { Suspense } from "react";
328
- import { ErrorBoundary } from "react-error-boundary";
254
+ import { useContext, useSyncExternalStore } from "react";
329
255
 
330
256
  // src/context.ts
331
- import { Weaverse, isBrowser as isBrowser2 } from "@weaverse/react";
257
+ import { Weaverse, isBrowser } from "@weaverse/react";
258
+ import { createContext } from "react";
332
259
  function createCachedWeaverseInstance(init) {
333
- if (isBrowser2) {
260
+ if (isBrowser) {
334
261
  window.__weaverses = window.__weaverses || [];
335
262
  let weaverse = window.__weaverses.find((w) => {
336
263
  let { pathname, search } = w.requestInfo;
@@ -365,30 +292,96 @@ function createWeaverseInstance(weaverseData, components) {
365
292
  });
366
293
  return weaverse;
367
294
  }
295
+ var ThemeProvider = createContext(null);
296
+ ThemeProvider.displayName = "WeaverseThemeProvider";
297
+
298
+ // src/hooks/use-theme-settings.ts
299
+ var ThemeSettingsStore = class {
300
+ constructor({
301
+ theme,
302
+ countries,
303
+ schema,
304
+ publicEnv
305
+ }) {
306
+ this.settings = null;
307
+ this.listeners = [];
308
+ this.updateThemeSettings = (newSettings) => {
309
+ this.settings = { ...this.settings, ...newSettings };
310
+ this.emitChange();
311
+ };
312
+ this.subscribe = (listener) => {
313
+ this.listeners = [...this.listeners, listener];
314
+ return () => {
315
+ this.listeners = this.listeners.filter((l) => l !== listener);
316
+ };
317
+ };
318
+ this.getSnapshot = () => {
319
+ return this.settings;
320
+ };
321
+ this.getServerSnapshot = () => {
322
+ return this.settings;
323
+ };
324
+ this.emitChange = () => {
325
+ for (const listener of this.listeners) {
326
+ listener();
327
+ }
328
+ };
329
+ this.settings = theme;
330
+ this.countries = countries;
331
+ this.schema = schema;
332
+ this.publicEnv = publicEnv;
333
+ }
334
+ };
335
+ function useThemeSettings() {
336
+ let themeSettingsStore = useContext(ThemeProvider);
337
+ let settings = useSyncExternalStore(
338
+ themeSettingsStore.subscribe,
339
+ themeSettingsStore.getSnapshot,
340
+ themeSettingsStore.getServerSnapshot
341
+ );
342
+ return settings;
343
+ }
344
+
345
+ // src/wrappers.ts
346
+ import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from "@shopify/hydrogen";
347
+ import { createContentSecurityPolicy as hydrogen_createContentSecurityPolicy } from "@shopify/hydrogen";
348
+ function getSelectedProductOptions(request) {
349
+ let options = hydrogen_getSelectedProductOptions(request);
350
+ return options.filter(
351
+ ({ name }) => name !== "isDesignMode" && !name.startsWith("weaverse")
352
+ );
353
+ }
354
+ function createContentSecurityPolicy(request, directives) {
355
+ let weaverseDirectives = getWeaverseCsp(request);
356
+ return hydrogen_createContentSecurityPolicy({
357
+ ...directives,
358
+ ...weaverseDirectives
359
+ });
360
+ }
361
+
362
+ // src/WeaverseHydrogenRoot.tsx
363
+ import { Await, useLoaderData } from "@remix-run/react";
364
+ import { WeaverseRoot } from "@weaverse/react";
365
+ import React, { Suspense } from "react";
366
+ import { ErrorBoundary } from "react-error-boundary";
368
367
 
369
368
  // src/hooks/use-studio.ts
370
- import {
371
- useNavigate,
372
- useRevalidator,
373
- useRouteLoaderData
374
- } from "@remix-run/react";
369
+ import { useNavigate, useRevalidator } from "@remix-run/react";
375
370
  import { isIframe, loadScript } from "@weaverse/react";
376
- import { useEffect as useEffect2 } from "react";
371
+ import { useContext as useContext2, useEffect } from "react";
377
372
  function useStudio(weaverse) {
378
- let { weaverseTheme } = useRouteLoaderData("root");
379
373
  let navigate = useNavigate();
380
374
  let { revalidate } = useRevalidator();
381
- let { countries, schema, publicEnv } = weaverseTheme || {};
375
+ let themeSettingsStore = useContext2(ThemeProvider);
382
376
  let { isDesignMode, weaverseHost, weaverseVersion } = weaverse;
383
377
  let isStudio = isIframe && isDesignMode && weaverseHost && weaverseVersion;
384
- useEffect2(() => {
378
+ useEffect(() => {
385
379
  if (isStudio) {
386
380
  weaverse.internal = {
387
381
  ...weaverse.internal,
388
- publicEnv,
389
382
  navigate,
390
383
  revalidate,
391
- themeConfigs: { schema, countries }
384
+ themeSettingsStore
392
385
  };
393
386
  window.__weaverse = weaverse;
394
387
  if (window.weaverseStudio) {
@@ -406,7 +399,7 @@ function WeaverseHydrogenRoot({
406
399
  errorComponent: ErrorComponent,
407
400
  components
408
401
  }) {
409
- let loaderData = useLoaderData2();
402
+ let loaderData = useLoaderData();
410
403
  let data = loaderData?.weaverseData;
411
404
  if (data) {
412
405
  if (data instanceof Promise) {
@@ -435,7 +428,15 @@ function RenderRoot(props) {
435
428
  useStudio(weaverse);
436
429
  return /* @__PURE__ */ React.createElement(WeaverseRoot, { context: weaverse });
437
430
  }
431
+ var withWeaverse = (Component) => {
432
+ return (props) => {
433
+ let { weaverseTheme } = useLoaderData();
434
+ let themeSettingsStore = new ThemeSettingsStore(weaverseTheme);
435
+ return /* @__PURE__ */ React.createElement(ThemeProvider.Provider, { value: themeSettingsStore }, /* @__PURE__ */ React.createElement(Component, { ...props }));
436
+ };
437
+ };
438
438
  export {
439
+ ThemeSettingsStore,
439
440
  WeaverseClient,
440
441
  WeaverseHydrogenRoot,
441
442
  createContentSecurityPolicy,
@@ -444,5 +445,6 @@ export {
444
445
  getSelectedProductOptions,
445
446
  getWeaverseConfigs,
446
447
  getWeaverseCsp,
447
- useThemeSettings
448
+ useThemeSettings,
449
+ withWeaverse
448
450
  };
package/package.json CHANGED
@@ -1,43 +1,43 @@
1
1
  {
2
- "version": "1.1.20",
3
- "license": "MIT",
4
- "main": "dist/index.js",
5
- "typings": "dist/index.d.ts",
6
- "module": "dist/index.mjs",
7
- "publishConfig": {
8
- "access": "public"
2
+ "version" : "1.2.1",
3
+ "license" : "MIT",
4
+ "main" : "dist/index.js",
5
+ "typings" : "dist/index.d.ts",
6
+ "module" : "dist/index.mjs",
7
+ "publishConfig" : {
8
+ "access" : "public"
9
9
  },
10
- "files": [
10
+ "files" : [
11
11
  "dist/*"
12
12
  ],
13
- "engines": {
14
- "node": ">=10"
13
+ "engines" : {
14
+ "node" : ">=10"
15
15
  },
16
- "scripts": {
17
- "start": "npm run dev",
18
- "dev": "tsup src/index.ts --format esm,cjs --dts --outDir dist --watch --external @remix-run/react,@shopify/hydrogen",
19
- "build": "tsup src/index.ts --format esm,cjs --dts --outDir dist --external @remix-run/react,@shopify/hydrogen",
20
- "clean": "rimraf dist",
21
- "prepublish": "npm run build"
16
+ "scripts" : {
17
+ "start" : "npm run dev",
18
+ "dev" : "tsup src/index.ts --format esm,cjs --dts --outDir dist --watch --external @remix-run/react,@shopify/hydrogen",
19
+ "build" : "tsup src/index.ts --format esm,cjs --dts --outDir dist --external @remix-run/react,@shopify/hydrogen",
20
+ "clean" : "rimraf dist",
21
+ "prepublish" : "npm run build"
22
22
  },
23
- "peerDependencies": {
24
- "react": ">=18",
25
- "react-dom": ">=18"
23
+ "peerDependencies" : {
24
+ "react" : ">=18",
25
+ "react-dom" : ">=18"
26
26
  },
27
- "prettier": {
28
- "printWidth": 80,
29
- "semi": false,
30
- "singleQuote": true
27
+ "prettier" : {
28
+ "printWidth" : 80,
29
+ "semi" : false,
30
+ "singleQuote" : true
31
31
  },
32
- "name": "@weaverse/hydrogen",
33
- "author": "Weaverse Team",
34
- "dependencies": {
35
- "@remix-run/react": "1.19.1",
36
- "@shopify/hydrogen": "2023.7.7",
37
- "@weaverse/react": "1.1.20",
38
- "react-error-boundary": "^4.0.11"
32
+ "name" : "@weaverse/hydrogen",
33
+ "author" : "Weaverse Team",
34
+ "dependencies" : {
35
+ "@remix-run/react" : "1.19.1",
36
+ "@shopify/hydrogen" : "2023.7.8",
37
+ "@weaverse/react" : "1.2.1",
38
+ "react-error-boundary" : "^4.0.11"
39
39
  },
40
- "devDependencies": {
41
- "@shopify/remix-oxygen": "^1.1.4"
40
+ "devDependencies" : {
41
+ "@shopify/remix-oxygen" : "^1.1.4"
42
42
  }
43
43
  }