@riverbankcms/sdk 0.84.2 → 0.88.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/dist/{PreviewEditorSidebar-4PH35ZIE.mjs → PreviewEditorSidebar-EVRS3C7T.mjs} +3 -3
  2. package/dist/{PreviewEditorUI-WHMCRJGM.mjs → PreviewEditorUI-54WD4IGE.mjs} +3 -3
  3. package/dist/SdkPreviewModeRuntime-ZALZDJEK.mjs +8 -0
  4. package/dist/_dts/ai/src/contracts/proposals.d.ts +684 -0
  5. package/dist/_dts/api/src/endpoints.d.ts +58 -14
  6. package/dist/_dts/api/src/index.d.ts +4 -1
  7. package/dist/_dts/api/src/launchReadiness.d.ts +3 -3
  8. package/dist/_dts/api/src/mailchimpIntegration.d.ts +215 -0
  9. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +35 -15
  10. package/dist/_dts/api/src/siteInfrastructure.d.ts +0 -14
  11. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +1 -13
  12. package/dist/_dts/api/src/types.d.ts +6 -3
  13. package/dist/_dts/blocks/src/PageRenderer.d.ts +1 -0
  14. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +4 -0
  15. package/dist/_dts/blocks/src/index.d.ts +2 -1
  16. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +288 -288
  17. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +288 -288
  18. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +288 -288
  19. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +288 -288
  20. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +288 -288
  21. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +42 -0
  22. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +4 -0
  23. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +288 -288
  24. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +288 -288
  25. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +1 -1
  26. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +42 -42
  27. package/dist/_dts/blocks/src/system/blocks/newsletter-signup-destination.d.ts +300 -0
  28. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +63 -3
  29. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +288 -288
  30. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +288 -288
  31. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +288 -288
  32. package/dist/_dts/blocks/src/system/fragments/library/newsletterForm.d.ts +53 -1
  33. package/dist/_dts/blocks/src/system/manifest/richTextSchema.d.ts +27 -0
  34. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +23 -23
  35. package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +10 -2
  36. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +24 -0
  37. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +12 -0
  38. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +1 -0
  39. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +4 -0
  40. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.server.d.ts +1 -1
  41. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/utils.d.ts +11 -1
  42. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +15 -0
  43. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.server.d.ts +1 -1
  44. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.submission.d.ts +32 -0
  45. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +5 -1
  46. package/dist/_dts/blocks/src/system/runtime/shared/components/ModalShell.d.ts +5 -1
  47. package/dist/_dts/blocks/src/system/runtime/shared/utils/formatting.d.ts +1 -1
  48. package/dist/_dts/content-model/src/referenceFields.d.ts +1 -1
  49. package/dist/_dts/core/src/currency-format.d.ts +37 -2
  50. package/dist/_dts/core/src/event-pricing.d.ts +24 -0
  51. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +551 -20
  52. package/dist/_dts/editor-blocks/src/widgets/reference/loaders.d.ts +3 -1
  53. package/dist/_dts/sdk/src/cli/canonical-entry-policy.d.ts +53 -0
  54. package/dist/_dts/sdk/src/cli/commands/migrate.d.ts +1 -0
  55. package/dist/_dts/sdk/src/cli/commands/pull.d.ts +7 -1
  56. package/dist/_dts/sdk/src/cli/content/reader.d.ts +2 -0
  57. package/dist/_dts/sdk/src/cli/migrations/events.d.ts +73 -0
  58. package/dist/_dts/sdk/src/client/types.d.ts +9 -0
  59. package/dist/_dts/sdk/src/config/validation.d.ts +3 -0
  60. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +3 -0
  61. package/dist/_dts/sdk/src/data/prefetchBlockData.d.ts +3 -9
  62. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +1 -1
  63. package/dist/_dts/sdk/src/manifest/three-pass-converter.d.ts +7 -18
  64. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +2 -0
  65. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +3 -1
  66. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +7 -3
  67. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +4 -24
  68. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +45 -0
  69. package/dist/_dts/sdk/src/version.d.ts +1 -1
  70. package/dist/_dts/site-commands/src/commands.d.ts +57 -0
  71. package/dist/_dts/surfaces/src/index.d.ts +12 -0
  72. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  73. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +9 -9
  74. package/dist/_dts/theme-core/src/schema.d.ts +11 -11
  75. package/dist/{chunk-ZR2GQK2A.mjs → chunk-7KOO7RPP.mjs} +953 -315
  76. package/dist/{chunk-OCGTXHSO.mjs → chunk-ER4UIW4X.mjs} +7 -7
  77. package/dist/{chunk-WFPYN7KA.mjs → chunk-HVOBXA3Y.mjs} +2 -2
  78. package/dist/{chunk-NFWGLRZZ.mjs → chunk-K3JWH6HE.mjs} +37 -3
  79. package/dist/{chunk-4QNLOTES.mjs → chunk-O4LVYUVH.mjs} +58 -14
  80. package/dist/{chunk-PYDHOMEO.mjs → chunk-YDMBIIS5.mjs} +1 -1
  81. package/dist/cli/index.mjs +1858 -512
  82. package/dist/client/{accordion-2UZPBMYM.mjs → accordion-PT5CGW5N.mjs} +2 -2
  83. package/dist/client/{bookingForm-36CWQUMV.mjs → bookingForm-2HLRTEYS.mjs} +7 -7
  84. package/dist/client/bookings.mjs +51 -6
  85. package/dist/client/{carousel-QH77HR6X.mjs → carousel-Z2LKYSWA.mjs} +3 -3
  86. package/dist/client/cart-ND5IK4A6.mjs +18 -0
  87. package/dist/client/checkout-EYUSGAY7.mjs +18 -0
  88. package/dist/client/{chunk-SYIJ5JO2.mjs → chunk-6DVPO44G.mjs} +1 -1
  89. package/dist/client/{chunk-3C2VTPWI.mjs → chunk-BAWHZ5GM.mjs} +176 -13
  90. package/dist/client/{chunk-52CGCQ7B.mjs → chunk-BL66UWGD.mjs} +10 -80
  91. package/dist/client/{chunk-VGDBVNOO.mjs → chunk-DIRW2LNG.mjs} +241 -210
  92. package/dist/client/{chunk-UDNSI5PY.mjs → chunk-GOFO7HRH.mjs} +1 -2
  93. package/dist/client/{chunk-ZKUO52W3.mjs → chunk-H4MHEXYS.mjs} +1 -1
  94. package/dist/client/{chunk-ZE5G642V.mjs → chunk-LI2C6M5O.mjs} +75 -1
  95. package/dist/client/{chunk-3DTWLTXM.mjs → chunk-MHBEWDT7.mjs} +117 -3
  96. package/dist/client/{chunk-4OXKTA3D.mjs → chunk-O5JNI3E4.mjs} +2 -2
  97. package/dist/client/{chunk-XSV6KW4D.mjs → chunk-S4G65LGR.mjs} +1 -1
  98. package/dist/client/{chunk-DVNUDUVT.mjs → chunk-WBQG7VJA.mjs} +4 -1
  99. package/dist/client/{chunk-F5VRX5Y6.mjs → chunk-WCVK4MBJ.mjs} +1 -1
  100. package/dist/client/{chunk-7UCLJ5SP.mjs → chunk-X7GVFB7Y.mjs} +4 -7
  101. package/dist/client/client.mjs +2125 -1403
  102. package/dist/client/{courseRegistration-TMKU6ABO.mjs → courseRegistration-H3AZBUEG.mjs} +7 -7
  103. package/dist/client/{eventCalendar-G6TI32X6.mjs → eventCalendar-FPKJGLGS.mjs} +10 -11
  104. package/dist/client/{eventCombined-SCKEMNAR.mjs → eventCombined-QCGIZBUY.mjs} +10 -11
  105. package/dist/client/{eventDetails-XPIFXXPK.mjs → eventDetails-HIT3BJWU.mjs} +10 -11
  106. package/dist/client/{eventListing-7QFMEMGT.mjs → eventListing-R4HNWJDN.mjs} +10 -11
  107. package/dist/client/{eventRegistration-TOODSZUI.mjs → eventRegistration-Q7BYY5HF.mjs} +10 -11
  108. package/dist/client/{form-MTCMVCZT.mjs → form-NI6YOG6S.mjs} +3 -3
  109. package/dist/client/{headerSection-Y5TMR3TW.mjs → headerSection-SDYGII36.mjs} +4 -4
  110. package/dist/client/hooks.mjs +1682 -1412
  111. package/dist/client/{locationMap-RH2LG7FZ.mjs → locationMap-BDETEUQD.mjs} +3 -4
  112. package/dist/client/{newsletterForm-PCAIPFMA.mjs → newsletterForm-EKYIU67X.mjs} +70 -22
  113. package/dist/client/{productDetail-OIGDR4YE.mjs → productDetail-5UTGNN76.mjs} +8 -9
  114. package/dist/client/{productList-4MA5S2CX.mjs → productList-7YA5KXZQ.mjs} +8 -9
  115. package/dist/client/rendering/client.mjs +753 -329
  116. package/dist/client/rendering/islands.mjs +19 -19
  117. package/dist/client/rendering.mjs +3786 -3034
  118. package/dist/client/shop-AIMUMZYC.mjs +20 -0
  119. package/dist/preview-next/before-render.mjs +58 -14
  120. package/dist/preview-next/client/runtime.mjs +5 -5
  121. package/dist/preview-next/editor-chrome.css +56 -9
  122. package/dist/preview-next/middleware.mjs +58 -14
  123. package/dist/{sdk-runtime-QLOCYKVU.mjs → sdk-runtime-NW472WNT.mjs} +6 -6
  124. package/dist/server/components.mjs +1518 -1015
  125. package/dist/server/config-validation.mjs +1719 -1461
  126. package/dist/server/config.mjs +1719 -1461
  127. package/dist/server/data.mjs +1683 -1413
  128. package/dist/server/index.mjs +79 -17
  129. package/dist/server/next.mjs +1902 -1311
  130. package/dist/server/page-converter.mjs +2193 -1169
  131. package/dist/server/prebuild.mjs +1 -1
  132. package/dist/server/rendering/server.mjs +1709 -1209
  133. package/dist/server/rendering.mjs +1894 -1347
  134. package/dist/server/routing.mjs +1872 -1499
  135. package/dist/server/server.mjs +1571 -1264
  136. package/dist/server/theme-bridge.mjs +234 -0
  137. package/dist/styles/index.css +232 -0
  138. package/package.json +1 -1
  139. package/dist/SdkPreviewModeRuntime-4FGSVUYI.mjs +0 -8
  140. package/dist/client/cart-X4YK4FTW.mjs +0 -19
  141. package/dist/client/checkout-OM2BEPWD.mjs +0 -19
  142. package/dist/client/chunk-I2MMZO53.mjs +0 -6
  143. package/dist/client/shop-WXSYV5QO.mjs +0 -21
@@ -784,6 +784,64 @@ var ENDPOINT_DEFINITIONS = {
784
784
  auth: "user",
785
785
  responseKind: "json"
786
786
  },
787
+ listMailchimpAudiences: {
788
+ path: "/sites/{siteId}/integrations/mailchimp/audiences",
789
+ method: "GET",
790
+ tags: [TAG_TEMPLATES.site],
791
+ auth: "user",
792
+ responseKind: "json",
793
+ errors: ["auth:forbidden", "server:internal_error"]
794
+ },
795
+ getMailchimpSignupSyncHealth: {
796
+ path: "/sites/{siteId}/integrations/mailchimp/signup-sync-health",
797
+ method: "GET",
798
+ tags: [TAG_TEMPLATES.site],
799
+ auth: "user",
800
+ responseKind: "json",
801
+ errors: ["auth:forbidden", "server:internal_error"]
802
+ },
803
+ getMailchimpConnection: {
804
+ path: "/sites/{siteId}/integrations/mailchimp/connection",
805
+ method: "GET",
806
+ tags: [TAG_TEMPLATES.site],
807
+ auth: "user",
808
+ responseKind: "json",
809
+ errors: ["auth:forbidden", "server:internal_error"]
810
+ },
811
+ startMailchimpOAuth: {
812
+ path: "/sites/{siteId}/integrations/mailchimp/oauth/start",
813
+ method: "POST",
814
+ tags: [TAG_TEMPLATES.site],
815
+ auth: "user",
816
+ responseKind: "json",
817
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
818
+ errors: ["auth:forbidden", "validation:invalid_input", "server:internal_error"]
819
+ },
820
+ refreshMailchimpAudiences: {
821
+ path: "/sites/{siteId}/integrations/mailchimp/audiences/refresh",
822
+ method: "POST",
823
+ tags: [TAG_TEMPLATES.site],
824
+ auth: "user",
825
+ responseKind: "json",
826
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
827
+ errors: ["auth:forbidden", "server:internal_error"]
828
+ },
829
+ disconnectMailchimp: {
830
+ path: "/sites/{siteId}/integrations/mailchimp/disconnect",
831
+ method: "POST",
832
+ tags: [TAG_TEMPLATES.site],
833
+ auth: "user",
834
+ responseKind: "json",
835
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
836
+ errors: ["auth:forbidden", "server:internal_error"]
837
+ },
838
+ mailchimpOAuthCallback: {
839
+ path: "/auth/mailchimp/callback",
840
+ method: "GET",
841
+ auth: "public",
842
+ responseKind: "void",
843
+ errors: []
844
+ },
787
845
  createNewsletterList: {
788
846
  path: "/sites/{siteId}/newsletter/lists",
789
847
  method: "POST",
@@ -3008,20 +3066,6 @@ var ENDPOINT_DEFINITIONS = {
3008
3066
  auth: "user",
3009
3067
  responseKind: "json"
3010
3068
  },
3011
- instagramUploadZip: {
3012
- path: "/instagram/upload-zip",
3013
- method: "POST",
3014
- tags: ["instagram-import"],
3015
- auth: "user",
3016
- responseKind: "json"
3017
- },
3018
- createInstagramZipUploadUrl: {
3019
- path: "/instagram/upload-zip-url",
3020
- method: "POST",
3021
- tags: ["instagram-import"],
3022
- auth: "user",
3023
- responseKind: "json"
3024
- },
3025
3069
  getAnalyticsReport: {
3026
3070
  path: "/sites/{siteId}/analytics/report",
3027
3071
  method: "GET",
@@ -6420,6 +6464,48 @@ function err(error) {
6420
6464
  // ../core/src/branded.ts
6421
6465
  var unsafeAsMediaAssetId = (id) => id;
6422
6466
 
6467
+ // ../core/src/assert-never.ts
6468
+ function assertNever(value, message = "Unexpected variant") {
6469
+ throw new Error(`${message}: ${String(value)}`);
6470
+ }
6471
+
6472
+ // ../core/src/currency-format.ts
6473
+ var CURRENCY_LOCALE_BY_CODE = {
6474
+ USD: "en-US",
6475
+ GBP: "en-GB",
6476
+ EUR: "de-DE",
6477
+ AUD: "en-AU",
6478
+ CAD: "en-CA",
6479
+ NZD: "en-NZ",
6480
+ JPY: "ja-JP",
6481
+ CNY: "zh-CN",
6482
+ CHF: "de-CH"
6483
+ };
6484
+ function resolveCurrencyLocale(currencyCode, override) {
6485
+ return override ?? CURRENCY_LOCALE_BY_CODE[currencyCode] ?? "en";
6486
+ }
6487
+ function formatCurrencyAmount(amountCents, currency, options) {
6488
+ const currencyCode = currency.toUpperCase();
6489
+ const locale = resolveCurrencyLocale(currencyCode, options?.locale);
6490
+ try {
6491
+ const exactFormatter = new Intl.NumberFormat(locale, {
6492
+ style: "currency",
6493
+ currency: currencyCode
6494
+ });
6495
+ const fractionDigits = options?.decimals === "auto" ? {
6496
+ minimumFractionDigits: 0,
6497
+ maximumFractionDigits: exactFormatter.resolvedOptions().maximumFractionDigits
6498
+ } : {};
6499
+ return new Intl.NumberFormat(locale, {
6500
+ style: "currency",
6501
+ currency: currencyCode,
6502
+ ...fractionDigits
6503
+ }).format(amountCents / 100);
6504
+ } catch {
6505
+ return `${(amountCents / 100).toFixed(2)} ${currencyCode}`;
6506
+ }
6507
+ }
6508
+
6423
6509
  // ../core/src/event-pricing.ts
6424
6510
  function publicEventPricingDisplay(pricing) {
6425
6511
  return pricing.display;
@@ -6454,11 +6540,48 @@ function isFreePublicEventPriceDisplay(display) {
6454
6540
  return display.display.kind === "free";
6455
6541
  case "exact":
6456
6542
  case "from":
6543
+ case "range":
6457
6544
  case "mixed":
6458
6545
  case "unavailable":
6459
6546
  return false;
6460
6547
  }
6461
6548
  }
6549
+ function formatCoursePriceDisplayLabel(display, options) {
6550
+ switch (display.kind) {
6551
+ case "free":
6552
+ case "unavailable":
6553
+ return "Course";
6554
+ case "exact":
6555
+ return `Course (${formatCurrencyAmount(display.amount, display.currency, options)})`;
6556
+ case "from":
6557
+ return `Course (From ${formatCurrencyAmount(display.amount, display.currency, options)})`;
6558
+ default:
6559
+ return assertNever(display);
6560
+ }
6561
+ }
6562
+ function formatBookingPriceDisplay(display, options = {}) {
6563
+ switch (display.kind) {
6564
+ case "free":
6565
+ return "Free";
6566
+ case "exact":
6567
+ return formatCurrencyAmount(display.amount, display.currency, options);
6568
+ case "from":
6569
+ return `From ${formatCurrencyAmount(display.amount, display.currency, options)}`;
6570
+ case "range":
6571
+ return `${formatCurrencyAmount(display.minAmount, display.currency, options)} - ${formatCurrencyAmount(display.maxAmount, display.currency, options)}`;
6572
+ case "mixed":
6573
+ return display.paidToAmount > display.paidFromAmount ? `Free / ${formatCurrencyAmount(display.paidFromAmount, display.currency, options)} - ${formatCurrencyAmount(display.paidToAmount, display.currency, options)}` : `Free / ${formatCurrencyAmount(display.paidFromAmount, display.currency, options)}`;
6574
+ case "unavailable":
6575
+ return "Pricing unavailable";
6576
+ case "course":
6577
+ return formatCoursePriceDisplayLabel(display.display, options);
6578
+ default:
6579
+ return assertNever(display);
6580
+ }
6581
+ }
6582
+ function formatEventPricing(pricing, options = {}) {
6583
+ return formatBookingPriceDisplay(publicEventPricingDisplay(pricing), options);
6584
+ }
6462
6585
 
6463
6586
  // ../core/src/booking-date-time.ts
6464
6587
  var DEFAULT_LOCALE = "en-US";
@@ -6704,11 +6827,6 @@ function toLocationCoordinates(value) {
6704
6827
  };
6705
6828
  }
6706
6829
 
6707
- // ../core/src/assert-never.ts
6708
- function assertNever(value, message = "Unexpected variant") {
6709
- throw new Error(`${message}: ${String(value)}`);
6710
- }
6711
-
6712
6830
  // ../core/src/planner.ts
6713
6831
  var systemPlanningClock = {
6714
6832
  now: () => Date.now()
@@ -26932,15 +27050,53 @@ var newsletterFormFragment = defineFragment({
26932
27050
  title: "Newsletter Form",
26933
27051
  description: "Newsletter subscription form with preset field configurations.",
26934
27052
  fields: [
27053
+ {
27054
+ id: "destinationProvider",
27055
+ type: "select",
27056
+ label: "Send signups to",
27057
+ description: "Choose where new subscribers from this form should go.",
27058
+ defaultValue: "riverbank",
27059
+ required: true,
27060
+ ui: { intent: "behavior" },
27061
+ options: [
27062
+ { value: "riverbank", label: "Riverbank newsletter" }
27063
+ ]
27064
+ },
26935
27065
  {
26936
27066
  id: "listId",
26937
27067
  type: "reference",
26938
27068
  label: "Newsletter list",
26939
27069
  description: "Select the list new subscribers should be added to.",
26940
- required: true,
27070
+ required: false,
26941
27071
  referenceKind: "newsletterList",
26942
27072
  allowManualEntry: false,
26943
- ui: { intent: "behavior" }
27073
+ ui: {
27074
+ intent: "behavior",
27075
+ visibleWhen: { field: "destinationProvider", equals: "riverbank" }
27076
+ }
27077
+ },
27078
+ {
27079
+ id: "mailchimpAudienceId",
27080
+ type: "reference",
27081
+ label: "Mailchimp audience",
27082
+ description: "Choose the Mailchimp audience for new subscribers.",
27083
+ required: false,
27084
+ referenceKind: "mailchimpAudience",
27085
+ allowManualEntry: false,
27086
+ ui: {
27087
+ intent: "behavior",
27088
+ visibleWhen: { field: "destinationProvider", equals: "mailchimp" }
27089
+ }
27090
+ },
27091
+ {
27092
+ id: "mailchimpTags",
27093
+ type: "text",
27094
+ label: "Mailchimp tags",
27095
+ description: "Optional tags to apply in Mailchimp, separated by commas or semicolons.",
27096
+ ui: {
27097
+ intent: "behavior",
27098
+ visibleWhen: { field: "destinationProvider", equals: "mailchimp" }
27099
+ }
26944
27100
  },
26945
27101
  {
26946
27102
  id: "preset",
@@ -26987,13 +27143,18 @@ var newsletterFormFragment = defineFragment({
26987
27143
  id: "tags",
26988
27144
  type: "text",
26989
27145
  label: "Tags (optional)",
26990
- description: "Optional tags to apply on subscribe (comma or semicolon separated)."
27146
+ description: "Optional tags to apply on subscribe (comma or semicolon separated).",
27147
+ ui: {
27148
+ intent: "behavior",
27149
+ visibleWhen: { field: "destinationProvider", equals: "riverbank" }
27150
+ }
26991
27151
  }
26992
27152
  ],
26993
27153
  layout: [
26994
27154
  el(
26995
27155
  "newsletter-form",
26996
27156
  withApiBindings({
27157
+ destinationProvider: { $bind: { from: "destinationProvider" } },
26997
27158
  listId: { $bind: { from: "listId" } },
26998
27159
  preset: { $bind: { from: "preset" } },
26999
27160
  includePhone: { $bind: { from: "includePhone" } },
@@ -32916,10 +33077,10 @@ var appointmentBookingBlockDefinition = {
32916
33077
  };
32917
33078
 
32918
33079
  // ../blocks/src/system/blocks/event-registration.ts
32919
- import { z as z49 } from "zod";
33080
+ import { z as z50 } from "zod";
32920
33081
 
32921
33082
  // ../blocks/src/system/blocks/events/shared/schemas.ts
32922
- import { z as z45 } from "zod";
33083
+ import { z as z46 } from "zod";
32923
33084
 
32924
33085
  // ../blocks/src/lib/media.ts
32925
33086
  import z42 from "zod";
@@ -32997,296 +33158,393 @@ var mediaSchema2 = z42.discriminatedUnion("type", [
32997
33158
  archiveMediaSchema
32998
33159
  ]);
32999
33160
 
33000
- // ../blocks/src/system/blocks/shared/bookingPaymentTerms.ts
33161
+ // ../blocks/src/system/manifest/richTextSchema.ts
33001
33162
  import { z as z43 } from "zod";
33002
- var bookingDepositRefundPolicySchema = z43.enum([
33163
+ var TipTapMarkSchema = z43.object({
33164
+ type: z43.string(),
33165
+ attrs: z43.record(z43.string(), z43.unknown()).optional()
33166
+ });
33167
+ var TipTapNodeSchema = z43.lazy(
33168
+ () => z43.object({
33169
+ type: z43.string(),
33170
+ content: z43.array(TipTapNodeSchema).optional(),
33171
+ text: z43.string().optional(),
33172
+ attrs: z43.record(z43.string(), z43.unknown()).optional(),
33173
+ marks: z43.array(TipTapMarkSchema).optional()
33174
+ })
33175
+ );
33176
+ var RichTextValueSchema = z43.union([
33177
+ // Canonical: TipTap document directly
33178
+ TipTapNodeSchema,
33179
+ // Legacy (read-tolerance only): wrapped in { doc: {...} }
33180
+ z43.object({
33181
+ doc: TipTapNodeSchema
33182
+ })
33183
+ ]);
33184
+ var RichTextDocSchema = z43.object({
33185
+ type: z43.literal("doc"),
33186
+ content: z43.array(TipTapNodeSchema)
33187
+ });
33188
+ function unwrapRichTextRoot(value) {
33189
+ if (!isRecord4(value)) return value;
33190
+ if (!("doc" in value)) return value;
33191
+ const inner = value.doc;
33192
+ if (isRecord4(inner) && inner.type === "doc") return inner;
33193
+ return value;
33194
+ }
33195
+ function createHardBreakNode() {
33196
+ return { type: "hardBreak" };
33197
+ }
33198
+ function parseRichTextInlineMarkdown(text2) {
33199
+ const out = [];
33200
+ const pushText = (value, marks) => {
33201
+ if (!value) return;
33202
+ out.push(
33203
+ marks && marks.length > 0 ? { type: "text", text: value, marks } : { type: "text", text: value }
33204
+ );
33205
+ };
33206
+ let rest = text2;
33207
+ while (rest.length > 0) {
33208
+ const start = rest.indexOf("**");
33209
+ if (start === -1) {
33210
+ pushText(rest);
33211
+ break;
33212
+ }
33213
+ const end = rest.indexOf("**", start + 2);
33214
+ if (end === -1) {
33215
+ pushText(rest);
33216
+ break;
33217
+ }
33218
+ pushText(rest.slice(0, start));
33219
+ pushText(rest.slice(start + 2, end), [{ type: "bold" }]);
33220
+ rest = rest.slice(end + 2);
33221
+ }
33222
+ return out;
33223
+ }
33224
+ function parseRichTextParagraphInlineMarkdown(text2) {
33225
+ return text2.split("\n").flatMap((line, index) => {
33226
+ const lineNodes = parseRichTextInlineMarkdown(line.trim());
33227
+ return index === 0 ? lineNodes : [createHardBreakNode(), ...lineNodes];
33228
+ });
33229
+ }
33230
+ function createRichTextDocFromMarkdown(markdown) {
33231
+ const normalized = markdown.replace(/\r\n/g, "\n").trim();
33232
+ if (!normalized) return { type: "doc", content: [] };
33233
+ const paragraphs = normalized.split(/\n{2,}/).map((paragraph) => paragraph.trim()).filter(Boolean);
33234
+ return {
33235
+ type: "doc",
33236
+ content: paragraphs.map((paragraph) => {
33237
+ const inline2 = parseRichTextParagraphInlineMarkdown(paragraph);
33238
+ return inline2.length > 0 ? { type: "paragraph", content: inline2 } : { type: "paragraph" };
33239
+ })
33240
+ };
33241
+ }
33242
+
33243
+ // ../blocks/src/system/blocks/shared/bookingPaymentTerms.ts
33244
+ import { z as z44 } from "zod";
33245
+ var bookingDepositRefundPolicySchema = z44.enum([
33003
33246
  "refundable",
33004
33247
  "non_refundable"
33005
33248
  ]);
33006
- var bookingInstalmentPlanSchema = z43.union([
33007
- z43.object({
33008
- kind: z43.literal("deposit_plus_one_remainder"),
33009
- depositAmountCents: z43.number().int().min(0),
33249
+ var bookingInstalmentPlanSchema = z44.union([
33250
+ z44.object({
33251
+ kind: z44.literal("deposit_plus_one_remainder"),
33252
+ depositAmountCents: z44.number().int().min(0),
33010
33253
  depositRefundability: bookingDepositRefundPolicySchema,
33011
- remainderDueCount: z43.number().int().positive(),
33012
- intervalUnit: z43.enum(["day", "week", "month"])
33254
+ remainderDueCount: z44.number().int().positive(),
33255
+ intervalUnit: z44.enum(["day", "week", "month"])
33013
33256
  }),
33014
- z43.object({
33015
- kind: z43.literal("deposit_plus_scheduled_instalments"),
33016
- depositAmountCents: z43.number().int().min(0),
33257
+ z44.object({
33258
+ kind: z44.literal("deposit_plus_scheduled_instalments"),
33259
+ depositAmountCents: z44.number().int().min(0),
33017
33260
  depositRefundability: bookingDepositRefundPolicySchema,
33018
- instalmentCount: z43.number().int().positive(),
33019
- intervalCount: z43.number().int().positive(),
33020
- intervalUnit: z43.enum(["day", "week", "month"])
33261
+ instalmentCount: z44.number().int().positive(),
33262
+ intervalCount: z44.number().int().positive(),
33263
+ intervalUnit: z44.enum(["day", "week", "month"])
33021
33264
  }),
33022
- z43.object({
33023
- kind: z43.literal("equal_scheduled_instalments"),
33024
- instalmentCount: z43.number().int().positive(),
33025
- intervalCount: z43.number().int().positive(),
33026
- intervalUnit: z43.enum(["day", "week", "month"])
33265
+ z44.object({
33266
+ kind: z44.literal("equal_scheduled_instalments"),
33267
+ instalmentCount: z44.number().int().positive(),
33268
+ intervalCount: z44.number().int().positive(),
33269
+ intervalUnit: z44.enum(["day", "week", "month"])
33027
33270
  })
33028
33271
  ]);
33029
- var bookingFlexibleBalanceDueDateRuleSchema = z43.union([
33030
- z43.object({
33031
- kind: z43.literal("relative_to_start_date"),
33032
- daysBeforeStart: z43.number().int().positive()
33272
+ var bookingFlexibleBalanceDueDateRuleSchema = z44.union([
33273
+ z44.object({
33274
+ kind: z44.literal("relative_to_start_date"),
33275
+ daysBeforeStart: z44.number().int().positive()
33033
33276
  }),
33034
- z43.object({
33035
- kind: z43.literal("fixed_calendar_date"),
33036
- dueAt: z43.string().datetime()
33277
+ z44.object({
33278
+ kind: z44.literal("fixed_calendar_date"),
33279
+ dueAt: z44.string().datetime()
33037
33280
  })
33038
33281
  ]);
33039
- var bookingFlexibleBalanceConfigSchema = z43.object({
33040
- upfrontAmountCents: z43.number().int().min(0),
33282
+ var bookingFlexibleBalanceConfigSchema = z44.object({
33283
+ upfrontAmountCents: z44.number().int().min(0),
33041
33284
  dueDateRule: bookingFlexibleBalanceDueDateRuleSchema,
33042
33285
  depositRefundability: bookingDepositRefundPolicySchema
33043
33286
  });
33044
- var blockBookingPaymentCollectionOptionSchema = z43.union([
33045
- z43.object({
33046
- kind: z43.literal("upfront")
33287
+ var blockBookingPaymentCollectionOptionSchema = z44.union([
33288
+ z44.object({
33289
+ kind: z44.literal("upfront")
33047
33290
  }),
33048
- z43.object({
33049
- kind: z43.literal("deferred_manual")
33291
+ z44.object({
33292
+ kind: z44.literal("deferred_manual")
33050
33293
  }),
33051
- z43.object({
33052
- kind: z43.literal("instalment_plan"),
33294
+ z44.object({
33295
+ kind: z44.literal("instalment_plan"),
33053
33296
  plan: bookingInstalmentPlanSchema
33054
33297
  }),
33055
- z43.object({
33056
- kind: z43.literal("flexible_balance"),
33298
+ z44.object({
33299
+ kind: z44.literal("flexible_balance"),
33057
33300
  config: bookingFlexibleBalanceConfigSchema
33058
33301
  })
33059
33302
  ]);
33060
- var blockBookingPaymentTermsSchema = z43.object({
33061
- allowedOptions: z43.array(blockBookingPaymentCollectionOptionSchema).min(1)
33303
+ var blockBookingPaymentTermsSchema = z44.object({
33304
+ allowedOptions: z44.array(blockBookingPaymentCollectionOptionSchema).min(1)
33062
33305
  });
33063
33306
 
33064
33307
  // ../blocks/src/system/blocks/courses/shared/schemas.ts
33065
- import { z as z44 } from "zod";
33066
- var courseVenueSchema = z44.object({
33067
- id: z44.string(),
33068
- name: z44.string(),
33069
- address: z44.string().nullable()
33308
+ import { z as z45 } from "zod";
33309
+ var courseVenueSchema = z45.object({
33310
+ id: z45.string(),
33311
+ name: z45.string(),
33312
+ address: z45.string().nullable()
33070
33313
  });
33071
- var courseSessionSchema = z44.object({
33072
- id: z44.string(),
33073
- startsAt: z44.string(),
33074
- endsAt: z44.string(),
33075
- timeZone: z44.string(),
33076
- capacityOverride: z44.number().nullable().optional(),
33077
- overrides: z44.record(z44.string(), z44.unknown()).nullable().optional()
33314
+ var courseSessionSchema = z45.object({
33315
+ id: z45.string(),
33316
+ startsAt: z45.string(),
33317
+ endsAt: z45.string(),
33318
+ timeZone: z45.string(),
33319
+ capacityOverride: z45.number().nullable().optional(),
33320
+ overrides: z45.record(z45.string(), z45.unknown()).nullable().optional()
33078
33321
  });
33079
- var courseTeamMemberSummarySchema = z44.object({
33080
- id: z44.string(),
33081
- name: z44.string(),
33082
- roleLabel: z44.string().nullable(),
33083
- summary: z44.string().nullable(),
33084
- profilePath: z44.string().nullable()
33322
+ var courseTeamMemberSummarySchema = z45.object({
33323
+ id: z45.string(),
33324
+ name: z45.string(),
33325
+ roleLabel: z45.string().nullable(),
33326
+ summary: z45.string().nullable(),
33327
+ profilePath: z45.string().nullable()
33085
33328
  });
33086
- var coursePricingOptionSchema = z44.object({
33087
- id: z44.string(),
33088
- name: z44.string(),
33089
- description: z44.string().nullable(),
33090
- priceAmount: z44.number(),
33091
- isActive: z44.boolean(),
33092
- sortOrder: z44.number(),
33093
- capacityLimit: z44.number().nullable(),
33094
- saleStartsAt: z44.string().nullable(),
33095
- saleEndsAt: z44.string().nullable(),
33096
- attendanceScope: z44.enum(["in_person", "online", "both"]).nullable().optional()
33329
+ var coursePricingOptionSchema = z45.object({
33330
+ id: z45.string(),
33331
+ name: z45.string(),
33332
+ description: z45.string().nullable(),
33333
+ priceAmount: z45.number(),
33334
+ isActive: z45.boolean(),
33335
+ sortOrder: z45.number(),
33336
+ capacityLimit: z45.number().nullable(),
33337
+ saleStartsAt: z45.string().nullable(),
33338
+ saleEndsAt: z45.string().nullable(),
33339
+ attendanceScope: z45.enum(["in_person", "online", "both"]).nullable().optional()
33097
33340
  });
33098
- var coursePricingSchema = z44.object({
33099
- bookingRequirement: z44.enum(["none", "required"]),
33100
- pricingStrategy: z44.enum(["free", "single", "tiered"]),
33101
- currency: z44.string(),
33102
- singlePriceAmount: z44.number().nullable(),
33341
+ var coursePricingSchema = z45.object({
33342
+ bookingRequirement: z45.enum(["none", "required"]),
33343
+ pricingStrategy: z45.enum(["free", "single", "tiered"]),
33344
+ currency: z45.string(),
33345
+ singlePriceAmount: z45.number().nullable(),
33103
33346
  paymentTerms: blockBookingPaymentTermsSchema,
33104
- options: z44.array(coursePricingOptionSchema)
33347
+ options: z45.array(coursePricingOptionSchema)
33105
33348
  });
33106
- var publicCourseSchema = z44.object({
33107
- id: z44.string(),
33108
- title: z44.string(),
33109
- slug: z44.string(),
33110
- description: z44.unknown().nullable(),
33111
- teamMembers: z44.array(courseTeamMemberSummarySchema).optional(),
33112
- enrollmentOpen: z44.boolean(),
33349
+ var publicCourseSchema = z45.object({
33350
+ id: z45.string(),
33351
+ title: z45.string(),
33352
+ slug: z45.string(),
33353
+ description: z45.unknown().nullable(),
33354
+ teamMembers: z45.array(courseTeamMemberSummarySchema).optional(),
33355
+ enrollmentOpen: z45.boolean(),
33113
33356
  pricing: coursePricingSchema.optional(),
33114
- priceCents: z44.number().nullable(),
33115
- currency: z44.string(),
33357
+ priceCents: z45.number().nullable(),
33358
+ currency: z45.string(),
33116
33359
  paymentTerms: blockBookingPaymentTermsSchema,
33117
- enrollmentCapacity: z44.number().nullable(),
33118
- acceptsMemberships: z44.boolean(),
33119
- status: z44.enum(["active", "draft", "cancelled"]),
33120
- sessionsCount: z44.number(),
33121
- enrolledCount: z44.number(),
33122
- availableSpots: z44.number().nullable(),
33123
- sessions: z44.array(courseSessionSchema),
33360
+ enrollmentCapacity: z45.number().nullable(),
33361
+ acceptsMemberships: z45.boolean(),
33362
+ status: z45.enum(["active", "draft", "cancelled"]),
33363
+ sessionsCount: z45.number(),
33364
+ enrolledCount: z45.number(),
33365
+ availableSpots: z45.number().nullable(),
33366
+ sessions: z45.array(courseSessionSchema),
33124
33367
  venue: courseVenueSchema.nullable(),
33125
- contentEntryId: z44.string().nullable()
33368
+ contentEntryId: z45.string().nullable()
33126
33369
  });
33127
- var publicCoursesArraySchema = z44.array(publicCourseSchema);
33370
+ var publicCoursesArraySchema = z45.array(publicCourseSchema);
33128
33371
 
33129
33372
  // ../blocks/src/system/blocks/events/shared/schemas.ts
33130
- var eventPresetSchema = z45.enum(["event", "class", "workshop", "retreat", "performance"]);
33131
- var eventScheduleScopeSchema = z45.enum(["recurring", "oneOff"]);
33132
- var eventDestinationModeSchema = z45.enum(["cms-managed", "system-managed"]);
33133
- var eventVenueSchema = z45.object({
33134
- id: z45.string(),
33135
- name: z45.string(),
33136
- address: z45.string().nullable(),
33137
- location: z45.object({
33138
- lat: z45.number(),
33139
- lng: z45.number()
33373
+ var eventPresetSchema = z46.enum(["event", "class", "workshop", "retreat", "performance"]);
33374
+ var eventScheduleScopeSchema = z46.enum(["recurring", "oneOff"]);
33375
+ var eventDestinationModeSchema = z46.enum(["cms-managed", "system-managed"]);
33376
+ var eventVenueSchema = z46.object({
33377
+ id: z46.string(),
33378
+ name: z46.string(),
33379
+ address: z46.string().nullable(),
33380
+ location: z46.object({
33381
+ lat: z46.number(),
33382
+ lng: z46.number()
33140
33383
  }).nullable()
33141
33384
  });
33142
- var eventCategorySchema = z45.object({
33143
- id: z45.string(),
33144
- name: z45.string(),
33145
- color: z45.string().nullable()
33385
+ var eventCategorySchema = z46.object({
33386
+ id: z46.string(),
33387
+ name: z46.string(),
33388
+ color: z46.string().nullable()
33146
33389
  });
33147
- var pricingTypeSchema = z45.enum(["free", "paid"]);
33148
- var accessRestrictionSchema = z45.enum(["none", "category"]);
33149
- var eventPricingModeSchema = z45.enum(["single", "ticket_types"]);
33150
- var publicCoursePriceDisplaySchema = z45.discriminatedUnion("kind", [
33151
- z45.object({ kind: z45.literal("free"), currency: z45.string() }),
33152
- z45.object({ kind: z45.literal("exact"), amount: z45.number(), currency: z45.string() }),
33153
- z45.object({ kind: z45.literal("from"), amount: z45.number(), currency: z45.string() }),
33154
- z45.object({ kind: z45.literal("unavailable"), currency: z45.string() })
33390
+ var pricingTypeSchema = z46.enum(["free", "paid"]);
33391
+ var accessRestrictionSchema = z46.enum(["none", "category"]);
33392
+ var eventPricingModeSchema = z46.enum(["single", "ticket_types"]);
33393
+ var publicCoursePriceDisplaySchema = z46.discriminatedUnion("kind", [
33394
+ z46.object({ kind: z46.literal("free"), currency: z46.string() }),
33395
+ z46.object({ kind: z46.literal("exact"), amount: z46.number(), currency: z46.string() }),
33396
+ z46.object({ kind: z46.literal("from"), amount: z46.number(), currency: z46.string() }),
33397
+ z46.object({ kind: z46.literal("unavailable"), currency: z46.string() })
33155
33398
  ]);
33156
- var publicEventPriceDisplaySchema = z45.discriminatedUnion("kind", [
33157
- z45.object({ kind: z45.literal("free"), currency: z45.string() }),
33158
- z45.object({ kind: z45.literal("exact"), amount: z45.number(), currency: z45.string() }),
33159
- z45.object({ kind: z45.literal("from"), amount: z45.number(), currency: z45.string() }),
33160
- z45.object({ kind: z45.literal("mixed"), paidFromAmount: z45.number(), currency: z45.string() }),
33161
- z45.object({ kind: z45.literal("unavailable"), currency: z45.string() }),
33162
- z45.object({ kind: z45.literal("course"), display: publicCoursePriceDisplaySchema })
33399
+ var publicEventPriceDisplaySchema = z46.discriminatedUnion("kind", [
33400
+ z46.object({ kind: z46.literal("free"), currency: z46.string() }),
33401
+ z46.object({ kind: z46.literal("exact"), amount: z46.number(), currency: z46.string() }),
33402
+ z46.object({ kind: z46.literal("from"), amount: z46.number(), currency: z46.string() }),
33403
+ z46.object({ kind: z46.literal("range"), minAmount: z46.number(), maxAmount: z46.number(), currency: z46.string() }),
33404
+ z46.object({
33405
+ kind: z46.literal("mixed"),
33406
+ paidFromAmount: z46.number(),
33407
+ paidToAmount: z46.number(),
33408
+ currency: z46.string()
33409
+ }),
33410
+ z46.object({ kind: z46.literal("unavailable"), currency: z46.string() }),
33411
+ z46.object({ kind: z46.literal("course"), display: publicCoursePriceDisplaySchema })
33163
33412
  ]);
33164
- var publicEventTicketTypePriceDisplaySchema = z45.union([
33165
- z45.object({ kind: z45.literal("free"), currency: z45.string() }),
33166
- z45.object({ kind: z45.literal("exact"), amount: z45.number(), currency: z45.string() }),
33167
- z45.object({ kind: z45.literal("from"), amount: z45.number(), currency: z45.string() }),
33168
- z45.object({ kind: z45.literal("mixed"), paidFromAmount: z45.number(), currency: z45.string() }),
33169
- z45.object({ kind: z45.literal("unavailable"), currency: z45.string() })
33413
+ var publicEventTicketTypePriceDisplaySchema = z46.union([
33414
+ z46.object({ kind: z46.literal("free"), currency: z46.string() }),
33415
+ z46.object({ kind: z46.literal("exact"), amount: z46.number(), currency: z46.string() }),
33416
+ z46.object({ kind: z46.literal("from"), amount: z46.number(), currency: z46.string() }),
33417
+ z46.object({ kind: z46.literal("range"), minAmount: z46.number(), maxAmount: z46.number(), currency: z46.string() }),
33418
+ z46.object({
33419
+ kind: z46.literal("mixed"),
33420
+ paidFromAmount: z46.number(),
33421
+ paidToAmount: z46.number(),
33422
+ currency: z46.string()
33423
+ }),
33424
+ z46.object({ kind: z46.literal("unavailable"), currency: z46.string() })
33170
33425
  ]);
33171
- var publicEventAttendanceModeSchema = z45.enum(["in_person", "online"]);
33172
- var publicEventAttendanceModeAvailabilitySchema = z45.object({
33426
+ var publicEventAttendanceModeSchema = z46.enum(["in_person", "online"]);
33427
+ var publicEventAttendanceModeAvailabilitySchema = z46.object({
33173
33428
  mode: publicEventAttendanceModeSchema,
33174
- capacity: z45.number().nullable(),
33175
- registeredCount: z45.number(),
33176
- availableSpots: z45.number().nullable(),
33177
- waitlistEnabled: z45.boolean()
33429
+ capacity: z46.number().nullable(),
33430
+ registeredCount: z46.number(),
33431
+ availableSpots: z46.number().nullable(),
33432
+ waitlistEnabled: z46.boolean()
33178
33433
  });
33179
- var publicEventTicketTypeAvailabilitySchema = z45.union([
33180
- z45.object({
33181
- kind: z45.literal("available"),
33182
- remainingCapacity: z45.number().nullable()
33434
+ var publicEventTicketTypeAvailabilitySchema = z46.union([
33435
+ z46.object({
33436
+ kind: z46.literal("available"),
33437
+ remainingCapacity: z46.number().nullable()
33183
33438
  }),
33184
- z45.object({
33185
- kind: z45.literal("unavailable"),
33186
- reason: z45.enum(["inactive", "not_on_sale_yet", "sale_ended", "sold_out", "event_sold_out"]),
33187
- remainingCapacity: z45.number().nullable()
33439
+ z46.object({
33440
+ kind: z46.literal("unavailable"),
33441
+ reason: z46.enum(["inactive", "not_on_sale_yet", "sale_ended", "sold_out", "event_sold_out"]),
33442
+ remainingCapacity: z46.number().nullable()
33188
33443
  })
33189
33444
  ]);
33190
- var publicEventTicketTypeSchema = z45.object({
33191
- id: z45.string(),
33192
- siteId: z45.string(),
33193
- eventSeriesId: z45.string(),
33194
- name: z45.string(),
33195
- description: z45.string().nullable(),
33196
- priceAmount: z45.number(),
33197
- isActive: z45.boolean(),
33198
- sortOrder: z45.number(),
33199
- capacityMode: z45.enum(["limited", "unlimited"]),
33200
- capacityLimit: z45.number().nullable(),
33201
- attendanceScope: z45.enum(["in_person", "online", "both"]).optional(),
33202
- saleStartsAt: z45.string().nullable(),
33203
- saleEndsAt: z45.string().nullable(),
33445
+ var publicEventTicketTypeSchema = z46.object({
33446
+ id: z46.string(),
33447
+ siteId: z46.string(),
33448
+ eventSeriesId: z46.string(),
33449
+ name: z46.string(),
33450
+ description: z46.string().nullable(),
33451
+ priceAmount: z46.number(),
33452
+ isActive: z46.boolean(),
33453
+ sortOrder: z46.number(),
33454
+ capacityMode: z46.enum(["limited", "unlimited"]),
33455
+ capacityLimit: z46.number().nullable(),
33456
+ attendanceScope: z46.enum(["in_person", "online", "both"]).optional(),
33457
+ saleStartsAt: z46.string().nullable(),
33458
+ saleEndsAt: z46.string().nullable(),
33204
33459
  availability: publicEventTicketTypeAvailabilitySchema,
33205
- createdAt: z45.string(),
33206
- updatedAt: z45.string()
33460
+ createdAt: z46.string(),
33461
+ updatedAt: z46.string()
33207
33462
  });
33208
- var publicEventPricingSchema = z45.discriminatedUnion("kind", [
33209
- z45.object({
33210
- kind: z45.literal("drop_in"),
33211
- currency: z45.string(),
33212
- display: z45.object({ kind: z45.literal("free"), currency: z45.string() })
33463
+ var publicEventPricingSchema = z46.discriminatedUnion("kind", [
33464
+ z46.object({
33465
+ kind: z46.literal("drop_in"),
33466
+ currency: z46.string(),
33467
+ display: z46.object({ kind: z46.literal("free"), currency: z46.string() })
33213
33468
  }),
33214
- z45.object({
33215
- kind: z45.literal("free_registration"),
33216
- currency: z45.string(),
33217
- display: z45.object({ kind: z45.literal("free"), currency: z45.string() })
33469
+ z46.object({
33470
+ kind: z46.literal("free_registration"),
33471
+ currency: z46.string(),
33472
+ display: z46.object({ kind: z46.literal("free"), currency: z46.string() })
33218
33473
  }),
33219
- z45.object({
33220
- kind: z45.literal("single_paid"),
33221
- amount: z45.number(),
33222
- currency: z45.string(),
33223
- display: z45.object({ kind: z45.literal("exact"), amount: z45.number(), currency: z45.string() })
33474
+ z46.object({
33475
+ kind: z46.literal("single_paid"),
33476
+ amount: z46.number(),
33477
+ currency: z46.string(),
33478
+ display: z46.object({ kind: z46.literal("exact"), amount: z46.number(), currency: z46.string() })
33224
33479
  }),
33225
- z45.object({
33226
- kind: z45.literal("ticket_types"),
33227
- currency: z45.string(),
33228
- ticketTypes: z45.array(publicEventTicketTypeSchema),
33480
+ z46.object({
33481
+ kind: z46.literal("ticket_types"),
33482
+ currency: z46.string(),
33483
+ ticketTypes: z46.array(publicEventTicketTypeSchema),
33229
33484
  display: publicEventTicketTypePriceDisplaySchema
33230
33485
  }),
33231
- z45.object({
33232
- kind: z45.literal("course"),
33233
- display: z45.object({ kind: z45.literal("course"), display: publicCoursePriceDisplaySchema })
33486
+ z46.object({
33487
+ kind: z46.literal("course"),
33488
+ display: z46.object({ kind: z46.literal("course"), display: publicCoursePriceDisplaySchema })
33234
33489
  })
33235
33490
  ]);
33236
- var publicTeamMemberSummarySchema = z45.object({
33237
- id: z45.string(),
33238
- name: z45.string(),
33239
- roleLabel: z45.string().nullable(),
33240
- summary: z45.string().nullable(),
33241
- profilePath: z45.string().nullable()
33491
+ var publicTeamMemberSummarySchema = z46.object({
33492
+ id: z46.string(),
33493
+ name: z46.string(),
33494
+ roleLabel: z46.string().nullable(),
33495
+ summary: z46.string().nullable(),
33496
+ profilePath: z46.string().nullable()
33242
33497
  });
33243
- var publicEventSchema = z45.object({
33244
- kind: z45.enum(["event", "course_session"]).optional(),
33498
+ var publicEventSchema = z46.object({
33499
+ kind: z46.enum(["event", "course_session"]).optional(),
33245
33500
  eventPreset: eventPresetSchema.optional(),
33246
33501
  eventDestinationMode: eventDestinationModeSchema.optional(),
33247
33502
  scheduleScope: eventScheduleScopeSchema.optional(),
33248
- id: z45.string(),
33249
- occurrenceId: z45.string(),
33250
- seriesId: z45.string(),
33251
- title: z45.string(),
33252
- description: z45.string().nullable(),
33253
- presentation: z45.object({
33254
- cardTitleOverride: z45.string().nullable().optional(),
33255
- summary: z45.string().nullable().optional(),
33503
+ id: z46.string(),
33504
+ occurrenceId: z46.string(),
33505
+ seriesId: z46.string(),
33506
+ title: z46.string(),
33507
+ description: z46.string().nullable(),
33508
+ content: z46.object({
33509
+ body: RichTextDocSchema.nullable().optional()
33510
+ }).optional(),
33511
+ presentation: z46.object({
33512
+ cardTitleOverride: z46.string().nullable().optional(),
33513
+ summary: z46.string().nullable().optional(),
33256
33514
  image: mediaSchema2.nullable().optional()
33257
33515
  }).optional(),
33258
- slug: z45.string(),
33259
- path: z45.string(),
33260
- requiresRegistration: z45.boolean(),
33261
- deliveryMode: z45.enum(["in_person", "online", "hybrid"]),
33262
- attendanceModes: z45.array(publicEventAttendanceModeAvailabilitySchema),
33263
- startsAt: z45.string(),
33264
- endsAt: z45.string(),
33265
- capacity: z45.number().nullable(),
33266
- registeredCount: z45.number(),
33267
- availableSpots: z45.number().nullable(),
33268
- waitlistEnabled: z45.boolean(),
33516
+ slug: z46.string(),
33517
+ path: z46.string(),
33518
+ requiresRegistration: z46.boolean(),
33519
+ deliveryMode: z46.enum(["in_person", "online", "hybrid"]),
33520
+ attendanceModes: z46.array(publicEventAttendanceModeAvailabilitySchema),
33521
+ startsAt: z46.string(),
33522
+ endsAt: z46.string(),
33523
+ capacity: z46.number().nullable(),
33524
+ registeredCount: z46.number(),
33525
+ availableSpots: z46.number().nullable(),
33526
+ waitlistEnabled: z46.boolean(),
33269
33527
  venue: eventVenueSchema.nullable(),
33270
33528
  eventCategory: eventCategorySchema.nullable(),
33271
- teamMembers: z45.array(publicTeamMemberSummarySchema).optional(),
33272
- status: z45.enum(["active", "draft", "archived"]).optional(),
33273
- timeZone: z45.string(),
33529
+ teamMembers: z46.array(publicTeamMemberSummarySchema).optional(),
33530
+ status: z46.enum(["active", "draft", "archived"]).optional(),
33531
+ timeZone: z46.string(),
33274
33532
  pricing: publicEventPricingSchema,
33275
33533
  paymentTerms: blockBookingPaymentTermsSchema,
33276
33534
  accessRestriction: accessRestrictionSchema,
33277
- allowedCategoryIds: z45.array(z45.string()),
33278
- requireGuestDetails: z45.boolean().optional(),
33279
- acceptsPasses: z45.boolean().optional(),
33280
- acceptsMemberships: z45.boolean().optional(),
33281
- course: z45.object({
33282
- id: z45.string(),
33535
+ allowedCategoryIds: z46.array(z46.string()),
33536
+ requireGuestDetails: z46.boolean().optional(),
33537
+ acceptsPasses: z46.boolean().optional(),
33538
+ acceptsMemberships: z46.boolean().optional(),
33539
+ course: z46.object({
33540
+ id: z46.string(),
33283
33541
  pricing: coursePricingSchema.optional(),
33284
- priceCents: z45.number().nullable(),
33285
- currency: z45.string(),
33286
- enrollmentOpen: z45.boolean()
33542
+ priceCents: z46.number().nullable(),
33543
+ currency: z46.string(),
33544
+ enrollmentOpen: z46.boolean()
33287
33545
  }).nullable().optional()
33288
33546
  });
33289
- var publicEventsArraySchema = z45.array(publicEventSchema);
33547
+ var publicEventsArraySchema = z46.array(publicEventSchema);
33290
33548
 
33291
33549
  // ../blocks/src/system/blocks/events/shared/fields.ts
33292
33550
  var cardVariantOptions2 = cardVariantRoleValues.map((value) => ({
@@ -33490,19 +33748,19 @@ function normalizeEventStaffMemberId(value) {
33490
33748
  }
33491
33749
 
33492
33750
  // ../blocks/src/system/blocks/event-registration.shared.ts
33493
- import { z as z46 } from "zod";
33494
- var occurrenceContextSchema = z46.object({
33495
- id: z46.string(),
33496
- seriesId: z46.string(),
33497
- startsAt: z46.string(),
33498
- endsAt: z46.string(),
33499
- timeZone: z46.string(),
33500
- capacityOverride: z46.number().nullable().optional(),
33501
- overrides: z46.record(z46.string(), z46.unknown()).nullable().optional()
33751
+ import { z as z47 } from "zod";
33752
+ var occurrenceContextSchema = z47.object({
33753
+ id: z47.string(),
33754
+ seriesId: z47.string(),
33755
+ startsAt: z47.string(),
33756
+ endsAt: z47.string(),
33757
+ timeZone: z47.string(),
33758
+ capacityOverride: z47.number().nullable().optional(),
33759
+ overrides: z47.record(z47.string(), z47.unknown()).nullable().optional()
33502
33760
  }).nullable();
33503
33761
 
33504
33762
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
33505
- import { z as z48 } from "zod";
33763
+ import { z as z49 } from "zod";
33506
33764
 
33507
33765
  // ../blocks/src/system/constants/events.ts
33508
33766
  var EVENT_CONTENT_TYPE_SLUGS = ["event", "events"];
@@ -33600,10 +33858,21 @@ function readLegacyPriceDisplay(value, currency) {
33600
33858
  amount: readAmount(value.amount) ?? 0,
33601
33859
  currency: displayCurrency
33602
33860
  } : { kind: "unavailable", currency };
33861
+ case "range": {
33862
+ const minAmount = readAmount(value.minAmount);
33863
+ const maxAmount = readAmount(value.maxAmount);
33864
+ return minAmount !== null && maxAmount !== null ? {
33865
+ kind: "range",
33866
+ minAmount,
33867
+ maxAmount,
33868
+ currency: displayCurrency
33869
+ } : { kind: "unavailable", currency };
33870
+ }
33603
33871
  case "mixed":
33604
33872
  return readAmount(value.paidFromAmount) !== null ? {
33605
33873
  kind: "mixed",
33606
33874
  paidFromAmount: readAmount(value.paidFromAmount) ?? 0,
33875
+ paidToAmount: readAmount(value.paidToAmount) ?? readAmount(value.paidFromAmount) ?? 0,
33607
33876
  currency: displayCurrency
33608
33877
  } : { kind: "unavailable", currency };
33609
33878
  case "unavailable":
@@ -33645,16 +33914,16 @@ function readAmount(value) {
33645
33914
  }
33646
33915
 
33647
33916
  // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
33648
- import { z as z47 } from "zod";
33649
- var previewStageSchema = z47.enum(["preview", "published"]);
33650
- var registrationButtonVariantSchema = z47.enum(["primary", "secondary", "outline"]);
33651
- var eventButtonVariantSchema = z47.enum(["primary", "secondary", "outline", "link"]);
33652
- var eventLayoutSchema = z47.enum(eventCalendarListLayoutValues);
33653
- var eventCalendarDisplayModeSchema = z47.enum(eventCalendarDisplayModeValues);
33654
- var columnOptionSchema = z47.enum(["2", "3", "4"]);
33655
- var weekStartSchema = z47.enum(["sunday", "monday"]);
33656
- var filterAutoShowSchema = z47.enum(["auto", "always", "never"]);
33657
- var calendarTabViewsSchema = z47.enum(["both", "month", "week"]);
33917
+ import { z as z48 } from "zod";
33918
+ var previewStageSchema = z48.enum(["preview", "published"]);
33919
+ var registrationButtonVariantSchema = z48.enum(["primary", "secondary", "outline"]);
33920
+ var eventButtonVariantSchema = z48.enum(["primary", "secondary", "outline", "link"]);
33921
+ var eventLayoutSchema = z48.enum(eventCalendarListLayoutValues);
33922
+ var eventCalendarDisplayModeSchema = z48.enum(eventCalendarDisplayModeValues);
33923
+ var columnOptionSchema = z48.enum(["2", "3", "4"]);
33924
+ var weekStartSchema = z48.enum(["sunday", "monday"]);
33925
+ var filterAutoShowSchema = z48.enum(["auto", "always", "never"]);
33926
+ var calendarTabViewsSchema = z48.enum(["both", "month", "week"]);
33658
33927
 
33659
33928
  // ../blocks/src/system/runtime/nodes/event-registration/wizardSteps.ts
33660
33929
  function getWizardStepsForContext(hasPreSelectedContext, needsPaymentStep) {
@@ -33714,66 +33983,68 @@ function toRegistrationEvents(events) {
33714
33983
  // ../blocks/src/system/runtime/nodes/event-registration.interactive.ts
33715
33984
  var EVENT_REGISTRATION_GENERIC_SHELL_STEP_LABELS = ["Date", "Tickets", "Details"];
33716
33985
  var EVENT_REGISTRATION_SHELL_STEP_LABELS = ["Event", "Date", "Tickets", "Details", "Payment"];
33717
- var contentEntrySchema = z48.object({
33718
- id: z48.string(),
33719
- slug: z48.string(),
33720
- contentTypeSlug: z48.string()
33986
+ var contentEntrySchema = z49.object({
33987
+ id: z49.string(),
33988
+ slug: z49.string(),
33989
+ contentTypeSlug: z49.string()
33721
33990
  });
33722
- var eventRegistrationPublicEventSchema = z48.preprocess(
33991
+ var eventRegistrationPublicEventSchema = z49.preprocess(
33723
33992
  normalizeEventRegistrationEventInput,
33724
33993
  publicEventSchema
33725
33994
  );
33726
- var eventRegistrationSourceSchema = z48.object({
33727
- siteId: z48.string().optional(),
33728
- apiBaseUrl: z48.string().optional(),
33729
- portalToken: z48.string().nullable().optional(),
33730
- previewToken: z48.string().nullable().optional(),
33995
+ var eventRegistrationSourceSchema = z49.object({
33996
+ siteId: z49.string().optional(),
33997
+ apiBaseUrl: z49.string().optional(),
33998
+ portalToken: z49.string().nullable().optional(),
33999
+ previewToken: z49.string().nullable().optional(),
33731
34000
  occurrenceContext: occurrenceContextSchema.optional(),
33732
34001
  contentEntry: contentEntrySchema.nullable().optional(),
33733
- events: z48.array(eventRegistrationPublicEventSchema).nullable().optional(),
33734
- className: z48.string().nullable().optional(),
33735
- buttonText: z48.string().nullable().optional(),
33736
- maxTickets: z48.string().nullable().optional(),
33737
- showVenue: z48.boolean().optional(),
33738
- showCapacity: z48.boolean().optional(),
33739
- successMessage: z48.string().optional(),
33740
- waitlistMessage: z48.string().optional(),
34002
+ events: z49.array(eventRegistrationPublicEventSchema).nullable().optional(),
34003
+ className: z49.string().nullable().optional(),
34004
+ buttonText: z49.string().nullable().optional(),
34005
+ maxTickets: z49.string().nullable().optional(),
34006
+ showVenue: z49.boolean().optional(),
34007
+ showCapacity: z49.boolean().optional(),
34008
+ successMessage: z49.string().optional(),
34009
+ waitlistMessage: z49.string().optional(),
33741
34010
  buttonVariant: registrationButtonVariantSchema.optional(),
33742
- spamProtectionEnabled: z48.boolean().optional(),
34011
+ overlayEnabled: z49.boolean().optional(),
34012
+ spamProtectionEnabled: z49.boolean().optional(),
33743
34013
  stage: previewStageSchema.optional(),
33744
- supportEmail: z48.string().optional()
34014
+ supportEmail: z49.string().optional()
33745
34015
  });
33746
- var eventRegistrationDisplaySchema = z48.object({
33747
- kind: z48.literal("event-registration"),
33748
- state: z48.literal("generic-shell"),
33749
- className: z48.string().nullable(),
33750
- titleText: z48.string(),
33751
- bodyText: z48.string(),
33752
- stepLabels: z48.array(z48.enum(EVENT_REGISTRATION_SHELL_STEP_LABELS)).min(1),
33753
- summaryButtonText: z48.string()
34016
+ var eventRegistrationDisplaySchema = z49.object({
34017
+ kind: z49.literal("event-registration"),
34018
+ state: z49.literal("generic-shell"),
34019
+ className: z49.string().nullable(),
34020
+ titleText: z49.string(),
34021
+ bodyText: z49.string(),
34022
+ stepLabels: z49.array(z49.enum(EVENT_REGISTRATION_SHELL_STEP_LABELS)).min(1),
34023
+ summaryButtonText: z49.string()
33754
34024
  });
33755
- var eventRegistrationHydrationSchema = z48.object({
34025
+ var eventRegistrationHydrationSchema = z49.object({
33756
34026
  occurrenceContext: occurrenceContextSchema.optional(),
33757
34027
  contentEntry: contentEntrySchema.nullable().optional(),
33758
- events: z48.array(eventRegistrationPublicEventSchema).nullable().optional(),
33759
- maxTickets: z48.string().optional(),
33760
- showVenue: z48.boolean().optional(),
33761
- showCapacity: z48.boolean().optional(),
33762
- successMessage: z48.string().optional(),
33763
- waitlistMessage: z48.string().optional(),
34028
+ events: z49.array(eventRegistrationPublicEventSchema).nullable().optional(),
34029
+ maxTickets: z49.string().optional(),
34030
+ showVenue: z49.boolean().optional(),
34031
+ showCapacity: z49.boolean().optional(),
34032
+ successMessage: z49.string().optional(),
34033
+ waitlistMessage: z49.string().optional(),
33764
34034
  buttonVariant: registrationButtonVariantSchema.optional(),
33765
- spamProtectionEnabled: z48.boolean().optional(),
33766
- supportEmail: z48.string().optional()
34035
+ overlayEnabled: z49.boolean().optional(),
34036
+ spamProtectionEnabled: z49.boolean().optional(),
34037
+ supportEmail: z49.string().optional()
33767
34038
  });
33768
- var eventRegistrationRenderSchema = z48.object({
34039
+ var eventRegistrationRenderSchema = z49.object({
33769
34040
  display: eventRegistrationDisplaySchema,
33770
34041
  hydration: eventRegistrationHydrationSchema
33771
34042
  });
33772
- var eventRegistrationIslandMetaCodec = createZodCodec(z48.object({
33773
- siteId: z48.string().optional(),
33774
- apiBaseUrl: z48.string().optional(),
33775
- portalToken: z48.string().nullable().optional(),
33776
- previewToken: z48.string().nullable().optional(),
34043
+ var eventRegistrationIslandMetaCodec = createZodCodec(z49.object({
34044
+ siteId: z49.string().optional(),
34045
+ apiBaseUrl: z49.string().optional(),
34046
+ portalToken: z49.string().nullable().optional(),
34047
+ previewToken: z49.string().nullable().optional(),
33777
34048
  stage: previewStageSchema.optional()
33778
34049
  }));
33779
34050
  var eventRegistrationIslandMetaKeys = defineInteractiveIslandMetaKeys(
@@ -33877,6 +34148,7 @@ var eventRegistrationBlockRuntime = defineClientOwnedBlockRuntime({
33877
34148
  successMessage: source.successMessage,
33878
34149
  waitlistMessage: source.waitlistMessage,
33879
34150
  buttonVariant: source.buttonVariant,
34151
+ overlayEnabled: source.overlayEnabled,
33880
34152
  spamProtectionEnabled: source.spamProtectionEnabled,
33881
34153
  supportEmail: source.supportEmail
33882
34154
  }
@@ -34066,6 +34338,12 @@ var eventRegistrationManifest = createBlockManifest({
34066
34338
  buttonVariant: {
34067
34339
  $bind: { from: "content.buttonVariant", fallback: "primary" }
34068
34340
  },
34341
+ overlayEnabled: {
34342
+ $bind: {
34343
+ from: "$root.eventRegistrationOverlayEnabled",
34344
+ fallback: false
34345
+ }
34346
+ },
34069
34347
  // Event data from loader
34070
34348
  events: { $bind: { from: "data.events" } },
34071
34349
  // Stage for preview mode (allows registering for draft events)
@@ -34086,7 +34364,7 @@ var eventRegistrationBlockDefinition = {
34086
34364
  manifest: eventRegistrationManifest,
34087
34365
  runtime: eventRegistrationBlockRuntime,
34088
34366
  dataSchemas: {
34089
- events: z49.array(publicEventSchema).optional(),
34367
+ events: z50.array(publicEventSchema).optional(),
34090
34368
  occurrenceContext: occurrenceContextSchema.optional()
34091
34369
  },
34092
34370
  dataLoaders: {
@@ -34213,29 +34491,7 @@ function resolveCoursePricingState(course, selectedPricingOptionId, nowInput = {
34213
34491
  }
34214
34492
  }
34215
34493
  function formatCoursePriceDisplay(display, locale) {
34216
- switch (display.kind) {
34217
- case "free":
34218
- return "Free";
34219
- case "unavailable":
34220
- return "Pricing unavailable";
34221
- case "exact":
34222
- return formatCourseCurrencyAmount(display.amount, display.currency, { locale });
34223
- case "from":
34224
- return `From ${formatCourseCurrencyAmount(display.amount, display.currency, { locale })}`;
34225
- }
34226
- }
34227
- function formatCourseCurrencyAmount(amount, currency, options) {
34228
- const {
34229
- locale = "en-US",
34230
- minimumFractionDigits,
34231
- maximumFractionDigits
34232
- } = options ?? {};
34233
- return new Intl.NumberFormat(locale, {
34234
- style: "currency",
34235
- currency: currency.toUpperCase(),
34236
- ...minimumFractionDigits === void 0 ? {} : { minimumFractionDigits },
34237
- ...maximumFractionDigits === void 0 ? {} : { maximumFractionDigits }
34238
- }).format(amount / 100);
34494
+ return formatBookingPriceDisplay(display, { decimals: "exact", locale });
34239
34495
  }
34240
34496
  function formatCoursePriceAmount(amount, currency, locale) {
34241
34497
  return formatCoursePriceDisplay(
@@ -34245,73 +34501,73 @@ function formatCoursePriceAmount(amount, currency, locale) {
34245
34501
  }
34246
34502
 
34247
34503
  // ../blocks/src/system/runtime/nodes/course-registration.interactive.ts
34248
- import { z as z50 } from "zod";
34249
- var contentEntrySchema2 = z50.object({
34250
- id: z50.string(),
34251
- slug: z50.string(),
34252
- contentTypeSlug: z50.string()
34504
+ import { z as z51 } from "zod";
34505
+ var contentEntrySchema2 = z51.object({
34506
+ id: z51.string(),
34507
+ slug: z51.string(),
34508
+ contentTypeSlug: z51.string()
34253
34509
  });
34254
- var courseEntrySubrouteContextSchema = z50.union([
34255
- z50.object({
34256
- kind: z50.literal("course-run"),
34257
- run: z50.object({
34258
- courseId: z50.string(),
34259
- seriesId: z50.string(),
34260
- runSlug: z50.string(),
34261
- runName: z50.string().nullable()
34510
+ var courseEntrySubrouteContextSchema = z51.union([
34511
+ z51.object({
34512
+ kind: z51.literal("course-run"),
34513
+ run: z51.object({
34514
+ courseId: z51.string(),
34515
+ seriesId: z51.string(),
34516
+ runSlug: z51.string(),
34517
+ runName: z51.string().nullable()
34262
34518
  })
34263
34519
  }),
34264
- z50.object({
34265
- kind: z50.literal("event-occurrence"),
34520
+ z51.object({
34521
+ kind: z51.literal("event-occurrence"),
34266
34522
  occurrence: occurrenceContextSchema
34267
34523
  })
34268
34524
  ]);
34269
- var courseRegistrationSourceSchema = z50.object({
34270
- siteId: z50.string().optional(),
34271
- apiBaseUrl: z50.string().optional(),
34272
- portalToken: z50.string().nullable().optional(),
34525
+ var courseRegistrationSourceSchema = z51.object({
34526
+ siteId: z51.string().optional(),
34527
+ apiBaseUrl: z51.string().optional(),
34528
+ portalToken: z51.string().nullable().optional(),
34273
34529
  contentEntry: contentEntrySchema2.nullable().optional(),
34274
34530
  entrySubrouteContext: courseEntrySubrouteContextSchema.nullable().optional(),
34275
- courses: z50.array(publicCourseSchema).nullable().optional(),
34276
- className: z50.string().nullable().optional(),
34277
- showSessions: z50.boolean().optional(),
34278
- showPrice: z50.boolean().optional(),
34279
- showCapacity: z50.boolean().optional(),
34280
- showVenue: z50.boolean().optional(),
34281
- successMessage: z50.string().optional(),
34282
- waitlistMessage: z50.string().optional(),
34283
- membershipMessage: z50.string().optional(),
34284
- buttonText: z50.string().nullable().optional(),
34531
+ courses: z51.array(publicCourseSchema).nullable().optional(),
34532
+ className: z51.string().nullable().optional(),
34533
+ showSessions: z51.boolean().optional(),
34534
+ showPrice: z51.boolean().optional(),
34535
+ showCapacity: z51.boolean().optional(),
34536
+ showVenue: z51.boolean().optional(),
34537
+ successMessage: z51.string().optional(),
34538
+ waitlistMessage: z51.string().optional(),
34539
+ membershipMessage: z51.string().optional(),
34540
+ buttonText: z51.string().nullable().optional(),
34285
34541
  buttonVariant: registrationButtonVariantSchema.optional(),
34286
34542
  stage: previewStageSchema.optional()
34287
34543
  });
34288
- var courseRegistrationDisplaySchema = z50.object({
34289
- kind: z50.literal("course-registration"),
34290
- state: z50.literal("shell"),
34291
- className: z50.string().nullable(),
34292
- summaryButtonText: z50.string()
34544
+ var courseRegistrationDisplaySchema = z51.object({
34545
+ kind: z51.literal("course-registration"),
34546
+ state: z51.literal("shell"),
34547
+ className: z51.string().nullable(),
34548
+ summaryButtonText: z51.string()
34293
34549
  });
34294
- var courseRegistrationHydrationSchema = z50.object({
34550
+ var courseRegistrationHydrationSchema = z51.object({
34295
34551
  contentEntry: contentEntrySchema2.nullable().optional(),
34296
34552
  entrySubrouteContext: courseEntrySubrouteContextSchema.nullable().optional(),
34297
- courses: z50.array(publicCourseSchema).nullable().optional(),
34298
- showSessions: z50.boolean().optional(),
34299
- showPrice: z50.boolean().optional(),
34300
- showCapacity: z50.boolean().optional(),
34301
- showVenue: z50.boolean().optional(),
34302
- successMessage: z50.string().optional(),
34303
- waitlistMessage: z50.string().optional(),
34304
- membershipMessage: z50.string().optional(),
34553
+ courses: z51.array(publicCourseSchema).nullable().optional(),
34554
+ showSessions: z51.boolean().optional(),
34555
+ showPrice: z51.boolean().optional(),
34556
+ showCapacity: z51.boolean().optional(),
34557
+ showVenue: z51.boolean().optional(),
34558
+ successMessage: z51.string().optional(),
34559
+ waitlistMessage: z51.string().optional(),
34560
+ membershipMessage: z51.string().optional(),
34305
34561
  buttonVariant: registrationButtonVariantSchema.optional()
34306
34562
  });
34307
- var courseRegistrationRenderSchema = z50.object({
34563
+ var courseRegistrationRenderSchema = z51.object({
34308
34564
  display: courseRegistrationDisplaySchema,
34309
34565
  hydration: courseRegistrationHydrationSchema
34310
34566
  });
34311
- var courseRegistrationIslandMetaCodec = createZodCodec(z50.object({
34312
- siteId: z50.string().optional(),
34313
- apiBaseUrl: z50.string().optional(),
34314
- portalToken: z50.string().nullable().optional(),
34567
+ var courseRegistrationIslandMetaCodec = createZodCodec(z51.object({
34568
+ siteId: z51.string().optional(),
34569
+ apiBaseUrl: z51.string().optional(),
34570
+ portalToken: z51.string().nullable().optional(),
34315
34571
  stage: previewStageSchema.optional()
34316
34572
  }));
34317
34573
  var courseRegistrationIslandMetaKeys = defineInteractiveIslandMetaKeys(
@@ -34584,32 +34840,32 @@ var courseRegistrationBlockDefinition = {
34584
34840
  };
34585
34841
 
34586
34842
  // ../blocks/src/system/blocks/event-details.ts
34587
- import { z as z52 } from "zod";
34843
+ import { z as z53 } from "zod";
34588
34844
 
34589
34845
  // ../blocks/src/system/blocks/shop.shared.ts
34590
- import { z as z51 } from "zod";
34591
- var publicPassProductSchema = z51.object({
34592
- id: z51.string(),
34593
- productUseCase: z51.enum(["event_pass", "appointment_package"]).default("event_pass"),
34594
- name: z51.string(),
34595
- description: z51.string().nullable(),
34596
- price: z51.number(),
34597
- currency: z51.string(),
34598
- creditsTotal: z51.number(),
34599
- pricePerCredit: z51.number(),
34600
- validDays: z51.number().nullable(),
34601
- eligibleCategoryIds: z51.array(z51.string()),
34602
- eligibleCategoryNames: z51.array(z51.string())
34846
+ import { z as z52 } from "zod";
34847
+ var publicPassProductSchema = z52.object({
34848
+ id: z52.string(),
34849
+ productUseCase: z52.enum(["event_pass", "appointment_package"]).default("event_pass"),
34850
+ name: z52.string(),
34851
+ description: z52.string().nullable(),
34852
+ price: z52.number(),
34853
+ currency: z52.string(),
34854
+ creditsTotal: z52.number(),
34855
+ pricePerCredit: z52.number(),
34856
+ validDays: z52.number().nullable(),
34857
+ eligibleCategoryIds: z52.array(z52.string()),
34858
+ eligibleCategoryNames: z52.array(z52.string())
34603
34859
  });
34604
- var publicMembershipProductSchema = z51.object({
34605
- id: z51.string(),
34606
- name: z51.string(),
34607
- description: z51.string().nullable(),
34608
- price: z51.number(),
34609
- currency: z51.string(),
34610
- billingInterval: z51.enum(["month", "year"]),
34611
- eligibleCategoryIds: z51.array(z51.string()),
34612
- eligibleCategoryNames: z51.array(z51.string())
34860
+ var publicMembershipProductSchema = z52.object({
34861
+ id: z52.string(),
34862
+ name: z52.string(),
34863
+ description: z52.string().nullable(),
34864
+ price: z52.number(),
34865
+ currency: z52.string(),
34866
+ billingInterval: z52.enum(["month", "year"]),
34867
+ eligibleCategoryIds: z52.array(z52.string()),
34868
+ eligibleCategoryNames: z52.array(z52.string())
34613
34869
  });
34614
34870
 
34615
34871
  // ../blocks/src/system/blocks/event-details.ts
@@ -34744,40 +35000,40 @@ var eventDetailsManifest = createBlockManifest({
34744
35000
  })
34745
35001
  ]
34746
35002
  });
34747
- var occurrenceContextSchema2 = z52.object({
34748
- id: z52.string(),
34749
- seriesId: z52.string(),
34750
- startsAt: z52.string(),
34751
- endsAt: z52.string(),
34752
- timeZone: z52.string(),
34753
- capacityOverride: z52.number().nullable().optional(),
34754
- overrides: z52.record(z52.string(), z52.unknown()).nullable().optional()
35003
+ var occurrenceContextSchema2 = z53.object({
35004
+ id: z53.string(),
35005
+ seriesId: z53.string(),
35006
+ startsAt: z53.string(),
35007
+ endsAt: z53.string(),
35008
+ timeZone: z53.string(),
35009
+ capacityOverride: z53.number().nullable().optional(),
35010
+ overrides: z53.record(z53.string(), z53.unknown()).nullable().optional()
34755
35011
  }).nullable();
34756
- var eventAutoApplyDiscountPreviewBaseSchema = z52.object({
34757
- id: z52.string(),
34758
- publicLabel: z52.string(),
34759
- description: z52.string().nullable(),
34760
- minTicketsRequired: z52.number().nullable()
35012
+ var eventAutoApplyDiscountPreviewBaseSchema = z53.object({
35013
+ id: z53.string(),
35014
+ publicLabel: z53.string(),
35015
+ description: z53.string().nullable(),
35016
+ minTicketsRequired: z53.number().nullable()
34761
35017
  });
34762
- var eventAutoApplyDiscountPreviewSchema = z52.discriminatedUnion("discountType", [
35018
+ var eventAutoApplyDiscountPreviewSchema = z53.discriminatedUnion("discountType", [
34763
35019
  eventAutoApplyDiscountPreviewBaseSchema.extend({
34764
- discountType: z52.literal("percent"),
34765
- discountPercent: z52.number(),
34766
- discountAmountCents: z52.null()
35020
+ discountType: z53.literal("percent"),
35021
+ discountPercent: z53.number(),
35022
+ discountAmountCents: z53.null()
34767
35023
  }),
34768
35024
  eventAutoApplyDiscountPreviewBaseSchema.extend({
34769
- discountType: z52.literal("fixed"),
34770
- discountPercent: z52.null(),
34771
- discountAmountCents: z52.number()
35025
+ discountType: z53.literal("fixed"),
35026
+ discountPercent: z53.null(),
35027
+ discountAmountCents: z53.number()
34772
35028
  })
34773
35029
  ]);
34774
35030
  var eventDetailsBlockDefinition = {
34775
35031
  manifest: eventDetailsManifest,
34776
35032
  dataSchemas: {
34777
- eventDetailsData: z52.object({
35033
+ eventDetailsData: z53.object({
34778
35034
  events: publicEventsArraySchema,
34779
- sitePasses: z52.object({ passes: z52.array(publicPassProductSchema) }),
34780
- siteMemberships: z52.object({ memberships: z52.array(publicMembershipProductSchema) }),
35035
+ sitePasses: z53.object({ passes: z53.array(publicPassProductSchema) }),
35036
+ siteMemberships: z53.object({ memberships: z53.array(publicMembershipProductSchema) }),
34781
35037
  autoApplyDiscount: eventAutoApplyDiscountPreviewSchema.nullable().optional().default(null)
34782
35038
  }).optional(),
34783
35039
  occurrenceContext: occurrenceContextSchema2.optional()
@@ -35101,7 +35357,7 @@ var eventSpotlightBlockDefinition = {
35101
35357
  };
35102
35358
 
35103
35359
  // ../blocks/src/system/runtime/nodes/events/EventListing.interactive.ts
35104
- import { z as z54 } from "zod";
35360
+ import { z as z55 } from "zod";
35105
35361
 
35106
35362
  // ../calendar/src/grid.ts
35107
35363
  var DAY_NAMES = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
@@ -35267,15 +35523,15 @@ function getLocalMinuteOfDay(isoTimestamp, timeZone) {
35267
35523
  const date = new Date(isoTimestamp);
35268
35524
  if (Number.isNaN(date.getTime())) return NaN;
35269
35525
  if (!isValidTimeZone2(timeZone)) return NaN;
35270
- const parts = new Intl.DateTimeFormat("en-US", {
35526
+ const parts = new Intl.DateTimeFormat("en-GB", {
35271
35527
  timeZone,
35272
35528
  hour: "2-digit",
35273
35529
  minute: "2-digit",
35274
- hour12: false,
35275
35530
  hourCycle: "h23"
35276
35531
  }).formatToParts(date);
35277
- const hour = Number(parts.find((part) => part.type === "hour")?.value);
35532
+ const hourPart = Number(parts.find((part) => part.type === "hour")?.value);
35278
35533
  const minute = Number(parts.find((part) => part.type === "minute")?.value);
35534
+ const hour = hourPart === 24 ? 0 : hourPart;
35279
35535
  if (Number.isNaN(hour) || Number.isNaN(minute)) return NaN;
35280
35536
  return hour * MINUTES_PER_HOUR + minute;
35281
35537
  }
@@ -35707,45 +35963,8 @@ function groupEventsByDate(events) {
35707
35963
  }
35708
35964
  return map;
35709
35965
  }
35710
- function formatCompactCurrencyAmount(amount, currency) {
35711
- return formatCourseCurrencyAmount(amount, currency, {
35712
- minimumFractionDigits: 0,
35713
- maximumFractionDigits: 2
35714
- });
35715
- }
35716
- function formatCourseEventPriceDisplay(display) {
35717
- if (display.kind !== "course") {
35718
- return "Course";
35719
- }
35720
- if (display.display.kind === "exact" || display.display.kind === "from") {
35721
- const amountLabel = formatCompactCurrencyAmount(
35722
- display.display.amount,
35723
- display.display.currency
35724
- );
35725
- return display.display.kind === "from" ? `Course (From ${amountLabel})` : `Course (${amountLabel})`;
35726
- }
35727
- return "Course";
35728
- }
35729
- function formatPublicEventPriceDisplay(display) {
35730
- switch (display.kind) {
35731
- case "free":
35732
- return "Free";
35733
- case "exact":
35734
- return formatCompactCurrencyAmount(display.amount, display.currency);
35735
- case "from":
35736
- return `From ${formatCompactCurrencyAmount(display.amount, display.currency)}`;
35737
- case "mixed":
35738
- return `Free / From ${formatCompactCurrencyAmount(display.paidFromAmount, display.currency)}`;
35739
- case "unavailable":
35740
- return "Pricing unavailable";
35741
- case "course":
35742
- return formatCourseEventPriceDisplay(display);
35743
- }
35744
- }
35745
35966
  function formatEventPrice(event) {
35746
- return formatPublicEventPriceDisplay(
35747
- publicEventPricingDisplay(resolveRuntimeEventPricing(event))
35748
- );
35967
+ return formatEventPricing(resolveRuntimeEventPricing(event), { decimals: "auto" });
35749
35968
  }
35750
35969
  function resolveEventCta(event, buttonText) {
35751
35970
  const { isFull: isSoldOut } = getEventAvailability(event);
@@ -37323,16 +37542,16 @@ function DateTimeTile({ startsAt, endsAt, timeZone }) {
37323
37542
  }
37324
37543
 
37325
37544
  // ../blocks/src/system/runtime/nodes/events/shared/listOptions.ts
37326
- import { z as z53 } from "zod";
37545
+ import { z as z54 } from "zod";
37327
37546
  var eventPageSizeValues = [3, 6, 10, 12, 20, 24, 30];
37328
- var eventPageSizeSchema = z53.union([
37329
- z53.literal(3),
37330
- z53.literal(6),
37331
- z53.literal(10),
37332
- z53.literal(12),
37333
- z53.literal(20),
37334
- z53.literal(24),
37335
- z53.literal(30)
37547
+ var eventPageSizeSchema = z54.union([
37548
+ z54.literal(3),
37549
+ z54.literal(6),
37550
+ z54.literal(10),
37551
+ z54.literal(12),
37552
+ z54.literal(20),
37553
+ z54.literal(24),
37554
+ z54.literal(30)
37336
37555
  ]);
37337
37556
  var eventPageSizeSet = new Set(eventPageSizeValues);
37338
37557
  function resolveEventPageSize(value, fallback2 = 12) {
@@ -37342,15 +37561,15 @@ function resolveEventPageSize(value, fallback2 = 12) {
37342
37561
  function resolveEventCalendarListPageSize(input) {
37343
37562
  return resolveEventPageSize(input.eventsPerPage);
37344
37563
  }
37345
- var eventListPaginationActionSchema = z53.discriminatedUnion("kind", [
37346
- z53.object({
37347
- kind: z53.literal("loadMore"),
37348
- label: z53.string()
37564
+ var eventListPaginationActionSchema = z54.discriminatedUnion("kind", [
37565
+ z54.object({
37566
+ kind: z54.literal("loadMore"),
37567
+ label: z54.string()
37349
37568
  }),
37350
- z53.object({
37351
- kind: z53.literal("seeAllLink"),
37352
- label: z53.string(),
37353
- href: z53.string()
37569
+ z54.object({
37570
+ kind: z54.literal("seeAllLink"),
37571
+ label: z54.string(),
37572
+ href: z54.string()
37354
37573
  })
37355
37574
  ]);
37356
37575
  function resolveEventListPaginationAction(input) {
@@ -37363,89 +37582,89 @@ function resolveEventListPaginationAction(input) {
37363
37582
  }
37364
37583
 
37365
37584
  // ../blocks/src/system/runtime/nodes/events/EventListing.interactive.ts
37366
- var legacyEventCardVariantSchema = z54.enum(["variant1", "variant2"]);
37367
- var eventCardVariantInputSchema = z54.union([
37585
+ var legacyEventCardVariantSchema = z55.enum(["variant1", "variant2"]);
37586
+ var eventCardVariantInputSchema = z55.union([
37368
37587
  cardVariantRoleSchema,
37369
37588
  legacyEventCardVariantSchema
37370
37589
  ]);
37371
- var cardOrientationSchema = z54.enum(["vertical", "horizontal"]);
37372
- var eventBlockKindSchema = z54.enum(eventBlockKindValues);
37373
- var eventSurfaceScopeSchema = z54.enum(eventSurfaceScopeValues);
37374
- var eventScheduleScopeSchema2 = z54.enum(eventScheduleScopeValues);
37375
- var eventListingSourceSchema = z54.object({
37376
- events: z54.array(publicEventSchema).nullable().optional(),
37377
- siteId: z54.string(),
37378
- apiBaseUrl: z54.string().optional(),
37590
+ var cardOrientationSchema = z55.enum(["vertical", "horizontal"]);
37591
+ var eventBlockKindSchema = z55.enum(eventBlockKindValues);
37592
+ var eventSurfaceScopeSchema = z55.enum(eventSurfaceScopeValues);
37593
+ var eventScheduleScopeSchema2 = z55.enum(eventScheduleScopeValues);
37594
+ var eventListingSourceSchema = z55.object({
37595
+ events: z55.array(publicEventSchema).nullable().optional(),
37596
+ siteId: z55.string(),
37597
+ apiBaseUrl: z55.string().optional(),
37379
37598
  stage: previewStageSchema.optional(),
37380
37599
  layout: eventLayoutSchema.optional(),
37381
37600
  columns: columnOptionSchema.optional(),
37382
- eventsPerPage: z54.string().optional(),
37383
- paginationMode: z54.enum(["loadMore", "seeAllLink"]).optional(),
37384
- seeAllUrl: z54.string().optional(),
37385
- loadMoreText: z54.string().optional(),
37601
+ eventsPerPage: z55.string().optional(),
37602
+ paginationMode: z55.enum(["loadMore", "seeAllLink"]).optional(),
37603
+ seeAllUrl: z55.string().optional(),
37604
+ loadMoreText: z55.string().optional(),
37386
37605
  cardVariant: eventCardVariantInputSchema.optional(),
37387
37606
  buttonVariant: eventButtonVariantSchema.optional(),
37388
- buttonText: z54.string().optional(),
37389
- showVenue: z54.boolean().optional(),
37390
- showMap: z54.boolean().optional(),
37391
- showCapacity: z54.boolean().optional(),
37392
- emptyMessage: z54.string().optional(),
37393
- className: z54.string().optional(),
37394
- showFilters: z54.boolean().nullable().optional(),
37607
+ buttonText: z55.string().optional(),
37608
+ showVenue: z55.boolean().optional(),
37609
+ showMap: z55.boolean().optional(),
37610
+ showCapacity: z55.boolean().optional(),
37611
+ emptyMessage: z55.string().optional(),
37612
+ className: z55.string().optional(),
37613
+ showFilters: z55.boolean().nullable().optional(),
37395
37614
  showCategoryFilter: filterAutoShowSchema.optional(),
37396
- showVenueFilter: z54.boolean().nullable().optional(),
37397
- showStaffFilter: z54.boolean().nullable().optional(),
37615
+ showVenueFilter: z55.boolean().nullable().optional(),
37616
+ showStaffFilter: z55.boolean().nullable().optional(),
37398
37617
  eventKind: eventBlockKindSchema.nullable().optional(),
37399
37618
  eventSurface: eventSurfaceScopeSchema.nullable().optional(),
37400
- filterEventPresets: z54.union([z54.string(), z54.array(z54.string())]).nullable().optional(),
37619
+ filterEventPresets: z55.union([z55.string(), z55.array(z55.string())]).nullable().optional(),
37401
37620
  scheduleScope: eventScheduleScopeSchema2.nullable().optional(),
37402
- filterCategoryIds: z54.string().nullable().optional(),
37403
- filterStaffMemberId: z54.string().nullable().optional(),
37404
- filterVenueId: z54.string().nullable().optional()
37621
+ filterCategoryIds: z55.string().nullable().optional(),
37622
+ filterStaffMemberId: z55.string().nullable().optional(),
37623
+ filterVenueId: z55.string().nullable().optional()
37405
37624
  });
37406
- var eventListingDisplaySchema = z54.object({
37407
- kind: z54.literal("event-listing"),
37408
- state: z54.enum(["loading", "empty", "ready"]),
37625
+ var eventListingDisplaySchema = z55.object({
37626
+ kind: z55.literal("event-listing"),
37627
+ state: z55.enum(["loading", "empty", "ready"]),
37409
37628
  listLayout: eventLayoutSchema,
37410
- className: z54.string().nullable(),
37411
- emptyMessage: z54.string(),
37412
- loadingMessage: z54.string(),
37413
- containerClass: z54.string(),
37629
+ className: z55.string().nullable(),
37630
+ emptyMessage: z55.string(),
37631
+ loadingMessage: z55.string(),
37632
+ containerClass: z55.string(),
37414
37633
  cardVariant: cardVariantRoleSchema,
37415
37634
  buttonVariant: eventButtonVariantSchema,
37416
- buttonText: z54.string(),
37417
- showVenue: z54.boolean(),
37418
- showMap: z54.boolean(),
37419
- showCapacity: z54.boolean(),
37635
+ buttonText: z55.string(),
37636
+ showVenue: z55.boolean(),
37637
+ showMap: z55.boolean(),
37638
+ showCapacity: z55.boolean(),
37420
37639
  orientation: cardOrientationSchema,
37421
- events: z54.array(publicEventSchema)
37640
+ events: z55.array(publicEventSchema)
37422
37641
  });
37423
- var eventListingHydrationSchema = z54.object({
37424
- siteId: z54.string(),
37642
+ var eventListingHydrationSchema = z55.object({
37643
+ siteId: z55.string(),
37425
37644
  stage: previewStageSchema.optional(),
37426
37645
  eventsPerPage: eventPageSizeSchema,
37427
37646
  paginationAction: eventListPaginationActionSchema,
37428
- showFilters: z54.boolean(),
37647
+ showFilters: z55.boolean(),
37429
37648
  showCategoryFilter: filterAutoShowSchema,
37430
- showVenueFilter: z54.boolean(),
37431
- showStaffFilter: z54.boolean(),
37649
+ showVenueFilter: z55.boolean(),
37650
+ showStaffFilter: z55.boolean(),
37432
37651
  eventKind: eventBlockKindSchema,
37433
37652
  eventSurface: eventSurfaceScopeSchema,
37434
- filterEventPresets: z54.string().nullable(),
37653
+ filterEventPresets: z55.string().nullable(),
37435
37654
  scheduleScope: eventScheduleScopeSchema2,
37436
- filterCategoryIds: z54.string().nullable().optional(),
37437
- filterStaffMemberId: z54.string().nullable().optional(),
37438
- filterVenueId: z54.string().nullable().optional(),
37439
- fetchInitialEventsOnMount: z54.boolean()
37655
+ filterCategoryIds: z55.string().nullable().optional(),
37656
+ filterStaffMemberId: z55.string().nullable().optional(),
37657
+ filterVenueId: z55.string().nullable().optional(),
37658
+ fetchInitialEventsOnMount: z55.boolean()
37440
37659
  });
37441
- var eventListingRenderSchema = z54.object({
37660
+ var eventListingRenderSchema = z55.object({
37442
37661
  display: eventListingDisplaySchema,
37443
37662
  hydration: eventListingHydrationSchema
37444
37663
  });
37445
37664
  var eventListingIslandMetaCodec = createZodCodec(
37446
- z54.object({
37447
- siteId: z54.string(),
37448
- apiBaseUrl: z54.string().optional(),
37665
+ z55.object({
37666
+ siteId: z55.string(),
37667
+ apiBaseUrl: z55.string().optional(),
37449
37668
  stage: previewStageSchema.optional()
37450
37669
  })
37451
37670
  );
@@ -37824,15 +38043,15 @@ var eventListingBlockDefinition = {
37824
38043
  };
37825
38044
 
37826
38045
  // ../blocks/src/system/runtime/nodes/events/EventCalendar.interactive.ts
37827
- import { z as z55 } from "zod";
37828
- var eventBlockKindSchema2 = z55.enum(eventBlockKindValues);
37829
- var eventSurfaceScopeSchema2 = z55.enum(eventSurfaceScopeValues);
37830
- var eventScheduleScopeSchema3 = z55.enum(eventScheduleScopeValues);
37831
- var eventCalendarSourceSchema = z55.object(
38046
+ import { z as z56 } from "zod";
38047
+ var eventBlockKindSchema2 = z56.enum(eventBlockKindValues);
38048
+ var eventSurfaceScopeSchema2 = z56.enum(eventSurfaceScopeValues);
38049
+ var eventScheduleScopeSchema3 = z56.enum(eventScheduleScopeValues);
38050
+ var eventCalendarSourceSchema = z56.object(
37832
38051
  {
37833
- events: z55.array(publicEventSchema).nullable().optional(),
37834
- siteId: z55.string(),
37835
- apiBaseUrl: z55.string().optional(),
38052
+ events: z56.array(publicEventSchema).nullable().optional(),
38053
+ siteId: z56.string(),
38054
+ apiBaseUrl: z56.string().optional(),
37836
38055
  stage: previewStageSchema.optional(),
37837
38056
  variant: eventCalendarDisplayModeSchema.nullable().optional(),
37838
38057
  displayMode: eventCalendarDisplayModeSchema.nullable().optional(),
@@ -37840,78 +38059,78 @@ var eventCalendarSourceSchema = z55.object(
37840
38059
  listColumns: columnOptionSchema.optional(),
37841
38060
  layout: eventLayoutSchema.optional(),
37842
38061
  columns: columnOptionSchema.optional(),
37843
- eventsPerPage: z55.string().optional(),
37844
- paginationMode: z55.enum(["loadMore", "seeAllLink"]).optional(),
37845
- seeAllUrl: z55.string().optional(),
37846
- loadMoreText: z55.string().optional(),
38062
+ eventsPerPage: z56.string().optional(),
38063
+ paginationMode: z56.enum(["loadMore", "seeAllLink"]).optional(),
38064
+ seeAllUrl: z56.string().optional(),
38065
+ loadMoreText: z56.string().optional(),
37847
38066
  startOfWeek: weekStartSchema.optional(),
37848
38067
  calendarTabViews: calendarTabViewsSchema.optional(),
37849
- showFilters: z55.boolean().nullable().optional(),
38068
+ showFilters: z56.boolean().nullable().optional(),
37850
38069
  showCategoryFilter: filterAutoShowSchema.optional(),
37851
- showVenueFilter: z55.boolean().nullable().optional(),
37852
- showStaffFilter: z55.boolean().nullable().optional(),
38070
+ showVenueFilter: z56.boolean().nullable().optional(),
38071
+ showStaffFilter: z56.boolean().nullable().optional(),
37853
38072
  kind: eventBlockKindSchema2.nullable().optional(),
37854
38073
  eventSurface: eventSurfaceScopeSchema2.nullable().optional(),
37855
- filterEventPresets: z55.union([z55.string(), z55.array(z55.string())]).nullable().optional(),
38074
+ filterEventPresets: z56.union([z56.string(), z56.array(z56.string())]).nullable().optional(),
37856
38075
  scheduleScope: eventScheduleScopeSchema3.nullable().optional(),
37857
- filterCategoryIds: z55.union([z55.string(), z55.array(z55.string())]).nullable().optional(),
37858
- filterStaffMemberId: z55.string().nullable().optional(),
37859
- filterVenueId: z55.string().nullable().optional(),
38076
+ filterCategoryIds: z56.union([z56.string(), z56.array(z56.string())]).nullable().optional(),
38077
+ filterStaffMemberId: z56.string().nullable().optional(),
38078
+ filterVenueId: z56.string().nullable().optional(),
37860
38079
  buttonVariant: eventButtonVariantSchema.optional(),
37861
- buttonText: z55.string().optional(),
37862
- showVenue: z55.boolean().nullable().optional(),
37863
- showMap: z55.boolean().nullable().optional(),
37864
- showCapacity: z55.boolean().nullable().optional(),
37865
- emptyMessage: z55.string().optional(),
37866
- className: z55.string().optional()
38080
+ buttonText: z56.string().optional(),
38081
+ showVenue: z56.boolean().nullable().optional(),
38082
+ showMap: z56.boolean().nullable().optional(),
38083
+ showCapacity: z56.boolean().nullable().optional(),
38084
+ emptyMessage: z56.string().optional(),
38085
+ className: z56.string().optional()
37867
38086
  }
37868
38087
  );
37869
- var eventCalendarDisplaySchema = z55.object({
37870
- kind: z55.literal("event-calendar"),
38088
+ var eventCalendarDisplaySchema = z56.object({
38089
+ kind: z56.literal("event-calendar"),
37871
38090
  displayMode: eventCalendarDisplayModeSchema,
37872
- className: z55.string().nullable(),
37873
- events: z55.array(publicEventSchema),
38091
+ className: z56.string().nullable(),
38092
+ events: z56.array(publicEventSchema),
37874
38093
  listLayout: eventLayoutSchema,
37875
38094
  listColumns: columnOptionSchema,
37876
38095
  eventsPerPage: eventPageSizeSchema,
37877
38096
  paginationAction: eventListPaginationActionSchema,
37878
38097
  startOfWeek: weekStartSchema,
37879
38098
  calendarTabViews: calendarTabViewsSchema,
37880
- showFilters: z55.boolean(),
38099
+ showFilters: z56.boolean(),
37881
38100
  showCategoryFilter: filterAutoShowSchema,
37882
- showVenueFilter: z55.boolean(),
37883
- showStaffFilter: z55.boolean(),
38101
+ showVenueFilter: z56.boolean(),
38102
+ showStaffFilter: z56.boolean(),
37884
38103
  eventKind: eventBlockKindSchema2,
37885
38104
  eventSurface: eventSurfaceScopeSchema2,
37886
- filterEventPresets: z55.string().nullable(),
38105
+ filterEventPresets: z56.string().nullable(),
37887
38106
  scheduleScope: eventScheduleScopeSchema3,
37888
- filterCategoryIds: z55.string().nullable(),
37889
- filterStaffMemberId: z55.string().nullable(),
37890
- filterVenueId: z55.string().nullable(),
38107
+ filterCategoryIds: z56.string().nullable(),
38108
+ filterStaffMemberId: z56.string().nullable(),
38109
+ filterVenueId: z56.string().nullable(),
37891
38110
  buttonVariant: eventButtonVariantSchema,
37892
- buttonText: z55.string(),
37893
- showVenue: z55.boolean(),
37894
- showMap: z55.boolean(),
37895
- showCapacity: z55.boolean(),
37896
- emptyMessage: z55.string()
38111
+ buttonText: z56.string(),
38112
+ showVenue: z56.boolean(),
38113
+ showMap: z56.boolean(),
38114
+ showCapacity: z56.boolean(),
38115
+ emptyMessage: z56.string()
37897
38116
  });
37898
- var eventCalendarHydrationSchema = z55.object({
37899
- siteId: z55.string(),
38117
+ var eventCalendarHydrationSchema = z56.object({
38118
+ siteId: z56.string(),
37900
38119
  stage: previewStageSchema.optional(),
37901
- prefetchedEvents: z55.boolean(),
38120
+ prefetchedEvents: z56.boolean(),
37902
38121
  eventKind: eventBlockKindSchema2,
37903
38122
  eventSurface: eventSurfaceScopeSchema2,
37904
- filterEventPresets: z55.string().nullable(),
38123
+ filterEventPresets: z56.string().nullable(),
37905
38124
  scheduleScope: eventScheduleScopeSchema3
37906
38125
  });
37907
- var eventCalendarRenderSchema = z55.object({
38126
+ var eventCalendarRenderSchema = z56.object({
37908
38127
  display: eventCalendarDisplaySchema,
37909
38128
  hydration: eventCalendarHydrationSchema
37910
38129
  });
37911
38130
  var eventCalendarIslandMetaCodec = createZodCodec(
37912
- z55.object({
37913
- siteId: z55.string(),
37914
- apiBaseUrl: z55.string().optional(),
38131
+ z56.object({
38132
+ siteId: z56.string(),
38133
+ apiBaseUrl: z56.string().optional(),
37915
38134
  stage: previewStageSchema.optional()
37916
38135
  })
37917
38136
  );
@@ -38653,7 +38872,7 @@ var eventCalendarBlockDefinition = {
38653
38872
  };
38654
38873
 
38655
38874
  // ../blocks/src/system/blocks/offerings-preview/index.ts
38656
- import { z as z56 } from "zod";
38875
+ import { z as z57 } from "zod";
38657
38876
 
38658
38877
  // ../blocks/src/system/blocks/offerings-preview/model.ts
38659
38878
  var OFFERINGS_PREVIEW_DEFAULT_ITEM_LIMIT = "3";
@@ -38975,13 +39194,13 @@ function normalizeTextOverride(value) {
38975
39194
  }
38976
39195
 
38977
39196
  // ../blocks/src/system/blocks/offerings-preview/index.ts
38978
- var publicRouteCandidatesSchema = z56.object({
38979
- routes: z56.array(z56.object({
38980
- entityId: z56.string(),
38981
- path: z56.string(),
38982
- title: z56.string(),
38983
- kind: z56.enum(["page", "content"]),
38984
- contentTypeKey: z56.string().nullable().optional()
39197
+ var publicRouteCandidatesSchema = z57.object({
39198
+ routes: z57.array(z57.object({
39199
+ entityId: z57.string(),
39200
+ path: z57.string(),
39201
+ title: z57.string(),
39202
+ kind: z57.enum(["page", "content"]),
39203
+ contentTypeKey: z57.string().nullable().optional()
38985
39204
  }))
38986
39205
  });
38987
39206
  var groupOverrideFields = [
@@ -39379,7 +39598,7 @@ function isRecord8(value) {
39379
39598
  }
39380
39599
 
39381
39600
  // ../blocks/src/system/blocks/embed.ts
39382
- import { z as z57 } from "zod";
39601
+ import { z as z58 } from "zod";
39383
39602
  var embedFields = [
39384
39603
  // Section heading
39385
39604
  parseFieldDefinition({
@@ -39610,18 +39829,18 @@ var embedManifest = createBlockManifest({
39610
39829
  spacing: "lg"
39611
39830
  }
39612
39831
  });
39613
- var embedEntrySchema = z57.object({
39614
- id: z57.string(),
39615
- identifier: z57.string(),
39616
- title: z57.string(),
39617
- slug: z57.string().nullable().optional(),
39618
- content: z57.record(z57.string(), z57.unknown()).optional(),
39619
- publishedAt: z57.string().nullable().optional()
39832
+ var embedEntrySchema = z58.object({
39833
+ id: z58.string(),
39834
+ identifier: z58.string(),
39835
+ title: z58.string(),
39836
+ slug: z58.string().nullable().optional(),
39837
+ content: z58.record(z58.string(), z58.unknown()).optional(),
39838
+ publishedAt: z58.string().nullable().optional()
39620
39839
  });
39621
39840
  var embedBlockDefinition = {
39622
39841
  manifest: embedManifest,
39623
39842
  dataSchemas: {
39624
- entries: z57.array(embedEntrySchema).optional()
39843
+ entries: z58.array(embedEntrySchema).optional()
39625
39844
  },
39626
39845
  dataLoaders: {
39627
39846
  entries: {
@@ -40805,52 +41024,52 @@ var fileDownloadBlockDefinition = {
40805
41024
  };
40806
41025
 
40807
41026
  // ../blocks/src/system/blocks/shop.ts
40808
- import { z as z61 } from "zod";
41027
+ import { z as z62 } from "zod";
40809
41028
 
40810
41029
  // ../blocks/src/system/runtime/nodes/shop.interactive.ts
40811
- import { z as z60 } from "zod";
41030
+ import { z as z61 } from "zod";
40812
41031
 
40813
41032
  // ../blocks/src/system/blocks/products/shared.ts
40814
- import { z as z58 } from "zod";
40815
- var publicProductVariantSchema = z58.object({
40816
- id: z58.string(),
40817
- title: z58.string(),
40818
- sku: z58.string().nullable(),
40819
- priceCents: z58.number(),
40820
- stockQuantity: z58.number().nullable(),
40821
- soldOut: z58.boolean()
41033
+ import { z as z59 } from "zod";
41034
+ var publicProductVariantSchema = z59.object({
41035
+ id: z59.string(),
41036
+ title: z59.string(),
41037
+ sku: z59.string().nullable(),
41038
+ priceCents: z59.number(),
41039
+ stockQuantity: z59.number().nullable(),
41040
+ soldOut: z59.boolean()
40822
41041
  });
40823
- var publicProductSchema = z58.object({
40824
- id: z58.string(),
40825
- contentEntryId: z58.string().nullable(),
40826
- title: z58.string(),
40827
- slug: z58.string(),
40828
- path: z58.string().nullable(),
40829
- status: z58.enum(["draft", "active"]),
40830
- priceCents: z58.number(),
40831
- currency: z58.string(),
40832
- productType: z58.enum(["physical", "digital"]),
40833
- requiresShipping: z58.boolean(),
40834
- hasVariants: z58.boolean(),
40835
- trackInventory: z58.boolean(),
40836
- soldOut: z58.boolean(),
40837
- category: z58.object({
40838
- id: z58.string(),
40839
- name: z58.string(),
40840
- slug: z58.string()
41042
+ var publicProductSchema = z59.object({
41043
+ id: z59.string(),
41044
+ contentEntryId: z59.string().nullable(),
41045
+ title: z59.string(),
41046
+ slug: z59.string(),
41047
+ path: z59.string().nullable(),
41048
+ status: z59.enum(["draft", "active"]),
41049
+ priceCents: z59.number(),
41050
+ currency: z59.string(),
41051
+ productType: z59.enum(["physical", "digital"]),
41052
+ requiresShipping: z59.boolean(),
41053
+ hasVariants: z59.boolean(),
41054
+ trackInventory: z59.boolean(),
41055
+ soldOut: z59.boolean(),
41056
+ category: z59.object({
41057
+ id: z59.string(),
41058
+ name: z59.string(),
41059
+ slug: z59.string()
40841
41060
  }).nullable(),
40842
- summary: z58.string().nullable(),
40843
- body: z58.unknown().nullable(),
40844
- gallery: z58.array(
40845
- z58.object({
40846
- url: z58.string(),
40847
- alt: z58.string().nullable()
41061
+ summary: z59.string().nullable(),
41062
+ body: z59.unknown().nullable(),
41063
+ gallery: z59.array(
41064
+ z59.object({
41065
+ url: z59.string(),
41066
+ alt: z59.string().nullable()
40848
41067
  })
40849
41068
  ),
40850
- variants: z58.array(publicProductVariantSchema)
41069
+ variants: z59.array(publicProductVariantSchema)
40851
41070
  });
40852
- var publicProductsResponseSchema = z58.object({
40853
- products: z58.array(publicProductSchema)
41071
+ var publicProductsResponseSchema = z59.object({
41072
+ products: z59.array(publicProductSchema)
40854
41073
  });
40855
41074
 
40856
41075
  // ../blocks/src/system/runtime/api/creditProducts.ts
@@ -40914,27 +41133,27 @@ function deriveCreditProductLabels(products, options = {}) {
40914
41133
  }
40915
41134
 
40916
41135
  // ../blocks/src/system/runtime/nodes/shop-commerce.shared.ts
40917
- import { z as z59 } from "zod";
40918
- var storedProductCartItemSchema = z59.object({
40919
- kind: z59.literal("product"),
40920
- productId: z59.string().min(1),
40921
- productCategoryId: z59.string().min(1).optional().nullable(),
40922
- variantId: z59.string().min(1).optional().nullable(),
40923
- title: z59.string().min(1),
40924
- variantTitle: z59.string().optional().nullable(),
40925
- quantity: z59.number().finite(),
40926
- unitPriceCents: z59.number().finite(),
40927
- currency: z59.string().min(1),
40928
- imageUrl: z59.string().optional().nullable(),
40929
- soldOut: z59.boolean().optional()
41136
+ import { z as z60 } from "zod";
41137
+ var storedProductCartItemSchema = z60.object({
41138
+ kind: z60.literal("product"),
41139
+ productId: z60.string().min(1),
41140
+ productCategoryId: z60.string().min(1).optional().nullable(),
41141
+ variantId: z60.string().min(1).optional().nullable(),
41142
+ title: z60.string().min(1),
41143
+ variantTitle: z60.string().optional().nullable(),
41144
+ quantity: z60.number().finite(),
41145
+ unitPriceCents: z60.number().finite(),
41146
+ currency: z60.string().min(1),
41147
+ imageUrl: z60.string().optional().nullable(),
41148
+ soldOut: z60.boolean().optional()
40930
41149
  });
40931
- var storedPassCartItemSchema = z59.object({
40932
- kind: z59.literal("pass"),
40933
- passId: z59.string().min(1),
40934
- title: z59.string().min(1),
40935
- quantity: z59.number().finite().optional(),
40936
- unitPriceCents: z59.number().finite(),
40937
- currency: z59.string().min(1)
41150
+ var storedPassCartItemSchema = z60.object({
41151
+ kind: z60.literal("pass"),
41152
+ passId: z60.string().min(1),
41153
+ title: z60.string().min(1),
41154
+ quantity: z60.number().finite().optional(),
41155
+ unitPriceCents: z60.number().finite(),
41156
+ currency: z60.string().min(1)
40938
41157
  });
40939
41158
  function deriveCommerceCheckoutState(state) {
40940
41159
  if (state.items.length === 0) {
@@ -40973,10 +41192,7 @@ function resolveSelectedProduct(products, contentEntry, productSlug) {
40973
41192
 
40974
41193
  // ../blocks/src/system/runtime/nodes/commerce/shared/display.ts
40975
41194
  function formatCommercePrice(cents, currency) {
40976
- return new Intl.NumberFormat("en-US", {
40977
- style: "currency",
40978
- currency: currency.toUpperCase()
40979
- }).format(cents / 100);
41195
+ return formatCurrencyAmount(cents, currency);
40980
41196
  }
40981
41197
  function getPassesHeading(passes, explicitHeading) {
40982
41198
  if (explicitHeading) return explicitHeading;
@@ -41171,214 +41387,214 @@ function formatValidity(days) {
41171
41387
  }
41172
41388
 
41173
41389
  // ../blocks/src/system/runtime/nodes/shop.interactive.ts
41174
- var shopModeSchema = z60.enum(["passes-memberships", "product-list", "product-detail", "cart", "checkout"]);
41175
- var contentEntrySchema3 = z60.object({
41176
- id: z60.string().nullable().optional(),
41177
- slug: z60.string().nullable().optional()
41390
+ var shopModeSchema = z61.enum(["passes-memberships", "product-list", "product-detail", "cart", "checkout"]);
41391
+ var contentEntrySchema3 = z61.object({
41392
+ id: z61.string().nullable().optional(),
41393
+ slug: z61.string().nullable().optional()
41178
41394
  }).nullable();
41179
- var shopSourceSchema = z60.object({
41180
- className: z60.string().nullable().optional(),
41395
+ var shopSourceSchema = z61.object({
41396
+ className: z61.string().nullable().optional(),
41181
41397
  mode: shopModeSchema.optional(),
41182
- heading: z60.string().nullable().optional(),
41183
- productSlug: z60.string().nullable().optional(),
41184
- showPasses: z60.boolean().optional(),
41185
- showMemberships: z60.boolean().optional(),
41186
- layout: z60.enum(["grid", "list"]).optional(),
41187
- columns: z60.string().optional(),
41188
- showDescriptions: z60.boolean().optional(),
41189
- showSummary: z60.boolean().optional(),
41190
- showBody: z60.boolean().optional(),
41191
- showPrices: z60.boolean().optional(),
41192
- showValidityPeriod: z60.boolean().optional(),
41193
- showPricePerCredit: z60.boolean().nullable().optional(),
41194
- passesHeading: z60.string().optional(),
41195
- membershipsHeading: z60.string().optional(),
41196
- buyButtonText: z60.string().optional(),
41197
- addButtonText: z60.string().optional(),
41198
- passPurchaseMode: z60.enum(["add_to_cart", "buy_now"]).optional(),
41199
- subscribeButtonText: z60.string().optional(),
41200
- emptyStateText: z60.string().optional(),
41201
- checkoutButtonText: z60.string().optional(),
41202
- clearButtonText: z60.string().optional(),
41203
- submitButtonText: z60.string().optional(),
41398
+ heading: z61.string().nullable().optional(),
41399
+ productSlug: z61.string().nullable().optional(),
41400
+ showPasses: z61.boolean().optional(),
41401
+ showMemberships: z61.boolean().optional(),
41402
+ layout: z61.enum(["grid", "list"]).optional(),
41403
+ columns: z61.string().optional(),
41404
+ showDescriptions: z61.boolean().optional(),
41405
+ showSummary: z61.boolean().optional(),
41406
+ showBody: z61.boolean().optional(),
41407
+ showPrices: z61.boolean().optional(),
41408
+ showValidityPeriod: z61.boolean().optional(),
41409
+ showPricePerCredit: z61.boolean().nullable().optional(),
41410
+ passesHeading: z61.string().optional(),
41411
+ membershipsHeading: z61.string().optional(),
41412
+ buyButtonText: z61.string().optional(),
41413
+ addButtonText: z61.string().optional(),
41414
+ passPurchaseMode: z61.enum(["add_to_cart", "buy_now"]).optional(),
41415
+ subscribeButtonText: z61.string().optional(),
41416
+ emptyStateText: z61.string().optional(),
41417
+ checkoutButtonText: z61.string().optional(),
41418
+ clearButtonText: z61.string().optional(),
41419
+ submitButtonText: z61.string().optional(),
41204
41420
  contentEntry: contentEntrySchema3.optional(),
41205
- passes: z60.array(publicPassProductSchema).nullable().optional(),
41206
- memberships: z60.array(publicMembershipProductSchema).nullable().optional(),
41207
- products: z60.array(publicProductSchema).nullable().optional(),
41208
- siteId: z60.string().optional(),
41209
- apiBaseUrl: z60.string().optional(),
41421
+ passes: z61.array(publicPassProductSchema).nullable().optional(),
41422
+ memberships: z61.array(publicMembershipProductSchema).nullable().optional(),
41423
+ products: z61.array(publicProductSchema).nullable().optional(),
41424
+ siteId: z61.string().optional(),
41425
+ apiBaseUrl: z61.string().optional(),
41210
41426
  stage: previewStageSchema.optional()
41211
41427
  });
41212
- var productVariantOptionDisplaySchema = z60.object({
41213
- id: z60.string(),
41214
- label: z60.string(),
41215
- soldOut: z60.boolean()
41428
+ var productVariantOptionDisplaySchema = z61.object({
41429
+ id: z61.string(),
41430
+ label: z61.string(),
41431
+ soldOut: z61.boolean()
41216
41432
  });
41217
- var productCardDisplaySchema = z60.object({
41218
- productId: z60.string(),
41219
- title: z60.string(),
41220
- path: z60.string().nullable(),
41221
- summary: z60.string().nullable(),
41222
- priceLabel: z60.string().nullable(),
41223
- image: z60.object({
41224
- url: z60.string(),
41225
- alt: z60.string().nullable()
41433
+ var productCardDisplaySchema = z61.object({
41434
+ productId: z61.string(),
41435
+ title: z61.string(),
41436
+ path: z61.string().nullable(),
41437
+ summary: z61.string().nullable(),
41438
+ priceLabel: z61.string().nullable(),
41439
+ image: z61.object({
41440
+ url: z61.string(),
41441
+ alt: z61.string().nullable()
41226
41442
  }).nullable(),
41227
- variantOptions: z60.array(productVariantOptionDisplaySchema),
41228
- selectedVariantId: z60.string().nullable(),
41229
- selectionLabel: z60.string(),
41230
- actionLabel: z60.string(),
41231
- soldOut: z60.boolean()
41443
+ variantOptions: z61.array(productVariantOptionDisplaySchema),
41444
+ selectedVariantId: z61.string().nullable(),
41445
+ selectionLabel: z61.string(),
41446
+ actionLabel: z61.string(),
41447
+ soldOut: z61.boolean()
41232
41448
  });
41233
- var productListDisplaySchema = z60.object({
41234
- kind: z60.literal("product-list"),
41235
- state: z60.enum(["empty", "ready"]),
41236
- heading: z60.string().nullable(),
41237
- className: z60.string().nullable(),
41238
- layout: z60.enum(["grid", "list"]),
41239
- columns: z60.string(),
41240
- emptyMessage: z60.string(),
41241
- cards: z60.array(productCardDisplaySchema)
41449
+ var productListDisplaySchema = z61.object({
41450
+ kind: z61.literal("product-list"),
41451
+ state: z61.enum(["empty", "ready"]),
41452
+ heading: z61.string().nullable(),
41453
+ className: z61.string().nullable(),
41454
+ layout: z61.enum(["grid", "list"]),
41455
+ columns: z61.string(),
41456
+ emptyMessage: z61.string(),
41457
+ cards: z61.array(productCardDisplaySchema)
41242
41458
  });
41243
- var productDetailDisplaySchema = z60.discriminatedUnion("state", [
41244
- z60.object({
41245
- kind: z60.literal("product-detail"),
41246
- state: z60.literal("empty"),
41247
- heading: z60.string().nullable(),
41248
- className: z60.string().nullable(),
41249
- emptyMessage: z60.string()
41459
+ var productDetailDisplaySchema = z61.discriminatedUnion("state", [
41460
+ z61.object({
41461
+ kind: z61.literal("product-detail"),
41462
+ state: z61.literal("empty"),
41463
+ heading: z61.string().nullable(),
41464
+ className: z61.string().nullable(),
41465
+ emptyMessage: z61.string()
41250
41466
  }),
41251
- z60.object({
41252
- kind: z60.literal("product-detail"),
41253
- state: z60.literal("ready"),
41254
- heading: z60.string().nullable(),
41255
- className: z60.string().nullable(),
41256
- title: z60.string(),
41257
- priceLabel: z60.string(),
41258
- summary: z60.string().nullable(),
41259
- categoryLabel: z60.string().nullable(),
41260
- gallery: z60.array(z60.object({
41261
- url: z60.string(),
41262
- alt: z60.string().nullable()
41467
+ z61.object({
41468
+ kind: z61.literal("product-detail"),
41469
+ state: z61.literal("ready"),
41470
+ heading: z61.string().nullable(),
41471
+ className: z61.string().nullable(),
41472
+ title: z61.string(),
41473
+ priceLabel: z61.string(),
41474
+ summary: z61.string().nullable(),
41475
+ categoryLabel: z61.string().nullable(),
41476
+ gallery: z61.array(z61.object({
41477
+ url: z61.string(),
41478
+ alt: z61.string().nullable()
41263
41479
  })),
41264
- variantOptions: z60.array(productVariantOptionDisplaySchema),
41265
- selectedVariantId: z60.string().nullable(),
41266
- selectionLabel: z60.string(),
41267
- actionLabel: z60.string(),
41268
- soldOut: z60.boolean(),
41269
- body: z60.unknown().nullable()
41480
+ variantOptions: z61.array(productVariantOptionDisplaySchema),
41481
+ selectedVariantId: z61.string().nullable(),
41482
+ selectionLabel: z61.string(),
41483
+ actionLabel: z61.string(),
41484
+ soldOut: z61.boolean(),
41485
+ body: z61.unknown().nullable()
41270
41486
  })
41271
41487
  ]);
41272
- var passCardDisplaySchema = z60.object({
41273
- id: z60.string(),
41274
- title: z60.string(),
41275
- description: z60.string().nullable(),
41276
- priceLabel: z60.string(),
41277
- creditsLabel: z60.string(),
41278
- perCreditLabel: z60.string().nullable(),
41279
- validityLabel: z60.string().nullable(),
41280
- actionLabel: z60.string()
41488
+ var passCardDisplaySchema = z61.object({
41489
+ id: z61.string(),
41490
+ title: z61.string(),
41491
+ description: z61.string().nullable(),
41492
+ priceLabel: z61.string(),
41493
+ creditsLabel: z61.string(),
41494
+ perCreditLabel: z61.string().nullable(),
41495
+ validityLabel: z61.string().nullable(),
41496
+ actionLabel: z61.string()
41281
41497
  });
41282
- var membershipCardDisplaySchema = z60.object({
41283
- id: z60.string(),
41284
- title: z60.string(),
41285
- description: z60.string().nullable(),
41286
- priceLabel: z60.string(),
41287
- intervalLabel: z60.string(),
41288
- actionLabel: z60.string()
41498
+ var membershipCardDisplaySchema = z61.object({
41499
+ id: z61.string(),
41500
+ title: z61.string(),
41501
+ description: z61.string().nullable(),
41502
+ priceLabel: z61.string(),
41503
+ intervalLabel: z61.string(),
41504
+ actionLabel: z61.string()
41289
41505
  });
41290
- var passesMembershipsDisplaySchema = z60.object({
41291
- kind: z60.literal("passes-memberships"),
41292
- state: z60.enum(["empty", "ready"]),
41293
- className: z60.string().nullable(),
41294
- layout: z60.enum(["grid", "list"]),
41295
- columns: z60.string(),
41296
- emptyMessage: z60.string(),
41297
- passesHeading: z60.string(),
41298
- membershipsHeading: z60.string(),
41299
- passes: z60.array(passCardDisplaySchema),
41300
- memberships: z60.array(membershipCardDisplaySchema)
41506
+ var passesMembershipsDisplaySchema = z61.object({
41507
+ kind: z61.literal("passes-memberships"),
41508
+ state: z61.enum(["empty", "ready"]),
41509
+ className: z61.string().nullable(),
41510
+ layout: z61.enum(["grid", "list"]),
41511
+ columns: z61.string(),
41512
+ emptyMessage: z61.string(),
41513
+ passesHeading: z61.string(),
41514
+ membershipsHeading: z61.string(),
41515
+ passes: z61.array(passCardDisplaySchema),
41516
+ memberships: z61.array(membershipCardDisplaySchema)
41301
41517
  });
41302
- var cartLineDisplaySchema = z60.object({
41303
- key: z60.string(),
41304
- title: z60.string(),
41305
- priceLabel: z60.string(),
41306
- quantity: z60.number(),
41307
- quantityEditable: z60.boolean()
41518
+ var cartLineDisplaySchema = z61.object({
41519
+ key: z61.string(),
41520
+ title: z61.string(),
41521
+ priceLabel: z61.string(),
41522
+ quantity: z61.number(),
41523
+ quantityEditable: z61.boolean()
41308
41524
  });
41309
- var cartDisplaySchema = z60.object({
41310
- kind: z60.literal("cart"),
41311
- state: z60.enum(["empty", "ready"]),
41312
- heading: z60.string().nullable(),
41313
- className: z60.string().nullable(),
41314
- emptyMessage: z60.string(),
41315
- supportText: z60.string().nullable(),
41316
- items: z60.array(cartLineDisplaySchema),
41317
- subtotalLabel: z60.string().nullable(),
41318
- checkoutButtonText: z60.string(),
41319
- clearButtonText: z60.string()
41525
+ var cartDisplaySchema = z61.object({
41526
+ kind: z61.literal("cart"),
41527
+ state: z61.enum(["empty", "ready"]),
41528
+ heading: z61.string().nullable(),
41529
+ className: z61.string().nullable(),
41530
+ emptyMessage: z61.string(),
41531
+ supportText: z61.string().nullable(),
41532
+ items: z61.array(cartLineDisplaySchema),
41533
+ subtotalLabel: z61.string().nullable(),
41534
+ checkoutButtonText: z61.string(),
41535
+ clearButtonText: z61.string()
41320
41536
  });
41321
- var checkoutDisplaySchema = z60.object({
41322
- kind: z60.literal("checkout"),
41323
- state: z60.enum(["empty", "blocked", "ready"]),
41324
- heading: z60.string().nullable(),
41325
- className: z60.string().nullable(),
41326
- message: z60.string().nullable(),
41327
- submitButtonText: z60.string()
41537
+ var checkoutDisplaySchema = z61.object({
41538
+ kind: z61.literal("checkout"),
41539
+ state: z61.enum(["empty", "blocked", "ready"]),
41540
+ heading: z61.string().nullable(),
41541
+ className: z61.string().nullable(),
41542
+ message: z61.string().nullable(),
41543
+ submitButtonText: z61.string()
41328
41544
  });
41329
- var passesMembershipsHydrationSchema = z60.object({
41330
- passes: z60.array(publicPassProductSchema),
41331
- memberships: z60.array(publicMembershipProductSchema),
41332
- passPurchaseMode: z60.enum(["add_to_cart", "buy_now"])
41545
+ var passesMembershipsHydrationSchema = z61.object({
41546
+ passes: z61.array(publicPassProductSchema),
41547
+ memberships: z61.array(publicMembershipProductSchema),
41548
+ passPurchaseMode: z61.enum(["add_to_cart", "buy_now"])
41333
41549
  });
41334
- var productListHydrationSchema = z60.object({
41335
- products: z60.array(publicProductSchema),
41336
- showSummary: z60.boolean(),
41337
- showPrices: z60.boolean(),
41338
- addButtonText: z60.string()
41550
+ var productListHydrationSchema = z61.object({
41551
+ products: z61.array(publicProductSchema),
41552
+ showSummary: z61.boolean(),
41553
+ showPrices: z61.boolean(),
41554
+ addButtonText: z61.string()
41339
41555
  });
41340
- var productDetailHydrationSchema = z60.object({
41341
- products: z60.array(publicProductSchema),
41342
- productId: z60.string().nullable(),
41343
- showSummary: z60.boolean(),
41344
- showBody: z60.boolean(),
41345
- addButtonText: z60.string()
41556
+ var productDetailHydrationSchema = z61.object({
41557
+ products: z61.array(publicProductSchema),
41558
+ productId: z61.string().nullable(),
41559
+ showSummary: z61.boolean(),
41560
+ showBody: z61.boolean(),
41561
+ addButtonText: z61.string()
41346
41562
  });
41347
- var cartHydrationSchema = z60.object({
41348
- emptyStateText: z60.string(),
41349
- checkoutButtonText: z60.string(),
41350
- clearButtonText: z60.string()
41563
+ var cartHydrationSchema = z61.object({
41564
+ emptyStateText: z61.string(),
41565
+ checkoutButtonText: z61.string(),
41566
+ clearButtonText: z61.string()
41351
41567
  });
41352
- var checkoutHydrationSchema = z60.object({
41353
- emptyStateText: z60.string(),
41354
- submitButtonText: z60.string()
41568
+ var checkoutHydrationSchema = z61.object({
41569
+ emptyStateText: z61.string(),
41570
+ submitButtonText: z61.string()
41355
41571
  });
41356
- var passesMembershipsRenderSchema = z60.object({
41572
+ var passesMembershipsRenderSchema = z61.object({
41357
41573
  display: passesMembershipsDisplaySchema,
41358
41574
  hydration: passesMembershipsHydrationSchema
41359
41575
  });
41360
- var productListRenderSchema = z60.object({
41576
+ var productListRenderSchema = z61.object({
41361
41577
  display: productListDisplaySchema,
41362
41578
  hydration: productListHydrationSchema
41363
41579
  });
41364
- var productDetailRenderSchema = z60.object({
41580
+ var productDetailRenderSchema = z61.object({
41365
41581
  display: productDetailDisplaySchema,
41366
41582
  hydration: productDetailHydrationSchema
41367
41583
  });
41368
- var cartRenderSchema = z60.object({
41584
+ var cartRenderSchema = z61.object({
41369
41585
  display: cartDisplaySchema,
41370
41586
  hydration: cartHydrationSchema
41371
41587
  });
41372
- var checkoutRenderSchema = z60.object({
41588
+ var checkoutRenderSchema = z61.object({
41373
41589
  display: checkoutDisplaySchema,
41374
41590
  hydration: checkoutHydrationSchema
41375
41591
  });
41376
41592
  function resolveShowPricePerCredit(source) {
41377
41593
  return source.showPricePerCredit ?? true;
41378
41594
  }
41379
- var shopIslandMetaCodec = createZodCodec(z60.object({
41380
- siteId: z60.string().optional(),
41381
- apiBaseUrl: z60.string().optional(),
41595
+ var shopIslandMetaCodec = createZodCodec(z61.object({
41596
+ siteId: z61.string().optional(),
41597
+ apiBaseUrl: z61.string().optional(),
41382
41598
  stage: previewStageSchema.optional()
41383
41599
  }));
41384
41600
  var shopIslandMetaKeys = defineInteractiveIslandMetaKeys("siteId", "apiBaseUrl", "stage");
@@ -41831,9 +42047,9 @@ var shopBlockDefinition = {
41831
42047
  runtime: shopBlockRuntime,
41832
42048
  dataSchemas: {
41833
42049
  // listPublicPasses returns { passes: [...] }
41834
- passes: z61.object({ passes: z61.array(publicPassProductSchema) }).optional(),
42050
+ passes: z62.object({ passes: z62.array(publicPassProductSchema) }).optional(),
41835
42051
  // listPublicMemberships returns { memberships: [...] }
41836
- memberships: z61.object({ memberships: z61.array(publicMembershipProductSchema) }).optional()
42052
+ memberships: z62.object({ memberships: z62.array(publicMembershipProductSchema) }).optional()
41837
42053
  },
41838
42054
  dataLoaders: {
41839
42055
  // Load passes for display
@@ -41856,7 +42072,7 @@ var shopBlockDefinition = {
41856
42072
  };
41857
42073
 
41858
42074
  // ../blocks/src/system/blocks/product-list.ts
41859
- import { z as z62 } from "zod";
42075
+ import { z as z63 } from "zod";
41860
42076
  var productListManifest = createBlockManifest({
41861
42077
  id: "block.product-list",
41862
42078
  version: "1.0.0",
@@ -41989,7 +42205,7 @@ var productListBlockDefinition = {
41989
42205
  }
41990
42206
  }
41991
42207
  };
41992
- var productListDataSchema = z62.object({
42208
+ var productListDataSchema = z63.object({
41993
42209
  products: publicProductsResponseSchema.optional()
41994
42210
  });
41995
42211
 
@@ -42250,72 +42466,72 @@ var checkoutBlockDefinition = {
42250
42466
  };
42251
42467
 
42252
42468
  // ../blocks/src/system/runtime/nodes/gifting.interactive.ts
42253
- import { z as z63 } from "zod";
42254
- var publicGiftCardOfferSchema = z63.object({
42255
- id: z63.string(),
42256
- kind: z63.literal("gift_card"),
42257
- title: z63.string(),
42258
- description: z63.string().nullable(),
42259
- sortOrder: z63.number().int(),
42260
- giftCard: z63.object({
42261
- fixedDenominations: z63.array(z63.number().int().positive()),
42262
- customAmountEnabled: z63.boolean(),
42263
- customAmountMinCents: z63.number().int().positive(),
42264
- customAmountMaxCents: z63.number().int().positive()
42469
+ import { z as z64 } from "zod";
42470
+ var publicGiftCardOfferSchema = z64.object({
42471
+ id: z64.string(),
42472
+ kind: z64.literal("gift_card"),
42473
+ title: z64.string(),
42474
+ description: z64.string().nullable(),
42475
+ sortOrder: z64.number().int(),
42476
+ giftCard: z64.object({
42477
+ fixedDenominations: z64.array(z64.number().int().positive()),
42478
+ customAmountEnabled: z64.boolean(),
42479
+ customAmountMinCents: z64.number().int().positive(),
42480
+ customAmountMaxCents: z64.number().int().positive()
42265
42481
  }),
42266
- voucher: z63.null()
42482
+ voucher: z64.null()
42267
42483
  });
42268
- var publicVoucherOfferSchema = z63.object({
42269
- id: z63.string(),
42270
- kind: z63.literal("voucher"),
42271
- title: z63.string(),
42272
- description: z63.string().nullable(),
42273
- sortOrder: z63.number().int(),
42274
- giftCard: z63.null(),
42275
- voucher: z63.object({
42276
- purchaseAmountCents: z63.number().int().positive()
42484
+ var publicVoucherOfferSchema = z64.object({
42485
+ id: z64.string(),
42486
+ kind: z64.literal("voucher"),
42487
+ title: z64.string(),
42488
+ description: z64.string().nullable(),
42489
+ sortOrder: z64.number().int(),
42490
+ giftCard: z64.null(),
42491
+ voucher: z64.object({
42492
+ purchaseAmountCents: z64.number().int().positive()
42277
42493
  })
42278
42494
  });
42279
- var publicGiftingOffersResponseSchema = z63.object({
42280
- currency: z63.string(),
42281
- giftCards: z63.array(publicGiftCardOfferSchema),
42282
- vouchers: z63.array(publicVoucherOfferSchema)
42495
+ var publicGiftingOffersResponseSchema = z64.object({
42496
+ currency: z64.string(),
42497
+ giftCards: z64.array(publicGiftCardOfferSchema),
42498
+ vouchers: z64.array(publicVoucherOfferSchema)
42283
42499
  });
42284
- var giftingSourceSchema = z63.object({
42285
- siteId: z63.string().optional(),
42286
- apiBaseUrl: z63.string().optional(),
42500
+ var giftingSourceSchema = z64.object({
42501
+ siteId: z64.string().optional(),
42502
+ apiBaseUrl: z64.string().optional(),
42287
42503
  offers: publicGiftingOffersResponseSchema.nullable().optional(),
42288
- className: z63.string().nullable().optional(),
42289
- heading: z63.string().nullable().optional(),
42290
- intro: z63.string().nullable().optional(),
42291
- giftCardsHeading: z63.string().nullable().optional(),
42292
- vouchersHeading: z63.string().nullable().optional(),
42293
- emptyStateText: z63.string().nullable().optional(),
42294
- checkoutButtonText: z63.string().nullable().optional(),
42295
- successMessage: z63.string().nullable().optional()
42504
+ className: z64.string().nullable().optional(),
42505
+ heading: z64.string().nullable().optional(),
42506
+ intro: z64.string().nullable().optional(),
42507
+ giftCardsHeading: z64.string().nullable().optional(),
42508
+ vouchersHeading: z64.string().nullable().optional(),
42509
+ emptyStateText: z64.string().nullable().optional(),
42510
+ checkoutButtonText: z64.string().nullable().optional(),
42511
+ successMessage: z64.string().nullable().optional()
42296
42512
  });
42297
- var giftingDisplaySchema = z63.object({
42298
- kind: z63.literal("gifting"),
42299
- state: z63.literal("ready"),
42300
- className: z63.string().nullable(),
42301
- heading: z63.string(),
42302
- intro: z63.string().nullable(),
42303
- giftCardsHeading: z63.string(),
42304
- vouchersHeading: z63.string(),
42305
- emptyStateText: z63.string()
42513
+ var giftingDisplaySchema = z64.object({
42514
+ kind: z64.literal("gifting"),
42515
+ state: z64.literal("ready"),
42516
+ className: z64.string().nullable(),
42517
+ heading: z64.string(),
42518
+ intro: z64.string().nullable(),
42519
+ giftCardsHeading: z64.string(),
42520
+ vouchersHeading: z64.string(),
42521
+ emptyStateText: z64.string()
42306
42522
  });
42307
- var giftingHydrationSchema = z63.object({
42523
+ var giftingHydrationSchema = z64.object({
42308
42524
  offers: publicGiftingOffersResponseSchema.nullable(),
42309
- checkoutButtonText: z63.string(),
42310
- successMessage: z63.string()
42525
+ checkoutButtonText: z64.string(),
42526
+ successMessage: z64.string()
42311
42527
  });
42312
- var giftingRenderSchema = z63.object({
42528
+ var giftingRenderSchema = z64.object({
42313
42529
  display: giftingDisplaySchema,
42314
42530
  hydration: giftingHydrationSchema
42315
42531
  });
42316
- var giftingIslandMetaCodec = createZodCodec(z63.object({
42317
- siteId: z63.string().optional(),
42318
- apiBaseUrl: z63.string().optional()
42532
+ var giftingIslandMetaCodec = createZodCodec(z64.object({
42533
+ siteId: z64.string().optional(),
42534
+ apiBaseUrl: z64.string().optional()
42319
42535
  }));
42320
42536
  var giftingIslandMetaKeys = defineInteractiveIslandMetaKeys(
42321
42537
  "siteId",
@@ -42497,7 +42713,89 @@ var giftingBlockDefinition = {
42497
42713
  };
42498
42714
 
42499
42715
  // ../blocks/src/system/runtime/nodes/newsletter-form.interactive.ts
42500
- import { z as z64 } from "zod";
42716
+ import { z as z65 } from "zod";
42717
+
42718
+ // ../blocks/src/system/blocks/newsletter-signup-destination.ts
42719
+ function parseNewsletterSignupBlockId(value) {
42720
+ const trimmed = parseTrimmedString(value);
42721
+ return trimmed && BLOCK_ID_PATTERN.test(trimmed) ? trimmed : null;
42722
+ }
42723
+ function parseSignedNewsletterDestinationRef(value) {
42724
+ const trimmed = parseTrimmedString(value);
42725
+ return trimmed && SIGNED_DESTINATION_REF_PATTERN.test(trimmed) ? trimmed : null;
42726
+ }
42727
+ function parseNewsletterSignupDestinationProvider(value) {
42728
+ return value === "riverbank" || value === "mailchimp" ? value : null;
42729
+ }
42730
+ function buildNewsletterSignupBlockRef(blockId) {
42731
+ const parsed = parseNewsletterSignupBlockId(blockId);
42732
+ return parsed ? { tag: "block_ref", blockId: parsed } : null;
42733
+ }
42734
+ function normalizeNewsletterSignupEditorValuesForDestination(values) {
42735
+ const destinationProvider = parseNewsletterSignupDestinationProvider(values.destinationProvider) ?? "riverbank";
42736
+ if (destinationProvider === "mailchimp") {
42737
+ return {
42738
+ destinationProvider,
42739
+ mailchimpAudienceId: values.mailchimpAudienceId,
42740
+ mailchimpTags: values.mailchimpTags
42741
+ };
42742
+ }
42743
+ return {
42744
+ destinationProvider,
42745
+ listId: values.listId,
42746
+ tags: values.tags
42747
+ };
42748
+ }
42749
+ function deriveNewsletterSignupRuntimeSource(values) {
42750
+ const normalized = normalizeNewsletterSignupEditorValuesForDestination(values);
42751
+ if (normalized.destinationProvider === "mailchimp") {
42752
+ return {
42753
+ destinationProvider: "mailchimp",
42754
+ listId: null,
42755
+ tags: null
42756
+ };
42757
+ }
42758
+ return {
42759
+ destinationProvider: "riverbank",
42760
+ listId: parseTrimmedString(normalized.listId),
42761
+ tags: parseTrimmedString(normalized.tags)
42762
+ };
42763
+ }
42764
+ function sanitizeNewsletterSignupPublicContent(content) {
42765
+ if (!isRecord9(content)) return content;
42766
+ const provider = parseNewsletterSignupDestinationProvider(content.destinationProvider) ?? getProviderFromExplicitDestination(content.destination);
42767
+ const {
42768
+ destination: _destination,
42769
+ destinationProvider: _destinationProvider,
42770
+ mailchimpAudienceId: _mailchimpAudienceId,
42771
+ mailchimpTags: _mailchimpTags,
42772
+ listId,
42773
+ tags: tags2,
42774
+ ...publicContent
42775
+ } = content;
42776
+ const mutablePublicContent = { ...publicContent };
42777
+ if (provider !== "mailchimp") {
42778
+ if ("listId" in content) mutablePublicContent.listId = listId;
42779
+ if ("tags" in content) mutablePublicContent.tags = tags2;
42780
+ }
42781
+ return mutablePublicContent;
42782
+ }
42783
+ function getProviderFromExplicitDestination(destination) {
42784
+ if (!isRecord9(destination) || typeof destination.tag !== "string") return null;
42785
+ if (destination.tag === "riverbank_list") return "riverbank";
42786
+ if (destination.tag === "mailchimp_audience") return "mailchimp";
42787
+ return null;
42788
+ }
42789
+ var BLOCK_ID_PATTERN = /^[A-Za-z0-9._:-]{1,200}$/;
42790
+ var SIGNED_DESTINATION_REF_PATTERN = /^[A-Za-z0-9._~-]{16,1000}$/;
42791
+ function parseTrimmedString(value) {
42792
+ if (typeof value !== "string") return null;
42793
+ const trimmed = value.trim();
42794
+ return trimmed.length > 0 ? trimmed : null;
42795
+ }
42796
+ function isRecord9(value) {
42797
+ return typeof value === "object" && value !== null;
42798
+ }
42501
42799
 
42502
42800
  // ../blocks/src/system/runtime/nodes/newsletter-form.types.ts
42503
42801
  function getPresetFields(preset2, options) {
@@ -42550,49 +42848,65 @@ function withOptionalPhone(fields3, includePhone) {
42550
42848
  }
42551
42849
 
42552
42850
  // ../blocks/src/system/runtime/nodes/newsletter-form.interactive.ts
42553
- var newsletterPresetSchema = z64.enum(["emailOnly", "emailName", "emailFirstLast", "emailNameCompany"]);
42554
- var newsletterFieldSchema = z64.object({
42555
- id: z64.string(),
42556
- type: z64.enum(["email", "text"]),
42557
- label: z64.string(),
42558
- required: z64.boolean(),
42559
- placeholder: z64.string().optional()
42851
+ var newsletterPresetSchema = z65.enum(["emailOnly", "emailName", "emailFirstLast", "emailNameCompany"]);
42852
+ var newsletterDestinationProviderSchema = z65.enum(["riverbank", "mailchimp"]);
42853
+ var newsletterFieldSchema = z65.object({
42854
+ id: z65.string(),
42855
+ type: z65.enum(["email", "text"]),
42856
+ label: z65.string(),
42857
+ required: z65.boolean(),
42858
+ placeholder: z65.string().optional()
42560
42859
  });
42561
- var newsletterSourceSchema = z64.object({
42562
- siteId: z64.string().optional(),
42563
- apiBaseUrl: z64.string().optional(),
42564
- listId: z64.string().nullable().optional(),
42860
+ var newsletterSignupBlockIdSchema = z65.string().trim().min(1).transform(parseRequiredNewsletterSignupBlockId);
42861
+ var signedNewsletterDestinationRefSchema = z65.string().trim().min(1).transform(parseRequiredSignedNewsletterDestinationRef);
42862
+ var newsletterPublicDestinationRefSchema = z65.discriminatedUnion("tag", [
42863
+ z65.object({
42864
+ tag: z65.literal("block_ref"),
42865
+ blockId: newsletterSignupBlockIdSchema
42866
+ }),
42867
+ z65.object({
42868
+ tag: z65.literal("signed_destination_ref"),
42869
+ token: signedNewsletterDestinationRefSchema
42870
+ })
42871
+ ]);
42872
+ var newsletterSourceSchema = z65.object({
42873
+ blockId: z65.string().nullable().optional(),
42874
+ siteId: z65.string().optional(),
42875
+ apiBaseUrl: z65.string().optional(),
42876
+ listId: z65.string().nullable().optional(),
42877
+ destinationProvider: newsletterDestinationProviderSchema.nullable().optional(),
42565
42878
  preset: newsletterPresetSchema.optional(),
42566
- includePhone: z64.boolean().optional(),
42567
- buttonLabel: z64.string().nullable().optional(),
42568
- successMessage: z64.string().nullable().optional(),
42569
- privacyNote: z64.string().nullable().optional(),
42570
- tags: z64.string().nullable().optional(),
42571
- spamProtectionEnabled: z64.boolean().optional(),
42572
- className: z64.string().nullable().optional()
42879
+ includePhone: z65.boolean().optional(),
42880
+ buttonLabel: z65.string().nullable().optional(),
42881
+ successMessage: z65.string().nullable().optional(),
42882
+ privacyNote: z65.string().nullable().optional(),
42883
+ tags: z65.string().nullable().optional(),
42884
+ spamProtectionEnabled: z65.boolean().optional(),
42885
+ className: z65.string().nullable().optional()
42573
42886
  });
42574
- var newsletterDisplaySchema = z64.object({
42575
- kind: z64.literal("newsletter-form"),
42576
- className: z64.string().nullable(),
42577
- buttonLabel: z64.string(),
42578
- successMessage: z64.string().nullable(),
42579
- privacyNote: z64.string().nullable(),
42580
- fields: z64.array(newsletterFieldSchema)
42887
+ var newsletterDisplaySchema = z65.object({
42888
+ kind: z65.literal("newsletter-form"),
42889
+ className: z65.string().nullable(),
42890
+ buttonLabel: z65.string(),
42891
+ successMessage: z65.string().nullable(),
42892
+ privacyNote: z65.string().nullable(),
42893
+ fields: z65.array(newsletterFieldSchema)
42581
42894
  });
42582
- var newsletterHydrationSchema = z64.object({
42583
- listId: z64.string().nullable().optional(),
42895
+ var newsletterHydrationSchema = z65.object({
42896
+ destinationRef: newsletterPublicDestinationRefSchema.nullable().optional(),
42897
+ listId: z65.string().nullable().optional(),
42584
42898
  preset: newsletterPresetSchema,
42585
- includePhone: z64.boolean(),
42586
- tags: z64.string().nullable().optional(),
42587
- spamProtectionEnabled: z64.boolean().optional()
42899
+ includePhone: z65.boolean(),
42900
+ tags: z65.string().nullable().optional(),
42901
+ spamProtectionEnabled: z65.boolean().optional()
42588
42902
  });
42589
- var newsletterRenderSchema = z64.object({
42903
+ var newsletterRenderSchema = z65.object({
42590
42904
  display: newsletterDisplaySchema,
42591
42905
  hydration: newsletterHydrationSchema
42592
42906
  });
42593
- var newsletterIslandMetaCodec = createZodCodec(z64.object({
42594
- siteId: z64.string().optional(),
42595
- apiBaseUrl: z64.string().optional()
42907
+ var newsletterIslandMetaCodec = createZodCodec(z65.object({
42908
+ siteId: z65.string().optional(),
42909
+ apiBaseUrl: z65.string().optional()
42596
42910
  }));
42597
42911
  var newsletterIslandMetaKeys = defineInteractiveIslandMetaKeys("siteId", "apiBaseUrl");
42598
42912
  function buildNewsletterDisplay(source) {
@@ -42613,16 +42927,20 @@ var newsletterFormBlockRuntime = defineProgressiveBlockRuntime({
42613
42927
  source: createZodCodec(newsletterSourceSchema),
42614
42928
  render: createZodCodec(newsletterRenderSchema)
42615
42929
  },
42616
- buildRender: (source) => ({
42617
- display: buildNewsletterDisplay(source),
42618
- hydration: {
42619
- listId: source.listId,
42620
- preset: source.preset ?? "emailOnly",
42621
- includePhone: source.includePhone ?? false,
42622
- tags: source.tags ?? null,
42623
- spamProtectionEnabled: source.spamProtectionEnabled
42624
- }
42625
- })
42930
+ buildRender: (source) => {
42931
+ const runtimeSource = deriveNewsletterSignupRuntimeSource(source);
42932
+ return {
42933
+ display: buildNewsletterDisplay(source),
42934
+ hydration: {
42935
+ destinationRef: buildNewsletterSignupBlockRef(source.blockId),
42936
+ listId: runtimeSource.listId,
42937
+ preset: source.preset ?? "emailOnly",
42938
+ includePhone: source.includePhone ?? false,
42939
+ tags: runtimeSource.tags,
42940
+ spamProtectionEnabled: source.spamProtectionEnabled
42941
+ }
42942
+ };
42943
+ }
42626
42944
  });
42627
42945
  var newsletterFormInteractiveIslandPropsCodec = createInteractiveIslandCodec({
42628
42946
  runtime: newsletterFormBlockRuntime,
@@ -42645,6 +42963,20 @@ function buildNewsletterFormInteractiveIslandProps(props2) {
42645
42963
  source: props2
42646
42964
  });
42647
42965
  }
42966
+ function parseRequiredNewsletterSignupBlockId(value) {
42967
+ const parsed = parseNewsletterSignupBlockId(value);
42968
+ if (!parsed) {
42969
+ throw new Error("Newsletter signup block destination ref requires blockId");
42970
+ }
42971
+ return parsed;
42972
+ }
42973
+ function parseRequiredSignedNewsletterDestinationRef(value) {
42974
+ const parsed = parseSignedNewsletterDestinationRef(value);
42975
+ if (!parsed) {
42976
+ throw new Error("Newsletter signup signed destination ref requires token");
42977
+ }
42978
+ return parsed;
42979
+ }
42648
42980
 
42649
42981
  // ../blocks/src/system/blocks/newsletter-signup.ts
42650
42982
  var stackedComposition = composeFragments([
@@ -42724,23 +43056,23 @@ var newsletterSignupBlockDefinition = {
42724
43056
  };
42725
43057
 
42726
43058
  // ../blocks/src/system/blocks/team-members.ts
42727
- import { z as z65 } from "zod";
43059
+ import { z as z66 } from "zod";
42728
43060
  var ITEM_NAME2 = "member";
42729
43061
  var teamMemberPhotoSchema = mediaSchema2.refine((media2) => media2.type === "image", {
42730
43062
  message: "Team member photos must be image media"
42731
43063
  }).nullable();
42732
- var teamMemberDataSchema = z65.object({
42733
- _type: z65.literal("teamMember"),
42734
- id: z65.string(),
42735
- name: z65.string(),
42736
- role: z65.string().nullable(),
42737
- roleLabel: z65.string().nullable(),
42738
- bio: z65.string().nullable(),
42739
- summary: z65.string().nullable(),
43064
+ var teamMemberDataSchema = z66.object({
43065
+ _type: z66.literal("teamMember"),
43066
+ id: z66.string(),
43067
+ name: z66.string(),
43068
+ role: z66.string().nullable(),
43069
+ roleLabel: z66.string().nullable(),
43070
+ bio: z66.string().nullable(),
43071
+ summary: z66.string().nullable(),
42740
43072
  photo: teamMemberPhotoSchema,
42741
- profilePath: z65.string().nullable()
43073
+ profilePath: z66.string().nullable()
42742
43074
  });
42743
- var teamMembersDataSchema = z65.array(teamMemberDataSchema);
43075
+ var teamMembersDataSchema = z66.array(teamMemberDataSchema);
42744
43076
  var dynamicSourceWhen = { equals: "site_staff" };
42745
43077
  var manualSourceWhen = { equals: "site_staff", not: true };
42746
43078
  var headingNode = text(
@@ -44675,7 +45007,7 @@ import React4 from "react";
44675
45007
  // ../blocks/src/system/data/linkedContentEntries.ts
44676
45008
  var LINKED_CONTENT_ENTRY_META_KEY = "__rbLinkedContentEntry";
44677
45009
  function coerceLinkedContentEntriesPayload(payload) {
44678
- if (!isRecord9(payload)) return payload;
45010
+ if (!isRecord10(payload)) return payload;
44679
45011
  const response = payload;
44680
45012
  if (!Array.isArray(response.entries)) return payload;
44681
45013
  const contentType = parsePublicContentTypeMeta(response.contentType);
@@ -44683,16 +45015,16 @@ function coerceLinkedContentEntriesPayload(payload) {
44683
45015
  return response.entries.map((entry) => enrichLinkedContentEntry(entry, contentType));
44684
45016
  }
44685
45017
  function getLinkedContentEntryMeta(value) {
44686
- if (!isRecord9(value)) return null;
45018
+ if (!isRecord10(value)) return null;
44687
45019
  const candidate = value[LINKED_CONTENT_ENTRY_META_KEY];
44688
45020
  return isLinkedContentEntryMeta(candidate) ? candidate : null;
44689
45021
  }
44690
45022
  function buildLinkedContentEditTarget(input) {
44691
45023
  const { entry, sourceBlockId, sourceBlockKind, itemIndex } = input;
44692
- if (!isRecord9(entry)) return null;
45024
+ if (!isRecord10(entry)) return null;
44693
45025
  const meta = getLinkedContentEntryMeta(entry);
44694
45026
  if (!meta || meta.support.kind !== "supported") return null;
44695
- const content = isRecord9(entry.content) ? entry.content : {};
45027
+ const content = isRecord10(entry.content) ? entry.content : {};
44696
45028
  return {
44697
45029
  kind: "linked-content-entry",
44698
45030
  entryId: meta.entryId,
@@ -44742,12 +45074,12 @@ function resolveLinkedEntryInlineFieldEligibility(input) {
44742
45074
  };
44743
45075
  }
44744
45076
  function enrichLinkedContentEntry(entry, contentType) {
44745
- if (!isRecord9(entry)) return entry;
45077
+ if (!isRecord10(entry)) return entry;
44746
45078
  const entryId = typeof entry.id === "string" ? entry.id : null;
44747
45079
  if (!entryId) return entry;
44748
45080
  const title = typeof entry.title === "string" && entry.title.trim().length > 0 ? entry.title : entryId;
44749
45081
  const optimisticHash = typeof entry.optimisticHash === "string" && entry.optimisticHash.length > 0 ? entry.optimisticHash : null;
44750
- const content = isRecord9(entry.content) ? entry.content : {};
45082
+ const content = isRecord10(entry.content) ? entry.content : {};
44751
45083
  const meta = {
44752
45084
  kind: "linked-content-entry",
44753
45085
  entryId,
@@ -44843,7 +45175,7 @@ function capitalize(value) {
44843
45175
  return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();
44844
45176
  }
44845
45177
  function parsePublicContentTypeMeta(value) {
44846
- if (!isRecord9(value)) return null;
45178
+ if (!isRecord10(value)) return null;
44847
45179
  if (typeof value.key !== "string" || value.key.trim().length === 0) return null;
44848
45180
  return {
44849
45181
  key: value.key,
@@ -44853,7 +45185,7 @@ function parsePublicContentTypeMeta(value) {
44853
45185
  };
44854
45186
  }
44855
45187
  function parsePublicContentTypeLinkedEntryEditing(value) {
44856
- if (!isRecord9(value) || typeof value.kind !== "string") return null;
45188
+ if (!isRecord10(value) || typeof value.kind !== "string") return null;
44857
45189
  switch (value.kind) {
44858
45190
  case "generic":
44859
45191
  return { kind: "generic" };
@@ -44867,7 +45199,7 @@ function parsePublicContentTypeLinkedEntryEditing(value) {
44867
45199
  }
44868
45200
  }
44869
45201
  function parsePublicContentTypeFieldMeta(value) {
44870
- if (!isRecord9(value)) return [];
45202
+ if (!isRecord10(value)) return [];
44871
45203
  if (typeof value.id !== "string" || typeof value.type !== "string") return [];
44872
45204
  return [{
44873
45205
  id: value.id,
@@ -44882,14 +45214,14 @@ function parseStringArray(value) {
44882
45214
  return value.filter((item) => typeof item === "string");
44883
45215
  }
44884
45216
  function isLinkedContentEntryMeta(value) {
44885
- if (!isRecord9(value)) return false;
45217
+ if (!isRecord10(value)) return false;
44886
45218
  if (value.kind !== "linked-content-entry") return false;
44887
45219
  if (typeof value.entryId !== "string") return false;
44888
45220
  if (typeof value.contentTypeKey !== "string") return false;
44889
45221
  if (typeof value.contentTypeLabel !== "string") return false;
44890
45222
  if (typeof value.title !== "string") return false;
44891
45223
  if (!(value.optimisticHash === null || typeof value.optimisticHash === "string")) return false;
44892
- if (!isRecord9(value.contentType)) return false;
45224
+ if (!isRecord10(value.contentType)) return false;
44893
45225
  if (!isLinkedEntryFieldSourceArray(value.fieldSources)) return false;
44894
45226
  return isLinkedContentEditSupport(value.support);
44895
45227
  }
@@ -44897,7 +45229,7 @@ function isLinkedEntryFieldSourceArray(value) {
44897
45229
  return Array.isArray(value) && value.every(isLinkedEntryFieldSource);
44898
45230
  }
44899
45231
  function isLinkedEntryFieldSource(value) {
44900
- if (!isRecord9(value)) return false;
45232
+ if (!isRecord10(value)) return false;
44901
45233
  if (typeof value.displayPath !== "string") return false;
44902
45234
  switch (value.kind) {
44903
45235
  case "content-field":
@@ -44923,7 +45255,7 @@ function isLinkedEntryInlineFieldReadOnlyReason(value) {
44923
45255
  }
44924
45256
  }
44925
45257
  function isLinkedContentEditSupport(value) {
44926
- if (!isRecord9(value) || typeof value.kind !== "string") return false;
45258
+ if (!isRecord10(value) || typeof value.kind !== "string") return false;
44927
45259
  switch (value.kind) {
44928
45260
  case "supported":
44929
45261
  return true;
@@ -44935,7 +45267,7 @@ function isLinkedContentEditSupport(value) {
44935
45267
  return false;
44936
45268
  }
44937
45269
  }
44938
- function isRecord9(value) {
45270
+ function isRecord10(value) {
44939
45271
  return typeof value === "object" && value !== null && !Array.isArray(value);
44940
45272
  }
44941
45273
 
@@ -45267,6 +45599,8 @@ function renderDoc(node, key, imageResolveContext) {
45267
45599
  return /* @__PURE__ */ jsx15("blockquote", { children }, key);
45268
45600
  case "horizontalRule":
45269
45601
  return /* @__PURE__ */ jsx15("hr", {}, key);
45602
+ case "hardBreak":
45603
+ return /* @__PURE__ */ jsx15("br", {}, key);
45270
45604
  case "image": {
45271
45605
  const attrs = node.attrs ?? {};
45272
45606
  const src = typeof attrs.src === "string" ? attrs.src.trim() : "";
@@ -45323,84 +45657,11 @@ function Text({
45323
45657
  return /* @__PURE__ */ jsx16(Comp, { className, ...dataAttributes, children });
45324
45658
  }
45325
45659
 
45326
- // ../blocks/src/system/manifest/richTextSchema.ts
45327
- import { z as z66 } from "zod";
45328
- var TipTapMarkSchema = z66.object({
45329
- type: z66.string(),
45330
- attrs: z66.record(z66.string(), z66.unknown()).optional()
45331
- });
45332
- var TipTapNodeSchema = z66.lazy(
45333
- () => z66.object({
45334
- type: z66.string(),
45335
- content: z66.array(TipTapNodeSchema).optional(),
45336
- text: z66.string().optional(),
45337
- attrs: z66.record(z66.string(), z66.unknown()).optional(),
45338
- marks: z66.array(TipTapMarkSchema).optional()
45339
- })
45340
- );
45341
- var RichTextValueSchema = z66.union([
45342
- // Canonical: TipTap document directly
45343
- TipTapNodeSchema,
45344
- // Legacy (read-tolerance only): wrapped in { doc: {...} }
45345
- z66.object({
45346
- doc: TipTapNodeSchema
45347
- })
45348
- ]);
45349
- var RichTextDocSchema = z66.object({
45350
- type: z66.literal("doc"),
45351
- content: z66.array(TipTapNodeSchema)
45352
- });
45353
- function unwrapRichTextRoot(value) {
45354
- if (!isRecord4(value)) return value;
45355
- if (!("doc" in value)) return value;
45356
- const inner = value.doc;
45357
- if (isRecord4(inner) && inner.type === "doc") return inner;
45358
- return value;
45359
- }
45360
-
45361
45660
  // ../blocks/src/system/runtime/nodes/richText-coerce.ts
45362
- function parseInlineMarkdown(text2) {
45363
- const out = [];
45364
- const pushText = (value, marks) => {
45365
- if (!value) return;
45366
- out.push(
45367
- marks && marks.length > 0 ? { type: "text", text: value, marks } : { type: "text", text: value }
45368
- );
45369
- };
45370
- let rest = text2;
45371
- while (rest.length > 0) {
45372
- const start = rest.indexOf("**");
45373
- if (start === -1) {
45374
- pushText(rest);
45375
- break;
45376
- }
45377
- const end = rest.indexOf("**", start + 2);
45378
- if (end === -1) {
45379
- pushText(rest);
45380
- break;
45381
- }
45382
- pushText(rest.slice(0, start));
45383
- pushText(rest.slice(start + 2, end), [{ type: "bold" }]);
45384
- rest = rest.slice(end + 2);
45385
- }
45386
- return out;
45387
- }
45388
- function markdownToTipTapDoc(markdown) {
45389
- const normalized = markdown.replace(/\r\n/g, "\n").trim();
45390
- if (!normalized) return { type: "doc", content: [] };
45391
- const paragraphs = normalized.split(/\n{2,}/).map((p) => p.trim()).filter(Boolean);
45392
- return {
45393
- type: "doc",
45394
- content: paragraphs.map((p) => {
45395
- const inline2 = parseInlineMarkdown(p);
45396
- return inline2.length > 0 ? { type: "paragraph", content: inline2 } : { type: "paragraph" };
45397
- })
45398
- };
45399
- }
45400
45661
  function coerceRichTextDoc(value) {
45401
45662
  const raw = unwrapRichTextRoot(value);
45402
45663
  if (typeof raw === "string") {
45403
- return markdownToTipTapDoc(raw);
45664
+ return createRichTextDocFromMarkdown(raw);
45404
45665
  }
45405
45666
  if (isRecord4(raw) && typeof raw.type === "string") {
45406
45667
  return raw;
@@ -46462,12 +46723,12 @@ function toTrimmedString(value) {
46462
46723
  return trimmed ? trimmed : void 0;
46463
46724
  }
46464
46725
  function normalizeBookingFormConfig(form2) {
46465
- if (!isRecord10(form2)) return null;
46726
+ if (!isRecord11(form2)) return null;
46466
46727
  const id = readNonEmptyString(form2.id);
46467
46728
  const name = readNonEmptyString(form2.name);
46468
46729
  if (!id || !name) return null;
46469
- const schemaSource = isRecord10(form2.schema) ? form2.schema : isRecord10(form2.schemaJson) ? form2.schemaJson : null;
46470
- const settingsSource = isRecord10(form2.settings) ? form2.settings : isRecord10(form2.settingsJson) ? form2.settingsJson : null;
46730
+ const schemaSource = isRecord11(form2.schema) ? form2.schema : isRecord11(form2.schemaJson) ? form2.schemaJson : null;
46731
+ const settingsSource = isRecord11(form2.settings) ? form2.settings : isRecord11(form2.settingsJson) ? form2.settingsJson : null;
46471
46732
  return {
46472
46733
  id,
46473
46734
  name,
@@ -46491,10 +46752,10 @@ function normalizeBookingServices(services) {
46491
46752
  if (Array.isArray(services)) {
46492
46753
  return services.filter(isBookingFormService).map(normalizeService);
46493
46754
  }
46494
- if (isRecord10(services) && "services" in services) {
46755
+ if (isRecord11(services) && "services" in services) {
46495
46756
  return Array.isArray(services.services) ? services.services.filter(isBookingFormService).map(normalizeService) : [];
46496
46757
  }
46497
- return isRecord10(services) ? Object.values(services).filter(isBookingFormService).map(normalizeService) : [];
46758
+ return isRecord11(services) ? Object.values(services).filter(isBookingFormService).map(normalizeService) : [];
46498
46759
  }
46499
46760
  function normalizeBookingSchema(value) {
46500
46761
  if (!value) return void 0;
@@ -46506,7 +46767,7 @@ function normalizeBookingSchema(value) {
46506
46767
  };
46507
46768
  }
46508
46769
  function readBookingFormField(value) {
46509
- if (!isRecord10(value)) return null;
46770
+ if (!isRecord11(value)) return null;
46510
46771
  const id = readNonEmptyString(value.id);
46511
46772
  const label = readNonEmptyString(value.label);
46512
46773
  const type = readBookingFieldType(value.type);
@@ -46552,7 +46813,7 @@ function readBookingFieldOptions(value) {
46552
46813
  return options.length > 0 ? options : void 0;
46553
46814
  }
46554
46815
  function readBookingFieldOption(value) {
46555
- if (!isRecord10(value)) return null;
46816
+ if (!isRecord11(value)) return null;
46556
46817
  const optionValue = readNonEmptyString(value.value);
46557
46818
  const label = readNonEmptyString(value.label);
46558
46819
  return optionValue && label ? { value: optionValue, label } : null;
@@ -46569,7 +46830,7 @@ function normalizeBookingSettings(value) {
46569
46830
  };
46570
46831
  }
46571
46832
  function isBookingFormService(value) {
46572
- return isRecord10(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string";
46833
+ return isRecord11(value) && typeof value.id === "string" && typeof value.siteId === "string" && typeof value.title === "string";
46573
46834
  }
46574
46835
  function readNonEmptyString(value) {
46575
46836
  if (typeof value !== "string") return null;
@@ -46587,7 +46848,7 @@ function readStringArray(value) {
46587
46848
  const strings = value.filter((item) => typeof item === "string");
46588
46849
  return strings.length > 0 ? strings : void 0;
46589
46850
  }
46590
- function isRecord10(value) {
46851
+ function isRecord11(value) {
46591
46852
  return typeof value === "object" && value !== null;
46592
46853
  }
46593
46854
 
@@ -47008,6 +47269,32 @@ function TeamMemberName({
47008
47269
  }) {
47009
47270
  return profilePath ? /* @__PURE__ */ jsx29("a", { href: profilePath, className: "rb-hover-opacity-80", children: /* @__PURE__ */ jsx29("strong", { children: name }) }) : /* @__PURE__ */ jsx29("strong", { children: name });
47010
47271
  }
47272
+ function formatTicketTypePrice(ticketType, currency) {
47273
+ return formatCurrencyAmount(ticketType.priceAmount, currency, { decimals: "auto" });
47274
+ }
47275
+ function getActiveTicketTypes(event) {
47276
+ return event.pricing.kind === "ticket_types" ? event.pricing.ticketTypes.filter((ticketType) => ticketType.isActive).sort((left, right) => left.sortOrder - right.sortOrder) : [];
47277
+ }
47278
+ function TicketTypePriceList({
47279
+ ticketTypes,
47280
+ currency
47281
+ }) {
47282
+ if (ticketTypes.length === 0) return null;
47283
+ return /* @__PURE__ */ jsx29("div", { className: "rb-mt-3 rb-flex rb-flex-col rb-gap-2", children: ticketTypes.map((ticketType) => /* @__PURE__ */ jsxs16(
47284
+ "div",
47285
+ {
47286
+ className: "rb-flex rb-items-start rb-justify-between rb-gap-4",
47287
+ children: [
47288
+ /* @__PURE__ */ jsxs16("div", { children: [
47289
+ /* @__PURE__ */ jsx29("p", { children: ticketType.name }),
47290
+ ticketType.description ? /* @__PURE__ */ jsx29("p", { className: "rb-caption status-muted", children: ticketType.description }) : null
47291
+ ] }),
47292
+ /* @__PURE__ */ jsx29("p", { children: /* @__PURE__ */ jsx29("strong", { children: formatTicketTypePrice(ticketType, currency) }) })
47293
+ ]
47294
+ },
47295
+ ticketType.id
47296
+ )) });
47297
+ }
47011
47298
  function EventDetailsView({
47012
47299
  selection,
47013
47300
  showVenue,
@@ -47042,6 +47329,7 @@ function EventDetailsView({
47042
47329
  const shouldShowCoursePricing = showCost && !isDropIn && coursePricing !== null;
47043
47330
  const shouldShowEventCost = showCost && isPaid && !isDropIn && coursePricing === null;
47044
47331
  const eventCostLabel = shouldShowEventCost ? formatEventPrice(selected) : null;
47332
+ const ticketTypes = shouldShowEventCost ? getActiveTicketTypes(selected) : [];
47045
47333
  const acceptedItems = [];
47046
47334
  if (showAcceptedPasses) {
47047
47335
  acceptedItems.push(...applicablePasses.map((p) => p.name));
@@ -47098,6 +47386,7 @@ function EventDetailsView({
47098
47386
  /* @__PURE__ */ jsx29("div", { className: "rb-label rb-mb-2", children: "Cost" }),
47099
47387
  /* @__PURE__ */ jsx29("p", { children: /* @__PURE__ */ jsx29("strong", { children: eventCostLabel }) }),
47100
47388
  autoApplyDiscount ? /* @__PURE__ */ jsx29("p", { className: "rb-caption rb-mt-1", children: formatAutoApplyDiscountLine(autoApplyDiscount, eventPricingCurrency) }) : null,
47389
+ /* @__PURE__ */ jsx29(TicketTypePriceList, { ticketTypes, currency: eventPricingCurrency }),
47101
47390
  hasAcceptedItems ? /* @__PURE__ */ jsxs16("p", { className: "rb-caption rb-mt-1", children: [
47102
47391
  "You can also attend with: ",
47103
47392
  acceptedItems.join(", ")
@@ -49228,6 +49517,7 @@ function EventRegistrationSSR({
49228
49517
  successMessage,
49229
49518
  waitlistMessage,
49230
49519
  buttonVariant,
49520
+ overlayEnabled,
49231
49521
  spamProtectionEnabled,
49232
49522
  stage,
49233
49523
  supportEmail,
@@ -49249,6 +49539,7 @@ function EventRegistrationSSR({
49249
49539
  successMessage,
49250
49540
  waitlistMessage,
49251
49541
  buttonVariant,
49542
+ overlayEnabled,
49252
49543
  spamProtectionEnabled,
49253
49544
  stage,
49254
49545
  supportEmail
@@ -49513,6 +49804,7 @@ function NewsletterFormSSR({
49513
49804
  siteId,
49514
49805
  apiBaseUrl,
49515
49806
  listId,
49807
+ destinationProvider,
49516
49808
  preset: preset2 = "emailOnly",
49517
49809
  includePhone,
49518
49810
  buttonLabel = "Subscribe",
@@ -49523,9 +49815,11 @@ function NewsletterFormSSR({
49523
49815
  className
49524
49816
  }) {
49525
49817
  const islandProps = buildNewsletterFormInteractiveIslandProps({
49818
+ blockId,
49526
49819
  siteId,
49527
49820
  apiBaseUrl,
49528
49821
  listId,
49822
+ destinationProvider,
49529
49823
  preset: preset2,
49530
49824
  includePhone,
49531
49825
  buttonLabel,
@@ -49905,14 +50199,14 @@ function isDecoratedHeadingBlockKind(blockKind) {
49905
50199
  return blockKind === "block.intro" || blockKind === "block.feature-cards" || blockKind === "block.testimonials" || blockKind === "block.faq";
49906
50200
  }
49907
50201
  function readVariant(blockContent) {
49908
- if (!isRecord11(blockContent)) return void 0;
50202
+ if (!isRecord12(blockContent)) return void 0;
49909
50203
  const variant = blockContent.variant;
49910
50204
  return typeof variant === "string" ? variant : void 0;
49911
50205
  }
49912
50206
  function isFaqDecoratedVariant(variant) {
49913
50207
  return variant === "default" || variant === "question-columns";
49914
50208
  }
49915
- function isRecord11(value) {
50209
+ function isRecord12(value) {
49916
50210
  return typeof value === "object" && value !== null && !Array.isArray(value);
49917
50211
  }
49918
50212
  function buildHeadingDecorationWrapperClassName(className) {
@@ -55290,6 +55584,7 @@ var MemoBlockSection = React6.memo(
55290
55584
  apiBaseUrl: dataContext?.apiBaseUrl ?? null,
55291
55585
  portalToken: dataContext?.portalToken ?? null,
55292
55586
  bookingOfferingPresets: dataContext?.bookingOfferingPresets ?? [],
55587
+ eventRegistrationOverlayEnabled: dataContext?.eventRegistrationOverlayEnabled ?? false,
55293
55588
  ...routes ? { routes } : {},
55294
55589
  // Identifier maps for CTA link resolution at render time
55295
55590
  ...dataContext?.pagesByIdentifier ? { pagesByIdentifier: dataContext.pagesByIdentifier } : {},
@@ -58670,6 +58965,7 @@ var containerResponsiveThemeCss = `/*
58670
58965
  */
58671
58966
 
58672
58967
  :where(.theme-scope) :where([data-block="event-registration"]) {
58968
+ --rb-modal-overlay-bg: rgb(var(--tb-text, 0 0 0) / 0.6);
58673
58969
  --rb-event-tile-bg: var(--er-event-card-bg);
58674
58970
  --rb-event-tile-border: var(--er-border);
58675
58971
  --rb-event-tile-border-width: var(--er-event-card-border-width);
@@ -60339,6 +60635,239 @@ var containerResponsiveThemeCss = `/*
60339
60635
  background: rgba(var(--tb-text), 0.05);
60340
60636
  }
60341
60637
 
60638
+ /* In-flow booking teaser (sits at the block's position in the page) */
60639
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-teaser {
60640
+ display: flex;
60641
+ flex-wrap: wrap;
60642
+ align-items: center;
60643
+ justify-content: space-between;
60644
+ gap: 1rem 1.5rem;
60645
+ padding: 1.25rem 1.5rem;
60646
+ border: 1px solid var(--er-border);
60647
+ border-radius: var(--rb-block-radius);
60648
+ background: var(--er-event-card-bg);
60649
+ color: var(--er-on-surface);
60650
+ }
60651
+
60652
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-teaser__info {
60653
+ display: flex;
60654
+ flex-direction: column;
60655
+ gap: 0.25rem;
60656
+ min-width: 0;
60657
+ }
60658
+
60659
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-teaser__title {
60660
+ font-size: 1.0625rem;
60661
+ font-weight: 700;
60662
+ line-height: 1.2;
60663
+ }
60664
+
60665
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-teaser__meta {
60666
+ font-size: 0.9375rem;
60667
+ line-height: 1.3;
60668
+ opacity: 0.75;
60669
+ }
60670
+
60671
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-teaser__tickets {
60672
+ display: flex;
60673
+ flex-direction: column;
60674
+ gap: 0.375rem;
60675
+ margin-top: 0.5rem;
60676
+ padding-top: 0.625rem;
60677
+ border-top: 1px solid var(--er-border);
60678
+ }
60679
+
60680
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-teaser__ticket {
60681
+ display: flex;
60682
+ align-items: baseline;
60683
+ justify-content: space-between;
60684
+ gap: 1rem;
60685
+ font-size: 0.9375rem;
60686
+ line-height: 1.35;
60687
+ }
60688
+
60689
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-teaser__ticket-name {
60690
+ min-width: 0;
60691
+ }
60692
+
60693
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-teaser__cta {
60694
+ flex: 0 0 auto;
60695
+ }
60696
+
60697
+ /* Fixed, full-width sticky booking bar (content-agnostic; sits above page flow) */
60698
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-bar {
60699
+ position: fixed;
60700
+ left: 0;
60701
+ right: 0;
60702
+ bottom: 0;
60703
+ z-index: 12000;
60704
+ padding: 0.75rem max(1rem, env(safe-area-inset-right)) max(0.75rem, env(safe-area-inset-bottom)) max(1rem, env(safe-area-inset-left));
60705
+ background: rgb(var(--tb-background));
60706
+ border-top: 1px solid var(--er-border);
60707
+ box-shadow: 0 -10px 30px rgba(var(--tb-shadow), 0.16);
60708
+ }
60709
+
60710
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-bar__inner {
60711
+ display: flex;
60712
+ align-items: center;
60713
+ justify-content: space-between;
60714
+ gap: 1rem;
60715
+ width: 100%;
60716
+ max-width: 72rem;
60717
+ margin-inline: auto;
60718
+ }
60719
+
60720
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-bar__info {
60721
+ display: flex;
60722
+ flex-direction: column;
60723
+ gap: 0.125rem;
60724
+ min-width: 0;
60725
+ }
60726
+
60727
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-bar__title {
60728
+ font-size: 0.95rem;
60729
+ font-weight: 700;
60730
+ line-height: 1.2;
60731
+ white-space: nowrap;
60732
+ overflow: hidden;
60733
+ text-overflow: ellipsis;
60734
+ }
60735
+
60736
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-bar__meta {
60737
+ font-size: 0.8125rem;
60738
+ line-height: 1.25;
60739
+ opacity: 0.75;
60740
+ white-space: nowrap;
60741
+ overflow: hidden;
60742
+ text-overflow: ellipsis;
60743
+ }
60744
+
60745
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-bar__cta {
60746
+ flex: 0 0 auto;
60747
+ }
60748
+
60749
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-overlay {
60750
+ position: fixed;
60751
+ inset: 0;
60752
+ height: 100dvh;
60753
+ z-index: 14000;
60754
+ display: flex;
60755
+ align-items: stretch;
60756
+ justify-content: stretch;
60757
+ background: var(--rb-modal-overlay-bg);
60758
+ }
60759
+
60760
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-overlay__panel {
60761
+ position: relative;
60762
+ z-index: 1;
60763
+ display: flex;
60764
+ flex-direction: column;
60765
+ width: 100%;
60766
+ height: 100dvh;
60767
+ min-height: 0;
60768
+ overflow: hidden;
60769
+ background: rgb(var(--tb-background));
60770
+ color: var(--er-on-surface);
60771
+ }
60772
+
60773
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-overlay__header {
60774
+ flex: 0 0 auto;
60775
+ z-index: 2;
60776
+ display: flex;
60777
+ align-items: center;
60778
+ justify-content: space-between;
60779
+ gap: 1rem;
60780
+ padding: 1rem;
60781
+ background: rgb(var(--tb-background));
60782
+ border-bottom: 1px solid var(--er-border);
60783
+ }
60784
+
60785
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-overlay__title {
60786
+ margin: 0;
60787
+ font-size: 1rem;
60788
+ line-height: 1.25;
60789
+ font-weight: 700;
60790
+ }
60791
+
60792
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-overlay__close {
60793
+ width: 2rem;
60794
+ height: 2rem;
60795
+ display: inline-flex;
60796
+ align-items: center;
60797
+ justify-content: center;
60798
+ border: 1px solid var(--er-border);
60799
+ border-radius: 999px;
60800
+ background: transparent;
60801
+ color: rgb(var(--tb-text));
60802
+ font-size: 1.25rem;
60803
+ line-height: 1;
60804
+ cursor: pointer;
60805
+ }
60806
+
60807
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-container--overlay {
60808
+ max-width: none;
60809
+ border: 0;
60810
+ border-radius: 0;
60811
+ padding: 0;
60812
+ background: transparent;
60813
+ display: flex;
60814
+ flex: 1 1 auto;
60815
+ min-height: 0;
60816
+ overflow: hidden;
60817
+ }
60818
+
60819
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-container--overlay .er-payment-layout {
60820
+ flex: 1 1 auto;
60821
+ min-height: 0;
60822
+ height: 100%;
60823
+ gap: 0;
60824
+ grid-template-rows: minmax(0, 1fr) auto;
60825
+ grid-template-areas:
60826
+ "main"
60827
+ "footer";
60828
+ }
60829
+
60830
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-container--overlay .er-payment-layout-main {
60831
+ min-height: 0;
60832
+ overflow: auto;
60833
+ padding: 1rem;
60834
+ }
60835
+
60836
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-container--overlay .er-payment-layout-footer {
60837
+ position: relative;
60838
+ z-index: 3;
60839
+ padding: 0.875rem 1rem max(0.875rem, env(safe-area-inset-bottom));
60840
+ background: rgb(var(--tb-background));
60841
+ border-top: 1px solid var(--er-border);
60842
+ box-shadow: 0 -12px 26px rgba(var(--tb-shadow), 0.12);
60843
+ }
60844
+
60845
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-container--overlay .er-actions {
60846
+ margin-top: 0;
60847
+ }
60848
+
60849
+ @container rb-site (min-width: 768px) {
60850
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
60851
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-overlay {
60852
+ justify-content: flex-end;
60853
+ }
60854
+
60855
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-booking-overlay__panel {
60856
+ width: min(32rem, 100vw);
60857
+ min-height: 100%;
60858
+ box-shadow: -16px 0 40px rgba(var(--tb-shadow), 0.22);
60859
+ }
60860
+
60861
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-container--overlay .er-payment-layout-main {
60862
+ padding: 1.25rem;
60863
+ }
60864
+
60865
+ :where(.theme-scope) :where([data-block="event-registration"]) .er-container--overlay .er-payment-layout-footer {
60866
+ padding: 0.875rem 1.25rem max(0.875rem, env(safe-area-inset-bottom));
60867
+ }
60868
+ }
60869
+ }
60870
+
60342
60871
  /* Magic Link Form */
60343
60872
  :where(.theme-scope) :where([data-block="event-registration"]) .er-magic-link-form {
60344
60873
  display: flex;
@@ -67626,7 +68155,7 @@ function preset(id, verticalId, canonicalBehaviour, label, pluralLabel, descript
67626
68155
  }
67627
68156
 
67628
68157
  // ../api/src/utils/isRecord.ts
67629
- function isRecord12(value) {
68158
+ function isRecord13(value) {
67630
68159
  return typeof value === "object" && value !== null && !Array.isArray(value);
67631
68160
  }
67632
68161
 
@@ -67933,7 +68462,7 @@ function sanitizeMarks(marks) {
67933
68462
  if (mark.type === "bold" || mark.type === "strong" || mark.type === "italic" || mark.type === "em") {
67934
68463
  return [{ type: mark.type }];
67935
68464
  }
67936
- if (mark.type === "link" && isRecord12(mark.attrs) && typeof mark.attrs.href === "string") {
68465
+ if (mark.type === "link" && isRecord13(mark.attrs) && typeof mark.attrs.href === "string") {
67937
68466
  const attrs = { href: mark.attrs.href };
67938
68467
  if (typeof mark.attrs.target === "string" && mark.attrs.target.trim().length > 0) {
67939
68468
  attrs.target = mark.attrs.target;
@@ -67948,10 +68477,10 @@ function sanitizeMarks(marks) {
67948
68477
  return sanitized.length > 0 ? sanitized : void 0;
67949
68478
  }
67950
68479
  function unwrapRichTextValue(value) {
67951
- if (isRecord12(value) && isRecord12(value.doc)) {
68480
+ if (isRecord13(value) && isRecord13(value.doc)) {
67952
68481
  return unwrapRichTextValue(value.doc);
67953
68482
  }
67954
- if (isRecord12(value) && value.type === "doc") {
68483
+ if (isRecord13(value) && value.type === "doc") {
67955
68484
  return {
67956
68485
  type: "doc",
67957
68486
  content: Array.isArray(value.content) ? value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) : []
@@ -67960,7 +68489,7 @@ function unwrapRichTextValue(value) {
67960
68489
  return EMPTY_SITE_BANNER_BODY;
67961
68490
  }
67962
68491
  function isTipTapNodeLike(value) {
67963
- return isRecord12(value) && typeof value.type === "string";
68492
+ return isRecord13(value) && typeof value.type === "string";
67964
68493
  }
67965
68494
  function coerceTipTapNode(value) {
67966
68495
  return {
@@ -67968,9 +68497,9 @@ function coerceTipTapNode(value) {
67968
68497
  ...Array.isArray(value.content) ? { content: value.content.filter(isTipTapNodeLike).map(coerceTipTapNode) } : {},
67969
68498
  ...typeof value.text === "string" ? { text: value.text } : {},
67970
68499
  ...Array.isArray(value.marks) ? {
67971
- marks: value.marks.filter((mark) => isRecord12(mark) && typeof mark.type === "string").map((mark) => ({
68500
+ marks: value.marks.filter((mark) => isRecord13(mark) && typeof mark.type === "string").map((mark) => ({
67972
68501
  type: mark.type,
67973
- ...isRecord12(mark.attrs) ? { attrs: mark.attrs } : {}
68502
+ ...isRecord13(mark.attrs) ? { attrs: mark.attrs } : {}
67974
68503
  }))
67975
68504
  } : {}
67976
68505
  };
@@ -68150,21 +68679,8 @@ var MultiPageUpdateResponse = z76.object({
68150
68679
  });
68151
68680
 
68152
68681
  // src/data/prefetchBlockData.ts
68153
- var SUPPORTED_LOADER_ENDPOINTS2 = [
68154
- "listPublishedEntries",
68155
- "getPublishedEntryPreview",
68156
- "listPublicEvents",
68157
- "listPublicCourses",
68158
- "listPublicTeamMembers",
68159
- "listPublicProducts",
68160
- "listPublicPasses",
68161
- "listPublicMemberships",
68162
- "getPublicFormById",
68163
- "getPublicBookingServices",
68164
- "getPublicEventDetails"
68165
- ];
68166
68682
  function isSupportedLoaderEndpoint2(endpoint) {
68167
- return SUPPORTED_LOADER_ENDPOINTS2.includes(endpoint);
68683
+ return SUPPORTED_LOADER_ENDPOINTS.includes(endpoint);
68168
68684
  }
68169
68685
  var ENTRY_REF_KEYS = [
68170
68686
  "identifier",
@@ -68173,7 +68689,7 @@ var ENTRY_REF_KEYS = [
68173
68689
  "entryId",
68174
68690
  "slug"
68175
68691
  ];
68176
- function isRecord13(value) {
68692
+ function isRecord14(value) {
68177
68693
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
68178
68694
  }
68179
68695
  function extractManualEntryRef(item) {
@@ -68181,7 +68697,7 @@ function extractManualEntryRef(item) {
68181
68697
  const trimmed = item.trim();
68182
68698
  return trimmed.length > 0 ? trimmed : null;
68183
68699
  }
68184
- if (!isRecord13(item)) return null;
68700
+ if (!isRecord14(item)) return null;
68185
68701
  for (const key of ENTRY_REF_KEYS) {
68186
68702
  const raw = item[key];
68187
68703
  if (typeof raw === "string" && raw.trim().length > 0) {
@@ -68229,6 +68745,194 @@ function parseManualEntryRefs(...values) {
68229
68745
  }
68230
68746
  return void 0;
68231
68747
  }
68748
+ var loaderAdapters = {
68749
+ listPublishedEntries: listPublishedEntries2,
68750
+ getPublishedEntryPreview,
68751
+ listPublicEvents,
68752
+ getPublicEventDetails,
68753
+ listPublicCourses,
68754
+ listPublicRouteCandidates,
68755
+ listPublicTeamMembers,
68756
+ listPublicProducts,
68757
+ listPublicPasses,
68758
+ listPublicMemberships,
68759
+ getPublicFormById,
68760
+ getPublicBookingServices
68761
+ };
68762
+ function readStringParam(params, key) {
68763
+ const value = params[key];
68764
+ return value && value.length > 0 ? value : void 0;
68765
+ }
68766
+ function requireStringParam(params, key, endpoint) {
68767
+ const value = readStringParam(params, key);
68768
+ if (!value) {
68769
+ throw new Error(`${endpoint} requires ${key} param`);
68770
+ }
68771
+ return value;
68772
+ }
68773
+ function parsePositiveIntegerParam(params, key) {
68774
+ const value = params[key];
68775
+ const parsed = value === void 0 ? void 0 : Number.parseInt(value, 10);
68776
+ return typeof parsed === "number" && Number.isInteger(parsed) && parsed > 0 ? parsed : void 0;
68777
+ }
68778
+ function parseEntryOrder(value) {
68779
+ if (value === void 0) return void 0;
68780
+ switch (value) {
68781
+ case "order":
68782
+ return "manual";
68783
+ case "newest":
68784
+ case "oldest":
68785
+ case "title":
68786
+ return value;
68787
+ default:
68788
+ return void 0;
68789
+ }
68790
+ }
68791
+ function parsePublicEventKind(value) {
68792
+ if (value === void 0) return void 0;
68793
+ switch (value) {
68794
+ case "all":
68795
+ case "courses":
68796
+ case "events":
68797
+ return value;
68798
+ default:
68799
+ return void 0;
68800
+ }
68801
+ }
68802
+ async function listPublishedEntries2({ client, params }) {
68803
+ const siteId = requireStringParam(params, "siteId", "listPublishedEntries");
68804
+ const type = requireStringParam(params, "type", "listPublishedEntries");
68805
+ const stage = readStringParam(params, "stage");
68806
+ const mode = readStringParam(params, "mode");
68807
+ const parsedEntryRefs = mode === "manual" ? parseManualEntryRefs(params.identifiers, params.entryRefs, params.entryIds) : void 0;
68808
+ if (mode === "manual" && (!parsedEntryRefs || parsedEntryRefs.length === 0)) {
68809
+ return { entries: [] };
68810
+ }
68811
+ if (mode === "manual" && parsedEntryRefs) {
68812
+ return await client.getEntriesByIdentifiers({
68813
+ siteId,
68814
+ contentType: type,
68815
+ identifiers: parsedEntryRefs,
68816
+ preview: stage === "preview"
68817
+ });
68818
+ }
68819
+ return await client.getEntries({
68820
+ siteId,
68821
+ contentType: type,
68822
+ limit: parsePositiveIntegerParam(params, "limit"),
68823
+ order: parseEntryOrder(readStringParam(params, "orderBy")),
68824
+ preview: stage === "preview"
68825
+ });
68826
+ }
68827
+ async function getPublishedEntryPreview({ client, params }) {
68828
+ return await client.getEntry({
68829
+ siteId: requireStringParam(params, "siteId", "getPublishedEntryPreview"),
68830
+ contentType: requireStringParam(params, "type", "getPublishedEntryPreview"),
68831
+ slug: requireStringParam(params, "slug", "getPublishedEntryPreview")
68832
+ });
68833
+ }
68834
+ async function listPublicEvents({ client, params }) {
68835
+ return await client.listPublicEvents({
68836
+ siteId: requireStringParam(params, "siteId", "listPublicEvents"),
68837
+ limit: parsePositiveIntegerParam(params, "limit"),
68838
+ from: readStringParam(params, "from"),
68839
+ to: readStringParam(params, "to"),
68840
+ afterStartsAt: readStringParam(params, "afterStartsAt"),
68841
+ afterId: readStringParam(params, "afterId"),
68842
+ stage: readStringParam(params, "stage"),
68843
+ categoryIds: readStringParam(params, "categoryIds"),
68844
+ venueId: readStringParam(params, "venueId"),
68845
+ staffMemberId: readStringParam(params, "staffMemberId"),
68846
+ kind: parsePublicEventKind(readStringParam(params, "kind")),
68847
+ eventSurface: readStringParam(params, "eventSurface"),
68848
+ eventPresets: readStringParam(params, "eventPresets"),
68849
+ scheduleScope: readStringParam(params, "scheduleScope"),
68850
+ entryId: readStringParam(params, "entryId"),
68851
+ seriesId: readStringParam(params, "seriesId"),
68852
+ includeOccurrenceId: readStringParam(params, "includeOccurrenceId")
68853
+ });
68854
+ }
68855
+ async function getPublicEventDetails({ client, params }) {
68856
+ return await client.getPublicEventDetails({
68857
+ siteId: requireStringParam(params, "siteId", "getPublicEventDetails"),
68858
+ limit: parsePositiveIntegerParam(params, "limit"),
68859
+ from: readStringParam(params, "from"),
68860
+ to: readStringParam(params, "to"),
68861
+ afterStartsAt: readStringParam(params, "afterStartsAt"),
68862
+ afterId: readStringParam(params, "afterId"),
68863
+ stage: readStringParam(params, "stage"),
68864
+ categoryIds: readStringParam(params, "categoryIds"),
68865
+ venueId: readStringParam(params, "venueId"),
68866
+ staffMemberId: readStringParam(params, "staffMemberId"),
68867
+ kind: readStringParam(params, "kind"),
68868
+ eventSurface: readStringParam(params, "eventSurface"),
68869
+ eventPresets: readStringParam(params, "eventPresets"),
68870
+ scheduleScope: readStringParam(params, "scheduleScope"),
68871
+ entryId: readStringParam(params, "entryId"),
68872
+ seriesId: readStringParam(params, "seriesId"),
68873
+ includeOccurrenceId: readStringParam(params, "includeOccurrenceId")
68874
+ });
68875
+ }
68876
+ async function listPublicCourses({ client, params }) {
68877
+ return await client.listPublicCourses({
68878
+ siteId: requireStringParam(params, "siteId", "listPublicCourses"),
68879
+ limit: parsePositiveIntegerParam(params, "limit"),
68880
+ stage: readStringParam(params, "stage")
68881
+ });
68882
+ }
68883
+ async function listPublicRouteCandidates({ client, params }) {
68884
+ const siteId = requireStringParam(params, "siteId", "listPublicRouteCandidates");
68885
+ const response = await client.getAllPublishedRoutes({ siteId });
68886
+ return {
68887
+ routes: response.items.flatMap((item) => {
68888
+ if (!item.path) return [];
68889
+ return [{
68890
+ entityId: item.entityId,
68891
+ path: item.path,
68892
+ title: item.title,
68893
+ kind: item.entityType,
68894
+ contentTypeKey: item.contentTypeKey ?? null
68895
+ }];
68896
+ })
68897
+ };
68898
+ }
68899
+ async function listPublicTeamMembers({ client, params }) {
68900
+ return await client.listPublicTeamMembers({
68901
+ siteId: requireStringParam(params, "siteId", "listPublicTeamMembers"),
68902
+ stage: readStringParam(params, "stage")
68903
+ });
68904
+ }
68905
+ async function listPublicProducts({ client, params }) {
68906
+ return await client.listPublicProducts({
68907
+ siteId: requireStringParam(params, "siteId", "listPublicProducts"),
68908
+ stage: readStringParam(params, "stage") === "preview" ? "preview" : "published",
68909
+ categorySelector: parsePublicProductCategorySelector(params.categorySelector)
68910
+ });
68911
+ }
68912
+ async function listPublicPasses({ client, params }) {
68913
+ return await client.listPublicPasses({
68914
+ siteId: requireStringParam(params, "siteId", "listPublicPasses"),
68915
+ categories: readStringParam(params, "categories")
68916
+ });
68917
+ }
68918
+ async function listPublicMemberships({ client, params }) {
68919
+ return await client.listPublicMemberships({
68920
+ siteId: requireStringParam(params, "siteId", "listPublicMemberships"),
68921
+ categories: readStringParam(params, "categories")
68922
+ });
68923
+ }
68924
+ async function getPublicFormById({ client, params }) {
68925
+ return await client.getPublicFormById({
68926
+ formId: requireStringParam(params, "formId", "getPublicFormById"),
68927
+ siteId: requireStringParam(params, "siteId", "getPublicFormById")
68928
+ });
68929
+ }
68930
+ async function getPublicBookingServices({ client, params }) {
68931
+ return await client.getPublicBookingServices({
68932
+ siteId: requireStringParam(params, "siteId", "getPublicBookingServices"),
68933
+ ids: readStringParam(params, "ids")
68934
+ });
68935
+ }
68232
68936
  async function prefetchBlockData2(page, context, client, options) {
68233
68937
  const { customBlocks } = options ?? {};
68234
68938
  const customBlockMap = new Map(
@@ -68238,189 +68942,11 @@ async function prefetchBlockData2(page, context, client, options) {
68238
68942
  apiClient: async ({ endpoint, params }) => {
68239
68943
  if (!isSupportedLoaderEndpoint2(endpoint)) {
68240
68944
  throw new Error(
68241
- `Unsupported loader endpoint: ${endpoint}. SDK only supports: ${SUPPORTED_LOADER_ENDPOINTS2.join(", ")}`
68945
+ `Unsupported loader endpoint: ${endpoint}. SDK only supports: ${SUPPORTED_LOADER_ENDPOINTS.join(", ")}`
68242
68946
  );
68243
68947
  }
68244
68948
  const resolvedParams = normalizeLoaderParams(endpoint, params, context);
68245
- switch (endpoint) {
68246
- case "listPublishedEntries": {
68247
- const {
68248
- siteId,
68249
- type,
68250
- orderBy,
68251
- limit,
68252
- stage,
68253
- mode,
68254
- entryIds,
68255
- identifiers,
68256
- entryRefs
68257
- } = resolvedParams ?? {};
68258
- if (!siteId || !type) {
68259
- throw new Error("listPublishedEntries requires siteId and type params");
68260
- }
68261
- const parsedLimit = typeof limit === "string" ? Number.parseInt(limit, 10) : typeof limit === "number" ? limit : void 0;
68262
- const order = orderBy === "order" ? "manual" : orderBy === "newest" || orderBy === "oldest" || orderBy === "title" ? orderBy : void 0;
68263
- const parsedEntryRefs = mode === "manual" ? parseManualEntryRefs(identifiers, entryRefs, entryIds) : void 0;
68264
- if (mode === "manual" && (!parsedEntryRefs || parsedEntryRefs.length === 0)) {
68265
- return { entries: [] };
68266
- }
68267
- if (mode === "manual" && parsedEntryRefs) {
68268
- return await client.getEntriesByIdentifiers({
68269
- siteId,
68270
- contentType: type,
68271
- identifiers: parsedEntryRefs,
68272
- preview: stage === "preview"
68273
- });
68274
- }
68275
- return await client.getEntries({
68276
- siteId,
68277
- contentType: type,
68278
- limit: parsedLimit,
68279
- order,
68280
- preview: stage === "preview"
68281
- });
68282
- }
68283
- case "getPublishedEntryPreview": {
68284
- const { siteId, type, slug } = resolvedParams ?? {};
68285
- if (!siteId || !type || !slug) {
68286
- throw new Error("getPublishedEntryPreview requires siteId, type, and slug params");
68287
- }
68288
- return await client.getEntry({ siteId, contentType: type, slug });
68289
- }
68290
- case "listPublicEvents": {
68291
- const {
68292
- siteId,
68293
- limit,
68294
- from,
68295
- to,
68296
- stage,
68297
- categoryIds,
68298
- venueId,
68299
- kind,
68300
- entryId,
68301
- seriesId,
68302
- includeOccurrenceId
68303
- } = resolvedParams ?? {};
68304
- if (!siteId) {
68305
- throw new Error("listPublicEvents requires siteId param");
68306
- }
68307
- const parsedLimit = typeof limit === "string" ? Number.parseInt(limit, 10) : typeof limit === "number" ? limit : void 0;
68308
- return await client.listPublicEvents({
68309
- siteId,
68310
- limit: parsedLimit,
68311
- from,
68312
- to,
68313
- stage,
68314
- categoryIds: typeof categoryIds === "string" ? categoryIds : void 0,
68315
- venueId: typeof venueId === "string" ? venueId : void 0,
68316
- kind: kind === "all" || kind === "courses" || kind === "events" ? kind : void 0,
68317
- entryId: typeof entryId === "string" ? entryId : void 0,
68318
- seriesId: typeof seriesId === "string" ? seriesId : void 0,
68319
- includeOccurrenceId: typeof includeOccurrenceId === "string" ? includeOccurrenceId : void 0
68320
- });
68321
- }
68322
- case "getPublicEventDetails": {
68323
- const {
68324
- siteId,
68325
- limit,
68326
- from,
68327
- to,
68328
- afterStartsAt,
68329
- afterId,
68330
- stage,
68331
- categoryIds,
68332
- venueId,
68333
- staffMemberId,
68334
- kind,
68335
- entryId,
68336
- seriesId,
68337
- includeOccurrenceId
68338
- } = resolvedParams ?? {};
68339
- if (!siteId) {
68340
- throw new Error("getPublicEventDetails requires siteId param");
68341
- }
68342
- const parsedLimit = typeof limit === "string" ? Number.parseInt(limit, 10) : typeof limit === "number" ? limit : void 0;
68343
- return await client.getPublicEventDetails({
68344
- siteId,
68345
- limit: parsedLimit,
68346
- from: typeof from === "string" ? from : void 0,
68347
- to: typeof to === "string" ? to : void 0,
68348
- afterStartsAt: typeof afterStartsAt === "string" ? afterStartsAt : void 0,
68349
- afterId: typeof afterId === "string" ? afterId : void 0,
68350
- stage: typeof stage === "string" ? stage : void 0,
68351
- categoryIds: typeof categoryIds === "string" ? categoryIds : void 0,
68352
- venueId: typeof venueId === "string" ? venueId : void 0,
68353
- staffMemberId: typeof staffMemberId === "string" ? staffMemberId : void 0,
68354
- kind: typeof kind === "string" ? kind : void 0,
68355
- entryId: typeof entryId === "string" ? entryId : void 0,
68356
- seriesId: typeof seriesId === "string" ? seriesId : void 0,
68357
- includeOccurrenceId: typeof includeOccurrenceId === "string" ? includeOccurrenceId : void 0
68358
- });
68359
- }
68360
- case "listPublicCourses": {
68361
- const { siteId, limit, stage } = resolvedParams ?? {};
68362
- if (!siteId) {
68363
- throw new Error("listPublicCourses requires siteId param");
68364
- }
68365
- const parsedLimit = typeof limit === "string" ? Number.parseInt(limit, 10) : typeof limit === "number" ? limit : void 0;
68366
- return await client.listPublicCourses({ siteId, limit: parsedLimit, stage });
68367
- }
68368
- case "listPublicTeamMembers": {
68369
- const { siteId, stage } = resolvedParams ?? {};
68370
- if (!siteId) {
68371
- throw new Error("listPublicTeamMembers requires siteId param");
68372
- }
68373
- return await client.listPublicTeamMembers({
68374
- siteId,
68375
- stage: typeof stage === "string" ? stage : void 0
68376
- });
68377
- }
68378
- case "listPublicProducts": {
68379
- const { siteId, stage, categorySelector } = resolvedParams ?? {};
68380
- if (!siteId) {
68381
- throw new Error("listPublicProducts requires siteId param");
68382
- }
68383
- return await client.listPublicProducts({
68384
- siteId,
68385
- stage: stage === "preview" ? "preview" : "published",
68386
- categorySelector: parsePublicProductCategorySelector(categorySelector)
68387
- });
68388
- }
68389
- case "getPublicFormById": {
68390
- const { formId, siteId } = resolvedParams ?? {};
68391
- if (!formId) {
68392
- throw new Error("getPublicFormById requires formId param");
68393
- }
68394
- if (!siteId) {
68395
- throw new Error("getPublicFormById requires siteId param");
68396
- }
68397
- return await client.getPublicFormById({ formId, siteId });
68398
- }
68399
- case "getPublicBookingServices": {
68400
- const { siteId, ids } = resolvedParams ?? {};
68401
- if (!siteId) {
68402
- throw new Error("getPublicBookingServices requires siteId param");
68403
- }
68404
- return await client.getPublicBookingServices({ siteId, ids });
68405
- }
68406
- case "listPublicPasses": {
68407
- const { siteId, categories } = resolvedParams ?? {};
68408
- if (!siteId) {
68409
- throw new Error("listPublicPasses requires siteId param");
68410
- }
68411
- return await client.listPublicPasses({ siteId, categories });
68412
- }
68413
- case "listPublicMemberships": {
68414
- const { siteId, categories } = resolvedParams ?? {};
68415
- if (!siteId) {
68416
- throw new Error("listPublicMemberships requires siteId param");
68417
- }
68418
- return await client.listPublicMemberships({ siteId, categories });
68419
- }
68420
- default: {
68421
- throw new Error("Unhandled endpoint");
68422
- }
68423
- }
68949
+ return await loaderAdapters[endpoint]({ client, params: resolvedParams });
68424
68950
  },
68425
68951
  isValidEndpoint: isSupportedLoaderEndpoint2,
68426
68952
  onError: (error, { block, loader }) => {
@@ -68676,6 +69202,76 @@ function resolveSiteCustomBlocks(site) {
68676
69202
  return void 0;
68677
69203
  }
68678
69204
 
69205
+ // src/rendering/helpers/pageRuntimeSupport.ts
69206
+ function buildSiteRenderSupport(site, mediaAssets) {
69207
+ const customBlocks = resolveSiteCustomBlocks(site);
69208
+ return {
69209
+ theme: site.theme,
69210
+ site: site.site,
69211
+ sdkConfig: site.sdkConfig ?? null,
69212
+ bookingOfferingPresets: site.bookingOfferingPresets ?? [],
69213
+ ...customBlocks ? { customBlocks } : {},
69214
+ supabaseUrl: site.supabaseUrl,
69215
+ routeMap: site.routes,
69216
+ pagesByIdentifier: site.pagesByIdentifier,
69217
+ entriesByIdentifier: site.entriesByIdentifier,
69218
+ ...mediaAssets ? { mediaAssets } : {}
69219
+ };
69220
+ }
69221
+ function collectMediaAssetSidecar(mediaAssets) {
69222
+ return Array.isArray(mediaAssets) && mediaAssets.length > 0 ? mediaAssets : void 0;
69223
+ }
69224
+ function convertPageResponseBlock(block) {
69225
+ if (!isRecord15(block)) {
69226
+ throw new Error("Invalid block format in page API response");
69227
+ }
69228
+ if (typeof block.id !== "string" && block.id !== null) {
69229
+ throw new Error(`Invalid block id in page: expected string or null, got ${typeof block.id}`);
69230
+ }
69231
+ if (typeof block.kind !== "string") {
69232
+ throw new Error(`Invalid block kind in page: expected string, got ${typeof block.kind}`);
69233
+ }
69234
+ if (typeof block.purpose !== "string") {
69235
+ throw new Error(`Invalid block purpose in page: expected string, got ${typeof block.purpose}`);
69236
+ }
69237
+ return {
69238
+ id: block.id,
69239
+ kind: block.kind,
69240
+ purpose: block.purpose,
69241
+ content: sanitizeSdkRuntimeBlockContent(block.kind, readContentRecord(block.content) ?? {}),
69242
+ draftContent: sanitizeNullableSdkRuntimeBlockContent(
69243
+ block.kind,
69244
+ readNestedContentRecord(block.draftContent)
69245
+ )
69246
+ };
69247
+ }
69248
+ function buildPageOutline(input) {
69249
+ return {
69250
+ name: input.name,
69251
+ path: input.path ?? input.fallbackPath,
69252
+ purpose: input.purpose,
69253
+ blocks: input.blocks.map(convertPageResponseBlock)
69254
+ };
69255
+ }
69256
+ function isRecord15(value) {
69257
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
69258
+ }
69259
+ function readContentRecord(value) {
69260
+ return isRecord15(value) ? value : void 0;
69261
+ }
69262
+ function readNestedContentRecord(value) {
69263
+ if (!isRecord15(value)) return null;
69264
+ return readContentRecord(value.data) ?? null;
69265
+ }
69266
+ function sanitizeSdkRuntimeBlockContent(blockKind, content) {
69267
+ if (blockKind !== "block.newsletter-signup") return content;
69268
+ const sanitized = sanitizeNewsletterSignupPublicContent(content);
69269
+ return isRecord15(sanitized) ? sanitized : {};
69270
+ }
69271
+ function sanitizeNullableSdkRuntimeBlockContent(blockKind, content) {
69272
+ return content ? sanitizeSdkRuntimeBlockContent(blockKind, content) : null;
69273
+ }
69274
+
68679
69275
  // ../content-model/src/routeTemplate.ts
68680
69276
  var ROUTE_TEMPLATE_SLUG_SEGMENT = "{slug}";
68681
69277
  var InvalidRouteTemplateError = class extends Error {
@@ -68821,8 +69417,10 @@ async function loadContent(params) {
68821
69417
  }
68822
69418
  const site = siteResult.value;
68823
69419
  const contentResponse = contentResult.value;
68824
- const customBlocks = resolveSiteCustomBlocks(site);
68825
- const mediaAssets = Array.isArray(contentResponse.mediaAssets) && contentResponse.mediaAssets.length > 0 ? contentResponse.mediaAssets : void 0;
69420
+ const support = buildSiteRenderSupport(
69421
+ site,
69422
+ collectMediaAssetSidecar(contentResponse.mediaAssets)
69423
+ );
68826
69424
  if (isEntryResponse(contentResponse)) {
68827
69425
  const entryData = contentResponse.entry;
68828
69426
  const draftContent = entryData.draftContent;
@@ -68848,13 +69446,14 @@ async function loadContent(params) {
68848
69446
  entry,
68849
69447
  { siteId, preview },
68850
69448
  client,
68851
- { customBlocks }
69449
+ { customBlocks: support.customBlocks }
68852
69450
  );
68853
69451
  return {
68854
69452
  type: "entry",
68855
69453
  entry,
68856
69454
  templatePage,
68857
69455
  resolvedData: resolvedData2,
69456
+ bookingOfferingPresets: support.bookingOfferingPresets,
68858
69457
  dataContext: {
68859
69458
  contentEntry: {
68860
69459
  ...entry.content ?? {},
@@ -68866,29 +69465,29 @@ async function loadContent(params) {
68866
69465
  _contentTypeSlug: entry.type
68867
69466
  }
68868
69467
  },
68869
- theme: site.theme,
69468
+ theme: support.theme,
68870
69469
  siteId,
68871
- ...customBlocks ? { customBlocks } : {},
68872
- site: site.site,
68873
- sdkConfig: site.sdkConfig ?? null,
68874
- supabaseUrl: site.supabaseUrl,
68875
- routeMap: site.routes,
68876
- pagesByIdentifier: site.pagesByIdentifier,
68877
- entriesByIdentifier: site.entriesByIdentifier,
68878
- ...mediaAssets ? { mediaAssets } : {}
69470
+ ...support.customBlocks ? { customBlocks: support.customBlocks } : {},
69471
+ site: support.site,
69472
+ sdkConfig: support.sdkConfig,
69473
+ supabaseUrl: support.supabaseUrl,
69474
+ routeMap: support.routeMap,
69475
+ pagesByIdentifier: support.pagesByIdentifier,
69476
+ entriesByIdentifier: support.entriesByIdentifier,
69477
+ ...support.mediaAssets ? { mediaAssets: support.mediaAssets } : {}
68879
69478
  };
68880
69479
  }
68881
69480
  const { page: pageData } = contentResponse;
68882
69481
  const pageRecord = pageData;
68883
69482
  const canonicalPagePath = pageData.path ?? pageRecord.path ?? "/";
68884
69483
  const draftPagePath = pageRecord.draftPath ?? pageRecord.path ?? canonicalPagePath;
68885
- const blocks = pageData.blocks.map((block) => validateAndConvertBlock(block, "page"));
68886
- const pageOutline = {
69484
+ const pageOutline = buildPageOutline({
68887
69485
  name: pageData.name,
68888
69486
  path: canonicalPagePath,
69487
+ fallbackPath: "/",
68889
69488
  purpose: pageData.purpose,
68890
- blocks
68891
- };
69489
+ blocks: pageData.blocks
69490
+ });
68892
69491
  const resolvedData = await prefetchBlockData2(
68893
69492
  pageOutline,
68894
69493
  {
@@ -68897,7 +69496,7 @@ async function loadContent(params) {
68897
69496
  previewStage: preview ? "preview" : "published"
68898
69497
  },
68899
69498
  client,
68900
- { customBlocks }
69499
+ { customBlocks: support.customBlocks }
68901
69500
  );
68902
69501
  return {
68903
69502
  type: "page",
@@ -68918,56 +69517,23 @@ async function loadContent(params) {
68918
69517
  ogImageId: pageRecord.ogImageId ?? null
68919
69518
  },
68920
69519
  page: pageOutline,
68921
- theme: site.theme,
69520
+ theme: support.theme,
68922
69521
  siteId,
68923
- ...customBlocks ? { customBlocks } : {},
69522
+ ...support.customBlocks ? { customBlocks: support.customBlocks } : {},
68924
69523
  resolvedData,
68925
- site: site.site,
68926
- sdkConfig: site.sdkConfig ?? null,
68927
- supabaseUrl: site.supabaseUrl,
68928
- routeMap: site.routes,
68929
- pagesByIdentifier: site.pagesByIdentifier,
68930
- entriesByIdentifier: site.entriesByIdentifier,
68931
- ...mediaAssets ? { mediaAssets } : {}
69524
+ bookingOfferingPresets: support.bookingOfferingPresets,
69525
+ site: support.site,
69526
+ sdkConfig: support.sdkConfig,
69527
+ supabaseUrl: support.supabaseUrl,
69528
+ routeMap: support.routeMap,
69529
+ pagesByIdentifier: support.pagesByIdentifier,
69530
+ entriesByIdentifier: support.entriesByIdentifier,
69531
+ ...support.mediaAssets ? { mediaAssets: support.mediaAssets } : {}
68932
69532
  };
68933
69533
  }
68934
69534
  function isEntryResponse(response) {
68935
69535
  return "entry" in response;
68936
69536
  }
68937
- function validateAndConvertBlock(block, source) {
68938
- if (!block || typeof block !== "object") {
68939
- throw new Error(`Invalid block format in ${source} API response`);
68940
- }
68941
- const blockRecord = block;
68942
- const kindField = source === "template" ? "blockKind" : "kind";
68943
- const kindValue = blockRecord[kindField];
68944
- if (typeof blockRecord.id !== "string" && blockRecord.id !== null) {
68945
- throw new Error(`Invalid block id in ${source}: expected string or null, got ${typeof blockRecord.id}`);
68946
- }
68947
- if (typeof kindValue !== "string") {
68948
- throw new Error(`Invalid block ${kindField} in ${source}: expected string, got ${typeof kindValue}`);
68949
- }
68950
- if (source === "page") {
68951
- if (typeof blockRecord.purpose !== "string") {
68952
- throw new Error(`Invalid block purpose in ${source}: expected string, got ${typeof blockRecord.purpose}`);
68953
- }
68954
- const content2 = blockRecord.content ?? {};
68955
- return {
68956
- id: blockRecord.id,
68957
- kind: kindValue,
68958
- purpose: blockRecord.purpose,
68959
- content: content2
68960
- };
68961
- }
68962
- const scope = blockRecord.scope;
68963
- const content = blockRecord.content ?? {};
68964
- return {
68965
- id: blockRecord.id,
68966
- kind: kindValue,
68967
- purpose: scope === "entry" ? "entry-content" : "template-layout",
68968
- content
68969
- };
68970
- }
68971
69537
  async function processEntryTemplate(templates, entrySlots, entry, context, client, options) {
68972
69538
  const template = templates?.[0];
68973
69539
  if (!template || !template.blocks?.length) {
@@ -69011,7 +69577,10 @@ async function processEntryTemplate(templates, entrySlots, entry, context, clien
69011
69577
  return { templatePage, resolvedData };
69012
69578
  }
69013
69579
  function resolveTemplateBlock(block, bindingContext) {
69014
- const rawContent = block.content ?? {};
69580
+ const rawContent = sanitizeSdkRuntimeBlockContent(
69581
+ block.blockKind,
69582
+ block.content ?? {}
69583
+ );
69015
69584
  const baseContent = normalizeBindingOutput2(rawContent);
69016
69585
  if (block.scope === "template") {
69017
69586
  return {
@@ -69214,6 +69783,7 @@ function PageContent({
69214
69783
  themeTokens: providedTokens,
69215
69784
  siteId,
69216
69785
  resolvedData,
69786
+ bookingOfferingPresets,
69217
69787
  routeMap,
69218
69788
  pagesByIdentifier,
69219
69789
  entriesByIdentifier,
@@ -69246,6 +69816,7 @@ function PageContent({
69246
69816
  portalToken,
69247
69817
  previewToken,
69248
69818
  resolvedData,
69819
+ bookingOfferingPresets: bookingOfferingPresets ?? [],
69249
69820
  routes: routeMap,
69250
69821
  pagesByIdentifier,
69251
69822
  entriesByIdentifier,
@@ -69283,15 +69854,15 @@ function Page(props2) {
69283
69854
  var lazyBlockOverrideSymbol = /* @__PURE__ */ Symbol.for("riverbankcms.sdk.lazyBlockOverride");
69284
69855
 
69285
69856
  // src/rendering/overrideResolution.ts
69286
- function isRecord14(value) {
69857
+ function isRecord16(value) {
69287
69858
  return typeof value === "object" && value !== null;
69288
69859
  }
69289
69860
  function isBlockOutlineLike(value) {
69290
69861
  const id = value.id;
69291
- return typeof value.kind === "string" && (typeof id === "string" || id === null) && (typeof value.purpose === "string" || isRecord14(value.content) || isRecord14(value.draftContent) || isRecord14(value.bindings));
69862
+ return typeof value.kind === "string" && (typeof id === "string" || id === null) && (typeof value.purpose === "string" || isRecord16(value.content) || isRecord16(value.draftContent) || isRecord16(value.bindings));
69292
69863
  }
69293
69864
  function collectBlockKindsFromValue(value, usedKinds, seen) {
69294
- if (!isRecord14(value)) return;
69865
+ if (!isRecord16(value)) return;
69295
69866
  if (seen.has(value)) return;
69296
69867
  seen.add(value);
69297
69868
  if (isBlockOutlineLike(value)) {
@@ -69340,7 +69911,7 @@ function selectOverrideKeysForUsedKinds(usedKinds, entries) {
69340
69911
  return selectedKeys;
69341
69912
  }
69342
69913
  function isLazyRegistration(registration) {
69343
- return isRecord14(registration) && registration[lazyBlockOverrideSymbol] === true;
69914
+ return isRecord16(registration) && registration[lazyBlockOverrideSymbol] === true;
69344
69915
  }
69345
69916
  async function resolveOverrideComponent(registration) {
69346
69917
  if (isLazyRegistration(registration)) {
@@ -70342,7 +70913,7 @@ var CircuitOpenError = class extends Error {
70342
70913
  };
70343
70914
 
70344
70915
  // src/version.ts
70345
- var SDK_VERSION = "0.84.2";
70916
+ var SDK_VERSION = "0.88.0";
70346
70917
 
70347
70918
  // src/next/content-load-failure.ts
70348
70919
  var SdkContentLoadError = RiverbankContentLoadError;
@@ -70712,6 +71283,7 @@ function createCatchAllPage(options) {
70712
71283
  apiBaseUrl,
70713
71284
  portalToken,
70714
71285
  resolvedData: content.resolvedData,
71286
+ bookingOfferingPresets: content.bookingOfferingPresets,
70715
71287
  blockOverrides: resolvedBlockOverrides,
70716
71288
  sdkConfig: content.sdkConfig,
70717
71289
  supabaseUrl: content.supabaseUrl,
@@ -70739,6 +71311,7 @@ function createCatchAllPage(options) {
70739
71311
  apiBaseUrl,
70740
71312
  portalToken,
70741
71313
  resolvedData: content.resolvedData,
71314
+ bookingOfferingPresets: content.bookingOfferingPresets,
70742
71315
  blockOverrides: resolvedBlockOverrides,
70743
71316
  sdkConfig: content.sdkConfig,
70744
71317
  supabaseUrl: content.supabaseUrl,
@@ -71716,10 +72289,16 @@ function createRiverbankClient(config) {
71716
72289
  limit,
71717
72290
  from,
71718
72291
  to,
72292
+ afterStartsAt,
72293
+ afterId,
71719
72294
  stage,
71720
72295
  categoryIds,
71721
72296
  venueId,
72297
+ staffMemberId,
71722
72298
  kind,
72299
+ eventSurface,
72300
+ eventPresets,
72301
+ scheduleScope,
71723
72302
  entryId,
71724
72303
  seriesId,
71725
72304
  includeOccurrenceId,
@@ -71728,7 +72307,7 @@ function createRiverbankClient(config) {
71728
72307
  if (!siteId) {
71729
72308
  throw new Error("listPublicEvents() requires siteId");
71730
72309
  }
71731
- const cacheKey = `public-events:${siteId}:${limit ?? ""}:${from ?? ""}:${to ?? ""}:${stage ?? ""}:${categoryIds ?? ""}:${venueId ?? ""}:${kind ?? ""}:${entryId ?? ""}:${seriesId ?? ""}:${includeOccurrenceId ?? ""}`;
72310
+ const cacheKey = `public-events:${siteId}:${limit ?? ""}:${from ?? ""}:${to ?? ""}:${afterStartsAt ?? ""}:${afterId ?? ""}:${stage ?? ""}:${categoryIds ?? ""}:${venueId ?? ""}:${staffMemberId ?? ""}:${kind ?? ""}:${eventSurface ?? ""}:${eventPresets ?? ""}:${scheduleScope ?? ""}:${entryId ?? ""}:${seriesId ?? ""}:${includeOccurrenceId ?? ""}`;
71732
72311
  return resilientFetchData(
71733
72312
  cacheKey,
71734
72313
  async (sig) => {
@@ -71737,10 +72316,16 @@ function createRiverbankClient(config) {
71737
72316
  ...typeof limit === "number" && { limit: String(limit) },
71738
72317
  ...from && { from },
71739
72318
  ...to && { to },
72319
+ ...afterStartsAt && { afterStartsAt },
72320
+ ...afterId && { afterId },
71740
72321
  ...stage && { stage },
71741
72322
  ...categoryIds && { categoryIds },
71742
72323
  ...venueId && { venueId },
72324
+ ...staffMemberId && { staffMemberId },
71743
72325
  ...kind && { kind },
72326
+ ...eventSurface && { eventSurface },
72327
+ ...eventPresets && { eventPresets },
72328
+ ...scheduleScope && { scheduleScope },
71744
72329
  ...entryId && { entryId },
71745
72330
  ...seriesId && { seriesId },
71746
72331
  ...includeOccurrenceId && { includeOccurrenceId }
@@ -71767,6 +72352,9 @@ function createRiverbankClient(config) {
71767
72352
  venueId,
71768
72353
  staffMemberId,
71769
72354
  kind,
72355
+ eventSurface,
72356
+ eventPresets,
72357
+ scheduleScope,
71770
72358
  entryId,
71771
72359
  seriesId,
71772
72360
  includeOccurrenceId,
@@ -71775,7 +72363,7 @@ function createRiverbankClient(config) {
71775
72363
  if (!siteId) {
71776
72364
  throw new Error("getPublicEventDetails() requires siteId");
71777
72365
  }
71778
- const cacheKey = `public-event-details:${siteId}:${limit ?? ""}:${from ?? ""}:${to ?? ""}:${afterStartsAt ?? ""}:${afterId ?? ""}:${stage ?? ""}:${categoryIds ?? ""}:${venueId ?? ""}:${staffMemberId ?? ""}:${kind ?? ""}:${entryId ?? ""}:${seriesId ?? ""}:${includeOccurrenceId ?? ""}`;
72366
+ const cacheKey = `public-event-details:${siteId}:${limit ?? ""}:${from ?? ""}:${to ?? ""}:${afterStartsAt ?? ""}:${afterId ?? ""}:${stage ?? ""}:${categoryIds ?? ""}:${venueId ?? ""}:${staffMemberId ?? ""}:${kind ?? ""}:${eventSurface ?? ""}:${eventPresets ?? ""}:${scheduleScope ?? ""}:${entryId ?? ""}:${seriesId ?? ""}:${includeOccurrenceId ?? ""}`;
71779
72367
  return resilientFetchData(
71780
72368
  cacheKey,
71781
72369
  async (sig) => {
@@ -71798,6 +72386,9 @@ function createRiverbankClient(config) {
71798
72386
  ...venueId && { venueId },
71799
72387
  ...staffMemberId && { staffMemberId },
71800
72388
  ...kind && { kind },
72389
+ ...eventSurface && { eventSurface },
72390
+ ...eventPresets && { eventPresets },
72391
+ ...scheduleScope && { scheduleScope },
71801
72392
  ...entryId && { entryId },
71802
72393
  ...seriesId && { seriesId },
71803
72394
  ...includeOccurrenceId && { includeOccurrenceId }