@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
@@ -1,22 +1,7 @@
1
1
  import { type InteractiveIslandProps } from '../../../contracts/islands';
2
- import { type NewsletterSignupDestinationProvider, type NewsletterSignupPublicDestinationRef } from '../../blocks/newsletter-signup-destination';
3
- import { type NewsletterButtonVariant, type NewsletterFieldDef, type NewsletterPreset } from './newsletter-form.types';
4
- export type NewsletterFormSourceProps = Readonly<{
5
- blockId?: string | null;
6
- siteId?: string;
7
- apiBaseUrl?: string;
8
- listId?: string | null;
9
- destinationProvider?: NewsletterSignupDestinationProvider | null;
10
- preset?: NewsletterPreset;
11
- includePhone?: boolean;
12
- buttonLabel?: string | null;
13
- buttonVariant?: NewsletterButtonVariant | null;
14
- successMessage?: string | null;
15
- privacyNote?: string | null;
16
- tags?: string | null;
17
- spamProtectionEnabled?: boolean;
18
- className?: string | null;
19
- }>;
2
+ import { type NewsletterSignupPublicDestinationRef } from '../../blocks/newsletter-signup-destination';
3
+ import { type NewsletterButtonVariant, type NewsletterFieldDef, type NewsletterFormProps, type NewsletterPreset } from './newsletter-form.types';
4
+ export type NewsletterFormSourceProps = NewsletterFormProps;
20
5
  export type NewsletterFormDisplay = Readonly<{
21
6
  kind: 'newsletter-form';
22
7
  className: string | null;
@@ -27,13 +12,28 @@ export type NewsletterFormDisplay = Readonly<{
27
12
  fields: readonly NewsletterFieldDef[];
28
13
  }>;
29
14
  export type NewsletterFormHydration = Readonly<{
30
- destinationRef?: NewsletterSignupPublicDestinationRef | null;
31
- listId?: string | null;
15
+ target: NewsletterFormHydrationTarget;
32
16
  preset: NewsletterPreset;
33
17
  includePhone: boolean;
34
18
  tags?: string | null;
35
19
  spamProtectionEnabled?: boolean;
36
20
  }>;
21
+ export type NewsletterFormHydrationTarget = Readonly<{
22
+ tag: 'block-source';
23
+ destinationRef: NewsletterSignupBlockDestinationRef | null;
24
+ }> | Readonly<{
25
+ tag: 'signed-footer-source';
26
+ destinationRef: NewsletterSignupSignedDestinationRef;
27
+ }> | Readonly<{
28
+ tag: 'legacy-direct-list';
29
+ listId: string | null;
30
+ }>;
31
+ type NewsletterSignupBlockDestinationRef = Extract<NewsletterSignupPublicDestinationRef, {
32
+ tag: 'block_ref';
33
+ }>;
34
+ type NewsletterSignupSignedDestinationRef = Extract<NewsletterSignupPublicDestinationRef, {
35
+ tag: 'signed_destination_ref';
36
+ }>;
37
37
  type NewsletterIslandMeta = Readonly<{
38
38
  siteId?: string;
39
39
  apiBaseUrl?: string;
@@ -42,22 +42,7 @@ export declare function buildNewsletterDisplay(source: NewsletterFormSourceProps
42
42
  export type NewsletterFormInteractiveIslandProps = InteractiveIslandProps<NewsletterIslandMeta, 'newsletter-form', typeof newsletterFormBlockRuntime>;
43
43
  export declare const newsletterFormBlockRuntime: Readonly<{
44
44
  kind: "progressive";
45
- buildRender: (source: Readonly<{
46
- blockId?: string | null;
47
- siteId?: string;
48
- apiBaseUrl?: string;
49
- listId?: string | null;
50
- destinationProvider?: NewsletterSignupDestinationProvider | null;
51
- preset?: NewsletterPreset;
52
- includePhone?: boolean;
53
- buttonLabel?: string | null;
54
- buttonVariant?: NewsletterButtonVariant | null;
55
- successMessage?: string | null;
56
- privacyNote?: string | null;
57
- tags?: string | null;
58
- spamProtectionEnabled?: boolean;
59
- className?: string | null;
60
- }>) => Readonly<{
45
+ buildRender: (source: NewsletterFormProps) => Readonly<{
61
46
  display: Readonly<{
62
47
  kind: "newsletter-form";
63
48
  className: string | null;
@@ -68,8 +53,7 @@ export declare const newsletterFormBlockRuntime: Readonly<{
68
53
  fields: readonly NewsletterFieldDef[];
69
54
  }>;
70
55
  hydration: Readonly<{
71
- destinationRef?: NewsletterSignupPublicDestinationRef | null;
72
- listId?: string | null;
56
+ target: NewsletterFormHydrationTarget;
73
57
  preset: NewsletterPreset;
74
58
  includePhone: boolean;
75
59
  tags?: string | null;
@@ -78,38 +62,8 @@ export declare const newsletterFormBlockRuntime: Readonly<{
78
62
  }>;
79
63
  contracts: Readonly<{
80
64
  source: Readonly<{
81
- encode: (value: Readonly<{
82
- blockId?: string | null;
83
- siteId?: string;
84
- apiBaseUrl?: string;
85
- listId?: string | null;
86
- destinationProvider?: NewsletterSignupDestinationProvider | null;
87
- preset?: NewsletterPreset;
88
- includePhone?: boolean;
89
- buttonLabel?: string | null;
90
- buttonVariant?: NewsletterButtonVariant | null;
91
- successMessage?: string | null;
92
- privacyNote?: string | null;
93
- tags?: string | null;
94
- spamProtectionEnabled?: boolean;
95
- className?: string | null;
96
- }>) => unknown;
97
- decode: (input: unknown) => import("../../../contracts").DecodeResult<Readonly<{
98
- blockId?: string | null;
99
- siteId?: string;
100
- apiBaseUrl?: string;
101
- listId?: string | null;
102
- destinationProvider?: NewsletterSignupDestinationProvider | null;
103
- preset?: NewsletterPreset;
104
- includePhone?: boolean;
105
- buttonLabel?: string | null;
106
- buttonVariant?: NewsletterButtonVariant | null;
107
- successMessage?: string | null;
108
- privacyNote?: string | null;
109
- tags?: string | null;
110
- spamProtectionEnabled?: boolean;
111
- className?: string | null;
112
- }>>;
65
+ encode: (value: NewsletterFormProps) => unknown;
66
+ decode: (input: unknown) => import("../../../contracts").DecodeResult<NewsletterFormProps>;
113
67
  }>;
114
68
  render: Readonly<{
115
69
  encode: (value: Readonly<{
@@ -123,8 +77,7 @@ export declare const newsletterFormBlockRuntime: Readonly<{
123
77
  fields: readonly NewsletterFieldDef[];
124
78
  }>;
125
79
  hydration: Readonly<{
126
- destinationRef?: NewsletterSignupPublicDestinationRef | null;
127
- listId?: string | null;
80
+ target: NewsletterFormHydrationTarget;
128
81
  preset: NewsletterPreset;
129
82
  includePhone: boolean;
130
83
  tags?: string | null;
@@ -142,8 +95,7 @@ export declare const newsletterFormBlockRuntime: Readonly<{
142
95
  fields: readonly NewsletterFieldDef[];
143
96
  }>;
144
97
  hydration: Readonly<{
145
- destinationRef?: NewsletterSignupPublicDestinationRef | null;
146
- listId?: string | null;
98
+ target: NewsletterFormHydrationTarget;
147
99
  preset: NewsletterPreset;
148
100
  includePhone: boolean;
149
101
  tags?: string | null;
@@ -153,6 +105,7 @@ export declare const newsletterFormBlockRuntime: Readonly<{
153
105
  }>;
154
106
  }>;
155
107
  }>;
108
+ export declare function projectNewsletterFormHydrationTarget(source: NewsletterFormSourceProps): NewsletterFormHydrationTarget;
156
109
  export declare const newsletterFormInteractiveIslandPropsCodec: Readonly<{
157
110
  encode: (value: Readonly<Readonly<{
158
111
  siteId?: string;
@@ -172,8 +125,7 @@ export declare const newsletterFormInteractiveIslandPropsCodec: Readonly<{
172
125
  fields: readonly NewsletterFieldDef[];
173
126
  }>;
174
127
  hydration: Readonly<{
175
- destinationRef?: NewsletterSignupPublicDestinationRef | null;
176
- listId?: string | null;
128
+ target: NewsletterFormHydrationTarget;
177
129
  preset: NewsletterPreset;
178
130
  includePhone: boolean;
179
131
  tags?: string | null;
@@ -199,8 +151,7 @@ export declare const newsletterFormInteractiveIslandPropsCodec: Readonly<{
199
151
  fields: readonly NewsletterFieldDef[];
200
152
  }>;
201
153
  hydration: Readonly<{
202
- destinationRef?: NewsletterSignupPublicDestinationRef | null;
203
- listId?: string | null;
154
+ target: NewsletterFormHydrationTarget;
204
155
  preset: NewsletterPreset;
205
156
  includePhone: boolean;
206
157
  tags?: string | null;
@@ -6,5 +6,5 @@ import type { NewsletterFormProps } from './newsletter-form.types';
6
6
  * Renders the newsletter signup form for SSR with hydration support.
7
7
  * Uses the islands architecture pattern to hydrate on the client.
8
8
  */
9
- export declare function NewsletterFormSSR({ blockId, siteId, apiBaseUrl, listId, destinationProvider, preset, includePhone, buttonLabel, buttonVariant, successMessage, privacyNote, tags, spamProtectionEnabled, className, }: NewsletterFormProps): React.JSX.Element;
9
+ export declare function NewsletterFormSSR(props: NewsletterFormProps): React.JSX.Element;
10
10
  export default NewsletterFormSSR;
@@ -1,5 +1,5 @@
1
1
  import type { NewsletterSubscribeTarget } from '../api/types';
2
- import type { NewsletterSignupPublicDestinationRef } from '../../blocks/newsletter-signup-destination';
2
+ import type { NewsletterFormHydrationTarget } from './newsletter-form.interactive';
3
3
  export type NewsletterFormRawSubmissionFields = Readonly<{
4
4
  email: FormDataEntryValue | null;
5
5
  firstName: FormDataEntryValue | null;
@@ -23,10 +23,7 @@ export type NewsletterSubmitTargetResolution = Readonly<{
23
23
  target: NewsletterSubscribeTarget;
24
24
  }> | Readonly<{
25
25
  tag: 'unavailable';
26
- reason: 'missing_legacy_list';
26
+ reason: 'missing_block_source' | 'missing_legacy_list';
27
27
  }>;
28
28
  export declare function mapNewsletterFormFieldsToSubscriberInput(fields: NewsletterFormRawSubmissionFields): NewsletterFormSubmissionFields;
29
- export declare function resolveNewsletterSubmitTarget(input: Readonly<{
30
- listId?: string | null;
31
- destinationRef?: NewsletterSignupPublicDestinationRef | null;
32
- }>): NewsletterSubmitTargetResolution;
29
+ export declare function resolveNewsletterSubmitTarget(input: NewsletterFormHydrationTarget): NewsletterSubmitTargetResolution;
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Shared types for the newsletter form server and client components.
5
5
  */
6
- import type { NewsletterSignupFieldPreset } from '../../blocks/newsletter-signup-destination';
6
+ import type { NewsletterSignupDestinationProvider, NewsletterSignupFieldPreset, NewsletterSignupPublicDestinationRef } from '../../blocks/newsletter-signup-destination';
7
7
  import type { BlockButtonRole } from '../../constants/buttonRoles';
8
8
  export type NewsletterPreset = NewsletterSignupFieldPreset;
9
9
  export type NewsletterFieldDef = {
@@ -15,17 +15,11 @@ export type NewsletterFieldDef = {
15
15
  };
16
16
  export type NewsletterDestinationProvider = 'riverbank' | 'mailchimp';
17
17
  export type NewsletterButtonVariant = BlockButtonRole;
18
- export type NewsletterFormProps = {
19
- /** Block ID for island hydration */
20
- blockId?: string | null;
18
+ type NewsletterFormCommonProps = {
21
19
  /** Site ID for API calls */
22
20
  siteId?: string;
23
21
  /** API base URL for client-side fetching */
24
22
  apiBaseUrl?: string;
25
- /** Newsletter list ID to subscribe users to */
26
- listId?: string | null;
27
- /** Active signup destination provider */
28
- destinationProvider?: NewsletterDestinationProvider | null;
29
23
  /** Field preset configuration */
30
24
  preset?: NewsletterPreset;
31
25
  /** Adds an optional phone field to the selected preset */
@@ -45,9 +39,34 @@ export type NewsletterFormProps = {
45
39
  /** Additional CSS class */
46
40
  className?: string | null;
47
41
  };
42
+ type BlockNewsletterFormSource = Readonly<{
43
+ source: 'block';
44
+ blockId?: string | null;
45
+ destinationProvider?: NewsletterSignupDestinationProvider | null;
46
+ /** Authoring state only; public submission authority is always blockId. */
47
+ listId?: string | null;
48
+ }>;
49
+ type SignedFooterNewsletterFormSource = Readonly<{
50
+ source: 'signed-footer';
51
+ destinationRef: Extract<NewsletterSignupPublicDestinationRef, {
52
+ tag: 'signed_destination_ref';
53
+ }>;
54
+ blockId?: never;
55
+ destinationProvider?: never;
56
+ listId?: never;
57
+ }>;
58
+ type LegacyDirectListNewsletterFormSource = Readonly<{
59
+ source: 'legacy-direct-list';
60
+ listId: string | null;
61
+ blockId?: never;
62
+ destinationRef?: never;
63
+ destinationProvider?: never;
64
+ }>;
65
+ export type NewsletterFormProps = NewsletterFormCommonProps & (BlockNewsletterFormSource | SignedFooterNewsletterFormSource | LegacyDirectListNewsletterFormSource);
48
66
  /**
49
67
  * Get form fields based on preset configuration.
50
68
  */
51
69
  export declare function getPresetFields(preset: NewsletterPreset, options?: {
52
70
  includePhone?: boolean;
53
71
  }): NewsletterFieldDef[];
72
+ export {};
@@ -10,13 +10,13 @@ export declare const registrationButtonVariantSchema: z.ZodEnum<{
10
10
  secondary: "secondary";
11
11
  ghost: "ghost";
12
12
  }>;
13
- export declare const eventButtonVariantSchema: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
13
+ export declare const eventButtonVariantSchema: z.ZodEnum<{
14
14
  outline: "outline";
15
15
  accent: "accent";
16
16
  primary: "primary";
17
17
  secondary: "secondary";
18
18
  ghost: "ghost";
19
- }>>;
19
+ }>;
20
20
  export declare const eventLayoutSchema: z.ZodEnum<{
21
21
  stack: "stack";
22
22
  grid: "grid";
@@ -0,0 +1,21 @@
1
+ import { type FooterCompositionV1 } from '../../core/src/index';
2
+ import type { FooterRuntimeViewModel } from '../../blocks/src/client/site-chrome';
3
+ import { type FooterEditorTarget, type planFooterEditorView } from './footerComposer';
4
+ import type { SaveState } from './useFooterComposerState';
5
+ type FooterPlan = ReturnType<typeof planFooterEditorView>;
6
+ export declare function SaveBadge({ state }: {
7
+ state: SaveState;
8
+ }): import("react").JSX.Element | null;
9
+ export declare function FooterPreview({ runtime, }: {
10
+ runtime: FooterRuntimeViewModel;
11
+ }): import("react").JSX.Element;
12
+ export declare function FooterOverview({ plan, composition, onTarget, onChange, manageLinksHref, manageSettingsHref, onEngagement, }: {
13
+ plan: FooterPlan;
14
+ composition: FooterCompositionV1;
15
+ onTarget: (target: FooterEditorTarget) => void;
16
+ onChange: (composition: FooterCompositionV1) => void;
17
+ manageLinksHref: string;
18
+ manageSettingsHref: string;
19
+ onEngagement: () => void;
20
+ }): import("react").JSX.Element;
21
+ export {};
@@ -1,11 +1,13 @@
1
1
  import { type ReactNode } from 'react';
2
2
  import type { ApiClient } from '../../api/src/request';
3
3
  import { type FooterEditorTarget } from './footerComposer';
4
- export declare function FooterComposerPanel({ apiClient, siteId: rawSiteId, customFooterMode, manageLinksHref, manageSettingsHref, legalRegion, initialTarget, variant, canEdit, onSaved, loadingFallback, }: {
4
+ export declare function FooterComposerPanel({ apiClient, siteId: rawSiteId, customFooterMode, manageLinksHref, manageFormsHref, manageNewsletterHref, manageSettingsHref, legalRegion, initialTarget, variant, canEdit, onSaved, loadingFallback, }: {
5
5
  apiClient: ApiClient;
6
6
  siteId: string;
7
7
  customFooterMode: 'default' | 'blocks' | 'default+blocks' | 'none';
8
8
  manageLinksHref: string;
9
+ manageFormsHref?: string;
10
+ manageNewsletterHref?: string;
9
11
  manageSettingsHref: string;
10
12
  legalRegion?: 'integrated' | 'separate';
11
13
  initialTarget?: FooterEditorTarget;
@@ -0,0 +1,31 @@
1
+ import type { FooterEngagementAuthoringOptions } from '../../api/src/footer-settings';
2
+ import type { FooterEngagementDraft, FooterEngagementDraftEvent } from './footerEngagementDraft';
3
+ type DispatchDraft = (event: FooterEngagementDraftEvent) => void;
4
+ export declare function EngagementKindChoice({ dispatch, kind, }: Readonly<{
5
+ dispatch: DispatchDraft;
6
+ kind: FooterEngagementDraft['kind'];
7
+ }>): import("react").JSX.Element;
8
+ export declare function EngagementCopyFields({ dispatch, draft, error, }: Readonly<{
9
+ dispatch: DispatchDraft;
10
+ draft: FooterEngagementDraft;
11
+ error: string | null;
12
+ }>): import("react").JSX.Element;
13
+ export declare function EngagementPlacementChoice({ dispatch, treatment, }: Readonly<{
14
+ dispatch: DispatchDraft;
15
+ treatment: FooterEngagementDraft['treatment'];
16
+ }>): import("react").JSX.Element;
17
+ export declare function StandardContactChoice({ dispatch, formId, manageFormsHref, options, }: Readonly<{
18
+ dispatch: DispatchDraft;
19
+ formId: string;
20
+ manageFormsHref: string;
21
+ options: FooterEngagementAuthoringOptions;
22
+ }>): import("react").JSX.Element;
23
+ export declare function MailingListChoice({ dispatch, draft, manageNewsletterHref, options, }: Readonly<{
24
+ dispatch: DispatchDraft;
25
+ draft: Extract<FooterEngagementDraft, {
26
+ kind: 'mailing-list';
27
+ }>;
28
+ manageNewsletterHref: string;
29
+ options: FooterEngagementAuthoringOptions;
30
+ }>): import("react").JSX.Element;
31
+ export {};
@@ -0,0 +1,17 @@
1
+ import type { FooterEngagementSection } from '../../core/src/index';
2
+ import type { FooterEngagementAuthoringOptions } from '../../api/src/footer-settings';
3
+ import type { FooterEngagementReadiness } from './footerEngagementEditor';
4
+ type FooterEngagementEditorPanelProps = Readonly<{
5
+ candidate: FooterEngagementSection | null;
6
+ current: FooterEngagementSection | null;
7
+ manageFormsHref: string;
8
+ manageNewsletterHref: string;
9
+ onApply: () => void;
10
+ onCancel: () => void;
11
+ onPreview: (candidate: FooterEngagementSection) => void;
12
+ onRemove: () => void;
13
+ options: FooterEngagementAuthoringOptions;
14
+ readiness: FooterEngagementReadiness;
15
+ }>;
16
+ export declare function FooterEngagementEditorPanel(props: FooterEngagementEditorPanelProps): import("react").JSX.Element;
17
+ export {};
@@ -4,6 +4,8 @@ export type FooterEditorTarget = Readonly<{
4
4
  }> | Readonly<{
5
5
  kind: 'module';
6
6
  moduleId: FooterModuleId;
7
+ }> | Readonly<{
8
+ kind: 'engagement';
7
9
  }> | Readonly<{
8
10
  kind: 'shared-profile';
9
11
  section: 'contact' | 'opening-hours' | 'social-links';
@@ -48,6 +50,7 @@ type FooterEditorViewPlanInput = Readonly<{
48
50
  hasLogo?: boolean;
49
51
  hasMainNavigation?: boolean;
50
52
  hasLegalPolicyNavigation?: boolean;
53
+ hasEngagementSource?: boolean;
51
54
  canEdit: boolean;
52
55
  legalRegion?: 'integrated' | 'separate';
53
56
  }>;
@@ -0,0 +1,57 @@
1
+ import { type FooterEngagementSection, type Result } from '../../core/src/index';
2
+ type FooterEngagementDraftBase = Readonly<{
3
+ treatment: FooterEngagementSection['treatment'];
4
+ heading: string;
5
+ intro: string;
6
+ }>;
7
+ type FooterMailingCopyDraft = Readonly<{
8
+ buttonLabel: string;
9
+ successMessage: string;
10
+ privacyNote: string;
11
+ }>;
12
+ export type FooterEngagementDraft = (FooterEngagementDraftBase & Readonly<{
13
+ kind: 'standard-contact';
14
+ formId: string;
15
+ }>) | (FooterEngagementDraftBase & FooterMailingCopyDraft & Readonly<{
16
+ kind: 'mailing-list';
17
+ destination: Readonly<{
18
+ provider: 'riverbank';
19
+ listId: string;
20
+ }> | Readonly<{
21
+ provider: 'mailchimp';
22
+ audienceId: string;
23
+ }>;
24
+ }>);
25
+ export type FooterEngagementDraftEvent = Readonly<{
26
+ type: 'select-kind';
27
+ kind: FooterEngagementDraft['kind'];
28
+ }> | Readonly<{
29
+ type: 'set-treatment';
30
+ treatment: FooterEngagementDraft['treatment'];
31
+ }> | Readonly<{
32
+ type: 'set-heading';
33
+ heading: string;
34
+ }> | Readonly<{
35
+ type: 'set-intro';
36
+ intro: string;
37
+ }> | Readonly<{
38
+ type: 'set-form';
39
+ formId: string;
40
+ }> | Readonly<{
41
+ type: 'select-mailing-provider';
42
+ provider: 'riverbank' | 'mailchimp';
43
+ }> | Readonly<{
44
+ type: 'set-mailing-destination';
45
+ id: string;
46
+ }> | Readonly<{
47
+ type: 'set-mailing-copy';
48
+ field: keyof FooterMailingCopyDraft;
49
+ value: string;
50
+ }>;
51
+ export declare function reduceFooterEngagementDraft(draft: FooterEngagementDraft, event: FooterEngagementDraftEvent): FooterEngagementDraft;
52
+ export declare function createFooterEngagementDraft(section: FooterEngagementSection | null): FooterEngagementDraft;
53
+ type DraftParseError = Readonly<{
54
+ message: string;
55
+ }>;
56
+ export declare function parseFooterEngagementDraft(draft: FooterEngagementDraft, currentId: string, mailchimpConnectionId: string): Result<FooterEngagementSection, DraftParseError>;
57
+ export {};
@@ -0,0 +1,11 @@
1
+ import type { FooterEngagementSection } from '../../core/src/index';
2
+ import type { FooterEngagementAuthoringOptions } from '../../api/src/footer-settings';
3
+ import type { FooterResolvedEngagement } from '../../blocks/src/client/site-chrome';
4
+ export type FooterEngagementReadiness = Readonly<{
5
+ kind: 'ready';
6
+ }> | Readonly<{
7
+ kind: 'needs-repair';
8
+ message: string;
9
+ }>;
10
+ export declare function resolveFooterEngagementAuthoringState(section: FooterEngagementSection | null, options: FooterEngagementAuthoringOptions): FooterEngagementReadiness;
11
+ export declare function resolveFooterEngagementPreview(section: FooterEngagementSection | null, options: FooterEngagementAuthoringOptions): FooterResolvedEngagement;
@@ -0,0 +1,13 @@
1
+ import { type FooterResolvedEngagement, type FooterRuntimeViewModel } from '../../blocks/src/client/site-chrome';
2
+ import type { FooterCompositionV1, PublicProfile } from '../../core/src/index';
3
+ export type FooterPreviewRuntimeInput = Readonly<{
4
+ composition: FooterCompositionV1;
5
+ publicProfile: PublicProfile;
6
+ hasBusinessAddress: boolean;
7
+ hasLogo: boolean;
8
+ hasMainNavigation: boolean;
9
+ hasLegalPolicyNavigation: boolean;
10
+ legalRegion: 'integrated' | 'separate';
11
+ engagement: FooterResolvedEngagement;
12
+ }>;
13
+ export declare function buildFooterPreviewRuntime(input: FooterPreviewRuntimeInput): FooterRuntimeViewModel;
@@ -25,6 +25,7 @@ export { PreviewRichTextEditor } from './primitives/PreviewRichTextEditor';
25
25
  export { recordsEqual as editorValuesEqual } from './ui/stores/utils';
26
26
  export { footerModuleLabel, planFooterEditorView, type FooterEditorSectionPlan, type FooterEditorSource, type FooterEditorTarget, type FooterEditorViewPlan, } from './footerComposer';
27
27
  export { FooterComposerPanel } from './FooterComposerPanel';
28
+ export { resolveFooterEngagementAuthoringState, type FooterEngagementReadiness, } from './footerEngagementEditor';
28
29
  export { useStoreBinding, parseEditorPath } from './primitives/shared';
29
30
  export type { PathInfo } from './primitives/shared';
30
31
  export * from './ai/overlayHelpers';
@@ -0,0 +1,17 @@
1
+ import type { BlockManifest } from '../../../blocks/src/index';
2
+ import type { EditorBlockId } from '../../../core/src/index';
3
+ import type { ResolveBlockManifest } from './blockValidationView';
4
+ export type BlockValidationManifestEntry = Readonly<{
5
+ blockId: EditorBlockId;
6
+ manifest: BlockManifest;
7
+ }>;
8
+ export type BlockValidationManifestRegistry = Readonly<{
9
+ resolve: ResolveBlockManifest;
10
+ revision: () => number;
11
+ replace: (entries: readonly BlockValidationManifestEntry[]) => boolean;
12
+ delete: (blockId: EditorBlockId) => boolean;
13
+ clear: () => boolean;
14
+ remap: (fromBlockId: EditorBlockId, toBlockId: EditorBlockId) => boolean;
15
+ isEmpty: () => boolean;
16
+ }>;
17
+ export declare function createBlockValidationManifestRegistry(fallback: ResolveBlockManifest): BlockValidationManifestRegistry;
@@ -2,7 +2,7 @@ import type { BlockManifest } from "../../../blocks/src/index";
2
2
  import { type BlockDraftSaveability, type BlockDraftValidationIssue } from "../../../block-form/src/blockDraftSaveability";
3
3
  import type { EditorBlockId } from "../../../core/src/index";
4
4
  import type { EditorDraftSnapshot } from "./editorHistory";
5
- export type ResolveBlockManifest = (kind: string) => BlockManifest | null;
5
+ export type ResolveBlockManifest = (kind: string, blockId?: EditorBlockId) => BlockManifest | null;
6
6
  export type FirstIncompleteBlock = Readonly<{
7
7
  blockId: EditorBlockId;
8
8
  kind: string;
@@ -137,6 +137,10 @@ export type BlockValidationState = {
137
137
  hasMeaningfulEdit: (blockId: EditorBlockId) => boolean;
138
138
  showAllValidation: (blockId: EditorBlockId) => boolean;
139
139
  setShowAllValidation: (blockId: EditorBlockId, visible: boolean) => void;
140
+ setValidationManifests: (manifests: readonly Readonly<{
141
+ blockId: EditorBlockId;
142
+ manifest: import('../../../blocks/src/index').BlockManifest;
143
+ }>[]) => void;
140
144
  clearBlock: (blockId: EditorBlockId) => void;
141
145
  clearAll: () => void;
142
146
  getTouchedPaths: (blockId: EditorBlockId) => ReadonlySet<string>;
@@ -0,0 +1,35 @@
1
+ import { type FooterCompositionSnapshot, type PublicProfileSnapshot } from '../../api/src/footer-settings';
2
+ import type { ApiClient } from '../../api/src/request';
3
+ import { type FooterCompositionV1, type PublicProfile } from '../../core/src/index';
4
+ import type { FooterEditorTarget } from './footerComposer';
5
+ export type SaveState = 'idle' | 'saving' | 'saved' | 'conflict' | 'failed';
6
+ export type CompositionSaveOutcome = 'saved' | 'conflict' | 'failed';
7
+ type FooterComposerStateOptions = Readonly<{
8
+ apiClient: ApiClient;
9
+ canEdit: boolean;
10
+ initialTarget?: FooterEditorTarget;
11
+ onSaved?: () => void;
12
+ rawSiteId: string;
13
+ }>;
14
+ export declare function useFooterComposerState({ apiClient, canEdit, initialTarget, onSaved, rawSiteId, }: FooterComposerStateOptions): {
15
+ message: string | null;
16
+ saveComposition: (next: FooterCompositionV1, optimistic?: boolean) => Promise<CompositionSaveOutcome>;
17
+ saveProfile: (next: PublicProfile) => Promise<void>;
18
+ saveState: SaveState;
19
+ siteId: import("../../core/src/index").SiteId;
20
+ target: FooterEditorTarget;
21
+ setTarget: import("react").Dispatch<import("react").SetStateAction<FooterEditorTarget>>;
22
+ compositionSnapshot: FooterCompositionSnapshot | null;
23
+ engagementOptions: Readonly<{
24
+ forms: readonly import("../../api/src/footerSettings").FooterFormSummary[];
25
+ newsletterLists: readonly import("../../api/src/index").NewsletterListRecord[];
26
+ mailchimp: import("../../api/src/index").ListMailchimpAudiencesResponse;
27
+ }> | null;
28
+ load: () => Promise<void>;
29
+ loadError: string | null;
30
+ navigationMenus: import("../../api/src/index").NavigationMenuWithItems[] | null;
31
+ profileSnapshot: PublicProfileSnapshot | null;
32
+ setCompositionSnapshot: import("react").Dispatch<import("react").SetStateAction<FooterCompositionSnapshot | null>>;
33
+ setProfileSnapshot: import("react").Dispatch<import("react").SetStateAction<PublicProfileSnapshot | null>>;
34
+ };
35
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { FooterArrangementPlan, FooterLookPolicy, RenderableFooterSection } from './footer-composition-types';
2
+ export declare function planFooterArrangement(renderableSections: readonly RenderableFooterSection[], policy: FooterLookPolicy): FooterArrangementPlan;