@riverbankcms/sdk 0.60.6 → 0.60.7

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 (92) hide show
  1. package/dist/_dts/api/src/appointmentSetup.d.ts +2 -2
  2. package/dist/_dts/api/src/bookingConfig.d.ts +6 -0
  3. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +45 -3
  4. package/dist/_dts/api/src/bookingOperations.d.ts +40 -3
  5. package/dist/_dts/api/src/courses.d.ts +1 -5
  6. package/dist/_dts/api/src/endpoints.d.ts +80 -1
  7. package/dist/_dts/api/src/index.d.ts +3 -2
  8. package/dist/_dts/api/src/navigation/contracts.d.ts +9 -9
  9. package/dist/_dts/api/src/public/endpoints.d.ts +1 -1
  10. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +15 -1
  11. package/dist/_dts/api/src/resources.d.ts +1 -1
  12. package/dist/_dts/api/src/siteBanner.d.ts +8 -8
  13. package/dist/_dts/api/src/siteOnboarding.d.ts +1 -0
  14. package/dist/_dts/api/src/teamMembers.d.ts +27 -0
  15. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +35 -29
  16. package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +1 -5
  17. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +40 -34
  18. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +1 -5
  19. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +1 -1
  20. package/dist/_dts/blocks/src/system/blocks/products/shared.d.ts +2 -2
  21. package/dist/_dts/blocks/src/system/blocks/shared/bookingPaymentTerms.d.ts +9 -9
  22. package/dist/_dts/blocks/src/system/blocks/shared/teamMembers.d.ts +24 -0
  23. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +18 -8
  24. package/dist/_dts/blocks/src/system/constants/background.d.ts +1 -1
  25. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  26. package/dist/_dts/blocks/src/system/data/utils.d.ts +1 -1
  27. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +201 -201
  28. package/dist/_dts/blocks/src/system/manifest/validation.d.ts +2 -2
  29. package/dist/_dts/blocks/src/system/node/schema.d.ts +5 -5
  30. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +1 -1
  31. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +4 -4
  32. package/dist/_dts/blocks/src/system/transforms/registry/ui.d.ts +1 -1
  33. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +3 -3
  34. package/dist/_dts/content-model/src/content-types/schema.d.ts +8 -8
  35. package/dist/_dts/content-model/src/metadataConfig.d.ts +1 -0
  36. package/dist/_dts/core/src/branded.d.ts +2 -0
  37. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +124 -8
  38. package/dist/_dts/db/src/schemas/forms.d.ts +61 -61
  39. package/dist/_dts/sdk/src/client/types.d.ts +9 -2
  40. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  41. package/dist/_dts/sdk/src/config/validation.d.ts +40 -37
  42. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +17 -8
  43. package/dist/_dts/sdk/src/data/prefetchBlockData.d.ts +1 -1
  44. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +19 -19
  45. package/dist/_dts/sdk/src/public-api/contracts.d.ts +87 -69
  46. package/dist/_dts/sdk/src/public-api/runtime.d.ts +1 -1
  47. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +2 -5
  48. package/dist/_dts/sdk/src/version.d.ts +1 -1
  49. package/dist/_dts/theme-core/src/accordions/types.d.ts +11 -11
  50. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +10 -10
  51. package/dist/_dts/theme-core/src/buttons/types.d.ts +27 -27
  52. package/dist/_dts/theme-core/src/cards/types.d.ts +17 -17
  53. package/dist/_dts/theme-core/src/inputs/types.d.ts +14 -14
  54. package/dist/_dts/theme-core/src/interactive/baseSchema.d.ts +2 -2
  55. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +438 -438
  56. package/dist/_dts/theme-core/src/navigation/types.d.ts +16 -16
  57. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +15 -15
  58. package/dist/_dts/theme-core/src/schema.d.ts +662 -662
  59. package/dist/_dts/theme-core/src/shared/componentStyles.d.ts +4 -4
  60. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +15 -15
  61. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +7 -7
  62. package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +1 -1
  63. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +5 -5
  64. package/dist/_dts/ui/src/badge.d.ts +1 -1
  65. package/dist/_dts/ui/src/button-group.d.ts +1 -1
  66. package/dist/_dts/ui/src/button.d.ts +2 -2
  67. package/dist/_dts/ui/src/callout.d.ts +1 -1
  68. package/dist/_dts/ui/src/card.d.ts +1 -1
  69. package/dist/_dts/ui/src/surface.d.ts +2 -2
  70. package/dist/_dts/ui/src/toggle.d.ts +4 -4
  71. package/dist/cli/index.mjs +276 -24
  72. package/dist/client/client.mjs +607 -306
  73. package/dist/client/hooks.mjs +272 -23
  74. package/dist/client/rendering/client.mjs +179 -130
  75. package/dist/client/rendering/islands.mjs +68 -43
  76. package/dist/client/rendering.mjs +646 -363
  77. package/dist/preview-next/before-render.mjs +147 -1
  78. package/dist/preview-next/client/runtime.mjs +338 -43
  79. package/dist/preview-next/middleware.mjs +147 -1
  80. package/dist/server/components.mjs +727 -470
  81. package/dist/server/config-validation.mjs +488 -254
  82. package/dist/server/config.mjs +488 -254
  83. package/dist/server/data.mjs +272 -23
  84. package/dist/server/index.mjs +168 -2
  85. package/dist/server/next.mjs +476 -185
  86. package/dist/server/page-converter.mjs +335 -249
  87. package/dist/server/prebuild.mjs +1 -1
  88. package/dist/server/rendering/server.mjs +742 -469
  89. package/dist/server/rendering.mjs +742 -469
  90. package/dist/server/routing.mjs +274 -24
  91. package/dist/server/server.mjs +291 -24
  92. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  // src/config/validation.ts
2
- import { z as z64 } from "zod";
2
+ import { z as z65 } from "zod";
3
3
 
4
4
  // ../api/src/cache-tags.ts
5
5
  var TAG_TEMPLATES = {
@@ -853,13 +853,150 @@ var ENDPOINT_DEFINITIONS = {
853
853
  "server:internal_error"
854
854
  ]
855
855
  },
856
- deleteAppointmentResource: {
856
+ removeAppointmentResource: {
857
857
  path: "/sites/{siteId}/bookings/resources/{resourceId}",
858
858
  method: "DELETE",
859
859
  auth: "user",
860
860
  responseKind: "json",
861
861
  errors: ["resource:not_found", "server:internal_error"]
862
862
  },
863
+ createTeamMemberProfile: {
864
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile",
865
+ method: "POST",
866
+ auth: "user",
867
+ responseKind: "json",
868
+ errors: [
869
+ "validation:invalid_input",
870
+ "resource:not_found",
871
+ "resource:conflict",
872
+ "server:internal_error"
873
+ ]
874
+ },
875
+ updateTeamMemberProfilePolicy: {
876
+ path: "/sites/{siteId}/bookings/resources/profile-policy",
877
+ method: "PUT",
878
+ auth: "user",
879
+ responseKind: "json",
880
+ errors: ["validation:invalid_input", "server:internal_error"]
881
+ },
882
+ updateTeamMemberProfileContent: {
883
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/content",
884
+ method: "PUT",
885
+ tags: [
886
+ "site-{siteId}",
887
+ "content-{siteId}-team-member",
888
+ "content-entry-{entryId}"
889
+ ],
890
+ auth: "user",
891
+ responseKind: "json",
892
+ errors: [
893
+ "validation:invalid_input",
894
+ "resource:not_found",
895
+ "resource:conflict",
896
+ "server:internal_error"
897
+ ]
898
+ },
899
+ publishTeamMemberProfile: {
900
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/publish",
901
+ method: "POST",
902
+ tags: [
903
+ "site-{siteId}",
904
+ "content-{siteId}-team-member",
905
+ "content-entry-{entryId}"
906
+ ],
907
+ auth: "user",
908
+ responseKind: "json",
909
+ errors: [
910
+ "validation:invalid_input",
911
+ "resource:not_found",
912
+ "server:internal_error"
913
+ ]
914
+ },
915
+ discardTeamMemberProfileDraft: {
916
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/discard",
917
+ method: "POST",
918
+ tags: [
919
+ "site-{siteId}",
920
+ "content-{siteId}-team-member",
921
+ "content-entry-{entryId}"
922
+ ],
923
+ auth: "user",
924
+ responseKind: "json",
925
+ errors: [
926
+ "validation:invalid_input",
927
+ "resource:not_found",
928
+ "resource:conflict",
929
+ "server:internal_error"
930
+ ]
931
+ },
932
+ unpublishTeamMemberProfile: {
933
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/unpublish",
934
+ method: "POST",
935
+ tags: [
936
+ "site-{siteId}",
937
+ "content-{siteId}-team-member",
938
+ "content-entry-{entryId}"
939
+ ],
940
+ auth: "user",
941
+ responseKind: "json",
942
+ errors: [
943
+ "validation:invalid_input",
944
+ "resource:not_found",
945
+ "resource:conflict",
946
+ "server:internal_error"
947
+ ]
948
+ },
949
+ scheduleTeamMemberProfile: {
950
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/schedule",
951
+ method: "POST",
952
+ tags: [
953
+ "site-{siteId}",
954
+ "content-{siteId}-team-member",
955
+ "content-entry-{entryId}"
956
+ ],
957
+ auth: "user",
958
+ responseKind: "json",
959
+ errors: [
960
+ "validation:invalid_input",
961
+ "resource:not_found",
962
+ "resource:conflict",
963
+ "server:internal_error"
964
+ ]
965
+ },
966
+ cancelScheduledTeamMemberProfile: {
967
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/schedule",
968
+ method: "DELETE",
969
+ tags: [
970
+ "site-{siteId}",
971
+ "content-{siteId}-team-member",
972
+ "content-entry-{entryId}"
973
+ ],
974
+ auth: "user",
975
+ responseKind: "json",
976
+ errors: [
977
+ "validation:invalid_input",
978
+ "resource:not_found",
979
+ "resource:conflict",
980
+ "server:internal_error"
981
+ ]
982
+ },
983
+ updateTeamMemberProfileRouteMetadata: {
984
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/routes/{routeId}/metadata",
985
+ method: "PATCH",
986
+ tags: [
987
+ TAG_TEMPLATES.siteCollection,
988
+ TAG_TEMPLATES.siteRoutableContent,
989
+ TAG_TEMPLATES.routeById
990
+ ],
991
+ auth: "user",
992
+ responseKind: "json",
993
+ errors: [
994
+ "validation:invalid_input",
995
+ "resource:not_found",
996
+ "resource:conflict",
997
+ "server:internal_error"
998
+ ]
999
+ },
863
1000
  listAppointmentServices: {
864
1001
  path: "/sites/{siteId}/bookings/services",
865
1002
  method: "GET",
@@ -3233,6 +3370,15 @@ var ENDPOINT_DEFINITIONS = {
3233
3370
  auth: "public",
3234
3371
  responseKind: "json"
3235
3372
  },
3373
+ listPublicTeamMembers: {
3374
+ path: "/public/sites/{siteId}/team-members",
3375
+ method: "GET",
3376
+ revalidate: 60,
3377
+ tags: ["public-team-members-{siteId}"],
3378
+ errors: [],
3379
+ auth: "public",
3380
+ responseKind: "json"
3381
+ },
3236
3382
  getPublicCourse: {
3237
3383
  path: "/public/sites/{siteId}/courses/{courseId}",
3238
3384
  method: "GET",
@@ -6527,6 +6673,7 @@ var SUPPORTED_LOADER_ENDPOINTS = [
6527
6673
  "listPublicEvents",
6528
6674
  "getPublicEventDetails",
6529
6675
  "listPublicCourses",
6676
+ "listPublicTeamMembers",
6530
6677
  "listPublicProducts",
6531
6678
  "listPublicPasses",
6532
6679
  "listPublicMemberships",
@@ -15432,7 +15579,19 @@ var teamMemberFragment = defineFragment({
15432
15579
  bind("photo")
15433
15580
  )
15434
15581
  ]),
15435
- text({ as: "h3" }, bind("name")),
15582
+ link(
15583
+ {
15584
+ href: { $bind: { from: "profilePath" } },
15585
+ className: "rb-team-member-name-link"
15586
+ },
15587
+ [text({ as: "h3" }, bind("name"))],
15588
+ when("profilePath")
15589
+ ),
15590
+ text(
15591
+ { as: "h3" },
15592
+ when("profilePath", { not: true }),
15593
+ bind("name")
15594
+ ),
15436
15595
  text({ as: "p", className: "rb-team-member-role" }, when("role"), bind("role")),
15437
15596
  richText(
15438
15597
  { className: "rb-prose rb-max-w-none" },
@@ -19726,7 +19885,9 @@ var courseSessionSchema = z42.object({
19726
19885
  var courseTeamMemberSummarySchema = z42.object({
19727
19886
  id: z42.string(),
19728
19887
  name: z42.string(),
19729
- summary: z42.string().nullable()
19888
+ roleLabel: z42.string().nullable(),
19889
+ summary: z42.string().nullable(),
19890
+ profilePath: z42.string().nullable()
19730
19891
  });
19731
19892
  var coursePricingOptionSchema = z42.object({
19732
19893
  id: z42.string(),
@@ -19831,7 +19992,9 @@ var publicEventTicketTypeSchema = z43.object({
19831
19992
  var publicTeamMemberSummarySchema = z43.object({
19832
19993
  id: z43.string(),
19833
19994
  name: z43.string(),
19834
- summary: z43.string().nullable()
19995
+ roleLabel: z43.string().nullable(),
19996
+ summary: z43.string().nullable(),
19997
+ profilePath: z43.string().nullable()
19835
19998
  });
19836
19999
  var publicEventSchema = z43.object({
19837
20000
  kind: z43.enum(["event", "course_session"]).optional(),
@@ -25678,7 +25841,25 @@ var newsletterSignupBlockDefinition = {
25678
25841
  };
25679
25842
 
25680
25843
  // ../blocks/src/system/blocks/team-members.ts
25844
+ import { z as z61 } from "zod";
25681
25845
  var ITEM_NAME2 = "member";
25846
+ var teamMemberPhotoSchema = mediaSchema2.refine((media2) => media2.type === "image", {
25847
+ message: "Team member photos must be image media"
25848
+ }).nullable();
25849
+ var teamMemberDataSchema = z61.object({
25850
+ _type: z61.literal("teamMember"),
25851
+ id: z61.string(),
25852
+ name: z61.string(),
25853
+ role: z61.string().nullable(),
25854
+ roleLabel: z61.string().nullable(),
25855
+ bio: z61.string().nullable(),
25856
+ summary: z61.string().nullable(),
25857
+ photo: teamMemberPhotoSchema,
25858
+ profilePath: z61.string().nullable()
25859
+ });
25860
+ var teamMembersDataSchema = z61.array(teamMemberDataSchema);
25861
+ var dynamicSourceWhen = { equals: "site_staff" };
25862
+ var manualSourceWhen = { equals: "site_staff", not: true };
25682
25863
  var headingNode = text(
25683
25864
  { as: "h2" },
25684
25865
  bind("content.heading"),
@@ -25768,7 +25949,15 @@ var teamMemberStackLayout = el(
25768
25949
  ]
25769
25950
  ),
25770
25951
  stack({ gap: "sm", className: "rb-team-member-body rb-flex-1 rb-min-w-0" }, [
25771
- text({ as: "h3" }, bind("name")),
25952
+ link(
25953
+ {
25954
+ href: { $bind: { from: "profilePath" } },
25955
+ className: "rb-team-member-name-link"
25956
+ },
25957
+ [text({ as: "h3" }, bind("name"))],
25958
+ when("profilePath")
25959
+ ),
25960
+ text({ as: "h3" }, when("profilePath", { not: true }), bind("name")),
25772
25961
  text(
25773
25962
  { as: "p", className: "rb-team-member-role" },
25774
25963
  when("role"),
@@ -25782,12 +25971,18 @@ var teamMemberStackLayout = el(
25782
25971
  ])
25783
25972
  ]
25784
25973
  );
25785
- var gridMembersNode = repeaterFragmentLayout({
25974
+ var manualGridMembersNode = when("content.source", manualSourceWhen)(repeaterFragmentLayout({
25786
25975
  collectionPath: "content.members",
25787
25976
  itemName: ITEM_NAME2,
25788
25977
  fragments: { teamMember: teamMemberFragment },
25789
25978
  itemGap: "sm"
25790
- });
25979
+ }));
25980
+ var dynamicGridMembersNode = when("content.source", dynamicSourceWhen)(repeaterFragmentLayout({
25981
+ collectionPath: "data.members",
25982
+ itemName: ITEM_NAME2,
25983
+ fragments: { teamMember: teamMemberFragment },
25984
+ itemGap: "sm"
25985
+ }));
25791
25986
  var gridVariant = wrapVariant3(
25792
25987
  el(
25793
25988
  "grid",
@@ -25801,22 +25996,29 @@ var gridVariant = wrapVariant3(
25801
25996
  },
25802
25997
  gap: { $bind: { from: "content.gap", fallback: "medium" } }
25803
25998
  },
25804
- [gridMembersNode]
25999
+ [manualGridMembersNode, dynamicGridMembersNode]
25805
26000
  )
25806
26001
  );
25807
- var stackMembersNode = repeaterFragmentLayout({
26002
+ var manualStackMembersNode = when("content.source", manualSourceWhen)(repeaterFragmentLayout({
25808
26003
  collectionPath: "content.members",
25809
26004
  itemName: ITEM_NAME2,
25810
26005
  fragments: { teamMember: teamMemberFragment },
25811
26006
  layoutOverrides: { teamMember: teamMemberStackLayout },
25812
26007
  itemGap: "sm"
25813
- });
26008
+ }));
26009
+ var dynamicStackMembersNode = when("content.source", dynamicSourceWhen)(repeaterFragmentLayout({
26010
+ collectionPath: "data.members",
26011
+ itemName: ITEM_NAME2,
26012
+ fragments: { teamMember: teamMemberFragment },
26013
+ layoutOverrides: { teamMember: teamMemberStackLayout },
26014
+ itemGap: "sm"
26015
+ }));
25814
26016
  var stackVariant = wrapVariant3({
25815
26017
  type: "stack",
25816
26018
  props: {
25817
26019
  gap: { $bind: { from: "content.gap", fallback: "medium" } }
25818
26020
  },
25819
- children: [stackMembersNode]
26021
+ children: [manualStackMembersNode, dynamicStackMembersNode]
25820
26022
  });
25821
26023
  var teamMembersManifest = createBlockManifest({
25822
26024
  id: "block.team-members",
@@ -25831,6 +26033,18 @@ var teamMembersManifest = createBlockManifest({
25831
26033
  required: false,
25832
26034
  maxLength: 120
25833
26035
  }),
26036
+ parseFieldDefinition({
26037
+ id: "source",
26038
+ type: "select",
26039
+ label: "Team members",
26040
+ description: "Choose whether to use the site-wide team or a hand-picked list.",
26041
+ defaultValue: "manual",
26042
+ options: [
26043
+ { value: "manual", label: "Choose manually" },
26044
+ { value: "site_staff", label: "Use all site team members" }
26045
+ ],
26046
+ ui: { intent: "behavior" }
26047
+ }),
25834
26048
  parseFieldDefinition({
25835
26049
  id: "layoutAlign",
25836
26050
  type: "select",
@@ -25933,18 +26147,24 @@ var teamMembersManifest = createBlockManifest({
25933
26147
  ],
25934
26148
  ui: { intent: "display" }
25935
26149
  }),
25936
- fragmentsToRepeaterField(
25937
- "members",
25938
- "Team members",
25939
- { teamMember: teamMemberFragment },
25940
- {
25941
- minItems: 0,
25942
- maxItems: 50,
25943
- itemLabel: "Team member",
25944
- itemLabelSource: "name",
25945
- description: "Add people to this section."
26150
+ {
26151
+ ...fragmentsToRepeaterField(
26152
+ "members",
26153
+ "Team members",
26154
+ { teamMember: teamMemberFragment },
26155
+ {
26156
+ minItems: 0,
26157
+ maxItems: 50,
26158
+ itemLabel: "Team member",
26159
+ itemLabelSource: "name",
26160
+ description: "Add people to this section."
26161
+ }
26162
+ ),
26163
+ ui: {
26164
+ intent: "content",
26165
+ visibleWhen: { field: "source", equals: "manual" }
25946
26166
  }
25947
- )
26167
+ }
25948
26168
  ],
25949
26169
  layout: gridVariant,
25950
26170
  variants: {
@@ -25970,7 +26190,20 @@ var teamMembersManifest = createBlockManifest({
25970
26190
  styleTokens: { spacing: "lg" }
25971
26191
  });
25972
26192
  var teamMembersBlockDefinition = {
25973
- manifest: teamMembersManifest
26193
+ manifest: teamMembersManifest,
26194
+ dataSchemas: {
26195
+ members: teamMembersDataSchema
26196
+ },
26197
+ dataLoaders: {
26198
+ members: {
26199
+ endpoint: "listPublicTeamMembers",
26200
+ params: {
26201
+ siteId: { $bind: { from: "$root.siteId" } },
26202
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } }
26203
+ },
26204
+ mode: "server"
26205
+ }
26206
+ }
25974
26207
  };
25975
26208
 
25976
26209
  // ../blocks/src/system/runtime/nodes/location-map.shared.ts
@@ -27181,7 +27414,7 @@ var builtinTransformDefinitions = [
27181
27414
  var defaultTransforms = createTransformRegistry(builtinTransformDefinitions);
27182
27415
 
27183
27416
  // src/config/content-validation.ts
27184
- import { z as z61 } from "zod";
27417
+ import { z as z62 } from "zod";
27185
27418
 
27186
27419
  // src/types/block-kinds.ts
27187
27420
  var SYSTEM_BLOCK_KINDS = [
@@ -27333,32 +27566,32 @@ function describeInvalidBindingTransform(transform) {
27333
27566
  }
27334
27567
 
27335
27568
  // src/config/content-validation.ts
27336
- var jsonDataSchema = z61.record(z61.string(), z61.any());
27337
- var contentTypeKeySchema = z61.string().min(1).regex(
27569
+ var jsonDataSchema = z62.record(z62.string(), z62.any());
27570
+ var contentTypeKeySchema = z62.string().min(1).regex(
27338
27571
  /^[a-z][a-z0-9-]*$/,
27339
27572
  "Key must be lowercase, start with a letter, and contain only letters, numbers, and hyphens"
27340
27573
  );
27341
- var templateConfigSchemaForward = z61.object({
27342
- blocks: z61.array(
27343
- z61.object({
27344
- identifier: z61.string().min(1),
27345
- kind: z61.string(),
27346
- scope: z61.enum(["entry", "template"]),
27347
- bindings: z61.record(z61.string(), z61.any()).optional(),
27348
- content: z61.record(z61.string(), z61.any()).optional()
27574
+ var templateConfigSchemaForward = z62.object({
27575
+ blocks: z62.array(
27576
+ z62.object({
27577
+ identifier: z62.string().min(1),
27578
+ kind: z62.string(),
27579
+ scope: z62.enum(["entry", "template"]),
27580
+ bindings: z62.record(z62.string(), z62.any()).optional(),
27581
+ content: z62.record(z62.string(), z62.any()).optional()
27349
27582
  })
27350
27583
  )
27351
27584
  }).optional();
27352
- var contentTypeConfigSchema = z61.object({
27585
+ var contentTypeConfigSchema = z62.object({
27353
27586
  key: contentTypeKeySchema,
27354
- name: z61.string().min(1),
27355
- description: z61.string().optional(),
27356
- hasPages: z61.boolean(),
27357
- routePattern: z61.string().optional(),
27587
+ name: z62.string().min(1),
27588
+ description: z62.string().optional(),
27589
+ hasPages: z62.boolean(),
27590
+ routePattern: z62.string().optional(),
27358
27591
  // Fields are validated as unknown[] here - deep field validation happens in @riverbankcms/blocks
27359
- fields: z61.array(z61.any()).min(1, "At least one field is required"),
27360
- titleField: z61.string().optional(),
27361
- isSingleton: z61.boolean().optional().default(false),
27592
+ fields: z62.array(z62.any()).min(1, "At least one field is required"),
27593
+ titleField: z62.string().optional(),
27594
+ isSingleton: z62.boolean().optional().default(false),
27362
27595
  template: templateConfigSchemaForward
27363
27596
  }).refine(
27364
27597
  (data) => {
@@ -27380,7 +27613,7 @@ var contentTypeConfigSchema = z61.object({
27380
27613
  }
27381
27614
  if (!data.routePattern) {
27382
27615
  ctx.addIssue({
27383
- code: z61.ZodIssueCode.custom,
27616
+ code: z62.ZodIssueCode.custom,
27384
27617
  path: ["routePattern"],
27385
27618
  message: "routePattern is required when hasPages is true. Non-singleton types must include {slug} placeholder."
27386
27619
  });
@@ -27389,7 +27622,7 @@ var contentTypeConfigSchema = z61.object({
27389
27622
  const parseResult = safeParseRouteTemplate(data.routePattern);
27390
27623
  if (!parseResult.success) {
27391
27624
  ctx.addIssue({
27392
- code: z61.ZodIssueCode.custom,
27625
+ code: z62.ZodIssueCode.custom,
27393
27626
  path: ["routePattern"],
27394
27627
  message: describeRouteTemplateParseError(parseResult.error)
27395
27628
  });
@@ -27397,44 +27630,44 @@ var contentTypeConfigSchema = z61.object({
27397
27630
  }
27398
27631
  if (!data.isSingleton && parseResult.routeTemplate.kind !== "slug-template") {
27399
27632
  ctx.addIssue({
27400
- code: z61.ZodIssueCode.custom,
27633
+ code: z62.ZodIssueCode.custom,
27401
27634
  path: ["routePattern"],
27402
27635
  message: "routePattern is required when hasPages is true. Non-singleton types must include {slug} placeholder."
27403
27636
  });
27404
27637
  }
27405
27638
  });
27406
- var fieldBindingSchema = z61.object({
27407
- source: z61.literal("field"),
27408
- path: z61.string().min(1, "Field path is required")
27639
+ var fieldBindingSchema = z62.object({
27640
+ source: z62.literal("field"),
27641
+ path: z62.string().min(1, "Field path is required")
27409
27642
  });
27410
- var metaBindingSchema = z61.object({
27411
- source: z61.literal("meta"),
27412
- path: z61.enum(TEMPLATE_BINDING_META_PATHS, {
27643
+ var metaBindingSchema = z62.object({
27644
+ source: z62.literal("meta"),
27645
+ path: z62.enum(TEMPLATE_BINDING_META_PATHS, {
27413
27646
  error: (issue) => describeInvalidTemplateBindingMetaPath(String(issue.input))
27414
27647
  })
27415
27648
  });
27416
- var literalBindingSchema = z61.object({
27417
- source: z61.literal("literal"),
27418
- value: z61.unknown()
27649
+ var literalBindingSchema = z62.object({
27650
+ source: z62.literal("literal"),
27651
+ value: z62.unknown()
27419
27652
  });
27420
- var transformBindingSchema = z61.object({
27421
- source: z61.literal("transform"),
27422
- path: z61.string().min(1, "Transform path is required"),
27423
- transform: z61.enum(BINDING_TRANSFORM_VALUES, {
27653
+ var transformBindingSchema = z62.object({
27654
+ source: z62.literal("transform"),
27655
+ path: z62.string().min(1, "Transform path is required"),
27656
+ transform: z62.enum(BINDING_TRANSFORM_VALUES, {
27424
27657
  error: (issue) => describeInvalidBindingTransform(String(issue.input))
27425
27658
  })
27426
27659
  });
27427
- var baseBindingSchema = z61.discriminatedUnion("source", [
27660
+ var baseBindingSchema = z62.discriminatedUnion("source", [
27428
27661
  fieldBindingSchema,
27429
27662
  metaBindingSchema,
27430
27663
  literalBindingSchema,
27431
27664
  transformBindingSchema
27432
27665
  ]);
27433
- var fallbackBindingSchema = z61.object({
27434
- source: z61.literal("fallback"),
27435
- sources: z61.array(z61.lazy(() => bindingSourceSchema)).min(1, "Fallback must have at least one source")
27666
+ var fallbackBindingSchema = z62.object({
27667
+ source: z62.literal("fallback"),
27668
+ sources: z62.array(z62.lazy(() => bindingSourceSchema)).min(1, "Fallback must have at least one source")
27436
27669
  });
27437
- var bindingSourceSchema = z61.union([
27670
+ var bindingSourceSchema = z62.union([
27438
27671
  baseBindingSchema,
27439
27672
  fallbackBindingSchema
27440
27673
  ]);
@@ -27448,12 +27681,12 @@ function isValidBlockKind(kind) {
27448
27681
  return false;
27449
27682
  }
27450
27683
  var BLOCK_KIND_ERROR_MESSAGE = 'Block kind must be a system block (e.g., "block.hero") or a custom block (e.g., "custom.myBlock")';
27451
- var blockKindSchema = z61.string().refine(isValidBlockKind, { message: BLOCK_KIND_ERROR_MESSAGE });
27452
- var templateBlockConfigSchema = z61.object({
27453
- identifier: z61.string().min(1, "Block identifier is required"),
27684
+ var blockKindSchema = z62.string().refine(isValidBlockKind, { message: BLOCK_KIND_ERROR_MESSAGE });
27685
+ var templateBlockConfigSchema = z62.object({
27686
+ identifier: z62.string().min(1, "Block identifier is required"),
27454
27687
  kind: blockKindSchema,
27455
- scope: z61.enum(["entry", "template"]),
27456
- bindings: z61.record(z61.string(), bindingSourceSchema).optional(),
27688
+ scope: z62.enum(["entry", "template"]),
27689
+ bindings: z62.record(z62.string(), bindingSourceSchema).optional(),
27457
27690
  content: jsonDataSchema.optional()
27458
27691
  }).refine(
27459
27692
  (data) => {
@@ -27472,8 +27705,8 @@ var templateBlockConfigSchema = z61.object({
27472
27705
  },
27473
27706
  { message: "Template-scoped blocks should define static content, not bindings" }
27474
27707
  );
27475
- var templateConfigSchema = z61.object({
27476
- blocks: z61.array(templateBlockConfigSchema).min(1, "Template must have at least one block")
27708
+ var templateConfigSchema = z62.object({
27709
+ blocks: z62.array(templateBlockConfigSchema).min(1, "Template must have at least one block")
27477
27710
  }).refine(
27478
27711
  (data) => {
27479
27712
  const identifiers = data.blocks.map((b) => b.identifier);
@@ -27482,77 +27715,77 @@ var templateConfigSchema = z61.object({
27482
27715
  },
27483
27716
  { message: "Template block identifiers must be unique" }
27484
27717
  );
27485
- var blockConfigSchema = z61.object({
27718
+ var blockConfigSchema = z62.object({
27486
27719
  kind: blockKindSchema,
27487
27720
  content: jsonDataSchema,
27488
- orderIndex: z61.number().optional()
27489
- });
27490
- var pageConfigSchema = z61.object({
27491
- identifier: z61.string().min(1, "Identifier is required"),
27492
- title: z61.string().min(1, "Title is required"),
27493
- path: z61.string().regex(/^\//, "Path must start with /"),
27494
- purpose: z61.string().default("content"),
27495
- blocks: z61.array(blockConfigSchema).optional(),
27496
- status: z61.enum(["draft", "published"]).default("draft"),
27497
- metaTitle: z61.string().optional(),
27498
- metaDescription: z61.string().optional()
27499
- });
27500
- var entryConfigSchema = z61.object({
27501
- identifier: z61.string().min(1, "Identifier is required"),
27502
- contentType: z61.string().min(1, "Content type is required"),
27721
+ orderIndex: z62.number().optional()
27722
+ });
27723
+ var pageConfigSchema = z62.object({
27724
+ identifier: z62.string().min(1, "Identifier is required"),
27725
+ title: z62.string().min(1, "Title is required"),
27726
+ path: z62.string().regex(/^\//, "Path must start with /"),
27727
+ purpose: z62.string().default("content"),
27728
+ blocks: z62.array(blockConfigSchema).optional(),
27729
+ status: z62.enum(["draft", "published"]).default("draft"),
27730
+ metaTitle: z62.string().optional(),
27731
+ metaDescription: z62.string().optional()
27732
+ });
27733
+ var entryConfigSchema = z62.object({
27734
+ identifier: z62.string().min(1, "Identifier is required"),
27735
+ contentType: z62.string().min(1, "Content type is required"),
27503
27736
  data: jsonDataSchema,
27504
- status: z61.enum(["draft", "published"]).default("draft"),
27505
- slug: z61.string().optional(),
27506
- summary: z61.string().optional(),
27737
+ status: z62.enum(["draft", "published"]).default("draft"),
27738
+ slug: z62.string().optional(),
27739
+ summary: z62.string().optional(),
27507
27740
  // Hard remove legacy config-only titles: titles must live in entry `data`.
27508
- title: z61.any().optional().refine((value) => value === void 0, {
27741
+ title: z62.any().optional().refine((value) => value === void 0, {
27509
27742
  message: "Entry titles are now derived from entry data. Remove `title` and move it into `data` (e.g. `data.title`, or your configured `titleField`). Run `riverbankcms migrate entries` for guided migration."
27510
27743
  }),
27511
- metaTitle: z61.string().optional(),
27512
- metaDescription: z61.string().optional()
27744
+ metaTitle: z62.string().optional(),
27745
+ metaDescription: z62.string().optional()
27513
27746
  });
27514
- var dropdownLinkSchema = z61.object({
27515
- kind: z61.literal("dropdown")
27747
+ var dropdownLinkSchema = z62.object({
27748
+ kind: z62.literal("dropdown")
27516
27749
  });
27517
- var navigationLinkSchema = z61.discriminatedUnion("kind", [
27750
+ var navigationLinkSchema = z62.discriminatedUnion("kind", [
27518
27751
  ...navigationLinkInputSchemaOptions,
27519
27752
  dropdownLinkSchema
27520
27753
  ]);
27521
- var baseNavigationItemSchema = z61.object({
27522
- label: z61.string().min(1, "Label is required"),
27754
+ var baseNavigationItemSchema = z62.object({
27755
+ label: z62.string().min(1, "Label is required"),
27523
27756
  link: navigationLinkSchema,
27524
- isCta: z61.boolean().optional()
27757
+ isCta: z62.boolean().optional()
27525
27758
  });
27526
27759
  var navigationItemConfigSchema = baseNavigationItemSchema.extend({
27527
- children: z61.lazy(() => z61.array(navigationItemConfigSchema)).optional()
27528
- });
27529
- var navigationMenuConfigSchema = z61.object({
27530
- identifier: z61.string().min(1, "Identifier is required"),
27531
- name: z61.string().min(1, "Name is required"),
27532
- isPrimary: z61.boolean().optional(),
27533
- isFooter: z61.boolean().optional(),
27534
- items: z61.array(navigationItemConfigSchema)
27760
+ children: z62.lazy(() => z62.array(navigationItemConfigSchema)).optional()
27761
+ });
27762
+ var navigationMenuConfigSchema = z62.object({
27763
+ identifier: z62.string().min(1, "Identifier is required"),
27764
+ name: z62.string().min(1, "Name is required"),
27765
+ isPrimary: z62.boolean().optional(),
27766
+ isFooter: z62.boolean().optional(),
27767
+ items: z62.array(navigationItemConfigSchema)
27535
27768
  }).superRefine((menu, ctx) => {
27536
27769
  const portalStats = collectPortalLinkStats(
27537
27770
  menu.items
27538
27771
  );
27539
27772
  if (portalStats.count > 1) {
27540
27773
  ctx.addIssue({
27541
- code: z61.ZodIssueCode.custom,
27774
+ code: z62.ZodIssueCode.custom,
27542
27775
  message: "Only one portal link is allowed per navigation menu",
27543
27776
  path: ["items"]
27544
27777
  });
27545
27778
  }
27546
27779
  if (portalStats.nestedLabels.length > 0) {
27547
27780
  ctx.addIssue({
27548
- code: z61.ZodIssueCode.custom,
27781
+ code: z62.ZodIssueCode.custom,
27549
27782
  message: `Portal links must be root-level items: ${portalStats.nestedLabels.join(", ")}`,
27550
27783
  path: ["items"]
27551
27784
  });
27552
27785
  }
27553
27786
  if (portalStats.withChildrenLabels.length > 0) {
27554
27787
  ctx.addIssue({
27555
- code: z61.ZodIssueCode.custom,
27788
+ code: z62.ZodIssueCode.custom,
27556
27789
  message: `Portal links cannot contain child items: ${portalStats.withChildrenLabels.join(", ")}`,
27557
27790
  path: ["items"]
27558
27791
  });
@@ -27562,44 +27795,44 @@ var navigationMenuConfigSchema = z61.object({
27562
27795
  );
27563
27796
  if (cartStats.nestedLabels.length > 0) {
27564
27797
  ctx.addIssue({
27565
- code: z61.ZodIssueCode.custom,
27798
+ code: z62.ZodIssueCode.custom,
27566
27799
  message: `Cart links must be root-level items: ${cartStats.nestedLabels.join(", ")}`,
27567
27800
  path: ["items"]
27568
27801
  });
27569
27802
  }
27570
27803
  if (cartStats.withChildrenLabels.length > 0) {
27571
27804
  ctx.addIssue({
27572
- code: z61.ZodIssueCode.custom,
27805
+ code: z62.ZodIssueCode.custom,
27573
27806
  message: `Cart links cannot contain child items: ${cartStats.withChildrenLabels.join(", ")}`,
27574
27807
  path: ["items"]
27575
27808
  });
27576
27809
  }
27577
27810
  if (cartStats.ctaLabels.length > 0) {
27578
27811
  ctx.addIssue({
27579
- code: z61.ZodIssueCode.custom,
27812
+ code: z62.ZodIssueCode.custom,
27580
27813
  message: `Cart links cannot be marked as CTA: ${cartStats.ctaLabels.join(", ")}`,
27581
27814
  path: ["items"]
27582
27815
  });
27583
27816
  }
27584
27817
  if (cartStats.missingVisibleTextLabels.length > 0) {
27585
27818
  ctx.addIssue({
27586
- code: z61.ZodIssueCode.custom,
27819
+ code: z62.ZodIssueCode.custom,
27587
27820
  message: `Cart links with icon-with-label must provide a visible label: ${cartStats.missingVisibleTextLabels.join(", ")}`,
27588
27821
  path: ["items"]
27589
27822
  });
27590
27823
  }
27591
27824
  });
27592
- var siteSettingsConfigSchema = z61.object({
27593
- homepagePath: z61.string().optional(),
27594
- siteTitle: z61.string().optional(),
27595
- siteDescription: z61.string().optional(),
27596
- defaultTemplates: z61.record(z61.string(), z61.string()).optional()
27825
+ var siteSettingsConfigSchema = z62.object({
27826
+ homepagePath: z62.string().optional(),
27827
+ siteTitle: z62.string().optional(),
27828
+ siteDescription: z62.string().optional(),
27829
+ defaultTemplates: z62.record(z62.string(), z62.string()).optional()
27597
27830
  });
27598
- var contentConfigBaseSchema = z61.object({
27599
- contentTypes: z61.array(contentTypeConfigSchema).optional(),
27600
- entries: z61.array(entryConfigSchema).optional(),
27601
- pages: z61.array(pageConfigSchema).optional(),
27602
- navigationMenus: z61.array(navigationMenuConfigSchema).optional(),
27831
+ var contentConfigBaseSchema = z62.object({
27832
+ contentTypes: z62.array(contentTypeConfigSchema).optional(),
27833
+ entries: z62.array(entryConfigSchema).optional(),
27834
+ pages: z62.array(pageConfigSchema).optional(),
27835
+ navigationMenus: z62.array(navigationMenuConfigSchema).optional(),
27603
27836
  settings: siteSettingsConfigSchema.optional()
27604
27837
  });
27605
27838
  var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
@@ -27608,7 +27841,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
27608
27841
  const duplicateKeys = keys.filter((key, i) => keys.indexOf(key) !== i);
27609
27842
  if (duplicateKeys.length > 0) {
27610
27843
  ctx.addIssue({
27611
- code: z61.ZodIssueCode.custom,
27844
+ code: z62.ZodIssueCode.custom,
27612
27845
  message: `Content type keys must be unique. Duplicates: ${duplicateKeys.join(", ")}`,
27613
27846
  path: ["contentTypes"]
27614
27847
  });
@@ -27619,7 +27852,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
27619
27852
  const duplicateIds = identifiers.filter((id, i) => identifiers.indexOf(id) !== i);
27620
27853
  if (duplicateIds.length > 0) {
27621
27854
  ctx.addIssue({
27622
- code: z61.ZodIssueCode.custom,
27855
+ code: z62.ZodIssueCode.custom,
27623
27856
  message: `Page identifiers must be unique. Duplicates: ${duplicateIds.join(", ")}`,
27624
27857
  path: ["pages"]
27625
27858
  });
@@ -27628,7 +27861,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
27628
27861
  const duplicatePaths = paths.filter((path, i) => paths.indexOf(path) !== i);
27629
27862
  if (duplicatePaths.length > 0) {
27630
27863
  ctx.addIssue({
27631
- code: z61.ZodIssueCode.custom,
27864
+ code: z62.ZodIssueCode.custom,
27632
27865
  message: `Page paths must be unique. Duplicates: ${duplicatePaths.join(", ")}`,
27633
27866
  path: ["pages"]
27634
27867
  });
@@ -27639,7 +27872,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
27639
27872
  const duplicateIds = identifiers.filter((id, i) => identifiers.indexOf(id) !== i);
27640
27873
  if (duplicateIds.length > 0) {
27641
27874
  ctx.addIssue({
27642
- code: z61.ZodIssueCode.custom,
27875
+ code: z62.ZodIssueCode.custom,
27643
27876
  message: `Entry identifiers must be unique. Duplicates: ${duplicateIds.join(", ")}`,
27644
27877
  path: ["entries"]
27645
27878
  });
@@ -27650,7 +27883,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
27650
27883
  const duplicateIds = identifiers.filter((id, i) => identifiers.indexOf(id) !== i);
27651
27884
  if (duplicateIds.length > 0) {
27652
27885
  ctx.addIssue({
27653
- code: z61.ZodIssueCode.custom,
27886
+ code: z62.ZodIssueCode.custom,
27654
27887
  message: `Navigation menu identifiers must be unique. Duplicates: ${duplicateIds.join(", ")}`,
27655
27888
  path: ["navigationMenus"]
27656
27889
  });
@@ -27664,7 +27897,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
27664
27897
  const entriesForType = data.entries.filter((e) => e.contentType === singletonKey);
27665
27898
  if (entriesForType.length > 1) {
27666
27899
  ctx.addIssue({
27667
- code: z61.ZodIssueCode.custom,
27900
+ code: z62.ZodIssueCode.custom,
27668
27901
  message: `Singleton content type "${singletonKey}" cannot have more than one entry. Found ${entriesForType.length} entries.`,
27669
27902
  path: ["entries"]
27670
27903
  });
@@ -27777,18 +28010,18 @@ function validateLayout(layout) {
27777
28010
  }
27778
28011
 
27779
28012
  // src/config/dashboard-validation.ts
27780
- import { z as z62 } from "zod";
27781
- var navIdListSchema2 = z62.preprocess((value) => {
28013
+ import { z as z63 } from "zod";
28014
+ var navIdListSchema2 = z63.preprocess((value) => {
27782
28015
  if (!Array.isArray(value)) return void 0;
27783
28016
  const filtered = value.filter((v) => typeof v === "string" && v.trim().length > 0);
27784
28017
  return filtered.length > 0 ? filtered : void 0;
27785
- }, z62.array(z62.string()).max(200, "Maximum 200 nav IDs").optional());
27786
- var dashboardNavVisibilityBaseSchema2 = z62.object({
27787
- mode: z62.enum(["augment", "restrict"]).optional(),
28018
+ }, z63.array(z63.string()).max(200, "Maximum 200 nav IDs").optional());
28019
+ var dashboardNavVisibilityBaseSchema2 = z63.object({
28020
+ mode: z63.enum(["augment", "restrict"]).optional(),
27788
28021
  allowIds: navIdListSchema2,
27789
28022
  denyIds: navIdListSchema2
27790
28023
  }).strip();
27791
- var dashboardNavVisibilityRolesSchema2 = z62.object({
28024
+ var dashboardNavVisibilityRolesSchema2 = z63.object({
27792
28025
  administrator: dashboardNavVisibilityBaseSchema2.optional(),
27793
28026
  editor: dashboardNavVisibilityBaseSchema2.optional(),
27794
28027
  team_member: dashboardNavVisibilityBaseSchema2.optional(),
@@ -27797,20 +28030,20 @@ var dashboardNavVisibilityRolesSchema2 = z62.object({
27797
28030
  var dashboardNavVisibilitySchema2 = dashboardNavVisibilityBaseSchema2.extend({
27798
28031
  roles: dashboardNavVisibilityRolesSchema2
27799
28032
  }).strip();
27800
- var dashboardNavigationConfigSchema2 = z62.object({
28033
+ var dashboardNavigationConfigSchema2 = z63.object({
27801
28034
  siteNav: dashboardNavVisibilitySchema2.optional(),
27802
28035
  settingsNav: dashboardNavVisibilitySchema2.optional()
27803
28036
  }).strip();
27804
- var dashboardConfigSchema2 = z62.object({
27805
- previewEditingEnabled: z62.boolean().optional(),
28037
+ var dashboardConfigSchema2 = z63.object({
28038
+ previewEditingEnabled: z63.boolean().optional(),
27806
28039
  navigation: dashboardNavigationConfigSchema2.optional()
27807
28040
  }).strip();
27808
28041
 
27809
28042
  // src/zod/titleSourceSchema.ts
27810
- import { z as z63 } from "zod";
27811
- var titleSourceValueSchema = z63.union([
27812
- z63.string().min(1),
27813
- z63.array(z63.string().min(1)).min(1)
28043
+ import { z as z64 } from "zod";
28044
+ var titleSourceValueSchema = z64.union([
28045
+ z64.string().min(1),
28046
+ z64.array(z64.string().min(1)).min(1)
27814
28047
  ]);
27815
28048
 
27816
28049
  // src/data/prefetchBlockData.ts
@@ -27819,6 +28052,7 @@ var SUPPORTED_LOADER_ENDPOINTS2 = [
27819
28052
  "getPublishedEntryPreview",
27820
28053
  "listPublicEvents",
27821
28054
  "listPublicCourses",
28055
+ "listPublicTeamMembers",
27822
28056
  "listPublicProducts",
27823
28057
  "listPublicPasses",
27824
28058
  "listPublicMemberships",
@@ -27828,11 +28062,11 @@ var SUPPORTED_LOADER_ENDPOINTS2 = [
27828
28062
  ];
27829
28063
 
27830
28064
  // src/config/validation.ts
27831
- var sdkThemePaletteSchema2 = z64.record(z64.string(), z64.string());
27832
- var sdkThemeConfigSchema2 = z64.object({
28065
+ var sdkThemePaletteSchema2 = z65.record(z65.string(), z65.string());
28066
+ var sdkThemeConfigSchema2 = z65.object({
27833
28067
  palette: sdkThemePaletteSchema2
27834
28068
  });
27835
- var sdkSiteUrlSchema = z64.string().url("Must be a valid URL").refine((url) => {
28069
+ var sdkSiteUrlSchema = z65.string().url("Must be a valid URL").refine((url) => {
27836
28070
  try {
27837
28071
  const parsed = new URL(url);
27838
28072
  const isLocal = parsed.hostname === "localhost" || parsed.hostname.endsWith(".localhost") || parsed.hostname.endsWith(".local") || parsed.hostname.endsWith(".test");
@@ -27841,97 +28075,97 @@ var sdkSiteUrlSchema = z64.string().url("Must be a valid URL").refine((url) => {
27841
28075
  return false;
27842
28076
  }
27843
28077
  }, { message: "Production URLs must use HTTPS" }).transform((url) => url.replace(/\/$/, ""));
27844
- var sectionBackgroundSchema = z64.object({
27845
- id: z64.string(),
27846
- label: z64.string(),
27847
- token: z64.string()
28078
+ var sectionBackgroundSchema = z65.object({
28079
+ id: z65.string(),
28080
+ label: z65.string(),
28081
+ token: z65.string()
27848
28082
  // Reference to theme palette token
27849
28083
  });
27850
- var sectionSpacingSchema = z64.enum(["compact", "default", "spacious"]);
27851
- var containerMaxWidthSchema = z64.enum(["narrow", "default", "wide", "full"]);
27852
- var containerAlignmentSchema = z64.enum(["left", "center", "right"]);
27853
- var sectionOptionsSchema = z64.object({
27854
- backgroundColor: z64.boolean().optional(),
27855
- backgroundImage: z64.boolean().optional(),
27856
- backgroundGradient: z64.boolean().optional(),
27857
- spacing: z64.union([
27858
- z64.array(sectionSpacingSchema),
27859
- z64.boolean()
28084
+ var sectionSpacingSchema = z65.enum(["compact", "default", "spacious"]);
28085
+ var containerMaxWidthSchema = z65.enum(["narrow", "default", "wide", "full"]);
28086
+ var containerAlignmentSchema = z65.enum(["left", "center", "right"]);
28087
+ var sectionOptionsSchema = z65.object({
28088
+ backgroundColor: z65.boolean().optional(),
28089
+ backgroundImage: z65.boolean().optional(),
28090
+ backgroundGradient: z65.boolean().optional(),
28091
+ spacing: z65.union([
28092
+ z65.array(sectionSpacingSchema),
28093
+ z65.boolean()
27860
28094
  ]).optional(),
27861
- textColor: z64.boolean().optional()
28095
+ textColor: z65.boolean().optional()
27862
28096
  }).optional();
27863
- var containerOptionsSchema = z64.object({
27864
- maxWidth: z64.union([
27865
- z64.array(containerMaxWidthSchema),
27866
- z64.boolean()
28097
+ var containerOptionsSchema = z65.object({
28098
+ maxWidth: z65.union([
28099
+ z65.array(containerMaxWidthSchema),
28100
+ z65.boolean()
27867
28101
  ]).optional(),
27868
- alignment: z64.union([
27869
- z64.array(containerAlignmentSchema),
27870
- z64.boolean()
28102
+ alignment: z65.union([
28103
+ z65.array(containerAlignmentSchema),
28104
+ z65.boolean()
27871
28105
  ]).optional()
27872
28106
  }).optional();
27873
- var siteStyleConfigSchema = z64.object({
27874
- sectionBackgrounds: z64.array(sectionBackgroundSchema).optional(),
28107
+ var siteStyleConfigSchema = z65.object({
28108
+ sectionBackgrounds: z65.array(sectionBackgroundSchema).optional(),
27875
28109
  sectionOptions: sectionOptionsSchema,
27876
28110
  containerOptions: containerOptionsSchema
27877
28111
  }).optional();
27878
- var sdkLoaderEndpointSchema2 = z64.enum(SUPPORTED_LOADER_ENDPOINTS2);
28112
+ var sdkLoaderEndpointSchema2 = z65.enum(SUPPORTED_LOADER_ENDPOINTS2);
27879
28113
  var allowedTransformIds = new Set(builtinTransformDefinitions.map((transform) => transform.id));
27880
- var loaderTransformStepSchema = z64.object({
27881
- id: z64.string().refine((id) => allowedTransformIds.has(id), {
28114
+ var loaderTransformStepSchema = z65.object({
28115
+ id: z65.string().refine((id) => allowedTransformIds.has(id), {
27882
28116
  message: "Unknown transform id"
27883
28117
  }),
27884
- options: z64.record(z64.string(), z64.unknown()).optional()
28118
+ options: z65.record(z65.string(), z65.unknown()).optional()
27885
28119
  });
27886
- var loaderParamBindingSchema2 = z64.object({
27887
- $bind: z64.object({
27888
- from: z64.string().min(1, "Binding path is required"),
28120
+ var loaderParamBindingSchema2 = z65.object({
28121
+ $bind: z65.object({
28122
+ from: z65.string().min(1, "Binding path is required"),
27889
28123
  // Loader params are ultimately string-normalized for query strings, so fallbacks should
27890
28124
  // stay scalar. Use transforms (e.g. `value.jsonArray`) when you need to serialize
27891
28125
  // more complex values into a string.
27892
- fallback: z64.union([z64.string(), z64.number(), z64.boolean(), z64.null()]).optional(),
27893
- transforms: z64.array(loaderTransformStepSchema).default([]),
27894
- pick: z64.enum(["value", "collection", "context"]).default("value"),
27895
- coerce: z64.enum(["number", "boolean", "string"]).optional()
28126
+ fallback: z65.union([z65.string(), z65.number(), z65.boolean(), z65.null()]).optional(),
28127
+ transforms: z65.array(loaderTransformStepSchema).default([]),
28128
+ pick: z65.enum(["value", "collection", "context"]).default("value"),
28129
+ coerce: z65.enum(["number", "boolean", "string"]).optional()
27896
28130
  })
27897
28131
  });
27898
- var loaderParamValueSchema2 = z64.union([
27899
- z64.string(),
27900
- z64.number(),
27901
- z64.boolean(),
28132
+ var loaderParamValueSchema2 = z65.union([
28133
+ z65.string(),
28134
+ z65.number(),
28135
+ z65.boolean(),
27902
28136
  loaderParamBindingSchema2
27903
28137
  ]);
27904
- var loaderWhenValueSchema = z64.union([
27905
- z64.boolean(),
28138
+ var loaderWhenValueSchema = z65.union([
28139
+ z65.boolean(),
27906
28140
  loaderParamBindingSchema2
27907
28141
  ]);
27908
- var sdkConfigLoaderSchema2 = z64.object({
28142
+ var sdkConfigLoaderSchema2 = z65.object({
27909
28143
  endpoint: sdkLoaderEndpointSchema2,
27910
- params: z64.record(z64.string(), loaderParamValueSchema2),
27911
- mode: z64.enum(["server", "client"]).default("server"),
28144
+ params: z65.record(z65.string(), loaderParamValueSchema2),
28145
+ mode: z65.enum(["server", "client"]).default("server"),
27912
28146
  when: loaderWhenValueSchema.optional()
27913
28147
  });
27914
- var sdkDataLoadersSchema2 = z64.record(z64.string(), sdkConfigLoaderSchema2).refine(
28148
+ var sdkDataLoadersSchema2 = z65.record(z65.string(), sdkConfigLoaderSchema2).refine(
27915
28149
  (loaders) => Object.keys(loaders).length <= 5,
27916
28150
  { message: "Maximum 5 data loaders per block" }
27917
28151
  ).optional();
27918
- var fieldSelectOptionSchema = z64.object({
27919
- value: z64.string().min(1, "Option value is required"),
27920
- label: z64.string().min(1, "Option label is required")
28152
+ var fieldSelectOptionSchema = z65.object({
28153
+ value: z65.string().min(1, "Option value is required"),
28154
+ label: z65.string().min(1, "Option label is required")
27921
28155
  });
27922
- var blockFieldConfigSchema = z64.object({
27923
- options: z64.array(fieldSelectOptionSchema).min(1, "At least one option is required").optional()
28156
+ var blockFieldConfigSchema = z65.object({
28157
+ options: z65.array(fieldSelectOptionSchema).min(1, "At least one option is required").optional()
27924
28158
  });
27925
- var blockFieldOptionsSchema = z64.record(
27926
- z64.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
28159
+ var blockFieldOptionsSchema = z65.record(
28160
+ z65.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
27927
28161
  message: "Block ID must be 'block.*' or 'custom.*' format"
27928
28162
  }),
27929
- z64.record(
27930
- z64.string().min(1, "Field ID is required"),
28163
+ z65.record(
28164
+ z65.string().min(1, "Field ID is required"),
27931
28165
  blockFieldConfigSchema
27932
28166
  )
27933
28167
  ).optional();
27934
- var blockFieldExtensionSchema = z64.object({
28168
+ var blockFieldExtensionSchema = z65.object({
27935
28169
  fields: fieldSchema.array().min(1, "At least one field is required")
27936
28170
  }).refine(
27937
28171
  (data) => {
@@ -27945,10 +28179,10 @@ var blockFieldExtensionSchema = z64.object({
27945
28179
  message: "Required fields must have a defaultValue to support existing blocks"
27946
28180
  }
27947
28181
  );
27948
- var blockFieldExtensionsSchema = z64.record(
28182
+ var blockFieldExtensionsSchema = z65.record(
27949
28183
  // System blocks are kebab-case: block.body-text, block.event-calendar, ...
27950
28184
  // Enforce: lowercase alphanumerics with single hyphens (no trailing hyphen, no consecutive hyphens).
27951
- z64.string().regex(/^block\.[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/, {
28185
+ z65.string().regex(/^block\.[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/, {
27952
28186
  message: "Block ID must be 'block.*' format (system blocks only)"
27953
28187
  }),
27954
28188
  blockFieldExtensionSchema
@@ -27995,24 +28229,24 @@ function validateFieldIdConflicts(blockFieldExtensions) {
27995
28229
  }
27996
28230
  return conflicts;
27997
28231
  }
27998
- var syncConfigSchema = z64.object({
27999
- existingEntries: z64.enum(["skip", "update"]).optional()
28232
+ var syncConfigSchema = z65.object({
28233
+ existingEntries: z65.enum(["skip", "update"]).optional()
28000
28234
  }).optional();
28001
- var deployConfigSchema = z64.object({
28002
- verifyCommand: z64.string().optional(),
28003
- prebuildOutput: z64.string().optional()
28235
+ var deployConfigSchema = z65.object({
28236
+ verifyCommand: z65.string().optional(),
28237
+ prebuildOutput: z65.string().optional()
28004
28238
  }).optional();
28005
- var sdkCustomBlockSchema = z64.object({
28239
+ var sdkCustomBlockSchema = z65.object({
28006
28240
  // Block ID must start with 'custom.'
28007
- id: z64.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
28241
+ id: z65.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
28008
28242
  message: "Block ID must start with 'custom.' followed by lowercase letters, numbers, or hyphens"
28009
28243
  }),
28010
- title: z64.string().min(1, "Title is required"),
28244
+ title: z65.string().min(1, "Title is required"),
28011
28245
  titleSource: titleSourceValueSchema.optional(),
28012
- description: z64.string().optional(),
28246
+ description: z65.string().optional(),
28013
28247
  category: blockCategoryEnum,
28014
- icon: z64.string().optional(),
28015
- tags: z64.array(z64.string()).optional(),
28248
+ icon: z65.string().optional(),
28249
+ tags: z65.array(z65.string()).optional(),
28016
28250
  // Reuse the exact field schema from @riverbankcms/blocks - all field types supported
28017
28251
  fields: fieldSchema.array().min(1, "Custom blocks must have at least one field"),
28018
28252
  // Data loaders for CMS endpoints
@@ -28020,14 +28254,14 @@ var sdkCustomBlockSchema = z64.object({
28020
28254
  // Optional declarative layout - when present, block can render without React override
28021
28255
  layout: NodeSchema.optional(),
28022
28256
  // Optional variants system (preferred when a block has multiple structural layouts)
28023
- variants: z64.record(z64.string().min(1), NodeSchema).optional(),
28024
- defaultVariant: z64.string().min(1).optional(),
28025
- variantOptions: z64.record(
28026
- z64.string().min(1),
28027
- z64.object({
28028
- label: z64.string().min(1).optional(),
28029
- description: z64.string().min(1).optional(),
28030
- icon: z64.string().min(1).optional()
28257
+ variants: z65.record(z65.string().min(1), NodeSchema).optional(),
28258
+ defaultVariant: z65.string().min(1).optional(),
28259
+ variantOptions: z65.record(
28260
+ z65.string().min(1),
28261
+ z65.object({
28262
+ label: z65.string().min(1).optional(),
28263
+ description: z65.string().min(1).optional(),
28264
+ icon: z65.string().min(1).optional()
28031
28265
  })
28032
28266
  ).optional()
28033
28267
  }).superRefine((data, ctx) => {
@@ -28038,7 +28272,7 @@ var sdkCustomBlockSchema = z64.object({
28038
28272
  const exists = fields3.some((field) => field.id === source);
28039
28273
  if (!exists) {
28040
28274
  ctx.addIssue({
28041
- code: z64.ZodIssueCode.custom,
28275
+ code: z65.ZodIssueCode.custom,
28042
28276
  message: `titleSource must reference a valid field ID (got "${source}")`,
28043
28277
  path: Array.isArray(data.titleSource) ? ["titleSource", index] : ["titleSource"]
28044
28278
  });
@@ -28047,7 +28281,7 @@ var sdkCustomBlockSchema = z64.object({
28047
28281
  }
28048
28282
  if (data.layout && data.variants) {
28049
28283
  ctx.addIssue({
28050
- code: z64.ZodIssueCode.custom,
28284
+ code: z65.ZodIssueCode.custom,
28051
28285
  message: "Custom block must define either `layout` or `variants`, not both",
28052
28286
  path: ["variants"]
28053
28287
  });
@@ -28057,7 +28291,7 @@ var sdkCustomBlockSchema = z64.object({
28057
28291
  if (!result.valid) {
28058
28292
  for (const error of result.errors) {
28059
28293
  ctx.addIssue({
28060
- code: z64.ZodIssueCode.custom,
28294
+ code: z65.ZodIssueCode.custom,
28061
28295
  message: error.message,
28062
28296
  path: ["layout"]
28063
28297
  });
@@ -28068,14 +28302,14 @@ var sdkCustomBlockSchema = z64.object({
28068
28302
  const keys = Object.keys(data.variants);
28069
28303
  if (keys.length === 0) {
28070
28304
  ctx.addIssue({
28071
- code: z64.ZodIssueCode.custom,
28305
+ code: z65.ZodIssueCode.custom,
28072
28306
  message: "`variants` must contain at least one variant key",
28073
28307
  path: ["variants"]
28074
28308
  });
28075
28309
  }
28076
28310
  if (data.defaultVariant && !Object.prototype.hasOwnProperty.call(data.variants, data.defaultVariant)) {
28077
28311
  ctx.addIssue({
28078
- code: z64.ZodIssueCode.custom,
28312
+ code: z65.ZodIssueCode.custom,
28079
28313
  message: "`defaultVariant` must be a key present in `variants`",
28080
28314
  path: ["defaultVariant"]
28081
28315
  });
@@ -28085,7 +28319,7 @@ var sdkCustomBlockSchema = z64.object({
28085
28319
  if (!result.valid) {
28086
28320
  for (const error of result.errors) {
28087
28321
  ctx.addIssue({
28088
- code: z64.ZodIssueCode.custom,
28322
+ code: z65.ZodIssueCode.custom,
28089
28323
  message: `${key}: ${error.message}`,
28090
28324
  path: ["variants", key]
28091
28325
  });
@@ -28096,7 +28330,7 @@ var sdkCustomBlockSchema = z64.object({
28096
28330
  for (const key of Object.keys(data.variantOptions)) {
28097
28331
  if (!Object.prototype.hasOwnProperty.call(data.variants, key)) {
28098
28332
  ctx.addIssue({
28099
- code: z64.ZodIssueCode.custom,
28333
+ code: z65.ZodIssueCode.custom,
28100
28334
  message: "`variantOptions` key must exist in `variants`",
28101
28335
  path: ["variantOptions", key]
28102
28336
  });
@@ -28105,58 +28339,58 @@ var sdkCustomBlockSchema = z64.object({
28105
28339
  }
28106
28340
  }
28107
28341
  });
28108
- var themeSourceSchema = z64.enum(["local", "cms"]).optional();
28109
- var activeThemeSchema = z64.string().regex(/^[a-z0-9][a-z0-9-_]*$/, {
28342
+ var themeSourceSchema = z65.enum(["local", "cms"]).optional();
28343
+ var activeThemeSchema = z65.string().regex(/^[a-z0-9][a-z0-9-_]*$/, {
28110
28344
  message: "Theme name must be lowercase alphanumeric with hyphens/underscores"
28111
28345
  }).max(64, "Theme name too long").optional();
28112
28346
  function isValidConfigBlockKind(kind) {
28113
28347
  if (getBlockDefinition(kind)) return true;
28114
28348
  return /^custom\.[a-z][a-z0-9-]*$/.test(kind);
28115
28349
  }
28116
- var layoutBlockKindSchema = z64.string().refine(isValidConfigBlockKind, {
28350
+ var layoutBlockKindSchema = z65.string().refine(isValidConfigBlockKind, {
28117
28351
  message: 'Block kind must be a system block (e.g., "block.hero") or a custom block (e.g., "custom.my-block")'
28118
28352
  });
28119
- var layoutFooterBlockSchema = z64.object({
28120
- id: z64.string().min(1).optional(),
28353
+ var layoutFooterBlockSchema = z65.object({
28354
+ id: z65.string().min(1).optional(),
28121
28355
  kind: layoutBlockKindSchema,
28122
28356
  // Allow omitted content for blocks that rely on defaults.
28123
- content: z64.record(z64.string(), z64.unknown()).optional()
28357
+ content: z65.record(z65.string(), z65.unknown()).optional()
28124
28358
  }).strict();
28125
- var layoutConfigSchema = z64.object({
28126
- footerBlocks: z64.array(layoutFooterBlockSchema).optional()
28359
+ var layoutConfigSchema = z65.object({
28360
+ footerBlocks: z65.array(layoutFooterBlockSchema).optional()
28127
28361
  }).strict();
28128
- var sdkWorkflowIdSchema2 = z64.string().min(1).max(SDK_WORKFLOW_ID_MAX_LENGTH).regex(SDK_WORKFLOW_ID_PATTERN, {
28362
+ var sdkWorkflowIdSchema2 = z65.string().min(1).max(SDK_WORKFLOW_ID_MAX_LENGTH).regex(SDK_WORKFLOW_ID_PATTERN, {
28129
28363
  message: "Workflow ID must start with a lowercase letter and use lowercase letters, numbers, dots, underscores, or hyphens"
28130
28364
  });
28131
- var sdkWorkflowEndpointSchema2 = z64.string().min(1).max(SDK_WORKFLOW_ENDPOINT_MAX_LENGTH).regex(SDK_WORKFLOW_ENDPOINT_PATTERN, { message: 'Workflow endpoint must be a site-relative path starting with "/"' });
28132
- var sdkWorkflowTriggerSchema2 = z64.discriminatedUnion("type", [
28133
- z64.object({ type: z64.literal("manual") }).strict()
28365
+ var sdkWorkflowEndpointSchema2 = z65.string().min(1).max(SDK_WORKFLOW_ENDPOINT_MAX_LENGTH).regex(SDK_WORKFLOW_ENDPOINT_PATTERN, { message: 'Workflow endpoint must be a site-relative path starting with "/"' });
28366
+ var sdkWorkflowTriggerSchema2 = z65.discriminatedUnion("type", [
28367
+ z65.object({ type: z65.literal("manual") }).strict()
28134
28368
  ]);
28135
- var sdkWorkflowConfirmationSchema2 = z64.object({
28136
- title: z64.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH),
28137
- body: z64.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH).optional()
28369
+ var sdkWorkflowConfirmationSchema2 = z65.object({
28370
+ title: z65.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH),
28371
+ body: z65.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH).optional()
28138
28372
  }).strict();
28139
- var sdkWorkflowConfigSchema2 = z64.object({
28373
+ var sdkWorkflowConfigSchema2 = z65.object({
28140
28374
  id: sdkWorkflowIdSchema2,
28141
- title: z64.string().trim().min(1).max(SDK_WORKFLOW_TITLE_MAX_LENGTH),
28142
- description: z64.string().trim().min(1).max(SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH).optional(),
28143
- contentType: z64.string().trim().min(1).max(SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH),
28375
+ title: z65.string().trim().min(1).max(SDK_WORKFLOW_TITLE_MAX_LENGTH),
28376
+ description: z65.string().trim().min(1).max(SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH).optional(),
28377
+ contentType: z65.string().trim().min(1).max(SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH),
28144
28378
  endpoint: sdkWorkflowEndpointSchema2,
28145
- triggers: z64.array(sdkWorkflowTriggerSchema2).min(1).max(SDK_WORKFLOW_TRIGGER_MAX_COUNT),
28379
+ triggers: z65.array(sdkWorkflowTriggerSchema2).min(1).max(SDK_WORKFLOW_TRIGGER_MAX_COUNT),
28146
28380
  confirmation: sdkWorkflowConfirmationSchema2.optional()
28147
28381
  }).strict();
28148
- var sdkWorkflowsSchema2 = z64.array(sdkWorkflowConfigSchema2).max(SDK_WORKFLOW_MAX_COUNT, "Maximum 50 workflows per site").refine((workflows) => {
28382
+ var sdkWorkflowsSchema2 = z65.array(sdkWorkflowConfigSchema2).max(SDK_WORKFLOW_MAX_COUNT, "Maximum 50 workflows per site").refine((workflows) => {
28149
28383
  const ids = workflows.map((workflow) => workflow.id);
28150
28384
  return ids.length === new Set(ids).size;
28151
28385
  }, { message: "Workflow IDs must be unique" }).optional();
28152
- var riverbankSiteConfigSchema = z64.object({
28153
- siteId: z64.string().uuid(),
28386
+ var riverbankSiteConfigSchema = z65.object({
28387
+ siteId: z65.string().uuid(),
28154
28388
  previewUrl: sdkSiteUrlSchema.optional(),
28155
28389
  liveUrl: sdkSiteUrlSchema.optional(),
28156
28390
  theme: sdkThemeConfigSchema2.optional(),
28157
28391
  styles: siteStyleConfigSchema,
28158
28392
  layout: layoutConfigSchema.optional(),
28159
- customBlocks: z64.array(sdkCustomBlockSchema).max(100, "Maximum 100 custom blocks per site").refine(
28393
+ customBlocks: z65.array(sdkCustomBlockSchema).max(100, "Maximum 100 custom blocks per site").refine(
28160
28394
  // Ensure unique block IDs
28161
28395
  (blocks) => {
28162
28396
  const ids = blocks.map((b) => b.id);
@@ -28169,7 +28403,7 @@ var riverbankSiteConfigSchema = z64.object({
28169
28403
  workflows: sdkWorkflowsSchema2,
28170
28404
  content: contentConfigSchema.optional(),
28171
28405
  // CLI-related configuration (Phase 4)
28172
- contentDir: z64.string().optional(),
28406
+ contentDir: z65.string().optional(),
28173
28407
  sync: syncConfigSchema,
28174
28408
  deploy: deployConfigSchema,
28175
28409
  // Theme sync configuration (Phase 5)