@riverbankcms/sdk 0.136.0 → 0.138.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 (343) hide show
  1. package/CHANGELOG.md +109 -0
  2. package/README.md +7 -4
  3. package/dist/{PreviewEditorSidebar-BU5ZlhQR.mjs → PreviewEditorSidebar-BVPur_CU.mjs} +12 -18
  4. package/dist/{PreviewEditorUI-9XkHL-bC.mjs → PreviewEditorUI-DLhWX8oh.mjs} +3 -3
  5. package/dist/{PreviewQueryProvider-wbEpXryy.mjs → PreviewQueryProvider-BguJY1SW.mjs} +1 -1
  6. package/dist/{SdkPreviewModeRuntime-CnWmj-2B.mjs → SdkPreviewModeRuntime-Tda6qw4z.mjs} +1375 -495
  7. package/dist/{SiteChromeCustomizeContext-B6d5zkog.mjs → SiteChromeCustomizeContext-BHFgMjde.mjs} +35665 -33602
  8. package/dist/_dts/ai/src/contracts/proposals.d.ts +7226 -3057
  9. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +1223 -811
  10. package/dist/_dts/ai/src/designer/themePatch.d.ts +5 -10
  11. package/dist/_dts/api/src/accessAdmin.d.ts +16 -18
  12. package/dist/_dts/api/src/accountApi.d.ts +49 -2
  13. package/dist/_dts/api/src/appointmentServiceContracts.d.ts +83 -0
  14. package/dist/_dts/api/src/appointmentServiceLocation.d.ts +12 -0
  15. package/dist/_dts/api/src/appointmentServiceVisibility.d.ts +14 -0
  16. package/dist/_dts/api/src/appointmentSetup.d.ts +8 -0
  17. package/dist/_dts/api/src/bookingConfig.d.ts +35 -87
  18. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +1 -1
  19. package/dist/_dts/api/src/bookingOperations.d.ts +2 -69
  20. package/dist/_dts/api/src/bookingRecords.d.ts +2 -2
  21. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +2 -2
  22. package/dist/_dts/api/src/bookingServicePricing.d.ts +47 -0
  23. package/dist/_dts/api/src/bookings.d.ts +2 -2
  24. package/dist/_dts/api/src/cache-tags.d.ts +7 -2
  25. package/dist/_dts/api/src/common/index.d.ts +1 -0
  26. package/dist/_dts/api/src/common/zodFieldErrors.d.ts +34 -0
  27. package/dist/_dts/api/src/communications.d.ts +14 -8
  28. package/dist/_dts/api/src/contentRuntime.d.ts +3 -6
  29. package/dist/_dts/api/src/domainConnection.d.ts +41 -0
  30. package/dist/_dts/api/src/endpoints.d.ts +1636 -1637
  31. package/dist/_dts/api/src/eventAttendanceLabels.d.ts +2 -2
  32. package/dist/_dts/api/src/eventManagementContracts.d.ts +10 -14
  33. package/dist/_dts/api/src/index.d.ts +11 -9
  34. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  35. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  36. package/dist/_dts/api/src/media.d.ts +19 -2
  37. package/dist/_dts/api/src/occurrenceScheduling.d.ts +1 -1
  38. package/dist/_dts/api/src/participantMessaging.d.ts +3 -3
  39. package/dist/_dts/api/src/public/endpoints.d.ts +1 -1
  40. package/dist/_dts/api/src/publicBookingAvailabilityEndpointDefinitions.d.ts +62 -0
  41. package/dist/_dts/api/src/publicBookingService.d.ts +109 -2
  42. package/dist/_dts/api/src/publicEventCheckoutEndpointDefinitions.d.ts +27 -0
  43. package/dist/_dts/api/src/publicEventEndpointDefinitions.d.ts +7 -0
  44. package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +2 -1
  45. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +30 -148
  46. package/dist/_dts/api/src/publicExperience/sharedTypes.d.ts +8 -26
  47. package/dist/_dts/api/src/publicExperience/siteEndpoints.d.ts +5 -13
  48. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +2 -3
  49. package/dist/_dts/api/src/schemas/admin-allowed-domains.d.ts +76 -0
  50. package/dist/_dts/api/src/schemas/admin-observability-logs.d.ts +61 -0
  51. package/dist/_dts/api/src/schemas/admin-users.d.ts +80 -0
  52. package/dist/_dts/api/src/schemas/newsletter-memberships.d.ts +98 -0
  53. package/dist/_dts/api/src/schemas/sdk-entries.d.ts +128 -0
  54. package/dist/_dts/api/src/schemas/site-api-keys.d.ts +112 -0
  55. package/dist/_dts/api/src/schemas/support.d.ts +35 -0
  56. package/dist/_dts/api/src/sdk-event-booking-offer.d.ts +14 -0
  57. package/dist/_dts/api/src/sdk-event-payment-terms.d.ts +4 -16
  58. package/dist/_dts/api/src/sdk-event-upsert.d.ts +11 -21
  59. package/dist/_dts/api/src/sdkContracts.d.ts +8 -23
  60. package/dist/_dts/api/src/sdkManagedEventContracts.d.ts +37 -0
  61. package/dist/_dts/api/src/sdkMediaContracts.d.ts +40 -0
  62. package/dist/_dts/api/src/sdkMediaEndpointDefinitions.d.ts +66 -0
  63. package/dist/_dts/api/src/sdkThemeWire.d.ts +157 -146
  64. package/dist/_dts/api/src/siteInfrastructure.d.ts +37 -37
  65. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +35 -54
  66. package/dist/_dts/api/src/siteOnboarding.d.ts +3 -3
  67. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +38 -16
  68. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +37 -17
  69. package/dist/_dts/api/src/types.d.ts +2 -2
  70. package/dist/_dts/api/src/{wholeSeriesOfferings.d.ts → wholeSeriesRuns.d.ts} +11 -67
  71. package/dist/_dts/block-form/src/FormRenderer.d.ts +3 -1
  72. package/dist/_dts/block-form/src/backend/store-backend.d.ts +2 -1
  73. package/dist/_dts/block-form/src/backend/types.d.ts +2 -0
  74. package/dist/_dts/block-form/src/context/FormFocusContext.d.ts +7 -0
  75. package/dist/_dts/block-form/src/index.d.ts +2 -0
  76. package/dist/_dts/block-form/src/manifest/ManifestForm.d.ts +2 -1
  77. package/dist/_dts/block-form/src/utils/promotedFieldBackend.d.ts +8 -0
  78. package/dist/_dts/block-form/src/utils/promotedFieldPlan.d.ts +18 -0
  79. package/dist/_dts/block-form/src/utils/resolvePromotedFields.d.ts +8 -1
  80. package/dist/_dts/blocks/src/BlockErrorBoundary.d.ts +46 -0
  81. package/dist/_dts/blocks/src/PageRenderer.d.ts +2 -141
  82. package/dist/_dts/blocks/src/contracts/index.d.ts +2 -0
  83. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +12 -6
  84. package/dist/_dts/blocks/src/index.d.ts +1 -0
  85. package/dist/_dts/blocks/src/pageRenderAudience.d.ts +54 -0
  86. package/dist/_dts/blocks/src/pageRenderDiagnostics.d.ts +26 -0
  87. package/dist/_dts/blocks/src/pageRenderPlan.d.ts +116 -0
  88. package/dist/_dts/blocks/src/pageRenderPreparation.d.ts +109 -0
  89. package/dist/_dts/blocks/src/pageRendererBoundaries.d.ts +1 -0
  90. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +154 -0
  91. package/dist/_dts/blocks/src/portal/types.d.ts +1 -1
  92. package/dist/_dts/blocks/src/server.d.ts +1 -0
  93. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +12 -20
  94. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +1 -1
  95. package/dist/_dts/blocks/src/system/blocks/events/eventCalendarDataLoaders.d.ts +3 -0
  96. package/dist/_dts/blocks/src/system/blocks/events/shared/calendarWindow.d.ts +95 -0
  97. package/dist/_dts/blocks/src/system/blocks/events/shared/index.d.ts +1 -0
  98. package/dist/_dts/blocks/src/system/blocks/events/shared/runGrouping.d.ts +37 -0
  99. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +1046 -773
  100. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +59 -46
  101. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +3 -3
  102. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +161 -161
  103. package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +13 -6
  104. package/dist/_dts/blocks/src/system/blocks/offerings-preview/scheduleSummary.d.ts +10 -4
  105. package/dist/_dts/blocks/src/system/constants/buttonRoles.d.ts +2 -2
  106. package/dist/_dts/blocks/src/system/constants/events.d.ts +4 -0
  107. package/dist/_dts/blocks/src/system/customize/facets.d.ts +4 -4
  108. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  109. package/dist/_dts/blocks/src/system/data/publicLoaderCachePolicy.d.ts +5 -9
  110. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +83 -83
  111. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +12 -3
  112. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +8 -8
  113. package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
  114. package/dist/_dts/blocks/src/system/runtime/api/types/core.d.ts +13 -0
  115. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +12 -20
  116. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +32 -37
  117. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +15 -18
  118. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.d.ts +11 -8
  119. package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.state.d.ts +38 -22
  120. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +7 -0
  121. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/WholeSeriesPricingDisplay.d.ts +2 -2
  122. package/dist/_dts/blocks/src/system/runtime/nodes/event-details/logic.d.ts +16 -4
  123. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/ErrorStep.d.ts +3 -5
  124. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizardActions.d.ts +4 -2
  125. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentSelectionStep.d.ts +1 -1
  126. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +5 -3
  127. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.planning.d.ts +1 -1
  128. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventScope.d.ts +1 -1
  129. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.d.ts +2 -0
  130. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationCompletion.d.ts +15 -0
  131. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationDerivations.d.ts +2 -2
  132. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationErrorPresentation.d.ts +5 -0
  133. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationErrorRecovery.d.ts +25 -0
  134. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationEventAdapter.d.ts +14 -3
  135. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationSurface.d.ts +3 -21
  136. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationWizardContext.d.ts +4 -0
  137. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/siteCreditPreview.d.ts +0 -3
  138. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/ticketSelectionLines.d.ts +14 -16
  139. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +13 -15
  140. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.d.ts +7 -3
  141. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +9 -3
  142. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +25 -23
  143. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useWaitlistClaimRestoration.d.ts +2 -0
  144. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/utils.d.ts +11 -4
  145. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +8 -13
  146. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.interactive.d.ts +5 -0
  147. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.client.d.ts +1 -0
  148. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.interactive.d.ts +11 -3
  149. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/capacity.d.ts +164 -0
  150. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/cta.d.ts +29 -0
  151. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/dates.d.ts +47 -0
  152. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/index.d.ts +14 -0
  153. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/people.d.ts +6 -0
  154. package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/pricing.d.ts +24 -0
  155. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/OfferingTitle.d.ts +11 -0
  156. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekAgendaView.d.ts +1 -1
  157. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekBoardView.d.ts +1 -1
  158. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +1080 -560
  159. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventProductEligibility.d.ts +2 -2
  160. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/index.d.ts +3 -1
  161. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/listingLayout.d.ts +23 -0
  162. package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview.d.ts +2 -2
  163. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +7 -7
  164. package/dist/_dts/blocks/src/system/transforms/registry/eventCalendar.d.ts +11 -0
  165. package/dist/_dts/commerce/src/moneyReport.d.ts +1 -1
  166. package/dist/_dts/commerce/src/purchase/checkoutErrorCodes.d.ts +1 -1
  167. package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +57 -0
  168. package/dist/_dts/commerce/src/purchase/eventOrderOptionSnapshot.d.ts +3 -0
  169. package/dist/_dts/commerce/src/purchase/index.d.ts +1 -0
  170. package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +6 -3
  171. package/dist/_dts/commerce/src/purchase/types.d.ts +3 -2
  172. package/dist/_dts/commerce/src/waitlists.d.ts +1 -1
  173. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +4 -0
  174. package/dist/_dts/content-editor/src/controller/useBlockedPublishPlan.d.ts +11 -0
  175. package/dist/_dts/content-editor/src/hooks/applyBlockedPublishPlan.d.ts +1 -1
  176. package/dist/_dts/content-editor/src/hooks/blockedPublishPlan.d.ts +13 -5
  177. package/dist/_dts/content-editor/src/hooks/useEntryActions.d.ts +5 -1
  178. package/dist/_dts/content-editor/src/hooks/validateBlocksForPublish.d.ts +34 -2
  179. package/dist/_dts/content-editor/src/index.d.ts +2 -1
  180. package/dist/_dts/content-editor/src/ui/blockValidationManifestRegistry.d.ts +2 -0
  181. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +4 -2
  182. package/dist/_dts/content-editor/src/ui/stores/types.d.ts +27 -5
  183. package/dist/_dts/content-model/src/content-types/schema.d.ts +3 -3
  184. package/dist/_dts/content-model/src/templates/defaults.d.ts +11 -0
  185. package/dist/_dts/core/src/branded.d.ts +28 -9
  186. package/dist/_dts/core/src/event-booking-offer-parser.d.ts +82 -0
  187. package/dist/_dts/core/src/event-booking-offer.d.ts +89 -0
  188. package/dist/_dts/core/src/event-page-surface-subject.d.ts +81 -4
  189. package/dist/_dts/core/src/event-pricing.d.ts +81 -89
  190. package/dist/_dts/core/src/index.d.ts +3 -0
  191. package/dist/_dts/core/src/non-empty-array.d.ts +3 -0
  192. package/dist/_dts/core/src/whole-series-run-schedule.d.ts +92 -0
  193. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +495 -279
  194. package/dist/_dts/db/src/index.d.ts +1 -0
  195. package/dist/_dts/db/src/utils/postgrestFilter.d.ts +2 -0
  196. package/dist/_dts/editor-blocks/src/BlockForm.d.ts +2 -6
  197. package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +1 -1
  198. package/dist/_dts/editor-blocks/src/block-editor/BlockCardHeader.d.ts +2 -2
  199. package/dist/_dts/editor-blocks/src/block-editor/BlockSettingsModal.d.ts +4 -2
  200. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockValidationManifests.d.ts +1 -0
  201. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +22 -7
  202. package/dist/_dts/editor-blocks/src/block-editor/useSettingsFieldFocus.d.ts +18 -0
  203. package/dist/_dts/media-core/src/bulkDeletePlanning.d.ts +4 -0
  204. package/dist/_dts/media-core/src/fileDomain.d.ts +3 -0
  205. package/dist/_dts/preview-next/src/client/blocks/previewBatchLoaderParams.d.ts +2 -0
  206. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +1 -0
  207. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +1 -0
  208. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +3 -2
  209. package/dist/_dts/preview-next/src/client/preview/siteChromeBrandPreferences.d.ts +1 -1
  210. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +2 -0
  211. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlSaveRequest.d.ts +51 -0
  212. package/dist/_dts/preview-next/src/client/preview/siteChromeSavePlan.d.ts +24 -2
  213. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +23 -1
  214. package/dist/_dts/preview-next/src/client/preview/usePersistedHeaderPreferences.d.ts +8 -0
  215. package/dist/_dts/sdk/src/client/{eventSubrouteReadOperations.d.ts → publicEventReadOperations.d.ts} +4 -3
  216. package/dist/_dts/sdk/src/client/types.d.ts +6 -10
  217. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  218. package/dist/_dts/sdk/src/config/validation.d.ts +3 -3
  219. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +5 -0
  220. package/dist/_dts/sdk/src/data/prefetchBlockData.d.ts +2 -3
  221. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +8 -8
  222. package/dist/_dts/sdk/src/next/tags.d.ts +5 -8
  223. package/dist/_dts/sdk/src/public-api/contracts.d.ts +2 -26
  224. package/dist/_dts/sdk/src/rendering/helpers/footerPageOutline.d.ts +9 -1
  225. package/dist/_dts/sdk/src/rendering/index.d.ts +1 -0
  226. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +6 -53
  227. package/dist/_dts/sdk/src/rendering/server.d.ts +1 -0
  228. package/dist/_dts/sdk/src/version.d.ts +1 -1
  229. package/dist/_dts/theme-core/src/accordions/types.d.ts +5 -5
  230. package/dist/_dts/theme-core/src/buttons/styles/recipes/flatInk.d.ts +25 -25
  231. package/dist/_dts/theme-core/src/buttons/styles/registry.d.ts +25 -25
  232. package/dist/_dts/theme-core/src/buttons/styles/selection.d.ts +7 -7
  233. package/dist/_dts/theme-core/src/buttons/types.d.ts +22 -22
  234. package/dist/_dts/theme-core/src/cards/types.d.ts +49 -49
  235. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  236. package/dist/_dts/theme-core/src/gradients/types.d.ts +5 -0
  237. package/dist/_dts/theme-core/src/header/interactionPalette.d.ts +26 -3
  238. package/dist/_dts/theme-core/src/inputs/types.d.ts +2 -2
  239. package/dist/_dts/theme-core/src/interactive/baseSchema.d.ts +1 -1
  240. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +195 -195
  241. package/dist/_dts/theme-core/src/navigation/types.d.ts +3 -3
  242. package/dist/_dts/theme-core/src/palette/colors.d.ts +1 -1
  243. package/dist/_dts/theme-core/src/palette/curated/types.d.ts +2 -2
  244. package/dist/_dts/theme-core/src/schema.d.ts +258 -257
  245. package/dist/_dts/theme-core/src/shared/componentStyles.d.ts +1 -1
  246. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  247. package/dist/_dts/theme-core/src/site-styles/cardRoleVocabulary.d.ts +1 -1
  248. package/dist/_dts/theme-core/src/site-styles/compilationPlan.d.ts +43 -3
  249. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +10 -0
  250. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +4 -4
  251. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +2 -2
  252. package/dist/_dts/theme-core/src/site-styles/headerBrandPresentation.d.ts +63 -0
  253. package/dist/_dts/theme-core/src/site-styles/headerBytesComparison.d.ts +30 -0
  254. package/dist/_dts/theme-core/src/site-styles/headerInteractionPalette.d.ts +50 -1
  255. package/dist/_dts/theme-core/src/site-styles/headerLayoutCatalog.d.ts +48 -9
  256. package/dist/_dts/theme-core/src/site-styles/headerPreferences.d.ts +162 -0
  257. package/dist/_dts/theme-core/src/site-styles/headerPreferencesPersistence.d.ts +73 -0
  258. package/dist/_dts/theme-core/src/site-styles/headerRecompile.d.ts +118 -0
  259. package/dist/_dts/theme-core/src/site-styles/headerStyleCompiler.d.ts +10 -1
  260. package/dist/_dts/theme-core/src/site-styles/headerStyleDefaults.d.ts +1 -1
  261. package/dist/_dts/theme-core/src/site-styles/headerStyleRecipe.d.ts +7 -0
  262. package/dist/_dts/theme-core/src/site-styles/index.d.ts +5 -0
  263. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  264. package/dist/_dts/theme-core/src/site-styles/siteChromeBackgrounds.d.ts +20 -1
  265. package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +43 -2
  266. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +1 -1
  267. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +3 -3
  268. package/dist/_dts/ui/src/badge.d.ts +1 -1
  269. package/dist/_dts/ui/src/button.d.ts +2 -2
  270. package/dist/client/{BookingConsentAgreement-DCch21a6.mjs → BookingConsentAgreement-DQUik1Mx.mjs} +2 -2
  271. package/dist/client/{DiscountCodeDisclosure-DIj1T59K.mjs → DiscountCodeDisclosure-CU67Q4vH.mjs} +1 -1
  272. package/dist/client/{EventCombined.client-BWVNlXTx.mjs → EventCombined.client-a02TXUgg.mjs} +233 -348
  273. package/dist/client/{EventListing.client-DVFCDe3i.mjs → EventListing.client-99qx7jFl.mjs} +2 -2
  274. package/dist/client/{LeafletStaticMap-BY5mIHw9.mjs → LeafletStaticMap-CWzcq73L.mjs} +1 -1
  275. package/dist/client/{accordion-CK29E8rG.mjs → accordion-D1nb3-Oj.mjs} +1 -1
  276. package/dist/client/{bookingForm-DFvnet-N.mjs → bookingForm-BGrmLhaO.mjs} +5 -5
  277. package/dist/client/bookings.mjs +10555 -10475
  278. package/dist/client/{carousel-BVU5NQlb.mjs → carousel-DSmOx3ad.mjs} +1 -1
  279. package/dist/client/{cart-BNItcZVa.mjs → cart-COWeOIUk.mjs} +3 -3
  280. package/dist/client/{checkout-Bu6iCdkP.mjs → checkout-CeysaIJK.mjs} +3 -3
  281. package/dist/client/client.mjs +58968 -57441
  282. package/dist/client/{context-BImarOAq.mjs → context-DBzX85Xc.mjs} +46 -18
  283. package/dist/client/dates-DCYhZBlW.mjs +264 -0
  284. package/dist/client/{eventCalendar-DS2h-UXD.mjs → eventCalendar-BgsN73Ul.mjs} +21 -44
  285. package/dist/client/{eventCombined-Drt4Oq9p.mjs → eventCombined-DcZQAMQP.mjs} +3 -3
  286. package/dist/client/{eventDetails-Bl2vWgTX.mjs → eventDetails-BWwGJ54l.mjs} +131 -51
  287. package/dist/client/{eventListing-CS7PHY7v.mjs → eventListing-DqYqV8vp.mjs} +3 -3
  288. package/dist/client/{eventRegistration-D-j8eNy2.mjs → eventRegistration-DQGDgu_e.mjs} +1122 -803
  289. package/dist/client/{form-RMpoLTyr.mjs → form-ClfpasVT.mjs} +2 -2
  290. package/dist/client/{headerSection-BYE3Lb3k.mjs → headerSection-BuOMe98N.mjs} +2 -2
  291. package/dist/client/hooks.mjs +9630 -9526
  292. package/dist/client/{locationMap-BxSr7Kkh.mjs → locationMap-CEqu_sfa.mjs} +2 -2
  293. package/dist/client/{newsletterForm-DerbXwFC.mjs → newsletterForm-IbrHjMxy.mjs} +2 -2
  294. package/dist/client/pricing-xj7MPZlK.mjs +314 -0
  295. package/dist/client/{productDetail-4SZCLhAf.mjs → productDetail-vxqTt5Xj.mjs} +3 -3
  296. package/dist/client/{productList-D7AP4GNq.mjs → productList-OTdZu8sb.mjs} +3 -3
  297. package/dist/client/{propsDecoder-pzBeCh14.mjs → propsDecoder-CY9gGEF7.mjs} +786 -1194
  298. package/dist/client/rendering/client.mjs +11481 -10469
  299. package/dist/client/rendering/islands.mjs +17 -17
  300. package/dist/client/rendering.mjs +26871 -25232
  301. package/dist/client/{scrollToBlock-CduAKf8T.mjs → scrollToBlock--BFV6kl-.mjs} +1 -1
  302. package/dist/client/{shop-Cp5p_kGe.mjs → shop-CP4YbDL9.mjs} +6 -6
  303. package/dist/client/{shop-commerce-DicXYaYX.mjs → shop-commerce-APs4XBXE.mjs} +5 -5
  304. package/dist/client/{shop-commerce-store-CGWnpY4K.mjs → shop-commerce-store-CAVLxLFr.mjs} +1 -1
  305. package/dist/client/{shopShared-BDf9ljkm.mjs → shopShared-BnSRrwXI.mjs} +3 -3
  306. package/dist/client/{useEventFilters-DeeyGYuk.mjs → useEventFilters-1a1by4c8.mjs} +33 -18
  307. package/dist/preview-next/before-render.mjs +186 -148
  308. package/dist/preview-next/client/runtime.mjs +4 -4
  309. package/dist/preview-next/keepAlive.mjs +186 -148
  310. package/dist/preview-next/middleware.mjs +186 -148
  311. package/dist/{previewAuthStore-DbqBol0V.mjs → previewAuthStore-BkEgnYPP.mjs} +186 -148
  312. package/dist/{sdk-runtime-19MO27F0.mjs → sdk-runtime-DwGfsT0S.mjs} +2 -2
  313. package/dist/{separator-DaPLtJ1f.mjs → separator-BeqDLneQ.mjs} +1 -1
  314. package/dist/server/components.mjs +53243 -51879
  315. package/dist/server/config-validation.mjs +1015 -906
  316. package/dist/server/config.mjs +1019 -910
  317. package/dist/server/data.mjs +10304 -10200
  318. package/dist/server/index.mjs +217 -198
  319. package/dist/server/next/tags.mjs +18 -4
  320. package/dist/server/next.mjs +62787 -61617
  321. package/dist/server/page-converter.mjs +797 -917
  322. package/dist/server/prebuild.mjs +1 -1
  323. package/dist/server/rendering/server.mjs +52557 -51365
  324. package/dist/server/rendering.mjs +54373 -53054
  325. package/dist/server/routing.mjs +13274 -13142
  326. package/dist/server/server.mjs +1076 -1154
  327. package/dist/server/theme-bridge.mjs +69 -9
  328. package/dist/server/theme.mjs +27 -8
  329. package/dist/styles/index.css +32 -1
  330. package/package.json +1 -1
  331. package/dist/_dts/api/src/publicExperience/wholeSeriesEndpoints.d.ts +0 -65
  332. package/dist/_dts/api/src/publicWholeSeriesEndpointDefinitions.d.ts +0 -20
  333. package/dist/_dts/api/src/sdk-event-pricing.d.ts +0 -61
  334. package/dist/_dts/blocks/src/system/blocks/events/whole-series/index.d.ts +0 -3
  335. package/dist/_dts/blocks/src/system/blocks/events/whole-series/pricing.d.ts +0 -50
  336. package/dist/_dts/blocks/src/system/blocks/events/whole-series/schemas.d.ts +0 -135
  337. package/dist/_dts/blocks/src/system/blocks/events/whole-series/types.d.ts +0 -87
  338. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCapacity.d.ts +0 -48
  339. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/pricing.d.ts +0 -17
  340. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/utils.d.ts +0 -100
  341. package/dist/_dts/sdk/src/client/wholeSeriesReadOperations.d.ts +0 -11
  342. package/dist/_dts/sdk/src/public-api/wholeSeriesContracts.d.ts +0 -2
  343. /package/dist/_dts/blocks/src/system/runtime/nodes/events/{shared → domain}/destination.d.ts +0 -0
@@ -1,142 +1,14 @@
1
1
  "use client";
2
2
  import { D as clsx } from "./colorStyles-CrxJrPjJ.mjs";
3
- import { At as assertNever, B as formatEventPrice, G as getContainerClass, Gt as getLocalScheduleDate, H as formatEventTeacherLine, J as resolveEventLinkProps, K as groupEventsByDate, L as formatDate, M as buildEventRuntimeFilters, N as getEventRuntimeFiltersKey, Rt as buildBookingUtcDateWindow, U as formatTime, Ut as formatLocalScheduleDate, W as getCardOrientation, X as getEventAvailability, st as themeButtonClassName } from "./propsDecoder-pzBeCh14.mjs";
4
- import { a as EventCardClient, i as EventPaginatedListView, n as useEventPagination, o as EventFilters, r as toError, t as useEventFilters } from "./useEventFilters-DeeyGYuk.mjs";
5
- import { n as useBlockApi } from "./context-BImarOAq.mjs";
3
+ import { $ as getOrderedDayNames, B as buildEventRuntimeFilters, F as calendarWindowBounds, G as getCardOrientation, I as calendarWindowMonths$1, Jt as formatLocalScheduleDate, K as getContainerClass, M as calendarMonthDate, N as calendarPageResponseError, P as calendarQueryKey, Q as getDayOfWeek, R as planCalendarMonthRanges, V as getEventRuntimeFiltersKey, X as buildCalendarViewport, Xt as getLocalScheduleDate, Y as addMonths, Z as formatDateKey, nt as isToday, q as MONTH_NAMES, rt as shiftCalendarAnchorDate, ut as themeButtonClassName } from "./propsDecoder-CY9gGEF7.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-1a1by4c8.mjs";
5
+ import { o as formatEventRemainingPlaces, p as isEventFull, t as formatEventPrice } from "./pricing-xj7MPZlK.mjs";
6
+ import { a as groupEventsByDate, i as formatTime, l as resolveEventLinkProps, t as formatDate } from "./dates-DCYhZBlW.mjs";
7
+ import { n as useBlockApi } from "./context-DBzX85Xc.mjs";
6
8
  import { t as createBodyThemePortalRoot } from "./themePortalRoot-AGs4cE7t.mjs";
7
9
  import { t as ModalShell } from "./ModalShell-CqkBvBIC.mjs";
8
- import React, { createContext, useCallback, useContext, useEffect, useId, useMemo, useReducer, useRef, useState } from "react";
10
+ import React, { createContext, useCallback, useContext, useEffect, useId, useMemo, useRef, useState } from "react";
9
11
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
10
- //#region ../calendar/src/grid.ts
11
- const DAY_NAMES = [
12
- "Sun",
13
- "Mon",
14
- "Tue",
15
- "Wed",
16
- "Thu",
17
- "Fri",
18
- "Sat"
19
- ];
20
- const MONTH_NAMES = [
21
- "January",
22
- "February",
23
- "March",
24
- "April",
25
- "May",
26
- "June",
27
- "July",
28
- "August",
29
- "September",
30
- "October",
31
- "November",
32
- "December"
33
- ];
34
- function formatDateKey(date) {
35
- return `${String(date.year).padStart(4, "0")}-${String(date.month).padStart(2, "0")}-${String(date.day).padStart(2, "0")}`;
36
- }
37
- function isToday(date, today) {
38
- return isSameCalendarDay(date, today);
39
- }
40
- function isSameCalendarDay(left, right) {
41
- return left.year === right.year && left.month === right.month && left.day === right.day;
42
- }
43
- function getStartOfMonth(date) {
44
- return {
45
- year: date.year,
46
- month: date.month,
47
- day: 1
48
- };
49
- }
50
- function getEndOfMonth(date) {
51
- return addDays(addMonths(getStartOfMonth(date), 1), -1);
52
- }
53
- function addMonths(date, months) {
54
- const target = new Date(Date.UTC(date.year, date.month - 1 + months, 1, 12));
55
- const year = target.getUTCFullYear();
56
- const month = target.getUTCMonth() + 1;
57
- const lastDay = new Date(Date.UTC(year, month, 0, 12)).getUTCDate();
58
- return {
59
- year,
60
- month,
61
- day: Math.min(date.day, lastDay)
62
- };
63
- }
64
- function addDays(date, days) {
65
- const result = new Date(Date.UTC(date.year, date.month - 1, date.day + days, 12));
66
- return {
67
- year: result.getUTCFullYear(),
68
- month: result.getUTCMonth() + 1,
69
- day: result.getUTCDate()
70
- };
71
- }
72
- function shiftCalendarAnchorDate(date, view, steps) {
73
- return view === "week" ? addDays(date, steps * 7) : addMonths(date, steps);
74
- }
75
- function getMonthCalendarDays(year, month, startOfWeek) {
76
- const firstDay = {
77
- year,
78
- month,
79
- day: 1
80
- };
81
- const dayOfWeek = getDayOfWeek(firstDay);
82
- const gridStart = addDays(firstDay, -(startOfWeek === "monday" ? dayOfWeek === 0 ? 6 : dayOfWeek - 1 : dayOfWeek));
83
- return Array.from({ length: 42 }, (_, index) => addDays(gridStart, index));
84
- }
85
- function getWeekCalendarDays(baseDate, startOfWeek) {
86
- const dayOfWeek = getDayOfWeek(baseDate);
87
- const weekStart = addDays(baseDate, -(startOfWeek === "monday" ? dayOfWeek === 0 ? 6 : dayOfWeek - 1 : dayOfWeek));
88
- return Array.from({ length: 7 }, (_, index) => addDays(weekStart, index));
89
- }
90
- function getDayOfWeek(date) {
91
- return new Date(Date.UTC(date.year, date.month - 1, date.day, 12)).getUTCDay();
92
- }
93
- function getWeekCalendarDayTuple(baseDate, startOfWeek) {
94
- const days = getWeekCalendarDays(baseDate, startOfWeek);
95
- assertWeekCalendarDays(days);
96
- return days;
97
- }
98
- function assertWeekCalendarDays(days) {
99
- if (days.length !== 7) throw new Error("Expected exactly 7 calendar days");
100
- }
101
- function getOrderedDayNames(startOfWeek, dayNames = DAY_NAMES) {
102
- if (startOfWeek === "monday") {
103
- const sunday = dayNames[0] ?? "Sun";
104
- return [...dayNames.slice(1), sunday];
105
- }
106
- return [...dayNames];
107
- }
108
- function formatCalendarTitle(viewDate, view, days, monthNames = MONTH_NAMES) {
109
- if (view === "week") {
110
- const weekStart = days[0];
111
- const weekEnd = days[6];
112
- if (weekStart === void 0 || weekEnd === void 0) return `${monthNames[viewDate.month - 1] ?? ""} ${viewDate.year}`;
113
- const startMonth = monthNames[weekStart.month - 1] ?? "";
114
- const endMonth = monthNames[weekEnd.month - 1] ?? "";
115
- if (weekStart.month === weekEnd.month) return `${startMonth} ${weekStart.day} - ${weekEnd.day}, ${weekEnd.year}`;
116
- return `${startMonth} ${weekStart.day} - ${endMonth} ${weekEnd.day}, ${weekEnd.year}`;
117
- }
118
- return `${monthNames[viewDate.month - 1] ?? ""} ${viewDate.year}`;
119
- }
120
- function buildCalendarViewport(input) {
121
- const monthNames = input.monthNames ?? MONTH_NAMES;
122
- if (input.view === "week") {
123
- const days = getWeekCalendarDayTuple(input.anchorDate, input.startOfWeek);
124
- return {
125
- kind: "week",
126
- anchorDate: input.anchorDate,
127
- days,
128
- title: formatCalendarTitle(input.anchorDate, "week", days, monthNames)
129
- };
130
- }
131
- const days = getMonthCalendarDays(input.anchorDate.year, input.anchorDate.month, input.startOfWeek);
132
- return {
133
- kind: "month",
134
- anchorDate: input.anchorDate,
135
- days,
136
- title: formatCalendarTitle(input.anchorDate, "month", days, monthNames)
137
- };
138
- }
139
- //#endregion
140
12
  //#region ../blocks/src/system/runtime/shared/components/TabBarFragment.tsx
141
13
  function clampIndex(idx, len) {
142
14
  if (len <= 0) return 0;
@@ -207,34 +79,126 @@ const TabBar = ({ tabs, activeTab, onTabChange, className }) => {
207
79
  };
208
80
  //#endregion
209
81
  //#region ../blocks/src/system/runtime/hooks/useCalendarEvents.state.ts
210
- function calendarEventCacheLoadReducer(state, action) {
211
- switch (action.type) {
212
- case "started": return {
213
- kind: "loading",
214
- scope: action.scope
215
- };
216
- case "succeeded": return sameCalendarLoadScope(state, action.scope) ? { kind: "idle" } : state;
217
- case "failed": return sameCalendarLoadScope(state, action.scope) ? {
218
- kind: "error",
219
- scope: action.scope,
220
- error: action.error
221
- } : state;
222
- default: return assertNever(action);
82
+ function calendarMonthKey(date) {
83
+ return `${date.year}-${String(date.month).padStart(2, "0")}`;
84
+ }
85
+ function calendarWindowMonths(date, radius) {
86
+ const months = [];
87
+ for (let offset = -radius; offset <= radius; offset++) months.push(calendarMonthKey(addMonths(date, offset)));
88
+ return months;
89
+ }
90
+ function groupEvents(events, timeZone) {
91
+ const grouped = /* @__PURE__ */ new Map();
92
+ for (const event of events) {
93
+ const key = calendarMonthKey(getLocalScheduleDate(new Date(event.startsAt), timeZone));
94
+ const month = grouped.get(key) ?? [];
95
+ if (!month.some((existing) => existing.occurrenceId === event.occurrenceId)) month.push(event);
96
+ grouped.set(key, month);
223
97
  }
98
+ return grouped;
224
99
  }
225
- function projectCalendarLoadState(state, scope) {
226
- if (state.kind === "idle" || !sameCalendarLoadScope(state, scope)) return { kind: "idle" };
227
- return state.kind === "loading" ? { kind: "loading" } : {
228
- kind: "error",
229
- error: state.error
100
+ function seedCalendarWindow(page) {
101
+ const request = {
102
+ months: calendarWindowMonths$1(page.window),
103
+ window: page.window
230
104
  };
105
+ const applied = applyCalendarPage(startCalendarRequest(/* @__PURE__ */ new Map(), request), request, page);
106
+ if (page.kind === "complete") return applied;
107
+ return new Map([...applied].map(([key, month]) => [key, month.kind === "loading" ? {
108
+ kind: "partial",
109
+ events: month.events,
110
+ continuation: {
111
+ ...request,
112
+ cursor: page.nextCursor
113
+ }
114
+ } : month]));
231
115
  }
232
- function sameCalendarLoadScope(state, scope) {
233
- if (state.kind === "idle") return false;
234
- return state.scope.filtersKey === scope.filtersKey && state.scope.anchorDate.year === scope.anchorDate.year && state.scope.anchorDate.month === scope.anchorDate.month && state.scope.anchorDate.day === scope.anchorDate.day;
116
+ function planCalendarRequest(state, months, retry) {
117
+ const missing = months.filter((key) => {
118
+ const month = state.get(key);
119
+ return !month || month.kind === "partial" || retry && month.kind === "failed";
120
+ });
121
+ const first = missing[0];
122
+ if (!first) return null;
123
+ const month = state.get(first);
124
+ const continuation = month && (month.kind === "partial" || month.kind === "failed") ? month.continuation : void 0;
125
+ if (continuation) return {
126
+ ...continuation,
127
+ months: continuation.months.filter((key) => state.get(key)?.kind !== "ready")
128
+ };
129
+ const monthWindow = planCalendarMonthRanges(missing)[0];
130
+ return monthWindow ? {
131
+ months: calendarWindowMonths$1(monthWindow),
132
+ "window": monthWindow
133
+ } : null;
235
134
  }
236
- function toCalendarEventCacheLoadError(error) {
237
- return toError(error, "Unknown error");
135
+ function applyCalendarPage(state, request, page) {
136
+ const next = new Map(state);
137
+ const grouped = groupEvents(page.events, page.scope.timeZone);
138
+ for (const key of request.months) {
139
+ const month = state.get(key);
140
+ if (month?.kind !== "loading" || month.request !== request) continue;
141
+ const events = [...new Map([...month.events, ...grouped.get(key) ?? []].map((event) => [event.occurrenceId, event])).values()];
142
+ const end = calendarWindowBounds({
143
+ startMonth: key,
144
+ endMonthExclusive: calendarMonthKey(addMonths(calendarMonthDate(key), 1))
145
+ }, page.scope.timeZone).endExclusive;
146
+ const covered = page.kind === "complete" || Date.parse(end) <= Date.parse(page.nextCursor.startsAt);
147
+ next.set(key, covered ? {
148
+ kind: "ready",
149
+ events
150
+ } : {
151
+ kind: "loading",
152
+ events,
153
+ request
154
+ });
155
+ }
156
+ return next;
157
+ }
158
+ function startCalendarRequest(state, request) {
159
+ const next = new Map(state);
160
+ for (const key of request.months) {
161
+ const month = state.get(key);
162
+ if (month?.kind === "loading" || month?.kind === "ready") continue;
163
+ next.set(key, {
164
+ kind: "loading",
165
+ request,
166
+ events: month?.events ?? []
167
+ });
168
+ }
169
+ return next;
170
+ }
171
+ function calendarCacheReducer(state, action) {
172
+ if (action.kind === "started") return startCalendarRequest(state, action.request);
173
+ if (action.kind === "page") return applyCalendarPage(state, action.request, action.page);
174
+ const next = new Map(state);
175
+ for (const key of action.request.months) {
176
+ const month = state.get(key);
177
+ if (month?.kind === "loading" && month.request === action.request) next.set(key, {
178
+ kind: "failed",
179
+ error: action.error,
180
+ events: month.events,
181
+ continuation: {
182
+ ...action.request,
183
+ cursor: action.cursor ?? action.request.cursor
184
+ }
185
+ });
186
+ }
187
+ return next;
188
+ }
189
+ function selectCalendarEvents(state, months) {
190
+ const events = /* @__PURE__ */ new Map();
191
+ for (const key of months) for (const event of state.get(key)?.events ?? []) events.set(event.occurrenceId, event);
192
+ return [...events.values()].sort((a, b) => new Date(a.startsAt).getTime() - new Date(b.startsAt).getTime());
193
+ }
194
+ function projectCalendarLoadState(state, months) {
195
+ const entries = months.map((key) => state.get(key));
196
+ const failed = entries.find((entry) => entry?.kind === "failed");
197
+ if (failed?.kind === "failed") return {
198
+ kind: "error",
199
+ error: failed.error
200
+ };
201
+ return entries.some((entry) => !entry || entry.kind === "partial" || entry.kind === "loading") ? { kind: "loading" } : { kind: "idle" };
238
202
  }
239
203
  //#endregion
240
204
  //#region ../blocks/src/system/runtime/hooks/useCalendarEvents.ts
@@ -244,35 +208,6 @@ function toCalendarEventCacheLoadError(error) {
244
208
  * Uses the Block API Client for type-safe API calls.
245
209
  * Must be used within a BlockApiProvider.
246
210
  */
247
- /** Maximum events to fetch per calendar request (covers 3 months of events) */
248
- const CALENDAR_FETCH_LIMIT = 200;
249
- async function loadCalendarEventPages(loadPage, request, isCurrent) {
250
- const events = [];
251
- let afterStartsAt;
252
- let afterId;
253
- for (;;) {
254
- const page = await loadPage({
255
- ...request,
256
- afterStartsAt,
257
- afterId,
258
- limit: CALENDAR_FETCH_LIMIT
259
- });
260
- if (!isCurrent()) return null;
261
- events.push(...page);
262
- if (page.length < CALENDAR_FETCH_LIMIT) return events;
263
- const last = page[page.length - 1];
264
- if (!last) return events;
265
- if (last.startsAt === afterStartsAt && last.occurrenceId === afterId) throw new Error("Calendar event pagination cursor did not advance");
266
- afterStartsAt = last.startsAt;
267
- afterId = last.occurrenceId;
268
- }
269
- }
270
- /**
271
- * Generate a cache key for a month
272
- */
273
- function getMonthKey(date) {
274
- return `${date.year}-${String(date.month).padStart(2, "0")}`;
275
- }
276
211
  function useCalendarViewport({ view = "month", startOfWeek = "monday", initialDate }) {
277
212
  const [viewDate, setViewDate] = useState(initialDate);
278
213
  const viewport = useMemo(() => buildCalendarViewport({
@@ -303,179 +238,134 @@ function useCalendarViewport({ view = "month", startOfWeek = "monday", initialDa
303
238
  }, [initialDate])
304
239
  };
305
240
  }
306
- function addEventsToCalendarCache(cache, events, timeZone) {
307
- for (const event of events) {
308
- const monthKey = getMonthKey(getLocalScheduleDate(new Date(event.startsAt), timeZone));
309
- const existing = cache.get(monthKey) ?? [];
310
- if (!existing.some((cachedEvent) => cachedEvent.id === event.id)) cache.set(monthKey, [...existing, event]);
311
- }
312
- }
313
- function useInitiallySeededCalendarCache(initialEvents, timeZone) {
314
- const cacheRef = useRef(/* @__PURE__ */ new Map());
315
- const seededRef = useRef(false);
316
- if (!seededRef.current) {
317
- addEventsToCalendarCache(cacheRef.current, initialEvents, timeZone);
318
- seededRef.current = true;
319
- }
320
- return cacheRef;
321
- }
322
- function readEventsFromCalendarCache(cache, viewDate) {
323
- const allEvents = [];
324
- for (let offset = -1; offset <= 1; offset += 1) {
325
- const monthEvents = cache.get(getMonthKey(addMonths(viewDate, offset))) ?? [];
326
- allEvents.push(...monthEvents);
327
- }
328
- const seen = /* @__PURE__ */ new Set();
329
- return allEvents.filter((event) => {
330
- if (seen.has(event.id)) return false;
331
- seen.add(event.id);
332
- return true;
333
- }).sort((left, right) => new Date(left.startsAt).getTime() - new Date(right.startsAt).getTime());
334
- }
335
241
  /**
336
- * Owns event loading and month-window caching for a supplied viewport anchor.
337
- * It does not decide navigation semantics or visible calendar days.
242
+ * The reducer owns month data and request ownership. The hook only performs I/O.
243
+ * Requests for other months remain useful until the query context changes.
338
244
  */
339
- function useCalendarEventCache({ viewDate, initialEvents = [], preloadMonths = 1, filters, stage, timeZone }) {
340
- const { getPublicEvents } = useBlockApi();
341
- const [loadState, dispatchLoadState] = useReducer(calendarEventCacheLoadReducer, { kind: "idle" });
342
- const [cacheVersion, setCacheVersion] = useState(0);
343
- const filtersKey = useMemo(() => getEventRuntimeFiltersKey(filters), [
344
- filters?.categoryIds,
345
- filters?.eventPresets,
346
- filters?.eventSurface,
347
- filters?.scheduleScope,
348
- filters?.staffMemberId,
349
- filters?.venueId
350
- ]);
351
- const cacheRef = useInitiallySeededCalendarCache(initialEvents, timeZone);
352
- const loadedMonthsRef = useRef(/* @__PURE__ */ new Set());
353
- const fetchingRef = useRef(/* @__PURE__ */ new Set());
354
- const requestIdRef = useRef(0);
355
- const initializedFiltersKeyRef = useRef(null);
356
- useEffect(() => {
357
- if (initializedFiltersKeyRef.current === filtersKey) return;
358
- initializedFiltersKeyRef.current = filtersKey;
359
- cacheRef.current = /* @__PURE__ */ new Map();
360
- loadedMonthsRef.current = /* @__PURE__ */ new Set();
361
- fetchingRef.current = /* @__PURE__ */ new Set();
362
- requestIdRef.current += 1;
363
- addEventsToCalendarCache(cacheRef.current, initialEvents, timeZone);
364
- setCacheVersion((v) => v + 1);
365
- }, [
245
+ function useCalendarEventCache({ readProfile = "listing-card", viewDate, calendarWindow, preloadMonths = 1, filters, stage, timeZone }) {
246
+ const { getPublicEventCalendarWindow, config } = useBlockApi();
247
+ const filtersKey = getEventRuntimeFiltersKey(filters);
248
+ const context = useMemo(() => ({
249
+ getPublicEventCalendarWindow,
250
+ filters,
251
+ stage,
252
+ timeZone,
253
+ key: calendarQueryKey(config.siteId ?? "", stage, {
254
+ ...filters,
255
+ readProfile
256
+ })
257
+ }), [
258
+ getPublicEventCalendarWindow,
259
+ config.siteId,
366
260
  filtersKey,
367
- initialEvents,
368
- timeZone
261
+ stage,
262
+ timeZone,
263
+ readProfile
264
+ ]);
265
+ const activeContext = useRef(context);
266
+ activeContext.current = context;
267
+ const seed = () => calendarWindow?.scope.key === context.key && calendarWindow.scope.timeZone === timeZone ? seedCalendarWindow(calendarWindow) : /* @__PURE__ */ new Map();
268
+ const [snapshot, setSnapshot] = useState(() => ({
269
+ context,
270
+ cache: seed()
271
+ }));
272
+ if (snapshot.context !== context) setSnapshot({
273
+ context,
274
+ cache: /* @__PURE__ */ new Map()
275
+ });
276
+ const months = useMemo(() => calendarWindowMonths(viewDate, preloadMonths), [
277
+ viewDate.year,
278
+ viewDate.month,
279
+ preloadMonths
280
+ ]);
281
+ const displayMonths = useMemo(() => calendarWindowMonths(viewDate, 1), [viewDate.year, viewDate.month]);
282
+ const request = useMemo(() => snapshot.context === context ? planCalendarRequest(snapshot.cache, months, false) : null, [
283
+ snapshot,
284
+ context,
285
+ months
369
286
  ]);
370
- const fetchEventsForRange = useCallback(async (from, to, targetMonths, scope) => {
371
- const monthsToFetch = targetMonths.filter((m) => !loadedMonthsRef.current.has(m) && !fetchingRef.current.has(m));
372
- if (monthsToFetch.length === 0) return;
373
- monthsToFetch.forEach((m) => fetchingRef.current.add(m));
374
- const currentRequestId = ++requestIdRef.current;
375
- dispatchLoadState({
376
- type: "started",
377
- scope
287
+ const launched = useRef(/* @__PURE__ */ new WeakSet());
288
+ const runRequest = useCallback(async (planned) => {
289
+ if (launched.current.has(planned)) return;
290
+ launched.current.add(planned);
291
+ const apply = (action) => setSnapshot((current) => current.context === context ? {
292
+ context,
293
+ cache: calendarCacheReducer(current.cache, action)
294
+ } : current);
295
+ apply({
296
+ kind: "started",
297
+ request: planned
378
298
  });
299
+ let cursor = planned.cursor;
379
300
  try {
380
- const result = await loadCalendarEventPages(getPublicEvents, {
381
- from,
382
- to,
383
- stage,
384
- detailLevel: "listing",
385
- eventSurface: filters?.eventSurface,
386
- eventPresets: filters?.eventPresets,
387
- scheduleScope: filters?.scheduleScope,
388
- categoryIds: filters?.categoryIds,
389
- staffMemberId: filters?.staffMemberId,
390
- venueId: filters?.venueId
391
- }, () => currentRequestId === requestIdRef.current);
392
- if (result === null) return;
393
- for (const event of result) {
394
- const monthKey = getMonthKey(getLocalScheduleDate(new Date(event.startsAt), timeZone));
395
- const existing = cacheRef.current.get(monthKey) || [];
396
- if (!existing.some((e) => e.id === event.id)) cacheRef.current.set(monthKey, [...existing, event]);
301
+ while (activeContext.current === context) {
302
+ const page = await context.getPublicEventCalendarWindow({
303
+ ...context.filters,
304
+ readProfile,
305
+ stage: context.stage,
306
+ ...planned.window,
307
+ afterStartsAt: cursor?.startsAt,
308
+ afterId: cursor?.occurrenceId,
309
+ limit: 200
310
+ });
311
+ if (activeContext.current !== context) return;
312
+ const invalid = calendarPageResponseError(page, {
313
+ key: context.key,
314
+ timeZone,
315
+ window: planned.window,
316
+ cursor
317
+ });
318
+ if (invalid) throw new Error(`Invalid calendar page: ${invalid}`);
319
+ apply({
320
+ kind: "page",
321
+ request: planned,
322
+ page
323
+ });
324
+ if (page.kind === "complete") return;
325
+ cursor = page.nextCursor;
397
326
  }
398
- for (const month of monthsToFetch) {
399
- loadedMonthsRef.current.add(month);
400
- if (!cacheRef.current.has(month)) cacheRef.current.set(month, []);
401
- }
402
- setCacheVersion((v) => v + 1);
403
- dispatchLoadState({
404
- type: "succeeded",
405
- scope
406
- });
407
- } catch (err) {
408
- monthsToFetch.forEach((m) => fetchingRef.current.delete(m));
409
- if (currentRequestId === requestIdRef.current) dispatchLoadState({
410
- type: "failed",
411
- scope,
412
- error: toCalendarEventCacheLoadError(err)
413
- });
414
- } finally {
415
- monthsToFetch.forEach((m) => fetchingRef.current.delete(m));
416
- }
417
- }, [
418
- getPublicEvents,
419
- filters?.categoryIds,
420
- filters?.eventPresets,
421
- filters?.eventSurface,
422
- filters?.scheduleScope,
423
- filters?.staffMemberId,
424
- filters?.venueId,
425
- stage,
426
- timeZone
427
- ]);
428
- const ensureEventsLoaded = useCallback((date) => {
429
- const targetMonths = [];
430
- for (let i = -preloadMonths; i <= preloadMonths; i++) {
431
- const targetDate = addMonths(date, i);
432
- targetMonths.push(getMonthKey(targetDate));
433
- }
434
- const unloadedMonths = targetMonths.filter((m) => !loadedMonthsRef.current.has(m) && !fetchingRef.current.has(m));
435
- if (unloadedMonths.length > 0) {
436
- const startDate = getStartOfMonth(addMonths(date, -preloadMonths));
437
- const endDate = getEndOfMonth(addMonths(date, preloadMonths));
438
- const range = buildBookingUtcDateWindow({
439
- startDate: formatLocalScheduleDate(startDate),
440
- endDate: formatLocalScheduleDate(endDate),
441
- timeZone
327
+ } catch (error) {
328
+ apply({
329
+ kind: "failed",
330
+ request: planned,
331
+ cursor,
332
+ error: toError(error, "Failed to load events")
442
333
  });
443
- const scope = {
444
- anchorDate: date,
445
- filtersKey
446
- };
447
- fetchEventsForRange(range.startAt.toISOString(), (/* @__PURE__ */ new Date(range.endExclusive.getTime() - 1)).toISOString(), unloadedMonths, scope);
448
334
  }
449
335
  }, [
450
- preloadMonths,
451
- fetchEventsForRange,
452
- filtersKey,
453
- timeZone
336
+ context,
337
+ timeZone,
338
+ readProfile
454
339
  ]);
455
340
  useEffect(() => {
456
- ensureEventsLoaded(viewDate);
457
- }, [viewDate, ensureEventsLoaded]);
341
+ if (request) runRequest(request);
342
+ }, [request, runRequest]);
458
343
  const retryCurrentView = useCallback(() => {
459
- ensureEventsLoaded(viewDate);
460
- }, [ensureEventsLoaded, viewDate]);
344
+ if (snapshot.context !== context) return;
345
+ const retry = planCalendarRequest(snapshot.cache, months, true);
346
+ if (retry) runRequest(retry);
347
+ }, [
348
+ snapshot,
349
+ context,
350
+ months,
351
+ runRequest
352
+ ]);
461
353
  return {
462
- events: useMemo(() => readEventsFromCalendarCache(cacheRef.current, viewDate), [viewDate, cacheVersion]),
463
- loadState: projectCalendarLoadState(loadState, useMemo(() => ({
464
- anchorDate: viewDate,
465
- filtersKey
466
- }), [filtersKey, viewDate])),
354
+ events: selectCalendarEvents(snapshot.cache, displayMonths),
355
+ loadState: projectCalendarLoadState(snapshot.cache, months),
467
356
  retryCurrentView
468
357
  };
469
358
  }
470
- function useCalendarEvents({ siteId: _siteId, initialEvents = [], view = "month", startOfWeek = "monday", preloadMonths = 1, filters, stage, calendarContext }) {
359
+ function useCalendarEvents({ readProfile, siteId: _siteId, calendarWindow, view = "month", startOfWeek = "monday", preloadMonths = 1, filters, stage, calendarContext }) {
471
360
  const { viewDate, viewport, goToDate, goToPrevious, goToNext, goToToday } = useCalendarViewport({
472
361
  view,
473
362
  startOfWeek,
474
363
  initialDate: calendarContext.initialToday
475
364
  });
476
365
  const { events, loadState, retryCurrentView } = useCalendarEventCache({
366
+ readProfile,
477
367
  viewDate,
478
- initialEvents,
368
+ calendarWindow,
479
369
  preloadMonths,
480
370
  filters,
481
371
  stage,
@@ -623,8 +513,8 @@ const AgendaEventCard = ({ event, showCapacity, onClick }) => {
623
513
  const eventLinkProps = resolveEventLinkProps(event);
624
514
  const categoryColor = event.eventCategory?.color || "rgb(var(--tb-accent))";
625
515
  const price = formatEventPrice(event);
626
- const { available, isFull } = getEventAvailability(event);
627
- const capacity = showCapacity && available != null ? isFull ? "Full" : `${available} spots left` : null;
516
+ const capacity = showCapacity ? formatEventRemainingPlaces(event) : null;
517
+ const isFull = isEventFull(event);
628
518
  const title = event.title;
629
519
  const timeZone = event.timeZone ?? null;
630
520
  const teacherLine = formatEventTeacherLine(event);
@@ -966,7 +856,8 @@ function toEventCombinedControllerProps(props) {
966
856
  buttonText: props.render.display.buttonText,
967
857
  emptyMessage: props.render.display.emptyMessage,
968
858
  className: props.render.display.className ?? void 0,
969
- calendarContext: props.render.hydration.calendarContext
859
+ calendarContext: props.render.hydration.calendarContext,
860
+ calendarWindow: props.render.hydration.calendarWindow
970
861
  };
971
862
  }
972
863
  /**
@@ -978,7 +869,7 @@ function toEventCombinedControllerProps(props) {
978
869
  const EventCombinedClient = ({ events: initialEvents, siteId, stage, listLayout = "stack", listColumns = "3", eventsPerPage = 12, paginationAction = {
979
870
  kind: "loadMore",
980
871
  label: "Load more events"
981
- }, startOfWeek = "monday", calendarTabViews = "both", defaultCalendarView, showFilters, showCategoryFilter = "auto", showVenueFilter, showStaffFilter, eventSurface, filterEventPresets, scheduleScope, filterCategoryIds, filterStaffMemberId, filterVenueId, showVenue, showMap, showCapacity, cardRole, buttonVariant = "primary", buttonText = "Book", emptyMessage = "No upcoming events scheduled.", className, calendarContext }) => {
872
+ }, startOfWeek = "monday", calendarTabViews = "both", defaultCalendarView, showFilters, showCategoryFilter = "auto", showVenueFilter, showStaffFilter, eventSurface, filterEventPresets, scheduleScope, filterCategoryIds, filterStaffMemberId, filterVenueId, showVenue, showMap, showCapacity, cardRole, buttonVariant = "primary", buttonText = "Book", emptyMessage = "No upcoming events scheduled.", className, calendarContext, calendarWindow }) => {
982
873
  const fetchInitialEventsOnMount = initialEvents == null;
983
874
  const resolvedShowFilters = showFilters ?? true;
984
875
  const resolvedShowVenueFilter = showVenueFilter ?? false;
@@ -1038,19 +929,13 @@ const EventCombinedClient = ({ events: initialEvents, siteId, stage, listLayout
1038
929
  });
1039
930
  const { events: calendarEventsRaw, viewDate, viewport, loadState: calendarLoadState, goToPrevious, goToNext, goToToday } = useCalendarEvents({
1040
931
  siteId,
1041
- initialEvents: useMemo(() => {
1042
- return getEventRuntimeFiltersKey(initialListFilters) === getEventRuntimeFiltersKey(listFilters) ? initialEvents ?? [] : [];
1043
- }, [
1044
- initialEvents,
1045
- initialListFilters,
1046
- listFilters
1047
- ]),
1048
932
  view: calendarView,
1049
933
  startOfWeek,
1050
934
  preloadMonths: 1,
1051
935
  filters: listFilters,
1052
936
  stage,
1053
- calendarContext
937
+ calendarContext,
938
+ calendarWindow
1054
939
  });
1055
940
  const eventsByDate = useMemo(() => groupEventsByDate(calendarEventsRaw, calendarContext.timeZone), [calendarContext.timeZone, calendarEventsRaw]);
1056
941
  const dayNames = useMemo(() => getOrderedDayNames(startOfWeek), [startOfWeek]);
@@ -1233,4 +1118,4 @@ const EventCombinedClient = ({ events: initialEvents, siteId, stage, listLayout
1233
1118
  };
1234
1119
  const EventCombinedIslandClient = (props) => /* @__PURE__ */ jsx(EventCombinedClient, { ...toEventCombinedControllerProps(props) });
1235
1120
  //#endregion
1236
- export { CalendarDayCell as a, useCalendarEvents as c, formatDateKey as d, getDayOfWeek as f, isToday as g, isSameCalendarDay as h, WeekAgendaView as i, MONTH_NAMES as l, getWeekCalendarDays as m, EventCombinedIslandClient as n, EventModalProvider as o, getOrderedDayNames as p, EventModals as r, useEventModal as s, EventCombinedClient as t, addDays as u };
1121
+ export { CalendarDayCell as a, useCalendarEvents as c, WeekAgendaView as i, EventCombinedIslandClient as n, EventModalProvider as o, EventModals as r, useEventModal as s, EventCombinedClient as t };