@weaverse/hydrogen 1.1.19 → 1.2.0

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;
@@ -201,7 +200,7 @@ type HydrogenPageData = {
201
200
  };
202
201
  interface WeaverseHydrogenRootProps {
203
202
  components: HydrogenComponent[];
204
- errorComponent: React__default.FC<{
203
+ errorComponent?: React__default.FC<{
205
204
  error: {
206
205
  message: string;
207
206
  stack?: string;
@@ -229,7 +228,7 @@ type PageLoadParams = {
229
228
  type FetchProjectRequestBody = {
230
229
  projectId: string;
231
230
  url: string;
232
- countries: Localizations;
231
+ countries?: Localizations;
233
232
  i18n?: I18nLocale;
234
233
  params?: PageLoadParams;
235
234
  isDesignMode?: boolean;
@@ -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;
@@ -256,7 +261,7 @@ type WeaverseClientArgs = {
256
261
  configs: WeaverseProjectConfigs;
257
262
  storefront: Storefront<I18nLocale>;
258
263
  components: HydrogenComponent[];
259
- countries: Localizations;
264
+ countries?: Localizations;
260
265
  themeSchema: HydrogenThemeSchema;
261
266
  };
262
267
  type FetchWithCacheOptions = RequestInit & {
@@ -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
 
@@ -275,7 +279,7 @@ declare class WeaverseClient {
275
279
  clientVersion: string;
276
280
  storefront: Storefront<I18nLocale>;
277
281
  components: HydrogenComponent[];
278
- countries: Localizations;
282
+ countries?: Localizations;
279
283
  themeSchema: HydrogenThemeSchema;
280
284
  configs: WeaverseProjectConfigs;
281
285
  basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>;
@@ -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;
@@ -201,7 +200,7 @@ type HydrogenPageData = {
201
200
  };
202
201
  interface WeaverseHydrogenRootProps {
203
202
  components: HydrogenComponent[];
204
- errorComponent: React__default.FC<{
203
+ errorComponent?: React__default.FC<{
205
204
  error: {
206
205
  message: string;
207
206
  stack?: string;
@@ -229,7 +228,7 @@ type PageLoadParams = {
229
228
  type FetchProjectRequestBody = {
230
229
  projectId: string;
231
230
  url: string;
232
- countries: Localizations;
231
+ countries?: Localizations;
233
232
  i18n?: I18nLocale;
234
233
  params?: PageLoadParams;
235
234
  isDesignMode?: boolean;
@@ -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;
@@ -256,7 +261,7 @@ type WeaverseClientArgs = {
256
261
  configs: WeaverseProjectConfigs;
257
262
  storefront: Storefront<I18nLocale>;
258
263
  components: HydrogenComponent[];
259
- countries: Localizations;
264
+ countries?: Localizations;
260
265
  themeSchema: HydrogenThemeSchema;
261
266
  };
262
267
  type FetchWithCacheOptions = RequestInit & {
@@ -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
 
@@ -275,7 +279,7 @@ declare class WeaverseClient {
275
279
  clientVersion: string;
276
280
  storefront: Storefront<I18nLocale>;
277
281
  components: HydrogenComponent[];
278
- countries: Localizations;
282
+ countries?: Localizations;
279
283
  themeSchema: HydrogenThemeSchema;
280
284
  configs: WeaverseProjectConfigs;
281
285
  basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>;
@@ -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.19",
54
+ version: "1.1.20",
53
55
  license: "MIT",
54
56
  main: "dist/index.js",
55
57
  typings: "dist/index.d.ts",
@@ -84,7 +86,7 @@ var package_default = {
84
86
  dependencies: {
85
87
  "@remix-run/react": "1.19.1",
86
88
  "@shopify/hydrogen": "2023.7.7",
87
- "@weaverse/react": "1.1.19",
89
+ "@weaverse/react": "1.1.20",
88
90
  "react-error-boundary": "^4.0.11"
89
91
  },
90
92
  devDependencies: {
@@ -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,31 +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(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) => {
453
- return /* @__PURE__ */ import_react10.default.createElement(RenderRoot, { data: resolvedData, components });
454
- })));
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
+ );
455
460
  }
456
- return /* @__PURE__ */ import_react10.default.createElement(RenderRoot, { data, components });
461
+ return /* @__PURE__ */ import_react9.default.createElement(RenderRoot, { data, components });
457
462
  }
458
- return /* @__PURE__ */ import_react10.default.createElement(
463
+ return ErrorComponent ? /* @__PURE__ */ import_react9.default.createElement(
459
464
  ErrorComponent,
460
465
  {
461
466
  error: { message: "No Weaverse data return from route loader!" }
462
467
  }
463
- );
468
+ ) : /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, "No Weaverse data return from route loader!");
464
469
  }
465
470
  function RenderRoot(props) {
466
471
  let { data, components } = props;
467
472
  let weaverse = createWeaverseInstance(data, components);
468
473
  useStudio(weaverse);
469
- return /* @__PURE__ */ import_react10.default.createElement(import_react9.WeaverseRoot, { context: weaverse });
474
+ return /* @__PURE__ */ import_react9.default.createElement(import_react8.WeaverseRoot, { context: weaverse });
470
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
+ };
471
483
  // Annotate the CommonJS export names for ESM import in node:
472
484
  0 && (module.exports = {
485
+ ThemeSettingsStore,
473
486
  WeaverseClient,
474
487
  WeaverseHydrogenRoot,
475
488
  createContentSecurityPolicy,
@@ -479,5 +492,6 @@ function RenderRoot(props) {
479
492
  getWeaverseConfigs,
480
493
  getWeaverseCsp,
481
494
  useThemeSettings,
495
+ withWeaverse,
482
496
  ...require("@weaverse/react")
483
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.19",
9
+ version: "1.1.20",
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.7",
44
- "@weaverse/react": "1.1.19",
44
+ "@weaverse/react": "1.1.20",
45
45
  "react-error-boundary": "^4.0.11"
46
46
  },
47
47
  devDependencies: {
@@ -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,22 +399,28 @@ 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) {
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
- })));
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
+ );
416
415
  }
417
416
  return /* @__PURE__ */ React.createElement(RenderRoot, { data, components });
418
417
  }
419
- return /* @__PURE__ */ React.createElement(
418
+ return ErrorComponent ? /* @__PURE__ */ React.createElement(
420
419
  ErrorComponent,
421
420
  {
422
421
  error: { message: "No Weaverse data return from route loader!" }
423
422
  }
424
- );
423
+ ) : /* @__PURE__ */ React.createElement(React.Fragment, null, "No Weaverse data return from route loader!");
425
424
  }
426
425
  function RenderRoot(props) {
427
426
  let { data, components } = props;
@@ -429,7 +428,15 @@ function RenderRoot(props) {
429
428
  useStudio(weaverse);
430
429
  return /* @__PURE__ */ React.createElement(WeaverseRoot, { context: weaverse });
431
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
+ };
432
438
  export {
439
+ ThemeSettingsStore,
433
440
  WeaverseClient,
434
441
  WeaverseHydrogenRoot,
435
442
  createContentSecurityPolicy,
@@ -438,5 +445,6 @@ export {
438
445
  getSelectedProductOptions,
439
446
  getWeaverseConfigs,
440
447
  getWeaverseCsp,
441
- useThemeSettings
448
+ useThemeSettings,
449
+ withWeaverse
442
450
  };
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1.19",
2
+ "version": "1.2.0",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -34,7 +34,7 @@
34
34
  "dependencies": {
35
35
  "@remix-run/react": "1.19.1",
36
36
  "@shopify/hydrogen": "2023.7.7",
37
- "@weaverse/react": "1.1.19",
37
+ "@weaverse/react": "1.2.0",
38
38
  "react-error-boundary": "^4.0.11"
39
39
  },
40
40
  "devDependencies": {