@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
@@ -6443,17 +6443,21 @@ function looksLikeLocalAuthority(authority) {
6443
6443
  const normalized = authority.toLowerCase();
6444
6444
  return normalized === "localhost" || normalized.startsWith("localhost:") || normalized.startsWith("127.") || normalized.startsWith("0.0.0.0") || normalized.includes(".localhost") || normalized.endsWith(".local") || normalized.endsWith(".test");
6445
6445
  }
6446
- function normalizeDashboardUrlBase(input) {
6446
+ function normalizeDashboardOrigin(input) {
6447
6447
  const trimmed = input.trim();
6448
6448
  if (!trimmed) return "";
6449
6449
  const withoutTrailingSlash = trimmed.replace(/\/+$/, "");
6450
6450
  const withoutApiSuffix = withoutTrailingSlash.replace(/\/api\/?$/, "");
6451
6451
  if (/^https?:\/\//i.test(withoutApiSuffix)) {
6452
- return withoutApiSuffix;
6452
+ return new URL(withoutApiSuffix).origin;
6453
6453
  }
6454
6454
  const authority = withoutApiSuffix.replace(/^\/+/, "");
6455
6455
  const protocol = looksLikeLocalAuthority(authority) ? "http" : "https";
6456
- return `${protocol}://${authority}`;
6456
+ return new URL(`${protocol}://${authority}`).origin;
6457
+ }
6458
+ function deriveCmsApiUrlFromDashboardUrl(input) {
6459
+ const origin = normalizeDashboardOrigin(input);
6460
+ return origin ? `${origin}/api` : "";
6457
6461
  }
6458
6462
  function getCmsApiUrl() {
6459
6463
  if (typeof window !== "undefined") {
@@ -6465,15 +6469,10 @@ function getCmsApiUrl() {
6465
6469
  }
6466
6470
  const dashboardUrl = process.env.NEXT_PUBLIC_DASHBOARD_URL;
6467
6471
  if (dashboardUrl) {
6468
- const base = normalizeDashboardUrlBase(dashboardUrl);
6469
- return `${base}/api`;
6470
- }
6471
- const legacyApiUrl = process.env.NEXT_PUBLIC_CMS_API_URL;
6472
- if (legacyApiUrl) {
6473
- return legacyApiUrl.replace(/\/$/, "");
6472
+ return deriveCmsApiUrlFromDashboardUrl(dashboardUrl);
6474
6473
  }
6475
6474
  throw new Error(
6476
- "NEXT_PUBLIC_DASHBOARD_URL is not configured. Set it to your dashboard URL (e.g., http://localhost:4000)"
6475
+ "CMS_API_URL or NEXT_PUBLIC_DASHBOARD_URL is not configured. Set NEXT_PUBLIC_DASHBOARD_URL to your dashboard URL (e.g., http://localhost:4000)"
6477
6476
  );
6478
6477
  }
6479
6478
  function resolveApiBaseUrl() {
@@ -6999,7 +6998,7 @@ var SimpleCache = class {
6999
6998
  };
7000
6999
 
7001
7000
  // src/version.ts
7002
- var SDK_VERSION = "0.84.0";
7001
+ var SDK_VERSION = "0.84.2";
7003
7002
 
7004
7003
  // src/client/error.ts
7005
7004
  var RiverbankApiError = class _RiverbankApiError extends Error {
@@ -8475,6 +8474,171 @@ function createRiverbankClient(config) {
8475
8474
  };
8476
8475
  }
8477
8476
 
8477
+ // ../core/src/result.ts
8478
+ function ok(value) {
8479
+ return { ok: true, value };
8480
+ }
8481
+ function err(error) {
8482
+ return { ok: false, error };
8483
+ }
8484
+
8485
+ // ../core/src/event-pricing.ts
8486
+ function publicEventPricingType(pricing) {
8487
+ switch (pricing.kind) {
8488
+ case "drop_in":
8489
+ case "free_registration":
8490
+ return "free";
8491
+ case "single_paid":
8492
+ case "ticket_types":
8493
+ case "course":
8494
+ return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
8495
+ }
8496
+ }
8497
+ function isFreePublicEventPriceDisplay(display) {
8498
+ switch (display.kind) {
8499
+ case "free":
8500
+ return true;
8501
+ case "course":
8502
+ return display.display.kind === "free";
8503
+ case "exact":
8504
+ case "from":
8505
+ case "mixed":
8506
+ case "unavailable":
8507
+ return false;
8508
+ }
8509
+ }
8510
+
8511
+ // ../core/src/booking-date-time.ts
8512
+ var DEFAULT_LOCALE = "en-US";
8513
+ var FALLBACK_TIMEZONE = "UTC";
8514
+ function isValidTimeZone(timeZone) {
8515
+ try {
8516
+ new Intl.DateTimeFormat(DEFAULT_LOCALE, { timeZone }).format(/* @__PURE__ */ new Date());
8517
+ return true;
8518
+ } catch {
8519
+ return false;
8520
+ }
8521
+ }
8522
+ function getSafeTimeZone(timeZone) {
8523
+ const normalized = typeof timeZone === "string" ? timeZone.trim() : "";
8524
+ return normalized && isValidTimeZone(normalized) ? normalized : FALLBACK_TIMEZONE;
8525
+ }
8526
+ function parseStrictBookingTimeZone(timeZone) {
8527
+ const normalized = timeZone.trim();
8528
+ if (!normalized || !isValidTimeZone(normalized)) {
8529
+ return null;
8530
+ }
8531
+ return normalized;
8532
+ }
8533
+ function formatParseError(error) {
8534
+ switch (error.reason) {
8535
+ case "invalid_starts_at":
8536
+ return `Expected a valid UTC/offset-aware ISO datetime in startsAt, received "${error.value}"`;
8537
+ case "invalid_ends_at":
8538
+ return `Expected a valid UTC/offset-aware ISO datetime in endsAt, received "${error.value ?? ""}"`;
8539
+ case "invalid_time_zone":
8540
+ return `Expected a valid IANA timezone in timeZone, received "${error.value}"`;
8541
+ }
8542
+ }
8543
+ function formatToPartsLookup(date, locale, timeZone, format) {
8544
+ return new Map(
8545
+ new Intl.DateTimeFormat(locale, {
8546
+ ...format,
8547
+ timeZone
8548
+ }).formatToParts(date).map((part) => [part.type, part.value])
8549
+ );
8550
+ }
8551
+ function getZonedDateTimeParts(date, timeZone) {
8552
+ const parts = formatToPartsLookup(date, "en-GB", timeZone, {
8553
+ year: "numeric",
8554
+ month: "2-digit",
8555
+ day: "2-digit",
8556
+ hour: "2-digit",
8557
+ minute: "2-digit",
8558
+ second: "2-digit",
8559
+ hour12: false
8560
+ });
8561
+ const read = (type) => Number(parts.get(type) ?? "");
8562
+ return {
8563
+ year: read("year"),
8564
+ month: read("month"),
8565
+ day: read("day"),
8566
+ hour: read("hour"),
8567
+ minute: read("minute"),
8568
+ second: read("second")
8569
+ };
8570
+ }
8571
+ function formatDateKey(date) {
8572
+ const year = String(date.year).padStart(4, "0");
8573
+ const month = String(date.month).padStart(2, "0");
8574
+ const day = String(date.day).padStart(2, "0");
8575
+ return `${year}-${month}-${day}`;
8576
+ }
8577
+ function parseUtcIsoDateTimeString(value) {
8578
+ const normalized = value.trim();
8579
+ const hasUtcSuffix = normalized.endsWith("Z");
8580
+ const hasExplicitOffset = /[+-]\d{2}:\d{2}$/u.test(normalized);
8581
+ if (!hasUtcSuffix && !hasExplicitOffset) {
8582
+ return err("missing-timezone-offset");
8583
+ }
8584
+ const date = new Date(normalized);
8585
+ if (Number.isNaN(date.getTime())) {
8586
+ return err("invalid-date-time");
8587
+ }
8588
+ return ok(date.toISOString());
8589
+ }
8590
+ function toUtcIsoDateTimeString(value) {
8591
+ const parsed = parseUtcIsoDateTimeString(value);
8592
+ if (!parsed.ok) {
8593
+ const message = parsed.error === "missing-timezone-offset" ? `Expected an offset-aware ISO datetime, received "${value}"` : `Expected a valid ISO datetime, received "${value}"`;
8594
+ throw new Error(message);
8595
+ }
8596
+ return parsed.value;
8597
+ }
8598
+ function parseScheduledBookingDateTime(input) {
8599
+ try {
8600
+ const startsAt = toUtcIsoDateTimeString(input.startsAt);
8601
+ const timeZone = parseStrictBookingTimeZone(input.timeZone);
8602
+ if (!timeZone) {
8603
+ return {
8604
+ ok: false,
8605
+ field: "timeZone",
8606
+ reason: "invalid_time_zone",
8607
+ value: input.timeZone
8608
+ };
8609
+ }
8610
+ return {
8611
+ ok: true,
8612
+ value: {
8613
+ startsAt,
8614
+ timeZone,
8615
+ locale: input.locale
8616
+ }
8617
+ };
8618
+ } catch {
8619
+ return {
8620
+ ok: false,
8621
+ field: "startsAt",
8622
+ reason: "invalid_starts_at",
8623
+ value: input.startsAt
8624
+ };
8625
+ }
8626
+ }
8627
+ function toScheduledBookingDateTime(input) {
8628
+ const result = parseScheduledBookingDateTime(input);
8629
+ if (result.ok) {
8630
+ return result.value;
8631
+ }
8632
+ throw new Error(formatParseError(result));
8633
+ }
8634
+ function getBookingLocalDateKey(input) {
8635
+ return formatDateKey(getLocalScheduleDate(new Date(input.startsAt), input.timeZone));
8636
+ }
8637
+ function getLocalScheduleDate(date, timeZone) {
8638
+ const parts = getZonedDateTimeParts(date, getSafeTimeZone(timeZone));
8639
+ return { year: parts.year, month: parts.month, day: parts.day };
8640
+ }
8641
+
8478
8642
  // ../core/src/location.ts
8479
8643
  function normalizeLocationAddressText(value) {
8480
8644
  if (typeof value !== "string") {
@@ -11328,9 +11492,9 @@ var _Vibrant = class _Vibrant2 {
11328
11492
  }
11329
11493
  image.remove();
11330
11494
  return res;
11331
- } catch (err2) {
11495
+ } catch (err3) {
11332
11496
  image.remove();
11333
- return Promise.reject(err2);
11497
+ return Promise.reject(err3);
11334
11498
  }
11335
11499
  }
11336
11500
  async getPalettes() {
@@ -11344,9 +11508,9 @@ var _Vibrant = class _Vibrant2 {
11344
11508
  const res = result1.palettes;
11345
11509
  image.remove();
11346
11510
  return res;
11347
- } catch (err2) {
11511
+ } catch (err3) {
11348
11512
  image.remove();
11349
- return Promise.reject(err2);
11513
+ return Promise.reject(err3);
11350
11514
  }
11351
11515
  }
11352
11516
  };
@@ -30235,6 +30399,26 @@ var occurrenceContextSchema = z43.object({
30235
30399
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
30236
30400
  import { z as z45 } from "zod";
30237
30401
 
30402
+ // ../blocks/src/system/constants/events.ts
30403
+ var EVENT_CONTENT_TYPE_SLUGS = ["event", "events"];
30404
+ var eventCalendarDisplayModeValues = ["combined", "month", "week", "list", "timetable"];
30405
+ var eventCalendarListLayoutValues = ["stack", "grid", "compact"];
30406
+ var eventCalendarListLayoutOptions = [
30407
+ { id: "stack", label: "Stack" },
30408
+ { id: "grid", label: "Grid" },
30409
+ { id: "compact", label: "Compact" }
30410
+ ];
30411
+ function isEventCalendarDisplayMode(value) {
30412
+ return typeof value === "string" && eventCalendarDisplayModeValues.includes(value);
30413
+ }
30414
+ function isEventCalendarListLayout(value) {
30415
+ return typeof value === "string" && eventCalendarListLayoutValues.includes(value);
30416
+ }
30417
+ function isEventContentType(slug) {
30418
+ if (!slug) return false;
30419
+ return EVENT_CONTENT_TYPE_SLUGS.includes(slug);
30420
+ }
30421
+
30238
30422
  // ../blocks/src/system/runtime/nodes/events/shared/pricing.ts
30239
30423
  var DEFAULT_EVENT_CURRENCY = "USD";
30240
30424
  function resolveRuntimeEventPricing(event) {
@@ -30357,23 +30541,6 @@ function readAmount(value) {
30357
30541
 
30358
30542
  // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
30359
30543
  import { z as z44 } from "zod";
30360
-
30361
- // ../blocks/src/system/constants/events.ts
30362
- var eventCalendarDisplayModeValues = ["combined", "month", "week", "list", "timetable"];
30363
- var eventCalendarListLayoutValues = ["stack", "grid", "compact"];
30364
- var eventCalendarListLayoutOptions = [
30365
- { id: "stack", label: "Stack" },
30366
- { id: "grid", label: "Grid" },
30367
- { id: "compact", label: "Compact" }
30368
- ];
30369
- function isEventCalendarDisplayMode(value) {
30370
- return typeof value === "string" && eventCalendarDisplayModeValues.includes(value);
30371
- }
30372
- function isEventCalendarListLayout(value) {
30373
- return typeof value === "string" && eventCalendarListLayoutValues.includes(value);
30374
- }
30375
-
30376
- // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
30377
30544
  var previewStageSchema = z44.enum(["preview", "published"]);
30378
30545
  var registrationButtonVariantSchema = z44.enum(["primary", "secondary", "outline"]);
30379
30546
  var eventButtonVariantSchema = z44.enum(["primary", "secondary", "outline", "link"]);
@@ -30384,13 +30551,64 @@ var weekStartSchema = z44.enum(["sunday", "monday"]);
30384
30551
  var filterAutoShowSchema = z44.enum(["auto", "always", "never"]);
30385
30552
  var calendarTabViewsSchema = z44.enum(["both", "month", "week"]);
30386
30553
 
30554
+ // ../blocks/src/system/runtime/nodes/event-registration/wizardSteps.ts
30555
+ function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep) {
30556
+ const baseSteps = hasPreSelectedContext ? ["select-tickets", "enter-details"] : ["select-event", "select-tickets", "enter-details"];
30557
+ if (!needsPaymentStep) {
30558
+ return baseSteps;
30559
+ }
30560
+ return [...baseSteps, "select-payment"];
30561
+ }
30562
+
30563
+ // ../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts
30564
+ function eventMatchesOccurrenceId(event, occurrenceId) {
30565
+ return event.registrationOccurrenceId === occurrenceId || event.publicEventId === occurrenceId;
30566
+ }
30567
+ function findPreSelectedEvent(input) {
30568
+ const occurrenceContext = input.occurrenceContext;
30569
+ if (!occurrenceContext) {
30570
+ return null;
30571
+ }
30572
+ const contextDate = getBookingLocalDateKey(toScheduledBookingDateTime({
30573
+ startsAt: occurrenceContext.startsAt,
30574
+ timeZone: occurrenceContext.timeZone
30575
+ }));
30576
+ return input.scopedEvents.find(
30577
+ (event) => eventMatchesOccurrenceId(event, occurrenceContext.id) || getBookingLocalDateKey(toScheduledBookingDateTime({
30578
+ startsAt: event.startsAt,
30579
+ timeZone: event.timeZone
30580
+ })) === contextDate
30581
+ ) ?? null;
30582
+ }
30583
+ function resolveEventRequiresPayment(input) {
30584
+ if (input.eligibility) {
30585
+ return input.eligibility.requiresPayment;
30586
+ }
30587
+ if (input.selectedTicketType) {
30588
+ return input.selectedTicketType.priceAmount > 0;
30589
+ }
30590
+ if (!input.event) {
30591
+ return false;
30592
+ }
30593
+ return publicEventPricingType(resolveRuntimeEventPricing(input.event)) !== "free";
30594
+ }
30595
+
30596
+ // ../blocks/src/system/runtime/nodes/event-registration/registrationEventAdapter.ts
30597
+ function toRegistrationEvent(event) {
30598
+ return {
30599
+ ...event,
30600
+ pricing: resolveRuntimeEventPricing(event),
30601
+ publicEventId: event.id,
30602
+ registrationOccurrenceId: event.occurrenceId
30603
+ };
30604
+ }
30605
+ function toRegistrationEvents(events) {
30606
+ return events.map(toRegistrationEvent);
30607
+ }
30608
+
30387
30609
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
30388
30610
  var EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = ["Date", "Tickets", "Details"];
30389
- var [
30390
- eventRegistrationGenericDateStepLabel,
30391
- eventRegistrationGenericTicketsStepLabel,
30392
- eventRegistrationGenericDetailsStepLabel
30393
- ] = EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
30611
+ var EVENT_REGISTRATION_SHELL_STEP_LABELS = ["Event", "Date", "Tickets", "Details", "Payment"];
30394
30612
  var contentEntrySchema = z45.object({
30395
30613
  id: z45.string(),
30396
30614
  slug: z45.string(),
@@ -30426,11 +30644,7 @@ var eventRegistrationDisplaySchema = z45.object({
30426
30644
  className: z45.string().nullable(),
30427
30645
  titleText: z45.string(),
30428
30646
  bodyText: z45.string(),
30429
- stepLabels: z45.tuple([
30430
- z45.literal(eventRegistrationGenericDateStepLabel),
30431
- z45.literal(eventRegistrationGenericTicketsStepLabel),
30432
- z45.literal(eventRegistrationGenericDetailsStepLabel)
30433
- ]),
30647
+ stepLabels: z45.array(z45.enum(EVENT_REGISTRATION_SHELL_STEP_LABELS)).min(1),
30434
30648
  summaryButtonText: z45.string()
30435
30649
  });
30436
30650
  var eventRegistrationHydrationSchema = z45.object({
@@ -30465,16 +30679,81 @@ var eventRegistrationIslandMetaKeys = defineInteractiveIslandMetaKeys(
30465
30679
  "stage"
30466
30680
  );
30467
30681
  function buildEventRegistrationDisplay(source) {
30682
+ const stepLabels = buildEventRegistrationShellStepLabels(source);
30468
30683
  return {
30469
30684
  kind: "event-registration",
30470
30685
  state: "generic-shell",
30471
30686
  className: source.className ?? null,
30472
30687
  titleText: "Event registration",
30473
- bodyText: "Preparing dates, tickets, and booking details.",
30474
- stepLabels: EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS,
30688
+ bodyText: buildEventRegistrationShellBodyText(stepLabels),
30689
+ stepLabels,
30475
30690
  summaryButtonText: source.buttonText?.trim() || "Register"
30476
30691
  };
30477
30692
  }
30693
+ function buildEventRegistrationShellStepLabels(source) {
30694
+ const scopedEvents = scopeEventRegistrationEvents(source);
30695
+ if (scopedEvents.length === 0) {
30696
+ return EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
30697
+ }
30698
+ const preSelectedEvent = findPreSelectedEvent({
30699
+ scopedEvents,
30700
+ occurrenceContext: source.occurrenceContext
30701
+ });
30702
+ const hasPreSelectedContext = Boolean(source.occurrenceContext || preSelectedEvent);
30703
+ const needsPaymentStep = hasPreSelectedContext && preSelectedEvent ? resolveEventRequiresPayment({
30704
+ eligibility: null,
30705
+ selectedTicketType: null,
30706
+ event: preSelectedEvent
30707
+ }) : false;
30708
+ return getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep).map((step) => shellLabelForRegistrationStep(step, scopedEvents));
30709
+ }
30710
+ function scopeEventRegistrationEvents(source) {
30711
+ const events = toRegistrationEvents(source.events ?? []);
30712
+ if (source.occurrenceContext?.seriesId) {
30713
+ return events.filter((event) => event.seriesId === source.occurrenceContext?.seriesId);
30714
+ }
30715
+ const entrySlug = source.contentEntry?.slug;
30716
+ const entryContentType = source.contentEntry?.contentTypeSlug;
30717
+ if (entrySlug && entryContentType && isEventContentType(entryContentType)) {
30718
+ return events.filter((event) => event.slug === entrySlug);
30719
+ }
30720
+ return events;
30721
+ }
30722
+ function shellLabelForRegistrationStep(step, events) {
30723
+ switch (step) {
30724
+ case "select-event":
30725
+ return isDateSelection(events) ? "Date" : "Event";
30726
+ case "select-tickets":
30727
+ return "Tickets";
30728
+ case "enter-details":
30729
+ return "Details";
30730
+ case "select-payment":
30731
+ return "Payment";
30732
+ case "error":
30733
+ case "success":
30734
+ case "submitting":
30735
+ case "redirecting":
30736
+ case "verifying-payment":
30737
+ case "verifying-timeout":
30738
+ case "payment-failed":
30739
+ return "Details";
30740
+ }
30741
+ }
30742
+ function isDateSelection(events) {
30743
+ const firstSeriesId = events[0]?.seriesId;
30744
+ return Boolean(
30745
+ events.length > 1 && firstSeriesId && events.every((event) => event.seriesId === firstSeriesId)
30746
+ );
30747
+ }
30748
+ function buildEventRegistrationShellBodyText(stepLabels) {
30749
+ if (stepLabels.includes("Payment")) {
30750
+ return "Preparing tickets, details, and payment options.";
30751
+ }
30752
+ if (stepLabels[0] === "Tickets") {
30753
+ return "Preparing tickets and booking details.";
30754
+ }
30755
+ return "Preparing dates, tickets, and booking details.";
30756
+ }
30478
30757
  var eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
30479
30758
  kind: "client-owned",
30480
30759
  contracts: {
@@ -39634,11 +39913,11 @@ function resolveParamsBindings(input, vm, meta) {
39634
39913
  return binding.fallback;
39635
39914
  }
39636
39915
  return resolved;
39637
- } catch (err2) {
39916
+ } catch (err3) {
39638
39917
  if (shouldLogWarnings) {
39639
39918
  console.warn(
39640
39919
  `bindings: failed to parse loader param binding for block "${meta?.blockKind ?? "unknown"}"`,
39641
- err2
39920
+ err3
39642
39921
  );
39643
39922
  }
39644
39923
  return void 0;
@@ -41691,10 +41970,10 @@ var normalizeBindingOutput2 = normalizeBindingOutput;
41691
41970
  var applyBindingsToContent2 = applyBindingsToContent;
41692
41971
 
41693
41972
  // ../content-model/src/entry-slots/types.ts
41694
- function ok(value) {
41973
+ function ok2(value) {
41695
41974
  return { ok: true, value };
41696
41975
  }
41697
- function err(error) {
41976
+ function err2(error) {
41698
41977
  return { ok: false, error };
41699
41978
  }
41700
41979
  var SLOT_KEY_PATTERN = /^[a-z][a-z0-9]*(?:[-_][a-z0-9]+)*$/;
@@ -41702,13 +41981,13 @@ function unsafeAsSlotKey(value) {
41702
41981
  return value;
41703
41982
  }
41704
41983
  function parseSlotKey(value) {
41705
- if (typeof value !== "string") return err({ kind: "not-string" });
41984
+ if (typeof value !== "string") return err2({ kind: "not-string" });
41706
41985
  const normalized = value.trim();
41707
- if (!normalized) return err({ kind: "empty" });
41986
+ if (!normalized) return err2({ kind: "empty" });
41708
41987
  if (!SLOT_KEY_PATTERN.test(normalized)) {
41709
- return err({ kind: "invalid-format", value: normalized });
41988
+ return err2({ kind: "invalid-format", value: normalized });
41710
41989
  }
41711
- return ok(unsafeAsSlotKey(normalized));
41990
+ return ok2(unsafeAsSlotKey(normalized));
41712
41991
  }
41713
41992
  var SYSTEM_ENTRY_SLOT_BLOCK_KIND = "system.entry-slot";
41714
41993
  function selectBlocksForDeclaredEntrySlot(input) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riverbankcms/sdk",
3
- "version": "0.84.0",
3
+ "version": "0.84.2",
4
4
  "description": "Riverbank CMS SDK for headless content consumption",
5
5
  "main": "./dist/server/index.mjs",
6
6
  "module": "./dist/server/index.mjs",
@@ -1,8 +0,0 @@
1
- "use client";
2
- export { SdkPreviewModeRuntime } from './chunk-HFMGVJCE.mjs';
3
- import './chunk-3LXFQS7T.mjs';
4
- import './chunk-5E33VO6J.mjs';
5
- import './chunk-6X2OVO3S.mjs';
6
- import './chunk-MSHZO4SL.mjs';
7
- import './chunk-LBBPD2IW.mjs';
8
- import './chunk-R7POPVJR.mjs';