@weaverse/hydrogen 5.16.3 → 5.16.4
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 +60 -19
- package/dist/index.d.ts +60 -19
- package/dist/index.js +75 -64
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +73 -65
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.mjs
CHANGED
|
@@ -56,77 +56,70 @@ function interpolate(template, variables) {
|
|
|
56
56
|
return value === void 0 ? match : String(value);
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
|
-
var
|
|
60
|
-
|
|
61
|
-
function
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (!(k in current) || typeof current[k] !== "object") {
|
|
69
|
-
current[k] = {};
|
|
59
|
+
var TranslationContext = createContext(null);
|
|
60
|
+
TranslationContext.displayName = "WeaverseTranslationContext";
|
|
61
|
+
function createTranslate(sources) {
|
|
62
|
+
const { staticContent, merchantOverrides, designOverrides, externalT } = sources;
|
|
63
|
+
return (key, variables) => {
|
|
64
|
+
if (externalT) {
|
|
65
|
+
const external = externalT(key, variables);
|
|
66
|
+
if (external && external !== key) {
|
|
67
|
+
return external;
|
|
70
68
|
}
|
|
71
|
-
current = current[k];
|
|
72
69
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
70
|
+
const design = designOverrides && Object.hasOwn(designOverrides, key) ? designOverrides[key] : void 0;
|
|
71
|
+
const override = merchantOverrides ? getNestedKey(merchantOverrides, key) : void 0;
|
|
72
|
+
const staticValue = getNestedKey(staticContent, key);
|
|
73
|
+
const raw = design ?? override ?? staticValue ?? key;
|
|
74
|
+
return interpolate(raw, variables);
|
|
75
|
+
};
|
|
76
76
|
}
|
|
77
77
|
var EMPTY = {};
|
|
78
78
|
var NOOP_SUBSCRIBE = () => () => {
|
|
79
79
|
};
|
|
80
80
|
var NOOP_SNAPSHOT = () => EMPTY;
|
|
81
|
-
function
|
|
81
|
+
function TranslationProvider({
|
|
82
82
|
staticContent,
|
|
83
83
|
merchantOverrides,
|
|
84
84
|
t: externalT,
|
|
85
|
+
translationStore,
|
|
85
86
|
themeTextStore,
|
|
86
87
|
children
|
|
87
88
|
}) {
|
|
89
|
+
const store = translationStore ?? themeTextStore ?? null;
|
|
88
90
|
const designOverrides = useSafeExternalStore(
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
91
|
+
store?.subscribe ?? NOOP_SUBSCRIBE,
|
|
92
|
+
store?.getSnapshot ?? NOOP_SNAPSHOT,
|
|
93
|
+
store?.getServerSnapshot ?? NOOP_SNAPSHOT
|
|
92
94
|
);
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
const raw = override ?? staticValue ?? key;
|
|
105
|
-
return interpolate(raw, variables);
|
|
106
|
-
};
|
|
107
|
-
return {
|
|
108
|
-
t,
|
|
109
|
-
themeTextStore: themeTextStore ?? null,
|
|
95
|
+
const value = useMemo(
|
|
96
|
+
() => ({
|
|
97
|
+
t: createTranslate({
|
|
98
|
+
staticContent,
|
|
99
|
+
merchantOverrides,
|
|
100
|
+
designOverrides,
|
|
101
|
+
externalT
|
|
102
|
+
}),
|
|
103
|
+
translationStore: store,
|
|
104
|
+
// Deprecated alias — same instance, kept for backward compatibility.
|
|
105
|
+
themeTextStore: store,
|
|
110
106
|
merchantOverrides: merchantOverrides ?? null
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
mergedOverrides,
|
|
116
|
-
externalT,
|
|
117
|
-
themeTextStore
|
|
118
|
-
]);
|
|
119
|
-
return /* @__PURE__ */ jsx(ThemeTextContext.Provider, { value, children });
|
|
107
|
+
}),
|
|
108
|
+
[staticContent, merchantOverrides, designOverrides, externalT, store]
|
|
109
|
+
);
|
|
110
|
+
return /* @__PURE__ */ jsx(TranslationContext.Provider, { value, children });
|
|
120
111
|
}
|
|
121
|
-
function
|
|
122
|
-
const ctx = useContext(
|
|
112
|
+
function useTranslation() {
|
|
113
|
+
const ctx = useContext(TranslationContext);
|
|
123
114
|
if (!ctx) {
|
|
124
115
|
throw new Error(
|
|
125
|
-
"
|
|
116
|
+
"useTranslation must be used within <TranslationProvider>. Wrap your app with withWeaverse()."
|
|
126
117
|
);
|
|
127
118
|
}
|
|
128
119
|
return ctx;
|
|
129
120
|
}
|
|
121
|
+
var ThemeTextProvider = TranslationProvider;
|
|
122
|
+
var useThemeText = useTranslation;
|
|
130
123
|
function createFlatDataContext(matches) {
|
|
131
124
|
const context = {};
|
|
132
125
|
for (const match of matches) {
|
|
@@ -520,8 +513,8 @@ function getPreviewData(type, components, weaverseHost) {
|
|
|
520
513
|
};
|
|
521
514
|
}
|
|
522
515
|
|
|
523
|
-
// src/utils/
|
|
524
|
-
var
|
|
516
|
+
// src/utils/translation-store.ts
|
|
517
|
+
var TranslationStore = class {
|
|
525
518
|
overrides = {};
|
|
526
519
|
listeners = /* @__PURE__ */ new Set();
|
|
527
520
|
setOverrides = (overrides) => {
|
|
@@ -545,11 +538,12 @@ var ThemeTextStore = class {
|
|
|
545
538
|
try {
|
|
546
539
|
listener();
|
|
547
540
|
} catch (error) {
|
|
548
|
-
console.error("
|
|
541
|
+
console.error("TranslationStore: Listener error", error);
|
|
549
542
|
}
|
|
550
543
|
}
|
|
551
544
|
};
|
|
552
545
|
};
|
|
546
|
+
var ThemeTextStore = TranslationStore;
|
|
553
547
|
|
|
554
548
|
// src/utils/pick-weaverse-data.ts
|
|
555
549
|
function pickWeaverseData(dataProp, ownLoaderData, matches) {
|
|
@@ -639,11 +633,14 @@ function syncReusedInstance(weaverse, params) {
|
|
|
639
633
|
var currentNavigationKey = null;
|
|
640
634
|
var firedPageIds = /* @__PURE__ */ new Set();
|
|
641
635
|
var mountedInstances = 0;
|
|
642
|
-
function
|
|
636
|
+
function observeNavigation(navigationKey) {
|
|
643
637
|
if (navigationKey !== currentNavigationKey) {
|
|
644
638
|
currentNavigationKey = navigationKey;
|
|
645
639
|
firedPageIds.clear();
|
|
646
640
|
}
|
|
641
|
+
}
|
|
642
|
+
function shouldFirePixel(navigationKey, pageId) {
|
|
643
|
+
observeNavigation(navigationKey);
|
|
647
644
|
if (firedPageIds.has(pageId)) {
|
|
648
645
|
return false;
|
|
649
646
|
}
|
|
@@ -798,7 +795,7 @@ function useStudio(weaverse) {
|
|
|
798
795
|
let { pathname, search } = useLocation();
|
|
799
796
|
let navigate = useNavigate();
|
|
800
797
|
let themeSettingsStore = useThemeSettingsStore();
|
|
801
|
-
let { themeTextStore, merchantOverrides } =
|
|
798
|
+
let { translationStore, themeTextStore, merchantOverrides } = useTranslation();
|
|
802
799
|
let {
|
|
803
800
|
isDesignMode,
|
|
804
801
|
weaverseHost,
|
|
@@ -829,6 +826,8 @@ function useStudio(weaverse) {
|
|
|
829
826
|
revalidate,
|
|
830
827
|
merchantOverrides,
|
|
831
828
|
themeSettingsStore,
|
|
829
|
+
translationStore,
|
|
830
|
+
// Deprecated alias for existing Studio bridge integrations.
|
|
832
831
|
themeTextStore
|
|
833
832
|
};
|
|
834
833
|
loadScript(src).then(waitForStudio).then((studio) => studio?.init(weaverse)).catch(console.error);
|
|
@@ -839,6 +838,12 @@ function useStudio(weaverse) {
|
|
|
839
838
|
function usePixel(context) {
|
|
840
839
|
let { projectId, pageId, isDesignMode, weaverseHost } = context;
|
|
841
840
|
let { key: navigationKey } = useLocation();
|
|
841
|
+
useEffect(() => {
|
|
842
|
+
if (!(projectId && pageId) || isDesignMode) {
|
|
843
|
+
return;
|
|
844
|
+
}
|
|
845
|
+
observeNavigation(navigationKey);
|
|
846
|
+
}, [navigationKey, projectId, pageId, isDesignMode]);
|
|
842
847
|
useEffect(() => {
|
|
843
848
|
if (!(projectId && pageId) || isDesignMode) {
|
|
844
849
|
return;
|
|
@@ -1126,18 +1131,18 @@ var WeaverseHydrogenRoot = memo(
|
|
|
1126
1131
|
function withWeaverse(Component, options) {
|
|
1127
1132
|
return (props) => {
|
|
1128
1133
|
const themeSettingsStore = useCreateThemeSettingsStore();
|
|
1129
|
-
const
|
|
1130
|
-
const
|
|
1131
|
-
if (!
|
|
1132
|
-
|
|
1134
|
+
const translationData = useTranslationData();
|
|
1135
|
+
const translationStoreRef = useRef(null);
|
|
1136
|
+
if (!translationStoreRef.current) {
|
|
1137
|
+
translationStoreRef.current = new TranslationStore();
|
|
1133
1138
|
}
|
|
1134
1139
|
return /* @__PURE__ */ jsx(ThemeSettingsStoreContext.Provider, { value: themeSettingsStore, children: /* @__PURE__ */ jsxs(
|
|
1135
|
-
|
|
1140
|
+
TranslationProvider,
|
|
1136
1141
|
{
|
|
1137
|
-
merchantOverrides:
|
|
1138
|
-
staticContent:
|
|
1142
|
+
merchantOverrides: translationData.merchantOverrides,
|
|
1143
|
+
staticContent: translationData.staticContent,
|
|
1139
1144
|
t: options?.t,
|
|
1140
|
-
|
|
1145
|
+
translationStore: translationStoreRef.current,
|
|
1141
1146
|
children: [
|
|
1142
1147
|
/* @__PURE__ */ jsx(StudioConnect, {}),
|
|
1143
1148
|
/* @__PURE__ */ jsx(Component, { ...props })
|
|
@@ -1146,7 +1151,7 @@ function withWeaverse(Component, options) {
|
|
|
1146
1151
|
) });
|
|
1147
1152
|
};
|
|
1148
1153
|
}
|
|
1149
|
-
function
|
|
1154
|
+
function useTranslationData() {
|
|
1150
1155
|
const data = useRouteLoaderData("root");
|
|
1151
1156
|
return {
|
|
1152
1157
|
staticContent: data?.weaverseTheme?.staticContent ?? {},
|
|
@@ -1724,6 +1729,9 @@ var WeaverseClient = class {
|
|
|
1724
1729
|
try {
|
|
1725
1730
|
const { projectId, weaverseHost } = this.configs;
|
|
1726
1731
|
const i18n = this.storefront.i18n;
|
|
1732
|
+
if (!this.themeSchema?.i18n) {
|
|
1733
|
+
return;
|
|
1734
|
+
}
|
|
1727
1735
|
if (!(projectId && weaverseHost)) {
|
|
1728
1736
|
return;
|
|
1729
1737
|
}
|
|
@@ -1824,7 +1832,7 @@ var WeaverseClient = class {
|
|
|
1824
1832
|
* Fetches page content, executes component loaders, and handles empty items fallback.
|
|
1825
1833
|
*
|
|
1826
1834
|
* @param params - Optional page loading parameters
|
|
1827
|
-
* @param params.type - Page type (
|
|
1835
|
+
* @param params.type - Page type (INDEX, PAGE, PRODUCT, COLLECTION, etc.)
|
|
1828
1836
|
* @param params.handle - Page handle for dynamic routes
|
|
1829
1837
|
* @param params.locale - Locale override
|
|
1830
1838
|
* @param params.projectId - Route-level project ID override (for multi-project)
|
|
@@ -1837,7 +1845,7 @@ var WeaverseClient = class {
|
|
|
1837
1845
|
* const data = await weaverse.loadPage()
|
|
1838
1846
|
*
|
|
1839
1847
|
* // With page type
|
|
1840
|
-
* const data = await weaverse.loadPage({ type: '
|
|
1848
|
+
* const data = await weaverse.loadPage({ type: 'INDEX' })
|
|
1841
1849
|
*
|
|
1842
1850
|
* // Route-level project override
|
|
1843
1851
|
* const data = await weaverse.loadPage({
|
|
@@ -2053,6 +2061,6 @@ var IMAGES_PLACEHOLDERS = {
|
|
|
2053
2061
|
product_18: "https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg"
|
|
2054
2062
|
};
|
|
2055
2063
|
|
|
2056
|
-
export { IMAGES_PLACEHOLDERS, ThemeTextProvider, ThemeTextStore, WeaverseClient, WeaverseError, WeaverseHydrogen, WeaverseHydrogenItem, WeaverseHydrogenRoot, createWeaverseDataContext, defaultComponents, formatMetaDescriptors, generateDataFromSchema, getNestedKey, getPreviewData, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, getWeaverseSeoMeta, hasError, hasWeaverseStudio, interpolate, isFetchProjectPayload, isProjectIdFunction, isThemeSettingsResponse, isValidHydrogenSchema, isWithCacheFetchResponse, registerComponent, useThemeSettings, useThemeText, useWeaverseDataContext, withWeaverse };
|
|
2064
|
+
export { IMAGES_PLACEHOLDERS, ThemeTextProvider, ThemeTextStore, TranslationProvider, TranslationStore, WeaverseClient, WeaverseError, WeaverseHydrogen, WeaverseHydrogenItem, WeaverseHydrogenRoot, createWeaverseDataContext, defaultComponents, formatMetaDescriptors, generateDataFromSchema, getNestedKey, getPreviewData, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, getWeaverseSeoMeta, hasError, hasWeaverseStudio, interpolate, isFetchProjectPayload, isProjectIdFunction, isThemeSettingsResponse, isValidHydrogenSchema, isWithCacheFetchResponse, registerComponent, useThemeSettings, useThemeText, useTranslation, useWeaverseDataContext, withWeaverse };
|
|
2057
2065
|
//# sourceMappingURL=index.mjs.map
|
|
2058
2066
|
//# sourceMappingURL=index.mjs.map
|