@riverbankcms/sdk 0.64.0 → 0.68.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 (126) hide show
  1. package/README.md +21 -11
  2. package/dist/_dts/api/src/aiPlayground.d.ts +75 -20
  3. package/dist/_dts/api/src/apiEndpointTypes.d.ts +12 -0
  4. package/dist/_dts/api/src/billing.d.ts +7 -40
  5. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +4 -1
  6. package/dist/_dts/api/src/bookingOperations.d.ts +33 -2
  7. package/dist/_dts/api/src/endpoints.d.ts +32 -0
  8. package/dist/_dts/api/src/public/types.d.ts +1 -1
  9. package/dist/_dts/api/src/sdkConfig/contracts.d.ts +0 -40
  10. package/dist/_dts/api/src/sdkContracts.d.ts +1 -1
  11. package/dist/_dts/api/src/siteMembers.d.ts +1 -1
  12. package/dist/_dts/api/src/siteOperations.d.ts +1 -1
  13. package/dist/_dts/billing/src/components/index.d.ts +426 -0
  14. package/dist/_dts/billing/src/plans/types.d.ts +1 -1
  15. package/dist/_dts/blocks/src/PageRenderer.d.ts +4 -0
  16. package/dist/_dts/blocks/src/bindings/index.d.ts +1 -1
  17. package/dist/_dts/blocks/src/client.d.ts +6 -0
  18. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  19. package/dist/_dts/blocks/src/system/runtime/hooks/useAvailableDates.d.ts +1 -0
  20. package/dist/_dts/blocks/src/system/runtime/hooks/useAvailableSlots.d.ts +3 -1
  21. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +140 -0
  22. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.state.d.ts +2 -0
  23. package/dist/_dts/blocks/src/system/runtime/hooks/useVisibleTabPolling.d.ts +10 -0
  24. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.default-ui.d.ts +8 -0
  25. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +484 -0
  26. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +5 -2
  27. package/dist/_dts/blocks/src/system/transforms/registry/formatting.d.ts +1 -0
  28. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +2 -1
  29. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +81 -0
  30. package/dist/_dts/preview-next/src/client/blocks/pageDesignRuntimePreview.d.ts +7 -3
  31. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -2
  32. package/dist/_dts/sdk/src/bookings/index.d.ts +5 -2
  33. package/dist/_dts/sdk/src/bookings/types.d.ts +2 -0
  34. package/dist/_dts/sdk/src/cli/commands/push/execute/footer.d.ts +33 -0
  35. package/dist/_dts/sdk/src/cli/commands/push/scopes/commandBackedDatedOfferingScope.d.ts +32 -0
  36. package/dist/_dts/sdk/src/cli/commands/push/scopes/types.d.ts +5 -1
  37. package/dist/_dts/sdk/src/cli/commands/push-execute.d.ts +2 -1
  38. package/dist/_dts/sdk/src/cli/env.d.ts +2 -1
  39. package/dist/_dts/sdk/src/cli/merge-remote/entryMergePush.d.ts +2 -1
  40. package/dist/_dts/sdk/src/cli/site-commands/commandKeys.d.ts +13 -0
  41. package/dist/_dts/sdk/src/cli/site-commands/commandRuntime.d.ts +144 -0
  42. package/dist/_dts/sdk/src/cli/site-commands/commandRuntimeCompat.d.ts +21 -0
  43. package/dist/_dts/sdk/src/cli/site-commands/commandSurfaceDispatch.d.ts +27 -0
  44. package/dist/_dts/sdk/src/cli/site-commands/datedOfferingCommands.d.ts +56 -0
  45. package/dist/_dts/sdk/src/cli/site-commands/entryCommands.d.ts +29 -49
  46. package/dist/_dts/sdk/src/cli/site-commands/footerCommands.d.ts +56 -0
  47. package/dist/_dts/sdk/src/cli/site-commands/formCommands.d.ts +53 -0
  48. package/dist/_dts/sdk/src/cli/site-commands/index.d.ts +6 -0
  49. package/dist/_dts/sdk/src/cli/site-commands/navigationCommands.d.ts +53 -0
  50. package/dist/_dts/sdk/src/cli/site-commands/pageCommands.d.ts +79 -0
  51. package/dist/_dts/sdk/src/cli/site-commands/pushExecution.d.ts +19 -20
  52. package/dist/_dts/sdk/src/cli/site-commands/pushExecutionPlan.d.ts +8 -0
  53. package/dist/_dts/sdk/src/cli/site-commands/pushExecutionTypes.d.ts +97 -0
  54. package/dist/_dts/sdk/src/cli/site-commands/residualSettingsTrimming.d.ts +15 -0
  55. package/dist/_dts/sdk/src/cli/sync/executor.d.ts +10 -28
  56. package/dist/_dts/sdk/src/cli/sync/index.d.ts +2 -1
  57. package/dist/_dts/sdk/src/cli/sync/syncResultAggregation.d.ts +4 -0
  58. package/dist/_dts/sdk/src/config/dashboard-validation.d.ts +0 -48
  59. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  60. package/dist/_dts/sdk/src/rendering/overrides.d.ts +2 -0
  61. package/dist/_dts/sdk/src/theme-bridge/ThemeBridgeProvider.d.ts +4 -4
  62. package/dist/_dts/sdk/src/theme-bridge/generateCssVars.d.ts +4 -12
  63. package/dist/_dts/sdk/src/theme-bridge/index.d.ts +1 -1
  64. package/dist/_dts/sdk/src/theme-bridge/types.d.ts +17 -9
  65. package/dist/_dts/sdk/src/version.d.ts +1 -1
  66. package/dist/_dts/site-commands/src/adapter.d.ts +2 -2
  67. package/dist/_dts/site-commands/src/commands.d.ts +637 -13
  68. package/dist/_dts/site-commands/src/domain.d.ts +3 -3
  69. package/dist/_dts/site-commands/src/exposure.d.ts +41 -0
  70. package/dist/_dts/site-commands/src/index.d.ts +2 -0
  71. package/dist/_dts/site-commands/src/metadata.d.ts +159 -3
  72. package/dist/_dts/site-commands/src/planner.d.ts +13 -6
  73. package/dist/_dts/site-commands/src/refContributions.d.ts +1 -0
  74. package/dist/_dts/site-commands/src/refs.d.ts +19 -1
  75. package/dist/_dts/{sdk/src/cli/merge-remote → site-commands/src}/stableJson.d.ts +2 -0
  76. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  77. package/dist/_dts/theme-core/src/index.d.ts +1 -1
  78. package/dist/_dts/theme-core/src/palette/utils/index.d.ts +1 -0
  79. package/dist/_dts/theme-core/src/palette/utils/onColor.d.ts +2 -0
  80. package/dist/_dts/theme-core/src/runtime/buildThemeRuntimeFromBridge.d.ts +30 -23
  81. package/dist/_dts/theme-core/src/site-styles/accessibleSurfaces.d.ts +83 -0
  82. package/dist/_dts/theme-core/src/site-styles/contentTemplateRuntimeCompiler.d.ts +2 -1
  83. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +89 -12
  84. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +8 -2
  85. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -0
  86. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +3 -2
  87. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +9 -6
  88. package/dist/_dts/ui/src/callout.d.ts +1 -1
  89. package/dist/cli/index.mjs +4736 -2026
  90. package/dist/client/bookings.mjs +5107 -3348
  91. package/dist/client/client.mjs +4579 -3871
  92. package/dist/client/hooks.mjs +325 -123
  93. package/dist/client/rendering/client.mjs +4474 -3869
  94. package/dist/client/rendering/islands.mjs +4234 -3639
  95. package/dist/client/rendering.mjs +4508 -3798
  96. package/dist/preview-next/before-render.mjs +75 -13
  97. package/dist/preview-next/client/runtime.mjs +3700 -2644
  98. package/dist/preview-next/middleware.mjs +75 -13
  99. package/dist/server/components.mjs +698 -383
  100. package/dist/server/config-validation.mjs +327 -125
  101. package/dist/server/config.mjs +327 -125
  102. package/dist/server/data.mjs +325 -123
  103. package/dist/server/index.mjs +92 -16
  104. package/dist/server/next.mjs +692 -377
  105. package/dist/server/page-converter.mjs +159 -41
  106. package/dist/server/prebuild.mjs +1 -1
  107. package/dist/server/rendering/server.mjs +700 -383
  108. package/dist/server/rendering.mjs +700 -383
  109. package/dist/server/routing.mjs +406 -131
  110. package/dist/server/server.mjs +326 -124
  111. package/dist/server/theme-bridge.mjs +1226 -4697
  112. package/dist/styles/index.css +38 -38
  113. package/package.json +1 -1
  114. package/dist/_dts/blocks/src/system/runtime/components/booking/DateTimeSelectionStep.d.ts +0 -18
  115. package/dist/_dts/blocks/src/system/runtime/components/booking/PaymentOptionSelectionStep.d.ts +0 -9
  116. package/dist/_dts/blocks/src/system/runtime/components/booking/ServiceResourceSelector.d.ts +0 -44
  117. package/dist/_dts/blocks/src/system/runtime/components/booking/ServiceResourceSelector.state.d.ts +0 -23
  118. package/dist/_dts/blocks/src/system/runtime/components/booking/ServiceSelectionStep.d.ts +0 -18
  119. package/dist/_dts/blocks/src/system/runtime/components/booking/slotDisplay.d.ts +0 -2
  120. package/dist/_dts/blocks/src/system/runtime/components/multi-step/MultiStepForm.d.ts +0 -21
  121. package/dist/_dts/blocks/src/system/runtime/components/multi-step/useMultiStep.d.ts +0 -15
  122. package/dist/_dts/blocks/src/system/runtime/components/multi-step/useMultiStep.state.d.ts +0 -51
  123. package/dist/_dts/blocks/src/system/runtime/hooks/useBookingSteps.d.ts +0 -22
  124. package/dist/_dts/path-utils/src/index.d.ts +0 -8
  125. package/dist/_dts/path-utils/src/redirectPaths.d.ts +0 -26
  126. package/dist/_dts/path-utils/src/safeAppPath.d.ts +0 -26
@@ -53,6 +53,17 @@ function parsePublicProductCategorySelector(value) {
53
53
  return void 0;
54
54
  }
55
55
 
56
+ // ../api/src/apiEndpointTypes.ts
57
+ function blockedDemoMutationPolicy(classification, publicMessage) {
58
+ if (publicMessage.trim() === "") {
59
+ throw new Error(`Demo mutation policy ${classification} requires publicMessage.`);
60
+ }
61
+ return {
62
+ classification,
63
+ publicMessage
64
+ };
65
+ }
66
+
56
67
  // ../api/src/cache-tags.ts
57
68
  var TAG_TEMPLATES = {
58
69
  siteCollection: "riverbank:site",
@@ -83,6 +94,18 @@ var TAG_TEMPLATES = {
83
94
  };
84
95
 
85
96
  // ../api/src/endpoints.ts
97
+ var DEMO_MUTATION_BLOCKED_HIDDEN = blockedDemoMutationPolicy(
98
+ "blocked-hidden",
99
+ "This action is not available in demo sites."
100
+ );
101
+ var DEMO_MUTATION_BLOCKED_DISABLED = blockedDemoMutationPolicy(
102
+ "blocked-disabled",
103
+ "This setting is disabled in demo sites."
104
+ );
105
+ var DEMO_MUTATION_INTERNAL_ONLY = blockedDemoMutationPolicy(
106
+ "internal-only",
107
+ "This internal operation is not available in demo sites."
108
+ );
86
109
  var ENDPOINT_DEFINITIONS = {
87
110
  // AI endpoints - no cache due to dynamic nature
88
111
  aiContentUpdateChat: {
@@ -199,7 +222,8 @@ var ENDPOINT_DEFINITIONS = {
199
222
  path: "/sites/{siteId}/ai/generate",
200
223
  method: "POST",
201
224
  auth: "user",
202
- responseKind: "json"
225
+ responseKind: "json",
226
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
203
227
  },
204
228
  getOnboardingPreviewStatus: {
205
229
  path: "/public/sites/{siteId}/onboarding/preview-status",
@@ -220,7 +244,8 @@ var ENDPOINT_DEFINITIONS = {
220
244
  method: "POST",
221
245
  auth: "user",
222
246
  errors: [],
223
- responseKind: "json"
247
+ responseKind: "json",
248
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED
224
249
  },
225
250
  goLiveSite: {
226
251
  path: "/sites/{siteId}/launch/go-live",
@@ -289,20 +314,23 @@ var ENDPOINT_DEFINITIONS = {
289
314
  path: "/sites/{siteId}/ai/site-wizard/goals",
290
315
  method: "POST",
291
316
  auth: "user",
292
- responseKind: "json"
317
+ responseKind: "json",
318
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
293
319
  },
294
320
  aiSiteWizardIntakeTriage: {
295
321
  path: "/sites/{siteId}/ai/site-wizard/intake-triage",
296
322
  method: "POST",
297
323
  auth: "user",
298
- responseKind: "json"
324
+ responseKind: "json",
325
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
299
326
  },
300
327
  aiSiteWizardTelemetry: {
301
328
  path: "/sites/{siteId}/ai/site-wizard/telemetry",
302
329
  method: "POST",
303
330
  auth: "user",
304
331
  errors: [],
305
- responseKind: "json"
332
+ responseKind: "json",
333
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
306
334
  },
307
335
  // Admin SEO
308
336
  listGscPropertiesAdmin: {
@@ -509,7 +537,7 @@ var ENDPOINT_DEFINITIONS = {
509
537
  responseKind: "json",
510
538
  errors: ["resource:not_found", "server:internal_error"]
511
539
  },
512
- // Ops (event hosts/admins)
540
+ // Ops (staff event operators/admins)
513
541
  opsListUpcomingEventOccurrences: {
514
542
  path: "/ops/sites/{siteId}/events",
515
543
  method: "GET",
@@ -527,6 +555,7 @@ var ENDPOINT_DEFINITIONS = {
527
555
  method: "POST",
528
556
  auth: "user",
529
557
  responseKind: "json",
558
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
530
559
  errors: [
531
560
  "validation:invalid_input",
532
561
  "auth:forbidden",
@@ -539,6 +568,7 @@ var ENDPOINT_DEFINITIONS = {
539
568
  method: "POST",
540
569
  auth: "user",
541
570
  responseKind: "json",
571
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
542
572
  errors: [
543
573
  "validation:invalid_input",
544
574
  "auth:forbidden",
@@ -557,6 +587,7 @@ var ENDPOINT_DEFINITIONS = {
557
587
  method: "POST",
558
588
  auth: "user",
559
589
  responseKind: "json",
590
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
560
591
  errors: [
561
592
  "validation:invalid_input",
562
593
  "auth:forbidden",
@@ -590,6 +621,7 @@ var ENDPOINT_DEFINITIONS = {
590
621
  method: "POST",
591
622
  auth: "user",
592
623
  responseKind: "json",
624
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
593
625
  errors: [
594
626
  "validation:invalid_input",
595
627
  "auth:forbidden",
@@ -618,7 +650,8 @@ var ENDPOINT_DEFINITIONS = {
618
650
  method: "POST",
619
651
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings],
620
652
  auth: "user",
621
- responseKind: "json"
653
+ responseKind: "json",
654
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
622
655
  },
623
656
  previewEmailTemplate: {
624
657
  path: "/sites/{siteId}/settings/emails/preview",
@@ -669,14 +702,16 @@ var ENDPOINT_DEFINITIONS = {
669
702
  method: "POST",
670
703
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
671
704
  auth: "user",
672
- responseKind: "json"
705
+ responseKind: "json",
706
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
673
707
  },
674
708
  createNewsletterSubscribersImportUploadUrl: {
675
709
  path: "/sites/{siteId}/newsletter/subscribers/import-url",
676
710
  method: "POST",
677
711
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
678
712
  auth: "user",
679
- responseKind: "json"
713
+ responseKind: "json",
714
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
680
715
  },
681
716
  exportNewsletterSubscribersCsv: {
682
717
  path: "/sites/{siteId}/newsletter/subscribers/export.csv",
@@ -873,14 +908,16 @@ var ENDPOINT_DEFINITIONS = {
873
908
  method: "POST",
874
909
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
875
910
  auth: "user",
876
- responseKind: "json"
911
+ responseKind: "json",
912
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
877
913
  },
878
914
  testSendNewsletterCampaign: {
879
915
  path: "/sites/{siteId}/newsletter/campaigns/{campaignId}/test-send",
880
916
  method: "POST",
881
917
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
882
918
  auth: "user",
883
- responseKind: "json"
919
+ responseKind: "json",
920
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
884
921
  },
885
922
  listNewsletterSendJobs: {
886
923
  path: "/sites/{siteId}/newsletter/jobs",
@@ -928,6 +965,20 @@ var ENDPOINT_DEFINITIONS = {
928
965
  responseKind: "json",
929
966
  errors: ["validation:invalid_input", "billing:plan_limit_exceeded", "server:internal_error"]
930
967
  },
968
+ createAppointmentResourceWithAccountAccess: {
969
+ path: "/sites/{siteId}/bookings/resources/account-access",
970
+ method: "POST",
971
+ auth: "user",
972
+ responseKind: "json",
973
+ errors: [
974
+ "validation:invalid_input",
975
+ "auth:forbidden",
976
+ "billing:plan_limit_exceeded",
977
+ "resource:conflict",
978
+ "resource:not_found",
979
+ "server:internal_error"
980
+ ]
981
+ },
931
982
  getAppointmentResource: {
932
983
  path: "/sites/{siteId}/bookings/resources/{resourceId}",
933
984
  method: "GET",
@@ -1568,7 +1619,8 @@ var ENDPOINT_DEFINITIONS = {
1568
1619
  method: "DELETE",
1569
1620
  tags: ["site", "site-{siteId}"],
1570
1621
  auth: "user",
1571
- responseKind: "json"
1622
+ responseKind: "json",
1623
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
1572
1624
  },
1573
1625
  listSiteMembers: {
1574
1626
  path: "/sites/{siteId}/members",
@@ -2024,7 +2076,8 @@ var ENDPOINT_DEFINITIONS = {
2024
2076
  method: "POST",
2025
2077
  tags: ["site-{siteId}", "content-{siteId}-{type}"],
2026
2078
  auth: "user",
2027
- responseKind: "json"
2079
+ responseKind: "json",
2080
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
2028
2081
  },
2029
2082
  updateSiteGeneralSettings: {
2030
2083
  path: "/sites/{siteId}/settings/general",
@@ -4263,6 +4316,7 @@ var ENDPOINT_DEFINITIONS = {
4263
4316
  method: "POST",
4264
4317
  tags: ["site-{siteId}"],
4265
4318
  auth: "user",
4319
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN,
4266
4320
  errors: [
4267
4321
  "validation:invalid_input",
4268
4322
  "auth:forbidden",
@@ -4277,6 +4331,7 @@ var ENDPOINT_DEFINITIONS = {
4277
4331
  method: "POST",
4278
4332
  tags: ["site-{siteId}"],
4279
4333
  auth: "user",
4334
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN,
4280
4335
  errors: [
4281
4336
  "validation:invalid_input",
4282
4337
  "auth:forbidden",
@@ -4586,6 +4641,7 @@ var ENDPOINT_DEFINITIONS = {
4586
4641
  tags: ["site-{siteId}", "passes-{siteId}"],
4587
4642
  auth: "user",
4588
4643
  responseKind: "json",
4644
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4589
4645
  errors: ["validation:invalid_input", "server:internal_error"]
4590
4646
  },
4591
4647
  getBookingPass: {
@@ -4601,6 +4657,7 @@ var ENDPOINT_DEFINITIONS = {
4601
4657
  tags: ["site-{siteId}", "passes-{siteId}"],
4602
4658
  auth: "user",
4603
4659
  responseKind: "json",
4660
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4604
4661
  errors: [
4605
4662
  "validation:invalid_input",
4606
4663
  "resource:not_found",
@@ -4613,6 +4670,7 @@ var ENDPOINT_DEFINITIONS = {
4613
4670
  tags: ["site-{siteId}", "passes-{siteId}"],
4614
4671
  auth: "user",
4615
4672
  responseKind: "json",
4673
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4616
4674
  errors: [
4617
4675
  "validation:invalid_input",
4618
4676
  "resource:not_found",
@@ -4668,6 +4726,7 @@ var ENDPOINT_DEFINITIONS = {
4668
4726
  tags: ["site-{siteId}", "memberships-{siteId}"],
4669
4727
  auth: "user",
4670
4728
  responseKind: "json",
4729
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4671
4730
  errors: ["validation:invalid_input", "server:internal_error"]
4672
4731
  },
4673
4732
  getBookingMembership: {
@@ -4683,6 +4742,7 @@ var ENDPOINT_DEFINITIONS = {
4683
4742
  tags: ["site-{siteId}", "memberships-{siteId}"],
4684
4743
  auth: "user",
4685
4744
  responseKind: "json",
4745
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4686
4746
  errors: [
4687
4747
  "validation:invalid_input",
4688
4748
  "resource:not_found",
@@ -4695,6 +4755,7 @@ var ENDPOINT_DEFINITIONS = {
4695
4755
  tags: ["site-{siteId}", "memberships-{siteId}"],
4696
4756
  auth: "user",
4697
4757
  responseKind: "json",
4758
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4698
4759
  errors: [
4699
4760
  "validation:invalid_input",
4700
4761
  "resource:not_found",
@@ -4911,6 +4972,7 @@ var ENDPOINT_DEFINITIONS = {
4911
4972
  tags: ["site-{siteId}", "customers-{siteId}"],
4912
4973
  auth: "user",
4913
4974
  responseKind: "json",
4975
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4914
4976
  errors: [
4915
4977
  "validation:invalid_input",
4916
4978
  "auth:forbidden",
@@ -6729,7 +6791,7 @@ var SimpleCache = class {
6729
6791
  };
6730
6792
 
6731
6793
  // src/version.ts
6732
- var SDK_VERSION = "0.64.0";
6794
+ var SDK_VERSION = "0.68.0";
6733
6795
 
6734
6796
  // src/client/error.ts
6735
6797
  var RiverbankApiError = class _RiverbankApiError extends Error {
@@ -8906,8 +8968,7 @@ var dashboardNavVisibilityBaseSchema = z5.object({
8906
8968
  var dashboardNavVisibilityRolesSchema = z5.object({
8907
8969
  administrator: dashboardNavVisibilityBaseSchema.optional(),
8908
8970
  editor: dashboardNavVisibilityBaseSchema.optional(),
8909
- team_member: dashboardNavVisibilityBaseSchema.optional(),
8910
- event_host: dashboardNavVisibilityBaseSchema.optional()
8971
+ team_member: dashboardNavVisibilityBaseSchema.optional()
8911
8972
  }).strip().optional();
8912
8973
  var dashboardNavVisibilitySchema = dashboardNavVisibilityBaseSchema.extend({
8913
8974
  roles: dashboardNavVisibilityRolesSchema
@@ -9421,6 +9482,21 @@ var appointmentSetupServiceDraftSchema = z7.object({
9421
9482
  timezone: z7.string().trim().min(1).nullable(),
9422
9483
  payment: appointmentSetupPaymentDraftSchema,
9423
9484
  assignment: appointmentSetupServiceAssignmentDraftSchema
9485
+ }).superRefine((service, ctx) => {
9486
+ if (service.payment.priceType === "paid" && (service.priceAmount === null || service.priceAmount <= 0)) {
9487
+ ctx.addIssue({
9488
+ code: "custom",
9489
+ path: ["priceAmount"],
9490
+ message: "Paid appointment services need a positive price."
9491
+ });
9492
+ }
9493
+ if (service.payment.priceType === "free" && service.priceAmount !== null && service.priceAmount > 0) {
9494
+ ctx.addIssue({
9495
+ code: "custom",
9496
+ path: ["priceAmount"],
9497
+ message: "Free appointment services cannot carry a positive price."
9498
+ });
9499
+ }
9424
9500
  });
9425
9501
  var appointmentSetupPractitionerDraftSchema = z7.object({
9426
9502
  ref: appointmentSetupRefSchema,
@@ -9758,6 +9834,71 @@ function registerManifest(manifest) {
9758
9834
  return manifest;
9759
9835
  }
9760
9836
 
9837
+ // ../theme-core/src/palette/utils/colorConversion.ts
9838
+ var mod = (a, n) => (a % n + n) % n;
9839
+ var deg = (x) => mod(x, 360);
9840
+ function hexToRgb(hex) {
9841
+ const h = hex.replace(/^#/, "");
9842
+ const m = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
9843
+ if (m.length !== 6) throw new Error("Bad hex");
9844
+ const int = parseInt(m, 16);
9845
+ return { r: int >> 16 & 255, g: int >> 8 & 255, b: int & 255 };
9846
+ }
9847
+ function srgbToLinear(u) {
9848
+ const x = u / 255;
9849
+ return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
9850
+ }
9851
+ function rgbToHsl(r, g, b) {
9852
+ const R = r / 255, G = g / 255, B = b / 255;
9853
+ const max = Math.max(R, G, B), min = Math.min(R, G, B);
9854
+ const d = max - min;
9855
+ let h = 0;
9856
+ if (d !== 0) {
9857
+ switch (max) {
9858
+ case R:
9859
+ h = (G - B) / d + (G < B ? 6 : 0);
9860
+ break;
9861
+ case G:
9862
+ h = (B - R) / d + 2;
9863
+ break;
9864
+ case B:
9865
+ h = (R - G) / d + 4;
9866
+ break;
9867
+ }
9868
+ h *= 60;
9869
+ }
9870
+ const l = (max + min) / 2;
9871
+ const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1));
9872
+ return { h, s, l };
9873
+ }
9874
+ function srgbToOklab(r, g, b) {
9875
+ const R = srgbToLinear(r), G = srgbToLinear(g), B = srgbToLinear(b);
9876
+ const l = 0.4122214708 * R + 0.5363325363 * G + 0.0514459929 * B;
9877
+ const m = 0.2119034982 * R + 0.6806995451 * G + 0.1073969566 * B;
9878
+ const s = 0.0883024619 * R + 0.2817188376 * G + 0.6299787005 * B;
9879
+ const l_ = Math.cbrt(l), m_ = Math.cbrt(m), s_ = Math.cbrt(s);
9880
+ const L = 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_;
9881
+ const a = 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_;
9882
+ const b2 = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_;
9883
+ return { L, a, b: b2 };
9884
+ }
9885
+ function oklabToOklch(L, a, b) {
9886
+ const C = Math.sqrt(a * a + b * b);
9887
+ const h = C < 1e-7 ? 0 : deg(Math.atan2(b, a) * 180 / Math.PI);
9888
+ return { L, C, h };
9889
+ }
9890
+ function featuresFromHex(hex) {
9891
+ const { r, g, b } = hexToRgb(hex);
9892
+ const { h, s, l } = rgbToHsl(r, g, b);
9893
+ const { L, a, b: b2 } = srgbToOklab(r, g, b);
9894
+ const { L: okL, C: okC, h: okH } = oklabToOklch(L, a, b2);
9895
+ const max = Math.max(r, g, b);
9896
+ const v = max / 255;
9897
+ const Y = 0.2126 * srgbToLinear(r) + 0.7152 * srgbToLinear(g) + 0.0722 * srgbToLinear(b);
9898
+ const chroma = s;
9899
+ return { r, g, b, h, s, l, v, Y, chroma, okL, okC, okH, hex };
9900
+ }
9901
+
9761
9902
  // ../theme-core/src/site-styles/appearancePresetResolution.ts
9762
9903
  function assertValidOptionGroups(preset2) {
9763
9904
  preset2.optionGroups?.forEach((group) => {
@@ -13287,6 +13428,9 @@ var curatedSiteStyleIdValues = [
13287
13428
  "site-style:bright-community",
13288
13429
  "site-style:quiet-luxury",
13289
13430
  "site-style:practical-services",
13431
+ "site-style:quiet-practice",
13432
+ "site-style:personal-retreat-journal",
13433
+ "site-style:tactile-workshop",
13290
13434
  "site-style:modern-wellness",
13291
13435
  "site-style:bold-launch",
13292
13436
  "site-style:south-west-twerk-school"
@@ -13369,7 +13513,8 @@ function defineCuratedSiteStyle(input) {
13369
13513
  name: input.name,
13370
13514
  description: input.description,
13371
13515
  generationBrief: input.generationBrief,
13372
- selectionKeywords: input.selectionKeywords ?? [],
13516
+ selectionKeywordRules: input.selectionKeywordRules ?? [],
13517
+ siteCreatorSelection: input.siteCreatorSelection ?? { kind: "explicit_only" },
13373
13518
  template: {
13374
13519
  id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
13375
13520
  name: input.name,
@@ -13513,12 +13658,13 @@ var curatedSiteStyles = [
13513
13658
  name: "Quiet Luxury",
13514
13659
  description: "Minimal, confident, and refined for premium experiences and private services.",
13515
13660
  generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
13516
- selectionKeywords: [
13517
- "luxury",
13518
- "premium",
13519
- "boutique",
13520
- "bespoke",
13521
- "exclusive"
13661
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 20 },
13662
+ selectionKeywordRules: [
13663
+ { kind: "word", value: "luxury" },
13664
+ { kind: "word", value: "premium" },
13665
+ { kind: "word", value: "boutique" },
13666
+ { kind: "word", value: "bespoke" },
13667
+ { kind: "word", value: "exclusive" }
13522
13668
  ],
13523
13669
  tokenRecipes: {
13524
13670
  palette: "high-contrast",
@@ -13547,13 +13693,14 @@ var curatedSiteStyles = [
13547
13693
  name: "Practical Services",
13548
13694
  description: "Efficient, plainspoken, and conversion-focused for trades and everyday services.",
13549
13695
  generationBrief: "Make services, location, trust signals, and contact paths obvious. Keep copy brief and avoid ornate visual treatments.",
13550
- selectionKeywords: [
13551
- "repair",
13552
- "plumb",
13553
- "electric",
13554
- "cleaning",
13555
- "landscap",
13556
- "contractor"
13696
+ siteCreatorSelection: { kind: "primary_goal_support" },
13697
+ selectionKeywordRules: [
13698
+ { kind: "word", value: "repair" },
13699
+ { kind: "substring", value: "plumb" },
13700
+ { kind: "substring", value: "electric" },
13701
+ { kind: "word", value: "cleaning" },
13702
+ { kind: "substring", value: "landscap" },
13703
+ { kind: "substring", value: "contractor" }
13557
13704
  ],
13558
13705
  tokenRecipes: {
13559
13706
  palette: "brand-led",
@@ -13604,18 +13751,134 @@ var curatedSiteStyles = [
13604
13751
  paletteChoice("warm-neutral-forest")
13605
13752
  ]
13606
13753
  }),
13754
+ defineCuratedSiteStyle({
13755
+ id: "site-style:quiet-practice",
13756
+ name: "Quiet Practice",
13757
+ description: "Grounded, calm, and practical for small appointment-first practices.",
13758
+ generationBrief: "Make services, practitioner trust, preparation notes, and booking routes easy to scan. Keep the tone warm and specific, with quiet confidence rather than spa cliches or medical claims.",
13759
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 30 },
13760
+ selectionKeywordRules: [
13761
+ { kind: "substring", value: "massage" },
13762
+ { kind: "word", value: "bodywork" },
13763
+ { kind: "phrase", value: "appointment practice" },
13764
+ { kind: "phrase", value: "appointment-first" },
13765
+ { kind: "substring", value: "practitioner" },
13766
+ { kind: "substring", value: "therap" },
13767
+ { kind: "substring", value: "clinic" },
13768
+ { kind: "phrase", value: "wellness practice" }
13769
+ ],
13770
+ tokenRecipes: {
13771
+ palette: "soft-natural",
13772
+ contrast: "standard",
13773
+ radius: "soft",
13774
+ shadow: "subtle",
13775
+ typography: "clean-sans",
13776
+ spacing: "regular",
13777
+ motion: "subtle"
13778
+ },
13779
+ compositionBudget: quietBudget,
13780
+ recommendedHeaderLookIds: ["practical-utility", "clean-base", "centered-calm"],
13781
+ buttonPersonalityChoices: [
13782
+ buttonChoice("pebble"),
13783
+ buttonChoice("soft-pill"),
13784
+ buttonChoice("editorial-link")
13785
+ ],
13786
+ paletteVariantChoices: [
13787
+ paletteChoice("soft-natural-stone"),
13788
+ paletteChoice("soft-natural-sage"),
13789
+ paletteChoice("warm-neutral-clay")
13790
+ ]
13791
+ }),
13792
+ defineCuratedSiteStyle({
13793
+ id: "site-style:personal-retreat-journal",
13794
+ name: "Personal Retreat Journal",
13795
+ description: "Warm, story-led, and readable for solo practitioners with mixed offers.",
13796
+ generationBrief: "Center the practitioner as the guide, then make private sessions, classes, retreats, and resources feel like clear pathways. Keep retreat copy grounded and practical, with enough editorial warmth for longer reading.",
13797
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 40 },
13798
+ selectionKeywordRules: [
13799
+ { kind: "substring", value: "retreat" },
13800
+ { kind: "phrase", value: "solo practitioner" },
13801
+ { kind: "phrase", value: "personal brand" },
13802
+ { kind: "substring", value: "teacher" },
13803
+ { kind: "substring", value: "coach" },
13804
+ { kind: "phrase", value: "retreat resources" },
13805
+ { kind: "substring", value: "journal" }
13806
+ ],
13807
+ tokenRecipes: {
13808
+ palette: "warm-neutral",
13809
+ contrast: "standard",
13810
+ radius: "soft",
13811
+ shadow: "subtle",
13812
+ typography: "serif-editorial",
13813
+ spacing: "airy",
13814
+ motion: "subtle"
13815
+ },
13816
+ compositionBudget: balancedBudget,
13817
+ recommendedHeaderLookIds: ["editorial-line", "centered-calm", "minimal-transparent"],
13818
+ buttonPersonalityChoices: [
13819
+ buttonChoice("editorial-link"),
13820
+ buttonChoice("soft-pill"),
13821
+ buttonChoice("brushed-wash")
13822
+ ],
13823
+ paletteVariantChoices: [
13824
+ paletteChoice("warm-neutral-forest"),
13825
+ paletteChoice("warm-neutral-clay"),
13826
+ paletteChoice("soft-natural-stone")
13827
+ ]
13828
+ }),
13829
+ defineCuratedSiteStyle({
13830
+ id: "site-style:tactile-workshop",
13831
+ name: "Tactile Workshop",
13832
+ description: "Bright, hands-on, and image-led for maker studios, workshops, and creative classes.",
13833
+ generationBrief: "Lead with objects, materials, studio process, and practical booking detail. Keep the tone warm and direct, with useful mess, clear dates, and enough gallery rhythm to feel like a real creative studio.",
13834
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 50 },
13835
+ selectionKeywordRules: [
13836
+ { kind: "substring", value: "ceramic" },
13837
+ { kind: "word", value: "pottery" },
13838
+ { kind: "phrase", value: "maker studio" },
13839
+ { kind: "phrase", value: "craft class" },
13840
+ { kind: "phrase", value: "craft workshop" },
13841
+ { kind: "word", value: "clay" },
13842
+ { kind: "word", value: "kiln" }
13843
+ ],
13844
+ tokenRecipes: {
13845
+ palette: "brand-led",
13846
+ contrast: "standard",
13847
+ radius: "soft",
13848
+ shadow: "subtle",
13849
+ typography: "friendly-sans",
13850
+ spacing: "regular",
13851
+ motion: "subtle"
13852
+ },
13853
+ compositionBudget: balancedBudget,
13854
+ recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
13855
+ recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
13856
+ buttonPersonalityChoices: [
13857
+ buttonChoice("pebble"),
13858
+ buttonChoice("confident-chip"),
13859
+ buttonChoice("ink-stamp"),
13860
+ buttonChoice("editorial-link")
13861
+ ],
13862
+ paletteVariantChoices: [
13863
+ paletteChoice("brand-led-warm"),
13864
+ paletteChoice("brand-led-cool"),
13865
+ paletteChoice("soft-natural-watercolor"),
13866
+ paletteChoice("warm-neutral-clay")
13867
+ ]
13868
+ }),
13607
13869
  defineCuratedSiteStyle({
13608
13870
  id: "site-style:bold-launch",
13609
13871
  name: "Bold Launch",
13610
13872
  description: "High-energy and punchy for launches, campaigns, and creative offers.",
13611
13873
  generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
13612
- selectionKeywords: [
13613
- "launch",
13614
- "campaign",
13615
- "preorder",
13616
- "pre-order",
13617
- "waitlist",
13618
- "drop"
13874
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 10 },
13875
+ selectionKeywordRules: [
13876
+ { kind: "substring", value: "launch" },
13877
+ { kind: "substring", value: "campaign" },
13878
+ { kind: "word", value: "preorder" },
13879
+ { kind: "phrase", value: "pre-order" },
13880
+ { kind: "substring", value: "waitlist" },
13881
+ { kind: "word", value: "drop" }
13619
13882
  ],
13620
13883
  tokenRecipes: {
13621
13884
  palette: "high-contrast",
@@ -13646,15 +13909,6 @@ var curatedSiteStyles = [
13646
13909
  name: "South West Twerk School",
13647
13910
  description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
13648
13911
  generationBrief: "Use confident rhythm, bold burgundy-and-gold accents, large editorial intro copy, strong booking routes, and dark feature sections where proof or forms need emphasis.",
13649
- selectionKeywords: [
13650
- "dance",
13651
- "classes",
13652
- "workshop",
13653
- "school",
13654
- "movement",
13655
- "performance",
13656
- "community"
13657
- ],
13658
13912
  tokenRecipes: {
13659
13913
  palette: "brand-led",
13660
13914
  contrast: "maximum",
@@ -13961,25 +14215,19 @@ var defaultDesignRuntimeRules = defineDesignRuntimeRules({
13961
14215
  "muted-band": {
13962
14216
  background: {
13963
14217
  type: "color",
13964
- color: "muted",
13965
- textColor: "text",
13966
- headingColor: "text"
14218
+ color: "muted"
13967
14219
  }
13968
14220
  },
13969
14221
  "accent-band": {
13970
14222
  background: {
13971
14223
  type: "color",
13972
- color: "primary",
13973
- textColor: "primaryForeground",
13974
- headingColor: "primaryForeground"
14224
+ color: "primary"
13975
14225
  }
13976
14226
  },
13977
14227
  "brand-depth-band": {
13978
14228
  background: {
13979
14229
  type: "color",
13980
- color: "primary-800",
13981
- textColor: "primaryForeground",
13982
- headingColor: "primaryForeground"
14230
+ color: "primary-800"
13983
14231
  }
13984
14232
  },
13985
14233
  "hero-image": {
@@ -20087,6 +20335,16 @@ var jsonArrayTransform = {
20087
20335
  return "";
20088
20336
  }
20089
20337
  };
20338
+ var csvTransform = {
20339
+ id: "value.csv",
20340
+ kind: "formatter",
20341
+ summary: "Normalize a string or array of strings into a comma-separated list",
20342
+ run: (value) => {
20343
+ const rawValues = Array.isArray(value) ? value : typeof value === "string" ? value.split(",") : [];
20344
+ const normalized = rawValues.filter((item) => typeof item === "string").map((item) => item.trim()).filter(Boolean);
20345
+ return normalized.length > 0 ? Array.from(new Set(normalized)).join(",") : "";
20346
+ }
20347
+ };
20090
20348
  var marqueeLoopOptionsSchema = z36.object({
20091
20349
  minItems: z36.number().int().min(1).default(10)
20092
20350
  });
@@ -20112,6 +20370,7 @@ var formattingTransforms = [
20112
20370
  dateFormatShort,
20113
20371
  arrayLengthTransform,
20114
20372
  jsonArrayTransform,
20373
+ csvTransform,
20115
20374
  marqueeLoopTransform
20116
20375
  ];
20117
20376
 
@@ -20595,73 +20854,6 @@ var uiTransforms = [
20595
20854
 
20596
20855
  // ../blocks/src/system/transforms/registry/layout.ts
20597
20856
  import { z as z38 } from "zod";
20598
-
20599
- // ../theme-core/src/palette/utils/colorConversion.ts
20600
- var mod = (a, n) => (a % n + n) % n;
20601
- var deg = (x) => mod(x, 360);
20602
- function hexToRgb(hex) {
20603
- const h = hex.replace(/^#/, "");
20604
- const m = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
20605
- if (m.length !== 6) throw new Error("Bad hex");
20606
- const int = parseInt(m, 16);
20607
- return { r: int >> 16 & 255, g: int >> 8 & 255, b: int & 255 };
20608
- }
20609
- function srgbToLinear(u) {
20610
- const x = u / 255;
20611
- return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
20612
- }
20613
- function rgbToHsl(r, g, b) {
20614
- const R = r / 255, G = g / 255, B = b / 255;
20615
- const max = Math.max(R, G, B), min = Math.min(R, G, B);
20616
- const d = max - min;
20617
- let h = 0;
20618
- if (d !== 0) {
20619
- switch (max) {
20620
- case R:
20621
- h = (G - B) / d + (G < B ? 6 : 0);
20622
- break;
20623
- case G:
20624
- h = (B - R) / d + 2;
20625
- break;
20626
- case B:
20627
- h = (R - G) / d + 4;
20628
- break;
20629
- }
20630
- h *= 60;
20631
- }
20632
- const l = (max + min) / 2;
20633
- const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1));
20634
- return { h, s, l };
20635
- }
20636
- function srgbToOklab(r, g, b) {
20637
- const R = srgbToLinear(r), G = srgbToLinear(g), B = srgbToLinear(b);
20638
- const l = 0.4122214708 * R + 0.5363325363 * G + 0.0514459929 * B;
20639
- const m = 0.2119034982 * R + 0.6806995451 * G + 0.1073969566 * B;
20640
- const s = 0.0883024619 * R + 0.2817188376 * G + 0.6299787005 * B;
20641
- const l_ = Math.cbrt(l), m_ = Math.cbrt(m), s_ = Math.cbrt(s);
20642
- const L = 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_;
20643
- const a = 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_;
20644
- const b2 = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_;
20645
- return { L, a, b: b2 };
20646
- }
20647
- function oklabToOklch(L, a, b) {
20648
- const C = Math.sqrt(a * a + b * b);
20649
- const h = C < 1e-7 ? 0 : deg(Math.atan2(b, a) * 180 / Math.PI);
20650
- return { L, C, h };
20651
- }
20652
- function featuresFromHex(hex) {
20653
- const { r, g, b } = hexToRgb(hex);
20654
- const { h, s, l } = rgbToHsl(r, g, b);
20655
- const { L, a, b: b2 } = srgbToOklab(r, g, b);
20656
- const { L: okL, C: okC, h: okH } = oklabToOklch(L, a, b2);
20657
- const max = Math.max(r, g, b);
20658
- const v = max / 255;
20659
- const Y = 0.2126 * srgbToLinear(r) + 0.7152 * srgbToLinear(g) + 0.0722 * srgbToLinear(b);
20660
- const chroma = s;
20661
- return { r, g, b, h, s, l, v, Y, chroma, okL, okC, okH, hex };
20662
- }
20663
-
20664
- // ../blocks/src/system/transforms/registry/layout.ts
20665
20857
  var joinClasses4 = (parts) => parts.filter(
20666
20858
  (part) => typeof part === "string" && part.trim().length > 0
20667
20859
  ).join(" ").replace(/\s+/g, " ").trim();
@@ -25345,7 +25537,12 @@ var eventListingBlockDefinition = {
25345
25537
  detailLevel: "listing",
25346
25538
  kind: { $bind: { from: "content.kind" } },
25347
25539
  eventSurface: { $bind: { from: "content.eventSurface" } },
25348
- eventPresets: { $bind: { from: "content.filterEventPresets" } },
25540
+ eventPresets: {
25541
+ $bind: {
25542
+ from: "content.filterEventPresets",
25543
+ transforms: [{ id: "value.csv" }]
25544
+ }
25545
+ },
25349
25546
  scheduleScope: { $bind: { from: "content.scheduleScope" } }
25350
25547
  },
25351
25548
  mode: "server"
@@ -26097,7 +26294,12 @@ var eventCalendarBlockDefinition = {
26097
26294
  // Pass filter params if configured
26098
26295
  kind: { $bind: { from: "content.kind" } },
26099
26296
  eventSurface: { $bind: { from: "content.eventSurface" } },
26100
- eventPresets: { $bind: { from: "content.filterEventPresets" } },
26297
+ eventPresets: {
26298
+ $bind: {
26299
+ from: "content.filterEventPresets",
26300
+ transforms: [{ id: "value.csv" }]
26301
+ }
26302
+ },
26101
26303
  scheduleScope: { $bind: { from: "content.scheduleScope" } },
26102
26304
  categoryIds: { $bind: { from: "content.filterCategoryIds" } },
26103
26305
  staffMemberId: { $bind: { from: "content.filterStaffMemberId" } },