@riverbankcms/sdk 0.146.0 → 0.148.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 (466) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/{PreviewEditorSidebar-kg2r2Fyi.mjs → PreviewEditorSidebar-DvEPG3Z2.mjs} +249 -172
  3. package/dist/{PreviewEditorUI-sWMLp5dT.mjs → PreviewEditorUI-D6eb6fkx.mjs} +68 -60
  4. package/dist/{PreviewQueryProvider-Cg51xq1w.mjs → PreviewQueryProvider-5znTyJuz.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-h2ti3Hch.mjs → SdkPreviewModeRuntime-DJ6utQ_R.mjs} +1180 -475
  6. package/dist/{SiteChromeCustomizeContext-DEACFH9m.mjs → SiteChromeCustomizeContext-CFJYh6vo.mjs} +199078 -193767
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +198 -33
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +18 -3
  9. package/dist/_dts/api/src/accessAdmin.d.ts +0 -4
  10. package/dist/_dts/api/src/accountApi.d.ts +6 -6
  11. package/dist/_dts/api/src/admin.d.ts +22 -22
  12. package/dist/_dts/api/src/aiPatch.d.ts +2 -2
  13. package/dist/_dts/api/src/aiPlayground.d.ts +1 -0
  14. package/dist/_dts/api/src/analytics.d.ts +2 -2
  15. package/dist/_dts/api/src/apiEndpointTypes.d.ts +2 -0
  16. package/dist/_dts/api/src/appointmentSetup.d.ts +2 -2
  17. package/dist/_dts/api/src/auth.d.ts +10 -10
  18. package/dist/_dts/api/src/availability.d.ts +6 -6
  19. package/dist/_dts/api/src/billing.d.ts +42 -15
  20. package/dist/_dts/api/src/billingEndpointDefinitions.d.ts +8 -0
  21. package/dist/_dts/api/src/billingEndpointTypes.d.ts +15 -6
  22. package/dist/_dts/api/src/blocks.d.ts +15 -14
  23. package/dist/_dts/api/src/blocksKeys.d.ts +2 -0
  24. package/dist/_dts/api/src/bookingConfig.d.ts +16 -2
  25. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +4 -13
  26. package/dist/_dts/api/src/bookingOperations.d.ts +6 -48
  27. package/dist/_dts/api/src/bookingPeople.d.ts +92 -0
  28. package/dist/_dts/api/src/bookingPeopleEndpointDefinitions.d.ts +38 -0
  29. package/dist/_dts/api/src/bookingRecords.d.ts +12 -49
  30. package/dist/_dts/api/src/bookingSettingsSections.d.ts +1 -1
  31. package/dist/_dts/api/src/bookings.d.ts +8 -7
  32. package/dist/_dts/api/src/calendar.d.ts +9 -9
  33. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +7 -6
  34. package/dist/_dts/api/src/common/envelope.d.ts +2 -2
  35. package/dist/_dts/api/src/content-editor.d.ts +2 -2
  36. package/dist/_dts/api/src/contentEntries.d.ts +17 -48
  37. package/dist/_dts/api/src/contentRuntime.d.ts +51 -37
  38. package/dist/_dts/api/src/contentTypes.d.ts +11 -11
  39. package/dist/_dts/api/src/contentVersionHistoryClient.d.ts +6 -6
  40. package/dist/_dts/api/src/documentLifecycle.d.ts +67 -0
  41. package/dist/_dts/api/src/domains.d.ts +16 -16
  42. package/dist/_dts/api/src/editLeaseEndpoints.d.ts +72 -0
  43. package/dist/_dts/api/src/emailSettings.d.ts +4 -4
  44. package/dist/_dts/api/src/endpoints.d.ts +725 -607
  45. package/dist/_dts/api/src/eventEmailTemplates.d.ts +2 -2
  46. package/dist/_dts/api/src/eventManagementContracts.d.ts +48 -8
  47. package/dist/_dts/api/src/eventManagementEndpointDefinitions.d.ts +1 -9
  48. package/dist/_dts/api/src/eventPageWords.d.ts +7 -12
  49. package/dist/_dts/api/src/footerSettings.d.ts +6 -6
  50. package/dist/_dts/api/src/index.d.ts +8 -6
  51. package/dist/_dts/api/src/indexCoreTypes.d.ts +2 -1
  52. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  53. package/dist/_dts/api/src/launchReadiness.d.ts +1 -6
  54. package/dist/_dts/api/src/mailingListIntegration.d.ts +6 -0
  55. package/dist/_dts/api/src/navigation/dashboardBookingsNav.d.ts +1 -1
  56. package/dist/_dts/api/src/navigation.d.ts +5 -5
  57. package/dist/_dts/api/src/newsletterEndpointDefinitions.d.ts +15 -0
  58. package/dist/_dts/api/src/occurrenceScheduling.d.ts +19 -0
  59. package/dist/_dts/api/src/pageSurfaceEditorEndpoints.d.ts +55 -0
  60. package/dist/_dts/api/src/pageSurfaceEndpoints.d.ts +28 -7
  61. package/dist/_dts/api/src/pages.d.ts +7 -7
  62. package/dist/_dts/api/src/performance.d.ts +1 -1
  63. package/dist/_dts/api/src/public/index.d.ts +1 -1
  64. package/dist/_dts/api/src/publicAppointmentBookingContracts.d.ts +50 -0
  65. package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +4 -0
  66. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +7 -0
  67. package/dist/_dts/api/src/redirects.d.ts +3 -3
  68. package/dist/_dts/api/src/request.d.ts +10 -1
  69. package/dist/_dts/api/src/resources.d.ts +4 -4
  70. package/dist/_dts/api/src/routes.d.ts +8 -3
  71. package/dist/_dts/api/src/sdk-event-upsert.d.ts +15 -1
  72. package/dist/_dts/api/src/sdkBlockUpsertContracts.d.ts +21 -0
  73. package/dist/_dts/api/src/sdkContracts.d.ts +5 -28
  74. package/dist/_dts/api/src/sdkCourseBooking.d.ts +4 -4
  75. package/dist/_dts/api/src/sdkEventEndpointDefinitions.d.ts +1 -1
  76. package/dist/_dts/api/src/sdkEventOccurrenceRequestContracts.d.ts +43 -0
  77. package/dist/_dts/api/src/sdkManagedEventContracts.d.ts +4 -2
  78. package/dist/_dts/api/src/sdkPullEventContracts.d.ts +8 -1
  79. package/dist/_dts/api/src/seo.d.ts +4 -4
  80. package/dist/_dts/api/src/services.d.ts +4 -4
  81. package/dist/_dts/api/src/siteLifecycleEndpoints.d.ts +61 -0
  82. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +19 -25
  83. package/dist/_dts/api/src/siteMembers.d.ts +10 -10
  84. package/dist/_dts/api/src/siteOnboarding.d.ts +16 -14
  85. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +7 -3
  86. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +5 -12
  87. package/dist/_dts/api/src/siteRuntimeEntry.d.ts +31 -0
  88. package/dist/_dts/billing/src/checkout/platform.d.ts +77 -0
  89. package/dist/_dts/billing/src/components/index.d.ts +25 -40
  90. package/dist/_dts/billing/src/membership/index.d.ts +1 -3
  91. package/dist/_dts/billing/src/plans/entitlements.d.ts +80 -0
  92. package/dist/_dts/billing/src/plans/registry.d.ts +16 -16
  93. package/dist/_dts/billing/src/plans/standing.d.ts +9 -2
  94. package/dist/_dts/billing/src/plans/types.d.ts +5 -15
  95. package/dist/_dts/billing/src/site-arrangements.d.ts +2 -2
  96. package/dist/_dts/billing/src/subscriptions/standingEvidence.d.ts +2 -4
  97. package/dist/_dts/billing/src/subscriptions/store.d.ts +17 -11
  98. package/dist/_dts/block-form/src/backend/store-backend.d.ts +6 -7
  99. package/dist/_dts/block-form/src/backend/types.d.ts +7 -0
  100. package/dist/_dts/block-form/src/widgets/FieldFrame.d.ts +3 -1
  101. package/dist/_dts/blocks/src/PageRenderer.d.ts +3 -4
  102. package/dist/_dts/blocks/src/client/events.d.ts +3 -0
  103. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +24 -4
  104. package/dist/_dts/blocks/src/index.d.ts +1 -1
  105. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +18 -9
  106. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +4 -0
  107. package/dist/_dts/blocks/src/portal/types.d.ts +0 -2
  108. package/dist/_dts/blocks/src/system/blocks/contact-newsletter.d.ts +2 -1
  109. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +3 -1
  110. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +4 -4
  111. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +6 -1
  112. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +4 -1
  113. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +2 -2
  114. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  115. package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +6 -0
  116. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +18 -0
  117. package/dist/_dts/blocks/src/system/runtime/api/types/portal.d.ts +6 -0
  118. package/dist/_dts/blocks/src/system/runtime/api/types/shop.d.ts +4 -0
  119. package/dist/_dts/blocks/src/system/runtime/components/booking/SuccessMessage.d.ts +4 -1
  120. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +36 -6
  121. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +18 -3
  122. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +11 -0
  123. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +2 -0
  124. package/dist/_dts/blocks/src/system/runtime/hooks/usePaymentVerification.d.ts +2 -1
  125. package/dist/_dts/blocks/src/system/runtime/hooks/usePolling.d.ts +7 -48
  126. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.checkout-return-context.d.ts +7 -0
  127. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.completion.d.ts +11 -0
  128. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +13 -0
  129. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +28 -0
  130. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-choice.d.ts +5 -0
  131. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-state.d.ts +9 -0
  132. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.payment-confirmation.d.ts +13 -0
  133. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.reserved-fields.d.ts +1 -1
  134. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.server.d.ts +1 -1
  135. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +17 -1
  136. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-actions.d.ts +8 -0
  137. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-handler.d.ts +9 -0
  138. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-success.d.ts +9 -0
  139. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +4 -0
  140. package/dist/_dts/blocks/src/system/runtime/nodes/checkout.server.d.ts +2 -1
  141. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/AttendeeDetailsStep.d.ts +3 -0
  142. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +2 -1
  143. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizard.d.ts +5 -0
  144. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/SuccessStep.d.ts +7 -1
  145. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +3 -0
  146. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/sessionStorage.d.ts +2 -0
  147. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +8 -0
  148. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +5 -5
  149. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +8 -0
  150. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +18 -5
  151. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventListing.interactive.d.ts +6 -0
  152. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/dates.d.ts +37 -3
  153. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCard.client.d.ts +1 -1
  154. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCard.d.ts +16 -1
  155. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCardPresentations.d.ts +13 -0
  156. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +5 -5
  157. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.block-submission.d.ts +2 -4
  158. package/dist/_dts/blocks/src/system/runtime/nodes/shared/MagicLinkForm.d.ts +1 -14
  159. package/dist/_dts/blocks/src/system/runtime/nodes/shared/MagicLinkForm.state.d.ts +12 -0
  160. package/dist/_dts/blocks/src/system/runtime/nodes/shop.interactive.d.ts +13 -0
  161. package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +2 -0
  162. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingMailingListNote.d.ts +6 -0
  163. package/dist/_dts/blocks/src/system/runtime/shared/components/DemoBookingPortalAccess.d.ts +22 -0
  164. package/dist/_dts/blocks/src/system/runtime/shared/components/DemoPortalSignInLink.d.ts +4 -0
  165. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +1 -0
  166. package/dist/_dts/blocks/src/system/runtime/shared/mailingListSignupCopy.d.ts +6 -0
  167. package/dist/_dts/blocks/src/system/runtime/shared/types.d.ts +1 -0
  168. package/dist/_dts/blocks/src/system/runtime/shared/utils/demoBookingPassStorage.d.ts +10 -0
  169. package/dist/_dts/blocks/src/system/runtime/shared/utils/demoPortalMagicLink.d.ts +29 -0
  170. package/dist/_dts/blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.d.ts +3 -2
  171. package/dist/_dts/blocks/src/system/transforms/registry/core.d.ts +2 -0
  172. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +1 -3
  173. package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +4 -0
  174. package/dist/_dts/content-editor/src/components/ContentFieldsForm.d.ts +2 -7
  175. package/dist/_dts/content-editor/src/controller/EditLeaseController.d.ts +39 -0
  176. package/dist/_dts/content-editor/src/controller/EditorWriteGate.d.ts +38 -0
  177. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +25 -61
  178. package/dist/_dts/content-editor/src/controller/LinkedEntryLeaseBanner.d.ts +7 -0
  179. package/dist/_dts/content-editor/src/controller/LinkedEntryLeaseControllers.d.ts +14 -0
  180. package/dist/_dts/content-editor/src/controller/deriveEditorUnpublishedState.d.ts +6 -0
  181. package/dist/_dts/content-editor/src/controller/documentValueBaseline.d.ts +25 -0
  182. package/dist/_dts/content-editor/src/controller/editLeaseLossSignal.d.ts +6 -0
  183. package/dist/_dts/content-editor/src/controller/editLeaseNotice.d.ts +28 -0
  184. package/dist/_dts/content-editor/src/controller/editorClientId.d.ts +2 -0
  185. package/dist/_dts/content-editor/src/controller/editorEditability.d.ts +38 -0
  186. package/dist/_dts/content-editor/src/controller/editorLeaseParticipation.d.ts +34 -0
  187. package/dist/_dts/content-editor/src/controller/normalizedMetadataBaseline.d.ts +29 -0
  188. package/dist/_dts/content-editor/src/controller/pageSurfaceDocumentBaselines.d.ts +14 -0
  189. package/dist/_dts/content-editor/src/controller/pageSurfaceLifecycle.d.ts +11 -0
  190. package/dist/_dts/content-editor/src/controller/planDocumentBaselineRefresh.d.ts +19 -0
  191. package/dist/_dts/content-editor/src/controller/readDocumentLeaseBaselines.d.ts +19 -0
  192. package/dist/_dts/content-editor/src/controller/refreshDocumentLeaseBaseline.d.ts +12 -0
  193. package/dist/_dts/content-editor/src/controller/refreshLinkedEntry.d.ts +17 -0
  194. package/dist/_dts/content-editor/src/controller/replayRestoredEditorEffects.d.ts +2 -3
  195. package/dist/_dts/content-editor/src/controller/routeWrites.d.ts +26 -0
  196. package/dist/_dts/content-editor/src/controller/useAutosaveTriggers.d.ts +16 -17
  197. package/dist/_dts/content-editor/src/controller/useBlockedPublishPlan.d.ts +6 -2
  198. package/dist/_dts/content-editor/src/controller/useBlocksList.d.ts +3 -3
  199. package/dist/_dts/content-editor/src/controller/useEntryValueAutosaves.d.ts +21 -0
  200. package/dist/_dts/content-editor/src/controller/useInitialEditorUiStore.d.ts +24 -0
  201. package/dist/_dts/content-editor/src/controller/useServerBaselineReconciliation.d.ts +17 -0
  202. package/dist/_dts/content-editor/src/footerComposerPanelTypes.d.ts +1 -1
  203. package/dist/_dts/content-editor/src/hooks/applyBlockedPublishPlan.d.ts +5 -1
  204. package/dist/_dts/content-editor/src/hooks/blockDraftLifecycle.d.ts +8 -47
  205. package/dist/_dts/content-editor/src/hooks/editLeaseMachine.d.ts +120 -0
  206. package/dist/_dts/content-editor/src/hooks/publishability.d.ts +6 -10
  207. package/dist/_dts/content-editor/src/hooks/useAutosaveStatus.d.ts +3 -0
  208. package/dist/_dts/content-editor/src/hooks/useBlockAutosave.d.ts +5 -15
  209. package/dist/_dts/content-editor/src/hooks/useDebouncedLatestSave.d.ts +7 -5
  210. package/dist/_dts/content-editor/src/hooks/useEditLease.d.ts +28 -0
  211. package/dist/_dts/content-editor/src/hooks/useEntryActions.d.ts +25 -39
  212. package/dist/_dts/content-editor/src/hooks/useEntryMutations.d.ts +17 -19
  213. package/dist/_dts/content-editor/src/hooks/useLinkedEntryAutosave.d.ts +5 -8
  214. package/dist/_dts/content-editor/src/hooks/useValueAutosave.d.ts +64 -0
  215. package/dist/_dts/content-editor/src/hooks/validateBlocksForPublish.d.ts +0 -7
  216. package/dist/_dts/content-editor/src/index.d.ts +26 -7
  217. package/dist/_dts/content-editor/src/linkedEntries/domain.d.ts +12 -0
  218. package/dist/_dts/content-editor/src/linkedEntries/owner.d.ts +9 -0
  219. package/dist/_dts/content-editor/src/liveDrafts/draftProjection.d.ts +66 -0
  220. package/dist/_dts/content-editor/src/liveDrafts/linkedSaveHandovers.d.ts +37 -0
  221. package/dist/_dts/content-editor/src/liveDrafts/remoteDraftOverlay.d.ts +113 -0
  222. package/dist/_dts/content-editor/src/liveDrafts/useLiveDrafts.d.ts +32 -0
  223. package/dist/_dts/content-editor/src/liveDrafts/useRetentionTicks.d.ts +7 -0
  224. package/dist/_dts/content-editor/src/primitives/shared/activePreviewField.d.ts +6 -0
  225. package/dist/_dts/content-editor/src/primitives/shared/storeBinding.d.ts +1 -0
  226. package/dist/_dts/content-editor/src/services/contentEntryServices.d.ts +96 -19
  227. package/dist/_dts/content-editor/src/services/editorApiClient.d.ts +13 -0
  228. package/dist/_dts/content-editor/src/services/index.d.ts +2 -0
  229. package/dist/_dts/content-editor/src/services/pageSurfaceEditorServices.d.ts +23 -0
  230. package/dist/_dts/content-editor/src/sync/flushValues.d.ts +13 -0
  231. package/dist/_dts/content-editor/src/sync/lifecycleFailure.d.ts +51 -0
  232. package/dist/_dts/content-editor/src/sync/runLifecycle.d.ts +64 -0
  233. package/dist/_dts/content-editor/src/sync/schedulerValues.d.ts +27 -0
  234. package/dist/_dts/content-editor/src/sync/sendPlanning.d.ts +104 -0
  235. package/dist/_dts/content-editor/src/sync/valueSync.d.ts +114 -0
  236. package/dist/_dts/content-editor/src/ui/blockCollection.d.ts +8 -0
  237. package/dist/_dts/content-editor/src/ui/documentLifecycle.d.ts +18 -0
  238. package/dist/_dts/content-editor/src/ui/editorLeaseUiState.d.ts +7 -0
  239. package/dist/_dts/content-editor/src/ui/editorRefresh.d.ts +82 -0
  240. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +102 -127
  241. package/dist/_dts/content-editor/src/ui/editorTransactionState.d.ts +1 -1
  242. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +126 -72
  243. package/dist/_dts/content-editor/src/ui/editorValueSnapshot.d.ts +18 -0
  244. package/dist/_dts/content-editor/src/ui/serverBlockAdmission.d.ts +26 -0
  245. package/dist/_dts/content-editor/src/ui/stores/autosaveStore.d.ts +16 -27
  246. package/dist/_dts/content-editor/src/ui/stores/blockVersionsStore.d.ts +24 -0
  247. package/dist/_dts/content-editor/src/ui/stores/linkedEntryLeaseStore.d.ts +54 -0
  248. package/dist/_dts/content-editor/src/ui/stores/linkedSaveHandoversStore.d.ts +11 -0
  249. package/dist/_dts/content-editor/src/ui/stores/remoteDraftsStore.d.ts +10 -0
  250. package/dist/_dts/content-editor/src/ui/stores/types.d.ts +63 -3
  251. package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +2 -2
  252. package/dist/_dts/content-editor/src/useFooterNavigationLayout.d.ts +1 -1
  253. package/dist/_dts/content-model/src/content-types/builtin-schemas.d.ts +4 -4
  254. package/dist/_dts/content-model/src/content-types/builtins.d.ts +4 -4
  255. package/dist/_dts/content-model/src/definitions/shared.d.ts +11 -2
  256. package/dist/_dts/content-model/src/entry-slots/index.d.ts +1 -0
  257. package/dist/_dts/content-model/src/entry-slots/serializeAllowedBlocks.d.ts +2 -0
  258. package/dist/_dts/content-model/src/metadataConfig.d.ts +10 -38
  259. package/dist/_dts/content-model/src/templates/defaults.d.ts +0 -1
  260. package/dist/_dts/content-model/src/types.d.ts +0 -1
  261. package/dist/_dts/core/src/block-content-identity.d.ts +49 -1
  262. package/dist/_dts/core/src/branded.d.ts +12 -0
  263. package/dist/_dts/core/src/currency-format.d.ts +8 -2
  264. package/dist/_dts/core/src/demo-lifecycle-status.d.ts +2 -2
  265. package/dist/_dts/core/src/demo-warm-pool-target.d.ts +8 -0
  266. package/dist/_dts/core/src/edit-lease.d.ts +55 -0
  267. package/dist/_dts/core/src/editor-state.d.ts +38 -13
  268. package/dist/_dts/core/src/editor-value-sync.d.ts +79 -0
  269. package/dist/_dts/core/src/html-entities.d.ts +6 -0
  270. package/dist/_dts/core/src/index.d.ts +5 -1
  271. package/dist/_dts/core/src/mailing-list-runtime.d.ts +15 -0
  272. package/dist/_dts/core/src/mailing-list-setup.d.ts +2 -0
  273. package/dist/_dts/core/src/mailing-list-submission.d.ts +6 -0
  274. package/dist/_dts/core/src/navigation-portal-labels.d.ts +9 -0
  275. package/dist/_dts/core/src/participants.d.ts +0 -38
  276. package/dist/_dts/core/src/uuid.d.ts +7 -5
  277. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +261 -175
  278. package/dist/_dts/editor/src/EditorProvider.d.ts +5 -0
  279. package/dist/_dts/editor/src/chrome/EditorChrome.d.ts +14 -0
  280. package/dist/_dts/editor/src/chrome/EditorStatusBar.d.ts +1 -0
  281. package/dist/_dts/editor/src/chrome/statusBarPresentation.d.ts +0 -1
  282. package/dist/_dts/editor/src/index.d.ts +1 -1
  283. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +10 -9
  284. package/dist/_dts/editor-blocks/src/BlockForm.d.ts +1 -1
  285. package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +1 -1
  286. package/dist/_dts/editor-blocks/src/block-editor/BlockCardFrame.d.ts +1 -1
  287. package/dist/_dts/editor-blocks/src/block-editor/BlockSettingsModal.d.ts +1 -1
  288. package/dist/_dts/editor-blocks/src/block-editor/actionPresentation.d.ts +1 -0
  289. package/dist/_dts/editor-blocks/src/block-editor/applyExtendedFieldDefaults.d.ts +3 -4
  290. package/dist/_dts/editor-blocks/src/block-editor/blockDraftBaselineSeed.d.ts +4 -8
  291. package/dist/_dts/editor-blocks/src/block-editor/editorBlockItem.d.ts +23 -0
  292. package/dist/_dts/editor-blocks/src/block-editor/generatedIconApplyCoordination.d.ts +2 -7
  293. package/dist/_dts/editor-blocks/src/block-editor/hooks/applyBlockStructureChange.d.ts +4 -0
  294. package/dist/_dts/editor-blocks/src/block-editor/hooks/buildInsertBlockHistoryCommand.d.ts +14 -5
  295. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockBaselineSync.d.ts +21 -19
  296. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockCreation.d.ts +2 -10
  297. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockDuplication.d.ts +8 -16
  298. package/dist/_dts/editor-blocks/src/block-editor/owner.d.ts +6 -16
  299. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +37 -9
  300. package/dist/_dts/editor-blocks/src/index.d.ts +2 -1
  301. package/dist/_dts/editor-blocks/src/widgets/entry-picker/loaders.d.ts +1 -1
  302. package/dist/_dts/editor-blocks/src/widgets/link/loaders.d.ts +1 -1
  303. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/loaders.d.ts +1 -1
  304. package/dist/_dts/editor-blocks/src/widgets/reference/loaders.d.ts +1 -1
  305. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/loaders.d.ts +3 -2
  306. package/dist/_dts/media-core/src/fileStorage.d.ts +4 -0
  307. package/dist/_dts/media-editor/src/context.d.ts +1 -1
  308. package/dist/_dts/media-editor/src/createMediaEditorProvider.d.ts +1 -2
  309. package/dist/_dts/media-editor/src/provider.d.ts +3 -2
  310. package/dist/_dts/media-react/src/hooks/internal/classification.d.ts +1 -1
  311. package/dist/_dts/media-react/src/hooks/useApiMediaUploader.d.ts +3 -1
  312. package/dist/_dts/preview-next/src/client/blocks/EditablePageRenderer.d.ts +7 -1
  313. package/dist/_dts/preview-next/src/client/blocks/composer/mergeDrafts.d.ts +8 -3
  314. package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +10 -6
  315. package/dist/_dts/preview-next/src/client/blocks/linkedEntryRenderOverlay.d.ts +22 -2
  316. package/dist/_dts/preview-next/src/client/blocks/previewProjection/entryFieldRebinding.d.ts +13 -0
  317. package/dist/_dts/preview-next/src/client/blocks/previewProjection/index.d.ts +2 -1
  318. package/dist/_dts/preview-next/src/client/blocks/previewProjection/types.d.ts +11 -1
  319. package/dist/_dts/preview-next/src/client/blocks/renderPrecedence.d.ts +17 -0
  320. package/dist/_dts/preview-next/src/client/blocks/useLinkedSaveHandoverRetention.d.ts +20 -0
  321. package/dist/_dts/preview-next/src/client/index.d.ts +1 -1
  322. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +2 -1
  323. package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +2 -1
  324. package/dist/_dts/preview-next/src/client/preview/PreviewAccessBanners.d.ts +7 -0
  325. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -1
  326. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +24 -14
  327. package/dist/_dts/preview-next/src/client/preview/PreviewLeaseEditingMode.d.ts +2 -0
  328. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +9 -2
  329. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +1 -0
  330. package/dist/_dts/preview-next/src/client/preview/previewCustomizeAutosave.d.ts +5 -0
  331. package/dist/_dts/preview-next/src/client/preview/previewCustomizeWorkflowState.d.ts +3 -4
  332. package/dist/_dts/preview-next/src/client/preview/sdkConfig.d.ts +1 -0
  333. package/dist/_dts/preview-next/src/client/preview/usePreviewCustomizeWorkflowState.d.ts +4 -0
  334. package/dist/_dts/realtime/src/client.d.ts +3 -0
  335. package/dist/_dts/realtime/src/draftChannel.d.ts +91 -0
  336. package/dist/_dts/realtime/src/drafts.d.ts +210 -0
  337. package/dist/_dts/realtime/src/index.d.ts +3 -0
  338. package/dist/_dts/realtime/src/leaseChangeSubscriptions.d.ts +8 -0
  339. package/dist/_dts/realtime/src/types.d.ts +113 -0
  340. package/dist/_dts/realtime/src/useDraftChannel.d.ts +34 -0
  341. package/dist/_dts/realtime/src/useSiteRealtimeReload.d.ts +27 -0
  342. package/dist/_dts/sdk/src/public-api/contracts.d.ts +6 -55
  343. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +2 -0
  344. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +2 -0
  345. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +1 -1
  346. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +4 -2
  347. package/dist/_dts/sdk/src/version.d.ts +1 -1
  348. package/dist/_dts/surfaces/src/index.d.ts +1 -0
  349. package/dist/_dts/theme-core/src/buttons/effects/types.d.ts +1 -1
  350. package/dist/_dts/theme-core/src/footer/effectiveNavLinkStyle.d.ts +13 -0
  351. package/dist/_dts/theme-core/src/footer/index.d.ts +1 -0
  352. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  353. package/dist/_dts/theme-core/src/header/effectiveNavLinkStyle.d.ts +17 -0
  354. package/dist/_dts/theme-core/src/header/generateHeaderLogoStyles.d.ts +15 -0
  355. package/dist/_dts/theme-core/src/header/generateHeaderNavLinkStyles.d.ts +4 -0
  356. package/dist/_dts/theme-core/src/header/index.d.ts +3 -0
  357. package/dist/_dts/theme-core/src/header/legacyNavLinkStyle.d.ts +1 -1
  358. package/dist/_dts/theme-core/src/header/openingForegroundProjection.d.ts +7 -0
  359. package/dist/_dts/theme-core/src/header/rootPaint.d.ts +4 -0
  360. package/dist/_dts/theme-core/src/navigation/effectPolicy.d.ts +38 -0
  361. package/dist/_dts/theme-core/src/navigation/generateNavLinkCSS.d.ts +4 -0
  362. package/dist/_dts/theme-core/src/navigation/types.d.ts +4 -0
  363. package/dist/_dts/theme-core/src/site-styles/accessibleSurfaces.d.ts +1 -1
  364. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -2
  365. package/dist/_dts/theme-core/src/surfaces/foregroundContract.d.ts +7 -0
  366. package/dist/_dts/theme-core/src/surfaces/foregroundInteraction.d.ts +29 -22
  367. package/dist/_dts/theme-core/src/surfaces/foregroundRoles.d.ts +10 -2
  368. package/dist/_dts/theme-core/src/surfaces/resolveSurfaceForeground.d.ts +9 -0
  369. package/dist/_dts/theme-core/src/utils/cssDeclarations.d.ts +2 -0
  370. package/dist/_dts/ui/src/badge.d.ts +2 -1
  371. package/dist/_dts/ui/src/button.d.ts +1 -1
  372. package/dist/_dts/ui/src/combobox-keys.d.ts +23 -0
  373. package/dist/_dts/ui/src/combobox-rows.d.ts +34 -0
  374. package/dist/_dts/ui/src/combobox.d.ts +26 -1
  375. package/dist/_dts/ui/src/date-picker.d.ts +5 -8
  376. package/dist/_dts/ui/src/editor-item-card.d.ts +1 -0
  377. package/dist/_dts/ui/src/field-trigger.d.ts +39 -0
  378. package/dist/_dts/ui/src/fieldControl.d.ts +27 -0
  379. package/dist/_dts/ui/src/index.d.ts +4 -1
  380. package/dist/_dts/ui/src/native-select.d.ts +8 -0
  381. package/dist/_dts/ui/src/popover.d.ts +7 -1
  382. package/dist/_dts/ui/src/segmented-control.d.ts +4 -0
  383. package/dist/_dts/ui/src/surface.d.ts +1 -1
  384. package/dist/client/{BookingConsentAgreement-BQKL045f.mjs → BookingMailingListNote-CzRt2dF_.mjs} +110 -97
  385. package/dist/client/{CheckboxChoice--W2n6yKs.mjs → CheckboxChoice-B33MqoUo.mjs} +1 -1
  386. package/dist/client/DemoBookingPortalAccess-mxqwap3f.mjs +344 -0
  387. package/dist/client/{EventCombined.client-BdRjVbhH.mjs → EventCombined.client-CDb11igO.mjs} +7 -7
  388. package/dist/client/{EventListing.client-DBxC6xOU.mjs → EventListing.client-EgYhzKPa.mjs} +2 -2
  389. package/dist/client/{LeafletStaticMap-mHEJKrTs.mjs → LeafletStaticMap-gtmtaA2b.mjs} +1 -1
  390. package/dist/client/{scrollToBlock-BNgaEUpo.mjs → TerminalPanel-DvNUP5ot.mjs} +77 -77
  391. package/dist/client/{ThemedButton-CE5KYT6z.mjs → ThemedButton-C7CeUJjW.mjs} +2 -2
  392. package/dist/client/{accordion-BEQNSptH.mjs → accordion-kjvt49rA.mjs} +1 -1
  393. package/dist/client/{bookingForm-AMr-s5vw.mjs → bookingForm-pbRZordh.mjs} +411 -141
  394. package/dist/client/bookings.mjs +966 -396
  395. package/dist/client/{carousel-Bbt_QgJy.mjs → carousel-f4Zbmicv.mjs} +2 -2
  396. package/dist/client/{carousel.client-jahpU9Vz.mjs → carousel.client-A2lG-9od.mjs} +1 -1
  397. package/dist/client/{cart-CnWi30zJ.mjs → cart-DO20An50.mjs} +3 -3
  398. package/dist/client/{checkout-f3nkWgd4.mjs → checkout-Du5amDR_.mjs} +3 -3
  399. package/dist/client/{checkoutUrls-CW3-78uu.mjs → checkoutUrls-CXhko2Rv.mjs} +1 -1
  400. package/dist/client/client.mjs +3837 -2202
  401. package/dist/client/{colorStyles-CuJBiS-1.mjs → colorStyles-j5U9v5JA.mjs} +5 -1
  402. package/dist/client/{context-Bc8T6pCe.mjs → context-eW97E945.mjs} +4 -3
  403. package/dist/client/{dates-DUsCEzLb.mjs → dates-jPCirRea.mjs} +56 -11
  404. package/dist/client/{eventCalendar-CKwgXui5.mjs → eventCalendar-C2M-iE4j.mjs} +10 -10
  405. package/dist/client/{eventCombined-CBAOSTGR.mjs → eventCombined-W6ns3LHg.mjs} +4 -4
  406. package/dist/client/{eventDetails-Dh-_WiBD.mjs → eventDetails-CR-GT0f0.mjs} +4 -4
  407. package/dist/client/{eventListing-CA3frIH5.mjs → eventListing-BK8AfYZz.mjs} +4 -4
  408. package/dist/client/{eventRegistration-BHtsgdcg.mjs → eventRegistration-BJSd4KUu.mjs} +461 -266
  409. package/dist/client/{form-C2h3YAcg.mjs → form-BvpfbQaT.mjs} +5 -5
  410. package/dist/client/{headerSection-lwMuMTH9.mjs → headerSection-I5sUQ8x-.mjs} +3 -3
  411. package/dist/client/hooks.mjs +909 -163
  412. package/dist/client/{locationMap-DJ2bLODV.mjs → locationMap-BLvwf9_f.mjs} +4 -4
  413. package/dist/client/{FieldValidationMessage-AYanWFb-.mjs → mailingListSignupCopy-DZSHZrm6.mjs} +14 -1
  414. package/dist/client/{media-BtJ37tzS.mjs → media-Cl38iOMI.mjs} +11 -4
  415. package/dist/client/{newsletterForm-8Pu5K32g.mjs → newsletterForm-DrQ2weE8.mjs} +6 -6
  416. package/dist/client/{pricing-HHx3IgBz.mjs → pricing-BES87mrR.mjs} +1 -1
  417. package/dist/client/{productDetail-C_1odnAf.mjs → productDetail-Url9jcc5.mjs} +3 -3
  418. package/dist/client/{productList-CtCv-Nmx.mjs → productList-DE7ngEZJ.mjs} +3 -3
  419. package/dist/client/{propsDecoder-Dcgsncxb.mjs → propsDecoder-D1OtGXDV.mjs} +140 -22
  420. package/dist/client/rendering/client.mjs +2366 -997
  421. package/dist/client/rendering/islands.mjs +19 -19
  422. package/dist/client/rendering.mjs +4607 -2884
  423. package/dist/client/{routeIslandApiConfig-CWLP7wu3.mjs → routeIslandApiConfig-BG9Y-SHg.mjs} +1 -1
  424. package/dist/client/{shop-DQXrQ8kJ.mjs → shop-CJkuySJ3.mjs} +126 -79
  425. package/dist/client/{shop-commerce-B88zmWWo.mjs → shop-commerce-4rKj5n9h.mjs} +26 -14
  426. package/dist/client/{shop-commerce-store-DtSfkKuX.mjs → shop-commerce-store-Bxm75Pg6.mjs} +1 -1
  427. package/dist/client/{shopShared-cuaONpkJ.mjs → shopShared-DpoQDWfz.mjs} +5 -5
  428. package/dist/client/{useEventFilters-Bukew6Gb.mjs → useEventFilters-D8HliSqR.mjs} +33 -18
  429. package/dist/preview-next/before-render.mjs +314 -133
  430. package/dist/preview-next/client/runtime.mjs +4 -4
  431. package/dist/preview-next/editor-base.css +53 -2
  432. package/dist/preview-next/editor-chrome.css +7 -4
  433. package/dist/preview-next/keepAlive.mjs +314 -133
  434. package/dist/preview-next/middleware.mjs +314 -133
  435. package/dist/{previewAuthStore-h5IgbSp4.mjs → previewAuthStore-BXXF3hhW.mjs} +316 -133
  436. package/dist/{sdk-runtime-DTc1uIXn.mjs → sdk-runtime-C2a05WjL.mjs} +2 -2
  437. package/dist/{separator-BpHS1KZK.mjs → separator-CuNhBAhS.mjs} +1 -1
  438. package/dist/server/components.mjs +6888 -6157
  439. package/dist/server/config-validation.mjs +931 -199
  440. package/dist/server/config.mjs +931 -199
  441. package/dist/server/data.mjs +929 -198
  442. package/dist/server/index.mjs +317 -134
  443. package/dist/server/navigation.mjs +13 -2
  444. package/dist/server/next.mjs +5003 -4340
  445. package/dist/server/page-converter.mjs +160 -78
  446. package/dist/server/prebuild.mjs +1 -1
  447. package/dist/server/rendering/server.mjs +6421 -5687
  448. package/dist/server/rendering.mjs +7683 -6933
  449. package/dist/server/routing.mjs +1035 -338
  450. package/dist/server/server.mjs +946 -256
  451. package/dist/server/theme-bridge.mjs +66 -17
  452. package/dist/server/theme.mjs +5 -1
  453. package/dist/styles/index.css +32 -4
  454. package/package.json +1 -1
  455. package/dist/_dts/billing/src/plans/display.d.ts +0 -15
  456. package/dist/_dts/content-editor/src/controller/buildBlockPublishedBaselines.d.ts +0 -4
  457. package/dist/_dts/content-editor/src/controller/buildPublishSuccessTransition.d.ts +0 -16
  458. package/dist/_dts/content-editor/src/controller/driver.d.ts +0 -14
  459. package/dist/_dts/content-editor/src/controller/seedDraftBaselinesFromBlocks.d.ts +0 -7
  460. package/dist/_dts/content-editor/src/controller/useEntrySyncHelpers.d.ts +0 -29
  461. package/dist/_dts/content-editor/src/hooks/autosaveScopePlanning.d.ts +0 -26
  462. package/dist/_dts/content-editor/src/hooks/useSimpleAutosave.d.ts +0 -64
  463. package/dist/_dts/content-editor/src/hooks/useStoreAutosave.d.ts +0 -48
  464. package/dist/_dts/content-editor/src/types.d.ts +0 -44
  465. package/dist/_dts/core/src/participant-identity.d.ts +0 -135
  466. package/dist/client/DiscountCodeDisclosure-CsOtjFY7.mjs +0 -137
@@ -1,20 +1,20 @@
1
1
  "use client";
2
- import { C as unsafeAsPassId, b as unsafeAsCustomerPassId, v as unsafeAsAppointmentResourceId, x as unsafeAsFormId, y as unsafeAsAppointmentServiceId } from "./colorStyles-CuJBiS-1.mjs";
3
- import { i as buildBookingPaymentSelectionViewModel, n as StepIndicator, r as usePolling, t as BookingConsentAgreement } from "./BookingConsentAgreement-BQKL045f.mjs";
4
- import { At as resolveAppointmentCheckoutVerificationState, Ct as formatBookingSubmissionPreparationError, Dt as isBookingServiceSlidingAmountInRange, Et as getBookingSuccessMessage, Ft as projectSelectedAppointmentConsentIntoForm, Gt as okWith, Ht as clearWorkflowFeedback, It as resolveSelectedAppointmentConsent, Kt as reportWorkflowError, Lt as BOOKING_FORM_DATA_RESERVED_KEYS, Mt as resolveBookingSiteId, Nt as resolveDefaultBookingServiceId, Ot as parseBookingCurrencyInputToCents, Pt as toSelectedCollectionOptionKind, Rt as isBookingRequirementConsentFieldId, St as formatBookingCentsAsCurrencyInput, Tt as getBookingServiceSlidingScale, Ut as err, Vt as assertNever, Zt as addLocalScheduleDays, bt as logger, jt as resolveBookingPaymentStep, kt as prepareBookingSubmission, on as parseBookingLocalDate, qt as reportWorkflowSuccess, rn as formatLocalScheduleDate, sn as resolveBookingTimeZoneId, t as defineIslandPropsDecoder, tn as formatBookingInstant, wt as getBookingRedirectStateFromLocation, xt as deriveBookingFormViewState, yn as formatCurrencyAmount } from "./propsDecoder-Dcgsncxb.mjs";
5
- import { n as useBlockApi, t as BlockApiProvider } from "./context-Bc8T6pCe.mjs";
2
+ import { C as unsafeAsPassId, b as unsafeAsCustomerPassId, v as unsafeAsAppointmentResourceId, x as unsafeAsFormId, y as unsafeAsAppointmentServiceId } from "./colorStyles-j5U9v5JA.mjs";
3
+ import { a as buildBookingPaymentSelectionViewModel, i as usePolling, n as BookingConsentAgreement, r as StepIndicator, t as BookingMailingListNote } from "./BookingMailingListNote-CzRt2dF_.mjs";
4
+ import { At as isBookingServiceSlidingAmountInRange, Bt as BOOKING_FORM_DATA_RESERVED_KEYS, Cn as formatCurrencyAmount, Ct as formatBookingSubmissionPreparationError, Dt as getBookingSuccessCopy, Et as getBookingServiceSlidingScale, Ft as resolveBookingSiteId, Gt as clearWorkflowFeedback, It as resolveDefaultBookingServiceId, Jt as okWith, Kt as err, Lt as toSelectedCollectionOptionKind, Mt as prepareBookingSubmission, Nt as resolveAppointmentCheckoutVerificationState, Pt as resolveBookingPaymentStep, Rt as projectSelectedAppointmentConsentIntoForm, St as formatBookingCentsAsCurrencyInput, Tt as getBookingServicePaymentSelectionMode, Vt as isBookingRequirementConsentFieldId, Wt as assertNever, Xt as reportWorkflowSuccess, Yt as reportWorkflowError, an as formatBookingInstant, bt as logger, dn as resolveBookingTimeZoneId, en as resolveBookingSignupOffer, jt as parseBookingCurrencyInputToCents, sn as formatLocalScheduleDate, t as defineIslandPropsDecoder, tn as addLocalScheduleDays, un as parseBookingLocalDate, wt as getBookingRedirectStateFromLocation, xt as deriveBookingFormViewState, zt as resolveSelectedAppointmentConsent } from "./propsDecoder-D1OtGXDV.mjs";
5
+ import { n as useBlockApi, t as BlockApiProvider } from "./context-eW97E945.mjs";
6
6
  import { n as isSpamProtectionEnabled, r as AltchaWidget, t as getChallengeUrl } from "./src-B833rYRr.mjs";
7
- import { a as CheckIcon, i as StateIcon, n as useDiscountCodeUi, r as TerminalPanel, t as scrollToBlock } from "./scrollToBlock-BNgaEUpo.mjs";
8
- import { t as DiscountCodeDisclosure } from "./DiscountCodeDisclosure-CsOtjFY7.mjs";
9
- import { i as SpinnerNode, t as ThemedButton } from "./ThemedButton-CE5KYT6z.mjs";
7
+ import { o as DiscountCodeDisclosure, p as storeDemoBookingPassIfAvailable, t as BookingConfirmation } from "./DemoBookingPortalAccess-mxqwap3f.mjs";
8
+ import { a as useDiscountCodeUi, i as CheckIcon, n as StateIcon, r as scrollToBlock, t as TerminalPanel } from "./TerminalPanel-DvNUP5ot.mjs";
9
+ import { i as SpinnerNode, t as ThemedButton } from "./ThemedButton-C7CeUJjW.mjs";
10
10
  import { t as FeedbackMessage } from "./FeedbackMessage-CtLvvS_d.mjs";
11
- import { n as getFieldValidationControlProps, t as FieldValidationMessage } from "./FieldValidationMessage-AYanWFb-.mjs";
12
- import { t as buildCheckoutReturnUrls } from "./checkoutUrls-CW3-78uu.mjs";
13
- import { t as CheckboxChoice } from "./CheckboxChoice--W2n6yKs.mjs";
11
+ import { i as getFieldValidationControlProps, r as FieldValidationMessage } from "./mailingListSignupCopy-DZSHZrm6.mjs";
12
+ import { t as buildCheckoutReturnUrls } from "./checkoutUrls-CXhko2Rv.mjs";
13
+ import { t as CheckboxChoice } from "./CheckboxChoice-B33MqoUo.mjs";
14
14
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
15
- import { t as buildRouteIslandApiConfig } from "./routeIslandApiConfig-CWLP7wu3.mjs";
15
+ import { t as buildRouteIslandApiConfig } from "./routeIslandApiConfig-BG9Y-SHg.mjs";
16
16
  import React, { useCallback, useEffect, useLayoutEffect, useMemo, useReducer, useRef, useState } from "react";
17
- import { jsx, jsxs } from "react/jsx-runtime";
17
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
18
18
  //#region ../core/src/appointment-service-categories.ts
19
19
  /**
20
20
  * Groups services under their categories.
@@ -55,29 +55,31 @@ function layoutServicesByCategory(categories, services, options) {
55
55
  };
56
56
  }
57
57
  //#endregion
58
- //#region ../blocks/src/system/runtime/components/booking/SuccessMessage.tsx
59
- const SuccessMessage = ({ message, resourceName, className }) => {
60
- return /* @__PURE__ */ jsx(TerminalPanel, {
61
- tone: "success",
62
- title: "Booking confirmed",
63
- icon: /* @__PURE__ */ jsx(StateIcon, {
64
- variant: "success",
65
- children: /* @__PURE__ */ jsx(CheckIcon, { strokeWidth: 3 })
66
- }),
67
- body: /* @__PURE__ */ jsx("p", {
68
- className: "ab-text",
69
- children: message
70
- }),
71
- secondaryBody: resourceName ? /* @__PURE__ */ jsxs("p", {
72
- className: "ab-text rb-on-surface--muted",
73
- children: ["Practitioner: ", resourceName]
74
- }) : null,
75
- className: ["ab-center", className ?? ""].join(" ").trim(),
76
- titleClassName: "ab-terminal-title",
77
- role: "alert",
78
- live: "polite"
79
- });
80
- };
58
+ //#region ../blocks/src/system/runtime/nodes/booking-form.payment-confirmation.ts
59
+ function bookingServiceRequiresPaymentBeforeBooking(input) {
60
+ switch (getBookingServicePaymentSelectionMode(input.service)) {
61
+ case "implicit_upfront":
62
+ case "implicit_instalment_plan":
63
+ case "implicit_flexible_balance": return true;
64
+ case "choice_required": return input.selectedCollectionOptionKind !== void 0 && input.selectedCollectionOptionKind !== "deferred_manual";
65
+ case "implicit_deferred_manual":
66
+ case "pending_stripe_setup":
67
+ case "unsupported": return false;
68
+ }
69
+ }
70
+ function resolveBookingPaymentConfirmationSummary(input) {
71
+ const service = input.service;
72
+ if (!service || input.hasSelectedAppointmentPackage || !Number.isFinite(input.priceAmount) || input.priceAmount <= 0 || !service.durationMinutes || !bookingServiceRequiresPaymentBeforeBooking({
73
+ service,
74
+ selectedCollectionOptionKind: input.selectedCollectionOptionKind
75
+ })) return null;
76
+ return {
77
+ serviceTitle: service.title,
78
+ durationMinutes: service.durationMinutes,
79
+ priceAmount: input.priceAmount,
80
+ priceCurrency: service.priceCurrency ?? service.pricing?.currency ?? "USD"
81
+ };
82
+ }
81
83
  //#endregion
82
84
  //#region ../blocks/src/system/runtime/hooks/useSelectedAppointmentConsentForm.ts
83
85
  function useSelectedAppointmentConsentForm(form, selectedService) {
@@ -643,6 +645,7 @@ function useBookingSubmission(_siteId) {
643
645
  startAt: data.startAt,
644
646
  endAt: data.endAt,
645
647
  customFields: data.customFields,
648
+ mailingListOptIn: data.mailingListOptIn,
646
649
  timezone: data.timezone,
647
650
  customerPassId: data.customerPassId
648
651
  }) : await api.submitBooking({
@@ -652,6 +655,7 @@ function useBookingSubmission(_siteId) {
652
655
  startAt: data.startAt,
653
656
  endAt: data.endAt,
654
657
  customFields: data.customFields,
658
+ mailingListOptIn: data.mailingListOptIn,
655
659
  timezone: data.timezone,
656
660
  discountCode: data.discountCode,
657
661
  selectedSlidingAmount: data.selectedSlidingAmount,
@@ -660,6 +664,7 @@ function useBookingSubmission(_siteId) {
660
664
  successUrl: data.successUrl,
661
665
  cancelUrl: data.cancelUrl
662
666
  });
667
+ storeDemoBookingPassIfAvailable(response.customer.email, response.demoBookingPass);
663
668
  dispatch({
664
669
  type: "submission-succeeded",
665
670
  message: response.type === "checkout_redirect" ? "Redirecting to secure checkout..." : "Booking submitted successfully."
@@ -687,6 +692,45 @@ function useBookingSubmission(_siteId) {
687
692
  };
688
693
  }
689
694
  //#endregion
695
+ //#region ../blocks/src/system/runtime/nodes/booking-form.submit-success.ts
696
+ function completeBookingSubmission(input) {
697
+ const { data } = input;
698
+ if (data.type === "checkout_redirect") {
699
+ if (input.redirect === "auto" && typeof window !== "undefined") input.navigateToCheckout(data.checkoutUrl);
700
+ return {
701
+ ok: true,
702
+ outcome: {
703
+ kind: "checkout_redirect",
704
+ checkoutUrl: data.checkoutUrl,
705
+ sessionId: data.sessionId,
706
+ customerEmail: data.customer.email,
707
+ ...data.demoBookingPass ? { demoBookingPass: data.demoBookingPass } : {},
708
+ ...data.mailingListSignupNote ? { mailingListSignupNote: data.mailingListSignupNote } : {}
709
+ }
710
+ };
711
+ }
712
+ const successCopy = getBookingSuccessCopy(input.successMessage);
713
+ input.dispatch({
714
+ type: "feedback-set",
715
+ feedback: {
716
+ kind: "success",
717
+ message: successCopy.defaultEmailSentence ? `${successCopy.message} ${successCopy.defaultEmailSentence}`.trim() : successCopy.message,
718
+ resourceName: data.appointment.resourceName
719
+ }
720
+ });
721
+ return {
722
+ ok: true,
723
+ outcome: {
724
+ kind: "booked",
725
+ appointmentId: data.appointment.id,
726
+ resourceName: data.appointment.resourceName,
727
+ customerEmail: data.customer.email,
728
+ ...data.demoBookingPass ? { demoBookingPass: data.demoBookingPass } : {},
729
+ ...data.mailingListSignupNote ? { mailingListSignupNote: data.mailingListSignupNote } : {}
730
+ }
731
+ };
732
+ }
733
+ //#endregion
690
734
  //#region ../blocks/src/system/runtime/nodes/booking-form.validationErrors.ts
691
735
  function omitRecordKey(record, key) {
692
736
  if (!(key in record)) return record;
@@ -728,6 +772,40 @@ function clearBookingFieldError(errors, fieldId) {
728
772
  };
729
773
  }
730
774
  //#endregion
775
+ //#region ../blocks/src/system/runtime/nodes/booking-form.mailing-list-state.ts
776
+ function bookingFormDataWithEligibleOptIn(data, eligible) {
777
+ return {
778
+ ...data,
779
+ mailingListOptIn: eligible && data.mailingListOptIn === true
780
+ };
781
+ }
782
+ function isBookingContactEvent(event) {
783
+ return event.type === "field-updated" || event.type === "field-touched" || event.type === "mailing-list-opt-in-set";
784
+ }
785
+ function applyBookingContactEvent(state, event) {
786
+ switch (event.type) {
787
+ case "field-updated": return {
788
+ ...state,
789
+ fieldValues: {
790
+ ...state.fieldValues,
791
+ [event.fieldId]: event.value
792
+ },
793
+ validationErrors: clearBookingFieldError(clearBookingFormError(state.validationErrors), event.fieldId)
794
+ };
795
+ case "field-touched": return {
796
+ ...state,
797
+ touchedFields: {
798
+ ...state.touchedFields,
799
+ [event.fieldId]: true
800
+ }
801
+ };
802
+ case "mailing-list-opt-in-set": return {
803
+ ...state,
804
+ mailingListOptIn: event.checked
805
+ };
806
+ }
807
+ }
808
+ //#endregion
731
809
  //#region ../blocks/src/system/runtime/nodes/booking-form.field-values.ts
732
810
  function collectInitialBookingFieldValues(initialData) {
733
811
  const values = {};
@@ -753,6 +831,7 @@ function createInitialBookingFlowReducerState(input) {
753
831
  selectedDate: toOptionalString(initialData.selectedDate),
754
832
  selectedSlot: null,
755
833
  fieldValues: collectInitialBookingFieldValues(initialData),
834
+ mailingListOptIn: initialData.mailingListOptIn === true,
756
835
  touchedFields: {},
757
836
  attemptedStepIds: {},
758
837
  discountCode: toOptionalString(initialData.discountCode) ?? "",
@@ -802,6 +881,7 @@ function applyAvailabilitySelectionInvalidation(state, invalidation) {
802
881
  };
803
882
  }
804
883
  function bookingFlowReducer(state, event) {
884
+ if (isBookingContactEvent(event)) return applyBookingContactEvent(state, event);
805
885
  switch (event.type) {
806
886
  case "service-selected": return applyBookingServiceSelection(state, event.serviceId);
807
887
  case "resource-selected": return {
@@ -824,21 +904,6 @@ function bookingFlowReducer(state, event) {
824
904
  feedback: clearAvailabilityFeedback(state.feedback),
825
905
  validationErrors: clearBookingFormError(state.validationErrors)
826
906
  };
827
- case "field-updated": return {
828
- ...state,
829
- fieldValues: {
830
- ...state.fieldValues,
831
- [event.fieldId]: event.value
832
- },
833
- validationErrors: clearBookingFieldError(clearBookingFormError(state.validationErrors), event.fieldId)
834
- };
835
- case "field-touched": return {
836
- ...state,
837
- touchedFields: {
838
- ...state.touchedFields,
839
- [event.fieldId]: true
840
- }
841
- };
842
907
  case "step-advance-attempted": return state.attemptedStepIds[event.stepId] ? state : {
843
908
  ...state,
844
909
  attemptedStepIds: {
@@ -976,6 +1041,7 @@ function deriveBookingSlotDisplayOptions(input) {
976
1041
  function toBookingFormData(state) {
977
1042
  return {
978
1043
  ...state.fieldValues,
1044
+ mailingListOptIn: state.mailingListOptIn,
979
1045
  serviceId: state.selectedServiceId,
980
1046
  resourceId: state.selectedResourceId ?? state.selectedSlot?.resourceId,
981
1047
  selectedDate: state.selectedDate,
@@ -1238,10 +1304,7 @@ function buildBookingSubmitPlan(input) {
1238
1304
  };
1239
1305
  const prepared = prepareBookingSubmission({
1240
1306
  formId: input.formId,
1241
- data: toBookingFormData({
1242
- ...input.state,
1243
- altchaSolution: input.altchaSolution ?? input.state.altchaSolution
1244
- }),
1307
+ data: bookingFormDataWithEligibleOptIn(toBookingFormData(input.state), Boolean(input.mailingListEligible)),
1245
1308
  services: input.services,
1246
1309
  defaultServiceId: input.defaultServiceId,
1247
1310
  defaultResourceId: input.defaultResourceId,
@@ -1427,6 +1490,8 @@ function useHeadlessBookingFlow(options) {
1427
1490
  const canLoadAppointmentPackages = Boolean(options.enableAppointmentPackages && hasPortalBearerAuth && selectedService && !selectedServiceSlidingScale && (selectedService.priceAmount ?? 0) > 0);
1428
1491
  const appointmentPackagesUnavailableReason = !options.enableAppointmentPackages ? "disabled" : !selectedService || selectedServiceSlidingScale || (selectedService.priceAmount ?? 0) <= 0 ? "missing-priced-service" : !hasPortalBearerAuth ? "missing-portal-auth" : null;
1429
1492
  const data = useMemo(() => toBookingFormData(state), [state]);
1493
+ const mailingList = resolveBookingSignupOffer(options.mailingList, options.siteName);
1494
+ const mailingListEligible = mailingList !== null;
1430
1495
  const availabilityDatesQuery = useMemo(() => buildBookingAvailabilityQuery({
1431
1496
  serviceId: selectedServiceId,
1432
1497
  resourceId: selectedResourceId,
@@ -1687,7 +1752,8 @@ function useHeadlessBookingFlow(options) {
1687
1752
  viewerTimeZone: latest.viewerTimeZone,
1688
1753
  redirect: submitOptions?.redirect ?? "manual",
1689
1754
  successUrl: submitOptions?.successUrl,
1690
- cancelUrl: submitOptions?.cancelUrl
1755
+ cancelUrl: submitOptions?.cancelUrl,
1756
+ mailingListEligible
1691
1757
  });
1692
1758
  if (!plan.ok) {
1693
1759
  dispatch({
@@ -1720,37 +1786,18 @@ function useHeadlessBookingFlow(options) {
1720
1786
  message: result.error
1721
1787
  };
1722
1788
  }
1723
- if (result.data.type === "checkout_redirect") {
1724
- if (plan.redirect === "auto" && typeof window !== "undefined") latest.navigateToCheckout(result.data.checkoutUrl);
1725
- return {
1726
- ok: true,
1727
- outcome: {
1728
- kind: "checkout_redirect",
1729
- checkoutUrl: result.data.checkoutUrl
1730
- }
1731
- };
1732
- }
1733
- dispatch({
1734
- type: "feedback-set",
1735
- feedback: {
1736
- kind: "success",
1737
- message: getBookingSuccessMessage(latest.successMessage),
1738
- resourceName: result.data.appointment.resourceName
1739
- }
1789
+ return completeBookingSubmission({
1790
+ data: result.data,
1791
+ redirect: plan.redirect,
1792
+ successMessage: latest.successMessage,
1793
+ navigateToCheckout: latest.navigateToCheckout,
1794
+ dispatch
1740
1795
  });
1741
- return {
1742
- ok: true,
1743
- outcome: {
1744
- kind: "booked",
1745
- appointmentId: result.data.appointment.id,
1746
- resourceName: result.data.appointment.resourceName
1747
- }
1748
- };
1749
1796
  } finally {
1750
1797
  submittingRef.current = false;
1751
1798
  dispatch({ type: "submission-finished" });
1752
1799
  }
1753
- }, [latestRef]);
1800
+ }, [latestRef, mailingListEligible]);
1754
1801
  const actions = useMemo(() => ({
1755
1802
  selectService: (serviceId) => dispatch({
1756
1803
  type: "service-selected",
@@ -1773,6 +1820,10 @@ function useHeadlessBookingFlow(options) {
1773
1820
  fieldId: unsafeAsBookingFieldId(fieldId),
1774
1821
  value
1775
1822
  }),
1823
+ setMailingListOptIn: (checked) => dispatch({
1824
+ type: "mailing-list-opt-in-set",
1825
+ checked
1826
+ }),
1776
1827
  markFieldTouched: (fieldId) => dispatch({
1777
1828
  type: "field-touched",
1778
1829
  fieldId: unsafeAsBookingFieldId(fieldId)
@@ -1889,6 +1940,12 @@ function useHeadlessBookingFlow(options) {
1889
1940
  selectedService,
1890
1941
  state.selectedSlot?.startAt
1891
1942
  ]);
1943
+ const paymentConfirmationSummary = resolveBookingPaymentConfirmationSummary({
1944
+ service: selectedService,
1945
+ priceAmount: selectedAppointmentPriceAmount,
1946
+ selectedCollectionOptionKind: state.selectedCollectionOptionKind,
1947
+ hasSelectedAppointmentPackage: Boolean(state.selectedAppointmentPackageId)
1948
+ });
1892
1949
  const appointmentPackageItems = appointmentPackages.tag === "loaded" ? appointmentPackages.value : [];
1893
1950
  const selectedAppointmentPackage = appointmentPackageItems.find((appointmentPackage) => appointmentPackage.customerPassId === state.selectedAppointmentPackageId) ?? null;
1894
1951
  const spamProtectionEnabled = options.spamProtectionEnabled ?? isSpamProtectionEnabled();
@@ -1918,7 +1975,8 @@ function useHeadlessBookingFlow(options) {
1918
1975
  selectedSlidingAmount,
1919
1976
  slidingScale: selectedServiceSlidingScale,
1920
1977
  appointmentPackages: appointmentPackagesModel,
1921
- errorMessage: paymentResolution.errorMessage ?? "This service cannot be booked right now."
1978
+ errorMessage: paymentResolution.errorMessage ?? "This service cannot be booked right now.",
1979
+ confirmationSummary: null
1922
1980
  } : {
1923
1981
  kind: "ok",
1924
1982
  mode: paymentResolution.mode,
@@ -1928,9 +1986,12 @@ function useHeadlessBookingFlow(options) {
1928
1986
  selectedSlidingAmountInput: state.selectedSlidingAmountInput,
1929
1987
  selectedSlidingAmount,
1930
1988
  slidingScale: selectedServiceSlidingScale,
1931
- appointmentPackages: appointmentPackagesModel
1989
+ appointmentPackages: appointmentPackagesModel,
1990
+ confirmationSummary: paymentConfirmationSummary
1932
1991
  };
1933
1992
  return {
1993
+ mailingList,
1994
+ mailingListOptIn: state.mailingListOptIn,
1934
1995
  status,
1935
1996
  view,
1936
1997
  steps: stepState.steps,
@@ -2022,6 +2083,10 @@ function useLatestRef(value) {
2022
2083
  }
2023
2084
  //#endregion
2024
2085
  //#region ../blocks/src/system/runtime/hooks/useAppointmentCheckoutVerification.ts
2086
+ const APPOINTMENT_CHECKOUT_MAX_ATTEMPTS = 12;
2087
+ function resolveAppointmentCheckoutPollInterval(attempt) {
2088
+ return Math.min(1e3 * 2 ** (attempt - 1), 4e3);
2089
+ }
2025
2090
  const appointmentCheckoutVerificationDeps = {
2026
2091
  useBlockApi,
2027
2092
  usePolling
@@ -2031,16 +2096,25 @@ function useAppointmentCheckoutVerification(config) {
2031
2096
  }
2032
2097
  function useAppointmentCheckoutVerificationWithDeps(config, deps) {
2033
2098
  const api = deps.useBlockApi();
2099
+ const sessionId = config?.sessionId ?? null;
2100
+ const maxAttempts = config?.maxAttempts;
2101
+ const pollInterval = config?.pollInterval;
2034
2102
  const pollingConfig = useMemo(() => {
2035
- if (!config) return null;
2103
+ if (sessionId === null) return null;
2036
2104
  return {
2037
- pollFn: () => api.getAppointmentBookingStatus({ sessionId: config.sessionId }),
2105
+ restartKey: sessionId,
2106
+ pollFn: () => api.getAppointmentBookingStatus({ sessionId }),
2038
2107
  isComplete: (result) => (result.paymentStatus === "completed" || result.paymentStatus === "not_required") && result.appointmentStatus === "confirmed",
2039
2108
  isFailed: (result) => result.paymentStatus === "failed" || result.paymentStatus === "cancelled" || result.paymentStatus === "refunded" || result.appointmentStatus === "cancelled",
2040
- maxAttempts: config.maxAttempts,
2041
- interval: config.pollInterval
2109
+ maxAttempts: maxAttempts ?? APPOINTMENT_CHECKOUT_MAX_ATTEMPTS,
2110
+ interval: pollInterval ?? resolveAppointmentCheckoutPollInterval
2042
2111
  };
2043
- }, [api, config]);
2112
+ }, [
2113
+ api,
2114
+ sessionId,
2115
+ maxAttempts,
2116
+ pollInterval
2117
+ ]);
2044
2118
  const polling = deps.usePolling(pollingConfig);
2045
2119
  return {
2046
2120
  state: resolveAppointmentCheckoutVerificationState({
@@ -2228,6 +2302,25 @@ const TimeSlotSelector = ({ value, onChange, slots, isLoading, timezone, require
2228
2302
  });
2229
2303
  };
2230
2304
  //#endregion
2305
+ //#region ../blocks/src/system/runtime/nodes/booking-form.mailing-list-choice.tsx
2306
+ function BookingMailingListChoice({ booking }) {
2307
+ const id = React.useId();
2308
+ if (!booking.mailingList) return null;
2309
+ return /* @__PURE__ */ jsxs("div", {
2310
+ className: "rb-space-y-2",
2311
+ children: [/* @__PURE__ */ jsx(CheckboxChoice, {
2312
+ id,
2313
+ name: "mailingListOptIn",
2314
+ checked: booking.mailingListOptIn,
2315
+ onChange: (event) => booking.actions.setMailingListOptIn(event.target.checked),
2316
+ label: `Email me news and updates from ${booking.mailingList.siteName}.`
2317
+ }), /* @__PURE__ */ jsx("p", {
2318
+ className: "rb-caption status-muted",
2319
+ children: "Optional. You can unsubscribe at any time."
2320
+ })]
2321
+ });
2322
+ }
2323
+ //#endregion
2231
2324
  //#region ../blocks/src/system/runtime/nodes/booking-form.service-choices.tsx
2232
2325
  function optionCardClassName(isSelected) {
2233
2326
  return `rb-option-card${isSelected ? " rb-option-card--selected" : ""}`;
@@ -2318,6 +2411,72 @@ function ServiceChoiceGrid({ booking, choices }) {
2318
2411
  });
2319
2412
  }
2320
2413
  //#endregion
2414
+ //#region ../blocks/src/system/runtime/nodes/booking-form.submit-actions.tsx
2415
+ function resolvePrimaryActionLabel(isLastStep, requiresPayment) {
2416
+ if (!isLastStep) return "Continue";
2417
+ return requiresPayment ? "Continue to payment" : "Complete";
2418
+ }
2419
+ function formatBookingConfirmationDateTime(booking) {
2420
+ const startAt = booking.currentStep?.id === "datetime-selection" ? booking.availability.selectedSlot?.startAt : void 0;
2421
+ return startAt ? new Intl.DateTimeFormat(void 0, {
2422
+ dateStyle: "medium",
2423
+ timeStyle: "short",
2424
+ timeZone: booking.availability.timezone
2425
+ }).format(new Date(startAt)) : null;
2426
+ }
2427
+ function BookingPaymentConfirmationText({ booking, summary }) {
2428
+ if (!summary) return null;
2429
+ const dateTime = formatBookingConfirmationDateTime(booking);
2430
+ return /* @__PURE__ */ jsxs("p", {
2431
+ className: "ab-text rb-on-surface--muted",
2432
+ children: [
2433
+ summary.serviceTitle,
2434
+ " · ",
2435
+ summary.durationMinutes,
2436
+ " min ·",
2437
+ " ",
2438
+ formatCurrencyAmount(summary.priceAmount, summary.priceCurrency, { decimals: "auto" }),
2439
+ dateTime ? ` · ${dateTime}` : ""
2440
+ ]
2441
+ });
2442
+ }
2443
+ function BookingFormSubmitActions({ booking, onSubmit }) {
2444
+ const currentStepIndex = booking.currentStep?.visibleIndex ?? 0;
2445
+ const isFirstStep = currentStepIndex === 0;
2446
+ const isLastStep = currentStepIndex === booking.steps.length - 1;
2447
+ const isSubmitting = booking.status.tag === "submitting";
2448
+ const paymentSummary = isLastStep && booking.payment.kind === "ok" ? booking.payment.confirmationSummary : null;
2449
+ const handlePrimaryAction = async () => {
2450
+ if ((await booking.actions.next()).ok && isLastStep) await onSubmit();
2451
+ };
2452
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(BookingPaymentConfirmationText, {
2453
+ booking,
2454
+ summary: paymentSummary
2455
+ }), /* @__PURE__ */ jsxs("div", {
2456
+ className: "rb-wizard-actions",
2457
+ children: [!isFirstStep ? /* @__PURE__ */ jsx(ThemedButton, {
2458
+ type: "button",
2459
+ onClick: booking.actions.back,
2460
+ variant: "outline",
2461
+ size: "md",
2462
+ label: "Back"
2463
+ }) : null, /* @__PURE__ */ jsx(ThemedButton, {
2464
+ type: "button",
2465
+ onClick: () => {
2466
+ handlePrimaryAction();
2467
+ },
2468
+ disabled: isSubmitting,
2469
+ variant: "primary",
2470
+ size: "md",
2471
+ label: resolvePrimaryActionLabel(isLastStep, Boolean(paymentSummary)),
2472
+ pending: isSubmitting ? {
2473
+ label: "Submitting...",
2474
+ srLabel: "Submitting"
2475
+ } : void 0
2476
+ })]
2477
+ })] });
2478
+ }
2479
+ //#endregion
2321
2480
  //#region ../blocks/src/system/runtime/nodes/booking-form.default-ui.tsx
2322
2481
  function formatBookingAmount(amount, currency) {
2323
2482
  return formatCurrencyAmount(amount, currency, { decimals: "auto" });
@@ -2326,13 +2485,6 @@ function HeadlessBookingDefaultForm({ booking, onSubmit }) {
2326
2485
  const currentStep = booking.currentStep;
2327
2486
  const errorSummaryId = React.useId();
2328
2487
  const currentStepIndex = currentStep?.visibleIndex ?? 0;
2329
- const isFirstStep = currentStepIndex === 0;
2330
- const isLastStep = currentStepIndex === booking.steps.length - 1;
2331
- const isSubmitting = booking.status.tag === "submitting";
2332
- const handlePrimaryAction = async () => {
2333
- if (!(await booking.actions.next()).ok) return;
2334
- if (isLastStep) await onSubmit();
2335
- };
2336
2488
  if (!currentStep) return /* @__PURE__ */ jsx("div", {
2337
2489
  className: "rb-text-center rb-py-12",
2338
2490
  children: /* @__PURE__ */ jsx("p", {
@@ -2360,28 +2512,9 @@ function HeadlessBookingDefaultForm({ booking, onSubmit }) {
2360
2512
  errors: currentStep.errors,
2361
2513
  id: errorSummaryId
2362
2514
  }),
2363
- /* @__PURE__ */ jsxs("div", {
2364
- className: "rb-wizard-actions",
2365
- children: [!isFirstStep ? /* @__PURE__ */ jsx(ThemedButton, {
2366
- type: "button",
2367
- onClick: booking.actions.back,
2368
- variant: "outline",
2369
- size: "md",
2370
- label: "Back"
2371
- }) : null, /* @__PURE__ */ jsx(ThemedButton, {
2372
- type: "button",
2373
- onClick: () => {
2374
- handlePrimaryAction();
2375
- },
2376
- disabled: isSubmitting,
2377
- variant: "primary",
2378
- size: "md",
2379
- label: isLastStep ? "Complete" : "Continue",
2380
- pending: isSubmitting ? {
2381
- label: "Submitting...",
2382
- srLabel: "Submitting"
2383
- } : void 0
2384
- })]
2515
+ /* @__PURE__ */ jsx(BookingFormSubmitActions, {
2516
+ booking,
2517
+ onSubmit
2385
2518
  }),
2386
2519
  /* @__PURE__ */ jsx(DefaultBookingDiscount, { booking }),
2387
2520
  /* @__PURE__ */ jsx(DefaultBookingFeedback, { booking }),
@@ -2707,12 +2840,17 @@ function PaymentOptionContent({ description, helperText, id, summaryRows, title
2707
2840
  });
2708
2841
  }
2709
2842
  function DefaultDynamicFields({ booking, fields }) {
2843
+ const lastContactIndex = fields.reduce((last, field, index) => [
2844
+ "name",
2845
+ "email",
2846
+ "phone"
2847
+ ].includes(field.id) ? index : last, -1);
2710
2848
  return /* @__PURE__ */ jsx("div", {
2711
2849
  className: "rb-space-y-6",
2712
- children: fields.map((field) => /* @__PURE__ */ jsx(DefaultDynamicField, {
2850
+ children: fields.map((field, index) => /* @__PURE__ */ jsxs(React.Fragment, { children: [/* @__PURE__ */ jsx(DefaultDynamicField, {
2713
2851
  booking,
2714
2852
  field
2715
- }, field.id))
2853
+ }), index === lastContactIndex && booking.mailingList ? /* @__PURE__ */ jsx(BookingMailingListChoice, { booking }) : null] }, field.id))
2716
2854
  });
2717
2855
  }
2718
2856
  function DefaultDynamicField({ booking, field }) {
@@ -2983,9 +3121,122 @@ function DefaultBookingErrorSummary({ errors, id }) {
2983
3121
  });
2984
3122
  }
2985
3123
  //#endregion
3124
+ //#region ../blocks/src/system/runtime/components/booking/SuccessMessage.tsx
3125
+ const SuccessMessage = ({ copy, resourceName, className, demoEmailSuppressed = false, customerEmail = null }) => {
3126
+ return /* @__PURE__ */ jsx(TerminalPanel, {
3127
+ tone: "success",
3128
+ title: "Booking confirmed",
3129
+ icon: /* @__PURE__ */ jsx(StateIcon, {
3130
+ variant: "success",
3131
+ children: /* @__PURE__ */ jsx(CheckIcon, { strokeWidth: 3 })
3132
+ }),
3133
+ body: /* @__PURE__ */ jsx(BookingConfirmation, {
3134
+ demoEmailSuppressed,
3135
+ email: customerEmail,
3136
+ copy,
3137
+ messagePresentation: {
3138
+ kind: "paragraph",
3139
+ className: "ab-text"
3140
+ },
3141
+ noteClassName: "ab-text"
3142
+ }),
3143
+ secondaryBody: resourceName ? /* @__PURE__ */ jsxs("p", {
3144
+ className: "ab-text rb-on-surface--muted",
3145
+ children: ["Practitioner: ", resourceName]
3146
+ }) : null,
3147
+ className: ["ab-center", className ?? ""].join(" ").trim(),
3148
+ titleClassName: "ab-terminal-title",
3149
+ role: "alert",
3150
+ live: "polite"
3151
+ });
3152
+ };
3153
+ //#endregion
3154
+ //#region ../blocks/src/system/runtime/nodes/booking-form.checkout-return-context.ts
3155
+ function storageKey(sessionId) {
3156
+ return `riverbank:booking:mailing-list:${sessionId}`;
3157
+ }
3158
+ function saveAppointmentCheckoutReturnContext(sessionId, context) {
3159
+ if (!context.customerEmail && !context.mailingListNote) return;
3160
+ try {
3161
+ window.sessionStorage.setItem(storageKey(sessionId), JSON.stringify(context));
3162
+ } catch {}
3163
+ }
3164
+ function readAppointmentCheckoutReturnContext(sessionId) {
3165
+ try {
3166
+ const stored = window.sessionStorage.getItem(storageKey(sessionId));
3167
+ if (!stored) return null;
3168
+ return parseContext(stored);
3169
+ } catch {
3170
+ return null;
3171
+ }
3172
+ }
3173
+ function parseContext(value) {
3174
+ try {
3175
+ const parsed = JSON.parse(value);
3176
+ return isContext(parsed) ? parsed : null;
3177
+ } catch {
3178
+ return value === "confirmation_required" || value === "not_confirmed" ? {
3179
+ customerEmail: null,
3180
+ mailingListNote: value
3181
+ } : null;
3182
+ }
3183
+ }
3184
+ function isContext(value) {
3185
+ if (!isRecord(value)) return false;
3186
+ return (typeof value.customerEmail === "string" || value.customerEmail === null) && (value.mailingListNote === null || value.mailingListNote === "confirmation_required" || value.mailingListNote === "not_confirmed");
3187
+ }
3188
+ function isRecord(value) {
3189
+ return typeof value === "object" && value !== null && !Array.isArray(value);
3190
+ }
3191
+ //#endregion
3192
+ //#region ../blocks/src/system/runtime/nodes/booking-form.completion.tsx
3193
+ function BookingFormCompletion({ resourceName, successMessage, redirectState, localNote, customerEmail, demoEmailSuppressed = false }) {
3194
+ const returnContext = redirectState.kind === "success" ? readAppointmentCheckoutReturnContext(redirectState.sessionId) : null;
3195
+ const note = redirectState.kind === "success" ? returnContext?.mailingListNote ?? null : localNote;
3196
+ const confirmedEmail = returnContext?.customerEmail ?? customerEmail;
3197
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(SuccessMessage, {
3198
+ copy: getBookingSuccessCopy(successMessage),
3199
+ resourceName,
3200
+ demoEmailSuppressed,
3201
+ customerEmail: confirmedEmail
3202
+ }), note ? /* @__PURE__ */ jsx(BookingMailingListNote, {
3203
+ note,
3204
+ context: "booking",
3205
+ className: "rb-mt-4"
3206
+ }) : null] });
3207
+ }
3208
+ //#endregion
3209
+ //#region ../blocks/src/system/runtime/nodes/booking-form.submit-handler.ts
3210
+ function appendRebookFlag(url, enabled) {
3211
+ if (!enabled) return url;
3212
+ const nextUrl = new URL(url);
3213
+ nextUrl.searchParams.set("rebook", "1");
3214
+ return nextUrl.toString();
3215
+ }
3216
+ function createBookingFormSubmitHandler(input) {
3217
+ return async () => {
3218
+ const { successUrl, cancelUrl } = buildCheckoutReturnUrls("booking", input.bookingAnchorId);
3219
+ const result = await input.booking.actions.submit({
3220
+ redirect: "manual",
3221
+ successUrl: appendRebookFlag(successUrl, input.isPortalRebook),
3222
+ cancelUrl: appendRebookFlag(cancelUrl, input.isPortalRebook)
3223
+ });
3224
+ if (!result.ok) return;
3225
+ storeDemoBookingPassIfAvailable(result.outcome.customerEmail, result.outcome.demoBookingPass);
3226
+ if (result.outcome.kind === "checkout_redirect") {
3227
+ saveAppointmentCheckoutReturnContext(result.outcome.sessionId, {
3228
+ customerEmail: result.outcome.customerEmail,
3229
+ mailingListNote: result.outcome.mailingListSignupNote ?? null
3230
+ });
3231
+ window.location.href = result.outcome.checkoutUrl;
3232
+ return;
3233
+ }
3234
+ input.setLocalMailingListNote(result.outcome.mailingListSignupNote ?? null);
3235
+ input.setLocalCustomerEmail(result.outcome.customerEmail);
3236
+ };
3237
+ }
3238
+ //#endregion
2986
3239
  //#region ../blocks/src/system/runtime/nodes/booking-form.client.tsx
2987
- const PORTAL_REBOOK_QUERY_PARAM = "rebook";
2988
- const PORTAL_REBOOK_QUERY_VALUE = "1";
2989
3240
  const REBOOK_COMPLETION_MODE_VERIFIED_CHECKOUT = "verified_checkout";
2990
3241
  const REBOOK_COMPLETION_MODE_BYPASSED = "bypassed";
2991
3242
  function getBookingRedirectLocationSnapshot() {
@@ -2998,12 +3249,6 @@ function getBookingRedirectLocationSnapshot() {
2998
3249
  hash: window.location.hash
2999
3250
  };
3000
3251
  }
3001
- function appendRebookFlag(url, enabled) {
3002
- if (!enabled) return url;
3003
- const nextUrl = new URL(url);
3004
- nextUrl.searchParams.set(PORTAL_REBOOK_QUERY_PARAM, PORTAL_REBOOK_QUERY_VALUE);
3005
- return nextUrl.toString();
3006
- }
3007
3252
  /**
3008
3253
  * Themed surface container for every booking view state (wizard, success,
3009
3254
  * verifying). Styled by the shared registration-surface layer.
@@ -3026,12 +3271,17 @@ const BookingFormClient = ({ siteId: siteIdProp, render }) => {
3026
3271
  const isPortalRebook = render.hydration.rebookContext?.kind === "portal_rebook";
3027
3272
  const hasLoggedRebookCompletionRef = useRef(false);
3028
3273
  const [redirectState] = useState(() => getBookingRedirectStateFromLocation(getBookingRedirectLocationSnapshot()));
3274
+ const [localMailingListNote, setLocalMailingListNote] = useState(null);
3275
+ const [localCustomerEmail, setLocalCustomerEmail] = useState(null);
3029
3276
  const showSpamProtection = render.hydration.spamProtectionEnabled ?? isSpamProtectionEnabled();
3030
3277
  const api = useBlockApi();
3031
3278
  const hasPortalAuth = api.config.auth.type === "bearer" || api.config.authOverrides?.portal?.type === "bearer";
3279
+ const formId = render.hydration.formId ?? form?.id ?? "booking-form";
3032
3280
  const booking = useHeadlessBookingFlow({
3281
+ mailingList: render.hydration.mailingList,
3282
+ siteName: render.hydration.siteName,
3033
3283
  siteId,
3034
- formId: render.hydration.formId ?? form?.id ?? "booking-form",
3284
+ formId,
3035
3285
  form,
3036
3286
  services,
3037
3287
  serviceCategories: render.hydration.serviceCategories,
@@ -3101,22 +3351,23 @@ const BookingFormClient = ({ siteId: siteIdProp, render }) => {
3101
3351
  children: render.display.message ?? "Booking form not found. Please check your configuration."
3102
3352
  })
3103
3353
  });
3104
- const handleComplete = async () => {
3105
- const { successUrl, cancelUrl } = buildCheckoutReturnUrls("booking", bookingAnchorId);
3106
- const result = await booking.actions.submit({
3107
- redirect: "manual",
3108
- successUrl: appendRebookFlag(successUrl, isPortalRebook),
3109
- cancelUrl: appendRebookFlag(cancelUrl, isPortalRebook)
3110
- });
3111
- if (!result.ok) return;
3112
- if (result.outcome.kind === "checkout_redirect") window.location.href = result.outcome.checkoutUrl;
3113
- };
3354
+ const handleComplete = createBookingFormSubmitHandler({
3355
+ booking,
3356
+ bookingAnchorId,
3357
+ isPortalRebook,
3358
+ setLocalMailingListNote,
3359
+ setLocalCustomerEmail
3360
+ });
3114
3361
  if (viewState.kind === "success") return /* @__PURE__ */ jsx(BookingSurface, {
3115
3362
  id: bookingAnchorId,
3116
3363
  className: render.display.className,
3117
- children: /* @__PURE__ */ jsx(SuccessMessage, {
3118
- message: getBookingSuccessMessage(render.display.successMessage),
3119
- resourceName: viewState.resourceName
3364
+ children: /* @__PURE__ */ jsx(BookingFormCompletion, {
3365
+ successMessage: render.display.successMessage,
3366
+ resourceName: viewState.resourceName,
3367
+ redirectState,
3368
+ localNote: localMailingListNote,
3369
+ customerEmail: localCustomerEmail,
3370
+ demoEmailSuppressed: render.hydration.demoEmailSuppressed
3120
3371
  })
3121
3372
  });
3122
3373
  if (viewState.kind === "verifying") return /* @__PURE__ */ jsx(BookingSurface, {
@@ -3132,6 +3383,25 @@ const BookingFormClient = ({ siteId: siteIdProp, render }) => {
3132
3383
  })
3133
3384
  })
3134
3385
  });
3386
+ if (viewState.kind === "timeout") return /* @__PURE__ */ jsxs(BookingSurface, {
3387
+ id: bookingAnchorId,
3388
+ className: render.display.className,
3389
+ children: [/* @__PURE__ */ jsx(FeedbackMessage, {
3390
+ tone: "info",
3391
+ className: "alert alert-info",
3392
+ role: "status",
3393
+ children: /* @__PURE__ */ jsx("p", {
3394
+ className: "ab-text",
3395
+ children: viewState.message
3396
+ })
3397
+ }), /* @__PURE__ */ jsx(ThemedButton, {
3398
+ type: "button",
3399
+ variant: "primary",
3400
+ size: "md",
3401
+ label: "Check again",
3402
+ onClick: verification.retry
3403
+ })]
3404
+ });
3135
3405
  return /* @__PURE__ */ jsxs(BookingSurface, {
3136
3406
  id: bookingAnchorId,
3137
3407
  className: render.display.className,