@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.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 = merchantOverrides ? getNestedKey(merchantOverrides, key) : void 0;
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 { t };
81
- }, [staticContent, merchantOverrides, externalT]);
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
- themeSettingsStore
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