@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
@@ -1364,6 +1364,11 @@ const unsafeAsEventSeriesId = (id) => id;
1364
1364
  const parseEventOfferingId = (value) => parseUuidBrand(value, unsafeAsEventOfferingId);
1365
1365
  const parseEventSeriesId = (value) => parseUuidBrand(value, unsafeAsEventSeriesId);
1366
1366
  //#endregion
1367
+ //#region ../core/src/assert-never.ts
1368
+ function assertNever$2(value, message = "Unexpected variant") {
1369
+ throw new Error(`${message}: ${String(value)}`);
1370
+ }
1371
+ //#endregion
1367
1372
  //#region ../core/src/currency-format.ts
1368
1373
  const CURRENCY_LOCALE_BY_CODE = {
1369
1374
  USD: "en-US",
@@ -1669,6 +1674,11 @@ function isTipTapNode(value) {
1669
1674
  function isCanonicalRichTextDoc(value) {
1670
1675
  return isRecord$7(value) && hasOnlyKeys(value, rootKeys) && value.type === "doc" && Array.isArray(value.content) && isDenseArrayOf(value.content, isTipTapNode);
1671
1676
  }
1677
+ //#endregion
1678
+ //#region ../core/src/newsletter-signup-destination.ts
1679
+ function parseNewsletterSignupDestinationProvider(value) {
1680
+ return value === "riverbank" || value === "mailchimp" ? value : null;
1681
+ }
1672
1682
  z$1.object({
1673
1683
  formulaVersion: z$1.literal("managed-domain-overage-v1"),
1674
1684
  conversionRule: z$1.literal("usd-to-gbp-1-to-1-v1"),
@@ -3129,7 +3139,7 @@ function canonicalPaletteHashInput(colors, mode) {
3129
3139
  return `${mode}|${paletteColorFingerprint(colors)}`;
3130
3140
  }
3131
3141
  /**
3132
- * The shared TypeScript/SQL protocol. Do not reorder roles: the order comes
3142
+ * Stable curated-catalogue identity. Do not reorder roles: the order comes
3133
3143
  * from PALETTE_TOKEN_NAMES through canonicalPaletteHashInput.
3134
3144
  */
3135
3145
  function paletteValueKey(colors, mode) {
@@ -4589,8 +4599,6 @@ const VARIANT_ROLES = [
4589
4599
  "secondary",
4590
4600
  "outline",
4591
4601
  "ghost",
4592
- "link",
4593
- "tertiary",
4594
4602
  "accent"
4595
4603
  ];
4596
4604
  /**
@@ -4599,7 +4607,7 @@ const VARIANT_ROLES = [
4599
4607
  * IDs become class selectors, so keep the contract deliberately narrower than
4600
4608
  * an arbitrary string and shared with every authoring/runtime boundary.
4601
4609
  */
4602
- const buttonVariantIdSchema = z$1.string().min(1).max(50).regex(/^[a-z0-9-]+$/, "Button variant IDs may contain lowercase letters, numbers, and hyphens only");
4610
+ 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" });
4603
4611
  function parseOpaqueButtonColourToken(value) {
4604
4612
  const token = parseThemeColorToken(value);
4605
4613
  if (token === null) return null;
@@ -5002,6 +5010,59 @@ function surfaceForegroundStyle(input) {
5002
5010
  [SURFACE_FOREGROUND_CSS_VARS.supporting]: foregrounds.supporting
5003
5011
  };
5004
5012
  }
5013
+ shadeBackgroundEffect({
5014
+ id: "darken-background",
5015
+ name: "Darken on Hover",
5016
+ description: "Darkens the background color on hover",
5017
+ label: "Darken Amount (shade step)",
5018
+ shadeDirection: 1
5019
+ });
5020
+ shadeBackgroundEffect({
5021
+ id: "lighten-background",
5022
+ name: "Lighten on Hover",
5023
+ description: "Lightens the background color on hover",
5024
+ label: "Lighten Amount (shade step)",
5025
+ shadeDirection: -1
5026
+ });
5027
+ function shadeBackgroundEffect(config) {
5028
+ return {
5029
+ id: config.id,
5030
+ name: config.name,
5031
+ description: config.description,
5032
+ category: "background",
5033
+ pseudoElement: "none",
5034
+ applicableTo: ["button"],
5035
+ customizableOption: {
5036
+ name: "amount",
5037
+ type: "select",
5038
+ label: config.label,
5039
+ default: 100,
5040
+ options: [
5041
+ 0,
5042
+ 100,
5043
+ 200,
5044
+ 300,
5045
+ 400,
5046
+ 500,
5047
+ 600,
5048
+ 700,
5049
+ 800,
5050
+ 900
5051
+ ]
5052
+ },
5053
+ isApplicable: (buttonConfig) => buttonConfig.background.type === "solid",
5054
+ generateCSS: ({ themeId, variantId, options, tokens, buttonConfig }) => {
5055
+ if (buttonConfig.background.type !== "solid") return "";
5056
+ const amount = (options.amount || 100) * config.shadeDirection;
5057
+ const baseToken = buttonConfig.background.colorToken ?? "primary-500";
5058
+ return `
5059
+ :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
5060
+ background-color: ${tokens.getColor(tokens.adjustShade(baseToken, amount))};
5061
+ }
5062
+ `;
5063
+ }
5064
+ };
5065
+ }
5005
5066
  buttonSizeNameSchema.options;
5006
5067
  //#endregion
5007
5068
  //#region ../theme-core/src/buttons/styles/domain.ts
@@ -7816,6 +7877,60 @@ function resolveThemeColorReferenceValue(input, context) {
7816
7877
  const reference = parseThemeColorReference(input, context);
7817
7878
  return reference.kind === "literal-css" ? reference.value : rgbColorValue(reference.token);
7818
7879
  }
7880
+ const BREAKPOINT_LG = 1024;
7881
+ const BREAKPOINT_XL = 1280;
7882
+ const BREAKPOINT_LG_DOWN = BREAKPOINT_LG - 1;
7883
+ function mqUp(px) {
7884
+ return `(min-width: ${px}px)`;
7885
+ }
7886
+ function mqDown(px) {
7887
+ return `(max-width: ${px}px)`;
7888
+ }
7889
+ function mqBetween(minPx, maxPx) {
7890
+ return `${mqUp(minPx)} and ${mqDown(maxPx)}`;
7891
+ }
7892
+ mqUp(640);
7893
+ mqUp(768);
7894
+ mqUp(BREAKPOINT_LG);
7895
+ mqUp(BREAKPOINT_XL);
7896
+ mqDown(639);
7897
+ mqDown(767);
7898
+ mqDown(BREAKPOINT_LG_DOWN);
7899
+ mqBetween(640, BREAKPOINT_LG_DOWN);
7900
+ mqDown(640);
7901
+ mqDown(768);
7902
+ //#endregion
7903
+ //#region ../theme-core/src/header/scrollTreatment.ts
7904
+ const headerScrollTreatmentSchema = z$1.discriminatedUnion("kind", [z$1.object({
7905
+ kind: z$1.literal("contrast-glass"),
7906
+ backgroundTone: z$1.enum(["light", "dark"])
7907
+ })]).optional();
7908
+ //#endregion
7909
+ //#region ../theme-core/src/header/containerSchema.ts
7910
+ const headerContainerSchema = z$1.object({
7911
+ rounded: z$1.enum([
7912
+ "none",
7913
+ "sm",
7914
+ "md",
7915
+ "lg",
7916
+ "xl",
7917
+ "2xl"
7918
+ ]).default("xl"),
7919
+ border: z$1.boolean().default(true),
7920
+ shadow: z$1.boolean().default(true),
7921
+ padding: z$1.enum([
7922
+ "sm",
7923
+ "md",
7924
+ "lg"
7925
+ ]).default("md"),
7926
+ tint: z$1.string().nullable().optional(),
7927
+ opacity: z$1.number().min(0).max(1).default(.12)
7928
+ }).optional();
7929
+ const headerInteractionPaletteSchema = z$1.enum([
7930
+ "primary",
7931
+ "secondary",
7932
+ "accent"
7933
+ ]);
7819
7934
  //#endregion
7820
7935
  //#region ../theme-core/src/schema.ts
7821
7936
  const axesSchema = z$1.object({
@@ -8225,25 +8340,6 @@ const navFontWeight = z$1.enum([
8225
8340
  ]);
8226
8341
  const headerMaxWidth = z$1.enum(["container", "full"]);
8227
8342
  const headerBarFrame = z$1.enum(["full-bleed", "inset-shell"]);
8228
- const headerContainerSchema = z$1.object({
8229
- rounded: z$1.enum([
8230
- "none",
8231
- "sm",
8232
- "md",
8233
- "lg",
8234
- "xl",
8235
- "2xl"
8236
- ]).default("xl"),
8237
- border: z$1.boolean().default(true),
8238
- shadow: z$1.boolean().default(true),
8239
- padding: z$1.enum([
8240
- "sm",
8241
- "md",
8242
- "lg"
8243
- ]).default("md"),
8244
- tint: z$1.string().nullable().optional(),
8245
- opacity: z$1.number().min(0).max(1).default(.12)
8246
- }).optional();
8247
8343
  const headerBorderSchema = componentBorderSchema.extend({ position: z$1.enum([
8248
8344
  "bottom",
8249
8345
  "top",
@@ -8370,6 +8466,7 @@ const headerSchema = z$1.object({
8370
8466
  shrinkOnScroll: z$1.boolean(),
8371
8467
  maxWidth: headerMaxWidth,
8372
8468
  barFrame: headerBarFrame.optional(),
8469
+ scrollTreatment: headerScrollTreatmentSchema,
8373
8470
  logoOverride: mediaSchema$1.nullable().optional(),
8374
8471
  background: headerBackgroundSchema.default({
8375
8472
  type: "color",
@@ -8382,6 +8479,7 @@ const headerSchema = z$1.object({
8382
8479
  navFontRole: z$1.enum(["body", "heading"]).optional(),
8383
8480
  navTypography: z$1.enum(["body", "heading"]).optional(),
8384
8481
  navTextSize: navLinkStyleSchema.shape.textSize,
8482
+ interactionPalette: headerInteractionPaletteSchema.optional(),
8385
8483
  navPlacement: z$1.enum(["end", "center"]).optional(),
8386
8484
  container: headerContainerSchema,
8387
8485
  border: headerBorderSchema,
@@ -8674,770 +8772,669 @@ z$1.object({
8674
8772
  themes: z$1.array(themeSchema).length(3)
8675
8773
  });
8676
8774
  //#endregion
8775
+ //#region ../theme-core/src/site-styles/lookOptionGroups.ts
8776
+ function defineLookOptionGroup(group) {
8777
+ defaultOption(group);
8778
+ return group;
8779
+ }
8780
+ function defaultOption(group) {
8781
+ const option = group.options.find((candidate) => candidate.id === group.defaultOptionId);
8782
+ if (option) return option;
8783
+ throw new Error(`Look option group "${group.id}" defaults to missing option "${group.defaultOptionId}".`);
8784
+ }
8785
+ //#endregion
8677
8786
  //#region ../theme-core/src/site-styles/appearancePresetResolution.ts
8678
8787
  function assertValidOptionGroups(preset) {
8679
8788
  preset.optionGroups?.forEach((group) => {
8680
- 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}".`);
8789
+ defineLookOptionGroup(group);
8681
8790
  });
8682
8791
  }
8683
8792
  function defineBlockAppearancePreset(preset) {
8684
8793
  assertValidOptionGroups(preset);
8685
8794
  return preset;
8686
8795
  }
8687
- [...[
8688
- defineBlockAppearancePreset({
8689
- kind: "block-design",
8690
- id: "hero-immersive-image",
8691
- target: "hero",
8692
- label: "Immersive image hero",
8693
- blockKinds: ["block.hero"],
8694
- constraints: { layoutFamilies: ["centered", "compact"] },
8695
- layoutPatches: [{
8696
- constraints: { layoutVariantKeys: ["micro"] },
8697
- designPatch: {
8698
- sectionHeight: "banner",
8699
- heroTypographyScale: "display"
8700
- }
8701
- }],
8702
- design: {
8703
- sectionSurface: "hero-image",
8704
- contentFrame: plainFrame,
8705
- itemSurface: "none",
8706
- sectionHeight: "hero",
8707
- heroComposition: "center",
8708
- heroTypographyScale: "display",
8709
- imageSurfaceTreatment: { kind: "neutral-wash" }
8796
+ //#endregion
8797
+ //#region ../theme-core/src/site-styles/blockAppearancePresets.ts
8798
+ const brandScrimOptionGroups = [{
8799
+ id: "image-surface-treatment",
8800
+ label: "Treatment",
8801
+ defaultOptionId: "brand-scrim-primary",
8802
+ options: [{
8803
+ id: "brand-scrim-primary",
8804
+ label: "Brand scrim",
8805
+ designPatch: { imageSurfaceTreatment: {
8806
+ kind: "brand-scrim",
8807
+ token: "primary"
8808
+ } }
8809
+ }, {
8810
+ id: "neutral-scrim",
8811
+ label: "Neutral scrim",
8812
+ designPatch: { imageSurfaceTreatment: { kind: "neutral-scrim" } }
8813
+ }]
8814
+ }];
8815
+ const microBannerLayoutPatches = [{
8816
+ constraints: { layoutVariantKeys: ["micro"] },
8817
+ designPatch: { sectionHeight: "banner" }
8818
+ }];
8819
+ defineBlockAppearancePreset({
8820
+ id: "hero-immersive-image",
8821
+ target: "hero",
8822
+ label: "Immersive image hero",
8823
+ blockKinds: ["block.hero"],
8824
+ constraints: { layoutFamilies: ["centered", "compact"] },
8825
+ layoutPatches: [{
8826
+ constraints: { layoutVariantKeys: ["micro"] },
8827
+ designPatch: {
8828
+ sectionHeight: "banner",
8829
+ heroTypographyScale: "display"
8710
8830
  }
8711
- }),
8712
- defineBlockAppearancePreset({
8713
- kind: "block-design",
8714
- id: "hero-bottom-left-panel",
8715
- target: "hero",
8716
- label: "Bottom-left panel hero",
8717
- blockKinds: ["block.hero"],
8718
- constraints: { layoutFamilies: ["centered", "compact"] },
8719
- optionGroups: [{
8720
- id: "image-surface-treatment",
8721
- label: "Treatment",
8722
- selectedOptionId: "neutral-scrim",
8723
- options: [{
8724
- id: "neutral-scrim",
8725
- label: "Neutral scrim",
8726
- designPatch: { imageSurfaceTreatment: {
8727
- kind: "neutral-scrim",
8728
- intensity: "balanced"
8729
- } }
8730
- }, {
8731
- id: "brand-scrim-primary",
8732
- label: "Brand scrim",
8733
- designPatch: { imageSurfaceTreatment: {
8734
- kind: "brand-scrim",
8735
- token: "primary",
8736
- intensity: "balanced"
8737
- } }
8738
- }]
8739
- }],
8740
- layoutPatches: [{
8741
- constraints: { layoutVariantKeys: ["micro"] },
8742
- designPatch: {
8743
- sectionHeight: "banner",
8744
- heroTypographyScale: "editorial"
8745
- }
8746
- }],
8747
- design: {
8748
- sectionSurface: "hero-image",
8749
- contentFrame: panelFrame("raised"),
8750
- itemSurface: "none",
8751
- sectionHeight: "immersive",
8752
- heroComposition: "bottom-left",
8753
- heroTypographyScale: "display",
8754
- imageSurfaceTreatment: {
8831
+ }],
8832
+ design: {
8833
+ sectionSurface: "hero-image",
8834
+ contentFrame: plainFrame,
8835
+ itemSurface: "none",
8836
+ sectionHeight: "hero",
8837
+ heroComposition: "center",
8838
+ heroTypographyScale: "display",
8839
+ imageSurfaceTreatment: { kind: "neutral-wash" }
8840
+ }
8841
+ }), defineBlockAppearancePreset({
8842
+ id: "hero-bottom-left-panel",
8843
+ target: "hero",
8844
+ label: "Bottom-left panel hero",
8845
+ blockKinds: ["block.hero"],
8846
+ constraints: { layoutFamilies: ["centered", "compact"] },
8847
+ optionGroups: [{
8848
+ id: "image-surface-treatment",
8849
+ label: "Treatment",
8850
+ defaultOptionId: "neutral-scrim",
8851
+ options: [{
8852
+ id: "neutral-scrim",
8853
+ label: "Neutral scrim",
8854
+ designPatch: { imageSurfaceTreatment: {
8755
8855
  kind: "neutral-scrim",
8756
8856
  intensity: "balanced"
8757
- }
8758
- }
8759
- }),
8760
- defineBlockAppearancePreset({
8761
- kind: "block-design",
8762
- id: "hero-poster-image",
8763
- target: "hero",
8764
- label: "Poster image hero",
8765
- blockKinds: ["block.hero"],
8766
- constraints: { layoutFamilies: ["centered", "compact"] },
8767
- layoutPatches: [{
8768
- constraints: { layoutVariantKeys: ["micro"] },
8769
- designPatch: {
8770
- sectionHeight: "banner",
8771
- heroTypographyScale: "display"
8772
- }
8773
- }],
8774
- design: {
8775
- sectionSurface: "hero-image",
8776
- contentFrame: plainFrame,
8777
- itemSurface: "none",
8778
- sectionHeight: "immersive",
8779
- heroComposition: "center",
8780
- heroTypographyScale: "poster",
8781
- imageSurfaceTreatment: {
8857
+ } }
8858
+ }, {
8859
+ id: "brand-scrim-primary",
8860
+ label: "Brand scrim",
8861
+ designPatch: { imageSurfaceTreatment: {
8782
8862
  kind: "brand-scrim",
8783
8863
  token: "primary",
8784
- intensity: "strong"
8785
- }
8786
- }
8787
- }),
8788
- defineBlockAppearancePreset({
8789
- kind: "block-design",
8790
- id: "hero-brand-scrim",
8791
- target: "hero",
8792
- label: "Brand scrim image hero",
8793
- blockKinds: ["block.hero"],
8794
- constraints: { layoutFamilies: ["centered", "compact"] },
8795
- optionGroups: [{
8796
- id: "image-surface-treatment",
8797
- label: "Treatment",
8798
- selectedOptionId: "brand-scrim-primary",
8799
- options: [{
8800
- id: "brand-scrim-primary",
8801
- label: "Brand scrim",
8802
- designPatch: { imageSurfaceTreatment: {
8803
- kind: "brand-scrim",
8804
- token: "primary"
8805
- } }
8806
- }, {
8807
- id: "neutral-scrim",
8808
- label: "Neutral scrim",
8809
- designPatch: { imageSurfaceTreatment: { kind: "neutral-scrim" } }
8810
- }]
8811
- }],
8812
- layoutPatches: [{
8813
- constraints: { layoutVariantKeys: ["micro"] },
8814
- designPatch: { sectionHeight: "banner" }
8815
- }],
8816
- design: {
8817
- sectionSurface: "hero-image",
8818
- contentFrame: plainFrame,
8819
- itemSurface: "none",
8820
- sectionHeight: "immersive",
8821
- heroComposition: "center",
8822
- heroTypographyScale: "display",
8823
- imageSurfaceTreatment: {
8824
- kind: "brand-scrim",
8825
- token: "primary"
8826
- }
8827
- }
8828
- }),
8829
- defineBlockAppearancePreset({
8830
- kind: "block-design",
8831
- id: "hero-brand-scrim-fixed-frame",
8832
- target: "hero",
8833
- label: "Fixed-frame brand scrim hero",
8834
- blockKinds: ["block.hero"],
8835
- constraints: { layoutFamilies: ["centered", "compact"] },
8836
- optionGroups: [{
8837
- id: "image-surface-treatment",
8838
- label: "Treatment",
8839
- selectedOptionId: "brand-scrim-primary",
8840
- options: [{
8841
- id: "brand-scrim-primary",
8842
- label: "Brand scrim",
8843
- designPatch: { imageSurfaceTreatment: {
8844
- kind: "brand-scrim",
8845
- token: "primary"
8846
- } }
8847
- }, {
8848
- id: "neutral-scrim",
8849
- label: "Neutral scrim",
8850
- designPatch: { imageSurfaceTreatment: { kind: "neutral-scrim" } }
8851
- }]
8852
- }],
8853
- layoutPatches: [{
8854
- constraints: { layoutVariantKeys: ["micro"] },
8855
- designPatch: { sectionHeight: "banner" }
8856
- }],
8857
- design: {
8858
- sectionSurface: "hero-image",
8859
- contentFrame: plainFrame,
8860
- itemSurface: "none",
8861
- sectionHeight: "immersive",
8862
- heroComposition: "center",
8863
- heroTypographyScale: "display",
8864
- imageSurfaceTreatment: {
8865
- kind: "brand-scrim",
8866
- token: "primary"
8867
- },
8868
- imageSurfaceMotion: "fixed-frame",
8869
- eyebrowTreatment: "accent-pill-bounce"
8870
- }
8871
- }),
8872
- defineBlockAppearancePreset({
8873
- kind: "block-design",
8874
- id: "hero-brand-depth-expressive",
8875
- target: "hero",
8876
- label: "Expressive brand-depth hero",
8877
- blockKinds: ["block.hero"],
8878
- constraints: { layoutFamilies: ["centered", "compact"] },
8879
- design: {
8880
- sectionSurface: "brand-depth-band",
8881
- contentFrame: plainFrame,
8882
- itemSurface: "none",
8883
- heroComposition: "center",
8884
- heroTypographyScale: "editorial",
8885
- eyebrowTreatment: "accent-pill-bounce"
8886
- }
8887
- }),
8888
- defineBlockAppearancePreset({
8889
- kind: "block-design",
8890
- id: "hero-contained-intro",
8891
- target: "hero",
8892
- label: "Contained intro hero",
8893
- blockKinds: ["block.hero"],
8894
- design: {
8895
- sectionSurface: "muted-band",
8896
- contentFrame: panelFrame("inset"),
8897
- itemSurface: "none",
8898
- heroComposition: "center",
8899
- heroTypographyScale: "editorial"
8900
- }
8901
- }),
8902
- defineBlockAppearancePreset({
8903
- kind: "block-design",
8904
- id: "hero-split-editorial",
8905
- target: "hero",
8906
- label: "Editorial split hero",
8907
- blockKinds: ["block.hero"],
8908
- constraints: { layoutFamilies: ["split"] },
8909
- design: {
8910
- sectionSurface: "base",
8911
- contentFrame: plainFrame,
8912
- itemSurface: "none",
8913
- heroTypographyScale: "editorial"
8914
- }
8915
- }),
8916
- defineBlockAppearancePreset({
8917
- kind: "block-design",
8918
- id: "hero-split-brand",
8919
- target: "hero",
8920
- label: "Brand split hero",
8921
- blockKinds: ["block.hero"],
8922
- constraints: { layoutFamilies: ["split"] },
8923
- design: {
8924
- sectionSurface: "brand-depth-band",
8925
- contentFrame: plainFrame,
8926
- itemSurface: "none",
8927
- heroTypographyScale: "display",
8928
- eyebrowTreatment: "accent-pill-bounce"
8929
- }
8930
- }),
8931
- defineBlockAppearancePreset({
8932
- kind: "block-design",
8933
- id: "hero-split-soft-panel",
8934
- target: "hero",
8935
- label: "Soft panel split hero",
8936
- blockKinds: ["block.hero"],
8937
- constraints: { layoutFamilies: ["split"] },
8938
- design: {
8939
- sectionSurface: "muted-band",
8940
- contentFrame: panelFrame("raised"),
8941
- itemSurface: "none",
8864
+ intensity: "balanced"
8865
+ } }
8866
+ }]
8867
+ }],
8868
+ layoutPatches: [{
8869
+ constraints: { layoutVariantKeys: ["micro"] },
8870
+ designPatch: {
8871
+ sectionHeight: "banner",
8942
8872
  heroTypographyScale: "editorial"
8943
8873
  }
8944
- }),
8945
- defineBlockAppearancePreset({
8946
- kind: "block-design",
8947
- id: "hero-split-accent",
8948
- target: "hero",
8949
- label: "Accent split hero",
8950
- blockKinds: ["block.hero"],
8951
- constraints: { layoutFamilies: ["split"] },
8952
- design: {
8953
- sectionSurface: "accent-band",
8954
- contentFrame: panelFrame("raised"),
8955
- itemSurface: "none",
8874
+ }],
8875
+ design: {
8876
+ sectionSurface: "hero-image",
8877
+ contentFrame: panelFrame("raised"),
8878
+ itemSurface: "none",
8879
+ sectionHeight: "immersive",
8880
+ heroComposition: "bottom-left",
8881
+ heroTypographyScale: "display",
8882
+ imageSurfaceTreatment: {
8883
+ kind: "neutral-scrim",
8884
+ intensity: "balanced"
8885
+ }
8886
+ }
8887
+ }), defineBlockAppearancePreset({
8888
+ id: "hero-poster-image",
8889
+ target: "hero",
8890
+ label: "Poster image hero",
8891
+ blockKinds: ["block.hero"],
8892
+ constraints: { layoutFamilies: ["centered", "compact"] },
8893
+ layoutPatches: [{
8894
+ constraints: { layoutVariantKeys: ["micro"] },
8895
+ designPatch: {
8896
+ sectionHeight: "banner",
8956
8897
  heroTypographyScale: "display"
8957
8898
  }
8958
- }),
8959
- defineBlockAppearancePreset({
8960
- kind: "block-design",
8961
- id: "intro-editorial-statement",
8962
- target: "intro",
8963
- label: "Editorial intro statement",
8964
- blockKinds: ["block.intro"],
8965
- constraints: { layoutVariantKeys: ["centered-copy", "statement-copy"] },
8966
- design: {
8967
- sectionSurface: "base",
8968
- contentFrame: plainFrame,
8969
- itemSurface: "none",
8970
- composition: {
8971
- kind: "intro",
8972
- treatment: "editorial-statement"
8973
- }
8974
- }
8975
- }),
8976
- defineBlockAppearancePreset({
8977
- kind: "block-design",
8978
- id: "intro-portrait-bio",
8979
- target: "intro",
8980
- label: "Portrait and bio",
8981
- blockKinds: ["block.intro"],
8982
- constraints: { layoutVariantKeys: ["media-copy"] },
8983
- design: {
8984
- sectionSurface: "base",
8985
- contentFrame: plainFrame,
8986
- itemSurface: "none",
8987
- composition: {
8988
- kind: "intro",
8989
- treatment: "portrait-bio"
8990
- }
8991
- }
8992
- }),
8993
- defineBlockAppearancePreset({
8994
- kind: "block-design",
8995
- id: "offerings-preview-default-cards",
8996
- target: "offerings",
8997
- label: "Default offering cards",
8998
- blockKinds: ["block.offerings-preview"],
8999
- design: {
9000
- sectionSurface: "base",
9001
- contentFrame: plainFrame,
9002
- itemSurface: "default"
9003
- }
9004
- }),
9005
- defineBlockAppearancePreset({
9006
- kind: "block-design",
9007
- id: "offerings-preview-secondary-cards",
9008
- target: "offerings",
9009
- label: "Secondary offering cards",
9010
- blockKinds: ["block.offerings-preview"],
9011
- design: {
9012
- sectionSurface: "muted-band",
9013
- contentFrame: plainFrame,
9014
- itemSurface: "inset"
9015
- }
9016
- }),
9017
- defineBlockAppearancePreset({
9018
- kind: "block-design",
9019
- id: "offerings-preview-non-carded",
9020
- target: "offerings",
9021
- label: "Non-carded offerings",
9022
- blockKinds: ["block.offerings-preview"],
9023
- design: {
9024
- sectionSurface: "muted-band",
9025
- contentFrame: plainFrame,
9026
- itemSurface: "editorial"
9027
- }
9028
- }),
9029
- defineBlockAppearancePreset({
9030
- kind: "block-design",
9031
- id: "offerings-preview-paired-feature-cards",
9032
- target: "offerings",
9033
- label: "Paired feature cards",
9034
- blockKinds: ["block.offerings-preview"],
9035
- constraints: { layoutVariantKeys: ["cards"] },
9036
- design: {
9037
- sectionSurface: "base",
9038
- contentFrame: plainFrame,
9039
- itemSurface: "none"
9040
- }
9041
- }),
9042
- defineBlockAppearancePreset({
9043
- kind: "block-design",
9044
- id: "offerings-preview-open-editorial-columns",
9045
- target: "offerings",
9046
- label: "Open editorial columns",
9047
- blockKinds: ["block.offerings-preview"],
9048
- constraints: { layoutVariantKeys: ["cards"] },
9049
- design: {
9050
- sectionSurface: "base",
9051
- contentFrame: plainFrame,
9052
- itemSurface: "none"
9053
- }
9054
- }),
9055
- defineBlockAppearancePreset({
9056
- kind: "block-design",
9057
- id: "offerings-preview-joined-programme-panel",
9058
- target: "offerings",
9059
- label: "Joined programme panel",
9060
- blockKinds: ["block.offerings-preview"],
9061
- constraints: { layoutVariantKeys: ["cards"] },
9062
- design: {
9063
- sectionSurface: "base",
9064
- contentFrame: plainFrame,
9065
- itemSurface: "none"
9066
- }
9067
- }),
9068
- defineBlockAppearancePreset({
9069
- kind: "block-design",
9070
- id: "feature-cards-raised-rule",
9071
- target: "feature-cards",
9072
- label: "Raised cards with rule",
9073
- blockKinds: ["block.feature-cards"],
9074
- design: {
9075
- sectionSurface: "base",
9076
- contentFrame: plainFrame,
9077
- itemSurface: "raised"
9078
- }
9079
- }),
9080
- defineBlockAppearancePreset({
9081
- kind: "block-design",
9082
- id: "feature-cards-bold-colors",
9083
- target: "feature-cards",
9084
- label: "Bold colour-blocked cards",
9085
- blockKinds: ["block.feature-cards"],
9086
- design: {
9087
- sectionSurface: "base",
9088
- contentFrame: plainFrame,
9089
- itemSurface: "color-blocked"
9090
- }
9091
- }),
9092
- defineBlockAppearancePreset({
9093
- kind: "block-design",
9094
- id: "feature-cards-editorial-columns",
9095
- target: "feature-cards",
9096
- label: "Editorial open columns",
9097
- blockKinds: ["block.feature-cards"],
9098
- design: {
9099
- sectionSurface: "base",
9100
- contentFrame: plainFrame,
9101
- itemSurface: "editorial"
9102
- }
9103
- }),
9104
- defineBlockAppearancePreset({
9105
- kind: "block-design",
9106
- id: "feature-cards-asymmetric-emphasis",
9107
- target: "feature-cards",
9108
- label: "Asymmetric emphasis pair",
9109
- blockKinds: ["block.feature-cards"],
9110
- constraints: { layoutFamilies: ["grid"] },
9111
- design: {
9112
- sectionSurface: "base",
9113
- contentFrame: plainFrame,
9114
- itemSurface: "none",
9115
- composition: {
9116
- kind: "feature-cards",
9117
- treatment: "asymmetric-emphasis"
9118
- }
9119
- }
9120
- }),
9121
- defineBlockAppearancePreset({
9122
- kind: "block-design",
9123
- id: "feature-cards-framed-programme",
9124
- target: "feature-cards",
9125
- label: "Framed programme cards",
9126
- blockKinds: ["block.feature-cards"],
9127
- constraints: { layoutFamilies: ["grid"] },
9128
- design: {
9129
- sectionSurface: "brand-depth-band",
9130
- contentFrame: plainFrame,
9131
- itemSurface: "inset",
9132
- composition: {
9133
- kind: "feature-cards",
9134
- treatment: "framed-programme"
9135
- }
9136
- }
9137
- }),
9138
- defineBlockAppearancePreset({
9139
- kind: "block-design",
9140
- id: "feature-cards-soft-panels",
9141
- target: "feature-cards",
9142
- label: "Soft tinted panels",
9143
- blockKinds: ["block.feature-cards"],
9144
- design: {
9145
- sectionSurface: "base",
9146
- contentFrame: plainFrame,
9147
- itemSurface: "inset"
9148
- }
9149
- }),
9150
- defineBlockAppearancePreset({
9151
- kind: "block-design",
9152
- id: "feature-cards-editorial-diptych",
9153
- target: "feature-cards",
9154
- label: "Editorial diptych",
9155
- blockKinds: ["block.feature-cards"],
9156
- constraints: { layoutVariantKeys: ["editorial-diptych"] },
9157
- design: {
9158
- sectionSurface: "base",
9159
- contentFrame: plainFrame,
9160
- itemSurface: "flat"
9161
- }
9162
- }),
9163
- defineBlockAppearancePreset({
9164
- kind: "block-design",
9165
- id: "feature-cards-editorial-pathways",
9166
- target: "feature-cards",
9167
- label: "Editorial pathways",
9168
- blockKinds: ["block.feature-cards"],
9169
- constraints: { layoutVariantKeys: ["editorial-pathways"] },
9170
- design: {
9171
- sectionSurface: "base",
9172
- contentFrame: plainFrame,
9173
- itemSurface: "flat"
9174
- }
9175
- }),
9176
- defineBlockAppearancePreset({
9177
- kind: "block-design",
9178
- id: "feature-cards-photo-tiles",
9179
- target: "feature-cards",
9180
- label: "Photo tiles",
9181
- blockKinds: ["block.feature-cards"],
9182
- design: {
9183
- sectionSurface: "base",
9184
- contentFrame: plainFrame,
9185
- itemSurface: "raised"
9186
- }
9187
- }),
9188
- defineBlockAppearancePreset({
9189
- kind: "block-design",
9190
- id: "events-lined-panel",
9191
- target: "events",
9192
- label: "Raised event panel",
9193
- blockKinds: ["block.event-calendar", "block.event-listing"],
9194
- design: {
9195
- sectionSurface: "base",
9196
- contentFrame: panelFrame("raised"),
9197
- itemSurface: "none"
9198
- }
9199
- }),
9200
- defineBlockAppearancePreset({
9201
- kind: "block-design",
9202
- id: "events-ruled-register",
9203
- target: "events",
9204
- label: "Ruled event register",
9205
- blockKinds: ["block.event-calendar", "block.event-listing"],
9206
- design: {
9207
- sectionSurface: "brand-depth-band",
9208
- contentFrame: plainFrame,
9209
- itemSurface: "none",
9210
- eventListTreatment: "ruled-register"
9211
- }
9212
- }),
9213
- defineBlockAppearancePreset({
9214
- kind: "block-design",
9215
- id: "events-editorial-register",
9216
- target: "events",
9217
- label: "Editorial event register",
9218
- blockKinds: ["block.event-calendar", "block.event-listing"],
9219
- design: {
9220
- sectionSurface: "base",
9221
- contentFrame: plainFrame,
9222
- itemSurface: "none",
9223
- eventListTreatment: "editorial-register"
9224
- }
9225
- }),
9226
- defineBlockAppearancePreset({
9227
- kind: "block-design",
9228
- id: "events-dense-index",
9229
- target: "events",
9230
- label: "Dense event index",
9231
- blockKinds: ["block.event-calendar", "block.event-listing"],
9232
- design: {
9233
- sectionSurface: "accent-band",
9234
- contentFrame: plainFrame,
9235
- itemSurface: "none",
9236
- eventListTreatment: "dense-index"
9237
- }
9238
- }),
9239
- defineBlockAppearancePreset({
9240
- kind: "block-design",
9241
- id: "schedule-details-brand-depth",
9242
- target: "events",
9243
- label: "Brand-depth schedule details",
9244
- blockKinds: ["block.event-details", "block.course-details"],
9245
- design: {
9246
- sectionSurface: "brand-depth-band",
9247
- contentFrame: plainFrame,
9248
- itemSurface: "none",
9249
- tileTreatment: "brand-depth"
9250
- }
9251
- }),
9252
- defineBlockAppearancePreset({
9253
- kind: "block-design",
9254
- id: "media-text-flush-feature",
9255
- target: "media-text",
9256
- label: "Flush media feature",
9257
- blockKinds: ["block.media-text"],
9258
- design: {
9259
- sectionSurface: "muted-band",
9260
- contentFrame: flushPanelFrame({ bleed: "start" }),
9261
- itemSurface: "none"
9262
- }
9263
- }),
9264
- defineBlockAppearancePreset({
9265
- kind: "block-design",
9266
- id: "testimonials-simple-cards",
9267
- target: "testimonials",
9268
- label: "Simple testimonial cards",
9269
- blockKinds: ["block.testimonials"],
9270
- design: {
9271
- sectionSurface: "base",
9272
- contentFrame: plainFrame,
9273
- itemSurface: "default"
9274
- }
9275
- }),
9276
- defineBlockAppearancePreset({
9277
- kind: "block-design",
9278
- id: "testimonials-raised-panel",
9279
- target: "testimonials",
9280
- label: "Raised testimonial panel",
9281
- blockKinds: ["block.testimonials"],
9282
- design: {
9283
- sectionSurface: "muted-band",
9284
- contentFrame: panelFrame("raised"),
9285
- itemSurface: "raised"
9286
- }
9287
- }),
9288
- defineBlockAppearancePreset({
9289
- kind: "block-design",
9290
- id: "testimonials-accent-panel",
9291
- target: "testimonials",
9292
- label: "Accent testimonial panel",
9293
- blockKinds: ["block.testimonials"],
9294
- design: {
9295
- sectionSurface: "accent-band",
9296
- contentFrame: panelFrame("raised"),
9297
- itemSurface: "raised"
9298
- }
9299
- }),
9300
- defineBlockAppearancePreset({
9301
- kind: "block-design",
9302
- id: "testimonials-default-cards",
9303
- target: "testimonials",
9304
- label: "Default cards",
9305
- blockKinds: ["block.testimonials"],
9306
- design: {
9307
- sectionSurface: "base",
9308
- contentFrame: plainFrame,
9309
- itemSurface: "none",
9310
- testimonialCardTreatment: "default"
9311
- }
9312
- }),
9313
- defineBlockAppearancePreset({
9314
- kind: "block-design",
9315
- id: "testimonials-statement-cards",
9316
- target: "testimonials",
9317
- label: "Statement cards",
9318
- blockKinds: ["block.testimonials"],
9319
- design: {
9320
- sectionSurface: "accent-band",
9321
- contentFrame: plainFrame,
9322
- itemSurface: "raised",
9323
- testimonialCardTreatment: "statement"
9324
- }
9325
- }),
9326
- defineBlockAppearancePreset({
9327
- kind: "block-design",
9328
- id: "testimonials-brand-statement-cards",
9329
- target: "testimonials",
9330
- label: "Brand statement cards",
9331
- blockKinds: ["block.testimonials"],
9332
- design: {
9333
- sectionSurface: "brand-depth-band",
9334
- contentFrame: plainFrame,
9335
- itemSurface: "raised",
9336
- testimonialCardTreatment: "statement"
9337
- }
9338
- }),
9339
- defineBlockAppearancePreset({
9340
- kind: "block-design",
9341
- id: "testimonials-non-carded",
9342
- target: "testimonials",
9343
- label: "Non-carded",
9344
- blockKinds: ["block.testimonials"],
9345
- design: {
9346
- sectionSurface: "muted-band",
9347
- contentFrame: plainFrame,
9348
- itemSurface: "none",
9349
- testimonialCardTreatment: "non-carded"
9350
- }
9351
- }),
9352
- defineBlockAppearancePreset({
9353
- kind: "block-design",
9354
- id: "testimonials-evergreen-lead",
9355
- target: "testimonials",
9356
- label: "Evergreen lead",
9357
- blockKinds: ["block.testimonials"],
9358
- constraints: { layoutVariantKeys: ["featured-editorial"] },
9359
- design: {
9360
- sectionSurface: "base",
9361
- contentFrame: plainFrame,
9362
- itemSurface: "none"
9363
- }
9364
- }),
9365
- defineBlockAppearancePreset({
9366
- kind: "block-design",
9367
- id: "testimonials-room-and-response",
9368
- target: "testimonials",
9369
- label: "Room and response",
9370
- blockKinds: ["block.testimonials"],
9371
- constraints: { layoutVariantKeys: ["featured-editorial"] },
9372
- design: {
9373
- sectionSurface: "base",
9374
- contentFrame: plainFrame,
9375
- itemSurface: "none"
9376
- }
9377
- }),
9378
- defineBlockAppearancePreset({
9379
- kind: "block-design",
9380
- id: "testimonials-open-floor",
9381
- target: "testimonials",
9382
- label: "Open floor",
9383
- blockKinds: ["block.testimonials"],
9384
- constraints: { layoutVariantKeys: ["featured-editorial"] },
9385
- design: {
9386
- sectionSurface: "base",
9387
- contentFrame: plainFrame,
9388
- itemSurface: "none"
9389
- }
9390
- }),
9391
- defineBlockAppearancePreset({
9392
- kind: "block-design",
9393
- id: "faq-base-accordion",
9394
- target: "faq",
9395
- label: "Base accordion FAQ",
9396
- blockKinds: ["block.faq"],
9397
- design: {
9398
- sectionSurface: "base",
9399
- contentFrame: plainFrame,
9400
- itemSurface: "default"
9401
- }
9402
- }),
9403
- defineBlockAppearancePreset({
9404
- kind: "block-design",
9405
- id: "faq-contained-help",
9406
- target: "faq",
9407
- label: "Contained help panel",
9408
- blockKinds: ["block.faq"],
9409
- design: {
9410
- sectionSurface: "muted-band",
9411
- contentFrame: panelFrame("inset"),
9412
- itemSurface: "default"
9413
- }
9414
- }),
9415
- defineBlockAppearancePreset({
9416
- kind: "block-design",
9417
- id: "contact-form-panel",
9418
- target: "contact-form",
9419
- label: "Raised form panel",
9420
- blockKinds: ["block.form"],
9421
- design: {
9422
- sectionSurface: "muted-band",
9423
- contentFrame: panelFrame("raised"),
9424
- itemSurface: "none"
9425
- }
9426
- }),
9427
- defineBlockAppearancePreset({
9428
- kind: "block-design",
9429
- id: "cta-accent-band",
9430
- target: "cta",
9431
- label: "Accent CTA band",
9432
- blockKinds: ["block.cta-full"],
9433
- design: {
9434
- sectionSurface: "accent-band",
9435
- contentFrame: plainFrame,
9436
- itemSurface: "none",
9437
- eyebrowTreatment: "accent"
9438
- }
9439
- })
9440
- ]];
8899
+ }],
8900
+ design: {
8901
+ sectionSurface: "hero-image",
8902
+ contentFrame: plainFrame,
8903
+ itemSurface: "none",
8904
+ sectionHeight: "immersive",
8905
+ heroComposition: "center",
8906
+ heroTypographyScale: "poster",
8907
+ imageSurfaceTreatment: {
8908
+ kind: "brand-scrim",
8909
+ token: "primary",
8910
+ intensity: "strong"
8911
+ }
8912
+ }
8913
+ }), defineBlockAppearancePreset({
8914
+ id: "hero-brand-scrim",
8915
+ target: "hero",
8916
+ label: "Brand scrim image hero",
8917
+ blockKinds: ["block.hero"],
8918
+ constraints: { layoutFamilies: ["centered", "compact"] },
8919
+ optionGroups: brandScrimOptionGroups,
8920
+ layoutPatches: microBannerLayoutPatches,
8921
+ design: {
8922
+ sectionSurface: "hero-image",
8923
+ contentFrame: plainFrame,
8924
+ itemSurface: "none",
8925
+ sectionHeight: "immersive",
8926
+ heroComposition: "center",
8927
+ heroTypographyScale: "display",
8928
+ imageSurfaceTreatment: {
8929
+ kind: "brand-scrim",
8930
+ token: "primary"
8931
+ }
8932
+ }
8933
+ }), defineBlockAppearancePreset({
8934
+ id: "hero-brand-scrim-fixed-frame",
8935
+ target: "hero",
8936
+ label: "Fixed-frame brand scrim hero",
8937
+ blockKinds: ["block.hero"],
8938
+ constraints: { layoutFamilies: ["centered", "compact"] },
8939
+ optionGroups: brandScrimOptionGroups,
8940
+ layoutPatches: microBannerLayoutPatches,
8941
+ design: {
8942
+ sectionSurface: "hero-image",
8943
+ contentFrame: plainFrame,
8944
+ itemSurface: "none",
8945
+ sectionHeight: "immersive",
8946
+ heroComposition: "center",
8947
+ heroTypographyScale: "display",
8948
+ imageSurfaceTreatment: {
8949
+ kind: "brand-scrim",
8950
+ token: "primary"
8951
+ },
8952
+ imageSurfaceMotion: "fixed-frame",
8953
+ eyebrowTreatment: "accent-pill-bounce"
8954
+ }
8955
+ }), defineBlockAppearancePreset({
8956
+ id: "hero-brand-depth-expressive",
8957
+ target: "hero",
8958
+ label: "Expressive brand-depth hero",
8959
+ blockKinds: ["block.hero"],
8960
+ constraints: { layoutFamilies: ["centered", "compact"] },
8961
+ design: {
8962
+ sectionSurface: "brand-depth-band",
8963
+ contentFrame: plainFrame,
8964
+ itemSurface: "none",
8965
+ heroComposition: "center",
8966
+ heroTypographyScale: "editorial",
8967
+ eyebrowTreatment: "accent-pill-bounce"
8968
+ }
8969
+ }), defineBlockAppearancePreset({
8970
+ id: "hero-contained-intro",
8971
+ target: "hero",
8972
+ label: "Contained intro hero",
8973
+ blockKinds: ["block.hero"],
8974
+ design: {
8975
+ sectionSurface: "muted-band",
8976
+ contentFrame: panelFrame("inset"),
8977
+ itemSurface: "none",
8978
+ heroComposition: "center",
8979
+ heroTypographyScale: "editorial"
8980
+ }
8981
+ }), defineBlockAppearancePreset({
8982
+ id: "hero-split-editorial",
8983
+ target: "hero",
8984
+ label: "Editorial split hero",
8985
+ blockKinds: ["block.hero"],
8986
+ constraints: { layoutFamilies: ["split"] },
8987
+ design: {
8988
+ sectionSurface: "base",
8989
+ contentFrame: plainFrame,
8990
+ itemSurface: "none",
8991
+ heroTypographyScale: "editorial"
8992
+ }
8993
+ }), defineBlockAppearancePreset({
8994
+ id: "hero-split-brand",
8995
+ target: "hero",
8996
+ label: "Brand split hero",
8997
+ blockKinds: ["block.hero"],
8998
+ constraints: { layoutFamilies: ["split"] },
8999
+ design: {
9000
+ sectionSurface: "brand-depth-band",
9001
+ contentFrame: plainFrame,
9002
+ itemSurface: "none",
9003
+ heroTypographyScale: "display",
9004
+ eyebrowTreatment: "accent-pill-bounce"
9005
+ }
9006
+ }), defineBlockAppearancePreset({
9007
+ id: "hero-split-soft-panel",
9008
+ target: "hero",
9009
+ label: "Soft panel split hero",
9010
+ blockKinds: ["block.hero"],
9011
+ constraints: { layoutFamilies: ["split"] },
9012
+ design: {
9013
+ sectionSurface: "muted-band",
9014
+ contentFrame: panelFrame("raised"),
9015
+ itemSurface: "none",
9016
+ heroTypographyScale: "editorial"
9017
+ }
9018
+ }), defineBlockAppearancePreset({
9019
+ id: "hero-split-accent",
9020
+ target: "hero",
9021
+ label: "Accent split hero",
9022
+ blockKinds: ["block.hero"],
9023
+ constraints: { layoutFamilies: ["split"] },
9024
+ design: {
9025
+ sectionSurface: "accent-band",
9026
+ contentFrame: panelFrame("raised"),
9027
+ itemSurface: "none",
9028
+ heroTypographyScale: "display"
9029
+ }
9030
+ }), defineBlockAppearancePreset({
9031
+ id: "intro-editorial-statement",
9032
+ target: "intro",
9033
+ label: "Editorial intro statement",
9034
+ blockKinds: ["block.intro"],
9035
+ constraints: { layoutVariantKeys: ["centered-copy", "statement-copy"] },
9036
+ design: {
9037
+ sectionSurface: "base",
9038
+ contentFrame: plainFrame,
9039
+ itemSurface: "none",
9040
+ composition: {
9041
+ kind: "intro",
9042
+ treatment: "editorial-statement"
9043
+ }
9044
+ }
9045
+ }), defineBlockAppearancePreset({
9046
+ id: "intro-portrait-bio",
9047
+ target: "intro",
9048
+ label: "Portrait and bio",
9049
+ blockKinds: ["block.intro"],
9050
+ constraints: { layoutVariantKeys: ["media-copy"] },
9051
+ design: {
9052
+ sectionSurface: "base",
9053
+ contentFrame: plainFrame,
9054
+ itemSurface: "none",
9055
+ composition: {
9056
+ kind: "intro",
9057
+ treatment: "portrait-bio"
9058
+ }
9059
+ }
9060
+ }), defineBlockAppearancePreset({
9061
+ id: "offerings-preview-default-cards",
9062
+ target: "offerings",
9063
+ label: "Default offering cards",
9064
+ blockKinds: ["block.offerings-preview"],
9065
+ design: {
9066
+ sectionSurface: "base",
9067
+ contentFrame: plainFrame,
9068
+ itemSurface: "default"
9069
+ }
9070
+ }), defineBlockAppearancePreset({
9071
+ id: "offerings-preview-secondary-cards",
9072
+ target: "offerings",
9073
+ label: "Secondary offering cards",
9074
+ blockKinds: ["block.offerings-preview"],
9075
+ design: {
9076
+ sectionSurface: "muted-band",
9077
+ contentFrame: plainFrame,
9078
+ itemSurface: "inset"
9079
+ }
9080
+ }), defineBlockAppearancePreset({
9081
+ id: "offerings-preview-non-carded",
9082
+ target: "offerings",
9083
+ label: "Non-carded offerings",
9084
+ blockKinds: ["block.offerings-preview"],
9085
+ design: {
9086
+ sectionSurface: "muted-band",
9087
+ contentFrame: plainFrame,
9088
+ itemSurface: "editorial"
9089
+ }
9090
+ }), defineBlockAppearancePreset({
9091
+ id: "offerings-preview-paired-feature-cards",
9092
+ target: "offerings",
9093
+ label: "Paired feature cards",
9094
+ blockKinds: ["block.offerings-preview"],
9095
+ constraints: { layoutVariantKeys: ["cards"] },
9096
+ design: {
9097
+ sectionSurface: "base",
9098
+ contentFrame: plainFrame,
9099
+ itemSurface: "none"
9100
+ }
9101
+ }), defineBlockAppearancePreset({
9102
+ id: "offerings-preview-open-editorial-columns",
9103
+ target: "offerings",
9104
+ label: "Open editorial columns",
9105
+ blockKinds: ["block.offerings-preview"],
9106
+ constraints: { layoutVariantKeys: ["cards"] },
9107
+ design: {
9108
+ sectionSurface: "base",
9109
+ contentFrame: plainFrame,
9110
+ itemSurface: "none"
9111
+ }
9112
+ }), defineBlockAppearancePreset({
9113
+ id: "offerings-preview-joined-programme-panel",
9114
+ target: "offerings",
9115
+ label: "Joined programme panel",
9116
+ blockKinds: ["block.offerings-preview"],
9117
+ constraints: { layoutVariantKeys: ["cards"] },
9118
+ design: {
9119
+ sectionSurface: "base",
9120
+ contentFrame: plainFrame,
9121
+ itemSurface: "none"
9122
+ }
9123
+ }), defineBlockAppearancePreset({
9124
+ id: "feature-cards-raised-rule",
9125
+ target: "feature-cards",
9126
+ label: "Raised cards with rule",
9127
+ blockKinds: ["block.feature-cards"],
9128
+ design: {
9129
+ sectionSurface: "base",
9130
+ contentFrame: plainFrame,
9131
+ itemSurface: "raised"
9132
+ }
9133
+ }), defineBlockAppearancePreset({
9134
+ id: "feature-cards-bold-colors",
9135
+ target: "feature-cards",
9136
+ label: "Bold colour-blocked cards",
9137
+ blockKinds: ["block.feature-cards"],
9138
+ design: {
9139
+ sectionSurface: "base",
9140
+ contentFrame: plainFrame,
9141
+ itemSurface: "color-blocked"
9142
+ }
9143
+ }), defineBlockAppearancePreset({
9144
+ id: "feature-cards-editorial-columns",
9145
+ target: "feature-cards",
9146
+ label: "Editorial open columns",
9147
+ blockKinds: ["block.feature-cards"],
9148
+ design: {
9149
+ sectionSurface: "base",
9150
+ contentFrame: plainFrame,
9151
+ itemSurface: "editorial"
9152
+ }
9153
+ }), defineBlockAppearancePreset({
9154
+ id: "feature-cards-asymmetric-emphasis",
9155
+ target: "feature-cards",
9156
+ label: "Asymmetric emphasis pair",
9157
+ blockKinds: ["block.feature-cards"],
9158
+ constraints: { layoutFamilies: ["grid"] },
9159
+ design: {
9160
+ sectionSurface: "base",
9161
+ contentFrame: plainFrame,
9162
+ itemSurface: "none",
9163
+ composition: {
9164
+ kind: "feature-cards",
9165
+ treatment: "asymmetric-emphasis"
9166
+ }
9167
+ }
9168
+ }), defineBlockAppearancePreset({
9169
+ id: "feature-cards-framed-programme",
9170
+ target: "feature-cards",
9171
+ label: "Framed programme cards",
9172
+ blockKinds: ["block.feature-cards"],
9173
+ constraints: { layoutFamilies: ["grid"] },
9174
+ design: {
9175
+ sectionSurface: "brand-depth-band",
9176
+ contentFrame: plainFrame,
9177
+ itemSurface: "inset",
9178
+ composition: {
9179
+ kind: "feature-cards",
9180
+ treatment: "framed-programme"
9181
+ }
9182
+ }
9183
+ }), defineBlockAppearancePreset({
9184
+ id: "feature-cards-soft-panels",
9185
+ target: "feature-cards",
9186
+ label: "Soft tinted panels",
9187
+ blockKinds: ["block.feature-cards"],
9188
+ design: {
9189
+ sectionSurface: "base",
9190
+ contentFrame: plainFrame,
9191
+ itemSurface: "inset"
9192
+ }
9193
+ }), defineBlockAppearancePreset({
9194
+ id: "feature-cards-editorial-diptych",
9195
+ target: "feature-cards",
9196
+ label: "Editorial diptych",
9197
+ blockKinds: ["block.feature-cards"],
9198
+ constraints: { layoutVariantKeys: ["editorial-diptych"] },
9199
+ design: {
9200
+ sectionSurface: "base",
9201
+ contentFrame: plainFrame,
9202
+ itemSurface: "flat"
9203
+ }
9204
+ }), defineBlockAppearancePreset({
9205
+ id: "feature-cards-editorial-pathways",
9206
+ target: "feature-cards",
9207
+ label: "Editorial pathways",
9208
+ blockKinds: ["block.feature-cards"],
9209
+ constraints: { layoutVariantKeys: ["editorial-pathways"] },
9210
+ design: {
9211
+ sectionSurface: "base",
9212
+ contentFrame: plainFrame,
9213
+ itemSurface: "flat"
9214
+ }
9215
+ }), defineBlockAppearancePreset({
9216
+ id: "feature-cards-photo-tiles",
9217
+ target: "feature-cards",
9218
+ label: "Photo tiles",
9219
+ blockKinds: ["block.feature-cards"],
9220
+ design: {
9221
+ sectionSurface: "base",
9222
+ contentFrame: plainFrame,
9223
+ itemSurface: "raised"
9224
+ }
9225
+ }), defineBlockAppearancePreset({
9226
+ id: "events-lined-panel",
9227
+ target: "events",
9228
+ label: "Raised event panel",
9229
+ blockKinds: ["block.event-calendar", "block.event-listing"],
9230
+ design: {
9231
+ sectionSurface: "base",
9232
+ contentFrame: panelFrame("raised"),
9233
+ itemSurface: "none"
9234
+ }
9235
+ }), defineBlockAppearancePreset({
9236
+ id: "events-ruled-register",
9237
+ target: "events",
9238
+ label: "Ruled event register",
9239
+ blockKinds: ["block.event-calendar", "block.event-listing"],
9240
+ design: {
9241
+ sectionSurface: "brand-depth-band",
9242
+ contentFrame: plainFrame,
9243
+ itemSurface: "none",
9244
+ eventListTreatment: "ruled-register"
9245
+ }
9246
+ }), defineBlockAppearancePreset({
9247
+ id: "events-editorial-register",
9248
+ target: "events",
9249
+ label: "Editorial event register",
9250
+ blockKinds: ["block.event-calendar", "block.event-listing"],
9251
+ design: {
9252
+ sectionSurface: "base",
9253
+ contentFrame: plainFrame,
9254
+ itemSurface: "none",
9255
+ eventListTreatment: "editorial-register"
9256
+ }
9257
+ }), defineBlockAppearancePreset({
9258
+ id: "events-dense-index",
9259
+ target: "events",
9260
+ label: "Dense event index",
9261
+ blockKinds: ["block.event-calendar", "block.event-listing"],
9262
+ design: {
9263
+ sectionSurface: "accent-band",
9264
+ contentFrame: plainFrame,
9265
+ itemSurface: "none",
9266
+ eventListTreatment: "dense-index"
9267
+ }
9268
+ }), defineBlockAppearancePreset({
9269
+ id: "schedule-details-brand-depth",
9270
+ target: "events",
9271
+ label: "Brand-depth schedule details",
9272
+ blockKinds: ["block.event-details", "block.course-details"],
9273
+ design: {
9274
+ sectionSurface: "brand-depth-band",
9275
+ contentFrame: plainFrame,
9276
+ itemSurface: "none",
9277
+ tileTreatment: "brand-depth"
9278
+ }
9279
+ }), defineBlockAppearancePreset({
9280
+ id: "media-text-flush-feature",
9281
+ target: "media-text",
9282
+ label: "Flush media feature",
9283
+ blockKinds: ["block.media-text"],
9284
+ design: {
9285
+ sectionSurface: "muted-band",
9286
+ contentFrame: flushPanelFrame({ bleed: "start" }),
9287
+ itemSurface: "none"
9288
+ }
9289
+ }), defineBlockAppearancePreset({
9290
+ id: "testimonials-simple-cards",
9291
+ target: "testimonials",
9292
+ label: "Simple testimonial cards",
9293
+ blockKinds: ["block.testimonials"],
9294
+ design: {
9295
+ sectionSurface: "base",
9296
+ contentFrame: plainFrame,
9297
+ itemSurface: "default"
9298
+ }
9299
+ }), defineBlockAppearancePreset({
9300
+ id: "testimonials-raised-panel",
9301
+ target: "testimonials",
9302
+ label: "Raised testimonial panel",
9303
+ blockKinds: ["block.testimonials"],
9304
+ design: {
9305
+ sectionSurface: "muted-band",
9306
+ contentFrame: panelFrame("raised"),
9307
+ itemSurface: "raised"
9308
+ }
9309
+ }), defineBlockAppearancePreset({
9310
+ id: "testimonials-accent-panel",
9311
+ target: "testimonials",
9312
+ label: "Accent testimonial panel",
9313
+ blockKinds: ["block.testimonials"],
9314
+ design: {
9315
+ sectionSurface: "accent-band",
9316
+ contentFrame: panelFrame("raised"),
9317
+ itemSurface: "raised"
9318
+ }
9319
+ }), defineBlockAppearancePreset({
9320
+ id: "testimonials-default-cards",
9321
+ target: "testimonials",
9322
+ label: "Default cards",
9323
+ blockKinds: ["block.testimonials"],
9324
+ design: {
9325
+ sectionSurface: "base",
9326
+ contentFrame: plainFrame,
9327
+ itemSurface: "none",
9328
+ testimonialCardTreatment: "default"
9329
+ }
9330
+ }), defineBlockAppearancePreset({
9331
+ id: "testimonials-statement-cards",
9332
+ target: "testimonials",
9333
+ label: "Statement cards",
9334
+ blockKinds: ["block.testimonials"],
9335
+ design: {
9336
+ sectionSurface: "accent-band",
9337
+ contentFrame: plainFrame,
9338
+ itemSurface: "raised",
9339
+ testimonialCardTreatment: "statement"
9340
+ }
9341
+ }), defineBlockAppearancePreset({
9342
+ id: "testimonials-brand-statement-cards",
9343
+ target: "testimonials",
9344
+ label: "Brand statement cards",
9345
+ blockKinds: ["block.testimonials"],
9346
+ design: {
9347
+ sectionSurface: "brand-depth-band",
9348
+ contentFrame: plainFrame,
9349
+ itemSurface: "raised",
9350
+ testimonialCardTreatment: "statement"
9351
+ }
9352
+ }), defineBlockAppearancePreset({
9353
+ id: "testimonials-non-carded",
9354
+ target: "testimonials",
9355
+ label: "Non-carded",
9356
+ blockKinds: ["block.testimonials"],
9357
+ design: {
9358
+ sectionSurface: "muted-band",
9359
+ contentFrame: plainFrame,
9360
+ itemSurface: "none",
9361
+ testimonialCardTreatment: "non-carded"
9362
+ }
9363
+ }), defineBlockAppearancePreset({
9364
+ id: "testimonials-evergreen-lead",
9365
+ target: "testimonials",
9366
+ label: "Evergreen lead",
9367
+ blockKinds: ["block.testimonials"],
9368
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
9369
+ design: {
9370
+ sectionSurface: "base",
9371
+ contentFrame: plainFrame,
9372
+ itemSurface: "none"
9373
+ }
9374
+ }), defineBlockAppearancePreset({
9375
+ id: "testimonials-room-and-response",
9376
+ target: "testimonials",
9377
+ label: "Room and response",
9378
+ blockKinds: ["block.testimonials"],
9379
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
9380
+ design: {
9381
+ sectionSurface: "base",
9382
+ contentFrame: plainFrame,
9383
+ itemSurface: "none"
9384
+ }
9385
+ }), defineBlockAppearancePreset({
9386
+ id: "testimonials-open-floor",
9387
+ target: "testimonials",
9388
+ label: "Open floor",
9389
+ blockKinds: ["block.testimonials"],
9390
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
9391
+ design: {
9392
+ sectionSurface: "base",
9393
+ contentFrame: plainFrame,
9394
+ itemSurface: "none"
9395
+ }
9396
+ }), defineBlockAppearancePreset({
9397
+ id: "faq-base-accordion",
9398
+ target: "faq",
9399
+ label: "Base accordion FAQ",
9400
+ blockKinds: ["block.faq"],
9401
+ design: {
9402
+ sectionSurface: "base",
9403
+ contentFrame: plainFrame,
9404
+ itemSurface: "default"
9405
+ }
9406
+ }), defineBlockAppearancePreset({
9407
+ id: "faq-contained-help",
9408
+ target: "faq",
9409
+ label: "Contained help panel",
9410
+ blockKinds: ["block.faq"],
9411
+ design: {
9412
+ sectionSurface: "muted-band",
9413
+ contentFrame: panelFrame("inset"),
9414
+ itemSurface: "default"
9415
+ }
9416
+ }), defineBlockAppearancePreset({
9417
+ id: "contact-form-panel",
9418
+ target: "contact-form",
9419
+ label: "Raised form panel",
9420
+ blockKinds: ["block.form"],
9421
+ design: {
9422
+ sectionSurface: "muted-band",
9423
+ contentFrame: panelFrame("raised"),
9424
+ itemSurface: "none"
9425
+ }
9426
+ }), defineBlockAppearancePreset({
9427
+ id: "cta-accent-band",
9428
+ target: "cta",
9429
+ label: "Accent CTA band",
9430
+ blockKinds: ["block.cta-full"],
9431
+ design: {
9432
+ sectionSurface: "accent-band",
9433
+ contentFrame: plainFrame,
9434
+ itemSurface: "none",
9435
+ eyebrowTreatment: "accent"
9436
+ }
9437
+ });
9441
9438
  //#endregion
9442
9439
  //#region ../theme-core/src/site-styles/headerCtaVariants.ts
9443
9440
  function hasButtonVariant(theme, variantId) {
@@ -9518,6 +9515,27 @@ function uniqueStrings(values) {
9518
9515
  return Array.from(new Set(values));
9519
9516
  }
9520
9517
  //#endregion
9518
+ //#region ../theme-core/src/site-styles/headerInteractionPalette.ts
9519
+ const clearSplitInteractionPalette = defineLookOptionGroup({
9520
+ id: "interaction-palette",
9521
+ label: "Hover colour",
9522
+ defaultOptionId: "accent",
9523
+ options: [
9524
+ {
9525
+ id: "accent",
9526
+ label: "Accent"
9527
+ },
9528
+ {
9529
+ id: "primary",
9530
+ label: "Primary"
9531
+ },
9532
+ {
9533
+ id: "secondary",
9534
+ label: "Secondary"
9535
+ }
9536
+ ]
9537
+ });
9538
+ //#endregion
9521
9539
  //#region ../theme-core/src/site-styles/headerLooks.ts
9522
9540
  function asHeaderLookId(value) {
9523
9541
  return value;
@@ -9651,7 +9669,7 @@ const overlayLogoAccommodations = [
9651
9669
  * optional nested styling fields that would otherwise leak from another Look.
9652
9670
  */
9653
9671
  function baseHeader(theme) {
9654
- 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;
9672
+ 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;
9655
9673
  return {
9656
9674
  ...header,
9657
9675
  navContainer: {
@@ -9666,7 +9684,6 @@ const headerLayoutCatalog = defineExactCatalog()([
9666
9684
  id: asHeaderLayoutId("classic"),
9667
9685
  label: "Classic",
9668
9686
  description: "Logo and navigation in one practical horizontal row.",
9669
- structure: "inline-classic",
9670
9687
  variant: "classic",
9671
9688
  defaultPositioning: "sticky",
9672
9689
  shrinkOnScroll: false
@@ -9675,7 +9692,6 @@ const headerLayoutCatalog = defineExactCatalog()([
9675
9692
  id: asHeaderLayoutId("centered"),
9676
9693
  label: "Centered",
9677
9694
  description: "Logo centered above a balanced navigation row.",
9678
- structure: "centered-stack",
9679
9695
  variant: "centered",
9680
9696
  defaultPositioning: "static",
9681
9697
  shrinkOnScroll: false,
@@ -9691,7 +9707,6 @@ const headerLayoutCatalog = defineExactCatalog()([
9691
9707
  id: asHeaderLayoutId("floating"),
9692
9708
  label: "Floating",
9693
9709
  description: "Detached header chrome that sits over the opening section.",
9694
- structure: "floating-shell",
9695
9710
  variant: "floating",
9696
9711
  defaultPositioning: "sticky",
9697
9712
  shrinkOnScroll: true,
@@ -9853,10 +9868,13 @@ const headerStyleCatalog = defineExactCatalog()([
9853
9868
  label: "Clear Split",
9854
9869
  description: "Floating logo with transparent navigation and no shared shell.",
9855
9870
  supportedLayoutIds: supportedLayouts(["floating"]),
9856
- navInteraction: "color-change",
9871
+ navInteraction: "pill-background",
9857
9872
  surface: "floating",
9858
- defaultDepth: "none",
9873
+ defaultDepth: "line",
9859
9874
  navTypography: "plain",
9875
+ openingForegroundTarget: "all",
9876
+ scrollTreatment: "contrast-glass",
9877
+ interactionPalette: clearSplitInteractionPalette,
9860
9878
  moods: ["editorial", "calm"]
9861
9879
  },
9862
9880
  {
@@ -9879,6 +9897,7 @@ const headerStyleCatalog = defineExactCatalog()([
9879
9897
  surface: "floating",
9880
9898
  defaultDepth: "shadow",
9881
9899
  navTypography: "quiet-caps",
9900
+ openingForegroundTarget: "brand-only",
9882
9901
  moods: ["expressive"]
9883
9902
  },
9884
9903
  {
@@ -9890,6 +9909,7 @@ const headerStyleCatalog = defineExactCatalog()([
9890
9909
  surface: "floating",
9891
9910
  defaultDepth: "shadow",
9892
9911
  navTypography: "heading",
9912
+ openingForegroundTarget: "brand-only",
9893
9913
  moods: ["calm", "editorial"]
9894
9914
  }
9895
9915
  ]);
@@ -10391,13 +10411,6 @@ const headerLookCatalog = defineExactCatalog()([
10391
10411
  {
10392
10412
  id: asHeaderLookId("clean-base"),
10393
10413
  label: "Clean base",
10394
- visualTreatment: "solid-neutral",
10395
- layoutBehavior: "sticky",
10396
- configuration: {
10397
- structure: "inline-classic",
10398
- treatment: "solid-neutral",
10399
- behavior: "sticky"
10400
- },
10401
10414
  openingRequirement: "none",
10402
10415
  logoAccommodations: inlineClassicLogoAccommodations,
10403
10416
  compile: cleanBaseHeader
@@ -10405,13 +10418,6 @@ const headerLookCatalog = defineExactCatalog()([
10405
10418
  {
10406
10419
  id: asHeaderLookId("classic-centered-nav"),
10407
10420
  label: "Centered nav",
10408
- visualTreatment: "solid-neutral",
10409
- layoutBehavior: "sticky",
10410
- configuration: {
10411
- structure: "inline-classic",
10412
- treatment: "solid-neutral",
10413
- behavior: "sticky"
10414
- },
10415
10421
  openingRequirement: "none",
10416
10422
  maxRecommendedNavItems: 6,
10417
10423
  logoAccommodations: inlineClassicLogoAccommodations,
@@ -10420,13 +10426,6 @@ const headerLookCatalog = defineExactCatalog()([
10420
10426
  {
10421
10427
  id: asHeaderLookId("brand-solid"),
10422
10428
  label: "Brand solid",
10423
- visualTreatment: "solid-brand",
10424
- layoutBehavior: "sticky-shrink",
10425
- configuration: {
10426
- structure: "inline-classic",
10427
- treatment: "solid-brand",
10428
- behavior: "sticky-shrink"
10429
- },
10430
10429
  openingRequirement: "none",
10431
10430
  logoAccommodations: inlineClassicLogoAccommodations,
10432
10431
  compile: solidBrandHeader
@@ -10434,13 +10433,6 @@ const headerLookCatalog = defineExactCatalog()([
10434
10433
  {
10435
10434
  id: asHeaderLookId("serif-line"),
10436
10435
  label: "Serif line",
10437
- visualTreatment: "light-serif",
10438
- layoutBehavior: "sticky",
10439
- configuration: {
10440
- structure: "centered-stack",
10441
- treatment: "light-serif",
10442
- behavior: "sticky"
10443
- },
10444
10436
  openingRequirement: "none",
10445
10437
  maxRecommendedNavItems: 6,
10446
10438
  logoAccommodations: centeredLogoAccommodations,
@@ -10449,13 +10441,6 @@ const headerLookCatalog = defineExactCatalog()([
10449
10441
  {
10450
10442
  id: asHeaderLookId("centered-calm"),
10451
10443
  label: "Centered calm",
10452
- visualTreatment: "light-serif",
10453
- layoutBehavior: "normal-flow",
10454
- configuration: {
10455
- structure: "centered-stack",
10456
- treatment: "light-serif",
10457
- behavior: "normal-flow"
10458
- },
10459
10444
  openingRequirement: "none",
10460
10445
  maxRecommendedNavItems: 5,
10461
10446
  logoAccommodations: centeredLogoAccommodations,
@@ -10464,13 +10449,6 @@ const headerLookCatalog = defineExactCatalog()([
10464
10449
  {
10465
10450
  id: asHeaderLookId("practical-utility"),
10466
10451
  label: "Practical utility",
10467
- visualTreatment: "solid-neutral",
10468
- layoutBehavior: "sticky-shrink",
10469
- configuration: {
10470
- structure: "inline-classic",
10471
- treatment: "solid-neutral",
10472
- behavior: "sticky-shrink"
10473
- },
10474
10452
  openingRequirement: "none",
10475
10453
  requiresProminentCta: true,
10476
10454
  logoAccommodations: inlineClassicLogoAccommodations,
@@ -10479,13 +10457,6 @@ const headerLookCatalog = defineExactCatalog()([
10479
10457
  {
10480
10458
  id: asHeaderLookId("minimal-transparent"),
10481
10459
  label: "Minimal transparent",
10482
- visualTreatment: "minimal-transparent",
10483
- layoutBehavior: "normal-flow",
10484
- configuration: {
10485
- structure: "inline-classic",
10486
- treatment: "minimal-transparent",
10487
- behavior: "normal-flow"
10488
- },
10489
10460
  openingRequirement: "reserved-space-ok",
10490
10461
  logoAccommodations: inlineClassicLogoAccommodations,
10491
10462
  compile: minimalTransparentHeader
@@ -10493,13 +10464,6 @@ const headerLookCatalog = defineExactCatalog()([
10493
10464
  {
10494
10465
  id: asHeaderLookId("transparent-overlay"),
10495
10466
  label: "Transparent overlay",
10496
- visualTreatment: "transparent-overlay",
10497
- layoutBehavior: "fixed-overlay",
10498
- configuration: {
10499
- structure: "inline-classic",
10500
- treatment: "transparent-overlay",
10501
- behavior: "fixed-overlay"
10502
- },
10503
10467
  openingRequirement: "requires-image-hero-with-contrast-overlay",
10504
10468
  maxRecommendedNavItems: 5,
10505
10469
  logoAccommodations: overlayLogoAccommodations,
@@ -10508,24 +10472,13 @@ const headerLookCatalog = defineExactCatalog()([
10508
10472
  {
10509
10473
  id: asHeaderLookId("floating-glass"),
10510
10474
  label: "Floating glass",
10511
- visualTreatment: "floating-glass",
10512
- layoutBehavior: "fixed-floating",
10513
- configuration: {
10514
- structure: "floating-shell",
10515
- treatment: "floating-glass",
10516
- behavior: "fixed-floating"
10517
- },
10518
10475
  openingRequirement: "requires-image-hero-with-contrast-overlay",
10519
10476
  maxRecommendedNavItems: 5,
10520
10477
  logoAccommodations: overlayLogoAccommodations,
10521
10478
  compile: floatingGlassHeader
10522
10479
  }
10523
10480
  ]);
10524
- new Set(headerLookCatalog.map((look) => headerConfigurationKey(look.configuration)));
10525
10481
  new Map(headerLookCatalog.map((look) => [look.id, look]));
10526
- function headerConfigurationKey(configuration) {
10527
- return `${configuration.structure}:${configuration.treatment}:${configuration.behavior}`;
10528
- }
10529
10482
  //#endregion
10530
10483
  //#region ../theme-core/src/site-styles/sectionTransitions.ts
10531
10484
  function boundaryRuntimeMetrics(family, size, heightExpression) {
@@ -14134,28 +14087,6 @@ z$1.object({
14134
14087
  spacing: z$1.enum(themeTokenRecipeOptions.spacing),
14135
14088
  motion: z$1.enum(themeTokenRecipeOptions.motion)
14136
14089
  });
14137
- const BREAKPOINT_LG = 1024;
14138
- const BREAKPOINT_XL = 1280;
14139
- const BREAKPOINT_LG_DOWN = BREAKPOINT_LG - 1;
14140
- function mqUp(px) {
14141
- return `(min-width: ${px}px)`;
14142
- }
14143
- function mqDown(px) {
14144
- return `(max-width: ${px}px)`;
14145
- }
14146
- function mqBetween(minPx, maxPx) {
14147
- return `${mqUp(minPx)} and ${mqDown(maxPx)}`;
14148
- }
14149
- mqUp(640);
14150
- mqUp(768);
14151
- mqUp(BREAKPOINT_LG);
14152
- mqUp(BREAKPOINT_XL);
14153
- mqDown(639);
14154
- mqDown(767);
14155
- mqDown(BREAKPOINT_LG_DOWN);
14156
- mqBetween(640, BREAKPOINT_LG_DOWN);
14157
- mqDown(640);
14158
- mqDown(768);
14159
14090
  //#endregion
14160
14091
  //#region ../theme-core/src/siteChromeOverlayClearance.ts
14161
14092
  const SITE_CHROME_VISIBLE_HEADER_ATTR = "data-site-chrome-visible-header";
@@ -18248,15 +18179,6 @@ const heroLayoutControlsFragment = defineFragment({
18248
18179
  */
18249
18180
  const BLOCK_BUTTON_ROLES = PUBLIC_BUTTON_ROLES;
18250
18181
  const blockButtonRoleSchema = z$1.enum(BLOCK_BUTTON_ROLES);
18251
- /**
18252
- * Temporary rollout boundary for persisted content written before issue #1220.
18253
- * Authoring remains strict through `blockButtonRoleSchema`; this parser exists
18254
- * only until the post-deploy role rewrite has been audited in production.
18255
- */
18256
- function canonicalizePersistedBlockButtonRole(value) {
18257
- return value === "link" || value === "tertiary" ? "ghost" : value;
18258
- }
18259
- const persistedBlockButtonRoleSchema = z$1.preprocess((value) => typeof value === "string" ? canonicalizePersistedBlockButtonRole(value) : value, blockButtonRoleSchema);
18260
18182
  const BLOCK_BUTTON_ROLE_LABELS = {
18261
18183
  primary: "Primary",
18262
18184
  secondary: "Secondary",
@@ -19465,6 +19387,7 @@ const newsletterFormFragment = defineFragment({
19465
19387
  }
19466
19388
  ],
19467
19389
  layout: [el("newsletter-form", withApiBindings({
19390
+ source: "block",
19468
19391
  destinationProvider: { $bind: { from: "destinationProvider" } },
19469
19392
  listId: { $bind: { from: "listId" } },
19470
19393
  preset: { $bind: { from: "preset" } },
@@ -21584,6 +21507,7 @@ const contactNewsletterLayout = styledSection({
21584
21507
  as: "h2",
21585
21508
  className: "newsletter-copy-title"
21586
21509
  }, when("newsletterTitle"), bind("newsletterTitle")), richText({ className: "newsletter-copy-subtitle rb-prose rb-max-w-none" }, when("newsletterSubtitle"), bind("newsletterSubtitle"))]), el("newsletter-form", withApiBindings({
21510
+ source: "block",
21587
21511
  listId: { $bind: { from: "listId" } },
21588
21512
  preset: { $bind: { from: "preset" } },
21589
21513
  includePhone: { $bind: { from: "includePhone" } },
@@ -23508,6 +23432,22 @@ const footerNavGroupsLayout = stack({
23508
23432
  }, [text({ as: "span" }, bind("entry.label"))], repeat("group.children", "entry"))])], repeat("footerMenu.groups", "group"))], whenCollectionHasItems("footerMenu.groups"));
23509
23433
  //#endregion
23510
23434
  //#region ../blocks/src/system/blocks/site-footer.ts
23435
+ const footerStandardContactBindings = {
23436
+ value: { $bind: { from: "module.engagement.runtime.value" } },
23437
+ submitLabel: { $bind: { from: "module.engagement.runtime.submitLabel" } },
23438
+ successMessage: { $bind: { from: "module.engagement.runtime.successMessage" } }
23439
+ };
23440
+ const footerMailingListBindings = {
23441
+ source: { $bind: { from: "module.engagement.runtime.source" } },
23442
+ destinationRef: { $bind: { from: "module.engagement.runtime.destinationRef" } },
23443
+ listId: { $bind: { from: "module.engagement.runtime.listId" } },
23444
+ preset: { $bind: { from: "module.engagement.runtime.preset" } },
23445
+ includePhone: { $bind: { from: "module.engagement.runtime.includePhone" } },
23446
+ buttonLabel: { $bind: { from: "module.engagement.runtime.buttonLabel" } },
23447
+ successMessage: { $bind: { from: "module.engagement.runtime.successMessage" } },
23448
+ privacyNote: { $bind: { from: "module.engagement.runtime.privacyNote" } }
23449
+ };
23450
+ const footerSpamProtectionBinding = { spamProtectionEnabled: { $bind: { from: "$root.spamProtectionEnabled" } } };
23511
23451
  const brandLogo = link({
23512
23452
  href: "/",
23513
23453
  className: { $bind: {
@@ -23585,6 +23525,23 @@ const authoredCopy = richText({
23585
23525
  id: "content.interpolateRichTextTokens",
23586
23526
  options: { tokens: ["year", "site_name"] }
23587
23527
  }] }));
23528
+ const footerEngagement = stack({
23529
+ gap: "md",
23530
+ className: "rb-w-full"
23531
+ }, [
23532
+ text({
23533
+ as: "p",
23534
+ className: "rb-body rb-opacity-80"
23535
+ }, bind("module.engagement.intro"), when("module.engagement.intro")),
23536
+ form(withApiBindings({
23537
+ ...footerStandardContactBindings,
23538
+ ...footerSpamProtectionBinding
23539
+ }), [], when("module.engagement.kind", { equals: "standard-contact" })),
23540
+ el("newsletter-form", withApiBindings({
23541
+ ...footerMailingListBindings,
23542
+ ...footerSpamProtectionBinding
23543
+ }), [], when("module.engagement.kind", { equals: "mailing-list" }))
23544
+ ], when("module.kind", { equals: "engagement" }));
23588
23545
  const footerGroup = stack({
23589
23546
  gap: "md",
23590
23547
  align: "stretch",
@@ -23610,6 +23567,7 @@ const footerGroup = stack({
23610
23567
  contact,
23611
23568
  hours,
23612
23569
  socials,
23570
+ footerEngagement,
23613
23571
  stack({ className: "rb-w-full" }, [authoredCopy], when("module.kind", { equals: "supporting-text" })),
23614
23572
  stack({ className: "rb-w-full rb-lg-col-span-3" }, [authoredCopy], when("module.kind", { equals: "legal" }))
23615
23573
  ], repeat("group.modules", "module"))], repeat("region.groups", "group"));
@@ -23617,6 +23575,10 @@ const footerMainRegion = stack({
23617
23575
  className: { $bind: { from: "region.className" } },
23618
23576
  "data-footer-region": { $bind: { from: "region.kind" } }
23619
23577
  }, [footerGroup], when("region.kind", { equals: "main" }), repeat("content.footerRuntime.regions", "region"));
23578
+ const footerEngagementRegion = stack({
23579
+ className: { $bind: { from: "region.className" } },
23580
+ "data-footer-region": "engagement-row"
23581
+ }, [footerGroup], when("region.kind", { equals: "engagement-row" }), repeat("content.footerRuntime.regions", "region"));
23620
23582
  const footerBottomRegion = stack({ className: { $bind: {
23621
23583
  from: "$root.theme.footer",
23622
23584
  transforms: [{ id: "layout.footerBottomBarContainerClass" }],
@@ -23652,7 +23614,11 @@ const siteFooterBlockDefinition = { manifest: createBlockManifest({
23652
23614
  fallback: mergeStyles(backgroundColorStyle("surface"), surfaceForegroundStyle({ text: "rgb(var(--tb-text))" }), borderColorStyle("border"))
23653
23615
  } },
23654
23616
  "data-footer-membership": { $bind: { from: "content.footerRuntime.membershipKey" } }
23655
- }, [footerMainRegion, footerBottomRegion]),
23617
+ }, [
23618
+ footerEngagementRegion,
23619
+ footerMainRegion,
23620
+ footerBottomRegion
23621
+ ]),
23656
23622
  description: "Site-wide composed footer with canonical shared details.",
23657
23623
  styleTokens: { spacing: "md" },
23658
23624
  paletteHidden: true
@@ -25498,6 +25464,12 @@ const mediaBaseSchema = z.object({
25498
25464
  poster: mediaPosterSchema.optional(),
25499
25465
  transform: transformSchema.optional()
25500
25466
  });
25467
+ /**
25468
+ * Canonical identifier carried by media values that are safe to persist.
25469
+ * Parsing trims boundary input so downstream writers cannot retain whitespace-only
25470
+ * identifiers or independently disagree about normalization.
25471
+ */
25472
+ const mediaIdentifierSchema = z.string().trim().min(1).brand();
25501
25473
  const imageMediaSchema = mediaBaseSchema.extend({ type: z.literal("image") });
25502
25474
  const videoMediaSchema = mediaBaseSchema.extend({ type: z.literal("video") });
25503
25475
  const audioMediaSchema = mediaBaseSchema.extend({ type: z.literal("audio") });
@@ -25512,6 +25484,15 @@ const mediaSchema = z.discriminatedUnion("type", [
25512
25484
  spreadsheetMediaSchema,
25513
25485
  archiveMediaSchema
25514
25486
  ]);
25487
+ const persistableMediaBaseSchema = mediaBaseSchema.extend({ identifier: mediaIdentifierSchema });
25488
+ z.discriminatedUnion("type", [
25489
+ persistableMediaBaseSchema.extend({ type: z.literal("image") }),
25490
+ persistableMediaBaseSchema.extend({ type: z.literal("video") }),
25491
+ persistableMediaBaseSchema.extend({ type: z.literal("audio") }),
25492
+ persistableMediaBaseSchema.extend({ type: z.literal("document") }),
25493
+ persistableMediaBaseSchema.extend({ type: z.literal("spreadsheet") }),
25494
+ persistableMediaBaseSchema.extend({ type: z.literal("archive") })
25495
+ ]);
25515
25496
  //#endregion
25516
25497
  //#region ../blocks/src/system/manifest/richTextSchema.ts
25517
25498
  /**
@@ -26333,7 +26314,7 @@ const publicMembershipProductCollectionSchema = z$1.object({ memberships: z$1.ar
26333
26314
  * Kept in a shared module so the block definition and runtime contracts can
26334
26315
  * depend on the same schema without creating an initialization cycle.
26335
26316
  */
26336
- const occurrenceContextSchema$1 = z$1.object({
26317
+ const occurrenceContextSchema = z$1.object({
26337
26318
  id: z$1.string(),
26338
26319
  seriesId: z$1.string(),
26339
26320
  startsAt: z$1.string(),
@@ -26625,7 +26606,7 @@ function isEventCalendarListLayout(value) {
26625
26606
  //#region ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
26626
26607
  const previewStageSchema = z$1.enum(["preview", "published"]);
26627
26608
  const registrationButtonVariantSchema = blockButtonRoleSchema;
26628
- const eventButtonVariantSchema = persistedBlockButtonRoleSchema;
26609
+ const eventButtonVariantSchema = blockButtonRoleSchema;
26629
26610
  const eventLayoutSchema = z$1.enum(eventCalendarListLayoutValues);
26630
26611
  const eventCalendarDisplayModeSchema = z$1.enum(eventCalendarDisplayModeValues);
26631
26612
  const eventCalendarDefaultViewSchema = z$1.enum(eventCalendarDefaultViewValues);
@@ -26714,28 +26695,37 @@ const EVENT_REGISTRATION_SHELL_STEP_LABELS = [
26714
26695
  "Payment"
26715
26696
  ];
26716
26697
  const eventRegistrationPublicEventSchema = z$1.preprocess(normalizeEventRegistrationEventInput, publicEventSchema);
26717
- const eventRegistrationSourceSchema = z$1.object({
26718
- siteId: z$1.string().optional(),
26719
- apiBaseUrl: z$1.string().optional(),
26720
- portalToken: z$1.string().nullable().optional(),
26721
- previewToken: z$1.string().nullable().optional(),
26722
- occurrenceContext: occurrenceContextSchema$1.optional(),
26698
+ const eventRegistrationHydrationSchemaShape = {
26699
+ occurrenceContext: occurrenceContextSchema.optional(),
26723
26700
  subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
26724
26701
  events: z$1.array(eventRegistrationPublicEventSchema).nullable().optional(),
26725
- className: z$1.string().nullable().optional(),
26726
- buttonText: z$1.string().nullable().optional(),
26727
- maxTickets: z$1.string().nullable().optional(),
26702
+ wholeSeriesOfferings: publicCoursesArraySchema.nullable().optional(),
26703
+ wholeSeriesOffering: publicCourseSchema.nullable().optional(),
26704
+ maxTickets: z$1.string().optional(),
26728
26705
  showVenue: z$1.boolean().optional(),
26729
26706
  showCapacity: z$1.boolean().optional(),
26707
+ showSessions: z$1.boolean().optional(),
26708
+ showPrice: z$1.boolean().optional(),
26730
26709
  successMessage: z$1.string().optional(),
26731
26710
  waitlistMessage: z$1.string().optional(),
26711
+ membershipMessage: z$1.string().optional(),
26732
26712
  buttonVariant: registrationButtonVariantSchema.optional(),
26733
26713
  overlayEnabled: z$1.boolean().optional(),
26734
26714
  spamProtectionEnabled: z$1.boolean().optional(),
26735
- stage: previewStageSchema.optional(),
26736
26715
  supportEmail: z$1.string().optional(),
26737
26716
  sitePasses: publicPassProductCollectionSchema.nullable().optional(),
26738
26717
  siteMemberships: publicMembershipProductCollectionSchema.nullable().optional()
26718
+ };
26719
+ const eventRegistrationSourceSchema = z$1.object({
26720
+ siteId: z$1.string().optional(),
26721
+ apiBaseUrl: z$1.string().optional(),
26722
+ portalToken: z$1.string().nullable().optional(),
26723
+ previewToken: z$1.string().nullable().optional(),
26724
+ ...eventRegistrationHydrationSchemaShape,
26725
+ className: z$1.string().nullable().optional(),
26726
+ buttonText: z$1.string().nullable().optional(),
26727
+ maxTickets: z$1.string().nullable().optional(),
26728
+ stage: previewStageSchema.optional()
26739
26729
  });
26740
26730
  const eventRegistrationDisplaySchema = z$1.object({
26741
26731
  kind: z$1.literal("event-registration"),
@@ -26746,22 +26736,7 @@ const eventRegistrationDisplaySchema = z$1.object({
26746
26736
  stepLabels: z$1.array(z$1.enum(EVENT_REGISTRATION_SHELL_STEP_LABELS)).min(1),
26747
26737
  summaryButtonText: z$1.string()
26748
26738
  });
26749
- const eventRegistrationHydrationSchema = z$1.object({
26750
- occurrenceContext: occurrenceContextSchema$1.optional(),
26751
- subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
26752
- events: z$1.array(eventRegistrationPublicEventSchema).nullable().optional(),
26753
- maxTickets: z$1.string().optional(),
26754
- showVenue: z$1.boolean().optional(),
26755
- showCapacity: z$1.boolean().optional(),
26756
- successMessage: z$1.string().optional(),
26757
- waitlistMessage: z$1.string().optional(),
26758
- buttonVariant: registrationButtonVariantSchema.optional(),
26759
- overlayEnabled: z$1.boolean().optional(),
26760
- spamProtectionEnabled: z$1.boolean().optional(),
26761
- supportEmail: z$1.string().optional(),
26762
- sitePasses: publicPassProductCollectionSchema.nullable().optional(),
26763
- siteMemberships: publicMembershipProductCollectionSchema.nullable().optional()
26764
- });
26739
+ const eventRegistrationHydrationSchema = z$1.object(eventRegistrationHydrationSchemaShape);
26765
26740
  const eventRegistrationRenderSchema = z$1.object({
26766
26741
  display: eventRegistrationDisplaySchema,
26767
26742
  hydration: eventRegistrationHydrationSchema
@@ -26841,11 +26816,16 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
26841
26816
  occurrenceContext: source.occurrenceContext ?? null,
26842
26817
  subject: source.subject ?? null,
26843
26818
  events: source.events ?? null,
26819
+ wholeSeriesOfferings: source.wholeSeriesOfferings ?? null,
26820
+ wholeSeriesOffering: source.wholeSeriesOffering ?? null,
26844
26821
  maxTickets: source.maxTickets ?? void 0,
26845
26822
  showVenue: source.showVenue,
26846
26823
  showCapacity: source.showCapacity,
26824
+ showSessions: source.showSessions,
26825
+ showPrice: source.showPrice,
26847
26826
  successMessage: source.successMessage,
26848
26827
  waitlistMessage: source.waitlistMessage,
26828
+ membershipMessage: source.membershipMessage,
26849
26829
  buttonVariant: source.buttonVariant,
26850
26830
  overlayEnabled: source.overlayEnabled,
26851
26831
  spamProtectionEnabled: source.spamProtectionEnabled,
@@ -26961,6 +26941,24 @@ const eventRegistrationBlockDefinition = {
26961
26941
  defaultValue: true,
26962
26942
  ui: { intent: "display" }
26963
26943
  },
26944
+ {
26945
+ id: "showSessions",
26946
+ type: "boolean",
26947
+ label: "Show complete schedule",
26948
+ description: "Display every session for whole-series registrations",
26949
+ required: false,
26950
+ defaultValue: true,
26951
+ ui: { intent: "display" }
26952
+ },
26953
+ {
26954
+ id: "showPrice",
26955
+ type: "boolean",
26956
+ label: "Show price",
26957
+ description: "Display the whole-series price",
26958
+ required: false,
26959
+ defaultValue: true,
26960
+ ui: { intent: "display" }
26961
+ },
26964
26962
  {
26965
26963
  id: "successMessage",
26966
26964
  type: "text",
@@ -26971,6 +26969,26 @@ const eventRegistrationBlockDefinition = {
26971
26969
  defaultValue: "Thank you for registering! Check your email for confirmation details.",
26972
26970
  maxLength: 500
26973
26971
  },
26972
+ {
26973
+ id: "waitlistMessage",
26974
+ type: "text",
26975
+ label: "Waitlist message",
26976
+ description: "Message shown after joining a whole-series waitlist",
26977
+ required: false,
26978
+ multiline: true,
26979
+ defaultValue: "You've been added to the waitlist. We'll email you if a place becomes available.",
26980
+ maxLength: 500
26981
+ },
26982
+ {
26983
+ id: "membershipMessage",
26984
+ type: "text",
26985
+ label: "Membership registration message",
26986
+ description: "Message shown when a whole-series place is covered by membership",
26987
+ required: false,
26988
+ multiline: true,
26989
+ defaultValue: "Registered using your membership. Check your email for session details.",
26990
+ maxLength: 500
26991
+ },
26974
26992
  {
26975
26993
  id: "buttonText",
26976
26994
  type: "text",
@@ -27002,8 +27020,11 @@ const eventRegistrationBlockDefinition = {
27002
27020
  } },
27003
27021
  showVenue: { $bind: { from: "content.showVenue" } },
27004
27022
  showCapacity: { $bind: { from: "content.showCapacity" } },
27023
+ showSessions: { $bind: { from: "content.showSessions" } },
27024
+ showPrice: { $bind: { from: "content.showPrice" } },
27005
27025
  successMessage: { $bind: { from: "content.successMessage" } },
27006
27026
  waitlistMessage: { $bind: { from: "content.waitlistMessage" } },
27027
+ membershipMessage: { $bind: { from: "content.membershipMessage" } },
27007
27028
  buttonText: { $bind: {
27008
27029
  from: "content.buttonText",
27009
27030
  fallback: "Complete Registration"
@@ -27017,6 +27038,7 @@ const eventRegistrationBlockDefinition = {
27017
27038
  fallback: false
27018
27039
  } },
27019
27040
  events: { $bind: { from: "data.events" } },
27041
+ wholeSeriesOffering: { $bind: { from: "data.wholeSeriesOffering.offering" } },
27020
27042
  sitePasses: { $bind: { from: "data.sitePasses" } },
27021
27043
  siteMemberships: { $bind: { from: "data.siteMemberships" } },
27022
27044
  stage: { $bind: {
@@ -27030,9 +27052,10 @@ const eventRegistrationBlockDefinition = {
27030
27052
  runtime: eventRegistrationBlockRuntime,
27031
27053
  dataSchemas: {
27032
27054
  events: publicEventsArraySchema.optional(),
27055
+ wholeSeriesOffering: z$1.object({ offering: publicCourseSchema }).optional(),
27033
27056
  sitePasses: publicPassProductCollectionSchema.optional(),
27034
27057
  siteMemberships: publicMembershipProductCollectionSchema.optional(),
27035
- occurrenceContext: occurrenceContextSchema$1.optional()
27058
+ occurrenceContext: occurrenceContextSchema.optional()
27036
27059
  },
27037
27060
  dataLoaders: {
27038
27061
  events: {
@@ -27045,11 +27068,23 @@ const eventRegistrationBlockDefinition = {
27045
27068
  fallback: "published"
27046
27069
  } },
27047
27070
  readProfile: "registration",
27048
- seriesId: { $bind: { from: "$root.occurrenceContext.seriesId" } },
27071
+ seriesId: { $bind: { from: "$root.subject.eventSeriesId" } },
27049
27072
  includeOccurrenceId: { $bind: { from: "$root.occurrenceContext.id" } }
27050
27073
  },
27051
27074
  mode: "server"
27052
27075
  },
27076
+ wholeSeriesOffering: {
27077
+ endpoint: "getPublicWholeSeriesOffering",
27078
+ params: {
27079
+ siteId: { $bind: { from: "$root.siteId" } },
27080
+ eventSeriesId: { $bind: { from: "$root.subject.eventSeriesId" } },
27081
+ stage: { $bind: {
27082
+ from: "$root.previewStage",
27083
+ fallback: "published"
27084
+ } }
27085
+ },
27086
+ mode: "server"
27087
+ },
27053
27088
  sitePasses: {
27054
27089
  endpoint: "listPublicPasses",
27055
27090
  params: { siteId: { $bind: { from: "$root.siteId" } } },
@@ -27484,15 +27519,6 @@ const eventDetailsManifest = createBlockManifest({
27484
27519
  })], { gap: "lg" })
27485
27520
  })]
27486
27521
  });
27487
- const occurrenceContextSchema = z$1.object({
27488
- id: z$1.string(),
27489
- seriesId: z$1.string(),
27490
- startsAt: z$1.string(),
27491
- endsAt: z$1.string(),
27492
- timeZone: z$1.string(),
27493
- capacityOverride: z$1.number().nullable().optional(),
27494
- overrides: z$1.record(z$1.string(), z$1.unknown()).nullable().optional()
27495
- }).nullable();
27496
27522
  const eventAutoApplyDiscountPreviewBaseSchema = z$1.object({
27497
27523
  id: z$1.string(),
27498
27524
  publicLabel: z$1.string(),
@@ -27527,8 +27553,9 @@ const eventDetailsBlockDefinition = {
27527
27553
  from: "$root.previewStage",
27528
27554
  fallback: "published"
27529
27555
  } },
27530
- limit: "25",
27531
- seriesId: { $bind: { from: "$root.occurrenceContext.seriesId" } },
27556
+ limit: "100",
27557
+ readProfile: "details",
27558
+ seriesId: { $bind: { from: "$root.subject.eventSeriesId" } },
27532
27559
  includeOccurrenceId: { $bind: { from: "$root.occurrenceContext.id" } }
27533
27560
  },
27534
27561
  mode: "server"
@@ -33446,9 +33473,6 @@ function parseSignedNewsletterDestinationRef(value) {
33446
33473
  const trimmed = parseTrimmedString(value);
33447
33474
  return trimmed && SIGNED_DESTINATION_REF_PATTERN.test(trimmed) ? trimmed : null;
33448
33475
  }
33449
- function parseNewsletterSignupDestinationProvider(value) {
33450
- return value === "riverbank" || value === "mailchimp" ? value : null;
33451
- }
33452
33476
  function buildNewsletterSignupBlockRef(blockId) {
33453
33477
  const parsed = parseNewsletterSignupBlockId(blockId);
33454
33478
  return parsed ? {
@@ -33595,19 +33619,9 @@ const newsletterFieldSchema = z$1.object({
33595
33619
  });
33596
33620
  const newsletterSignupBlockIdSchema = z$1.string().trim().min(1).transform(parseRequiredNewsletterSignupBlockId);
33597
33621
  const signedNewsletterDestinationRefSchema = z$1.string().trim().min(1).transform(parseRequiredSignedNewsletterDestinationRef);
33598
- const newsletterPublicDestinationRefSchema = z$1.discriminatedUnion("tag", [z$1.object({
33599
- tag: z$1.literal("block_ref"),
33600
- blockId: newsletterSignupBlockIdSchema
33601
- }), z$1.object({
33602
- tag: z$1.literal("signed_destination_ref"),
33603
- token: signedNewsletterDestinationRefSchema
33604
- })]);
33605
- const newsletterSourceSchema = z$1.object({
33606
- blockId: z$1.string().nullable().optional(),
33622
+ const newsletterSourceCommonSchema = z$1.object({
33607
33623
  siteId: z$1.string().optional(),
33608
33624
  apiBaseUrl: z$1.string().optional(),
33609
- listId: z$1.string().nullable().optional(),
33610
- destinationProvider: newsletterDestinationProviderSchema.nullable().optional(),
33611
33625
  preset: newsletterPresetSchema.optional(),
33612
33626
  includePhone: z$1.boolean().optional(),
33613
33627
  buttonLabel: z$1.string().nullable().optional(),
@@ -33618,6 +33632,25 @@ const newsletterSourceSchema = z$1.object({
33618
33632
  spamProtectionEnabled: z$1.boolean().optional(),
33619
33633
  className: z$1.string().nullable().optional()
33620
33634
  });
33635
+ const newsletterSourceSchema = z$1.discriminatedUnion("source", [
33636
+ newsletterSourceCommonSchema.extend({
33637
+ source: z$1.literal("block"),
33638
+ blockId: z$1.string().nullable().optional(),
33639
+ listId: z$1.string().nullable().optional(),
33640
+ destinationProvider: newsletterDestinationProviderSchema.nullable().optional()
33641
+ }),
33642
+ newsletterSourceCommonSchema.extend({
33643
+ source: z$1.literal("signed-footer"),
33644
+ destinationRef: z$1.object({
33645
+ tag: z$1.literal("signed_destination_ref"),
33646
+ token: signedNewsletterDestinationRefSchema
33647
+ })
33648
+ }),
33649
+ newsletterSourceCommonSchema.extend({
33650
+ source: z$1.literal("legacy-direct-list"),
33651
+ listId: z$1.string().nullable()
33652
+ })
33653
+ ]);
33621
33654
  const newsletterDisplaySchema = z$1.object({
33622
33655
  kind: z$1.literal("newsletter-form"),
33623
33656
  className: z$1.string().nullable(),
@@ -33628,8 +33661,26 @@ const newsletterDisplaySchema = z$1.object({
33628
33661
  fields: z$1.array(newsletterFieldSchema)
33629
33662
  });
33630
33663
  const newsletterHydrationSchema = z$1.object({
33631
- destinationRef: newsletterPublicDestinationRefSchema.nullable().optional(),
33632
- listId: z$1.string().nullable().optional(),
33664
+ target: z$1.discriminatedUnion("tag", [
33665
+ z$1.object({
33666
+ tag: z$1.literal("block-source"),
33667
+ destinationRef: z$1.object({
33668
+ tag: z$1.literal("block_ref"),
33669
+ blockId: newsletterSignupBlockIdSchema
33670
+ }).nullable()
33671
+ }),
33672
+ z$1.object({
33673
+ tag: z$1.literal("signed-footer-source"),
33674
+ destinationRef: z$1.object({
33675
+ tag: z$1.literal("signed_destination_ref"),
33676
+ token: signedNewsletterDestinationRefSchema
33677
+ })
33678
+ }),
33679
+ z$1.object({
33680
+ tag: z$1.literal("legacy-direct-list"),
33681
+ listId: z$1.string().nullable()
33682
+ })
33683
+ ]),
33633
33684
  preset: newsletterPresetSchema,
33634
33685
  includePhone: z$1.boolean(),
33635
33686
  tags: z$1.string().nullable().optional(),
@@ -33663,20 +33714,43 @@ const newsletterFormBlockRuntime = defineProgressiveBlockRuntime({
33663
33714
  render: createZodCodec(newsletterRenderSchema)
33664
33715
  },
33665
33716
  buildRender: (source) => {
33666
- const runtimeSource = deriveNewsletterSignupRuntimeSource(source);
33717
+ const runtimeSource = source.source === "block" ? deriveNewsletterSignupRuntimeSource(source) : null;
33667
33718
  return {
33668
33719
  display: buildNewsletterDisplay(source),
33669
33720
  hydration: {
33670
- destinationRef: buildNewsletterSignupBlockRef(source.blockId),
33671
- listId: runtimeSource.listId,
33721
+ target: projectNewsletterFormHydrationTarget(source),
33672
33722
  preset: source.preset ?? "emailOnly",
33673
33723
  includePhone: source.includePhone ?? false,
33674
- tags: runtimeSource.tags,
33724
+ tags: runtimeSource ? runtimeSource.tags : source.tags,
33675
33725
  spamProtectionEnabled: source.spamProtectionEnabled
33676
33726
  }
33677
33727
  };
33678
33728
  }
33679
33729
  });
33730
+ function projectNewsletterFormHydrationTarget(source) {
33731
+ switch (source.source) {
33732
+ case "block": {
33733
+ const destinationRef = buildNewsletterSignupBlockRef(source.blockId);
33734
+ if (destinationRef?.tag === "block_ref") return {
33735
+ tag: "block-source",
33736
+ destinationRef
33737
+ };
33738
+ return {
33739
+ tag: "legacy-direct-list",
33740
+ listId: source.listId ?? null
33741
+ };
33742
+ }
33743
+ case "signed-footer": return {
33744
+ tag: "signed-footer-source",
33745
+ destinationRef: source.destinationRef
33746
+ };
33747
+ case "legacy-direct-list": return {
33748
+ tag: "legacy-direct-list",
33749
+ listId: source.listId
33750
+ };
33751
+ default: return assertNever$2(source);
33752
+ }
33753
+ }
33680
33754
  function parseRequiredNewsletterSignupBlockId(value) {
33681
33755
  const parsed = parseNewsletterSignupBlockId(value);
33682
33756
  if (!parsed) throw new Error("Newsletter signup block destination ref requires blockId");
@@ -35778,6 +35852,7 @@ const SUPPORTED_LOADER_ENDPOINTS$1 = [
35778
35852
  "listPublicRecurringSchedule",
35779
35853
  "getPublicEventDetails",
35780
35854
  "listPublicWholeSeriesOfferings",
35855
+ "getPublicWholeSeriesOffering",
35781
35856
  "listPublicRouteCandidates",
35782
35857
  "listPublicTeamMembers",
35783
35858
  "listPublicProducts",