@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
@@ -0,0 +1,118 @@
1
+ import type { Brand } from './branded';
2
+ import type { FooterEngagementSection, FooterEngagementSource } from './footer-engagement';
3
+ import type { RichTextDoc } from './rich-text';
4
+ export type FooterModuleId = Brand<string, 'FooterModuleId'>;
5
+ export type FooterMembershipKey = Brand<string, 'FooterMembershipKey'>;
6
+ export type FooterRichText = RichTextDoc;
7
+ export type FooterNavigationRole = 'main' | 'legal-policy';
8
+ type FooterSectionBase<TKind extends string> = Readonly<{
9
+ id: FooterModuleId;
10
+ kind: TKind;
11
+ heading: string | null;
12
+ selected: boolean;
13
+ }>;
14
+ export type FooterSection = (FooterSectionBase<'brand'> & Readonly<{
15
+ showLogo: boolean;
16
+ showTitle: boolean;
17
+ }>) | (FooterSectionBase<'navigation'> & Readonly<{
18
+ source: Readonly<{
19
+ kind: 'menu-role';
20
+ role: 'main';
21
+ }>;
22
+ }>) | (FooterSectionBase<'legal-navigation'> & Readonly<{
23
+ source: Readonly<{
24
+ kind: 'menu-role';
25
+ role: 'legal-policy';
26
+ }>;
27
+ }>) | (FooterSectionBase<'business-address'> & Readonly<{
28
+ source: Readonly<{
29
+ kind: 'business-address';
30
+ }>;
31
+ }>) | (FooterSectionBase<'contact'> & Readonly<{
32
+ source: Readonly<{
33
+ kind: 'public-profile';
34
+ }>;
35
+ }>) | (FooterSectionBase<'opening-hours'> & Readonly<{
36
+ source: Readonly<{
37
+ kind: 'public-profile';
38
+ }>;
39
+ }>) | (FooterSectionBase<'social-links'> & Readonly<{
40
+ source: Readonly<{
41
+ kind: 'public-profile';
42
+ }>;
43
+ }>) | (FooterSectionBase<'supporting-text'> & Readonly<{
44
+ content: FooterRichText | null;
45
+ }>) | (FooterSectionBase<'legal'> & Readonly<{
46
+ content: FooterRichText | null;
47
+ }>) | FooterEngagementSection;
48
+ export type FooterSectionKind = FooterSection['kind'];
49
+ export type FooterCompositionV1 = Readonly<{
50
+ schemaVersion: 1;
51
+ sections: readonly FooterSection[];
52
+ }>;
53
+ export type FooterCompositionError = Readonly<{
54
+ code: 'invalid_shape' | 'unsupported_schema_version' | 'invalid_section' | 'duplicate_section_id' | 'duplicate_section_kind' | 'unknown_section';
55
+ path: string;
56
+ message: string;
57
+ }>;
58
+ export type FooterLookPolicy = Readonly<{
59
+ kind: 'integrated-legal';
60
+ }> | Readonly<{
61
+ kind: 'separate-legal-region';
62
+ }>;
63
+ export type FooterVisualGroupKind = 'identity' | 'main-navigation' | 'visit' | 'engagement' | 'legal-ending';
64
+ export type FooterColumnCount = 1 | 2 | 3 | 4 | 5;
65
+ export type FooterVisualGroup = Readonly<{
66
+ kind: FooterVisualGroupKind;
67
+ sections: readonly FooterSection[];
68
+ span: 1;
69
+ }>;
70
+ export type FooterRenderRegion = Readonly<{
71
+ kind: 'engagement-row' | 'main' | 'bottom';
72
+ columns: FooterColumnCount;
73
+ groups: readonly FooterVisualGroup[];
74
+ }>;
75
+ export type FooterArrangementPlan = Readonly<{
76
+ membershipKey: FooterMembershipKey;
77
+ regions: readonly FooterRenderRegion[];
78
+ mobileGroups: readonly FooterVisualGroup[];
79
+ }>;
80
+ export type FooterRepairTarget = Readonly<{
81
+ kind: 'site-identity';
82
+ }> | Readonly<{
83
+ kind: 'navigation';
84
+ role: FooterNavigationRole;
85
+ }> | Readonly<{
86
+ kind: 'business-address';
87
+ }> | Readonly<{
88
+ kind: 'engagement-source';
89
+ source: FooterEngagementSource['kind'];
90
+ }> | Readonly<{
91
+ kind: 'public-profile';
92
+ section: 'contact' | 'opening-hours' | 'social-links';
93
+ }> | Readonly<{
94
+ kind: 'footer-section';
95
+ sectionId: FooterModuleId;
96
+ }>;
97
+ export type ResolvedFooterSection = Readonly<{
98
+ kind: 'renderable';
99
+ section: FooterSection;
100
+ }> | Readonly<{
101
+ kind: 'missing-source';
102
+ section: FooterSection;
103
+ repairTarget: FooterRepairTarget;
104
+ }>;
105
+ export type RenderableFooterSection = Extract<ResolvedFooterSection, {
106
+ kind: 'renderable';
107
+ }>;
108
+ export type FooterSourceAvailability = Readonly<{
109
+ hasLogo: boolean;
110
+ hasMainNavigation: boolean;
111
+ hasLegalPolicyNavigation: boolean;
112
+ hasBusinessAddress: boolean;
113
+ hasContact: boolean;
114
+ hasOpeningHours: boolean;
115
+ hasSocialLinks: boolean;
116
+ hasEngagementSource: boolean;
117
+ }>;
118
+ export {};
@@ -1,118 +1,8 @@
1
- import type { Brand } from './branded';
2
- import { type RichTextDoc } from './rich-text';
1
+ import type { FooterCompositionError, FooterCompositionV1, FooterModuleId, FooterSection, FooterSourceAvailability, ResolvedFooterSection } from './footer-composition-types';
2
+ import { type FooterEngagementSection } from './footer-engagement';
3
3
  import { type Result } from './result';
4
- export type FooterModuleId = Brand<string, 'FooterModuleId'>;
5
- export type FooterMembershipKey = Brand<string, 'FooterMembershipKey'>;
6
- export type FooterRichText = RichTextDoc;
7
- export type FooterNavigationRole = 'main' | 'legal-policy';
8
- type FooterSectionBase<TKind extends string> = Readonly<{
9
- id: FooterModuleId;
10
- kind: TKind;
11
- heading: string | null;
12
- selected: boolean;
13
- }>;
14
- export type FooterSection = (FooterSectionBase<'brand'> & Readonly<{
15
- showLogo: boolean;
16
- showTitle: boolean;
17
- }>) | (FooterSectionBase<'navigation'> & Readonly<{
18
- source: Readonly<{
19
- kind: 'menu-role';
20
- role: 'main';
21
- }>;
22
- }>) | (FooterSectionBase<'legal-navigation'> & Readonly<{
23
- source: Readonly<{
24
- kind: 'menu-role';
25
- role: 'legal-policy';
26
- }>;
27
- }>) | (FooterSectionBase<'business-address'> & Readonly<{
28
- source: Readonly<{
29
- kind: 'business-address';
30
- }>;
31
- }>) | (FooterSectionBase<'contact'> & Readonly<{
32
- source: Readonly<{
33
- kind: 'public-profile';
34
- }>;
35
- }>) | (FooterSectionBase<'opening-hours'> & Readonly<{
36
- source: Readonly<{
37
- kind: 'public-profile';
38
- }>;
39
- }>) | (FooterSectionBase<'social-links'> & Readonly<{
40
- source: Readonly<{
41
- kind: 'public-profile';
42
- }>;
43
- }>) | (FooterSectionBase<'supporting-text'> & Readonly<{
44
- content: FooterRichText | null;
45
- }>) | (FooterSectionBase<'legal'> & Readonly<{
46
- content: FooterRichText | null;
47
- }>);
48
- /** Retained as a source-compatible name while callers move from modules to sections. */
49
- export type FooterModule = FooterSection;
50
- export type FooterModuleKind = FooterSection['kind'];
51
- export type FooterCompositionV1 = Readonly<{
52
- schemaVersion: 1;
53
- sections: readonly FooterSection[];
54
- }>;
55
- export type FooterCompositionError = Readonly<{
56
- code: 'invalid_shape' | 'unsupported_schema_version' | 'invalid_section' | 'duplicate_section_id' | 'duplicate_section_kind' | 'unknown_section';
57
- path: string;
58
- message: string;
59
- }>;
60
- export type FooterLookPolicy = Readonly<{
61
- kind: 'integrated-legal';
62
- }> | Readonly<{
63
- kind: 'separate-legal-region';
64
- }>;
65
- export type FooterVisualGroupKind = 'identity' | 'main-navigation' | 'visit' | 'legal-ending';
66
- export type FooterColumnCount = 1 | 2 | 3 | 4;
67
- export type FooterVisualGroup = Readonly<{
68
- kind: FooterVisualGroupKind;
69
- sections: readonly FooterSection[];
70
- span: 1;
71
- }>;
72
- export type FooterRenderRegion = Readonly<{
73
- kind: 'main' | 'bottom';
74
- columns: FooterColumnCount;
75
- groups: readonly FooterVisualGroup[];
76
- }>;
77
- export type FooterArrangementPlan = Readonly<{
78
- membershipKey: FooterMembershipKey;
79
- regions: readonly FooterRenderRegion[];
80
- mobileGroups: readonly FooterVisualGroup[];
81
- }>;
82
- export type FooterRepairTarget = Readonly<{
83
- kind: 'site-identity';
84
- }> | Readonly<{
85
- kind: 'navigation';
86
- role: FooterNavigationRole;
87
- }> | Readonly<{
88
- kind: 'business-address';
89
- }> | Readonly<{
90
- kind: 'public-profile';
91
- section: 'contact' | 'opening-hours' | 'social-links';
92
- }> | Readonly<{
93
- kind: 'footer-section';
94
- sectionId: FooterModuleId;
95
- }>;
96
- export type ResolvedFooterSection = Readonly<{
97
- kind: 'renderable';
98
- section: FooterSection;
99
- }> | Readonly<{
100
- kind: 'missing-source';
101
- section: FooterSection;
102
- repairTarget: FooterRepairTarget;
103
- }>;
104
- export type RenderableFooterSection = Extract<ResolvedFooterSection, {
105
- kind: 'renderable';
106
- }>;
107
- export type FooterSourceAvailability = Readonly<{
108
- hasLogo: boolean;
109
- hasMainNavigation: boolean;
110
- hasLegalPolicyNavigation: boolean;
111
- hasBusinessAddress: boolean;
112
- hasContact: boolean;
113
- hasOpeningHours: boolean;
114
- hasSocialLinks: boolean;
115
- }>;
4
+ export { planFooterArrangement } from './footer-arrangement';
5
+ export type * from './footer-composition-types';
116
6
  export declare function unsafeAsFooterModuleId(value: string): FooterModuleId;
117
7
  export declare function parseFooterModuleId(value: unknown): Result<FooterModuleId, FooterCompositionError>;
118
8
  export declare function validateFooterComposition(composition: FooterCompositionV1): Result<FooterCompositionV1, FooterCompositionError>;
@@ -123,8 +13,10 @@ export declare function parseFooterCompositionV1(value: unknown): Result<FooterC
123
13
  */
124
14
  export declare function upgradePlacementFooterCompositionV1(value: unknown): Result<FooterCompositionV1, FooterCompositionError>;
125
15
  export declare function setFooterSectionSelected(composition: FooterCompositionV1, sectionId: FooterModuleId, selected: boolean): Result<FooterCompositionV1, FooterCompositionError>;
16
+ export declare function parseFooterEngagementSection(value: unknown): Result<FooterEngagementSection, FooterCompositionError>;
17
+ export declare function upsertFooterEngagementSection(composition: FooterCompositionV1, section: FooterEngagementSection): Result<FooterCompositionV1, FooterCompositionError>;
18
+ export declare function removeFooterEngagementSection(composition: FooterCompositionV1): FooterCompositionV1;
126
19
  export declare function resolveFooterSections(composition: FooterCompositionV1, availability: FooterSourceAvailability): readonly ResolvedFooterSection[];
127
- export declare function planFooterArrangement(renderableSections: readonly RenderableFooterSection[], policy: FooterLookPolicy): FooterArrangementPlan;
128
20
  export type FooterEditorOverviewItem = Readonly<{
129
21
  section: FooterSection;
130
22
  status: 'selected' | 'available';
@@ -141,4 +33,3 @@ type LegacyFooterNormalizationOptions = Readonly<{
141
33
  footerVisible?: boolean;
142
34
  }>;
143
35
  export declare function normalizeLegacyFooterContentToV1(value: unknown, options?: LegacyFooterNormalizationOptions): Result<FooterCompositionV1, FooterCompositionError>;
144
- export {};
@@ -0,0 +1,30 @@
1
+ import { type FormId } from './branded';
2
+ import { type NewsletterSignupAuthoringDestination } from './newsletter-signup-destination';
3
+ import { type Result } from './result';
4
+ import type { FooterCompositionError, FooterModuleId } from './footer-composition-types';
5
+ export type FooterEngagementTreatment = 'integrated' | 'separate-row';
6
+ export type FooterEngagementSource = Readonly<{
7
+ kind: 'standard-contact';
8
+ formId: FormId;
9
+ intro: string | null;
10
+ }> | Readonly<{
11
+ kind: 'mailing-list';
12
+ destination: NewsletterSignupAuthoringDestination;
13
+ intro: string | null;
14
+ buttonLabel: string;
15
+ successMessage: string;
16
+ privacyNote: string | null;
17
+ fieldPreset: 'emailOnly';
18
+ }>;
19
+ export type FooterEngagementSection = Readonly<{
20
+ id: FooterModuleId;
21
+ kind: 'engagement';
22
+ heading: string;
23
+ selected: boolean;
24
+ treatment: FooterEngagementTreatment;
25
+ source: FooterEngagementSource;
26
+ }>;
27
+ export declare function parseFooterEngagementSectionValue(value: Readonly<Record<string, unknown>>, sectionBase: Readonly<{
28
+ id: FooterModuleId;
29
+ selected: boolean;
30
+ }>, path: string): Result<FooterEngagementSection, FooterCompositionError>;
@@ -32,6 +32,10 @@ export * from './public-url-validation';
32
32
  export * from './public-profile';
33
33
  export * from './rich-text';
34
34
  export * from './footer-composition';
35
+ export * from './footer-arrangement';
36
+ export * from './footer-composition-types';
37
+ export * from './footer-engagement';
38
+ export * from './newsletter-signup-destination';
35
39
  export * from './number-input';
36
40
  export * from './field-errors';
37
41
  export * from './form-submission-preview';
@@ -0,0 +1,38 @@
1
+ import type { Brand } from './branded';
2
+ import { type Result } from './result';
3
+ export type NewsletterListId = Brand<string, 'NewsletterListId'>;
4
+ export type MailchimpConnectionId = Brand<string, 'MailchimpConnectionId'>;
5
+ export type MailchimpAudienceId = Brand<string, 'MailchimpAudienceId'>;
6
+ export type MailchimpTagName = Brand<string, 'MailchimpTagName'>;
7
+ export type NewsletterSignupDestinationProvider = 'riverbank' | 'mailchimp';
8
+ export type RiverbankNewsletterDestination = Readonly<{
9
+ tag: 'riverbank_list';
10
+ listId: NewsletterListId;
11
+ }>;
12
+ export type MailchimpNewsletterDestination = Readonly<{
13
+ tag: 'mailchimp_audience';
14
+ connectionId: MailchimpConnectionId;
15
+ audienceId: MailchimpAudienceId;
16
+ tags: readonly MailchimpTagName[];
17
+ }>;
18
+ export type NewsletterSignupAuthoringDestination = RiverbankNewsletterDestination | MailchimpNewsletterDestination;
19
+ export type NewsletterSignupDestinationValueError = Readonly<{
20
+ kind: 'invalid-destination-shape';
21
+ }> | Readonly<{
22
+ kind: 'invalid-destination-tag';
23
+ value: unknown;
24
+ }> | Readonly<{
25
+ kind: 'invalid-newsletter-list-id';
26
+ }> | Readonly<{
27
+ kind: 'invalid-mailchimp-connection-id';
28
+ }> | Readonly<{
29
+ kind: 'invalid-mailchimp-audience-id';
30
+ }> | Readonly<{
31
+ kind: 'invalid-mailchimp-tags';
32
+ }>;
33
+ export declare function parseNewsletterListId(value: unknown): NewsletterListId | null;
34
+ export declare function parseMailchimpConnectionId(value: unknown): MailchimpConnectionId | null;
35
+ export declare function parseMailchimpAudienceId(value: unknown): MailchimpAudienceId | null;
36
+ export declare function parseMailchimpTagName(value: unknown): MailchimpTagName | null;
37
+ export declare function parseNewsletterSignupDestinationProvider(value: unknown): NewsletterSignupDestinationProvider | null;
38
+ export declare function parseNewsletterSignupAuthoringDestinationValue(value: unknown): Result<NewsletterSignupAuthoringDestination, NewsletterSignupDestinationValueError>;