@riverbankcms/sdk 0.82.0 → 0.84.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 (194) hide show
  1. package/README.md +16 -0
  2. package/dist/{PreviewEditorSidebar-LHGK6RIO.mjs → PreviewEditorSidebar-HML67UDA.mjs} +330 -11
  3. package/dist/{PreviewEditorUI-AXZG2SDC.mjs → PreviewEditorUI-I4BQUU6K.mjs} +3 -3
  4. package/dist/SdkPreviewModeRuntime-MCKMVDTK.mjs +8 -0
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +200 -0
  6. package/dist/_dts/api/src/blocks.d.ts +36 -0
  7. package/dist/_dts/api/src/contentRuntime.d.ts +46 -0
  8. package/dist/_dts/api/src/endpoints.d.ts +40 -0
  9. package/dist/_dts/api/src/index.d.ts +2 -2
  10. package/dist/_dts/api/src/sdk-event-pricing.d.ts +61 -0
  11. package/dist/_dts/api/src/sdk-event-schedule.d.ts +52 -0
  12. package/dist/_dts/api/src/sdk-event-upsert.d.ts +50 -0
  13. package/dist/_dts/api/src/sdkContracts.d.ts +67 -33
  14. package/dist/_dts/api/src/shared-contracts.d.ts +13 -0
  15. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +22 -36
  16. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +46 -1
  17. package/dist/_dts/block-form/src/backend/useBackendWatch.d.ts +6 -1
  18. package/dist/_dts/block-form/src/utils/evaluateVisibility.d.ts +3 -2
  19. package/dist/_dts/block-form/src/utils/visibleWhen.d.ts +7 -0
  20. package/dist/_dts/blocks/src/PageRenderer.d.ts +11 -0
  21. package/dist/_dts/blocks/src/bindings/index.d.ts +1 -1
  22. package/dist/_dts/blocks/src/client/site-chrome.d.ts +1 -1
  23. package/dist/_dts/blocks/src/client.d.ts +4 -0
  24. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +16 -4
  25. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +288 -2016
  26. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +288 -2016
  27. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +288 -2016
  28. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +288 -2016
  29. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +288 -2016
  30. package/dist/_dts/blocks/src/system/blocks/contact-newsletter.d.ts +171 -0
  31. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +288 -2016
  32. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +288 -2016
  33. package/dist/_dts/blocks/src/system/blocks/hero.d.ts +3 -2
  34. package/dist/_dts/blocks/src/system/blocks/index.d.ts +1 -0
  35. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +1 -7
  36. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +2534 -151
  37. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +288 -2016
  38. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +288 -2016
  39. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +288 -2016
  40. package/dist/_dts/blocks/src/system/blocks/site-header.d.ts +36 -3
  41. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +2 -2
  42. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  43. package/dist/_dts/blocks/src/system/fields/aspectRatio.d.ts +4 -1
  44. package/dist/_dts/blocks/src/system/fields/imageShape.d.ts +30 -0
  45. package/dist/_dts/blocks/src/system/fragments/library/heroLayoutControls.d.ts +25 -0
  46. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +35 -161
  47. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +24 -6
  48. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +12 -3
  49. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +33 -0
  50. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.state.d.ts +303 -0
  51. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +20 -1
  52. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +4 -3
  53. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/utils.d.ts +1 -1
  54. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +26 -6
  55. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/pricing.d.ts +14 -0
  56. package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +1 -1
  57. package/dist/_dts/content-editor/src/controller/buildBlockPublishedBaselines.d.ts +1 -1
  58. package/dist/_dts/content-editor/src/controller/seedDraftBaselinesFromBlocks.d.ts +1 -1
  59. package/dist/_dts/content-editor/src/controller/useBlocksList.d.ts +1 -1
  60. package/dist/_dts/content-editor/src/controller/useInvalidBlockRecovery.d.ts +1 -1
  61. package/dist/_dts/content-editor/src/primitives/PreviewRichTextEditor.d.ts +2 -1
  62. package/dist/_dts/content-editor/src/primitives/PreviewTextEditor.d.ts +1 -0
  63. package/dist/_dts/content-model/src/entry-slots/index.d.ts +1 -0
  64. package/dist/_dts/content-model/src/entry-slots/types.d.ts +356 -0
  65. package/dist/_dts/content-model/src/index.d.ts +1 -0
  66. package/dist/_dts/content-model/src/templates/defaults.d.ts +7 -0
  67. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +100 -5
  68. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +6 -1
  69. package/dist/_dts/editor-blocks/src/BlockForm.d.ts +1 -1
  70. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockCreation.d.ts +3 -2
  71. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockDuplication.d.ts +3 -2
  72. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockReorder.d.ts +3 -2
  73. package/dist/_dts/editor-blocks/src/block-editor/owner.d.ts +27 -0
  74. package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
  75. package/dist/_dts/media-core/src/assetsInUseSummary.d.ts +8 -0
  76. package/dist/_dts/media-core/src/mediaUsageProjection.d.ts +37 -3
  77. package/dist/_dts/preview-next/src/client/blocks/pageDesignRuntimePreview.d.ts +4 -2
  78. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -2
  79. package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +3 -1
  80. package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +19 -0
  81. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeButton.d.ts +8 -0
  82. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +4 -1
  83. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +1 -1
  84. package/dist/_dts/preview-next/src/client/preview/linkedEntryEditEvents.d.ts +9 -0
  85. package/dist/_dts/preview-next/src/client/preview/previewCustomizeControls.d.ts +9 -8
  86. package/dist/_dts/preview-next/src/client/preview/siteChromeLookRows.d.ts +10 -1
  87. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +5 -1
  88. package/dist/_dts/sdk/src/bookings/index.d.ts +5 -4
  89. package/dist/_dts/sdk/src/bookings/types.d.ts +2 -2
  90. package/dist/_dts/sdk/src/cli/content/reader.d.ts +9 -8
  91. package/dist/_dts/sdk/src/cli/content/writer.d.ts +6 -1
  92. package/dist/_dts/sdk/src/cli/helpers.d.ts +10 -5
  93. package/dist/_dts/sdk/src/cli/merge-remote/entryLocal.d.ts +2 -2
  94. package/dist/_dts/sdk/src/cli/merge-remote/entryMerge.d.ts +2 -1
  95. package/dist/_dts/sdk/src/cli/merge-remote/entrySnapshots.d.ts +2 -2
  96. package/dist/_dts/sdk/src/client/management/index.d.ts +1 -1
  97. package/dist/_dts/sdk/src/client/management/types.d.ts +40 -10
  98. package/dist/_dts/sdk/src/config/field-definitions.d.ts +13 -7
  99. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +26 -3
  100. package/dist/_dts/sdk/src/public-api/contracts.d.ts +13 -0
  101. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +1 -0
  102. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +6 -1
  103. package/dist/_dts/sdk/src/rendering/overrides.d.ts +6 -1
  104. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  105. package/dist/_dts/sdk/src/version.d.ts +1 -1
  106. package/dist/_dts/site-commands/src/commands.d.ts +15 -0
  107. package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -1
  108. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
  109. package/dist/_dts/theme-core/src/buttons/personalities/ornate-ritual.d.ts +16 -0
  110. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +1 -1
  111. package/dist/_dts/theme-core/src/buttons/types.d.ts +3 -3
  112. package/dist/_dts/theme-core/src/cards/types.d.ts +15 -15
  113. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  114. package/dist/_dts/theme-core/src/inputs/types.d.ts +1 -1
  115. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +33 -33
  116. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +15 -0
  117. package/dist/_dts/theme-core/src/palette/variants/warm-dark.d.ts +16 -0
  118. package/dist/_dts/theme-core/src/schema.d.ts +30 -25
  119. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  120. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +141 -1
  121. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -0
  122. package/dist/_dts/theme-core/src/site-styles/footerLooks.d.ts +110 -5
  123. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
  124. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  125. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +5 -1
  126. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +1 -1
  127. package/dist/_dts/theme-core/src/site-styles/types.d.ts +1 -1
  128. package/dist/_dts/theme-core/src/site-styles/typographyPresets.d.ts +16 -1
  129. package/dist/_dts/theme-core/src/siteChromePlanning.d.ts +1 -0
  130. package/dist/_dts/theme-core/src/utils/colorStyles.d.ts +6 -6
  131. package/dist/{chunk-2BUMISSH.mjs → chunk-3LXFQS7T.mjs} +1 -1
  132. package/dist/{chunk-G35HOQEN.mjs → chunk-5E33VO6J.mjs} +132 -46
  133. package/dist/{chunk-HKB6XVIP.mjs → chunk-6X2OVO3S.mjs} +2 -2
  134. package/dist/{chunk-6FWNF3DJ.mjs → chunk-HFMGVJCE.mjs} +158 -20
  135. package/dist/{chunk-FIREV57T.mjs → chunk-LBBPD2IW.mjs} +40 -0
  136. package/dist/{chunk-XQR6THQJ.mjs → chunk-MSHZO4SL.mjs} +3193 -1216
  137. package/dist/cli/index.mjs +2635 -575
  138. package/dist/cli/init-docs/content/getting-started.md +2 -0
  139. package/dist/cli/init-docs/content/workflow-templates.md +93 -2
  140. package/dist/client/{accordion-G34C45TW.mjs → accordion-ESY65T56.mjs} +2 -2
  141. package/dist/client/{bookingForm-BLBVKSAQ.mjs → bookingForm-JRFNZUHD.mjs} +5 -5
  142. package/dist/client/bookings.mjs +3539 -269
  143. package/dist/client/{carousel-7ZVTBRMD.mjs → carousel-CPR5VWIP.mjs} +3 -3
  144. package/dist/client/{cart-Q6S6LZUO.mjs → cart-ZUX5BA7O.mjs} +6 -6
  145. package/dist/client/{checkout-5QJLDE4I.mjs → checkout-RULGBADZ.mjs} +6 -6
  146. package/dist/client/{chunk-CHAB5ACD.mjs → chunk-52I7BGEK.mjs} +2 -2
  147. package/dist/client/{chunk-CSZGLBYR.mjs → chunk-5ZEAZ33K.mjs} +1 -1
  148. package/dist/client/{chunk-ZF4XEWDM.mjs → chunk-BT6AEIKN.mjs} +1 -1
  149. package/dist/client/{chunk-RJHTCTCZ.mjs → chunk-HXPWP5EN.mjs} +268 -15
  150. package/dist/client/{chunk-5PQH4Y75.mjs → chunk-JWEYB4V6.mjs} +2 -2
  151. package/dist/client/{chunk-EQKYMX4N.mjs → chunk-RDJFCPY3.mjs} +158 -51
  152. package/dist/client/{chunk-SBBSMFFG.mjs → chunk-SYIJ5JO2.mjs} +1 -1
  153. package/dist/client/{chunk-WJFHDTYF.mjs → chunk-URQCZD5W.mjs} +5 -5
  154. package/dist/client/{chunk-U2EW7RSR.mjs → chunk-Z5OBQ5I4.mjs} +1 -1
  155. package/dist/client/{chunk-S3MKFGOG.mjs → chunk-ZE5G642V.mjs} +1 -1
  156. package/dist/client/client.mjs +2391 -673
  157. package/dist/client/{courseRegistration-VUG2JJDB.mjs → courseRegistration-QTUDC35T.mjs} +5 -5
  158. package/dist/client/{eventCalendar-E7D2LD4N.mjs → eventCalendar-Q7NS4XLD.mjs} +7 -7
  159. package/dist/client/{eventCombined-FUZ2Z3CS.mjs → eventCombined-QAO7VUO5.mjs} +7 -7
  160. package/dist/client/{eventDetails-QRITJAOW.mjs → eventDetails-WTNNU6Q3.mjs} +7 -7
  161. package/dist/client/{eventListing-INMQMJZ5.mjs → eventListing-5TA2ELDT.mjs} +7 -7
  162. package/dist/client/{eventRegistration-TOOJD4WU.mjs → eventRegistration-M6USZGRF.mjs} +7 -7
  163. package/dist/client/{form-BOWN7ZNQ.mjs → form-DGVGXLMH.mjs} +2 -2
  164. package/dist/client/{headerSection-HFQNZOUU.mjs → headerSection-O2AGMPCU.mjs} +3 -3
  165. package/dist/client/hooks.mjs +1636 -385
  166. package/dist/client/{locationMap-VUZGC7Y5.mjs → locationMap-EJRNRIKJ.mjs} +2 -2
  167. package/dist/client/{newsletterForm-X2XQTPCB.mjs → newsletterForm-7NTC2DTR.mjs} +2 -2
  168. package/dist/client/{productDetail-TA7D2G2B.mjs → productDetail-HH4LP53D.mjs} +6 -6
  169. package/dist/client/{productList-AZOLOZKM.mjs → productList-YVHYM2AF.mjs} +6 -6
  170. package/dist/client/rendering/client.mjs +2303 -1068
  171. package/dist/client/rendering/islands.mjs +19 -19
  172. package/dist/client/rendering.mjs +2587 -796
  173. package/dist/client/{shop-ZDLO7IIG.mjs → shop-UIFX7XRK.mjs} +6 -6
  174. package/dist/preview-next/before-render.mjs +40 -0
  175. package/dist/preview-next/client/runtime.mjs +5 -5
  176. package/dist/preview-next/middleware.mjs +40 -0
  177. package/dist/{sdk-runtime-CTWKNBDQ.mjs → sdk-runtime-ZENAOYMN.mjs} +6 -6
  178. package/dist/server/components.mjs +2028 -457
  179. package/dist/server/config-validation.mjs +1629 -377
  180. package/dist/server/config.mjs +1629 -377
  181. package/dist/server/data.mjs +1636 -385
  182. package/dist/server/index.mjs +42 -1
  183. package/dist/server/next.mjs +2215 -571
  184. package/dist/server/page-converter.mjs +2068 -884
  185. package/dist/server/prebuild.mjs +1 -1
  186. package/dist/server/rendering/server.mjs +2040 -469
  187. package/dist/server/rendering.mjs +2119 -475
  188. package/dist/server/routing.mjs +1711 -419
  189. package/dist/server/server.mjs +1718 -394
  190. package/dist/server/theme-bridge.mjs +1180 -101
  191. package/dist/server/theme.mjs +92 -1
  192. package/dist/styles/index.css +292 -36
  193. package/package.json +1 -1
  194. package/dist/SdkPreviewModeRuntime-RNVRHFFR.mjs +0 -8
@@ -1,16 +1,16 @@
1
1
  "use client";
2
2
  import { LeafletStaticMap } from './chunk-XSV6KW4D.mjs';
3
- import { MagicLinkForm, useWaitlistClaim } from './chunk-ZF4XEWDM.mjs';
4
- import { usePolling } from './chunk-CSZGLBYR.mjs';
5
- import { SpinnerNode } from './chunk-SBBSMFFG.mjs';
3
+ import { MagicLinkForm, useWaitlistClaim } from './chunk-BT6AEIKN.mjs';
4
+ import { usePolling } from './chunk-5ZEAZ33K.mjs';
5
+ import { SpinnerNode } from './chunk-SYIJ5JO2.mjs';
6
6
  import { useDiscountCodeUi } from './chunk-ZFHRN6W2.mjs';
7
- import { createBodyThemePortalRoot, TabBarFragment, logoutPortal, StepIndicator, DiscountCodeDisclosure, TerminalPanel, StateIcon, formatPrice, CrossIcon, ClockIcon, consumeSearchParam, LoggedInAsUser, CheckIcon } from './chunk-CHAB5ACD.mjs';
7
+ import { createBodyThemePortalRoot, TabBarFragment, logoutPortal, StepIndicator, DiscountCodeDisclosure, TerminalPanel, StateIcon, formatPrice, CrossIcon, ClockIcon, consumeSearchParam, LoggedInAsUser, CheckIcon } from './chunk-52I7BGEK.mjs';
8
8
  import { getFieldValidationControlProps, FieldValidationMessage } from './chunk-3DCJ45Z2.mjs';
9
9
  import { ModalShell } from './chunk-DVNUDUVT.mjs';
10
10
  import { isSpamProtectionEnabled, AltchaWidget, getChallengeUrl } from './chunk-GFSQNTRW.mjs';
11
11
  import { useBlockApi, FeedbackMessage } from './chunk-UDNSI5PY.mjs';
12
- import { buildEventRuntimeFilters, buildEventCalendarListingRender, groupEventsByDate, getOrderedDayNames, formatDateKey, getEventRuntimeFiltersKey, themeButtonClassName, normalizeCsvIds, normalizeOptionalId, normalizeEventBlockKind, normalizeCsvString, EventCompactRow, EmptyState, getContainerClass, getCardOrientation, isToday, MAX_EVENTS_PER_DAY, formatTime, resolveCoursePricingState, formatEventPrice, formatEventDateParts, DateTimeTile, EventCard, buildCalendarViewport, shiftCalendarAnchorDate, addMonths, getThreeMonthRange, buildTimetableModel, formatDate, isEventContentType, formatCoursePriceAmount, formatCoursePriceDisplay, MONTH_NAMES, getEventAvailability, formatEventTeacherLine, CreditCard, Ticket, Star, Sparkles, assertNever11 } from './chunk-RJHTCTCZ.mjs';
13
- import { publicEventPricingType, getBookingLocalDateKey, toScheduledBookingDateTime, toBookingTimeZone, publicEventPricingCurrency, formatBookingDateTime, publicEventPricingMode, publicEventScalarPrice, publicEventTicketTypes, formatBookingDate, formatBookingTime } from './chunk-S3MKFGOG.mjs';
12
+ import { buildEventRuntimeFilters, buildEventCalendarListingRender, groupEventsByDate, getOrderedDayNames, formatDateKey, getEventRuntimeFiltersKey, themeButtonClassName, normalizeCsvIds, normalizeOptionalId, normalizeEventBlockKind, normalizeCsvString, EventCompactRow, EmptyState, getContainerClass, getCardOrientation, isToday, MAX_EVENTS_PER_DAY, formatTime, resolveCoursePricingState, resolveRuntimeEventPricing, formatEventPrice, formatEventDateParts, DateTimeTile, EventCard, buildCalendarViewport, shiftCalendarAnchorDate, addMonths, getThreeMonthRange, buildTimetableModel, formatDate, isEventContentType, formatCoursePriceAmount, formatCoursePriceDisplay, MONTH_NAMES, getEventAvailability, formatEventTeacherLine, CreditCard, Ticket, Star, Sparkles, assertNever11 } from './chunk-HXPWP5EN.mjs';
13
+ import { publicEventPricingType, getBookingLocalDateKey, toScheduledBookingDateTime, toBookingTimeZone, publicEventPricingCurrency, formatBookingDateTime, publicEventPricingMode, publicEventScalarPrice, publicEventTicketTypes, formatBookingDate, formatBookingTime } from './chunk-ZE5G642V.mjs';
14
14
  import React9, { createContext, useId, useMemo, useState, useRef, useEffect, useCallback, useContext, useReducer } from 'react';
15
15
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
16
16
 
@@ -190,6 +190,81 @@ function requiresPaymentStep(params) {
190
190
  return !isEntitlementSelection(params.paymentSelection);
191
191
  }
192
192
 
193
+ // ../blocks/src/system/runtime/nodes/event-registration/event-registration.headless.state.ts
194
+ var DEFAULT_EVENT_REGISTRATION_MAX_TICKETS = 5;
195
+ function getRegistrableStatuses(isPreview) {
196
+ return isPreview ? ["active", "draft"] : ["active"];
197
+ }
198
+ function normalizeEventRegistrationMaxTickets(value) {
199
+ if (typeof value === "number" && Number.isFinite(value) && value > 0) {
200
+ return Math.floor(value);
201
+ }
202
+ if (typeof value === "string") {
203
+ const parsed = Number.parseInt(value, 10);
204
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_EVENT_REGISTRATION_MAX_TICKETS;
205
+ }
206
+ return DEFAULT_EVENT_REGISTRATION_MAX_TICKETS;
207
+ }
208
+ function resolveEventRegistrationSubmitPlan(input) {
209
+ const selection = input.paymentSelection.method ? input.paymentSelection : void 0;
210
+ if (input.canJoinWaitlist) {
211
+ return { ok: true, args: withOptionalSelection({ method: "free" }, selection) };
212
+ }
213
+ switch (input.paymentSelection.method) {
214
+ case "pass":
215
+ return input.paymentSelection.passId ? {
216
+ ok: true,
217
+ args: withOptionalSelection(
218
+ { method: "pass", passId: input.paymentSelection.passId },
219
+ selection
220
+ )
221
+ } : missingPaymentSelection();
222
+ case "membership":
223
+ return input.paymentSelection.membershipId ? {
224
+ ok: true,
225
+ args: withOptionalSelection(
226
+ { method: "membership", membershipId: input.paymentSelection.membershipId },
227
+ selection
228
+ )
229
+ } : missingPaymentSelection();
230
+ case "free":
231
+ return { ok: true, args: withOptionalSelection({ method: "free" }, selection) };
232
+ case null:
233
+ return input.eventRequiresPayment ? missingPaymentSelection() : { ok: true, args: { method: "free" } };
234
+ case "pass_bundle":
235
+ return input.paymentSelection.bundlePassId ? {
236
+ ok: true,
237
+ args: withOptionalSelection(
238
+ { method: "pass_bundle", passId: input.paymentSelection.bundlePassId },
239
+ selection
240
+ )
241
+ } : missingPaymentSelection();
242
+ case "membership_bundle":
243
+ return input.paymentSelection.bundleMembershipId ? {
244
+ ok: true,
245
+ args: withOptionalSelection(
246
+ {
247
+ method: "membership_bundle",
248
+ membershipId: input.paymentSelection.bundleMembershipId
249
+ },
250
+ selection
251
+ )
252
+ } : missingPaymentSelection();
253
+ case "stripe":
254
+ return { ok: true, args: withOptionalSelection({ method: "stripe" }, selection) };
255
+ }
256
+ }
257
+ function withOptionalSelection(args, selection) {
258
+ return selection ? { ...args, selection } : args;
259
+ }
260
+ function missingPaymentSelection() {
261
+ return {
262
+ ok: false,
263
+ reason: "payment-selection-required",
264
+ message: "Select a payment option to continue."
265
+ };
266
+ }
267
+
193
268
  // ../blocks/src/system/runtime/nodes/event-registration/utils.ts
194
269
  var DEFAULT_EVENT_CURRENCY = "usd";
195
270
  function formatDate2(isoTimestamp, options) {
@@ -281,7 +356,7 @@ function getTicketTypeAvailabilityLabel(ticketType) {
281
356
  }
282
357
  function getVisibleTicketTypes(input) {
283
358
  const eligibilityTicketTypes = input.eligibility?.ticketTypes;
284
- const eventTicketTypes = input.event ? publicEventTicketTypes(input.event.pricing) : [];
359
+ const eventTicketTypes = input.event ? publicEventTicketTypes(resolveRuntimeEventPricing(input.event)) : [];
285
360
  const source = eligibilityTicketTypes && eligibilityTicketTypes.length > 0 ? eligibilityTicketTypes : eventTicketTypes;
286
361
  return source.filter(
287
362
  (ticketType) => ticketType.isActive && (!input.selectedAttendanceMode || (ticketType.attendanceScope ?? "both") === "both" || (ticketType.attendanceScope ?? "both") === input.selectedAttendanceMode)
@@ -848,8 +923,9 @@ var TicketSelectionStep = ({
848
923
  const waitlistEnabled = selectedModeAvailability?.waitlistEnabled ?? event?.waitlistEnabled ?? false;
849
924
  const isSoldOut = availableSpots === 0;
850
925
  const canJoinWaitlist = isSoldOut && waitlistEnabled === true;
851
- const eventPricingMode = event ? publicEventPricingMode(event.pricing) : void 0;
852
- const eventPricingCurrency = event ? publicEventPricingCurrency(event.pricing) : null;
926
+ const eventPricing = event ? resolveRuntimeEventPricing(event) : null;
927
+ const eventPricingMode = eventPricing ? publicEventPricingMode(eventPricing) : void 0;
928
+ const eventPricingCurrency = eventPricing ? publicEventPricingCurrency(eventPricing) : null;
853
929
  const usesTicketTypes = eventPricingMode === "ticket_types" && !canJoinWaitlist;
854
930
  const visibleTicketTypes = usesTicketTypes ? getVisibleTicketTypes({
855
931
  event,
@@ -1796,18 +1872,8 @@ function EventRegistrationWizardActions(props) {
1796
1872
  }
1797
1873
  case "select-payment": {
1798
1874
  const { status, canContinue, buttonText } = wizard.paymentStepState;
1799
- const selection = wizard.paymentSelection;
1800
1875
  const handlePaymentContinue = () => {
1801
- if (!selection.method) return;
1802
- if (selection.method === "free") {
1803
- void wizard.handlePaymentSelect("free");
1804
- return;
1805
- }
1806
- void wizard.handlePaymentSelect(
1807
- selection.method,
1808
- selection.passId ?? selection.bundlePassId,
1809
- selection.membershipId ?? selection.bundleMembershipId
1810
- );
1876
+ void wizard.handlePaymentSelect();
1811
1877
  };
1812
1878
  return /* @__PURE__ */ jsxs("div", { className: "er-actions", children: [
1813
1879
  /* @__PURE__ */ jsx("button", { type: "button", onClick: () => wizard.setStep("enter-details"), className: "er-back-btn", children: "\u2190 Back" }),
@@ -2025,9 +2091,15 @@ function useEventRegistrationStripeReturn(options) {
2025
2091
 
2026
2092
  // ../blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.ts
2027
2093
  function useEventRegistrationSubmit(options) {
2028
- return async (method, passId, membershipId, selection) => {
2094
+ return async (method, passId, membershipId, selection, submitOptions) => {
2029
2095
  const submitOccurrenceId = options.registrationTarget?.occurrenceId;
2030
- if (!submitOccurrenceId) return;
2096
+ if (!submitOccurrenceId) {
2097
+ return {
2098
+ ok: false,
2099
+ reason: "missing-target",
2100
+ message: "Select an event to continue."
2101
+ };
2102
+ }
2031
2103
  options.setStep("submitting");
2032
2104
  try {
2033
2105
  const isBundle = method === "pass_bundle" || method === "membership_bundle";
@@ -2095,7 +2167,7 @@ function useEventRegistrationSubmit(options) {
2095
2167
  if (checkoutResult.bypassed) {
2096
2168
  options.setRegistrationResult({ status: "confirmed" });
2097
2169
  options.setStep("success");
2098
- return;
2170
+ return { ok: true, outcome: { kind: "completed" } };
2099
2171
  }
2100
2172
  if (!checkoutResult.checkoutUrl) {
2101
2173
  throw new Error("Checkout URL missing");
@@ -2112,8 +2184,17 @@ function useEventRegistrationSubmit(options) {
2112
2184
  paymentSelection: selectionSnapshot
2113
2185
  });
2114
2186
  }
2187
+ if (submitOptions?.redirect === "manual") {
2188
+ return {
2189
+ ok: true,
2190
+ outcome: {
2191
+ kind: "checkout_redirect",
2192
+ checkoutUrl: checkoutResult.checkoutUrl
2193
+ }
2194
+ };
2195
+ }
2115
2196
  window.location.href = checkoutResult.checkoutUrl;
2116
- return;
2197
+ return { ok: true, outcome: { kind: "checkout_redirect", checkoutUrl: checkoutResult.checkoutUrl } };
2117
2198
  }
2118
2199
  if (result.alreadyRegistered) {
2119
2200
  const title = result.status === "waitlist" ? "Already waitlisted" : "Already registered";
@@ -2135,9 +2216,16 @@ function useEventRegistrationSubmit(options) {
2135
2216
  options.setRegistrationResult({ status: result.status });
2136
2217
  }
2137
2218
  options.setStep("success");
2219
+ return { ok: true, outcome: { kind: "completed" } };
2138
2220
  } catch (error) {
2139
- options.setErrorMessage(error instanceof Error ? error.message : "Registration failed");
2221
+ const message = error instanceof Error ? error.message : "Registration failed";
2222
+ options.setErrorMessage(message);
2140
2223
  options.setStep("error");
2224
+ return {
2225
+ ok: false,
2226
+ reason: "submission-failed",
2227
+ message
2228
+ };
2141
2229
  }
2142
2230
  };
2143
2231
  }
@@ -2185,7 +2273,7 @@ function resolveEventRequiresPayment(input) {
2185
2273
  if (!input.event) {
2186
2274
  return false;
2187
2275
  }
2188
- return publicEventPricingType(input.event.pricing) !== "free";
2276
+ return publicEventPricingType(resolveRuntimeEventPricing(input.event)) !== "free";
2189
2277
  }
2190
2278
  function resolveDiscountContext(input) {
2191
2279
  const selection = input.paymentSelection.method ? input.paymentSelection : null;
@@ -2216,6 +2304,7 @@ function resolveDiscountContext(input) {
2216
2304
  function toRegistrationEvent(event) {
2217
2305
  return {
2218
2306
  ...event,
2307
+ pricing: resolveRuntimeEventPricing(event),
2219
2308
  publicEventId: event.id,
2220
2309
  registrationOccurrenceId: event.occurrenceId
2221
2310
  };
@@ -2442,7 +2531,7 @@ function useEventRegistrationWizard(options) {
2442
2531
  );
2443
2532
  const ticketTypeSelectionRequired = useMemo(() => {
2444
2533
  const event = selectedEvent ?? preSelectedEvent;
2445
- if (!event || publicEventPricingMode(event.pricing) !== "ticket_types") {
2534
+ if (!event || publicEventPricingMode(resolveRuntimeEventPricing(event)) !== "ticket_types") {
2446
2535
  return false;
2447
2536
  }
2448
2537
  if ((event.deliveryMode ?? "in_person") === "hybrid" && !selectedAttendanceMode) {
@@ -2457,7 +2546,7 @@ function useEventRegistrationWizard(options) {
2457
2546
  );
2458
2547
  useEffect(() => {
2459
2548
  const event = selectedEvent ?? preSelectedEvent;
2460
- if (!event || publicEventPricingMode(event.pricing) !== "ticket_types") {
2549
+ if (!event || publicEventPricingMode(resolveRuntimeEventPricing(event)) !== "ticket_types") {
2461
2550
  if (selectedTicketTypeId !== null) {
2462
2551
  setSelectedTicketTypeId(null);
2463
2552
  }
@@ -2530,30 +2619,45 @@ function useEventRegistrationWizard(options) {
2530
2619
  setStep("error");
2531
2620
  return;
2532
2621
  }
2533
- if (eligibility?.canJoinWaitlist) {
2534
- await handleSubmit("free", void 0, void 0, paymentSelection.method ? paymentSelection : void 0);
2535
- return;
2536
- }
2537
- if (paymentSelection.method === "pass" && paymentSelection.passId) {
2538
- await handleSubmit("pass", paymentSelection.passId, void 0, paymentSelection);
2622
+ const shouldCollectPayment = !eligibility?.canJoinWaitlist && requiresPaymentStep({ eventRequiresPayment, paymentSelection });
2623
+ if (shouldCollectPayment) {
2624
+ setStep("select-payment");
2539
2625
  return;
2540
2626
  }
2541
- if (paymentSelection.method === "membership" && paymentSelection.membershipId) {
2542
- await handleSubmit("membership", void 0, paymentSelection.membershipId, paymentSelection);
2627
+ const submitPlan = resolveEventRegistrationSubmitPlan({
2628
+ paymentSelection,
2629
+ eventRequiresPayment,
2630
+ canJoinWaitlist: eligibility?.canJoinWaitlist
2631
+ });
2632
+ if (!submitPlan.ok) {
2633
+ setErrorMessage(submitPlan.message);
2634
+ setStep("error");
2543
2635
  return;
2544
2636
  }
2545
- if (paymentSelection.method === "free" || !eventRequiresPayment) {
2546
- await handleSubmit("free", void 0, void 0, paymentSelection.method ? paymentSelection : void 0);
2637
+ await handleSubmit(
2638
+ submitPlan.args.method,
2639
+ submitPlan.args.passId,
2640
+ submitPlan.args.membershipId,
2641
+ submitPlan.args.selection
2642
+ );
2643
+ };
2644
+ const handlePaymentSelect = async () => {
2645
+ const submitPlan = resolveEventRegistrationSubmitPlan({
2646
+ paymentSelection,
2647
+ eventRequiresPayment,
2648
+ canJoinWaitlist: eligibility?.canJoinWaitlist
2649
+ });
2650
+ if (!submitPlan.ok) {
2651
+ setErrorMessage(submitPlan.message);
2652
+ setStep("error");
2547
2653
  return;
2548
2654
  }
2549
- if (requiresPaymentStep({ eventRequiresPayment: true, paymentSelection })) {
2550
- setStep("select-payment");
2551
- } else {
2552
- await handleSubmit("stripe", void 0, void 0, paymentSelection.method ? paymentSelection : void 0);
2553
- }
2554
- };
2555
- const handlePaymentSelect = async (method, passId, membershipId) => {
2556
- await handleSubmit(method, passId, membershipId, paymentSelection.method ? paymentSelection : void 0);
2655
+ await handleSubmit(
2656
+ submitPlan.args.method,
2657
+ submitPlan.args.passId,
2658
+ submitPlan.args.membershipId,
2659
+ submitPlan.args.selection
2660
+ );
2557
2661
  };
2558
2662
  const handleUseCardInsteadOfPass = () => {
2559
2663
  dispatchFlow({ type: "use-card-instead-of-pass" });
@@ -2577,7 +2681,7 @@ function useEventRegistrationWizard(options) {
2577
2681
  const discountSubtotalCents = useMemo(() => {
2578
2682
  if (discountContext?.type !== "event") return void 0;
2579
2683
  const event = selectedEvent ?? preSelectedEvent;
2580
- const eventPriceCents = selectedTicketType?.priceAmount ?? eligibility?.price ?? (event ? publicEventScalarPrice(event.pricing) : null) ?? 0;
2684
+ const eventPriceCents = selectedTicketType?.priceAmount ?? eligibility?.price ?? (event ? publicEventScalarPrice(resolveRuntimeEventPricing(event)) : null) ?? 0;
2581
2685
  return Math.max(0, eventPriceCents * ticketsCount);
2582
2686
  }, [discountContext, selectedTicketType, eligibility, selectedEvent, preSelectedEvent, ticketsCount]);
2583
2687
  const discountUi = useDiscountCodeUi({ api, discountContext, subtotalCents: discountSubtotalCents });
@@ -2665,6 +2769,7 @@ function useEventRegistrationWizard(options) {
2665
2769
  altchaSolution,
2666
2770
  setAltchaSolution,
2667
2771
  portalAuthState,
2772
+ portalProfile,
2668
2773
  showMagicLinkModal,
2669
2774
  setShowMagicLinkModal,
2670
2775
  handleLogout,
@@ -2679,6 +2784,7 @@ function useEventRegistrationWizard(options) {
2679
2784
  eligibilityError,
2680
2785
  existingRegistration: existingRegistrationResult.registration,
2681
2786
  existingRegistrationLoading: existingRegistrationResult.isLoading,
2787
+ existingRegistrationState: existingRegistrationResult.state,
2682
2788
  hasEligibility,
2683
2789
  hasMembershipEligibility,
2684
2790
  requireGuestDetails,
@@ -2737,7 +2843,7 @@ function EventRegistrationWizard(props) {
2737
2843
  spamProtectionEnabled,
2738
2844
  supportEmail
2739
2845
  } = props;
2740
- const maxTicketsNum = parseInt(maxTickets, 10) || 5;
2846
+ const maxTicketsNum = normalizeEventRegistrationMaxTickets(maxTickets);
2741
2847
  const showSpamProtection = spamProtectionEnabled ?? isSpamProtectionEnabled();
2742
2848
  const buttonClass = themeButtonClassName({ variant: buttonVariant, size: "md" });
2743
2849
  const wizard = useEventRegistrationWizard({
@@ -2750,7 +2856,7 @@ function EventRegistrationWizard(props) {
2750
2856
  if (wizard.scopedEvents.length === 0 && !wizard.occurrenceContext) {
2751
2857
  return /* @__PURE__ */ jsx("div", { id: EVENT_REGISTRATION_ANCHOR_ID, className: `event-registration ${className || ""}`, "data-block": "event-registration", children: /* @__PURE__ */ jsx("div", { className: "er-empty", children: /* @__PURE__ */ jsx("p", { className: "er-empty__text", children: "No events available for registration." }) }) });
2752
2858
  }
2753
- const allowedStatuses = wizard.api.config.isPreview ? ["active", "draft"] : ["active"];
2859
+ const allowedStatuses = getRegistrableStatuses(wizard.api.config.isPreview);
2754
2860
  const hasRegistrableEvents = wizard.scopedEvents.some((event) => !event.status || allowedStatuses.includes(event.status));
2755
2861
  if (!hasRegistrableEvents && !wizard.occurrenceContext) {
2756
2862
  return /* @__PURE__ */ jsx("div", { id: EVENT_REGISTRATION_ANCHOR_ID, className: `event-registration ${className || ""}`, "data-block": "event-registration", children: /* @__PURE__ */ jsx("div", { className: "er-empty", children: /* @__PURE__ */ jsx("p", { className: "er-empty__text", children: "Registration is not currently available for this event." }) }) });
@@ -3085,8 +3191,9 @@ function EventDetailsView({
3085
3191
  priceCents: selected.course.priceCents,
3086
3192
  currency: selected.course.currency
3087
3193
  }) : null;
3088
- const eventPricingType = publicEventPricingType(selected.pricing);
3089
- const eventPricingCurrency = publicEventPricingCurrency(selected.pricing) ?? "USD";
3194
+ const eventPricing = resolveRuntimeEventPricing(selected);
3195
+ const eventPricingType = publicEventPricingType(eventPricing);
3196
+ const eventPricingCurrency = publicEventPricingCurrency(eventPricing) ?? "USD";
3090
3197
  const isPaid = eventPricingType === "paid";
3091
3198
  const shouldShowCoursePricing = showCost && !isDropIn && coursePricing !== null;
3092
3199
  const shouldShowEventCost = showCost && isPaid && !isDropIn && coursePricing === null;
@@ -1,4 +1,4 @@
1
- import { clsx_default } from './chunk-S3MKFGOG.mjs';
1
+ import { clsx_default } from './chunk-ZE5G642V.mjs';
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
3
 
4
4
  function resolveColorStyle(color) {
@@ -1,15 +1,15 @@
1
1
  "use client";
2
- import { addPassToCommerceCart, useCommerceCart } from './chunk-U2EW7RSR.mjs';
3
- import { CarouselNodeClient } from './chunk-5PQH4Y75.mjs';
2
+ import { addPassToCommerceCart, useCommerceCart } from './chunk-Z5OBQ5I4.mjs';
3
+ import { CarouselNodeClient } from './chunk-JWEYB4V6.mjs';
4
4
  import { isRecord } from './chunk-I2MMZO53.mjs';
5
5
  import { useDiscountCodeUi } from './chunk-ZFHRN6W2.mjs';
6
6
  import { buildRouteIslandApiConfig } from './chunk-L4J5Y62O.mjs';
7
- import { createBodyThemePortalRoot, consumeSearchParams, scrollToBlock, TerminalPanel, StateIcon, CheckIcon, CrossIcon, ActionRow, DiscountCodeDisclosure, consumeSearchParam, buildCheckoutReturnUrls } from './chunk-CHAB5ACD.mjs';
7
+ import { createBodyThemePortalRoot, consumeSearchParams, scrollToBlock, TerminalPanel, StateIcon, CheckIcon, CrossIcon, ActionRow, DiscountCodeDisclosure, consumeSearchParam, buildCheckoutReturnUrls } from './chunk-52I7BGEK.mjs';
8
8
  import { ModalShell, resolveDedicatedCheckoutPath } from './chunk-DVNUDUVT.mjs';
9
9
  import { useBlockApi, FeedbackMessage, BlockApiProvider } from './chunk-UDNSI5PY.mjs';
10
10
  import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
11
- import { themeButtonClassName, formatCommercePrice, formatInterval, getShopDisplayForItems, deriveCommerceCheckoutState, buildProductDetailDisplay, productItemKey, buildProductCartItem, buildProductCardDisplay, assertNever11, reportWorkflowError, clearWorkflowFeedback } from './chunk-RJHTCTCZ.mjs';
12
- import { assertNever, ok, err, getCurrentResolveImageUrlContext, resolveImageUrlWithContext, ImagePresets } from './chunk-S3MKFGOG.mjs';
11
+ import { themeButtonClassName, formatCommercePrice, formatInterval, getShopDisplayForItems, deriveCommerceCheckoutState, buildProductDetailDisplay, productItemKey, buildProductCartItem, buildProductCardDisplay, assertNever11, reportWorkflowError, clearWorkflowFeedback } from './chunk-HXPWP5EN.mjs';
12
+ import { assertNever, ok, err, getCurrentResolveImageUrlContext, resolveImageUrlWithContext, ImagePresets } from './chunk-ZE5G642V.mjs';
13
13
  import * as React3 from 'react';
14
14
  import React3__default, { useState, useRef, useCallback, useEffect } from 'react';
15
15
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,4 +1,4 @@
1
- import { EMPTY_COMMERCE_CART_STATE, parseStoredCommerceCartState, reduceCommerceCart, buildPassCartItem } from './chunk-RJHTCTCZ.mjs';
1
+ import { EMPTY_COMMERCE_CART_STATE, parseStoredCommerceCartState, reduceCommerceCart, buildPassCartItem } from './chunk-HXPWP5EN.mjs';
2
2
  import * as React from 'react';
3
3
 
4
4
  var EMPTY_STATE = EMPTY_COMMERCE_CART_STATE;
@@ -1320,7 +1320,7 @@ function rgbColorValue(token) {
1320
1320
  if (alpha === void 0) {
1321
1321
  return `rgb(var(${cssVar}))`;
1322
1322
  }
1323
- return `rgba(var(${cssVar}), ${alpha})`;
1323
+ return `rgb(var(${cssVar}) / ${alpha})`;
1324
1324
  }
1325
1325
  function backgroundColorStyle(token) {
1326
1326
  return { backgroundColor: rgbColorValue(token) };