@riverbankcms/sdk 0.145.0 → 0.147.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 (254) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/{PreviewEditorSidebar-O-V6Pl5a.mjs → PreviewEditorSidebar-DtpB3_sS.mjs} +51 -33
  3. package/dist/{PreviewEditorUI-1UlX_9cw.mjs → PreviewEditorUI-DxTLgaHo.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-BxGwdOCV.mjs → PreviewQueryProvider-Dd4dxOiU.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-DYbA_4iv.mjs → SdkPreviewModeRuntime-DMMNCngt.mjs} +311 -186
  6. package/dist/{SiteChromeCustomizeContext-CNTKQ9nx.mjs → SiteChromeCustomizeContext-DQXZXiqS.mjs} +3808 -2395
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +1122 -0
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +102 -0
  9. package/dist/_dts/api/src/accountApi.d.ts +5 -5
  10. package/dist/_dts/api/src/bookingConfig.d.ts +24 -1
  11. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +11 -26
  12. package/dist/_dts/api/src/bookingManagementEventEndpointTypes.d.ts +45 -1
  13. package/dist/_dts/api/src/bookingOperations.d.ts +2 -44
  14. package/dist/_dts/api/src/bookingPeople.d.ts +92 -0
  15. package/dist/_dts/api/src/bookingPeopleEndpointDefinitions.d.ts +38 -0
  16. package/dist/_dts/api/src/bookingRecords.d.ts +11 -49
  17. package/dist/_dts/api/src/bookingSettingsSections.d.ts +1 -1
  18. package/dist/_dts/api/src/bookings.d.ts +1 -0
  19. package/dist/_dts/api/src/clientErrorReporting.d.ts +50 -0
  20. package/dist/_dts/api/src/communications.d.ts +20 -4
  21. package/dist/_dts/api/src/contentRuntime.d.ts +3 -7
  22. package/dist/_dts/api/src/endpoints.d.ts +816 -655
  23. package/dist/_dts/api/src/event-visibility.d.ts +20 -0
  24. package/dist/_dts/api/src/eventManagementContracts.d.ts +72 -4
  25. package/dist/_dts/api/src/eventManagementEndpointDefinitions.d.ts +24 -0
  26. package/dist/_dts/api/src/eventPageWords.d.ts +19 -0
  27. package/dist/_dts/api/src/eventSeriesRegistrationEndpointDefinitions.d.ts +14 -0
  28. package/dist/_dts/api/src/index.d.ts +9 -2
  29. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  30. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  31. package/dist/_dts/api/src/launchReadiness.d.ts +19 -6
  32. package/dist/_dts/api/src/launchRequirementPriority.d.ts +3 -0
  33. package/dist/_dts/api/src/mailingListIntegration.d.ts +6 -0
  34. package/dist/_dts/api/src/navigation/dashboardBookingsNav.d.ts +1 -1
  35. package/dist/_dts/api/src/newsletterCampaignCommandEndpoints.d.ts +13 -0
  36. package/dist/_dts/api/src/newsletterEndpointDefinitions.d.ts +57 -0
  37. package/dist/_dts/api/src/occurrenceScheduling.d.ts +29 -0
  38. package/dist/_dts/api/src/pageSurfaceEndpoints.d.ts +44 -0
  39. package/dist/_dts/api/src/participantMessaging.d.ts +11 -1
  40. package/dist/_dts/api/src/publicAppointmentBookingContracts.d.ts +48 -0
  41. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +7 -0
  42. package/dist/_dts/api/src/sdk-event-upsert.d.ts +55 -1
  43. package/dist/_dts/api/src/sdkContracts.d.ts +3 -42
  44. package/dist/_dts/api/src/sdkCourseBooking.d.ts +30 -0
  45. package/dist/_dts/api/src/sdkEventEndpointDefinitions.d.ts +76 -0
  46. package/dist/_dts/api/src/sdkEventLifecycle.d.ts +37 -0
  47. package/dist/_dts/api/src/sdkManagedEventContracts.d.ts +18 -0
  48. package/dist/_dts/api/src/sdkPageDesign.d.ts +388 -0
  49. package/dist/_dts/api/src/sdkPageDesignEndpointDefinitions.d.ts +22 -0
  50. package/dist/_dts/api/src/sdkPullEventContracts.d.ts +46 -0
  51. package/dist/_dts/api/src/siteAddressEndpoints.d.ts +29 -0
  52. package/dist/_dts/api/src/siteLifecycleEndpoints.d.ts +61 -0
  53. package/dist/_dts/api/src/siteManagementEndpointDefinitions.d.ts +49 -0
  54. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +6 -49
  55. package/dist/_dts/api/src/siteOnboarding.d.ts +72 -18
  56. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +1 -1
  57. package/dist/_dts/api/src/types.d.ts +7 -1
  58. package/dist/_dts/api/src/wholeSeriesRuns.d.ts +14 -0
  59. package/dist/_dts/blocks/src/PageRenderer.d.ts +3 -4
  60. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +8 -0
  61. package/dist/_dts/blocks/src/index.d.ts +2 -0
  62. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +29 -1
  63. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +5 -1
  64. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +27 -5
  65. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +14 -1
  66. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +4 -1
  67. package/dist/_dts/blocks/src/system/icons/social.d.ts +1 -1
  68. package/dist/_dts/blocks/src/system/registry.d.ts +1 -1
  69. package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +4 -0
  70. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +12 -0
  71. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +12 -0
  72. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +6 -0
  73. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +8 -0
  74. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +2 -0
  75. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.completion.d.ts +9 -0
  76. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +9 -0
  77. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +19 -0
  78. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-choice.d.ts +5 -0
  79. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-note.d.ts +3 -0
  80. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-state.d.ts +9 -0
  81. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.reserved-fields.d.ts +1 -1
  82. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.server.d.ts +1 -1
  83. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +2 -0
  84. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-handler.d.ts +8 -0
  85. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-success.d.ts +9 -0
  86. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +3 -0
  87. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/AttendeeDetailsStep.d.ts +3 -0
  88. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/SuccessStep.d.ts +3 -0
  89. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +3 -0
  90. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.d.ts +1 -0
  91. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/sessionStorage.d.ts +2 -0
  92. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +6 -0
  93. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +3 -0
  94. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +8 -0
  95. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +9 -0
  96. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +20 -4
  97. package/dist/_dts/blocks/src/system/runtime/nodes/form.fields.d.ts +5 -0
  98. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.block-submission.d.ts +34 -0
  99. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.client.d.ts +1 -1
  100. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +6 -1
  101. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.parts.d.ts +46 -0
  102. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +2 -1
  103. package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +4 -1
  104. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingMailingListNote.d.ts +6 -0
  105. package/dist/_dts/blocks/src/system/runtime/shared/components/CheckboxChoice.d.ts +18 -0
  106. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +1 -0
  107. package/dist/_dts/blocks/src/system/runtime/shared/mailingListSignupCopy.d.ts +6 -0
  108. package/dist/_dts/blocks/src/system/runtime/shared/types.d.ts +1 -0
  109. package/dist/_dts/blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.d.ts +3 -2
  110. package/dist/_dts/blocks/src/system/transforms/registry/core.d.ts +2 -0
  111. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +1 -3
  112. package/dist/_dts/content-editor/src/index.d.ts +1 -0
  113. package/dist/_dts/content-editor/src/primitives/previewEditableOutline.d.ts +2 -0
  114. package/dist/_dts/content-editor/src/ui/editorBlockEquality.d.ts +3 -0
  115. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +3 -5
  116. package/dist/_dts/core/src/block-content-identity.d.ts +5 -0
  117. package/dist/_dts/core/src/editor-state.d.ts +2 -7
  118. package/dist/_dts/core/src/index.d.ts +2 -1
  119. package/dist/_dts/core/src/mailing-list-runtime.d.ts +15 -0
  120. package/dist/_dts/core/src/mailing-list-setup.d.ts +2 -0
  121. package/dist/_dts/core/src/mailing-list-submission.d.ts +9 -1
  122. package/dist/_dts/core/src/navigation-portal-labels.d.ts +9 -0
  123. package/dist/_dts/core/src/participants.d.ts +0 -38
  124. package/dist/_dts/core/src/public-event-booking-availability.d.ts +20 -1
  125. package/dist/_dts/core/src/public-profile.d.ts +3 -1
  126. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +151 -24
  127. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +3 -0
  128. package/dist/_dts/editor-blocks/src/block-editor/EmptyState.d.ts +13 -1
  129. package/dist/_dts/editor-blocks/src/block-editor/actionPresentation.d.ts +1 -0
  130. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +2 -8
  131. package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
  132. package/dist/_dts/preview-next/src/client/blocks/EditablePageRenderer.d.ts +7 -1
  133. package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +5 -5
  134. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +1 -2
  135. package/dist/_dts/sdk/src/next/renderSdkContent.d.ts +0 -1
  136. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +3 -2
  137. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +3 -2
  138. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +6 -1
  139. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +5 -2
  140. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +6 -1
  141. package/dist/_dts/sdk/src/rendering/helpers/templateContent.d.ts +2 -0
  142. package/dist/_dts/sdk/src/rendering/hooks/useContent.d.ts +5 -1
  143. package/dist/_dts/sdk/src/rendering/hooks/usePage.d.ts +5 -1
  144. package/dist/_dts/sdk/src/version.d.ts +1 -1
  145. package/dist/_dts/surfaces/src/index.d.ts +9 -0
  146. package/dist/_dts/theme-core/src/buttons/effects/types.d.ts +1 -1
  147. package/dist/_dts/theme-core/src/footer/effectiveNavLinkStyle.d.ts +13 -0
  148. package/dist/_dts/theme-core/src/footer/index.d.ts +1 -0
  149. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  150. package/dist/_dts/theme-core/src/header/effectiveNavLinkStyle.d.ts +17 -0
  151. package/dist/_dts/theme-core/src/header/generateHeaderLogoStyles.d.ts +15 -0
  152. package/dist/_dts/theme-core/src/header/generateHeaderNavLinkStyles.d.ts +4 -0
  153. package/dist/_dts/theme-core/src/header/index.d.ts +3 -0
  154. package/dist/_dts/theme-core/src/header/legacyNavLinkStyle.d.ts +1 -1
  155. package/dist/_dts/theme-core/src/header/openingForegroundProjection.d.ts +7 -0
  156. package/dist/_dts/theme-core/src/header/rootPaint.d.ts +4 -0
  157. package/dist/_dts/theme-core/src/inputs/checkable.d.ts +42 -0
  158. package/dist/_dts/theme-core/src/inputs/inputGroup.d.ts +19 -0
  159. package/dist/_dts/theme-core/src/navigation/effectPolicy.d.ts +38 -0
  160. package/dist/_dts/theme-core/src/navigation/generateNavLinkCSS.d.ts +4 -0
  161. package/dist/_dts/theme-core/src/navigation/types.d.ts +4 -0
  162. package/dist/_dts/theme-core/src/site-styles/accessibleSurfaces.d.ts +1 -1
  163. package/dist/_dts/theme-core/src/surfaces/foregroundContract.d.ts +7 -0
  164. package/dist/_dts/theme-core/src/surfaces/foregroundInteraction.d.ts +29 -22
  165. package/dist/_dts/theme-core/src/surfaces/foregroundRoles.d.ts +10 -2
  166. package/dist/_dts/theme-core/src/surfaces/resolveSurfaceForeground.d.ts +9 -0
  167. package/dist/_dts/theme-core/src/utils/cssDeclarations.d.ts +2 -0
  168. package/dist/_dts/ui/src/badge.d.ts +2 -1
  169. package/dist/_dts/ui/src/button.d.ts +1 -1
  170. package/dist/_dts/ui/src/combobox-keys.d.ts +23 -0
  171. package/dist/_dts/ui/src/combobox-rows.d.ts +34 -0
  172. package/dist/_dts/ui/src/combobox.d.ts +26 -1
  173. package/dist/_dts/ui/src/date-picker.d.ts +5 -8
  174. package/dist/_dts/ui/src/editor-item-card.d.ts +1 -0
  175. package/dist/_dts/ui/src/field-trigger.d.ts +39 -0
  176. package/dist/_dts/ui/src/fieldControl.d.ts +27 -0
  177. package/dist/_dts/ui/src/index.d.ts +4 -1
  178. package/dist/_dts/ui/src/native-select.d.ts +8 -0
  179. package/dist/_dts/ui/src/navigation-tabs.d.ts +2 -1
  180. package/dist/_dts/ui/src/popover.d.ts +7 -1
  181. package/dist/_dts/ui/src/segmented-control.d.ts +4 -0
  182. package/dist/_dts/ui/src/surface.d.ts +1 -1
  183. package/dist/client/{BookingConsentAgreement-DlVOmpW4.mjs → BookingMailingListNote-1n4Ch_u_.mjs} +15 -4
  184. package/dist/client/CheckboxChoice-B33MqoUo.mjs +24 -0
  185. package/dist/client/{DiscountCodeDisclosure-T9q623PQ.mjs → DiscountCodeDisclosure-CKJtz0mY.mjs} +1 -1
  186. package/dist/client/{EventCombined.client-DnsUeONl.mjs → EventCombined.client-C0pgma9y.mjs} +7 -7
  187. package/dist/client/{EventListing.client-CNBFqJS4.mjs → EventListing.client-4fhLOvHP.mjs} +2 -2
  188. package/dist/client/{LeafletStaticMap-C7higg52.mjs → LeafletStaticMap-DScC4F3w.mjs} +1 -1
  189. package/dist/client/{scrollToBlock-CWs8EIdo.mjs → TerminalPanel-B5ZUsYhe.mjs} +77 -77
  190. package/dist/client/{ThemedButton-LAJTNrS8.mjs → ThemedButton-DoVIV1Ao.mjs} +2 -2
  191. package/dist/client/{accordion-BcNF9TjX.mjs → accordion-CoT5g7zo.mjs} +1 -1
  192. package/dist/client/{bookingForm-BUaQ3S03.mjs → bookingForm-BWxB46xD.mjs} +251 -150
  193. package/dist/client/bookings.mjs +415 -234
  194. package/dist/client/{carousel-CTdF6e0V.mjs → carousel-DtNYWFd3.mjs} +2 -2
  195. package/dist/client/{carousel.client-jahpU9Vz.mjs → carousel.client-A2lG-9od.mjs} +1 -1
  196. package/dist/client/{cart-pGtyf_XU.mjs → cart-z4qZih1Y.mjs} +3 -3
  197. package/dist/client/{checkout-Da9WSn7Y.mjs → checkout-DpL7euFH.mjs} +3 -3
  198. package/dist/client/{checkoutUrls-CW3-78uu.mjs → checkoutUrls-BEfR7kVu.mjs} +1 -1
  199. package/dist/client/client.mjs +3721 -2220
  200. package/dist/client/{colorStyles-CuJBiS-1.mjs → colorStyles-j5U9v5JA.mjs} +5 -1
  201. package/dist/client/{context-BFeY_Wbm.mjs → context-C8TinPJc.mjs} +1 -1
  202. package/dist/client/{dates-BhwVSxDg.mjs → dates-vwwxTeB0.mjs} +2 -3
  203. package/dist/client/{eventCalendar-BAtdnR4s.mjs → eventCalendar-DIbHfJXO.mjs} +10 -10
  204. package/dist/client/{eventCombined-RksA3tRC.mjs → eventCombined-DoGMJ6cg.mjs} +4 -4
  205. package/dist/client/{eventDetails-BB9hB4wR.mjs → eventDetails-BjN9v6a1.mjs} +4 -4
  206. package/dist/client/{eventListing-BpJBkviM.mjs → eventListing-DajjWgOv.mjs} +4 -4
  207. package/dist/client/{eventRegistration-B18jFq_o.mjs → eventRegistration-DMq9gMA-.mjs} +121 -54
  208. package/dist/client/{form-Dodt8Y8t.mjs → form-Qf6qTbos.mjs} +136 -105
  209. package/dist/client/{headerSection-B0qj9ttg.mjs → headerSection-D7qJrqFX.mjs} +3 -3
  210. package/dist/client/hooks.mjs +1148 -179
  211. package/dist/client/{locationMap-gn-iMk7a.mjs → locationMap-CCF9-t_0.mjs} +4 -4
  212. package/dist/client/{FieldValidationMessage-AYanWFb-.mjs → mailingListSignupCopy-DZSHZrm6.mjs} +14 -1
  213. package/dist/client/{media-BtJ37tzS.mjs → media-CwBGetqC.mjs} +1 -1
  214. package/dist/client/{newsletterForm-oByLdFkr.mjs → newsletterForm-DzCLSP4S.mjs} +206 -104
  215. package/dist/client/{pricing-BOU0_Hai.mjs → pricing-Cgxv2KLC.mjs} +1 -1
  216. package/dist/client/{productDetail-D9v1zH2j.mjs → productDetail-ru9w5GHx.mjs} +3 -3
  217. package/dist/client/{productList-D-mItx1n.mjs → productList-zaapKSl-.mjs} +3 -3
  218. package/dist/client/{propsDecoder-C3TP_z4x.mjs → propsDecoder-CwvvNOHx.mjs} +91 -28
  219. package/dist/client/rendering/client.mjs +1441 -826
  220. package/dist/client/rendering/islands.mjs +19 -19
  221. package/dist/client/rendering.mjs +3652 -2005
  222. package/dist/client/{routeIslandApiConfig-DzN1W0sq.mjs → routeIslandApiConfig-BwVFo0Y4.mjs} +1 -1
  223. package/dist/client/{shop-commerce-gklw_hLF.mjs → shop-commerce-De7gEnkA.mjs} +8 -8
  224. package/dist/client/{shop-commerce-store-Sf1eyTaZ.mjs → shop-commerce-store-B3MCxIBW.mjs} +1 -1
  225. package/dist/client/{shop-Dufw7N7o.mjs → shop-mktkXvbV.mjs} +7 -7
  226. package/dist/client/{shopShared-B5nyA41S.mjs → shopShared-TqExh235.mjs} +5 -5
  227. package/dist/client/{useEventFilters-CLL829vy.mjs → useEventFilters-n_OjkIjX.mjs} +8 -8
  228. package/dist/preview-next/before-render.mjs +490 -153
  229. package/dist/preview-next/client/runtime.mjs +4 -4
  230. package/dist/preview-next/editor-base.css +64 -2
  231. package/dist/preview-next/editor-chrome.css +7 -4
  232. package/dist/preview-next/keepAlive.mjs +450 -153
  233. package/dist/preview-next/middleware.mjs +451 -153
  234. package/dist/{previewAuthStore-BxAFlu-j.mjs → previewAuthStore-C_EHQ5XA.mjs} +475 -153
  235. package/dist/{sdk-runtime-D0uZFev7.mjs → sdk-runtime-BIkJg5y1.mjs} +2 -2
  236. package/dist/{separator-EvdCAn4V.mjs → separator-C9qDP95Z.mjs} +1 -1
  237. package/dist/server/components.mjs +4957 -3509
  238. package/dist/server/config-validation.mjs +1115 -189
  239. package/dist/server/config.mjs +1115 -189
  240. package/dist/server/data.mjs +1113 -188
  241. package/dist/server/index.mjs +492 -154
  242. package/dist/server/navigation.mjs +13 -2
  243. package/dist/server/next.mjs +4798 -3462
  244. package/dist/server/page-converter.mjs +143 -89
  245. package/dist/server/prebuild.mjs +1 -1
  246. package/dist/server/rendering/server.mjs +3862 -2414
  247. package/dist/server/rendering.mjs +5648 -4154
  248. package/dist/server/routing.mjs +1223 -329
  249. package/dist/server/server.mjs +1172 -314
  250. package/dist/server/theme-bridge.mjs +533 -128
  251. package/dist/server/theme.mjs +5 -1
  252. package/dist/styles/index.css +218 -69
  253. package/package.json +1 -1
  254. package/dist/_dts/core/src/participant-identity.d.ts +0 -135
@@ -1,19 +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-DlVOmpW4.mjs";
4
- import { $t as formatBookingInstant, At as resolveBookingSiteId, Bt as clearWorkflowFeedback, Ct as getBookingServiceSlidingScale, Dt as prepareBookingSubmission, Et as parseBookingCurrencyInputToCents, Ft as BOOKING_FORM_DATA_RESERVED_KEYS, Gt as reportWorkflowSuccess, It as isBookingRequirementConsentFieldId, Mt as toSelectedCollectionOptionKind, Nt as projectSelectedAppointmentConsentIntoForm, Ot as resolveAppointmentCheckoutVerificationState, Pt as resolveSelectedAppointmentConsent, St as getBookingRedirectStateFromLocation, Tt as isBookingServiceSlidingAmountInRange, Ut as okWith, Vt as err, Wt as reportWorkflowError, Yt as addLocalScheduleDays, _n as formatCurrencyAmount, an as resolveBookingTimeZoneId, bt as formatBookingCentsAsCurrencyInput, in as parseBookingLocalDate, jt as resolveDefaultBookingServiceId, kt as resolveBookingPaymentStep, t as defineIslandPropsDecoder, tn as formatLocalScheduleDate, vt as logger, wt as getBookingSuccessMessage, xt as formatBookingSubmissionPreparationError, yt as deriveBookingFormViewState, zt as assertNever } from "./propsDecoder-C3TP_z4x.mjs";
5
- import { n as useBlockApi, t as BlockApiProvider } from "./context-BFeY_Wbm.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-1n4Ch_u_.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, Qt as addLocalScheduleDays, Rt as isBookingRequirementConsentFieldId, St as formatBookingCentsAsCurrencyInput, Tt as getBookingServiceSlidingScale, Ut as err, Vt as assertNever, Zt as resolveBookingSignupOffer, bn as formatCurrencyAmount, bt as logger, cn as resolveBookingTimeZoneId, in as formatLocalScheduleDate, jt as resolveBookingPaymentStep, kt as prepareBookingSubmission, nn as formatBookingInstant, qt as reportWorkflowSuccess, sn as parseBookingLocalDate, t as defineIslandPropsDecoder, wt as getBookingRedirectStateFromLocation, xt as deriveBookingFormViewState } from "./propsDecoder-CwvvNOHx.mjs";
5
+ import { n as useBlockApi, t as BlockApiProvider } from "./context-C8TinPJc.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-CWs8EIdo.mjs";
8
- import { t as DiscountCodeDisclosure } from "./DiscountCodeDisclosure-T9q623PQ.mjs";
9
- import { i as SpinnerNode, t as ThemedButton } from "./ThemedButton-LAJTNrS8.mjs";
7
+ import { t as DiscountCodeDisclosure } from "./DiscountCodeDisclosure-CKJtz0mY.mjs";
8
+ import { a as useDiscountCodeUi, i as CheckIcon, n as StateIcon, r as scrollToBlock, t as TerminalPanel } from "./TerminalPanel-B5ZUsYhe.mjs";
9
+ import { i as SpinnerNode, t as ThemedButton } from "./ThemedButton-DoVIV1Ao.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";
11
+ import { i as getFieldValidationControlProps, r as FieldValidationMessage } from "./mailingListSignupCopy-DZSHZrm6.mjs";
12
+ import { t as buildCheckoutReturnUrls } from "./checkoutUrls-BEfR7kVu.mjs";
13
+ import { t as CheckboxChoice } from "./CheckboxChoice-B33MqoUo.mjs";
13
14
  import { t as mountReactIsland } from "./reactMount-SY8AVRof.mjs";
14
- import { t as buildRouteIslandApiConfig } from "./routeIslandApiConfig-DzN1W0sq.mjs";
15
+ import { t as buildRouteIslandApiConfig } from "./routeIslandApiConfig-BwVFo0Y4.mjs";
15
16
  import React, { useCallback, useEffect, useLayoutEffect, useMemo, useReducer, useRef, useState } from "react";
16
- import { jsx, jsxs } from "react/jsx-runtime";
17
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
17
18
  //#region ../core/src/appointment-service-categories.ts
18
19
  /**
19
20
  * Groups services under their categories.
@@ -54,30 +55,6 @@ function layoutServicesByCategory(categories, services, options) {
54
55
  };
55
56
  }
56
57
  //#endregion
57
- //#region ../blocks/src/system/runtime/components/booking/SuccessMessage.tsx
58
- const SuccessMessage = ({ message, resourceName, className }) => {
59
- return /* @__PURE__ */ jsx(TerminalPanel, {
60
- tone: "success",
61
- title: "Booking confirmed",
62
- icon: /* @__PURE__ */ jsx(StateIcon, {
63
- variant: "success",
64
- children: /* @__PURE__ */ jsx(CheckIcon, { strokeWidth: 3 })
65
- }),
66
- body: /* @__PURE__ */ jsx("p", {
67
- className: "ab-text",
68
- children: message
69
- }),
70
- secondaryBody: resourceName ? /* @__PURE__ */ jsxs("p", {
71
- className: "ab-text rb-on-surface--muted",
72
- children: ["Practitioner: ", resourceName]
73
- }) : null,
74
- className: ["ab-center", className ?? ""].join(" ").trim(),
75
- titleClassName: "ab-terminal-title",
76
- role: "alert",
77
- live: "polite"
78
- });
79
- };
80
- //#endregion
81
58
  //#region ../blocks/src/system/runtime/hooks/useSelectedAppointmentConsentForm.ts
82
59
  function useSelectedAppointmentConsentForm(form, selectedService) {
83
60
  return useMemo(() => projectSelectedAppointmentConsentIntoForm(form, resolveSelectedAppointmentConsent(selectedService)), [form, selectedService]);
@@ -642,6 +619,7 @@ function useBookingSubmission(_siteId) {
642
619
  startAt: data.startAt,
643
620
  endAt: data.endAt,
644
621
  customFields: data.customFields,
622
+ mailingListOptIn: data.mailingListOptIn,
645
623
  timezone: data.timezone,
646
624
  customerPassId: data.customerPassId
647
625
  }) : await api.submitBooking({
@@ -651,6 +629,7 @@ function useBookingSubmission(_siteId) {
651
629
  startAt: data.startAt,
652
630
  endAt: data.endAt,
653
631
  customFields: data.customFields,
632
+ mailingListOptIn: data.mailingListOptIn,
654
633
  timezone: data.timezone,
655
634
  discountCode: data.discountCode,
656
635
  selectedSlidingAmount: data.selectedSlidingAmount,
@@ -686,6 +665,40 @@ function useBookingSubmission(_siteId) {
686
665
  };
687
666
  }
688
667
  //#endregion
668
+ //#region ../blocks/src/system/runtime/nodes/booking-form.submit-success.ts
669
+ function completeBookingSubmission(input) {
670
+ const { data } = input;
671
+ if (data.type === "checkout_redirect") {
672
+ if (input.redirect === "auto" && typeof window !== "undefined") input.navigateToCheckout(data.checkoutUrl);
673
+ return {
674
+ ok: true,
675
+ outcome: {
676
+ kind: "checkout_redirect",
677
+ checkoutUrl: data.checkoutUrl,
678
+ sessionId: data.sessionId,
679
+ ...data.mailingListSignupNote ? { mailingListSignupNote: data.mailingListSignupNote } : {}
680
+ }
681
+ };
682
+ }
683
+ input.dispatch({
684
+ type: "feedback-set",
685
+ feedback: {
686
+ kind: "success",
687
+ message: getBookingSuccessMessage(input.successMessage),
688
+ resourceName: data.appointment.resourceName
689
+ }
690
+ });
691
+ return {
692
+ ok: true,
693
+ outcome: {
694
+ kind: "booked",
695
+ appointmentId: data.appointment.id,
696
+ resourceName: data.appointment.resourceName,
697
+ ...data.mailingListSignupNote ? { mailingListSignupNote: data.mailingListSignupNote } : {}
698
+ }
699
+ };
700
+ }
701
+ //#endregion
689
702
  //#region ../blocks/src/system/runtime/nodes/booking-form.validationErrors.ts
690
703
  function omitRecordKey(record, key) {
691
704
  if (!(key in record)) return record;
@@ -727,6 +740,40 @@ function clearBookingFieldError(errors, fieldId) {
727
740
  };
728
741
  }
729
742
  //#endregion
743
+ //#region ../blocks/src/system/runtime/nodes/booking-form.mailing-list-state.ts
744
+ function bookingFormDataWithEligibleOptIn(data, eligible) {
745
+ return {
746
+ ...data,
747
+ mailingListOptIn: eligible && data.mailingListOptIn === true
748
+ };
749
+ }
750
+ function isBookingContactEvent(event) {
751
+ return event.type === "field-updated" || event.type === "field-touched" || event.type === "mailing-list-opt-in-set";
752
+ }
753
+ function applyBookingContactEvent(state, event) {
754
+ switch (event.type) {
755
+ case "field-updated": return {
756
+ ...state,
757
+ fieldValues: {
758
+ ...state.fieldValues,
759
+ [event.fieldId]: event.value
760
+ },
761
+ validationErrors: clearBookingFieldError(clearBookingFormError(state.validationErrors), event.fieldId)
762
+ };
763
+ case "field-touched": return {
764
+ ...state,
765
+ touchedFields: {
766
+ ...state.touchedFields,
767
+ [event.fieldId]: true
768
+ }
769
+ };
770
+ case "mailing-list-opt-in-set": return {
771
+ ...state,
772
+ mailingListOptIn: event.checked
773
+ };
774
+ }
775
+ }
776
+ //#endregion
730
777
  //#region ../blocks/src/system/runtime/nodes/booking-form.field-values.ts
731
778
  function collectInitialBookingFieldValues(initialData) {
732
779
  const values = {};
@@ -752,6 +799,7 @@ function createInitialBookingFlowReducerState(input) {
752
799
  selectedDate: toOptionalString(initialData.selectedDate),
753
800
  selectedSlot: null,
754
801
  fieldValues: collectInitialBookingFieldValues(initialData),
802
+ mailingListOptIn: initialData.mailingListOptIn === true,
755
803
  touchedFields: {},
756
804
  attemptedStepIds: {},
757
805
  discountCode: toOptionalString(initialData.discountCode) ?? "",
@@ -801,6 +849,7 @@ function applyAvailabilitySelectionInvalidation(state, invalidation) {
801
849
  };
802
850
  }
803
851
  function bookingFlowReducer(state, event) {
852
+ if (isBookingContactEvent(event)) return applyBookingContactEvent(state, event);
804
853
  switch (event.type) {
805
854
  case "service-selected": return applyBookingServiceSelection(state, event.serviceId);
806
855
  case "resource-selected": return {
@@ -823,21 +872,6 @@ function bookingFlowReducer(state, event) {
823
872
  feedback: clearAvailabilityFeedback(state.feedback),
824
873
  validationErrors: clearBookingFormError(state.validationErrors)
825
874
  };
826
- case "field-updated": return {
827
- ...state,
828
- fieldValues: {
829
- ...state.fieldValues,
830
- [event.fieldId]: event.value
831
- },
832
- validationErrors: clearBookingFieldError(clearBookingFormError(state.validationErrors), event.fieldId)
833
- };
834
- case "field-touched": return {
835
- ...state,
836
- touchedFields: {
837
- ...state.touchedFields,
838
- [event.fieldId]: true
839
- }
840
- };
841
875
  case "step-advance-attempted": return state.attemptedStepIds[event.stepId] ? state : {
842
876
  ...state,
843
877
  attemptedStepIds: {
@@ -975,6 +1009,7 @@ function deriveBookingSlotDisplayOptions(input) {
975
1009
  function toBookingFormData(state) {
976
1010
  return {
977
1011
  ...state.fieldValues,
1012
+ mailingListOptIn: state.mailingListOptIn,
978
1013
  serviceId: state.selectedServiceId,
979
1014
  resourceId: state.selectedResourceId ?? state.selectedSlot?.resourceId,
980
1015
  selectedDate: state.selectedDate,
@@ -1237,10 +1272,7 @@ function buildBookingSubmitPlan(input) {
1237
1272
  };
1238
1273
  const prepared = prepareBookingSubmission({
1239
1274
  formId: input.formId,
1240
- data: toBookingFormData({
1241
- ...input.state,
1242
- altchaSolution: input.altchaSolution ?? input.state.altchaSolution
1243
- }),
1275
+ data: bookingFormDataWithEligibleOptIn(toBookingFormData(input.state), Boolean(input.mailingListEligible)),
1244
1276
  services: input.services,
1245
1277
  defaultServiceId: input.defaultServiceId,
1246
1278
  defaultResourceId: input.defaultResourceId,
@@ -1426,6 +1458,8 @@ function useHeadlessBookingFlow(options) {
1426
1458
  const canLoadAppointmentPackages = Boolean(options.enableAppointmentPackages && hasPortalBearerAuth && selectedService && !selectedServiceSlidingScale && (selectedService.priceAmount ?? 0) > 0);
1427
1459
  const appointmentPackagesUnavailableReason = !options.enableAppointmentPackages ? "disabled" : !selectedService || selectedServiceSlidingScale || (selectedService.priceAmount ?? 0) <= 0 ? "missing-priced-service" : !hasPortalBearerAuth ? "missing-portal-auth" : null;
1428
1460
  const data = useMemo(() => toBookingFormData(state), [state]);
1461
+ const mailingList = resolveBookingSignupOffer(options.mailingList, options.siteName);
1462
+ const mailingListEligible = mailingList !== null;
1429
1463
  const availabilityDatesQuery = useMemo(() => buildBookingAvailabilityQuery({
1430
1464
  serviceId: selectedServiceId,
1431
1465
  resourceId: selectedResourceId,
@@ -1686,7 +1720,8 @@ function useHeadlessBookingFlow(options) {
1686
1720
  viewerTimeZone: latest.viewerTimeZone,
1687
1721
  redirect: submitOptions?.redirect ?? "manual",
1688
1722
  successUrl: submitOptions?.successUrl,
1689
- cancelUrl: submitOptions?.cancelUrl
1723
+ cancelUrl: submitOptions?.cancelUrl,
1724
+ mailingListEligible
1690
1725
  });
1691
1726
  if (!plan.ok) {
1692
1727
  dispatch({
@@ -1719,37 +1754,18 @@ function useHeadlessBookingFlow(options) {
1719
1754
  message: result.error
1720
1755
  };
1721
1756
  }
1722
- if (result.data.type === "checkout_redirect") {
1723
- if (plan.redirect === "auto" && typeof window !== "undefined") latest.navigateToCheckout(result.data.checkoutUrl);
1724
- return {
1725
- ok: true,
1726
- outcome: {
1727
- kind: "checkout_redirect",
1728
- checkoutUrl: result.data.checkoutUrl
1729
- }
1730
- };
1731
- }
1732
- dispatch({
1733
- type: "feedback-set",
1734
- feedback: {
1735
- kind: "success",
1736
- message: getBookingSuccessMessage(latest.successMessage),
1737
- resourceName: result.data.appointment.resourceName
1738
- }
1757
+ return completeBookingSubmission({
1758
+ data: result.data,
1759
+ redirect: plan.redirect,
1760
+ successMessage: latest.successMessage,
1761
+ navigateToCheckout: latest.navigateToCheckout,
1762
+ dispatch
1739
1763
  });
1740
- return {
1741
- ok: true,
1742
- outcome: {
1743
- kind: "booked",
1744
- appointmentId: result.data.appointment.id,
1745
- resourceName: result.data.appointment.resourceName
1746
- }
1747
- };
1748
1764
  } finally {
1749
1765
  submittingRef.current = false;
1750
1766
  dispatch({ type: "submission-finished" });
1751
1767
  }
1752
- }, [latestRef]);
1768
+ }, [latestRef, mailingListEligible]);
1753
1769
  const actions = useMemo(() => ({
1754
1770
  selectService: (serviceId) => dispatch({
1755
1771
  type: "service-selected",
@@ -1772,6 +1788,10 @@ function useHeadlessBookingFlow(options) {
1772
1788
  fieldId: unsafeAsBookingFieldId(fieldId),
1773
1789
  value
1774
1790
  }),
1791
+ setMailingListOptIn: (checked) => dispatch({
1792
+ type: "mailing-list-opt-in-set",
1793
+ checked
1794
+ }),
1775
1795
  markFieldTouched: (fieldId) => dispatch({
1776
1796
  type: "field-touched",
1777
1797
  fieldId: unsafeAsBookingFieldId(fieldId)
@@ -1930,6 +1950,8 @@ function useHeadlessBookingFlow(options) {
1930
1950
  appointmentPackages: appointmentPackagesModel
1931
1951
  };
1932
1952
  return {
1953
+ mailingList,
1954
+ mailingListOptIn: state.mailingListOptIn,
1933
1955
  status,
1934
1956
  view,
1935
1957
  steps: stepState.steps,
@@ -2227,6 +2249,25 @@ const TimeSlotSelector = ({ value, onChange, slots, isLoading, timezone, require
2227
2249
  });
2228
2250
  };
2229
2251
  //#endregion
2252
+ //#region ../blocks/src/system/runtime/nodes/booking-form.mailing-list-choice.tsx
2253
+ function BookingMailingListChoice({ booking }) {
2254
+ const id = React.useId();
2255
+ if (!booking.mailingList) return null;
2256
+ return /* @__PURE__ */ jsxs("div", {
2257
+ className: "rb-space-y-2",
2258
+ children: [/* @__PURE__ */ jsx(CheckboxChoice, {
2259
+ id,
2260
+ name: "mailingListOptIn",
2261
+ checked: booking.mailingListOptIn,
2262
+ onChange: (event) => booking.actions.setMailingListOptIn(event.target.checked),
2263
+ label: `Email me news and updates from ${booking.mailingList.siteName}.`
2264
+ }), /* @__PURE__ */ jsx("p", {
2265
+ className: "rb-caption status-muted",
2266
+ children: "Optional. You can unsubscribe at any time."
2267
+ })]
2268
+ });
2269
+ }
2270
+ //#endregion
2230
2271
  //#region ../blocks/src/system/runtime/nodes/booking-form.service-choices.tsx
2231
2272
  function optionCardClassName(isSelected) {
2232
2273
  return `rb-option-card${isSelected ? " rb-option-card--selected" : ""}`;
@@ -2706,12 +2747,17 @@ function PaymentOptionContent({ description, helperText, id, summaryRows, title
2706
2747
  });
2707
2748
  }
2708
2749
  function DefaultDynamicFields({ booking, fields }) {
2750
+ const lastContactIndex = fields.reduce((last, field, index) => [
2751
+ "name",
2752
+ "email",
2753
+ "phone"
2754
+ ].includes(field.id) ? index : last, -1);
2709
2755
  return /* @__PURE__ */ jsx("div", {
2710
2756
  className: "rb-space-y-6",
2711
- children: fields.map((field) => /* @__PURE__ */ jsx(DefaultDynamicField, {
2757
+ children: fields.map((field, index) => /* @__PURE__ */ jsxs(React.Fragment, { children: [/* @__PURE__ */ jsx(DefaultDynamicField, {
2712
2758
  booking,
2713
2759
  field
2714
- }, field.id))
2760
+ }), index === lastContactIndex && booking.mailingList ? /* @__PURE__ */ jsx(BookingMailingListChoice, { booking }) : null] }, field.id))
2715
2761
  });
2716
2762
  }
2717
2763
  function DefaultDynamicField({ booking, field }) {
@@ -2812,7 +2858,7 @@ function DefaultFieldInput({ describedBy, error, errorId, field, onBlur, onChang
2812
2858
  case "radio": return /* @__PURE__ */ jsx("div", {
2813
2859
  className: "rb-space-y-2",
2814
2860
  children: field.field.options?.map((option) => /* @__PURE__ */ jsxs("label", {
2815
- className: "rb-flex rb-items-center rb-gap-2 rb-cursor-pointer",
2861
+ className: "form-check",
2816
2862
  children: [/* @__PURE__ */ jsx("input", {
2817
2863
  type: "radio",
2818
2864
  name: field.id,
@@ -2824,7 +2870,7 @@ function DefaultFieldInput({ describedBy, error, errorId, field, onBlur, onChang
2824
2870
  ...validationProps,
2825
2871
  className: "form-radio"
2826
2872
  }), /* @__PURE__ */ jsx("span", {
2827
- className: "rb-caption",
2873
+ className: "form-check-label",
2828
2874
  children: option.label
2829
2875
  })]
2830
2876
  }, option.value))
@@ -2834,47 +2880,20 @@ function DefaultFieldInput({ describedBy, error, errorId, field, onBlur, onChang
2834
2880
  const checkedValues = toStringArray(value);
2835
2881
  return /* @__PURE__ */ jsx("div", {
2836
2882
  className: "rb-space-y-2",
2837
- children: field.field.options.map((option) => /* @__PURE__ */ jsxs("label", {
2838
- className: "rb-flex rb-items-center rb-gap-2 rb-cursor-pointer",
2839
- children: [/* @__PURE__ */ jsx("input", {
2840
- type: "checkbox",
2841
- name: field.id,
2842
- value: option.value,
2843
- checked: checkedValues.includes(option.value),
2844
- onChange: (event) => {
2845
- onChange(event.target.checked ? [...checkedValues, option.value] : checkedValues.filter((item) => item !== option.value));
2846
- },
2847
- onBlur,
2848
- ...validationProps,
2849
- className: "form-checkbox"
2850
- }), /* @__PURE__ */ jsx("span", {
2851
- className: "rb-caption",
2852
- children: option.label
2853
- })]
2883
+ children: field.field.options.map((option) => /* @__PURE__ */ jsx(CheckboxChoice, {
2884
+ name: field.id,
2885
+ value: option.value,
2886
+ checked: checkedValues.includes(option.value),
2887
+ onChange: (event) => {
2888
+ onChange(event.target.checked ? [...checkedValues, option.value] : checkedValues.filter((item) => item !== option.value));
2889
+ },
2890
+ onBlur,
2891
+ ...validationProps,
2892
+ label: option.label
2854
2893
  }, option.value))
2855
2894
  });
2856
2895
  }
2857
- return /* @__PURE__ */ jsxs("label", {
2858
- className: "rb-flex rb-items-center rb-gap-2 rb-cursor-pointer",
2859
- children: [/* @__PURE__ */ jsx("input", {
2860
- type: "checkbox",
2861
- id: field.inputId,
2862
- name: field.id,
2863
- checked: Boolean(value),
2864
- onChange: (event) => onChange(event.target.checked),
2865
- onBlur,
2866
- required: field.required,
2867
- ...validationProps,
2868
- className: "form-checkbox"
2869
- }), /* @__PURE__ */ jsx("span", {
2870
- className: "rb-caption",
2871
- children: field.field.placeholder || field.label
2872
- })]
2873
- });
2874
- case "booking_requirement_consent": return /* @__PURE__ */ jsxs("label", {
2875
- className: "rb-flex rb-items-start rb-gap-2 rb-cursor-pointer",
2876
- children: [/* @__PURE__ */ jsx("input", {
2877
- type: "checkbox",
2896
+ return /* @__PURE__ */ jsx(CheckboxChoice, {
2878
2897
  id: field.inputId,
2879
2898
  name: field.id,
2880
2899
  checked: Boolean(value),
@@ -2882,11 +2901,18 @@ function DefaultFieldInput({ describedBy, error, errorId, field, onBlur, onChang
2882
2901
  onBlur,
2883
2902
  required: field.required,
2884
2903
  ...validationProps,
2885
- className: "form-checkbox rb-mt-0.5"
2886
- }), /* @__PURE__ */ jsx("span", {
2887
- className: "rb-caption",
2888
- children: field.field.checkboxLabel
2889
- })]
2904
+ label: field.field.placeholder || field.label
2905
+ });
2906
+ case "booking_requirement_consent": return /* @__PURE__ */ jsx(CheckboxChoice, {
2907
+ id: field.inputId,
2908
+ name: field.id,
2909
+ checked: Boolean(value),
2910
+ onChange: (event) => onChange(event.target.checked),
2911
+ onBlur,
2912
+ required: field.required,
2913
+ ...validationProps,
2914
+ label: field.field.checkboxLabel,
2915
+ presentation: "tile"
2890
2916
  });
2891
2917
  case "number": return /* @__PURE__ */ jsx("input", {
2892
2918
  ...commonProps,
@@ -3002,9 +3028,88 @@ function DefaultBookingErrorSummary({ errors, id }) {
3002
3028
  });
3003
3029
  }
3004
3030
  //#endregion
3031
+ //#region ../blocks/src/system/runtime/components/booking/SuccessMessage.tsx
3032
+ const SuccessMessage = ({ message, resourceName, className }) => {
3033
+ return /* @__PURE__ */ jsx(TerminalPanel, {
3034
+ tone: "success",
3035
+ title: "Booking confirmed",
3036
+ icon: /* @__PURE__ */ jsx(StateIcon, {
3037
+ variant: "success",
3038
+ children: /* @__PURE__ */ jsx(CheckIcon, { strokeWidth: 3 })
3039
+ }),
3040
+ body: /* @__PURE__ */ jsx("p", {
3041
+ className: "ab-text",
3042
+ children: message
3043
+ }),
3044
+ secondaryBody: resourceName ? /* @__PURE__ */ jsxs("p", {
3045
+ className: "ab-text rb-on-surface--muted",
3046
+ children: ["Practitioner: ", resourceName]
3047
+ }) : null,
3048
+ className: ["ab-center", className ?? ""].join(" ").trim(),
3049
+ titleClassName: "ab-terminal-title",
3050
+ role: "alert",
3051
+ live: "polite"
3052
+ });
3053
+ };
3054
+ //#endregion
3055
+ //#region ../blocks/src/system/runtime/nodes/booking-form.mailing-list-note.ts
3056
+ function storageKey(sessionId) {
3057
+ return `riverbank:booking:mailing-list:${sessionId}`;
3058
+ }
3059
+ function saveAppointmentMailingListNote(sessionId, note) {
3060
+ if (!note) return;
3061
+ try {
3062
+ window.sessionStorage.setItem(storageKey(sessionId), note);
3063
+ } catch {}
3064
+ }
3065
+ function readAppointmentMailingListNote(sessionId) {
3066
+ try {
3067
+ const stored = window.sessionStorage.getItem(storageKey(sessionId));
3068
+ return stored === "confirmation_required" || stored === "not_confirmed" ? stored : null;
3069
+ } catch {
3070
+ return null;
3071
+ }
3072
+ }
3073
+ //#endregion
3074
+ //#region ../blocks/src/system/runtime/nodes/booking-form.completion.tsx
3075
+ function BookingFormCompletion({ resourceName, successMessage, redirectState, localNote }) {
3076
+ const note = redirectState.kind === "success" ? readAppointmentMailingListNote(redirectState.sessionId) : localNote;
3077
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(SuccessMessage, {
3078
+ message: getBookingSuccessMessage(successMessage),
3079
+ resourceName
3080
+ }), note ? /* @__PURE__ */ jsx(BookingMailingListNote, {
3081
+ note,
3082
+ context: "booking",
3083
+ className: "rb-mt-4"
3084
+ }) : null] });
3085
+ }
3086
+ //#endregion
3087
+ //#region ../blocks/src/system/runtime/nodes/booking-form.submit-handler.ts
3088
+ function appendRebookFlag(url, enabled) {
3089
+ if (!enabled) return url;
3090
+ const nextUrl = new URL(url);
3091
+ nextUrl.searchParams.set("rebook", "1");
3092
+ return nextUrl.toString();
3093
+ }
3094
+ function createBookingFormSubmitHandler(input) {
3095
+ return async () => {
3096
+ const { successUrl, cancelUrl } = buildCheckoutReturnUrls("booking", input.bookingAnchorId);
3097
+ const result = await input.booking.actions.submit({
3098
+ redirect: "manual",
3099
+ successUrl: appendRebookFlag(successUrl, input.isPortalRebook),
3100
+ cancelUrl: appendRebookFlag(cancelUrl, input.isPortalRebook)
3101
+ });
3102
+ if (!result.ok) return;
3103
+ if (result.outcome.kind === "checkout_redirect") {
3104
+ saveAppointmentMailingListNote(result.outcome.sessionId, result.outcome.mailingListSignupNote);
3105
+ window.location.href = result.outcome.checkoutUrl;
3106
+ return;
3107
+ }
3108
+ input.setLocalMailingListNote(result.outcome.mailingListSignupNote ?? null);
3109
+ };
3110
+ }
3111
+ //#endregion
3005
3112
  //#region ../blocks/src/system/runtime/nodes/booking-form.client.tsx
3006
- const PORTAL_REBOOK_QUERY_PARAM = "rebook";
3007
- const PORTAL_REBOOK_QUERY_VALUE = "1";
3008
3113
  const REBOOK_COMPLETION_MODE_VERIFIED_CHECKOUT = "verified_checkout";
3009
3114
  const REBOOK_COMPLETION_MODE_BYPASSED = "bypassed";
3010
3115
  function getBookingRedirectLocationSnapshot() {
@@ -3017,12 +3122,6 @@ function getBookingRedirectLocationSnapshot() {
3017
3122
  hash: window.location.hash
3018
3123
  };
3019
3124
  }
3020
- function appendRebookFlag(url, enabled) {
3021
- if (!enabled) return url;
3022
- const nextUrl = new URL(url);
3023
- nextUrl.searchParams.set(PORTAL_REBOOK_QUERY_PARAM, PORTAL_REBOOK_QUERY_VALUE);
3024
- return nextUrl.toString();
3025
- }
3026
3125
  /**
3027
3126
  * Themed surface container for every booking view state (wizard, success,
3028
3127
  * verifying). Styled by the shared registration-surface layer.
@@ -3045,12 +3144,16 @@ const BookingFormClient = ({ siteId: siteIdProp, render }) => {
3045
3144
  const isPortalRebook = render.hydration.rebookContext?.kind === "portal_rebook";
3046
3145
  const hasLoggedRebookCompletionRef = useRef(false);
3047
3146
  const [redirectState] = useState(() => getBookingRedirectStateFromLocation(getBookingRedirectLocationSnapshot()));
3147
+ const [localMailingListNote, setLocalMailingListNote] = useState(null);
3048
3148
  const showSpamProtection = render.hydration.spamProtectionEnabled ?? isSpamProtectionEnabled();
3049
3149
  const api = useBlockApi();
3050
3150
  const hasPortalAuth = api.config.auth.type === "bearer" || api.config.authOverrides?.portal?.type === "bearer";
3151
+ const formId = render.hydration.formId ?? form?.id ?? "booking-form";
3051
3152
  const booking = useHeadlessBookingFlow({
3153
+ mailingList: render.hydration.mailingList,
3154
+ siteName: render.hydration.siteName,
3052
3155
  siteId,
3053
- formId: render.hydration.formId ?? form?.id ?? "booking-form",
3156
+ formId,
3054
3157
  form,
3055
3158
  services,
3056
3159
  serviceCategories: render.hydration.serviceCategories,
@@ -3120,22 +3223,20 @@ const BookingFormClient = ({ siteId: siteIdProp, render }) => {
3120
3223
  children: render.display.message ?? "Booking form not found. Please check your configuration."
3121
3224
  })
3122
3225
  });
3123
- const handleComplete = async () => {
3124
- const { successUrl, cancelUrl } = buildCheckoutReturnUrls("booking", bookingAnchorId);
3125
- const result = await booking.actions.submit({
3126
- redirect: "manual",
3127
- successUrl: appendRebookFlag(successUrl, isPortalRebook),
3128
- cancelUrl: appendRebookFlag(cancelUrl, isPortalRebook)
3129
- });
3130
- if (!result.ok) return;
3131
- if (result.outcome.kind === "checkout_redirect") window.location.href = result.outcome.checkoutUrl;
3132
- };
3226
+ const handleComplete = createBookingFormSubmitHandler({
3227
+ booking,
3228
+ bookingAnchorId,
3229
+ isPortalRebook,
3230
+ setLocalMailingListNote
3231
+ });
3133
3232
  if (viewState.kind === "success") return /* @__PURE__ */ jsx(BookingSurface, {
3134
3233
  id: bookingAnchorId,
3135
3234
  className: render.display.className,
3136
- children: /* @__PURE__ */ jsx(SuccessMessage, {
3137
- message: getBookingSuccessMessage(render.display.successMessage),
3138
- resourceName: viewState.resourceName
3235
+ children: /* @__PURE__ */ jsx(BookingFormCompletion, {
3236
+ successMessage: render.display.successMessage,
3237
+ resourceName: viewState.resourceName,
3238
+ redirectState,
3239
+ localNote: localMailingListNote
3139
3240
  })
3140
3241
  });
3141
3242
  if (viewState.kind === "verifying") return /* @__PURE__ */ jsx(BookingSurface, {