@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
@@ -46,6 +46,17 @@ function fallbackBinding(...sources) {
46
46
  // src/config/validation.ts
47
47
  import { z as z68 } from "zod";
48
48
 
49
+ // ../api/src/apiEndpointTypes.ts
50
+ function blockedDemoMutationPolicy(classification, publicMessage) {
51
+ if (publicMessage.trim() === "") {
52
+ throw new Error(`Demo mutation policy ${classification} requires publicMessage.`);
53
+ }
54
+ return {
55
+ classification,
56
+ publicMessage
57
+ };
58
+ }
59
+
49
60
  // ../api/src/cache-tags.ts
50
61
  var TAG_TEMPLATES = {
51
62
  siteCollection: "riverbank:site",
@@ -76,6 +87,18 @@ var TAG_TEMPLATES = {
76
87
  };
77
88
 
78
89
  // ../api/src/endpoints.ts
90
+ var DEMO_MUTATION_BLOCKED_HIDDEN = blockedDemoMutationPolicy(
91
+ "blocked-hidden",
92
+ "This action is not available in demo sites."
93
+ );
94
+ var DEMO_MUTATION_BLOCKED_DISABLED = blockedDemoMutationPolicy(
95
+ "blocked-disabled",
96
+ "This setting is disabled in demo sites."
97
+ );
98
+ var DEMO_MUTATION_INTERNAL_ONLY = blockedDemoMutationPolicy(
99
+ "internal-only",
100
+ "This internal operation is not available in demo sites."
101
+ );
79
102
  var ENDPOINT_DEFINITIONS = {
80
103
  // AI endpoints - no cache due to dynamic nature
81
104
  aiContentUpdateChat: {
@@ -192,7 +215,8 @@ var ENDPOINT_DEFINITIONS = {
192
215
  path: "/sites/{siteId}/ai/generate",
193
216
  method: "POST",
194
217
  auth: "user",
195
- responseKind: "json"
218
+ responseKind: "json",
219
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
196
220
  },
197
221
  getOnboardingPreviewStatus: {
198
222
  path: "/public/sites/{siteId}/onboarding/preview-status",
@@ -213,7 +237,8 @@ var ENDPOINT_DEFINITIONS = {
213
237
  method: "POST",
214
238
  auth: "user",
215
239
  errors: [],
216
- responseKind: "json"
240
+ responseKind: "json",
241
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED
217
242
  },
218
243
  goLiveSite: {
219
244
  path: "/sites/{siteId}/launch/go-live",
@@ -282,20 +307,23 @@ var ENDPOINT_DEFINITIONS = {
282
307
  path: "/sites/{siteId}/ai/site-wizard/goals",
283
308
  method: "POST",
284
309
  auth: "user",
285
- responseKind: "json"
310
+ responseKind: "json",
311
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
286
312
  },
287
313
  aiSiteWizardIntakeTriage: {
288
314
  path: "/sites/{siteId}/ai/site-wizard/intake-triage",
289
315
  method: "POST",
290
316
  auth: "user",
291
- responseKind: "json"
317
+ responseKind: "json",
318
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
292
319
  },
293
320
  aiSiteWizardTelemetry: {
294
321
  path: "/sites/{siteId}/ai/site-wizard/telemetry",
295
322
  method: "POST",
296
323
  auth: "user",
297
324
  errors: [],
298
- responseKind: "json"
325
+ responseKind: "json",
326
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
299
327
  },
300
328
  // Admin SEO
301
329
  listGscPropertiesAdmin: {
@@ -502,7 +530,7 @@ var ENDPOINT_DEFINITIONS = {
502
530
  responseKind: "json",
503
531
  errors: ["resource:not_found", "server:internal_error"]
504
532
  },
505
- // Ops (event hosts/admins)
533
+ // Ops (staff event operators/admins)
506
534
  opsListUpcomingEventOccurrences: {
507
535
  path: "/ops/sites/{siteId}/events",
508
536
  method: "GET",
@@ -520,6 +548,7 @@ var ENDPOINT_DEFINITIONS = {
520
548
  method: "POST",
521
549
  auth: "user",
522
550
  responseKind: "json",
551
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
523
552
  errors: [
524
553
  "validation:invalid_input",
525
554
  "auth:forbidden",
@@ -532,6 +561,7 @@ var ENDPOINT_DEFINITIONS = {
532
561
  method: "POST",
533
562
  auth: "user",
534
563
  responseKind: "json",
564
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
535
565
  errors: [
536
566
  "validation:invalid_input",
537
567
  "auth:forbidden",
@@ -550,6 +580,7 @@ var ENDPOINT_DEFINITIONS = {
550
580
  method: "POST",
551
581
  auth: "user",
552
582
  responseKind: "json",
583
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
553
584
  errors: [
554
585
  "validation:invalid_input",
555
586
  "auth:forbidden",
@@ -583,6 +614,7 @@ var ENDPOINT_DEFINITIONS = {
583
614
  method: "POST",
584
615
  auth: "user",
585
616
  responseKind: "json",
617
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
586
618
  errors: [
587
619
  "validation:invalid_input",
588
620
  "auth:forbidden",
@@ -611,7 +643,8 @@ var ENDPOINT_DEFINITIONS = {
611
643
  method: "POST",
612
644
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings],
613
645
  auth: "user",
614
- responseKind: "json"
646
+ responseKind: "json",
647
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
615
648
  },
616
649
  previewEmailTemplate: {
617
650
  path: "/sites/{siteId}/settings/emails/preview",
@@ -662,14 +695,16 @@ var ENDPOINT_DEFINITIONS = {
662
695
  method: "POST",
663
696
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
664
697
  auth: "user",
665
- responseKind: "json"
698
+ responseKind: "json",
699
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
666
700
  },
667
701
  createNewsletterSubscribersImportUploadUrl: {
668
702
  path: "/sites/{siteId}/newsletter/subscribers/import-url",
669
703
  method: "POST",
670
704
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
671
705
  auth: "user",
672
- responseKind: "json"
706
+ responseKind: "json",
707
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
673
708
  },
674
709
  exportNewsletterSubscribersCsv: {
675
710
  path: "/sites/{siteId}/newsletter/subscribers/export.csv",
@@ -866,14 +901,16 @@ var ENDPOINT_DEFINITIONS = {
866
901
  method: "POST",
867
902
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
868
903
  auth: "user",
869
- responseKind: "json"
904
+ responseKind: "json",
905
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
870
906
  },
871
907
  testSendNewsletterCampaign: {
872
908
  path: "/sites/{siteId}/newsletter/campaigns/{campaignId}/test-send",
873
909
  method: "POST",
874
910
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
875
911
  auth: "user",
876
- responseKind: "json"
912
+ responseKind: "json",
913
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
877
914
  },
878
915
  listNewsletterSendJobs: {
879
916
  path: "/sites/{siteId}/newsletter/jobs",
@@ -921,6 +958,20 @@ var ENDPOINT_DEFINITIONS = {
921
958
  responseKind: "json",
922
959
  errors: ["validation:invalid_input", "billing:plan_limit_exceeded", "server:internal_error"]
923
960
  },
961
+ createAppointmentResourceWithAccountAccess: {
962
+ path: "/sites/{siteId}/bookings/resources/account-access",
963
+ method: "POST",
964
+ auth: "user",
965
+ responseKind: "json",
966
+ errors: [
967
+ "validation:invalid_input",
968
+ "auth:forbidden",
969
+ "billing:plan_limit_exceeded",
970
+ "resource:conflict",
971
+ "resource:not_found",
972
+ "server:internal_error"
973
+ ]
974
+ },
924
975
  getAppointmentResource: {
925
976
  path: "/sites/{siteId}/bookings/resources/{resourceId}",
926
977
  method: "GET",
@@ -1561,7 +1612,8 @@ var ENDPOINT_DEFINITIONS = {
1561
1612
  method: "DELETE",
1562
1613
  tags: ["site", "site-{siteId}"],
1563
1614
  auth: "user",
1564
- responseKind: "json"
1615
+ responseKind: "json",
1616
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
1565
1617
  },
1566
1618
  listSiteMembers: {
1567
1619
  path: "/sites/{siteId}/members",
@@ -2017,7 +2069,8 @@ var ENDPOINT_DEFINITIONS = {
2017
2069
  method: "POST",
2018
2070
  tags: ["site-{siteId}", "content-{siteId}-{type}"],
2019
2071
  auth: "user",
2020
- responseKind: "json"
2072
+ responseKind: "json",
2073
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
2021
2074
  },
2022
2075
  updateSiteGeneralSettings: {
2023
2076
  path: "/sites/{siteId}/settings/general",
@@ -4256,6 +4309,7 @@ var ENDPOINT_DEFINITIONS = {
4256
4309
  method: "POST",
4257
4310
  tags: ["site-{siteId}"],
4258
4311
  auth: "user",
4312
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN,
4259
4313
  errors: [
4260
4314
  "validation:invalid_input",
4261
4315
  "auth:forbidden",
@@ -4270,6 +4324,7 @@ var ENDPOINT_DEFINITIONS = {
4270
4324
  method: "POST",
4271
4325
  tags: ["site-{siteId}"],
4272
4326
  auth: "user",
4327
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN,
4273
4328
  errors: [
4274
4329
  "validation:invalid_input",
4275
4330
  "auth:forbidden",
@@ -4579,6 +4634,7 @@ var ENDPOINT_DEFINITIONS = {
4579
4634
  tags: ["site-{siteId}", "passes-{siteId}"],
4580
4635
  auth: "user",
4581
4636
  responseKind: "json",
4637
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4582
4638
  errors: ["validation:invalid_input", "server:internal_error"]
4583
4639
  },
4584
4640
  getBookingPass: {
@@ -4594,6 +4650,7 @@ var ENDPOINT_DEFINITIONS = {
4594
4650
  tags: ["site-{siteId}", "passes-{siteId}"],
4595
4651
  auth: "user",
4596
4652
  responseKind: "json",
4653
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4597
4654
  errors: [
4598
4655
  "validation:invalid_input",
4599
4656
  "resource:not_found",
@@ -4606,6 +4663,7 @@ var ENDPOINT_DEFINITIONS = {
4606
4663
  tags: ["site-{siteId}", "passes-{siteId}"],
4607
4664
  auth: "user",
4608
4665
  responseKind: "json",
4666
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4609
4667
  errors: [
4610
4668
  "validation:invalid_input",
4611
4669
  "resource:not_found",
@@ -4661,6 +4719,7 @@ var ENDPOINT_DEFINITIONS = {
4661
4719
  tags: ["site-{siteId}", "memberships-{siteId}"],
4662
4720
  auth: "user",
4663
4721
  responseKind: "json",
4722
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4664
4723
  errors: ["validation:invalid_input", "server:internal_error"]
4665
4724
  },
4666
4725
  getBookingMembership: {
@@ -4676,6 +4735,7 @@ var ENDPOINT_DEFINITIONS = {
4676
4735
  tags: ["site-{siteId}", "memberships-{siteId}"],
4677
4736
  auth: "user",
4678
4737
  responseKind: "json",
4738
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4679
4739
  errors: [
4680
4740
  "validation:invalid_input",
4681
4741
  "resource:not_found",
@@ -4688,6 +4748,7 @@ var ENDPOINT_DEFINITIONS = {
4688
4748
  tags: ["site-{siteId}", "memberships-{siteId}"],
4689
4749
  auth: "user",
4690
4750
  responseKind: "json",
4751
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4691
4752
  errors: [
4692
4753
  "validation:invalid_input",
4693
4754
  "resource:not_found",
@@ -4904,6 +4965,7 @@ var ENDPOINT_DEFINITIONS = {
4904
4965
  tags: ["site-{siteId}", "customers-{siteId}"],
4905
4966
  auth: "user",
4906
4967
  responseKind: "json",
4968
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4907
4969
  errors: [
4908
4970
  "validation:invalid_input",
4909
4971
  "auth:forbidden",
@@ -6492,6 +6554,7 @@ var ALLOWED_TRANSFORM_IDS = [
6492
6554
  "date.formatShort",
6493
6555
  "array.length",
6494
6556
  "value.jsonArray",
6557
+ "value.csv",
6495
6558
  "array.marqueeLoop",
6496
6559
  // Layout (layout.ts)
6497
6560
  "layout.maxWidthClass",
@@ -7261,8 +7324,7 @@ var dashboardNavVisibilityBaseSchema = z5.object({
7261
7324
  var dashboardNavVisibilityRolesSchema = z5.object({
7262
7325
  administrator: dashboardNavVisibilityBaseSchema.optional(),
7263
7326
  editor: dashboardNavVisibilityBaseSchema.optional(),
7264
- team_member: dashboardNavVisibilityBaseSchema.optional(),
7265
- event_host: dashboardNavVisibilityBaseSchema.optional()
7327
+ team_member: dashboardNavVisibilityBaseSchema.optional()
7266
7328
  }).strip().optional();
7267
7329
  var dashboardNavVisibilitySchema = dashboardNavVisibilityBaseSchema.extend({
7268
7330
  roles: dashboardNavVisibilityRolesSchema
@@ -7783,6 +7845,21 @@ var appointmentSetupServiceDraftSchema = z7.object({
7783
7845
  timezone: z7.string().trim().min(1).nullable(),
7784
7846
  payment: appointmentSetupPaymentDraftSchema,
7785
7847
  assignment: appointmentSetupServiceAssignmentDraftSchema
7848
+ }).superRefine((service, ctx) => {
7849
+ if (service.payment.priceType === "paid" && (service.priceAmount === null || service.priceAmount <= 0)) {
7850
+ ctx.addIssue({
7851
+ code: "custom",
7852
+ path: ["priceAmount"],
7853
+ message: "Paid appointment services need a positive price."
7854
+ });
7855
+ }
7856
+ if (service.payment.priceType === "free" && service.priceAmount !== null && service.priceAmount > 0) {
7857
+ ctx.addIssue({
7858
+ code: "custom",
7859
+ path: ["priceAmount"],
7860
+ message: "Free appointment services cannot carry a positive price."
7861
+ });
7862
+ }
7786
7863
  });
7787
7864
  var appointmentSetupPractitionerDraftSchema = z7.object({
7788
7865
  ref: appointmentSetupRefSchema,
@@ -8200,6 +8277,71 @@ function registerManifest(manifest) {
8200
8277
  return manifest;
8201
8278
  }
8202
8279
 
8280
+ // ../theme-core/src/palette/utils/colorConversion.ts
8281
+ var mod = (a, n) => (a % n + n) % n;
8282
+ var deg = (x) => mod(x, 360);
8283
+ function hexToRgb(hex) {
8284
+ const h = hex.replace(/^#/, "");
8285
+ const m = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
8286
+ if (m.length !== 6) throw new Error("Bad hex");
8287
+ const int = parseInt(m, 16);
8288
+ return { r: int >> 16 & 255, g: int >> 8 & 255, b: int & 255 };
8289
+ }
8290
+ function srgbToLinear(u) {
8291
+ const x = u / 255;
8292
+ return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
8293
+ }
8294
+ function rgbToHsl(r, g, b) {
8295
+ const R = r / 255, G = g / 255, B = b / 255;
8296
+ const max = Math.max(R, G, B), min = Math.min(R, G, B);
8297
+ const d = max - min;
8298
+ let h = 0;
8299
+ if (d !== 0) {
8300
+ switch (max) {
8301
+ case R:
8302
+ h = (G - B) / d + (G < B ? 6 : 0);
8303
+ break;
8304
+ case G:
8305
+ h = (B - R) / d + 2;
8306
+ break;
8307
+ case B:
8308
+ h = (R - G) / d + 4;
8309
+ break;
8310
+ }
8311
+ h *= 60;
8312
+ }
8313
+ const l = (max + min) / 2;
8314
+ const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1));
8315
+ return { h, s, l };
8316
+ }
8317
+ function srgbToOklab(r, g, b) {
8318
+ const R = srgbToLinear(r), G = srgbToLinear(g), B = srgbToLinear(b);
8319
+ const l = 0.4122214708 * R + 0.5363325363 * G + 0.0514459929 * B;
8320
+ const m = 0.2119034982 * R + 0.6806995451 * G + 0.1073969566 * B;
8321
+ const s = 0.0883024619 * R + 0.2817188376 * G + 0.6299787005 * B;
8322
+ const l_ = Math.cbrt(l), m_ = Math.cbrt(m), s_ = Math.cbrt(s);
8323
+ const L = 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_;
8324
+ const a = 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_;
8325
+ const b2 = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_;
8326
+ return { L, a, b: b2 };
8327
+ }
8328
+ function oklabToOklch(L, a, b) {
8329
+ const C = Math.sqrt(a * a + b * b);
8330
+ const h = C < 1e-7 ? 0 : deg(Math.atan2(b, a) * 180 / Math.PI);
8331
+ return { L, C, h };
8332
+ }
8333
+ function featuresFromHex(hex) {
8334
+ const { r, g, b } = hexToRgb(hex);
8335
+ const { h, s, l } = rgbToHsl(r, g, b);
8336
+ const { L, a, b: b2 } = srgbToOklab(r, g, b);
8337
+ const { L: okL, C: okC, h: okH } = oklabToOklch(L, a, b2);
8338
+ const max = Math.max(r, g, b);
8339
+ const v = max / 255;
8340
+ const Y = 0.2126 * srgbToLinear(r) + 0.7152 * srgbToLinear(g) + 0.0722 * srgbToLinear(b);
8341
+ const chroma = s;
8342
+ return { r, g, b, h, s, l, v, Y, chroma, okL, okC, okH, hex };
8343
+ }
8344
+
8203
8345
  // ../theme-core/src/site-styles/appearancePresetResolution.ts
8204
8346
  function assertValidOptionGroups(preset2) {
8205
8347
  preset2.optionGroups?.forEach((group) => {
@@ -11729,6 +11871,9 @@ var curatedSiteStyleIdValues = [
11729
11871
  "site-style:bright-community",
11730
11872
  "site-style:quiet-luxury",
11731
11873
  "site-style:practical-services",
11874
+ "site-style:quiet-practice",
11875
+ "site-style:personal-retreat-journal",
11876
+ "site-style:tactile-workshop",
11732
11877
  "site-style:modern-wellness",
11733
11878
  "site-style:bold-launch",
11734
11879
  "site-style:south-west-twerk-school"
@@ -11811,7 +11956,8 @@ function defineCuratedSiteStyle(input) {
11811
11956
  name: input.name,
11812
11957
  description: input.description,
11813
11958
  generationBrief: input.generationBrief,
11814
- selectionKeywords: input.selectionKeywords ?? [],
11959
+ selectionKeywordRules: input.selectionKeywordRules ?? [],
11960
+ siteCreatorSelection: input.siteCreatorSelection ?? { kind: "explicit_only" },
11815
11961
  template: {
11816
11962
  id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
11817
11963
  name: input.name,
@@ -11955,12 +12101,13 @@ var curatedSiteStyles = [
11955
12101
  name: "Quiet Luxury",
11956
12102
  description: "Minimal, confident, and refined for premium experiences and private services.",
11957
12103
  generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
11958
- selectionKeywords: [
11959
- "luxury",
11960
- "premium",
11961
- "boutique",
11962
- "bespoke",
11963
- "exclusive"
12104
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 20 },
12105
+ selectionKeywordRules: [
12106
+ { kind: "word", value: "luxury" },
12107
+ { kind: "word", value: "premium" },
12108
+ { kind: "word", value: "boutique" },
12109
+ { kind: "word", value: "bespoke" },
12110
+ { kind: "word", value: "exclusive" }
11964
12111
  ],
11965
12112
  tokenRecipes: {
11966
12113
  palette: "high-contrast",
@@ -11989,13 +12136,14 @@ var curatedSiteStyles = [
11989
12136
  name: "Practical Services",
11990
12137
  description: "Efficient, plainspoken, and conversion-focused for trades and everyday services.",
11991
12138
  generationBrief: "Make services, location, trust signals, and contact paths obvious. Keep copy brief and avoid ornate visual treatments.",
11992
- selectionKeywords: [
11993
- "repair",
11994
- "plumb",
11995
- "electric",
11996
- "cleaning",
11997
- "landscap",
11998
- "contractor"
12139
+ siteCreatorSelection: { kind: "primary_goal_support" },
12140
+ selectionKeywordRules: [
12141
+ { kind: "word", value: "repair" },
12142
+ { kind: "substring", value: "plumb" },
12143
+ { kind: "substring", value: "electric" },
12144
+ { kind: "word", value: "cleaning" },
12145
+ { kind: "substring", value: "landscap" },
12146
+ { kind: "substring", value: "contractor" }
11999
12147
  ],
12000
12148
  tokenRecipes: {
12001
12149
  palette: "brand-led",
@@ -12046,18 +12194,134 @@ var curatedSiteStyles = [
12046
12194
  paletteChoice("warm-neutral-forest")
12047
12195
  ]
12048
12196
  }),
12197
+ defineCuratedSiteStyle({
12198
+ id: "site-style:quiet-practice",
12199
+ name: "Quiet Practice",
12200
+ description: "Grounded, calm, and practical for small appointment-first practices.",
12201
+ 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.",
12202
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 30 },
12203
+ selectionKeywordRules: [
12204
+ { kind: "substring", value: "massage" },
12205
+ { kind: "word", value: "bodywork" },
12206
+ { kind: "phrase", value: "appointment practice" },
12207
+ { kind: "phrase", value: "appointment-first" },
12208
+ { kind: "substring", value: "practitioner" },
12209
+ { kind: "substring", value: "therap" },
12210
+ { kind: "substring", value: "clinic" },
12211
+ { kind: "phrase", value: "wellness practice" }
12212
+ ],
12213
+ tokenRecipes: {
12214
+ palette: "soft-natural",
12215
+ contrast: "standard",
12216
+ radius: "soft",
12217
+ shadow: "subtle",
12218
+ typography: "clean-sans",
12219
+ spacing: "regular",
12220
+ motion: "subtle"
12221
+ },
12222
+ compositionBudget: quietBudget,
12223
+ recommendedHeaderLookIds: ["practical-utility", "clean-base", "centered-calm"],
12224
+ buttonPersonalityChoices: [
12225
+ buttonChoice("pebble"),
12226
+ buttonChoice("soft-pill"),
12227
+ buttonChoice("editorial-link")
12228
+ ],
12229
+ paletteVariantChoices: [
12230
+ paletteChoice("soft-natural-stone"),
12231
+ paletteChoice("soft-natural-sage"),
12232
+ paletteChoice("warm-neutral-clay")
12233
+ ]
12234
+ }),
12235
+ defineCuratedSiteStyle({
12236
+ id: "site-style:personal-retreat-journal",
12237
+ name: "Personal Retreat Journal",
12238
+ description: "Warm, story-led, and readable for solo practitioners with mixed offers.",
12239
+ 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.",
12240
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 40 },
12241
+ selectionKeywordRules: [
12242
+ { kind: "substring", value: "retreat" },
12243
+ { kind: "phrase", value: "solo practitioner" },
12244
+ { kind: "phrase", value: "personal brand" },
12245
+ { kind: "substring", value: "teacher" },
12246
+ { kind: "substring", value: "coach" },
12247
+ { kind: "phrase", value: "retreat resources" },
12248
+ { kind: "substring", value: "journal" }
12249
+ ],
12250
+ tokenRecipes: {
12251
+ palette: "warm-neutral",
12252
+ contrast: "standard",
12253
+ radius: "soft",
12254
+ shadow: "subtle",
12255
+ typography: "serif-editorial",
12256
+ spacing: "airy",
12257
+ motion: "subtle"
12258
+ },
12259
+ compositionBudget: balancedBudget,
12260
+ recommendedHeaderLookIds: ["editorial-line", "centered-calm", "minimal-transparent"],
12261
+ buttonPersonalityChoices: [
12262
+ buttonChoice("editorial-link"),
12263
+ buttonChoice("soft-pill"),
12264
+ buttonChoice("brushed-wash")
12265
+ ],
12266
+ paletteVariantChoices: [
12267
+ paletteChoice("warm-neutral-forest"),
12268
+ paletteChoice("warm-neutral-clay"),
12269
+ paletteChoice("soft-natural-stone")
12270
+ ]
12271
+ }),
12272
+ defineCuratedSiteStyle({
12273
+ id: "site-style:tactile-workshop",
12274
+ name: "Tactile Workshop",
12275
+ description: "Bright, hands-on, and image-led for maker studios, workshops, and creative classes.",
12276
+ 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.",
12277
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 50 },
12278
+ selectionKeywordRules: [
12279
+ { kind: "substring", value: "ceramic" },
12280
+ { kind: "word", value: "pottery" },
12281
+ { kind: "phrase", value: "maker studio" },
12282
+ { kind: "phrase", value: "craft class" },
12283
+ { kind: "phrase", value: "craft workshop" },
12284
+ { kind: "word", value: "clay" },
12285
+ { kind: "word", value: "kiln" }
12286
+ ],
12287
+ tokenRecipes: {
12288
+ palette: "brand-led",
12289
+ contrast: "standard",
12290
+ radius: "soft",
12291
+ shadow: "subtle",
12292
+ typography: "friendly-sans",
12293
+ spacing: "regular",
12294
+ motion: "subtle"
12295
+ },
12296
+ compositionBudget: balancedBudget,
12297
+ recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
12298
+ recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
12299
+ buttonPersonalityChoices: [
12300
+ buttonChoice("pebble"),
12301
+ buttonChoice("confident-chip"),
12302
+ buttonChoice("ink-stamp"),
12303
+ buttonChoice("editorial-link")
12304
+ ],
12305
+ paletteVariantChoices: [
12306
+ paletteChoice("brand-led-warm"),
12307
+ paletteChoice("brand-led-cool"),
12308
+ paletteChoice("soft-natural-watercolor"),
12309
+ paletteChoice("warm-neutral-clay")
12310
+ ]
12311
+ }),
12049
12312
  defineCuratedSiteStyle({
12050
12313
  id: "site-style:bold-launch",
12051
12314
  name: "Bold Launch",
12052
12315
  description: "High-energy and punchy for launches, campaigns, and creative offers.",
12053
12316
  generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
12054
- selectionKeywords: [
12055
- "launch",
12056
- "campaign",
12057
- "preorder",
12058
- "pre-order",
12059
- "waitlist",
12060
- "drop"
12317
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 10 },
12318
+ selectionKeywordRules: [
12319
+ { kind: "substring", value: "launch" },
12320
+ { kind: "substring", value: "campaign" },
12321
+ { kind: "word", value: "preorder" },
12322
+ { kind: "phrase", value: "pre-order" },
12323
+ { kind: "substring", value: "waitlist" },
12324
+ { kind: "word", value: "drop" }
12061
12325
  ],
12062
12326
  tokenRecipes: {
12063
12327
  palette: "high-contrast",
@@ -12088,15 +12352,6 @@ var curatedSiteStyles = [
12088
12352
  name: "South West Twerk School",
12089
12353
  description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
12090
12354
  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.",
12091
- selectionKeywords: [
12092
- "dance",
12093
- "classes",
12094
- "workshop",
12095
- "school",
12096
- "movement",
12097
- "performance",
12098
- "community"
12099
- ],
12100
12355
  tokenRecipes: {
12101
12356
  palette: "brand-led",
12102
12357
  contrast: "maximum",
@@ -12403,25 +12658,19 @@ var defaultDesignRuntimeRules = defineDesignRuntimeRules({
12403
12658
  "muted-band": {
12404
12659
  background: {
12405
12660
  type: "color",
12406
- color: "muted",
12407
- textColor: "text",
12408
- headingColor: "text"
12661
+ color: "muted"
12409
12662
  }
12410
12663
  },
12411
12664
  "accent-band": {
12412
12665
  background: {
12413
12666
  type: "color",
12414
- color: "primary",
12415
- textColor: "primaryForeground",
12416
- headingColor: "primaryForeground"
12667
+ color: "primary"
12417
12668
  }
12418
12669
  },
12419
12670
  "brand-depth-band": {
12420
12671
  background: {
12421
12672
  type: "color",
12422
- color: "primary-800",
12423
- textColor: "primaryForeground",
12424
- headingColor: "primaryForeground"
12673
+ color: "primary-800"
12425
12674
  }
12426
12675
  },
12427
12676
  "hero-image": {
@@ -18518,6 +18767,16 @@ var jsonArrayTransform = {
18518
18767
  return "";
18519
18768
  }
18520
18769
  };
18770
+ var csvTransform = {
18771
+ id: "value.csv",
18772
+ kind: "formatter",
18773
+ summary: "Normalize a string or array of strings into a comma-separated list",
18774
+ run: (value) => {
18775
+ const rawValues = Array.isArray(value) ? value : typeof value === "string" ? value.split(",") : [];
18776
+ const normalized = rawValues.filter((item) => typeof item === "string").map((item) => item.trim()).filter(Boolean);
18777
+ return normalized.length > 0 ? Array.from(new Set(normalized)).join(",") : "";
18778
+ }
18779
+ };
18521
18780
  var marqueeLoopOptionsSchema = z36.object({
18522
18781
  minItems: z36.number().int().min(1).default(10)
18523
18782
  });
@@ -18543,6 +18802,7 @@ var formattingTransforms = [
18543
18802
  dateFormatShort,
18544
18803
  arrayLengthTransform,
18545
18804
  jsonArrayTransform,
18805
+ csvTransform,
18546
18806
  marqueeLoopTransform
18547
18807
  ];
18548
18808
 
@@ -19026,73 +19286,6 @@ var uiTransforms = [
19026
19286
 
19027
19287
  // ../blocks/src/system/transforms/registry/layout.ts
19028
19288
  import { z as z38 } from "zod";
19029
-
19030
- // ../theme-core/src/palette/utils/colorConversion.ts
19031
- var mod = (a, n) => (a % n + n) % n;
19032
- var deg = (x) => mod(x, 360);
19033
- function hexToRgb(hex) {
19034
- const h = hex.replace(/^#/, "");
19035
- const m = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
19036
- if (m.length !== 6) throw new Error("Bad hex");
19037
- const int = parseInt(m, 16);
19038
- return { r: int >> 16 & 255, g: int >> 8 & 255, b: int & 255 };
19039
- }
19040
- function srgbToLinear(u) {
19041
- const x = u / 255;
19042
- return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
19043
- }
19044
- function rgbToHsl(r, g, b) {
19045
- const R = r / 255, G = g / 255, B = b / 255;
19046
- const max = Math.max(R, G, B), min = Math.min(R, G, B);
19047
- const d = max - min;
19048
- let h = 0;
19049
- if (d !== 0) {
19050
- switch (max) {
19051
- case R:
19052
- h = (G - B) / d + (G < B ? 6 : 0);
19053
- break;
19054
- case G:
19055
- h = (B - R) / d + 2;
19056
- break;
19057
- case B:
19058
- h = (R - G) / d + 4;
19059
- break;
19060
- }
19061
- h *= 60;
19062
- }
19063
- const l = (max + min) / 2;
19064
- const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1));
19065
- return { h, s, l };
19066
- }
19067
- function srgbToOklab(r, g, b) {
19068
- const R = srgbToLinear(r), G = srgbToLinear(g), B = srgbToLinear(b);
19069
- const l = 0.4122214708 * R + 0.5363325363 * G + 0.0514459929 * B;
19070
- const m = 0.2119034982 * R + 0.6806995451 * G + 0.1073969566 * B;
19071
- const s = 0.0883024619 * R + 0.2817188376 * G + 0.6299787005 * B;
19072
- const l_ = Math.cbrt(l), m_ = Math.cbrt(m), s_ = Math.cbrt(s);
19073
- const L = 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_;
19074
- const a = 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_;
19075
- const b2 = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_;
19076
- return { L, a, b: b2 };
19077
- }
19078
- function oklabToOklch(L, a, b) {
19079
- const C = Math.sqrt(a * a + b * b);
19080
- const h = C < 1e-7 ? 0 : deg(Math.atan2(b, a) * 180 / Math.PI);
19081
- return { L, C, h };
19082
- }
19083
- function featuresFromHex(hex) {
19084
- const { r, g, b } = hexToRgb(hex);
19085
- const { h, s, l } = rgbToHsl(r, g, b);
19086
- const { L, a, b: b2 } = srgbToOklab(r, g, b);
19087
- const { L: okL, C: okC, h: okH } = oklabToOklch(L, a, b2);
19088
- const max = Math.max(r, g, b);
19089
- const v = max / 255;
19090
- const Y = 0.2126 * srgbToLinear(r) + 0.7152 * srgbToLinear(g) + 0.0722 * srgbToLinear(b);
19091
- const chroma = s;
19092
- return { r, g, b, h, s, l, v, Y, chroma, okL, okC, okH, hex };
19093
- }
19094
-
19095
- // ../blocks/src/system/transforms/registry/layout.ts
19096
19289
  var joinClasses4 = (parts) => parts.filter(
19097
19290
  (part) => typeof part === "string" && part.trim().length > 0
19098
19291
  ).join(" ").replace(/\s+/g, " ").trim();
@@ -23773,7 +23966,12 @@ var eventListingBlockDefinition = {
23773
23966
  detailLevel: "listing",
23774
23967
  kind: { $bind: { from: "content.kind" } },
23775
23968
  eventSurface: { $bind: { from: "content.eventSurface" } },
23776
- eventPresets: { $bind: { from: "content.filterEventPresets" } },
23969
+ eventPresets: {
23970
+ $bind: {
23971
+ from: "content.filterEventPresets",
23972
+ transforms: [{ id: "value.csv" }]
23973
+ }
23974
+ },
23777
23975
  scheduleScope: { $bind: { from: "content.scheduleScope" } }
23778
23976
  },
23779
23977
  mode: "server"
@@ -24525,7 +24723,12 @@ var eventCalendarBlockDefinition = {
24525
24723
  // Pass filter params if configured
24526
24724
  kind: { $bind: { from: "content.kind" } },
24527
24725
  eventSurface: { $bind: { from: "content.eventSurface" } },
24528
- eventPresets: { $bind: { from: "content.filterEventPresets" } },
24726
+ eventPresets: {
24727
+ $bind: {
24728
+ from: "content.filterEventPresets",
24729
+ transforms: [{ id: "value.csv" }]
24730
+ }
24731
+ },
24529
24732
  scheduleScope: { $bind: { from: "content.scheduleScope" } },
24530
24733
  categoryIds: { $bind: { from: "content.filterCategoryIds" } },
24531
24734
  staffMemberId: { $bind: { from: "content.filterStaffMemberId" } },
@@ -30120,8 +30323,7 @@ var dashboardNavVisibilityBaseSchema2 = z66.object({
30120
30323
  var dashboardNavVisibilityRolesSchema2 = z66.object({
30121
30324
  administrator: dashboardNavVisibilityBaseSchema2.optional(),
30122
30325
  editor: dashboardNavVisibilityBaseSchema2.optional(),
30123
- team_member: dashboardNavVisibilityBaseSchema2.optional(),
30124
- event_host: dashboardNavVisibilityBaseSchema2.optional()
30326
+ team_member: dashboardNavVisibilityBaseSchema2.optional()
30125
30327
  }).strip().optional();
30126
30328
  var dashboardNavVisibilitySchema2 = dashboardNavVisibilityBaseSchema2.extend({
30127
30329
  roles: dashboardNavVisibilityRolesSchema2