@weaverse/hydrogen 3.1.0 → 3.1.2

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
@@ -6,21 +6,6 @@ import { LanguageCode, CountryCode, CurrencyCode, SelectedOptionInput } from '@s
6
6
  import { LoaderFunctionArgs, AppLoadContext } from '@shopify/remix-oxygen';
7
7
  import React, { ForwardRefExoticComponent } from 'react';
8
8
 
9
- declare class ThemeSettingsStore {
10
- static settings: HydrogenThemeSettings | null;
11
- listeners: (() => void)[];
12
- countries?: Localizations;
13
- schema?: HydrogenThemeSchema;
14
- publicEnv?: PublicEnv;
15
- constructor(data: RootRouteData['weaverseTheme']);
16
- updateThemeSettings: (newSettings: HydrogenThemeSettings) => void;
17
- subscribe: (listener: () => void) => (() => void);
18
- getSnapshot: () => HydrogenThemeSettings | null;
19
- getServerSnapshot: () => HydrogenThemeSettings | null;
20
- emitChange: () => void;
21
- }
22
- declare function useThemeSettings<T = HydrogenThemeSettings>(): T;
23
-
24
9
  declare let STORE_PAGES: {
25
10
  INDEX: string;
26
11
  PRODUCT: string;
@@ -33,6 +18,21 @@ declare let STORE_PAGES: {
33
18
  CUSTOM: string;
34
19
  };
35
20
 
21
+ declare class ThemeSettingsStore {
22
+ settings: HydrogenThemeSettings;
23
+ listeners: (() => void)[];
24
+ countries?: Localizations;
25
+ schema?: HydrogenThemeSchema;
26
+ publicEnv?: PublicEnv;
27
+ constructor(data: RootRouteData['weaverseTheme']);
28
+ updateThemeSettings: (newSettings: HydrogenThemeSettings) => void;
29
+ subscribe: (listener: () => void) => (() => void);
30
+ getSnapshot: () => HydrogenThemeSettings;
31
+ getServerSnapshot: () => HydrogenThemeSettings;
32
+ emitChange: () => void;
33
+ }
34
+ declare function useThemeSettings<T = HydrogenThemeSettings>(): T;
35
+
36
36
  declare class WeaverseClient {
37
37
  API: string;
38
38
  basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>;
@@ -312,6 +312,7 @@ declare global {
312
312
  interface Window {
313
313
  __weaverse: WeaverseHydrogen;
314
314
  __weaverses: Record<string, WeaverseHydrogen>;
315
+ __weaverseThemeSettingsStore: ThemeSettingsStore;
315
316
  }
316
317
  }
317
318
 
@@ -320,10 +321,10 @@ declare function withWeaverse(Component: React.ComponentType<any>): (props: Reac
320
321
 
321
322
  declare function getRequestQueries<T = Record<string, string | boolean>>(request: Request): T;
322
323
  declare function getWeaverseConfigs(request: Request, env: HydrogenThemeEnv): WeaverseProjectConfigs;
324
+ declare function generateDataFromSchema({ inspector, }: HydrogenComponentSchema | HydrogenThemeSchema): Record<string, any>;
323
325
 
324
326
  declare function getSelectedProductOptions(request: Request): SelectedOptionInput[];
325
327
 
326
- declare let registerComponents: (components: HydrogenComponent[]) => void;
327
328
  declare class WeaverseHydrogen extends Weaverse {
328
329
  platformType: PlatformTypeEnum;
329
330
  pageId: string;
@@ -339,7 +340,7 @@ declare class WeaverseHydrogenItem extends WeaverseItemStore {
339
340
  weaverse: WeaverseHydrogen;
340
341
  constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen);
341
342
  get Element(): HydrogenElement;
342
- getDefaultData: () => Record<string, any> | undefined;
343
+ get _schemaData(): Record<string, any>;
343
344
  }
344
345
 
345
- export { type AllCacheOptions, type BasicInput, type ComponentLoaderArgs, type CreateWeaverseClientArgs, type FetchProjectPayload, type FetchProjectRequestBody, type FetchWithCacheOptions, type HeadingInput, type HeadingInputType, type HydrogenComponent, type HydrogenComponentData, type HydrogenComponentLoaderFunction, type HydrogenComponentPresets, type HydrogenComponentProps, type HydrogenComponentSchema, type HydrogenElement, type HydrogenPageAssignment, type HydrogenPageConfigs, type HydrogenPageData, type HydrogenProjectConfig, type HydrogenProjectType, type HydrogenThemeEnv, type HydrogenThemeInfo, type HydrogenThemeSchema, type HydrogenThemeSettings, type HydrogenToolbarAction, type I18nLocale, type InspectorGroup, type LoadPageParams, type Locale, type Localizations, type PageAssignmentParams, type PageType, type PublicEnv, type RootRouteData, type RouteLoaderArgs, ThemeSettingsStore, type WeaverseArticle, type WeaverseBlog, WeaverseClient, type WeaverseClientArgs, type WeaverseCollection, WeaverseHydrogen, WeaverseHydrogenItem, type WeaverseHydrogenParams, WeaverseHydrogenRoot, type WeaverseHydrogenRootProps, type WeaverseInternal, type WeaverseLoaderData, type WeaverseLoaderRequestInfo, type WeaverseProduct, type WeaverseProjectConfigs, type WeaverseStorefrontData, type WeaverseStudioQueries, type WeaverseThemeConfigs, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, registerComponents, useThemeSettings, withWeaverse };
346
+ export { type AllCacheOptions, type BasicInput, type ComponentLoaderArgs, type CreateWeaverseClientArgs, type FetchProjectPayload, type FetchProjectRequestBody, type FetchWithCacheOptions, type HeadingInput, type HeadingInputType, type HydrogenComponent, type HydrogenComponentData, type HydrogenComponentLoaderFunction, type HydrogenComponentPresets, type HydrogenComponentProps, type HydrogenComponentSchema, type HydrogenElement, type HydrogenPageAssignment, type HydrogenPageConfigs, type HydrogenPageData, type HydrogenProjectConfig, type HydrogenProjectType, type HydrogenThemeEnv, type HydrogenThemeInfo, type HydrogenThemeSchema, type HydrogenThemeSettings, type HydrogenToolbarAction, type I18nLocale, type InspectorGroup, type LoadPageParams, type Locale, type Localizations, type PageAssignmentParams, type PageType, type PublicEnv, type RootRouteData, type RouteLoaderArgs, type WeaverseArticle, type WeaverseBlog, WeaverseClient, type WeaverseClientArgs, type WeaverseCollection, WeaverseHydrogen, WeaverseHydrogenItem, type WeaverseHydrogenParams, WeaverseHydrogenRoot, type WeaverseHydrogenRootProps, type WeaverseInternal, type WeaverseLoaderData, type WeaverseLoaderRequestInfo, type WeaverseProduct, type WeaverseProjectConfigs, type WeaverseStorefrontData, type WeaverseStudioQueries, type WeaverseThemeConfigs, generateDataFromSchema, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, useThemeSettings, withWeaverse };
package/dist/index.d.ts CHANGED
@@ -6,21 +6,6 @@ import { LanguageCode, CountryCode, CurrencyCode, SelectedOptionInput } from '@s
6
6
  import { LoaderFunctionArgs, AppLoadContext } from '@shopify/remix-oxygen';
7
7
  import React, { ForwardRefExoticComponent } from 'react';
8
8
 
9
- declare class ThemeSettingsStore {
10
- static settings: HydrogenThemeSettings | null;
11
- listeners: (() => void)[];
12
- countries?: Localizations;
13
- schema?: HydrogenThemeSchema;
14
- publicEnv?: PublicEnv;
15
- constructor(data: RootRouteData['weaverseTheme']);
16
- updateThemeSettings: (newSettings: HydrogenThemeSettings) => void;
17
- subscribe: (listener: () => void) => (() => void);
18
- getSnapshot: () => HydrogenThemeSettings | null;
19
- getServerSnapshot: () => HydrogenThemeSettings | null;
20
- emitChange: () => void;
21
- }
22
- declare function useThemeSettings<T = HydrogenThemeSettings>(): T;
23
-
24
9
  declare let STORE_PAGES: {
25
10
  INDEX: string;
26
11
  PRODUCT: string;
@@ -33,6 +18,21 @@ declare let STORE_PAGES: {
33
18
  CUSTOM: string;
34
19
  };
35
20
 
21
+ declare class ThemeSettingsStore {
22
+ settings: HydrogenThemeSettings;
23
+ listeners: (() => void)[];
24
+ countries?: Localizations;
25
+ schema?: HydrogenThemeSchema;
26
+ publicEnv?: PublicEnv;
27
+ constructor(data: RootRouteData['weaverseTheme']);
28
+ updateThemeSettings: (newSettings: HydrogenThemeSettings) => void;
29
+ subscribe: (listener: () => void) => (() => void);
30
+ getSnapshot: () => HydrogenThemeSettings;
31
+ getServerSnapshot: () => HydrogenThemeSettings;
32
+ emitChange: () => void;
33
+ }
34
+ declare function useThemeSettings<T = HydrogenThemeSettings>(): T;
35
+
36
36
  declare class WeaverseClient {
37
37
  API: string;
38
38
  basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>;
@@ -312,6 +312,7 @@ declare global {
312
312
  interface Window {
313
313
  __weaverse: WeaverseHydrogen;
314
314
  __weaverses: Record<string, WeaverseHydrogen>;
315
+ __weaverseThemeSettingsStore: ThemeSettingsStore;
315
316
  }
316
317
  }
317
318
 
@@ -320,10 +321,10 @@ declare function withWeaverse(Component: React.ComponentType<any>): (props: Reac
320
321
 
321
322
  declare function getRequestQueries<T = Record<string, string | boolean>>(request: Request): T;
322
323
  declare function getWeaverseConfigs(request: Request, env: HydrogenThemeEnv): WeaverseProjectConfigs;
324
+ declare function generateDataFromSchema({ inspector, }: HydrogenComponentSchema | HydrogenThemeSchema): Record<string, any>;
323
325
 
324
326
  declare function getSelectedProductOptions(request: Request): SelectedOptionInput[];
325
327
 
326
- declare let registerComponents: (components: HydrogenComponent[]) => void;
327
328
  declare class WeaverseHydrogen extends Weaverse {
328
329
  platformType: PlatformTypeEnum;
329
330
  pageId: string;
@@ -339,7 +340,7 @@ declare class WeaverseHydrogenItem extends WeaverseItemStore {
339
340
  weaverse: WeaverseHydrogen;
340
341
  constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen);
341
342
  get Element(): HydrogenElement;
342
- getDefaultData: () => Record<string, any> | undefined;
343
+ get _schemaData(): Record<string, any>;
343
344
  }
344
345
 
345
- export { type AllCacheOptions, type BasicInput, type ComponentLoaderArgs, type CreateWeaverseClientArgs, type FetchProjectPayload, type FetchProjectRequestBody, type FetchWithCacheOptions, type HeadingInput, type HeadingInputType, type HydrogenComponent, type HydrogenComponentData, type HydrogenComponentLoaderFunction, type HydrogenComponentPresets, type HydrogenComponentProps, type HydrogenComponentSchema, type HydrogenElement, type HydrogenPageAssignment, type HydrogenPageConfigs, type HydrogenPageData, type HydrogenProjectConfig, type HydrogenProjectType, type HydrogenThemeEnv, type HydrogenThemeInfo, type HydrogenThemeSchema, type HydrogenThemeSettings, type HydrogenToolbarAction, type I18nLocale, type InspectorGroup, type LoadPageParams, type Locale, type Localizations, type PageAssignmentParams, type PageType, type PublicEnv, type RootRouteData, type RouteLoaderArgs, ThemeSettingsStore, type WeaverseArticle, type WeaverseBlog, WeaverseClient, type WeaverseClientArgs, type WeaverseCollection, WeaverseHydrogen, WeaverseHydrogenItem, type WeaverseHydrogenParams, WeaverseHydrogenRoot, type WeaverseHydrogenRootProps, type WeaverseInternal, type WeaverseLoaderData, type WeaverseLoaderRequestInfo, type WeaverseProduct, type WeaverseProjectConfigs, type WeaverseStorefrontData, type WeaverseStudioQueries, type WeaverseThemeConfigs, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, registerComponents, useThemeSettings, withWeaverse };
346
+ export { type AllCacheOptions, type BasicInput, type ComponentLoaderArgs, type CreateWeaverseClientArgs, type FetchProjectPayload, type FetchProjectRequestBody, type FetchWithCacheOptions, type HeadingInput, type HeadingInputType, type HydrogenComponent, type HydrogenComponentData, type HydrogenComponentLoaderFunction, type HydrogenComponentPresets, type HydrogenComponentProps, type HydrogenComponentSchema, type HydrogenElement, type HydrogenPageAssignment, type HydrogenPageConfigs, type HydrogenPageData, type HydrogenProjectConfig, type HydrogenProjectType, type HydrogenThemeEnv, type HydrogenThemeInfo, type HydrogenThemeSchema, type HydrogenThemeSettings, type HydrogenToolbarAction, type I18nLocale, type InspectorGroup, type LoadPageParams, type Locale, type Localizations, type PageAssignmentParams, type PageType, type PublicEnv, type RootRouteData, type RouteLoaderArgs, type WeaverseArticle, type WeaverseBlog, WeaverseClient, type WeaverseClientArgs, type WeaverseCollection, WeaverseHydrogen, WeaverseHydrogenItem, type WeaverseHydrogenParams, WeaverseHydrogenRoot, type WeaverseHydrogenRootProps, type WeaverseInternal, type WeaverseLoaderData, type WeaverseLoaderRequestInfo, type WeaverseProduct, type WeaverseProjectConfigs, type WeaverseStorefrontData, type WeaverseStudioQueries, type WeaverseThemeConfigs, generateDataFromSchema, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, useThemeSettings, withWeaverse };
package/dist/index.js CHANGED
@@ -30,15 +30,14 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/index.ts
31
31
  var src_exports = {};
32
32
  __export(src_exports, {
33
- ThemeSettingsStore: () => ThemeSettingsStore,
34
33
  WeaverseClient: () => WeaverseClient,
35
34
  WeaverseHydrogen: () => WeaverseHydrogen,
36
35
  WeaverseHydrogenItem: () => WeaverseHydrogenItem,
37
36
  WeaverseHydrogenRoot: () => WeaverseHydrogenRoot,
37
+ generateDataFromSchema: () => generateDataFromSchema,
38
38
  getRequestQueries: () => getRequestQueries,
39
39
  getSelectedProductOptions: () => getSelectedProductOptions,
40
40
  getWeaverseConfigs: () => getWeaverseConfigs,
41
- registerComponents: () => registerComponents,
42
41
  useChildInstances: () => import_react14.useChildInstances,
43
42
  useItemInstance: () => import_react14.useItemInstance,
44
43
  useParentInstance: () => import_react14.useParentInstance,
@@ -49,114 +48,100 @@ __export(src_exports, {
49
48
  module.exports = __toCommonJS(src_exports);
50
49
  var import_react14 = require("@weaverse/react");
51
50
 
52
- // src/WeaverseHydrogenRoot.tsx
53
- var import_react11 = require("@remix-run/react");
54
- var import_react12 = require("@weaverse/react");
55
- var import_react13 = __toESM(require("react"));
56
- var import_react_error_boundary = require("react-error-boundary");
57
-
58
- // src/context.ts
59
- var import_react2 = require("@weaverse/react");
60
- var import_react3 = require("react");
61
-
62
- // src/components/main.tsx
63
- var main_exports = {};
64
- __export(main_exports, {
65
- default: () => main_default,
66
- schema: () => schema
67
- });
68
- var import_react = __toESM(require("react"));
69
- var Main = (0, import_react.forwardRef)((props, ref) => {
70
- let { children, dangerouslySetInnerHTML, ...rest } = props;
71
- return (
72
- // eslint-disable-next-line react/no-danger-with-children
73
- /* @__PURE__ */ import_react.default.createElement(
74
- "div",
75
- {
76
- ref,
77
- ...rest,
78
- children,
79
- dangerouslySetInnerHTML: children ? void 0 : dangerouslySetInnerHTML
80
- }
81
- )
51
+ // src/utils.ts
52
+ function getRequestQueries(request) {
53
+ let url = new URL(request.url);
54
+ return Array.from(url.searchParams.entries()).reduce(
55
+ (q, [k, v]) => {
56
+ q[k] = v === "true" ? true : v === "false" ? false : v;
57
+ return q;
58
+ },
59
+ {}
82
60
  );
83
- });
84
- var main_default = Main;
85
- var schema = {
86
- type: "main",
87
- title: "Main",
88
- inspector: []
89
- };
90
-
91
- // src/components/index.ts
92
- var defaultComponents = [main_exports];
93
-
94
- // src/context.ts
95
- function createCachedWeaverseInstance(params) {
96
- if (import_react2.isBrowser) {
97
- window.__weaverses = window.__weaverses || {};
98
- let weaverse = window.__weaverses[params.pageId];
99
- if (!weaverse) {
100
- weaverse = new WeaverseHydrogen(params);
101
- window.__weaverses[params.pageId] = weaverse;
61
+ }
62
+ function getWeaverseConfigs(request, env) {
63
+ let queries = getRequestQueries(request);
64
+ let {
65
+ WEAVERSE_PROJECT_ID,
66
+ WEAVERSE_API_KEY,
67
+ WEAVERSE_HOST,
68
+ PUBLIC_STORE_DOMAIN,
69
+ PUBLIC_STOREFRONT_API_TOKEN
70
+ } = env || {};
71
+ let envFromProcess = typeof process !== "undefined" && process.env || {};
72
+ let {
73
+ weaverseProjectId,
74
+ weaverseHost,
75
+ isDesignMode,
76
+ weaverseVersion,
77
+ weaverseApiKey
78
+ } = queries;
79
+ return {
80
+ projectId: weaverseProjectId || WEAVERSE_PROJECT_ID || envFromProcess.WEAVERSE_PROJECT_ID || "",
81
+ weaverseHost: weaverseHost || WEAVERSE_HOST || envFromProcess.WEAVERSE_HOST || "https://studio.weaverse.io",
82
+ weaverseApiKey: weaverseApiKey || WEAVERSE_API_KEY || envFromProcess.WEAVERSE_API_KEY || "",
83
+ weaverseVersion: weaverseVersion || "",
84
+ isDesignMode: isDesignMode || false,
85
+ publicEnv: {
86
+ PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || "",
87
+ PUBLIC_STOREFRONT_API_TOKEN: PUBLIC_STOREFRONT_API_TOKEN || ""
102
88
  }
103
- if (weaverse?.isDesignMode) {
104
- weaverse.requestInfo = params.requestInfo;
105
- window.weaverseStudio?.refreshStudio(params);
89
+ };
90
+ }
91
+ function generateDataFromSchema({
92
+ inspector
93
+ }) {
94
+ let data = {};
95
+ if (inspector) {
96
+ for (let group of inspector) {
97
+ for (let input of group.inputs) {
98
+ let { name, defaultValue } = input;
99
+ if (name && defaultValue !== null && defaultValue !== void 0) {
100
+ data[name] = defaultValue;
101
+ }
102
+ }
106
103
  }
107
- return weaverse;
108
104
  }
109
- return new WeaverseHydrogen(params);
105
+ return data;
110
106
  }
111
- function createWeaverseInstance(weaverseData, components) {
112
- let { page, configs, project, pageAssignment } = weaverseData || {};
113
- registerComponents(components);
114
- registerComponents(defaultComponents);
115
- return createCachedWeaverseInstance({
116
- ...configs,
117
- data: page || {},
118
- pageId: page?.id,
119
- internal: { project, pageAssignment }
120
- });
121
- }
122
- var ThemeProvider = (0, import_react3.createContext)(null);
123
- ThemeProvider.displayName = "WeaverseThemeProvider";
124
107
 
125
- // src/hooks/use-theme-settings.ts
126
- var import_react5 = require("react");
127
- var import_react6 = require("@weaverse/react");
108
+ // src/WeaverseHydrogenRoot.tsx
109
+ var import_react11 = require("@remix-run/react");
110
+ var import_react12 = require("@weaverse/react");
111
+ var import_react13 = __toESM(require("react"));
112
+ var import_react_error_boundary = require("react-error-boundary");
128
113
 
129
- // src/hooks/use-theme-context.ts
130
- var import_react4 = require("react");
131
- function useThemeContext() {
132
- let themeContext = (0, import_react4.useContext)(ThemeProvider);
133
- return themeContext || new ThemeSettingsStore({ theme: {} });
134
- }
114
+ // src/Effect.tsx
115
+ var import_react7 = require("react");
116
+
117
+ // src/hooks/use-studio.ts
118
+ var import_react4 = require("@remix-run/react");
119
+ var import_react5 = require("@weaverse/react");
120
+ var import_react6 = require("react");
135
121
 
136
122
  // src/hooks/use-theme-settings.ts
137
- var ThemeSettingsStore = class _ThemeSettingsStore {
138
- static settings = null;
123
+ var import_react = require("@remix-run/react");
124
+ var import_react2 = require("@weaverse/react");
125
+ var import_react3 = require("react");
126
+ var ThemeSettingsStore = class {
127
+ settings = {};
139
128
  listeners = [];
140
129
  countries;
141
130
  schema;
142
131
  publicEnv;
143
132
  constructor(data) {
144
133
  let { theme, countries, schema: schema2, publicEnv } = data || {};
145
- if (import_react6.isBrowser && _ThemeSettingsStore.settings) {
146
- _ThemeSettingsStore.settings = {
147
- ...theme,
148
- ..._ThemeSettingsStore.settings
149
- };
150
- } else {
151
- _ThemeSettingsStore.settings = theme || {};
152
- }
134
+ this.settings = { ...theme };
153
135
  this.countries = countries;
154
136
  this.schema = schema2;
155
137
  this.publicEnv = publicEnv;
138
+ if (import_react2.isBrowser) {
139
+ window.__weaverseThemeSettingsStore = this;
140
+ }
156
141
  }
157
142
  updateThemeSettings = (newSettings) => {
158
- _ThemeSettingsStore.settings = {
159
- ..._ThemeSettingsStore.settings,
143
+ this.settings = {
144
+ ...this.settings,
160
145
  ...newSettings
161
146
  };
162
147
  this.emitChange();
@@ -168,10 +153,10 @@ var ThemeSettingsStore = class _ThemeSettingsStore {
168
153
  };
169
154
  };
170
155
  getSnapshot = () => {
171
- return _ThemeSettingsStore.settings;
156
+ return this.settings;
172
157
  };
173
158
  getServerSnapshot = () => {
174
- return _ThemeSettingsStore.settings;
159
+ return this.settings;
175
160
  };
176
161
  emitChange = () => {
177
162
  for (let listener of this.listeners) {
@@ -179,9 +164,16 @@ var ThemeSettingsStore = class _ThemeSettingsStore {
179
164
  }
180
165
  };
181
166
  };
167
+ function useThemeSettingsStore() {
168
+ let data = (0, import_react.useRouteLoaderData)("root");
169
+ if (import_react2.isBrowser && window.__weaverseThemeSettingsStore) {
170
+ return window.__weaverseThemeSettingsStore;
171
+ }
172
+ return new ThemeSettingsStore(data?.weaverseTheme);
173
+ }
182
174
  function useThemeSettings() {
183
- let themeSettingsStore = useThemeContext();
184
- let settings = (0, import_react5.useSyncExternalStore)(
175
+ let themeSettingsStore = useThemeSettingsStore();
176
+ let settings = (0, import_react3.useSyncExternalStore)(
185
177
  themeSettingsStore.subscribe,
186
178
  themeSettingsStore.getSnapshot,
187
179
  themeSettingsStore.getServerSnapshot
@@ -189,21 +181,15 @@ function useThemeSettings() {
189
181
  return settings;
190
182
  }
191
183
 
192
- // src/Effect.tsx
193
- var import_react10 = require("react");
194
-
195
184
  // src/hooks/use-studio.ts
196
- var import_react7 = require("@remix-run/react");
197
- var import_react8 = require("@weaverse/react");
198
- var import_react9 = require("react");
199
185
  function useStudio(weaverse) {
200
- let { revalidate } = (0, import_react7.useRevalidator)();
201
- const navigation = (0, import_react7.useNavigation)();
202
- let { pathname, search } = (0, import_react7.useLocation)();
203
- let navigate = (0, import_react7.useNavigate)();
204
- let themeSettingsStore = useThemeContext();
186
+ let { revalidate } = (0, import_react4.useRevalidator)();
187
+ let navigation = (0, import_react4.useNavigation)();
188
+ let { pathname, search } = (0, import_react4.useLocation)();
189
+ let navigate = (0, import_react4.useNavigate)();
190
+ let themeSettingsStore = useThemeSettingsStore();
205
191
  let { isDesignMode, weaverseHost, weaverseVersion } = weaverse;
206
- (0, import_react9.useEffect)(() => {
192
+ (0, import_react6.useEffect)(() => {
207
193
  if (navigation.state === "idle" && isDesignMode) {
208
194
  weaverse.internal = {
209
195
  ...weaverse.internal,
@@ -212,21 +198,100 @@ function useStudio(weaverse) {
212
198
  themeSettingsStore
213
199
  };
214
200
  let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`;
215
- (0, import_react8.loadScript)(studioSrc).then(() => {
216
- window.weaverseStudio.init(weaverse);
201
+ (0, import_react5.loadScript)(studioSrc).then(() => {
202
+ window.weaverseStudio?.init(weaverse);
217
203
  }).catch(console.error);
218
204
  }
219
205
  }, [pathname, search, navigation.state]);
220
206
  }
221
207
 
222
208
  // src/Effect.tsx
223
- var WeaverseEffect = (0, import_react10.memo)(
209
+ var WeaverseEffect = (0, import_react7.memo)(
224
210
  ({ context }) => {
225
211
  useStudio(context);
226
212
  return null;
227
213
  }
228
214
  );
229
215
 
216
+ // src/context.ts
217
+ var import_react9 = require("@weaverse/react");
218
+ var import_react10 = require("react");
219
+
220
+ // src/components/main.tsx
221
+ var main_exports = {};
222
+ __export(main_exports, {
223
+ default: () => main_default,
224
+ schema: () => schema
225
+ });
226
+ var import_react8 = __toESM(require("react"));
227
+ var Main = (0, import_react8.forwardRef)((props, ref) => {
228
+ let { children, dangerouslySetInnerHTML, ...rest } = props;
229
+ return (
230
+ // eslint-disable-next-line react/no-danger-with-children
231
+ /* @__PURE__ */ import_react8.default.createElement(
232
+ "div",
233
+ {
234
+ ref,
235
+ ...rest,
236
+ children,
237
+ dangerouslySetInnerHTML: children ? void 0 : dangerouslySetInnerHTML
238
+ }
239
+ )
240
+ );
241
+ });
242
+ var main_default = Main;
243
+ var schema = {
244
+ type: "main",
245
+ title: "Main",
246
+ inspector: []
247
+ };
248
+
249
+ // src/components/index.ts
250
+ var defaultComponents = [main_exports];
251
+
252
+ // src/context.ts
253
+ function registerComponents(components) {
254
+ components.forEach((comp) => {
255
+ WeaverseHydrogen.registerElement({
256
+ type: comp?.schema?.type,
257
+ Component: comp?.default,
258
+ schema: comp?.schema,
259
+ loader: comp?.loader
260
+ });
261
+ });
262
+ }
263
+ function createCachedWeaverseInstance(params) {
264
+ if (import_react9.isBrowser) {
265
+ window.__weaverses = window.__weaverses || {};
266
+ let weaverse = window.__weaverses[params.pageId];
267
+ if (!weaverse) {
268
+ weaverse = new WeaverseHydrogen(params);
269
+ window.__weaverses[params.pageId] = weaverse;
270
+ }
271
+ if (weaverse?.isDesignMode) {
272
+ weaverse.requestInfo = params.requestInfo;
273
+ window.weaverseStudio?.refreshStudio(params);
274
+ }
275
+ return weaverse;
276
+ }
277
+ return new WeaverseHydrogen(params);
278
+ }
279
+ function createWeaverseInstance(weaverseData, components) {
280
+ let { page, configs, project, pageAssignment } = weaverseData || {};
281
+ registerComponents(components);
282
+ registerComponents(defaultComponents);
283
+ return createCachedWeaverseInstance({
284
+ ...configs,
285
+ data: page || {},
286
+ pageId: page?.id,
287
+ internal: { project, pageAssignment }
288
+ });
289
+ }
290
+ var ThemeSettingsProvider = (0, import_react10.createContext)(
291
+ null
292
+ );
293
+ ThemeSettingsProvider.displayName = "WeaverseThemeSettingsProvider";
294
+
230
295
  // src/WeaverseHydrogenRoot.tsx
231
296
  var WeaverseHydrogenRoot = (0, import_react13.memo)(
232
297
  ({
@@ -258,9 +323,8 @@ function RenderRoot(props) {
258
323
  }
259
324
  function withWeaverse(Component) {
260
325
  return (props) => {
261
- let loaderData = (0, import_react11.useRouteLoaderData)("root");
262
- let themeSettingsStore = new ThemeSettingsStore(loaderData?.weaverseTheme);
263
- return /* @__PURE__ */ import_react13.default.createElement(ThemeProvider.Provider, { value: themeSettingsStore }, /* @__PURE__ */ import_react13.default.createElement(Component, { ...props }));
326
+ let { settings } = useThemeSettingsStore();
327
+ return /* @__PURE__ */ import_react13.default.createElement(ThemeSettingsProvider.Provider, { value: settings }, /* @__PURE__ */ import_react13.default.createElement(Component, { ...props }));
264
328
  };
265
329
  }
266
330
  function FallbackError({ error }) {
@@ -269,49 +333,6 @@ function FallbackError({ error }) {
269
333
 
270
334
  // src/weaverse-client.ts
271
335
  var import_hydrogen = require("@shopify/hydrogen");
272
-
273
- // src/utils.ts
274
- function getRequestQueries(request) {
275
- let url = new URL(request.url);
276
- return Array.from(url.searchParams.entries()).reduce(
277
- (q, [k, v]) => {
278
- q[k] = v === "true" ? true : v === "false" ? false : v;
279
- return q;
280
- },
281
- {}
282
- );
283
- }
284
- function getWeaverseConfigs(request, env) {
285
- let queries = getRequestQueries(request);
286
- let {
287
- WEAVERSE_PROJECT_ID,
288
- WEAVERSE_API_KEY,
289
- WEAVERSE_HOST,
290
- PUBLIC_STORE_DOMAIN,
291
- PUBLIC_STOREFRONT_API_TOKEN
292
- } = env || {};
293
- let envFromProcess = typeof process !== "undefined" && process.env || {};
294
- let {
295
- weaverseProjectId,
296
- weaverseHost,
297
- isDesignMode,
298
- weaverseVersion,
299
- weaverseApiKey
300
- } = queries;
301
- return {
302
- projectId: weaverseProjectId || WEAVERSE_PROJECT_ID || envFromProcess.WEAVERSE_PROJECT_ID || "",
303
- weaverseHost: weaverseHost || WEAVERSE_HOST || envFromProcess.WEAVERSE_HOST || "https://studio.weaverse.io",
304
- weaverseApiKey: weaverseApiKey || WEAVERSE_API_KEY || envFromProcess.WEAVERSE_API_KEY || "",
305
- weaverseVersion: weaverseVersion || "",
306
- isDesignMode: isDesignMode || false,
307
- publicEnv: {
308
- PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || "",
309
- PUBLIC_STOREFRONT_API_TOKEN: PUBLIC_STOREFRONT_API_TOKEN || ""
310
- }
311
- };
312
- }
313
-
314
- // src/weaverse-client.ts
315
336
  var WeaverseClient = class {
316
337
  API = "api/public";
317
338
  basePageConfigs;
@@ -397,28 +418,20 @@ var WeaverseClient = class {
397
418
  }
398
419
  let url = `${weaverseHost}/${API}/project_configs`;
399
420
  let res;
400
- let body = JSON.stringify({
401
- isDesignMode,
402
- projectId
403
- });
421
+ let body = JSON.stringify({ isDesignMode, projectId });
404
422
  if (isDesignMode) {
405
- res = await fetch(url, {
406
- method: "POST",
407
- body
408
- }).then((res2) => res2.json());
423
+ res = await fetch(url, { method: "POST", body }).then(
424
+ (res2) => res2.json()
425
+ );
409
426
  } else {
410
427
  res = await this.fetchWithCache(url, { method: "POST", strategy, body });
411
428
  }
412
429
  let data = res || {};
413
430
  if (data?.theme && this.themeSchema?.inspector) {
414
431
  let defaultThemeSettings = {};
415
- this.themeSchema.inspector.forEach(({ inputs }) => {
416
- inputs.forEach(({ name, defaultValue }) => {
417
- if (name && defaultValue) {
418
- defaultThemeSettings[name] = defaultValue;
419
- }
420
- });
421
- });
432
+ if (this.themeSchema) {
433
+ defaultThemeSettings = generateDataFromSchema(this.themeSchema);
434
+ }
422
435
  data.theme = {
423
436
  ...defaultThemeSettings,
424
437
  ...data.theme
@@ -549,16 +562,6 @@ function getSelectedProductOptions(request) {
549
562
  }
550
563
 
551
564
  // src/index.ts
552
- var registerComponents = (components) => {
553
- components.forEach((comp) => {
554
- WeaverseHydrogen.registerElement({
555
- type: comp?.schema?.type,
556
- Component: comp?.default,
557
- schema: comp?.schema,
558
- loader: comp?.loader
559
- });
560
- });
561
- };
562
565
  var WeaverseHydrogen = class extends import_react14.Weaverse {
563
566
  platformType = "shopify-hydrogen";
564
567
  pageId;
@@ -578,32 +581,29 @@ var WeaverseHydrogenItem = class extends import_react14.WeaverseItemStore {
578
581
  constructor(initialData, weaverse) {
579
582
  super(initialData, weaverse);
580
583
  let { data, ...rest } = initialData;
581
- Object.assign(this._store, this.getDefaultData(), data, rest);
584
+ Object.assign(this._store, this._schemaData, data, rest);
582
585
  }
583
586
  get Element() {
584
587
  return super.Element;
585
588
  }
586
- getDefaultData = () => {
587
- return this.Element?.schema?.inspector?.flatMap((group) => group.inputs).reduce((a, { defaultValue, name }) => {
588
- if (name && defaultValue !== null && defaultValue !== void 0) {
589
- a[name] = defaultValue;
590
- }
591
- return a;
592
- }, {});
593
- };
589
+ get _schemaData() {
590
+ if (this.Element.schema) {
591
+ return generateDataFromSchema(this.Element.schema);
592
+ }
593
+ return {};
594
+ }
594
595
  };
595
596
  import_react14.Weaverse.ItemConstructor = WeaverseHydrogenItem;
596
597
  // Annotate the CommonJS export names for ESM import in node:
597
598
  0 && (module.exports = {
598
- ThemeSettingsStore,
599
599
  WeaverseClient,
600
600
  WeaverseHydrogen,
601
601
  WeaverseHydrogenItem,
602
602
  WeaverseHydrogenRoot,
603
+ generateDataFromSchema,
603
604
  getRequestQueries,
604
605
  getSelectedProductOptions,
605
606
  getWeaverseConfigs,
606
- registerComponents,
607
607
  useChildInstances,
608
608
  useItemInstance,
609
609
  useParentInstance,
package/dist/index.mjs CHANGED
@@ -6,122 +6,113 @@ var __export = (target, all) => {
6
6
 
7
7
  // src/index.ts
8
8
  import {
9
+ Weaverse,
10
+ WeaverseItemStore,
9
11
  useChildInstances,
10
12
  useItemInstance,
11
13
  useParentInstance,
12
- useWeaverse,
13
- Weaverse,
14
- WeaverseItemStore
14
+ useWeaverse
15
15
  } from "@weaverse/react";
16
16
 
17
- // src/WeaverseHydrogenRoot.tsx
18
- import { Await, useLoaderData, useRouteLoaderData } from "@remix-run/react";
19
- import { WeaverseRoot } from "@weaverse/react";
20
- import React2, { memo as memo2, Suspense } from "react";
21
- import { ErrorBoundary } from "react-error-boundary";
22
-
23
- // src/context.ts
24
- import { isBrowser } from "@weaverse/react";
25
- import { createContext } from "react";
26
-
27
- // src/components/main.tsx
28
- var main_exports = {};
29
- __export(main_exports, {
30
- default: () => main_default,
31
- schema: () => schema
32
- });
33
- import React, { forwardRef } from "react";
34
- var Main = forwardRef((props, ref) => {
35
- let { children, dangerouslySetInnerHTML, ...rest } = props;
36
- return (
37
- // eslint-disable-next-line react/no-danger-with-children
38
- /* @__PURE__ */ React.createElement(
39
- "div",
40
- {
41
- ref,
42
- ...rest,
43
- children,
44
- dangerouslySetInnerHTML: children ? void 0 : dangerouslySetInnerHTML
45
- }
46
- )
17
+ // src/utils.ts
18
+ function getRequestQueries(request) {
19
+ let url = new URL(request.url);
20
+ return Array.from(url.searchParams.entries()).reduce(
21
+ (q, [k, v]) => {
22
+ q[k] = v === "true" ? true : v === "false" ? false : v;
23
+ return q;
24
+ },
25
+ {}
47
26
  );
48
- });
49
- var main_default = Main;
50
- var schema = {
51
- type: "main",
52
- title: "Main",
53
- inspector: []
54
- };
55
-
56
- // src/components/index.ts
57
- var defaultComponents = [main_exports];
58
-
59
- // src/context.ts
60
- function createCachedWeaverseInstance(params) {
61
- if (isBrowser) {
62
- window.__weaverses = window.__weaverses || {};
63
- let weaverse = window.__weaverses[params.pageId];
64
- if (!weaverse) {
65
- weaverse = new WeaverseHydrogen(params);
66
- window.__weaverses[params.pageId] = weaverse;
27
+ }
28
+ function getWeaverseConfigs(request, env) {
29
+ let queries = getRequestQueries(request);
30
+ let {
31
+ WEAVERSE_PROJECT_ID,
32
+ WEAVERSE_API_KEY,
33
+ WEAVERSE_HOST,
34
+ PUBLIC_STORE_DOMAIN,
35
+ PUBLIC_STOREFRONT_API_TOKEN
36
+ } = env || {};
37
+ let envFromProcess = typeof process !== "undefined" && process.env || {};
38
+ let {
39
+ weaverseProjectId,
40
+ weaverseHost,
41
+ isDesignMode,
42
+ weaverseVersion,
43
+ weaverseApiKey
44
+ } = queries;
45
+ return {
46
+ projectId: weaverseProjectId || WEAVERSE_PROJECT_ID || envFromProcess.WEAVERSE_PROJECT_ID || "",
47
+ weaverseHost: weaverseHost || WEAVERSE_HOST || envFromProcess.WEAVERSE_HOST || "https://studio.weaverse.io",
48
+ weaverseApiKey: weaverseApiKey || WEAVERSE_API_KEY || envFromProcess.WEAVERSE_API_KEY || "",
49
+ weaverseVersion: weaverseVersion || "",
50
+ isDesignMode: isDesignMode || false,
51
+ publicEnv: {
52
+ PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || "",
53
+ PUBLIC_STOREFRONT_API_TOKEN: PUBLIC_STOREFRONT_API_TOKEN || ""
67
54
  }
68
- if (weaverse?.isDesignMode) {
69
- weaverse.requestInfo = params.requestInfo;
70
- window.weaverseStudio?.refreshStudio(params);
55
+ };
56
+ }
57
+ function generateDataFromSchema({
58
+ inspector
59
+ }) {
60
+ let data = {};
61
+ if (inspector) {
62
+ for (let group of inspector) {
63
+ for (let input of group.inputs) {
64
+ let { name, defaultValue } = input;
65
+ if (name && defaultValue !== null && defaultValue !== void 0) {
66
+ data[name] = defaultValue;
67
+ }
68
+ }
71
69
  }
72
- return weaverse;
73
70
  }
74
- return new WeaverseHydrogen(params);
71
+ return data;
75
72
  }
76
- function createWeaverseInstance(weaverseData, components) {
77
- let { page, configs, project, pageAssignment } = weaverseData || {};
78
- registerComponents(components);
79
- registerComponents(defaultComponents);
80
- return createCachedWeaverseInstance({
81
- ...configs,
82
- data: page || {},
83
- pageId: page?.id,
84
- internal: { project, pageAssignment }
85
- });
86
- }
87
- var ThemeProvider = createContext(null);
88
- ThemeProvider.displayName = "WeaverseThemeProvider";
89
73
 
90
- // src/hooks/use-theme-settings.ts
91
- import { useSyncExternalStore } from "react";
92
- import { isBrowser as isBrowser2 } from "@weaverse/react";
74
+ // src/WeaverseHydrogenRoot.tsx
75
+ import { Await, useLoaderData } from "@remix-run/react";
76
+ import { WeaverseRoot } from "@weaverse/react";
77
+ import React2, { memo as memo2, Suspense } from "react";
78
+ import { ErrorBoundary } from "react-error-boundary";
93
79
 
94
- // src/hooks/use-theme-context.ts
95
- import { useContext } from "react";
96
- function useThemeContext() {
97
- let themeContext = useContext(ThemeProvider);
98
- return themeContext || new ThemeSettingsStore({ theme: {} });
99
- }
80
+ // src/Effect.tsx
81
+ import { memo } from "react";
82
+
83
+ // src/hooks/use-studio.ts
84
+ import {
85
+ useLocation,
86
+ useNavigate,
87
+ useNavigation,
88
+ useRevalidator
89
+ } from "@remix-run/react";
90
+ import { loadScript } from "@weaverse/react";
91
+ import { useEffect } from "react";
100
92
 
101
93
  // src/hooks/use-theme-settings.ts
102
- var ThemeSettingsStore = class _ThemeSettingsStore {
103
- static settings = null;
94
+ import { useRouteLoaderData } from "@remix-run/react";
95
+ import { isBrowser } from "@weaverse/react";
96
+ import { useSyncExternalStore } from "react";
97
+ var ThemeSettingsStore = class {
98
+ settings = {};
104
99
  listeners = [];
105
100
  countries;
106
101
  schema;
107
102
  publicEnv;
108
103
  constructor(data) {
109
104
  let { theme, countries, schema: schema2, publicEnv } = data || {};
110
- if (isBrowser2 && _ThemeSettingsStore.settings) {
111
- _ThemeSettingsStore.settings = {
112
- ...theme,
113
- ..._ThemeSettingsStore.settings
114
- };
115
- } else {
116
- _ThemeSettingsStore.settings = theme || {};
117
- }
105
+ this.settings = { ...theme };
118
106
  this.countries = countries;
119
107
  this.schema = schema2;
120
108
  this.publicEnv = publicEnv;
109
+ if (isBrowser) {
110
+ window.__weaverseThemeSettingsStore = this;
111
+ }
121
112
  }
122
113
  updateThemeSettings = (newSettings) => {
123
- _ThemeSettingsStore.settings = {
124
- ..._ThemeSettingsStore.settings,
114
+ this.settings = {
115
+ ...this.settings,
125
116
  ...newSettings
126
117
  };
127
118
  this.emitChange();
@@ -133,10 +124,10 @@ var ThemeSettingsStore = class _ThemeSettingsStore {
133
124
  };
134
125
  };
135
126
  getSnapshot = () => {
136
- return _ThemeSettingsStore.settings;
127
+ return this.settings;
137
128
  };
138
129
  getServerSnapshot = () => {
139
- return _ThemeSettingsStore.settings;
130
+ return this.settings;
140
131
  };
141
132
  emitChange = () => {
142
133
  for (let listener of this.listeners) {
@@ -144,8 +135,15 @@ var ThemeSettingsStore = class _ThemeSettingsStore {
144
135
  }
145
136
  };
146
137
  };
138
+ function useThemeSettingsStore() {
139
+ let data = useRouteLoaderData("root");
140
+ if (isBrowser && window.__weaverseThemeSettingsStore) {
141
+ return window.__weaverseThemeSettingsStore;
142
+ }
143
+ return new ThemeSettingsStore(data?.weaverseTheme);
144
+ }
147
145
  function useThemeSettings() {
148
- let themeSettingsStore = useThemeContext();
146
+ let themeSettingsStore = useThemeSettingsStore();
149
147
  let settings = useSyncExternalStore(
150
148
  themeSettingsStore.subscribe,
151
149
  themeSettingsStore.getSnapshot,
@@ -154,24 +152,13 @@ function useThemeSettings() {
154
152
  return settings;
155
153
  }
156
154
 
157
- // src/Effect.tsx
158
- import { memo } from "react";
159
-
160
155
  // src/hooks/use-studio.ts
161
- import {
162
- useLocation,
163
- useNavigate,
164
- useRevalidator,
165
- useNavigation
166
- } from "@remix-run/react";
167
- import { loadScript } from "@weaverse/react";
168
- import { useEffect } from "react";
169
156
  function useStudio(weaverse) {
170
157
  let { revalidate } = useRevalidator();
171
- const navigation = useNavigation();
158
+ let navigation = useNavigation();
172
159
  let { pathname, search } = useLocation();
173
160
  let navigate = useNavigate();
174
- let themeSettingsStore = useThemeContext();
161
+ let themeSettingsStore = useThemeSettingsStore();
175
162
  let { isDesignMode, weaverseHost, weaverseVersion } = weaverse;
176
163
  useEffect(() => {
177
164
  if (navigation.state === "idle" && isDesignMode) {
@@ -183,7 +170,7 @@ function useStudio(weaverse) {
183
170
  };
184
171
  let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`;
185
172
  loadScript(studioSrc).then(() => {
186
- window.weaverseStudio.init(weaverse);
173
+ window.weaverseStudio?.init(weaverse);
187
174
  }).catch(console.error);
188
175
  }
189
176
  }, [pathname, search, navigation.state]);
@@ -197,6 +184,85 @@ var WeaverseEffect = memo(
197
184
  }
198
185
  );
199
186
 
187
+ // src/context.ts
188
+ import { isBrowser as isBrowser2 } from "@weaverse/react";
189
+ import { createContext } from "react";
190
+
191
+ // src/components/main.tsx
192
+ var main_exports = {};
193
+ __export(main_exports, {
194
+ default: () => main_default,
195
+ schema: () => schema
196
+ });
197
+ import React, { forwardRef } from "react";
198
+ var Main = forwardRef((props, ref) => {
199
+ let { children, dangerouslySetInnerHTML, ...rest } = props;
200
+ return (
201
+ // eslint-disable-next-line react/no-danger-with-children
202
+ /* @__PURE__ */ React.createElement(
203
+ "div",
204
+ {
205
+ ref,
206
+ ...rest,
207
+ children,
208
+ dangerouslySetInnerHTML: children ? void 0 : dangerouslySetInnerHTML
209
+ }
210
+ )
211
+ );
212
+ });
213
+ var main_default = Main;
214
+ var schema = {
215
+ type: "main",
216
+ title: "Main",
217
+ inspector: []
218
+ };
219
+
220
+ // src/components/index.ts
221
+ var defaultComponents = [main_exports];
222
+
223
+ // src/context.ts
224
+ function registerComponents(components) {
225
+ components.forEach((comp) => {
226
+ WeaverseHydrogen.registerElement({
227
+ type: comp?.schema?.type,
228
+ Component: comp?.default,
229
+ schema: comp?.schema,
230
+ loader: comp?.loader
231
+ });
232
+ });
233
+ }
234
+ function createCachedWeaverseInstance(params) {
235
+ if (isBrowser2) {
236
+ window.__weaverses = window.__weaverses || {};
237
+ let weaverse = window.__weaverses[params.pageId];
238
+ if (!weaverse) {
239
+ weaverse = new WeaverseHydrogen(params);
240
+ window.__weaverses[params.pageId] = weaverse;
241
+ }
242
+ if (weaverse?.isDesignMode) {
243
+ weaverse.requestInfo = params.requestInfo;
244
+ window.weaverseStudio?.refreshStudio(params);
245
+ }
246
+ return weaverse;
247
+ }
248
+ return new WeaverseHydrogen(params);
249
+ }
250
+ function createWeaverseInstance(weaverseData, components) {
251
+ let { page, configs, project, pageAssignment } = weaverseData || {};
252
+ registerComponents(components);
253
+ registerComponents(defaultComponents);
254
+ return createCachedWeaverseInstance({
255
+ ...configs,
256
+ data: page || {},
257
+ pageId: page?.id,
258
+ internal: { project, pageAssignment }
259
+ });
260
+ }
261
+ var ThemeSettingsProvider = createContext(
262
+ null
263
+ );
264
+ ThemeSettingsProvider.displayName = "WeaverseThemeSettingsProvider";
265
+
200
266
  // src/WeaverseHydrogenRoot.tsx
201
267
  var WeaverseHydrogenRoot = memo2(
202
268
  ({
@@ -228,9 +294,8 @@ function RenderRoot(props) {
228
294
  }
229
295
  function withWeaverse(Component) {
230
296
  return (props) => {
231
- let loaderData = useRouteLoaderData("root");
232
- let themeSettingsStore = new ThemeSettingsStore(loaderData?.weaverseTheme);
233
- return /* @__PURE__ */ React2.createElement(ThemeProvider.Provider, { value: themeSettingsStore }, /* @__PURE__ */ React2.createElement(Component, { ...props }));
297
+ let { settings } = useThemeSettingsStore();
298
+ return /* @__PURE__ */ React2.createElement(ThemeSettingsProvider.Provider, { value: settings }, /* @__PURE__ */ React2.createElement(Component, { ...props }));
234
299
  };
235
300
  }
236
301
  function FallbackError({ error }) {
@@ -239,49 +304,6 @@ function FallbackError({ error }) {
239
304
 
240
305
  // src/weaverse-client.ts
241
306
  import { createWithCache, generateCacheControlHeader } from "@shopify/hydrogen";
242
-
243
- // src/utils.ts
244
- function getRequestQueries(request) {
245
- let url = new URL(request.url);
246
- return Array.from(url.searchParams.entries()).reduce(
247
- (q, [k, v]) => {
248
- q[k] = v === "true" ? true : v === "false" ? false : v;
249
- return q;
250
- },
251
- {}
252
- );
253
- }
254
- function getWeaverseConfigs(request, env) {
255
- let queries = getRequestQueries(request);
256
- let {
257
- WEAVERSE_PROJECT_ID,
258
- WEAVERSE_API_KEY,
259
- WEAVERSE_HOST,
260
- PUBLIC_STORE_DOMAIN,
261
- PUBLIC_STOREFRONT_API_TOKEN
262
- } = env || {};
263
- let envFromProcess = typeof process !== "undefined" && process.env || {};
264
- let {
265
- weaverseProjectId,
266
- weaverseHost,
267
- isDesignMode,
268
- weaverseVersion,
269
- weaverseApiKey
270
- } = queries;
271
- return {
272
- projectId: weaverseProjectId || WEAVERSE_PROJECT_ID || envFromProcess.WEAVERSE_PROJECT_ID || "",
273
- weaverseHost: weaverseHost || WEAVERSE_HOST || envFromProcess.WEAVERSE_HOST || "https://studio.weaverse.io",
274
- weaverseApiKey: weaverseApiKey || WEAVERSE_API_KEY || envFromProcess.WEAVERSE_API_KEY || "",
275
- weaverseVersion: weaverseVersion || "",
276
- isDesignMode: isDesignMode || false,
277
- publicEnv: {
278
- PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || "",
279
- PUBLIC_STOREFRONT_API_TOKEN: PUBLIC_STOREFRONT_API_TOKEN || ""
280
- }
281
- };
282
- }
283
-
284
- // src/weaverse-client.ts
285
307
  var WeaverseClient = class {
286
308
  API = "api/public";
287
309
  basePageConfigs;
@@ -367,28 +389,20 @@ var WeaverseClient = class {
367
389
  }
368
390
  let url = `${weaverseHost}/${API}/project_configs`;
369
391
  let res;
370
- let body = JSON.stringify({
371
- isDesignMode,
372
- projectId
373
- });
392
+ let body = JSON.stringify({ isDesignMode, projectId });
374
393
  if (isDesignMode) {
375
- res = await fetch(url, {
376
- method: "POST",
377
- body
378
- }).then((res2) => res2.json());
394
+ res = await fetch(url, { method: "POST", body }).then(
395
+ (res2) => res2.json()
396
+ );
379
397
  } else {
380
398
  res = await this.fetchWithCache(url, { method: "POST", strategy, body });
381
399
  }
382
400
  let data = res || {};
383
401
  if (data?.theme && this.themeSchema?.inspector) {
384
402
  let defaultThemeSettings = {};
385
- this.themeSchema.inspector.forEach(({ inputs }) => {
386
- inputs.forEach(({ name, defaultValue }) => {
387
- if (name && defaultValue) {
388
- defaultThemeSettings[name] = defaultValue;
389
- }
390
- });
391
- });
403
+ if (this.themeSchema) {
404
+ defaultThemeSettings = generateDataFromSchema(this.themeSchema);
405
+ }
392
406
  data.theme = {
393
407
  ...defaultThemeSettings,
394
408
  ...data.theme
@@ -519,16 +533,6 @@ function getSelectedProductOptions(request) {
519
533
  }
520
534
 
521
535
  // src/index.ts
522
- var registerComponents = (components) => {
523
- components.forEach((comp) => {
524
- WeaverseHydrogen.registerElement({
525
- type: comp?.schema?.type,
526
- Component: comp?.default,
527
- schema: comp?.schema,
528
- loader: comp?.loader
529
- });
530
- });
531
- };
532
536
  var WeaverseHydrogen = class extends Weaverse {
533
537
  platformType = "shopify-hydrogen";
534
538
  pageId;
@@ -548,31 +552,28 @@ var WeaverseHydrogenItem = class extends WeaverseItemStore {
548
552
  constructor(initialData, weaverse) {
549
553
  super(initialData, weaverse);
550
554
  let { data, ...rest } = initialData;
551
- Object.assign(this._store, this.getDefaultData(), data, rest);
555
+ Object.assign(this._store, this._schemaData, data, rest);
552
556
  }
553
557
  get Element() {
554
558
  return super.Element;
555
559
  }
556
- getDefaultData = () => {
557
- return this.Element?.schema?.inspector?.flatMap((group) => group.inputs).reduce((a, { defaultValue, name }) => {
558
- if (name && defaultValue !== null && defaultValue !== void 0) {
559
- a[name] = defaultValue;
560
- }
561
- return a;
562
- }, {});
563
- };
560
+ get _schemaData() {
561
+ if (this.Element.schema) {
562
+ return generateDataFromSchema(this.Element.schema);
563
+ }
564
+ return {};
565
+ }
564
566
  };
565
567
  Weaverse.ItemConstructor = WeaverseHydrogenItem;
566
568
  export {
567
- ThemeSettingsStore,
568
569
  WeaverseClient,
569
570
  WeaverseHydrogen,
570
571
  WeaverseHydrogenItem,
571
572
  WeaverseHydrogenRoot,
573
+ generateDataFromSchema,
572
574
  getRequestQueries,
573
575
  getSelectedProductOptions,
574
576
  getWeaverseConfigs,
575
- registerComponents,
576
577
  useChildInstances,
577
578
  useItemInstance,
578
579
  useParentInstance,
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@weaverse/hydrogen",
3
3
  "author": "Weaverse Team",
4
4
  "description": "Components, hooks, and utilities for building Shopify Hydrogen websites with Weaverse",
5
- "version": "3.1.0",
5
+ "version": "3.1.2",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
8
8
  "typings": "dist/index.d.ts",
@@ -33,7 +33,7 @@
33
33
  "singleQuote": true
34
34
  },
35
35
  "dependencies": {
36
- "@weaverse/react": "3.1.0",
36
+ "@weaverse/react": "3.1.2",
37
37
  "react-error-boundary": "^4.0.13"
38
38
  },
39
39
  "devDependencies": {