@riverbankcms/sdk 0.72.0 → 0.74.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 (102) hide show
  1. package/README.md +1 -1
  2. package/dist/{PreviewEditorSidebar-44T64SAR.mjs → PreviewEditorSidebar-5XL7M3OM.mjs} +2 -2
  3. package/dist/{PreviewEditorUI-4WKHZTXW.mjs → PreviewEditorUI-ZDFRDJID.mjs} +2 -2
  4. package/dist/SdkPreviewModeRuntime-CRYNDSPL.mjs +8 -0
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +10 -10
  6. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +6 -6
  7. package/dist/_dts/blocks/src/system/node/fragments/backgroundLayer.d.ts +15 -1
  8. package/dist/_dts/blocks/src/system/node/fragments/styledSection.d.ts +11 -0
  9. package/dist/_dts/blocks/src/system/runtime/header/enhanceHeaderSection.d.ts +13 -0
  10. package/dist/_dts/blocks/src/system/runtime/nodes/media.d.ts +6 -0
  11. package/dist/_dts/sdk/src/rendering/components/Layout.d.ts +2 -2
  12. package/dist/_dts/sdk/src/rendering/islands/enhancers/accordion.d.ts +1 -0
  13. package/dist/_dts/sdk/src/rendering/islands/enhancers/bookingForm.d.ts +1 -0
  14. package/dist/_dts/sdk/src/rendering/islands/enhancers/carousel.d.ts +1 -0
  15. package/dist/_dts/sdk/src/rendering/islands/enhancers/cart.d.ts +1 -0
  16. package/dist/_dts/sdk/src/rendering/islands/enhancers/checkout.d.ts +1 -0
  17. package/dist/_dts/sdk/src/rendering/islands/enhancers/courseRegistration.d.ts +1 -0
  18. package/dist/_dts/sdk/src/rendering/islands/enhancers/eventCalendar.d.ts +1 -0
  19. package/dist/_dts/sdk/src/rendering/islands/enhancers/eventCombined.d.ts +1 -0
  20. package/dist/_dts/sdk/src/rendering/islands/enhancers/eventDetails.d.ts +1 -0
  21. package/dist/_dts/sdk/src/rendering/islands/enhancers/eventListing.d.ts +1 -0
  22. package/dist/_dts/sdk/src/rendering/islands/enhancers/eventRegistration.d.ts +1 -0
  23. package/dist/_dts/sdk/src/rendering/islands/enhancers/form.d.ts +1 -0
  24. package/dist/_dts/sdk/src/rendering/islands/enhancers/headerSection.d.ts +1 -0
  25. package/dist/_dts/sdk/src/rendering/islands/enhancers/locationMap.d.ts +1 -0
  26. package/dist/_dts/sdk/src/rendering/islands/enhancers/newsletterForm.d.ts +1 -0
  27. package/dist/_dts/sdk/src/rendering/islands/enhancers/productDetail.d.ts +1 -0
  28. package/dist/_dts/sdk/src/rendering/islands/enhancers/productList.d.ts +1 -0
  29. package/dist/_dts/sdk/src/rendering/islands/enhancers/shop.d.ts +1 -0
  30. package/dist/_dts/sdk/src/rendering/islands/hydrateBlocksIslands.d.ts +2 -2
  31. package/dist/_dts/sdk/src/rendering/islands/propsDecoder.d.ts +7 -0
  32. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +9 -0
  33. package/dist/_dts/sdk/src/version.d.ts +1 -1
  34. package/dist/_dts/theme-core/src/accordions/types.d.ts +3 -3
  35. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +7 -7
  36. package/dist/_dts/theme-core/src/buttons/types.d.ts +20 -20
  37. package/dist/_dts/theme-core/src/cards/types.d.ts +2 -2
  38. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  39. package/dist/_dts/theme-core/src/header/navDropdownSizing.d.ts +7 -0
  40. package/dist/_dts/theme-core/src/inputs/types.d.ts +3 -3
  41. package/dist/_dts/theme-core/src/interactive/baseSchema.d.ts +1 -1
  42. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +156 -156
  43. package/dist/_dts/theme-core/src/navigation/types.d.ts +1 -1
  44. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +4 -4
  45. package/dist/_dts/theme-core/src/schema.d.ts +178 -178
  46. package/dist/_dts/theme-core/src/shared/componentStyles.d.ts +2 -2
  47. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +8 -8
  48. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +5 -5
  49. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +2 -2
  50. package/dist/{chunk-3YNCQG5N.mjs → chunk-2MIWNFJM.mjs} +149 -15
  51. package/dist/{chunk-KWQPAJYS.mjs → chunk-CBD47MTM.mjs} +1 -1
  52. package/dist/{chunk-HV745JYE.mjs → chunk-CEQBBLMJ.mjs} +1 -1
  53. package/dist/{chunk-G4NLITC2.mjs → chunk-YY7K3QD2.mjs} +5 -5
  54. package/dist/cli/index.mjs +233 -203
  55. package/dist/client/accordion-ZZVXWV3N.mjs +120 -0
  56. package/dist/client/altcha-LIGLPZS5.mjs +2755 -0
  57. package/dist/client/bookingForm-4X77HKDS.mjs +34 -0
  58. package/dist/client/bookings.mjs +13 -0
  59. package/dist/client/carousel-25WK2H7G.mjs +46 -0
  60. package/dist/client/cart-JWD2VRFU.mjs +11 -0
  61. package/dist/client/checkout-V7KYGWL7.mjs +11 -0
  62. package/dist/client/chunk-5IYGMTUE.mjs +18614 -0
  63. package/dist/client/chunk-6VGXRE34.mjs +7617 -0
  64. package/dist/client/chunk-N7PBWBWQ.mjs +26 -0
  65. package/dist/client/chunk-PMAIXMAB.mjs +1960 -0
  66. package/dist/client/chunk-RKCFVIMS.mjs +26 -0
  67. package/dist/client/client.mjs +621 -379
  68. package/dist/client/courseRegistration-O6ZPK4YT.mjs +29 -0
  69. package/dist/client/eventCalendar-X6GIPYFM.mjs +29 -0
  70. package/dist/client/eventCombined-EZUOPM3G.mjs +26 -0
  71. package/dist/client/eventDetails-3WODIXET.mjs +14 -0
  72. package/dist/client/eventListing-HEFGAETC.mjs +29 -0
  73. package/dist/client/eventRegistration-3LCP2V3P.mjs +29 -0
  74. package/dist/client/form-AKXQMY6Z.mjs +85 -0
  75. package/dist/client/headerSection-5KHCMU6B.mjs +12 -0
  76. package/dist/client/hooks.mjs +42 -9
  77. package/dist/client/locationMap-7HIADW76.mjs +14 -0
  78. package/dist/client/newsletterForm-5N4YTMU3.mjs +60 -0
  79. package/dist/client/productDetail-IZUA7ZP3.mjs +11 -0
  80. package/dist/client/productList-KWIIJE6I.mjs +11 -0
  81. package/dist/client/rendering/client.mjs +1655 -6472
  82. package/dist/client/rendering/islands.mjs +40 -44031
  83. package/dist/client/rendering.mjs +2909 -2663
  84. package/dist/client/shop-XZQFRQWZ.mjs +13 -0
  85. package/dist/preview-next/client/runtime.mjs +3 -3
  86. package/dist/{sdk-runtime-NGDWSWOS.mjs → sdk-runtime-OHNONZ5U.mjs} +4 -4
  87. package/dist/server/components.mjs +64 -11
  88. package/dist/server/config-validation.mjs +42 -9
  89. package/dist/server/config.mjs +42 -9
  90. package/dist/server/data.mjs +42 -9
  91. package/dist/server/index.mjs +1 -1
  92. package/dist/server/next.mjs +65 -12
  93. package/dist/server/page-converter.mjs +29 -9
  94. package/dist/server/prebuild.mjs +1 -1
  95. package/dist/server/rendering/server.mjs +64 -11
  96. package/dist/server/rendering.mjs +64 -11
  97. package/dist/server/routing.mjs +50 -10
  98. package/dist/server/server.mjs +43 -10
  99. package/dist/server/theme-bridge.mjs +24 -0
  100. package/dist/styles/index.css +11 -0
  101. package/package.json +1 -1
  102. package/dist/SdkPreviewModeRuntime-FO6V7YVY.mjs +0 -8
@@ -10953,7 +10953,9 @@ function backgroundLayer(path, options = {}) {
10953
10953
  imageClassName,
10954
10954
  overlayClassName = "background-overlay rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-pointer-events-none",
10955
10955
  fallbackToken,
10956
- omitImageLayer = false
10956
+ omitImageLayer = false,
10957
+ imageLoading,
10958
+ imageFetchPriority
10957
10959
  } = options;
10958
10960
  const styleLayer = el("div", {
10959
10961
  className: styleClassName,
@@ -10969,11 +10971,14 @@ function backgroundLayer(path, options = {}) {
10969
10971
  }
10970
10972
  }
10971
10973
  });
10972
- const imageLayer = createBackgroundImageNode(path, imageClassName);
10974
+ const imageLayer = createBackgroundImageNode(path, imageClassName, {
10975
+ loading: imageLoading,
10976
+ fetchPriority: imageFetchPriority
10977
+ });
10973
10978
  const overlayLayer = createBackgroundOverlayNode(path, overlayClassName);
10974
10979
  return omitImageLayer ? [styleLayer, overlayLayer] : [styleLayer, imageLayer, overlayLayer];
10975
10980
  }
10976
- function createBackgroundImageNode(path, baseClassName = "rb-absolute rb-z-neg-10") {
10981
+ function createBackgroundImageNode(path, baseClassName = "rb-absolute rb-z-neg-10", options = {}) {
10977
10982
  const imagePath = `${path}.image`;
10978
10983
  return media(
10979
10984
  {
@@ -10994,7 +10999,9 @@ function createBackgroundImageNode(path, baseClassName = "rb-absolute rb-z-neg-1
10994
10999
  transforms: [{ id: "background.resolveImageStyle" }]
10995
11000
  }
10996
11001
  },
10997
- videoPlayback: "background"
11002
+ videoPlayback: "background",
11003
+ ...options.loading ? { loading: options.loading } : {},
11004
+ ...options.fetchPriority ? { fetchPriority: options.fetchPriority } : {}
10998
11005
  },
10999
11006
  when(imagePath),
11000
11007
  bind(imagePath)
@@ -11235,12 +11242,16 @@ function styledSection(config) {
11235
11242
  bindFrom = "_sectionStyles",
11236
11243
  imageClassName = "rb-absolute rb-z-neg-10",
11237
11244
  renderBackgroundImage = true,
11245
+ backgroundImageLoading,
11246
+ backgroundImageFetchPriority,
11238
11247
  fullWidthPath
11239
11248
  } = config;
11240
11249
  const renderedBackgroundNodes = backgroundLayer(`${bindFrom}.background`, {
11241
11250
  imageClassName,
11242
11251
  fallbackToken: background,
11243
- omitImageLayer: !renderBackgroundImage
11252
+ omitImageLayer: !renderBackgroundImage,
11253
+ imageLoading: backgroundImageLoading,
11254
+ imageFetchPriority: backgroundImageFetchPriority
11244
11255
  });
11245
11256
  const childrenArray = Array.isArray(children) ? children : [children];
11246
11257
  return section(
@@ -11489,7 +11500,7 @@ function navRow(opts) {
11489
11500
  el(
11490
11501
  "div",
11491
11502
  {
11492
- className: "nav-dropdown-menu rb-absolute rb-left-0 rb-top-full rb-z-50 rb-hidden rb-min-w-12rem rb-overflow-hidden",
11503
+ className: "nav-dropdown-menu rb-absolute rb-left-0 rb-top-full rb-z-50 rb-hidden rb-overflow-hidden",
11493
11504
  id: dropdownMenuId
11494
11505
  },
11495
11506
  [dropdownLinks]
@@ -17740,6 +17751,206 @@ var init_shop_shared = __esm({
17740
17751
  }
17741
17752
  });
17742
17753
 
17754
+ // ../blocks/src/system/blocks/event-details.ts
17755
+ import { z as z51 } from "zod";
17756
+ var eventDetailsManifest, occurrenceContextSchema2, eventAutoApplyDiscountPreviewBaseSchema, eventAutoApplyDiscountPreviewSchema, eventDetailsBlockDefinition;
17757
+ var init_event_details = __esm({
17758
+ "../blocks/src/system/blocks/event-details.ts"() {
17759
+ "use strict";
17760
+ init_builder();
17761
+ init_builder();
17762
+ init_styledSection();
17763
+ init_fragments();
17764
+ init_shared3();
17765
+ init_shop_shared();
17766
+ init_defineBlock();
17767
+ eventDetailsManifest = createBlockManifest({
17768
+ id: "block.event-details",
17769
+ version: "1.0.0",
17770
+ title: "Event Details",
17771
+ titleSource: "heading",
17772
+ description: "Date/time, venue, map, and other dates for an event",
17773
+ category: "content",
17774
+ tags: ["events", "venue", "map", "schedule", "dates"],
17775
+ icon: "MapPin",
17776
+ styleTokens: { background: "surface", typography: "body", spacing: "md" },
17777
+ behaviours: {
17778
+ supportsThemeSwitching: true,
17779
+ inlineEditing: false,
17780
+ animation: false,
17781
+ paletteHidden: false
17782
+ },
17783
+ additionalFields: [
17784
+ {
17785
+ id: "heading",
17786
+ type: "text",
17787
+ label: "Heading",
17788
+ description: "Optional heading shown above event details",
17789
+ required: false,
17790
+ multiline: false,
17791
+ defaultValue: "Event details"
17792
+ },
17793
+ {
17794
+ id: "showVenue",
17795
+ type: "boolean",
17796
+ label: "Show venue",
17797
+ required: false,
17798
+ defaultValue: true,
17799
+ ui: { intent: "display" }
17800
+ },
17801
+ {
17802
+ id: "showMap",
17803
+ type: "boolean",
17804
+ label: "Show map",
17805
+ description: "Embed a map when the venue has coordinates",
17806
+ required: false,
17807
+ defaultValue: true,
17808
+ ui: { intent: "display" }
17809
+ },
17810
+ {
17811
+ id: "showOtherDates",
17812
+ type: "boolean",
17813
+ label: "Show other dates",
17814
+ required: false,
17815
+ defaultValue: true,
17816
+ ui: { intent: "display" }
17817
+ },
17818
+ {
17819
+ id: "otherDatesLimit",
17820
+ type: "select",
17821
+ label: "Other dates limit",
17822
+ required: false,
17823
+ multiple: false,
17824
+ defaultValue: "5",
17825
+ options: [
17826
+ { value: "3", label: "3 dates" },
17827
+ { value: "5", label: "5 dates" },
17828
+ { value: "10", label: "10 dates" }
17829
+ ],
17830
+ ui: { intent: "display" }
17831
+ },
17832
+ {
17833
+ id: "showCost",
17834
+ type: "boolean",
17835
+ label: "Show cost",
17836
+ description: "Display ticket price for paid events",
17837
+ required: false,
17838
+ defaultValue: true,
17839
+ ui: { intent: "display" }
17840
+ },
17841
+ {
17842
+ id: "showAcceptedPasses",
17843
+ type: "boolean",
17844
+ label: "Show accepted passes",
17845
+ description: "Display passes that can be used for this event",
17846
+ required: false,
17847
+ defaultValue: true,
17848
+ ui: { intent: "display" }
17849
+ },
17850
+ {
17851
+ id: "showAcceptedMemberships",
17852
+ type: "boolean",
17853
+ label: "Show accepted memberships",
17854
+ description: "Display memberships that grant access to this event",
17855
+ required: false,
17856
+ defaultValue: true,
17857
+ ui: { intent: "display" }
17858
+ }
17859
+ ],
17860
+ layout: [
17861
+ styledSection({
17862
+ baseClass: "",
17863
+ spacing: "spacious",
17864
+ children: sectionContainer(
17865
+ [
17866
+ text({ as: "h2" }, bind("content.heading"), when("content.heading")),
17867
+ el("event-details", {
17868
+ occurrenceContext: {
17869
+ $bind: { from: "$root.occurrenceContext", fallback: null }
17870
+ },
17871
+ contentEntry: { $bind: { from: "$root.contentEntry", fallback: null } },
17872
+ events: { $bind: { from: "data.eventDetailsData.events" } },
17873
+ showVenue: { $bind: { from: "content.showVenue" } },
17874
+ showMap: { $bind: { from: "content.showMap" } },
17875
+ showOtherDates: { $bind: { from: "content.showOtherDates" } },
17876
+ otherDatesLimit: {
17877
+ $bind: { from: "content.otherDatesLimit", fallback: "5" }
17878
+ },
17879
+ showCost: { $bind: { from: "content.showCost", fallback: true } },
17880
+ showAcceptedPasses: {
17881
+ $bind: { from: "content.showAcceptedPasses", fallback: true }
17882
+ },
17883
+ showAcceptedMemberships: {
17884
+ $bind: { from: "content.showAcceptedMemberships", fallback: true }
17885
+ },
17886
+ sitePasses: { $bind: { from: "data.eventDetailsData.sitePasses" } },
17887
+ siteMemberships: { $bind: { from: "data.eventDetailsData.siteMemberships" } },
17888
+ autoApplyDiscount: {
17889
+ $bind: { from: "data.eventDetailsData.autoApplyDiscount", fallback: null }
17890
+ }
17891
+ })
17892
+ ],
17893
+ { gap: "lg" }
17894
+ )
17895
+ })
17896
+ ]
17897
+ });
17898
+ occurrenceContextSchema2 = z51.object({
17899
+ id: z51.string(),
17900
+ seriesId: z51.string(),
17901
+ startsAt: z51.string(),
17902
+ endsAt: z51.string(),
17903
+ timeZone: z51.string(),
17904
+ capacityOverride: z51.number().nullable().optional(),
17905
+ overrides: z51.record(z51.string(), z51.unknown()).nullable().optional()
17906
+ }).nullable();
17907
+ eventAutoApplyDiscountPreviewBaseSchema = z51.object({
17908
+ id: z51.string(),
17909
+ publicLabel: z51.string(),
17910
+ description: z51.string().nullable(),
17911
+ minTicketsRequired: z51.number().nullable()
17912
+ });
17913
+ eventAutoApplyDiscountPreviewSchema = z51.discriminatedUnion("discountType", [
17914
+ eventAutoApplyDiscountPreviewBaseSchema.extend({
17915
+ discountType: z51.literal("percent"),
17916
+ discountPercent: z51.number(),
17917
+ discountAmountCents: z51.null()
17918
+ }),
17919
+ eventAutoApplyDiscountPreviewBaseSchema.extend({
17920
+ discountType: z51.literal("fixed"),
17921
+ discountPercent: z51.null(),
17922
+ discountAmountCents: z51.number()
17923
+ })
17924
+ ]);
17925
+ eventDetailsBlockDefinition = {
17926
+ manifest: eventDetailsManifest,
17927
+ dataSchemas: {
17928
+ eventDetailsData: z51.object({
17929
+ events: publicEventsArraySchema,
17930
+ sitePasses: z51.object({ passes: z51.array(publicPassProductSchema) }),
17931
+ siteMemberships: z51.object({ memberships: z51.array(publicMembershipProductSchema) }),
17932
+ autoApplyDiscount: eventAutoApplyDiscountPreviewSchema.nullable().optional().default(null)
17933
+ }).optional(),
17934
+ occurrenceContext: occurrenceContextSchema2.optional()
17935
+ },
17936
+ dataLoaders: {
17937
+ eventDetailsData: {
17938
+ endpoint: "getPublicEventDetails",
17939
+ params: {
17940
+ siteId: { $bind: { from: "$root.siteId" } },
17941
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
17942
+ limit: "25",
17943
+ entryId: { $bind: { from: "$root.contentEntry._entryId" } },
17944
+ seriesId: { $bind: { from: "$root.occurrenceContext.seriesId" } },
17945
+ includeOccurrenceId: { $bind: { from: "$root.occurrenceContext.id" } }
17946
+ },
17947
+ mode: "server"
17948
+ }
17949
+ }
17950
+ };
17951
+ }
17952
+ });
17953
+
17743
17954
  // ../calendar/src/grid.ts
17744
17955
  function formatDateKey2(date) {
17745
17956
  const year = date.getFullYear();
@@ -19643,6 +19854,8 @@ var init_media_server = __esm({
19643
19854
  className,
19644
19855
  style,
19645
19856
  videoPlayback = "inline",
19857
+ loading = "lazy",
19858
+ fetchPriority,
19646
19859
  size = ImagePresets.full,
19647
19860
  fieldPath,
19648
19861
  blockKind,
@@ -19679,7 +19892,8 @@ var init_media_server = __esm({
19679
19892
  alt: value.alt ?? "",
19680
19893
  className,
19681
19894
  style: computedStyle,
19682
- loading: "lazy",
19895
+ loading,
19896
+ fetchPriority,
19683
19897
  decoding: "async"
19684
19898
  }
19685
19899
  );
@@ -25596,6 +25810,7 @@ var init_video_embed = __esm({
25596
25810
  height: "100%",
25597
25811
  border: "none"
25598
25812
  },
25813
+ loading: "lazy",
25599
25814
  allow: "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",
25600
25815
  referrerPolicy: "no-referrer-when-downgrade",
25601
25816
  allowFullScreen: true
@@ -30846,6 +31061,26 @@ var init_presets2 = __esm({
30846
31061
  }
30847
31062
  });
30848
31063
 
31064
+ // ../theme-core/src/header/navDropdownSizing.ts
31065
+ var NAV_DROPDOWN_MIN_WIDTH_REM, NAV_DROPDOWN_MAX_WIDTH_REM, NAV_DROPDOWN_VIEWPORT_GUTTER_REM, NAV_DROPDOWN_VIEWPORT_GUTTER_PX, NAV_DROPDOWN_SHIFT_PROPERTY, NAV_DROPDOWN_MAX_WIDTH_CSS, NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES;
31066
+ var init_navDropdownSizing = __esm({
31067
+ "../theme-core/src/header/navDropdownSizing.ts"() {
31068
+ "use strict";
31069
+ NAV_DROPDOWN_MIN_WIDTH_REM = 12;
31070
+ NAV_DROPDOWN_MAX_WIDTH_REM = 22;
31071
+ NAV_DROPDOWN_VIEWPORT_GUTTER_REM = 1;
31072
+ NAV_DROPDOWN_VIEWPORT_GUTTER_PX = 16;
31073
+ NAV_DROPDOWN_SHIFT_PROPERTY = "--nav-dropdown-shift-x";
31074
+ NAV_DROPDOWN_MAX_WIDTH_CSS = `min(${NAV_DROPDOWN_MAX_WIDTH_REM}rem, calc(100vw - ${NAV_DROPDOWN_VIEWPORT_GUTTER_REM * 2}rem))`;
31075
+ NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES = [
31076
+ `min-width: ${NAV_DROPDOWN_MIN_WIDTH_REM}rem;`,
31077
+ `width: max-content;`,
31078
+ `max-width: ${NAV_DROPDOWN_MAX_WIDTH_CSS};`,
31079
+ `transform: translateX(var(${NAV_DROPDOWN_SHIFT_PROPERTY}, 0px));`
31080
+ ];
31081
+ }
31082
+ });
31083
+
30849
31084
  // ../theme-core/src/header/generateHeaderCss.ts
30850
31085
  function generateHeaderCss(options) {
30851
31086
  const { themeId, theme } = options;
@@ -31118,6 +31353,7 @@ function generateDropdownContainerStyles(header, themeId, tokens) {
31118
31353
  const selector = `:where([data-theme-scope="${themeId}"]) .nav-dropdown-menu`;
31119
31354
  const rules = [];
31120
31355
  const dropdownStyle = header.dropdownStyle;
31356
+ rules.push(...NAV_DROPDOWN_CONTAINER_RAIL_CSS_RULES);
31121
31357
  const bgToken = dropdownStyle?.background ?? "surface";
31122
31358
  rules.push(`background-color: ${tokens.getColor(bgToken)};`);
31123
31359
  const textToken = dropdownStyle?.textColor ?? "text";
@@ -31377,6 +31613,7 @@ var init_generateHeaderCss = __esm({
31377
31613
  init_presets2();
31378
31614
  init_shared();
31379
31615
  init_breakpoints();
31616
+ init_navDropdownSizing();
31380
31617
  HEADER_BLUR = "blur(12px)";
31381
31618
  FLOATING_BLUR = "blur(16px)";
31382
31619
  HEADER_CTA_GAP_MAP = {
@@ -40889,6 +41126,17 @@ var init_containerResponsiveThemeCss = __esm({
40889
41126
  * =============================================================================
40890
41127
  */
40891
41128
 
41129
+ :where(.theme-scope) .nav-dropdown-menu {
41130
+ /*
41131
+ * Keep these rails in sync with header/navDropdownSizing.ts.
41132
+ * The JS placement gutter is 16px, matching the 1rem per-side gutter in calc(100vw - 2rem).
41133
+ */
41134
+ min-width: 12rem;
41135
+ width: max-content;
41136
+ max-width: min(22rem, calc(100vw - 2rem));
41137
+ transform: translateX(var(--nav-dropdown-shift-x, 0px));
41138
+ }
41139
+
40892
41140
  :where(.theme-scope) .nav-dropdown:hover > .nav-dropdown-menu,
40893
41141
  :where(.theme-scope) .nav-dropdown:focus-within > .nav-dropdown-menu,
40894
41142
  :where(.theme-scope) .nav-dropdown .nav-dropdown-trigger[aria-expanded="true"] + .nav-dropdown-menu {
@@ -42688,9 +42936,189 @@ var init_themeScopeUtils = __esm({
42688
42936
  }
42689
42937
  });
42690
42938
 
42939
+ // ../blocks/src/contracts/non-block-islands.ts
42940
+ import { z as z72 } from "zod";
42941
+ var accordionIslandSchema, headerSectionIslandSchema, responsiveSlidesToShowSchema, carouselIslandSchema, eventDetailsOccurrenceContextSchema, eventDetailsContentEntrySchema, eventDetailsIslandSchema, locationMapIslandSchema, accordionIslandPropsCodec, headerSectionIslandPropsCodec, carouselIslandPropsCodec, eventDetailsIslandPropsCodec, locationMapIslandPropsCodec;
42942
+ var init_non_block_islands = __esm({
42943
+ "../blocks/src/contracts/non-block-islands.ts"() {
42944
+ "use strict";
42945
+ init_runtime();
42946
+ init_shop_shared();
42947
+ init_schemas2();
42948
+ init_event_details();
42949
+ accordionIslandSchema = z72.object({
42950
+ type: z72.enum(["single", "multiple"]).optional(),
42951
+ defaultValue: z72.union([z72.string(), z72.array(z72.string())]).optional(),
42952
+ collapsible: z72.boolean().optional()
42953
+ });
42954
+ headerSectionIslandSchema = z72.object({
42955
+ enabled: z72.boolean().optional(),
42956
+ scrollEnabled: z72.boolean().optional()
42957
+ });
42958
+ responsiveSlidesToShowSchema = z72.object({
42959
+ mobile: z72.union([z72.number(), z72.string()]).optional(),
42960
+ tablet: z72.union([z72.number(), z72.string()]).optional(),
42961
+ desktop: z72.union([z72.number(), z72.string()]).optional()
42962
+ });
42963
+ carouselIslandSchema = z72.object({
42964
+ slidesToShow: z72.union([z72.number(), z72.string(), responsiveSlidesToShowSchema]).optional(),
42965
+ transition: z72.enum(["slide", "fade"]).optional(),
42966
+ showControls: z72.union([z72.boolean(), z72.string()]).optional(),
42967
+ showDots: z72.union([z72.boolean(), z72.string()]).optional(),
42968
+ arrowVisibility: z72.enum(["always", "hover", "never"]).optional(),
42969
+ autoplay: z72.union([z72.boolean(), z72.string()]).optional(),
42970
+ autoplayDelay: z72.union([z72.number(), z72.string()]).optional(),
42971
+ loop: z72.union([z72.boolean(), z72.string()]).optional()
42972
+ });
42973
+ eventDetailsOccurrenceContextSchema = z72.object({
42974
+ id: z72.string(),
42975
+ seriesId: z72.string(),
42976
+ startsAt: z72.string(),
42977
+ endsAt: z72.string(),
42978
+ timeZone: z72.string()
42979
+ });
42980
+ eventDetailsContentEntrySchema = z72.object({
42981
+ id: z72.string(),
42982
+ slug: z72.string(),
42983
+ contentTypeSlug: z72.string()
42984
+ });
42985
+ eventDetailsIslandSchema = z72.object({
42986
+ occurrenceContext: eventDetailsOccurrenceContextSchema.nullable().optional(),
42987
+ contentEntry: eventDetailsContentEntrySchema.nullable().optional(),
42988
+ events: z72.array(publicEventSchema).nullable().optional(),
42989
+ showVenue: z72.boolean().optional(),
42990
+ showMap: z72.boolean().optional(),
42991
+ showOtherDates: z72.boolean().optional(),
42992
+ otherDatesLimit: z72.string().optional(),
42993
+ showCost: z72.boolean().optional(),
42994
+ showAcceptedPasses: z72.boolean().optional(),
42995
+ showAcceptedMemberships: z72.boolean().optional(),
42996
+ sitePasses: z72.object({ passes: z72.array(publicPassProductSchema) }).nullable().optional(),
42997
+ siteMemberships: z72.object({ memberships: z72.array(publicMembershipProductSchema) }).nullable().optional(),
42998
+ autoApplyDiscount: eventAutoApplyDiscountPreviewSchema.nullable().optional(),
42999
+ className: z72.string().nullable().optional(),
43000
+ nowIso: z72.string().optional()
43001
+ });
43002
+ locationMapIslandSchema = z72.object({
43003
+ location: z72.object({
43004
+ addressText: z72.string().nullable(),
43005
+ lat: z72.number().nullable(),
43006
+ lng: z72.number().nullable()
43007
+ }).nullable().optional(),
43008
+ zoom: z72.number().nullable().optional(),
43009
+ heightPx: z72.number().nullable().optional(),
43010
+ showAddressText: z72.boolean().optional(),
43011
+ showDirections: z72.boolean().optional(),
43012
+ directionsLabel: z72.string().nullable().optional(),
43013
+ className: z72.string().nullable().optional()
43014
+ });
43015
+ accordionIslandPropsCodec = createZodCodec(accordionIslandSchema);
43016
+ headerSectionIslandPropsCodec = createZodCodec(headerSectionIslandSchema);
43017
+ carouselIslandPropsCodec = createZodCodec(carouselIslandSchema);
43018
+ eventDetailsIslandPropsCodec = createZodCodec(eventDetailsIslandSchema);
43019
+ locationMapIslandPropsCodec = createZodCodec(locationMapIslandSchema);
43020
+ }
43021
+ });
43022
+
43023
+ // ../blocks/src/contracts/proof-block-islands.ts
43024
+ var proofBlockIslandCodecs, runtimeIslandCodecs;
43025
+ var init_proof_block_islands = __esm({
43026
+ "../blocks/src/contracts/proof-block-islands.ts"() {
43027
+ "use strict";
43028
+ init_booking_form_interactive();
43029
+ init_course_registration_interactive();
43030
+ init_EventListing_interactive();
43031
+ init_non_block_islands();
43032
+ init_EventCalendar_interactive();
43033
+ init_EventCombined_interactive();
43034
+ init_event_registration_interactive();
43035
+ init_form_interactive();
43036
+ init_gifting_interactive();
43037
+ init_newsletter_form_interactive();
43038
+ init_shop_interactive();
43039
+ proofBlockIslandCodecs = {
43040
+ "booking-form": bookingFormInteractiveIslandPropsCodec,
43041
+ "course-registration": courseRegistrationInteractiveIslandPropsCodec,
43042
+ "event-registration": eventRegistrationInteractiveIslandPropsCodec,
43043
+ form: formInteractiveIslandPropsCodec,
43044
+ "event-listing": eventListingInteractiveIslandPropsCodec,
43045
+ "event-calendar": eventCalendarInteractiveIslandPropsCodec,
43046
+ "newsletter-form": newsletterFormInteractiveIslandPropsCodec,
43047
+ gifting: giftingInteractiveIslandPropsCodec,
43048
+ "product-list": productListInteractiveIslandPropsCodec,
43049
+ "product-detail": productDetailInteractiveIslandPropsCodec,
43050
+ cart: cartInteractiveIslandPropsCodec,
43051
+ checkout: checkoutInteractiveIslandPropsCodec,
43052
+ shop: shopInteractiveIslandPropsCodec
43053
+ };
43054
+ runtimeIslandCodecs = {
43055
+ accordion: accordionIslandPropsCodec,
43056
+ carousel: carouselIslandPropsCodec,
43057
+ headerSection: headerSectionIslandPropsCodec,
43058
+ "event-details": eventDetailsIslandPropsCodec,
43059
+ "location-map": locationMapIslandPropsCodec,
43060
+ ...proofBlockIslandCodecs,
43061
+ // `event-combined` is not a proof block definition, but it still participates
43062
+ // in the same typed SSR/hydration contract path as we close the last raw island seams.
43063
+ "event-combined": eventCombinedInteractiveIslandPropsCodec
43064
+ };
43065
+ }
43066
+ });
43067
+
43068
+ // ../blocks/src/contracts/index.ts
43069
+ var init_contracts = __esm({
43070
+ "../blocks/src/contracts/index.ts"() {
43071
+ "use strict";
43072
+ init_runtime();
43073
+ init_proof_block_islands();
43074
+ }
43075
+ });
43076
+
43077
+ // src/rendering/islands/blocksContracts.ts
43078
+ var init_blocksContracts = __esm({
43079
+ "src/rendering/islands/blocksContracts.ts"() {
43080
+ "use strict";
43081
+ init_contracts();
43082
+ }
43083
+ });
43084
+
43085
+ // src/rendering/islands/propsDecoder.ts
43086
+ function defineIslandPropsDecoder(kind) {
43087
+ return (input) => {
43088
+ const codec = islandDecoders[kind];
43089
+ if (!codec) {
43090
+ return input;
43091
+ }
43092
+ const result = codec.decode(input);
43093
+ if (isDecodeSuccess(result)) {
43094
+ return result.value;
43095
+ }
43096
+ throw new IslandPropsDecodeError(kind, result.issues);
43097
+ };
43098
+ }
43099
+ var IslandPropsDecodeError, islandDecoders;
43100
+ var init_propsDecoder = __esm({
43101
+ "src/rendering/islands/propsDecoder.ts"() {
43102
+ "use strict";
43103
+ init_contracts();
43104
+ init_blocksContracts();
43105
+ IslandPropsDecodeError = class extends Error {
43106
+ constructor(kind, issues) {
43107
+ super(
43108
+ `[sdk:islands] Invalid props for island kind="${kind}": ${issues.map((issue2) => `${issue2.path.join(".") || "<root>"}: ${issue2.message}`).join("; ")}`
43109
+ );
43110
+ this.name = "IslandPropsDecodeError";
43111
+ this.issues = issues;
43112
+ }
43113
+ };
43114
+ islandDecoders = runtimeIslandCodecs;
43115
+ }
43116
+ });
43117
+
42691
43118
  // src/rendering/islands/enhancers/accordion.ts
42692
43119
  var accordion_exports = {};
42693
43120
  __export(accordion_exports, {
43121
+ decode: () => decode,
42694
43122
  enhance: () => enhance
42695
43123
  });
42696
43124
  function parseDefaultValues(value) {
@@ -42714,10 +43142,12 @@ function normalizeDefaultValues(domValue, propsValue) {
42714
43142
  if (typeof propsValue === "string" && propsValue.trim()) return [propsValue.trim()];
42715
43143
  return parseDefaultValues(domValue);
42716
43144
  }
42717
- var enhance;
43145
+ var decode, enhance;
42718
43146
  var init_accordion = __esm({
42719
43147
  "src/rendering/islands/enhancers/accordion.ts"() {
42720
43148
  "use strict";
43149
+ init_propsDecoder();
43150
+ decode = defineIslandPropsDecoder("accordion");
42721
43151
  enhance = (root, props2) => {
42722
43152
  if (root.dataset.rbAccordionEnhanced === "true") return;
42723
43153
  root.dataset.rbAccordionEnhanced = "true";
@@ -60432,6 +60862,39 @@ var init_headerCartRuntime = __esm({
60432
60862
  });
60433
60863
 
60434
60864
  // ../blocks/src/system/runtime/header/enhanceHeaderSection.ts
60865
+ function planDropdownViewportShift(input) {
60866
+ const { left, right, viewportWidth, gutter } = input;
60867
+ if (!Number.isFinite(left) || !Number.isFinite(right) || !Number.isFinite(viewportWidth) || !Number.isFinite(gutter)) {
60868
+ return { kind: "unchanged" };
60869
+ }
60870
+ const normalizedGutter = Math.max(0, gutter);
60871
+ const viewportLeft = normalizedGutter;
60872
+ const viewportRight = Math.max(viewportLeft, viewportWidth - normalizedGutter);
60873
+ const menuWidth = right - left;
60874
+ const availableWidth = viewportRight - viewportLeft;
60875
+ if (menuWidth >= availableWidth) {
60876
+ const x2 = viewportLeft - left;
60877
+ return x2 === 0 ? { kind: "unchanged" } : { kind: "shift", x: x2 };
60878
+ }
60879
+ let x = 0;
60880
+ if (right > viewportRight) x = viewportRight - right;
60881
+ if (left + x < viewportLeft) x += viewportLeft - (left + x);
60882
+ return x === 0 ? { kind: "unchanged" } : { kind: "shift", x };
60883
+ }
60884
+ function applyDropdownPlacementPlan(menu, plan) {
60885
+ switch (plan.kind) {
60886
+ case "unchanged":
60887
+ menu.style.removeProperty(NAV_DROPDOWN_SHIFT_PROPERTY);
60888
+ return;
60889
+ case "shift":
60890
+ menu.style.setProperty(NAV_DROPDOWN_SHIFT_PROPERTY, `${plan.x}px`);
60891
+ return;
60892
+ default: {
60893
+ const _exhaustive = plan;
60894
+ return _exhaustive;
60895
+ }
60896
+ }
60897
+ }
60435
60898
  function getFirstNonScriptChild(root) {
60436
60899
  const children = Array.from(root.children);
60437
60900
  for (const child of children) {
@@ -60449,16 +60912,58 @@ function enhanceDesktopDropdownAria(root) {
60449
60912
  dropdowns.forEach((dropdown) => {
60450
60913
  const trigger = dropdown.querySelector(SELECTORS.dropdownTrigger);
60451
60914
  if (!trigger) return;
60915
+ const menu = dropdown.querySelector(SELECTORS.dropdownMenu);
60916
+ let placementRafId = null;
60917
+ let placementRafScheduled = false;
60918
+ const cancelPlacementFrame = () => {
60919
+ if (placementRafId !== null) {
60920
+ window.cancelAnimationFrame(placementRafId);
60921
+ placementRafId = null;
60922
+ }
60923
+ placementRafScheduled = false;
60924
+ };
60925
+ const resetPlacement = () => {
60926
+ cancelPlacementFrame();
60927
+ menu?.style.removeProperty(NAV_DROPDOWN_SHIFT_PROPERTY);
60928
+ };
60929
+ const schedulePlacement = () => {
60930
+ if (!menu) return;
60931
+ resetPlacement();
60932
+ placementRafScheduled = true;
60933
+ const id = window.requestAnimationFrame(() => {
60934
+ placementRafScheduled = false;
60935
+ placementRafId = null;
60936
+ const rect = menu.getBoundingClientRect();
60937
+ const plan = planDropdownViewportShift({
60938
+ left: rect.left,
60939
+ right: rect.right,
60940
+ viewportWidth: document.documentElement.clientWidth,
60941
+ gutter: NAV_DROPDOWN_VIEWPORT_GUTTER_PX
60942
+ });
60943
+ applyDropdownPlacementPlan(menu, plan);
60944
+ });
60945
+ placementRafId = placementRafScheduled ? id : null;
60946
+ };
60452
60947
  setExpanded(trigger, false);
60453
- const handleEnter = () => setExpanded(trigger, true);
60948
+ const handleEnter = () => {
60949
+ setExpanded(trigger, true);
60950
+ schedulePlacement();
60951
+ };
60454
60952
  const handleLeave = () => {
60455
60953
  if (dropdown.contains(document.activeElement)) return;
60456
60954
  setExpanded(trigger, false);
60955
+ resetPlacement();
60956
+ };
60957
+ const handleFocusIn = () => {
60958
+ setExpanded(trigger, true);
60959
+ schedulePlacement();
60457
60960
  };
60458
- const handleFocusIn = () => setExpanded(trigger, true);
60459
60961
  const handleFocusOut = (event) => {
60460
60962
  const next = event.relatedTarget;
60461
- if (!next || !dropdown.contains(next)) setExpanded(trigger, false);
60963
+ if (!next || !dropdown.contains(next)) {
60964
+ setExpanded(trigger, false);
60965
+ resetPlacement();
60966
+ }
60462
60967
  };
60463
60968
  dropdown.addEventListener("mouseenter", handleEnter);
60464
60969
  dropdown.addEventListener("mouseleave", handleLeave);
@@ -60469,6 +60974,7 @@ function enhanceDesktopDropdownAria(root) {
60469
60974
  dropdown.removeEventListener("mouseleave", handleLeave);
60470
60975
  dropdown.removeEventListener("focusin", handleFocusIn);
60471
60976
  dropdown.removeEventListener("focusout", handleFocusOut);
60977
+ resetPlacement();
60472
60978
  });
60473
60979
  });
60474
60980
  return cleanups;
@@ -60728,9 +61234,11 @@ var init_enhanceHeaderSection = __esm({
60728
61234
  "../blocks/src/system/runtime/header/enhanceHeaderSection.ts"() {
60729
61235
  "use strict";
60730
61236
  "use client";
61237
+ init_navDropdownSizing();
60731
61238
  init_headerCartRuntime();
60732
61239
  SELECTORS = {
60733
61240
  dropdown: ".nav-dropdown",
61241
+ dropdownMenu: ".nav-dropdown-menu",
60734
61242
  dropdownTrigger: ".nav-dropdown-trigger",
60735
61243
  mobileOverlay: "[data-nav-mobile-overlay]",
60736
61244
  mobileToggle: "[data-nav-mobile-toggle]",
@@ -61279,8 +61787,7 @@ function useEventFilters({
61279
61787
  staffMembers: [],
61280
61788
  labels: { courseOption: "Course" }
61281
61789
  });
61282
- const [loading, setLoading] = useState23(false);
61283
- const [error, setError] = useState23(null);
61790
+ const [loading, setLoading] = useState23(f [error, setError] = useState23(null);
61284
61791
  const [selectedKind, setSelectedKindState] = useState23("all");
61285
61792
  const [selectedCategoryId, setSelectedCategoryId] = useState23("all");
61286
61793
  const [selectedStaffMemberId, setSelectedStaffMemberId] = useState23("all");
@@ -63783,13 +64290,16 @@ var init_client3 = __esm({
63783
64290
  // src/rendering/islands/enhancers/headerSection.ts
63784
64291
  var headerSection_exports = {};
63785
64292
  __export(headerSection_exports, {
64293
+ decode: () => decode2,
63786
64294
  enhance: () => enhance2
63787
64295
  });
63788
- var enhance2;
64296
+ var decode2, enhance2;
63789
64297
  var init_headerSection = __esm({
63790
64298
  "src/rendering/islands/enhancers/headerSection.ts"() {
63791
64299
  "use strict";
63792
64300
  init_client3();
64301
+ init_propsDecoder();
64302
+ decode2 = defineIslandPropsDecoder("headerSection");
63793
64303
  enhance2 = (root, props2) => {
63794
64304
  const scrollEnabled = typeof props2?.scrollEnabled === "boolean" ? props2.scrollEnabled : typeof props2?.enabled === "boolean" ? props2.enabled : void 0;
63795
64305
  return enhanceHeaderSection(root, { scrollEnabled });
@@ -63828,6 +64338,7 @@ var init_reactMount = __esm({
63828
64338
  // src/rendering/islands/enhancers/carousel.tsx
63829
64339
  var carousel_exports = {};
63830
64340
  __export(carousel_exports, {
64341
+ decode: () => decode3,
63831
64342
  enhance: () => enhance3
63832
64343
  });
63833
64344
  import { jsx as jsx143 } from "react/jsx-runtime";
@@ -63844,12 +64355,14 @@ function extractSlides(root) {
63844
64355
  html: el2.innerHTML
63845
64356
  }));
63846
64357
  }
63847
- var enhance3;
64358
+ var decode3, enhance3;
63848
64359
  var init_carousel = __esm({
63849
64360
  "src/rendering/islands/enhancers/carousel.tsx"() {
63850
64361
  "use strict";
63851
64362
  init_client3();
64363
+ init_propsDecoder();
63852
64364
  init_reactMount();
64365
+ decode3 = defineIslandPropsDecoder("carousel");
63853
64366
  enhance3 = (root, props2) => {
63854
64367
  if (root.dataset.rbReactMounted === "true") return;
63855
64368
  const extractedSlides = extractSlides(root);
@@ -63880,6 +64393,7 @@ var init_carousel = __esm({
63880
64393
  // src/rendering/islands/enhancers/form.tsx
63881
64394
  var form_exports = {};
63882
64395
  __export(form_exports, {
64396
+ decode: () => decode4,
63883
64397
  enhance: () => enhance4
63884
64398
  });
63885
64399
  import { jsx as jsx144 } from "react/jsx-runtime";
@@ -63934,12 +64448,14 @@ function applySnapshots(form2, snapshots) {
63934
64448
  }
63935
64449
  }
63936
64450
  }
63937
- var enhance4;
64451
+ var decode4, enhance4;
63938
64452
  var init_form2 = __esm({
63939
64453
  "src/rendering/islands/enhancers/form.tsx"() {
63940
64454
  "use strict";
63941
64455
  init_client3();
64456
+ init_propsDecoder();
63942
64457
  init_reactMount();
64458
+ decode4 = defineIslandPropsDecoder("form");
63943
64459
  enhance4 = (root, props2) => {
63944
64460
  const { siteId, apiBaseUrl } = props2;
63945
64461
  if (!siteId) {
@@ -63971,15 +64487,18 @@ var init_form2 = __esm({
63971
64487
  // src/rendering/islands/enhancers/bookingForm.tsx
63972
64488
  var bookingForm_exports = {};
63973
64489
  __export(bookingForm_exports, {
64490
+ decode: () => decode5,
63974
64491
  enhance: () => enhance5
63975
64492
  });
63976
64493
  import { jsx as jsx145 } from "react/jsx-runtime";
63977
- var enhance5;
64494
+ var decode5, enhance5;
63978
64495
  var init_bookingForm2 = __esm({
63979
64496
  "src/rendering/islands/enhancers/bookingForm.tsx"() {
63980
64497
  "use strict";
63981
64498
  init_client3();
64499
+ init_propsDecoder();
63982
64500
  init_reactMount();
64501
+ decode5 = defineIslandPropsDecoder("booking-form");
63983
64502
  enhance5 = (root, props2) => {
63984
64503
  const { apiBaseUrl, portalToken } = props2;
63985
64504
  const formId = props2.render.hydration.formId;
@@ -64011,15 +64530,18 @@ var init_bookingForm2 = __esm({
64011
64530
  // src/rendering/islands/enhancers/eventRegistration.tsx
64012
64531
  var eventRegistration_exports = {};
64013
64532
  __export(eventRegistration_exports, {
64533
+ decode: () => decode6,
64014
64534
  enhance: () => enhance6
64015
64535
  });
64016
64536
  import { jsx as jsx146 } from "react/jsx-runtime";
64017
- var enhance6;
64537
+ var decode6, enhance6;
64018
64538
  var init_eventRegistration = __esm({
64019
64539
  "src/rendering/islands/enhancers/eventRegistration.tsx"() {
64020
64540
  "use strict";
64021
64541
  init_client3();
64542
+ init_propsDecoder();
64022
64543
  init_reactMount();
64544
+ decode6 = defineIslandPropsDecoder("event-registration");
64023
64545
  enhance6 = (root, props2) => {
64024
64546
  const { siteId, apiBaseUrl, stage, portalToken } = props2;
64025
64547
  if (!siteId) {
@@ -64046,15 +64568,18 @@ var init_eventRegistration = __esm({
64046
64568
  // src/rendering/islands/enhancers/eventDetails.tsx
64047
64569
  var eventDetails_exports = {};
64048
64570
  __export(eventDetails_exports, {
64571
+ decode: () => decode7,
64049
64572
  enhance: () => enhance7
64050
64573
  });
64051
64574
  import { jsx as jsx147 } from "react/jsx-runtime";
64052
- var enhance7;
64575
+ var decode7, enhance7;
64053
64576
  var init_eventDetails = __esm({
64054
64577
  "src/rendering/islands/enhancers/eventDetails.tsx"() {
64055
64578
  "use strict";
64056
64579
  init_client3();
64580
+ init_propsDecoder();
64057
64581
  init_reactMount();
64582
+ decode7 = defineIslandPropsDecoder("event-details");
64058
64583
  enhance7 = (root, props2) => {
64059
64584
  return mountReactIsland(root, ({ root: reactRoot }) => {
64060
64585
  reactRoot.render(/* @__PURE__ */ jsx147(EventDetailsIslandClient, { ...props2 }));
@@ -64066,15 +64591,18 @@ var init_eventDetails = __esm({
64066
64591
  // src/rendering/islands/enhancers/locationMap.tsx
64067
64592
  var locationMap_exports = {};
64068
64593
  __export(locationMap_exports, {
64594
+ decode: () => decode8,
64069
64595
  enhance: () => enhance8
64070
64596
  });
64071
64597
  import { jsx as jsx148 } from "react/jsx-runtime";
64072
- var enhance8;
64598
+ var decode8, enhance8;
64073
64599
  var init_locationMap = __esm({
64074
64600
  "src/rendering/islands/enhancers/locationMap.tsx"() {
64075
64601
  "use strict";
64076
64602
  init_client3();
64603
+ init_propsDecoder();
64077
64604
  init_reactMount();
64605
+ decode8 = defineIslandPropsDecoder("location-map");
64078
64606
  enhance8 = (root, props2) => {
64079
64607
  return mountReactIsland(root, ({ root: reactRoot }) => {
64080
64608
  reactRoot.render(/* @__PURE__ */ jsx148(LocationMapIslandClient, { ...props2 }));
@@ -64086,15 +64614,18 @@ var init_locationMap = __esm({
64086
64614
  // src/rendering/islands/enhancers/courseRegistration.tsx
64087
64615
  var courseRegistration_exports = {};
64088
64616
  __export(courseRegistration_exports, {
64617
+ decode: () => decode9,
64089
64618
  enhance: () => enhance9
64090
64619
  });
64091
64620
  import { jsx as jsx149 } from "react/jsx-runtime";
64092
- var enhance9;
64621
+ var decode9, enhance9;
64093
64622
  var init_courseRegistration = __esm({
64094
64623
  "src/rendering/islands/enhancers/courseRegistration.tsx"() {
64095
64624
  "use strict";
64096
64625
  init_client3();
64626
+ init_propsDecoder();
64097
64627
  init_reactMount();
64628
+ decode9 = defineIslandPropsDecoder("course-registration");
64098
64629
  enhance9 = (root, props2) => {
64099
64630
  const { siteId, apiBaseUrl, stage, portalToken } = props2;
64100
64631
  if (!siteId) {
@@ -64121,15 +64652,18 @@ var init_courseRegistration = __esm({
64121
64652
  // src/rendering/islands/enhancers/eventListing.tsx
64122
64653
  var eventListing_exports = {};
64123
64654
  __export(eventListing_exports, {
64655
+ decode: () => decode10,
64124
64656
  enhance: () => enhance10
64125
64657
  });
64126
64658
  import { jsx as jsx150 } from "react/jsx-runtime";
64127
- var enhance10;
64659
+ var decode10, enhance10;
64128
64660
  var init_eventListing = __esm({
64129
64661
  "src/rendering/islands/enhancers/eventListing.tsx"() {
64130
64662
  "use strict";
64131
64663
  init_client3();
64664
+ init_propsDecoder();
64132
64665
  init_reactMount();
64666
+ decode10 = defineIslandPropsDecoder("event-listing");
64133
64667
  enhance10 = (root, props2) => {
64134
64668
  const { siteId, apiBaseUrl, stage } = props2;
64135
64669
  if (!siteId) {
@@ -64156,15 +64690,18 @@ var init_eventListing = __esm({
64156
64690
  // src/rendering/islands/enhancers/eventCalendar.tsx
64157
64691
  var eventCalendar_exports = {};
64158
64692
  __export(eventCalendar_exports, {
64693
+ decode: () => decode11,
64159
64694
  enhance: () => enhance11
64160
64695
  });
64161
64696
  import { jsx as jsx151 } from "react/jsx-runtime";
64162
- var enhance11;
64697
+ var decode11, enhance11;
64163
64698
  var init_eventCalendar = __esm({
64164
64699
  "src/rendering/islands/enhancers/eventCalendar.tsx"() {
64165
64700
  "use strict";
64166
64701
  init_client3();
64702
+ init_propsDecoder();
64167
64703
  init_reactMount();
64704
+ decode11 = defineIslandPropsDecoder("event-calendar");
64168
64705
  enhance11 = (root, props2) => {
64169
64706
  const { siteId, apiBaseUrl, stage } = props2;
64170
64707
  if (!siteId) {
@@ -64191,15 +64728,18 @@ var init_eventCalendar = __esm({
64191
64728
  // src/rendering/islands/enhancers/eventCombined.tsx
64192
64729
  var eventCombined_exports = {};
64193
64730
  __export(eventCombined_exports, {
64731
+ decode: () => decode12,
64194
64732
  enhance: () => enhance12
64195
64733
  });
64196
64734
  import { jsx as jsx152 } from "react/jsx-runtime";
64197
- var enhance12;
64735
+ var decode12, enhance12;
64198
64736
  var init_eventCombined = __esm({
64199
64737
  "src/rendering/islands/enhancers/eventCombined.tsx"() {
64200
64738
  "use strict";
64201
64739
  init_client3();
64740
+ init_propsDecoder();
64202
64741
  init_reactMount();
64742
+ decode12 = defineIslandPropsDecoder("event-combined");
64203
64743
  enhance12 = (root, props2) => {
64204
64744
  const { siteId, apiBaseUrl, stage } = props2;
64205
64745
  if (!apiBaseUrl) {
@@ -64253,14 +64793,17 @@ var init_shopShared = __esm({
64253
64793
  // src/rendering/islands/enhancers/productList.tsx
64254
64794
  var productList_exports = {};
64255
64795
  __export(productList_exports, {
64796
+ decode: () => decode13,
64256
64797
  enhance: () => enhance13
64257
64798
  });
64258
- var enhance13;
64799
+ var decode13, enhance13;
64259
64800
  var init_productList = __esm({
64260
64801
  "src/rendering/islands/enhancers/productList.tsx"() {
64261
64802
  "use strict";
64262
64803
  init_client3();
64804
+ init_propsDecoder();
64263
64805
  init_shopShared();
64806
+ decode13 = defineIslandPropsDecoder("product-list");
64264
64807
  enhance13 = (root, props2) => mountShopBlockIsland(root, props2, ProductListClient, "product-list");
64265
64808
  }
64266
64809
  });
@@ -64268,14 +64811,17 @@ var init_productList = __esm({
64268
64811
  // src/rendering/islands/enhancers/productDetail.tsx
64269
64812
  var productDetail_exports = {};
64270
64813
  __export(productDetail_exports, {
64814
+ decode: () => decode14,
64271
64815
  enhance: () => enhance14
64272
64816
  });
64273
- var enhance14;
64817
+ var decode14, enhance14;
64274
64818
  var init_productDetail = __esm({
64275
64819
  "src/rendering/islands/enhancers/productDetail.tsx"() {
64276
64820
  "use strict";
64277
64821
  init_client3();
64822
+ init_propsDecoder();
64278
64823
  init_shopShared();
64824
+ decode14 = defineIslandPropsDecoder("product-detail");
64279
64825
  enhance14 = (root, props2) => mountShopBlockIsland(root, props2, ProductDetailClient, "product-detail");
64280
64826
  }
64281
64827
  });
@@ -64283,14 +64829,17 @@ var init_productDetail = __esm({
64283
64829
  // src/rendering/islands/enhancers/cart.tsx
64284
64830
  var cart_exports = {};
64285
64831
  __export(cart_exports, {
64832
+ decode: () => decode15,
64286
64833
  enhance: () => enhance15
64287
64834
  });
64288
- var enhance15;
64835
+ var decode15, enhance15;
64289
64836
  var init_cart2 = __esm({
64290
64837
  "src/rendering/islands/enhancers/cart.tsx"() {
64291
64838
  "use strict";
64292
64839
  init_client3();
64840
+ init_propsDecoder();
64293
64841
  init_shopShared();
64842
+ decode15 = defineIslandPropsDecoder("cart");
64294
64843
  enhance15 = (root, props2) => mountShopBlockIsland(root, props2, CartClient, "cart");
64295
64844
  }
64296
64845
  });
@@ -64298,14 +64847,17 @@ var init_cart2 = __esm({
64298
64847
  // src/rendering/islands/enhancers/checkout.tsx
64299
64848
  var checkout_exports = {};
64300
64849
  __export(checkout_exports, {
64850
+ decode: () => decode16,
64301
64851
  enhance: () => enhance16
64302
64852
  });
64303
- var enhance16;
64853
+ var decode16, enhance16;
64304
64854
  var init_checkout2 = __esm({
64305
64855
  "src/rendering/islands/enhancers/checkout.tsx"() {
64306
64856
  "use strict";
64307
64857
  init_client3();
64858
+ init_propsDecoder();
64308
64859
  init_shopShared();
64860
+ decode16 = defineIslandPropsDecoder("checkout");
64309
64861
  enhance16 = (root, props2) => mountShopBlockIsland(root, props2, CheckoutClient, "checkout");
64310
64862
  }
64311
64863
  });
@@ -64313,14 +64865,17 @@ var init_checkout2 = __esm({
64313
64865
  // src/rendering/islands/enhancers/shop.tsx
64314
64866
  var shop_exports = {};
64315
64867
  __export(shop_exports, {
64868
+ decode: () => decode17,
64316
64869
  enhance: () => enhance17
64317
64870
  });
64318
- var enhance17;
64871
+ var decode17, enhance17;
64319
64872
  var init_shop2 = __esm({
64320
64873
  "src/rendering/islands/enhancers/shop.tsx"() {
64321
64874
  "use strict";
64322
64875
  init_client3();
64876
+ init_propsDecoder();
64323
64877
  init_shopShared();
64878
+ decode17 = defineIslandPropsDecoder("shop");
64324
64879
  enhance17 = (root, props2) => {
64325
64880
  return mountShopBlockIsland(root, props2, ShopClient, "shop");
64326
64881
  };
@@ -64330,6 +64885,7 @@ var init_shop2 = __esm({
64330
64885
  // src/rendering/islands/enhancers/newsletterForm.tsx
64331
64886
  var newsletterForm_exports = {};
64332
64887
  __export(newsletterForm_exports, {
64888
+ decode: () => decode18,
64333
64889
  enhance: () => enhance18
64334
64890
  });
64335
64891
  import { jsx as jsx154 } from "react/jsx-runtime";
@@ -64356,12 +64912,14 @@ function applySnapshots2(form2, snapshots) {
64356
64912
  }
64357
64913
  }
64358
64914
  }
64359
- var enhance18;
64915
+ var decode18, enhance18;
64360
64916
  var init_newsletterForm2 = __esm({
64361
64917
  "src/rendering/islands/enhancers/newsletterForm.tsx"() {
64362
64918
  "use strict";
64363
64919
  init_client3();
64920
+ init_propsDecoder();
64364
64921
  init_reactMount();
64922
+ decode18 = defineIslandPropsDecoder("newsletter-form");
64365
64923
  enhance18 = (root, props2) => {
64366
64924
  const { siteId, apiBaseUrl, render } = props2;
64367
64925
  if (!siteId) {
@@ -71449,6 +72007,10 @@ var heroCopyAndCta = composeFragments([
71449
72007
  { fragment: heroCopyFragment },
71450
72008
  { fragment: heroCtaRowFragment }
71451
72009
  ]);
72010
+ var heroPriorityMediaProps = {
72011
+ loading: "eager",
72012
+ fetchPriority: "high"
72013
+ };
71452
72014
  var heroContentNodes = heroCopyAndCta.layout;
71453
72015
  function heroContentCard(children, gap) {
71454
72016
  return styledContainer({
@@ -71511,7 +72073,8 @@ function heroSplitImagePane() {
71511
72073
  [
71512
72074
  media(
71513
72075
  {
71514
- className: "rb-absolute rb-inset-0 rb-h-full rb-w-full rb-object-cover"
72076
+ className: "rb-absolute rb-inset-0 rb-h-full rb-w-full rb-object-cover",
72077
+ ...heroPriorityMediaProps
71515
72078
  },
71516
72079
  when("_sectionStyles.background.image"),
71517
72080
  bind("_sectionStyles.background.image")
@@ -71522,13 +72085,17 @@ function heroSplitImagePane() {
71522
72085
  var classicLayout = styledSection({
71523
72086
  children: heroContainerStack(heroContentNodes, "md"),
71524
72087
  // styledContainer (rb-container) already provides horizontal padding
71525
- baseClass: ""
72088
+ baseClass: "",
72089
+ backgroundImageLoading: heroPriorityMediaProps.loading,
72090
+ backgroundImageFetchPriority: heroPriorityMediaProps.fetchPriority
71526
72091
  });
71527
72092
  var microLayout = styledSection({
71528
72093
  children: heroContainerStack(heroContentNodes, "sm"),
71529
72094
  // styledContainer (rb-container) already provides horizontal padding
71530
72095
  baseClass: "",
71531
- spacing: "compact"
72096
+ spacing: "compact",
72097
+ backgroundImageLoading: heroPriorityMediaProps.loading,
72098
+ backgroundImageFetchPriority: heroPriorityMediaProps.fetchPriority
71532
72099
  });
71533
72100
  function splitLayoutWith(children) {
71534
72101
  return styledSection({
@@ -75247,200 +75814,7 @@ var appointmentBookingBlockDefinition = {
75247
75814
  // ../blocks/src/system/blocks/index.ts
75248
75815
  init_event_registration();
75249
75816
  init_course_registration();
75250
-
75251
- // ../blocks/src/system/blocks/event-details.ts
75252
- init_builder();
75253
- init_builder();
75254
- init_styledSection();
75255
- init_fragments();
75256
- init_shared3();
75257
- init_shop_shared();
75258
- init_defineBlock();
75259
- import { z as z51 } from "zod";
75260
- var eventDetailsManifest = createBlockManifest({
75261
- id: "block.event-details",
75262
- version: "1.0.0",
75263
- title: "Event Details",
75264
- titleSource: "heading",
75265
- description: "Date/time, venue, map, and other dates for an event",
75266
- category: "content",
75267
- tags: ["events", "venue", "map", "schedule", "dates"],
75268
- icon: "MapPin",
75269
- styleTokens: { background: "surface", typography: "body", spacing: "md" },
75270
- behaviours: {
75271
- supportsThemeSwitching: true,
75272
- inlineEditing: false,
75273
- animation: false,
75274
- paletteHidden: false
75275
- },
75276
- additionalFields: [
75277
- {
75278
- id: "heading",
75279
- type: "text",
75280
- label: "Heading",
75281
- description: "Optional heading shown above event details",
75282
- required: false,
75283
- multiline: false,
75284
- defaultValue: "Event details"
75285
- },
75286
- {
75287
- id: "showVenue",
75288
- type: "boolean",
75289
- label: "Show venue",
75290
- required: false,
75291
- defaultValue: true,
75292
- ui: { intent: "display" }
75293
- },
75294
- {
75295
- id: "showMap",
75296
- type: "boolean",
75297
- label: "Show map",
75298
- description: "Embed a map when the venue has coordinates",
75299
- required: false,
75300
- defaultValue: true,
75301
- ui: { intent: "display" }
75302
- },
75303
- {
75304
- id: "showOtherDates",
75305
- type: "boolean",
75306
- label: "Show other dates",
75307
- required: false,
75308
- defaultValue: true,
75309
- ui: { intent: "display" }
75310
- },
75311
- {
75312
- id: "otherDatesLimit",
75313
- type: "select",
75314
- label: "Other dates limit",
75315
- required: false,
75316
- multiple: false,
75317
- defaultValue: "5",
75318
- options: [
75319
- { value: "3", label: "3 dates" },
75320
- { value: "5", label: "5 dates" },
75321
- { value: "10", label: "10 dates" }
75322
- ],
75323
- ui: { intent: "display" }
75324
- },
75325
- {
75326
- id: "showCost",
75327
- type: "boolean",
75328
- label: "Show cost",
75329
- description: "Display ticket price for paid events",
75330
- required: false,
75331
- defaultValue: true,
75332
- ui: { intent: "display" }
75333
- },
75334
- {
75335
- id: "showAcceptedPasses",
75336
- type: "boolean",
75337
- label: "Show accepted passes",
75338
- description: "Display passes that can be used for this event",
75339
- required: false,
75340
- defaultValue: true,
75341
- ui: { intent: "display" }
75342
- },
75343
- {
75344
- id: "showAcceptedMemberships",
75345
- type: "boolean",
75346
- label: "Show accepted memberships",
75347
- description: "Display memberships that grant access to this event",
75348
- required: false,
75349
- defaultValue: true,
75350
- ui: { intent: "display" }
75351
- }
75352
- ],
75353
- layout: [
75354
- styledSection({
75355
- baseClass: "",
75356
- spacing: "spacious",
75357
- children: sectionContainer(
75358
- [
75359
- text({ as: "h2" }, bind("content.heading"), when("content.heading")),
75360
- el("event-details", {
75361
- occurrenceContext: {
75362
- $bind: { from: "$root.occurrenceContext", fallback: null }
75363
- },
75364
- contentEntry: { $bind: { from: "$root.contentEntry", fallback: null } },
75365
- events: { $bind: { from: "data.eventDetailsData.events" } },
75366
- showVenue: { $bind: { from: "content.showVenue" } },
75367
- showMap: { $bind: { from: "content.showMap" } },
75368
- showOtherDates: { $bind: { from: "content.showOtherDates" } },
75369
- otherDatesLimit: {
75370
- $bind: { from: "content.otherDatesLimit", fallback: "5" }
75371
- },
75372
- showCost: { $bind: { from: "content.showCost", fallback: true } },
75373
- showAcceptedPasses: {
75374
- $bind: { from: "content.showAcceptedPasses", fallback: true }
75375
- },
75376
- showAcceptedMemberships: {
75377
- $bind: { from: "content.showAcceptedMemberships", fallback: true }
75378
- },
75379
- sitePasses: { $bind: { from: "data.eventDetailsData.sitePasses" } },
75380
- siteMemberships: { $bind: { from: "data.eventDetailsData.siteMemberships" } },
75381
- autoApplyDiscount: {
75382
- $bind: { from: "data.eventDetailsData.autoApplyDiscount", fallback: null }
75383
- }
75384
- })
75385
- ],
75386
- { gap: "lg" }
75387
- )
75388
- })
75389
- ]
75390
- });
75391
- var occurrenceContextSchema2 = z51.object({
75392
- id: z51.string(),
75393
- seriesId: z51.string(),
75394
- startsAt: z51.string(),
75395
- endsAt: z51.string(),
75396
- timeZone: z51.string(),
75397
- capacityOverride: z51.number().nullable().optional(),
75398
- overrides: z51.record(z51.string(), z51.unknown()).nullable().optional()
75399
- }).nullable();
75400
- var eventAutoApplyDiscountPreviewBaseSchema = z51.object({
75401
- id: z51.string(),
75402
- publicLabel: z51.string(),
75403
- description: z51.string().nullable(),
75404
- minTicketsRequired: z51.number().nullable()
75405
- });
75406
- var eventAutoApplyDiscountPreviewSchema = z51.discriminatedUnion("discountType", [
75407
- eventAutoApplyDiscountPreviewBaseSchema.extend({
75408
- discountType: z51.literal("percent"),
75409
- discountPercent: z51.number(),
75410
- discountAmountCents: z51.null()
75411
- }),
75412
- eventAutoApplyDiscountPreviewBaseSchema.extend({
75413
- discountType: z51.literal("fixed"),
75414
- discountPercent: z51.null(),
75415
- discountAmountCents: z51.number()
75416
- })
75417
- ]);
75418
- var eventDetailsBlockDefinition = {
75419
- manifest: eventDetailsManifest,
75420
- dataSchemas: {
75421
- eventDetailsData: z51.object({
75422
- events: publicEventsArraySchema,
75423
- sitePasses: z51.object({ passes: z51.array(publicPassProductSchema) }),
75424
- siteMemberships: z51.object({ memberships: z51.array(publicMembershipProductSchema) }),
75425
- autoApplyDiscount: eventAutoApplyDiscountPreviewSchema.nullable().optional().default(null)
75426
- }).optional(),
75427
- occurrenceContext: occurrenceContextSchema2.optional()
75428
- },
75429
- dataLoaders: {
75430
- eventDetailsData: {
75431
- endpoint: "getPublicEventDetails",
75432
- params: {
75433
- siteId: { $bind: { from: "$root.siteId" } },
75434
- stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
75435
- limit: "25",
75436
- entryId: { $bind: { from: "$root.contentEntry._entryId" } },
75437
- seriesId: { $bind: { from: "$root.occurrenceContext.seriesId" } },
75438
- includeOccurrenceId: { $bind: { from: "$root.occurrenceContext.id" } }
75439
- },
75440
- mode: "server"
75441
- }
75442
- }
75443
- };
75817
+ init_event_details();
75444
75818
 
75445
75819
  // ../blocks/src/system/blocks/course-details.ts
75446
75820
  init_builder();
@@ -77770,6 +78144,7 @@ var locationMapBlockDefinition = {
77770
78144
  // ../blocks/src/system/blocks/index.ts
77771
78145
  init_form();
77772
78146
  init_event_registration();
78147
+ init_event_details();
77773
78148
  init_course_registration();
77774
78149
  init_shop();
77775
78150
  init_product_list();
@@ -78824,6 +79199,10 @@ function getAbsoluteSegments(fromPath, context) {
78824
79199
  if (scoped?.basePathSegments && scoped.basePathSegments.length > 0) {
78825
79200
  return [...scoped.basePathSegments, ...rest];
78826
79201
  }
79202
+ const hasContentScope = context.scopes.some((entry) => entry.name === "content");
79203
+ if (hasContentScope && !(first in context.viewModel)) {
79204
+ return ["content", ...segments];
79205
+ }
78827
79206
  return void 0;
78828
79207
  }
78829
79208
  function readFromSource(source, segments) {
@@ -79406,7 +79785,7 @@ function makeDefaultBlockComponent(args) {
79406
79785
  pathBase,
79407
79786
  blockId,
79408
79787
  blockKind,
79409
- blockContent: content,
79788
+ blockContent: mergedContent,
79410
79789
  blockBindings,
79411
79790
  editableRouteMetadataFieldIds,
79412
79791
  fragmentRegistry: fragmentRegistry2
@@ -81775,7 +82154,6 @@ function normalizeLoaderParams(endpoint, params, context) {
81775
82154
  }
81776
82155
 
81777
82156
  // ../blocks/src/index.ts
81778
- init_media3();
81779
82157
  init_colorStyles();
81780
82158
 
81781
82159
  // ../api/src/sdkConfig/contracts.ts
@@ -83674,124 +84052,6 @@ function isEntryResponse(response) {
83674
84052
  // src/rendering/islands/BlocksIslandsHydrator.tsx
83675
84053
  import { useEffect as useEffect29 } from "react";
83676
84054
 
83677
- // ../blocks/src/contracts/non-block-islands.ts
83678
- init_runtime();
83679
- init_shop_shared();
83680
- init_schemas2();
83681
- import { z as z72 } from "zod";
83682
- var accordionIslandSchema = z72.object({
83683
- type: z72.enum(["single", "multiple"]).optional(),
83684
- defaultValue: z72.union([z72.string(), z72.array(z72.string())]).optional(),
83685
- collapsible: z72.boolean().optional()
83686
- });
83687
- var headerSectionIslandSchema = z72.object({
83688
- enabled: z72.boolean().optional(),
83689
- scrollEnabled: z72.boolean().optional()
83690
- });
83691
- var responsiveSlidesToShowSchema = z72.object({
83692
- mobile: z72.union([z72.number(), z72.string()]).optional(),
83693
- tablet: z72.union([z72.number(), z72.string()]).optional(),
83694
- desktop: z72.union([z72.number(), z72.string()]).optional()
83695
- });
83696
- var carouselIslandSchema = z72.object({
83697
- slidesToShow: z72.union([z72.number(), z72.string(), responsiveSlidesToShowSchema]).optional(),
83698
- transition: z72.enum(["slide", "fade"]).optional(),
83699
- showControls: z72.union([z72.boolean(), z72.string()]).optional(),
83700
- showDots: z72.union([z72.boolean(), z72.string()]).optional(),
83701
- arrowVisibility: z72.enum(["always", "hover", "never"]).optional(),
83702
- autoplay: z72.union([z72.boolean(), z72.string()]).optional(),
83703
- autoplayDelay: z72.union([z72.number(), z72.string()]).optional(),
83704
- loop: z72.union([z72.boolean(), z72.string()]).optional()
83705
- });
83706
- var eventDetailsOccurrenceContextSchema = z72.object({
83707
- id: z72.string(),
83708
- seriesId: z72.string(),
83709
- startsAt: z72.string(),
83710
- endsAt: z72.string(),
83711
- timeZone: z72.string()
83712
- });
83713
- var eventDetailsContentEntrySchema = z72.object({
83714
- id: z72.string(),
83715
- slug: z72.string(),
83716
- contentTypeSlug: z72.string()
83717
- });
83718
- var eventDetailsIslandSchema = z72.object({
83719
- occurrenceContext: eventDetailsOccurrenceContextSchema.nullable().optional(),
83720
- contentEntry: eventDetailsContentEntrySchema.nullable().optional(),
83721
- events: z72.array(publicEventSchema).nullable().optional(),
83722
- showVenue: z72.boolean().optional(),
83723
- showMap: z72.boolean().optional(),
83724
- showOtherDates: z72.boolean().optional(),
83725
- otherDatesLimit: z72.string().optional(),
83726
- showCost: z72.boolean().optional(),
83727
- showAcceptedPasses: z72.boolean().optional(),
83728
- showAcceptedMemberships: z72.boolean().optional(),
83729
- sitePasses: z72.object({ passes: z72.array(publicPassProductSchema) }).nullable().optional(),
83730
- siteMemberships: z72.object({ memberships: z72.array(publicMembershipProductSchema) }).nullable().optional(),
83731
- autoApplyDiscount: eventAutoApplyDiscountPreviewSchema.nullable().optional(),
83732
- className: z72.string().nullable().optional(),
83733
- nowIso: z72.string().optional()
83734
- });
83735
- var locationMapIslandSchema = z72.object({
83736
- location: z72.object({
83737
- addressText: z72.string().nullable(),
83738
- lat: z72.number().nullable(),
83739
- lng: z72.number().nullable()
83740
- }).nullable().optional(),
83741
- zoom: z72.number().nullable().optional(),
83742
- heightPx: z72.number().nullable().optional(),
83743
- showAddressText: z72.boolean().optional(),
83744
- showDirections: z72.boolean().optional(),
83745
- directionsLabel: z72.string().nullable().optional(),
83746
- className: z72.string().nullable().optional()
83747
- });
83748
- var accordionIslandPropsCodec = createZodCodec(accordionIslandSchema);
83749
- var headerSectionIslandPropsCodec = createZodCodec(headerSectionIslandSchema);
83750
- var carouselIslandPropsCodec = createZodCodec(carouselIslandSchema);
83751
- var eventDetailsIslandPropsCodec = createZodCodec(eventDetailsIslandSchema);
83752
- var locationMapIslandPropsCodec = createZodCodec(locationMapIslandSchema);
83753
-
83754
- // ../blocks/src/contracts/index.ts
83755
- init_runtime();
83756
-
83757
- // ../blocks/src/contracts/proof-block-islands.ts
83758
- init_booking_form_interactive();
83759
- init_course_registration_interactive();
83760
- init_EventListing_interactive();
83761
- init_EventCalendar_interactive();
83762
- init_EventCombined_interactive();
83763
- init_event_registration_interactive();
83764
- init_form_interactive();
83765
- init_gifting_interactive();
83766
- init_newsletter_form_interactive();
83767
- init_shop_interactive();
83768
- var proofBlockIslandCodecs = {
83769
- "booking-form": bookingFormInteractiveIslandPropsCodec,
83770
- "course-registration": courseRegistrationInteractiveIslandPropsCodec,
83771
- "event-registration": eventRegistrationInteractiveIslandPropsCodec,
83772
- form: formInteractiveIslandPropsCodec,
83773
- "event-listing": eventListingInteractiveIslandPropsCodec,
83774
- "event-calendar": eventCalendarInteractiveIslandPropsCodec,
83775
- "newsletter-form": newsletterFormInteractiveIslandPropsCodec,
83776
- gifting: giftingInteractiveIslandPropsCodec,
83777
- "product-list": productListInteractiveIslandPropsCodec,
83778
- "product-detail": productDetailInteractiveIslandPropsCodec,
83779
- cart: cartInteractiveIslandPropsCodec,
83780
- checkout: checkoutInteractiveIslandPropsCodec,
83781
- shop: shopInteractiveIslandPropsCodec
83782
- };
83783
- var runtimeIslandCodecs = {
83784
- accordion: accordionIslandPropsCodec,
83785
- carousel: carouselIslandPropsCodec,
83786
- headerSection: headerSectionIslandPropsCodec,
83787
- "event-details": eventDetailsIslandPropsCodec,
83788
- "location-map": locationMapIslandPropsCodec,
83789
- ...proofBlockIslandCodecs,
83790
- // `event-combined` is not a proof block definition, but it still participates
83791
- // in the same typed SSR/hydration contract path as we close the last raw island seams.
83792
- "event-combined": eventCombinedInteractiveIslandPropsCodec
83793
- };
83794
-
83795
84055
  // src/rendering/islands/hydrateBlocksIslands.ts
83796
84056
  var defaultEnhancerLoaders = {
83797
84057
  accordion: () => Promise.resolve().then(() => (init_accordion(), accordion_exports)),
@@ -83828,19 +84088,6 @@ var RETRYABLE_ERROR_PATTERNS = [
83828
84088
  /importing a module script failed/i
83829
84089
  ];
83830
84090
  var DEFAULT_REQUIRED_ERROR_MESSAGE = "This section failed to load. Please refresh the page.";
83831
- var IslandPropsDecodeError = class extends Error {
83832
- constructor(kind, issues) {
83833
- super(
83834
- `[sdk:islands] Invalid props for island kind="${kind}": ${issues.map((issue2) => `${issue2.path.join(".") || "<root>"}: ${issue2.message}`).join("; ")}`
83835
- );
83836
- this.name = "IslandPropsDecodeError";
83837
- this.issues = issues;
83838
- }
83839
- };
83840
- var islandDecoders = runtimeIslandCodecs;
83841
- function getIslandCodec(kind) {
83842
- return islandDecoders[kind];
83843
- }
83844
84091
  function getNodeEnv() {
83845
84092
  const g = globalThis;
83846
84093
  return g.process?.env?.NODE_ENV;
@@ -83871,32 +84118,19 @@ async function loadEnhancer(kind, loaders) {
83871
84118
  function getIslandPropsScript(root) {
83872
84119
  return root.querySelector('script[type="application/json"][data-rb-island-props]');
83873
84120
  }
83874
- function decodeIslandProps(kind, input) {
83875
- const codec = getIslandCodec(kind);
83876
- if (!codec) {
83877
- return input;
83878
- }
83879
- const result = codec.decode(input);
83880
- if (isDecodeSuccess(result)) {
83881
- return result.value;
83882
- }
83883
- throw new IslandPropsDecodeError(kind, result.issues);
83884
- }
83885
- function parseIslandProps(kind, root, options) {
84121
+ function parseIslandProps(root) {
83886
84122
  const script = getIslandPropsScript(root);
83887
- if (!script) return decodeIslandProps(kind, {});
84123
+ if (!script) return {};
83888
84124
  const raw = script.textContent ?? "";
83889
- if (!raw.trim()) return decodeIslandProps(kind, {});
83890
- let parsed;
84125
+ if (!raw.trim()) return {};
83891
84126
  try {
83892
- parsed = JSON.parse(raw);
84127
+ return JSON.parse(raw);
83893
84128
  } catch (error) {
83894
84129
  if (getNodeEnv() !== "production") {
83895
84130
  console.warn("[sdk:islands] Failed to parse island props JSON", error);
83896
84131
  }
83897
84132
  throw error;
83898
84133
  }
83899
- return decodeIslandProps(kind, parsed);
83900
84134
  }
83901
84135
  function getAttemptCount(element) {
83902
84136
  const raw = element.dataset.rbIslandAttempts;
@@ -83914,6 +84148,12 @@ function isRetryableError(error) {
83914
84148
  }
83915
84149
  return false;
83916
84150
  }
84151
+ function decodeLoadedProps(mod2, rawProps) {
84152
+ if (mod2.decode) {
84153
+ return mod2.decode(rawProps);
84154
+ }
84155
+ return rawProps;
84156
+ }
83917
84157
  function collectIslands(root, loaders) {
83918
84158
  const nodes = Array.from(root.querySelectorAll("[data-rb-island]"));
83919
84159
  return nodes.filter((el2) => el2.dataset.rbIslandMounted !== "true").filter((el2) => el2.dataset.rbIslandError !== "true").filter((el2) => el2.dataset.rbIslandEnhancing !== "true").map((element) => {
@@ -83937,8 +84177,9 @@ async function mountIsland(island, options) {
83937
84177
  element.dataset.rbIslandAttempts = String(attempt);
83938
84178
  element.dataset.rbIslandEnhancing = "true";
83939
84179
  try {
83940
- const props2 = parseIslandProps(kind, element, options);
84180
+ const rawProps = parseIslandProps(element);
83941
84181
  const mod2 = await loadEnhancer(kind, loaders);
84182
+ const props2 = decodeLoadedProps(mod2, rawProps);
83942
84183
  await mod2.enhance(element, props2);
83943
84184
  element.dataset.rbIslandMounted = "true";
83944
84185
  } catch (error) {
@@ -83993,6 +84234,7 @@ function hydrateBlocksIslands(options = {}) {
83993
84234
  }
83994
84235
 
83995
84236
  // src/rendering/islands/BlocksIslandsHydrator.tsx
84237
+ init_media3();
83996
84238
  var hasStartedGlobalHydration = false;
83997
84239
  var globalObserver = null;
83998
84240
  var globalQueued = false;
@@ -84337,7 +84579,7 @@ var SimpleCache = class {
84337
84579
  };
84338
84580
 
84339
84581
  // src/version.ts
84340
- var SDK_VERSION = "0.72.0";
84582
+ var SDK_VERSION = "0.74.0";
84341
84583
 
84342
84584
  // src/client/error.ts
84343
84585
  var RiverbankApiError = class _RiverbankApiError extends Error {