@weaverse/hydrogen 5.12.0 → 5.13.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 +49 -3
- package/dist/index.d.ts +49 -3
- package/dist/index.js +124 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +124 -5
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.d.mts
CHANGED
|
@@ -12,6 +12,27 @@ import { ReactNode, ComponentType, JSX, ForwardRefExoticComponent } from 'react'
|
|
|
12
12
|
import { NavigateFunction, UIMatch } from 'react-router';
|
|
13
13
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
14
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Minimal mutable store for design-mode static text overrides.
|
|
17
|
+
*
|
|
18
|
+
* useSyncExternalStore-compatible. Passed into ThemeTextProvider which
|
|
19
|
+
* subscribes internally and merges overrides into merchantOverrides.
|
|
20
|
+
* The studio bridge calls updateOverrides() via weaverse.internal.themeTextStore.
|
|
21
|
+
*
|
|
22
|
+
* Shape: flat Record<string, string> — dot-notation keys map to values
|
|
23
|
+
* (e.g. "cart.title" → "Shopping Cart").
|
|
24
|
+
*/
|
|
25
|
+
declare class ThemeTextStore {
|
|
26
|
+
overrides: Record<string, string>;
|
|
27
|
+
private listeners;
|
|
28
|
+
setOverrides: (overrides: Record<string, string>) => void;
|
|
29
|
+
updateOverrides: (newOverrides: Record<string, string>) => void;
|
|
30
|
+
getSnapshot: () => Record<string, string>;
|
|
31
|
+
getServerSnapshot: () => Record<string, string>;
|
|
32
|
+
subscribe: (callback: () => void) => () => void;
|
|
33
|
+
private emit;
|
|
34
|
+
}
|
|
35
|
+
|
|
15
36
|
type WeaverseThemeData = {
|
|
16
37
|
theme: HydrogenThemeSettings;
|
|
17
38
|
schema?: HydrogenThemeSchema;
|
|
@@ -59,7 +80,7 @@ type ThemeTextValue = {
|
|
|
59
80
|
*
|
|
60
81
|
* Priority chain (highest wins):
|
|
61
82
|
* 1. External `t` (passed into `withWeaverse` / `ThemeTextProvider`)
|
|
62
|
-
* 2. `merchantOverrides` (DB overrides for the current locale)
|
|
83
|
+
* 2. `merchantOverrides` (DB overrides for the current locale + design overrides)
|
|
63
84
|
* 3. `staticContent` (theme default JSON)
|
|
64
85
|
* 4. The key itself (fallback)
|
|
65
86
|
*
|
|
@@ -68,6 +89,10 @@ type ThemeTextValue = {
|
|
|
68
89
|
* t('badge.sale', { percentage: 15 }) // => "-15% Off"
|
|
69
90
|
*/
|
|
70
91
|
t: TranslateFunction;
|
|
92
|
+
/** Exposed for useStudio to attach to weaverse.internal. Null in production. */
|
|
93
|
+
themeTextStore: ThemeTextStore | null;
|
|
94
|
+
/** Active-locale translated keys loaded from the storefront API. */
|
|
95
|
+
merchantOverrides: Record<string, unknown> | null;
|
|
71
96
|
};
|
|
72
97
|
type ThemeTextProviderProps = {
|
|
73
98
|
staticContent: Record<string, unknown>;
|
|
@@ -79,6 +104,8 @@ type ThemeTextProviderProps = {
|
|
|
79
104
|
* that value is used; otherwise the internal resolution chain continues.
|
|
80
105
|
*/
|
|
81
106
|
t?: TranslateFunction;
|
|
107
|
+
/** Optional store for live design-mode text overrides from the builder. */
|
|
108
|
+
themeTextStore?: ThemeTextStore | null;
|
|
82
109
|
children: ReactNode;
|
|
83
110
|
};
|
|
84
111
|
/**
|
|
@@ -86,8 +113,9 @@ type ThemeTextProviderProps = {
|
|
|
86
113
|
*
|
|
87
114
|
* - `staticContent` – the theme's default locale JSON (from themeSchema.i18n)
|
|
88
115
|
* - `merchantOverrides` – locale-specific overrides fetched from the API
|
|
116
|
+
* - `themeTextStore` – optional store for live design-mode text overrides
|
|
89
117
|
*/
|
|
90
|
-
declare function ThemeTextProvider({ staticContent, merchantOverrides, t: externalT, children, }: ThemeTextProviderProps): react_jsx_runtime.JSX.Element;
|
|
118
|
+
declare function ThemeTextProvider({ staticContent, merchantOverrides, t: externalT, themeTextStore, children, }: ThemeTextProviderProps): react_jsx_runtime.JSX.Element;
|
|
91
119
|
/**
|
|
92
120
|
* Hook to access the theme text `t()` function.
|
|
93
121
|
*
|
|
@@ -403,6 +431,14 @@ declare class WeaverseClient {
|
|
|
403
431
|
* @returns HydrogenPageData with single main component containing the message
|
|
404
432
|
*/
|
|
405
433
|
generateFallbackPage: (message: string) => HydrogenPageData;
|
|
434
|
+
/**
|
|
435
|
+
* Fetch all published custom pages for sitemap generation.
|
|
436
|
+
* Paginates automatically, never throws, returns accumulated results on partial failure.
|
|
437
|
+
*/
|
|
438
|
+
fetchCustomPages(opts?: {
|
|
439
|
+
locale?: string;
|
|
440
|
+
limit?: number;
|
|
441
|
+
}): Promise<CustomPageEntry[]>;
|
|
406
442
|
/**
|
|
407
443
|
* Load page data from Weaverse API with optional route-level project override.
|
|
408
444
|
* Fetches page content, executes component loaders, and handles empty items fallback.
|
|
@@ -489,6 +525,8 @@ type WeaverseInternal = {
|
|
|
489
525
|
navigate: NavigateFunction;
|
|
490
526
|
revalidate: () => void;
|
|
491
527
|
themeSettingsStore: ThemeSettingsStore;
|
|
528
|
+
themeTextStore?: ThemeTextStore | null;
|
|
529
|
+
merchantOverrides?: Record<string, unknown> | null;
|
|
492
530
|
};
|
|
493
531
|
/**
|
|
494
532
|
* Optimized: Use direct type alias to maintain consistency
|
|
@@ -786,6 +824,14 @@ type ProjectIdValidationResult = {
|
|
|
786
824
|
valid: boolean;
|
|
787
825
|
error?: string;
|
|
788
826
|
};
|
|
827
|
+
interface CustomPageEntry {
|
|
828
|
+
changeFrequency?: 'daily' | 'weekly' | 'monthly';
|
|
829
|
+
handle: string;
|
|
830
|
+
lastModified: string;
|
|
831
|
+
locale: string | null;
|
|
832
|
+
path: string;
|
|
833
|
+
priority?: number;
|
|
834
|
+
}
|
|
789
835
|
/**
|
|
790
836
|
* Type guards for response validation
|
|
791
837
|
*/
|
|
@@ -1097,4 +1143,4 @@ declare const IMAGES_PLACEHOLDERS: {
|
|
|
1097
1143
|
product_18: string;
|
|
1098
1144
|
};
|
|
1099
1145
|
|
|
1100
|
-
export { type CacheResponseValidator, type ComponentDataValue, type ComponentLoaderArgs, type CreateHydrogenSchemaOptions, type DirectFetchResponse, type FetchProjectPayload, type FetchProjectRequestBody, type HydrogenComponent, type HydrogenComponentData, type HydrogenComponentPresets, type HydrogenComponentProps, type HydrogenComponentSchema, type HydrogenElement, type HydrogenPageAssignment, type HydrogenPageData, type HydrogenProjectType, type HydrogenSchemaValidationResult, type HydrogenThemeSchema, type HydrogenThemeSettings, IMAGES_PLACEHOLDERS, type LoadPageParams, type ProjectIdValidationResult, type ProjectIdValue, type PublicEnv, type RouteLoaderArgs, type ThemeSettingsResponse, ThemeTextProvider, type ThemeTextProviderProps, type ThemeTextValue, type TranslateFunction, type TranslationChanges, type TranslationEntry, type TranslationItemEntry, type TranslationMap, type TranslationMapEntry, type WeaverseArticle, type WeaverseBlog, WeaverseClient, type WeaverseClientArgs, type WeaverseCollection, type WeaverseDataContext, WeaverseError, WeaverseHydrogen, WeaverseHydrogenItem, type WeaverseHydrogenParams, WeaverseHydrogenRoot, type WeaverseI18n, type WeaverseInternal, type WeaverseLoaderData, type WeaverseLoaderRequestInfo, type WeaverseMetaObject, type WeaverseProduct, type WeaverseProjectConfigs, type WeaverseStudioQueries, type WithCacheFetchResponse, type WithWeaverseOptions, createWeaverseDataContext, defaultComponents, generateDataFromSchema, getNestedKey, getPreviewData, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, hasError, hasWeaverseStudio, interpolate, isFetchProjectPayload, isProjectIdFunction, isThemeSettingsResponse, isValidHydrogenSchema, isWithCacheFetchResponse, registerComponent, useThemeSettings, useThemeText, useWeaverseDataContext, withWeaverse };
|
|
1146
|
+
export { type CacheResponseValidator, type ComponentDataValue, type ComponentLoaderArgs, type CreateHydrogenSchemaOptions, type CustomPageEntry, type DirectFetchResponse, type FetchProjectPayload, type FetchProjectRequestBody, type HydrogenComponent, type HydrogenComponentData, type HydrogenComponentPresets, type HydrogenComponentProps, type HydrogenComponentSchema, type HydrogenElement, type HydrogenPageAssignment, type HydrogenPageData, type HydrogenProjectType, type HydrogenSchemaValidationResult, type HydrogenThemeSchema, type HydrogenThemeSettings, IMAGES_PLACEHOLDERS, type LoadPageParams, type ProjectIdValidationResult, type ProjectIdValue, type PublicEnv, type RouteLoaderArgs, type ThemeSettingsResponse, ThemeTextProvider, type ThemeTextProviderProps, ThemeTextStore, type ThemeTextValue, type TranslateFunction, type TranslationChanges, type TranslationEntry, type TranslationItemEntry, type TranslationMap, type TranslationMapEntry, type WeaverseArticle, type WeaverseBlog, WeaverseClient, type WeaverseClientArgs, type WeaverseCollection, type WeaverseDataContext, WeaverseError, WeaverseHydrogen, WeaverseHydrogenItem, type WeaverseHydrogenParams, WeaverseHydrogenRoot, type WeaverseI18n, type WeaverseInternal, type WeaverseLoaderData, type WeaverseLoaderRequestInfo, type WeaverseMetaObject, type WeaverseProduct, type WeaverseProjectConfigs, type WeaverseStudioQueries, type WithCacheFetchResponse, type WithWeaverseOptions, createWeaverseDataContext, defaultComponents, generateDataFromSchema, getNestedKey, getPreviewData, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, hasError, hasWeaverseStudio, interpolate, isFetchProjectPayload, isProjectIdFunction, isThemeSettingsResponse, isValidHydrogenSchema, isWithCacheFetchResponse, registerComponent, useThemeSettings, useThemeText, useWeaverseDataContext, withWeaverse };
|
package/dist/index.d.ts
CHANGED
|
@@ -12,6 +12,27 @@ import { ReactNode, ComponentType, JSX, ForwardRefExoticComponent } from 'react'
|
|
|
12
12
|
import { NavigateFunction, UIMatch } from 'react-router';
|
|
13
13
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
14
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Minimal mutable store for design-mode static text overrides.
|
|
17
|
+
*
|
|
18
|
+
* useSyncExternalStore-compatible. Passed into ThemeTextProvider which
|
|
19
|
+
* subscribes internally and merges overrides into merchantOverrides.
|
|
20
|
+
* The studio bridge calls updateOverrides() via weaverse.internal.themeTextStore.
|
|
21
|
+
*
|
|
22
|
+
* Shape: flat Record<string, string> — dot-notation keys map to values
|
|
23
|
+
* (e.g. "cart.title" → "Shopping Cart").
|
|
24
|
+
*/
|
|
25
|
+
declare class ThemeTextStore {
|
|
26
|
+
overrides: Record<string, string>;
|
|
27
|
+
private listeners;
|
|
28
|
+
setOverrides: (overrides: Record<string, string>) => void;
|
|
29
|
+
updateOverrides: (newOverrides: Record<string, string>) => void;
|
|
30
|
+
getSnapshot: () => Record<string, string>;
|
|
31
|
+
getServerSnapshot: () => Record<string, string>;
|
|
32
|
+
subscribe: (callback: () => void) => () => void;
|
|
33
|
+
private emit;
|
|
34
|
+
}
|
|
35
|
+
|
|
15
36
|
type WeaverseThemeData = {
|
|
16
37
|
theme: HydrogenThemeSettings;
|
|
17
38
|
schema?: HydrogenThemeSchema;
|
|
@@ -59,7 +80,7 @@ type ThemeTextValue = {
|
|
|
59
80
|
*
|
|
60
81
|
* Priority chain (highest wins):
|
|
61
82
|
* 1. External `t` (passed into `withWeaverse` / `ThemeTextProvider`)
|
|
62
|
-
* 2. `merchantOverrides` (DB overrides for the current locale)
|
|
83
|
+
* 2. `merchantOverrides` (DB overrides for the current locale + design overrides)
|
|
63
84
|
* 3. `staticContent` (theme default JSON)
|
|
64
85
|
* 4. The key itself (fallback)
|
|
65
86
|
*
|
|
@@ -68,6 +89,10 @@ type ThemeTextValue = {
|
|
|
68
89
|
* t('badge.sale', { percentage: 15 }) // => "-15% Off"
|
|
69
90
|
*/
|
|
70
91
|
t: TranslateFunction;
|
|
92
|
+
/** Exposed for useStudio to attach to weaverse.internal. Null in production. */
|
|
93
|
+
themeTextStore: ThemeTextStore | null;
|
|
94
|
+
/** Active-locale translated keys loaded from the storefront API. */
|
|
95
|
+
merchantOverrides: Record<string, unknown> | null;
|
|
71
96
|
};
|
|
72
97
|
type ThemeTextProviderProps = {
|
|
73
98
|
staticContent: Record<string, unknown>;
|
|
@@ -79,6 +104,8 @@ type ThemeTextProviderProps = {
|
|
|
79
104
|
* that value is used; otherwise the internal resolution chain continues.
|
|
80
105
|
*/
|
|
81
106
|
t?: TranslateFunction;
|
|
107
|
+
/** Optional store for live design-mode text overrides from the builder. */
|
|
108
|
+
themeTextStore?: ThemeTextStore | null;
|
|
82
109
|
children: ReactNode;
|
|
83
110
|
};
|
|
84
111
|
/**
|
|
@@ -86,8 +113,9 @@ type ThemeTextProviderProps = {
|
|
|
86
113
|
*
|
|
87
114
|
* - `staticContent` – the theme's default locale JSON (from themeSchema.i18n)
|
|
88
115
|
* - `merchantOverrides` – locale-specific overrides fetched from the API
|
|
116
|
+
* - `themeTextStore` – optional store for live design-mode text overrides
|
|
89
117
|
*/
|
|
90
|
-
declare function ThemeTextProvider({ staticContent, merchantOverrides, t: externalT, children, }: ThemeTextProviderProps): react_jsx_runtime.JSX.Element;
|
|
118
|
+
declare function ThemeTextProvider({ staticContent, merchantOverrides, t: externalT, themeTextStore, children, }: ThemeTextProviderProps): react_jsx_runtime.JSX.Element;
|
|
91
119
|
/**
|
|
92
120
|
* Hook to access the theme text `t()` function.
|
|
93
121
|
*
|
|
@@ -403,6 +431,14 @@ declare class WeaverseClient {
|
|
|
403
431
|
* @returns HydrogenPageData with single main component containing the message
|
|
404
432
|
*/
|
|
405
433
|
generateFallbackPage: (message: string) => HydrogenPageData;
|
|
434
|
+
/**
|
|
435
|
+
* Fetch all published custom pages for sitemap generation.
|
|
436
|
+
* Paginates automatically, never throws, returns accumulated results on partial failure.
|
|
437
|
+
*/
|
|
438
|
+
fetchCustomPages(opts?: {
|
|
439
|
+
locale?: string;
|
|
440
|
+
limit?: number;
|
|
441
|
+
}): Promise<CustomPageEntry[]>;
|
|
406
442
|
/**
|
|
407
443
|
* Load page data from Weaverse API with optional route-level project override.
|
|
408
444
|
* Fetches page content, executes component loaders, and handles empty items fallback.
|
|
@@ -489,6 +525,8 @@ type WeaverseInternal = {
|
|
|
489
525
|
navigate: NavigateFunction;
|
|
490
526
|
revalidate: () => void;
|
|
491
527
|
themeSettingsStore: ThemeSettingsStore;
|
|
528
|
+
themeTextStore?: ThemeTextStore | null;
|
|
529
|
+
merchantOverrides?: Record<string, unknown> | null;
|
|
492
530
|
};
|
|
493
531
|
/**
|
|
494
532
|
* Optimized: Use direct type alias to maintain consistency
|
|
@@ -786,6 +824,14 @@ type ProjectIdValidationResult = {
|
|
|
786
824
|
valid: boolean;
|
|
787
825
|
error?: string;
|
|
788
826
|
};
|
|
827
|
+
interface CustomPageEntry {
|
|
828
|
+
changeFrequency?: 'daily' | 'weekly' | 'monthly';
|
|
829
|
+
handle: string;
|
|
830
|
+
lastModified: string;
|
|
831
|
+
locale: string | null;
|
|
832
|
+
path: string;
|
|
833
|
+
priority?: number;
|
|
834
|
+
}
|
|
789
835
|
/**
|
|
790
836
|
* Type guards for response validation
|
|
791
837
|
*/
|
|
@@ -1097,4 +1143,4 @@ declare const IMAGES_PLACEHOLDERS: {
|
|
|
1097
1143
|
product_18: string;
|
|
1098
1144
|
};
|
|
1099
1145
|
|
|
1100
|
-
export { type CacheResponseValidator, type ComponentDataValue, type ComponentLoaderArgs, type CreateHydrogenSchemaOptions, type DirectFetchResponse, type FetchProjectPayload, type FetchProjectRequestBody, type HydrogenComponent, type HydrogenComponentData, type HydrogenComponentPresets, type HydrogenComponentProps, type HydrogenComponentSchema, type HydrogenElement, type HydrogenPageAssignment, type HydrogenPageData, type HydrogenProjectType, type HydrogenSchemaValidationResult, type HydrogenThemeSchema, type HydrogenThemeSettings, IMAGES_PLACEHOLDERS, type LoadPageParams, type ProjectIdValidationResult, type ProjectIdValue, type PublicEnv, type RouteLoaderArgs, type ThemeSettingsResponse, ThemeTextProvider, type ThemeTextProviderProps, type ThemeTextValue, type TranslateFunction, type TranslationChanges, type TranslationEntry, type TranslationItemEntry, type TranslationMap, type TranslationMapEntry, type WeaverseArticle, type WeaverseBlog, WeaverseClient, type WeaverseClientArgs, type WeaverseCollection, type WeaverseDataContext, WeaverseError, WeaverseHydrogen, WeaverseHydrogenItem, type WeaverseHydrogenParams, WeaverseHydrogenRoot, type WeaverseI18n, type WeaverseInternal, type WeaverseLoaderData, type WeaverseLoaderRequestInfo, type WeaverseMetaObject, type WeaverseProduct, type WeaverseProjectConfigs, type WeaverseStudioQueries, type WithCacheFetchResponse, type WithWeaverseOptions, createWeaverseDataContext, defaultComponents, generateDataFromSchema, getNestedKey, getPreviewData, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, hasError, hasWeaverseStudio, interpolate, isFetchProjectPayload, isProjectIdFunction, isThemeSettingsResponse, isValidHydrogenSchema, isWithCacheFetchResponse, registerComponent, useThemeSettings, useThemeText, useWeaverseDataContext, withWeaverse };
|
|
1146
|
+
export { type CacheResponseValidator, type ComponentDataValue, type ComponentLoaderArgs, type CreateHydrogenSchemaOptions, type CustomPageEntry, type DirectFetchResponse, type FetchProjectPayload, type FetchProjectRequestBody, type HydrogenComponent, type HydrogenComponentData, type HydrogenComponentPresets, type HydrogenComponentProps, type HydrogenComponentSchema, type HydrogenElement, type HydrogenPageAssignment, type HydrogenPageData, type HydrogenProjectType, type HydrogenSchemaValidationResult, type HydrogenThemeSchema, type HydrogenThemeSettings, IMAGES_PLACEHOLDERS, type LoadPageParams, type ProjectIdValidationResult, type ProjectIdValue, type PublicEnv, type RouteLoaderArgs, type ThemeSettingsResponse, ThemeTextProvider, type ThemeTextProviderProps, ThemeTextStore, type ThemeTextValue, type TranslateFunction, type TranslationChanges, type TranslationEntry, type TranslationItemEntry, type TranslationMap, type TranslationMapEntry, type WeaverseArticle, type WeaverseBlog, WeaverseClient, type WeaverseClientArgs, type WeaverseCollection, type WeaverseDataContext, WeaverseError, WeaverseHydrogen, WeaverseHydrogenItem, type WeaverseHydrogenParams, WeaverseHydrogenRoot, type WeaverseI18n, type WeaverseInternal, type WeaverseLoaderData, type WeaverseLoaderRequestInfo, type WeaverseMetaObject, type WeaverseProduct, type WeaverseProjectConfigs, type WeaverseStudioQueries, type WithCacheFetchResponse, type WithWeaverseOptions, createWeaverseDataContext, defaultComponents, generateDataFromSchema, getNestedKey, getPreviewData, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, hasError, hasWeaverseStudio, interpolate, isFetchProjectPayload, isProjectIdFunction, isThemeSettingsResponse, isValidHydrogenSchema, isWithCacheFetchResponse, registerComponent, useThemeSettings, useThemeText, useWeaverseDataContext, withWeaverse };
|
package/dist/index.js
CHANGED
|
@@ -58,12 +58,39 @@ function interpolate(template, variables) {
|
|
|
58
58
|
}
|
|
59
59
|
var ThemeTextContext = react$1.createContext(null);
|
|
60
60
|
ThemeTextContext.displayName = "WeaverseThemeTextContext";
|
|
61
|
+
function unflattenKeys(flat) {
|
|
62
|
+
const result = {};
|
|
63
|
+
for (const [dotPath, value] of Object.entries(flat)) {
|
|
64
|
+
const keys = dotPath.split(".");
|
|
65
|
+
let current = result;
|
|
66
|
+
for (let i = 0; i < keys.length - 1; i++) {
|
|
67
|
+
const k = keys[i];
|
|
68
|
+
if (!(k in current) || typeof current[k] !== "object") {
|
|
69
|
+
current[k] = {};
|
|
70
|
+
}
|
|
71
|
+
current = current[k];
|
|
72
|
+
}
|
|
73
|
+
current[keys[keys.length - 1]] = value;
|
|
74
|
+
}
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
77
|
+
var EMPTY = {};
|
|
78
|
+
var NOOP_SUBSCRIBE = () => () => {
|
|
79
|
+
};
|
|
80
|
+
var NOOP_SNAPSHOT = () => EMPTY;
|
|
61
81
|
function ThemeTextProvider({
|
|
62
82
|
staticContent,
|
|
63
83
|
merchantOverrides,
|
|
64
84
|
t: externalT,
|
|
85
|
+
themeTextStore,
|
|
65
86
|
children
|
|
66
87
|
}) {
|
|
88
|
+
const designOverrides = react.useSafeExternalStore(
|
|
89
|
+
themeTextStore?.subscribe ?? NOOP_SUBSCRIBE,
|
|
90
|
+
themeTextStore?.getSnapshot ?? NOOP_SNAPSHOT,
|
|
91
|
+
themeTextStore?.getServerSnapshot ?? NOOP_SNAPSHOT
|
|
92
|
+
);
|
|
93
|
+
const mergedOverrides = designOverrides !== EMPTY && Object.keys(designOverrides).length > 0 ? { ...merchantOverrides, ...unflattenKeys(designOverrides) } : merchantOverrides;
|
|
67
94
|
const value = react$1.useMemo(() => {
|
|
68
95
|
const t = (key, variables) => {
|
|
69
96
|
if (externalT) {
|
|
@@ -72,13 +99,23 @@ function ThemeTextProvider({
|
|
|
72
99
|
return external;
|
|
73
100
|
}
|
|
74
101
|
}
|
|
75
|
-
const override =
|
|
102
|
+
const override = mergedOverrides ? getNestedKey(mergedOverrides, key) : void 0;
|
|
76
103
|
const staticValue = getNestedKey(staticContent, key);
|
|
77
104
|
const raw = override ?? staticValue ?? key;
|
|
78
105
|
return interpolate(raw, variables);
|
|
79
106
|
};
|
|
80
|
-
return {
|
|
81
|
-
|
|
107
|
+
return {
|
|
108
|
+
t,
|
|
109
|
+
themeTextStore: themeTextStore ?? null,
|
|
110
|
+
merchantOverrides: merchantOverrides ?? null
|
|
111
|
+
};
|
|
112
|
+
}, [
|
|
113
|
+
staticContent,
|
|
114
|
+
merchantOverrides,
|
|
115
|
+
mergedOverrides,
|
|
116
|
+
externalT,
|
|
117
|
+
themeTextStore
|
|
118
|
+
]);
|
|
82
119
|
return /* @__PURE__ */ jsxRuntime.jsx(ThemeTextContext.Provider, { value, children });
|
|
83
120
|
}
|
|
84
121
|
function useThemeText() {
|
|
@@ -349,6 +386,37 @@ function getPreviewData(type, components, weaverseHost) {
|
|
|
349
386
|
}
|
|
350
387
|
};
|
|
351
388
|
}
|
|
389
|
+
|
|
390
|
+
// src/utils/theme-text-store.ts
|
|
391
|
+
var ThemeTextStore = class {
|
|
392
|
+
overrides = {};
|
|
393
|
+
listeners = /* @__PURE__ */ new Set();
|
|
394
|
+
setOverrides = (overrides) => {
|
|
395
|
+
this.overrides = { ...overrides };
|
|
396
|
+
this.emit();
|
|
397
|
+
};
|
|
398
|
+
updateOverrides = (newOverrides) => {
|
|
399
|
+
this.overrides = { ...this.overrides, ...newOverrides };
|
|
400
|
+
this.emit();
|
|
401
|
+
};
|
|
402
|
+
getSnapshot = () => this.overrides;
|
|
403
|
+
getServerSnapshot = () => this.overrides;
|
|
404
|
+
subscribe = (callback) => {
|
|
405
|
+
this.listeners.add(callback);
|
|
406
|
+
return () => {
|
|
407
|
+
this.listeners.delete(callback);
|
|
408
|
+
};
|
|
409
|
+
};
|
|
410
|
+
emit = () => {
|
|
411
|
+
for (const listener of Array.from(this.listeners)) {
|
|
412
|
+
try {
|
|
413
|
+
listener();
|
|
414
|
+
} catch (error) {
|
|
415
|
+
console.error("ThemeTextStore: Listener error", error);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
};
|
|
419
|
+
};
|
|
352
420
|
var ThemeSettingsStore = class {
|
|
353
421
|
settings = {};
|
|
354
422
|
schema;
|
|
@@ -459,6 +527,7 @@ function useStudio(weaverse) {
|
|
|
459
527
|
let { pathname, search } = reactRouter.useLocation();
|
|
460
528
|
let navigate = reactRouter.useNavigate();
|
|
461
529
|
let themeSettingsStore = useThemeSettingsStore();
|
|
530
|
+
let { themeTextStore, merchantOverrides } = useThemeText();
|
|
462
531
|
let {
|
|
463
532
|
isDesignMode,
|
|
464
533
|
weaverseHost,
|
|
@@ -476,7 +545,9 @@ function useStudio(weaverse) {
|
|
|
476
545
|
...weaverse.internal,
|
|
477
546
|
navigate,
|
|
478
547
|
revalidate,
|
|
479
|
-
|
|
548
|
+
merchantOverrides,
|
|
549
|
+
themeSettingsStore,
|
|
550
|
+
themeTextStore
|
|
480
551
|
};
|
|
481
552
|
let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`;
|
|
482
553
|
react.loadScript(studioSrc).then(() => {
|
|
@@ -761,12 +832,17 @@ function withWeaverse(Component, options) {
|
|
|
761
832
|
return (props) => {
|
|
762
833
|
const themeSettingsStore = useCreateThemeSettingsStore();
|
|
763
834
|
const themeTextData = useThemeTextData();
|
|
835
|
+
const themeTextStoreRef = react$1.useRef(null);
|
|
836
|
+
if (!themeTextStoreRef.current) {
|
|
837
|
+
themeTextStoreRef.current = new ThemeTextStore();
|
|
838
|
+
}
|
|
764
839
|
return /* @__PURE__ */ jsxRuntime.jsx(ThemeSettingsStoreContext.Provider, { value: themeSettingsStore, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
765
840
|
ThemeTextProvider,
|
|
766
841
|
{
|
|
767
842
|
merchantOverrides: themeTextData.merchantOverrides,
|
|
768
843
|
staticContent: themeTextData.staticContent,
|
|
769
844
|
t: options?.t,
|
|
845
|
+
themeTextStore: themeTextStoreRef.current,
|
|
770
846
|
children: /* @__PURE__ */ jsxRuntime.jsx(Component, { ...props })
|
|
771
847
|
}
|
|
772
848
|
) });
|
|
@@ -1329,6 +1405,49 @@ var WeaverseClient = class {
|
|
|
1329
1405
|
]
|
|
1330
1406
|
};
|
|
1331
1407
|
};
|
|
1408
|
+
/**
|
|
1409
|
+
* Fetch all published custom pages for sitemap generation.
|
|
1410
|
+
* Paginates automatically, never throws, returns accumulated results on partial failure.
|
|
1411
|
+
*/
|
|
1412
|
+
async fetchCustomPages(opts) {
|
|
1413
|
+
const { weaverseHost, projectId } = this.configs;
|
|
1414
|
+
const entries = [];
|
|
1415
|
+
const MAX_PAGES = 100;
|
|
1416
|
+
let cursor = null;
|
|
1417
|
+
for (let i = 0; i < MAX_PAGES; i++) {
|
|
1418
|
+
const params = new URLSearchParams();
|
|
1419
|
+
if (opts?.locale) {
|
|
1420
|
+
params.set("locale", opts.locale);
|
|
1421
|
+
}
|
|
1422
|
+
if (opts?.limit) {
|
|
1423
|
+
params.set("limit", String(opts.limit));
|
|
1424
|
+
}
|
|
1425
|
+
if (cursor) {
|
|
1426
|
+
params.set("cursor", cursor);
|
|
1427
|
+
}
|
|
1428
|
+
const qs = params.toString();
|
|
1429
|
+
const url = `${weaverseHost}/api/public/v1/projects/${projectId}/custom-pages${qs ? `?${qs}` : ""}`;
|
|
1430
|
+
try {
|
|
1431
|
+
const result = await this.fetchWithCache(url);
|
|
1432
|
+
entries.push(...result.data || []);
|
|
1433
|
+
if (!result.nextCursor) {
|
|
1434
|
+
return entries;
|
|
1435
|
+
}
|
|
1436
|
+
cursor = result.nextCursor;
|
|
1437
|
+
} catch (err) {
|
|
1438
|
+
const status = err?.status;
|
|
1439
|
+
const msg = err?.message || String(err);
|
|
1440
|
+
console.warn(
|
|
1441
|
+
entries.length === 0 ? `[Weaverse] Failed to fetch custom pages: ${msg}${status ? ` (HTTP ${status})` : ""}` : `[Weaverse] Custom pages pagination interrupted: ${msg}`
|
|
1442
|
+
);
|
|
1443
|
+
return entries;
|
|
1444
|
+
}
|
|
1445
|
+
}
|
|
1446
|
+
console.warn(
|
|
1447
|
+
"[Weaverse] Custom pages pagination cap reached (100 iterations)"
|
|
1448
|
+
);
|
|
1449
|
+
return entries;
|
|
1450
|
+
}
|
|
1332
1451
|
/**
|
|
1333
1452
|
* Load page data from Weaverse API with optional route-level project override.
|
|
1334
1453
|
* Fetches page content, executes component loaders, and handles empty items fallback.
|
|
@@ -1584,6 +1703,7 @@ Object.defineProperty(exports, "useWeaverse", {
|
|
|
1584
1703
|
});
|
|
1585
1704
|
exports.IMAGES_PLACEHOLDERS = IMAGES_PLACEHOLDERS;
|
|
1586
1705
|
exports.ThemeTextProvider = ThemeTextProvider;
|
|
1706
|
+
exports.ThemeTextStore = ThemeTextStore;
|
|
1587
1707
|
exports.WeaverseClient = WeaverseClient;
|
|
1588
1708
|
exports.WeaverseError = WeaverseError;
|
|
1589
1709
|
exports.WeaverseHydrogen = WeaverseHydrogen;
|