@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
@@ -7677,7 +7677,9 @@ function backgroundLayer(path24, options = {}) {
7677
7677
  imageClassName,
7678
7678
  overlayClassName = "background-overlay rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-pointer-events-none",
7679
7679
  fallbackToken,
7680
- omitImageLayer = false
7680
+ omitImageLayer = false,
7681
+ imageLoading,
7682
+ imageFetchPriority
7681
7683
  } = options;
7682
7684
  const styleLayer = el("div", {
7683
7685
  className: styleClassName,
@@ -7693,11 +7695,14 @@ function backgroundLayer(path24, options = {}) {
7693
7695
  }
7694
7696
  }
7695
7697
  });
7696
- const imageLayer = createBackgroundImageNode(path24, imageClassName);
7698
+ const imageLayer = createBackgroundImageNode(path24, imageClassName, {
7699
+ loading: imageLoading,
7700
+ fetchPriority: imageFetchPriority
7701
+ });
7697
7702
  const overlayLayer = createBackgroundOverlayNode(path24, overlayClassName);
7698
7703
  return omitImageLayer ? [styleLayer, overlayLayer] : [styleLayer, imageLayer, overlayLayer];
7699
7704
  }
7700
- function createBackgroundImageNode(path24, baseClassName = "rb-absolute rb-z-neg-10") {
7705
+ function createBackgroundImageNode(path24, baseClassName = "rb-absolute rb-z-neg-10", options = {}) {
7701
7706
  const imagePath = `${path24}.image`;
7702
7707
  return media(
7703
7708
  {
@@ -7718,7 +7723,9 @@ function createBackgroundImageNode(path24, baseClassName = "rb-absolute rb-z-neg
7718
7723
  transforms: [{ id: "background.resolveImageStyle" }]
7719
7724
  }
7720
7725
  },
7721
- videoPlayback: "background"
7726
+ videoPlayback: "background",
7727
+ ...options.loading ? { loading: options.loading } : {},
7728
+ ...options.fetchPriority ? { fetchPriority: options.fetchPriority } : {}
7722
7729
  },
7723
7730
  when(imagePath),
7724
7731
  bind(imagePath)
@@ -7952,12 +7959,16 @@ function styledSection(config2) {
7952
7959
  bindFrom = "_sectionStyles",
7953
7960
  imageClassName = "rb-absolute rb-z-neg-10",
7954
7961
  renderBackgroundImage = true,
7962
+ backgroundImageLoading,
7963
+ backgroundImageFetchPriority,
7955
7964
  fullWidthPath
7956
7965
  } = config2;
7957
7966
  const renderedBackgroundNodes = backgroundLayer(`${bindFrom}.background`, {
7958
7967
  imageClassName,
7959
7968
  fallbackToken: background,
7960
- omitImageLayer: !renderBackgroundImage
7969
+ omitImageLayer: !renderBackgroundImage,
7970
+ imageLoading: backgroundImageLoading,
7971
+ imageFetchPriority: backgroundImageFetchPriority
7961
7972
  });
7962
7973
  const childrenArray = Array.isArray(children) ? children : [children];
7963
7974
  return section(
@@ -8197,7 +8208,7 @@ function navRow(opts) {
8197
8208
  el(
8198
8209
  "div",
8199
8210
  {
8200
- className: "nav-dropdown-menu rb-absolute rb-left-0 rb-top-full rb-z-50 rb-hidden rb-min-w-12rem rb-overflow-hidden",
8211
+ className: "nav-dropdown-menu rb-absolute rb-left-0 rb-top-full rb-z-50 rb-hidden rb-overflow-hidden",
8201
8212
  id: dropdownMenuId
8202
8213
  },
8203
8214
  [dropdownLinks]
@@ -13893,6 +13904,202 @@ var init_shop_shared = __esm({
13893
13904
  });
13894
13905
  }
13895
13906
  });
13907
+ var eventDetailsManifest, occurrenceContextSchema2, eventAutoApplyDiscountPreviewBaseSchema, eventAutoApplyDiscountPreviewSchema, eventDetailsBlockDefinition;
13908
+ var init_event_details = __esm({
13909
+ "../blocks/src/system/blocks/event-details.ts"() {
13910
+ init_builder();
13911
+ init_builder();
13912
+ init_styledSection();
13913
+ init_fragments();
13914
+ init_shared3();
13915
+ init_shop_shared();
13916
+ init_defineBlock();
13917
+ eventDetailsManifest = createBlockManifest({
13918
+ id: "block.event-details",
13919
+ version: "1.0.0",
13920
+ title: "Event Details",
13921
+ titleSource: "heading",
13922
+ description: "Date/time, venue, map, and other dates for an event",
13923
+ category: "content",
13924
+ tags: ["events", "venue", "map", "schedule", "dates"],
13925
+ icon: "MapPin",
13926
+ styleTokens: { background: "surface", typography: "body", spacing: "md" },
13927
+ behaviours: {
13928
+ supportsThemeSwitching: true,
13929
+ inlineEditing: false,
13930
+ animation: false,
13931
+ paletteHidden: false
13932
+ },
13933
+ additionalFields: [
13934
+ {
13935
+ id: "heading",
13936
+ type: "text",
13937
+ label: "Heading",
13938
+ description: "Optional heading shown above event details",
13939
+ required: false,
13940
+ multiline: false,
13941
+ defaultValue: "Event details"
13942
+ },
13943
+ {
13944
+ id: "showVenue",
13945
+ type: "boolean",
13946
+ label: "Show venue",
13947
+ required: false,
13948
+ defaultValue: true,
13949
+ ui: { intent: "display" }
13950
+ },
13951
+ {
13952
+ id: "showMap",
13953
+ type: "boolean",
13954
+ label: "Show map",
13955
+ description: "Embed a map when the venue has coordinates",
13956
+ required: false,
13957
+ defaultValue: true,
13958
+ ui: { intent: "display" }
13959
+ },
13960
+ {
13961
+ id: "showOtherDates",
13962
+ type: "boolean",
13963
+ label: "Show other dates",
13964
+ required: false,
13965
+ defaultValue: true,
13966
+ ui: { intent: "display" }
13967
+ },
13968
+ {
13969
+ id: "otherDatesLimit",
13970
+ type: "select",
13971
+ label: "Other dates limit",
13972
+ required: false,
13973
+ multiple: false,
13974
+ defaultValue: "5",
13975
+ options: [
13976
+ { value: "3", label: "3 dates" },
13977
+ { value: "5", label: "5 dates" },
13978
+ { value: "10", label: "10 dates" }
13979
+ ],
13980
+ ui: { intent: "display" }
13981
+ },
13982
+ {
13983
+ id: "showCost",
13984
+ type: "boolean",
13985
+ label: "Show cost",
13986
+ description: "Display ticket price for paid events",
13987
+ required: false,
13988
+ defaultValue: true,
13989
+ ui: { intent: "display" }
13990
+ },
13991
+ {
13992
+ id: "showAcceptedPasses",
13993
+ type: "boolean",
13994
+ label: "Show accepted passes",
13995
+ description: "Display passes that can be used for this event",
13996
+ required: false,
13997
+ defaultValue: true,
13998
+ ui: { intent: "display" }
13999
+ },
14000
+ {
14001
+ id: "showAcceptedMemberships",
14002
+ type: "boolean",
14003
+ label: "Show accepted memberships",
14004
+ description: "Display memberships that grant access to this event",
14005
+ required: false,
14006
+ defaultValue: true,
14007
+ ui: { intent: "display" }
14008
+ }
14009
+ ],
14010
+ layout: [
14011
+ styledSection({
14012
+ baseClass: "",
14013
+ spacing: "spacious",
14014
+ children: sectionContainer(
14015
+ [
14016
+ text({ as: "h2" }, bind("content.heading"), when("content.heading")),
14017
+ el("event-details", {
14018
+ occurrenceContext: {
14019
+ $bind: { from: "$root.occurrenceContext", fallback: null }
14020
+ },
14021
+ contentEntry: { $bind: { from: "$root.contentEntry", fallback: null } },
14022
+ events: { $bind: { from: "data.eventDetailsData.events" } },
14023
+ showVenue: { $bind: { from: "content.showVenue" } },
14024
+ showMap: { $bind: { from: "content.showMap" } },
14025
+ showOtherDates: { $bind: { from: "content.showOtherDates" } },
14026
+ otherDatesLimit: {
14027
+ $bind: { from: "content.otherDatesLimit", fallback: "5" }
14028
+ },
14029
+ showCost: { $bind: { from: "content.showCost", fallback: true } },
14030
+ showAcceptedPasses: {
14031
+ $bind: { from: "content.showAcceptedPasses", fallback: true }
14032
+ },
14033
+ showAcceptedMemberships: {
14034
+ $bind: { from: "content.showAcceptedMemberships", fallback: true }
14035
+ },
14036
+ sitePasses: { $bind: { from: "data.eventDetailsData.sitePasses" } },
14037
+ siteMemberships: { $bind: { from: "data.eventDetailsData.siteMemberships" } },
14038
+ autoApplyDiscount: {
14039
+ $bind: { from: "data.eventDetailsData.autoApplyDiscount", fallback: null }
14040
+ }
14041
+ })
14042
+ ],
14043
+ { gap: "lg" }
14044
+ )
14045
+ })
14046
+ ]
14047
+ });
14048
+ occurrenceContextSchema2 = z.object({
14049
+ id: z.string(),
14050
+ seriesId: z.string(),
14051
+ startsAt: z.string(),
14052
+ endsAt: z.string(),
14053
+ timeZone: z.string(),
14054
+ capacityOverride: z.number().nullable().optional(),
14055
+ overrides: z.record(z.string(), z.unknown()).nullable().optional()
14056
+ }).nullable();
14057
+ eventAutoApplyDiscountPreviewBaseSchema = z.object({
14058
+ id: z.string(),
14059
+ publicLabel: z.string(),
14060
+ description: z.string().nullable(),
14061
+ minTicketsRequired: z.number().nullable()
14062
+ });
14063
+ eventAutoApplyDiscountPreviewSchema = z.discriminatedUnion("discountType", [
14064
+ eventAutoApplyDiscountPreviewBaseSchema.extend({
14065
+ discountType: z.literal("percent"),
14066
+ discountPercent: z.number(),
14067
+ discountAmountCents: z.null()
14068
+ }),
14069
+ eventAutoApplyDiscountPreviewBaseSchema.extend({
14070
+ discountType: z.literal("fixed"),
14071
+ discountPercent: z.null(),
14072
+ discountAmountCents: z.number()
14073
+ })
14074
+ ]);
14075
+ eventDetailsBlockDefinition = {
14076
+ manifest: eventDetailsManifest,
14077
+ dataSchemas: {
14078
+ eventDetailsData: z.object({
14079
+ events: publicEventsArraySchema,
14080
+ sitePasses: z.object({ passes: z.array(publicPassProductSchema) }),
14081
+ siteMemberships: z.object({ memberships: z.array(publicMembershipProductSchema) }),
14082
+ autoApplyDiscount: eventAutoApplyDiscountPreviewSchema.nullable().optional().default(null)
14083
+ }).optional(),
14084
+ occurrenceContext: occurrenceContextSchema2.optional()
14085
+ },
14086
+ dataLoaders: {
14087
+ eventDetailsData: {
14088
+ endpoint: "getPublicEventDetails",
14089
+ params: {
14090
+ siteId: { $bind: { from: "$root.siteId" } },
14091
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
14092
+ limit: "25",
14093
+ entryId: { $bind: { from: "$root.contentEntry._entryId" } },
14094
+ seriesId: { $bind: { from: "$root.occurrenceContext.seriesId" } },
14095
+ includeOccurrenceId: { $bind: { from: "$root.occurrenceContext.id" } }
14096
+ },
14097
+ mode: "server"
14098
+ }
14099
+ }
14100
+ };
14101
+ }
14102
+ });
13896
14103
 
13897
14104
  // ../blocks/src/system/runtime/nodes/events/shared/utils.ts
13898
14105
  function getContainerClass(layout, columns) {
@@ -17370,6 +17577,10 @@ var init_presets2 = __esm({
17370
17577
  "../theme-core/src/navigation/presets.ts"() {
17371
17578
  }
17372
17579
  });
17580
+ var init_navDropdownSizing = __esm({
17581
+ "../theme-core/src/header/navDropdownSizing.ts"() {
17582
+ }
17583
+ });
17373
17584
 
17374
17585
  // ../theme-core/src/header/generateHeaderCss.ts
17375
17586
  var init_generateHeaderCss = __esm({
@@ -17379,6 +17590,7 @@ var init_generateHeaderCss = __esm({
17379
17590
  init_presets2();
17380
17591
  init_shared();
17381
17592
  init_breakpoints();
17593
+ init_navDropdownSizing();
17382
17594
  }
17383
17595
  });
17384
17596
 
@@ -25199,6 +25411,10 @@ var heroCopyAndCta = composeFragments([
25199
25411
  { fragment: heroCopyFragment },
25200
25412
  { fragment: heroCtaRowFragment }
25201
25413
  ]);
25414
+ var heroPriorityMediaProps = {
25415
+ loading: "eager",
25416
+ fetchPriority: "high"
25417
+ };
25202
25418
  var heroContentNodes = heroCopyAndCta.layout;
25203
25419
  function heroContentCard(children, gap) {
25204
25420
  return styledContainer({
@@ -25261,7 +25477,8 @@ function heroSplitImagePane() {
25261
25477
  [
25262
25478
  media(
25263
25479
  {
25264
- className: "rb-absolute rb-inset-0 rb-h-full rb-w-full rb-object-cover"
25480
+ className: "rb-absolute rb-inset-0 rb-h-full rb-w-full rb-object-cover",
25481
+ ...heroPriorityMediaProps
25265
25482
  },
25266
25483
  when("_sectionStyles.background.image"),
25267
25484
  bind("_sectionStyles.background.image")
@@ -25272,13 +25489,17 @@ function heroSplitImagePane() {
25272
25489
  var classicLayout = styledSection({
25273
25490
  children: heroContainerStack(heroContentNodes, "md"),
25274
25491
  // styledContainer (rb-container) already provides horizontal padding
25275
- baseClass: ""
25492
+ baseClass: "",
25493
+ backgroundImageLoading: heroPriorityMediaProps.loading,
25494
+ backgroundImageFetchPriority: heroPriorityMediaProps.fetchPriority
25276
25495
  });
25277
25496
  var microLayout = styledSection({
25278
25497
  children: heroContainerStack(heroContentNodes, "sm"),
25279
25498
  // styledContainer (rb-container) already provides horizontal padding
25280
25499
  baseClass: "",
25281
- spacing: "compact"
25500
+ spacing: "compact",
25501
+ backgroundImageLoading: heroPriorityMediaProps.loading,
25502
+ backgroundImageFetchPriority: heroPriorityMediaProps.fetchPriority
25282
25503
  });
25283
25504
  function splitLayoutWith(children) {
25284
25505
  return styledSection({
@@ -28978,199 +29199,7 @@ var appointmentBookingBlockDefinition = {
28978
29199
  // ../blocks/src/system/blocks/index.ts
28979
29200
  init_event_registration();
28980
29201
  init_course_registration();
28981
-
28982
- // ../blocks/src/system/blocks/event-details.ts
28983
- init_builder();
28984
- init_builder();
28985
- init_styledSection();
28986
- init_fragments();
28987
- init_shared3();
28988
- init_shop_shared();
28989
- init_defineBlock();
28990
- var eventDetailsManifest = createBlockManifest({
28991
- id: "block.event-details",
28992
- version: "1.0.0",
28993
- title: "Event Details",
28994
- titleSource: "heading",
28995
- description: "Date/time, venue, map, and other dates for an event",
28996
- category: "content",
28997
- tags: ["events", "venue", "map", "schedule", "dates"],
28998
- icon: "MapPin",
28999
- styleTokens: { background: "surface", typography: "body", spacing: "md" },
29000
- behaviours: {
29001
- supportsThemeSwitching: true,
29002
- inlineEditing: false,
29003
- animation: false,
29004
- paletteHidden: false
29005
- },
29006
- additionalFields: [
29007
- {
29008
- id: "heading",
29009
- type: "text",
29010
- label: "Heading",
29011
- description: "Optional heading shown above event details",
29012
- required: false,
29013
- multiline: false,
29014
- defaultValue: "Event details"
29015
- },
29016
- {
29017
- id: "showVenue",
29018
- type: "boolean",
29019
- label: "Show venue",
29020
- required: false,
29021
- defaultValue: true,
29022
- ui: { intent: "display" }
29023
- },
29024
- {
29025
- id: "showMap",
29026
- type: "boolean",
29027
- label: "Show map",
29028
- description: "Embed a map when the venue has coordinates",
29029
- required: false,
29030
- defaultValue: true,
29031
- ui: { intent: "display" }
29032
- },
29033
- {
29034
- id: "showOtherDates",
29035
- type: "boolean",
29036
- label: "Show other dates",
29037
- required: false,
29038
- defaultValue: true,
29039
- ui: { intent: "display" }
29040
- },
29041
- {
29042
- id: "otherDatesLimit",
29043
- type: "select",
29044
- label: "Other dates limit",
29045
- required: false,
29046
- multiple: false,
29047
- defaultValue: "5",
29048
- options: [
29049
- { value: "3", label: "3 dates" },
29050
- { value: "5", label: "5 dates" },
29051
- { value: "10", label: "10 dates" }
29052
- ],
29053
- ui: { intent: "display" }
29054
- },
29055
- {
29056
- id: "showCost",
29057
- type: "boolean",
29058
- label: "Show cost",
29059
- description: "Display ticket price for paid events",
29060
- required: false,
29061
- defaultValue: true,
29062
- ui: { intent: "display" }
29063
- },
29064
- {
29065
- id: "showAcceptedPasses",
29066
- type: "boolean",
29067
- label: "Show accepted passes",
29068
- description: "Display passes that can be used for this event",
29069
- required: false,
29070
- defaultValue: true,
29071
- ui: { intent: "display" }
29072
- },
29073
- {
29074
- id: "showAcceptedMemberships",
29075
- type: "boolean",
29076
- label: "Show accepted memberships",
29077
- description: "Display memberships that grant access to this event",
29078
- required: false,
29079
- defaultValue: true,
29080
- ui: { intent: "display" }
29081
- }
29082
- ],
29083
- layout: [
29084
- styledSection({
29085
- baseClass: "",
29086
- spacing: "spacious",
29087
- children: sectionContainer(
29088
- [
29089
- text({ as: "h2" }, bind("content.heading"), when("content.heading")),
29090
- el("event-details", {
29091
- occurrenceContext: {
29092
- $bind: { from: "$root.occurrenceContext", fallback: null }
29093
- },
29094
- contentEntry: { $bind: { from: "$root.contentEntry", fallback: null } },
29095
- events: { $bind: { from: "data.eventDetailsData.events" } },
29096
- showVenue: { $bind: { from: "content.showVenue" } },
29097
- showMap: { $bind: { from: "content.showMap" } },
29098
- showOtherDates: { $bind: { from: "content.showOtherDates" } },
29099
- otherDatesLimit: {
29100
- $bind: { from: "content.otherDatesLimit", fallback: "5" }
29101
- },
29102
- showCost: { $bind: { from: "content.showCost", fallback: true } },
29103
- showAcceptedPasses: {
29104
- $bind: { from: "content.showAcceptedPasses", fallback: true }
29105
- },
29106
- showAcceptedMemberships: {
29107
- $bind: { from: "content.showAcceptedMemberships", fallback: true }
29108
- },
29109
- sitePasses: { $bind: { from: "data.eventDetailsData.sitePasses" } },
29110
- siteMemberships: { $bind: { from: "data.eventDetailsData.siteMemberships" } },
29111
- autoApplyDiscount: {
29112
- $bind: { from: "data.eventDetailsData.autoApplyDiscount", fallback: null }
29113
- }
29114
- })
29115
- ],
29116
- { gap: "lg" }
29117
- )
29118
- })
29119
- ]
29120
- });
29121
- var occurrenceContextSchema2 = z.object({
29122
- id: z.string(),
29123
- seriesId: z.string(),
29124
- startsAt: z.string(),
29125
- endsAt: z.string(),
29126
- timeZone: z.string(),
29127
- capacityOverride: z.number().nullable().optional(),
29128
- overrides: z.record(z.string(), z.unknown()).nullable().optional()
29129
- }).nullable();
29130
- var eventAutoApplyDiscountPreviewBaseSchema = z.object({
29131
- id: z.string(),
29132
- publicLabel: z.string(),
29133
- description: z.string().nullable(),
29134
- minTicketsRequired: z.number().nullable()
29135
- });
29136
- var eventAutoApplyDiscountPreviewSchema = z.discriminatedUnion("discountType", [
29137
- eventAutoApplyDiscountPreviewBaseSchema.extend({
29138
- discountType: z.literal("percent"),
29139
- discountPercent: z.number(),
29140
- discountAmountCents: z.null()
29141
- }),
29142
- eventAutoApplyDiscountPreviewBaseSchema.extend({
29143
- discountType: z.literal("fixed"),
29144
- discountPercent: z.null(),
29145
- discountAmountCents: z.number()
29146
- })
29147
- ]);
29148
- var eventDetailsBlockDefinition = {
29149
- manifest: eventDetailsManifest,
29150
- dataSchemas: {
29151
- eventDetailsData: z.object({
29152
- events: publicEventsArraySchema,
29153
- sitePasses: z.object({ passes: z.array(publicPassProductSchema) }),
29154
- siteMemberships: z.object({ memberships: z.array(publicMembershipProductSchema) }),
29155
- autoApplyDiscount: eventAutoApplyDiscountPreviewSchema.nullable().optional().default(null)
29156
- }).optional(),
29157
- occurrenceContext: occurrenceContextSchema2.optional()
29158
- },
29159
- dataLoaders: {
29160
- eventDetailsData: {
29161
- endpoint: "getPublicEventDetails",
29162
- params: {
29163
- siteId: { $bind: { from: "$root.siteId" } },
29164
- stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
29165
- limit: "25",
29166
- entryId: { $bind: { from: "$root.contentEntry._entryId" } },
29167
- seriesId: { $bind: { from: "$root.occurrenceContext.seriesId" } },
29168
- includeOccurrenceId: { $bind: { from: "$root.occurrenceContext.id" } }
29169
- },
29170
- mode: "server"
29171
- }
29172
- }
29173
- };
29202
+ init_event_details();
29174
29203
 
29175
29204
  // ../blocks/src/system/blocks/course-details.ts
29176
29205
  init_builder();
@@ -31498,6 +31527,7 @@ var locationMapBlockDefinition = {
31498
31527
  // ../blocks/src/system/blocks/index.ts
31499
31528
  init_form();
31500
31529
  init_event_registration();
31530
+ init_event_details();
31501
31531
  init_course_registration();
31502
31532
  init_shop();
31503
31533
  init_product_list();
@@ -54836,7 +54866,7 @@ var SimpleCache = class {
54836
54866
  };
54837
54867
 
54838
54868
  // src/version.ts
54839
- var SDK_VERSION = "0.72.0";
54869
+ var SDK_VERSION = "0.74.0";
54840
54870
 
54841
54871
  // src/client/error.ts
54842
54872
  var RiverbankApiError = class _RiverbankApiError extends Error {
@@ -0,0 +1,120 @@
1
+ import { defineIslandPropsDecoder } from './chunk-6VGXRE34.mjs';
2
+ import './chunk-PMAIXMAB.mjs';
3
+
4
+ // src/rendering/islands/enhancers/accordion.ts
5
+ var decode = defineIslandPropsDecoder("accordion");
6
+ function parseDefaultValues(value) {
7
+ if (!value) return [];
8
+ return value.split(",").map((v) => v.trim()).filter(Boolean);
9
+ }
10
+ function getItemValue(item, index) {
11
+ return item.getAttribute("data-accordion-value") ?? String(index);
12
+ }
13
+ function normalizeType(domValue, propsValue) {
14
+ if (propsValue === "multiple") return "multiple";
15
+ if (propsValue === "single") return "single";
16
+ return domValue === "multiple" ? "multiple" : "single";
17
+ }
18
+ function normalizeCollapsible(propsValue) {
19
+ if (propsValue === false) return false;
20
+ return true;
21
+ }
22
+ function normalizeDefaultValues(domValue, propsValue) {
23
+ if (Array.isArray(propsValue)) return propsValue.map(String).filter(Boolean);
24
+ if (typeof propsValue === "string" && propsValue.trim()) return [propsValue.trim()];
25
+ return parseDefaultValues(domValue);
26
+ }
27
+ var enhance = (root, props) => {
28
+ if (root.dataset.rbAccordionEnhanced === "true") return;
29
+ root.dataset.rbAccordionEnhanced = "true";
30
+ const type = normalizeType(root.getAttribute("data-accordion-type"), props?.type);
31
+ const collapsible = type === "single" ? normalizeCollapsible(props?.collapsible) : true;
32
+ const defaultValues = new Set(
33
+ normalizeDefaultValues(root.getAttribute("data-default-value"), props?.defaultValue)
34
+ );
35
+ const items = Array.from(root.querySelectorAll(".accordion-item"));
36
+ const cleanups = [];
37
+ const closeAnimations = /* @__PURE__ */ new WeakMap();
38
+ const setMeasuredContentHeight = (content) => {
39
+ content.style.setProperty("--radix-accordion-content-height", `${content.scrollHeight}px`);
40
+ };
41
+ const setOpen = (item, open, options) => {
42
+ const trigger = item.querySelector(".accordion-trigger");
43
+ const content = item.querySelector(".accordion-content");
44
+ if (!trigger || !content) return;
45
+ const cancelPendingClose = closeAnimations.get(content);
46
+ if (cancelPendingClose) {
47
+ cancelPendingClose();
48
+ closeAnimations.delete(content);
49
+ }
50
+ if (open && content.hidden) content.hidden = false;
51
+ setMeasuredContentHeight(content);
52
+ item.dataset.state = open ? "open" : "closed";
53
+ content.dataset.state = open ? "open" : "closed";
54
+ if (!content.dataset.animation) content.dataset.animation = "accordion";
55
+ trigger.setAttribute("role", "button");
56
+ trigger.tabIndex = 0;
57
+ trigger.setAttribute("aria-expanded", open ? "true" : "false");
58
+ if (open) {
59
+ content.hidden = false;
60
+ content.setAttribute("aria-hidden", "false");
61
+ content.removeAttribute("inert");
62
+ return;
63
+ }
64
+ content.setAttribute("aria-hidden", "true");
65
+ content.setAttribute("inert", "");
66
+ const onAnimationEnd = () => {
67
+ if (content.dataset.state !== "closed") return;
68
+ content.hidden = true;
69
+ closeAnimations.delete(content);
70
+ };
71
+ if (options?.immediateClose) {
72
+ content.hidden = true;
73
+ return;
74
+ }
75
+ content.addEventListener("animationend", onAnimationEnd, { once: true });
76
+ closeAnimations.set(content, () => {
77
+ content.removeEventListener("animationend", onAnimationEnd);
78
+ });
79
+ };
80
+ const closeAllExcept = (keep) => {
81
+ items.forEach((item) => {
82
+ if (keep && item === keep) return;
83
+ setOpen(item, false);
84
+ });
85
+ };
86
+ items.forEach((item, index) => {
87
+ const value = getItemValue(item, index);
88
+ const initiallyOpen = defaultValues.has(value);
89
+ setOpen(item, initiallyOpen, initiallyOpen ? void 0 : { immediateClose: true });
90
+ const trigger = item.querySelector(".accordion-trigger");
91
+ if (!trigger) return;
92
+ const toggle = () => {
93
+ const expanded = trigger.getAttribute("aria-expanded") === "true";
94
+ const nextOpen = !expanded;
95
+ if (type === "single" && expanded && !collapsible) return;
96
+ if (type === "single" && nextOpen) closeAllExcept(item);
97
+ setOpen(item, nextOpen);
98
+ };
99
+ const onClick = (event) => {
100
+ event.preventDefault();
101
+ toggle();
102
+ };
103
+ const onKeyDown = (event) => {
104
+ if (event.key !== "Enter" && event.key !== " ") return;
105
+ event.preventDefault();
106
+ toggle();
107
+ };
108
+ trigger.addEventListener("click", onClick);
109
+ trigger.addEventListener("keydown", onKeyDown);
110
+ cleanups.push(() => {
111
+ trigger.removeEventListener("click", onClick);
112
+ trigger.removeEventListener("keydown", onKeyDown);
113
+ });
114
+ });
115
+ return () => {
116
+ cleanups.forEach((fn) => fn());
117
+ };
118
+ };
119
+
120
+ export { decode, enhance };