@riverbankcms/sdk 0.107.0 → 0.108.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 (159) hide show
  1. package/dist/{PreviewEditorSidebar-DpAbAl08.mjs → PreviewEditorSidebar-BBT-kZAM.mjs} +46 -11
  2. package/dist/{PreviewEditorUI-O7cn6Xxv.mjs → PreviewEditorUI-D69xNKT2.mjs} +10 -9
  3. package/dist/{PreviewQueryProvider-D0tnKl0t.mjs → PreviewQueryProvider-RRu7wyQ5.mjs} +1 -1
  4. package/dist/{SdkPreviewModeRuntime-CVB7urtl.mjs → SdkPreviewModeRuntime-CuDjXH6o.mjs} +426 -72
  5. package/dist/{SiteChromeCustomizeContext-C_sizso-.mjs → SiteChromeCustomizeContext-BQUY2dEk.mjs} +3865 -544
  6. package/dist/_dts/ai/src/contracts/proposals.d.ts +3712 -220
  7. package/dist/_dts/api/src/blocks.d.ts +41 -7
  8. package/dist/_dts/api/src/bookingRecords.d.ts +180 -115
  9. package/dist/_dts/api/src/cache-tags.d.ts +3 -0
  10. package/dist/_dts/api/src/contentRuntime.d.ts +19 -1
  11. package/dist/_dts/api/src/endpoints.d.ts +99 -0
  12. package/dist/_dts/api/src/footer-settings.d.ts +1 -0
  13. package/dist/_dts/api/src/footerSettings.d.ts +8 -0
  14. package/dist/_dts/api/src/index.d.ts +5 -2
  15. package/dist/_dts/api/src/navigation/contracts.d.ts +3 -3
  16. package/dist/_dts/api/src/previewContentContract.d.ts +4 -0
  17. package/dist/_dts/api/src/sdkContracts.d.ts +62 -0
  18. package/dist/_dts/api/src/siteBanner.d.ts +2 -2
  19. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +143 -55
  20. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +7 -1
  21. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +41 -1
  22. package/dist/_dts/blocks/src/primitives/layout/Section.d.ts +0 -1
  23. package/dist/_dts/blocks/src/rendering/server.d.ts +1 -0
  24. package/dist/_dts/blocks/src/system/blocks/site-footer-runtime.d.ts +50 -0
  25. package/dist/_dts/blocks/src/system/blocks/site-footer.d.ts +9 -48
  26. package/dist/_dts/blocks/src/system/constants/background.d.ts +1 -1
  27. package/dist/_dts/blocks/src/system/icons/registry.d.ts +2 -1
  28. package/dist/_dts/blocks/src/system/icons/social.d.ts +5 -0
  29. package/dist/_dts/blocks/src/system/icons/svg.d.ts +1 -0
  30. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +2 -2
  31. package/dist/_dts/blocks/src/system/node/fragments/backgroundLayer.d.ts +13 -0
  32. package/dist/_dts/blocks/src/system/node/fragments/footerNav.d.ts +2 -0
  33. package/dist/_dts/blocks/src/system/node/fragments/styledContainer.d.ts +4 -4
  34. package/dist/_dts/blocks/src/system/node/fragments/styledSection.d.ts +3 -12
  35. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  36. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +1 -1
  37. package/dist/_dts/blocks/src/system/types/link.d.ts +3 -3
  38. package/dist/_dts/content-editor/src/FooterComposerPanel.d.ts +14 -0
  39. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +27 -8
  40. package/dist/_dts/content-editor/src/footerComposer.d.ts +56 -0
  41. package/dist/_dts/content-editor/src/hooks/useEntryActions.d.ts +1 -1
  42. package/dist/_dts/content-editor/src/hooks/useEntryMutations.d.ts +5 -5
  43. package/dist/_dts/content-editor/src/index.d.ts +2 -0
  44. package/dist/_dts/content-editor/src/primitives/PreviewRichTextEditor.d.ts +3 -1
  45. package/dist/_dts/content-editor/src/services/contentEntryServices.d.ts +20 -36
  46. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +5 -1
  47. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +11 -0
  48. package/dist/_dts/content-model/src/content-types/schema.d.ts +1 -1
  49. package/dist/_dts/content-model/src/definitions/shared.d.ts +3 -0
  50. package/dist/_dts/core/src/branded.d.ts +3 -0
  51. package/dist/_dts/core/src/editor-state.d.ts +4 -0
  52. package/dist/_dts/core/src/footer-composition.d.ts +143 -0
  53. package/dist/_dts/core/src/index.d.ts +2 -0
  54. package/dist/_dts/core/src/public-profile.d.ts +73 -0
  55. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +3043 -2941
  56. package/dist/_dts/db/src/schemas/forms.d.ts +10 -10
  57. package/dist/_dts/editor/src/primitives/rich-text/RichTextEditorSurface.d.ts +5 -0
  58. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +1 -0
  59. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockCreation.d.ts +2 -1
  60. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockDuplication.d.ts +2 -1
  61. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockReorder.d.ts +2 -1
  62. package/dist/_dts/editor-blocks/src/block-editor/owner.d.ts +10 -0
  63. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +1 -0
  64. package/dist/_dts/path-utils/src/index.d.ts +5 -0
  65. package/dist/_dts/preview-next/src/client/preview/PreviewChromeLayer.d.ts +5 -0
  66. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -1
  67. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +1 -0
  68. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +2 -1
  69. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +2 -1
  70. package/dist/_dts/preview-next/src/client/preview/previewErrorMessages.d.ts +4 -0
  71. package/dist/_dts/sdk/src/cli/content/reader.d.ts +1 -0
  72. package/dist/_dts/sdk/src/client/management/blocks.d.ts +14 -1
  73. package/dist/_dts/sdk/src/client/management/index.d.ts +1 -0
  74. package/dist/_dts/sdk/src/client/management/types.d.ts +15 -1
  75. package/dist/_dts/sdk/src/config/content-types.d.ts +2 -0
  76. package/dist/_dts/sdk/src/config/content-validation.d.ts +4 -0
  77. package/dist/_dts/sdk/src/navigation/index.d.ts +2 -0
  78. package/dist/_dts/sdk/src/public-api/contracts.d.ts +3 -2
  79. package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +2 -1
  80. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +1 -1
  81. package/dist/_dts/sdk/src/version.d.ts +1 -1
  82. package/dist/_dts/site-commands/src/commands.d.ts +13 -10
  83. package/dist/_dts/theme-core/src/accordions/types.d.ts +2 -2
  84. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  85. package/dist/_dts/theme-core/src/buttons/personalities/two-tone-pill.d.ts +17 -0
  86. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +1 -1
  87. package/dist/_dts/theme-core/src/buttons/types.d.ts +3 -3
  88. package/dist/_dts/theme-core/src/cards/types.d.ts +3 -3
  89. package/dist/_dts/theme-core/src/footer/mode.d.ts +15 -0
  90. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  91. package/dist/_dts/theme-core/src/interactive/baseSchema.d.ts +1 -1
  92. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +36 -30
  93. package/dist/_dts/theme-core/src/navigation/types.d.ts +1 -1
  94. package/dist/_dts/theme-core/src/schema.d.ts +1186 -34
  95. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +12 -1
  96. package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +15 -0
  97. package/dist/cli/index.mjs +760 -374
  98. package/dist/client/{DiscountCodeDisclosure-BwGkvmVH.mjs → DiscountCodeDisclosure-D6TOf6Hi.mjs} +1 -1
  99. package/dist/client/{EventCombined.client-JnWE6Hzc.mjs → EventCombined.client-Dao3zxRk.mjs} +3 -3
  100. package/dist/client/{EventListing.client-DQewc_kg.mjs → EventListing.client-B2NNt4y1.mjs} +2 -2
  101. package/dist/client/{LeafletStaticMap-DPAU3SFt.mjs → LeafletStaticMap-BhwFo16w.mjs} +1 -1
  102. package/dist/client/{MagicLinkForm-D4kpWCbW.mjs → MagicLinkForm-BWnB7cMR.mjs} +2 -2
  103. package/dist/client/{StepIndicator-CBlkb4rA.mjs → StepIndicator-TzRiQ0BY.mjs} +2 -2
  104. package/dist/client/{accordion-DAIBVpTS.mjs → accordion-BPy-AJ4_.mjs} +1 -1
  105. package/dist/client/{bookingForm-DZ-4l5_1.mjs → bookingForm-BL4PGZds.mjs} +6 -6
  106. package/dist/client/bookings.mjs +143 -94
  107. package/dist/client/{buttons-DJgynGHQ.mjs → buttons-EBjyslaX.mjs} +144 -95
  108. package/dist/client/{carousel-D-SLfX8r.mjs → carousel-C2b7Cn9-.mjs} +1 -1
  109. package/dist/client/{cart-CEgbgJhX.mjs → cart-BQcbXIVD.mjs} +3 -3
  110. package/dist/client/{checkout-CXWrCRAA.mjs → checkout-DEmpGRJu.mjs} +3 -3
  111. package/dist/client/client.mjs +827 -434
  112. package/dist/client/{courseRegistration-DVmLrRVz.mjs → courseRegistration-BqRZPmsq.mjs} +7 -7
  113. package/dist/client/{eventCalendar-DCuyPY_c.mjs → eventCalendar-B8N_tSl5.mjs} +5 -5
  114. package/dist/client/{eventCombined-kP2CA2D4.mjs → eventCombined-Gjn6gtq7.mjs} +2 -2
  115. package/dist/client/{eventDetails-DU0LeF5e.mjs → eventDetails-M-VCxA-r.mjs} +3 -3
  116. package/dist/client/{eventListing-CcHF87BI.mjs → eventListing-DR19hqYi.mjs} +2 -2
  117. package/dist/client/{eventRegistration-DJnR0yFH.mjs → eventRegistration-BR02a0k3.mjs} +7 -7
  118. package/dist/client/{form-CH1lCusH.mjs → form-LY2xIbwg.mjs} +2 -2
  119. package/dist/client/{headerSection-CBPFZoku.mjs → headerSection-CYwwXJfh.mjs} +3 -3
  120. package/dist/client/hooks.mjs +377 -362
  121. package/dist/client/{locationMap-Cx1hBg5n.mjs → locationMap-DWnBXrFq.mjs} +2 -2
  122. package/dist/client/{newsletterForm-1ZL_ti9u.mjs → newsletterForm-D9s-fQ2P.mjs} +2 -2
  123. package/dist/client/{pricing-BIbzmV0G.mjs → pricing-DDq80oYc.mjs} +1 -1
  124. package/dist/client/{productDetail-BTh5gHBV.mjs → productDetail-B0SbWd45.mjs} +3 -3
  125. package/dist/client/{productList-Cc7OMrqN.mjs → productList-PwYlZn0y.mjs} +3 -3
  126. package/dist/client/{propsDecoder-oR-M-ISN.mjs → propsDecoder-BRWBiH7i.mjs} +33 -9
  127. package/dist/client/rendering/client.mjs +247 -40
  128. package/dist/client/rendering/islands.mjs +18 -18
  129. package/dist/client/rendering.mjs +478 -270
  130. package/dist/client/{shop-CQ_YbCnn.mjs → shop-CMwZPYME.mjs} +6 -6
  131. package/dist/client/{shop-commerce-BM-AoD3M.mjs → shop-commerce-BuxsFate.mjs} +5 -5
  132. package/dist/client/{shop-commerce-store-DFMQhU5p.mjs → shop-commerce-store-boYlEJ91.mjs} +1 -1
  133. package/dist/client/{shopShared-D0SKO2Cu.mjs → shopShared-D2naaOes.mjs} +2 -2
  134. package/dist/client/{useDiscountCodeUi-CrG4_ARt.mjs → useDiscountCodeUi-D9RHpVoj.mjs} +1 -1
  135. package/dist/client/{useEventFilters-CxK8Fekl.mjs → useEventFilters-igGiK1re.mjs} +3 -3
  136. package/dist/client/{usePolling-jcVryNgZ.mjs → usePolling-CI7MbsFB.mjs} +2 -2
  137. package/dist/preview-next/before-render.mjs +178 -0
  138. package/dist/preview-next/client/runtime.mjs +4 -4
  139. package/dist/preview-next/middleware.mjs +178 -0
  140. package/dist/{previewAuthStore-BPcJPzdz.mjs → previewAuthStore-a_cBD28m.mjs} +178 -0
  141. package/dist/{sdk-runtime-C39Rsk-x.mjs → sdk-runtime-MBzD-GmP.mjs} +2 -2
  142. package/dist/{separator-BoMSQnsP.mjs → separator-5ahRBC85.mjs} +1 -1
  143. package/dist/server/components.mjs +556 -366
  144. package/dist/server/config-validation.mjs +384 -363
  145. package/dist/server/config.mjs +384 -364
  146. package/dist/server/data.mjs +377 -362
  147. package/dist/server/index.mjs +179 -1
  148. package/dist/server/navigation.mjs +9 -3
  149. package/dist/server/next.mjs +1384 -995
  150. package/dist/server/page-converter.mjs +368 -355
  151. package/dist/server/prebuild.mjs +1 -1
  152. package/dist/server/rendering/server.mjs +539 -360
  153. package/dist/server/rendering.mjs +556 -366
  154. package/dist/server/routing.mjs +613 -543
  155. package/dist/server/server.mjs +554 -361
  156. package/dist/server/theme-bridge.mjs +189 -98
  157. package/dist/server/theme.mjs +161 -95
  158. package/dist/styles/index.css +7 -1
  159. package/package.json +1 -1
@@ -1,32 +1,81 @@
1
- import type { RectificationHistoryPropagationPlan, RectificationIdentityBoundary, RectificationIssueUrl, RectificationSurface } from "../../core/src/index";
2
- import type { CamelizeKeys, DbRow, DbJson } from "../../db/src/index";
3
- import type { APIEndpoint } from "./apiEndpointTypes";
4
- import type { AcceptAdminInviteRequest, AcceptAdminInviteResponse, AcceptSiteInvitationRequest, AcceptSiteInvitationResponse, AddCustomDomainRequest, AddCustomDomainResponse, AdminChangePlanRequest, AdminChangePlanResponse, AdminDeleteUserResponse, AuthInviteContinueRequest, AuthInviteContinueResponse, AuthInviteRegisterRequest, AuthInviteRegisterResponse, AuthResetCompleteRequest, AuthResetCompleteResponse, AuthSubmissionResult, BulkOperationResult, ChangePlanRequest, ChangePlanResponse, CreateAdminInviteRequest, CreateAdminInviteResponse, CreateAdminUserRequest, CreateAdminUserResponse, CreateAllowedDomainRequest, CreateAllowedDomainResponse, DeleteAllowedDomainResponse, DomainConfigResult, DomainSearchResultResponse, CurrentUserPractitionerLinkResponse, InviteSiteMemberRequest, InviteSiteMemberResponse, LinkCurrentUserPractitionerRequest, ListAdminInvitesResponse, ListAllowedDomainsResponse, ListSiteMembersResponse, LookupSiteDomainRequest, LookupSiteDomainResponse, MfaBackupCodesOverviewResponse, MfaBackupCodesRotateResponse, MfaOverviewResponse, MfaPhoneChallengeRequest, MfaPhoneChallengeResponse, MfaPhoneEnrollRequest, MfaPhoneEnrollResponse, MfaPhoneVerifyRequest, MfaTotpActivateRequest, MfaTotpEnrollResponse, MfaTotpVerifyRequest, MfaTotpVerifyResponse, ReauthSubmissionResult, RegisterDomainRequestPayload, RegisterDomainResponse, RegistrarBooleanMutationRequest, RegistrarLifecycleResponse, RegistrarRenewalPostureResponse, RegisterSiteDomainRequest, RegisterSiteDomainResponse, RemoveSiteMemberResponse, RevokeAdminInviteResponse, RevokeSiteInvitationResponse, ResendSiteInvitationResponse, SetHomepageRequest, SetHomepageResponse, SiteDomainContactPayload, SiteDomainRecord, TransferSiteOwnershipRequest, TransferSiteOwnershipResponse, UpdateSiteMemberRoleRequest, UpdateSiteMemberRoleResponse } from "./accessAdmin";
5
- import type { AdminRoleMutationResponse, RevokeAdminRoleRequest, StartImpersonationRequest, StartImpersonationResponse, StopImpersonationRequest, StopImpersonationResponse, UpsertAdminRoleRequest } from "./admin/types";
6
- import type { AccountRevokeSessionsBody, AccountRevokeSessionsResponse, AccountUpdatePasswordBody, AccountUpdatePasswordResponse, CreateManualSiteRequest, CreateManualSiteResponse } from "./siteOperations";
7
- import type { BookingSessionCancelAppointmentRequest, BookingSessionCancelAppointmentResponse, BookingSessionCreateAppointmentRequest, BookingSessionCreateAppointmentResponse, BookingSessionGetAppointmentResponse, BookingSessionListEligibleAppointmentPackagesResponse, BookingSessionGetEventResponse, BookingSessionListAppointmentsResponse, BookingSessionListEventsResponse, BookingSessionListMembershipsResponse, BookingSessionListPassesResponse, BookingSessionMeResponse, BookingSessionUpdateMeRequest, BookingSessionUpdateMeResponse, PublicBookingAppointmentStatusResponse, PublicBookingAvailabilityQuery, PublicBookingAvailableDatesResponse, PublicBookingAvailableSlotsResponse, PublicBookingService, PublicWeeklySlotAvailabilityQuery, PublicWeeklySlotAvailabilityResponse, PublicCreateBookingAppointmentRequest, PublicCreateBookingAppointmentResponse, ReferenceOptionsResponse } from "./bookingOperations";
8
- import type { ContentEntryOrPageResponse, ContentEntrySummary, ExportFormSubmissionsCsvQuery, ExportFormSubmissionsCsvResponse, CreateFormSubmissionRectificationAnnotationRequest, CreateFormSubmissionRectificationAnnotationResponse, FormRecord, FormSubmissionWithRectificationAnnotations, FormSummary, NavigationItemRecord, NavigationMenuWithItems, PublicFormRecord, PublishedContentEntryOrPageResponse, RunSdkWorkflowResponse, ScheduledContentEntryOrPageResponse, WorkflowRunStatusResponse } from "./contentRuntime";
9
- import type { GetVersionHistoryResponse, ListVersionHistoryResponse, RestoreVersionHistoryRequest, RestoreVersionHistoryResponse, VersionHistoryListQuery } from "./contentVersionHistory";
10
- import type { ApplyContentTemplateAddonRequest, ContentTemplateDetailsResponse, CreateTemplateBlockRequest, GetTransformsResponse, ReorderTemplateBlocksRequest, SerializedContentTypeSummary, UpdateContentTemplateBlockBindingsRequest, UpdateContentTemplateBlockRequest } from "./contentTypes";
11
- import type { LinkPayload, RoutableContentItem, SitemapRouteItem } from "./navigation/types";
12
- import type { RouteMetadataPayload, RouteMetadataResponse } from "./routes";
13
- import type { SiteAnalyticsSettingsPayload, SiteAnalyticsSettingsResponse } from "./siteAnalytics";
14
- import type { SiteBannerSettingsPayload, SiteBannerSettingsResponse } from "./siteBanner";
15
- import type { GeneratedIconSetGenerateRequest, GeneratedIconSetGenerateResponse, GeneratedIconSetListRequest, GeneratedIconSetListResponse, SiteIconStyleGuideResponse, SiteIconStyleGuideUpdateRequest } from "./siteIcons";
16
- import type { AiBrandGuidelinesGenerateRequest, AiBrandGuidelinesGenerateResponse, AiBrandGuidelinesGenerationContextResponse, SiteAiBrandGuidelinesPayload, SiteAiBrandGuidelinesResponse, SiteAiProfilePayload, SiteAiProfileResponse, SiteGenerationIntakePayload, SiteGenerationIntakeResponse } from "./siteOnboarding";
17
- import type { SitePrivacySettingsPayload, SitePrivacySettingsResponse } from "./privacyPolicy";
18
- import type { MaintenanceSettingsPayload, MaintenanceSettingsResponse, SiteBusinessAddressPayload, SiteBusinessAddressResponse, SiteFooterBlocksEditorResponse, SiteGeneralSettingsPayload, SiteGeneralSettingsResponse, SiteLayoutSettingsPayload, SiteLayoutSettingsResponse, UpdateSiteDeploymentModePayload, UpdateSiteDeploymentModeResponse, UpdateSiteFooterBlocksPayload, UpdateSiteFooterBlocksResponse } from "./siteSettings";
1
+ import type { FooterCompositionV1, PublicProfile, RectificationHistoryPropagationPlan, RectificationIdentityBoundary, RectificationIssueUrl, RectificationSurface } from '../../core/src/index';
2
+ import type { CamelizeKeys, DbRow, DbJson } from '../../db/src/index';
3
+ import type { APIEndpoint } from './apiEndpointTypes';
4
+ import type { AcceptAdminInviteRequest, AcceptAdminInviteResponse, AcceptSiteInvitationRequest, AcceptSiteInvitationResponse, AddCustomDomainRequest, AddCustomDomainResponse, AdminChangePlanRequest, AdminChangePlanResponse, AdminDeleteUserResponse, AuthInviteContinueRequest, AuthInviteContinueResponse, AuthInviteRegisterRequest, AuthInviteRegisterResponse, AuthResetCompleteRequest, AuthResetCompleteResponse, AuthSubmissionResult, BulkOperationResult, ChangePlanRequest, ChangePlanResponse, CreateAdminInviteRequest, CreateAdminInviteResponse, CreateAdminUserRequest, CreateAdminUserResponse, CreateAllowedDomainRequest, CreateAllowedDomainResponse, DeleteAllowedDomainResponse, DomainConfigResult, DomainSearchResultResponse, CurrentUserPractitionerLinkResponse, InviteSiteMemberRequest, InviteSiteMemberResponse, LinkCurrentUserPractitionerRequest, ListAdminInvitesResponse, ListAllowedDomainsResponse, ListSiteMembersResponse, LookupSiteDomainRequest, LookupSiteDomainResponse, MfaBackupCodesOverviewResponse, MfaBackupCodesRotateResponse, MfaOverviewResponse, MfaPhoneChallengeRequest, MfaPhoneChallengeResponse, MfaPhoneEnrollRequest, MfaPhoneEnrollResponse, MfaPhoneVerifyRequest, MfaTotpActivateRequest, MfaTotpEnrollResponse, MfaTotpVerifyRequest, MfaTotpVerifyResponse, ReauthSubmissionResult, RegisterDomainRequestPayload, RegisterDomainResponse, RegistrarBooleanMutationRequest, RegistrarLifecycleResponse, RegistrarRenewalPostureResponse, RegisterSiteDomainRequest, RegisterSiteDomainResponse, RemoveSiteMemberResponse, RevokeAdminInviteResponse, RevokeSiteInvitationResponse, ResendSiteInvitationResponse, SetHomepageRequest, SetHomepageResponse, SiteDomainContactPayload, SiteDomainRecord, TransferSiteOwnershipRequest, TransferSiteOwnershipResponse, UpdateSiteMemberRoleRequest, UpdateSiteMemberRoleResponse } from './accessAdmin';
5
+ import type { AdminRoleMutationResponse, RevokeAdminRoleRequest, StartImpersonationRequest, StartImpersonationResponse, StopImpersonationRequest, StopImpersonationResponse, UpsertAdminRoleRequest } from './admin/types';
6
+ import type { AccountRevokeSessionsBody, AccountRevokeSessionsResponse, AccountUpdatePasswordBody, AccountUpdatePasswordResponse, CreateManualSiteRequest, CreateManualSiteResponse } from './siteOperations';
7
+ import type { BookingSessionCancelAppointmentRequest, BookingSessionCancelAppointmentResponse, BookingSessionCreateAppointmentRequest, BookingSessionCreateAppointmentResponse, BookingSessionGetAppointmentResponse, BookingSessionListEligibleAppointmentPackagesResponse, BookingSessionGetEventResponse, BookingSessionListAppointmentsResponse, BookingSessionListEventsResponse, BookingSessionListMembershipsResponse, BookingSessionListPassesResponse, BookingSessionMeResponse, BookingSessionUpdateMeRequest, BookingSessionUpdateMeResponse, PublicBookingAppointmentStatusResponse, PublicBookingAvailabilityQuery, PublicBookingAvailableDatesResponse, PublicBookingAvailableSlotsResponse, PublicBookingService, PublicWeeklySlotAvailabilityQuery, PublicWeeklySlotAvailabilityResponse, PublicCreateBookingAppointmentRequest, PublicCreateBookingAppointmentResponse, ReferenceOptionsResponse } from './bookingOperations';
8
+ import type { ContentEntryOrPageResponse, ContentEntrySummary, ExportFormSubmissionsCsvQuery, ExportFormSubmissionsCsvResponse, CreateFormSubmissionRectificationAnnotationRequest, CreateFormSubmissionRectificationAnnotationResponse, FormRecord, FormSubmissionWithRectificationAnnotations, FormSummary, NavigationItemRecord, NavigationMenuWithItems, PublicFormRecord, PublishedContentEntryOrPageResponse, RunSdkWorkflowResponse, ScheduledContentEntryOrPageResponse, WorkflowRunStatusResponse } from './contentRuntime';
9
+ import type { GetVersionHistoryResponse, ListVersionHistoryResponse, RestoreVersionHistoryRequest, RestoreVersionHistoryResponse, VersionHistoryListQuery } from './contentVersionHistory';
10
+ import type { ApplyContentTemplateAddonRequest, ContentTemplateDetailsResponse, CreateTemplateBlockRequest, GetTransformsResponse, ReorderTemplateBlocksRequest, SerializedContentTypeSummary, UpdateContentTemplateBlockBindingsRequest, UpdateContentTemplateBlockRequest } from './contentTypes';
11
+ import type { LinkPayload, RoutableContentItem, SitemapRouteItem } from './navigation/types';
12
+ import type { RouteMetadataPayload, RouteMetadataResponse } from './routes';
13
+ import type { PageSurfaceEditorDocument } from './contentRuntime';
14
+ import type { ContentRouteRecord } from './types';
15
+ import type { SiteAnalyticsSettingsPayload, SiteAnalyticsSettingsResponse } from './siteAnalytics';
16
+ import type { SiteBannerSettingsPayload, SiteBannerSettingsResponse } from './siteBanner';
17
+ import type { GeneratedIconSetGenerateRequest, GeneratedIconSetGenerateResponse, GeneratedIconSetListRequest, GeneratedIconSetListResponse, SiteIconStyleGuideResponse, SiteIconStyleGuideUpdateRequest } from './siteIcons';
18
+ import type { AiBrandGuidelinesGenerateRequest, AiBrandGuidelinesGenerateResponse, AiBrandGuidelinesGenerationContextResponse, SiteAiBrandGuidelinesPayload, SiteAiBrandGuidelinesResponse, SiteAiProfilePayload, SiteAiProfileResponse, SiteGenerationIntakePayload, SiteGenerationIntakeResponse } from './siteOnboarding';
19
+ import type { SitePrivacySettingsPayload, SitePrivacySettingsResponse } from './privacyPolicy';
20
+ import type { MaintenanceSettingsPayload, MaintenanceSettingsResponse, SiteBusinessAddressPayload, SiteBusinessAddressResponse, SiteFooterBlocksEditorResponse, SiteGeneralSettingsPayload, SiteGeneralSettingsResponse, SiteLayoutSettingsPayload, SiteLayoutSettingsResponse, UpdateSiteDeploymentModePayload, UpdateSiteDeploymentModeResponse, UpdateSiteFooterBlocksPayload, UpdateSiteFooterBlocksResponse } from './siteSettings';
19
21
  /**
20
22
  * Site-management endpoints collect dashboard/admin/auth/content-management API shapes
21
23
  * that still belong to the aggregate contract layer but no longer need to live inline in
22
24
  * `types.ts`.
23
25
  */
24
- type Site = CamelizeKeys<DbRow<"sites">>;
25
- type DsarRunKindApi = "preview_export" | "execute_actions";
26
- type DsarExecutionModeApi = "preview_only" | "confirmed_execute";
27
- type DsarRunStatusApi = "running" | "previewed" | "completed" | "partially_failed" | "failed";
28
- type DsarSurfaceNameApi = "booking_customer" | "person_record" | "appointment" | "event_registration" | "order" | "form_submission" | "portal_session" | "email_audit" | "newsletter_subscriber";
29
- type DsarExecutableSurfaceNameApi = "portal_session" | "newsletter_subscriber" | "form_submission";
26
+ type Site = CamelizeKeys<DbRow<'sites'>>;
27
+ export type FooterCompositionSnapshot = Readonly<{
28
+ kind: 'ready';
29
+ composition: FooterCompositionV1;
30
+ revision: number;
31
+ }> | Readonly<{
32
+ kind: 'missing';
33
+ }> | Readonly<{
34
+ kind: 'invalid';
35
+ message: string;
36
+ }>;
37
+ export type FooterCompositionUpdateRequest = Readonly<{
38
+ composition: FooterCompositionV1;
39
+ baseRevision: number;
40
+ }>;
41
+ export type FooterCompositionUpdateResponse = Readonly<{
42
+ kind: 'updated';
43
+ snapshot: Extract<FooterCompositionSnapshot, {
44
+ kind: 'ready';
45
+ }>;
46
+ }> | Readonly<{
47
+ kind: 'conflict';
48
+ authoritative: FooterCompositionSnapshot;
49
+ }>;
50
+ export type PublicProfileSnapshot = Readonly<{
51
+ kind: 'ready';
52
+ profile: PublicProfile;
53
+ revision: number;
54
+ canonicalTimeZone: string;
55
+ hasBusinessAddress: boolean;
56
+ hasLogo: boolean;
57
+ }> | Readonly<{
58
+ kind: 'invalid';
59
+ message: string;
60
+ }>;
61
+ export type PublicProfileUpdateRequest = Readonly<{
62
+ profile: PublicProfile;
63
+ baseRevision: number;
64
+ }>;
65
+ export type PublicProfileUpdateResponse = Readonly<{
66
+ kind: 'updated';
67
+ snapshot: Extract<PublicProfileSnapshot, {
68
+ kind: 'ready';
69
+ }>;
70
+ }> | Readonly<{
71
+ kind: 'conflict';
72
+ authoritative: PublicProfileSnapshot;
73
+ }>;
74
+ type DsarRunKindApi = 'preview_export' | 'execute_actions';
75
+ type DsarExecutionModeApi = 'preview_only' | 'confirmed_execute';
76
+ type DsarRunStatusApi = 'running' | 'previewed' | 'completed' | 'partially_failed' | 'failed';
77
+ type DsarSurfaceNameApi = 'booking_customer' | 'person_record' | 'appointment' | 'event_registration' | 'order' | 'form_submission' | 'portal_session' | 'email_audit' | 'newsletter_subscriber';
78
+ type DsarExecutableSurfaceNameApi = 'portal_session' | 'newsletter_subscriber' | 'form_submission';
30
79
  type DsarRunCountsApi = {
31
80
  matchedSurfaces: number;
32
81
  includedSurfaces: number;
@@ -35,25 +84,25 @@ type DsarRunCountsApi = {
35
84
  failedActions: number;
36
85
  };
37
86
  type DsarPreviewExecutableDecisionApi = {
38
- kind: "executable";
87
+ kind: 'executable';
39
88
  surface: DsarSurfaceNameApi;
40
- action: "revoke_sessions" | "anonymize" | "hard_delete";
89
+ action: 'revoke_sessions' | 'anonymize' | 'hard_delete';
41
90
  rationale: string;
42
- exportRepresentation: "raw_record" | "summary_record" | "metadata_only";
91
+ exportRepresentation: 'raw_record' | 'summary_record' | 'metadata_only';
43
92
  requiresConfirmation: true;
44
93
  };
45
94
  type DsarPreviewReportOnlyDecisionApi = {
46
- kind: "report_only";
95
+ kind: 'report_only';
47
96
  surface: DsarSurfaceNameApi;
48
- action: "retain_with_reason" | "manual_follow_up";
97
+ action: 'retain_with_reason' | 'manual_follow_up';
49
98
  rationale: string;
50
- exportRepresentation: "raw_record" | "summary_record" | "metadata_only";
99
+ exportRepresentation: 'raw_record' | 'summary_record' | 'metadata_only';
51
100
  policySource?: string;
52
101
  };
53
102
  type DsarPreviewExcludedDecisionApi = {
54
- kind: "excluded";
103
+ kind: 'excluded';
55
104
  surface: DsarSurfaceNameApi;
56
- reason: "not_found" | "not_in_scope" | "not_yet_supported" | "insufficient_linkage";
105
+ reason: 'not_found' | 'not_in_scope' | 'not_yet_supported' | 'insufficient_linkage';
57
106
  rationale: string;
58
107
  };
59
108
  type DsarPreviewDecisionApi = DsarPreviewExecutableDecisionApi | DsarPreviewReportOnlyDecisionApi | DsarPreviewExcludedDecisionApi;
@@ -97,20 +146,20 @@ type DsarPreviewBundleApi = {
97
146
  };
98
147
  type DsarExecutionOutcomeApi = {
99
148
  surface: DsarExecutableSurfaceNameApi;
100
- action: "revoke_sessions" | "anonymize";
101
- status: "executed";
149
+ action: 'revoke_sessions' | 'anonymize';
150
+ status: 'executed';
102
151
  detail: string;
103
152
  changedCount: number;
104
153
  } | {
105
154
  surface: DsarExecutableSurfaceNameApi;
106
- action: "revoke_sessions" | "anonymize";
107
- status: "skipped";
155
+ action: 'revoke_sessions' | 'anonymize';
156
+ status: 'skipped';
108
157
  detail: string;
109
- reason: "not_currently_executable" | "already_handled" | "not_found";
158
+ reason: 'not_currently_executable' | 'already_handled' | 'not_found';
110
159
  } | {
111
160
  surface: DsarExecutableSurfaceNameApi;
112
- action: "revoke_sessions" | "anonymize";
113
- status: "failed";
161
+ action: 'revoke_sessions' | 'anonymize';
162
+ status: 'failed';
114
163
  detail: string;
115
164
  message: string;
116
165
  };
@@ -215,6 +264,31 @@ export type SiteManagementAPIEndpoints = {
215
264
  type: string;
216
265
  entryId: string;
217
266
  }, ContentEntryOrPageResponse>;
267
+ updatePageSurfaceDraftContent: APIEndpoint<{
268
+ data: Record<string, unknown>;
269
+ optimisticHash: string;
270
+ }, {
271
+ siteId: string;
272
+ pageSurfaceId: string;
273
+ }, {
274
+ document: PageSurfaceEditorDocument;
275
+ }>;
276
+ discardPageSurfaceDraftContent: APIEndpoint<{
277
+ optimisticHash: string;
278
+ }, {
279
+ siteId: string;
280
+ pageSurfaceId: string;
281
+ }, {
282
+ document: PageSurfaceEditorDocument;
283
+ }>;
284
+ updatePageSurfaceRouteMetadata: APIEndpoint<Pick<RouteMetadataPayload, 'draftSlug' | 'draftMetaTitle' | 'draftMetaDescription' | 'ogImageId'> & {
285
+ expectedDraftUpdatedAt: string | null;
286
+ }, {
287
+ siteId: string;
288
+ pageSurfaceId: string;
289
+ }, {
290
+ route: ContentRouteRecord;
291
+ }>;
218
292
  runSdkWorkflow: APIEndpoint<never, {
219
293
  siteId: string;
220
294
  type: string;
@@ -345,7 +419,7 @@ export type SiteManagementAPIEndpoints = {
345
419
  domainId: string;
346
420
  }, {
347
421
  domain: string;
348
- domainType: "registered" | "custom";
422
+ domainType: 'registered' | 'custom';
349
423
  configStatus: string | null;
350
424
  nameservers: {
351
425
  expected: string[];
@@ -545,6 +619,18 @@ export type SiteManagementAPIEndpoints = {
545
619
  updateSiteLayoutSettings: APIEndpoint<SiteLayoutSettingsPayload, {
546
620
  siteId: string;
547
621
  }, SiteLayoutSettingsResponse>;
622
+ getFooterComposition: APIEndpoint<never, {
623
+ siteId: string;
624
+ }, FooterCompositionSnapshot>;
625
+ updateFooterComposition: APIEndpoint<FooterCompositionUpdateRequest, {
626
+ siteId: string;
627
+ }, FooterCompositionUpdateResponse>;
628
+ getPublicProfile: APIEndpoint<never, {
629
+ siteId: string;
630
+ }, PublicProfileSnapshot>;
631
+ updatePublicProfile: APIEndpoint<PublicProfileUpdateRequest, {
632
+ siteId: string;
633
+ }, PublicProfileUpdateResponse>;
548
634
  updateSiteBannerSettings: APIEndpoint<SiteBannerSettingsPayload, {
549
635
  siteId: string;
550
636
  }, SiteBannerSettingsResponse>;
@@ -619,7 +705,7 @@ export type SiteManagementAPIEndpoints = {
619
705
  }, AdminDeleteUserResponse>;
620
706
  adminListAxiomLogs: APIEndpoint<never, {
621
707
  tail?: number;
622
- mode?: "all" | "errors" | "warnings";
708
+ mode?: 'all' | 'errors' | 'warnings';
623
709
  since?: string;
624
710
  until?: string;
625
711
  search?: string;
@@ -629,7 +715,7 @@ export type SiteManagementAPIEndpoints = {
629
715
  }>;
630
716
  adminListErrorLogs: APIEndpoint<never, {
631
717
  tail?: number;
632
- mode?: "errors" | "warnings";
718
+ mode?: 'errors' | 'warnings';
633
719
  since?: string;
634
720
  until?: string;
635
721
  search?: string;
@@ -639,15 +725,15 @@ export type SiteManagementAPIEndpoints = {
639
725
  }>;
640
726
  adminListRetentionJobRuns: APIEndpoint<never, {
641
727
  limit?: number;
642
- jobKind?: "portal_session_cleanup" | "portal_exchange_code_cleanup" | "analytics_transition" | "webhook_delivery_log_cleanup" | "email_audit_body_cleanup" | "request_log_cleanup" | "newsletter_subscriber_minimization" | "form_submission_anonymization" | "booking_operational_retention_review" | "appointment_operational_retention_review" | "event_registration_retention_review" | "order_operational_minimization_review";
643
- status?: "running" | "completed" | "partially_failed" | "failed";
644
- executionMode?: "scheduled" | "manual" | "dry_run";
728
+ jobKind?: 'portal_session_cleanup' | 'portal_exchange_code_cleanup' | 'analytics_transition' | 'webhook_delivery_log_cleanup' | 'email_audit_body_cleanup' | 'request_log_cleanup' | 'newsletter_subscriber_minimization' | 'form_submission_anonymization' | 'booking_operational_retention_review' | 'appointment_operational_retention_review' | 'event_registration_retention_review' | 'order_operational_minimization_review';
729
+ status?: 'running' | 'completed' | 'partially_failed' | 'failed';
730
+ executionMode?: 'scheduled' | 'manual' | 'dry_run';
645
731
  }, {
646
732
  runs: Array<{
647
733
  id: string;
648
- jobKind: "portal_session_cleanup" | "portal_exchange_code_cleanup" | "analytics_transition" | "webhook_delivery_log_cleanup" | "email_audit_body_cleanup" | "request_log_cleanup" | "newsletter_subscriber_minimization" | "form_submission_anonymization" | "booking_operational_retention_review" | "appointment_operational_retention_review" | "event_registration_retention_review" | "order_operational_minimization_review";
649
- executionMode: "scheduled" | "manual" | "dry_run";
650
- status: "running" | "completed" | "partially_failed" | "failed";
734
+ jobKind: 'portal_session_cleanup' | 'portal_exchange_code_cleanup' | 'analytics_transition' | 'webhook_delivery_log_cleanup' | 'email_audit_body_cleanup' | 'request_log_cleanup' | 'newsletter_subscriber_minimization' | 'form_submission_anonymization' | 'booking_operational_retention_review' | 'appointment_operational_retention_review' | 'event_registration_retention_review' | 'order_operational_minimization_review';
735
+ executionMode: 'scheduled' | 'manual' | 'dry_run';
736
+ status: 'running' | 'completed' | 'partially_failed' | 'failed';
651
737
  triggerSource: string;
652
738
  dataClasses: string[];
653
739
  startedAt: string;
@@ -710,11 +796,11 @@ export type SiteManagementAPIEndpoints = {
710
796
  counts: DsarRunCountsApi;
711
797
  }>;
712
798
  adminRunFormSubmissionRetention: APIEndpoint<{
713
- executionMode: "dry_run" | "manual";
799
+ executionMode: 'dry_run' | 'manual';
714
800
  siteId?: string;
715
801
  limit?: number;
716
802
  }, never, {
717
- outcome: "executed" | "already_running";
803
+ outcome: 'executed' | 'already_running';
718
804
  runId: string;
719
805
  beforeIso: string;
720
806
  candidateCount: number;
@@ -728,7 +814,7 @@ export type SiteManagementAPIEndpoints = {
728
814
  }>;
729
815
  adminListSupabaseLogs: APIEndpoint<never, {
730
816
  tail?: number;
731
- mode?: "all" | "errors" | "warnings";
817
+ mode?: 'all' | 'errors' | 'warnings';
732
818
  since?: string;
733
819
  until?: string;
734
820
  search?: string;
@@ -738,7 +824,7 @@ export type SiteManagementAPIEndpoints = {
738
824
  }>;
739
825
  adminListVercelLogs: APIEndpoint<never, {
740
826
  tail?: number;
741
- mode?: "all" | "errors" | "warnings";
827
+ mode?: 'all' | 'errors' | 'warnings';
742
828
  since?: string;
743
829
  until?: string;
744
830
  search?: string;
@@ -767,6 +853,7 @@ export type SiteManagementAPIEndpoints = {
767
853
  name: string;
768
854
  isPrimary?: boolean;
769
855
  isFooter?: boolean;
856
+ footerRole?: 'main' | 'legal-policy' | null;
770
857
  position?: number;
771
858
  }, {
772
859
  siteId: string;
@@ -783,6 +870,7 @@ export type SiteManagementAPIEndpoints = {
783
870
  name?: string;
784
871
  isPrimary?: boolean;
785
872
  isFooter?: boolean;
873
+ footerRole?: 'main' | 'legal-policy' | null;
786
874
  position?: number;
787
875
  }, {
788
876
  siteId: string;
@@ -798,7 +886,7 @@ export type SiteManagementAPIEndpoints = {
798
886
  }>;
799
887
  createNavigationItem: APIEndpoint<{
800
888
  label: string;
801
- type: "link" | "dropdown";
889
+ type: 'link' | 'dropdown';
802
890
  link?: LinkPayload;
803
891
  parentId?: string | null;
804
892
  orderIndex?: number;
@@ -811,7 +899,7 @@ export type SiteManagementAPIEndpoints = {
811
899
  }>;
812
900
  updateNavigationItem: APIEndpoint<{
813
901
  label?: string;
814
- type?: "link" | "dropdown";
902
+ type?: 'link' | 'dropdown';
815
903
  link?: LinkPayload;
816
904
  parentId?: string | null;
817
905
  orderIndex?: number;
@@ -1012,7 +1100,7 @@ export type SiteManagementAPIEndpoints = {
1012
1100
  appointmentId: string;
1013
1101
  }, BookingSessionCancelAppointmentResponse>;
1014
1102
  bookingSessionListEvents: APIEndpoint<never, {
1015
- status?: "confirmed" | "waitlist" | "cancelled";
1103
+ status?: 'confirmed' | 'waitlist' | 'cancelled';
1016
1104
  upcoming?: string;
1017
1105
  occurrenceId?: string;
1018
1106
  limit?: string;
@@ -10,7 +10,7 @@ import type { CreateManagementKeyRequest, CreateManagementKeyResponse, CreateSit
10
10
  import type { GetSiteInspirationAnalysisResponse, ListSiteInspirationAnalysesResponse } from './siteGeneration';
11
11
  import type { ListGscPropertiesAdminResponse, AuthStatusResponse, CronAppointmentRemindersResponse, CronBillingStatusResponse, CronEventFeedbackEmailsResponse, CronEventOccurrencesResponse, CronEventRemindersResponse, CronMediaJobsQuery, CronMediaJobsResponse, CronNewsletterSendResponse, CronPaymentReconciliationResponse, CronSeoIngestResponse, CronWaitlistExpiryResponse } from './siteOperations';
12
12
  import type { ApplySiteStyleSelectionBody, ApplySiteStyleSelectionResponse } from './siteRuntimeEndpoints';
13
- import type { ManagementMediaAsset, MediaResolveResponse, PushSdkConfigRequest, PushSdkConfigResponse, SdkBackfillIdentifiersResult, SdkGetCourseResponse, SdkGetEntryResponse, SdkGetEventCategoryResponse, SdkGetEventResponse, SdkGetFormResponse, SdkGetPageBlockResponse, SdkGetVenueResponse, SdkListCoursesResponse, SdkListEntriesResponse, SdkListEventCategoriesResponse, SdkListEventsResponse, SdkListFormsResponse, SdkListVenuesResponse, SdkMediaFinalizeUploadResponse, SdkMediaUploadUrlResponse, SdkPageResponse, SdkEntryUpsertSlotBlock, SdkPublishOrUnpublishEntryResponse, SdkPullContentTypesResponse, SdkPullCourseProgram, SdkPullCourseSession, SdkPullCoursesResponse, SdkPullEntriesAllResponse, SdkPullEntriesByTypeResponse, SdkPullEntriesResponse, SdkPullEventCategoriesResponse, SdkPullEventsResponse, SdkPullFooterResponse, SdkPullFormSchema, SdkPullFormsResponse, SdkPullFormSettings, SdkPullDraftsResponse, SdkPullNavigationResponse, SdkPullPagesResponse, SdkPullSettings, SdkPullSettingsResponse, SdkPullSiteInfoResponse, SdkPullThemeResponse, SdkPullVenue, SdkPullVenuesResponse, SdkUpdateSettingsResponse, SdkUpsertBlockResponse, SdkUpsertCourseResponse, SdkUpsertEntryResponse, SdkUpsertPageResponse, SdkUpsertEventCategoryResponse, SdkUpsertEventResponse, SdkUpsertFooterResponse, SdkUpsertFormResponse, SdkUpsertNavigationMenuResponse, SdkUpsertThemeResponse, SdkUpsertVenueResponse } from './sdkContracts';
13
+ import type { ManagementMediaAsset, MediaResolveResponse, PushSdkConfigRequest, PushSdkConfigResponse, SdkBackfillIdentifiersResult, SdkGetCourseResponse, SdkGetEntryResponse, SdkGetEventCategoryResponse, SdkGetEventResponse, SdkGetFormResponse, SdkGetPageBlockResponse, SdkPatchPageBlockBody, SdkPatchPageBlockResponse, SdkGetVenueResponse, SdkListCoursesResponse, SdkListEntriesResponse, SdkListEventCategoriesResponse, SdkListEventsResponse, SdkListFormsResponse, SdkListVenuesResponse, SdkMediaFinalizeUploadResponse, SdkMediaUploadUrlResponse, SdkPageResponse, SdkEntryUpsertSlotBlock, SdkPublishOrUnpublishEntryResponse, SdkPullContentTypesResponse, SdkPullCourseProgram, SdkPullCourseSession, SdkPullCoursesResponse, SdkPullEntriesAllResponse, SdkPullEntriesByTypeResponse, SdkPullEntriesResponse, SdkPullEventCategoriesResponse, SdkPullEventsResponse, SdkPullFooterResponse, SdkPullFormSchema, SdkPullFormsResponse, SdkPullFormSettings, SdkPullDraftsResponse, SdkPullNavigationResponse, SdkPullPagesResponse, SdkPullSettings, SdkPullSettingsResponse, SdkPullSiteInfoResponse, SdkPullThemeResponse, SdkPullVenue, SdkPullVenuesResponse, SdkUpdateSettingsResponse, SdkUpsertBlockResponse, SdkUpsertCourseResponse, SdkUpsertEntryResponse, SdkUpsertPageResponse, SdkUpsertEventCategoryResponse, SdkUpsertEventResponse, SdkUpsertFooterResponse, SdkUpsertFormResponse, SdkUpsertNavigationMenuResponse, SdkUpsertThemeResponse, SdkUpsertVenueResponse } from './sdkContracts';
14
14
  import type { SdkEventUpsertBody } from './sdk-event-upsert';
15
15
  import type { StripeConnectDisconnectResponse, StripeConnectStartResponse, StripeConnectStatusResponse, UpdateStripeAutomaticTaxRequest } from './billing';
16
16
  import type { NavigationLinkInput } from './navigation/types';
@@ -278,6 +278,11 @@ export type SitePlatformAPIEndpoints = {
278
278
  identifier: string;
279
279
  blockIdentifier: string;
280
280
  }, SdkGetPageBlockResponse>;
281
+ sdkPatchPageBlock: APIEndpoint<SdkPatchPageBlockBody, {
282
+ siteId: string;
283
+ identifier: string;
284
+ blockIdentifier: string;
285
+ }, SdkPatchPageBlockResponse>;
281
286
  sdkReorderPageBlocks: APIEndpoint<{
282
287
  identifiers: string[];
283
288
  }, {
@@ -291,6 +296,7 @@ export type SitePlatformAPIEndpoints = {
291
296
  name: string;
292
297
  isPrimary?: boolean;
293
298
  isFooter?: boolean;
299
+ footerRole?: 'main' | 'legal-policy' | null;
294
300
  items: readonly SdkUpsertNavigationItemInput[];
295
301
  }, {
296
302
  siteId: string;
@@ -8,7 +8,7 @@ import type { APIEndpoint } from './apiEndpointTypes';
8
8
  import type { AnalyticsReportQuery, AnalyticsReportResponse } from './analytics';
9
9
  import type { CreateMediaAssetBody, MediaAssetResponse, MediaAssetFileFilterContract, MediaBulkDeleteResponse, MediaClassifyJobResponse, MediaJobSummaryResponse, MediaLabelSummary, MediaSettingsResponse } from './media';
10
10
  import type { MediaUsageCheckResponse } from './shared-contracts';
11
- import type { BlockWithContentResponse, BlockListItem, ContentEntryListStage, EntryPageContentSlotsResponse, ListPublishedEntriesResponse, PageDraftRecord, PublishedBlockBaseline, PublishedContentEntryPreviewResponse, PublishedPostPreviewResponse, SdkBlockContent, SdkRuntimeContentByPathResponse, SdkRouteDecisionResponse, SdkRouteOutcomeResponse, SdkTemplate, SiteBySlugResponse, ThemeGenerationTurn, ThemePreferencesRecord, ThemeRow } from './contentRuntime';
11
+ import type { BlockWithContentResponse, BlockListItem, ContentEntryListStage, EntryPageContentSlotsResponse, PageSurfaceContentSlotsResponse, ListPublishedEntriesResponse, PageDraftRecord, PublishedBlockBaseline, PublishedContentEntryPreviewResponse, PublishedPostPreviewResponse, SdkBlockContent, SdkRuntimeContentByPathResponse, SdkRouteDecisionResponse, SdkRouteOutcomeResponse, SdkTemplate, SiteBySlugResponse, ThemeGenerationTurn, ThemePreferencesRecord, ThemeRow } from './contentRuntime';
12
12
  import type { GetVersionHistoryResponse, ListVersionHistoryResponse, RestoreVersionHistoryRequest, RestoreVersionHistoryResponse, VersionHistoryListQuery } from './contentVersionHistory';
13
13
  import type { CreateMediaUploadUrlRequest, CreateMediaUploadUrlResponse, CreateSiteLogoUploadUrlRequest, CreateSiteLogoUploadUrlResponse, MediaUploadFinalizeRequest, UploadSiteLogoRequest } from './siteInfrastructure';
14
14
  import type { DevToolsGetSiteRoleDowngradeQuery, DevToolsImpersonationResponse, DevToolsSeedResponse, DevToolsSetSiteRoleDowngradeRequest, SiteRoleDowngradeState } from './siteOperations';
@@ -486,6 +486,46 @@ export type SiteRuntimeAPIEndpoints = {
486
486
  }, {
487
487
  ok: boolean;
488
488
  }>;
489
+ listPageSurfaceContentSlots: APIEndpoint<never, {
490
+ siteId: string;
491
+ pageSurfaceId: string;
492
+ }, PageSurfaceContentSlotsResponse>;
493
+ createPageSurfaceSlotBlock: APIEndpoint<{
494
+ kind: string;
495
+ position?: number;
496
+ purpose?: string;
497
+ expectedCompositionHash: string;
498
+ }, {
499
+ siteId: string;
500
+ pageSurfaceId: string;
501
+ slotKey: string;
502
+ }, {
503
+ ok: boolean;
504
+ block: BlockListItem;
505
+ compositionHash: string;
506
+ }>;
507
+ reorderPageSurfaceSlotBlocks: APIEndpoint<{
508
+ blockIds: string[];
509
+ expectedCompositionHash: string;
510
+ }, {
511
+ siteId: string;
512
+ pageSurfaceId: string;
513
+ slotKey: string;
514
+ }, {
515
+ ok: boolean;
516
+ compositionHash: string;
517
+ }>;
518
+ deletePageSurfaceSlotBlock: APIEndpoint<{
519
+ expectedCompositionHash: string;
520
+ }, {
521
+ siteId: string;
522
+ pageSurfaceId: string;
523
+ slotKey: string;
524
+ blockId: string;
525
+ }, {
526
+ ok: boolean;
527
+ compositionHash: string;
528
+ }>;
489
529
  createBlock: APIEndpoint<{
490
530
  kind: string;
491
531
  position?: number;
@@ -2,7 +2,6 @@ import React from "react";
2
2
  import type { PrimitiveProps } from "../types";
3
3
  declare const Section: React.ForwardRefExoticComponent<PrimitiveProps & {
4
4
  background?: string;
5
- allowOverflow?: boolean;
6
5
  /** Data slot attribute for CSS targeting */
7
6
  "data-slot"?: string;
8
7
  } & React.RefAttributes<HTMLElement>>;
@@ -4,4 +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
8
  export { resolveFooterRenderPlan } from '../../../theme-core/src/footer/mode';
@@ -0,0 +1,50 @@
1
+ import { type FooterCompositionV1, type FooterMembershipKey, type FooterModuleId, type PublicProfile } from '../../../../core/src/index';
2
+ export type FooterRuntimeModule = Readonly<{
3
+ id: FooterModuleId;
4
+ kind: 'brand' | 'navigation' | 'legal-navigation' | 'business-address' | 'contact' | 'opening-hours' | 'social-links' | 'supporting-text' | 'legal';
5
+ heading: string | null;
6
+ 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>>;
25
+ }>;
26
+ export type FooterRuntimeViewModel = Readonly<{
27
+ membershipKey: FooterMembershipKey;
28
+ regions: readonly FooterRuntimeRegion[];
29
+ }>;
30
+ export type FooterRuntimeGroup = Readonly<{
31
+ kind: 'identity' | 'main-navigation' | 'visit' | 'legal-ending';
32
+ modules: readonly FooterRuntimeModule[];
33
+ }>;
34
+ export type FooterRuntimeRegion = Readonly<{
35
+ kind: 'main' | 'bottom';
36
+ className: string;
37
+ groups: readonly FooterRuntimeGroup[];
38
+ }>;
39
+ type FooterRuntimeViewModelInput = Readonly<{
40
+ composition: FooterCompositionV1;
41
+ publicProfile: PublicProfile;
42
+ businessAddress: string | null;
43
+ hasFooterNavigation: boolean;
44
+ hasLegalPolicyNavigation?: boolean;
45
+ hasLogo?: boolean;
46
+ legalRegion?: 'integrated' | 'separate';
47
+ layoutVariant?: 'simple' | 'columns' | 'split';
48
+ }>;
49
+ export declare function buildFooterRuntimeViewModel(input: FooterRuntimeViewModelInput): FooterRuntimeViewModel;
50
+ export {};
@@ -1,53 +1,14 @@
1
- import type { NodeDefinition } from "../node";
2
- import type { SystemBlockDefinition } from "../registry";
3
- export declare const siteFooterManifest: import("..").DefinedBlockManifest<import("..").BlockContentShapeInput<{
4
- readonly id: "block.site-footer";
5
- readonly title: "Site Footer";
6
- readonly category: "layout";
7
- readonly fragments: readonly [{
8
- readonly fragment: import("..").DefinedFragment<{
9
- readonly fields: readonly [{
10
- readonly id: "bodyText";
11
- readonly type: "richText";
12
- readonly label: "Body text";
13
- readonly description: "Appears in the main footer area.";
14
- readonly ui: {
15
- readonly variant: "limited";
16
- };
17
- }, {
18
- readonly id: "bottomText";
19
- readonly type: "richText";
20
- readonly label: "Bottom bar text";
21
- readonly description: "Appears in the optional footer bottom bar.";
22
- readonly ui: {
23
- readonly variant: "limited";
24
- };
25
- }];
26
- }>;
27
- readonly fieldPriority: 0;
28
- }];
1
+ import type { SystemBlockDefinition } from '../registry';
2
+ import type { FooterRuntimeViewModel } from './site-footer-runtime';
3
+ export declare const siteFooterManifest: import("..").DefinedBlockManifest<{
29
4
  readonly skipSectionStyles: true;
30
- readonly additionalFields: readonly [{
31
- readonly id: "showBusinessAddress";
32
- readonly type: "boolean";
33
- readonly label: "Add business address to site footer?";
34
- readonly required: false;
35
- readonly defaultValue: false;
36
- readonly ui: {
37
- readonly intent: "content";
38
- };
39
- }];
40
- readonly layout: NodeDefinition;
41
- readonly description: "Site-wide footer with navigation links and optional columns.";
42
- readonly styleTokens: {
43
- readonly spacing: "md";
44
- };
45
- readonly paletteHidden: true;
46
- }>>;
47
- export type SiteFooterVariant = "simple" | "columns" | "split";
48
- export type SiteFooterContent = {
5
+ }>;
6
+ export type SiteFooterVariant = 'simple' | 'columns' | 'split';
7
+ export type SiteFooterContent = Readonly<{
8
+ /** Legacy storage-only fields. The V1 runtime does not read these values. */
49
9
  bodyText?: unknown;
50
10
  bottomText?: unknown;
51
11
  showBusinessAddress?: boolean | null;
52
- };
12
+ footerRuntime?: FooterRuntimeViewModel | null;
13
+ }>;
53
14
  export declare const siteFooterBlockDefinition: SystemBlockDefinition<SiteFooterContent>;
@@ -54,7 +54,7 @@ export declare const BACKGROUND_POSITION_PRESETS: readonly [{
54
54
  readonly value: "right bottom";
55
55
  readonly label: "Right Bottom";
56
56
  }];
57
- export declare const BACKGROUND_POSITION_PRESET_VALUES: ("left" | "right" | "top" | "bottom" | "center" | "right center" | "top left" | "top right" | "bottom left" | "bottom right" | "top center" | "bottom center" | "left center" | "left top" | "right top" | "left bottom" | "right bottom")[];
57
+ export declare const BACKGROUND_POSITION_PRESET_VALUES: ("bottom" | "left" | "right" | "top" | "center" | "right center" | "top left" | "top right" | "bottom left" | "bottom right" | "top center" | "bottom center" | "left center" | "left top" | "right top" | "left bottom" | "right bottom")[];
58
58
  /**
59
59
  * Maps position keywords to rb-* anchor positioning classes.
60
60
  * Used for positioning scaled/overflow images within their containers.
@@ -2,7 +2,8 @@ import { type CtaIconName } from './cta';
2
2
  import { type SemanticIconId } from './semantic';
3
3
  import { type IconPickerPreset } from './presets';
4
4
  import type { IconComponent } from './svg';
5
- export type IconName = CtaIconName | SemanticIconId;
5
+ import { type SocialIconName } from './social';
6
+ export type IconName = CtaIconName | SemanticIconId | SocialIconName;
6
7
  export type IconIdForPreset<Preset extends IconPickerPreset> = Preset extends 'cta' ? CtaIconName : Preset extends 'feature' ? SemanticIconId : never;
7
8
  export type IconPickerOption<Preset extends IconPickerPreset = IconPickerPreset> = {
8
9
  id: IconIdForPreset<Preset>;
@@ -0,0 +1,5 @@
1
+ import { type IconComponent } from './svg';
2
+ export declare const SOCIAL_ICON_NAMES: readonly ["SocialFacebook", "SocialInstagram", "SocialLinkedIn", "SocialTikTok", "SocialX", "SocialYouTube"];
3
+ export type SocialIconName = (typeof SOCIAL_ICON_NAMES)[number];
4
+ export declare function isSocialIconName(value: unknown): value is SocialIconName;
5
+ export declare function getSocialIconComponent(value: unknown): IconComponent | null;
@@ -13,6 +13,7 @@ export type IconSvgProps = Omit<SVGProps<SVGSVGElement>, 'width' | 'height'> & {
13
13
  title?: string;
14
14
  };
15
15
  export type IconComponent = React.ComponentType<IconSvgProps>;
16
+ export declare function createIcon(displayName: string, children: React.ReactNode): IconComponent;
16
17
  export declare const ArrowDownIcon: IconComponent;
17
18
  export declare const ArrowLeftIcon: IconComponent;
18
19
  export declare const ArrowRightIcon: IconComponent;