@riverbankcms/sdk 0.144.0 → 0.146.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 (228) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/{PreviewEditorSidebar-CQZNnFiM.mjs → PreviewEditorSidebar-kg2r2Fyi.mjs} +4 -4
  3. package/dist/{PreviewEditorUI-DCNxnmI0.mjs → PreviewEditorUI-sWMLp5dT.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-BCYICImX.mjs → PreviewQueryProvider-Cg51xq1w.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-BJolUbr1.mjs → SdkPreviewModeRuntime-h2ti3Hch.mjs} +688 -519
  6. package/dist/{SiteChromeCustomizeContext-CKgEpoxi.mjs → SiteChromeCustomizeContext-DEACFH9m.mjs} +3381 -2017
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +5643 -66
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +513 -6
  9. package/dist/_dts/api/src/appointmentEndpointDefinitions.d.ts +49 -0
  10. package/dist/_dts/api/src/appointmentServiceCategoryEndpoints.d.ts +75 -0
  11. package/dist/_dts/api/src/appointmentServiceContracts.d.ts +80 -0
  12. package/dist/_dts/api/src/appointmentSetup.d.ts +8 -1
  13. package/dist/_dts/api/src/bookingConfig.d.ts +8 -1
  14. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +10 -26
  15. package/dist/_dts/api/src/bookingManagementEventEndpointTypes.d.ts +45 -1
  16. package/dist/_dts/api/src/clientErrorReporting.d.ts +50 -0
  17. package/dist/_dts/api/src/communications.d.ts +32 -24
  18. package/dist/_dts/api/src/contentRuntime.d.ts +3 -5
  19. package/dist/_dts/api/src/endpoints.d.ts +316 -134
  20. package/dist/_dts/api/src/event-visibility.d.ts +20 -0
  21. package/dist/_dts/api/src/eventManagementContracts.d.ts +56 -3
  22. package/dist/_dts/api/src/eventManagementEndpointDefinitions.d.ts +24 -0
  23. package/dist/_dts/api/src/eventPageWords.d.ts +19 -0
  24. package/dist/_dts/api/src/eventSeriesRegistrationEndpointDefinitions.d.ts +14 -0
  25. package/dist/_dts/api/src/index.d.ts +7 -1
  26. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  27. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  28. package/dist/_dts/api/src/launchReadiness.d.ts +22 -2
  29. package/dist/_dts/api/src/launchRequirementPriority.d.ts +3 -0
  30. package/dist/_dts/api/src/newsletterCampaignCommandEndpoints.d.ts +13 -0
  31. package/dist/_dts/api/src/newsletterEndpointDefinitions.d.ts +30 -11
  32. package/dist/_dts/api/src/occurrenceScheduling.d.ts +10 -0
  33. package/dist/_dts/api/src/onboarding/confirmationResend.d.ts +3 -0
  34. package/dist/_dts/api/src/pageSurfaceEndpoints.d.ts +44 -0
  35. package/dist/_dts/api/src/participantMessaging.d.ts +11 -1
  36. package/dist/_dts/api/src/publicBookingService.d.ts +35 -1
  37. package/dist/_dts/api/src/publicExperience/newsletterEndpoints.d.ts +13 -0
  38. package/dist/_dts/api/src/publicNewsletterEndpointDefinitions.d.ts +58 -0
  39. package/dist/_dts/api/src/schemas/admin-observability-logs.d.ts +3 -3
  40. package/dist/_dts/api/src/sdk-event-upsert.d.ts +40 -1
  41. package/dist/_dts/api/src/sdkContracts.d.ts +3 -42
  42. package/dist/_dts/api/src/sdkCourseBooking.d.ts +30 -0
  43. package/dist/_dts/api/src/sdkEventEndpointDefinitions.d.ts +76 -0
  44. package/dist/_dts/api/src/sdkEventLifecycle.d.ts +37 -0
  45. package/dist/_dts/api/src/sdkManagedEventContracts.d.ts +18 -0
  46. package/dist/_dts/api/src/sdkPageDesign.d.ts +388 -0
  47. package/dist/_dts/api/src/sdkPageDesignEndpointDefinitions.d.ts +22 -0
  48. package/dist/_dts/api/src/sdkPullEventContracts.d.ts +46 -0
  49. package/dist/_dts/api/src/siteAddressEndpoints.d.ts +29 -0
  50. package/dist/_dts/api/src/siteManagementEndpointDefinitions.d.ts +49 -0
  51. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +4 -38
  52. package/dist/_dts/api/src/siteOnboarding.d.ts +75 -9
  53. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +1 -1
  54. package/dist/_dts/api/src/types.d.ts +8 -1
  55. package/dist/_dts/api/src/wholeSeriesRuns.d.ts +14 -0
  56. package/dist/_dts/blocks/src/PageRenderer.d.ts +4 -4
  57. package/dist/_dts/blocks/src/bindings/index.d.ts +2 -2
  58. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +24 -0
  59. package/dist/_dts/blocks/src/index.d.ts +3 -1
  60. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +10 -0
  61. package/dist/_dts/blocks/src/pageRenderJoins.d.ts +68 -0
  62. package/dist/_dts/blocks/src/pageRenderPlan.d.ts +8 -27
  63. package/dist/_dts/blocks/src/pageRenderPreparation.d.ts +7 -4
  64. package/dist/_dts/blocks/src/pageRendererBoundaries.d.ts +40 -23
  65. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +3 -1
  66. package/dist/_dts/blocks/src/server.d.ts +1 -1
  67. package/dist/_dts/blocks/src/system/blocks/appointment-services.d.ts +2 -0
  68. package/dist/_dts/blocks/src/system/blocks/events/eventSelectionFields.d.ts +2 -2
  69. package/dist/_dts/blocks/src/system/blocks/events/shared/calendarWindow.d.ts +1 -1
  70. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +27 -5
  71. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +14 -1
  72. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +2 -2
  73. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +47 -47
  74. package/dist/_dts/blocks/src/system/icons/social.d.ts +1 -1
  75. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +29 -3
  76. package/dist/_dts/blocks/src/system/registry.d.ts +1 -1
  77. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +8 -1
  78. package/dist/_dts/blocks/src/system/runtime/nodes/appointment-services.d.ts +22 -2
  79. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +3 -1
  80. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +57 -2
  81. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.service-categories.d.ts +29 -0
  82. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.service-choices.d.ts +13 -0
  83. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +3 -3
  84. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +13 -1
  85. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.d.ts +2 -1
  86. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +23 -7
  87. package/dist/_dts/blocks/src/system/runtime/nodes/form.fields.d.ts +5 -0
  88. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.block-submission.d.ts +36 -0
  89. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.client.d.ts +1 -1
  90. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +6 -1
  91. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.parts.d.ts +46 -0
  92. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.submission.d.ts +20 -1
  93. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +2 -1
  94. package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +2 -1
  95. package/dist/_dts/blocks/src/system/runtime/shared/components/CheckboxChoice.d.ts +18 -0
  96. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +1 -0
  97. package/dist/_dts/content-editor/src/index.d.ts +1 -0
  98. package/dist/_dts/content-editor/src/primitives/previewEditableOutline.d.ts +2 -0
  99. package/dist/_dts/content-editor/src/ui/editorBlockEquality.d.ts +3 -0
  100. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +3 -3
  101. package/dist/_dts/content-model/src/content-types/schema.d.ts +1 -1
  102. package/dist/_dts/core/src/appointment-service-categories.d.ts +108 -0
  103. package/dist/_dts/core/src/block-content-identity.d.ts +5 -0
  104. package/dist/_dts/core/src/editor-state.d.ts +2 -1
  105. package/dist/_dts/core/src/index.d.ts +2 -0
  106. package/dist/_dts/core/src/mailing-list-submission.d.ts +3 -1
  107. package/dist/_dts/core/src/public-event-booking-availability.d.ts +20 -1
  108. package/dist/_dts/core/src/public-profile.d.ts +12 -1
  109. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +711 -242
  110. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +3 -0
  111. package/dist/_dts/editor-blocks/src/block-editor/EmptyState.d.ts +13 -1
  112. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +2 -2
  113. package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
  114. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/loaders.d.ts +16 -1
  115. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/types.d.ts +13 -0
  116. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/utils.d.ts +29 -0
  117. package/dist/_dts/preview-next/src/client/blocks/BoundaryControl.d.ts +7 -2
  118. package/dist/_dts/preview-next/src/client/blocks/composer/mergeDrafts.d.ts +1 -1
  119. package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +3 -3
  120. package/dist/_dts/preview-next/src/client/blocks/previewProjection/applyPreviewProjections.d.ts +1 -3
  121. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -2
  122. package/dist/_dts/preview-next/src/client/blocks/previewProjection/types.d.ts +2 -2
  123. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +1 -1
  124. package/dist/_dts/sdk/src/client/runtimeCacheKeys.d.ts +8 -0
  125. package/dist/_dts/sdk/src/client/types.d.ts +1 -1
  126. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  127. package/dist/_dts/sdk/src/contracts/page.d.ts +7 -2
  128. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +5 -0
  129. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +2 -2
  130. package/dist/_dts/sdk/src/next/renderSdkContent.d.ts +0 -1
  131. package/dist/_dts/sdk/src/public-api/contracts.d.ts +6 -8
  132. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +4 -4
  133. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +4 -4
  134. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +7 -2
  135. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +5 -2
  136. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +6 -1
  137. package/dist/_dts/sdk/src/rendering/helpers/templateContent.d.ts +2 -0
  138. package/dist/_dts/sdk/src/rendering/hooks/useContent.d.ts +6 -2
  139. package/dist/_dts/sdk/src/rendering/hooks/usePage.d.ts +5 -1
  140. package/dist/_dts/sdk/src/version.d.ts +1 -1
  141. package/dist/_dts/surfaces/src/index.d.ts +10 -0
  142. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  143. package/dist/_dts/theme-core/src/inputs/checkable.d.ts +42 -0
  144. package/dist/_dts/theme-core/src/inputs/inputGroup.d.ts +19 -0
  145. package/dist/_dts/theme-core/src/layout/boundaryCss.d.ts +3 -0
  146. package/dist/_dts/theme-core/src/site-styles/compositionBudget.d.ts +8 -0
  147. package/dist/_dts/theme-core/src/site-styles/contentTemplateRuntimeCompiler.d.ts +3 -2
  148. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +1 -3
  149. package/dist/_dts/theme-core/src/site-styles/generatedDesignPipeline.d.ts +3 -0
  150. package/dist/_dts/theme-core/src/site-styles/index.d.ts +3 -0
  151. package/dist/_dts/theme-core/src/site-styles/joinTreatment.d.ts +132 -0
  152. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorBoundaries.d.ts +31 -0
  153. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +33 -29
  154. package/dist/_dts/theme-core/src/site-styles/pageDesignIntent.d.ts +4 -4
  155. package/dist/_dts/theme-core/src/site-styles/pageFlowPresets.d.ts +36 -0
  156. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +4 -10
  157. package/dist/_dts/theme-core/src/site-styles/rawStyleFields.d.ts +17 -4
  158. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +20 -74
  159. package/dist/_dts/theme-core/src/site-styles/sectionBoundaryComposition.d.ts +95 -0
  160. package/dist/_dts/theme-core/src/site-styles/sectionTransitions.d.ts +80 -518
  161. package/dist/_dts/theme-core/src/site-styles/siteStyleBlockPolicies.d.ts +9 -4
  162. package/dist/_dts/theme-core/src/site-styles/transitionCatalogue.d.ts +320 -0
  163. package/dist/_dts/theme-core/src/site-styles/types.d.ts +3 -18
  164. package/dist/_dts/ui/src/navigation-tabs.d.ts +2 -1
  165. package/dist/client/{BookingConsentAgreement-DoAILrkN.mjs → BookingConsentAgreement-BQKL045f.mjs} +2 -2
  166. package/dist/client/CheckboxChoice--W2n6yKs.mjs +24 -0
  167. package/dist/client/{DiscountCodeDisclosure-X528hUTf.mjs → DiscountCodeDisclosure-CsOtjFY7.mjs} +1 -1
  168. package/dist/client/{EventCombined.client-DSBVwq5m.mjs → EventCombined.client-BdRjVbhH.mjs} +6 -6
  169. package/dist/client/{EventListing.client-DmFAX7Vb.mjs → EventListing.client-DBxC6xOU.mjs} +2 -2
  170. package/dist/client/{LeafletStaticMap-BAqXdfhq.mjs → LeafletStaticMap-mHEJKrTs.mjs} +1 -1
  171. package/dist/client/{ThemedButton-BwNFVwi4.mjs → ThemedButton-CE5KYT6z.mjs} +1 -1
  172. package/dist/client/{accordion-DRhMdkbd.mjs → accordion-BEQNSptH.mjs} +1 -1
  173. package/dist/client/{bookingForm-iJ_nCsNF.mjs → bookingForm-AMr-s5vw.mjs} +168 -95
  174. package/dist/client/bookings.mjs +239 -110
  175. package/dist/client/{carousel-D8zuffZr.mjs → carousel-Bbt_QgJy.mjs} +1 -1
  176. package/dist/client/{cart-DeMGJViN.mjs → cart-CnWi30zJ.mjs} +3 -3
  177. package/dist/client/{checkout-DXc06Km2.mjs → checkout-f3nkWgd4.mjs} +3 -3
  178. package/dist/client/client.mjs +3222 -1612
  179. package/dist/client/{context-CDLCfDep.mjs → context-Bc8T6pCe.mjs} +1 -1
  180. package/dist/client/{dates-ClFx7Epy.mjs → dates-DUsCEzLb.mjs} +2 -3
  181. package/dist/client/{eventCalendar-BaGpnOGN.mjs → eventCalendar-CKwgXui5.mjs} +9 -9
  182. package/dist/client/{eventCombined-ywONOx2m.mjs → eventCombined-CBAOSTGR.mjs} +4 -4
  183. package/dist/client/{eventDetails-B2LlOTYY.mjs → eventDetails-Dh-_WiBD.mjs} +4 -4
  184. package/dist/client/{eventListing-CMgxWpqP.mjs → eventListing-CA3frIH5.mjs} +4 -4
  185. package/dist/client/{eventRegistration-BarLDNHR.mjs → eventRegistration-BHtsgdcg.mjs} +21 -22
  186. package/dist/client/{form-BjqKaBJ7.mjs → form-C2h3YAcg.mjs} +135 -104
  187. package/dist/client/{headerSection-CP4XDwz1.mjs → headerSection-lwMuMTH9.mjs} +3 -3
  188. package/dist/client/hooks.mjs +1023 -148
  189. package/dist/client/{locationMap-C5gW-d-w.mjs → locationMap-DJ2bLODV.mjs} +3 -3
  190. package/dist/client/{newsletterForm-afXlVSA0.mjs → newsletterForm-8Pu5K32g.mjs} +225 -102
  191. package/dist/client/{pricing-Bl1CAl28.mjs → pricing-HHx3IgBz.mjs} +1 -1
  192. package/dist/client/{productDetail-CvQ3jWQe.mjs → productDetail-C_1odnAf.mjs} +3 -3
  193. package/dist/client/{productList-U874PGO7.mjs → productList-CtCv-Nmx.mjs} +3 -3
  194. package/dist/client/{propsDecoder-DPXtCZWP.mjs → propsDecoder-Dcgsncxb.mjs} +111 -55
  195. package/dist/client/rendering/client.mjs +1389 -722
  196. package/dist/client/rendering/islands.mjs +17 -17
  197. package/dist/client/rendering.mjs +3136 -1400
  198. package/dist/client/{routeIslandApiConfig-NGYiUWXu.mjs → routeIslandApiConfig-CWLP7wu3.mjs} +1 -1
  199. package/dist/client/{scrollToBlock-0-C3DVhK.mjs → scrollToBlock-BNgaEUpo.mjs} +1 -1
  200. package/dist/client/{shop-BXjXhM9P.mjs → shop-DQXrQ8kJ.mjs} +7 -7
  201. package/dist/client/{shop-commerce-BZ6UlWJ7.mjs → shop-commerce-B88zmWWo.mjs} +6 -6
  202. package/dist/client/{shop-commerce-store-DlSBXb3D.mjs → shop-commerce-store-DtSfkKuX.mjs} +1 -1
  203. package/dist/client/{shopShared-kkEOiLPA.mjs → shopShared-cuaONpkJ.mjs} +4 -4
  204. package/dist/client/{useEventFilters-zvnnE1ro.mjs → useEventFilters-Bukew6Gb.mjs} +6 -6
  205. package/dist/preview-next/before-render.mjs +500 -165
  206. package/dist/preview-next/client/runtime.mjs +4 -4
  207. package/dist/preview-next/editor-base.css +11 -0
  208. package/dist/preview-next/keepAlive.mjs +460 -165
  209. package/dist/preview-next/middleware.mjs +461 -165
  210. package/dist/{previewAuthStore-JA6-I_sL.mjs → previewAuthStore-h5IgbSp4.mjs} +485 -165
  211. package/dist/{sdk-runtime-DFJlQt3q.mjs → sdk-runtime-DTc1uIXn.mjs} +2 -2
  212. package/dist/{separator-o8GHb1xh.mjs → separator-BpHS1KZK.mjs} +1 -1
  213. package/dist/server/components.mjs +3088 -1307
  214. package/dist/server/config-validation.mjs +927 -109
  215. package/dist/server/config.mjs +927 -109
  216. package/dist/server/data.mjs +939 -110
  217. package/dist/server/index.mjs +513 -169
  218. package/dist/server/next.mjs +2874 -1195
  219. package/dist/server/page-converter.mjs +420 -79
  220. package/dist/server/prebuild.mjs +1 -1
  221. package/dist/server/rendering/server.mjs +3071 -1289
  222. package/dist/server/rendering.mjs +3169 -1350
  223. package/dist/server/routing.mjs +1085 -159
  224. package/dist/server/server.mjs +1042 -291
  225. package/dist/server/theme-bridge.mjs +1658 -137
  226. package/dist/server/theme.mjs +6 -4
  227. package/dist/styles/index.css +186 -65
  228. package/package.json +2 -1
@@ -2,7 +2,7 @@ import type { Theme } from '../../blocks/src/index';
2
2
  import type { SiteVerticalBookingConfig } from '../../core/src/index';
3
3
  import { z } from 'zod';
4
4
  import type { AiGenerateSiteEntityType, AiGenerateSitePrimaryCta, AiGenerateSiteRequest } from './siteGeneration';
5
- import type { AppointmentSetupTargetStep } from './appointmentSetup';
5
+ import type { AppointmentSetupReadiness, AppointmentSetupTargetStep } from './appointmentSetup';
6
6
  import type { MacadamiaOnboardingLogoAnalysis, MacadamiaOnboardingSurfaceData, PublicOnboardingSurfaceId } from './onboarding/surfaceData';
7
7
  export type * from './onboarding/surfaceData';
8
8
  /**
@@ -89,8 +89,8 @@ export type AiBrandGuidelinesGenerateResponse = {
89
89
  stats: SiteContentSamplingStats;
90
90
  };
91
91
  };
92
- export type LaunchRequirementId = 'confirm_email' | 'review_generated_site' | 'configure_appointments' | 'configure_events' | 'configure_courses' | 'connect_payments' | 'connect_custom_domain';
93
- export type LaunchRequirementPackId = 'core' | 'bookings_appointments' | 'bookings_events' | 'bookings_courses' | 'payments' | 'domain';
92
+ export type LaunchRequirementId = 'confirm_email' | 'review_generated_site' | 'configure_appointments' | 'configure_events' | 'configure_courses' | 'connect_payments' | 'connect_custom_domain' | 'add_first_offering' | 'add_cover_image' | 'add_public_contact';
93
+ export type LaunchRequirementPackId = 'core' | 'bookings_appointments' | 'bookings_events' | 'bookings_courses' | 'payments' | 'domain' | 'offerings' | 'presence';
94
94
  export type LaunchRequirementPriority = 'required' | 'recommended' | 'optional';
95
95
  export type LaunchRequirementState = 'complete' | 'pending';
96
96
  export type LaunchRequirementOwner = 'admin' | 'editor' | 'either';
@@ -162,23 +162,36 @@ export type LaunchAppointmentsPackState = {
162
162
  kind: 'disabled';
163
163
  } | {
164
164
  kind: 'ready';
165
- } | {
165
+ }
166
+ /** `missing` is the first gap in setup, so copy can name it. */
167
+ | {
166
168
  kind: 'pending_setup';
169
+ missing: LaunchAppointmentsSetupGap;
167
170
  targetStep: AppointmentSetupTargetStep;
168
171
  };
172
+ export type LaunchAppointmentsSetupGap = Exclude<AppointmentSetupReadiness['kind'], 'not_applicable' | 'bookable'>;
173
+ /** The event offering kinds a launch item can name (courses have their own item). */
174
+ export declare const LAUNCH_EVENT_OFFERING_KINDS: readonly ["classes", "workshops", "retreats", "performances"];
175
+ export type LaunchEventOfferingKind = (typeof LAUNCH_EVENT_OFFERING_KINDS)[number];
169
176
  export type LaunchEventsPackState = {
170
177
  kind: 'disabled';
171
178
  } | {
172
179
  kind: 'ready';
173
- } | {
180
+ }
181
+ /** `offeredKinds`: event kinds recorded at onboarding, in wizard order; empty when none. */
182
+ | {
174
183
  kind: 'pending_setup';
184
+ offeredKinds: readonly LaunchEventOfferingKind[];
175
185
  };
186
+ /** Keyed on whether a Stripe account exists: `connected_pending` has one that can't take payments yet. */
176
187
  export type LaunchPaymentsPackState = {
177
188
  kind: 'not_applicable';
178
189
  } | {
179
190
  kind: 'ready';
180
191
  } | {
181
- kind: 'pending_setup';
192
+ kind: 'not_connected';
193
+ } | {
194
+ kind: 'connected_pending';
182
195
  };
183
196
  export type LaunchCoursesPackState = {
184
197
  kind: 'not_applicable';
@@ -187,6 +200,24 @@ export type LaunchCoursesPackState = {
187
200
  } | {
188
201
  kind: 'pending_setup';
189
202
  };
203
+ /** Booking pages only: whether the site has anything people could book. */
204
+ export type LaunchOfferingsPackState = {
205
+ kind: 'has_offerings';
206
+ } | {
207
+ kind: 'none';
208
+ };
209
+ /** Booking pages only. */
210
+ export type LaunchCoverImagePackState = {
211
+ kind: 'set';
212
+ } | {
213
+ kind: 'missing';
214
+ };
215
+ /** Booking pages only: whether any contact method is published. */
216
+ export type LaunchPublicContactPackState = {
217
+ kind: 'published';
218
+ } | {
219
+ kind: 'missing';
220
+ };
190
221
  export type LaunchCustomDomainPackState = {
191
222
  kind: 'connected';
192
223
  domainIds: readonly string[];
@@ -196,11 +227,28 @@ export type LaunchCustomDomainPackState = {
196
227
  } | {
197
228
  kind: 'pending_setup';
198
229
  };
199
- export type LaunchRequirement = {
200
- id: LaunchRequirementId;
230
+ /**
231
+ * The exact gap behind a pending requirement, so a presentation can name it
232
+ * ("Set your hours", "Finish setting up Stripe") without re-deriving facts.
233
+ */
234
+ export type LaunchAppointmentsGapDetail = {
235
+ kind: 'appointments_gap';
236
+ missing: LaunchAppointmentsSetupGap;
237
+ };
238
+ export type LaunchPaymentsGapDetail = {
239
+ kind: 'payments_gap';
240
+ stage: 'not_connected' | 'connected_pending';
241
+ };
242
+ export type LaunchEventKindsDetail = {
243
+ kind: 'event_kinds';
244
+ offeredKinds: readonly LaunchEventOfferingKind[];
245
+ };
246
+ export type LaunchRequirementDetail = LaunchAppointmentsGapDetail | LaunchPaymentsGapDetail | LaunchEventKindsDetail;
247
+ /** Requirements that always carry a `detail` while pending. */
248
+ export type LaunchDetailedRequirementId = Extract<LaunchRequirementId, 'configure_appointments' | 'connect_payments' | 'configure_events'>;
249
+ type LaunchRequirementFields = {
201
250
  packId: LaunchRequirementPackId;
202
251
  priority: LaunchRequirementPriority;
203
- state: LaunchRequirementState;
204
252
  owner: LaunchRequirementOwner;
205
253
  title: string;
206
254
  description: string;
@@ -208,6 +256,24 @@ export type LaunchRequirement = {
208
256
  secondaryAction?: LaunchRequirementAction | null;
209
257
  evidence: LaunchRequirementEvidence;
210
258
  };
259
+ type LaunchPendingWithDetail<Id extends LaunchDetailedRequirementId, Detail> = LaunchRequirementFields & {
260
+ id: Id;
261
+ state: 'pending';
262
+ detail: Detail;
263
+ };
264
+ /**
265
+ * One launch requirement. The three detailed items must carry their gap
266
+ * while pending, so a presentation never has to guess it.
267
+ */
268
+ export type LaunchRequirement = LaunchPendingWithDetail<'configure_appointments', LaunchAppointmentsGapDetail> | LaunchPendingWithDetail<'connect_payments', LaunchPaymentsGapDetail> | LaunchPendingWithDetail<'configure_events', LaunchEventKindsDetail> | (LaunchRequirementFields & {
269
+ id: LaunchDetailedRequirementId;
270
+ state: 'complete';
271
+ detail?: never;
272
+ }) | (LaunchRequirementFields & {
273
+ id: Exclude<LaunchRequirementId, LaunchDetailedRequirementId>;
274
+ state: LaunchRequirementState;
275
+ detail?: never;
276
+ });
211
277
  export type GoLiveDecision = {
212
278
  kind: 'allowed';
213
279
  overriddenRequirementIds: LaunchRequirementId[];
@@ -23,7 +23,7 @@ export type SdkUpsertNavigationItemInput = Readonly<{
23
23
  * Site platform endpoints cover admin/configuration surfaces: redirects, webhooks,
24
24
  * keys, SDK management, content-type CRUD, backup flows, and site-level admin tools.
25
25
  */
26
- export type SitePlatformAPIEndpoints = {
26
+ export type SitePlatformAPIEndpoints = import('./sdkEventLifecycle').SdkEventLifecycleAPIEndpoints & {
27
27
  listGscPropertiesAdmin: APIEndpoint<never, never, ListGscPropertiesAdminResponse>;
28
28
  getPublicChallenge: APIEndpoint<never, never, string>;
29
29
  checkRedirect: APIEndpoint<never, CheckRedirectQuery, CheckRedirectResponse>;
@@ -12,6 +12,7 @@ export type * from './bookingAdjustments';
12
12
  export type * from './bookingConfig';
13
13
  export type * from './event-listing-destination';
14
14
  export type * from './bookingManagementEndpoints';
15
+ export type * from './newsletterCampaignCommandEndpoints';
15
16
  export type * from './bookingOperations';
16
17
  export { APPOINTMENT_HISTORY_STATUS_VALUES } from './bookingOperations';
17
18
  export type * from './bookingRecords';
@@ -28,6 +29,7 @@ export type * from './sdk-event-payment-terms';
28
29
  export type * from './siteInfrastructure';
29
30
  export type * from './siteGeneration';
30
31
  export type * from './siteManagementEndpoints';
32
+ export type * from './siteAddressEndpoints';
31
33
  export type * from './siteOnboarding';
32
34
  export type * from './siteOperations';
33
35
  export type * from './siteAssets';
@@ -59,18 +61,23 @@ export type { AdminProfileRole, AdminRoleMutationResponse, RevokeAdminRoleReques
59
61
  import type { AccountAPIEndpoints } from './accountEndpoints';
60
62
  export type * from './accountEndpoints';
61
63
  import type { AiAndLaunchReadinessAPIEndpointDefinitions, AiAPIEndpointName, AiAPIEndpoints, LaunchReadinessAPIEndpointName, LaunchReadinessAPIEndpoints } from './aiEndpoints';
64
+ import type { AppointmentServiceCategoryAPIEndpoints } from './appointmentServiceCategoryEndpoints';
62
65
  import type { BookingManagementAPIEndpoints } from './bookingManagementEndpoints';
66
+ import type { NewsletterCampaignCommandAPIEndpoints } from './newsletterCampaignCommandEndpoints';
63
67
  import type { CommercePortalAPIEndpoints } from './commercePortalEndpoints';
64
68
  import type { MailchimpIntegrationAPIEndpoints } from './mailchimpIntegration';
65
69
  import type { MailingListIntegrationAPIEndpoints } from './mailingListIntegration';
66
70
  import type { PublicExperienceAPIEndpoints } from './publicExperienceEndpoints';
67
71
  import type { SeoEndpointDefinitions } from './seoEndpoints';
68
72
  import type { SiteManagementAPIEndpoints } from './siteManagementEndpoints';
73
+ import type { SiteAddressAPIEndpoints } from './siteAddressEndpoints';
69
74
  import type { SitePlatformAPIEndpoints } from './sitePlatformEndpoints';
75
+ import type { SdkPageDesignAPIEndpoints } from './sdkPageDesign';
70
76
  import type { SiteRuntimeAPIEndpoints } from './siteRuntimeEndpoints';
77
+ import type { ClientErrorReportingAPIEndpoints } from './clientErrorReporting';
71
78
  type TableName = keyof DbDatabase['public']['Tables'];
72
79
  export type DTOType<K extends TableName> = Partial<CamelizeKeys<DbRow<K>>>;
73
- type APIEndpointsMonolith = AiAndLaunchReadinessAPIEndpointDefinitions & AccountAPIEndpoints & SeoEndpointDefinitions & SiteManagementAPIEndpoints & PublicExperienceAPIEndpoints & SiteRuntimeAPIEndpoints & SitePlatformAPIEndpoints & BookingManagementAPIEndpoints & CommercePortalAPIEndpoints & MailchimpIntegrationAPIEndpoints & MailingListIntegrationAPIEndpoints;
80
+ type APIEndpointsMonolith = AiAndLaunchReadinessAPIEndpointDefinitions & AccountAPIEndpoints & SeoEndpointDefinitions & SiteManagementAPIEndpoints & SiteAddressAPIEndpoints & PublicExperienceAPIEndpoints & SiteRuntimeAPIEndpoints & SitePlatformAPIEndpoints & SdkPageDesignAPIEndpoints & BookingManagementAPIEndpoints & NewsletterCampaignCommandAPIEndpoints & AppointmentServiceCategoryAPIEndpoints & CommercePortalAPIEndpoints & MailchimpIntegrationAPIEndpoints & MailingListIntegrationAPIEndpoints & ClientErrorReportingAPIEndpoints;
74
81
  type ComposeEndpointMaps<Maps extends readonly object[], Acc extends object = {}> = Maps extends readonly [
75
82
  infer Head extends object,
76
83
  ...infer Tail extends readonly object[]
@@ -147,3 +147,17 @@ export type UpdateEventSeriesRegistrationRequest = {
147
147
  export type UpdateEventSeriesRegistrationResponse = {
148
148
  enrollment: EventSeriesRegistrationRecord;
149
149
  };
150
+ /**
151
+ * Somebody on the team filling in or editing the answers of one person on a
152
+ * booking. A booking can hold several places and each person is asked the
153
+ * questions separately, so the person is named rather than assumed.
154
+ */
155
+ export type SaveEventSeriesRegistrationAnswersRequest = {
156
+ requirementId: string;
157
+ participantParticipationId: string;
158
+ answers: Record<string, unknown>;
159
+ };
160
+ export type SaveEventSeriesRegistrationAnswersResponse = {
161
+ savedAt: string;
162
+ filledInByName: string;
163
+ };
@@ -4,20 +4,20 @@ import type { PageOutline } from './structure/schema';
4
4
  import type { SdkCustomBlock } from './system/manifest/schema';
5
5
  import type { RouteMap } from './system/transforms';
6
6
  import { type OverrideOnlyRenderMode, type ThemedRenderMode, type TokensOnlyRenderMode } from './pageRenderingMode';
7
- import { type PageBoundaryWrapper, type PageRuntimeBoundary } from './pageRendererBoundaries';
7
+ import { type PageJoinRenderer, type PageRuntimeJoin } from './pageRendererBoundaries';
8
8
  import { type BlockOverrides, type PageRendererDataContext, type SdkConfigForRenderer } from './pageRendererContracts';
9
9
  import { type RenderablePageOutline } from './pageRenderAdmission';
10
10
  export type { PageBlockRenderAdmissionError, RenderablePageBlock, RenderablePageOutline, } from './pageRenderAdmission';
11
11
  export type { BlockOverrideComponent, BlockOverrideProps, BlockOverrides, EntrySubrouteContextData, OccurrenceContextData, SdkConfigForRenderer, } from './pageRendererContracts';
12
12
  export { MissingBlockOverrideError } from './pageRenderingMode';
13
- export type { PageBlockPosition, PageRuntimeBoundary, } from './pageRendererBoundaries';
13
+ export type { PageBlockPosition, PageJoinRenderer, PageJoinSlot, PageRuntimeJoin, RenderedJoin, } from './pageRendererBoundaries';
14
14
  type PageRendererCommonProps<TPage> = {
15
15
  page: TPage | null;
16
- runtimeBoundaries?: readonly PageRuntimeBoundary[];
16
+ runtimeJoins?: readonly PageRuntimeJoin[];
17
17
  dataContext?: PageRendererDataContext;
18
18
  routeMap?: RouteMap;
19
19
  wrapBlock?: (blockId: string, rendered: React.ReactNode) => React.ReactNode;
20
- wrapBoundary?: PageBoundaryWrapper;
20
+ renderJoin?: PageJoinRenderer;
21
21
  registry?: ResolverContext['registry'];
22
22
  blockOverrides?: BlockOverrides;
23
23
  sdkConfig?: SdkConfigForRenderer | null;
@@ -6,8 +6,8 @@
6
6
  */
7
7
  export type { BindingSource, BindingDescriptor, BindingInput, BindingMap, BindingContext, BindingPath, BindingTransformName, KnownBindingTransformName, FieldBindingDescriptor, MetaBindingDescriptor, LiteralBindingDescriptor, TransformBindingDescriptor, FallbackBindingDescriptor, } from './types';
8
8
  export { TRANSFORMS, BINDING_SOURCES } from './types';
9
- export { asDesignBlockId, asContentTemplateDesignBlockId, asLayoutVariantKey, buildPageDesignEditorReadModel, compileContentTemplateRuntimeFields, parsePageDesignIntent, surfaceResolutionContextFromTheme, designRuntimeRulesForTheme, type DesignBlockId, parseContentTemplateDesignIntent, type CompiledBlockRuntimeFields, type CompiledBoundaryRuntime, type LayoutVariantKey, type PageDesignEditorBlockInput, type PageDesignIntent, type SurfaceResolutionContext, applyBlockContentVariantPolicy, deriveSiteStyleBlockPolicy, } from '../../../theme-core/src/site-styles/index';
10
- export { applyCompiledRuntimeFieldsToContent, buildEditorModelRuntimeBoundaries, buildEditorModelRuntimeFieldsByBlockId, compileEditorModelRuntime, retargetCompiledBoundaryRuntimeForContentAdjacency, retargetCompiledRuntimeFieldsForContentAdjacency, } from '../../../theme-core/src/site-styles/previewCompiler';
9
+ export { asDesignBlockId, asContentTemplateDesignBlockId, asLayoutVariantKey, buildPageDesignEditorReadModel, compileContentTemplateRuntimeFields, parsePageDesignIntent, surfaceResolutionContextFromTheme, designRuntimeRulesForTheme, type DesignBlockId, parseContentTemplateDesignIntent, type CompiledBlockRuntimeFields, type PageRuntimeJoin, type LayoutVariantKey, type PageDesignEditorBlockInput, type PageDesignIntent, type SurfaceResolutionContext, applyBlockContentVariantPolicy, deriveSiteStyleBlockPolicy, } from '../../../theme-core/src/site-styles/index';
10
+ export { applyCompiledRuntimeFieldsToContent, buildEditorModelRuntimeFieldsByBlockId, compileEditorModelRuntime, } from '../../../theme-core/src/site-styles/previewCompiler';
11
11
  export { blockDesignMetadataMapFromDefinitions } from '../system/designCapabilities';
12
12
  export { systemBlockDefinitions } from '../system/blocks';
13
13
  import type { BindingContext, BindingDescriptor, BindingInput, BindingMap, BindingPath, FieldBindingDescriptor, FallbackBindingDescriptor, KnownBindingTransformName, LiteralBindingDescriptor, MetaBindingDescriptor, TransformBindingDescriptor } from './types';
@@ -87,6 +87,12 @@ export declare const proofBlockIslandCodecs: {
87
87
  agreement: import("../../../core/src/index").RichTextDoc;
88
88
  checkboxLabel: string;
89
89
  }>;
90
+ categoryId?: string | null;
91
+ }>[];
92
+ serviceCategories?: readonly Readonly<{
93
+ id: string;
94
+ name: string;
95
+ description: string | null;
90
96
  }>[];
91
97
  spamProtectionEnabled?: boolean;
92
98
  }>;
@@ -169,6 +175,12 @@ export declare const proofBlockIslandCodecs: {
169
175
  agreement: import("../../../core/src/index").RichTextDoc;
170
176
  checkboxLabel: string;
171
177
  }>;
178
+ categoryId?: string | null;
179
+ }>[];
180
+ serviceCategories?: readonly Readonly<{
181
+ id: string;
182
+ name: string;
183
+ description: string | null;
172
184
  }>[];
173
185
  spamProtectionEnabled?: boolean;
174
186
  }>;
@@ -1037,6 +1049,12 @@ export declare const runtimeIslandCodecs: {
1037
1049
  agreement: import("../../../core/src/index").RichTextDoc;
1038
1050
  checkboxLabel: string;
1039
1051
  }>;
1052
+ categoryId?: string | null;
1053
+ }>[];
1054
+ serviceCategories?: readonly Readonly<{
1055
+ id: string;
1056
+ name: string;
1057
+ description: string | null;
1040
1058
  }>[];
1041
1059
  spamProtectionEnabled?: boolean;
1042
1060
  }>;
@@ -1119,6 +1137,12 @@ export declare const runtimeIslandCodecs: {
1119
1137
  agreement: import("../../../core/src/index").RichTextDoc;
1120
1138
  checkboxLabel: string;
1121
1139
  }>;
1140
+ categoryId?: string | null;
1141
+ }>[];
1142
+ serviceCategories?: readonly Readonly<{
1143
+ id: string;
1144
+ name: string;
1145
+ description: string | null;
1122
1146
  }>[];
1123
1147
  spamProtectionEnabled?: boolean;
1124
1148
  }>;
@@ -2,8 +2,10 @@ export { default as PageRenderer, EditorPageRenderer } from './PageRenderer';
2
2
  export type { RenderAudience as PageRenderAudience } from './pageRenderAudience';
3
3
  export { createCustomBlockRegistry, mergeBlockDescriptorsWithRegistry, planCustomBlockRegistryResolution, transformToBlockDescriptor, } from './customBlockRegistry';
4
4
  export type { CustomBlockConflictReason, CustomBlockManifestSource, CustomBlockRegistry, CustomBlockRegistryConflict, CustomBlockRegistryEntry, CustomBlockRegistryResolutionPlan, CustomBlockSourcePolicy, ResolvedCustomBlockManifest, SdkConfigForBlockPicker, } from './customBlockRegistry';
5
- export type { BlockOverrideComponent, BlockOverrideProps, BlockOverrides, EntrySubrouteContextData, EditorPageRendererProps, PageBlockRenderAdmissionError, PageRendererProps, RenderablePageBlock, RenderablePageOutline, OccurrenceContextData, PageBlockPosition, PageRuntimeBoundary, SdkConfigForRenderer, } from './PageRenderer';
5
+ export type { BlockOverrideComponent, BlockOverrideProps, BlockOverrides, EntrySubrouteContextData, EditorPageRendererProps, PageBlockRenderAdmissionError, PageRendererProps, RenderablePageBlock, RenderablePageOutline, OccurrenceContextData, PageBlockPosition, PageJoinRenderer, PageJoinSlot, PageRuntimeJoin, RenderedJoin, SdkConfigForRenderer, } from './PageRenderer';
6
6
  export { MissingBlockOverrideError } from './pageRenderingMode';
7
+ export { readPublishedBlockPlacement } from './pageRenderAdmission';
8
+ export type { PublishedBlockPlacement } from './pageRenderAdmission';
7
9
  export * from './subroutes';
8
10
  export * from './structure/schema';
9
11
  export { BLOCK_BUTTON_ROLES, BLOCK_BUTTON_ROLE_OPTIONS, blockButtonRoleSchema, isBlockButtonRole, type BlockButtonRole, } from './system/constants/buttonRoles';
@@ -6,12 +6,20 @@ export type PageBlockRenderAdmissionError = Readonly<{
6
6
  }> | Readonly<{
7
7
  kind: 'manifest_unavailable';
8
8
  }>;
9
+ export type PublishedBlockPlacement = Readonly<{
10
+ id: string;
11
+ content: Record<string, unknown>;
12
+ }>;
13
+ /** Pair a published version with the content it authorises at the render boundary. */
14
+ export declare function readPublishedBlockPlacement(id: string | null | undefined, content: Record<string, unknown> | null | undefined): PublishedBlockPlacement | null;
9
15
  export type RenderablePageBlock = Readonly<{
10
16
  id: Block['id'];
11
17
  kind: Block['kind'];
12
18
  purpose: Block['purpose'];
13
19
  bindings?: Block['bindings'];
14
20
  contentVersionId?: string | null;
21
+ draftContentId?: string | null;
22
+ publishedPlacement?: PublishedBlockPlacement | null;
15
23
  admission: Readonly<{
16
24
  kind: 'renderable';
17
25
  content: RenderableManifestContent;
@@ -34,6 +42,8 @@ export type PresentationAdmission = Readonly<{
34
42
  export type PresentationBlock = Block & Readonly<{
35
43
  presentationAdmission: PresentationAdmission;
36
44
  contentVersionId?: string | null;
45
+ draftContentId?: string | null;
46
+ publishedPlacement?: PublishedBlockPlacement | null;
37
47
  }>;
38
48
  export type PresentationPageOutline = Omit<PageOutline, 'blocks'> & Readonly<{
39
49
  blocks: readonly PresentationBlock[];
@@ -0,0 +1,68 @@
1
+ import { type BoundaryLayout, type BoundaryOutcome, type DecorativeTransitionIntent, type DesignBoundaryId, type PageRuntimeJoin as ThemeCorePageRuntimeJoin } from '../../theme-core/src/site-styles/index';
2
+ /**
3
+ * A break between two adjacent blocks as the server sends it: intent only.
4
+ * Everything visual is decided here, from the content that finally renders
5
+ * (issue 1422).
6
+ */
7
+ export type PageRuntimeJoin = ThemeCorePageRuntimeJoin<string>;
8
+ /**
9
+ * A join after composition: its treatment plus whether and how it draws. The
10
+ * outcome comes from the same composition as the painted markup, so the
11
+ * editor's "won't show here" note can never disagree with the page.
12
+ */
13
+ export type RenderedJoin = Readonly<{
14
+ boundaryId: DesignBoundaryId;
15
+ previousBlockId: string;
16
+ nextBlockId: string;
17
+ treatment: DecorativeTransitionIntent;
18
+ outcome: BoundaryOutcome;
19
+ }>;
20
+ /**
21
+ * One adjacent pair of surviving blocks. `join` is null when the pair has no
22
+ * break at all; a join that exists but does not draw carries a not-shown
23
+ * outcome instead.
24
+ */
25
+ export type PageJoinSlot = Readonly<{
26
+ previousBlockId: string;
27
+ nextBlockId: string;
28
+ join: RenderedJoin | null;
29
+ }>;
30
+ /** The survivor facts composition needs: its id, kind and final content. */
31
+ export type JoinSurvivor = Readonly<{
32
+ id: string | null | undefined;
33
+ kind: string;
34
+ content: Record<string, unknown>;
35
+ }>;
36
+ /**
37
+ * Re-points joins across omitted blocks. Pure over joins.
38
+ *
39
+ * Joins are keyed by adjacent block-id pairs, so dropping B from [A, B, C]
40
+ * removes the A→C join as well as B's own, because no A→C join was ever
41
+ * resolved. For each surviving pair the original join is kept when the pair
42
+ * was already adjacent. Across a gap, the treatment comes from the join
43
+ * entering the omitted run (A→first omitted), falling back to the one leaving
44
+ * it (last omitted→C). Nothing visual is carried: the survivors are composed
45
+ * from their own content afterwards.
46
+ *
47
+ * `survivors` are compared by identity against `originalBlocks`.
48
+ */
49
+ export declare function retargetJoinsAcrossOmissions<TBlock extends Readonly<{
50
+ id?: string | null;
51
+ }>>(input: Readonly<{
52
+ joins: readonly PageRuntimeJoin[];
53
+ originalBlocks: readonly TBlock[];
54
+ survivingBlocks: ReadonlySet<TBlock>;
55
+ }>): readonly PageRuntimeJoin[];
56
+ /**
57
+ * The single composition site. For every adjacent pair of survivors with ids,
58
+ * finds its join and composes it from both survivors' final content: what
59
+ * each paints with and the frame each draws.
60
+ */
61
+ export declare function composePageJoins(input: Readonly<{
62
+ joins: readonly PageRuntimeJoin[];
63
+ survivors: readonly JoinSurvivor[];
64
+ }>): readonly PageJoinSlot[];
65
+ /** Placement, reserves and paint for a join that draws; null otherwise. */
66
+ export declare function renderedJoinLayout(join: RenderedJoin | null): BoundaryLayout | null;
67
+ /** Slot lookup key for an adjacent pair, in the one boundary-id scheme. */
68
+ export declare function joinSlotKey(previousBlockId: string, nextBlockId: string): DesignBoundaryId;
@@ -1,7 +1,7 @@
1
1
  import { getBlockDefinition } from './system';
2
2
  import type { SdkCustomBlock } from './system/manifest/schema';
3
3
  import type { PresentationBlock, PresentationPageOutline } from './pageRenderAdmission';
4
- import { type PageRuntimeBoundary } from './pageRendererBoundaries';
4
+ import { type PageRuntimeJoin } from './pageRenderJoins';
5
5
  import type { BlockOverrideComponent, BlockOverrides, SdkConfigForRenderer } from './pageRendererContracts';
6
6
  import type { NotRenderableReason, RenderAudience } from './pageRenderAudience';
7
7
  type ResolvedBlockDefinition = NonNullable<ReturnType<typeof getBlockDefinition>>;
@@ -70,12 +70,17 @@ export type OmittedBlockDebugFields = Readonly<{
70
70
  export type PageRenderPlan = Readonly<{
71
71
  entries: readonly PageBlockRenderPlanEntry[];
72
72
  omitted: readonly OmittedPageBlock[];
73
- runtimeBoundaries: readonly PageRuntimeBoundary[] | undefined;
73
+ /**
74
+ * Joins between the plan's entries, re-pointed across plan-time omissions.
75
+ * A caller that sent no joins gets an empty list: every pair still gets a
76
+ * join slot, with no treatment.
77
+ */
78
+ runtimeJoins: readonly PageRuntimeJoin[];
74
79
  }>;
75
80
  export type BuildPageRenderPlanInput = Readonly<{
76
81
  page: PresentationPageOutline;
77
82
  audience: RenderAudience;
78
- runtimeBoundaries: readonly PageRuntimeBoundary[] | undefined;
83
+ runtimeJoins: readonly PageRuntimeJoin[] | undefined;
79
84
  previewStage: 'published' | 'preview';
80
85
  sdkConfig: SdkConfigForRenderer | null | undefined;
81
86
  customBlocks: readonly SdkCustomBlock[] | undefined;
@@ -89,28 +94,4 @@ export type BuildPageRenderPlanInput = Readonly<{
89
94
  * runs inside a `useMemo` whose recomputation React makes no promises about.
90
95
  */
91
96
  export declare function buildPageRenderPlan(input: BuildPageRenderPlanInput): PageRenderPlan;
92
- /**
93
- * Re-points section boundaries across omitted blocks.
94
- *
95
- * Boundaries are keyed by adjacent block-id *pairs*, so dropping B from
96
- * [A, B, C] does not merely remove B's boundaries — it removes the boundary
97
- * between the survivors, because no `A→C` key was ever compiled.
98
- *
99
- * Per decision D2 the treatment for a merged gap comes from the boundary
100
- * entering the omitted run (`A→firstOmitted`), falling back to the one leaving
101
- * it (`lastOmitted→C`). The destination surface is a separate question: only
102
- * the exiting boundary knows what C looks like, so the merged boundary ends on
103
- * that endpoint rather than on the omitted block's. In the exiting-only
104
- * fallback the origin remains an approximation: `from` is the omitted block's
105
- * surface, because no compiled boundary carries A's. The hosted path no longer
106
- * needs this at all (site-renderer admits blocks before compiling boundaries);
107
- * it remains the safety net for an SDK whose compiled boundaries predate an
108
- * omission.
109
- */
110
- export declare function retargetBoundariesAcrossOmissions(input: Readonly<{
111
- boundaries: readonly PageRuntimeBoundary[] | undefined;
112
- originalBlocks: readonly PresentationBlock[];
113
- survivingBlocks: ReadonlySet<PresentationBlock>;
114
- previewStage: 'published' | 'preview';
115
- }>): readonly PageRuntimeBoundary[] | undefined;
116
97
  export {};
@@ -4,9 +4,9 @@ import type { ResolveImageUrlContext } from './system/runtime/nodes/media';
4
4
  import { type PageThemeResources } from './pageRenderingMode';
5
5
  import type { PresentationBlock } from './pageRenderAdmission';
6
6
  import type { RenderAudience } from './pageRenderAudience';
7
- import type { PageRuntimeBoundary } from './pageRendererBoundaries';
7
+ import { type PageJoinSlot } from './pageRenderJoins';
8
8
  import type { BlockOverrideProps, PageRendererDataContext } from './pageRendererContracts';
9
- import { type PageBlockRenderPlanEntry, type PageRenderPlan } from './pageRenderPlan';
9
+ import type { PageBlockRenderPlanEntry, PageRenderPlan } from './pageRenderPlan';
10
10
  /**
11
11
  * What preparing a block produced.
12
12
  *
@@ -46,7 +46,11 @@ export type PageRenderPreparation = Readonly<{
46
46
  * has to replay the overrides-only guard over the entry's own `override`.
47
47
  */
48
48
  constructionFailures: readonly PageBlockRenderPlanEntry[];
49
- runtimeBoundaries: readonly PageRuntimeBoundary[] | undefined;
49
+ /**
50
+ * One slot per adjacent pair of surviving entries, composed from their final
51
+ * content after both kinds of omission.
52
+ */
53
+ joins: readonly PageJoinSlot[];
50
54
  }>;
51
55
  export type PreparePageRenderInput = Readonly<{
52
56
  plan: PageRenderPlan;
@@ -55,7 +59,6 @@ export type PreparePageRenderInput = Readonly<{
55
59
  routeMap: RouteMap | undefined;
56
60
  themeResources: PageThemeResources;
57
61
  imageResolveContext: ResolveImageUrlContext;
58
- previewStage: 'published' | 'preview';
59
62
  }>;
60
63
  /**
61
64
  * Stage two of the render plan.
@@ -1,31 +1,48 @@
1
1
  import React from 'react';
2
- import type { CompiledBoundaryRuntime } from '../../theme-core/src/site-styles/index';
3
- import type { Block } from './structure/schema';
2
+ import type { BoundaryLayout } from '../../theme-core/src/site-styles/index';
3
+ import { type PageJoinSlot, type RenderedJoin } from './pageRenderJoins';
4
4
  export type PageBlockPosition = 'only' | 'first' | 'middle' | 'last';
5
- export type PageRuntimeBoundary = CompiledBoundaryRuntime<string>;
6
- export type PageBoundaryWrapper = (boundary: PageRuntimeBoundary, rendered: React.ReactNode) => React.ReactNode;
7
- export declare const boundaryKey: (previousBlockId: string, nextBlockId: string) => string;
8
- export declare function isSiteStyleTransitionStyleGroup(value: string | undefined): value is string;
9
- export declare function boundaryMapForAdjacentBlockIds(boundaries: readonly PageRuntimeBoundary[]): ReadonlyMap<string, PageRuntimeBoundary>;
10
- export declare function boundaryBetweenBlocks(previousBlock: Block | null, nextBlock: Block | null, boundaries: ReadonlyMap<string, PageRuntimeBoundary>): PageRuntimeBoundary | null;
11
- export declare function renderBoundaryAfterBlock(input: Readonly<{
12
- block: Block;
13
- nextBlock: Block | null;
5
+ export type { PageJoinSlot, PageRuntimeJoin, RenderedJoin, } from './pageRenderJoins';
6
+ /**
7
+ * Called once for every adjacent pair of surviving blocks, including pairs
8
+ * with no join and joins that do not draw. What it returns is rendered at the
9
+ * join, after any painted boundary element. The editor mounts its section
10
+ * break control here, so the control exists even when nothing is painted.
11
+ */
12
+ export type PageJoinRenderer = (input: Readonly<{
13
+ previousBlockId: string;
14
+ nextBlockId: string;
15
+ join: RenderedJoin | null;
16
+ }>) => React.ReactNode;
17
+ export declare function joinSlotsByPair(slots: readonly PageJoinSlot[]): ReadonlyMap<string, PageJoinSlot>;
18
+ export declare function joinSlotBetween(previousBlockId: string | null | undefined, nextBlockId: string | null | undefined, slots: ReadonlyMap<string, PageJoinSlot>): PageJoinSlot | null;
19
+ /**
20
+ * The markup at one join: the painted boundary element when the join draws,
21
+ * then whatever `renderJoin` adds. Null when there is nothing to render.
22
+ */
23
+ export declare function renderJoinSlot(input: Readonly<{
24
+ slot: PageJoinSlot | null;
14
25
  blockKey: string;
15
- boundaryByAdjacentBlockIds: ReadonlyMap<string, PageRuntimeBoundary>;
16
- wrapBoundary?: PageBoundaryWrapper;
26
+ renderJoin: PageJoinRenderer | undefined;
17
27
  }>): React.ReactNode;
18
- type TransitionCssVarsStyle = React.CSSProperties & {
19
- '--site-style-transition-from'?: string;
20
- '--site-style-transition-to'?: string;
28
+ type BoundaryStyle = React.CSSProperties & {
29
+ '--boundary-shape-paint'?: string;
30
+ '--boundary-band-paint'?: string;
21
31
  '--site-style-boundary-before-reserve'?: string;
22
32
  '--site-style-boundary-after-reserve'?: string;
23
33
  };
24
- export declare function boundaryReserveCssVarsStyle(input: Readonly<{
25
- before: PageRuntimeBoundary | null;
26
- after: PageRuntimeBoundary | null;
27
- }>): TransitionCssVarsStyle | undefined;
28
- export declare function transitionCssVarsStyle(content: Record<string, unknown>): TransitionCssVarsStyle | undefined;
29
- export declare function mergeStyleObjects(left: TransitionCssVarsStyle | undefined, right: TransitionCssVarsStyle | undefined): TransitionCssVarsStyle | undefined;
34
+ /**
35
+ * Reserve attributes and variables for a block wrapper, from the joins on
36
+ * either side. A join's `before` reserve sits inside its previous section, so
37
+ * it pads the bottom of the block above the join; its `after` reserve pads the
38
+ * top of the block below. Joins that do not draw reserve nothing.
39
+ */
40
+ export declare function blockBoundaryReserves(input: Readonly<{
41
+ before: PageJoinSlot | null;
42
+ after: PageJoinSlot | null;
43
+ }>): Readonly<{
44
+ topPlacement: BoundaryLayout['placement'] | undefined;
45
+ bottomPlacement: BoundaryLayout['placement'] | undefined;
46
+ style: BoundaryStyle | undefined;
47
+ }>;
30
48
  export declare function pageBlockPosition(index: number, blockCount: number): PageBlockPosition;
31
- export {};
@@ -7,6 +7,7 @@ import type { RouteMap } from './system/transforms';
7
7
  import type { BookingOfferingPresetSummary } from './system/blocks/offerings-preview/model';
8
8
  import type { BlockLoaderFailures } from './system/data/types';
9
9
  import type { BrowserReadAuthority } from './system/runtime/api/types';
10
+ import type { NewsletterBlockSubmission } from './system/runtime/nodes/newsletter-form.block-submission';
10
11
  /**
11
12
  * Occurrence context for event pages.
12
13
  * Passed through to blocks that need occurrence information (e.g., event-registration).
@@ -76,6 +77,7 @@ export type BlockOverrideProps<TContent = Record<string, unknown>> = {
76
77
  blockId: string | null;
77
78
  /** Exact content snapshot rendered for this block. */
78
79
  contentVersionId?: string | null;
80
+ newsletterBlockSubmission?: NewsletterBlockSubmission;
79
81
  /** Block kind identifier (e.g., "block.hero" or "custom.my-block") */
80
82
  blockKind: string;
81
83
  };
@@ -141,7 +143,7 @@ export type PageRendererDataContext = {
141
143
  resolvedData?: Record<string, Record<string, unknown>>;
142
144
  /** Failed server loader requests, kept separate from successful data. */
143
145
  loaderFailures?: BlockLoaderFailures;
144
- previewStage?: 'published' | 'preview';
146
+ previewStage: 'published' | 'preview';
145
147
  previewToken?: string | null;
146
148
  readAuthority?: BrowserReadAuthority;
147
149
  routes?: RouteMap;
@@ -1,5 +1,5 @@
1
1
  export { default as PageRenderer, EditorPageRenderer, MissingBlockOverrideError, } from './PageRenderer';
2
2
  export type { RenderAudience as PageRenderAudience } from './pageRenderAudience';
3
- export type { BlockOverrideComponent, BlockOverrideProps, BlockOverrides, EntrySubrouteContextData, EditorPageRendererProps, OccurrenceContextData, PageBlockRenderAdmissionError, PageBlockPosition, PageRuntimeBoundary, RenderablePageBlock, RenderablePageOutline, SdkConfigForRenderer, } from './PageRenderer';
3
+ export type { BlockOverrideComponent, BlockOverrideProps, BlockOverrides, EntrySubrouteContextData, EditorPageRendererProps, OccurrenceContextData, PageBlockRenderAdmissionError, PageBlockPosition, PageJoinRenderer, PageJoinSlot, PageRuntimeJoin, RenderedJoin, RenderablePageBlock, RenderablePageOutline, SdkConfigForRenderer, } from './PageRenderer';
4
4
  export * from './subroutes';
5
5
  export { ThemeScope } from '../../theme-core/src/ThemeScope';
@@ -5,6 +5,8 @@ declare const appointmentServicesManifest: BlockManifest;
5
5
  export type AppointmentServicesContent = Readonly<{
6
6
  heading?: string | null;
7
7
  description?: unknown;
8
+ /** Issue 1403: one category to show; unset shows every category grouped. */
9
+ categoryId?: string | null;
8
10
  _sectionStyles?: SectionStylesContent;
9
11
  }>;
10
12
  export declare const appointmentServicesBlockDefinition: SystemBlockDefinition<AppointmentServicesContent>;