@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
@@ -728,7 +728,11 @@ function resolveRepeaterGridColumnFieldId(options) {
728
728
 
729
729
  // ../blocks/src/system/manifest/schema.ts
730
730
  var visibilityLevels = ["admin", "designer", "author"];
731
- var siteOptionSources = ["eventCategories", "venues", "staffMembers"];
731
+ var siteOptionSources = [
732
+ "eventCategories",
733
+ "venues",
734
+ "staffMembers"
735
+ ];
732
736
  var mediaDeliverySchema = z3.object({
733
737
  sizes: z3.string().optional(),
734
738
  widthCandidates: z3.array(z3.number().int().positive()).optional(),
@@ -766,7 +770,10 @@ var uiSchema = z3.object({
766
770
  hidden: z3.boolean().optional(),
767
771
  hideLabel: z3.boolean().optional(),
768
772
  hideDescription: z3.boolean().optional(),
769
- showCharCount: z3.union([z3.number().int().positive(), z3.object({ max: z3.number().int().positive() })]).optional(),
773
+ showCharCount: z3.union([
774
+ z3.number().int().positive(),
775
+ z3.object({ max: z3.number().int().positive() })
776
+ ]).optional(),
770
777
  showSlugPreview: z3.boolean().optional(),
771
778
  variant: z3.enum(["full", "inline", "limited", "media", "notes"]).optional(),
772
779
  richTextVariant: z3.enum(["full", "inline", "limited", "media", "notes"]).optional(),
@@ -776,10 +783,7 @@ var uiSchema = z3.object({
776
783
  showMediaPreview: z3.boolean().optional(),
777
784
  showMediaOverlayActions: z3.boolean().optional(),
778
785
  mediaDelivery: mediaDeliverySchema.optional(),
779
- mediaDeliveryByVariant: z3.record(
780
- z3.string(),
781
- mediaDeliverySchema
782
- ).optional(),
786
+ mediaDeliveryByVariant: z3.record(z3.string(), mediaDeliverySchema).optional(),
783
787
  // Optional input hints for validators/widgets
784
788
  inputType: z3.enum(["text", "email", "tel", "number"]).optional(),
785
789
  min: z3.number().optional(),
@@ -887,7 +891,9 @@ var richTextFieldSchema = baseFieldSchema.extend({
887
891
  });
888
892
  var mediaFieldSchema = baseFieldSchema.extend({
889
893
  type: z3.literal("media"),
890
- mediaKinds: z3.array(z3.enum(["image", "video", "audio", "document", "spreadsheet", "archive"])).default(["image"]),
894
+ mediaKinds: z3.array(
895
+ z3.enum(["image", "video", "audio", "document", "spreadsheet", "archive"])
896
+ ).default(["image"]),
891
897
  aspectRatio: z3.string().optional()
892
898
  });
893
899
  var booleanFieldSchema = baseFieldSchema.extend({
@@ -1009,7 +1015,9 @@ var referenceFieldSchema = baseFieldSchema.extend({
1009
1015
  var itemTypeSchema = z3.object({
1010
1016
  label: z3.string().min(1),
1011
1017
  icon: z3.string().optional(),
1012
- fields: z3.lazy(() => getFieldSchemaInternal().array().min(1, "Item type requires at least one field"))
1018
+ fields: z3.lazy(
1019
+ () => getFieldSchemaInternal().array().min(1, "Item type requires at least one field")
1020
+ )
1013
1021
  });
1014
1022
  var repeaterFieldSchema = baseFieldSchema.extend({
1015
1023
  type: z3.literal("repeater"),
@@ -1019,7 +1027,9 @@ var repeaterFieldSchema = baseFieldSchema.extend({
1019
1027
  maxItems: z3.number().int().positive().optional(),
1020
1028
  // Monomorphic mode
1021
1029
  schema: z3.object({
1022
- fields: z3.lazy(() => getFieldSchemaInternal().array().min(1, "Repeater requires at least one field"))
1030
+ fields: z3.lazy(
1031
+ () => getFieldSchemaInternal().array().min(1, "Repeater requires at least one field")
1032
+ )
1023
1033
  }).optional(),
1024
1034
  // Polymorphic mode
1025
1035
  polymorphic: z3.boolean().optional(),
@@ -1065,13 +1075,19 @@ var repeaterFieldSchema = baseFieldSchema.extend({
1065
1075
  const itemTypes = Object.values(
1066
1076
  data.itemTypes
1067
1077
  );
1068
- return itemTypes.every((itemType) => Array.isArray(itemType.fields) && requiredFieldIds.every((requiredId) => itemType.fields?.some((field) => field.id === requiredId)));
1078
+ return itemTypes.every(
1079
+ (itemType) => Array.isArray(itemType.fields) && requiredFieldIds.every(
1080
+ (requiredId) => itemType.fields?.some((field) => field.id === requiredId)
1081
+ )
1082
+ );
1069
1083
  }
1070
1084
  const schemaFields = data.schema?.fields;
1071
1085
  if (!schemaFields) {
1072
1086
  return true;
1073
1087
  }
1074
- return requiredFieldIds.every((requiredId) => schemaFields.some((field) => field.id === requiredId));
1088
+ return requiredFieldIds.every(
1089
+ (requiredId) => schemaFields.some((field) => field.id === requiredId)
1090
+ );
1075
1091
  },
1076
1092
  {
1077
1093
  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`,
@@ -1099,7 +1115,9 @@ var repeaterFieldSchema = baseFieldSchema.extend({
1099
1115
  if (!schemaFields) {
1100
1116
  return true;
1101
1117
  }
1102
- const field = schemaFields.find((candidate) => candidate.id === labelField);
1118
+ const field = schemaFields.find(
1119
+ (candidate) => candidate.id === labelField
1120
+ );
1103
1121
  return field?.type === "text";
1104
1122
  },
1105
1123
  {
@@ -1110,13 +1128,17 @@ var repeaterFieldSchema = baseFieldSchema.extend({
1110
1128
  var groupFieldSchema = baseFieldSchema.extend({
1111
1129
  type: z3.literal("group"),
1112
1130
  schema: z3.object({
1113
- fields: z3.lazy(() => getFieldSchemaInternal().array().min(1, "Group requires at least one field"))
1131
+ fields: z3.lazy(
1132
+ () => getFieldSchemaInternal().array().min(1, "Group requires at least one field")
1133
+ )
1114
1134
  })
1115
1135
  });
1116
1136
  var modalFieldSchema = baseFieldSchema.extend({
1117
1137
  type: z3.literal("modal"),
1118
1138
  schema: z3.object({
1119
- fields: z3.lazy(() => getFieldSchemaInternal().array().min(1, "Modal requires at least one field"))
1139
+ fields: z3.lazy(
1140
+ () => getFieldSchemaInternal().array().min(1, "Modal requires at least one field")
1141
+ )
1120
1142
  })
1121
1143
  });
1122
1144
  var numberFieldSchema = baseFieldSchema.extend({
@@ -1226,31 +1248,35 @@ function expectParsedSelectField(field) {
1226
1248
  return field;
1227
1249
  }
1228
1250
  function createSiteOptionSelectField(input) {
1229
- return expectParsedSelectField(parseFieldDefinition({
1230
- ...input,
1231
- type: "select",
1232
- options: [],
1233
- multiple: input.multiple ?? false,
1234
- source: { kind: "site", optionSource: input.optionSource },
1235
- ui: {
1236
- ...input.ui ?? {},
1237
- widget: "siteOptionPicker",
1238
- siteOptionSource: input.optionSource
1239
- }
1240
- }));
1251
+ return expectParsedSelectField(
1252
+ parseFieldDefinition({
1253
+ ...input,
1254
+ type: "select",
1255
+ options: [],
1256
+ multiple: input.multiple ?? false,
1257
+ source: { kind: "site", optionSource: input.optionSource },
1258
+ ui: {
1259
+ ...input.ui ?? {},
1260
+ widget: "siteOptionPicker",
1261
+ siteOptionSource: input.optionSource
1262
+ }
1263
+ })
1264
+ );
1241
1265
  }
1242
1266
  function createSdkSelectField(input) {
1243
- return expectParsedSelectField(parseFieldDefinition({
1244
- ...input,
1245
- type: "select",
1246
- options: input.options,
1247
- multiple: input.multiple ?? false,
1248
- source: { kind: "sdk" },
1249
- ui: {
1250
- ...input.ui ?? {},
1251
- widget: "sdkSelect"
1252
- }
1253
- }));
1267
+ return expectParsedSelectField(
1268
+ parseFieldDefinition({
1269
+ ...input,
1270
+ type: "select",
1271
+ options: input.options,
1272
+ multiple: input.multiple ?? false,
1273
+ source: { kind: "sdk" },
1274
+ ui: {
1275
+ ...input.ui ?? {},
1276
+ widget: "sdkSelect"
1277
+ }
1278
+ })
1279
+ );
1254
1280
  }
1255
1281
  var slotSchema = z3.object({
1256
1282
  id: z3.string().min(1),
@@ -1261,8 +1287,20 @@ var slotSchema = z3.object({
1261
1287
  help: z3.string().optional(),
1262
1288
  visibleRoles: z3.array(z3.enum(visibilityLevels)).optional()
1263
1289
  });
1264
- var typographyTokens = ["display", "heading", "subheading", "body", "caption"];
1265
- var colorTokens = ["background", "surface", "foreground", "accent", "muted"];
1290
+ var typographyTokens = [
1291
+ "display",
1292
+ "heading",
1293
+ "subheading",
1294
+ "body",
1295
+ "caption"
1296
+ ];
1297
+ var colorTokens = [
1298
+ "background",
1299
+ "surface",
1300
+ "foreground",
1301
+ "accent",
1302
+ "muted"
1303
+ ];
1266
1304
  var spacingTokens = ["none", "xs", "sm", "md", "lg", "xl"];
1267
1305
  var radiusTokens = ["none", "sm", "md", "lg", "full"];
1268
1306
  var styleTokenSchema = z3.object({
@@ -1282,7 +1320,14 @@ var behaviourSchema = z3.object({
1282
1320
  // Block manages its own wrapper (for sticky/fixed positioning)
1283
1321
  managesOwnWrapper: z3.boolean().optional()
1284
1322
  });
1285
- var blockCategoryEnum = z3.enum(["marketing", "content", "blog", "media", "layout", "interactive"]);
1323
+ var blockCategoryEnum = z3.enum([
1324
+ "marketing",
1325
+ "content",
1326
+ "blog",
1327
+ "media",
1328
+ "layout",
1329
+ "interactive"
1330
+ ]);
1286
1331
  var manifestSchema = z3.object({
1287
1332
  name: z3.string().min(1),
1288
1333
  version: z3.string().min(1),
@@ -1950,6 +1995,24 @@ function resolveVariantKey(manifest, content) {
1950
1995
  return null;
1951
1996
  }
1952
1997
 
1998
+ // ../theme-core/src/site-styles/appearancePresetResolution.ts
1999
+ function assertValidOptionGroups(preset2) {
2000
+ preset2.optionGroups?.forEach((group) => {
2001
+ const selectedOption = group.options.find(
2002
+ (option) => option.id === group.selectedOptionId
2003
+ );
2004
+ if (!selectedOption) {
2005
+ throw new Error(
2006
+ `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
2007
+ );
2008
+ }
2009
+ });
2010
+ }
2011
+ function defineBlockAppearancePreset(preset2) {
2012
+ assertValidOptionGroups(preset2);
2013
+ return preset2;
2014
+ }
2015
+
1953
2016
  // ../theme-core/src/site-styles/types.ts
1954
2017
  function asDesignBlockId(value) {
1955
2018
  return brandNonEmptyString(value, "DesignBlockId");
@@ -2031,6 +2094,11 @@ function flushPanelFrame(options) {
2031
2094
  function defineFrameCapability(capability) {
2032
2095
  return capability;
2033
2096
  }
2097
+ var tileTreatmentValues = [
2098
+ "default",
2099
+ "quiet",
2100
+ "brand-depth"
2101
+ ];
2034
2102
  var eyebrowTreatmentValues = [
2035
2103
  "plain",
2036
2104
  "pill",
@@ -2046,31 +2114,13 @@ function defineBlockDesignCapability(capability) {
2046
2114
  imageSurfaceTreatments: capability.imageSurfaceTreatments ?? ["none"],
2047
2115
  imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
2048
2116
  testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"],
2117
+ tileTreatments: capability.tileTreatments ?? ["default"],
2049
2118
  eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"]
2050
2119
  };
2051
2120
  }
2052
2121
 
2053
- // ../theme-core/src/site-styles/appearancePresets.ts
2054
- function assertValidOptionGroups(preset2) {
2055
- preset2.optionGroups?.forEach((group) => {
2056
- const selectedOption = group.options.find(
2057
- (option) => option.id === group.selectedOptionId
2058
- );
2059
- if (!selectedOption) {
2060
- throw new Error(
2061
- `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
2062
- );
2063
- }
2064
- });
2065
- }
2066
- function defineBlockAppearancePreset(preset2) {
2067
- assertValidOptionGroups(preset2);
2068
- return preset2;
2069
- }
2070
- function defineSiteChromeAppearancePreset(preset2) {
2071
- return preset2;
2072
- }
2073
- var appearancePresets = [
2122
+ // ../theme-core/src/site-styles/blockAppearancePresets.ts
2123
+ var blockAppearancePresets = [
2074
2124
  defineBlockAppearancePreset({
2075
2125
  kind: "block-design",
2076
2126
  id: "hero-immersive-image",
@@ -2196,6 +2246,24 @@ var appearancePresets = [
2196
2246
  eyebrowTreatment: "accent-pill-bounce"
2197
2247
  }
2198
2248
  }),
2249
+ defineBlockAppearancePreset({
2250
+ kind: "block-design",
2251
+ id: "hero-brand-depth-expressive",
2252
+ target: "hero",
2253
+ label: "Expressive brand-depth hero",
2254
+ blockKinds: ["block.hero"],
2255
+ constraints: {
2256
+ layoutFamilies: ["centered", "compact"]
2257
+ },
2258
+ design: {
2259
+ sectionSurface: "brand-depth-band",
2260
+ contentFrame: plainFrame,
2261
+ itemSurface: "none",
2262
+ transitionAfter: "soft-fade-short",
2263
+ emphasis: "high",
2264
+ eyebrowTreatment: "accent-pill-bounce"
2265
+ }
2266
+ }),
2199
2267
  defineBlockAppearancePreset({
2200
2268
  kind: "block-design",
2201
2269
  id: "hero-contained-intro",
@@ -2224,6 +2292,20 @@ var appearancePresets = [
2224
2292
  emphasis: "high"
2225
2293
  }
2226
2294
  }),
2295
+ defineBlockAppearancePreset({
2296
+ kind: "block-design",
2297
+ id: "body-text-brand-depth-intro",
2298
+ target: "body-text",
2299
+ label: "Brand-depth intro copy",
2300
+ blockKinds: ["block.body-text"],
2301
+ design: {
2302
+ sectionSurface: "brand-depth-band",
2303
+ contentFrame: plainFrame,
2304
+ itemSurface: "none",
2305
+ transitionAfter: "soft-fade-short",
2306
+ emphasis: "high"
2307
+ }
2308
+ }),
2227
2309
  defineBlockAppearancePreset({
2228
2310
  kind: "block-design",
2229
2311
  id: "offerings-calm-list",
@@ -2266,6 +2348,21 @@ var appearancePresets = [
2266
2348
  emphasis: "medium"
2267
2349
  }
2268
2350
  }),
2351
+ defineBlockAppearancePreset({
2352
+ kind: "block-design",
2353
+ id: "schedule-details-brand-depth",
2354
+ target: "events",
2355
+ label: "Brand-depth schedule details",
2356
+ blockKinds: ["block.event-details", "block.course-details"],
2357
+ design: {
2358
+ sectionSurface: "brand-depth-band",
2359
+ contentFrame: plainFrame,
2360
+ itemSurface: "none",
2361
+ transitionAfter: "none",
2362
+ emphasis: "medium",
2363
+ tileTreatment: "brand-depth"
2364
+ }
2365
+ }),
2269
2366
  defineBlockAppearancePreset({
2270
2367
  kind: "block-design",
2271
2368
  id: "media-text-flush-feature",
@@ -2351,6 +2448,20 @@ var appearancePresets = [
2351
2448
  testimonialCardTreatment: "accent-quote"
2352
2449
  }
2353
2450
  }),
2451
+ defineBlockAppearancePreset({
2452
+ kind: "block-design",
2453
+ id: "faq-base-accordion",
2454
+ target: "faq",
2455
+ label: "Base accordion FAQ",
2456
+ blockKinds: ["block.faq"],
2457
+ design: {
2458
+ sectionSurface: "base",
2459
+ contentFrame: plainFrame,
2460
+ itemSurface: "default",
2461
+ transitionAfter: "none",
2462
+ emphasis: "medium"
2463
+ }
2464
+ }),
2354
2465
  defineBlockAppearancePreset({
2355
2466
  kind: "block-design",
2356
2467
  id: "faq-contained-help",
@@ -2393,6 +2504,20 @@ var appearancePresets = [
2393
2504
  emphasis: "high"
2394
2505
  }
2395
2506
  }),
2507
+ defineBlockAppearancePreset({
2508
+ kind: "block-design",
2509
+ id: "contact-form-brand-depth-card",
2510
+ target: "contact-form",
2511
+ label: "Brand-depth form card",
2512
+ blockKinds: ["block.form"],
2513
+ design: {
2514
+ sectionSurface: "brand-depth-band",
2515
+ contentFrame: panelFrame("raised"),
2516
+ itemSurface: "none",
2517
+ transitionAfter: "none",
2518
+ emphasis: "high"
2519
+ }
2520
+ }),
2396
2521
  defineBlockAppearancePreset({
2397
2522
  kind: "block-design",
2398
2523
  id: "cta-accent-band",
@@ -2406,7 +2531,14 @@ var appearancePresets = [
2406
2531
  transitionAfter: "none",
2407
2532
  emphasis: "high"
2408
2533
  }
2409
- }),
2534
+ })
2535
+ ];
2536
+
2537
+ // ../theme-core/src/site-styles/siteChromeAppearancePresets.ts
2538
+ function defineSiteChromeAppearancePreset(preset2) {
2539
+ return preset2;
2540
+ }
2541
+ var siteChromeAppearancePresets = [
2410
2542
  defineSiteChromeAppearancePreset({
2411
2543
  kind: "site-chrome",
2412
2544
  id: "header-clean-base",
@@ -2474,6 +2606,12 @@ var appearancePresets = [
2474
2606
  })
2475
2607
  ];
2476
2608
 
2609
+ // ../theme-core/src/site-styles/appearancePresetCatalog.ts
2610
+ var appearancePresets = [
2611
+ ...blockAppearancePresets,
2612
+ ...siteChromeAppearancePresets
2613
+ ];
2614
+
2477
2615
  // ../theme-core/src/site-styles/blockFlow.ts
2478
2616
  function defineBlockDesignMetadata(input) {
2479
2617
  const layoutProfiles = (input.layoutProfiles ?? []).map((profile) => ({
@@ -6016,6 +6154,7 @@ var sectionStylesOverrideSchema = z20.object({
6016
6154
  background: boxBackgroundSchema.nullable().optional(),
6017
6155
  spacing: semanticSpacingSchema.nullable().optional(),
6018
6156
  minHeight: z20.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
6157
+ tileTreatment: z20.enum(tileTreatmentValues).nullable().optional(),
6019
6158
  eyebrowTreatment: z20.enum(eyebrowTreatmentValues).nullable().optional()
6020
6159
  });
6021
6160
  var containerStylesOverrideSchema = z20.object({
@@ -6809,7 +6948,7 @@ var userContentFrames = [
6809
6948
  ];
6810
6949
  var generatedDesignOptionCatalog = {
6811
6950
  source: "generated",
6812
- sectionSurfaces: ["base", "muted-band", "accent-band", "hero-image"],
6951
+ sectionSurfaces: ["base", "muted-band", "accent-band", "brand-depth-band", "hero-image"],
6813
6952
  contentFrames: generatedContentFrames,
6814
6953
  itemSurfaces: ["none", "default", "flat", "outlined", "raised"],
6815
6954
  transitions: ["none", "soft-fade-short", "soft-fade-long"],
@@ -6879,6 +7018,43 @@ var expressiveBudget = {
6879
7018
  mediaDensity: "high",
6880
7019
  decorativeRepetition: "medium"
6881
7020
  };
7021
+ var expressiveUnderlineInputs = {
7022
+ base: {
7023
+ background: { type: "transparent" },
7024
+ textColorToken: "text",
7025
+ border: {
7026
+ widthClass: "border-2",
7027
+ colorToken: "border",
7028
+ style: "underline"
7029
+ },
7030
+ corners: "square",
7031
+ shadow: null,
7032
+ spacing: "compact",
7033
+ fontSize: "base"
7034
+ },
7035
+ label: {
7036
+ textColorToken: "primary",
7037
+ fontWeight: "black",
7038
+ fontSize: "xs",
7039
+ textTransform: "uppercase",
7040
+ letterSpacing: "widest",
7041
+ opacity: 1
7042
+ },
7043
+ focus: {
7044
+ ringColorToken: "secondary",
7045
+ ringWidth: "0",
7046
+ borderColorToken: "secondary"
7047
+ },
7048
+ error: {
7049
+ borderColorToken: "destructive",
7050
+ textColorToken: "destructive"
7051
+ },
7052
+ disabled: {
7053
+ backgroundColorToken: "surface",
7054
+ textColorToken: "text",
7055
+ opacity: 0.6
7056
+ }
7057
+ };
6882
7058
  function uniqueContentFrameKinds() {
6883
7059
  const kinds = [...new Set(
6884
7060
  generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
@@ -7229,15 +7405,17 @@ var curatedSiteStyles = [
7229
7405
  paragraphSize: "editorial",
7230
7406
  headingSize: "editorial"
7231
7407
  }
7232
- }
7408
+ },
7409
+ inputs: expressiveUnderlineInputs
7233
7410
  },
7234
7411
  recommendedAppearancePresetIds: [
7235
7412
  "site-header-brand-solid-inverted-cta",
7236
7413
  "site-footer-brand-two-band",
7237
7414
  "hero-brand-scrim-fixed-frame",
7238
7415
  "body-text-editorial-intro",
7416
+ "schedule-details-brand-depth",
7239
7417
  "testimonials-accent-quote-proof",
7240
- "contact-form-dark-card"
7418
+ "contact-form-brand-depth-card"
7241
7419
  ],
7242
7420
  buttonPersonalityChoices: [
7243
7421
  buttonChoice("showtime-pill"),
@@ -7475,6 +7653,7 @@ var imageSurfaceTreatmentSchema = z22.discriminatedUnion("kind", [
7475
7653
  }).strict()
7476
7654
  ]);
7477
7655
  var testimonialCardTreatmentSchema = z22.enum(["default", "accent-quote"]);
7656
+ var tileTreatmentSchema = z22.enum(tileTreatmentValues);
7478
7657
  var eyebrowTreatmentSchema = z22.enum(eyebrowTreatmentValues);
7479
7658
  function uniqueNonEmpty(values) {
7480
7659
  const uniqueValues = [...new Set(values)];
@@ -7519,6 +7698,7 @@ var blockDesignPlanSchema = z22.object({
7519
7698
  imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
7520
7699
  imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
7521
7700
  testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
7701
+ tileTreatment: tileTreatmentSchema.optional(),
7522
7702
  eyebrowTreatment: eyebrowTreatmentSchema.optional()
7523
7703
  }).strict();
7524
7704
  var styleAuthoritySchema = z22.discriminatedUnion("kind", [
@@ -7582,6 +7762,14 @@ var defaultDesignRuntimeRules = defineDesignRuntimeRules({
7582
7762
  headingColor: "primaryForeground"
7583
7763
  }
7584
7764
  },
7765
+ "brand-depth-band": {
7766
+ background: {
7767
+ type: "color",
7768
+ color: "primary-800",
7769
+ textColor: "primaryForeground",
7770
+ headingColor: "primaryForeground"
7771
+ }
7772
+ },
7585
7773
  "hero-image": {
7586
7774
  background: {
7587
7775
  type: "image",
@@ -9471,6 +9659,21 @@ function createTransformRegistry(definitions) {
9471
9659
  }
9472
9660
 
9473
9661
  // ../blocks/src/system/transforms/registry/_utils/colorResolution.ts
9662
+ var CSS_COLOR_FUNCTION_PATTERN = /^(?:rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\(/i;
9663
+ var CSS_HEX_COLOR_PATTERN = /^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;
9664
+ var THEME_COLOR_TOKEN_PATTERN = /^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*(?:\/(?:100|[1-9]?\d|0))?$/;
9665
+ var CSS_COLOR_KEYWORDS = /* @__PURE__ */ new Set([
9666
+ "transparent",
9667
+ "currentColor",
9668
+ "inherit",
9669
+ "initial",
9670
+ "revert",
9671
+ "revert-layer",
9672
+ "unset"
9673
+ ]);
9674
+ function isLiteralCssColorValue(value) {
9675
+ return CSS_HEX_COLOR_PATTERN.test(value) || CSS_COLOR_FUNCTION_PATTERN.test(value) || value.startsWith("var(") || CSS_COLOR_KEYWORDS.has(value);
9676
+ }
9474
9677
  function resolveBackgroundColorValue(tokenOrCssValue, context) {
9475
9678
  const trimmed = tokenOrCssValue.trim();
9476
9679
  if (!trimmed) return "";
@@ -9487,8 +9690,11 @@ function resolveBackgroundColorValue(tokenOrCssValue, context) {
9487
9690
  return rgbColorValue(trimmed);
9488
9691
  }
9489
9692
  }
9490
- if (trimmed === "transparent") {
9491
- return "transparent";
9693
+ if (isLiteralCssColorValue(trimmed)) {
9694
+ return trimmed;
9695
+ }
9696
+ if (THEME_COLOR_TOKEN_PATTERN.test(trimmed)) {
9697
+ return rgbColorValue(trimmed);
9492
9698
  }
9493
9699
  return trimmed;
9494
9700
  }
@@ -9744,6 +9950,15 @@ function hasFixedFrameBackgroundMotion(value) {
9744
9950
  const background = asPartialObject(input?.background);
9745
9951
  return background?.motion === "fixed-frame";
9746
9952
  }
9953
+ var tileTreatmentClassMap = {
9954
+ default: "",
9955
+ quiet: "rb-tile-treatment-quiet",
9956
+ "brand-depth": "rb-tile-treatment-brand-depth"
9957
+ };
9958
+ var tileTreatmentSet = new Set(tileTreatmentValues);
9959
+ function isTileTreatment(value) {
9960
+ return typeof value === "string" && tileTreatmentSet.has(value);
9961
+ }
9747
9962
  var sectionClassNameTransform = {
9748
9963
  id: "sectionStyles.resolveClassName",
9749
9964
  kind: "string",
@@ -9800,6 +10015,17 @@ var sectionClassNameTransform = {
9800
10015
  classes.push(minHeightClass);
9801
10016
  }
9802
10017
  }
10018
+ const tileTreatment = input?.tileTreatment;
10019
+ if (isTileTreatment(tileTreatment)) {
10020
+ const tileTreatmentClass = tileTreatmentClassMap[tileTreatment];
10021
+ if (tileTreatmentClass) {
10022
+ classes.push(tileTreatmentClass);
10023
+ }
10024
+ } else if (typeof tileTreatment === "string" && process.env.NODE_ENV !== "production") {
10025
+ console.warn(
10026
+ `[sectionStyles] Invalid tileTreatment value in _sectionStyles: "${tileTreatment}". Expected one of: ${tileTreatmentValues.join(", ")}.`
10027
+ );
10028
+ }
9803
10029
  if (hasFixedFrameBackgroundMotion(input)) {
9804
10030
  classes.push(fixedFrameScopeClass);
9805
10031
  }
@@ -12766,6 +12992,9 @@ function createBlockManifest(config) {
12766
12992
  };
12767
12993
  return augmentManifest(manifest);
12768
12994
  }
12995
+ function createBlockManifestWithContentShape(config, _contentShape) {
12996
+ return createBlockManifest(config);
12997
+ }
12769
12998
  function normalizeBlockLayout(layout) {
12770
12999
  return Array.isArray(layout) ? [...layout] : layout;
12771
13000
  }
@@ -13398,7 +13627,7 @@ var ctaComposition = composeFragments([
13398
13627
  { fragment: ctaCopyFragment },
13399
13628
  { fragment: ctaRowFragment }
13400
13629
  ]);
13401
- var ctaFullManifest = createBlockManifest({
13630
+ var ctaFullConfig = {
13402
13631
  id: "block.cta-full",
13403
13632
  title: "Full-width CTA",
13404
13633
  category: "marketing",
@@ -13416,7 +13645,8 @@ var ctaFullManifest = createBlockManifest({
13416
13645
  description: "Centered call to action with optional background image.",
13417
13646
  tags: ["cta", "call-to-action", "button", "conversion", "action", "sign-up", "get-started"],
13418
13647
  icon: "Target"
13419
- });
13648
+ };
13649
+ var ctaFullManifest = createBlockManifest(ctaFullConfig);
13420
13650
  var ctaFullBlockDefinition = {
13421
13651
  manifest: ctaFullManifest
13422
13652
  };
@@ -16597,9 +16827,9 @@ var mediaTextManifest = createBlockManifest({
16597
16827
  {
16598
16828
  id: "images",
16599
16829
  type: "repeater",
16600
- label: "Images",
16830
+ label: "Media",
16601
16831
  required: false,
16602
- itemLabel: "Image",
16832
+ itemLabel: "Media",
16603
16833
  minItems: 0,
16604
16834
  maxItems: 6,
16605
16835
  allowConversion: true,
@@ -16613,9 +16843,9 @@ var mediaTextManifest = createBlockManifest({
16613
16843
  {
16614
16844
  id: "image",
16615
16845
  type: "media",
16616
- label: "Image",
16846
+ label: "Media",
16617
16847
  required: true,
16618
- mediaKinds: ["image"]
16848
+ mediaKinds: ["image", "video"]
16619
16849
  }
16620
16850
  ]
16621
16851
  }
@@ -16693,8 +16923,8 @@ var mediaTextManifest = createBlockManifest({
16693
16923
  {
16694
16924
  id: "aspectRatio",
16695
16925
  type: "select",
16696
- label: "Image aspect ratio",
16697
- description: "Crop image to a consistent aspect ratio.",
16926
+ label: "Media aspect ratio",
16927
+ description: "Crop media to a consistent aspect ratio.",
16698
16928
  required: false,
16699
16929
  defaultValue: "auto",
16700
16930
  multiple: false,
@@ -16881,8 +17111,8 @@ var mediaTextManifest = createBlockManifest({
16881
17111
  }
16882
17112
  };
16883
17113
  })(),
16884
- description: "Two columns: image/carousel + rich text (with optional section title).",
16885
- tags: ["media", "image", "carousel", "text", "two-column", "layout"],
17114
+ description: "Two columns: media/carousel + rich text (with optional section title).",
17115
+ tags: ["media", "image", "video", "carousel", "text", "two-column", "layout"],
16886
17116
  icon: "Columns"
16887
17117
  });
16888
17118
  var mediaTextBlockDefinition = {
@@ -17033,6 +17263,19 @@ var transformSchema2 = z37.object({
17033
17263
  hotspot: hotspotSchema2.optional(),
17034
17264
  rotation: rotationSchema2.optional()
17035
17265
  });
17266
+ var mediaPosterSchema = z37.discriminatedUnion("tag", [
17267
+ z37.object({
17268
+ tag: z37.literal("storage"),
17269
+ assetId: z37.string().optional(),
17270
+ storageBucket: z37.string().min(1),
17271
+ storagePath: z37.string().min(1)
17272
+ }),
17273
+ z37.object({
17274
+ tag: z37.literal("external-src"),
17275
+ assetId: z37.string().optional(),
17276
+ src: z37.string().url()
17277
+ })
17278
+ ]);
17036
17279
  var mediaBaseSchema = z37.object({
17037
17280
  purpose: z37.string().optional(),
17038
17281
  placeholder: z37.boolean().default(true).optional(),
@@ -17046,6 +17289,7 @@ var mediaBaseSchema = z37.object({
17046
17289
  height: z37.number().optional(),
17047
17290
  storageBucket: z37.string().optional(),
17048
17291
  storagePath: z37.string().optional(),
17292
+ poster: mediaPosterSchema.optional(),
17049
17293
  transform: transformSchema2.optional()
17050
17294
  });
17051
17295
  var imageMediaSchema = mediaBaseSchema.extend({ type: z37.literal("image") });
@@ -17529,10 +17773,28 @@ import { z as z43 } from "zod";
17529
17773
 
17530
17774
  // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
17531
17775
  import { z as z42 } from "zod";
17776
+
17777
+ // ../blocks/src/system/constants/events.ts
17778
+ var eventCalendarDisplayModeValues = ["combined", "month", "week", "list", "timetable"];
17779
+ var eventCalendarListLayoutValues = ["stack", "grid", "compact"];
17780
+ var eventCalendarListLayoutOptions = [
17781
+ { id: "stack", label: "Stack" },
17782
+ { id: "grid", label: "Grid" },
17783
+ { id: "compact", label: "Compact" }
17784
+ ];
17785
+ function isEventCalendarDisplayMode(value) {
17786
+ return typeof value === "string" && eventCalendarDisplayModeValues.includes(value);
17787
+ }
17788
+ function isEventCalendarListLayout(value) {
17789
+ return typeof value === "string" && eventCalendarListLayoutValues.includes(value);
17790
+ }
17791
+
17792
+ // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
17532
17793
  var previewStageSchema = z42.enum(["preview", "published"]);
17533
17794
  var registrationButtonVariantSchema = z42.enum(["primary", "secondary", "outline"]);
17534
17795
  var eventButtonVariantSchema = z42.enum(["primary", "secondary", "outline", "link"]);
17535
- var eventLayoutSchema = z42.enum(["grid", "stack", "compact"]);
17796
+ var eventLayoutSchema = z42.enum(eventCalendarListLayoutValues);
17797
+ var eventCalendarDisplayModeSchema = z42.enum(eventCalendarDisplayModeValues);
17536
17798
  var columnOptionSchema = z42.enum(["2", "3", "4"]);
17537
17799
  var weekStartSchema = z42.enum(["sunday", "monday"]);
17538
17800
  var filterAutoShowSchema = z42.enum(["auto", "always", "never"]);
@@ -20312,6 +20574,22 @@ function resolveMediaWithCanonicalAsset(value, context) {
20312
20574
  height: asset.height ?? value.height
20313
20575
  };
20314
20576
  }
20577
+ function resolveVideoPosterUrl(value, context) {
20578
+ if (value.type !== "video") return void 0;
20579
+ const poster = value.poster;
20580
+ if (!poster) return void 0;
20581
+ switch (poster.tag) {
20582
+ case "external-src":
20583
+ return poster.src;
20584
+ case "storage":
20585
+ return resolveMediaStorageUrl({
20586
+ type: "image",
20587
+ assetId: poster.assetId,
20588
+ storageBucket: poster.storageBucket,
20589
+ storagePath: poster.storagePath
20590
+ }, context);
20591
+ }
20592
+ }
20315
20593
  var debugMediaNodeLog = (...args) => {
20316
20594
  if (typeof window === "undefined") return;
20317
20595
  const debugFlag = Reflect.get(window, "__DEBUG_MEDIA_NODE__");
@@ -20363,12 +20641,14 @@ function renderVideo(value, className, style, context, options = {}) {
20363
20641
  const src = resolvePublicMediaUrl(value, context);
20364
20642
  if (!src) return null;
20365
20643
  if (options.playback === "background") {
20644
+ const poster2 = resolveVideoPosterUrl(value, context);
20366
20645
  return /* @__PURE__ */ jsx(
20367
20646
  "video",
20368
20647
  {
20369
20648
  className,
20370
20649
  style,
20371
20650
  src,
20651
+ ...poster2 ? { poster: poster2 } : {},
20372
20652
  autoPlay: true,
20373
20653
  muted: true,
20374
20654
  loop: true,
@@ -20379,12 +20659,14 @@ function renderVideo(value, className, style, context, options = {}) {
20379
20659
  }
20380
20660
  );
20381
20661
  }
20662
+ const poster = resolveVideoPosterUrl(value, context);
20382
20663
  return /* @__PURE__ */ jsx(
20383
20664
  "video",
20384
20665
  {
20385
20666
  className,
20386
20667
  style,
20387
20668
  src,
20669
+ ...poster ? { poster } : {},
20388
20670
  controls: true,
20389
20671
  controlsList: "nodownload",
20390
20672
  preload: "metadata",
@@ -21135,7 +21417,232 @@ function buildEventListingInteractiveIslandProps(props2) {
21135
21417
  }
21136
21418
 
21137
21419
  // ../blocks/src/system/blocks/events/event-listing.ts
21138
- var eventListingManifest = createBlockManifest({
21420
+ var eventListingAdditionalFields = [
21421
+ ...sectionHeaderFields("All Events"),
21422
+ ...(() => {
21423
+ const columns = columnsField(["2", "3", "4"]);
21424
+ return [
21425
+ {
21426
+ ...layoutField,
21427
+ ui: { ...layoutField.ui ?? {}, intent: "display" }
21428
+ },
21429
+ {
21430
+ ...columns,
21431
+ ui: { ...columns.ui ?? {}, intent: "display" }
21432
+ }
21433
+ ];
21434
+ })(),
21435
+ {
21436
+ id: "eventsPerPage",
21437
+ type: "select",
21438
+ label: "Events per page",
21439
+ description: "Number of events to load at a time",
21440
+ required: false,
21441
+ multiple: false,
21442
+ defaultValue: "12",
21443
+ options: [
21444
+ { value: "3", label: "3 events" },
21445
+ { value: "6", label: "6 events" },
21446
+ { value: "12", label: "12 events" },
21447
+ { value: "24", label: "24 events" }
21448
+ ],
21449
+ ui: { intent: "display" }
21450
+ },
21451
+ {
21452
+ id: "paginationMode",
21453
+ type: "select",
21454
+ label: "More events",
21455
+ description: "How to access events beyond the initial list",
21456
+ required: false,
21457
+ multiple: false,
21458
+ defaultValue: "loadMore",
21459
+ options: [
21460
+ { value: "loadMore", label: "Load more button" },
21461
+ { value: "seeAllLink", label: "Link to another page" }
21462
+ ],
21463
+ ui: { intent: "display" }
21464
+ },
21465
+ {
21466
+ id: "seeAllUrl",
21467
+ type: "link",
21468
+ label: "See all destination",
21469
+ required: false,
21470
+ ui: {
21471
+ intent: "display",
21472
+ visibleWhen: {
21473
+ field: "paginationMode",
21474
+ equals: "seeAllLink"
21475
+ }
21476
+ }
21477
+ },
21478
+ {
21479
+ id: "loadMoreText",
21480
+ type: "text",
21481
+ label: "Button text",
21482
+ description: "Text for the pagination button or link",
21483
+ required: false,
21484
+ multiline: false,
21485
+ defaultValue: "Load more events",
21486
+ maxLength: 40
21487
+ },
21488
+ ...cardStylingFields.map((field) => ({
21489
+ ...field,
21490
+ ui: { ...field.ui ?? {}, intent: "style" }
21491
+ })),
21492
+ ...eventDisplayFields.map((field) => ({
21493
+ ...field,
21494
+ ui: { ...field.ui ?? {}, intent: "display" }
21495
+ })),
21496
+ {
21497
+ id: "kind",
21498
+ type: "select",
21499
+ label: "Show",
21500
+ description: "Choose whether this list shows courses, events, or both",
21501
+ required: false,
21502
+ multiple: false,
21503
+ defaultValue: "all",
21504
+ options: [
21505
+ { value: "all", label: "Courses and events" },
21506
+ { value: "courses", label: "Courses only" },
21507
+ { value: "events", label: "Events only" }
21508
+ ],
21509
+ ui: { intent: "behavior" }
21510
+ },
21511
+ {
21512
+ id: "eventSurface",
21513
+ type: "select",
21514
+ label: "Event surface",
21515
+ description: "Choose a semantic event scope",
21516
+ required: false,
21517
+ multiple: false,
21518
+ defaultValue: "all",
21519
+ options: [
21520
+ { value: "all", label: "All events" },
21521
+ { value: "regularClassSchedule", label: "Regular class schedule" },
21522
+ { value: "specialDatedEvents", label: "Workshops and special events" },
21523
+ { value: "custom", label: "Custom" }
21524
+ ],
21525
+ ui: { intent: "behavior" }
21526
+ },
21527
+ {
21528
+ id: "filterEventPresets",
21529
+ type: "select",
21530
+ label: "Pre-filter by event type",
21531
+ description: "Restrict this block to specific event types",
21532
+ required: false,
21533
+ multiple: true,
21534
+ defaultValue: [],
21535
+ options: [
21536
+ { value: "class", label: "Classes" },
21537
+ { value: "workshop", label: "Workshops" },
21538
+ { value: "retreat", label: "Retreats" },
21539
+ { value: "performance", label: "Performances" }
21540
+ ],
21541
+ ui: {
21542
+ intent: "behavior",
21543
+ visibleWhen: { field: "eventSurface", equals: "custom" }
21544
+ }
21545
+ },
21546
+ {
21547
+ id: "scheduleScope",
21548
+ type: "select",
21549
+ label: "Schedule cadence",
21550
+ description: "Restrict this block by recurrence",
21551
+ required: false,
21552
+ multiple: false,
21553
+ defaultValue: "any",
21554
+ options: [
21555
+ { value: "any", label: "Any cadence" },
21556
+ { value: "recurring", label: "Recurring only" },
21557
+ { value: "oneOff", label: "One-off only" }
21558
+ ],
21559
+ ui: {
21560
+ intent: "behavior",
21561
+ visibleWhen: { field: "eventSurface", equals: "custom" }
21562
+ }
21563
+ },
21564
+ {
21565
+ ...emptyStateField,
21566
+ ui: { ...emptyStateField.ui ?? {}, intent: "display" }
21567
+ },
21568
+ sectionStylesField({
21569
+ id: "_sectionStyles",
21570
+ label: "Section styles",
21571
+ renderInHeader: false
21572
+ })
21573
+ ];
21574
+ var eventListingLayout = [
21575
+ styledSection({
21576
+ children: sectionContainer([
21577
+ // Optional heading
21578
+ text(
21579
+ { as: "h2" },
21580
+ bind("content.heading"),
21581
+ when("content.heading")
21582
+ ),
21583
+ // Optional description
21584
+ richText(
21585
+ { className: "rb-prose rb-max-w-none" },
21586
+ bind("content.description"),
21587
+ when("content.description")
21588
+ ),
21589
+ // Event listing component with pagination
21590
+ el("event-listing", withApiBindings({
21591
+ events: { $bind: { from: "data.events" } },
21592
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
21593
+ layout: { $bind: { from: "content.layout", fallback: "grid" } },
21594
+ columns: { $bind: { from: "content.columns", fallback: "3" } },
21595
+ eventsPerPage: { $bind: { from: "content.eventsPerPage", fallback: "12" } },
21596
+ paginationMode: { $bind: { from: "content.paginationMode", fallback: "loadMore" } },
21597
+ seeAllUrl: { $bind: { from: "content.seeAllUrl", transforms: [{ id: "links.resolve" }] } },
21598
+ loadMoreText: { $bind: { from: "content.loadMoreText", fallback: "Load more events" } },
21599
+ cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
21600
+ buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
21601
+ buttonText: { $bind: { from: "content.buttonText", fallback: "View event" } },
21602
+ showVenue: { $bind: { from: "content.showVenue" } },
21603
+ showMap: { $bind: { from: "content.showMap" } },
21604
+ showCapacity: { $bind: { from: "content.showCapacity" } },
21605
+ eventKind: { $bind: { from: "content.kind", fallback: "all" } },
21606
+ eventSurface: { $bind: { from: "content.eventSurface", fallback: "all" } },
21607
+ filterEventPresets: { $bind: { from: "content.filterEventPresets" } },
21608
+ scheduleScope: { $bind: { from: "content.scheduleScope", fallback: "any" } },
21609
+ emptyMessage: { $bind: { from: "content.emptyMessage" } }
21610
+ }))
21611
+ ], {
21612
+ gap: "lg"
21613
+ }),
21614
+ // sectionContainer (rb-container) already provides horizontal padding
21615
+ baseClass: "",
21616
+ spacing: "comfortable"
21617
+ })
21618
+ ];
21619
+ var eventListingDerivedFields = [
21620
+ {
21621
+ id: "layout",
21622
+ type: "select",
21623
+ required: false,
21624
+ multiple: false,
21625
+ options: [
21626
+ { value: "grid" },
21627
+ { value: "stack" }
21628
+ ]
21629
+ },
21630
+ {
21631
+ id: "paginationMode",
21632
+ type: "select",
21633
+ required: false,
21634
+ multiple: false,
21635
+ options: [
21636
+ { value: "loadMore" },
21637
+ { value: "seeAllLink" }
21638
+ ]
21639
+ }
21640
+ ];
21641
+ var eventListingContentShape = {
21642
+ additionalFields: eventListingDerivedFields,
21643
+ skipSectionStyles: true
21644
+ };
21645
+ var eventListingConfig = {
21139
21646
  id: "block.event-listing",
21140
21647
  version: "1.1.0",
21141
21648
  title: "Event Listing",
@@ -21143,211 +21650,18 @@ var eventListingManifest = createBlockManifest({
21143
21650
  description: "Paginated list of all upcoming events",
21144
21651
  // Preserve legacy section styles field configuration (renderInHeader: false).
21145
21652
  skipSectionStyles: true,
21146
- additionalFields: [
21147
- ...sectionHeaderFields("All Events"),
21148
- ...(() => {
21149
- const columns = columnsField(["2", "3", "4"]);
21150
- return [
21151
- {
21152
- ...layoutField,
21153
- ui: { ...layoutField.ui ?? {}, intent: "display" }
21154
- },
21155
- {
21156
- ...columns,
21157
- ui: { ...columns.ui ?? {}, intent: "display" }
21158
- }
21159
- ];
21160
- })(),
21161
- {
21162
- id: "eventsPerPage",
21163
- type: "select",
21164
- label: "Events per page",
21165
- description: "Number of events to load at a time",
21166
- required: false,
21167
- multiple: false,
21168
- defaultValue: "12",
21169
- options: [
21170
- { value: "3", label: "3 events" },
21171
- { value: "6", label: "6 events" },
21172
- { value: "12", label: "12 events" },
21173
- { value: "24", label: "24 events" }
21174
- ],
21175
- ui: { intent: "display" }
21176
- },
21177
- {
21178
- id: "paginationMode",
21179
- type: "select",
21180
- label: "More events",
21181
- description: "How to access events beyond the initial list",
21182
- required: false,
21183
- multiple: false,
21184
- defaultValue: "loadMore",
21185
- options: [
21186
- { value: "loadMore", label: "Load more button" },
21187
- { value: "seeAllLink", label: "Link to another page" }
21188
- ],
21189
- ui: { intent: "display" }
21190
- },
21191
- {
21192
- id: "seeAllUrl",
21193
- type: "link",
21194
- label: "See all destination",
21195
- required: false,
21196
- ui: {
21197
- intent: "display",
21198
- visibleWhen: {
21199
- field: "paginationMode",
21200
- equals: "seeAllLink"
21201
- }
21202
- }
21203
- },
21204
- {
21205
- id: "loadMoreText",
21206
- type: "text",
21207
- label: "Button text",
21208
- description: "Text for the pagination button or link",
21209
- required: false,
21210
- multiline: false,
21211
- defaultValue: "Load more events",
21212
- maxLength: 40
21213
- },
21214
- ...cardStylingFields.map((field) => ({
21215
- ...field,
21216
- ui: { ...field.ui ?? {}, intent: "style" }
21217
- })),
21218
- ...eventDisplayFields.map((field) => ({
21219
- ...field,
21220
- ui: { ...field.ui ?? {}, intent: "display" }
21221
- })),
21222
- {
21223
- id: "kind",
21224
- type: "select",
21225
- label: "Show",
21226
- description: "Choose whether this list shows courses, events, or both",
21227
- required: false,
21228
- multiple: false,
21229
- defaultValue: "all",
21230
- options: [
21231
- { value: "all", label: "Courses and events" },
21232
- { value: "courses", label: "Courses only" },
21233
- { value: "events", label: "Events only" }
21234
- ],
21235
- ui: { intent: "behavior" }
21236
- },
21237
- {
21238
- id: "eventSurface",
21239
- type: "select",
21240
- label: "Event surface",
21241
- description: "Choose a semantic event scope",
21242
- required: false,
21243
- multiple: false,
21244
- defaultValue: "all",
21245
- options: [
21246
- { value: "all", label: "All events" },
21247
- { value: "regularClassSchedule", label: "Regular class schedule" },
21248
- { value: "specialDatedEvents", label: "Workshops and special events" },
21249
- { value: "custom", label: "Custom" }
21250
- ],
21251
- ui: { intent: "behavior" }
21252
- },
21253
- {
21254
- id: "filterEventPresets",
21255
- type: "select",
21256
- label: "Pre-filter by event type",
21257
- description: "Restrict this block to specific event types",
21258
- required: false,
21259
- multiple: true,
21260
- defaultValue: [],
21261
- options: [
21262
- { value: "class", label: "Classes" },
21263
- { value: "workshop", label: "Workshops" },
21264
- { value: "retreat", label: "Retreats" },
21265
- { value: "performance", label: "Performances" }
21266
- ],
21267
- ui: {
21268
- intent: "behavior",
21269
- visibleWhen: { field: "eventSurface", equals: "custom" }
21270
- }
21271
- },
21272
- {
21273
- id: "scheduleScope",
21274
- type: "select",
21275
- label: "Schedule cadence",
21276
- description: "Restrict this block by recurrence",
21277
- required: false,
21278
- multiple: false,
21279
- defaultValue: "any",
21280
- options: [
21281
- { value: "any", label: "Any cadence" },
21282
- { value: "recurring", label: "Recurring only" },
21283
- { value: "oneOff", label: "One-off only" }
21284
- ],
21285
- ui: {
21286
- intent: "behavior",
21287
- visibleWhen: { field: "eventSurface", equals: "custom" }
21288
- }
21289
- },
21290
- {
21291
- ...emptyStateField,
21292
- ui: { ...emptyStateField.ui ?? {}, intent: "display" }
21293
- },
21294
- sectionStylesField({
21295
- id: "_sectionStyles",
21296
- label: "Section styles",
21297
- renderInHeader: false
21298
- })
21299
- ],
21653
+ additionalFields: eventListingAdditionalFields,
21300
21654
  styleTokens: { background: "surface", typography: "body", spacing: "md" },
21301
21655
  behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: true },
21302
21656
  category: "interactive",
21303
21657
  tags: ["events", "listing", "paginated", "archive", "all-events"],
21304
21658
  icon: "List",
21305
- layout: [
21306
- styledSection({
21307
- children: sectionContainer([
21308
- // Optional heading
21309
- text(
21310
- { as: "h2" },
21311
- bind("content.heading"),
21312
- when("content.heading")
21313
- ),
21314
- // Optional description
21315
- richText(
21316
- { className: "rb-prose rb-max-w-none" },
21317
- bind("content.description"),
21318
- when("content.description")
21319
- ),
21320
- // Event listing component with pagination
21321
- el("event-listing", withApiBindings({
21322
- events: { $bind: { from: "data.events" } },
21323
- stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
21324
- layout: { $bind: { from: "content.layout", fallback: "grid" } },
21325
- columns: { $bind: { from: "content.columns", fallback: "3" } },
21326
- eventsPerPage: { $bind: { from: "content.eventsPerPage", fallback: "12" } },
21327
- paginationMode: { $bind: { from: "content.paginationMode", fallback: "loadMore" } },
21328
- seeAllUrl: { $bind: { from: "content.seeAllUrl", transforms: [{ id: "links.resolve" }] } },
21329
- loadMoreText: { $bind: { from: "content.loadMoreText", fallback: "Load more events" } },
21330
- cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
21331
- buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
21332
- buttonText: { $bind: { from: "content.buttonText", fallback: "View event" } },
21333
- showVenue: { $bind: { from: "content.showVenue" } },
21334
- showMap: { $bind: { from: "content.showMap" } },
21335
- showCapacity: { $bind: { from: "content.showCapacity" } },
21336
- eventKind: { $bind: { from: "content.kind", fallback: "all" } },
21337
- eventSurface: { $bind: { from: "content.eventSurface", fallback: "all" } },
21338
- filterEventPresets: { $bind: { from: "content.filterEventPresets" } },
21339
- scheduleScope: { $bind: { from: "content.scheduleScope", fallback: "any" } },
21340
- emptyMessage: { $bind: { from: "content.emptyMessage" } }
21341
- }))
21342
- ], {
21343
- gap: "lg"
21344
- }),
21345
- // sectionContainer (rb-container) already provides horizontal padding
21346
- baseClass: "",
21347
- spacing: "comfortable"
21348
- })
21349
- ]
21350
- });
21659
+ layout: eventListingLayout
21660
+ };
21661
+ var eventListingManifest = createBlockManifestWithContentShape(
21662
+ eventListingConfig,
21663
+ eventListingContentShape
21664
+ );
21351
21665
  var eventListingBlockDefinition = {
21352
21666
  manifest: eventListingManifest,
21353
21667
  runtime: eventListingBlockRuntime,
@@ -21374,7 +21688,6 @@ var eventListingBlockDefinition = {
21374
21688
 
21375
21689
  // ../blocks/src/system/runtime/nodes/events/EventCalendar.interactive.ts
21376
21690
  import { z as z49 } from "zod";
21377
- var displayModeSchema = z49.enum(["combined", "month", "week", "list", "timetable"]);
21378
21691
  var eventBlockKindSchema2 = z49.enum(eventBlockKindValues);
21379
21692
  var eventSurfaceScopeSchema2 = z49.enum(eventSurfaceScopeValues);
21380
21693
  var eventScheduleScopeSchema3 = z49.enum(eventScheduleScopeValues);
@@ -21384,7 +21697,8 @@ var eventCalendarSourceSchema = z49.object(
21384
21697
  siteId: z49.string(),
21385
21698
  apiBaseUrl: z49.string().optional(),
21386
21699
  stage: previewStageSchema.optional(),
21387
- displayMode: displayModeSchema.nullable().optional(),
21700
+ variant: eventCalendarDisplayModeSchema.nullable().optional(),
21701
+ displayMode: eventCalendarDisplayModeSchema.nullable().optional(),
21388
21702
  listLayout: eventLayoutSchema.optional(),
21389
21703
  listColumns: columnOptionSchema.optional(),
21390
21704
  layout: eventLayoutSchema.optional(),
@@ -21416,7 +21730,7 @@ var eventCalendarSourceSchema = z49.object(
21416
21730
  );
21417
21731
  var eventCalendarDisplaySchema = z49.object({
21418
21732
  kind: z49.literal("event-calendar"),
21419
- displayMode: displayModeSchema,
21733
+ displayMode: eventCalendarDisplayModeSchema,
21420
21734
  className: z49.string().nullable(),
21421
21735
  events: z49.array(publicEventSchema),
21422
21736
  listLayout: eventLayoutSchema,
@@ -21471,7 +21785,7 @@ var eventCalendarIslandMetaKeys = defineInteractiveIslandMetaKeys(
21471
21785
  function buildEventCalendarDisplay(source) {
21472
21786
  return {
21473
21787
  kind: "event-calendar",
21474
- displayMode: source.displayMode ?? "combined",
21788
+ displayMode: source.variant ?? source.displayMode ?? "combined",
21475
21789
  className: source.className ?? null,
21476
21790
  events: (source.events ?? []).slice().sort(
21477
21791
  (left, right) => new Date(left.startsAt).getTime() - new Date(right.startsAt).getTime()
@@ -21571,8 +21885,12 @@ function buildEventCalendarInteractiveIslandProps(props2) {
21571
21885
  function normalizeEventCalendarContent(content) {
21572
21886
  const record = typeof content === "object" && content !== null ? content : {};
21573
21887
  const kind = normalizeEventBlockKind(record.kind);
21888
+ const variant = normalizeEventCalendarDisplayMode(record.variant) ?? normalizeEventCalendarDisplayMode(record.displayMode);
21574
21889
  return {
21575
21890
  ...record,
21891
+ ...variant ? { variant } : {},
21892
+ displayMode: normalizeEventCalendarDisplayMode(record.displayMode),
21893
+ listLayout: normalizeEventCalendarListLayout(record.listLayout),
21576
21894
  kind,
21577
21895
  eventSurface: normalizeEventSurfaceScope(record.eventSurface),
21578
21896
  filterEventPresets: normalizeEventSurfacePresets(record.filterEventPresets),
@@ -21584,355 +21902,515 @@ function normalizeEventCalendarContent(content) {
21584
21902
  filterVenueId: normalizeEventVenueId(record.filterVenueId)
21585
21903
  };
21586
21904
  }
21587
- var eventCalendarManifest = createBlockManifest({
21588
- id: "block.event-calendar",
21589
- version: "3.6.0",
21590
- title: "Event Calendar",
21591
- titleSource: "heading",
21592
- description: "Display events with calendar, list, or combined views with filtering",
21593
- // Preserve legacy section styles field configuration (renderInHeader: false).
21594
- skipSectionStyles: true,
21595
- additionalFields: [
21596
- ...sectionHeaderFields("Event Calendar"),
21597
- // Display Mode (replaces calendarView)
21598
- {
21599
- id: "displayMode",
21600
- type: "select",
21601
- label: "Display mode",
21602
- description: "How events are displayed",
21603
- required: false,
21604
- multiple: false,
21605
- defaultValue: "combined",
21606
- options: [
21607
- { value: "combined", label: "Combined (List + Calendar tabs)" },
21608
- { value: "month", label: "Month calendar" },
21609
- { value: "week", label: "Week agenda" },
21610
- { value: "timetable", label: "Timetable" },
21611
- { value: "list", label: "List" }
21612
- ],
21613
- ui: { intent: "display" }
21614
- },
21615
- // List options (visible when displayMode is list or combined)
21616
- {
21617
- id: "listLayout",
21618
- type: "select",
21619
- label: "List layout",
21620
- description: "Layout style for list view",
21621
- required: false,
21622
- multiple: false,
21623
- defaultValue: "stack",
21624
- options: [
21625
- { value: "stack", label: "Stack (full-width cards)" },
21626
- { value: "grid", label: "Grid" },
21627
- { value: "compact", label: "Compact (dense rows)" }
21628
- ],
21629
- ui: {
21630
- intent: "display",
21631
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list"] }
21632
- }
21633
- },
21634
- {
21635
- id: "listColumns",
21636
- type: "select",
21637
- label: "Grid columns",
21638
- description: "Number of columns in grid layout",
21639
- required: false,
21640
- multiple: false,
21641
- defaultValue: "3",
21642
- options: [
21643
- { value: "2", label: "2 columns" },
21644
- { value: "3", label: "3 columns" },
21645
- { value: "4", label: "4 columns" }
21646
- ],
21647
- ui: {
21648
- intent: "display",
21649
- visibleWhen: { field: "listLayout", equals: "grid" }
21650
- }
21651
- },
21652
- {
21653
- id: "eventsPerPage",
21654
- type: "select",
21655
- label: "Events per page (cards)",
21656
- description: "Number of events to load initially in card layouts",
21657
- required: false,
21658
- multiple: false,
21659
- defaultValue: "12",
21660
- options: [
21661
- { value: "6", label: "6" },
21662
- { value: "12", label: "12" },
21663
- { value: "24", label: "24" }
21664
- ],
21665
- ui: {
21666
- intent: "display",
21667
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list"] }
21668
- }
21669
- },
21670
- {
21671
- id: "compactEventsPerPage",
21672
- type: "select",
21673
- label: "Events per page (compact)",
21674
- description: "Number of events to show per page in compact layout",
21675
- required: false,
21676
- multiple: false,
21677
- defaultValue: "10",
21678
- options: [
21679
- { value: "10", label: "10" },
21680
- { value: "20", label: "20" },
21681
- { value: "30", label: "30" }
21682
- ],
21683
- ui: {
21684
- intent: "display",
21685
- visibleWhen: { field: "listLayout", equals: "compact" }
21686
- }
21687
- },
21688
- {
21689
- id: "loadMoreText",
21690
- type: "text",
21691
- label: "Load more button text",
21692
- description: "Text for the load more button",
21693
- required: false,
21694
- multiline: false,
21695
- defaultValue: "Load more events",
21696
- ui: {
21697
- intent: "content",
21698
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list"] }
21699
- }
21700
- },
21701
- // Calendar options
21702
- {
21703
- id: "startOfWeek",
21704
- type: "select",
21705
- label: "Week starts on",
21706
- description: "First day of the week",
21707
- required: false,
21708
- multiple: false,
21709
- defaultValue: "monday",
21710
- options: [
21711
- { value: "sunday", label: "Sunday" },
21712
- { value: "monday", label: "Monday" }
21713
- ],
21714
- ui: {
21715
- intent: "display",
21716
- visibleWhen: {
21717
- field: "displayMode",
21718
- oneOf: ["combined", "month", "week"]
21719
- }
21720
- }
21721
- },
21722
- // Combined mode options
21723
- {
21724
- id: "calendarTabViews",
21725
- type: "select",
21726
- label: "Calendar tab views",
21727
- description: "Which calendar views to show in the Calendar tab",
21728
- required: false,
21729
- multiple: false,
21730
- defaultValue: "both",
21731
- options: [
21732
- { value: "both", label: "Month + Week toggle" },
21733
- { value: "month", label: "Month only" },
21734
- { value: "week", label: "Week only" }
21735
- ],
21736
- ui: {
21737
- intent: "display",
21738
- visibleWhen: { field: "displayMode", equals: "combined" }
21739
- }
21740
- },
21741
- // Filtering options
21742
- {
21743
- id: "kind",
21744
- type: "select",
21745
- label: "Show",
21746
- description: "Restrict this block to all offerings, courses, or events",
21747
- required: false,
21748
- multiple: false,
21749
- defaultValue: "all",
21750
- options: [
21751
- { value: "all", label: "All offerings" },
21752
- { value: "courses", label: "Courses only" },
21753
- { value: "events", label: "Events only" }
21754
- ],
21755
- ui: { intent: "behavior" }
21756
- },
21757
- {
21758
- id: "showFilters",
21759
- type: "boolean",
21760
- label: "Show filters",
21761
- description: "Show category, staff, and venue filters",
21762
- required: false,
21763
- defaultValue: true,
21764
- ui: {
21765
- intent: "display",
21766
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list", "timetable"] }
21767
- }
21768
- },
21769
- {
21770
- id: "showCategoryFilter",
21771
- type: "select",
21772
- label: "Show category filter",
21773
- description: "When to show the category filter dropdown",
21774
- required: false,
21775
- multiple: false,
21776
- defaultValue: "auto",
21777
- options: [
21778
- { value: "auto", label: "Auto (when >1 category has events)" },
21779
- { value: "always", label: "Always" },
21780
- { value: "never", label: "Never" }
21905
+ function normalizeEventCalendarDisplayMode(value) {
21906
+ return isEventCalendarDisplayMode(value) ? value : void 0;
21907
+ }
21908
+ function normalizeEventCalendarListLayout(value) {
21909
+ return isEventCalendarListLayout(value) ? value : void 0;
21910
+ }
21911
+ var eventCalendarLayout = [
21912
+ styledSection({
21913
+ children: sectionContainer(
21914
+ [
21915
+ // Optional heading
21916
+ text({ as: "h2" }, bind("content.heading"), when("content.heading")),
21917
+ // Optional description
21918
+ richText(
21919
+ { className: "rb-prose rb-max-w-none" },
21920
+ bind("content.description"),
21921
+ when("content.description")
21922
+ ),
21923
+ // Event calendar component (handles all display modes)
21924
+ el(
21925
+ "event-calendar",
21926
+ withApiBindings({
21927
+ events: { $bind: { from: "data.events" } },
21928
+ stage: {
21929
+ $bind: { from: "$root.previewStage", fallback: "published" }
21930
+ },
21931
+ // Variant is the new Theme V2-facing display mode. displayMode is
21932
+ // retained as a legacy fallback for existing content.
21933
+ variant: {
21934
+ $bind: { from: "content.variant" }
21935
+ },
21936
+ displayMode: {
21937
+ $bind: { from: "content.displayMode" }
21938
+ },
21939
+ // List options
21940
+ listLayout: { $bind: { from: "content.listLayout" } },
21941
+ listColumns: { $bind: { from: "content.listColumns" } },
21942
+ // Legacy compatibility: older event-calendar content used layout/columns
21943
+ layout: { $bind: { from: "content.layout" } },
21944
+ columns: { $bind: { from: "content.columns" } },
21945
+ eventsPerPage: {
21946
+ $bind: { from: "content.eventsPerPage", fallback: "12" }
21947
+ },
21948
+ compactEventsPerPage: {
21949
+ $bind: { from: "content.compactEventsPerPage", fallback: "10" }
21950
+ },
21951
+ loadMoreText: {
21952
+ $bind: {
21953
+ from: "content.loadMoreText",
21954
+ fallback: "Load more events"
21955
+ }
21956
+ },
21957
+ // Calendar options
21958
+ startOfWeek: {
21959
+ $bind: { from: "content.startOfWeek", fallback: "monday" }
21960
+ },
21961
+ calendarTabViews: {
21962
+ $bind: { from: "content.calendarTabViews", fallback: "both" }
21963
+ },
21964
+ // Filtering options
21965
+ showFilters: {
21966
+ $bind: { from: "content.showFilters", fallback: true }
21967
+ },
21968
+ showCategoryFilter: {
21969
+ $bind: { from: "content.showCategoryFilter", fallback: "auto" }
21970
+ },
21971
+ showVenueFilter: {
21972
+ $bind: { from: "content.showVenueFilter", fallback: false }
21973
+ },
21974
+ showStaffFilter: {
21975
+ $bind: { from: "content.showStaffFilter", fallback: true }
21976
+ },
21977
+ showCapacity: {
21978
+ $bind: { from: "content.showCapacity", fallback: true }
21979
+ },
21980
+ kind: { $bind: { from: "content.kind", fallback: "all" } },
21981
+ eventSurface: {
21982
+ $bind: { from: "content.eventSurface", fallback: "all" }
21983
+ },
21984
+ filterEventPresets: {
21985
+ $bind: { from: "content.filterEventPresets" }
21986
+ },
21987
+ scheduleScope: {
21988
+ $bind: { from: "content.scheduleScope", fallback: "any" }
21989
+ },
21990
+ filterCategoryIds: {
21991
+ $bind: { from: "content.filterCategoryIds" }
21992
+ },
21993
+ filterStaffMemberId: {
21994
+ $bind: { from: "content.filterStaffMemberId" }
21995
+ },
21996
+ filterVenueId: { $bind: { from: "content.filterVenueId" } },
21997
+ // Styling
21998
+ buttonVariant: {
21999
+ $bind: { from: "content.buttonVariant", fallback: "primary" }
22000
+ },
22001
+ buttonText: {
22002
+ $bind: { from: "content.buttonText", fallback: "View event" }
22003
+ },
22004
+ emptyMessage: { $bind: { from: "content.emptyMessage" } }
22005
+ })
22006
+ )
21781
22007
  ],
21782
- ui: {
21783
- intent: "display",
21784
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list", "timetable"] }
21785
- }
21786
- },
21787
- {
21788
- id: "showVenueFilter",
21789
- type: "boolean",
21790
- label: "Show venue filter",
21791
- description: "Show venue filter dropdown",
21792
- required: false,
21793
- defaultValue: false,
21794
- ui: {
21795
- intent: "display",
21796
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list", "timetable"] }
21797
- }
21798
- },
21799
- {
21800
- id: "showStaffFilter",
21801
- type: "boolean",
21802
- label: "Show staff filter",
21803
- description: "Show staff filter dropdown",
21804
- required: false,
21805
- defaultValue: true,
21806
- ui: {
21807
- intent: "display",
21808
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list", "timetable"] }
21809
- }
21810
- },
21811
- {
21812
- id: "showCapacity",
21813
- type: "boolean",
21814
- label: "Show available spots",
21815
- description: "Display remaining capacity on event cards and timetable cells",
21816
- required: false,
21817
- defaultValue: true,
21818
- ui: {
21819
- intent: "display",
21820
- visibleWhen: {
21821
- field: "displayMode",
21822
- oneOf: ["combined", "list", "week", "timetable"]
21823
- }
22008
+ {
22009
+ gap: "lg"
21824
22010
  }
21825
- },
21826
- // Block-level pre-filtering
21827
- {
21828
- id: "eventSurface",
21829
- type: "select",
21830
- label: "Event surface",
21831
- description: "Choose a semantic event scope",
21832
- required: false,
21833
- multiple: false,
21834
- defaultValue: "all",
21835
- options: [
21836
- { value: "all", label: "All events" },
21837
- { value: "regularClassSchedule", label: "Regular class schedule" },
21838
- { value: "specialDatedEvents", label: "Workshops and special events" },
21839
- { value: "custom", label: "Custom" }
21840
- ],
21841
- ui: { intent: "behavior" }
21842
- },
21843
- {
21844
- id: "filterEventPresets",
21845
- type: "select",
21846
- label: "Pre-filter by event type",
21847
- description: "Restrict this block to specific event types",
21848
- required: false,
21849
- multiple: true,
21850
- defaultValue: [],
21851
- options: [
21852
- { value: "class", label: "Classes" },
21853
- { value: "workshop", label: "Workshops" },
21854
- { value: "retreat", label: "Retreats" },
21855
- { value: "performance", label: "Performances" }
21856
- ],
21857
- ui: {
21858
- intent: "behavior",
21859
- visibleWhen: { field: "eventSurface", equals: "custom" }
22011
+ ),
22012
+ // sectionContainer (rb-container) already provides horizontal padding
22013
+ baseClass: "",
22014
+ spacing: "comfortable"
22015
+ })
22016
+ ];
22017
+ var eventCalendarAdditionalFields = [
22018
+ ...sectionHeaderFields("Event Calendar"),
22019
+ // Display Mode (replaces calendarView)
22020
+ {
22021
+ id: "displayMode",
22022
+ type: "select",
22023
+ label: "Display mode",
22024
+ description: "How events are displayed",
22025
+ required: false,
22026
+ multiple: false,
22027
+ defaultValue: "combined",
22028
+ options: [
22029
+ { value: "combined", label: "Combined (List + Calendar tabs)" },
22030
+ { value: "month", label: "Month calendar" },
22031
+ { value: "week", label: "Week agenda" },
22032
+ { value: "timetable", label: "Timetable" },
22033
+ { value: "list", label: "List" }
22034
+ ],
22035
+ ui: { intent: "display", hidden: true }
22036
+ },
22037
+ // List options (visible when displayMode is list or combined)
22038
+ {
22039
+ id: "listLayout",
22040
+ type: "select",
22041
+ label: "List layout",
22042
+ description: "Layout style for list view",
22043
+ required: false,
22044
+ multiple: false,
22045
+ defaultValue: "stack",
22046
+ options: eventCalendarListLayoutOptions.map((option) => ({
22047
+ value: option.id,
22048
+ label: option.label
22049
+ })),
22050
+ ui: {
22051
+ intent: "display",
22052
+ visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
22053
+ }
22054
+ },
22055
+ {
22056
+ id: "listColumns",
22057
+ type: "select",
22058
+ label: "Grid columns",
22059
+ description: "Number of columns in grid layout",
22060
+ required: false,
22061
+ multiple: false,
22062
+ defaultValue: "3",
22063
+ options: [
22064
+ { value: "2", label: "2 columns" },
22065
+ { value: "3", label: "3 columns" },
22066
+ { value: "4", label: "4 columns" }
22067
+ ],
22068
+ ui: {
22069
+ intent: "display",
22070
+ visibleWhen: { field: "listLayout", equals: "grid" }
22071
+ }
22072
+ },
22073
+ {
22074
+ id: "eventsPerPage",
22075
+ type: "select",
22076
+ label: "Events per page (cards)",
22077
+ description: "Number of events to load initially in card layouts",
22078
+ required: false,
22079
+ multiple: false,
22080
+ defaultValue: "12",
22081
+ options: [
22082
+ { value: "6", label: "6" },
22083
+ { value: "12", label: "12" },
22084
+ { value: "24", label: "24" }
22085
+ ],
22086
+ ui: {
22087
+ intent: "display",
22088
+ visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
22089
+ }
22090
+ },
22091
+ {
22092
+ id: "compactEventsPerPage",
22093
+ type: "select",
22094
+ label: "Events per page (compact)",
22095
+ description: "Number of events to show per page in compact layout",
22096
+ required: false,
22097
+ multiple: false,
22098
+ defaultValue: "10",
22099
+ options: [
22100
+ { value: "10", label: "10" },
22101
+ { value: "20", label: "20" },
22102
+ { value: "30", label: "30" }
22103
+ ],
22104
+ ui: {
22105
+ intent: "display",
22106
+ visibleWhen: { field: "listLayout", equals: "compact" }
22107
+ }
22108
+ },
22109
+ {
22110
+ id: "loadMoreText",
22111
+ type: "text",
22112
+ label: "Load more button text",
22113
+ description: "Text for the load more button",
22114
+ required: false,
22115
+ multiline: false,
22116
+ defaultValue: "Load more events",
22117
+ ui: {
22118
+ intent: "content",
22119
+ visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
22120
+ }
22121
+ },
22122
+ // Calendar options
22123
+ {
22124
+ id: "startOfWeek",
22125
+ type: "select",
22126
+ label: "Week starts on",
22127
+ description: "First day of the week",
22128
+ required: false,
22129
+ multiple: false,
22130
+ defaultValue: "monday",
22131
+ options: [
22132
+ { value: "sunday", label: "Sunday" },
22133
+ { value: "monday", label: "Monday" }
22134
+ ],
22135
+ ui: {
22136
+ intent: "display",
22137
+ visibleWhen: {
22138
+ field: "variant",
22139
+ oneOf: ["combined", "month", "week"]
21860
22140
  }
21861
- },
21862
- {
21863
- id: "scheduleScope",
21864
- type: "select",
21865
- label: "Schedule cadence",
21866
- description: "Restrict this block by recurrence",
21867
- required: false,
21868
- multiple: false,
21869
- defaultValue: "any",
21870
- options: [
21871
- { value: "any", label: "Any cadence" },
21872
- { value: "recurring", label: "Recurring only" },
21873
- { value: "oneOff", label: "One-off only" }
21874
- ],
21875
- ui: {
21876
- intent: "behavior",
21877
- visibleWhen: { field: "eventSurface", equals: "custom" }
22141
+ }
22142
+ },
22143
+ // Combined mode options
22144
+ {
22145
+ id: "calendarTabViews",
22146
+ type: "select",
22147
+ label: "Calendar tab views",
22148
+ description: "Which calendar views to show in the Calendar tab",
22149
+ required: false,
22150
+ multiple: false,
22151
+ defaultValue: "both",
22152
+ options: [
22153
+ { value: "both", label: "Month + Week toggle" },
22154
+ { value: "month", label: "Month only" },
22155
+ { value: "week", label: "Week only" }
22156
+ ],
22157
+ ui: {
22158
+ intent: "display",
22159
+ visibleWhen: { field: "variant", equals: "combined" }
22160
+ }
22161
+ },
22162
+ // Filtering options
22163
+ {
22164
+ id: "kind",
22165
+ type: "select",
22166
+ label: "Show",
22167
+ description: "Restrict this block to all offerings, courses, or events",
22168
+ required: false,
22169
+ multiple: false,
22170
+ defaultValue: "all",
22171
+ options: [
22172
+ { value: "all", label: "All offerings" },
22173
+ { value: "courses", label: "Courses only" },
22174
+ { value: "events", label: "Events only" }
22175
+ ],
22176
+ ui: { intent: "behavior" }
22177
+ },
22178
+ {
22179
+ id: "showFilters",
22180
+ type: "boolean",
22181
+ label: "Show filters",
22182
+ description: "Show category, staff, and venue filters",
22183
+ required: false,
22184
+ defaultValue: true,
22185
+ ui: {
22186
+ intent: "display",
22187
+ visibleWhen: {
22188
+ field: "variant",
22189
+ oneOf: ["combined", "list", "timetable"]
21878
22190
  }
21879
- },
21880
- createSiteOptionSelectField({
21881
- id: "filterCategoryIds",
21882
- label: "Pre-filter by categories",
21883
- description: "Restrict this block to specific event categories",
21884
- required: false,
21885
- multiple: true,
21886
- defaultValue: [],
21887
- optionSource: "eventCategories",
21888
- ui: {
21889
- intent: "behavior",
21890
- searchThreshold: 8,
21891
- visibleWhen: { field: "kind", notEquals: "courses" }
22191
+ }
22192
+ },
22193
+ {
22194
+ id: "showCategoryFilter",
22195
+ type: "select",
22196
+ label: "Show category filter",
22197
+ description: "When to show the category filter dropdown",
22198
+ required: false,
22199
+ multiple: false,
22200
+ defaultValue: "auto",
22201
+ options: [
22202
+ { value: "auto", label: "Auto (when >1 category has events)" },
22203
+ { value: "always", label: "Always" },
22204
+ { value: "never", label: "Never" }
22205
+ ],
22206
+ ui: {
22207
+ intent: "display",
22208
+ visibleWhen: {
22209
+ field: "variant",
22210
+ oneOf: ["combined", "list", "timetable"]
21892
22211
  }
21893
- }),
21894
- createSiteOptionSelectField({
21895
- id: "filterStaffMemberId",
21896
- label: "Pre-filter by staff member",
21897
- description: "Restrict this block to a single staff member",
21898
- required: false,
21899
- multiple: false,
21900
- optionSource: "staffMembers",
21901
- ui: {
21902
- intent: "behavior",
21903
- searchThreshold: 8
22212
+ }
22213
+ },
22214
+ {
22215
+ id: "showVenueFilter",
22216
+ type: "boolean",
22217
+ label: "Show venue filter",
22218
+ description: "Show venue filter dropdown",
22219
+ required: false,
22220
+ defaultValue: false,
22221
+ ui: {
22222
+ intent: "display",
22223
+ visibleWhen: {
22224
+ field: "variant",
22225
+ oneOf: ["combined", "list", "timetable"]
21904
22226
  }
21905
- }),
21906
- createSiteOptionSelectField({
21907
- id: "filterVenueId",
21908
- label: "Pre-filter by venue",
21909
- description: "Restrict this block to a single venue",
21910
- required: false,
21911
- multiple: false,
21912
- optionSource: "venues",
21913
- ui: {
21914
- intent: "behavior",
21915
- searchThreshold: 8
22227
+ }
22228
+ },
22229
+ {
22230
+ id: "showStaffFilter",
22231
+ type: "boolean",
22232
+ label: "Show staff filter",
22233
+ description: "Show staff filter dropdown",
22234
+ required: false,
22235
+ defaultValue: true,
22236
+ ui: {
22237
+ intent: "display",
22238
+ visibleWhen: {
22239
+ field: "variant",
22240
+ oneOf: ["combined", "list", "timetable"]
21916
22241
  }
21917
- }),
21918
- // Card styling
21919
- ...cardStylingFields.filter((f) => f.id === "buttonVariant" || f.id === "buttonText").map((field) => ({
21920
- ...field,
21921
- ui: {
21922
- ...field.ui ?? {},
21923
- intent: field.id === "buttonVariant" ? "style" : "content"
22242
+ }
22243
+ },
22244
+ {
22245
+ id: "showCapacity",
22246
+ type: "boolean",
22247
+ label: "Show available spots",
22248
+ description: "Display remaining capacity on event cards and timetable cells",
22249
+ required: false,
22250
+ defaultValue: true,
22251
+ ui: {
22252
+ intent: "display",
22253
+ visibleWhen: {
22254
+ field: "variant",
22255
+ oneOf: ["combined", "list", "week", "timetable"]
21924
22256
  }
21925
- })),
21926
- {
21927
- ...emptyStateField,
21928
- ui: { ...emptyStateField.ui ?? {}, intent: "display" }
21929
- },
21930
- sectionStylesField({
21931
- id: "_sectionStyles",
21932
- label: "Section styles",
21933
- renderInHeader: false
21934
- })
21935
- ],
22257
+ }
22258
+ },
22259
+ // Block-level pre-filtering
22260
+ {
22261
+ id: "eventSurface",
22262
+ type: "select",
22263
+ label: "Event surface",
22264
+ description: "Choose a semantic event scope",
22265
+ required: false,
22266
+ multiple: false,
22267
+ defaultValue: "all",
22268
+ options: [
22269
+ { value: "all", label: "All events" },
22270
+ { value: "regularClassSchedule", label: "Regular class schedule" },
22271
+ { value: "specialDatedEvents", label: "Workshops and special events" },
22272
+ { value: "custom", label: "Custom" }
22273
+ ],
22274
+ ui: { intent: "behavior" }
22275
+ },
22276
+ {
22277
+ id: "filterEventPresets",
22278
+ type: "select",
22279
+ label: "Pre-filter by event type",
22280
+ description: "Restrict this block to specific event types",
22281
+ required: false,
22282
+ multiple: true,
22283
+ defaultValue: [],
22284
+ options: [
22285
+ { value: "class", label: "Classes" },
22286
+ { value: "workshop", label: "Workshops" },
22287
+ { value: "retreat", label: "Retreats" },
22288
+ { value: "performance", label: "Performances" }
22289
+ ],
22290
+ ui: {
22291
+ intent: "behavior",
22292
+ visibleWhen: { field: "eventSurface", equals: "custom" }
22293
+ }
22294
+ },
22295
+ {
22296
+ id: "scheduleScope",
22297
+ type: "select",
22298
+ label: "Schedule cadence",
22299
+ description: "Restrict this block by recurrence",
22300
+ required: false,
22301
+ multiple: false,
22302
+ defaultValue: "any",
22303
+ options: [
22304
+ { value: "any", label: "Any cadence" },
22305
+ { value: "recurring", label: "Recurring only" },
22306
+ { value: "oneOff", label: "One-off only" }
22307
+ ],
22308
+ ui: {
22309
+ intent: "behavior",
22310
+ visibleWhen: { field: "eventSurface", equals: "custom" }
22311
+ }
22312
+ },
22313
+ createSiteOptionSelectField({
22314
+ id: "filterCategoryIds",
22315
+ label: "Pre-filter by categories",
22316
+ description: "Restrict this block to specific event categories",
22317
+ required: false,
22318
+ multiple: true,
22319
+ defaultValue: [],
22320
+ optionSource: "eventCategories",
22321
+ ui: {
22322
+ intent: "behavior",
22323
+ searchThreshold: 8,
22324
+ visibleWhen: { field: "kind", notEquals: "courses" }
22325
+ }
22326
+ }),
22327
+ createSiteOptionSelectField({
22328
+ id: "filterStaffMemberId",
22329
+ label: "Pre-filter by staff member",
22330
+ description: "Restrict this block to a single staff member",
22331
+ required: false,
22332
+ multiple: false,
22333
+ optionSource: "staffMembers",
22334
+ ui: {
22335
+ intent: "behavior",
22336
+ searchThreshold: 8
22337
+ }
22338
+ }),
22339
+ createSiteOptionSelectField({
22340
+ id: "filterVenueId",
22341
+ label: "Pre-filter by venue",
22342
+ description: "Restrict this block to a single venue",
22343
+ required: false,
22344
+ multiple: false,
22345
+ optionSource: "venues",
22346
+ ui: {
22347
+ intent: "behavior",
22348
+ searchThreshold: 8
22349
+ }
22350
+ }),
22351
+ // Card styling
22352
+ ...cardStylingFields.filter((f) => f.id === "buttonVariant" || f.id === "buttonText").map((field) => ({
22353
+ ...field,
22354
+ ui: {
22355
+ ...field.ui ?? {},
22356
+ intent: field.id === "buttonVariant" ? "style" : "content"
22357
+ }
22358
+ })),
22359
+ {
22360
+ ...emptyStateField,
22361
+ ui: { ...emptyStateField.ui ?? {}, intent: "display" }
22362
+ },
22363
+ sectionStylesField({
22364
+ id: "_sectionStyles",
22365
+ label: "Section styles",
22366
+ renderInHeader: false
22367
+ })
22368
+ ];
22369
+ var eventCalendarVariants = {
22370
+ combined: eventCalendarLayout[0],
22371
+ month: eventCalendarLayout[0],
22372
+ week: eventCalendarLayout[0],
22373
+ timetable: eventCalendarLayout[0],
22374
+ list: eventCalendarLayout[0]
22375
+ };
22376
+ var eventCalendarDerivedFields = [
22377
+ {
22378
+ id: "displayMode",
22379
+ type: "select",
22380
+ required: false,
22381
+ multiple: false,
22382
+ options: [
22383
+ { value: "combined" },
22384
+ { value: "month" },
22385
+ { value: "week" },
22386
+ { value: "timetable" },
22387
+ { value: "list" }
22388
+ ]
22389
+ },
22390
+ {
22391
+ id: "listLayout",
22392
+ type: "select",
22393
+ required: false,
22394
+ multiple: false,
22395
+ options: eventCalendarListLayoutOptions.map((option) => ({
22396
+ value: option.id
22397
+ }))
22398
+ }
22399
+ ];
22400
+ var eventCalendarContentShape = {
22401
+ additionalFields: eventCalendarDerivedFields,
22402
+ variants: eventCalendarVariants,
22403
+ skipSectionStyles: true
22404
+ };
22405
+ var eventCalendarConfig = {
22406
+ id: "block.event-calendar",
22407
+ version: "3.6.0",
22408
+ title: "Event Calendar",
22409
+ titleSource: "heading",
22410
+ description: "Display events with calendar, list, or combined views with filtering",
22411
+ // Preserve legacy section styles field configuration (renderInHeader: false).
22412
+ skipSectionStyles: true,
22413
+ additionalFields: eventCalendarAdditionalFields,
21936
22414
  styleTokens: { background: "surface", typography: "body", spacing: "md" },
21937
22415
  behaviours: {
21938
22416
  supportsThemeSwitching: true,
@@ -21952,109 +22430,21 @@ var eventCalendarManifest = createBlockManifest({
21952
22430
  "filter"
21953
22431
  ],
21954
22432
  icon: "CalendarDays",
21955
- layout: [
21956
- styledSection({
21957
- children: sectionContainer(
21958
- [
21959
- // Optional heading
21960
- text({ as: "h2" }, bind("content.heading"), when("content.heading")),
21961
- // Optional description
21962
- richText(
21963
- { className: "rb-prose rb-max-w-none" },
21964
- bind("content.description"),
21965
- when("content.description")
21966
- ),
21967
- // Event calendar component (handles all display modes)
21968
- el(
21969
- "event-calendar",
21970
- withApiBindings({
21971
- events: { $bind: { from: "data.events" } },
21972
- stage: {
21973
- $bind: { from: "$root.previewStage", fallback: "published" }
21974
- },
21975
- // Display mode
21976
- displayMode: {
21977
- $bind: { from: "content.displayMode", fallback: "combined" }
21978
- },
21979
- // List options
21980
- listLayout: { $bind: { from: "content.listLayout" } },
21981
- listColumns: { $bind: { from: "content.listColumns" } },
21982
- // Legacy compatibility: older event-calendar content used layout/columns
21983
- layout: { $bind: { from: "content.layout" } },
21984
- columns: { $bind: { from: "content.columns" } },
21985
- eventsPerPage: {
21986
- $bind: { from: "content.eventsPerPage", fallback: "12" }
21987
- },
21988
- compactEventsPerPage: {
21989
- $bind: { from: "content.compactEventsPerPage", fallback: "10" }
21990
- },
21991
- loadMoreText: {
21992
- $bind: {
21993
- from: "content.loadMoreText",
21994
- fallback: "Load more events"
21995
- }
21996
- },
21997
- // Calendar options
21998
- startOfWeek: {
21999
- $bind: { from: "content.startOfWeek", fallback: "monday" }
22000
- },
22001
- calendarTabViews: {
22002
- $bind: { from: "content.calendarTabViews", fallback: "both" }
22003
- },
22004
- // Filtering options
22005
- showFilters: {
22006
- $bind: { from: "content.showFilters", fallback: true }
22007
- },
22008
- showCategoryFilter: {
22009
- $bind: { from: "content.showCategoryFilter", fallback: "auto" }
22010
- },
22011
- showVenueFilter: {
22012
- $bind: { from: "content.showVenueFilter", fallback: false }
22013
- },
22014
- showStaffFilter: {
22015
- $bind: { from: "content.showStaffFilter", fallback: true }
22016
- },
22017
- showCapacity: {
22018
- $bind: { from: "content.showCapacity", fallback: true }
22019
- },
22020
- kind: { $bind: { from: "content.kind", fallback: "all" } },
22021
- eventSurface: {
22022
- $bind: { from: "content.eventSurface", fallback: "all" }
22023
- },
22024
- filterEventPresets: {
22025
- $bind: { from: "content.filterEventPresets" }
22026
- },
22027
- scheduleScope: {
22028
- $bind: { from: "content.scheduleScope", fallback: "any" }
22029
- },
22030
- filterCategoryIds: {
22031
- $bind: { from: "content.filterCategoryIds" }
22032
- },
22033
- filterStaffMemberId: {
22034
- $bind: { from: "content.filterStaffMemberId" }
22035
- },
22036
- filterVenueId: { $bind: { from: "content.filterVenueId" } },
22037
- // Styling
22038
- buttonVariant: {
22039
- $bind: { from: "content.buttonVariant", fallback: "primary" }
22040
- },
22041
- buttonText: {
22042
- $bind: { from: "content.buttonText", fallback: "View event" }
22043
- },
22044
- emptyMessage: { $bind: { from: "content.emptyMessage" } }
22045
- })
22046
- )
22047
- ],
22048
- {
22049
- gap: "lg"
22050
- }
22051
- ),
22052
- // sectionContainer (rb-container) already provides horizontal padding
22053
- baseClass: "",
22054
- spacing: "comfortable"
22055
- })
22056
- ]
22057
- });
22433
+ layout: eventCalendarLayout,
22434
+ variants: eventCalendarVariants,
22435
+ defaultVariant: "combined",
22436
+ variantOptions: {
22437
+ combined: { label: "Combined" },
22438
+ month: { label: "Month" },
22439
+ week: { label: "Week" },
22440
+ timetable: { label: "Timetable" },
22441
+ list: { label: "List" }
22442
+ }
22443
+ };
22444
+ var eventCalendarManifest = createBlockManifestWithContentShape(
22445
+ eventCalendarConfig,
22446
+ eventCalendarContentShape
22447
+ );
22058
22448
  var eventCalendarBlockDefinition = {
22059
22449
  manifest: eventCalendarManifest,
22060
22450
  normalizeContent: normalizeEventCalendarContent,
@@ -26226,14 +26616,29 @@ function mediaPanelCapable() {
26226
26616
  var allSectionSurfaces = [
26227
26617
  "base",
26228
26618
  "muted-band",
26229
- "accent-band"
26619
+ "accent-band",
26620
+ "brand-depth-band"
26230
26621
  ];
26231
26622
  var heroSectionSurfaces = [
26232
26623
  "base",
26233
26624
  "muted-band",
26234
26625
  "accent-band",
26626
+ "brand-depth-band",
26235
26627
  "hero-image"
26236
26628
  ];
26629
+ var scheduleTileTreatments = [
26630
+ "default",
26631
+ "quiet",
26632
+ "brand-depth"
26633
+ ];
26634
+ function scheduleDetailsCapable() {
26635
+ return declareBlockDesignCapability({
26636
+ sectionSurfaces: "supported",
26637
+ contentFrames: ["plain"],
26638
+ itemSurfaces: "unsupported",
26639
+ tileTreatments: scheduleTileTreatments
26640
+ });
26641
+ }
26237
26642
  function defaultBoundaryBias(visualWeight) {
26238
26643
  return visualWeight === "featured" || visualWeight === "immersive" ? "clear" : "soft";
26239
26644
  }
@@ -26471,7 +26876,7 @@ var systemBlockDefinitionsRaw = [
26471
26876
  flow: conversionFlow,
26472
26877
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "form", weight: "standard" })]
26473
26878
  })),
26474
- withDesignCapability("block.event-details", eventDetailsBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
26879
+ withDesignCapability("block.event-details", eventDetailsBlockDefinition, scheduleDetailsCapable(), defineBlockDesignMetadata({
26475
26880
  flow: offeringsFlow,
26476
26881
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
26477
26882
  })),
@@ -26479,7 +26884,7 @@ var systemBlockDefinitionsRaw = [
26479
26884
  flow: conversionFlow,
26480
26885
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "form", weight: "standard" })]
26481
26886
  })),
26482
- withDesignCapability("block.course-details", courseDetailsBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
26887
+ withDesignCapability("block.course-details", courseDetailsBlockDefinition, scheduleDetailsCapable(), defineBlockDesignMetadata({
26483
26888
  flow: offeringsFlow,
26484
26889
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
26485
26890
  })),
@@ -26494,7 +26899,13 @@ var systemBlockDefinitionsRaw = [
26494
26899
  })),
26495
26900
  withDesignCapability("block.event-calendar", eventCalendarBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
26496
26901
  flow: offeringsFlow,
26497
- layoutProfiles: [layoutProfile({ variantKey: "default", family: "grid", weight: "standard" })]
26902
+ layoutProfiles: [
26903
+ layoutProfile({ variantKey: "combined", family: "grid", weight: "standard" }),
26904
+ layoutProfile({ variantKey: "list", family: "stack", weight: "standard" }),
26905
+ layoutProfile({ variantKey: "month", family: "grid", weight: "standard" }),
26906
+ layoutProfile({ variantKey: "week", family: "stack", weight: "standard" }),
26907
+ layoutProfile({ variantKey: "timetable", family: "stack", weight: "standard" })
26908
+ ]
26498
26909
  })),
26499
26910
  // Friendly wrapper blocks
26500
26911
  withDesignCapability("block.team-members", teamMembersBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
@@ -29299,7 +29710,7 @@ function CoursePricingDisplay({
29299
29710
  ] }),
29300
29711
  option.description ? /* @__PURE__ */ jsx25("p", { className: "rb-caption status-muted", children: option.description }) : null
29301
29712
  ] }, option.id)) }) : /* @__PURE__ */ jsx25("p", { children: /* @__PURE__ */ jsx25("strong", { children: formatCoursePriceDisplay(pricing.display) }) }),
29302
- acceptedItems.length > 0 ? /* @__PURE__ */ jsxs12("p", { className: "rb-caption status-muted rb-mt-1", children: [
29713
+ acceptedItems.length > 0 ? /* @__PURE__ */ jsxs12("p", { className: "rb-caption rb-mt-1", children: [
29303
29714
  "You can also attend with: ",
29304
29715
  acceptedItems.join(", ")
29305
29716
  ] }) : null
@@ -29399,11 +29810,11 @@ function EventDetailsView({
29399
29810
  ) : shouldShowEventCost ? /* @__PURE__ */ jsxs13("div", { className: "rb-mt-6", children: [
29400
29811
  /* @__PURE__ */ jsx26("div", { className: "rb-label rb-mb-2", children: "Cost" }),
29401
29812
  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" }),
29402
- hasAcceptedItems ? /* @__PURE__ */ jsxs13("p", { className: "rb-caption status-muted rb-mt-1", children: [
29813
+ hasAcceptedItems ? /* @__PURE__ */ jsxs13("p", { className: "rb-caption rb-mt-1", children: [
29403
29814
  "You can also attend with: ",
29404
29815
  acceptedItems.join(", ")
29405
29816
  ] }) : null
29406
- ] }) : hasAcceptedItems ? /* @__PURE__ */ jsx26("div", { className: "rb-mt-6", children: /* @__PURE__ */ jsxs13("p", { className: "rb-caption status-muted", children: [
29817
+ ] }) : hasAcceptedItems ? /* @__PURE__ */ jsx26("div", { className: "rb-mt-6", children: /* @__PURE__ */ jsxs13("p", { className: "rb-caption", children: [
29407
29818
  "You can also attend with: ",
29408
29819
  acceptedItems.join(", ")
29409
29820
  ] }) }) : null
@@ -34257,16 +34668,16 @@ function generateSiteStyleTransitionCss(themeId) {
34257
34668
  --site-style-transition-to: rgb(var(--tb-background));
34258
34669
  }
34259
34670
 
34260
- ${selector} [data-style-group^='site-style-transition-wave-edge-'] > [data-slot='section']::after,
34261
- ${selector} [data-style-group^='site-style-transition-angle-edge-'] > [data-slot='section']::after,
34262
- ${selector} [data-style-group^='site-style-transition-soft-fade'] > [data-slot='section']::after {
34671
+ ${selector} [data-style-group^='site-style-transition-wave-edge-']::after,
34672
+ ${selector} [data-style-group^='site-style-transition-angle-edge-']::after,
34673
+ ${selector} [data-style-group^='site-style-transition-soft-fade']::after {
34263
34674
  content: '';
34264
34675
  position: absolute;
34265
34676
  left: 0;
34266
34677
  right: 0;
34267
- bottom: 0;
34268
- z-index: -5;
34269
- height: 4rem;
34678
+ bottom: -2px;
34679
+ z-index: 1;
34680
+ height: calc(4rem + 2px);
34270
34681
  pointer-events: none;
34271
34682
  }
34272
34683
 
@@ -34283,6 +34694,10 @@ ${selector} [data-style-group*='-from-accent-band-'] {
34283
34694
  --site-style-transition-from: rgb(var(--tb-primary));
34284
34695
  }
34285
34696
 
34697
+ ${selector} [data-style-group*='-from-brand-depth-band-'] {
34698
+ --site-style-transition-from: rgb(var(--tb-primary-800));
34699
+ }
34700
+
34286
34701
  ${selector} [data-style-group$='-to-base'],
34287
34702
  ${selector} [data-style-group$='-to-hero-image'] {
34288
34703
  --site-style-transition-to: rgb(var(--tb-background));
@@ -34296,7 +34711,11 @@ ${selector} [data-style-group$='-to-accent-band'] {
34296
34711
  --site-style-transition-to: rgb(var(--tb-primary));
34297
34712
  }
34298
34713
 
34299
- ${selector} [data-style-group^='site-style-transition-soft-fade'] > [data-slot='section']::after {
34714
+ ${selector} [data-style-group$='-to-brand-depth-band'] {
34715
+ --site-style-transition-to: rgb(var(--tb-primary-800));
34716
+ }
34717
+
34718
+ ${selector} [data-style-group^='site-style-transition-soft-fade']::after {
34300
34719
  background: linear-gradient(
34301
34720
  to bottom,
34302
34721
  transparent 0%,
@@ -34304,16 +34723,16 @@ ${selector} [data-style-group^='site-style-transition-soft-fade'] > [data-slot='
34304
34723
  );
34305
34724
  }
34306
34725
 
34307
- ${selector} [data-style-group^='site-style-transition-soft-fade-long-'] > [data-slot='section']::after {
34726
+ ${selector} [data-style-group^='site-style-transition-soft-fade-long-']::after {
34308
34727
  height: 6rem;
34309
34728
  }
34310
34729
 
34311
- ${selector} [data-style-group^='site-style-transition-angle-edge-'] > [data-slot='section']::after {
34730
+ ${selector} [data-style-group^='site-style-transition-angle-edge-']::after {
34312
34731
  background: var(--site-style-transition-to);
34313
34732
  clip-path: polygon(0 42%, 100% 8%, 100% 100%, 0 100%);
34314
34733
  }
34315
34734
 
34316
- ${selector} [data-style-group^='site-style-transition-wave-edge-'] > [data-slot='section']::after {
34735
+ ${selector} [data-style-group^='site-style-transition-wave-edge-']::after {
34317
34736
  background: var(--site-style-transition-to);
34318
34737
  mask-image: url("${waveTransitionMask}");
34319
34738
  mask-repeat: no-repeat;
@@ -35496,7 +35915,7 @@ function buildThemeRuntime(theme, options) {
35496
35915
  theme,
35497
35916
  accordionSystem
35498
35917
  });
35499
- const inputSystem = theme.inputs ?? generateDefaultInputSystem(theme);
35918
+ const inputSystem = resolveThemeInputSystem(theme);
35500
35919
  const inputCss = generateInputCss({
35501
35920
  themeId,
35502
35921
  theme,
@@ -35561,6 +35980,9 @@ function hydrateTheme(theme) {
35561
35980
  palette: expandPalette(theme.palette)
35562
35981
  };
35563
35982
  }
35983
+ function resolveThemeInputSystem(theme) {
35984
+ return theme.inputs ?? generateDefaultInputSystem(theme);
35985
+ }
35564
35986
  function buildThemeCssVars(theme) {
35565
35987
  const { typography, space, shadow: shadow2, motion: motion2, border: border2 } = theme;
35566
35988
  const baseSizes = computeTypeScale(typography.scale, typography.body.size);
@@ -35645,7 +36067,7 @@ function buildThemeCssVars(theme) {
35645
36067
  // Tier 2: Input styling primitives
35646
36068
  // These expose inputStyle/InputSystem values for blocks that can't use .form-* classes
35647
36069
  ...(() => {
35648
- const inputSystem = generateDefaultInputSystem(theme);
36070
+ const inputSystem = resolveThemeInputSystem(theme);
35649
36071
  return {
35650
36072
  ["--rb-input-radius"]: mapInputRadius(inputSystem.base.corners, theme.corners),
35651
36073
  ["--rb-input-focus-width"]: `${inputSystem.focus.ringWidth}px`,
@@ -44002,15 +44424,15 @@ var containerResponsiveThemeCss = `/*
44002
44424
  text-align: left;
44003
44425
  padding: 1rem;
44004
44426
  border-radius: var(--rb-event-tile-radius, calc(var(--rb-block-radius) * 0.75));
44005
- border-style: var(--rb-event-tile-border-style, var(--rb-border-style, solid));
44006
- border-width: var(--rb-event-tile-border-width, var(--rb-border-width, 1px));
44007
- border-color: var(--rb-event-tile-border, rgb(var(--tb-border)));
44008
- background: var(--rb-event-tile-bg, transparent);
44427
+ border-style: var(--rb-tile-border-style, var(--rb-event-tile-border-style, var(--rb-border-style, solid)));
44428
+ border-width: var(--rb-tile-border-width, var(--rb-event-tile-border-width, var(--rb-border-width, 1px)));
44429
+ border-color: var(--rb-tile-border, var(--rb-event-tile-border, rgb(var(--tb-border))));
44430
+ background: var(--rb-tile-bg, var(--rb-event-tile-bg, transparent));
44009
44431
  transition: border-color var(--rb-block-transition) ease,
44010
44432
  background-color var(--rb-block-transition) ease,
44011
44433
  opacity var(--rb-block-transition) ease;
44012
44434
  display: block;
44013
- opacity: var(--rb-event-tile-opacity, 1);
44435
+ opacity: var(--rb-tile-opacity, var(--rb-event-tile-opacity, 1));
44014
44436
  color: inherit;
44015
44437
  text-decoration: none;
44016
44438
  }
@@ -44021,6 +44443,25 @@ var containerResponsiveThemeCss = `/*
44021
44443
  gap: var(--rb-event-tiles-grid-gap, 0.5rem);
44022
44444
  }
44023
44445
 
44446
+ :where(.theme-scope) .rb-tile-treatment-quiet {
44447
+ --rb-tile-bg: color-mix(in oklab, rgb(var(--tb-surface)), rgb(var(--tb-muted)) 48%);
44448
+ --rb-tile-border: color-mix(in oklab, rgb(var(--tb-border)), transparent 35%);
44449
+ --rb-tile-border-hover: color-mix(in oklab, rgb(var(--tb-primary)), transparent 40%);
44450
+ }
44451
+
44452
+ :where(.theme-scope) .rb-tile-treatment-brand-depth {
44453
+ --rb-brand-depth-surface: rgb(var(--tb-primary-800));
44454
+ --rb-brand-depth-tile-surface: rgb(var(--tb-primary-900));
44455
+ --rb-brand-depth-tile-surface-selected: rgb(var(--tb-primary-950));
44456
+ --rb-tile-bg: var(--rb-brand-depth-tile-surface);
44457
+ --rb-tile-bg-selected: var(--rb-brand-depth-tile-surface-selected);
44458
+ --rb-tile-border: transparent;
44459
+ --rb-tile-border-hover: transparent;
44460
+ --rb-tile-border-selected: transparent;
44461
+ --rb-tile-border-width: 0;
44462
+ --rb-event-tile-radius: var(--rb-block-radius);
44463
+ }
44464
+
44024
44465
  @container rb-site (min-width: 768px) {
44025
44466
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
44026
44467
  :where(.theme-scope) .rb-tiles-grid {
@@ -44039,13 +44480,13 @@ var containerResponsiveThemeCss = `/*
44039
44480
  }
44040
44481
 
44041
44482
  :where(.theme-scope) :where(.rb-tile--interactive, .er-event-card):hover:not(:disabled) {
44042
- border-color: var(--rb-event-tile-border-hover, rgba(var(--tb-primary), 0.5));
44043
- opacity: var(--rb-event-tile-hover-opacity, var(--rb-event-tile-opacity, 1));
44483
+ border-color: var(--rb-tile-border-hover, var(--rb-event-tile-border-hover, rgba(var(--tb-primary), 0.5)));
44484
+ opacity: var(--rb-tile-hover-opacity, var(--rb-event-tile-hover-opacity, var(--rb-tile-opacity, var(--rb-event-tile-opacity, 1))));
44044
44485
  }
44045
44486
 
44046
44487
  :where(.theme-scope) :where(.rb-tile--selected, .er-event-card--selected) {
44047
- border-color: var(--rb-event-tile-border-selected, rgb(var(--tb-primary)));
44048
- background: var(--rb-event-tile-bg-selected, rgba(var(--tb-primary), 0.1));
44488
+ border-color: var(--rb-tile-border-selected, var(--rb-event-tile-border-selected, rgb(var(--tb-primary))));
44489
+ background: var(--rb-tile-bg-selected, var(--rb-event-tile-bg-selected, rgba(var(--tb-primary), 0.1)));
44049
44490
  }
44050
44491
 
44051
44492
  :where(.theme-scope) :where(.rb-tile--disabled, .er-event-card--disabled) {
@@ -45676,11 +46117,14 @@ function resolveFooterRenderPlan(params) {
45676
46117
  import * as React7 from "react";
45677
46118
  import { Fragment as Fragment7, jsx as jsx53, jsxs as jsxs37 } from "react/jsx-runtime";
45678
46119
 
46120
+ // ../theme-core/src/siteChrome.tsx
46121
+ import { Fragment as Fragment8, jsxs as jsxs38 } from "react/jsx-runtime";
46122
+
45679
46123
  // ../theme-core/src/mock-themes/components/swatch.tsx
45680
- import { jsx as jsx54, jsxs as jsxs38 } from "react/jsx-runtime";
46124
+ import { jsx as jsx54, jsxs as jsxs39 } from "react/jsx-runtime";
45681
46125
 
45682
46126
  // ../theme-core/src/mock-themes/components/PaletteCard.tsx
45683
- import { jsx as jsx55, jsxs as jsxs39 } from "react/jsx-runtime";
46127
+ import { jsx as jsx55, jsxs as jsxs40 } from "react/jsx-runtime";
45684
46128
 
45685
46129
  // src/rendering/blocks-theme-runtime.ts
45686
46130
  var AXES_TONE_OPTIONS = ["minimal", "classic", "bold"];
@@ -45852,10 +46296,11 @@ function PageContent({
45852
46296
  }
45853
46297
 
45854
46298
  // src/rendering/components/Page.tsx
45855
- import { Fragment as Fragment8, jsx as jsx57, jsxs as jsxs40 } from "react/jsx-runtime";
46299
+ import { Fragment as Fragment9, jsx as jsx57, jsxs as jsxs41 } from "react/jsx-runtime";
46300
+ var HydratorWithContextProps = BlocksIslandsHydrator;
45856
46301
  function Page(props2) {
45857
- return /* @__PURE__ */ jsxs40(Fragment8, { children: [
45858
- /* @__PURE__ */ jsx57(BlocksIslandsHydrator, { ...toPageHydrationBootstrapConfig(props2) }),
46302
+ return /* @__PURE__ */ jsxs41(Fragment9, { children: [
46303
+ /* @__PURE__ */ jsx57(HydratorWithContextProps, { ...toPageHydrationBootstrapConfig(props2) }),
45859
46304
  /* @__PURE__ */ jsx57(PageContent, { ...props2 })
45860
46305
  ] });
45861
46306
  }
@@ -46294,7 +46739,7 @@ function buildLogo(logo, fallbackAlt) {
46294
46739
  }
46295
46740
 
46296
46741
  // src/rendering/components/Layout.tsx
46297
- import { Fragment as Fragment9, jsx as jsx58, jsxs as jsxs41 } from "react/jsx-runtime";
46742
+ import { Fragment as Fragment10, jsx as jsx58, jsxs as jsxs42 } from "react/jsx-runtime";
46298
46743
  async function Layout({
46299
46744
  siteData: providedSiteData,
46300
46745
  client,
@@ -46429,14 +46874,14 @@ async function Layout({
46429
46874
  themeConfig: blocksTheme,
46430
46875
  viewModelOverrides
46431
46876
  }) : null;
46432
- footerElement = footerPlan.mode === "default+blocks" ? /* @__PURE__ */ jsxs41(Fragment9, { children: [
46877
+ footerElement = footerPlan.mode === "default+blocks" ? /* @__PURE__ */ jsxs42(Fragment10, { children: [
46433
46878
  footerBlocksElement,
46434
46879
  defaultFooterElement
46435
46880
  ] }) : footerPlan.mode === "blocks" ? footerBlocksElement : footerPlan.mode === "none" ? null : defaultFooterElement;
46436
46881
  } else if (typeof footer === "function") {
46437
46882
  footerElement = footer(footerData);
46438
46883
  }
46439
- const content = /* @__PURE__ */ jsxs41(Fragment9, { children: [
46884
+ const content = /* @__PURE__ */ jsxs42(Fragment10, { children: [
46440
46885
  headerElement,
46441
46886
  children,
46442
46887
  footerElement
@@ -48997,6 +49442,14 @@ var ENDPOINT_DEFINITIONS = {
48997
49442
  auth: "user",
48998
49443
  responseKind: "json"
48999
49444
  },
49445
+ exportAppointmentServicesCsv: {
49446
+ path: "/sites/{siteId}/bookings/services/export.csv",
49447
+ method: "GET",
49448
+ tags: ["site-{siteId}", "bookings", "appointment-services-{siteId}"],
49449
+ errors: [],
49450
+ auth: "user",
49451
+ responseKind: "blob"
49452
+ },
49000
49453
  createAppointmentService: {
49001
49454
  path: "/sites/{siteId}/bookings/services",
49002
49455
  method: "POST",
@@ -49265,6 +49718,14 @@ var ENDPOINT_DEFINITIONS = {
49265
49718
  auth: "user",
49266
49719
  responseKind: "json"
49267
49720
  },
49721
+ exportCoursesCsv: {
49722
+ path: "/sites/{siteId}/bookings/courses/export.csv",
49723
+ method: "GET",
49724
+ tags: ["site-{siteId}", "bookings", "courses-{siteId}"],
49725
+ errors: [],
49726
+ auth: "user",
49727
+ responseKind: "blob"
49728
+ },
49268
49729
  createCourse: {
49269
49730
  path: "/sites/{siteId}/bookings/courses",
49270
49731
  method: "POST",
@@ -49364,6 +49825,14 @@ var ENDPOINT_DEFINITIONS = {
49364
49825
  responseKind: "json",
49365
49826
  errors: []
49366
49827
  },
49828
+ exportCourseWaitlistCsv: {
49829
+ path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist/export.csv",
49830
+ method: "GET",
49831
+ tags: ["site-{siteId}", "bookings", "courses-{courseId}"],
49832
+ auth: "user",
49833
+ responseKind: "blob",
49834
+ errors: []
49835
+ },
49367
49836
  updateCourseEnrollment: {
49368
49837
  path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}",
49369
49838
  method: "PATCH",
@@ -51959,6 +52428,14 @@ var ENDPOINT_DEFINITIONS = {
51959
52428
  auth: "user",
51960
52429
  responseKind: "json"
51961
52430
  },
52431
+ exportEventSeriesCsv: {
52432
+ path: "/sites/{siteId}/bookings/event-series/export.csv",
52433
+ method: "GET",
52434
+ tags: ["site-{siteId}", "bookings", "event-series-{siteId}"],
52435
+ errors: [],
52436
+ auth: "user",
52437
+ responseKind: "blob"
52438
+ },
51962
52439
  createEventSeries: {
51963
52440
  path: "/sites/{siteId}/bookings/event-series",
51964
52441
  method: "POST",
@@ -52027,6 +52504,60 @@ var ENDPOINT_DEFINITIONS = {
52027
52504
  errors: [],
52028
52505
  responseKind: "blob"
52029
52506
  },
52507
+ getParticipantMessageRecipients: {
52508
+ path: "/sites/{siteId}/bookings/participant-messaging/recipients",
52509
+ method: "POST",
52510
+ tags: ["site-{siteId}"],
52511
+ auth: "user",
52512
+ errors: [
52513
+ "validation:invalid_input",
52514
+ "auth:forbidden",
52515
+ "resource:not_found",
52516
+ "server:internal_error"
52517
+ ],
52518
+ responseKind: "json"
52519
+ },
52520
+ sendParticipantMessage: {
52521
+ path: "/sites/{siteId}/bookings/participant-messaging/send",
52522
+ method: "POST",
52523
+ tags: ["site-{siteId}"],
52524
+ auth: "user",
52525
+ errors: [
52526
+ "validation:invalid_input",
52527
+ "auth:forbidden",
52528
+ "resource:not_found",
52529
+ "resource:conflict",
52530
+ "server:internal_error"
52531
+ ],
52532
+ responseKind: "json"
52533
+ },
52534
+ testParticipantMessage: {
52535
+ path: "/sites/{siteId}/bookings/participant-messaging/test",
52536
+ method: "POST",
52537
+ tags: ["site-{siteId}"],
52538
+ auth: "user",
52539
+ errors: [
52540
+ "validation:invalid_input",
52541
+ "auth:forbidden",
52542
+ "resource:not_found",
52543
+ "resource:conflict",
52544
+ "server:internal_error"
52545
+ ],
52546
+ responseKind: "json"
52547
+ },
52548
+ listParticipantMessageHistory: {
52549
+ path: "/sites/{siteId}/bookings/participant-messaging/history",
52550
+ method: "POST",
52551
+ tags: ["site-{siteId}"],
52552
+ auth: "user",
52553
+ errors: [
52554
+ "validation:invalid_input",
52555
+ "auth:forbidden",
52556
+ "resource:not_found",
52557
+ "server:internal_error"
52558
+ ],
52559
+ responseKind: "json"
52560
+ },
52030
52561
  listEventSeriesWaitlist: {
52031
52562
  path: "/sites/{siteId}/bookings/event-series/{seriesId}/waitlist",
52032
52563
  method: "GET",
@@ -52035,6 +52566,14 @@ var ENDPOINT_DEFINITIONS = {
52035
52566
  responseKind: "json",
52036
52567
  errors: []
52037
52568
  },
52569
+ exportEventSeriesWaitlistCsv: {
52570
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/waitlist/export.csv",
52571
+ method: "GET",
52572
+ tags: ["site-{siteId}", "bookings", "event-series-{seriesId}"],
52573
+ auth: "user",
52574
+ responseKind: "blob",
52575
+ errors: []
52576
+ },
52038
52577
  addEventOccurrenceAttendee: {
52039
52578
  path: "/sites/{siteId}/bookings/event-series/{seriesId}/occurrences/{occurrenceId}/attendees",
52040
52579
  method: "POST",
@@ -52751,6 +53290,14 @@ var ENDPOINT_DEFINITIONS = {
52751
53290
  auth: "user",
52752
53291
  responseKind: "json"
52753
53292
  },
53293
+ exportSiteCustomerPassesCsv: {
53294
+ path: "/sites/{siteId}/bookings/customer-passes/export.csv",
53295
+ method: "GET",
53296
+ tags: ["site-{siteId}", "bookings", "customer-passes-{siteId}"],
53297
+ auth: "user",
53298
+ responseKind: "blob",
53299
+ errors: []
53300
+ },
52754
53301
  listSiteCustomerMemberships: {
52755
53302
  path: "/sites/{siteId}/bookings/customer-memberships",
52756
53303
  method: "GET",
@@ -52814,6 +53361,22 @@ var ENDPOINT_DEFINITIONS = {
52814
53361
  auth: "user",
52815
53362
  responseKind: "blob"
52816
53363
  },
53364
+ exportBookingLedgerCsv: {
53365
+ path: "/sites/{siteId}/bookings/ledger/export.csv",
53366
+ method: "GET",
53367
+ tags: ["site-{siteId}", "bookings", "booking-ledger-{siteId}"],
53368
+ errors: [],
53369
+ auth: "user",
53370
+ responseKind: "blob"
53371
+ },
53372
+ exportBookingQuestionAnswersCsv: {
53373
+ path: "/sites/{siteId}/bookings/intake-answers/export.csv",
53374
+ method: "GET",
53375
+ tags: ["site-{siteId}", "bookings", "intake-answers-{siteId}"],
53376
+ errors: [],
53377
+ auth: "user",
53378
+ responseKind: "blob"
53379
+ },
52817
53380
  // Site logs
52818
53381
  listSiteActivityLogs: {
52819
53382
  path: "/sites/{siteId}/logs/activity",
@@ -54484,6 +55047,20 @@ var applyAppointmentSetupRequestSchema = z65.object({
54484
55047
  bookingNotice: appointmentSetupBookingNoticeSchema
54485
55048
  });
54486
55049
 
55050
+ // ../api/src/bookingRecords.ts
55051
+ var BOOKING_QUESTION_ANSWER_EXPORT_SCOPES = {
55052
+ site: "site",
55053
+ appointments: "appointments",
55054
+ eventSeries: "event_series",
55055
+ course: "course"
55056
+ };
55057
+ var BOOKING_QUESTION_ANSWER_EXPORT_SCOPE_VALUES = [
55058
+ BOOKING_QUESTION_ANSWER_EXPORT_SCOPES.site,
55059
+ BOOKING_QUESTION_ANSWER_EXPORT_SCOPES.appointments,
55060
+ BOOKING_QUESTION_ANSWER_EXPORT_SCOPES.eventSeries,
55061
+ BOOKING_QUESTION_ANSWER_EXPORT_SCOPES.course
55062
+ ];
55063
+
54487
55064
  // ../api/src/common/cancellation.ts
54488
55065
  var STAFF_CANCELLATION_CONTEXT_UI_CATEGORIES = [
54489
55066
  "customer_requested",
@@ -55077,7 +55654,7 @@ async function prefetchBlockData2(page, context, client, options) {
55077
55654
  }
55078
55655
 
55079
55656
  // src/rendering/components/Block.shared.tsx
55080
- import { jsx as jsx59, jsxs as jsxs42 } from "react/jsx-runtime";
55657
+ import { jsx as jsx59, jsxs as jsxs43 } from "react/jsx-runtime";
55081
55658
  function toBlockHydrationBootstrapConfig(props2) {
55082
55659
  return {
55083
55660
  siteId: props2.siteId,
@@ -55086,7 +55663,7 @@ function toBlockHydrationBootstrapConfig(props2) {
55086
55663
  };
55087
55664
  }
55088
55665
  function renderUnknownBlock(blockKind) {
55089
- return /* @__PURE__ */ jsx59("div", { className: "p-4 border border-red-300 bg-red-50 rounded", children: /* @__PURE__ */ jsxs42("p", { className: "text-red-800 font-semibold", children: [
55666
+ return /* @__PURE__ */ jsx59("div", { className: "p-4 border border-red-300 bg-red-50 rounded", children: /* @__PURE__ */ jsxs43("p", { className: "text-red-800 font-semibold", children: [
55090
55667
  "Unknown block type: ",
55091
55668
  blockKind
55092
55669
  ] }) });
@@ -55227,10 +55804,11 @@ async function BlockContent(props2) {
55227
55804
  }
55228
55805
 
55229
55806
  // src/rendering/components/Block.tsx
55230
- import { Fragment as Fragment10, jsx as jsx60, jsxs as jsxs43 } from "react/jsx-runtime";
55807
+ import { Fragment as Fragment11, jsx as jsx60, jsxs as jsxs44 } from "react/jsx-runtime";
55808
+ var HydratorWithContextProps2 = BlocksIslandsHydrator2;
55231
55809
  function Block(props2) {
55232
- return /* @__PURE__ */ jsxs43(Fragment10, { children: [
55233
- /* @__PURE__ */ jsx60(BlocksIslandsHydrator2, { ...toBlockHydrationBootstrapConfig(props2) }),
55810
+ return /* @__PURE__ */ jsxs44(Fragment11, { children: [
55811
+ /* @__PURE__ */ jsx60(HydratorWithContextProps2, { ...toBlockHydrationBootstrapConfig(props2) }),
55234
55812
  /* @__PURE__ */ jsx60(BlockContent, { ...props2 })
55235
55813
  ] });
55236
55814
  }
@@ -55415,6 +55993,9 @@ function applyBindings(bindings, context) {
55415
55993
  }
55416
55994
  return result;
55417
55995
  }
55996
+ function applyBindingsToContent(baseContent, bindings, context) {
55997
+ return { ...baseContent, ...applyBindings(bindings, context) };
55998
+ }
55418
55999
  function setBindingValue(target, path, value) {
55419
56000
  const segments = path.split(".").map((segment) => segment.trim()).filter(Boolean);
55420
56001
  if (segments.length === 0) return;
@@ -55594,7 +56175,7 @@ function isDocWrapper(value) {
55594
56175
 
55595
56176
  // src/rendering/helpers/bindings.ts
55596
56177
  var normalizeBindingOutput2 = normalizeBindingOutput;
55597
- var applyBindings2 = applyBindings;
56178
+ var applyBindingsToContent2 = applyBindingsToContent;
55598
56179
 
55599
56180
  // src/rendering/helpers/loadContent.ts
55600
56181
  function isPageContent(result) {
@@ -55805,7 +56386,7 @@ function resolveTemplateBlock(block, bindingContext) {
55805
56386
  }
55806
56387
  const bindings = block.bindings ?? {};
55807
56388
  const hasBindings = typeof bindings === "object" && Object.keys(bindings).length > 0;
55808
- const resolvedContent = hasBindings ? normalizeBindingOutput2(applyBindings2(bindings, bindingContext)) : baseContent;
56389
+ const resolvedContent = hasBindings ? normalizeBindingOutput2(applyBindingsToContent2(baseContent, bindings, bindingContext)) : baseContent;
55809
56390
  return {
55810
56391
  id: block.id,
55811
56392
  kind: block.blockKind,