@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
@@ -1,3 +1,14 @@
1
+ // ../api/src/apiEndpointTypes.ts
2
+ function blockedDemoMutationPolicy(classification, publicMessage) {
3
+ if (publicMessage.trim() === "") {
4
+ throw new Error(`Demo mutation policy ${classification} requires publicMessage.`);
5
+ }
6
+ return {
7
+ classification,
8
+ publicMessage
9
+ };
10
+ }
11
+
1
12
  // ../api/src/cache-tags.ts
2
13
  var TAG_TEMPLATES = {
3
14
  siteCollection: "riverbank:site",
@@ -28,6 +39,18 @@ var TAG_TEMPLATES = {
28
39
  };
29
40
 
30
41
  // ../api/src/endpoints.ts
42
+ var DEMO_MUTATION_BLOCKED_HIDDEN = blockedDemoMutationPolicy(
43
+ "blocked-hidden",
44
+ "This action is not available in demo sites."
45
+ );
46
+ var DEMO_MUTATION_BLOCKED_DISABLED = blockedDemoMutationPolicy(
47
+ "blocked-disabled",
48
+ "This setting is disabled in demo sites."
49
+ );
50
+ var DEMO_MUTATION_INTERNAL_ONLY = blockedDemoMutationPolicy(
51
+ "internal-only",
52
+ "This internal operation is not available in demo sites."
53
+ );
31
54
  var ENDPOINT_DEFINITIONS = {
32
55
  // AI endpoints - no cache due to dynamic nature
33
56
  aiContentUpdateChat: {
@@ -144,7 +167,8 @@ var ENDPOINT_DEFINITIONS = {
144
167
  path: "/sites/{siteId}/ai/generate",
145
168
  method: "POST",
146
169
  auth: "user",
147
- responseKind: "json"
170
+ responseKind: "json",
171
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
148
172
  },
149
173
  getOnboardingPreviewStatus: {
150
174
  path: "/public/sites/{siteId}/onboarding/preview-status",
@@ -165,7 +189,8 @@ var ENDPOINT_DEFINITIONS = {
165
189
  method: "POST",
166
190
  auth: "user",
167
191
  errors: [],
168
- responseKind: "json"
192
+ responseKind: "json",
193
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED
169
194
  },
170
195
  goLiveSite: {
171
196
  path: "/sites/{siteId}/launch/go-live",
@@ -234,20 +259,23 @@ var ENDPOINT_DEFINITIONS = {
234
259
  path: "/sites/{siteId}/ai/site-wizard/goals",
235
260
  method: "POST",
236
261
  auth: "user",
237
- responseKind: "json"
262
+ responseKind: "json",
263
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
238
264
  },
239
265
  aiSiteWizardIntakeTriage: {
240
266
  path: "/sites/{siteId}/ai/site-wizard/intake-triage",
241
267
  method: "POST",
242
268
  auth: "user",
243
- responseKind: "json"
269
+ responseKind: "json",
270
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
244
271
  },
245
272
  aiSiteWizardTelemetry: {
246
273
  path: "/sites/{siteId}/ai/site-wizard/telemetry",
247
274
  method: "POST",
248
275
  auth: "user",
249
276
  errors: [],
250
- responseKind: "json"
277
+ responseKind: "json",
278
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
251
279
  },
252
280
  // Admin SEO
253
281
  listGscPropertiesAdmin: {
@@ -454,7 +482,7 @@ var ENDPOINT_DEFINITIONS = {
454
482
  responseKind: "json",
455
483
  errors: ["resource:not_found", "server:internal_error"]
456
484
  },
457
- // Ops (event hosts/admins)
485
+ // Ops (staff event operators/admins)
458
486
  opsListUpcomingEventOccurrences: {
459
487
  path: "/ops/sites/{siteId}/events",
460
488
  method: "GET",
@@ -472,6 +500,7 @@ var ENDPOINT_DEFINITIONS = {
472
500
  method: "POST",
473
501
  auth: "user",
474
502
  responseKind: "json",
503
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
475
504
  errors: [
476
505
  "validation:invalid_input",
477
506
  "auth:forbidden",
@@ -484,6 +513,7 @@ var ENDPOINT_DEFINITIONS = {
484
513
  method: "POST",
485
514
  auth: "user",
486
515
  responseKind: "json",
516
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
487
517
  errors: [
488
518
  "validation:invalid_input",
489
519
  "auth:forbidden",
@@ -502,6 +532,7 @@ var ENDPOINT_DEFINITIONS = {
502
532
  method: "POST",
503
533
  auth: "user",
504
534
  responseKind: "json",
535
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
505
536
  errors: [
506
537
  "validation:invalid_input",
507
538
  "auth:forbidden",
@@ -535,6 +566,7 @@ var ENDPOINT_DEFINITIONS = {
535
566
  method: "POST",
536
567
  auth: "user",
537
568
  responseKind: "json",
569
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
538
570
  errors: [
539
571
  "validation:invalid_input",
540
572
  "auth:forbidden",
@@ -563,7 +595,8 @@ var ENDPOINT_DEFINITIONS = {
563
595
  method: "POST",
564
596
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings],
565
597
  auth: "user",
566
- responseKind: "json"
598
+ responseKind: "json",
599
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
567
600
  },
568
601
  previewEmailTemplate: {
569
602
  path: "/sites/{siteId}/settings/emails/preview",
@@ -614,14 +647,16 @@ var ENDPOINT_DEFINITIONS = {
614
647
  method: "POST",
615
648
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
616
649
  auth: "user",
617
- responseKind: "json"
650
+ responseKind: "json",
651
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
618
652
  },
619
653
  createNewsletterSubscribersImportUploadUrl: {
620
654
  path: "/sites/{siteId}/newsletter/subscribers/import-url",
621
655
  method: "POST",
622
656
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
623
657
  auth: "user",
624
- responseKind: "json"
658
+ responseKind: "json",
659
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
625
660
  },
626
661
  exportNewsletterSubscribersCsv: {
627
662
  path: "/sites/{siteId}/newsletter/subscribers/export.csv",
@@ -818,14 +853,16 @@ var ENDPOINT_DEFINITIONS = {
818
853
  method: "POST",
819
854
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
820
855
  auth: "user",
821
- responseKind: "json"
856
+ responseKind: "json",
857
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
822
858
  },
823
859
  testSendNewsletterCampaign: {
824
860
  path: "/sites/{siteId}/newsletter/campaigns/{campaignId}/test-send",
825
861
  method: "POST",
826
862
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
827
863
  auth: "user",
828
- responseKind: "json"
864
+ responseKind: "json",
865
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
829
866
  },
830
867
  listNewsletterSendJobs: {
831
868
  path: "/sites/{siteId}/newsletter/jobs",
@@ -873,6 +910,20 @@ var ENDPOINT_DEFINITIONS = {
873
910
  responseKind: "json",
874
911
  errors: ["validation:invalid_input", "billing:plan_limit_exceeded", "server:internal_error"]
875
912
  },
913
+ createAppointmentResourceWithAccountAccess: {
914
+ path: "/sites/{siteId}/bookings/resources/account-access",
915
+ method: "POST",
916
+ auth: "user",
917
+ responseKind: "json",
918
+ errors: [
919
+ "validation:invalid_input",
920
+ "auth:forbidden",
921
+ "billing:plan_limit_exceeded",
922
+ "resource:conflict",
923
+ "resource:not_found",
924
+ "server:internal_error"
925
+ ]
926
+ },
876
927
  getAppointmentResource: {
877
928
  path: "/sites/{siteId}/bookings/resources/{resourceId}",
878
929
  method: "GET",
@@ -1513,7 +1564,8 @@ var ENDPOINT_DEFINITIONS = {
1513
1564
  method: "DELETE",
1514
1565
  tags: ["site", "site-{siteId}"],
1515
1566
  auth: "user",
1516
- responseKind: "json"
1567
+ responseKind: "json",
1568
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
1517
1569
  },
1518
1570
  listSiteMembers: {
1519
1571
  path: "/sites/{siteId}/members",
@@ -1969,7 +2021,8 @@ var ENDPOINT_DEFINITIONS = {
1969
2021
  method: "POST",
1970
2022
  tags: ["site-{siteId}", "content-{siteId}-{type}"],
1971
2023
  auth: "user",
1972
- responseKind: "json"
2024
+ responseKind: "json",
2025
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
1973
2026
  },
1974
2027
  updateSiteGeneralSettings: {
1975
2028
  path: "/sites/{siteId}/settings/general",
@@ -4208,6 +4261,7 @@ var ENDPOINT_DEFINITIONS = {
4208
4261
  method: "POST",
4209
4262
  tags: ["site-{siteId}"],
4210
4263
  auth: "user",
4264
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN,
4211
4265
  errors: [
4212
4266
  "validation:invalid_input",
4213
4267
  "auth:forbidden",
@@ -4222,6 +4276,7 @@ var ENDPOINT_DEFINITIONS = {
4222
4276
  method: "POST",
4223
4277
  tags: ["site-{siteId}"],
4224
4278
  auth: "user",
4279
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN,
4225
4280
  errors: [
4226
4281
  "validation:invalid_input",
4227
4282
  "auth:forbidden",
@@ -4531,6 +4586,7 @@ var ENDPOINT_DEFINITIONS = {
4531
4586
  tags: ["site-{siteId}", "passes-{siteId}"],
4532
4587
  auth: "user",
4533
4588
  responseKind: "json",
4589
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4534
4590
  errors: ["validation:invalid_input", "server:internal_error"]
4535
4591
  },
4536
4592
  getBookingPass: {
@@ -4546,6 +4602,7 @@ var ENDPOINT_DEFINITIONS = {
4546
4602
  tags: ["site-{siteId}", "passes-{siteId}"],
4547
4603
  auth: "user",
4548
4604
  responseKind: "json",
4605
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4549
4606
  errors: [
4550
4607
  "validation:invalid_input",
4551
4608
  "resource:not_found",
@@ -4558,6 +4615,7 @@ var ENDPOINT_DEFINITIONS = {
4558
4615
  tags: ["site-{siteId}", "passes-{siteId}"],
4559
4616
  auth: "user",
4560
4617
  responseKind: "json",
4618
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4561
4619
  errors: [
4562
4620
  "validation:invalid_input",
4563
4621
  "resource:not_found",
@@ -4613,6 +4671,7 @@ var ENDPOINT_DEFINITIONS = {
4613
4671
  tags: ["site-{siteId}", "memberships-{siteId}"],
4614
4672
  auth: "user",
4615
4673
  responseKind: "json",
4674
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4616
4675
  errors: ["validation:invalid_input", "server:internal_error"]
4617
4676
  },
4618
4677
  getBookingMembership: {
@@ -4628,6 +4687,7 @@ var ENDPOINT_DEFINITIONS = {
4628
4687
  tags: ["site-{siteId}", "memberships-{siteId}"],
4629
4688
  auth: "user",
4630
4689
  responseKind: "json",
4690
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4631
4691
  errors: [
4632
4692
  "validation:invalid_input",
4633
4693
  "resource:not_found",
@@ -4640,6 +4700,7 @@ var ENDPOINT_DEFINITIONS = {
4640
4700
  tags: ["site-{siteId}", "memberships-{siteId}"],
4641
4701
  auth: "user",
4642
4702
  responseKind: "json",
4703
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4643
4704
  errors: [
4644
4705
  "validation:invalid_input",
4645
4706
  "resource:not_found",
@@ -4856,6 +4917,7 @@ var ENDPOINT_DEFINITIONS = {
4856
4917
  tags: ["site-{siteId}", "customers-{siteId}"],
4857
4918
  auth: "user",
4858
4919
  responseKind: "json",
4920
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4859
4921
  errors: [
4860
4922
  "validation:invalid_input",
4861
4923
  "auth:forbidden",
@@ -7115,8 +7177,7 @@ var dashboardNavVisibilityBaseSchema = z5.object({
7115
7177
  var dashboardNavVisibilityRolesSchema = z5.object({
7116
7178
  administrator: dashboardNavVisibilityBaseSchema.optional(),
7117
7179
  editor: dashboardNavVisibilityBaseSchema.optional(),
7118
- team_member: dashboardNavVisibilityBaseSchema.optional(),
7119
- event_host: dashboardNavVisibilityBaseSchema.optional()
7180
+ team_member: dashboardNavVisibilityBaseSchema.optional()
7120
7181
  }).strip().optional();
7121
7182
  var dashboardNavVisibilitySchema = dashboardNavVisibilityBaseSchema.extend({
7122
7183
  roles: dashboardNavVisibilityRolesSchema
@@ -7637,6 +7698,21 @@ var appointmentSetupServiceDraftSchema = z7.object({
7637
7698
  timezone: z7.string().trim().min(1).nullable(),
7638
7699
  payment: appointmentSetupPaymentDraftSchema,
7639
7700
  assignment: appointmentSetupServiceAssignmentDraftSchema
7701
+ }).superRefine((service, ctx) => {
7702
+ if (service.payment.priceType === "paid" && (service.priceAmount === null || service.priceAmount <= 0)) {
7703
+ ctx.addIssue({
7704
+ code: "custom",
7705
+ path: ["priceAmount"],
7706
+ message: "Paid appointment services need a positive price."
7707
+ });
7708
+ }
7709
+ if (service.payment.priceType === "free" && service.priceAmount !== null && service.priceAmount > 0) {
7710
+ ctx.addIssue({
7711
+ code: "custom",
7712
+ path: ["priceAmount"],
7713
+ message: "Free appointment services cannot carry a positive price."
7714
+ });
7715
+ }
7640
7716
  });
7641
7717
  var appointmentSetupPractitionerDraftSchema = z7.object({
7642
7718
  ref: appointmentSetupRefSchema,
@@ -8009,6 +8085,71 @@ function registerManifest(manifest) {
8009
8085
  return manifest;
8010
8086
  }
8011
8087
 
8088
+ // ../theme-core/src/palette/utils/colorConversion.ts
8089
+ var mod = (a, n) => (a % n + n) % n;
8090
+ var deg = (x) => mod(x, 360);
8091
+ function hexToRgb(hex) {
8092
+ const h = hex.replace(/^#/, "");
8093
+ const m = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
8094
+ if (m.length !== 6) throw new Error("Bad hex");
8095
+ const int = parseInt(m, 16);
8096
+ return { r: int >> 16 & 255, g: int >> 8 & 255, b: int & 255 };
8097
+ }
8098
+ function srgbToLinear(u) {
8099
+ const x = u / 255;
8100
+ return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
8101
+ }
8102
+ function rgbToHsl(r, g, b) {
8103
+ const R = r / 255, G = g / 255, B = b / 255;
8104
+ const max = Math.max(R, G, B), min = Math.min(R, G, B);
8105
+ const d = max - min;
8106
+ let h = 0;
8107
+ if (d !== 0) {
8108
+ switch (max) {
8109
+ case R:
8110
+ h = (G - B) / d + (G < B ? 6 : 0);
8111
+ break;
8112
+ case G:
8113
+ h = (B - R) / d + 2;
8114
+ break;
8115
+ case B:
8116
+ h = (R - G) / d + 4;
8117
+ break;
8118
+ }
8119
+ h *= 60;
8120
+ }
8121
+ const l = (max + min) / 2;
8122
+ const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1));
8123
+ return { h, s, l };
8124
+ }
8125
+ function srgbToOklab(r, g, b) {
8126
+ const R = srgbToLinear(r), G = srgbToLinear(g), B = srgbToLinear(b);
8127
+ const l = 0.4122214708 * R + 0.5363325363 * G + 0.0514459929 * B;
8128
+ const m = 0.2119034982 * R + 0.6806995451 * G + 0.1073969566 * B;
8129
+ const s = 0.0883024619 * R + 0.2817188376 * G + 0.6299787005 * B;
8130
+ const l_ = Math.cbrt(l), m_ = Math.cbrt(m), s_ = Math.cbrt(s);
8131
+ const L = 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_;
8132
+ const a = 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_;
8133
+ const b2 = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_;
8134
+ return { L, a, b: b2 };
8135
+ }
8136
+ function oklabToOklch(L, a, b) {
8137
+ const C = Math.sqrt(a * a + b * b);
8138
+ const h = C < 1e-7 ? 0 : deg(Math.atan2(b, a) * 180 / Math.PI);
8139
+ return { L, C, h };
8140
+ }
8141
+ function featuresFromHex(hex) {
8142
+ const { r, g, b } = hexToRgb(hex);
8143
+ const { h, s, l } = rgbToHsl(r, g, b);
8144
+ const { L, a, b: b2 } = srgbToOklab(r, g, b);
8145
+ const { L: okL, C: okC, h: okH } = oklabToOklch(L, a, b2);
8146
+ const max = Math.max(r, g, b);
8147
+ const v = max / 255;
8148
+ const Y = 0.2126 * srgbToLinear(r) + 0.7152 * srgbToLinear(g) + 0.0722 * srgbToLinear(b);
8149
+ const chroma = s;
8150
+ return { r, g, b, h, s, l, v, Y, chroma, okL, okC, okH, hex };
8151
+ }
8152
+
8012
8153
  // ../theme-core/src/site-styles/appearancePresetResolution.ts
8013
8154
  function assertValidOptionGroups(preset2) {
8014
8155
  preset2.optionGroups?.forEach((group) => {
@@ -11538,6 +11679,9 @@ var curatedSiteStyleIdValues = [
11538
11679
  "site-style:bright-community",
11539
11680
  "site-style:quiet-luxury",
11540
11681
  "site-style:practical-services",
11682
+ "site-style:quiet-practice",
11683
+ "site-style:personal-retreat-journal",
11684
+ "site-style:tactile-workshop",
11541
11685
  "site-style:modern-wellness",
11542
11686
  "site-style:bold-launch",
11543
11687
  "site-style:south-west-twerk-school"
@@ -11620,7 +11764,8 @@ function defineCuratedSiteStyle(input) {
11620
11764
  name: input.name,
11621
11765
  description: input.description,
11622
11766
  generationBrief: input.generationBrief,
11623
- selectionKeywords: input.selectionKeywords ?? [],
11767
+ selectionKeywordRules: input.selectionKeywordRules ?? [],
11768
+ siteCreatorSelection: input.siteCreatorSelection ?? { kind: "explicit_only" },
11624
11769
  template: {
11625
11770
  id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
11626
11771
  name: input.name,
@@ -11764,12 +11909,13 @@ var curatedSiteStyles = [
11764
11909
  name: "Quiet Luxury",
11765
11910
  description: "Minimal, confident, and refined for premium experiences and private services.",
11766
11911
  generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
11767
- selectionKeywords: [
11768
- "luxury",
11769
- "premium",
11770
- "boutique",
11771
- "bespoke",
11772
- "exclusive"
11912
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 20 },
11913
+ selectionKeywordRules: [
11914
+ { kind: "word", value: "luxury" },
11915
+ { kind: "word", value: "premium" },
11916
+ { kind: "word", value: "boutique" },
11917
+ { kind: "word", value: "bespoke" },
11918
+ { kind: "word", value: "exclusive" }
11773
11919
  ],
11774
11920
  tokenRecipes: {
11775
11921
  palette: "high-contrast",
@@ -11798,13 +11944,14 @@ var curatedSiteStyles = [
11798
11944
  name: "Practical Services",
11799
11945
  description: "Efficient, plainspoken, and conversion-focused for trades and everyday services.",
11800
11946
  generationBrief: "Make services, location, trust signals, and contact paths obvious. Keep copy brief and avoid ornate visual treatments.",
11801
- selectionKeywords: [
11802
- "repair",
11803
- "plumb",
11804
- "electric",
11805
- "cleaning",
11806
- "landscap",
11807
- "contractor"
11947
+ siteCreatorSelection: { kind: "primary_goal_support" },
11948
+ selectionKeywordRules: [
11949
+ { kind: "word", value: "repair" },
11950
+ { kind: "substring", value: "plumb" },
11951
+ { kind: "substring", value: "electric" },
11952
+ { kind: "word", value: "cleaning" },
11953
+ { kind: "substring", value: "landscap" },
11954
+ { kind: "substring", value: "contractor" }
11808
11955
  ],
11809
11956
  tokenRecipes: {
11810
11957
  palette: "brand-led",
@@ -11855,18 +12002,134 @@ var curatedSiteStyles = [
11855
12002
  paletteChoice("warm-neutral-forest")
11856
12003
  ]
11857
12004
  }),
12005
+ defineCuratedSiteStyle({
12006
+ id: "site-style:quiet-practice",
12007
+ name: "Quiet Practice",
12008
+ description: "Grounded, calm, and practical for small appointment-first practices.",
12009
+ 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.",
12010
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 30 },
12011
+ selectionKeywordRules: [
12012
+ { kind: "substring", value: "massage" },
12013
+ { kind: "word", value: "bodywork" },
12014
+ { kind: "phrase", value: "appointment practice" },
12015
+ { kind: "phrase", value: "appointment-first" },
12016
+ { kind: "substring", value: "practitioner" },
12017
+ { kind: "substring", value: "therap" },
12018
+ { kind: "substring", value: "clinic" },
12019
+ { kind: "phrase", value: "wellness practice" }
12020
+ ],
12021
+ tokenRecipes: {
12022
+ palette: "soft-natural",
12023
+ contrast: "standard",
12024
+ radius: "soft",
12025
+ shadow: "subtle",
12026
+ typography: "clean-sans",
12027
+ spacing: "regular",
12028
+ motion: "subtle"
12029
+ },
12030
+ compositionBudget: quietBudget,
12031
+ recommendedHeaderLookIds: ["practical-utility", "clean-base", "centered-calm"],
12032
+ buttonPersonalityChoices: [
12033
+ buttonChoice("pebble"),
12034
+ buttonChoice("soft-pill"),
12035
+ buttonChoice("editorial-link")
12036
+ ],
12037
+ paletteVariantChoices: [
12038
+ paletteChoice("soft-natural-stone"),
12039
+ paletteChoice("soft-natural-sage"),
12040
+ paletteChoice("warm-neutral-clay")
12041
+ ]
12042
+ }),
12043
+ defineCuratedSiteStyle({
12044
+ id: "site-style:personal-retreat-journal",
12045
+ name: "Personal Retreat Journal",
12046
+ description: "Warm, story-led, and readable for solo practitioners with mixed offers.",
12047
+ 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.",
12048
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 40 },
12049
+ selectionKeywordRules: [
12050
+ { kind: "substring", value: "retreat" },
12051
+ { kind: "phrase", value: "solo practitioner" },
12052
+ { kind: "phrase", value: "personal brand" },
12053
+ { kind: "substring", value: "teacher" },
12054
+ { kind: "substring", value: "coach" },
12055
+ { kind: "phrase", value: "retreat resources" },
12056
+ { kind: "substring", value: "journal" }
12057
+ ],
12058
+ tokenRecipes: {
12059
+ palette: "warm-neutral",
12060
+ contrast: "standard",
12061
+ radius: "soft",
12062
+ shadow: "subtle",
12063
+ typography: "serif-editorial",
12064
+ spacing: "airy",
12065
+ motion: "subtle"
12066
+ },
12067
+ compositionBudget: balancedBudget,
12068
+ recommendedHeaderLookIds: ["editorial-line", "centered-calm", "minimal-transparent"],
12069
+ buttonPersonalityChoices: [
12070
+ buttonChoice("editorial-link"),
12071
+ buttonChoice("soft-pill"),
12072
+ buttonChoice("brushed-wash")
12073
+ ],
12074
+ paletteVariantChoices: [
12075
+ paletteChoice("warm-neutral-forest"),
12076
+ paletteChoice("warm-neutral-clay"),
12077
+ paletteChoice("soft-natural-stone")
12078
+ ]
12079
+ }),
12080
+ defineCuratedSiteStyle({
12081
+ id: "site-style:tactile-workshop",
12082
+ name: "Tactile Workshop",
12083
+ description: "Bright, hands-on, and image-led for maker studios, workshops, and creative classes.",
12084
+ 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.",
12085
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 50 },
12086
+ selectionKeywordRules: [
12087
+ { kind: "substring", value: "ceramic" },
12088
+ { kind: "word", value: "pottery" },
12089
+ { kind: "phrase", value: "maker studio" },
12090
+ { kind: "phrase", value: "craft class" },
12091
+ { kind: "phrase", value: "craft workshop" },
12092
+ { kind: "word", value: "clay" },
12093
+ { kind: "word", value: "kiln" }
12094
+ ],
12095
+ tokenRecipes: {
12096
+ palette: "brand-led",
12097
+ contrast: "standard",
12098
+ radius: "soft",
12099
+ shadow: "subtle",
12100
+ typography: "friendly-sans",
12101
+ spacing: "regular",
12102
+ motion: "subtle"
12103
+ },
12104
+ compositionBudget: balancedBudget,
12105
+ recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
12106
+ recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
12107
+ buttonPersonalityChoices: [
12108
+ buttonChoice("pebble"),
12109
+ buttonChoice("confident-chip"),
12110
+ buttonChoice("ink-stamp"),
12111
+ buttonChoice("editorial-link")
12112
+ ],
12113
+ paletteVariantChoices: [
12114
+ paletteChoice("brand-led-warm"),
12115
+ paletteChoice("brand-led-cool"),
12116
+ paletteChoice("soft-natural-watercolor"),
12117
+ paletteChoice("warm-neutral-clay")
12118
+ ]
12119
+ }),
11858
12120
  defineCuratedSiteStyle({
11859
12121
  id: "site-style:bold-launch",
11860
12122
  name: "Bold Launch",
11861
12123
  description: "High-energy and punchy for launches, campaigns, and creative offers.",
11862
12124
  generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
11863
- selectionKeywords: [
11864
- "launch",
11865
- "campaign",
11866
- "preorder",
11867
- "pre-order",
11868
- "waitlist",
11869
- "drop"
12125
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 10 },
12126
+ selectionKeywordRules: [
12127
+ { kind: "substring", value: "launch" },
12128
+ { kind: "substring", value: "campaign" },
12129
+ { kind: "word", value: "preorder" },
12130
+ { kind: "phrase", value: "pre-order" },
12131
+ { kind: "substring", value: "waitlist" },
12132
+ { kind: "word", value: "drop" }
11870
12133
  ],
11871
12134
  tokenRecipes: {
11872
12135
  palette: "high-contrast",
@@ -11897,15 +12160,6 @@ var curatedSiteStyles = [
11897
12160
  name: "South West Twerk School",
11898
12161
  description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
11899
12162
  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.",
11900
- selectionKeywords: [
11901
- "dance",
11902
- "classes",
11903
- "workshop",
11904
- "school",
11905
- "movement",
11906
- "performance",
11907
- "community"
11908
- ],
11909
12163
  tokenRecipes: {
11910
12164
  palette: "brand-led",
11911
12165
  contrast: "maximum",
@@ -12212,25 +12466,19 @@ var defaultDesignRuntimeRules = defineDesignRuntimeRules({
12212
12466
  "muted-band": {
12213
12467
  background: {
12214
12468
  type: "color",
12215
- color: "muted",
12216
- textColor: "text",
12217
- headingColor: "text"
12469
+ color: "muted"
12218
12470
  }
12219
12471
  },
12220
12472
  "accent-band": {
12221
12473
  background: {
12222
12474
  type: "color",
12223
- color: "primary",
12224
- textColor: "primaryForeground",
12225
- headingColor: "primaryForeground"
12475
+ color: "primary"
12226
12476
  }
12227
12477
  },
12228
12478
  "brand-depth-band": {
12229
12479
  background: {
12230
12480
  type: "color",
12231
- color: "primary-800",
12232
- textColor: "primaryForeground",
12233
- headingColor: "primaryForeground"
12481
+ color: "primary-800"
12234
12482
  }
12235
12483
  },
12236
12484
  "hero-image": {
@@ -18338,6 +18586,16 @@ var jsonArrayTransform = {
18338
18586
  return "";
18339
18587
  }
18340
18588
  };
18589
+ var csvTransform = {
18590
+ id: "value.csv",
18591
+ kind: "formatter",
18592
+ summary: "Normalize a string or array of strings into a comma-separated list",
18593
+ run: (value) => {
18594
+ const rawValues = Array.isArray(value) ? value : typeof value === "string" ? value.split(",") : [];
18595
+ const normalized = rawValues.filter((item) => typeof item === "string").map((item) => item.trim()).filter(Boolean);
18596
+ return normalized.length > 0 ? Array.from(new Set(normalized)).join(",") : "";
18597
+ }
18598
+ };
18341
18599
  var marqueeLoopOptionsSchema = z36.object({
18342
18600
  minItems: z36.number().int().min(1).default(10)
18343
18601
  });
@@ -18363,6 +18621,7 @@ var formattingTransforms = [
18363
18621
  dateFormatShort,
18364
18622
  arrayLengthTransform,
18365
18623
  jsonArrayTransform,
18624
+ csvTransform,
18366
18625
  marqueeLoopTransform
18367
18626
  ];
18368
18627
 
@@ -18846,73 +19105,6 @@ var uiTransforms = [
18846
19105
 
18847
19106
  // ../blocks/src/system/transforms/registry/layout.ts
18848
19107
  import { z as z38 } from "zod";
18849
-
18850
- // ../theme-core/src/palette/utils/colorConversion.ts
18851
- var mod = (a, n) => (a % n + n) % n;
18852
- var deg = (x) => mod(x, 360);
18853
- function hexToRgb(hex) {
18854
- const h = hex.replace(/^#/, "");
18855
- const m = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
18856
- if (m.length !== 6) throw new Error("Bad hex");
18857
- const int = parseInt(m, 16);
18858
- return { r: int >> 16 & 255, g: int >> 8 & 255, b: int & 255 };
18859
- }
18860
- function srgbToLinear(u) {
18861
- const x = u / 255;
18862
- return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
18863
- }
18864
- function rgbToHsl(r, g, b) {
18865
- const R = r / 255, G = g / 255, B = b / 255;
18866
- const max = Math.max(R, G, B), min = Math.min(R, G, B);
18867
- const d = max - min;
18868
- let h = 0;
18869
- if (d !== 0) {
18870
- switch (max) {
18871
- case R:
18872
- h = (G - B) / d + (G < B ? 6 : 0);
18873
- break;
18874
- case G:
18875
- h = (B - R) / d + 2;
18876
- break;
18877
- case B:
18878
- h = (R - G) / d + 4;
18879
- break;
18880
- }
18881
- h *= 60;
18882
- }
18883
- const l = (max + min) / 2;
18884
- const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1));
18885
- return { h, s, l };
18886
- }
18887
- function srgbToOklab(r, g, b) {
18888
- const R = srgbToLinear(r), G = srgbToLinear(g), B = srgbToLinear(b);
18889
- const l = 0.4122214708 * R + 0.5363325363 * G + 0.0514459929 * B;
18890
- const m = 0.2119034982 * R + 0.6806995451 * G + 0.1073969566 * B;
18891
- const s = 0.0883024619 * R + 0.2817188376 * G + 0.6299787005 * B;
18892
- const l_ = Math.cbrt(l), m_ = Math.cbrt(m), s_ = Math.cbrt(s);
18893
- const L = 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_;
18894
- const a = 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_;
18895
- const b2 = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_;
18896
- return { L, a, b: b2 };
18897
- }
18898
- function oklabToOklch(L, a, b) {
18899
- const C = Math.sqrt(a * a + b * b);
18900
- const h = C < 1e-7 ? 0 : deg(Math.atan2(b, a) * 180 / Math.PI);
18901
- return { L, C, h };
18902
- }
18903
- function featuresFromHex(hex) {
18904
- const { r, g, b } = hexToRgb(hex);
18905
- const { h, s, l } = rgbToHsl(r, g, b);
18906
- const { L, a, b: b2 } = srgbToOklab(r, g, b);
18907
- const { L: okL, C: okC, h: okH } = oklabToOklch(L, a, b2);
18908
- const max = Math.max(r, g, b);
18909
- const v = max / 255;
18910
- const Y = 0.2126 * srgbToLinear(r) + 0.7152 * srgbToLinear(g) + 0.0722 * srgbToLinear(b);
18911
- const chroma = s;
18912
- return { r, g, b, h, s, l, v, Y, chroma, okL, okC, okH, hex };
18913
- }
18914
-
18915
- // ../blocks/src/system/transforms/registry/layout.ts
18916
19108
  var joinClasses4 = (parts) => parts.filter(
18917
19109
  (part) => typeof part === "string" && part.trim().length > 0
18918
19110
  ).join(" ").replace(/\s+/g, " ").trim();
@@ -23596,7 +23788,12 @@ var eventListingBlockDefinition = {
23596
23788
  detailLevel: "listing",
23597
23789
  kind: { $bind: { from: "content.kind" } },
23598
23790
  eventSurface: { $bind: { from: "content.eventSurface" } },
23599
- eventPresets: { $bind: { from: "content.filterEventPresets" } },
23791
+ eventPresets: {
23792
+ $bind: {
23793
+ from: "content.filterEventPresets",
23794
+ transforms: [{ id: "value.csv" }]
23795
+ }
23796
+ },
23600
23797
  scheduleScope: { $bind: { from: "content.scheduleScope" } }
23601
23798
  },
23602
23799
  mode: "server"
@@ -24348,7 +24545,12 @@ var eventCalendarBlockDefinition = {
24348
24545
  // Pass filter params if configured
24349
24546
  kind: { $bind: { from: "content.kind" } },
24350
24547
  eventSurface: { $bind: { from: "content.eventSurface" } },
24351
- eventPresets: { $bind: { from: "content.filterEventPresets" } },
24548
+ eventPresets: {
24549
+ $bind: {
24550
+ from: "content.filterEventPresets",
24551
+ transforms: [{ id: "value.csv" }]
24552
+ }
24553
+ },
24352
24554
  scheduleScope: { $bind: { from: "content.scheduleScope" } },
24353
24555
  categoryIds: { $bind: { from: "content.filterCategoryIds" } },
24354
24556
  staffMemberId: { $bind: { from: "content.filterStaffMemberId" } },