@riverbankcms/sdk 0.126.0 → 0.128.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.
Files changed (212) hide show
  1. package/dist/{PreviewEditorSidebar-DcYJxTgc.mjs → PreviewEditorSidebar-Dbvb7GIr.mjs} +64 -68
  2. package/dist/{PreviewEditorUI-Ctt1yTJr.mjs → PreviewEditorUI-e9O9l20X.mjs} +3 -3
  3. package/dist/{PreviewQueryProvider-DgFDIwvK.mjs → PreviewQueryProvider-B1kbhaJD.mjs} +1 -1
  4. package/dist/SdkPreviewModeRuntime-BZHt6e9w.mjs +11006 -0
  5. package/dist/{SiteChromeCustomizeContext-C87qlKWw.mjs → SiteChromeCustomizeContext-CvuGbHJX.mjs} +51247 -20733
  6. package/dist/_dts/ai/src/contracts/proposals.d.ts +486 -36
  7. package/dist/_dts/api/src/bookingClosures.d.ts +19 -3
  8. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +4 -3
  9. package/dist/_dts/api/src/bookingRecords.d.ts +0 -13
  10. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +2 -2
  11. package/dist/_dts/api/src/communications.d.ts +2 -1
  12. package/dist/_dts/api/src/contactFormSummary.d.ts +15 -0
  13. package/dist/_dts/api/src/contentRuntime.d.ts +3 -10
  14. package/dist/_dts/api/src/endpoints.d.ts +1 -1
  15. package/dist/_dts/api/src/footerSettings.d.ts +11 -0
  16. package/dist/_dts/api/src/index.d.ts +2 -1
  17. package/dist/_dts/api/src/occurrenceScheduling.d.ts +48 -0
  18. package/dist/_dts/api/src/participantMessaging.d.ts +5 -3
  19. package/dist/_dts/api/src/publicExperience/siteEndpoints.d.ts +7 -0
  20. package/dist/_dts/api/src/sdkContracts.d.ts +7 -5
  21. package/dist/_dts/api/src/siteOperations.d.ts +12 -3
  22. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +3 -2
  23. package/dist/_dts/block-form/src/backend/store-backend.d.ts +2 -1
  24. package/dist/_dts/block-form/src/blockDraftSaveability.d.ts +1 -0
  25. package/dist/_dts/blocks/src/client/form.d.ts +1 -0
  26. package/dist/_dts/blocks/src/client/newsletter-form.d.ts +1 -0
  27. package/dist/_dts/blocks/src/client/site-chrome.d.ts +1 -0
  28. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +4 -8
  29. package/dist/_dts/blocks/src/index.d.ts +3 -2
  30. package/dist/_dts/blocks/src/lib/media.d.ts +267 -0
  31. package/dist/_dts/blocks/src/rendering/server.d.ts +1 -1
  32. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +41 -0
  33. package/dist/_dts/blocks/src/system/blocks/newsletter-signup-destination.d.ts +14 -23
  34. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +1 -1
  35. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime.d.ts +109 -23
  36. package/dist/_dts/blocks/src/system/constants/buttonRoles.d.ts +0 -13
  37. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  38. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +42 -108
  39. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +21 -54
  40. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/logic.d.ts +1 -1
  41. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationSurface.d.ts +26 -0
  42. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +8 -0
  43. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +21 -0
  44. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +4 -4
  45. package/dist/_dts/blocks/src/system/runtime/nodes/mergeResolveImageUrlContexts.d.ts +7 -0
  46. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +29 -78
  47. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.server.d.ts +1 -1
  48. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.submission.d.ts +3 -6
  49. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +27 -8
  50. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +2 -2
  51. package/dist/_dts/content-editor/src/FooterComposerOverview.d.ts +21 -0
  52. package/dist/_dts/content-editor/src/FooterComposerPanel.d.ts +3 -1
  53. package/dist/_dts/content-editor/src/FooterEngagementEditorFields.d.ts +31 -0
  54. package/dist/_dts/content-editor/src/FooterEngagementEditorPanel.d.ts +17 -0
  55. package/dist/_dts/content-editor/src/footerComposer.d.ts +3 -0
  56. package/dist/_dts/content-editor/src/footerEngagementDraft.d.ts +57 -0
  57. package/dist/_dts/content-editor/src/footerEngagementEditor.d.ts +11 -0
  58. package/dist/_dts/content-editor/src/footerPreviewRuntime.d.ts +13 -0
  59. package/dist/_dts/content-editor/src/index.d.ts +1 -0
  60. package/dist/_dts/content-editor/src/ui/blockValidationManifestRegistry.d.ts +17 -0
  61. package/dist/_dts/content-editor/src/ui/blockValidationView.d.ts +1 -1
  62. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +4 -0
  63. package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +35 -0
  64. package/dist/_dts/core/src/footer-arrangement.d.ts +2 -0
  65. package/dist/_dts/core/src/footer-composition-types.d.ts +118 -0
  66. package/dist/_dts/core/src/footer-composition.d.ts +7 -116
  67. package/dist/_dts/core/src/footer-engagement.d.ts +30 -0
  68. package/dist/_dts/core/src/index.d.ts +4 -0
  69. package/dist/_dts/core/src/newsletter-signup-destination.d.ts +38 -0
  70. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +200 -159
  71. package/dist/_dts/db/src/index.d.ts +1 -0
  72. package/dist/_dts/db/src/schemas/forms.d.ts +72 -2
  73. package/dist/_dts/db/src/schemas/standard-contact.d.ts +114 -0
  74. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +4 -0
  75. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockValidationManifests.d.ts +26 -0
  76. package/dist/_dts/editor-blocks/src/widgets/rich-text/imageInsert.d.ts +3 -3
  77. package/dist/_dts/media-editor/src/MediaEditor.d.ts +2 -2
  78. package/dist/_dts/media-editor/src/context.d.ts +1 -2
  79. package/dist/_dts/media-editor/src/index.d.ts +3 -1
  80. package/dist/_dts/media-editor/src/mediaSelection.d.ts +32 -0
  81. package/dist/_dts/media-editor/src/types.d.ts +3 -1
  82. package/dist/_dts/media-editor/src/useMediaSelection.d.ts +26 -0
  83. package/dist/_dts/preview-next/src/client/blocks/previewBatchLoaderParams.d.ts +6 -0
  84. package/dist/_dts/preview-next/src/client/index.d.ts +2 -0
  85. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +2 -5
  86. package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +2 -5
  87. package/dist/_dts/preview-next/src/client/preview/HeaderMenuControls.d.ts +12 -0
  88. package/dist/_dts/preview-next/src/client/preview/PageBlockEditorPanel.d.ts +2 -5
  89. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -4
  90. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +13 -2
  91. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +8 -4
  92. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +4 -49
  93. package/dist/_dts/preview-next/src/client/preview/headerInteractionPaletteSurfaceState.d.ts +8 -0
  94. package/dist/_dts/preview-next/src/client/preview/previewThemeRoles.d.ts +15 -0
  95. package/dist/_dts/preview-next/src/client/preview/siteChromeCustomizeTypes.d.ts +54 -0
  96. package/dist/_dts/preview-next/src/client/preview/siteChromeLookRows.d.ts +13 -3
  97. package/dist/_dts/preview-next/src/client/preview/siteChromeNavQuickControlHistory.d.ts +3 -0
  98. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +6 -3
  99. package/dist/_dts/preview-next/src/client/widgets/widgetOverrides.d.ts +6 -5
  100. package/dist/_dts/sdk/src/cli/commands/push/execute/footer.d.ts +9 -0
  101. package/dist/_dts/sdk/src/cli/content/footerFile.d.ts +10 -0
  102. package/dist/_dts/sdk/src/cli/content/reader.d.ts +3 -5
  103. package/dist/_dts/sdk/src/cli/site-commands/footerCommands.d.ts +15 -3
  104. package/dist/_dts/sdk/src/client/combineAbortSignals.d.ts +2 -0
  105. package/dist/_dts/sdk/src/client/management/types.d.ts +6 -15
  106. package/dist/_dts/sdk/src/client/types.d.ts +10 -2
  107. package/dist/_dts/sdk/src/client/wholeSeriesReadOperations.d.ts +11 -0
  108. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  109. package/dist/_dts/sdk/src/config/validation.d.ts +3 -0
  110. package/dist/_dts/sdk/src/contracts/event-registration-content.d.ts +16 -0
  111. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +4 -15
  112. package/dist/_dts/sdk/src/public-api/contracts.d.ts +4 -18
  113. package/dist/_dts/sdk/src/public-api/teamMemberContracts.d.ts +17 -0
  114. package/dist/_dts/sdk/src/public-api/wholeSeriesContracts.d.ts +2 -0
  115. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +7 -0
  116. package/dist/_dts/sdk/src/rendering/index.d.ts +5 -3
  117. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +2 -2
  118. package/dist/_dts/sdk/src/rendering/mediaAssets.d.ts +8 -2
  119. package/dist/_dts/sdk/src/version.d.ts +1 -1
  120. package/dist/_dts/site-commands/src/commandContract.d.ts +8 -1
  121. package/dist/_dts/site-commands/src/commands.d.ts +16 -2
  122. package/dist/_dts/theme-core/src/buttons/effects/presets/background.d.ts +1 -1
  123. package/dist/_dts/theme-core/src/buttons/styles/registry.d.ts +0 -18
  124. package/dist/_dts/theme-core/src/buttons/types.d.ts +1 -3
  125. package/dist/_dts/theme-core/src/header/containerSchema.d.ts +20 -0
  126. package/dist/_dts/theme-core/src/header/generateHeaderCss.d.ts +1 -1
  127. package/dist/_dts/theme-core/src/header/interactionPalette.d.ts +14 -0
  128. package/dist/_dts/theme-core/src/header/legacyNavLinkStyle.d.ts +3 -0
  129. package/dist/_dts/theme-core/src/header/paintTargets.d.ts +31 -0
  130. package/dist/_dts/theme-core/src/header/scrollTreatment.d.ts +11 -0
  131. package/dist/_dts/theme-core/src/header/surfaceRules.d.ts +8 -0
  132. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +15 -0
  133. package/dist/_dts/theme-core/src/palette/colors.d.ts +1 -1
  134. package/dist/_dts/theme-core/src/schema.d.ts +67 -19
  135. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +3 -51
  136. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +4 -11
  137. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +3 -51
  138. package/dist/_dts/theme-core/src/site-styles/headerInteractionPalette.d.ts +32 -0
  139. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +19 -106
  140. package/dist/_dts/theme-core/src/site-styles/headerOpeningForeground.d.ts +22 -0
  141. package/dist/_dts/theme-core/src/site-styles/headerOpeningSection.d.ts +2 -0
  142. package/dist/_dts/theme-core/src/site-styles/headerStyleParts.d.ts +4 -0
  143. package/dist/_dts/theme-core/src/site-styles/index.d.ts +3 -0
  144. package/dist/_dts/theme-core/src/site-styles/lookOptionGroups.d.ts +24 -0
  145. package/dist/_dts/theme-core/src/site-styles/lookResolution.d.ts +1 -2
  146. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +4 -22
  147. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorOptions.d.ts +21 -0
  148. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  149. package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +4 -1
  150. package/dist/cli/index.mjs +6272 -5706
  151. package/dist/client/{courseRegistration-BcemLAdN.mjs → CourseRegistrationWizard-xRmA7REV.mjs} +329 -49
  152. package/dist/client/{DiscountCodeDisclosure-DS0AuFWW.mjs → DiscountCodeDisclosure-B9vriL5C.mjs} +1 -1
  153. package/dist/client/{EventCombined.client-DtMxLr7q.mjs → EventCombined.client-BgVnVTlz.mjs} +2 -2
  154. package/dist/client/{EventListing.client-BdLSRNg1.mjs → EventListing.client-CqdsO7jO.mjs} +2 -2
  155. package/dist/client/{LeafletStaticMap-BrpC6vsT.mjs → LeafletStaticMap-CKPxot9M.mjs} +1 -1
  156. package/dist/client/{StepIndicator-CBYPFVoy.mjs → StepIndicator-DGCYuBJ1.mjs} +2 -2
  157. package/dist/client/{accordion-BqqwPJWM.mjs → accordion-BfN5Eqd-.mjs} +1 -1
  158. package/dist/client/{bookingForm-SneP3yxC.mjs → bookingForm-DOvCpBFP.mjs} +5 -5
  159. package/dist/client/bookings.mjs +126 -23
  160. package/dist/client/{carousel-BTIR9L3I.mjs → carousel-DPNmiH0f.mjs} +1 -1
  161. package/dist/client/{cart-bqiqd8SX.mjs → cart--egVXlrR.mjs} +3 -3
  162. package/dist/client/{checkout-WbTFV5v4.mjs → checkout-DywWtMcq.mjs} +3 -3
  163. package/dist/client/client.mjs +6111 -5794
  164. package/dist/client/courseRegistration-Dk9qFVwt.mjs +46 -0
  165. package/dist/client/{eventCalendar-CsxIw0V_.mjs → eventCalendar-Bkz2HjlS.mjs} +4 -4
  166. package/dist/client/{eventCombined-B6XMoHfa.mjs → eventCombined-D4kipYWg.mjs} +2 -2
  167. package/dist/client/{eventDetails-BJaoPPfo.mjs → eventDetails-Dz_5ix2Q.mjs} +56 -35
  168. package/dist/client/{eventListing-DgwdYHRT.mjs → eventListing-D0vm-zST.mjs} +2 -2
  169. package/dist/client/{eventRegistration-C0O3folu.mjs → eventRegistration-Cw1E4Q4p.mjs} +58 -6
  170. package/dist/client/{form-Bk9txGFt.mjs → form-C2Zf1n3K.mjs} +1 -1
  171. package/dist/client/{headerSection-yIBt0yTv.mjs → headerSection-CP05gzdc.mjs} +2 -2
  172. package/dist/client/hooks.mjs +1013 -935
  173. package/dist/client/{locationMap-C-3KIpv-.mjs → locationMap-Cl3x9PYJ.mjs} +2 -2
  174. package/dist/client/{newsletterForm-CzB8g8h2.mjs → newsletterForm-DyEJoClm.mjs} +26 -20
  175. package/dist/client/{pricing-C1QeDes_.mjs → pricing-DGuNR1W4.mjs} +1 -1
  176. package/dist/client/{productDetail-w7SBp5uc.mjs → productDetail-Cq-HrGew.mjs} +3 -3
  177. package/dist/client/{productList-D0tGKHGf.mjs → productList-DbB3jwqd.mjs} +3 -3
  178. package/dist/client/{propsDecoder-Bcin2DB3.mjs → propsDecoder-CiTuhUwY.mjs} +257 -142
  179. package/dist/client/rendering/client.mjs +1342 -1122
  180. package/dist/client/rendering/islands.mjs +18 -18
  181. package/dist/client/rendering.mjs +6622 -6321
  182. package/dist/client/{scrollToBlock-h-o_STf_.mjs → scrollToBlock-CShkRqab.mjs} +1 -1
  183. package/dist/client/{shop-BGzmL8O_.mjs → shop-Cu4Ib-ZA.mjs} +5 -5
  184. package/dist/client/{shop-commerce-lX8QxjX-.mjs → shop-commerce-BzpsOdh7.mjs} +4 -4
  185. package/dist/client/{shop-commerce-store-CEurARtu.mjs → shop-commerce-store-DaE7Fhj8.mjs} +1 -1
  186. package/dist/client/{shopShared-DXxH8xxw.mjs → shopShared-cF0c20vB.mjs} +2 -2
  187. package/dist/client/{useEventFilters-B591g9vd.mjs → useEventFilters-QZ3HMgaJ.mjs} +2 -2
  188. package/dist/client/{usePolling-BvnChV4m.mjs → usePolling-BKf0GcE-.mjs} +2 -2
  189. package/dist/preview-next/before-render.mjs +1 -1
  190. package/dist/preview-next/client/runtime.mjs +4 -4
  191. package/dist/preview-next/middleware.mjs +1 -1
  192. package/dist/{previewAuthStore-Dev9CdG9.mjs → previewAuthStore-BesgU5Xu.mjs} +1 -1
  193. package/dist/{sdk-runtime-M__i3Jce.mjs → sdk-runtime-Cn_QSCOg.mjs} +2 -2
  194. package/dist/{separator-VSlnI9bc.mjs → separator-CEoGABRc.mjs} +1 -1
  195. package/dist/server/components.mjs +1750 -1614
  196. package/dist/server/config-validation.mjs +1010 -935
  197. package/dist/server/config.mjs +1010 -935
  198. package/dist/server/data.mjs +1013 -935
  199. package/dist/server/index.mjs +40 -16
  200. package/dist/server/next.mjs +1790 -1632
  201. package/dist/server/page-converter.mjs +1012 -938
  202. package/dist/server/prebuild.mjs +1 -1
  203. package/dist/server/rendering/server.mjs +1746 -1601
  204. package/dist/server/rendering.mjs +1759 -1615
  205. package/dist/server/routing.mjs +1123 -975
  206. package/dist/server/server.mjs +1053 -951
  207. package/dist/server/theme-bridge.mjs +151 -118
  208. package/dist/server/theme.mjs +111 -23
  209. package/package.json +1 -1
  210. package/dist/SdkPreviewModeRuntime-CvW1vdQ4.mjs +0 -39468
  211. package/dist/_dts/editor-blocks/src/widgets/rich-text/ensureRichTextImageAssetIdentifier.d.ts +0 -8
  212. package/dist/client/MagicLinkForm-Bt3IuLMy.mjs +0 -327
@@ -1282,7 +1282,7 @@ function canonicalPaletteHashInput(colors, mode) {
1282
1282
  return `${mode}|${paletteColorFingerprint(colors)}`;
1283
1283
  }
1284
1284
  /**
1285
- * The shared TypeScript/SQL protocol. Do not reorder roles: the order comes
1285
+ * Stable curated-catalogue identity. Do not reorder roles: the order comes
1286
1286
  * from PALETTE_TOKEN_NAMES through canonicalPaletteHashInput.
1287
1287
  */
1288
1288
  function paletteValueKey(colors, mode) {
@@ -2742,8 +2742,6 @@ const VARIANT_ROLES = [
2742
2742
  "secondary",
2743
2743
  "outline",
2744
2744
  "ghost",
2745
- "link",
2746
- "tertiary",
2747
2745
  "accent"
2748
2746
  ];
2749
2747
  /**
@@ -2752,7 +2750,7 @@ const VARIANT_ROLES = [
2752
2750
  * IDs become class selectors, so keep the contract deliberately narrower than
2753
2751
  * an arbitrary string and shared with every authoring/runtime boundary.
2754
2752
  */
2755
- const buttonVariantIdSchema = z$1.string().min(1).max(50).regex(/^[a-z0-9-]+$/, "Button variant IDs may contain lowercase letters, numbers, and hyphens only");
2753
+ const buttonVariantIdSchema = z$1.string().min(1).max(50).regex(/^[a-z0-9-]+$/, "Button variant IDs may contain lowercase letters, numbers, and hyphens only").refine((value) => value !== "link" && value !== "tertiary", { message: "Retired button role IDs are not valid variant IDs" });
2756
2754
  function parseOpaqueButtonColourToken(value) {
2757
2755
  const token = parseThemeColorToken(value);
2758
2756
  if (token === null) return null;
@@ -3155,6 +3153,59 @@ function surfaceForegroundStyle(input) {
3155
3153
  [SURFACE_FOREGROUND_CSS_VARS.supporting]: foregrounds.supporting
3156
3154
  };
3157
3155
  }
3156
+ shadeBackgroundEffect({
3157
+ id: "darken-background",
3158
+ name: "Darken on Hover",
3159
+ description: "Darkens the background color on hover",
3160
+ label: "Darken Amount (shade step)",
3161
+ shadeDirection: 1
3162
+ });
3163
+ shadeBackgroundEffect({
3164
+ id: "lighten-background",
3165
+ name: "Lighten on Hover",
3166
+ description: "Lightens the background color on hover",
3167
+ label: "Lighten Amount (shade step)",
3168
+ shadeDirection: -1
3169
+ });
3170
+ function shadeBackgroundEffect(config) {
3171
+ return {
3172
+ id: config.id,
3173
+ name: config.name,
3174
+ description: config.description,
3175
+ category: "background",
3176
+ pseudoElement: "none",
3177
+ applicableTo: ["button"],
3178
+ customizableOption: {
3179
+ name: "amount",
3180
+ type: "select",
3181
+ label: config.label,
3182
+ default: 100,
3183
+ options: [
3184
+ 0,
3185
+ 100,
3186
+ 200,
3187
+ 300,
3188
+ 400,
3189
+ 500,
3190
+ 600,
3191
+ 700,
3192
+ 800,
3193
+ 900
3194
+ ]
3195
+ },
3196
+ isApplicable: (buttonConfig) => buttonConfig.background.type === "solid",
3197
+ generateCSS: ({ themeId, variantId, options, tokens, buttonConfig }) => {
3198
+ if (buttonConfig.background.type !== "solid") return "";
3199
+ const amount = (options.amount || 100) * config.shadeDirection;
3200
+ const baseToken = buttonConfig.background.colorToken ?? "primary-500";
3201
+ return `
3202
+ :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
3203
+ background-color: ${tokens.getColor(tokens.adjustShade(baseToken, amount))};
3204
+ }
3205
+ `;
3206
+ }
3207
+ };
3208
+ }
3158
3209
  buttonSizeNameSchema.options;
3159
3210
  //#endregion
3160
3211
  //#region ../theme-core/src/buttons/styles/domain.ts
@@ -5591,7 +5642,7 @@ function asDesignSystemTemplateId(value) {
5591
5642
  function makeBoundaryId(previousBlockId, nextBlockId) {
5592
5643
  return asDesignBoundaryId(`boundary:${encodeURIComponent(previousBlockId)}:${encodeURIComponent(nextBlockId)}`);
5593
5644
  }
5594
- function assertNever$1(value, message = "Unhandled Theme V2 variant") {
5645
+ function assertNever$2(value, message = "Unhandled Theme V2 variant") {
5595
5646
  throw new Error(`${message}: ${String(value)}`);
5596
5647
  }
5597
5648
  function brandNonEmptyString(value, label) {
@@ -5894,6 +5945,60 @@ function mergeStyles(...styles) {
5894
5945
  * palette context and happens in `parseThemeColorReference`.
5895
5946
  */
5896
5947
  const tokenOrCssColorValueSchema = z$1.string();
5948
+ const BREAKPOINT_LG = 1024;
5949
+ const BREAKPOINT_XL = 1280;
5950
+ const BREAKPOINT_LG_DOWN = BREAKPOINT_LG - 1;
5951
+ function mqUp(px) {
5952
+ return `(min-width: ${px}px)`;
5953
+ }
5954
+ function mqDown(px) {
5955
+ return `(max-width: ${px}px)`;
5956
+ }
5957
+ function mqBetween(minPx, maxPx) {
5958
+ return `${mqUp(minPx)} and ${mqDown(maxPx)}`;
5959
+ }
5960
+ mqUp(640);
5961
+ mqUp(768);
5962
+ mqUp(BREAKPOINT_LG);
5963
+ mqUp(BREAKPOINT_XL);
5964
+ mqDown(639);
5965
+ mqDown(767);
5966
+ mqDown(BREAKPOINT_LG_DOWN);
5967
+ mqBetween(640, BREAKPOINT_LG_DOWN);
5968
+ mqDown(640);
5969
+ mqDown(768);
5970
+ //#endregion
5971
+ //#region ../theme-core/src/header/scrollTreatment.ts
5972
+ const headerScrollTreatmentSchema = z$1.discriminatedUnion("kind", [z$1.object({
5973
+ kind: z$1.literal("contrast-glass"),
5974
+ backgroundTone: z$1.enum(["light", "dark"])
5975
+ })]).optional();
5976
+ //#endregion
5977
+ //#region ../theme-core/src/header/containerSchema.ts
5978
+ const headerContainerSchema = z$1.object({
5979
+ rounded: z$1.enum([
5980
+ "none",
5981
+ "sm",
5982
+ "md",
5983
+ "lg",
5984
+ "xl",
5985
+ "2xl"
5986
+ ]).default("xl"),
5987
+ border: z$1.boolean().default(true),
5988
+ shadow: z$1.boolean().default(true),
5989
+ padding: z$1.enum([
5990
+ "sm",
5991
+ "md",
5992
+ "lg"
5993
+ ]).default("md"),
5994
+ tint: z$1.string().nullable().optional(),
5995
+ opacity: z$1.number().min(0).max(1).default(.12)
5996
+ }).optional();
5997
+ const headerInteractionPaletteSchema = z$1.enum([
5998
+ "primary",
5999
+ "secondary",
6000
+ "accent"
6001
+ ]);
5897
6002
  //#endregion
5898
6003
  //#region ../theme-core/src/schema.ts
5899
6004
  const axesSchema = z$1.object({
@@ -6303,25 +6408,6 @@ const navFontWeight = z$1.enum([
6303
6408
  ]);
6304
6409
  const headerMaxWidth = z$1.enum(["container", "full"]);
6305
6410
  const headerBarFrame = z$1.enum(["full-bleed", "inset-shell"]);
6306
- const headerContainerSchema = z$1.object({
6307
- rounded: z$1.enum([
6308
- "none",
6309
- "sm",
6310
- "md",
6311
- "lg",
6312
- "xl",
6313
- "2xl"
6314
- ]).default("xl"),
6315
- border: z$1.boolean().default(true),
6316
- shadow: z$1.boolean().default(true),
6317
- padding: z$1.enum([
6318
- "sm",
6319
- "md",
6320
- "lg"
6321
- ]).default("md"),
6322
- tint: z$1.string().nullable().optional(),
6323
- opacity: z$1.number().min(0).max(1).default(.12)
6324
- }).optional();
6325
6411
  const headerBorderSchema = componentBorderSchema.extend({ position: z$1.enum([
6326
6412
  "bottom",
6327
6413
  "top",
@@ -6448,6 +6534,7 @@ const headerSchema = z$1.object({
6448
6534
  shrinkOnScroll: z$1.boolean(),
6449
6535
  maxWidth: headerMaxWidth,
6450
6536
  barFrame: headerBarFrame.optional(),
6537
+ scrollTreatment: headerScrollTreatmentSchema,
6451
6538
  logoOverride: mediaSchema$1.nullable().optional(),
6452
6539
  background: headerBackgroundSchema.default({
6453
6540
  type: "color",
@@ -6460,6 +6547,7 @@ const headerSchema = z$1.object({
6460
6547
  navFontRole: z$1.enum(["body", "heading"]).optional(),
6461
6548
  navTypography: z$1.enum(["body", "heading"]).optional(),
6462
6549
  navTextSize: navLinkStyleSchema.shape.textSize,
6550
+ interactionPalette: headerInteractionPaletteSchema.optional(),
6463
6551
  navPlacement: z$1.enum(["end", "center"]).optional(),
6464
6552
  container: headerContainerSchema,
6465
6553
  border: headerBorderSchema,
@@ -6752,770 +6840,669 @@ z$1.object({
6752
6840
  themes: z$1.array(themeSchema).length(3)
6753
6841
  });
6754
6842
  //#endregion
6843
+ //#region ../theme-core/src/site-styles/lookOptionGroups.ts
6844
+ function defineLookOptionGroup(group) {
6845
+ defaultOption(group);
6846
+ return group;
6847
+ }
6848
+ function defaultOption(group) {
6849
+ const option = group.options.find((candidate) => candidate.id === group.defaultOptionId);
6850
+ if (option) return option;
6851
+ throw new Error(`Look option group "${group.id}" defaults to missing option "${group.defaultOptionId}".`);
6852
+ }
6853
+ //#endregion
6755
6854
  //#region ../theme-core/src/site-styles/appearancePresetResolution.ts
6756
6855
  function assertValidOptionGroups(preset) {
6757
6856
  preset.optionGroups?.forEach((group) => {
6758
- if (!group.options.find((option) => option.id === group.selectedOptionId)) throw new Error(`Appearance preset "${preset.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`);
6857
+ defineLookOptionGroup(group);
6759
6858
  });
6760
6859
  }
6761
6860
  function defineBlockAppearancePreset(preset) {
6762
6861
  assertValidOptionGroups(preset);
6763
6862
  return preset;
6764
6863
  }
6765
- [...[
6766
- defineBlockAppearancePreset({
6767
- kind: "block-design",
6768
- id: "hero-immersive-image",
6769
- target: "hero",
6770
- label: "Immersive image hero",
6771
- blockKinds: ["block.hero"],
6772
- constraints: { layoutFamilies: ["centered", "compact"] },
6773
- layoutPatches: [{
6774
- constraints: { layoutVariantKeys: ["micro"] },
6775
- designPatch: {
6776
- sectionHeight: "banner",
6777
- heroTypographyScale: "display"
6778
- }
6779
- }],
6780
- design: {
6781
- sectionSurface: "hero-image",
6782
- contentFrame: plainFrame,
6783
- itemSurface: "none",
6784
- sectionHeight: "hero",
6785
- heroComposition: "center",
6786
- heroTypographyScale: "display",
6787
- imageSurfaceTreatment: { kind: "neutral-wash" }
6864
+ //#endregion
6865
+ //#region ../theme-core/src/site-styles/blockAppearancePresets.ts
6866
+ const brandScrimOptionGroups = [{
6867
+ id: "image-surface-treatment",
6868
+ label: "Treatment",
6869
+ defaultOptionId: "brand-scrim-primary",
6870
+ options: [{
6871
+ id: "brand-scrim-primary",
6872
+ label: "Brand scrim",
6873
+ designPatch: { imageSurfaceTreatment: {
6874
+ kind: "brand-scrim",
6875
+ token: "primary"
6876
+ } }
6877
+ }, {
6878
+ id: "neutral-scrim",
6879
+ label: "Neutral scrim",
6880
+ designPatch: { imageSurfaceTreatment: { kind: "neutral-scrim" } }
6881
+ }]
6882
+ }];
6883
+ const microBannerLayoutPatches = [{
6884
+ constraints: { layoutVariantKeys: ["micro"] },
6885
+ designPatch: { sectionHeight: "banner" }
6886
+ }];
6887
+ defineBlockAppearancePreset({
6888
+ id: "hero-immersive-image",
6889
+ target: "hero",
6890
+ label: "Immersive image hero",
6891
+ blockKinds: ["block.hero"],
6892
+ constraints: { layoutFamilies: ["centered", "compact"] },
6893
+ layoutPatches: [{
6894
+ constraints: { layoutVariantKeys: ["micro"] },
6895
+ designPatch: {
6896
+ sectionHeight: "banner",
6897
+ heroTypographyScale: "display"
6788
6898
  }
6789
- }),
6790
- defineBlockAppearancePreset({
6791
- kind: "block-design",
6792
- id: "hero-bottom-left-panel",
6793
- target: "hero",
6794
- label: "Bottom-left panel hero",
6795
- blockKinds: ["block.hero"],
6796
- constraints: { layoutFamilies: ["centered", "compact"] },
6797
- optionGroups: [{
6798
- id: "image-surface-treatment",
6799
- label: "Treatment",
6800
- selectedOptionId: "neutral-scrim",
6801
- options: [{
6802
- id: "neutral-scrim",
6803
- label: "Neutral scrim",
6804
- designPatch: { imageSurfaceTreatment: {
6805
- kind: "neutral-scrim",
6806
- intensity: "balanced"
6807
- } }
6808
- }, {
6809
- id: "brand-scrim-primary",
6810
- label: "Brand scrim",
6811
- designPatch: { imageSurfaceTreatment: {
6812
- kind: "brand-scrim",
6813
- token: "primary",
6814
- intensity: "balanced"
6815
- } }
6816
- }]
6817
- }],
6818
- layoutPatches: [{
6819
- constraints: { layoutVariantKeys: ["micro"] },
6820
- designPatch: {
6821
- sectionHeight: "banner",
6822
- heroTypographyScale: "editorial"
6823
- }
6824
- }],
6825
- design: {
6826
- sectionSurface: "hero-image",
6827
- contentFrame: panelFrame("raised"),
6828
- itemSurface: "none",
6829
- sectionHeight: "immersive",
6830
- heroComposition: "bottom-left",
6831
- heroTypographyScale: "display",
6832
- imageSurfaceTreatment: {
6899
+ }],
6900
+ design: {
6901
+ sectionSurface: "hero-image",
6902
+ contentFrame: plainFrame,
6903
+ itemSurface: "none",
6904
+ sectionHeight: "hero",
6905
+ heroComposition: "center",
6906
+ heroTypographyScale: "display",
6907
+ imageSurfaceTreatment: { kind: "neutral-wash" }
6908
+ }
6909
+ }), defineBlockAppearancePreset({
6910
+ id: "hero-bottom-left-panel",
6911
+ target: "hero",
6912
+ label: "Bottom-left panel hero",
6913
+ blockKinds: ["block.hero"],
6914
+ constraints: { layoutFamilies: ["centered", "compact"] },
6915
+ optionGroups: [{
6916
+ id: "image-surface-treatment",
6917
+ label: "Treatment",
6918
+ defaultOptionId: "neutral-scrim",
6919
+ options: [{
6920
+ id: "neutral-scrim",
6921
+ label: "Neutral scrim",
6922
+ designPatch: { imageSurfaceTreatment: {
6833
6923
  kind: "neutral-scrim",
6834
6924
  intensity: "balanced"
6835
- }
6836
- }
6837
- }),
6838
- defineBlockAppearancePreset({
6839
- kind: "block-design",
6840
- id: "hero-poster-image",
6841
- target: "hero",
6842
- label: "Poster image hero",
6843
- blockKinds: ["block.hero"],
6844
- constraints: { layoutFamilies: ["centered", "compact"] },
6845
- layoutPatches: [{
6846
- constraints: { layoutVariantKeys: ["micro"] },
6847
- designPatch: {
6848
- sectionHeight: "banner",
6849
- heroTypographyScale: "display"
6850
- }
6851
- }],
6852
- design: {
6853
- sectionSurface: "hero-image",
6854
- contentFrame: plainFrame,
6855
- itemSurface: "none",
6856
- sectionHeight: "immersive",
6857
- heroComposition: "center",
6858
- heroTypographyScale: "poster",
6859
- imageSurfaceTreatment: {
6925
+ } }
6926
+ }, {
6927
+ id: "brand-scrim-primary",
6928
+ label: "Brand scrim",
6929
+ designPatch: { imageSurfaceTreatment: {
6860
6930
  kind: "brand-scrim",
6861
6931
  token: "primary",
6862
- intensity: "strong"
6863
- }
6864
- }
6865
- }),
6866
- defineBlockAppearancePreset({
6867
- kind: "block-design",
6868
- id: "hero-brand-scrim",
6869
- target: "hero",
6870
- label: "Brand scrim image hero",
6871
- blockKinds: ["block.hero"],
6872
- constraints: { layoutFamilies: ["centered", "compact"] },
6873
- optionGroups: [{
6874
- id: "image-surface-treatment",
6875
- label: "Treatment",
6876
- selectedOptionId: "brand-scrim-primary",
6877
- options: [{
6878
- id: "brand-scrim-primary",
6879
- label: "Brand scrim",
6880
- designPatch: { imageSurfaceTreatment: {
6881
- kind: "brand-scrim",
6882
- token: "primary"
6883
- } }
6884
- }, {
6885
- id: "neutral-scrim",
6886
- label: "Neutral scrim",
6887
- designPatch: { imageSurfaceTreatment: { kind: "neutral-scrim" } }
6888
- }]
6889
- }],
6890
- layoutPatches: [{
6891
- constraints: { layoutVariantKeys: ["micro"] },
6892
- designPatch: { sectionHeight: "banner" }
6893
- }],
6894
- design: {
6895
- sectionSurface: "hero-image",
6896
- contentFrame: plainFrame,
6897
- itemSurface: "none",
6898
- sectionHeight: "immersive",
6899
- heroComposition: "center",
6900
- heroTypographyScale: "display",
6901
- imageSurfaceTreatment: {
6902
- kind: "brand-scrim",
6903
- token: "primary"
6904
- }
6905
- }
6906
- }),
6907
- defineBlockAppearancePreset({
6908
- kind: "block-design",
6909
- id: "hero-brand-scrim-fixed-frame",
6910
- target: "hero",
6911
- label: "Fixed-frame brand scrim hero",
6912
- blockKinds: ["block.hero"],
6913
- constraints: { layoutFamilies: ["centered", "compact"] },
6914
- optionGroups: [{
6915
- id: "image-surface-treatment",
6916
- label: "Treatment",
6917
- selectedOptionId: "brand-scrim-primary",
6918
- options: [{
6919
- id: "brand-scrim-primary",
6920
- label: "Brand scrim",
6921
- designPatch: { imageSurfaceTreatment: {
6922
- kind: "brand-scrim",
6923
- token: "primary"
6924
- } }
6925
- }, {
6926
- id: "neutral-scrim",
6927
- label: "Neutral scrim",
6928
- designPatch: { imageSurfaceTreatment: { kind: "neutral-scrim" } }
6929
- }]
6930
- }],
6931
- layoutPatches: [{
6932
- constraints: { layoutVariantKeys: ["micro"] },
6933
- designPatch: { sectionHeight: "banner" }
6934
- }],
6935
- design: {
6936
- sectionSurface: "hero-image",
6937
- contentFrame: plainFrame,
6938
- itemSurface: "none",
6939
- sectionHeight: "immersive",
6940
- heroComposition: "center",
6941
- heroTypographyScale: "display",
6942
- imageSurfaceTreatment: {
6943
- kind: "brand-scrim",
6944
- token: "primary"
6945
- },
6946
- imageSurfaceMotion: "fixed-frame",
6947
- eyebrowTreatment: "accent-pill-bounce"
6948
- }
6949
- }),
6950
- defineBlockAppearancePreset({
6951
- kind: "block-design",
6952
- id: "hero-brand-depth-expressive",
6953
- target: "hero",
6954
- label: "Expressive brand-depth hero",
6955
- blockKinds: ["block.hero"],
6956
- constraints: { layoutFamilies: ["centered", "compact"] },
6957
- design: {
6958
- sectionSurface: "brand-depth-band",
6959
- contentFrame: plainFrame,
6960
- itemSurface: "none",
6961
- heroComposition: "center",
6962
- heroTypographyScale: "editorial",
6963
- eyebrowTreatment: "accent-pill-bounce"
6964
- }
6965
- }),
6966
- defineBlockAppearancePreset({
6967
- kind: "block-design",
6968
- id: "hero-contained-intro",
6969
- target: "hero",
6970
- label: "Contained intro hero",
6971
- blockKinds: ["block.hero"],
6972
- design: {
6973
- sectionSurface: "muted-band",
6974
- contentFrame: panelFrame("inset"),
6975
- itemSurface: "none",
6976
- heroComposition: "center",
6977
- heroTypographyScale: "editorial"
6978
- }
6979
- }),
6980
- defineBlockAppearancePreset({
6981
- kind: "block-design",
6982
- id: "hero-split-editorial",
6983
- target: "hero",
6984
- label: "Editorial split hero",
6985
- blockKinds: ["block.hero"],
6986
- constraints: { layoutFamilies: ["split"] },
6987
- design: {
6988
- sectionSurface: "base",
6989
- contentFrame: plainFrame,
6990
- itemSurface: "none",
6991
- heroTypographyScale: "editorial"
6992
- }
6993
- }),
6994
- defineBlockAppearancePreset({
6995
- kind: "block-design",
6996
- id: "hero-split-brand",
6997
- target: "hero",
6998
- label: "Brand split hero",
6999
- blockKinds: ["block.hero"],
7000
- constraints: { layoutFamilies: ["split"] },
7001
- design: {
7002
- sectionSurface: "brand-depth-band",
7003
- contentFrame: plainFrame,
7004
- itemSurface: "none",
7005
- heroTypographyScale: "display",
7006
- eyebrowTreatment: "accent-pill-bounce"
7007
- }
7008
- }),
7009
- defineBlockAppearancePreset({
7010
- kind: "block-design",
7011
- id: "hero-split-soft-panel",
7012
- target: "hero",
7013
- label: "Soft panel split hero",
7014
- blockKinds: ["block.hero"],
7015
- constraints: { layoutFamilies: ["split"] },
7016
- design: {
7017
- sectionSurface: "muted-band",
7018
- contentFrame: panelFrame("raised"),
7019
- itemSurface: "none",
6932
+ intensity: "balanced"
6933
+ } }
6934
+ }]
6935
+ }],
6936
+ layoutPatches: [{
6937
+ constraints: { layoutVariantKeys: ["micro"] },
6938
+ designPatch: {
6939
+ sectionHeight: "banner",
7020
6940
  heroTypographyScale: "editorial"
7021
6941
  }
7022
- }),
7023
- defineBlockAppearancePreset({
7024
- kind: "block-design",
7025
- id: "hero-split-accent",
7026
- target: "hero",
7027
- label: "Accent split hero",
7028
- blockKinds: ["block.hero"],
7029
- constraints: { layoutFamilies: ["split"] },
7030
- design: {
7031
- sectionSurface: "accent-band",
7032
- contentFrame: panelFrame("raised"),
7033
- itemSurface: "none",
6942
+ }],
6943
+ design: {
6944
+ sectionSurface: "hero-image",
6945
+ contentFrame: panelFrame("raised"),
6946
+ itemSurface: "none",
6947
+ sectionHeight: "immersive",
6948
+ heroComposition: "bottom-left",
6949
+ heroTypographyScale: "display",
6950
+ imageSurfaceTreatment: {
6951
+ kind: "neutral-scrim",
6952
+ intensity: "balanced"
6953
+ }
6954
+ }
6955
+ }), defineBlockAppearancePreset({
6956
+ id: "hero-poster-image",
6957
+ target: "hero",
6958
+ label: "Poster image hero",
6959
+ blockKinds: ["block.hero"],
6960
+ constraints: { layoutFamilies: ["centered", "compact"] },
6961
+ layoutPatches: [{
6962
+ constraints: { layoutVariantKeys: ["micro"] },
6963
+ designPatch: {
6964
+ sectionHeight: "banner",
7034
6965
  heroTypographyScale: "display"
7035
6966
  }
7036
- }),
7037
- defineBlockAppearancePreset({
7038
- kind: "block-design",
7039
- id: "intro-editorial-statement",
7040
- target: "intro",
7041
- label: "Editorial intro statement",
7042
- blockKinds: ["block.intro"],
7043
- constraints: { layoutVariantKeys: ["centered-copy", "statement-copy"] },
7044
- design: {
7045
- sectionSurface: "base",
7046
- contentFrame: plainFrame,
7047
- itemSurface: "none",
7048
- composition: {
7049
- kind: "intro",
7050
- treatment: "editorial-statement"
7051
- }
7052
- }
7053
- }),
7054
- defineBlockAppearancePreset({
7055
- kind: "block-design",
7056
- id: "intro-portrait-bio",
7057
- target: "intro",
7058
- label: "Portrait and bio",
7059
- blockKinds: ["block.intro"],
7060
- constraints: { layoutVariantKeys: ["media-copy"] },
7061
- design: {
7062
- sectionSurface: "base",
7063
- contentFrame: plainFrame,
7064
- itemSurface: "none",
7065
- composition: {
7066
- kind: "intro",
7067
- treatment: "portrait-bio"
7068
- }
7069
- }
7070
- }),
7071
- defineBlockAppearancePreset({
7072
- kind: "block-design",
7073
- id: "offerings-preview-default-cards",
7074
- target: "offerings",
7075
- label: "Default offering cards",
7076
- blockKinds: ["block.offerings-preview"],
7077
- design: {
7078
- sectionSurface: "base",
7079
- contentFrame: plainFrame,
7080
- itemSurface: "default"
7081
- }
7082
- }),
7083
- defineBlockAppearancePreset({
7084
- kind: "block-design",
7085
- id: "offerings-preview-secondary-cards",
7086
- target: "offerings",
7087
- label: "Secondary offering cards",
7088
- blockKinds: ["block.offerings-preview"],
7089
- design: {
7090
- sectionSurface: "muted-band",
7091
- contentFrame: plainFrame,
7092
- itemSurface: "inset"
7093
- }
7094
- }),
7095
- defineBlockAppearancePreset({
7096
- kind: "block-design",
7097
- id: "offerings-preview-non-carded",
7098
- target: "offerings",
7099
- label: "Non-carded offerings",
7100
- blockKinds: ["block.offerings-preview"],
7101
- design: {
7102
- sectionSurface: "muted-band",
7103
- contentFrame: plainFrame,
7104
- itemSurface: "editorial"
7105
- }
7106
- }),
7107
- defineBlockAppearancePreset({
7108
- kind: "block-design",
7109
- id: "offerings-preview-paired-feature-cards",
7110
- target: "offerings",
7111
- label: "Paired feature cards",
7112
- blockKinds: ["block.offerings-preview"],
7113
- constraints: { layoutVariantKeys: ["cards"] },
7114
- design: {
7115
- sectionSurface: "base",
7116
- contentFrame: plainFrame,
7117
- itemSurface: "none"
7118
- }
7119
- }),
7120
- defineBlockAppearancePreset({
7121
- kind: "block-design",
7122
- id: "offerings-preview-open-editorial-columns",
7123
- target: "offerings",
7124
- label: "Open editorial columns",
7125
- blockKinds: ["block.offerings-preview"],
7126
- constraints: { layoutVariantKeys: ["cards"] },
7127
- design: {
7128
- sectionSurface: "base",
7129
- contentFrame: plainFrame,
7130
- itemSurface: "none"
7131
- }
7132
- }),
7133
- defineBlockAppearancePreset({
7134
- kind: "block-design",
7135
- id: "offerings-preview-joined-programme-panel",
7136
- target: "offerings",
7137
- label: "Joined programme panel",
7138
- blockKinds: ["block.offerings-preview"],
7139
- constraints: { layoutVariantKeys: ["cards"] },
7140
- design: {
7141
- sectionSurface: "base",
7142
- contentFrame: plainFrame,
7143
- itemSurface: "none"
7144
- }
7145
- }),
7146
- defineBlockAppearancePreset({
7147
- kind: "block-design",
7148
- id: "feature-cards-raised-rule",
7149
- target: "feature-cards",
7150
- label: "Raised cards with rule",
7151
- blockKinds: ["block.feature-cards"],
7152
- design: {
7153
- sectionSurface: "base",
7154
- contentFrame: plainFrame,
7155
- itemSurface: "raised"
7156
- }
7157
- }),
7158
- defineBlockAppearancePreset({
7159
- kind: "block-design",
7160
- id: "feature-cards-bold-colors",
7161
- target: "feature-cards",
7162
- label: "Bold colour-blocked cards",
7163
- blockKinds: ["block.feature-cards"],
7164
- design: {
7165
- sectionSurface: "base",
7166
- contentFrame: plainFrame,
7167
- itemSurface: "color-blocked"
7168
- }
7169
- }),
7170
- defineBlockAppearancePreset({
7171
- kind: "block-design",
7172
- id: "feature-cards-editorial-columns",
7173
- target: "feature-cards",
7174
- label: "Editorial open columns",
7175
- blockKinds: ["block.feature-cards"],
7176
- design: {
7177
- sectionSurface: "base",
7178
- contentFrame: plainFrame,
7179
- itemSurface: "editorial"
7180
- }
7181
- }),
7182
- defineBlockAppearancePreset({
7183
- kind: "block-design",
7184
- id: "feature-cards-asymmetric-emphasis",
7185
- target: "feature-cards",
7186
- label: "Asymmetric emphasis pair",
7187
- blockKinds: ["block.feature-cards"],
7188
- constraints: { layoutFamilies: ["grid"] },
7189
- design: {
7190
- sectionSurface: "base",
7191
- contentFrame: plainFrame,
7192
- itemSurface: "none",
7193
- composition: {
7194
- kind: "feature-cards",
7195
- treatment: "asymmetric-emphasis"
7196
- }
7197
- }
7198
- }),
7199
- defineBlockAppearancePreset({
7200
- kind: "block-design",
7201
- id: "feature-cards-framed-programme",
7202
- target: "feature-cards",
7203
- label: "Framed programme cards",
7204
- blockKinds: ["block.feature-cards"],
7205
- constraints: { layoutFamilies: ["grid"] },
7206
- design: {
7207
- sectionSurface: "brand-depth-band",
7208
- contentFrame: plainFrame,
7209
- itemSurface: "inset",
7210
- composition: {
7211
- kind: "feature-cards",
7212
- treatment: "framed-programme"
7213
- }
7214
- }
7215
- }),
7216
- defineBlockAppearancePreset({
7217
- kind: "block-design",
7218
- id: "feature-cards-soft-panels",
7219
- target: "feature-cards",
7220
- label: "Soft tinted panels",
7221
- blockKinds: ["block.feature-cards"],
7222
- design: {
7223
- sectionSurface: "base",
7224
- contentFrame: plainFrame,
7225
- itemSurface: "inset"
7226
- }
7227
- }),
7228
- defineBlockAppearancePreset({
7229
- kind: "block-design",
7230
- id: "feature-cards-editorial-diptych",
7231
- target: "feature-cards",
7232
- label: "Editorial diptych",
7233
- blockKinds: ["block.feature-cards"],
7234
- constraints: { layoutVariantKeys: ["editorial-diptych"] },
7235
- design: {
7236
- sectionSurface: "base",
7237
- contentFrame: plainFrame,
7238
- itemSurface: "flat"
7239
- }
7240
- }),
7241
- defineBlockAppearancePreset({
7242
- kind: "block-design",
7243
- id: "feature-cards-editorial-pathways",
7244
- target: "feature-cards",
7245
- label: "Editorial pathways",
7246
- blockKinds: ["block.feature-cards"],
7247
- constraints: { layoutVariantKeys: ["editorial-pathways"] },
7248
- design: {
7249
- sectionSurface: "base",
7250
- contentFrame: plainFrame,
7251
- itemSurface: "flat"
7252
- }
7253
- }),
7254
- defineBlockAppearancePreset({
7255
- kind: "block-design",
7256
- id: "feature-cards-photo-tiles",
7257
- target: "feature-cards",
7258
- label: "Photo tiles",
7259
- blockKinds: ["block.feature-cards"],
7260
- design: {
7261
- sectionSurface: "base",
7262
- contentFrame: plainFrame,
7263
- itemSurface: "raised"
7264
- }
7265
- }),
7266
- defineBlockAppearancePreset({
7267
- kind: "block-design",
7268
- id: "events-lined-panel",
7269
- target: "events",
7270
- label: "Raised event panel",
7271
- blockKinds: ["block.event-calendar", "block.event-listing"],
7272
- design: {
7273
- sectionSurface: "base",
7274
- contentFrame: panelFrame("raised"),
7275
- itemSurface: "none"
7276
- }
7277
- }),
7278
- defineBlockAppearancePreset({
7279
- kind: "block-design",
7280
- id: "events-ruled-register",
7281
- target: "events",
7282
- label: "Ruled event register",
7283
- blockKinds: ["block.event-calendar", "block.event-listing"],
7284
- design: {
7285
- sectionSurface: "brand-depth-band",
7286
- contentFrame: plainFrame,
7287
- itemSurface: "none",
7288
- eventListTreatment: "ruled-register"
7289
- }
7290
- }),
7291
- defineBlockAppearancePreset({
7292
- kind: "block-design",
7293
- id: "events-editorial-register",
7294
- target: "events",
7295
- label: "Editorial event register",
7296
- blockKinds: ["block.event-calendar", "block.event-listing"],
7297
- design: {
7298
- sectionSurface: "base",
7299
- contentFrame: plainFrame,
7300
- itemSurface: "none",
7301
- eventListTreatment: "editorial-register"
7302
- }
7303
- }),
7304
- defineBlockAppearancePreset({
7305
- kind: "block-design",
7306
- id: "events-dense-index",
7307
- target: "events",
7308
- label: "Dense event index",
7309
- blockKinds: ["block.event-calendar", "block.event-listing"],
7310
- design: {
7311
- sectionSurface: "accent-band",
7312
- contentFrame: plainFrame,
7313
- itemSurface: "none",
7314
- eventListTreatment: "dense-index"
7315
- }
7316
- }),
7317
- defineBlockAppearancePreset({
7318
- kind: "block-design",
7319
- id: "schedule-details-brand-depth",
7320
- target: "events",
7321
- label: "Brand-depth schedule details",
7322
- blockKinds: ["block.event-details", "block.course-details"],
7323
- design: {
7324
- sectionSurface: "brand-depth-band",
7325
- contentFrame: plainFrame,
7326
- itemSurface: "none",
7327
- tileTreatment: "brand-depth"
7328
- }
7329
- }),
7330
- defineBlockAppearancePreset({
7331
- kind: "block-design",
7332
- id: "media-text-flush-feature",
7333
- target: "media-text",
7334
- label: "Flush media feature",
7335
- blockKinds: ["block.media-text"],
7336
- design: {
7337
- sectionSurface: "muted-band",
7338
- contentFrame: flushPanelFrame({ bleed: "start" }),
7339
- itemSurface: "none"
7340
- }
7341
- }),
7342
- defineBlockAppearancePreset({
7343
- kind: "block-design",
7344
- id: "testimonials-simple-cards",
7345
- target: "testimonials",
7346
- label: "Simple testimonial cards",
7347
- blockKinds: ["block.testimonials"],
7348
- design: {
7349
- sectionSurface: "base",
7350
- contentFrame: plainFrame,
7351
- itemSurface: "default"
7352
- }
7353
- }),
7354
- defineBlockAppearancePreset({
7355
- kind: "block-design",
7356
- id: "testimonials-raised-panel",
7357
- target: "testimonials",
7358
- label: "Raised testimonial panel",
7359
- blockKinds: ["block.testimonials"],
7360
- design: {
7361
- sectionSurface: "muted-band",
7362
- contentFrame: panelFrame("raised"),
7363
- itemSurface: "raised"
7364
- }
7365
- }),
7366
- defineBlockAppearancePreset({
7367
- kind: "block-design",
7368
- id: "testimonials-accent-panel",
7369
- target: "testimonials",
7370
- label: "Accent testimonial panel",
7371
- blockKinds: ["block.testimonials"],
7372
- design: {
7373
- sectionSurface: "accent-band",
7374
- contentFrame: panelFrame("raised"),
7375
- itemSurface: "raised"
7376
- }
7377
- }),
7378
- defineBlockAppearancePreset({
7379
- kind: "block-design",
7380
- id: "testimonials-default-cards",
7381
- target: "testimonials",
7382
- label: "Default cards",
7383
- blockKinds: ["block.testimonials"],
7384
- design: {
7385
- sectionSurface: "base",
7386
- contentFrame: plainFrame,
7387
- itemSurface: "none",
7388
- testimonialCardTreatment: "default"
7389
- }
7390
- }),
7391
- defineBlockAppearancePreset({
7392
- kind: "block-design",
7393
- id: "testimonials-statement-cards",
7394
- target: "testimonials",
7395
- label: "Statement cards",
7396
- blockKinds: ["block.testimonials"],
7397
- design: {
7398
- sectionSurface: "accent-band",
7399
- contentFrame: plainFrame,
7400
- itemSurface: "raised",
7401
- testimonialCardTreatment: "statement"
7402
- }
7403
- }),
7404
- defineBlockAppearancePreset({
7405
- kind: "block-design",
7406
- id: "testimonials-brand-statement-cards",
7407
- target: "testimonials",
7408
- label: "Brand statement cards",
7409
- blockKinds: ["block.testimonials"],
7410
- design: {
7411
- sectionSurface: "brand-depth-band",
7412
- contentFrame: plainFrame,
7413
- itemSurface: "raised",
7414
- testimonialCardTreatment: "statement"
7415
- }
7416
- }),
7417
- defineBlockAppearancePreset({
7418
- kind: "block-design",
7419
- id: "testimonials-non-carded",
7420
- target: "testimonials",
7421
- label: "Non-carded",
7422
- blockKinds: ["block.testimonials"],
7423
- design: {
7424
- sectionSurface: "muted-band",
7425
- contentFrame: plainFrame,
7426
- itemSurface: "none",
7427
- testimonialCardTreatment: "non-carded"
7428
- }
7429
- }),
7430
- defineBlockAppearancePreset({
7431
- kind: "block-design",
7432
- id: "testimonials-evergreen-lead",
7433
- target: "testimonials",
7434
- label: "Evergreen lead",
7435
- blockKinds: ["block.testimonials"],
7436
- constraints: { layoutVariantKeys: ["featured-editorial"] },
7437
- design: {
7438
- sectionSurface: "base",
7439
- contentFrame: plainFrame,
7440
- itemSurface: "none"
7441
- }
7442
- }),
7443
- defineBlockAppearancePreset({
7444
- kind: "block-design",
7445
- id: "testimonials-room-and-response",
7446
- target: "testimonials",
7447
- label: "Room and response",
7448
- blockKinds: ["block.testimonials"],
7449
- constraints: { layoutVariantKeys: ["featured-editorial"] },
7450
- design: {
7451
- sectionSurface: "base",
7452
- contentFrame: plainFrame,
7453
- itemSurface: "none"
7454
- }
7455
- }),
7456
- defineBlockAppearancePreset({
7457
- kind: "block-design",
7458
- id: "testimonials-open-floor",
7459
- target: "testimonials",
7460
- label: "Open floor",
7461
- blockKinds: ["block.testimonials"],
7462
- constraints: { layoutVariantKeys: ["featured-editorial"] },
7463
- design: {
7464
- sectionSurface: "base",
7465
- contentFrame: plainFrame,
7466
- itemSurface: "none"
7467
- }
7468
- }),
7469
- defineBlockAppearancePreset({
7470
- kind: "block-design",
7471
- id: "faq-base-accordion",
7472
- target: "faq",
7473
- label: "Base accordion FAQ",
7474
- blockKinds: ["block.faq"],
7475
- design: {
7476
- sectionSurface: "base",
7477
- contentFrame: plainFrame,
7478
- itemSurface: "default"
7479
- }
7480
- }),
7481
- defineBlockAppearancePreset({
7482
- kind: "block-design",
7483
- id: "faq-contained-help",
7484
- target: "faq",
7485
- label: "Contained help panel",
7486
- blockKinds: ["block.faq"],
7487
- design: {
7488
- sectionSurface: "muted-band",
7489
- contentFrame: panelFrame("inset"),
7490
- itemSurface: "default"
7491
- }
7492
- }),
7493
- defineBlockAppearancePreset({
7494
- kind: "block-design",
7495
- id: "contact-form-panel",
7496
- target: "contact-form",
7497
- label: "Raised form panel",
7498
- blockKinds: ["block.form"],
7499
- design: {
7500
- sectionSurface: "muted-band",
7501
- contentFrame: panelFrame("raised"),
7502
- itemSurface: "none"
7503
- }
7504
- }),
7505
- defineBlockAppearancePreset({
7506
- kind: "block-design",
7507
- id: "cta-accent-band",
7508
- target: "cta",
7509
- label: "Accent CTA band",
7510
- blockKinds: ["block.cta-full"],
7511
- design: {
7512
- sectionSurface: "accent-band",
7513
- contentFrame: plainFrame,
7514
- itemSurface: "none",
7515
- eyebrowTreatment: "accent"
7516
- }
7517
- })
7518
- ]];
6967
+ }],
6968
+ design: {
6969
+ sectionSurface: "hero-image",
6970
+ contentFrame: plainFrame,
6971
+ itemSurface: "none",
6972
+ sectionHeight: "immersive",
6973
+ heroComposition: "center",
6974
+ heroTypographyScale: "poster",
6975
+ imageSurfaceTreatment: {
6976
+ kind: "brand-scrim",
6977
+ token: "primary",
6978
+ intensity: "strong"
6979
+ }
6980
+ }
6981
+ }), defineBlockAppearancePreset({
6982
+ id: "hero-brand-scrim",
6983
+ target: "hero",
6984
+ label: "Brand scrim image hero",
6985
+ blockKinds: ["block.hero"],
6986
+ constraints: { layoutFamilies: ["centered", "compact"] },
6987
+ optionGroups: brandScrimOptionGroups,
6988
+ layoutPatches: microBannerLayoutPatches,
6989
+ design: {
6990
+ sectionSurface: "hero-image",
6991
+ contentFrame: plainFrame,
6992
+ itemSurface: "none",
6993
+ sectionHeight: "immersive",
6994
+ heroComposition: "center",
6995
+ heroTypographyScale: "display",
6996
+ imageSurfaceTreatment: {
6997
+ kind: "brand-scrim",
6998
+ token: "primary"
6999
+ }
7000
+ }
7001
+ }), defineBlockAppearancePreset({
7002
+ id: "hero-brand-scrim-fixed-frame",
7003
+ target: "hero",
7004
+ label: "Fixed-frame brand scrim hero",
7005
+ blockKinds: ["block.hero"],
7006
+ constraints: { layoutFamilies: ["centered", "compact"] },
7007
+ optionGroups: brandScrimOptionGroups,
7008
+ layoutPatches: microBannerLayoutPatches,
7009
+ design: {
7010
+ sectionSurface: "hero-image",
7011
+ contentFrame: plainFrame,
7012
+ itemSurface: "none",
7013
+ sectionHeight: "immersive",
7014
+ heroComposition: "center",
7015
+ heroTypographyScale: "display",
7016
+ imageSurfaceTreatment: {
7017
+ kind: "brand-scrim",
7018
+ token: "primary"
7019
+ },
7020
+ imageSurfaceMotion: "fixed-frame",
7021
+ eyebrowTreatment: "accent-pill-bounce"
7022
+ }
7023
+ }), defineBlockAppearancePreset({
7024
+ id: "hero-brand-depth-expressive",
7025
+ target: "hero",
7026
+ label: "Expressive brand-depth hero",
7027
+ blockKinds: ["block.hero"],
7028
+ constraints: { layoutFamilies: ["centered", "compact"] },
7029
+ design: {
7030
+ sectionSurface: "brand-depth-band",
7031
+ contentFrame: plainFrame,
7032
+ itemSurface: "none",
7033
+ heroComposition: "center",
7034
+ heroTypographyScale: "editorial",
7035
+ eyebrowTreatment: "accent-pill-bounce"
7036
+ }
7037
+ }), defineBlockAppearancePreset({
7038
+ id: "hero-contained-intro",
7039
+ target: "hero",
7040
+ label: "Contained intro hero",
7041
+ blockKinds: ["block.hero"],
7042
+ design: {
7043
+ sectionSurface: "muted-band",
7044
+ contentFrame: panelFrame("inset"),
7045
+ itemSurface: "none",
7046
+ heroComposition: "center",
7047
+ heroTypographyScale: "editorial"
7048
+ }
7049
+ }), defineBlockAppearancePreset({
7050
+ id: "hero-split-editorial",
7051
+ target: "hero",
7052
+ label: "Editorial split hero",
7053
+ blockKinds: ["block.hero"],
7054
+ constraints: { layoutFamilies: ["split"] },
7055
+ design: {
7056
+ sectionSurface: "base",
7057
+ contentFrame: plainFrame,
7058
+ itemSurface: "none",
7059
+ heroTypographyScale: "editorial"
7060
+ }
7061
+ }), defineBlockAppearancePreset({
7062
+ id: "hero-split-brand",
7063
+ target: "hero",
7064
+ label: "Brand split hero",
7065
+ blockKinds: ["block.hero"],
7066
+ constraints: { layoutFamilies: ["split"] },
7067
+ design: {
7068
+ sectionSurface: "brand-depth-band",
7069
+ contentFrame: plainFrame,
7070
+ itemSurface: "none",
7071
+ heroTypographyScale: "display",
7072
+ eyebrowTreatment: "accent-pill-bounce"
7073
+ }
7074
+ }), defineBlockAppearancePreset({
7075
+ id: "hero-split-soft-panel",
7076
+ target: "hero",
7077
+ label: "Soft panel split hero",
7078
+ blockKinds: ["block.hero"],
7079
+ constraints: { layoutFamilies: ["split"] },
7080
+ design: {
7081
+ sectionSurface: "muted-band",
7082
+ contentFrame: panelFrame("raised"),
7083
+ itemSurface: "none",
7084
+ heroTypographyScale: "editorial"
7085
+ }
7086
+ }), defineBlockAppearancePreset({
7087
+ id: "hero-split-accent",
7088
+ target: "hero",
7089
+ label: "Accent split hero",
7090
+ blockKinds: ["block.hero"],
7091
+ constraints: { layoutFamilies: ["split"] },
7092
+ design: {
7093
+ sectionSurface: "accent-band",
7094
+ contentFrame: panelFrame("raised"),
7095
+ itemSurface: "none",
7096
+ heroTypographyScale: "display"
7097
+ }
7098
+ }), defineBlockAppearancePreset({
7099
+ id: "intro-editorial-statement",
7100
+ target: "intro",
7101
+ label: "Editorial intro statement",
7102
+ blockKinds: ["block.intro"],
7103
+ constraints: { layoutVariantKeys: ["centered-copy", "statement-copy"] },
7104
+ design: {
7105
+ sectionSurface: "base",
7106
+ contentFrame: plainFrame,
7107
+ itemSurface: "none",
7108
+ composition: {
7109
+ kind: "intro",
7110
+ treatment: "editorial-statement"
7111
+ }
7112
+ }
7113
+ }), defineBlockAppearancePreset({
7114
+ id: "intro-portrait-bio",
7115
+ target: "intro",
7116
+ label: "Portrait and bio",
7117
+ blockKinds: ["block.intro"],
7118
+ constraints: { layoutVariantKeys: ["media-copy"] },
7119
+ design: {
7120
+ sectionSurface: "base",
7121
+ contentFrame: plainFrame,
7122
+ itemSurface: "none",
7123
+ composition: {
7124
+ kind: "intro",
7125
+ treatment: "portrait-bio"
7126
+ }
7127
+ }
7128
+ }), defineBlockAppearancePreset({
7129
+ id: "offerings-preview-default-cards",
7130
+ target: "offerings",
7131
+ label: "Default offering cards",
7132
+ blockKinds: ["block.offerings-preview"],
7133
+ design: {
7134
+ sectionSurface: "base",
7135
+ contentFrame: plainFrame,
7136
+ itemSurface: "default"
7137
+ }
7138
+ }), defineBlockAppearancePreset({
7139
+ id: "offerings-preview-secondary-cards",
7140
+ target: "offerings",
7141
+ label: "Secondary offering cards",
7142
+ blockKinds: ["block.offerings-preview"],
7143
+ design: {
7144
+ sectionSurface: "muted-band",
7145
+ contentFrame: plainFrame,
7146
+ itemSurface: "inset"
7147
+ }
7148
+ }), defineBlockAppearancePreset({
7149
+ id: "offerings-preview-non-carded",
7150
+ target: "offerings",
7151
+ label: "Non-carded offerings",
7152
+ blockKinds: ["block.offerings-preview"],
7153
+ design: {
7154
+ sectionSurface: "muted-band",
7155
+ contentFrame: plainFrame,
7156
+ itemSurface: "editorial"
7157
+ }
7158
+ }), defineBlockAppearancePreset({
7159
+ id: "offerings-preview-paired-feature-cards",
7160
+ target: "offerings",
7161
+ label: "Paired feature cards",
7162
+ blockKinds: ["block.offerings-preview"],
7163
+ constraints: { layoutVariantKeys: ["cards"] },
7164
+ design: {
7165
+ sectionSurface: "base",
7166
+ contentFrame: plainFrame,
7167
+ itemSurface: "none"
7168
+ }
7169
+ }), defineBlockAppearancePreset({
7170
+ id: "offerings-preview-open-editorial-columns",
7171
+ target: "offerings",
7172
+ label: "Open editorial columns",
7173
+ blockKinds: ["block.offerings-preview"],
7174
+ constraints: { layoutVariantKeys: ["cards"] },
7175
+ design: {
7176
+ sectionSurface: "base",
7177
+ contentFrame: plainFrame,
7178
+ itemSurface: "none"
7179
+ }
7180
+ }), defineBlockAppearancePreset({
7181
+ id: "offerings-preview-joined-programme-panel",
7182
+ target: "offerings",
7183
+ label: "Joined programme panel",
7184
+ blockKinds: ["block.offerings-preview"],
7185
+ constraints: { layoutVariantKeys: ["cards"] },
7186
+ design: {
7187
+ sectionSurface: "base",
7188
+ contentFrame: plainFrame,
7189
+ itemSurface: "none"
7190
+ }
7191
+ }), defineBlockAppearancePreset({
7192
+ id: "feature-cards-raised-rule",
7193
+ target: "feature-cards",
7194
+ label: "Raised cards with rule",
7195
+ blockKinds: ["block.feature-cards"],
7196
+ design: {
7197
+ sectionSurface: "base",
7198
+ contentFrame: plainFrame,
7199
+ itemSurface: "raised"
7200
+ }
7201
+ }), defineBlockAppearancePreset({
7202
+ id: "feature-cards-bold-colors",
7203
+ target: "feature-cards",
7204
+ label: "Bold colour-blocked cards",
7205
+ blockKinds: ["block.feature-cards"],
7206
+ design: {
7207
+ sectionSurface: "base",
7208
+ contentFrame: plainFrame,
7209
+ itemSurface: "color-blocked"
7210
+ }
7211
+ }), defineBlockAppearancePreset({
7212
+ id: "feature-cards-editorial-columns",
7213
+ target: "feature-cards",
7214
+ label: "Editorial open columns",
7215
+ blockKinds: ["block.feature-cards"],
7216
+ design: {
7217
+ sectionSurface: "base",
7218
+ contentFrame: plainFrame,
7219
+ itemSurface: "editorial"
7220
+ }
7221
+ }), defineBlockAppearancePreset({
7222
+ id: "feature-cards-asymmetric-emphasis",
7223
+ target: "feature-cards",
7224
+ label: "Asymmetric emphasis pair",
7225
+ blockKinds: ["block.feature-cards"],
7226
+ constraints: { layoutFamilies: ["grid"] },
7227
+ design: {
7228
+ sectionSurface: "base",
7229
+ contentFrame: plainFrame,
7230
+ itemSurface: "none",
7231
+ composition: {
7232
+ kind: "feature-cards",
7233
+ treatment: "asymmetric-emphasis"
7234
+ }
7235
+ }
7236
+ }), defineBlockAppearancePreset({
7237
+ id: "feature-cards-framed-programme",
7238
+ target: "feature-cards",
7239
+ label: "Framed programme cards",
7240
+ blockKinds: ["block.feature-cards"],
7241
+ constraints: { layoutFamilies: ["grid"] },
7242
+ design: {
7243
+ sectionSurface: "brand-depth-band",
7244
+ contentFrame: plainFrame,
7245
+ itemSurface: "inset",
7246
+ composition: {
7247
+ kind: "feature-cards",
7248
+ treatment: "framed-programme"
7249
+ }
7250
+ }
7251
+ }), defineBlockAppearancePreset({
7252
+ id: "feature-cards-soft-panels",
7253
+ target: "feature-cards",
7254
+ label: "Soft tinted panels",
7255
+ blockKinds: ["block.feature-cards"],
7256
+ design: {
7257
+ sectionSurface: "base",
7258
+ contentFrame: plainFrame,
7259
+ itemSurface: "inset"
7260
+ }
7261
+ }), defineBlockAppearancePreset({
7262
+ id: "feature-cards-editorial-diptych",
7263
+ target: "feature-cards",
7264
+ label: "Editorial diptych",
7265
+ blockKinds: ["block.feature-cards"],
7266
+ constraints: { layoutVariantKeys: ["editorial-diptych"] },
7267
+ design: {
7268
+ sectionSurface: "base",
7269
+ contentFrame: plainFrame,
7270
+ itemSurface: "flat"
7271
+ }
7272
+ }), defineBlockAppearancePreset({
7273
+ id: "feature-cards-editorial-pathways",
7274
+ target: "feature-cards",
7275
+ label: "Editorial pathways",
7276
+ blockKinds: ["block.feature-cards"],
7277
+ constraints: { layoutVariantKeys: ["editorial-pathways"] },
7278
+ design: {
7279
+ sectionSurface: "base",
7280
+ contentFrame: plainFrame,
7281
+ itemSurface: "flat"
7282
+ }
7283
+ }), defineBlockAppearancePreset({
7284
+ id: "feature-cards-photo-tiles",
7285
+ target: "feature-cards",
7286
+ label: "Photo tiles",
7287
+ blockKinds: ["block.feature-cards"],
7288
+ design: {
7289
+ sectionSurface: "base",
7290
+ contentFrame: plainFrame,
7291
+ itemSurface: "raised"
7292
+ }
7293
+ }), defineBlockAppearancePreset({
7294
+ id: "events-lined-panel",
7295
+ target: "events",
7296
+ label: "Raised event panel",
7297
+ blockKinds: ["block.event-calendar", "block.event-listing"],
7298
+ design: {
7299
+ sectionSurface: "base",
7300
+ contentFrame: panelFrame("raised"),
7301
+ itemSurface: "none"
7302
+ }
7303
+ }), defineBlockAppearancePreset({
7304
+ id: "events-ruled-register",
7305
+ target: "events",
7306
+ label: "Ruled event register",
7307
+ blockKinds: ["block.event-calendar", "block.event-listing"],
7308
+ design: {
7309
+ sectionSurface: "brand-depth-band",
7310
+ contentFrame: plainFrame,
7311
+ itemSurface: "none",
7312
+ eventListTreatment: "ruled-register"
7313
+ }
7314
+ }), defineBlockAppearancePreset({
7315
+ id: "events-editorial-register",
7316
+ target: "events",
7317
+ label: "Editorial event register",
7318
+ blockKinds: ["block.event-calendar", "block.event-listing"],
7319
+ design: {
7320
+ sectionSurface: "base",
7321
+ contentFrame: plainFrame,
7322
+ itemSurface: "none",
7323
+ eventListTreatment: "editorial-register"
7324
+ }
7325
+ }), defineBlockAppearancePreset({
7326
+ id: "events-dense-index",
7327
+ target: "events",
7328
+ label: "Dense event index",
7329
+ blockKinds: ["block.event-calendar", "block.event-listing"],
7330
+ design: {
7331
+ sectionSurface: "accent-band",
7332
+ contentFrame: plainFrame,
7333
+ itemSurface: "none",
7334
+ eventListTreatment: "dense-index"
7335
+ }
7336
+ }), defineBlockAppearancePreset({
7337
+ id: "schedule-details-brand-depth",
7338
+ target: "events",
7339
+ label: "Brand-depth schedule details",
7340
+ blockKinds: ["block.event-details", "block.course-details"],
7341
+ design: {
7342
+ sectionSurface: "brand-depth-band",
7343
+ contentFrame: plainFrame,
7344
+ itemSurface: "none",
7345
+ tileTreatment: "brand-depth"
7346
+ }
7347
+ }), defineBlockAppearancePreset({
7348
+ id: "media-text-flush-feature",
7349
+ target: "media-text",
7350
+ label: "Flush media feature",
7351
+ blockKinds: ["block.media-text"],
7352
+ design: {
7353
+ sectionSurface: "muted-band",
7354
+ contentFrame: flushPanelFrame({ bleed: "start" }),
7355
+ itemSurface: "none"
7356
+ }
7357
+ }), defineBlockAppearancePreset({
7358
+ id: "testimonials-simple-cards",
7359
+ target: "testimonials",
7360
+ label: "Simple testimonial cards",
7361
+ blockKinds: ["block.testimonials"],
7362
+ design: {
7363
+ sectionSurface: "base",
7364
+ contentFrame: plainFrame,
7365
+ itemSurface: "default"
7366
+ }
7367
+ }), defineBlockAppearancePreset({
7368
+ id: "testimonials-raised-panel",
7369
+ target: "testimonials",
7370
+ label: "Raised testimonial panel",
7371
+ blockKinds: ["block.testimonials"],
7372
+ design: {
7373
+ sectionSurface: "muted-band",
7374
+ contentFrame: panelFrame("raised"),
7375
+ itemSurface: "raised"
7376
+ }
7377
+ }), defineBlockAppearancePreset({
7378
+ id: "testimonials-accent-panel",
7379
+ target: "testimonials",
7380
+ label: "Accent testimonial panel",
7381
+ blockKinds: ["block.testimonials"],
7382
+ design: {
7383
+ sectionSurface: "accent-band",
7384
+ contentFrame: panelFrame("raised"),
7385
+ itemSurface: "raised"
7386
+ }
7387
+ }), defineBlockAppearancePreset({
7388
+ id: "testimonials-default-cards",
7389
+ target: "testimonials",
7390
+ label: "Default cards",
7391
+ blockKinds: ["block.testimonials"],
7392
+ design: {
7393
+ sectionSurface: "base",
7394
+ contentFrame: plainFrame,
7395
+ itemSurface: "none",
7396
+ testimonialCardTreatment: "default"
7397
+ }
7398
+ }), defineBlockAppearancePreset({
7399
+ id: "testimonials-statement-cards",
7400
+ target: "testimonials",
7401
+ label: "Statement cards",
7402
+ blockKinds: ["block.testimonials"],
7403
+ design: {
7404
+ sectionSurface: "accent-band",
7405
+ contentFrame: plainFrame,
7406
+ itemSurface: "raised",
7407
+ testimonialCardTreatment: "statement"
7408
+ }
7409
+ }), defineBlockAppearancePreset({
7410
+ id: "testimonials-brand-statement-cards",
7411
+ target: "testimonials",
7412
+ label: "Brand statement cards",
7413
+ blockKinds: ["block.testimonials"],
7414
+ design: {
7415
+ sectionSurface: "brand-depth-band",
7416
+ contentFrame: plainFrame,
7417
+ itemSurface: "raised",
7418
+ testimonialCardTreatment: "statement"
7419
+ }
7420
+ }), defineBlockAppearancePreset({
7421
+ id: "testimonials-non-carded",
7422
+ target: "testimonials",
7423
+ label: "Non-carded",
7424
+ blockKinds: ["block.testimonials"],
7425
+ design: {
7426
+ sectionSurface: "muted-band",
7427
+ contentFrame: plainFrame,
7428
+ itemSurface: "none",
7429
+ testimonialCardTreatment: "non-carded"
7430
+ }
7431
+ }), defineBlockAppearancePreset({
7432
+ id: "testimonials-evergreen-lead",
7433
+ target: "testimonials",
7434
+ label: "Evergreen lead",
7435
+ blockKinds: ["block.testimonials"],
7436
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
7437
+ design: {
7438
+ sectionSurface: "base",
7439
+ contentFrame: plainFrame,
7440
+ itemSurface: "none"
7441
+ }
7442
+ }), defineBlockAppearancePreset({
7443
+ id: "testimonials-room-and-response",
7444
+ target: "testimonials",
7445
+ label: "Room and response",
7446
+ blockKinds: ["block.testimonials"],
7447
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
7448
+ design: {
7449
+ sectionSurface: "base",
7450
+ contentFrame: plainFrame,
7451
+ itemSurface: "none"
7452
+ }
7453
+ }), defineBlockAppearancePreset({
7454
+ id: "testimonials-open-floor",
7455
+ target: "testimonials",
7456
+ label: "Open floor",
7457
+ blockKinds: ["block.testimonials"],
7458
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
7459
+ design: {
7460
+ sectionSurface: "base",
7461
+ contentFrame: plainFrame,
7462
+ itemSurface: "none"
7463
+ }
7464
+ }), defineBlockAppearancePreset({
7465
+ id: "faq-base-accordion",
7466
+ target: "faq",
7467
+ label: "Base accordion FAQ",
7468
+ blockKinds: ["block.faq"],
7469
+ design: {
7470
+ sectionSurface: "base",
7471
+ contentFrame: plainFrame,
7472
+ itemSurface: "default"
7473
+ }
7474
+ }), defineBlockAppearancePreset({
7475
+ id: "faq-contained-help",
7476
+ target: "faq",
7477
+ label: "Contained help panel",
7478
+ blockKinds: ["block.faq"],
7479
+ design: {
7480
+ sectionSurface: "muted-band",
7481
+ contentFrame: panelFrame("inset"),
7482
+ itemSurface: "default"
7483
+ }
7484
+ }), defineBlockAppearancePreset({
7485
+ id: "contact-form-panel",
7486
+ target: "contact-form",
7487
+ label: "Raised form panel",
7488
+ blockKinds: ["block.form"],
7489
+ design: {
7490
+ sectionSurface: "muted-band",
7491
+ contentFrame: panelFrame("raised"),
7492
+ itemSurface: "none"
7493
+ }
7494
+ }), defineBlockAppearancePreset({
7495
+ id: "cta-accent-band",
7496
+ target: "cta",
7497
+ label: "Accent CTA band",
7498
+ blockKinds: ["block.cta-full"],
7499
+ design: {
7500
+ sectionSurface: "accent-band",
7501
+ contentFrame: plainFrame,
7502
+ itemSurface: "none",
7503
+ eyebrowTreatment: "accent"
7504
+ }
7505
+ });
7519
7506
  //#endregion
7520
7507
  //#region ../theme-core/src/site-styles/headerCtaVariants.ts
7521
7508
  function hasButtonVariant(theme, variantId) {
@@ -7596,6 +7583,27 @@ function uniqueStrings(values) {
7596
7583
  return Array.from(new Set(values));
7597
7584
  }
7598
7585
  //#endregion
7586
+ //#region ../theme-core/src/site-styles/headerInteractionPalette.ts
7587
+ const clearSplitInteractionPalette = defineLookOptionGroup({
7588
+ id: "interaction-palette",
7589
+ label: "Hover colour",
7590
+ defaultOptionId: "accent",
7591
+ options: [
7592
+ {
7593
+ id: "accent",
7594
+ label: "Accent"
7595
+ },
7596
+ {
7597
+ id: "primary",
7598
+ label: "Primary"
7599
+ },
7600
+ {
7601
+ id: "secondary",
7602
+ label: "Secondary"
7603
+ }
7604
+ ]
7605
+ });
7606
+ //#endregion
7599
7607
  //#region ../theme-core/src/site-styles/headerLooks.ts
7600
7608
  function asHeaderLookId(value) {
7601
7609
  return value;
@@ -7729,7 +7737,7 @@ const overlayLogoAccommodations = [
7729
7737
  * optional nested styling fields that would otherwise leak from another Look.
7730
7738
  */
7731
7739
  function baseHeader(theme) {
7732
- const { navLinkStyle: _navLinkStyle, navFontRole: _navFontRole, navTypography: _navTypography, navTextSize: _navTextSize, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
7740
+ const { navLinkStyle: _navLinkStyle, navFontRole: _navFontRole, navTypography: _navTypography, navTextSize: _navTextSize, interactionPalette: _interactionPalette, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
7733
7741
  return {
7734
7742
  ...header,
7735
7743
  navContainer: {
@@ -7744,7 +7752,6 @@ const headerLayoutCatalog = defineExactCatalog()([
7744
7752
  id: asHeaderLayoutId("classic"),
7745
7753
  label: "Classic",
7746
7754
  description: "Logo and navigation in one practical horizontal row.",
7747
- structure: "inline-classic",
7748
7755
  variant: "classic",
7749
7756
  defaultPositioning: "sticky",
7750
7757
  shrinkOnScroll: false
@@ -7753,7 +7760,6 @@ const headerLayoutCatalog = defineExactCatalog()([
7753
7760
  id: asHeaderLayoutId("centered"),
7754
7761
  label: "Centered",
7755
7762
  description: "Logo centered above a balanced navigation row.",
7756
- structure: "centered-stack",
7757
7763
  variant: "centered",
7758
7764
  defaultPositioning: "static",
7759
7765
  shrinkOnScroll: false,
@@ -7769,7 +7775,6 @@ const headerLayoutCatalog = defineExactCatalog()([
7769
7775
  id: asHeaderLayoutId("floating"),
7770
7776
  label: "Floating",
7771
7777
  description: "Detached header chrome that sits over the opening section.",
7772
- structure: "floating-shell",
7773
7778
  variant: "floating",
7774
7779
  defaultPositioning: "sticky",
7775
7780
  shrinkOnScroll: true,
@@ -7931,10 +7936,13 @@ const headerStyleCatalog = defineExactCatalog()([
7931
7936
  label: "Clear Split",
7932
7937
  description: "Floating logo with transparent navigation and no shared shell.",
7933
7938
  supportedLayoutIds: supportedLayouts(["floating"]),
7934
- navInteraction: "color-change",
7939
+ navInteraction: "pill-background",
7935
7940
  surface: "floating",
7936
- defaultDepth: "none",
7941
+ defaultDepth: "line",
7937
7942
  navTypography: "plain",
7943
+ openingForegroundTarget: "all",
7944
+ scrollTreatment: "contrast-glass",
7945
+ interactionPalette: clearSplitInteractionPalette,
7938
7946
  moods: ["editorial", "calm"]
7939
7947
  },
7940
7948
  {
@@ -7957,6 +7965,7 @@ const headerStyleCatalog = defineExactCatalog()([
7957
7965
  surface: "floating",
7958
7966
  defaultDepth: "shadow",
7959
7967
  navTypography: "quiet-caps",
7968
+ openingForegroundTarget: "brand-only",
7960
7969
  moods: ["expressive"]
7961
7970
  },
7962
7971
  {
@@ -7968,6 +7977,7 @@ const headerStyleCatalog = defineExactCatalog()([
7968
7977
  surface: "floating",
7969
7978
  defaultDepth: "shadow",
7970
7979
  navTypography: "heading",
7980
+ openingForegroundTarget: "brand-only",
7971
7981
  moods: ["calm", "editorial"]
7972
7982
  }
7973
7983
  ]);
@@ -8162,7 +8172,7 @@ function applyNavTypography(style, typography) {
8162
8172
  textSize: "sm",
8163
8173
  letterSpacing: "wider"
8164
8174
  };
8165
- default: return assertNever$1(typography, "Unhandled header nav typography");
8175
+ default: return assertNever$2(typography, "Unhandled header nav typography");
8166
8176
  }
8167
8177
  }
8168
8178
  function underlineNavLinkStyle(colorToken, underlineColorToken, typography = "plain") {
@@ -8191,7 +8201,7 @@ function themedHeaderShadow(theme) {
8191
8201
  case "low": return { elevation: "sm" };
8192
8202
  case "medium": return { elevation: "md" };
8193
8203
  case "high": return { elevation: "lg" };
8194
- default: return assertNever$1(theme.shadow.elevation, "Unhandled theme shadow elevation");
8204
+ default: return assertNever$2(theme.shadow.elevation, "Unhandled theme shadow elevation");
8195
8205
  }
8196
8206
  }
8197
8207
  function solidBrandHeader(theme) {
@@ -8469,13 +8479,6 @@ const headerLookCatalog = defineExactCatalog()([
8469
8479
  {
8470
8480
  id: asHeaderLookId("clean-base"),
8471
8481
  label: "Clean base",
8472
- visualTreatment: "solid-neutral",
8473
- layoutBehavior: "sticky",
8474
- configuration: {
8475
- structure: "inline-classic",
8476
- treatment: "solid-neutral",
8477
- behavior: "sticky"
8478
- },
8479
8482
  openingRequirement: "none",
8480
8483
  logoAccommodations: inlineClassicLogoAccommodations,
8481
8484
  compile: cleanBaseHeader
@@ -8483,13 +8486,6 @@ const headerLookCatalog = defineExactCatalog()([
8483
8486
  {
8484
8487
  id: asHeaderLookId("classic-centered-nav"),
8485
8488
  label: "Centered nav",
8486
- visualTreatment: "solid-neutral",
8487
- layoutBehavior: "sticky",
8488
- configuration: {
8489
- structure: "inline-classic",
8490
- treatment: "solid-neutral",
8491
- behavior: "sticky"
8492
- },
8493
8489
  openingRequirement: "none",
8494
8490
  maxRecommendedNavItems: 6,
8495
8491
  logoAccommodations: inlineClassicLogoAccommodations,
@@ -8498,13 +8494,6 @@ const headerLookCatalog = defineExactCatalog()([
8498
8494
  {
8499
8495
  id: asHeaderLookId("brand-solid"),
8500
8496
  label: "Brand solid",
8501
- visualTreatment: "solid-brand",
8502
- layoutBehavior: "sticky-shrink",
8503
- configuration: {
8504
- structure: "inline-classic",
8505
- treatment: "solid-brand",
8506
- behavior: "sticky-shrink"
8507
- },
8508
8497
  openingRequirement: "none",
8509
8498
  logoAccommodations: inlineClassicLogoAccommodations,
8510
8499
  compile: solidBrandHeader
@@ -8512,13 +8501,6 @@ const headerLookCatalog = defineExactCatalog()([
8512
8501
  {
8513
8502
  id: asHeaderLookId("serif-line"),
8514
8503
  label: "Serif line",
8515
- visualTreatment: "light-serif",
8516
- layoutBehavior: "sticky",
8517
- configuration: {
8518
- structure: "centered-stack",
8519
- treatment: "light-serif",
8520
- behavior: "sticky"
8521
- },
8522
8504
  openingRequirement: "none",
8523
8505
  maxRecommendedNavItems: 6,
8524
8506
  logoAccommodations: centeredLogoAccommodations,
@@ -8527,13 +8509,6 @@ const headerLookCatalog = defineExactCatalog()([
8527
8509
  {
8528
8510
  id: asHeaderLookId("centered-calm"),
8529
8511
  label: "Centered calm",
8530
- visualTreatment: "light-serif",
8531
- layoutBehavior: "normal-flow",
8532
- configuration: {
8533
- structure: "centered-stack",
8534
- treatment: "light-serif",
8535
- behavior: "normal-flow"
8536
- },
8537
8512
  openingRequirement: "none",
8538
8513
  maxRecommendedNavItems: 5,
8539
8514
  logoAccommodations: centeredLogoAccommodations,
@@ -8542,13 +8517,6 @@ const headerLookCatalog = defineExactCatalog()([
8542
8517
  {
8543
8518
  id: asHeaderLookId("practical-utility"),
8544
8519
  label: "Practical utility",
8545
- visualTreatment: "solid-neutral",
8546
- layoutBehavior: "sticky-shrink",
8547
- configuration: {
8548
- structure: "inline-classic",
8549
- treatment: "solid-neutral",
8550
- behavior: "sticky-shrink"
8551
- },
8552
8520
  openingRequirement: "none",
8553
8521
  requiresProminentCta: true,
8554
8522
  logoAccommodations: inlineClassicLogoAccommodations,
@@ -8557,13 +8525,6 @@ const headerLookCatalog = defineExactCatalog()([
8557
8525
  {
8558
8526
  id: asHeaderLookId("minimal-transparent"),
8559
8527
  label: "Minimal transparent",
8560
- visualTreatment: "minimal-transparent",
8561
- layoutBehavior: "normal-flow",
8562
- configuration: {
8563
- structure: "inline-classic",
8564
- treatment: "minimal-transparent",
8565
- behavior: "normal-flow"
8566
- },
8567
8528
  openingRequirement: "reserved-space-ok",
8568
8529
  logoAccommodations: inlineClassicLogoAccommodations,
8569
8530
  compile: minimalTransparentHeader
@@ -8571,13 +8532,6 @@ const headerLookCatalog = defineExactCatalog()([
8571
8532
  {
8572
8533
  id: asHeaderLookId("transparent-overlay"),
8573
8534
  label: "Transparent overlay",
8574
- visualTreatment: "transparent-overlay",
8575
- layoutBehavior: "fixed-overlay",
8576
- configuration: {
8577
- structure: "inline-classic",
8578
- treatment: "transparent-overlay",
8579
- behavior: "fixed-overlay"
8580
- },
8581
8535
  openingRequirement: "requires-image-hero-with-contrast-overlay",
8582
8536
  maxRecommendedNavItems: 5,
8583
8537
  logoAccommodations: overlayLogoAccommodations,
@@ -8586,24 +8540,13 @@ const headerLookCatalog = defineExactCatalog()([
8586
8540
  {
8587
8541
  id: asHeaderLookId("floating-glass"),
8588
8542
  label: "Floating glass",
8589
- visualTreatment: "floating-glass",
8590
- layoutBehavior: "fixed-floating",
8591
- configuration: {
8592
- structure: "floating-shell",
8593
- treatment: "floating-glass",
8594
- behavior: "fixed-floating"
8595
- },
8596
8543
  openingRequirement: "requires-image-hero-with-contrast-overlay",
8597
8544
  maxRecommendedNavItems: 5,
8598
8545
  logoAccommodations: overlayLogoAccommodations,
8599
8546
  compile: floatingGlassHeader
8600
8547
  }
8601
8548
  ]);
8602
- new Set(headerLookCatalog.map((look) => headerConfigurationKey(look.configuration)));
8603
8549
  new Map(headerLookCatalog.map((look) => [look.id, look]));
8604
- function headerConfigurationKey(configuration) {
8605
- return `${configuration.structure}:${configuration.treatment}:${configuration.behavior}`;
8606
- }
8607
8550
  //#endregion
8608
8551
  //#region ../theme-core/src/site-styles/sectionTransitions.ts
8609
8552
  function boundaryRuntimeMetrics(family, size, heightExpression) {
@@ -12185,28 +12128,6 @@ z$1.object({
12185
12128
  spacing: z$1.enum(themeTokenRecipeOptions.spacing),
12186
12129
  motion: z$1.enum(themeTokenRecipeOptions.motion)
12187
12130
  });
12188
- const BREAKPOINT_LG = 1024;
12189
- const BREAKPOINT_XL = 1280;
12190
- const BREAKPOINT_LG_DOWN = BREAKPOINT_LG - 1;
12191
- function mqUp(px) {
12192
- return `(min-width: ${px}px)`;
12193
- }
12194
- function mqDown(px) {
12195
- return `(max-width: ${px}px)`;
12196
- }
12197
- function mqBetween(minPx, maxPx) {
12198
- return `${mqUp(minPx)} and ${mqDown(maxPx)}`;
12199
- }
12200
- mqUp(640);
12201
- mqUp(768);
12202
- mqUp(BREAKPOINT_LG);
12203
- mqUp(BREAKPOINT_XL);
12204
- mqDown(639);
12205
- mqDown(767);
12206
- mqDown(BREAKPOINT_LG_DOWN);
12207
- mqBetween(640, BREAKPOINT_LG_DOWN);
12208
- mqDown(640);
12209
- mqDown(768);
12210
12131
  //#endregion
12211
12132
  //#region ../theme-core/src/siteChromeOverlayClearance.ts
12212
12133
  const SITE_CHROME_VISIBLE_HEADER_ATTR = "data-site-chrome-visible-header";
@@ -12312,6 +12233,11 @@ const unsafeAsEventSeriesId = (id) => id;
12312
12233
  const parseEventOfferingId = (value) => parseUuidBrand(value, unsafeAsEventOfferingId);
12313
12234
  const parseEventSeriesId = (value) => parseUuidBrand(value, unsafeAsEventSeriesId);
12314
12235
  //#endregion
12236
+ //#region ../core/src/assert-never.ts
12237
+ function assertNever$1(value, message = "Unexpected variant") {
12238
+ throw new Error(`${message}: ${String(value)}`);
12239
+ }
12240
+ //#endregion
12315
12241
  //#region ../core/src/currency-format.ts
12316
12242
  const CURRENCY_LOCALE_BY_CODE = {
12317
12243
  USD: "en-US",
@@ -12586,6 +12512,11 @@ function toLocationCoordinates(value) {
12586
12512
  };
12587
12513
  }
12588
12514
  //#endregion
12515
+ //#region ../core/src/newsletter-signup-destination.ts
12516
+ function parseNewsletterSignupDestinationProvider(value) {
12517
+ return value === "riverbank" || value === "mailchimp" ? value : null;
12518
+ }
12519
+ //#endregion
12589
12520
  //#region ../media-core/src/aspectTransforms.ts
12590
12521
  function parseAspectRatioValue(value) {
12591
12522
  if (typeof value === "number") return Number.isFinite(value) && value > 0 ? value : void 0;
@@ -15895,15 +15826,6 @@ const heroLayoutControlsFragment = defineFragment({
15895
15826
  */
15896
15827
  const BLOCK_BUTTON_ROLES = PUBLIC_BUTTON_ROLES;
15897
15828
  const blockButtonRoleSchema = z$1.enum(BLOCK_BUTTON_ROLES);
15898
- /**
15899
- * Temporary rollout boundary for persisted content written before issue #1220.
15900
- * Authoring remains strict through `blockButtonRoleSchema`; this parser exists
15901
- * only until the post-deploy role rewrite has been audited in production.
15902
- */
15903
- function canonicalizePersistedBlockButtonRole(value) {
15904
- return value === "link" || value === "tertiary" ? "ghost" : value;
15905
- }
15906
- const persistedBlockButtonRoleSchema = z$1.preprocess((value) => typeof value === "string" ? canonicalizePersistedBlockButtonRole(value) : value, blockButtonRoleSchema);
15907
15829
  const BLOCK_BUTTON_ROLE_LABELS = {
15908
15830
  primary: "Primary",
15909
15831
  secondary: "Secondary",
@@ -17112,6 +17034,7 @@ const newsletterFormFragment = defineFragment({
17112
17034
  }
17113
17035
  ],
17114
17036
  layout: [el("newsletter-form", withApiBindings({
17037
+ source: "block",
17115
17038
  destinationProvider: { $bind: { from: "destinationProvider" } },
17116
17039
  listId: { $bind: { from: "listId" } },
17117
17040
  preset: { $bind: { from: "preset" } },
@@ -19231,6 +19154,7 @@ const contactNewsletterLayout = styledSection({
19231
19154
  as: "h2",
19232
19155
  className: "newsletter-copy-title"
19233
19156
  }, when("newsletterTitle"), bind("newsletterTitle")), richText({ className: "newsletter-copy-subtitle rb-prose rb-max-w-none" }, when("newsletterSubtitle"), bind("newsletterSubtitle"))]), el("newsletter-form", withApiBindings({
19157
+ source: "block",
19234
19158
  listId: { $bind: { from: "listId" } },
19235
19159
  preset: { $bind: { from: "preset" } },
19236
19160
  includePhone: { $bind: { from: "includePhone" } },
@@ -19868,6 +19792,22 @@ const footerNavGroupsLayout = stack({
19868
19792
  }, [text({ as: "span" }, bind("entry.label"))], repeat("group.children", "entry"))])], repeat("footerMenu.groups", "group"))], whenCollectionHasItems("footerMenu.groups"));
19869
19793
  //#endregion
19870
19794
  //#region ../blocks/src/system/blocks/site-footer.ts
19795
+ const footerStandardContactBindings = {
19796
+ value: { $bind: { from: "module.engagement.runtime.value" } },
19797
+ submitLabel: { $bind: { from: "module.engagement.runtime.submitLabel" } },
19798
+ successMessage: { $bind: { from: "module.engagement.runtime.successMessage" } }
19799
+ };
19800
+ const footerMailingListBindings = {
19801
+ source: { $bind: { from: "module.engagement.runtime.source" } },
19802
+ destinationRef: { $bind: { from: "module.engagement.runtime.destinationRef" } },
19803
+ listId: { $bind: { from: "module.engagement.runtime.listId" } },
19804
+ preset: { $bind: { from: "module.engagement.runtime.preset" } },
19805
+ includePhone: { $bind: { from: "module.engagement.runtime.includePhone" } },
19806
+ buttonLabel: { $bind: { from: "module.engagement.runtime.buttonLabel" } },
19807
+ successMessage: { $bind: { from: "module.engagement.runtime.successMessage" } },
19808
+ privacyNote: { $bind: { from: "module.engagement.runtime.privacyNote" } }
19809
+ };
19810
+ const footerSpamProtectionBinding = { spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } } };
19871
19811
  const brandLogo = link({
19872
19812
  href: "/",
19873
19813
  className: { $bind: {
@@ -19945,6 +19885,23 @@ const authoredCopy = richText({
19945
19885
  id: "content.interpolateRichTextTokens",
19946
19886
  options: { tokens: ["year", "site_name"] }
19947
19887
  }] }));
19888
+ const footerEngagement = stack({
19889
+ gap: "md",
19890
+ className: "rb-w-full"
19891
+ }, [
19892
+ text({
19893
+ as: "p",
19894
+ className: "rb-body rb-opacity-80"
19895
+ }, bind("module.engagement.intro"), when("module.engagement.intro")),
19896
+ form(withApiBindings({
19897
+ ...footerStandardContactBindings,
19898
+ ...footerSpamProtectionBinding
19899
+ }), [], when("module.engagement.kind", { equals: "standard-contact" })),
19900
+ el("newsletter-form", withApiBindings({
19901
+ ...footerMailingListBindings,
19902
+ ...footerSpamProtectionBinding
19903
+ }), [], when("module.engagement.kind", { equals: "mailing-list" }))
19904
+ ], when("module.kind", { equals: "engagement" }));
19948
19905
  const footerGroup = stack({
19949
19906
  gap: "md",
19950
19907
  align: "stretch",
@@ -19970,6 +19927,7 @@ const footerGroup = stack({
19970
19927
  contact,
19971
19928
  hours,
19972
19929
  socials,
19930
+ footerEngagement,
19973
19931
  stack({ className: "rb-w-full" }, [authoredCopy], when("module.kind", { equals: "supporting-text" })),
19974
19932
  stack({ className: "rb-w-full rb-lg-col-span-3" }, [authoredCopy], when("module.kind", { equals: "legal" }))
19975
19933
  ], repeat("group.modules", "module"))], repeat("region.groups", "group"));
@@ -19977,6 +19935,10 @@ const footerMainRegion = stack({
19977
19935
  className: { $bind: { from: "region.className" } },
19978
19936
  "data-footer-region": { $bind: { from: "region.kind" } }
19979
19937
  }, [footerGroup], when("region.kind", { equals: "main" }), repeat("content.footerRuntime.regions", "region"));
19938
+ const footerEngagementRegion = stack({
19939
+ className: { $bind: { from: "region.className" } },
19940
+ "data-footer-region": "engagement-row"
19941
+ }, [footerGroup], when("region.kind", { equals: "engagement-row" }), repeat("content.footerRuntime.regions", "region"));
19980
19942
  const footerBottomRegion = stack({ className: { $bind: {
19981
19943
  from: "$root.theme.footer",
19982
19944
  transforms: [{ id: "layout.footerBottomBarContainerClass" }],
@@ -20012,7 +19974,11 @@ const siteFooterBlockDefinition = { manifest: createBlockManifest({
20012
19974
  fallback: mergeStyles(backgroundColorStyle("surface"), surfaceForegroundStyle({ text: "rgb(var(--tb-text))" }), borderColorStyle("border"))
20013
19975
  } },
20014
19976
  "data-footer-membership": { $bind: { from: "content.footerRuntime.membershipKey" } }
20015
- }, [footerMainRegion, footerBottomRegion]),
19977
+ }, [
19978
+ footerEngagementRegion,
19979
+ footerMainRegion,
19980
+ footerBottomRegion
19981
+ ]),
20016
19982
  description: "Site-wide composed footer with canonical shared details.",
20017
19983
  styleTokens: { spacing: "md" },
20018
19984
  paletteHidden: true
@@ -21858,6 +21824,12 @@ const mediaBaseSchema = z.object({
21858
21824
  poster: mediaPosterSchema.optional(),
21859
21825
  transform: transformSchema.optional()
21860
21826
  });
21827
+ /**
21828
+ * Canonical identifier carried by media values that are safe to persist.
21829
+ * Parsing trims boundary input so downstream writers cannot retain whitespace-only
21830
+ * identifiers or independently disagree about normalization.
21831
+ */
21832
+ const mediaIdentifierSchema = z.string().trim().min(1).brand();
21861
21833
  const imageMediaSchema = mediaBaseSchema.extend({ type: z.literal("image") });
21862
21834
  const videoMediaSchema = mediaBaseSchema.extend({ type: z.literal("video") });
21863
21835
  const audioMediaSchema = mediaBaseSchema.extend({ type: z.literal("audio") });
@@ -21872,6 +21844,15 @@ const mediaSchema = z.discriminatedUnion("type", [
21872
21844
  spreadsheetMediaSchema,
21873
21845
  archiveMediaSchema
21874
21846
  ]);
21847
+ const persistableMediaBaseSchema = mediaBaseSchema.extend({ identifier: mediaIdentifierSchema });
21848
+ z.discriminatedUnion("type", [
21849
+ persistableMediaBaseSchema.extend({ type: z.literal("image") }),
21850
+ persistableMediaBaseSchema.extend({ type: z.literal("video") }),
21851
+ persistableMediaBaseSchema.extend({ type: z.literal("audio") }),
21852
+ persistableMediaBaseSchema.extend({ type: z.literal("document") }),
21853
+ persistableMediaBaseSchema.extend({ type: z.literal("spreadsheet") }),
21854
+ persistableMediaBaseSchema.extend({ type: z.literal("archive") })
21855
+ ]);
21875
21856
  //#endregion
21876
21857
  //#region ../blocks/src/system/manifest/richTextSchema.ts
21877
21858
  /**
@@ -22763,7 +22744,7 @@ const publicMembershipProductCollectionSchema = z$1.object({ memberships: z$1.ar
22763
22744
  * Kept in a shared module so the block definition and runtime contracts can
22764
22745
  * depend on the same schema without creating an initialization cycle.
22765
22746
  */
22766
- const occurrenceContextSchema$1 = z$1.object({
22747
+ const occurrenceContextSchema = z$1.object({
22767
22748
  id: z$1.string(),
22768
22749
  seriesId: z$1.string(),
22769
22750
  startsAt: z$1.string(),
@@ -23055,7 +23036,7 @@ function isEventCalendarListLayout(value) {
23055
23036
  //#region ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
23056
23037
  const previewStageSchema = z$1.enum(["preview", "published"]);
23057
23038
  const registrationButtonVariantSchema = blockButtonRoleSchema;
23058
- const eventButtonVariantSchema = persistedBlockButtonRoleSchema;
23039
+ const eventButtonVariantSchema = blockButtonRoleSchema;
23059
23040
  const eventLayoutSchema = z$1.enum(eventCalendarListLayoutValues);
23060
23041
  const eventCalendarDisplayModeSchema = z$1.enum(eventCalendarDisplayModeValues);
23061
23042
  const eventCalendarDefaultViewSchema = z$1.enum(eventCalendarDefaultViewValues);
@@ -23144,28 +23125,37 @@ const EVENT_REGISTRATION_SHELL_STEP_LABELS = [
23144
23125
  "Payment"
23145
23126
  ];
23146
23127
  const eventRegistrationPublicEventSchema = z$1.preprocess(normalizeEventRegistrationEventInput, publicEventSchema);
23147
- const eventRegistrationSourceSchema = z$1.object({
23148
- siteId: z$1.string().optional(),
23149
- apiBaseUrl: z$1.string().optional(),
23150
- portalToken: z$1.string().nullable().optional(),
23151
- previewToken: z$1.string().nullable().optional(),
23152
- occurrenceContext: occurrenceContextSchema$1.optional(),
23128
+ const eventRegistrationHydrationSchemaShape = {
23129
+ occurrenceContext: occurrenceContextSchema.optional(),
23153
23130
  subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
23154
23131
  events: z$1.array(eventRegistrationPublicEventSchema).nullable().optional(),
23155
- className: z$1.string().nullable().optional(),
23156
- buttonText: z$1.string().nullable().optional(),
23157
- maxTickets: z$1.string().nullable().optional(),
23132
+ wholeSeriesOfferings: publicCoursesArraySchema.nullable().optional(),
23133
+ wholeSeriesOffering: publicCourseSchema.nullable().optional(),
23134
+ maxTickets: z$1.string().optional(),
23158
23135
  showVenue: z$1.boolean().optional(),
23159
23136
  showCapacity: z$1.boolean().optional(),
23137
+ showSessions: z$1.boolean().optional(),
23138
+ showPrice: z$1.boolean().optional(),
23160
23139
  successMessage: z$1.string().optional(),
23161
23140
  waitlistMessage: z$1.string().optional(),
23141
+ membershipMessage: z$1.string().optional(),
23162
23142
  buttonVariant: registrationButtonVariantSchema.optional(),
23163
23143
  overlayEnabled: z$1.boolean().optional(),
23164
23144
  spamProtectionEnabled: z$1.boolean().optional(),
23165
- stage: previewStageSchema.optional(),
23166
23145
  supportEmail: z$1.string().optional(),
23167
23146
  sitePasses: publicPassProductCollectionSchema.nullable().optional(),
23168
23147
  siteMemberships: publicMembershipProductCollectionSchema.nullable().optional()
23148
+ };
23149
+ const eventRegistrationSourceSchema = z$1.object({
23150
+ siteId: z$1.string().optional(),
23151
+ apiBaseUrl: z$1.string().optional(),
23152
+ portalToken: z$1.string().nullable().optional(),
23153
+ previewToken: z$1.string().nullable().optional(),
23154
+ ...eventRegistrationHydrationSchemaShape,
23155
+ className: z$1.string().nullable().optional(),
23156
+ buttonText: z$1.string().nullable().optional(),
23157
+ maxTickets: z$1.string().nullable().optional(),
23158
+ stage: previewStageSchema.optional()
23169
23159
  });
23170
23160
  const eventRegistrationDisplaySchema = z$1.object({
23171
23161
  kind: z$1.literal("event-registration"),
@@ -23176,22 +23166,7 @@ const eventRegistrationDisplaySchema = z$1.object({
23176
23166
  stepLabels: z$1.array(z$1.enum(EVENT_REGISTRATION_SHELL_STEP_LABELS)).min(1),
23177
23167
  summaryButtonText: z$1.string()
23178
23168
  });
23179
- const eventRegistrationHydrationSchema = z$1.object({
23180
- occurrenceContext: occurrenceContextSchema$1.optional(),
23181
- subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
23182
- events: z$1.array(eventRegistrationPublicEventSchema).nullable().optional(),
23183
- maxTickets: z$1.string().optional(),
23184
- showVenue: z$1.boolean().optional(),
23185
- showCapacity: z$1.boolean().optional(),
23186
- successMessage: z$1.string().optional(),
23187
- waitlistMessage: z$1.string().optional(),
23188
- buttonVariant: registrationButtonVariantSchema.optional(),
23189
- overlayEnabled: z$1.boolean().optional(),
23190
- spamProtectionEnabled: z$1.boolean().optional(),
23191
- supportEmail: z$1.string().optional(),
23192
- sitePasses: publicPassProductCollectionSchema.nullable().optional(),
23193
- siteMemberships: publicMembershipProductCollectionSchema.nullable().optional()
23194
- });
23169
+ const eventRegistrationHydrationSchema = z$1.object(eventRegistrationHydrationSchemaShape);
23195
23170
  const eventRegistrationRenderSchema = z$1.object({
23196
23171
  display: eventRegistrationDisplaySchema,
23197
23172
  hydration: eventRegistrationHydrationSchema
@@ -23271,11 +23246,16 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
23271
23246
  occurrenceContext: source.occurrenceContext ?? null,
23272
23247
  subject: source.subject ?? null,
23273
23248
  events: source.events ?? null,
23249
+ wholeSeriesOfferings: source.wholeSeriesOfferings ?? null,
23250
+ wholeSeriesOffering: source.wholeSeriesOffering ?? null,
23274
23251
  maxTickets: source.maxTickets ?? void 0,
23275
23252
  showVenue: source.showVenue,
23276
23253
  showCapacity: source.showCapacity,
23254
+ showSessions: source.showSessions,
23255
+ showPrice: source.showPrice,
23277
23256
  successMessage: source.successMessage,
23278
23257
  waitlistMessage: source.waitlistMessage,
23258
+ membershipMessage: source.membershipMessage,
23279
23259
  buttonVariant: source.buttonVariant,
23280
23260
  overlayEnabled: source.overlayEnabled,
23281
23261
  spamProtectionEnabled: source.spamProtectionEnabled,
@@ -23391,6 +23371,24 @@ const eventRegistrationBlockDefinition = {
23391
23371
  defaultValue: true,
23392
23372
  ui: { intent: "display" }
23393
23373
  },
23374
+ {
23375
+ id: "showSessions",
23376
+ type: "boolean",
23377
+ label: "Show complete schedule",
23378
+ description: "Display every session for whole-series registrations",
23379
+ required: false,
23380
+ defaultValue: true,
23381
+ ui: { intent: "display" }
23382
+ },
23383
+ {
23384
+ id: "showPrice",
23385
+ type: "boolean",
23386
+ label: "Show price",
23387
+ description: "Display the whole-series price",
23388
+ required: false,
23389
+ defaultValue: true,
23390
+ ui: { intent: "display" }
23391
+ },
23394
23392
  {
23395
23393
  id: "successMessage",
23396
23394
  type: "text",
@@ -23401,6 +23399,26 @@ const eventRegistrationBlockDefinition = {
23401
23399
  defaultValue: "Thank you for registering! Check your email for confirmation details.",
23402
23400
  maxLength: 500
23403
23401
  },
23402
+ {
23403
+ id: "waitlistMessage",
23404
+ type: "text",
23405
+ label: "Waitlist message",
23406
+ description: "Message shown after joining a whole-series waitlist",
23407
+ required: false,
23408
+ multiline: true,
23409
+ defaultValue: "You've been added to the waitlist. We'll email you if a place becomes available.",
23410
+ maxLength: 500
23411
+ },
23412
+ {
23413
+ id: "membershipMessage",
23414
+ type: "text",
23415
+ label: "Membership registration message",
23416
+ description: "Message shown when a whole-series place is covered by membership",
23417
+ required: false,
23418
+ multiline: true,
23419
+ defaultValue: "Registered using your membership. Check your email for session details.",
23420
+ maxLength: 500
23421
+ },
23404
23422
  {
23405
23423
  id: "buttonText",
23406
23424
  type: "text",
@@ -23432,8 +23450,11 @@ const eventRegistrationBlockDefinition = {
23432
23450
  } },
23433
23451
  showVenue: { $bind: { from: "content.showVenue" } },
23434
23452
  showCapacity: { $bind: { from: "content.showCapacity" } },
23453
+ showSessions: { $bind: { from: "content.showSessions" } },
23454
+ showPrice: { $bind: { from: "content.showPrice" } },
23435
23455
  successMessage: { $bind: { from: "content.successMessage" } },
23436
23456
  waitlistMessage: { $bind: { from: "content.waitlistMessage" } },
23457
+ membershipMessage: { $bind: { from: "content.membershipMessage" } },
23437
23458
  buttonText: { $bind: {
23438
23459
  from: "content.buttonText",
23439
23460
  fallback: "Complete Registration"
@@ -23447,6 +23468,7 @@ const eventRegistrationBlockDefinition = {
23447
23468
  fallback: false
23448
23469
  } },
23449
23470
  events: { $bind: { from: "data.events" } },
23471
+ wholeSeriesOffering: { $bind: { from: "data.wholeSeriesOffering.offering" } },
23450
23472
  sitePasses: { $bind: { from: "data.sitePasses" } },
23451
23473
  siteMemberships: { $bind: { from: "data.siteMemberships" } },
23452
23474
  stage: { $bind: {
@@ -23460,9 +23482,10 @@ const eventRegistrationBlockDefinition = {
23460
23482
  runtime: eventRegistrationBlockRuntime,
23461
23483
  dataSchemas: {
23462
23484
  events: publicEventsArraySchema.optional(),
23485
+ wholeSeriesOffering: z$1.object({ offering: publicCourseSchema }).optional(),
23463
23486
  sitePasses: publicPassProductCollectionSchema.optional(),
23464
23487
  siteMemberships: publicMembershipProductCollectionSchema.optional(),
23465
- occurrenceContext: occurrenceContextSchema$1.optional()
23488
+ occurrenceContext: occurrenceContextSchema.optional()
23466
23489
  },
23467
23490
  dataLoaders: {
23468
23491
  events: {
@@ -23475,11 +23498,23 @@ const eventRegistrationBlockDefinition = {
23475
23498
  fallback: "published"
23476
23499
  } },
23477
23500
  readProfile: "registration",
23478
- seriesId: { $bind: { from: "$root.occurrenceContext.seriesId" } },
23501
+ seriesId: { $bind: { from: "$root.subject.eventSeriesId" } },
23479
23502
  includeOccurrenceId: { $bind: { from: "$root.occurrenceContext.id" } }
23480
23503
  },
23481
23504
  mode: "server"
23482
23505
  },
23506
+ wholeSeriesOffering: {
23507
+ endpoint: "getPublicWholeSeriesOffering",
23508
+ params: {
23509
+ siteId: { $bind: { from: "$root.siteId" } },
23510
+ eventSeriesId: { $bind: { from: "$root.subject.eventSeriesId" } },
23511
+ stage: { $bind: {
23512
+ from: "$root.previewStage",
23513
+ fallback: "published"
23514
+ } }
23515
+ },
23516
+ mode: "server"
23517
+ },
23483
23518
  sitePasses: {
23484
23519
  endpoint: "listPublicPasses",
23485
23520
  params: { siteId: { $bind: { from: "$root.siteId" } } },
@@ -23914,15 +23949,6 @@ const eventDetailsManifest = createBlockManifest({
23914
23949
  })], { gap: "lg" })
23915
23950
  })]
23916
23951
  });
23917
- const occurrenceContextSchema = z$1.object({
23918
- id: z$1.string(),
23919
- seriesId: z$1.string(),
23920
- startsAt: z$1.string(),
23921
- endsAt: z$1.string(),
23922
- timeZone: z$1.string(),
23923
- capacityOverride: z$1.number().nullable().optional(),
23924
- overrides: z$1.record(z$1.string(), z$1.unknown()).nullable().optional()
23925
- }).nullable();
23926
23952
  const eventAutoApplyDiscountPreviewBaseSchema = z$1.object({
23927
23953
  id: z$1.string(),
23928
23954
  publicLabel: z$1.string(),
@@ -23957,8 +23983,9 @@ const eventDetailsBlockDefinition = {
23957
23983
  from: "$root.previewStage",
23958
23984
  fallback: "published"
23959
23985
  } },
23960
- limit: "25",
23961
- seriesId: { $bind: { from: "$root.occurrenceContext.seriesId" } },
23986
+ limit: "100",
23987
+ readProfile: "details",
23988
+ seriesId: { $bind: { from: "$root.subject.eventSeriesId" } },
23962
23989
  includeOccurrenceId: { $bind: { from: "$root.occurrenceContext.id" } }
23963
23990
  },
23964
23991
  mode: "server"
@@ -29876,9 +29903,6 @@ function parseSignedNewsletterDestinationRef(value) {
29876
29903
  const trimmed = parseTrimmedString(value);
29877
29904
  return trimmed && SIGNED_DESTINATION_REF_PATTERN.test(trimmed) ? trimmed : null;
29878
29905
  }
29879
- function parseNewsletterSignupDestinationProvider(value) {
29880
- return value === "riverbank" || value === "mailchimp" ? value : null;
29881
- }
29882
29906
  function buildNewsletterSignupBlockRef(blockId) {
29883
29907
  const parsed = parseNewsletterSignupBlockId(blockId);
29884
29908
  return parsed ? {
@@ -30025,19 +30049,9 @@ const newsletterFieldSchema = z$1.object({
30025
30049
  });
30026
30050
  const newsletterSignupBlockIdSchema = z$1.string().trim().min(1).transform(parseRequiredNewsletterSignupBlockId);
30027
30051
  const signedNewsletterDestinationRefSchema = z$1.string().trim().min(1).transform(parseRequiredSignedNewsletterDestinationRef);
30028
- const newsletterPublicDestinationRefSchema = z$1.discriminatedUnion("tag", [z$1.object({
30029
- tag: z$1.literal("block_ref"),
30030
- blockId: newsletterSignupBlockIdSchema
30031
- }), z$1.object({
30032
- tag: z$1.literal("signed_destination_ref"),
30033
- token: signedNewsletterDestinationRefSchema
30034
- })]);
30035
- const newsletterSourceSchema = z$1.object({
30036
- blockId: z$1.string().nullable().optional(),
30052
+ const newsletterSourceCommonSchema = z$1.object({
30037
30053
  siteId: z$1.string().optional(),
30038
30054
  apiBaseUrl: z$1.string().optional(),
30039
- listId: z$1.string().nullable().optional(),
30040
- destinationProvider: newsletterDestinationProviderSchema.nullable().optional(),
30041
30055
  preset: newsletterPresetSchema.optional(),
30042
30056
  includePhone: z$1.boolean().optional(),
30043
30057
  buttonLabel: z$1.string().nullable().optional(),
@@ -30048,6 +30062,25 @@ const newsletterSourceSchema = z$1.object({
30048
30062
  spamProtectionEnabled: z$1.boolean().optional(),
30049
30063
  className: z$1.string().nullable().optional()
30050
30064
  });
30065
+ const newsletterSourceSchema = z$1.discriminatedUnion("source", [
30066
+ newsletterSourceCommonSchema.extend({
30067
+ source: z$1.literal("block"),
30068
+ blockId: z$1.string().nullable().optional(),
30069
+ listId: z$1.string().nullable().optional(),
30070
+ destinationProvider: newsletterDestinationProviderSchema.nullable().optional()
30071
+ }),
30072
+ newsletterSourceCommonSchema.extend({
30073
+ source: z$1.literal("signed-footer"),
30074
+ destinationRef: z$1.object({
30075
+ tag: z$1.literal("signed_destination_ref"),
30076
+ token: signedNewsletterDestinationRefSchema
30077
+ })
30078
+ }),
30079
+ newsletterSourceCommonSchema.extend({
30080
+ source: z$1.literal("legacy-direct-list"),
30081
+ listId: z$1.string().nullable()
30082
+ })
30083
+ ]);
30051
30084
  const newsletterDisplaySchema = z$1.object({
30052
30085
  kind: z$1.literal("newsletter-form"),
30053
30086
  className: z$1.string().nullable(),
@@ -30058,8 +30091,26 @@ const newsletterDisplaySchema = z$1.object({
30058
30091
  fields: z$1.array(newsletterFieldSchema)
30059
30092
  });
30060
30093
  const newsletterHydrationSchema = z$1.object({
30061
- destinationRef: newsletterPublicDestinationRefSchema.nullable().optional(),
30062
- listId: z$1.string().nullable().optional(),
30094
+ target: z$1.discriminatedUnion("tag", [
30095
+ z$1.object({
30096
+ tag: z$1.literal("block-source"),
30097
+ destinationRef: z$1.object({
30098
+ tag: z$1.literal("block_ref"),
30099
+ blockId: newsletterSignupBlockIdSchema
30100
+ }).nullable()
30101
+ }),
30102
+ z$1.object({
30103
+ tag: z$1.literal("signed-footer-source"),
30104
+ destinationRef: z$1.object({
30105
+ tag: z$1.literal("signed_destination_ref"),
30106
+ token: signedNewsletterDestinationRefSchema
30107
+ })
30108
+ }),
30109
+ z$1.object({
30110
+ tag: z$1.literal("legacy-direct-list"),
30111
+ listId: z$1.string().nullable()
30112
+ })
30113
+ ]),
30063
30114
  preset: newsletterPresetSchema,
30064
30115
  includePhone: z$1.boolean(),
30065
30116
  tags: z$1.string().nullable().optional(),
@@ -30093,20 +30144,43 @@ const newsletterFormBlockRuntime = defineProgressiveBlockRuntime({
30093
30144
  render: createZodCodec(newsletterRenderSchema)
30094
30145
  },
30095
30146
  buildRender: (source) => {
30096
- const runtimeSource = deriveNewsletterSignupRuntimeSource(source);
30147
+ const runtimeSource = source.source === "block" ? deriveNewsletterSignupRuntimeSource(source) : null;
30097
30148
  return {
30098
30149
  display: buildNewsletterDisplay(source),
30099
30150
  hydration: {
30100
- destinationRef: buildNewsletterSignupBlockRef(source.blockId),
30101
- listId: runtimeSource.listId,
30151
+ target: projectNewsletterFormHydrationTarget(source),
30102
30152
  preset: source.preset ?? "emailOnly",
30103
30153
  includePhone: source.includePhone ?? false,
30104
- tags: runtimeSource.tags,
30154
+ tags: runtimeSource ? runtimeSource.tags : source.tags,
30105
30155
  spamProtectionEnabled: source.spamProtectionEnabled
30106
30156
  }
30107
30157
  };
30108
30158
  }
30109
30159
  });
30160
+ function projectNewsletterFormHydrationTarget(source) {
30161
+ switch (source.source) {
30162
+ case "block": {
30163
+ const destinationRef = buildNewsletterSignupBlockRef(source.blockId);
30164
+ if (destinationRef?.tag === "block_ref") return {
30165
+ tag: "block-source",
30166
+ destinationRef
30167
+ };
30168
+ return {
30169
+ tag: "legacy-direct-list",
30170
+ listId: source.listId ?? null
30171
+ };
30172
+ }
30173
+ case "signed-footer": return {
30174
+ tag: "signed-footer-source",
30175
+ destinationRef: source.destinationRef
30176
+ };
30177
+ case "legacy-direct-list": return {
30178
+ tag: "legacy-direct-list",
30179
+ listId: source.listId
30180
+ };
30181
+ default: return assertNever$1(source);
30182
+ }
30183
+ }
30110
30184
  function parseRequiredNewsletterSignupBlockId(value) {
30111
30185
  const parsed = parseNewsletterSignupBlockId(value);
30112
30186
  if (!parsed) throw new Error("Newsletter signup block destination ref requires blockId");