@riverbankcms/sdk 0.60.16 → 0.62.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +41 -1
  2. package/dist/_dts/api/src/bookingRecords.d.ts +100 -3
  3. package/dist/_dts/api/src/bookings.d.ts +2 -1
  4. package/dist/_dts/api/src/endpoints.d.ts +96 -0
  5. package/dist/_dts/api/src/index.d.ts +5 -1
  6. package/dist/_dts/api/src/participantMessaging.d.ts +113 -0
  7. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +51 -47
  8. package/dist/_dts/api/src/types.d.ts +1 -0
  9. package/dist/_dts/blocks/src/index.d.ts +66 -62
  10. package/dist/_dts/blocks/src/lib/media.d.ts +60 -0
  11. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +2 -2
  12. package/dist/_dts/blocks/src/system/blocks/audio-player.d.ts +2 -2
  13. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +2 -2
  14. package/dist/_dts/blocks/src/system/blocks/blog-post.d.ts +0 -21
  15. package/dist/_dts/blocks/src/system/blocks/body-text.d.ts +2 -6
  16. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +2 -2
  17. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +2 -2
  18. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +0 -10
  19. package/dist/_dts/blocks/src/system/blocks/columns.d.ts +0 -10
  20. package/dist/_dts/blocks/src/system/blocks/course-details.d.ts +0 -20
  21. package/dist/_dts/blocks/src/system/blocks/course-registration.d.ts +0 -20
  22. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +15 -15
  23. package/dist/_dts/blocks/src/system/blocks/cta-full.d.ts +5 -10
  24. package/dist/_dts/blocks/src/system/blocks/embed.d.ts +0 -11
  25. package/dist/_dts/blocks/src/system/blocks/event-details.d.ts +0 -20
  26. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +0 -20
  27. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +43 -27
  28. package/dist/_dts/blocks/src/system/blocks/events/event-listing.d.ts +24 -15
  29. package/dist/_dts/blocks/src/system/blocks/events/event-spotlight.d.ts +2 -2
  30. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +132 -12
  31. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +3 -2
  32. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +2 -10
  33. package/dist/_dts/blocks/src/system/blocks/file-download.d.ts +2 -2
  34. package/dist/_dts/blocks/src/system/blocks/form.d.ts +2 -24
  35. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +2 -2
  36. package/dist/_dts/blocks/src/system/blocks/hero.d.ts +2 -3
  37. package/dist/_dts/blocks/src/system/blocks/image-gallery.d.ts +2 -2
  38. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +0 -13
  39. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +17 -17
  40. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +2 -10
  41. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +2 -2
  42. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +2 -2
  43. package/dist/_dts/blocks/src/system/blocks/shared/bookingPaymentTerms.d.ts +9 -9
  44. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +2 -2
  45. package/dist/_dts/blocks/src/system/blocks/single-button.d.ts +16 -15
  46. package/dist/_dts/blocks/src/system/blocks/site-footer.d.ts +2 -6
  47. package/dist/_dts/blocks/src/system/blocks/site-header.d.ts +0 -11
  48. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +3 -3
  49. package/dist/_dts/blocks/src/system/blocks/testimonials.d.ts +2 -2
  50. package/dist/_dts/blocks/src/system/blocks/video-grid.d.ts +2 -2
  51. package/dist/_dts/blocks/src/system/constants/events.d.ts +18 -0
  52. package/dist/_dts/blocks/src/system/customize/facets.d.ts +105 -0
  53. package/dist/_dts/blocks/src/system/defineBlock.d.ts +29 -5
  54. package/dist/_dts/blocks/src/system/fields/boxStyles.d.ts +2 -1
  55. package/dist/_dts/blocks/src/system/fragments/library/blogFeaturedPost.d.ts +0 -24
  56. package/dist/_dts/blocks/src/system/fragments/library/bodyCopy.d.ts +0 -4
  57. package/dist/_dts/blocks/src/system/fragments/library/bookingForm.d.ts +0 -4
  58. package/dist/_dts/blocks/src/system/fragments/library/card.d.ts +0 -6
  59. package/dist/_dts/blocks/src/system/fragments/library/columnContent.d.ts +0 -6
  60. package/dist/_dts/blocks/src/system/fragments/library/ctaCopy.d.ts +0 -4
  61. package/dist/_dts/blocks/src/system/fragments/library/ctaRow.d.ts +0 -4
  62. package/dist/_dts/blocks/src/system/fragments/library/faqAccordion.d.ts +0 -4
  63. package/dist/_dts/blocks/src/system/fragments/library/faqHeading.d.ts +0 -4
  64. package/dist/_dts/blocks/src/system/fragments/library/feedbackCallout.d.ts +0 -6
  65. package/dist/_dts/blocks/src/system/fragments/library/footerBottomText.d.ts +0 -4
  66. package/dist/_dts/blocks/src/system/fragments/library/formCopy.d.ts +0 -4
  67. package/dist/_dts/blocks/src/system/fragments/library/formEmbed.d.ts +0 -18
  68. package/dist/_dts/blocks/src/system/fragments/library/headerCta.d.ts +0 -4
  69. package/dist/_dts/blocks/src/system/fragments/library/heading.d.ts +0 -6
  70. package/dist/_dts/blocks/src/system/fragments/library/heroCopy.d.ts +0 -4
  71. package/dist/_dts/blocks/src/system/fragments/library/heroCtaRow.d.ts +0 -4
  72. package/dist/_dts/blocks/src/system/fragments/library/heroLayoutControls.d.ts +0 -4
  73. package/dist/_dts/blocks/src/system/fragments/library/image.d.ts +0 -6
  74. package/dist/_dts/blocks/src/system/fragments/library/newsletterCopy.d.ts +0 -4
  75. package/dist/_dts/blocks/src/system/fragments/library/newsletterForm.d.ts +0 -4
  76. package/dist/_dts/blocks/src/system/fragments/library/quote.d.ts +0 -6
  77. package/dist/_dts/blocks/src/system/fragments/library/richText.d.ts +0 -6
  78. package/dist/_dts/blocks/src/system/fragments/library/sectionState.d.ts +0 -6
  79. package/dist/_dts/blocks/src/system/fragments/library/singleButton.d.ts +0 -4
  80. package/dist/_dts/blocks/src/system/fragments/library/spinner.d.ts +0 -5
  81. package/dist/_dts/blocks/src/system/fragments/library/teamMember.d.ts +0 -6
  82. package/dist/_dts/blocks/src/system/fragments/library/testimonialsCarousel.d.ts +0 -31
  83. package/dist/_dts/blocks/src/system/fragments/library/testimonialsHeading.d.ts +0 -4
  84. package/dist/_dts/blocks/src/system/fragments/library/videoEmbed.d.ts +0 -6
  85. package/dist/_dts/blocks/src/system/fragments/types.d.ts +11 -3
  86. package/dist/_dts/blocks/src/system/helpers/resolveBackground.d.ts +4 -0
  87. package/dist/_dts/blocks/src/system/index.d.ts +1 -0
  88. package/dist/_dts/blocks/src/system/manifest/derivedContent.d.ts +3 -3
  89. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +10 -10
  90. package/dist/_dts/blocks/src/system/media/constrainedVideoMedia.d.ts +13 -0
  91. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +6 -0
  92. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +3 -0
  93. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.interactive.d.ts +4 -0
  94. package/dist/_dts/blocks/src/system/runtime/nodes/media.d.ts +1 -0
  95. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +7 -0
  96. package/dist/_dts/content-model/src/contentManifest.d.ts +2 -2
  97. package/dist/_dts/content-model/src/referenceFields.d.ts +7 -1
  98. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +34 -6
  99. package/dist/_dts/editor-blocks/src/media/MediaField.d.ts +2 -0
  100. package/dist/_dts/editor-blocks/src/widgets/entry-picker/EntryPickerWidgetProvider.d.ts +3 -2
  101. package/dist/_dts/editor-blocks/src/widgets/entry-picker/loaders.d.ts +2 -1
  102. package/dist/_dts/editor-blocks/src/widgets/entry-picker/types.d.ts +2 -1
  103. package/dist/_dts/editor-blocks/src/widgets/link/LinkPicker.d.ts +2 -1
  104. package/dist/_dts/editor-blocks/src/widgets/link/LinkWidget.d.ts +2 -1
  105. package/dist/_dts/editor-blocks/src/widgets/link/LinkWidgetContext.d.ts +2 -1
  106. package/dist/_dts/editor-blocks/src/widgets/link/loaders.d.ts +2 -1
  107. package/dist/_dts/editor-blocks/src/widgets/link/types.d.ts +3 -2
  108. package/dist/_dts/editor-blocks/src/widgets/reference/dynamicAdapters.d.ts +9 -0
  109. package/dist/_dts/editor-blocks/src/widgets/reference/loaders.d.ts +5 -1
  110. package/dist/_dts/media-core/src/index.d.ts +1 -0
  111. package/dist/_dts/media-core/src/videoSlotPolicy.d.ts +38 -0
  112. package/dist/_dts/media-editor/src/MediaEditor.d.ts +3 -1
  113. package/dist/_dts/media-editor/src/MediaPickerDialog.d.ts +7 -0
  114. package/dist/_dts/preview-next/src/client/blocks/customizeFacetControls.d.ts +9 -0
  115. package/dist/_dts/preview-next/src/client/blocks/previewCustomizeActions.d.ts +14 -0
  116. package/dist/_dts/preview-next/src/client/layout/PreviewLayoutContext.d.ts +9 -7
  117. package/dist/_dts/preview-next/src/client/preview/previewCustomizeHistory.d.ts +6 -3
  118. package/dist/_dts/preview-next/src/client/widgets/widgetAdapters.d.ts +1 -1
  119. package/dist/_dts/sdk/src/contracts/content.d.ts +10 -0
  120. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +1 -1
  121. package/dist/_dts/sdk/src/manifest/prompt/examples/features-grid.d.ts +1 -1
  122. package/dist/_dts/sdk/src/manifest/prompt/examples/pricing.d.ts +5 -5
  123. package/dist/_dts/sdk/src/rendering/helpers/bindings.d.ts +1 -0
  124. package/dist/_dts/sdk/src/version.d.ts +1 -1
  125. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  126. package/dist/_dts/theme-core/src/index.d.ts +1 -0
  127. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +3 -0
  128. package/dist/_dts/theme-core/src/schema.d.ts +25 -0
  129. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +515 -0
  130. package/dist/_dts/theme-core/src/site-styles/appearancePresetResolution.d.ts +12 -0
  131. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +119 -0
  132. package/dist/_dts/theme-core/src/site-styles/appearancePresets.d.ts +5 -563
  133. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +448 -0
  134. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +6 -0
  135. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +12 -0
  136. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +2 -0
  137. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +8 -0
  138. package/dist/_dts/theme-core/src/site-styles/siteChromeAppearancePresets.d.ts +67 -0
  139. package/dist/_dts/theme-core/src/site-styles/sourceCatalogs.d.ts +6 -6
  140. package/dist/_dts/theme-core/src/site-styles/types.d.ts +22 -3
  141. package/dist/_dts/theme-core/src/siteChrome.d.ts +11 -0
  142. package/dist/cli/index.mjs +4310 -3464
  143. package/dist/client/bookings.mjs +310 -310
  144. package/dist/client/client.mjs +61329 -60359
  145. package/dist/client/hooks.mjs +1254 -731
  146. package/dist/client/rendering/client.mjs +5959 -5226
  147. package/dist/client/rendering/islands.mjs +3842 -3275
  148. package/dist/client/rendering.mjs +7495 -6519
  149. package/dist/preview-next/before-render.mjs +118 -0
  150. package/dist/preview-next/client/runtime.mjs +4489 -2773
  151. package/dist/preview-next/middleware.mjs +136 -0
  152. package/dist/server/components.mjs +1342 -765
  153. package/dist/server/config-validation.mjs +1256 -733
  154. package/dist/server/config.mjs +1256 -733
  155. package/dist/server/data.mjs +1254 -731
  156. package/dist/server/index.mjs +191 -18
  157. package/dist/server/next.mjs +1339 -760
  158. package/dist/server/page-converter.mjs +1088 -734
  159. package/dist/server/prebuild.mjs +1 -1
  160. package/dist/server/rendering/server.mjs +1338 -762
  161. package/dist/server/rendering.mjs +1351 -770
  162. package/dist/server/routing.mjs +1340 -754
  163. package/dist/server/server.mjs +1260 -734
  164. package/dist/server/theme-bridge.mjs +198 -34
  165. package/dist/server/theme.mjs +6 -0
  166. package/dist/styles/index.css +28 -9
  167. package/package.json +1 -1
@@ -1016,6 +1016,14 @@ var init_endpoints = __esm({
1016
1016
  auth: "user",
1017
1017
  responseKind: "json"
1018
1018
  },
1019
+ exportAppointmentServicesCsv: {
1020
+ path: "/sites/{siteId}/bookings/services/export.csv",
1021
+ method: "GET",
1022
+ tags: ["site-{siteId}", "bookings", "appointment-services-{siteId}"],
1023
+ errors: [],
1024
+ auth: "user",
1025
+ responseKind: "blob"
1026
+ },
1019
1027
  createAppointmentService: {
1020
1028
  path: "/sites/{siteId}/bookings/services",
1021
1029
  method: "POST",
@@ -1284,6 +1292,14 @@ var init_endpoints = __esm({
1284
1292
  auth: "user",
1285
1293
  responseKind: "json"
1286
1294
  },
1295
+ exportCoursesCsv: {
1296
+ path: "/sites/{siteId}/bookings/courses/export.csv",
1297
+ method: "GET",
1298
+ tags: ["site-{siteId}", "bookings", "courses-{siteId}"],
1299
+ errors: [],
1300
+ auth: "user",
1301
+ responseKind: "blob"
1302
+ },
1287
1303
  createCourse: {
1288
1304
  path: "/sites/{siteId}/bookings/courses",
1289
1305
  method: "POST",
@@ -1383,6 +1399,14 @@ var init_endpoints = __esm({
1383
1399
  responseKind: "json",
1384
1400
  errors: []
1385
1401
  },
1402
+ exportCourseWaitlistCsv: {
1403
+ path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist/export.csv",
1404
+ method: "GET",
1405
+ tags: ["site-{siteId}", "bookings", "courses-{courseId}"],
1406
+ auth: "user",
1407
+ responseKind: "blob",
1408
+ errors: []
1409
+ },
1386
1410
  updateCourseEnrollment: {
1387
1411
  path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}",
1388
1412
  method: "PATCH",
@@ -3978,6 +4002,14 @@ var init_endpoints = __esm({
3978
4002
  auth: "user",
3979
4003
  responseKind: "json"
3980
4004
  },
4005
+ exportEventSeriesCsv: {
4006
+ path: "/sites/{siteId}/bookings/event-series/export.csv",
4007
+ method: "GET",
4008
+ tags: ["site-{siteId}", "bookings", "event-series-{siteId}"],
4009
+ errors: [],
4010
+ auth: "user",
4011
+ responseKind: "blob"
4012
+ },
3981
4013
  createEventSeries: {
3982
4014
  path: "/sites/{siteId}/bookings/event-series",
3983
4015
  method: "POST",
@@ -4046,6 +4078,60 @@ var init_endpoints = __esm({
4046
4078
  errors: [],
4047
4079
  responseKind: "blob"
4048
4080
  },
4081
+ getParticipantMessageRecipients: {
4082
+ path: "/sites/{siteId}/bookings/participant-messaging/recipients",
4083
+ method: "POST",
4084
+ tags: ["site-{siteId}"],
4085
+ auth: "user",
4086
+ errors: [
4087
+ "validation:invalid_input",
4088
+ "auth:forbidden",
4089
+ "resource:not_found",
4090
+ "server:internal_error"
4091
+ ],
4092
+ responseKind: "json"
4093
+ },
4094
+ sendParticipantMessage: {
4095
+ path: "/sites/{siteId}/bookings/participant-messaging/send",
4096
+ method: "POST",
4097
+ tags: ["site-{siteId}"],
4098
+ auth: "user",
4099
+ errors: [
4100
+ "validation:invalid_input",
4101
+ "auth:forbidden",
4102
+ "resource:not_found",
4103
+ "resource:conflict",
4104
+ "server:internal_error"
4105
+ ],
4106
+ responseKind: "json"
4107
+ },
4108
+ testParticipantMessage: {
4109
+ path: "/sites/{siteId}/bookings/participant-messaging/test",
4110
+ method: "POST",
4111
+ tags: ["site-{siteId}"],
4112
+ auth: "user",
4113
+ errors: [
4114
+ "validation:invalid_input",
4115
+ "auth:forbidden",
4116
+ "resource:not_found",
4117
+ "resource:conflict",
4118
+ "server:internal_error"
4119
+ ],
4120
+ responseKind: "json"
4121
+ },
4122
+ listParticipantMessageHistory: {
4123
+ path: "/sites/{siteId}/bookings/participant-messaging/history",
4124
+ method: "POST",
4125
+ tags: ["site-{siteId}"],
4126
+ auth: "user",
4127
+ errors: [
4128
+ "validation:invalid_input",
4129
+ "auth:forbidden",
4130
+ "resource:not_found",
4131
+ "server:internal_error"
4132
+ ],
4133
+ responseKind: "json"
4134
+ },
4049
4135
  listEventSeriesWaitlist: {
4050
4136
  path: "/sites/{siteId}/bookings/event-series/{seriesId}/waitlist",
4051
4137
  method: "GET",
@@ -4054,6 +4140,14 @@ var init_endpoints = __esm({
4054
4140
  responseKind: "json",
4055
4141
  errors: []
4056
4142
  },
4143
+ exportEventSeriesWaitlistCsv: {
4144
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/waitlist/export.csv",
4145
+ method: "GET",
4146
+ tags: ["site-{siteId}", "bookings", "event-series-{seriesId}"],
4147
+ auth: "user",
4148
+ responseKind: "blob",
4149
+ errors: []
4150
+ },
4057
4151
  addEventOccurrenceAttendee: {
4058
4152
  path: "/sites/{siteId}/bookings/event-series/{seriesId}/occurrences/{occurrenceId}/attendees",
4059
4153
  method: "POST",
@@ -4770,6 +4864,14 @@ var init_endpoints = __esm({
4770
4864
  auth: "user",
4771
4865
  responseKind: "json"
4772
4866
  },
4867
+ exportSiteCustomerPassesCsv: {
4868
+ path: "/sites/{siteId}/bookings/customer-passes/export.csv",
4869
+ method: "GET",
4870
+ tags: ["site-{siteId}", "bookings", "customer-passes-{siteId}"],
4871
+ auth: "user",
4872
+ responseKind: "blob",
4873
+ errors: []
4874
+ },
4773
4875
  listSiteCustomerMemberships: {
4774
4876
  path: "/sites/{siteId}/bookings/customer-memberships",
4775
4877
  method: "GET",
@@ -4833,6 +4935,22 @@ var init_endpoints = __esm({
4833
4935
  auth: "user",
4834
4936
  responseKind: "blob"
4835
4937
  },
4938
+ exportBookingLedgerCsv: {
4939
+ path: "/sites/{siteId}/bookings/ledger/export.csv",
4940
+ method: "GET",
4941
+ tags: ["site-{siteId}", "bookings", "booking-ledger-{siteId}"],
4942
+ errors: [],
4943
+ auth: "user",
4944
+ responseKind: "blob"
4945
+ },
4946
+ exportBookingQuestionAnswersCsv: {
4947
+ path: "/sites/{siteId}/bookings/intake-answers/export.csv",
4948
+ method: "GET",
4949
+ tags: ["site-{siteId}", "bookings", "intake-answers-{siteId}"],
4950
+ errors: [],
4951
+ auth: "user",
4952
+ responseKind: "blob"
4953
+ },
4836
4954
  // Site logs
4837
4955
  listSiteActivityLogs: {
4838
4956
  path: "/sites/{siteId}/logs/activity",
@@ -6399,6 +6517,13 @@ var init_videoPrep = __esm({
6399
6517
  }
6400
6518
  });
6401
6519
 
6520
+ // ../media-core/src/videoSlotPolicy.ts
6521
+ var init_videoSlotPolicy = __esm({
6522
+ "../media-core/src/videoSlotPolicy.ts"() {
6523
+ "use strict";
6524
+ }
6525
+ });
6526
+
6402
6527
  // ../media-core/src/identifiers.ts
6403
6528
  var init_identifiers = __esm({
6404
6529
  "../media-core/src/identifiers.ts"() {
@@ -6558,6 +6683,7 @@ var init_src2 = __esm({
6558
6683
  init_fileAssetCompatibility();
6559
6684
  init_fileMimeDetection();
6560
6685
  init_videoPrep();
6686
+ init_videoSlotPolicy();
6561
6687
  init_identifiers();
6562
6688
  init_aspectTransforms();
6563
6689
  init_rotation();
@@ -6862,31 +6988,35 @@ function expectParsedSelectField(field) {
6862
6988
  return field;
6863
6989
  }
6864
6990
  function createSiteOptionSelectField(input) {
6865
- return expectParsedSelectField(parseFieldDefinition({
6866
- ...input,
6867
- type: "select",
6868
- options: [],
6869
- multiple: input.multiple ?? false,
6870
- source: { kind: "site", optionSource: input.optionSource },
6871
- ui: {
6872
- ...input.ui ?? {},
6873
- widget: "siteOptionPicker",
6874
- siteOptionSource: input.optionSource
6875
- }
6876
- }));
6991
+ return expectParsedSelectField(
6992
+ parseFieldDefinition({
6993
+ ...input,
6994
+ type: "select",
6995
+ options: [],
6996
+ multiple: input.multiple ?? false,
6997
+ source: { kind: "site", optionSource: input.optionSource },
6998
+ ui: {
6999
+ ...input.ui ?? {},
7000
+ widget: "siteOptionPicker",
7001
+ siteOptionSource: input.optionSource
7002
+ }
7003
+ })
7004
+ );
6877
7005
  }
6878
7006
  function createSdkSelectField(input) {
6879
- return expectParsedSelectField(parseFieldDefinition({
6880
- ...input,
6881
- type: "select",
6882
- options: input.options,
6883
- multiple: input.multiple ?? false,
6884
- source: { kind: "sdk" },
6885
- ui: {
6886
- ...input.ui ?? {},
6887
- widget: "sdkSelect"
6888
- }
6889
- }));
7007
+ return expectParsedSelectField(
7008
+ parseFieldDefinition({
7009
+ ...input,
7010
+ type: "select",
7011
+ options: input.options,
7012
+ multiple: input.multiple ?? false,
7013
+ source: { kind: "sdk" },
7014
+ ui: {
7015
+ ...input.ui ?? {},
7016
+ widget: "sdkSelect"
7017
+ }
7018
+ })
7019
+ );
6890
7020
  }
6891
7021
  var visibilityLevels, siteOptionSources, mediaDeliverySchema, selectOptionSchema, selectSourceSchema, uiSchema, baseFieldSchema, textFieldSchema, richTextFieldSchema, mediaFieldSchema, booleanFieldSchema, dateFieldSchema, timeFieldSchema, dateTimeFieldSchema, slugFieldSchema, urlFieldSchema, linkFieldSchema, selectFieldSchema, referenceFieldSchema, itemTypeSchema, repeaterFieldSchema, groupFieldSchema, modalFieldSchema, numberFieldSchema, tabDefinitionSchema, tabGroupFieldSchema, presetOptionSchema, presetOrCustomFieldSchema, contentTypeSelectFieldSchema, entryPickerFieldSchema, _fieldSchemaInternal, fieldSchema, slotSchema, typographyTokens, colorTokens, spacingTokens, radiusTokens, styleTokenSchema, behaviourSchema, blockCategoryEnum, manifestSchema;
6892
7022
  var init_schema2 = __esm({
@@ -6896,7 +7026,11 @@ var init_schema2 = __esm({
6896
7026
  init_node();
6897
7027
  init_repeaterGrid();
6898
7028
  visibilityLevels = ["admin", "designer", "author"];
6899
- siteOptionSources = ["eventCategories", "venues", "staffMembers"];
7029
+ siteOptionSources = [
7030
+ "eventCategories",
7031
+ "venues",
7032
+ "staffMembers"
7033
+ ];
6900
7034
  mediaDeliverySchema = z3.object({
6901
7035
  sizes: z3.string().optional(),
6902
7036
  widthCandidates: z3.array(z3.number().int().positive()).optional(),
@@ -6931,7 +7065,10 @@ var init_schema2 = __esm({
6931
7065
  hidden: z3.boolean().optional(),
6932
7066
  hideLabel: z3.boolean().optional(),
6933
7067
  hideDescription: z3.boolean().optional(),
6934
- showCharCount: z3.union([z3.number().int().positive(), z3.object({ max: z3.number().int().positive() })]).optional(),
7068
+ showCharCount: z3.union([
7069
+ z3.number().int().positive(),
7070
+ z3.object({ max: z3.number().int().positive() })
7071
+ ]).optional(),
6935
7072
  showSlugPreview: z3.boolean().optional(),
6936
7073
  variant: z3.enum(["full", "inline", "limited", "media", "notes"]).optional(),
6937
7074
  richTextVariant: z3.enum(["full", "inline", "limited", "media", "notes"]).optional(),
@@ -6941,10 +7078,7 @@ var init_schema2 = __esm({
6941
7078
  showMediaPreview: z3.boolean().optional(),
6942
7079
  showMediaOverlayActions: z3.boolean().optional(),
6943
7080
  mediaDelivery: mediaDeliverySchema.optional(),
6944
- mediaDeliveryByVariant: z3.record(
6945
- z3.string(),
6946
- mediaDeliverySchema
6947
- ).optional(),
7081
+ mediaDeliveryByVariant: z3.record(z3.string(), mediaDeliverySchema).optional(),
6948
7082
  // Optional input hints for validators/widgets
6949
7083
  inputType: z3.enum(["text", "email", "tel", "number"]).optional(),
6950
7084
  min: z3.number().optional(),
@@ -7052,7 +7186,9 @@ var init_schema2 = __esm({
7052
7186
  });
7053
7187
  mediaFieldSchema = baseFieldSchema.extend({
7054
7188
  type: z3.literal("media"),
7055
- mediaKinds: z3.array(z3.enum(["image", "video", "audio", "document", "spreadsheet", "archive"])).default(["image"]),
7189
+ mediaKinds: z3.array(
7190
+ z3.enum(["image", "video", "audio", "document", "spreadsheet", "archive"])
7191
+ ).default(["image"]),
7056
7192
  aspectRatio: z3.string().optional()
7057
7193
  });
7058
7194
  booleanFieldSchema = baseFieldSchema.extend({
@@ -7174,7 +7310,9 @@ var init_schema2 = __esm({
7174
7310
  itemTypeSchema = z3.object({
7175
7311
  label: z3.string().min(1),
7176
7312
  icon: z3.string().optional(),
7177
- fields: z3.lazy(() => getFieldSchemaInternal().array().min(1, "Item type requires at least one field"))
7313
+ fields: z3.lazy(
7314
+ () => getFieldSchemaInternal().array().min(1, "Item type requires at least one field")
7315
+ )
7178
7316
  });
7179
7317
  repeaterFieldSchema = baseFieldSchema.extend({
7180
7318
  type: z3.literal("repeater"),
@@ -7184,7 +7322,9 @@ var init_schema2 = __esm({
7184
7322
  maxItems: z3.number().int().positive().optional(),
7185
7323
  // Monomorphic mode
7186
7324
  schema: z3.object({
7187
- fields: z3.lazy(() => getFieldSchemaInternal().array().min(1, "Repeater requires at least one field"))
7325
+ fields: z3.lazy(
7326
+ () => getFieldSchemaInternal().array().min(1, "Repeater requires at least one field")
7327
+ )
7188
7328
  }).optional(),
7189
7329
  // Polymorphic mode
7190
7330
  polymorphic: z3.boolean().optional(),
@@ -7230,13 +7370,19 @@ var init_schema2 = __esm({
7230
7370
  const itemTypes = Object.values(
7231
7371
  data.itemTypes
7232
7372
  );
7233
- return itemTypes.every((itemType) => Array.isArray(itemType.fields) && requiredFieldIds.every((requiredId) => itemType.fields?.some((field) => field.id === requiredId)));
7373
+ return itemTypes.every(
7374
+ (itemType) => Array.isArray(itemType.fields) && requiredFieldIds.every(
7375
+ (requiredId) => itemType.fields?.some((field) => field.id === requiredId)
7376
+ )
7377
+ );
7234
7378
  }
7235
7379
  const schemaFields = data.schema?.fields;
7236
7380
  if (!schemaFields) {
7237
7381
  return true;
7238
7382
  }
7239
- return requiredFieldIds.every((requiredId) => schemaFields.some((field) => field.id === requiredId));
7383
+ return requiredFieldIds.every(
7384
+ (requiredId) => schemaFields.some((field) => field.id === requiredId)
7385
+ );
7240
7386
  },
7241
7387
  {
7242
7388
  message: `layoutGrid repeaters require span/row/column fields (defaults: '${DEFAULT_REPEATER_GRID_SPAN_FIELD_ID}', '${DEFAULT_REPEATER_GRID_ROW_FIELD_ID}', '${DEFAULT_REPEATER_GRID_COLUMN_FIELD_ID}') to exist in repeater item fields`,
@@ -7264,7 +7410,9 @@ var init_schema2 = __esm({
7264
7410
  if (!schemaFields) {
7265
7411
  return true;
7266
7412
  }
7267
- const field = schemaFields.find((candidate) => candidate.id === labelField);
7413
+ const field = schemaFields.find(
7414
+ (candidate) => candidate.id === labelField
7415
+ );
7268
7416
  return field?.type === "text";
7269
7417
  },
7270
7418
  {
@@ -7275,13 +7423,17 @@ var init_schema2 = __esm({
7275
7423
  groupFieldSchema = baseFieldSchema.extend({
7276
7424
  type: z3.literal("group"),
7277
7425
  schema: z3.object({
7278
- fields: z3.lazy(() => getFieldSchemaInternal().array().min(1, "Group requires at least one field"))
7426
+ fields: z3.lazy(
7427
+ () => getFieldSchemaInternal().array().min(1, "Group requires at least one field")
7428
+ )
7279
7429
  })
7280
7430
  });
7281
7431
  modalFieldSchema = baseFieldSchema.extend({
7282
7432
  type: z3.literal("modal"),
7283
7433
  schema: z3.object({
7284
- fields: z3.lazy(() => getFieldSchemaInternal().array().min(1, "Modal requires at least one field"))
7434
+ fields: z3.lazy(
7435
+ () => getFieldSchemaInternal().array().min(1, "Modal requires at least one field")
7436
+ )
7285
7437
  })
7286
7438
  });
7287
7439
  numberFieldSchema = baseFieldSchema.extend({
@@ -7356,8 +7508,20 @@ var init_schema2 = __esm({
7356
7508
  help: z3.string().optional(),
7357
7509
  visibleRoles: z3.array(z3.enum(visibilityLevels)).optional()
7358
7510
  });
7359
- typographyTokens = ["display", "heading", "subheading", "body", "caption"];
7360
- colorTokens = ["background", "surface", "foreground", "accent", "muted"];
7511
+ typographyTokens = [
7512
+ "display",
7513
+ "heading",
7514
+ "subheading",
7515
+ "body",
7516
+ "caption"
7517
+ ];
7518
+ colorTokens = [
7519
+ "background",
7520
+ "surface",
7521
+ "foreground",
7522
+ "accent",
7523
+ "muted"
7524
+ ];
7361
7525
  spacingTokens = ["none", "xs", "sm", "md", "lg", "xl"];
7362
7526
  radiusTokens = ["none", "sm", "md", "lg", "full"];
7363
7527
  styleTokenSchema = z3.object({
@@ -7377,7 +7541,14 @@ var init_schema2 = __esm({
7377
7541
  // Block manages its own wrapper (for sticky/fixed positioning)
7378
7542
  managesOwnWrapper: z3.boolean().optional()
7379
7543
  });
7380
- blockCategoryEnum = z3.enum(["marketing", "content", "blog", "media", "layout", "interactive"]);
7544
+ blockCategoryEnum = z3.enum([
7545
+ "marketing",
7546
+ "content",
7547
+ "blog",
7548
+ "media",
7549
+ "layout",
7550
+ "interactive"
7551
+ ]);
7381
7552
  manifestSchema = z3.object({
7382
7553
  name: z3.string().min(1),
7383
7554
  version: z3.string().min(1),
@@ -8110,12 +8281,33 @@ var init_appointmentSetup = __esm({
8110
8281
  }
8111
8282
  });
8112
8283
 
8284
+ // ../api/src/bookingRecords.ts
8285
+ var BOOKING_QUESTION_ANSWER_EXPORT_SCOPES, BOOKING_QUESTION_ANSWER_EXPORT_SCOPE_VALUES;
8286
+ var init_bookingRecords = __esm({
8287
+ "../api/src/bookingRecords.ts"() {
8288
+ "use strict";
8289
+ BOOKING_QUESTION_ANSWER_EXPORT_SCOPES = {
8290
+ site: "site",
8291
+ appointments: "appointments",
8292
+ eventSeries: "event_series",
8293
+ course: "course"
8294
+ };
8295
+ BOOKING_QUESTION_ANSWER_EXPORT_SCOPE_VALUES = [
8296
+ BOOKING_QUESTION_ANSWER_EXPORT_SCOPES.site,
8297
+ BOOKING_QUESTION_ANSWER_EXPORT_SCOPES.appointments,
8298
+ BOOKING_QUESTION_ANSWER_EXPORT_SCOPES.eventSeries,
8299
+ BOOKING_QUESTION_ANSWER_EXPORT_SCOPES.course
8300
+ ];
8301
+ }
8302
+ });
8303
+
8113
8304
  // ../api/src/bookings.ts
8114
8305
  var init_bookings = __esm({
8115
8306
  "../api/src/bookings.ts"() {
8116
8307
  "use strict";
8117
8308
  init_envelope();
8118
8309
  init_error_propagation();
8310
+ init_bookingRecords();
8119
8311
  }
8120
8312
  });
8121
8313
 
@@ -8718,6 +8910,29 @@ var init_manifest = __esm({
8718
8910
  }
8719
8911
  });
8720
8912
 
8913
+ // ../theme-core/src/site-styles/appearancePresetResolution.ts
8914
+ function assertValidOptionGroups(preset2) {
8915
+ preset2.optionGroups?.forEach((group) => {
8916
+ const selectedOption = group.options.find(
8917
+ (option) => option.id === group.selectedOptionId
8918
+ );
8919
+ if (!selectedOption) {
8920
+ throw new Error(
8921
+ `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
8922
+ );
8923
+ }
8924
+ });
8925
+ }
8926
+ function defineBlockAppearancePreset(preset2) {
8927
+ assertValidOptionGroups(preset2);
8928
+ return preset2;
8929
+ }
8930
+ var init_appearancePresetResolution = __esm({
8931
+ "../theme-core/src/site-styles/appearancePresetResolution.ts"() {
8932
+ "use strict";
8933
+ }
8934
+ });
8935
+
8721
8936
  // ../theme-core/src/site-styles/types.ts
8722
8937
  function asDesignBlockId(value) {
8723
8938
  return brandNonEmptyString(value, "DesignBlockId");
@@ -8804,16 +9019,22 @@ function defineBlockDesignCapability(capability) {
8804
9019
  imageSurfaceTreatments: capability.imageSurfaceTreatments ?? ["none"],
8805
9020
  imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
8806
9021
  testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"],
9022
+ tileTreatments: capability.tileTreatments ?? ["default"],
8807
9023
  eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"]
8808
9024
  };
8809
9025
  }
8810
- var plainFrame, eyebrowTreatmentValues;
9026
+ var plainFrame, tileTreatmentValues, eyebrowTreatmentValues;
8811
9027
  var init_types3 = __esm({
8812
9028
  "../theme-core/src/site-styles/types.ts"() {
8813
9029
  "use strict";
8814
9030
  plainFrame = {
8815
9031
  kind: "plain"
8816
9032
  };
9033
+ tileTreatmentValues = [
9034
+ "default",
9035
+ "quiet",
9036
+ "brand-depth"
9037
+ ];
8817
9038
  eyebrowTreatmentValues = [
8818
9039
  "plain",
8819
9040
  "pill",
@@ -8824,32 +9045,14 @@ var init_types3 = __esm({
8824
9045
  }
8825
9046
  });
8826
9047
 
8827
- // ../theme-core/src/site-styles/appearancePresets.ts
8828
- function assertValidOptionGroups(preset2) {
8829
- preset2.optionGroups?.forEach((group) => {
8830
- const selectedOption = group.options.find(
8831
- (option) => option.id === group.selectedOptionId
8832
- );
8833
- if (!selectedOption) {
8834
- throw new Error(
8835
- `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
8836
- );
8837
- }
8838
- });
8839
- }
8840
- function defineBlockAppearancePreset(preset2) {
8841
- assertValidOptionGroups(preset2);
8842
- return preset2;
8843
- }
8844
- function defineSiteChromeAppearancePreset(preset2) {
8845
- return preset2;
8846
- }
8847
- var appearancePresets;
8848
- var init_appearancePresets = __esm({
8849
- "../theme-core/src/site-styles/appearancePresets.ts"() {
9048
+ // ../theme-core/src/site-styles/blockAppearancePresets.ts
9049
+ var blockAppearancePresets;
9050
+ var init_blockAppearancePresets = __esm({
9051
+ "../theme-core/src/site-styles/blockAppearancePresets.ts"() {
8850
9052
  "use strict";
9053
+ init_appearancePresetResolution();
8851
9054
  init_types3();
8852
- appearancePresets = [
9055
+ blockAppearancePresets = [
8853
9056
  defineBlockAppearancePreset({
8854
9057
  kind: "block-design",
8855
9058
  id: "hero-immersive-image",
@@ -8975,6 +9178,24 @@ var init_appearancePresets = __esm({
8975
9178
  eyebrowTreatment: "accent-pill-bounce"
8976
9179
  }
8977
9180
  }),
9181
+ defineBlockAppearancePreset({
9182
+ kind: "block-design",
9183
+ id: "hero-brand-depth-expressive",
9184
+ target: "hero",
9185
+ label: "Expressive brand-depth hero",
9186
+ blockKinds: ["block.hero"],
9187
+ constraints: {
9188
+ layoutFamilies: ["centered", "compact"]
9189
+ },
9190
+ design: {
9191
+ sectionSurface: "brand-depth-band",
9192
+ contentFrame: plainFrame,
9193
+ itemSurface: "none",
9194
+ transitionAfter: "soft-fade-short",
9195
+ emphasis: "high",
9196
+ eyebrowTreatment: "accent-pill-bounce"
9197
+ }
9198
+ }),
8978
9199
  defineBlockAppearancePreset({
8979
9200
  kind: "block-design",
8980
9201
  id: "hero-contained-intro",
@@ -9003,6 +9224,20 @@ var init_appearancePresets = __esm({
9003
9224
  emphasis: "high"
9004
9225
  }
9005
9226
  }),
9227
+ defineBlockAppearancePreset({
9228
+ kind: "block-design",
9229
+ id: "body-text-brand-depth-intro",
9230
+ target: "body-text",
9231
+ label: "Brand-depth intro copy",
9232
+ blockKinds: ["block.body-text"],
9233
+ design: {
9234
+ sectionSurface: "brand-depth-band",
9235
+ contentFrame: plainFrame,
9236
+ itemSurface: "none",
9237
+ transitionAfter: "soft-fade-short",
9238
+ emphasis: "high"
9239
+ }
9240
+ }),
9006
9241
  defineBlockAppearancePreset({
9007
9242
  kind: "block-design",
9008
9243
  id: "offerings-calm-list",
@@ -9045,6 +9280,21 @@ var init_appearancePresets = __esm({
9045
9280
  emphasis: "medium"
9046
9281
  }
9047
9282
  }),
9283
+ defineBlockAppearancePreset({
9284
+ kind: "block-design",
9285
+ id: "schedule-details-brand-depth",
9286
+ target: "events",
9287
+ label: "Brand-depth schedule details",
9288
+ blockKinds: ["block.event-details", "block.course-details"],
9289
+ design: {
9290
+ sectionSurface: "brand-depth-band",
9291
+ contentFrame: plainFrame,
9292
+ itemSurface: "none",
9293
+ transitionAfter: "none",
9294
+ emphasis: "medium",
9295
+ tileTreatment: "brand-depth"
9296
+ }
9297
+ }),
9048
9298
  defineBlockAppearancePreset({
9049
9299
  kind: "block-design",
9050
9300
  id: "media-text-flush-feature",
@@ -9130,6 +9380,20 @@ var init_appearancePresets = __esm({
9130
9380
  testimonialCardTreatment: "accent-quote"
9131
9381
  }
9132
9382
  }),
9383
+ defineBlockAppearancePreset({
9384
+ kind: "block-design",
9385
+ id: "faq-base-accordion",
9386
+ target: "faq",
9387
+ label: "Base accordion FAQ",
9388
+ blockKinds: ["block.faq"],
9389
+ design: {
9390
+ sectionSurface: "base",
9391
+ contentFrame: plainFrame,
9392
+ itemSurface: "default",
9393
+ transitionAfter: "none",
9394
+ emphasis: "medium"
9395
+ }
9396
+ }),
9133
9397
  defineBlockAppearancePreset({
9134
9398
  kind: "block-design",
9135
9399
  id: "faq-contained-help",
@@ -9172,6 +9436,20 @@ var init_appearancePresets = __esm({
9172
9436
  emphasis: "high"
9173
9437
  }
9174
9438
  }),
9439
+ defineBlockAppearancePreset({
9440
+ kind: "block-design",
9441
+ id: "contact-form-brand-depth-card",
9442
+ target: "contact-form",
9443
+ label: "Brand-depth form card",
9444
+ blockKinds: ["block.form"],
9445
+ design: {
9446
+ sectionSurface: "brand-depth-band",
9447
+ contentFrame: panelFrame("raised"),
9448
+ itemSurface: "none",
9449
+ transitionAfter: "none",
9450
+ emphasis: "high"
9451
+ }
9452
+ }),
9175
9453
  defineBlockAppearancePreset({
9176
9454
  kind: "block-design",
9177
9455
  id: "cta-accent-band",
@@ -9185,7 +9463,20 @@ var init_appearancePresets = __esm({
9185
9463
  transitionAfter: "none",
9186
9464
  emphasis: "high"
9187
9465
  }
9188
- }),
9466
+ })
9467
+ ];
9468
+ }
9469
+ });
9470
+
9471
+ // ../theme-core/src/site-styles/siteChromeAppearancePresets.ts
9472
+ function defineSiteChromeAppearancePreset(preset2) {
9473
+ return preset2;
9474
+ }
9475
+ var siteChromeAppearancePresets;
9476
+ var init_siteChromeAppearancePresets = __esm({
9477
+ "../theme-core/src/site-styles/siteChromeAppearancePresets.ts"() {
9478
+ "use strict";
9479
+ siteChromeAppearancePresets = [
9189
9480
  defineSiteChromeAppearancePreset({
9190
9481
  kind: "site-chrome",
9191
9482
  id: "header-clean-base",
@@ -9255,12 +9546,45 @@ var init_appearancePresets = __esm({
9255
9546
  }
9256
9547
  });
9257
9548
 
9258
- // ../theme-core/src/site-styles/blockFlow.ts
9259
- function defineBlockDesignMetadata(input) {
9260
- const layoutProfiles = (input.layoutProfiles ?? []).map((profile) => ({
9261
- ...profile,
9262
- variantKey: asLayoutVariantKey(profile.variantKey)
9263
- }));
9549
+ // ../theme-core/src/site-styles/appearancePresetCatalog.ts
9550
+ var appearancePresets;
9551
+ var init_appearancePresetCatalog = __esm({
9552
+ "../theme-core/src/site-styles/appearancePresetCatalog.ts"() {
9553
+ "use strict";
9554
+ init_blockAppearancePresets();
9555
+ init_siteChromeAppearancePresets();
9556
+ appearancePresets = [
9557
+ ...blockAppearancePresets,
9558
+ ...siteChromeAppearancePresets
9559
+ ];
9560
+ }
9561
+ });
9562
+
9563
+ // ../theme-core/src/site-styles/appearancePresetTypes.ts
9564
+ var init_appearancePresetTypes = __esm({
9565
+ "../theme-core/src/site-styles/appearancePresetTypes.ts"() {
9566
+ "use strict";
9567
+ }
9568
+ });
9569
+
9570
+ // ../theme-core/src/site-styles/appearancePresets.ts
9571
+ var init_appearancePresets = __esm({
9572
+ "../theme-core/src/site-styles/appearancePresets.ts"() {
9573
+ "use strict";
9574
+ init_appearancePresetCatalog();
9575
+ init_appearancePresetResolution();
9576
+ init_appearancePresetTypes();
9577
+ init_blockAppearancePresets();
9578
+ init_siteChromeAppearancePresets();
9579
+ }
9580
+ });
9581
+
9582
+ // ../theme-core/src/site-styles/blockFlow.ts
9583
+ function defineBlockDesignMetadata(input) {
9584
+ const layoutProfiles = (input.layoutProfiles ?? []).map((profile) => ({
9585
+ ...profile,
9586
+ variantKey: asLayoutVariantKey(profile.variantKey)
9587
+ }));
9264
9588
  assertUniqueLayoutProfileKeys(layoutProfiles);
9265
9589
  return {
9266
9590
  flow: input.flow,
@@ -11161,6 +11485,7 @@ var init_schema3 = __esm({
11161
11485
  background: boxBackgroundSchema.nullable().optional(),
11162
11486
  spacing: semanticSpacingSchema.nullable().optional(),
11163
11487
  minHeight: z24.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
11488
+ tileTreatment: z24.enum(tileTreatmentValues).nullable().optional(),
11164
11489
  eyebrowTreatment: z24.enum(eyebrowTreatmentValues).nullable().optional()
11165
11490
  });
11166
11491
  containerStylesOverrideSchema = z24.object({
@@ -12016,7 +12341,7 @@ var init_sourceCatalogs = __esm({
12016
12341
  ];
12017
12342
  generatedDesignOptionCatalog = {
12018
12343
  source: "generated",
12019
- sectionSurfaces: ["base", "muted-band", "accent-band", "hero-image"],
12344
+ sectionSurfaces: ["base", "muted-band", "accent-band", "brand-depth-band", "hero-image"],
12020
12345
  contentFrames: generatedContentFrames,
12021
12346
  itemSurfaces: ["none", "default", "flat", "outlined", "raised"],
12022
12347
  transitions: ["none", "soft-fade-short", "soft-fade-long"],
@@ -12093,7 +12418,7 @@ function buttonChoice(id, note) {
12093
12418
  function paletteChoice(id, note) {
12094
12419
  return note ? { id: asPaletteVariantId(id), note } : { id: asPaletteVariantId(id) };
12095
12420
  }
12096
- var curatedSiteStyleIdValues, quietBudget, balancedBudget, expressiveBudget, generatedContentFrameKinds, curatedSiteStyles, curatedSiteStylesById;
12421
+ var curatedSiteStyleIdValues, quietBudget, balancedBudget, expressiveBudget, expressiveUnderlineInputs, generatedContentFrameKinds, curatedSiteStyles, curatedSiteStylesById;
12097
12422
  var init_curatedSiteStyles = __esm({
12098
12423
  "../theme-core/src/site-styles/curatedSiteStyles.ts"() {
12099
12424
  "use strict";
@@ -12137,6 +12462,43 @@ var init_curatedSiteStyles = __esm({
12137
12462
  mediaDensity: "high",
12138
12463
  decorativeRepetition: "medium"
12139
12464
  };
12465
+ expressiveUnderlineInputs = {
12466
+ base: {
12467
+ background: { type: "transparent" },
12468
+ textColorToken: "text",
12469
+ border: {
12470
+ widthClass: "border-2",
12471
+ colorToken: "border",
12472
+ style: "underline"
12473
+ },
12474
+ corners: "square",
12475
+ shadow: null,
12476
+ spacing: "compact",
12477
+ fontSize: "base"
12478
+ },
12479
+ label: {
12480
+ textColorToken: "primary",
12481
+ fontWeight: "black",
12482
+ fontSize: "xs",
12483
+ textTransform: "uppercase",
12484
+ letterSpacing: "widest",
12485
+ opacity: 1
12486
+ },
12487
+ focus: {
12488
+ ringColorToken: "secondary",
12489
+ ringWidth: "0",
12490
+ borderColorToken: "secondary"
12491
+ },
12492
+ error: {
12493
+ borderColorToken: "destructive",
12494
+ textColorToken: "destructive"
12495
+ },
12496
+ disabled: {
12497
+ backgroundColorToken: "surface",
12498
+ textColorToken: "text",
12499
+ opacity: 0.6
12500
+ }
12501
+ };
12140
12502
  generatedContentFrameKinds = uniqueContentFrameKinds();
12141
12503
  curatedSiteStyles = [
12142
12504
  defineCuratedSiteStyle({
@@ -12447,15 +12809,17 @@ var init_curatedSiteStyles = __esm({
12447
12809
  paragraphSize: "editorial",
12448
12810
  headingSize: "editorial"
12449
12811
  }
12450
- }
12812
+ },
12813
+ inputs: expressiveUnderlineInputs
12451
12814
  },
12452
12815
  recommendedAppearancePresetIds: [
12453
12816
  "site-header-brand-solid-inverted-cta",
12454
12817
  "site-footer-brand-two-band",
12455
12818
  "hero-brand-scrim-fixed-frame",
12456
12819
  "body-text-editorial-intro",
12820
+ "schedule-details-brand-depth",
12457
12821
  "testimonials-accent-quote-proof",
12458
- "contact-form-dark-card"
12822
+ "contact-form-brand-depth-card"
12459
12823
  ],
12460
12824
  buttonPersonalityChoices: [
12461
12825
  buttonChoice("showtime-pill"),
@@ -12591,7 +12955,7 @@ function uniqueNonEmpty(values) {
12591
12955
  }
12592
12956
  return [firstValue, ...uniqueValues.slice(1)];
12593
12957
  }
12594
- var themeV2DesignStateSchemaVersion, designResolutionPolicySchema, runtimeStyleFieldNameSchema, nonEmptyRuntimeStyleFieldNamesSchema, heroLegibilityStrategySchema, sectionHeightIntentSchema, imageSurfaceTreatmentIntensitySchema, imageSurfaceMotionSchema, imageSurfaceTreatmentSchema, testimonialCardTreatmentSchema, eyebrowTreatmentSchema, userPanelTreatments, userFlushTreatments, userFlushBleeds, contentFrameIntentSchema, blockDesignPlanSchema, styleAuthoritySchema, blockRuntimeStyleAuthoritySchema, persistedPageDesignStateV1Schema;
12958
+ var themeV2DesignStateSchemaVersion, designResolutionPolicySchema, runtimeStyleFieldNameSchema, nonEmptyRuntimeStyleFieldNamesSchema, heroLegibilityStrategySchema, sectionHeightIntentSchema, imageSurfaceTreatmentIntensitySchema, imageSurfaceMotionSchema, imageSurfaceTreatmentSchema, testimonialCardTreatmentSchema, tileTreatmentSchema, eyebrowTreatmentSchema, userPanelTreatments, userFlushTreatments, userFlushBleeds, contentFrameIntentSchema, blockDesignPlanSchema, styleAuthoritySchema, blockRuntimeStyleAuthoritySchema, persistedPageDesignStateV1Schema;
12595
12959
  var init_designState = __esm({
12596
12960
  "../theme-core/src/site-styles/designState.ts"() {
12597
12961
  "use strict";
@@ -12646,6 +13010,7 @@ var init_designState = __esm({
12646
13010
  }).strict()
12647
13011
  ]);
12648
13012
  testimonialCardTreatmentSchema = z26.enum(["default", "accent-quote"]);
13013
+ tileTreatmentSchema = z26.enum(tileTreatmentValues);
12649
13014
  eyebrowTreatmentSchema = z26.enum(eyebrowTreatmentValues);
12650
13015
  userPanelTreatments = uniqueNonEmpty(
12651
13016
  userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
@@ -12682,6 +13047,7 @@ var init_designState = __esm({
12682
13047
  imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
12683
13048
  imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
12684
13049
  testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
13050
+ tileTreatment: tileTreatmentSchema.optional(),
12685
13051
  eyebrowTreatment: eyebrowTreatmentSchema.optional()
12686
13052
  }).strict();
12687
13053
  styleAuthoritySchema = z26.discriminatedUnion("kind", [
@@ -12757,6 +13123,14 @@ var init_runtimeCompiler = __esm({
12757
13123
  headingColor: "primaryForeground"
12758
13124
  }
12759
13125
  },
13126
+ "brand-depth-band": {
13127
+ background: {
13128
+ type: "color",
13129
+ color: "primary-800",
13130
+ textColor: "primaryForeground",
13131
+ headingColor: "primaryForeground"
13132
+ }
13133
+ },
12760
13134
  "hero-image": {
12761
13135
  background: {
12762
13136
  type: "image",
@@ -14914,6 +15288,9 @@ var init_core3 = __esm({
14914
15288
  });
14915
15289
 
14916
15290
  // ../blocks/src/system/transforms/registry/_utils/colorResolution.ts
15291
+ function isLiteralCssColorValue(value) {
15292
+ return CSS_HEX_COLOR_PATTERN.test(value) || CSS_COLOR_FUNCTION_PATTERN.test(value) || value.startsWith("var(") || CSS_COLOR_KEYWORDS.has(value);
15293
+ }
14917
15294
  function resolveBackgroundColorValue(tokenOrCssValue, context) {
14918
15295
  const trimmed = tokenOrCssValue.trim();
14919
15296
  if (!trimmed) return "";
@@ -14930,15 +15307,31 @@ function resolveBackgroundColorValue(tokenOrCssValue, context) {
14930
15307
  return rgbColorValue(trimmed);
14931
15308
  }
14932
15309
  }
14933
- if (trimmed === "transparent") {
14934
- return "transparent";
15310
+ if (isLiteralCssColorValue(trimmed)) {
15311
+ return trimmed;
15312
+ }
15313
+ if (THEME_COLOR_TOKEN_PATTERN.test(trimmed)) {
15314
+ return rgbColorValue(trimmed);
14935
15315
  }
14936
15316
  return trimmed;
14937
15317
  }
15318
+ var CSS_COLOR_FUNCTION_PATTERN, CSS_HEX_COLOR_PATTERN, THEME_COLOR_TOKEN_PATTERN, CSS_COLOR_KEYWORDS;
14938
15319
  var init_colorResolution = __esm({
14939
15320
  "../blocks/src/system/transforms/registry/_utils/colorResolution.ts"() {
14940
15321
  "use strict";
14941
15322
  init_colorStyles();
15323
+ CSS_COLOR_FUNCTION_PATTERN = /^(?:rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\(/i;
15324
+ CSS_HEX_COLOR_PATTERN = /^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;
15325
+ THEME_COLOR_TOKEN_PATTERN = /^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*(?:\/(?:100|[1-9]?\d|0))?$/;
15326
+ CSS_COLOR_KEYWORDS = /* @__PURE__ */ new Set([
15327
+ "transparent",
15328
+ "currentColor",
15329
+ "inherit",
15330
+ "initial",
15331
+ "revert",
15332
+ "revert-layer",
15333
+ "unset"
15334
+ ]);
14942
15335
  }
14943
15336
  });
14944
15337
 
@@ -15040,12 +15433,16 @@ function hasFixedFrameBackgroundMotion(value) {
15040
15433
  const background = asPartialObject(input?.background);
15041
15434
  return background?.motion === "fixed-frame";
15042
15435
  }
15043
- var spacingTransform, raisedTransform, roundedTransform, boxStylesCompositeTransform, boxStylesBorderColorTransform, fixedFrameScopeClass, sectionClassNameTransform, containerStylesResolveClassName, containerStylesResolveBoxClassName, sectionTextColorStyleTransform, sectionHeadingColorStyleTransform, sectionColorsStyleTransform, GAP_CLASS_MAP, GAP_VALUE_MAP, semanticGapTransform, semanticGapValueTransform, boxStylesTransforms;
15436
+ function isTileTreatment(value) {
15437
+ return typeof value === "string" && tileTreatmentSet.has(value);
15438
+ }
15439
+ var spacingTransform, raisedTransform, roundedTransform, boxStylesCompositeTransform, boxStylesBorderColorTransform, fixedFrameScopeClass, tileTreatmentClassMap, tileTreatmentSet, sectionClassNameTransform, containerStylesResolveClassName, containerStylesResolveBoxClassName, sectionTextColorStyleTransform, sectionHeadingColorStyleTransform, sectionColorsStyleTransform, GAP_CLASS_MAP, GAP_VALUE_MAP, semanticGapTransform, semanticGapValueTransform, boxStylesTransforms;
15044
15440
  var init_boxStyles2 = __esm({
15045
15441
  "../blocks/src/system/transforms/registry/boxStyles.ts"() {
15046
15442
  "use strict";
15047
15443
  init_core3();
15048
15444
  init_spacing();
15445
+ init_site_styles();
15049
15446
  init_colorStyles();
15050
15447
  init_colorResolution();
15051
15448
  init_blockColorTokens();
@@ -15208,6 +15605,12 @@ var init_boxStyles2 = __esm({
15208
15605
  }
15209
15606
  };
15210
15607
  fixedFrameScopeClass = "rb-bg-motion-fixed-frame-scope";
15608
+ tileTreatmentClassMap = {
15609
+ default: "",
15610
+ quiet: "rb-tile-treatment-quiet",
15611
+ "brand-depth": "rb-tile-treatment-brand-depth"
15612
+ };
15613
+ tileTreatmentSet = new Set(tileTreatmentValues);
15211
15614
  sectionClassNameTransform = {
15212
15615
  id: "sectionStyles.resolveClassName",
15213
15616
  kind: "string",
@@ -15264,6 +15667,17 @@ var init_boxStyles2 = __esm({
15264
15667
  classes.push(minHeightClass);
15265
15668
  }
15266
15669
  }
15670
+ const tileTreatment = input?.tileTreatment;
15671
+ if (isTileTreatment(tileTreatment)) {
15672
+ const tileTreatmentClass = tileTreatmentClassMap[tileTreatment];
15673
+ if (tileTreatmentClass) {
15674
+ classes.push(tileTreatmentClass);
15675
+ }
15676
+ } else if (typeof tileTreatment === "string" && process.env.NODE_ENV !== "production") {
15677
+ console.warn(
15678
+ `[sectionStyles] Invalid tileTreatment value in _sectionStyles: "${tileTreatment}". Expected one of: ${tileTreatmentValues.join(", ")}.`
15679
+ );
15680
+ }
15267
15681
  if (hasFixedFrameBackgroundMotion(input)) {
15268
15682
  classes.push(fixedFrameScopeClass);
15269
15683
  }
@@ -18802,6 +19216,9 @@ function createBlockManifest(config) {
18802
19216
  };
18803
19217
  return augmentManifest(manifest);
18804
19218
  }
19219
+ function createBlockManifestWithContentShape(config, _contentShape) {
19220
+ return createBlockManifest(config);
19221
+ }
18805
19222
  function normalizeBlockLayout(layout) {
18806
19223
  return Array.isArray(layout) ? [...layout] : layout;
18807
19224
  }
@@ -19482,7 +19899,7 @@ var init_blog_listing = __esm({
19482
19899
  });
19483
19900
 
19484
19901
  // ../blocks/src/system/blocks/cta-full.ts
19485
- var ctaComposition, ctaFullManifest, ctaFullBlockDefinition;
19902
+ var ctaComposition, ctaFullConfig, ctaFullManifest, ctaFullBlockDefinition;
19486
19903
  var init_cta_full = __esm({
19487
19904
  "../blocks/src/system/blocks/cta-full.ts"() {
19488
19905
  "use strict";
@@ -19494,7 +19911,7 @@ var init_cta_full = __esm({
19494
19911
  { fragment: ctaCopyFragment },
19495
19912
  { fragment: ctaRowFragment }
19496
19913
  ]);
19497
- ctaFullManifest = createBlockManifest({
19914
+ ctaFullConfig = {
19498
19915
  id: "block.cta-full",
19499
19916
  title: "Full-width CTA",
19500
19917
  category: "marketing",
@@ -19512,7 +19929,8 @@ var init_cta_full = __esm({
19512
19929
  description: "Centered call to action with optional background image.",
19513
19930
  tags: ["cta", "call-to-action", "button", "conversion", "action", "sign-up", "get-started"],
19514
19931
  icon: "Target"
19515
- });
19932
+ };
19933
+ ctaFullManifest = createBlockManifest(ctaFullConfig);
19516
19934
  ctaFullBlockDefinition = {
19517
19935
  manifest: ctaFullManifest
19518
19936
  };
@@ -22823,9 +23241,9 @@ var init_media_text = __esm({
22823
23241
  {
22824
23242
  id: "images",
22825
23243
  type: "repeater",
22826
- label: "Images",
23244
+ label: "Media",
22827
23245
  required: false,
22828
- itemLabel: "Image",
23246
+ itemLabel: "Media",
22829
23247
  minItems: 0,
22830
23248
  maxItems: 6,
22831
23249
  allowConversion: true,
@@ -22839,9 +23257,9 @@ var init_media_text = __esm({
22839
23257
  {
22840
23258
  id: "image",
22841
23259
  type: "media",
22842
- label: "Image",
23260
+ label: "Media",
22843
23261
  required: true,
22844
- mediaKinds: ["image"]
23262
+ mediaKinds: ["image", "video"]
22845
23263
  }
22846
23264
  ]
22847
23265
  }
@@ -22919,8 +23337,8 @@ var init_media_text = __esm({
22919
23337
  {
22920
23338
  id: "aspectRatio",
22921
23339
  type: "select",
22922
- label: "Image aspect ratio",
22923
- description: "Crop image to a consistent aspect ratio.",
23340
+ label: "Media aspect ratio",
23341
+ description: "Crop media to a consistent aspect ratio.",
22924
23342
  required: false,
22925
23343
  defaultValue: "auto",
22926
23344
  multiple: false,
@@ -23107,8 +23525,8 @@ var init_media_text = __esm({
23107
23525
  }
23108
23526
  };
23109
23527
  })(),
23110
- description: "Two columns: image/carousel + rich text (with optional section title).",
23111
- tags: ["media", "image", "carousel", "text", "two-column", "layout"],
23528
+ description: "Two columns: media/carousel + rich text (with optional section title).",
23529
+ tags: ["media", "image", "video", "carousel", "text", "two-column", "layout"],
23112
23530
  icon: "Columns"
23113
23531
  });
23114
23532
  mediaTextBlockDefinition = {
@@ -23244,7 +23662,7 @@ var init_types15 = __esm({
23244
23662
 
23245
23663
  // ../blocks/src/lib/media.ts
23246
23664
  import z41 from "zod";
23247
- var PUBLIC_DOWNLOAD_MEDIA_TYPES, hotspotSchema2, rotationSchema2, rectSchema2, aspectCropSchema2, transformSchema2, mediaBaseSchema, imageMediaSchema, videoMediaSchema, audioMediaSchema, documentMediaSchema, spreadsheetMediaSchema, archiveMediaSchema, mediaSchema2;
23665
+ var PUBLIC_DOWNLOAD_MEDIA_TYPES, hotspotSchema2, rotationSchema2, rectSchema2, aspectCropSchema2, transformSchema2, mediaPosterSchema, mediaBaseSchema, imageMediaSchema, videoMediaSchema, audioMediaSchema, documentMediaSchema, spreadsheetMediaSchema, archiveMediaSchema, mediaSchema2;
23248
23666
  var init_media4 = __esm({
23249
23667
  "../blocks/src/lib/media.ts"() {
23250
23668
  "use strict";
@@ -23279,6 +23697,19 @@ var init_media4 = __esm({
23279
23697
  hotspot: hotspotSchema2.optional(),
23280
23698
  rotation: rotationSchema2.optional()
23281
23699
  });
23700
+ mediaPosterSchema = z41.discriminatedUnion("tag", [
23701
+ z41.object({
23702
+ tag: z41.literal("storage"),
23703
+ assetId: z41.string().optional(),
23704
+ storageBucket: z41.string().min(1),
23705
+ storagePath: z41.string().min(1)
23706
+ }),
23707
+ z41.object({
23708
+ tag: z41.literal("external-src"),
23709
+ assetId: z41.string().optional(),
23710
+ src: z41.string().url()
23711
+ })
23712
+ ]);
23282
23713
  mediaBaseSchema = z41.object({
23283
23714
  purpose: z41.string().optional(),
23284
23715
  placeholder: z41.boolean().default(true).optional(),
@@ -23292,6 +23723,7 @@ var init_media4 = __esm({
23292
23723
  height: z41.number().optional(),
23293
23724
  storageBucket: z41.string().optional(),
23294
23725
  storagePath: z41.string().optional(),
23726
+ poster: mediaPosterSchema.optional(),
23295
23727
  transform: transformSchema2.optional()
23296
23728
  });
23297
23729
  imageMediaSchema = mediaBaseSchema.extend({ type: z41.literal("image") });
@@ -23831,16 +24263,39 @@ var init_event_registration_shared = __esm({
23831
24263
  }
23832
24264
  });
23833
24265
 
24266
+ // ../blocks/src/system/constants/events.ts
24267
+ function isEventCalendarDisplayMode(value) {
24268
+ return typeof value === "string" && eventCalendarDisplayModeValues.includes(value);
24269
+ }
24270
+ function isEventCalendarListLayout(value) {
24271
+ return typeof value === "string" && eventCalendarListLayoutValues.includes(value);
24272
+ }
24273
+ var eventCalendarDisplayModeValues, eventCalendarListLayoutValues, eventCalendarListLayoutOptions;
24274
+ var init_events = __esm({
24275
+ "../blocks/src/system/constants/events.ts"() {
24276
+ "use strict";
24277
+ eventCalendarDisplayModeValues = ["combined", "month", "week", "list", "timetable"];
24278
+ eventCalendarListLayoutValues = ["stack", "grid", "compact"];
24279
+ eventCalendarListLayoutOptions = [
24280
+ { id: "stack", label: "Stack" },
24281
+ { id: "grid", label: "Grid" },
24282
+ { id: "compact", label: "Compact" }
24283
+ ];
24284
+ }
24285
+ });
24286
+
23834
24287
  // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
23835
24288
  import { z as z46 } from "zod";
23836
- var previewStageSchema, registrationButtonVariantSchema, eventButtonVariantSchema, eventLayoutSchema, columnOptionSchema, weekStartSchema, filterAutoShowSchema, calendarTabViewsSchema;
24289
+ var previewStageSchema, registrationButtonVariantSchema, eventButtonVariantSchema, eventLayoutSchema, eventCalendarDisplayModeSchema, columnOptionSchema, weekStartSchema, filterAutoShowSchema, calendarTabViewsSchema;
23837
24290
  var init_contract_schemas = __esm({
23838
24291
  "../blocks/src/system/runtime/nodes/shared/contract-schemas.ts"() {
23839
24292
  "use strict";
24293
+ init_events();
23840
24294
  previewStageSchema = z46.enum(["preview", "published"]);
23841
24295
  registrationButtonVariantSchema = z46.enum(["primary", "secondary", "outline"]);
23842
24296
  eventButtonVariantSchema = z46.enum(["primary", "secondary", "outline", "link"]);
23843
- eventLayoutSchema = z46.enum(["grid", "stack", "compact"]);
24297
+ eventLayoutSchema = z46.enum(eventCalendarListLayoutValues);
24298
+ eventCalendarDisplayModeSchema = z46.enum(eventCalendarDisplayModeValues);
23844
24299
  columnOptionSchema = z46.enum(["2", "3", "4"]);
23845
24300
  weekStartSchema = z46.enum(["sunday", "monday"]);
23846
24301
  filterAutoShowSchema = z46.enum(["auto", "always", "never"]);
@@ -25435,7 +25890,7 @@ var init_EventListing_interactive = __esm({
25435
25890
  });
25436
25891
 
25437
25892
  // ../blocks/src/system/blocks/events/event-listing.ts
25438
- var eventListingManifest, eventListingBlockDefinition;
25893
+ var eventListingAdditionalFields, eventListingLayout, eventListingDerivedFields, eventListingContentShape, eventListingConfig, eventListingManifest, eventListingBlockDefinition;
25439
25894
  var init_event_listing = __esm({
25440
25895
  "../blocks/src/system/blocks/events/event-listing.ts"() {
25441
25896
  "use strict";
@@ -25448,7 +25903,232 @@ var init_event_listing = __esm({
25448
25903
  init_defineBlock();
25449
25904
  init_EventListing_interactive();
25450
25905
  init_shared3();
25451
- eventListingManifest = createBlockManifest({
25906
+ eventListingAdditionalFields = [
25907
+ ...sectionHeaderFields("All Events"),
25908
+ ...(() => {
25909
+ const columns = columnsField(["2", "3", "4"]);
25910
+ return [
25911
+ {
25912
+ ...layoutField,
25913
+ ui: { ...layoutField.ui ?? {}, intent: "display" }
25914
+ },
25915
+ {
25916
+ ...columns,
25917
+ ui: { ...columns.ui ?? {}, intent: "display" }
25918
+ }
25919
+ ];
25920
+ })(),
25921
+ {
25922
+ id: "eventsPerPage",
25923
+ type: "select",
25924
+ label: "Events per page",
25925
+ description: "Number of events to load at a time",
25926
+ required: false,
25927
+ multiple: false,
25928
+ defaultValue: "12",
25929
+ options: [
25930
+ { value: "3", label: "3 events" },
25931
+ { value: "6", label: "6 events" },
25932
+ { value: "12", label: "12 events" },
25933
+ { value: "24", label: "24 events" }
25934
+ ],
25935
+ ui: { intent: "display" }
25936
+ },
25937
+ {
25938
+ id: "paginationMode",
25939
+ type: "select",
25940
+ label: "More events",
25941
+ description: "How to access events beyond the initial list",
25942
+ required: false,
25943
+ multiple: false,
25944
+ defaultValue: "loadMore",
25945
+ options: [
25946
+ { value: "loadMore", label: "Load more button" },
25947
+ { value: "seeAllLink", label: "Link to another page" }
25948
+ ],
25949
+ ui: { intent: "display" }
25950
+ },
25951
+ {
25952
+ id: "seeAllUrl",
25953
+ type: "link",
25954
+ label: "See all destination",
25955
+ required: false,
25956
+ ui: {
25957
+ intent: "display",
25958
+ visibleWhen: {
25959
+ field: "paginationMode",
25960
+ equals: "seeAllLink"
25961
+ }
25962
+ }
25963
+ },
25964
+ {
25965
+ id: "loadMoreText",
25966
+ type: "text",
25967
+ label: "Button text",
25968
+ description: "Text for the pagination button or link",
25969
+ required: false,
25970
+ multiline: false,
25971
+ defaultValue: "Load more events",
25972
+ maxLength: 40
25973
+ },
25974
+ ...cardStylingFields.map((field) => ({
25975
+ ...field,
25976
+ ui: { ...field.ui ?? {}, intent: "style" }
25977
+ })),
25978
+ ...eventDisplayFields.map((field) => ({
25979
+ ...field,
25980
+ ui: { ...field.ui ?? {}, intent: "display" }
25981
+ })),
25982
+ {
25983
+ id: "kind",
25984
+ type: "select",
25985
+ label: "Show",
25986
+ description: "Choose whether this list shows courses, events, or both",
25987
+ required: false,
25988
+ multiple: false,
25989
+ defaultValue: "all",
25990
+ options: [
25991
+ { value: "all", label: "Courses and events" },
25992
+ { value: "courses", label: "Courses only" },
25993
+ { value: "events", label: "Events only" }
25994
+ ],
25995
+ ui: { intent: "behavior" }
25996
+ },
25997
+ {
25998
+ id: "eventSurface",
25999
+ type: "select",
26000
+ label: "Event surface",
26001
+ description: "Choose a semantic event scope",
26002
+ required: false,
26003
+ multiple: false,
26004
+ defaultValue: "all",
26005
+ options: [
26006
+ { value: "all", label: "All events" },
26007
+ { value: "regularClassSchedule", label: "Regular class schedule" },
26008
+ { value: "specialDatedEvents", label: "Workshops and special events" },
26009
+ { value: "custom", label: "Custom" }
26010
+ ],
26011
+ ui: { intent: "behavior" }
26012
+ },
26013
+ {
26014
+ id: "filterEventPresets",
26015
+ type: "select",
26016
+ label: "Pre-filter by event type",
26017
+ description: "Restrict this block to specific event types",
26018
+ required: false,
26019
+ multiple: true,
26020
+ defaultValue: [],
26021
+ options: [
26022
+ { value: "class", label: "Classes" },
26023
+ { value: "workshop", label: "Workshops" },
26024
+ { value: "retreat", label: "Retreats" },
26025
+ { value: "performance", label: "Performances" }
26026
+ ],
26027
+ ui: {
26028
+ intent: "behavior",
26029
+ visibleWhen: { field: "eventSurface", equals: "custom" }
26030
+ }
26031
+ },
26032
+ {
26033
+ id: "scheduleScope",
26034
+ type: "select",
26035
+ label: "Schedule cadence",
26036
+ description: "Restrict this block by recurrence",
26037
+ required: false,
26038
+ multiple: false,
26039
+ defaultValue: "any",
26040
+ options: [
26041
+ { value: "any", label: "Any cadence" },
26042
+ { value: "recurring", label: "Recurring only" },
26043
+ { value: "oneOff", label: "One-off only" }
26044
+ ],
26045
+ ui: {
26046
+ intent: "behavior",
26047
+ visibleWhen: { field: "eventSurface", equals: "custom" }
26048
+ }
26049
+ },
26050
+ {
26051
+ ...emptyStateField,
26052
+ ui: { ...emptyStateField.ui ?? {}, intent: "display" }
26053
+ },
26054
+ sectionStylesField({
26055
+ id: "_sectionStyles",
26056
+ label: "Section styles",
26057
+ renderInHeader: false
26058
+ })
26059
+ ];
26060
+ eventListingLayout = [
26061
+ styledSection({
26062
+ children: sectionContainer([
26063
+ // Optional heading
26064
+ text(
26065
+ { as: "h2" },
26066
+ bind("content.heading"),
26067
+ when("content.heading")
26068
+ ),
26069
+ // Optional description
26070
+ richText(
26071
+ { className: "rb-prose rb-max-w-none" },
26072
+ bind("content.description"),
26073
+ when("content.description")
26074
+ ),
26075
+ // Event listing component with pagination
26076
+ el("event-listing", withApiBindings({
26077
+ events: { $bind: { from: "data.events" } },
26078
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
26079
+ layout: { $bind: { from: "content.layout", fallback: "grid" } },
26080
+ columns: { $bind: { from: "content.columns", fallback: "3" } },
26081
+ eventsPerPage: { $bind: { from: "content.eventsPerPage", fallback: "12" } },
26082
+ paginationMode: { $bind: { from: "content.paginationMode", fallback: "loadMore" } },
26083
+ seeAllUrl: { $bind: { from: "content.seeAllUrl", transforms: [{ id: "links.resolve" }] } },
26084
+ loadMoreText: { $bind: { from: "content.loadMoreText", fallback: "Load more events" } },
26085
+ cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
26086
+ buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
26087
+ buttonText: { $bind: { from: "content.buttonText", fallback: "View event" } },
26088
+ showVenue: { $bind: { from: "content.showVenue" } },
26089
+ showMap: { $bind: { from: "content.showMap" } },
26090
+ showCapacity: { $bind: { from: "content.showCapacity" } },
26091
+ eventKind: { $bind: { from: "content.kind", fallback: "all" } },
26092
+ eventSurface: { $bind: { from: "content.eventSurface", fallback: "all" } },
26093
+ filterEventPresets: { $bind: { from: "content.filterEventPresets" } },
26094
+ scheduleScope: { $bind: { from: "content.scheduleScope", fallback: "any" } },
26095
+ emptyMessage: { $bind: { from: "content.emptyMessage" } }
26096
+ }))
26097
+ ], {
26098
+ gap: "lg"
26099
+ }),
26100
+ // sectionContainer (rb-container) already provides horizontal padding
26101
+ baseClass: "",
26102
+ spacing: "comfortable"
26103
+ })
26104
+ ];
26105
+ eventListingDerivedFields = [
26106
+ {
26107
+ id: "layout",
26108
+ type: "select",
26109
+ required: false,
26110
+ multiple: false,
26111
+ options: [
26112
+ { value: "grid" },
26113
+ { value: "stack" }
26114
+ ]
26115
+ },
26116
+ {
26117
+ id: "paginationMode",
26118
+ type: "select",
26119
+ required: false,
26120
+ multiple: false,
26121
+ options: [
26122
+ { value: "loadMore" },
26123
+ { value: "seeAllLink" }
26124
+ ]
26125
+ }
26126
+ ];
26127
+ eventListingContentShape = {
26128
+ additionalFields: eventListingDerivedFields,
26129
+ skipSectionStyles: true
26130
+ };
26131
+ eventListingConfig = {
25452
26132
  id: "block.event-listing",
25453
26133
  version: "1.1.0",
25454
26134
  title: "Event Listing",
@@ -25456,211 +26136,18 @@ var init_event_listing = __esm({
25456
26136
  description: "Paginated list of all upcoming events",
25457
26137
  // Preserve legacy section styles field configuration (renderInHeader: false).
25458
26138
  skipSectionStyles: true,
25459
- additionalFields: [
25460
- ...sectionHeaderFields("All Events"),
25461
- ...(() => {
25462
- const columns = columnsField(["2", "3", "4"]);
25463
- return [
25464
- {
25465
- ...layoutField,
25466
- ui: { ...layoutField.ui ?? {}, intent: "display" }
25467
- },
25468
- {
25469
- ...columns,
25470
- ui: { ...columns.ui ?? {}, intent: "display" }
25471
- }
25472
- ];
25473
- })(),
25474
- {
25475
- id: "eventsPerPage",
25476
- type: "select",
25477
- label: "Events per page",
25478
- description: "Number of events to load at a time",
25479
- required: false,
25480
- multiple: false,
25481
- defaultValue: "12",
25482
- options: [
25483
- { value: "3", label: "3 events" },
25484
- { value: "6", label: "6 events" },
25485
- { value: "12", label: "12 events" },
25486
- { value: "24", label: "24 events" }
25487
- ],
25488
- ui: { intent: "display" }
25489
- },
25490
- {
25491
- id: "paginationMode",
25492
- type: "select",
25493
- label: "More events",
25494
- description: "How to access events beyond the initial list",
25495
- required: false,
25496
- multiple: false,
25497
- defaultValue: "loadMore",
25498
- options: [
25499
- { value: "loadMore", label: "Load more button" },
25500
- { value: "seeAllLink", label: "Link to another page" }
25501
- ],
25502
- ui: { intent: "display" }
25503
- },
25504
- {
25505
- id: "seeAllUrl",
25506
- type: "link",
25507
- label: "See all destination",
25508
- required: false,
25509
- ui: {
25510
- intent: "display",
25511
- visibleWhen: {
25512
- field: "paginationMode",
25513
- equals: "seeAllLink"
25514
- }
25515
- }
25516
- },
25517
- {
25518
- id: "loadMoreText",
25519
- type: "text",
25520
- label: "Button text",
25521
- description: "Text for the pagination button or link",
25522
- required: false,
25523
- multiline: false,
25524
- defaultValue: "Load more events",
25525
- maxLength: 40
25526
- },
25527
- ...cardStylingFields.map((field) => ({
25528
- ...field,
25529
- ui: { ...field.ui ?? {}, intent: "style" }
25530
- })),
25531
- ...eventDisplayFields.map((field) => ({
25532
- ...field,
25533
- ui: { ...field.ui ?? {}, intent: "display" }
25534
- })),
25535
- {
25536
- id: "kind",
25537
- type: "select",
25538
- label: "Show",
25539
- description: "Choose whether this list shows courses, events, or both",
25540
- required: false,
25541
- multiple: false,
25542
- defaultValue: "all",
25543
- options: [
25544
- { value: "all", label: "Courses and events" },
25545
- { value: "courses", label: "Courses only" },
25546
- { value: "events", label: "Events only" }
25547
- ],
25548
- ui: { intent: "behavior" }
25549
- },
25550
- {
25551
- id: "eventSurface",
25552
- type: "select",
25553
- label: "Event surface",
25554
- description: "Choose a semantic event scope",
25555
- required: false,
25556
- multiple: false,
25557
- defaultValue: "all",
25558
- options: [
25559
- { value: "all", label: "All events" },
25560
- { value: "regularClassSchedule", label: "Regular class schedule" },
25561
- { value: "specialDatedEvents", label: "Workshops and special events" },
25562
- { value: "custom", label: "Custom" }
25563
- ],
25564
- ui: { intent: "behavior" }
25565
- },
25566
- {
25567
- id: "filterEventPresets",
25568
- type: "select",
25569
- label: "Pre-filter by event type",
25570
- description: "Restrict this block to specific event types",
25571
- required: false,
25572
- multiple: true,
25573
- defaultValue: [],
25574
- options: [
25575
- { value: "class", label: "Classes" },
25576
- { value: "workshop", label: "Workshops" },
25577
- { value: "retreat", label: "Retreats" },
25578
- { value: "performance", label: "Performances" }
25579
- ],
25580
- ui: {
25581
- intent: "behavior",
25582
- visibleWhen: { field: "eventSurface", equals: "custom" }
25583
- }
25584
- },
25585
- {
25586
- id: "scheduleScope",
25587
- type: "select",
25588
- label: "Schedule cadence",
25589
- description: "Restrict this block by recurrence",
25590
- required: false,
25591
- multiple: false,
25592
- defaultValue: "any",
25593
- options: [
25594
- { value: "any", label: "Any cadence" },
25595
- { value: "recurring", label: "Recurring only" },
25596
- { value: "oneOff", label: "One-off only" }
25597
- ],
25598
- ui: {
25599
- intent: "behavior",
25600
- visibleWhen: { field: "eventSurface", equals: "custom" }
25601
- }
25602
- },
25603
- {
25604
- ...emptyStateField,
25605
- ui: { ...emptyStateField.ui ?? {}, intent: "display" }
25606
- },
25607
- sectionStylesField({
25608
- id: "_sectionStyles",
25609
- label: "Section styles",
25610
- renderInHeader: false
25611
- })
25612
- ],
26139
+ additionalFields: eventListingAdditionalFields,
25613
26140
  styleTokens: { background: "surface", typography: "body", spacing: "md" },
25614
26141
  behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: true },
25615
26142
  category: "interactive",
25616
26143
  tags: ["events", "listing", "paginated", "archive", "all-events"],
25617
26144
  icon: "List",
25618
- layout: [
25619
- styledSection({
25620
- children: sectionContainer([
25621
- // Optional heading
25622
- text(
25623
- { as: "h2" },
25624
- bind("content.heading"),
25625
- when("content.heading")
25626
- ),
25627
- // Optional description
25628
- richText(
25629
- { className: "rb-prose rb-max-w-none" },
25630
- bind("content.description"),
25631
- when("content.description")
25632
- ),
25633
- // Event listing component with pagination
25634
- el("event-listing", withApiBindings({
25635
- events: { $bind: { from: "data.events" } },
25636
- stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
25637
- layout: { $bind: { from: "content.layout", fallback: "grid" } },
25638
- columns: { $bind: { from: "content.columns", fallback: "3" } },
25639
- eventsPerPage: { $bind: { from: "content.eventsPerPage", fallback: "12" } },
25640
- paginationMode: { $bind: { from: "content.paginationMode", fallback: "loadMore" } },
25641
- seeAllUrl: { $bind: { from: "content.seeAllUrl", transforms: [{ id: "links.resolve" }] } },
25642
- loadMoreText: { $bind: { from: "content.loadMoreText", fallback: "Load more events" } },
25643
- cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
25644
- buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
25645
- buttonText: { $bind: { from: "content.buttonText", fallback: "View event" } },
25646
- showVenue: { $bind: { from: "content.showVenue" } },
25647
- showMap: { $bind: { from: "content.showMap" } },
25648
- showCapacity: { $bind: { from: "content.showCapacity" } },
25649
- eventKind: { $bind: { from: "content.kind", fallback: "all" } },
25650
- eventSurface: { $bind: { from: "content.eventSurface", fallback: "all" } },
25651
- filterEventPresets: { $bind: { from: "content.filterEventPresets" } },
25652
- scheduleScope: { $bind: { from: "content.scheduleScope", fallback: "any" } },
25653
- emptyMessage: { $bind: { from: "content.emptyMessage" } }
25654
- }))
25655
- ], {
25656
- gap: "lg"
25657
- }),
25658
- // sectionContainer (rb-container) already provides horizontal padding
25659
- baseClass: "",
25660
- spacing: "comfortable"
25661
- })
25662
- ]
25663
- });
26145
+ layout: eventListingLayout
26146
+ };
26147
+ eventListingManifest = createBlockManifestWithContentShape(
26148
+ eventListingConfig,
26149
+ eventListingContentShape
26150
+ );
25664
26151
  eventListingBlockDefinition = {
25665
26152
  manifest: eventListingManifest,
25666
26153
  runtime: eventListingBlockRuntime,
@@ -25692,7 +26179,7 @@ import { z as z53 } from "zod";
25692
26179
  function buildEventCalendarDisplay(source) {
25693
26180
  return {
25694
26181
  kind: "event-calendar",
25695
- displayMode: source.displayMode ?? "combined",
26182
+ displayMode: source.variant ?? source.displayMode ?? "combined",
25696
26183
  className: source.className ?? null,
25697
26184
  events: (source.events ?? []).slice().sort(
25698
26185
  (left, right) => new Date(left.startsAt).getTime() - new Date(right.startsAt).getTime()
@@ -25724,7 +26211,7 @@ function buildEventCalendarDisplay(source) {
25724
26211
  emptyMessage: source.emptyMessage ?? "No upcoming events scheduled."
25725
26212
  };
25726
26213
  }
25727
- var displayModeSchema, eventBlockKindSchema2, eventSurfaceScopeSchema2, eventScheduleScopeSchema3, eventCalendarSourceSchema, eventCalendarDisplaySchema, eventCalendarHydrationSchema, eventCalendarRenderSchema, eventCalendarIslandMetaCodec, eventCalendarIslandMetaKeys, eventCalendarBlockRuntime, eventCalendarInteractiveIslandPropsCodec;
26214
+ var eventBlockKindSchema2, eventSurfaceScopeSchema2, eventScheduleScopeSchema3, eventCalendarSourceSchema, eventCalendarDisplaySchema, eventCalendarHydrationSchema, eventCalendarRenderSchema, eventCalendarIslandMetaCodec, eventCalendarIslandMetaKeys, eventCalendarBlockRuntime, eventCalendarInteractiveIslandPropsCodec;
25728
26215
  var init_EventCalendar_interactive = __esm({
25729
26216
  "../blocks/src/system/runtime/nodes/events/EventCalendar.interactive.ts"() {
25730
26217
  "use strict";
@@ -25733,7 +26220,6 @@ var init_EventCalendar_interactive = __esm({
25733
26220
  init_islands();
25734
26221
  init_runtime();
25735
26222
  init_contract_schemas();
25736
- displayModeSchema = z53.enum(["combined", "month", "week", "list", "timetable"]);
25737
26223
  eventBlockKindSchema2 = z53.enum(eventBlockKindValues);
25738
26224
  eventSurfaceScopeSchema2 = z53.enum(eventSurfaceScopeValues);
25739
26225
  eventScheduleScopeSchema3 = z53.enum(eventScheduleScopeValues);
@@ -25743,7 +26229,8 @@ var init_EventCalendar_interactive = __esm({
25743
26229
  siteId: z53.string(),
25744
26230
  apiBaseUrl: z53.string().optional(),
25745
26231
  stage: previewStageSchema.optional(),
25746
- displayMode: displayModeSchema.nullable().optional(),
26232
+ variant: eventCalendarDisplayModeSchema.nullable().optional(),
26233
+ displayMode: eventCalendarDisplayModeSchema.nullable().optional(),
25747
26234
  listLayout: eventLayoutSchema.optional(),
25748
26235
  listColumns: columnOptionSchema.optional(),
25749
26236
  layout: eventLayoutSchema.optional(),
@@ -25775,7 +26262,7 @@ var init_EventCalendar_interactive = __esm({
25775
26262
  );
25776
26263
  eventCalendarDisplaySchema = z53.object({
25777
26264
  kind: z53.literal("event-calendar"),
25778
- displayMode: displayModeSchema,
26265
+ displayMode: eventCalendarDisplayModeSchema,
25779
26266
  className: z53.string().nullable(),
25780
26267
  events: z53.array(publicEventSchema),
25781
26268
  listLayout: eventLayoutSchema,
@@ -25864,8 +26351,12 @@ var init_EventCalendar_interactive = __esm({
25864
26351
  function normalizeEventCalendarContent(content) {
25865
26352
  const record = typeof content === "object" && content !== null ? content : {};
25866
26353
  const kind = normalizeEventBlockKind(record.kind);
26354
+ const variant = normalizeEventCalendarDisplayMode(record.variant) ?? normalizeEventCalendarDisplayMode(record.displayMode);
25867
26355
  return {
25868
26356
  ...record,
26357
+ ...variant ? { variant } : {},
26358
+ displayMode: normalizeEventCalendarDisplayMode(record.displayMode),
26359
+ listLayout: normalizeEventCalendarListLayout(record.listLayout),
25869
26360
  kind,
25870
26361
  eventSurface: normalizeEventSurfaceScope(record.eventSurface),
25871
26362
  filterEventPresets: normalizeEventSurfacePresets(record.filterEventPresets),
@@ -25877,7 +26368,13 @@ function normalizeEventCalendarContent(content) {
25877
26368
  filterVenueId: normalizeEventVenueId(record.filterVenueId)
25878
26369
  };
25879
26370
  }
25880
- var eventCalendarManifest, eventCalendarBlockDefinition;
26371
+ function normalizeEventCalendarDisplayMode(value) {
26372
+ return isEventCalendarDisplayMode(value) ? value : void 0;
26373
+ }
26374
+ function normalizeEventCalendarListLayout(value) {
26375
+ return isEventCalendarListLayout(value) ? value : void 0;
26376
+ }
26377
+ var eventCalendarLayout, eventCalendarAdditionalFields, eventCalendarVariants, eventCalendarDerivedFields, eventCalendarContentShape, eventCalendarConfig, eventCalendarManifest, eventCalendarBlockDefinition;
25881
26378
  var init_event_calendar = __esm({
25882
26379
  "../blocks/src/system/blocks/events/event-calendar.ts"() {
25883
26380
  "use strict";
@@ -25889,357 +26386,512 @@ var init_event_calendar = __esm({
25889
26386
  init_boxStyles();
25890
26387
  init_api_bindings();
25891
26388
  init_defineBlock();
26389
+ init_events();
25892
26390
  init_shared3();
25893
26391
  init_EventCalendar_interactive();
25894
- eventCalendarManifest = createBlockManifest({
25895
- id: "block.event-calendar",
25896
- version: "3.6.0",
25897
- title: "Event Calendar",
25898
- titleSource: "heading",
25899
- description: "Display events with calendar, list, or combined views with filtering",
25900
- // Preserve legacy section styles field configuration (renderInHeader: false).
25901
- skipSectionStyles: true,
25902
- additionalFields: [
25903
- ...sectionHeaderFields("Event Calendar"),
25904
- // Display Mode (replaces calendarView)
25905
- {
25906
- id: "displayMode",
25907
- type: "select",
25908
- label: "Display mode",
25909
- description: "How events are displayed",
25910
- required: false,
25911
- multiple: false,
25912
- defaultValue: "combined",
25913
- options: [
25914
- { value: "combined", label: "Combined (List + Calendar tabs)" },
25915
- { value: "month", label: "Month calendar" },
25916
- { value: "week", label: "Week agenda" },
25917
- { value: "timetable", label: "Timetable" },
25918
- { value: "list", label: "List" }
25919
- ],
25920
- ui: { intent: "display" }
25921
- },
25922
- // List options (visible when displayMode is list or combined)
25923
- {
25924
- id: "listLayout",
25925
- type: "select",
25926
- label: "List layout",
25927
- description: "Layout style for list view",
25928
- required: false,
25929
- multiple: false,
25930
- defaultValue: "stack",
25931
- options: [
25932
- { value: "stack", label: "Stack (full-width cards)" },
25933
- { value: "grid", label: "Grid" },
25934
- { value: "compact", label: "Compact (dense rows)" }
25935
- ],
25936
- ui: {
25937
- intent: "display",
25938
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list"] }
25939
- }
25940
- },
25941
- {
25942
- id: "listColumns",
25943
- type: "select",
25944
- label: "Grid columns",
25945
- description: "Number of columns in grid layout",
25946
- required: false,
25947
- multiple: false,
25948
- defaultValue: "3",
25949
- options: [
25950
- { value: "2", label: "2 columns" },
25951
- { value: "3", label: "3 columns" },
25952
- { value: "4", label: "4 columns" }
25953
- ],
25954
- ui: {
25955
- intent: "display",
25956
- visibleWhen: { field: "listLayout", equals: "grid" }
25957
- }
25958
- },
25959
- {
25960
- id: "eventsPerPage",
25961
- type: "select",
25962
- label: "Events per page (cards)",
25963
- description: "Number of events to load initially in card layouts",
25964
- required: false,
25965
- multiple: false,
25966
- defaultValue: "12",
25967
- options: [
25968
- { value: "6", label: "6" },
25969
- { value: "12", label: "12" },
25970
- { value: "24", label: "24" }
25971
- ],
25972
- ui: {
25973
- intent: "display",
25974
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list"] }
25975
- }
25976
- },
25977
- {
25978
- id: "compactEventsPerPage",
25979
- type: "select",
25980
- label: "Events per page (compact)",
25981
- description: "Number of events to show per page in compact layout",
25982
- required: false,
25983
- multiple: false,
25984
- defaultValue: "10",
25985
- options: [
25986
- { value: "10", label: "10" },
25987
- { value: "20", label: "20" },
25988
- { value: "30", label: "30" }
25989
- ],
25990
- ui: {
25991
- intent: "display",
25992
- visibleWhen: { field: "listLayout", equals: "compact" }
25993
- }
25994
- },
25995
- {
25996
- id: "loadMoreText",
25997
- type: "text",
25998
- label: "Load more button text",
25999
- description: "Text for the load more button",
26000
- required: false,
26001
- multiline: false,
26002
- defaultValue: "Load more events",
26003
- ui: {
26004
- intent: "content",
26005
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list"] }
26006
- }
26007
- },
26008
- // Calendar options
26009
- {
26010
- id: "startOfWeek",
26011
- type: "select",
26012
- label: "Week starts on",
26013
- description: "First day of the week",
26014
- required: false,
26015
- multiple: false,
26016
- defaultValue: "monday",
26017
- options: [
26018
- { value: "sunday", label: "Sunday" },
26019
- { value: "monday", label: "Monday" }
26020
- ],
26021
- ui: {
26022
- intent: "display",
26023
- visibleWhen: {
26024
- field: "displayMode",
26025
- oneOf: ["combined", "month", "week"]
26026
- }
26027
- }
26028
- },
26029
- // Combined mode options
26030
- {
26031
- id: "calendarTabViews",
26032
- type: "select",
26033
- label: "Calendar tab views",
26034
- description: "Which calendar views to show in the Calendar tab",
26035
- required: false,
26036
- multiple: false,
26037
- defaultValue: "both",
26038
- options: [
26039
- { value: "both", label: "Month + Week toggle" },
26040
- { value: "month", label: "Month only" },
26041
- { value: "week", label: "Week only" }
26042
- ],
26043
- ui: {
26044
- intent: "display",
26045
- visibleWhen: { field: "displayMode", equals: "combined" }
26046
- }
26047
- },
26048
- // Filtering options
26049
- {
26050
- id: "kind",
26051
- type: "select",
26052
- label: "Show",
26053
- description: "Restrict this block to all offerings, courses, or events",
26054
- required: false,
26055
- multiple: false,
26056
- defaultValue: "all",
26057
- options: [
26058
- { value: "all", label: "All offerings" },
26059
- { value: "courses", label: "Courses only" },
26060
- { value: "events", label: "Events only" }
26061
- ],
26062
- ui: { intent: "behavior" }
26063
- },
26064
- {
26065
- id: "showFilters",
26066
- type: "boolean",
26067
- label: "Show filters",
26068
- description: "Show category, staff, and venue filters",
26069
- required: false,
26070
- defaultValue: true,
26071
- ui: {
26072
- intent: "display",
26073
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list", "timetable"] }
26074
- }
26075
- },
26076
- {
26077
- id: "showCategoryFilter",
26078
- type: "select",
26079
- label: "Show category filter",
26080
- description: "When to show the category filter dropdown",
26081
- required: false,
26082
- multiple: false,
26083
- defaultValue: "auto",
26084
- options: [
26085
- { value: "auto", label: "Auto (when >1 category has events)" },
26086
- { value: "always", label: "Always" },
26087
- { value: "never", label: "Never" }
26392
+ eventCalendarLayout = [
26393
+ styledSection({
26394
+ children: sectionContainer(
26395
+ [
26396
+ // Optional heading
26397
+ text({ as: "h2" }, bind("content.heading"), when("content.heading")),
26398
+ // Optional description
26399
+ richText(
26400
+ { className: "rb-prose rb-max-w-none" },
26401
+ bind("content.description"),
26402
+ when("content.description")
26403
+ ),
26404
+ // Event calendar component (handles all display modes)
26405
+ el(
26406
+ "event-calendar",
26407
+ withApiBindings({
26408
+ events: { $bind: { from: "data.events" } },
26409
+ stage: {
26410
+ $bind: { from: "$root.previewStage", fallback: "published" }
26411
+ },
26412
+ // Variant is the new Theme V2-facing display mode. displayMode is
26413
+ // retained as a legacy fallback for existing content.
26414
+ variant: {
26415
+ $bind: { from: "content.variant" }
26416
+ },
26417
+ displayMode: {
26418
+ $bind: { from: "content.displayMode" }
26419
+ },
26420
+ // List options
26421
+ listLayout: { $bind: { from: "content.listLayout" } },
26422
+ listColumns: { $bind: { from: "content.listColumns" } },
26423
+ // Legacy compatibility: older event-calendar content used layout/columns
26424
+ layout: { $bind: { from: "content.layout" } },
26425
+ columns: { $bind: { from: "content.columns" } },
26426
+ eventsPerPage: {
26427
+ $bind: { from: "content.eventsPerPage", fallback: "12" }
26428
+ },
26429
+ compactEventsPerPage: {
26430
+ $bind: { from: "content.compactEventsPerPage", fallback: "10" }
26431
+ },
26432
+ loadMoreText: {
26433
+ $bind: {
26434
+ from: "content.loadMoreText",
26435
+ fallback: "Load more events"
26436
+ }
26437
+ },
26438
+ // Calendar options
26439
+ startOfWeek: {
26440
+ $bind: { from: "content.startOfWeek", fallback: "monday" }
26441
+ },
26442
+ calendarTabViews: {
26443
+ $bind: { from: "content.calendarTabViews", fallback: "both" }
26444
+ },
26445
+ // Filtering options
26446
+ showFilters: {
26447
+ $bind: { from: "content.showFilters", fallback: true }
26448
+ },
26449
+ showCategoryFilter: {
26450
+ $bind: { from: "content.showCategoryFilter", fallback: "auto" }
26451
+ },
26452
+ showVenueFilter: {
26453
+ $bind: { from: "content.showVenueFilter", fallback: false }
26454
+ },
26455
+ showStaffFilter: {
26456
+ $bind: { from: "content.showStaffFilter", fallback: true }
26457
+ },
26458
+ showCapacity: {
26459
+ $bind: { from: "content.showCapacity", fallback: true }
26460
+ },
26461
+ kind: { $bind: { from: "content.kind", fallback: "all" } },
26462
+ eventSurface: {
26463
+ $bind: { from: "content.eventSurface", fallback: "all" }
26464
+ },
26465
+ filterEventPresets: {
26466
+ $bind: { from: "content.filterEventPresets" }
26467
+ },
26468
+ scheduleScope: {
26469
+ $bind: { from: "content.scheduleScope", fallback: "any" }
26470
+ },
26471
+ filterCategoryIds: {
26472
+ $bind: { from: "content.filterCategoryIds" }
26473
+ },
26474
+ filterStaffMemberId: {
26475
+ $bind: { from: "content.filterStaffMemberId" }
26476
+ },
26477
+ filterVenueId: { $bind: { from: "content.filterVenueId" } },
26478
+ // Styling
26479
+ buttonVariant: {
26480
+ $bind: { from: "content.buttonVariant", fallback: "primary" }
26481
+ },
26482
+ buttonText: {
26483
+ $bind: { from: "content.buttonText", fallback: "View event" }
26484
+ },
26485
+ emptyMessage: { $bind: { from: "content.emptyMessage" } }
26486
+ })
26487
+ )
26088
26488
  ],
26089
- ui: {
26090
- intent: "display",
26091
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list", "timetable"] }
26092
- }
26093
- },
26094
- {
26095
- id: "showVenueFilter",
26096
- type: "boolean",
26097
- label: "Show venue filter",
26098
- description: "Show venue filter dropdown",
26099
- required: false,
26100
- defaultValue: false,
26101
- ui: {
26102
- intent: "display",
26103
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list", "timetable"] }
26104
- }
26105
- },
26106
- {
26107
- id: "showStaffFilter",
26108
- type: "boolean",
26109
- label: "Show staff filter",
26110
- description: "Show staff filter dropdown",
26111
- required: false,
26112
- defaultValue: true,
26113
- ui: {
26114
- intent: "display",
26115
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list", "timetable"] }
26116
- }
26117
- },
26118
- {
26119
- id: "showCapacity",
26120
- type: "boolean",
26121
- label: "Show available spots",
26122
- description: "Display remaining capacity on event cards and timetable cells",
26123
- required: false,
26124
- defaultValue: true,
26125
- ui: {
26126
- intent: "display",
26127
- visibleWhen: {
26128
- field: "displayMode",
26129
- oneOf: ["combined", "list", "week", "timetable"]
26130
- }
26489
+ {
26490
+ gap: "lg"
26131
26491
  }
26132
- },
26133
- // Block-level pre-filtering
26134
- {
26135
- id: "eventSurface",
26136
- type: "select",
26137
- label: "Event surface",
26138
- description: "Choose a semantic event scope",
26139
- required: false,
26140
- multiple: false,
26141
- defaultValue: "all",
26142
- options: [
26143
- { value: "all", label: "All events" },
26144
- { value: "regularClassSchedule", label: "Regular class schedule" },
26145
- { value: "specialDatedEvents", label: "Workshops and special events" },
26146
- { value: "custom", label: "Custom" }
26147
- ],
26148
- ui: { intent: "behavior" }
26149
- },
26150
- {
26151
- id: "filterEventPresets",
26152
- type: "select",
26153
- label: "Pre-filter by event type",
26154
- description: "Restrict this block to specific event types",
26155
- required: false,
26156
- multiple: true,
26157
- defaultValue: [],
26158
- options: [
26159
- { value: "class", label: "Classes" },
26160
- { value: "workshop", label: "Workshops" },
26161
- { value: "retreat", label: "Retreats" },
26162
- { value: "performance", label: "Performances" }
26163
- ],
26164
- ui: {
26165
- intent: "behavior",
26166
- visibleWhen: { field: "eventSurface", equals: "custom" }
26492
+ ),
26493
+ // sectionContainer (rb-container) already provides horizontal padding
26494
+ baseClass: "",
26495
+ spacing: "comfortable"
26496
+ })
26497
+ ];
26498
+ eventCalendarAdditionalFields = [
26499
+ ...sectionHeaderFields("Event Calendar"),
26500
+ // Display Mode (replaces calendarView)
26501
+ {
26502
+ id: "displayMode",
26503
+ type: "select",
26504
+ label: "Display mode",
26505
+ description: "How events are displayed",
26506
+ required: false,
26507
+ multiple: false,
26508
+ defaultValue: "combined",
26509
+ options: [
26510
+ { value: "combined", label: "Combined (List + Calendar tabs)" },
26511
+ { value: "month", label: "Month calendar" },
26512
+ { value: "week", label: "Week agenda" },
26513
+ { value: "timetable", label: "Timetable" },
26514
+ { value: "list", label: "List" }
26515
+ ],
26516
+ ui: { intent: "display", hidden: true }
26517
+ },
26518
+ // List options (visible when displayMode is list or combined)
26519
+ {
26520
+ id: "listLayout",
26521
+ type: "select",
26522
+ label: "List layout",
26523
+ description: "Layout style for list view",
26524
+ required: false,
26525
+ multiple: false,
26526
+ defaultValue: "stack",
26527
+ options: eventCalendarListLayoutOptions.map((option) => ({
26528
+ value: option.id,
26529
+ label: option.label
26530
+ })),
26531
+ ui: {
26532
+ intent: "display",
26533
+ visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
26534
+ }
26535
+ },
26536
+ {
26537
+ id: "listColumns",
26538
+ type: "select",
26539
+ label: "Grid columns",
26540
+ description: "Number of columns in grid layout",
26541
+ required: false,
26542
+ multiple: false,
26543
+ defaultValue: "3",
26544
+ options: [
26545
+ { value: "2", label: "2 columns" },
26546
+ { value: "3", label: "3 columns" },
26547
+ { value: "4", label: "4 columns" }
26548
+ ],
26549
+ ui: {
26550
+ intent: "display",
26551
+ visibleWhen: { field: "listLayout", equals: "grid" }
26552
+ }
26553
+ },
26554
+ {
26555
+ id: "eventsPerPage",
26556
+ type: "select",
26557
+ label: "Events per page (cards)",
26558
+ description: "Number of events to load initially in card layouts",
26559
+ required: false,
26560
+ multiple: false,
26561
+ defaultValue: "12",
26562
+ options: [
26563
+ { value: "6", label: "6" },
26564
+ { value: "12", label: "12" },
26565
+ { value: "24", label: "24" }
26566
+ ],
26567
+ ui: {
26568
+ intent: "display",
26569
+ visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
26570
+ }
26571
+ },
26572
+ {
26573
+ id: "compactEventsPerPage",
26574
+ type: "select",
26575
+ label: "Events per page (compact)",
26576
+ description: "Number of events to show per page in compact layout",
26577
+ required: false,
26578
+ multiple: false,
26579
+ defaultValue: "10",
26580
+ options: [
26581
+ { value: "10", label: "10" },
26582
+ { value: "20", label: "20" },
26583
+ { value: "30", label: "30" }
26584
+ ],
26585
+ ui: {
26586
+ intent: "display",
26587
+ visibleWhen: { field: "listLayout", equals: "compact" }
26588
+ }
26589
+ },
26590
+ {
26591
+ id: "loadMoreText",
26592
+ type: "text",
26593
+ label: "Load more button text",
26594
+ description: "Text for the load more button",
26595
+ required: false,
26596
+ multiline: false,
26597
+ defaultValue: "Load more events",
26598
+ ui: {
26599
+ intent: "content",
26600
+ visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
26601
+ }
26602
+ },
26603
+ // Calendar options
26604
+ {
26605
+ id: "startOfWeek",
26606
+ type: "select",
26607
+ label: "Week starts on",
26608
+ description: "First day of the week",
26609
+ required: false,
26610
+ multiple: false,
26611
+ defaultValue: "monday",
26612
+ options: [
26613
+ { value: "sunday", label: "Sunday" },
26614
+ { value: "monday", label: "Monday" }
26615
+ ],
26616
+ ui: {
26617
+ intent: "display",
26618
+ visibleWhen: {
26619
+ field: "variant",
26620
+ oneOf: ["combined", "month", "week"]
26167
26621
  }
26168
- },
26169
- {
26170
- id: "scheduleScope",
26171
- type: "select",
26172
- label: "Schedule cadence",
26173
- description: "Restrict this block by recurrence",
26174
- required: false,
26175
- multiple: false,
26176
- defaultValue: "any",
26177
- options: [
26178
- { value: "any", label: "Any cadence" },
26179
- { value: "recurring", label: "Recurring only" },
26180
- { value: "oneOff", label: "One-off only" }
26181
- ],
26182
- ui: {
26183
- intent: "behavior",
26184
- visibleWhen: { field: "eventSurface", equals: "custom" }
26622
+ }
26623
+ },
26624
+ // Combined mode options
26625
+ {
26626
+ id: "calendarTabViews",
26627
+ type: "select",
26628
+ label: "Calendar tab views",
26629
+ description: "Which calendar views to show in the Calendar tab",
26630
+ required: false,
26631
+ multiple: false,
26632
+ defaultValue: "both",
26633
+ options: [
26634
+ { value: "both", label: "Month + Week toggle" },
26635
+ { value: "month", label: "Month only" },
26636
+ { value: "week", label: "Week only" }
26637
+ ],
26638
+ ui: {
26639
+ intent: "display",
26640
+ visibleWhen: { field: "variant", equals: "combined" }
26641
+ }
26642
+ },
26643
+ // Filtering options
26644
+ {
26645
+ id: "kind",
26646
+ type: "select",
26647
+ label: "Show",
26648
+ description: "Restrict this block to all offerings, courses, or events",
26649
+ required: false,
26650
+ multiple: false,
26651
+ defaultValue: "all",
26652
+ options: [
26653
+ { value: "all", label: "All offerings" },
26654
+ { value: "courses", label: "Courses only" },
26655
+ { value: "events", label: "Events only" }
26656
+ ],
26657
+ ui: { intent: "behavior" }
26658
+ },
26659
+ {
26660
+ id: "showFilters",
26661
+ type: "boolean",
26662
+ label: "Show filters",
26663
+ description: "Show category, staff, and venue filters",
26664
+ required: false,
26665
+ defaultValue: true,
26666
+ ui: {
26667
+ intent: "display",
26668
+ visibleWhen: {
26669
+ field: "variant",
26670
+ oneOf: ["combined", "list", "timetable"]
26185
26671
  }
26186
- },
26187
- createSiteOptionSelectField({
26188
- id: "filterCategoryIds",
26189
- label: "Pre-filter by categories",
26190
- description: "Restrict this block to specific event categories",
26191
- required: false,
26192
- multiple: true,
26193
- defaultValue: [],
26194
- optionSource: "eventCategories",
26195
- ui: {
26196
- intent: "behavior",
26197
- searchThreshold: 8,
26198
- visibleWhen: { field: "kind", notEquals: "courses" }
26672
+ }
26673
+ },
26674
+ {
26675
+ id: "showCategoryFilter",
26676
+ type: "select",
26677
+ label: "Show category filter",
26678
+ description: "When to show the category filter dropdown",
26679
+ required: false,
26680
+ multiple: false,
26681
+ defaultValue: "auto",
26682
+ options: [
26683
+ { value: "auto", label: "Auto (when >1 category has events)" },
26684
+ { value: "always", label: "Always" },
26685
+ { value: "never", label: "Never" }
26686
+ ],
26687
+ ui: {
26688
+ intent: "display",
26689
+ visibleWhen: {
26690
+ field: "variant",
26691
+ oneOf: ["combined", "list", "timetable"]
26199
26692
  }
26200
- }),
26201
- createSiteOptionSelectField({
26202
- id: "filterStaffMemberId",
26203
- label: "Pre-filter by staff member",
26204
- description: "Restrict this block to a single staff member",
26205
- required: false,
26206
- multiple: false,
26207
- optionSource: "staffMembers",
26208
- ui: {
26209
- intent: "behavior",
26210
- searchThreshold: 8
26693
+ }
26694
+ },
26695
+ {
26696
+ id: "showVenueFilter",
26697
+ type: "boolean",
26698
+ label: "Show venue filter",
26699
+ description: "Show venue filter dropdown",
26700
+ required: false,
26701
+ defaultValue: false,
26702
+ ui: {
26703
+ intent: "display",
26704
+ visibleWhen: {
26705
+ field: "variant",
26706
+ oneOf: ["combined", "list", "timetable"]
26211
26707
  }
26212
- }),
26213
- createSiteOptionSelectField({
26214
- id: "filterVenueId",
26215
- label: "Pre-filter by venue",
26216
- description: "Restrict this block to a single venue",
26217
- required: false,
26218
- multiple: false,
26219
- optionSource: "venues",
26220
- ui: {
26221
- intent: "behavior",
26222
- searchThreshold: 8
26708
+ }
26709
+ },
26710
+ {
26711
+ id: "showStaffFilter",
26712
+ type: "boolean",
26713
+ label: "Show staff filter",
26714
+ description: "Show staff filter dropdown",
26715
+ required: false,
26716
+ defaultValue: true,
26717
+ ui: {
26718
+ intent: "display",
26719
+ visibleWhen: {
26720
+ field: "variant",
26721
+ oneOf: ["combined", "list", "timetable"]
26223
26722
  }
26224
- }),
26225
- // Card styling
26226
- ...cardStylingFields.filter((f) => f.id === "buttonVariant" || f.id === "buttonText").map((field) => ({
26227
- ...field,
26228
- ui: {
26229
- ...field.ui ?? {},
26230
- intent: field.id === "buttonVariant" ? "style" : "content"
26723
+ }
26724
+ },
26725
+ {
26726
+ id: "showCapacity",
26727
+ type: "boolean",
26728
+ label: "Show available spots",
26729
+ description: "Display remaining capacity on event cards and timetable cells",
26730
+ required: false,
26731
+ defaultValue: true,
26732
+ ui: {
26733
+ intent: "display",
26734
+ visibleWhen: {
26735
+ field: "variant",
26736
+ oneOf: ["combined", "list", "week", "timetable"]
26231
26737
  }
26232
- })),
26233
- {
26234
- ...emptyStateField,
26235
- ui: { ...emptyStateField.ui ?? {}, intent: "display" }
26236
- },
26237
- sectionStylesField({
26238
- id: "_sectionStyles",
26239
- label: "Section styles",
26240
- renderInHeader: false
26241
- })
26242
- ],
26738
+ }
26739
+ },
26740
+ // Block-level pre-filtering
26741
+ {
26742
+ id: "eventSurface",
26743
+ type: "select",
26744
+ label: "Event surface",
26745
+ description: "Choose a semantic event scope",
26746
+ required: false,
26747
+ multiple: false,
26748
+ defaultValue: "all",
26749
+ options: [
26750
+ { value: "all", label: "All events" },
26751
+ { value: "regularClassSchedule", label: "Regular class schedule" },
26752
+ { value: "specialDatedEvents", label: "Workshops and special events" },
26753
+ { value: "custom", label: "Custom" }
26754
+ ],
26755
+ ui: { intent: "behavior" }
26756
+ },
26757
+ {
26758
+ id: "filterEventPresets",
26759
+ type: "select",
26760
+ label: "Pre-filter by event type",
26761
+ description: "Restrict this block to specific event types",
26762
+ required: false,
26763
+ multiple: true,
26764
+ defaultValue: [],
26765
+ options: [
26766
+ { value: "class", label: "Classes" },
26767
+ { value: "workshop", label: "Workshops" },
26768
+ { value: "retreat", label: "Retreats" },
26769
+ { value: "performance", label: "Performances" }
26770
+ ],
26771
+ ui: {
26772
+ intent: "behavior",
26773
+ visibleWhen: { field: "eventSurface", equals: "custom" }
26774
+ }
26775
+ },
26776
+ {
26777
+ id: "scheduleScope",
26778
+ type: "select",
26779
+ label: "Schedule cadence",
26780
+ description: "Restrict this block by recurrence",
26781
+ required: false,
26782
+ multiple: false,
26783
+ defaultValue: "any",
26784
+ options: [
26785
+ { value: "any", label: "Any cadence" },
26786
+ { value: "recurring", label: "Recurring only" },
26787
+ { value: "oneOff", label: "One-off only" }
26788
+ ],
26789
+ ui: {
26790
+ intent: "behavior",
26791
+ visibleWhen: { field: "eventSurface", equals: "custom" }
26792
+ }
26793
+ },
26794
+ createSiteOptionSelectField({
26795
+ id: "filterCategoryIds",
26796
+ label: "Pre-filter by categories",
26797
+ description: "Restrict this block to specific event categories",
26798
+ required: false,
26799
+ multiple: true,
26800
+ defaultValue: [],
26801
+ optionSource: "eventCategories",
26802
+ ui: {
26803
+ intent: "behavior",
26804
+ searchThreshold: 8,
26805
+ visibleWhen: { field: "kind", notEquals: "courses" }
26806
+ }
26807
+ }),
26808
+ createSiteOptionSelectField({
26809
+ id: "filterStaffMemberId",
26810
+ label: "Pre-filter by staff member",
26811
+ description: "Restrict this block to a single staff member",
26812
+ required: false,
26813
+ multiple: false,
26814
+ optionSource: "staffMembers",
26815
+ ui: {
26816
+ intent: "behavior",
26817
+ searchThreshold: 8
26818
+ }
26819
+ }),
26820
+ createSiteOptionSelectField({
26821
+ id: "filterVenueId",
26822
+ label: "Pre-filter by venue",
26823
+ description: "Restrict this block to a single venue",
26824
+ required: false,
26825
+ multiple: false,
26826
+ optionSource: "venues",
26827
+ ui: {
26828
+ intent: "behavior",
26829
+ searchThreshold: 8
26830
+ }
26831
+ }),
26832
+ // Card styling
26833
+ ...cardStylingFields.filter((f) => f.id === "buttonVariant" || f.id === "buttonText").map((field) => ({
26834
+ ...field,
26835
+ ui: {
26836
+ ...field.ui ?? {},
26837
+ intent: field.id === "buttonVariant" ? "style" : "content"
26838
+ }
26839
+ })),
26840
+ {
26841
+ ...emptyStateField,
26842
+ ui: { ...emptyStateField.ui ?? {}, intent: "display" }
26843
+ },
26844
+ sectionStylesField({
26845
+ id: "_sectionStyles",
26846
+ label: "Section styles",
26847
+ renderInHeader: false
26848
+ })
26849
+ ];
26850
+ eventCalendarVariants = {
26851
+ combined: eventCalendarLayout[0],
26852
+ month: eventCalendarLayout[0],
26853
+ week: eventCalendarLayout[0],
26854
+ timetable: eventCalendarLayout[0],
26855
+ list: eventCalendarLayout[0]
26856
+ };
26857
+ eventCalendarDerivedFields = [
26858
+ {
26859
+ id: "displayMode",
26860
+ type: "select",
26861
+ required: false,
26862
+ multiple: false,
26863
+ options: [
26864
+ { value: "combined" },
26865
+ { value: "month" },
26866
+ { value: "week" },
26867
+ { value: "timetable" },
26868
+ { value: "list" }
26869
+ ]
26870
+ },
26871
+ {
26872
+ id: "listLayout",
26873
+ type: "select",
26874
+ required: false,
26875
+ multiple: false,
26876
+ options: eventCalendarListLayoutOptions.map((option) => ({
26877
+ value: option.id
26878
+ }))
26879
+ }
26880
+ ];
26881
+ eventCalendarContentShape = {
26882
+ additionalFields: eventCalendarDerivedFields,
26883
+ variants: eventCalendarVariants,
26884
+ skipSectionStyles: true
26885
+ };
26886
+ eventCalendarConfig = {
26887
+ id: "block.event-calendar",
26888
+ version: "3.6.0",
26889
+ title: "Event Calendar",
26890
+ titleSource: "heading",
26891
+ description: "Display events with calendar, list, or combined views with filtering",
26892
+ // Preserve legacy section styles field configuration (renderInHeader: false).
26893
+ skipSectionStyles: true,
26894
+ additionalFields: eventCalendarAdditionalFields,
26243
26895
  styleTokens: { background: "surface", typography: "body", spacing: "md" },
26244
26896
  behaviours: {
26245
26897
  supportsThemeSwitching: true,
@@ -26259,109 +26911,21 @@ var init_event_calendar = __esm({
26259
26911
  "filter"
26260
26912
  ],
26261
26913
  icon: "CalendarDays",
26262
- layout: [
26263
- styledSection({
26264
- children: sectionContainer(
26265
- [
26266
- // Optional heading
26267
- text({ as: "h2" }, bind("content.heading"), when("content.heading")),
26268
- // Optional description
26269
- richText(
26270
- { className: "rb-prose rb-max-w-none" },
26271
- bind("content.description"),
26272
- when("content.description")
26273
- ),
26274
- // Event calendar component (handles all display modes)
26275
- el(
26276
- "event-calendar",
26277
- withApiBindings({
26278
- events: { $bind: { from: "data.events" } },
26279
- stage: {
26280
- $bind: { from: "$root.previewStage", fallback: "published" }
26281
- },
26282
- // Display mode
26283
- displayMode: {
26284
- $bind: { from: "content.displayMode", fallback: "combined" }
26285
- },
26286
- // List options
26287
- listLayout: { $bind: { from: "content.listLayout" } },
26288
- listColumns: { $bind: { from: "content.listColumns" } },
26289
- // Legacy compatibility: older event-calendar content used layout/columns
26290
- layout: { $bind: { from: "content.layout" } },
26291
- columns: { $bind: { from: "content.columns" } },
26292
- eventsPerPage: {
26293
- $bind: { from: "content.eventsPerPage", fallback: "12" }
26294
- },
26295
- compactEventsPerPage: {
26296
- $bind: { from: "content.compactEventsPerPage", fallback: "10" }
26297
- },
26298
- loadMoreText: {
26299
- $bind: {
26300
- from: "content.loadMoreText",
26301
- fallback: "Load more events"
26302
- }
26303
- },
26304
- // Calendar options
26305
- startOfWeek: {
26306
- $bind: { from: "content.startOfWeek", fallback: "monday" }
26307
- },
26308
- calendarTabViews: {
26309
- $bind: { from: "content.calendarTabViews", fallback: "both" }
26310
- },
26311
- // Filtering options
26312
- showFilters: {
26313
- $bind: { from: "content.showFilters", fallback: true }
26314
- },
26315
- showCategoryFilter: {
26316
- $bind: { from: "content.showCategoryFilter", fallback: "auto" }
26317
- },
26318
- showVenueFilter: {
26319
- $bind: { from: "content.showVenueFilter", fallback: false }
26320
- },
26321
- showStaffFilter: {
26322
- $bind: { from: "content.showStaffFilter", fallback: true }
26323
- },
26324
- showCapacity: {
26325
- $bind: { from: "content.showCapacity", fallback: true }
26326
- },
26327
- kind: { $bind: { from: "content.kind", fallback: "all" } },
26328
- eventSurface: {
26329
- $bind: { from: "content.eventSurface", fallback: "all" }
26330
- },
26331
- filterEventPresets: {
26332
- $bind: { from: "content.filterEventPresets" }
26333
- },
26334
- scheduleScope: {
26335
- $bind: { from: "content.scheduleScope", fallback: "any" }
26336
- },
26337
- filterCategoryIds: {
26338
- $bind: { from: "content.filterCategoryIds" }
26339
- },
26340
- filterStaffMemberId: {
26341
- $bind: { from: "content.filterStaffMemberId" }
26342
- },
26343
- filterVenueId: { $bind: { from: "content.filterVenueId" } },
26344
- // Styling
26345
- buttonVariant: {
26346
- $bind: { from: "content.buttonVariant", fallback: "primary" }
26347
- },
26348
- buttonText: {
26349
- $bind: { from: "content.buttonText", fallback: "View event" }
26350
- },
26351
- emptyMessage: { $bind: { from: "content.emptyMessage" } }
26352
- })
26353
- )
26354
- ],
26355
- {
26356
- gap: "lg"
26357
- }
26358
- ),
26359
- // sectionContainer (rb-container) already provides horizontal padding
26360
- baseClass: "",
26361
- spacing: "comfortable"
26362
- })
26363
- ]
26364
- });
26914
+ layout: eventCalendarLayout,
26915
+ variants: eventCalendarVariants,
26916
+ defaultVariant: "combined",
26917
+ variantOptions: {
26918
+ combined: { label: "Combined" },
26919
+ month: { label: "Month" },
26920
+ week: { label: "Week" },
26921
+ timetable: { label: "Timetable" },
26922
+ list: { label: "List" }
26923
+ }
26924
+ };
26925
+ eventCalendarManifest = createBlockManifestWithContentShape(
26926
+ eventCalendarConfig,
26927
+ eventCalendarContentShape
26928
+ );
26365
26929
  eventCalendarBlockDefinition = {
26366
26930
  manifest: eventCalendarManifest,
26367
26931
  normalizeContent: normalizeEventCalendarContent,
@@ -26395,7 +26959,7 @@ var init_event_calendar = __esm({
26395
26959
  });
26396
26960
 
26397
26961
  // ../blocks/src/system/blocks/events/index.ts
26398
- var init_events = __esm({
26962
+ var init_events2 = __esm({
26399
26963
  "../blocks/src/system/blocks/events/index.ts"() {
26400
26964
  "use strict";
26401
26965
  init_shared3();
@@ -30626,6 +31190,14 @@ function mediaPanelCapable() {
30626
31190
  itemSurfaces: "unsupported"
30627
31191
  });
30628
31192
  }
31193
+ function scheduleDetailsCapable() {
31194
+ return declareBlockDesignCapability({
31195
+ sectionSurfaces: "supported",
31196
+ contentFrames: ["plain"],
31197
+ itemSurfaces: "unsupported",
31198
+ tileTreatments: scheduleTileTreatments
31199
+ });
31200
+ }
30629
31201
  function defaultBoundaryBias(visualWeight) {
30630
31202
  return visualWeight === "featured" || visualWeight === "immersive" ? "clear" : "soft";
30631
31203
  }
@@ -30664,7 +31236,7 @@ function ensureSystemBlockDefinitionsRegistered() {
30664
31236
  registerBlockDefinition(definition);
30665
31237
  }
30666
31238
  }
30667
- var heroSectionHeights, heroImageSurfaceTreatments, heroImageSurfaceMotions, standardEyebrowTreatments, animatedEyebrowTreatments, allSectionSurfaces, heroSectionSurfaces, heroFlow, bodyFlow, mediaFlow, proofFlow, offeringsFlow, conversionFlow, siteChromeFlow, transactionalFlow, utilityFlow, systemBlockDefinitionsRaw, systemBlockDefinitions, defaultsRegistered;
31239
+ var heroSectionHeights, heroImageSurfaceTreatments, heroImageSurfaceMotions, standardEyebrowTreatments, animatedEyebrowTreatments, allSectionSurfaces, heroSectionSurfaces, scheduleTileTreatments, heroFlow, bodyFlow, mediaFlow, proofFlow, offeringsFlow, conversionFlow, siteChromeFlow, transactionalFlow, utilityFlow, systemBlockDefinitionsRaw, systemBlockDefinitions, defaultsRegistered;
30668
31240
  var init_blocks2 = __esm({
30669
31241
  "../blocks/src/system/blocks/index.ts"() {
30670
31242
  "use strict";
@@ -30690,7 +31262,7 @@ var init_blocks2 = __esm({
30690
31262
  init_course_registration();
30691
31263
  init_event_details();
30692
31264
  init_course_details();
30693
- init_events();
31265
+ init_events2();
30694
31266
  init_embed();
30695
31267
  init_image_gallery();
30696
31268
  init_video_grid();
@@ -30725,7 +31297,7 @@ var init_blocks2 = __esm({
30725
31297
  init_event_details();
30726
31298
  init_course_registration();
30727
31299
  init_course_details();
30728
- init_events();
31300
+ init_events2();
30729
31301
  init_embed();
30730
31302
  init_team_members();
30731
31303
  init_image_gallery();
@@ -30772,14 +31344,21 @@ var init_blocks2 = __esm({
30772
31344
  allSectionSurfaces = [
30773
31345
  "base",
30774
31346
  "muted-band",
30775
- "accent-band"
31347
+ "accent-band",
31348
+ "brand-depth-band"
30776
31349
  ];
30777
31350
  heroSectionSurfaces = [
30778
31351
  "base",
30779
31352
  "muted-band",
30780
31353
  "accent-band",
31354
+ "brand-depth-band",
30781
31355
  "hero-image"
30782
31356
  ];
31357
+ scheduleTileTreatments = [
31358
+ "default",
31359
+ "quiet",
31360
+ "brand-depth"
31361
+ ];
30783
31362
  heroFlow = {
30784
31363
  defaultRole: "hero",
30785
31364
  defaultWeight: "dominant",
@@ -30988,7 +31567,7 @@ var init_blocks2 = __esm({
30988
31567
  flow: conversionFlow,
30989
31568
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "form", weight: "standard" })]
30990
31569
  })),
30991
- withDesignCapability("block.event-details", eventDetailsBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
31570
+ withDesignCapability("block.event-details", eventDetailsBlockDefinition, scheduleDetailsCapable(), defineBlockDesignMetadata({
30992
31571
  flow: offeringsFlow,
30993
31572
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
30994
31573
  })),
@@ -30996,7 +31575,7 @@ var init_blocks2 = __esm({
30996
31575
  flow: conversionFlow,
30997
31576
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "form", weight: "standard" })]
30998
31577
  })),
30999
- withDesignCapability("block.course-details", courseDetailsBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
31578
+ withDesignCapability("block.course-details", courseDetailsBlockDefinition, scheduleDetailsCapable(), defineBlockDesignMetadata({
31000
31579
  flow: offeringsFlow,
31001
31580
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
31002
31581
  })),
@@ -31011,7 +31590,13 @@ var init_blocks2 = __esm({
31011
31590
  })),
31012
31591
  withDesignCapability("block.event-calendar", eventCalendarBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
31013
31592
  flow: offeringsFlow,
31014
- layoutProfiles: [layoutProfile({ variantKey: "default", family: "grid", weight: "standard" })]
31593
+ layoutProfiles: [
31594
+ layoutProfile({ variantKey: "combined", family: "grid", weight: "standard" }),
31595
+ layoutProfile({ variantKey: "list", family: "stack", weight: "standard" }),
31596
+ layoutProfile({ variantKey: "month", family: "grid", weight: "standard" }),
31597
+ layoutProfile({ variantKey: "week", family: "stack", weight: "standard" }),
31598
+ layoutProfile({ variantKey: "timetable", family: "stack", weight: "standard" })
31599
+ ]
31015
31600
  })),
31016
31601
  // Friendly wrapper blocks
31017
31602
  withDesignCapability("block.team-members", teamMembersBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
@@ -32377,6 +32962,7 @@ var init_src5 = __esm({
32377
32962
  init_routes();
32378
32963
  init_bookings();
32379
32964
  init_bookingConfig();
32965
+ init_bookingRecords();
32380
32966
  init_emailSettings();
32381
32967
  init_eventEmailTemplates();
32382
32968
  init_resources();