@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
@@ -304,7 +304,11 @@ function resolveRepeaterGridColumnFieldId(options) {
304
304
 
305
305
  // ../blocks/src/system/manifest/schema.ts
306
306
  var visibilityLevels = ["admin", "designer", "author"];
307
- var siteOptionSources = ["eventCategories", "venues", "staffMembers"];
307
+ var siteOptionSources = [
308
+ "eventCategories",
309
+ "venues",
310
+ "staffMembers"
311
+ ];
308
312
  var mediaDeliverySchema = z2.object({
309
313
  sizes: z2.string().optional(),
310
314
  widthCandidates: z2.array(z2.number().int().positive()).optional(),
@@ -342,7 +346,10 @@ var uiSchema = z2.object({
342
346
  hidden: z2.boolean().optional(),
343
347
  hideLabel: z2.boolean().optional(),
344
348
  hideDescription: z2.boolean().optional(),
345
- showCharCount: z2.union([z2.number().int().positive(), z2.object({ max: z2.number().int().positive() })]).optional(),
349
+ showCharCount: z2.union([
350
+ z2.number().int().positive(),
351
+ z2.object({ max: z2.number().int().positive() })
352
+ ]).optional(),
346
353
  showSlugPreview: z2.boolean().optional(),
347
354
  variant: z2.enum(["full", "inline", "limited", "media", "notes"]).optional(),
348
355
  richTextVariant: z2.enum(["full", "inline", "limited", "media", "notes"]).optional(),
@@ -352,10 +359,7 @@ var uiSchema = z2.object({
352
359
  showMediaPreview: z2.boolean().optional(),
353
360
  showMediaOverlayActions: z2.boolean().optional(),
354
361
  mediaDelivery: mediaDeliverySchema.optional(),
355
- mediaDeliveryByVariant: z2.record(
356
- z2.string(),
357
- mediaDeliverySchema
358
- ).optional(),
362
+ mediaDeliveryByVariant: z2.record(z2.string(), mediaDeliverySchema).optional(),
359
363
  // Optional input hints for validators/widgets
360
364
  inputType: z2.enum(["text", "email", "tel", "number"]).optional(),
361
365
  min: z2.number().optional(),
@@ -463,7 +467,9 @@ var richTextFieldSchema = baseFieldSchema.extend({
463
467
  });
464
468
  var mediaFieldSchema = baseFieldSchema.extend({
465
469
  type: z2.literal("media"),
466
- mediaKinds: z2.array(z2.enum(["image", "video", "audio", "document", "spreadsheet", "archive"])).default(["image"]),
470
+ mediaKinds: z2.array(
471
+ z2.enum(["image", "video", "audio", "document", "spreadsheet", "archive"])
472
+ ).default(["image"]),
467
473
  aspectRatio: z2.string().optional()
468
474
  });
469
475
  var booleanFieldSchema = baseFieldSchema.extend({
@@ -585,7 +591,9 @@ var referenceFieldSchema = baseFieldSchema.extend({
585
591
  var itemTypeSchema = z2.object({
586
592
  label: z2.string().min(1),
587
593
  icon: z2.string().optional(),
588
- fields: z2.lazy(() => getFieldSchemaInternal().array().min(1, "Item type requires at least one field"))
594
+ fields: z2.lazy(
595
+ () => getFieldSchemaInternal().array().min(1, "Item type requires at least one field")
596
+ )
589
597
  });
590
598
  var repeaterFieldSchema = baseFieldSchema.extend({
591
599
  type: z2.literal("repeater"),
@@ -595,7 +603,9 @@ var repeaterFieldSchema = baseFieldSchema.extend({
595
603
  maxItems: z2.number().int().positive().optional(),
596
604
  // Monomorphic mode
597
605
  schema: z2.object({
598
- fields: z2.lazy(() => getFieldSchemaInternal().array().min(1, "Repeater requires at least one field"))
606
+ fields: z2.lazy(
607
+ () => getFieldSchemaInternal().array().min(1, "Repeater requires at least one field")
608
+ )
599
609
  }).optional(),
600
610
  // Polymorphic mode
601
611
  polymorphic: z2.boolean().optional(),
@@ -641,13 +651,19 @@ var repeaterFieldSchema = baseFieldSchema.extend({
641
651
  const itemTypes = Object.values(
642
652
  data.itemTypes
643
653
  );
644
- return itemTypes.every((itemType) => Array.isArray(itemType.fields) && requiredFieldIds.every((requiredId) => itemType.fields?.some((field) => field.id === requiredId)));
654
+ return itemTypes.every(
655
+ (itemType) => Array.isArray(itemType.fields) && requiredFieldIds.every(
656
+ (requiredId) => itemType.fields?.some((field) => field.id === requiredId)
657
+ )
658
+ );
645
659
  }
646
660
  const schemaFields = data.schema?.fields;
647
661
  if (!schemaFields) {
648
662
  return true;
649
663
  }
650
- return requiredFieldIds.every((requiredId) => schemaFields.some((field) => field.id === requiredId));
664
+ return requiredFieldIds.every(
665
+ (requiredId) => schemaFields.some((field) => field.id === requiredId)
666
+ );
651
667
  },
652
668
  {
653
669
  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`,
@@ -675,7 +691,9 @@ var repeaterFieldSchema = baseFieldSchema.extend({
675
691
  if (!schemaFields) {
676
692
  return true;
677
693
  }
678
- const field = schemaFields.find((candidate) => candidate.id === labelField);
694
+ const field = schemaFields.find(
695
+ (candidate) => candidate.id === labelField
696
+ );
679
697
  return field?.type === "text";
680
698
  },
681
699
  {
@@ -686,13 +704,17 @@ var repeaterFieldSchema = baseFieldSchema.extend({
686
704
  var groupFieldSchema = baseFieldSchema.extend({
687
705
  type: z2.literal("group"),
688
706
  schema: z2.object({
689
- fields: z2.lazy(() => getFieldSchemaInternal().array().min(1, "Group requires at least one field"))
707
+ fields: z2.lazy(
708
+ () => getFieldSchemaInternal().array().min(1, "Group requires at least one field")
709
+ )
690
710
  })
691
711
  });
692
712
  var modalFieldSchema = baseFieldSchema.extend({
693
713
  type: z2.literal("modal"),
694
714
  schema: z2.object({
695
- fields: z2.lazy(() => getFieldSchemaInternal().array().min(1, "Modal requires at least one field"))
715
+ fields: z2.lazy(
716
+ () => getFieldSchemaInternal().array().min(1, "Modal requires at least one field")
717
+ )
696
718
  })
697
719
  });
698
720
  var numberFieldSchema = baseFieldSchema.extend({
@@ -799,31 +821,35 @@ function expectParsedSelectField(field) {
799
821
  return field;
800
822
  }
801
823
  function createSiteOptionSelectField(input) {
802
- return expectParsedSelectField(parseFieldDefinition({
803
- ...input,
804
- type: "select",
805
- options: [],
806
- multiple: input.multiple ?? false,
807
- source: { kind: "site", optionSource: input.optionSource },
808
- ui: {
809
- ...input.ui ?? {},
810
- widget: "siteOptionPicker",
811
- siteOptionSource: input.optionSource
812
- }
813
- }));
824
+ return expectParsedSelectField(
825
+ parseFieldDefinition({
826
+ ...input,
827
+ type: "select",
828
+ options: [],
829
+ multiple: input.multiple ?? false,
830
+ source: { kind: "site", optionSource: input.optionSource },
831
+ ui: {
832
+ ...input.ui ?? {},
833
+ widget: "siteOptionPicker",
834
+ siteOptionSource: input.optionSource
835
+ }
836
+ })
837
+ );
814
838
  }
815
839
  function createSdkSelectField(input) {
816
- return expectParsedSelectField(parseFieldDefinition({
817
- ...input,
818
- type: "select",
819
- options: input.options,
820
- multiple: input.multiple ?? false,
821
- source: { kind: "sdk" },
822
- ui: {
823
- ...input.ui ?? {},
824
- widget: "sdkSelect"
825
- }
826
- }));
840
+ return expectParsedSelectField(
841
+ parseFieldDefinition({
842
+ ...input,
843
+ type: "select",
844
+ options: input.options,
845
+ multiple: input.multiple ?? false,
846
+ source: { kind: "sdk" },
847
+ ui: {
848
+ ...input.ui ?? {},
849
+ widget: "sdkSelect"
850
+ }
851
+ })
852
+ );
827
853
  }
828
854
  var slotSchema = z2.object({
829
855
  id: z2.string().min(1),
@@ -834,8 +860,20 @@ var slotSchema = z2.object({
834
860
  help: z2.string().optional(),
835
861
  visibleRoles: z2.array(z2.enum(visibilityLevels)).optional()
836
862
  });
837
- var typographyTokens = ["display", "heading", "subheading", "body", "caption"];
838
- var colorTokens = ["background", "surface", "foreground", "accent", "muted"];
863
+ var typographyTokens = [
864
+ "display",
865
+ "heading",
866
+ "subheading",
867
+ "body",
868
+ "caption"
869
+ ];
870
+ var colorTokens = [
871
+ "background",
872
+ "surface",
873
+ "foreground",
874
+ "accent",
875
+ "muted"
876
+ ];
839
877
  var spacingTokens = ["none", "xs", "sm", "md", "lg", "xl"];
840
878
  var radiusTokens = ["none", "sm", "md", "lg", "full"];
841
879
  var styleTokenSchema = z2.object({
@@ -855,7 +893,14 @@ var behaviourSchema = z2.object({
855
893
  // Block manages its own wrapper (for sticky/fixed positioning)
856
894
  managesOwnWrapper: z2.boolean().optional()
857
895
  });
858
- var blockCategoryEnum = z2.enum(["marketing", "content", "blog", "media", "layout", "interactive"]);
896
+ var blockCategoryEnum = z2.enum([
897
+ "marketing",
898
+ "content",
899
+ "blog",
900
+ "media",
901
+ "layout",
902
+ "interactive"
903
+ ]);
859
904
  var manifestSchema = z2.object({
860
905
  name: z2.string().min(1),
861
906
  version: z2.string().min(1),
@@ -904,6 +949,24 @@ function registerManifest(manifest) {
904
949
  return manifest;
905
950
  }
906
951
 
952
+ // ../theme-core/src/site-styles/appearancePresetResolution.ts
953
+ function assertValidOptionGroups(preset) {
954
+ preset.optionGroups?.forEach((group) => {
955
+ const selectedOption = group.options.find(
956
+ (option) => option.id === group.selectedOptionId
957
+ );
958
+ if (!selectedOption) {
959
+ throw new Error(
960
+ `Appearance preset "${preset.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
961
+ );
962
+ }
963
+ });
964
+ }
965
+ function defineBlockAppearancePreset(preset) {
966
+ assertValidOptionGroups(preset);
967
+ return preset;
968
+ }
969
+
907
970
  // ../theme-core/src/site-styles/types.ts
908
971
  function asDesignBlockId(value) {
909
972
  return brandNonEmptyString(value, "DesignBlockId");
@@ -985,6 +1048,11 @@ function flushPanelFrame(options) {
985
1048
  function defineFrameCapability(capability) {
986
1049
  return capability;
987
1050
  }
1051
+ var tileTreatmentValues = [
1052
+ "default",
1053
+ "quiet",
1054
+ "brand-depth"
1055
+ ];
988
1056
  var eyebrowTreatmentValues = [
989
1057
  "plain",
990
1058
  "pill",
@@ -1000,31 +1068,13 @@ function defineBlockDesignCapability(capability) {
1000
1068
  imageSurfaceTreatments: capability.imageSurfaceTreatments ?? ["none"],
1001
1069
  imageSurfaceMotions: capability.imageSurfaceMotions ?? ["static"],
1002
1070
  testimonialCardTreatments: capability.testimonialCardTreatments ?? ["default"],
1071
+ tileTreatments: capability.tileTreatments ?? ["default"],
1003
1072
  eyebrowTreatments: capability.eyebrowTreatments ?? ["plain"]
1004
1073
  };
1005
1074
  }
1006
1075
 
1007
- // ../theme-core/src/site-styles/appearancePresets.ts
1008
- function assertValidOptionGroups(preset) {
1009
- preset.optionGroups?.forEach((group) => {
1010
- const selectedOption = group.options.find(
1011
- (option) => option.id === group.selectedOptionId
1012
- );
1013
- if (!selectedOption) {
1014
- throw new Error(
1015
- `Appearance preset "${preset.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`
1016
- );
1017
- }
1018
- });
1019
- }
1020
- function defineBlockAppearancePreset(preset) {
1021
- assertValidOptionGroups(preset);
1022
- return preset;
1023
- }
1024
- function defineSiteChromeAppearancePreset(preset) {
1025
- return preset;
1026
- }
1027
- var appearancePresets = [
1076
+ // ../theme-core/src/site-styles/blockAppearancePresets.ts
1077
+ var blockAppearancePresets = [
1028
1078
  defineBlockAppearancePreset({
1029
1079
  kind: "block-design",
1030
1080
  id: "hero-immersive-image",
@@ -1150,6 +1200,24 @@ var appearancePresets = [
1150
1200
  eyebrowTreatment: "accent-pill-bounce"
1151
1201
  }
1152
1202
  }),
1203
+ defineBlockAppearancePreset({
1204
+ kind: "block-design",
1205
+ id: "hero-brand-depth-expressive",
1206
+ target: "hero",
1207
+ label: "Expressive brand-depth hero",
1208
+ blockKinds: ["block.hero"],
1209
+ constraints: {
1210
+ layoutFamilies: ["centered", "compact"]
1211
+ },
1212
+ design: {
1213
+ sectionSurface: "brand-depth-band",
1214
+ contentFrame: plainFrame,
1215
+ itemSurface: "none",
1216
+ transitionAfter: "soft-fade-short",
1217
+ emphasis: "high",
1218
+ eyebrowTreatment: "accent-pill-bounce"
1219
+ }
1220
+ }),
1153
1221
  defineBlockAppearancePreset({
1154
1222
  kind: "block-design",
1155
1223
  id: "hero-contained-intro",
@@ -1178,6 +1246,20 @@ var appearancePresets = [
1178
1246
  emphasis: "high"
1179
1247
  }
1180
1248
  }),
1249
+ defineBlockAppearancePreset({
1250
+ kind: "block-design",
1251
+ id: "body-text-brand-depth-intro",
1252
+ target: "body-text",
1253
+ label: "Brand-depth intro copy",
1254
+ blockKinds: ["block.body-text"],
1255
+ design: {
1256
+ sectionSurface: "brand-depth-band",
1257
+ contentFrame: plainFrame,
1258
+ itemSurface: "none",
1259
+ transitionAfter: "soft-fade-short",
1260
+ emphasis: "high"
1261
+ }
1262
+ }),
1181
1263
  defineBlockAppearancePreset({
1182
1264
  kind: "block-design",
1183
1265
  id: "offerings-calm-list",
@@ -1220,6 +1302,21 @@ var appearancePresets = [
1220
1302
  emphasis: "medium"
1221
1303
  }
1222
1304
  }),
1305
+ defineBlockAppearancePreset({
1306
+ kind: "block-design",
1307
+ id: "schedule-details-brand-depth",
1308
+ target: "events",
1309
+ label: "Brand-depth schedule details",
1310
+ blockKinds: ["block.event-details", "block.course-details"],
1311
+ design: {
1312
+ sectionSurface: "brand-depth-band",
1313
+ contentFrame: plainFrame,
1314
+ itemSurface: "none",
1315
+ transitionAfter: "none",
1316
+ emphasis: "medium",
1317
+ tileTreatment: "brand-depth"
1318
+ }
1319
+ }),
1223
1320
  defineBlockAppearancePreset({
1224
1321
  kind: "block-design",
1225
1322
  id: "media-text-flush-feature",
@@ -1305,6 +1402,20 @@ var appearancePresets = [
1305
1402
  testimonialCardTreatment: "accent-quote"
1306
1403
  }
1307
1404
  }),
1405
+ defineBlockAppearancePreset({
1406
+ kind: "block-design",
1407
+ id: "faq-base-accordion",
1408
+ target: "faq",
1409
+ label: "Base accordion FAQ",
1410
+ blockKinds: ["block.faq"],
1411
+ design: {
1412
+ sectionSurface: "base",
1413
+ contentFrame: plainFrame,
1414
+ itemSurface: "default",
1415
+ transitionAfter: "none",
1416
+ emphasis: "medium"
1417
+ }
1418
+ }),
1308
1419
  defineBlockAppearancePreset({
1309
1420
  kind: "block-design",
1310
1421
  id: "faq-contained-help",
@@ -1347,6 +1458,20 @@ var appearancePresets = [
1347
1458
  emphasis: "high"
1348
1459
  }
1349
1460
  }),
1461
+ defineBlockAppearancePreset({
1462
+ kind: "block-design",
1463
+ id: "contact-form-brand-depth-card",
1464
+ target: "contact-form",
1465
+ label: "Brand-depth form card",
1466
+ blockKinds: ["block.form"],
1467
+ design: {
1468
+ sectionSurface: "brand-depth-band",
1469
+ contentFrame: panelFrame("raised"),
1470
+ itemSurface: "none",
1471
+ transitionAfter: "none",
1472
+ emphasis: "high"
1473
+ }
1474
+ }),
1350
1475
  defineBlockAppearancePreset({
1351
1476
  kind: "block-design",
1352
1477
  id: "cta-accent-band",
@@ -1360,7 +1485,14 @@ var appearancePresets = [
1360
1485
  transitionAfter: "none",
1361
1486
  emphasis: "high"
1362
1487
  }
1363
- }),
1488
+ })
1489
+ ];
1490
+
1491
+ // ../theme-core/src/site-styles/siteChromeAppearancePresets.ts
1492
+ function defineSiteChromeAppearancePreset(preset) {
1493
+ return preset;
1494
+ }
1495
+ var siteChromeAppearancePresets = [
1364
1496
  defineSiteChromeAppearancePreset({
1365
1497
  kind: "site-chrome",
1366
1498
  id: "header-clean-base",
@@ -1428,6 +1560,12 @@ var appearancePresets = [
1428
1560
  })
1429
1561
  ];
1430
1562
 
1563
+ // ../theme-core/src/site-styles/appearancePresetCatalog.ts
1564
+ var appearancePresets = [
1565
+ ...blockAppearancePresets,
1566
+ ...siteChromeAppearancePresets
1567
+ ];
1568
+
1431
1569
  // ../theme-core/src/site-styles/blockFlow.ts
1432
1570
  function defineBlockDesignMetadata(input) {
1433
1571
  const layoutProfiles = (input.layoutProfiles ?? []).map((profile) => ({
@@ -2902,6 +3040,7 @@ var sectionStylesOverrideSchema = z17.object({
2902
3040
  background: boxBackgroundSchema.nullable().optional(),
2903
3041
  spacing: semanticSpacingSchema.nullable().optional(),
2904
3042
  minHeight: z17.enum(["none", "banner", "hero", "immersive"]).nullable().optional(),
3043
+ tileTreatment: z17.enum(tileTreatmentValues).nullable().optional(),
2905
3044
  eyebrowTreatment: z17.enum(eyebrowTreatmentValues).nullable().optional()
2906
3045
  });
2907
3046
  var containerStylesOverrideSchema = z17.object({
@@ -3695,7 +3834,7 @@ var userContentFrames = [
3695
3834
  ];
3696
3835
  var generatedDesignOptionCatalog = {
3697
3836
  source: "generated",
3698
- sectionSurfaces: ["base", "muted-band", "accent-band", "hero-image"],
3837
+ sectionSurfaces: ["base", "muted-band", "accent-band", "brand-depth-band", "hero-image"],
3699
3838
  contentFrames: generatedContentFrames,
3700
3839
  itemSurfaces: ["none", "default", "flat", "outlined", "raised"],
3701
3840
  transitions: ["none", "soft-fade-short", "soft-fade-long"],
@@ -3765,6 +3904,43 @@ var expressiveBudget = {
3765
3904
  mediaDensity: "high",
3766
3905
  decorativeRepetition: "medium"
3767
3906
  };
3907
+ var expressiveUnderlineInputs = {
3908
+ base: {
3909
+ background: { type: "transparent" },
3910
+ textColorToken: "text",
3911
+ border: {
3912
+ widthClass: "border-2",
3913
+ colorToken: "border",
3914
+ style: "underline"
3915
+ },
3916
+ corners: "square",
3917
+ shadow: null,
3918
+ spacing: "compact",
3919
+ fontSize: "base"
3920
+ },
3921
+ label: {
3922
+ textColorToken: "primary",
3923
+ fontWeight: "black",
3924
+ fontSize: "xs",
3925
+ textTransform: "uppercase",
3926
+ letterSpacing: "widest",
3927
+ opacity: 1
3928
+ },
3929
+ focus: {
3930
+ ringColorToken: "secondary",
3931
+ ringWidth: "0",
3932
+ borderColorToken: "secondary"
3933
+ },
3934
+ error: {
3935
+ borderColorToken: "destructive",
3936
+ textColorToken: "destructive"
3937
+ },
3938
+ disabled: {
3939
+ backgroundColorToken: "surface",
3940
+ textColorToken: "text",
3941
+ opacity: 0.6
3942
+ }
3943
+ };
3768
3944
  function uniqueContentFrameKinds() {
3769
3945
  const kinds = [...new Set(
3770
3946
  generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
@@ -4115,15 +4291,17 @@ var curatedSiteStyles = [
4115
4291
  paragraphSize: "editorial",
4116
4292
  headingSize: "editorial"
4117
4293
  }
4118
- }
4294
+ },
4295
+ inputs: expressiveUnderlineInputs
4119
4296
  },
4120
4297
  recommendedAppearancePresetIds: [
4121
4298
  "site-header-brand-solid-inverted-cta",
4122
4299
  "site-footer-brand-two-band",
4123
4300
  "hero-brand-scrim-fixed-frame",
4124
4301
  "body-text-editorial-intro",
4302
+ "schedule-details-brand-depth",
4125
4303
  "testimonials-accent-quote-proof",
4126
- "contact-form-dark-card"
4304
+ "contact-form-brand-depth-card"
4127
4305
  ],
4128
4306
  buttonPersonalityChoices: [
4129
4307
  buttonChoice("showtime-pill"),
@@ -4257,6 +4435,7 @@ var imageSurfaceTreatmentSchema = z19.discriminatedUnion("kind", [
4257
4435
  }).strict()
4258
4436
  ]);
4259
4437
  var testimonialCardTreatmentSchema = z19.enum(["default", "accent-quote"]);
4438
+ var tileTreatmentSchema = z19.enum(tileTreatmentValues);
4260
4439
  var eyebrowTreatmentSchema = z19.enum(eyebrowTreatmentValues);
4261
4440
  function uniqueNonEmpty(values) {
4262
4441
  const uniqueValues = [...new Set(values)];
@@ -4301,6 +4480,7 @@ var blockDesignPlanSchema = z19.object({
4301
4480
  imageSurfaceTreatment: imageSurfaceTreatmentSchema.optional(),
4302
4481
  imageSurfaceMotion: imageSurfaceMotionSchema.optional(),
4303
4482
  testimonialCardTreatment: testimonialCardTreatmentSchema.optional(),
4483
+ tileTreatment: tileTreatmentSchema.optional(),
4304
4484
  eyebrowTreatment: eyebrowTreatmentSchema.optional()
4305
4485
  }).strict();
4306
4486
  var styleAuthoritySchema = z19.discriminatedUnion("kind", [
@@ -4364,6 +4544,14 @@ var defaultDesignRuntimeRules = defineDesignRuntimeRules({
4364
4544
  headingColor: "primaryForeground"
4365
4545
  }
4366
4546
  },
4547
+ "brand-depth-band": {
4548
+ background: {
4549
+ type: "color",
4550
+ color: "primary-800",
4551
+ textColor: "primaryForeground",
4552
+ headingColor: "primaryForeground"
4553
+ }
4554
+ },
4367
4555
  "hero-image": {
4368
4556
  background: {
4369
4557
  type: "image",
@@ -6180,6 +6368,7 @@ var blockColorTokenNameSet = new Set(
6180
6368
  );
6181
6369
 
6182
6370
  // ../blocks/src/system/transforms/registry/boxStyles.ts
6371
+ var tileTreatmentSet = new Set(tileTreatmentValues);
6183
6372
  var GAP_VALUE_MAP = {
6184
6373
  none: "0",
6185
6374
  compact: "calc(1rem * var(--space-mult, 1))",
@@ -8879,6 +9068,9 @@ function createBlockManifest(config) {
8879
9068
  };
8880
9069
  return augmentManifest(manifest);
8881
9070
  }
9071
+ function createBlockManifestWithContentShape(config, _contentShape) {
9072
+ return createBlockManifest(config);
9073
+ }
8882
9074
  function normalizeBlockLayout(layout) {
8883
9075
  return Array.isArray(layout) ? [...layout] : layout;
8884
9076
  }
@@ -9511,7 +9703,7 @@ var ctaComposition = composeFragments([
9511
9703
  { fragment: ctaCopyFragment },
9512
9704
  { fragment: ctaRowFragment }
9513
9705
  ]);
9514
- var ctaFullManifest = createBlockManifest({
9706
+ var ctaFullConfig = {
9515
9707
  id: "block.cta-full",
9516
9708
  title: "Full-width CTA",
9517
9709
  category: "marketing",
@@ -9529,7 +9721,8 @@ var ctaFullManifest = createBlockManifest({
9529
9721
  description: "Centered call to action with optional background image.",
9530
9722
  tags: ["cta", "call-to-action", "button", "conversion", "action", "sign-up", "get-started"],
9531
9723
  icon: "Target"
9532
- });
9724
+ };
9725
+ var ctaFullManifest = createBlockManifest(ctaFullConfig);
9533
9726
  var ctaFullBlockDefinition = {
9534
9727
  manifest: ctaFullManifest
9535
9728
  };
@@ -11365,9 +11558,9 @@ var mediaTextManifest = createBlockManifest({
11365
11558
  {
11366
11559
  id: "images",
11367
11560
  type: "repeater",
11368
- label: "Images",
11561
+ label: "Media",
11369
11562
  required: false,
11370
- itemLabel: "Image",
11563
+ itemLabel: "Media",
11371
11564
  minItems: 0,
11372
11565
  maxItems: 6,
11373
11566
  allowConversion: true,
@@ -11381,9 +11574,9 @@ var mediaTextManifest = createBlockManifest({
11381
11574
  {
11382
11575
  id: "image",
11383
11576
  type: "media",
11384
- label: "Image",
11577
+ label: "Media",
11385
11578
  required: true,
11386
- mediaKinds: ["image"]
11579
+ mediaKinds: ["image", "video"]
11387
11580
  }
11388
11581
  ]
11389
11582
  }
@@ -11461,8 +11654,8 @@ var mediaTextManifest = createBlockManifest({
11461
11654
  {
11462
11655
  id: "aspectRatio",
11463
11656
  type: "select",
11464
- label: "Image aspect ratio",
11465
- description: "Crop image to a consistent aspect ratio.",
11657
+ label: "Media aspect ratio",
11658
+ description: "Crop media to a consistent aspect ratio.",
11466
11659
  required: false,
11467
11660
  defaultValue: "auto",
11468
11661
  multiple: false,
@@ -11649,8 +11842,8 @@ var mediaTextManifest = createBlockManifest({
11649
11842
  }
11650
11843
  };
11651
11844
  })(),
11652
- description: "Two columns: image/carousel + rich text (with optional section title).",
11653
- tags: ["media", "image", "carousel", "text", "two-column", "layout"],
11845
+ description: "Two columns: media/carousel + rich text (with optional section title).",
11846
+ tags: ["media", "image", "video", "carousel", "text", "two-column", "layout"],
11654
11847
  icon: "Columns"
11655
11848
  });
11656
11849
  var mediaTextBlockDefinition = {
@@ -11801,6 +11994,19 @@ var transformSchema2 = z29.object({
11801
11994
  hotspot: hotspotSchema2.optional(),
11802
11995
  rotation: rotationSchema2.optional()
11803
11996
  });
11997
+ var mediaPosterSchema = z29.discriminatedUnion("tag", [
11998
+ z29.object({
11999
+ tag: z29.literal("storage"),
12000
+ assetId: z29.string().optional(),
12001
+ storageBucket: z29.string().min(1),
12002
+ storagePath: z29.string().min(1)
12003
+ }),
12004
+ z29.object({
12005
+ tag: z29.literal("external-src"),
12006
+ assetId: z29.string().optional(),
12007
+ src: z29.string().url()
12008
+ })
12009
+ ]);
11804
12010
  var mediaBaseSchema = z29.object({
11805
12011
  purpose: z29.string().optional(),
11806
12012
  placeholder: z29.boolean().default(true).optional(),
@@ -11814,6 +12020,7 @@ var mediaBaseSchema = z29.object({
11814
12020
  height: z29.number().optional(),
11815
12021
  storageBucket: z29.string().optional(),
11816
12022
  storagePath: z29.string().optional(),
12023
+ poster: mediaPosterSchema.optional(),
11817
12024
  transform: transformSchema2.optional()
11818
12025
  });
11819
12026
  var imageMediaSchema = mediaBaseSchema.extend({ type: z29.literal("image") });
@@ -12297,10 +12504,28 @@ import { z as z35 } from "zod";
12297
12504
 
12298
12505
  // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
12299
12506
  import { z as z34 } from "zod";
12507
+
12508
+ // ../blocks/src/system/constants/events.ts
12509
+ var eventCalendarDisplayModeValues = ["combined", "month", "week", "list", "timetable"];
12510
+ var eventCalendarListLayoutValues = ["stack", "grid", "compact"];
12511
+ var eventCalendarListLayoutOptions = [
12512
+ { id: "stack", label: "Stack" },
12513
+ { id: "grid", label: "Grid" },
12514
+ { id: "compact", label: "Compact" }
12515
+ ];
12516
+ function isEventCalendarDisplayMode(value) {
12517
+ return typeof value === "string" && eventCalendarDisplayModeValues.includes(value);
12518
+ }
12519
+ function isEventCalendarListLayout(value) {
12520
+ return typeof value === "string" && eventCalendarListLayoutValues.includes(value);
12521
+ }
12522
+
12523
+ // ../blocks/src/system/runtime/nodes/shared/contract-schemas.ts
12300
12524
  var previewStageSchema = z34.enum(["preview", "published"]);
12301
12525
  var registrationButtonVariantSchema = z34.enum(["primary", "secondary", "outline"]);
12302
12526
  var eventButtonVariantSchema = z34.enum(["primary", "secondary", "outline", "link"]);
12303
- var eventLayoutSchema = z34.enum(["grid", "stack", "compact"]);
12527
+ var eventLayoutSchema = z34.enum(eventCalendarListLayoutValues);
12528
+ var eventCalendarDisplayModeSchema = z34.enum(eventCalendarDisplayModeValues);
12304
12529
  var columnOptionSchema = z34.enum(["2", "3", "4"]);
12305
12530
  var weekStartSchema = z34.enum(["sunday", "monday"]);
12306
12531
  var filterAutoShowSchema = z34.enum(["auto", "always", "never"]);
@@ -13606,219 +13831,251 @@ var eventListingInteractiveIslandPropsCodec = createInteractiveIslandCodec({
13606
13831
  });
13607
13832
 
13608
13833
  // ../blocks/src/system/blocks/events/event-listing.ts
13609
- var eventListingManifest = createBlockManifest({
13610
- id: "block.event-listing",
13611
- version: "1.1.0",
13612
- title: "Event Listing",
13613
- titleSource: "heading",
13614
- description: "Paginated list of all upcoming events",
13615
- // Preserve legacy section styles field configuration (renderInHeader: false).
13616
- skipSectionStyles: true,
13617
- additionalFields: [
13618
- ...sectionHeaderFields("All Events"),
13619
- ...(() => {
13620
- const columns = columnsField(["2", "3", "4"]);
13621
- return [
13622
- {
13623
- ...layoutField,
13624
- ui: { ...layoutField.ui ?? {}, intent: "display" }
13625
- },
13626
- {
13627
- ...columns,
13628
- ui: { ...columns.ui ?? {}, intent: "display" }
13629
- }
13630
- ];
13631
- })(),
13632
- {
13633
- id: "eventsPerPage",
13634
- type: "select",
13635
- label: "Events per page",
13636
- description: "Number of events to load at a time",
13637
- required: false,
13638
- multiple: false,
13639
- defaultValue: "12",
13640
- options: [
13641
- { value: "3", label: "3 events" },
13642
- { value: "6", label: "6 events" },
13643
- { value: "12", label: "12 events" },
13644
- { value: "24", label: "24 events" }
13645
- ],
13646
- ui: { intent: "display" }
13647
- },
13648
- {
13649
- id: "paginationMode",
13650
- type: "select",
13651
- label: "More events",
13652
- description: "How to access events beyond the initial list",
13653
- required: false,
13654
- multiple: false,
13655
- defaultValue: "loadMore",
13656
- options: [
13657
- { value: "loadMore", label: "Load more button" },
13658
- { value: "seeAllLink", label: "Link to another page" }
13659
- ],
13660
- ui: { intent: "display" }
13661
- },
13662
- {
13663
- id: "seeAllUrl",
13664
- type: "link",
13665
- label: "See all destination",
13666
- required: false,
13667
- ui: {
13668
- intent: "display",
13669
- visibleWhen: {
13670
- field: "paginationMode",
13671
- equals: "seeAllLink"
13672
- }
13673
- }
13674
- },
13675
- {
13676
- id: "loadMoreText",
13677
- type: "text",
13678
- label: "Button text",
13679
- description: "Text for the pagination button or link",
13680
- required: false,
13681
- multiline: false,
13682
- defaultValue: "Load more events",
13683
- maxLength: 40
13684
- },
13685
- ...cardStylingFields.map((field) => ({
13686
- ...field,
13687
- ui: { ...field.ui ?? {}, intent: "style" }
13688
- })),
13689
- ...eventDisplayFields.map((field) => ({
13690
- ...field,
13691
- ui: { ...field.ui ?? {}, intent: "display" }
13692
- })),
13693
- {
13694
- id: "kind",
13695
- type: "select",
13696
- label: "Show",
13697
- description: "Choose whether this list shows courses, events, or both",
13698
- required: false,
13699
- multiple: false,
13700
- defaultValue: "all",
13701
- options: [
13702
- { value: "all", label: "Courses and events" },
13703
- { value: "courses", label: "Courses only" },
13704
- { value: "events", label: "Events only" }
13705
- ],
13706
- ui: { intent: "behavior" }
13707
- },
13708
- {
13709
- id: "eventSurface",
13710
- type: "select",
13711
- label: "Event surface",
13712
- description: "Choose a semantic event scope",
13713
- required: false,
13714
- multiple: false,
13715
- defaultValue: "all",
13716
- options: [
13717
- { value: "all", label: "All events" },
13718
- { value: "regularClassSchedule", label: "Regular class schedule" },
13719
- { value: "specialDatedEvents", label: "Workshops and special events" },
13720
- { value: "custom", label: "Custom" }
13721
- ],
13722
- ui: { intent: "behavior" }
13723
- },
13724
- {
13725
- id: "filterEventPresets",
13726
- type: "select",
13727
- label: "Pre-filter by event type",
13728
- description: "Restrict this block to specific event types",
13729
- required: false,
13730
- multiple: true,
13731
- defaultValue: [],
13732
- options: [
13733
- { value: "class", label: "Classes" },
13734
- { value: "workshop", label: "Workshops" },
13735
- { value: "retreat", label: "Retreats" },
13736
- { value: "performance", label: "Performances" }
13737
- ],
13738
- ui: {
13739
- intent: "behavior",
13740
- visibleWhen: { field: "eventSurface", equals: "custom" }
13834
+ var eventListingAdditionalFields = [
13835
+ ...sectionHeaderFields("All Events"),
13836
+ ...(() => {
13837
+ const columns = columnsField(["2", "3", "4"]);
13838
+ return [
13839
+ {
13840
+ ...layoutField,
13841
+ ui: { ...layoutField.ui ?? {}, intent: "display" }
13842
+ },
13843
+ {
13844
+ ...columns,
13845
+ ui: { ...columns.ui ?? {}, intent: "display" }
13741
13846
  }
13742
- },
13743
- {
13744
- id: "scheduleScope",
13745
- type: "select",
13746
- label: "Schedule cadence",
13747
- description: "Restrict this block by recurrence",
13748
- required: false,
13749
- multiple: false,
13750
- defaultValue: "any",
13751
- options: [
13752
- { value: "any", label: "Any cadence" },
13753
- { value: "recurring", label: "Recurring only" },
13754
- { value: "oneOff", label: "One-off only" }
13755
- ],
13756
- ui: {
13757
- intent: "behavior",
13758
- visibleWhen: { field: "eventSurface", equals: "custom" }
13847
+ ];
13848
+ })(),
13849
+ {
13850
+ id: "eventsPerPage",
13851
+ type: "select",
13852
+ label: "Events per page",
13853
+ description: "Number of events to load at a time",
13854
+ required: false,
13855
+ multiple: false,
13856
+ defaultValue: "12",
13857
+ options: [
13858
+ { value: "3", label: "3 events" },
13859
+ { value: "6", label: "6 events" },
13860
+ { value: "12", label: "12 events" },
13861
+ { value: "24", label: "24 events" }
13862
+ ],
13863
+ ui: { intent: "display" }
13864
+ },
13865
+ {
13866
+ id: "paginationMode",
13867
+ type: "select",
13868
+ label: "More events",
13869
+ description: "How to access events beyond the initial list",
13870
+ required: false,
13871
+ multiple: false,
13872
+ defaultValue: "loadMore",
13873
+ options: [
13874
+ { value: "loadMore", label: "Load more button" },
13875
+ { value: "seeAllLink", label: "Link to another page" }
13876
+ ],
13877
+ ui: { intent: "display" }
13878
+ },
13879
+ {
13880
+ id: "seeAllUrl",
13881
+ type: "link",
13882
+ label: "See all destination",
13883
+ required: false,
13884
+ ui: {
13885
+ intent: "display",
13886
+ visibleWhen: {
13887
+ field: "paginationMode",
13888
+ equals: "seeAllLink"
13759
13889
  }
13760
- },
13761
- {
13762
- ...emptyStateField,
13763
- ui: { ...emptyStateField.ui ?? {}, intent: "display" }
13764
- },
13765
- sectionStylesField({
13766
- id: "_sectionStyles",
13767
- label: "Section styles",
13768
- renderInHeader: false
13769
- })
13770
- ],
13890
+ }
13891
+ },
13892
+ {
13893
+ id: "loadMoreText",
13894
+ type: "text",
13895
+ label: "Button text",
13896
+ description: "Text for the pagination button or link",
13897
+ required: false,
13898
+ multiline: false,
13899
+ defaultValue: "Load more events",
13900
+ maxLength: 40
13901
+ },
13902
+ ...cardStylingFields.map((field) => ({
13903
+ ...field,
13904
+ ui: { ...field.ui ?? {}, intent: "style" }
13905
+ })),
13906
+ ...eventDisplayFields.map((field) => ({
13907
+ ...field,
13908
+ ui: { ...field.ui ?? {}, intent: "display" }
13909
+ })),
13910
+ {
13911
+ id: "kind",
13912
+ type: "select",
13913
+ label: "Show",
13914
+ description: "Choose whether this list shows courses, events, or both",
13915
+ required: false,
13916
+ multiple: false,
13917
+ defaultValue: "all",
13918
+ options: [
13919
+ { value: "all", label: "Courses and events" },
13920
+ { value: "courses", label: "Courses only" },
13921
+ { value: "events", label: "Events only" }
13922
+ ],
13923
+ ui: { intent: "behavior" }
13924
+ },
13925
+ {
13926
+ id: "eventSurface",
13927
+ type: "select",
13928
+ label: "Event surface",
13929
+ description: "Choose a semantic event scope",
13930
+ required: false,
13931
+ multiple: false,
13932
+ defaultValue: "all",
13933
+ options: [
13934
+ { value: "all", label: "All events" },
13935
+ { value: "regularClassSchedule", label: "Regular class schedule" },
13936
+ { value: "specialDatedEvents", label: "Workshops and special events" },
13937
+ { value: "custom", label: "Custom" }
13938
+ ],
13939
+ ui: { intent: "behavior" }
13940
+ },
13941
+ {
13942
+ id: "filterEventPresets",
13943
+ type: "select",
13944
+ label: "Pre-filter by event type",
13945
+ description: "Restrict this block to specific event types",
13946
+ required: false,
13947
+ multiple: true,
13948
+ defaultValue: [],
13949
+ options: [
13950
+ { value: "class", label: "Classes" },
13951
+ { value: "workshop", label: "Workshops" },
13952
+ { value: "retreat", label: "Retreats" },
13953
+ { value: "performance", label: "Performances" }
13954
+ ],
13955
+ ui: {
13956
+ intent: "behavior",
13957
+ visibleWhen: { field: "eventSurface", equals: "custom" }
13958
+ }
13959
+ },
13960
+ {
13961
+ id: "scheduleScope",
13962
+ type: "select",
13963
+ label: "Schedule cadence",
13964
+ description: "Restrict this block by recurrence",
13965
+ required: false,
13966
+ multiple: false,
13967
+ defaultValue: "any",
13968
+ options: [
13969
+ { value: "any", label: "Any cadence" },
13970
+ { value: "recurring", label: "Recurring only" },
13971
+ { value: "oneOff", label: "One-off only" }
13972
+ ],
13973
+ ui: {
13974
+ intent: "behavior",
13975
+ visibleWhen: { field: "eventSurface", equals: "custom" }
13976
+ }
13977
+ },
13978
+ {
13979
+ ...emptyStateField,
13980
+ ui: { ...emptyStateField.ui ?? {}, intent: "display" }
13981
+ },
13982
+ sectionStylesField({
13983
+ id: "_sectionStyles",
13984
+ label: "Section styles",
13985
+ renderInHeader: false
13986
+ })
13987
+ ];
13988
+ var eventListingLayout = [
13989
+ styledSection({
13990
+ children: sectionContainer([
13991
+ // Optional heading
13992
+ text(
13993
+ { as: "h2" },
13994
+ bind("content.heading"),
13995
+ when("content.heading")
13996
+ ),
13997
+ // Optional description
13998
+ richText(
13999
+ { className: "rb-prose rb-max-w-none" },
14000
+ bind("content.description"),
14001
+ when("content.description")
14002
+ ),
14003
+ // Event listing component with pagination
14004
+ el("event-listing", withApiBindings({
14005
+ events: { $bind: { from: "data.events" } },
14006
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
14007
+ layout: { $bind: { from: "content.layout", fallback: "grid" } },
14008
+ columns: { $bind: { from: "content.columns", fallback: "3" } },
14009
+ eventsPerPage: { $bind: { from: "content.eventsPerPage", fallback: "12" } },
14010
+ paginationMode: { $bind: { from: "content.paginationMode", fallback: "loadMore" } },
14011
+ seeAllUrl: { $bind: { from: "content.seeAllUrl", transforms: [{ id: "links.resolve" }] } },
14012
+ loadMoreText: { $bind: { from: "content.loadMoreText", fallback: "Load more events" } },
14013
+ cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
14014
+ buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
14015
+ buttonText: { $bind: { from: "content.buttonText", fallback: "View event" } },
14016
+ showVenue: { $bind: { from: "content.showVenue" } },
14017
+ showMap: { $bind: { from: "content.showMap" } },
14018
+ showCapacity: { $bind: { from: "content.showCapacity" } },
14019
+ eventKind: { $bind: { from: "content.kind", fallback: "all" } },
14020
+ eventSurface: { $bind: { from: "content.eventSurface", fallback: "all" } },
14021
+ filterEventPresets: { $bind: { from: "content.filterEventPresets" } },
14022
+ scheduleScope: { $bind: { from: "content.scheduleScope", fallback: "any" } },
14023
+ emptyMessage: { $bind: { from: "content.emptyMessage" } }
14024
+ }))
14025
+ ], {
14026
+ gap: "lg"
14027
+ }),
14028
+ // sectionContainer (rb-container) already provides horizontal padding
14029
+ baseClass: "",
14030
+ spacing: "comfortable"
14031
+ })
14032
+ ];
14033
+ var eventListingDerivedFields = [
14034
+ {
14035
+ id: "layout",
14036
+ type: "select",
14037
+ required: false,
14038
+ multiple: false,
14039
+ options: [
14040
+ { value: "grid" },
14041
+ { value: "stack" }
14042
+ ]
14043
+ },
14044
+ {
14045
+ id: "paginationMode",
14046
+ type: "select",
14047
+ required: false,
14048
+ multiple: false,
14049
+ options: [
14050
+ { value: "loadMore" },
14051
+ { value: "seeAllLink" }
14052
+ ]
14053
+ }
14054
+ ];
14055
+ var eventListingContentShape = {
14056
+ additionalFields: eventListingDerivedFields,
14057
+ skipSectionStyles: true
14058
+ };
14059
+ var eventListingConfig = {
14060
+ id: "block.event-listing",
14061
+ version: "1.1.0",
14062
+ title: "Event Listing",
14063
+ titleSource: "heading",
14064
+ description: "Paginated list of all upcoming events",
14065
+ // Preserve legacy section styles field configuration (renderInHeader: false).
14066
+ skipSectionStyles: true,
14067
+ additionalFields: eventListingAdditionalFields,
13771
14068
  styleTokens: { background: "surface", typography: "body", spacing: "md" },
13772
14069
  behaviours: { supportsThemeSwitching: true, inlineEditing: false, animation: false, paletteHidden: true },
13773
14070
  category: "interactive",
13774
14071
  tags: ["events", "listing", "paginated", "archive", "all-events"],
13775
14072
  icon: "List",
13776
- layout: [
13777
- styledSection({
13778
- children: sectionContainer([
13779
- // Optional heading
13780
- text(
13781
- { as: "h2" },
13782
- bind("content.heading"),
13783
- when("content.heading")
13784
- ),
13785
- // Optional description
13786
- richText(
13787
- { className: "rb-prose rb-max-w-none" },
13788
- bind("content.description"),
13789
- when("content.description")
13790
- ),
13791
- // Event listing component with pagination
13792
- el("event-listing", withApiBindings({
13793
- events: { $bind: { from: "data.events" } },
13794
- stage: { $bind: { from: "$root.previewStage", fallback: "published" } },
13795
- layout: { $bind: { from: "content.layout", fallback: "grid" } },
13796
- columns: { $bind: { from: "content.columns", fallback: "3" } },
13797
- eventsPerPage: { $bind: { from: "content.eventsPerPage", fallback: "12" } },
13798
- paginationMode: { $bind: { from: "content.paginationMode", fallback: "loadMore" } },
13799
- seeAllUrl: { $bind: { from: "content.seeAllUrl", transforms: [{ id: "links.resolve" }] } },
13800
- loadMoreText: { $bind: { from: "content.loadMoreText", fallback: "Load more events" } },
13801
- cardVariant: { $bind: { from: "content.cardVariant", fallback: "default" } },
13802
- buttonVariant: { $bind: { from: "content.buttonVariant", fallback: "primary" } },
13803
- buttonText: { $bind: { from: "content.buttonText", fallback: "View event" } },
13804
- showVenue: { $bind: { from: "content.showVenue" } },
13805
- showMap: { $bind: { from: "content.showMap" } },
13806
- showCapacity: { $bind: { from: "content.showCapacity" } },
13807
- eventKind: { $bind: { from: "content.kind", fallback: "all" } },
13808
- eventSurface: { $bind: { from: "content.eventSurface", fallback: "all" } },
13809
- filterEventPresets: { $bind: { from: "content.filterEventPresets" } },
13810
- scheduleScope: { $bind: { from: "content.scheduleScope", fallback: "any" } },
13811
- emptyMessage: { $bind: { from: "content.emptyMessage" } }
13812
- }))
13813
- ], {
13814
- gap: "lg"
13815
- }),
13816
- // sectionContainer (rb-container) already provides horizontal padding
13817
- baseClass: "",
13818
- spacing: "comfortable"
13819
- })
13820
- ]
13821
- });
14073
+ layout: eventListingLayout
14074
+ };
14075
+ var eventListingManifest = createBlockManifestWithContentShape(
14076
+ eventListingConfig,
14077
+ eventListingContentShape
14078
+ );
13822
14079
  var eventListingBlockDefinition = {
13823
14080
  manifest: eventListingManifest,
13824
14081
  runtime: eventListingBlockRuntime,
@@ -13845,7 +14102,6 @@ var eventListingBlockDefinition = {
13845
14102
 
13846
14103
  // ../blocks/src/system/runtime/nodes/events/EventCalendar.interactive.ts
13847
14104
  import { z as z41 } from "zod";
13848
- var displayModeSchema = z41.enum(["combined", "month", "week", "list", "timetable"]);
13849
14105
  var eventBlockKindSchema2 = z41.enum(eventBlockKindValues);
13850
14106
  var eventSurfaceScopeSchema2 = z41.enum(eventSurfaceScopeValues);
13851
14107
  var eventScheduleScopeSchema3 = z41.enum(eventScheduleScopeValues);
@@ -13855,7 +14111,8 @@ var eventCalendarSourceSchema = z41.object(
13855
14111
  siteId: z41.string(),
13856
14112
  apiBaseUrl: z41.string().optional(),
13857
14113
  stage: previewStageSchema.optional(),
13858
- displayMode: displayModeSchema.nullable().optional(),
14114
+ variant: eventCalendarDisplayModeSchema.nullable().optional(),
14115
+ displayMode: eventCalendarDisplayModeSchema.nullable().optional(),
13859
14116
  listLayout: eventLayoutSchema.optional(),
13860
14117
  listColumns: columnOptionSchema.optional(),
13861
14118
  layout: eventLayoutSchema.optional(),
@@ -13887,7 +14144,7 @@ var eventCalendarSourceSchema = z41.object(
13887
14144
  );
13888
14145
  var eventCalendarDisplaySchema = z41.object({
13889
14146
  kind: z41.literal("event-calendar"),
13890
- displayMode: displayModeSchema,
14147
+ displayMode: eventCalendarDisplayModeSchema,
13891
14148
  className: z41.string().nullable(),
13892
14149
  events: z41.array(publicEventSchema),
13893
14150
  listLayout: eventLayoutSchema,
@@ -13942,7 +14199,7 @@ var eventCalendarIslandMetaKeys = defineInteractiveIslandMetaKeys(
13942
14199
  function buildEventCalendarDisplay(source) {
13943
14200
  return {
13944
14201
  kind: "event-calendar",
13945
- displayMode: source.displayMode ?? "combined",
14202
+ displayMode: source.variant ?? source.displayMode ?? "combined",
13946
14203
  className: source.className ?? null,
13947
14204
  events: (source.events ?? []).slice().sort(
13948
14205
  (left, right) => new Date(left.startsAt).getTime() - new Date(right.startsAt).getTime()
@@ -14009,8 +14266,12 @@ var eventCalendarInteractiveIslandPropsCodec = createInteractiveIslandCodec({
14009
14266
  function normalizeEventCalendarContent(content) {
14010
14267
  const record = typeof content === "object" && content !== null ? content : {};
14011
14268
  const kind = normalizeEventBlockKind(record.kind);
14269
+ const variant = normalizeEventCalendarDisplayMode(record.variant) ?? normalizeEventCalendarDisplayMode(record.displayMode);
14012
14270
  return {
14013
14271
  ...record,
14272
+ ...variant ? { variant } : {},
14273
+ displayMode: normalizeEventCalendarDisplayMode(record.displayMode),
14274
+ listLayout: normalizeEventCalendarListLayout(record.listLayout),
14014
14275
  kind,
14015
14276
  eventSurface: normalizeEventSurfaceScope(record.eventSurface),
14016
14277
  filterEventPresets: normalizeEventSurfacePresets(record.filterEventPresets),
@@ -14022,355 +14283,515 @@ function normalizeEventCalendarContent(content) {
14022
14283
  filterVenueId: normalizeEventVenueId(record.filterVenueId)
14023
14284
  };
14024
14285
  }
14025
- var eventCalendarManifest = createBlockManifest({
14026
- id: "block.event-calendar",
14027
- version: "3.6.0",
14028
- title: "Event Calendar",
14029
- titleSource: "heading",
14030
- description: "Display events with calendar, list, or combined views with filtering",
14031
- // Preserve legacy section styles field configuration (renderInHeader: false).
14032
- skipSectionStyles: true,
14033
- additionalFields: [
14034
- ...sectionHeaderFields("Event Calendar"),
14035
- // Display Mode (replaces calendarView)
14036
- {
14037
- id: "displayMode",
14038
- type: "select",
14039
- label: "Display mode",
14040
- description: "How events are displayed",
14041
- required: false,
14042
- multiple: false,
14043
- defaultValue: "combined",
14044
- options: [
14045
- { value: "combined", label: "Combined (List + Calendar tabs)" },
14046
- { value: "month", label: "Month calendar" },
14047
- { value: "week", label: "Week agenda" },
14048
- { value: "timetable", label: "Timetable" },
14049
- { value: "list", label: "List" }
14050
- ],
14051
- ui: { intent: "display" }
14052
- },
14053
- // List options (visible when displayMode is list or combined)
14054
- {
14055
- id: "listLayout",
14056
- type: "select",
14057
- label: "List layout",
14058
- description: "Layout style for list view",
14059
- required: false,
14060
- multiple: false,
14061
- defaultValue: "stack",
14062
- options: [
14063
- { value: "stack", label: "Stack (full-width cards)" },
14064
- { value: "grid", label: "Grid" },
14065
- { value: "compact", label: "Compact (dense rows)" }
14066
- ],
14067
- ui: {
14068
- intent: "display",
14069
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list"] }
14070
- }
14071
- },
14072
- {
14073
- id: "listColumns",
14074
- type: "select",
14075
- label: "Grid columns",
14076
- description: "Number of columns in grid layout",
14077
- required: false,
14078
- multiple: false,
14079
- defaultValue: "3",
14080
- options: [
14081
- { value: "2", label: "2 columns" },
14082
- { value: "3", label: "3 columns" },
14083
- { value: "4", label: "4 columns" }
14084
- ],
14085
- ui: {
14086
- intent: "display",
14087
- visibleWhen: { field: "listLayout", equals: "grid" }
14088
- }
14089
- },
14090
- {
14091
- id: "eventsPerPage",
14092
- type: "select",
14093
- label: "Events per page (cards)",
14094
- description: "Number of events to load initially in card layouts",
14095
- required: false,
14096
- multiple: false,
14097
- defaultValue: "12",
14098
- options: [
14099
- { value: "6", label: "6" },
14100
- { value: "12", label: "12" },
14101
- { value: "24", label: "24" }
14102
- ],
14103
- ui: {
14104
- intent: "display",
14105
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list"] }
14106
- }
14107
- },
14108
- {
14109
- id: "compactEventsPerPage",
14110
- type: "select",
14111
- label: "Events per page (compact)",
14112
- description: "Number of events to show per page in compact layout",
14113
- required: false,
14114
- multiple: false,
14115
- defaultValue: "10",
14116
- options: [
14117
- { value: "10", label: "10" },
14118
- { value: "20", label: "20" },
14119
- { value: "30", label: "30" }
14120
- ],
14121
- ui: {
14122
- intent: "display",
14123
- visibleWhen: { field: "listLayout", equals: "compact" }
14124
- }
14125
- },
14126
- {
14127
- id: "loadMoreText",
14128
- type: "text",
14129
- label: "Load more button text",
14130
- description: "Text for the load more button",
14131
- required: false,
14132
- multiline: false,
14133
- defaultValue: "Load more events",
14134
- ui: {
14135
- intent: "content",
14136
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list"] }
14137
- }
14138
- },
14139
- // Calendar options
14140
- {
14141
- id: "startOfWeek",
14142
- type: "select",
14143
- label: "Week starts on",
14144
- description: "First day of the week",
14145
- required: false,
14146
- multiple: false,
14147
- defaultValue: "monday",
14148
- options: [
14149
- { value: "sunday", label: "Sunday" },
14150
- { value: "monday", label: "Monday" }
14151
- ],
14152
- ui: {
14153
- intent: "display",
14154
- visibleWhen: {
14155
- field: "displayMode",
14156
- oneOf: ["combined", "month", "week"]
14157
- }
14158
- }
14159
- },
14160
- // Combined mode options
14161
- {
14162
- id: "calendarTabViews",
14163
- type: "select",
14164
- label: "Calendar tab views",
14165
- description: "Which calendar views to show in the Calendar tab",
14166
- required: false,
14167
- multiple: false,
14168
- defaultValue: "both",
14169
- options: [
14170
- { value: "both", label: "Month + Week toggle" },
14171
- { value: "month", label: "Month only" },
14172
- { value: "week", label: "Week only" }
14173
- ],
14174
- ui: {
14175
- intent: "display",
14176
- visibleWhen: { field: "displayMode", equals: "combined" }
14177
- }
14178
- },
14179
- // Filtering options
14180
- {
14181
- id: "kind",
14182
- type: "select",
14183
- label: "Show",
14184
- description: "Restrict this block to all offerings, courses, or events",
14185
- required: false,
14186
- multiple: false,
14187
- defaultValue: "all",
14188
- options: [
14189
- { value: "all", label: "All offerings" },
14190
- { value: "courses", label: "Courses only" },
14191
- { value: "events", label: "Events only" }
14192
- ],
14193
- ui: { intent: "behavior" }
14194
- },
14195
- {
14196
- id: "showFilters",
14197
- type: "boolean",
14198
- label: "Show filters",
14199
- description: "Show category, staff, and venue filters",
14200
- required: false,
14201
- defaultValue: true,
14202
- ui: {
14203
- intent: "display",
14204
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list", "timetable"] }
14205
- }
14206
- },
14207
- {
14208
- id: "showCategoryFilter",
14209
- type: "select",
14210
- label: "Show category filter",
14211
- description: "When to show the category filter dropdown",
14212
- required: false,
14213
- multiple: false,
14214
- defaultValue: "auto",
14215
- options: [
14216
- { value: "auto", label: "Auto (when >1 category has events)" },
14217
- { value: "always", label: "Always" },
14218
- { value: "never", label: "Never" }
14286
+ function normalizeEventCalendarDisplayMode(value) {
14287
+ return isEventCalendarDisplayMode(value) ? value : void 0;
14288
+ }
14289
+ function normalizeEventCalendarListLayout(value) {
14290
+ return isEventCalendarListLayout(value) ? value : void 0;
14291
+ }
14292
+ var eventCalendarLayout = [
14293
+ styledSection({
14294
+ children: sectionContainer(
14295
+ [
14296
+ // Optional heading
14297
+ text({ as: "h2" }, bind("content.heading"), when("content.heading")),
14298
+ // Optional description
14299
+ richText(
14300
+ { className: "rb-prose rb-max-w-none" },
14301
+ bind("content.description"),
14302
+ when("content.description")
14303
+ ),
14304
+ // Event calendar component (handles all display modes)
14305
+ el(
14306
+ "event-calendar",
14307
+ withApiBindings({
14308
+ events: { $bind: { from: "data.events" } },
14309
+ stage: {
14310
+ $bind: { from: "$root.previewStage", fallback: "published" }
14311
+ },
14312
+ // Variant is the new Theme V2-facing display mode. displayMode is
14313
+ // retained as a legacy fallback for existing content.
14314
+ variant: {
14315
+ $bind: { from: "content.variant" }
14316
+ },
14317
+ displayMode: {
14318
+ $bind: { from: "content.displayMode" }
14319
+ },
14320
+ // List options
14321
+ listLayout: { $bind: { from: "content.listLayout" } },
14322
+ listColumns: { $bind: { from: "content.listColumns" } },
14323
+ // Legacy compatibility: older event-calendar content used layout/columns
14324
+ layout: { $bind: { from: "content.layout" } },
14325
+ columns: { $bind: { from: "content.columns" } },
14326
+ eventsPerPage: {
14327
+ $bind: { from: "content.eventsPerPage", fallback: "12" }
14328
+ },
14329
+ compactEventsPerPage: {
14330
+ $bind: { from: "content.compactEventsPerPage", fallback: "10" }
14331
+ },
14332
+ loadMoreText: {
14333
+ $bind: {
14334
+ from: "content.loadMoreText",
14335
+ fallback: "Load more events"
14336
+ }
14337
+ },
14338
+ // Calendar options
14339
+ startOfWeek: {
14340
+ $bind: { from: "content.startOfWeek", fallback: "monday" }
14341
+ },
14342
+ calendarTabViews: {
14343
+ $bind: { from: "content.calendarTabViews", fallback: "both" }
14344
+ },
14345
+ // Filtering options
14346
+ showFilters: {
14347
+ $bind: { from: "content.showFilters", fallback: true }
14348
+ },
14349
+ showCategoryFilter: {
14350
+ $bind: { from: "content.showCategoryFilter", fallback: "auto" }
14351
+ },
14352
+ showVenueFilter: {
14353
+ $bind: { from: "content.showVenueFilter", fallback: false }
14354
+ },
14355
+ showStaffFilter: {
14356
+ $bind: { from: "content.showStaffFilter", fallback: true }
14357
+ },
14358
+ showCapacity: {
14359
+ $bind: { from: "content.showCapacity", fallback: true }
14360
+ },
14361
+ kind: { $bind: { from: "content.kind", fallback: "all" } },
14362
+ eventSurface: {
14363
+ $bind: { from: "content.eventSurface", fallback: "all" }
14364
+ },
14365
+ filterEventPresets: {
14366
+ $bind: { from: "content.filterEventPresets" }
14367
+ },
14368
+ scheduleScope: {
14369
+ $bind: { from: "content.scheduleScope", fallback: "any" }
14370
+ },
14371
+ filterCategoryIds: {
14372
+ $bind: { from: "content.filterCategoryIds" }
14373
+ },
14374
+ filterStaffMemberId: {
14375
+ $bind: { from: "content.filterStaffMemberId" }
14376
+ },
14377
+ filterVenueId: { $bind: { from: "content.filterVenueId" } },
14378
+ // Styling
14379
+ buttonVariant: {
14380
+ $bind: { from: "content.buttonVariant", fallback: "primary" }
14381
+ },
14382
+ buttonText: {
14383
+ $bind: { from: "content.buttonText", fallback: "View event" }
14384
+ },
14385
+ emptyMessage: { $bind: { from: "content.emptyMessage" } }
14386
+ })
14387
+ )
14219
14388
  ],
14220
- ui: {
14221
- intent: "display",
14222
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list", "timetable"] }
14223
- }
14224
- },
14225
- {
14226
- id: "showVenueFilter",
14227
- type: "boolean",
14228
- label: "Show venue filter",
14229
- description: "Show venue filter dropdown",
14230
- required: false,
14231
- defaultValue: false,
14232
- ui: {
14233
- intent: "display",
14234
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list", "timetable"] }
14235
- }
14236
- },
14237
- {
14238
- id: "showStaffFilter",
14239
- type: "boolean",
14240
- label: "Show staff filter",
14241
- description: "Show staff filter dropdown",
14242
- required: false,
14243
- defaultValue: true,
14244
- ui: {
14245
- intent: "display",
14246
- visibleWhen: { field: "displayMode", oneOf: ["combined", "list", "timetable"] }
14247
- }
14248
- },
14249
- {
14250
- id: "showCapacity",
14251
- type: "boolean",
14252
- label: "Show available spots",
14253
- description: "Display remaining capacity on event cards and timetable cells",
14254
- required: false,
14255
- defaultValue: true,
14256
- ui: {
14257
- intent: "display",
14258
- visibleWhen: {
14259
- field: "displayMode",
14260
- oneOf: ["combined", "list", "week", "timetable"]
14261
- }
14389
+ {
14390
+ gap: "lg"
14262
14391
  }
14263
- },
14264
- // Block-level pre-filtering
14265
- {
14266
- id: "eventSurface",
14267
- type: "select",
14268
- label: "Event surface",
14269
- description: "Choose a semantic event scope",
14270
- required: false,
14271
- multiple: false,
14272
- defaultValue: "all",
14273
- options: [
14274
- { value: "all", label: "All events" },
14275
- { value: "regularClassSchedule", label: "Regular class schedule" },
14276
- { value: "specialDatedEvents", label: "Workshops and special events" },
14277
- { value: "custom", label: "Custom" }
14278
- ],
14279
- ui: { intent: "behavior" }
14280
- },
14281
- {
14282
- id: "filterEventPresets",
14283
- type: "select",
14284
- label: "Pre-filter by event type",
14285
- description: "Restrict this block to specific event types",
14286
- required: false,
14287
- multiple: true,
14288
- defaultValue: [],
14289
- options: [
14290
- { value: "class", label: "Classes" },
14291
- { value: "workshop", label: "Workshops" },
14292
- { value: "retreat", label: "Retreats" },
14293
- { value: "performance", label: "Performances" }
14294
- ],
14295
- ui: {
14296
- intent: "behavior",
14297
- visibleWhen: { field: "eventSurface", equals: "custom" }
14392
+ ),
14393
+ // sectionContainer (rb-container) already provides horizontal padding
14394
+ baseClass: "",
14395
+ spacing: "comfortable"
14396
+ })
14397
+ ];
14398
+ var eventCalendarAdditionalFields = [
14399
+ ...sectionHeaderFields("Event Calendar"),
14400
+ // Display Mode (replaces calendarView)
14401
+ {
14402
+ id: "displayMode",
14403
+ type: "select",
14404
+ label: "Display mode",
14405
+ description: "How events are displayed",
14406
+ required: false,
14407
+ multiple: false,
14408
+ defaultValue: "combined",
14409
+ options: [
14410
+ { value: "combined", label: "Combined (List + Calendar tabs)" },
14411
+ { value: "month", label: "Month calendar" },
14412
+ { value: "week", label: "Week agenda" },
14413
+ { value: "timetable", label: "Timetable" },
14414
+ { value: "list", label: "List" }
14415
+ ],
14416
+ ui: { intent: "display", hidden: true }
14417
+ },
14418
+ // List options (visible when displayMode is list or combined)
14419
+ {
14420
+ id: "listLayout",
14421
+ type: "select",
14422
+ label: "List layout",
14423
+ description: "Layout style for list view",
14424
+ required: false,
14425
+ multiple: false,
14426
+ defaultValue: "stack",
14427
+ options: eventCalendarListLayoutOptions.map((option) => ({
14428
+ value: option.id,
14429
+ label: option.label
14430
+ })),
14431
+ ui: {
14432
+ intent: "display",
14433
+ visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
14434
+ }
14435
+ },
14436
+ {
14437
+ id: "listColumns",
14438
+ type: "select",
14439
+ label: "Grid columns",
14440
+ description: "Number of columns in grid layout",
14441
+ required: false,
14442
+ multiple: false,
14443
+ defaultValue: "3",
14444
+ options: [
14445
+ { value: "2", label: "2 columns" },
14446
+ { value: "3", label: "3 columns" },
14447
+ { value: "4", label: "4 columns" }
14448
+ ],
14449
+ ui: {
14450
+ intent: "display",
14451
+ visibleWhen: { field: "listLayout", equals: "grid" }
14452
+ }
14453
+ },
14454
+ {
14455
+ id: "eventsPerPage",
14456
+ type: "select",
14457
+ label: "Events per page (cards)",
14458
+ description: "Number of events to load initially in card layouts",
14459
+ required: false,
14460
+ multiple: false,
14461
+ defaultValue: "12",
14462
+ options: [
14463
+ { value: "6", label: "6" },
14464
+ { value: "12", label: "12" },
14465
+ { value: "24", label: "24" }
14466
+ ],
14467
+ ui: {
14468
+ intent: "display",
14469
+ visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
14470
+ }
14471
+ },
14472
+ {
14473
+ id: "compactEventsPerPage",
14474
+ type: "select",
14475
+ label: "Events per page (compact)",
14476
+ description: "Number of events to show per page in compact layout",
14477
+ required: false,
14478
+ multiple: false,
14479
+ defaultValue: "10",
14480
+ options: [
14481
+ { value: "10", label: "10" },
14482
+ { value: "20", label: "20" },
14483
+ { value: "30", label: "30" }
14484
+ ],
14485
+ ui: {
14486
+ intent: "display",
14487
+ visibleWhen: { field: "listLayout", equals: "compact" }
14488
+ }
14489
+ },
14490
+ {
14491
+ id: "loadMoreText",
14492
+ type: "text",
14493
+ label: "Load more button text",
14494
+ description: "Text for the load more button",
14495
+ required: false,
14496
+ multiline: false,
14497
+ defaultValue: "Load more events",
14498
+ ui: {
14499
+ intent: "content",
14500
+ visibleWhen: { field: "variant", oneOf: ["combined", "list"] }
14501
+ }
14502
+ },
14503
+ // Calendar options
14504
+ {
14505
+ id: "startOfWeek",
14506
+ type: "select",
14507
+ label: "Week starts on",
14508
+ description: "First day of the week",
14509
+ required: false,
14510
+ multiple: false,
14511
+ defaultValue: "monday",
14512
+ options: [
14513
+ { value: "sunday", label: "Sunday" },
14514
+ { value: "monday", label: "Monday" }
14515
+ ],
14516
+ ui: {
14517
+ intent: "display",
14518
+ visibleWhen: {
14519
+ field: "variant",
14520
+ oneOf: ["combined", "month", "week"]
14298
14521
  }
14299
- },
14300
- {
14301
- id: "scheduleScope",
14302
- type: "select",
14303
- label: "Schedule cadence",
14304
- description: "Restrict this block by recurrence",
14305
- required: false,
14306
- multiple: false,
14307
- defaultValue: "any",
14308
- options: [
14309
- { value: "any", label: "Any cadence" },
14310
- { value: "recurring", label: "Recurring only" },
14311
- { value: "oneOff", label: "One-off only" }
14312
- ],
14313
- ui: {
14314
- intent: "behavior",
14315
- visibleWhen: { field: "eventSurface", equals: "custom" }
14522
+ }
14523
+ },
14524
+ // Combined mode options
14525
+ {
14526
+ id: "calendarTabViews",
14527
+ type: "select",
14528
+ label: "Calendar tab views",
14529
+ description: "Which calendar views to show in the Calendar tab",
14530
+ required: false,
14531
+ multiple: false,
14532
+ defaultValue: "both",
14533
+ options: [
14534
+ { value: "both", label: "Month + Week toggle" },
14535
+ { value: "month", label: "Month only" },
14536
+ { value: "week", label: "Week only" }
14537
+ ],
14538
+ ui: {
14539
+ intent: "display",
14540
+ visibleWhen: { field: "variant", equals: "combined" }
14541
+ }
14542
+ },
14543
+ // Filtering options
14544
+ {
14545
+ id: "kind",
14546
+ type: "select",
14547
+ label: "Show",
14548
+ description: "Restrict this block to all offerings, courses, or events",
14549
+ required: false,
14550
+ multiple: false,
14551
+ defaultValue: "all",
14552
+ options: [
14553
+ { value: "all", label: "All offerings" },
14554
+ { value: "courses", label: "Courses only" },
14555
+ { value: "events", label: "Events only" }
14556
+ ],
14557
+ ui: { intent: "behavior" }
14558
+ },
14559
+ {
14560
+ id: "showFilters",
14561
+ type: "boolean",
14562
+ label: "Show filters",
14563
+ description: "Show category, staff, and venue filters",
14564
+ required: false,
14565
+ defaultValue: true,
14566
+ ui: {
14567
+ intent: "display",
14568
+ visibleWhen: {
14569
+ field: "variant",
14570
+ oneOf: ["combined", "list", "timetable"]
14316
14571
  }
14317
- },
14318
- createSiteOptionSelectField({
14319
- id: "filterCategoryIds",
14320
- label: "Pre-filter by categories",
14321
- description: "Restrict this block to specific event categories",
14322
- required: false,
14323
- multiple: true,
14324
- defaultValue: [],
14325
- optionSource: "eventCategories",
14326
- ui: {
14327
- intent: "behavior",
14328
- searchThreshold: 8,
14329
- visibleWhen: { field: "kind", notEquals: "courses" }
14572
+ }
14573
+ },
14574
+ {
14575
+ id: "showCategoryFilter",
14576
+ type: "select",
14577
+ label: "Show category filter",
14578
+ description: "When to show the category filter dropdown",
14579
+ required: false,
14580
+ multiple: false,
14581
+ defaultValue: "auto",
14582
+ options: [
14583
+ { value: "auto", label: "Auto (when >1 category has events)" },
14584
+ { value: "always", label: "Always" },
14585
+ { value: "never", label: "Never" }
14586
+ ],
14587
+ ui: {
14588
+ intent: "display",
14589
+ visibleWhen: {
14590
+ field: "variant",
14591
+ oneOf: ["combined", "list", "timetable"]
14330
14592
  }
14331
- }),
14332
- createSiteOptionSelectField({
14333
- id: "filterStaffMemberId",
14334
- label: "Pre-filter by staff member",
14335
- description: "Restrict this block to a single staff member",
14336
- required: false,
14337
- multiple: false,
14338
- optionSource: "staffMembers",
14339
- ui: {
14340
- intent: "behavior",
14341
- searchThreshold: 8
14593
+ }
14594
+ },
14595
+ {
14596
+ id: "showVenueFilter",
14597
+ type: "boolean",
14598
+ label: "Show venue filter",
14599
+ description: "Show venue filter dropdown",
14600
+ required: false,
14601
+ defaultValue: false,
14602
+ ui: {
14603
+ intent: "display",
14604
+ visibleWhen: {
14605
+ field: "variant",
14606
+ oneOf: ["combined", "list", "timetable"]
14342
14607
  }
14343
- }),
14344
- createSiteOptionSelectField({
14345
- id: "filterVenueId",
14346
- label: "Pre-filter by venue",
14347
- description: "Restrict this block to a single venue",
14348
- required: false,
14349
- multiple: false,
14350
- optionSource: "venues",
14351
- ui: {
14352
- intent: "behavior",
14353
- searchThreshold: 8
14608
+ }
14609
+ },
14610
+ {
14611
+ id: "showStaffFilter",
14612
+ type: "boolean",
14613
+ label: "Show staff filter",
14614
+ description: "Show staff filter dropdown",
14615
+ required: false,
14616
+ defaultValue: true,
14617
+ ui: {
14618
+ intent: "display",
14619
+ visibleWhen: {
14620
+ field: "variant",
14621
+ oneOf: ["combined", "list", "timetable"]
14354
14622
  }
14355
- }),
14356
- // Card styling
14357
- ...cardStylingFields.filter((f) => f.id === "buttonVariant" || f.id === "buttonText").map((field) => ({
14358
- ...field,
14359
- ui: {
14360
- ...field.ui ?? {},
14361
- intent: field.id === "buttonVariant" ? "style" : "content"
14623
+ }
14624
+ },
14625
+ {
14626
+ id: "showCapacity",
14627
+ type: "boolean",
14628
+ label: "Show available spots",
14629
+ description: "Display remaining capacity on event cards and timetable cells",
14630
+ required: false,
14631
+ defaultValue: true,
14632
+ ui: {
14633
+ intent: "display",
14634
+ visibleWhen: {
14635
+ field: "variant",
14636
+ oneOf: ["combined", "list", "week", "timetable"]
14362
14637
  }
14363
- })),
14364
- {
14365
- ...emptyStateField,
14366
- ui: { ...emptyStateField.ui ?? {}, intent: "display" }
14367
- },
14368
- sectionStylesField({
14369
- id: "_sectionStyles",
14370
- label: "Section styles",
14371
- renderInHeader: false
14372
- })
14373
- ],
14638
+ }
14639
+ },
14640
+ // Block-level pre-filtering
14641
+ {
14642
+ id: "eventSurface",
14643
+ type: "select",
14644
+ label: "Event surface",
14645
+ description: "Choose a semantic event scope",
14646
+ required: false,
14647
+ multiple: false,
14648
+ defaultValue: "all",
14649
+ options: [
14650
+ { value: "all", label: "All events" },
14651
+ { value: "regularClassSchedule", label: "Regular class schedule" },
14652
+ { value: "specialDatedEvents", label: "Workshops and special events" },
14653
+ { value: "custom", label: "Custom" }
14654
+ ],
14655
+ ui: { intent: "behavior" }
14656
+ },
14657
+ {
14658
+ id: "filterEventPresets",
14659
+ type: "select",
14660
+ label: "Pre-filter by event type",
14661
+ description: "Restrict this block to specific event types",
14662
+ required: false,
14663
+ multiple: true,
14664
+ defaultValue: [],
14665
+ options: [
14666
+ { value: "class", label: "Classes" },
14667
+ { value: "workshop", label: "Workshops" },
14668
+ { value: "retreat", label: "Retreats" },
14669
+ { value: "performance", label: "Performances" }
14670
+ ],
14671
+ ui: {
14672
+ intent: "behavior",
14673
+ visibleWhen: { field: "eventSurface", equals: "custom" }
14674
+ }
14675
+ },
14676
+ {
14677
+ id: "scheduleScope",
14678
+ type: "select",
14679
+ label: "Schedule cadence",
14680
+ description: "Restrict this block by recurrence",
14681
+ required: false,
14682
+ multiple: false,
14683
+ defaultValue: "any",
14684
+ options: [
14685
+ { value: "any", label: "Any cadence" },
14686
+ { value: "recurring", label: "Recurring only" },
14687
+ { value: "oneOff", label: "One-off only" }
14688
+ ],
14689
+ ui: {
14690
+ intent: "behavior",
14691
+ visibleWhen: { field: "eventSurface", equals: "custom" }
14692
+ }
14693
+ },
14694
+ createSiteOptionSelectField({
14695
+ id: "filterCategoryIds",
14696
+ label: "Pre-filter by categories",
14697
+ description: "Restrict this block to specific event categories",
14698
+ required: false,
14699
+ multiple: true,
14700
+ defaultValue: [],
14701
+ optionSource: "eventCategories",
14702
+ ui: {
14703
+ intent: "behavior",
14704
+ searchThreshold: 8,
14705
+ visibleWhen: { field: "kind", notEquals: "courses" }
14706
+ }
14707
+ }),
14708
+ createSiteOptionSelectField({
14709
+ id: "filterStaffMemberId",
14710
+ label: "Pre-filter by staff member",
14711
+ description: "Restrict this block to a single staff member",
14712
+ required: false,
14713
+ multiple: false,
14714
+ optionSource: "staffMembers",
14715
+ ui: {
14716
+ intent: "behavior",
14717
+ searchThreshold: 8
14718
+ }
14719
+ }),
14720
+ createSiteOptionSelectField({
14721
+ id: "filterVenueId",
14722
+ label: "Pre-filter by venue",
14723
+ description: "Restrict this block to a single venue",
14724
+ required: false,
14725
+ multiple: false,
14726
+ optionSource: "venues",
14727
+ ui: {
14728
+ intent: "behavior",
14729
+ searchThreshold: 8
14730
+ }
14731
+ }),
14732
+ // Card styling
14733
+ ...cardStylingFields.filter((f) => f.id === "buttonVariant" || f.id === "buttonText").map((field) => ({
14734
+ ...field,
14735
+ ui: {
14736
+ ...field.ui ?? {},
14737
+ intent: field.id === "buttonVariant" ? "style" : "content"
14738
+ }
14739
+ })),
14740
+ {
14741
+ ...emptyStateField,
14742
+ ui: { ...emptyStateField.ui ?? {}, intent: "display" }
14743
+ },
14744
+ sectionStylesField({
14745
+ id: "_sectionStyles",
14746
+ label: "Section styles",
14747
+ renderInHeader: false
14748
+ })
14749
+ ];
14750
+ var eventCalendarVariants = {
14751
+ combined: eventCalendarLayout[0],
14752
+ month: eventCalendarLayout[0],
14753
+ week: eventCalendarLayout[0],
14754
+ timetable: eventCalendarLayout[0],
14755
+ list: eventCalendarLayout[0]
14756
+ };
14757
+ var eventCalendarDerivedFields = [
14758
+ {
14759
+ id: "displayMode",
14760
+ type: "select",
14761
+ required: false,
14762
+ multiple: false,
14763
+ options: [
14764
+ { value: "combined" },
14765
+ { value: "month" },
14766
+ { value: "week" },
14767
+ { value: "timetable" },
14768
+ { value: "list" }
14769
+ ]
14770
+ },
14771
+ {
14772
+ id: "listLayout",
14773
+ type: "select",
14774
+ required: false,
14775
+ multiple: false,
14776
+ options: eventCalendarListLayoutOptions.map((option) => ({
14777
+ value: option.id
14778
+ }))
14779
+ }
14780
+ ];
14781
+ var eventCalendarContentShape = {
14782
+ additionalFields: eventCalendarDerivedFields,
14783
+ variants: eventCalendarVariants,
14784
+ skipSectionStyles: true
14785
+ };
14786
+ var eventCalendarConfig = {
14787
+ id: "block.event-calendar",
14788
+ version: "3.6.0",
14789
+ title: "Event Calendar",
14790
+ titleSource: "heading",
14791
+ description: "Display events with calendar, list, or combined views with filtering",
14792
+ // Preserve legacy section styles field configuration (renderInHeader: false).
14793
+ skipSectionStyles: true,
14794
+ additionalFields: eventCalendarAdditionalFields,
14374
14795
  styleTokens: { background: "surface", typography: "body", spacing: "md" },
14375
14796
  behaviours: {
14376
14797
  supportsThemeSwitching: true,
@@ -14390,109 +14811,21 @@ var eventCalendarManifest = createBlockManifest({
14390
14811
  "filter"
14391
14812
  ],
14392
14813
  icon: "CalendarDays",
14393
- layout: [
14394
- styledSection({
14395
- children: sectionContainer(
14396
- [
14397
- // Optional heading
14398
- text({ as: "h2" }, bind("content.heading"), when("content.heading")),
14399
- // Optional description
14400
- richText(
14401
- { className: "rb-prose rb-max-w-none" },
14402
- bind("content.description"),
14403
- when("content.description")
14404
- ),
14405
- // Event calendar component (handles all display modes)
14406
- el(
14407
- "event-calendar",
14408
- withApiBindings({
14409
- events: { $bind: { from: "data.events" } },
14410
- stage: {
14411
- $bind: { from: "$root.previewStage", fallback: "published" }
14412
- },
14413
- // Display mode
14414
- displayMode: {
14415
- $bind: { from: "content.displayMode", fallback: "combined" }
14416
- },
14417
- // List options
14418
- listLayout: { $bind: { from: "content.listLayout" } },
14419
- listColumns: { $bind: { from: "content.listColumns" } },
14420
- // Legacy compatibility: older event-calendar content used layout/columns
14421
- layout: { $bind: { from: "content.layout" } },
14422
- columns: { $bind: { from: "content.columns" } },
14423
- eventsPerPage: {
14424
- $bind: { from: "content.eventsPerPage", fallback: "12" }
14425
- },
14426
- compactEventsPerPage: {
14427
- $bind: { from: "content.compactEventsPerPage", fallback: "10" }
14428
- },
14429
- loadMoreText: {
14430
- $bind: {
14431
- from: "content.loadMoreText",
14432
- fallback: "Load more events"
14433
- }
14434
- },
14435
- // Calendar options
14436
- startOfWeek: {
14437
- $bind: { from: "content.startOfWeek", fallback: "monday" }
14438
- },
14439
- calendarTabViews: {
14440
- $bind: { from: "content.calendarTabViews", fallback: "both" }
14441
- },
14442
- // Filtering options
14443
- showFilters: {
14444
- $bind: { from: "content.showFilters", fallback: true }
14445
- },
14446
- showCategoryFilter: {
14447
- $bind: { from: "content.showCategoryFilter", fallback: "auto" }
14448
- },
14449
- showVenueFilter: {
14450
- $bind: { from: "content.showVenueFilter", fallback: false }
14451
- },
14452
- showStaffFilter: {
14453
- $bind: { from: "content.showStaffFilter", fallback: true }
14454
- },
14455
- showCapacity: {
14456
- $bind: { from: "content.showCapacity", fallback: true }
14457
- },
14458
- kind: { $bind: { from: "content.kind", fallback: "all" } },
14459
- eventSurface: {
14460
- $bind: { from: "content.eventSurface", fallback: "all" }
14461
- },
14462
- filterEventPresets: {
14463
- $bind: { from: "content.filterEventPresets" }
14464
- },
14465
- scheduleScope: {
14466
- $bind: { from: "content.scheduleScope", fallback: "any" }
14467
- },
14468
- filterCategoryIds: {
14469
- $bind: { from: "content.filterCategoryIds" }
14470
- },
14471
- filterStaffMemberId: {
14472
- $bind: { from: "content.filterStaffMemberId" }
14473
- },
14474
- filterVenueId: { $bind: { from: "content.filterVenueId" } },
14475
- // Styling
14476
- buttonVariant: {
14477
- $bind: { from: "content.buttonVariant", fallback: "primary" }
14478
- },
14479
- buttonText: {
14480
- $bind: { from: "content.buttonText", fallback: "View event" }
14481
- },
14482
- emptyMessage: { $bind: { from: "content.emptyMessage" } }
14483
- })
14484
- )
14485
- ],
14486
- {
14487
- gap: "lg"
14488
- }
14489
- ),
14490
- // sectionContainer (rb-container) already provides horizontal padding
14491
- baseClass: "",
14492
- spacing: "comfortable"
14493
- })
14494
- ]
14495
- });
14814
+ layout: eventCalendarLayout,
14815
+ variants: eventCalendarVariants,
14816
+ defaultVariant: "combined",
14817
+ variantOptions: {
14818
+ combined: { label: "Combined" },
14819
+ month: { label: "Month" },
14820
+ week: { label: "Week" },
14821
+ timetable: { label: "Timetable" },
14822
+ list: { label: "List" }
14823
+ }
14824
+ };
14825
+ var eventCalendarManifest = createBlockManifestWithContentShape(
14826
+ eventCalendarConfig,
14827
+ eventCalendarContentShape
14828
+ );
14496
14829
  var eventCalendarBlockDefinition = {
14497
14830
  manifest: eventCalendarManifest,
14498
14831
  normalizeContent: normalizeEventCalendarContent,
@@ -18545,14 +18878,29 @@ function mediaPanelCapable() {
18545
18878
  var allSectionSurfaces = [
18546
18879
  "base",
18547
18880
  "muted-band",
18548
- "accent-band"
18881
+ "accent-band",
18882
+ "brand-depth-band"
18549
18883
  ];
18550
18884
  var heroSectionSurfaces = [
18551
18885
  "base",
18552
18886
  "muted-band",
18553
18887
  "accent-band",
18888
+ "brand-depth-band",
18554
18889
  "hero-image"
18555
18890
  ];
18891
+ var scheduleTileTreatments = [
18892
+ "default",
18893
+ "quiet",
18894
+ "brand-depth"
18895
+ ];
18896
+ function scheduleDetailsCapable() {
18897
+ return declareBlockDesignCapability({
18898
+ sectionSurfaces: "supported",
18899
+ contentFrames: ["plain"],
18900
+ itemSurfaces: "unsupported",
18901
+ tileTreatments: scheduleTileTreatments
18902
+ });
18903
+ }
18556
18904
  function defaultBoundaryBias(visualWeight) {
18557
18905
  return visualWeight === "featured" || visualWeight === "immersive" ? "clear" : "soft";
18558
18906
  }
@@ -18790,7 +19138,7 @@ var systemBlockDefinitionsRaw = [
18790
19138
  flow: conversionFlow,
18791
19139
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "form", weight: "standard" })]
18792
19140
  })),
18793
- withDesignCapability("block.event-details", eventDetailsBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
19141
+ withDesignCapability("block.event-details", eventDetailsBlockDefinition, scheduleDetailsCapable(), defineBlockDesignMetadata({
18794
19142
  flow: offeringsFlow,
18795
19143
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
18796
19144
  })),
@@ -18798,7 +19146,7 @@ var systemBlockDefinitionsRaw = [
18798
19146
  flow: conversionFlow,
18799
19147
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "form", weight: "standard" })]
18800
19148
  })),
18801
- withDesignCapability("block.course-details", courseDetailsBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
19149
+ withDesignCapability("block.course-details", courseDetailsBlockDefinition, scheduleDetailsCapable(), defineBlockDesignMetadata({
18802
19150
  flow: offeringsFlow,
18803
19151
  layoutProfiles: [layoutProfile({ variantKey: "default", family: "stack", weight: "standard" })]
18804
19152
  })),
@@ -18813,7 +19161,13 @@ var systemBlockDefinitionsRaw = [
18813
19161
  })),
18814
19162
  withDesignCapability("block.event-calendar", eventCalendarBlockDefinition, sectionOnly(), defineBlockDesignMetadata({
18815
19163
  flow: offeringsFlow,
18816
- layoutProfiles: [layoutProfile({ variantKey: "default", family: "grid", weight: "standard" })]
19164
+ layoutProfiles: [
19165
+ layoutProfile({ variantKey: "combined", family: "grid", weight: "standard" }),
19166
+ layoutProfile({ variantKey: "list", family: "stack", weight: "standard" }),
19167
+ layoutProfile({ variantKey: "month", family: "grid", weight: "standard" }),
19168
+ layoutProfile({ variantKey: "week", family: "stack", weight: "standard" }),
19169
+ layoutProfile({ variantKey: "timetable", family: "stack", weight: "standard" })
19170
+ ]
18817
19171
  })),
18818
19172
  // Friendly wrapper blocks
18819
19173
  withDesignCapability("block.team-members", teamMembersBlockDefinition, sectionOnly(), defineBlockDesignMetadata({