@riverbankcms/sdk 0.64.0 → 0.67.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 (78) hide show
  1. package/dist/_dts/api/src/aiPlayground.d.ts +18 -11
  2. package/dist/_dts/api/src/apiEndpointTypes.d.ts +12 -0
  3. package/dist/_dts/api/src/bookingOperations.d.ts +1 -1
  4. package/dist/_dts/api/src/endpoints.d.ts +25 -0
  5. package/dist/_dts/api/src/sdkConfig/contracts.d.ts +0 -40
  6. package/dist/_dts/api/src/sdkContracts.d.ts +1 -1
  7. package/dist/_dts/api/src/siteMembers.d.ts +1 -1
  8. package/dist/_dts/api/src/siteOperations.d.ts +1 -1
  9. package/dist/_dts/billing/src/plans/types.d.ts +1 -1
  10. package/dist/_dts/blocks/src/bindings/index.d.ts +1 -1
  11. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  12. package/dist/_dts/blocks/src/system/transforms/registry/formatting.d.ts +1 -0
  13. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +2 -1
  14. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +81 -0
  15. package/dist/_dts/preview-next/src/client/blocks/pageDesignRuntimePreview.d.ts +7 -3
  16. package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -2
  17. package/dist/_dts/sdk/src/cli/commands/push/execute/footer.d.ts +33 -0
  18. package/dist/_dts/sdk/src/cli/commands/push-execute.d.ts +2 -1
  19. package/dist/_dts/sdk/src/cli/env.d.ts +2 -1
  20. package/dist/_dts/sdk/src/cli/merge-remote/entryMergePush.d.ts +2 -1
  21. package/dist/_dts/sdk/src/cli/site-commands/commandKeys.d.ts +13 -0
  22. package/dist/_dts/sdk/src/cli/site-commands/commandRuntime.d.ts +114 -0
  23. package/dist/_dts/sdk/src/cli/site-commands/entryCommands.d.ts +26 -48
  24. package/dist/_dts/sdk/src/cli/site-commands/footerCommands.d.ts +50 -0
  25. package/dist/_dts/sdk/src/cli/site-commands/formCommands.d.ts +57 -0
  26. package/dist/_dts/sdk/src/cli/site-commands/index.d.ts +5 -0
  27. package/dist/_dts/sdk/src/cli/site-commands/navigationCommands.d.ts +57 -0
  28. package/dist/_dts/sdk/src/cli/site-commands/pageCommands.d.ts +83 -0
  29. package/dist/_dts/sdk/src/cli/site-commands/pushExecution.d.ts +67 -14
  30. package/dist/_dts/sdk/src/cli/sync/executor.d.ts +10 -28
  31. package/dist/_dts/sdk/src/cli/sync/index.d.ts +1 -1
  32. package/dist/_dts/sdk/src/config/dashboard-validation.d.ts +0 -48
  33. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  34. package/dist/_dts/sdk/src/version.d.ts +1 -1
  35. package/dist/_dts/site-commands/src/adapter.d.ts +2 -2
  36. package/dist/_dts/site-commands/src/commands.d.ts +410 -13
  37. package/dist/_dts/site-commands/src/domain.d.ts +3 -3
  38. package/dist/_dts/site-commands/src/exposure.d.ts +41 -0
  39. package/dist/_dts/site-commands/src/index.d.ts +1 -0
  40. package/dist/_dts/site-commands/src/metadata.d.ts +93 -2
  41. package/dist/_dts/site-commands/src/planner.d.ts +13 -6
  42. package/dist/_dts/site-commands/src/refs.d.ts +13 -1
  43. package/dist/_dts/theme-core/src/palette/utils/index.d.ts +1 -0
  44. package/dist/_dts/theme-core/src/palette/utils/onColor.d.ts +2 -0
  45. package/dist/_dts/theme-core/src/site-styles/accessibleSurfaces.d.ts +83 -0
  46. package/dist/_dts/theme-core/src/site-styles/contentTemplateRuntimeCompiler.d.ts +2 -1
  47. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +89 -12
  48. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +8 -2
  49. package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -0
  50. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +3 -2
  51. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +9 -6
  52. package/dist/_dts/ui/src/callout.d.ts +1 -1
  53. package/dist/cli/index.mjs +4290 -2513
  54. package/dist/client/client.mjs +598 -372
  55. package/dist/client/hooks.mjs +311 -123
  56. package/dist/client/rendering/client.mjs +209 -68
  57. package/dist/client/rendering/islands.mjs +281 -150
  58. package/dist/client/rendering.mjs +416 -190
  59. package/dist/preview-next/before-render.mjs +61 -13
  60. package/dist/preview-next/client/runtime.mjs +930 -376
  61. package/dist/preview-next/middleware.mjs +61 -13
  62. package/dist/server/components.mjs +526 -325
  63. package/dist/server/config-validation.mjs +313 -125
  64. package/dist/server/config.mjs +313 -125
  65. package/dist/server/data.mjs +311 -123
  66. package/dist/server/index.mjs +78 -16
  67. package/dist/server/next.mjs +527 -326
  68. package/dist/server/page-converter.mjs +159 -41
  69. package/dist/server/prebuild.mjs +1 -1
  70. package/dist/server/rendering/server.mjs +526 -325
  71. package/dist/server/rendering.mjs +526 -325
  72. package/dist/server/routing.mjs +392 -131
  73. package/dist/server/server.mjs +312 -124
  74. package/dist/server/theme-bridge.mjs +155 -48
  75. package/package.json +1 -1
  76. package/dist/_dts/path-utils/src/index.d.ts +0 -8
  77. package/dist/_dts/path-utils/src/redirectPaths.d.ts +0 -26
  78. package/dist/_dts/path-utils/src/safeAppPath.d.ts +0 -26
@@ -8,6 +8,22 @@ var __export = (target, all) => {
8
8
  __defProp(target, name, { get: all[name], enumerable: true });
9
9
  };
10
10
 
11
+ // ../api/src/apiEndpointTypes.ts
12
+ function blockedDemoMutationPolicy(classification, publicMessage) {
13
+ if (publicMessage.trim() === "") {
14
+ throw new Error(`Demo mutation policy ${classification} requires publicMessage.`);
15
+ }
16
+ return {
17
+ classification,
18
+ publicMessage
19
+ };
20
+ }
21
+ var init_apiEndpointTypes = __esm({
22
+ "../api/src/apiEndpointTypes.ts"() {
23
+ "use strict";
24
+ }
25
+ });
26
+
11
27
  // ../api/src/cache-tags.ts
12
28
  var TAG_TEMPLATES;
13
29
  var init_cache_tags = __esm({
@@ -44,11 +60,24 @@ var init_cache_tags = __esm({
44
60
  });
45
61
 
46
62
  // ../api/src/endpoints.ts
47
- var ENDPOINT_DEFINITIONS;
63
+ var DEMO_MUTATION_BLOCKED_HIDDEN, DEMO_MUTATION_BLOCKED_DISABLED, DEMO_MUTATION_INTERNAL_ONLY, ENDPOINT_DEFINITIONS;
48
64
  var init_endpoints = __esm({
49
65
  "../api/src/endpoints.ts"() {
50
66
  "use strict";
67
+ init_apiEndpointTypes();
51
68
  init_cache_tags();
69
+ DEMO_MUTATION_BLOCKED_HIDDEN = blockedDemoMutationPolicy(
70
+ "blocked-hidden",
71
+ "This action is not available in demo sites."
72
+ );
73
+ DEMO_MUTATION_BLOCKED_DISABLED = blockedDemoMutationPolicy(
74
+ "blocked-disabled",
75
+ "This setting is disabled in demo sites."
76
+ );
77
+ DEMO_MUTATION_INTERNAL_ONLY = blockedDemoMutationPolicy(
78
+ "internal-only",
79
+ "This internal operation is not available in demo sites."
80
+ );
52
81
  ENDPOINT_DEFINITIONS = {
53
82
  // AI endpoints - no cache due to dynamic nature
54
83
  aiContentUpdateChat: {
@@ -165,7 +194,8 @@ var init_endpoints = __esm({
165
194
  path: "/sites/{siteId}/ai/generate",
166
195
  method: "POST",
167
196
  auth: "user",
168
- responseKind: "json"
197
+ responseKind: "json",
198
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
169
199
  },
170
200
  getOnboardingPreviewStatus: {
171
201
  path: "/public/sites/{siteId}/onboarding/preview-status",
@@ -186,7 +216,8 @@ var init_endpoints = __esm({
186
216
  method: "POST",
187
217
  auth: "user",
188
218
  errors: [],
189
- responseKind: "json"
219
+ responseKind: "json",
220
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED
190
221
  },
191
222
  goLiveSite: {
192
223
  path: "/sites/{siteId}/launch/go-live",
@@ -255,20 +286,23 @@ var init_endpoints = __esm({
255
286
  path: "/sites/{siteId}/ai/site-wizard/goals",
256
287
  method: "POST",
257
288
  auth: "user",
258
- responseKind: "json"
289
+ responseKind: "json",
290
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
259
291
  },
260
292
  aiSiteWizardIntakeTriage: {
261
293
  path: "/sites/{siteId}/ai/site-wizard/intake-triage",
262
294
  method: "POST",
263
295
  auth: "user",
264
- responseKind: "json"
296
+ responseKind: "json",
297
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
265
298
  },
266
299
  aiSiteWizardTelemetry: {
267
300
  path: "/sites/{siteId}/ai/site-wizard/telemetry",
268
301
  method: "POST",
269
302
  auth: "user",
270
303
  errors: [],
271
- responseKind: "json"
304
+ responseKind: "json",
305
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
272
306
  },
273
307
  // Admin SEO
274
308
  listGscPropertiesAdmin: {
@@ -475,7 +509,7 @@ var init_endpoints = __esm({
475
509
  responseKind: "json",
476
510
  errors: ["resource:not_found", "server:internal_error"]
477
511
  },
478
- // Ops (event hosts/admins)
512
+ // Ops (staff event operators/admins)
479
513
  opsListUpcomingEventOccurrences: {
480
514
  path: "/ops/sites/{siteId}/events",
481
515
  method: "GET",
@@ -493,6 +527,7 @@ var init_endpoints = __esm({
493
527
  method: "POST",
494
528
  auth: "user",
495
529
  responseKind: "json",
530
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
496
531
  errors: [
497
532
  "validation:invalid_input",
498
533
  "auth:forbidden",
@@ -505,6 +540,7 @@ var init_endpoints = __esm({
505
540
  method: "POST",
506
541
  auth: "user",
507
542
  responseKind: "json",
543
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
508
544
  errors: [
509
545
  "validation:invalid_input",
510
546
  "auth:forbidden",
@@ -523,6 +559,7 @@ var init_endpoints = __esm({
523
559
  method: "POST",
524
560
  auth: "user",
525
561
  responseKind: "json",
562
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
526
563
  errors: [
527
564
  "validation:invalid_input",
528
565
  "auth:forbidden",
@@ -556,6 +593,7 @@ var init_endpoints = __esm({
556
593
  method: "POST",
557
594
  auth: "user",
558
595
  responseKind: "json",
596
+ demoMutation: DEMO_MUTATION_INTERNAL_ONLY,
559
597
  errors: [
560
598
  "validation:invalid_input",
561
599
  "auth:forbidden",
@@ -584,7 +622,8 @@ var init_endpoints = __esm({
584
622
  method: "POST",
585
623
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteEmailSettings],
586
624
  auth: "user",
587
- responseKind: "json"
625
+ responseKind: "json",
626
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
588
627
  },
589
628
  previewEmailTemplate: {
590
629
  path: "/sites/{siteId}/settings/emails/preview",
@@ -635,14 +674,16 @@ var init_endpoints = __esm({
635
674
  method: "POST",
636
675
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
637
676
  auth: "user",
638
- responseKind: "json"
677
+ responseKind: "json",
678
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
639
679
  },
640
680
  createNewsletterSubscribersImportUploadUrl: {
641
681
  path: "/sites/{siteId}/newsletter/subscribers/import-url",
642
682
  method: "POST",
643
683
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
644
684
  auth: "user",
645
- responseKind: "json"
685
+ responseKind: "json",
686
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
646
687
  },
647
688
  exportNewsletterSubscribersCsv: {
648
689
  path: "/sites/{siteId}/newsletter/subscribers/export.csv",
@@ -839,14 +880,16 @@ var init_endpoints = __esm({
839
880
  method: "POST",
840
881
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
841
882
  auth: "user",
842
- responseKind: "json"
883
+ responseKind: "json",
884
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
843
885
  },
844
886
  testSendNewsletterCampaign: {
845
887
  path: "/sites/{siteId}/newsletter/campaigns/{campaignId}/test-send",
846
888
  method: "POST",
847
889
  tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteNewsletter],
848
890
  auth: "user",
849
- responseKind: "json"
891
+ responseKind: "json",
892
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
850
893
  },
851
894
  listNewsletterSendJobs: {
852
895
  path: "/sites/{siteId}/newsletter/jobs",
@@ -1534,7 +1577,8 @@ var init_endpoints = __esm({
1534
1577
  method: "DELETE",
1535
1578
  tags: ["site", "site-{siteId}"],
1536
1579
  auth: "user",
1537
- responseKind: "json"
1580
+ responseKind: "json",
1581
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
1538
1582
  },
1539
1583
  listSiteMembers: {
1540
1584
  path: "/sites/{siteId}/members",
@@ -1990,7 +2034,8 @@ var init_endpoints = __esm({
1990
2034
  method: "POST",
1991
2035
  tags: ["site-{siteId}", "content-{siteId}-{type}"],
1992
2036
  auth: "user",
1993
- responseKind: "json"
2037
+ responseKind: "json",
2038
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN
1994
2039
  },
1995
2040
  updateSiteGeneralSettings: {
1996
2041
  path: "/sites/{siteId}/settings/general",
@@ -4229,6 +4274,7 @@ var init_endpoints = __esm({
4229
4274
  method: "POST",
4230
4275
  tags: ["site-{siteId}"],
4231
4276
  auth: "user",
4277
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN,
4232
4278
  errors: [
4233
4279
  "validation:invalid_input",
4234
4280
  "auth:forbidden",
@@ -4243,6 +4289,7 @@ var init_endpoints = __esm({
4243
4289
  method: "POST",
4244
4290
  tags: ["site-{siteId}"],
4245
4291
  auth: "user",
4292
+ demoMutation: DEMO_MUTATION_BLOCKED_HIDDEN,
4246
4293
  errors: [
4247
4294
  "validation:invalid_input",
4248
4295
  "auth:forbidden",
@@ -4552,6 +4599,7 @@ var init_endpoints = __esm({
4552
4599
  tags: ["site-{siteId}", "passes-{siteId}"],
4553
4600
  auth: "user",
4554
4601
  responseKind: "json",
4602
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4555
4603
  errors: ["validation:invalid_input", "server:internal_error"]
4556
4604
  },
4557
4605
  getBookingPass: {
@@ -4567,6 +4615,7 @@ var init_endpoints = __esm({
4567
4615
  tags: ["site-{siteId}", "passes-{siteId}"],
4568
4616
  auth: "user",
4569
4617
  responseKind: "json",
4618
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4570
4619
  errors: [
4571
4620
  "validation:invalid_input",
4572
4621
  "resource:not_found",
@@ -4579,6 +4628,7 @@ var init_endpoints = __esm({
4579
4628
  tags: ["site-{siteId}", "passes-{siteId}"],
4580
4629
  auth: "user",
4581
4630
  responseKind: "json",
4631
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4582
4632
  errors: [
4583
4633
  "validation:invalid_input",
4584
4634
  "resource:not_found",
@@ -4634,6 +4684,7 @@ var init_endpoints = __esm({
4634
4684
  tags: ["site-{siteId}", "memberships-{siteId}"],
4635
4685
  auth: "user",
4636
4686
  responseKind: "json",
4687
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4637
4688
  errors: ["validation:invalid_input", "server:internal_error"]
4638
4689
  },
4639
4690
  getBookingMembership: {
@@ -4649,6 +4700,7 @@ var init_endpoints = __esm({
4649
4700
  tags: ["site-{siteId}", "memberships-{siteId}"],
4650
4701
  auth: "user",
4651
4702
  responseKind: "json",
4703
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4652
4704
  errors: [
4653
4705
  "validation:invalid_input",
4654
4706
  "resource:not_found",
@@ -4661,6 +4713,7 @@ var init_endpoints = __esm({
4661
4713
  tags: ["site-{siteId}", "memberships-{siteId}"],
4662
4714
  auth: "user",
4663
4715
  responseKind: "json",
4716
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4664
4717
  errors: [
4665
4718
  "validation:invalid_input",
4666
4719
  "resource:not_found",
@@ -4877,6 +4930,7 @@ var init_endpoints = __esm({
4877
4930
  tags: ["site-{siteId}", "customers-{siteId}"],
4878
4931
  auth: "user",
4879
4932
  responseKind: "json",
4933
+ demoMutation: DEMO_MUTATION_BLOCKED_DISABLED,
4880
4934
  errors: [
4881
4935
  "validation:invalid_input",
4882
4936
  "auth:forbidden",
@@ -6950,6 +7004,7 @@ var init_validation_constants = __esm({
6950
7004
  "date.formatShort",
6951
7005
  "array.length",
6952
7006
  "value.jsonArray",
7007
+ "value.csv",
6953
7008
  "array.marqueeLoop",
6954
7009
  // Layout (layout.ts)
6955
7010
  "layout.maxWidthClass",
@@ -7768,8 +7823,7 @@ var init_contracts2 = __esm({
7768
7823
  dashboardNavVisibilityRolesSchema = z5.object({
7769
7824
  administrator: dashboardNavVisibilityBaseSchema.optional(),
7770
7825
  editor: dashboardNavVisibilityBaseSchema.optional(),
7771
- team_member: dashboardNavVisibilityBaseSchema.optional(),
7772
- event_host: dashboardNavVisibilityBaseSchema.optional()
7826
+ team_member: dashboardNavVisibilityBaseSchema.optional()
7773
7827
  }).strip().optional();
7774
7828
  dashboardNavVisibilitySchema = dashboardNavVisibilityBaseSchema.extend({
7775
7829
  roles: dashboardNavVisibilityRolesSchema
@@ -8406,6 +8460,21 @@ var init_appointmentSetup = __esm({
8406
8460
  timezone: z7.string().trim().min(1).nullable(),
8407
8461
  payment: appointmentSetupPaymentDraftSchema,
8408
8462
  assignment: appointmentSetupServiceAssignmentDraftSchema
8463
+ }).superRefine((service, ctx) => {
8464
+ if (service.payment.priceType === "paid" && (service.priceAmount === null || service.priceAmount <= 0)) {
8465
+ ctx.addIssue({
8466
+ code: "custom",
8467
+ path: ["priceAmount"],
8468
+ message: "Paid appointment services need a positive price."
8469
+ });
8470
+ }
8471
+ if (service.payment.priceType === "free" && service.priceAmount !== null && service.priceAmount > 0) {
8472
+ ctx.addIssue({
8473
+ code: "custom",
8474
+ path: ["priceAmount"],
8475
+ message: "Free appointment services cannot carry a positive price."
8476
+ });
8477
+ }
8409
8478
  });
8410
8479
  appointmentSetupPractitionerDraftSchema = z7.object({
8411
8480
  ref: appointmentSetupRefSchema,
@@ -9078,6 +9147,101 @@ var init_manifest = __esm({
9078
9147
  }
9079
9148
  });
9080
9149
 
9150
+ // ../theme-core/src/palette/utils/colorConversion.ts
9151
+ function hexToRgb(hex) {
9152
+ const h = hex.replace(/^#/, "");
9153
+ const m = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
9154
+ if (m.length !== 6) throw new Error("Bad hex");
9155
+ const int = parseInt(m, 16);
9156
+ return { r: int >> 16 & 255, g: int >> 8 & 255, b: int & 255 };
9157
+ }
9158
+ function srgbToLinear(u) {
9159
+ const x = u / 255;
9160
+ return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
9161
+ }
9162
+ function rgbToHsl(r, g, b) {
9163
+ const R = r / 255, G = g / 255, B = b / 255;
9164
+ const max = Math.max(R, G, B), min = Math.min(R, G, B);
9165
+ const d = max - min;
9166
+ let h = 0;
9167
+ if (d !== 0) {
9168
+ switch (max) {
9169
+ case R:
9170
+ h = (G - B) / d + (G < B ? 6 : 0);
9171
+ break;
9172
+ case G:
9173
+ h = (B - R) / d + 2;
9174
+ break;
9175
+ case B:
9176
+ h = (R - G) / d + 4;
9177
+ break;
9178
+ }
9179
+ h *= 60;
9180
+ }
9181
+ const l = (max + min) / 2;
9182
+ const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1));
9183
+ return { h, s, l };
9184
+ }
9185
+ function srgbToOklab(r, g, b) {
9186
+ const R = srgbToLinear(r), G = srgbToLinear(g), B = srgbToLinear(b);
9187
+ const l = 0.4122214708 * R + 0.5363325363 * G + 0.0514459929 * B;
9188
+ const m = 0.2119034982 * R + 0.6806995451 * G + 0.1073969566 * B;
9189
+ const s = 0.0883024619 * R + 0.2817188376 * G + 0.6299787005 * B;
9190
+ const l_ = Math.cbrt(l), m_ = Math.cbrt(m), s_ = Math.cbrt(s);
9191
+ const L = 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_;
9192
+ const a = 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_;
9193
+ const b2 = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_;
9194
+ return { L, a, b: b2 };
9195
+ }
9196
+ function oklabToOklch(L, a, b) {
9197
+ const C = Math.sqrt(a * a + b * b);
9198
+ const h = C < 1e-7 ? 0 : deg(Math.atan2(b, a) * 180 / Math.PI);
9199
+ return { L, C, h };
9200
+ }
9201
+ function featuresFromHex(hex) {
9202
+ const { r, g, b } = hexToRgb(hex);
9203
+ const { h, s, l } = rgbToHsl(r, g, b);
9204
+ const { L, a, b: b2 } = srgbToOklab(r, g, b);
9205
+ const { L: okL, C: okC, h: okH } = oklabToOklch(L, a, b2);
9206
+ const max = Math.max(r, g, b);
9207
+ const v = max / 255;
9208
+ const Y = 0.2126 * srgbToLinear(r) + 0.7152 * srgbToLinear(g) + 0.0722 * srgbToLinear(b);
9209
+ const chroma = s;
9210
+ return { r, g, b, h, s, l, v, Y, chroma, okL, okC, okH, hex };
9211
+ }
9212
+ var mod, deg;
9213
+ var init_colorConversion = __esm({
9214
+ "../theme-core/src/palette/utils/colorConversion.ts"() {
9215
+ "use strict";
9216
+ mod = (a, n) => (a % n + n) % n;
9217
+ deg = (x) => mod(x, 360);
9218
+ }
9219
+ });
9220
+
9221
+ // ../theme-core/src/palette/utils/contrast.ts
9222
+ var init_contrast = __esm({
9223
+ "../theme-core/src/palette/utils/contrast.ts"() {
9224
+ "use strict";
9225
+ init_colorConversion();
9226
+ }
9227
+ });
9228
+
9229
+ // ../theme-core/src/palette/utils/onColor.ts
9230
+ var init_onColor = __esm({
9231
+ "../theme-core/src/palette/utils/onColor.ts"() {
9232
+ "use strict";
9233
+ }
9234
+ });
9235
+
9236
+ // ../theme-core/src/site-styles/accessibleSurfaces.ts
9237
+ var init_accessibleSurfaces = __esm({
9238
+ "../theme-core/src/site-styles/accessibleSurfaces.ts"() {
9239
+ "use strict";
9240
+ init_contrast();
9241
+ init_onColor();
9242
+ }
9243
+ });
9244
+
9081
9245
  // ../theme-core/src/site-styles/appearancePresetResolution.ts
9082
9246
  function assertValidOptionGroups(preset2) {
9083
9247
  preset2.optionGroups?.forEach((group) => {
@@ -11075,7 +11239,7 @@ var init_constants = __esm({
11075
11239
  });
11076
11240
 
11077
11241
  // ../theme-core/src/buttons/utils/contrast.ts
11078
- var init_contrast = __esm({
11242
+ var init_contrast2 = __esm({
11079
11243
  "../theme-core/src/buttons/utils/contrast.ts"() {
11080
11244
  "use strict";
11081
11245
  }
@@ -11085,7 +11249,7 @@ var init_contrast = __esm({
11085
11249
  var init_generateDefaultButtonSystem = __esm({
11086
11250
  "../theme-core/src/buttons/generateDefaultButtonSystem.ts"() {
11087
11251
  "use strict";
11088
- init_contrast();
11252
+ init_contrast2();
11089
11253
  }
11090
11254
  });
11091
11255
 
@@ -13227,7 +13391,8 @@ function defineCuratedSiteStyle(input) {
13227
13391
  name: input.name,
13228
13392
  description: input.description,
13229
13393
  generationBrief: input.generationBrief,
13230
- selectionKeywords: input.selectionKeywords ?? [],
13394
+ selectionKeywordRules: input.selectionKeywordRules ?? [],
13395
+ siteCreatorSelection: input.siteCreatorSelection ?? { kind: "explicit_only" },
13231
13396
  template: {
13232
13397
  id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
13233
13398
  name: input.name,
@@ -13272,6 +13437,9 @@ var init_curatedSiteStyles = __esm({
13272
13437
  "site-style:bright-community",
13273
13438
  "site-style:quiet-luxury",
13274
13439
  "site-style:practical-services",
13440
+ "site-style:quiet-practice",
13441
+ "site-style:personal-retreat-journal",
13442
+ "site-style:tactile-workshop",
13275
13443
  "site-style:modern-wellness",
13276
13444
  "site-style:bold-launch",
13277
13445
  "site-style:south-west-twerk-school"
@@ -13455,12 +13623,13 @@ var init_curatedSiteStyles = __esm({
13455
13623
  name: "Quiet Luxury",
13456
13624
  description: "Minimal, confident, and refined for premium experiences and private services.",
13457
13625
  generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
13458
- selectionKeywords: [
13459
- "luxury",
13460
- "premium",
13461
- "boutique",
13462
- "bespoke",
13463
- "exclusive"
13626
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 20 },
13627
+ selectionKeywordRules: [
13628
+ { kind: "word", value: "luxury" },
13629
+ { kind: "word", value: "premium" },
13630
+ { kind: "word", value: "boutique" },
13631
+ { kind: "word", value: "bespoke" },
13632
+ { kind: "word", value: "exclusive" }
13464
13633
  ],
13465
13634
  tokenRecipes: {
13466
13635
  palette: "high-contrast",
@@ -13489,13 +13658,14 @@ var init_curatedSiteStyles = __esm({
13489
13658
  name: "Practical Services",
13490
13659
  description: "Efficient, plainspoken, and conversion-focused for trades and everyday services.",
13491
13660
  generationBrief: "Make services, location, trust signals, and contact paths obvious. Keep copy brief and avoid ornate visual treatments.",
13492
- selectionKeywords: [
13493
- "repair",
13494
- "plumb",
13495
- "electric",
13496
- "cleaning",
13497
- "landscap",
13498
- "contractor"
13661
+ siteCreatorSelection: { kind: "primary_goal_support" },
13662
+ selectionKeywordRules: [
13663
+ { kind: "word", value: "repair" },
13664
+ { kind: "substring", value: "plumb" },
13665
+ { kind: "substring", value: "electric" },
13666
+ { kind: "word", value: "cleaning" },
13667
+ { kind: "substring", value: "landscap" },
13668
+ { kind: "substring", value: "contractor" }
13499
13669
  ],
13500
13670
  tokenRecipes: {
13501
13671
  palette: "brand-led",
@@ -13546,18 +13716,134 @@ var init_curatedSiteStyles = __esm({
13546
13716
  paletteChoice("warm-neutral-forest")
13547
13717
  ]
13548
13718
  }),
13719
+ defineCuratedSiteStyle({
13720
+ id: "site-style:quiet-practice",
13721
+ name: "Quiet Practice",
13722
+ description: "Grounded, calm, and practical for small appointment-first practices.",
13723
+ 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.",
13724
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 30 },
13725
+ selectionKeywordRules: [
13726
+ { kind: "substring", value: "massage" },
13727
+ { kind: "word", value: "bodywork" },
13728
+ { kind: "phrase", value: "appointment practice" },
13729
+ { kind: "phrase", value: "appointment-first" },
13730
+ { kind: "substring", value: "practitioner" },
13731
+ { kind: "substring", value: "therap" },
13732
+ { kind: "substring", value: "clinic" },
13733
+ { kind: "phrase", value: "wellness practice" }
13734
+ ],
13735
+ tokenRecipes: {
13736
+ palette: "soft-natural",
13737
+ contrast: "standard",
13738
+ radius: "soft",
13739
+ shadow: "subtle",
13740
+ typography: "clean-sans",
13741
+ spacing: "regular",
13742
+ motion: "subtle"
13743
+ },
13744
+ compositionBudget: quietBudget,
13745
+ recommendedHeaderLookIds: ["practical-utility", "clean-base", "centered-calm"],
13746
+ buttonPersonalityChoices: [
13747
+ buttonChoice("pebble"),
13748
+ buttonChoice("soft-pill"),
13749
+ buttonChoice("editorial-link")
13750
+ ],
13751
+ paletteVariantChoices: [
13752
+ paletteChoice("soft-natural-stone"),
13753
+ paletteChoice("soft-natural-sage"),
13754
+ paletteChoice("warm-neutral-clay")
13755
+ ]
13756
+ }),
13757
+ defineCuratedSiteStyle({
13758
+ id: "site-style:personal-retreat-journal",
13759
+ name: "Personal Retreat Journal",
13760
+ description: "Warm, story-led, and readable for solo practitioners with mixed offers.",
13761
+ 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.",
13762
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 40 },
13763
+ selectionKeywordRules: [
13764
+ { kind: "substring", value: "retreat" },
13765
+ { kind: "phrase", value: "solo practitioner" },
13766
+ { kind: "phrase", value: "personal brand" },
13767
+ { kind: "substring", value: "teacher" },
13768
+ { kind: "substring", value: "coach" },
13769
+ { kind: "phrase", value: "retreat resources" },
13770
+ { kind: "substring", value: "journal" }
13771
+ ],
13772
+ tokenRecipes: {
13773
+ palette: "warm-neutral",
13774
+ contrast: "standard",
13775
+ radius: "soft",
13776
+ shadow: "subtle",
13777
+ typography: "serif-editorial",
13778
+ spacing: "airy",
13779
+ motion: "subtle"
13780
+ },
13781
+ compositionBudget: balancedBudget,
13782
+ recommendedHeaderLookIds: ["editorial-line", "centered-calm", "minimal-transparent"],
13783
+ buttonPersonalityChoices: [
13784
+ buttonChoice("editorial-link"),
13785
+ buttonChoice("soft-pill"),
13786
+ buttonChoice("brushed-wash")
13787
+ ],
13788
+ paletteVariantChoices: [
13789
+ paletteChoice("warm-neutral-forest"),
13790
+ paletteChoice("warm-neutral-clay"),
13791
+ paletteChoice("soft-natural-stone")
13792
+ ]
13793
+ }),
13794
+ defineCuratedSiteStyle({
13795
+ id: "site-style:tactile-workshop",
13796
+ name: "Tactile Workshop",
13797
+ description: "Bright, hands-on, and image-led for maker studios, workshops, and creative classes.",
13798
+ 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.",
13799
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 50 },
13800
+ selectionKeywordRules: [
13801
+ { kind: "substring", value: "ceramic" },
13802
+ { kind: "word", value: "pottery" },
13803
+ { kind: "phrase", value: "maker studio" },
13804
+ { kind: "phrase", value: "craft class" },
13805
+ { kind: "phrase", value: "craft workshop" },
13806
+ { kind: "word", value: "clay" },
13807
+ { kind: "word", value: "kiln" }
13808
+ ],
13809
+ tokenRecipes: {
13810
+ palette: "brand-led",
13811
+ contrast: "standard",
13812
+ radius: "soft",
13813
+ shadow: "subtle",
13814
+ typography: "friendly-sans",
13815
+ spacing: "regular",
13816
+ motion: "subtle"
13817
+ },
13818
+ compositionBudget: balancedBudget,
13819
+ recommendedHeaderLookIds: ["brand-solid", "practical-utility", "clean-base"],
13820
+ recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
13821
+ buttonPersonalityChoices: [
13822
+ buttonChoice("pebble"),
13823
+ buttonChoice("confident-chip"),
13824
+ buttonChoice("ink-stamp"),
13825
+ buttonChoice("editorial-link")
13826
+ ],
13827
+ paletteVariantChoices: [
13828
+ paletteChoice("brand-led-warm"),
13829
+ paletteChoice("brand-led-cool"),
13830
+ paletteChoice("soft-natural-watercolor"),
13831
+ paletteChoice("warm-neutral-clay")
13832
+ ]
13833
+ }),
13549
13834
  defineCuratedSiteStyle({
13550
13835
  id: "site-style:bold-launch",
13551
13836
  name: "Bold Launch",
13552
13837
  description: "High-energy and punchy for launches, campaigns, and creative offers.",
13553
13838
  generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
13554
- selectionKeywords: [
13555
- "launch",
13556
- "campaign",
13557
- "preorder",
13558
- "pre-order",
13559
- "waitlist",
13560
- "drop"
13839
+ siteCreatorSelection: { kind: "site_creator_keyword_heuristic", priority: 10 },
13840
+ selectionKeywordRules: [
13841
+ { kind: "substring", value: "launch" },
13842
+ { kind: "substring", value: "campaign" },
13843
+ { kind: "word", value: "preorder" },
13844
+ { kind: "phrase", value: "pre-order" },
13845
+ { kind: "substring", value: "waitlist" },
13846
+ { kind: "word", value: "drop" }
13561
13847
  ],
13562
13848
  tokenRecipes: {
13563
13849
  palette: "high-contrast",
@@ -13588,15 +13874,6 @@ var init_curatedSiteStyles = __esm({
13588
13874
  name: "South West Twerk School",
13589
13875
  description: "Energetic, editorial, and high-contrast for a branded dance school presence.",
13590
13876
  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.",
13591
- selectionKeywords: [
13592
- "dance",
13593
- "classes",
13594
- "workshop",
13595
- "school",
13596
- "movement",
13597
- "performance",
13598
- "community"
13599
- ],
13600
13877
  tokenRecipes: {
13601
13878
  palette: "brand-led",
13602
13879
  contrast: "maximum",
@@ -13782,6 +14059,43 @@ var init_modern_minimal = __esm({
13782
14059
  }
13783
14060
  });
13784
14061
 
14062
+ // ../theme-core/src/palette/generateShades.ts
14063
+ var init_generateShades = __esm({
14064
+ "../theme-core/src/palette/generateShades.ts"() {
14065
+ "use strict";
14066
+ init_colorConversion();
14067
+ }
14068
+ });
14069
+
14070
+ // ../theme-core/src/palette/neutralScale.ts
14071
+ var init_neutralScale = __esm({
14072
+ "../theme-core/src/palette/neutralScale.ts"() {
14073
+ "use strict";
14074
+ init_colorConversion();
14075
+ }
14076
+ });
14077
+
14078
+ // ../theme-core/src/palette/utils/textColor.ts
14079
+ var init_textColor = __esm({
14080
+ "../theme-core/src/palette/utils/textColor.ts"() {
14081
+ "use strict";
14082
+ init_colorConversion();
14083
+ init_contrast();
14084
+ }
14085
+ });
14086
+
14087
+ // ../theme-core/src/palette/expandPalette.ts
14088
+ var init_expandPalette = __esm({
14089
+ "../theme-core/src/palette/expandPalette.ts"() {
14090
+ "use strict";
14091
+ init_generateShades();
14092
+ init_neutralScale();
14093
+ init_colorConversion();
14094
+ init_textColor();
14095
+ init_onColor();
14096
+ }
14097
+ });
14098
+
13785
14099
  // ../theme-core/src/site-styles/rawStyleFields.ts
13786
14100
  var themeV2RuntimeStyleFieldNames, themeV2BlockSpecificRawStyleFieldNames, themeV2NormalEditorRawStyleFieldNames, themeV2NormalEditorRawStyleFieldNameSet;
13787
14101
  var init_rawStyleFields = __esm({
@@ -13965,35 +14279,31 @@ var init_runtimeCompiler = __esm({
13965
14279
  "use strict";
13966
14280
  init_schema3();
13967
14281
  init_modern_minimal();
14282
+ init_expandPalette();
13968
14283
  init_personalities();
13969
14284
  init_variants();
13970
14285
  init_designState();
13971
14286
  init_types3();
14287
+ init_accessibleSurfaces();
13972
14288
  defaultDesignRuntimeRules = defineDesignRuntimeRules({
13973
14289
  sectionSurfaces: {
13974
14290
  base: {},
13975
14291
  "muted-band": {
13976
14292
  background: {
13977
14293
  type: "color",
13978
- color: "muted",
13979
- textColor: "text",
13980
- headingColor: "text"
14294
+ color: "muted"
13981
14295
  }
13982
14296
  },
13983
14297
  "accent-band": {
13984
14298
  background: {
13985
14299
  type: "color",
13986
- color: "primary",
13987
- textColor: "primaryForeground",
13988
- headingColor: "primaryForeground"
14300
+ color: "primary"
13989
14301
  }
13990
14302
  },
13991
14303
  "brand-depth-band": {
13992
14304
  background: {
13993
14305
  type: "color",
13994
- color: "primary-800",
13995
- textColor: "primaryForeground",
13996
- headingColor: "primaryForeground"
14306
+ color: "primary-800"
13997
14307
  }
13998
14308
  },
13999
14309
  "hero-image": {
@@ -14459,6 +14769,7 @@ var init_tokenRecipes = __esm({
14459
14769
  var init_site_styles = __esm({
14460
14770
  "../theme-core/src/site-styles/index.ts"() {
14461
14771
  "use strict";
14772
+ init_accessibleSurfaces();
14462
14773
  init_appearancePresets();
14463
14774
  init_blockFlow();
14464
14775
  init_compositionBudget();
@@ -21126,7 +21437,7 @@ var init_faq = __esm({
21126
21437
 
21127
21438
  // ../blocks/src/system/transforms/registry/formatting.ts
21128
21439
  import { z as z38 } from "zod";
21129
- var uppercaseTransform, fallbackTransform, dateFormatShort, arrayLengthTransform, jsonArrayTransform, marqueeLoopOptionsSchema, marqueeLoopTransform, formattingTransforms;
21440
+ var uppercaseTransform, fallbackTransform, dateFormatShort, arrayLengthTransform, jsonArrayTransform, csvTransform, marqueeLoopOptionsSchema, marqueeLoopTransform, formattingTransforms;
21130
21441
  var init_formatting = __esm({
21131
21442
  "../blocks/src/system/transforms/registry/formatting.ts"() {
21132
21443
  "use strict";
@@ -21187,6 +21498,16 @@ var init_formatting = __esm({
21187
21498
  return "";
21188
21499
  }
21189
21500
  };
21501
+ csvTransform = {
21502
+ id: "value.csv",
21503
+ kind: "formatter",
21504
+ summary: "Normalize a string or array of strings into a comma-separated list",
21505
+ run: (value) => {
21506
+ const rawValues = Array.isArray(value) ? value : typeof value === "string" ? value.split(",") : [];
21507
+ const normalized = rawValues.filter((item) => typeof item === "string").map((item) => item.trim()).filter(Boolean);
21508
+ return normalized.length > 0 ? Array.from(new Set(normalized)).join(",") : "";
21509
+ }
21510
+ };
21190
21511
  marqueeLoopOptionsSchema = z38.object({
21191
21512
  minItems: z38.number().int().min(1).default(10)
21192
21513
  });
@@ -21212,6 +21533,7 @@ var init_formatting = __esm({
21212
21533
  dateFormatShort,
21213
21534
  arrayLengthTransform,
21214
21535
  jsonArrayTransform,
21536
+ csvTransform,
21215
21537
  marqueeLoopTransform
21216
21538
  ];
21217
21539
  }
@@ -21706,77 +22028,6 @@ var init_ui = __esm({
21706
22028
  }
21707
22029
  });
21708
22030
 
21709
- // ../theme-core/src/palette/utils/colorConversion.ts
21710
- function hexToRgb(hex) {
21711
- const h = hex.replace(/^#/, "");
21712
- const m = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
21713
- if (m.length !== 6) throw new Error("Bad hex");
21714
- const int = parseInt(m, 16);
21715
- return { r: int >> 16 & 255, g: int >> 8 & 255, b: int & 255 };
21716
- }
21717
- function srgbToLinear(u) {
21718
- const x = u / 255;
21719
- return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
21720
- }
21721
- function rgbToHsl(r, g, b) {
21722
- const R = r / 255, G = g / 255, B = b / 255;
21723
- const max = Math.max(R, G, B), min = Math.min(R, G, B);
21724
- const d = max - min;
21725
- let h = 0;
21726
- if (d !== 0) {
21727
- switch (max) {
21728
- case R:
21729
- h = (G - B) / d + (G < B ? 6 : 0);
21730
- break;
21731
- case G:
21732
- h = (B - R) / d + 2;
21733
- break;
21734
- case B:
21735
- h = (R - G) / d + 4;
21736
- break;
21737
- }
21738
- h *= 60;
21739
- }
21740
- const l = (max + min) / 2;
21741
- const s = d === 0 ? 0 : d / (1 - Math.abs(2 * l - 1));
21742
- return { h, s, l };
21743
- }
21744
- function srgbToOklab(r, g, b) {
21745
- const R = srgbToLinear(r), G = srgbToLinear(g), B = srgbToLinear(b);
21746
- const l = 0.4122214708 * R + 0.5363325363 * G + 0.0514459929 * B;
21747
- const m = 0.2119034982 * R + 0.6806995451 * G + 0.1073969566 * B;
21748
- const s = 0.0883024619 * R + 0.2817188376 * G + 0.6299787005 * B;
21749
- const l_ = Math.cbrt(l), m_ = Math.cbrt(m), s_ = Math.cbrt(s);
21750
- const L = 0.2104542553 * l_ + 0.793617785 * m_ - 0.0040720468 * s_;
21751
- const a = 1.9779984951 * l_ - 2.428592205 * m_ + 0.4505937099 * s_;
21752
- const b2 = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.808675766 * s_;
21753
- return { L, a, b: b2 };
21754
- }
21755
- function oklabToOklch(L, a, b) {
21756
- const C = Math.sqrt(a * a + b * b);
21757
- const h = C < 1e-7 ? 0 : deg(Math.atan2(b, a) * 180 / Math.PI);
21758
- return { L, C, h };
21759
- }
21760
- function featuresFromHex(hex) {
21761
- const { r, g, b } = hexToRgb(hex);
21762
- const { h, s, l } = rgbToHsl(r, g, b);
21763
- const { L, a, b: b2 } = srgbToOklab(r, g, b);
21764
- const { L: okL, C: okC, h: okH } = oklabToOklch(L, a, b2);
21765
- const max = Math.max(r, g, b);
21766
- const v = max / 255;
21767
- const Y = 0.2126 * srgbToLinear(r) + 0.7152 * srgbToLinear(g) + 0.0722 * srgbToLinear(b);
21768
- const chroma = s;
21769
- return { r, g, b, h, s, l, v, Y, chroma, okL, okC, okH, hex };
21770
- }
21771
- var mod, deg;
21772
- var init_colorConversion = __esm({
21773
- "../theme-core/src/palette/utils/colorConversion.ts"() {
21774
- "use strict";
21775
- mod = (a, n) => (a % n + n) % n;
21776
- deg = (x) => mod(x, 360);
21777
- }
21778
- });
21779
-
21780
22031
  // ../blocks/src/system/transforms/registry/layout.ts
21781
22032
  import { z as z40 } from "zod";
21782
22033
  function resolveBackgroundVisualStyles(backgroundColor, tokens, defaultToken = "surface") {
@@ -26871,7 +27122,12 @@ var init_event_listing = __esm({
26871
27122
  detailLevel: "listing",
26872
27123
  kind: { $bind: { from: "content.kind" } },
26873
27124
  eventSurface: { $bind: { from: "content.eventSurface" } },
26874
- eventPresets: { $bind: { from: "content.filterEventPresets" } },
27125
+ eventPresets: {
27126
+ $bind: {
27127
+ from: "content.filterEventPresets",
27128
+ transforms: [{ id: "value.csv" }]
27129
+ }
27130
+ },
26875
27131
  scheduleScope: { $bind: { from: "content.scheduleScope" } }
26876
27132
  },
26877
27133
  mode: "server"
@@ -27651,7 +27907,12 @@ var init_event_calendar = __esm({
27651
27907
  // Pass filter params if configured
27652
27908
  kind: { $bind: { from: "content.kind" } },
27653
27909
  eventSurface: { $bind: { from: "content.eventSurface" } },
27654
- eventPresets: { $bind: { from: "content.filterEventPresets" } },
27910
+ eventPresets: {
27911
+ $bind: {
27912
+ from: "content.filterEventPresets",
27913
+ transforms: [{ id: "value.csv" }]
27914
+ }
27915
+ },
27655
27916
  scheduleScope: { $bind: { from: "content.scheduleScope" } },
27656
27917
  categoryIds: { $bind: { from: "content.filterCategoryIds" } },
27657
27918
  staffMemberId: { $bind: { from: "content.filterStaffMemberId" } },