@riverbankcms/sdk 0.147.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 (381) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/{PreviewEditorSidebar-DtpB3_sS.mjs → PreviewEditorSidebar-DvEPG3Z2.mjs} +202 -143
  3. package/dist/{PreviewEditorUI-DxTLgaHo.mjs → PreviewEditorUI-D6eb6fkx.mjs} +68 -60
  4. package/dist/{PreviewQueryProvider-Dd4dxOiU.mjs → PreviewQueryProvider-5znTyJuz.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-DMMNCngt.mjs → SdkPreviewModeRuntime-DJ6utQ_R.mjs} +1191 -513
  6. package/dist/{SiteChromeCustomizeContext-DQXZXiqS.mjs → SiteChromeCustomizeContext-CFJYh6vo.mjs} +201798 -197304
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +0 -33
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +0 -3
  9. package/dist/_dts/api/src/accessAdmin.d.ts +0 -4
  10. package/dist/_dts/api/src/accountApi.d.ts +1 -1
  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 +0 -2
  25. package/dist/_dts/api/src/bookingOperations.d.ts +4 -4
  26. package/dist/_dts/api/src/bookingRecords.d.ts +1 -0
  27. package/dist/_dts/api/src/bookings.d.ts +7 -7
  28. package/dist/_dts/api/src/calendar.d.ts +9 -9
  29. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +7 -6
  30. package/dist/_dts/api/src/common/envelope.d.ts +2 -2
  31. package/dist/_dts/api/src/content-editor.d.ts +2 -2
  32. package/dist/_dts/api/src/contentEntries.d.ts +17 -48
  33. package/dist/_dts/api/src/contentRuntime.d.ts +51 -37
  34. package/dist/_dts/api/src/contentTypes.d.ts +11 -11
  35. package/dist/_dts/api/src/contentVersionHistoryClient.d.ts +6 -6
  36. package/dist/_dts/api/src/documentLifecycle.d.ts +67 -0
  37. package/dist/_dts/api/src/domains.d.ts +16 -16
  38. package/dist/_dts/api/src/editLeaseEndpoints.d.ts +72 -0
  39. package/dist/_dts/api/src/emailSettings.d.ts +4 -4
  40. package/dist/_dts/api/src/endpoints.d.ts +133 -41
  41. package/dist/_dts/api/src/eventEmailTemplates.d.ts +2 -2
  42. package/dist/_dts/api/src/eventManagementContracts.d.ts +25 -0
  43. package/dist/_dts/api/src/eventManagementEndpointDefinitions.d.ts +0 -8
  44. package/dist/_dts/api/src/eventPageWords.d.ts +7 -12
  45. package/dist/_dts/api/src/footerSettings.d.ts +6 -6
  46. package/dist/_dts/api/src/index.d.ts +6 -5
  47. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -0
  48. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  49. package/dist/_dts/api/src/navigation.d.ts +5 -5
  50. package/dist/_dts/api/src/pageSurfaceEditorEndpoints.d.ts +55 -0
  51. package/dist/_dts/api/src/pageSurfaceEndpoints.d.ts +28 -7
  52. package/dist/_dts/api/src/pages.d.ts +7 -7
  53. package/dist/_dts/api/src/performance.d.ts +1 -1
  54. package/dist/_dts/api/src/public/index.d.ts +1 -1
  55. package/dist/_dts/api/src/publicAppointmentBookingContracts.d.ts +2 -0
  56. package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +4 -0
  57. package/dist/_dts/api/src/redirects.d.ts +3 -3
  58. package/dist/_dts/api/src/request.d.ts +10 -1
  59. package/dist/_dts/api/src/resources.d.ts +4 -4
  60. package/dist/_dts/api/src/routes.d.ts +8 -3
  61. package/dist/_dts/api/src/sdk-event-upsert.d.ts +0 -1
  62. package/dist/_dts/api/src/sdkBlockUpsertContracts.d.ts +21 -0
  63. package/dist/_dts/api/src/sdkContracts.d.ts +5 -28
  64. package/dist/_dts/api/src/sdkEventEndpointDefinitions.d.ts +1 -1
  65. package/dist/_dts/api/src/sdkEventOccurrenceRequestContracts.d.ts +43 -0
  66. package/dist/_dts/api/src/sdkManagedEventContracts.d.ts +4 -2
  67. package/dist/_dts/api/src/sdkPullEventContracts.d.ts +8 -1
  68. package/dist/_dts/api/src/seo.d.ts +4 -4
  69. package/dist/_dts/api/src/services.d.ts +4 -4
  70. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +15 -8
  71. package/dist/_dts/api/src/siteMembers.d.ts +10 -10
  72. package/dist/_dts/api/src/siteOnboarding.d.ts +14 -0
  73. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +7 -3
  74. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +5 -12
  75. package/dist/_dts/api/src/siteRuntimeEntry.d.ts +31 -0
  76. package/dist/_dts/billing/src/checkout/platform.d.ts +77 -0
  77. package/dist/_dts/billing/src/components/index.d.ts +25 -40
  78. package/dist/_dts/billing/src/membership/index.d.ts +1 -3
  79. package/dist/_dts/billing/src/plans/entitlements.d.ts +80 -0
  80. package/dist/_dts/billing/src/plans/registry.d.ts +16 -16
  81. package/dist/_dts/billing/src/plans/standing.d.ts +9 -2
  82. package/dist/_dts/billing/src/plans/types.d.ts +5 -15
  83. package/dist/_dts/billing/src/site-arrangements.d.ts +2 -2
  84. package/dist/_dts/billing/src/subscriptions/standingEvidence.d.ts +2 -4
  85. package/dist/_dts/billing/src/subscriptions/store.d.ts +17 -11
  86. package/dist/_dts/block-form/src/backend/store-backend.d.ts +6 -7
  87. package/dist/_dts/block-form/src/backend/types.d.ts +7 -0
  88. package/dist/_dts/block-form/src/widgets/FieldFrame.d.ts +3 -1
  89. package/dist/_dts/blocks/src/client/events.d.ts +3 -0
  90. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +16 -4
  91. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +4 -13
  92. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +2 -0
  93. package/dist/_dts/blocks/src/portal/types.d.ts +0 -2
  94. package/dist/_dts/blocks/src/system/blocks/contact-newsletter.d.ts +2 -1
  95. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +3 -1
  96. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +4 -4
  97. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +6 -1
  98. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +2 -2
  99. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  100. package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +2 -0
  101. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +6 -0
  102. package/dist/_dts/blocks/src/system/runtime/api/types/portal.d.ts +6 -0
  103. package/dist/_dts/blocks/src/system/runtime/api/types/shop.d.ts +4 -0
  104. package/dist/_dts/blocks/src/system/runtime/components/booking/SuccessMessage.d.ts +4 -1
  105. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +24 -6
  106. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +12 -3
  107. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +3 -0
  108. package/dist/_dts/blocks/src/system/runtime/hooks/usePaymentVerification.d.ts +2 -1
  109. package/dist/_dts/blocks/src/system/runtime/hooks/usePolling.d.ts +7 -48
  110. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.checkout-return-context.d.ts +7 -0
  111. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.completion.d.ts +3 -1
  112. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +4 -0
  113. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +9 -0
  114. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.payment-confirmation.d.ts +13 -0
  115. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +15 -1
  116. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-actions.d.ts +8 -0
  117. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-handler.d.ts +1 -0
  118. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +1 -0
  119. package/dist/_dts/blocks/src/system/runtime/nodes/checkout.server.d.ts +2 -1
  120. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationSurface.d.ts +2 -1
  121. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizard.d.ts +5 -0
  122. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/SuccessStep.d.ts +4 -1
  123. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +2 -0
  124. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +2 -5
  125. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +9 -5
  126. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventListing.interactive.d.ts +6 -0
  127. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/dates.d.ts +37 -3
  128. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCard.client.d.ts +1 -1
  129. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/EventCard.d.ts +16 -1
  130. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCardPresentations.d.ts +13 -0
  131. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +5 -5
  132. package/dist/_dts/blocks/src/system/runtime/nodes/shared/MagicLinkForm.d.ts +1 -14
  133. package/dist/_dts/blocks/src/system/runtime/nodes/shared/MagicLinkForm.state.d.ts +12 -0
  134. package/dist/_dts/blocks/src/system/runtime/nodes/shop.interactive.d.ts +13 -0
  135. package/dist/_dts/blocks/src/system/runtime/shared/components/DemoBookingPortalAccess.d.ts +22 -0
  136. package/dist/_dts/blocks/src/system/runtime/shared/components/DemoPortalSignInLink.d.ts +4 -0
  137. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +1 -0
  138. package/dist/_dts/blocks/src/system/runtime/shared/utils/demoBookingPassStorage.d.ts +10 -0
  139. package/dist/_dts/blocks/src/system/runtime/shared/utils/demoPortalMagicLink.d.ts +29 -0
  140. package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +4 -0
  141. package/dist/_dts/content-editor/src/components/ContentFieldsForm.d.ts +2 -7
  142. package/dist/_dts/content-editor/src/controller/EditLeaseController.d.ts +39 -0
  143. package/dist/_dts/content-editor/src/controller/EditorWriteGate.d.ts +38 -0
  144. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +25 -61
  145. package/dist/_dts/content-editor/src/controller/LinkedEntryLeaseBanner.d.ts +7 -0
  146. package/dist/_dts/content-editor/src/controller/LinkedEntryLeaseControllers.d.ts +14 -0
  147. package/dist/_dts/content-editor/src/controller/deriveEditorUnpublishedState.d.ts +6 -0
  148. package/dist/_dts/content-editor/src/controller/documentValueBaseline.d.ts +25 -0
  149. package/dist/_dts/content-editor/src/controller/editLeaseLossSignal.d.ts +6 -0
  150. package/dist/_dts/content-editor/src/controller/editLeaseNotice.d.ts +28 -0
  151. package/dist/_dts/content-editor/src/controller/editorClientId.d.ts +2 -0
  152. package/dist/_dts/content-editor/src/controller/editorEditability.d.ts +38 -0
  153. package/dist/_dts/content-editor/src/controller/editorLeaseParticipation.d.ts +34 -0
  154. package/dist/_dts/content-editor/src/controller/normalizedMetadataBaseline.d.ts +29 -0
  155. package/dist/_dts/content-editor/src/controller/pageSurfaceDocumentBaselines.d.ts +14 -0
  156. package/dist/_dts/content-editor/src/controller/pageSurfaceLifecycle.d.ts +11 -0
  157. package/dist/_dts/content-editor/src/controller/planDocumentBaselineRefresh.d.ts +19 -0
  158. package/dist/_dts/content-editor/src/controller/readDocumentLeaseBaselines.d.ts +19 -0
  159. package/dist/_dts/content-editor/src/controller/refreshDocumentLeaseBaseline.d.ts +12 -0
  160. package/dist/_dts/content-editor/src/controller/refreshLinkedEntry.d.ts +17 -0
  161. package/dist/_dts/content-editor/src/controller/replayRestoredEditorEffects.d.ts +2 -3
  162. package/dist/_dts/content-editor/src/controller/routeWrites.d.ts +26 -0
  163. package/dist/_dts/content-editor/src/controller/useAutosaveTriggers.d.ts +16 -17
  164. package/dist/_dts/content-editor/src/controller/useBlockedPublishPlan.d.ts +6 -2
  165. package/dist/_dts/content-editor/src/controller/useBlocksList.d.ts +3 -3
  166. package/dist/_dts/content-editor/src/controller/useEntryValueAutosaves.d.ts +21 -0
  167. package/dist/_dts/content-editor/src/controller/useInitialEditorUiStore.d.ts +24 -0
  168. package/dist/_dts/content-editor/src/controller/useServerBaselineReconciliation.d.ts +17 -0
  169. package/dist/_dts/content-editor/src/footerComposerPanelTypes.d.ts +1 -1
  170. package/dist/_dts/content-editor/src/hooks/applyBlockedPublishPlan.d.ts +5 -1
  171. package/dist/_dts/content-editor/src/hooks/blockDraftLifecycle.d.ts +8 -47
  172. package/dist/_dts/content-editor/src/hooks/editLeaseMachine.d.ts +120 -0
  173. package/dist/_dts/content-editor/src/hooks/publishability.d.ts +6 -10
  174. package/dist/_dts/content-editor/src/hooks/useAutosaveStatus.d.ts +3 -0
  175. package/dist/_dts/content-editor/src/hooks/useBlockAutosave.d.ts +5 -15
  176. package/dist/_dts/content-editor/src/hooks/useDebouncedLatestSave.d.ts +7 -5
  177. package/dist/_dts/content-editor/src/hooks/useEditLease.d.ts +28 -0
  178. package/dist/_dts/content-editor/src/hooks/useEntryActions.d.ts +25 -39
  179. package/dist/_dts/content-editor/src/hooks/useEntryMutations.d.ts +17 -19
  180. package/dist/_dts/content-editor/src/hooks/useLinkedEntryAutosave.d.ts +5 -8
  181. package/dist/_dts/content-editor/src/hooks/useValueAutosave.d.ts +64 -0
  182. package/dist/_dts/content-editor/src/hooks/validateBlocksForPublish.d.ts +0 -7
  183. package/dist/_dts/content-editor/src/index.d.ts +26 -7
  184. package/dist/_dts/content-editor/src/linkedEntries/domain.d.ts +12 -0
  185. package/dist/_dts/content-editor/src/linkedEntries/owner.d.ts +9 -0
  186. package/dist/_dts/content-editor/src/liveDrafts/draftProjection.d.ts +66 -0
  187. package/dist/_dts/content-editor/src/liveDrafts/linkedSaveHandovers.d.ts +37 -0
  188. package/dist/_dts/content-editor/src/liveDrafts/remoteDraftOverlay.d.ts +113 -0
  189. package/dist/_dts/content-editor/src/liveDrafts/useLiveDrafts.d.ts +32 -0
  190. package/dist/_dts/content-editor/src/liveDrafts/useRetentionTicks.d.ts +7 -0
  191. package/dist/_dts/content-editor/src/primitives/shared/activePreviewField.d.ts +6 -0
  192. package/dist/_dts/content-editor/src/primitives/shared/storeBinding.d.ts +1 -0
  193. package/dist/_dts/content-editor/src/services/contentEntryServices.d.ts +96 -19
  194. package/dist/_dts/content-editor/src/services/editorApiClient.d.ts +13 -0
  195. package/dist/_dts/content-editor/src/services/index.d.ts +2 -0
  196. package/dist/_dts/content-editor/src/services/pageSurfaceEditorServices.d.ts +23 -0
  197. package/dist/_dts/content-editor/src/sync/flushValues.d.ts +13 -0
  198. package/dist/_dts/content-editor/src/sync/lifecycleFailure.d.ts +51 -0
  199. package/dist/_dts/content-editor/src/sync/runLifecycle.d.ts +64 -0
  200. package/dist/_dts/content-editor/src/sync/schedulerValues.d.ts +27 -0
  201. package/dist/_dts/content-editor/src/sync/sendPlanning.d.ts +104 -0
  202. package/dist/_dts/content-editor/src/sync/valueSync.d.ts +114 -0
  203. package/dist/_dts/content-editor/src/ui/blockCollection.d.ts +8 -0
  204. package/dist/_dts/content-editor/src/ui/documentLifecycle.d.ts +18 -0
  205. package/dist/_dts/content-editor/src/ui/editorLeaseUiState.d.ts +7 -0
  206. package/dist/_dts/content-editor/src/ui/editorRefresh.d.ts +82 -0
  207. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +102 -127
  208. package/dist/_dts/content-editor/src/ui/editorTransactionState.d.ts +1 -1
  209. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +126 -72
  210. package/dist/_dts/content-editor/src/ui/editorValueSnapshot.d.ts +18 -0
  211. package/dist/_dts/content-editor/src/ui/serverBlockAdmission.d.ts +26 -0
  212. package/dist/_dts/content-editor/src/ui/stores/autosaveStore.d.ts +16 -27
  213. package/dist/_dts/content-editor/src/ui/stores/blockVersionsStore.d.ts +24 -0
  214. package/dist/_dts/content-editor/src/ui/stores/linkedEntryLeaseStore.d.ts +54 -0
  215. package/dist/_dts/content-editor/src/ui/stores/linkedSaveHandoversStore.d.ts +11 -0
  216. package/dist/_dts/content-editor/src/ui/stores/remoteDraftsStore.d.ts +10 -0
  217. package/dist/_dts/content-editor/src/ui/stores/types.d.ts +63 -3
  218. package/dist/_dts/content-editor/src/useFooterComposerState.d.ts +2 -2
  219. package/dist/_dts/content-editor/src/useFooterNavigationLayout.d.ts +1 -1
  220. package/dist/_dts/content-model/src/content-types/builtin-schemas.d.ts +4 -4
  221. package/dist/_dts/content-model/src/content-types/builtins.d.ts +4 -4
  222. package/dist/_dts/content-model/src/definitions/shared.d.ts +11 -2
  223. package/dist/_dts/content-model/src/entry-slots/index.d.ts +1 -0
  224. package/dist/_dts/content-model/src/entry-slots/serializeAllowedBlocks.d.ts +2 -0
  225. package/dist/_dts/content-model/src/metadataConfig.d.ts +10 -38
  226. package/dist/_dts/content-model/src/templates/defaults.d.ts +0 -1
  227. package/dist/_dts/content-model/src/types.d.ts +0 -1
  228. package/dist/_dts/core/src/block-content-identity.d.ts +49 -1
  229. package/dist/_dts/core/src/branded.d.ts +12 -0
  230. package/dist/_dts/core/src/currency-format.d.ts +8 -2
  231. package/dist/_dts/core/src/demo-lifecycle-status.d.ts +2 -2
  232. package/dist/_dts/core/src/demo-warm-pool-target.d.ts +8 -0
  233. package/dist/_dts/core/src/edit-lease.d.ts +55 -0
  234. package/dist/_dts/core/src/editor-state.d.ts +38 -13
  235. package/dist/_dts/core/src/editor-value-sync.d.ts +79 -0
  236. package/dist/_dts/core/src/html-entities.d.ts +6 -0
  237. package/dist/_dts/core/src/index.d.ts +4 -0
  238. package/dist/_dts/core/src/uuid.d.ts +7 -5
  239. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +159 -153
  240. package/dist/_dts/editor/src/EditorProvider.d.ts +5 -0
  241. package/dist/_dts/editor/src/chrome/EditorChrome.d.ts +14 -0
  242. package/dist/_dts/editor/src/chrome/EditorStatusBar.d.ts +1 -0
  243. package/dist/_dts/editor/src/chrome/statusBarPresentation.d.ts +0 -1
  244. package/dist/_dts/editor/src/index.d.ts +1 -1
  245. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +10 -9
  246. package/dist/_dts/editor-blocks/src/BlockForm.d.ts +1 -1
  247. package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +1 -1
  248. package/dist/_dts/editor-blocks/src/block-editor/BlockCardFrame.d.ts +1 -1
  249. package/dist/_dts/editor-blocks/src/block-editor/BlockSettingsModal.d.ts +1 -1
  250. package/dist/_dts/editor-blocks/src/block-editor/applyExtendedFieldDefaults.d.ts +3 -4
  251. package/dist/_dts/editor-blocks/src/block-editor/blockDraftBaselineSeed.d.ts +4 -8
  252. package/dist/_dts/editor-blocks/src/block-editor/editorBlockItem.d.ts +23 -0
  253. package/dist/_dts/editor-blocks/src/block-editor/generatedIconApplyCoordination.d.ts +2 -7
  254. package/dist/_dts/editor-blocks/src/block-editor/hooks/applyBlockStructureChange.d.ts +4 -0
  255. package/dist/_dts/editor-blocks/src/block-editor/hooks/buildInsertBlockHistoryCommand.d.ts +14 -5
  256. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockBaselineSync.d.ts +21 -19
  257. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockCreation.d.ts +2 -10
  258. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockDuplication.d.ts +8 -16
  259. package/dist/_dts/editor-blocks/src/block-editor/owner.d.ts +6 -16
  260. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +37 -9
  261. package/dist/_dts/editor-blocks/src/index.d.ts +2 -1
  262. package/dist/_dts/editor-blocks/src/widgets/entry-picker/loaders.d.ts +1 -1
  263. package/dist/_dts/editor-blocks/src/widgets/link/loaders.d.ts +1 -1
  264. package/dist/_dts/editor-blocks/src/widgets/mailing-list-targeting/loaders.d.ts +1 -1
  265. package/dist/_dts/editor-blocks/src/widgets/reference/loaders.d.ts +1 -1
  266. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/loaders.d.ts +3 -2
  267. package/dist/_dts/media-core/src/fileStorage.d.ts +4 -0
  268. package/dist/_dts/media-editor/src/context.d.ts +1 -1
  269. package/dist/_dts/media-editor/src/createMediaEditorProvider.d.ts +1 -2
  270. package/dist/_dts/media-editor/src/provider.d.ts +3 -2
  271. package/dist/_dts/media-react/src/hooks/internal/classification.d.ts +1 -1
  272. package/dist/_dts/media-react/src/hooks/useApiMediaUploader.d.ts +3 -1
  273. package/dist/_dts/preview-next/src/client/blocks/composer/mergeDrafts.d.ts +8 -3
  274. package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +6 -3
  275. package/dist/_dts/preview-next/src/client/blocks/linkedEntryRenderOverlay.d.ts +22 -2
  276. package/dist/_dts/preview-next/src/client/blocks/previewProjection/entryFieldRebinding.d.ts +13 -0
  277. package/dist/_dts/preview-next/src/client/blocks/previewProjection/index.d.ts +2 -1
  278. package/dist/_dts/preview-next/src/client/blocks/previewProjection/types.d.ts +11 -1
  279. package/dist/_dts/preview-next/src/client/blocks/renderPrecedence.d.ts +17 -0
  280. package/dist/_dts/preview-next/src/client/blocks/useLinkedSaveHandoverRetention.d.ts +20 -0
  281. package/dist/_dts/preview-next/src/client/index.d.ts +1 -1
  282. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +2 -1
  283. package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +2 -1
  284. package/dist/_dts/preview-next/src/client/preview/PreviewAccessBanners.d.ts +7 -0
  285. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -1
  286. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +24 -14
  287. package/dist/_dts/preview-next/src/client/preview/PreviewLeaseEditingMode.d.ts +2 -0
  288. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +9 -2
  289. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +1 -0
  290. package/dist/_dts/preview-next/src/client/preview/previewCustomizeAutosave.d.ts +5 -0
  291. package/dist/_dts/preview-next/src/client/preview/previewCustomizeWorkflowState.d.ts +3 -4
  292. package/dist/_dts/preview-next/src/client/preview/sdkConfig.d.ts +1 -0
  293. package/dist/_dts/preview-next/src/client/preview/usePreviewCustomizeWorkflowState.d.ts +4 -0
  294. package/dist/_dts/realtime/src/client.d.ts +3 -0
  295. package/dist/_dts/realtime/src/draftChannel.d.ts +91 -0
  296. package/dist/_dts/realtime/src/drafts.d.ts +210 -0
  297. package/dist/_dts/realtime/src/index.d.ts +3 -0
  298. package/dist/_dts/realtime/src/leaseChangeSubscriptions.d.ts +8 -0
  299. package/dist/_dts/realtime/src/types.d.ts +113 -0
  300. package/dist/_dts/realtime/src/useDraftChannel.d.ts +34 -0
  301. package/dist/_dts/realtime/src/useSiteRealtimeReload.d.ts +27 -0
  302. package/dist/_dts/sdk/src/public-api/contracts.d.ts +6 -55
  303. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +1 -0
  304. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +1 -0
  305. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +2 -0
  306. package/dist/_dts/sdk/src/version.d.ts +1 -1
  307. package/dist/_dts/surfaces/src/index.d.ts +1 -0
  308. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -2
  309. package/dist/client/{BookingMailingListNote-1n4Ch_u_.mjs → BookingMailingListNote-CzRt2dF_.mjs} +98 -96
  310. package/dist/client/DemoBookingPortalAccess-mxqwap3f.mjs +344 -0
  311. package/dist/client/{EventCombined.client-C0pgma9y.mjs → EventCombined.client-CDb11igO.mjs} +6 -6
  312. package/dist/client/{EventListing.client-4fhLOvHP.mjs → EventListing.client-EgYhzKPa.mjs} +2 -2
  313. package/dist/client/{LeafletStaticMap-DScC4F3w.mjs → LeafletStaticMap-gtmtaA2b.mjs} +1 -1
  314. package/dist/client/{TerminalPanel-B5ZUsYhe.mjs → TerminalPanel-DvNUP5ot.mjs} +1 -1
  315. package/dist/client/{ThemedButton-DoVIV1Ao.mjs → ThemedButton-C7CeUJjW.mjs} +1 -1
  316. package/dist/client/{accordion-CoT5g7zo.mjs → accordion-kjvt49rA.mjs} +1 -1
  317. package/dist/client/{bookingForm-BWxB46xD.mjs → bookingForm-pbRZordh.mjs} +212 -62
  318. package/dist/client/bookings.mjs +616 -225
  319. package/dist/client/{carousel-DtNYWFd3.mjs → carousel-f4Zbmicv.mjs} +1 -1
  320. package/dist/client/{cart-z4qZih1Y.mjs → cart-DO20An50.mjs} +3 -3
  321. package/dist/client/{checkout-DpL7euFH.mjs → checkout-Du5amDR_.mjs} +3 -3
  322. package/dist/client/{checkoutUrls-BEfR7kVu.mjs → checkoutUrls-CXhko2Rv.mjs} +1 -1
  323. package/dist/client/client.mjs +1753 -823
  324. package/dist/client/{context-C8TinPJc.mjs → context-eW97E945.mjs} +4 -3
  325. package/dist/client/{dates-vwwxTeB0.mjs → dates-jPCirRea.mjs} +56 -11
  326. package/dist/client/{eventCalendar-DIbHfJXO.mjs → eventCalendar-C2M-iE4j.mjs} +9 -9
  327. package/dist/client/{eventCombined-DoGMJ6cg.mjs → eventCombined-W6ns3LHg.mjs} +4 -4
  328. package/dist/client/{eventDetails-BjN9v6a1.mjs → eventDetails-CR-GT0f0.mjs} +4 -4
  329. package/dist/client/{eventListing-DajjWgOv.mjs → eventListing-BK8AfYZz.mjs} +4 -4
  330. package/dist/client/{eventRegistration-DMq9gMA-.mjs → eventRegistration-BJSd4KUu.mjs} +369 -242
  331. package/dist/client/{form-Qf6qTbos.mjs → form-BvpfbQaT.mjs} +3 -3
  332. package/dist/client/{headerSection-D7qJrqFX.mjs → headerSection-I5sUQ8x-.mjs} +3 -3
  333. package/dist/client/hooks.mjs +254 -53
  334. package/dist/client/{locationMap-CCF9-t_0.mjs → locationMap-BLvwf9_f.mjs} +3 -3
  335. package/dist/client/{media-CwBGetqC.mjs → media-Cl38iOMI.mjs} +10 -3
  336. package/dist/client/{newsletterForm-DzCLSP4S.mjs → newsletterForm-DrQ2weE8.mjs} +3 -3
  337. package/dist/client/{pricing-Cgxv2KLC.mjs → pricing-BES87mrR.mjs} +1 -1
  338. package/dist/client/{productDetail-ru9w5GHx.mjs → productDetail-Url9jcc5.mjs} +3 -3
  339. package/dist/client/{productList-zaapKSl-.mjs → productList-DE7ngEZJ.mjs} +3 -3
  340. package/dist/client/{propsDecoder-CwvvNOHx.mjs → propsDecoder-D1OtGXDV.mjs} +89 -17
  341. package/dist/client/rendering/client.mjs +1445 -658
  342. package/dist/client/rendering/islands.mjs +18 -18
  343. package/dist/client/rendering.mjs +2478 -1515
  344. package/dist/client/{routeIslandApiConfig-BwVFo0Y4.mjs → routeIslandApiConfig-BG9Y-SHg.mjs} +1 -1
  345. package/dist/client/{shop-mktkXvbV.mjs → shop-CJkuySJ3.mjs} +126 -79
  346. package/dist/client/{shop-commerce-De7gEnkA.mjs → shop-commerce-4rKj5n9h.mjs} +25 -13
  347. package/dist/client/{shop-commerce-store-B3MCxIBW.mjs → shop-commerce-store-Bxm75Pg6.mjs} +1 -1
  348. package/dist/client/{shopShared-TqExh235.mjs → shopShared-DpoQDWfz.mjs} +4 -4
  349. package/dist/client/{useEventFilters-n_OjkIjX.mjs → useEventFilters-D8HliSqR.mjs} +32 -17
  350. package/dist/preview-next/before-render.mjs +192 -83
  351. package/dist/preview-next/client/runtime.mjs +4 -4
  352. package/dist/preview-next/keepAlive.mjs +192 -83
  353. package/dist/preview-next/middleware.mjs +192 -83
  354. package/dist/{previewAuthStore-C_EHQ5XA.mjs → previewAuthStore-BXXF3hhW.mjs} +194 -83
  355. package/dist/{sdk-runtime-BIkJg5y1.mjs → sdk-runtime-C2a05WjL.mjs} +2 -2
  356. package/dist/{separator-C9qDP95Z.mjs → separator-CuNhBAhS.mjs} +1 -1
  357. package/dist/server/components.mjs +1720 -1392
  358. package/dist/server/config-validation.mjs +221 -37
  359. package/dist/server/config.mjs +221 -37
  360. package/dist/server/data.mjs +221 -37
  361. package/dist/server/index.mjs +195 -84
  362. package/dist/server/next.mjs +490 -196
  363. package/dist/server/page-converter.mjs +53 -14
  364. package/dist/server/prebuild.mjs +1 -1
  365. package/dist/server/rendering/server.mjs +1427 -1098
  366. package/dist/server/rendering.mjs +2693 -2365
  367. package/dist/server/routing.mjs +291 -55
  368. package/dist/server/server.mjs +281 -114
  369. package/package.json +1 -1
  370. package/dist/_dts/billing/src/plans/display.d.ts +0 -15
  371. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-note.d.ts +0 -3
  372. package/dist/_dts/content-editor/src/controller/buildBlockPublishedBaselines.d.ts +0 -4
  373. package/dist/_dts/content-editor/src/controller/buildPublishSuccessTransition.d.ts +0 -16
  374. package/dist/_dts/content-editor/src/controller/driver.d.ts +0 -14
  375. package/dist/_dts/content-editor/src/controller/seedDraftBaselinesFromBlocks.d.ts +0 -7
  376. package/dist/_dts/content-editor/src/controller/useEntrySyncHelpers.d.ts +0 -29
  377. package/dist/_dts/content-editor/src/hooks/autosaveScopePlanning.d.ts +0 -26
  378. package/dist/_dts/content-editor/src/hooks/useSimpleAutosave.d.ts +0 -64
  379. package/dist/_dts/content-editor/src/hooks/useStoreAutosave.d.ts +0 -48
  380. package/dist/_dts/content-editor/src/types.d.ts +0 -44
  381. package/dist/client/DiscountCodeDisclosure-CKJtz0mY.mjs +0 -137
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- import { Vt as assertNever$2, bn as formatCurrencyAmount } from "./propsDecoder-CwvvNOHx.mjs";
3
- import { i as CheckIcon } from "./TerminalPanel-B5ZUsYhe.mjs";
2
+ import { Cn as formatCurrencyAmount, Wt as assertNever$2 } from "./propsDecoder-D1OtGXDV.mjs";
3
+ import { i as CheckIcon } from "./TerminalPanel-DvNUP5ot.mjs";
4
4
  import { n as getBookingMailingListNoteCopy } from "./mailingListSignupCopy-DZSHZrm6.mjs";
5
- import { n as RichText } from "./checkoutUrls-BEfR7kVu.mjs";
5
+ import { n as RichText } from "./checkoutUrls-CXhko2Rv.mjs";
6
6
  import { useCallback, useEffect, useReducer, useRef } from "react";
7
7
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
8
  //#region ../core/src/date-math.ts
@@ -443,67 +443,24 @@ function pollingReducer(state, action) {
443
443
  * Provides a reusable polling mechanism with configurable intervals,
444
444
  * max attempts, and completion detection. Used by usePaymentVerification
445
445
  * and other hooks that need to poll for status changes.
446
- *
447
- * @example
448
- * ```tsx
449
- * const polling = usePolling(shouldPoll ? {
450
- * pollFn: () => api.getStatus(id),
451
- * isComplete: (result) => result.status === 'done',
452
- * } : null);
453
- *
454
- * useEffect(() => {
455
- * if (polling.status === 'completed') {
456
- * handleSuccess(polling.result);
457
- * }
458
- * }, [polling.status]);
459
- * ```
460
446
  */
461
447
  const DEFAULT_MAX_ATTEMPTS = 10;
462
448
  const DEFAULT_POLL_INTERVAL = 1e3;
463
- /**
464
- * Generic hook for polling an async operation until completion.
465
- *
466
- * Pass config to start polling, or null to stop/idle.
467
- * The hook handles cleanup on unmount and config changes.
468
- *
469
- * **IMPORTANT: Config identity stability**
470
- *
471
- * The config object is used as an effect dependency. If config identity
472
- * changes on every render (e.g., inline objects), polling will restart
473
- * continuously, causing infinite request loops.
474
- *
475
- * Always memoize the config object:
476
- *
477
- * @example
478
- * ```tsx
479
- * // BAD - inline object creates new identity every render
480
- * usePolling({
481
- * pollFn: () => api.getStatus(id),
482
- * isComplete: (result) => result.status === 'done',
483
- * });
484
- *
485
- * // GOOD - memoized config, stable identity
486
- * const pollConfig = useMemo(() => shouldPoll ? {
487
- * pollFn: () => api.getStatus(id),
488
- * isComplete: (result) => result.status === 'done',
489
- * } : null, [shouldPoll, api, id]);
490
- *
491
- * usePolling(pollConfig);
492
- * ```
493
- *
494
- * @param config - Configuration for polling, or null to stop
495
- * @returns Polling result with status, data, and retry function
496
- */
497
- function usePolling(config) {
498
- const [state, dispatch] = useReducer(pollingReducer, void 0, createInitialPollingState);
499
- const attemptsRef = useRef(0);
500
- const timeoutRef = useRef(null);
501
- const isPollingRef = useRef(false);
502
- const isActiveRef = useRef(false);
503
- const generationRef = useRef(0);
504
- const configRef = useRef(config);
505
- configRef.current = config;
506
- const cleanup = useCallback(() => {
449
+ function usePollingRuntime(config) {
450
+ const runtime = {
451
+ configRef: useRef(config),
452
+ attemptsRef: useRef(0),
453
+ timeoutRef: useRef(null),
454
+ isPollingRef: useRef(false),
455
+ isActiveRef: useRef(false),
456
+ generationRef: useRef(0)
457
+ };
458
+ runtime.configRef.current = config;
459
+ return runtime;
460
+ }
461
+ function usePollingCleanup(runtime) {
462
+ const { isActiveRef, generationRef, timeoutRef, isPollingRef } = runtime;
463
+ return useCallback(() => {
507
464
  isActiveRef.current = false;
508
465
  generationRef.current += 1;
509
466
  if (timeoutRef.current) {
@@ -511,16 +468,27 @@ function usePolling(config) {
511
468
  timeoutRef.current = null;
512
469
  }
513
470
  isPollingRef.current = false;
514
- }, []);
515
- const resetState = useCallback(() => {
471
+ }, [
472
+ generationRef,
473
+ isActiveRef,
474
+ isPollingRef,
475
+ timeoutRef
476
+ ]);
477
+ }
478
+ function usePollingReset(runtime, dispatch) {
479
+ const { attemptsRef } = runtime;
480
+ return useCallback(() => {
516
481
  dispatch({ type: "polling-reset" });
517
482
  attemptsRef.current = 0;
518
- }, []);
519
- const poll = useCallback(async () => {
520
- const cfg = configRef.current;
521
- if (!cfg) return true;
483
+ }, [attemptsRef, dispatch]);
484
+ }
485
+ function usePollingRequest(runtime, dispatch, cleanup) {
486
+ const { configRef, attemptsRef, isPollingRef, isActiveRef, generationRef } = runtime;
487
+ return useCallback(async () => {
488
+ const config = configRef.current;
489
+ if (!config) return true;
522
490
  if (isPollingRef.current) return false;
523
- const maxAttempts = cfg.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;
491
+ const maxAttempts = config.maxAttempts ?? DEFAULT_MAX_ATTEMPTS;
524
492
  if (attemptsRef.current >= maxAttempts) {
525
493
  dispatch({ type: "polling-timed-out" });
526
494
  cleanup();
@@ -530,81 +498,115 @@ function usePolling(config) {
530
498
  attemptsRef.current += 1;
531
499
  const generation = generationRef.current;
532
500
  try {
533
- const data = await cfg.pollFn();
534
- if (generation !== generationRef.current || !isActiveRef.current) {
535
- isPollingRef.current = false;
536
- return true;
537
- }
538
- if (cfg.isFailed?.(data)) {
501
+ const result = await config.pollFn();
502
+ if (generation !== generationRef.current || !isActiveRef.current) return true;
503
+ if (config.isFailed?.(result)) {
539
504
  dispatch({
540
505
  type: "polling-failed",
541
- result: data
506
+ result
542
507
  });
543
508
  cleanup();
544
509
  return true;
545
510
  }
546
- if (cfg.isComplete(data)) {
511
+ if (config.isComplete(result)) {
547
512
  dispatch({
548
513
  type: "polling-completed",
549
- result: data
514
+ result
550
515
  });
551
516
  cleanup();
552
517
  return true;
553
518
  }
554
519
  dispatch({
555
520
  type: "polling-progressed",
556
- result: data
521
+ result
557
522
  });
558
523
  isPollingRef.current = false;
559
524
  return false;
560
- } catch (err) {
561
- if (generation !== generationRef.current || !isActiveRef.current) {
562
- isPollingRef.current = false;
563
- return true;
564
- }
565
- if (err instanceof Error) dispatch({
525
+ } catch (error) {
526
+ if (generation !== generationRef.current || !isActiveRef.current) return true;
527
+ if (error instanceof Error) dispatch({
566
528
  type: "polling-request-failed",
567
- error: err
529
+ error
568
530
  });
569
531
  isPollingRef.current = false;
570
532
  return false;
571
533
  }
572
- }, [cleanup]);
573
- const schedulePoll = useCallback(() => {
534
+ }, [
535
+ attemptsRef,
536
+ cleanup,
537
+ configRef,
538
+ dispatch,
539
+ generationRef,
540
+ isActiveRef,
541
+ isPollingRef
542
+ ]);
543
+ }
544
+ function usePollingScheduler(runtime, poll) {
545
+ const { attemptsRef, configRef, isActiveRef, timeoutRef } = runtime;
546
+ return useCallback(() => {
574
547
  if (!isActiveRef.current) return;
575
- const pollInterval = configRef.current?.interval ?? DEFAULT_POLL_INTERVAL;
576
548
  const doPoll = async () => {
577
- if (!await poll() && isActiveRef.current) timeoutRef.current = setTimeout(doPoll, pollInterval);
549
+ if (!await poll() && isActiveRef.current) {
550
+ const configuredInterval = configRef.current?.interval;
551
+ const interval = typeof configuredInterval === "function" ? configuredInterval(attemptsRef.current) : configuredInterval ?? DEFAULT_POLL_INTERVAL;
552
+ timeoutRef.current = setTimeout(doPoll, interval);
553
+ }
578
554
  };
579
555
  doPoll();
580
- }, [poll]);
556
+ }, [
557
+ attemptsRef,
558
+ configRef,
559
+ isActiveRef,
560
+ poll,
561
+ timeoutRef
562
+ ]);
563
+ }
564
+ function usePollingCycle(config, runtime, dispatch) {
565
+ const cleanup = usePollingCleanup(runtime);
566
+ const resetState = usePollingReset(runtime, dispatch);
567
+ const schedulePoll = usePollingScheduler(runtime, usePollingRequest(runtime, dispatch, cleanup));
568
+ const pollingEnabled = config !== null;
581
569
  useEffect(() => {
582
- if (!config) {
570
+ if (!pollingEnabled) {
583
571
  cleanup();
584
572
  dispatch({ type: "polling-went-idle" });
585
573
  return;
586
574
  }
587
575
  resetState();
588
- isActiveRef.current = true;
576
+ runtime.isActiveRef.current = true;
589
577
  schedulePoll();
590
578
  return cleanup;
591
579
  }, [
592
- config,
593
580
  cleanup,
581
+ dispatch,
582
+ pollingEnabled,
594
583
  resetState,
584
+ config?.restartKey ?? null,
585
+ runtime.isActiveRef,
595
586
  schedulePoll
596
587
  ]);
597
- const retry = useCallback(() => {
598
- if (!configRef.current) return;
588
+ return useCallback(() => {
589
+ if (!runtime.configRef.current) return;
599
590
  cleanup();
600
591
  resetState();
601
- isActiveRef.current = true;
592
+ runtime.isActiveRef.current = true;
602
593
  schedulePoll();
603
594
  }, [
604
595
  cleanup,
605
596
  resetState,
597
+ runtime.configRef,
598
+ runtime.isActiveRef,
606
599
  schedulePoll
607
600
  ]);
601
+ }
602
+ /**
603
+ * Polls until the operation completes, fails, times out, or becomes disabled.
604
+ * Config objects may be rebuilt across renders; change restartKey to begin a
605
+ * new operation and reset its attempt budget.
606
+ */
607
+ function usePolling(config) {
608
+ const [state, dispatch] = useReducer(pollingReducer, void 0, createInitialPollingState);
609
+ const retry = usePollingCycle(config, usePollingRuntime(config), dispatch);
608
610
  return {
609
611
  status: config ? state.tag : "idle",
610
612
  result: config ? state.result : null,
@@ -0,0 +1,344 @@
1
+ "use client";
2
+ import { n as useBlockApi, r as BlockApiError } from "./context-eW97E945.mjs";
3
+ import { t as ThemedButton } from "./ThemedButton-C7CeUJjW.mjs";
4
+ import React, { useId } from "react";
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ //#region ../blocks/src/system/runtime/shared/utils/demoBookingPassStorage.ts
7
+ const STORAGE_KEY = "riverbank:demo-booking-passes:v1";
8
+ const CHECKOUT_RETURN_EMAIL_KEY = "riverbank:demo-booking-checkout-email:v1";
9
+ const MAX_STORED_PASSES = 10;
10
+ function normalizeDemoBookingEmail(email) {
11
+ return email.trim().toLowerCase();
12
+ }
13
+ function storeDemoBookingPass(email, pass) {
14
+ try {
15
+ const normalizedEmail = normalizeDemoBookingEmail(email);
16
+ if (!normalizedEmail || !pass) return;
17
+ const current = readStoredDemoBookingPasses();
18
+ const updated = [{
19
+ email: normalizedEmail,
20
+ pass
21
+ }, ...current.filter((entry) => entry.email !== normalizedEmail)].slice(0, MAX_STORED_PASSES);
22
+ window.localStorage.setItem(STORAGE_KEY, JSON.stringify(updated));
23
+ } catch {}
24
+ }
25
+ function storeDemoBookingPassIfAvailable(email, pass) {
26
+ if (email && pass) storeDemoBookingPass(email, pass);
27
+ }
28
+ function getDemoBookingPass(email) {
29
+ try {
30
+ const normalizedEmail = normalizeDemoBookingEmail(email);
31
+ return readStoredDemoBookingPasses().find((entry) => entry.email === normalizedEmail)?.pass ?? null;
32
+ } catch {
33
+ return null;
34
+ }
35
+ }
36
+ function storeDemoBookingCheckoutReturn(email, pass) {
37
+ const normalizedEmail = normalizeDemoBookingEmail(email);
38
+ if (!normalizedEmail) return;
39
+ storeDemoBookingPassIfAvailable(normalizedEmail, pass);
40
+ try {
41
+ window.sessionStorage.setItem(CHECKOUT_RETURN_EMAIL_KEY, normalizedEmail);
42
+ } catch {}
43
+ }
44
+ function readDemoBookingCheckoutReturnEmail() {
45
+ try {
46
+ const email = window.sessionStorage.getItem(CHECKOUT_RETURN_EMAIL_KEY);
47
+ window.sessionStorage.removeItem(CHECKOUT_RETURN_EMAIL_KEY);
48
+ return email ? normalizeDemoBookingEmail(email) : null;
49
+ } catch {
50
+ return null;
51
+ }
52
+ }
53
+ function readStoredDemoBookingPasses() {
54
+ try {
55
+ const raw = window.localStorage.getItem(STORAGE_KEY);
56
+ if (!raw) return [];
57
+ const parsed = JSON.parse(raw);
58
+ return Array.isArray(parsed) ? parsed.filter(isStoredDemoBookingPass) : [];
59
+ } catch {
60
+ return [];
61
+ }
62
+ }
63
+ function isStoredDemoBookingPass(value) {
64
+ if (!isRecord(value)) return false;
65
+ const record = value;
66
+ return typeof record.email === "string" && record.email.length > 0 && typeof record.pass === "string" && record.pass.length > 0;
67
+ }
68
+ function isRecord(value) {
69
+ return typeof value === "object" && value !== null && !Array.isArray(value);
70
+ }
71
+ //#endregion
72
+ //#region ../blocks/src/system/runtime/api/types/discounts.ts
73
+ function discountAvailabilityHasDiscounts(availability) {
74
+ return availability.type !== "none";
75
+ }
76
+ function discountAvailabilityAllowsManualEntry(availability) {
77
+ return "manualCodeEntryAllowed" in availability && availability.manualCodeEntryAllowed;
78
+ }
79
+ function getAutoAppliedDiscountPreview(availability) {
80
+ switch (availability.type) {
81
+ case "none":
82
+ case "manual": return null;
83
+ case "auto":
84
+ case "auto_and_manual": return availability.autoAppliedDiscount;
85
+ }
86
+ }
87
+ //#endregion
88
+ //#region ../blocks/src/system/runtime/shared/components/DiscountCodeDisclosure.tsx
89
+ const BLOCK_DISCOUNT_CODE_DISCLOSURE_CLASSES = { "event-registration": {
90
+ root: "er-discount",
91
+ toggle: "er-discount__toggle",
92
+ form: "er-discount__form",
93
+ label: "er-discount__label",
94
+ row: "er-discount__row",
95
+ input: "er-discount__input",
96
+ apply: "er-discount__apply",
97
+ remove: "er-discount__remove",
98
+ hint: "er-discount__hint",
99
+ feedback: "er-discount__feedback"
100
+ } };
101
+ const themeFormClasses = {
102
+ root: "rb-flex rb-flex-col rb-gap-2 rb-mb-4",
103
+ toggle: `${["button", "link"].join("-")} rb-self-start`,
104
+ form: "rb-flex rb-flex-col rb-gap-2",
105
+ label: "form-label",
106
+ row: "rb-flex rb-flex-col rb-gap-2 rb-sm-flex-row",
107
+ input: "form-input",
108
+ apply: "",
109
+ remove: "",
110
+ hint: "rb-caption status-muted",
111
+ feedback: "rb-caption"
112
+ };
113
+ function getDiscountCodeDisclosureClasses(surface) {
114
+ if (surface === "theme-form") return themeFormClasses;
115
+ return BLOCK_DISCOUNT_CODE_DISCLOSURE_CLASSES[surface];
116
+ }
117
+ function DiscountActionButton(props) {
118
+ return props.surface === "theme-form" ? /* @__PURE__ */ jsx(ThemedButton, {
119
+ type: "button",
120
+ variant: "secondary",
121
+ size: "sm",
122
+ label: props.label,
123
+ onClick: props.onClick,
124
+ disabled: props.disabled
125
+ }) : /* @__PURE__ */ jsx("button", {
126
+ type: "button",
127
+ className: props.className,
128
+ onClick: props.onClick,
129
+ disabled: props.disabled,
130
+ children: props.label
131
+ });
132
+ }
133
+ function DiscountCodeDisclosure({ surface, isOpen, code, onOpen, onChange, onRemove, onApply, id, toggleLabel = "Have a discount code?", label = "Discount code", placeholder = "Enter code", applyLabel = "Apply", removeLabel = "Remove", hint = "Applied at checkout.", feedback = null, isApplying = false, applyDisabled = false, disabled = false }) {
134
+ const generatedId = useId();
135
+ const inputId = id ?? `discount-code-${generatedId}`;
136
+ const classes = getDiscountCodeDisclosureClasses(surface);
137
+ const handleChange = (event) => {
138
+ onChange(event.target.value);
139
+ };
140
+ const handleKeyDown = (event) => {
141
+ if (!onApply || event.key !== "Enter") return;
142
+ event.preventDefault();
143
+ onApply();
144
+ };
145
+ const feedbackClassName = feedback ? `${classes.feedback} status-${feedback.tone}` : classes.feedback;
146
+ return /* @__PURE__ */ jsx("div", {
147
+ className: classes.root,
148
+ children: !isOpen ? /* @__PURE__ */ jsx("button", {
149
+ type: "button",
150
+ className: classes.toggle,
151
+ onClick: onOpen,
152
+ children: toggleLabel
153
+ }) : /* @__PURE__ */ jsxs("div", {
154
+ className: classes.form,
155
+ children: [
156
+ /* @__PURE__ */ jsx("label", {
157
+ htmlFor: inputId,
158
+ className: classes.label,
159
+ children: label
160
+ }),
161
+ /* @__PURE__ */ jsxs("div", {
162
+ className: classes.row,
163
+ children: [
164
+ /* @__PURE__ */ jsx("input", {
165
+ id: inputId,
166
+ className: classes.input,
167
+ value: code,
168
+ onChange: handleChange,
169
+ onKeyDown: handleKeyDown,
170
+ placeholder,
171
+ autoComplete: "off",
172
+ disabled: disabled || isApplying
173
+ }),
174
+ onApply ? /* @__PURE__ */ jsx(DiscountActionButton, {
175
+ surface,
176
+ className: classes.apply,
177
+ label: isApplying ? "Applying..." : applyLabel,
178
+ onClick: onApply,
179
+ disabled: disabled || isApplying || applyDisabled
180
+ }) : null,
181
+ /* @__PURE__ */ jsx(DiscountActionButton, {
182
+ surface,
183
+ className: classes.remove,
184
+ label: removeLabel,
185
+ onClick: onRemove,
186
+ disabled: disabled || isApplying
187
+ })
188
+ ]
189
+ }),
190
+ /* @__PURE__ */ jsx("p", {
191
+ className: classes.hint,
192
+ children: hint
193
+ }),
194
+ feedback ? /* @__PURE__ */ jsx("p", {
195
+ className: feedbackClassName,
196
+ role: feedback.tone === "error" ? "alert" : "status",
197
+ children: feedback.message
198
+ }) : null
199
+ ]
200
+ })
201
+ });
202
+ }
203
+ //#endregion
204
+ //#region ../blocks/src/system/runtime/shared/utils/demoPortalMagicLink.ts
205
+ const CUSTOMER_PORTAL_PATH = "/portal";
206
+ function buildPortalCallbackUrl(origin, redirectTo) {
207
+ const url = new URL("/api/portal/callback", origin);
208
+ url.searchParams.set("redirect_to", redirectTo);
209
+ return url.toString();
210
+ }
211
+ async function requestDemoPortalMagicLink(input) {
212
+ const email = normalizeDemoBookingEmail(input.email);
213
+ const pass = getDemoBookingPass(email);
214
+ const request = {
215
+ email,
216
+ redirectUrl: input.redirectUrl,
217
+ ...pass ? { demoBookingPass: pass } : {}
218
+ };
219
+ try {
220
+ const response = await input.send(request);
221
+ if ("kind" in response) return {
222
+ kind: "refused",
223
+ message: response.message
224
+ };
225
+ return "demoSignInUrl" in response ? {
226
+ kind: "demo_sign_in",
227
+ url: response.demoSignInUrl
228
+ } : { kind: "email_sent" };
229
+ } catch (error) {
230
+ if (error instanceof BlockApiError && error.tag === "demo_email_not_booked_here") return {
231
+ kind: "refused",
232
+ message: error.message
233
+ };
234
+ throw error;
235
+ }
236
+ }
237
+ //#endregion
238
+ //#region ../blocks/src/system/runtime/shared/components/DemoBookingPortalAccess.tsx
239
+ const SUPPRESSED_CONFIRMATION_NOTE = "This is a demo, so we haven’t sent a confirmation email. You can still see your booking in the customer portal.";
240
+ function BookingConfirmation(props) {
241
+ const content = renderConfirmationMessage((props.demoEmailSuppressed ? [props.copy.message] : [props.copy.message, props.copy.defaultEmailSentence ?? ""]).filter((part) => part.trim().length > 0).join(" "), props.messagePresentation);
242
+ if (!props.demoEmailSuppressed) return content;
243
+ return /* @__PURE__ */ jsxs(Fragment, { children: [content, /* @__PURE__ */ jsx(DemoBookingPortalAccess, {
244
+ email: props.email,
245
+ noteClassName: props.noteClassName,
246
+ showConfirmationNote: props.showConfirmationNote
247
+ })] });
248
+ }
249
+ function DemoBookingPortalAccess(props) {
250
+ const { state, openPortal } = useDemoBookingPortalAccess(props.email);
251
+ return /* @__PURE__ */ jsxs("div", {
252
+ className: "rb-mt-4 rb-flex rb-flex-col rb-items-start rb-gap-3",
253
+ "data-testid": "demo-booking-portal-access",
254
+ children: [
255
+ props.showConfirmationNote === false ? null : /* @__PURE__ */ jsx("p", {
256
+ className: props.noteClassName ?? "ab-text",
257
+ children: SUPPRESSED_CONFIRMATION_NOTE
258
+ }),
259
+ /* @__PURE__ */ jsx(ThemedButton, {
260
+ type: "button",
261
+ variant: "default",
262
+ size: "md",
263
+ label: state.tag === "opening" ? "Opening…" : "Open the customer portal",
264
+ disabled: state.tag === "opening",
265
+ onClick: openPortal
266
+ }),
267
+ state.tag === "refused" ? /* @__PURE__ */ jsx("p", {
268
+ role: "alert",
269
+ children: state.message
270
+ }) : null,
271
+ state.tag === "error" ? /* @__PURE__ */ jsx("p", {
272
+ role: "alert",
273
+ children: state.message
274
+ }) : null
275
+ ]
276
+ });
277
+ }
278
+ function renderConfirmationMessage(message, presentation) {
279
+ if (!message) return null;
280
+ switch (presentation.kind) {
281
+ case "paragraph": return /* @__PURE__ */ jsx("p", {
282
+ className: presentation.className,
283
+ children: message
284
+ });
285
+ case "plain": return message;
286
+ }
287
+ }
288
+ function useDemoBookingPortalAccess(email) {
289
+ const api = useBlockApi();
290
+ const [state, setState] = React.useState({ tag: "idle" });
291
+ const openPortal = async () => {
292
+ if (state.tag === "opening") return;
293
+ if (!email) {
294
+ setState({
295
+ tag: "error",
296
+ message: "We couldn’t open the customer portal. Please try again."
297
+ });
298
+ return;
299
+ }
300
+ setState({ tag: "opening" });
301
+ try {
302
+ const result = await requestDemoPortalMagicLink({
303
+ email,
304
+ redirectUrl: buildPortalCallbackUrl(window.location.origin, CUSTOMER_PORTAL_PATH),
305
+ send: (request) => api.sendMagicLink(request)
306
+ });
307
+ switch (result.kind) {
308
+ case "demo_sign_in":
309
+ window.location.assign(result.url);
310
+ return;
311
+ case "refused":
312
+ setState({
313
+ tag: "refused",
314
+ message: result.message
315
+ });
316
+ return;
317
+ case "email_sent":
318
+ setState({ tag: "idle" });
319
+ return;
320
+ }
321
+ } catch (error) {
322
+ setState(handlePortalAccessError(error));
323
+ }
324
+ };
325
+ return {
326
+ state,
327
+ openPortal
328
+ };
329
+ }
330
+ function handlePortalAccessError(error) {
331
+ if (error instanceof BlockApiError && error.tag === "demo_email_not_booked_here") return {
332
+ tag: "refused",
333
+ message: error.message
334
+ };
335
+ return error instanceof BlockApiError ? {
336
+ tag: "error",
337
+ message: error.message
338
+ } : {
339
+ tag: "error",
340
+ message: "We couldn’t open the customer portal. Please try again."
341
+ };
342
+ }
343
+ //#endregion
344
+ export { requestDemoPortalMagicLink as a, discountAvailabilityHasDiscounts as c, storeDemoBookingCheckoutReturn as d, storeDemoBookingPass as f, buildPortalCallbackUrl as i, getAutoAppliedDiscountPreview as l, DemoBookingPortalAccess as n, DiscountCodeDisclosure as o, storeDemoBookingPassIfAvailable as p, CUSTOMER_PORTAL_PATH as r, discountAvailabilityAllowsManualEntry as s, BookingConfirmation as t, readDemoBookingCheckoutReturnEmail as u };
@@ -1,11 +1,11 @@
1
1
  "use client";
2
2
  import { O as clsx } from "./colorStyles-j5U9v5JA.mjs";
3
- import { $ as getContainerClass, B as calendarWindowBounds, I as calendarMonthDate, J as getEventRuntimeFiltersKey, K as getBlockApiReadStage, L as calendarMonthKey, Q as getCardOrientation, R as calendarPageResponseError, U as planCalendarMonthRanges, V as calendarWindowMonths$1, at as getDayOfWeek, ct as isSameCalendarDay, et as MONTH_NAMES, in as formatLocalScheduleDate, it as formatDateKey, lt as isToday, nt as addMonths, on as getLocalScheduleDate, ot as getOrderedDayNames, q as buildEventRuntimeFilters, rt as buildCalendarViewport, ut as shiftCalendarAnchorDate, z as calendarQueryKey } from "./propsDecoder-CwvvNOHx.mjs";
4
- import { a as EventCardClient, i as EventPaginatedListView, n as useEventPagination, o as EventFilters, r as toError, s as formatEventTeacherLine, t as useEventFilters } from "./useEventFilters-n_OjkIjX.mjs";
5
- import { o as formatEventRemainingPlaces, p as isEventFull, t as formatEventPrice } from "./pricing-Cgxv2KLC.mjs";
6
- import { a as formatTime, d as resolveEventLinkProps, o as groupEventsByDate, s as resolveEventTimeZone, t as formatDate, u as resolveEventCta } from "./dates-vwwxTeB0.mjs";
7
- import { n as useBlockApi } from "./context-C8TinPJc.mjs";
8
- import { n as ThemedButtonLink, t as ThemedButton } from "./ThemedButton-DoVIV1Ao.mjs";
3
+ import { $ as getContainerClass, B as calendarWindowBounds, I as calendarMonthDate, J as getEventRuntimeFiltersKey, K as getBlockApiReadStage, L as calendarMonthKey, Q as getCardOrientation, R as calendarPageResponseError, U as planCalendarMonthRanges, V as calendarWindowMonths$1, at as getDayOfWeek, ct as isSameCalendarDay, et as MONTH_NAMES, it as formatDateKey, ln as getLocalScheduleDate, lt as isToday, nt as addMonths, ot as getOrderedDayNames, q as buildEventRuntimeFilters, rt as buildCalendarViewport, sn as formatLocalScheduleDate, ut as shiftCalendarAnchorDate, z as calendarQueryKey } from "./propsDecoder-D1OtGXDV.mjs";
4
+ import { a as EventCardClient, i as EventPaginatedListView, n as useEventPagination, o as EventFilters, r as toError, s as formatEventTeacherLine, t as useEventFilters } from "./useEventFilters-D8HliSqR.mjs";
5
+ import { o as formatEventRemainingPlaces, p as isEventFull, t as formatEventPrice } from "./pricing-BES87mrR.mjs";
6
+ import { c as groupEventsByDate, f as resolveEventCta, l as resolveEventTimeZone, n as formatDate, p as resolveEventLinkProps, s as formatTime } from "./dates-jPCirRea.mjs";
7
+ import { n as useBlockApi } from "./context-eW97E945.mjs";
8
+ import { n as ThemedButtonLink, t as ThemedButton } from "./ThemedButton-C7CeUJjW.mjs";
9
9
  import { t as createBodyThemePortalRoot } from "./themePortalRoot-AGs4cE7t.mjs";
10
10
  import { t as ModalShell } from "./ModalShell-CqkBvBIC.mjs";
11
11
  import React, { createContext, useCallback, useContext, useEffect, useId, useMemo, useRef, useState } from "react";
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { q as buildEventRuntimeFilters } from "./propsDecoder-CwvvNOHx.mjs";
3
- import { i as EventPaginatedListView, n as useEventPagination, o as EventFilters, t as useEventFilters } from "./useEventFilters-n_OjkIjX.mjs";
2
+ import { q as buildEventRuntimeFilters } from "./propsDecoder-D1OtGXDV.mjs";
3
+ import { i as EventPaginatedListView, n as useEventPagination, o as EventFilters, t as useEventFilters } from "./useEventFilters-D8HliSqR.mjs";
4
4
  import { useId, useMemo } from "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
  //#region ../blocks/src/system/runtime/nodes/events/EventListing.client.tsx
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { Bt as isRecord } from "./propsDecoder-CwvvNOHx.mjs";
2
+ import { Ut as isRecord } from "./propsDecoder-D1OtGXDV.mjs";
3
3
  import { useEffect, useRef, useState } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  //#region ../blocks/src/system/runtime/nodes/shared/LeafletStaticMap.tsx
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { i as getAutoAppliedDiscountPreview, n as discountAvailabilityAllowsManualEntry, r as discountAvailabilityHasDiscounts } from "./DiscountCodeDisclosure-CKJtz0mY.mjs";
2
+ import { c as discountAvailabilityHasDiscounts, l as getAutoAppliedDiscountPreview, s as discountAvailabilityAllowsManualEntry } from "./DemoBookingPortalAccess-mxqwap3f.mjs";
3
3
  import { useEffect, useReducer, useRef } from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region ../blocks/src/system/runtime/nodes/event-registration/useDiscountCodeUi.state.ts
@@ -1,5 +1,5 @@
1
1
  import { O as clsx } from "./colorStyles-j5U9v5JA.mjs";
2
- import { _t as themeButtonSizeClassName, vt as themeButtonVariantClassNames } from "./propsDecoder-CwvvNOHx.mjs";
2
+ import { _t as themeButtonSizeClassName, vt as themeButtonVariantClassNames } from "./propsDecoder-D1OtGXDV.mjs";
3
3
  import "react";
4
4
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region ../blocks/src/system/runtime/nodes/spinner.tsx
@@ -1,4 +1,4 @@
1
- import { t as defineIslandPropsDecoder } from "./propsDecoder-CwvvNOHx.mjs";
1
+ import { t as defineIslandPropsDecoder } from "./propsDecoder-D1OtGXDV.mjs";
2
2
  //#region src/rendering/islands/enhancers/accordion.ts
3
3
  const decode = defineIslandPropsDecoder("accordion");
4
4
  function parseDefaultValues(value) {