@weaverse/hydrogen 5.12.0 → 5.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +33 -3
- package/dist/index.d.ts +33 -3
- package/dist/index.js +81 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +81 -5
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.mjs
CHANGED
|
@@ -58,12 +58,39 @@ function interpolate(template, variables) {
|
|
|
58
58
|
}
|
|
59
59
|
var ThemeTextContext = 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 = 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 = 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__ */ 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 } = useLocation();
|
|
460
528
|
let navigate = 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
|
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 = useRef(null);
|
|
836
|
+
if (!themeTextStoreRef.current) {
|
|
837
|
+
themeTextStoreRef.current = new ThemeTextStore();
|
|
838
|
+
}
|
|
764
839
|
return /* @__PURE__ */ jsx(ThemeSettingsStoreContext.Provider, { value: themeSettingsStore, children: /* @__PURE__ */ 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__ */ jsx(Component, { ...props })
|
|
771
847
|
}
|
|
772
848
|
) });
|
|
@@ -1558,6 +1634,6 @@ var IMAGES_PLACEHOLDERS = {
|
|
|
1558
1634
|
product_18: "https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg"
|
|
1559
1635
|
};
|
|
1560
1636
|
|
|
1561
|
-
export { IMAGES_PLACEHOLDERS, ThemeTextProvider, WeaverseClient, WeaverseError, WeaverseHydrogen, WeaverseHydrogenItem, WeaverseHydrogenRoot, createWeaverseDataContext, defaultComponents, generateDataFromSchema, getNestedKey, getPreviewData, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, hasError, hasWeaverseStudio, interpolate, isFetchProjectPayload, isProjectIdFunction, isThemeSettingsResponse, isValidHydrogenSchema, isWithCacheFetchResponse, registerComponent, useThemeSettings, useThemeText, useWeaverseDataContext, withWeaverse };
|
|
1637
|
+
export { IMAGES_PLACEHOLDERS, ThemeTextProvider, ThemeTextStore, WeaverseClient, WeaverseError, WeaverseHydrogen, WeaverseHydrogenItem, WeaverseHydrogenRoot, createWeaverseDataContext, defaultComponents, generateDataFromSchema, getNestedKey, getPreviewData, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, hasError, hasWeaverseStudio, interpolate, isFetchProjectPayload, isProjectIdFunction, isThemeSettingsResponse, isValidHydrogenSchema, isWithCacheFetchResponse, registerComponent, useThemeSettings, useThemeText, useWeaverseDataContext, withWeaverse };
|
|
1562
1638
|
//# sourceMappingURL=index.mjs.map
|
|
1563
1639
|
//# sourceMappingURL=index.mjs.map
|