@weaverse/hydrogen 1.2.2 → 1.3.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
@@ -8,6 +8,21 @@ import * as React from 'react';
8
8
  import React__default, { ForwardRefExoticComponent } from 'react';
9
9
  import * as _shopify_hydrogen_react_storefront_api_types from '@shopify/hydrogen-react/storefront-api-types';
10
10
 
11
+ declare class ThemeSettingsStore {
12
+ settings: HydrogenThemeSettings | null;
13
+ listeners: (() => void)[];
14
+ countries?: Localizations;
15
+ schema?: HydrogenThemeSchema;
16
+ publicEnv?: PublicEnv;
17
+ constructor(data: RootRouteData['weaverseTheme']);
18
+ updateThemeSettings: (newSettings: HydrogenThemeSettings) => void;
19
+ subscribe: (listener: () => void) => (() => void);
20
+ getSnapshot: () => HydrogenThemeSettings | null;
21
+ getServerSnapshot: () => HydrogenThemeSettings | null;
22
+ emitChange: () => void;
23
+ }
24
+ declare function useThemeSettings<T = HydrogenThemeSettings>(): T;
25
+
11
26
  declare let STORE_PAGES: {
12
27
  INDEX: string;
13
28
  PRODUCT: string;
@@ -127,7 +142,7 @@ type WeaverseInternal = {
127
142
  project: HydrogenProjectType;
128
143
  navigate: NavigateFunction;
129
144
  revalidate: () => void;
130
- themeSettingsStore: WeaverseThemeSettingsStore;
145
+ themeSettingsStore: ThemeSettingsStore;
131
146
  };
132
147
  type HydrogenComponentPresets = {
133
148
  type: string;
@@ -238,18 +253,6 @@ type FetchProjectPayload = {
238
253
  project: HydrogenProjectType;
239
254
  pageAssignment: HydrogenPageAssignment;
240
255
  };
241
- type WeaverseThemeSettingsStore = {
242
- updateThemeSettings(newSettings: HydrogenThemeSettings): void;
243
- subscribe(listener: () => void): () => void;
244
- getSnapshot(): HydrogenThemeSettings | null;
245
- getServerSnapshot(): HydrogenThemeSettings | null;
246
- settings: HydrogenThemeSettings | null;
247
- listeners: (() => void)[];
248
- emitChange(): void;
249
- countries: Localizations;
250
- schema: HydrogenThemeSchema;
251
- publicEnv?: PublicEnv;
252
- };
253
256
  type HydrogenThemeEnv = {
254
257
  WEAVERSE_PROJECT_ID: string;
255
258
  WEAVERSE_HOST: string;
@@ -267,6 +270,15 @@ type WeaverseClientArgs = {
267
270
  type FetchWithCacheOptions = RequestInit & {
268
271
  strategy?: AllCacheOptions;
269
272
  };
273
+ type RootRouteData = {
274
+ weaverseTheme?: {
275
+ theme: HydrogenThemeSettings;
276
+ countries?: Localizations;
277
+ schema?: HydrogenThemeSchema;
278
+ publicEnv?: PublicEnv;
279
+ };
280
+ [key: string]: any;
281
+ };
270
282
  declare global {
271
283
  interface Window {
272
284
  __weaverse: WeaverseHydrogen;
@@ -293,27 +305,6 @@ declare class WeaverseClient {
293
305
  }) => Promise<WeaverseLoaderData | null>;
294
306
  execComponentLoader: (item: HydrogenComponentData, args: LoaderArgs) => Promise<HydrogenComponentData>;
295
307
  }
296
- declare function createWeaverseClient(args: WeaverseClientArgs): WeaverseClient;
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
- }
316
- declare function useThemeSettings<T = HydrogenThemeSettings>(): T;
317
308
 
318
309
  declare function getRequestQueries<T = Record<string, string | boolean>>(request: Request): T;
319
310
  declare function getWeaverseConfigs(request: Request, env: HydrogenThemeEnv): WeaverseProjectConfigs;
@@ -333,6 +324,6 @@ declare function createContentSecurityPolicy(request: Request, directives?: Reco
333
324
  };
334
325
 
335
326
  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;
327
+ declare let withWeaverse: (Component: React__default.ComponentType) => (props: React__default.JSX.IntrinsicAttributes) => React__default.JSX.Element;
337
328
 
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 };
329
+ 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, RootRouteData, RouteLoaderArgs, ThemeSettingsStore, WeaverseClient, WeaverseClientArgs, WeaverseHydrogen, WeaverseHydrogenInit, WeaverseHydrogenRoot, WeaverseHydrogenRootProps, WeaverseInternal, WeaverseLoaderData, WeaverseLoaderRequestInfo, WeaverseProjectConfigs, WeaverseStorefrontData, WeaverseStudioQueries, WeaverseThemeConfigs, createContentSecurityPolicy, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, getWeaverseCsp, useThemeSettings, withWeaverse };
package/dist/index.d.ts CHANGED
@@ -8,6 +8,21 @@ import * as React from 'react';
8
8
  import React__default, { ForwardRefExoticComponent } from 'react';
9
9
  import * as _shopify_hydrogen_react_storefront_api_types from '@shopify/hydrogen-react/storefront-api-types';
10
10
 
11
+ declare class ThemeSettingsStore {
12
+ settings: HydrogenThemeSettings | null;
13
+ listeners: (() => void)[];
14
+ countries?: Localizations;
15
+ schema?: HydrogenThemeSchema;
16
+ publicEnv?: PublicEnv;
17
+ constructor(data: RootRouteData['weaverseTheme']);
18
+ updateThemeSettings: (newSettings: HydrogenThemeSettings) => void;
19
+ subscribe: (listener: () => void) => (() => void);
20
+ getSnapshot: () => HydrogenThemeSettings | null;
21
+ getServerSnapshot: () => HydrogenThemeSettings | null;
22
+ emitChange: () => void;
23
+ }
24
+ declare function useThemeSettings<T = HydrogenThemeSettings>(): T;
25
+
11
26
  declare let STORE_PAGES: {
12
27
  INDEX: string;
13
28
  PRODUCT: string;
@@ -127,7 +142,7 @@ type WeaverseInternal = {
127
142
  project: HydrogenProjectType;
128
143
  navigate: NavigateFunction;
129
144
  revalidate: () => void;
130
- themeSettingsStore: WeaverseThemeSettingsStore;
145
+ themeSettingsStore: ThemeSettingsStore;
131
146
  };
132
147
  type HydrogenComponentPresets = {
133
148
  type: string;
@@ -238,18 +253,6 @@ type FetchProjectPayload = {
238
253
  project: HydrogenProjectType;
239
254
  pageAssignment: HydrogenPageAssignment;
240
255
  };
241
- type WeaverseThemeSettingsStore = {
242
- updateThemeSettings(newSettings: HydrogenThemeSettings): void;
243
- subscribe(listener: () => void): () => void;
244
- getSnapshot(): HydrogenThemeSettings | null;
245
- getServerSnapshot(): HydrogenThemeSettings | null;
246
- settings: HydrogenThemeSettings | null;
247
- listeners: (() => void)[];
248
- emitChange(): void;
249
- countries: Localizations;
250
- schema: HydrogenThemeSchema;
251
- publicEnv?: PublicEnv;
252
- };
253
256
  type HydrogenThemeEnv = {
254
257
  WEAVERSE_PROJECT_ID: string;
255
258
  WEAVERSE_HOST: string;
@@ -267,6 +270,15 @@ type WeaverseClientArgs = {
267
270
  type FetchWithCacheOptions = RequestInit & {
268
271
  strategy?: AllCacheOptions;
269
272
  };
273
+ type RootRouteData = {
274
+ weaverseTheme?: {
275
+ theme: HydrogenThemeSettings;
276
+ countries?: Localizations;
277
+ schema?: HydrogenThemeSchema;
278
+ publicEnv?: PublicEnv;
279
+ };
280
+ [key: string]: any;
281
+ };
270
282
  declare global {
271
283
  interface Window {
272
284
  __weaverse: WeaverseHydrogen;
@@ -293,27 +305,6 @@ declare class WeaverseClient {
293
305
  }) => Promise<WeaverseLoaderData | null>;
294
306
  execComponentLoader: (item: HydrogenComponentData, args: LoaderArgs) => Promise<HydrogenComponentData>;
295
307
  }
296
- declare function createWeaverseClient(args: WeaverseClientArgs): WeaverseClient;
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
- }
316
- declare function useThemeSettings<T = HydrogenThemeSettings>(): T;
317
308
 
318
309
  declare function getRequestQueries<T = Record<string, string | boolean>>(request: Request): T;
319
310
  declare function getWeaverseConfigs(request: Request, env: HydrogenThemeEnv): WeaverseProjectConfigs;
@@ -333,6 +324,6 @@ declare function createContentSecurityPolicy(request: Request, directives?: Reco
333
324
  };
334
325
 
335
326
  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;
327
+ declare let withWeaverse: (Component: React__default.ComponentType) => (props: React__default.JSX.IntrinsicAttributes) => React__default.JSX.Element;
337
328
 
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 };
329
+ 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, RootRouteData, RouteLoaderArgs, ThemeSettingsStore, WeaverseClient, WeaverseClientArgs, WeaverseHydrogen, WeaverseHydrogenInit, WeaverseHydrogenRoot, WeaverseHydrogenRootProps, WeaverseInternal, WeaverseLoaderData, WeaverseLoaderRequestInfo, WeaverseProjectConfigs, WeaverseStorefrontData, WeaverseStudioQueries, WeaverseThemeConfigs, createContentSecurityPolicy, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, getWeaverseCsp, useThemeSettings, withWeaverse };
package/dist/index.js CHANGED
@@ -35,7 +35,6 @@ __export(src_exports, {
35
35
  WeaverseClient: () => WeaverseClient,
36
36
  WeaverseHydrogenRoot: () => WeaverseHydrogenRoot,
37
37
  createContentSecurityPolicy: () => createContentSecurityPolicy,
38
- createWeaverseClient: () => createWeaverseClient,
39
38
  getRequestQueries: () => getRequestQueries,
40
39
  getSelectedProductOptions: () => getSelectedProductOptions,
41
40
  getWeaverseConfigs: () => getWeaverseConfigs,
@@ -51,7 +50,7 @@ var import_hydrogen = require("@shopify/hydrogen");
51
50
 
52
51
  // package.json
53
52
  var package_default = {
54
- version: "1.2.2",
53
+ version: "1.3.1",
55
54
  license: "MIT",
56
55
  main: "dist/index.js",
57
56
  typings: "dist/index.d.ts",
@@ -86,7 +85,7 @@ var package_default = {
86
85
  dependencies: {
87
86
  "@remix-run/react": "1.19.1",
88
87
  "@shopify/hydrogen": "2023.7.8",
89
- "@weaverse/react": "1.2.2",
88
+ "@weaverse/react": "1.3.1",
90
89
  "react-error-boundary": "^4.0.11"
91
90
  },
92
91
  devDependencies: {
@@ -291,11 +290,11 @@ var WeaverseClient = class {
291
290
  };
292
291
  }
293
292
  };
294
- function createWeaverseClient(args) {
295
- return new WeaverseClient(args);
296
- }
297
293
 
298
294
  // src/hooks/use-theme-settings.ts
295
+ var import_react4 = require("react");
296
+
297
+ // src/hooks/use-theme-context.ts
299
298
  var import_react3 = require("react");
300
299
 
301
300
  // src/context.ts
@@ -340,14 +339,20 @@ function createWeaverseInstance(weaverseData, components) {
340
339
  var ThemeProvider = (0, import_react2.createContext)(null);
341
340
  ThemeProvider.displayName = "WeaverseThemeProvider";
342
341
 
342
+ // src/hooks/use-theme-context.ts
343
+ function useThemeContext() {
344
+ let themeContext = (0, import_react3.useContext)(ThemeProvider);
345
+ if (!themeContext) {
346
+ throw new Error(
347
+ `useThemeContext must be used within a ThemeProvider. Make sure to wrap your app in the withWeaverse HoC.`
348
+ );
349
+ }
350
+ return themeContext;
351
+ }
352
+
343
353
  // src/hooks/use-theme-settings.ts
344
354
  var ThemeSettingsStore = class {
345
- constructor({
346
- theme,
347
- countries,
348
- schema,
349
- publicEnv
350
- }) {
355
+ constructor(data) {
351
356
  this.settings = null;
352
357
  this.listeners = [];
353
358
  this.updateThemeSettings = (newSettings) => {
@@ -367,19 +372,20 @@ var ThemeSettingsStore = class {
367
372
  return this.settings;
368
373
  };
369
374
  this.emitChange = () => {
370
- for (const listener of this.listeners) {
375
+ for (let listener of this.listeners) {
371
376
  listener();
372
377
  }
373
378
  };
374
- this.settings = theme;
379
+ let { theme, countries, schema, publicEnv } = data || {};
380
+ this.settings = theme || null;
375
381
  this.countries = countries;
376
382
  this.schema = schema;
377
383
  this.publicEnv = publicEnv;
378
384
  }
379
385
  };
380
386
  function useThemeSettings() {
381
- let themeSettingsStore = (0, import_react3.useContext)(ThemeProvider);
382
- let settings = (0, import_react3.useSyncExternalStore)(
387
+ let themeSettingsStore = useThemeContext();
388
+ let settings = (0, import_react4.useSyncExternalStore)(
383
389
  themeSettingsStore.subscribe,
384
390
  themeSettingsStore.getSnapshot,
385
391
  themeSettingsStore.getServerSnapshot
@@ -405,22 +411,22 @@ function createContentSecurityPolicy(request, directives) {
405
411
  }
406
412
 
407
413
  // 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"));
414
+ var import_react8 = require("@remix-run/react");
415
+ var import_react9 = require("@weaverse/react");
416
+ var import_react10 = __toESM(require("react"));
411
417
  var import_react_error_boundary = require("react-error-boundary");
412
418
 
413
419
  // src/hooks/use-studio.ts
414
- var import_react4 = require("@remix-run/react");
415
- var import_react5 = require("@weaverse/react");
416
- var import_react6 = require("react");
420
+ var import_react5 = require("@remix-run/react");
421
+ var import_react6 = require("@weaverse/react");
422
+ var import_react7 = require("react");
417
423
  function useStudio(weaverse) {
418
- let navigate = (0, import_react4.useNavigate)();
419
- let { revalidate } = (0, import_react4.useRevalidator)();
420
- let themeSettingsStore = (0, import_react6.useContext)(ThemeProvider);
424
+ let { revalidate } = (0, import_react5.useRevalidator)();
425
+ let navigate = (0, import_react5.useNavigate)();
426
+ let themeSettingsStore = useThemeContext();
421
427
  let { isDesignMode, weaverseHost, weaverseVersion } = weaverse;
422
- let isStudio = import_react5.isIframe && isDesignMode && weaverseHost && weaverseVersion;
423
- (0, import_react6.useEffect)(() => {
428
+ let isStudio = import_react6.isIframe && isDesignMode && weaverseHost && weaverseVersion;
429
+ (0, import_react7.useEffect)(() => {
424
430
  if (isStudio) {
425
431
  weaverse.internal = {
426
432
  ...weaverse.internal,
@@ -433,7 +439,7 @@ function useStudio(weaverse) {
433
439
  window.weaverseStudio.init(weaverse);
434
440
  } else {
435
441
  let studioSrc = `${weaverseHost}/assets/studio/hydrogen/index.js?v=${weaverseVersion}`;
436
- (0, import_react5.loadScript)(studioSrc);
442
+ (0, import_react6.loadScript)(studioSrc);
437
443
  }
438
444
  }
439
445
  }, [weaverse]);
@@ -441,52 +447,48 @@ function useStudio(weaverse) {
441
447
 
442
448
  // src/WeaverseHydrogenRoot.tsx
443
449
  function WeaverseHydrogenRoot({
444
- errorComponent: ErrorComponent,
450
+ errorComponent: ErrorComponent = FallbackError,
445
451
  components
446
452
  }) {
447
- let loaderData = (0, import_react7.useLoaderData)();
453
+ let loaderData = (0, import_react8.useLoaderData)();
448
454
  let data = loaderData?.weaverseData;
449
455
  if (data) {
450
456
  if (data instanceof Promise) {
451
- return /* @__PURE__ */ import_react9.default.createElement(
452
- import_react_error_boundary.ErrorBoundary,
453
- {
454
- fallbackRender: ErrorComponent || (() => /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, "An error occurred!"))
455
- },
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 });
458
- }))
459
- );
457
+ return /* @__PURE__ */ import_react10.default.createElement(import_react_error_boundary.ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__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 });
459
+ })));
460
460
  }
461
- return /* @__PURE__ */ import_react9.default.createElement(RenderRoot, { data, components });
461
+ return /* @__PURE__ */ import_react10.default.createElement(RenderRoot, { data, components });
462
462
  }
463
- return ErrorComponent ? /* @__PURE__ */ import_react9.default.createElement(
463
+ return /* @__PURE__ */ import_react10.default.createElement(
464
464
  ErrorComponent,
465
465
  {
466
466
  error: { message: "No Weaverse data return from route loader!" }
467
467
  }
468
- ) : /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, "No Weaverse data return from route loader!");
468
+ );
469
469
  }
470
470
  function RenderRoot(props) {
471
471
  let { data, components } = props;
472
472
  let weaverse = createWeaverseInstance(data, components);
473
473
  useStudio(weaverse);
474
- return /* @__PURE__ */ import_react9.default.createElement(import_react8.WeaverseRoot, { context: weaverse });
474
+ return /* @__PURE__ */ import_react10.default.createElement(import_react9.WeaverseRoot, { context: weaverse });
475
475
  }
476
476
  var withWeaverse = (Component) => {
477
477
  return (props) => {
478
- let { weaverseTheme } = (0, import_react7.useLoaderData)();
478
+ let { weaverseTheme } = (0, import_react8.useLoaderData)();
479
479
  let themeSettingsStore = new ThemeSettingsStore(weaverseTheme);
480
- return /* @__PURE__ */ import_react9.default.createElement(ThemeProvider.Provider, { value: themeSettingsStore }, /* @__PURE__ */ import_react9.default.createElement(Component, { ...props }));
480
+ return /* @__PURE__ */ import_react10.default.createElement(ThemeProvider.Provider, { value: themeSettingsStore }, /* @__PURE__ */ import_react10.default.createElement(Component, { ...props }));
481
481
  };
482
482
  };
483
+ function FallbackError({ error }) {
484
+ return /* @__PURE__ */ import_react10.default.createElement("div", null, error?.message || "An unexpected error occurred");
485
+ }
483
486
  // Annotate the CommonJS export names for ESM import in node:
484
487
  0 && (module.exports = {
485
488
  ThemeSettingsStore,
486
489
  WeaverseClient,
487
490
  WeaverseHydrogenRoot,
488
491
  createContentSecurityPolicy,
489
- createWeaverseClient,
490
492
  getRequestQueries,
491
493
  getSelectedProductOptions,
492
494
  getWeaverseConfigs,
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.2.2",
9
+ version: "1.3.1",
10
10
  license: "MIT",
11
11
  main: "dist/index.js",
12
12
  typings: "dist/index.d.ts",
@@ -41,7 +41,7 @@ var package_default = {
41
41
  dependencies: {
42
42
  "@remix-run/react": "1.19.1",
43
43
  "@shopify/hydrogen": "2023.7.8",
44
- "@weaverse/react": "1.2.2",
44
+ "@weaverse/react": "1.3.1",
45
45
  "react-error-boundary": "^4.0.11"
46
46
  },
47
47
  devDependencies: {
@@ -246,12 +246,12 @@ var WeaverseClient = class {
246
246
  };
247
247
  }
248
248
  };
249
- function createWeaverseClient(args) {
250
- return new WeaverseClient(args);
251
- }
252
249
 
253
250
  // src/hooks/use-theme-settings.ts
254
- import { useContext, useSyncExternalStore } from "react";
251
+ import { useSyncExternalStore } from "react";
252
+
253
+ // src/hooks/use-theme-context.ts
254
+ import { useContext } from "react";
255
255
 
256
256
  // src/context.ts
257
257
  import { Weaverse, isBrowser } from "@weaverse/react";
@@ -295,14 +295,20 @@ function createWeaverseInstance(weaverseData, components) {
295
295
  var ThemeProvider = createContext(null);
296
296
  ThemeProvider.displayName = "WeaverseThemeProvider";
297
297
 
298
+ // src/hooks/use-theme-context.ts
299
+ function useThemeContext() {
300
+ let themeContext = useContext(ThemeProvider);
301
+ if (!themeContext) {
302
+ throw new Error(
303
+ `useThemeContext must be used within a ThemeProvider. Make sure to wrap your app in the withWeaverse HoC.`
304
+ );
305
+ }
306
+ return themeContext;
307
+ }
308
+
298
309
  // src/hooks/use-theme-settings.ts
299
310
  var ThemeSettingsStore = class {
300
- constructor({
301
- theme,
302
- countries,
303
- schema,
304
- publicEnv
305
- }) {
311
+ constructor(data) {
306
312
  this.settings = null;
307
313
  this.listeners = [];
308
314
  this.updateThemeSettings = (newSettings) => {
@@ -322,18 +328,19 @@ var ThemeSettingsStore = class {
322
328
  return this.settings;
323
329
  };
324
330
  this.emitChange = () => {
325
- for (const listener of this.listeners) {
331
+ for (let listener of this.listeners) {
326
332
  listener();
327
333
  }
328
334
  };
329
- this.settings = theme;
335
+ let { theme, countries, schema, publicEnv } = data || {};
336
+ this.settings = theme || null;
330
337
  this.countries = countries;
331
338
  this.schema = schema;
332
339
  this.publicEnv = publicEnv;
333
340
  }
334
341
  };
335
342
  function useThemeSettings() {
336
- let themeSettingsStore = useContext(ThemeProvider);
343
+ let themeSettingsStore = useThemeContext();
337
344
  let settings = useSyncExternalStore(
338
345
  themeSettingsStore.subscribe,
339
346
  themeSettingsStore.getSnapshot,
@@ -368,11 +375,11 @@ import { ErrorBoundary } from "react-error-boundary";
368
375
  // src/hooks/use-studio.ts
369
376
  import { useNavigate, useRevalidator } from "@remix-run/react";
370
377
  import { isIframe, loadScript } from "@weaverse/react";
371
- import { useContext as useContext2, useEffect } from "react";
378
+ import { useEffect } from "react";
372
379
  function useStudio(weaverse) {
373
- let navigate = useNavigate();
374
380
  let { revalidate } = useRevalidator();
375
- let themeSettingsStore = useContext2(ThemeProvider);
381
+ let navigate = useNavigate();
382
+ let themeSettingsStore = useThemeContext();
376
383
  let { isDesignMode, weaverseHost, weaverseVersion } = weaverse;
377
384
  let isStudio = isIframe && isDesignMode && weaverseHost && weaverseVersion;
378
385
  useEffect(() => {
@@ -396,31 +403,25 @@ function useStudio(weaverse) {
396
403
 
397
404
  // src/WeaverseHydrogenRoot.tsx
398
405
  function WeaverseHydrogenRoot({
399
- errorComponent: ErrorComponent,
406
+ errorComponent: ErrorComponent = FallbackError,
400
407
  components
401
408
  }) {
402
409
  let loaderData = useLoaderData();
403
410
  let data = loaderData?.weaverseData;
404
411
  if (data) {
405
412
  if (data instanceof Promise) {
406
- return /* @__PURE__ */ React.createElement(
407
- ErrorBoundary,
408
- {
409
- fallbackRender: ErrorComponent || (() => /* @__PURE__ */ React.createElement(React.Fragment, null, "An error occurred!"))
410
- },
411
- /* @__PURE__ */ React.createElement(Suspense, null, /* @__PURE__ */ React.createElement(Await, { resolve: data }, (resolvedData) => {
412
- return /* @__PURE__ */ React.createElement(RenderRoot, { data: resolvedData, components });
413
- }))
414
- );
413
+ return /* @__PURE__ */ React.createElement(ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__PURE__ */ React.createElement(Suspense, null, /* @__PURE__ */ React.createElement(Await, { resolve: data }, (resolvedData) => {
414
+ return /* @__PURE__ */ React.createElement(RenderRoot, { data: resolvedData, components });
415
+ })));
415
416
  }
416
417
  return /* @__PURE__ */ React.createElement(RenderRoot, { data, components });
417
418
  }
418
- return ErrorComponent ? /* @__PURE__ */ React.createElement(
419
+ return /* @__PURE__ */ React.createElement(
419
420
  ErrorComponent,
420
421
  {
421
422
  error: { message: "No Weaverse data return from route loader!" }
422
423
  }
423
- ) : /* @__PURE__ */ React.createElement(React.Fragment, null, "No Weaverse data return from route loader!");
424
+ );
424
425
  }
425
426
  function RenderRoot(props) {
426
427
  let { data, components } = props;
@@ -435,12 +436,14 @@ var withWeaverse = (Component) => {
435
436
  return /* @__PURE__ */ React.createElement(ThemeProvider.Provider, { value: themeSettingsStore }, /* @__PURE__ */ React.createElement(Component, { ...props }));
436
437
  };
437
438
  };
439
+ function FallbackError({ error }) {
440
+ return /* @__PURE__ */ React.createElement("div", null, error?.message || "An unexpected error occurred");
441
+ }
438
442
  export {
439
443
  ThemeSettingsStore,
440
444
  WeaverseClient,
441
445
  WeaverseHydrogenRoot,
442
446
  createContentSecurityPolicy,
443
- createWeaverseClient,
444
447
  getRequestQueries,
445
448
  getSelectedProductOptions,
446
449
  getWeaverseConfigs,
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.2.2",
2
+ "version": "1.3.1",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -34,10 +34,10 @@
34
34
  "dependencies": {
35
35
  "@remix-run/react": "1.19.1",
36
36
  "@shopify/hydrogen": "2023.7.8",
37
- "@weaverse/react": "1.2.2",
37
+ "@weaverse/react": "1.3.1",
38
38
  "react-error-boundary": "^4.0.11"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@shopify/remix-oxygen": "^1.1.4"
42
42
  }
43
- }
43
+ }