@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
@@ -0,0 +1,37 @@
1
+ import type { Theme } from '../../theme-core/src/schema';
2
+ import type { ThemeTokens } from './system/theme';
3
+ export declare class MissingBlockOverrideError extends Error {
4
+ readonly blockKind: string;
5
+ readonly code = "missing_block_override";
6
+ constructor(blockKind: string);
7
+ }
8
+ export type PageThemeResources = Readonly<{
9
+ kind: 'available';
10
+ tokens: ThemeTokens;
11
+ config: Theme;
12
+ }> | Readonly<{
13
+ kind: 'unavailable';
14
+ }>;
15
+ type ThemedResourceInput = Readonly<{
16
+ rendering?: never;
17
+ theme: Theme;
18
+ themeTokens?: ThemeTokens;
19
+ }>;
20
+ type OverrideOnlyResourceInput = Readonly<{
21
+ rendering: {
22
+ kind: 'overrides-only';
23
+ };
24
+ theme?: never;
25
+ themeTokens?: never;
26
+ }>;
27
+ type ThemeResourceInput = ThemedResourceInput | OverrideOnlyResourceInput;
28
+ export declare function resolvePageThemeResources(props: ThemeResourceInput): PageThemeResources;
29
+ export declare function requireBlockOverride(resources: PageThemeResources, override: unknown, blockKind: string): void;
30
+ export declare function overrideThemeProps(resources: PageThemeResources): Readonly<{
31
+ theme?: ThemeTokens;
32
+ themeConfig?: Theme;
33
+ }>;
34
+ export declare function requireThemeResources(resources: PageThemeResources, blockKind: string): Extract<PageThemeResources, {
35
+ kind: 'available';
36
+ }>;
37
+ export {};
@@ -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';
@@ -1,4 +1,4 @@
1
- export { default as PageRenderer } from './PageRenderer';
1
+ export { default as PageRenderer, MissingBlockOverrideError, } from './PageRenderer';
2
2
  export type { BlockOverrideComponent, BlockOverrideProps, BlockOverrides, EntrySubrouteContextData, OccurrenceContextData, PageBlockPosition, PageRuntimeBoundary, SdkConfigForRenderer, } from './PageRenderer';
3
3
  export * from './subroutes';
4
4
  export { ThemeScope } from '../../theme-core/src/ThemeScope';
@@ -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 {};
@@ -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;