@riverbankcms/sdk 0.84.0 → 0.84.1

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 (78) hide show
  1. package/dist/{PreviewEditorSidebar-HML67UDA.mjs → PreviewEditorSidebar-X7RLMEI6.mjs} +2 -2
  2. package/dist/{PreviewEditorUI-I4BQUU6K.mjs → PreviewEditorUI-CT67N4O3.mjs} +2 -2
  3. package/dist/SdkPreviewModeRuntime-EIMQ3S2V.mjs +8 -0
  4. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +4 -4
  5. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +6 -6
  6. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +3 -3
  7. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizard.d.ts +0 -2
  8. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/constants.d.ts +1 -0
  9. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +275 -0
  10. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.override.d.ts +10 -0
  11. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.planning.d.ts +22 -0
  12. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.state.d.ts +3 -303
  13. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +9 -1
  14. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +8 -6
  15. package/dist/_dts/editor-blocks/src/BlockForm.d.ts +6 -4
  16. package/dist/_dts/sdk/src/version.d.ts +1 -1
  17. package/dist/{chunk-MSHZO4SL.mjs → chunk-O62NDCTI.mjs} +268 -186
  18. package/dist/{chunk-HFMGVJCE.mjs → chunk-QRKJDWT7.mjs} +5 -5
  19. package/dist/{chunk-6X2OVO3S.mjs → chunk-RCTJAZSK.mjs} +1 -1
  20. package/dist/{chunk-5E33VO6J.mjs → chunk-X5ZCSU6F.mjs} +1 -1
  21. package/dist/cli/index.mjs +323 -35
  22. package/dist/cli/init-docs/content/agents-section.md +5 -0
  23. package/dist/cli/init-docs/content/cli-reference.md +13 -0
  24. package/dist/cli/init-docs/content/content-management.md +31 -0
  25. package/dist/cli/init-docs/content/getting-started.md +12 -0
  26. package/dist/cli/init-docs/content/workflow-add-block.md +3 -1
  27. package/dist/cli/init-docs/content/workflow-agent-safe-sync.md +81 -0
  28. package/dist/cli/init-docs/content/workflow-create-page.md +13 -3
  29. package/dist/cli/init-docs/content/workflow-custom-block.md +9 -0
  30. package/dist/cli/init-docs/content/workflow-templates.md +14 -0
  31. package/dist/client/{accordion-ESY65T56.mjs → accordion-2UZPBMYM.mjs} +1 -1
  32. package/dist/client/{bookingForm-JRFNZUHD.mjs → bookingForm-DYXT6YB6.mjs} +3 -3
  33. package/dist/client/bookings.mjs +155 -134
  34. package/dist/client/{carousel-CPR5VWIP.mjs → carousel-QH77HR6X.mjs} +2 -2
  35. package/dist/client/{cart-ZUX5BA7O.mjs → cart-X4YK4FTW.mjs} +5 -5
  36. package/dist/client/{checkout-RULGBADZ.mjs → checkout-OM2BEPWD.mjs} +5 -5
  37. package/dist/client/{chunk-BT6AEIKN.mjs → chunk-3DTWLTXM.mjs} +1 -1
  38. package/dist/client/{chunk-JWEYB4V6.mjs → chunk-4OXKTA3D.mjs} +1 -1
  39. package/dist/client/{chunk-URQCZD5W.mjs → chunk-52CGCQ7B.mjs} +4 -4
  40. package/dist/client/{chunk-52I7BGEK.mjs → chunk-7UCLJ5SP.mjs} +1 -1
  41. package/dist/client/{chunk-Z5OBQ5I4.mjs → chunk-F5VRX5Y6.mjs} +1 -1
  42. package/dist/client/{chunk-RDJFCPY3.mjs → chunk-UHDWIXVR.mjs} +31 -115
  43. package/dist/client/{chunk-HXPWP5EN.mjs → chunk-VGDBVNOO.mjs} +175 -14
  44. package/dist/client/{chunk-5ZEAZ33K.mjs → chunk-ZKUO52W3.mjs} +1 -1
  45. package/dist/client/client.mjs +337 -217
  46. package/dist/client/{courseRegistration-QTUDC35T.mjs → courseRegistration-YBOGURTA.mjs} +3 -3
  47. package/dist/client/{eventCalendar-Q7NS4XLD.mjs → eventCalendar-K4QJVCMD.mjs} +5 -5
  48. package/dist/client/{eventCombined-QAO7VUO5.mjs → eventCombined-MTXGMTCZ.mjs} +5 -5
  49. package/dist/client/{eventDetails-WTNNU6Q3.mjs → eventDetails-3PC4NL3U.mjs} +5 -5
  50. package/dist/client/{eventListing-5TA2ELDT.mjs → eventListing-TFJET6DN.mjs} +5 -5
  51. package/dist/client/{eventRegistration-M6USZGRF.mjs → eventRegistration-QGPBGJTW.mjs} +5 -5
  52. package/dist/client/{form-DGVGXLMH.mjs → form-MDKR4FNB.mjs} +1 -1
  53. package/dist/client/{headerSection-O2AGMPCU.mjs → headerSection-Y5TMR3TW.mjs} +2 -2
  54. package/dist/client/hooks.mjs +315 -35
  55. package/dist/client/{locationMap-EJRNRIKJ.mjs → locationMap-RH2LG7FZ.mjs} +1 -1
  56. package/dist/client/{newsletterForm-7NTC2DTR.mjs → newsletterForm-ZR5UDGBT.mjs} +1 -1
  57. package/dist/client/{productDetail-HH4LP53D.mjs → productDetail-OIGDR4YE.mjs} +5 -5
  58. package/dist/client/{productList-YVHYM2AF.mjs → productList-4MA5S2CX.mjs} +5 -5
  59. package/dist/client/rendering/client.mjs +310 -190
  60. package/dist/client/rendering/islands.mjs +18 -18
  61. package/dist/client/rendering.mjs +310 -190
  62. package/dist/client/{shop-UIFX7XRK.mjs → shop-WXSYV5QO.mjs} +5 -5
  63. package/dist/preview-next/client/runtime.mjs +3 -3
  64. package/dist/{sdk-runtime-ZENAOYMN.mjs → sdk-runtime-7HJYPRWQ.mjs} +4 -4
  65. package/dist/server/components.mjs +188 -61
  66. package/dist/server/config-validation.mjs +313 -33
  67. package/dist/server/config.mjs +313 -33
  68. package/dist/server/data.mjs +315 -35
  69. package/dist/server/index.mjs +1 -1
  70. package/dist/server/next.mjs +189 -62
  71. package/dist/server/page-converter.mjs +315 -35
  72. package/dist/server/prebuild.mjs +1 -1
  73. package/dist/server/rendering/server.mjs +188 -61
  74. package/dist/server/rendering.mjs +188 -61
  75. package/dist/server/routing.mjs +334 -34
  76. package/dist/server/server.mjs +322 -42
  77. package/package.json +1 -1
  78. package/dist/SdkPreviewModeRuntime-MCKMVDTK.mjs +0 -8
@@ -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;
@@ -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
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, 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
  }
@@ -2230,89 +2213,6 @@ function useEventRegistrationSubmit(options) {
2230
2213
  };
2231
2214
  }
2232
2215
 
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
2216
  // ../blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.ts
2317
2217
  function useEventRegistrationWizard(options) {
2318
2218
  const api = useBlockApi();
@@ -2606,23 +2506,29 @@ function useEventRegistrationWizard(options) {
2606
2506
  );
2607
2507
  const handleDetailsComplete = async () => {
2608
2508
  if (ticketTypeSelectionRequired && !hasValidSelectedTicketType) {
2609
- setErrorMessage("Select a ticket type to continue.");
2509
+ const message = "Select a ticket type to continue.";
2510
+ setErrorMessage(message);
2610
2511
  setStep("error");
2611
- return;
2512
+ return { ok: false, reason: "blocked", message };
2612
2513
  }
2613
2514
  if (!validateForm()) {
2614
2515
  setGuestSectionShake(true);
2615
- return;
2516
+ return {
2517
+ ok: false,
2518
+ reason: "validation-failed",
2519
+ message: "Check the highlighted fields and try again."
2520
+ };
2616
2521
  }
2617
2522
  if (waitlistClaim.claim === null && eligibility?.isFull && !eligibility.canJoinWaitlist) {
2618
- setErrorMessage("This event is sold out.");
2523
+ const message = "This event is sold out.";
2524
+ setErrorMessage(message);
2619
2525
  setStep("error");
2620
- return;
2526
+ return { ok: false, reason: "blocked", message };
2621
2527
  }
2622
2528
  const shouldCollectPayment = !eligibility?.canJoinWaitlist && requiresPaymentStep({ eventRequiresPayment, paymentSelection });
2623
2529
  if (shouldCollectPayment) {
2624
2530
  setStep("select-payment");
2625
- return;
2531
+ return { ok: true, outcome: "payment-step" };
2626
2532
  }
2627
2533
  const submitPlan = resolveEventRegistrationSubmitPlan({
2628
2534
  paymentSelection,
@@ -2632,14 +2538,22 @@ function useEventRegistrationWizard(options) {
2632
2538
  if (!submitPlan.ok) {
2633
2539
  setErrorMessage(submitPlan.message);
2634
2540
  setStep("error");
2635
- return;
2541
+ return { ok: false, reason: "blocked", message: submitPlan.message };
2636
2542
  }
2637
- await handleSubmit(
2543
+ const submitResult = await handleSubmit(
2638
2544
  submitPlan.args.method,
2639
2545
  submitPlan.args.passId,
2640
2546
  submitPlan.args.membershipId,
2641
2547
  submitPlan.args.selection
2642
2548
  );
2549
+ if (!submitResult.ok) {
2550
+ return {
2551
+ ok: false,
2552
+ reason: submitResult.reason === "submission-failed" ? "submission-failed" : "blocked",
2553
+ message: submitResult.message
2554
+ };
2555
+ }
2556
+ return { ok: true, outcome: "submitted" };
2643
2557
  };
2644
2558
  const handlePaymentSelect = async () => {
2645
2559
  const submitPlan = resolveEventRegistrationSubmitPlan({
@@ -2808,6 +2722,8 @@ function useEventRegistrationWizard(options) {
2808
2722
  handleRetry
2809
2723
  };
2810
2724
  }
2725
+
2726
+ // ../blocks/src/system/runtime/nodes/event-registration/constants.ts
2811
2727
  var EVENT_REGISTRATION_ANCHOR_ID = "event-registration";
2812
2728
  var EVENT_PORTAL_AUTH_COPY = {
2813
2729
  membership: {
@@ -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