@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
@@ -1028,6 +1028,14 @@ var ENDPOINT_DEFINITIONS = {
1028
1028
  auth: "user",
1029
1029
  responseKind: "json"
1030
1030
  },
1031
+ exportAppointmentServicesCsv: {
1032
+ path: "/sites/{siteId}/bookings/services/export.csv",
1033
+ method: "GET",
1034
+ tags: ["site-{siteId}", "bookings", "appointment-services-{siteId}"],
1035
+ errors: [],
1036
+ auth: "user",
1037
+ responseKind: "blob"
1038
+ },
1031
1039
  createAppointmentService: {
1032
1040
  path: "/sites/{siteId}/bookings/services",
1033
1041
  method: "POST",
@@ -1296,6 +1304,14 @@ var ENDPOINT_DEFINITIONS = {
1296
1304
  auth: "user",
1297
1305
  responseKind: "json"
1298
1306
  },
1307
+ exportCoursesCsv: {
1308
+ path: "/sites/{siteId}/bookings/courses/export.csv",
1309
+ method: "GET",
1310
+ tags: ["site-{siteId}", "bookings", "courses-{siteId}"],
1311
+ errors: [],
1312
+ auth: "user",
1313
+ responseKind: "blob"
1314
+ },
1299
1315
  createCourse: {
1300
1316
  path: "/sites/{siteId}/bookings/courses",
1301
1317
  method: "POST",
@@ -1395,6 +1411,14 @@ var ENDPOINT_DEFINITIONS = {
1395
1411
  responseKind: "json",
1396
1412
  errors: []
1397
1413
  },
1414
+ exportCourseWaitlistCsv: {
1415
+ path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist/export.csv",
1416
+ method: "GET",
1417
+ tags: ["site-{siteId}", "bookings", "courses-{courseId}"],
1418
+ auth: "user",
1419
+ responseKind: "blob",
1420
+ errors: []
1421
+ },
1398
1422
  updateCourseEnrollment: {
1399
1423
  path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}",
1400
1424
  method: "PATCH",
@@ -3990,6 +4014,14 @@ var ENDPOINT_DEFINITIONS = {
3990
4014
  auth: "user",
3991
4015
  responseKind: "json"
3992
4016
  },
4017
+ exportEventSeriesCsv: {
4018
+ path: "/sites/{siteId}/bookings/event-series/export.csv",
4019
+ method: "GET",
4020
+ tags: ["site-{siteId}", "bookings", "event-series-{siteId}"],
4021
+ errors: [],
4022
+ auth: "user",
4023
+ responseKind: "blob"
4024
+ },
3993
4025
  createEventSeries: {
3994
4026
  path: "/sites/{siteId}/bookings/event-series",
3995
4027
  method: "POST",
@@ -4058,6 +4090,60 @@ var ENDPOINT_DEFINITIONS = {
4058
4090
  errors: [],
4059
4091
  responseKind: "blob"
4060
4092
  },
4093
+ getParticipantMessageRecipients: {
4094
+ path: "/sites/{siteId}/bookings/participant-messaging/recipients",
4095
+ method: "POST",
4096
+ tags: ["site-{siteId}"],
4097
+ auth: "user",
4098
+ errors: [
4099
+ "validation:invalid_input",
4100
+ "auth:forbidden",
4101
+ "resource:not_found",
4102
+ "server:internal_error"
4103
+ ],
4104
+ responseKind: "json"
4105
+ },
4106
+ sendParticipantMessage: {
4107
+ path: "/sites/{siteId}/bookings/participant-messaging/send",
4108
+ method: "POST",
4109
+ tags: ["site-{siteId}"],
4110
+ auth: "user",
4111
+ errors: [
4112
+ "validation:invalid_input",
4113
+ "auth:forbidden",
4114
+ "resource:not_found",
4115
+ "resource:conflict",
4116
+ "server:internal_error"
4117
+ ],
4118
+ responseKind: "json"
4119
+ },
4120
+ testParticipantMessage: {
4121
+ path: "/sites/{siteId}/bookings/participant-messaging/test",
4122
+ method: "POST",
4123
+ tags: ["site-{siteId}"],
4124
+ auth: "user",
4125
+ errors: [
4126
+ "validation:invalid_input",
4127
+ "auth:forbidden",
4128
+ "resource:not_found",
4129
+ "resource:conflict",
4130
+ "server:internal_error"
4131
+ ],
4132
+ responseKind: "json"
4133
+ },
4134
+ listParticipantMessageHistory: {
4135
+ path: "/sites/{siteId}/bookings/participant-messaging/history",
4136
+ method: "POST",
4137
+ tags: ["site-{siteId}"],
4138
+ auth: "user",
4139
+ errors: [
4140
+ "validation:invalid_input",
4141
+ "auth:forbidden",
4142
+ "resource:not_found",
4143
+ "server:internal_error"
4144
+ ],
4145
+ responseKind: "json"
4146
+ },
4061
4147
  listEventSeriesWaitlist: {
4062
4148
  path: "/sites/{siteId}/bookings/event-series/{seriesId}/waitlist",
4063
4149
  method: "GET",
@@ -4066,6 +4152,14 @@ var ENDPOINT_DEFINITIONS = {
4066
4152
  responseKind: "json",
4067
4153
  errors: []
4068
4154
  },
4155
+ exportEventSeriesWaitlistCsv: {
4156
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/waitlist/export.csv",
4157
+ method: "GET",
4158
+ tags: ["site-{siteId}", "bookings", "event-series-{seriesId}"],
4159
+ auth: "user",
4160
+ responseKind: "blob",
4161
+ errors: []
4162
+ },
4069
4163
  addEventOccurrenceAttendee: {
4070
4164
  path: "/sites/{siteId}/bookings/event-series/{seriesId}/occurrences/{occurrenceId}/attendees",
4071
4165
  method: "POST",
@@ -4782,6 +4876,14 @@ var ENDPOINT_DEFINITIONS = {
4782
4876
  auth: "user",
4783
4877
  responseKind: "json"
4784
4878
  },
4879
+ exportSiteCustomerPassesCsv: {
4880
+ path: "/sites/{siteId}/bookings/customer-passes/export.csv",
4881
+ method: "GET",
4882
+ tags: ["site-{siteId}", "bookings", "customer-passes-{siteId}"],
4883
+ auth: "user",
4884
+ responseKind: "blob",
4885
+ errors: []
4886
+ },
4785
4887
  listSiteCustomerMemberships: {
4786
4888
  path: "/sites/{siteId}/bookings/customer-memberships",
4787
4889
  method: "GET",
@@ -4845,6 +4947,22 @@ var ENDPOINT_DEFINITIONS = {
4845
4947
  auth: "user",
4846
4948
  responseKind: "blob"
4847
4949
  },
4950
+ exportBookingLedgerCsv: {
4951
+ path: "/sites/{siteId}/bookings/ledger/export.csv",
4952
+ method: "GET",
4953
+ tags: ["site-{siteId}", "bookings", "booking-ledger-{siteId}"],
4954
+ errors: [],
4955
+ auth: "user",
4956
+ responseKind: "blob"
4957
+ },
4958
+ exportBookingQuestionAnswersCsv: {
4959
+ path: "/sites/{siteId}/bookings/intake-answers/export.csv",
4960
+ method: "GET",
4961
+ tags: ["site-{siteId}", "bookings", "intake-answers-{siteId}"],
4962
+ errors: [],
4963
+ auth: "user",
4964
+ responseKind: "blob"
4965
+ },
4848
4966
  // Site logs
4849
4967
  listSiteActivityLogs: {
4850
4968
  path: "/sites/{siteId}/logs/activity",
@@ -6588,7 +6706,11 @@ function resolveRepeaterGridColumnFieldId(options) {
6588
6706
 
6589
6707
  // ../blocks/src/system/manifest/schema.ts
6590
6708
  var visibilityLevels = ["admin", "designer", "author"];
6591
- var siteOptionSources = ["eventCategories", "venues", "staffMembers"];
6709
+ var siteOptionSources = [
6710
+ "eventCategories",
6711
+ "venues",
6712
+ "staffMembers"
6713
+ ];
6592
6714
  var mediaDeliverySchema = z3.object({
6593
6715
  sizes: z3.string().optional(),
6594
6716
  widthCandidates: z3.array(z3.number().int().positive()).optional(),
@@ -6626,7 +6748,10 @@ var uiSchema = z3.object({
6626
6748
  hidden: z3.boolean().optional(),
6627
6749
  hideLabel: z3.boolean().optional(),
6628
6750
  hideDescription: z3.boolean().optional(),
6629
- showCharCount: z3.union([z3.number().int().positive(), z3.object({ max: z3.number().int().positive() })]).optional(),
6751
+ showCharCount: z3.union([
6752
+ z3.number().int().positive(),
6753
+ z3.object({ max: z3.number().int().positive() })
6754
+ ]).optional(),
6630
6755
  showSlugPreview: z3.boolean().optional(),
6631
6756
  variant: z3.enum(["full", "inline", "limited", "media", "notes"]).optional(),
6632
6757
  richTextVariant: z3.enum(["full", "inline", "limited", "media", "notes"]).optional(),
@@ -6636,10 +6761,7 @@ var uiSchema = z3.object({
6636
6761
  showMediaPreview: z3.boolean().optional(),
6637
6762
  showMediaOverlayActions: z3.boolean().optional(),
6638
6763
  mediaDelivery: mediaDeliverySchema.optional(),
6639
- mediaDeliveryByVariant: z3.record(
6640
- z3.string(),
6641
- mediaDeliverySchema
6642
- ).optional(),
6764
+ mediaDeliveryByVariant: z3.record(z3.string(), mediaDeliverySchema).optional(),
6643
6765
  // Optional input hints for validators/widgets
6644
6766
  inputType: z3.enum(["text", "email", "tel", "number"]).optional(),
6645
6767
  min: z3.number().optional(),
@@ -6747,7 +6869,9 @@ var richTextFieldSchema = baseFieldSchema.extend({
6747
6869
  });
6748
6870
  var mediaFieldSchema = baseFieldSchema.extend({
6749
6871
  type: z3.literal("media"),
6750
- mediaKinds: z3.array(z3.enum(["image", "video", "audio", "document", "spreadsheet", "archive"])).default(["image"]),
6872
+ mediaKinds: z3.array(
6873
+ z3.enum(["image", "video", "audio", "document", "spreadsheet", "archive"])
6874
+ ).default(["image"]),
6751
6875
  aspectRatio: z3.string().optional()
6752
6876
  });
6753
6877
  var booleanFieldSchema = baseFieldSchema.extend({
@@ -6869,7 +6993,9 @@ var referenceFieldSchema = baseFieldSchema.extend({
6869
6993
  var itemTypeSchema = z3.object({
6870
6994
  label: z3.string().min(1),
6871
6995
  icon: z3.string().optional(),
6872
- fields: z3.lazy(() => getFieldSchemaInternal().array().min(1, "Item type requires at least one field"))
6996
+ fields: z3.lazy(
6997
+ () => getFieldSchemaInternal().array().min(1, "Item type requires at least one field")
6998
+ )
6873
6999
  });
6874
7000
  var repeaterFieldSchema = baseFieldSchema.extend({
6875
7001
  type: z3.literal("repeater"),
@@ -6879,7 +7005,9 @@ var repeaterFieldSchema = baseFieldSchema.extend({
6879
7005
  maxItems: z3.number().int().positive().optional(),
6880
7006
  // Monomorphic mode
6881
7007
  schema: z3.object({
6882
- fields: z3.lazy(() => getFieldSchemaInternal().array().min(1, "Repeater requires at least one field"))
7008
+ fields: z3.lazy(
7009
+ () => getFieldSchemaInternal().array().min(1, "Repeater requires at least one field")
7010
+ )
6883
7011
  }).optional(),
6884
7012
  // Polymorphic mode
6885
7013
  polymorphic: z3.boolean().optional(),
@@ -6925,13 +7053,19 @@ var repeaterFieldSchema = baseFieldSchema.extend({
6925
7053
  const itemTypes = Object.values(
6926
7054
  data.itemTypes
6927
7055
  );
6928
- return itemTypes.every((itemType) => Array.isArray(itemType.fields) && requiredFieldIds.every((requiredId) => itemType.fields?.some((field) => field.id === requiredId)));
7056
+ return itemTypes.every(
7057
+ (itemType) => Array.isArray(itemType.fields) && requiredFieldIds.every(
7058
+ (requiredId) => itemType.fields?.some((field) => field.id === requiredId)
7059
+ )
7060
+ );
6929
7061
  }
6930
7062
  const schemaFields = data.schema?.fields;
6931
7063
  if (!schemaFields) {
6932
7064
  return true;
6933
7065
  }
6934
- return requiredFieldIds.every((requiredId) => schemaFields.some((field) => field.id === requiredId));
7066
+ return requiredFieldIds.every(
7067
+ (requiredId) => schemaFields.some((field) => field.id === requiredId)
7068
+ );
6935
7069
  },
6936
7070
  {
6937
7071
  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`,
@@ -6959,7 +7093,9 @@ var repeaterFieldSchema = baseFieldSchema.extend({
6959
7093
  if (!schemaFields) {
6960
7094
  return true;
6961
7095
  }
6962
- const field = schemaFields.find((candidate) => candidate.id === labelField);
7096
+ const field = schemaFields.find(
7097
+ (candidate) => candidate.id === labelField
7098
+ );
6963
7099
  return field?.type === "text";
6964
7100
  },
6965
7101
  {
@@ -6970,13 +7106,17 @@ var repeaterFieldSchema = baseFieldSchema.extend({
6970
7106
  var groupFieldSchema = baseFieldSchema.extend({
6971
7107
  type: z3.literal("group"),
6972
7108
  schema: z3.object({
6973
- fields: z3.lazy(() => getFieldSchemaInternal().array().min(1, "Group requires at least one field"))
7109
+ fields: z3.lazy(
7110
+ () => getFieldSchemaInternal().array().min(1, "Group requires at least one field")
7111
+ )
6974
7112
  })
6975
7113
  });
6976
7114
  var modalFieldSchema = baseFieldSchema.extend({
6977
7115
  type: z3.literal("modal"),
6978
7116
  schema: z3.object({
6979
- fields: z3.lazy(() => getFieldSchemaInternal().array().min(1, "Modal requires at least one field"))
7117
+ fields: z3.lazy(
7118
+ () => getFieldSchemaInternal().array().min(1, "Modal requires at least one field")
7119
+ )
6980
7120
  })
6981
7121
  });
6982
7122
  var numberFieldSchema = baseFieldSchema.extend({
@@ -7086,31 +7226,35 @@ function expectParsedSelectField(field) {
7086
7226
  return field;
7087
7227
  }
7088
7228
  function createSiteOptionSelectField(input) {
7089
- return expectParsedSelectField(parseFieldDefinition({
7090
- ...input,
7091
- type: "select",
7092
- options: [],
7093
- multiple: input.multiple ?? false,
7094
- source: { kind: "site", optionSource: input.optionSource },
7095
- ui: {
7096
- ...input.ui ?? {},
7097
- widget: "siteOptionPicker",
7098
- siteOptionSource: input.optionSource
7099
- }
7100
- }));
7229
+ return expectParsedSelectField(
7230
+ parseFieldDefinition({
7231
+ ...input,
7232
+ type: "select",
7233
+ options: [],
7234
+ multiple: input.multiple ?? false,
7235
+ source: { kind: "site", optionSource: input.optionSource },
7236
+ ui: {
7237
+ ...input.ui ?? {},
7238
+ widget: "siteOptionPicker",
7239
+ siteOptionSource: input.optionSource
7240
+ }
7241
+ })
7242
+ );
7101
7243
  }
7102
7244
  function createSdkSelectField(input) {
7103
- return expectParsedSelectField(parseFieldDefinition({
7104
- ...input,
7105
- type: "select",
7106
- options: input.options,
7107
- multiple: input.multiple ?? false,
7108
- source: { kind: "sdk" },
7109
- ui: {
7110
- ...input.ui ?? {},
7111
- widget: "sdkSelect"
7112
- }
7113
- }));
7245
+ return expectParsedSelectField(
7246
+ parseFieldDefinition({
7247
+ ...input,
7248
+ type: "select",
7249
+ options: input.options,
7250
+ multiple: input.multiple ?? false,
7251
+ source: { kind: "sdk" },
7252
+ ui: {
7253
+ ...input.ui ?? {},
7254
+ widget: "sdkSelect"
7255
+ }
7256
+ })
7257
+ );
7114
7258
  }
7115
7259
  var slotSchema = z3.object({
7116
7260
  id: z3.string().min(1),
@@ -7121,8 +7265,20 @@ var slotSchema = z3.object({
7121
7265
  help: z3.string().optional(),
7122
7266
  visibleRoles: z3.array(z3.enum(visibilityLevels)).optional()
7123
7267
  });
7124
- var typographyTokens = ["display", "heading", "subheading", "body", "caption"];
7125
- var colorTokens = ["background", "surface", "foreground", "accent", "muted"];
7268
+ var typographyTokens = [
7269
+ "display",
7270
+ "heading",
7271
+ "subheading",
7272
+ "body",
7273
+ "caption"
7274
+ ];
7275
+ var colorTokens = [
7276
+ "background",
7277
+ "surface",
7278
+ "foreground",
7279
+ "accent",
7280
+ "muted"
7281
+ ];
7126
7282
  var spacingTokens = ["none", "xs", "sm", "md", "lg", "xl"];
7127
7283
  var radiusTokens = ["none", "sm", "md", "lg", "full"];
7128
7284
  var styleTokenSchema = z3.object({
@@ -7142,7 +7298,14 @@ var behaviourSchema = z3.object({
7142
7298
  // Block manages its own wrapper (for sticky/fixed positioning)
7143
7299
  managesOwnWrapper: z3.boolean().optional()
7144
7300
  });
7145
- var blockCategoryEnum = z3.enum(["marketing", "content", "blog", "media", "layout", "interactive"]);
7301
+ var blockCategoryEnum = z3.enum([
7302
+ "marketing",
7303
+ "content",
7304
+ "blog",
7305
+ "media",
7306
+ "layout",
7307
+ "interactive"
7308
+ ]);
7146
7309
  var manifestSchema = z3.object({
7147
7310
  name: z3.string().min(1),
7148
7311
  version: z3.string().min(1),
@@ -8165,6 +8328,20 @@ var applyAppointmentSetupRequestSchema = z6.object({
8165
8328
  bookingNotice: appointmentSetupBookingNoticeSchema
8166
8329
  });
8167
8330
 
8331
+ // ../api/src/bookingRecords.ts
8332
+ var BOOKING_QUESTION_ANSWER_EXPORT_SCOPES = {
8333
+ site: "site",
8334
+ appointments: "appointments",
8335
+ eventSeries: "event_series",
8336
+ course: "course"
8337
+ };
8338
+ var BOOKING_QUESTION_ANSWER_EXPORT_SCOPE_VALUES = [
8339
+ BOOKING_QUESTION_ANSWER_EXPORT_SCOPES.site,
8340
+ BOOKING_QUESTION_ANSWER_EXPORT_SCOPES.appointments,
8341
+ BOOKING_QUESTION_ANSWER_EXPORT_SCOPES.eventSeries,
8342
+ BOOKING_QUESTION_ANSWER_EXPORT_SCOPES.course
8343
+ ];
8344
+
8168
8345
  // ../api/src/common/cancellation.ts
8169
8346
  var STAFF_CANCELLATION_CONTEXT_UI_CATEGORIES = [
8170
8347
  "customer_requested",
@@ -9192,6 +9369,24 @@ function resolveVariantKey(manifest, content) {
9192
9369
  return null;
9193
9370
  }
9194
9371
 
9372
+ // ../theme-core/src/site-styles/appearancePresetResolution.ts
9373
+ function assertValidOptionGroups(preset2) {
9374
+ preset2.optionGroups?.forEach((group) => {
9375
+ const selectedOption = group.options.find(
9376
+ (option) => option.id === group.selectedOptionId
9377
+ );
9378
+ if (!selectedOption) {
9379
+ throw new Error(
9380
+ `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
9381
+ );
9382
+ }
9383
+ });
9384
+ }
9385
+ function defineBlockAppearancePreset(preset2) {
9386
+ assertValidOptionGroups(preset2);
9387
+ return preset2;
9388
+ }
9389
+
9195
9390
  // ../theme-core/src/site-styles/types.ts
9196
9391
  function asDesignBlockId(value) {
9197
9392
  return brandNonEmptyString(value, "DesignBlockId");
@@ -9273,6 +9468,11 @@ function flushPanelFrame(options) {
9273
9468
  function defineFrameCapability(capability) {
9274
9469
  return capability;
9275
9470
  }
9471
+ var tileTreatmentValues = [
9472
+ "default",
9473
+ "quiet",
9474
+ "brand-depth"
9475
+ ];
9276
9476
  var eyebrowTreatmentValues = [
9277
9477
  "plain",
9278
9478
  "pill",
@@ -9288,31 +9488,13 @@ function defineBlockDesignCapability(capability) {
9288
9488
  imageSurfaceTreatments: capability.imageSurfaceTreatments ?? ["none"],
9289
9489
  imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
9290
9490
  testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"],
9491
+ tileTreatments: capability.tileTreatments ?? ["default"],
9291
9492
  eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"]
9292
9493
  };
9293
9494
  }
9294
9495
 
9295
- // ../theme-core/src/site-styles/appearancePresets.ts
9296
- function assertValidOptionGroups(preset2) {
9297
- preset2.optionGroups?.forEach((group) => {
9298
- const selectedOption = group.options.find(
9299
- (option) => option.id === group.selectedOptionId
9300
- );
9301
- if (!selectedOption) {
9302
- throw new Error(
9303
- `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
9304
- );
9305
- }
9306
- });
9307
- }
9308
- function defineBlockAppearancePreset(preset2) {
9309
- assertValidOptionGroups(preset2);
9310
- return preset2;
9311
- }
9312
- function defineSiteChromeAppearancePreset(preset2) {
9313
- return preset2;
9314
- }
9315
- var appearancePresets = [
9496
+ // ../theme-core/src/site-styles/blockAppearancePresets.ts
9497
+ var blockAppearancePresets = [
9316
9498
  defineBlockAppearancePreset({
9317
9499
  kind: "block-design",
9318
9500
  id: "hero-immersive-image",
@@ -9438,6 +9620,24 @@ var appearancePresets = [
9438
9620
  eyebrowTreatment: "accent-pill-bounce"
9439
9621
  }
9440
9622
  }),
9623
+ defineBlockAppearancePreset({
9624
+ kind: "block-design",
9625
+ id: "hero-brand-depth-expressive",
9626
+ target: "hero",
9627
+ label: "Expressive brand-depth hero",
9628
+ blockKinds: ["block.hero"],
9629
+ constraints: {
9630
+ layoutFamilies: ["centered", "compact"]
9631
+ },
9632
+ design: {
9633
+ sectionSurface: "brand-depth-band",
9634
+ contentFrame: plainFrame,
9635
+ itemSurface: "none",
9636
+ transitionAfter: "soft-fade-short",
9637
+ emphasis: "high",
9638
+ eyebrowTreatment: "accent-pill-bounce"
9639
+ }
9640
+ }),
9441
9641
  defineBlockAppearancePreset({
9442
9642
  kind: "block-design",
9443
9643
  id: "hero-contained-intro",
@@ -9466,6 +9666,20 @@ var appearancePresets = [
9466
9666
  emphasis: "high"
9467
9667
  }
9468
9668
  }),
9669
+ defineBlockAppearancePreset({
9670
+ kind: "block-design",
9671
+ id: "body-text-brand-depth-intro",
9672
+ target: "body-text",
9673
+ label: "Brand-depth intro copy",
9674
+ blockKinds: ["block.body-text"],
9675
+ design: {
9676
+ sectionSurface: "brand-depth-band",
9677
+ contentFrame: plainFrame,
9678
+ itemSurface: "none",
9679
+ transitionAfter: "soft-fade-short",
9680
+ emphasis: "high"
9681
+ }
9682
+ }),
9469
9683
  defineBlockAppearancePreset({
9470
9684
  kind: "block-design",
9471
9685
  id: "offerings-calm-list",
@@ -9508,6 +9722,21 @@ var appearancePresets = [
9508
9722
  emphasis: "medium"
9509
9723
  }
9510
9724
  }),
9725
+ defineBlockAppearancePreset({
9726
+ kind: "block-design",
9727
+ id: "schedule-details-brand-depth",
9728
+ target: "events",
9729
+ label: "Brand-depth schedule details",
9730
+ blockKinds: ["block.event-details", "block.course-details"],
9731
+ design: {
9732
+ sectionSurface: "brand-depth-band",
9733
+ contentFrame: plainFrame,
9734
+ itemSurface: "none",
9735
+ transitionAfter: "none",
9736
+ emphasis: "medium",
9737
+ tileTreatment: "brand-depth"
9738
+ }
9739
+ }),
9511
9740
  defineBlockAppearancePreset({
9512
9741
  kind: "block-design",
9513
9742
  id: "media-text-flush-feature",
@@ -9593,6 +9822,20 @@ var appearancePresets = [
9593
9822
  testimonialCardTreatment: "accent-quote"
9594
9823
  }
9595
9824
  }),
9825
+ defineBlockAppearancePreset({
9826
+ kind: "block-design",
9827
+ id: "faq-base-accordion",
9828
+ target: "faq",
9829
+ label: "Base accordion FAQ",
9830
+ blockKinds: ["block.faq"],
9831
+ design: {
9832
+ sectionSurface: "base",
9833
+ contentFrame: plainFrame,
9834
+ itemSurface: "default",
9835
+ transitionAfter: "none",
9836
+ emphasis: "medium"
9837
+ }
9838
+ }),
9596
9839
  defineBlockAppearancePreset({
9597
9840
  kind: "block-design",
9598
9841
  id: "faq-contained-help",
@@ -9635,6 +9878,20 @@ var appearancePresets = [
9635
9878
  emphasis: "high"
9636
9879
  }
9637
9880
  }),
9881
+ defineBlockAppearancePreset({
9882
+ kind: "block-design",
9883
+ id: "contact-form-brand-depth-card",
9884
+ target: "contact-form",
9885
+ label: "Brand-depth form card",
9886
+ blockKinds: ["block.form"],
9887
+ design: {
9888
+ sectionSurface: "brand-depth-band",
9889
+ contentFrame: panelFrame("raised"),
9890
+ itemSurface: "none",
9891
+ transitionAfter: "none",
9892
+ emphasis: "high"
9893
+ }
9894
+ }),
9638
9895
  defineBlockAppearancePreset({
9639
9896
  kind: "block-design",
9640
9897
  id: "cta-accent-band",
@@ -9648,7 +9905,14 @@ var appearancePresets = [
9648
9905
  transitionAfter: "none",
9649
9906
  emphasis: "high"
9650
9907
  }
9651
- }),
9908
+ })
9909
+ ];
9910
+
9911
+ // ../theme-core/src/site-styles/siteChromeAppearancePresets.ts
9912
+ function defineSiteChromeAppearancePreset(preset2) {
9913
+ return preset2;
9914
+ }
9915
+ var siteChromeAppearancePresets = [
9652
9916
  defineSiteChromeAppearancePreset({
9653
9917
  kind: "site-chrome",
9654
9918
  id: "header-clean-base",
@@ -9716,6 +9980,12 @@ var appearancePresets = [
9716
9980
  })
9717
9981
  ];
9718
9982
 
9983
+ // ../theme-core/src/site-styles/appearancePresetCatalog.ts
9984
+ var appearancePresets = [
9985
+ ...blockAppearancePresets,
9986
+ ...siteChromeAppearancePresets
9987
+ ];
9988
+
9719
9989
  // ../theme-core/src/site-styles/blockFlow.ts
9720
9990
  function defineBlockDesignMetadata(input) {
9721
9991
  const layoutProfiles = (input.layoutProfiles ?? []).map((profile) => ({
@@ -13258,6 +13528,7 @@ var sectionStylesOverrideSchema = z25.object({
13258
13528
  background: boxBackgroundSchema.nullable().optional(),
13259
13529
  spacing: semanticSpacingSchema.nullable().optional(),
13260
13530
  minHeight: z25.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
13531
+ tileTreatment: z25.enum(tileTreatmentValues).nullable().optional(),
13261
13532
  eyebrowTreatment: z25.enum(eyebrowTreatmentValues).nullable().optional()
13262
13533
  });
13263
13534
  var containerStylesOverrideSchema = z25.object({
@@ -14051,7 +14322,7 @@ var userContentFrames = [
14051
14322
  ];
14052
14323
  var generatedDesignOptionCatalog = {
14053
14324
  source: "generated",
14054
- sectionSurfaces: ["base", "muted-band", "accent-band", "hero-image"],
14325
+ sectionSurfaces: ["base", "muted-band", "accent-band", "brand-depth-band", "hero-image"],
14055
14326
  contentFrames: generatedContentFrames,
14056
14327
  itemSurfaces: ["none", "default", "flat", "outlined", "raised"],
14057
14328
  transitions: ["none", "soft-fade-short", "soft-fade-long"],
@@ -14121,6 +14392,43 @@ var expressiveBudget = {
14121
14392
  mediaDensity: "high",
14122
14393
  decorativeRepetition: "medium"
14123
14394
  };
14395
+ var expressiveUnderlineInputs = {
14396
+ base: {
14397
+ background: { type: "transparent" },
14398
+ textColorToken: "text",
14399
+ border: {
14400
+ widthClass: "border-2",
14401
+ colorToken: "border",
14402
+ style: "underline"
14403
+ },
14404
+ corners: "square",
14405
+ shadow: null,
14406
+ spacing: "compact",
14407
+ fontSize: "base"
14408
+ },
14409
+ label: {
14410
+ textColorToken: "primary",
14411
+ fontWeight: "black",
14412
+ fontSize: "xs",
14413
+ textTransform: "uppercase",
14414
+ letterSpacing: "widest",
14415
+ opacity: 1
14416
+ },
14417
+ focus: {
14418
+ ringColorToken: "secondary",
14419
+ ringWidth: "0",
14420
+ borderColorToken: "secondary"
14421
+ },
14422
+ error: {
14423
+ borderColorToken: "destructive",
14424
+ textColorToken: "destructive"
14425
+ },
14426
+ disabled: {
14427
+ backgroundColorToken: "surface",
14428
+ textColorToken: "text",
14429
+ opacity: 0.6
14430
+ }
14431
+ };
14124
14432
  function uniqueContentFrameKinds() {
14125
14433
  const kinds = [...new Set(
14126
14434
  generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
@@ -14471,15 +14779,17 @@ var curatedSiteStyles = [
14471
14779
  paragraphSize: "editorial",
14472
14780
  headingSize: "editorial"
14473
14781
  }
14474
- }
14782
+ },
14783
+ inputs: expressiveUnderlineInputs
14475
14784
  },
14476
14785
  recommendedAppearancePresetIds: [
14477
14786
  "site-header-brand-solid-inverted-cta",
14478
14787
  "site-footer-brand-two-band",
14479
14788
  "hero-brand-scrim-fixed-frame",
14480
14789
  "body-text-editorial-intro",
14790
+ "schedule-details-brand-depth",
14481
14791
  "testimonials-accent-quote-proof",
14482
- "contact-form-dark-card"
14792
+ "contact-form-brand-depth-card"
14483
14793
  ],
14484
14794
  buttonPersonalityChoices: [
14485
14795
  buttonChoice("showtime-pill"),
@@ -14717,6 +15027,7 @@ var imageSurfaceTreatmentSchema = z27.discriminatedUnion("kind", [
14717
15027
  }).strict()
14718
15028
  ]);
14719
15029
  var testimonialCardTreatmentSchema = z27.enum(["default", "accent-quote"]);
15030
+ var tileTreatmentSchema = z27.enum(tileTreatmentValues);
14720
15031
  var eyebrowTreatmentSchema = z27.enum(eyebrowTreatmentValues);
14721
15032
  function uniqueNonEmpty(values) {
14722
15033
  const uniqueValues = [...new Set(values)];
@@ -14761,6 +15072,7 @@ var blockDesignPlanSchema = z27.object({
14761
15072
  imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
14762
15073
  imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
14763
15074
  testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
15075
+ tileTreatment: tileTreatmentSchema.optional(),
14764
15076
  eyebrowTreatment: eyebrowTreatmentSchema.optional()
14765
15077
  }).strict();
14766
15078
  var styleAuthoritySchema = z27.discriminatedUnion("kind", [
@@ -14824,6 +15136,14 @@ var defaultDesignRuntimeRules = defineDesignRuntimeRules({
14824
15136
  headingColor: "primaryForeground"
14825
15137
  }
14826
15138
  },
15139
+ "brand-depth-band": {
15140
+ background: {
15141
+ type: "color",
15142
+ color: "primary-800",
15143
+ textColor: "primaryForeground",
15144
+ headingColor: "primaryForeground"
15145
+ }
15146
+ },
14827
15147
  "hero-image": {
14828
15148
  background: {
14829
15149
  type: "image",
@@ -16713,6 +17033,21 @@ function createTransformRegistry(definitions) {
16713
17033
  }
16714
17034
 
16715
17035
  // ../blocks/src/system/transforms/registry/_utils/colorResolution.ts
17036
+ var CSS_COLOR_FUNCTION_PATTERN = /^(?:rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\(/i;
17037
+ var CSS_HEX_COLOR_PATTERN = /^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;
17038
+ var THEME_COLOR_TOKEN_PATTERN = /^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*(?:\/(?:100|[1-9]?\d|0))?$/;
17039
+ var CSS_COLOR_KEYWORDS = /* @__PURE__ */ new Set([
17040
+ "transparent",
17041
+ "currentColor",
17042
+ "inherit",
17043
+ "initial",
17044
+ "revert",
17045
+ "revert-layer",
17046
+ "unset"
17047
+ ]);
17048
+ function isLiteralCssColorValue(value) {
17049
+ return CSS_HEX_COLOR_PATTERN.test(value) || CSS_COLOR_FUNCTION_PATTERN.test(value) || value.startsWith("var(") || CSS_COLOR_KEYWORDS.has(value);
17050
+ }
16716
17051
  function resolveBackgroundColorValue(tokenOrCssValue, context) {
16717
17052
  const trimmed = tokenOrCssValue.trim();
16718
17053
  if (!trimmed) return "";
@@ -16729,8 +17064,11 @@ function resolveBackgroundColorValue(tokenOrCssValue, context) {
16729
17064
  return rgbColorValue(trimmed);
16730
17065
  }
16731
17066
  }
16732
- if (trimmed === "transparent") {
16733
- return "transparent";
17067
+ if (isLiteralCssColorValue(trimmed)) {
17068
+ return trimmed;
17069
+ }
17070
+ if (THEME_COLOR_TOKEN_PATTERN.test(trimmed)) {
17071
+ return rgbColorValue(trimmed);
16734
17072
  }
16735
17073
  return trimmed;
16736
17074
  }
@@ -16986,6 +17324,15 @@ function hasFixedFrameBackgroundMotion(value) {
16986
17324
  const background = asPartialObject(input?.background);
16987
17325
  return background?.motion === "fixed-frame";
16988
17326
  }
17327
+ var tileTreatmentClassMap = {
17328
+ default: "",
17329
+ quiet: "rb-tile-treatment-quiet",
17330
+ "brand-depth": "rb-tile-treatment-brand-depth"
17331
+ };
17332
+ var tileTreatmentSet = new Set(tileTreatmentValues);
17333
+ function isTileTreatment(value) {
17334
+ return typeof value === "string" && tileTreatmentSet.has(value);
17335
+ }
16989
17336
  var sectionClassNameTransform = {
16990
17337
  id: "sectionStyles.resolveClassName",
16991
17338
  kind: "string",
@@ -17042,6 +17389,17 @@ var sectionClassNameTransform = {
17042
17389
  classes.push(minHeightClass);
17043
17390
  }
17044
17391
  }
17392
+ const tileTreatment = input?.tileTreatment;
17393
+ if (isTileTreatment(tileTreatment)) {
17394
+ const tileTreatmentClass = tileTreatmentClassMap[tileTreatment];
17395
+ if (tileTreatmentClass) {
17396
+ classes.push(tileTreatmentClass);
17397
+ }
17398
+ } else if (typeof tileTreatment === "string" && process.env.NODE_ENV !== "production") {
17399
+ console.warn(
17400
+ `[sectionStyles] Invalid tileTreatment value in _sectionStyles: "${tileTreatment}". Expected one of: ${tileTreatmentValues.join(", ")}.`
17401
+ );
17402
+ }
17045
17403
  if (hasFixedFrameBackgroundMotion(input)) {
17046
17404
  classes.push(fixedFrameScopeClass);
17047
17405
  }
@@ -20008,6 +20366,9 @@ function createBlockManifest(config) {
20008
20366
  };
20009
20367
  return augmentManifest(manifest);
20010
20368
  }
20369
+ function createBlockManifestWithContentShape(config, _contentShape) {
20370
+ return createBlockManifest(config);
20371
+ }
20011
20372
  function normalizeBlockLayout(layout) {
20012
20373
  return Array.isArray(layout) ? [...layout] : layout;
20013
20374
  }
@@ -20640,7 +21001,7 @@ var ctaComposition = composeFragments([
20640
21001
  { fragment: ctaCopyFragment },
20641
21002
  { fragment: ctaRowFragment }
20642
21003
  ]);
20643
- var ctaFullManifest = createBlockManifest({
21004
+ var ctaFullConfig = {
20644
21005
  id: "block.cta-full",
20645
21006
  title: "Full-width CTA",
20646
21007
  category: "marketing",
@@ -20658,7 +21019,8 @@ var ctaFullManifest = createBlockManifest({
20658
21019
  description: "Centered call to action with optional background image.",
20659
21020
  tags: ["cta", "call-to-action", "button", "conversion", "action", "sign-up", "get-started"],
20660
21021
  icon: "Target"
20661
- });
21022
+ };
21023
+ var ctaFullManifest = createBlockManifest(ctaFullConfig);
20662
21024
  var ctaFullBlockDefinition = {
20663
21025
  manifest: ctaFullManifest
20664
21026
  };
@@ -23839,9 +24201,9 @@ var mediaTextManifest = createBlockManifest({
23839
24201
  {
23840
24202
  id: "images",
23841
24203
  type: "repeater",
23842
- label: "Images",
24204
+ label: "Media",
23843
24205
  required: false,
23844
- itemLabel: "Image",
24206
+ itemLabel: "Media",
23845
24207
  minItems: 0,
23846
24208
  maxItems: 6,
23847
24209
  allowConversion: true,
@@ -23855,9 +24217,9 @@ var mediaTextManifest = createBlockManifest({
23855
24217
  {
23856
24218
  id: "image",
23857
24219
  type: "media",
23858
- label: "Image",
24220
+ label: "Media",
23859
24221
  required: true,
23860
- mediaKinds: ["image"]
24222
+ mediaKinds: ["image", "video"]
23861
24223
  }
23862
24224
  ]
23863
24225
  }
@@ -23935,8 +24297,8 @@ var mediaTextManifest = createBlockManifest({
23935
24297
  {
23936
24298
  id: "aspectRatio",
23937
24299
  type: "select",
23938
- label: "Image aspect ratio",
23939
- description: "Crop image to a consistent aspect ratio.",
24300
+ label: "Media aspect ratio",
24301
+ description: "Crop media to a consistent aspect ratio.",
23940
24302
  required: false,
23941
24303
  defaultValue: "auto",
23942
24304
  multiple: false,
@@ -24123,8 +24485,8 @@ var mediaTextManifest = createBlockManifest({
24123
24485
  }
24124
24486
  };
24125
24487
  })(),
24126
- description: "Two columns: image/carousel + rich text (with optional section title).",
24127
- tags: ["media", "image", "carousel", "text", "two-column", "layout"],
24488
+ description: "Two columns: media/carousel + rich text (with optional section title).",
24489
+ tags: ["media", "image", "video", "carousel", "text", "two-column", "layout"],
24128
24490
  icon: "Columns"
24129
24491
  });
24130
24492
  var mediaTextBlockDefinition = {
@@ -24275,6 +24637,19 @@ var transformSchema2 = z42.object({
24275
24637
  hotspot: hotspotSchema2.optional(),
24276
24638
  rotation: rotationSchema2.optional()
24277
24639
  });
24640
+ var mediaPosterSchema = z42.discriminatedUnion("tag", [
24641
+ z42.object({
24642
+ tag: z42.literal("storage"),
24643
+ assetId: z42.string().optional(),
24644
+ storageBucket: z42.string().min(1),
24645
+ storagePath: z42.string().min(1)
24646
+ }),
24647
+ z42.object({
24648
+ tag: z42.literal("external-src"),
24649
+ assetId: z42.string().optional(),
24650
+ src: z42.string().url()
24651
+ })
24652
+ ]);
24278
24653
  var mediaBaseSchema = z42.object({
24279
24654
  purpose: z42.string().optional(),
24280
24655
  placeholder: z42.boolean().default(true).optional(),
@@ -24288,6 +24663,7 @@ var mediaBaseSchema = z42.object({
24288
24663
  height: z42.number().optional(),
24289
24664
  storageBucket: z42.string().optional(),
24290
24665
  storagePath: z42.string().optional(),
24666
+ poster: mediaPosterSchema.optional(),
24291
24667
  transform: transformSchema2.optional()
24292
24668
  });
24293
24669
  var imageMediaSchema = mediaBaseSchema.extend({ type: z42.literal("image") });
@@ -24771,10 +25147,28 @@ import { z as z48 } from "zod";
24771
25147
 
24772
25148
  // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
24773
25149
  import { z as z47 } from "zod";
25150
+
25151
+ // ../blocks/src/system/constants/events.ts
25152
+ var eventCalendarDisplayModeValues = ["combined", "month", "week", "list", "timetable"];
25153
+ var eventCalendarListLayoutValues = ["stack", "grid", "compact"];
25154
+ var eventCalendarListLayoutOptions = [
25155
+ { id: "stack", label: "Stack" },
25156
+ { id: "grid", label: "Grid" },
25157
+ { id: "compact", label: "Compact" }
25158
+ ];
25159
+ function isEventCalendarDisplayMode(value) {
25160
+ return typeof value === "string" && eventCalendarDisplayModeValues.includes(value);
25161
+ }
25162
+ function isEventCalendarListLayout(value) {
25163
+ return typeof value === "string" && eventCalendarListLayoutValues.includes(value);
25164
+ }
25165
+
25166
+ // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
24774
25167
  var previewStageSchema = z47.enum(["preview", "published"]);
24775
25168
  var registrationButtonVariantSchema = z47.enum(["primary", "secondary", "outline"]);
24776
25169
  var eventButtonVariantSchema = z47.enum(["primary", "secondary", "outline", "link"]);
24777
- var eventLayoutSchema = z47.enum(["grid", "stack", "compact"]);
25170
+ var eventLayoutSchema = z47.enum(eventCalendarListLayoutValues);
25171
+ var eventCalendarDisplayModeSchema = z47.enum(eventCalendarDisplayModeValues);
24778
25172
  var columnOptionSchema = z47.enum(["2", "3", "4"]);
24779
25173
  var weekStartSchema = z47.enum(["sunday", "monday"]);
24780
25174
  var filterAutoShowSchema = z47.enum(["auto", "always", "never"]);
@@ -27554,6 +27948,22 @@ function resolveMediaWithCanonicalAsset(value, context) {
27554
27948
  height: asset.height ?? value.height
27555
27949
  };
27556
27950
  }
27951
+ function resolveVideoPosterUrl(value, context) {
27952
+ if (value.type !== "video") return void 0;
27953
+ const poster = value.poster;
27954
+ if (!poster) return void 0;
27955
+ switch (poster.tag) {
27956
+ case "external-src":
27957
+ return poster.src;
27958
+ case "storage":
27959
+ return resolveMediaStorageUrl({
27960
+ type: "image",
27961
+ assetId: poster.assetId,
27962
+ storageBucket: poster.storageBucket,
27963
+ storagePath: poster.storagePath
27964
+ }, context);
27965
+ }
27966
+ }
27557
27967
  var debugMediaNodeLog = (...args) => {
27558
27968
  if (typeof window === "undefined") return;
27559
27969
  const debugFlag = Reflect.get(window, "__DEBUG_MEDIA_NODE__");
@@ -27605,12 +28015,14 @@ function renderVideo(value, className, style, context, options = {}) {
27605
28015
  const src = resolvePublicMediaUrl(value, context);
27606
28016
  if (!src) return null;
27607
28017
  if (options.playback === "background") {
28018
+ const poster2 = resolveVideoPosterUrl(value, context);
27608
28019
  return /* @__PURE__ */ jsx(
27609
28020
  "video",
27610
28021
  {
27611
28022
  className,
27612
28023
  style,
27613
28024
  src,
28025
+ ...poster2 ? { poster: poster2 } : {},
27614
28026
  autoPlay: true,
27615
28027
  muted: true,
27616
28028
  loop: true,
@@ -27621,12 +28033,14 @@ function renderVideo(value, className, style, context, options = {}) {
27621
28033
  }
27622
28034
  );
27623
28035
  }
28036
+ const poster = resolveVideoPosterUrl(value, context);
27624
28037
  return /* @__PURE__ */ jsx(
27625
28038
  "video",
27626
28039
  {
27627
28040
  className,
27628
28041
  style,
27629
28042
  src,
28043
+ ...poster ? { poster } : {},
27630
28044
  controls: true,
27631
28045
  controlsList: "nodownload",
27632
28046
  preload: "metadata",
@@ -28374,7 +28788,232 @@ function buildEventListingInteractiveIslandProps(props2) {
28374
28788
  }
28375
28789
 
28376
28790
  // ../blocks/src/system/blocks/events/event-listing.ts
28377
- var eventListingManifest = createBlockManifest({
28791
+ var eventListingAdditionalFields = [
28792
+ ...sectionHeaderFields("All Events"),
28793
+ ...(() => {
28794
+ const columns = columnsField(["2", "3", "4"]);
28795
+ return [
28796
+ {
28797
+ ...layoutField,
28798
+ ui: { ...layoutField.ui ?? {}, intent: "display" }
28799
+ },
28800
+ {
28801
+ ...columns,
28802
+ ui: { ...columns.ui ?? {}, intent: "display" }
28803
+ }
28804
+ ];
28805
+ })(),
28806
+ {
28807
+ id: "eventsPerPage",
28808
+ type: "select",
28809
+ label: "Events per page",
28810
+ description: "Number of events to load at a time",
28811
+ required: false,
28812
+ multiple: false,
28813
+ defaultValue: "12",
28814
+ options: [
28815
+ { value: "3", label: "3 events" },
28816
+ { value: "6", label: "6 events" },
28817
+ { value: "12", label: "12 events" },
28818
+ { value: "24", label: "24 events" }
28819
+ ],
28820
+ ui: { intent: "display" }
28821
+ },
28822
+ {
28823
+ id: "paginationMode",
28824
+ type: "select",
28825
+ label: "More events",
28826
+ description: "How to access events beyond the initial list",
28827
+ required: false,
28828
+ multiple: false,
28829
+ defaultValue: "loadMore",
28830
+ options: [
28831
+ { value: "loadMore", label: "Load more button" },
28832
+ { value: "seeAllLink", label: "Link to another page" }
28833
+ ],
28834
+ ui: { intent: "display" }
28835
+ },
28836
+ {
28837
+ id: "seeAllUrl",
28838
+ type: "link",
28839
+ label: "See all destination",
28840
+ required: false,
28841
+ ui: {
28842
+ intent: "display",
28843
+ visibleWhen: {
28844
+ field: "paginationMode",
28845
+ equals: "seeAllLink"
28846
+ }
28847
+ }
28848
+ },
28849
+ {
28850
+ id: "loadMoreText",
28851
+ type: "text",
28852
+ label: "Button text",
28853
+ description: "Text for the pagination button or link",
28854
+ required: false,
28855
+ multiline: false,
28856
+ defaultValue: "Load more events",
28857
+ maxLength: 40
28858
+ },
28859
+ ...cardStylingFields.map((field) => ({
28860
+ ...field,
28861
+ ui: { ...field.ui ?? {}, intent: "style" }
28862
+ })),
28863
+ ...eventDisplayFields.map((field) => ({
28864
+ ...field,
28865
+ ui: { ...field.ui ?? {}, intent: "display" }
28866
+ })),
28867
+ {
28868
+ id: "kind",
28869
+ type: "select",
28870
+ label: "Show",
28871
+ description: "Choose whether this list shows courses, events, or both",
28872
+ required: false,
28873
+ multiple: false,
28874
+ defaultValue: "all",
28875
+ options: [
28876
+ { value: "all", label: "Courses and events" },
28877
+ { value: "courses", label: "Courses only" },
28878
+ { value: "events", label: "Events only" }
28879
+ ],
28880
+ ui: { intent: "behavior" }
28881
+ },
28882
+ {
28883
+ id: "eventSurface",
28884
+ type: "select",
28885
+ label: "Event surface",
28886
+ description: "Choose a semantic event scope",
28887
+ required: false,
28888
+ multiple: false,
28889
+ defaultValue: "all",
28890
+ options: [
28891
+ { value: "all", label: "All events" },
28892
+ { value: "regularClassSchedule", label: "Regular class schedule" },
28893
+ { value: "specialDatedEvents", label: "Workshops and special events" },
28894
+ { value: "custom", label: "Custom" }
28895
+ ],
28896
+ ui: { intent: "behavior" }
28897
+ },
28898
+ {
28899
+ id: "filterEventPresets",
28900
+ type: "select",
28901
+ label: "Pre-filter by event type",
28902
+ description: "Restrict this block to specific event types",
28903
+ required: false,
28904
+ multiple: true,
28905
+ defaultValue: [],
28906
+ options: [
28907
+ { value: "class", label: "Classes" },
28908
+ { value: "workshop", label: "Workshops" },
28909
+ { value: "retreat", label: "Retreats" },
28910
+ { value: "performance", label: "Performances" }
28911
+ ],
28912
+ ui: {
28913
+ intent: "behavior",
28914
+ visibleWhen: { field: "eventSurface", equals: "custom" }
28915
+ }
28916
+ },
28917
+ {
28918
+ id: "scheduleScope",
28919
+ type: "select",
28920
+ label: "Schedule cadence",
28921
+ description: "Restrict this block by recurrence",
28922
+ required: false,
28923
+ multiple: false,
28924
+ defaultValue: "any",
28925
+ options: [
28926
+ { value: "any", label: "Any cadence" },
28927
+ { value: "recurring", label: "Recurring only" },
28928
+ { value: "oneOff", label: "One-off only" }
28929
+ ],
28930
+ ui: {
28931
+ intent: "behavior",
28932
+ visibleWhen: { field: "eventSurface", equals: "custom" }
28933
+ }
28934
+ },
28935
+ {
28936
+ ...emptyStateField,
28937
+ ui: { ...emptyStateField.ui ?? {}, intent: "display" }
28938
+ },
28939
+ sectionStylesField({
28940
+ id: "_sectionStyles",
28941
+ label: "Section styles",
28942
+ renderInHeader: false
28943
+ })
28944
+ ];
28945
+ var eventListingLayout = [
28946
+ styledSection({
28947
+ children: sectionContainer([
28948
+ // Optional heading
28949
+ text(
28950
+ { as: "h2" },
28951
+ bind("content.heading"),
28952
+ when("content.heading")
28953
+ ),
28954
+ // Optional description
28955
+ richText(
28956
+ { className: "rb-prose rb-max-w-none" },
28957
+ bind("content.description"),
28958
+ when("content.description")
28959
+ ),
28960
+ // Event listing component with pagination
28961
+ el("event-listing", withApiBindings({
28962
+ events: { $bind: { from: "data.events" } },
28963
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
28964
+ layout: { $bind: { from: "content.layout", fallback: "grid" } },
28965
+ columns: { $bind: { from: "content.columns", fallback: "3" } },
28966
+ eventsPerPage: { $bind: { from: "content.eventsPerPage", fallback: "12" } },
28967
+ paginationMode: { $bind: { from: "content.paginationMode", fallback: "loadMore" } },
28968
+ seeAllUrl: { $bind: { from: "content.seeAllUrl", transforms: [{ id: "links.resolve" }] } },
28969
+ loadMoreText: { $bind: { from: "content.loadMoreText", fallback: "Load more events" } },
28970
+ cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
28971
+ buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
28972
+ buttonText: { $bind: { from: "content.buttonText", fallback: "View event" } },
28973
+ showVenue: { $bind: { from: "content.showVenue" } },
28974
+ showMap: { $bind: { from: "content.showMap" } },
28975
+ showCapacity: { $bind: { from: "content.showCapacity" } },
28976
+ eventKind: { $bind: { from: "content.kind", fallback: "all" } },
28977
+ eventSurface: { $bind: { from: "content.eventSurface", fallback: "all" } },
28978
+ filterEventPresets: { $bind: { from: "content.filterEventPresets" } },
28979
+ scheduleScope: { $bind: { from: "content.scheduleScope", fallback: "any" } },
28980
+ emptyMessage: { $bind: { from: "content.emptyMessage" } }
28981
+ }))
28982
+ ], {
28983
+ gap: "lg"
28984
+ }),
28985
+ // sectionContainer (rb-container) already provides horizontal padding
28986
+ baseClass: "",
28987
+ spacing: "comfortable"
28988
+ })
28989
+ ];
28990
+ var eventListingDerivedFields = [
28991
+ {
28992
+ id: "layout",
28993
+ type: "select",
28994
+ required: false,
28995
+ multiple: false,
28996
+ options: [
28997
+ { value: "grid" },
28998
+ { value: "stack" }
28999
+ ]
29000
+ },
29001
+ {
29002
+ id: "paginationMode",
29003
+ type: "select",
29004
+ required: false,
29005
+ multiple: false,
29006
+ options: [
29007
+ { value: "loadMore" },
29008
+ { value: "seeAllLink" }
29009
+ ]
29010
+ }
29011
+ ];
29012
+ var eventListingContentShape = {
29013
+ additionalFields: eventListingDerivedFields,
29014
+ skipSectionStyles: true
29015
+ };
29016
+ var eventListingConfig = {
28378
29017
  id: "block.event-listing",
28379
29018
  version: "1.1.0",
28380
29019
  title: "Event Listing",
@@ -28382,211 +29021,18 @@ var eventListingManifest = createBlockManifest({
28382
29021
  description: "Paginated list of all upcoming events",
28383
29022
  // Preserve legacy section styles field configuration (renderInHeader: false).
28384
29023
  skipSectionStyles: true,
28385
- additionalFields: [
28386
- ...sectionHeaderFields("All Events"),
28387
- ...(() => {
28388
- const columns = columnsField(["2", "3", "4"]);
28389
- return [
28390
- {
28391
- ...layoutField,
28392
- ui: { ...layoutField.ui ?? {}, intent: "display" }
28393
- },
28394
- {
28395
- ...columns,
28396
- ui: { ...columns.ui ?? {}, intent: "display" }
28397
- }
28398
- ];
28399
- })(),
28400
- {
28401
- id: "eventsPerPage",
28402
- type: "select",
28403
- label: "Events per page",
28404
- description: "Number of events to load at a time",
28405
- required: false,
28406
- multiple: false,
28407
- defaultValue: "12",
28408
- options: [
28409
- { value: "3", label: "3 events" },
28410
- { value: "6", label: "6 events" },
28411
- { value: "12", label: "12 events" },
28412
- { value: "24", label: "24 events" }
28413
- ],
28414
- ui: { intent: "display" }
28415
- },
28416
- {
28417
- id: "paginationMode",
28418
- type: "select",
28419
- label: "More events",
28420
- description: "How to access events beyond the initial list",
28421
- required: false,
28422
- multiple: false,
28423
- defaultValue: "loadMore",
28424
- options: [
28425
- { value: "loadMore", label: "Load more button" },
28426
- { value: "seeAllLink", label: "Link to another page" }
28427
- ],
28428
- ui: { intent: "display" }
28429
- },
28430
- {
28431
- id: "seeAllUrl",
28432
- type: "link",
28433
- label: "See all destination",
28434
- required: false,
28435
- ui: {
28436
- intent: "display",
28437
- visibleWhen: {
28438
- field: "paginationMode",
28439
- equals: "seeAllLink"
28440
- }
28441
- }
28442
- },
28443
- {
28444
- id: "loadMoreText",
28445
- type: "text",
28446
- label: "Button text",
28447
- description: "Text for the pagination button or link",
28448
- required: false,
28449
- multiline: false,
28450
- defaultValue: "Load more events",
28451
- maxLength: 40
28452
- },
28453
- ...cardStylingFields.map((field) => ({
28454
- ...field,
28455
- ui: { ...field.ui ?? {}, intent: "style" }
28456
- })),
28457
- ...eventDisplayFields.map((field) => ({
28458
- ...field,
28459
- ui: { ...field.ui ?? {}, intent: "display" }
28460
- })),
28461
- {
28462
- id: "kind",
28463
- type: "select",
28464
- label: "Show",
28465
- description: "Choose whether this list shows courses, events, or both",
28466
- required: false,
28467
- multiple: false,
28468
- defaultValue: "all",
28469
- options: [
28470
- { value: "all", label: "Courses and events" },
28471
- { value: "courses", label: "Courses only" },
28472
- { value: "events", label: "Events only" }
28473
- ],
28474
- ui: { intent: "behavior" }
28475
- },
28476
- {
28477
- id: "eventSurface",
28478
- type: "select",
28479
- label: "Event surface",
28480
- description: "Choose a semantic event scope",
28481
- required: false,
28482
- multiple: false,
28483
- defaultValue: "all",
28484
- options: [
28485
- { value: "all", label: "All events" },
28486
- { value: "regularClassSchedule", label: "Regular class schedule" },
28487
- { value: "specialDatedEvents", label: "Workshops and special events" },
28488
- { value: "custom", label: "Custom" }
28489
- ],
28490
- ui: { intent: "behavior" }
28491
- },
28492
- {
28493
- id: "filterEventPresets",
28494
- type: "select",
28495
- label: "Pre-filter by event type",
28496
- description: "Restrict this block to specific event types",
28497
- required: false,
28498
- multiple: true,
28499
- defaultValue: [],
28500
- options: [
28501
- { value: "class", label: "Classes" },
28502
- { value: "workshop", label: "Workshops" },
28503
- { value: "retreat", label: "Retreats" },
28504
- { value: "performance", label: "Performances" }
28505
- ],
28506
- ui: {
28507
- intent: "behavior",
28508
- visibleWhen: { field: "eventSurface", equals: "custom" }
28509
- }
28510
- },
28511
- {
28512
- id: "scheduleScope",
28513
- type: "select",
28514
- label: "Schedule cadence",
28515
- description: "Restrict this block by recurrence",
28516
- required: false,
28517
- multiple: false,
28518
- defaultValue: "any",
28519
- options: [
28520
- { value: "any", label: "Any cadence" },
28521
- { value: "recurring", label: "Recurring only" },
28522
- { value: "oneOff", label: "One-off only" }
28523
- ],
28524
- ui: {
28525
- intent: "behavior",
28526
- visibleWhen: { field: "eventSurface", equals: "custom" }
28527
- }
28528
- },
28529
- {
28530
- ...emptyStateField,
28531
- ui: { ...emptyStateField.ui ?? {}, intent: "display" }
28532
- },
28533
- sectionStylesField({
28534
- id: "_sectionStyles",
28535
- label: "Section styles",
28536
- renderInHeader: false
28537
- })
28538
- ],
29024
+ additionalFields: eventListingAdditionalFields,
28539
29025
  styleTokens: { background: "surface", typography: "body", spacing: "md" },
28540
29026
  behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: true },
28541
29027
  category: "interactive",
28542
29028
  tags: ["events", "listing", "paginated", "archive", "all-events"],
28543
29029
  icon: "List",
28544
- layout: [
28545
- styledSection({
28546
- children: sectionContainer([
28547
- // Optional heading
28548
- text(
28549
- { as: "h2" },
28550
- bind("content.heading"),
28551
- when("content.heading")
28552
- ),
28553
- // Optional description
28554
- richText(
28555
- { className: "rb-prose rb-max-w-none" },
28556
- bind("content.description"),
28557
- when("content.description")
28558
- ),
28559
- // Event listing component with pagination
28560
- el("event-listing", withApiBindings({
28561
- events: { $bind: { from: "data.events" } },
28562
- stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
28563
- layout: { $bind: { from: "content.layout", fallback: "grid" } },
28564
- columns: { $bind: { from: "content.columns", fallback: "3" } },
28565
- eventsPerPage: { $bind: { from: "content.eventsPerPage", fallback: "12" } },
28566
- paginationMode: { $bind: { from: "content.paginationMode", fallback: "loadMore" } },
28567
- seeAllUrl: { $bind: { from: "content.seeAllUrl", transforms: [{ id: "links.resolve" }] } },
28568
- loadMoreText: { $bind: { from: "content.loadMoreText", fallback: "Load more events" } },
28569
- cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
28570
- buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
28571
- buttonText: { $bind: { from: "content.buttonText", fallback: "View event" } },
28572
- showVenue: { $bind: { from: "content.showVenue" } },
28573
- showMap: { $bind: { from: "content.showMap" } },
28574
- showCapacity: { $bind: { from: "content.showCapacity" } },
28575
- eventKind: { $bind: { from: "content.kind", fallback: "all" } },
28576
- eventSurface: { $bind: { from: "content.eventSurface", fallback: "all" } },
28577
- filterEventPresets: { $bind: { from: "content.filterEventPresets" } },
28578
- scheduleScope: { $bind: { from: "content.scheduleScope", fallback: "any" } },
28579
- emptyMessage: { $bind: { from: "content.emptyMessage" } }
28580
- }))
28581
- ], {
28582
- gap: "lg"
28583
- }),
28584
- // sectionContainer (rb-container) already provides horizontal padding
28585
- baseClass: "",
28586
- spacing: "comfortable"
28587
- })
28588
- ]
28589
- });
29030
+ layout: eventListingLayout
29031
+ };
29032
+ var eventListingManifest = createBlockManifestWithContentShape(
29033
+ eventListingConfig,
29034
+ eventListingContentShape
29035
+ );
28590
29036
  var eventListingBlockDefinition = {
28591
29037
  manifest: eventListingManifest,
28592
29038
  runtime: eventListingBlockRuntime,
@@ -28613,7 +29059,6 @@ var eventListingBlockDefinition = {
28613
29059
 
28614
29060
  // ../blocks/src/system/runtime/nodes/events/EventCalendar.interactive.ts
28615
29061
  import { z as z54 } from "zod";
28616
- var displayModeSchema = z54.enum(["combined", "month", "week", "list", "timetable"]);
28617
29062
  var eventBlockKindSchema2 = z54.enum(eventBlockKindValues);
28618
29063
  var eventSurfaceScopeSchema2 = z54.enum(eventSurfaceScopeValues);
28619
29064
  var eventScheduleScopeSchema3 = z54.enum(eventScheduleScopeValues);
@@ -28623,7 +29068,8 @@ var eventCalendarSourceSchema = z54.object(
28623
29068
  siteId: z54.string(),
28624
29069
  apiBaseUrl: z54.string().optional(),
28625
29070
  stage: previewStageSchema.optional(),
28626
- displayMode: displayModeSchema.nullable().optional(),
29071
+ variant: eventCalendarDisplayModeSchema.nullable().optional(),
29072
+ displayMode: eventCalendarDisplayModeSchema.nullable().optional(),
28627
29073
  listLayout: eventLayoutSchema.optional(),
28628
29074
  listColumns: columnOptionSchema.optional(),
28629
29075
  layout: eventLayoutSchema.optional(),
@@ -28655,7 +29101,7 @@ var eventCalendarSourceSchema = z54.object(
28655
29101
  );
28656
29102
  var eventCalendarDisplaySchema = z54.object({
28657
29103
  kind: z54.literal("event-calendar"),
28658
- displayMode: displayModeSchema,
29104
+ displayMode: eventCalendarDisplayModeSchema,
28659
29105
  className: z54.string().nullable(),
28660
29106
  events: z54.array(publicEventSchema),
28661
29107
  listLayout: eventLayoutSchema,
@@ -28710,7 +29156,7 @@ var eventCalendarIslandMetaKeys = defineInteractiveIslandMetaKeys(
28710
29156
  function buildEventCalendarDisplay(source) {
28711
29157
  return {
28712
29158
  kind: "event-calendar",
28713
- displayMode: source.displayMode ?? "combined",
29159
+ displayMode: source.variant ?? source.displayMode ?? "combined",
28714
29160
  className: source.className ?? null,
28715
29161
  events: (source.events ?? []).slice().sort(
28716
29162
  (left, right) => new Date(left.startsAt).getTime() - new Date(right.startsAt).getTime()
@@ -28810,8 +29256,12 @@ function buildEventCalendarInteractiveIslandProps(props2) {
28810
29256
  function normalizeEventCalendarContent(content) {
28811
29257
  const record = typeof content === "object" && content !== null ? content : {};
28812
29258
  const kind = normalizeEventBlockKind(record.kind);
29259
+ const variant = normalizeEventCalendarDisplayMode(record.variant) ?? normalizeEventCalendarDisplayMode(record.displayMode);
28813
29260
  return {
28814
29261
  ...record,
29262
+ ...variant ? { variant } : {},
29263
+ displayMode: normalizeEventCalendarDisplayMode(record.displayMode),
29264
+ listLayout: normalizeEventCalendarListLayout(record.listLayout),
28815
29265
  kind,
28816
29266
  eventSurface: normalizeEventSurfaceScope(record.eventSurface),
28817
29267
  filterEventPresets: normalizeEventSurfacePresets(record.filterEventPresets),
@@ -28823,355 +29273,515 @@ function normalizeEventCalendarContent(content) {
28823
29273
  filterVenueId: normalizeEventVenueId(record.filterVenueId)
28824
29274
  };
28825
29275
  }
28826
- var eventCalendarManifest = createBlockManifest({
28827
- id: "block.event-calendar",
28828
- version: "3.6.0",
28829
- title: "Event Calendar",
28830
- titleSource: "heading",
28831
- description: "Display events with calendar, list, or combined views with filtering",
28832
- // Preserve legacy section styles field configuration (renderInHeader: false).
28833
- skipSectionStyles: true,
28834
- additionalFields: [
28835
- ...sectionHeaderFields("Event Calendar"),
28836
- // Display Mode (replaces calendarView)
28837
- {
28838
- id: "displayMode",
28839
- type: "select",
28840
- label: "Display mode",
28841
- description: "How events are displayed",
28842
- required: false,
28843
- multiple: false,
28844
- defaultValue: "combined",
28845
- options: [
28846
- { value: "combined", label: "Combined (List + Calendar tabs)" },
28847
- { value: "month", label: "Month calendar" },
28848
- { value: "week", label: "Week agenda" },
28849
- { value: "timetable", label: "Timetable" },
28850
- { value: "list", label: "List" }
28851
- ],
28852
- ui: { intent: "display" }
28853
- },
28854
- // List options (visible when displayMode is list or combined)
28855
- {
28856
- id: "listLayout",
28857
- type: "select",
28858
- label: "List layout",
28859
- description: "Layout style for list view",
28860
- required: false,
28861
- multiple: false,
28862
- defaultValue: "stack",
28863
- options: [
28864
- { value: "stack", label: "Stack (full-width cards)" },
28865
- { value: "grid", label: "Grid" },
28866
- { value: "compact", label: "Compact (dense rows)" }
28867
- ],
28868
- ui: {
28869
- intent: "display",
28870
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list"] }
28871
- }
28872
- },
28873
- {
28874
- id: "listColumns",
28875
- type: "select",
28876
- label: "Grid columns",
28877
- description: "Number of columns in grid layout",
28878
- required: false,
28879
- multiple: false,
28880
- defaultValue: "3",
28881
- options: [
28882
- { value: "2", label: "2 columns" },
28883
- { value: "3", label: "3 columns" },
28884
- { value: "4", label: "4 columns" }
28885
- ],
28886
- ui: {
28887
- intent: "display",
28888
- visibleWhen: { field: "listLayout", equals: "grid" }
28889
- }
28890
- },
28891
- {
28892
- id: "eventsPerPage",
28893
- type: "select",
28894
- label: "Events per page (cards)",
28895
- description: "Number of events to load initially in card layouts",
28896
- required: false,
28897
- multiple: false,
28898
- defaultValue: "12",
28899
- options: [
28900
- { value: "6", label: "6" },
28901
- { value: "12", label: "12" },
28902
- { value: "24", label: "24" }
28903
- ],
28904
- ui: {
28905
- intent: "display",
28906
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list"] }
28907
- }
28908
- },
28909
- {
28910
- id: "compactEventsPerPage",
28911
- type: "select",
28912
- label: "Events per page (compact)",
28913
- description: "Number of events to show per page in compact layout",
28914
- required: false,
28915
- multiple: false,
28916
- defaultValue: "10",
28917
- options: [
28918
- { value: "10", label: "10" },
28919
- { value: "20", label: "20" },
28920
- { value: "30", label: "30" }
28921
- ],
28922
- ui: {
28923
- intent: "display",
28924
- visibleWhen: { field: "listLayout", equals: "compact" }
28925
- }
28926
- },
28927
- {
28928
- id: "loadMoreText",
28929
- type: "text",
28930
- label: "Load more button text",
28931
- description: "Text for the load more button",
28932
- required: false,
28933
- multiline: false,
28934
- defaultValue: "Load more events",
28935
- ui: {
28936
- intent: "content",
28937
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list"] }
28938
- }
28939
- },
28940
- // Calendar options
28941
- {
28942
- id: "startOfWeek",
28943
- type: "select",
28944
- label: "Week starts on",
28945
- description: "First day of the week",
28946
- required: false,
28947
- multiple: false,
28948
- defaultValue: "monday",
28949
- options: [
28950
- { value: "sunday", label: "Sunday" },
28951
- { value: "monday", label: "Monday" }
28952
- ],
28953
- ui: {
28954
- intent: "display",
28955
- visibleWhen: {
28956
- field: "displayMode",
28957
- oneOf: ["combined", "month", "week"]
28958
- }
28959
- }
28960
- },
28961
- // Combined mode options
28962
- {
28963
- id: "calendarTabViews",
28964
- type: "select",
28965
- label: "Calendar tab views",
28966
- description: "Which calendar views to show in the Calendar tab",
28967
- required: false,
28968
- multiple: false,
28969
- defaultValue: "both",
28970
- options: [
28971
- { value: "both", label: "Month + Week toggle" },
28972
- { value: "month", label: "Month only" },
28973
- { value: "week", label: "Week only" }
28974
- ],
28975
- ui: {
28976
- intent: "display",
28977
- visibleWhen: { field: "displayMode", equals: "combined" }
28978
- }
28979
- },
28980
- // Filtering options
28981
- {
28982
- id: "kind",
28983
- type: "select",
28984
- label: "Show",
28985
- description: "Restrict this block to all offerings, courses, or events",
28986
- required: false,
28987
- multiple: false,
28988
- defaultValue: "all",
28989
- options: [
28990
- { value: "all", label: "All offerings" },
28991
- { value: "courses", label: "Courses only" },
28992
- { value: "events", label: "Events only" }
28993
- ],
28994
- ui: { intent: "behavior" }
28995
- },
28996
- {
28997
- id: "showFilters",
28998
- type: "boolean",
28999
- label: "Show filters",
29000
- description: "Show category, staff, and venue filters",
29001
- required: false,
29002
- defaultValue: true,
29003
- ui: {
29004
- intent: "display",
29005
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list", "timetable"] }
29006
- }
29007
- },
29008
- {
29009
- id: "showCategoryFilter",
29010
- type: "select",
29011
- label: "Show category filter",
29012
- description: "When to show the category filter dropdown",
29013
- required: false,
29014
- multiple: false,
29015
- defaultValue: "auto",
29016
- options: [
29017
- { value: "auto", label: "Auto (when >1 category has events)" },
29018
- { value: "always", label: "Always" },
29019
- { value: "never", label: "Never" }
29276
+ function normalizeEventCalendarDisplayMode(value) {
29277
+ return isEventCalendarDisplayMode(value) ? value : void 0;
29278
+ }
29279
+ function normalizeEventCalendarListLayout(value) {
29280
+ return isEventCalendarListLayout(value) ? value : void 0;
29281
+ }
29282
+ var eventCalendarLayout = [
29283
+ styledSection({
29284
+ children: sectionContainer(
29285
+ [
29286
+ // Optional heading
29287
+ text({ as: "h2" }, bind("content.heading"), when("content.heading")),
29288
+ // Optional description
29289
+ richText(
29290
+ { className: "rb-prose rb-max-w-none" },
29291
+ bind("content.description"),
29292
+ when("content.description")
29293
+ ),
29294
+ // Event calendar component (handles all display modes)
29295
+ el(
29296
+ "event-calendar",
29297
+ withApiBindings({
29298
+ events: { $bind: { from: "data.events" } },
29299
+ stage: {
29300
+ $bind: { from: "$root.previewStage", fallback: "published" }
29301
+ },
29302
+ // Variant is the new Theme V2-facing display mode. displayMode is
29303
+ // retained as a legacy fallback for existing content.
29304
+ variant: {
29305
+ $bind: { from: "content.variant" }
29306
+ },
29307
+ displayMode: {
29308
+ $bind: { from: "content.displayMode" }
29309
+ },
29310
+ // List options
29311
+ listLayout: { $bind: { from: "content.listLayout" } },
29312
+ listColumns: { $bind: { from: "content.listColumns" } },
29313
+ // Legacy compatibility: older event-calendar content used layout/columns
29314
+ layout: { $bind: { from: "content.layout" } },
29315
+ columns: { $bind: { from: "content.columns" } },
29316
+ eventsPerPage: {
29317
+ $bind: { from: "content.eventsPerPage", fallback: "12" }
29318
+ },
29319
+ compactEventsPerPage: {
29320
+ $bind: { from: "content.compactEventsPerPage", fallback: "10" }
29321
+ },
29322
+ loadMoreText: {
29323
+ $bind: {
29324
+ from: "content.loadMoreText",
29325
+ fallback: "Load more events"
29326
+ }
29327
+ },
29328
+ // Calendar options
29329
+ startOfWeek: {
29330
+ $bind: { from: "content.startOfWeek", fallback: "monday" }
29331
+ },
29332
+ calendarTabViews: {
29333
+ $bind: { from: "content.calendarTabViews", fallback: "both" }
29334
+ },
29335
+ // Filtering options
29336
+ showFilters: {
29337
+ $bind: { from: "content.showFilters", fallback: true }
29338
+ },
29339
+ showCategoryFilter: {
29340
+ $bind: { from: "content.showCategoryFilter", fallback: "auto" }
29341
+ },
29342
+ showVenueFilter: {
29343
+ $bind: { from: "content.showVenueFilter", fallback: false }
29344
+ },
29345
+ showStaffFilter: {
29346
+ $bind: { from: "content.showStaffFilter", fallback: true }
29347
+ },
29348
+ showCapacity: {
29349
+ $bind: { from: "content.showCapacity", fallback: true }
29350
+ },
29351
+ kind: { $bind: { from: "content.kind", fallback: "all" } },
29352
+ eventSurface: {
29353
+ $bind: { from: "content.eventSurface", fallback: "all" }
29354
+ },
29355
+ filterEventPresets: {
29356
+ $bind: { from: "content.filterEventPresets" }
29357
+ },
29358
+ scheduleScope: {
29359
+ $bind: { from: "content.scheduleScope", fallback: "any" }
29360
+ },
29361
+ filterCategoryIds: {
29362
+ $bind: { from: "content.filterCategoryIds" }
29363
+ },
29364
+ filterStaffMemberId: {
29365
+ $bind: { from: "content.filterStaffMemberId" }
29366
+ },
29367
+ filterVenueId: { $bind: { from: "content.filterVenueId" } },
29368
+ // Styling
29369
+ buttonVariant: {
29370
+ $bind: { from: "content.buttonVariant", fallback: "primary" }
29371
+ },
29372
+ buttonText: {
29373
+ $bind: { from: "content.buttonText", fallback: "View event" }
29374
+ },
29375
+ emptyMessage: { $bind: { from: "content.emptyMessage" } }
29376
+ })
29377
+ )
29020
29378
  ],
29021
- ui: {
29022
- intent: "display",
29023
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list", "timetable"] }
29024
- }
29025
- },
29026
- {
29027
- id: "showVenueFilter",
29028
- type: "boolean",
29029
- label: "Show venue filter",
29030
- description: "Show venue filter dropdown",
29031
- required: false,
29032
- defaultValue: false,
29033
- ui: {
29034
- intent: "display",
29035
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list", "timetable"] }
29036
- }
29037
- },
29038
- {
29039
- id: "showStaffFilter",
29040
- type: "boolean",
29041
- label: "Show staff filter",
29042
- description: "Show staff filter dropdown",
29043
- required: false,
29044
- defaultValue: true,
29045
- ui: {
29046
- intent: "display",
29047
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list", "timetable"] }
29048
- }
29049
- },
29050
- {
29051
- id: "showCapacity",
29052
- type: "boolean",
29053
- label: "Show available spots",
29054
- description: "Display remaining capacity on event cards and timetable cells",
29055
- required: false,
29056
- defaultValue: true,
29057
- ui: {
29058
- intent: "display",
29059
- visibleWhen: {
29060
- field: "displayMode",
29061
- oneOf: ["combined", "list", "week", "timetable"]
29062
- }
29379
+ {
29380
+ gap: "lg"
29063
29381
  }
29064
- },
29065
- // Block-level pre-filtering
29066
- {
29067
- id: "eventSurface",
29068
- type: "select",
29069
- label: "Event surface",
29070
- description: "Choose a semantic event scope",
29071
- required: false,
29072
- multiple: false,
29073
- defaultValue: "all",
29074
- options: [
29075
- { value: "all", label: "All events" },
29076
- { value: "regularClassSchedule", label: "Regular class schedule" },
29077
- { value: "specialDatedEvents", label: "Workshops and special events" },
29078
- { value: "custom", label: "Custom" }
29079
- ],
29080
- ui: { intent: "behavior" }
29081
- },
29082
- {
29083
- id: "filterEventPresets",
29084
- type: "select",
29085
- label: "Pre-filter by event type",
29086
- description: "Restrict this block to specific event types",
29087
- required: false,
29088
- multiple: true,
29089
- defaultValue: [],
29090
- options: [
29091
- { value: "class", label: "Classes" },
29092
- { value: "workshop", label: "Workshops" },
29093
- { value: "retreat", label: "Retreats" },
29094
- { value: "performance", label: "Performances" }
29095
- ],
29096
- ui: {
29097
- intent: "behavior",
29098
- visibleWhen: { field: "eventSurface", equals: "custom" }
29382
+ ),
29383
+ // sectionContainer (rb-container) already provides horizontal padding
29384
+ baseClass: "",
29385
+ spacing: "comfortable"
29386
+ })
29387
+ ];
29388
+ var eventCalendarAdditionalFields = [
29389
+ ...sectionHeaderFields("Event Calendar"),
29390
+ // Display Mode (replaces calendarView)
29391
+ {
29392
+ id: "displayMode",
29393
+ type: "select",
29394
+ label: "Display mode",
29395
+ description: "How events are displayed",
29396
+ required: false,
29397
+ multiple: false,
29398
+ defaultValue: "combined",
29399
+ options: [
29400
+ { value: "combined", label: "Combined (List + Calendar tabs)" },
29401
+ { value: "month", label: "Month calendar" },
29402
+ { value: "week", label: "Week agenda" },
29403
+ { value: "timetable", label: "Timetable" },
29404
+ { value: "list", label: "List" }
29405
+ ],
29406
+ ui: { intent: "display", hidden: true }
29407
+ },
29408
+ // List options (visible when displayMode is list or combined)
29409
+ {
29410
+ id: "listLayout",
29411
+ type: "select",
29412
+ label: "List layout",
29413
+ description: "Layout style for list view",
29414
+ required: false,
29415
+ multiple: false,
29416
+ defaultValue: "stack",
29417
+ options: eventCalendarListLayoutOptions.map((option) => ({
29418
+ value: option.id,
29419
+ label: option.label
29420
+ })),
29421
+ ui: {
29422
+ intent: "display",
29423
+ visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
29424
+ }
29425
+ },
29426
+ {
29427
+ id: "listColumns",
29428
+ type: "select",
29429
+ label: "Grid columns",
29430
+ description: "Number of columns in grid layout",
29431
+ required: false,
29432
+ multiple: false,
29433
+ defaultValue: "3",
29434
+ options: [
29435
+ { value: "2", label: "2 columns" },
29436
+ { value: "3", label: "3 columns" },
29437
+ { value: "4", label: "4 columns" }
29438
+ ],
29439
+ ui: {
29440
+ intent: "display",
29441
+ visibleWhen: { field: "listLayout", equals: "grid" }
29442
+ }
29443
+ },
29444
+ {
29445
+ id: "eventsPerPage",
29446
+ type: "select",
29447
+ label: "Events per page (cards)",
29448
+ description: "Number of events to load initially in card layouts",
29449
+ required: false,
29450
+ multiple: false,
29451
+ defaultValue: "12",
29452
+ options: [
29453
+ { value: "6", label: "6" },
29454
+ { value: "12", label: "12" },
29455
+ { value: "24", label: "24" }
29456
+ ],
29457
+ ui: {
29458
+ intent: "display",
29459
+ visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
29460
+ }
29461
+ },
29462
+ {
29463
+ id: "compactEventsPerPage",
29464
+ type: "select",
29465
+ label: "Events per page (compact)",
29466
+ description: "Number of events to show per page in compact layout",
29467
+ required: false,
29468
+ multiple: false,
29469
+ defaultValue: "10",
29470
+ options: [
29471
+ { value: "10", label: "10" },
29472
+ { value: "20", label: "20" },
29473
+ { value: "30", label: "30" }
29474
+ ],
29475
+ ui: {
29476
+ intent: "display",
29477
+ visibleWhen: { field: "listLayout", equals: "compact" }
29478
+ }
29479
+ },
29480
+ {
29481
+ id: "loadMoreText",
29482
+ type: "text",
29483
+ label: "Load more button text",
29484
+ description: "Text for the load more button",
29485
+ required: false,
29486
+ multiline: false,
29487
+ defaultValue: "Load more events",
29488
+ ui: {
29489
+ intent: "content",
29490
+ visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
29491
+ }
29492
+ },
29493
+ // Calendar options
29494
+ {
29495
+ id: "startOfWeek",
29496
+ type: "select",
29497
+ label: "Week starts on",
29498
+ description: "First day of the week",
29499
+ required: false,
29500
+ multiple: false,
29501
+ defaultValue: "monday",
29502
+ options: [
29503
+ { value: "sunday", label: "Sunday" },
29504
+ { value: "monday", label: "Monday" }
29505
+ ],
29506
+ ui: {
29507
+ intent: "display",
29508
+ visibleWhen: {
29509
+ field: "variant",
29510
+ oneOf: ["combined", "month", "week"]
29099
29511
  }
29100
- },
29101
- {
29102
- id: "scheduleScope",
29103
- type: "select",
29104
- label: "Schedule cadence",
29105
- description: "Restrict this block by recurrence",
29106
- required: false,
29107
- multiple: false,
29108
- defaultValue: "any",
29109
- options: [
29110
- { value: "any", label: "Any cadence" },
29111
- { value: "recurring", label: "Recurring only" },
29112
- { value: "oneOff", label: "One-off only" }
29113
- ],
29114
- ui: {
29115
- intent: "behavior",
29116
- visibleWhen: { field: "eventSurface", equals: "custom" }
29512
+ }
29513
+ },
29514
+ // Combined mode options
29515
+ {
29516
+ id: "calendarTabViews",
29517
+ type: "select",
29518
+ label: "Calendar tab views",
29519
+ description: "Which calendar views to show in the Calendar tab",
29520
+ required: false,
29521
+ multiple: false,
29522
+ defaultValue: "both",
29523
+ options: [
29524
+ { value: "both", label: "Month + Week toggle" },
29525
+ { value: "month", label: "Month only" },
29526
+ { value: "week", label: "Week only" }
29527
+ ],
29528
+ ui: {
29529
+ intent: "display",
29530
+ visibleWhen: { field: "variant", equals: "combined" }
29531
+ }
29532
+ },
29533
+ // Filtering options
29534
+ {
29535
+ id: "kind",
29536
+ type: "select",
29537
+ label: "Show",
29538
+ description: "Restrict this block to all offerings, courses, or events",
29539
+ required: false,
29540
+ multiple: false,
29541
+ defaultValue: "all",
29542
+ options: [
29543
+ { value: "all", label: "All offerings" },
29544
+ { value: "courses", label: "Courses only" },
29545
+ { value: "events", label: "Events only" }
29546
+ ],
29547
+ ui: { intent: "behavior" }
29548
+ },
29549
+ {
29550
+ id: "showFilters",
29551
+ type: "boolean",
29552
+ label: "Show filters",
29553
+ description: "Show category, staff, and venue filters",
29554
+ required: false,
29555
+ defaultValue: true,
29556
+ ui: {
29557
+ intent: "display",
29558
+ visibleWhen: {
29559
+ field: "variant",
29560
+ oneOf: ["combined", "list", "timetable"]
29117
29561
  }
29118
- },
29119
- createSiteOptionSelectField({
29120
- id: "filterCategoryIds",
29121
- label: "Pre-filter by categories",
29122
- description: "Restrict this block to specific event categories",
29123
- required: false,
29124
- multiple: true,
29125
- defaultValue: [],
29126
- optionSource: "eventCategories",
29127
- ui: {
29128
- intent: "behavior",
29129
- searchThreshold: 8,
29130
- visibleWhen: { field: "kind", notEquals: "courses" }
29562
+ }
29563
+ },
29564
+ {
29565
+ id: "showCategoryFilter",
29566
+ type: "select",
29567
+ label: "Show category filter",
29568
+ description: "When to show the category filter dropdown",
29569
+ required: false,
29570
+ multiple: false,
29571
+ defaultValue: "auto",
29572
+ options: [
29573
+ { value: "auto", label: "Auto (when >1 category has events)" },
29574
+ { value: "always", label: "Always" },
29575
+ { value: "never", label: "Never" }
29576
+ ],
29577
+ ui: {
29578
+ intent: "display",
29579
+ visibleWhen: {
29580
+ field: "variant",
29581
+ oneOf: ["combined", "list", "timetable"]
29131
29582
  }
29132
- }),
29133
- createSiteOptionSelectField({
29134
- id: "filterStaffMemberId",
29135
- label: "Pre-filter by staff member",
29136
- description: "Restrict this block to a single staff member",
29137
- required: false,
29138
- multiple: false,
29139
- optionSource: "staffMembers",
29140
- ui: {
29141
- intent: "behavior",
29142
- searchThreshold: 8
29583
+ }
29584
+ },
29585
+ {
29586
+ id: "showVenueFilter",
29587
+ type: "boolean",
29588
+ label: "Show venue filter",
29589
+ description: "Show venue filter dropdown",
29590
+ required: false,
29591
+ defaultValue: false,
29592
+ ui: {
29593
+ intent: "display",
29594
+ visibleWhen: {
29595
+ field: "variant",
29596
+ oneOf: ["combined", "list", "timetable"]
29143
29597
  }
29144
- }),
29145
- createSiteOptionSelectField({
29146
- id: "filterVenueId",
29147
- label: "Pre-filter by venue",
29148
- description: "Restrict this block to a single venue",
29149
- required: false,
29150
- multiple: false,
29151
- optionSource: "venues",
29152
- ui: {
29153
- intent: "behavior",
29154
- searchThreshold: 8
29598
+ }
29599
+ },
29600
+ {
29601
+ id: "showStaffFilter",
29602
+ type: "boolean",
29603
+ label: "Show staff filter",
29604
+ description: "Show staff filter dropdown",
29605
+ required: false,
29606
+ defaultValue: true,
29607
+ ui: {
29608
+ intent: "display",
29609
+ visibleWhen: {
29610
+ field: "variant",
29611
+ oneOf: ["combined", "list", "timetable"]
29155
29612
  }
29156
- }),
29157
- // Card styling
29158
- ...cardStylingFields.filter((f) => f.id === "buttonVariant" || f.id === "buttonText").map((field) => ({
29159
- ...field,
29160
- ui: {
29161
- ...field.ui ?? {},
29162
- intent: field.id === "buttonVariant" ? "style" : "content"
29613
+ }
29614
+ },
29615
+ {
29616
+ id: "showCapacity",
29617
+ type: "boolean",
29618
+ label: "Show available spots",
29619
+ description: "Display remaining capacity on event cards and timetable cells",
29620
+ required: false,
29621
+ defaultValue: true,
29622
+ ui: {
29623
+ intent: "display",
29624
+ visibleWhen: {
29625
+ field: "variant",
29626
+ oneOf: ["combined", "list", "week", "timetable"]
29163
29627
  }
29164
- })),
29165
- {
29166
- ...emptyStateField,
29167
- ui: { ...emptyStateField.ui ?? {}, intent: "display" }
29168
- },
29169
- sectionStylesField({
29170
- id: "_sectionStyles",
29171
- label: "Section styles",
29172
- renderInHeader: false
29173
- })
29174
- ],
29628
+ }
29629
+ },
29630
+ // Block-level pre-filtering
29631
+ {
29632
+ id: "eventSurface",
29633
+ type: "select",
29634
+ label: "Event surface",
29635
+ description: "Choose a semantic event scope",
29636
+ required: false,
29637
+ multiple: false,
29638
+ defaultValue: "all",
29639
+ options: [
29640
+ { value: "all", label: "All events" },
29641
+ { value: "regularClassSchedule", label: "Regular class schedule" },
29642
+ { value: "specialDatedEvents", label: "Workshops and special events" },
29643
+ { value: "custom", label: "Custom" }
29644
+ ],
29645
+ ui: { intent: "behavior" }
29646
+ },
29647
+ {
29648
+ id: "filterEventPresets",
29649
+ type: "select",
29650
+ label: "Pre-filter by event type",
29651
+ description: "Restrict this block to specific event types",
29652
+ required: false,
29653
+ multiple: true,
29654
+ defaultValue: [],
29655
+ options: [
29656
+ { value: "class", label: "Classes" },
29657
+ { value: "workshop", label: "Workshops" },
29658
+ { value: "retreat", label: "Retreats" },
29659
+ { value: "performance", label: "Performances" }
29660
+ ],
29661
+ ui: {
29662
+ intent: "behavior",
29663
+ visibleWhen: { field: "eventSurface", equals: "custom" }
29664
+ }
29665
+ },
29666
+ {
29667
+ id: "scheduleScope",
29668
+ type: "select",
29669
+ label: "Schedule cadence",
29670
+ description: "Restrict this block by recurrence",
29671
+ required: false,
29672
+ multiple: false,
29673
+ defaultValue: "any",
29674
+ options: [
29675
+ { value: "any", label: "Any cadence" },
29676
+ { value: "recurring", label: "Recurring only" },
29677
+ { value: "oneOff", label: "One-off only" }
29678
+ ],
29679
+ ui: {
29680
+ intent: "behavior",
29681
+ visibleWhen: { field: "eventSurface", equals: "custom" }
29682
+ }
29683
+ },
29684
+ createSiteOptionSelectField({
29685
+ id: "filterCategoryIds",
29686
+ label: "Pre-filter by categories",
29687
+ description: "Restrict this block to specific event categories",
29688
+ required: false,
29689
+ multiple: true,
29690
+ defaultValue: [],
29691
+ optionSource: "eventCategories",
29692
+ ui: {
29693
+ intent: "behavior",
29694
+ searchThreshold: 8,
29695
+ visibleWhen: { field: "kind", notEquals: "courses" }
29696
+ }
29697
+ }),
29698
+ createSiteOptionSelectField({
29699
+ id: "filterStaffMemberId",
29700
+ label: "Pre-filter by staff member",
29701
+ description: "Restrict this block to a single staff member",
29702
+ required: false,
29703
+ multiple: false,
29704
+ optionSource: "staffMembers",
29705
+ ui: {
29706
+ intent: "behavior",
29707
+ searchThreshold: 8
29708
+ }
29709
+ }),
29710
+ createSiteOptionSelectField({
29711
+ id: "filterVenueId",
29712
+ label: "Pre-filter by venue",
29713
+ description: "Restrict this block to a single venue",
29714
+ required: false,
29715
+ multiple: false,
29716
+ optionSource: "venues",
29717
+ ui: {
29718
+ intent: "behavior",
29719
+ searchThreshold: 8
29720
+ }
29721
+ }),
29722
+ // Card styling
29723
+ ...cardStylingFields.filter((f) => f.id === "buttonVariant" || f.id === "buttonText").map((field) => ({
29724
+ ...field,
29725
+ ui: {
29726
+ ...field.ui ?? {},
29727
+ intent: field.id === "buttonVariant" ? "style" : "content"
29728
+ }
29729
+ })),
29730
+ {
29731
+ ...emptyStateField,
29732
+ ui: { ...emptyStateField.ui ?? {}, intent: "display" }
29733
+ },
29734
+ sectionStylesField({
29735
+ id: "_sectionStyles",
29736
+ label: "Section styles",
29737
+ renderInHeader: false
29738
+ })
29739
+ ];
29740
+ var eventCalendarVariants = {
29741
+ combined: eventCalendarLayout[0],
29742
+ month: eventCalendarLayout[0],
29743
+ week: eventCalendarLayout[0],
29744
+ timetable: eventCalendarLayout[0],
29745
+ list: eventCalendarLayout[0]
29746
+ };
29747
+ var eventCalendarDerivedFields = [
29748
+ {
29749
+ id: "displayMode",
29750
+ type: "select",
29751
+ required: false,
29752
+ multiple: false,
29753
+ options: [
29754
+ { value: "combined" },
29755
+ { value: "month" },
29756
+ { value: "week" },
29757
+ { value: "timetable" },
29758
+ { value: "list" }
29759
+ ]
29760
+ },
29761
+ {
29762
+ id: "listLayout",
29763
+ type: "select",
29764
+ required: false,
29765
+ multiple: false,
29766
+ options: eventCalendarListLayoutOptions.map((option) => ({
29767
+ value: option.id
29768
+ }))
29769
+ }
29770
+ ];
29771
+ var eventCalendarContentShape = {
29772
+ additionalFields: eventCalendarDerivedFields,
29773
+ variants: eventCalendarVariants,
29774
+ skipSectionStyles: true
29775
+ };
29776
+ var eventCalendarConfig = {
29777
+ id: "block.event-calendar",
29778
+ version: "3.6.0",
29779
+ title: "Event Calendar",
29780
+ titleSource: "heading",
29781
+ description: "Display events with calendar, list, or combined views with filtering",
29782
+ // Preserve legacy section styles field configuration (renderInHeader: false).
29783
+ skipSectionStyles: true,
29784
+ additionalFields: eventCalendarAdditionalFields,
29175
29785
  styleTokens: { background: "surface", typography: "body", spacing: "md" },
29176
29786
  behaviours: {
29177
29787
  supportsThemeSwitching: true,
@@ -29191,109 +29801,21 @@ var eventCalendarManifest = createBlockManifest({
29191
29801
  "filter"
29192
29802
  ],
29193
29803
  icon: "CalendarDays",
29194
- layout: [
29195
- styledSection({
29196
- children: sectionContainer(
29197
- [
29198
- // Optional heading
29199
- text({ as: "h2" }, bind("content.heading"), when("content.heading")),
29200
- // Optional description
29201
- richText(
29202
- { className: "rb-prose rb-max-w-none" },
29203
- bind("content.description"),
29204
- when("content.description")
29205
- ),
29206
- // Event calendar component (handles all display modes)
29207
- el(
29208
- "event-calendar",
29209
- withApiBindings({
29210
- events: { $bind: { from: "data.events" } },
29211
- stage: {
29212
- $bind: { from: "$root.previewStage", fallback: "published" }
29213
- },
29214
- // Display mode
29215
- displayMode: {
29216
- $bind: { from: "content.displayMode", fallback: "combined" }
29217
- },
29218
- // List options
29219
- listLayout: { $bind: { from: "content.listLayout" } },
29220
- listColumns: { $bind: { from: "content.listColumns" } },
29221
- // Legacy compatibility: older event-calendar content used layout/columns
29222
- layout: { $bind: { from: "content.layout" } },
29223
- columns: { $bind: { from: "content.columns" } },
29224
- eventsPerPage: {
29225
- $bind: { from: "content.eventsPerPage", fallback: "12" }
29226
- },
29227
- compactEventsPerPage: {
29228
- $bind: { from: "content.compactEventsPerPage", fallback: "10" }
29229
- },
29230
- loadMoreText: {
29231
- $bind: {
29232
- from: "content.loadMoreText",
29233
- fallback: "Load more events"
29234
- }
29235
- },
29236
- // Calendar options
29237
- startOfWeek: {
29238
- $bind: { from: "content.startOfWeek", fallback: "monday" }
29239
- },
29240
- calendarTabViews: {
29241
- $bind: { from: "content.calendarTabViews", fallback: "both" }
29242
- },
29243
- // Filtering options
29244
- showFilters: {
29245
- $bind: { from: "content.showFilters", fallback: true }
29246
- },
29247
- showCategoryFilter: {
29248
- $bind: { from: "content.showCategoryFilter", fallback: "auto" }
29249
- },
29250
- showVenueFilter: {
29251
- $bind: { from: "content.showVenueFilter", fallback: false }
29252
- },
29253
- showStaffFilter: {
29254
- $bind: { from: "content.showStaffFilter", fallback: true }
29255
- },
29256
- showCapacity: {
29257
- $bind: { from: "content.showCapacity", fallback: true }
29258
- },
29259
- kind: { $bind: { from: "content.kind", fallback: "all" } },
29260
- eventSurface: {
29261
- $bind: { from: "content.eventSurface", fallback: "all" }
29262
- },
29263
- filterEventPresets: {
29264
- $bind: { from: "content.filterEventPresets" }
29265
- },
29266
- scheduleScope: {
29267
- $bind: { from: "content.scheduleScope", fallback: "any" }
29268
- },
29269
- filterCategoryIds: {
29270
- $bind: { from: "content.filterCategoryIds" }
29271
- },
29272
- filterStaffMemberId: {
29273
- $bind: { from: "content.filterStaffMemberId" }
29274
- },
29275
- filterVenueId: { $bind: { from: "content.filterVenueId" } },
29276
- // Styling
29277
- buttonVariant: {
29278
- $bind: { from: "content.buttonVariant", fallback: "primary" }
29279
- },
29280
- buttonText: {
29281
- $bind: { from: "content.buttonText", fallback: "View event" }
29282
- },
29283
- emptyMessage: { $bind: { from: "content.emptyMessage" } }
29284
- })
29285
- )
29286
- ],
29287
- {
29288
- gap: "lg"
29289
- }
29290
- ),
29291
- // sectionContainer (rb-container) already provides horizontal padding
29292
- baseClass: "",
29293
- spacing: "comfortable"
29294
- })
29295
- ]
29296
- });
29804
+ layout: eventCalendarLayout,
29805
+ variants: eventCalendarVariants,
29806
+ defaultVariant: "combined",
29807
+ variantOptions: {
29808
+ combined: { label: "Combined" },
29809
+ month: { label: "Month" },
29810
+ week: { label: "Week" },
29811
+ timetable: { label: "Timetable" },
29812
+ list: { label: "List" }
29813
+ }
29814
+ };
29815
+ var eventCalendarManifest = createBlockManifestWithContentShape(
29816
+ eventCalendarConfig,
29817
+ eventCalendarContentShape
29818
+ );
29297
29819
  var eventCalendarBlockDefinition = {
29298
29820
  manifest: eventCalendarManifest,
29299
29821
  normalizeContent: normalizeEventCalendarContent,
@@ -33465,14 +33987,29 @@ function mediaPanelCapable() {
33465
33987
  var allSectionSurfaces = [
33466
33988
  "base",
33467
33989
  "muted-band",
33468
- "accent-band"
33990
+ "accent-band",
33991
+ "brand-depth-band"
33469
33992
  ];
33470
33993
  var heroSectionSurfaces = [
33471
33994
  "base",
33472
33995
  "muted-band",
33473
33996
  "accent-band",
33997
+ "brand-depth-band",
33474
33998
  "hero-image"
33475
33999
  ];
34000
+ var scheduleTileTreatments = [
34001
+ "default",
34002
+ "quiet",
34003
+ "brand-depth"
34004
+ ];
34005
+ function scheduleDetailsCapable() {
34006
+ return declareBlockDesignCapability({
34007
+ sectionSurfaces: "supported",
34008
+ contentFrames: ["plain"],
34009
+ itemSurfaces: "unsupported",
34010
+ tileTreatments: scheduleTileTreatments
34011
+ });
34012
+ }
33476
34013
  function defaultBoundaryBias(visualWeight) {
33477
34014
  return visualWeight === "featured" || visualWeight === "immersive" ? "clear" : "soft";
33478
34015
  }
@@ -33710,7 +34247,7 @@ var systemBlockDefinitionsRaw = [
33710
34247
  flow: conversionFlow,
33711
34248
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "form", weight: "standard" })]
33712
34249
  })),
33713
- withDesignCapability("block.event-details", eventDetailsBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
34250
+ withDesignCapability("block.event-details", eventDetailsBlockDefinition, scheduleDetailsCapable(), defineBlockDesignMetadata({
33714
34251
  flow: offeringsFlow,
33715
34252
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
33716
34253
  })),
@@ -33718,7 +34255,7 @@ var systemBlockDefinitionsRaw = [
33718
34255
  flow: conversionFlow,
33719
34256
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "form", weight: "standard" })]
33720
34257
  })),
33721
- withDesignCapability("block.course-details", courseDetailsBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
34258
+ withDesignCapability("block.course-details", courseDetailsBlockDefinition, scheduleDetailsCapable(), defineBlockDesignMetadata({
33722
34259
  flow: offeringsFlow,
33723
34260
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
33724
34261
  })),
@@ -33733,7 +34270,13 @@ var systemBlockDefinitionsRaw = [
33733
34270
  })),
33734
34271
  withDesignCapability("block.event-calendar", eventCalendarBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
33735
34272
  flow: offeringsFlow,
33736
- layoutProfiles: [layoutProfile({ variantKey: "default", family: "grid", weight: "standard" })]
34273
+ layoutProfiles: [
34274
+ layoutProfile({ variantKey: "combined", family: "grid", weight: "standard" }),
34275
+ layoutProfile({ variantKey: "list", family: "stack", weight: "standard" }),
34276
+ layoutProfile({ variantKey: "month", family: "grid", weight: "standard" }),
34277
+ layoutProfile({ variantKey: "week", family: "stack", weight: "standard" }),
34278
+ layoutProfile({ variantKey: "timetable", family: "stack", weight: "standard" })
34279
+ ]
33737
34280
  })),
33738
34281
  // Friendly wrapper blocks
33739
34282
  withDesignCapability("block.team-members", teamMembersBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
@@ -36535,7 +37078,7 @@ function CoursePricingDisplay({
36535
37078
  ] }),
36536
37079
  option.description ? /* @__PURE__ */ jsx25("p", { className: "rb-caption status-muted", children: option.description }) : null
36537
37080
  ] }, option.id)) }) : /* @__PURE__ */ jsx25("p", { children: /* @__PURE__ */ jsx25("strong", { children: formatCoursePriceDisplay(pricing.display) }) }),
36538
- acceptedItems.length > 0 ? /* @__PURE__ */ jsxs12("p", { className: "rb-caption status-muted rb-mt-1", children: [
37081
+ acceptedItems.length > 0 ? /* @__PURE__ */ jsxs12("p", { className: "rb-caption rb-mt-1", children: [
36539
37082
  "You can also attend with: ",
36540
37083
  acceptedItems.join(", ")
36541
37084
  ] }) : null
@@ -36635,11 +37178,11 @@ function EventDetailsView({
36635
37178
  ) : shouldShowEventCost ? /* @__PURE__ */ jsxs13("div", { className: "rb-mt-6", children: [
36636
37179
  /* @__PURE__ */ jsx26("div", { className: "rb-label rb-mb-2", children: "Cost" }),
36637
37180
  eventPrice !== null ? /* @__PURE__ */ jsx26("p", { children: /* @__PURE__ */ jsx26("strong", { children: formatCoursePriceAmount(eventPrice, selected.currency ?? "USD") }) }) : /* @__PURE__ */ jsx26("p", { className: "rb-caption status-muted", children: "See checkout for details" }),
36638
- hasAcceptedItems ? /* @__PURE__ */ jsxs13("p", { className: "rb-caption status-muted rb-mt-1", children: [
37181
+ hasAcceptedItems ? /* @__PURE__ */ jsxs13("p", { className: "rb-caption rb-mt-1", children: [
36639
37182
  "You can also attend with: ",
36640
37183
  acceptedItems.join(", ")
36641
37184
  ] }) : null
36642
- ] }) : hasAcceptedItems ? /* @__PURE__ */ jsx26("div", { className: "rb-mt-6", children: /* @__PURE__ */ jsxs13("p", { className: "rb-caption status-muted", children: [
37185
+ ] }) : hasAcceptedItems ? /* @__PURE__ */ jsx26("div", { className: "rb-mt-6", children: /* @__PURE__ */ jsxs13("p", { className: "rb-caption", children: [
36643
37186
  "You can also attend with: ",
36644
37187
  acceptedItems.join(", ")
36645
37188
  ] }) }) : null
@@ -41452,16 +41995,16 @@ function generateSiteStyleTransitionCss(themeId) {
41452
41995
  --site-style-transition-to: rgb(var(--tb-background));
41453
41996
  }
41454
41997
 
41455
- ${selector} [data-style-group^='site-style-transition-wave-edge-'] > [data-slot='section']::after,
41456
- ${selector} [data-style-group^='site-style-transition-angle-edge-'] > [data-slot='section']::after,
41457
- ${selector} [data-style-group^='site-style-transition-soft-fade'] > [data-slot='section']::after {
41998
+ ${selector} [data-style-group^='site-style-transition-wave-edge-']::after,
41999
+ ${selector} [data-style-group^='site-style-transition-angle-edge-']::after,
42000
+ ${selector} [data-style-group^='site-style-transition-soft-fade']::after {
41458
42001
  content: '';
41459
42002
  position: absolute;
41460
42003
  left: 0;
41461
42004
  right: 0;
41462
- bottom: 0;
41463
- z-index: -5;
41464
- height: 4rem;
42005
+ bottom: -2px;
42006
+ z-index: 1;
42007
+ height: calc(4rem + 2px);
41465
42008
  pointer-events: none;
41466
42009
  }
41467
42010
 
@@ -41478,6 +42021,10 @@ ${selector} [data-style-group*='-from-accent-band-'] {
41478
42021
  --site-style-transition-from: rgb(var(--tb-primary));
41479
42022
  }
41480
42023
 
42024
+ ${selector} [data-style-group*='-from-brand-depth-band-'] {
42025
+ --site-style-transition-from: rgb(var(--tb-primary-800));
42026
+ }
42027
+
41481
42028
  ${selector} [data-style-group$='-to-base'],
41482
42029
  ${selector} [data-style-group$='-to-hero-image'] {
41483
42030
  --site-style-transition-to: rgb(var(--tb-background));
@@ -41491,7 +42038,11 @@ ${selector} [data-style-group$='-to-accent-band'] {
41491
42038
  --site-style-transition-to: rgb(var(--tb-primary));
41492
42039
  }
41493
42040
 
41494
- ${selector} [data-style-group^='site-style-transition-soft-fade'] > [data-slot='section']::after {
42041
+ ${selector} [data-style-group$='-to-brand-depth-band'] {
42042
+ --site-style-transition-to: rgb(var(--tb-primary-800));
42043
+ }
42044
+
42045
+ ${selector} [data-style-group^='site-style-transition-soft-fade']::after {
41495
42046
  background: linear-gradient(
41496
42047
  to bottom,
41497
42048
  transparent 0%,
@@ -41499,16 +42050,16 @@ ${selector} [data-style-group^='site-style-transition-soft-fade'] > [data-slot='
41499
42050
  );
41500
42051
  }
41501
42052
 
41502
- ${selector} [data-style-group^='site-style-transition-soft-fade-long-'] > [data-slot='section']::after {
42053
+ ${selector} [data-style-group^='site-style-transition-soft-fade-long-']::after {
41503
42054
  height: 6rem;
41504
42055
  }
41505
42056
 
41506
- ${selector} [data-style-group^='site-style-transition-angle-edge-'] > [data-slot='section']::after {
42057
+ ${selector} [data-style-group^='site-style-transition-angle-edge-']::after {
41507
42058
  background: var(--site-style-transition-to);
41508
42059
  clip-path: polygon(0 42%, 100% 8%, 100% 100%, 0 100%);
41509
42060
  }
41510
42061
 
41511
- ${selector} [data-style-group^='site-style-transition-wave-edge-'] > [data-slot='section']::after {
42062
+ ${selector} [data-style-group^='site-style-transition-wave-edge-']::after {
41512
42063
  background: var(--site-style-transition-to);
41513
42064
  mask-image: url("${waveTransitionMask}");
41514
42065
  mask-repeat: no-repeat;
@@ -42691,7 +43242,7 @@ function buildThemeRuntime(theme, options) {
42691
43242
  theme,
42692
43243
  accordionSystem
42693
43244
  });
42694
- const inputSystem = theme.inputs ?? generateDefaultInputSystem(theme);
43245
+ const inputSystem = resolveThemeInputSystem(theme);
42695
43246
  const inputCss = generateInputCss({
42696
43247
  themeId,
42697
43248
  theme,
@@ -42756,6 +43307,9 @@ function hydrateTheme(theme) {
42756
43307
  palette: expandPalette(theme.palette)
42757
43308
  };
42758
43309
  }
43310
+ function resolveThemeInputSystem(theme) {
43311
+ return theme.inputs ?? generateDefaultInputSystem(theme);
43312
+ }
42759
43313
  function buildThemeCssVars(theme) {
42760
43314
  const { typography, space, shadow: shadow2, motion: motion2, border: border2 } = theme;
42761
43315
  const baseSizes = computeTypeScale(typography.scale, typography.body.size);
@@ -42840,7 +43394,7 @@ function buildThemeCssVars(theme) {
42840
43394
  // Tier 2: Input styling primitives
42841
43395
  // These expose inputStyle/InputSystem values for blocks that can't use .form-* classes
42842
43396
  ...(() => {
42843
- const inputSystem = generateDefaultInputSystem(theme);
43397
+ const inputSystem = resolveThemeInputSystem(theme);
42844
43398
  return {
42845
43399
  ["--rb-input-radius"]: mapInputRadius(inputSystem.base.corners, theme.corners),
42846
43400
  ["--rb-input-focus-width"]: `${inputSystem.focus.ringWidth}px`,
@@ -51203,15 +51757,15 @@ var containerResponsiveThemeCss = `/*
51203
51757
  text-align: left;
51204
51758
  padding: 1rem;
51205
51759
  border-radius: var(--rb-event-tile-radius, calc(var(--rb-block-radius) * 0.75));
51206
- border-style: var(--rb-event-tile-border-style, var(--rb-border-style, solid));
51207
- border-width: var(--rb-event-tile-border-width, var(--rb-border-width, 1px));
51208
- border-color: var(--rb-event-tile-border, rgb(var(--tb-border)));
51209
- background: var(--rb-event-tile-bg, transparent);
51760
+ border-style: var(--rb-tile-border-style, var(--rb-event-tile-border-style, var(--rb-border-style, solid)));
51761
+ border-width: var(--rb-tile-border-width, var(--rb-event-tile-border-width, var(--rb-border-width, 1px)));
51762
+ border-color: var(--rb-tile-border, var(--rb-event-tile-border, rgb(var(--tb-border))));
51763
+ background: var(--rb-tile-bg, var(--rb-event-tile-bg, transparent));
51210
51764
  transition: border-color var(--rb-block-transition) ease,
51211
51765
  background-color var(--rb-block-transition) ease,
51212
51766
  opacity var(--rb-block-transition) ease;
51213
51767
  display: block;
51214
- opacity: var(--rb-event-tile-opacity, 1);
51768
+ opacity: var(--rb-tile-opacity, var(--rb-event-tile-opacity, 1));
51215
51769
  color: inherit;
51216
51770
  text-decoration: none;
51217
51771
  }
@@ -51222,6 +51776,25 @@ var containerResponsiveThemeCss = `/*
51222
51776
  gap: var(--rb-event-tiles-grid-gap, 0.5rem);
51223
51777
  }
51224
51778
 
51779
+ :where(.theme-scope) .rb-tile-treatment-quiet {
51780
+ --rb-tile-bg: color-mix(in oklab, rgb(var(--tb-surface)), rgb(var(--tb-muted)) 48%);
51781
+ --rb-tile-border: color-mix(in oklab, rgb(var(--tb-border)), transparent 35%);
51782
+ --rb-tile-border-hover: color-mix(in oklab, rgb(var(--tb-primary)), transparent 40%);
51783
+ }
51784
+
51785
+ :where(.theme-scope) .rb-tile-treatment-brand-depth {
51786
+ --rb-brand-depth-surface: rgb(var(--tb-primary-800));
51787
+ --rb-brand-depth-tile-surface: rgb(var(--tb-primary-900));
51788
+ --rb-brand-depth-tile-surface-selected: rgb(var(--tb-primary-950));
51789
+ --rb-tile-bg: var(--rb-brand-depth-tile-surface);
51790
+ --rb-tile-bg-selected: var(--rb-brand-depth-tile-surface-selected);
51791
+ --rb-tile-border: transparent;
51792
+ --rb-tile-border-hover: transparent;
51793
+ --rb-tile-border-selected: transparent;
51794
+ --rb-tile-border-width: 0;
51795
+ --rb-event-tile-radius: var(--rb-block-radius);
51796
+ }
51797
+
51225
51798
  @container rb-site (min-width: 768px) {
51226
51799
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
51227
51800
  :where(.theme-scope) .rb-tiles-grid {
@@ -51240,13 +51813,13 @@ var containerResponsiveThemeCss = `/*
51240
51813
  }
51241
51814
 
51242
51815
  :where(.theme-scope) :where(.rb-tile--interactive, .er-event-card):hover:not(:disabled) {
51243
- border-color: var(--rb-event-tile-border-hover, rgba(var(--tb-primary), 0.5));
51244
- opacity: var(--rb-event-tile-hover-opacity, var(--rb-event-tile-opacity, 1));
51816
+ border-color: var(--rb-tile-border-hover, var(--rb-event-tile-border-hover, rgba(var(--tb-primary), 0.5)));
51817
+ opacity: var(--rb-tile-hover-opacity, var(--rb-event-tile-hover-opacity, var(--rb-tile-opacity, var(--rb-event-tile-opacity, 1))));
51245
51818
  }
51246
51819
 
51247
51820
  :where(.theme-scope) :where(.rb-tile--selected, .er-event-card--selected) {
51248
- border-color: var(--rb-event-tile-border-selected, rgb(var(--tb-primary)));
51249
- background: var(--rb-event-tile-bg-selected, rgba(var(--tb-primary), 0.1));
51821
+ border-color: var(--rb-tile-border-selected, var(--rb-event-tile-border-selected, rgb(var(--tb-primary))));
51822
+ background: var(--rb-tile-bg-selected, var(--rb-event-tile-bg-selected, rgba(var(--tb-primary), 0.1)));
51250
51823
  }
51251
51824
 
51252
51825
  :where(.theme-scope) :where(.rb-tile--disabled, .er-event-card--disabled) {
@@ -52858,6 +53431,9 @@ function ThemeScope({
52858
53431
  import * as React7 from "react";
52859
53432
  import { Fragment as Fragment7, jsx as jsx55, jsxs as jsxs39 } from "react/jsx-runtime";
52860
53433
 
53434
+ // ../theme-core/src/siteChrome.tsx
53435
+ import { Fragment as Fragment8, jsxs as jsxs40 } from "react/jsx-runtime";
53436
+
52861
53437
  // ../blocks/src/system/runtime/bindings.ts
52862
53438
  var shouldLogWarnings = isNonProductionEnv();
52863
53439
  function isPlainObject5(value) {
@@ -53550,6 +54126,9 @@ function applyBindings(bindings, context) {
53550
54126
  }
53551
54127
  return result;
53552
54128
  }
54129
+ function applyBindingsToContent(baseContent, bindings, context) {
54130
+ return { ...baseContent, ...applyBindings(bindings, context) };
54131
+ }
53553
54132
  function setBindingValue(target, path, value) {
53554
54133
  const segments = path.split(".").map((segment) => segment.trim()).filter(Boolean);
53555
54134
  if (segments.length === 0) return;
@@ -53729,7 +54308,7 @@ function isDocWrapper(value) {
53729
54308
 
53730
54309
  // src/rendering/helpers/bindings.ts
53731
54310
  var normalizeBindingOutput2 = normalizeBindingOutput;
53732
- var applyBindings2 = applyBindings;
54311
+ var applyBindingsToContent2 = applyBindingsToContent;
53733
54312
 
53734
54313
  // src/rendering/helpers/siteCustomBlocks.ts
53735
54314
  function resolveSiteCustomBlocks(site) {
@@ -53949,7 +54528,7 @@ function resolveTemplateBlock(block, bindingContext) {
53949
54528
  }
53950
54529
  const bindings = block.bindings ?? {};
53951
54530
  const hasBindings = typeof bindings === "object" && Object.keys(bindings).length > 0;
53952
- const resolvedContent = hasBindings ? normalizeBindingOutput2(applyBindings2(bindings, bindingContext)) : baseContent;
54531
+ const resolvedContent = hasBindings ? normalizeBindingOutput2(applyBindingsToContent2(baseContent, bindings, bindingContext)) : baseContent;
53953
54532
  return {
53954
54533
  id: block.id,
53955
54534
  kind: block.blockKind,
@@ -54741,7 +55320,7 @@ function getEntrySubrouteMetadataOverrides(args) {
54741
55320
  }
54742
55321
 
54743
55322
  // src/next/catch-all.tsx
54744
- import { jsx as jsx58, jsxs as jsxs40 } from "react/jsx-runtime";
55323
+ import { jsx as jsx58, jsxs as jsxs41 } from "react/jsx-runtime";
54745
55324
  function isExpectedNotFoundError(error) {
54746
55325
  return typeof error === "object" && error !== null && "status" in error && Reflect.get(error, "status") === 404;
54747
55326
  }
@@ -54920,7 +55499,7 @@ function createCatchAllPage(options) {
54920
55499
  }
54921
55500
  )
54922
55501
  );
54923
- const pageWithLayout = /* @__PURE__ */ jsxs40("main", { children: [
55502
+ const pageWithLayout = /* @__PURE__ */ jsxs41("main", { children: [
54924
55503
  hydrationBootstrap,
54925
55504
  rendered
54926
55505
  ] });
@@ -55102,7 +55681,7 @@ var SimpleCache = class {
55102
55681
  };
55103
55682
 
55104
55683
  // src/version.ts
55105
- var SDK_VERSION = "0.60.16";
55684
+ var SDK_VERSION = "0.62.2";
55106
55685
 
55107
55686
  // src/client/error.ts
55108
55687
  var RiverbankApiError = class _RiverbankApiError extends Error {