@riverbankcms/sdk 0.127.0 → 0.129.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 (178) hide show
  1. package/README.md +33 -0
  2. package/dist/{PreviewEditorSidebar-BXtfF7tp.mjs → PreviewEditorSidebar-B43CJ0g_.mjs} +9 -33
  3. package/dist/{PreviewEditorUI-Dou73Q0K.mjs → PreviewEditorUI-DHirVkeM.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-DgFDIwvK.mjs → PreviewQueryProvider-B1kbhaJD.mjs} +1 -1
  5. package/dist/SdkPreviewModeRuntime-BJumZy1B.mjs +11209 -0
  6. package/dist/{SiteChromeCustomizeContext-DZiDBAYu.mjs → SiteChromeCustomizeContext-D9SlpwEj.mjs} +31757 -1621
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +288 -36
  8. package/dist/_dts/api/src/bookingClosures.d.ts +19 -3
  9. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +4 -3
  10. package/dist/_dts/api/src/bookingRecords.d.ts +0 -13
  11. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +2 -2
  12. package/dist/_dts/api/src/communications.d.ts +2 -1
  13. package/dist/_dts/api/src/contactFormSummary.d.ts +15 -0
  14. package/dist/_dts/api/src/contentRuntime.d.ts +2 -5
  15. package/dist/_dts/api/src/endpoints.d.ts +1 -1
  16. package/dist/_dts/api/src/footerSettings.d.ts +11 -0
  17. package/dist/_dts/api/src/index.d.ts +2 -1
  18. package/dist/_dts/api/src/occurrenceScheduling.d.ts +48 -0
  19. package/dist/_dts/api/src/participantMessaging.d.ts +5 -3
  20. package/dist/_dts/api/src/publicExperience/siteEndpoints.d.ts +7 -0
  21. package/dist/_dts/api/src/sdkContracts.d.ts +7 -5
  22. package/dist/_dts/api/src/siteOperations.d.ts +12 -3
  23. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +3 -2
  24. package/dist/_dts/blocks/src/PageRenderer.d.ts +20 -10
  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 +2 -1
  30. package/dist/_dts/blocks/src/pageRendererBoundaries.d.ts +30 -0
  31. package/dist/_dts/blocks/src/pageRenderingMode.d.ts +37 -0
  32. package/dist/_dts/blocks/src/rendering/server.d.ts +1 -1
  33. package/dist/_dts/blocks/src/server.d.ts +1 -1
  34. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +41 -0
  35. package/dist/_dts/blocks/src/system/blocks/newsletter-signup-destination.d.ts +14 -23
  36. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +1 -1
  37. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime.d.ts +109 -23
  38. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  39. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +42 -108
  40. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +21 -54
  41. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/logic.d.ts +1 -1
  42. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationSurface.d.ts +26 -0
  43. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +8 -0
  44. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +21 -0
  45. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +29 -78
  46. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.server.d.ts +1 -1
  47. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.submission.d.ts +3 -6
  48. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +27 -8
  49. package/dist/_dts/content-editor/src/FooterComposerOverview.d.ts +21 -0
  50. package/dist/_dts/content-editor/src/FooterComposerPanel.d.ts +3 -1
  51. package/dist/_dts/content-editor/src/FooterEngagementEditorFields.d.ts +31 -0
  52. package/dist/_dts/content-editor/src/FooterEngagementEditorPanel.d.ts +17 -0
  53. package/dist/_dts/content-editor/src/footerComposer.d.ts +3 -0
  54. package/dist/_dts/content-editor/src/footerEngagementDraft.d.ts +57 -0
  55. package/dist/_dts/content-editor/src/footerEngagementEditor.d.ts +11 -0
  56. package/dist/_dts/content-editor/src/footerPreviewRuntime.d.ts +13 -0
  57. package/dist/_dts/content-editor/src/index.d.ts +1 -0
  58. package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +35 -0
  59. package/dist/_dts/core/src/footer-arrangement.d.ts +2 -0
  60. package/dist/_dts/core/src/footer-composition-types.d.ts +118 -0
  61. package/dist/_dts/core/src/footer-composition.d.ts +7 -116
  62. package/dist/_dts/core/src/footer-engagement.d.ts +30 -0
  63. package/dist/_dts/core/src/index.d.ts +4 -0
  64. package/dist/_dts/core/src/newsletter-signup-destination.d.ts +38 -0
  65. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +73 -6
  66. package/dist/_dts/db/src/index.d.ts +1 -0
  67. package/dist/_dts/db/src/schemas/forms.d.ts +72 -2
  68. package/dist/_dts/db/src/schemas/standard-contact.d.ts +114 -0
  69. package/dist/_dts/preview-next/src/client/blocks/pageDesignRuntimePreview.d.ts +2 -0
  70. package/dist/_dts/preview-next/src/client/blocks/previewBatchLoaderParams.d.ts +6 -0
  71. package/dist/_dts/preview-next/src/client/index.d.ts +47 -47
  72. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +2 -5
  73. package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +2 -5
  74. package/dist/_dts/preview-next/src/client/preview/PageBlockEditorPanel.d.ts +2 -5
  75. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -4
  76. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +19 -7
  77. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +30 -23
  78. package/dist/_dts/preview-next/src/client/preview/PreviewThemedSiteDocument.d.ts +18 -5
  79. package/dist/_dts/preview-next/src/client/preview/themeRuntime.d.ts +9 -0
  80. package/dist/_dts/preview-next/src/client/sdk/SdkPreviewMode.d.ts +21 -6
  81. package/dist/_dts/preview-next/src/client/sdk-runtime.d.ts +8 -8
  82. package/dist/_dts/preview-next/src/client/widgets/widgetOverrides.d.ts +6 -5
  83. package/dist/_dts/sdk/src/cli/commands/push/execute/footer.d.ts +9 -0
  84. package/dist/_dts/sdk/src/cli/content/footerFile.d.ts +10 -0
  85. package/dist/_dts/sdk/src/cli/content/reader.d.ts +3 -5
  86. package/dist/_dts/sdk/src/cli/site-commands/footerCommands.d.ts +15 -3
  87. package/dist/_dts/sdk/src/client/combineAbortSignals.d.ts +2 -0
  88. package/dist/_dts/sdk/src/client/management/types.d.ts +6 -15
  89. package/dist/_dts/sdk/src/client/types.d.ts +10 -2
  90. package/dist/_dts/sdk/src/client/wholeSeriesReadOperations.d.ts +11 -0
  91. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  92. package/dist/_dts/sdk/src/config/validation.d.ts +3 -0
  93. package/dist/_dts/sdk/src/contracts/event-registration-content.d.ts +16 -0
  94. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +4 -15
  95. package/dist/_dts/sdk/src/next/catch-all.d.ts +6 -0
  96. package/dist/_dts/sdk/src/next/index.d.ts +2 -1
  97. package/dist/_dts/sdk/src/next/renderSdkContent.d.ts +33 -0
  98. package/dist/_dts/sdk/src/next/types.d.ts +23 -9
  99. package/dist/_dts/sdk/src/preview-next/before-render.d.ts +4 -6
  100. package/dist/_dts/sdk/src/preview-next/client/index.d.ts +3 -3
  101. package/dist/_dts/sdk/src/preview-next/client/runtime.d.ts +1 -1
  102. package/dist/_dts/sdk/src/public-api/contracts.d.ts +4 -18
  103. package/dist/_dts/sdk/src/public-api/teamMemberContracts.d.ts +17 -0
  104. package/dist/_dts/sdk/src/public-api/wholeSeriesContracts.d.ts +2 -0
  105. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +32 -3
  106. package/dist/_dts/sdk/src/rendering/components/Block.shared.d.ts +13 -2
  107. package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +31 -18
  108. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +20 -9
  109. package/dist/_dts/sdk/src/rendering/index.d.ts +8 -4
  110. package/dist/_dts/sdk/src/rendering/mediaAssets.d.ts +8 -2
  111. package/dist/_dts/sdk/src/rendering/renderingMode.d.ts +23 -0
  112. package/dist/_dts/sdk/src/rendering/server.d.ts +5 -3
  113. package/dist/_dts/sdk/src/rendering/themeRuntime.d.ts +6 -0
  114. package/dist/_dts/sdk/src/version.d.ts +1 -1
  115. package/dist/_dts/site-commands/src/commandContract.d.ts +8 -1
  116. package/dist/_dts/site-commands/src/commands.d.ts +16 -2
  117. package/dist/_dts/theme-core/src/header/paintTargets.d.ts +10 -4
  118. package/dist/_dts/theme-core/src/header/surfaceRules.d.ts +2 -3
  119. package/dist/cli/index.mjs +5535 -4835
  120. package/dist/cli/init-docs/content/workflow-preview-mode.md +24 -11
  121. package/dist/client/{courseRegistration-DTEYWL6Z.mjs → CourseRegistrationWizard-xRmA7REV.mjs} +329 -49
  122. package/dist/client/{DiscountCodeDisclosure-BDFRp8Y7.mjs → DiscountCodeDisclosure-B9vriL5C.mjs} +1 -1
  123. package/dist/client/{EventCombined.client-DJgF1_lf.mjs → EventCombined.client-BgVnVTlz.mjs} +2 -2
  124. package/dist/client/{EventListing.client-CnWGNjOr.mjs → EventListing.client-CqdsO7jO.mjs} +2 -2
  125. package/dist/client/{LeafletStaticMap-BISs9Bl7.mjs → LeafletStaticMap-CKPxot9M.mjs} +1 -1
  126. package/dist/client/{StepIndicator-D8gVYkK-.mjs → StepIndicator-DGCYuBJ1.mjs} +2 -2
  127. package/dist/client/{accordion-DFDajgDz.mjs → accordion-BfN5Eqd-.mjs} +1 -1
  128. package/dist/client/{bookingForm-Bdqj9-52.mjs → bookingForm-DOvCpBFP.mjs} +5 -5
  129. package/dist/client/{carousel-Cvqf-kN8.mjs → carousel-DPNmiH0f.mjs} +1 -1
  130. package/dist/client/{cart-CuH2TJXP.mjs → cart--egVXlrR.mjs} +3 -3
  131. package/dist/client/{checkout-CMNPpejZ.mjs → checkout-DywWtMcq.mjs} +3 -3
  132. package/dist/client/client.mjs +5324 -4942
  133. package/dist/client/courseRegistration-Dk9qFVwt.mjs +46 -0
  134. package/dist/client/{eventCalendar-BW-XoxZ0.mjs → eventCalendar-Bkz2HjlS.mjs} +4 -4
  135. package/dist/client/{eventCombined-Bpn7s0y9.mjs → eventCombined-D4kipYWg.mjs} +2 -2
  136. package/dist/client/{eventDetails-D2uUSTMH.mjs → eventDetails-Dz_5ix2Q.mjs} +56 -35
  137. package/dist/client/{eventListing-CVr1c094.mjs → eventListing-D0vm-zST.mjs} +2 -2
  138. package/dist/client/{eventRegistration-Dv4AvkMw.mjs → eventRegistration-Cw1E4Q4p.mjs} +58 -6
  139. package/dist/client/{form-DxdKf9fs.mjs → form-C2Zf1n3K.mjs} +1 -1
  140. package/dist/client/{headerSection-BaXI5Sro.mjs → headerSection-CP05gzdc.mjs} +2 -2
  141. package/dist/client/hooks.mjs +212 -61
  142. package/dist/client/{locationMap-BEtW2fKz.mjs → locationMap-Cl3x9PYJ.mjs} +2 -2
  143. package/dist/client/{newsletterForm-BKKs0S4R.mjs → newsletterForm-DyEJoClm.mjs} +26 -20
  144. package/dist/client/{pricing-ClkqcElA.mjs → pricing-DGuNR1W4.mjs} +1 -1
  145. package/dist/client/{productDetail-H-ru8dyy.mjs → productDetail-Cq-HrGew.mjs} +3 -3
  146. package/dist/client/{productList-Buyi5c0C.mjs → productList-DbB3jwqd.mjs} +3 -3
  147. package/dist/client/{propsDecoder-BF7i6Ijg.mjs → propsDecoder-CiTuhUwY.mjs} +130 -87
  148. package/dist/client/rendering/client.mjs +416 -208
  149. package/dist/client/rendering/islands.mjs +18 -18
  150. package/dist/client/rendering.mjs +6026 -5596
  151. package/dist/client/{scrollToBlock-D_7t8yWb.mjs → scrollToBlock-CShkRqab.mjs} +1 -1
  152. package/dist/client/{shop-CF7SZQNX.mjs → shop-Cu4Ib-ZA.mjs} +5 -5
  153. package/dist/client/{shop-commerce-DA7_Rq5p.mjs → shop-commerce-BzpsOdh7.mjs} +4 -4
  154. package/dist/client/{shop-commerce-store-BmLqW7Gh.mjs → shop-commerce-store-DaE7Fhj8.mjs} +1 -1
  155. package/dist/client/{shopShared-WL-E1znM.mjs → shopShared-cF0c20vB.mjs} +2 -2
  156. package/dist/client/{useEventFilters-rc8VLeLV.mjs → useEventFilters-QZ3HMgaJ.mjs} +2 -2
  157. package/dist/client/{usePolling-1ncrfd4S.mjs → usePolling-BKf0GcE-.mjs} +2 -2
  158. package/dist/preview-next/before-render.mjs +11 -4
  159. package/dist/preview-next/client/runtime.mjs +4 -4
  160. package/dist/preview-next/middleware.mjs +1 -1
  161. package/dist/{previewAuthStore-Dev9CdG9.mjs → previewAuthStore-BesgU5Xu.mjs} +1 -1
  162. package/dist/{sdk-runtime-BnrCCFJq.mjs → sdk-runtime-CfZd5pAm.mjs} +2 -2
  163. package/dist/{separator-CFvBx2yl.mjs → separator-DkTe68HE.mjs} +1 -1
  164. package/dist/server/components.mjs +950 -639
  165. package/dist/server/config-validation.mjs +209 -61
  166. package/dist/server/config.mjs +209 -61
  167. package/dist/server/data.mjs +212 -61
  168. package/dist/server/index.mjs +40 -16
  169. package/dist/server/next.mjs +1181 -835
  170. package/dist/server/page-converter.mjs +211 -64
  171. package/dist/server/prebuild.mjs +1 -1
  172. package/dist/server/rendering/server.mjs +974 -637
  173. package/dist/server/rendering.mjs +980 -644
  174. package/dist/server/routing.mjs +254 -80
  175. package/dist/server/server.mjs +252 -77
  176. package/package.json +1 -1
  177. package/dist/SdkPreviewModeRuntime-B0HPXr-l.mjs +0 -39546
  178. package/dist/client/MagicLinkForm-b5E_HoG9.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"),
@@ -19377,6 +19387,7 @@ const newsletterFormFragment = defineFragment({
19377
19387
  }
19378
19388
  ],
19379
19389
  layout: [el("newsletter-form", withApiBindings({
19390
+ source: "block",
19380
19391
  destinationProvider: { $bind: { from: "destinationProvider" } },
19381
19392
  listId: { $bind: { from: "listId" } },
19382
19393
  preset: { $bind: { from: "preset" } },
@@ -21496,6 +21507,7 @@ const contactNewsletterLayout = styledSection({
21496
21507
  as: "h2",
21497
21508
  className: "newsletter-copy-title"
21498
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",
21499
21511
  listId: { $bind: { from: "listId" } },
21500
21512
  preset: { $bind: { from: "preset" } },
21501
21513
  includePhone: { $bind: { from: "includePhone" } },
@@ -23420,6 +23432,22 @@ const footerNavGroupsLayout = stack({
23420
23432
  }, [text({ as: "span" }, bind("entry.label"))], repeat("group.children", "entry"))])], repeat("footerMenu.groups", "group"))], whenCollectionHasItems("footerMenu.groups"));
23421
23433
  //#endregion
23422
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" } } };
23423
23451
  const brandLogo = link({
23424
23452
  href: "/",
23425
23453
  className: { $bind: {
@@ -23497,6 +23525,23 @@ const authoredCopy = richText({
23497
23525
  id: "content.interpolateRichTextTokens",
23498
23526
  options: { tokens: ["year", "site_name"] }
23499
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" }));
23500
23545
  const footerGroup = stack({
23501
23546
  gap: "md",
23502
23547
  align: "stretch",
@@ -23522,6 +23567,7 @@ const footerGroup = stack({
23522
23567
  contact,
23523
23568
  hours,
23524
23569
  socials,
23570
+ footerEngagement,
23525
23571
  stack({ className: "rb-w-full" }, [authoredCopy], when("module.kind", { equals: "supporting-text" })),
23526
23572
  stack({ className: "rb-w-full rb-lg-col-span-3" }, [authoredCopy], when("module.kind", { equals: "legal" }))
23527
23573
  ], repeat("group.modules", "module"))], repeat("region.groups", "group"));
@@ -23529,6 +23575,10 @@ const footerMainRegion = stack({
23529
23575
  className: { $bind: { from: "region.className" } },
23530
23576
  "data-footer-region": { $bind: { from: "region.kind" } }
23531
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"));
23532
23582
  const footerBottomRegion = stack({ className: { $bind: {
23533
23583
  from: "$root.theme.footer",
23534
23584
  transforms: [{ id: "layout.footerBottomBarContainerClass" }],
@@ -23564,7 +23614,11 @@ const siteFooterBlockDefinition = { manifest: createBlockManifest({
23564
23614
  fallback: mergeStyles(backgroundColorStyle("surface"), surfaceForegroundStyle({ text: "rgb(var(--tb-text))" }), borderColorStyle("border"))
23565
23615
  } },
23566
23616
  "data-footer-membership": { $bind: { from: "content.footerRuntime.membershipKey" } }
23567
- }, [footerMainRegion, footerBottomRegion]),
23617
+ }, [
23618
+ footerEngagementRegion,
23619
+ footerMainRegion,
23620
+ footerBottomRegion
23621
+ ]),
23568
23622
  description: "Site-wide composed footer with canonical shared details.",
23569
23623
  styleTokens: { spacing: "md" },
23570
23624
  paletteHidden: true
@@ -26260,7 +26314,7 @@ const publicMembershipProductCollectionSchema = z$1.object({ memberships: z$1.ar
26260
26314
  * Kept in a shared module so the block definition and runtime contracts can
26261
26315
  * depend on the same schema without creating an initialization cycle.
26262
26316
  */
26263
- const occurrenceContextSchema$1 = z$1.object({
26317
+ const occurrenceContextSchema = z$1.object({
26264
26318
  id: z$1.string(),
26265
26319
  seriesId: z$1.string(),
26266
26320
  startsAt: z$1.string(),
@@ -26641,28 +26695,37 @@ const EVENT_REGISTRATION_SHELL_STEP_LABELS = [
26641
26695
  "Payment"
26642
26696
  ];
26643
26697
  const eventRegistrationPublicEventSchema = z$1.preprocess(normalizeEventRegistrationEventInput, publicEventSchema);
26644
- const eventRegistrationSourceSchema = z$1.object({
26645
- siteId: z$1.string().optional(),
26646
- apiBaseUrl: z$1.string().optional(),
26647
- portalToken: z$1.string().nullable().optional(),
26648
- previewToken: z$1.string().nullable().optional(),
26649
- occurrenceContext: occurrenceContextSchema$1.optional(),
26698
+ const eventRegistrationHydrationSchemaShape = {
26699
+ occurrenceContext: occurrenceContextSchema.optional(),
26650
26700
  subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
26651
26701
  events: z$1.array(eventRegistrationPublicEventSchema).nullable().optional(),
26652
- className: z$1.string().nullable().optional(),
26653
- buttonText: z$1.string().nullable().optional(),
26654
- maxTickets: z$1.string().nullable().optional(),
26702
+ wholeSeriesOfferings: publicCoursesArraySchema.nullable().optional(),
26703
+ wholeSeriesOffering: publicCourseSchema.nullable().optional(),
26704
+ maxTickets: z$1.string().optional(),
26655
26705
  showVenue: z$1.boolean().optional(),
26656
26706
  showCapacity: z$1.boolean().optional(),
26707
+ showSessions: z$1.boolean().optional(),
26708
+ showPrice: z$1.boolean().optional(),
26657
26709
  successMessage: z$1.string().optional(),
26658
26710
  waitlistMessage: z$1.string().optional(),
26711
+ membershipMessage: z$1.string().optional(),
26659
26712
  buttonVariant: registrationButtonVariantSchema.optional(),
26660
26713
  overlayEnabled: z$1.boolean().optional(),
26661
26714
  spamProtectionEnabled: z$1.boolean().optional(),
26662
- stage: previewStageSchema.optional(),
26663
26715
  supportEmail: z$1.string().optional(),
26664
26716
  sitePasses: publicPassProductCollectionSchema.nullable().optional(),
26665
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()
26666
26729
  });
26667
26730
  const eventRegistrationDisplaySchema = z$1.object({
26668
26731
  kind: z$1.literal("event-registration"),
@@ -26673,22 +26736,7 @@ const eventRegistrationDisplaySchema = z$1.object({
26673
26736
  stepLabels: z$1.array(z$1.enum(EVENT_REGISTRATION_SHELL_STEP_LABELS)).min(1),
26674
26737
  summaryButtonText: z$1.string()
26675
26738
  });
26676
- const eventRegistrationHydrationSchema = z$1.object({
26677
- occurrenceContext: occurrenceContextSchema$1.optional(),
26678
- subject: eventRegistrationPageSurfaceSubjectSchema.nullable().optional(),
26679
- events: z$1.array(eventRegistrationPublicEventSchema).nullable().optional(),
26680
- maxTickets: z$1.string().optional(),
26681
- showVenue: z$1.boolean().optional(),
26682
- showCapacity: z$1.boolean().optional(),
26683
- successMessage: z$1.string().optional(),
26684
- waitlistMessage: z$1.string().optional(),
26685
- buttonVariant: registrationButtonVariantSchema.optional(),
26686
- overlayEnabled: z$1.boolean().optional(),
26687
- spamProtectionEnabled: z$1.boolean().optional(),
26688
- supportEmail: z$1.string().optional(),
26689
- sitePasses: publicPassProductCollectionSchema.nullable().optional(),
26690
- siteMemberships: publicMembershipProductCollectionSchema.nullable().optional()
26691
- });
26739
+ const eventRegistrationHydrationSchema = z$1.object(eventRegistrationHydrationSchemaShape);
26692
26740
  const eventRegistrationRenderSchema = z$1.object({
26693
26741
  display: eventRegistrationDisplaySchema,
26694
26742
  hydration: eventRegistrationHydrationSchema
@@ -26768,11 +26816,16 @@ const eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
26768
26816
  occurrenceContext: source.occurrenceContext ?? null,
26769
26817
  subject: source.subject ?? null,
26770
26818
  events: source.events ?? null,
26819
+ wholeSeriesOfferings: source.wholeSeriesOfferings ?? null,
26820
+ wholeSeriesOffering: source.wholeSeriesOffering ?? null,
26771
26821
  maxTickets: source.maxTickets ?? void 0,
26772
26822
  showVenue: source.showVenue,
26773
26823
  showCapacity: source.showCapacity,
26824
+ showSessions: source.showSessions,
26825
+ showPrice: source.showPrice,
26774
26826
  successMessage: source.successMessage,
26775
26827
  waitlistMessage: source.waitlistMessage,
26828
+ membershipMessage: source.membershipMessage,
26776
26829
  buttonVariant: source.buttonVariant,
26777
26830
  overlayEnabled: source.overlayEnabled,
26778
26831
  spamProtectionEnabled: source.spamProtectionEnabled,
@@ -26888,6 +26941,24 @@ const eventRegistrationBlockDefinition = {
26888
26941
  defaultValue: true,
26889
26942
  ui: { intent: "display" }
26890
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
+ },
26891
26962
  {
26892
26963
  id: "successMessage",
26893
26964
  type: "text",
@@ -26898,6 +26969,26 @@ const eventRegistrationBlockDefinition = {
26898
26969
  defaultValue: "Thank you for registering! Check your email for confirmation details.",
26899
26970
  maxLength: 500
26900
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
+ },
26901
26992
  {
26902
26993
  id: "buttonText",
26903
26994
  type: "text",
@@ -26929,8 +27020,11 @@ const eventRegistrationBlockDefinition = {
26929
27020
  } },
26930
27021
  showVenue: { $bind: { from: "content.showVenue" } },
26931
27022
  showCapacity: { $bind: { from: "content.showCapacity" } },
27023
+ showSessions: { $bind: { from: "content.showSessions" } },
27024
+ showPrice: { $bind: { from: "content.showPrice" } },
26932
27025
  successMessage: { $bind: { from: "content.successMessage" } },
26933
27026
  waitlistMessage: { $bind: { from: "content.waitlistMessage" } },
27027
+ membershipMessage: { $bind: { from: "content.membershipMessage" } },
26934
27028
  buttonText: { $bind: {
26935
27029
  from: "content.buttonText",
26936
27030
  fallback: "Complete Registration"
@@ -26944,6 +27038,7 @@ const eventRegistrationBlockDefinition = {
26944
27038
  fallback: false
26945
27039
  } },
26946
27040
  events: { $bind: { from: "data.events" } },
27041
+ wholeSeriesOffering: { $bind: { from: "data.wholeSeriesOffering.offering" } },
26947
27042
  sitePasses: { $bind: { from: "data.sitePasses" } },
26948
27043
  siteMemberships: { $bind: { from: "data.siteMemberships" } },
26949
27044
  stage: { $bind: {
@@ -26957,9 +27052,10 @@ const eventRegistrationBlockDefinition = {
26957
27052
  runtime: eventRegistrationBlockRuntime,
26958
27053
  dataSchemas: {
26959
27054
  events: publicEventsArraySchema.optional(),
27055
+ wholeSeriesOffering: z$1.object({ offering: publicCourseSchema }).optional(),
26960
27056
  sitePasses: publicPassProductCollectionSchema.optional(),
26961
27057
  siteMemberships: publicMembershipProductCollectionSchema.optional(),
26962
- occurrenceContext: occurrenceContextSchema$1.optional()
27058
+ occurrenceContext: occurrenceContextSchema.optional()
26963
27059
  },
26964
27060
  dataLoaders: {
26965
27061
  events: {
@@ -26972,11 +27068,23 @@ const eventRegistrationBlockDefinition = {
26972
27068
  fallback: "published"
26973
27069
  } },
26974
27070
  readProfile: "registration",
26975
- seriesId: { $bind: { from: "$root.occurrenceContext.seriesId" } },
27071
+ seriesId: { $bind: { from: "$root.subject.eventSeriesId" } },
26976
27072
  includeOccurrenceId: { $bind: { from: "$root.occurrenceContext.id" } }
26977
27073
  },
26978
27074
  mode: "server"
26979
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
+ },
26980
27088
  sitePasses: {
26981
27089
  endpoint: "listPublicPasses",
26982
27090
  params: { siteId: { $bind: { from: "$root.siteId" } } },
@@ -27411,15 +27519,6 @@ const eventDetailsManifest = createBlockManifest({
27411
27519
  })], { gap: "lg" })
27412
27520
  })]
27413
27521
  });
27414
- const occurrenceContextSchema = z$1.object({
27415
- id: z$1.string(),
27416
- seriesId: z$1.string(),
27417
- startsAt: z$1.string(),
27418
- endsAt: z$1.string(),
27419
- timeZone: z$1.string(),
27420
- capacityOverride: z$1.number().nullable().optional(),
27421
- overrides: z$1.record(z$1.string(), z$1.unknown()).nullable().optional()
27422
- }).nullable();
27423
27522
  const eventAutoApplyDiscountPreviewBaseSchema = z$1.object({
27424
27523
  id: z$1.string(),
27425
27524
  publicLabel: z$1.string(),
@@ -27454,8 +27553,9 @@ const eventDetailsBlockDefinition = {
27454
27553
  from: "$root.previewStage",
27455
27554
  fallback: "published"
27456
27555
  } },
27457
- limit: "25",
27458
- seriesId: { $bind: { from: "$root.occurrenceContext.seriesId" } },
27556
+ limit: "100",
27557
+ readProfile: "details",
27558
+ seriesId: { $bind: { from: "$root.subject.eventSeriesId" } },
27459
27559
  includeOccurrenceId: { $bind: { from: "$root.occurrenceContext.id" } }
27460
27560
  },
27461
27561
  mode: "server"
@@ -33373,9 +33473,6 @@ function parseSignedNewsletterDestinationRef(value) {
33373
33473
  const trimmed = parseTrimmedString(value);
33374
33474
  return trimmed && SIGNED_DESTINATION_REF_PATTERN.test(trimmed) ? trimmed : null;
33375
33475
  }
33376
- function parseNewsletterSignupDestinationProvider(value) {
33377
- return value === "riverbank" || value === "mailchimp" ? value : null;
33378
- }
33379
33476
  function buildNewsletterSignupBlockRef(blockId) {
33380
33477
  const parsed = parseNewsletterSignupBlockId(blockId);
33381
33478
  return parsed ? {
@@ -33522,19 +33619,9 @@ const newsletterFieldSchema = z$1.object({
33522
33619
  });
33523
33620
  const newsletterSignupBlockIdSchema = z$1.string().trim().min(1).transform(parseRequiredNewsletterSignupBlockId);
33524
33621
  const signedNewsletterDestinationRefSchema = z$1.string().trim().min(1).transform(parseRequiredSignedNewsletterDestinationRef);
33525
- const newsletterPublicDestinationRefSchema = z$1.discriminatedUnion("tag", [z$1.object({
33526
- tag: z$1.literal("block_ref"),
33527
- blockId: newsletterSignupBlockIdSchema
33528
- }), z$1.object({
33529
- tag: z$1.literal("signed_destination_ref"),
33530
- token: signedNewsletterDestinationRefSchema
33531
- })]);
33532
- const newsletterSourceSchema = z$1.object({
33533
- blockId: z$1.string().nullable().optional(),
33622
+ const newsletterSourceCommonSchema = z$1.object({
33534
33623
  siteId: z$1.string().optional(),
33535
33624
  apiBaseUrl: z$1.string().optional(),
33536
- listId: z$1.string().nullable().optional(),
33537
- destinationProvider: newsletterDestinationProviderSchema.nullable().optional(),
33538
33625
  preset: newsletterPresetSchema.optional(),
33539
33626
  includePhone: z$1.boolean().optional(),
33540
33627
  buttonLabel: z$1.string().nullable().optional(),
@@ -33545,6 +33632,25 @@ const newsletterSourceSchema = z$1.object({
33545
33632
  spamProtectionEnabled: z$1.boolean().optional(),
33546
33633
  className: z$1.string().nullable().optional()
33547
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
+ ]);
33548
33654
  const newsletterDisplaySchema = z$1.object({
33549
33655
  kind: z$1.literal("newsletter-form"),
33550
33656
  className: z$1.string().nullable(),
@@ -33555,8 +33661,26 @@ const newsletterDisplaySchema = z$1.object({
33555
33661
  fields: z$1.array(newsletterFieldSchema)
33556
33662
  });
33557
33663
  const newsletterHydrationSchema = z$1.object({
33558
- destinationRef: newsletterPublicDestinationRefSchema.nullable().optional(),
33559
- 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
+ ]),
33560
33684
  preset: newsletterPresetSchema,
33561
33685
  includePhone: z$1.boolean(),
33562
33686
  tags: z$1.string().nullable().optional(),
@@ -33590,20 +33714,43 @@ const newsletterFormBlockRuntime = defineProgressiveBlockRuntime({
33590
33714
  render: createZodCodec(newsletterRenderSchema)
33591
33715
  },
33592
33716
  buildRender: (source) => {
33593
- const runtimeSource = deriveNewsletterSignupRuntimeSource(source);
33717
+ const runtimeSource = source.source === "block" ? deriveNewsletterSignupRuntimeSource(source) : null;
33594
33718
  return {
33595
33719
  display: buildNewsletterDisplay(source),
33596
33720
  hydration: {
33597
- destinationRef: buildNewsletterSignupBlockRef(source.blockId),
33598
- listId: runtimeSource.listId,
33721
+ target: projectNewsletterFormHydrationTarget(source),
33599
33722
  preset: source.preset ?? "emailOnly",
33600
33723
  includePhone: source.includePhone ?? false,
33601
- tags: runtimeSource.tags,
33724
+ tags: runtimeSource ? runtimeSource.tags : source.tags,
33602
33725
  spamProtectionEnabled: source.spamProtectionEnabled
33603
33726
  }
33604
33727
  };
33605
33728
  }
33606
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
+ }
33607
33754
  function parseRequiredNewsletterSignupBlockId(value) {
33608
33755
  const parsed = parseNewsletterSignupBlockId(value);
33609
33756
  if (!parsed) throw new Error("Newsletter signup block destination ref requires blockId");
@@ -35705,6 +35852,7 @@ const SUPPORTED_LOADER_ENDPOINTS$1 = [
35705
35852
  "listPublicRecurringSchedule",
35706
35853
  "getPublicEventDetails",
35707
35854
  "listPublicWholeSeriesOfferings",
35855
+ "getPublicWholeSeriesOffering",
35708
35856
  "listPublicRouteCandidates",
35709
35857
  "listPublicTeamMembers",
35710
35858
  "listPublicProducts",