@riverbankcms/sdk 0.140.0 → 0.141.0

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 (112) hide show
  1. package/dist/{PreviewEditorSidebar-CUyTzd5z.mjs → PreviewEditorSidebar-Q-fy9GYw.mjs} +3 -3
  2. package/dist/{PreviewEditorUI-Agkw4v5i.mjs → PreviewEditorUI-LYGzgk85.mjs} +2 -2
  3. package/dist/{SdkPreviewModeRuntime-DdbeAdS8.mjs → SdkPreviewModeRuntime-CoPYI5Jq.mjs} +72 -46
  4. package/dist/{SiteChromeCustomizeContext-CqGOz-Kv.mjs → SiteChromeCustomizeContext-D8LePX8x.mjs} +681 -196
  5. package/dist/_dts/api/src/contentRuntime.d.ts +12 -31
  6. package/dist/_dts/api/src/domainConnection.d.ts +4 -0
  7. package/dist/_dts/api/src/footerCompositionContracts.d.ts +25 -0
  8. package/dist/_dts/api/src/index.d.ts +1 -1
  9. package/dist/_dts/api/src/launchReadiness.d.ts +1 -0
  10. package/dist/_dts/api/src/navigation/dashboardSiteNav.d.ts +2 -1
  11. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +3 -26
  12. package/dist/_dts/api/src/siteOnboarding.d.ts +7 -0
  13. package/dist/_dts/billing/src/site-arrangements.d.ts +12 -3
  14. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +4 -0
  15. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +2 -0
  16. package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +2 -0
  17. package/dist/_dts/blocks/src/system/blocks/events/eventSelectionFields.d.ts +122 -0
  18. package/dist/_dts/blocks/src/system/blocks/events/shared/calendarWindow.d.ts +2 -1
  19. package/dist/_dts/blocks/src/system/blocks/events/shared/eventSelection.d.ts +11 -0
  20. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +2 -2
  21. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +47 -47
  22. package/dist/_dts/blocks/src/system/data/prefetchBlockData.d.ts +5 -0
  23. package/dist/_dts/blocks/src/system/data/utils.d.ts +1 -1
  24. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +27 -1
  25. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +12 -180
  26. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +6 -90
  27. package/dist/_dts/blocks/src/system/runtime/hooks/useEventFilters.d.ts +2 -1
  28. package/dist/_dts/blocks/src/system/runtime/nodes/appointment-services.d.ts +5 -1
  29. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.d.ts +4 -0
  30. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.state.d.ts +5 -0
  31. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useDiscountCodeUi.d.ts +3 -0
  32. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useDiscountCodeUi.state.d.ts +10 -3
  33. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventCheckoutHandoffRestore.d.ts +9 -0
  34. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +4 -5
  35. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useSettledCommerceView.d.ts +37 -0
  36. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.client.d.ts +4 -3
  37. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.interactive.d.ts +3 -0
  38. package/dist/_dts/blocks/src/system/runtime/nodes/events/EventListing.interactive.d.ts +11 -101
  39. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +7 -2
  40. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/listOptions.d.ts +2 -0
  41. package/dist/_dts/blocks/src/system/transforms/registry/eventCalendar.d.ts +12 -0
  42. package/dist/_dts/commerce/src/purchase/bookingInstalmentSchedule.d.ts +4 -0
  43. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +3 -0
  44. package/dist/_dts/editor-blocks/src/widgets/site-option-picker/loaders.d.ts +27 -1
  45. package/dist/_dts/sdk/src/public-api/contracts.d.ts +1 -1
  46. package/dist/_dts/sdk/src/version.d.ts +1 -1
  47. package/dist/_dts/theme-core/src/ThemeFontLoader.d.ts +17 -1
  48. package/dist/_dts/theme-core/src/buttons/affordanceSuppression.d.ts +17 -0
  49. package/dist/_dts/theme-core/src/buttons/buttonColourContract.d.ts +1 -1
  50. package/dist/_dts/theme-core/src/buttons/classNames.d.ts +16 -0
  51. package/dist/_dts/theme-core/src/buttons/generateButtonCss.d.ts +0 -6
  52. package/dist/_dts/theme-core/src/buttons/resolvedButtonCss.d.ts +4 -4
  53. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  54. package/dist/_dts/theme-core/src/hosted-booking-appearance.d.ts +54 -12
  55. package/dist/_dts/theme-core/src/index.d.ts +1 -1
  56. package/dist/client/{BookingConsentAgreement-CuKa82V4.mjs → BookingConsentAgreement-xJeYNdnb.mjs} +2 -2
  57. package/dist/client/{DiscountCodeDisclosure-BbYieKWB.mjs → DiscountCodeDisclosure-DdT6uzl9.mjs} +1 -1
  58. package/dist/client/{EventCombined.client-LTfR1Aby.mjs → EventCombined.client-Cp28uYuM.mjs} +11 -15
  59. package/dist/client/{EventListing.client-DUHpYSuo.mjs → EventListing.client-CD6AJsMr.mjs} +4 -17
  60. package/dist/client/{LeafletStaticMap-CHRupL6m.mjs → LeafletStaticMap-DBsAi9-e.mjs} +1 -1
  61. package/dist/client/{accordion-6HiIFxNL.mjs → accordion-6dwbOKYR.mjs} +1 -1
  62. package/dist/client/{bookingForm-Dlmid43H.mjs → bookingForm-CZE9_qPQ.mjs} +5 -5
  63. package/dist/client/bookings.mjs +175 -93
  64. package/dist/client/{carousel-DmkZRRq_.mjs → carousel-7VHGQARz.mjs} +1 -1
  65. package/dist/client/{cart-CIC24330.mjs → cart-Qg_mvQhh.mjs} +3 -3
  66. package/dist/client/{checkout-D1Zw9imo.mjs → checkout-D84rpgdr.mjs} +3 -3
  67. package/dist/client/client.mjs +602 -139
  68. package/dist/client/{context-Cy1OayHx.mjs → context-Ctp3T0Wr.mjs} +1 -1
  69. package/dist/client/{dates-aDcfoLHr.mjs → dates-DJKFcI_N.mjs} +2 -2
  70. package/dist/client/{eventCalendar-FQxMPAjf.mjs → eventCalendar-CK31z3vs.mjs} +11 -7
  71. package/dist/client/{eventCombined-Dr3ac6Hb.mjs → eventCombined-DiXd-ewn.mjs} +3 -3
  72. package/dist/client/{eventDetails-D-AzUHFQ.mjs → eventDetails-CTRgt2DK.mjs} +4 -4
  73. package/dist/client/{eventListing-B3XxBf3i.mjs → eventListing-Dy9vi_j_.mjs} +3 -3
  74. package/dist/client/{eventRegistration-I6EaokFD.mjs → eventRegistration-CnalYMr2.mjs} +124 -31
  75. package/dist/client/{form-BbWckVWY.mjs → form-eUiMveTT.mjs} +2 -2
  76. package/dist/client/{headerSection-C9qU4Y7x.mjs → headerSection-Dy9kQpB1.mjs} +2 -2
  77. package/dist/client/hooks.mjs +247 -32
  78. package/dist/client/{locationMap-CLCShvlG.mjs → locationMap-DalCmWU0.mjs} +2 -2
  79. package/dist/client/{newsletterForm-Briukxzi.mjs → newsletterForm-SDDPvhS0.mjs} +23 -10
  80. package/dist/client/{pricing-Copadu-2.mjs → pricing-OcMz4SnX.mjs} +1 -1
  81. package/dist/client/{productDetail-oujlRd-r.mjs → productDetail-BQrgHElM.mjs} +3 -3
  82. package/dist/client/{productList-BRiIRUcd.mjs → productList-OnPn_UJj.mjs} +3 -3
  83. package/dist/client/{propsDecoder-CB2KS_ko.mjs → propsDecoder-zBdsnS-N.mjs} +38 -8
  84. package/dist/client/rendering/client.mjs +446 -121
  85. package/dist/client/rendering/islands.mjs +17 -17
  86. package/dist/client/rendering.mjs +601 -138
  87. package/dist/client/{scrollToBlock-B1IS1_ua.mjs → scrollToBlock-BNM4Ob2Y.mjs} +28 -11
  88. package/dist/client/{shop-Vn6yNFED.mjs → shop-Bv1fPTwQ.mjs} +6 -6
  89. package/dist/client/{shop-commerce-BVTqipYp.mjs → shop-commerce-D4KNGaW8.mjs} +5 -5
  90. package/dist/client/{shop-commerce-store-BVnJVy7v.mjs → shop-commerce-store-2N5EV0Rc.mjs} +1 -1
  91. package/dist/client/{shopShared-COIeK77T.mjs → shopShared-DvJGdHTV.mjs} +3 -3
  92. package/dist/client/{useEventFilters-DzIUcS9n.mjs → useEventFilters-BBBvGDHQ.mjs} +17 -11
  93. package/dist/preview-next/client/runtime.mjs +3 -3
  94. package/dist/preview-next/editor-chrome.css +4 -8
  95. package/dist/{sdk-runtime-CnCLvZRv.mjs → sdk-runtime-Defnbfzw.mjs} +1 -1
  96. package/dist/{separator-DKDRJ1oH.mjs → separator-CZXO3Sb0.mjs} +1 -1
  97. package/dist/server/components.mjs +384 -62
  98. package/dist/server/config-validation.mjs +232 -26
  99. package/dist/server/config.mjs +232 -26
  100. package/dist/server/data.mjs +247 -32
  101. package/dist/server/index.mjs +1 -1
  102. package/dist/server/next.mjs +400 -69
  103. package/dist/server/page-converter.mjs +189 -25
  104. package/dist/server/prebuild.mjs +1 -1
  105. package/dist/server/rendering/server.mjs +399 -68
  106. package/dist/server/rendering.mjs +399 -68
  107. package/dist/server/routing.mjs +261 -33
  108. package/dist/server/server.mjs +248 -33
  109. package/dist/server/theme-bridge.mjs +47 -15
  110. package/dist/server/theme.mjs +1 -1
  111. package/dist/styles/index.css +28 -2
  112. package/package.json +1 -1
@@ -6074,7 +6074,7 @@ const BUTTON_CONTRAST_POLICY = {
6074
6074
  nonTextMinimumRatio: 3,
6075
6075
  gradientSamplesPerSegment: 20,
6076
6076
  alphaBackgrounds: "reject-without-known-surface",
6077
- disabled: "retain-full-colour-contract"
6077
+ disabled: "validated-colour-pair-with-muted-control-opacity"
6078
6078
  };
6079
6079
  function validateButtonSurfaceContrast(input) {
6080
6080
  const ratio = contrastRatio(input.buttonPaint, input.surfaceHex);
@@ -16416,6 +16416,7 @@ function isDisplayMediaKind(kind) {
16416
16416
  }
16417
16417
  const siteOptionSources = [
16418
16418
  "eventCategories",
16419
+ "eventSeries",
16419
16420
  "venues",
16420
16421
  "staffMembers"
16421
16422
  ];
@@ -27286,7 +27287,8 @@ const appointmentServicesBlockDefinition = {
27286
27287
  el("appointment-services", {
27287
27288
  sectionHeading: { $bind: { from: "content.heading" } },
27288
27289
  services: { $bind: { from: "data.services" } },
27289
- pathname: { $bind: { from: "$root.pathname" } }
27290
+ pathname: { $bind: { from: "$root.pathname" } },
27291
+ servicePathPrefix: { $bind: { from: "$root.appointmentServicePathPrefix" } }
27290
27292
  })
27291
27293
  ], { gap: "lg" })
27292
27294
  })]
@@ -29375,6 +29377,35 @@ const eventSpotlightBlockDefinition = {
29375
29377
  } }
29376
29378
  };
29377
29379
  //#endregion
29380
+ //#region ../blocks/src/system/blocks/events/shared/eventSelection.ts
29381
+ /** Invalid saved selections fail closed rather than widening discovery. */
29382
+ function resolveEventSelection(mode, value) {
29383
+ if (mode !== "selected") return { kind: "matching" };
29384
+ const candidates = Array.isArray(value) ? value : typeof value === "string" ? value.split(",").filter(Boolean) : [];
29385
+ const ids = [];
29386
+ for (const candidate of candidates) {
29387
+ if (typeof candidate !== "string") return {
29388
+ kind: "selected",
29389
+ seriesIds: []
29390
+ };
29391
+ const parsed = parseEventSeriesId(candidate.trim());
29392
+ if (!parsed.ok) return {
29393
+ kind: "selected",
29394
+ seriesIds: []
29395
+ };
29396
+ ids.push(parsed.value);
29397
+ }
29398
+ return {
29399
+ kind: "selected",
29400
+ seriesIds: [...new Set(ids)].sort()
29401
+ };
29402
+ }
29403
+ /** Undefined means discovery; an empty string is an explicitly empty selection. */
29404
+ function eventSeriesScopeCsv(value) {
29405
+ if (value == null) return void 0;
29406
+ return typeof value === "string" ? value : value.join(",");
29407
+ }
29408
+ //#endregion
29378
29409
  //#region ../blocks/src/system/runtime/nodes/events/shared/listingLayout.ts
29379
29410
  /**
29380
29411
  * Layout classes for event listing containers and cards. Presentation
@@ -29503,6 +29534,7 @@ z.object({
29503
29534
  eventSurface: z.enum(eventSurfaceScopeValues).optional(),
29504
29535
  eventPresets: z.string().optional(),
29505
29536
  scheduleScope: z.enum(eventScheduleScopeValues).optional(),
29537
+ seriesIds: z.string().optional(),
29506
29538
  categoryIds: z.string().optional(),
29507
29539
  venueId: z.string().transform(normalizeCalendarFilterId).optional(),
29508
29540
  staffMemberId: z.string().transform(normalizeCalendarFilterId).optional()
@@ -29565,6 +29597,7 @@ const eventCollectionFilterSourceSchemaShape = {
29565
29597
  eventSurface: eventSurfaceScopeSchema$1.nullable().optional(),
29566
29598
  filterEventPresets: z.union([z.string(), z.array(z.string())]).nullable().optional(),
29567
29599
  scheduleScope: eventScheduleScopeSchema$1.nullable().optional(),
29600
+ seriesIds: z.union([z.string(), z.array(z.string())]).nullable().optional(),
29568
29601
  filterCategoryIds: z.union([z.string(), z.array(z.string())]).nullable().optional(),
29569
29602
  filterStaffMemberId: z.string().nullable().optional(),
29570
29603
  filterVenueId: z.string().nullable().optional()
@@ -29611,6 +29644,7 @@ const eventCollectionDisplaySchemaShape = {
29611
29644
  eventSurface: eventSurfaceScopeSchema$1,
29612
29645
  filterEventPresets: z.string().nullable(),
29613
29646
  scheduleScope: eventScheduleScopeSchema$1,
29647
+ seriesIds: z.string().nullable().optional(),
29614
29648
  filterCategoryIds: z.string().nullable(),
29615
29649
  filterStaffMemberId: z.string().nullable(),
29616
29650
  filterVenueId: z.string().nullable(),
@@ -29658,11 +29692,15 @@ function buildEventCollectionDisplay(source) {
29658
29692
  };
29659
29693
  }
29660
29694
  function buildEventCollectionFilterDisplay(source) {
29661
- return {
29662
- showFilters: source.showFilters ?? true,
29663
- showCategoryFilter: source.showCategoryFilter ?? "auto",
29664
- showVenueFilter: source.showVenueFilter ?? false,
29665
- showStaffFilter: source.showStaffFilter ?? true,
29695
+ const selected = source.seriesIds != null;
29696
+ const matchingFilters = selected ? {
29697
+ eventSurface: "all",
29698
+ filterEventPresets: null,
29699
+ scheduleScope: "any",
29700
+ filterCategoryIds: null,
29701
+ filterStaffMemberId: null,
29702
+ filterVenueId: null
29703
+ } : {
29666
29704
  eventSurface: normalizeEventSurfaceScope(source.eventSurface),
29667
29705
  filterEventPresets: normalizeEventSurfacePresetsCsv(source.filterEventPresets),
29668
29706
  scheduleScope: normalizeEventScheduleScope(source.scheduleScope),
@@ -29670,6 +29708,14 @@ function buildEventCollectionFilterDisplay(source) {
29670
29708
  filterStaffMemberId: normalizeEventStaffMemberId(source.filterStaffMemberId),
29671
29709
  filterVenueId: normalizeEventVenueId(source.filterVenueId)
29672
29710
  };
29711
+ return {
29712
+ seriesIds: eventSeriesScopeCsv(source.seriesIds),
29713
+ showFilters: selected ? false : source.showFilters ?? true,
29714
+ showCategoryFilter: source.showCategoryFilter ?? "auto",
29715
+ showVenueFilter: source.showVenueFilter ?? false,
29716
+ showStaffFilter: source.showStaffFilter ?? true,
29717
+ ...matchingFilters
29718
+ };
29673
29719
  }
29674
29720
  function buildEventCollectionPresentationDisplay(source) {
29675
29721
  return {
@@ -29684,14 +29730,15 @@ function buildEventCollectionPresentationDisplay(source) {
29684
29730
  }
29685
29731
  function buildEventCollectionHydration(source, now = /* @__PURE__ */ new Date()) {
29686
29732
  const timeZone = source.calendarWindow?.scope.timeZone ?? toBookingTimeZone(source.bookingTimeZone);
29733
+ const selected = source.seriesIds != null;
29687
29734
  return {
29688
29735
  calendarWindow: source.calendarWindow ?? void 0,
29689
29736
  siteId: source.siteId,
29690
29737
  stage: source.stage,
29691
29738
  prefetchedEvents: source.events != null,
29692
- eventSurface: normalizeEventSurfaceScope(source.eventSurface),
29693
- filterEventPresets: normalizeEventSurfacePresetsCsv(source.filterEventPresets),
29694
- scheduleScope: normalizeEventScheduleScope(source.scheduleScope),
29739
+ eventSurface: selected ? "all" : normalizeEventSurfaceScope(source.eventSurface),
29740
+ filterEventPresets: selected ? null : normalizeEventSurfacePresetsCsv(source.filterEventPresets),
29741
+ scheduleScope: selected ? "any" : normalizeEventScheduleScope(source.scheduleScope),
29695
29742
  calendarContext: {
29696
29743
  timeZone,
29697
29744
  initialToday: source.calendarWindow?.initialToday ?? getLocalScheduleDate(now, timeZone)
@@ -29757,6 +29804,7 @@ const eventListingHydrationSchema = z.object({
29757
29804
  eventSurface: eventSurfaceScopeSchema,
29758
29805
  filterEventPresets: z.string().nullable(),
29759
29806
  scheduleScope: eventScheduleScopeSchema,
29807
+ seriesIds: z.string().nullable().optional(),
29760
29808
  filterCategoryIds: z.string().nullable().optional(),
29761
29809
  filterStaffMemberId: z.string().nullable().optional(),
29762
29810
  filterVenueId: z.string().nullable().optional(),
@@ -29817,6 +29865,7 @@ const eventListingBlockRuntime = defineProgressiveBlockRuntime({
29817
29865
  eventSurface: normalizeEventSurfaceScope(source.eventSurface),
29818
29866
  filterEventPresets: normalizeEventSurfacePresetsCsv(source.filterEventPresets),
29819
29867
  scheduleScope: normalizeEventScheduleScope(source.scheduleScope),
29868
+ seriesIds: eventSeriesScopeCsv(source.seriesIds),
29820
29869
  filterCategoryIds: normalizeEventCategoryIdsCsv(source.filterCategoryIds),
29821
29870
  filterStaffMemberId: normalizeEventStaffMemberId(source.filterStaffMemberId),
29822
29871
  filterVenueId: normalizeEventVenueId(source.filterVenueId),
@@ -30190,6 +30239,65 @@ const eventListingBlockDefinition = {
30190
30239
  } }
30191
30240
  };
30192
30241
  //#endregion
30242
+ //#region ../blocks/src/system/blocks/events/eventSelectionFields.ts
30243
+ const eventSelectionFields = [{
30244
+ id: "eventSelection",
30245
+ type: "select",
30246
+ label: "Events to show",
30247
+ required: false,
30248
+ multiple: false,
30249
+ defaultValue: "matching",
30250
+ options: [{
30251
+ value: "matching",
30252
+ label: "All matching events"
30253
+ }, {
30254
+ value: "selected",
30255
+ label: "Selected events"
30256
+ }],
30257
+ ui: { intent: "behavior" }
30258
+ }, createSiteOptionSelectField({
30259
+ id: "selectedEventSeriesIds",
30260
+ label: "Selected events",
30261
+ description: "Show upcoming dates for these events. Other event filters do not apply.",
30262
+ required: false,
30263
+ multiple: true,
30264
+ defaultValue: [],
30265
+ optionSource: "eventSeries",
30266
+ ui: {
30267
+ intent: "behavior",
30268
+ searchThreshold: 1,
30269
+ visibleWhen: {
30270
+ field: "eventSelection",
30271
+ equals: "selected"
30272
+ }
30273
+ }
30274
+ })];
30275
+ function withEventSelectionVisibility(field) {
30276
+ if (![
30277
+ "eventSurface",
30278
+ "filterEventPresets",
30279
+ "scheduleScope",
30280
+ "filterCategoryIds",
30281
+ "filterStaffMemberId",
30282
+ "filterVenueId",
30283
+ "showFilters",
30284
+ "showCategoryFilter",
30285
+ "showVenueFilter",
30286
+ "showStaffFilter"
30287
+ ].includes(field.id)) return field;
30288
+ const visibleWhen = field.ui?.visibleWhen;
30289
+ return {
30290
+ ...field,
30291
+ ui: {
30292
+ ...field.ui,
30293
+ visibleWhen: { allOf: [{
30294
+ field: "eventSelection",
30295
+ notEquals: "selected"
30296
+ }, ...visibleWhen ? [visibleWhen] : []] }
30297
+ }
30298
+ };
30299
+ }
30300
+ //#endregion
30193
30301
  //#region ../blocks/src/system/runtime/nodes/events/EventCalendar.interactive.ts
30194
30302
  const eventCalendarSourceSchema = z.object({
30195
30303
  ...eventCollectionSourceSchemaShape,
@@ -30272,19 +30380,59 @@ const eventCalendarBlockRuntime = defineProgressiveBlockRuntime({
30272
30380
  //#region ../blocks/src/system/blocks/events/eventCalendarDataLoaders.ts
30273
30381
  const scopeParams = {
30274
30382
  siteId: { $bind: { from: "$root.siteId" } },
30383
+ seriesIds: { $bind: {
30384
+ from: "content",
30385
+ transforms: [{
30386
+ id: "events.calendarSelectionParam",
30387
+ options: { key: "seriesIds" }
30388
+ }]
30389
+ } },
30275
30390
  stage: { $bind: {
30276
30391
  from: "$root.previewStage",
30277
30392
  fallback: "published"
30278
30393
  } },
30279
- eventSurface: { $bind: { from: "content.eventSurface" } },
30394
+ eventSurface: { $bind: {
30395
+ from: "content",
30396
+ transforms: [{
30397
+ id: "events.calendarSelectionParam",
30398
+ options: { key: "eventSurface" }
30399
+ }, { id: "value.csv" }]
30400
+ } },
30280
30401
  eventPresets: { $bind: {
30281
- from: "content.filterEventPresets",
30282
- transforms: [{ id: "value.csv" }]
30402
+ from: "content",
30403
+ transforms: [{
30404
+ id: "events.calendarSelectionParam",
30405
+ options: { key: "filterEventPresets" }
30406
+ }, { id: "value.csv" }]
30407
+ } },
30408
+ scheduleScope: { $bind: {
30409
+ from: "content",
30410
+ transforms: [{
30411
+ id: "events.calendarSelectionParam",
30412
+ options: { key: "scheduleScope" }
30413
+ }, { id: "value.csv" }]
30283
30414
  } },
30284
- scheduleScope: { $bind: { from: "content.scheduleScope" } },
30285
- categoryIds: { $bind: { from: "content.filterCategoryIds" } },
30286
- staffMemberId: { $bind: { from: "content.filterStaffMemberId" } },
30287
- venueId: { $bind: { from: "content.filterVenueId" } }
30415
+ categoryIds: { $bind: {
30416
+ from: "content",
30417
+ transforms: [{
30418
+ id: "events.calendarSelectionParam",
30419
+ options: { key: "filterCategoryIds" }
30420
+ }, { id: "value.csv" }]
30421
+ } },
30422
+ staffMemberId: { $bind: {
30423
+ from: "content",
30424
+ transforms: [{
30425
+ id: "events.calendarSelectionParam",
30426
+ options: { key: "filterStaffMemberId" }
30427
+ }, { id: "value.csv" }]
30428
+ } },
30429
+ venueId: { $bind: {
30430
+ from: "content",
30431
+ transforms: [{
30432
+ id: "events.calendarSelectionParam",
30433
+ options: { key: "filterVenueId" }
30434
+ }, { id: "value.csv" }]
30435
+ } }
30288
30436
  };
30289
30437
  /** Combined renders two jobs; calendar-only variants never pay for the list seed. */
30290
30438
  const eventCalendarDataLoaders = {
@@ -30414,6 +30562,13 @@ const eventCalendarLayout = [styledSection({
30414
30562
  from: "content.defaultCalendarView",
30415
30563
  fallback: "month"
30416
30564
  } },
30565
+ seriesIds: { $bind: {
30566
+ from: "content",
30567
+ transforms: [{
30568
+ id: "events.calendarSelectionParam",
30569
+ options: { key: "seriesIds" }
30570
+ }]
30571
+ } },
30417
30572
  showFilters: { $bind: {
30418
30573
  from: "content.showFilters",
30419
30574
  fallback: true
@@ -30435,17 +30590,47 @@ const eventCalendarLayout = [styledSection({
30435
30590
  fallback: true
30436
30591
  } },
30437
30592
  eventSurface: { $bind: {
30438
- from: "content.eventSurface",
30439
- fallback: "all"
30593
+ from: "content",
30594
+ transforms: [{
30595
+ id: "events.calendarSelectionParam",
30596
+ options: { key: "eventSurface" }
30597
+ }]
30598
+ } },
30599
+ filterEventPresets: { $bind: {
30600
+ from: "content",
30601
+ transforms: [{
30602
+ id: "events.calendarSelectionParam",
30603
+ options: { key: "filterEventPresets" }
30604
+ }]
30440
30605
  } },
30441
- filterEventPresets: { $bind: { from: "content.filterEventPresets" } },
30442
30606
  scheduleScope: { $bind: {
30443
- from: "content.scheduleScope",
30444
- fallback: "any"
30607
+ from: "content",
30608
+ transforms: [{
30609
+ id: "events.calendarSelectionParam",
30610
+ options: { key: "scheduleScope" }
30611
+ }]
30612
+ } },
30613
+ filterCategoryIds: { $bind: {
30614
+ from: "content",
30615
+ transforms: [{
30616
+ id: "events.calendarSelectionParam",
30617
+ options: { key: "filterCategoryIds" }
30618
+ }]
30619
+ } },
30620
+ filterStaffMemberId: { $bind: {
30621
+ from: "content",
30622
+ transforms: [{
30623
+ id: "events.calendarSelectionParam",
30624
+ options: { key: "filterStaffMemberId" }
30625
+ }]
30626
+ } },
30627
+ filterVenueId: { $bind: {
30628
+ from: "content",
30629
+ transforms: [{
30630
+ id: "events.calendarSelectionParam",
30631
+ options: { key: "filterVenueId" }
30632
+ }]
30445
30633
  } },
30446
- filterCategoryIds: { $bind: { from: "content.filterCategoryIds" } },
30447
- filterStaffMemberId: { $bind: { from: "content.filterStaffMemberId" } },
30448
- filterVenueId: { $bind: { from: "content.filterVenueId" } },
30449
30634
  cardRole: { $bind: {
30450
30635
  from: "content._cardStyles.role",
30451
30636
  fallback: "default"
@@ -30949,6 +31134,7 @@ const eventCalendarAdditionalFields = [
30949
31134
  }
30950
31135
  }
30951
31136
  },
31137
+ ...eventSelectionFields,
30952
31138
  {
30953
31139
  id: "eventSurface",
30954
31140
  type: "select",
@@ -31158,7 +31344,7 @@ const eventCalendarBlockDefinition = {
31158
31344
  titleSource: "heading",
31159
31345
  description: "Display events with calendar, list, or combined views with filtering",
31160
31346
  skipSectionStyles: true,
31161
- additionalFields: eventCalendarAdditionalFields,
31347
+ additionalFields: eventCalendarAdditionalFields.map(withEventSelectionVisibility),
31162
31348
  styleTokens: {
31163
31349
  background: "surface",
31164
31350
  typography: "body",
@@ -37581,6 +37767,26 @@ const linksTransforms = [{
37581
37767
  //#endregion
37582
37768
  //#region ../blocks/src/system/transforms/registry/index.ts
37583
37769
  const builtinTransformDefinitions = [
37770
+ {
37771
+ id: "events.calendarSelectionParam",
37772
+ kind: "formatter",
37773
+ summary: "Resolve selected events instead of discovery filters",
37774
+ schema: z.object({ key: z.enum([
37775
+ "seriesIds",
37776
+ "eventSurface",
37777
+ "filterEventPresets",
37778
+ "scheduleScope",
37779
+ "filterCategoryIds",
37780
+ "filterStaffMemberId",
37781
+ "filterVenueId"
37782
+ ]) }),
37783
+ run(value, { key }) {
37784
+ const content = asPartialObject(value) ?? {};
37785
+ const selection = resolveEventSelection(content.eventSelection, content.selectedEventSeriesIds);
37786
+ if (selection.kind === "selected") return key === "seriesIds" ? selection.seriesIds : void 0;
37787
+ return key === "seriesIds" ? void 0 : content[key];
37788
+ }
37789
+ },
37584
37790
  {
37585
37791
  id: "events.calendarReadEnabled",
37586
37792
  kind: "formatter",