@riverbankcms/sdk 0.84.0 → 0.84.2

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 (97) hide show
  1. package/dist/{PreviewEditorSidebar-HML67UDA.mjs → PreviewEditorSidebar-4PH35ZIE.mjs} +3 -3
  2. package/dist/{PreviewEditorUI-I4BQUU6K.mjs → PreviewEditorUI-WHMCRJGM.mjs} +11 -6
  3. package/dist/SdkPreviewModeRuntime-4FGSVUYI.mjs +8 -0
  4. package/dist/_dts/api/src/bookingConfig.d.ts +2 -0
  5. package/dist/_dts/api/src/index.d.ts +2 -2
  6. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +2 -1
  7. package/dist/_dts/api/src/sdk-event-payment-terms.d.ts +16 -0
  8. package/dist/_dts/api/src/sdk-event-upsert.d.ts +11 -2
  9. package/dist/_dts/api/src/sdkContracts.d.ts +3 -0
  10. package/dist/_dts/api/src/types.d.ts +1 -0
  11. package/dist/_dts/api/src/url.d.ts +12 -4
  12. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +4 -4
  13. package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +2 -0
  14. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +6 -6
  15. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +3 -3
  16. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizard.d.ts +0 -2
  17. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/constants.d.ts +1 -0
  18. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +275 -0
  19. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.override.d.ts +10 -0
  20. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.planning.d.ts +22 -0
  21. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.state.d.ts +3 -303
  22. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +3 -1
  23. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +9 -1
  24. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +8 -6
  25. package/dist/_dts/content-editor/src/hooks/useSimpleAutosave.d.ts +8 -0
  26. package/dist/_dts/editor-blocks/src/BlockForm.d.ts +6 -4
  27. package/dist/_dts/preview-next/src/client/preview/MaintenanceModeBadge.d.ts +3 -2
  28. package/dist/_dts/preview-next/src/client/preview/PreviewEditorUI.d.ts +2 -1
  29. package/dist/_dts/sdk/src/client/management/index.d.ts +1 -1
  30. package/dist/_dts/sdk/src/client/management/types.d.ts +6 -0
  31. package/dist/_dts/sdk/src/version.d.ts +1 -1
  32. package/dist/{chunk-LBBPD2IW.mjs → chunk-4QNLOTES.mjs} +11 -16
  33. package/dist/{chunk-5E33VO6J.mjs → chunk-NFWGLRZZ.mjs} +1 -70
  34. package/dist/{chunk-HFMGVJCE.mjs → chunk-OCGTXHSO.mjs} +8 -7
  35. package/dist/{chunk-3LXFQS7T.mjs → chunk-PYDHOMEO.mjs} +1 -1
  36. package/dist/{chunk-6X2OVO3S.mjs → chunk-WFPYN7KA.mjs} +2 -2
  37. package/dist/{chunk-MSHZO4SL.mjs → chunk-ZR2GQK2A.mjs} +274 -223
  38. package/dist/cli/index.mjs +332 -45
  39. package/dist/cli/init-docs/content/agents-section.md +5 -0
  40. package/dist/cli/init-docs/content/cli-reference.md +13 -0
  41. package/dist/cli/init-docs/content/content-management.md +31 -0
  42. package/dist/cli/init-docs/content/getting-started.md +12 -0
  43. package/dist/cli/init-docs/content/workflow-add-block.md +3 -1
  44. package/dist/cli/init-docs/content/workflow-agent-safe-sync.md +81 -0
  45. package/dist/cli/init-docs/content/workflow-create-page.md +13 -3
  46. package/dist/cli/init-docs/content/workflow-custom-block.md +9 -0
  47. package/dist/cli/init-docs/content/workflow-templates.md +14 -0
  48. package/dist/client/{accordion-ESY65T56.mjs → accordion-2UZPBMYM.mjs} +1 -1
  49. package/dist/client/{bookingForm-JRFNZUHD.mjs → bookingForm-36CWQUMV.mjs} +4 -4
  50. package/dist/client/bookings.mjs +156 -138
  51. package/dist/client/{carousel-CPR5VWIP.mjs → carousel-QH77HR6X.mjs} +2 -2
  52. package/dist/client/{cart-ZUX5BA7O.mjs → cart-X4YK4FTW.mjs} +5 -5
  53. package/dist/client/{checkout-RULGBADZ.mjs → checkout-OM2BEPWD.mjs} +5 -5
  54. package/dist/client/{chunk-RDJFCPY3.mjs → chunk-3C2VTPWI.mjs} +34 -117
  55. package/dist/client/{chunk-BT6AEIKN.mjs → chunk-3DTWLTXM.mjs} +1 -1
  56. package/dist/client/{chunk-JWEYB4V6.mjs → chunk-4OXKTA3D.mjs} +1 -1
  57. package/dist/client/{chunk-URQCZD5W.mjs → chunk-52CGCQ7B.mjs} +4 -4
  58. package/dist/client/{chunk-52I7BGEK.mjs → chunk-7UCLJ5SP.mjs} +1 -1
  59. package/dist/client/{chunk-Z5OBQ5I4.mjs → chunk-F5VRX5Y6.mjs} +1 -1
  60. package/dist/client/{chunk-GFSQNTRW.mjs → chunk-SDIYSQAY.mjs} +0 -4
  61. package/dist/client/{chunk-HXPWP5EN.mjs → chunk-VGDBVNOO.mjs} +175 -14
  62. package/dist/client/{chunk-5ZEAZ33K.mjs → chunk-ZKUO52W3.mjs} +1 -1
  63. package/dist/client/client.mjs +348 -232
  64. package/dist/client/{courseRegistration-QTUDC35T.mjs → courseRegistration-TMKU6ABO.mjs} +4 -4
  65. package/dist/client/{eventCalendar-Q7NS4XLD.mjs → eventCalendar-G6TI32X6.mjs} +6 -6
  66. package/dist/client/{eventCombined-QAO7VUO5.mjs → eventCombined-SCKEMNAR.mjs} +6 -6
  67. package/dist/client/{eventDetails-WTNNU6Q3.mjs → eventDetails-XPIFXXPK.mjs} +6 -6
  68. package/dist/client/{eventListing-5TA2ELDT.mjs → eventListing-7QFMEMGT.mjs} +6 -6
  69. package/dist/client/{eventRegistration-M6USZGRF.mjs → eventRegistration-TOODSZUI.mjs} +6 -6
  70. package/dist/client/{form-DGVGXLMH.mjs → form-MTCMVCZT.mjs} +2 -2
  71. package/dist/client/{headerSection-O2AGMPCU.mjs → headerSection-Y5TMR3TW.mjs} +2 -2
  72. package/dist/client/hooks.mjs +315 -35
  73. package/dist/client/{locationMap-EJRNRIKJ.mjs → locationMap-RH2LG7FZ.mjs} +1 -1
  74. package/dist/client/{newsletterForm-7NTC2DTR.mjs → newsletterForm-PCAIPFMA.mjs} +2 -2
  75. package/dist/client/{productDetail-HH4LP53D.mjs → productDetail-OIGDR4YE.mjs} +5 -5
  76. package/dist/client/{productList-YVHYM2AF.mjs → productList-4MA5S2CX.mjs} +5 -5
  77. package/dist/client/rendering/client.mjs +312 -195
  78. package/dist/client/rendering/islands.mjs +18 -18
  79. package/dist/client/rendering.mjs +312 -195
  80. package/dist/client/{shop-UIFX7XRK.mjs → shop-WXSYV5QO.mjs} +5 -5
  81. package/dist/client/spam-protection.mjs +0 -4
  82. package/dist/preview-next/client/runtime.mjs +5 -5
  83. package/dist/{sdk-runtime-ZENAOYMN.mjs → sdk-runtime-QLOCYKVU.mjs} +6 -6
  84. package/dist/server/components.mjs +188 -61
  85. package/dist/server/config-validation.mjs +313 -33
  86. package/dist/server/config.mjs +313 -33
  87. package/dist/server/data.mjs +315 -35
  88. package/dist/server/index.mjs +10 -11
  89. package/dist/server/next.mjs +198 -72
  90. package/dist/server/page-converter.mjs +315 -35
  91. package/dist/server/prebuild.mjs +1 -1
  92. package/dist/server/rendering/server.mjs +188 -61
  93. package/dist/server/rendering.mjs +188 -61
  94. package/dist/server/routing.mjs +334 -34
  95. package/dist/server/server.mjs +331 -52
  96. package/package.json +1 -1
  97. package/dist/SdkPreviewModeRuntime-MCKMVDTK.mjs +0 -8
@@ -1,15 +1,15 @@
1
1
  "use client";
2
2
  import { LeafletStaticMap } from './chunk-XSV6KW4D.mjs';
3
- import { MagicLinkForm, useWaitlistClaim } from './chunk-BT6AEIKN.mjs';
4
- import { usePolling } from './chunk-5ZEAZ33K.mjs';
3
+ import { MagicLinkForm, useWaitlistClaim } from './chunk-3DTWLTXM.mjs';
4
+ import { usePolling } from './chunk-ZKUO52W3.mjs';
5
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-52I7BGEK.mjs';
7
+ import { createBodyThemePortalRoot, TabBarFragment, logoutPortal, StepIndicator, DiscountCodeDisclosure, TerminalPanel, StateIcon, formatPrice, CrossIcon, ClockIcon, consumeSearchParam, LoggedInAsUser, CheckIcon } from './chunk-7UCLJ5SP.mjs';
8
8
  import { getFieldValidationControlProps, FieldValidationMessage } from './chunk-3DCJ45Z2.mjs';
9
9
  import { ModalShell } from './chunk-DVNUDUVT.mjs';
10
- import { isSpamProtectionEnabled, AltchaWidget, getChallengeUrl } from './chunk-GFSQNTRW.mjs';
10
+ import { isSpamProtectionEnabled, AltchaWidget, getChallengeUrl } from './chunk-SDIYSQAY.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, 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';
12
+ import { buildEventRuntimeFilters, buildEventCalendarListingRender, groupEventsByDate, getOrderedDayNames, formatDateKey, getEventRuntimeFiltersKey, themeButtonClassName, normalizeCsvIds, normalizeOptionalId, normalizeEventBlockKind, normalizeCsvString, EventCompactRow, EmptyState, getContainerClass, getCardOrientation, isToday, MAX_EVENTS_PER_DAY, formatTime, WIZARD_STEPS, getWizardStepsForContext, getStepNumber, resolveCoursePricingState, resolveRuntimeEventPricing, formatEventPrice, formatEventDateParts, DateTimeTile, EventCard, buildCalendarViewport, shiftCalendarAnchorDate, addMonths, getThreeMonthRange, buildTimetableModel, formatDate, toRegistrationEvents, isEventContentType, findPreSelectedEvent, resolveRegistrationTarget, findEventByOccurrenceId, resolveEventRequiresPayment, resolveDiscountContext, formatCoursePriceAmount, formatCoursePriceDisplay, MONTH_NAMES, getEventAvailability, formatEventTeacherLine, CreditCard, Ticket, Star, Sparkles, assertNever11 } from './chunk-VGDBVNOO.mjs';
13
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';
@@ -18,25 +18,6 @@ function StepIndicator2(props) {
18
18
  return /* @__PURE__ */ jsx(StepIndicator, { ...props, classPrefix: "er" });
19
19
  }
20
20
 
21
- // ../blocks/src/system/runtime/nodes/event-registration/wizardSteps.ts
22
- var WIZARD_STEPS = [
23
- "select-event",
24
- "select-tickets",
25
- "enter-details",
26
- "select-payment"
27
- ];
28
- function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep) {
29
- const baseSteps = hasPreSelectedContext ? ["select-tickets", "enter-details"] : ["select-event", "select-tickets", "enter-details"];
30
- if (!needsPaymentStep) {
31
- return baseSteps;
32
- }
33
- return [...baseSteps, "select-payment"];
34
- }
35
- function getStepNumber(step, wizardSteps) {
36
- const index = wizardSteps.indexOf(step);
37
- return index >= 0 ? index + 1 : 1;
38
- }
39
-
40
21
  // ../blocks/src/system/runtime/nodes/event-registration/registrationStateMachine.ts
41
22
  function createInitialRegistrationFlowState(hasPreSelectedContext) {
42
23
  return {
@@ -190,8 +171,10 @@ function requiresPaymentStep(params) {
190
171
  return !isEntitlementSelection(params.paymentSelection);
191
172
  }
192
173
 
193
- // ../blocks/src/system/runtime/nodes/event-registration/event-registration.headless.state.ts
174
+ // ../blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.ts
194
175
  var DEFAULT_EVENT_REGISTRATION_MAX_TICKETS = 5;
176
+
177
+ // ../blocks/src/system/runtime/nodes/event-registration/event-registration.headless.planning.ts
195
178
  function getRegistrableStatuses(isPreview) {
196
179
  return isPreview ? ["active", "draft"] : ["active"];
197
180
  }
@@ -1485,7 +1468,7 @@ var PaymentSelectionStep = ({
1485
1468
  label: "Pay by Card",
1486
1469
  detail: formatPrice(totalPrice, eligibility.currency),
1487
1470
  selected: selectedMethod === "stripe",
1488
- onClick: () => onSelectionChange({ method: "stripe" })
1471
+ onClick: () => onSelectionChange({ method: "stripe", collectionOptionKind: "upfront" })
1489
1472
  }
1490
1473
  ),
1491
1474
  isAuthenticated && eligibility.eligiblePasses.map((pass) => /* @__PURE__ */ jsx(
@@ -2161,6 +2144,7 @@ function useEventRegistrationSubmit(options) {
2161
2144
  checkoutType,
2162
2145
  productId: bundleProductId,
2163
2146
  discountCode: options.discountCode.trim() ? options.discountCode.trim() : void 0,
2147
+ collectionOptionKind: selectionSnapshot.collectionOptionKind,
2164
2148
  successUrl,
2165
2149
  cancelUrl
2166
2150
  });
@@ -2230,89 +2214,6 @@ function useEventRegistrationSubmit(options) {
2230
2214
  };
2231
2215
  }
2232
2216
 
2233
- // ../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts
2234
- function eventMatchesOccurrenceId(event, occurrenceId) {
2235
- return event.registrationOccurrenceId === occurrenceId || event.publicEventId === occurrenceId;
2236
- }
2237
- function findEventByOccurrenceId(events, occurrenceId) {
2238
- return events.find((event) => eventMatchesOccurrenceId(event, occurrenceId)) ?? null;
2239
- }
2240
- function findPreSelectedEvent(input) {
2241
- const occurrenceContext = input.occurrenceContext;
2242
- if (!occurrenceContext) {
2243
- return null;
2244
- }
2245
- const contextDate = getBookingLocalDateKey(toScheduledBookingDateTime({
2246
- startsAt: occurrenceContext.startsAt,
2247
- timeZone: occurrenceContext.timeZone
2248
- }));
2249
- return input.scopedEvents.find(
2250
- (event) => eventMatchesOccurrenceId(event, occurrenceContext.id) || getBookingLocalDateKey(toScheduledBookingDateTime({
2251
- startsAt: event.startsAt,
2252
- timeZone: event.timeZone
2253
- })) === contextDate
2254
- ) ?? null;
2255
- }
2256
- function resolveRegistrationTarget(input) {
2257
- const occurrenceId = input.occurrenceContext?.id ?? input.selectedEvent?.registrationOccurrenceId ?? null;
2258
- if (!occurrenceId) {
2259
- return null;
2260
- }
2261
- return {
2262
- occurrenceId,
2263
- selectedEventId: input.selectedEvent?.publicEventId ?? null
2264
- };
2265
- }
2266
- function resolveEventRequiresPayment(input) {
2267
- if (input.eligibility) {
2268
- return input.eligibility.requiresPayment;
2269
- }
2270
- if (input.selectedTicketType) {
2271
- return input.selectedTicketType.priceAmount > 0;
2272
- }
2273
- if (!input.event) {
2274
- return false;
2275
- }
2276
- return publicEventPricingType(resolveRuntimeEventPricing(input.event)) !== "free";
2277
- }
2278
- function resolveDiscountContext(input) {
2279
- const selection = input.paymentSelection.method ? input.paymentSelection : null;
2280
- if (!input.event) {
2281
- return null;
2282
- }
2283
- if (selection?.method === "pass_bundle" && selection.bundlePassId) {
2284
- return { type: "pass", passId: selection.bundlePassId };
2285
- }
2286
- if (selection?.method === "membership_bundle" && selection.bundleMembershipId) {
2287
- return { type: "membership", membershipId: selection.bundleMembershipId };
2288
- }
2289
- if (!input.eventRequiresPayment) {
2290
- return null;
2291
- }
2292
- if (selection?.method && selection.method !== "stripe") {
2293
- return null;
2294
- }
2295
- return {
2296
- type: "event",
2297
- eventSeriesId: input.event.seriesId,
2298
- eventCategoryId: input.event.eventCategory?.id ?? null,
2299
- ticketsCount: input.ticketsCount
2300
- };
2301
- }
2302
-
2303
- // ../blocks/src/system/runtime/nodes/event-registration/registrationEventAdapter.ts
2304
- function toRegistrationEvent(event) {
2305
- return {
2306
- ...event,
2307
- pricing: resolveRuntimeEventPricing(event),
2308
- publicEventId: event.id,
2309
- registrationOccurrenceId: event.occurrenceId
2310
- };
2311
- }
2312
- function toRegistrationEvents(events) {
2313
- return events.map(toRegistrationEvent);
2314
- }
2315
-
2316
2217
  // ../blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.ts
2317
2218
  function useEventRegistrationWizard(options) {
2318
2219
  const api = useBlockApi();
@@ -2606,23 +2507,29 @@ function useEventRegistrationWizard(options) {
2606
2507
  );
2607
2508
  const handleDetailsComplete = async () => {
2608
2509
  if (ticketTypeSelectionRequired && !hasValidSelectedTicketType) {
2609
- setErrorMessage("Select a ticket type to continue.");
2510
+ const message = "Select a ticket type to continue.";
2511
+ setErrorMessage(message);
2610
2512
  setStep("error");
2611
- return;
2513
+ return { ok: false, reason: "blocked", message };
2612
2514
  }
2613
2515
  if (!validateForm()) {
2614
2516
  setGuestSectionShake(true);
2615
- return;
2517
+ return {
2518
+ ok: false,
2519
+ reason: "validation-failed",
2520
+ message: "Check the highlighted fields and try again."
2521
+ };
2616
2522
  }
2617
2523
  if (waitlistClaim.claim === null && eligibility?.isFull && !eligibility.canJoinWaitlist) {
2618
- setErrorMessage("This event is sold out.");
2524
+ const message = "This event is sold out.";
2525
+ setErrorMessage(message);
2619
2526
  setStep("error");
2620
- return;
2527
+ return { ok: false, reason: "blocked", message };
2621
2528
  }
2622
2529
  const shouldCollectPayment = !eligibility?.canJoinWaitlist && requiresPaymentStep({ eventRequiresPayment, paymentSelection });
2623
2530
  if (shouldCollectPayment) {
2624
2531
  setStep("select-payment");
2625
- return;
2532
+ return { ok: true, outcome: "payment-step" };
2626
2533
  }
2627
2534
  const submitPlan = resolveEventRegistrationSubmitPlan({
2628
2535
  paymentSelection,
@@ -2632,14 +2539,22 @@ function useEventRegistrationWizard(options) {
2632
2539
  if (!submitPlan.ok) {
2633
2540
  setErrorMessage(submitPlan.message);
2634
2541
  setStep("error");
2635
- return;
2542
+ return { ok: false, reason: "blocked", message: submitPlan.message };
2636
2543
  }
2637
- await handleSubmit(
2544
+ const submitResult = await handleSubmit(
2638
2545
  submitPlan.args.method,
2639
2546
  submitPlan.args.passId,
2640
2547
  submitPlan.args.membershipId,
2641
2548
  submitPlan.args.selection
2642
2549
  );
2550
+ if (!submitResult.ok) {
2551
+ return {
2552
+ ok: false,
2553
+ reason: submitResult.reason === "submission-failed" ? "submission-failed" : "blocked",
2554
+ message: submitResult.message
2555
+ };
2556
+ }
2557
+ return { ok: true, outcome: "submitted" };
2643
2558
  };
2644
2559
  const handlePaymentSelect = async () => {
2645
2560
  const submitPlan = resolveEventRegistrationSubmitPlan({
@@ -2808,6 +2723,8 @@ function useEventRegistrationWizard(options) {
2808
2723
  handleRetry
2809
2724
  };
2810
2725
  }
2726
+
2727
+ // ../blocks/src/system/runtime/nodes/event-registration/constants.ts
2811
2728
  var EVENT_REGISTRATION_ANCHOR_ID = "event-registration";
2812
2729
  var EVENT_PORTAL_AUTH_COPY = {
2813
2730
  membership: {
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { useBlockApi, BlockApiError } from './chunk-UDNSI5PY.mjs';
3
- import { themeButtonClassName } from './chunk-HXPWP5EN.mjs';
3
+ import { themeButtonClassName } from './chunk-VGDBVNOO.mjs';
4
4
  import { useState, useSyncExternalStore, useEffect } from 'react';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
6
6
 
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { ChevronLeft, ChevronRight } from './chunk-HXPWP5EN.mjs';
2
+ import { ChevronLeft, ChevronRight } from './chunk-VGDBVNOO.mjs';
3
3
  import { clsx_default } from './chunk-ZE5G642V.mjs';
4
4
  import React, { useRef, useState, useCallback, useEffect } from 'react';
5
5
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
@@ -1,14 +1,14 @@
1
1
  "use client";
2
- import { addPassToCommerceCart, useCommerceCart } from './chunk-Z5OBQ5I4.mjs';
3
- import { CarouselNodeClient } from './chunk-JWEYB4V6.mjs';
2
+ import { addPassToCommerceCart, useCommerceCart } from './chunk-F5VRX5Y6.mjs';
3
+ import { CarouselNodeClient } from './chunk-4OXKTA3D.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-52I7BGEK.mjs';
7
+ import { createBodyThemePortalRoot, consumeSearchParams, scrollToBlock, TerminalPanel, StateIcon, CheckIcon, CrossIcon, ActionRow, DiscountCodeDisclosure, consumeSearchParam, buildCheckoutReturnUrls } from './chunk-7UCLJ5SP.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-HXPWP5EN.mjs';
11
+ import { themeButtonClassName, formatCommercePrice, formatInterval, getShopDisplayForItems, deriveCommerceCheckoutState, buildProductDetailDisplay, productItemKey, buildProductCartItem, buildProductCardDisplay, assertNever11, reportWorkflowError, clearWorkflowFeedback } from './chunk-VGDBVNOO.mjs';
12
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';
@@ -1,5 +1,5 @@
1
1
  import { FeedbackMessage } from './chunk-UDNSI5PY.mjs';
2
- import { themeButtonClassName } from './chunk-HXPWP5EN.mjs';
2
+ import { themeButtonClassName } from './chunk-VGDBVNOO.mjs';
3
3
  import { clsx_default } from './chunk-ZE5G642V.mjs';
4
4
  import { useId } from 'react';
5
5
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,4 +1,4 @@
1
- import { EMPTY_COMMERCE_CART_STATE, parseStoredCommerceCartState, reduceCommerceCart, buildPassCartItem } from './chunk-HXPWP5EN.mjs';
1
+ import { EMPTY_COMMERCE_CART_STATE, parseStoredCommerceCartState, reduceCommerceCart, buildPassCartItem } from './chunk-VGDBVNOO.mjs';
2
2
  import * as React from 'react';
3
3
 
4
4
  var EMPTY_STATE = EMPTY_COMMERCE_CART_STATE;
@@ -71,10 +71,6 @@ function getCmsApiUrl() {
71
71
  if (dashboardUrl) {
72
72
  return `${dashboardUrl.replace(/\/$/, "")}/api`;
73
73
  }
74
- const legacyApiUrl = process.env.NEXT_PUBLIC_CMS_API_URL;
75
- if (legacyApiUrl) {
76
- return legacyApiUrl.replace(/\/$/, "");
77
- }
78
74
  throw new Error("Dashboard URL not configured. Set NEXT_PUBLIC_DASHBOARD_URL");
79
75
  }
80
76
  function getChallengeUrl() {
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { parseAspectRatioValue, parseColorTokenParts, toBookingTimeZone, resolvePlanningDateInput, formatBookingDate, toScheduledBookingDateTime, formatBookingTime, toScheduledBookingDateRange, formatBookingDateParts, publicEventPricingDisplay, ImagePresets, getCurrentResolveImageUrlContext, renderVideo, renderAudio, resolveMediaNodeResponsiveImage, MediaPlaceholder, computeMediaTransformStyle, rgbColorValue } from './chunk-ZE5G642V.mjs';
2
+ import { parseAspectRatioValue, parseColorTokenParts, toBookingTimeZone, resolvePlanningDateInput, formatBookingDate, toScheduledBookingDateTime, formatBookingTime, toScheduledBookingDateRange, formatBookingDateParts, publicEventPricingDisplay, ImagePresets, getBookingLocalDateKey, publicEventPricingType, getCurrentResolveImageUrlContext, renderVideo, renderAudio, resolveMediaNodeResponsiveImage, MediaPlaceholder, computeMediaTransformStyle, rgbColorValue } from './chunk-ZE5G642V.mjs';
3
3
  import z2, { z } from 'zod';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
5
5
  import { createContext, forwardRef, useContext, createElement } from 'react';
@@ -7115,12 +7115,112 @@ var eventCombinedInteractiveIslandPropsCodec = createInteractiveIslandCodec({
7115
7115
  stage: value.stage
7116
7116
  })
7117
7117
  });
7118
+
7119
+ // ../blocks/src/system/runtime/nodes/event-registration/wizardSteps.ts
7120
+ var WIZARD_STEPS = [
7121
+ "select-event",
7122
+ "select-tickets",
7123
+ "enter-details",
7124
+ "select-payment"
7125
+ ];
7126
+ function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep) {
7127
+ const baseSteps = hasPreSelectedContext ? ["select-tickets", "enter-details"] : ["select-event", "select-tickets", "enter-details"];
7128
+ if (!needsPaymentStep) {
7129
+ return baseSteps;
7130
+ }
7131
+ return [...baseSteps, "select-payment"];
7132
+ }
7133
+ function getStepNumber(step, wizardSteps) {
7134
+ const index = wizardSteps.indexOf(step);
7135
+ return index >= 0 ? index + 1 : 1;
7136
+ }
7137
+
7138
+ // ../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts
7139
+ function eventMatchesOccurrenceId(event, occurrenceId) {
7140
+ return event.registrationOccurrenceId === occurrenceId || event.publicEventId === occurrenceId;
7141
+ }
7142
+ function findEventByOccurrenceId(events, occurrenceId) {
7143
+ return events.find((event) => eventMatchesOccurrenceId(event, occurrenceId)) ?? null;
7144
+ }
7145
+ function findPreSelectedEvent(input) {
7146
+ const occurrenceContext = input.occurrenceContext;
7147
+ if (!occurrenceContext) {
7148
+ return null;
7149
+ }
7150
+ const contextDate = getBookingLocalDateKey(toScheduledBookingDateTime({
7151
+ startsAt: occurrenceContext.startsAt,
7152
+ timeZone: occurrenceContext.timeZone
7153
+ }));
7154
+ return input.scopedEvents.find(
7155
+ (event) => eventMatchesOccurrenceId(event, occurrenceContext.id) || getBookingLocalDateKey(toScheduledBookingDateTime({
7156
+ startsAt: event.startsAt,
7157
+ timeZone: event.timeZone
7158
+ })) === contextDate
7159
+ ) ?? null;
7160
+ }
7161
+ function resolveRegistrationTarget(input) {
7162
+ const occurrenceId = input.occurrenceContext?.id ?? input.selectedEvent?.registrationOccurrenceId ?? null;
7163
+ if (!occurrenceId) {
7164
+ return null;
7165
+ }
7166
+ return {
7167
+ occurrenceId,
7168
+ selectedEventId: input.selectedEvent?.publicEventId ?? null
7169
+ };
7170
+ }
7171
+ function resolveEventRequiresPayment(input) {
7172
+ if (input.eligibility) {
7173
+ return input.eligibility.requiresPayment;
7174
+ }
7175
+ if (input.selectedTicketType) {
7176
+ return input.selectedTicketType.priceAmount > 0;
7177
+ }
7178
+ if (!input.event) {
7179
+ return false;
7180
+ }
7181
+ return publicEventPricingType(resolveRuntimeEventPricing(input.event)) !== "free";
7182
+ }
7183
+ function resolveDiscountContext(input) {
7184
+ const selection = input.paymentSelection.method ? input.paymentSelection : null;
7185
+ if (!input.event) {
7186
+ return null;
7187
+ }
7188
+ if (selection?.method === "pass_bundle" && selection.bundlePassId) {
7189
+ return { type: "pass", passId: selection.bundlePassId };
7190
+ }
7191
+ if (selection?.method === "membership_bundle" && selection.bundleMembershipId) {
7192
+ return { type: "membership", membershipId: selection.bundleMembershipId };
7193
+ }
7194
+ if (!input.eventRequiresPayment) {
7195
+ return null;
7196
+ }
7197
+ if (selection?.method && selection.method !== "stripe") {
7198
+ return null;
7199
+ }
7200
+ return {
7201
+ type: "event",
7202
+ eventSeriesId: input.event.seriesId,
7203
+ eventCategoryId: input.event.eventCategory?.id ?? null,
7204
+ ticketsCount: input.ticketsCount
7205
+ };
7206
+ }
7207
+
7208
+ // ../blocks/src/system/runtime/nodes/event-registration/registrationEventAdapter.ts
7209
+ function toRegistrationEvent(event) {
7210
+ return {
7211
+ ...event,
7212
+ pricing: resolveRuntimeEventPricing(event),
7213
+ publicEventId: event.id,
7214
+ registrationOccurrenceId: event.occurrenceId
7215
+ };
7216
+ }
7217
+ function toRegistrationEvents(events) {
7218
+ return events.map(toRegistrationEvent);
7219
+ }
7220
+
7221
+ // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
7118
7222
  var EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = ["Date", "Tickets", "Details"];
7119
- var [
7120
- eventRegistrationGenericDateStepLabel,
7121
- eventRegistrationGenericTicketsStepLabel,
7122
- eventRegistrationGenericDetailsStepLabel
7123
- ] = EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
7223
+ var EVENT_REGISTRATION_SHELL_STEP_LABELS = ["Event", "Date", "Tickets", "Details", "Payment"];
7124
7224
  var contentEntrySchema2 = z.object({
7125
7225
  id: z.string(),
7126
7226
  slug: z.string(),
@@ -7156,11 +7256,7 @@ var eventRegistrationDisplaySchema = z.object({
7156
7256
  className: z.string().nullable(),
7157
7257
  titleText: z.string(),
7158
7258
  bodyText: z.string(),
7159
- stepLabels: z.tuple([
7160
- z.literal(eventRegistrationGenericDateStepLabel),
7161
- z.literal(eventRegistrationGenericTicketsStepLabel),
7162
- z.literal(eventRegistrationGenericDetailsStepLabel)
7163
- ]),
7259
+ stepLabels: z.array(z.enum(EVENT_REGISTRATION_SHELL_STEP_LABELS)).min(1),
7164
7260
  summaryButtonText: z.string()
7165
7261
  });
7166
7262
  var eventRegistrationHydrationSchema = z.object({
@@ -7195,16 +7291,81 @@ var eventRegistrationIslandMetaKeys = defineInteractiveIslandMetaKeys(
7195
7291
  "stage"
7196
7292
  );
7197
7293
  function buildEventRegistrationDisplay(source) {
7294
+ const stepLabels = buildEventRegistrationShellStepLabels(source);
7198
7295
  return {
7199
7296
  kind: "event-registration",
7200
7297
  state: "generic-shell",
7201
7298
  className: source.className ?? null,
7202
7299
  titleText: "Event registration",
7203
- bodyText: "Preparing dates, tickets, and booking details.",
7204
- stepLabels: EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS,
7300
+ bodyText: buildEventRegistrationShellBodyText(stepLabels),
7301
+ stepLabels,
7205
7302
  summaryButtonText: source.buttonText?.trim() || "Register"
7206
7303
  };
7207
7304
  }
7305
+ function buildEventRegistrationShellStepLabels(source) {
7306
+ const scopedEvents = scopeEventRegistrationEvents(source);
7307
+ if (scopedEvents.length === 0) {
7308
+ return EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
7309
+ }
7310
+ const preSelectedEvent = findPreSelectedEvent({
7311
+ scopedEvents,
7312
+ occurrenceContext: source.occurrenceContext
7313
+ });
7314
+ const hasPreSelectedContext = Boolean(source.occurrenceContext || preSelectedEvent);
7315
+ const needsPaymentStep = hasPreSelectedContext && preSelectedEvent ? resolveEventRequiresPayment({
7316
+ eligibility: null,
7317
+ selectedTicketType: null,
7318
+ event: preSelectedEvent
7319
+ }) : false;
7320
+ return getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep).map((step) => shellLabelForRegistrationStep(step, scopedEvents));
7321
+ }
7322
+ function scopeEventRegistrationEvents(source) {
7323
+ const events = toRegistrationEvents(source.events ?? []);
7324
+ if (source.occurrenceContext?.seriesId) {
7325
+ return events.filter((event) => event.seriesId === source.occurrenceContext?.seriesId);
7326
+ }
7327
+ const entrySlug = source.contentEntry?.slug;
7328
+ const entryContentType = source.contentEntry?.contentTypeSlug;
7329
+ if (entrySlug && entryContentType && isEventContentType(entryContentType)) {
7330
+ return events.filter((event) => event.slug === entrySlug);
7331
+ }
7332
+ return events;
7333
+ }
7334
+ function shellLabelForRegistrationStep(step, events) {
7335
+ switch (step) {
7336
+ case "select-event":
7337
+ return isDateSelection(events) ? "Date" : "Event";
7338
+ case "select-tickets":
7339
+ return "Tickets";
7340
+ case "enter-details":
7341
+ return "Details";
7342
+ case "select-payment":
7343
+ return "Payment";
7344
+ case "error":
7345
+ case "success":
7346
+ case "submitting":
7347
+ case "redirecting":
7348
+ case "verifying-payment":
7349
+ case "verifying-timeout":
7350
+ case "payment-failed":
7351
+ return "Details";
7352
+ }
7353
+ }
7354
+ function isDateSelection(events) {
7355
+ const firstSeriesId = events[0]?.seriesId;
7356
+ return Boolean(
7357
+ events.length > 1 && firstSeriesId && events.every((event) => event.seriesId === firstSeriesId)
7358
+ );
7359
+ }
7360
+ function buildEventRegistrationShellBodyText(stepLabels) {
7361
+ if (stepLabels.includes("Payment")) {
7362
+ return "Preparing tickets, details, and payment options.";
7363
+ }
7364
+ if (stepLabels[0] === "Tickets") {
7365
+ return "Preparing tickets and booking details.";
7366
+ }
7367
+ return "Preparing dates, tickets, and booking details.";
7368
+ }
7208
7369
  var eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
7209
7370
  kind: "client-owned",
7210
7371
  contracts: {
@@ -8597,4 +8758,4 @@ lucide-react/dist/esm/lucide-react.mjs:
8597
8758
  *)
8598
8759
  */
8599
8760
 
8600
- export { BOOKING_FORM_DATA_RESERVED_KEYS, ChevronLeft, ChevronRight, CreditCard, DateTimeTile, EMPTY_COMMERCE_CART_STATE, EmptyState, EventCard, EventCompactRow, MAX_EVENTS_PER_DAY, MONTH_NAMES, Sparkles, Star, Ticket, addMonths, assertNever11, buildCalendarViewport, buildCartDisplay, buildEventCalendarListingRender, buildEventRuntimeFilters, buildPassCartItem, buildProductCardDisplay, buildProductCartItem, buildProductDetailDisplay, buildTimetableModel, clearWorkflowFeedback, defineIslandPropsDecoder, deriveBookingFormViewState, deriveCommerceCheckoutState, err2, formatBookingSubmissionPreparationError, formatCommercePrice, formatCoursePriceAmount, formatCoursePriceDisplay, formatDate, formatDateKey, formatEventDateParts, formatEventPrice, formatEventTeacherLine, formatInterval, formatTime, getBookingRedirectStateFromLocation, getBookingSuccessMessage, getCardOrientation, getContainerClass, getEventAvailability, getEventRuntimeFiltersKey, getOrderedDayNames, getShopDisplayForItems, getThreeMonthRange, groupEventsByDate, isEventContentType, isToday, logger, normalizeCsvIds, normalizeCsvString, normalizeEventBlockKind, normalizeOptionalId, ok, okWith2, parseStoredCommerceCartState, prepareBookingSubmission, productItemKey, reduceCommerceCart, reportWorkflowError, reportWorkflowSuccess, resolveAppointmentCheckoutVerificationState, resolveBookingPaymentStep, resolveBookingSiteId, resolveCoursePricingState, resolveDefaultBookingServiceId, resolveRuntimeEventPricing, shiftCalendarAnchorDate, themeButtonClassName, toSelectedCollectionOptionKind };
8761
+ export { BOOKING_FORM_DATA_RESERVED_KEYS, ChevronLeft, ChevronRight, CreditCard, DateTimeTile, EMPTY_COMMERCE_CART_STATE, EmptyState, EventCard, EventCompactRow, MAX_EVENTS_PER_DAY, MONTH_NAMES, Sparkles, Star, Ticket, WIZARD_STEPS, addMonths, assertNever11, buildCalendarViewport, buildCartDisplay, buildEventCalendarListingRender, buildEventRuntimeFilters, buildPassCartItem, buildProductCardDisplay, buildProductCartItem, buildProductDetailDisplay, buildTimetableModel, clearWorkflowFeedback, defineIslandPropsDecoder, deriveBookingFormViewState, deriveCommerceCheckoutState, err2, findEventByOccurrenceId, findPreSelectedEvent, formatBookingSubmissionPreparationError, formatCommercePrice, formatCoursePriceAmount, formatCoursePriceDisplay, formatDate, formatDateKey, formatEventDateParts, formatEventPrice, formatEventTeacherLine, formatInterval, formatTime, getBookingRedirectStateFromLocation, getBookingSuccessMessage, getCardOrientation, getContainerClass, getEventAvailability, getEventRuntimeFiltersKey, getOrderedDayNames, getShopDisplayForItems, getStepNumber, getThreeMonthRange, getWizardStepsForContext, groupEventsByDate, isEventContentType, isToday, logger, normalizeCsvIds, normalizeCsvString, normalizeEventBlockKind, normalizeOptionalId, ok, okWith2, parseStoredCommerceCartState, prepareBookingSubmission, productItemKey, reduceCommerceCart, reportWorkflowError, reportWorkflowSuccess, resolveAppointmentCheckoutVerificationState, resolveBookingPaymentStep, resolveBookingSiteId, resolveCoursePricingState, resolveDefaultBookingServiceId, resolveDiscountContext, resolveEventRequiresPayment, resolveRegistrationTarget, resolveRuntimeEventPricing, shiftCalendarAnchorDate, themeButtonClassName, toRegistrationEvents, toSelectedCollectionOptionKind };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { assertNever11 } from './chunk-HXPWP5EN.mjs';
2
+ import { assertNever11 } from './chunk-VGDBVNOO.mjs';
3
3
  import { useReducer, useRef, useCallback, useEffect } from 'react';
4
4
 
5
5
  // ../blocks/src/system/runtime/hooks/usePolling.state.ts