@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,14 +1,14 @@
1
1
  "use client";
2
- import { useWaitlistClaim, MagicLinkForm } from './chunk-BT6AEIKN.mjs';
2
+ import { useWaitlistClaim, MagicLinkForm } from './chunk-3DTWLTXM.mjs';
3
3
  import { SpinnerNode } from './chunk-SYIJ5JO2.mjs';
4
4
  import { buildRouteIslandApiConfig } from './chunk-L4J5Y62O.mjs';
5
- import { DiscountCodeDisclosure, getStepNumber, logoutPortal, StepIndicator, LoggedInAsUser, CheckIcon, formatPrice, TerminalPanel, StateIcon, ClockIcon, CrossIcon, scrollToBlock, buildCheckoutReturnUrls, MembershipHero, validateFormData } from './chunk-52I7BGEK.mjs';
5
+ import { DiscountCodeDisclosure, getStepNumber, logoutPortal, StepIndicator, LoggedInAsUser, CheckIcon, formatPrice, TerminalPanel, StateIcon, ClockIcon, CrossIcon, scrollToBlock, buildCheckoutReturnUrls, MembershipHero, validateFormData } from './chunk-7UCLJ5SP.mjs';
6
6
  import { getFieldValidationControlProps, FieldValidationMessage } from './chunk-3DCJ45Z2.mjs';
7
7
  import { ModalShell } from './chunk-DVNUDUVT.mjs';
8
- import { AltchaWidget, getChallengeUrl, isSpamProtectionEnabled } from './chunk-GFSQNTRW.mjs';
8
+ import { AltchaWidget, getChallengeUrl, isSpamProtectionEnabled } from './chunk-SDIYSQAY.mjs';
9
9
  import { BlockApiProvider, useBlockApi } from './chunk-UDNSI5PY.mjs';
10
10
  import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
11
- import { defineIslandPropsDecoder, themeButtonClassName, resolveCoursePricingState, formatCoursePriceDisplay, formatCoursePriceAmount } from './chunk-HXPWP5EN.mjs';
11
+ import { defineIslandPropsDecoder, themeButtonClassName, resolveCoursePricingState, formatCoursePriceDisplay, formatCoursePriceAmount } from './chunk-VGDBVNOO.mjs';
12
12
  import { formatBookingDate, toScheduledBookingDateTime, toBookingTimeZone, formatBookingTime } from './chunk-ZE5G642V.mjs';
13
13
  import React2, { Component, useMemo, useState, useEffect } from 'react';
14
14
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,18 +1,18 @@
1
- import { EventCalendarClient } from './chunk-RDJFCPY3.mjs';
1
+ import { EventCalendarClient } from './chunk-3C2VTPWI.mjs';
2
2
  import './chunk-XSV6KW4D.mjs';
3
- import './chunk-BT6AEIKN.mjs';
3
+ import './chunk-3DTWLTXM.mjs';
4
4
  import './chunk-I2MMZO53.mjs';
5
- import './chunk-5ZEAZ33K.mjs';
5
+ import './chunk-ZKUO52W3.mjs';
6
6
  import './chunk-SYIJ5JO2.mjs';
7
7
  import './chunk-ZFHRN6W2.mjs';
8
8
  import { buildRouteIslandApiConfig } from './chunk-L4J5Y62O.mjs';
9
- import './chunk-52I7BGEK.mjs';
9
+ import './chunk-7UCLJ5SP.mjs';
10
10
  import './chunk-3DCJ45Z2.mjs';
11
11
  import './chunk-DVNUDUVT.mjs';
12
- import './chunk-GFSQNTRW.mjs';
12
+ import './chunk-SDIYSQAY.mjs';
13
13
  import { BlockApiProvider } from './chunk-UDNSI5PY.mjs';
14
14
  import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
15
- import { defineIslandPropsDecoder } from './chunk-HXPWP5EN.mjs';
15
+ import { defineIslandPropsDecoder } from './chunk-VGDBVNOO.mjs';
16
16
  import './chunk-ZE5G642V.mjs';
17
17
  import { jsx } from 'react/jsx-runtime';
18
18
 
@@ -1,18 +1,18 @@
1
- import { EventCombinedIslandClient } from './chunk-RDJFCPY3.mjs';
1
+ import { EventCombinedIslandClient } from './chunk-3C2VTPWI.mjs';
2
2
  import './chunk-XSV6KW4D.mjs';
3
- import './chunk-BT6AEIKN.mjs';
3
+ import './chunk-3DTWLTXM.mjs';
4
4
  import './chunk-I2MMZO53.mjs';
5
- import './chunk-5ZEAZ33K.mjs';
5
+ import './chunk-ZKUO52W3.mjs';
6
6
  import './chunk-SYIJ5JO2.mjs';
7
7
  import './chunk-ZFHRN6W2.mjs';
8
8
  import { buildRouteIslandApiConfig } from './chunk-L4J5Y62O.mjs';
9
- import './chunk-52I7BGEK.mjs';
9
+ import './chunk-7UCLJ5SP.mjs';
10
10
  import './chunk-3DCJ45Z2.mjs';
11
11
  import './chunk-DVNUDUVT.mjs';
12
- import './chunk-GFSQNTRW.mjs';
12
+ import './chunk-SDIYSQAY.mjs';
13
13
  import { BlockApiProvider } from './chunk-UDNSI5PY.mjs';
14
14
  import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
15
- import { defineIslandPropsDecoder } from './chunk-HXPWP5EN.mjs';
15
+ import { defineIslandPropsDecoder } from './chunk-VGDBVNOO.mjs';
16
16
  import './chunk-ZE5G642V.mjs';
17
17
  import { jsx } from 'react/jsx-runtime';
18
18
 
@@ -1,17 +1,17 @@
1
- import { EventDetailsIslandClient } from './chunk-RDJFCPY3.mjs';
1
+ import { EventDetailsIslandClient } from './chunk-3C2VTPWI.mjs';
2
2
  import './chunk-XSV6KW4D.mjs';
3
- import './chunk-BT6AEIKN.mjs';
3
+ import './chunk-3DTWLTXM.mjs';
4
4
  import './chunk-I2MMZO53.mjs';
5
- import './chunk-5ZEAZ33K.mjs';
5
+ import './chunk-ZKUO52W3.mjs';
6
6
  import './chunk-SYIJ5JO2.mjs';
7
7
  import './chunk-ZFHRN6W2.mjs';
8
- import './chunk-52I7BGEK.mjs';
8
+ import './chunk-7UCLJ5SP.mjs';
9
9
  import './chunk-3DCJ45Z2.mjs';
10
10
  import './chunk-DVNUDUVT.mjs';
11
- import './chunk-GFSQNTRW.mjs';
11
+ import './chunk-SDIYSQAY.mjs';
12
12
  import './chunk-UDNSI5PY.mjs';
13
13
  import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
14
- import { defineIslandPropsDecoder } from './chunk-HXPWP5EN.mjs';
14
+ import { defineIslandPropsDecoder } from './chunk-VGDBVNOO.mjs';
15
15
  import './chunk-ZE5G642V.mjs';
16
16
  import { jsx } from 'react/jsx-runtime';
17
17
 
@@ -1,18 +1,18 @@
1
- import { EventListingClient } from './chunk-RDJFCPY3.mjs';
1
+ import { EventListingClient } from './chunk-3C2VTPWI.mjs';
2
2
  import './chunk-XSV6KW4D.mjs';
3
- import './chunk-BT6AEIKN.mjs';
3
+ import './chunk-3DTWLTXM.mjs';
4
4
  import './chunk-I2MMZO53.mjs';
5
- import './chunk-5ZEAZ33K.mjs';
5
+ import './chunk-ZKUO52W3.mjs';
6
6
  import './chunk-SYIJ5JO2.mjs';
7
7
  import './chunk-ZFHRN6W2.mjs';
8
8
  import { buildRouteIslandApiConfig } from './chunk-L4J5Y62O.mjs';
9
- import './chunk-52I7BGEK.mjs';
9
+ import './chunk-7UCLJ5SP.mjs';
10
10
  import './chunk-3DCJ45Z2.mjs';
11
11
  import './chunk-DVNUDUVT.mjs';
12
- import './chunk-GFSQNTRW.mjs';
12
+ import './chunk-SDIYSQAY.mjs';
13
13
  import { BlockApiProvider } from './chunk-UDNSI5PY.mjs';
14
14
  import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
15
- import { defineIslandPropsDecoder } from './chunk-HXPWP5EN.mjs';
15
+ import { defineIslandPropsDecoder } from './chunk-VGDBVNOO.mjs';
16
16
  import './chunk-ZE5G642V.mjs';
17
17
  import { jsx } from 'react/jsx-runtime';
18
18
 
@@ -1,18 +1,18 @@
1
- import { EventRegistrationIslandClient } from './chunk-RDJFCPY3.mjs';
1
+ import { EventRegistrationIslandClient } from './chunk-3C2VTPWI.mjs';
2
2
  import './chunk-XSV6KW4D.mjs';
3
- import './chunk-BT6AEIKN.mjs';
3
+ import './chunk-3DTWLTXM.mjs';
4
4
  import './chunk-I2MMZO53.mjs';
5
- import './chunk-5ZEAZ33K.mjs';
5
+ import './chunk-ZKUO52W3.mjs';
6
6
  import './chunk-SYIJ5JO2.mjs';
7
7
  import './chunk-ZFHRN6W2.mjs';
8
8
  import { buildRouteIslandApiConfig } from './chunk-L4J5Y62O.mjs';
9
- import './chunk-52I7BGEK.mjs';
9
+ import './chunk-7UCLJ5SP.mjs';
10
10
  import './chunk-3DCJ45Z2.mjs';
11
11
  import './chunk-DVNUDUVT.mjs';
12
- import './chunk-GFSQNTRW.mjs';
12
+ import './chunk-SDIYSQAY.mjs';
13
13
  import { BlockApiProvider } from './chunk-UDNSI5PY.mjs';
14
14
  import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
15
- import { defineIslandPropsDecoder } from './chunk-HXPWP5EN.mjs';
15
+ import { defineIslandPropsDecoder } from './chunk-VGDBVNOO.mjs';
16
16
  import './chunk-ZE5G642V.mjs';
17
17
  import { jsx } from 'react/jsx-runtime';
18
18
 
@@ -1,8 +1,8 @@
1
1
  "use client";
2
- import { isSpamProtectionEnabled, AltchaWidget, getChallengeUrl } from './chunk-GFSQNTRW.mjs';
2
+ import { isSpamProtectionEnabled, AltchaWidget, getChallengeUrl } from './chunk-SDIYSQAY.mjs';
3
3
  import { BlockApiProvider, FeedbackMessage, useBlockApi } from './chunk-UDNSI5PY.mjs';
4
4
  import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
5
- import { defineIslandPropsDecoder, themeButtonClassName, assertNever11, err2, ok } from './chunk-HXPWP5EN.mjs';
5
+ import { defineIslandPropsDecoder, themeButtonClassName, assertNever11, err2, ok } from './chunk-VGDBVNOO.mjs';
6
6
  import { clsx_default } from './chunk-ZE5G642V.mjs';
7
7
  import { useState, useReducer, useRef } from 'react';
8
8
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { useCommerceCart } from './chunk-Z5OBQ5I4.mjs';
2
+ import { useCommerceCart } from './chunk-F5VRX5Y6.mjs';
3
3
  import { resolveDedicatedCheckoutPath, ModalShell } from './chunk-DVNUDUVT.mjs';
4
- import { defineIslandPropsDecoder, buildCartDisplay, themeButtonClassName } from './chunk-HXPWP5EN.mjs';
4
+ import { defineIslandPropsDecoder, buildCartDisplay, themeButtonClassName } from './chunk-VGDBVNOO.mjs';
5
5
  import './chunk-ZE5G642V.mjs';
6
6
  import * as React2 from 'react';
7
7
  import { createPortal } from 'react-dom';
@@ -6382,6 +6382,171 @@ var ENDPOINT_DEFINITIONS = {
6382
6382
  }
6383
6383
  };
6384
6384
 
6385
+ // ../core/src/result.ts
6386
+ function ok(value) {
6387
+ return { ok: true, value };
6388
+ }
6389
+ function err(error) {
6390
+ return { ok: false, error };
6391
+ }
6392
+
6393
+ // ../core/src/event-pricing.ts
6394
+ function publicEventPricingType(pricing) {
6395
+ switch (pricing.kind) {
6396
+ case "drop_in":
6397
+ case "free_registration":
6398
+ return "free";
6399
+ case "single_paid":
6400
+ case "ticket_types":
6401
+ case "course":
6402
+ return isFreePublicEventPriceDisplay(pricing.display) ? "free" : "paid";
6403
+ }
6404
+ }
6405
+ function isFreePublicEventPriceDisplay(display) {
6406
+ switch (display.kind) {
6407
+ case "free":
6408
+ return true;
6409
+ case "course":
6410
+ return display.display.kind === "free";
6411
+ case "exact":
6412
+ case "from":
6413
+ case "mixed":
6414
+ case "unavailable":
6415
+ return false;
6416
+ }
6417
+ }
6418
+
6419
+ // ../core/src/booking-date-time.ts
6420
+ var DEFAULT_LOCALE = "en-US";
6421
+ var FALLBACK_TIMEZONE = "UTC";
6422
+ function isValidTimeZone(timeZone) {
6423
+ try {
6424
+ new Intl.DateTimeFormat(DEFAULT_LOCALE, { timeZone }).format(/* @__PURE__ */ new Date());
6425
+ return true;
6426
+ } catch {
6427
+ return false;
6428
+ }
6429
+ }
6430
+ function getSafeTimeZone(timeZone) {
6431
+ const normalized = typeof timeZone === "string" ? timeZone.trim() : "";
6432
+ return normalized && isValidTimeZone(normalized) ? normalized : FALLBACK_TIMEZONE;
6433
+ }
6434
+ function parseStrictBookingTimeZone(timeZone) {
6435
+ const normalized = timeZone.trim();
6436
+ if (!normalized || !isValidTimeZone(normalized)) {
6437
+ return null;
6438
+ }
6439
+ return normalized;
6440
+ }
6441
+ function formatParseError(error) {
6442
+ switch (error.reason) {
6443
+ case "invalid_starts_at":
6444
+ return `Expected a valid UTC/offset-aware ISO datetime in startsAt, received "${error.value}"`;
6445
+ case "invalid_ends_at":
6446
+ return `Expected a valid UTC/offset-aware ISO datetime in endsAt, received "${error.value ?? ""}"`;
6447
+ case "invalid_time_zone":
6448
+ return `Expected a valid IANA timezone in timeZone, received "${error.value}"`;
6449
+ }
6450
+ }
6451
+ function formatToPartsLookup(date, locale, timeZone, format) {
6452
+ return new Map(
6453
+ new Intl.DateTimeFormat(locale, {
6454
+ ...format,
6455
+ timeZone
6456
+ }).formatToParts(date).map((part) => [part.type, part.value])
6457
+ );
6458
+ }
6459
+ function getZonedDateTimeParts(date, timeZone) {
6460
+ const parts = formatToPartsLookup(date, "en-GB", timeZone, {
6461
+ year: "numeric",
6462
+ month: "2-digit",
6463
+ day: "2-digit",
6464
+ hour: "2-digit",
6465
+ minute: "2-digit",
6466
+ second: "2-digit",
6467
+ hour12: false
6468
+ });
6469
+ const read = (type) => Number(parts.get(type) ?? "");
6470
+ return {
6471
+ year: read("year"),
6472
+ month: read("month"),
6473
+ day: read("day"),
6474
+ hour: read("hour"),
6475
+ minute: read("minute"),
6476
+ second: read("second")
6477
+ };
6478
+ }
6479
+ function formatDateKey(date) {
6480
+ const year = String(date.year).padStart(4, "0");
6481
+ const month = String(date.month).padStart(2, "0");
6482
+ const day = String(date.day).padStart(2, "0");
6483
+ return `${year}-${month}-${day}`;
6484
+ }
6485
+ function parseUtcIsoDateTimeString(value) {
6486
+ const normalized = value.trim();
6487
+ const hasUtcSuffix = normalized.endsWith("Z");
6488
+ const hasExplicitOffset = /[+-]\d{2}:\d{2}$/u.test(normalized);
6489
+ if (!hasUtcSuffix && !hasExplicitOffset) {
6490
+ return err("missing-timezone-offset");
6491
+ }
6492
+ const date = new Date(normalized);
6493
+ if (Number.isNaN(date.getTime())) {
6494
+ return err("invalid-date-time");
6495
+ }
6496
+ return ok(date.toISOString());
6497
+ }
6498
+ function toUtcIsoDateTimeString(value) {
6499
+ const parsed = parseUtcIsoDateTimeString(value);
6500
+ if (!parsed.ok) {
6501
+ const message = parsed.error === "missing-timezone-offset" ? `Expected an offset-aware ISO datetime, received "${value}"` : `Expected a valid ISO datetime, received "${value}"`;
6502
+ throw new Error(message);
6503
+ }
6504
+ return parsed.value;
6505
+ }
6506
+ function parseScheduledBookingDateTime(input) {
6507
+ try {
6508
+ const startsAt = toUtcIsoDateTimeString(input.startsAt);
6509
+ const timeZone = parseStrictBookingTimeZone(input.timeZone);
6510
+ if (!timeZone) {
6511
+ return {
6512
+ ok: false,
6513
+ field: "timeZone",
6514
+ reason: "invalid_time_zone",
6515
+ value: input.timeZone
6516
+ };
6517
+ }
6518
+ return {
6519
+ ok: true,
6520
+ value: {
6521
+ startsAt,
6522
+ timeZone,
6523
+ locale: input.locale
6524
+ }
6525
+ };
6526
+ } catch {
6527
+ return {
6528
+ ok: false,
6529
+ field: "startsAt",
6530
+ reason: "invalid_starts_at",
6531
+ value: input.startsAt
6532
+ };
6533
+ }
6534
+ }
6535
+ function toScheduledBookingDateTime(input) {
6536
+ const result = parseScheduledBookingDateTime(input);
6537
+ if (result.ok) {
6538
+ return result.value;
6539
+ }
6540
+ throw new Error(formatParseError(result));
6541
+ }
6542
+ function getBookingLocalDateKey(input) {
6543
+ return formatDateKey(getLocalScheduleDate(new Date(input.startsAt), input.timeZone));
6544
+ }
6545
+ function getLocalScheduleDate(date, timeZone) {
6546
+ const parts = getZonedDateTimeParts(date, getSafeTimeZone(timeZone));
6547
+ return { year: parts.year, month: parts.month, day: parts.day };
6548
+ }
6549
+
6385
6550
  // ../core/src/location.ts
6386
6551
  function normalizeLocationAddressText(value) {
6387
6552
  if (typeof value !== "string") {
@@ -9235,9 +9400,9 @@ var _Vibrant = class _Vibrant2 {
9235
9400
  }
9236
9401
  image.remove();
9237
9402
  return res;
9238
- } catch (err) {
9403
+ } catch (err2) {
9239
9404
  image.remove();
9240
- return Promise.reject(err);
9405
+ return Promise.reject(err2);
9241
9406
  }
9242
9407
  }
9243
9408
  async getPalettes() {
@@ -9251,9 +9416,9 @@ var _Vibrant = class _Vibrant2 {
9251
9416
  const res = result1.palettes;
9252
9417
  image.remove();
9253
9418
  return res;
9254
- } catch (err) {
9419
+ } catch (err2) {
9255
9420
  image.remove();
9256
- return Promise.reject(err);
9421
+ return Promise.reject(err2);
9257
9422
  }
9258
9423
  }
9259
9424
  };
@@ -28142,6 +28307,26 @@ var occurrenceContextSchema = z43.object({
28142
28307
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
28143
28308
  import { z as z45 } from "zod";
28144
28309
 
28310
+ // ../blocks/src/system/constants/events.ts
28311
+ var EVENT_CONTENT_TYPE_SLUGS = ["event", "events"];
28312
+ var eventCalendarDisplayModeValues = ["combined", "month", "week", "list", "timetable"];
28313
+ var eventCalendarListLayoutValues = ["stack", "grid", "compact"];
28314
+ var eventCalendarListLayoutOptions = [
28315
+ { id: "stack", label: "Stack" },
28316
+ { id: "grid", label: "Grid" },
28317
+ { id: "compact", label: "Compact" }
28318
+ ];
28319
+ function isEventCalendarDisplayMode(value) {
28320
+ return typeof value === "string" && eventCalendarDisplayModeValues.includes(value);
28321
+ }
28322
+ function isEventCalendarListLayout(value) {
28323
+ return typeof value === "string" && eventCalendarListLayoutValues.includes(value);
28324
+ }
28325
+ function isEventContentType(slug) {
28326
+ if (!slug) return false;
28327
+ return EVENT_CONTENT_TYPE_SLUGS.includes(slug);
28328
+ }
28329
+
28145
28330
  // ../blocks/src/system/runtime/nodes/events/shared/pricing.ts
28146
28331
  var DEFAULT_EVENT_CURRENCY = "USD";
28147
28332
  function resolveRuntimeEventPricing(event) {
@@ -28264,23 +28449,6 @@ function readAmount(value) {
28264
28449
 
28265
28450
  // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
28266
28451
  import { z as z44 } from "zod";
28267
-
28268
- // ../blocks/src/system/constants/events.ts
28269
- var eventCalendarDisplayModeValues = ["combined", "month", "week", "list", "timetable"];
28270
- var eventCalendarListLayoutValues = ["stack", "grid", "compact"];
28271
- var eventCalendarListLayoutOptions = [
28272
- { id: "stack", label: "Stack" },
28273
- { id: "grid", label: "Grid" },
28274
- { id: "compact", label: "Compact" }
28275
- ];
28276
- function isEventCalendarDisplayMode(value) {
28277
- return typeof value === "string" && eventCalendarDisplayModeValues.includes(value);
28278
- }
28279
- function isEventCalendarListLayout(value) {
28280
- return typeof value === "string" && eventCalendarListLayoutValues.includes(value);
28281
- }
28282
-
28283
- // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
28284
28452
  var previewStageSchema = z44.enum(["preview", "published"]);
28285
28453
  var registrationButtonVariantSchema = z44.enum(["primary", "secondary", "outline"]);
28286
28454
  var eventButtonVariantSchema = z44.enum(["primary", "secondary", "outline", "link"]);
@@ -28291,13 +28459,64 @@ var weekStartSchema = z44.enum(["sunday", "monday"]);
28291
28459
  var filterAutoShowSchema = z44.enum(["auto", "always", "never"]);
28292
28460
  var calendarTabViewsSchema = z44.enum(["both", "month", "week"]);
28293
28461
 
28462
+ // ../blocks/src/system/runtime/nodes/event-registration/wizardSteps.ts
28463
+ function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep) {
28464
+ const baseSteps = hasPreSelectedContext ? ["select-tickets", "enter-details"] : ["select-event", "select-tickets", "enter-details"];
28465
+ if (!needsPaymentStep) {
28466
+ return baseSteps;
28467
+ }
28468
+ return [...baseSteps, "select-payment"];
28469
+ }
28470
+
28471
+ // ../blocks/src/system/runtime/nodes/event-registration/registrationDerivations.ts
28472
+ function eventMatchesOccurrenceId(event, occurrenceId) {
28473
+ return event.registrationOccurrenceId === occurrenceId || event.publicEventId === occurrenceId;
28474
+ }
28475
+ function findPreSelectedEvent(input) {
28476
+ const occurrenceContext = input.occurrenceContext;
28477
+ if (!occurrenceContext) {
28478
+ return null;
28479
+ }
28480
+ const contextDate = getBookingLocalDateKey(toScheduledBookingDateTime({
28481
+ startsAt: occurrenceContext.startsAt,
28482
+ timeZone: occurrenceContext.timeZone
28483
+ }));
28484
+ return input.scopedEvents.find(
28485
+ (event) => eventMatchesOccurrenceId(event, occurrenceContext.id) || getBookingLocalDateKey(toScheduledBookingDateTime({
28486
+ startsAt: event.startsAt,
28487
+ timeZone: event.timeZone
28488
+ })) === contextDate
28489
+ ) ?? null;
28490
+ }
28491
+ function resolveEventRequiresPayment(input) {
28492
+ if (input.eligibility) {
28493
+ return input.eligibility.requiresPayment;
28494
+ }
28495
+ if (input.selectedTicketType) {
28496
+ return input.selectedTicketType.priceAmount > 0;
28497
+ }
28498
+ if (!input.event) {
28499
+ return false;
28500
+ }
28501
+ return publicEventPricingType(resolveRuntimeEventPricing(input.event)) !== "free";
28502
+ }
28503
+
28504
+ // ../blocks/src/system/runtime/nodes/event-registration/registrationEventAdapter.ts
28505
+ function toRegistrationEvent(event) {
28506
+ return {
28507
+ ...event,
28508
+ pricing: resolveRuntimeEventPricing(event),
28509
+ publicEventId: event.id,
28510
+ registrationOccurrenceId: event.occurrenceId
28511
+ };
28512
+ }
28513
+ function toRegistrationEvents(events) {
28514
+ return events.map(toRegistrationEvent);
28515
+ }
28516
+
28294
28517
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
28295
28518
  var EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = ["Date", "Tickets", "Details"];
28296
- var [
28297
- eventRegistrationGenericDateStepLabel,
28298
- eventRegistrationGenericTicketsStepLabel,
28299
- eventRegistrationGenericDetailsStepLabel
28300
- ] = EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
28519
+ var EVENT_REGISTRATION_SHELL_STEP_LABELS = ["Event", "Date", "Tickets", "Details", "Payment"];
28301
28520
  var contentEntrySchema = z45.object({
28302
28521
  id: z45.string(),
28303
28522
  slug: z45.string(),
@@ -28333,11 +28552,7 @@ var eventRegistrationDisplaySchema = z45.object({
28333
28552
  className: z45.string().nullable(),
28334
28553
  titleText: z45.string(),
28335
28554
  bodyText: z45.string(),
28336
- stepLabels: z45.tuple([
28337
- z45.literal(eventRegistrationGenericDateStepLabel),
28338
- z45.literal(eventRegistrationGenericTicketsStepLabel),
28339
- z45.literal(eventRegistrationGenericDetailsStepLabel)
28340
- ]),
28555
+ stepLabels: z45.array(z45.enum(EVENT_REGISTRATION_SHELL_STEP_LABELS)).min(1),
28341
28556
  summaryButtonText: z45.string()
28342
28557
  });
28343
28558
  var eventRegistrationHydrationSchema = z45.object({
@@ -28372,16 +28587,81 @@ var eventRegistrationIslandMetaKeys = defineInteractiveIslandMetaKeys(
28372
28587
  "stage"
28373
28588
  );
28374
28589
  function buildEventRegistrationDisplay(source) {
28590
+ const stepLabels = buildEventRegistrationShellStepLabels(source);
28375
28591
  return {
28376
28592
  kind: "event-registration",
28377
28593
  state: "generic-shell",
28378
28594
  className: source.className ?? null,
28379
28595
  titleText: "Event registration",
28380
- bodyText: "Preparing dates, tickets, and booking details.",
28381
- stepLabels: EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS,
28596
+ bodyText: buildEventRegistrationShellBodyText(stepLabels),
28597
+ stepLabels,
28382
28598
  summaryButtonText: source.buttonText?.trim() || "Register"
28383
28599
  };
28384
28600
  }
28601
+ function buildEventRegistrationShellStepLabels(source) {
28602
+ const scopedEvents = scopeEventRegistrationEvents(source);
28603
+ if (scopedEvents.length === 0) {
28604
+ return EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS;
28605
+ }
28606
+ const preSelectedEvent = findPreSelectedEvent({
28607
+ scopedEvents,
28608
+ occurrenceContext: source.occurrenceContext
28609
+ });
28610
+ const hasPreSelectedContext = Boolean(source.occurrenceContext || preSelectedEvent);
28611
+ const needsPaymentStep = hasPreSelectedContext && preSelectedEvent ? resolveEventRequiresPayment({
28612
+ eligibility: null,
28613
+ selectedTicketType: null,
28614
+ event: preSelectedEvent
28615
+ }) : false;
28616
+ return getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep).map((step) => shellLabelForRegistrationStep(step, scopedEvents));
28617
+ }
28618
+ function scopeEventRegistrationEvents(source) {
28619
+ const events = toRegistrationEvents(source.events ?? []);
28620
+ if (source.occurrenceContext?.seriesId) {
28621
+ return events.filter((event) => event.seriesId === source.occurrenceContext?.seriesId);
28622
+ }
28623
+ const entrySlug = source.contentEntry?.slug;
28624
+ const entryContentType = source.contentEntry?.contentTypeSlug;
28625
+ if (entrySlug && entryContentType && isEventContentType(entryContentType)) {
28626
+ return events.filter((event) => event.slug === entrySlug);
28627
+ }
28628
+ return events;
28629
+ }
28630
+ function shellLabelForRegistrationStep(step, events) {
28631
+ switch (step) {
28632
+ case "select-event":
28633
+ return isDateSelection(events) ? "Date" : "Event";
28634
+ case "select-tickets":
28635
+ return "Tickets";
28636
+ case "enter-details":
28637
+ return "Details";
28638
+ case "select-payment":
28639
+ return "Payment";
28640
+ case "error":
28641
+ case "success":
28642
+ case "submitting":
28643
+ case "redirecting":
28644
+ case "verifying-payment":
28645
+ case "verifying-timeout":
28646
+ case "payment-failed":
28647
+ return "Details";
28648
+ }
28649
+ }
28650
+ function isDateSelection(events) {
28651
+ const firstSeriesId = events[0]?.seriesId;
28652
+ return Boolean(
28653
+ events.length > 1 && firstSeriesId && events.every((event) => event.seriesId === firstSeriesId)
28654
+ );
28655
+ }
28656
+ function buildEventRegistrationShellBodyText(stepLabels) {
28657
+ if (stepLabels.includes("Payment")) {
28658
+ return "Preparing tickets, details, and payment options.";
28659
+ }
28660
+ if (stepLabels[0] === "Tickets") {
28661
+ return "Preparing tickets and booking details.";
28662
+ }
28663
+ return "Preparing dates, tickets, and booking details.";
28664
+ }
28385
28665
  var eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
28386
28666
  kind: "client-owned",
28387
28667
  contracts: {
@@ -37506,11 +37786,11 @@ function resolveParamsBindings(input, vm, meta) {
37506
37786
  return binding.fallback;
37507
37787
  }
37508
37788
  return resolved;
37509
- } catch (err) {
37789
+ } catch (err2) {
37510
37790
  if (shouldLogWarnings) {
37511
37791
  console.warn(
37512
37792
  `bindings: failed to parse loader param binding for block "${meta?.blockKind ?? "unknown"}"`,
37513
- err
37793
+ err2
37514
37794
  );
37515
37795
  }
37516
37796
  return void 0;
@@ -1,7 +1,7 @@
1
1
  import { LeafletStaticMap } from './chunk-XSV6KW4D.mjs';
2
2
  import './chunk-I2MMZO53.mjs';
3
3
  import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
4
- import { defineIslandPropsDecoder } from './chunk-HXPWP5EN.mjs';
4
+ import { defineIslandPropsDecoder } from './chunk-VGDBVNOO.mjs';
5
5
  import { normalizeLocationAddressText, toLocationCoordinates, textColorStyle, mergeStyles, borderColorStyle, backgroundColorStyle } from './chunk-ZE5G642V.mjs';
6
6
  import { jsx, jsxs } from 'react/jsx-runtime';
7
7
 
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import { getFieldValidationControlProps, FieldValidationMessage } from './chunk-3DCJ45Z2.mjs';
3
- import { isSpamProtectionEnabled, AltchaWidget, getChallengeUrl } from './chunk-GFSQNTRW.mjs';
3
+ import { isSpamProtectionEnabled, AltchaWidget, getChallengeUrl } from './chunk-SDIYSQAY.mjs';
4
4
  import { BlockApiProvider, useBlockApi, FeedbackMessage } from './chunk-UDNSI5PY.mjs';
5
5
  import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
6
- import { defineIslandPropsDecoder, themeButtonClassName } from './chunk-HXPWP5EN.mjs';
6
+ import { defineIslandPropsDecoder, themeButtonClassName } from './chunk-VGDBVNOO.mjs';
7
7
  import { clsx_default } from './chunk-ZE5G642V.mjs';
8
8
  import { useState } from 'react';
9
9
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -1,15 +1,15 @@
1
- import { mountShopBlockIsland, ProductDetailClient } from './chunk-URQCZD5W.mjs';
2
- import './chunk-Z5OBQ5I4.mjs';
3
- import './chunk-JWEYB4V6.mjs';
1
+ import { mountShopBlockIsland, ProductDetailClient } from './chunk-52CGCQ7B.mjs';
2
+ import './chunk-F5VRX5Y6.mjs';
3
+ import './chunk-4OXKTA3D.mjs';
4
4
  import './chunk-I2MMZO53.mjs';
5
5
  import './chunk-ZFHRN6W2.mjs';
6
6
  import './chunk-L4J5Y62O.mjs';
7
- import './chunk-52I7BGEK.mjs';
7
+ import './chunk-7UCLJ5SP.mjs';
8
8
  import './chunk-3DCJ45Z2.mjs';
9
9
  import './chunk-DVNUDUVT.mjs';
10
10
  import './chunk-UDNSI5PY.mjs';
11
11
  import './chunk-N7PBWBWQ.mjs';
12
- import { defineIslandPropsDecoder } from './chunk-HXPWP5EN.mjs';
12
+ import { defineIslandPropsDecoder } from './chunk-VGDBVNOO.mjs';
13
13
  import './chunk-ZE5G642V.mjs';
14
14
 
15
15
  // src/rendering/islands/enhancers/productDetail.tsx
@@ -1,15 +1,15 @@
1
- import { mountShopBlockIsland, ProductListClient } from './chunk-URQCZD5W.mjs';
2
- import './chunk-Z5OBQ5I4.mjs';
3
- import './chunk-JWEYB4V6.mjs';
1
+ import { mountShopBlockIsland, ProductListClient } from './chunk-52CGCQ7B.mjs';
2
+ import './chunk-F5VRX5Y6.mjs';
3
+ import './chunk-4OXKTA3D.mjs';
4
4
  import './chunk-I2MMZO53.mjs';
5
5
  import './chunk-ZFHRN6W2.mjs';
6
6
  import './chunk-L4J5Y62O.mjs';
7
- import './chunk-52I7BGEK.mjs';
7
+ import './chunk-7UCLJ5SP.mjs';
8
8
  import './chunk-3DCJ45Z2.mjs';
9
9
  import './chunk-DVNUDUVT.mjs';
10
10
  import './chunk-UDNSI5PY.mjs';
11
11
  import './chunk-N7PBWBWQ.mjs';
12
- import { defineIslandPropsDecoder } from './chunk-HXPWP5EN.mjs';
12
+ import { defineIslandPropsDecoder } from './chunk-VGDBVNOO.mjs';
13
13
  import './chunk-ZE5G642V.mjs';
14
14
 
15
15
  // src/rendering/islands/enhancers/productList.tsx