@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
@@ -725,7 +725,11 @@ function resolveRepeaterGridColumnFieldId(options) {
725
725
 
726
726
  // ../blocks/src/system/manifest/schema.ts
727
727
  var visibilityLevels = ["admin", "designer", "author"];
728
- var siteOptionSources = ["eventCategories", "venues", "staffMembers"];
728
+ var siteOptionSources = [
729
+ "eventCategories",
730
+ "venues",
731
+ "staffMembers"
732
+ ];
729
733
  var mediaDeliverySchema = z3.object({
730
734
  sizes: z3.string().optional(),
731
735
  widthCandidates: z3.array(z3.number().int().positive()).optional(),
@@ -763,7 +767,10 @@ var uiSchema = z3.object({
763
767
  hidden: z3.boolean().optional(),
764
768
  hideLabel: z3.boolean().optional(),
765
769
  hideDescription: z3.boolean().optional(),
766
- showCharCount: z3.union([z3.number().int().positive(), z3.object({ max: z3.number().int().positive() })]).optional(),
770
+ showCharCount: z3.union([
771
+ z3.number().int().positive(),
772
+ z3.object({ max: z3.number().int().positive() })
773
+ ]).optional(),
767
774
  showSlugPreview: z3.boolean().optional(),
768
775
  variant: z3.enum(["full", "inline", "limited", "media", "notes"]).optional(),
769
776
  richTextVariant: z3.enum(["full", "inline", "limited", "media", "notes"]).optional(),
@@ -773,10 +780,7 @@ var uiSchema = z3.object({
773
780
  showMediaPreview: z3.boolean().optional(),
774
781
  showMediaOverlayActions: z3.boolean().optional(),
775
782
  mediaDelivery: mediaDeliverySchema.optional(),
776
- mediaDeliveryByVariant: z3.record(
777
- z3.string(),
778
- mediaDeliverySchema
779
- ).optional(),
783
+ mediaDeliveryByVariant: z3.record(z3.string(), mediaDeliverySchema).optional(),
780
784
  // Optional input hints for validators/widgets
781
785
  inputType: z3.enum(["text", "email", "tel", "number"]).optional(),
782
786
  min: z3.number().optional(),
@@ -884,7 +888,9 @@ var richTextFieldSchema = baseFieldSchema.extend({
884
888
  });
885
889
  var mediaFieldSchema = baseFieldSchema.extend({
886
890
  type: z3.literal("media"),
887
- mediaKinds: z3.array(z3.enum(["image", "video", "audio", "document", "spreadsheet", "archive"])).default(["image"]),
891
+ mediaKinds: z3.array(
892
+ z3.enum(["image", "video", "audio", "document", "spreadsheet", "archive"])
893
+ ).default(["image"]),
888
894
  aspectRatio: z3.string().optional()
889
895
  });
890
896
  var booleanFieldSchema = baseFieldSchema.extend({
@@ -1006,7 +1012,9 @@ var referenceFieldSchema = baseFieldSchema.extend({
1006
1012
  var itemTypeSchema = z3.object({
1007
1013
  label: z3.string().min(1),
1008
1014
  icon: z3.string().optional(),
1009
- fields: z3.lazy(() => getFieldSchemaInternal().array().min(1, "Item type requires at least one field"))
1015
+ fields: z3.lazy(
1016
+ () => getFieldSchemaInternal().array().min(1, "Item type requires at least one field")
1017
+ )
1010
1018
  });
1011
1019
  var repeaterFieldSchema = baseFieldSchema.extend({
1012
1020
  type: z3.literal("repeater"),
@@ -1016,7 +1024,9 @@ var repeaterFieldSchema = baseFieldSchema.extend({
1016
1024
  maxItems: z3.number().int().positive().optional(),
1017
1025
  // Monomorphic mode
1018
1026
  schema: z3.object({
1019
- fields: z3.lazy(() => getFieldSchemaInternal().array().min(1, "Repeater requires at least one field"))
1027
+ fields: z3.lazy(
1028
+ () => getFieldSchemaInternal().array().min(1, "Repeater requires at least one field")
1029
+ )
1020
1030
  }).optional(),
1021
1031
  // Polymorphic mode
1022
1032
  polymorphic: z3.boolean().optional(),
@@ -1062,13 +1072,19 @@ var repeaterFieldSchema = baseFieldSchema.extend({
1062
1072
  const itemTypes = Object.values(
1063
1073
  data.itemTypes
1064
1074
  );
1065
- return itemTypes.every((itemType) => Array.isArray(itemType.fields) && requiredFieldIds.every((requiredId) => itemType.fields?.some((field) => field.id === requiredId)));
1075
+ return itemTypes.every(
1076
+ (itemType) => Array.isArray(itemType.fields) && requiredFieldIds.every(
1077
+ (requiredId) => itemType.fields?.some((field) => field.id === requiredId)
1078
+ )
1079
+ );
1066
1080
  }
1067
1081
  const schemaFields = data.schema?.fields;
1068
1082
  if (!schemaFields) {
1069
1083
  return true;
1070
1084
  }
1071
- return requiredFieldIds.every((requiredId) => schemaFields.some((field) => field.id === requiredId));
1085
+ return requiredFieldIds.every(
1086
+ (requiredId) => schemaFields.some((field) => field.id === requiredId)
1087
+ );
1072
1088
  },
1073
1089
  {
1074
1090
  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`,
@@ -1096,7 +1112,9 @@ var repeaterFieldSchema = baseFieldSchema.extend({
1096
1112
  if (!schemaFields) {
1097
1113
  return true;
1098
1114
  }
1099
- const field = schemaFields.find((candidate) => candidate.id === labelField);
1115
+ const field = schemaFields.find(
1116
+ (candidate) => candidate.id === labelField
1117
+ );
1100
1118
  return field?.type === "text";
1101
1119
  },
1102
1120
  {
@@ -1107,13 +1125,17 @@ var repeaterFieldSchema = baseFieldSchema.extend({
1107
1125
  var groupFieldSchema = baseFieldSchema.extend({
1108
1126
  type: z3.literal("group"),
1109
1127
  schema: z3.object({
1110
- fields: z3.lazy(() => getFieldSchemaInternal().array().min(1, "Group requires at least one field"))
1128
+ fields: z3.lazy(
1129
+ () => getFieldSchemaInternal().array().min(1, "Group requires at least one field")
1130
+ )
1111
1131
  })
1112
1132
  });
1113
1133
  var modalFieldSchema = baseFieldSchema.extend({
1114
1134
  type: z3.literal("modal"),
1115
1135
  schema: z3.object({
1116
- fields: z3.lazy(() => getFieldSchemaInternal().array().min(1, "Modal requires at least one field"))
1136
+ fields: z3.lazy(
1137
+ () => getFieldSchemaInternal().array().min(1, "Modal requires at least one field")
1138
+ )
1117
1139
  })
1118
1140
  });
1119
1141
  var numberFieldSchema = baseFieldSchema.extend({
@@ -1223,31 +1245,35 @@ function expectParsedSelectField(field) {
1223
1245
  return field;
1224
1246
  }
1225
1247
  function createSiteOptionSelectField(input) {
1226
- return expectParsedSelectField(parseFieldDefinition({
1227
- ...input,
1228
- type: "select",
1229
- options: [],
1230
- multiple: input.multiple ?? false,
1231
- source: { kind: "site", optionSource: input.optionSource },
1232
- ui: {
1233
- ...input.ui ?? {},
1234
- widget: "siteOptionPicker",
1235
- siteOptionSource: input.optionSource
1236
- }
1237
- }));
1248
+ return expectParsedSelectField(
1249
+ parseFieldDefinition({
1250
+ ...input,
1251
+ type: "select",
1252
+ options: [],
1253
+ multiple: input.multiple ?? false,
1254
+ source: { kind: "site", optionSource: input.optionSource },
1255
+ ui: {
1256
+ ...input.ui ?? {},
1257
+ widget: "siteOptionPicker",
1258
+ siteOptionSource: input.optionSource
1259
+ }
1260
+ })
1261
+ );
1238
1262
  }
1239
1263
  function createSdkSelectField(input) {
1240
- return expectParsedSelectField(parseFieldDefinition({
1241
- ...input,
1242
- type: "select",
1243
- options: input.options,
1244
- multiple: input.multiple ?? false,
1245
- source: { kind: "sdk" },
1246
- ui: {
1247
- ...input.ui ?? {},
1248
- widget: "sdkSelect"
1249
- }
1250
- }));
1264
+ return expectParsedSelectField(
1265
+ parseFieldDefinition({
1266
+ ...input,
1267
+ type: "select",
1268
+ options: input.options,
1269
+ multiple: input.multiple ?? false,
1270
+ source: { kind: "sdk" },
1271
+ ui: {
1272
+ ...input.ui ?? {},
1273
+ widget: "sdkSelect"
1274
+ }
1275
+ })
1276
+ );
1251
1277
  }
1252
1278
  var slotSchema = z3.object({
1253
1279
  id: z3.string().min(1),
@@ -1258,8 +1284,20 @@ var slotSchema = z3.object({
1258
1284
  help: z3.string().optional(),
1259
1285
  visibleRoles: z3.array(z3.enum(visibilityLevels)).optional()
1260
1286
  });
1261
- var typographyTokens = ["display", "heading", "subheading", "body", "caption"];
1262
- var colorTokens = ["background", "surface", "foreground", "accent", "muted"];
1287
+ var typographyTokens = [
1288
+ "display",
1289
+ "heading",
1290
+ "subheading",
1291
+ "body",
1292
+ "caption"
1293
+ ];
1294
+ var colorTokens = [
1295
+ "background",
1296
+ "surface",
1297
+ "foreground",
1298
+ "accent",
1299
+ "muted"
1300
+ ];
1263
1301
  var spacingTokens = ["none", "xs", "sm", "md", "lg", "xl"];
1264
1302
  var radiusTokens = ["none", "sm", "md", "lg", "full"];
1265
1303
  var styleTokenSchema = z3.object({
@@ -1279,7 +1317,14 @@ var behaviourSchema = z3.object({
1279
1317
  // Block manages its own wrapper (for sticky/fixed positioning)
1280
1318
  managesOwnWrapper: z3.boolean().optional()
1281
1319
  });
1282
- var blockCategoryEnum = z3.enum(["marketing", "content", "blog", "media", "layout", "interactive"]);
1320
+ var blockCategoryEnum = z3.enum([
1321
+ "marketing",
1322
+ "content",
1323
+ "blog",
1324
+ "media",
1325
+ "layout",
1326
+ "interactive"
1327
+ ]);
1283
1328
  var manifestSchema = z3.object({
1284
1329
  name: z3.string().min(1),
1285
1330
  version: z3.string().min(1),
@@ -1947,6 +1992,24 @@ function resolveVariantKey(manifest, content) {
1947
1992
  return null;
1948
1993
  }
1949
1994
 
1995
+ // ../theme-core/src/site-styles/appearancePresetResolution.ts
1996
+ function assertValidOptionGroups(preset2) {
1997
+ preset2.optionGroups?.forEach((group) => {
1998
+ const selectedOption = group.options.find(
1999
+ (option) => option.id === group.selectedOptionId
2000
+ );
2001
+ if (!selectedOption) {
2002
+ throw new Error(
2003
+ `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
2004
+ );
2005
+ }
2006
+ });
2007
+ }
2008
+ function defineBlockAppearancePreset(preset2) {
2009
+ assertValidOptionGroups(preset2);
2010
+ return preset2;
2011
+ }
2012
+
1950
2013
  // ../theme-core/src/site-styles/types.ts
1951
2014
  function asDesignBlockId(value) {
1952
2015
  return brandNonEmptyString(value, "DesignBlockId");
@@ -2028,6 +2091,11 @@ function flushPanelFrame(options) {
2028
2091
  function defineFrameCapability(capability) {
2029
2092
  return capability;
2030
2093
  }
2094
+ var tileTreatmentValues = [
2095
+ "default",
2096
+ "quiet",
2097
+ "brand-depth"
2098
+ ];
2031
2099
  var eyebrowTreatmentValues = [
2032
2100
  "plain",
2033
2101
  "pill",
@@ -2043,31 +2111,13 @@ function defineBlockDesignCapability(capability) {
2043
2111
  imageSurfaceTreatments: capability.imageSurfaceTreatments ?? ["none"],
2044
2112
  imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
2045
2113
  testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"],
2114
+ tileTreatments: capability.tileTreatments ?? ["default"],
2046
2115
  eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"]
2047
2116
  };
2048
2117
  }
2049
2118
 
2050
- // ../theme-core/src/site-styles/appearancePresets.ts
2051
- function assertValidOptionGroups(preset2) {
2052
- preset2.optionGroups?.forEach((group) => {
2053
- const selectedOption = group.options.find(
2054
- (option) => option.id === group.selectedOptionId
2055
- );
2056
- if (!selectedOption) {
2057
- throw new Error(
2058
- `Appearance preset "${preset2.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
2059
- );
2060
- }
2061
- });
2062
- }
2063
- function defineBlockAppearancePreset(preset2) {
2064
- assertValidOptionGroups(preset2);
2065
- return preset2;
2066
- }
2067
- function defineSiteChromeAppearancePreset(preset2) {
2068
- return preset2;
2069
- }
2070
- var appearancePresets = [
2119
+ // ../theme-core/src/site-styles/blockAppearancePresets.ts
2120
+ var blockAppearancePresets = [
2071
2121
  defineBlockAppearancePreset({
2072
2122
  kind: "block-design",
2073
2123
  id: "hero-immersive-image",
@@ -2193,6 +2243,24 @@ var appearancePresets = [
2193
2243
  eyebrowTreatment: "accent-pill-bounce"
2194
2244
  }
2195
2245
  }),
2246
+ defineBlockAppearancePreset({
2247
+ kind: "block-design",
2248
+ id: "hero-brand-depth-expressive",
2249
+ target: "hero",
2250
+ label: "Expressive brand-depth hero",
2251
+ blockKinds: ["block.hero"],
2252
+ constraints: {
2253
+ layoutFamilies: ["centered", "compact"]
2254
+ },
2255
+ design: {
2256
+ sectionSurface: "brand-depth-band",
2257
+ contentFrame: plainFrame,
2258
+ itemSurface: "none",
2259
+ transitionAfter: "soft-fade-short",
2260
+ emphasis: "high",
2261
+ eyebrowTreatment: "accent-pill-bounce"
2262
+ }
2263
+ }),
2196
2264
  defineBlockAppearancePreset({
2197
2265
  kind: "block-design",
2198
2266
  id: "hero-contained-intro",
@@ -2221,6 +2289,20 @@ var appearancePresets = [
2221
2289
  emphasis: "high"
2222
2290
  }
2223
2291
  }),
2292
+ defineBlockAppearancePreset({
2293
+ kind: "block-design",
2294
+ id: "body-text-brand-depth-intro",
2295
+ target: "body-text",
2296
+ label: "Brand-depth intro copy",
2297
+ blockKinds: ["block.body-text"],
2298
+ design: {
2299
+ sectionSurface: "brand-depth-band",
2300
+ contentFrame: plainFrame,
2301
+ itemSurface: "none",
2302
+ transitionAfter: "soft-fade-short",
2303
+ emphasis: "high"
2304
+ }
2305
+ }),
2224
2306
  defineBlockAppearancePreset({
2225
2307
  kind: "block-design",
2226
2308
  id: "offerings-calm-list",
@@ -2263,6 +2345,21 @@ var appearancePresets = [
2263
2345
  emphasis: "medium"
2264
2346
  }
2265
2347
  }),
2348
+ defineBlockAppearancePreset({
2349
+ kind: "block-design",
2350
+ id: "schedule-details-brand-depth",
2351
+ target: "events",
2352
+ label: "Brand-depth schedule details",
2353
+ blockKinds: ["block.event-details", "block.course-details"],
2354
+ design: {
2355
+ sectionSurface: "brand-depth-band",
2356
+ contentFrame: plainFrame,
2357
+ itemSurface: "none",
2358
+ transitionAfter: "none",
2359
+ emphasis: "medium",
2360
+ tileTreatment: "brand-depth"
2361
+ }
2362
+ }),
2266
2363
  defineBlockAppearancePreset({
2267
2364
  kind: "block-design",
2268
2365
  id: "media-text-flush-feature",
@@ -2348,6 +2445,20 @@ var appearancePresets = [
2348
2445
  testimonialCardTreatment: "accent-quote"
2349
2446
  }
2350
2447
  }),
2448
+ defineBlockAppearancePreset({
2449
+ kind: "block-design",
2450
+ id: "faq-base-accordion",
2451
+ target: "faq",
2452
+ label: "Base accordion FAQ",
2453
+ blockKinds: ["block.faq"],
2454
+ design: {
2455
+ sectionSurface: "base",
2456
+ contentFrame: plainFrame,
2457
+ itemSurface: "default",
2458
+ transitionAfter: "none",
2459
+ emphasis: "medium"
2460
+ }
2461
+ }),
2351
2462
  defineBlockAppearancePreset({
2352
2463
  kind: "block-design",
2353
2464
  id: "faq-contained-help",
@@ -2390,6 +2501,20 @@ var appearancePresets = [
2390
2501
  emphasis: "high"
2391
2502
  }
2392
2503
  }),
2504
+ defineBlockAppearancePreset({
2505
+ kind: "block-design",
2506
+ id: "contact-form-brand-depth-card",
2507
+ target: "contact-form",
2508
+ label: "Brand-depth form card",
2509
+ blockKinds: ["block.form"],
2510
+ design: {
2511
+ sectionSurface: "brand-depth-band",
2512
+ contentFrame: panelFrame("raised"),
2513
+ itemSurface: "none",
2514
+ transitionAfter: "none",
2515
+ emphasis: "high"
2516
+ }
2517
+ }),
2393
2518
  defineBlockAppearancePreset({
2394
2519
  kind: "block-design",
2395
2520
  id: "cta-accent-band",
@@ -2403,7 +2528,14 @@ var appearancePresets = [
2403
2528
  transitionAfter: "none",
2404
2529
  emphasis: "high"
2405
2530
  }
2406
- }),
2531
+ })
2532
+ ];
2533
+
2534
+ // ../theme-core/src/site-styles/siteChromeAppearancePresets.ts
2535
+ function defineSiteChromeAppearancePreset(preset2) {
2536
+ return preset2;
2537
+ }
2538
+ var siteChromeAppearancePresets = [
2407
2539
  defineSiteChromeAppearancePreset({
2408
2540
  kind: "site-chrome",
2409
2541
  id: "header-clean-base",
@@ -2471,6 +2603,12 @@ var appearancePresets = [
2471
2603
  })
2472
2604
  ];
2473
2605
 
2606
+ // ../theme-core/src/site-styles/appearancePresetCatalog.ts
2607
+ var appearancePresets = [
2608
+ ...blockAppearancePresets,
2609
+ ...siteChromeAppearancePresets
2610
+ ];
2611
+
2474
2612
  // ../theme-core/src/site-styles/blockFlow.ts
2475
2613
  function defineBlockDesignMetadata(input) {
2476
2614
  const layoutProfiles = (input.layoutProfiles ?? []).map((profile) => ({
@@ -6013,6 +6151,7 @@ var sectionStylesOverrideSchema = z20.object({
6013
6151
  background: boxBackgroundSchema.nullable().optional(),
6014
6152
  spacing: semanticSpacingSchema.nullable().optional(),
6015
6153
  minHeight: z20.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
6154
+ tileTreatment: z20.enum(tileTreatmentValues).nullable().optional(),
6016
6155
  eyebrowTreatment: z20.enum(eyebrowTreatmentValues).nullable().optional()
6017
6156
  });
6018
6157
  var containerStylesOverrideSchema = z20.object({
@@ -6806,7 +6945,7 @@ var userContentFrames = [
6806
6945
  ];
6807
6946
  var generatedDesignOptionCatalog = {
6808
6947
  source: "generated",
6809
- sectionSurfaces: ["base", "muted-band", "accent-band", "hero-image"],
6948
+ sectionSurfaces: ["base", "muted-band", "accent-band", "brand-depth-band", "hero-image"],
6810
6949
  contentFrames: generatedContentFrames,
6811
6950
  itemSurfaces: ["none", "default", "flat", "outlined", "raised"],
6812
6951
  transitions: ["none", "soft-fade-short", "soft-fade-long"],
@@ -6876,6 +7015,43 @@ var expressiveBudget = {
6876
7015
  mediaDensity: "high",
6877
7016
  decorativeRepetition: "medium"
6878
7017
  };
7018
+ var expressiveUnderlineInputs = {
7019
+ base: {
7020
+ background: { type: "transparent" },
7021
+ textColorToken: "text",
7022
+ border: {
7023
+ widthClass: "border-2",
7024
+ colorToken: "border",
7025
+ style: "underline"
7026
+ },
7027
+ corners: "square",
7028
+ shadow: null,
7029
+ spacing: "compact",
7030
+ fontSize: "base"
7031
+ },
7032
+ label: {
7033
+ textColorToken: "primary",
7034
+ fontWeight: "black",
7035
+ fontSize: "xs",
7036
+ textTransform: "uppercase",
7037
+ letterSpacing: "widest",
7038
+ opacity: 1
7039
+ },
7040
+ focus: {
7041
+ ringColorToken: "secondary",
7042
+ ringWidth: "0",
7043
+ borderColorToken: "secondary"
7044
+ },
7045
+ error: {
7046
+ borderColorToken: "destructive",
7047
+ textColorToken: "destructive"
7048
+ },
7049
+ disabled: {
7050
+ backgroundColorToken: "surface",
7051
+ textColorToken: "text",
7052
+ opacity: 0.6
7053
+ }
7054
+ };
6879
7055
  function uniqueContentFrameKinds() {
6880
7056
  const kinds = [...new Set(
6881
7057
  generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
@@ -7226,15 +7402,17 @@ var curatedSiteStyles = [
7226
7402
  paragraphSize: "editorial",
7227
7403
  headingSize: "editorial"
7228
7404
  }
7229
- }
7405
+ },
7406
+ inputs: expressiveUnderlineInputs
7230
7407
  },
7231
7408
  recommendedAppearancePresetIds: [
7232
7409
  "site-header-brand-solid-inverted-cta",
7233
7410
  "site-footer-brand-two-band",
7234
7411
  "hero-brand-scrim-fixed-frame",
7235
7412
  "body-text-editorial-intro",
7413
+ "schedule-details-brand-depth",
7236
7414
  "testimonials-accent-quote-proof",
7237
- "contact-form-dark-card"
7415
+ "contact-form-brand-depth-card"
7238
7416
  ],
7239
7417
  buttonPersonalityChoices: [
7240
7418
  buttonChoice("showtime-pill"),
@@ -7472,6 +7650,7 @@ var imageSurfaceTreatmentSchema = z22.discriminatedUnion("kind", [
7472
7650
  }).strict()
7473
7651
  ]);
7474
7652
  var testimonialCardTreatmentSchema = z22.enum(["default", "accent-quote"]);
7653
+ var tileTreatmentSchema = z22.enum(tileTreatmentValues);
7475
7654
  var eyebrowTreatmentSchema = z22.enum(eyebrowTreatmentValues);
7476
7655
  function uniqueNonEmpty(values) {
7477
7656
  const uniqueValues = [...new Set(values)];
@@ -7516,6 +7695,7 @@ var blockDesignPlanSchema = z22.object({
7516
7695
  imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
7517
7696
  imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
7518
7697
  testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
7698
+ tileTreatment: tileTreatmentSchema.optional(),
7519
7699
  eyebrowTreatment: eyebrowTreatmentSchema.optional()
7520
7700
  }).strict();
7521
7701
  var styleAuthoritySchema = z22.discriminatedUnion("kind", [
@@ -7579,6 +7759,14 @@ var defaultDesignRuntimeRules = defineDesignRuntimeRules({
7579
7759
  headingColor: "primaryForeground"
7580
7760
  }
7581
7761
  },
7762
+ "brand-depth-band": {
7763
+ background: {
7764
+ type: "color",
7765
+ color: "primary-800",
7766
+ textColor: "primaryForeground",
7767
+ headingColor: "primaryForeground"
7768
+ }
7769
+ },
7582
7770
  "hero-image": {
7583
7771
  background: {
7584
7772
  type: "image",
@@ -9468,6 +9656,21 @@ function createTransformRegistry(definitions) {
9468
9656
  }
9469
9657
 
9470
9658
  // ../blocks/src/system/transforms/registry/_utils/colorResolution.ts
9659
+ var CSS_COLOR_FUNCTION_PATTERN = /^(?:rgb|rgba|hsl|hsla|hwb|lab|lch|oklab|oklch|color|color-mix|light-dark)\(/i;
9660
+ var CSS_HEX_COLOR_PATTERN = /^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;
9661
+ var THEME_COLOR_TOKEN_PATTERN = /^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*(?:\/(?:100|[1-9]?\d|0))?$/;
9662
+ var CSS_COLOR_KEYWORDS = /* @__PURE__ */ new Set([
9663
+ "transparent",
9664
+ "currentColor",
9665
+ "inherit",
9666
+ "initial",
9667
+ "revert",
9668
+ "revert-layer",
9669
+ "unset"
9670
+ ]);
9671
+ function isLiteralCssColorValue(value) {
9672
+ return CSS_HEX_COLOR_PATTERN.test(value) || CSS_COLOR_FUNCTION_PATTERN.test(value) || value.startsWith("var(") || CSS_COLOR_KEYWORDS.has(value);
9673
+ }
9471
9674
  function resolveBackgroundColorValue(tokenOrCssValue, context) {
9472
9675
  const trimmed = tokenOrCssValue.trim();
9473
9676
  if (!trimmed) return "";
@@ -9484,8 +9687,11 @@ function resolveBackgroundColorValue(tokenOrCssValue, context) {
9484
9687
  return rgbColorValue(trimmed);
9485
9688
  }
9486
9689
  }
9487
- if (trimmed === "transparent") {
9488
- return "transparent";
9690
+ if (isLiteralCssColorValue(trimmed)) {
9691
+ return trimmed;
9692
+ }
9693
+ if (THEME_COLOR_TOKEN_PATTERN.test(trimmed)) {
9694
+ return rgbColorValue(trimmed);
9489
9695
  }
9490
9696
  return trimmed;
9491
9697
  }
@@ -9741,6 +9947,15 @@ function hasFixedFrameBackgroundMotion(value) {
9741
9947
  const background = asPartialObject(input?.background);
9742
9948
  return background?.motion === "fixed-frame";
9743
9949
  }
9950
+ var tileTreatmentClassMap = {
9951
+ default: "",
9952
+ quiet: "rb-tile-treatment-quiet",
9953
+ "brand-depth": "rb-tile-treatment-brand-depth"
9954
+ };
9955
+ var tileTreatmentSet = new Set(tileTreatmentValues);
9956
+ function isTileTreatment(value) {
9957
+ return typeof value === "string" && tileTreatmentSet.has(value);
9958
+ }
9744
9959
  var sectionClassNameTransform = {
9745
9960
  id: "sectionStyles.resolveClassName",
9746
9961
  kind: "string",
@@ -9797,6 +10012,17 @@ var sectionClassNameTransform = {
9797
10012
  classes.push(minHeightClass);
9798
10013
  }
9799
10014
  }
10015
+ const tileTreatment = input?.tileTreatment;
10016
+ if (isTileTreatment(tileTreatment)) {
10017
+ const tileTreatmentClass = tileTreatmentClassMap[tileTreatment];
10018
+ if (tileTreatmentClass) {
10019
+ classes.push(tileTreatmentClass);
10020
+ }
10021
+ } else if (typeof tileTreatment === "string" && process.env.NODE_ENV !== "production") {
10022
+ console.warn(
10023
+ `[sectionStyles] Invalid tileTreatment value in _sectionStyles: "${tileTreatment}". Expected one of: ${tileTreatmentValues.join(", ")}.`
10024
+ );
10025
+ }
9800
10026
  if (hasFixedFrameBackgroundMotion(input)) {
9801
10027
  classes.push(fixedFrameScopeClass);
9802
10028
  }
@@ -12763,6 +12989,9 @@ function createBlockManifest(config) {
12763
12989
  };
12764
12990
  return augmentManifest(manifest);
12765
12991
  }
12992
+ function createBlockManifestWithContentShape(config, _contentShape) {
12993
+ return createBlockManifest(config);
12994
+ }
12766
12995
  function normalizeBlockLayout(layout) {
12767
12996
  return Array.isArray(layout) ? [...layout] : layout;
12768
12997
  }
@@ -13395,7 +13624,7 @@ var ctaComposition = composeFragments([
13395
13624
  { fragment: ctaCopyFragment },
13396
13625
  { fragment: ctaRowFragment }
13397
13626
  ]);
13398
- var ctaFullManifest = createBlockManifest({
13627
+ var ctaFullConfig = {
13399
13628
  id: "block.cta-full",
13400
13629
  title: "Full-width CTA",
13401
13630
  category: "marketing",
@@ -13413,7 +13642,8 @@ var ctaFullManifest = createBlockManifest({
13413
13642
  description: "Centered call to action with optional background image.",
13414
13643
  tags: ["cta", "call-to-action", "button", "conversion", "action", "sign-up", "get-started"],
13415
13644
  icon: "Target"
13416
- });
13645
+ };
13646
+ var ctaFullManifest = createBlockManifest(ctaFullConfig);
13417
13647
  var ctaFullBlockDefinition = {
13418
13648
  manifest: ctaFullManifest
13419
13649
  };
@@ -16594,9 +16824,9 @@ var mediaTextManifest = createBlockManifest({
16594
16824
  {
16595
16825
  id: "images",
16596
16826
  type: "repeater",
16597
- label: "Images",
16827
+ label: "Media",
16598
16828
  required: false,
16599
- itemLabel: "Image",
16829
+ itemLabel: "Media",
16600
16830
  minItems: 0,
16601
16831
  maxItems: 6,
16602
16832
  allowConversion: true,
@@ -16610,9 +16840,9 @@ var mediaTextManifest = createBlockManifest({
16610
16840
  {
16611
16841
  id: "image",
16612
16842
  type: "media",
16613
- label: "Image",
16843
+ label: "Media",
16614
16844
  required: true,
16615
- mediaKinds: ["image"]
16845
+ mediaKinds: ["image", "video"]
16616
16846
  }
16617
16847
  ]
16618
16848
  }
@@ -16690,8 +16920,8 @@ var mediaTextManifest = createBlockManifest({
16690
16920
  {
16691
16921
  id: "aspectRatio",
16692
16922
  type: "select",
16693
- label: "Image aspect ratio",
16694
- description: "Crop image to a consistent aspect ratio.",
16923
+ label: "Media aspect ratio",
16924
+ description: "Crop media to a consistent aspect ratio.",
16695
16925
  required: false,
16696
16926
  defaultValue: "auto",
16697
16927
  multiple: false,
@@ -16878,8 +17108,8 @@ var mediaTextManifest = createBlockManifest({
16878
17108
  }
16879
17109
  };
16880
17110
  })(),
16881
- description: "Two columns: image/carousel + rich text (with optional section title).",
16882
- tags: ["media", "image", "carousel", "text", "two-column", "layout"],
17111
+ description: "Two columns: media/carousel + rich text (with optional section title).",
17112
+ tags: ["media", "image", "video", "carousel", "text", "two-column", "layout"],
16883
17113
  icon: "Columns"
16884
17114
  });
16885
17115
  var mediaTextBlockDefinition = {
@@ -17030,6 +17260,19 @@ var transformSchema2 = z37.object({
17030
17260
  hotspot: hotspotSchema2.optional(),
17031
17261
  rotation: rotationSchema2.optional()
17032
17262
  });
17263
+ var mediaPosterSchema = z37.discriminatedUnion("tag", [
17264
+ z37.object({
17265
+ tag: z37.literal("storage"),
17266
+ assetId: z37.string().optional(),
17267
+ storageBucket: z37.string().min(1),
17268
+ storagePath: z37.string().min(1)
17269
+ }),
17270
+ z37.object({
17271
+ tag: z37.literal("external-src"),
17272
+ assetId: z37.string().optional(),
17273
+ src: z37.string().url()
17274
+ })
17275
+ ]);
17033
17276
  var mediaBaseSchema = z37.object({
17034
17277
  purpose: z37.string().optional(),
17035
17278
  placeholder: z37.boolean().default(true).optional(),
@@ -17043,6 +17286,7 @@ var mediaBaseSchema = z37.object({
17043
17286
  height: z37.number().optional(),
17044
17287
  storageBucket: z37.string().optional(),
17045
17288
  storagePath: z37.string().optional(),
17289
+ poster: mediaPosterSchema.optional(),
17046
17290
  transform: transformSchema2.optional()
17047
17291
  });
17048
17292
  var imageMediaSchema = mediaBaseSchema.extend({ type: z37.literal("image") });
@@ -17526,10 +17770,28 @@ import { z as z43 } from "zod";
17526
17770
 
17527
17771
  // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
17528
17772
  import { z as z42 } from "zod";
17773
+
17774
+ // ../blocks/src/system/constants/events.ts
17775
+ var eventCalendarDisplayModeValues = ["combined", "month", "week", "list", "timetable"];
17776
+ var eventCalendarListLayoutValues = ["stack", "grid", "compact"];
17777
+ var eventCalendarListLayoutOptions = [
17778
+ { id: "stack", label: "Stack" },
17779
+ { id: "grid", label: "Grid" },
17780
+ { id: "compact", label: "Compact" }
17781
+ ];
17782
+ function isEventCalendarDisplayMode(value) {
17783
+ return typeof value === "string" && eventCalendarDisplayModeValues.includes(value);
17784
+ }
17785
+ function isEventCalendarListLayout(value) {
17786
+ return typeof value === "string" && eventCalendarListLayoutValues.includes(value);
17787
+ }
17788
+
17789
+ // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
17529
17790
  var previewStageSchema = z42.enum(["preview", "published"]);
17530
17791
  var registrationButtonVariantSchema = z42.enum(["primary", "secondary", "outline"]);
17531
17792
  var eventButtonVariantSchema = z42.enum(["primary", "secondary", "outline", "link"]);
17532
- var eventLayoutSchema = z42.enum(["grid", "stack", "compact"]);
17793
+ var eventLayoutSchema = z42.enum(eventCalendarListLayoutValues);
17794
+ var eventCalendarDisplayModeSchema = z42.enum(eventCalendarDisplayModeValues);
17533
17795
  var columnOptionSchema = z42.enum(["2", "3", "4"]);
17534
17796
  var weekStartSchema = z42.enum(["sunday", "monday"]);
17535
17797
  var filterAutoShowSchema = z42.enum(["auto", "always", "never"]);
@@ -20309,6 +20571,22 @@ function resolveMediaWithCanonicalAsset(value, context) {
20309
20571
  height: asset.height ?? value.height
20310
20572
  };
20311
20573
  }
20574
+ function resolveVideoPosterUrl(value, context) {
20575
+ if (value.type !== "video") return void 0;
20576
+ const poster = value.poster;
20577
+ if (!poster) return void 0;
20578
+ switch (poster.tag) {
20579
+ case "external-src":
20580
+ return poster.src;
20581
+ case "storage":
20582
+ return resolveMediaStorageUrl({
20583
+ type: "image",
20584
+ assetId: poster.assetId,
20585
+ storageBucket: poster.storageBucket,
20586
+ storagePath: poster.storagePath
20587
+ }, context);
20588
+ }
20589
+ }
20312
20590
  var debugMediaNodeLog = (...args) => {
20313
20591
  if (typeof window === "undefined") return;
20314
20592
  const debugFlag = Reflect.get(window, "__DEBUG_MEDIA_NODE__");
@@ -20360,12 +20638,14 @@ function renderVideo(value, className, style, context, options = {}) {
20360
20638
  const src = resolvePublicMediaUrl(value, context);
20361
20639
  if (!src) return null;
20362
20640
  if (options.playback === "background") {
20641
+ const poster2 = resolveVideoPosterUrl(value, context);
20363
20642
  return /* @__PURE__ */ jsx(
20364
20643
  "video",
20365
20644
  {
20366
20645
  className,
20367
20646
  style,
20368
20647
  src,
20648
+ ...poster2 ? { poster: poster2 } : {},
20369
20649
  autoPlay: true,
20370
20650
  muted: true,
20371
20651
  loop: true,
@@ -20376,12 +20656,14 @@ function renderVideo(value, className, style, context, options = {}) {
20376
20656
  }
20377
20657
  );
20378
20658
  }
20659
+ const poster = resolveVideoPosterUrl(value, context);
20379
20660
  return /* @__PURE__ */ jsx(
20380
20661
  "video",
20381
20662
  {
20382
20663
  className,
20383
20664
  style,
20384
20665
  src,
20666
+ ...poster ? { poster } : {},
20385
20667
  controls: true,
20386
20668
  controlsList: "nodownload",
20387
20669
  preload: "metadata",
@@ -21129,7 +21411,232 @@ function buildEventListingInteractiveIslandProps(props2) {
21129
21411
  }
21130
21412
 
21131
21413
  // ../blocks/src/system/blocks/events/event-listing.ts
21132
- var eventListingManifest = createBlockManifest({
21414
+ var eventListingAdditionalFields = [
21415
+ ...sectionHeaderFields("All Events"),
21416
+ ...(() => {
21417
+ const columns = columnsField(["2", "3", "4"]);
21418
+ return [
21419
+ {
21420
+ ...layoutField,
21421
+ ui: { ...layoutField.ui ?? {}, intent: "display" }
21422
+ },
21423
+ {
21424
+ ...columns,
21425
+ ui: { ...columns.ui ?? {}, intent: "display" }
21426
+ }
21427
+ ];
21428
+ })(),
21429
+ {
21430
+ id: "eventsPerPage",
21431
+ type: "select",
21432
+ label: "Events per page",
21433
+ description: "Number of events to load at a time",
21434
+ required: false,
21435
+ multiple: false,
21436
+ defaultValue: "12",
21437
+ options: [
21438
+ { value: "3", label: "3 events" },
21439
+ { value: "6", label: "6 events" },
21440
+ { value: "12", label: "12 events" },
21441
+ { value: "24", label: "24 events" }
21442
+ ],
21443
+ ui: { intent: "display" }
21444
+ },
21445
+ {
21446
+ id: "paginationMode",
21447
+ type: "select",
21448
+ label: "More events",
21449
+ description: "How to access events beyond the initial list",
21450
+ required: false,
21451
+ multiple: false,
21452
+ defaultValue: "loadMore",
21453
+ options: [
21454
+ { value: "loadMore", label: "Load more button" },
21455
+ { value: "seeAllLink", label: "Link to another page" }
21456
+ ],
21457
+ ui: { intent: "display" }
21458
+ },
21459
+ {
21460
+ id: "seeAllUrl",
21461
+ type: "link",
21462
+ label: "See all destination",
21463
+ required: false,
21464
+ ui: {
21465
+ intent: "display",
21466
+ visibleWhen: {
21467
+ field: "paginationMode",
21468
+ equals: "seeAllLink"
21469
+ }
21470
+ }
21471
+ },
21472
+ {
21473
+ id: "loadMoreText",
21474
+ type: "text",
21475
+ label: "Button text",
21476
+ description: "Text for the pagination button or link",
21477
+ required: false,
21478
+ multiline: false,
21479
+ defaultValue: "Load more events",
21480
+ maxLength: 40
21481
+ },
21482
+ ...cardStylingFields.map((field) => ({
21483
+ ...field,
21484
+ ui: { ...field.ui ?? {}, intent: "style" }
21485
+ })),
21486
+ ...eventDisplayFields.map((field) => ({
21487
+ ...field,
21488
+ ui: { ...field.ui ?? {}, intent: "display" }
21489
+ })),
21490
+ {
21491
+ id: "kind",
21492
+ type: "select",
21493
+ label: "Show",
21494
+ description: "Choose whether this list shows courses, events, or both",
21495
+ required: false,
21496
+ multiple: false,
21497
+ defaultValue: "all",
21498
+ options: [
21499
+ { value: "all", label: "Courses and events" },
21500
+ { value: "courses", label: "Courses only" },
21501
+ { value: "events", label: "Events only" }
21502
+ ],
21503
+ ui: { intent: "behavior" }
21504
+ },
21505
+ {
21506
+ id: "eventSurface",
21507
+ type: "select",
21508
+ label: "Event surface",
21509
+ description: "Choose a semantic event scope",
21510
+ required: false,
21511
+ multiple: false,
21512
+ defaultValue: "all",
21513
+ options: [
21514
+ { value: "all", label: "All events" },
21515
+ { value: "regularClassSchedule", label: "Regular class schedule" },
21516
+ { value: "specialDatedEvents", label: "Workshops and special events" },
21517
+ { value: "custom", label: "Custom" }
21518
+ ],
21519
+ ui: { intent: "behavior" }
21520
+ },
21521
+ {
21522
+ id: "filterEventPresets",
21523
+ type: "select",
21524
+ label: "Pre-filter by event type",
21525
+ description: "Restrict this block to specific event types",
21526
+ required: false,
21527
+ multiple: true,
21528
+ defaultValue: [],
21529
+ options: [
21530
+ { value: "class", label: "Classes" },
21531
+ { value: "workshop", label: "Workshops" },
21532
+ { value: "retreat", label: "Retreats" },
21533
+ { value: "performance", label: "Performances" }
21534
+ ],
21535
+ ui: {
21536
+ intent: "behavior",
21537
+ visibleWhen: { field: "eventSurface", equals: "custom" }
21538
+ }
21539
+ },
21540
+ {
21541
+ id: "scheduleScope",
21542
+ type: "select",
21543
+ label: "Schedule cadence",
21544
+ description: "Restrict this block by recurrence",
21545
+ required: false,
21546
+ multiple: false,
21547
+ defaultValue: "any",
21548
+ options: [
21549
+ { value: "any", label: "Any cadence" },
21550
+ { value: "recurring", label: "Recurring only" },
21551
+ { value: "oneOff", label: "One-off only" }
21552
+ ],
21553
+ ui: {
21554
+ intent: "behavior",
21555
+ visibleWhen: { field: "eventSurface", equals: "custom" }
21556
+ }
21557
+ },
21558
+ {
21559
+ ...emptyStateField,
21560
+ ui: { ...emptyStateField.ui ?? {}, intent: "display" }
21561
+ },
21562
+ sectionStylesField({
21563
+ id: "_sectionStyles",
21564
+ label: "Section styles",
21565
+ renderInHeader: false
21566
+ })
21567
+ ];
21568
+ var eventListingLayout = [
21569
+ styledSection({
21570
+ children: sectionContainer([
21571
+ // Optional heading
21572
+ text(
21573
+ { as: "h2" },
21574
+ bind("content.heading"),
21575
+ when("content.heading")
21576
+ ),
21577
+ // Optional description
21578
+ richText(
21579
+ { className: "rb-prose rb-max-w-none" },
21580
+ bind("content.description"),
21581
+ when("content.description")
21582
+ ),
21583
+ // Event listing component with pagination
21584
+ el("event-listing", withApiBindings({
21585
+ events: { $bind: { from: "data.events" } },
21586
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
21587
+ layout: { $bind: { from: "content.layout", fallback: "grid" } },
21588
+ columns: { $bind: { from: "content.columns", fallback: "3" } },
21589
+ eventsPerPage: { $bind: { from: "content.eventsPerPage", fallback: "12" } },
21590
+ paginationMode: { $bind: { from: "content.paginationMode", fallback: "loadMore" } },
21591
+ seeAllUrl: { $bind: { from: "content.seeAllUrl", transforms: [{ id: "links.resolve" }] } },
21592
+ loadMoreText: { $bind: { from: "content.loadMoreText", fallback: "Load more events" } },
21593
+ cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
21594
+ buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
21595
+ buttonText: { $bind: { from: "content.buttonText", fallback: "View event" } },
21596
+ showVenue: { $bind: { from: "content.showVenue" } },
21597
+ showMap: { $bind: { from: "content.showMap" } },
21598
+ showCapacity: { $bind: { from: "content.showCapacity" } },
21599
+ eventKind: { $bind: { from: "content.kind", fallback: "all" } },
21600
+ eventSurface: { $bind: { from: "content.eventSurface", fallback: "all" } },
21601
+ filterEventPresets: { $bind: { from: "content.filterEventPresets" } },
21602
+ scheduleScope: { $bind: { from: "content.scheduleScope", fallback: "any" } },
21603
+ emptyMessage: { $bind: { from: "content.emptyMessage" } }
21604
+ }))
21605
+ ], {
21606
+ gap: "lg"
21607
+ }),
21608
+ // sectionContainer (rb-container) already provides horizontal padding
21609
+ baseClass: "",
21610
+ spacing: "comfortable"
21611
+ })
21612
+ ];
21613
+ var eventListingDerivedFields = [
21614
+ {
21615
+ id: "layout",
21616
+ type: "select",
21617
+ required: false,
21618
+ multiple: false,
21619
+ options: [
21620
+ { value: "grid" },
21621
+ { value: "stack" }
21622
+ ]
21623
+ },
21624
+ {
21625
+ id: "paginationMode",
21626
+ type: "select",
21627
+ required: false,
21628
+ multiple: false,
21629
+ options: [
21630
+ { value: "loadMore" },
21631
+ { value: "seeAllLink" }
21632
+ ]
21633
+ }
21634
+ ];
21635
+ var eventListingContentShape = {
21636
+ additionalFields: eventListingDerivedFields,
21637
+ skipSectionStyles: true
21638
+ };
21639
+ var eventListingConfig = {
21133
21640
  id: "block.event-listing",
21134
21641
  version: "1.1.0",
21135
21642
  title: "Event Listing",
@@ -21137,211 +21644,18 @@ var eventListingManifest = createBlockManifest({
21137
21644
  description: "Paginated list of all upcoming events",
21138
21645
  // Preserve legacy section styles field configuration (renderInHeader: false).
21139
21646
  skipSectionStyles: true,
21140
- additionalFields: [
21141
- ...sectionHeaderFields("All Events"),
21142
- ...(() => {
21143
- const columns = columnsField(["2", "3", "4"]);
21144
- return [
21145
- {
21146
- ...layoutField,
21147
- ui: { ...layoutField.ui ?? {}, intent: "display" }
21148
- },
21149
- {
21150
- ...columns,
21151
- ui: { ...columns.ui ?? {}, intent: "display" }
21152
- }
21153
- ];
21154
- })(),
21155
- {
21156
- id: "eventsPerPage",
21157
- type: "select",
21158
- label: "Events per page",
21159
- description: "Number of events to load at a time",
21160
- required: false,
21161
- multiple: false,
21162
- defaultValue: "12",
21163
- options: [
21164
- { value: "3", label: "3 events" },
21165
- { value: "6", label: "6 events" },
21166
- { value: "12", label: "12 events" },
21167
- { value: "24", label: "24 events" }
21168
- ],
21169
- ui: { intent: "display" }
21170
- },
21171
- {
21172
- id: "paginationMode",
21173
- type: "select",
21174
- label: "More events",
21175
- description: "How to access events beyond the initial list",
21176
- required: false,
21177
- multiple: false,
21178
- defaultValue: "loadMore",
21179
- options: [
21180
- { value: "loadMore", label: "Load more button" },
21181
- { value: "seeAllLink", label: "Link to another page" }
21182
- ],
21183
- ui: { intent: "display" }
21184
- },
21185
- {
21186
- id: "seeAllUrl",
21187
- type: "link",
21188
- label: "See all destination",
21189
- required: false,
21190
- ui: {
21191
- intent: "display",
21192
- visibleWhen: {
21193
- field: "paginationMode",
21194
- equals: "seeAllLink"
21195
- }
21196
- }
21197
- },
21198
- {
21199
- id: "loadMoreText",
21200
- type: "text",
21201
- label: "Button text",
21202
- description: "Text for the pagination button or link",
21203
- required: false,
21204
- multiline: false,
21205
- defaultValue: "Load more events",
21206
- maxLength: 40
21207
- },
21208
- ...cardStylingFields.map((field) => ({
21209
- ...field,
21210
- ui: { ...field.ui ?? {}, intent: "style" }
21211
- })),
21212
- ...eventDisplayFields.map((field) => ({
21213
- ...field,
21214
- ui: { ...field.ui ?? {}, intent: "display" }
21215
- })),
21216
- {
21217
- id: "kind",
21218
- type: "select",
21219
- label: "Show",
21220
- description: "Choose whether this list shows courses, events, or both",
21221
- required: false,
21222
- multiple: false,
21223
- defaultValue: "all",
21224
- options: [
21225
- { value: "all", label: "Courses and events" },
21226
- { value: "courses", label: "Courses only" },
21227
- { value: "events", label: "Events only" }
21228
- ],
21229
- ui: { intent: "behavior" }
21230
- },
21231
- {
21232
- id: "eventSurface",
21233
- type: "select",
21234
- label: "Event surface",
21235
- description: "Choose a semantic event scope",
21236
- required: false,
21237
- multiple: false,
21238
- defaultValue: "all",
21239
- options: [
21240
- { value: "all", label: "All events" },
21241
- { value: "regularClassSchedule", label: "Regular class schedule" },
21242
- { value: "specialDatedEvents", label: "Workshops and special events" },
21243
- { value: "custom", label: "Custom" }
21244
- ],
21245
- ui: { intent: "behavior" }
21246
- },
21247
- {
21248
- id: "filterEventPresets",
21249
- type: "select",
21250
- label: "Pre-filter by event type",
21251
- description: "Restrict this block to specific event types",
21252
- required: false,
21253
- multiple: true,
21254
- defaultValue: [],
21255
- options: [
21256
- { value: "class", label: "Classes" },
21257
- { value: "workshop", label: "Workshops" },
21258
- { value: "retreat", label: "Retreats" },
21259
- { value: "performance", label: "Performances" }
21260
- ],
21261
- ui: {
21262
- intent: "behavior",
21263
- visibleWhen: { field: "eventSurface", equals: "custom" }
21264
- }
21265
- },
21266
- {
21267
- id: "scheduleScope",
21268
- type: "select",
21269
- label: "Schedule cadence",
21270
- description: "Restrict this block by recurrence",
21271
- required: false,
21272
- multiple: false,
21273
- defaultValue: "any",
21274
- options: [
21275
- { value: "any", label: "Any cadence" },
21276
- { value: "recurring", label: "Recurring only" },
21277
- { value: "oneOff", label: "One-off only" }
21278
- ],
21279
- ui: {
21280
- intent: "behavior",
21281
- visibleWhen: { field: "eventSurface", equals: "custom" }
21282
- }
21283
- },
21284
- {
21285
- ...emptyStateField,
21286
- ui: { ...emptyStateField.ui ?? {}, intent: "display" }
21287
- },
21288
- sectionStylesField({
21289
- id: "_sectionStyles",
21290
- label: "Section styles",
21291
- renderInHeader: false
21292
- })
21293
- ],
21647
+ additionalFields: eventListingAdditionalFields,
21294
21648
  styleTokens: { background: "surface", typography: "body", spacing: "md" },
21295
21649
  behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: true },
21296
21650
  category: "interactive",
21297
21651
  tags: ["events", "listing", "paginated", "archive", "all-events"],
21298
21652
  icon: "List",
21299
- layout: [
21300
- styledSection({
21301
- children: sectionContainer([
21302
- // Optional heading
21303
- text(
21304
- { as: "h2" },
21305
- bind("content.heading"),
21306
- when("content.heading")
21307
- ),
21308
- // Optional description
21309
- richText(
21310
- { className: "rb-prose rb-max-w-none" },
21311
- bind("content.description"),
21312
- when("content.description")
21313
- ),
21314
- // Event listing component with pagination
21315
- el("event-listing", withApiBindings({
21316
- events: { $bind: { from: "data.events" } },
21317
- stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
21318
- layout: { $bind: { from: "content.layout", fallback: "grid" } },
21319
- columns: { $bind: { from: "content.columns", fallback: "3" } },
21320
- eventsPerPage: { $bind: { from: "content.eventsPerPage", fallback: "12" } },
21321
- paginationMode: { $bind: { from: "content.paginationMode", fallback: "loadMore" } },
21322
- seeAllUrl: { $bind: { from: "content.seeAllUrl", transforms: [{ id: "links.resolve" }] } },
21323
- loadMoreText: { $bind: { from: "content.loadMoreText", fallback: "Load more events" } },
21324
- cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
21325
- buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
21326
- buttonText: { $bind: { from: "content.buttonText", fallback: "View event" } },
21327
- showVenue: { $bind: { from: "content.showVenue" } },
21328
- showMap: { $bind: { from: "content.showMap" } },
21329
- showCapacity: { $bind: { from: "content.showCapacity" } },
21330
- eventKind: { $bind: { from: "content.kind", fallback: "all" } },
21331
- eventSurface: { $bind: { from: "content.eventSurface", fallback: "all" } },
21332
- filterEventPresets: { $bind: { from: "content.filterEventPresets" } },
21333
- scheduleScope: { $bind: { from: "content.scheduleScope", fallback: "any" } },
21334
- emptyMessage: { $bind: { from: "content.emptyMessage" } }
21335
- }))
21336
- ], {
21337
- gap: "lg"
21338
- }),
21339
- // sectionContainer (rb-container) already provides horizontal padding
21340
- baseClass: "",
21341
- spacing: "comfortable"
21342
- })
21343
- ]
21344
- });
21653
+ layout: eventListingLayout
21654
+ };
21655
+ var eventListingManifest = createBlockManifestWithContentShape(
21656
+ eventListingConfig,
21657
+ eventListingContentShape
21658
+ );
21345
21659
  var eventListingBlockDefinition = {
21346
21660
  manifest: eventListingManifest,
21347
21661
  runtime: eventListingBlockRuntime,
@@ -21368,7 +21682,6 @@ var eventListingBlockDefinition = {
21368
21682
 
21369
21683
  // ../blocks/src/system/runtime/nodes/events/EventCalendar.interactive.ts
21370
21684
  import { z as z49 } from "zod";
21371
- var displayModeSchema = z49.enum(["combined", "month", "week", "list", "timetable"]);
21372
21685
  var eventBlockKindSchema2 = z49.enum(eventBlockKindValues);
21373
21686
  var eventSurfaceScopeSchema2 = z49.enum(eventSurfaceScopeValues);
21374
21687
  var eventScheduleScopeSchema3 = z49.enum(eventScheduleScopeValues);
@@ -21378,7 +21691,8 @@ var eventCalendarSourceSchema = z49.object(
21378
21691
  siteId: z49.string(),
21379
21692
  apiBaseUrl: z49.string().optional(),
21380
21693
  stage: previewStageSchema.optional(),
21381
- displayMode: displayModeSchema.nullable().optional(),
21694
+ variant: eventCalendarDisplayModeSchema.nullable().optional(),
21695
+ displayMode: eventCalendarDisplayModeSchema.nullable().optional(),
21382
21696
  listLayout: eventLayoutSchema.optional(),
21383
21697
  listColumns: columnOptionSchema.optional(),
21384
21698
  layout: eventLayoutSchema.optional(),
@@ -21410,7 +21724,7 @@ var eventCalendarSourceSchema = z49.object(
21410
21724
  );
21411
21725
  var eventCalendarDisplaySchema = z49.object({
21412
21726
  kind: z49.literal("event-calendar"),
21413
- displayMode: displayModeSchema,
21727
+ displayMode: eventCalendarDisplayModeSchema,
21414
21728
  className: z49.string().nullable(),
21415
21729
  events: z49.array(publicEventSchema),
21416
21730
  listLayout: eventLayoutSchema,
@@ -21465,7 +21779,7 @@ var eventCalendarIslandMetaKeys = defineInteractiveIslandMetaKeys(
21465
21779
  function buildEventCalendarDisplay(source) {
21466
21780
  return {
21467
21781
  kind: "event-calendar",
21468
- displayMode: source.displayMode ?? "combined",
21782
+ displayMode: source.variant ?? source.displayMode ?? "combined",
21469
21783
  className: source.className ?? null,
21470
21784
  events: (source.events ?? []).slice().sort(
21471
21785
  (left, right) => new Date(left.startsAt).getTime() - new Date(right.startsAt).getTime()
@@ -21565,8 +21879,12 @@ function buildEventCalendarInteractiveIslandProps(props2) {
21565
21879
  function normalizeEventCalendarContent(content) {
21566
21880
  const record = typeof content === "object" && content !== null ? content : {};
21567
21881
  const kind = normalizeEventBlockKind(record.kind);
21882
+ const variant = normalizeEventCalendarDisplayMode(record.variant) ?? normalizeEventCalendarDisplayMode(record.displayMode);
21568
21883
  return {
21569
21884
  ...record,
21885
+ ...variant ? { variant } : {},
21886
+ displayMode: normalizeEventCalendarDisplayMode(record.displayMode),
21887
+ listLayout: normalizeEventCalendarListLayout(record.listLayout),
21570
21888
  kind,
21571
21889
  eventSurface: normalizeEventSurfaceScope(record.eventSurface),
21572
21890
  filterEventPresets: normalizeEventSurfacePresets(record.filterEventPresets),
@@ -21578,355 +21896,515 @@ function normalizeEventCalendarContent(content) {
21578
21896
  filterVenueId: normalizeEventVenueId(record.filterVenueId)
21579
21897
  };
21580
21898
  }
21581
- var eventCalendarManifest = createBlockManifest({
21582
- id: "block.event-calendar",
21583
- version: "3.6.0",
21584
- title: "Event Calendar",
21585
- titleSource: "heading",
21586
- description: "Display events with calendar, list, or combined views with filtering",
21587
- // Preserve legacy section styles field configuration (renderInHeader: false).
21588
- skipSectionStyles: true,
21589
- additionalFields: [
21590
- ...sectionHeaderFields("Event Calendar"),
21591
- // Display Mode (replaces calendarView)
21592
- {
21593
- id: "displayMode",
21594
- type: "select",
21595
- label: "Display mode",
21596
- description: "How events are displayed",
21597
- required: false,
21598
- multiple: false,
21599
- defaultValue: "combined",
21600
- options: [
21601
- { value: "combined", label: "Combined (List + Calendar tabs)" },
21602
- { value: "month", label: "Month calendar" },
21603
- { value: "week", label: "Week agenda" },
21604
- { value: "timetable", label: "Timetable" },
21605
- { value: "list", label: "List" }
21606
- ],
21607
- ui: { intent: "display" }
21608
- },
21609
- // List options (visible when displayMode is list or combined)
21610
- {
21611
- id: "listLayout",
21612
- type: "select",
21613
- label: "List layout",
21614
- description: "Layout style for list view",
21615
- required: false,
21616
- multiple: false,
21617
- defaultValue: "stack",
21618
- options: [
21619
- { value: "stack", label: "Stack (full-width cards)" },
21620
- { value: "grid", label: "Grid" },
21621
- { value: "compact", label: "Compact (dense rows)" }
21622
- ],
21623
- ui: {
21624
- intent: "display",
21625
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list"] }
21626
- }
21627
- },
21628
- {
21629
- id: "listColumns",
21630
- type: "select",
21631
- label: "Grid columns",
21632
- description: "Number of columns in grid layout",
21633
- required: false,
21634
- multiple: false,
21635
- defaultValue: "3",
21636
- options: [
21637
- { value: "2", label: "2 columns" },
21638
- { value: "3", label: "3 columns" },
21639
- { value: "4", label: "4 columns" }
21640
- ],
21641
- ui: {
21642
- intent: "display",
21643
- visibleWhen: { field: "listLayout", equals: "grid" }
21644
- }
21645
- },
21646
- {
21647
- id: "eventsPerPage",
21648
- type: "select",
21649
- label: "Events per page (cards)",
21650
- description: "Number of events to load initially in card layouts",
21651
- required: false,
21652
- multiple: false,
21653
- defaultValue: "12",
21654
- options: [
21655
- { value: "6", label: "6" },
21656
- { value: "12", label: "12" },
21657
- { value: "24", label: "24" }
21658
- ],
21659
- ui: {
21660
- intent: "display",
21661
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list"] }
21662
- }
21663
- },
21664
- {
21665
- id: "compactEventsPerPage",
21666
- type: "select",
21667
- label: "Events per page (compact)",
21668
- description: "Number of events to show per page in compact layout",
21669
- required: false,
21670
- multiple: false,
21671
- defaultValue: "10",
21672
- options: [
21673
- { value: "10", label: "10" },
21674
- { value: "20", label: "20" },
21675
- { value: "30", label: "30" }
21676
- ],
21677
- ui: {
21678
- intent: "display",
21679
- visibleWhen: { field: "listLayout", equals: "compact" }
21680
- }
21681
- },
21682
- {
21683
- id: "loadMoreText",
21684
- type: "text",
21685
- label: "Load more button text",
21686
- description: "Text for the load more button",
21687
- required: false,
21688
- multiline: false,
21689
- defaultValue: "Load more events",
21690
- ui: {
21691
- intent: "content",
21692
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list"] }
21693
- }
21694
- },
21695
- // Calendar options
21696
- {
21697
- id: "startOfWeek",
21698
- type: "select",
21699
- label: "Week starts on",
21700
- description: "First day of the week",
21701
- required: false,
21702
- multiple: false,
21703
- defaultValue: "monday",
21704
- options: [
21705
- { value: "sunday", label: "Sunday" },
21706
- { value: "monday", label: "Monday" }
21707
- ],
21708
- ui: {
21709
- intent: "display",
21710
- visibleWhen: {
21711
- field: "displayMode",
21712
- oneOf: ["combined", "month", "week"]
21713
- }
21714
- }
21715
- },
21716
- // Combined mode options
21717
- {
21718
- id: "calendarTabViews",
21719
- type: "select",
21720
- label: "Calendar tab views",
21721
- description: "Which calendar views to show in the Calendar tab",
21722
- required: false,
21723
- multiple: false,
21724
- defaultValue: "both",
21725
- options: [
21726
- { value: "both", label: "Month + Week toggle" },
21727
- { value: "month", label: "Month only" },
21728
- { value: "week", label: "Week only" }
21729
- ],
21730
- ui: {
21731
- intent: "display",
21732
- visibleWhen: { field: "displayMode", equals: "combined" }
21733
- }
21734
- },
21735
- // Filtering options
21736
- {
21737
- id: "kind",
21738
- type: "select",
21739
- label: "Show",
21740
- description: "Restrict this block to all offerings, courses, or events",
21741
- required: false,
21742
- multiple: false,
21743
- defaultValue: "all",
21744
- options: [
21745
- { value: "all", label: "All offerings" },
21746
- { value: "courses", label: "Courses only" },
21747
- { value: "events", label: "Events only" }
21748
- ],
21749
- ui: { intent: "behavior" }
21750
- },
21751
- {
21752
- id: "showFilters",
21753
- type: "boolean",
21754
- label: "Show filters",
21755
- description: "Show category, staff, and venue filters",
21756
- required: false,
21757
- defaultValue: true,
21758
- ui: {
21759
- intent: "display",
21760
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list", "timetable"] }
21761
- }
21762
- },
21763
- {
21764
- id: "showCategoryFilter",
21765
- type: "select",
21766
- label: "Show category filter",
21767
- description: "When to show the category filter dropdown",
21768
- required: false,
21769
- multiple: false,
21770
- defaultValue: "auto",
21771
- options: [
21772
- { value: "auto", label: "Auto (when >1 category has events)" },
21773
- { value: "always", label: "Always" },
21774
- { value: "never", label: "Never" }
21899
+ function normalizeEventCalendarDisplayMode(value) {
21900
+ return isEventCalendarDisplayMode(value) ? value : void 0;
21901
+ }
21902
+ function normalizeEventCalendarListLayout(value) {
21903
+ return isEventCalendarListLayout(value) ? value : void 0;
21904
+ }
21905
+ var eventCalendarLayout = [
21906
+ styledSection({
21907
+ children: sectionContainer(
21908
+ [
21909
+ // Optional heading
21910
+ text({ as: "h2" }, bind("content.heading"), when("content.heading")),
21911
+ // Optional description
21912
+ richText(
21913
+ { className: "rb-prose rb-max-w-none" },
21914
+ bind("content.description"),
21915
+ when("content.description")
21916
+ ),
21917
+ // Event calendar component (handles all display modes)
21918
+ el(
21919
+ "event-calendar",
21920
+ withApiBindings({
21921
+ events: { $bind: { from: "data.events" } },
21922
+ stage: {
21923
+ $bind: { from: "$root.previewStage", fallback: "published" }
21924
+ },
21925
+ // Variant is the new Theme V2-facing display mode. displayMode is
21926
+ // retained as a legacy fallback for existing content.
21927
+ variant: {
21928
+ $bind: { from: "content.variant" }
21929
+ },
21930
+ displayMode: {
21931
+ $bind: { from: "content.displayMode" }
21932
+ },
21933
+ // List options
21934
+ listLayout: { $bind: { from: "content.listLayout" } },
21935
+ listColumns: { $bind: { from: "content.listColumns" } },
21936
+ // Legacy compatibility: older event-calendar content used layout/columns
21937
+ layout: { $bind: { from: "content.layout" } },
21938
+ columns: { $bind: { from: "content.columns" } },
21939
+ eventsPerPage: {
21940
+ $bind: { from: "content.eventsPerPage", fallback: "12" }
21941
+ },
21942
+ compactEventsPerPage: {
21943
+ $bind: { from: "content.compactEventsPerPage", fallback: "10" }
21944
+ },
21945
+ loadMoreText: {
21946
+ $bind: {
21947
+ from: "content.loadMoreText",
21948
+ fallback: "Load more events"
21949
+ }
21950
+ },
21951
+ // Calendar options
21952
+ startOfWeek: {
21953
+ $bind: { from: "content.startOfWeek", fallback: "monday" }
21954
+ },
21955
+ calendarTabViews: {
21956
+ $bind: { from: "content.calendarTabViews", fallback: "both" }
21957
+ },
21958
+ // Filtering options
21959
+ showFilters: {
21960
+ $bind: { from: "content.showFilters", fallback: true }
21961
+ },
21962
+ showCategoryFilter: {
21963
+ $bind: { from: "content.showCategoryFilter", fallback: "auto" }
21964
+ },
21965
+ showVenueFilter: {
21966
+ $bind: { from: "content.showVenueFilter", fallback: false }
21967
+ },
21968
+ showStaffFilter: {
21969
+ $bind: { from: "content.showStaffFilter", fallback: true }
21970
+ },
21971
+ showCapacity: {
21972
+ $bind: { from: "content.showCapacity", fallback: true }
21973
+ },
21974
+ kind: { $bind: { from: "content.kind", fallback: "all" } },
21975
+ eventSurface: {
21976
+ $bind: { from: "content.eventSurface", fallback: "all" }
21977
+ },
21978
+ filterEventPresets: {
21979
+ $bind: { from: "content.filterEventPresets" }
21980
+ },
21981
+ scheduleScope: {
21982
+ $bind: { from: "content.scheduleScope", fallback: "any" }
21983
+ },
21984
+ filterCategoryIds: {
21985
+ $bind: { from: "content.filterCategoryIds" }
21986
+ },
21987
+ filterStaffMemberId: {
21988
+ $bind: { from: "content.filterStaffMemberId" }
21989
+ },
21990
+ filterVenueId: { $bind: { from: "content.filterVenueId" } },
21991
+ // Styling
21992
+ buttonVariant: {
21993
+ $bind: { from: "content.buttonVariant", fallback: "primary" }
21994
+ },
21995
+ buttonText: {
21996
+ $bind: { from: "content.buttonText", fallback: "View event" }
21997
+ },
21998
+ emptyMessage: { $bind: { from: "content.emptyMessage" } }
21999
+ })
22000
+ )
21775
22001
  ],
21776
- ui: {
21777
- intent: "display",
21778
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list", "timetable"] }
21779
- }
21780
- },
21781
- {
21782
- id: "showVenueFilter",
21783
- type: "boolean",
21784
- label: "Show venue filter",
21785
- description: "Show venue filter dropdown",
21786
- required: false,
21787
- defaultValue: false,
21788
- ui: {
21789
- intent: "display",
21790
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list", "timetable"] }
21791
- }
21792
- },
21793
- {
21794
- id: "showStaffFilter",
21795
- type: "boolean",
21796
- label: "Show staff filter",
21797
- description: "Show staff filter dropdown",
21798
- required: false,
21799
- defaultValue: true,
21800
- ui: {
21801
- intent: "display",
21802
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list", "timetable"] }
21803
- }
21804
- },
21805
- {
21806
- id: "showCapacity",
21807
- type: "boolean",
21808
- label: "Show available spots",
21809
- description: "Display remaining capacity on event cards and timetable cells",
21810
- required: false,
21811
- defaultValue: true,
21812
- ui: {
21813
- intent: "display",
21814
- visibleWhen: {
21815
- field: "displayMode",
21816
- oneOf: ["combined", "list", "week", "timetable"]
21817
- }
22002
+ {
22003
+ gap: "lg"
21818
22004
  }
21819
- },
21820
- // Block-level pre-filtering
21821
- {
21822
- id: "eventSurface",
21823
- type: "select",
21824
- label: "Event surface",
21825
- description: "Choose a semantic event scope",
21826
- required: false,
21827
- multiple: false,
21828
- defaultValue: "all",
21829
- options: [
21830
- { value: "all", label: "All events" },
21831
- { value: "regularClassSchedule", label: "Regular class schedule" },
21832
- { value: "specialDatedEvents", label: "Workshops and special events" },
21833
- { value: "custom", label: "Custom" }
21834
- ],
21835
- ui: { intent: "behavior" }
21836
- },
21837
- {
21838
- id: "filterEventPresets",
21839
- type: "select",
21840
- label: "Pre-filter by event type",
21841
- description: "Restrict this block to specific event types",
21842
- required: false,
21843
- multiple: true,
21844
- defaultValue: [],
21845
- options: [
21846
- { value: "class", label: "Classes" },
21847
- { value: "workshop", label: "Workshops" },
21848
- { value: "retreat", label: "Retreats" },
21849
- { value: "performance", label: "Performances" }
21850
- ],
21851
- ui: {
21852
- intent: "behavior",
21853
- visibleWhen: { field: "eventSurface", equals: "custom" }
22005
+ ),
22006
+ // sectionContainer (rb-container) already provides horizontal padding
22007
+ baseClass: "",
22008
+ spacing: "comfortable"
22009
+ })
22010
+ ];
22011
+ var eventCalendarAdditionalFields = [
22012
+ ...sectionHeaderFields("Event Calendar"),
22013
+ // Display Mode (replaces calendarView)
22014
+ {
22015
+ id: "displayMode",
22016
+ type: "select",
22017
+ label: "Display mode",
22018
+ description: "How events are displayed",
22019
+ required: false,
22020
+ multiple: false,
22021
+ defaultValue: "combined",
22022
+ options: [
22023
+ { value: "combined", label: "Combined (List + Calendar tabs)" },
22024
+ { value: "month", label: "Month calendar" },
22025
+ { value: "week", label: "Week agenda" },
22026
+ { value: "timetable", label: "Timetable" },
22027
+ { value: "list", label: "List" }
22028
+ ],
22029
+ ui: { intent: "display", hidden: true }
22030
+ },
22031
+ // List options (visible when displayMode is list or combined)
22032
+ {
22033
+ id: "listLayout",
22034
+ type: "select",
22035
+ label: "List layout",
22036
+ description: "Layout style for list view",
22037
+ required: false,
22038
+ multiple: false,
22039
+ defaultValue: "stack",
22040
+ options: eventCalendarListLayoutOptions.map((option) => ({
22041
+ value: option.id,
22042
+ label: option.label
22043
+ })),
22044
+ ui: {
22045
+ intent: "display",
22046
+ visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
22047
+ }
22048
+ },
22049
+ {
22050
+ id: "listColumns",
22051
+ type: "select",
22052
+ label: "Grid columns",
22053
+ description: "Number of columns in grid layout",
22054
+ required: false,
22055
+ multiple: false,
22056
+ defaultValue: "3",
22057
+ options: [
22058
+ { value: "2", label: "2 columns" },
22059
+ { value: "3", label: "3 columns" },
22060
+ { value: "4", label: "4 columns" }
22061
+ ],
22062
+ ui: {
22063
+ intent: "display",
22064
+ visibleWhen: { field: "listLayout", equals: "grid" }
22065
+ }
22066
+ },
22067
+ {
22068
+ id: "eventsPerPage",
22069
+ type: "select",
22070
+ label: "Events per page (cards)",
22071
+ description: "Number of events to load initially in card layouts",
22072
+ required: false,
22073
+ multiple: false,
22074
+ defaultValue: "12",
22075
+ options: [
22076
+ { value: "6", label: "6" },
22077
+ { value: "12", label: "12" },
22078
+ { value: "24", label: "24" }
22079
+ ],
22080
+ ui: {
22081
+ intent: "display",
22082
+ visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
22083
+ }
22084
+ },
22085
+ {
22086
+ id: "compactEventsPerPage",
22087
+ type: "select",
22088
+ label: "Events per page (compact)",
22089
+ description: "Number of events to show per page in compact layout",
22090
+ required: false,
22091
+ multiple: false,
22092
+ defaultValue: "10",
22093
+ options: [
22094
+ { value: "10", label: "10" },
22095
+ { value: "20", label: "20" },
22096
+ { value: "30", label: "30" }
22097
+ ],
22098
+ ui: {
22099
+ intent: "display",
22100
+ visibleWhen: { field: "listLayout", equals: "compact" }
22101
+ }
22102
+ },
22103
+ {
22104
+ id: "loadMoreText",
22105
+ type: "text",
22106
+ label: "Load more button text",
22107
+ description: "Text for the load more button",
22108
+ required: false,
22109
+ multiline: false,
22110
+ defaultValue: "Load more events",
22111
+ ui: {
22112
+ intent: "content",
22113
+ visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
22114
+ }
22115
+ },
22116
+ // Calendar options
22117
+ {
22118
+ id: "startOfWeek",
22119
+ type: "select",
22120
+ label: "Week starts on",
22121
+ description: "First day of the week",
22122
+ required: false,
22123
+ multiple: false,
22124
+ defaultValue: "monday",
22125
+ options: [
22126
+ { value: "sunday", label: "Sunday" },
22127
+ { value: "monday", label: "Monday" }
22128
+ ],
22129
+ ui: {
22130
+ intent: "display",
22131
+ visibleWhen: {
22132
+ field: "variant",
22133
+ oneOf: ["combined", "month", "week"]
21854
22134
  }
21855
- },
21856
- {
21857
- id: "scheduleScope",
21858
- type: "select",
21859
- label: "Schedule cadence",
21860
- description: "Restrict this block by recurrence",
21861
- required: false,
21862
- multiple: false,
21863
- defaultValue: "any",
21864
- options: [
21865
- { value: "any", label: "Any cadence" },
21866
- { value: "recurring", label: "Recurring only" },
21867
- { value: "oneOff", label: "One-off only" }
21868
- ],
21869
- ui: {
21870
- intent: "behavior",
21871
- visibleWhen: { field: "eventSurface", equals: "custom" }
22135
+ }
22136
+ },
22137
+ // Combined mode options
22138
+ {
22139
+ id: "calendarTabViews",
22140
+ type: "select",
22141
+ label: "Calendar tab views",
22142
+ description: "Which calendar views to show in the Calendar tab",
22143
+ required: false,
22144
+ multiple: false,
22145
+ defaultValue: "both",
22146
+ options: [
22147
+ { value: "both", label: "Month + Week toggle" },
22148
+ { value: "month", label: "Month only" },
22149
+ { value: "week", label: "Week only" }
22150
+ ],
22151
+ ui: {
22152
+ intent: "display",
22153
+ visibleWhen: { field: "variant", equals: "combined" }
22154
+ }
22155
+ },
22156
+ // Filtering options
22157
+ {
22158
+ id: "kind",
22159
+ type: "select",
22160
+ label: "Show",
22161
+ description: "Restrict this block to all offerings, courses, or events",
22162
+ required: false,
22163
+ multiple: false,
22164
+ defaultValue: "all",
22165
+ options: [
22166
+ { value: "all", label: "All offerings" },
22167
+ { value: "courses", label: "Courses only" },
22168
+ { value: "events", label: "Events only" }
22169
+ ],
22170
+ ui: { intent: "behavior" }
22171
+ },
22172
+ {
22173
+ id: "showFilters",
22174
+ type: "boolean",
22175
+ label: "Show filters",
22176
+ description: "Show category, staff, and venue filters",
22177
+ required: false,
22178
+ defaultValue: true,
22179
+ ui: {
22180
+ intent: "display",
22181
+ visibleWhen: {
22182
+ field: "variant",
22183
+ oneOf: ["combined", "list", "timetable"]
21872
22184
  }
21873
- },
21874
- createSiteOptionSelectField({
21875
- id: "filterCategoryIds",
21876
- label: "Pre-filter by categories",
21877
- description: "Restrict this block to specific event categories",
21878
- required: false,
21879
- multiple: true,
21880
- defaultValue: [],
21881
- optionSource: "eventCategories",
21882
- ui: {
21883
- intent: "behavior",
21884
- searchThreshold: 8,
21885
- visibleWhen: { field: "kind", notEquals: "courses" }
22185
+ }
22186
+ },
22187
+ {
22188
+ id: "showCategoryFilter",
22189
+ type: "select",
22190
+ label: "Show category filter",
22191
+ description: "When to show the category filter dropdown",
22192
+ required: false,
22193
+ multiple: false,
22194
+ defaultValue: "auto",
22195
+ options: [
22196
+ { value: "auto", label: "Auto (when >1 category has events)" },
22197
+ { value: "always", label: "Always" },
22198
+ { value: "never", label: "Never" }
22199
+ ],
22200
+ ui: {
22201
+ intent: "display",
22202
+ visibleWhen: {
22203
+ field: "variant",
22204
+ oneOf: ["combined", "list", "timetable"]
21886
22205
  }
21887
- }),
21888
- createSiteOptionSelectField({
21889
- id: "filterStaffMemberId",
21890
- label: "Pre-filter by staff member",
21891
- description: "Restrict this block to a single staff member",
21892
- required: false,
21893
- multiple: false,
21894
- optionSource: "staffMembers",
21895
- ui: {
21896
- intent: "behavior",
21897
- searchThreshold: 8
22206
+ }
22207
+ },
22208
+ {
22209
+ id: "showVenueFilter",
22210
+ type: "boolean",
22211
+ label: "Show venue filter",
22212
+ description: "Show venue filter dropdown",
22213
+ required: false,
22214
+ defaultValue: false,
22215
+ ui: {
22216
+ intent: "display",
22217
+ visibleWhen: {
22218
+ field: "variant",
22219
+ oneOf: ["combined", "list", "timetable"]
21898
22220
  }
21899
- }),
21900
- createSiteOptionSelectField({
21901
- id: "filterVenueId",
21902
- label: "Pre-filter by venue",
21903
- description: "Restrict this block to a single venue",
21904
- required: false,
21905
- multiple: false,
21906
- optionSource: "venues",
21907
- ui: {
21908
- intent: "behavior",
21909
- searchThreshold: 8
22221
+ }
22222
+ },
22223
+ {
22224
+ id: "showStaffFilter",
22225
+ type: "boolean",
22226
+ label: "Show staff filter",
22227
+ description: "Show staff filter dropdown",
22228
+ required: false,
22229
+ defaultValue: true,
22230
+ ui: {
22231
+ intent: "display",
22232
+ visibleWhen: {
22233
+ field: "variant",
22234
+ oneOf: ["combined", "list", "timetable"]
21910
22235
  }
21911
- }),
21912
- // Card styling
21913
- ...cardStylingFields.filter((f) => f.id === "buttonVariant" || f.id === "buttonText").map((field) => ({
21914
- ...field,
21915
- ui: {
21916
- ...field.ui ?? {},
21917
- intent: field.id === "buttonVariant" ? "style" : "content"
22236
+ }
22237
+ },
22238
+ {
22239
+ id: "showCapacity",
22240
+ type: "boolean",
22241
+ label: "Show available spots",
22242
+ description: "Display remaining capacity on event cards and timetable cells",
22243
+ required: false,
22244
+ defaultValue: true,
22245
+ ui: {
22246
+ intent: "display",
22247
+ visibleWhen: {
22248
+ field: "variant",
22249
+ oneOf: ["combined", "list", "week", "timetable"]
21918
22250
  }
21919
- })),
21920
- {
21921
- ...emptyStateField,
21922
- ui: { ...emptyStateField.ui ?? {}, intent: "display" }
21923
- },
21924
- sectionStylesField({
21925
- id: "_sectionStyles",
21926
- label: "Section styles",
21927
- renderInHeader: false
21928
- })
21929
- ],
22251
+ }
22252
+ },
22253
+ // Block-level pre-filtering
22254
+ {
22255
+ id: "eventSurface",
22256
+ type: "select",
22257
+ label: "Event surface",
22258
+ description: "Choose a semantic event scope",
22259
+ required: false,
22260
+ multiple: false,
22261
+ defaultValue: "all",
22262
+ options: [
22263
+ { value: "all", label: "All events" },
22264
+ { value: "regularClassSchedule", label: "Regular class schedule" },
22265
+ { value: "specialDatedEvents", label: "Workshops and special events" },
22266
+ { value: "custom", label: "Custom" }
22267
+ ],
22268
+ ui: { intent: "behavior" }
22269
+ },
22270
+ {
22271
+ id: "filterEventPresets",
22272
+ type: "select",
22273
+ label: "Pre-filter by event type",
22274
+ description: "Restrict this block to specific event types",
22275
+ required: false,
22276
+ multiple: true,
22277
+ defaultValue: [],
22278
+ options: [
22279
+ { value: "class", label: "Classes" },
22280
+ { value: "workshop", label: "Workshops" },
22281
+ { value: "retreat", label: "Retreats" },
22282
+ { value: "performance", label: "Performances" }
22283
+ ],
22284
+ ui: {
22285
+ intent: "behavior",
22286
+ visibleWhen: { field: "eventSurface", equals: "custom" }
22287
+ }
22288
+ },
22289
+ {
22290
+ id: "scheduleScope",
22291
+ type: "select",
22292
+ label: "Schedule cadence",
22293
+ description: "Restrict this block by recurrence",
22294
+ required: false,
22295
+ multiple: false,
22296
+ defaultValue: "any",
22297
+ options: [
22298
+ { value: "any", label: "Any cadence" },
22299
+ { value: "recurring", label: "Recurring only" },
22300
+ { value: "oneOff", label: "One-off only" }
22301
+ ],
22302
+ ui: {
22303
+ intent: "behavior",
22304
+ visibleWhen: { field: "eventSurface", equals: "custom" }
22305
+ }
22306
+ },
22307
+ createSiteOptionSelectField({
22308
+ id: "filterCategoryIds",
22309
+ label: "Pre-filter by categories",
22310
+ description: "Restrict this block to specific event categories",
22311
+ required: false,
22312
+ multiple: true,
22313
+ defaultValue: [],
22314
+ optionSource: "eventCategories",
22315
+ ui: {
22316
+ intent: "behavior",
22317
+ searchThreshold: 8,
22318
+ visibleWhen: { field: "kind", notEquals: "courses" }
22319
+ }
22320
+ }),
22321
+ createSiteOptionSelectField({
22322
+ id: "filterStaffMemberId",
22323
+ label: "Pre-filter by staff member",
22324
+ description: "Restrict this block to a single staff member",
22325
+ required: false,
22326
+ multiple: false,
22327
+ optionSource: "staffMembers",
22328
+ ui: {
22329
+ intent: "behavior",
22330
+ searchThreshold: 8
22331
+ }
22332
+ }),
22333
+ createSiteOptionSelectField({
22334
+ id: "filterVenueId",
22335
+ label: "Pre-filter by venue",
22336
+ description: "Restrict this block to a single venue",
22337
+ required: false,
22338
+ multiple: false,
22339
+ optionSource: "venues",
22340
+ ui: {
22341
+ intent: "behavior",
22342
+ searchThreshold: 8
22343
+ }
22344
+ }),
22345
+ // Card styling
22346
+ ...cardStylingFields.filter((f) => f.id === "buttonVariant" || f.id === "buttonText").map((field) => ({
22347
+ ...field,
22348
+ ui: {
22349
+ ...field.ui ?? {},
22350
+ intent: field.id === "buttonVariant" ? "style" : "content"
22351
+ }
22352
+ })),
22353
+ {
22354
+ ...emptyStateField,
22355
+ ui: { ...emptyStateField.ui ?? {}, intent: "display" }
22356
+ },
22357
+ sectionStylesField({
22358
+ id: "_sectionStyles",
22359
+ label: "Section styles",
22360
+ renderInHeader: false
22361
+ })
22362
+ ];
22363
+ var eventCalendarVariants = {
22364
+ combined: eventCalendarLayout[0],
22365
+ month: eventCalendarLayout[0],
22366
+ week: eventCalendarLayout[0],
22367
+ timetable: eventCalendarLayout[0],
22368
+ list: eventCalendarLayout[0]
22369
+ };
22370
+ var eventCalendarDerivedFields = [
22371
+ {
22372
+ id: "displayMode",
22373
+ type: "select",
22374
+ required: false,
22375
+ multiple: false,
22376
+ options: [
22377
+ { value: "combined" },
22378
+ { value: "month" },
22379
+ { value: "week" },
22380
+ { value: "timetable" },
22381
+ { value: "list" }
22382
+ ]
22383
+ },
22384
+ {
22385
+ id: "listLayout",
22386
+ type: "select",
22387
+ required: false,
22388
+ multiple: false,
22389
+ options: eventCalendarListLayoutOptions.map((option) => ({
22390
+ value: option.id
22391
+ }))
22392
+ }
22393
+ ];
22394
+ var eventCalendarContentShape = {
22395
+ additionalFields: eventCalendarDerivedFields,
22396
+ variants: eventCalendarVariants,
22397
+ skipSectionStyles: true
22398
+ };
22399
+ var eventCalendarConfig = {
22400
+ id: "block.event-calendar",
22401
+ version: "3.6.0",
22402
+ title: "Event Calendar",
22403
+ titleSource: "heading",
22404
+ description: "Display events with calendar, list, or combined views with filtering",
22405
+ // Preserve legacy section styles field configuration (renderInHeader: false).
22406
+ skipSectionStyles: true,
22407
+ additionalFields: eventCalendarAdditionalFields,
21930
22408
  styleTokens: { background: "surface", typography: "body", spacing: "md" },
21931
22409
  behaviours: {
21932
22410
  supportsThemeSwitching: true,
@@ -21946,109 +22424,21 @@ var eventCalendarManifest = createBlockManifest({
21946
22424
  "filter"
21947
22425
  ],
21948
22426
  icon: "CalendarDays",
21949
- layout: [
21950
- styledSection({
21951
- children: sectionContainer(
21952
- [
21953
- // Optional heading
21954
- text({ as: "h2" }, bind("content.heading"), when("content.heading")),
21955
- // Optional description
21956
- richText(
21957
- { className: "rb-prose rb-max-w-none" },
21958
- bind("content.description"),
21959
- when("content.description")
21960
- ),
21961
- // Event calendar component (handles all display modes)
21962
- el(
21963
- "event-calendar",
21964
- withApiBindings({
21965
- events: { $bind: { from: "data.events" } },
21966
- stage: {
21967
- $bind: { from: "$root.previewStage", fallback: "published" }
21968
- },
21969
- // Display mode
21970
- displayMode: {
21971
- $bind: { from: "content.displayMode", fallback: "combined" }
21972
- },
21973
- // List options
21974
- listLayout: { $bind: { from: "content.listLayout" } },
21975
- listColumns: { $bind: { from: "content.listColumns" } },
21976
- // Legacy compatibility: older event-calendar content used layout/columns
21977
- layout: { $bind: { from: "content.layout" } },
21978
- columns: { $bind: { from: "content.columns" } },
21979
- eventsPerPage: {
21980
- $bind: { from: "content.eventsPerPage", fallback: "12" }
21981
- },
21982
- compactEventsPerPage: {
21983
- $bind: { from: "content.compactEventsPerPage", fallback: "10" }
21984
- },
21985
- loadMoreText: {
21986
- $bind: {
21987
- from: "content.loadMoreText",
21988
- fallback: "Load more events"
21989
- }
21990
- },
21991
- // Calendar options
21992
- startOfWeek: {
21993
- $bind: { from: "content.startOfWeek", fallback: "monday" }
21994
- },
21995
- calendarTabViews: {
21996
- $bind: { from: "content.calendarTabViews", fallback: "both" }
21997
- },
21998
- // Filtering options
21999
- showFilters: {
22000
- $bind: { from: "content.showFilters", fallback: true }
22001
- },
22002
- showCategoryFilter: {
22003
- $bind: { from: "content.showCategoryFilter", fallback: "auto" }
22004
- },
22005
- showVenueFilter: {
22006
- $bind: { from: "content.showVenueFilter", fallback: false }
22007
- },
22008
- showStaffFilter: {
22009
- $bind: { from: "content.showStaffFilter", fallback: true }
22010
- },
22011
- showCapacity: {
22012
- $bind: { from: "content.showCapacity", fallback: true }
22013
- },
22014
- kind: { $bind: { from: "content.kind", fallback: "all" } },
22015
- eventSurface: {
22016
- $bind: { from: "content.eventSurface", fallback: "all" }
22017
- },
22018
- filterEventPresets: {
22019
- $bind: { from: "content.filterEventPresets" }
22020
- },
22021
- scheduleScope: {
22022
- $bind: { from: "content.scheduleScope", fallback: "any" }
22023
- },
22024
- filterCategoryIds: {
22025
- $bind: { from: "content.filterCategoryIds" }
22026
- },
22027
- filterStaffMemberId: {
22028
- $bind: { from: "content.filterStaffMemberId" }
22029
- },
22030
- filterVenueId: { $bind: { from: "content.filterVenueId" } },
22031
- // Styling
22032
- buttonVariant: {
22033
- $bind: { from: "content.buttonVariant", fallback: "primary" }
22034
- },
22035
- buttonText: {
22036
- $bind: { from: "content.buttonText", fallback: "View event" }
22037
- },
22038
- emptyMessage: { $bind: { from: "content.emptyMessage" } }
22039
- })
22040
- )
22041
- ],
22042
- {
22043
- gap: "lg"
22044
- }
22045
- ),
22046
- // sectionContainer (rb-container) already provides horizontal padding
22047
- baseClass: "",
22048
- spacing: "comfortable"
22049
- })
22050
- ]
22051
- });
22427
+ layout: eventCalendarLayout,
22428
+ variants: eventCalendarVariants,
22429
+ defaultVariant: "combined",
22430
+ variantOptions: {
22431
+ combined: { label: "Combined" },
22432
+ month: { label: "Month" },
22433
+ week: { label: "Week" },
22434
+ timetable: { label: "Timetable" },
22435
+ list: { label: "List" }
22436
+ }
22437
+ };
22438
+ var eventCalendarManifest = createBlockManifestWithContentShape(
22439
+ eventCalendarConfig,
22440
+ eventCalendarContentShape
22441
+ );
22052
22442
  var eventCalendarBlockDefinition = {
22053
22443
  manifest: eventCalendarManifest,
22054
22444
  normalizeContent: normalizeEventCalendarContent,
@@ -26220,14 +26610,29 @@ function mediaPanelCapable() {
26220
26610
  var allSectionSurfaces = [
26221
26611
  "base",
26222
26612
  "muted-band",
26223
- "accent-band"
26613
+ "accent-band",
26614
+ "brand-depth-band"
26224
26615
  ];
26225
26616
  var heroSectionSurfaces = [
26226
26617
  "base",
26227
26618
  "muted-band",
26228
26619
  "accent-band",
26620
+ "brand-depth-band",
26229
26621
  "hero-image"
26230
26622
  ];
26623
+ var scheduleTileTreatments = [
26624
+ "default",
26625
+ "quiet",
26626
+ "brand-depth"
26627
+ ];
26628
+ function scheduleDetailsCapable() {
26629
+ return declareBlockDesignCapability({
26630
+ sectionSurfaces: "supported",
26631
+ contentFrames: ["plain"],
26632
+ itemSurfaces: "unsupported",
26633
+ tileTreatments: scheduleTileTreatments
26634
+ });
26635
+ }
26231
26636
  function defaultBoundaryBias(visualWeight) {
26232
26637
  return visualWeight === "featured" || visualWeight === "immersive" ? "clear" : "soft";
26233
26638
  }
@@ -26465,7 +26870,7 @@ var systemBlockDefinitionsRaw = [
26465
26870
  flow: conversionFlow,
26466
26871
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "form", weight: "standard" })]
26467
26872
  })),
26468
- withDesignCapability("block.event-details", eventDetailsBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
26873
+ withDesignCapability("block.event-details", eventDetailsBlockDefinition, scheduleDetailsCapable(), defineBlockDesignMetadata({
26469
26874
  flow: offeringsFlow,
26470
26875
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
26471
26876
  })),
@@ -26473,7 +26878,7 @@ var systemBlockDefinitionsRaw = [
26473
26878
  flow: conversionFlow,
26474
26879
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "form", weight: "standard" })]
26475
26880
  })),
26476
- withDesignCapability("block.course-details", courseDetailsBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
26881
+ withDesignCapability("block.course-details", courseDetailsBlockDefinition, scheduleDetailsCapable(), defineBlockDesignMetadata({
26477
26882
  flow: offeringsFlow,
26478
26883
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
26479
26884
  })),
@@ -26488,7 +26893,13 @@ var systemBlockDefinitionsRaw = [
26488
26893
  })),
26489
26894
  withDesignCapability("block.event-calendar", eventCalendarBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
26490
26895
  flow: offeringsFlow,
26491
- layoutProfiles: [layoutProfile({ variantKey: "default", family: "grid", weight: "standard" })]
26896
+ layoutProfiles: [
26897
+ layoutProfile({ variantKey: "combined", family: "grid", weight: "standard" }),
26898
+ layoutProfile({ variantKey: "list", family: "stack", weight: "standard" }),
26899
+ layoutProfile({ variantKey: "month", family: "grid", weight: "standard" }),
26900
+ layoutProfile({ variantKey: "week", family: "stack", weight: "standard" }),
26901
+ layoutProfile({ variantKey: "timetable", family: "stack", weight: "standard" })
26902
+ ]
26492
26903
  })),
26493
26904
  // Friendly wrapper blocks
26494
26905
  withDesignCapability("block.team-members", teamMembersBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
@@ -29293,7 +29704,7 @@ function CoursePricingDisplay({
29293
29704
  ] }),
29294
29705
  option.description ? /* @__PURE__ */ jsx25("p", { className: "rb-caption status-muted", children: option.description }) : null
29295
29706
  ] }, option.id)) }) : /* @__PURE__ */ jsx25("p", { children: /* @__PURE__ */ jsx25("strong", { children: formatCoursePriceDisplay(pricing.display) }) }),
29296
- acceptedItems.length > 0 ? /* @__PURE__ */ jsxs12("p", { className: "rb-caption status-muted rb-mt-1", children: [
29707
+ acceptedItems.length > 0 ? /* @__PURE__ */ jsxs12("p", { className: "rb-caption rb-mt-1", children: [
29297
29708
  "You can also attend with: ",
29298
29709
  acceptedItems.join(", ")
29299
29710
  ] }) : null
@@ -29393,11 +29804,11 @@ function EventDetailsView({
29393
29804
  ) : shouldShowEventCost ? /* @__PURE__ */ jsxs13("div", { className: "rb-mt-6", children: [
29394
29805
  /* @__PURE__ */ jsx26("div", { className: "rb-label rb-mb-2", children: "Cost" }),
29395
29806
  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" }),
29396
- hasAcceptedItems ? /* @__PURE__ */ jsxs13("p", { className: "rb-caption status-muted rb-mt-1", children: [
29807
+ hasAcceptedItems ? /* @__PURE__ */ jsxs13("p", { className: "rb-caption rb-mt-1", children: [
29397
29808
  "You can also attend with: ",
29398
29809
  acceptedItems.join(", ")
29399
29810
  ] }) : null
29400
- ] }) : hasAcceptedItems ? /* @__PURE__ */ jsx26("div", { className: "rb-mt-6", children: /* @__PURE__ */ jsxs13("p", { className: "rb-caption status-muted", children: [
29811
+ ] }) : hasAcceptedItems ? /* @__PURE__ */ jsx26("div", { className: "rb-mt-6", children: /* @__PURE__ */ jsxs13("p", { className: "rb-caption", children: [
29401
29812
  "You can also attend with: ",
29402
29813
  acceptedItems.join(", ")
29403
29814
  ] }) }) : null
@@ -34251,16 +34662,16 @@ function generateSiteStyleTransitionCss(themeId) {
34251
34662
  --site-style-transition-to: rgb(var(--tb-background));
34252
34663
  }
34253
34664
 
34254
- ${selector} [data-style-group^='site-style-transition-wave-edge-'] > [data-slot='section']::after,
34255
- ${selector} [data-style-group^='site-style-transition-angle-edge-'] > [data-slot='section']::after,
34256
- ${selector} [data-style-group^='site-style-transition-soft-fade'] > [data-slot='section']::after {
34665
+ ${selector} [data-style-group^='site-style-transition-wave-edge-']::after,
34666
+ ${selector} [data-style-group^='site-style-transition-angle-edge-']::after,
34667
+ ${selector} [data-style-group^='site-style-transition-soft-fade']::after {
34257
34668
  content: '';
34258
34669
  position: absolute;
34259
34670
  left: 0;
34260
34671
  right: 0;
34261
- bottom: 0;
34262
- z-index: -5;
34263
- height: 4rem;
34672
+ bottom: -2px;
34673
+ z-index: 1;
34674
+ height: calc(4rem + 2px);
34264
34675
  pointer-events: none;
34265
34676
  }
34266
34677
 
@@ -34277,6 +34688,10 @@ ${selector} [data-style-group*='-from-accent-band-'] {
34277
34688
  --site-style-transition-from: rgb(var(--tb-primary));
34278
34689
  }
34279
34690
 
34691
+ ${selector} [data-style-group*='-from-brand-depth-band-'] {
34692
+ --site-style-transition-from: rgb(var(--tb-primary-800));
34693
+ }
34694
+
34280
34695
  ${selector} [data-style-group$='-to-base'],
34281
34696
  ${selector} [data-style-group$='-to-hero-image'] {
34282
34697
  --site-style-transition-to: rgb(var(--tb-background));
@@ -34290,7 +34705,11 @@ ${selector} [data-style-group$='-to-accent-band'] {
34290
34705
  --site-style-transition-to: rgb(var(--tb-primary));
34291
34706
  }
34292
34707
 
34293
- ${selector} [data-style-group^='site-style-transition-soft-fade'] > [data-slot='section']::after {
34708
+ ${selector} [data-style-group$='-to-brand-depth-band'] {
34709
+ --site-style-transition-to: rgb(var(--tb-primary-800));
34710
+ }
34711
+
34712
+ ${selector} [data-style-group^='site-style-transition-soft-fade']::after {
34294
34713
  background: linear-gradient(
34295
34714
  to bottom,
34296
34715
  transparent 0%,
@@ -34298,16 +34717,16 @@ ${selector} [data-style-group^='site-style-transition-soft-fade'] > [data-slot='
34298
34717
  );
34299
34718
  }
34300
34719
 
34301
- ${selector} [data-style-group^='site-style-transition-soft-fade-long-'] > [data-slot='section']::after {
34720
+ ${selector} [data-style-group^='site-style-transition-soft-fade-long-']::after {
34302
34721
  height: 6rem;
34303
34722
  }
34304
34723
 
34305
- ${selector} [data-style-group^='site-style-transition-angle-edge-'] > [data-slot='section']::after {
34724
+ ${selector} [data-style-group^='site-style-transition-angle-edge-']::after {
34306
34725
  background: var(--site-style-transition-to);
34307
34726
  clip-path: polygon(0 42%, 100% 8%, 100% 100%, 0 100%);
34308
34727
  }
34309
34728
 
34310
- ${selector} [data-style-group^='site-style-transition-wave-edge-'] > [data-slot='section']::after {
34729
+ ${selector} [data-style-group^='site-style-transition-wave-edge-']::after {
34311
34730
  background: var(--site-style-transition-to);
34312
34731
  mask-image: url("${waveTransitionMask}");
34313
34732
  mask-repeat: no-repeat;
@@ -35490,7 +35909,7 @@ function buildThemeRuntime(theme, options) {
35490
35909
  theme,
35491
35910
  accordionSystem
35492
35911
  });
35493
- const inputSystem = theme.inputs ?? generateDefaultInputSystem(theme);
35912
+ const inputSystem = resolveThemeInputSystem(theme);
35494
35913
  const inputCss = generateInputCss({
35495
35914
  themeId,
35496
35915
  theme,
@@ -35555,6 +35974,9 @@ function hydrateTheme(theme) {
35555
35974
  palette: expandPalette(theme.palette)
35556
35975
  };
35557
35976
  }
35977
+ function resolveThemeInputSystem(theme) {
35978
+ return theme.inputs ?? generateDefaultInputSystem(theme);
35979
+ }
35558
35980
  function buildThemeCssVars(theme) {
35559
35981
  const { typography, space, shadow: shadow2, motion: motion2, border: border2 } = theme;
35560
35982
  const baseSizes = computeTypeScale(typography.scale, typography.body.size);
@@ -35639,7 +36061,7 @@ function buildThemeCssVars(theme) {
35639
36061
  // Tier 2: Input styling primitives
35640
36062
  // These expose inputStyle/InputSystem values for blocks that can't use .form-* classes
35641
36063
  ...(() => {
35642
- const inputSystem = generateDefaultInputSystem(theme);
36064
+ const inputSystem = resolveThemeInputSystem(theme);
35643
36065
  return {
35644
36066
  ["--rb-input-radius"]: mapInputRadius(inputSystem.base.corners, theme.corners),
35645
36067
  ["--rb-input-focus-width"]: `${inputSystem.focus.ringWidth}px`,
@@ -43996,15 +44418,15 @@ var containerResponsiveThemeCss = `/*
43996
44418
  text-align: left;
43997
44419
  padding: 1rem;
43998
44420
  border-radius: var(--rb-event-tile-radius, calc(var(--rb-block-radius) * 0.75));
43999
- border-style: var(--rb-event-tile-border-style, var(--rb-border-style, solid));
44000
- border-width: var(--rb-event-tile-border-width, var(--rb-border-width, 1px));
44001
- border-color: var(--rb-event-tile-border, rgb(var(--tb-border)));
44002
- background: var(--rb-event-tile-bg, transparent);
44421
+ border-style: var(--rb-tile-border-style, var(--rb-event-tile-border-style, var(--rb-border-style, solid)));
44422
+ border-width: var(--rb-tile-border-width, var(--rb-event-tile-border-width, var(--rb-border-width, 1px)));
44423
+ border-color: var(--rb-tile-border, var(--rb-event-tile-border, rgb(var(--tb-border))));
44424
+ background: var(--rb-tile-bg, var(--rb-event-tile-bg, transparent));
44003
44425
  transition: border-color var(--rb-block-transition) ease,
44004
44426
  background-color var(--rb-block-transition) ease,
44005
44427
  opacity var(--rb-block-transition) ease;
44006
44428
  display: block;
44007
- opacity: var(--rb-event-tile-opacity, 1);
44429
+ opacity: var(--rb-tile-opacity, var(--rb-event-tile-opacity, 1));
44008
44430
  color: inherit;
44009
44431
  text-decoration: none;
44010
44432
  }
@@ -44015,6 +44437,25 @@ var containerResponsiveThemeCss = `/*
44015
44437
  gap: var(--rb-event-tiles-grid-gap, 0.5rem);
44016
44438
  }
44017
44439
 
44440
+ :where(.theme-scope) .rb-tile-treatment-quiet {
44441
+ --rb-tile-bg: color-mix(in oklab, rgb(var(--tb-surface)), rgb(var(--tb-muted)) 48%);
44442
+ --rb-tile-border: color-mix(in oklab, rgb(var(--tb-border)), transparent 35%);
44443
+ --rb-tile-border-hover: color-mix(in oklab, rgb(var(--tb-primary)), transparent 40%);
44444
+ }
44445
+
44446
+ :where(.theme-scope) .rb-tile-treatment-brand-depth {
44447
+ --rb-brand-depth-surface: rgb(var(--tb-primary-800));
44448
+ --rb-brand-depth-tile-surface: rgb(var(--tb-primary-900));
44449
+ --rb-brand-depth-tile-surface-selected: rgb(var(--tb-primary-950));
44450
+ --rb-tile-bg: var(--rb-brand-depth-tile-surface);
44451
+ --rb-tile-bg-selected: var(--rb-brand-depth-tile-surface-selected);
44452
+ --rb-tile-border: transparent;
44453
+ --rb-tile-border-hover: transparent;
44454
+ --rb-tile-border-selected: transparent;
44455
+ --rb-tile-border-width: 0;
44456
+ --rb-event-tile-radius: var(--rb-block-radius);
44457
+ }
44458
+
44018
44459
  @container rb-site (min-width: 768px) {
44019
44460
  @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
44020
44461
  :where(.theme-scope) .rb-tiles-grid {
@@ -44033,13 +44474,13 @@ var containerResponsiveThemeCss = `/*
44033
44474
  }
44034
44475
 
44035
44476
  :where(.theme-scope) :where(.rb-tile--interactive, .er-event-card):hover:not(:disabled) {
44036
- border-color: var(--rb-event-tile-border-hover, rgba(var(--tb-primary), 0.5));
44037
- opacity: var(--rb-event-tile-hover-opacity, var(--rb-event-tile-opacity, 1));
44477
+ border-color: var(--rb-tile-border-hover, var(--rb-event-tile-border-hover, rgba(var(--tb-primary), 0.5)));
44478
+ opacity: var(--rb-tile-hover-opacity, var(--rb-event-tile-hover-opacity, var(--rb-tile-opacity, var(--rb-event-tile-opacity, 1))));
44038
44479
  }
44039
44480
 
44040
44481
  :where(.theme-scope) :where(.rb-tile--selected, .er-event-card--selected) {
44041
- border-color: var(--rb-event-tile-border-selected, rgb(var(--tb-primary)));
44042
- background: var(--rb-event-tile-bg-selected, rgba(var(--tb-primary), 0.1));
44482
+ border-color: var(--rb-tile-border-selected, var(--rb-event-tile-border-selected, rgb(var(--tb-primary))));
44483
+ background: var(--rb-tile-bg-selected, var(--rb-event-tile-bg-selected, rgba(var(--tb-primary), 0.1)));
44043
44484
  }
44044
44485
 
44045
44486
  :where(.theme-scope) :where(.rb-tile--disabled, .er-event-card--disabled) {
@@ -45670,11 +46111,14 @@ function resolveFooterRenderPlan(params) {
45670
46111
  import * as React7 from "react";
45671
46112
  import { Fragment as Fragment7, jsx as jsx53, jsxs as jsxs37 } from "react/jsx-runtime";
45672
46113
 
46114
+ // ../theme-core/src/siteChrome.tsx
46115
+ import { Fragment as Fragment8, jsxs as jsxs38 } from "react/jsx-runtime";
46116
+
45673
46117
  // ../theme-core/src/mock-themes/components/swatch.tsx
45674
- import { jsx as jsx54, jsxs as jsxs38 } from "react/jsx-runtime";
46118
+ import { jsx as jsx54, jsxs as jsxs39 } from "react/jsx-runtime";
45675
46119
 
45676
46120
  // ../theme-core/src/mock-themes/components/PaletteCard.tsx
45677
- import { jsx as jsx55, jsxs as jsxs39 } from "react/jsx-runtime";
46121
+ import { jsx as jsx55, jsxs as jsxs40 } from "react/jsx-runtime";
45678
46122
 
45679
46123
  // src/rendering/blocks-theme-runtime.ts
45680
46124
  var AXES_TONE_OPTIONS = ["minimal", "classic", "bold"];
@@ -46278,7 +46722,7 @@ function buildLogo(logo, fallbackAlt) {
46278
46722
  }
46279
46723
 
46280
46724
  // src/rendering/components/Layout.tsx
46281
- import { Fragment as Fragment8, jsx as jsx58, jsxs as jsxs40 } from "react/jsx-runtime";
46725
+ import { Fragment as Fragment9, jsx as jsx58, jsxs as jsxs41 } from "react/jsx-runtime";
46282
46726
  async function Layout({
46283
46727
  siteData: providedSiteData,
46284
46728
  client,
@@ -46413,14 +46857,14 @@ async function Layout({
46413
46857
  themeConfig: blocksTheme,
46414
46858
  viewModelOverrides
46415
46859
  }) : null;
46416
- footerElement = footerPlan.mode === "default+blocks" ? /* @__PURE__ */ jsxs40(Fragment8, { children: [
46860
+ footerElement = footerPlan.mode === "default+blocks" ? /* @__PURE__ */ jsxs41(Fragment9, { children: [
46417
46861
  footerBlocksElement,
46418
46862
  defaultFooterElement
46419
46863
  ] }) : footerPlan.mode === "blocks" ? footerBlocksElement : footerPlan.mode === "none" ? null : defaultFooterElement;
46420
46864
  } else if (typeof footer === "function") {
46421
46865
  footerElement = footer(footerData);
46422
46866
  }
46423
- const content = /* @__PURE__ */ jsxs40(Fragment8, { children: [
46867
+ const content = /* @__PURE__ */ jsxs41(Fragment9, { children: [
46424
46868
  headerElement,
46425
46869
  children,
46426
46870
  footerElement
@@ -48975,6 +49419,14 @@ var ENDPOINT_DEFINITIONS = {
48975
49419
  auth: "user",
48976
49420
  responseKind: "json"
48977
49421
  },
49422
+ exportAppointmentServicesCsv: {
49423
+ path: "/sites/{siteId}/bookings/services/export.csv",
49424
+ method: "GET",
49425
+ tags: ["site-{siteId}", "bookings", "appointment-services-{siteId}"],
49426
+ errors: [],
49427
+ auth: "user",
49428
+ responseKind: "blob"
49429
+ },
48978
49430
  createAppointmentService: {
48979
49431
  path: "/sites/{siteId}/bookings/services",
48980
49432
  method: "POST",
@@ -49243,6 +49695,14 @@ var ENDPOINT_DEFINITIONS = {
49243
49695
  auth: "user",
49244
49696
  responseKind: "json"
49245
49697
  },
49698
+ exportCoursesCsv: {
49699
+ path: "/sites/{siteId}/bookings/courses/export.csv",
49700
+ method: "GET",
49701
+ tags: ["site-{siteId}", "bookings", "courses-{siteId}"],
49702
+ errors: [],
49703
+ auth: "user",
49704
+ responseKind: "blob"
49705
+ },
49246
49706
  createCourse: {
49247
49707
  path: "/sites/{siteId}/bookings/courses",
49248
49708
  method: "POST",
@@ -49342,6 +49802,14 @@ var ENDPOINT_DEFINITIONS = {
49342
49802
  responseKind: "json",
49343
49803
  errors: []
49344
49804
  },
49805
+ exportCourseWaitlistCsv: {
49806
+ path: "/sites/{siteId}/bookings/courses/{courseId}/waitlist/export.csv",
49807
+ method: "GET",
49808
+ tags: ["site-{siteId}", "bookings", "courses-{courseId}"],
49809
+ auth: "user",
49810
+ responseKind: "blob",
49811
+ errors: []
49812
+ },
49345
49813
  updateCourseEnrollment: {
49346
49814
  path: "/sites/{siteId}/bookings/courses/{courseId}/enrollments/{enrollmentId}",
49347
49815
  method: "PATCH",
@@ -51937,6 +52405,14 @@ var ENDPOINT_DEFINITIONS = {
51937
52405
  auth: "user",
51938
52406
  responseKind: "json"
51939
52407
  },
52408
+ exportEventSeriesCsv: {
52409
+ path: "/sites/{siteId}/bookings/event-series/export.csv",
52410
+ method: "GET",
52411
+ tags: ["site-{siteId}", "bookings", "event-series-{siteId}"],
52412
+ errors: [],
52413
+ auth: "user",
52414
+ responseKind: "blob"
52415
+ },
51940
52416
  createEventSeries: {
51941
52417
  path: "/sites/{siteId}/bookings/event-series",
51942
52418
  method: "POST",
@@ -52005,6 +52481,60 @@ var ENDPOINT_DEFINITIONS = {
52005
52481
  errors: [],
52006
52482
  responseKind: "blob"
52007
52483
  },
52484
+ getParticipantMessageRecipients: {
52485
+ path: "/sites/{siteId}/bookings/participant-messaging/recipients",
52486
+ method: "POST",
52487
+ tags: ["site-{siteId}"],
52488
+ auth: "user",
52489
+ errors: [
52490
+ "validation:invalid_input",
52491
+ "auth:forbidden",
52492
+ "resource:not_found",
52493
+ "server:internal_error"
52494
+ ],
52495
+ responseKind: "json"
52496
+ },
52497
+ sendParticipantMessage: {
52498
+ path: "/sites/{siteId}/bookings/participant-messaging/send",
52499
+ method: "POST",
52500
+ tags: ["site-{siteId}"],
52501
+ auth: "user",
52502
+ errors: [
52503
+ "validation:invalid_input",
52504
+ "auth:forbidden",
52505
+ "resource:not_found",
52506
+ "resource:conflict",
52507
+ "server:internal_error"
52508
+ ],
52509
+ responseKind: "json"
52510
+ },
52511
+ testParticipantMessage: {
52512
+ path: "/sites/{siteId}/bookings/participant-messaging/test",
52513
+ method: "POST",
52514
+ tags: ["site-{siteId}"],
52515
+ auth: "user",
52516
+ errors: [
52517
+ "validation:invalid_input",
52518
+ "auth:forbidden",
52519
+ "resource:not_found",
52520
+ "resource:conflict",
52521
+ "server:internal_error"
52522
+ ],
52523
+ responseKind: "json"
52524
+ },
52525
+ listParticipantMessageHistory: {
52526
+ path: "/sites/{siteId}/bookings/participant-messaging/history",
52527
+ method: "POST",
52528
+ tags: ["site-{siteId}"],
52529
+ auth: "user",
52530
+ errors: [
52531
+ "validation:invalid_input",
52532
+ "auth:forbidden",
52533
+ "resource:not_found",
52534
+ "server:internal_error"
52535
+ ],
52536
+ responseKind: "json"
52537
+ },
52008
52538
  listEventSeriesWaitlist: {
52009
52539
  path: "/sites/{siteId}/bookings/event-series/{seriesId}/waitlist",
52010
52540
  method: "GET",
@@ -52013,6 +52543,14 @@ var ENDPOINT_DEFINITIONS = {
52013
52543
  responseKind: "json",
52014
52544
  errors: []
52015
52545
  },
52546
+ exportEventSeriesWaitlistCsv: {
52547
+ path: "/sites/{siteId}/bookings/event-series/{seriesId}/waitlist/export.csv",
52548
+ method: "GET",
52549
+ tags: ["site-{siteId}", "bookings", "event-series-{seriesId}"],
52550
+ auth: "user",
52551
+ responseKind: "blob",
52552
+ errors: []
52553
+ },
52016
52554
  addEventOccurrenceAttendee: {
52017
52555
  path: "/sites/{siteId}/bookings/event-series/{seriesId}/occurrences/{occurrenceId}/attendees",
52018
52556
  method: "POST",
@@ -52729,6 +53267,14 @@ var ENDPOINT_DEFINITIONS = {
52729
53267
  auth: "user",
52730
53268
  responseKind: "json"
52731
53269
  },
53270
+ exportSiteCustomerPassesCsv: {
53271
+ path: "/sites/{siteId}/bookings/customer-passes/export.csv",
53272
+ method: "GET",
53273
+ tags: ["site-{siteId}", "bookings", "customer-passes-{siteId}"],
53274
+ auth: "user",
53275
+ responseKind: "blob",
53276
+ errors: []
53277
+ },
52732
53278
  listSiteCustomerMemberships: {
52733
53279
  path: "/sites/{siteId}/bookings/customer-memberships",
52734
53280
  method: "GET",
@@ -52792,6 +53338,22 @@ var ENDPOINT_DEFINITIONS = {
52792
53338
  auth: "user",
52793
53339
  responseKind: "blob"
52794
53340
  },
53341
+ exportBookingLedgerCsv: {
53342
+ path: "/sites/{siteId}/bookings/ledger/export.csv",
53343
+ method: "GET",
53344
+ tags: ["site-{siteId}", "bookings", "booking-ledger-{siteId}"],
53345
+ errors: [],
53346
+ auth: "user",
53347
+ responseKind: "blob"
53348
+ },
53349
+ exportBookingQuestionAnswersCsv: {
53350
+ path: "/sites/{siteId}/bookings/intake-answers/export.csv",
53351
+ method: "GET",
53352
+ tags: ["site-{siteId}", "bookings", "intake-answers-{siteId}"],
53353
+ errors: [],
53354
+ auth: "user",
53355
+ responseKind: "blob"
53356
+ },
52795
53357
  // Site logs
52796
53358
  listSiteActivityLogs: {
52797
53359
  path: "/sites/{siteId}/logs/activity",
@@ -54462,6 +55024,20 @@ var applyAppointmentSetupRequestSchema = z65.object({
54462
55024
  bookingNotice: appointmentSetupBookingNoticeSchema
54463
55025
  });
54464
55026
 
55027
+ // ../api/src/bookingRecords.ts
55028
+ var BOOKING_QUESTION_ANSWER_EXPORT_SCOPES = {
55029
+ site: "site",
55030
+ appointments: "appointments",
55031
+ eventSeries: "event_series",
55032
+ course: "course"
55033
+ };
55034
+ var BOOKING_QUESTION_ANSWER_EXPORT_SCOPE_VALUES = [
55035
+ BOOKING_QUESTION_ANSWER_EXPORT_SCOPES.site,
55036
+ BOOKING_QUESTION_ANSWER_EXPORT_SCOPES.appointments,
55037
+ BOOKING_QUESTION_ANSWER_EXPORT_SCOPES.eventSeries,
55038
+ BOOKING_QUESTION_ANSWER_EXPORT_SCOPES.course
55039
+ ];
55040
+
54465
55041
  // ../api/src/common/cancellation.ts
54466
55042
  var STAFF_CANCELLATION_CONTEXT_UI_CATEGORIES = [
54467
55043
  "customer_requested",
@@ -55055,9 +55631,9 @@ async function prefetchBlockData2(page, context, client, options) {
55055
55631
  }
55056
55632
 
55057
55633
  // src/rendering/components/Block.shared.tsx
55058
- import { jsx as jsx59, jsxs as jsxs41 } from "react/jsx-runtime";
55634
+ import { jsx as jsx59, jsxs as jsxs42 } from "react/jsx-runtime";
55059
55635
  function renderUnknownBlock(blockKind) {
55060
- return /* @__PURE__ */ jsx59("div", { className: "p-4 border border-red-300 bg-red-50 rounded", children: /* @__PURE__ */ jsxs41("p", { className: "text-red-800 font-semibold", children: [
55636
+ 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: [
55061
55637
  "Unknown block type: ",
55062
55638
  blockKind
55063
55639
  ] }) });