@riverbankcms/sdk 0.136.0 → 0.137.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 (160) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/dist/{PreviewEditorSidebar-BU5ZlhQR.mjs → PreviewEditorSidebar-Bn6cONPa.mjs} +8 -8
  3. package/dist/{PreviewEditorUI-9XkHL-bC.mjs → PreviewEditorUI-LAwXZPSx.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-wbEpXryy.mjs → PreviewQueryProvider-ztQUdsNo.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-CnWmj-2B.mjs → SdkPreviewModeRuntime-BbbGsI_v.mjs} +596 -164
  6. package/dist/{SiteChromeCustomizeContext-B6d5zkog.mjs → SiteChromeCustomizeContext-BbkNSt5a.mjs} +2888 -1404
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +12 -298
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +21 -14
  9. package/dist/_dts/ai/src/designer/themePatch.d.ts +5 -10
  10. package/dist/_dts/api/src/accessAdmin.d.ts +1 -9
  11. package/dist/_dts/api/src/accountApi.d.ts +49 -2
  12. package/dist/_dts/api/src/contentRuntime.d.ts +1 -4
  13. package/dist/_dts/api/src/domainConnection.d.ts +41 -0
  14. package/dist/_dts/api/src/endpoints.d.ts +194 -181
  15. package/dist/_dts/api/src/index.d.ts +4 -3
  16. package/dist/_dts/api/src/media.d.ts +19 -2
  17. package/dist/_dts/api/src/sdkContracts.d.ts +2 -15
  18. package/dist/_dts/api/src/sdkMediaContracts.d.ts +40 -0
  19. package/dist/_dts/api/src/sdkMediaEndpointDefinitions.d.ts +61 -0
  20. package/dist/_dts/api/src/sdkThemeWire.d.ts +15 -4
  21. package/dist/_dts/api/src/siteInfrastructure.d.ts +17 -23
  22. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +7 -21
  23. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +27 -3
  24. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +37 -17
  25. package/dist/_dts/api/src/types.d.ts +1 -1
  26. package/dist/_dts/blocks/src/PageRenderer.d.ts +2 -2
  27. package/dist/_dts/blocks/src/index.d.ts +1 -1
  28. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +9 -0
  29. package/dist/_dts/blocks/src/pageRendererBlockSupport.d.ts +75 -0
  30. package/dist/_dts/blocks/src/pageRendererBoundaries.d.ts +2 -0
  31. package/dist/_dts/blocks/src/server.d.ts +1 -1
  32. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +1 -1
  33. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +2 -1
  34. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.d.ts +3 -3
  35. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.state.d.ts +34 -22
  36. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/ErrorStep.d.ts +3 -5
  37. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +2 -0
  38. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.planning.d.ts +1 -1
  39. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.d.ts +2 -0
  40. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationErrorPresentation.d.ts +5 -0
  41. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationErrorRecovery.d.ts +25 -0
  42. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationWizardContext.d.ts +4 -0
  43. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.d.ts +7 -3
  44. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +2 -0
  45. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +5 -2
  46. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useWaitlistClaimRestoration.d.ts +2 -0
  47. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/capacity.d.ts +164 -0
  48. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/cta.d.ts +29 -0
  49. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/dates.d.ts +47 -0
  50. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/index.d.ts +14 -0
  51. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/people.d.ts +6 -0
  52. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/pricing.d.ts +31 -0
  53. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/OfferingTitle.d.ts +11 -0
  54. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekAgendaView.d.ts +1 -1
  55. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekBoardView.d.ts +1 -1
  56. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/index.d.ts +3 -1
  57. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/listingLayout.d.ts +23 -0
  58. package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +57 -0
  59. package/dist/_dts/commerce/src/purchase/index.d.ts +1 -0
  60. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +8 -40
  61. package/dist/_dts/db/src/index.d.ts +1 -0
  62. package/dist/_dts/db/src/utils/postgrestFilter.d.ts +2 -0
  63. package/dist/_dts/media-core/src/bulkDeletePlanning.d.ts +4 -0
  64. package/dist/_dts/media-core/src/fileDomain.d.ts +3 -0
  65. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +1 -0
  66. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +1 -0
  67. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +3 -2
  68. package/dist/_dts/preview-next/src/client/preview/siteChromeBrandPreferences.d.ts +1 -1
  69. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +2 -0
  70. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlSaveRequest.d.ts +51 -0
  71. package/dist/_dts/preview-next/src/client/preview/siteChromeSavePlan.d.ts +24 -2
  72. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +23 -1
  73. package/dist/_dts/preview-next/src/client/preview/usePersistedHeaderPreferences.d.ts +8 -0
  74. package/dist/_dts/sdk/src/public-api/contracts.d.ts +2 -1
  75. package/dist/_dts/sdk/src/version.d.ts +1 -1
  76. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  77. package/dist/_dts/theme-core/src/gradients/types.d.ts +5 -0
  78. package/dist/_dts/theme-core/src/header/interactionPalette.d.ts +25 -2
  79. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +3 -3
  80. package/dist/_dts/theme-core/src/schema.d.ts +12 -11
  81. package/dist/_dts/theme-core/src/site-styles/compilationPlan.d.ts +43 -3
  82. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +10 -0
  83. package/dist/_dts/theme-core/src/site-styles/headerBrandPresentation.d.ts +63 -0
  84. package/dist/_dts/theme-core/src/site-styles/headerBytesComparison.d.ts +30 -0
  85. package/dist/_dts/theme-core/src/site-styles/headerInteractionPalette.d.ts +50 -1
  86. package/dist/_dts/theme-core/src/site-styles/headerLayoutCatalog.d.ts +48 -9
  87. package/dist/_dts/theme-core/src/site-styles/headerPreferences.d.ts +162 -0
  88. package/dist/_dts/theme-core/src/site-styles/headerPreferencesPersistence.d.ts +73 -0
  89. package/dist/_dts/theme-core/src/site-styles/headerRecompile.d.ts +118 -0
  90. package/dist/_dts/theme-core/src/site-styles/headerStyleCompiler.d.ts +10 -1
  91. package/dist/_dts/theme-core/src/site-styles/headerStyleDefaults.d.ts +1 -1
  92. package/dist/_dts/theme-core/src/site-styles/headerStyleRecipe.d.ts +7 -0
  93. package/dist/_dts/theme-core/src/site-styles/index.d.ts +5 -0
  94. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  95. package/dist/_dts/theme-core/src/site-styles/siteChromeBackgrounds.d.ts +20 -1
  96. package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +43 -2
  97. package/dist/client/{BookingConsentAgreement-DCch21a6.mjs → BookingConsentAgreement--_fUCZe-.mjs} +2 -2
  98. package/dist/client/{DiscountCodeDisclosure-DIj1T59K.mjs → DiscountCodeDisclosure-BMipSoDJ.mjs} +1 -1
  99. package/dist/client/{EventCombined.client-BWVNlXTx.mjs → EventCombined.client-CwJOxn7A.mjs} +154 -178
  100. package/dist/client/{EventListing.client-DVFCDe3i.mjs → EventListing.client-eVwiylPW.mjs} +2 -2
  101. package/dist/client/{LeafletStaticMap-BY5mIHw9.mjs → LeafletStaticMap-IKenna5u.mjs} +1 -1
  102. package/dist/client/{accordion-CK29E8rG.mjs → accordion-MGAO3PuE.mjs} +1 -1
  103. package/dist/client/{bookingForm-DFvnet-N.mjs → bookingForm-CudlQPUu.mjs} +5 -5
  104. package/dist/client/bookings.mjs +418 -79
  105. package/dist/client/capacity-BW00PO7s.mjs +271 -0
  106. package/dist/client/{carousel-BVU5NQlb.mjs → carousel-BrbGJ2Jl.mjs} +1 -1
  107. package/dist/client/{cart-BNItcZVa.mjs → cart-Bq5eU0xZ.mjs} +3 -3
  108. package/dist/client/{checkout-Bu6iCdkP.mjs → checkout-BAFVRdrK.mjs} +3 -3
  109. package/dist/client/client.mjs +2919 -1918
  110. package/dist/client/{context-BImarOAq.mjs → context-DCkiHVdD.mjs} +8 -5
  111. package/dist/client/dates-2RPXHQy4.mjs +264 -0
  112. package/dist/client/{eventCalendar-DS2h-UXD.mjs → eventCalendar-B0O-hPF7.mjs} +10 -17
  113. package/dist/client/{eventCombined-Drt4Oq9p.mjs → eventCombined-DCkDaoDI.mjs} +3 -3
  114. package/dist/client/{eventDetails-Bl2vWgTX.mjs → eventDetails-D8GG2dnD.mjs} +5 -3
  115. package/dist/client/{eventListing-CS7PHY7v.mjs → eventListing-3ssV_bxz.mjs} +3 -3
  116. package/dist/client/{eventRegistration-D-j8eNy2.mjs → eventRegistration-bPQo3kVw.mjs} +562 -309
  117. package/dist/client/{form-RMpoLTyr.mjs → form-qMv8RDkk.mjs} +2 -2
  118. package/dist/client/{headerSection-BYE3Lb3k.mjs → headerSection-CH0Sc5hX.mjs} +2 -2
  119. package/dist/client/hooks.mjs +289 -32
  120. package/dist/client/{locationMap-BxSr7Kkh.mjs → locationMap-0_xlBnNI.mjs} +2 -2
  121. package/dist/client/{newsletterForm-DerbXwFC.mjs → newsletterForm-NUW7m9RI.mjs} +2 -2
  122. package/dist/client/{productDetail-4SZCLhAf.mjs → productDetail-FBEOM7jW.mjs} +3 -3
  123. package/dist/client/{productList-D7AP4GNq.mjs → productList-R0OSGhnn.mjs} +3 -3
  124. package/dist/client/{propsDecoder-pzBeCh14.mjs → propsDecoder-pYvx_Srl.mjs} +88 -380
  125. package/dist/client/rendering/client.mjs +2616 -1637
  126. package/dist/client/rendering/islands.mjs +17 -17
  127. package/dist/client/rendering.mjs +2710 -1702
  128. package/dist/client/{scrollToBlock-CduAKf8T.mjs → scrollToBlock-ByQv96M2.mjs} +1 -1
  129. package/dist/client/{shop-Cp5p_kGe.mjs → shop-RUG9DmRE.mjs} +6 -6
  130. package/dist/client/{shop-commerce-DicXYaYX.mjs → shop-commerce-B76Jz23B.mjs} +5 -5
  131. package/dist/client/{shop-commerce-store-CGWnpY4K.mjs → shop-commerce-store-QuQNdDsD.mjs} +1 -1
  132. package/dist/client/{shopShared-BDf9ljkm.mjs → shopShared-vXU1omwJ.mjs} +3 -3
  133. package/dist/client/{useEventFilters-DeeyGYuk.mjs → useEventFilters-ByuU6HLA.mjs} +33 -18
  134. package/dist/preview-next/before-render.mjs +79 -51
  135. package/dist/preview-next/client/runtime.mjs +4 -4
  136. package/dist/preview-next/keepAlive.mjs +79 -51
  137. package/dist/preview-next/middleware.mjs +79 -51
  138. package/dist/{previewAuthStore-DbqBol0V.mjs → previewAuthStore-L_cKW8Sb.mjs} +79 -51
  139. package/dist/{sdk-runtime-19MO27F0.mjs → sdk-runtime-sUMr5d70.mjs} +2 -2
  140. package/dist/{separator-DaPLtJ1f.mjs → separator-BIHkie5i.mjs} +1 -1
  141. package/dist/server/components.mjs +2077 -1274
  142. package/dist/server/config-validation.mjs +289 -32
  143. package/dist/server/config.mjs +289 -32
  144. package/dist/server/data.mjs +289 -32
  145. package/dist/server/index.mjs +80 -52
  146. package/dist/server/next.mjs +1822 -1111
  147. package/dist/server/page-converter.mjs +167 -31
  148. package/dist/server/prebuild.mjs +1 -1
  149. package/dist/server/rendering/server.mjs +1988 -1286
  150. package/dist/server/rendering.mjs +1943 -1182
  151. package/dist/server/routing.mjs +351 -86
  152. package/dist/server/server.mjs +293 -128
  153. package/dist/server/theme-bridge.mjs +52 -8
  154. package/dist/server/theme.mjs +27 -8
  155. package/dist/styles/index.css +15 -0
  156. package/package.json +1 -1
  157. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCapacity.d.ts +0 -48
  158. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/pricing.d.ts +0 -17
  159. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/utils.d.ts +0 -100
  160. /package/dist/_dts/blocks/src/system/runtime/nodes/events/{shared → domain}/destination.d.ts +0 -0
@@ -320,15 +320,17 @@ export type BackupAccessImportResult = {
320
320
  }>;
321
321
  };
322
322
  };
323
+ export type BackupImportTableCounts = {
324
+ created: number;
325
+ updated: number;
326
+ skipped: number;
327
+ failed: number;
328
+ };
323
329
  export type BackupImportResponse = {
324
330
  ok: boolean;
325
331
  siteId?: string;
326
332
  dryRun?: boolean;
327
- counts?: Record<string, {
328
- created: number;
329
- updated: number;
330
- failed: number;
331
- }>;
333
+ counts?: Record<string, BackupImportTableCounts>;
332
334
  warnings?: string[];
333
335
  errors?: Array<{
334
336
  table: string;
@@ -341,8 +343,8 @@ export type BackupImportResponse = {
341
343
  details?: unknown;
342
344
  };
343
345
  export type BackupPreviewResponse = {
344
- ok: boolean;
345
- manifest?: {
346
+ ok: true;
347
+ manifest: {
346
348
  siteId: string;
347
349
  siteSlug: string;
348
350
  siteTitle: string;
@@ -357,9 +359,7 @@ export type BackupPreviewResponse = {
357
359
  mediaCount: number;
358
360
  mediaBytes: number;
359
361
  };
360
- storagePath?: string;
361
- error?: string;
362
- code?: string;
362
+ storagePath: string;
363
363
  };
364
364
  export type CreateBackupUploadUrlRequest = {
365
365
  filename: string;
@@ -440,22 +440,16 @@ export type ImportBackupAsNewSiteRequest = {
440
440
  title?: string;
441
441
  };
442
442
  export type ImportBackupAsNewSiteResponse = {
443
- ok: boolean;
444
- siteId?: string;
445
- slug?: string;
446
- title?: string;
447
- counts?: Record<string, {
448
- created: number;
449
- updated: number;
450
- failed: number;
451
- }>;
452
- warnings?: string[];
453
- errors?: Array<{
443
+ ok: true;
444
+ siteId: string;
445
+ slug: string;
446
+ title: string;
447
+ counts: Record<string, BackupImportTableCounts>;
448
+ warnings: string[];
449
+ errors: Array<{
454
450
  table: string;
455
451
  id: string;
456
452
  error: string;
457
453
  }>;
458
- error?: string;
459
- code?: string;
460
454
  };
461
455
  export {};
@@ -1,6 +1,7 @@
1
1
  import type { FooterCompositionV1, PublicProfile, RectificationHistoryPropagationPlan, RectificationIdentityBoundary, RectificationIssueUrl, RectificationSurface } from '../../core/src/index';
2
2
  import type { CamelizeKeys, DbRow, DbJson } from '../../db/src/index';
3
3
  import type { APIEndpoint } from './apiEndpointTypes';
4
+ import type { CustomDomainConnectionSnapshot, DomainHostingStatus } from './domainConnection';
4
5
  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
6
  import type { AdminRoleMutationResponse, RevokeAdminRoleRequest, StartImpersonationRequest, StartImpersonationResponse, StopImpersonationRequest, StopImpersonationResponse, UpsertAdminRoleRequest } from './admin/types';
6
7
  import type { AccountRevokeSessionsBody, AccountRevokeSessionsResponse, AccountUpdatePasswordBody, AccountUpdatePasswordResponse, CreateManualSiteRequest, CreateManualSiteResponse } from './siteOperations';
@@ -431,16 +432,7 @@ export type SiteManagementAPIEndpoints = {
431
432
  correct: boolean;
432
433
  error?: string;
433
434
  } | null;
434
- vercel: {
435
- verified: boolean;
436
- verification?: Array<{
437
- type: string;
438
- domain: string;
439
- value: string;
440
- reason: string;
441
- }>;
442
- error?: string;
443
- };
435
+ hosting: DomainHostingStatus;
444
436
  vercelRecords: Array<{
445
437
  id: string;
446
438
  slug: string;
@@ -474,10 +466,7 @@ export type SiteManagementAPIEndpoints = {
474
466
  verifyDomainDns: APIEndpoint<never, {
475
467
  domainId: string;
476
468
  }, {
477
- vercel?: {
478
- verified: boolean;
479
- error?: string;
480
- };
469
+ hosting: DomainHostingStatus;
481
470
  resend?: {
482
471
  success: boolean;
483
472
  error?: string;
@@ -507,13 +496,10 @@ export type SiteManagementAPIEndpoints = {
507
496
  retryDomainVercel: APIEndpoint<never, {
508
497
  domainId: string;
509
498
  }, {
510
- verified: boolean;
511
- verification?: Array<{
512
- type: string;
513
- domain: string;
514
- value: string;
515
- reason: string;
516
- }>;
499
+ connection: CustomDomainConnectionSnapshot | null;
500
+ registeredOwnership: Extract<DomainHostingStatus, {
501
+ kind: 'registered';
502
+ }> | null;
517
503
  }>;
518
504
  retryDomainResend: APIEndpoint<never, {
519
505
  domainId: string;
@@ -9,8 +9,8 @@ import type { CreateManagementKeyRequest, CreateManagementKeyResponse, CreateSit
9
9
  import type { GetSiteInspirationAnalysisResponse, ListSiteInspirationAnalysesResponse } from './siteGeneration';
10
10
  import type { ListGscPropertiesAdminResponse, AuthStatusResponse, CronAppointmentRemindersResponse, CronBillingStatusResponse, CronEventFeedbackEmailsResponse, CronEventOccurrencesResponse, CronEventRemindersResponse, CronMediaJobsQuery, CronMediaJobsResponse, CronNewsletterSendResponse, CronPaymentReconciliationResponse, CronSeoIngestResponse, CronWaitlistExpiryResponse } from './siteOperations';
11
11
  import type { ApplySiteStyleSelectionBody, ApplySiteStyleSelectionResponse } from './siteRuntimeEndpoints';
12
- import type { ManagementMediaAsset, MediaResolveResponse, PushSdkConfigRequest, PushSdkConfigResponse, SdkAddEventOccurrenceRequest, SdkBackfillIdentifiersResult, SdkEventOccurrenceResponse, SdkGetEntryResponse, SdkGetEventCategoryResponse, SdkGetEventResponse, SdkGetFormResponse, SdkGetPageBlockResponse, SdkPatchPageBlockBody, SdkPatchPageBlockResponse, SdkGetVenueResponse, SdkListEntriesResponse, SdkListEventCategoriesResponse, SdkListEventOccurrencesResponse, SdkListEventsResponse, SdkListFormsResponse, SdkListVenuesResponse, SdkMediaFinalizeUploadResponse, SdkMediaUploadUrlResponse, SdkPageResponse, SdkEntryUpsertSlotBlock, SdkPublishOrUnpublishEntryResponse, SdkPullContentTypesResponse, SdkCatalogThemeResponse, SdkCatalogBlocksResponse, SdkCatalogContentTypesResponse, SdkCapabilitiesResponse, SdkCommandApplicationResult, SdkConfigureBookingVerticalRequest, SdkConfigureBookingVerticalResponse, SdkDemoContentResponse, SdkDeleteResponse, SdkPullEntriesAllResponse, SdkPullEntriesByTypeResponse, SdkPullEntriesResponse, SdkPullEventCategoriesResponse, SdkPullEventsResponse, SdkPullFooterResponse, SdkPullFormSchema, SdkPullFormsResponse, SdkPullFormSettings, SdkPullDraftsResponse, SdkPullNavigationResponse, SdkPullPagesResponse, SdkPullSettings, SdkPullSettingsResponse, SdkPullSiteInfoResponse, SdkPullThemeResponse, SdkPullVenue, SdkPullVenuesResponse, SdkUpdateSettingsResponse, SdkUpdateEventOccurrenceRequest, SdkUpsertBlockResponse, SdkUpsertEntryResponse, SdkUpsertPageResponse, SdkUpsertEventCategoryResponse, SdkUpsertEventResponse, SdkUpsertFooterResponse, SdkUpsertFormResponse, SdkUpsertNavigationMenuResponse, SdkUpsertThemeResponse, SdkUpsertVenueResponse } from './sdkContracts';
13
- import type { SdkThemeWire } from './sdkThemeWire';
12
+ import type { ManagementMediaAsset, MediaResolveResponse, PushSdkConfigRequest, PushSdkConfigResponse, SdkAddEventOccurrenceRequest, SdkBackfillIdentifiersResult, SdkEventOccurrenceResponse, SdkGetEntryResponse, SdkGetEventCategoryResponse, SdkGetEventResponse, SdkGetFormResponse, SdkGetPageBlockResponse, SdkPatchPageBlockBody, SdkPatchPageBlockResponse, SdkGetVenueResponse, SdkListEntriesResponse, SdkListEventCategoriesResponse, SdkListEventOccurrencesResponse, SdkListEventsResponse, SdkListFormsResponse, SdkListVenuesResponse, SdkMediaFinalizeUploadResponse, SdkMediaDeleteApplyResponse, SdkMediaDeletePreviewResponse, SdkMediaDownloadResponse, SdkMediaListResponse, SdkMediaUploadUrlResponse, SdkPageResponse, SdkEntryUpsertSlotBlock, SdkPublishOrUnpublishEntryResponse, SdkPullContentTypesResponse, SdkCatalogThemeResponse, SdkCatalogBlocksResponse, SdkCatalogContentTypesResponse, SdkCapabilitiesResponse, SdkCommandApplicationResult, SdkConfigureBookingVerticalRequest, SdkConfigureBookingVerticalResponse, SdkDemoContentResponse, SdkDeleteResponse, SdkPullEntriesAllResponse, SdkPullEntriesByTypeResponse, SdkPullEntriesResponse, SdkPullEventCategoriesResponse, SdkPullEventsResponse, SdkPullFooterResponse, SdkPullFormSchema, SdkPullFormsResponse, SdkPullFormSettings, SdkPullDraftsResponse, SdkPullNavigationResponse, SdkPullPagesResponse, SdkPullSettings, SdkPullSettingsResponse, SdkPullSiteInfoResponse, SdkPullThemeResponse, SdkPullVenue, SdkPullVenuesResponse, SdkUpdateSettingsResponse, SdkUpdateEventOccurrenceRequest, SdkUpsertBlockResponse, SdkUpsertEntryResponse, SdkUpsertPageResponse, SdkUpsertEventCategoryResponse, SdkUpsertEventResponse, SdkUpsertFooterResponse, SdkUpsertFormResponse, SdkUpsertNavigationMenuResponse, SdkUpsertThemeResponse, SdkUpsertVenueResponse } from './sdkContracts';
13
+ import type { SdkThemeWireWithoutHeader } from './sdkThemeWire';
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';
@@ -148,6 +148,24 @@ export type SitePlatformAPIEndpoints = {
148
148
  }, {
149
149
  siteId: string;
150
150
  }, MediaResolveResponse>;
151
+ sdkMediaList: APIEndpoint<never, {
152
+ siteId: string;
153
+ search?: string;
154
+ limit?: number;
155
+ offset?: number;
156
+ }, SdkMediaListResponse>;
157
+ sdkMediaDownload: APIEndpoint<never, {
158
+ siteId: string;
159
+ identifier: string;
160
+ }, SdkMediaDownloadResponse>;
161
+ sdkMediaDeletePreview: APIEndpoint<never, {
162
+ siteId: string;
163
+ identifier: string;
164
+ }, SdkMediaDeletePreviewResponse>;
165
+ sdkMediaDeleteApply: APIEndpoint<never, {
166
+ siteId: string;
167
+ identifier: string;
168
+ }, SdkMediaDeleteApplyResponse>;
151
169
  sdkMediaUploadUrl: APIEndpoint<{
152
170
  filename: string;
153
171
  bytes: number;
@@ -317,7 +335,13 @@ export type SitePlatformAPIEndpoints = {
317
335
  }, SdkDeleteResponse>;
318
336
  sdkUpsertTheme: APIEndpoint<Readonly<{
319
337
  kind: 'update';
320
- theme: SdkThemeWire;
338
+ /**
339
+ * The theme minus its header (#1318 Phase 4d, D17). The server compiles
340
+ * `theme.header` from the site's stored selection and header
341
+ * preferences and is its only author; a body carrying header bytes is
342
+ * rejected rather than silently stripped.
343
+ */
344
+ theme: SdkThemeWireWithoutHeader;
321
345
  themeId?: string;
322
346
  selectionId?: string;
323
347
  }> | Readonly<{
@@ -2,16 +2,23 @@ import type { BackgroundOverride, SystemCustomizeFacetSelection, Theme } from '.
2
2
  import type { ListMediaAssetsResult, MediaAssetWithLabels } from '@riverbankcms/media-storage-supabase';
3
3
  import type { FooterNavigationLayout } from '../../core/src/index';
4
4
  import type { DbJson } from '../../db/src/index';
5
- import type { PageDesignEditorReadModel, PageDesignIntent, AppearancePresetId, BoundaryOptionId, DesignBlockId, FooterLookId, HeaderLayoutId, HeaderLayoutStyleSelection, HeaderStyleId, LayoutVariantKey, SiteStyleId } from '../../theme-core/src/site-styles/index';
5
+ import type { PageDesignEditorReadModel, PageDesignIntent, AppearancePresetId, BoundaryOptionId, DesignBlockId, FooterLookId, HeaderLayoutId, HeaderLayoutStyleSelection, HeaderPreferences, HeaderQuickControlPreferences, HeaderStyleId, LayoutVariantKey, SiteStyleId } from '../../theme-core/src/site-styles/index';
6
6
  import type { ButtonStyleSelection } from '../../theme-core/src/buttons/index';
7
7
  import type { APIEndpoint } from './apiEndpointTypes';
8
8
  import type { AnalyticsReportQuery, AnalyticsReportResponse } from './analytics';
9
- import type { CreateMediaAssetBody, MediaAssetResponse, MediaAssetFileFilterContract, MediaBulkDeleteResponse, MediaClassifyJobResponse, MediaJobSummaryResponse, MediaLabelSummary, MediaSettingsResponse } from './media';
9
+ import type { CreateMediaAssetBody, MediaAssetResponse, MediaAssetFileFilterContract, MediaBulkDeleteResponse, MediaDeleteResponse, MediaClassifyJobResponse, MediaJobSummaryResponse, MediaLabelSummary, MediaSettingsResponse } from './media';
10
10
  import type { MediaUsageCheckResponse } from './shared-contracts';
11
- import type { BlockWithContentResponse, BlockListItem, ContentEntryListStage, EntryPageContentSlotsResponse, PageSurfaceContentSlotsResponse, 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, ThemePreferencesRecord } 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';
15
+ /**
16
+ * A theme body with no header. The server compiles `theme.header` from the
17
+ * row's intent and is its only author (#1318 Phase 4d).
18
+ */
19
+ export type ThemeWithoutHeader = Omit<Theme, 'header'> & Readonly<{
20
+ header?: never;
21
+ }>;
15
22
  /** Partial persisted selections for the Style configurator and site chrome. */
16
23
  export type SiteThemeSelectionsPayload = {
17
24
  buttonStyleSelection?: ButtonStyleSelection | null;
@@ -70,7 +77,17 @@ export type SaveSiteChromeSelectionBody = Readonly<{
70
77
  surface: 'header';
71
78
  layoutId: HeaderLayoutId;
72
79
  styleId: HeaderStyleId;
73
- theme: Theme;
80
+ /**
81
+ * The header intent this save expresses, and the whole of what this
82
+ * surface sends (#1318 Phase 4d).
83
+ *
84
+ * The compiled `theme` that used to ride alongside it is gone. The server
85
+ * compiles the header from `(layoutId, styleId, preferences)` against the
86
+ * persisted row and is its sole author; the rest of the theme is the
87
+ * row's own and is not the client's to restate. The save response returns
88
+ * the theme the server persisted, which is what the client reconciles to.
89
+ */
90
+ preferences: HeaderQuickControlPreferences;
74
91
  themeId?: string | null;
75
92
  selectionId?: string | null;
76
93
  baseSelectionUpdatedAt?: string | null;
@@ -92,6 +109,11 @@ export type SaveSiteChromeSelectionResponse = Readonly<{
92
109
  theme: Theme;
93
110
  headerLayoutId: HeaderLayoutId;
94
111
  headerStyleId: HeaderStyleId;
112
+ /**
113
+ * The intent as persisted. `null` while the Phase 4c backfill is outstanding
114
+ * and this save did not write one — absent, not "the defaults".
115
+ */
116
+ headerPreferences: HeaderPreferences | null;
95
117
  footerLookId: FooterLookId | null;
96
118
  }>;
97
119
  export type PageDesignRevisionToken = {
@@ -191,17 +213,6 @@ export type SiteRuntimeAPIEndpoints = {
191
213
  mode?: 'manual';
192
214
  entryIds?: string;
193
215
  }, ListPublishedEntriesResponse>;
194
- createTheme: APIEndpoint<{
195
- site_id: string;
196
- }, never, {
197
- output: ThemeGenerationTurn[];
198
- text: string[] | null;
199
- }>;
200
- generateThemes: APIEndpoint<{
201
- site_id: string;
202
- }, never, {
203
- themes: ThemeRow[];
204
- }>;
205
216
  extractThemeFromInspiration: APIEndpoint<{
206
217
  urls: string[];
207
218
  }, never, {
@@ -217,7 +228,16 @@ export type SiteRuntimeAPIEndpoints = {
217
228
  source: 'extracted' | 'fallback';
218
229
  }>;
219
230
  saveSiteTheme: APIEndpoint<{
220
- theme: Theme;
231
+ /**
232
+ * The theme minus its header (#1318 Phase 4d, D17).
233
+ *
234
+ * `header` is compiled server-side from the row's stored selection and
235
+ * `header_preferences`, so a body cannot carry header bytes at all. This
236
+ * was the last path by which hand-written header fields reached
237
+ * persistence, and leaving it open would have made the single-authority
238
+ * claim untrue. `headerSelection` still names the selection to compile.
239
+ */
240
+ theme: ThemeWithoutHeader;
221
241
  themeId?: string | null;
222
242
  selectionId?: string | null;
223
243
  overrides?: Record<string, unknown> | null;
@@ -369,7 +389,7 @@ export type SiteRuntimeAPIEndpoints = {
369
389
  cascadeLabels?: boolean;
370
390
  }, {
371
391
  assetId: string;
372
- }, void>;
392
+ }, MediaDeleteResponse>;
373
393
  mediaBulkDelete: APIEndpoint<{
374
394
  assetIds: string[];
375
395
  deleteObjects?: boolean;
@@ -1,5 +1,5 @@
1
1
  import type { CamelizeKeys, DbDatabase, DbRow } from "../../db/src/index";
2
- export type { AccessPolicyContract, AccessPolicyTag, AmbientBackgroundRole, CreateMediaAssetBody, EntitledCustomerAccessScopeContract, FileKindContract, FileKindTag, FileUseContract, FileUseTag, ImageFileFormat, MediaAssetResponse, MediaAssetFileFilterContract, MediaBulkDeleteAssetFailure, MediaBulkDeleteResponse, MediaClassifyJobResponse, MediaJobSummaryResponse, MediaLabelSummary, MediaSettingsResponse, RenderableFileKindTag, SiteBackgroundAssetUse, StorageClass, UploadIntentContract, UploadIntentTag, } from "./media";
2
+ export type { AccessPolicyContract, AccessPolicyTag, AmbientBackgroundRole, CreateMediaAssetBody, EntitledCustomerAccessScopeContract, FileKindContract, FileKindTag, FileUseContract, FileUseTag, ImageFileFormat, MediaAssetResponse, MediaAssetFileFilterContract, MediaBulkDeleteAssetFailure, MediaBulkDeleteResponse, MediaDeleteResponse, MediaDeleteWarning, MediaClassifyJobResponse, MediaJobSummaryResponse, MediaLabelSummary, MediaSettingsResponse, RenderableFileKindTag, SiteBackgroundAssetUse, StorageClass, UploadIntentContract, UploadIntentTag, } from "./media";
3
3
  export type { AnalyticsPreset, AnalyticsReferrer, AnalyticsReportFilters, AnalyticsReportQuery, AnalyticsReportResponse, AnalyticsSeriesPoint, AnalyticsTopPage, AnalyticsTotals, } from "./analytics";
4
4
  export type { AIChatMessage, AiBriefTurn, JsonPrimitive, JsonValue, MediaUsageCheckItem, MediaUsageCheckResponse, MediaUsageLocation, } from "./shared-contracts";
5
5
  export type * from "./accessAdmin";
@@ -9,7 +9,7 @@ import { type MediaAssetIndexItem, type ResolveImageUrlContext, type ResolveImag
9
9
  import type { BookingOfferingPresetSummary } from './system/blocks/offerings-preview/model';
10
10
  import { type PageBoundaryWrapper, type PageRuntimeBoundary } from './pageRendererBoundaries';
11
11
  import { type RenderablePageOutline } from './pageRenderAdmission';
12
- export type { PageBlockRenderAdmissionError, RenderablePageBlock, RenderablePageOutline, } from './pageRenderAdmission';
12
+ export type { PageBlockRenderAdmissionError, PageRenderAudience, RenderablePageBlock, RenderablePageOutline, } from './pageRenderAdmission';
13
13
  export { MissingBlockOverrideError } from './pageRenderingMode';
14
14
  export type { PageBlockPosition, PageRuntimeBoundary, } from './pageRendererBoundaries';
15
15
  /**
@@ -21,7 +21,7 @@ export type OccurrenceContextData = import('../../core/src/index').EventOccurren
21
21
  * Event-occurrence subroute context.
22
22
  */
23
23
  export type EntrySubrouteContextData = import('../../core/src/index').EventPageSubrouteContext;
24
- type PageRendererDataContext = {
24
+ export type PageRendererDataContext = {
25
25
  siteId?: string;
26
26
  pageId?: string;
27
27
  resolvedData?: Record<string, Record<string, unknown>>;
@@ -1,7 +1,7 @@
1
1
  export { default as PageRenderer, EditorPageRenderer } from './PageRenderer';
2
2
  export { createCustomBlockRegistry, mergeBlockDescriptorsWithRegistry, planCustomBlockRegistryResolution, transformToBlockDescriptor, } from './customBlockRegistry';
3
3
  export type { CustomBlockConflictReason, CustomBlockManifestSource, CustomBlockRegistry, CustomBlockRegistryConflict, CustomBlockRegistryEntry, CustomBlockRegistryResolutionPlan, CustomBlockSourcePolicy, ResolvedCustomBlockManifest, SdkConfigForBlockPicker, } from './customBlockRegistry';
4
- export type { BlockOverrideComponent, BlockOverrideProps, BlockOverrides, EntrySubrouteContextData, EditorPageRendererProps, PageBlockRenderAdmissionError, PageRendererProps, RenderablePageBlock, RenderablePageOutline, OccurrenceContextData, PageBlockPosition, PageRuntimeBoundary, SdkConfigForRenderer, } from './PageRenderer';
4
+ export type { BlockOverrideComponent, BlockOverrideProps, BlockOverrides, EntrySubrouteContextData, EditorPageRendererProps, PageBlockRenderAdmissionError, PageRenderAudience, PageRendererProps, RenderablePageBlock, RenderablePageOutline, OccurrenceContextData, PageBlockPosition, PageRuntimeBoundary, SdkConfigForRenderer, } from './PageRenderer';
5
5
  export { MissingBlockOverrideError } from './pageRenderingMode';
6
6
  export * from './subroutes';
7
7
  export * from './structure/schema';
@@ -1,5 +1,14 @@
1
1
  import type { Block, PageOutline } from './structure/schema';
2
2
  import type { ManifestContentAdmissionError, RenderableManifestContent } from './system/manifest/validation';
3
+ /**
4
+ * Who the render is for.
5
+ *
6
+ * `public` is a visitor-facing production page: a block that cannot render is
7
+ * dropped rather than replaced with developer-facing text (issue 1378).
8
+ * `authoring` is the dashboard preview and the editor renderer entrypoint,
9
+ * where the diagnostic is the useful output.
10
+ */
11
+ export type PageRenderAudience = 'public' | 'authoring';
3
12
  export type PageBlockRenderAdmissionError = Readonly<{
4
13
  kind: 'invalid_manifest_content';
5
14
  error: ManifestContentAdmissionError;
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Support for rendering one block section: what a block that cannot render
3
+ * leaves behind, how an override is found, and the props both override paths
4
+ * hand to a component. `PageRenderer` owns the page-level composition; this
5
+ * module owns the pieces it reaches for per block.
6
+ */
7
+ import * as React from 'react';
8
+ import type { getBlockDefinition } from './system';
9
+ import type { ResolverContext, SystemBlockComponent } from './system';
10
+ import type { Block } from './structure/schema';
11
+ import type { SdkCustomBlock } from './system/manifest/schema';
12
+ import type { RouteMap } from './system/transforms';
13
+ import { type ResolveImageUrlContext } from './system/runtime/nodes/media';
14
+ import { type PageThemeResources } from './pageRenderingMode';
15
+ import type { PageBlockRenderAdmissionError, PageRenderAudience, PresentationBlock } from './pageRenderAdmission';
16
+ import type { BlockOverrideComponent, BlockOverrideProps, BlockOverrides, PageRendererDataContext, SdkConfigForRenderer } from './PageRenderer';
17
+ export type MemoSectionProps = {
18
+ audience: PageRenderAudience;
19
+ themeResources: PageThemeResources;
20
+ block: PresentationBlock;
21
+ dataContext?: PageRendererDataContext;
22
+ blockKey: string;
23
+ registry?: ResolverContext['registry'];
24
+ routeMap?: RouteMap;
25
+ wrapBlock?: (blockId: string, rendered: React.ReactNode) => React.ReactNode;
26
+ blockOverrides?: BlockOverrides;
27
+ sdkConfig?: SdkConfigForRenderer | null;
28
+ customBlocks?: SdkCustomBlock[];
29
+ imageResolveContext: ResolveImageUrlContext;
30
+ previewAuthoring?: ResolverContext['previewAuthoring'];
31
+ };
32
+ export declare function fallback(message: string): React.JSX.Element;
33
+ /**
34
+ * A page with nothing to show. Authoring surfaces get the diagnostic; a public
35
+ * page renders nothing at all rather than telling a visitor about the outline.
36
+ */
37
+ export declare function emptyPageNotice(audience: PageRenderAudience): React.ReactElement | null;
38
+ /**
39
+ * A public page dropped a block, so nothing in the rendered HTML says the
40
+ * content is missing. Say it in the logs instead.
41
+ */
42
+ export declare function warnOmittedFromPublicPage(input: Readonly<{
43
+ block: PresentationBlock;
44
+ outcome: string;
45
+ admissionError?: PageBlockRenderAdmissionError;
46
+ }>): void;
47
+ export declare function shouldDebugCustomBlocks(): boolean;
48
+ /**
49
+ * Look up a block override component by block kind.
50
+ * Supports both full ("block.hero") and short ("hero") keys.
51
+ */
52
+ export declare function getBlockOverride(blockKind: string, overrides?: BlockOverrides): BlockOverrideComponent | undefined;
53
+ /**
54
+ * Resolves block content based on stage priority.
55
+ * For draft/preview: draftContent takes priority over content.
56
+ * For published: content is the source of truth.
57
+ * Returns empty object if no content exists (validator will handle placeholders if needed).
58
+ */
59
+ export declare function getRenderableContent(block: Block, previewStage?: 'published' | 'preview'): Record<string, unknown>;
60
+ export declare function resolveBookingTimeZone(dataContext: PageRendererDataContext | undefined): string | undefined;
61
+ export declare function resolvePageRendererImageResolveContext(dataContext: PageRendererDataContext | undefined): ResolveImageUrlContext;
62
+ /**
63
+ * The RSC-safe props every override component receives, whether the block
64
+ * resolved a manifest or is being rendered from an override alone.
65
+ */
66
+ export declare function buildBlockOverrideProps(input: Readonly<{
67
+ block: PresentationBlock;
68
+ content: Record<string, unknown>;
69
+ data: BlockOverrideProps['data'];
70
+ themeResources: PageThemeResources;
71
+ dataContext: PageRendererDataContext | undefined;
72
+ imageResolveContext: ResolveImageUrlContext;
73
+ }>): BlockOverrideProps;
74
+ export declare function getPerfSlowBlockRenderThresholdMs(): number;
75
+ export declare function getCachedBlockComponent(manifest: NonNullable<ReturnType<typeof getBlockDefinition>>['manifest']): SystemBlockComponent<Record<string, unknown>>;
@@ -6,6 +6,8 @@ export type PageRuntimeBoundary = CompiledBoundaryRuntime<string>;
6
6
  export type PageBoundaryWrapper = (boundary: PageRuntimeBoundary, rendered: React.ReactNode) => React.ReactNode;
7
7
  export declare function isSiteStyleTransitionStyleGroup(value: string | undefined): value is string;
8
8
  export declare function boundaryMapForAdjacentBlockIds(boundaries: readonly PageRuntimeBoundary[]): ReadonlyMap<string, PageRuntimeBoundary>;
9
+ /** Keep a surviving block's outgoing treatment when omitted blocks change its neighbor. */
10
+ export declare function boundariesForSurvivingBlocks(boundaries: readonly PageRuntimeBoundary[], blocks: readonly Block[]): readonly PageRuntimeBoundary[];
9
11
  export declare function boundaryBetweenBlocks(previousBlock: Block | null, nextBlock: Block | null, boundaries: ReadonlyMap<string, PageRuntimeBoundary>): PageRuntimeBoundary | null;
10
12
  export declare function renderBoundaryAfterBlock(input: Readonly<{
11
13
  block: Block;
@@ -1,4 +1,4 @@
1
1
  export { default as PageRenderer, EditorPageRenderer, MissingBlockOverrideError, } from './PageRenderer';
2
- export type { BlockOverrideComponent, BlockOverrideProps, BlockOverrides, EntrySubrouteContextData, EditorPageRendererProps, OccurrenceContextData, PageBlockRenderAdmissionError, PageBlockPosition, PageRuntimeBoundary, RenderablePageBlock, RenderablePageOutline, SdkConfigForRenderer, } from './PageRenderer';
2
+ export type { BlockOverrideComponent, BlockOverrideProps, BlockOverrides, EntrySubrouteContextData, EditorPageRendererProps, OccurrenceContextData, PageBlockRenderAdmissionError, PageRenderAudience, PageBlockPosition, PageRuntimeBoundary, RenderablePageBlock, RenderablePageOutline, SdkConfigForRenderer, } from './PageRenderer';
3
3
  export * from './subroutes';
4
4
  export { ThemeScope } from '../../theme-core/src/ThemeScope';
@@ -77,7 +77,7 @@ export declare const eventRegistrationManifest: import("..").DefinedBlockManifes
77
77
  }, {
78
78
  readonly id: "showCapacity";
79
79
  readonly type: "boolean";
80
- readonly label: "Show available spots";
80
+ readonly label: "Show available places";
81
81
  readonly description: "Display remaining capacity";
82
82
  readonly required: false;
83
83
  readonly defaultValue: true;
@@ -18,7 +18,8 @@ type PublicProductCategorySelector = Readonly<{
18
18
  export declare class BlockApiError extends Error {
19
19
  readonly status: number;
20
20
  readonly code?: string | undefined;
21
- constructor(message: string, status: number, code?: string | undefined);
21
+ readonly tag?: string | undefined;
22
+ constructor(message: string, status: number, code?: string | undefined, tag?: string | undefined);
22
23
  }
23
24
  /**
24
25
  * Block API Client interface
@@ -1,7 +1,7 @@
1
1
  import type { PublicEvent } from '../../blocks/events/shared/types';
2
2
  import { type BookingTimeZone } from '../../../../../core/src/index';
3
3
  import type { CalendarDate } from '../../../../../calendar/src/index';
4
- import { type CalendarViewport, type CalendarViewportKind, type WeekStart } from '../nodes/events/shared/utils';
4
+ import { type CalendarViewport, type CalendarViewportKind, type WeekStart } from '../nodes/events/domain';
5
5
  import { type EventRuntimeFilters } from '../nodes/events/shared/listOptions';
6
6
  import { type CalendarViewLoadState } from './useCalendarEvents.state';
7
7
  export type { CalendarViewLoadState } from './useCalendarEvents.state';
@@ -82,8 +82,8 @@ type UseCalendarEventCacheOptions = Readonly<{
82
82
  timeZone: BookingTimeZone;
83
83
  }>;
84
84
  /**
85
- * Owns event loading and month-window caching for a supplied viewport anchor.
86
- * It does not decide navigation semantics or visible calendar days.
85
+ * The reducer owns month data and request ownership. The hook only performs I/O.
86
+ * Requests for other months remain useful until the query context changes.
87
87
  */
88
88
  export declare function useCalendarEventCache({ viewDate, initialEvents, preloadMonths, filters, stage, timeZone, }: UseCalendarEventCacheOptions): Readonly<{
89
89
  events: PublicEvent[];
@@ -1,29 +1,23 @@
1
+ import { type BookingTimeZone } from '../../../../../core/src/index';
1
2
  import type { CalendarDate } from '../../../../../calendar/src/index';
2
- export type CalendarLoadScope = Readonly<{
3
- anchorDate: CalendarDate;
4
- filtersKey: string;
5
- }>;
6
- export type CalendarEventCacheLoadState = Readonly<{
7
- kind: 'idle';
3
+ import type { PublicEvent } from '../../blocks/events/shared/types';
4
+ type MonthState = Readonly<{
5
+ events: readonly PublicEvent[];
6
+ }> & (Readonly<{
7
+ kind: 'seeded';
8
8
  }> | Readonly<{
9
9
  kind: 'loading';
10
- scope: CalendarLoadScope;
11
- }> | Readonly<{
12
- kind: 'error';
13
- scope: CalendarLoadScope;
14
- error: Error;
15
- }>;
16
- export type CalendarEventCacheLoadAction = Readonly<{
17
- type: 'started';
18
- scope: CalendarLoadScope;
10
+ request: CalendarRequest;
19
11
  }> | Readonly<{
20
- type: 'succeeded';
21
- scope: CalendarLoadScope;
12
+ kind: 'ready';
22
13
  }> | Readonly<{
23
- type: 'failed';
24
- scope: CalendarLoadScope;
14
+ kind: 'failed';
25
15
  error: Error;
16
+ }>);
17
+ export type CalendarRequest = Readonly<{
18
+ months: readonly string[];
26
19
  }>;
20
+ export type CalendarCacheState = ReadonlyMap<string, MonthState>;
27
21
  export type CalendarViewLoadState = Readonly<{
28
22
  kind: 'idle';
29
23
  }> | Readonly<{
@@ -32,6 +26,24 @@ export type CalendarViewLoadState = Readonly<{
32
26
  kind: 'error';
33
27
  error: Error;
34
28
  }>;
35
- export declare function calendarEventCacheLoadReducer(state: CalendarEventCacheLoadState, action: CalendarEventCacheLoadAction): CalendarEventCacheLoadState;
36
- export declare function projectCalendarLoadState(state: CalendarEventCacheLoadState, scope: CalendarLoadScope): CalendarViewLoadState;
37
- export declare function toCalendarEventCacheLoadError(error: unknown): Error;
29
+ export type CalendarCacheAction = Readonly<{
30
+ kind: 'started';
31
+ request: CalendarRequest;
32
+ }> | Readonly<{
33
+ kind: 'succeeded';
34
+ request: CalendarRequest;
35
+ events: readonly PublicEvent[];
36
+ timeZone: BookingTimeZone;
37
+ }> | Readonly<{
38
+ kind: 'failed';
39
+ request: CalendarRequest;
40
+ error: Error;
41
+ }>;
42
+ export declare function calendarMonthKey(date: CalendarDate): string;
43
+ export declare function calendarWindowMonths(date: CalendarDate, radius: number): readonly string[];
44
+ export declare function seedCalendarCache(events: readonly PublicEvent[], timeZone: BookingTimeZone): CalendarCacheState;
45
+ export declare function planCalendarRequest(state: CalendarCacheState, months: readonly string[], retry: boolean): CalendarRequest | null;
46
+ export declare function calendarCacheReducer(state: CalendarCacheState, action: CalendarCacheAction): CalendarCacheState;
47
+ export declare function selectCalendarEvents(state: CalendarCacheState, months: readonly string[]): PublicEvent[];
48
+ export declare function projectCalendarLoadState(state: CalendarCacheState, months: readonly string[]): CalendarViewLoadState;
49
+ export {};
@@ -1,12 +1,10 @@
1
1
  import React from 'react';
2
+ import type { EventRegistrationErrorAction } from '../../../../../../commerce/src/purchase/index';
2
3
  type ErrorStepProps = {
3
4
  message: string;
4
5
  onRetry: () => void;
6
+ action?: EventRegistrationErrorAction;
7
+ canJoinWaitlist?: boolean;
5
8
  };
6
- /**
7
- * Error Step
8
- *
9
- * Displays an error message with a retry button when registration fails.
10
- */
11
9
  export declare const ErrorStep: React.FC<ErrorStepProps>;
12
10
  export {};
@@ -1,4 +1,5 @@
1
1
  import type { DirectCheckoutCollectionOptionKind, PaymentMethod } from '../../api/types';
2
+ import type { EventRegistrationErrorAction } from '../../../../../../commerce/src/purchase/index';
2
3
  import type { EventRegistrationDirectPaymentOption, EventRegistrationDirectPaymentSelectionState } from './eventPaymentOptions';
3
4
  import type { EventRegistrationPageSurfaceSubject } from './eventScope';
4
5
  import type { EligibilityData, EventTicketSelectionLine, FormData, Guest, GuestErrors, OccurrenceContext, PaymentSelection, PaymentStepState, PublicEvent, RegistrationEvent, RegistrationResult } from './types';
@@ -52,6 +53,7 @@ export type EventRegistrationFlowStatus = Readonly<{
52
53
  }> | Readonly<{
53
54
  tag: 'error';
54
55
  message: string;
56
+ action?: EventRegistrationErrorAction;
55
57
  }>;
56
58
  export type EventRegistrationFlowView = Readonly<{
57
59
  kind: 'empty';
@@ -10,7 +10,7 @@ export declare function resolveEventRegistrationSubmitPlan(input: Readonly<{
10
10
  eventRequiresPayment: boolean;
11
11
  canJoinWaitlist?: boolean | null;
12
12
  }>): EventRegistrationSubmitPlan;
13
- export declare function resolveHeadlessEventRegistrationStatus(wizard: Pick<UseEventRegistrationWizardResult, 'step' | 'registrationResult' | 'errorMessage'>): EventRegistrationFlowStatus;
13
+ export declare function resolveHeadlessEventRegistrationStatus(wizard: Pick<UseEventRegistrationWizardResult, 'step' | 'registrationResult' | 'errorMessage'> & Partial<Pick<UseEventRegistrationWizardResult, 'errorAction'>>): EventRegistrationFlowStatus;
14
14
  export declare function resolveHeadlessEventRegistrationView(wizard: Readonly<Pick<UseEventRegistrationWizardResult, 'step' | 'scopedEvents' | 'occurrenceContext' | 'registrationResult' | 'errorMessage'> & {
15
15
  api: Pick<UseEventRegistrationWizardResult['api'], 'config'>;
16
16
  }>): EventRegistrationFlowView;
@@ -59,6 +59,7 @@ export type UseEligibilityResult = {
59
59
  creditState: PortalCreditState;
60
60
  };
61
61
  export declare function useEligibility(params: {
62
+ refreshKey?: number;
62
63
  enabled: boolean;
63
64
  subject: RegistrationSubject | null;
64
65
  attendanceMode?: 'in_person' | 'online' | null;
@@ -67,6 +68,7 @@ export declare function useEligibility(params: {
67
68
  subjectEmail: string | null;
68
69
  }): UseEligibilityResult;
69
70
  export declare function useEligibilityWithDeps(params: {
71
+ refreshKey?: number;
70
72
  enabled: boolean;
71
73
  subject: RegistrationSubject | null;
72
74
  attendanceMode?: 'in_person' | 'online' | null;
@@ -0,0 +1,5 @@
1
+ import { type EventRegistrationErrorAction } from '../../../../../../commerce/src/purchase/index';
2
+ export declare function registrationErrorPresentation(error: unknown): Readonly<{
3
+ message: string;
4
+ action: EventRegistrationErrorAction;
5
+ }>;