@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,6 +1,17 @@
1
1
  // src/config/validation.ts
2
2
  import { z as z68 } from "zod";
3
3
 
4
+ // ../api/src/apiEndpointTypes.ts
5
+ function blockedDemoMutationPolicy(classification, publicMessage) {
6
+ if (publicMessage.trim() === "") {
7
+ throw new Error(`Demo mutation policy ${classification} requires publicMessage.`);
8
+ }
9
+ return {
10
+ classification,
11
+ publicMessage
12
+ };
13
+ }
14
+
4
15
  // ../api/src/cache-tags.ts
5
16
  var TAG_TEMPLATES = {
6
17
  siteCollection: "riverbank:site",
@@ -31,6 +42,18 @@ var TAG_TEMPLATES = {
31
42
  };
32
43
 
33
44
  // ../api/src/endpoints.ts
45
+ var DEMO_MUTATION_BLOCKED_HIDDEN = blockedDemoMutationPolicy(
46
+ "blocked-hidden",
47
+ "This action is not available in demo sites."
48
+ );
49
+ var DEMO_MUTATION_BLOCKED_DISABLED = blockedDemoMutationPolicy(
50
+ "blocked-disabled",
51
+ "This setting is disabled in demo sites."
52
+ );
53
+ var DEMO_MUTATION_INTERNAL_ONLY = blockedDemoMutationPolicy(
54
+ "internal-only",
55
+ "This internal operation is not available in demo sites."
56
+ );
34
57
  var ENDPOINT_DEFINITIONS = {
35
58
  // AI endpoints - no cache due to dynamic nature
36
59
  aiContentUpdateChat: {
@@ -147,7 +170,8 @@ var ENDPOINT_DEFINITIONS = {
147
170
  path: "/sites/{siteId}/ai/generate",
148
171
  method: "POST",
149
172
  auth: "user",
150
- responseKind: "json"
173
+ responseKind: "json",
174
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
151
175
  },
152
176
  getOnboardingPreviewStatus: {
153
177
  path: "/public/sites/{siteId}/onboarding/preview-status",
@@ -168,7 +192,8 @@ var ENDPOINT_DEFINITIONS = {
168
192
  method: "POST",
169
193
  auth: "user",
170
194
  errors: [],
171
- responseKind: "json"
195
+ responseKind: "json",
196
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED
172
197
  },
173
198
  goLiveSite: {
174
199
  path: "/sites/{siteId}/launch/go-live",
@@ -237,20 +262,23 @@ var ENDPOINT_DEFINITIONS = {
237
262
  path: "/sites/{siteId}/ai/site-wizard/goals",
238
263
  method: "POST",
239
264
  auth: "user",
240
- responseKind: "json"
265
+ responseKind: "json",
266
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
241
267
  },
242
268
  aiSiteWizardIntakeTriage: {
243
269
  path: "/sites/{siteId}/ai/site-wizard/intake-triage",
244
270
  method: "POST",
245
271
  auth: "user",
246
- responseKind: "json"
272
+ responseKind: "json",
273
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
247
274
  },
248
275
  aiSiteWizardTelemetry: {
249
276
  path: "/sites/{siteId}/ai/site-wizard/telemetry",
250
277
  method: "POST",
251
278
  auth: "user",
252
279
  errors: [],
253
- responseKind: "json"
280
+ responseKind: "json",
281
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
254
282
  },
255
283
  // Admin SEO
256
284
  listGscPropertiesAdmin: {
@@ -457,7 +485,7 @@ var ENDPOINT_DEFINITIONS = {
457
485
  responseKind: "json",
458
486
  errors: ["resource:not_found", "server:internal_error"]
459
487
  },
460
- // Ops (event hosts/admins)
488
+ // Ops (staff event operators/admins)
461
489
  opsListUpcomingEventOccurrences: {
462
490
  path: "/ops/sites/{siteId}/events",
463
491
  method: "GET",
@@ -475,6 +503,7 @@ var ENDPOINT_DEFINITIONS = {
475
503
  method: "POST",
476
504
  auth: "user",
477
505
  responseKind: "json",
506
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
478
507
  errors: [
479
508
  "validation:invalid_input",
480
509
  "auth:forbidden",
@@ -487,6 +516,7 @@ var ENDPOINT_DEFINITIONS = {
487
516
  method: "POST",
488
517
  auth: "user",
489
518
  responseKind: "json",
519
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
490
520
  errors: [
491
521
  "validation:invalid_input",
492
522
  "auth:forbidden",
@@ -505,6 +535,7 @@ var ENDPOINT_DEFINITIONS = {
505
535
  method: "POST",
506
536
  auth: "user",
507
537
  responseKind: "json",
538
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
508
539
  errors: [
509
540
  "validation:invalid_input",
510
541
  "auth:forbidden",
@@ -538,6 +569,7 @@ var ENDPOINT_DEFINITIONS = {
538
569
  method: "POST",
539
570
  auth: "user",
540
571
  responseKind: "json",
572
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
541
573
  errors: [
542
574
  "validation:invalid_input",
543
575
  "auth:forbidden",
@@ -566,7 +598,8 @@ var ENDPOINT_DEFINITIONS = {
566
598
  method: "POST",
567
599
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings],
568
600
  auth: "user",
569
- responseKind: "json"
601
+ responseKind: "json",
602
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
570
603
  },
571
604
  previewEmailTemplate: {
572
605
  path: "/sites/{siteId}/settings/emails/preview",
@@ -617,14 +650,16 @@ var ENDPOINT_DEFINITIONS = {
617
650
  method: "POST",
618
651
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
619
652
  auth: "user",
620
- responseKind: "json"
653
+ responseKind: "json",
654
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
621
655
  },
622
656
  createNewsletterSubscribersImportUploadUrl: {
623
657
  path: "/sites/{siteId}/newsletter/subscribers/import-url",
624
658
  method: "POST",
625
659
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
626
660
  auth: "user",
627
- responseKind: "json"
661
+ responseKind: "json",
662
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
628
663
  },
629
664
  exportNewsletterSubscribersCsv: {
630
665
  path: "/sites/{siteId}/newsletter/subscribers/export.csv",
@@ -821,14 +856,16 @@ var ENDPOINT_DEFINITIONS = {
821
856
  method: "POST",
822
857
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
823
858
  auth: "user",
824
- responseKind: "json"
859
+ responseKind: "json",
860
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
825
861
  },
826
862
  testSendNewsletterCampaign: {
827
863
  path: "/sites/{siteId}/newsletter/campaigns/{campaignId}/test-send",
828
864
  method: "POST",
829
865
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
830
866
  auth: "user",
831
- responseKind: "json"
867
+ responseKind: "json",
868
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
832
869
  },
833
870
  listNewsletterSendJobs: {
834
871
  path: "/sites/{siteId}/newsletter/jobs",
@@ -876,6 +913,20 @@ var ENDPOINT_DEFINITIONS = {
876
913
  responseKind: "json",
877
914
  errors: ["validation:invalid_input", "billing:plan_limit_exceeded", "server:internal_error"]
878
915
  },
916
+ createAppointmentResourceWithAccountAccess: {
917
+ path: "/sites/{siteId}/bookings/resources/account-access",
918
+ method: "POST",
919
+ auth: "user",
920
+ responseKind: "json",
921
+ errors: [
922
+ "validation:invalid_input",
923
+ "auth:forbidden",
924
+ "billing:plan_limit_exceeded",
925
+ "resource:conflict",
926
+ "resource:not_found",
927
+ "server:internal_error"
928
+ ]
929
+ },
879
930
  getAppointmentResource: {
880
931
  path: "/sites/{siteId}/bookings/resources/{resourceId}",
881
932
  method: "GET",
@@ -1516,7 +1567,8 @@ var ENDPOINT_DEFINITIONS = {
1516
1567
  method: "DELETE",
1517
1568
  tags: ["site", "site-{siteId}"],
1518
1569
  auth: "user",
1519
- responseKind: "json"
1570
+ responseKind: "json",
1571
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
1520
1572
  },
1521
1573
  listSiteMembers: {
1522
1574
  path: "/sites/{siteId}/members",
@@ -1972,7 +2024,8 @@ var ENDPOINT_DEFINITIONS = {
1972
2024
  method: "POST",
1973
2025
  tags: ["site-{siteId}", "content-{siteId}-{type}"],
1974
2026
  auth: "user",
1975
- responseKind: "json"
2027
+ responseKind: "json",
2028
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
1976
2029
  },
1977
2030
  updateSiteGeneralSettings: {
1978
2031
  path: "/sites/{siteId}/settings/general",
@@ -4211,6 +4264,7 @@ var ENDPOINT_DEFINITIONS = {
4211
4264
  method: "POST",
4212
4265
  tags: ["site-{siteId}"],
4213
4266
  auth: "user",
4267
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN,
4214
4268
  errors: [
4215
4269
  "validation:invalid_input",
4216
4270
  "auth:forbidden",
@@ -4225,6 +4279,7 @@ var ENDPOINT_DEFINITIONS = {
4225
4279
  method: "POST",
4226
4280
  tags: ["site-{siteId}"],
4227
4281
  auth: "user",
4282
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN,
4228
4283
  errors: [
4229
4284
  "validation:invalid_input",
4230
4285
  "auth:forbidden",
@@ -4534,6 +4589,7 @@ var ENDPOINT_DEFINITIONS = {
4534
4589
  tags: ["site-{siteId}", "passes-{siteId}"],
4535
4590
  auth: "user",
4536
4591
  responseKind: "json",
4592
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4537
4593
  errors: ["validation:invalid_input", "server:internal_error"]
4538
4594
  },
4539
4595
  getBookingPass: {
@@ -4549,6 +4605,7 @@ var ENDPOINT_DEFINITIONS = {
4549
4605
  tags: ["site-{siteId}", "passes-{siteId}"],
4550
4606
  auth: "user",
4551
4607
  responseKind: "json",
4608
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4552
4609
  errors: [
4553
4610
  "validation:invalid_input",
4554
4611
  "resource:not_found",
@@ -4561,6 +4618,7 @@ var ENDPOINT_DEFINITIONS = {
4561
4618
  tags: ["site-{siteId}", "passes-{siteId}"],
4562
4619
  auth: "user",
4563
4620
  responseKind: "json",
4621
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4564
4622
  errors: [
4565
4623
  "validation:invalid_input",
4566
4624
  "resource:not_found",
@@ -4616,6 +4674,7 @@ var ENDPOINT_DEFINITIONS = {
4616
4674
  tags: ["site-{siteId}", "memberships-{siteId}"],
4617
4675
  auth: "user",
4618
4676
  responseKind: "json",
4677
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4619
4678
  errors: ["validation:invalid_input", "server:internal_error"]
4620
4679
  },
4621
4680
  getBookingMembership: {
@@ -4631,6 +4690,7 @@ var ENDPOINT_DEFINITIONS = {
4631
4690
  tags: ["site-{siteId}", "memberships-{siteId}"],
4632
4691
  auth: "user",
4633
4692
  responseKind: "json",
4693
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4634
4694
  errors: [
4635
4695
  "validation:invalid_input",
4636
4696
  "resource:not_found",
@@ -4643,6 +4703,7 @@ var ENDPOINT_DEFINITIONS = {
4643
4703
  tags: ["site-{siteId}", "memberships-{siteId}"],
4644
4704
  auth: "user",
4645
4705
  responseKind: "json",
4706
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4646
4707
  errors: [
4647
4708
  "validation:invalid_input",
4648
4709
  "resource:not_found",
@@ -4859,6 +4920,7 @@ var ENDPOINT_DEFINITIONS = {
4859
4920
  tags: ["site-{siteId}", "customers-{siteId}"],
4860
4921
  auth: "user",
4861
4922
  responseKind: "json",
4923
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4862
4924
  errors: [
4863
4925
  "validation:invalid_input",
4864
4926
  "auth:forbidden",
@@ -6447,6 +6509,7 @@ var ALLOWED_TRANSFORM_IDS = [
6447
6509
  "date.formatShort",
6448
6510
  "array.length",
6449
6511
  "value.jsonArray",
6512
+ "value.csv",
6450
6513
  "array.marqueeLoop",
6451
6514
  // Layout (layout.ts)
6452
6515
  "layout.maxWidthClass",
@@ -7216,8 +7279,7 @@ var dashboardNavVisibilityBaseSchema = z5.object({
7216
7279
  var dashboardNavVisibilityRolesSchema = z5.object({
7217
7280
  administrator: dashboardNavVisibilityBaseSchema.optional(),
7218
7281
  editor: dashboardNavVisibilityBaseSchema.optional(),
7219
- team_member: dashboardNavVisibilityBaseSchema.optional(),
7220
- event_host: dashboardNavVisibilityBaseSchema.optional()
7282
+ team_member: dashboardNavVisibilityBaseSchema.optional()
7221
7283
  }).strip().optional();
7222
7284
  var dashboardNavVisibilitySchema = dashboardNavVisibilityBaseSchema.extend({
7223
7285
  roles: dashboardNavVisibilityRolesSchema
@@ -7738,6 +7800,21 @@ var appointmentSetupServiceDraftSchema = z7.object({
7738
7800
  timezone: z7.string().trim().min(1).nullable(),
7739
7801
  payment: appointmentSetupPaymentDraftSchema,
7740
7802
  assignment: appointmentSetupServiceAssignmentDraftSchema
7803
+ }).superRefine((service, ctx) => {
7804
+ if (service.payment.priceType === "paid" && (service.priceAmount === null || service.priceAmount <= 0)) {
7805
+ ctx.addIssue({
7806
+ code: "custom",
7807
+ path: ["priceAmount"],
7808
+ message: "Paid appointment services need a positive price."
7809
+ });
7810
+ }
7811
+ if (service.payment.priceType === "free" && service.priceAmount !== null && service.priceAmount > 0) {
7812
+ ctx.addIssue({
7813
+ code: "custom",
7814
+ path: ["priceAmount"],
7815
+ message: "Free appointment services cannot carry a positive price."
7816
+ });
7817
+ }
7741
7818
  });
7742
7819
  var appointmentSetupPractitionerDraftSchema = z7.object({
7743
7820
  ref: appointmentSetupRefSchema,
@@ -8155,6 +8232,71 @@ function registerManifest(manifest) {
8155
8232
  return manifest;
8156
8233
  }
8157
8234
 
8235
+ // ../theme-core/src/palette/utils/colorConversion.ts
8236
+ var mod = (a, n) => (a % n + n) % n;
8237
+ var deg = (x) => mod(x, 360);
8238
+ function hexToRgb(hex) {
8239
+ const h = hex.replace(/^#/, "");
8240
+ const m = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
8241
+ if (m.length !== 6) throw new Error("Bad hex");
8242
+ const int = parseInt(m, 16);
8243
+ return { r: int >> 16 & 255, g: int >> 8 & 255, b: int & 255 };
8244
+ }
8245
+ function srgbToLinear(u) {
8246
+ const x = u / 255;
8247
+ return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
8248
+ }
8249
+ function rgbToHsl(r, g, b) {
8250
+ const R = r / 255, G = g / 255, B = b / 255;
8251
+ const max = Math.max(R, G, B), min = Math.min(R, G, B);
8252
+ const d = max - min;
8253
+ let h = 0;
8254
+ if (d !== 0) {
8255
+ switch (max) {
8256
+ case R:
8257
+ h = (G - B) / d + (G < B ? 6 : 0);
8258
+ break;
8259
+ case G:
8260
+ h = (B - R) / d + 2;
8261
+ break;
8262
+ case B:
8263
+ h = (R - G) / d + 4;
8264
+ break;
8265
+ }
8266
+ h *= 60;
8267
+ }
8268
+ const l = (max + min) / 2;
8269
+ const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1));
8270
+ return { h, s, l };
8271
+ }
8272
+ function srgbToOklab(r, g, b) {
8273
+ const R = srgbToLinear(r), G = srgbToLinear(g), B = srgbToLinear(b);
8274
+ const l = 0.4122214708 * R + 0.5363325363 * G + 0.0514459929 * B;
8275
+ const m = 0.2119034982 * R + 0.6806995451 * G + 0.1073969566 * B;
8276
+ const s = 0.0883024619 * R + 0.2817188376 * G + 0.6299787005 * B;
8277
+ const l_ = Math.cbrt(l), m_ = Math.cbrt(m), s_ = Math.cbrt(s);
8278
+ const L = 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_;
8279
+ const a = 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_;
8280
+ const b2 = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_;
8281
+ return { L, a, b: b2 };
8282
+ }
8283
+ function oklabToOklch(L, a, b) {
8284
+ const C = Math.sqrt(a * a + b * b);
8285
+ const h = C < 1e-7 ? 0 : deg(Math.atan2(b, a) * 180 / Math.PI);
8286
+ return { L, C, h };
8287
+ }
8288
+ function featuresFromHex(hex) {
8289
+ const { r, g, b } = hexToRgb(hex);
8290
+ const { h, s, l } = rgbToHsl(r, g, b);
8291
+ const { L, a, b: b2 } = srgbToOklab(r, g, b);
8292
+ const { L: okL, C: okC, h: okH } = oklabToOklch(L, a, b2);
8293
+ const max = Math.max(r, g, b);
8294
+ const v = max / 255;
8295
+ const Y = 0.2126 * srgbToLinear(r) + 0.7152 * srgbToLinear(g) + 0.0722 * srgbToLinear(b);
8296
+ const chroma = s;
8297
+ return { r, g, b, h, s, l, v, Y, chroma, okL, okC, okH, hex };
8298
+ }
8299
+
8158
8300
  // ../theme-core/src/site-styles/appearancePresetResolution.ts
8159
8301
  function assertValidOptionGroups(preset2) {
8160
8302
  preset2.optionGroups?.forEach((group) => {
@@ -11684,6 +11826,9 @@ var curatedSiteStyleIdValues = [
11684
11826
  "site-style:bright-community",
11685
11827
  "site-style:quiet-luxury",
11686
11828
  "site-style:practical-services",
11829
+ "site-style:quiet-practice",
11830
+ "site-style:personal-retreat-journal",
11831
+ "site-style:tactile-workshop",
11687
11832
  "site-style:modern-wellness",
11688
11833
  "site-style:bold-launch",
11689
11834
  "site-style:south-west-twerk-school"
@@ -11766,7 +11911,8 @@ function defineCuratedSiteStyle(input) {
11766
11911
  name: input.name,
11767
11912
  description: input.description,
11768
11913
  generationBrief: input.generationBrief,
11769
- selectionKeywords: input.selectionKeywords ?? [],
11914
+ selectionKeywordRules: input.selectionKeywordRules ?? [],
11915
+ siteCreatorSelection: input.siteCreatorSelection ?? { kind: "explicit_only" },
11770
11916
  template: {
11771
11917
  id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
11772
11918
  name: input.name,
@@ -11910,12 +12056,13 @@ var curatedSiteStyles = [
11910
12056
  name: "Quiet Luxury",
11911
12057
  description: "Minimal, confident, and refined for premium experiences and private services.",
11912
12058
  generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
11913
- selectionKeywords: [
11914
- "luxury",
11915
- "premium",
11916
- "boutique",
11917
- "bespoke",
11918
- "exclusive"
12059
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 20 },
12060
+ selectionKeywordRules: [
12061
+ { kind: "word", value: "luxury" },
12062
+ { kind: "word", value: "premium" },
12063
+ { kind: "word", value: "boutique" },
12064
+ { kind: "word", value: "bespoke" },
12065
+ { kind: "word", value: "exclusive" }
11919
12066
  ],
11920
12067
  tokenRecipes: {
11921
12068
  palette: "high-contrast",
@@ -11944,13 +12091,14 @@ var curatedSiteStyles = [
11944
12091
  name: "Practical Services",
11945
12092
  description: "Efficient, plainspoken, and conversion-focused for trades and everyday services.",
11946
12093
  generationBrief: "Make services, location, trust signals, and contact paths obvious. Keep copy brief and avoid ornate visual treatments.",
11947
- selectionKeywords: [
11948
- "repair",
11949
- "plumb",
11950
- "electric",
11951
- "cleaning",
11952
- "landscap",
11953
- "contractor"
12094
+ siteCreatorSelection: { kind: "primary_goal_support" },
12095
+ selectionKeywordRules: [
12096
+ { kind: "word", value: "repair" },
12097
+ { kind: "substring", value: "plumb" },
12098
+ { kind: "substring", value: "electric" },
12099
+ { kind: "word", value: "cleaning" },
12100
+ { kind: "substring", value: "landscap" },
12101
+ { kind: "substring", value: "contractor" }
11954
12102
  ],
11955
12103
  tokenRecipes: {
11956
12104
  palette: "brand-led",
@@ -12001,18 +12149,134 @@ var curatedSiteStyles = [
12001
12149
  paletteChoice("warm-neutral-forest")
12002
12150
  ]
12003
12151
  }),
12152
+ defineCuratedSiteStyle({
12153
+ id: "site-style:quiet-practice",
12154
+ name: "Quiet Practice",
12155
+ description: "Grounded, calm, and practical for small appointment-first practices.",
12156
+ 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.",
12157
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 30 },
12158
+ selectionKeywordRules: [
12159
+ { kind: "substring", value: "massage" },
12160
+ { kind: "word", value: "bodywork" },
12161
+ { kind: "phrase", value: "appointment practice" },
12162
+ { kind: "phrase", value: "appointment-first" },
12163
+ { kind: "substring", value: "practitioner" },
12164
+ { kind: "substring", value: "therap" },
12165
+ { kind: "substring", value: "clinic" },
12166
+ { kind: "phrase", value: "wellness practice" }
12167
+ ],
12168
+ tokenRecipes: {
12169
+ palette: "soft-natural",
12170
+ contrast: "standard",
12171
+ radius: "soft",
12172
+ shadow: "subtle",
12173
+ typography: "clean-sans",
12174
+ spacing: "regular",
12175
+ motion: "subtle"
12176
+ },
12177
+ compositionBudget: quietBudget,
12178
+ recommendedHeaderLookIds: ["practical-utility", "clean-base", "centered-calm"],
12179
+ buttonPersonalityChoices: [
12180
+ buttonChoice("pebble"),
12181
+ buttonChoice("soft-pill"),
12182
+ buttonChoice("editorial-link")
12183
+ ],
12184
+ paletteVariantChoices: [
12185
+ paletteChoice("soft-natural-stone"),
12186
+ paletteChoice("soft-natural-sage"),
12187
+ paletteChoice("warm-neutral-clay")
12188
+ ]
12189
+ }),
12190
+ defineCuratedSiteStyle({
12191
+ id: "site-style:personal-retreat-journal",
12192
+ name: "Personal Retreat Journal",
12193
+ description: "Warm, story-led, and readable for solo practitioners with mixed offers.",
12194
+ 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.",
12195
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 40 },
12196
+ selectionKeywordRules: [
12197
+ { kind: "substring", value: "retreat" },
12198
+ { kind: "phrase", value: "solo practitioner" },
12199
+ { kind: "phrase", value: "personal brand" },
12200
+ { kind: "substring", value: "teacher" },
12201
+ { kind: "substring", value: "coach" },
12202
+ { kind: "phrase", value: "retreat resources" },
12203
+ { kind: "substring", value: "journal" }
12204
+ ],
12205
+ tokenRecipes: {
12206
+ palette: "warm-neutral",
12207
+ contrast: "standard",
12208
+ radius: "soft",
12209
+ shadow: "subtle",
12210
+ typography: "serif-editorial",
12211
+ spacing: "airy",
12212
+ motion: "subtle"
12213
+ },
12214
+ compositionBudget: balancedBudget,
12215
+ recommendedHeaderLookIds: ["editorial-line", "centered-calm", "minimal-transparent"],
12216
+ buttonPersonalityChoices: [
12217
+ buttonChoice("editorial-link"),
12218
+ buttonChoice("soft-pill"),
12219
+ buttonChoice("brushed-wash")
12220
+ ],
12221
+ paletteVariantChoices: [
12222
+ paletteChoice("warm-neutral-forest"),
12223
+ paletteChoice("warm-neutral-clay"),
12224
+ paletteChoice("soft-natural-stone")
12225
+ ]
12226
+ }),
12227
+ defineCuratedSiteStyle({
12228
+ id: "site-style:tactile-workshop",
12229
+ name: "Tactile Workshop",
12230
+ description: "Bright, hands-on, and image-led for maker studios, workshops, and creative classes.",
12231
+ 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.",
12232
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 50 },
12233
+ selectionKeywordRules: [
12234
+ { kind: "substring", value: "ceramic" },
12235
+ { kind: "word", value: "pottery" },
12236
+ { kind: "phrase", value: "maker studio" },
12237
+ { kind: "phrase", value: "craft class" },
12238
+ { kind: "phrase", value: "craft workshop" },
12239
+ { kind: "word", value: "clay" },
12240
+ { kind: "word", value: "kiln" }
12241
+ ],
12242
+ tokenRecipes: {
12243
+ palette: "brand-led",
12244
+ contrast: "standard",
12245
+ radius: "soft",
12246
+ shadow: "subtle",
12247
+ typography: "friendly-sans",
12248
+ spacing: "regular",
12249
+ motion: "subtle"
12250
+ },
12251
+ compositionBudget: balancedBudget,
12252
+ recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
12253
+ recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
12254
+ buttonPersonalityChoices: [
12255
+ buttonChoice("pebble"),
12256
+ buttonChoice("confident-chip"),
12257
+ buttonChoice("ink-stamp"),
12258
+ buttonChoice("editorial-link")
12259
+ ],
12260
+ paletteVariantChoices: [
12261
+ paletteChoice("brand-led-warm"),
12262
+ paletteChoice("brand-led-cool"),
12263
+ paletteChoice("soft-natural-watercolor"),
12264
+ paletteChoice("warm-neutral-clay")
12265
+ ]
12266
+ }),
12004
12267
  defineCuratedSiteStyle({
12005
12268
  id: "site-style:bold-launch",
12006
12269
  name: "Bold Launch",
12007
12270
  description: "High-energy and punchy for launches, campaigns, and creative offers.",
12008
12271
  generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
12009
- selectionKeywords: [
12010
- "launch",
12011
- "campaign",
12012
- "preorder",
12013
- "pre-order",
12014
- "waitlist",
12015
- "drop"
12272
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 10 },
12273
+ selectionKeywordRules: [
12274
+ { kind: "substring", value: "launch" },
12275
+ { kind: "substring", value: "campaign" },
12276
+ { kind: "word", value: "preorder" },
12277
+ { kind: "phrase", value: "pre-order" },
12278
+ { kind: "substring", value: "waitlist" },
12279
+ { kind: "word", value: "drop" }
12016
12280
  ],
12017
12281
  tokenRecipes: {
12018
12282
  palette: "high-contrast",
@@ -12043,15 +12307,6 @@ var curatedSiteStyles = [
12043
12307
  name: "South West Twerk School",
12044
12308
  description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
12045
12309
  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.",
12046
- selectionKeywords: [
12047
- "dance",
12048
- "classes",
12049
- "workshop",
12050
- "school",
12051
- "movement",
12052
- "performance",
12053
- "community"
12054
- ],
12055
12310
  tokenRecipes: {
12056
12311
  palette: "brand-led",
12057
12312
  contrast: "maximum",
@@ -12358,25 +12613,19 @@ var defaultDesignRuntimeRules = defineDesignRuntimeRules({
12358
12613
  "muted-band": {
12359
12614
  background: {
12360
12615
  type: "color",
12361
- color: "muted",
12362
- textColor: "text",
12363
- headingColor: "text"
12616
+ color: "muted"
12364
12617
  }
12365
12618
  },
12366
12619
  "accent-band": {
12367
12620
  background: {
12368
12621
  type: "color",
12369
- color: "primary",
12370
- textColor: "primaryForeground",
12371
- headingColor: "primaryForeground"
12622
+ color: "primary"
12372
12623
  }
12373
12624
  },
12374
12625
  "brand-depth-band": {
12375
12626
  background: {
12376
12627
  type: "color",
12377
- color: "primary-800",
12378
- textColor: "primaryForeground",
12379
- headingColor: "primaryForeground"
12628
+ color: "primary-800"
12380
12629
  }
12381
12630
  },
12382
12631
  "hero-image": {
@@ -18473,6 +18722,16 @@ var jsonArrayTransform = {
18473
18722
  return "";
18474
18723
  }
18475
18724
  };
18725
+ var csvTransform = {
18726
+ id: "value.csv",
18727
+ kind: "formatter",
18728
+ summary: "Normalize a string or array of strings into a comma-separated list",
18729
+ run: (value) => {
18730
+ const rawValues = Array.isArray(value) ? value : typeof value === "string" ? value.split(",") : [];
18731
+ const normalized = rawValues.filter((item) => typeof item === "string").map((item) => item.trim()).filter(Boolean);
18732
+ return normalized.length > 0 ? Array.from(new Set(normalized)).join(",") : "";
18733
+ }
18734
+ };
18476
18735
  var marqueeLoopOptionsSchema = z36.object({
18477
18736
  minItems: z36.number().int().min(1).default(10)
18478
18737
  });
@@ -18498,6 +18757,7 @@ var formattingTransforms = [
18498
18757
  dateFormatShort,
18499
18758
  arrayLengthTransform,
18500
18759
  jsonArrayTransform,
18760
+ csvTransform,
18501
18761
  marqueeLoopTransform
18502
18762
  ];
18503
18763
 
@@ -18981,73 +19241,6 @@ var uiTransforms = [
18981
19241
 
18982
19242
  // ../blocks/src/system/transforms/registry/layout.ts
18983
19243
  import { z as z38 } from "zod";
18984
-
18985
- // ../theme-core/src/palette/utils/colorConversion.ts
18986
- var mod = (a, n) => (a % n + n) % n;
18987
- var deg = (x) => mod(x, 360);
18988
- function hexToRgb(hex) {
18989
- const h = hex.replace(/^#/, "");
18990
- const m = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
18991
- if (m.length !== 6) throw new Error("Bad hex");
18992
- const int = parseInt(m, 16);
18993
- return { r: int >> 16 & 255, g: int >> 8 & 255, b: int & 255 };
18994
- }
18995
- function srgbToLinear(u) {
18996
- const x = u / 255;
18997
- return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
18998
- }
18999
- function rgbToHsl(r, g, b) {
19000
- const R = r / 255, G = g / 255, B = b / 255;
19001
- const max = Math.max(R, G, B), min = Math.min(R, G, B);
19002
- const d = max - min;
19003
- let h = 0;
19004
- if (d !== 0) {
19005
- switch (max) {
19006
- case R:
19007
- h = (G - B) / d + (G < B ? 6 : 0);
19008
- break;
19009
- case G:
19010
- h = (B - R) / d + 2;
19011
- break;
19012
- case B:
19013
- h = (R - G) / d + 4;
19014
- break;
19015
- }
19016
- h *= 60;
19017
- }
19018
- const l = (max + min) / 2;
19019
- const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1));
19020
- return { h, s, l };
19021
- }
19022
- function srgbToOklab(r, g, b) {
19023
- const R = srgbToLinear(r), G = srgbToLinear(g), B = srgbToLinear(b);
19024
- const l = 0.4122214708 * R + 0.5363325363 * G + 0.0514459929 * B;
19025
- const m = 0.2119034982 * R + 0.6806995451 * G + 0.1073969566 * B;
19026
- const s = 0.0883024619 * R + 0.2817188376 * G + 0.6299787005 * B;
19027
- const l_ = Math.cbrt(l), m_ = Math.cbrt(m), s_ = Math.cbrt(s);
19028
- const L = 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_;
19029
- const a = 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_;
19030
- const b2 = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_;
19031
- return { L, a, b: b2 };
19032
- }
19033
- function oklabToOklch(L, a, b) {
19034
- const C = Math.sqrt(a * a + b * b);
19035
- const h = C < 1e-7 ? 0 : deg(Math.atan2(b, a) * 180 / Math.PI);
19036
- return { L, C, h };
19037
- }
19038
- function featuresFromHex(hex) {
19039
- const { r, g, b } = hexToRgb(hex);
19040
- const { h, s, l } = rgbToHsl(r, g, b);
19041
- const { L, a, b: b2 } = srgbToOklab(r, g, b);
19042
- const { L: okL, C: okC, h: okH } = oklabToOklch(L, a, b2);
19043
- const max = Math.max(r, g, b);
19044
- const v = max / 255;
19045
- const Y = 0.2126 * srgbToLinear(r) + 0.7152 * srgbToLinear(g) + 0.0722 * srgbToLinear(b);
19046
- const chroma = s;
19047
- return { r, g, b, h, s, l, v, Y, chroma, okL, okC, okH, hex };
19048
- }
19049
-
19050
- // ../blocks/src/system/transforms/registry/layout.ts
19051
19244
  var joinClasses4 = (parts) => parts.filter(
19052
19245
  (part) => typeof part === "string" && part.trim().length > 0
19053
19246
  ).join(" ").replace(/\s+/g, " ").trim();
@@ -23728,7 +23921,12 @@ var eventListingBlockDefinition = {
23728
23921
  detailLevel: "listing",
23729
23922
  kind: { $bind: { from: "content.kind" } },
23730
23923
  eventSurface: { $bind: { from: "content.eventSurface" } },
23731
- eventPresets: { $bind: { from: "content.filterEventPresets" } },
23924
+ eventPresets: {
23925
+ $bind: {
23926
+ from: "content.filterEventPresets",
23927
+ transforms: [{ id: "value.csv" }]
23928
+ }
23929
+ },
23732
23930
  scheduleScope: { $bind: { from: "content.scheduleScope" } }
23733
23931
  },
23734
23932
  mode: "server"
@@ -24480,7 +24678,12 @@ var eventCalendarBlockDefinition = {
24480
24678
  // Pass filter params if configured
24481
24679
  kind: { $bind: { from: "content.kind" } },
24482
24680
  eventSurface: { $bind: { from: "content.eventSurface" } },
24483
- eventPresets: { $bind: { from: "content.filterEventPresets" } },
24681
+ eventPresets: {
24682
+ $bind: {
24683
+ from: "content.filterEventPresets",
24684
+ transforms: [{ id: "value.csv" }]
24685
+ }
24686
+ },
24484
24687
  scheduleScope: { $bind: { from: "content.scheduleScope" } },
24485
24688
  categoryIds: { $bind: { from: "content.filterCategoryIds" } },
24486
24689
  staffMemberId: { $bind: { from: "content.filterStaffMemberId" } },
@@ -30087,8 +30290,7 @@ var dashboardNavVisibilityBaseSchema2 = z66.object({
30087
30290
  var dashboardNavVisibilityRolesSchema2 = z66.object({
30088
30291
  administrator: dashboardNavVisibilityBaseSchema2.optional(),
30089
30292
  editor: dashboardNavVisibilityBaseSchema2.optional(),
30090
- team_member: dashboardNavVisibilityBaseSchema2.optional(),
30091
- event_host: dashboardNavVisibilityBaseSchema2.optional()
30293
+ team_member: dashboardNavVisibilityBaseSchema2.optional()
30092
30294
  }).strip().optional();
30093
30295
  var dashboardNavVisibilitySchema2 = dashboardNavVisibilityBaseSchema2.extend({
30094
30296
  roles: dashboardNavVisibilityRolesSchema2