@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
@@ -5,6 +5,13 @@ export declare const PUBLIC_DOWNLOAD_MEDIA_TYPES: readonly ["document", "spreads
5
5
  export type PublicDownloadMediaType = typeof PUBLIC_DOWNLOAD_MEDIA_TYPES[number];
6
6
  export declare function isMediaTypeDiscriminant(value: unknown): value is MediaTypeDiscriminant;
7
7
  export declare function mediaTypeDiscriminantFromMimeType(mimeType: string): MediaTypeDiscriminant | null;
8
+ /**
9
+ * Canonical identifier carried by media values that are safe to persist.
10
+ * Parsing trims boundary input so downstream writers cannot retain whitespace-only
11
+ * identifiers or independently disagree about normalization.
12
+ */
13
+ export declare const mediaIdentifierSchema: z.core.$ZodBranded<z.ZodString, "MediaIdentifier", "out">;
14
+ export type MediaIdentifier = z.infer<typeof mediaIdentifierSchema>;
8
15
  export declare const mediaSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
9
16
  purpose: z.ZodOptional<z.ZodString>;
10
17
  placeholder: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
@@ -264,7 +271,267 @@ export declare const mediaSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
264
271
  }, z.core.$strip>>;
265
272
  type: z.ZodLiteral<"archive">;
266
273
  }, z.core.$strip>], "type">;
274
+ export declare const persistableMediaSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
275
+ purpose: z.ZodOptional<z.ZodString>;
276
+ placeholder: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
277
+ assetId: z.ZodOptional<z.ZodString>;
278
+ src: z.ZodOptional<z.ZodString>;
279
+ alt: z.ZodOptional<z.ZodString>;
280
+ filename: z.ZodOptional<z.ZodString>;
281
+ mimeType: z.ZodOptional<z.ZodString>;
282
+ width: z.ZodOptional<z.ZodNumber>;
283
+ height: z.ZodOptional<z.ZodNumber>;
284
+ storageBucket: z.ZodOptional<z.ZodString>;
285
+ storagePath: z.ZodOptional<z.ZodString>;
286
+ poster: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
287
+ tag: z.ZodLiteral<"storage">;
288
+ assetId: z.ZodOptional<z.ZodString>;
289
+ storageBucket: z.ZodString;
290
+ storagePath: z.ZodString;
291
+ }, z.core.$strip>, z.ZodObject<{
292
+ tag: z.ZodLiteral<"external-src">;
293
+ assetId: z.ZodOptional<z.ZodString>;
294
+ src: z.ZodString;
295
+ }, z.core.$strip>], "tag">>;
296
+ transform: z.ZodOptional<z.ZodObject<{
297
+ aspectCrops: z.ZodOptional<z.ZodPipe<z.ZodTransform<object | undefined, unknown>, z.ZodRecord<z.ZodString, z.ZodCatch<z.ZodObject<{
298
+ aspect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodString>>;
299
+ rect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
300
+ hotspot: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodObject<{
301
+ x: z.ZodNumber;
302
+ y: z.ZodNumber;
303
+ radius: z.ZodOptional<z.ZodNumber>;
304
+ }, z.core.$strip>>>;
305
+ rotation: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>>;
306
+ }, z.core.$strip>>>>>;
307
+ rect: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
308
+ hotspot: z.ZodOptional<z.ZodObject<{
309
+ x: z.ZodNumber;
310
+ y: z.ZodNumber;
311
+ radius: z.ZodOptional<z.ZodNumber>;
312
+ }, z.core.$strip>>;
313
+ rotation: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>;
314
+ }, z.core.$strip>>;
315
+ identifier: z.core.$ZodBranded<z.ZodString, "MediaIdentifier", "out">;
316
+ type: z.ZodLiteral<"image">;
317
+ }, z.core.$strip>, z.ZodObject<{
318
+ purpose: z.ZodOptional<z.ZodString>;
319
+ placeholder: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
320
+ assetId: z.ZodOptional<z.ZodString>;
321
+ src: z.ZodOptional<z.ZodString>;
322
+ alt: z.ZodOptional<z.ZodString>;
323
+ filename: z.ZodOptional<z.ZodString>;
324
+ mimeType: z.ZodOptional<z.ZodString>;
325
+ width: z.ZodOptional<z.ZodNumber>;
326
+ height: z.ZodOptional<z.ZodNumber>;
327
+ storageBucket: z.ZodOptional<z.ZodString>;
328
+ storagePath: z.ZodOptional<z.ZodString>;
329
+ poster: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
330
+ tag: z.ZodLiteral<"storage">;
331
+ assetId: z.ZodOptional<z.ZodString>;
332
+ storageBucket: z.ZodString;
333
+ storagePath: z.ZodString;
334
+ }, z.core.$strip>, z.ZodObject<{
335
+ tag: z.ZodLiteral<"external-src">;
336
+ assetId: z.ZodOptional<z.ZodString>;
337
+ src: z.ZodString;
338
+ }, z.core.$strip>], "tag">>;
339
+ transform: z.ZodOptional<z.ZodObject<{
340
+ aspectCrops: z.ZodOptional<z.ZodPipe<z.ZodTransform<object | undefined, unknown>, z.ZodRecord<z.ZodString, z.ZodCatch<z.ZodObject<{
341
+ aspect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodString>>;
342
+ rect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
343
+ hotspot: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodObject<{
344
+ x: z.ZodNumber;
345
+ y: z.ZodNumber;
346
+ radius: z.ZodOptional<z.ZodNumber>;
347
+ }, z.core.$strip>>>;
348
+ rotation: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>>;
349
+ }, z.core.$strip>>>>>;
350
+ rect: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
351
+ hotspot: z.ZodOptional<z.ZodObject<{
352
+ x: z.ZodNumber;
353
+ y: z.ZodNumber;
354
+ radius: z.ZodOptional<z.ZodNumber>;
355
+ }, z.core.$strip>>;
356
+ rotation: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>;
357
+ }, z.core.$strip>>;
358
+ identifier: z.core.$ZodBranded<z.ZodString, "MediaIdentifier", "out">;
359
+ type: z.ZodLiteral<"video">;
360
+ }, z.core.$strip>, z.ZodObject<{
361
+ purpose: z.ZodOptional<z.ZodString>;
362
+ placeholder: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
363
+ assetId: z.ZodOptional<z.ZodString>;
364
+ src: z.ZodOptional<z.ZodString>;
365
+ alt: z.ZodOptional<z.ZodString>;
366
+ filename: z.ZodOptional<z.ZodString>;
367
+ mimeType: z.ZodOptional<z.ZodString>;
368
+ width: z.ZodOptional<z.ZodNumber>;
369
+ height: z.ZodOptional<z.ZodNumber>;
370
+ storageBucket: z.ZodOptional<z.ZodString>;
371
+ storagePath: z.ZodOptional<z.ZodString>;
372
+ poster: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
373
+ tag: z.ZodLiteral<"storage">;
374
+ assetId: z.ZodOptional<z.ZodString>;
375
+ storageBucket: z.ZodString;
376
+ storagePath: z.ZodString;
377
+ }, z.core.$strip>, z.ZodObject<{
378
+ tag: z.ZodLiteral<"external-src">;
379
+ assetId: z.ZodOptional<z.ZodString>;
380
+ src: z.ZodString;
381
+ }, z.core.$strip>], "tag">>;
382
+ transform: z.ZodOptional<z.ZodObject<{
383
+ aspectCrops: z.ZodOptional<z.ZodPipe<z.ZodTransform<object | undefined, unknown>, z.ZodRecord<z.ZodString, z.ZodCatch<z.ZodObject<{
384
+ aspect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodString>>;
385
+ rect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
386
+ hotspot: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodObject<{
387
+ x: z.ZodNumber;
388
+ y: z.ZodNumber;
389
+ radius: z.ZodOptional<z.ZodNumber>;
390
+ }, z.core.$strip>>>;
391
+ rotation: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>>;
392
+ }, z.core.$strip>>>>>;
393
+ rect: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
394
+ hotspot: z.ZodOptional<z.ZodObject<{
395
+ x: z.ZodNumber;
396
+ y: z.ZodNumber;
397
+ radius: z.ZodOptional<z.ZodNumber>;
398
+ }, z.core.$strip>>;
399
+ rotation: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>;
400
+ }, z.core.$strip>>;
401
+ identifier: z.core.$ZodBranded<z.ZodString, "MediaIdentifier", "out">;
402
+ type: z.ZodLiteral<"audio">;
403
+ }, z.core.$strip>, z.ZodObject<{
404
+ purpose: z.ZodOptional<z.ZodString>;
405
+ placeholder: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
406
+ assetId: z.ZodOptional<z.ZodString>;
407
+ src: z.ZodOptional<z.ZodString>;
408
+ alt: z.ZodOptional<z.ZodString>;
409
+ filename: z.ZodOptional<z.ZodString>;
410
+ mimeType: z.ZodOptional<z.ZodString>;
411
+ width: z.ZodOptional<z.ZodNumber>;
412
+ height: z.ZodOptional<z.ZodNumber>;
413
+ storageBucket: z.ZodOptional<z.ZodString>;
414
+ storagePath: z.ZodOptional<z.ZodString>;
415
+ poster: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
416
+ tag: z.ZodLiteral<"storage">;
417
+ assetId: z.ZodOptional<z.ZodString>;
418
+ storageBucket: z.ZodString;
419
+ storagePath: z.ZodString;
420
+ }, z.core.$strip>, z.ZodObject<{
421
+ tag: z.ZodLiteral<"external-src">;
422
+ assetId: z.ZodOptional<z.ZodString>;
423
+ src: z.ZodString;
424
+ }, z.core.$strip>], "tag">>;
425
+ transform: z.ZodOptional<z.ZodObject<{
426
+ aspectCrops: z.ZodOptional<z.ZodPipe<z.ZodTransform<object | undefined, unknown>, z.ZodRecord<z.ZodString, z.ZodCatch<z.ZodObject<{
427
+ aspect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodString>>;
428
+ rect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
429
+ hotspot: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodObject<{
430
+ x: z.ZodNumber;
431
+ y: z.ZodNumber;
432
+ radius: z.ZodOptional<z.ZodNumber>;
433
+ }, z.core.$strip>>>;
434
+ rotation: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>>;
435
+ }, z.core.$strip>>>>>;
436
+ rect: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
437
+ hotspot: z.ZodOptional<z.ZodObject<{
438
+ x: z.ZodNumber;
439
+ y: z.ZodNumber;
440
+ radius: z.ZodOptional<z.ZodNumber>;
441
+ }, z.core.$strip>>;
442
+ rotation: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>;
443
+ }, z.core.$strip>>;
444
+ identifier: z.core.$ZodBranded<z.ZodString, "MediaIdentifier", "out">;
445
+ type: z.ZodLiteral<"document">;
446
+ }, z.core.$strip>, z.ZodObject<{
447
+ purpose: z.ZodOptional<z.ZodString>;
448
+ placeholder: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
449
+ assetId: z.ZodOptional<z.ZodString>;
450
+ src: z.ZodOptional<z.ZodString>;
451
+ alt: z.ZodOptional<z.ZodString>;
452
+ filename: z.ZodOptional<z.ZodString>;
453
+ mimeType: z.ZodOptional<z.ZodString>;
454
+ width: z.ZodOptional<z.ZodNumber>;
455
+ height: z.ZodOptional<z.ZodNumber>;
456
+ storageBucket: z.ZodOptional<z.ZodString>;
457
+ storagePath: z.ZodOptional<z.ZodString>;
458
+ poster: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
459
+ tag: z.ZodLiteral<"storage">;
460
+ assetId: z.ZodOptional<z.ZodString>;
461
+ storageBucket: z.ZodString;
462
+ storagePath: z.ZodString;
463
+ }, z.core.$strip>, z.ZodObject<{
464
+ tag: z.ZodLiteral<"external-src">;
465
+ assetId: z.ZodOptional<z.ZodString>;
466
+ src: z.ZodString;
467
+ }, z.core.$strip>], "tag">>;
468
+ transform: z.ZodOptional<z.ZodObject<{
469
+ aspectCrops: z.ZodOptional<z.ZodPipe<z.ZodTransform<object | undefined, unknown>, z.ZodRecord<z.ZodString, z.ZodCatch<z.ZodObject<{
470
+ aspect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodString>>;
471
+ rect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
472
+ hotspot: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodObject<{
473
+ x: z.ZodNumber;
474
+ y: z.ZodNumber;
475
+ radius: z.ZodOptional<z.ZodNumber>;
476
+ }, z.core.$strip>>>;
477
+ rotation: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>>;
478
+ }, z.core.$strip>>>>>;
479
+ rect: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
480
+ hotspot: z.ZodOptional<z.ZodObject<{
481
+ x: z.ZodNumber;
482
+ y: z.ZodNumber;
483
+ radius: z.ZodOptional<z.ZodNumber>;
484
+ }, z.core.$strip>>;
485
+ rotation: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>;
486
+ }, z.core.$strip>>;
487
+ identifier: z.core.$ZodBranded<z.ZodString, "MediaIdentifier", "out">;
488
+ type: z.ZodLiteral<"spreadsheet">;
489
+ }, z.core.$strip>, z.ZodObject<{
490
+ purpose: z.ZodOptional<z.ZodString>;
491
+ placeholder: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
492
+ assetId: z.ZodOptional<z.ZodString>;
493
+ src: z.ZodOptional<z.ZodString>;
494
+ alt: z.ZodOptional<z.ZodString>;
495
+ filename: z.ZodOptional<z.ZodString>;
496
+ mimeType: z.ZodOptional<z.ZodString>;
497
+ width: z.ZodOptional<z.ZodNumber>;
498
+ height: z.ZodOptional<z.ZodNumber>;
499
+ storageBucket: z.ZodOptional<z.ZodString>;
500
+ storagePath: z.ZodOptional<z.ZodString>;
501
+ poster: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
502
+ tag: z.ZodLiteral<"storage">;
503
+ assetId: z.ZodOptional<z.ZodString>;
504
+ storageBucket: z.ZodString;
505
+ storagePath: z.ZodString;
506
+ }, z.core.$strip>, z.ZodObject<{
507
+ tag: z.ZodLiteral<"external-src">;
508
+ assetId: z.ZodOptional<z.ZodString>;
509
+ src: z.ZodString;
510
+ }, z.core.$strip>], "tag">>;
511
+ transform: z.ZodOptional<z.ZodObject<{
512
+ aspectCrops: z.ZodOptional<z.ZodPipe<z.ZodTransform<object | undefined, unknown>, z.ZodRecord<z.ZodString, z.ZodCatch<z.ZodObject<{
513
+ aspect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodString>>;
514
+ rect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
515
+ hotspot: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodObject<{
516
+ x: z.ZodNumber;
517
+ y: z.ZodNumber;
518
+ radius: z.ZodOptional<z.ZodNumber>;
519
+ }, z.core.$strip>>>;
520
+ rotation: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>>;
521
+ }, z.core.$strip>>>>>;
522
+ rect: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
523
+ hotspot: z.ZodOptional<z.ZodObject<{
524
+ x: z.ZodNumber;
525
+ y: z.ZodNumber;
526
+ radius: z.ZodOptional<z.ZodNumber>;
527
+ }, z.core.$strip>>;
528
+ rotation: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>;
529
+ }, z.core.$strip>>;
530
+ identifier: z.core.$ZodBranded<z.ZodString, "MediaIdentifier", "out">;
531
+ type: z.ZodLiteral<"archive">;
532
+ }, z.core.$strip>], "type">;
267
533
  export type Media = z.infer<typeof mediaSchema>;
534
+ export type PersistableMedia = z.infer<typeof persistableMediaSchema>;
268
535
  export type MediaOfType<TType extends MediaTypeDiscriminant> = Extract<Media, {
269
536
  type: TType;
270
537
  }>;
@@ -4,5 +4,5 @@ export { makeDefaultBlockComponent, renderBlock } from '../system/componentFacto
4
4
  export { getDefaultComponentRegistry } from '../system/runtime/components';
5
5
  export { siteHeaderManifest } from '../system/blocks/site-header';
6
6
  export { siteFooterManifest } from '../system/blocks/site-footer';
7
- export { buildFooterRuntimeViewModel, type FooterRuntimeModule, type FooterRuntimeViewModel, } from '../system/blocks/site-footer-runtime';
7
+ export { buildFooterRuntimeViewModel, type FooterRuntimeModule, type FooterResolvedEngagement, type FooterRuntimeEngagement, type FooterRuntimeViewModel, } from '../system/blocks/site-footer-runtime';
8
8
  export { resolveFooterRenderPlan } from '../../../theme-core/src/footer/mode';
@@ -83,6 +83,26 @@ export declare const eventRegistrationManifest: import("..").DefinedBlockManifes
83
83
  readonly ui: {
84
84
  readonly intent: "display";
85
85
  };
86
+ }, {
87
+ readonly id: "showSessions";
88
+ readonly type: "boolean";
89
+ readonly label: "Show complete schedule";
90
+ readonly description: "Display every session for whole-series registrations";
91
+ readonly required: false;
92
+ readonly defaultValue: true;
93
+ readonly ui: {
94
+ readonly intent: "display";
95
+ };
96
+ }, {
97
+ readonly id: "showPrice";
98
+ readonly type: "boolean";
99
+ readonly label: "Show price";
100
+ readonly description: "Display the whole-series price";
101
+ readonly required: false;
102
+ readonly defaultValue: true;
103
+ readonly ui: {
104
+ readonly intent: "display";
105
+ };
86
106
  }, {
87
107
  readonly id: "successMessage";
88
108
  readonly type: "text";
@@ -92,6 +112,24 @@ export declare const eventRegistrationManifest: import("..").DefinedBlockManifes
92
112
  readonly multiline: true;
93
113
  readonly defaultValue: "Thank you for registering! Check your email for confirmation details.";
94
114
  readonly maxLength: 500;
115
+ }, {
116
+ readonly id: "waitlistMessage";
117
+ readonly type: "text";
118
+ readonly label: "Waitlist message";
119
+ readonly description: "Message shown after joining a whole-series waitlist";
120
+ readonly required: false;
121
+ readonly multiline: true;
122
+ readonly defaultValue: "You've been added to the waitlist. We'll email you if a place becomes available.";
123
+ readonly maxLength: 500;
124
+ }, {
125
+ readonly id: "membershipMessage";
126
+ readonly type: "text";
127
+ readonly label: "Membership registration message";
128
+ readonly description: "Message shown when a whole-series place is covered by membership";
129
+ readonly required: false;
130
+ readonly multiline: true;
131
+ readonly defaultValue: "Registered using your membership. Check your email for session details.";
132
+ readonly maxLength: 500;
95
133
  }, {
96
134
  readonly id: "buttonText";
97
135
  readonly type: "text";
@@ -109,8 +147,11 @@ export type EventRegistrationContent = {
109
147
  maxTickets?: '1' | '2' | '3' | '5' | '10' | null;
110
148
  showVenue?: boolean | null;
111
149
  showCapacity?: boolean | null;
150
+ showSessions?: boolean | null;
151
+ showPrice?: boolean | null;
112
152
  successMessage?: string | null;
113
153
  waitlistMessage?: string | null;
154
+ membershipMessage?: string | null;
114
155
  buttonText?: string | null;
115
156
  buttonVariant?: BlockButtonRole | null;
116
157
  _sectionStyles?: SectionStylesContent;
@@ -1,26 +1,12 @@
1
- import type { Brand } from '../../../../core/src/index';
1
+ import { type Brand, type MailchimpAudienceId, type MailchimpConnectionId, type NewsletterSignupAuthoringDestination, type NewsletterSignupDestinationProvider, type FooterModuleId } from '../../../../core/src/index';
2
+ export { parseMailchimpAudienceId, parseMailchimpConnectionId, parseMailchimpTagName, parseNewsletterListId, parseNewsletterSignupDestinationProvider, } from '../../../../core/src/index';
3
+ export type { MailchimpAudienceId, MailchimpConnectionId, MailchimpNewsletterDestination, MailchimpTagName, NewsletterListId, NewsletterSignupAuthoringDestination, NewsletterSignupDestinationProvider, RiverbankNewsletterDestination, } from '../../../../core/src/index';
2
4
  type NonEmptyReadonlyArray<T> = readonly [T, ...T[]];
3
5
  declare const serverResolvedMailchimpConnectionStateBrand: unique symbol;
4
6
  declare const serverValidatedMailchimpAudienceCompatibilityBrand: unique symbol;
5
- export type NewsletterListId = Brand<string, 'NewsletterListId'>;
6
- export type MailchimpConnectionId = Brand<string, 'MailchimpConnectionId'>;
7
- export type MailchimpAudienceId = Brand<string, 'MailchimpAudienceId'>;
8
- export type MailchimpTagName = Brand<string, 'MailchimpTagName'>;
9
7
  export type NewsletterSignupBlockId = Brand<string, 'NewsletterSignupBlockId'>;
10
8
  export type SignedNewsletterDestinationRef = Brand<string, 'SignedNewsletterDestinationRef'>;
11
- export type NewsletterSignupDestinationProvider = 'riverbank' | 'mailchimp';
12
9
  export type NewsletterSignupFieldPreset = 'emailOnly' | 'emailName' | 'emailFirstLast' | 'emailNameCompany';
13
- export type RiverbankNewsletterDestination = Readonly<{
14
- tag: 'riverbank_list';
15
- listId: NewsletterListId;
16
- }>;
17
- export type MailchimpNewsletterDestination = Readonly<{
18
- tag: 'mailchimp_audience';
19
- connectionId: MailchimpConnectionId;
20
- audienceId: MailchimpAudienceId;
21
- tags: readonly MailchimpTagName[];
22
- }>;
23
- export type NewsletterSignupAuthoringDestination = RiverbankNewsletterDestination | MailchimpNewsletterDestination;
24
10
  export type NewsletterSignupPublicDestinationRef = Readonly<{
25
11
  tag: 'block_ref';
26
12
  blockId: NewsletterSignupBlockId;
@@ -28,6 +14,17 @@ export type NewsletterSignupPublicDestinationRef = Readonly<{
28
14
  tag: 'signed_destination_ref';
29
15
  token: SignedNewsletterDestinationRef;
30
16
  }>;
17
+ export type NewsletterSignupDestinationSource = Readonly<{
18
+ kind: 'block';
19
+ blockId: NewsletterSignupBlockId;
20
+ }> | Readonly<{
21
+ kind: 'footer-composition';
22
+ sectionId: FooterModuleId;
23
+ }>;
24
+ type FooterNewsletterSignupSourceAttributionId = Brand<string, 'FooterNewsletterSignupSourceAttributionId'>;
25
+ export type NewsletterSignupSourceAttributionId = NewsletterSignupBlockId | FooterNewsletterSignupSourceAttributionId;
26
+ export declare function newsletterSignupSourceAttributionId(source: NewsletterSignupDestinationSource): NewsletterSignupSourceAttributionId;
27
+ export declare function parseNewsletterSignupSourceAttributionId(value: unknown): NewsletterSignupSourceAttributionId | null;
31
28
  export type NewsletterSignupRawAuthoringContent = Readonly<{
32
29
  destination?: unknown;
33
30
  destinationProvider?: unknown;
@@ -261,13 +258,8 @@ export type NewsletterSignupDestinationParseResult = Readonly<{
261
258
  success: false;
262
259
  error: NewsletterSignupDestinationParseError;
263
260
  }>;
264
- export declare function parseNewsletterListId(value: unknown): NewsletterListId | null;
265
- export declare function parseMailchimpConnectionId(value: unknown): MailchimpConnectionId | null;
266
- export declare function parseMailchimpAudienceId(value: unknown): MailchimpAudienceId | null;
267
- export declare function parseMailchimpTagName(value: unknown): MailchimpTagName | null;
268
261
  export declare function parseNewsletterSignupBlockId(value: unknown): NewsletterSignupBlockId | null;
269
262
  export declare function parseSignedNewsletterDestinationRef(value: unknown): SignedNewsletterDestinationRef | null;
270
- export declare function parseNewsletterSignupDestinationProvider(value: unknown): NewsletterSignupDestinationProvider | null;
271
263
  export declare function parseNewsletterSignupAuthoringDestination(content: unknown): NewsletterSignupDestinationParseResult;
272
264
  export declare function normalizeNewsletterSignupAuthoringDestination(content: NewsletterSignupRawAuthoringContent): NewsletterSignupAuthoringDestination | null;
273
265
  export declare function assertValidNewsletterSignupAuthoringDestination(destination: NewsletterSignupAuthoringDestination): NewsletterSignupAuthoringDestination;
@@ -297,4 +289,3 @@ export declare function selectRequiredMailchimpMergeFields(fields: readonly Mail
297
289
  export declare function deriveMailchimpAudienceCompatibilityIssues(input: MailchimpAudienceCompatibilityInput): readonly MailchimpAudienceCompatibilityIssue[];
298
290
  export declare function selectNewsletterSignupDestinationProviderOptions(): readonly NewsletterSignupDestinationProviderOption[];
299
291
  export declare function getNewsletterSignupDestinationProvider(content: NewsletterSignupRawAuthoringContent): NewsletterSignupDestinationProvider;
300
- export {};
@@ -202,5 +202,5 @@ export type NewsletterSignupAuthoringContent = Omit<NewsletterSignupContent, 'li
202
202
  destination: NewsletterSignupAuthoringDestination;
203
203
  };
204
204
  export { buildTrustedNewsletterSignupAuthoringDestination, sanitizeNewsletterSignupPublicContent, validateNewsletterSignupDestinationActivationReadiness, } from "./newsletter-signup-destination";
205
- export type { MailchimpAudienceCompatibilityIssue, MailchimpAudienceId, MailchimpConnectionId, MailchimpNewsletterDestination, MailchimpTagName, NewsletterListId, NewsletterSignupAuthoringDestination, NewsletterSignupDestinationActivationIssue, NewsletterSignupDestinationActivationInput, NewsletterSignupDestinationActivationReadiness, NewsletterSignupBlockId, NewsletterSignupDestinationEditorFieldState, NewsletterSignupDestinationReadinessIssue, NewsletterSignupFieldPreset, NewsletterSignupDestinationProviderOption, NewsletterSignupPublicDestinationRef, RiverbankNewsletterDestination, ServerResolvedMailchimpConnectionState, ServerValidatedMailchimpAudienceCompatibility, SignedNewsletterDestinationRef, TrustedNewsletterSignupAuthoringDestinationError, TrustedNewsletterSignupAuthoringDestinationResult, } from "./newsletter-signup-destination";
205
+ export type { MailchimpAudienceCompatibilityIssue, MailchimpAudienceId, MailchimpConnectionId, MailchimpNewsletterDestination, MailchimpTagName, NewsletterListId, NewsletterSignupAuthoringDestination, NewsletterSignupDestinationActivationIssue, NewsletterSignupDestinationActivationInput, NewsletterSignupDestinationActivationReadiness, NewsletterSignupBlockId, NewsletterSignupDestinationEditorFieldState, NewsletterSignupDestinationReadinessIssue, NewsletterSignupFieldPreset, NewsletterSignupDestinationProviderOption, NewsletterSignupPublicDestinationRef, NewsletterSignupSourceAttributionId, RiverbankNewsletterDestination, ServerResolvedMailchimpConnectionState, ServerValidatedMailchimpAudienceCompatibility, SignedNewsletterDestinationRef, TrustedNewsletterSignupAuthoringDestinationError, TrustedNewsletterSignupAuthoringDestinationResult, } from "./newsletter-signup-destination";
206
206
  export declare const newsletterSignupBlockDefinition: SystemBlockDefinition<NewsletterSignupContent, typeof newsletterFormBlockRuntime>;
@@ -1,38 +1,112 @@
1
- import { type FooterCompositionV1, type FooterMembershipKey, type FooterModuleId, type PublicProfile } from '../../../../core/src/index';
2
- export type FooterRuntimeModule = Readonly<{
1
+ import { type FooterCompositionV1, type FooterMembershipKey, type FooterModuleId, type FooterRichText, type FooterSection, type NewsletterSignupAuthoringDestination, type PublicProfile, type Result } from '../../../../core/src/index';
2
+ import type { FormSourceProps } from '../runtime/nodes/form.interactive';
3
+ import type { NewsletterFormSourceProps } from '../runtime/nodes/newsletter-form.interactive';
4
+ type FooterRuntimeModuleBase<TKind extends FooterSection['kind']> = Readonly<{
3
5
  id: FooterModuleId;
4
- kind: 'brand' | 'navigation' | 'legal-navigation' | 'business-address' | 'contact' | 'opening-hours' | 'social-links' | 'supporting-text' | 'legal';
6
+ kind: TKind;
5
7
  heading: string | null;
8
+ }>;
9
+ type FooterRuntimeContactLink = Readonly<{
10
+ href: string;
11
+ label: string;
12
+ }>;
13
+ type FooterRuntimeOpeningHours = Readonly<{
14
+ weekday: string;
15
+ hours: string;
16
+ }>;
17
+ type FooterRuntimeSocialLink = Readonly<{
18
+ href: string;
19
+ label: string;
20
+ icon: string | null;
21
+ }>;
22
+ type UnionKeys<T> = T extends T ? keyof T : never;
23
+ type StrictUnionMember<T, TAll> = T extends T ? T & Partial<Record<Exclude<UnionKeys<TAll>, keyof T>, never>> : never;
24
+ type StrictUnion<T> = StrictUnionMember<T, T>;
25
+ type FooterRuntimeModuleVariant = (FooterRuntimeModuleBase<'brand'> & Readonly<{
26
+ showLogo: boolean;
27
+ showTitle: boolean;
28
+ }>) | (FooterRuntimeModuleBase<'navigation'> & Readonly<{
6
29
  navigationClassName?: string;
7
- showLogo?: boolean;
8
- showTitle?: boolean;
9
- address?: string;
10
- contactLinks?: readonly Readonly<{
11
- href: string;
12
- label: string;
13
- }>[];
14
- openingHours?: readonly Readonly<{
15
- weekday: string;
16
- hours: string;
17
- }>[];
18
- timeZone?: string;
19
- socialLinks?: readonly Readonly<{
20
- href: string;
21
- label: string;
22
- icon: string | null;
23
- }>[];
24
- content?: Readonly<Record<string, unknown>>;
30
+ }>) | FooterRuntimeModuleBase<'legal-navigation'> | (FooterRuntimeModuleBase<'business-address'> & Readonly<{
31
+ address: string;
32
+ }>) | (FooterRuntimeModuleBase<'contact'> & Readonly<{
33
+ contactLinks: readonly FooterRuntimeContactLink[];
34
+ }>) | (FooterRuntimeModuleBase<'opening-hours'> & Readonly<{
35
+ openingHours: readonly FooterRuntimeOpeningHours[];
36
+ timeZone: string;
37
+ }>) | (FooterRuntimeModuleBase<'social-links'> & Readonly<{
38
+ socialLinks: readonly FooterRuntimeSocialLink[];
39
+ }>) | (FooterRuntimeModuleBase<'supporting-text'> & Readonly<{
40
+ content: FooterRichText;
41
+ }>) | (FooterRuntimeModuleBase<'legal'> & Readonly<{
42
+ content: FooterRichText;
43
+ }>) | (FooterRuntimeModuleBase<'engagement'> & Readonly<{
44
+ engagement: FooterRuntimeEngagement;
45
+ }>);
46
+ export type FooterRuntimeModule = StrictUnion<FooterRuntimeModuleVariant>;
47
+ export type FooterRuntimeEngagement = Readonly<{
48
+ kind: 'standard-contact';
49
+ intro: string | null;
50
+ runtime: FooterStandardContactRuntime;
51
+ }> | Readonly<{
52
+ kind: 'mailing-list';
53
+ intro: string | null;
54
+ runtime: FooterMailingListRuntime;
55
+ }>;
56
+ export type FooterStandardContactRuntime = Readonly<{
57
+ value: NonNullable<FormSourceProps['value']>;
58
+ submitLabel?: FormSourceProps['submitLabel'];
59
+ successMessage?: FormSourceProps['successMessage'];
60
+ }>;
61
+ type FooterMailingListRuntimeBase = Readonly<{
62
+ preset: 'emailOnly';
63
+ includePhone?: false;
64
+ buttonLabel?: NewsletterFormSourceProps['buttonLabel'];
65
+ successMessage?: NewsletterFormSourceProps['successMessage'];
66
+ privacyNote?: NewsletterFormSourceProps['privacyNote'];
67
+ }>;
68
+ export type FooterMailingListRuntime = FooterMailingListRuntimeBase & (Readonly<{
69
+ mode?: 'public';
70
+ source: 'signed-footer';
71
+ destinationRef: NonNullable<Extract<NewsletterFormSourceProps, {
72
+ source: 'signed-footer';
73
+ }>['destinationRef']>;
74
+ listId?: never;
75
+ }> | Readonly<{
76
+ mode: 'preview';
77
+ source: 'legacy-direct-list';
78
+ destinationRef?: never;
79
+ listId: string | null;
80
+ target: NewsletterSignupAuthoringDestination;
81
+ }>);
82
+ export type FooterResolvedEngagement = Readonly<{
83
+ kind: 'none';
84
+ }> | Readonly<{
85
+ kind: 'needs-attention';
86
+ reason: 'missing-form' | 'wrong-form-kind' | 'invalid-form' | 'destination-not-ready';
87
+ }> | Readonly<{
88
+ kind: 'resolved';
89
+ sectionId: FooterModuleId;
90
+ engagement: Extract<FooterRuntimeEngagement, {
91
+ kind: 'standard-contact';
92
+ }>;
93
+ }> | Readonly<{
94
+ kind: 'resolved';
95
+ sectionId: FooterModuleId;
96
+ engagement: Extract<FooterRuntimeEngagement, {
97
+ kind: 'mailing-list';
98
+ }>;
25
99
  }>;
26
100
  export type FooterRuntimeViewModel = Readonly<{
27
101
  membershipKey: FooterMembershipKey;
28
102
  regions: readonly FooterRuntimeRegion[];
29
103
  }>;
30
104
  export type FooterRuntimeGroup = Readonly<{
31
- kind: 'identity' | 'main-navigation' | 'visit' | 'legal-ending';
105
+ kind: 'identity' | 'main-navigation' | 'visit' | 'engagement' | 'legal-ending';
32
106
  modules: readonly FooterRuntimeModule[];
33
107
  }>;
34
108
  export type FooterRuntimeRegion = Readonly<{
35
- kind: 'main' | 'bottom';
109
+ kind: 'engagement-row' | 'main' | 'bottom';
36
110
  className: string;
37
111
  groups: readonly FooterRuntimeGroup[];
38
112
  }>;
@@ -45,6 +119,18 @@ type FooterRuntimeViewModelInput = Readonly<{
45
119
  hasLogo?: boolean;
46
120
  legalRegion?: 'integrated' | 'separate';
47
121
  layoutVariant?: 'simple' | 'columns' | 'split';
122
+ engagement: FooterResolvedEngagement;
123
+ }>;
124
+ type FooterRuntimeSectionProjectionInput = Readonly<{
125
+ section: FooterSection;
126
+ publicProfile: PublicProfile;
127
+ businessAddress: string | null;
128
+ engagement: FooterResolvedEngagement;
129
+ }>;
130
+ export type FooterRuntimeSectionProjectionError = Readonly<{
131
+ kind: 'missing-source';
132
+ sectionKind: 'business-address' | 'contact' | 'opening-hours' | 'social-links' | 'supporting-text' | 'legal' | 'engagement';
48
133
  }>;
134
+ export declare function projectFooterRuntimeSection(input: FooterRuntimeSectionProjectionInput): Result<FooterRuntimeModule, FooterRuntimeSectionProjectionError>;
49
135
  export declare function buildFooterRuntimeViewModel(input: FooterRuntimeViewModelInput): FooterRuntimeViewModel;
50
136
  export {};
@@ -15,19 +15,6 @@ export declare const blockButtonRoleSchema: z.ZodEnum<{
15
15
  secondary: "secondary";
16
16
  ghost: "ghost";
17
17
  }>;
18
- /**
19
- * Temporary rollout boundary for persisted content written before issue #1220.
20
- * Authoring remains strict through `blockButtonRoleSchema`; this parser exists
21
- * only until the post-deploy role rewrite has been audited in production.
22
- */
23
- export declare function canonicalizePersistedBlockButtonRole(value: string): string;
24
- export declare const persistedBlockButtonRoleSchema: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
25
- outline: "outline";
26
- accent: "accent";
27
- primary: "primary";
28
- secondary: "secondary";
29
- ghost: "ghost";
30
- }>>;
31
18
  export declare const BLOCK_BUTTON_ROLE_OPTIONS: ReadonlyArray<{
32
19
  readonly value: BlockButtonRole;
33
20
  readonly label: string;
@@ -1,3 +1,3 @@
1
- export declare const SUPPORTED_LOADER_ENDPOINTS: readonly ["listPublishedEntries", "getPublishedEntryPreview", "listPublicEvents", "listPublicRecurringSchedule", "getPublicEventDetails", "listPublicWholeSeriesOfferings", "listPublicRouteCandidates", "listPublicTeamMembers", "listPublicProducts", "listPublicPasses", "listPublicMemberships", "getPublicFormById", "getPublicBookingServices", "getPublicWeeklySlotAvailability"];
1
+ export declare const SUPPORTED_LOADER_ENDPOINTS: readonly ["listPublishedEntries", "getPublishedEntryPreview", "listPublicEvents", "listPublicRecurringSchedule", "getPublicEventDetails", "listPublicWholeSeriesOfferings", "getPublicWholeSeriesOffering", "listPublicRouteCandidates", "listPublicTeamMembers", "listPublicProducts", "listPublicPasses", "listPublicMemberships", "getPublicFormById", "getPublicBookingServices", "getPublicWeeklySlotAvailability"];
2
2
  export type SupportedLoaderEndpoint = typeof SUPPORTED_LOADER_ENDPOINTS[number];
3
3
  export declare function isSupportedLoaderEndpoint(endpoint: string): endpoint is SupportedLoaderEndpoint;