@riverbankcms/sdk 0.60.6 → 0.60.9

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 (103) 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/navigation/linkValue.d.ts +1 -1
  10. package/dist/_dts/api/src/public/endpoints.d.ts +1 -1
  11. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +15 -1
  12. package/dist/_dts/api/src/resources.d.ts +1 -1
  13. package/dist/_dts/api/src/siteBanner.d.ts +8 -8
  14. package/dist/_dts/api/src/siteOnboarding.d.ts +1 -0
  15. package/dist/_dts/api/src/teamMembers.d.ts +27 -0
  16. package/dist/_dts/blocks/src/index.d.ts +2 -1
  17. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +35 -29
  18. package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +1 -5
  19. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +40 -34
  20. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +1 -5
  21. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +1 -1
  22. package/dist/_dts/blocks/src/system/blocks/products/shared.d.ts +2 -2
  23. package/dist/_dts/blocks/src/system/blocks/shared/bookingPaymentTerms.d.ts +9 -9
  24. package/dist/_dts/blocks/src/system/blocks/shared/teamMembers.d.ts +24 -0
  25. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +18 -8
  26. package/dist/_dts/blocks/src/system/constants/background.d.ts +1 -1
  27. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  28. package/dist/_dts/blocks/src/system/data/utils.d.ts +1 -1
  29. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +185 -0
  30. package/dist/_dts/blocks/src/system/manifest/index.d.ts +1 -0
  31. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +201 -201
  32. package/dist/_dts/blocks/src/system/manifest/validation.d.ts +2 -84
  33. package/dist/_dts/blocks/src/system/node/schema.d.ts +5 -5
  34. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +1 -1
  35. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +4 -4
  36. package/dist/_dts/blocks/src/system/transforms/registry/ui.d.ts +1 -1
  37. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +3 -3
  38. package/dist/_dts/blocks/src/system/types/link.d.ts +93 -1
  39. package/dist/_dts/content-model/src/content-types/schema.d.ts +8 -8
  40. package/dist/_dts/content-model/src/metadataConfig.d.ts +1 -0
  41. package/dist/_dts/core/src/branded.d.ts +2 -0
  42. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +124 -8
  43. package/dist/_dts/db/src/schemas/forms.d.ts +85 -64
  44. package/dist/_dts/editor-blocks/src/widgets/link/LinkSummary.d.ts +1 -1
  45. package/dist/_dts/editor-blocks/src/widgets/link/LinkWidget.d.ts +1 -1
  46. package/dist/_dts/editor-blocks/src/widgets/link/utils.d.ts +1 -1
  47. package/dist/_dts/sdk/src/client/types.d.ts +9 -2
  48. package/dist/_dts/sdk/src/config/typed-entries.d.ts +36 -1
  49. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  50. package/dist/_dts/sdk/src/config/validation.d.ts +40 -37
  51. package/dist/_dts/sdk/src/contracts/content.d.ts +6 -1
  52. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  53. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +18 -8
  54. package/dist/_dts/sdk/src/data/prefetchBlockData.d.ts +1 -1
  55. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +19 -19
  56. package/dist/_dts/sdk/src/public-api/contracts.d.ts +87 -69
  57. package/dist/_dts/sdk/src/public-api/runtime.d.ts +1 -1
  58. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +2 -5
  59. package/dist/_dts/sdk/src/version.d.ts +1 -1
  60. package/dist/_dts/theme-core/src/accordions/types.d.ts +11 -11
  61. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +10 -10
  62. package/dist/_dts/theme-core/src/buttons/types.d.ts +27 -27
  63. package/dist/_dts/theme-core/src/cards/types.d.ts +17 -17
  64. package/dist/_dts/theme-core/src/inputs/types.d.ts +14 -14
  65. package/dist/_dts/theme-core/src/interactive/baseSchema.d.ts +2 -2
  66. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +438 -438
  67. package/dist/_dts/theme-core/src/navigation/types.d.ts +16 -16
  68. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +15 -15
  69. package/dist/_dts/theme-core/src/schema.d.ts +662 -662
  70. package/dist/_dts/theme-core/src/shared/componentStyles.d.ts +4 -4
  71. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +15 -15
  72. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +7 -7
  73. package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +1 -1
  74. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +5 -5
  75. package/dist/_dts/ui/src/badge.d.ts +1 -1
  76. package/dist/_dts/ui/src/button-group.d.ts +1 -1
  77. package/dist/_dts/ui/src/button.d.ts +2 -2
  78. package/dist/_dts/ui/src/callout.d.ts +1 -1
  79. package/dist/_dts/ui/src/card.d.ts +1 -1
  80. package/dist/_dts/ui/src/surface.d.ts +2 -2
  81. package/dist/_dts/ui/src/toggle.d.ts +4 -4
  82. package/dist/cli/index.mjs +951 -451
  83. package/dist/client/client.mjs +39490 -38952
  84. package/dist/client/hooks.mjs +1992 -1741
  85. package/dist/client/rendering/client.mjs +179 -130
  86. package/dist/client/rendering/islands.mjs +68 -43
  87. package/dist/client/rendering.mjs +1812 -1292
  88. package/dist/preview-next/before-render.mjs +147 -1
  89. package/dist/preview-next/client/runtime.mjs +1377 -829
  90. package/dist/preview-next/middleware.mjs +147 -1
  91. package/dist/server/components.mjs +3246 -2751
  92. package/dist/server/config-validation.mjs +2198 -1962
  93. package/dist/server/config.mjs +2198 -1962
  94. package/dist/server/data.mjs +1992 -1741
  95. package/dist/server/index.mjs +168 -2
  96. package/dist/server/next.mjs +3230 -2701
  97. package/dist/server/page-converter.mjs +345 -259
  98. package/dist/server/prebuild.mjs +1 -1
  99. package/dist/server/rendering/server.mjs +3274 -2763
  100. package/dist/server/rendering.mjs +3274 -2763
  101. package/dist/server/routing.mjs +530 -309
  102. package/dist/server/server.mjs +2011 -1742
  103. package/package.json +1 -1
@@ -8788,9 +8788,9 @@ function createZodCodec(schema) {
8788
8788
  return decodeSuccess(parsed.data);
8789
8789
  }
8790
8790
  return decodeFailure(
8791
- parsed.error.issues.map((issue) => ({
8792
- path: zodIssuePath(issue.path),
8793
- message: issue.message
8791
+ parsed.error.issues.map((issue2) => ({
8792
+ path: zodIssuePath(issue2.path),
8793
+ message: issue2.message
8794
8794
  }))
8795
8795
  );
8796
8796
  }
@@ -8822,9 +8822,9 @@ function expectEncodedRecord(value, label) {
8822
8822
  throw new Error(`Expected ${label} codec to encode an object`);
8823
8823
  }
8824
8824
  function prefixIssues(prefix, issues) {
8825
- return issues.map((issue) => ({
8826
- path: [...prefix, ...issue.path],
8827
- message: issue.message
8825
+ return issues.map((issue2) => ({
8826
+ path: [...prefix, ...issue2.path],
8827
+ message: issue2.message
8828
8828
  }));
8829
8829
  }
8830
8830
  function defineInteractiveIslandMetaKeys(...keys) {
@@ -9871,7 +9871,9 @@ var init_schemas = __esm({
9871
9871
  courseTeamMemberSummarySchema = z8.object({
9872
9872
  id: z8.string(),
9873
9873
  name: z8.string(),
9874
- summary: z8.string().nullable()
9874
+ roleLabel: z8.string().nullable(),
9875
+ summary: z8.string().nullable(),
9876
+ profilePath: z8.string().nullable()
9875
9877
  });
9876
9878
  coursePricingOptionSchema = z8.object({
9877
9879
  id: z8.string(),
@@ -10394,6 +10396,12 @@ var init_CoursePricingDisplay = __esm({
10394
10396
 
10395
10397
  // ../blocks/src/system/runtime/nodes/event-details/view.tsx
10396
10398
  import { Fragment as Fragment3, jsx as jsx23, jsxs as jsxs9 } from "react/jsx-runtime";
10399
+ function TeamMemberName({
10400
+ name,
10401
+ profilePath
10402
+ }) {
10403
+ return profilePath ? /* @__PURE__ */ jsx23("a", { href: profilePath, className: "rb-hover-opacity-80", children: /* @__PURE__ */ jsx23("strong", { children: name }) }) : /* @__PURE__ */ jsx23("strong", { children: name });
10404
+ }
10397
10405
  function EventDetailsView({
10398
10406
  selection,
10399
10407
  showVenue,
@@ -10457,7 +10465,13 @@ function EventDetailsView({
10457
10465
  teamMembers.length > 0 ? /* @__PURE__ */ jsxs9("div", { className: "rb-mt-6", children: [
10458
10466
  /* @__PURE__ */ jsx23("div", { className: "rb-label rb-mb-2", children: "Team members" }),
10459
10467
  /* @__PURE__ */ jsx23("div", { className: "rb-flex rb-flex-col rb-gap-3", children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs9("div", { children: [
10460
- /* @__PURE__ */ jsx23("p", { children: /* @__PURE__ */ jsx23("strong", { children: teamMember.name }) }),
10468
+ /* @__PURE__ */ jsx23("p", { children: /* @__PURE__ */ jsx23(
10469
+ TeamMemberName,
10470
+ {
10471
+ name: teamMember.name,
10472
+ profilePath: teamMember.profilePath
10473
+ }
10474
+ ) }),
10461
10475
  teamMember.summary ? /* @__PURE__ */ jsx23("p", { className: "rb-caption status-muted", children: teamMember.summary }) : null
10462
10476
  ] }, teamMember.id)) })
10463
10477
  ] }) : null,
@@ -11007,6 +11021,12 @@ var init_runs = __esm({
11007
11021
 
11008
11022
  // ../blocks/src/system/runtime/nodes/course-details/view.tsx
11009
11023
  import { jsx as jsx27, jsxs as jsxs13 } from "react/jsx-runtime";
11024
+ function TeamMemberName2({
11025
+ name,
11026
+ profilePath
11027
+ }) {
11028
+ return profilePath ? /* @__PURE__ */ jsx27("a", { href: profilePath, className: "rb-hover-opacity-80", children: /* @__PURE__ */ jsx27("strong", { children: name }) }) : /* @__PURE__ */ jsx27("strong", { children: name });
11029
+ }
11010
11030
  function parseLimit2(value, fallback2) {
11011
11031
  if (value === "all") return "all";
11012
11032
  const n = typeof value === "string" ? Number.parseInt(value, 10) : typeof value === "number" ? value : NaN;
@@ -11064,7 +11084,13 @@ function CourseDetailsView(props2) {
11064
11084
  teamMembers.length > 0 && /* @__PURE__ */ jsxs13("div", { children: [
11065
11085
  /* @__PURE__ */ jsx27("div", { className: "rb-label rb-mb-2", children: "Team members" }),
11066
11086
  /* @__PURE__ */ jsx27("div", { className: "rb-flex rb-flex-col rb-gap-3", children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs13("div", { children: [
11067
- /* @__PURE__ */ jsx27("p", { children: /* @__PURE__ */ jsx27("strong", { children: teamMember.name }) }),
11087
+ /* @__PURE__ */ jsx27("p", { children: /* @__PURE__ */ jsx27(
11088
+ TeamMemberName2,
11089
+ {
11090
+ name: teamMember.name,
11091
+ profilePath: teamMember.profilePath
11092
+ }
11093
+ ) }),
11068
11094
  teamMember.summary && /* @__PURE__ */ jsx27("p", { className: "rb-caption status-muted", children: teamMember.summary })
11069
11095
  ] }, teamMember.id)) })
11070
11096
  ] })
@@ -11838,7 +11864,9 @@ var init_schemas2 = __esm({
11838
11864
  publicTeamMemberSummarySchema = z9.object({
11839
11865
  id: z9.string(),
11840
11866
  name: z9.string(),
11841
- summary: z9.string().nullable()
11867
+ roleLabel: z9.string().nullable(),
11868
+ summary: z9.string().nullable(),
11869
+ profilePath: z9.string().nullable()
11842
11870
  });
11843
11871
  publicEventSchema = z9.object({
11844
11872
  kind: z9.enum(["event", "course_session"]).optional(),
@@ -18706,7 +18734,19 @@ var init_teamMember = __esm({
18706
18734
  bind("photo")
18707
18735
  )
18708
18736
  ]),
18709
- text({ as: "h3" }, bind("name")),
18737
+ link(
18738
+ {
18739
+ href: { $bind: { from: "profilePath" } },
18740
+ className: "rb-team-member-name-link"
18741
+ },
18742
+ [text({ as: "h3" }, bind("name"))],
18743
+ when("profilePath")
18744
+ ),
18745
+ text(
18746
+ { as: "h3" },
18747
+ when("profilePath", { not: true }),
18748
+ bind("name")
18749
+ ),
18710
18750
  text({ as: "p", className: "rb-team-member-role" }, when("role"), bind("role")),
18711
18751
  richText(
18712
18752
  { className: "rb-prose rb-max-w-none" },
@@ -28837,7 +28877,7 @@ var init_DatePicker = __esm({
28837
28877
  dateOptions,
28838
28878
  required = true,
28839
28879
  isLoading = false,
28840
- isEmpty: isEmpty2 = false,
28880
+ isEmpty = false,
28841
28881
  hasMore = false,
28842
28882
  onLoadMore
28843
28883
  }) => {
@@ -28851,7 +28891,7 @@ var init_DatePicker = __esm({
28851
28891
  /* @__PURE__ */ jsx57("p", { className: "ab-text ab-text--muted ab-text--sm", children: "Loading available dates..." })
28852
28892
  ] });
28853
28893
  }
28854
- if (isEmpty2) {
28894
+ if (isEmpty) {
28855
28895
  return /* @__PURE__ */ jsxs40("div", { className: "ab-stack--sm", children: [
28856
28896
  /* @__PURE__ */ jsxs40("label", { className: "ab-label", children: [
28857
28897
  "Select Date",
@@ -35488,7 +35528,16 @@ var init_CourseRegistrationErrorBoundary = __esm({
35488
35528
  });
35489
35529
 
35490
35530
  // ../blocks/src/system/runtime/nodes/course-registration/components.tsx
35531
+ import React19 from "react";
35491
35532
  import { Fragment as Fragment15, jsx as jsx105, jsxs as jsxs78 } from "react/jsx-runtime";
35533
+ function TeamMemberInlineList({
35534
+ teamMembers
35535
+ }) {
35536
+ return /* @__PURE__ */ jsx105(Fragment15, { children: teamMembers.map((teamMember, index) => /* @__PURE__ */ jsxs78(React19.Fragment, { children: [
35537
+ index > 0 ? ", " : "",
35538
+ teamMember.profilePath ? /* @__PURE__ */ jsx105("a", { href: teamMember.profilePath, children: teamMember.name }) : teamMember.name
35539
+ ] }, teamMember.id)) });
35540
+ }
35492
35541
  function CourseCard({
35493
35542
  course,
35494
35543
  isSelected,
@@ -35569,7 +35618,7 @@ function CourseSummary({
35569
35618
  teamMembers.length > 0 && /* @__PURE__ */ jsxs78("div", { className: "cr-summary__venue", children: [
35570
35619
  /* @__PURE__ */ jsx105("strong", { children: "Team:" }),
35571
35620
  " ",
35572
- teamMembers.map((teamMember) => teamMember.name).join(", ")
35621
+ /* @__PURE__ */ jsx105(TeamMemberInlineList, { teamMembers })
35573
35622
  ] }),
35574
35623
  showPrice && pricing.display.kind !== "unavailable" && /* @__PURE__ */ jsxs78("p", { className: "cr-summary__price", children: [
35575
35624
  /* @__PURE__ */ jsx105("strong", { children: pricing.selectableOptions.length > 0 ? "Pricing:" : "Price:" }),
@@ -37127,7 +37176,7 @@ var init_location_map_client = __esm({
37127
37176
  });
37128
37177
 
37129
37178
  // ../blocks/src/system/runtime/nodes/shop-commerce-store.ts
37130
- import * as React20 from "react";
37179
+ import * as React21 from "react";
37131
37180
  function storageKey(siteId) {
37132
37181
  return `riverbank:shop-cart:${siteId}`;
37133
37182
  }
@@ -37143,8 +37192,8 @@ function addPassToCommerceCart(siteId, input) {
37143
37192
  }
37144
37193
  function useCommerceCart(siteId) {
37145
37194
  const effectiveSiteId = siteId ?? "unknown";
37146
- const store = React20.useMemo(() => getStore(effectiveSiteId), [effectiveSiteId]);
37147
- const state = React20.useSyncExternalStore(
37195
+ const store = React21.useMemo(() => getStore(effectiveSiteId), [effectiveSiteId]);
37196
+ const state = React21.useSyncExternalStore(
37148
37197
  (listener) => store.subscribe(listener),
37149
37198
  () => store.getSnapshot(),
37150
37199
  () => EMPTY_STATE
@@ -37239,11 +37288,11 @@ var init_shop_commerce_store = __esm({
37239
37288
  });
37240
37289
 
37241
37290
  // ../blocks/src/system/runtime/nodes/shop-add-feedback.tsx
37242
- import * as React21 from "react";
37291
+ import * as React22 from "react";
37243
37292
  import { jsx as jsx111, jsxs as jsxs82 } from "react/jsx-runtime";
37244
37293
  function useTransientShopAddFeedback(timeoutMs = DEFAULT_TIMEOUT_MS) {
37245
- const [activeKey, setActiveKey] = React21.useState(null);
37246
- React21.useEffect(() => {
37294
+ const [activeKey, setActiveKey] = React22.useState(null);
37295
+ React22.useEffect(() => {
37247
37296
  if (!activeKey) return;
37248
37297
  const timeoutId = window.setTimeout(() => {
37249
37298
  setActiveKey((current) => current === activeKey ? null : current);
@@ -37400,7 +37449,7 @@ var init_shop_state = __esm({
37400
37449
  });
37401
37450
 
37402
37451
  // ../blocks/src/system/runtime/nodes/shop.client.tsx
37403
- import React22, { useCallback as useCallback10, useEffect as useEffect21, useRef as useRef11, useState as useState17 } from "react";
37452
+ import React23, { useCallback as useCallback10, useEffect as useEffect21, useRef as useRef11, useState as useState17 } from "react";
37404
37453
  import { Fragment as Fragment17, jsx as jsx112, jsxs as jsxs83 } from "react/jsx-runtime";
37405
37454
  function ShopClient(props2) {
37406
37455
  return /* @__PURE__ */ jsx112(PassesMembershipsController, { render: props2.render });
@@ -37412,7 +37461,7 @@ function getCheckoutModalTitle(checkout2) {
37412
37461
  }
37413
37462
  function PassesMembershipsController({ render }) {
37414
37463
  const api = useBlockApi();
37415
- const [state, dispatch] = React22.useReducer(
37464
+ const [state, dispatch] = React23.useReducer(
37416
37465
  shopPassesMembershipsReducer,
37417
37466
  initialShopPassesMembershipsState
37418
37467
  );
@@ -39630,7 +39679,7 @@ var init_embla_carousel_react_esm = __esm({
39630
39679
  });
39631
39680
 
39632
39681
  // ../blocks/src/system/runtime/nodes/carousel.client.tsx
39633
- import React23 from "react";
39682
+ import React24 from "react";
39634
39683
  import { Fragment as Fragment18, jsx as jsx113, jsxs as jsxs84 } from "react/jsx-runtime";
39635
39684
  function normalizeCarouselProps(input) {
39636
39685
  const transition = input.transition === "fade" ? "fade" : "slide";
@@ -39685,8 +39734,8 @@ var init_carousel_client = __esm({
39685
39734
  autoplayDelay,
39686
39735
  loop
39687
39736
  }) => {
39688
- const slides = React23.Children.toArray(children).filter(Boolean);
39689
- const normalized = React23.useMemo(
39737
+ const slides = React24.Children.toArray(children).filter(Boolean);
39738
+ const normalized = React24.useMemo(
39690
39739
  () => normalizeCarouselProps({
39691
39740
  slidesToShow,
39692
39741
  transition,
@@ -39709,11 +39758,11 @@ var init_carousel_client = __esm({
39709
39758
  ]
39710
39759
  );
39711
39760
  const resolvedSlides = resolveSlidesToShowMobile(normalized.slidesToShow);
39712
- const cssVars = React23.useMemo(
39761
+ const cssVars = React24.useMemo(
39713
39762
  () => getCarouselSlidesToShowCssVars(normalized.slidesToShow),
39714
39763
  [normalized.slidesToShow]
39715
39764
  );
39716
- const plugins = React23.useMemo(() => {
39765
+ const plugins = React24.useMemo(() => {
39717
39766
  if (!normalized.autoplay) return void 0;
39718
39767
  return [
39719
39768
  Autoplay({
@@ -39735,11 +39784,11 @@ var init_carousel_client = __esm({
39735
39784
  },
39736
39785
  plugins
39737
39786
  );
39738
- const [selectedIndex, setSelectedIndex] = React23.useState(0);
39739
- const [scrollSnaps, setScrollSnaps] = React23.useState([]);
39740
- const [canScrollPrev, setCanScrollPrev] = React23.useState(false);
39741
- const [canScrollNext, setCanScrollNext] = React23.useState(false);
39742
- React23.useEffect(() => {
39787
+ const [selectedIndex, setSelectedIndex] = React24.useState(0);
39788
+ const [scrollSnaps, setScrollSnaps] = React24.useState([]);
39789
+ const [canScrollPrev, setCanScrollPrev] = React24.useState(false);
39790
+ const [canScrollNext, setCanScrollNext] = React24.useState(false);
39791
+ React24.useEffect(() => {
39743
39792
  if (!api) return;
39744
39793
  const onInit = () => {
39745
39794
  setScrollSnaps(api.scrollSnapList());
@@ -39762,7 +39811,7 @@ var init_carousel_client = __esm({
39762
39811
  api.off("reInit", onSelect);
39763
39812
  };
39764
39813
  }, [api]);
39765
- React23.useEffect(() => {
39814
+ React24.useEffect(() => {
39766
39815
  if (!api || !normalized.autoplay) return;
39767
39816
  const autoplayPlugin = api.plugins()?.autoplay;
39768
39817
  if (!autoplayPlugin) return;
@@ -39973,16 +40022,16 @@ var init_shop_checkout_state = __esm({
39973
40022
  });
39974
40023
 
39975
40024
  // ../blocks/src/system/runtime/nodes/shop-commerce.tsx
39976
- import * as React24 from "react";
40025
+ import * as React25 from "react";
39977
40026
  import { Fragment as Fragment19, jsx as jsx114, jsxs as jsxs85 } from "react/jsx-runtime";
39978
40027
  function ProductListController(props2) {
39979
40028
  const api = useBlockApi();
39980
40029
  const cart2 = useCommerceCart(api.config.siteId);
39981
40030
  const addFeedback = useTransientShopAddFeedback();
39982
- const [variantSelection, setVariantSelection] = React24.useState(
40031
+ const [variantSelection, setVariantSelection] = React25.useState(
39983
40032
  () => Object.fromEntries(props2.render.display.cards.map((card) => [card.productId, card.selectedVariantId]))
39984
40033
  );
39985
- const cards = React24.useMemo(
40034
+ const cards = React25.useMemo(
39986
40035
  () => props2.render.hydration.products.map(
39987
40036
  (product) => buildProductCardDisplay(
39988
40037
  product,
@@ -39997,7 +40046,7 @@ function ProductListController(props2) {
39997
40046
  ),
39998
40047
  [props2.render.hydration, variantSelection]
39999
40048
  );
40000
- const display = React24.useMemo(
40049
+ const display = React25.useMemo(
40001
40050
  () => ({
40002
40051
  ...props2.render.display,
40003
40052
  state: cards.length === 0 ? "empty" : "ready",
@@ -40059,17 +40108,17 @@ function ProductDetailController(props2) {
40059
40108
  const api = useBlockApi();
40060
40109
  const cart2 = useCommerceCart(api.config.siteId);
40061
40110
  const addFeedback = useTransientShopAddFeedback();
40062
- const selectedProduct = React24.useMemo(
40111
+ const selectedProduct = React25.useMemo(
40063
40112
  () => props2.render.hydration.products.find((product) => product.id === props2.render.hydration.productId) ?? null,
40064
40113
  [props2.render.hydration.productId, props2.render.hydration.products]
40065
40114
  );
40066
- const [variantId, setVariantId] = React24.useState(
40115
+ const [variantId, setVariantId] = React25.useState(
40067
40116
  props2.render.display.state === "ready" ? props2.render.display.selectedVariantId : null
40068
40117
  );
40069
- React24.useEffect(() => {
40118
+ React25.useEffect(() => {
40070
40119
  setVariantId(props2.render.display.state === "ready" ? props2.render.display.selectedVariantId : null);
40071
40120
  }, [props2.render.display]);
40072
- const display = React24.useMemo(
40121
+ const display = React25.useMemo(
40073
40122
  () => buildProductDetailDisplay(
40074
40123
  selectedProduct,
40075
40124
  {
@@ -40137,7 +40186,7 @@ function ProductDetailController(props2) {
40137
40186
  function CartController(props2) {
40138
40187
  const api = useBlockApi();
40139
40188
  const cart2 = useCommerceCart(api.config.siteId);
40140
- const display = React24.useMemo(
40189
+ const display = React25.useMemo(
40141
40190
  () => getShopDisplayForItems(props2.render, cart2.items),
40142
40191
  [cart2.items, props2.render]
40143
40192
  );
@@ -40180,11 +40229,11 @@ function CartController(props2) {
40180
40229
  function CheckoutController(props2) {
40181
40230
  const api = useBlockApi();
40182
40231
  const cart2 = useCommerceCart(api.config.siteId);
40183
- const [state, dispatch] = React24.useReducer(
40232
+ const [state, dispatch] = React25.useReducer(
40184
40233
  shopCheckoutReducer,
40185
40234
  initialShopCheckoutState
40186
40235
  );
40187
- React24.useEffect(() => {
40236
+ React25.useEffect(() => {
40188
40237
  const checkout2 = consumeSearchParam("checkout");
40189
40238
  if (checkout2 === "success") {
40190
40239
  cart2.clear();
@@ -40193,7 +40242,7 @@ function CheckoutController(props2) {
40193
40242
  dispatch({ type: "setNotice", notice: "cancelled" });
40194
40243
  }
40195
40244
  }, [cart2]);
40196
- const display = React24.useMemo(
40245
+ const display = React25.useMemo(
40197
40246
  () => getShopDisplayForItems(props2.render, cart2.items),
40198
40247
  [cart2.items, props2.render]
40199
40248
  );
@@ -40353,7 +40402,7 @@ var init_checkout_client = __esm({
40353
40402
  });
40354
40403
 
40355
40404
  // ../blocks/src/system/runtime/header/HeaderCartDrawer.tsx
40356
- import * as React25 from "react";
40405
+ import * as React26 from "react";
40357
40406
  import { jsx as jsx119, jsxs as jsxs86 } from "react/jsx-runtime";
40358
40407
  function normalizeQuantityInput(value) {
40359
40408
  const parsed = Number(value);
@@ -40403,8 +40452,8 @@ function HeaderCartDrawerItems(props2) {
40403
40452
  )) });
40404
40453
  }
40405
40454
  function HeaderCartDrawer(props2) {
40406
- const titleId = React25.useId();
40407
- const display = React25.useMemo(
40455
+ const titleId = React26.useId();
40456
+ const display = React26.useMemo(
40408
40457
  () => buildCartDisplay(props2.cart.items, {
40409
40458
  heading: "Cart",
40410
40459
  emptyMessage: "Your cart is empty.",
@@ -40618,15 +40667,15 @@ var init_HeaderCartTrigger = __esm({
40618
40667
  });
40619
40668
 
40620
40669
  // ../blocks/src/system/runtime/header/headerCartRuntime.tsx
40621
- import * as React26 from "react";
40670
+ import * as React27 from "react";
40622
40671
  import { createPortal as createPortal2 } from "react-dom";
40623
40672
  import { createRoot } from "react-dom/client";
40624
40673
  import { Fragment as Fragment20, jsx as jsx121, jsxs as jsxs88 } from "react/jsx-runtime";
40625
40674
  function HeaderCartRuntime(props2) {
40626
40675
  const cart2 = useCommerceCart(props2.siteId);
40627
- const itemCount = React26.useMemo(() => getCartItemCount(cart2.items), [cart2.items]);
40628
- const [open, setOpen] = React26.useState(false);
40629
- const checkoutHref = React26.useMemo(
40676
+ const itemCount = React27.useMemo(() => getCartItemCount(cart2.items), [cart2.items]);
40677
+ const [open, setOpen] = React27.useState(false);
40678
+ const checkoutHref = React27.useMemo(
40630
40679
  () => resolveHeaderCartCheckoutHref(
40631
40680
  props2.mounts,
40632
40681
  typeof window === "undefined" ? null : window.location.pathname
@@ -58560,7 +58609,7 @@ var DEFAULT_REQUIRED_ERROR_MESSAGE = "This section failed to load. Please refres
58560
58609
  var IslandPropsDecodeError = class extends Error {
58561
58610
  constructor(kind, issues) {
58562
58611
  super(
58563
- `[sdk:islands] Invalid props for island kind="${kind}": ${issues.map((issue) => `${issue.path.join(".") || "<root>"}: ${issue.message}`).join("; ")}`
58612
+ `[sdk:islands] Invalid props for island kind="${kind}": ${issues.map((issue2) => `${issue2.path.join(".") || "<root>"}: ${issue2.message}`).join("; ")}`
58564
58613
  );
58565
58614
  this.name = "IslandPropsDecodeError";
58566
58615
  this.issues = issues;
@@ -58722,382 +58771,619 @@ function hydrateBlocksIslands(options = {}) {
58722
58771
  }
58723
58772
 
58724
58773
  // ../blocks/src/PageRenderer.tsx
58725
- import * as React37 from "react";
58726
-
58727
- // ../blocks/src/system/manifest/registry.ts
58728
- var REGISTRY_SYMBOL = /* @__PURE__ */ Symbol.for("@riverbankcms/blocks/manifest-registry");
58729
- var isVitest = typeof process !== "undefined" && typeof process.env !== "undefined" && process.env.VITEST === "true";
58730
- var globalScope = globalThis;
58731
- var manifestStore = isVitest ? /* @__PURE__ */ new Map() : globalScope[REGISTRY_SYMBOL] ?? (globalScope[REGISTRY_SYMBOL] = /* @__PURE__ */ new Map());
58732
- function registerManifest(manifest) {
58733
- manifestStore.set(manifest.name, manifest);
58734
- return manifest;
58735
- }
58774
+ import * as React38 from "react";
58736
58775
 
58737
- // ../blocks/src/system/manifest/validation.ts
58738
- init_schema2();
58776
+ // ../blocks/src/system/manifest/fieldValidation/index.ts
58739
58777
  import { z as z40 } from "zod";
58740
58778
 
58741
- // ../blocks/src/system/manifest/richTextSchema.ts
58742
- init_typeGuards2();
58779
+ // ../blocks/src/system/types/link.ts
58743
58780
  import { z as z39 } from "zod";
58744
- var TipTapMarkSchema = z39.object({
58745
- type: z39.string(),
58746
- attrs: z39.record(z39.string(), z39.unknown()).optional()
58747
- });
58748
- var TipTapNodeSchema = z39.lazy(
58749
- () => z39.object({
58750
- type: z39.string(),
58751
- content: z39.array(TipTapNodeSchema).optional(),
58752
- text: z39.string().optional(),
58753
- attrs: z39.record(z39.string(), z39.unknown()).optional(),
58754
- marks: z39.array(TipTapMarkSchema).optional()
58755
- })
58756
- );
58757
- var RichTextValueSchema = z39.union([
58758
- // New format: TipTap document directly
58759
- TipTapNodeSchema,
58760
- // Legacy format: wrapped in { doc: {...} }
58761
- z39.object({
58762
- doc: TipTapNodeSchema
58763
- })
58781
+ var nullableString = z39.union([z39.string().min(1), z39.null()]);
58782
+ var resolvedInternalLinkKeys = ["entityId", "entityType", "href", "title", "typeLabel"];
58783
+ var internalRouteOnlyLinkSchema = z39.object({
58784
+ kind: z39.literal("internal"),
58785
+ routeId: z39.string().min(1)
58786
+ }).passthrough().superRefine((value, ctx) => {
58787
+ const hasResolvedMetadata = resolvedInternalLinkKeys.some((key) => value[key] != null);
58788
+ if (!hasResolvedMetadata) return;
58789
+ ctx.addIssue({
58790
+ code: "custom",
58791
+ message: "Internal links with resolved metadata must include entityId, entityType, href, title, and typeLabel"
58792
+ });
58793
+ });
58794
+ var internalResolvedLinkSchema = z39.object({
58795
+ kind: z39.literal("internal"),
58796
+ routeId: z39.string().min(1),
58797
+ entityId: z39.string().min(1),
58798
+ entityType: z39.enum(["page", "content"]),
58799
+ href: z39.string().min(1),
58800
+ title: z39.string().min(1),
58801
+ typeLabel: z39.string().min(1),
58802
+ contentTypeKey: nullableString.optional(),
58803
+ contentTypeName: nullableString.optional(),
58804
+ updatedAt: nullableString.optional()
58805
+ }).passthrough();
58806
+ var internalLinkSchema = z39.union([
58807
+ internalResolvedLinkSchema,
58808
+ internalRouteOnlyLinkSchema
58809
+ ]);
58810
+ var externalLinkSchema = z39.object({
58811
+ kind: z39.literal("external"),
58812
+ href: z39.string().min(1)
58813
+ }).passthrough();
58814
+ var customLinkSchema = z39.object({
58815
+ kind: z39.literal("url"),
58816
+ href: z39.string().min(1)
58817
+ }).passthrough();
58818
+ var pageLinkSchema = z39.object({
58819
+ kind: z39.literal("page"),
58820
+ identifier: z39.string().min(1)
58821
+ }).passthrough();
58822
+ var entryLinkSchema = z39.object({
58823
+ kind: z39.literal("entry"),
58824
+ contentType: z39.string().min(1),
58825
+ identifier: z39.string().min(1)
58826
+ }).passthrough();
58827
+ var linkSchema = z39.union([
58828
+ internalLinkSchema,
58829
+ externalLinkSchema,
58830
+ customLinkSchema,
58831
+ pageLinkSchema,
58832
+ entryLinkSchema
58764
58833
  ]);
58765
- function buildRichTextSchema(options) {
58766
- let schema = RichTextValueSchema;
58767
- if (options?.required) {
58768
- const label = options.label ?? "This field";
58769
- schema = schema.refine(
58770
- (val) => {
58771
- const doc = isRecord2(val) && "doc" in val ? val.doc : val;
58772
- const content = isRecord2(doc) ? doc.content : void 0;
58773
- if (!Array.isArray(content) || content.length === 0) return false;
58774
- const first = content[0];
58775
- if (content.length === 1 && isRecord2(first) && first.type === "paragraph" && (!("content" in first) || first.content == null)) {
58776
- return false;
58777
- }
58778
- return true;
58779
- },
58780
- {
58781
- message: `${label} is required`
58782
- }
58783
- );
58784
- }
58785
- return schema;
58786
- }
58787
58834
 
58788
- // ../blocks/src/system/manifest/validation.ts
58789
- function isEmpty(value) {
58790
- if (typeof value === "string" && value.trim() === "") return true;
58791
- if (value === null || value === void 0) return true;
58792
- if (Array.isArray(value) && value.length === 0) return true;
58793
- if (isEmptyRichTextDoc(value)) return true;
58794
- return false;
58835
+ // ../blocks/src/system/manifest/fieldValidation/index.ts
58836
+ init_schema2();
58837
+ var TEL_RE = /^[+()0-9\s-]{3,}$/;
58838
+ var SLUG_PATTERN = /^(?:[a-z0-9]+(?:-[a-z0-9]+)*)(?:\/(?:[a-z0-9]+(?:-[a-z0-9]+)*))*$/;
58839
+ var ALLOWED_URL_PROTOCOLS = ["http:", "https:"];
58840
+ function assertNever6(value) {
58841
+ throw new Error(`Unhandled field validation variant: ${JSON.stringify(value)}`);
58795
58842
  }
58796
- function isEmptyRichTextDoc(value) {
58797
- if (!value || typeof value !== "object") return false;
58798
- const obj = value;
58799
- const doc = "doc" in obj ? obj.doc : obj;
58800
- if (!doc || typeof doc !== "object") return false;
58801
- const docObj = doc;
58802
- if (docObj.type !== "doc") return false;
58803
- const content = docObj.content;
58804
- if (!Array.isArray(content) || content.length === 0) return true;
58805
- if (content.length === 1) {
58806
- const first = content[0];
58807
- if (first.type === "paragraph" && (!first.content || first.content.length === 0)) {
58808
- return true;
58809
- }
58810
- }
58811
- return false;
58843
+ function validationContext(options = {}) {
58844
+ const isDraft = options.mode === "draft";
58845
+ return {
58846
+ allowNull: options.allowNull ?? true,
58847
+ allowIncomplete: isDraft || (options.allowIncomplete ?? false)
58848
+ };
58812
58849
  }
58813
- function preprocessEmptyValues(content) {
58814
- if (!content || typeof content !== "object" || Array.isArray(content)) {
58815
- return {};
58816
- }
58817
- const result = {};
58818
- for (const [key, value] of Object.entries(content)) {
58819
- result[key] = isEmpty(value) ? void 0 : value;
58850
+ function fieldIssueToMessage(issue2) {
58851
+ switch (issue2.kind) {
58852
+ case "required":
58853
+ return "This field is required";
58854
+ case "wrongType":
58855
+ return `${issue2.label} needs ${issue2.expected}`;
58856
+ case "tooLong":
58857
+ return `Use ${issue2.maximum} characters or fewer`;
58858
+ case "invalidEmail":
58859
+ return "Enter a valid email address";
58860
+ case "invalidPhone":
58861
+ return "Enter a valid phone number";
58862
+ case "invalidPattern":
58863
+ return "Check the format and try again";
58864
+ case "invalidUrl":
58865
+ return "Enter a valid web address";
58866
+ case "invalidNumber":
58867
+ return `${issue2.label} needs a number`;
58868
+ case "tooSmall":
58869
+ return `${issue2.label} must be ${issue2.minimum} or more`;
58870
+ case "tooLarge":
58871
+ return `${issue2.label} must be ${issue2.maximum} or less`;
58872
+ case "invalidSlug":
58873
+ return `${issue2.label} can only use lowercase letters, numbers, and dashes`;
58874
+ case "invalidOption":
58875
+ return `Choose one of the available options for ${issue2.label}`;
58876
+ case "tooFewItems":
58877
+ return `${issue2.label} must have at least ${issue2.minimum} ${pluralize(issue2.itemLabel, issue2.minimum)}`;
58878
+ case "tooManyItems":
58879
+ return `${issue2.label} must have at most ${issue2.maximum} ${pluralize(issue2.itemLabel, issue2.maximum)}`;
58880
+ case "invalidRichText":
58881
+ return `${issue2.label} must be valid rich text`;
58882
+ case "invalidMedia":
58883
+ return `${issue2.label} must be a valid media item`;
58884
+ case "invalidLink":
58885
+ return `${issue2.label} must be a valid link`;
58886
+ case "invalidReference":
58887
+ return `${issue2.label} must reference a valid item`;
58888
+ default:
58889
+ return assertNever6(issue2);
58820
58890
  }
58821
- return result;
58822
58891
  }
58823
- function createManifestValidator(manifestOrFields, options = {}) {
58824
- const allowNull = options.allowNull ?? true;
58825
- const isDraft = options.mode === "draft";
58826
- const allowIncomplete = isDraft || (options.allowIncomplete ?? false);
58827
- const shape = {};
58828
- const fields3 = Array.isArray(manifestOrFields) ? manifestOrFields : manifestOrFields.fields ?? [];
58829
- for (const field of fields3) {
58830
- shape[field.id] = buildFieldSchema(field, allowNull, allowIncomplete);
58831
- }
58832
- const baseSchema = z40.object(shape).catchall(z40.unknown()).passthrough();
58833
- if (isDraft) {
58834
- return z40.preprocess(preprocessEmptyValues, baseSchema);
58835
- }
58836
- return baseSchema;
58892
+ function pluralize(label, count) {
58893
+ if (count === 1) return label;
58894
+ return label.endsWith("s") ? label : `${label}s`;
58837
58895
  }
58838
- function buildFieldSchema(field, allowNull, allowIncomplete = false) {
58896
+ function deriveFieldValidationPlan(field, path = [field.id]) {
58839
58897
  const required = Boolean(field.required);
58840
- let schema;
58841
58898
  switch (field.type) {
58842
- case "text":
58843
- schema = buildTextSchema(field);
58844
- break;
58845
- case "richText":
58846
- schema = buildRichTextSchema2();
58847
- break;
58848
- case "media": {
58849
- const baseMediaSchema = z40.record(z40.string(), z40.unknown());
58850
- const isRequired = Boolean(field.required);
58851
- schema = isRequired ? baseMediaSchema : baseMediaSchema.nullable();
58852
- break;
58899
+ case "text": {
58900
+ const inputType = field.ui?.inputType;
58901
+ if (inputType === "number") {
58902
+ const constraints2 = commonConstraints(required, { kind: "numberType" });
58903
+ if (typeof field.ui?.min === "number") constraints2.push({ kind: "numberMin", minimum: field.ui.min });
58904
+ if (typeof field.ui?.max === "number") constraints2.push({ kind: "numberMax", maximum: field.ui.max });
58905
+ return makePlan("number", "number", field, path, required, constraints2);
58906
+ }
58907
+ const constraints = commonConstraints(required, { kind: "textType" });
58908
+ if (inputType === "email") constraints.push({ kind: "emailFormat" });
58909
+ if (inputType === "tel") constraints.push({ kind: "phoneFormat" });
58910
+ if (field.ui?.pattern) constraints.push({ kind: "patternFormat", pattern: field.ui.pattern });
58911
+ if (typeof field.maxLength === "number") constraints.push({ kind: "maxLength", maximum: field.maxLength });
58912
+ return makePlan("string", "string", field, path, required, constraints);
58913
+ }
58914
+ case "number": {
58915
+ const constraints = commonConstraints(required, { kind: "numberType" });
58916
+ if (typeof field.min === "number") constraints.push({ kind: "numberMin", minimum: field.min });
58917
+ if (typeof field.max === "number") constraints.push({ kind: "numberMax", maximum: field.max });
58918
+ return makePlan("number", "number", field, path, required, constraints);
58919
+ }
58920
+ case "slug": {
58921
+ const constraints = commonConstraints(required, { kind: "textType" }, { kind: "slugFormat" });
58922
+ if (typeof field.maxLength === "number") constraints.push({ kind: "maxLength", maximum: field.maxLength });
58923
+ return makePlan("string", "string", field, path, required, constraints);
58853
58924
  }
58854
- case "boolean":
58855
- schema = z40.boolean();
58856
- break;
58857
- case "slug":
58858
- schema = buildSlugSchema(field);
58859
- break;
58860
58925
  case "url":
58861
- schema = buildUrlSchema(field);
58862
- break;
58863
- case "link":
58864
- schema = buildLinkSchema();
58865
- break;
58866
- case "select":
58867
- schema = buildSelectSchema(field);
58868
- break;
58926
+ return makePlan("string", "string", field, path, required, commonConstraints(
58927
+ required,
58928
+ { kind: "textType" },
58929
+ { kind: "urlFormat", allowRelative: Boolean(field.allowRelative) }
58930
+ ));
58869
58931
  case "reference":
58870
- schema = buildReferenceSchema(field);
58871
- break;
58932
+ return makePlan("string", "string", field, path, required, commonConstraints(required, { kind: "referenceText" }));
58933
+ case "date":
58934
+ case "time":
58935
+ case "datetime":
58936
+ return makePlan("string", "string", field, path, required, commonConstraints(required, { kind: "textType" }));
58937
+ case "select":
58938
+ return makePlan("select", "select", field, path, required, commonConstraints(required, {
58939
+ kind: "selectOption",
58940
+ source: resolveSelectConstraintSource(field),
58941
+ multiple: Boolean(field.multiple)
58942
+ }));
58943
+ case "richText":
58944
+ return makePlan("richText", "object", field, path, required, commonConstraints(required, { kind: "richTextDoc" }));
58945
+ case "media":
58946
+ return makePlan("media", "object", field, path, required, commonConstraints(required, { kind: "mediaObject" }));
58947
+ case "link":
58948
+ return makePlan("link", "object", field, path, required, commonConstraints(required, { kind: "linkObject" }));
58949
+ case "boolean":
58950
+ return makePlan("boolean", "boolean", field, path, required, requiredConstraints(required));
58872
58951
  case "repeater":
58873
- schema = buildRepeaterSchema(field, allowNull, allowIncomplete);
58874
- break;
58952
+ return {
58953
+ ...makePlan("repeater", "array", field, path, required, commonConstraints(required, { kind: "arrayType" })),
58954
+ ...field.polymorphic && field.itemTypes ? { repeatedItemVariants: deriveRepeatedItemVariants(field, [...path, 0]) } : { repeatedItemPlan: deriveNestedFieldPlans(getRepeaterFields(field), [...path, 0]) },
58955
+ constraints: withRepeaterItemConstraints(field, commonConstraints(required, { kind: "arrayType" }))
58956
+ };
58875
58957
  case "group":
58876
- schema = buildGroupSchema(field, allowNull, allowIncomplete);
58877
- break;
58958
+ case "modal":
58959
+ return {
58960
+ ...makePlan("group", "object", field, path, required, requiredConstraints(required)),
58961
+ children: deriveNestedFieldPlans(field.schema?.fields ?? [], path),
58962
+ allowNullChildren: field.type === "group" && field.ui?.widget === "locationPicker"
58963
+ };
58964
+ case "tabGroup":
58965
+ return {
58966
+ ...makePlan("group", "object", field, path, required, requiredConstraints(required)),
58967
+ children: field.tabs.flatMap((tab) => deriveNestedFieldPlans(tab.fields, path))
58968
+ };
58969
+ case "presetOrCustom":
58970
+ case "contentTypeSelect":
58971
+ case "entryPicker":
58972
+ return makePlan("passthrough", "unknown", field, path, false, []);
58878
58973
  default:
58879
- schema = z40.unknown();
58880
- break;
58974
+ return assertNever6(field);
58881
58975
  }
58882
- return finalizeSchema(schema, required, allowNull, allowIncomplete);
58883
58976
  }
58884
- function buildFriendlyStringSchema(field) {
58885
- return z40.string({
58886
- error: (issue) => issue.input === void 0 || issue.input === null ? "This field is required" : `${field.label} needs text`
58887
- });
58977
+ function commonConstraints(required, ...specific) {
58978
+ return required ? [{ kind: "required" }, ...specific] : [...specific];
58888
58979
  }
58889
- function buildTextSchema(field) {
58890
- const ui = field.ui ?? {};
58891
- const inputType = ui?.inputType;
58892
- let schema;
58893
- if (inputType === "number") {
58894
- schema = z40.coerce.number({
58895
- error: (issue) => issue.input === void 0 ? `${field.label} is required` : `${field.label} needs a number`
58896
- });
58897
- if (typeof ui?.min === "number") {
58898
- schema = schema.min(
58899
- ui.min,
58900
- `${field.label} must be ${ui.min} or more`
58901
- );
58902
- }
58903
- if (typeof ui?.max === "number") {
58904
- schema = schema.max(
58905
- ui.max,
58906
- `${field.label} must be ${ui.max} or less`
58907
- );
58908
- }
58909
- } else {
58910
- schema = buildFriendlyStringSchema(field);
58911
- if (inputType === "email") {
58912
- schema = schema.email("Enter a valid email address");
58913
- }
58914
- if (inputType === "tel") {
58915
- const TEL_RE = /^[+()0-9\s\-]{3,}$/;
58916
- schema = schema.regex(
58917
- TEL_RE,
58918
- "Enter a valid phone number"
58919
- );
58920
- }
58921
- if (ui?.pattern) {
58922
- try {
58923
- const re = new RegExp(ui.pattern);
58924
- schema = schema.regex(
58925
- re,
58926
- `${field.label} is not in the right format`
58927
- );
58928
- } catch {
58929
- }
58930
- }
58931
- if (field.maxLength) {
58932
- schema = schema.max(
58933
- field.maxLength,
58934
- `${field.label} must be ${field.maxLength} characters or less`
58935
- );
58936
- }
58937
- if (field.required) {
58938
- schema = schema.min(1, { message: `${field.label} is required` }).refine((v) => v.trim().length > 0, { message: `${field.label} is required` });
58980
+ function requiredConstraints(required) {
58981
+ return required ? [{ kind: "required" }] : [];
58982
+ }
58983
+ function makePlan(kind, valueKind, field, path, required, constraints) {
58984
+ return {
58985
+ kind,
58986
+ valueKind,
58987
+ fieldId: field.id,
58988
+ label: field.label,
58989
+ fieldType: field.type,
58990
+ path,
58991
+ required,
58992
+ constraints
58993
+ };
58994
+ }
58995
+ function withRepeaterItemConstraints(field, constraints) {
58996
+ const next = [...constraints];
58997
+ if (typeof field.minItems === "number") next.push({ kind: "minItems", minimum: field.minItems });
58998
+ if (typeof field.maxItems === "number") next.push({ kind: "maxItems", maximum: field.maxItems });
58999
+ return next;
59000
+ }
59001
+ function deriveRepeatedItemVariants(field, parentPath) {
59002
+ return Object.entries(field.itemTypes ?? {}).map(([typeId, itemType]) => ({
59003
+ typeId,
59004
+ fields: deriveNestedFieldPlans(getFlattenedRepeaterFields(itemType.fields), parentPath)
59005
+ }));
59006
+ }
59007
+ function deriveNestedFieldPlans(fields3, parentPath) {
59008
+ return fields3.map((field) => deriveFieldValidationPlan(field, [...parentPath, field.id]));
59009
+ }
59010
+ function getRepeaterFields(field) {
59011
+ const fields3 = field.polymorphic && field.itemTypes ? Object.values(field.itemTypes).flatMap((itemType) => itemType.fields) : field.schema?.fields ?? [];
59012
+ return getFlattenedRepeaterFields(fields3);
59013
+ }
59014
+ function getFlattenedRepeaterFields(fields3) {
59015
+ return fields3.flatMap((child) => {
59016
+ if (child.type === "group" && child.ui?.flattenInRepeater) {
59017
+ return child.schema?.fields ?? [];
58939
59018
  }
59019
+ return child;
59020
+ });
59021
+ }
59022
+ function resolveSelectConstraintSource(field) {
59023
+ const source = normalizeSelectSource(field);
59024
+ switch (source.kind) {
59025
+ case "static":
59026
+ return { kind: "static", values: field.options.map((option) => option.value) };
59027
+ case "site":
59028
+ case "sdk":
59029
+ return { kind: "runtime", source: source.kind };
59030
+ default:
59031
+ return assertNever6(source);
59032
+ }
59033
+ }
59034
+ function normalizeFieldValue(plan, value, ctx) {
59035
+ switch (plan.kind) {
59036
+ case "number":
59037
+ return normalizeNumberInput(value, ctx.allowNull);
59038
+ case "string":
59039
+ return acceptsOptionalBlankAsMissing(plan, value) ? void 0 : value;
59040
+ case "group":
59041
+ return normalizeObjectChildren(plan.children, value, childValidationContext(plan, ctx));
59042
+ case "repeater":
59043
+ return normalizeRepeaterItems(plan, value, ctx);
59044
+ case "boolean":
59045
+ case "richText":
59046
+ case "media":
59047
+ case "link":
59048
+ case "select":
59049
+ case "passthrough":
59050
+ return value;
59051
+ default:
59052
+ return assertNever6(plan);
58940
59053
  }
58941
- return schema;
58942
59054
  }
58943
- function buildRichTextSchema2() {
58944
- return buildRichTextSchema();
59055
+ function normalizeObjectChildren(children, value, ctx) {
59056
+ if (!value || typeof value !== "object" || Array.isArray(value)) return value;
59057
+ const normalized = { ...value };
59058
+ for (const child of children) {
59059
+ normalized[child.fieldId] = normalizeFieldValue(child, normalized[child.fieldId], ctx);
59060
+ }
59061
+ return normalized;
58945
59062
  }
58946
- var SLUG_PATTERN = /^(?:[a-z0-9]+(?:-[a-z0-9]+)*)(?:\/(?:[a-z0-9]+(?:-[a-z0-9]+)*))*$/;
58947
- function buildSlugSchema(field) {
58948
- const message = `${field.label} can only use lowercase letters, numbers, and dashes`;
58949
- let schema = buildFriendlyStringSchema(field).regex(SLUG_PATTERN, message);
58950
- if (field.maxLength) {
58951
- schema = schema.max(
58952
- field.maxLength,
58953
- `${field.label} must be ${field.maxLength} characters or less`
58954
- );
59063
+ function normalizeRepeaterItems(plan, value, ctx) {
59064
+ if (!Array.isArray(value)) return value;
59065
+ return value.map((item) => {
59066
+ if (!item || typeof item !== "object" || Array.isArray(item)) return item;
59067
+ const itemRecord = item;
59068
+ const fields3 = plan.repeatedItemVariants ? plan.repeatedItemVariants.find((variant) => variant.typeId === itemRecord._type)?.fields : plan.repeatedItemPlan;
59069
+ if (!fields3) return item;
59070
+ return normalizeObjectChildren(fields3, itemRecord, ctx);
59071
+ });
59072
+ }
59073
+ function normalizeNumberInput(value, allowNull) {
59074
+ if (value === "") return void 0;
59075
+ if (typeof value === "string" && value.trim() !== "") return Number(value);
59076
+ return value;
59077
+ }
59078
+ function acceptsOptionalBlankAsMissing(plan, value) {
59079
+ if (plan.required || typeof value !== "string" || value.trim() !== "") return false;
59080
+ return plan.constraints.some(
59081
+ (constraint) => constraint.kind === "urlFormat" || constraint.kind === "slugFormat" || constraint.kind === "emailFormat" || constraint.kind === "phoneFormat" || constraint.kind === "patternFormat"
59082
+ );
59083
+ }
59084
+ function validateNormalizedFieldValue(plan, value, ctx) {
59085
+ if (value === null && (ctx.allowNull || acceptsOptionalNullValue(plan))) return [];
59086
+ if (isMissingForPlan(plan, value)) {
59087
+ return shouldRequireValue(plan, value, ctx) ? [requiredIssue(plan, value)] : [];
58955
59088
  }
58956
- if (field.required) {
58957
- schema = schema.min(1, { message: `${field.label} is required` });
59089
+ switch (plan.kind) {
59090
+ case "string":
59091
+ return validateStringPlan(plan, value);
59092
+ case "number":
59093
+ return validateNumberPlan(plan, value);
59094
+ case "boolean":
59095
+ return typeof value === "boolean" ? [] : [issue(plan, "wrongType", { expected: "a true/false value" })];
59096
+ case "select":
59097
+ return validateSelectPlan(plan, value);
59098
+ case "richText":
59099
+ return isValidRichTextDoc(value) ? [] : [issue(plan, "invalidRichText")];
59100
+ case "media":
59101
+ return isPlainObject2(value) ? [] : [issue(plan, "invalidMedia")];
59102
+ case "link":
59103
+ return linkSchema.safeParse(value).success ? [] : [issue(plan, "invalidLink")];
59104
+ case "repeater":
59105
+ return validateRepeaterPlan(plan, value, ctx);
59106
+ case "group":
59107
+ return validateGroupPlan(plan, value, ctx);
59108
+ case "passthrough":
59109
+ return [];
59110
+ default:
59111
+ return assertNever6(plan);
58958
59112
  }
58959
- return schema;
58960
59113
  }
58961
- var ALLOWED_URL_PROTOCOLS = ["http:", "https:"];
58962
- function buildUrlSchema(field) {
58963
- const message = "Enter a valid web address";
58964
- const validate = (value) => {
58965
- if (!value) {
58966
- return !field.required;
58967
- }
58968
- if (field.allowRelative && value.startsWith("/")) {
58969
- return true;
58970
- }
58971
- try {
58972
- const parsed = new URL(value);
58973
- return ALLOWED_URL_PROTOCOLS.includes(
58974
- parsed.protocol
58975
- );
58976
- } catch {
58977
- return false;
58978
- }
58979
- };
58980
- let schema = buildFriendlyStringSchema(field).trim().refine(validate, message);
58981
- if (field.required) {
58982
- schema = schema.min(1, { message: `${field.label} is required` });
59114
+ function shouldRequireValue(plan, value, ctx) {
59115
+ if (!plan.required || ctx.allowIncomplete) return false;
59116
+ if (value === null && ctx.allowNull) return false;
59117
+ return true;
59118
+ }
59119
+ function acceptsOptionalNullValue(plan) {
59120
+ return !plan.required && (plan.kind === "media" || plan.kind === "number");
59121
+ }
59122
+ function isMissingForPlan(plan, value) {
59123
+ if (value === void 0) return true;
59124
+ if (value === null) return plan.required;
59125
+ if (typeof value === "string" && value.trim() === "") return true;
59126
+ if (Array.isArray(value) && value.length === 0) return true;
59127
+ return false;
59128
+ }
59129
+ function validateStringPlan(plan, value) {
59130
+ if (typeof value !== "string") return [issue(plan, "wrongType", { expected: "text" })];
59131
+ return plan.constraints.flatMap((constraint) => validateStringConstraint(plan, constraint, value));
59132
+ }
59133
+ function validateStringConstraint(plan, constraint, value) {
59134
+ switch (constraint.kind) {
59135
+ case "required":
59136
+ case "textType":
59137
+ case "referenceText":
59138
+ return [];
59139
+ case "maxLength":
59140
+ return value.length > constraint.maximum ? [issue(plan, "tooLong", { maximum: constraint.maximum })] : [];
59141
+ case "emailFormat":
59142
+ return z40.email().safeParse(value).success ? [] : [issue(plan, "invalidEmail")];
59143
+ case "phoneFormat":
59144
+ return TEL_RE.test(value) ? [] : [issue(plan, "invalidPhone")];
59145
+ case "patternFormat": {
59146
+ const re = compilePattern(constraint.pattern);
59147
+ return re && !re.test(value) ? [issue(plan, "invalidPattern")] : [];
59148
+ }
59149
+ case "urlFormat":
59150
+ return isValidUrl(value, constraint.allowRelative) ? [] : [issue(plan, "invalidUrl")];
59151
+ case "slugFormat":
59152
+ return SLUG_PATTERN.test(value) ? [] : [issue(plan, "invalidSlug")];
59153
+ default:
59154
+ return assertNever6(constraint);
58983
59155
  }
58984
- return schema;
58985
59156
  }
58986
- var nullableString = z40.union([z40.string().min(1), z40.null()]);
58987
- var internalLinkSchema = z40.object({
58988
- kind: z40.literal("internal"),
58989
- routeId: z40.string().min(1),
58990
- entityId: z40.string().min(1).optional(),
58991
- entityType: z40.enum(["page", "content"]).optional(),
58992
- href: nullableString.optional(),
58993
- title: nullableString.optional(),
58994
- typeLabel: nullableString.optional(),
58995
- contentTypeKey: nullableString.optional(),
58996
- contentTypeName: nullableString.optional(),
58997
- updatedAt: nullableString.optional()
58998
- }).passthrough();
58999
- var externalLinkSchema = z40.object({
59000
- kind: z40.literal("external"),
59001
- href: z40.string().min(1)
59002
- }).passthrough();
59003
- var customLinkSchema = z40.object({
59004
- kind: z40.literal("url"),
59005
- href: z40.string().min(1)
59006
- }).passthrough();
59007
- var pageLinkSchema = z40.object({
59008
- kind: z40.literal("page"),
59009
- identifier: z40.string().min(1)
59010
- }).passthrough();
59011
- var entryLinkSchema = z40.object({
59012
- kind: z40.literal("entry"),
59013
- contentType: z40.string().min(1),
59014
- identifier: z40.string().min(1)
59015
- }).passthrough();
59016
- var linkSchema = z40.union([
59017
- internalLinkSchema,
59018
- externalLinkSchema,
59019
- customLinkSchema,
59020
- pageLinkSchema,
59021
- entryLinkSchema
59022
- ]);
59023
- function buildLinkSchema() {
59024
- return linkSchema;
59157
+ function validateNumberPlan(plan, value) {
59158
+ if (!isValidNumber(value)) return [issue(plan, "invalidNumber")];
59159
+ return plan.constraints.flatMap((constraint) => validateNumberConstraint(plan, constraint, Number(value)));
59025
59160
  }
59026
- function assertNeverSelectSource2(value) {
59027
- throw new Error(`Unhandled select source: ${JSON.stringify(value)}`);
59161
+ function validateNumberConstraint(plan, constraint, value) {
59162
+ switch (constraint.kind) {
59163
+ case "required":
59164
+ case "numberType":
59165
+ return [];
59166
+ case "numberMin":
59167
+ return value < constraint.minimum ? [issue(plan, "tooSmall", { minimum: constraint.minimum })] : [];
59168
+ case "numberMax":
59169
+ return value > constraint.maximum ? [issue(plan, "tooLarge", { maximum: constraint.maximum })] : [];
59170
+ default:
59171
+ return assertNever6(constraint);
59172
+ }
59028
59173
  }
59029
- function buildSelectSchema(field) {
59030
- const source = normalizeSelectSource(field);
59031
- const singleValueSchema = (() => {
59032
- switch (source.kind) {
59033
- case "sdk":
59034
- case "site":
59035
- return buildFriendlyStringSchema(field);
59036
- case "static": {
59037
- const values = field.options.map((option) => option.value);
59038
- return buildFriendlyStringSchema(field).refine(
59039
- (value) => values.includes(value),
59040
- `Choose one of the available options for ${field.label}`
59041
- );
59042
- }
59174
+ function validateSelectPlan(plan, value) {
59175
+ const constraint = plan.constraints.find((candidate) => candidate.kind === "selectOption");
59176
+ if (!constraint || constraint.source.kind === "runtime") return [];
59177
+ return isValidSelectValue(value, constraint.source.values, constraint.multiple) ? [] : [issue(plan, "invalidOption")];
59178
+ }
59179
+ function validateRepeaterPlan(plan, value, ctx) {
59180
+ if (!Array.isArray(value)) return [issue(plan, "wrongType", { expected: "a list" })];
59181
+ const constraintIssues = plan.constraints.flatMap((constraint) => {
59182
+ switch (constraint.kind) {
59183
+ case "required":
59184
+ case "arrayType":
59185
+ return [];
59186
+ case "minItems":
59187
+ return value.length < constraint.minimum ? [issue(plan, "tooFewItems", { minimum: constraint.minimum, itemLabel: "item" })] : [];
59188
+ case "maxItems":
59189
+ return value.length > constraint.maximum ? [issue(plan, "tooManyItems", { maximum: constraint.maximum, itemLabel: "item" })] : [];
59043
59190
  default:
59044
- return assertNeverSelectSource2(source);
59191
+ return assertNever6(constraint);
59045
59192
  }
59046
- })();
59047
- if (field.multiple) {
59048
- const arraySchema = z40.array(singleValueSchema);
59049
- return field.required ? arraySchema.min(1, { message: "This field is required" }) : arraySchema.nullable();
59050
- }
59051
- return field.required ? singleValueSchema : singleValueSchema.nullable();
59193
+ });
59194
+ return [
59195
+ ...constraintIssues,
59196
+ ...value.flatMap((item, index) => validateRepeaterItem(plan, item, index, ctx))
59197
+ ];
59052
59198
  }
59053
- function buildReferenceSchema(field) {
59054
- let schema = z40.string({
59055
- error: (issue) => issue.input === void 0 || issue.input === null ? "This field is required" : `${field.label} needs text`
59199
+ function validateRepeaterItem(plan, item, index, ctx) {
59200
+ if (!isPlainObject2(item)) return [];
59201
+ const itemType = item._type;
59202
+ const fields3 = plan.repeatedItemVariants ? plan.repeatedItemVariants.find((variant) => variant.typeId === itemType)?.fields : plan.repeatedItemPlan;
59203
+ if (!fields3) return [];
59204
+ return fields3.flatMap((childPlan) => {
59205
+ const indexedPlan = withIndexedPath(childPlan, plan.path, index);
59206
+ return validateNormalizedFieldValue(indexedPlan, item[childPlan.fieldId], ctx);
59056
59207
  });
59057
- if (field.required) {
59058
- schema = schema.min(1, { message: `${field.label} is required` });
59059
- }
59060
- return schema;
59061
59208
  }
59062
- function buildRepeaterSchema(field, allowNull, allowIncomplete) {
59063
- const parsed = fieldSchema.array().parse(field.schema?.fields ?? []);
59064
- const childShape = {};
59065
- for (const child of parsed) {
59066
- if (child.type === "group" && child.ui?.flattenInRepeater) {
59067
- const groupParsed = fieldSchema.array().parse(child.schema?.fields ?? []);
59068
- for (const gc of groupParsed) {
59069
- childShape[gc.id] = buildFieldSchema(gc, allowNull, allowIncomplete);
59070
- }
59071
- } else {
59072
- childShape[child.id] = buildFieldSchema(child, allowNull, allowIncomplete);
59209
+ function validateGroupPlan(plan, value, ctx) {
59210
+ if (!isPlainObject2(value)) return [issue(plan, "wrongType", { expected: "an object" })];
59211
+ const childCtx = childValidationContext(plan, ctx);
59212
+ return plan.children.flatMap((childPlan) => validateNormalizedFieldValue(childPlan, value[childPlan.fieldId], childCtx));
59213
+ }
59214
+ function childValidationContext(plan, ctx) {
59215
+ return plan.allowNullChildren ? { ...ctx, allowNull: true } : ctx;
59216
+ }
59217
+ function withIndexedPath(plan, parentPath, index) {
59218
+ const suffix = plan.path.slice(parentPath.length + 1);
59219
+ return {
59220
+ ...plan,
59221
+ path: [...parentPath, index, plan.fieldId, ...suffix]
59222
+ };
59223
+ }
59224
+ function issue(plan, kind, extra) {
59225
+ return {
59226
+ kind,
59227
+ path: plan.path,
59228
+ fieldId: plan.fieldId,
59229
+ label: plan.label,
59230
+ ...extra ?? {}
59231
+ };
59232
+ }
59233
+ function requiredIssue(plan, value) {
59234
+ if (typeof value === "string") return issue(plan, "required", { emptyOrigin: "string" });
59235
+ if (Array.isArray(value)) return issue(plan, "required", { emptyOrigin: "array" });
59236
+ return issue(plan, "required");
59237
+ }
59238
+ function fieldPlanToZod(plan, options = {}) {
59239
+ const ctx = validationContext(options);
59240
+ return z40.any().transform((value) => normalizeFieldValue(plan, value, ctx)).superRefine((value, zodCtx) => {
59241
+ for (const validationIssue of validateNormalizedFieldValue(plan, value, ctx)) {
59242
+ addFieldIssueToZodContext(zodCtx, validationIssue);
59073
59243
  }
59244
+ });
59245
+ }
59246
+ function addFieldIssueToZodContext(zodCtx, validationIssue) {
59247
+ const message = fieldIssueToMessage(validationIssue);
59248
+ switch (validationIssue.kind) {
59249
+ case "required":
59250
+ if (validationIssue.emptyOrigin) {
59251
+ zodCtx.addIssue({
59252
+ code: "too_small",
59253
+ origin: validationIssue.emptyOrigin,
59254
+ minimum: 1,
59255
+ inclusive: true,
59256
+ message
59257
+ });
59258
+ return;
59259
+ }
59260
+ zodCtx.addIssue({ code: "invalid_type", expected: "nonoptional", message });
59261
+ return;
59262
+ case "tooLong":
59263
+ zodCtx.addIssue({
59264
+ code: "too_big",
59265
+ origin: "string",
59266
+ maximum: validationIssue.maximum,
59267
+ inclusive: true,
59268
+ message
59269
+ });
59270
+ return;
59271
+ case "invalidOption":
59272
+ zodCtx.addIssue({ code: "invalid_value", values: [], message });
59273
+ return;
59274
+ case "wrongType":
59275
+ case "invalidEmail":
59276
+ case "invalidPhone":
59277
+ case "invalidPattern":
59278
+ case "invalidUrl":
59279
+ case "invalidNumber":
59280
+ case "tooSmall":
59281
+ case "tooLarge":
59282
+ case "invalidSlug":
59283
+ case "tooFewItems":
59284
+ case "tooManyItems":
59285
+ case "invalidRichText":
59286
+ case "invalidMedia":
59287
+ case "invalidLink":
59288
+ case "invalidReference":
59289
+ zodCtx.addIssue({ code: "custom", message });
59290
+ return;
59291
+ default:
59292
+ assertNever6(validationIssue);
59074
59293
  }
59075
- let schema = z40.object(childShape).catchall(z40.unknown()).passthrough();
59076
- let arraySchema = z40.array(schema);
59077
- if (typeof field.minItems === "number") {
59078
- arraySchema = arraySchema.min(field.minItems);
59294
+ }
59295
+ function compilePattern(pattern) {
59296
+ try {
59297
+ return new RegExp(pattern);
59298
+ } catch {
59299
+ return null;
59079
59300
  }
59080
- if (typeof field.maxItems === "number") {
59081
- arraySchema = arraySchema.max(field.maxItems);
59301
+ }
59302
+ function isValidNumber(value) {
59303
+ return typeof value === "number" && Number.isFinite(value);
59304
+ }
59305
+ function isValidUrl(value, allowRelative) {
59306
+ if (!value) return false;
59307
+ if (allowRelative && value.startsWith("/")) return true;
59308
+ try {
59309
+ const parsed = new URL(value);
59310
+ return ALLOWED_URL_PROTOCOLS.includes(parsed.protocol);
59311
+ } catch {
59312
+ return false;
59082
59313
  }
59083
- return arraySchema;
59084
59314
  }
59085
- function buildGroupSchema(field, allowNull, allowIncomplete) {
59086
- const parsed = fieldSchema.array().parse(field.schema?.fields ?? []);
59087
- const childShape = {};
59088
- for (const child of parsed) {
59089
- childShape[child.id] = buildFieldSchema(child, allowNull, allowIncomplete);
59315
+ function isValidSelectValue(value, values, multiple) {
59316
+ if (multiple) {
59317
+ return Array.isArray(value) && value.every((item) => typeof item === "string" && values.includes(item));
59090
59318
  }
59091
- return z40.object(childShape).catchall(z40.unknown()).passthrough();
59319
+ return typeof value === "string" && values.includes(value);
59092
59320
  }
59093
- function finalizeSchema(schema, required, allowNull, allowIncomplete = false) {
59094
- if (required) {
59095
- if (allowIncomplete) {
59096
- return allowNull ? schema.or(z40.null()).optional() : schema.optional();
59097
- }
59098
- return allowNull ? schema.or(z40.null()) : schema;
59321
+ function isEmptyValue(value) {
59322
+ if (value === null || value === void 0) return true;
59323
+ if (typeof value === "string" && value.trim() === "") return true;
59324
+ if (Array.isArray(value) && value.length === 0) return true;
59325
+ if (isEmptyRichTextDoc(value)) return true;
59326
+ return false;
59327
+ }
59328
+ function isPlainObject2(value) {
59329
+ return Boolean(value && typeof value === "object" && !Array.isArray(value));
59330
+ }
59331
+ function isValidRichTextDoc(value) {
59332
+ const doc = richTextDoc(value);
59333
+ return Boolean(isPlainObject2(doc) && doc.type === "doc");
59334
+ }
59335
+ function isEmptyRichTextDoc(value) {
59336
+ const doc = richTextDoc(value);
59337
+ if (!isPlainObject2(doc)) return false;
59338
+ if (doc.type !== "doc") return false;
59339
+ const content = doc.content;
59340
+ if (!Array.isArray(content) || content.length === 0) return true;
59341
+ if (content.length !== 1) return false;
59342
+ const first = content[0];
59343
+ return first?.type === "paragraph" && (!Array.isArray(first.content) || first.content.length === 0);
59344
+ }
59345
+ function richTextDoc(value) {
59346
+ if (!isPlainObject2(value)) return value;
59347
+ return isPlainObject2(value.doc) ? value.doc : value;
59348
+ }
59349
+
59350
+ // ../blocks/src/system/manifest/registry.ts
59351
+ var REGISTRY_SYMBOL = /* @__PURE__ */ Symbol.for("@riverbankcms/blocks/manifest-registry");
59352
+ var isVitest = typeof process !== "undefined" && typeof process.env !== "undefined" && process.env.VITEST === "true";
59353
+ var globalScope = globalThis;
59354
+ var manifestStore = isVitest ? /* @__PURE__ */ new Map() : globalScope[REGISTRY_SYMBOL] ?? (globalScope[REGISTRY_SYMBOL] = /* @__PURE__ */ new Map());
59355
+ function registerManifest(manifest) {
59356
+ manifestStore.set(manifest.name, manifest);
59357
+ return manifest;
59358
+ }
59359
+
59360
+ // ../blocks/src/system/manifest/validation.ts
59361
+ import { z as z41 } from "zod";
59362
+ function preprocessEmptyValues(content) {
59363
+ if (!content || typeof content !== "object" || Array.isArray(content)) {
59364
+ return {};
59099
59365
  }
59100
- return allowNull ? schema.optional().nullable() : schema.optional();
59366
+ const result = {};
59367
+ for (const [key, value] of Object.entries(content)) {
59368
+ result[key] = isEmptyValue(value) ? void 0 : value;
59369
+ }
59370
+ return result;
59371
+ }
59372
+ function createManifestValidator(manifestOrFields, options = {}) {
59373
+ const isDraft = options.mode === "draft";
59374
+ const shape = {};
59375
+ const fields3 = Array.isArray(manifestOrFields) ? manifestOrFields : manifestOrFields.fields ?? [];
59376
+ for (const field of fields3) {
59377
+ shape[field.id] = buildFieldSchema(field, options);
59378
+ }
59379
+ const baseSchema = z41.object(shape).catchall(z41.unknown()).passthrough();
59380
+ if (isDraft) {
59381
+ return z41.preprocess(preprocessEmptyValues, baseSchema);
59382
+ }
59383
+ return baseSchema;
59384
+ }
59385
+ function buildFieldSchema(field, options) {
59386
+ return fieldPlanToZod(deriveFieldValidationPlan(field), options);
59101
59387
  }
59102
59388
 
59103
59389
  // ../blocks/src/system/manifest/variantKey.ts
@@ -59435,51 +59721,51 @@ init_personalities();
59435
59721
 
59436
59722
  // ../theme-core/src/palette/variants/types.ts
59437
59723
  init_styleTags();
59438
- import { z as z45 } from "zod";
59724
+ import { z as z46 } from "zod";
59439
59725
 
59440
59726
  // ../theme-core/src/schema.ts
59441
- import { z as z44 } from "zod";
59727
+ import { z as z45 } from "zod";
59442
59728
 
59443
59729
  // ../theme-core/src/lib/media.ts
59444
- import z41 from "zod";
59445
- var hotspotSchema2 = z41.object({
59446
- x: z41.number().min(0).max(1),
59447
- y: z41.number().min(0).max(1),
59448
- radius: z41.number().optional()
59449
- });
59450
- var rotationSchema2 = z41.union([z41.literal(0), z41.literal(90), z41.literal(180), z41.literal(270)]);
59451
- var rectSchema2 = z41.tuple([z41.number(), z41.number(), z41.number(), z41.number()]);
59452
- var aspectCropSchema2 = z41.object({
59453
- aspect: z41.preprocess((value) => value == null ? void 0 : value, z41.string().optional()),
59454
- rect: z41.preprocess((value) => value == null ? void 0 : value, rectSchema2.optional()),
59455
- hotspot: z41.preprocess((value) => value == null ? void 0 : value, hotspotSchema2.optional()),
59456
- rotation: z41.preprocess((value) => value == null ? void 0 : value, rotationSchema2.optional())
59457
- });
59458
- var transformSchema2 = z41.object({
59459
- aspectCrops: z41.preprocess((value) => {
59730
+ import z42 from "zod";
59731
+ var hotspotSchema2 = z42.object({
59732
+ x: z42.number().min(0).max(1),
59733
+ y: z42.number().min(0).max(1),
59734
+ radius: z42.number().optional()
59735
+ });
59736
+ var rotationSchema2 = z42.union([z42.literal(0), z42.literal(90), z42.literal(180), z42.literal(270)]);
59737
+ var rectSchema2 = z42.tuple([z42.number(), z42.number(), z42.number(), z42.number()]);
59738
+ var aspectCropSchema2 = z42.object({
59739
+ aspect: z42.preprocess((value) => value == null ? void 0 : value, z42.string().optional()),
59740
+ rect: z42.preprocess((value) => value == null ? void 0 : value, rectSchema2.optional()),
59741
+ hotspot: z42.preprocess((value) => value == null ? void 0 : value, hotspotSchema2.optional()),
59742
+ rotation: z42.preprocess((value) => value == null ? void 0 : value, rotationSchema2.optional())
59743
+ });
59744
+ var transformSchema2 = z42.object({
59745
+ aspectCrops: z42.preprocess((value) => {
59460
59746
  if (!value || typeof value !== "object" || Array.isArray(value)) {
59461
59747
  return void 0;
59462
59748
  }
59463
59749
  return value;
59464
- }, z41.record(z41.string(), aspectCropSchema2.catch({}))).optional(),
59750
+ }, z42.record(z42.string(), aspectCropSchema2.catch({}))).optional(),
59465
59751
  rect: rectSchema2.optional(),
59466
59752
  hotspot: hotspotSchema2.optional(),
59467
59753
  rotation: rotationSchema2.optional()
59468
59754
  });
59469
- var mediaSchema2 = z41.object({
59470
- type: z41.enum(["image", "video", "audio", "document", "spreadsheet", "archive"]),
59471
- purpose: z41.string().optional(),
59472
- placeholder: z41.boolean().default(true).optional(),
59473
- assetId: z41.string().optional(),
59474
- identifier: z41.string().optional(),
59475
- src: z41.string().optional(),
59476
- alt: z41.string().optional(),
59477
- filename: z41.string().optional(),
59478
- mimeType: z41.string().optional(),
59479
- width: z41.number().optional(),
59480
- height: z41.number().optional(),
59481
- storageBucket: z41.string().optional(),
59482
- storagePath: z41.string().optional(),
59755
+ var mediaSchema2 = z42.object({
59756
+ type: z42.enum(["image", "video", "audio", "document", "spreadsheet", "archive"]),
59757
+ purpose: z42.string().optional(),
59758
+ placeholder: z42.boolean().default(true).optional(),
59759
+ assetId: z42.string().optional(),
59760
+ identifier: z42.string().optional(),
59761
+ src: z42.string().optional(),
59762
+ alt: z42.string().optional(),
59763
+ filename: z42.string().optional(),
59764
+ mimeType: z42.string().optional(),
59765
+ width: z42.number().optional(),
59766
+ height: z42.number().optional(),
59767
+ storageBucket: z42.string().optional(),
59768
+ storagePath: z42.string().optional(),
59483
59769
  transform: transformSchema2.optional()
59484
59770
  });
59485
59771
 
@@ -59487,43 +59773,43 @@ var mediaSchema2 = z41.object({
59487
59773
  init_buttons();
59488
59774
 
59489
59775
  // ../theme-core/src/cards/types.ts
59490
- import { z as z42 } from "zod";
59491
- var cardSpacingSchema = z42.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
59492
- var gradientDirectionSchema2 = z42.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
59493
- var cardBackgroundSchema = z42.discriminatedUnion("type", [
59494
- z42.object({ type: z42.literal("solid"), colorToken: z42.string() }),
59495
- z42.object({
59496
- type: z42.literal("gradient"),
59497
- fromToken: z42.string(),
59498
- toToken: z42.string(),
59776
+ import { z as z43 } from "zod";
59777
+ var cardSpacingSchema = z43.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
59778
+ var gradientDirectionSchema2 = z43.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
59779
+ var cardBackgroundSchema = z43.discriminatedUnion("type", [
59780
+ z43.object({ type: z43.literal("solid"), colorToken: z43.string() }),
59781
+ z43.object({
59782
+ type: z43.literal("gradient"),
59783
+ fromToken: z43.string(),
59784
+ toToken: z43.string(),
59499
59785
  direction: gradientDirectionSchema2
59500
59786
  }),
59501
- z42.object({ type: z42.literal("transparent") })
59787
+ z43.object({ type: z43.literal("transparent") })
59502
59788
  ]);
59503
- var cardBorderSchema = z42.object({
59504
- widthClass: z42.string(),
59505
- colorToken: z42.string()
59506
- });
59507
- var cardVariantSchema2 = z42.object({
59508
- id: z42.string(),
59509
- name: z42.string().min(1).max(20),
59510
- enabled: z42.boolean(),
59511
- priority: z42.union([z42.literal(1), z42.literal(2), z42.literal(3)]),
59789
+ var cardBorderSchema = z43.object({
59790
+ widthClass: z43.string(),
59791
+ colorToken: z43.string()
59792
+ });
59793
+ var cardVariantSchema2 = z43.object({
59794
+ id: z43.string(),
59795
+ name: z43.string().min(1).max(20),
59796
+ enabled: z43.boolean(),
59797
+ priority: z43.union([z43.literal(1), z43.literal(2), z43.literal(3)]),
59512
59798
  // Appearance (token-based)
59513
59799
  background: cardBackgroundSchema,
59514
59800
  spacing: cardSpacingSchema,
59515
59801
  // Optional overrides (uses theme defaults if not specified)
59516
- shadow: z42.object({
59517
- elevation: z42.enum(["none", "low", "medium", "high"]),
59518
- softness: z42.enum(["crisp", "soft", "hard"]).nullable(),
59519
- position: z42.enum(["bottom", "bottom-right"]).default("bottom")
59802
+ shadow: z43.object({
59803
+ elevation: z43.enum(["none", "low", "medium", "high"]),
59804
+ softness: z43.enum(["crisp", "soft", "hard"]).nullable(),
59805
+ position: z43.enum(["bottom", "bottom-right"]).default("bottom")
59520
59806
  }).optional(),
59521
- corners: z42.enum(["square", "soft", "rounded", "pill"]).optional(),
59807
+ corners: z43.enum(["square", "soft", "rounded", "pill"]).optional(),
59522
59808
  // Border (optional)
59523
59809
  border: cardBorderSchema.optional()
59524
59810
  });
59525
- var cardSystemSchema = z42.object({
59526
- variants: z42.array(cardVariantSchema2).min(1).max(3)
59811
+ var cardSystemSchema = z43.object({
59812
+ variants: z43.array(cardVariantSchema2).min(1).max(3)
59527
59813
  });
59528
59814
 
59529
59815
  // ../theme-core/src/cards/index.ts
@@ -59536,20 +59822,20 @@ init_types5();
59536
59822
  init_types12();
59537
59823
 
59538
59824
  // ../theme-core/src/gradients/types.ts
59539
- import { z as z43 } from "zod";
59540
- var gradientStopSchema = z43.object({
59541
- color: z43.string(),
59825
+ import { z as z44 } from "zod";
59826
+ var gradientStopSchema = z44.object({
59827
+ color: z44.string(),
59542
59828
  // Theme color token name (e.g., 'primary-500')
59543
- position: z43.number().min(0).max(100)
59829
+ position: z44.number().min(0).max(100)
59544
59830
  // Percentage 0-100
59545
59831
  });
59546
- var gradientConfigSchema = z43.object({
59547
- type: z43.enum(["linear", "radial"]),
59548
- angle: z43.number().min(0).max(360).optional(),
59832
+ var gradientConfigSchema = z44.object({
59833
+ type: z44.enum(["linear", "radial"]),
59834
+ angle: z44.number().min(0).max(360).optional(),
59549
59835
  // For linear gradients (degrees)
59550
- position: z43.string().optional(),
59836
+ position: z44.string().optional(),
59551
59837
  // For radial gradients ('center', 'top left', etc.)
59552
- stops: z43.array(gradientStopSchema).min(2)
59838
+ stops: z44.array(gradientStopSchema).min(2)
59553
59839
  });
59554
59840
 
59555
59841
  // ../theme-core/src/schema.ts
@@ -59557,65 +59843,65 @@ init_types13();
59557
59843
  init_validation3();
59558
59844
  init_atRuleValidation();
59559
59845
  init_shared7();
59560
- var axesSchema = z44.object({
59561
- tone: z44.enum(["minimal", "classic", "bold"]),
59562
- energy: z44.enum(["calm", "vibrant"]),
59563
- density: z44.enum(["airy", "regular", "compact"]),
59564
- mediaBias: z44.enum(["text", "media", "mixed"]),
59565
- conversionBias: z44.enum(["low", "med", "high"]),
59566
- motion: z44.enum(["subtle", "standard", "expressive"])
59567
- });
59568
- var colourHexString = z44.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
59569
- var paletteColorSchema = z44.object({
59570
- name: z44.string().min(1),
59846
+ var axesSchema = z45.object({
59847
+ tone: z45.enum(["minimal", "classic", "bold"]),
59848
+ energy: z45.enum(["calm", "vibrant"]),
59849
+ density: z45.enum(["airy", "regular", "compact"]),
59850
+ mediaBias: z45.enum(["text", "media", "mixed"]),
59851
+ conversionBias: z45.enum(["low", "med", "high"]),
59852
+ motion: z45.enum(["subtle", "standard", "expressive"])
59853
+ });
59854
+ var colourHexString = z45.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
59855
+ var paletteColorSchema = z45.object({
59856
+ name: z45.string().min(1),
59571
59857
  hex: colourHexString
59572
59858
  });
59573
- var paletteMetaSchema = z44.object({
59574
- mode: z44.enum(["light", "dark"])
59859
+ var paletteMetaSchema = z45.object({
59860
+ mode: z45.enum(["light", "dark"])
59575
59861
  });
59576
- var paletteSchema = z44.object({
59577
- colors: z44.array(paletteColorSchema),
59862
+ var paletteSchema = z45.object({
59863
+ colors: z45.array(paletteColorSchema),
59578
59864
  meta: paletteMetaSchema
59579
59865
  });
59580
- var typographyStyleSchema = z44.object({
59581
- family: z44.string().min(1),
59582
- weight: z44.enum(["light", "regular", "medium", "semibold", "bold"]),
59583
- letterSpacing: z44.enum(["tight", "normal", "loose"]),
59584
- lineHeight: z44.enum(["normal", "relaxed", "loose"])
59866
+ var typographyStyleSchema = z45.object({
59867
+ family: z45.string().min(1),
59868
+ weight: z45.enum(["light", "regular", "medium", "semibold", "bold"]),
59869
+ letterSpacing: z45.enum(["tight", "normal", "loose"]),
59870
+ lineHeight: z45.enum(["normal", "relaxed", "loose"])
59585
59871
  });
59586
59872
  var bodyTypographyStyleSchema = typographyStyleSchema.extend({
59587
- size: z44.enum(["md", "lg", "xl"])
59873
+ size: z45.enum(["md", "lg", "xl"])
59588
59874
  });
59589
- var headingSizeSchema = z44.enum(["xs", "sm", "md", "lg", "xl", "2xl"]);
59590
- var headingTypographyOverridesSchema = z44.object({
59591
- weight: z44.enum(["light", "regular", "medium", "semibold", "bold"]).nullable().optional(),
59592
- letterSpacing: z44.enum(["tight", "normal", "loose"]).nullable().optional(),
59875
+ var headingSizeSchema = z45.enum(["xs", "sm", "md", "lg", "xl", "2xl"]);
59876
+ var headingTypographyOverridesSchema = z45.object({
59877
+ weight: z45.enum(["light", "regular", "medium", "semibold", "bold"]).nullable().optional(),
59878
+ letterSpacing: z45.enum(["tight", "normal", "loose"]).nullable().optional(),
59593
59879
  size: headingSizeSchema.nullable().optional(),
59594
- lineHeight: z44.enum(["normal", "relaxed", "loose"]).nullable().optional(),
59595
- italic: z44.boolean().nullable().optional(),
59596
- colorToken: z44.string().min(1).nullable().optional()
59880
+ lineHeight: z45.enum(["normal", "relaxed", "loose"]).nullable().optional(),
59881
+ italic: z45.boolean().nullable().optional(),
59882
+ colorToken: z45.string().min(1).nullable().optional()
59597
59883
  // Palette token name for heading color
59598
59884
  });
59599
59885
  var headingTypographyStyleSchema = typographyStyleSchema.extend({
59600
- case: z44.enum(["uppercase", "normal", "smallCaps"]).nullable(),
59601
- italic: z44.boolean().nullable(),
59602
- colorToken: z44.string().min(1).nullable().optional()
59886
+ case: z45.enum(["uppercase", "normal", "smallCaps"]).nullable(),
59887
+ italic: z45.boolean().nullable(),
59888
+ colorToken: z45.string().min(1).nullable().optional()
59603
59889
  // Palette token name for heading color
59604
59890
  });
59605
- var proseLinkUnderlineStyleSchema = z44.enum(["solid", "dotted", "dashed"]);
59606
- var proseLinkUnderlineThicknessSchema = z44.enum(["auto", "fromFont", "thin", "medium", "thick"]);
59607
- var proseLinkUnderlineOffsetSchema = z44.enum(["auto", "tight", "normal", "loose"]);
59608
- var proseLinkStyleSchema = z44.object({
59609
- colorToken: z44.string().min(1).optional(),
59610
- hoverColorToken: z44.string().min(1).optional(),
59611
- underline: z44.boolean().optional(),
59612
- decorationColorToken: z44.string().min(1).optional(),
59613
- hoverDecorationColorToken: z44.string().min(1).optional(),
59891
+ var proseLinkUnderlineStyleSchema = z45.enum(["solid", "dotted", "dashed"]);
59892
+ var proseLinkUnderlineThicknessSchema = z45.enum(["auto", "fromFont", "thin", "medium", "thick"]);
59893
+ var proseLinkUnderlineOffsetSchema = z45.enum(["auto", "tight", "normal", "loose"]);
59894
+ var proseLinkStyleSchema = z45.object({
59895
+ colorToken: z45.string().min(1).optional(),
59896
+ hoverColorToken: z45.string().min(1).optional(),
59897
+ underline: z45.boolean().optional(),
59898
+ decorationColorToken: z45.string().min(1).optional(),
59899
+ hoverDecorationColorToken: z45.string().min(1).optional(),
59614
59900
  underlineStyle: proseLinkUnderlineStyleSchema.optional(),
59615
59901
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
59616
59902
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
59617
59903
  });
59618
- var semanticSpacingSchema = z44.enum([
59904
+ var semanticSpacingSchema = z45.enum([
59619
59905
  "none",
59620
59906
  "compact",
59621
59907
  "cozy",
@@ -59623,62 +59909,62 @@ var semanticSpacingSchema = z44.enum([
59623
59909
  "comfortable",
59624
59910
  "spacious"
59625
59911
  ]);
59626
- var boxRoundedSchema = z44.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
59627
- var boxBackgroundOverlaySchema = z44.object({
59628
- type: z44.enum(["none", "color", "gradient"]).nullable().optional(),
59629
- color: z44.string().nullable().optional(),
59630
- gradient: z44.string().nullable().optional(),
59631
- opacity: z44.number().min(0).max(1).nullable().optional()
59632
- });
59633
- var boxBackgroundSchema = z44.object({
59634
- type: z44.enum(["color", "gradient", "image"]).optional(),
59635
- color: z44.string().nullable().optional(),
59636
- gradient: z44.string().nullable().optional(),
59912
+ var boxRoundedSchema = z45.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
59913
+ var boxBackgroundOverlaySchema = z45.object({
59914
+ type: z45.enum(["none", "color", "gradient"]).nullable().optional(),
59915
+ color: z45.string().nullable().optional(),
59916
+ gradient: z45.string().nullable().optional(),
59917
+ opacity: z45.number().min(0).max(1).nullable().optional()
59918
+ });
59919
+ var boxBackgroundSchema = z45.object({
59920
+ type: z45.enum(["color", "gradient", "image"]).optional(),
59921
+ color: z45.string().nullable().optional(),
59922
+ gradient: z45.string().nullable().optional(),
59637
59923
  image: mediaSchema2.nullable().optional(),
59638
- objectFit: z44.enum(["fill", "fit", "original", "custom"]).nullable().optional(),
59639
- scale: z44.string().nullable().optional(),
59640
- position: z44.string().nullable().optional(),
59641
- opacity: z44.number().min(0).max(1).nullable().optional(),
59924
+ objectFit: z45.enum(["fill", "fit", "original", "custom"]).nullable().optional(),
59925
+ scale: z45.string().nullable().optional(),
59926
+ position: z45.string().nullable().optional(),
59927
+ opacity: z45.number().min(0).max(1).nullable().optional(),
59642
59928
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
59643
- textColor: z44.string().nullable().optional(),
59644
- headingColor: z44.string().nullable().optional()
59929
+ textColor: z45.string().nullable().optional(),
59930
+ headingColor: z45.string().nullable().optional()
59645
59931
  });
59646
- var sectionStylesOverrideSchema = z44.object({
59932
+ var sectionStylesOverrideSchema = z45.object({
59647
59933
  background: boxBackgroundSchema.nullable().optional(),
59648
59934
  spacing: semanticSpacingSchema.nullable().optional(),
59649
- minHeight: z44.enum(["none", "hero", "immersive"]).nullable().optional()
59935
+ minHeight: z45.enum(["none", "hero", "immersive"]).nullable().optional()
59650
59936
  });
59651
- var containerStylesOverrideSchema = z44.object({
59937
+ var containerStylesOverrideSchema = z45.object({
59652
59938
  background: boxBackgroundSchema.nullable().optional(),
59653
59939
  spacing: semanticSpacingSchema.nullable().optional(),
59654
- raised: z44.boolean().nullable().optional(),
59940
+ raised: z45.boolean().nullable().optional(),
59655
59941
  rounded: boxRoundedSchema.nullable().optional(),
59656
- fullWidth: z44.boolean().nullable().optional()
59942
+ fullWidth: z45.boolean().nullable().optional()
59657
59943
  });
59658
- var cardBorderOverrideSchema = z44.object({
59659
- enabled: z44.boolean().nullable().optional(),
59660
- width: z44.enum(["none", "1", "2", "3"]).nullable().optional(),
59661
- colorToken: z44.string().nullable().optional()
59944
+ var cardBorderOverrideSchema = z45.object({
59945
+ enabled: z45.boolean().nullable().optional(),
59946
+ width: z45.enum(["none", "1", "2", "3"]).nullable().optional(),
59947
+ colorToken: z45.string().nullable().optional()
59662
59948
  });
59663
- var cardStylesOverrideSchema = z44.object({
59949
+ var cardStylesOverrideSchema = z45.object({
59664
59950
  background: boxBackgroundSchema.nullable().optional(),
59665
59951
  border: cardBorderOverrideSchema.nullable().optional(),
59666
59952
  spacing: semanticSpacingSchema.nullable().optional(),
59667
- raised: z44.boolean().nullable().optional(),
59953
+ raised: z45.boolean().nullable().optional(),
59668
59954
  rounded: boxRoundedSchema.nullable().optional()
59669
59955
  });
59670
- var blockStyleOverridesSchema = z44.object({
59956
+ var blockStyleOverridesSchema = z45.object({
59671
59957
  sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
59672
59958
  containerStyles: containerStylesOverrideSchema.nullable().optional(),
59673
59959
  cardStyles: cardStylesOverrideSchema.nullable().optional()
59674
59960
  });
59675
- var blockThemeOverrideSchema = z44.object({
59676
- typography: z44.object({
59961
+ var blockThemeOverrideSchema = z45.object({
59962
+ typography: z45.object({
59677
59963
  proseLinkStyle: proseLinkStyleSchema.optional()
59678
59964
  }).optional(),
59679
59965
  styles: blockStyleOverridesSchema.optional()
59680
59966
  });
59681
- var typographyScaleSchema = z44.enum([
59967
+ var typographyScaleSchema = z45.enum([
59682
59968
  // New intuitive names
59683
59969
  "compact",
59684
59970
  // ratio 1.2 (was minorThird)
@@ -59691,9 +59977,9 @@ var typographyScaleSchema = z44.enum([
59691
59977
  "majorThird",
59692
59978
  "perfectFourth"
59693
59979
  ]);
59694
- var typographySchema = z44.object({
59980
+ var typographySchema = z45.object({
59695
59981
  body: bodyTypographyStyleSchema,
59696
- headings: z44.object({
59982
+ headings: z45.object({
59697
59983
  default: headingTypographyStyleSchema,
59698
59984
  h1: headingTypographyOverridesSchema,
59699
59985
  h2: headingTypographyOverridesSchema,
@@ -59706,41 +59992,41 @@ var typographySchema = z44.object({
59706
59992
  scale: typographyScaleSchema,
59707
59993
  proseLinkStyle: proseLinkStyleSchema.optional()
59708
59994
  });
59709
- var spaceSchema = z44.enum(["comfortable", "standard", "dense"]);
59710
- var corners = z44.enum(["square", "soft", "rounded", "pill"]);
59711
- var shadow = z44.object({
59712
- elevation: z44.enum(["none", "low", "medium", "high"]),
59713
- softness: z44.enum(["crisp", "soft", "hard"]).nullable(),
59714
- position: z44.enum(["bottom", "bottom-right"]).default("bottom")
59995
+ var spaceSchema = z45.enum(["comfortable", "standard", "dense"]);
59996
+ var corners = z45.enum(["square", "soft", "rounded", "pill"]);
59997
+ var shadow = z45.object({
59998
+ elevation: z45.enum(["none", "low", "medium", "high"]),
59999
+ softness: z45.enum(["crisp", "soft", "hard"]).nullable(),
60000
+ position: z45.enum(["bottom", "bottom-right"]).default("bottom")
59715
60001
  });
59716
- var border = z44.object({
59717
- width: z44.enum(["none", "hairline", "thin", "thick"]),
59718
- style: z44.enum(["solid", "dashed"])
60002
+ var border = z45.object({
60003
+ width: z45.enum(["none", "hairline", "thin", "thick"]),
60004
+ style: z45.enum(["solid", "dashed"])
59719
60005
  });
59720
- var motion = z44.object({
59721
- level: z44.enum(["off", "low", "medium", "high"]),
59722
- easing: z44.enum(["standard", "snappy", "gentle"]).nullable()
60006
+ var motion = z45.object({
60007
+ level: z45.enum(["off", "low", "medium", "high"]),
60008
+ easing: z45.enum(["standard", "snappy", "gentle"]).nullable()
59723
60009
  });
59724
- var buttonStyle = z44.object({
60010
+ var buttonStyle = z45.object({
59725
60011
  shape: corners
59726
60012
  // Used for --radius-control CSS variable
59727
60013
  });
59728
- var cardStyle = z44.object({
59729
- elevation: z44.enum(["none", "low", "medium", "high"]),
59730
- border: z44.enum(["none", "subtle", "defined"]),
60014
+ var cardStyle = z45.object({
60015
+ elevation: z45.enum(["none", "low", "medium", "high"]),
60016
+ border: z45.enum(["none", "subtle", "defined"]),
59731
60017
  shape: corners,
59732
- headerStyle: z44.enum(["plain", "accentBar", "subtleBg"]).nullable(),
59733
- mediaTreatment: z44.enum(["square", "rounded", "bleed"]).nullable()
60018
+ headerStyle: z45.enum(["plain", "accentBar", "subtleBg"]).nullable(),
60019
+ mediaTreatment: z45.enum(["square", "rounded", "bleed"]).nullable()
59734
60020
  });
59735
- var inputStyle = z44.object({
60021
+ var inputStyle = z45.object({
59736
60022
  shape: corners,
59737
- border: z44.enum(["subtle", "defined", "underline"]),
59738
- focus: z44.enum(["glow", "ring", "underline"]),
59739
- label: z44.enum(["inside", "above"])
60023
+ border: z45.enum(["subtle", "defined", "underline"]),
60024
+ focus: z45.enum(["glow", "ring", "underline"]),
60025
+ label: z45.enum(["inside", "above"])
59740
60026
  });
59741
- var headerVariant = z44.enum(["classic", "centered", "transparent", "floating", "editorial"]);
59742
- var headerPositioning = z44.enum(["static", "sticky", "fixed"]);
59743
- var headerNavStyle = z44.enum([
60027
+ var headerVariant = z45.enum(["classic", "centered", "transparent", "floating", "editorial"]);
60028
+ var headerPositioning = z45.enum(["static", "sticky", "fixed"]);
60029
+ var headerNavStyle = z45.enum([
59744
60030
  "minimal",
59745
60031
  "underline",
59746
60032
  "underline-grow",
@@ -59749,82 +60035,82 @@ var headerNavStyle = z44.enum([
59749
60035
  "frosted",
59750
60036
  "solid"
59751
60037
  ]);
59752
- var navFontWeight = z44.enum(["regular", "medium", "semibold", "bold"]);
59753
- var headerMaxWidth = z44.enum(["container", "full"]);
59754
- var headerContainerSchema = z44.object({
59755
- rounded: z44.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("xl"),
59756
- border: z44.boolean().default(true),
59757
- shadow: z44.boolean().default(true),
59758
- padding: z44.enum(["sm", "md", "lg"]).default("md"),
59759
- tint: z44.string().nullable().optional(),
59760
- opacity: z44.number().min(0).max(1).default(0.12)
60038
+ var navFontWeight = z45.enum(["regular", "medium", "semibold", "bold"]);
60039
+ var headerMaxWidth = z45.enum(["container", "full"]);
60040
+ var headerContainerSchema = z45.object({
60041
+ rounded: z45.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("xl"),
60042
+ border: z45.boolean().default(true),
60043
+ shadow: z45.boolean().default(true),
60044
+ padding: z45.enum(["sm", "md", "lg"]).default("md"),
60045
+ tint: z45.string().nullable().optional(),
60046
+ opacity: z45.number().min(0).max(1).default(0.12)
59761
60047
  }).optional();
59762
60048
  var headerBorderSchema = componentBorderSchema.extend({
59763
- position: z44.enum(["bottom", "top", "both", "none"]).default("bottom")
60049
+ position: z45.enum(["bottom", "top", "both", "none"]).default("bottom")
59764
60050
  }).optional();
59765
- var logoStyleSchema = z44.object({
59766
- fontFamily: z44.enum(["heading", "body"]).default("heading"),
59767
- letterSpacing: z44.enum(["normal", "wide", "wider", "widest"]).default("normal"),
59768
- gradient: z44.boolean().default(false)
60051
+ var logoStyleSchema = z45.object({
60052
+ fontFamily: z45.enum(["heading", "body"]).default("heading"),
60053
+ letterSpacing: z45.enum(["normal", "wide", "wider", "widest"]).default("normal"),
60054
+ gradient: z45.boolean().default(false)
59769
60055
  }).optional();
59770
- var headerLogoTextSchema = z44.object({
59771
- mobileWrapLines: z44.union([z44.literal(1), z44.literal(2)]).optional(),
59772
- mobileMaxWidth: z44.enum(["xs", "sm", "md"]).optional(),
59773
- hideOnShrink: z44.boolean().optional()
60056
+ var headerLogoTextSchema = z45.object({
60057
+ mobileWrapLines: z45.union([z45.literal(1), z45.literal(2)]).optional(),
60058
+ mobileMaxWidth: z45.enum(["xs", "sm", "md"]).optional(),
60059
+ hideOnShrink: z45.boolean().optional()
59774
60060
  }).optional();
59775
- var navEffectsSchema = z44.object({
59776
- underlineGradient: z44.boolean().default(false),
59777
- glow: z44.boolean().default(false),
59778
- glowColor: z44.string().optional(),
59779
- neumorphic: z44.boolean().default(false)
60061
+ var navEffectsSchema = z45.object({
60062
+ underlineGradient: z45.boolean().default(false),
60063
+ glow: z45.boolean().default(false),
60064
+ glowColor: z45.string().optional(),
60065
+ neumorphic: z45.boolean().default(false)
59780
60066
  }).optional();
59781
- var dropdownStyleSchema = z44.object({
60067
+ var dropdownStyleSchema = z45.object({
59782
60068
  // Container styling
59783
- background: z44.string().default("surface"),
60069
+ background: z45.string().default("surface"),
59784
60070
  // color token
59785
- textColor: z44.string().default("text"),
60071
+ textColor: z45.string().default("text"),
59786
60072
  // color token
59787
- borderColor: z44.string().nullable().default("border"),
60073
+ borderColor: z45.string().nullable().default("border"),
59788
60074
  // null = no border
59789
- shadow: z44.enum(["none", "sm", "md", "lg"]).default("md"),
59790
- borderRadius: z44.enum(["none", "sm", "md", "lg"]).default("md"),
60075
+ shadow: z45.enum(["none", "sm", "md", "lg"]).default("md"),
60076
+ borderRadius: z45.enum(["none", "sm", "md", "lg"]).default("md"),
59791
60077
  // Link hover states (explicit control)
59792
- hoverBackground: z44.string().nullable().optional(),
60078
+ hoverBackground: z45.string().nullable().optional(),
59793
60079
  // color token, null = transparent
59794
- hoverTextColor: z44.string().nullable().optional(),
60080
+ hoverTextColor: z45.string().nullable().optional(),
59795
60081
  // color token, null = inherit
59796
60082
  // Typography
59797
- textTransform: z44.enum(["none", "uppercase", "capitalize"]).default("none"),
59798
- letterSpacing: z44.enum(["normal", "wide", "wider"]).default("normal"),
59799
- fontWeight: z44.enum(["regular", "medium", "semibold", "bold"]).optional(),
60083
+ textTransform: z45.enum(["none", "uppercase", "capitalize"]).default("none"),
60084
+ letterSpacing: z45.enum(["normal", "wide", "wider"]).default("normal"),
60085
+ fontWeight: z45.enum(["regular", "medium", "semibold", "bold"]).optional(),
59800
60086
  // optional = inherit from navWeight
59801
- textSize: z44.enum(["xs", "sm", "base", "lg"]).optional()
60087
+ textSize: z45.enum(["xs", "sm", "base", "lg"]).optional()
59802
60088
  // optional = no override (browser default)
59803
60089
  }).optional();
59804
- var headerCtaGapSchema = z44.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
59805
- var navContainerSchema = z44.object({
59806
- type: z44.enum(["none", "pill", "glass"]).default("none"),
59807
- tint: z44.string().nullable().optional(),
59808
- opacity: z44.number().min(0).max(1).default(0.15)
60090
+ var headerCtaGapSchema = z45.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
60091
+ var navContainerSchema = z45.object({
60092
+ type: z45.enum(["none", "pill", "glass"]).default("none"),
60093
+ tint: z45.string().nullable().optional(),
60094
+ opacity: z45.number().min(0).max(1).default(0.15)
59809
60095
  }).default({ type: "none", tint: null, opacity: 0.15 });
59810
- var headerBackgroundSchema = z44.object({
59811
- type: z44.enum(["color", "gradient", "image"]),
59812
- color: z44.string().nullable().optional(),
60096
+ var headerBackgroundSchema = z45.object({
60097
+ type: z45.enum(["color", "gradient", "image"]),
60098
+ color: z45.string().nullable().optional(),
59813
60099
  gradient: gradientConfigSchema.nullable().optional(),
59814
60100
  image: mediaSchema2.nullable().optional(),
59815
- textColor: z44.string().nullable().optional()
60101
+ textColor: z45.string().nullable().optional()
59816
60102
  });
59817
- var headerSchema = z44.object({
60103
+ var headerSchema = z45.object({
59818
60104
  variant: headerVariant,
59819
60105
  positioning: headerPositioning,
59820
- shrinkOnScroll: z44.boolean(),
60106
+ shrinkOnScroll: z45.boolean(),
59821
60107
  maxWidth: headerMaxWidth,
59822
60108
  logoOverride: mediaSchema2.nullable().optional(),
59823
60109
  background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
59824
- textColor: z44.string().nullable().optional(),
60110
+ textColor: z45.string().nullable().optional(),
59825
60111
  // Site title and general header text
59826
60112
  navStyle: headerNavStyle,
59827
- navColor: z44.string().nullable().optional(),
60113
+ navColor: z45.string().nullable().optional(),
59828
60114
  // Nav links (inherits textColor if not set)
59829
60115
  navWeight: navFontWeight.default("medium"),
59830
60116
  // New fields for header system enhancement
@@ -59843,50 +60129,50 @@ var headerSchema = z44.object({
59843
60129
  // Dropdown menu styling (nav dropdowns and mobile drawer)
59844
60130
  dropdownStyle: dropdownStyleSchema
59845
60131
  });
59846
- var footerVariant = z44.enum(["simple", "columns", "split"]);
59847
- var footerMaxWidth = z44.enum(["container", "full"]);
59848
- var footerMode = z44.enum(["default", "blocks", "default+blocks", "none"]);
59849
- var footerNavLayoutMode = z44.enum(["stack", "inline", "inline-wrap"]);
59850
- var footerNavLayoutAlign = z44.enum(["start", "center", "end", "space-between"]);
59851
- var footerSpacing = z44.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
59852
- var footerLogoPlacement = z44.enum(["left", "right", "above", "below"]);
59853
- var footerLogoSize = z44.enum(["sm", "md", "lg", "xl"]);
59854
- var footerLogoMaxHeight = z44.enum(["sm", "md", "lg", "xl"]);
59855
- var footerBottomTextLinkStyleSchema = z44.object({
59856
- colorToken: z44.string().optional(),
59857
- hoverColorToken: z44.string().nullable().optional(),
59858
- decorationColorToken: z44.string().nullable().optional(),
59859
- underline: z44.boolean().optional()
59860
- });
59861
- var footerBottomBarSchema = z44.object({
59862
- enabled: z44.boolean().optional(),
59863
- fullBleed: z44.boolean().optional(),
60132
+ var footerVariant = z45.enum(["simple", "columns", "split"]);
60133
+ var footerMaxWidth = z45.enum(["container", "full"]);
60134
+ var footerMode = z45.enum(["default", "blocks", "default+blocks", "none"]);
60135
+ var footerNavLayoutMode = z45.enum(["stack", "inline", "inline-wrap"]);
60136
+ var footerNavLayoutAlign = z45.enum(["start", "center", "end", "space-between"]);
60137
+ var footerSpacing = z45.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
60138
+ var footerLogoPlacement = z45.enum(["left", "right", "above", "below"]);
60139
+ var footerLogoSize = z45.enum(["sm", "md", "lg", "xl"]);
60140
+ var footerLogoMaxHeight = z45.enum(["sm", "md", "lg", "xl"]);
60141
+ var footerBottomTextLinkStyleSchema = z45.object({
60142
+ colorToken: z45.string().optional(),
60143
+ hoverColorToken: z45.string().nullable().optional(),
60144
+ decorationColorToken: z45.string().nullable().optional(),
60145
+ underline: z45.boolean().optional()
60146
+ });
60147
+ var footerBottomBarSchema = z45.object({
60148
+ enabled: z45.boolean().optional(),
60149
+ fullBleed: z45.boolean().optional(),
59864
60150
  background: headerBackgroundSchema.optional(),
59865
- textColor: z44.string().nullable().optional(),
59866
- textAlign: z44.enum(["left", "center", "right"]).optional(),
60151
+ textColor: z45.string().nullable().optional(),
60152
+ textAlign: z45.enum(["left", "center", "right"]).optional(),
59867
60153
  paddingY: footerSpacing.optional(),
59868
60154
  paddingX: footerSpacing.optional(),
59869
- borderTop: z44.object({
59870
- colorToken: z44.string().nullable().optional(),
59871
- width: z44.enum(["none", "thin", "medium", "thick"]).optional()
60155
+ borderTop: z45.object({
60156
+ colorToken: z45.string().nullable().optional(),
60157
+ width: z45.enum(["none", "thin", "medium", "thick"]).optional()
59872
60158
  }).optional()
59873
60159
  });
59874
- var footerNavLayoutSchema = z44.object({
60160
+ var footerNavLayoutSchema = z45.object({
59875
60161
  layout: footerNavLayoutMode.optional(),
59876
60162
  align: footerNavLayoutAlign.optional(),
59877
60163
  gapX: footerSpacing.optional(),
59878
60164
  gapY: footerSpacing.optional(),
59879
- columns: z44.number().int().min(1).max(6).optional()
60165
+ columns: z45.number().int().min(1).max(6).optional()
59880
60166
  });
59881
- var footerLogoSchema = z44.object({
59882
- showLogo: z44.boolean().default(true),
59883
- showLogoText: z44.boolean().optional(),
60167
+ var footerLogoSchema = z45.object({
60168
+ showLogo: z45.boolean().default(true),
60169
+ showLogoText: z45.boolean().optional(),
59884
60170
  placement: footerLogoPlacement.optional(),
59885
60171
  size: footerLogoSize.optional(),
59886
60172
  maxHeight: footerLogoMaxHeight.optional(),
59887
- align: z44.enum(["start", "center", "end"]).optional()
60173
+ align: z45.enum(["start", "center", "end"]).optional()
59888
60174
  });
59889
- var footerSchema = z44.object({
60175
+ var footerSchema = z45.object({
59890
60176
  /**
59891
60177
  * SDK-only footer rendering mode.
59892
60178
  *
@@ -59895,11 +60181,11 @@ var footerSchema = z44.object({
59895
60181
  mode: footerMode.optional(),
59896
60182
  variant: footerVariant,
59897
60183
  maxWidth: footerMaxWidth,
59898
- showLogoText: z44.boolean().optional(),
60184
+ showLogoText: z45.boolean().optional(),
59899
60185
  background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
59900
60186
  // Footer nav styling (independent from header)
59901
60187
  navStyle: headerNavStyle.default("minimal"),
59902
- navColor: z44.string().nullable().optional(),
60188
+ navColor: z45.string().nullable().optional(),
59903
60189
  navWeight: navFontWeight.default("medium"),
59904
60190
  // Full nav link customization (overrides navStyle if set)
59905
60191
  navLinkStyle: navLinkStyleSchema.optional(),
@@ -59910,15 +60196,15 @@ var footerSchema = z44.object({
59910
60196
  logo: footerLogoSchema.optional(),
59911
60197
  bottomBar: footerBottomBarSchema.optional()
59912
60198
  });
59913
- var containerPaddingPresetSchema = z44.enum(["tight", "compact", "default", "relaxed"]);
59914
- var layoutSchema = z44.object({
59915
- containerPadding: z44.object({
60199
+ var containerPaddingPresetSchema = z45.enum(["tight", "compact", "default", "relaxed"]);
60200
+ var layoutSchema = z45.object({
60201
+ containerPadding: z45.object({
59916
60202
  mobile: containerPaddingPresetSchema.optional(),
59917
60203
  tablet: containerPaddingPresetSchema.optional(),
59918
60204
  desktop: containerPaddingPresetSchema.optional()
59919
60205
  }).optional()
59920
60206
  }).optional();
59921
- var heroTypographySizeSchema = z44.enum([
60207
+ var heroTypographySizeSchema = z45.enum([
59922
60208
  "sm",
59923
60209
  "base",
59924
60210
  "lg",
@@ -59929,14 +60215,14 @@ var heroTypographySizeSchema = z44.enum([
59929
60215
  "5xl",
59930
60216
  "6xl"
59931
60217
  ]);
59932
- var heroTypographyLineHeightSchema = z44.enum(["tight", "snug", "normal", "relaxed"]);
59933
- var heroResponsiveTypographySchema = z44.object({
60218
+ var heroTypographyLineHeightSchema = z45.enum(["tight", "snug", "normal", "relaxed"]);
60219
+ var heroResponsiveTypographySchema = z45.object({
59934
60220
  headlineSize: heroTypographySizeSchema.optional(),
59935
60221
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
59936
60222
  subheadlineSize: heroTypographySizeSchema.optional(),
59937
60223
  subheadlineLineHeight: heroTypographyLineHeightSchema.optional()
59938
60224
  });
59939
- var heroTypographySchema = z44.object({
60225
+ var heroTypographySchema = z45.object({
59940
60226
  headlineSize: heroTypographySizeSchema.optional(),
59941
60227
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
59942
60228
  subheadlineSize: heroTypographySizeSchema.optional(),
@@ -59945,24 +60231,24 @@ var heroTypographySchema = z44.object({
59945
60231
  microHeadlineLineHeight: heroTypographyLineHeightSchema.optional(),
59946
60232
  microSubheadlineSize: heroTypographySizeSchema.optional(),
59947
60233
  microSubheadlineLineHeight: heroTypographyLineHeightSchema.optional(),
59948
- responsive: z44.object({
60234
+ responsive: z45.object({
59949
60235
  tablet: heroResponsiveTypographySchema.optional(),
59950
60236
  mobile: heroResponsiveTypographySchema.optional()
59951
60237
  }).optional()
59952
60238
  });
59953
- var heroSchema = z44.object({
60239
+ var heroSchema = z45.object({
59954
60240
  typography: heroTypographySchema.optional()
59955
60241
  }).optional();
59956
- var gradientsSchema = z44.object({
59957
- button: z44.string().min(1).nullable().optional(),
59958
- hero: z44.string().min(1).nullable().optional(),
59959
- background: z44.string().min(1).nullable().optional()
59960
- });
59961
- var themeSchema = z44.object({
59962
- name: z44.string().min(1).max(30),
59963
- description: z44.string().min(1).max(400),
59964
- rationale: z44.string().min(1).max(400),
59965
- siteStyleId: z44.string().min(1).transform((value) => asSiteStyleId(value)).optional(),
60242
+ var gradientsSchema = z45.object({
60243
+ button: z45.string().min(1).nullable().optional(),
60244
+ hero: z45.string().min(1).nullable().optional(),
60245
+ background: z45.string().min(1).nullable().optional()
60246
+ });
60247
+ var themeSchema = z45.object({
60248
+ name: z45.string().min(1).max(30),
60249
+ description: z45.string().min(1).max(400),
60250
+ rationale: z45.string().min(1).max(400),
60251
+ siteStyleId: z45.string().min(1).transform((value) => asSiteStyleId(value)).optional(),
59966
60252
  axes: axesSchema,
59967
60253
  palette: paletteSchema,
59968
60254
  typography: typographySchema,
@@ -59989,16 +60275,16 @@ var themeSchema = z44.object({
59989
60275
  // Block-specific customization (Tier 3)
59990
60276
  // blockCustomVars: Per-block CSS variable overrides as bare values
59991
60277
  // Example: { "event-registration": { "--step-color": "#6d28d9" } }
59992
- blockCustomVars: z44.record(
59993
- z44.string(),
60278
+ blockCustomVars: z45.record(
60279
+ z45.string(),
59994
60280
  // block kind (matches data-block attribute)
59995
- z44.record(z44.string(), z44.string())
60281
+ z45.record(z45.string(), z45.string())
59996
60282
  // { '--var-name': 'value' }
59997
60283
  ).optional(),
59998
60284
  // Structured block-kind theme overrides (v1: typography prose-link style only)
59999
60285
  // Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
60000
- blockOverrides: z44.record(
60001
- z44.string(),
60286
+ blockOverrides: z45.record(
60287
+ z45.string(),
60002
60288
  blockThemeOverrideSchema
60003
60289
  ).optional(),
60004
60290
  // Structured custom CSS rules
@@ -60034,11 +60320,11 @@ var themeSchema = z44.object({
60034
60320
  * }
60035
60321
  * ```
60036
60322
  */
60037
- styleGroups: z44.record(z44.string(), z44.array(z44.string())).optional()
60323
+ styleGroups: z45.record(z45.string(), z45.array(z45.string())).optional()
60038
60324
  });
60039
- var themesTurnSchema = z44.object({
60040
- message: z44.string().min(1),
60041
- themes: z44.array(themeSchema).length(3)
60325
+ var themesTurnSchema = z45.object({
60326
+ message: z45.string().min(1),
60327
+ themes: z45.array(themeSchema).length(3)
60042
60328
  });
60043
60329
 
60044
60330
  // ../theme-core/src/palette/variants/types.ts
@@ -60048,7 +60334,7 @@ function asPaletteVariantId(value) {
60048
60334
  }
60049
60335
  return value;
60050
60336
  }
60051
- var paletteVariantIdSchema = z45.string().min(1).transform((value) => asPaletteVariantId(value));
60337
+ var paletteVariantIdSchema = z46.string().min(1).transform((value) => asPaletteVariantId(value));
60052
60338
  var PALETTE_TOKEN_NAMES = [
60053
60339
  "primary",
60054
60340
  "primaryForeground",
@@ -60064,19 +60350,19 @@ var PALETTE_TOKEN_NAMES = [
60064
60350
  "text",
60065
60351
  "border"
60066
60352
  ];
60067
- var paletteTokenNameSchema = z45.enum(PALETTE_TOKEN_NAMES);
60353
+ var paletteTokenNameSchema = z46.enum(PALETTE_TOKEN_NAMES);
60068
60354
  var HEX_COLOR_REGEX = /^#[0-9a-f]{6}$/;
60069
- var hexColorSchema = z45.string().regex(HEX_COLOR_REGEX, "Hex must be #RRGGBB (lowercase)").transform((value) => value);
60355
+ var hexColorSchema = z46.string().regex(HEX_COLOR_REGEX, "Hex must be #RRGGBB (lowercase)").transform((value) => value);
60070
60356
  var variantPaletteColorSchema = paletteColorSchema.extend({
60071
60357
  name: paletteTokenNameSchema
60072
60358
  });
60073
- var paletteVariantSchema = z45.object({
60359
+ var paletteVariantSchema = z46.object({
60074
60360
  id: paletteVariantIdSchema,
60075
- name: z45.string().min(1),
60076
- description: z45.string().min(1),
60361
+ name: z46.string().min(1),
60362
+ description: z46.string().min(1),
60077
60363
  tags: styleTagsSchema,
60078
- mode: z45.enum(["light", "dark"]),
60079
- colors: z45.array(variantPaletteColorSchema).min(1)
60364
+ mode: z46.enum(["light", "dark"]),
60365
+ colors: z46.array(variantPaletteColorSchema).min(1)
60080
60366
  });
60081
60367
  function definePaletteVariant(input) {
60082
60368
  return {
@@ -60088,7 +60374,7 @@ function definePaletteVariant(input) {
60088
60374
  colors: input.colors
60089
60375
  };
60090
60376
  }
60091
- var paletteOverridesSchema = z45.object({
60377
+ var paletteOverridesSchema = z46.object({
60092
60378
  primary: hexColorSchema.optional(),
60093
60379
  primaryForeground: hexColorSchema.optional(),
60094
60380
  secondary: hexColorSchema.optional(),
@@ -60765,7 +61051,7 @@ var curatedSiteStylesById = new Map(
60765
61051
  );
60766
61052
 
60767
61053
  // ../theme-core/src/site-styles/designState.ts
60768
- import { z as z46 } from "zod";
61054
+ import { z as z47 } from "zod";
60769
61055
 
60770
61056
  // ../theme-core/src/site-styles/rawStyleFields.ts
60771
61057
  var themeV2RuntimeStyleFieldNames = [
@@ -60791,13 +61077,13 @@ var themeV2NormalEditorRawStyleFieldNameSet = new Set(
60791
61077
 
60792
61078
  // ../theme-core/src/site-styles/designState.ts
60793
61079
  var themeV2DesignStateSchemaVersion = 1;
60794
- var designResolutionPolicySchema = z46.enum(["generated", "user", "admin", "sdk"]);
60795
- var runtimeStyleFieldNameSchema = z46.enum(themeV2RuntimeStyleFieldNames);
60796
- var nonEmptyRuntimeStyleFieldNamesSchema = z46.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
61080
+ var designResolutionPolicySchema = z47.enum(["generated", "user", "admin", "sdk"]);
61081
+ var runtimeStyleFieldNameSchema = z47.enum(themeV2RuntimeStyleFieldNames);
61082
+ var nonEmptyRuntimeStyleFieldNamesSchema = z47.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
60797
61083
  fields3[0],
60798
61084
  ...fields3.slice(1)
60799
61085
  ]);
60800
- var heroLegibilityStrategySchema = z46.enum([
61086
+ var heroLegibilityStrategySchema = z47.enum([
60801
61087
  "none",
60802
61088
  "scrim-gradient",
60803
61089
  "solid-panel"
@@ -60819,66 +61105,66 @@ var userFlushTreatments = uniqueNonEmpty(
60819
61105
  var userFlushBleeds = uniqueNonEmpty(
60820
61106
  userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
60821
61107
  );
60822
- var contentFrameIntentSchema = z46.discriminatedUnion("kind", [
60823
- z46.object({ kind: z46.literal("plain") }).strict(),
60824
- z46.object({
60825
- kind: z46.literal("panel"),
60826
- treatment: z46.enum(userPanelTreatments)
61108
+ var contentFrameIntentSchema = z47.discriminatedUnion("kind", [
61109
+ z47.object({ kind: z47.literal("plain") }).strict(),
61110
+ z47.object({
61111
+ kind: z47.literal("panel"),
61112
+ treatment: z47.enum(userPanelTreatments)
60827
61113
  }).strict(),
60828
- z46.object({
60829
- kind: z46.literal("flush-panel"),
60830
- treatment: z46.enum(userFlushTreatments),
60831
- bleed: z46.enum(userFlushBleeds)
61114
+ z47.object({
61115
+ kind: z47.literal("flush-panel"),
61116
+ treatment: z47.enum(userFlushTreatments),
61117
+ bleed: z47.enum(userFlushBleeds)
60832
61118
  }).strict()
60833
61119
  ]);
60834
- var blockDesignPlanSchema = z46.object({
60835
- blockId: z46.string().min(1).transform(asDesignBlockId),
60836
- blockKind: z46.string().min(1),
60837
- purpose: z46.string().min(1),
60838
- sectionSurface: z46.enum(userDesignOptionCatalog.sectionSurfaces),
61120
+ var blockDesignPlanSchema = z47.object({
61121
+ blockId: z47.string().min(1).transform(asDesignBlockId),
61122
+ blockKind: z47.string().min(1),
61123
+ purpose: z47.string().min(1),
61124
+ sectionSurface: z47.enum(userDesignOptionCatalog.sectionSurfaces),
60839
61125
  contentFrame: contentFrameIntentSchema,
60840
- itemSurface: z46.enum(userDesignOptionCatalog.itemSurfaces),
60841
- transitionAfter: z46.enum(userDesignOptionCatalog.transitions),
60842
- emphasis: z46.enum(userDesignOptionCatalog.emphases),
61126
+ itemSurface: z47.enum(userDesignOptionCatalog.itemSurfaces),
61127
+ transitionAfter: z47.enum(userDesignOptionCatalog.transitions),
61128
+ emphasis: z47.enum(userDesignOptionCatalog.emphases),
60843
61129
  heroLegibility: heroLegibilityStrategySchema.optional()
60844
61130
  }).strict();
60845
- var styleAuthoritySchema = z46.discriminatedUnion("kind", [
60846
- z46.object({
60847
- kind: z46.literal("theme-v2"),
61131
+ var styleAuthoritySchema = z47.discriminatedUnion("kind", [
61132
+ z47.object({
61133
+ kind: z47.literal("theme-v2"),
60848
61134
  source: designResolutionPolicySchema,
60849
- siteStyleId: z46.string().min(1).transform(asSiteStyleId),
60850
- templateId: z46.string().min(1).transform(asDesignSystemTemplateId),
60851
- templateVersion: z46.number().int().nonnegative(),
60852
- resolverVersion: z46.number().int().nonnegative()
61135
+ siteStyleId: z47.string().min(1).transform(asSiteStyleId),
61136
+ templateId: z47.string().min(1).transform(asDesignSystemTemplateId),
61137
+ templateVersion: z47.number().int().nonnegative(),
61138
+ resolverVersion: z47.number().int().nonnegative()
60853
61139
  }).strict(),
60854
- z46.object({
60855
- kind: z46.literal("legacy-raw"),
60856
- reason: z46.enum(["pre-theme-v2", "manual-runtime-fields"])
61140
+ z47.object({
61141
+ kind: z47.literal("legacy-raw"),
61142
+ reason: z47.enum(["pre-theme-v2", "manual-runtime-fields"])
60857
61143
  }).strict(),
60858
- z46.object({
60859
- kind: z46.literal("advanced-detached"),
60860
- reason: z46.literal("detached-custom-runtime-fields")
61144
+ z47.object({
61145
+ kind: z47.literal("advanced-detached"),
61146
+ reason: z47.literal("detached-custom-runtime-fields")
60861
61147
  }).strict()
60862
61148
  ]);
60863
- var blockRuntimeStyleAuthoritySchema = z46.object({
60864
- unit: z46.literal("block-runtime-fields"),
60865
- blockId: z46.string().min(1).transform(asDesignBlockId),
61149
+ var blockRuntimeStyleAuthoritySchema = z47.object({
61150
+ unit: z47.literal("block-runtime-fields"),
61151
+ blockId: z47.string().min(1).transform(asDesignBlockId),
60866
61152
  fields: nonEmptyRuntimeStyleFieldNamesSchema,
60867
61153
  authority: styleAuthoritySchema
60868
61154
  }).strict();
60869
- var persistedPageDesignStateV1Schema = z46.object({
60870
- schemaVersion: z46.literal(themeV2DesignStateSchemaVersion),
60871
- siteStyleId: z46.string().min(1).transform(asSiteStyleId),
60872
- templateId: z46.string().min(1).transform(asDesignSystemTemplateId),
60873
- templateVersion: z46.number().int().nonnegative(),
60874
- resolverVersion: z46.number().int().nonnegative(),
60875
- rhythmPresetId: z46.string().min(1),
60876
- blocks: z46.array(blockDesignPlanSchema),
60877
- styleAuthorities: z46.array(blockRuntimeStyleAuthoritySchema)
61155
+ var persistedPageDesignStateV1Schema = z47.object({
61156
+ schemaVersion: z47.literal(themeV2DesignStateSchemaVersion),
61157
+ siteStyleId: z47.string().min(1).transform(asSiteStyleId),
61158
+ templateId: z47.string().min(1).transform(asDesignSystemTemplateId),
61159
+ templateVersion: z47.number().int().nonnegative(),
61160
+ resolverVersion: z47.number().int().nonnegative(),
61161
+ rhythmPresetId: z47.string().min(1),
61162
+ blocks: z47.array(blockDesignPlanSchema),
61163
+ styleAuthorities: z47.array(blockRuntimeStyleAuthoritySchema)
60878
61164
  }).strict();
60879
61165
 
60880
61166
  // ../theme-core/src/site-styles/generatedSchemas.ts
60881
- import { z as z47 } from "zod";
61167
+ import { z as z48 } from "zod";
60882
61168
  function uniqueNonEmpty2(values) {
60883
61169
  const uniqueValues = [...new Set(values)];
60884
61170
  const firstValue = uniqueValues[0];
@@ -60896,105 +61182,105 @@ var generatedFlushTreatments = uniqueNonEmpty2(
60896
61182
  var generatedFlushBleeds = uniqueNonEmpty2(
60897
61183
  generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
60898
61184
  );
60899
- var generatedPanelFrameSchema = z47.object({
60900
- kind: z47.literal("panel"),
60901
- treatment: z47.enum(generatedPanelTreatments)
61185
+ var generatedPanelFrameSchema = z48.object({
61186
+ kind: z48.literal("panel"),
61187
+ treatment: z48.enum(generatedPanelTreatments)
60902
61188
  }).strict();
60903
- var generatedFlushPanelFrameSchema = z47.object({
60904
- kind: z47.literal("flush-panel"),
60905
- treatment: z47.enum(generatedFlushTreatments),
60906
- bleed: z47.enum(generatedFlushBleeds)
61189
+ var generatedFlushPanelFrameSchema = z48.object({
61190
+ kind: z48.literal("flush-panel"),
61191
+ treatment: z48.enum(generatedFlushTreatments),
61192
+ bleed: z48.enum(generatedFlushBleeds)
60907
61193
  }).strict();
60908
- var generatedContentFrameIntentSchema = z47.discriminatedUnion("kind", [
60909
- z47.object({ kind: z47.literal("plain") }).strict(),
61194
+ var generatedContentFrameIntentSchema = z48.discriminatedUnion("kind", [
61195
+ z48.object({ kind: z48.literal("plain") }).strict(),
60910
61196
  generatedPanelFrameSchema,
60911
61197
  generatedFlushPanelFrameSchema
60912
61198
  ]);
60913
- var generatedSiteStyleIdSchema = z47.enum(curatedSiteStyleIdValues).transform(asSiteStyleId);
61199
+ var generatedSiteStyleIdSchema = z48.enum(curatedSiteStyleIdValues).transform(asSiteStyleId);
60914
61200
  function generatedChoiceSchema(valueSchema) {
60915
- return z47.discriminatedUnion("kind", [
60916
- z47.object({
60917
- source: z47.literal("generated"),
60918
- kind: z47.literal("auto")
61201
+ return z48.discriminatedUnion("kind", [
61202
+ z48.object({
61203
+ source: z48.literal("generated"),
61204
+ kind: z48.literal("auto")
60919
61205
  }).strict(),
60920
- z47.object({
60921
- source: z47.literal("generated"),
60922
- kind: z47.literal("explicit"),
61206
+ z48.object({
61207
+ source: z48.literal("generated"),
61208
+ kind: z48.literal("explicit"),
60923
61209
  value: valueSchema
60924
61210
  }).strict()
60925
61211
  ]);
60926
61212
  }
60927
- var generatedBlockDesignIntentSchema = z47.object({
61213
+ var generatedBlockDesignIntentSchema = z48.object({
60928
61214
  sectionSurface: generatedChoiceSchema(
60929
- z47.enum(generatedDesignOptionCatalog.sectionSurfaces)
61215
+ z48.enum(generatedDesignOptionCatalog.sectionSurfaces)
60930
61216
  ),
60931
61217
  contentFrame: generatedChoiceSchema(generatedContentFrameIntentSchema),
60932
61218
  itemSurface: generatedChoiceSchema(
60933
- z47.enum(generatedDesignOptionCatalog.itemSurfaces)
61219
+ z48.enum(generatedDesignOptionCatalog.itemSurfaces)
60934
61220
  ),
60935
61221
  transitionAfter: generatedChoiceSchema(
60936
- z47.enum(generatedDesignOptionCatalog.transitions)
61222
+ z48.enum(generatedDesignOptionCatalog.transitions)
60937
61223
  ),
60938
61224
  emphasis: generatedChoiceSchema(
60939
- z47.enum(generatedDesignOptionCatalog.emphases)
61225
+ z48.enum(generatedDesignOptionCatalog.emphases)
60940
61226
  )
60941
61227
  }).strict();
60942
- var generatedMediaCompositionIntentSchema = z47.enum([
61228
+ var generatedMediaCompositionIntentSchema = z48.enum([
60943
61229
  "none",
60944
61230
  "supporting",
60945
61231
  "dominant"
60946
61232
  ]);
60947
- var generatedDecorativeCompositionIntentSchema = z47.enum([
61233
+ var generatedDecorativeCompositionIntentSchema = z48.enum([
60948
61234
  "none",
60949
61235
  "supporting"
60950
61236
  ]);
60951
- var generatedHeroLegibilityStrategySchema = z47.enum([
61237
+ var generatedHeroLegibilityStrategySchema = z48.enum([
60952
61238
  "none",
60953
61239
  "scrim-gradient"
60954
61240
  ]);
60955
- var generatedBlockMediaIntentSchema = z47.object({
61241
+ var generatedBlockMediaIntentSchema = z48.object({
60956
61242
  media: generatedMediaCompositionIntentSchema,
60957
61243
  decorative: generatedDecorativeCompositionIntentSchema,
60958
61244
  heroLegibility: generatedChoiceSchema(generatedHeroLegibilityStrategySchema)
60959
61245
  }).strict();
60960
- var generatedBoundaryIntentSchema = z47.object({
61246
+ var generatedBoundaryIntentSchema = z48.object({
60961
61247
  transitionAfter: generatedChoiceSchema(
60962
- z47.enum(generatedDesignOptionCatalog.transitions)
61248
+ z48.enum(generatedDesignOptionCatalog.transitions)
60963
61249
  )
60964
61250
  }).strict();
60965
- var generatedPageDesignBlockIntentSchema = z47.object({
60966
- blockId: z47.string().min(1),
60967
- blockKind: z47.string().min(1),
60968
- purpose: z47.string().min(1),
61251
+ var generatedPageDesignBlockIntentSchema = z48.object({
61252
+ blockId: z48.string().min(1),
61253
+ blockKind: z48.string().min(1),
61254
+ purpose: z48.string().min(1),
60969
61255
  design: generatedBlockDesignIntentSchema,
60970
61256
  mediaIntent: generatedBlockMediaIntentSchema,
60971
61257
  boundaryIntent: generatedBoundaryIntentSchema
60972
61258
  }).strict();
60973
- var generatedPageDesignIntentSchema = z47.object({
61259
+ var generatedPageDesignIntentSchema = z48.object({
60974
61260
  siteStyleId: generatedSiteStyleIdSchema,
60975
- blocks: z47.array(generatedPageDesignBlockIntentSchema)
61261
+ blocks: z48.array(generatedPageDesignBlockIntentSchema)
60976
61262
  }).strict();
60977
61263
 
60978
61264
  // ../theme-core/src/site-styles/pageDesignIntent.ts
60979
- import { z as z48 } from "zod";
61265
+ import { z as z49 } from "zod";
60980
61266
  var pageDesignIntentSchemaVersion = 1;
60981
- var pageDesignUserPinnedAppearanceChoiceSchema = z48.object({
60982
- kind: z48.literal("user-pinned"),
60983
- value: z48.string().min(1).transform(asAppearancePresetId)
61267
+ var pageDesignUserPinnedAppearanceChoiceSchema = z49.object({
61268
+ kind: z49.literal("user-pinned"),
61269
+ value: z49.string().min(1).transform(asAppearancePresetId)
60984
61270
  }).strict();
60985
- var pageDesignUserPinnedBoundaryChoiceSchema = z48.object({
60986
- kind: z48.literal("user-pinned"),
60987
- value: z48.string().min(1).transform(asBoundaryOptionId)
61271
+ var pageDesignUserPinnedBoundaryChoiceSchema = z49.object({
61272
+ kind: z49.literal("user-pinned"),
61273
+ value: z49.string().min(1).transform(asBoundaryOptionId)
60988
61274
  }).strict();
60989
- var pageDesignBlockLookPinSchema = z48.object({
60990
- blockId: z48.string().min(1).transform(asDesignBlockId),
60991
- blockKind: z48.string().min(1),
61275
+ var pageDesignBlockLookPinSchema = z49.object({
61276
+ blockId: z49.string().min(1).transform(asDesignBlockId),
61277
+ blockKind: z49.string().min(1),
60992
61278
  choice: pageDesignUserPinnedAppearanceChoiceSchema
60993
61279
  }).strict();
60994
- var pageDesignBoundaryPinSchema = z48.object({
60995
- boundaryId: z48.string().min(1).transform(asDesignBoundaryId),
60996
- previousBlockId: z48.string().min(1).transform(asDesignBlockId),
60997
- nextBlockId: z48.string().min(1).transform(asDesignBlockId),
61280
+ var pageDesignBoundaryPinSchema = z49.object({
61281
+ boundaryId: z49.string().min(1).transform(asDesignBoundaryId),
61282
+ previousBlockId: z49.string().min(1).transform(asDesignBlockId),
61283
+ nextBlockId: z49.string().min(1).transform(asDesignBlockId),
60998
61284
  choice: pageDesignUserPinnedBoundaryChoiceSchema
60999
61285
  }).strict().superRefine((pin, ctx) => {
61000
61286
  const expectedBoundaryId = makeBoundaryId(
@@ -61003,18 +61289,18 @@ var pageDesignBoundaryPinSchema = z48.object({
61003
61289
  );
61004
61290
  if (pin.boundaryId !== expectedBoundaryId) {
61005
61291
  ctx.addIssue({
61006
- code: z48.ZodIssueCode.custom,
61292
+ code: z49.ZodIssueCode.custom,
61007
61293
  path: ["boundaryId"],
61008
61294
  message: `Boundary id must match previousBlockId and nextBlockId. Expected ${expectedBoundaryId}.`
61009
61295
  });
61010
61296
  }
61011
61297
  });
61012
- var pageDesignIntentV1Schema = z48.object({
61013
- schemaVersion: z48.literal(pageDesignIntentSchemaVersion),
61014
- siteStyleId: z48.string().min(1).transform(asSiteStyleId),
61015
- pageFlowPresetId: z48.string().min(1).transform(asPageFlowPresetId),
61016
- blockLookPins: z48.array(pageDesignBlockLookPinSchema),
61017
- boundaryPins: z48.array(pageDesignBoundaryPinSchema)
61298
+ var pageDesignIntentV1Schema = z49.object({
61299
+ schemaVersion: z49.literal(pageDesignIntentSchemaVersion),
61300
+ siteStyleId: z49.string().min(1).transform(asSiteStyleId),
61301
+ pageFlowPresetId: z49.string().min(1).transform(asPageFlowPresetId),
61302
+ blockLookPins: z49.array(pageDesignBlockLookPinSchema),
61303
+ boundaryPins: z49.array(pageDesignBoundaryPinSchema)
61018
61304
  }).strict().superRefine((intent, ctx) => {
61019
61305
  addDuplicateStringIssues(ctx, {
61020
61306
  values: intent.blockLookPins.map((pin) => pin.blockId),
@@ -61040,7 +61326,7 @@ function addDuplicateStringIssues(ctx, input) {
61040
61326
  }
61041
61327
  for (const duplicate of duplicates) {
61042
61328
  ctx.addIssue({
61043
- code: z48.ZodIssueCode.custom,
61329
+ code: z49.ZodIssueCode.custom,
61044
61330
  path: [...input.path],
61045
61331
  message: `Duplicate ${input.label}: ${duplicate}.`
61046
61332
  });
@@ -61297,81 +61583,81 @@ var defaultComponentRuntimeRules = defineComponentRuntimeRules({
61297
61583
  });
61298
61584
 
61299
61585
  // ../theme-core/src/site-styles/pageDesignAuthority.ts
61300
- import { z as z49 } from "zod";
61301
- var nonEmptyStringSchema = z49.string().min(1);
61586
+ import { z as z50 } from "zod";
61587
+ var nonEmptyStringSchema = z50.string().min(1);
61302
61588
  var blockContentVersionIdSchema = nonEmptyStringSchema.transform(asBlockContentVersionId);
61303
61589
  var designBlockIdSchema = nonEmptyStringSchema.transform(asDesignBlockId);
61304
61590
  var designPageIdSchema = nonEmptyStringSchema.transform(asDesignPageId);
61305
61591
  var designEntryIdSchema = nonEmptyStringSchema.transform(asDesignEntryId);
61306
- var blockOrderIndexSchema = z49.number().int().nonnegative().transform(asBlockOrderIndex);
61307
- var publishedPageBlockSnapshotSchema = z49.object({
61308
- kind: z49.literal("published-block-content"),
61592
+ var blockOrderIndexSchema = z50.number().int().nonnegative().transform(asBlockOrderIndex);
61593
+ var publishedPageBlockSnapshotSchema = z50.object({
61594
+ kind: z50.literal("published-block-content"),
61309
61595
  blockId: designBlockIdSchema,
61310
61596
  contentVersionId: blockContentVersionIdSchema,
61311
- identifier: z49.string().nullable(),
61597
+ identifier: z50.string().nullable(),
61312
61598
  blockKind: nonEmptyStringSchema,
61313
61599
  orderIndex: blockOrderIndexSchema
61314
61600
  }).strict();
61315
- var draftPageBlockSnapshotSchema = z49.object({
61316
- kind: z49.literal("draft-block-content"),
61601
+ var draftPageBlockSnapshotSchema = z50.object({
61602
+ kind: z50.literal("draft-block-content"),
61317
61603
  blockId: designBlockIdSchema,
61318
61604
  contentVersionId: blockContentVersionIdSchema.nullable(),
61319
- identifier: z49.string().nullable(),
61605
+ identifier: z50.string().nullable(),
61320
61606
  blockKind: nonEmptyStringSchema,
61321
61607
  orderIndex: blockOrderIndexSchema
61322
61608
  }).strict();
61323
- var missingPageBlockSnapshotSchema = z49.object({
61324
- kind: z49.literal("missing-block-content"),
61609
+ var missingPageBlockSnapshotSchema = z50.object({
61610
+ kind: z50.literal("missing-block-content"),
61325
61611
  blockId: designBlockIdSchema,
61326
- identifier: z49.string().nullable(),
61612
+ identifier: z50.string().nullable(),
61327
61613
  blockKind: nonEmptyStringSchema,
61328
61614
  orderIndex: blockOrderIndexSchema,
61329
- reason: z49.enum([
61615
+ reason: z50.enum([
61330
61616
  "new-block",
61331
61617
  "deleted-content-version",
61332
61618
  "unpublished-block"
61333
61619
  ])
61334
61620
  }).strict();
61335
- var pageBlockSnapshotSchema = z49.discriminatedUnion("kind", [
61621
+ var pageBlockSnapshotSchema = z50.discriminatedUnion("kind", [
61336
61622
  publishedPageBlockSnapshotSchema,
61337
61623
  draftPageBlockSnapshotSchema,
61338
61624
  missingPageBlockSnapshotSchema
61339
61625
  ]);
61340
- var publishedPageBlockSequenceSchema = z49.array(publishedPageBlockSnapshotSchema).superRefine(validateBlockSequence);
61341
- var draftPageBlockSequenceSchema = z49.array(pageBlockSnapshotSchema).superRefine(validateBlockSequence);
61342
- var publishedPageDesignVersionDataV1Schema = z49.object({
61343
- schemaVersion: z49.literal(1),
61344
- stage: z49.literal("published"),
61626
+ var publishedPageBlockSequenceSchema = z50.array(publishedPageBlockSnapshotSchema).superRefine(validateBlockSequence);
61627
+ var draftPageBlockSequenceSchema = z50.array(pageBlockSnapshotSchema).superRefine(validateBlockSequence);
61628
+ var publishedPageDesignVersionDataV1Schema = z50.object({
61629
+ schemaVersion: z50.literal(1),
61630
+ stage: z50.literal("published"),
61345
61631
  pageId: designPageIdSchema,
61346
61632
  blockSequence: publishedPageBlockSequenceSchema
61347
61633
  }).strict();
61348
- var draftPageDesignVersionDataV1Schema = z49.object({
61349
- schemaVersion: z49.literal(1),
61350
- stage: z49.literal("draft"),
61634
+ var draftPageDesignVersionDataV1Schema = z50.object({
61635
+ schemaVersion: z50.literal(1),
61636
+ stage: z50.literal("draft"),
61351
61637
  pageId: designPageIdSchema,
61352
61638
  blockSequence: draftPageBlockSequenceSchema
61353
61639
  }).strict();
61354
- var pageDesignVersionDataV1Schema = z49.discriminatedUnion("stage", [
61640
+ var pageDesignVersionDataV1Schema = z50.discriminatedUnion("stage", [
61355
61641
  publishedPageDesignVersionDataV1Schema,
61356
61642
  draftPageDesignVersionDataV1Schema
61357
61643
  ]);
61358
- var contentVersionOwnerSchema = z49.discriminatedUnion("kind", [
61359
- z49.object({
61360
- kind: z49.literal("block"),
61644
+ var contentVersionOwnerSchema = z50.discriminatedUnion("kind", [
61645
+ z50.object({
61646
+ kind: z50.literal("block"),
61361
61647
  blockId: designBlockIdSchema
61362
61648
  }).strict(),
61363
- z49.object({
61364
- kind: z49.literal("entry"),
61649
+ z50.object({
61650
+ kind: z50.literal("entry"),
61365
61651
  entryId: designEntryIdSchema
61366
61652
  }).strict(),
61367
- z49.object({
61368
- kind: z49.literal("page"),
61653
+ z50.object({
61654
+ kind: z50.literal("page"),
61369
61655
  pageId: designPageIdSchema
61370
61656
  }).strict()
61371
61657
  ]);
61372
61658
  function validateBlockSequence(snapshots, ctx) {
61373
- for (const issue of collectBlockSequenceIssues(snapshots)) {
61374
- ctx.addIssue(issue);
61659
+ for (const issue2 of collectBlockSequenceIssues(snapshots)) {
61660
+ ctx.addIssue(issue2);
61375
61661
  }
61376
61662
  }
61377
61663
  function collectBlockSequenceIssues(snapshots) {
@@ -61382,7 +61668,7 @@ function collectBlockSequenceIssues(snapshots) {
61382
61668
  snapshots.forEach((snapshot, index) => {
61383
61669
  if (seenBlockIds.has(snapshot.blockId)) {
61384
61670
  issues.push({
61385
- code: z49.ZodIssueCode.custom,
61671
+ code: z50.ZodIssueCode.custom,
61386
61672
  message: `Duplicate blockId in page design blockSequence: ${snapshot.blockId}`,
61387
61673
  path: [index, "blockId"]
61388
61674
  });
@@ -61391,7 +61677,7 @@ function collectBlockSequenceIssues(snapshots) {
61391
61677
  const orderIndex = snapshot.orderIndex;
61392
61678
  if (seenOrderIndexes.has(orderIndex)) {
61393
61679
  issues.push({
61394
- code: z49.ZodIssueCode.custom,
61680
+ code: z50.ZodIssueCode.custom,
61395
61681
  message: `Duplicate orderIndex in page design blockSequence: ${String(orderIndex)}`,
61396
61682
  path: [index, "orderIndex"]
61397
61683
  });
@@ -61399,7 +61685,7 @@ function collectBlockSequenceIssues(snapshots) {
61399
61685
  seenOrderIndexes.add(orderIndex);
61400
61686
  if (previousOrderIndex !== null && orderIndex <= previousOrderIndex) {
61401
61687
  issues.push({
61402
- code: z49.ZodIssueCode.custom,
61688
+ code: z50.ZodIssueCode.custom,
61403
61689
  message: `Expected orderIndex greater than ${String(previousOrderIndex)} for blockSequence position ${String(index)}; received ${String(orderIndex)}.`,
61404
61690
  path: [index, "orderIndex"]
61405
61691
  });
@@ -61455,7 +61741,7 @@ var pageFlowPresets = [
61455
61741
  init_styleTags();
61456
61742
 
61457
61743
  // ../theme-core/src/site-styles/tokenRecipes.ts
61458
- import { z as z50 } from "zod";
61744
+ import { z as z51 } from "zod";
61459
61745
  var themeTokenRecipeOptions = {
61460
61746
  palette: ["brand-led", "warm-neutral", "high-contrast", "soft-natural"],
61461
61747
  contrast: ["standard", "strong", "maximum"],
@@ -61470,14 +61756,14 @@ var themeTokenRecipeOptions = {
61470
61756
  spacing: ["compact", "regular", "airy"],
61471
61757
  motion: ["none", "subtle", "expressive"]
61472
61758
  };
61473
- var themeTokenRecipesSchema = z50.object({
61474
- palette: z50.enum(themeTokenRecipeOptions.palette),
61475
- contrast: z50.enum(themeTokenRecipeOptions.contrast),
61476
- radius: z50.enum(themeTokenRecipeOptions.radius),
61477
- shadow: z50.enum(themeTokenRecipeOptions.shadow),
61478
- typography: z50.enum(themeTokenRecipeOptions.typography),
61479
- spacing: z50.enum(themeTokenRecipeOptions.spacing),
61480
- motion: z50.enum(themeTokenRecipeOptions.motion)
61759
+ var themeTokenRecipesSchema = z51.object({
61760
+ palette: z51.enum(themeTokenRecipeOptions.palette),
61761
+ contrast: z51.enum(themeTokenRecipeOptions.contrast),
61762
+ radius: z51.enum(themeTokenRecipeOptions.radius),
61763
+ shadow: z51.enum(themeTokenRecipeOptions.shadow),
61764
+ typography: z51.enum(themeTokenRecipeOptions.typography),
61765
+ spacing: z51.enum(themeTokenRecipeOptions.spacing),
61766
+ motion: z51.enum(themeTokenRecipeOptions.motion)
61481
61767
  });
61482
61768
 
61483
61769
  // ../blocks/src/system/designCapabilities.ts
@@ -61729,7 +62015,7 @@ var bodyTextBlockDefinition = {
61729
62015
  init_builder();
61730
62016
  init_fragments2();
61731
62017
  init_defineBlock();
61732
- import { z as z51 } from "zod";
62018
+ import { z as z52 } from "zod";
61733
62019
  var composition = composeFragments([{ fragment: blogFeaturedPostFragment }]);
61734
62020
  var blogPostLayout = section(
61735
62021
  { background: "background", className: "rb-px-6 rb-py-12" },
@@ -61758,17 +62044,17 @@ var blogPostManifest = createBlockManifest({
61758
62044
  additionalFields: composition.fields,
61759
62045
  layout: blogPostLayout
61760
62046
  });
61761
- var blogPostDataSchema = z51.object({
61762
- id: z51.string(),
61763
- title: z51.string(),
61764
- slug: z51.string(),
61765
- path: z51.string(),
61766
- excerpt: z51.string().nullable().optional(),
61767
- image: z51.object({
61768
- url: z51.string().optional().nullable(),
61769
- alt: z51.string().optional().nullable()
62047
+ var blogPostDataSchema = z52.object({
62048
+ id: z52.string(),
62049
+ title: z52.string(),
62050
+ slug: z52.string(),
62051
+ path: z52.string(),
62052
+ excerpt: z52.string().nullable().optional(),
62053
+ image: z52.object({
62054
+ url: z52.string().optional().nullable(),
62055
+ alt: z52.string().optional().nullable()
61770
62056
  }).nullable().optional(),
61771
- publishedAt: z51.string().nullable().optional()
62057
+ publishedAt: z52.string().nullable().optional()
61772
62058
  });
61773
62059
  var blogPostBlockDefinition = {
61774
62060
  manifest: blogPostManifest,
@@ -61783,7 +62069,7 @@ init_schema2();
61783
62069
  init_builder();
61784
62070
  init_fragments();
61785
62071
  init_colorStyles();
61786
- import { z as z52 } from "zod";
62072
+ import { z as z53 } from "zod";
61787
62073
  var blogListingDataLoader = {
61788
62074
  endpoint: "listPublishedEntries",
61789
62075
  params: {
@@ -62101,24 +62387,24 @@ var blogListingManifest = createBlockManifest({
62101
62387
  spacing: "lg"
62102
62388
  }
62103
62389
  });
62104
- var blogPostListEntrySchema = z52.object({
62105
- id: z52.string(),
62106
- slug: z52.string(),
62107
- path: z52.string(),
62108
- title: z52.string(),
62109
- excerpt: z52.string().nullable().optional(),
62110
- publishedAt: z52.string().nullable().optional(),
62111
- updatedAt: z52.string(),
62112
- status: z52.string(),
62113
- image: z52.object({
62114
- url: z52.string(),
62115
- alt: z52.string().nullable().optional()
62390
+ var blogPostListEntrySchema = z53.object({
62391
+ id: z53.string(),
62392
+ slug: z53.string(),
62393
+ path: z53.string(),
62394
+ title: z53.string(),
62395
+ excerpt: z53.string().nullable().optional(),
62396
+ publishedAt: z53.string().nullable().optional(),
62397
+ updatedAt: z53.string(),
62398
+ status: z53.string(),
62399
+ image: z53.object({
62400
+ url: z53.string(),
62401
+ alt: z53.string().nullable().optional()
62116
62402
  }).nullable().optional()
62117
62403
  });
62118
62404
  var blogListingBlockDefinition = {
62119
62405
  manifest: blogListingManifest,
62120
62406
  dataSchemas: {
62121
- posts: z52.array(blogPostListEntrySchema).optional()
62407
+ posts: z53.array(blogPostListEntrySchema).optional()
62122
62408
  },
62123
62409
  dataLoaders: {
62124
62410
  posts: blogListingDataLoader
@@ -62239,7 +62525,7 @@ init_builder();
62239
62525
  init_fragments();
62240
62526
 
62241
62527
  // ../blocks/src/system/transforms/registry/formatting.ts
62242
- import { z as z53 } from "zod";
62528
+ import { z as z54 } from "zod";
62243
62529
  var uppercaseTransform = {
62244
62530
  id: "string.uppercase",
62245
62531
  kind: "string",
@@ -62250,7 +62536,7 @@ var fallbackTransform = {
62250
62536
  id: "value.fallback",
62251
62537
  kind: "formatter",
62252
62538
  summary: "Provide fallback when value is null or undefined",
62253
- schema: z53.object({ fallback: z53.unknown() }),
62539
+ schema: z54.object({ fallback: z54.unknown() }),
62254
62540
  run: (value, options) => value === null || value === void 0 || value === "" ? options.fallback : value
62255
62541
  };
62256
62542
  var dateFormatShort = {
@@ -62297,8 +62583,8 @@ var jsonArrayTransform = {
62297
62583
  return "";
62298
62584
  }
62299
62585
  };
62300
- var marqueeLoopOptionsSchema = z53.object({
62301
- minItems: z53.number().int().min(1).default(10)
62586
+ var marqueeLoopOptionsSchema = z54.object({
62587
+ minItems: z54.number().int().min(1).default(10)
62302
62588
  });
62303
62589
  var marqueeLoopTransform = {
62304
62590
  id: "array.marqueeLoop",
@@ -62330,7 +62616,7 @@ init_core2();
62330
62616
  init_colorStyles();
62331
62617
  init_blockColorTokens();
62332
62618
  init_sectionState_shared();
62333
- import { z as z54 } from "zod";
62619
+ import { z as z55 } from "zod";
62334
62620
  var joinClasses6 = (parts) => parts.filter(
62335
62621
  (part) => typeof part === "string" && part.trim().length > 0
62336
62622
  ).join(" ").replace(/\s+/g, " ").trim();
@@ -62390,8 +62676,8 @@ function getNavStyleClasses(navStyle) {
62390
62676
  return baseClasses;
62391
62677
  }
62392
62678
  }
62393
- var headerNavClassOptionsSchema = z54.object({
62394
- base: z54.string().optional()
62679
+ var headerNavClassOptionsSchema = z55.object({
62680
+ base: z55.string().optional()
62395
62681
  });
62396
62682
  var headerNavLinkClassTransform = {
62397
62683
  id: "ui.headerNavLinkClass",
@@ -62437,7 +62723,7 @@ var sectionStateToneTransform = {
62437
62723
  summary: "Map semantic section-state kind to feedback tone",
62438
62724
  run: (value) => sectionStateToneFromUnknown(value)
62439
62725
  };
62440
- function isPlainObject2(value) {
62726
+ function isPlainObject3(value) {
62441
62727
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
62442
62728
  }
62443
62729
  function readString(obj, key) {
@@ -62474,8 +62760,8 @@ function resolveHeroContentMaxWidth(content) {
62474
62760
  return raw;
62475
62761
  return "default";
62476
62762
  }
62477
- var heroContentWrapperClassSchema = z54.object({
62478
- base: z54.string().optional()
62763
+ var heroContentWrapperClassSchema = z55.object({
62764
+ base: z55.string().optional()
62479
62765
  });
62480
62766
  var heroContentWrapperClassTransform = {
62481
62767
  id: "ui.heroContentWrapperClass",
@@ -62483,7 +62769,7 @@ var heroContentWrapperClassTransform = {
62483
62769
  summary: "Resolve hero content wrapper className from alignment + max width controls",
62484
62770
  schema: heroContentWrapperClassSchema,
62485
62771
  run: (value, options, context) => {
62486
- const content = isPlainObject2(value) ? value : isPlainObject2(context.data) ? context.data : {};
62772
+ const content = isPlainObject3(value) ? value : isPlainObject3(context.data) ? context.data : {};
62487
62773
  const alignment = resolveHeroContentAlignment(content);
62488
62774
  const maxWidth = resolveHeroContentMaxWidth(content);
62489
62775
  const textAlignClass = alignment === "center" ? "rb-text-center" : alignment === "right" ? "rb-text-right" : "rb-text-left";
@@ -62502,7 +62788,7 @@ var heroCtaJustifyTransform = {
62502
62788
  kind: "string",
62503
62789
  summary: "Map hero contentAlignment to CTA row justify value",
62504
62790
  run: (value, _options, context) => {
62505
- const content = isPlainObject2(value) ? value : isPlainObject2(context.data) ? context.data : {};
62791
+ const content = isPlainObject3(value) ? value : isPlainObject3(context.data) ? context.data : {};
62506
62792
  const alignment = resolveHeroContentAlignment(content);
62507
62793
  return alignment === "left" ? "start" : alignment === "right" ? "end" : "center";
62508
62794
  }
@@ -62512,13 +62798,13 @@ var heroStackJustifyFromVerticalAlignmentTransform = {
62512
62798
  kind: "string",
62513
62799
  summary: "Map hero verticalAlignment to stack justify value",
62514
62800
  run: (value, _options, context) => {
62515
- const content = isPlainObject2(value) ? value : isPlainObject2(context.data) ? context.data : {};
62801
+ const content = isPlainObject3(value) ? value : isPlainObject3(context.data) ? context.data : {};
62516
62802
  const vertical = resolveHeroVerticalAlignment(content);
62517
62803
  return vertical === "top" ? "start" : vertical === "bottom" ? "end" : "center";
62518
62804
  }
62519
62805
  };
62520
- var heroGridClassFromVerticalAlignmentSchema = z54.object({
62521
- base: z54.string()
62806
+ var heroGridClassFromVerticalAlignmentSchema = z55.object({
62807
+ base: z55.string()
62522
62808
  });
62523
62809
  var heroGridClassFromVerticalAlignmentTransform = {
62524
62810
  id: "ui.heroGridClassFromVerticalAlignment",
@@ -62526,16 +62812,16 @@ var heroGridClassFromVerticalAlignmentTransform = {
62526
62812
  summary: "Append align-items class for hero split layouts based on verticalAlignment",
62527
62813
  schema: heroGridClassFromVerticalAlignmentSchema,
62528
62814
  run: (value, options, context) => {
62529
- const content = isPlainObject2(value) ? value : isPlainObject2(context.data) ? context.data : {};
62815
+ const content = isPlainObject3(value) ? value : isPlainObject3(context.data) ? context.data : {};
62530
62816
  const vertical = resolveHeroVerticalAlignment(content);
62531
62817
  const itemsClass = vertical === "top" ? "rb-items-start" : vertical === "bottom" ? "rb-items-end" : "rb-items-center";
62532
62818
  return joinClasses6([options.base, itemsClass]);
62533
62819
  }
62534
62820
  };
62535
- var imageFragmentClassOptionsSchema = z54.object({
62536
- base: z54.string(),
62537
- whenAuto: z54.string(),
62538
- whenFixed: z54.string()
62821
+ var imageFragmentClassOptionsSchema = z55.object({
62822
+ base: z55.string(),
62823
+ whenAuto: z55.string(),
62824
+ whenFixed: z55.string()
62539
62825
  });
62540
62826
  var imageFragmentClassTransform = {
62541
62827
  id: "ui.imageFragmentClass",
@@ -62551,9 +62837,9 @@ var imageFragmentClassTransform = {
62551
62837
  ]);
62552
62838
  }
62553
62839
  };
62554
- var imageFragmentSizeOptionsSchema = z54.object({
62555
- max: z54.number().int().positive().default(1920),
62556
- quality: z54.number().int().min(1).max(100).default(85)
62840
+ var imageFragmentSizeOptionsSchema = z55.object({
62841
+ max: z55.number().int().positive().default(1920),
62842
+ quality: z55.number().int().min(1).max(100).default(85)
62557
62843
  });
62558
62844
  var imageFragmentSizeTransform = {
62559
62845
  id: "ui.imageFragmentSize",
@@ -62573,9 +62859,9 @@ var imageFragmentSizeTransform = {
62573
62859
  return { width, height, quality, resize: "cover" };
62574
62860
  }
62575
62861
  };
62576
- var conditionalClassOptionsSchema = z54.object({
62577
- whenTrue: z54.string(),
62578
- whenFalse: z54.string()
62862
+ var conditionalClassOptionsSchema = z55.object({
62863
+ whenTrue: z55.string(),
62864
+ whenFalse: z55.string()
62579
62865
  });
62580
62866
  var conditionalClassTransform = {
62581
62867
  id: "ui.conditionalClass",
@@ -62587,9 +62873,9 @@ var conditionalClassTransform = {
62587
62873
  return isTrue ? options.whenTrue : options.whenFalse;
62588
62874
  }
62589
62875
  };
62590
- var twoColumnContainerClassOptionsSchema = z54.object({
62591
- base: z54.string(),
62592
- reverseClass: z54.string()
62876
+ var twoColumnContainerClassOptionsSchema = z55.object({
62877
+ base: z55.string(),
62878
+ reverseClass: z55.string()
62593
62879
  });
62594
62880
  var twoColumnContainerClassTransform = {
62595
62881
  id: "ui.twoColumnContainerClass",
@@ -62604,8 +62890,8 @@ var twoColumnContainerClassTransform = {
62604
62890
  ]);
62605
62891
  }
62606
62892
  };
62607
- var twoColumnFlexBasisOptionsSchema = z54.object({
62608
- side: z54.enum(["image", "text"])
62893
+ var twoColumnFlexBasisOptionsSchema = z55.object({
62894
+ side: z55.enum(["image", "text"])
62609
62895
  });
62610
62896
  var twoColumnFlexBasisTransform = {
62611
62897
  id: "ui.twoColumnFlexBasis",
@@ -62619,8 +62905,8 @@ var twoColumnFlexBasisTransform = {
62619
62905
  return `${percent}%`;
62620
62906
  }
62621
62907
  };
62622
- var columnsDesktopSpanClassOptionsSchema = z54.object({
62623
- base: z54.string().optional()
62908
+ var columnsDesktopSpanClassOptionsSchema = z55.object({
62909
+ base: z55.string().optional()
62624
62910
  });
62625
62911
  var columnsDesktopSpanClassTransform = {
62626
62912
  id: "ui.columnsDesktopSpanClass",
@@ -62662,8 +62948,8 @@ var columnsColsAtTransform = {
62662
62948
  id: "ui.columnsColsAt",
62663
62949
  kind: "formatter",
62664
62950
  summary: "Resolve columns count for a specific breakpoint",
62665
- schema: z54.object({
62666
- breakpoint: z54.enum(["mobile", "md", "lg", "xl"])
62951
+ schema: z55.object({
62952
+ breakpoint: z55.enum(["mobile", "md", "lg", "xl"])
62667
62953
  }),
62668
62954
  run: (value, options) => {
62669
62955
  const content = asPartialObject(value) ?? {};
@@ -62790,14 +63076,14 @@ var uiTransforms = [
62790
63076
  init_colorConversion();
62791
63077
  init_core2();
62792
63078
  init_colorStyles();
62793
- import { z as z55 } from "zod";
63079
+ import { z as z56 } from "zod";
62794
63080
  var joinClasses7 = (parts) => parts.filter(
62795
63081
  (part) => typeof part === "string" && part.trim().length > 0
62796
63082
  ).join(" ").replace(/\s+/g, " ").trim();
62797
- var maxWidthClassSchema = z55.object({
62798
- base: z55.string().optional(),
62799
- container: z55.string().optional(),
62800
- full: z55.string().optional()
63083
+ var maxWidthClassSchema = z56.object({
63084
+ base: z56.string().optional(),
63085
+ container: z56.string().optional(),
63086
+ full: z56.string().optional()
62801
63087
  });
62802
63088
  var maxWidthClassTransform = {
62803
63089
  id: "layout.maxWidthClass",
@@ -62813,11 +63099,11 @@ var maxWidthClassTransform = {
62813
63099
  return joinClasses7([base, chosen]);
62814
63100
  }
62815
63101
  };
62816
- var headerRootClassSchema = z55.object({
62817
- base: z55.string().optional(),
62818
- sticky: z55.string().optional(),
62819
- stickyTransparent: z55.string().optional(),
62820
- invert: z55.string().optional()
63102
+ var headerRootClassSchema = z56.object({
63103
+ base: z56.string().optional(),
63104
+ sticky: z56.string().optional(),
63105
+ stickyTransparent: z56.string().optional(),
63106
+ invert: z56.string().optional()
62821
63107
  });
62822
63108
  function resolveBackgroundVisualStyles(backgroundColor, tokens, defaultToken = "surface") {
62823
63109
  const backgroundToken = typeof backgroundColor === "string" && backgroundColor.trim().length > 0 ? backgroundColor : defaultToken;
@@ -62938,11 +63224,11 @@ var headerRootClassTransform = {
62938
63224
  return joinClasses7(classes);
62939
63225
  }
62940
63226
  };
62941
- var footerRootClassSchema = z55.object({
62942
- base: z55.string().optional(),
62943
- surface: z55.string().optional(),
62944
- tokenPrefix: z55.string().optional(),
62945
- transparent: z55.string().optional()
63227
+ var footerRootClassSchema = z56.object({
63228
+ base: z56.string().optional(),
63229
+ surface: z56.string().optional(),
63230
+ tokenPrefix: z56.string().optional(),
63231
+ transparent: z56.string().optional()
62946
63232
  });
62947
63233
  var footerRootClassTransform = {
62948
63234
  id: "layout.footerRootClass",
@@ -63046,8 +63332,8 @@ var footerAlignClassMap = {
63046
63332
  end: "rb-justify-end",
63047
63333
  "space-between": "rb-justify-between"
63048
63334
  };
63049
- var footerBottomBarClassSchema = z55.object({
63050
- base: z55.string().optional()
63335
+ var footerBottomBarClassSchema = z56.object({
63336
+ base: z56.string().optional()
63051
63337
  });
63052
63338
  var footerBottomBarClassTransform = {
63053
63339
  id: "layout.footerBottomBarClass",
@@ -63069,10 +63355,10 @@ var footerBottomBarClassTransform = {
63069
63355
  ]);
63070
63356
  }
63071
63357
  };
63072
- var footerBottomBarContainerClassSchema = z55.object({
63073
- base: z55.string().optional(),
63074
- fullBleed: z55.string().optional(),
63075
- contained: z55.string().optional()
63358
+ var footerBottomBarContainerClassSchema = z56.object({
63359
+ base: z56.string().optional(),
63360
+ fullBleed: z56.string().optional(),
63361
+ contained: z56.string().optional()
63076
63362
  });
63077
63363
  var footerBottomBarContainerClassTransform = {
63078
63364
  id: "layout.footerBottomBarContainerClass",
@@ -63157,8 +63443,8 @@ var footerSplitNavSingleClassTransform = {
63157
63443
  ]);
63158
63444
  }
63159
63445
  };
63160
- var footerLogoClassSchema = z55.object({
63161
- base: z55.string().optional()
63446
+ var footerLogoClassSchema = z56.object({
63447
+ base: z56.string().optional()
63162
63448
  });
63163
63449
  var footerLogoClassTransform = {
63164
63450
  id: "layout.footerLogoClass",
@@ -63180,8 +63466,8 @@ var footerLogoClassTransform = {
63180
63466
  ]);
63181
63467
  }
63182
63468
  };
63183
- var footerLogoMediaClassSchema = z55.object({
63184
- base: z55.string().optional()
63469
+ var footerLogoMediaClassSchema = z56.object({
63470
+ base: z56.string().optional()
63185
63471
  });
63186
63472
  var footerLogoMediaClassTransform = {
63187
63473
  id: "layout.footerLogoMediaClass",
@@ -63235,12 +63521,12 @@ var layoutTransforms = [
63235
63521
  ];
63236
63522
 
63237
63523
  // ../blocks/src/system/transforms/registry/media.ts
63238
- import { z as z56 } from "zod";
63239
- var mediaFromUrlOptionsSchema = z56.object({
63240
- width: z56.number().int().positive().optional(),
63241
- height: z56.number().int().positive().optional(),
63242
- quality: z56.number().int().min(1).max(100).optional(),
63243
- resize: z56.enum(["cover", "contain", "fill"]).optional()
63524
+ import { z as z57 } from "zod";
63525
+ var mediaFromUrlOptionsSchema = z57.object({
63526
+ width: z57.number().int().positive().optional(),
63527
+ height: z57.number().int().positive().optional(),
63528
+ quality: z57.number().int().min(1).max(100).optional(),
63529
+ resize: z57.enum(["cover", "contain", "fill"]).optional()
63244
63530
  });
63245
63531
  function maybeBuildSupabaseTransformUrl(inputUrl, options) {
63246
63532
  const width = options.width;
@@ -63289,10 +63575,10 @@ var mediaTransforms = [mediaFromUrl];
63289
63575
 
63290
63576
  // ../blocks/src/system/transforms/registry/content.ts
63291
63577
  init_typeGuards2();
63292
- import { z as z57 } from "zod";
63293
- var supportedRichTextTokenSchema = z57.enum(["year", "site_name"]);
63294
- var interpolateRichTextTokensOptionsSchema = z57.object({
63295
- tokens: z57.array(supportedRichTextTokenSchema).default(["year", "site_name"])
63578
+ import { z as z58 } from "zod";
63579
+ var supportedRichTextTokenSchema = z58.enum(["year", "site_name"]);
63580
+ var interpolateRichTextTokensOptionsSchema = z58.object({
63581
+ tokens: z58.array(supportedRichTextTokenSchema).default(["year", "site_name"])
63296
63582
  });
63297
63583
  var richTextTokenPattern = /\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g;
63298
63584
  function getSiteName(context) {
@@ -65127,7 +65413,7 @@ init_fragments();
65127
65413
  init_boxStyles2();
65128
65414
  init_defineBlock();
65129
65415
  init_api_bindings();
65130
- import { z as z58 } from "zod";
65416
+ import { z as z59 } from "zod";
65131
65417
  var appointmentBookingManifest = createBlockManifest({
65132
65418
  id: "block.appointment-booking",
65133
65419
  version: "2.0.0",
@@ -65203,11 +65489,11 @@ var appointmentBookingManifest = createBlockManifest({
65203
65489
  })
65204
65490
  ]
65205
65491
  });
65206
- var availabilityDataSchema = z58.object({
65207
- slots: z58.array(z58.object({
65208
- startAt: z58.string(),
65209
- endAt: z58.string(),
65210
- resourceId: z58.string()
65492
+ var availabilityDataSchema = z59.object({
65493
+ slots: z59.array(z59.object({
65494
+ startAt: z59.string(),
65495
+ endAt: z59.string(),
65496
+ resourceId: z59.string()
65211
65497
  }))
65212
65498
  });
65213
65499
  var appointmentBookingBlockDefinition = {
@@ -65243,7 +65529,7 @@ init_fragments();
65243
65529
  init_shared4();
65244
65530
  init_shop_shared();
65245
65531
  init_defineBlock();
65246
- import { z as z59 } from "zod";
65532
+ import { z as z60 } from "zod";
65247
65533
  var eventDetailsManifest = createBlockManifest({
65248
65534
  id: "block.event-details",
65249
65535
  version: "1.0.0",
@@ -65372,22 +65658,22 @@ var eventDetailsManifest = createBlockManifest({
65372
65658
  })
65373
65659
  ]
65374
65660
  });
65375
- var occurrenceContextSchema2 = z59.object({
65376
- id: z59.string(),
65377
- seriesId: z59.string(),
65378
- startsAt: z59.string(),
65379
- endsAt: z59.string(),
65380
- timeZone: z59.string(),
65381
- capacityOverride: z59.number().nullable().optional(),
65382
- overrides: z59.record(z59.string(), z59.unknown()).nullable().optional()
65661
+ var occurrenceContextSchema2 = z60.object({
65662
+ id: z60.string(),
65663
+ seriesId: z60.string(),
65664
+ startsAt: z60.string(),
65665
+ endsAt: z60.string(),
65666
+ timeZone: z60.string(),
65667
+ capacityOverride: z60.number().nullable().optional(),
65668
+ overrides: z60.record(z60.string(), z60.unknown()).nullable().optional()
65383
65669
  }).nullable();
65384
65670
  var eventDetailsBlockDefinition = {
65385
65671
  manifest: eventDetailsManifest,
65386
65672
  dataSchemas: {
65387
- eventDetailsData: z59.object({
65673
+ eventDetailsData: z60.object({
65388
65674
  events: publicEventsArraySchema,
65389
- sitePasses: z59.object({ passes: z59.array(publicPassProductSchema) }),
65390
- siteMemberships: z59.object({ memberships: z59.array(publicMembershipProductSchema) })
65675
+ sitePasses: z60.object({ passes: z60.array(publicPassProductSchema) }),
65676
+ siteMemberships: z60.object({ memberships: z60.array(publicMembershipProductSchema) })
65391
65677
  }).optional(),
65392
65678
  occurrenceContext: occurrenceContextSchema2.optional()
65393
65679
  },
@@ -65730,7 +66016,7 @@ init_builder();
65730
66016
  init_fragments();
65731
66017
  init_defineBlock();
65732
66018
  init_colorStyles();
65733
- import { z as z60 } from "zod";
66019
+ import { z as z61 } from "zod";
65734
66020
  var embedFields = [
65735
66021
  // Section heading
65736
66022
  parseFieldDefinition({
@@ -65961,18 +66247,18 @@ var embedManifest = createBlockManifest({
65961
66247
  spacing: "lg"
65962
66248
  }
65963
66249
  });
65964
- var embedEntrySchema = z60.object({
65965
- id: z60.string(),
65966
- identifier: z60.string(),
65967
- title: z60.string(),
65968
- slug: z60.string().nullable().optional(),
65969
- content: z60.record(z60.string(), z60.unknown()).optional(),
65970
- publishedAt: z60.string().nullable().optional()
66250
+ var embedEntrySchema = z61.object({
66251
+ id: z61.string(),
66252
+ identifier: z61.string(),
66253
+ title: z61.string(),
66254
+ slug: z61.string().nullable().optional(),
66255
+ content: z61.record(z61.string(), z61.unknown()).optional(),
66256
+ publishedAt: z61.string().nullable().optional()
65971
66257
  });
65972
66258
  var embedBlockDefinition = {
65973
66259
  manifest: embedManifest,
65974
66260
  dataSchemas: {
65975
- entries: z60.array(embedEntrySchema).optional()
66261
+ entries: z61.array(embedEntrySchema).optional()
65976
66262
  },
65977
66263
  dataLoaders: {
65978
66264
  entries: {
@@ -67181,7 +67467,26 @@ init_schema2();
67181
67467
  init_defineBlock();
67182
67468
  init_builder();
67183
67469
  init_fragments();
67470
+ import { z as z62 } from "zod";
67471
+ init_media2();
67184
67472
  var ITEM_NAME2 = "member";
67473
+ var teamMemberPhotoSchema = mediaSchema.refine((media2) => media2.type === "image", {
67474
+ message: "Team member photos must be image media"
67475
+ }).nullable();
67476
+ var teamMemberDataSchema = z62.object({
67477
+ _type: z62.literal("teamMember"),
67478
+ id: z62.string(),
67479
+ name: z62.string(),
67480
+ role: z62.string().nullable(),
67481
+ roleLabel: z62.string().nullable(),
67482
+ bio: z62.string().nullable(),
67483
+ summary: z62.string().nullable(),
67484
+ photo: teamMemberPhotoSchema,
67485
+ profilePath: z62.string().nullable()
67486
+ });
67487
+ var teamMembersDataSchema = z62.array(teamMemberDataSchema);
67488
+ var dynamicSourceWhen = { equals: "site_staff" };
67489
+ var manualSourceWhen = { equals: "site_staff", not: true };
67185
67490
  var headingNode = text(
67186
67491
  { as: "h2" },
67187
67492
  bind("content.heading"),
@@ -67271,7 +67576,15 @@ var teamMemberStackLayout = el(
67271
67576
  ]
67272
67577
  ),
67273
67578
  stack({ gap: "sm", className: "rb-team-member-body rb-flex-1 rb-min-w-0" }, [
67274
- text({ as: "h3" }, bind("name")),
67579
+ link(
67580
+ {
67581
+ href: { $bind: { from: "profilePath" } },
67582
+ className: "rb-team-member-name-link"
67583
+ },
67584
+ [text({ as: "h3" }, bind("name"))],
67585
+ when("profilePath")
67586
+ ),
67587
+ text({ as: "h3" }, when("profilePath", { not: true }), bind("name")),
67275
67588
  text(
67276
67589
  { as: "p", className: "rb-team-member-role" },
67277
67590
  when("role"),
@@ -67285,12 +67598,18 @@ var teamMemberStackLayout = el(
67285
67598
  ])
67286
67599
  ]
67287
67600
  );
67288
- var gridMembersNode = repeaterFragmentLayout({
67601
+ var manualGridMembersNode = when("content.source", manualSourceWhen)(repeaterFragmentLayout({
67289
67602
  collectionPath: "content.members",
67290
67603
  itemName: ITEM_NAME2,
67291
67604
  fragments: { teamMember: teamMemberFragment },
67292
67605
  itemGap: "sm"
67293
- });
67606
+ }));
67607
+ var dynamicGridMembersNode = when("content.source", dynamicSourceWhen)(repeaterFragmentLayout({
67608
+ collectionPath: "data.members",
67609
+ itemName: ITEM_NAME2,
67610
+ fragments: { teamMember: teamMemberFragment },
67611
+ itemGap: "sm"
67612
+ }));
67294
67613
  var gridVariant = wrapVariant3(
67295
67614
  el(
67296
67615
  "grid",
@@ -67304,22 +67623,29 @@ var gridVariant = wrapVariant3(
67304
67623
  },
67305
67624
  gap: { $bind: { from: "content.gap", fallback: "medium" } }
67306
67625
  },
67307
- [gridMembersNode]
67626
+ [manualGridMembersNode, dynamicGridMembersNode]
67308
67627
  )
67309
67628
  );
67310
- var stackMembersNode = repeaterFragmentLayout({
67629
+ var manualStackMembersNode = when("content.source", manualSourceWhen)(repeaterFragmentLayout({
67311
67630
  collectionPath: "content.members",
67312
67631
  itemName: ITEM_NAME2,
67313
67632
  fragments: { teamMember: teamMemberFragment },
67314
67633
  layoutOverrides: { teamMember: teamMemberStackLayout },
67315
67634
  itemGap: "sm"
67316
- });
67635
+ }));
67636
+ var dynamicStackMembersNode = when("content.source", dynamicSourceWhen)(repeaterFragmentLayout({
67637
+ collectionPath: "data.members",
67638
+ itemName: ITEM_NAME2,
67639
+ fragments: { teamMember: teamMemberFragment },
67640
+ layoutOverrides: { teamMember: teamMemberStackLayout },
67641
+ itemGap: "sm"
67642
+ }));
67317
67643
  var stackVariant = wrapVariant3({
67318
67644
  type: "stack",
67319
67645
  props: {
67320
67646
  gap: { $bind: { from: "content.gap", fallback: "medium" } }
67321
67647
  },
67322
- children: [stackMembersNode]
67648
+ children: [manualStackMembersNode, dynamicStackMembersNode]
67323
67649
  });
67324
67650
  var teamMembersManifest = createBlockManifest({
67325
67651
  id: "block.team-members",
@@ -67334,6 +67660,18 @@ var teamMembersManifest = createBlockManifest({
67334
67660
  required: false,
67335
67661
  maxLength: 120
67336
67662
  }),
67663
+ parseFieldDefinition({
67664
+ id: "source",
67665
+ type: "select",
67666
+ label: "Team members",
67667
+ description: "Choose whether to use the site-wide team or a hand-picked list.",
67668
+ defaultValue: "manual",
67669
+ options: [
67670
+ { value: "manual", label: "Choose manually" },
67671
+ { value: "site_staff", label: "Use all site team members" }
67672
+ ],
67673
+ ui: { intent: "behavior" }
67674
+ }),
67337
67675
  parseFieldDefinition({
67338
67676
  id: "layoutAlign",
67339
67677
  type: "select",
@@ -67436,18 +67774,24 @@ var teamMembersManifest = createBlockManifest({
67436
67774
  ],
67437
67775
  ui: { intent: "display" }
67438
67776
  }),
67439
- fragmentsToRepeaterField(
67440
- "members",
67441
- "Team members",
67442
- { teamMember: teamMemberFragment },
67443
- {
67444
- minItems: 0,
67445
- maxItems: 50,
67446
- itemLabel: "Team member",
67447
- itemLabelSource: "name",
67448
- description: "Add people to this section."
67777
+ {
67778
+ ...fragmentsToRepeaterField(
67779
+ "members",
67780
+ "Team members",
67781
+ { teamMember: teamMemberFragment },
67782
+ {
67783
+ minItems: 0,
67784
+ maxItems: 50,
67785
+ itemLabel: "Team member",
67786
+ itemLabelSource: "name",
67787
+ description: "Add people to this section."
67788
+ }
67789
+ ),
67790
+ ui: {
67791
+ intent: "content",
67792
+ visibleWhen: { field: "source", equals: "manual" }
67449
67793
  }
67450
- )
67794
+ }
67451
67795
  ],
67452
67796
  layout: gridVariant,
67453
67797
  variants: {
@@ -67473,7 +67817,20 @@ var teamMembersManifest = createBlockManifest({
67473
67817
  styleTokens: { spacing: "lg" }
67474
67818
  });
67475
67819
  var teamMembersBlockDefinition = {
67476
- manifest: teamMembersManifest
67820
+ manifest: teamMembersManifest,
67821
+ dataSchemas: {
67822
+ members: teamMembersDataSchema
67823
+ },
67824
+ dataLoaders: {
67825
+ members: {
67826
+ endpoint: "listPublicTeamMembers",
67827
+ params: {
67828
+ siteId: { $bind: { from: "$root.siteId" } },
67829
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } }
67830
+ },
67831
+ mode: "server"
67832
+ }
67833
+ }
67477
67834
  };
67478
67835
 
67479
67836
  // ../blocks/src/system/blocks/location-map.ts
@@ -68586,7 +68943,7 @@ var defaultTransforms = createTransformRegistry(builtinTransformDefinitions);
68586
68943
 
68587
68944
  // ../blocks/src/system/runtime/resolver.ts
68588
68945
  init_node();
68589
- import React35 from "react";
68946
+ import React36 from "react";
68590
68947
  init_registry_server();
68591
68948
  init_layout();
68592
68949
  var META_PATH_TO_STORE_KEY = {
@@ -68659,7 +69016,7 @@ function readFromSource(source, segments) {
68659
69016
  return void 0;
68660
69017
  }, source);
68661
69018
  }
68662
- function isPlainObject3(value) {
69019
+ function isPlainObject4(value) {
68663
69020
  return typeof value === "object" && value !== null && !Array.isArray(value);
68664
69021
  }
68665
69022
  function parseRouteEntry(routeId, value) {
@@ -68669,35 +69026,35 @@ function parseRouteEntry(routeId, value) {
68669
69026
  if (typeof value === "string") {
68670
69027
  return [routeId, value];
68671
69028
  }
68672
- if (isPlainObject3(value)) {
69029
+ if (isPlainObject4(value)) {
68673
69030
  return [routeId, value];
68674
69031
  }
68675
69032
  return null;
68676
69033
  }
68677
69034
  function extractRouteMapFromViewModel(viewModel) {
68678
- if (!isPlainObject3(viewModel)) return void 0;
69035
+ if (!isPlainObject4(viewModel)) return void 0;
68679
69036
  const root = viewModel.$root;
68680
- if (!isPlainObject3(root)) return void 0;
69037
+ if (!isPlainObject4(root)) return void 0;
68681
69038
  const routes = root.routes;
68682
- if (!isPlainObject3(routes)) return void 0;
69039
+ if (!isPlainObject4(routes)) return void 0;
68683
69040
  const entries = Object.entries(routes).map(([routeId, value]) => parseRouteEntry(routeId, value)).filter((entry) => entry !== null);
68684
69041
  if (entries.length === 0) return void 0;
68685
69042
  return Object.fromEntries(entries);
68686
69043
  }
68687
69044
  function extractPagesByIdentifierFromViewModel(viewModel) {
68688
- if (!isPlainObject3(viewModel)) return void 0;
69045
+ if (!isPlainObject4(viewModel)) return void 0;
68689
69046
  const root = viewModel.$root;
68690
- if (!isPlainObject3(root)) return void 0;
69047
+ if (!isPlainObject4(root)) return void 0;
68691
69048
  const pagesByIdentifier = root.pagesByIdentifier;
68692
- if (!isPlainObject3(pagesByIdentifier)) return void 0;
69049
+ if (!isPlainObject4(pagesByIdentifier)) return void 0;
68693
69050
  return pagesByIdentifier;
68694
69051
  }
68695
69052
  function extractEntriesByIdentifierFromViewModel(viewModel) {
68696
- if (!isPlainObject3(viewModel)) return void 0;
69053
+ if (!isPlainObject4(viewModel)) return void 0;
68697
69054
  const root = viewModel.$root;
68698
- if (!isPlainObject3(root)) return void 0;
69055
+ if (!isPlainObject4(root)) return void 0;
68699
69056
  const entriesByIdentifier = root.entriesByIdentifier;
68700
- if (!isPlainObject3(entriesByIdentifier)) return void 0;
69057
+ if (!isPlainObject4(entriesByIdentifier)) return void 0;
68701
69058
  return entriesByIdentifier;
68702
69059
  }
68703
69060
  function parseBinding(raw, origin) {
@@ -68713,7 +69070,7 @@ function applyTransformsAndFallback(value, binding, context) {
68713
69070
  const routeMap = context.routes ?? extractRouteMapFromViewModel(context.viewModel);
68714
69071
  const pagesByIdentifier = context.pagesByIdentifier ?? extractPagesByIdentifierFromViewModel(context.viewModel);
68715
69072
  const entriesByIdentifier = context.entriesByIdentifier ?? extractEntriesByIdentifierFromViewModel(context.viewModel);
68716
- const root = isPlainObject3(context.viewModel.$root) ? context.viewModel.$root : null;
69073
+ const root = isPlainObject4(context.viewModel.$root) ? context.viewModel.$root : null;
68717
69074
  const stage = root?.previewStage === "preview" ? "preview" : "published";
68718
69075
  const transformed = runTransforms(
68719
69076
  value,
@@ -68750,21 +69107,21 @@ function resolveTransformData(context, bindingPath) {
68750
69107
  const [first] = segments;
68751
69108
  if (typeof first === "string" && first !== "$root") {
68752
69109
  const namedScope = context.scopes.find((entry) => entry.name === first);
68753
- if (namedScope && isPlainObject3(namedScope.value)) {
69110
+ if (namedScope && isPlainObject4(namedScope.value)) {
68754
69111
  return namedScope.value;
68755
69112
  }
68756
69113
  }
68757
69114
  for (let i = context.scopes.length - 1; i >= 0; i -= 1) {
68758
69115
  const scope = context.scopes[i];
68759
- if (scope && isPlainObject3(scope.value)) {
69116
+ if (scope && isPlainObject4(scope.value)) {
68760
69117
  return scope.value;
68761
69118
  }
68762
69119
  }
68763
69120
  const content = context.viewModel.content;
68764
- if (isPlainObject3(content)) {
69121
+ if (isPlainObject4(content)) {
68765
69122
  return content;
68766
69123
  }
68767
- if (isPlainObject3(context.viewModel)) {
69124
+ if (isPlainObject4(context.viewModel)) {
68768
69125
  return context.viewModel;
68769
69126
  }
68770
69127
  return void 0;
@@ -68899,7 +69256,7 @@ function getNestedBinding(bindings, path) {
68899
69256
  const segments = path.split(".");
68900
69257
  let current = bindings;
68901
69258
  for (const segment of segments) {
68902
- if (!isPlainObject3(current)) return void 0;
69259
+ if (!isPlainObject4(current)) return void 0;
68903
69260
  current = current[segment];
68904
69261
  }
68905
69262
  return current;
@@ -68913,7 +69270,7 @@ function resolveBindingToEditorPath(fieldName, bindings, editableRouteMetadataFi
68913
69270
  };
68914
69271
  const binding = bindings[fieldName] ?? getNestedBinding(bindings, fieldName);
68915
69272
  if (!binding) return null;
68916
- if (isPlainObject3(binding) && "source" in binding) {
69273
+ if (isPlainObject4(binding) && "source" in binding) {
68917
69274
  const source = binding.source;
68918
69275
  if (source === "field" && "path" in binding) {
68919
69276
  const path = binding.path;
@@ -68932,7 +69289,7 @@ function resolveBindingToEditorPath(fieldName, bindings, editableRouteMetadataFi
68932
69289
  if (typeof option === "string") {
68933
69290
  return `content.${option}`;
68934
69291
  }
68935
- if (isPlainObject3(option) && "source" in option) {
69292
+ if (isPlainObject4(option) && "source" in option) {
68936
69293
  const optSource = option.source;
68937
69294
  if (optSource === "field" && "path" in option) {
68938
69295
  const path = option.path;
@@ -68977,7 +69334,7 @@ function injectEditorPath(props2, node, parsedBinding, context) {
68977
69334
  }
68978
69335
  }
68979
69336
  const root = context.viewModel?.$root;
68980
- const isEntryTemplatePage = isPlainObject3(root) && root.contentEntry != null;
69337
+ const isEntryTemplatePage = isPlainObject4(root) && root.contentEntry != null;
68981
69338
  if (isEntryTemplatePage && context.pathBase) return props2;
68982
69339
  const prefix = context.pathBase ?? "";
68983
69340
  const injectedPath = `${prefix}${fieldPath}`;
@@ -69006,7 +69363,7 @@ function injectMediaSlotPath(props2, node, parsedBinding, context) {
69006
69363
  if (entryPath) return props2;
69007
69364
  }
69008
69365
  const root = context.viewModel?.$root;
69009
- const isEntryTemplatePage = isPlainObject3(root) && root.contentEntry != null;
69366
+ const isEntryTemplatePage = isPlainObject4(root) && root.contentEntry != null;
69010
69367
  if (isEntryTemplatePage && context.pathBase) return props2;
69011
69368
  return {
69012
69369
  ...props2,
@@ -69059,7 +69416,7 @@ function resolveNode2(node, context, indexFallback) {
69059
69416
  blockContent: context.blockContent,
69060
69417
  fragmentRegistry: context.fragmentRegistry
69061
69418
  };
69062
- return React35.createElement(component, elementProps, ...children);
69419
+ return React36.createElement(component, elementProps, ...children);
69063
69420
  }
69064
69421
  function resolveValue(value, context) {
69065
69422
  if (value && typeof value === "object" && "$bind" in value) {
@@ -69110,7 +69467,7 @@ function getNodeProps(node) {
69110
69467
  if (key.startsWith("$")) continue;
69111
69468
  legacy[key] = value;
69112
69469
  }
69113
- const props2 = isPlainObject3(node.props) ? node.props : {};
69470
+ const props2 = isPlainObject4(node.props) ? node.props : {};
69114
69471
  return { ...legacy, ...props2 };
69115
69472
  }
69116
69473
  function resolveTree(node, options) {
@@ -69146,7 +69503,7 @@ function getDefaultComponentRegistry() {
69146
69503
  var defaultComponentRegistry = getDefaultComponentRegistry();
69147
69504
 
69148
69505
  // ../blocks/src/system/componentFactory.ts
69149
- import React36 from "react";
69506
+ import React37 from "react";
69150
69507
  init_blockOverrides();
69151
69508
  function resolveBlockVariantKey(manifest, content) {
69152
69509
  return resolveVariantKey(manifest, content);
@@ -69265,7 +69622,7 @@ function renderBlock(manifest, content, options = {}) {
69265
69622
  const resolvedRegistry = options.registry ?? getDefaultComponentRegistry();
69266
69623
  const resolvedTheme = options.theme ?? defaultThemeTokens;
69267
69624
  const cleanKind = manifest.name.replace(/^block\./, "");
69268
- const componentElement = React36.createElement(Component2, {
69625
+ const componentElement = React37.createElement(Component2, {
69269
69626
  content,
69270
69627
  data: options.data,
69271
69628
  registry: resolvedRegistry,
@@ -69281,7 +69638,7 @@ function renderBlock(manifest, content, options = {}) {
69281
69638
  return componentElement;
69282
69639
  }
69283
69640
  const styleGroup = typeof content.styleGroup === "string" ? content.styleGroup : void 0;
69284
- return React36.createElement(
69641
+ return React37.createElement(
69285
69642
  "div",
69286
69643
  {
69287
69644
  className: `block-${cleanKind}`,
@@ -69464,7 +69821,7 @@ function PageRenderer({
69464
69821
  customBlocks,
69465
69822
  isEditingMode = false
69466
69823
  }) {
69467
- const imageResolveContext = React37.useMemo(
69824
+ const imageResolveContext = React38.useMemo(
69468
69825
  () => resolvePageRendererImageResolveContext(dataContext),
69469
69826
  [
69470
69827
  dataContext?.imageResolveContext,
@@ -69575,7 +69932,7 @@ function getCachedManifestValidator(manifest, options = {}) {
69575
69932
  manifestValidatorCache.set(manifest, { ...cacheEntry, [mode]: created });
69576
69933
  return created;
69577
69934
  }
69578
- var MemoBlockSection = React37.memo(
69935
+ var MemoBlockSection = React38.memo(
69579
69936
  function MemoBlockSection2({
69580
69937
  themeTokens,
69581
69938
  themeConfig,
@@ -71226,7 +71583,7 @@ function ThemeScope({
71226
71583
  }
71227
71584
 
71228
71585
  // ../theme-core/src/ThemeFontLoader.tsx
71229
- import * as React38 from "react";
71586
+ import * as React39 from "react";
71230
71587
  init_selectorUtils();
71231
71588
  import { Fragment as Fragment24, jsx as jsx157, jsxs as jsxs103 } from "react/jsx-runtime";
71232
71589
 
@@ -71245,35 +71602,35 @@ init_blocks();
71245
71602
  // ../blocks/src/system/runtime/bindings.ts
71246
71603
  init_node();
71247
71604
  var shouldLogWarnings = isNonProductionEnv();
71248
- function isPlainObject4(value) {
71605
+ function isPlainObject5(value) {
71249
71606
  return typeof value === "object" && value !== null && !Array.isArray(value);
71250
71607
  }
71251
71608
  function isRouteMapEntry(value) {
71252
71609
  if (typeof value === "string") return true;
71253
- return isPlainObject4(value);
71610
+ return isPlainObject5(value);
71254
71611
  }
71255
71612
  function isRouteMap(value) {
71256
- if (!isPlainObject4(value)) return false;
71613
+ if (!isPlainObject5(value)) return false;
71257
71614
  return Object.values(value).every(isRouteMapEntry);
71258
71615
  }
71259
71616
  function isPageIdentifierMap(value) {
71260
- if (!isPlainObject4(value)) return false;
71617
+ if (!isPlainObject5(value)) return false;
71261
71618
  return Object.values(value).every((v) => typeof v === "string");
71262
71619
  }
71263
71620
  function isEntryIdentifierMap(value) {
71264
- if (!isPlainObject4(value)) return false;
71621
+ if (!isPlainObject5(value)) return false;
71265
71622
  for (const v of Object.values(value)) {
71266
- if (!isPlainObject4(v)) return false;
71623
+ if (!isPlainObject5(v)) return false;
71267
71624
  if (!Object.values(v).every((inner) => typeof inner === "string")) return false;
71268
71625
  }
71269
71626
  return true;
71270
71627
  }
71271
71628
  function buildTransformContext(vm) {
71272
71629
  const root = vm.$root;
71273
- const stage = root && isPlainObject4(root) && root.previewStage === "preview" ? "preview" : "published";
71274
- const routes = root && isPlainObject4(root) && isRouteMap(root.routes) ? root.routes : void 0;
71275
- const pagesByIdentifier = root && isPlainObject4(root) && isPageIdentifierMap(root.pagesByIdentifier) ? root.pagesByIdentifier : void 0;
71276
- const entriesByIdentifier = root && isPlainObject4(root) && isEntryIdentifierMap(root.entriesByIdentifier) ? root.entriesByIdentifier : void 0;
71630
+ const stage = root && isPlainObject5(root) && root.previewStage === "preview" ? "preview" : "published";
71631
+ const routes = root && isPlainObject5(root) && isRouteMap(root.routes) ? root.routes : void 0;
71632
+ const pagesByIdentifier = root && isPlainObject5(root) && isPageIdentifierMap(root.pagesByIdentifier) ? root.pagesByIdentifier : void 0;
71633
+ const entriesByIdentifier = root && isPlainObject5(root) && isEntryIdentifierMap(root.entriesByIdentifier) ? root.entriesByIdentifier : void 0;
71277
71634
  return {
71278
71635
  theme: defaultThemeTokens,
71279
71636
  stage,
@@ -71444,6 +71801,7 @@ function coercePayload(payload) {
71444
71801
  if ("form" in record && typeof record.form !== "function") return record.form;
71445
71802
  if ("entries" in record && typeof record.entries !== "function") return record.entries;
71446
71803
  if ("services" in record && typeof record.services !== "function") return record.services;
71804
+ if ("teamMembers" in record && typeof record.teamMembers !== "function") return record.teamMembers;
71447
71805
  }
71448
71806
  return payload;
71449
71807
  }
@@ -71524,6 +71882,7 @@ var SUPPORTED_LOADER_ENDPOINTS = [
71524
71882
  "listPublicEvents",
71525
71883
  "getPublicEventDetails",
71526
71884
  "listPublicCourses",
71885
+ "listPublicTeamMembers",
71527
71886
  "listPublicProducts",
71528
71887
  "listPublicPasses",
71529
71888
  "listPublicMemberships",
@@ -71580,6 +71939,10 @@ function normalizeLoaderParams(endpoint, params, context) {
71580
71939
  ensureSiteId(out, context);
71581
71940
  return out;
71582
71941
  }
71942
+ if (endpoint === "listPublicTeamMembers") {
71943
+ ensureSiteId(out, context);
71944
+ return out;
71945
+ }
71583
71946
  if (endpoint === "getPublishedEntryPreview") {
71584
71947
  ensureSiteId(out, context);
71585
71948
  return out;
@@ -71631,7 +71994,7 @@ function BlocksIslandsHydrator(props2 = {}) {
71631
71994
  }
71632
71995
 
71633
71996
  // src/rendering/blocks-page-renderer.ts
71634
- import * as React39 from "react";
71997
+ import * as React40 from "react";
71635
71998
 
71636
71999
  // ../blocks/src/rendering/server.ts
71637
72000
  init_schema2();
@@ -71711,7 +72074,7 @@ function toBlocksBlockOverrides(overrides) {
71711
72074
  for (const [key, OverrideComponent] of Object.entries(overrides)) {
71712
72075
  result[key] = function BlocksOverrideAdapter(props2) {
71713
72076
  const sdkOverride = OverrideComponent;
71714
- return React39.createElement(sdkOverride, props2);
72077
+ return React40.createElement(sdkOverride, props2);
71715
72078
  };
71716
72079
  }
71717
72080
  return result;
@@ -71726,15 +72089,15 @@ function PageRenderer2(props2) {
71726
72089
  sdkConfig: blocksSdkConfig,
71727
72090
  customBlocks: normalizeSdkCustomBlocks(props2.customBlocks)
71728
72091
  };
71729
- return React39.createElement(PageRenderer, blocksProps);
72092
+ return React40.createElement(PageRenderer, blocksProps);
71730
72093
  }
71731
72094
 
71732
72095
  // src/rendering/blocks-theme-scope.ts
71733
- import * as React40 from "react";
72096
+ import * as React41 from "react";
71734
72097
  function ThemeScope2(props2) {
71735
72098
  const { theme, children, ...rest } = props2;
71736
72099
  const blocksTheme = parseBlocksTheme(theme);
71737
- return React40.createElement(ThemeScope, {
72100
+ return React41.createElement(ThemeScope, {
71738
72101
  ...rest,
71739
72102
  theme: blocksTheme,
71740
72103
  children: children ?? null
@@ -73258,13 +73621,150 @@ var ENDPOINT_DEFINITIONS = {
73258
73621
  "server:internal_error"
73259
73622
  ]
73260
73623
  },
73261
- deleteAppointmentResource: {
73624
+ removeAppointmentResource: {
73262
73625
  path: "/sites/{siteId}/bookings/resources/{resourceId}",
73263
73626
  method: "DELETE",
73264
73627
  auth: "user",
73265
73628
  responseKind: "json",
73266
73629
  errors: ["resource:not_found", "server:internal_error"]
73267
73630
  },
73631
+ createTeamMemberProfile: {
73632
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile",
73633
+ method: "POST",
73634
+ auth: "user",
73635
+ responseKind: "json",
73636
+ errors: [
73637
+ "validation:invalid_input",
73638
+ "resource:not_found",
73639
+ "resource:conflict",
73640
+ "server:internal_error"
73641
+ ]
73642
+ },
73643
+ updateTeamMemberProfilePolicy: {
73644
+ path: "/sites/{siteId}/bookings/resources/profile-policy",
73645
+ method: "PUT",
73646
+ auth: "user",
73647
+ responseKind: "json",
73648
+ errors: ["validation:invalid_input", "server:internal_error"]
73649
+ },
73650
+ updateTeamMemberProfileContent: {
73651
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/content",
73652
+ method: "PUT",
73653
+ tags: [
73654
+ "site-{siteId}",
73655
+ "content-{siteId}-team-member",
73656
+ "content-entry-{entryId}"
73657
+ ],
73658
+ auth: "user",
73659
+ responseKind: "json",
73660
+ errors: [
73661
+ "validation:invalid_input",
73662
+ "resource:not_found",
73663
+ "resource:conflict",
73664
+ "server:internal_error"
73665
+ ]
73666
+ },
73667
+ publishTeamMemberProfile: {
73668
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/publish",
73669
+ method: "POST",
73670
+ tags: [
73671
+ "site-{siteId}",
73672
+ "content-{siteId}-team-member",
73673
+ "content-entry-{entryId}"
73674
+ ],
73675
+ auth: "user",
73676
+ responseKind: "json",
73677
+ errors: [
73678
+ "validation:invalid_input",
73679
+ "resource:not_found",
73680
+ "server:internal_error"
73681
+ ]
73682
+ },
73683
+ discardTeamMemberProfileDraft: {
73684
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/discard",
73685
+ method: "POST",
73686
+ tags: [
73687
+ "site-{siteId}",
73688
+ "content-{siteId}-team-member",
73689
+ "content-entry-{entryId}"
73690
+ ],
73691
+ auth: "user",
73692
+ responseKind: "json",
73693
+ errors: [
73694
+ "validation:invalid_input",
73695
+ "resource:not_found",
73696
+ "resource:conflict",
73697
+ "server:internal_error"
73698
+ ]
73699
+ },
73700
+ unpublishTeamMemberProfile: {
73701
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/unpublish",
73702
+ method: "POST",
73703
+ tags: [
73704
+ "site-{siteId}",
73705
+ "content-{siteId}-team-member",
73706
+ "content-entry-{entryId}"
73707
+ ],
73708
+ auth: "user",
73709
+ responseKind: "json",
73710
+ errors: [
73711
+ "validation:invalid_input",
73712
+ "resource:not_found",
73713
+ "resource:conflict",
73714
+ "server:internal_error"
73715
+ ]
73716
+ },
73717
+ scheduleTeamMemberProfile: {
73718
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/schedule",
73719
+ method: "POST",
73720
+ tags: [
73721
+ "site-{siteId}",
73722
+ "content-{siteId}-team-member",
73723
+ "content-entry-{entryId}"
73724
+ ],
73725
+ auth: "user",
73726
+ responseKind: "json",
73727
+ errors: [
73728
+ "validation:invalid_input",
73729
+ "resource:not_found",
73730
+ "resource:conflict",
73731
+ "server:internal_error"
73732
+ ]
73733
+ },
73734
+ cancelScheduledTeamMemberProfile: {
73735
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/schedule",
73736
+ method: "DELETE",
73737
+ tags: [
73738
+ "site-{siteId}",
73739
+ "content-{siteId}-team-member",
73740
+ "content-entry-{entryId}"
73741
+ ],
73742
+ auth: "user",
73743
+ responseKind: "json",
73744
+ errors: [
73745
+ "validation:invalid_input",
73746
+ "resource:not_found",
73747
+ "resource:conflict",
73748
+ "server:internal_error"
73749
+ ]
73750
+ },
73751
+ updateTeamMemberProfileRouteMetadata: {
73752
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/routes/{routeId}/metadata",
73753
+ method: "PATCH",
73754
+ tags: [
73755
+ TAG_TEMPLATES.siteCollection,
73756
+ TAG_TEMPLATES.siteRoutableContent,
73757
+ TAG_TEMPLATES.routeById
73758
+ ],
73759
+ auth: "user",
73760
+ responseKind: "json",
73761
+ errors: [
73762
+ "validation:invalid_input",
73763
+ "resource:not_found",
73764
+ "resource:conflict",
73765
+ "server:internal_error"
73766
+ ]
73767
+ },
73268
73768
  listAppointmentServices: {
73269
73769
  path: "/sites/{siteId}/bookings/services",
73270
73770
  method: "GET",
@@ -75638,6 +76138,15 @@ var ENDPOINT_DEFINITIONS = {
75638
76138
  auth: "public",
75639
76139
  responseKind: "json"
75640
76140
  },
76141
+ listPublicTeamMembers: {
76142
+ path: "/public/sites/{siteId}/team-members",
76143
+ method: "GET",
76144
+ revalidate: 60,
76145
+ tags: ["public-team-members-{siteId}"],
76146
+ errors: [],
76147
+ auth: "public",
76148
+ responseKind: "json"
76149
+ },
75641
76150
  getPublicCourse: {
75642
76151
  path: "/public/sites/{siteId}/courses/{courseId}",
75643
76152
  method: "GET",
@@ -77929,60 +78438,60 @@ var ENDPOINT_DEFINITIONS = {
77929
78438
  };
77930
78439
 
77931
78440
  // ../api/src/navigation/contracts.ts
77932
- import { z as z61 } from "zod";
77933
- var portalLinkPayloadSchema = z61.object({
77934
- kind: z61.literal("portal"),
77935
- path: z61.string().trim().startsWith("/").optional(),
77936
- labels: z61.object({
77937
- loggedOut: z61.string().trim().min(1).optional(),
77938
- loggedIn: z61.string().trim().min(1).optional()
78441
+ import { z as z63 } from "zod";
78442
+ var portalLinkPayloadSchema = z63.object({
78443
+ kind: z63.literal("portal"),
78444
+ path: z63.string().trim().startsWith("/").optional(),
78445
+ labels: z63.object({
78446
+ loggedOut: z63.string().trim().min(1).optional(),
78447
+ loggedIn: z63.string().trim().min(1).optional()
77939
78448
  }).optional()
77940
78449
  });
77941
- var cartLinkLabelConfigSchema = z61.discriminatedUnion("kind", [
77942
- z61.object({
77943
- kind: z61.literal("icon-only")
78450
+ var cartLinkLabelConfigSchema = z63.discriminatedUnion("kind", [
78451
+ z63.object({
78452
+ kind: z63.literal("icon-only")
77944
78453
  }),
77945
- z61.object({
77946
- kind: z61.literal("icon-with-label"),
77947
- label: z61.string().trim().min(1)
78454
+ z63.object({
78455
+ kind: z63.literal("icon-with-label"),
78456
+ label: z63.string().trim().min(1)
77948
78457
  })
77949
78458
  ]);
77950
- var cartLinkPayloadSchema = z61.object({
77951
- kind: z61.literal("cart"),
77952
- badge: z61.enum(["show-count", "hidden"]),
78459
+ var cartLinkPayloadSchema = z63.object({
78460
+ kind: z63.literal("cart"),
78461
+ badge: z63.enum(["show-count", "hidden"]),
77953
78462
  label: cartLinkLabelConfigSchema
77954
78463
  });
77955
- var internalLinkPayloadSchema = z61.object({
77956
- kind: z61.literal("internal"),
77957
- routeId: z61.string().uuid(),
77958
- entityId: z61.string().uuid(),
77959
- entityType: z61.enum(["page", "content"]),
77960
- href: z61.string().min(1),
77961
- title: z61.string().min(1),
77962
- typeLabel: z61.string().min(1),
77963
- contentTypeKey: z61.string().nullable().optional(),
77964
- contentTypeName: z61.string().nullable().optional(),
77965
- updatedAt: z61.string().nullable().optional()
78464
+ var internalLinkPayloadSchema = z63.object({
78465
+ kind: z63.literal("internal"),
78466
+ routeId: z63.string().uuid(),
78467
+ entityId: z63.string().uuid(),
78468
+ entityType: z63.enum(["page", "content"]),
78469
+ href: z63.string().min(1),
78470
+ title: z63.string().min(1),
78471
+ typeLabel: z63.string().min(1),
78472
+ contentTypeKey: z63.string().nullable().optional(),
78473
+ contentTypeName: z63.string().nullable().optional(),
78474
+ updatedAt: z63.string().nullable().optional()
77966
78475
  }).passthrough();
77967
- var externalLinkSchema2 = z61.object({
77968
- kind: z61.literal("external"),
78476
+ var externalLinkSchema2 = z63.object({
78477
+ kind: z63.literal("external"),
77969
78478
  // Navigation external links are expected to be absolute URLs.
77970
- href: z61.string().url()
78479
+ href: z63.string().url()
77971
78480
  });
77972
- var customLinkSchema2 = z61.object({
77973
- kind: z61.literal("url"),
77974
- href: z61.string().min(1)
78481
+ var customLinkSchema2 = z63.object({
78482
+ kind: z63.literal("url"),
78483
+ href: z63.string().min(1)
77975
78484
  });
77976
- var pageLinkSchema2 = z61.object({
77977
- kind: z61.literal("page"),
77978
- identifier: z61.string().min(1)
78485
+ var pageLinkSchema2 = z63.object({
78486
+ kind: z63.literal("page"),
78487
+ identifier: z63.string().min(1)
77979
78488
  });
77980
- var entryLinkSchema2 = z61.object({
77981
- kind: z61.literal("entry"),
77982
- contentType: z61.string().min(1),
77983
- identifier: z61.string().min(1)
78489
+ var entryLinkSchema2 = z63.object({
78490
+ kind: z63.literal("entry"),
78491
+ contentType: z63.string().min(1),
78492
+ identifier: z63.string().min(1)
77984
78493
  });
77985
- var linkPayloadSchema = z61.discriminatedUnion("kind", [
78494
+ var linkPayloadSchema = z63.discriminatedUnion("kind", [
77986
78495
  internalLinkPayloadSchema,
77987
78496
  pageLinkSchema2,
77988
78497
  entryLinkSchema2,
@@ -77999,7 +78508,7 @@ var navigationLinkInputSchemaOptions = [
77999
78508
  portalLinkPayloadSchema,
78000
78509
  cartLinkPayloadSchema
78001
78510
  ];
78002
- var navigationLinkInputSchema = z61.discriminatedUnion(
78511
+ var navigationLinkInputSchema = z63.discriminatedUnion(
78003
78512
  "kind",
78004
78513
  navigationLinkInputSchemaOptions
78005
78514
  );
@@ -78007,21 +78516,21 @@ var navigationLinkInputSchema = z61.discriminatedUnion(
78007
78516
  // ../api/src/sdkConfig/contracts.ts
78008
78517
  init_schema2();
78009
78518
  init_schema();
78010
- import { z as z62 } from "zod";
78519
+ import { z as z64 } from "zod";
78011
78520
  function unsafeRetypeZodSchema(schema) {
78012
78521
  return schema;
78013
78522
  }
78014
- var navIdListSchema = z62.preprocess((value) => {
78523
+ var navIdListSchema = z64.preprocess((value) => {
78015
78524
  if (!Array.isArray(value)) return void 0;
78016
78525
  const filtered = value.filter((v) => typeof v === "string" && v.trim().length > 0);
78017
78526
  return filtered.length > 0 ? filtered : void 0;
78018
- }, z62.array(z62.string()).max(200).optional());
78019
- var dashboardNavVisibilityBaseSchema = z62.object({
78020
- mode: z62.enum(["augment", "restrict"]).optional(),
78527
+ }, z64.array(z64.string()).max(200).optional());
78528
+ var dashboardNavVisibilityBaseSchema = z64.object({
78529
+ mode: z64.enum(["augment", "restrict"]).optional(),
78021
78530
  allowIds: navIdListSchema,
78022
78531
  denyIds: navIdListSchema
78023
78532
  }).strip();
78024
- var dashboardNavVisibilityRolesSchema = z62.object({
78533
+ var dashboardNavVisibilityRolesSchema = z64.object({
78025
78534
  administrator: dashboardNavVisibilityBaseSchema.optional(),
78026
78535
  editor: dashboardNavVisibilityBaseSchema.optional(),
78027
78536
  team_member: dashboardNavVisibilityBaseSchema.optional(),
@@ -78030,57 +78539,57 @@ var dashboardNavVisibilityRolesSchema = z62.object({
78030
78539
  var dashboardNavVisibilitySchema = dashboardNavVisibilityBaseSchema.extend({
78031
78540
  roles: dashboardNavVisibilityRolesSchema
78032
78541
  }).strip();
78033
- var dashboardNavigationConfigSchema = z62.object({
78542
+ var dashboardNavigationConfigSchema = z64.object({
78034
78543
  siteNav: dashboardNavVisibilitySchema.optional(),
78035
78544
  settingsNav: dashboardNavVisibilitySchema.optional()
78036
78545
  }).strip();
78037
- var dashboardConfigSchema = z62.object({
78038
- previewEditingEnabled: z62.boolean().optional(),
78546
+ var dashboardConfigSchema = z64.object({
78547
+ previewEditingEnabled: z64.boolean().optional(),
78039
78548
  navigation: dashboardNavigationConfigSchema.optional()
78040
78549
  }).strip();
78041
78550
  var fieldDefinitionInputSchema = unsafeRetypeZodSchema(fieldSchema);
78042
78551
  var nodeDefinitionSchema = unsafeRetypeZodSchema(NodeSchema);
78043
- var sdkLoaderEndpointSchema = z62.enum(SUPPORTED_LOADER_ENDPOINTS);
78044
- var loaderParamBindingSchema = z62.object({
78045
- $bind: z62.object({
78046
- from: z62.string().min(1, "Binding path is required"),
78047
- fallback: z62.string().optional()
78552
+ var sdkLoaderEndpointSchema = z64.enum(SUPPORTED_LOADER_ENDPOINTS);
78553
+ var loaderParamBindingSchema = z64.object({
78554
+ $bind: z64.object({
78555
+ from: z64.string().min(1, "Binding path is required"),
78556
+ fallback: z64.string().optional()
78048
78557
  })
78049
78558
  });
78050
- var loaderParamValueSchema = z62.union([
78051
- z62.string(),
78052
- z62.number(),
78053
- z62.boolean(),
78559
+ var loaderParamValueSchema = z64.union([
78560
+ z64.string(),
78561
+ z64.number(),
78562
+ z64.boolean(),
78054
78563
  loaderParamBindingSchema
78055
78564
  ]);
78056
- var sdkConfigLoaderSchema = z62.object({
78565
+ var sdkConfigLoaderSchema = z64.object({
78057
78566
  endpoint: sdkLoaderEndpointSchema,
78058
- params: z62.record(z62.string(), loaderParamValueSchema),
78059
- mode: z62.enum(["server", "client"]).default("server")
78567
+ params: z64.record(z64.string(), loaderParamValueSchema),
78568
+ mode: z64.enum(["server", "client"]).default("server")
78060
78569
  });
78061
- var sdkDataLoadersSchema = z62.record(z62.string(), sdkConfigLoaderSchema).refine((loaders) => Object.keys(loaders).length <= 5, { message: "Maximum 5 data loaders per block" }).optional();
78062
- var sdkCustomBlockIdSchema = z62.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
78570
+ var sdkDataLoadersSchema = z64.record(z64.string(), sdkConfigLoaderSchema).refine((loaders) => Object.keys(loaders).length <= 5, { message: "Maximum 5 data loaders per block" }).optional();
78571
+ var sdkCustomBlockIdSchema = z64.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
78063
78572
  message: "Block ID must start with 'custom.' followed by lowercase letters, numbers, or hyphens"
78064
78573
  }).transform((value) => value);
78065
- var sdkCustomBlockInputSchema = z62.object({
78574
+ var sdkCustomBlockInputSchema = z64.object({
78066
78575
  id: sdkCustomBlockIdSchema,
78067
- title: z62.string().min(1),
78068
- titleSource: z62.union([z62.string().min(1), z62.array(z62.string().min(1)).min(1)]).optional(),
78069
- description: z62.string().optional(),
78576
+ title: z64.string().min(1),
78577
+ titleSource: z64.union([z64.string().min(1), z64.array(z64.string().min(1)).min(1)]).optional(),
78578
+ description: z64.string().optional(),
78070
78579
  category: blockCategoryEnum,
78071
- icon: z62.string().optional(),
78072
- tags: z62.array(z62.string()).optional(),
78580
+ icon: z64.string().optional(),
78581
+ tags: z64.array(z64.string()).optional(),
78073
78582
  fields: fieldDefinitionInputSchema.array().min(1),
78074
78583
  dataLoaders: sdkDataLoadersSchema,
78075
78584
  layout: NodeSchema.optional(),
78076
- variants: z62.record(z62.string().min(1), NodeSchema).optional(),
78077
- defaultVariant: z62.string().min(1).optional(),
78078
- variantOptions: z62.record(
78079
- z62.string().min(1),
78080
- z62.object({
78081
- label: z62.string().min(1).optional(),
78082
- description: z62.string().min(1).optional(),
78083
- icon: z62.string().min(1).optional()
78585
+ variants: z64.record(z64.string().min(1), NodeSchema).optional(),
78586
+ defaultVariant: z64.string().min(1).optional(),
78587
+ variantOptions: z64.record(
78588
+ z64.string().min(1),
78589
+ z64.object({
78590
+ label: z64.string().min(1).optional(),
78591
+ description: z64.string().min(1).optional(),
78592
+ icon: z64.string().min(1).optional()
78084
78593
  })
78085
78594
  ).optional()
78086
78595
  }).superRefine((data, ctx) => {
@@ -78090,7 +78599,7 @@ var sdkCustomBlockInputSchema = z62.object({
78090
78599
  const exists = data.fields.some((field) => field.id === source);
78091
78600
  if (!exists) {
78092
78601
  ctx.addIssue({
78093
- code: z62.ZodIssueCode.custom,
78602
+ code: z64.ZodIssueCode.custom,
78094
78603
  message: `titleSource must reference a valid field ID (got "${source}")`,
78095
78604
  path: Array.isArray(data.titleSource) ? ["titleSource", index] : ["titleSource"]
78096
78605
  });
@@ -78099,7 +78608,7 @@ var sdkCustomBlockInputSchema = z62.object({
78099
78608
  }
78100
78609
  if (data.layout && data.variants) {
78101
78610
  ctx.addIssue({
78102
- code: z62.ZodIssueCode.custom,
78611
+ code: z64.ZodIssueCode.custom,
78103
78612
  message: "Custom block must define either `layout` or `variants`, not both",
78104
78613
  path: ["variants"]
78105
78614
  });
@@ -78108,14 +78617,14 @@ var sdkCustomBlockInputSchema = z62.object({
78108
78617
  const keys = Object.keys(data.variants);
78109
78618
  if (keys.length === 0) {
78110
78619
  ctx.addIssue({
78111
- code: z62.ZodIssueCode.custom,
78620
+ code: z64.ZodIssueCode.custom,
78112
78621
  message: "`variants` must contain at least one variant key",
78113
78622
  path: ["variants"]
78114
78623
  });
78115
78624
  }
78116
78625
  if (data.defaultVariant && !Object.prototype.hasOwnProperty.call(data.variants, data.defaultVariant)) {
78117
78626
  ctx.addIssue({
78118
- code: z62.ZodIssueCode.custom,
78627
+ code: z64.ZodIssueCode.custom,
78119
78628
  message: "`defaultVariant` must be a key present in `variants`",
78120
78629
  path: ["defaultVariant"]
78121
78630
  });
@@ -78124,7 +78633,7 @@ var sdkCustomBlockInputSchema = z62.object({
78124
78633
  for (const key of Object.keys(data.variantOptions)) {
78125
78634
  if (!Object.prototype.hasOwnProperty.call(data.variants, key)) {
78126
78635
  ctx.addIssue({
78127
- code: z62.ZodIssueCode.custom,
78636
+ code: z64.ZodIssueCode.custom,
78128
78637
  message: "`variantOptions` key must exist in `variants`",
78129
78638
  path: ["variantOptions", key]
78130
78639
  });
@@ -78133,74 +78642,74 @@ var sdkCustomBlockInputSchema = z62.object({
78133
78642
  }
78134
78643
  }
78135
78644
  });
78136
- var sdkBlockFieldExtensionInputSchema = z62.object({
78645
+ var sdkBlockFieldExtensionInputSchema = z64.object({
78137
78646
  fields: fieldDefinitionInputSchema.array().min(1)
78138
78647
  });
78139
- var sdkBlockFieldExtensionsInputSchema = z62.record(
78140
- z62.string().min(1),
78648
+ var sdkBlockFieldExtensionsInputSchema = z64.record(
78649
+ z64.string().min(1),
78141
78650
  sdkBlockFieldExtensionInputSchema
78142
78651
  );
78143
- var sdkThemePaletteSchema = z62.record(z62.string(), z62.string());
78144
- var sdkThemeConfigSchema = z62.object({
78652
+ var sdkThemePaletteSchema = z64.record(z64.string(), z64.string());
78653
+ var sdkThemeConfigSchema = z64.object({
78145
78654
  palette: sdkThemePaletteSchema
78146
78655
  });
78147
- var sdkSectionBackgroundSchema = z62.object({
78148
- id: z62.string().min(1),
78149
- label: z62.string().min(1),
78150
- token: z62.string().min(1)
78656
+ var sdkSectionBackgroundSchema = z64.object({
78657
+ id: z64.string().min(1),
78658
+ label: z64.string().min(1),
78659
+ token: z64.string().min(1)
78151
78660
  });
78152
- var sdkSectionOptionsConfigSchema = z62.object({
78153
- backgroundColor: z62.boolean().optional(),
78154
- backgroundImage: z62.boolean().optional(),
78155
- backgroundGradient: z62.boolean().optional(),
78156
- spacing: z62.union([z62.array(z62.enum(["compact", "default", "spacious"])), z62.boolean()]).optional(),
78157
- textColor: z62.boolean().optional()
78661
+ var sdkSectionOptionsConfigSchema = z64.object({
78662
+ backgroundColor: z64.boolean().optional(),
78663
+ backgroundImage: z64.boolean().optional(),
78664
+ backgroundGradient: z64.boolean().optional(),
78665
+ spacing: z64.union([z64.array(z64.enum(["compact", "default", "spacious"])), z64.boolean()]).optional(),
78666
+ textColor: z64.boolean().optional()
78158
78667
  });
78159
- var sdkContainerOptionsConfigSchema = z62.object({
78160
- maxWidth: z62.union([z62.array(z62.enum(["narrow", "default", "wide", "full"])), z62.boolean()]).optional(),
78161
- alignment: z62.union([z62.array(z62.enum(["left", "center", "right"])), z62.boolean()]).optional()
78668
+ var sdkContainerOptionsConfigSchema = z64.object({
78669
+ maxWidth: z64.union([z64.array(z64.enum(["narrow", "default", "wide", "full"])), z64.boolean()]).optional(),
78670
+ alignment: z64.union([z64.array(z64.enum(["left", "center", "right"])), z64.boolean()]).optional()
78162
78671
  });
78163
- var sdkSiteStyleConfigSchema = z62.object({
78164
- sectionBackgrounds: z62.array(sdkSectionBackgroundSchema).optional(),
78672
+ var sdkSiteStyleConfigSchema = z64.object({
78673
+ sectionBackgrounds: z64.array(sdkSectionBackgroundSchema).optional(),
78165
78674
  sectionOptions: sdkSectionOptionsConfigSchema.optional(),
78166
78675
  containerOptions: sdkContainerOptionsConfigSchema.optional()
78167
78676
  });
78168
- var sdkSiteLayoutConfigSchema = z62.object({
78169
- footerBlocks: z62.array(
78170
- z62.object({
78171
- id: z62.string().min(1).optional(),
78172
- kind: z62.string().min(1),
78173
- content: z62.record(z62.string(), z62.unknown()).optional()
78677
+ var sdkSiteLayoutConfigSchema = z64.object({
78678
+ footerBlocks: z64.array(
78679
+ z64.object({
78680
+ id: z64.string().min(1).optional(),
78681
+ kind: z64.string().min(1),
78682
+ content: z64.record(z64.string(), z64.unknown()).optional()
78174
78683
  })
78175
78684
  ).optional()
78176
78685
  });
78177
- var sdkFieldSelectOptionSchema = z62.object({
78178
- value: z62.string(),
78179
- label: z62.string()
78686
+ var sdkFieldSelectOptionSchema = z64.object({
78687
+ value: z64.string(),
78688
+ label: z64.string()
78180
78689
  });
78181
- var sdkBlockFieldConfigSchema = z62.object({
78182
- options: z62.array(sdkFieldSelectOptionSchema).optional()
78690
+ var sdkBlockFieldConfigSchema = z64.object({
78691
+ options: z64.array(sdkFieldSelectOptionSchema).optional()
78183
78692
  });
78184
- var sdkBlockFieldOptionsMapSchema = z62.record(
78185
- z62.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
78693
+ var sdkBlockFieldOptionsMapSchema = z64.record(
78694
+ z64.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
78186
78695
  message: "Block ID must be 'block.*' or 'custom.*' format"
78187
78696
  }),
78188
- z62.record(z62.string().min(1), sdkBlockFieldConfigSchema)
78697
+ z64.record(z64.string().min(1), sdkBlockFieldConfigSchema)
78189
78698
  ).optional();
78190
- var sdkContentTypeTemplateConfigSchema = z62.object({
78191
- blocks: z62.array(z62.unknown())
78699
+ var sdkContentTypeTemplateConfigSchema = z64.object({
78700
+ blocks: z64.array(z64.unknown())
78192
78701
  }).passthrough();
78193
- var sdkContentTypeConfigSchema = z62.object({
78194
- key: z62.string().min(1),
78195
- fields: z62.array(z62.unknown()),
78702
+ var sdkContentTypeConfigSchema = z64.object({
78703
+ key: z64.string().min(1),
78704
+ fields: z64.array(z64.unknown()),
78196
78705
  template: sdkContentTypeTemplateConfigSchema.nullable().optional()
78197
78706
  }).passthrough();
78198
- var sdkContentConfigSchema = z62.object({
78199
- contentTypes: z62.array(sdkContentTypeConfigSchema).optional(),
78200
- pages: z62.array(z62.unknown()).optional(),
78201
- entries: z62.array(z62.unknown()).optional(),
78202
- navigationMenus: z62.array(z62.unknown()).optional(),
78203
- settings: z62.unknown().optional()
78707
+ var sdkContentConfigSchema = z64.object({
78708
+ contentTypes: z64.array(sdkContentTypeConfigSchema).optional(),
78709
+ pages: z64.array(z64.unknown()).optional(),
78710
+ entries: z64.array(z64.unknown()).optional(),
78711
+ navigationMenus: z64.array(z64.unknown()).optional(),
78712
+ settings: z64.unknown().optional()
78204
78713
  }).passthrough();
78205
78714
  var SDK_WORKFLOW_ID_MAX_LENGTH = 120;
78206
78715
  var SDK_WORKFLOW_TITLE_MAX_LENGTH = 120;
@@ -78213,41 +78722,41 @@ var SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH = 120;
78213
78722
  var SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH = 500;
78214
78723
  var SDK_WORKFLOW_ID_PATTERN = /^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/;
78215
78724
  var SDK_WORKFLOW_ENDPOINT_PATTERN = /^\//;
78216
- var sdkWorkflowIdSchema = z62.string().min(1).max(SDK_WORKFLOW_ID_MAX_LENGTH).regex(SDK_WORKFLOW_ID_PATTERN, {
78725
+ var sdkWorkflowIdSchema = z64.string().min(1).max(SDK_WORKFLOW_ID_MAX_LENGTH).regex(SDK_WORKFLOW_ID_PATTERN, {
78217
78726
  message: "Workflow ID must start with a lowercase letter and use lowercase letters, numbers, dots, underscores, or hyphens"
78218
78727
  });
78219
- var sdkWorkflowEndpointSchema = z62.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 "/"' });
78220
- var sdkWorkflowManualTriggerSchema = z62.object({
78221
- type: z62.literal("manual")
78728
+ var sdkWorkflowEndpointSchema = 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 "/"' });
78729
+ var sdkWorkflowManualTriggerSchema = z64.object({
78730
+ type: z64.literal("manual")
78222
78731
  }).strict();
78223
- var sdkWorkflowTriggerSchema = z62.discriminatedUnion("type", [
78732
+ var sdkWorkflowTriggerSchema = z64.discriminatedUnion("type", [
78224
78733
  sdkWorkflowManualTriggerSchema
78225
78734
  ]);
78226
- var sdkWorkflowConfirmationSchema = z62.object({
78227
- title: z62.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH),
78228
- body: z62.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH).optional()
78735
+ var sdkWorkflowConfirmationSchema = z64.object({
78736
+ title: z64.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH),
78737
+ body: z64.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH).optional()
78229
78738
  }).strict();
78230
- var sdkWorkflowConfigSchema = z62.object({
78739
+ var sdkWorkflowConfigSchema = z64.object({
78231
78740
  id: sdkWorkflowIdSchema,
78232
- title: z62.string().trim().min(1).max(SDK_WORKFLOW_TITLE_MAX_LENGTH),
78233
- description: z62.string().trim().min(1).max(SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH).optional(),
78234
- contentType: z62.string().trim().min(1).max(SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH),
78741
+ title: z64.string().trim().min(1).max(SDK_WORKFLOW_TITLE_MAX_LENGTH),
78742
+ description: z64.string().trim().min(1).max(SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH).optional(),
78743
+ contentType: z64.string().trim().min(1).max(SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH),
78235
78744
  endpoint: sdkWorkflowEndpointSchema,
78236
- triggers: z62.array(sdkWorkflowTriggerSchema).min(1).max(SDK_WORKFLOW_TRIGGER_MAX_COUNT),
78745
+ triggers: z64.array(sdkWorkflowTriggerSchema).min(1).max(SDK_WORKFLOW_TRIGGER_MAX_COUNT),
78237
78746
  confirmation: sdkWorkflowConfirmationSchema.optional()
78238
78747
  }).strict();
78239
- var sdkWorkflowsSchema = z62.array(sdkWorkflowConfigSchema).max(SDK_WORKFLOW_MAX_COUNT, "Maximum 50 workflows per site").refine((workflows) => {
78748
+ var sdkWorkflowsSchema = z64.array(sdkWorkflowConfigSchema).max(SDK_WORKFLOW_MAX_COUNT, "Maximum 50 workflows per site").refine((workflows) => {
78240
78749
  const ids = workflows.map((workflow) => workflow.id);
78241
78750
  return ids.length === new Set(ids).size;
78242
78751
  }, { message: "Workflow IDs must be unique" }).optional();
78243
- var riverbankSiteConfigInputSchema = z62.object({
78244
- siteId: z62.string().uuid(),
78245
- previewUrl: z62.string().url().optional(),
78246
- liveUrl: z62.string().url().optional(),
78752
+ var riverbankSiteConfigInputSchema = z64.object({
78753
+ siteId: z64.string().uuid(),
78754
+ previewUrl: z64.string().url().optional(),
78755
+ liveUrl: z64.string().url().optional(),
78247
78756
  theme: sdkThemeConfigSchema.optional(),
78248
78757
  styles: sdkSiteStyleConfigSchema.optional(),
78249
78758
  layout: sdkSiteLayoutConfigSchema.optional(),
78250
- customBlocks: z62.array(sdkCustomBlockInputSchema).max(100, "Maximum 100 custom blocks per site").refine((blocks) => {
78759
+ customBlocks: z64.array(sdkCustomBlockInputSchema).max(100, "Maximum 100 custom blocks per site").refine((blocks) => {
78251
78760
  const ids = blocks.map((b2) => b2.id);
78252
78761
  return ids.length === new Set(ids).size;
78253
78762
  }, { message: "Block IDs must be unique" }).optional(),
@@ -78255,43 +78764,43 @@ var riverbankSiteConfigInputSchema = z62.object({
78255
78764
  blockFieldExtensions: sdkBlockFieldExtensionsInputSchema.optional(),
78256
78765
  workflows: sdkWorkflowsSchema,
78257
78766
  content: sdkContentConfigSchema.optional(),
78258
- contentDir: z62.string().optional(),
78259
- sync: z62.object({
78260
- existingEntries: z62.enum(["skip", "update"]).optional()
78767
+ contentDir: z64.string().optional(),
78768
+ sync: z64.object({
78769
+ existingEntries: z64.enum(["skip", "update"]).optional()
78261
78770
  }).optional(),
78262
- deploy: z62.object({
78263
- verifyCommand: z62.string().optional(),
78264
- prebuildOutput: z62.string().optional()
78771
+ deploy: z64.object({
78772
+ verifyCommand: z64.string().optional(),
78773
+ prebuildOutput: z64.string().optional()
78265
78774
  }).optional(),
78266
- themeSource: z62.enum(["local", "cms"]).optional(),
78267
- activeTheme: z62.string().optional(),
78268
- enablePortal: z62.boolean().optional(),
78775
+ themeSource: z64.enum(["local", "cms"]).optional(),
78776
+ activeTheme: z64.string().optional(),
78777
+ enablePortal: z64.boolean().optional(),
78269
78778
  dashboard: dashboardConfigSchema.optional()
78270
78779
  }).strict();
78271
- var pushSdkConfigBodySchema = z62.object({
78780
+ var pushSdkConfigBodySchema = z64.object({
78272
78781
  config: riverbankSiteConfigInputSchema,
78273
- forceContentTypes: z62.boolean().optional()
78782
+ forceContentTypes: z64.boolean().optional()
78274
78783
  }).strict();
78275
78784
 
78276
78785
  // ../api/src/siteOnboarding.ts
78277
- import { z as z63 } from "zod";
78786
+ import { z as z65 } from "zod";
78278
78787
  var LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS = {
78279
78788
  configure_appointments: {
78280
78789
  requirementId: "configure_appointments",
78281
78790
  reason: "launch_anyway"
78282
78791
  }
78283
78792
  };
78284
- var acknowledgeLaunchRequirementRequestSchema = z63.discriminatedUnion(
78793
+ var acknowledgeLaunchRequirementRequestSchema = z65.discriminatedUnion(
78285
78794
  "requirementId",
78286
78795
  [
78287
- z63.object({
78288
- requirementId: z63.literal("review_generated_site")
78796
+ z65.object({
78797
+ requirementId: z65.literal("review_generated_site")
78289
78798
  }),
78290
- z63.object({
78291
- requirementId: z63.literal(
78799
+ z65.object({
78800
+ requirementId: z65.literal(
78292
78801
  LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS.configure_appointments.requirementId
78293
78802
  ),
78294
- overrideReason: z63.literal(
78803
+ overrideReason: z65.literal(
78295
78804
  LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS.configure_appointments.reason
78296
78805
  )
78297
78806
  })
@@ -78467,79 +78976,79 @@ function isRecord4(value) {
78467
78976
  }
78468
78977
 
78469
78978
  // ../api/src/appointmentSetup.ts
78470
- import { z as z64 } from "zod";
78471
- var appointmentSetupRefSchema = z64.discriminatedUnion("kind", [
78472
- z64.object({ kind: z64.literal("existing"), id: z64.string().min(1) }),
78473
- z64.object({ kind: z64.literal("new"), draftId: z64.string().min(1) })
78979
+ import { z as z66 } from "zod";
78980
+ var appointmentSetupRefSchema = z66.discriminatedUnion("kind", [
78981
+ z66.object({ kind: z66.literal("existing"), id: z66.string().min(1) }),
78982
+ z66.object({ kind: z66.literal("new"), draftId: z66.string().min(1) })
78474
78983
  ]);
78475
- var appointmentSetupVenueChoiceSchema = z64.discriminatedUnion("kind", [
78476
- z64.object({ kind: z64.literal("none") }),
78477
- z64.object({ kind: z64.literal("existing"), venueId: z64.string().min(1) }),
78478
- z64.object({
78479
- kind: z64.literal("create"),
78480
- draftId: z64.string().min(1),
78481
- title: z64.string().trim().min(1),
78482
- description: z64.string().nullable(),
78483
- timezone: z64.string().trim().min(1).nullable(),
78484
- addressJson: z64.record(z64.string(), z64.unknown()),
78485
- locationJson: z64.object({ lat: z64.number(), lng: z64.number() }).nullable()
78984
+ var appointmentSetupVenueChoiceSchema = z66.discriminatedUnion("kind", [
78985
+ z66.object({ kind: z66.literal("none") }),
78986
+ z66.object({ kind: z66.literal("existing"), venueId: z66.string().min(1) }),
78987
+ z66.object({
78988
+ kind: z66.literal("create"),
78989
+ draftId: z66.string().min(1),
78990
+ title: z66.string().trim().min(1),
78991
+ description: z66.string().nullable(),
78992
+ timezone: z66.string().trim().min(1).nullable(),
78993
+ addressJson: z66.record(z66.string(), z66.unknown()),
78994
+ locationJson: z66.object({ lat: z66.number(), lng: z66.number() }).nullable()
78486
78995
  })
78487
78996
  ]);
78488
- var appointmentSetupPaymentDraftSchema = z64.object({
78489
- priceType: z64.union([z64.literal("free"), z64.literal("paid")])
78490
- });
78491
- var appointmentSetupServiceAssignmentDraftSchema = z64.discriminatedUnion("kind", [
78492
- z64.object({ kind: z64.literal("all_practitioners") }),
78493
- z64.object({
78494
- kind: z64.literal("selected_practitioners"),
78495
- resourceRefs: z64.array(appointmentSetupRefSchema)
78997
+ var appointmentSetupPaymentDraftSchema = z66.object({
78998
+ priceType: z66.union([z66.literal("free"), z66.literal("paid")])
78999
+ });
79000
+ var appointmentSetupServiceAssignmentDraftSchema = z66.discriminatedUnion("kind", [
79001
+ z66.object({ kind: z66.literal("all_practitioners") }),
79002
+ z66.object({
79003
+ kind: z66.literal("selected_practitioners"),
79004
+ resourceRefs: z66.array(appointmentSetupRefSchema)
78496
79005
  })
78497
79006
  ]);
78498
- var appointmentSetupServiceDraftSchema = z64.object({
79007
+ var appointmentSetupServiceDraftSchema = z66.object({
78499
79008
  ref: appointmentSetupRefSchema,
78500
- title: z64.string().trim().min(1),
78501
- description: z64.string().nullable(),
78502
- durationMinutes: z64.number().int().positive(),
78503
- priceAmount: z64.number().int().nonnegative().nullable(),
78504
- isActive: z64.boolean(),
78505
- locationType: z64.union([
78506
- z64.literal("virtual"),
78507
- z64.literal("in_person"),
78508
- z64.literal("hybrid")
79009
+ title: z66.string().trim().min(1),
79010
+ description: z66.string().nullable(),
79011
+ durationMinutes: z66.number().int().positive(),
79012
+ priceAmount: z66.number().int().nonnegative().nullable(),
79013
+ isActive: z66.boolean(),
79014
+ locationType: z66.union([
79015
+ z66.literal("virtual"),
79016
+ z66.literal("in_person"),
79017
+ z66.literal("hybrid")
78509
79018
  ]),
78510
79019
  venue: appointmentSetupVenueChoiceSchema,
78511
- timezone: z64.string().trim().min(1).nullable(),
79020
+ timezone: z66.string().trim().min(1).nullable(),
78512
79021
  payment: appointmentSetupPaymentDraftSchema,
78513
79022
  assignment: appointmentSetupServiceAssignmentDraftSchema
78514
79023
  });
78515
- var appointmentSetupPractitionerDraftSchema = z64.object({
79024
+ var appointmentSetupPractitionerDraftSchema = z66.object({
78516
79025
  ref: appointmentSetupRefSchema,
78517
- displayName: z64.string().trim().min(1),
78518
- bio: z64.string().nullable(),
78519
- timezone: z64.string().trim().min(1),
78520
- colorHex: z64.string().nullable()
78521
- });
78522
- var appointmentSetupWeeklyWindowDraftSchema = z64.object({
78523
- weekday: z64.number().int().min(0).max(6),
78524
- startTime: z64.string(),
78525
- endTime: z64.string()
78526
- });
78527
- var appointmentSetupAvailabilityDraftSchema = z64.object({
78528
- kind: z64.literal("weekly_windows"),
79026
+ displayName: z66.string().trim().min(1),
79027
+ bio: z66.string().nullable(),
79028
+ timezone: z66.string().trim().min(1),
79029
+ colorHex: z66.string().nullable()
79030
+ });
79031
+ var appointmentSetupWeeklyWindowDraftSchema = z66.object({
79032
+ weekday: z66.number().int().min(0).max(6),
79033
+ startTime: z66.string(),
79034
+ endTime: z66.string()
79035
+ });
79036
+ var appointmentSetupAvailabilityDraftSchema = z66.object({
79037
+ kind: z66.literal("weekly_windows"),
78529
79038
  resourceRef: appointmentSetupRefSchema,
78530
79039
  serviceRef: appointmentSetupRefSchema.nullable(),
78531
- windows: z64.array(appointmentSetupWeeklyWindowDraftSchema)
79040
+ windows: z66.array(appointmentSetupWeeklyWindowDraftSchema)
78532
79041
  });
78533
79042
  var APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX = 28 * 24 * 60;
78534
79043
  var APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX = 10 * 365 * 24 * 60;
78535
- var appointmentSetupBookingNoticeSchema = z64.object({
78536
- minLeadMinutes: z64.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
78537
- maxBookingNoticeMinutes: z64.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
78538
- });
78539
- var applyAppointmentSetupRequestSchema = z64.object({
78540
- services: z64.array(appointmentSetupServiceDraftSchema),
78541
- practitioners: z64.array(appointmentSetupPractitionerDraftSchema),
78542
- availability: z64.array(appointmentSetupAvailabilityDraftSchema),
79044
+ var appointmentSetupBookingNoticeSchema = z66.object({
79045
+ minLeadMinutes: z66.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
79046
+ maxBookingNoticeMinutes: z66.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
79047
+ });
79048
+ var applyAppointmentSetupRequestSchema = z66.object({
79049
+ services: z66.array(appointmentSetupServiceDraftSchema),
79050
+ practitioners: z66.array(appointmentSetupPractitionerDraftSchema),
79051
+ availability: z66.array(appointmentSetupAvailabilityDraftSchema),
78543
79052
  bookingNotice: appointmentSetupBookingNoticeSchema
78544
79053
  });
78545
79054
 
@@ -78558,24 +79067,24 @@ var STAFF_CANCELLATION_CONTEXT_CATEGORIES = [
78558
79067
  ];
78559
79068
 
78560
79069
  // ../api/src/siteBanner.ts
78561
- import { z as z65 } from "zod";
79070
+ import { z as z67 } from "zod";
78562
79071
  var SITE_BANNER_SCOPE_VALUES = ["homepage", "all-pages"];
78563
79072
  var SITE_BANNER_TONE_VALUES = ["announcement", "promotion", "notice", "warning"];
78564
79073
  var SITE_BANNER_MAX_TEXT_LENGTH = 320;
78565
79074
  var SITE_BANNER_MAX_PARAGRAPHS = 2;
78566
- var siteBannerScopeSchema = z65.enum(SITE_BANNER_SCOPE_VALUES);
78567
- var siteBannerToneSchema = z65.enum(SITE_BANNER_TONE_VALUES);
78568
- var siteBannerBodySchema = z65.unknown().transform(unwrapRichTextValue);
78569
- var siteBannerCtaSchema = z65.object({
78570
- label: z65.string().trim().min(1),
79075
+ var siteBannerScopeSchema = z67.enum(SITE_BANNER_SCOPE_VALUES);
79076
+ var siteBannerToneSchema = z67.enum(SITE_BANNER_TONE_VALUES);
79077
+ var siteBannerBodySchema = z67.unknown().transform(unwrapRichTextValue);
79078
+ var siteBannerCtaSchema = z67.object({
79079
+ label: z67.string().trim().min(1),
78571
79080
  link: linkPayloadSchema
78572
79081
  });
78573
- var siteBannerSettingsSchema = z65.discriminatedUnion("enabled", [
78574
- z65.object({
78575
- enabled: z65.literal(false)
79082
+ var siteBannerSettingsSchema = z67.discriminatedUnion("enabled", [
79083
+ z67.object({
79084
+ enabled: z67.literal(false)
78576
79085
  }),
78577
- z65.object({
78578
- enabled: z65.literal(true),
79086
+ z67.object({
79087
+ enabled: z67.literal(true),
78579
79088
  scope: siteBannerScopeSchema,
78580
79089
  tone: siteBannerToneSchema,
78581
79090
  body: siteBannerBodySchema,
@@ -78587,11 +79096,11 @@ var siteBannerSettingsInputSchema = siteBannerSettingsSchema.superRefine((value,
78587
79096
  return;
78588
79097
  }
78589
79098
  const analysis = analyzeSiteBannerBody(value.body);
78590
- for (const issue of analysis.issues) {
79099
+ for (const issue2 of analysis.issues) {
78591
79100
  ctx.addIssue({
78592
- code: z65.ZodIssueCode.custom,
79101
+ code: z67.ZodIssueCode.custom,
78593
79102
  path: ["body"],
78594
- message: siteBannerBodyIssueMessage(issue)
79103
+ message: siteBannerBodyIssueMessage(issue2)
78595
79104
  });
78596
79105
  }
78597
79106
  });
@@ -78625,8 +79134,8 @@ function analyzeSiteBannerBody(body) {
78625
79134
  issues
78626
79135
  };
78627
79136
  }
78628
- function siteBannerBodyIssueMessage(issue) {
78629
- switch (issue) {
79137
+ function siteBannerBodyIssueMessage(issue2) {
79138
+ switch (issue2) {
78630
79139
  case "empty":
78631
79140
  return "Banner message is required when the banner is enabled.";
78632
79141
  case "too-many-paragraphs":
@@ -78813,71 +79322,71 @@ function parsePublicProductCategorySelector(value) {
78813
79322
  }
78814
79323
 
78815
79324
  // ../api/src/aiPlayground.ts
78816
- import { z as z66 } from "zod";
78817
- var Rfc6902PatchOp = z66.discriminatedUnion("op", [
79325
+ import { z as z68 } from "zod";
79326
+ var Rfc6902PatchOp = z68.discriminatedUnion("op", [
78818
79327
  // Standard RFC-6902 operations
78819
- z66.object({
78820
- op: z66.literal("add"),
78821
- path: z66.string(),
78822
- value: z66.unknown()
79328
+ z68.object({
79329
+ op: z68.literal("add"),
79330
+ path: z68.string(),
79331
+ value: z68.unknown()
78823
79332
  }),
78824
- z66.object({
78825
- op: z66.literal("remove"),
78826
- path: z66.string()
79333
+ z68.object({
79334
+ op: z68.literal("remove"),
79335
+ path: z68.string()
78827
79336
  }),
78828
- z66.object({
78829
- op: z66.literal("replace"),
78830
- path: z66.string(),
78831
- value: z66.unknown()
79337
+ z68.object({
79338
+ op: z68.literal("replace"),
79339
+ path: z68.string(),
79340
+ value: z68.unknown()
78832
79341
  }),
78833
- z66.object({
78834
- op: z66.literal("move"),
78835
- from: z66.string(),
78836
- path: z66.string()
79342
+ z68.object({
79343
+ op: z68.literal("move"),
79344
+ from: z68.string(),
79345
+ path: z68.string()
78837
79346
  }),
78838
- z66.object({
78839
- op: z66.literal("copy"),
78840
- from: z66.string(),
78841
- path: z66.string()
79347
+ z68.object({
79348
+ op: z68.literal("copy"),
79349
+ from: z68.string(),
79350
+ path: z68.string()
78842
79351
  }),
78843
79352
  // Block-level operations (Phase 2)
78844
- z66.object({
78845
- op: z66.literal("add_block"),
78846
- blockKind: z66.string(),
78847
- afterBlockId: z66.string().nullable(),
78848
- content: z66.record(z66.string(), z66.unknown()),
78849
- rationale: z66.string()
79353
+ z68.object({
79354
+ op: z68.literal("add_block"),
79355
+ blockKind: z68.string(),
79356
+ afterBlockId: z68.string().nullable(),
79357
+ content: z68.record(z68.string(), z68.unknown()),
79358
+ rationale: z68.string()
78850
79359
  }),
78851
- z66.object({
78852
- op: z66.literal("delete_block"),
78853
- blockId: z66.string(),
78854
- rationale: z66.string()
79360
+ z68.object({
79361
+ op: z68.literal("delete_block"),
79362
+ blockId: z68.string(),
79363
+ rationale: z68.string()
78855
79364
  }),
78856
- z66.object({
78857
- op: z66.literal("reorder_block"),
78858
- blockId: z66.string(),
78859
- afterBlockId: z66.string().nullable(),
78860
- rationale: z66.string()
79365
+ z68.object({
79366
+ op: z68.literal("reorder_block"),
79367
+ blockId: z68.string(),
79368
+ afterBlockId: z68.string().nullable(),
79369
+ rationale: z68.string()
78861
79370
  })
78862
79371
  ]);
78863
- var PlaygroundProposeRequest = z66.object({
78864
- request: z66.string().min(1).max(2e3)
79372
+ var PlaygroundProposeRequest = z68.object({
79373
+ request: z68.string().min(1).max(2e3)
78865
79374
  });
78866
- var MultiPagePatchEnvelope = z66.object({
78867
- pageId: z66.string(),
78868
- blockId: z66.string().optional(),
79375
+ var MultiPagePatchEnvelope = z68.object({
79376
+ pageId: z68.string(),
79377
+ blockId: z68.string().optional(),
78869
79378
  // Not present for page-level ops
78870
- blockKind: z66.string().optional(),
78871
- blockPurpose: z66.string().optional().nullable(),
78872
- ops: z66.array(Rfc6902PatchOp),
78873
- rationale: z66.string(),
78874
- currentContent: z66.record(z66.string(), z66.unknown()).optional()
79379
+ blockKind: z68.string().optional(),
79380
+ blockPurpose: z68.string().optional().nullable(),
79381
+ ops: z68.array(Rfc6902PatchOp),
79382
+ rationale: z68.string(),
79383
+ currentContent: z68.record(z68.string(), z68.unknown()).optional()
78875
79384
  });
78876
- var MultiPageUpdateResponse = z66.object({
78877
- patches: z66.array(MultiPagePatchEnvelope),
78878
- assistantMessage: z66.string(),
78879
- pagesModified: z66.number(),
78880
- toolCallsUsed: z66.number()
79385
+ var MultiPageUpdateResponse = z68.object({
79386
+ patches: z68.array(MultiPagePatchEnvelope),
79387
+ assistantMessage: z68.string(),
79388
+ pagesModified: z68.number(),
79389
+ toolCallsUsed: z68.number()
78881
79390
  });
78882
79391
 
78883
79392
  // src/data/prefetchBlockData.ts
@@ -78886,6 +79395,7 @@ var SUPPORTED_LOADER_ENDPOINTS2 = [
78886
79395
  "getPublishedEntryPreview",
78887
79396
  "listPublicEvents",
78888
79397
  "listPublicCourses",
79398
+ "listPublicTeamMembers",
78889
79399
  "listPublicProducts",
78890
79400
  "listPublicPasses",
78891
79401
  "listPublicMemberships",
@@ -79050,6 +79560,16 @@ async function prefetchBlockData2(page, context, client, options) {
79050
79560
  const parsedLimit = typeof limit === "string" ? Number.parseInt(limit, 10) : typeof limit === "number" ? limit : void 0;
79051
79561
  return await client.listPublicCourses({ siteId, limit: parsedLimit, stage });
79052
79562
  }
79563
+ case "listPublicTeamMembers": {
79564
+ const { siteId, stage } = resolvedParams ?? {};
79565
+ if (!siteId) {
79566
+ throw new Error("listPublicTeamMembers requires siteId param");
79567
+ }
79568
+ return await client.listPublicTeamMembers({
79569
+ siteId,
79570
+ stage: typeof stage === "string" ? stage : void 0
79571
+ });
79572
+ }
79053
79573
  case "listPublicProducts": {
79054
79574
  const { siteId, stage, categorySelector } = resolvedParams ?? {};
79055
79575
  if (!siteId) {