@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
@@ -44,7 +44,7 @@ function fallbackBinding(...sources) {
44
44
  }
45
45
 
46
46
  // src/config/validation.ts
47
- import { z as z64 } from "zod";
47
+ import { z as z65 } from "zod";
48
48
 
49
49
  // ../api/src/cache-tags.ts
50
50
  var TAG_TEMPLATES = {
@@ -898,13 +898,150 @@ var ENDPOINT_DEFINITIONS = {
898
898
  "server:internal_error"
899
899
  ]
900
900
  },
901
- deleteAppointmentResource: {
901
+ removeAppointmentResource: {
902
902
  path: "/sites/{siteId}/bookings/resources/{resourceId}",
903
903
  method: "DELETE",
904
904
  auth: "user",
905
905
  responseKind: "json",
906
906
  errors: ["resource:not_found", "server:internal_error"]
907
907
  },
908
+ createTeamMemberProfile: {
909
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile",
910
+ method: "POST",
911
+ auth: "user",
912
+ responseKind: "json",
913
+ errors: [
914
+ "validation:invalid_input",
915
+ "resource:not_found",
916
+ "resource:conflict",
917
+ "server:internal_error"
918
+ ]
919
+ },
920
+ updateTeamMemberProfilePolicy: {
921
+ path: "/sites/{siteId}/bookings/resources/profile-policy",
922
+ method: "PUT",
923
+ auth: "user",
924
+ responseKind: "json",
925
+ errors: ["validation:invalid_input", "server:internal_error"]
926
+ },
927
+ updateTeamMemberProfileContent: {
928
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/content",
929
+ method: "PUT",
930
+ tags: [
931
+ "site-{siteId}",
932
+ "content-{siteId}-team-member",
933
+ "content-entry-{entryId}"
934
+ ],
935
+ auth: "user",
936
+ responseKind: "json",
937
+ errors: [
938
+ "validation:invalid_input",
939
+ "resource:not_found",
940
+ "resource:conflict",
941
+ "server:internal_error"
942
+ ]
943
+ },
944
+ publishTeamMemberProfile: {
945
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/publish",
946
+ method: "POST",
947
+ tags: [
948
+ "site-{siteId}",
949
+ "content-{siteId}-team-member",
950
+ "content-entry-{entryId}"
951
+ ],
952
+ auth: "user",
953
+ responseKind: "json",
954
+ errors: [
955
+ "validation:invalid_input",
956
+ "resource:not_found",
957
+ "server:internal_error"
958
+ ]
959
+ },
960
+ discardTeamMemberProfileDraft: {
961
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/discard",
962
+ method: "POST",
963
+ tags: [
964
+ "site-{siteId}",
965
+ "content-{siteId}-team-member",
966
+ "content-entry-{entryId}"
967
+ ],
968
+ auth: "user",
969
+ responseKind: "json",
970
+ errors: [
971
+ "validation:invalid_input",
972
+ "resource:not_found",
973
+ "resource:conflict",
974
+ "server:internal_error"
975
+ ]
976
+ },
977
+ unpublishTeamMemberProfile: {
978
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/unpublish",
979
+ method: "POST",
980
+ tags: [
981
+ "site-{siteId}",
982
+ "content-{siteId}-team-member",
983
+ "content-entry-{entryId}"
984
+ ],
985
+ auth: "user",
986
+ responseKind: "json",
987
+ errors: [
988
+ "validation:invalid_input",
989
+ "resource:not_found",
990
+ "resource:conflict",
991
+ "server:internal_error"
992
+ ]
993
+ },
994
+ scheduleTeamMemberProfile: {
995
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/schedule",
996
+ method: "POST",
997
+ tags: [
998
+ "site-{siteId}",
999
+ "content-{siteId}-team-member",
1000
+ "content-entry-{entryId}"
1001
+ ],
1002
+ auth: "user",
1003
+ responseKind: "json",
1004
+ errors: [
1005
+ "validation:invalid_input",
1006
+ "resource:not_found",
1007
+ "resource:conflict",
1008
+ "server:internal_error"
1009
+ ]
1010
+ },
1011
+ cancelScheduledTeamMemberProfile: {
1012
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/schedule",
1013
+ method: "DELETE",
1014
+ tags: [
1015
+ "site-{siteId}",
1016
+ "content-{siteId}-team-member",
1017
+ "content-entry-{entryId}"
1018
+ ],
1019
+ auth: "user",
1020
+ responseKind: "json",
1021
+ errors: [
1022
+ "validation:invalid_input",
1023
+ "resource:not_found",
1024
+ "resource:conflict",
1025
+ "server:internal_error"
1026
+ ]
1027
+ },
1028
+ updateTeamMemberProfileRouteMetadata: {
1029
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/routes/{routeId}/metadata",
1030
+ method: "PATCH",
1031
+ tags: [
1032
+ TAG_TEMPLATES.siteCollection,
1033
+ TAG_TEMPLATES.siteRoutableContent,
1034
+ TAG_TEMPLATES.routeById
1035
+ ],
1036
+ auth: "user",
1037
+ responseKind: "json",
1038
+ errors: [
1039
+ "validation:invalid_input",
1040
+ "resource:not_found",
1041
+ "resource:conflict",
1042
+ "server:internal_error"
1043
+ ]
1044
+ },
908
1045
  listAppointmentServices: {
909
1046
  path: "/sites/{siteId}/bookings/services",
910
1047
  method: "GET",
@@ -3278,6 +3415,15 @@ var ENDPOINT_DEFINITIONS = {
3278
3415
  auth: "public",
3279
3416
  responseKind: "json"
3280
3417
  },
3418
+ listPublicTeamMembers: {
3419
+ path: "/public/sites/{siteId}/team-members",
3420
+ method: "GET",
3421
+ revalidate: 60,
3422
+ tags: ["public-team-members-{siteId}"],
3423
+ errors: [],
3424
+ auth: "public",
3425
+ responseKind: "json"
3426
+ },
3281
3427
  getPublicCourse: {
3282
3428
  path: "/public/sites/{siteId}/courses/{courseId}",
3283
3429
  method: "GET",
@@ -6572,6 +6718,7 @@ var SUPPORTED_LOADER_ENDPOINTS = [
6572
6718
  "listPublicEvents",
6573
6719
  "getPublicEventDetails",
6574
6720
  "listPublicCourses",
6721
+ "listPublicTeamMembers",
6575
6722
  "listPublicProducts",
6576
6723
  "listPublicPasses",
6577
6724
  "listPublicMemberships",
@@ -15477,7 +15624,19 @@ var teamMemberFragment = defineFragment({
15477
15624
  bind("photo")
15478
15625
  )
15479
15626
  ]),
15480
- text({ as: "h3" }, bind("name")),
15627
+ link(
15628
+ {
15629
+ href: { $bind: { from: "profilePath" } },
15630
+ className: "rb-team-member-name-link"
15631
+ },
15632
+ [text({ as: "h3" }, bind("name"))],
15633
+ when("profilePath")
15634
+ ),
15635
+ text(
15636
+ { as: "h3" },
15637
+ when("profilePath", { not: true }),
15638
+ bind("name")
15639
+ ),
15481
15640
  text({ as: "p", className: "rb-team-member-role" }, when("role"), bind("role")),
15482
15641
  richText(
15483
15642
  { className: "rb-prose rb-max-w-none" },
@@ -19771,7 +19930,9 @@ var courseSessionSchema = z42.object({
19771
19930
  var courseTeamMemberSummarySchema = z42.object({
19772
19931
  id: z42.string(),
19773
19932
  name: z42.string(),
19774
- summary: z42.string().nullable()
19933
+ roleLabel: z42.string().nullable(),
19934
+ summary: z42.string().nullable(),
19935
+ profilePath: z42.string().nullable()
19775
19936
  });
19776
19937
  var coursePricingOptionSchema = z42.object({
19777
19938
  id: z42.string(),
@@ -19876,7 +20037,9 @@ var publicEventTicketTypeSchema = z43.object({
19876
20037
  var publicTeamMemberSummarySchema = z43.object({
19877
20038
  id: z43.string(),
19878
20039
  name: z43.string(),
19879
- summary: z43.string().nullable()
20040
+ roleLabel: z43.string().nullable(),
20041
+ summary: z43.string().nullable(),
20042
+ profilePath: z43.string().nullable()
19880
20043
  });
19881
20044
  var publicEventSchema = z43.object({
19882
20045
  kind: z43.enum(["event", "course_session"]).optional(),
@@ -25723,7 +25886,25 @@ var newsletterSignupBlockDefinition = {
25723
25886
  };
25724
25887
 
25725
25888
  // ../blocks/src/system/blocks/team-members.ts
25889
+ import { z as z61 } from "zod";
25726
25890
  var ITEM_NAME2 = "member";
25891
+ var teamMemberPhotoSchema = mediaSchema2.refine((media2) => media2.type === "image", {
25892
+ message: "Team member photos must be image media"
25893
+ }).nullable();
25894
+ var teamMemberDataSchema = z61.object({
25895
+ _type: z61.literal("teamMember"),
25896
+ id: z61.string(),
25897
+ name: z61.string(),
25898
+ role: z61.string().nullable(),
25899
+ roleLabel: z61.string().nullable(),
25900
+ bio: z61.string().nullable(),
25901
+ summary: z61.string().nullable(),
25902
+ photo: teamMemberPhotoSchema,
25903
+ profilePath: z61.string().nullable()
25904
+ });
25905
+ var teamMembersDataSchema = z61.array(teamMemberDataSchema);
25906
+ var dynamicSourceWhen = { equals: "site_staff" };
25907
+ var manualSourceWhen = { equals: "site_staff", not: true };
25727
25908
  var headingNode = text(
25728
25909
  { as: "h2" },
25729
25910
  bind("content.heading"),
@@ -25813,7 +25994,15 @@ var teamMemberStackLayout = el(
25813
25994
  ]
25814
25995
  ),
25815
25996
  stack({ gap: "sm", className: "rb-team-member-body rb-flex-1 rb-min-w-0" }, [
25816
- text({ as: "h3" }, bind("name")),
25997
+ link(
25998
+ {
25999
+ href: { $bind: { from: "profilePath" } },
26000
+ className: "rb-team-member-name-link"
26001
+ },
26002
+ [text({ as: "h3" }, bind("name"))],
26003
+ when("profilePath")
26004
+ ),
26005
+ text({ as: "h3" }, when("profilePath", { not: true }), bind("name")),
25817
26006
  text(
25818
26007
  { as: "p", className: "rb-team-member-role" },
25819
26008
  when("role"),
@@ -25827,12 +26016,18 @@ var teamMemberStackLayout = el(
25827
26016
  ])
25828
26017
  ]
25829
26018
  );
25830
- var gridMembersNode = repeaterFragmentLayout({
26019
+ var manualGridMembersNode = when("content.source", manualSourceWhen)(repeaterFragmentLayout({
25831
26020
  collectionPath: "content.members",
25832
26021
  itemName: ITEM_NAME2,
25833
26022
  fragments: { teamMember: teamMemberFragment },
25834
26023
  itemGap: "sm"
25835
- });
26024
+ }));
26025
+ var dynamicGridMembersNode = when("content.source", dynamicSourceWhen)(repeaterFragmentLayout({
26026
+ collectionPath: "data.members",
26027
+ itemName: ITEM_NAME2,
26028
+ fragments: { teamMember: teamMemberFragment },
26029
+ itemGap: "sm"
26030
+ }));
25836
26031
  var gridVariant = wrapVariant3(
25837
26032
  el(
25838
26033
  "grid",
@@ -25846,22 +26041,29 @@ var gridVariant = wrapVariant3(
25846
26041
  },
25847
26042
  gap: { $bind: { from: "content.gap", fallback: "medium" } }
25848
26043
  },
25849
- [gridMembersNode]
26044
+ [manualGridMembersNode, dynamicGridMembersNode]
25850
26045
  )
25851
26046
  );
25852
- var stackMembersNode = repeaterFragmentLayout({
26047
+ var manualStackMembersNode = when("content.source", manualSourceWhen)(repeaterFragmentLayout({
25853
26048
  collectionPath: "content.members",
25854
26049
  itemName: ITEM_NAME2,
25855
26050
  fragments: { teamMember: teamMemberFragment },
25856
26051
  layoutOverrides: { teamMember: teamMemberStackLayout },
25857
26052
  itemGap: "sm"
25858
- });
26053
+ }));
26054
+ var dynamicStackMembersNode = when("content.source", dynamicSourceWhen)(repeaterFragmentLayout({
26055
+ collectionPath: "data.members",
26056
+ itemName: ITEM_NAME2,
26057
+ fragments: { teamMember: teamMemberFragment },
26058
+ layoutOverrides: { teamMember: teamMemberStackLayout },
26059
+ itemGap: "sm"
26060
+ }));
25859
26061
  var stackVariant = wrapVariant3({
25860
26062
  type: "stack",
25861
26063
  props: {
25862
26064
  gap: { $bind: { from: "content.gap", fallback: "medium" } }
25863
26065
  },
25864
- children: [stackMembersNode]
26066
+ children: [manualStackMembersNode, dynamicStackMembersNode]
25865
26067
  });
25866
26068
  var teamMembersManifest = createBlockManifest({
25867
26069
  id: "block.team-members",
@@ -25876,6 +26078,18 @@ var teamMembersManifest = createBlockManifest({
25876
26078
  required: false,
25877
26079
  maxLength: 120
25878
26080
  }),
26081
+ parseFieldDefinition({
26082
+ id: "source",
26083
+ type: "select",
26084
+ label: "Team members",
26085
+ description: "Choose whether to use the site-wide team or a hand-picked list.",
26086
+ defaultValue: "manual",
26087
+ options: [
26088
+ { value: "manual", label: "Choose manually" },
26089
+ { value: "site_staff", label: "Use all site team members" }
26090
+ ],
26091
+ ui: { intent: "behavior" }
26092
+ }),
25879
26093
  parseFieldDefinition({
25880
26094
  id: "layoutAlign",
25881
26095
  type: "select",
@@ -25978,18 +26192,24 @@ var teamMembersManifest = createBlockManifest({
25978
26192
  ],
25979
26193
  ui: { intent: "display" }
25980
26194
  }),
25981
- fragmentsToRepeaterField(
25982
- "members",
25983
- "Team members",
25984
- { teamMember: teamMemberFragment },
25985
- {
25986
- minItems: 0,
25987
- maxItems: 50,
25988
- itemLabel: "Team member",
25989
- itemLabelSource: "name",
25990
- description: "Add people to this section."
26195
+ {
26196
+ ...fragmentsToRepeaterField(
26197
+ "members",
26198
+ "Team members",
26199
+ { teamMember: teamMemberFragment },
26200
+ {
26201
+ minItems: 0,
26202
+ maxItems: 50,
26203
+ itemLabel: "Team member",
26204
+ itemLabelSource: "name",
26205
+ description: "Add people to this section."
26206
+ }
26207
+ ),
26208
+ ui: {
26209
+ intent: "content",
26210
+ visibleWhen: { field: "source", equals: "manual" }
25991
26211
  }
25992
- )
26212
+ }
25993
26213
  ],
25994
26214
  layout: gridVariant,
25995
26215
  variants: {
@@ -26015,7 +26235,20 @@ var teamMembersManifest = createBlockManifest({
26015
26235
  styleTokens: { spacing: "lg" }
26016
26236
  });
26017
26237
  var teamMembersBlockDefinition = {
26018
- manifest: teamMembersManifest
26238
+ manifest: teamMembersManifest,
26239
+ dataSchemas: {
26240
+ members: teamMembersDataSchema
26241
+ },
26242
+ dataLoaders: {
26243
+ members: {
26244
+ endpoint: "listPublicTeamMembers",
26245
+ params: {
26246
+ siteId: { $bind: { from: "$root.siteId" } },
26247
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } }
26248
+ },
26249
+ mode: "server"
26250
+ }
26251
+ }
26019
26252
  };
26020
26253
 
26021
26254
  // ../blocks/src/system/runtime/nodes/location-map.shared.ts
@@ -27226,7 +27459,7 @@ var builtinTransformDefinitions = [
27226
27459
  var defaultTransforms = createTransformRegistry(builtinTransformDefinitions);
27227
27460
 
27228
27461
  // src/config/content-validation.ts
27229
- import { z as z61 } from "zod";
27462
+ import { z as z62 } from "zod";
27230
27463
 
27231
27464
  // src/types/block-kinds.ts
27232
27465
  var SYSTEM_BLOCK_KINDS = [
@@ -27366,32 +27599,32 @@ function describeInvalidBindingTransform(transform) {
27366
27599
  }
27367
27600
 
27368
27601
  // src/config/content-validation.ts
27369
- var jsonDataSchema = z61.record(z61.string(), z61.any());
27370
- var contentTypeKeySchema = z61.string().min(1).regex(
27602
+ var jsonDataSchema = z62.record(z62.string(), z62.any());
27603
+ var contentTypeKeySchema = z62.string().min(1).regex(
27371
27604
  /^[a-z][a-z0-9-]*$/,
27372
27605
  "Key must be lowercase, start with a letter, and contain only letters, numbers, and hyphens"
27373
27606
  );
27374
- var templateConfigSchemaForward = z61.object({
27375
- blocks: z61.array(
27376
- z61.object({
27377
- identifier: z61.string().min(1),
27378
- kind: z61.string(),
27379
- scope: z61.enum(["entry", "template"]),
27380
- bindings: z61.record(z61.string(), z61.any()).optional(),
27381
- content: z61.record(z61.string(), z61.any()).optional()
27607
+ var templateConfigSchemaForward = z62.object({
27608
+ blocks: z62.array(
27609
+ z62.object({
27610
+ identifier: z62.string().min(1),
27611
+ kind: z62.string(),
27612
+ scope: z62.enum(["entry", "template"]),
27613
+ bindings: z62.record(z62.string(), z62.any()).optional(),
27614
+ content: z62.record(z62.string(), z62.any()).optional()
27382
27615
  })
27383
27616
  )
27384
27617
  }).optional();
27385
- var contentTypeConfigSchema = z61.object({
27618
+ var contentTypeConfigSchema = z62.object({
27386
27619
  key: contentTypeKeySchema,
27387
- name: z61.string().min(1),
27388
- description: z61.string().optional(),
27389
- hasPages: z61.boolean(),
27390
- routePattern: z61.string().optional(),
27620
+ name: z62.string().min(1),
27621
+ description: z62.string().optional(),
27622
+ hasPages: z62.boolean(),
27623
+ routePattern: z62.string().optional(),
27391
27624
  // Fields are validated as unknown[] here - deep field validation happens in @riverbankcms/blocks
27392
- fields: z61.array(z61.any()).min(1, "At least one field is required"),
27393
- titleField: z61.string().optional(),
27394
- isSingleton: z61.boolean().optional().default(false),
27625
+ fields: z62.array(z62.any()).min(1, "At least one field is required"),
27626
+ titleField: z62.string().optional(),
27627
+ isSingleton: z62.boolean().optional().default(false),
27395
27628
  template: templateConfigSchemaForward
27396
27629
  }).refine(
27397
27630
  (data) => {
@@ -27413,7 +27646,7 @@ var contentTypeConfigSchema = z61.object({
27413
27646
  }
27414
27647
  if (!data.routePattern) {
27415
27648
  ctx.addIssue({
27416
- code: z61.ZodIssueCode.custom,
27649
+ code: z62.ZodIssueCode.custom,
27417
27650
  path: ["routePattern"],
27418
27651
  message: "routePattern is required when hasPages is true. Non-singleton types must include {slug} placeholder."
27419
27652
  });
@@ -27422,7 +27655,7 @@ var contentTypeConfigSchema = z61.object({
27422
27655
  const parseResult = safeParseRouteTemplate(data.routePattern);
27423
27656
  if (!parseResult.success) {
27424
27657
  ctx.addIssue({
27425
- code: z61.ZodIssueCode.custom,
27658
+ code: z62.ZodIssueCode.custom,
27426
27659
  path: ["routePattern"],
27427
27660
  message: describeRouteTemplateParseError(parseResult.error)
27428
27661
  });
@@ -27430,44 +27663,44 @@ var contentTypeConfigSchema = z61.object({
27430
27663
  }
27431
27664
  if (!data.isSingleton && parseResult.routeTemplate.kind !== "slug-template") {
27432
27665
  ctx.addIssue({
27433
- code: z61.ZodIssueCode.custom,
27666
+ code: z62.ZodIssueCode.custom,
27434
27667
  path: ["routePattern"],
27435
27668
  message: "routePattern is required when hasPages is true. Non-singleton types must include {slug} placeholder."
27436
27669
  });
27437
27670
  }
27438
27671
  });
27439
- var fieldBindingSchema = z61.object({
27440
- source: z61.literal("field"),
27441
- path: z61.string().min(1, "Field path is required")
27672
+ var fieldBindingSchema = z62.object({
27673
+ source: z62.literal("field"),
27674
+ path: z62.string().min(1, "Field path is required")
27442
27675
  });
27443
- var metaBindingSchema = z61.object({
27444
- source: z61.literal("meta"),
27445
- path: z61.enum(TEMPLATE_BINDING_META_PATHS, {
27676
+ var metaBindingSchema = z62.object({
27677
+ source: z62.literal("meta"),
27678
+ path: z62.enum(TEMPLATE_BINDING_META_PATHS, {
27446
27679
  error: (issue) => describeInvalidTemplateBindingMetaPath(String(issue.input))
27447
27680
  })
27448
27681
  });
27449
- var literalBindingSchema = z61.object({
27450
- source: z61.literal("literal"),
27451
- value: z61.unknown()
27682
+ var literalBindingSchema = z62.object({
27683
+ source: z62.literal("literal"),
27684
+ value: z62.unknown()
27452
27685
  });
27453
- var transformBindingSchema = z61.object({
27454
- source: z61.literal("transform"),
27455
- path: z61.string().min(1, "Transform path is required"),
27456
- transform: z61.enum(BINDING_TRANSFORM_VALUES, {
27686
+ var transformBindingSchema = z62.object({
27687
+ source: z62.literal("transform"),
27688
+ path: z62.string().min(1, "Transform path is required"),
27689
+ transform: z62.enum(BINDING_TRANSFORM_VALUES, {
27457
27690
  error: (issue) => describeInvalidBindingTransform(String(issue.input))
27458
27691
  })
27459
27692
  });
27460
- var baseBindingSchema = z61.discriminatedUnion("source", [
27693
+ var baseBindingSchema = z62.discriminatedUnion("source", [
27461
27694
  fieldBindingSchema,
27462
27695
  metaBindingSchema,
27463
27696
  literalBindingSchema,
27464
27697
  transformBindingSchema
27465
27698
  ]);
27466
- var fallbackBindingSchema = z61.object({
27467
- source: z61.literal("fallback"),
27468
- sources: z61.array(z61.lazy(() => bindingSourceSchema)).min(1, "Fallback must have at least one source")
27699
+ var fallbackBindingSchema = z62.object({
27700
+ source: z62.literal("fallback"),
27701
+ sources: z62.array(z62.lazy(() => bindingSourceSchema)).min(1, "Fallback must have at least one source")
27469
27702
  });
27470
- var bindingSourceSchema = z61.union([
27703
+ var bindingSourceSchema = z62.union([
27471
27704
  baseBindingSchema,
27472
27705
  fallbackBindingSchema
27473
27706
  ]);
@@ -27481,12 +27714,12 @@ function isValidBlockKind(kind) {
27481
27714
  return false;
27482
27715
  }
27483
27716
  var BLOCK_KIND_ERROR_MESSAGE = 'Block kind must be a system block (e.g., "block.hero") or a custom block (e.g., "custom.myBlock")';
27484
- var blockKindSchema = z61.string().refine(isValidBlockKind, { message: BLOCK_KIND_ERROR_MESSAGE });
27485
- var templateBlockConfigSchema = z61.object({
27486
- identifier: z61.string().min(1, "Block identifier is required"),
27717
+ var blockKindSchema = z62.string().refine(isValidBlockKind, { message: BLOCK_KIND_ERROR_MESSAGE });
27718
+ var templateBlockConfigSchema = z62.object({
27719
+ identifier: z62.string().min(1, "Block identifier is required"),
27487
27720
  kind: blockKindSchema,
27488
- scope: z61.enum(["entry", "template"]),
27489
- bindings: z61.record(z61.string(), bindingSourceSchema).optional(),
27721
+ scope: z62.enum(["entry", "template"]),
27722
+ bindings: z62.record(z62.string(), bindingSourceSchema).optional(),
27490
27723
  content: jsonDataSchema.optional()
27491
27724
  }).refine(
27492
27725
  (data) => {
@@ -27505,8 +27738,8 @@ var templateBlockConfigSchema = z61.object({
27505
27738
  },
27506
27739
  { message: "Template-scoped blocks should define static content, not bindings" }
27507
27740
  );
27508
- var templateConfigSchema = z61.object({
27509
- blocks: z61.array(templateBlockConfigSchema).min(1, "Template must have at least one block")
27741
+ var templateConfigSchema = z62.object({
27742
+ blocks: z62.array(templateBlockConfigSchema).min(1, "Template must have at least one block")
27510
27743
  }).refine(
27511
27744
  (data) => {
27512
27745
  const identifiers = data.blocks.map((b) => b.identifier);
@@ -27515,77 +27748,77 @@ var templateConfigSchema = z61.object({
27515
27748
  },
27516
27749
  { message: "Template block identifiers must be unique" }
27517
27750
  );
27518
- var blockConfigSchema = z61.object({
27751
+ var blockConfigSchema = z62.object({
27519
27752
  kind: blockKindSchema,
27520
27753
  content: jsonDataSchema,
27521
- orderIndex: z61.number().optional()
27522
- });
27523
- var pageConfigSchema = z61.object({
27524
- identifier: z61.string().min(1, "Identifier is required"),
27525
- title: z61.string().min(1, "Title is required"),
27526
- path: z61.string().regex(/^\//, "Path must start with /"),
27527
- purpose: z61.string().default("content"),
27528
- blocks: z61.array(blockConfigSchema).optional(),
27529
- status: z61.enum(["draft", "published"]).default("draft"),
27530
- metaTitle: z61.string().optional(),
27531
- metaDescription: z61.string().optional()
27532
- });
27533
- var entryConfigSchema = z61.object({
27534
- identifier: z61.string().min(1, "Identifier is required"),
27535
- contentType: z61.string().min(1, "Content type is required"),
27754
+ orderIndex: z62.number().optional()
27755
+ });
27756
+ var pageConfigSchema = z62.object({
27757
+ identifier: z62.string().min(1, "Identifier is required"),
27758
+ title: z62.string().min(1, "Title is required"),
27759
+ path: z62.string().regex(/^\//, "Path must start with /"),
27760
+ purpose: z62.string().default("content"),
27761
+ blocks: z62.array(blockConfigSchema).optional(),
27762
+ status: z62.enum(["draft", "published"]).default("draft"),
27763
+ metaTitle: z62.string().optional(),
27764
+ metaDescription: z62.string().optional()
27765
+ });
27766
+ var entryConfigSchema = z62.object({
27767
+ identifier: z62.string().min(1, "Identifier is required"),
27768
+ contentType: z62.string().min(1, "Content type is required"),
27536
27769
  data: jsonDataSchema,
27537
- status: z61.enum(["draft", "published"]).default("draft"),
27538
- slug: z61.string().optional(),
27539
- summary: z61.string().optional(),
27770
+ status: z62.enum(["draft", "published"]).default("draft"),
27771
+ slug: z62.string().optional(),
27772
+ summary: z62.string().optional(),
27540
27773
  // Hard remove legacy config-only titles: titles must live in entry `data`.
27541
- title: z61.any().optional().refine((value) => value === void 0, {
27774
+ title: z62.any().optional().refine((value) => value === void 0, {
27542
27775
  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."
27543
27776
  }),
27544
- metaTitle: z61.string().optional(),
27545
- metaDescription: z61.string().optional()
27777
+ metaTitle: z62.string().optional(),
27778
+ metaDescription: z62.string().optional()
27546
27779
  });
27547
- var dropdownLinkSchema = z61.object({
27548
- kind: z61.literal("dropdown")
27780
+ var dropdownLinkSchema = z62.object({
27781
+ kind: z62.literal("dropdown")
27549
27782
  });
27550
- var navigationLinkSchema = z61.discriminatedUnion("kind", [
27783
+ var navigationLinkSchema = z62.discriminatedUnion("kind", [
27551
27784
  ...navigationLinkInputSchemaOptions,
27552
27785
  dropdownLinkSchema
27553
27786
  ]);
27554
- var baseNavigationItemSchema = z61.object({
27555
- label: z61.string().min(1, "Label is required"),
27787
+ var baseNavigationItemSchema = z62.object({
27788
+ label: z62.string().min(1, "Label is required"),
27556
27789
  link: navigationLinkSchema,
27557
- isCta: z61.boolean().optional()
27790
+ isCta: z62.boolean().optional()
27558
27791
  });
27559
27792
  var navigationItemConfigSchema = baseNavigationItemSchema.extend({
27560
- children: z61.lazy(() => z61.array(navigationItemConfigSchema)).optional()
27561
- });
27562
- var navigationMenuConfigSchema = z61.object({
27563
- identifier: z61.string().min(1, "Identifier is required"),
27564
- name: z61.string().min(1, "Name is required"),
27565
- isPrimary: z61.boolean().optional(),
27566
- isFooter: z61.boolean().optional(),
27567
- items: z61.array(navigationItemConfigSchema)
27793
+ children: z62.lazy(() => z62.array(navigationItemConfigSchema)).optional()
27794
+ });
27795
+ var navigationMenuConfigSchema = z62.object({
27796
+ identifier: z62.string().min(1, "Identifier is required"),
27797
+ name: z62.string().min(1, "Name is required"),
27798
+ isPrimary: z62.boolean().optional(),
27799
+ isFooter: z62.boolean().optional(),
27800
+ items: z62.array(navigationItemConfigSchema)
27568
27801
  }).superRefine((menu, ctx) => {
27569
27802
  const portalStats = collectPortalLinkStats(
27570
27803
  menu.items
27571
27804
  );
27572
27805
  if (portalStats.count > 1) {
27573
27806
  ctx.addIssue({
27574
- code: z61.ZodIssueCode.custom,
27807
+ code: z62.ZodIssueCode.custom,
27575
27808
  message: "Only one portal link is allowed per navigation menu",
27576
27809
  path: ["items"]
27577
27810
  });
27578
27811
  }
27579
27812
  if (portalStats.nestedLabels.length > 0) {
27580
27813
  ctx.addIssue({
27581
- code: z61.ZodIssueCode.custom,
27814
+ code: z62.ZodIssueCode.custom,
27582
27815
  message: `Portal links must be root-level items: ${portalStats.nestedLabels.join(", ")}`,
27583
27816
  path: ["items"]
27584
27817
  });
27585
27818
  }
27586
27819
  if (portalStats.withChildrenLabels.length > 0) {
27587
27820
  ctx.addIssue({
27588
- code: z61.ZodIssueCode.custom,
27821
+ code: z62.ZodIssueCode.custom,
27589
27822
  message: `Portal links cannot contain child items: ${portalStats.withChildrenLabels.join(", ")}`,
27590
27823
  path: ["items"]
27591
27824
  });
@@ -27595,44 +27828,44 @@ var navigationMenuConfigSchema = z61.object({
27595
27828
  );
27596
27829
  if (cartStats.nestedLabels.length > 0) {
27597
27830
  ctx.addIssue({
27598
- code: z61.ZodIssueCode.custom,
27831
+ code: z62.ZodIssueCode.custom,
27599
27832
  message: `Cart links must be root-level items: ${cartStats.nestedLabels.join(", ")}`,
27600
27833
  path: ["items"]
27601
27834
  });
27602
27835
  }
27603
27836
  if (cartStats.withChildrenLabels.length > 0) {
27604
27837
  ctx.addIssue({
27605
- code: z61.ZodIssueCode.custom,
27838
+ code: z62.ZodIssueCode.custom,
27606
27839
  message: `Cart links cannot contain child items: ${cartStats.withChildrenLabels.join(", ")}`,
27607
27840
  path: ["items"]
27608
27841
  });
27609
27842
  }
27610
27843
  if (cartStats.ctaLabels.length > 0) {
27611
27844
  ctx.addIssue({
27612
- code: z61.ZodIssueCode.custom,
27845
+ code: z62.ZodIssueCode.custom,
27613
27846
  message: `Cart links cannot be marked as CTA: ${cartStats.ctaLabels.join(", ")}`,
27614
27847
  path: ["items"]
27615
27848
  });
27616
27849
  }
27617
27850
  if (cartStats.missingVisibleTextLabels.length > 0) {
27618
27851
  ctx.addIssue({
27619
- code: z61.ZodIssueCode.custom,
27852
+ code: z62.ZodIssueCode.custom,
27620
27853
  message: `Cart links with icon-with-label must provide a visible label: ${cartStats.missingVisibleTextLabels.join(", ")}`,
27621
27854
  path: ["items"]
27622
27855
  });
27623
27856
  }
27624
27857
  });
27625
- var siteSettingsConfigSchema = z61.object({
27626
- homepagePath: z61.string().optional(),
27627
- siteTitle: z61.string().optional(),
27628
- siteDescription: z61.string().optional(),
27629
- defaultTemplates: z61.record(z61.string(), z61.string()).optional()
27858
+ var siteSettingsConfigSchema = z62.object({
27859
+ homepagePath: z62.string().optional(),
27860
+ siteTitle: z62.string().optional(),
27861
+ siteDescription: z62.string().optional(),
27862
+ defaultTemplates: z62.record(z62.string(), z62.string()).optional()
27630
27863
  });
27631
- var contentConfigBaseSchema = z61.object({
27632
- contentTypes: z61.array(contentTypeConfigSchema).optional(),
27633
- entries: z61.array(entryConfigSchema).optional(),
27634
- pages: z61.array(pageConfigSchema).optional(),
27635
- navigationMenus: z61.array(navigationMenuConfigSchema).optional(),
27864
+ var contentConfigBaseSchema = z62.object({
27865
+ contentTypes: z62.array(contentTypeConfigSchema).optional(),
27866
+ entries: z62.array(entryConfigSchema).optional(),
27867
+ pages: z62.array(pageConfigSchema).optional(),
27868
+ navigationMenus: z62.array(navigationMenuConfigSchema).optional(),
27636
27869
  settings: siteSettingsConfigSchema.optional()
27637
27870
  });
27638
27871
  var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
@@ -27641,7 +27874,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
27641
27874
  const duplicateKeys = keys.filter((key, i) => keys.indexOf(key) !== i);
27642
27875
  if (duplicateKeys.length > 0) {
27643
27876
  ctx.addIssue({
27644
- code: z61.ZodIssueCode.custom,
27877
+ code: z62.ZodIssueCode.custom,
27645
27878
  message: `Content type keys must be unique. Duplicates: ${duplicateKeys.join(", ")}`,
27646
27879
  path: ["contentTypes"]
27647
27880
  });
@@ -27652,7 +27885,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
27652
27885
  const duplicateIds = identifiers.filter((id, i) => identifiers.indexOf(id) !== i);
27653
27886
  if (duplicateIds.length > 0) {
27654
27887
  ctx.addIssue({
27655
- code: z61.ZodIssueCode.custom,
27888
+ code: z62.ZodIssueCode.custom,
27656
27889
  message: `Page identifiers must be unique. Duplicates: ${duplicateIds.join(", ")}`,
27657
27890
  path: ["pages"]
27658
27891
  });
@@ -27661,7 +27894,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
27661
27894
  const duplicatePaths = paths.filter((path, i) => paths.indexOf(path) !== i);
27662
27895
  if (duplicatePaths.length > 0) {
27663
27896
  ctx.addIssue({
27664
- code: z61.ZodIssueCode.custom,
27897
+ code: z62.ZodIssueCode.custom,
27665
27898
  message: `Page paths must be unique. Duplicates: ${duplicatePaths.join(", ")}`,
27666
27899
  path: ["pages"]
27667
27900
  });
@@ -27672,7 +27905,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
27672
27905
  const duplicateIds = identifiers.filter((id, i) => identifiers.indexOf(id) !== i);
27673
27906
  if (duplicateIds.length > 0) {
27674
27907
  ctx.addIssue({
27675
- code: z61.ZodIssueCode.custom,
27908
+ code: z62.ZodIssueCode.custom,
27676
27909
  message: `Entry identifiers must be unique. Duplicates: ${duplicateIds.join(", ")}`,
27677
27910
  path: ["entries"]
27678
27911
  });
@@ -27683,7 +27916,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
27683
27916
  const duplicateIds = identifiers.filter((id, i) => identifiers.indexOf(id) !== i);
27684
27917
  if (duplicateIds.length > 0) {
27685
27918
  ctx.addIssue({
27686
- code: z61.ZodIssueCode.custom,
27919
+ code: z62.ZodIssueCode.custom,
27687
27920
  message: `Navigation menu identifiers must be unique. Duplicates: ${duplicateIds.join(", ")}`,
27688
27921
  path: ["navigationMenus"]
27689
27922
  });
@@ -27697,7 +27930,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
27697
27930
  const entriesForType = data.entries.filter((e) => e.contentType === singletonKey);
27698
27931
  if (entriesForType.length > 1) {
27699
27932
  ctx.addIssue({
27700
- code: z61.ZodIssueCode.custom,
27933
+ code: z62.ZodIssueCode.custom,
27701
27934
  message: `Singleton content type "${singletonKey}" cannot have more than one entry. Found ${entriesForType.length} entries.`,
27702
27935
  path: ["entries"]
27703
27936
  });
@@ -27810,18 +28043,18 @@ function validateLayout(layout) {
27810
28043
  }
27811
28044
 
27812
28045
  // src/config/dashboard-validation.ts
27813
- import { z as z62 } from "zod";
27814
- var navIdListSchema2 = z62.preprocess((value) => {
28046
+ import { z as z63 } from "zod";
28047
+ var navIdListSchema2 = z63.preprocess((value) => {
27815
28048
  if (!Array.isArray(value)) return void 0;
27816
28049
  const filtered = value.filter((v) => typeof v === "string" && v.trim().length > 0);
27817
28050
  return filtered.length > 0 ? filtered : void 0;
27818
- }, z62.array(z62.string()).max(200, "Maximum 200 nav IDs").optional());
27819
- var dashboardNavVisibilityBaseSchema2 = z62.object({
27820
- mode: z62.enum(["augment", "restrict"]).optional(),
28051
+ }, z63.array(z63.string()).max(200, "Maximum 200 nav IDs").optional());
28052
+ var dashboardNavVisibilityBaseSchema2 = z63.object({
28053
+ mode: z63.enum(["augment", "restrict"]).optional(),
27821
28054
  allowIds: navIdListSchema2,
27822
28055
  denyIds: navIdListSchema2
27823
28056
  }).strip();
27824
- var dashboardNavVisibilityRolesSchema2 = z62.object({
28057
+ var dashboardNavVisibilityRolesSchema2 = z63.object({
27825
28058
  administrator: dashboardNavVisibilityBaseSchema2.optional(),
27826
28059
  editor: dashboardNavVisibilityBaseSchema2.optional(),
27827
28060
  team_member: dashboardNavVisibilityBaseSchema2.optional(),
@@ -27830,20 +28063,20 @@ var dashboardNavVisibilityRolesSchema2 = z62.object({
27830
28063
  var dashboardNavVisibilitySchema2 = dashboardNavVisibilityBaseSchema2.extend({
27831
28064
  roles: dashboardNavVisibilityRolesSchema2
27832
28065
  }).strip();
27833
- var dashboardNavigationConfigSchema2 = z62.object({
28066
+ var dashboardNavigationConfigSchema2 = z63.object({
27834
28067
  siteNav: dashboardNavVisibilitySchema2.optional(),
27835
28068
  settingsNav: dashboardNavVisibilitySchema2.optional()
27836
28069
  }).strip();
27837
- var dashboardConfigSchema2 = z62.object({
27838
- previewEditingEnabled: z62.boolean().optional(),
28070
+ var dashboardConfigSchema2 = z63.object({
28071
+ previewEditingEnabled: z63.boolean().optional(),
27839
28072
  navigation: dashboardNavigationConfigSchema2.optional()
27840
28073
  }).strip();
27841
28074
 
27842
28075
  // src/zod/titleSourceSchema.ts
27843
- import { z as z63 } from "zod";
27844
- var titleSourceValueSchema = z63.union([
27845
- z63.string().min(1),
27846
- z63.array(z63.string().min(1)).min(1)
28076
+ import { z as z64 } from "zod";
28077
+ var titleSourceValueSchema = z64.union([
28078
+ z64.string().min(1),
28079
+ z64.array(z64.string().min(1)).min(1)
27847
28080
  ]);
27848
28081
 
27849
28082
  // src/data/prefetchBlockData.ts
@@ -27852,6 +28085,7 @@ var SUPPORTED_LOADER_ENDPOINTS2 = [
27852
28085
  "getPublishedEntryPreview",
27853
28086
  "listPublicEvents",
27854
28087
  "listPublicCourses",
28088
+ "listPublicTeamMembers",
27855
28089
  "listPublicProducts",
27856
28090
  "listPublicPasses",
27857
28091
  "listPublicMemberships",
@@ -27861,11 +28095,11 @@ var SUPPORTED_LOADER_ENDPOINTS2 = [
27861
28095
  ];
27862
28096
 
27863
28097
  // src/config/validation.ts
27864
- var sdkThemePaletteSchema2 = z64.record(z64.string(), z64.string());
27865
- var sdkThemeConfigSchema2 = z64.object({
28098
+ var sdkThemePaletteSchema2 = z65.record(z65.string(), z65.string());
28099
+ var sdkThemeConfigSchema2 = z65.object({
27866
28100
  palette: sdkThemePaletteSchema2
27867
28101
  });
27868
- var sdkSiteUrlSchema = z64.string().url("Must be a valid URL").refine((url) => {
28102
+ var sdkSiteUrlSchema = z65.string().url("Must be a valid URL").refine((url) => {
27869
28103
  try {
27870
28104
  const parsed = new URL(url);
27871
28105
  const isLocal = parsed.hostname === "localhost" || parsed.hostname.endsWith(".localhost") || parsed.hostname.endsWith(".local") || parsed.hostname.endsWith(".test");
@@ -27874,97 +28108,97 @@ var sdkSiteUrlSchema = z64.string().url("Must be a valid URL").refine((url) => {
27874
28108
  return false;
27875
28109
  }
27876
28110
  }, { message: "Production URLs must use HTTPS" }).transform((url) => url.replace(/\/$/, ""));
27877
- var sectionBackgroundSchema = z64.object({
27878
- id: z64.string(),
27879
- label: z64.string(),
27880
- token: z64.string()
28111
+ var sectionBackgroundSchema = z65.object({
28112
+ id: z65.string(),
28113
+ label: z65.string(),
28114
+ token: z65.string()
27881
28115
  // Reference to theme palette token
27882
28116
  });
27883
- var sectionSpacingSchema = z64.enum(["compact", "default", "spacious"]);
27884
- var containerMaxWidthSchema = z64.enum(["narrow", "default", "wide", "full"]);
27885
- var containerAlignmentSchema = z64.enum(["left", "center", "right"]);
27886
- var sectionOptionsSchema = z64.object({
27887
- backgroundColor: z64.boolean().optional(),
27888
- backgroundImage: z64.boolean().optional(),
27889
- backgroundGradient: z64.boolean().optional(),
27890
- spacing: z64.union([
27891
- z64.array(sectionSpacingSchema),
27892
- z64.boolean()
28117
+ var sectionSpacingSchema = z65.enum(["compact", "default", "spacious"]);
28118
+ var containerMaxWidthSchema = z65.enum(["narrow", "default", "wide", "full"]);
28119
+ var containerAlignmentSchema = z65.enum(["left", "center", "right"]);
28120
+ var sectionOptionsSchema = z65.object({
28121
+ backgroundColor: z65.boolean().optional(),
28122
+ backgroundImage: z65.boolean().optional(),
28123
+ backgroundGradient: z65.boolean().optional(),
28124
+ spacing: z65.union([
28125
+ z65.array(sectionSpacingSchema),
28126
+ z65.boolean()
27893
28127
  ]).optional(),
27894
- textColor: z64.boolean().optional()
28128
+ textColor: z65.boolean().optional()
27895
28129
  }).optional();
27896
- var containerOptionsSchema = z64.object({
27897
- maxWidth: z64.union([
27898
- z64.array(containerMaxWidthSchema),
27899
- z64.boolean()
28130
+ var containerOptionsSchema = z65.object({
28131
+ maxWidth: z65.union([
28132
+ z65.array(containerMaxWidthSchema),
28133
+ z65.boolean()
27900
28134
  ]).optional(),
27901
- alignment: z64.union([
27902
- z64.array(containerAlignmentSchema),
27903
- z64.boolean()
28135
+ alignment: z65.union([
28136
+ z65.array(containerAlignmentSchema),
28137
+ z65.boolean()
27904
28138
  ]).optional()
27905
28139
  }).optional();
27906
- var siteStyleConfigSchema = z64.object({
27907
- sectionBackgrounds: z64.array(sectionBackgroundSchema).optional(),
28140
+ var siteStyleConfigSchema = z65.object({
28141
+ sectionBackgrounds: z65.array(sectionBackgroundSchema).optional(),
27908
28142
  sectionOptions: sectionOptionsSchema,
27909
28143
  containerOptions: containerOptionsSchema
27910
28144
  }).optional();
27911
- var sdkLoaderEndpointSchema2 = z64.enum(SUPPORTED_LOADER_ENDPOINTS2);
28145
+ var sdkLoaderEndpointSchema2 = z65.enum(SUPPORTED_LOADER_ENDPOINTS2);
27912
28146
  var allowedTransformIds = new Set(builtinTransformDefinitions.map((transform) => transform.id));
27913
- var loaderTransformStepSchema = z64.object({
27914
- id: z64.string().refine((id) => allowedTransformIds.has(id), {
28147
+ var loaderTransformStepSchema = z65.object({
28148
+ id: z65.string().refine((id) => allowedTransformIds.has(id), {
27915
28149
  message: "Unknown transform id"
27916
28150
  }),
27917
- options: z64.record(z64.string(), z64.unknown()).optional()
28151
+ options: z65.record(z65.string(), z65.unknown()).optional()
27918
28152
  });
27919
- var loaderParamBindingSchema2 = z64.object({
27920
- $bind: z64.object({
27921
- from: z64.string().min(1, "Binding path is required"),
28153
+ var loaderParamBindingSchema2 = z65.object({
28154
+ $bind: z65.object({
28155
+ from: z65.string().min(1, "Binding path is required"),
27922
28156
  // Loader params are ultimately string-normalized for query strings, so fallbacks should
27923
28157
  // stay scalar. Use transforms (e.g. `value.jsonArray`) when you need to serialize
27924
28158
  // more complex values into a string.
27925
- fallback: z64.union([z64.string(), z64.number(), z64.boolean(), z64.null()]).optional(),
27926
- transforms: z64.array(loaderTransformStepSchema).default([]),
27927
- pick: z64.enum(["value", "collection", "context"]).default("value"),
27928
- coerce: z64.enum(["number", "boolean", "string"]).optional()
28159
+ fallback: z65.union([z65.string(), z65.number(), z65.boolean(), z65.null()]).optional(),
28160
+ transforms: z65.array(loaderTransformStepSchema).default([]),
28161
+ pick: z65.enum(["value", "collection", "context"]).default("value"),
28162
+ coerce: z65.enum(["number", "boolean", "string"]).optional()
27929
28163
  })
27930
28164
  });
27931
- var loaderParamValueSchema2 = z64.union([
27932
- z64.string(),
27933
- z64.number(),
27934
- z64.boolean(),
28165
+ var loaderParamValueSchema2 = z65.union([
28166
+ z65.string(),
28167
+ z65.number(),
28168
+ z65.boolean(),
27935
28169
  loaderParamBindingSchema2
27936
28170
  ]);
27937
- var loaderWhenValueSchema = z64.union([
27938
- z64.boolean(),
28171
+ var loaderWhenValueSchema = z65.union([
28172
+ z65.boolean(),
27939
28173
  loaderParamBindingSchema2
27940
28174
  ]);
27941
- var sdkConfigLoaderSchema2 = z64.object({
28175
+ var sdkConfigLoaderSchema2 = z65.object({
27942
28176
  endpoint: sdkLoaderEndpointSchema2,
27943
- params: z64.record(z64.string(), loaderParamValueSchema2),
27944
- mode: z64.enum(["server", "client"]).default("server"),
28177
+ params: z65.record(z65.string(), loaderParamValueSchema2),
28178
+ mode: z65.enum(["server", "client"]).default("server"),
27945
28179
  when: loaderWhenValueSchema.optional()
27946
28180
  });
27947
- var sdkDataLoadersSchema2 = z64.record(z64.string(), sdkConfigLoaderSchema2).refine(
28181
+ var sdkDataLoadersSchema2 = z65.record(z65.string(), sdkConfigLoaderSchema2).refine(
27948
28182
  (loaders) => Object.keys(loaders).length <= 5,
27949
28183
  { message: "Maximum 5 data loaders per block" }
27950
28184
  ).optional();
27951
- var fieldSelectOptionSchema = z64.object({
27952
- value: z64.string().min(1, "Option value is required"),
27953
- label: z64.string().min(1, "Option label is required")
28185
+ var fieldSelectOptionSchema = z65.object({
28186
+ value: z65.string().min(1, "Option value is required"),
28187
+ label: z65.string().min(1, "Option label is required")
27954
28188
  });
27955
- var blockFieldConfigSchema = z64.object({
27956
- options: z64.array(fieldSelectOptionSchema).min(1, "At least one option is required").optional()
28189
+ var blockFieldConfigSchema = z65.object({
28190
+ options: z65.array(fieldSelectOptionSchema).min(1, "At least one option is required").optional()
27957
28191
  });
27958
- var blockFieldOptionsSchema = z64.record(
27959
- z64.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
28192
+ var blockFieldOptionsSchema = z65.record(
28193
+ z65.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
27960
28194
  message: "Block ID must be 'block.*' or 'custom.*' format"
27961
28195
  }),
27962
- z64.record(
27963
- z64.string().min(1, "Field ID is required"),
28196
+ z65.record(
28197
+ z65.string().min(1, "Field ID is required"),
27964
28198
  blockFieldConfigSchema
27965
28199
  )
27966
28200
  ).optional();
27967
- var blockFieldExtensionSchema = z64.object({
28201
+ var blockFieldExtensionSchema = z65.object({
27968
28202
  fields: fieldSchema.array().min(1, "At least one field is required")
27969
28203
  }).refine(
27970
28204
  (data) => {
@@ -27978,32 +28212,32 @@ var blockFieldExtensionSchema = z64.object({
27978
28212
  message: "Required fields must have a defaultValue to support existing blocks"
27979
28213
  }
27980
28214
  );
27981
- var blockFieldExtensionsSchema = z64.record(
28215
+ var blockFieldExtensionsSchema = z65.record(
27982
28216
  // System blocks are kebab-case: block.body-text, block.event-calendar, ...
27983
28217
  // Enforce: lowercase alphanumerics with single hyphens (no trailing hyphen, no consecutive hyphens).
27984
- z64.string().regex(/^block\.[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/, {
28218
+ z65.string().regex(/^block\.[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/, {
27985
28219
  message: "Block ID must be 'block.*' format (system blocks only)"
27986
28220
  }),
27987
28221
  blockFieldExtensionSchema
27988
28222
  ).optional();
27989
- var syncConfigSchema = z64.object({
27990
- existingEntries: z64.enum(["skip", "update"]).optional()
28223
+ var syncConfigSchema = z65.object({
28224
+ existingEntries: z65.enum(["skip", "update"]).optional()
27991
28225
  }).optional();
27992
- var deployConfigSchema = z64.object({
27993
- verifyCommand: z64.string().optional(),
27994
- prebuildOutput: z64.string().optional()
28226
+ var deployConfigSchema = z65.object({
28227
+ verifyCommand: z65.string().optional(),
28228
+ prebuildOutput: z65.string().optional()
27995
28229
  }).optional();
27996
- var sdkCustomBlockSchema = z64.object({
28230
+ var sdkCustomBlockSchema = z65.object({
27997
28231
  // Block ID must start with 'custom.'
27998
- id: z64.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
28232
+ id: z65.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
27999
28233
  message: "Block ID must start with 'custom.' followed by lowercase letters, numbers, or hyphens"
28000
28234
  }),
28001
- title: z64.string().min(1, "Title is required"),
28235
+ title: z65.string().min(1, "Title is required"),
28002
28236
  titleSource: titleSourceValueSchema.optional(),
28003
- description: z64.string().optional(),
28237
+ description: z65.string().optional(),
28004
28238
  category: blockCategoryEnum,
28005
- icon: z64.string().optional(),
28006
- tags: z64.array(z64.string()).optional(),
28239
+ icon: z65.string().optional(),
28240
+ tags: z65.array(z65.string()).optional(),
28007
28241
  // Reuse the exact field schema from @riverbankcms/blocks - all field types supported
28008
28242
  fields: fieldSchema.array().min(1, "Custom blocks must have at least one field"),
28009
28243
  // Data loaders for CMS endpoints
@@ -28011,14 +28245,14 @@ var sdkCustomBlockSchema = z64.object({
28011
28245
  // Optional declarative layout - when present, block can render without React override
28012
28246
  layout: NodeSchema.optional(),
28013
28247
  // Optional variants system (preferred when a block has multiple structural layouts)
28014
- variants: z64.record(z64.string().min(1), NodeSchema).optional(),
28015
- defaultVariant: z64.string().min(1).optional(),
28016
- variantOptions: z64.record(
28017
- z64.string().min(1),
28018
- z64.object({
28019
- label: z64.string().min(1).optional(),
28020
- description: z64.string().min(1).optional(),
28021
- icon: z64.string().min(1).optional()
28248
+ variants: z65.record(z65.string().min(1), NodeSchema).optional(),
28249
+ defaultVariant: z65.string().min(1).optional(),
28250
+ variantOptions: z65.record(
28251
+ z65.string().min(1),
28252
+ z65.object({
28253
+ label: z65.string().min(1).optional(),
28254
+ description: z65.string().min(1).optional(),
28255
+ icon: z65.string().min(1).optional()
28022
28256
  })
28023
28257
  ).optional()
28024
28258
  }).superRefine((data, ctx) => {
@@ -28029,7 +28263,7 @@ var sdkCustomBlockSchema = z64.object({
28029
28263
  const exists = fields3.some((field) => field.id === source);
28030
28264
  if (!exists) {
28031
28265
  ctx.addIssue({
28032
- code: z64.ZodIssueCode.custom,
28266
+ code: z65.ZodIssueCode.custom,
28033
28267
  message: `titleSource must reference a valid field ID (got "${source}")`,
28034
28268
  path: Array.isArray(data.titleSource) ? ["titleSource", index] : ["titleSource"]
28035
28269
  });
@@ -28038,7 +28272,7 @@ var sdkCustomBlockSchema = z64.object({
28038
28272
  }
28039
28273
  if (data.layout && data.variants) {
28040
28274
  ctx.addIssue({
28041
- code: z64.ZodIssueCode.custom,
28275
+ code: z65.ZodIssueCode.custom,
28042
28276
  message: "Custom block must define either `layout` or `variants`, not both",
28043
28277
  path: ["variants"]
28044
28278
  });
@@ -28048,7 +28282,7 @@ var sdkCustomBlockSchema = z64.object({
28048
28282
  if (!result.valid) {
28049
28283
  for (const error of result.errors) {
28050
28284
  ctx.addIssue({
28051
- code: z64.ZodIssueCode.custom,
28285
+ code: z65.ZodIssueCode.custom,
28052
28286
  message: error.message,
28053
28287
  path: ["layout"]
28054
28288
  });
@@ -28059,14 +28293,14 @@ var sdkCustomBlockSchema = z64.object({
28059
28293
  const keys = Object.keys(data.variants);
28060
28294
  if (keys.length === 0) {
28061
28295
  ctx.addIssue({
28062
- code: z64.ZodIssueCode.custom,
28296
+ code: z65.ZodIssueCode.custom,
28063
28297
  message: "`variants` must contain at least one variant key",
28064
28298
  path: ["variants"]
28065
28299
  });
28066
28300
  }
28067
28301
  if (data.defaultVariant && !Object.prototype.hasOwnProperty.call(data.variants, data.defaultVariant)) {
28068
28302
  ctx.addIssue({
28069
- code: z64.ZodIssueCode.custom,
28303
+ code: z65.ZodIssueCode.custom,
28070
28304
  message: "`defaultVariant` must be a key present in `variants`",
28071
28305
  path: ["defaultVariant"]
28072
28306
  });
@@ -28076,7 +28310,7 @@ var sdkCustomBlockSchema = z64.object({
28076
28310
  if (!result.valid) {
28077
28311
  for (const error of result.errors) {
28078
28312
  ctx.addIssue({
28079
- code: z64.ZodIssueCode.custom,
28313
+ code: z65.ZodIssueCode.custom,
28080
28314
  message: `${key}: ${error.message}`,
28081
28315
  path: ["variants", key]
28082
28316
  });
@@ -28087,7 +28321,7 @@ var sdkCustomBlockSchema = z64.object({
28087
28321
  for (const key of Object.keys(data.variantOptions)) {
28088
28322
  if (!Object.prototype.hasOwnProperty.call(data.variants, key)) {
28089
28323
  ctx.addIssue({
28090
- code: z64.ZodIssueCode.custom,
28324
+ code: z65.ZodIssueCode.custom,
28091
28325
  message: "`variantOptions` key must exist in `variants`",
28092
28326
  path: ["variantOptions", key]
28093
28327
  });
@@ -28096,58 +28330,58 @@ var sdkCustomBlockSchema = z64.object({
28096
28330
  }
28097
28331
  }
28098
28332
  });
28099
- var themeSourceSchema = z64.enum(["local", "cms"]).optional();
28100
- var activeThemeSchema = z64.string().regex(/^[a-z0-9][a-z0-9-_]*$/, {
28333
+ var themeSourceSchema = z65.enum(["local", "cms"]).optional();
28334
+ var activeThemeSchema = z65.string().regex(/^[a-z0-9][a-z0-9-_]*$/, {
28101
28335
  message: "Theme name must be lowercase alphanumeric with hyphens/underscores"
28102
28336
  }).max(64, "Theme name too long").optional();
28103
28337
  function isValidConfigBlockKind(kind) {
28104
28338
  if (getBlockDefinition(kind)) return true;
28105
28339
  return /^custom\.[a-z][a-z0-9-]*$/.test(kind);
28106
28340
  }
28107
- var layoutBlockKindSchema = z64.string().refine(isValidConfigBlockKind, {
28341
+ var layoutBlockKindSchema = z65.string().refine(isValidConfigBlockKind, {
28108
28342
  message: 'Block kind must be a system block (e.g., "block.hero") or a custom block (e.g., "custom.my-block")'
28109
28343
  });
28110
- var layoutFooterBlockSchema = z64.object({
28111
- id: z64.string().min(1).optional(),
28344
+ var layoutFooterBlockSchema = z65.object({
28345
+ id: z65.string().min(1).optional(),
28112
28346
  kind: layoutBlockKindSchema,
28113
28347
  // Allow omitted content for blocks that rely on defaults.
28114
- content: z64.record(z64.string(), z64.unknown()).optional()
28348
+ content: z65.record(z65.string(), z65.unknown()).optional()
28115
28349
  }).strict();
28116
- var layoutConfigSchema = z64.object({
28117
- footerBlocks: z64.array(layoutFooterBlockSchema).optional()
28350
+ var layoutConfigSchema = z65.object({
28351
+ footerBlocks: z65.array(layoutFooterBlockSchema).optional()
28118
28352
  }).strict();
28119
- var sdkWorkflowIdSchema2 = z64.string().min(1).max(SDK_WORKFLOW_ID_MAX_LENGTH).regex(SDK_WORKFLOW_ID_PATTERN, {
28353
+ var sdkWorkflowIdSchema2 = z65.string().min(1).max(SDK_WORKFLOW_ID_MAX_LENGTH).regex(SDK_WORKFLOW_ID_PATTERN, {
28120
28354
  message: "Workflow ID must start with a lowercase letter and use lowercase letters, numbers, dots, underscores, or hyphens"
28121
28355
  });
28122
- 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 "/"' });
28123
- var sdkWorkflowTriggerSchema2 = z64.discriminatedUnion("type", [
28124
- z64.object({ type: z64.literal("manual") }).strict()
28356
+ 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 "/"' });
28357
+ var sdkWorkflowTriggerSchema2 = z65.discriminatedUnion("type", [
28358
+ z65.object({ type: z65.literal("manual") }).strict()
28125
28359
  ]);
28126
- var sdkWorkflowConfirmationSchema2 = z64.object({
28127
- title: z64.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH),
28128
- body: z64.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH).optional()
28360
+ var sdkWorkflowConfirmationSchema2 = z65.object({
28361
+ title: z65.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH),
28362
+ body: z65.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH).optional()
28129
28363
  }).strict();
28130
- var sdkWorkflowConfigSchema2 = z64.object({
28364
+ var sdkWorkflowConfigSchema2 = z65.object({
28131
28365
  id: sdkWorkflowIdSchema2,
28132
- title: z64.string().trim().min(1).max(SDK_WORKFLOW_TITLE_MAX_LENGTH),
28133
- description: z64.string().trim().min(1).max(SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH).optional(),
28134
- contentType: z64.string().trim().min(1).max(SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH),
28366
+ title: z65.string().trim().min(1).max(SDK_WORKFLOW_TITLE_MAX_LENGTH),
28367
+ description: z65.string().trim().min(1).max(SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH).optional(),
28368
+ contentType: z65.string().trim().min(1).max(SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH),
28135
28369
  endpoint: sdkWorkflowEndpointSchema2,
28136
- triggers: z64.array(sdkWorkflowTriggerSchema2).min(1).max(SDK_WORKFLOW_TRIGGER_MAX_COUNT),
28370
+ triggers: z65.array(sdkWorkflowTriggerSchema2).min(1).max(SDK_WORKFLOW_TRIGGER_MAX_COUNT),
28137
28371
  confirmation: sdkWorkflowConfirmationSchema2.optional()
28138
28372
  }).strict();
28139
- var sdkWorkflowsSchema2 = z64.array(sdkWorkflowConfigSchema2).max(SDK_WORKFLOW_MAX_COUNT, "Maximum 50 workflows per site").refine((workflows) => {
28373
+ var sdkWorkflowsSchema2 = z65.array(sdkWorkflowConfigSchema2).max(SDK_WORKFLOW_MAX_COUNT, "Maximum 50 workflows per site").refine((workflows) => {
28140
28374
  const ids = workflows.map((workflow) => workflow.id);
28141
28375
  return ids.length === new Set(ids).size;
28142
28376
  }, { message: "Workflow IDs must be unique" }).optional();
28143
- var riverbankSiteConfigSchema = z64.object({
28144
- siteId: z64.string().uuid(),
28377
+ var riverbankSiteConfigSchema = z65.object({
28378
+ siteId: z65.string().uuid(),
28145
28379
  previewUrl: sdkSiteUrlSchema.optional(),
28146
28380
  liveUrl: sdkSiteUrlSchema.optional(),
28147
28381
  theme: sdkThemeConfigSchema2.optional(),
28148
28382
  styles: siteStyleConfigSchema,
28149
28383
  layout: layoutConfigSchema.optional(),
28150
- customBlocks: z64.array(sdkCustomBlockSchema).max(100, "Maximum 100 custom blocks per site").refine(
28384
+ customBlocks: z65.array(sdkCustomBlockSchema).max(100, "Maximum 100 custom blocks per site").refine(
28151
28385
  // Ensure unique block IDs
28152
28386
  (blocks) => {
28153
28387
  const ids = blocks.map((b) => b.id);
@@ -28160,7 +28394,7 @@ var riverbankSiteConfigSchema = z64.object({
28160
28394
  workflows: sdkWorkflowsSchema2,
28161
28395
  content: contentConfigSchema.optional(),
28162
28396
  // CLI-related configuration (Phase 4)
28163
- contentDir: z64.string().optional(),
28397
+ contentDir: z65.string().optional(),
28164
28398
  sync: syncConfigSchema,
28165
28399
  deploy: deployConfigSchema,
28166
28400
  // Theme sync configuration (Phase 5)