medusa-storefront-data 2.5.4 → 2.5.7

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.
@@ -164,32 +164,39 @@ import { heroHomepageSectionField, bannerSlide } from "medusa-ui-home-config/sec
164
164
 
165
165
  Compose `options.configs` from `homepageSectionFields` or individual `*HomepageSectionField` exports. Merge API responses with `homepageConfigFromDynamicResponse` from `medusa-storefront-data/dynamic-config`.
166
166
 
167
- Help page FAQs use **`helpFaqHomepageSectionField`** from `medusa-ui-home-config/sections/helpFaq` (also included in `homepageSectionFields`). Store in `homepage-config.sections.helpFaq`:
167
+ Help page FAQs use **`helpFaqHomepageSectionField`** from `medusa-ui-home-config/sections/helpFaq` (also included in `homepageSectionFields`).
168
+
169
+ **Split dynamic-config keys** (Medusa plugin): store FAQs under `faqs.helpFaq`; homepage sections under `homepage-sections.sections`. `homepageConfigFromDynamicResponse` assembles these automatically:
168
170
 
169
171
  ```json
170
172
  {
171
- "sections": {
173
+ "site-branding": { "logo": "https://…", "description": "" },
174
+ "contact": { "phone": "", "email": "", "whatsapp": "", "address": "" },
175
+ "faqs": {
172
176
  "helpFaq": {
173
177
  "eyebrow": "Knowledge Base",
174
178
  "title": "Frequently Asked",
175
179
  "titleHighlight": "Questions",
176
- "subtitle": "Browse FAQs by topic.",
180
+ "subtitle": "Browse through our most common questions…",
177
181
  "categories": [
178
182
  {
179
- "category": "Order & Delivery",
180
- "icon": "🚚",
181
- "color": "from-blue-500 to-cyan-400",
182
- "items": [
183
- { "question": "When will I receive my order?", "answer": "…" }
184
- ]
183
+ "category": {
184
+ "category": "Order & Delivery",
185
+ "icon": "🚚",
186
+ "color": "from-blue-500 to-cyan-400",
187
+ "items": [
188
+ { "faq": { "question": "When will I receive my order?", "answer": "…" } }
189
+ ]
190
+ }
185
191
  }
186
192
  ]
187
193
  }
188
- }
194
+ },
195
+ "homepage-sections": { "sections": { "newArrivals": { "title": "New Arrivals" } } }
189
196
  }
190
197
  ```
191
198
 
192
- Legacy flat `faq-array` entries are still supported and are grouped by `faq-category`.
199
+ Legacy single `homepage-config` with `sections.helpFaq` (flat `items` or nested `category` / `faq` wrappers) still works. Legacy flat `faq-array` entries are grouped by `faq-category`.
193
200
 
194
201
  Storefront UI still imports from `medusa-ui-home/sections/<id>`.
195
202
 
@@ -198,8 +205,8 @@ Storefront UI still imports from `medusa-ui-home/sections/<id>`.
198
205
  | Export | Use |
199
206
  |--------|-----|
200
207
  | `loadHeroSectionData`, `loadNewArrivalsSectionData`, … | **One section** catalog + copy |
201
- | `loadHelpFaqSectionData` | Help page FAQ (`sections.helpFaq`) |
202
- | `getHelpFaqFromPageInput(pageInput)` | FAQ categories + section header copy |
208
+ | `getHelpFaqFromPageInput(pageInput)` | Help page FAQ from dynamic config (categories + section copy) — pass as `helpFaq` to `HelpTemplate` |
209
+ | `loadHelpFaqSectionData` | Thin wrapper around `getHelpFaqFromPageInput` (optional; prefer direct call) |
203
210
  | `getDynamicConfig()` | **Main project only** |
204
211
  | `get*FromPageInput(pageInput)` | Read CMS copy/banners without fetching |
205
212
  | `homepageConfigFromDynamicResponse(raw)` | Merge API → `pageInput` |
@@ -1,7 +1,7 @@
1
1
  import "server-only";
2
2
  import { type DefaultHomeSectionId } from "./homepage-section-defaults";
3
3
  import type { DynamicConfigResponse, HomepageConfig } from "./homepage-config.types";
4
- export { DEFAULT_PAGE_INPUT, mergePageInputWithDefaults, resolvePageInput, homepageConfigFromDynamicResponse, type StorefrontPageInput, } from "./page-input";
4
+ export { DEFAULT_PAGE_INPUT, mergePageInputWithDefaults, resolvePageInput, homepageConfigFromDynamicResponse, simplifiedHomepageConfigFromDynamicResponse, type StorefrontPageInput, } from "./page-input";
5
5
  export declare const getDynamicConfig: () => Promise<DynamicConfigResponse | null>;
6
6
  export declare function getLogoFromPageInput(pageInput?: HomepageConfig | null): string | null;
7
7
  export type HomepageBanner = {
@@ -110,6 +110,16 @@ export type HelpFaqConfig = {
110
110
  export declare function getHelpFaqFromPageInput(pageInput?: HomepageConfig | null): HelpFaqConfig;
111
111
  /** FAQ categories for the help template (null when empty). */
112
112
  export declare function getFaqsFromPageInput(pageInput?: HomepageConfig | null): HelpFaqCategory[] | null;
113
+ export type PromoAnnouncementsConfig = {
114
+ messages: string[];
115
+ icon?: string;
116
+ iconAlt?: string;
117
+ ariaLabel: string;
118
+ separator?: string;
119
+ };
120
+ /** Promo ticker messages + UI copy (icon, aria label, separator). */
121
+ export declare function getPromoAnnouncementsFromPageInput(pageInput?: HomepageConfig | null): PromoAnnouncementsConfig;
122
+ /** @deprecated Use {@link getPromoAnnouncementsFromPageInput}. */
113
123
  export declare function getAnnouncementMessagesFromPageInput(pageInput?: HomepageConfig | null): string[];
114
124
  export type AboutBrandConfig = {
115
125
  eyebrow: string;
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-config.d.ts","sourceRoot":"","sources":["../../../src/server/dynamic-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dynamic-config.d.ts","sourceRoot":"","sources":["../../../src/server/dynamic-config.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { getAuthHeaders } from "../cookies";
4
4
  import { DEFAULT_HOMEPAGE_SECTIONS, HOME_SECTION_COPY_ID_LIST, } from "./homepage-section-defaults";
5
5
  import { mergeSectionBlock } from "./config-merge";
6
6
  import { resolvePageInput } from "./page-input";
7
- export { DEFAULT_PAGE_INPUT, mergePageInputWithDefaults, resolvePageInput, homepageConfigFromDynamicResponse, } from "./page-input";
7
+ export { DEFAULT_PAGE_INPUT, mergePageInputWithDefaults, resolvePageInput, homepageConfigFromDynamicResponse, simplifiedHomepageConfigFromDynamicResponse, } from "./page-input";
8
8
  export const getDynamicConfig = cache(async () => {
9
9
  try {
10
10
  const publishableKey = process.env.NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY;
@@ -465,9 +465,46 @@ export function getFaqsFromPageInput(pageInput) {
465
465
  const { categories } = getHelpFaqFromPageInput(pageInput);
466
466
  return categories.length > 0 ? categories : null;
467
467
  }
468
- export function getAnnouncementMessagesFromPageInput(pageInput) {
468
+ function parsePromoAnnouncementsUi(...sources) {
469
+ const pick = (key, alt) => {
470
+ for (const src of sources) {
471
+ if (!src)
472
+ continue;
473
+ const value = normalizeCmsText(src[key] ?? (alt ? src[alt] : undefined));
474
+ if (value)
475
+ return value;
476
+ }
477
+ return undefined;
478
+ };
479
+ return {
480
+ icon: pick("icon", "ticker-icon"),
481
+ iconAlt: pick("iconAlt", "icon-alt"),
482
+ ariaLabel: pick("ariaLabel", "aria-label") ?? "Store announcements",
483
+ separator: pick("separator", "message-separator"),
484
+ };
485
+ }
486
+ /** Promo ticker messages + UI copy (icon, aria label, separator). */
487
+ export function getPromoAnnouncementsFromPageInput(pageInput) {
488
+ const homepageConfig = resolvePageInput(pageInput);
469
489
  const block = getMergedSectionBlock("promoAnnouncements", pageInput);
470
- return parseAnnouncementMessages(block);
490
+ const promoUi = homepageConfig.promoUi ??
491
+ homepageConfig["promo-ui"];
492
+ let messages = parseAnnouncementMessages(block);
493
+ if (messages.length === 0) {
494
+ const legacy = homepageConfig["announcement-messages"] ??
495
+ homepageConfig["announcement-bar"];
496
+ if (Array.isArray(legacy)) {
497
+ messages = legacy
498
+ .map((m) => (typeof m === "string" ? m.trim() : ""))
499
+ .filter(Boolean);
500
+ }
501
+ }
502
+ const ui = parsePromoAnnouncementsUi(promoUi, block);
503
+ return { messages, ...ui };
504
+ }
505
+ /** @deprecated Use {@link getPromoAnnouncementsFromPageInput}. */
506
+ export function getAnnouncementMessagesFromPageInput(pageInput) {
507
+ return getPromoAnnouncementsFromPageInput(pageInput).messages;
471
508
  }
472
509
  export function getAboutBrandFromPageInput(pageInput) {
473
510
  const homepageConfig = resolvePageInput(pageInput);
@@ -498,12 +535,9 @@ export function getAboutBrandFromPageInput(pageInput) {
498
535
  stats,
499
536
  };
500
537
  }
501
- export function getBrandPillarsFromPageInput(pageInput) {
502
- const block = getMergedSectionBlock("brandPillars", pageInput);
503
- const copy = parseSectionCopy(block);
504
- const sectionTitle = copy.title ?? copy.name ?? "";
538
+ function parseBrandPillarsFromBlock(block) {
505
539
  const raw = block.pillars ?? block["brand-pillars"] ?? [];
506
- const pillars = (Array.isArray(raw) ? raw : [])
540
+ return (Array.isArray(raw) ? raw : [])
507
541
  .map((item) => {
508
542
  if (!item || typeof item !== "object")
509
543
  return null;
@@ -512,9 +546,21 @@ export function getBrandPillarsFromPageInput(pageInput) {
512
546
  const title = String(p.title ?? p.name ?? "").trim();
513
547
  const description = String(p.description ?? p.text ?? "").trim();
514
548
  const image = (p.image ?? p.icon);
515
- return title && description ? { title, description, image } : null;
549
+ const href = (p.href ?? p.link ?? p.url);
550
+ return title && description
551
+ ? { title, description, image, href: href ? String(href) : undefined }
552
+ : null;
516
553
  })
517
554
  .filter(Boolean);
555
+ }
556
+ export function getBrandPillarsFromPageInput(pageInput) {
557
+ const block = getMergedSectionBlock("brandPillars", pageInput);
558
+ const copy = parseSectionCopy(block);
559
+ const sectionTitle = copy.title ?? copy.name ?? "";
560
+ let pillars = parseBrandPillarsFromBlock(block);
561
+ if (pillars.length === 0) {
562
+ pillars = parseBrandPillarsFromBlock(DEFAULT_HOMEPAGE_SECTIONS.brandPillars);
563
+ }
518
564
  return { sectionTitle, pillars };
519
565
  }
520
566
  export function getBlogPostsFromPageInput(pageInput) {
@@ -2,6 +2,10 @@ import "server-only";
2
2
  import type { SectionLoaderOptions } from "./shared";
3
3
  export type PromoAnnouncementsSectionData = {
4
4
  messages: string[];
5
+ icon?: string;
6
+ iconAlt?: string;
7
+ ariaLabel: string;
8
+ separator?: string;
5
9
  };
6
10
  export declare function loadPromoAnnouncementsSectionData(_countryCode: string, options?: SectionLoaderOptions): Promise<PromoAnnouncementsSectionData>;
7
11
  //# sourceMappingURL=promo-announcements.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"promo-announcements.d.ts","sourceRoot":"","sources":["../../../../src/server/home-sections/promo-announcements.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AAGpB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAEpD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,CAAA;AAED,wBAAsB,iCAAiC,CACrD,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,6BAA6B,CAAC,CAIxC"}
1
+ {"version":3,"file":"promo-announcements.d.ts","sourceRoot":"","sources":["../../../../src/server/home-sections/promo-announcements.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AAGpB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAEpD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAsB,iCAAiC,CACrD,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,6BAA6B,CAAC,CAExC"}
@@ -1,7 +1,5 @@
1
1
  import "server-only";
2
- import { getAnnouncementMessagesFromPageInput } from "../dynamic-config";
2
+ import { getPromoAnnouncementsFromPageInput } from "../dynamic-config";
3
3
  export async function loadPromoAnnouncementsSectionData(_countryCode, options) {
4
- return {
5
- messages: getAnnouncementMessagesFromPageInput(options?.pageInput ?? null),
6
- };
4
+ return getPromoAnnouncementsFromPageInput(options?.pageInput ?? null);
7
5
  }
@@ -1,7 +1,10 @@
1
1
  import type { HttpTypes } from "@medusajs/types";
2
2
  import type { InstagramPostsData, AboutBrandConfig, BrandPillarConfig, BlogPostConfig, HomeSectionsCopy, TrustFeaturesConfig, HomepageBanner } from "./dynamic-config";
3
3
  import type { ShoppableLook } from "./shoppable-looks";
4
- /** Shape returned by the legacy `loadHomePageData` loader (removed — use per-section loaders). */
4
+ /**
5
+ * Shared homepage data shape used by `medusa-storefront-compose`.
6
+ * This is a type-only module (no runtime loaders).
7
+ */
5
8
  export type HomePageData = {
6
9
  region: HttpTypes.StoreRegion | null;
7
10
  collections: Array<Record<string, unknown>>;
@@ -1 +1 @@
1
- {"version":3,"file":"home.d.ts","sourceRoot":"","sources":["../../../src/server/home.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACf,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEtD,kGAAkG;AAClG,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAA;IACpC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAC3C,UAAU,EAAE,SAAS,CAAC,oBAAoB,EAAE,CAAA;IAC5C,WAAW,EAAE,SAAS,CAAC,YAAY,EAAE,CAAA;IACrC,WAAW,EAAE,SAAS,CAAC,YAAY,EAAE,CAAA;IACrC,YAAY,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,OAAO,EAAE,OAAO,EAAE,CAAA;IAClB,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAA;IAC3D,oBAAoB,EAAE,MAAM,EAAE,CAAA;IAC9B,cAAc,EAAE;QACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;QACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;QACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;QACpB,MAAM,EAAE,OAAO,CAAA;QACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;QACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KACvB,CAAA;IACD,cAAc,EAAE,SAAS,CAAC,YAAY,EAAE,CAAA;IACxC,gBAAgB,EAAE,SAAS,CAAC,YAAY,GAAG,IAAI,CAAA;IAC/C,WAAW,EAAE,SAAS,CAAC,YAAY,EAAE,CAAA;IACrC,UAAU,EAAE,SAAS,CAAC,YAAY,EAAE,CAAA;IACpC,YAAY,EAAE,aAAa,EAAE,CAAA;IAC7B,aAAa,EAAE,SAAS,CAAC,YAAY,EAAE,CAAA;IACvC,UAAU,EAAE,gBAAgB,CAAA;IAC5B,YAAY,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,iBAAiB,EAAE,CAAA;KAAE,CAAA;IACpE,SAAS,EAAE,cAAc,EAAE,CAAA;IAC3B,cAAc,EAAE,kBAAkB,CAAA;IAClC,YAAY,EAAE,gBAAgB,CAAA;IAC9B,aAAa,EAAE,mBAAmB,CAAA;IAClC,WAAW,EAAE,cAAc,EAAE,GAAG,IAAI,CAAA;IACpC,UAAU,EAAE,cAAc,EAAE,GAAG,IAAI,CAAA;IACnC,mBAAmB,EAAE;QACnB,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAChD,CAAA;CACF,CAAA"}
1
+ {"version":3,"file":"home.d.ts","sourceRoot":"","sources":["../../../src/server/home.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACf,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEtD;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAA;IACpC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAC3C,UAAU,EAAE,SAAS,CAAC,oBAAoB,EAAE,CAAA;IAC5C,WAAW,EAAE,SAAS,CAAC,YAAY,EAAE,CAAA;IACrC,WAAW,EAAE,SAAS,CAAC,YAAY,EAAE,CAAA;IACrC,YAAY,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5B,OAAO,EAAE,OAAO,EAAE,CAAA;IAClB,YAAY,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAA;IAC3D,oBAAoB,EAAE,MAAM,EAAE,CAAA;IAC9B,cAAc,EAAE;QACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;QACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;QACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;QACpB,MAAM,EAAE,OAAO,CAAA;QACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;QACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;KACvB,CAAA;IACD,cAAc,EAAE,SAAS,CAAC,YAAY,EAAE,CAAA;IACxC,gBAAgB,EAAE,SAAS,CAAC,YAAY,GAAG,IAAI,CAAA;IAC/C,WAAW,EAAE,SAAS,CAAC,YAAY,EAAE,CAAA;IACrC,UAAU,EAAE,SAAS,CAAC,YAAY,EAAE,CAAA;IACpC,YAAY,EAAE,aAAa,EAAE,CAAA;IAC7B,aAAa,EAAE,SAAS,CAAC,YAAY,EAAE,CAAA;IACvC,UAAU,EAAE,gBAAgB,CAAA;IAC5B,YAAY,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,iBAAiB,EAAE,CAAA;KAAE,CAAA;IACpE,SAAS,EAAE,cAAc,EAAE,CAAA;IAC3B,cAAc,EAAE,kBAAkB,CAAA;IAClC,YAAY,EAAE,gBAAgB,CAAA;IAC9B,aAAa,EAAE,mBAAmB,CAAA;IAClC,WAAW,EAAE,cAAc,EAAE,GAAG,IAAI,CAAA;IACpC,UAAU,EAAE,cAAc,EAAE,GAAG,IAAI,CAAA;IACnC,mBAAmB,EAAE;QACnB,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAChD,CAAA;CACF,CAAA"}
@@ -24,6 +24,17 @@ export type HomepagePromoAnnouncementsSection = HomepageSectionCopyFields & {
24
24
  text?: string;
25
25
  }>;
26
26
  "announcement-messages"?: string[];
27
+ /** Optional icon shown before the ticker. */
28
+ icon?: string;
29
+ iconAlt?: string;
30
+ ariaLabel?: string;
31
+ separator?: string;
32
+ };
33
+ export type HomepagePromoUiConfig = {
34
+ icon?: string;
35
+ iconAlt?: string;
36
+ ariaLabel?: string;
37
+ separator?: string;
27
38
  };
28
39
  export type HomepagePromoCountdownSection = HomepageSectionCopyFields & {
29
40
  code?: string;
@@ -245,6 +256,73 @@ export type HomepagePromoBarConfig = {
245
256
  "promo-value"?: string;
246
257
  "promo-active"?: boolean;
247
258
  };
259
+ export type HomepageHeaderNavStaticItem = {
260
+ type?: "static";
261
+ label?: string;
262
+ href?: string;
263
+ icon?: string;
264
+ iconSrc?: string;
265
+ };
266
+ export type HomepageHeaderNavCategoriesItem = {
267
+ type: "categories";
268
+ /** Limit how many categories to include (after filtering). */
269
+ limit?: number;
270
+ /** Show only these category handles (in this exact order). */
271
+ handles?: string[];
272
+ /** Only include top-level categories (no parent). Default: true */
273
+ topLevelOnly?: boolean;
274
+ /** Optional prefix label like "Shop by category" (not used in desktop links). */
275
+ label?: string;
276
+ };
277
+ export type HomepageHeaderNavItem = HomepageHeaderNavStaticItem | HomepageHeaderNavCategoriesItem;
278
+ export type HomepageHeaderNavConfig = {
279
+ items?: HomepageHeaderNavItem[];
280
+ };
281
+ export type HomepageFooterNavLink = {
282
+ label?: string;
283
+ href?: string;
284
+ };
285
+ export type HomepageFooterNavColumn = {
286
+ title?: string;
287
+ links?: HomepageFooterNavLink[];
288
+ };
289
+ export type HomepageFooterNavConfig = {
290
+ columns?: HomepageFooterNavColumn[];
291
+ };
292
+ export type HomepageFooterUiConfig = {
293
+ shopColumnTitle?: string;
294
+ contactTitle?: string;
295
+ newsletterBlurb?: string;
296
+ newsletterPlaceholder?: string;
297
+ newsletterSubmitLabel?: string;
298
+ newsletterInvalidEmail?: string;
299
+ newsletterErrorMessage?: string;
300
+ /** Supports `{siteName}` token. */
301
+ copyrightText?: string;
302
+ icons?: {
303
+ phone?: string;
304
+ email?: string;
305
+ address?: string;
306
+ };
307
+ social?: {
308
+ facebook?: string;
309
+ linkedin?: string;
310
+ instagram?: string;
311
+ youtube?: string;
312
+ };
313
+ };
314
+ export type HomepageHeaderUiConfig = {
315
+ icons?: {
316
+ cart?: string;
317
+ account?: string;
318
+ search?: string;
319
+ };
320
+ search?: {
321
+ placeholder?: string;
322
+ title?: string;
323
+ emptyStateText?: string;
324
+ };
325
+ };
248
326
  export type HomepageFaqEntry = {
249
327
  "faq-category"?: string;
250
328
  "faq-question"?: string;
@@ -258,6 +336,24 @@ export type HomepageConfig = {
258
336
  logo?: string;
259
337
  "website-description"?: string;
260
338
  website_description?: string;
339
+ /**
340
+ * Header navigation (desktop + mobile).
341
+ * Use `type: "static"` for hardcoded links, or `type: "categories"` to auto-populate from product categories.
342
+ */
343
+ headerNav?: HomepageHeaderNavConfig;
344
+ "header-nav"?: HomepageHeaderNavConfig;
345
+ /** Footer navigation columns + links. */
346
+ footerNav?: HomepageFooterNavConfig;
347
+ "footer-nav"?: HomepageFooterNavConfig;
348
+ /** Footer static copy + icon overrides. */
349
+ footerUi?: HomepageFooterUiConfig;
350
+ "footer-ui"?: HomepageFooterUiConfig;
351
+ /** Header icons + search copy. */
352
+ headerUi?: HomepageHeaderUiConfig;
353
+ "header-ui"?: HomepageHeaderUiConfig;
354
+ /** Promo ticker icon + accessibility copy (merged with `sections.promoAnnouncements`). */
355
+ promoUi?: HomepagePromoUiConfig;
356
+ "promo-ui"?: HomepagePromoUiConfig;
261
357
  /** Hero carousel — used by `hero` section (not `sections.hero`). */
262
358
  "homepage-banner-array"?: HomepageBannerEntry[];
263
359
  "app-banner-array"?: HomepageAppBannerEntry[];
@@ -1 +1 @@
1
- {"version":3,"file":"homepage-config.types.d.ts","sourceRoot":"","sources":["../../../src/server/homepage-config.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"homepage-config.types.d.ts","sourceRoot":"","sources":["../../../src/server/homepage-config.types.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,6 @@ export * from "./customer-registration";
5
5
  export * from "./customer";
6
6
  export * from "./dynamic-config";
7
7
  export * from "./page-input";
8
- export * from "./resolve-home-segment-data";
9
8
  export * from "./fulfillment";
10
9
  export * from "./guest";
11
10
  export * from "./locale-actions";
@@ -22,4 +21,5 @@ export * from "./swaps";
22
21
  export * from "./variants";
23
22
  export * from "./wishlist";
24
23
  export * from "./home";
24
+ export * from "./shoppable-looks";
25
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,yBAAyB,CAAA;AACvC,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,6BAA6B,CAAA;AAC3C,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,kBAAkB,CAAA;AAChC,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,mBAAmB,CAAA;AACjC,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,QAAQ,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,yBAAyB,CAAA;AACvC,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,SAAS,CAAA;AACvB,cAAc,kBAAkB,CAAA;AAChC,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,mBAAmB,CAAA;AACjC,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,QAAQ,CAAA;AACtB,cAAc,mBAAmB,CAAA"}
@@ -5,7 +5,6 @@ export * from "./customer-registration";
5
5
  export * from "./customer";
6
6
  export * from "./dynamic-config";
7
7
  export * from "./page-input";
8
- export * from "./resolve-home-segment-data";
9
8
  export * from "./fulfillment";
10
9
  export * from "./guest";
11
10
  export * from "./locale-actions";
@@ -22,3 +21,4 @@ export * from "./swaps";
22
21
  export * from "./variants";
23
22
  export * from "./wishlist";
24
23
  export * from "./home";
24
+ export * from "./shoppable-looks";
@@ -1 +1 @@
1
- {"version":3,"file":"normalize-homepage-config.d.ts","sourceRoot":"","sources":["../../../src/server/normalize-homepage-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AA+O7D;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAmCtE"}
1
+ {"version":3,"file":"normalize-homepage-config.d.ts","sourceRoot":"","sources":["../../../src/server/normalize-homepage-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AA+O7D;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAyEtE"}
@@ -236,6 +236,34 @@ export function normalizeHomepageConfig(input) {
236
236
  raw["website-description"],
237
237
  sections: sections,
238
238
  };
239
+ const headerNav = asObject(site?.headerNav) ?? asObject(site?.["header-nav"]) ?? asObject(site?.nav);
240
+ if (headerNav) {
241
+ legacy.headerNav = headerNav;
242
+ }
243
+ const footerNav = asObject(site?.footerNav) ??
244
+ asObject(site?.["footer-nav"]) ??
245
+ asObject(site?.footer);
246
+ if (footerNav) {
247
+ legacy.footerNav = footerNav;
248
+ }
249
+ const footerUi = asObject(site?.footerUi) ??
250
+ asObject(site?.["footer-ui"]) ??
251
+ asObject(site?.footer);
252
+ if (footerUi) {
253
+ legacy.footerUi = footerUi;
254
+ }
255
+ const headerUi = asObject(site?.headerUi) ??
256
+ asObject(site?.["header-ui"]) ??
257
+ asObject(site?.header);
258
+ if (headerUi) {
259
+ legacy.headerUi = headerUi;
260
+ }
261
+ const promoUi = asObject(site?.promoUi) ??
262
+ asObject(site?.["promo-ui"]) ??
263
+ asObject(site?.promo);
264
+ if (promoUi) {
265
+ legacy.promoUi = promoUi;
266
+ }
239
267
  if (desktop.length)
240
268
  legacy["homepage-banner-array"] = desktop;
241
269
  if (mobile.length)
@@ -1,5 +1,5 @@
1
1
  import "server-only";
2
- import type { HomepageConfig } from "./homepage-config.types";
2
+ import type { DynamicConfigResponse, HomepageConfig } from "./homepage-config.types";
3
3
  /** Full `homepage-config` blob passed from the main project into pages and layout. */
4
4
  export type StorefrontPageInput = HomepageConfig;
5
5
  export declare const DEFAULT_PAGE_INPUT: StorefrontPageInput;
@@ -10,10 +10,14 @@ export declare const DEFAULT_PAGE_INPUT: StorefrontPageInput;
10
10
  export declare function mergePageInputWithDefaults(override?: HomepageConfig | null): StorefrontPageInput;
11
11
  /** Resolve page input: explicit override, or package defaults. */
12
12
  export declare function resolvePageInput(pageInput?: HomepageConfig | null): StorefrontPageInput;
13
+ /**
14
+ * Medusa plugin split keys (`site-branding`, `contact`, `faqs`, `homepage-sections`)
15
+ * → simplified `{ site, sections }` for {@link normalizeHomepageConfig}.
16
+ */
17
+ export declare function simplifiedHomepageConfigFromDynamicResponse(response: DynamicConfigResponse | null | undefined): HomepageConfig | null;
13
18
  /**
14
19
  * Build `homepage-config` from Medusa `GET /store/dynamic-config` (main project only).
20
+ * Supports legacy `homepage-config` or split plugin keys.
15
21
  */
16
- export declare function homepageConfigFromDynamicResponse(response: {
17
- "homepage-config"?: HomepageConfig | null;
18
- } | null | undefined): StorefrontPageInput;
22
+ export declare function homepageConfigFromDynamicResponse(response: DynamicConfigResponse | null | undefined): StorefrontPageInput;
19
23
  //# sourceMappingURL=page-input.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"page-input.d.ts","sourceRoot":"","sources":["../../../src/server/page-input.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AAGpB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAI7D,sFAAsF;AACtF,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAA;AAEhD,eAAO,MAAM,kBAAkB,EACM,mBAAmB,CAAA;AAExD;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,CAAC,EAAE,cAAc,GAAG,IAAI,GAC/B,mBAAmB,CA6BrB;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAC9B,SAAS,CAAC,EAAE,cAAc,GAAG,IAAI,GAChC,mBAAmB,CAErB;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE;IAAE,iBAAiB,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GACzE,mBAAmB,CAGrB"}
1
+ {"version":3,"file":"page-input.d.ts","sourceRoot":"","sources":["../../../src/server/page-input.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AAGpB,OAAO,KAAK,EACV,qBAAqB,EACrB,cAAc,EACf,MAAM,yBAAyB,CAAA;AAUhC,sFAAsF;AACtF,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAA;AAEhD,eAAO,MAAM,kBAAkB,EACM,mBAAmB,CAAA;AAExD;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,CAAC,EAAE,cAAc,GAAG,IAAI,GAC/B,mBAAmB,CA6BrB;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAC9B,SAAS,CAAC,EAAE,cAAc,GAAG,IAAI,GAChC,mBAAmB,CAErB;AAED;;;GAGG;AACH,wBAAgB,2CAA2C,CACzD,QAAQ,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GACjD,cAAc,GAAG,IAAI,CAkCvB;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GACjD,mBAAmB,CAMrB"}
@@ -2,6 +2,9 @@ import "server-only";
2
2
  import defaultPageInputJson from "../../segment-data/default-page-input.json";
3
3
  import { mergeSectionBlock } from "./config-merge";
4
4
  import { normalizeHomepageConfig } from "./normalize-homepage-config";
5
+ function asObject(v) {
6
+ return v && typeof v === "object" && !Array.isArray(v) ? v : null;
7
+ }
5
8
  export const DEFAULT_PAGE_INPUT = defaultPageInputJson;
6
9
  /**
7
10
  * Merge CMS / main-project overrides onto package JSON defaults.
@@ -33,10 +36,54 @@ export function mergePageInputWithDefaults(override) {
33
36
  export function resolvePageInput(pageInput) {
34
37
  return mergePageInputWithDefaults(pageInput ?? null);
35
38
  }
39
+ /**
40
+ * Medusa plugin split keys (`site-branding`, `contact`, `faqs`, `homepage-sections`)
41
+ * → simplified `{ site, sections }` for {@link normalizeHomepageConfig}.
42
+ */
43
+ export function simplifiedHomepageConfigFromDynamicResponse(response) {
44
+ if (!response || typeof response !== "object")
45
+ return null;
46
+ const siteBranding = asObject(response["site-branding"]);
47
+ const contact = asObject(response.contact);
48
+ const faqsRoot = asObject(response.faqs);
49
+ const homepageSections = asObject(response["homepage-sections"]);
50
+ const sectionsFromCms = asObject(homepageSections?.sections);
51
+ const hasSplitKeys = siteBranding || contact || faqsRoot || sectionsFromCms;
52
+ if (!hasSplitKeys)
53
+ return null;
54
+ const site = {};
55
+ if (siteBranding) {
56
+ if (siteBranding.logo != null)
57
+ site.logo = siteBranding.logo;
58
+ if (siteBranding.brandName != null)
59
+ site.brandName = siteBranding.brandName;
60
+ if (siteBranding.description != null) {
61
+ site.description = siteBranding.description;
62
+ }
63
+ }
64
+ if (contact)
65
+ site.contact = contact;
66
+ const sections = sectionsFromCms ? { ...sectionsFromCms } : {};
67
+ const helpFaq = asObject(faqsRoot?.helpFaq);
68
+ if (helpFaq)
69
+ sections.helpFaq = helpFaq;
70
+ const simplified = {};
71
+ if (Object.keys(site).length)
72
+ simplified.site = site;
73
+ if (Object.keys(sections).length)
74
+ simplified.sections = sections;
75
+ return Object.keys(simplified).length
76
+ ? simplified
77
+ : null;
78
+ }
36
79
  /**
37
80
  * Build `homepage-config` from Medusa `GET /store/dynamic-config` (main project only).
81
+ * Supports legacy `homepage-config` or split plugin keys.
38
82
  */
39
83
  export function homepageConfigFromDynamicResponse(response) {
40
- const normalized = normalizeHomepageConfig(response?.["homepage-config"] ?? null);
84
+ const legacy = response?.["homepage-config"] ?? null;
85
+ const fromSplit = simplifiedHomepageConfigFromDynamicResponse(response);
86
+ const raw = fromSplit ?? legacy;
87
+ const normalized = normalizeHomepageConfig(raw);
41
88
  return mergePageInputWithDefaults(normalized);
42
89
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "medusa-storefront-data",
3
- "version": "2.5.4",
3
+ "version": "2.5.7",
4
4
  "type": "module",
5
5
  "description": "Medusa storefront server data layer extracted from Next.js storefront",
6
6
  "license": "MIT",
@@ -172,6 +172,11 @@
172
172
  "types": "./dist/server/help-sections/help-faq.d.ts",
173
173
  "import": "./src/server/help-sections/help-faq.ts",
174
174
  "default": "./src/server/help-sections/help-faq.ts"
175
+ },
176
+ "./storefront-cms": {
177
+ "types": "./src/server/storefront-cms.ts",
178
+ "import": "./src/server/storefront-cms.ts",
179
+ "default": "./src/server/storefront-cms.ts"
175
180
  }
176
181
  },
177
182
  "main": "./dist/server/index.js",
@@ -16,6 +16,7 @@ export {
16
16
  mergePageInputWithDefaults,
17
17
  resolvePageInput,
18
18
  homepageConfigFromDynamicResponse,
19
+ simplifiedHomepageConfigFromDynamicResponse,
19
20
  type StorefrontPageInput,
20
21
  } from "./page-input"
21
22
 
@@ -674,11 +675,64 @@ export function getFaqsFromPageInput(
674
675
  }
675
676
 
676
677
 
678
+ export type PromoAnnouncementsConfig = {
679
+ messages: string[]
680
+ icon?: string
681
+ iconAlt?: string
682
+ ariaLabel: string
683
+ separator?: string
684
+ }
685
+
686
+ function parsePromoAnnouncementsUi(
687
+ ...sources: Array<Record<string, unknown> | null | undefined>
688
+ ): Pick<PromoAnnouncementsConfig, "icon" | "iconAlt" | "ariaLabel" | "separator"> {
689
+ const pick = (key: string, alt?: string) => {
690
+ for (const src of sources) {
691
+ if (!src) continue
692
+ const value = normalizeCmsText(src[key] ?? (alt ? src[alt] : undefined))
693
+ if (value) return value
694
+ }
695
+ return undefined
696
+ }
697
+ return {
698
+ icon: pick("icon", "ticker-icon"),
699
+ iconAlt: pick("iconAlt", "icon-alt"),
700
+ ariaLabel: pick("ariaLabel", "aria-label") ?? "Store announcements",
701
+ separator: pick("separator", "message-separator"),
702
+ }
703
+ }
704
+
705
+ /** Promo ticker messages + UI copy (icon, aria label, separator). */
706
+ export function getPromoAnnouncementsFromPageInput(
707
+ pageInput?: HomepageConfig | null
708
+ ): PromoAnnouncementsConfig {
709
+ const homepageConfig = resolvePageInput(pageInput)
710
+ const block = getMergedSectionBlock("promoAnnouncements", pageInput)
711
+ const promoUi =
712
+ (homepageConfig.promoUi as Record<string, unknown> | undefined) ??
713
+ (homepageConfig["promo-ui"] as Record<string, unknown> | undefined)
714
+
715
+ let messages = parseAnnouncementMessages(block)
716
+ if (messages.length === 0) {
717
+ const legacy =
718
+ homepageConfig["announcement-messages"] ??
719
+ homepageConfig["announcement-bar"]
720
+ if (Array.isArray(legacy)) {
721
+ messages = legacy
722
+ .map((m) => (typeof m === "string" ? m.trim() : ""))
723
+ .filter(Boolean)
724
+ }
725
+ }
726
+
727
+ const ui = parsePromoAnnouncementsUi(promoUi, block)
728
+ return { messages, ...ui }
729
+ }
730
+
731
+ /** @deprecated Use {@link getPromoAnnouncementsFromPageInput}. */
677
732
  export function getAnnouncementMessagesFromPageInput(
678
733
  pageInput?: HomepageConfig | null
679
734
  ): string[] {
680
- const block = getMergedSectionBlock("promoAnnouncements", pageInput)
681
- return parseAnnouncementMessages(block)
735
+ return getPromoAnnouncementsFromPageInput(pageInput).messages
682
736
  }
683
737
 
684
738
 
@@ -733,14 +787,11 @@ export type BrandPillarConfig = {
733
787
  href?: string
734
788
  }
735
789
 
736
- export function getBrandPillarsFromPageInput(
737
- pageInput?: HomepageConfig | null
738
- ): { sectionTitle: string; pillars: BrandPillarConfig[] } {
739
- const block = getMergedSectionBlock("brandPillars", pageInput)
740
- const copy = parseSectionCopy(block)
741
- const sectionTitle = copy.title ?? copy.name ?? ""
790
+ function parseBrandPillarsFromBlock(
791
+ block: Record<string, unknown>
792
+ ): BrandPillarConfig[] {
742
793
  const raw = block.pillars ?? block["brand-pillars"] ?? []
743
- const pillars = (Array.isArray(raw) ? raw : [])
794
+ return (Array.isArray(raw) ? raw : [])
744
795
  .map((item: unknown) => {
745
796
  if (!item || typeof item !== "object") return null
746
797
  const row = (item as Record<string, unknown>)["pillar"] ?? item
@@ -748,9 +799,26 @@ export function getBrandPillarsFromPageInput(
748
799
  const title = String(p.title ?? p.name ?? "").trim()
749
800
  const description = String(p.description ?? p.text ?? "").trim()
750
801
  const image = (p.image ?? p.icon) as string | undefined
751
- return title && description ? { title, description, image } : null
802
+ const href = (p.href ?? p.link ?? p.url) as string | undefined
803
+ return title && description
804
+ ? { title, description, image, href: href ? String(href) : undefined }
805
+ : null
752
806
  })
753
807
  .filter(Boolean) as BrandPillarConfig[]
808
+ }
809
+
810
+ export function getBrandPillarsFromPageInput(
811
+ pageInput?: HomepageConfig | null
812
+ ): { sectionTitle: string; pillars: BrandPillarConfig[] } {
813
+ const block = getMergedSectionBlock("brandPillars", pageInput)
814
+ const copy = parseSectionCopy(block)
815
+ const sectionTitle = copy.title ?? copy.name ?? ""
816
+ let pillars = parseBrandPillarsFromBlock(block)
817
+ if (pillars.length === 0) {
818
+ pillars = parseBrandPillarsFromBlock(
819
+ DEFAULT_HOMEPAGE_SECTIONS.brandPillars as Record<string, unknown>
820
+ )
821
+ }
754
822
  return { sectionTitle, pillars }
755
823
  }
756
824
 
@@ -1,17 +1,19 @@
1
1
  import "server-only"
2
2
 
3
- import { getAnnouncementMessagesFromPageInput } from "../dynamic-config"
3
+ import { getPromoAnnouncementsFromPageInput } from "../dynamic-config"
4
4
  import type { SectionLoaderOptions } from "./shared"
5
5
 
6
6
  export type PromoAnnouncementsSectionData = {
7
7
  messages: string[]
8
+ icon?: string
9
+ iconAlt?: string
10
+ ariaLabel: string
11
+ separator?: string
8
12
  }
9
13
 
10
14
  export async function loadPromoAnnouncementsSectionData(
11
15
  _countryCode: string,
12
16
  options?: SectionLoaderOptions
13
17
  ): Promise<PromoAnnouncementsSectionData> {
14
- return {
15
- messages: getAnnouncementMessagesFromPageInput(options?.pageInput ?? null),
16
- }
18
+ return getPromoAnnouncementsFromPageInput(options?.pageInput ?? null)
17
19
  }
@@ -10,7 +10,10 @@ import type {
10
10
  } from "./dynamic-config"
11
11
  import type { ShoppableLook } from "./shoppable-looks"
12
12
 
13
- /** Shape returned by the legacy `loadHomePageData` loader (removed — use per-section loaders). */
13
+ /**
14
+ * Shared homepage data shape used by `medusa-storefront-compose`.
15
+ * This is a type-only module (no runtime loaders).
16
+ */
14
17
  export type HomePageData = {
15
18
  region: HttpTypes.StoreRegion | null
16
19
  collections: Array<Record<string, unknown>>
@@ -48,3 +51,4 @@ export type HomePageData = {
48
51
  features: Array<{ name: string; icon: string }>
49
52
  }
50
53
  }
54
+
@@ -23,6 +23,18 @@ export type HomepagePromoAnnouncementsSection = HomepageSectionCopyFields & {
23
23
  messages?: string[]
24
24
  items?: Array<string | { message?: string; text?: string }>
25
25
  "announcement-messages"?: string[]
26
+ /** Optional icon shown before the ticker. */
27
+ icon?: string
28
+ iconAlt?: string
29
+ ariaLabel?: string
30
+ separator?: string
31
+ }
32
+
33
+ export type HomepagePromoUiConfig = {
34
+ icon?: string
35
+ iconAlt?: string
36
+ ariaLabel?: string
37
+ separator?: string
26
38
  }
27
39
 
28
40
  export type HomepagePromoCountdownSection = HomepageSectionCopyFields & {
@@ -277,6 +289,84 @@ export type HomepagePromoBarConfig = {
277
289
  "promo-active"?: boolean
278
290
  }
279
291
 
292
+ export type HomepageHeaderNavStaticItem = {
293
+ type?: "static"
294
+ label?: string
295
+ href?: string
296
+ icon?: string
297
+ iconSrc?: string
298
+ }
299
+
300
+ export type HomepageHeaderNavCategoriesItem = {
301
+ type: "categories"
302
+ /** Limit how many categories to include (after filtering). */
303
+ limit?: number
304
+ /** Show only these category handles (in this exact order). */
305
+ handles?: string[]
306
+ /** Only include top-level categories (no parent). Default: true */
307
+ topLevelOnly?: boolean
308
+ /** Optional prefix label like "Shop by category" (not used in desktop links). */
309
+ label?: string
310
+ }
311
+
312
+ export type HomepageHeaderNavItem =
313
+ | HomepageHeaderNavStaticItem
314
+ | HomepageHeaderNavCategoriesItem
315
+
316
+ export type HomepageHeaderNavConfig = {
317
+ items?: HomepageHeaderNavItem[]
318
+ }
319
+
320
+ export type HomepageFooterNavLink = {
321
+ label?: string
322
+ href?: string
323
+ }
324
+
325
+ export type HomepageFooterNavColumn = {
326
+ title?: string
327
+ links?: HomepageFooterNavLink[]
328
+ }
329
+
330
+ export type HomepageFooterNavConfig = {
331
+ columns?: HomepageFooterNavColumn[]
332
+ }
333
+
334
+ export type HomepageFooterUiConfig = {
335
+ shopColumnTitle?: string
336
+ contactTitle?: string
337
+ newsletterBlurb?: string
338
+ newsletterPlaceholder?: string
339
+ newsletterSubmitLabel?: string
340
+ newsletterInvalidEmail?: string
341
+ newsletterErrorMessage?: string
342
+ /** Supports `{siteName}` token. */
343
+ copyrightText?: string
344
+ icons?: {
345
+ phone?: string
346
+ email?: string
347
+ address?: string
348
+ }
349
+ social?: {
350
+ facebook?: string
351
+ linkedin?: string
352
+ instagram?: string
353
+ youtube?: string
354
+ }
355
+ }
356
+
357
+ export type HomepageHeaderUiConfig = {
358
+ icons?: {
359
+ cart?: string
360
+ account?: string
361
+ search?: string
362
+ }
363
+ search?: {
364
+ placeholder?: string
365
+ title?: string
366
+ emptyStateText?: string
367
+ }
368
+ }
369
+
280
370
  export type HomepageFaqEntry = {
281
371
  "faq-category"?: string
282
372
  "faq-question"?: string
@@ -292,6 +382,29 @@ export type HomepageConfig = {
292
382
  "website-description"?: string
293
383
  website_description?: string
294
384
 
385
+ /**
386
+ * Header navigation (desktop + mobile).
387
+ * Use `type: "static"` for hardcoded links, or `type: "categories"` to auto-populate from product categories.
388
+ */
389
+ headerNav?: HomepageHeaderNavConfig
390
+ "header-nav"?: HomepageHeaderNavConfig
391
+
392
+ /** Footer navigation columns + links. */
393
+ footerNav?: HomepageFooterNavConfig
394
+ "footer-nav"?: HomepageFooterNavConfig
395
+
396
+ /** Footer static copy + icon overrides. */
397
+ footerUi?: HomepageFooterUiConfig
398
+ "footer-ui"?: HomepageFooterUiConfig
399
+
400
+ /** Header icons + search copy. */
401
+ headerUi?: HomepageHeaderUiConfig
402
+ "header-ui"?: HomepageHeaderUiConfig
403
+
404
+ /** Promo ticker icon + accessibility copy (merged with `sections.promoAnnouncements`). */
405
+ promoUi?: HomepagePromoUiConfig
406
+ "promo-ui"?: HomepagePromoUiConfig
407
+
295
408
  /** Hero carousel — used by `hero` section (not `sections.hero`). */
296
409
  "homepage-banner-array"?: HomepageBannerEntry[]
297
410
 
@@ -5,7 +5,6 @@ export * from "./customer-registration"
5
5
  export * from "./customer"
6
6
  export * from "./dynamic-config"
7
7
  export * from "./page-input"
8
- export * from "./resolve-home-segment-data"
9
8
  export * from "./fulfillment"
10
9
  export * from "./guest"
11
10
  export * from "./locale-actions"
@@ -22,3 +21,5 @@ export * from "./swaps"
22
21
  export * from "./variants"
23
22
  export * from "./wishlist"
24
23
  export * from "./home"
24
+ export * from "./shoppable-looks"
25
+ export * from "./storefront-cms"
@@ -263,6 +263,44 @@ export function normalizeHomepageConfig(input: unknown): HomepageConfig {
263
263
  sections: sections as HomepageConfig["sections"],
264
264
  }
265
265
 
266
+ const headerNav =
267
+ asObject(site?.headerNav) ?? asObject(site?.["header-nav"]) ?? asObject(site?.nav)
268
+ if (headerNav) {
269
+ legacy.headerNav = headerNav as never
270
+ }
271
+
272
+ const footerNav =
273
+ asObject(site?.footerNav) ??
274
+ asObject(site?.["footer-nav"]) ??
275
+ asObject(site?.footer)
276
+ if (footerNav) {
277
+ legacy.footerNav = footerNav as never
278
+ }
279
+
280
+ const footerUi =
281
+ asObject(site?.footerUi) ??
282
+ asObject(site?.["footer-ui"]) ??
283
+ asObject(site?.footer)
284
+ if (footerUi) {
285
+ legacy.footerUi = footerUi as never
286
+ }
287
+
288
+ const headerUi =
289
+ asObject(site?.headerUi) ??
290
+ asObject(site?.["header-ui"]) ??
291
+ asObject(site?.header)
292
+ if (headerUi) {
293
+ legacy.headerUi = headerUi as never
294
+ }
295
+
296
+ const promoUi =
297
+ asObject(site?.promoUi) ??
298
+ asObject(site?.["promo-ui"]) ??
299
+ asObject(site?.promo)
300
+ if (promoUi) {
301
+ legacy.promoUi = promoUi as never
302
+ }
303
+
266
304
  if (desktop.length) legacy["homepage-banner-array"] = desktop as never
267
305
  if (mobile.length) legacy["app-banner-array"] = mobile as never
268
306
 
@@ -1,10 +1,19 @@
1
1
  import "server-only"
2
2
 
3
3
  import defaultPageInputJson from "../../segment-data/default-page-input.json"
4
- import type { HomepageConfig } from "./homepage-config.types"
4
+ import type {
5
+ DynamicConfigResponse,
6
+ HomepageConfig,
7
+ } from "./homepage-config.types"
5
8
  import { mergeSectionBlock } from "./config-merge"
6
9
  import { normalizeHomepageConfig } from "./normalize-homepage-config"
7
10
 
11
+ type Loose = Record<string, unknown>
12
+
13
+ function asObject(v: unknown): Loose | null {
14
+ return v && typeof v === "object" && !Array.isArray(v) ? (v as Loose) : null
15
+ }
16
+
8
17
  /** Full `homepage-config` blob passed from the main project into pages and layout. */
9
18
  export type StorefrontPageInput = HomepageConfig
10
19
 
@@ -55,12 +64,58 @@ export function resolvePageInput(
55
64
  return mergePageInputWithDefaults(pageInput ?? null)
56
65
  }
57
66
 
67
+ /**
68
+ * Medusa plugin split keys (`site-branding`, `contact`, `faqs`, `homepage-sections`)
69
+ * → simplified `{ site, sections }` for {@link normalizeHomepageConfig}.
70
+ */
71
+ export function simplifiedHomepageConfigFromDynamicResponse(
72
+ response: DynamicConfigResponse | null | undefined
73
+ ): HomepageConfig | null {
74
+ if (!response || typeof response !== "object") return null
75
+
76
+ const siteBranding = asObject(response["site-branding"])
77
+ const contact = asObject(response.contact)
78
+ const faqsRoot = asObject(response.faqs)
79
+ const homepageSections = asObject(response["homepage-sections"])
80
+ const sectionsFromCms = asObject(homepageSections?.sections)
81
+
82
+ const hasSplitKeys =
83
+ siteBranding || contact || faqsRoot || sectionsFromCms
84
+ if (!hasSplitKeys) return null
85
+
86
+ const site: Loose = {}
87
+ if (siteBranding) {
88
+ if (siteBranding.logo != null) site.logo = siteBranding.logo
89
+ if (siteBranding.brandName != null) site.brandName = siteBranding.brandName
90
+ if (siteBranding.description != null) {
91
+ site.description = siteBranding.description
92
+ }
93
+ }
94
+ if (contact) site.contact = contact
95
+
96
+ const sections: Loose = sectionsFromCms ? { ...sectionsFromCms } : {}
97
+ const helpFaq = asObject(faqsRoot?.helpFaq)
98
+ if (helpFaq) sections.helpFaq = helpFaq
99
+
100
+ const simplified: Loose = {}
101
+ if (Object.keys(site).length) simplified.site = site
102
+ if (Object.keys(sections).length) simplified.sections = sections
103
+
104
+ return Object.keys(simplified).length
105
+ ? (simplified as HomepageConfig)
106
+ : null
107
+ }
108
+
58
109
  /**
59
110
  * Build `homepage-config` from Medusa `GET /store/dynamic-config` (main project only).
111
+ * Supports legacy `homepage-config` or split plugin keys.
60
112
  */
61
113
  export function homepageConfigFromDynamicResponse(
62
- response: { "homepage-config"?: HomepageConfig | null } | null | undefined
114
+ response: DynamicConfigResponse | null | undefined
63
115
  ): StorefrontPageInput {
64
- const normalized = normalizeHomepageConfig(response?.["homepage-config"] ?? null)
116
+ const legacy = response?.["homepage-config"] ?? null
117
+ const fromSplit = simplifiedHomepageConfigFromDynamicResponse(response)
118
+ const raw = fromSplit ?? legacy
119
+ const normalized = normalizeHomepageConfig(raw)
65
120
  return mergePageInputWithDefaults(normalized)
66
121
  }
@@ -0,0 +1,46 @@
1
+ import "server-only"
2
+
3
+ import { cache } from "react"
4
+ import type { StorefrontPageInput } from "./page-input"
5
+ import {
6
+ getContactInfoFromPageInput,
7
+ getHelpFaqFromPageInput,
8
+ } from "./dynamic-config"
9
+ import { getDynamicConfig, homepageConfigFromDynamicResponse } from "./dynamic-config"
10
+
11
+ type Maybe<T> = T | null | undefined
12
+
13
+ /** Cached CMS merge for the storefront (fetch once per request). */
14
+ export const loadStorefrontPageInput = cache(
15
+ async (): Promise<StorefrontPageInput> => {
16
+ const raw = await getDynamicConfig()
17
+ return homepageConfigFromDynamicResponse(raw)
18
+ }
19
+ )
20
+
21
+ export async function resolveStorefrontPageInput(
22
+ pageInput?: Maybe<StorefrontPageInput>
23
+ ): Promise<StorefrontPageInput> {
24
+ return (pageInput ?? (await loadStorefrontPageInput())) as StorefrontPageInput
25
+ }
26
+
27
+ export async function loadContactInfoFromStorefrontInput(
28
+ pageInput?: Maybe<StorefrontPageInput>
29
+ ) {
30
+ const resolved = await resolveStorefrontPageInput(pageInput)
31
+ return getContactInfoFromPageInput(resolved)
32
+ }
33
+
34
+ export async function loadContactEmailFromStorefrontInput(
35
+ pageInput?: Maybe<StorefrontPageInput>
36
+ ): Promise<string> {
37
+ const info = await loadContactInfoFromStorefrontInput(pageInput)
38
+ return info?.email ?? ""
39
+ }
40
+
41
+ export async function loadHelpFaqFromStorefrontInput(
42
+ pageInput?: Maybe<StorefrontPageInput>
43
+ ) {
44
+ const resolved = await resolveStorefrontPageInput(pageInput)
45
+ return getHelpFaqFromPageInput(resolved)
46
+ }
@@ -1,63 +0,0 @@
1
- import "server-only"
2
-
3
- import type { HomepageConfig } from "./homepage-config.types"
4
- import {
5
- getAboutBrandFromPageInput,
6
- getAnnouncementMessagesFromPageInput,
7
- getAppBannersFromPageInput,
8
- getBlogPostsFromPageInput,
9
- getBrandPillarsFromPageInput,
10
- getFeaturesFromPageInput,
11
- getHomeBannersFromPageInput,
12
- getHomeSectionsCopyFromPageInput,
13
- getInstagramPostsFromPageInput,
14
- getPromoCountdownFromPageInput,
15
- getTestimonialsFromPageInput,
16
- getTrustFeaturesFromPageInput,
17
- getVideoStoriesFromPageInput,
18
- type AboutBrandConfig,
19
- type BlogPostConfig,
20
- type BrandPillarConfig,
21
- type HomepageBanner,
22
- type HomeSectionsCopy,
23
- type InstagramPostsData,
24
- type TrustFeaturesConfig,
25
- } from "./dynamic-config"
26
-
27
- /** Config-driven homepage fields (no Medusa catalog APIs). */
28
- export type HomeSegmentConfigData = {
29
- homeBanners: HomepageBanner[] | null
30
- appBanners: HomepageBanner[] | null
31
- whyChooseUsFeatures: ReturnType<typeof getFeaturesFromPageInput>
32
- testimonials: ReturnType<typeof getTestimonialsFromPageInput>
33
- videoStories: ReturnType<typeof getVideoStoriesFromPageInput>
34
- announcementMessages: string[]
35
- promoCountdown: ReturnType<typeof getPromoCountdownFromPageInput>
36
- aboutBrand: AboutBrandConfig
37
- brandPillars: { sectionTitle: string; pillars: BrandPillarConfig[] }
38
- blogPosts: BlogPostConfig[]
39
- instagramPosts: InstagramPostsData
40
- sectionsCopy: HomeSectionsCopy
41
- trustFeatures: TrustFeaturesConfig
42
- }
43
-
44
- /** Resolve all segment JSON from `pageInput` (package defaults when omitted). */
45
- export function resolveHomeSegmentConfigData(
46
- pageInput?: HomepageConfig | null
47
- ): HomeSegmentConfigData {
48
- return {
49
- homeBanners: getHomeBannersFromPageInput(pageInput),
50
- appBanners: getAppBannersFromPageInput(pageInput),
51
- whyChooseUsFeatures: getFeaturesFromPageInput(pageInput),
52
- testimonials: getTestimonialsFromPageInput(pageInput),
53
- videoStories: getVideoStoriesFromPageInput(pageInput),
54
- announcementMessages: getAnnouncementMessagesFromPageInput(pageInput),
55
- promoCountdown: getPromoCountdownFromPageInput(pageInput),
56
- aboutBrand: getAboutBrandFromPageInput(pageInput),
57
- brandPillars: getBrandPillarsFromPageInput(pageInput),
58
- blogPosts: getBlogPostsFromPageInput(pageInput),
59
- instagramPosts: getInstagramPostsFromPageInput(pageInput),
60
- sectionsCopy: getHomeSectionsCopyFromPageInput(pageInput),
61
- trustFeatures: getTrustFeaturesFromPageInput(pageInput),
62
- }
63
- }