@riverbankcms/sdk 0.60.3 → 0.60.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) 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/bookingVerticals.d.ts +1 -0
  6. package/dist/_dts/api/src/courses.d.ts +1 -5
  7. package/dist/_dts/api/src/endpoints.d.ts +80 -1
  8. package/dist/_dts/api/src/index.d.ts +3 -2
  9. package/dist/_dts/api/src/navigation/contracts.d.ts +9 -9
  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/siteManagementEndpoints.d.ts +3 -39
  15. package/dist/_dts/api/src/siteOnboarding.d.ts +1 -0
  16. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +2 -0
  17. package/dist/_dts/api/src/teamMembers.d.ts +27 -0
  18. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +35 -29
  19. package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +1 -5
  20. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +40 -34
  21. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +1 -5
  22. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +1 -1
  23. package/dist/_dts/blocks/src/system/blocks/products/shared.d.ts +2 -2
  24. package/dist/_dts/blocks/src/system/blocks/shared/bookingPaymentTerms.d.ts +9 -9
  25. package/dist/_dts/blocks/src/system/blocks/shared/teamMembers.d.ts +24 -0
  26. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +18 -8
  27. package/dist/_dts/blocks/src/system/constants/background.d.ts +1 -1
  28. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  29. package/dist/_dts/blocks/src/system/data/utils.d.ts +1 -1
  30. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +201 -201
  31. package/dist/_dts/blocks/src/system/manifest/validation.d.ts +2 -2
  32. package/dist/_dts/blocks/src/system/node/fragments/ctaButton.d.ts +2 -0
  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/runtime/shared/themedButtonClass.d.ts +11 -0
  37. package/dist/_dts/blocks/src/system/transforms/registry/ui.d.ts +1 -1
  38. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +3 -3
  39. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +10 -2
  40. package/dist/_dts/content-model/src/content-types/schema.d.ts +8 -8
  41. package/dist/_dts/content-model/src/metadataConfig.d.ts +1 -0
  42. package/dist/_dts/core/src/branded.d.ts +2 -0
  43. package/dist/_dts/core/src/participants.d.ts +32 -1
  44. package/dist/_dts/core/src/rectification.d.ts +79 -0
  45. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +130 -14
  46. package/dist/_dts/db/src/schemas/forms.d.ts +61 -61
  47. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +17 -15
  48. package/dist/_dts/sdk/src/client/types.d.ts +10 -2
  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/system-block-content.d.ts +17 -8
  52. package/dist/_dts/sdk/src/data/prefetchBlockData.d.ts +1 -1
  53. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +19 -19
  54. package/dist/_dts/sdk/src/public-api/contracts.d.ts +87 -69
  55. package/dist/_dts/sdk/src/public-api/runtime.d.ts +1 -1
  56. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +2 -5
  57. package/dist/_dts/sdk/src/version.d.ts +1 -1
  58. package/dist/_dts/theme-core/src/accordions/types.d.ts +11 -11
  59. package/dist/_dts/theme-core/src/buttons/personalities/brushed-wash.d.ts +7 -2
  60. package/dist/_dts/theme-core/src/buttons/personalities/confident-chip.d.ts +7 -2
  61. package/dist/_dts/theme-core/src/buttons/personalities/editorial-link.d.ts +7 -2
  62. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +86 -5
  63. package/dist/_dts/theme-core/src/buttons/personalities/ink-stamp.d.ts +7 -2
  64. package/dist/_dts/theme-core/src/buttons/personalities/pebble.d.ts +7 -2
  65. package/dist/_dts/theme-core/src/buttons/personalities/soft-pill.d.ts +7 -2
  66. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +20 -20
  67. package/dist/_dts/theme-core/src/buttons/types.d.ts +27 -27
  68. package/dist/_dts/theme-core/src/cards/types.d.ts +17 -17
  69. package/dist/_dts/theme-core/src/inputs/types.d.ts +14 -14
  70. package/dist/_dts/theme-core/src/interactive/baseSchema.d.ts +2 -2
  71. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +438 -438
  72. package/dist/_dts/theme-core/src/navigation/types.d.ts +16 -16
  73. package/dist/_dts/theme-core/src/palette/variants/brand-led.d.ts +33 -9
  74. package/dist/_dts/theme-core/src/palette/variants/high-contrast.d.ts +33 -9
  75. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +200 -4
  76. package/dist/_dts/theme-core/src/palette/variants/soft-natural.d.ts +33 -9
  77. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +25 -25
  78. package/dist/_dts/theme-core/src/palette/variants/warm-neutral.d.ts +33 -9
  79. package/dist/_dts/theme-core/src/schema.d.ts +662 -662
  80. package/dist/_dts/theme-core/src/shared/componentStyles.d.ts +4 -4
  81. package/dist/_dts/theme-core/src/site-styles/curatedChoices.d.ts +27 -0
  82. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +48 -194
  83. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +15 -15
  84. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +7 -7
  85. package/dist/_dts/theme-core/src/site-styles/index.d.ts +2 -1
  86. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +12 -14
  87. package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +46 -0
  88. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +5 -5
  89. package/dist/_dts/ui/src/badge.d.ts +1 -1
  90. package/dist/_dts/ui/src/button-group.d.ts +1 -1
  91. package/dist/_dts/ui/src/button.d.ts +2 -2
  92. package/dist/_dts/ui/src/callout.d.ts +1 -1
  93. package/dist/_dts/ui/src/card.d.ts +1 -1
  94. package/dist/_dts/ui/src/palette/ColorChooserDialog.d.ts +47 -0
  95. package/dist/_dts/ui/src/palette/ColorSlotButton.d.ts +15 -0
  96. package/dist/_dts/ui/src/palette/ColorSwatchButton.d.ts +15 -0
  97. package/dist/_dts/ui/src/palette/PaletteTokenEditor.d.ts +50 -0
  98. package/dist/_dts/ui/src/palette/hex.d.ts +23 -0
  99. package/dist/_dts/ui/src/palette/index.d.ts +14 -0
  100. package/dist/_dts/ui/src/surface.d.ts +2 -2
  101. package/dist/_dts/ui/src/toggle.d.ts +4 -4
  102. package/dist/cli/index.mjs +1535 -1183
  103. package/dist/client/client.mjs +3944 -3454
  104. package/dist/client/hooks.mjs +2053 -1743
  105. package/dist/client/rendering/client.mjs +311 -167
  106. package/dist/client/rendering/islands.mjs +159 -73
  107. package/dist/client/rendering.mjs +1918 -1447
  108. package/dist/preview-next/before-render.mjs +147 -1
  109. package/dist/preview-next/client/runtime.mjs +2828 -2174
  110. package/dist/preview-next/middleware.mjs +147 -1
  111. package/dist/server/components.mjs +4311 -3928
  112. package/dist/server/config-validation.mjs +2201 -1906
  113. package/dist/server/config.mjs +2201 -1906
  114. package/dist/server/data.mjs +2053 -1743
  115. package/dist/server/index.mjs +171 -4
  116. package/dist/server/next.mjs +3442 -3024
  117. package/dist/server/page-converter.mjs +2109 -1962
  118. package/dist/server/prebuild.mjs +1 -1
  119. package/dist/server/rendering/server.mjs +4021 -3622
  120. package/dist/server/rendering.mjs +4021 -3622
  121. package/dist/server/routing.mjs +2377 -2058
  122. package/dist/server/server.mjs +2244 -1915
  123. package/dist/server/theme-bridge.mjs +130 -126
  124. package/dist/server/theme.mjs +131 -129
  125. package/package.json +1 -1
  126. package/dist/_dts/theme-core/src/site-styles/compatibility.d.ts +0 -109
@@ -1,11 +1,5 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __getOwnPropNames = Object.getOwnPropertyNames;
3
- var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
4
- get: (a, b2) => (typeof require !== "undefined" ? require : a)[b2]
5
- }) : x)(function(x) {
6
- if (typeof require !== "undefined") return require.apply(this, arguments);
7
- throw Error('Dynamic require of "' + x + '" is not supported');
8
- });
9
3
  var __esm = (fn2, res) => function __init() {
10
4
  return fn2 && (res = (0, fn2[__getOwnPropNames(fn2)[0]])(fn2 = 0)), res;
11
5
  };
@@ -510,7 +504,10 @@ function createBlockApi(config) {
510
504
  url = appendQuery(url, queryParams);
511
505
  }
512
506
  const authHeaders = getAuthHeaders(selectedAuth);
513
- const headers = { ...authHeaders };
507
+ const headers = {
508
+ Accept: "application/json",
509
+ ...authHeaders
510
+ };
514
511
  if (body !== void 0) {
515
512
  headers["Content-Type"] = "application/json";
516
513
  }
@@ -3531,11 +3528,11 @@ var init_presets = __esm({
3531
3528
  }
3532
3529
  });
3533
3530
 
3534
- // ../theme-core/src/site-styles/compatibility.ts
3531
+ // ../theme-core/src/site-styles/styleTags.ts
3535
3532
  import { z as z2 } from "zod";
3536
3533
  var STYLE_AXIS_VALUES, styleTagsSchema;
3537
- var init_compatibility = __esm({
3538
- "../theme-core/src/site-styles/compatibility.ts"() {
3534
+ var init_styleTags = __esm({
3535
+ "../theme-core/src/site-styles/styleTags.ts"() {
3539
3536
  "use strict";
3540
3537
  STYLE_AXIS_VALUES = {
3541
3538
  tone: ["minimal", "classic", "bold"],
@@ -3574,7 +3571,7 @@ var init_types2 = __esm({
3574
3571
  "../theme-core/src/buttons/personalities/types.ts"() {
3575
3572
  "use strict";
3576
3573
  init_types();
3577
- init_compatibility();
3574
+ init_styleTags();
3578
3575
  buttonPersonalityIdSchema = z3.string().min(1).transform((value) => asButtonPersonalityId(value));
3579
3576
  buttonPersonalitySchema = z3.object({
3580
3577
  id: buttonPersonalityIdSchema,
@@ -4827,6 +4824,7 @@ var init_assertNever = __esm({
4827
4824
  var init_participants = __esm({
4828
4825
  "../core/src/participants.ts"() {
4829
4826
  "use strict";
4827
+ init_branded();
4830
4828
  init_result();
4831
4829
  }
4832
4830
  });
@@ -6047,7 +6045,7 @@ function getServerStorage() {
6047
6045
  _serverStorageChecked = true;
6048
6046
  try {
6049
6047
  const globalWithNonWebpackRequire = globalThis;
6050
- const nonWebpackRequire = typeof globalWithNonWebpackRequire.__non_webpack_require__ === "function" ? globalWithNonWebpackRequire.__non_webpack_require__ : __require;
6048
+ const nonWebpackRequire = typeof globalWithNonWebpackRequire.__non_webpack_require__ === "function" ? globalWithNonWebpackRequire.__non_webpack_require__ : new Function("id", "return require(id)");
6051
6049
  const asyncHooks = nonWebpackRequire("async_hooks");
6052
6050
  const AsyncLocalStorage = asyncHooks.AsyncLocalStorage;
6053
6051
  if (AsyncLocalStorage) {
@@ -7844,6 +7842,19 @@ var init_media2 = __esm({
7844
7842
  }
7845
7843
  });
7846
7844
 
7845
+ // ../blocks/src/system/runtime/shared/themedButtonClass.ts
7846
+ function themedButtonClass(spec) {
7847
+ const { variant, size, extraClassName } = spec;
7848
+ const normalizedVariant = variant.trim();
7849
+ const variantClasses = normalizedVariant ? [normalizedVariant, `button-${normalizedVariant}`] : [];
7850
+ return [...variantClasses, `btn-${size}`, extraClassName].filter(Boolean).join(" ");
7851
+ }
7852
+ var init_themedButtonClass = __esm({
7853
+ "../blocks/src/system/runtime/shared/themedButtonClass.ts"() {
7854
+ "use strict";
7855
+ }
7856
+ });
7857
+
7847
7858
  // ../blocks/src/system/runtime/nodes/file-download.tsx
7848
7859
  import { jsx as jsx13, jsxs } from "react/jsx-runtime";
7849
7860
  function isDownloadableMediaType(type) {
@@ -7917,7 +7928,11 @@ function FileDownloadNode({
7917
7928
  {
7918
7929
  href,
7919
7930
  download: filename,
7920
- className: `${variant} button-${variant} rb-inline-flex rb-shrink-0 rb-items-center rb-justify-center rb-gap-2`,
7931
+ className: themedButtonClass({
7932
+ variant,
7933
+ size: "md",
7934
+ extraClassName: "rb-inline-flex rb-shrink-0 rb-items-center rb-justify-center rb-gap-2"
7935
+ }),
7921
7936
  children: [
7922
7937
  /* @__PURE__ */ jsx13(Download, { "aria-hidden": "true" }),
7923
7938
  label
@@ -7933,6 +7948,7 @@ var init_file_download = __esm({
7933
7948
  init_lucide_react();
7934
7949
  init_colorStyles();
7935
7950
  init_media2();
7951
+ init_themedButtonClass();
7936
7952
  init_media();
7937
7953
  FILE_DOWNLOAD_BUTTON_VARIANTS = ["primary", "secondary", "outline", "link"];
7938
7954
  }
@@ -9855,7 +9871,9 @@ var init_schemas = __esm({
9855
9871
  courseTeamMemberSummarySchema = z8.object({
9856
9872
  id: z8.string(),
9857
9873
  name: z8.string(),
9858
- summary: z8.string().nullable()
9874
+ roleLabel: z8.string().nullable(),
9875
+ summary: z8.string().nullable(),
9876
+ profilePath: z8.string().nullable()
9859
9877
  });
9860
9878
  coursePricingOptionSchema = z8.object({
9861
9879
  id: z8.string(),
@@ -10378,6 +10396,12 @@ var init_CoursePricingDisplay = __esm({
10378
10396
 
10379
10397
  // ../blocks/src/system/runtime/nodes/event-details/view.tsx
10380
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
+ }
10381
10405
  function EventDetailsView({
10382
10406
  selection,
10383
10407
  showVenue,
@@ -10441,7 +10465,13 @@ function EventDetailsView({
10441
10465
  teamMembers.length > 0 ? /* @__PURE__ */ jsxs9("div", { className: "rb-mt-6", children: [
10442
10466
  /* @__PURE__ */ jsx23("div", { className: "rb-label rb-mb-2", children: "Team members" }),
10443
10467
  /* @__PURE__ */ jsx23("div", { className: "rb-flex rb-flex-col rb-gap-3", children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs9("div", { children: [
10444
- /* @__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
+ ) }),
10445
10475
  teamMember.summary ? /* @__PURE__ */ jsx23("p", { className: "rb-caption status-muted", children: teamMember.summary }) : null
10446
10476
  ] }, teamMember.id)) })
10447
10477
  ] }) : null,
@@ -10991,6 +11021,12 @@ var init_runs = __esm({
10991
11021
 
10992
11022
  // ../blocks/src/system/runtime/nodes/course-details/view.tsx
10993
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
+ }
10994
11030
  function parseLimit2(value, fallback2) {
10995
11031
  if (value === "all") return "all";
10996
11032
  const n = typeof value === "string" ? Number.parseInt(value, 10) : typeof value === "number" ? value : NaN;
@@ -11048,7 +11084,13 @@ function CourseDetailsView(props2) {
11048
11084
  teamMembers.length > 0 && /* @__PURE__ */ jsxs13("div", { children: [
11049
11085
  /* @__PURE__ */ jsx27("div", { className: "rb-label rb-mb-2", children: "Team members" }),
11050
11086
  /* @__PURE__ */ jsx27("div", { className: "rb-flex rb-flex-col rb-gap-3", children: teamMembers.map((teamMember) => /* @__PURE__ */ jsxs13("div", { children: [
11051
- /* @__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
+ ) }),
11052
11094
  teamMember.summary && /* @__PURE__ */ jsx27("p", { className: "rb-caption status-muted", children: teamMember.summary })
11053
11095
  ] }, teamMember.id)) })
11054
11096
  ] })
@@ -11518,6 +11560,7 @@ var init_EventCard = __esm({
11518
11560
  init_EventCardIcons();
11519
11561
  init_eventCapacity();
11520
11562
  init_utils();
11563
+ init_themedButtonClass();
11521
11564
  EventCard = ({
11522
11565
  event,
11523
11566
  cardVariant = "default",
@@ -11543,7 +11586,7 @@ var init_EventCard = __esm({
11543
11586
  const isSoldOut = cta.hidden;
11544
11587
  const { available: spotsLeft } = getEventAvailability(event);
11545
11588
  const cardClass = `card-${cardVariant}`;
11546
- const buttonClass = `${buttonVariant} button-${buttonVariant}`;
11589
+ const buttonClass = themedButtonClass({ variant: buttonVariant, size: "md" });
11547
11590
  const title = event.title;
11548
11591
  const summary = event.presentation?.summary ?? event.description;
11549
11592
  const image = event.presentation?.image ?? null;
@@ -11625,6 +11668,7 @@ var init_EventCompactRow = __esm({
11625
11668
  "use strict";
11626
11669
  init_utils();
11627
11670
  init_EventCardIcons();
11671
+ init_themedButtonClass();
11628
11672
  EventCompactRow = ({
11629
11673
  event,
11630
11674
  buttonVariant = "primary",
@@ -11636,7 +11680,7 @@ var init_EventCompactRow = __esm({
11636
11680
  const price = formatEventPrice(event);
11637
11681
  const teacherLine = formatEventTeacherLine(event);
11638
11682
  const cta = resolveEventCta(event, buttonText);
11639
- const buttonClass = `${buttonVariant} button-${buttonVariant}`;
11683
+ const buttonClass = themedButtonClass({ variant: buttonVariant, size: "sm" });
11640
11684
  return /* @__PURE__ */ jsxs17("div", { className: "event-compact-row", children: [
11641
11685
  /* @__PURE__ */ jsxs17("div", { className: "event-compact-row-content", children: [
11642
11686
  /* @__PURE__ */ jsxs17("div", { className: "event-compact-row-top", children: [
@@ -11708,6 +11752,7 @@ var init_EventSpotlight = __esm({
11708
11752
  "../blocks/src/system/runtime/nodes/events/EventSpotlight.tsx"() {
11709
11753
  "use strict";
11710
11754
  init_shared3();
11755
+ init_themedButtonClass();
11711
11756
  EventSpotlight = ({
11712
11757
  events,
11713
11758
  layout = "grid",
@@ -11729,7 +11774,7 @@ var init_EventSpotlight = __esm({
11729
11774
  }
11730
11775
  const containerClass = getContainerClass(layout, columns);
11731
11776
  const cardOrientation = getCardOrientation(layout);
11732
- const buttonClass = `${buttonVariant} button-${buttonVariant}`;
11777
+ const buttonClass = themedButtonClass({ variant: buttonVariant, size: "md" });
11733
11778
  return /* @__PURE__ */ jsxs19("div", { className: `event-spotlight-section ${className || ""}`, "data-block": "event-spotlight", children: [
11734
11779
  /* @__PURE__ */ jsx33("div", { className: `event-spotlight ${containerClass}`, children: normalizedEvents.map((event) => /* @__PURE__ */ jsx33(
11735
11780
  EventCard,
@@ -11819,7 +11864,9 @@ var init_schemas2 = __esm({
11819
11864
  publicTeamMemberSummarySchema = z9.object({
11820
11865
  id: z9.string(),
11821
11866
  name: z9.string(),
11822
- summary: z9.string().nullable()
11867
+ roleLabel: z9.string().nullable(),
11868
+ summary: z9.string().nullable(),
11869
+ profilePath: z9.string().nullable()
11823
11870
  });
11824
11871
  publicEventSchema = z9.object({
11825
11872
  kind: z9.enum(["event", "course_session"]).optional(),
@@ -13151,7 +13198,8 @@ function ctaButton(opts) {
13151
13198
  },
13152
13199
  size: {
13153
13200
  $bind: {
13154
- from: sizePath
13201
+ from: sizePath,
13202
+ fallback: opts?.sizeFallback ?? "md"
13155
13203
  }
13156
13204
  },
13157
13205
  ...opts?.className ? { className: opts.className } : {},
@@ -18686,7 +18734,19 @@ var init_teamMember = __esm({
18686
18734
  bind("photo")
18687
18735
  )
18688
18736
  ]),
18689
- 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
+ ),
18690
18750
  text({ as: "p", className: "rb-team-member-role" }, when("role"), bind("role")),
18691
18751
  richText(
18692
18752
  { className: "rb-prose rb-max-w-none" },
@@ -24039,7 +24099,10 @@ function renderCalendarGrid(display) {
24039
24099
  "button",
24040
24100
  {
24041
24101
  type: "button",
24042
- className: `${display.buttonVariant} button-${display.buttonVariant} rb-px-3 rb-py-1`,
24102
+ className: themedButtonClass({
24103
+ variant: display.buttonVariant,
24104
+ size: "sm"
24105
+ }),
24043
24106
  children: "Today"
24044
24107
  }
24045
24108
  )
@@ -24122,7 +24185,10 @@ function renderTimetableSsr(display) {
24122
24185
  "button",
24123
24186
  {
24124
24187
  type: "button",
24125
- className: `${display.buttonVariant} button-${display.buttonVariant} rb-px-3 rb-py-1`,
24188
+ className: themedButtonClass({
24189
+ variant: display.buttonVariant,
24190
+ size: "sm"
24191
+ }),
24126
24192
  children: "Today"
24127
24193
  }
24128
24194
  )
@@ -24247,6 +24313,7 @@ var init_EventCalendar_server = __esm({
24247
24313
  init_renderEventListItem();
24248
24314
  init_utils();
24249
24315
  init_timetableModel();
24316
+ init_themedButtonClass();
24250
24317
  EventCalendarSSR = (props2) => {
24251
24318
  const islandProps = buildEventCalendarInteractiveIslandProps(props2);
24252
24319
  const display = islandProps.render.display;
@@ -24377,6 +24444,7 @@ var init_form_server = __esm({
24377
24444
  "use strict";
24378
24445
  init_clsx();
24379
24446
  init_ssr();
24447
+ init_themedButtonClass();
24380
24448
  init_form_interactive();
24381
24449
  FormNodeSSR = ({
24382
24450
  blockId,
@@ -24510,7 +24578,18 @@ var init_form_server = __esm({
24510
24578
  }
24511
24579
  return renderField(group.field);
24512
24580
  }),
24513
- /* @__PURE__ */ jsx46("div", { className: "fb-actions", children: /* @__PURE__ */ jsx46("div", { className: "fb-actions-inner", children: /* @__PURE__ */ jsx46("button", { type: "submit", className: "primary button-primary rb-w-full rb-sm-w-auto", children: display.submitLabel }) }) })
24581
+ /* @__PURE__ */ jsx46("div", { className: "fb-actions", children: /* @__PURE__ */ jsx46("div", { className: "fb-actions-inner", children: /* @__PURE__ */ jsx46(
24582
+ "button",
24583
+ {
24584
+ type: "submit",
24585
+ className: themedButtonClass({
24586
+ variant: "primary",
24587
+ size: "md",
24588
+ extraClassName: "rb-w-full rb-sm-w-auto"
24589
+ }),
24590
+ children: display.submitLabel
24591
+ }
24592
+ ) }) })
24514
24593
  ]
24515
24594
  }
24516
24595
  )
@@ -24592,7 +24671,14 @@ function NewsletterFormSSR({
24592
24671
  ),
24593
24672
  /* @__PURE__ */ jsxs32("div", { className: "newsletter-form-fields", children: [
24594
24673
  fields3.map(renderField),
24595
- /* @__PURE__ */ jsx47("div", { className: "newsletter-submit", children: /* @__PURE__ */ jsx47("button", { type: "submit", className: "primary button-primary", children: display.buttonLabel }) })
24674
+ /* @__PURE__ */ jsx47("div", { className: "newsletter-submit", children: /* @__PURE__ */ jsx47(
24675
+ "button",
24676
+ {
24677
+ type: "submit",
24678
+ className: themedButtonClass({ variant: "primary", size: "md" }),
24679
+ children: display.buttonLabel
24680
+ }
24681
+ ) })
24596
24682
  ] }),
24597
24683
  display.privacyNote && /* @__PURE__ */ jsx47("p", { className: "newsletter-privacy-note", children: display.privacyNote })
24598
24684
  ] })
@@ -24606,6 +24692,7 @@ var init_newsletter_form_server = __esm({
24606
24692
  "use strict";
24607
24693
  init_clsx();
24608
24694
  init_ssr();
24695
+ init_themedButtonClass();
24609
24696
  init_newsletter_form_interactive();
24610
24697
  newsletter_form_server_default = NewsletterFormSSR;
24611
24698
  }
@@ -32894,6 +32981,7 @@ var init_PaymentSelectionStep = __esm({
32894
32981
  init_lucide_react();
32895
32982
  init_utils3();
32896
32983
  init_spinner();
32984
+ init_themedButtonClass();
32897
32985
  init_CheckIcon2();
32898
32986
  init_SelectableOptionCard();
32899
32987
  PaymentSelectionStep = ({
@@ -32994,7 +33082,7 @@ var init_PaymentSelectionStep = __esm({
32994
33082
  "button",
32995
33083
  {
32996
33084
  type: "button",
32997
- className: "primary button-primary",
33085
+ className: themedButtonClass({ variant: "primary", size: "md" }),
32998
33086
  disabled: !email.trim(),
32999
33087
  onClick: onRequestLogin,
33000
33088
  children: "Email me a login link"
@@ -34718,7 +34806,7 @@ function EventRegistrationWizard(props2) {
34718
34806
  } = props2;
34719
34807
  const maxTicketsNum = parseInt(maxTickets, 10) || 5;
34720
34808
  const showSpamProtection = spamProtectionEnabled ?? isSpamProtectionEnabled();
34721
- const buttonClass = `${buttonVariant} button-${buttonVariant}`;
34809
+ const buttonClass = themedButtonClass({ variant: buttonVariant, size: "md" });
34722
34810
  const wizard = useEventRegistrationWizard({
34723
34811
  anchorId: EVENT_REGISTRATION_ANCHOR_ID,
34724
34812
  occurrenceContext: occurrenceContext ?? null,
@@ -34855,6 +34943,7 @@ var init_EventRegistrationWizard = __esm({
34855
34943
  init_useEventRegistrationWizard();
34856
34944
  init_MagicLinkForm();
34857
34945
  init_spinner();
34946
+ init_themedButtonClass();
34858
34947
  init_event_registration2();
34859
34948
  EVENT_REGISTRATION_ANCHOR_ID = "event-registration";
34860
34949
  EVENT_PORTAL_AUTH_COPY = {
@@ -35300,7 +35389,7 @@ function ErrorStep2({
35300
35389
  buttonVariant = "primary",
35301
35390
  onRetry
35302
35391
  }) {
35303
- const buttonClass = `${buttonVariant} button-${buttonVariant}`;
35392
+ const buttonClass = themedButtonClass({ variant: buttonVariant, size: "md" });
35304
35393
  return /* @__PURE__ */ jsxs73("div", { className: "cr-error", role: "alert", children: [
35305
35394
  /* @__PURE__ */ jsx100(StateIcon, { variant: "error", children: /* @__PURE__ */ jsx100(CrossIcon, {}) }),
35306
35395
  /* @__PURE__ */ jsx100("h3", { className: "cr-error__title", children: "Enrollment Failed" }),
@@ -35312,6 +35401,7 @@ var init_ErrorStep2 = __esm({
35312
35401
  "../blocks/src/system/runtime/nodes/course-registration/ErrorStep.tsx"() {
35313
35402
  "use strict";
35314
35403
  init_shared6();
35404
+ init_themedButtonClass();
35315
35405
  }
35316
35406
  });
35317
35407
 
@@ -35323,7 +35413,7 @@ function VerifyingTimeoutStep2({
35323
35413
  onCheckAgain,
35324
35414
  supportEmail
35325
35415
  }) {
35326
- const buttonClass = `${buttonVariant} button-${buttonVariant}`;
35416
+ const buttonClass = themedButtonClass({ variant: buttonVariant, size: "md" });
35327
35417
  return /* @__PURE__ */ jsxs74("div", { className: "cr-error", role: "alert", children: [
35328
35418
  /* @__PURE__ */ jsx101(StateIcon, { variant: "warning", children: /* @__PURE__ */ jsx101(ClockIcon, {}) }),
35329
35419
  /* @__PURE__ */ jsx101("h3", { className: "cr-error__title", children: "Payment Verification Taking Longer" }),
@@ -35340,6 +35430,7 @@ var init_VerifyingTimeoutStep2 = __esm({
35340
35430
  "../blocks/src/system/runtime/nodes/course-registration/VerifyingTimeoutStep.tsx"() {
35341
35431
  "use strict";
35342
35432
  init_shared6();
35433
+ init_themedButtonClass();
35343
35434
  }
35344
35435
  });
35345
35436
 
@@ -35351,7 +35442,7 @@ function PaymentFailedStep2({
35351
35442
  buttonVariant = "primary",
35352
35443
  onRetry
35353
35444
  }) {
35354
- const buttonClass = `${buttonVariant} button-${buttonVariant}`;
35445
+ const buttonClass = themedButtonClass({ variant: buttonVariant, size: "md" });
35355
35446
  return /* @__PURE__ */ jsxs75("div", { className: "cr-payment-failed", role: "alert", children: [
35356
35447
  /* @__PURE__ */ jsx102(StateIcon, { variant: "error", children: /* @__PURE__ */ jsx102(CrossIcon, {}) }),
35357
35448
  /* @__PURE__ */ jsx102("h3", { className: "cr-payment-failed__title", children: "Payment Failed" }),
@@ -35363,6 +35454,7 @@ var init_PaymentFailedStep2 = __esm({
35363
35454
  "../blocks/src/system/runtime/nodes/course-registration/PaymentFailedStep.tsx"() {
35364
35455
  "use strict";
35365
35456
  init_shared6();
35457
+ init_themedButtonClass();
35366
35458
  }
35367
35459
  });
35368
35460
 
@@ -35436,7 +35528,16 @@ var init_CourseRegistrationErrorBoundary = __esm({
35436
35528
  });
35437
35529
 
35438
35530
  // ../blocks/src/system/runtime/nodes/course-registration/components.tsx
35531
+ import React19 from "react";
35439
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
+ }
35440
35541
  function CourseCard({
35441
35542
  course,
35442
35543
  isSelected,
@@ -35517,7 +35618,7 @@ function CourseSummary({
35517
35618
  teamMembers.length > 0 && /* @__PURE__ */ jsxs78("div", { className: "cr-summary__venue", children: [
35518
35619
  /* @__PURE__ */ jsx105("strong", { children: "Team:" }),
35519
35620
  " ",
35520
- teamMembers.map((teamMember) => teamMember.name).join(", ")
35621
+ /* @__PURE__ */ jsx105(TeamMemberInlineList, { teamMembers })
35521
35622
  ] }),
35522
35623
  showPrice && pricing.display.kind !== "unavailable" && /* @__PURE__ */ jsxs78("p", { className: "cr-summary__price", children: [
35523
35624
  /* @__PURE__ */ jsx105("strong", { children: pricing.selectableOptions.length > 0 ? "Pricing:" : "Price:" }),
@@ -36355,7 +36456,7 @@ function CourseRegistrationWizard(props2) {
36355
36456
  handleRetry,
36356
36457
  handleBookingModeChange
36357
36458
  } = useCourseRegistrationWizard(props2);
36358
- const buttonClass = `${buttonVariant} button-${buttonVariant}`;
36459
+ const buttonClass = themedButtonClass({ variant: buttonVariant, size: "md" });
36359
36460
  if (scopedCourses.length === 0) {
36360
36461
  return /* @__PURE__ */ jsx106(
36361
36462
  "div",
@@ -36765,6 +36866,7 @@ var init_CourseRegistrationWizard = __esm({
36765
36866
  init_PaymentFailedStep2();
36766
36867
  init_VerifyingTimeoutStep2();
36767
36868
  init_spinner();
36869
+ init_themedButtonClass();
36768
36870
  }
36769
36871
  });
36770
36872
 
@@ -37074,7 +37176,7 @@ var init_location_map_client = __esm({
37074
37176
  });
37075
37177
 
37076
37178
  // ../blocks/src/system/runtime/nodes/shop-commerce-store.ts
37077
- import * as React20 from "react";
37179
+ import * as React21 from "react";
37078
37180
  function storageKey(siteId) {
37079
37181
  return `riverbank:shop-cart:${siteId}`;
37080
37182
  }
@@ -37090,8 +37192,8 @@ function addPassToCommerceCart(siteId, input) {
37090
37192
  }
37091
37193
  function useCommerceCart(siteId) {
37092
37194
  const effectiveSiteId = siteId ?? "unknown";
37093
- const store = React20.useMemo(() => getStore(effectiveSiteId), [effectiveSiteId]);
37094
- const state = React20.useSyncExternalStore(
37195
+ const store = React21.useMemo(() => getStore(effectiveSiteId), [effectiveSiteId]);
37196
+ const state = React21.useSyncExternalStore(
37095
37197
  (listener) => store.subscribe(listener),
37096
37198
  () => store.getSnapshot(),
37097
37199
  () => EMPTY_STATE
@@ -37186,11 +37288,11 @@ var init_shop_commerce_store = __esm({
37186
37288
  });
37187
37289
 
37188
37290
  // ../blocks/src/system/runtime/nodes/shop-add-feedback.tsx
37189
- import * as React21 from "react";
37291
+ import * as React22 from "react";
37190
37292
  import { jsx as jsx111, jsxs as jsxs82 } from "react/jsx-runtime";
37191
37293
  function useTransientShopAddFeedback(timeoutMs = DEFAULT_TIMEOUT_MS) {
37192
- const [activeKey, setActiveKey] = React21.useState(null);
37193
- React21.useEffect(() => {
37294
+ const [activeKey, setActiveKey] = React22.useState(null);
37295
+ React22.useEffect(() => {
37194
37296
  if (!activeKey) return;
37195
37297
  const timeoutId = window.setTimeout(() => {
37196
37298
  setActiveKey((current) => current === activeKey ? null : current);
@@ -37347,7 +37449,7 @@ var init_shop_state = __esm({
37347
37449
  });
37348
37450
 
37349
37451
  // ../blocks/src/system/runtime/nodes/shop.client.tsx
37350
- 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";
37351
37453
  import { Fragment as Fragment17, jsx as jsx112, jsxs as jsxs83 } from "react/jsx-runtime";
37352
37454
  function ShopClient(props2) {
37353
37455
  return /* @__PURE__ */ jsx112(PassesMembershipsController, { render: props2.render });
@@ -37359,7 +37461,7 @@ function getCheckoutModalTitle(checkout2) {
37359
37461
  }
37360
37462
  function PassesMembershipsController({ render }) {
37361
37463
  const api = useBlockApi();
37362
- const [state, dispatch] = React22.useReducer(
37464
+ const [state, dispatch] = React23.useReducer(
37363
37465
  shopPassesMembershipsReducer,
37364
37466
  initialShopPassesMembershipsState
37365
37467
  );
@@ -39577,7 +39679,7 @@ var init_embla_carousel_react_esm = __esm({
39577
39679
  });
39578
39680
 
39579
39681
  // ../blocks/src/system/runtime/nodes/carousel.client.tsx
39580
- import React23 from "react";
39682
+ import React24 from "react";
39581
39683
  import { Fragment as Fragment18, jsx as jsx113, jsxs as jsxs84 } from "react/jsx-runtime";
39582
39684
  function normalizeCarouselProps(input) {
39583
39685
  const transition = input.transition === "fade" ? "fade" : "slide";
@@ -39632,8 +39734,8 @@ var init_carousel_client = __esm({
39632
39734
  autoplayDelay,
39633
39735
  loop
39634
39736
  }) => {
39635
- const slides = React23.Children.toArray(children).filter(Boolean);
39636
- const normalized = React23.useMemo(
39737
+ const slides = React24.Children.toArray(children).filter(Boolean);
39738
+ const normalized = React24.useMemo(
39637
39739
  () => normalizeCarouselProps({
39638
39740
  slidesToShow,
39639
39741
  transition,
@@ -39656,11 +39758,11 @@ var init_carousel_client = __esm({
39656
39758
  ]
39657
39759
  );
39658
39760
  const resolvedSlides = resolveSlidesToShowMobile(normalized.slidesToShow);
39659
- const cssVars = React23.useMemo(
39761
+ const cssVars = React24.useMemo(
39660
39762
  () => getCarouselSlidesToShowCssVars(normalized.slidesToShow),
39661
39763
  [normalized.slidesToShow]
39662
39764
  );
39663
- const plugins = React23.useMemo(() => {
39765
+ const plugins = React24.useMemo(() => {
39664
39766
  if (!normalized.autoplay) return void 0;
39665
39767
  return [
39666
39768
  Autoplay({
@@ -39682,11 +39784,11 @@ var init_carousel_client = __esm({
39682
39784
  },
39683
39785
  plugins
39684
39786
  );
39685
- const [selectedIndex, setSelectedIndex] = React23.useState(0);
39686
- const [scrollSnaps, setScrollSnaps] = React23.useState([]);
39687
- const [canScrollPrev, setCanScrollPrev] = React23.useState(false);
39688
- const [canScrollNext, setCanScrollNext] = React23.useState(false);
39689
- 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(() => {
39690
39792
  if (!api) return;
39691
39793
  const onInit = () => {
39692
39794
  setScrollSnaps(api.scrollSnapList());
@@ -39709,7 +39811,7 @@ var init_carousel_client = __esm({
39709
39811
  api.off("reInit", onSelect);
39710
39812
  };
39711
39813
  }, [api]);
39712
- React23.useEffect(() => {
39814
+ React24.useEffect(() => {
39713
39815
  if (!api || !normalized.autoplay) return;
39714
39816
  const autoplayPlugin = api.plugins()?.autoplay;
39715
39817
  if (!autoplayPlugin) return;
@@ -39920,16 +40022,16 @@ var init_shop_checkout_state = __esm({
39920
40022
  });
39921
40023
 
39922
40024
  // ../blocks/src/system/runtime/nodes/shop-commerce.tsx
39923
- import * as React24 from "react";
40025
+ import * as React25 from "react";
39924
40026
  import { Fragment as Fragment19, jsx as jsx114, jsxs as jsxs85 } from "react/jsx-runtime";
39925
40027
  function ProductListController(props2) {
39926
40028
  const api = useBlockApi();
39927
40029
  const cart2 = useCommerceCart(api.config.siteId);
39928
40030
  const addFeedback = useTransientShopAddFeedback();
39929
- const [variantSelection, setVariantSelection] = React24.useState(
40031
+ const [variantSelection, setVariantSelection] = React25.useState(
39930
40032
  () => Object.fromEntries(props2.render.display.cards.map((card) => [card.productId, card.selectedVariantId]))
39931
40033
  );
39932
- const cards = React24.useMemo(
40034
+ const cards = React25.useMemo(
39933
40035
  () => props2.render.hydration.products.map(
39934
40036
  (product) => buildProductCardDisplay(
39935
40037
  product,
@@ -39944,7 +40046,7 @@ function ProductListController(props2) {
39944
40046
  ),
39945
40047
  [props2.render.hydration, variantSelection]
39946
40048
  );
39947
- const display = React24.useMemo(
40049
+ const display = React25.useMemo(
39948
40050
  () => ({
39949
40051
  ...props2.render.display,
39950
40052
  state: cards.length === 0 ? "empty" : "ready",
@@ -40006,17 +40108,17 @@ function ProductDetailController(props2) {
40006
40108
  const api = useBlockApi();
40007
40109
  const cart2 = useCommerceCart(api.config.siteId);
40008
40110
  const addFeedback = useTransientShopAddFeedback();
40009
- const selectedProduct = React24.useMemo(
40111
+ const selectedProduct = React25.useMemo(
40010
40112
  () => props2.render.hydration.products.find((product) => product.id === props2.render.hydration.productId) ?? null,
40011
40113
  [props2.render.hydration.productId, props2.render.hydration.products]
40012
40114
  );
40013
- const [variantId, setVariantId] = React24.useState(
40115
+ const [variantId, setVariantId] = React25.useState(
40014
40116
  props2.render.display.state === "ready" ? props2.render.display.selectedVariantId : null
40015
40117
  );
40016
- React24.useEffect(() => {
40118
+ React25.useEffect(() => {
40017
40119
  setVariantId(props2.render.display.state === "ready" ? props2.render.display.selectedVariantId : null);
40018
40120
  }, [props2.render.display]);
40019
- const display = React24.useMemo(
40121
+ const display = React25.useMemo(
40020
40122
  () => buildProductDetailDisplay(
40021
40123
  selectedProduct,
40022
40124
  {
@@ -40084,7 +40186,7 @@ function ProductDetailController(props2) {
40084
40186
  function CartController(props2) {
40085
40187
  const api = useBlockApi();
40086
40188
  const cart2 = useCommerceCart(api.config.siteId);
40087
- const display = React24.useMemo(
40189
+ const display = React25.useMemo(
40088
40190
  () => getShopDisplayForItems(props2.render, cart2.items),
40089
40191
  [cart2.items, props2.render]
40090
40192
  );
@@ -40127,11 +40229,11 @@ function CartController(props2) {
40127
40229
  function CheckoutController(props2) {
40128
40230
  const api = useBlockApi();
40129
40231
  const cart2 = useCommerceCart(api.config.siteId);
40130
- const [state, dispatch] = React24.useReducer(
40232
+ const [state, dispatch] = React25.useReducer(
40131
40233
  shopCheckoutReducer,
40132
40234
  initialShopCheckoutState
40133
40235
  );
40134
- React24.useEffect(() => {
40236
+ React25.useEffect(() => {
40135
40237
  const checkout2 = consumeSearchParam("checkout");
40136
40238
  if (checkout2 === "success") {
40137
40239
  cart2.clear();
@@ -40140,7 +40242,7 @@ function CheckoutController(props2) {
40140
40242
  dispatch({ type: "setNotice", notice: "cancelled" });
40141
40243
  }
40142
40244
  }, [cart2]);
40143
- const display = React24.useMemo(
40245
+ const display = React25.useMemo(
40144
40246
  () => getShopDisplayForItems(props2.render, cart2.items),
40145
40247
  [cart2.items, props2.render]
40146
40248
  );
@@ -40300,7 +40402,7 @@ var init_checkout_client = __esm({
40300
40402
  });
40301
40403
 
40302
40404
  // ../blocks/src/system/runtime/header/HeaderCartDrawer.tsx
40303
- import * as React25 from "react";
40405
+ import * as React26 from "react";
40304
40406
  import { jsx as jsx119, jsxs as jsxs86 } from "react/jsx-runtime";
40305
40407
  function normalizeQuantityInput(value) {
40306
40408
  const parsed = Number(value);
@@ -40350,8 +40452,8 @@ function HeaderCartDrawerItems(props2) {
40350
40452
  )) });
40351
40453
  }
40352
40454
  function HeaderCartDrawer(props2) {
40353
- const titleId = React25.useId();
40354
- const display = React25.useMemo(
40455
+ const titleId = React26.useId();
40456
+ const display = React26.useMemo(
40355
40457
  () => buildCartDisplay(props2.cart.items, {
40356
40458
  heading: "Cart",
40357
40459
  emptyMessage: "Your cart is empty.",
@@ -40565,15 +40667,15 @@ var init_HeaderCartTrigger = __esm({
40565
40667
  });
40566
40668
 
40567
40669
  // ../blocks/src/system/runtime/header/headerCartRuntime.tsx
40568
- import * as React26 from "react";
40670
+ import * as React27 from "react";
40569
40671
  import { createPortal as createPortal2 } from "react-dom";
40570
40672
  import { createRoot } from "react-dom/client";
40571
40673
  import { Fragment as Fragment20, jsx as jsx121, jsxs as jsxs88 } from "react/jsx-runtime";
40572
40674
  function HeaderCartRuntime(props2) {
40573
40675
  const cart2 = useCommerceCart(props2.siteId);
40574
- const itemCount = React26.useMemo(() => getCartItemCount(cart2.items), [cart2.items]);
40575
- const [open, setOpen] = React26.useState(false);
40576
- 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(
40577
40679
  () => resolveHeaderCartCheckoutHref(
40578
40680
  props2.mounts,
40579
40681
  typeof window === "undefined" ? null : window.location.pathname
@@ -41154,6 +41256,7 @@ var init_EventPaginatedListView_client = __esm({
41154
41256
  init_EventCompactRow();
41155
41257
  init_EmptyState();
41156
41258
  init_EventListing_view();
41259
+ init_themedButtonClass();
41157
41260
  EventPaginatedListView = ({
41158
41261
  filters,
41159
41262
  display,
@@ -41196,7 +41299,10 @@ var init_EventPaginatedListView_client = __esm({
41196
41299
  {
41197
41300
  type: "button",
41198
41301
  onClick: loadMore,
41199
- className: `${display.buttonVariant} button-${display.buttonVariant}`,
41302
+ className: themedButtonClass({
41303
+ variant: display.buttonVariant,
41304
+ size: "md"
41305
+ }),
41200
41306
  children: "Try again"
41201
41307
  }
41202
41308
  )
@@ -41207,11 +41313,25 @@ var init_EventPaginatedListView_client = __esm({
41207
41313
  type: "button",
41208
41314
  onClick: loadMore,
41209
41315
  disabled: loading,
41210
- className: `${display.buttonVariant} button-${display.buttonVariant} ${loading ? "rb-opacity-50 rb-cursor-wait" : ""}`,
41316
+ className: themedButtonClass({
41317
+ variant: display.buttonVariant,
41318
+ size: "md",
41319
+ extraClassName: loading ? "rb-opacity-50 rb-cursor-wait" : null
41320
+ }),
41211
41321
  children: loading ? "Loading..." : loadMoreText
41212
41322
  }
41213
41323
  ) }) : null,
41214
- paginationMode === "seeAllLink" && seeAllUrl && hasMore ? /* @__PURE__ */ jsx124("div", { className: "rb-mt-8 rb-text-center", children: /* @__PURE__ */ jsx124("a", { href: seeAllUrl, className: `${display.buttonVariant} button-${display.buttonVariant}`, children: loadMoreText }) }) : null
41324
+ paginationMode === "seeAllLink" && seeAllUrl && hasMore ? /* @__PURE__ */ jsx124("div", { className: "rb-mt-8 rb-text-center", children: /* @__PURE__ */ jsx124(
41325
+ "a",
41326
+ {
41327
+ href: seeAllUrl,
41328
+ className: themedButtonClass({
41329
+ variant: display.buttonVariant,
41330
+ size: "md"
41331
+ }),
41332
+ children: loadMoreText
41333
+ }
41334
+ ) }) : null
41215
41335
  ] }),
41216
41336
  renderEventCard: (event) => display.listLayout === "compact" ? /* @__PURE__ */ jsx124(
41217
41337
  EventCompactRow,
@@ -42555,6 +42675,7 @@ var init_EventCombined_client = __esm({
42555
42675
  init_EventModalContext();
42556
42676
  init_EventModals();
42557
42677
  init_utils();
42678
+ init_themedButtonClass();
42558
42679
  EventCombinedClient = ({
42559
42680
  events: initialEvents,
42560
42681
  siteId,
@@ -42880,7 +43001,7 @@ var init_EventCombined_client = __esm({
42880
43001
  {
42881
43002
  type: "button",
42882
43003
  onClick: goToToday,
42883
- className: `${buttonVariant} button-${buttonVariant} rb-px-3 rb-py-1`,
43004
+ className: themedButtonClass({ variant: buttonVariant, size: "sm" }),
42884
43005
  children: "Today"
42885
43006
  }
42886
43007
  )
@@ -43197,6 +43318,7 @@ var init_EventCalendar_client = __esm({
43197
43318
  init_EventModalContext();
43198
43319
  init_EventModals();
43199
43320
  init_WeekTimetableView();
43321
+ init_themedButtonClass();
43200
43322
  EventCalendarClient = ({
43201
43323
  render
43202
43324
  }) => {
@@ -43485,7 +43607,10 @@ var init_EventCalendar_client = __esm({
43485
43607
  {
43486
43608
  type: "button",
43487
43609
  onClick: onToday,
43488
- className: `${display.buttonVariant} button-${display.buttonVariant} rb-px-3 rb-py-1`,
43610
+ className: themedButtonClass({
43611
+ variant: display.buttonVariant,
43612
+ size: "sm"
43613
+ }),
43489
43614
  children: "Today"
43490
43615
  }
43491
43616
  )
@@ -43498,7 +43623,10 @@ var init_EventCalendar_client = __esm({
43498
43623
  {
43499
43624
  type: "button",
43500
43625
  onClick: onToday,
43501
- className: `${display.buttonVariant} button-${display.buttonVariant} rb-px-3 rb-py-1`,
43626
+ className: themedButtonClass({
43627
+ variant: display.buttonVariant,
43628
+ size: "sm"
43629
+ }),
43502
43630
  children: "Try again"
43503
43631
  }
43504
43632
  )
@@ -43593,6 +43721,7 @@ var init_form_client = __esm({
43593
43721
  init_client2();
43594
43722
  init_src3();
43595
43723
  init_useFormSubmission();
43724
+ init_themedButtonClass();
43596
43725
  FormNodeClient = ({
43597
43726
  render
43598
43727
  }) => {
@@ -43730,7 +43859,19 @@ var init_form_client = __esm({
43730
43859
  return renderField(group.field);
43731
43860
  }),
43732
43861
  showSpamProtection && /* @__PURE__ */ jsx137(AltchaWidget, { challengeUrl: getChallengeUrl(), onSolutionChange: setAltchaSolution }),
43733
- /* @__PURE__ */ jsx137("div", { className: "fb-actions", children: /* @__PURE__ */ jsx137("div", { className: "fb-actions-inner", children: /* @__PURE__ */ jsx137("button", { type: "submit", className: "primary button-primary rb-w-full rb-sm-w-auto", disabled: state.tag === "submitting", children: state.tag === "submitting" ? "Submitting..." : render.display.submitLabel }) }) })
43862
+ /* @__PURE__ */ jsx137("div", { className: "fb-actions", children: /* @__PURE__ */ jsx137("div", { className: "fb-actions-inner", children: /* @__PURE__ */ jsx137(
43863
+ "button",
43864
+ {
43865
+ type: "submit",
43866
+ className: themedButtonClass({
43867
+ variant: "primary",
43868
+ size: "md",
43869
+ extraClassName: "rb-w-full rb-sm-w-auto"
43870
+ }),
43871
+ disabled: state.tag === "submitting",
43872
+ children: state.tag === "submitting" ? "Submitting..." : render.display.submitLabel
43873
+ }
43874
+ ) }) })
43734
43875
  ] });
43735
43876
  };
43736
43877
  }
@@ -43849,7 +43990,7 @@ function NewsletterFormClient({
43849
43990
  "button",
43850
43991
  {
43851
43992
  type: "submit",
43852
- className: "primary button-primary",
43993
+ className: themedButtonClass({ variant: "primary", size: "md" }),
43853
43994
  disabled: isSubmitting,
43854
43995
  children: isSubmitting ? "Subscribing..." : render.display.buttonLabel
43855
43996
  }
@@ -43867,6 +44008,7 @@ var init_newsletter_form_client = __esm({
43867
44008
  init_client2();
43868
44009
  init_src3();
43869
44010
  init_api();
44011
+ init_themedButtonClass();
43870
44012
  }
43871
44013
  });
43872
44014
 
@@ -58629,7 +58771,7 @@ function hydrateBlocksIslands(options = {}) {
58629
58771
  }
58630
58772
 
58631
58773
  // ../blocks/src/PageRenderer.tsx
58632
- import * as React37 from "react";
58774
+ import * as React38 from "react";
58633
58775
 
58634
58776
  // ../blocks/src/system/manifest/registry.ts
58635
58777
  var REGISTRY_SYMBOL = /* @__PURE__ */ Symbol.for("@riverbankcms/blocks/manifest-registry");
@@ -58788,35 +58930,61 @@ function buildFieldSchema(field, allowNull, allowIncomplete = false) {
58788
58930
  }
58789
58931
  return finalizeSchema(schema, required, allowNull, allowIncomplete);
58790
58932
  }
58933
+ function buildFriendlyStringSchema(field) {
58934
+ return z40.string({
58935
+ error: (issue) => issue.input === void 0 || issue.input === null ? "This field is required" : `${field.label} needs text`
58936
+ });
58937
+ }
58791
58938
  function buildTextSchema(field) {
58792
58939
  const ui = field.ui ?? {};
58793
58940
  const inputType = ui?.inputType;
58794
58941
  let schema;
58795
58942
  if (inputType === "number") {
58796
- schema = z40.coerce.number();
58797
- if (typeof ui?.min === "number") schema = schema.min(ui.min);
58798
- if (typeof ui?.max === "number") schema = schema.max(ui.max);
58943
+ schema = z40.coerce.number({
58944
+ error: (issue) => issue.input === void 0 ? `${field.label} is required` : `${field.label} needs a number`
58945
+ });
58946
+ if (typeof ui?.min === "number") {
58947
+ schema = schema.min(
58948
+ ui.min,
58949
+ `${field.label} must be ${ui.min} or more`
58950
+ );
58951
+ }
58952
+ if (typeof ui?.max === "number") {
58953
+ schema = schema.max(
58954
+ ui.max,
58955
+ `${field.label} must be ${ui.max} or less`
58956
+ );
58957
+ }
58799
58958
  } else {
58800
- schema = z40.string();
58959
+ schema = buildFriendlyStringSchema(field);
58801
58960
  if (inputType === "email") {
58802
- schema = schema.email(`${field.label} must be a valid email`);
58961
+ schema = schema.email("Enter a valid email address");
58803
58962
  }
58804
58963
  if (inputType === "tel") {
58805
58964
  const TEL_RE = /^[+()0-9\s\-]{3,}$/;
58806
- schema = schema.regex(TEL_RE, `${field.label} must be a valid phone number`);
58965
+ schema = schema.regex(
58966
+ TEL_RE,
58967
+ "Enter a valid phone number"
58968
+ );
58807
58969
  }
58808
58970
  if (ui?.pattern) {
58809
58971
  try {
58810
58972
  const re = new RegExp(ui.pattern);
58811
- schema = schema.regex(re, `${field.label} is not in the correct format`);
58973
+ schema = schema.regex(
58974
+ re,
58975
+ `${field.label} is not in the right format`
58976
+ );
58812
58977
  } catch {
58813
58978
  }
58814
58979
  }
58815
58980
  if (field.maxLength) {
58816
- schema = schema.max(field.maxLength, `${field.label} must have at most ${field.maxLength} characters`);
58981
+ schema = schema.max(
58982
+ field.maxLength,
58983
+ `${field.label} must be ${field.maxLength} characters or less`
58984
+ );
58817
58985
  }
58818
58986
  if (field.required) {
58819
- schema = schema.min(1, `${field.label} is required`).refine((v) => v.trim().length > 0, { message: `${field.label} is required` });
58987
+ schema = schema.min(1, { message: `${field.label} is required` }).refine((v) => v.trim().length > 0, { message: `${field.label} is required` });
58820
58988
  }
58821
58989
  }
58822
58990
  return schema;
@@ -58826,19 +58994,22 @@ function buildRichTextSchema2() {
58826
58994
  }
58827
58995
  var SLUG_PATTERN = /^(?:[a-z0-9]+(?:-[a-z0-9]+)*)(?:\/(?:[a-z0-9]+(?:-[a-z0-9]+)*))*$/;
58828
58996
  function buildSlugSchema(field) {
58829
- const message = `${field.label} must contain lowercase letters, numbers, and dashes`;
58830
- let schema = z40.string().regex(SLUG_PATTERN, message);
58997
+ const message = `${field.label} can only use lowercase letters, numbers, and dashes`;
58998
+ let schema = buildFriendlyStringSchema(field).regex(SLUG_PATTERN, message);
58831
58999
  if (field.maxLength) {
58832
- schema = schema.max(field.maxLength, `${field.label} must be at most ${field.maxLength} characters`);
59000
+ schema = schema.max(
59001
+ field.maxLength,
59002
+ `${field.label} must be ${field.maxLength} characters or less`
59003
+ );
58833
59004
  }
58834
59005
  if (field.required) {
58835
- schema = schema.min(1, `${field.label} is required`);
59006
+ schema = schema.min(1, { message: `${field.label} is required` });
58836
59007
  }
58837
59008
  return schema;
58838
59009
  }
58839
59010
  var ALLOWED_URL_PROTOCOLS = ["http:", "https:"];
58840
59011
  function buildUrlSchema(field) {
58841
- const message = `${field.label} must be a valid URL`;
59012
+ const message = "Enter a valid web address";
58842
59013
  const validate = (value) => {
58843
59014
  if (!value) {
58844
59015
  return !field.required;
@@ -58848,14 +59019,16 @@ function buildUrlSchema(field) {
58848
59019
  }
58849
59020
  try {
58850
59021
  const parsed = new URL(value);
58851
- return ALLOWED_URL_PROTOCOLS.includes(parsed.protocol);
59022
+ return ALLOWED_URL_PROTOCOLS.includes(
59023
+ parsed.protocol
59024
+ );
58852
59025
  } catch {
58853
59026
  return false;
58854
59027
  }
58855
59028
  };
58856
- let schema = z40.string().trim().refine(validate, message);
59029
+ let schema = buildFriendlyStringSchema(field).trim().refine(validate, message);
58857
59030
  if (field.required) {
58858
- schema = schema.min(1, `${field.label} is required`);
59031
+ schema = schema.min(1, { message: `${field.label} is required` });
58859
59032
  }
58860
59033
  return schema;
58861
59034
  }
@@ -58908,10 +59081,13 @@ function buildSelectSchema(field) {
58908
59081
  switch (source.kind) {
58909
59082
  case "sdk":
58910
59083
  case "site":
58911
- return z40.string();
59084
+ return buildFriendlyStringSchema(field);
58912
59085
  case "static": {
58913
59086
  const values = field.options.map((option) => option.value);
58914
- return z40.string().refine((value) => values.includes(value), `${field.label} must be one of: ${values.join(", ")}`);
59087
+ return buildFriendlyStringSchema(field).refine(
59088
+ (value) => values.includes(value),
59089
+ `Choose one of the available options for ${field.label}`
59090
+ );
58915
59091
  }
58916
59092
  default:
58917
59093
  return assertNeverSelectSource2(source);
@@ -58919,14 +59095,16 @@ function buildSelectSchema(field) {
58919
59095
  })();
58920
59096
  if (field.multiple) {
58921
59097
  const arraySchema = z40.array(singleValueSchema);
58922
- return field.required ? arraySchema : arraySchema.nullable();
59098
+ return field.required ? arraySchema.min(1, { message: "This field is required" }) : arraySchema.nullable();
58923
59099
  }
58924
59100
  return field.required ? singleValueSchema : singleValueSchema.nullable();
58925
59101
  }
58926
59102
  function buildReferenceSchema(field) {
58927
- let schema = z40.string();
59103
+ let schema = z40.string({
59104
+ error: (issue) => issue.input === void 0 || issue.input === null ? "This field is required" : `${field.label} needs text`
59105
+ });
58928
59106
  if (field.required) {
58929
- schema = schema.min(1, `${field.label} is required`);
59107
+ schema = schema.min(1, { message: `${field.label} is required` });
58930
59108
  }
58931
59109
  return schema;
58932
59110
  }
@@ -59301,719 +59479,126 @@ function assertUniqueLayoutProfileKeys(profiles) {
59301
59479
  }
59302
59480
  }
59303
59481
 
59304
- // ../theme-core/src/site-styles/index.ts
59305
- init_compatibility();
59306
-
59307
- // ../theme-core/src/site-styles/sourceCatalogs.ts
59308
- var generatedContentFrames = [
59309
- plainFrame,
59310
- panelFrame("inset"),
59311
- panelFrame("raised"),
59312
- flushPanelFrame({ bleed: "start" })
59313
- ];
59314
- var userContentFrames = [
59315
- ...generatedContentFrames,
59316
- panelFrame("editorial"),
59317
- flushPanelFrame({ bleed: "end" }),
59318
- flushPanelFrame({ bleed: "both" })
59319
- ];
59320
- var generatedDesignOptionCatalog = {
59321
- source: "generated",
59322
- sectionSurfaces: ["base", "muted-band", "accent-band", "hero-image"],
59323
- contentFrames: generatedContentFrames,
59324
- itemSurfaces: ["none", "default", "flat", "outlined", "raised"],
59325
- transitions: ["none", "soft-fade-short", "soft-fade-long"],
59326
- emphases: ["low", "medium", "high"],
59327
- detachedCustom: false
59328
- };
59329
- var userDesignOptionCatalog = {
59330
- source: "user",
59331
- sectionSurfaces: generatedDesignOptionCatalog.sectionSurfaces,
59332
- contentFrames: userContentFrames,
59333
- itemSurfaces: [
59334
- ...generatedDesignOptionCatalog.itemSurfaces,
59335
- "inset",
59336
- "editorial"
59337
- ],
59338
- transitions: [
59339
- ...generatedDesignOptionCatalog.transitions,
59340
- "wave-edge",
59341
- "angle-edge"
59342
- ],
59343
- emphases: generatedDesignOptionCatalog.emphases,
59344
- detachedCustom: false
59345
- };
59346
- var advancedDesignOptionCatalog = {
59347
- source: "advanced",
59348
- sectionSurfaces: userDesignOptionCatalog.sectionSurfaces,
59349
- contentFrames: userDesignOptionCatalog.contentFrames,
59350
- itemSurfaces: userDesignOptionCatalog.itemSurfaces,
59351
- transitions: userDesignOptionCatalog.transitions,
59352
- emphases: userDesignOptionCatalog.emphases,
59353
- detachedCustom: true
59354
- };
59355
-
59356
59482
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
59357
- var curatedSiteStyleIdValues = [
59358
- "site-style:calm-studio",
59359
- "site-style:clear-professional",
59360
- "site-style:warm-editorial",
59361
- "site-style:bright-community",
59362
- "site-style:quiet-luxury",
59363
- "site-style:practical-services",
59364
- "site-style:modern-wellness",
59365
- "site-style:bold-launch"
59366
- ];
59367
- var quietBudget = {
59368
- accentDensity: "low",
59369
- panelDensity: "medium",
59370
- transitionMix: "quiet",
59371
- primaryCtaLimit: 2,
59372
- mediaDensity: "medium",
59373
- decorativeRepetition: "low"
59374
- };
59375
- var balancedBudget = {
59376
- accentDensity: "medium",
59377
- panelDensity: "medium",
59378
- transitionMix: "balanced",
59379
- primaryCtaLimit: 3,
59380
- mediaDensity: "medium",
59381
- decorativeRepetition: "medium"
59382
- };
59383
- var expressiveBudget = {
59384
- accentDensity: "high",
59385
- panelDensity: "high",
59386
- transitionMix: "expressive",
59387
- primaryCtaLimit: 3,
59388
- mediaDensity: "high",
59389
- decorativeRepetition: "medium"
59390
- };
59391
- function uniqueContentFrameKinds() {
59392
- const kinds = [...new Set(
59393
- generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
59394
- )];
59395
- const firstKind = kinds[0];
59396
- if (!firstKind) {
59397
- throw new Error("Expected generated design option catalog to expose at least one content frame kind.");
59398
- }
59399
- return [firstKind, ...kinds.slice(1)];
59400
- }
59401
- var generatedContentFrameKinds = uniqueContentFrameKinds();
59402
- function defineCuratedSiteStyle(input) {
59403
- return {
59404
- id: asSiteStyleId(input.id),
59405
- name: input.name,
59406
- description: input.description,
59407
- generationBrief: input.generationBrief,
59408
- selectionKeywords: input.selectionKeywords ?? [],
59409
- template: {
59410
- id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
59411
- name: input.name,
59412
- version: 1,
59413
- tokenRecipes: input.tokenRecipes,
59414
- compositionBudget: input.compositionBudget,
59415
- supportedSectionSurfaces: generatedDesignOptionCatalog.sectionSurfaces,
59416
- supportedContentFrames: generatedContentFrameKinds,
59417
- supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
59418
- supportedTransitions: generatedDesignOptionCatalog.transitions
59419
- },
59420
- // The library IDs are already branded at construction (`asButtonPersonalityId`
59421
- // / `asPaletteVariantId`); the closed-union input type guarantees only
59422
- // shipped IDs reach this branch.
59423
- defaultButtonPersonalityId: input.defaultButtonPersonalityId,
59424
- acceptedButtons: input.acceptedButtons,
59425
- defaultPaletteVariantId: input.defaultPaletteVariantId,
59426
- acceptedPalettes: input.acceptedPalettes
59427
- };
59428
- }
59429
- var curatedSiteStyles = [
59430
- defineCuratedSiteStyle({
59431
- id: "site-style:calm-studio",
59432
- name: "Calm Studio",
59433
- description: "Soft, measured, and spacious for intimate appointment or class businesses.",
59434
- generationBrief: "Use calm pacing, concise copy, generous breathing room, and natural imagery. Keep calls to action steady rather than urgent.",
59435
- tokenRecipes: {
59436
- palette: "soft-natural",
59437
- contrast: "standard",
59438
- radius: "soft",
59439
- shadow: "subtle",
59440
- typography: "friendly-sans",
59441
- spacing: "airy",
59442
- motion: "subtle"
59443
- },
59444
- compositionBudget: quietBudget,
59445
- defaultButtonPersonalityId: "soft-pill",
59446
- acceptedButtons: { tone: ["minimal", "classic"], era: ["organic", "editorial"] },
59447
- defaultPaletteVariantId: "soft-natural-sage",
59448
- acceptedPalettes: { tone: ["minimal", "classic"], era: ["organic"] }
59449
- }),
59450
- defineCuratedSiteStyle({
59451
- id: "site-style:clear-professional",
59452
- name: "Clear Professional",
59453
- description: "Crisp, trustworthy, and direct for local services and consultancies.",
59454
- generationBrief: "Prioritize clarity, proof, service detail, and easy next steps. Keep visuals polished and specific, with restrained decorative treatment.",
59455
- tokenRecipes: {
59456
- palette: "brand-led",
59457
- contrast: "strong",
59458
- radius: "soft",
59459
- shadow: "subtle",
59460
- typography: "clean-sans",
59461
- spacing: "regular",
59462
- motion: "subtle"
59463
- },
59464
- compositionBudget: balancedBudget,
59465
- defaultButtonPersonalityId: "confident-chip",
59466
- acceptedButtons: { tone: ["minimal", "classic"], era: ["modern", "editorial"] },
59467
- defaultPaletteVariantId: "brand-led-cool",
59468
- acceptedPalettes: { tone: ["minimal", "classic"], era: ["modern", "editorial"] }
59469
- }),
59470
- defineCuratedSiteStyle({
59471
- id: "site-style:warm-editorial",
59472
- name: "Warm Editorial",
59473
- description: "Story-led and textured for educators, makers, venues, and retreats.",
59474
- generationBrief: "Let the copy feel thoughtful and grounded. Favor narrative sections, supporting media, and a small number of editorial panels.",
59475
- tokenRecipes: {
59476
- palette: "warm-neutral",
59477
- contrast: "standard",
59478
- radius: "square",
59479
- shadow: "none",
59480
- typography: "serif-editorial",
59481
- spacing: "airy",
59482
- motion: "subtle"
59483
- },
59484
- compositionBudget: balancedBudget,
59485
- defaultButtonPersonalityId: "editorial-link",
59486
- acceptedButtons: { tone: ["minimal", "classic"], era: ["editorial", "organic"] },
59487
- defaultPaletteVariantId: "warm-neutral-cream",
59488
- acceptedPalettes: { tone: ["minimal", "classic"], era: ["editorial", "organic"] }
59489
- }),
59490
- defineCuratedSiteStyle({
59491
- id: "site-style:bright-community",
59492
- name: "Bright Community",
59493
- description: "Friendly, welcoming, and active for groups, classes, and neighborhood offers.",
59494
- generationBrief: "Use welcoming language, clear event or booking routes, and optimistic imagery. Let accents appear, but avoid noisy decoration.",
59495
- tokenRecipes: {
59496
- palette: "brand-led",
59497
- contrast: "standard",
59498
- radius: "rounded",
59499
- shadow: "subtle",
59500
- typography: "friendly-sans",
59501
- spacing: "regular",
59502
- motion: "expressive"
59503
- },
59504
- compositionBudget: balancedBudget,
59505
- defaultButtonPersonalityId: "pebble",
59506
- acceptedButtons: { tone: ["classic", "bold"], era: ["organic", "modern"] },
59507
- defaultPaletteVariantId: "brand-led-warm",
59508
- acceptedPalettes: { tone: ["classic", "bold"], era: ["modern", "organic"] }
59509
- }),
59510
- defineCuratedSiteStyle({
59511
- id: "site-style:quiet-luxury",
59512
- name: "Quiet Luxury",
59513
- description: "Minimal, confident, and refined for premium experiences and private services.",
59514
- generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
59515
- selectionKeywords: [
59516
- "luxury",
59517
- "premium",
59518
- "boutique",
59519
- "bespoke",
59520
- "exclusive"
59521
- ],
59522
- tokenRecipes: {
59523
- palette: "high-contrast",
59524
- contrast: "strong",
59525
- radius: "square",
59526
- shadow: "none",
59527
- typography: "classic-serif",
59528
- spacing: "airy",
59529
- motion: "none"
59530
- },
59531
- compositionBudget: quietBudget,
59532
- defaultButtonPersonalityId: "editorial-link",
59533
- acceptedButtons: { tone: ["minimal", "classic"], era: ["editorial", "organic"] },
59534
- defaultPaletteVariantId: "high-contrast-charcoal",
59535
- acceptedPalettes: { tone: ["minimal", "classic"], era: ["editorial", "organic"] }
59536
- }),
59537
- defineCuratedSiteStyle({
59538
- id: "site-style:practical-services",
59539
- name: "Practical Services",
59540
- description: "Efficient, plainspoken, and conversion-focused for trades and everyday services.",
59541
- generationBrief: "Make services, location, trust signals, and contact paths obvious. Keep copy brief and avoid ornate visual treatments.",
59542
- selectionKeywords: [
59543
- "repair",
59544
- "plumb",
59545
- "electric",
59546
- "cleaning",
59547
- "landscap",
59548
- "contractor"
59549
- ],
59550
- tokenRecipes: {
59551
- palette: "brand-led",
59552
- contrast: "maximum",
59553
- radius: "soft",
59554
- shadow: "subtle",
59555
- typography: "clean-sans",
59556
- spacing: "compact",
59557
- motion: "none"
59558
- },
59559
- compositionBudget: quietBudget,
59560
- defaultButtonPersonalityId: "confident-chip",
59561
- acceptedButtons: { tone: ["minimal", "classic", "bold"], era: ["modern", "editorial"] },
59562
- defaultPaletteVariantId: "brand-led-cool",
59563
- acceptedPalettes: { tone: ["minimal", "classic", "bold"], era: ["modern", "editorial"] }
59564
- }),
59565
- defineCuratedSiteStyle({
59566
- id: "site-style:modern-wellness",
59567
- name: "Modern Wellness",
59568
- description: "Natural, current, and reassuring for practitioners, studios, and wellbeing offers.",
59569
- generationBrief: "Keep the tone warm and practical. Use gentle section variation, natural materials, and inclusive copy without making medical claims.",
59570
- tokenRecipes: {
59571
- palette: "soft-natural",
59572
- contrast: "standard",
59573
- radius: "rounded",
59574
- shadow: "subtle",
59575
- typography: "clean-sans",
59576
- spacing: "airy",
59577
- motion: "subtle"
59578
- },
59579
- compositionBudget: balancedBudget,
59580
- defaultButtonPersonalityId: "soft-pill",
59581
- acceptedButtons: { tone: ["minimal", "classic"], era: ["organic", "modern"] },
59582
- defaultPaletteVariantId: "soft-natural-sage",
59583
- acceptedPalettes: { tone: ["minimal", "classic"], era: ["organic"] }
59584
- }),
59585
- defineCuratedSiteStyle({
59586
- id: "site-style:bold-launch",
59587
- name: "Bold Launch",
59588
- description: "High-energy and punchy for launches, campaigns, and creative offers.",
59589
- generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
59590
- selectionKeywords: [
59591
- "launch",
59592
- "campaign",
59593
- "preorder",
59594
- "pre-order",
59595
- "waitlist",
59596
- "drop"
59597
- ],
59598
- tokenRecipes: {
59599
- palette: "high-contrast",
59600
- contrast: "maximum",
59601
- radius: "pill",
59602
- shadow: "layered",
59603
- typography: "clean-sans",
59604
- spacing: "regular",
59605
- motion: "expressive"
59606
- },
59607
- compositionBudget: expressiveBudget,
59608
- defaultButtonPersonalityId: "ink-stamp",
59609
- acceptedButtons: { tone: ["classic", "bold"], era: ["editorial", "organic", "modern"] },
59610
- defaultPaletteVariantId: "high-contrast-monochrome",
59611
- acceptedPalettes: { tone: ["bold"], era: ["editorial", "modern"] }
59612
- })
59613
- ];
59614
- var curatedSiteStylesById = new Map(
59615
- curatedSiteStyles.map((style) => [style.id, style])
59616
- );
59483
+ init_personalities();
59617
59484
 
59618
- // ../theme-core/src/site-styles/designState.ts
59619
- import { z as z41 } from "zod";
59485
+ // ../theme-core/src/palette/variants/types.ts
59486
+ init_styleTags();
59487
+ import { z as z45 } from "zod";
59620
59488
 
59621
- // ../theme-core/src/site-styles/rawStyleFields.ts
59622
- var themeV2RuntimeStyleFieldNames = [
59623
- "_frameStyles",
59624
- "_sectionStyles",
59625
- "_containerStyles",
59626
- "_cardStyles",
59627
- // styleGroup is legacy runtime transition wiring rather than a nested
59628
- // override object, but normal editors should still never see it directly.
59629
- "styleGroup"
59630
- ];
59631
- var themeV2BlockSpecificRawStyleFieldNames = [
59632
- "_contentCardStyles",
59633
- "_textCardStyles"
59634
- ];
59635
- var themeV2NormalEditorRawStyleFieldNames = [
59636
- ...themeV2RuntimeStyleFieldNames,
59637
- ...themeV2BlockSpecificRawStyleFieldNames
59638
- ];
59639
- var themeV2NormalEditorRawStyleFieldNameSet = new Set(
59640
- themeV2NormalEditorRawStyleFieldNames
59641
- );
59489
+ // ../theme-core/src/schema.ts
59490
+ import { z as z44 } from "zod";
59642
59491
 
59643
- // ../theme-core/src/site-styles/designState.ts
59644
- var themeV2DesignStateSchemaVersion = 1;
59645
- var designResolutionPolicySchema = z41.enum(["generated", "user", "admin", "sdk"]);
59646
- var runtimeStyleFieldNameSchema = z41.enum(themeV2RuntimeStyleFieldNames);
59647
- var nonEmptyRuntimeStyleFieldNamesSchema = z41.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
59648
- fields3[0],
59649
- ...fields3.slice(1)
59650
- ]);
59651
- var heroLegibilityStrategySchema = z41.enum([
59652
- "none",
59653
- "scrim-gradient",
59654
- "solid-panel"
59655
- ]);
59656
- function uniqueNonEmpty(values) {
59657
- const uniqueValues = [...new Set(values)];
59658
- const firstValue = uniqueValues[0];
59659
- if (!firstValue) {
59660
- throw new Error("Expected at least one Theme V2 design state option.");
59661
- }
59662
- return [firstValue, ...uniqueValues.slice(1)];
59663
- }
59664
- var userPanelTreatments = uniqueNonEmpty(
59665
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
59666
- );
59667
- var userFlushTreatments = uniqueNonEmpty(
59668
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
59669
- );
59670
- var userFlushBleeds = uniqueNonEmpty(
59671
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
59672
- );
59673
- var contentFrameIntentSchema = z41.discriminatedUnion("kind", [
59674
- z41.object({ kind: z41.literal("plain") }).strict(),
59675
- z41.object({
59676
- kind: z41.literal("panel"),
59677
- treatment: z41.enum(userPanelTreatments)
59678
- }).strict(),
59679
- z41.object({
59680
- kind: z41.literal("flush-panel"),
59681
- treatment: z41.enum(userFlushTreatments),
59682
- bleed: z41.enum(userFlushBleeds)
59683
- }).strict()
59684
- ]);
59685
- var blockDesignPlanSchema = z41.object({
59686
- blockId: z41.string().min(1).transform(asDesignBlockId),
59687
- blockKind: z41.string().min(1),
59688
- purpose: z41.string().min(1),
59689
- sectionSurface: z41.enum(userDesignOptionCatalog.sectionSurfaces),
59690
- contentFrame: contentFrameIntentSchema,
59691
- itemSurface: z41.enum(userDesignOptionCatalog.itemSurfaces),
59692
- transitionAfter: z41.enum(userDesignOptionCatalog.transitions),
59693
- emphasis: z41.enum(userDesignOptionCatalog.emphases),
59694
- heroLegibility: heroLegibilityStrategySchema.optional()
59695
- }).strict();
59696
- var styleAuthoritySchema = z41.discriminatedUnion("kind", [
59697
- z41.object({
59698
- kind: z41.literal("theme-v2"),
59699
- source: designResolutionPolicySchema,
59700
- siteStyleId: z41.string().min(1).transform(asSiteStyleId),
59701
- templateId: z41.string().min(1).transform(asDesignSystemTemplateId),
59702
- templateVersion: z41.number().int().nonnegative(),
59703
- resolverVersion: z41.number().int().nonnegative()
59704
- }).strict(),
59705
- z41.object({
59706
- kind: z41.literal("legacy-raw"),
59707
- reason: z41.enum(["pre-theme-v2", "manual-runtime-fields"])
59708
- }).strict(),
59709
- z41.object({
59710
- kind: z41.literal("advanced-detached"),
59711
- reason: z41.literal("detached-custom-runtime-fields")
59712
- }).strict()
59713
- ]);
59714
- var blockRuntimeStyleAuthoritySchema = z41.object({
59715
- unit: z41.literal("block-runtime-fields"),
59716
- blockId: z41.string().min(1).transform(asDesignBlockId),
59717
- fields: nonEmptyRuntimeStyleFieldNamesSchema,
59718
- authority: styleAuthoritySchema
59719
- }).strict();
59720
- var persistedPageDesignStateV1Schema = z41.object({
59721
- schemaVersion: z41.literal(themeV2DesignStateSchemaVersion),
59722
- siteStyleId: z41.string().min(1).transform(asSiteStyleId),
59723
- templateId: z41.string().min(1).transform(asDesignSystemTemplateId),
59724
- templateVersion: z41.number().int().nonnegative(),
59725
- resolverVersion: z41.number().int().nonnegative(),
59726
- rhythmPresetId: z41.string().min(1),
59727
- blocks: z41.array(blockDesignPlanSchema),
59728
- styleAuthorities: z41.array(blockRuntimeStyleAuthoritySchema)
59729
- }).strict();
59492
+ // ../theme-core/src/lib/media.ts
59493
+ import z41 from "zod";
59494
+ var hotspotSchema2 = z41.object({
59495
+ x: z41.number().min(0).max(1),
59496
+ y: z41.number().min(0).max(1),
59497
+ radius: z41.number().optional()
59498
+ });
59499
+ var rotationSchema2 = z41.union([z41.literal(0), z41.literal(90), z41.literal(180), z41.literal(270)]);
59500
+ var rectSchema2 = z41.tuple([z41.number(), z41.number(), z41.number(), z41.number()]);
59501
+ var aspectCropSchema2 = z41.object({
59502
+ aspect: z41.preprocess((value) => value == null ? void 0 : value, z41.string().optional()),
59503
+ rect: z41.preprocess((value) => value == null ? void 0 : value, rectSchema2.optional()),
59504
+ hotspot: z41.preprocess((value) => value == null ? void 0 : value, hotspotSchema2.optional()),
59505
+ rotation: z41.preprocess((value) => value == null ? void 0 : value, rotationSchema2.optional())
59506
+ });
59507
+ var transformSchema2 = z41.object({
59508
+ aspectCrops: z41.preprocess((value) => {
59509
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
59510
+ return void 0;
59511
+ }
59512
+ return value;
59513
+ }, z41.record(z41.string(), aspectCropSchema2.catch({}))).optional(),
59514
+ rect: rectSchema2.optional(),
59515
+ hotspot: hotspotSchema2.optional(),
59516
+ rotation: rotationSchema2.optional()
59517
+ });
59518
+ var mediaSchema2 = z41.object({
59519
+ type: z41.enum(["image", "video", "audio", "document", "spreadsheet", "archive"]),
59520
+ purpose: z41.string().optional(),
59521
+ placeholder: z41.boolean().default(true).optional(),
59522
+ assetId: z41.string().optional(),
59523
+ identifier: z41.string().optional(),
59524
+ src: z41.string().optional(),
59525
+ alt: z41.string().optional(),
59526
+ filename: z41.string().optional(),
59527
+ mimeType: z41.string().optional(),
59528
+ width: z41.number().optional(),
59529
+ height: z41.number().optional(),
59530
+ storageBucket: z41.string().optional(),
59531
+ storagePath: z41.string().optional(),
59532
+ transform: transformSchema2.optional()
59533
+ });
59730
59534
 
59731
- // ../theme-core/src/site-styles/generatedSchemas.ts
59535
+ // ../theme-core/src/schema.ts
59536
+ init_buttons();
59537
+
59538
+ // ../theme-core/src/cards/types.ts
59732
59539
  import { z as z42 } from "zod";
59733
- function uniqueNonEmpty2(values) {
59734
- const uniqueValues = [...new Set(values)];
59735
- const firstValue = uniqueValues[0];
59736
- if (!firstValue) {
59737
- throw new Error("Expected at least one generated schema option.");
59738
- }
59739
- return [firstValue, ...uniqueValues.slice(1)];
59740
- }
59741
- var generatedPanelTreatments = uniqueNonEmpty2(
59742
- generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
59743
- );
59744
- var generatedFlushTreatments = uniqueNonEmpty2(
59745
- generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
59746
- );
59747
- var generatedFlushBleeds = uniqueNonEmpty2(
59748
- generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
59749
- );
59750
- var generatedPanelFrameSchema = z42.object({
59751
- kind: z42.literal("panel"),
59752
- treatment: z42.enum(generatedPanelTreatments)
59753
- }).strict();
59754
- var generatedFlushPanelFrameSchema = z42.object({
59755
- kind: z42.literal("flush-panel"),
59756
- treatment: z42.enum(generatedFlushTreatments),
59757
- bleed: z42.enum(generatedFlushBleeds)
59758
- }).strict();
59759
- var generatedContentFrameIntentSchema = z42.discriminatedUnion("kind", [
59760
- z42.object({ kind: z42.literal("plain") }).strict(),
59761
- generatedPanelFrameSchema,
59762
- generatedFlushPanelFrameSchema
59763
- ]);
59764
- var generatedSiteStyleIdSchema = z42.enum(curatedSiteStyleIdValues).transform(asSiteStyleId);
59765
- function generatedChoiceSchema(valueSchema) {
59766
- return z42.discriminatedUnion("kind", [
59767
- z42.object({
59768
- source: z42.literal("generated"),
59769
- kind: z42.literal("auto")
59770
- }).strict(),
59771
- z42.object({
59772
- source: z42.literal("generated"),
59773
- kind: z42.literal("explicit"),
59774
- value: valueSchema
59775
- }).strict()
59776
- ]);
59777
- }
59778
- var generatedBlockDesignIntentSchema = z42.object({
59779
- sectionSurface: generatedChoiceSchema(
59780
- z42.enum(generatedDesignOptionCatalog.sectionSurfaces)
59781
- ),
59782
- contentFrame: generatedChoiceSchema(generatedContentFrameIntentSchema),
59783
- itemSurface: generatedChoiceSchema(
59784
- z42.enum(generatedDesignOptionCatalog.itemSurfaces)
59785
- ),
59786
- transitionAfter: generatedChoiceSchema(
59787
- z42.enum(generatedDesignOptionCatalog.transitions)
59788
- ),
59789
- emphasis: generatedChoiceSchema(
59790
- z42.enum(generatedDesignOptionCatalog.emphases)
59791
- )
59792
- }).strict();
59793
- var generatedMediaCompositionIntentSchema = z42.enum([
59794
- "none",
59795
- "supporting",
59796
- "dominant"
59797
- ]);
59798
- var generatedDecorativeCompositionIntentSchema = z42.enum([
59799
- "none",
59800
- "supporting"
59801
- ]);
59802
- var generatedHeroLegibilityStrategySchema = z42.enum([
59803
- "none",
59804
- "scrim-gradient"
59540
+ var cardSpacingSchema = z42.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
59541
+ var gradientDirectionSchema2 = z42.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
59542
+ var cardBackgroundSchema = z42.discriminatedUnion("type", [
59543
+ z42.object({ type: z42.literal("solid"), colorToken: z42.string() }),
59544
+ z42.object({
59545
+ type: z42.literal("gradient"),
59546
+ fromToken: z42.string(),
59547
+ toToken: z42.string(),
59548
+ direction: gradientDirectionSchema2
59549
+ }),
59550
+ z42.object({ type: z42.literal("transparent") })
59805
59551
  ]);
59806
- var generatedBlockMediaIntentSchema = z42.object({
59807
- media: generatedMediaCompositionIntentSchema,
59808
- decorative: generatedDecorativeCompositionIntentSchema,
59809
- heroLegibility: generatedChoiceSchema(generatedHeroLegibilityStrategySchema)
59810
- }).strict();
59811
- var generatedBoundaryIntentSchema = z42.object({
59812
- transitionAfter: generatedChoiceSchema(
59813
- z42.enum(generatedDesignOptionCatalog.transitions)
59814
- )
59815
- }).strict();
59816
- var generatedPageDesignBlockIntentSchema = z42.object({
59817
- blockId: z42.string().min(1),
59818
- blockKind: z42.string().min(1),
59819
- purpose: z42.string().min(1),
59820
- design: generatedBlockDesignIntentSchema,
59821
- mediaIntent: generatedBlockMediaIntentSchema,
59822
- boundaryIntent: generatedBoundaryIntentSchema
59823
- }).strict();
59824
- var generatedPageDesignIntentSchema = z42.object({
59825
- siteStyleId: generatedSiteStyleIdSchema,
59826
- blocks: z42.array(generatedPageDesignBlockIntentSchema)
59827
- }).strict();
59552
+ var cardBorderSchema = z42.object({
59553
+ widthClass: z42.string(),
59554
+ colorToken: z42.string()
59555
+ });
59556
+ var cardVariantSchema2 = z42.object({
59557
+ id: z42.string(),
59558
+ name: z42.string().min(1).max(20),
59559
+ enabled: z42.boolean(),
59560
+ priority: z42.union([z42.literal(1), z42.literal(2), z42.literal(3)]),
59561
+ // Appearance (token-based)
59562
+ background: cardBackgroundSchema,
59563
+ spacing: cardSpacingSchema,
59564
+ // Optional overrides (uses theme defaults if not specified)
59565
+ shadow: z42.object({
59566
+ elevation: z42.enum(["none", "low", "medium", "high"]),
59567
+ softness: z42.enum(["crisp", "soft", "hard"]).nullable(),
59568
+ position: z42.enum(["bottom", "bottom-right"]).default("bottom")
59569
+ }).optional(),
59570
+ corners: z42.enum(["square", "soft", "rounded", "pill"]).optional(),
59571
+ // Border (optional)
59572
+ border: cardBorderSchema.optional()
59573
+ });
59574
+ var cardSystemSchema = z42.object({
59575
+ variants: z42.array(cardVariantSchema2).min(1).max(3)
59576
+ });
59828
59577
 
59829
- // ../theme-core/src/site-styles/pageDesignIntent.ts
59578
+ // ../theme-core/src/cards/index.ts
59579
+ init_constants2();
59580
+ init_generateCardCss();
59581
+ init_generateDefaultCardSystem();
59582
+
59583
+ // ../theme-core/src/schema.ts
59584
+ init_types5();
59585
+ init_types12();
59586
+
59587
+ // ../theme-core/src/gradients/types.ts
59830
59588
  import { z as z43 } from "zod";
59831
- var pageDesignIntentSchemaVersion = 1;
59832
- var pageDesignUserPinnedAppearanceChoiceSchema = z43.object({
59833
- kind: z43.literal("user-pinned"),
59834
- value: z43.string().min(1).transform(asAppearancePresetId)
59835
- }).strict();
59836
- var pageDesignUserPinnedBoundaryChoiceSchema = z43.object({
59837
- kind: z43.literal("user-pinned"),
59838
- value: z43.string().min(1).transform(asBoundaryOptionId)
59839
- }).strict();
59840
- var pageDesignBlockLookPinSchema = z43.object({
59841
- blockId: z43.string().min(1).transform(asDesignBlockId),
59842
- blockKind: z43.string().min(1),
59843
- choice: pageDesignUserPinnedAppearanceChoiceSchema
59844
- }).strict();
59845
- var pageDesignBoundaryPinSchema = z43.object({
59846
- boundaryId: z43.string().min(1).transform(asDesignBoundaryId),
59847
- previousBlockId: z43.string().min(1).transform(asDesignBlockId),
59848
- nextBlockId: z43.string().min(1).transform(asDesignBlockId),
59849
- choice: pageDesignUserPinnedBoundaryChoiceSchema
59850
- }).strict().superRefine((pin, ctx) => {
59851
- const expectedBoundaryId = makeBoundaryId(
59852
- pin.previousBlockId,
59853
- pin.nextBlockId
59854
- );
59855
- if (pin.boundaryId !== expectedBoundaryId) {
59856
- ctx.addIssue({
59857
- code: z43.ZodIssueCode.custom,
59858
- path: ["boundaryId"],
59859
- message: `Boundary id must match previousBlockId and nextBlockId. Expected ${expectedBoundaryId}.`
59860
- });
59861
- }
59862
- });
59863
- var pageDesignIntentV1Schema = z43.object({
59864
- schemaVersion: z43.literal(pageDesignIntentSchemaVersion),
59865
- siteStyleId: z43.string().min(1).transform(asSiteStyleId),
59866
- pageFlowPresetId: z43.string().min(1).transform(asPageFlowPresetId),
59867
- blockLookPins: z43.array(pageDesignBlockLookPinSchema),
59868
- boundaryPins: z43.array(pageDesignBoundaryPinSchema)
59869
- }).strict().superRefine((intent, ctx) => {
59870
- addDuplicateStringIssues(ctx, {
59871
- values: intent.blockLookPins.map((pin) => pin.blockId),
59872
- path: ["blockLookPins"],
59873
- label: "block Look pin"
59874
- });
59875
- addDuplicateStringIssues(ctx, {
59876
- values: intent.boundaryPins.map(
59877
- (pin) => boundaryKey(pin.previousBlockId, pin.nextBlockId)
59878
- ),
59879
- path: ["boundaryPins"],
59880
- label: "boundary pin"
59881
- });
59882
- });
59883
- function addDuplicateStringIssues(ctx, input) {
59884
- const seen = /* @__PURE__ */ new Set();
59885
- const duplicates = /* @__PURE__ */ new Set();
59886
- for (const value of input.values) {
59887
- if (seen.has(value)) {
59888
- duplicates.add(value);
59889
- }
59890
- seen.add(value);
59891
- }
59892
- for (const duplicate of duplicates) {
59893
- ctx.addIssue({
59894
- code: z43.ZodIssueCode.custom,
59895
- path: [...input.path],
59896
- message: `Duplicate ${input.label}: ${duplicate}.`
59897
- });
59898
- }
59899
- }
59900
- function boundaryKey(previousBlockId, nextBlockId) {
59901
- return makeBoundaryId(previousBlockId, nextBlockId);
59902
- }
59903
-
59904
- // ../theme-core/src/schema.ts
59905
- import { z as z47 } from "zod";
59906
-
59907
- // ../theme-core/src/lib/media.ts
59908
- import z44 from "zod";
59909
- var hotspotSchema2 = z44.object({
59910
- x: z44.number().min(0).max(1),
59911
- y: z44.number().min(0).max(1),
59912
- radius: z44.number().optional()
59913
- });
59914
- var rotationSchema2 = z44.union([z44.literal(0), z44.literal(90), z44.literal(180), z44.literal(270)]);
59915
- var rectSchema2 = z44.tuple([z44.number(), z44.number(), z44.number(), z44.number()]);
59916
- var aspectCropSchema2 = z44.object({
59917
- aspect: z44.preprocess((value) => value == null ? void 0 : value, z44.string().optional()),
59918
- rect: z44.preprocess((value) => value == null ? void 0 : value, rectSchema2.optional()),
59919
- hotspot: z44.preprocess((value) => value == null ? void 0 : value, hotspotSchema2.optional()),
59920
- rotation: z44.preprocess((value) => value == null ? void 0 : value, rotationSchema2.optional())
59921
- });
59922
- var transformSchema2 = z44.object({
59923
- aspectCrops: z44.preprocess((value) => {
59924
- if (!value || typeof value !== "object" || Array.isArray(value)) {
59925
- return void 0;
59926
- }
59927
- return value;
59928
- }, z44.record(z44.string(), aspectCropSchema2.catch({}))).optional(),
59929
- rect: rectSchema2.optional(),
59930
- hotspot: hotspotSchema2.optional(),
59931
- rotation: rotationSchema2.optional()
59932
- });
59933
- var mediaSchema2 = z44.object({
59934
- type: z44.enum(["image", "video", "audio", "document", "spreadsheet", "archive"]),
59935
- purpose: z44.string().optional(),
59936
- placeholder: z44.boolean().default(true).optional(),
59937
- assetId: z44.string().optional(),
59938
- identifier: z44.string().optional(),
59939
- src: z44.string().optional(),
59940
- alt: z44.string().optional(),
59941
- filename: z44.string().optional(),
59942
- mimeType: z44.string().optional(),
59943
- width: z44.number().optional(),
59944
- height: z44.number().optional(),
59945
- storageBucket: z44.string().optional(),
59946
- storagePath: z44.string().optional(),
59947
- transform: transformSchema2.optional()
59948
- });
59949
-
59950
- // ../theme-core/src/schema.ts
59951
- init_buttons();
59952
-
59953
- // ../theme-core/src/cards/types.ts
59954
- import { z as z45 } from "zod";
59955
- var cardSpacingSchema = z45.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
59956
- var gradientDirectionSchema2 = z45.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
59957
- var cardBackgroundSchema = z45.discriminatedUnion("type", [
59958
- z45.object({ type: z45.literal("solid"), colorToken: z45.string() }),
59959
- z45.object({
59960
- type: z45.literal("gradient"),
59961
- fromToken: z45.string(),
59962
- toToken: z45.string(),
59963
- direction: gradientDirectionSchema2
59964
- }),
59965
- z45.object({ type: z45.literal("transparent") })
59966
- ]);
59967
- var cardBorderSchema = z45.object({
59968
- widthClass: z45.string(),
59969
- colorToken: z45.string()
59970
- });
59971
- var cardVariantSchema2 = z45.object({
59972
- id: z45.string(),
59973
- name: z45.string().min(1).max(20),
59974
- enabled: z45.boolean(),
59975
- priority: z45.union([z45.literal(1), z45.literal(2), z45.literal(3)]),
59976
- // Appearance (token-based)
59977
- background: cardBackgroundSchema,
59978
- spacing: cardSpacingSchema,
59979
- // Optional overrides (uses theme defaults if not specified)
59980
- shadow: z45.object({
59981
- elevation: z45.enum(["none", "low", "medium", "high"]),
59982
- softness: z45.enum(["crisp", "soft", "hard"]).nullable(),
59983
- position: z45.enum(["bottom", "bottom-right"]).default("bottom")
59984
- }).optional(),
59985
- corners: z45.enum(["square", "soft", "rounded", "pill"]).optional(),
59986
- // Border (optional)
59987
- border: cardBorderSchema.optional()
59988
- });
59989
- var cardSystemSchema = z45.object({
59990
- variants: z45.array(cardVariantSchema2).min(1).max(3)
59991
- });
59992
-
59993
- // ../theme-core/src/cards/index.ts
59994
- init_constants2();
59995
- init_generateCardCss();
59996
- init_generateDefaultCardSystem();
59997
-
59998
- // ../theme-core/src/schema.ts
59999
- init_types5();
60000
- init_types12();
60001
-
60002
- // ../theme-core/src/gradients/types.ts
60003
- import { z as z46 } from "zod";
60004
- var gradientStopSchema = z46.object({
60005
- color: z46.string(),
59589
+ var gradientStopSchema = z43.object({
59590
+ color: z43.string(),
60006
59591
  // Theme color token name (e.g., 'primary-500')
60007
- position: z46.number().min(0).max(100)
59592
+ position: z43.number().min(0).max(100)
60008
59593
  // Percentage 0-100
60009
59594
  });
60010
- var gradientConfigSchema = z46.object({
60011
- type: z46.enum(["linear", "radial"]),
60012
- angle: z46.number().min(0).max(360).optional(),
59595
+ var gradientConfigSchema = z43.object({
59596
+ type: z43.enum(["linear", "radial"]),
59597
+ angle: z43.number().min(0).max(360).optional(),
60013
59598
  // For linear gradients (degrees)
60014
- position: z46.string().optional(),
59599
+ position: z43.string().optional(),
60015
59600
  // For radial gradients ('center', 'top left', etc.)
60016
- stops: z46.array(gradientStopSchema).min(2)
59601
+ stops: z43.array(gradientStopSchema).min(2)
60017
59602
  });
60018
59603
 
60019
59604
  // ../theme-core/src/schema.ts
@@ -60021,65 +59606,65 @@ init_types13();
60021
59606
  init_validation3();
60022
59607
  init_atRuleValidation();
60023
59608
  init_shared7();
60024
- var axesSchema = z47.object({
60025
- tone: z47.enum(["minimal", "classic", "bold"]),
60026
- energy: z47.enum(["calm", "vibrant"]),
60027
- density: z47.enum(["airy", "regular", "compact"]),
60028
- mediaBias: z47.enum(["text", "media", "mixed"]),
60029
- conversionBias: z47.enum(["low", "med", "high"]),
60030
- motion: z47.enum(["subtle", "standard", "expressive"])
60031
- });
60032
- var colourHexString = z47.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
60033
- var paletteColorSchema = z47.object({
60034
- name: z47.string().min(1),
59609
+ var axesSchema = z44.object({
59610
+ tone: z44.enum(["minimal", "classic", "bold"]),
59611
+ energy: z44.enum(["calm", "vibrant"]),
59612
+ density: z44.enum(["airy", "regular", "compact"]),
59613
+ mediaBias: z44.enum(["text", "media", "mixed"]),
59614
+ conversionBias: z44.enum(["low", "med", "high"]),
59615
+ motion: z44.enum(["subtle", "standard", "expressive"])
59616
+ });
59617
+ var colourHexString = z44.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
59618
+ var paletteColorSchema = z44.object({
59619
+ name: z44.string().min(1),
60035
59620
  hex: colourHexString
60036
59621
  });
60037
- var paletteMetaSchema = z47.object({
60038
- mode: z47.enum(["light", "dark"])
59622
+ var paletteMetaSchema = z44.object({
59623
+ mode: z44.enum(["light", "dark"])
60039
59624
  });
60040
- var paletteSchema = z47.object({
60041
- colors: z47.array(paletteColorSchema),
59625
+ var paletteSchema = z44.object({
59626
+ colors: z44.array(paletteColorSchema),
60042
59627
  meta: paletteMetaSchema
60043
59628
  });
60044
- var typographyStyleSchema = z47.object({
60045
- family: z47.string().min(1),
60046
- weight: z47.enum(["light", "regular", "medium", "semibold", "bold"]),
60047
- letterSpacing: z47.enum(["tight", "normal", "loose"]),
60048
- lineHeight: z47.enum(["normal", "relaxed", "loose"])
59629
+ var typographyStyleSchema = z44.object({
59630
+ family: z44.string().min(1),
59631
+ weight: z44.enum(["light", "regular", "medium", "semibold", "bold"]),
59632
+ letterSpacing: z44.enum(["tight", "normal", "loose"]),
59633
+ lineHeight: z44.enum(["normal", "relaxed", "loose"])
60049
59634
  });
60050
59635
  var bodyTypographyStyleSchema = typographyStyleSchema.extend({
60051
- size: z47.enum(["md", "lg", "xl"])
59636
+ size: z44.enum(["md", "lg", "xl"])
60052
59637
  });
60053
- var headingSizeSchema = z47.enum(["xs", "sm", "md", "lg", "xl", "2xl"]);
60054
- var headingTypographyOverridesSchema = z47.object({
60055
- weight: z47.enum(["light", "regular", "medium", "semibold", "bold"]).nullable().optional(),
60056
- letterSpacing: z47.enum(["tight", "normal", "loose"]).nullable().optional(),
59638
+ var headingSizeSchema = z44.enum(["xs", "sm", "md", "lg", "xl", "2xl"]);
59639
+ var headingTypographyOverridesSchema = z44.object({
59640
+ weight: z44.enum(["light", "regular", "medium", "semibold", "bold"]).nullable().optional(),
59641
+ letterSpacing: z44.enum(["tight", "normal", "loose"]).nullable().optional(),
60057
59642
  size: headingSizeSchema.nullable().optional(),
60058
- lineHeight: z47.enum(["normal", "relaxed", "loose"]).nullable().optional(),
60059
- italic: z47.boolean().nullable().optional(),
60060
- colorToken: z47.string().min(1).nullable().optional()
59643
+ lineHeight: z44.enum(["normal", "relaxed", "loose"]).nullable().optional(),
59644
+ italic: z44.boolean().nullable().optional(),
59645
+ colorToken: z44.string().min(1).nullable().optional()
60061
59646
  // Palette token name for heading color
60062
59647
  });
60063
59648
  var headingTypographyStyleSchema = typographyStyleSchema.extend({
60064
- case: z47.enum(["uppercase", "normal", "smallCaps"]).nullable(),
60065
- italic: z47.boolean().nullable(),
60066
- colorToken: z47.string().min(1).nullable().optional()
59649
+ case: z44.enum(["uppercase", "normal", "smallCaps"]).nullable(),
59650
+ italic: z44.boolean().nullable(),
59651
+ colorToken: z44.string().min(1).nullable().optional()
60067
59652
  // Palette token name for heading color
60068
59653
  });
60069
- var proseLinkUnderlineStyleSchema = z47.enum(["solid", "dotted", "dashed"]);
60070
- var proseLinkUnderlineThicknessSchema = z47.enum(["auto", "fromFont", "thin", "medium", "thick"]);
60071
- var proseLinkUnderlineOffsetSchema = z47.enum(["auto", "tight", "normal", "loose"]);
60072
- var proseLinkStyleSchema = z47.object({
60073
- colorToken: z47.string().min(1).optional(),
60074
- hoverColorToken: z47.string().min(1).optional(),
60075
- underline: z47.boolean().optional(),
60076
- decorationColorToken: z47.string().min(1).optional(),
60077
- hoverDecorationColorToken: z47.string().min(1).optional(),
59654
+ var proseLinkUnderlineStyleSchema = z44.enum(["solid", "dotted", "dashed"]);
59655
+ var proseLinkUnderlineThicknessSchema = z44.enum(["auto", "fromFont", "thin", "medium", "thick"]);
59656
+ var proseLinkUnderlineOffsetSchema = z44.enum(["auto", "tight", "normal", "loose"]);
59657
+ var proseLinkStyleSchema = z44.object({
59658
+ colorToken: z44.string().min(1).optional(),
59659
+ hoverColorToken: z44.string().min(1).optional(),
59660
+ underline: z44.boolean().optional(),
59661
+ decorationColorToken: z44.string().min(1).optional(),
59662
+ hoverDecorationColorToken: z44.string().min(1).optional(),
60078
59663
  underlineStyle: proseLinkUnderlineStyleSchema.optional(),
60079
59664
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
60080
59665
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
60081
59666
  });
60082
- var semanticSpacingSchema = z47.enum([
59667
+ var semanticSpacingSchema = z44.enum([
60083
59668
  "none",
60084
59669
  "compact",
60085
59670
  "cozy",
@@ -60087,62 +59672,62 @@ var semanticSpacingSchema = z47.enum([
60087
59672
  "comfortable",
60088
59673
  "spacious"
60089
59674
  ]);
60090
- var boxRoundedSchema = z47.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
60091
- var boxBackgroundOverlaySchema = z47.object({
60092
- type: z47.enum(["none", "color", "gradient"]).nullable().optional(),
60093
- color: z47.string().nullable().optional(),
60094
- gradient: z47.string().nullable().optional(),
60095
- opacity: z47.number().min(0).max(1).nullable().optional()
60096
- });
60097
- var boxBackgroundSchema = z47.object({
60098
- type: z47.enum(["color", "gradient", "image"]).optional(),
60099
- color: z47.string().nullable().optional(),
60100
- gradient: z47.string().nullable().optional(),
59675
+ var boxRoundedSchema = z44.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
59676
+ var boxBackgroundOverlaySchema = z44.object({
59677
+ type: z44.enum(["none", "color", "gradient"]).nullable().optional(),
59678
+ color: z44.string().nullable().optional(),
59679
+ gradient: z44.string().nullable().optional(),
59680
+ opacity: z44.number().min(0).max(1).nullable().optional()
59681
+ });
59682
+ var boxBackgroundSchema = z44.object({
59683
+ type: z44.enum(["color", "gradient", "image"]).optional(),
59684
+ color: z44.string().nullable().optional(),
59685
+ gradient: z44.string().nullable().optional(),
60101
59686
  image: mediaSchema2.nullable().optional(),
60102
- objectFit: z47.enum(["fill", "fit", "original", "custom"]).nullable().optional(),
60103
- scale: z47.string().nullable().optional(),
60104
- position: z47.string().nullable().optional(),
60105
- opacity: z47.number().min(0).max(1).nullable().optional(),
59687
+ objectFit: z44.enum(["fill", "fit", "original", "custom"]).nullable().optional(),
59688
+ scale: z44.string().nullable().optional(),
59689
+ position: z44.string().nullable().optional(),
59690
+ opacity: z44.number().min(0).max(1).nullable().optional(),
60106
59691
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
60107
- textColor: z47.string().nullable().optional(),
60108
- headingColor: z47.string().nullable().optional()
59692
+ textColor: z44.string().nullable().optional(),
59693
+ headingColor: z44.string().nullable().optional()
60109
59694
  });
60110
- var sectionStylesOverrideSchema = z47.object({
59695
+ var sectionStylesOverrideSchema = z44.object({
60111
59696
  background: boxBackgroundSchema.nullable().optional(),
60112
59697
  spacing: semanticSpacingSchema.nullable().optional(),
60113
- minHeight: z47.enum(["none", "hero", "immersive"]).nullable().optional()
59698
+ minHeight: z44.enum(["none", "hero", "immersive"]).nullable().optional()
60114
59699
  });
60115
- var containerStylesOverrideSchema = z47.object({
59700
+ var containerStylesOverrideSchema = z44.object({
60116
59701
  background: boxBackgroundSchema.nullable().optional(),
60117
59702
  spacing: semanticSpacingSchema.nullable().optional(),
60118
- raised: z47.boolean().nullable().optional(),
59703
+ raised: z44.boolean().nullable().optional(),
60119
59704
  rounded: boxRoundedSchema.nullable().optional(),
60120
- fullWidth: z47.boolean().nullable().optional()
59705
+ fullWidth: z44.boolean().nullable().optional()
60121
59706
  });
60122
- var cardBorderOverrideSchema = z47.object({
60123
- enabled: z47.boolean().nullable().optional(),
60124
- width: z47.enum(["none", "1", "2", "3"]).nullable().optional(),
60125
- colorToken: z47.string().nullable().optional()
59707
+ var cardBorderOverrideSchema = z44.object({
59708
+ enabled: z44.boolean().nullable().optional(),
59709
+ width: z44.enum(["none", "1", "2", "3"]).nullable().optional(),
59710
+ colorToken: z44.string().nullable().optional()
60126
59711
  });
60127
- var cardStylesOverrideSchema = z47.object({
59712
+ var cardStylesOverrideSchema = z44.object({
60128
59713
  background: boxBackgroundSchema.nullable().optional(),
60129
59714
  border: cardBorderOverrideSchema.nullable().optional(),
60130
59715
  spacing: semanticSpacingSchema.nullable().optional(),
60131
- raised: z47.boolean().nullable().optional(),
59716
+ raised: z44.boolean().nullable().optional(),
60132
59717
  rounded: boxRoundedSchema.nullable().optional()
60133
59718
  });
60134
- var blockStyleOverridesSchema = z47.object({
59719
+ var blockStyleOverridesSchema = z44.object({
60135
59720
  sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
60136
59721
  containerStyles: containerStylesOverrideSchema.nullable().optional(),
60137
59722
  cardStyles: cardStylesOverrideSchema.nullable().optional()
60138
59723
  });
60139
- var blockThemeOverrideSchema = z47.object({
60140
- typography: z47.object({
59724
+ var blockThemeOverrideSchema = z44.object({
59725
+ typography: z44.object({
60141
59726
  proseLinkStyle: proseLinkStyleSchema.optional()
60142
59727
  }).optional(),
60143
59728
  styles: blockStyleOverridesSchema.optional()
60144
59729
  });
60145
- var typographyScaleSchema = z47.enum([
59730
+ var typographyScaleSchema = z44.enum([
60146
59731
  // New intuitive names
60147
59732
  "compact",
60148
59733
  // ratio 1.2 (was minorThird)
@@ -60155,9 +59740,9 @@ var typographyScaleSchema = z47.enum([
60155
59740
  "majorThird",
60156
59741
  "perfectFourth"
60157
59742
  ]);
60158
- var typographySchema = z47.object({
59743
+ var typographySchema = z44.object({
60159
59744
  body: bodyTypographyStyleSchema,
60160
- headings: z47.object({
59745
+ headings: z44.object({
60161
59746
  default: headingTypographyStyleSchema,
60162
59747
  h1: headingTypographyOverridesSchema,
60163
59748
  h2: headingTypographyOverridesSchema,
@@ -60170,41 +59755,41 @@ var typographySchema = z47.object({
60170
59755
  scale: typographyScaleSchema,
60171
59756
  proseLinkStyle: proseLinkStyleSchema.optional()
60172
59757
  });
60173
- var spaceSchema = z47.enum(["comfortable", "standard", "dense"]);
60174
- var corners = z47.enum(["square", "soft", "rounded", "pill"]);
60175
- var shadow = z47.object({
60176
- elevation: z47.enum(["none", "low", "medium", "high"]),
60177
- softness: z47.enum(["crisp", "soft", "hard"]).nullable(),
60178
- position: z47.enum(["bottom", "bottom-right"]).default("bottom")
59758
+ var spaceSchema = z44.enum(["comfortable", "standard", "dense"]);
59759
+ var corners = z44.enum(["square", "soft", "rounded", "pill"]);
59760
+ var shadow = z44.object({
59761
+ elevation: z44.enum(["none", "low", "medium", "high"]),
59762
+ softness: z44.enum(["crisp", "soft", "hard"]).nullable(),
59763
+ position: z44.enum(["bottom", "bottom-right"]).default("bottom")
60179
59764
  });
60180
- var border = z47.object({
60181
- width: z47.enum(["none", "hairline", "thin", "thick"]),
60182
- style: z47.enum(["solid", "dashed"])
59765
+ var border = z44.object({
59766
+ width: z44.enum(["none", "hairline", "thin", "thick"]),
59767
+ style: z44.enum(["solid", "dashed"])
60183
59768
  });
60184
- var motion = z47.object({
60185
- level: z47.enum(["off", "low", "medium", "high"]),
60186
- easing: z47.enum(["standard", "snappy", "gentle"]).nullable()
59769
+ var motion = z44.object({
59770
+ level: z44.enum(["off", "low", "medium", "high"]),
59771
+ easing: z44.enum(["standard", "snappy", "gentle"]).nullable()
60187
59772
  });
60188
- var buttonStyle = z47.object({
59773
+ var buttonStyle = z44.object({
60189
59774
  shape: corners
60190
59775
  // Used for --radius-control CSS variable
60191
59776
  });
60192
- var cardStyle = z47.object({
60193
- elevation: z47.enum(["none", "low", "medium", "high"]),
60194
- border: z47.enum(["none", "subtle", "defined"]),
59777
+ var cardStyle = z44.object({
59778
+ elevation: z44.enum(["none", "low", "medium", "high"]),
59779
+ border: z44.enum(["none", "subtle", "defined"]),
60195
59780
  shape: corners,
60196
- headerStyle: z47.enum(["plain", "accentBar", "subtleBg"]).nullable(),
60197
- mediaTreatment: z47.enum(["square", "rounded", "bleed"]).nullable()
59781
+ headerStyle: z44.enum(["plain", "accentBar", "subtleBg"]).nullable(),
59782
+ mediaTreatment: z44.enum(["square", "rounded", "bleed"]).nullable()
60198
59783
  });
60199
- var inputStyle = z47.object({
59784
+ var inputStyle = z44.object({
60200
59785
  shape: corners,
60201
- border: z47.enum(["subtle", "defined", "underline"]),
60202
- focus: z47.enum(["glow", "ring", "underline"]),
60203
- label: z47.enum(["inside", "above"])
59786
+ border: z44.enum(["subtle", "defined", "underline"]),
59787
+ focus: z44.enum(["glow", "ring", "underline"]),
59788
+ label: z44.enum(["inside", "above"])
60204
59789
  });
60205
- var headerVariant = z47.enum(["classic", "centered", "transparent", "floating", "editorial"]);
60206
- var headerPositioning = z47.enum(["static", "sticky", "fixed"]);
60207
- var headerNavStyle = z47.enum([
59790
+ var headerVariant = z44.enum(["classic", "centered", "transparent", "floating", "editorial"]);
59791
+ var headerPositioning = z44.enum(["static", "sticky", "fixed"]);
59792
+ var headerNavStyle = z44.enum([
60208
59793
  "minimal",
60209
59794
  "underline",
60210
59795
  "underline-grow",
@@ -60213,82 +59798,82 @@ var headerNavStyle = z47.enum([
60213
59798
  "frosted",
60214
59799
  "solid"
60215
59800
  ]);
60216
- var navFontWeight = z47.enum(["regular", "medium", "semibold", "bold"]);
60217
- var headerMaxWidth = z47.enum(["container", "full"]);
60218
- var headerContainerSchema = z47.object({
60219
- rounded: z47.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("xl"),
60220
- border: z47.boolean().default(true),
60221
- shadow: z47.boolean().default(true),
60222
- padding: z47.enum(["sm", "md", "lg"]).default("md"),
60223
- tint: z47.string().nullable().optional(),
60224
- opacity: z47.number().min(0).max(1).default(0.12)
59801
+ var navFontWeight = z44.enum(["regular", "medium", "semibold", "bold"]);
59802
+ var headerMaxWidth = z44.enum(["container", "full"]);
59803
+ var headerContainerSchema = z44.object({
59804
+ rounded: z44.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("xl"),
59805
+ border: z44.boolean().default(true),
59806
+ shadow: z44.boolean().default(true),
59807
+ padding: z44.enum(["sm", "md", "lg"]).default("md"),
59808
+ tint: z44.string().nullable().optional(),
59809
+ opacity: z44.number().min(0).max(1).default(0.12)
60225
59810
  }).optional();
60226
59811
  var headerBorderSchema = componentBorderSchema.extend({
60227
- position: z47.enum(["bottom", "top", "both", "none"]).default("bottom")
59812
+ position: z44.enum(["bottom", "top", "both", "none"]).default("bottom")
60228
59813
  }).optional();
60229
- var logoStyleSchema = z47.object({
60230
- fontFamily: z47.enum(["heading", "body"]).default("heading"),
60231
- letterSpacing: z47.enum(["normal", "wide", "wider", "widest"]).default("normal"),
60232
- gradient: z47.boolean().default(false)
59814
+ var logoStyleSchema = z44.object({
59815
+ fontFamily: z44.enum(["heading", "body"]).default("heading"),
59816
+ letterSpacing: z44.enum(["normal", "wide", "wider", "widest"]).default("normal"),
59817
+ gradient: z44.boolean().default(false)
60233
59818
  }).optional();
60234
- var headerLogoTextSchema = z47.object({
60235
- mobileWrapLines: z47.union([z47.literal(1), z47.literal(2)]).optional(),
60236
- mobileMaxWidth: z47.enum(["xs", "sm", "md"]).optional(),
60237
- hideOnShrink: z47.boolean().optional()
59819
+ var headerLogoTextSchema = z44.object({
59820
+ mobileWrapLines: z44.union([z44.literal(1), z44.literal(2)]).optional(),
59821
+ mobileMaxWidth: z44.enum(["xs", "sm", "md"]).optional(),
59822
+ hideOnShrink: z44.boolean().optional()
60238
59823
  }).optional();
60239
- var navEffectsSchema = z47.object({
60240
- underlineGradient: z47.boolean().default(false),
60241
- glow: z47.boolean().default(false),
60242
- glowColor: z47.string().optional(),
60243
- neumorphic: z47.boolean().default(false)
59824
+ var navEffectsSchema = z44.object({
59825
+ underlineGradient: z44.boolean().default(false),
59826
+ glow: z44.boolean().default(false),
59827
+ glowColor: z44.string().optional(),
59828
+ neumorphic: z44.boolean().default(false)
60244
59829
  }).optional();
60245
- var dropdownStyleSchema = z47.object({
59830
+ var dropdownStyleSchema = z44.object({
60246
59831
  // Container styling
60247
- background: z47.string().default("surface"),
59832
+ background: z44.string().default("surface"),
60248
59833
  // color token
60249
- textColor: z47.string().default("text"),
59834
+ textColor: z44.string().default("text"),
60250
59835
  // color token
60251
- borderColor: z47.string().nullable().default("border"),
59836
+ borderColor: z44.string().nullable().default("border"),
60252
59837
  // null = no border
60253
- shadow: z47.enum(["none", "sm", "md", "lg"]).default("md"),
60254
- borderRadius: z47.enum(["none", "sm", "md", "lg"]).default("md"),
59838
+ shadow: z44.enum(["none", "sm", "md", "lg"]).default("md"),
59839
+ borderRadius: z44.enum(["none", "sm", "md", "lg"]).default("md"),
60255
59840
  // Link hover states (explicit control)
60256
- hoverBackground: z47.string().nullable().optional(),
59841
+ hoverBackground: z44.string().nullable().optional(),
60257
59842
  // color token, null = transparent
60258
- hoverTextColor: z47.string().nullable().optional(),
59843
+ hoverTextColor: z44.string().nullable().optional(),
60259
59844
  // color token, null = inherit
60260
59845
  // Typography
60261
- textTransform: z47.enum(["none", "uppercase", "capitalize"]).default("none"),
60262
- letterSpacing: z47.enum(["normal", "wide", "wider"]).default("normal"),
60263
- fontWeight: z47.enum(["regular", "medium", "semibold", "bold"]).optional(),
59846
+ textTransform: z44.enum(["none", "uppercase", "capitalize"]).default("none"),
59847
+ letterSpacing: z44.enum(["normal", "wide", "wider"]).default("normal"),
59848
+ fontWeight: z44.enum(["regular", "medium", "semibold", "bold"]).optional(),
60264
59849
  // optional = inherit from navWeight
60265
- textSize: z47.enum(["xs", "sm", "base", "lg"]).optional()
59850
+ textSize: z44.enum(["xs", "sm", "base", "lg"]).optional()
60266
59851
  // optional = no override (browser default)
60267
59852
  }).optional();
60268
- var headerCtaGapSchema = z47.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
60269
- var navContainerSchema = z47.object({
60270
- type: z47.enum(["none", "pill", "glass"]).default("none"),
60271
- tint: z47.string().nullable().optional(),
60272
- opacity: z47.number().min(0).max(1).default(0.15)
59853
+ var headerCtaGapSchema = z44.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
59854
+ var navContainerSchema = z44.object({
59855
+ type: z44.enum(["none", "pill", "glass"]).default("none"),
59856
+ tint: z44.string().nullable().optional(),
59857
+ opacity: z44.number().min(0).max(1).default(0.15)
60273
59858
  }).default({ type: "none", tint: null, opacity: 0.15 });
60274
- var headerBackgroundSchema = z47.object({
60275
- type: z47.enum(["color", "gradient", "image"]),
60276
- color: z47.string().nullable().optional(),
59859
+ var headerBackgroundSchema = z44.object({
59860
+ type: z44.enum(["color", "gradient", "image"]),
59861
+ color: z44.string().nullable().optional(),
60277
59862
  gradient: gradientConfigSchema.nullable().optional(),
60278
59863
  image: mediaSchema2.nullable().optional(),
60279
- textColor: z47.string().nullable().optional()
59864
+ textColor: z44.string().nullable().optional()
60280
59865
  });
60281
- var headerSchema = z47.object({
59866
+ var headerSchema = z44.object({
60282
59867
  variant: headerVariant,
60283
59868
  positioning: headerPositioning,
60284
- shrinkOnScroll: z47.boolean(),
59869
+ shrinkOnScroll: z44.boolean(),
60285
59870
  maxWidth: headerMaxWidth,
60286
59871
  logoOverride: mediaSchema2.nullable().optional(),
60287
59872
  background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
60288
- textColor: z47.string().nullable().optional(),
59873
+ textColor: z44.string().nullable().optional(),
60289
59874
  // Site title and general header text
60290
59875
  navStyle: headerNavStyle,
60291
- navColor: z47.string().nullable().optional(),
59876
+ navColor: z44.string().nullable().optional(),
60292
59877
  // Nav links (inherits textColor if not set)
60293
59878
  navWeight: navFontWeight.default("medium"),
60294
59879
  // New fields for header system enhancement
@@ -60307,50 +59892,50 @@ var headerSchema = z47.object({
60307
59892
  // Dropdown menu styling (nav dropdowns and mobile drawer)
60308
59893
  dropdownStyle: dropdownStyleSchema
60309
59894
  });
60310
- var footerVariant = z47.enum(["simple", "columns", "split"]);
60311
- var footerMaxWidth = z47.enum(["container", "full"]);
60312
- var footerMode = z47.enum(["default", "blocks", "default+blocks", "none"]);
60313
- var footerNavLayoutMode = z47.enum(["stack", "inline", "inline-wrap"]);
60314
- var footerNavLayoutAlign = z47.enum(["start", "center", "end", "space-between"]);
60315
- var footerSpacing = z47.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
60316
- var footerLogoPlacement = z47.enum(["left", "right", "above", "below"]);
60317
- var footerLogoSize = z47.enum(["sm", "md", "lg", "xl"]);
60318
- var footerLogoMaxHeight = z47.enum(["sm", "md", "lg", "xl"]);
60319
- var footerBottomTextLinkStyleSchema = z47.object({
60320
- colorToken: z47.string().optional(),
60321
- hoverColorToken: z47.string().nullable().optional(),
60322
- decorationColorToken: z47.string().nullable().optional(),
60323
- underline: z47.boolean().optional()
60324
- });
60325
- var footerBottomBarSchema = z47.object({
60326
- enabled: z47.boolean().optional(),
60327
- fullBleed: z47.boolean().optional(),
59895
+ var footerVariant = z44.enum(["simple", "columns", "split"]);
59896
+ var footerMaxWidth = z44.enum(["container", "full"]);
59897
+ var footerMode = z44.enum(["default", "blocks", "default+blocks", "none"]);
59898
+ var footerNavLayoutMode = z44.enum(["stack", "inline", "inline-wrap"]);
59899
+ var footerNavLayoutAlign = z44.enum(["start", "center", "end", "space-between"]);
59900
+ var footerSpacing = z44.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
59901
+ var footerLogoPlacement = z44.enum(["left", "right", "above", "below"]);
59902
+ var footerLogoSize = z44.enum(["sm", "md", "lg", "xl"]);
59903
+ var footerLogoMaxHeight = z44.enum(["sm", "md", "lg", "xl"]);
59904
+ var footerBottomTextLinkStyleSchema = z44.object({
59905
+ colorToken: z44.string().optional(),
59906
+ hoverColorToken: z44.string().nullable().optional(),
59907
+ decorationColorToken: z44.string().nullable().optional(),
59908
+ underline: z44.boolean().optional()
59909
+ });
59910
+ var footerBottomBarSchema = z44.object({
59911
+ enabled: z44.boolean().optional(),
59912
+ fullBleed: z44.boolean().optional(),
60328
59913
  background: headerBackgroundSchema.optional(),
60329
- textColor: z47.string().nullable().optional(),
60330
- textAlign: z47.enum(["left", "center", "right"]).optional(),
59914
+ textColor: z44.string().nullable().optional(),
59915
+ textAlign: z44.enum(["left", "center", "right"]).optional(),
60331
59916
  paddingY: footerSpacing.optional(),
60332
59917
  paddingX: footerSpacing.optional(),
60333
- borderTop: z47.object({
60334
- colorToken: z47.string().nullable().optional(),
60335
- width: z47.enum(["none", "thin", "medium", "thick"]).optional()
59918
+ borderTop: z44.object({
59919
+ colorToken: z44.string().nullable().optional(),
59920
+ width: z44.enum(["none", "thin", "medium", "thick"]).optional()
60336
59921
  }).optional()
60337
59922
  });
60338
- var footerNavLayoutSchema = z47.object({
59923
+ var footerNavLayoutSchema = z44.object({
60339
59924
  layout: footerNavLayoutMode.optional(),
60340
59925
  align: footerNavLayoutAlign.optional(),
60341
59926
  gapX: footerSpacing.optional(),
60342
59927
  gapY: footerSpacing.optional(),
60343
- columns: z47.number().int().min(1).max(6).optional()
59928
+ columns: z44.number().int().min(1).max(6).optional()
60344
59929
  });
60345
- var footerLogoSchema = z47.object({
60346
- showLogo: z47.boolean().default(true),
60347
- showLogoText: z47.boolean().optional(),
59930
+ var footerLogoSchema = z44.object({
59931
+ showLogo: z44.boolean().default(true),
59932
+ showLogoText: z44.boolean().optional(),
60348
59933
  placement: footerLogoPlacement.optional(),
60349
59934
  size: footerLogoSize.optional(),
60350
59935
  maxHeight: footerLogoMaxHeight.optional(),
60351
- align: z47.enum(["start", "center", "end"]).optional()
59936
+ align: z44.enum(["start", "center", "end"]).optional()
60352
59937
  });
60353
- var footerSchema = z47.object({
59938
+ var footerSchema = z44.object({
60354
59939
  /**
60355
59940
  * SDK-only footer rendering mode.
60356
59941
  *
@@ -60359,11 +59944,11 @@ var footerSchema = z47.object({
60359
59944
  mode: footerMode.optional(),
60360
59945
  variant: footerVariant,
60361
59946
  maxWidth: footerMaxWidth,
60362
- showLogoText: z47.boolean().optional(),
59947
+ showLogoText: z44.boolean().optional(),
60363
59948
  background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
60364
59949
  // Footer nav styling (independent from header)
60365
59950
  navStyle: headerNavStyle.default("minimal"),
60366
- navColor: z47.string().nullable().optional(),
59951
+ navColor: z44.string().nullable().optional(),
60367
59952
  navWeight: navFontWeight.default("medium"),
60368
59953
  // Full nav link customization (overrides navStyle if set)
60369
59954
  navLinkStyle: navLinkStyleSchema.optional(),
@@ -60374,15 +59959,15 @@ var footerSchema = z47.object({
60374
59959
  logo: footerLogoSchema.optional(),
60375
59960
  bottomBar: footerBottomBarSchema.optional()
60376
59961
  });
60377
- var containerPaddingPresetSchema = z47.enum(["tight", "compact", "default", "relaxed"]);
60378
- var layoutSchema = z47.object({
60379
- containerPadding: z47.object({
59962
+ var containerPaddingPresetSchema = z44.enum(["tight", "compact", "default", "relaxed"]);
59963
+ var layoutSchema = z44.object({
59964
+ containerPadding: z44.object({
60380
59965
  mobile: containerPaddingPresetSchema.optional(),
60381
59966
  tablet: containerPaddingPresetSchema.optional(),
60382
59967
  desktop: containerPaddingPresetSchema.optional()
60383
59968
  }).optional()
60384
59969
  }).optional();
60385
- var heroTypographySizeSchema = z47.enum([
59970
+ var heroTypographySizeSchema = z44.enum([
60386
59971
  "sm",
60387
59972
  "base",
60388
59973
  "lg",
@@ -60393,14 +59978,14 @@ var heroTypographySizeSchema = z47.enum([
60393
59978
  "5xl",
60394
59979
  "6xl"
60395
59980
  ]);
60396
- var heroTypographyLineHeightSchema = z47.enum(["tight", "snug", "normal", "relaxed"]);
60397
- var heroResponsiveTypographySchema = z47.object({
59981
+ var heroTypographyLineHeightSchema = z44.enum(["tight", "snug", "normal", "relaxed"]);
59982
+ var heroResponsiveTypographySchema = z44.object({
60398
59983
  headlineSize: heroTypographySizeSchema.optional(),
60399
59984
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
60400
59985
  subheadlineSize: heroTypographySizeSchema.optional(),
60401
59986
  subheadlineLineHeight: heroTypographyLineHeightSchema.optional()
60402
59987
  });
60403
- var heroTypographySchema = z47.object({
59988
+ var heroTypographySchema = z44.object({
60404
59989
  headlineSize: heroTypographySizeSchema.optional(),
60405
59990
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
60406
59991
  subheadlineSize: heroTypographySizeSchema.optional(),
@@ -60409,24 +59994,24 @@ var heroTypographySchema = z47.object({
60409
59994
  microHeadlineLineHeight: heroTypographyLineHeightSchema.optional(),
60410
59995
  microSubheadlineSize: heroTypographySizeSchema.optional(),
60411
59996
  microSubheadlineLineHeight: heroTypographyLineHeightSchema.optional(),
60412
- responsive: z47.object({
59997
+ responsive: z44.object({
60413
59998
  tablet: heroResponsiveTypographySchema.optional(),
60414
59999
  mobile: heroResponsiveTypographySchema.optional()
60415
60000
  }).optional()
60416
60001
  });
60417
- var heroSchema = z47.object({
60002
+ var heroSchema = z44.object({
60418
60003
  typography: heroTypographySchema.optional()
60419
60004
  }).optional();
60420
- var gradientsSchema = z47.object({
60421
- button: z47.string().min(1).nullable().optional(),
60422
- hero: z47.string().min(1).nullable().optional(),
60423
- background: z47.string().min(1).nullable().optional()
60424
- });
60425
- var themeSchema = z47.object({
60426
- name: z47.string().min(1).max(30),
60427
- description: z47.string().min(1).max(400),
60428
- rationale: z47.string().min(1).max(400),
60429
- siteStyleId: z47.string().min(1).transform((value) => asSiteStyleId(value)).optional(),
60005
+ var gradientsSchema = z44.object({
60006
+ button: z44.string().min(1).nullable().optional(),
60007
+ hero: z44.string().min(1).nullable().optional(),
60008
+ background: z44.string().min(1).nullable().optional()
60009
+ });
60010
+ var themeSchema = z44.object({
60011
+ name: z44.string().min(1).max(30),
60012
+ description: z44.string().min(1).max(400),
60013
+ rationale: z44.string().min(1).max(400),
60014
+ siteStyleId: z44.string().min(1).transform((value) => asSiteStyleId(value)).optional(),
60430
60015
  axes: axesSchema,
60431
60016
  palette: paletteSchema,
60432
60017
  typography: typographySchema,
@@ -60453,16 +60038,16 @@ var themeSchema = z47.object({
60453
60038
  // Block-specific customization (Tier 3)
60454
60039
  // blockCustomVars: Per-block CSS variable overrides as bare values
60455
60040
  // Example: { "event-registration": { "--step-color": "#6d28d9" } }
60456
- blockCustomVars: z47.record(
60457
- z47.string(),
60041
+ blockCustomVars: z44.record(
60042
+ z44.string(),
60458
60043
  // block kind (matches data-block attribute)
60459
- z47.record(z47.string(), z47.string())
60044
+ z44.record(z44.string(), z44.string())
60460
60045
  // { '--var-name': 'value' }
60461
60046
  ).optional(),
60462
60047
  // Structured block-kind theme overrides (v1: typography prose-link style only)
60463
60048
  // Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
60464
- blockOverrides: z47.record(
60465
- z47.string(),
60049
+ blockOverrides: z44.record(
60050
+ z44.string(),
60466
60051
  blockThemeOverrideSchema
60467
60052
  ).optional(),
60468
60053
  // Structured custom CSS rules
@@ -60498,130 +60083,21 @@ var themeSchema = z47.object({
60498
60083
  * }
60499
60084
  * ```
60500
60085
  */
60501
- styleGroups: z47.record(z47.string(), z47.array(z47.string())).optional()
60086
+ styleGroups: z44.record(z44.string(), z44.array(z44.string())).optional()
60502
60087
  });
60503
- var themesTurnSchema = z47.object({
60504
- message: z47.string().min(1),
60505
- themes: z47.array(themeSchema).length(3)
60088
+ var themesTurnSchema = z44.object({
60089
+ message: z44.string().min(1),
60090
+ themes: z44.array(themeSchema).length(3)
60506
60091
  });
60507
60092
 
60508
- // ../theme-core/src/mock-themes/modern-minimal.ts
60509
- var modernMinimalTheme = {
60510
- name: "Modern Minimal",
60511
- description: "Clean, monochromatic design with subtle styling and modern typography",
60512
- rationale: "Perfect for professional services, portfolios, and content-focused sites that need a clean, trustworthy appearance",
60513
- axes: {
60514
- tone: "minimal",
60515
- energy: "calm",
60516
- density: "airy",
60517
- mediaBias: "text",
60518
- conversionBias: "low",
60519
- motion: "subtle"
60520
- },
60521
- palette: {
60522
- colors: [
60523
- { name: "primary", hex: "#1f2937" },
60524
- { name: "secondary", hex: "#6b7280" },
60525
- { name: "accent", hex: "#3b82f6" },
60526
- { name: "success", hex: "#10b981" },
60527
- { name: "warning", hex: "#f59e0b" },
60528
- { name: "destructive", hex: "#ef4444" },
60529
- { name: "background", hex: "#ffffff" },
60530
- { name: "surface", hex: "#ffffff" },
60531
- { name: "text", hex: "#1f2937" },
60532
- { name: "border", hex: "#e5e7eb" }
60533
- ],
60534
- meta: { mode: "light" }
60535
- },
60536
- typography: {
60537
- headings: {
60538
- default: {
60539
- family: "Inter, system-ui, sans-serif",
60540
- weight: "medium",
60541
- letterSpacing: "tight",
60542
- lineHeight: "normal",
60543
- case: "normal",
60544
- italic: null
60545
- },
60546
- h1: {
60547
- weight: "semibold",
60548
- letterSpacing: "tight",
60549
- size: "xl",
60550
- lineHeight: "normal",
60551
- italic: null
60552
- },
60553
- h2: {
60554
- weight: "medium",
60555
- letterSpacing: "normal",
60556
- size: "lg",
60557
- lineHeight: "normal",
60558
- italic: null
60559
- },
60560
- h3: {
60561
- weight: "medium",
60562
- letterSpacing: "normal",
60563
- size: "md",
60564
- lineHeight: "normal",
60565
- italic: null
60566
- }
60567
- },
60568
- body: {
60569
- family: "Inter, system-ui, sans-serif",
60570
- weight: "regular",
60571
- size: "md",
60572
- letterSpacing: "normal",
60573
- lineHeight: "relaxed"
60574
- },
60575
- scale: "minorThird"
60576
- },
60577
- space: "comfortable",
60578
- corners: "rounded",
60579
- border: {
60580
- width: "hairline",
60581
- style: "solid"
60582
- },
60583
- shadow: {
60584
- elevation: "low",
60585
- softness: "soft",
60586
- position: "bottom"
60587
- },
60588
- motion: {
60589
- level: "low",
60590
- easing: "standard"
60591
- },
60592
- header: {
60593
- variant: "classic",
60594
- positioning: "static",
60595
- shrinkOnScroll: false,
60596
- maxWidth: "container",
60597
- logoOverride: null,
60598
- background: { type: "color", color: "surface" },
60599
- navStyle: "minimal",
60600
- navWeight: "medium",
60601
- navContainer: { type: "none", opacity: 0, tint: null }
60602
- },
60603
- footer: {
60604
- variant: "simple",
60605
- maxWidth: "container",
60606
- background: { type: "color", color: "surface" },
60607
- navStyle: "minimal",
60608
- navWeight: "medium"
60609
- }
60610
- };
60611
-
60612
- // ../theme-core/src/site-styles/runtimeCompiler.ts
60613
- init_personalities();
60614
-
60615
60093
  // ../theme-core/src/palette/variants/types.ts
60616
- init_compatibility();
60617
- import { z as z48 } from "zod";
60618
60094
  function asPaletteVariantId(value) {
60619
60095
  if (value.length === 0) {
60620
60096
  throw new Error("PaletteVariantId must be a non-empty string");
60621
60097
  }
60622
60098
  return value;
60623
60099
  }
60624
- var paletteVariantIdSchema = z48.string().min(1).transform((value) => asPaletteVariantId(value));
60100
+ var paletteVariantIdSchema = z45.string().min(1).transform((value) => asPaletteVariantId(value));
60625
60101
  var PALETTE_TOKEN_NAMES = [
60626
60102
  "primary",
60627
60103
  "primaryForeground",
@@ -60637,19 +60113,19 @@ var PALETTE_TOKEN_NAMES = [
60637
60113
  "text",
60638
60114
  "border"
60639
60115
  ];
60640
- var paletteTokenNameSchema = z48.enum(PALETTE_TOKEN_NAMES);
60116
+ var paletteTokenNameSchema = z45.enum(PALETTE_TOKEN_NAMES);
60641
60117
  var HEX_COLOR_REGEX = /^#[0-9a-f]{6}$/;
60642
- var hexColorSchema = z48.string().regex(HEX_COLOR_REGEX, "Hex must be #RRGGBB (lowercase)").transform((value) => value);
60118
+ var hexColorSchema = z45.string().regex(HEX_COLOR_REGEX, "Hex must be #RRGGBB (lowercase)").transform((value) => value);
60643
60119
  var variantPaletteColorSchema = paletteColorSchema.extend({
60644
60120
  name: paletteTokenNameSchema
60645
60121
  });
60646
- var paletteVariantSchema = z48.object({
60122
+ var paletteVariantSchema = z45.object({
60647
60123
  id: paletteVariantIdSchema,
60648
- name: z48.string().min(1),
60649
- description: z48.string().min(1),
60124
+ name: z45.string().min(1),
60125
+ description: z45.string().min(1),
60650
60126
  tags: styleTagsSchema,
60651
- mode: z48.enum(["light", "dark"]),
60652
- colors: z48.array(variantPaletteColorSchema).min(1)
60127
+ mode: z45.enum(["light", "dark"]),
60128
+ colors: z45.array(variantPaletteColorSchema).min(1)
60653
60129
  });
60654
60130
  function definePaletteVariant(input) {
60655
60131
  return {
@@ -60661,7 +60137,7 @@ function definePaletteVariant(input) {
60661
60137
  colors: input.colors
60662
60138
  };
60663
60139
  }
60664
- var paletteOverridesSchema = z48.object({
60140
+ var paletteOverridesSchema = z45.object({
60665
60141
  primary: hexColorSchema.optional(),
60666
60142
  primaryForeground: hexColorSchema.optional(),
60667
60143
  secondary: hexColorSchema.optional(),
@@ -60972,7 +60448,763 @@ var paletteVariantsById = new Map(
60972
60448
  paletteVariants.map((v) => [v.id, v])
60973
60449
  );
60974
60450
 
60451
+ // ../theme-core/src/site-styles/sourceCatalogs.ts
60452
+ var generatedContentFrames = [
60453
+ plainFrame,
60454
+ panelFrame("inset"),
60455
+ panelFrame("raised"),
60456
+ flushPanelFrame({ bleed: "start" })
60457
+ ];
60458
+ var userContentFrames = [
60459
+ ...generatedContentFrames,
60460
+ panelFrame("editorial"),
60461
+ flushPanelFrame({ bleed: "end" }),
60462
+ flushPanelFrame({ bleed: "both" })
60463
+ ];
60464
+ var generatedDesignOptionCatalog = {
60465
+ source: "generated",
60466
+ sectionSurfaces: ["base", "muted-band", "accent-band", "hero-image"],
60467
+ contentFrames: generatedContentFrames,
60468
+ itemSurfaces: ["none", "default", "flat", "outlined", "raised"],
60469
+ transitions: ["none", "soft-fade-short", "soft-fade-long"],
60470
+ emphases: ["low", "medium", "high"],
60471
+ detachedCustom: false
60472
+ };
60473
+ var userDesignOptionCatalog = {
60474
+ source: "user",
60475
+ sectionSurfaces: generatedDesignOptionCatalog.sectionSurfaces,
60476
+ contentFrames: userContentFrames,
60477
+ itemSurfaces: [
60478
+ ...generatedDesignOptionCatalog.itemSurfaces,
60479
+ "inset",
60480
+ "editorial"
60481
+ ],
60482
+ transitions: [
60483
+ ...generatedDesignOptionCatalog.transitions,
60484
+ "wave-edge",
60485
+ "angle-edge"
60486
+ ],
60487
+ emphases: generatedDesignOptionCatalog.emphases,
60488
+ detachedCustom: false
60489
+ };
60490
+ var advancedDesignOptionCatalog = {
60491
+ source: "advanced",
60492
+ sectionSurfaces: userDesignOptionCatalog.sectionSurfaces,
60493
+ contentFrames: userDesignOptionCatalog.contentFrames,
60494
+ itemSurfaces: userDesignOptionCatalog.itemSurfaces,
60495
+ transitions: userDesignOptionCatalog.transitions,
60496
+ emphases: userDesignOptionCatalog.emphases,
60497
+ detachedCustom: true
60498
+ };
60499
+
60500
+ // ../theme-core/src/site-styles/curatedSiteStyles.ts
60501
+ var curatedSiteStyleIdValues = [
60502
+ "site-style:calm-studio",
60503
+ "site-style:clear-professional",
60504
+ "site-style:warm-editorial",
60505
+ "site-style:bright-community",
60506
+ "site-style:quiet-luxury",
60507
+ "site-style:practical-services",
60508
+ "site-style:modern-wellness",
60509
+ "site-style:bold-launch"
60510
+ ];
60511
+ var quietBudget = {
60512
+ accentDensity: "low",
60513
+ panelDensity: "medium",
60514
+ transitionMix: "quiet",
60515
+ primaryCtaLimit: 2,
60516
+ mediaDensity: "medium",
60517
+ decorativeRepetition: "low"
60518
+ };
60519
+ var balancedBudget = {
60520
+ accentDensity: "medium",
60521
+ panelDensity: "medium",
60522
+ transitionMix: "balanced",
60523
+ primaryCtaLimit: 3,
60524
+ mediaDensity: "medium",
60525
+ decorativeRepetition: "medium"
60526
+ };
60527
+ var expressiveBudget = {
60528
+ accentDensity: "high",
60529
+ panelDensity: "high",
60530
+ transitionMix: "expressive",
60531
+ primaryCtaLimit: 3,
60532
+ mediaDensity: "high",
60533
+ decorativeRepetition: "medium"
60534
+ };
60535
+ function uniqueContentFrameKinds() {
60536
+ const kinds = [...new Set(
60537
+ generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
60538
+ )];
60539
+ const firstKind = kinds[0];
60540
+ if (!firstKind) {
60541
+ throw new Error("Expected generated design option catalog to expose at least one content frame kind.");
60542
+ }
60543
+ return [firstKind, ...kinds.slice(1)];
60544
+ }
60545
+ var generatedContentFrameKinds = uniqueContentFrameKinds();
60546
+ function defineCuratedSiteStyle(input) {
60547
+ return {
60548
+ id: asSiteStyleId(input.id),
60549
+ name: input.name,
60550
+ description: input.description,
60551
+ generationBrief: input.generationBrief,
60552
+ selectionKeywords: input.selectionKeywords ?? [],
60553
+ template: {
60554
+ id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
60555
+ name: input.name,
60556
+ version: 1,
60557
+ tokenRecipes: input.tokenRecipes,
60558
+ compositionBudget: input.compositionBudget,
60559
+ supportedSectionSurfaces: generatedDesignOptionCatalog.sectionSurfaces,
60560
+ supportedContentFrames: generatedContentFrameKinds,
60561
+ supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
60562
+ supportedTransitions: generatedDesignOptionCatalog.transitions
60563
+ },
60564
+ buttonPersonalityChoices: input.buttonPersonalityChoices,
60565
+ paletteVariantChoices: input.paletteVariantChoices
60566
+ };
60567
+ }
60568
+ function buttonChoice(id, note) {
60569
+ return note ? { id: asButtonPersonalityId(id), note } : { id: asButtonPersonalityId(id) };
60570
+ }
60571
+ function paletteChoice(id, note) {
60572
+ return note ? { id: asPaletteVariantId(id), note } : { id: asPaletteVariantId(id) };
60573
+ }
60574
+ var curatedSiteStyles = [
60575
+ defineCuratedSiteStyle({
60576
+ id: "site-style:calm-studio",
60577
+ name: "Calm Studio",
60578
+ description: "Soft, measured, and spacious for intimate appointment or class businesses.",
60579
+ generationBrief: "Use calm pacing, concise copy, generous breathing room, and natural imagery. Keep calls to action steady rather than urgent.",
60580
+ tokenRecipes: {
60581
+ palette: "soft-natural",
60582
+ contrast: "standard",
60583
+ radius: "soft",
60584
+ shadow: "subtle",
60585
+ typography: "friendly-sans",
60586
+ spacing: "airy",
60587
+ motion: "subtle"
60588
+ },
60589
+ compositionBudget: quietBudget,
60590
+ buttonPersonalityChoices: [
60591
+ buttonChoice("soft-pill"),
60592
+ buttonChoice("pebble"),
60593
+ buttonChoice("editorial-link"),
60594
+ buttonChoice("brushed-wash")
60595
+ ],
60596
+ paletteVariantChoices: [
60597
+ paletteChoice("soft-natural-sage"),
60598
+ paletteChoice("soft-natural-stone"),
60599
+ paletteChoice("warm-neutral-clay"),
60600
+ paletteChoice("soft-natural-watercolor")
60601
+ ]
60602
+ }),
60603
+ defineCuratedSiteStyle({
60604
+ id: "site-style:clear-professional",
60605
+ name: "Clear Professional",
60606
+ description: "Crisp, trustworthy, and direct for local services and consultancies.",
60607
+ generationBrief: "Prioritize clarity, proof, service detail, and easy next steps. Keep visuals polished and specific, with restrained decorative treatment.",
60608
+ tokenRecipes: {
60609
+ palette: "brand-led",
60610
+ contrast: "strong",
60611
+ radius: "soft",
60612
+ shadow: "subtle",
60613
+ typography: "clean-sans",
60614
+ spacing: "regular",
60615
+ motion: "subtle"
60616
+ },
60617
+ compositionBudget: balancedBudget,
60618
+ buttonPersonalityChoices: [
60619
+ buttonChoice("confident-chip"),
60620
+ buttonChoice("soft-pill"),
60621
+ buttonChoice("editorial-link")
60622
+ ],
60623
+ paletteVariantChoices: [
60624
+ paletteChoice("brand-led-cool"),
60625
+ paletteChoice("high-contrast-ink"),
60626
+ paletteChoice("brand-led-jewel")
60627
+ ]
60628
+ }),
60629
+ defineCuratedSiteStyle({
60630
+ id: "site-style:warm-editorial",
60631
+ name: "Warm Editorial",
60632
+ description: "Story-led and textured for educators, makers, venues, and retreats.",
60633
+ generationBrief: "Let the copy feel thoughtful and grounded. Favor narrative sections, supporting media, and a small number of editorial panels.",
60634
+ tokenRecipes: {
60635
+ palette: "warm-neutral",
60636
+ contrast: "standard",
60637
+ radius: "square",
60638
+ shadow: "none",
60639
+ typography: "serif-editorial",
60640
+ spacing: "airy",
60641
+ motion: "subtle"
60642
+ },
60643
+ compositionBudget: balancedBudget,
60644
+ buttonPersonalityChoices: [
60645
+ buttonChoice("editorial-link"),
60646
+ buttonChoice("soft-pill"),
60647
+ buttonChoice("brushed-wash")
60648
+ ],
60649
+ paletteVariantChoices: [
60650
+ paletteChoice("warm-neutral-cream"),
60651
+ paletteChoice("warm-neutral-clay"),
60652
+ paletteChoice("warm-neutral-forest"),
60653
+ paletteChoice("soft-natural-stone")
60654
+ ]
60655
+ }),
60656
+ defineCuratedSiteStyle({
60657
+ id: "site-style:bright-community",
60658
+ name: "Bright Community",
60659
+ description: "Friendly, welcoming, and active for groups, classes, and neighborhood offers.",
60660
+ generationBrief: "Use welcoming language, clear event or booking routes, and optimistic imagery. Let accents appear, but avoid noisy decoration.",
60661
+ tokenRecipes: {
60662
+ palette: "brand-led",
60663
+ contrast: "standard",
60664
+ radius: "rounded",
60665
+ shadow: "subtle",
60666
+ typography: "friendly-sans",
60667
+ spacing: "regular",
60668
+ motion: "expressive"
60669
+ },
60670
+ compositionBudget: balancedBudget,
60671
+ buttonPersonalityChoices: [
60672
+ buttonChoice("pebble"),
60673
+ buttonChoice("brushed-wash"),
60674
+ buttonChoice("confident-chip")
60675
+ ],
60676
+ paletteVariantChoices: [
60677
+ paletteChoice("brand-led-warm"),
60678
+ paletteChoice("brand-led-jewel"),
60679
+ paletteChoice("soft-natural-watercolor")
60680
+ ]
60681
+ }),
60682
+ defineCuratedSiteStyle({
60683
+ id: "site-style:quiet-luxury",
60684
+ name: "Quiet Luxury",
60685
+ description: "Minimal, confident, and refined for premium experiences and private services.",
60686
+ generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
60687
+ selectionKeywords: [
60688
+ "luxury",
60689
+ "premium",
60690
+ "boutique",
60691
+ "bespoke",
60692
+ "exclusive"
60693
+ ],
60694
+ tokenRecipes: {
60695
+ palette: "high-contrast",
60696
+ contrast: "strong",
60697
+ radius: "square",
60698
+ shadow: "none",
60699
+ typography: "classic-serif",
60700
+ spacing: "airy",
60701
+ motion: "none"
60702
+ },
60703
+ compositionBudget: quietBudget,
60704
+ buttonPersonalityChoices: [
60705
+ buttonChoice("editorial-link"),
60706
+ buttonChoice("confident-chip"),
60707
+ buttonChoice("soft-pill")
60708
+ ],
60709
+ paletteVariantChoices: [
60710
+ paletteChoice("high-contrast-charcoal"),
60711
+ paletteChoice("high-contrast-ink"),
60712
+ paletteChoice("warm-neutral-cream")
60713
+ ]
60714
+ }),
60715
+ defineCuratedSiteStyle({
60716
+ id: "site-style:practical-services",
60717
+ name: "Practical Services",
60718
+ description: "Efficient, plainspoken, and conversion-focused for trades and everyday services.",
60719
+ generationBrief: "Make services, location, trust signals, and contact paths obvious. Keep copy brief and avoid ornate visual treatments.",
60720
+ selectionKeywords: [
60721
+ "repair",
60722
+ "plumb",
60723
+ "electric",
60724
+ "cleaning",
60725
+ "landscap",
60726
+ "contractor"
60727
+ ],
60728
+ tokenRecipes: {
60729
+ palette: "brand-led",
60730
+ contrast: "maximum",
60731
+ radius: "soft",
60732
+ shadow: "subtle",
60733
+ typography: "clean-sans",
60734
+ spacing: "compact",
60735
+ motion: "none"
60736
+ },
60737
+ compositionBudget: quietBudget,
60738
+ buttonPersonalityChoices: [
60739
+ buttonChoice("confident-chip"),
60740
+ buttonChoice("pebble"),
60741
+ buttonChoice("ink-stamp")
60742
+ ],
60743
+ paletteVariantChoices: [
60744
+ paletteChoice("brand-led-cool"),
60745
+ paletteChoice("high-contrast-ink"),
60746
+ paletteChoice("brand-led-warm")
60747
+ ]
60748
+ }),
60749
+ defineCuratedSiteStyle({
60750
+ id: "site-style:modern-wellness",
60751
+ name: "Modern Wellness",
60752
+ description: "Natural, current, and reassuring for practitioners, studios, and wellbeing offers.",
60753
+ generationBrief: "Keep the tone warm and practical. Use gentle section variation, natural materials, and inclusive copy without making medical claims.",
60754
+ tokenRecipes: {
60755
+ palette: "soft-natural",
60756
+ contrast: "standard",
60757
+ radius: "rounded",
60758
+ shadow: "subtle",
60759
+ typography: "clean-sans",
60760
+ spacing: "airy",
60761
+ motion: "subtle"
60762
+ },
60763
+ compositionBudget: balancedBudget,
60764
+ buttonPersonalityChoices: [
60765
+ buttonChoice("soft-pill"),
60766
+ buttonChoice("pebble"),
60767
+ buttonChoice("confident-chip")
60768
+ ],
60769
+ paletteVariantChoices: [
60770
+ paletteChoice("soft-natural-sage"),
60771
+ paletteChoice("soft-natural-stone"),
60772
+ paletteChoice("warm-neutral-forest")
60773
+ ]
60774
+ }),
60775
+ defineCuratedSiteStyle({
60776
+ id: "site-style:bold-launch",
60777
+ name: "Bold Launch",
60778
+ description: "High-energy and punchy for launches, campaigns, and creative offers.",
60779
+ generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
60780
+ selectionKeywords: [
60781
+ "launch",
60782
+ "campaign",
60783
+ "preorder",
60784
+ "pre-order",
60785
+ "waitlist",
60786
+ "drop"
60787
+ ],
60788
+ tokenRecipes: {
60789
+ palette: "high-contrast",
60790
+ contrast: "maximum",
60791
+ radius: "pill",
60792
+ shadow: "layered",
60793
+ typography: "clean-sans",
60794
+ spacing: "regular",
60795
+ motion: "expressive"
60796
+ },
60797
+ compositionBudget: expressiveBudget,
60798
+ buttonPersonalityChoices: [
60799
+ buttonChoice("ink-stamp"),
60800
+ buttonChoice("confident-chip"),
60801
+ buttonChoice("brushed-wash"),
60802
+ buttonChoice("pebble")
60803
+ ],
60804
+ paletteVariantChoices: [
60805
+ paletteChoice("high-contrast-monochrome"),
60806
+ paletteChoice("high-contrast-ink"),
60807
+ paletteChoice("brand-led-jewel"),
60808
+ paletteChoice("brand-led-warm")
60809
+ ]
60810
+ })
60811
+ ];
60812
+ var curatedSiteStylesById = new Map(
60813
+ curatedSiteStyles.map((style) => [style.id, style])
60814
+ );
60815
+
60816
+ // ../theme-core/src/site-styles/designState.ts
60817
+ import { z as z46 } from "zod";
60818
+
60819
+ // ../theme-core/src/site-styles/rawStyleFields.ts
60820
+ var themeV2RuntimeStyleFieldNames = [
60821
+ "_frameStyles",
60822
+ "_sectionStyles",
60823
+ "_containerStyles",
60824
+ "_cardStyles",
60825
+ // styleGroup is legacy runtime transition wiring rather than a nested
60826
+ // override object, but normal editors should still never see it directly.
60827
+ "styleGroup"
60828
+ ];
60829
+ var themeV2BlockSpecificRawStyleFieldNames = [
60830
+ "_contentCardStyles",
60831
+ "_textCardStyles"
60832
+ ];
60833
+ var themeV2NormalEditorRawStyleFieldNames = [
60834
+ ...themeV2RuntimeStyleFieldNames,
60835
+ ...themeV2BlockSpecificRawStyleFieldNames
60836
+ ];
60837
+ var themeV2NormalEditorRawStyleFieldNameSet = new Set(
60838
+ themeV2NormalEditorRawStyleFieldNames
60839
+ );
60840
+
60841
+ // ../theme-core/src/site-styles/designState.ts
60842
+ var themeV2DesignStateSchemaVersion = 1;
60843
+ var designResolutionPolicySchema = z46.enum(["generated", "user", "admin", "sdk"]);
60844
+ var runtimeStyleFieldNameSchema = z46.enum(themeV2RuntimeStyleFieldNames);
60845
+ var nonEmptyRuntimeStyleFieldNamesSchema = z46.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
60846
+ fields3[0],
60847
+ ...fields3.slice(1)
60848
+ ]);
60849
+ var heroLegibilityStrategySchema = z46.enum([
60850
+ "none",
60851
+ "scrim-gradient",
60852
+ "solid-panel"
60853
+ ]);
60854
+ function uniqueNonEmpty(values) {
60855
+ const uniqueValues = [...new Set(values)];
60856
+ const firstValue = uniqueValues[0];
60857
+ if (!firstValue) {
60858
+ throw new Error("Expected at least one Theme V2 design state option.");
60859
+ }
60860
+ return [firstValue, ...uniqueValues.slice(1)];
60861
+ }
60862
+ var userPanelTreatments = uniqueNonEmpty(
60863
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
60864
+ );
60865
+ var userFlushTreatments = uniqueNonEmpty(
60866
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
60867
+ );
60868
+ var userFlushBleeds = uniqueNonEmpty(
60869
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
60870
+ );
60871
+ var contentFrameIntentSchema = z46.discriminatedUnion("kind", [
60872
+ z46.object({ kind: z46.literal("plain") }).strict(),
60873
+ z46.object({
60874
+ kind: z46.literal("panel"),
60875
+ treatment: z46.enum(userPanelTreatments)
60876
+ }).strict(),
60877
+ z46.object({
60878
+ kind: z46.literal("flush-panel"),
60879
+ treatment: z46.enum(userFlushTreatments),
60880
+ bleed: z46.enum(userFlushBleeds)
60881
+ }).strict()
60882
+ ]);
60883
+ var blockDesignPlanSchema = z46.object({
60884
+ blockId: z46.string().min(1).transform(asDesignBlockId),
60885
+ blockKind: z46.string().min(1),
60886
+ purpose: z46.string().min(1),
60887
+ sectionSurface: z46.enum(userDesignOptionCatalog.sectionSurfaces),
60888
+ contentFrame: contentFrameIntentSchema,
60889
+ itemSurface: z46.enum(userDesignOptionCatalog.itemSurfaces),
60890
+ transitionAfter: z46.enum(userDesignOptionCatalog.transitions),
60891
+ emphasis: z46.enum(userDesignOptionCatalog.emphases),
60892
+ heroLegibility: heroLegibilityStrategySchema.optional()
60893
+ }).strict();
60894
+ var styleAuthoritySchema = z46.discriminatedUnion("kind", [
60895
+ z46.object({
60896
+ kind: z46.literal("theme-v2"),
60897
+ source: designResolutionPolicySchema,
60898
+ siteStyleId: z46.string().min(1).transform(asSiteStyleId),
60899
+ templateId: z46.string().min(1).transform(asDesignSystemTemplateId),
60900
+ templateVersion: z46.number().int().nonnegative(),
60901
+ resolverVersion: z46.number().int().nonnegative()
60902
+ }).strict(),
60903
+ z46.object({
60904
+ kind: z46.literal("legacy-raw"),
60905
+ reason: z46.enum(["pre-theme-v2", "manual-runtime-fields"])
60906
+ }).strict(),
60907
+ z46.object({
60908
+ kind: z46.literal("advanced-detached"),
60909
+ reason: z46.literal("detached-custom-runtime-fields")
60910
+ }).strict()
60911
+ ]);
60912
+ var blockRuntimeStyleAuthoritySchema = z46.object({
60913
+ unit: z46.literal("block-runtime-fields"),
60914
+ blockId: z46.string().min(1).transform(asDesignBlockId),
60915
+ fields: nonEmptyRuntimeStyleFieldNamesSchema,
60916
+ authority: styleAuthoritySchema
60917
+ }).strict();
60918
+ var persistedPageDesignStateV1Schema = z46.object({
60919
+ schemaVersion: z46.literal(themeV2DesignStateSchemaVersion),
60920
+ siteStyleId: z46.string().min(1).transform(asSiteStyleId),
60921
+ templateId: z46.string().min(1).transform(asDesignSystemTemplateId),
60922
+ templateVersion: z46.number().int().nonnegative(),
60923
+ resolverVersion: z46.number().int().nonnegative(),
60924
+ rhythmPresetId: z46.string().min(1),
60925
+ blocks: z46.array(blockDesignPlanSchema),
60926
+ styleAuthorities: z46.array(blockRuntimeStyleAuthoritySchema)
60927
+ }).strict();
60928
+
60929
+ // ../theme-core/src/site-styles/generatedSchemas.ts
60930
+ import { z as z47 } from "zod";
60931
+ function uniqueNonEmpty2(values) {
60932
+ const uniqueValues = [...new Set(values)];
60933
+ const firstValue = uniqueValues[0];
60934
+ if (!firstValue) {
60935
+ throw new Error("Expected at least one generated schema option.");
60936
+ }
60937
+ return [firstValue, ...uniqueValues.slice(1)];
60938
+ }
60939
+ var generatedPanelTreatments = uniqueNonEmpty2(
60940
+ generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
60941
+ );
60942
+ var generatedFlushTreatments = uniqueNonEmpty2(
60943
+ generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
60944
+ );
60945
+ var generatedFlushBleeds = uniqueNonEmpty2(
60946
+ generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
60947
+ );
60948
+ var generatedPanelFrameSchema = z47.object({
60949
+ kind: z47.literal("panel"),
60950
+ treatment: z47.enum(generatedPanelTreatments)
60951
+ }).strict();
60952
+ var generatedFlushPanelFrameSchema = z47.object({
60953
+ kind: z47.literal("flush-panel"),
60954
+ treatment: z47.enum(generatedFlushTreatments),
60955
+ bleed: z47.enum(generatedFlushBleeds)
60956
+ }).strict();
60957
+ var generatedContentFrameIntentSchema = z47.discriminatedUnion("kind", [
60958
+ z47.object({ kind: z47.literal("plain") }).strict(),
60959
+ generatedPanelFrameSchema,
60960
+ generatedFlushPanelFrameSchema
60961
+ ]);
60962
+ var generatedSiteStyleIdSchema = z47.enum(curatedSiteStyleIdValues).transform(asSiteStyleId);
60963
+ function generatedChoiceSchema(valueSchema) {
60964
+ return z47.discriminatedUnion("kind", [
60965
+ z47.object({
60966
+ source: z47.literal("generated"),
60967
+ kind: z47.literal("auto")
60968
+ }).strict(),
60969
+ z47.object({
60970
+ source: z47.literal("generated"),
60971
+ kind: z47.literal("explicit"),
60972
+ value: valueSchema
60973
+ }).strict()
60974
+ ]);
60975
+ }
60976
+ var generatedBlockDesignIntentSchema = z47.object({
60977
+ sectionSurface: generatedChoiceSchema(
60978
+ z47.enum(generatedDesignOptionCatalog.sectionSurfaces)
60979
+ ),
60980
+ contentFrame: generatedChoiceSchema(generatedContentFrameIntentSchema),
60981
+ itemSurface: generatedChoiceSchema(
60982
+ z47.enum(generatedDesignOptionCatalog.itemSurfaces)
60983
+ ),
60984
+ transitionAfter: generatedChoiceSchema(
60985
+ z47.enum(generatedDesignOptionCatalog.transitions)
60986
+ ),
60987
+ emphasis: generatedChoiceSchema(
60988
+ z47.enum(generatedDesignOptionCatalog.emphases)
60989
+ )
60990
+ }).strict();
60991
+ var generatedMediaCompositionIntentSchema = z47.enum([
60992
+ "none",
60993
+ "supporting",
60994
+ "dominant"
60995
+ ]);
60996
+ var generatedDecorativeCompositionIntentSchema = z47.enum([
60997
+ "none",
60998
+ "supporting"
60999
+ ]);
61000
+ var generatedHeroLegibilityStrategySchema = z47.enum([
61001
+ "none",
61002
+ "scrim-gradient"
61003
+ ]);
61004
+ var generatedBlockMediaIntentSchema = z47.object({
61005
+ media: generatedMediaCompositionIntentSchema,
61006
+ decorative: generatedDecorativeCompositionIntentSchema,
61007
+ heroLegibility: generatedChoiceSchema(generatedHeroLegibilityStrategySchema)
61008
+ }).strict();
61009
+ var generatedBoundaryIntentSchema = z47.object({
61010
+ transitionAfter: generatedChoiceSchema(
61011
+ z47.enum(generatedDesignOptionCatalog.transitions)
61012
+ )
61013
+ }).strict();
61014
+ var generatedPageDesignBlockIntentSchema = z47.object({
61015
+ blockId: z47.string().min(1),
61016
+ blockKind: z47.string().min(1),
61017
+ purpose: z47.string().min(1),
61018
+ design: generatedBlockDesignIntentSchema,
61019
+ mediaIntent: generatedBlockMediaIntentSchema,
61020
+ boundaryIntent: generatedBoundaryIntentSchema
61021
+ }).strict();
61022
+ var generatedPageDesignIntentSchema = z47.object({
61023
+ siteStyleId: generatedSiteStyleIdSchema,
61024
+ blocks: z47.array(generatedPageDesignBlockIntentSchema)
61025
+ }).strict();
61026
+
61027
+ // ../theme-core/src/site-styles/pageDesignIntent.ts
61028
+ import { z as z48 } from "zod";
61029
+ var pageDesignIntentSchemaVersion = 1;
61030
+ var pageDesignUserPinnedAppearanceChoiceSchema = z48.object({
61031
+ kind: z48.literal("user-pinned"),
61032
+ value: z48.string().min(1).transform(asAppearancePresetId)
61033
+ }).strict();
61034
+ var pageDesignUserPinnedBoundaryChoiceSchema = z48.object({
61035
+ kind: z48.literal("user-pinned"),
61036
+ value: z48.string().min(1).transform(asBoundaryOptionId)
61037
+ }).strict();
61038
+ var pageDesignBlockLookPinSchema = z48.object({
61039
+ blockId: z48.string().min(1).transform(asDesignBlockId),
61040
+ blockKind: z48.string().min(1),
61041
+ choice: pageDesignUserPinnedAppearanceChoiceSchema
61042
+ }).strict();
61043
+ var pageDesignBoundaryPinSchema = z48.object({
61044
+ boundaryId: z48.string().min(1).transform(asDesignBoundaryId),
61045
+ previousBlockId: z48.string().min(1).transform(asDesignBlockId),
61046
+ nextBlockId: z48.string().min(1).transform(asDesignBlockId),
61047
+ choice: pageDesignUserPinnedBoundaryChoiceSchema
61048
+ }).strict().superRefine((pin, ctx) => {
61049
+ const expectedBoundaryId = makeBoundaryId(
61050
+ pin.previousBlockId,
61051
+ pin.nextBlockId
61052
+ );
61053
+ if (pin.boundaryId !== expectedBoundaryId) {
61054
+ ctx.addIssue({
61055
+ code: z48.ZodIssueCode.custom,
61056
+ path: ["boundaryId"],
61057
+ message: `Boundary id must match previousBlockId and nextBlockId. Expected ${expectedBoundaryId}.`
61058
+ });
61059
+ }
61060
+ });
61061
+ var pageDesignIntentV1Schema = z48.object({
61062
+ schemaVersion: z48.literal(pageDesignIntentSchemaVersion),
61063
+ siteStyleId: z48.string().min(1).transform(asSiteStyleId),
61064
+ pageFlowPresetId: z48.string().min(1).transform(asPageFlowPresetId),
61065
+ blockLookPins: z48.array(pageDesignBlockLookPinSchema),
61066
+ boundaryPins: z48.array(pageDesignBoundaryPinSchema)
61067
+ }).strict().superRefine((intent, ctx) => {
61068
+ addDuplicateStringIssues(ctx, {
61069
+ values: intent.blockLookPins.map((pin) => pin.blockId),
61070
+ path: ["blockLookPins"],
61071
+ label: "block Look pin"
61072
+ });
61073
+ addDuplicateStringIssues(ctx, {
61074
+ values: intent.boundaryPins.map(
61075
+ (pin) => boundaryKey(pin.previousBlockId, pin.nextBlockId)
61076
+ ),
61077
+ path: ["boundaryPins"],
61078
+ label: "boundary pin"
61079
+ });
61080
+ });
61081
+ function addDuplicateStringIssues(ctx, input) {
61082
+ const seen = /* @__PURE__ */ new Set();
61083
+ const duplicates = /* @__PURE__ */ new Set();
61084
+ for (const value of input.values) {
61085
+ if (seen.has(value)) {
61086
+ duplicates.add(value);
61087
+ }
61088
+ seen.add(value);
61089
+ }
61090
+ for (const duplicate of duplicates) {
61091
+ ctx.addIssue({
61092
+ code: z48.ZodIssueCode.custom,
61093
+ path: [...input.path],
61094
+ message: `Duplicate ${input.label}: ${duplicate}.`
61095
+ });
61096
+ }
61097
+ }
61098
+ function boundaryKey(previousBlockId, nextBlockId) {
61099
+ return makeBoundaryId(previousBlockId, nextBlockId);
61100
+ }
61101
+
61102
+ // ../theme-core/src/mock-themes/modern-minimal.ts
61103
+ var modernMinimalTheme = {
61104
+ name: "Modern Minimal",
61105
+ description: "Clean, monochromatic design with subtle styling and modern typography",
61106
+ rationale: "Perfect for professional services, portfolios, and content-focused sites that need a clean, trustworthy appearance",
61107
+ axes: {
61108
+ tone: "minimal",
61109
+ energy: "calm",
61110
+ density: "airy",
61111
+ mediaBias: "text",
61112
+ conversionBias: "low",
61113
+ motion: "subtle"
61114
+ },
61115
+ palette: {
61116
+ colors: [
61117
+ { name: "primary", hex: "#1f2937" },
61118
+ { name: "secondary", hex: "#6b7280" },
61119
+ { name: "accent", hex: "#3b82f6" },
61120
+ { name: "success", hex: "#10b981" },
61121
+ { name: "warning", hex: "#f59e0b" },
61122
+ { name: "destructive", hex: "#ef4444" },
61123
+ { name: "background", hex: "#ffffff" },
61124
+ { name: "surface", hex: "#ffffff" },
61125
+ { name: "text", hex: "#1f2937" },
61126
+ { name: "border", hex: "#e5e7eb" }
61127
+ ],
61128
+ meta: { mode: "light" }
61129
+ },
61130
+ typography: {
61131
+ headings: {
61132
+ default: {
61133
+ family: "Inter, system-ui, sans-serif",
61134
+ weight: "medium",
61135
+ letterSpacing: "tight",
61136
+ lineHeight: "normal",
61137
+ case: "normal",
61138
+ italic: null
61139
+ },
61140
+ h1: {
61141
+ weight: "semibold",
61142
+ letterSpacing: "tight",
61143
+ size: "xl",
61144
+ lineHeight: "normal",
61145
+ italic: null
61146
+ },
61147
+ h2: {
61148
+ weight: "medium",
61149
+ letterSpacing: "normal",
61150
+ size: "lg",
61151
+ lineHeight: "normal",
61152
+ italic: null
61153
+ },
61154
+ h3: {
61155
+ weight: "medium",
61156
+ letterSpacing: "normal",
61157
+ size: "md",
61158
+ lineHeight: "normal",
61159
+ italic: null
61160
+ }
61161
+ },
61162
+ body: {
61163
+ family: "Inter, system-ui, sans-serif",
61164
+ weight: "regular",
61165
+ size: "md",
61166
+ letterSpacing: "normal",
61167
+ lineHeight: "relaxed"
61168
+ },
61169
+ scale: "minorThird"
61170
+ },
61171
+ space: "comfortable",
61172
+ corners: "rounded",
61173
+ border: {
61174
+ width: "hairline",
61175
+ style: "solid"
61176
+ },
61177
+ shadow: {
61178
+ elevation: "low",
61179
+ softness: "soft",
61180
+ position: "bottom"
61181
+ },
61182
+ motion: {
61183
+ level: "low",
61184
+ easing: "standard"
61185
+ },
61186
+ header: {
61187
+ variant: "classic",
61188
+ positioning: "static",
61189
+ shrinkOnScroll: false,
61190
+ maxWidth: "container",
61191
+ logoOverride: null,
61192
+ background: { type: "color", color: "surface" },
61193
+ navStyle: "minimal",
61194
+ navWeight: "medium",
61195
+ navContainer: { type: "none", opacity: 0, tint: null }
61196
+ },
61197
+ footer: {
61198
+ variant: "simple",
61199
+ maxWidth: "container",
61200
+ background: { type: "color", color: "surface" },
61201
+ navStyle: "minimal",
61202
+ navWeight: "medium"
61203
+ }
61204
+ };
61205
+
60975
61206
  // ../theme-core/src/site-styles/runtimeCompiler.ts
61207
+ init_personalities();
60976
61208
  function defineDesignRuntimeRules(rules) {
60977
61209
  return rules;
60978
61210
  }
@@ -61268,6 +61500,9 @@ var pageFlowPresets = [
61268
61500
  }
61269
61501
  ];
61270
61502
 
61503
+ // ../theme-core/src/site-styles/index.ts
61504
+ init_styleTags();
61505
+
61271
61506
  // ../theme-core/src/site-styles/tokenRecipes.ts
61272
61507
  import { z as z50 } from "zod";
61273
61508
  var themeTokenRecipeOptions = {
@@ -63293,14 +63528,16 @@ var headerCta = ctaButton({
63293
63528
  whenPath: "menu.ctaItem.label",
63294
63529
  variantPath: "menu.ctaItem.variant",
63295
63530
  linkPath: "menu.ctaItem.link",
63296
- className: `header-cta btn-sm ${desktopOnlyDisplay("inline-flex")} rb-ml-6`
63531
+ sizeFallback: "sm",
63532
+ className: `header-cta ${desktopOnlyDisplay("inline-flex")} rb-ml-6`
63297
63533
  });
63298
63534
  var mobileCta = ctaButton({
63299
63535
  basePath: "menu.ctaItem",
63300
63536
  whenPath: "menu.ctaItem.label",
63301
63537
  variantPath: "menu.ctaItem.variant",
63302
63538
  linkPath: "menu.ctaItem.link",
63303
- className: "nav-mobile-cta btn-md rb-w-full"
63539
+ sizeFallback: "md",
63540
+ className: "nav-mobile-cta rb-w-full"
63304
63541
  });
63305
63542
  var mobileToggleIcon = stack({ gap: "xs", className: "nav-mobile-icon" }, [
63306
63543
  {
@@ -66993,7 +67230,26 @@ init_schema2();
66993
67230
  init_defineBlock();
66994
67231
  init_builder();
66995
67232
  init_fragments();
67233
+ import { z as z61 } from "zod";
67234
+ init_media2();
66996
67235
  var ITEM_NAME2 = "member";
67236
+ var teamMemberPhotoSchema = mediaSchema.refine((media2) => media2.type === "image", {
67237
+ message: "Team member photos must be image media"
67238
+ }).nullable();
67239
+ var teamMemberDataSchema = z61.object({
67240
+ _type: z61.literal("teamMember"),
67241
+ id: z61.string(),
67242
+ name: z61.string(),
67243
+ role: z61.string().nullable(),
67244
+ roleLabel: z61.string().nullable(),
67245
+ bio: z61.string().nullable(),
67246
+ summary: z61.string().nullable(),
67247
+ photo: teamMemberPhotoSchema,
67248
+ profilePath: z61.string().nullable()
67249
+ });
67250
+ var teamMembersDataSchema = z61.array(teamMemberDataSchema);
67251
+ var dynamicSourceWhen = { equals: "site_staff" };
67252
+ var manualSourceWhen = { equals: "site_staff", not: true };
66997
67253
  var headingNode = text(
66998
67254
  { as: "h2" },
66999
67255
  bind("content.heading"),
@@ -67083,7 +67339,15 @@ var teamMemberStackLayout = el(
67083
67339
  ]
67084
67340
  ),
67085
67341
  stack({ gap: "sm", className: "rb-team-member-body rb-flex-1 rb-min-w-0" }, [
67086
- text({ as: "h3" }, bind("name")),
67342
+ link(
67343
+ {
67344
+ href: { $bind: { from: "profilePath" } },
67345
+ className: "rb-team-member-name-link"
67346
+ },
67347
+ [text({ as: "h3" }, bind("name"))],
67348
+ when("profilePath")
67349
+ ),
67350
+ text({ as: "h3" }, when("profilePath", { not: true }), bind("name")),
67087
67351
  text(
67088
67352
  { as: "p", className: "rb-team-member-role" },
67089
67353
  when("role"),
@@ -67097,12 +67361,18 @@ var teamMemberStackLayout = el(
67097
67361
  ])
67098
67362
  ]
67099
67363
  );
67100
- var gridMembersNode = repeaterFragmentLayout({
67364
+ var manualGridMembersNode = when("content.source", manualSourceWhen)(repeaterFragmentLayout({
67101
67365
  collectionPath: "content.members",
67102
67366
  itemName: ITEM_NAME2,
67103
67367
  fragments: { teamMember: teamMemberFragment },
67104
67368
  itemGap: "sm"
67105
- });
67369
+ }));
67370
+ var dynamicGridMembersNode = when("content.source", dynamicSourceWhen)(repeaterFragmentLayout({
67371
+ collectionPath: "data.members",
67372
+ itemName: ITEM_NAME2,
67373
+ fragments: { teamMember: teamMemberFragment },
67374
+ itemGap: "sm"
67375
+ }));
67106
67376
  var gridVariant = wrapVariant3(
67107
67377
  el(
67108
67378
  "grid",
@@ -67116,22 +67386,29 @@ var gridVariant = wrapVariant3(
67116
67386
  },
67117
67387
  gap: { $bind: { from: "content.gap", fallback: "medium" } }
67118
67388
  },
67119
- [gridMembersNode]
67389
+ [manualGridMembersNode, dynamicGridMembersNode]
67120
67390
  )
67121
67391
  );
67122
- var stackMembersNode = repeaterFragmentLayout({
67392
+ var manualStackMembersNode = when("content.source", manualSourceWhen)(repeaterFragmentLayout({
67123
67393
  collectionPath: "content.members",
67124
67394
  itemName: ITEM_NAME2,
67125
67395
  fragments: { teamMember: teamMemberFragment },
67126
67396
  layoutOverrides: { teamMember: teamMemberStackLayout },
67127
67397
  itemGap: "sm"
67128
- });
67398
+ }));
67399
+ var dynamicStackMembersNode = when("content.source", dynamicSourceWhen)(repeaterFragmentLayout({
67400
+ collectionPath: "data.members",
67401
+ itemName: ITEM_NAME2,
67402
+ fragments: { teamMember: teamMemberFragment },
67403
+ layoutOverrides: { teamMember: teamMemberStackLayout },
67404
+ itemGap: "sm"
67405
+ }));
67129
67406
  var stackVariant = wrapVariant3({
67130
67407
  type: "stack",
67131
67408
  props: {
67132
67409
  gap: { $bind: { from: "content.gap", fallback: "medium" } }
67133
67410
  },
67134
- children: [stackMembersNode]
67411
+ children: [manualStackMembersNode, dynamicStackMembersNode]
67135
67412
  });
67136
67413
  var teamMembersManifest = createBlockManifest({
67137
67414
  id: "block.team-members",
@@ -67146,6 +67423,18 @@ var teamMembersManifest = createBlockManifest({
67146
67423
  required: false,
67147
67424
  maxLength: 120
67148
67425
  }),
67426
+ parseFieldDefinition({
67427
+ id: "source",
67428
+ type: "select",
67429
+ label: "Team members",
67430
+ description: "Choose whether to use the site-wide team or a hand-picked list.",
67431
+ defaultValue: "manual",
67432
+ options: [
67433
+ { value: "manual", label: "Choose manually" },
67434
+ { value: "site_staff", label: "Use all site team members" }
67435
+ ],
67436
+ ui: { intent: "behavior" }
67437
+ }),
67149
67438
  parseFieldDefinition({
67150
67439
  id: "layoutAlign",
67151
67440
  type: "select",
@@ -67248,18 +67537,24 @@ var teamMembersManifest = createBlockManifest({
67248
67537
  ],
67249
67538
  ui: { intent: "display" }
67250
67539
  }),
67251
- fragmentsToRepeaterField(
67252
- "members",
67253
- "Team members",
67254
- { teamMember: teamMemberFragment },
67255
- {
67256
- minItems: 0,
67257
- maxItems: 50,
67258
- itemLabel: "Team member",
67259
- itemLabelSource: "name",
67260
- description: "Add people to this section."
67540
+ {
67541
+ ...fragmentsToRepeaterField(
67542
+ "members",
67543
+ "Team members",
67544
+ { teamMember: teamMemberFragment },
67545
+ {
67546
+ minItems: 0,
67547
+ maxItems: 50,
67548
+ itemLabel: "Team member",
67549
+ itemLabelSource: "name",
67550
+ description: "Add people to this section."
67551
+ }
67552
+ ),
67553
+ ui: {
67554
+ intent: "content",
67555
+ visibleWhen: { field: "source", equals: "manual" }
67261
67556
  }
67262
- )
67557
+ }
67263
67558
  ],
67264
67559
  layout: gridVariant,
67265
67560
  variants: {
@@ -67285,7 +67580,20 @@ var teamMembersManifest = createBlockManifest({
67285
67580
  styleTokens: { spacing: "lg" }
67286
67581
  });
67287
67582
  var teamMembersBlockDefinition = {
67288
- manifest: teamMembersManifest
67583
+ manifest: teamMembersManifest,
67584
+ dataSchemas: {
67585
+ members: teamMembersDataSchema
67586
+ },
67587
+ dataLoaders: {
67588
+ members: {
67589
+ endpoint: "listPublicTeamMembers",
67590
+ params: {
67591
+ siteId: { $bind: { from: "$root.siteId" } },
67592
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } }
67593
+ },
67594
+ mode: "server"
67595
+ }
67596
+ }
67289
67597
  };
67290
67598
 
67291
67599
  // ../blocks/src/system/blocks/location-map.ts
@@ -68398,7 +68706,7 @@ var defaultTransforms = createTransformRegistry(builtinTransformDefinitions);
68398
68706
 
68399
68707
  // ../blocks/src/system/runtime/resolver.ts
68400
68708
  init_node();
68401
- import React35 from "react";
68709
+ import React36 from "react";
68402
68710
  init_registry_server();
68403
68711
  init_layout();
68404
68712
  var META_PATH_TO_STORE_KEY = {
@@ -68871,7 +69179,7 @@ function resolveNode2(node, context, indexFallback) {
68871
69179
  blockContent: context.blockContent,
68872
69180
  fragmentRegistry: context.fragmentRegistry
68873
69181
  };
68874
- return React35.createElement(component, elementProps, ...children);
69182
+ return React36.createElement(component, elementProps, ...children);
68875
69183
  }
68876
69184
  function resolveValue(value, context) {
68877
69185
  if (value && typeof value === "object" && "$bind" in value) {
@@ -68958,7 +69266,7 @@ function getDefaultComponentRegistry() {
68958
69266
  var defaultComponentRegistry = getDefaultComponentRegistry();
68959
69267
 
68960
69268
  // ../blocks/src/system/componentFactory.ts
68961
- import React36 from "react";
69269
+ import React37 from "react";
68962
69270
  init_blockOverrides();
68963
69271
  function resolveBlockVariantKey(manifest, content) {
68964
69272
  return resolveVariantKey(manifest, content);
@@ -69077,7 +69385,7 @@ function renderBlock(manifest, content, options = {}) {
69077
69385
  const resolvedRegistry = options.registry ?? getDefaultComponentRegistry();
69078
69386
  const resolvedTheme = options.theme ?? defaultThemeTokens;
69079
69387
  const cleanKind = manifest.name.replace(/^block\./, "");
69080
- const componentElement = React36.createElement(Component2, {
69388
+ const componentElement = React37.createElement(Component2, {
69081
69389
  content,
69082
69390
  data: options.data,
69083
69391
  registry: resolvedRegistry,
@@ -69093,7 +69401,7 @@ function renderBlock(manifest, content, options = {}) {
69093
69401
  return componentElement;
69094
69402
  }
69095
69403
  const styleGroup = typeof content.styleGroup === "string" ? content.styleGroup : void 0;
69096
- return React36.createElement(
69404
+ return React37.createElement(
69097
69405
  "div",
69098
69406
  {
69099
69407
  className: `block-${cleanKind}`,
@@ -69276,7 +69584,7 @@ function PageRenderer({
69276
69584
  customBlocks,
69277
69585
  isEditingMode = false
69278
69586
  }) {
69279
- const imageResolveContext = React37.useMemo(
69587
+ const imageResolveContext = React38.useMemo(
69280
69588
  () => resolvePageRendererImageResolveContext(dataContext),
69281
69589
  [
69282
69590
  dataContext?.imageResolveContext,
@@ -69387,7 +69695,7 @@ function getCachedManifestValidator(manifest, options = {}) {
69387
69695
  manifestValidatorCache.set(manifest, { ...cacheEntry, [mode]: created });
69388
69696
  return created;
69389
69697
  }
69390
- var MemoBlockSection = React37.memo(
69698
+ var MemoBlockSection = React38.memo(
69391
69699
  function MemoBlockSection2({
69392
69700
  themeTokens,
69393
69701
  themeConfig,
@@ -71038,7 +71346,7 @@ function ThemeScope({
71038
71346
  }
71039
71347
 
71040
71348
  // ../theme-core/src/ThemeFontLoader.tsx
71041
- import * as React38 from "react";
71349
+ import * as React39 from "react";
71042
71350
  init_selectorUtils();
71043
71351
  import { Fragment as Fragment24, jsx as jsx157, jsxs as jsxs103 } from "react/jsx-runtime";
71044
71352
 
@@ -71256,6 +71564,7 @@ function coercePayload(payload) {
71256
71564
  if ("form" in record && typeof record.form !== "function") return record.form;
71257
71565
  if ("entries" in record && typeof record.entries !== "function") return record.entries;
71258
71566
  if ("services" in record && typeof record.services !== "function") return record.services;
71567
+ if ("teamMembers" in record && typeof record.teamMembers !== "function") return record.teamMembers;
71259
71568
  }
71260
71569
  return payload;
71261
71570
  }
@@ -71336,6 +71645,7 @@ var SUPPORTED_LOADER_ENDPOINTS = [
71336
71645
  "listPublicEvents",
71337
71646
  "getPublicEventDetails",
71338
71647
  "listPublicCourses",
71648
+ "listPublicTeamMembers",
71339
71649
  "listPublicProducts",
71340
71650
  "listPublicPasses",
71341
71651
  "listPublicMemberships",
@@ -71392,6 +71702,10 @@ function normalizeLoaderParams(endpoint, params, context) {
71392
71702
  ensureSiteId(out, context);
71393
71703
  return out;
71394
71704
  }
71705
+ if (endpoint === "listPublicTeamMembers") {
71706
+ ensureSiteId(out, context);
71707
+ return out;
71708
+ }
71395
71709
  if (endpoint === "getPublishedEntryPreview") {
71396
71710
  ensureSiteId(out, context);
71397
71711
  return out;
@@ -71443,7 +71757,7 @@ function BlocksIslandsHydrator(props2 = {}) {
71443
71757
  }
71444
71758
 
71445
71759
  // src/rendering/blocks-page-renderer.ts
71446
- import * as React39 from "react";
71760
+ import * as React40 from "react";
71447
71761
 
71448
71762
  // ../blocks/src/rendering/server.ts
71449
71763
  init_schema2();
@@ -71523,7 +71837,7 @@ function toBlocksBlockOverrides(overrides) {
71523
71837
  for (const [key, OverrideComponent] of Object.entries(overrides)) {
71524
71838
  result[key] = function BlocksOverrideAdapter(props2) {
71525
71839
  const sdkOverride = OverrideComponent;
71526
- return React39.createElement(sdkOverride, props2);
71840
+ return React40.createElement(sdkOverride, props2);
71527
71841
  };
71528
71842
  }
71529
71843
  return result;
@@ -71538,15 +71852,15 @@ function PageRenderer2(props2) {
71538
71852
  sdkConfig: blocksSdkConfig,
71539
71853
  customBlocks: normalizeSdkCustomBlocks(props2.customBlocks)
71540
71854
  };
71541
- return React39.createElement(PageRenderer, blocksProps);
71855
+ return React40.createElement(PageRenderer, blocksProps);
71542
71856
  }
71543
71857
 
71544
71858
  // src/rendering/blocks-theme-scope.ts
71545
- import * as React40 from "react";
71859
+ import * as React41 from "react";
71546
71860
  function ThemeScope2(props2) {
71547
71861
  const { theme, children, ...rest } = props2;
71548
71862
  const blocksTheme = parseBlocksTheme(theme);
71549
- return React40.createElement(ThemeScope, {
71863
+ return React41.createElement(ThemeScope, {
71550
71864
  ...rest,
71551
71865
  theme: blocksTheme,
71552
71866
  children: children ?? null
@@ -73070,13 +73384,150 @@ var ENDPOINT_DEFINITIONS = {
73070
73384
  "server:internal_error"
73071
73385
  ]
73072
73386
  },
73073
- deleteAppointmentResource: {
73387
+ removeAppointmentResource: {
73074
73388
  path: "/sites/{siteId}/bookings/resources/{resourceId}",
73075
73389
  method: "DELETE",
73076
73390
  auth: "user",
73077
73391
  responseKind: "json",
73078
73392
  errors: ["resource:not_found", "server:internal_error"]
73079
73393
  },
73394
+ createTeamMemberProfile: {
73395
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile",
73396
+ method: "POST",
73397
+ auth: "user",
73398
+ responseKind: "json",
73399
+ errors: [
73400
+ "validation:invalid_input",
73401
+ "resource:not_found",
73402
+ "resource:conflict",
73403
+ "server:internal_error"
73404
+ ]
73405
+ },
73406
+ updateTeamMemberProfilePolicy: {
73407
+ path: "/sites/{siteId}/bookings/resources/profile-policy",
73408
+ method: "PUT",
73409
+ auth: "user",
73410
+ responseKind: "json",
73411
+ errors: ["validation:invalid_input", "server:internal_error"]
73412
+ },
73413
+ updateTeamMemberProfileContent: {
73414
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/content",
73415
+ method: "PUT",
73416
+ tags: [
73417
+ "site-{siteId}",
73418
+ "content-{siteId}-team-member",
73419
+ "content-entry-{entryId}"
73420
+ ],
73421
+ auth: "user",
73422
+ responseKind: "json",
73423
+ errors: [
73424
+ "validation:invalid_input",
73425
+ "resource:not_found",
73426
+ "resource:conflict",
73427
+ "server:internal_error"
73428
+ ]
73429
+ },
73430
+ publishTeamMemberProfile: {
73431
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/publish",
73432
+ method: "POST",
73433
+ tags: [
73434
+ "site-{siteId}",
73435
+ "content-{siteId}-team-member",
73436
+ "content-entry-{entryId}"
73437
+ ],
73438
+ auth: "user",
73439
+ responseKind: "json",
73440
+ errors: [
73441
+ "validation:invalid_input",
73442
+ "resource:not_found",
73443
+ "server:internal_error"
73444
+ ]
73445
+ },
73446
+ discardTeamMemberProfileDraft: {
73447
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/discard",
73448
+ method: "POST",
73449
+ tags: [
73450
+ "site-{siteId}",
73451
+ "content-{siteId}-team-member",
73452
+ "content-entry-{entryId}"
73453
+ ],
73454
+ auth: "user",
73455
+ responseKind: "json",
73456
+ errors: [
73457
+ "validation:invalid_input",
73458
+ "resource:not_found",
73459
+ "resource:conflict",
73460
+ "server:internal_error"
73461
+ ]
73462
+ },
73463
+ unpublishTeamMemberProfile: {
73464
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/unpublish",
73465
+ method: "POST",
73466
+ tags: [
73467
+ "site-{siteId}",
73468
+ "content-{siteId}-team-member",
73469
+ "content-entry-{entryId}"
73470
+ ],
73471
+ auth: "user",
73472
+ responseKind: "json",
73473
+ errors: [
73474
+ "validation:invalid_input",
73475
+ "resource:not_found",
73476
+ "resource:conflict",
73477
+ "server:internal_error"
73478
+ ]
73479
+ },
73480
+ scheduleTeamMemberProfile: {
73481
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/schedule",
73482
+ method: "POST",
73483
+ tags: [
73484
+ "site-{siteId}",
73485
+ "content-{siteId}-team-member",
73486
+ "content-entry-{entryId}"
73487
+ ],
73488
+ auth: "user",
73489
+ responseKind: "json",
73490
+ errors: [
73491
+ "validation:invalid_input",
73492
+ "resource:not_found",
73493
+ "resource:conflict",
73494
+ "server:internal_error"
73495
+ ]
73496
+ },
73497
+ cancelScheduledTeamMemberProfile: {
73498
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/schedule",
73499
+ method: "DELETE",
73500
+ tags: [
73501
+ "site-{siteId}",
73502
+ "content-{siteId}-team-member",
73503
+ "content-entry-{entryId}"
73504
+ ],
73505
+ auth: "user",
73506
+ responseKind: "json",
73507
+ errors: [
73508
+ "validation:invalid_input",
73509
+ "resource:not_found",
73510
+ "resource:conflict",
73511
+ "server:internal_error"
73512
+ ]
73513
+ },
73514
+ updateTeamMemberProfileRouteMetadata: {
73515
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/routes/{routeId}/metadata",
73516
+ method: "PATCH",
73517
+ tags: [
73518
+ TAG_TEMPLATES.siteCollection,
73519
+ TAG_TEMPLATES.siteRoutableContent,
73520
+ TAG_TEMPLATES.routeById
73521
+ ],
73522
+ auth: "user",
73523
+ responseKind: "json",
73524
+ errors: [
73525
+ "validation:invalid_input",
73526
+ "resource:not_found",
73527
+ "resource:conflict",
73528
+ "server:internal_error"
73529
+ ]
73530
+ },
73080
73531
  listAppointmentServices: {
73081
73532
  path: "/sites/{siteId}/bookings/services",
73082
73533
  method: "GET",
@@ -75450,6 +75901,15 @@ var ENDPOINT_DEFINITIONS = {
75450
75901
  auth: "public",
75451
75902
  responseKind: "json"
75452
75903
  },
75904
+ listPublicTeamMembers: {
75905
+ path: "/public/sites/{siteId}/team-members",
75906
+ method: "GET",
75907
+ revalidate: 60,
75908
+ tags: ["public-team-members-{siteId}"],
75909
+ errors: [],
75910
+ auth: "public",
75911
+ responseKind: "json"
75912
+ },
75453
75913
  getPublicCourse: {
75454
75914
  path: "/public/sites/{siteId}/courses/{courseId}",
75455
75915
  method: "GET",
@@ -77741,60 +78201,60 @@ var ENDPOINT_DEFINITIONS = {
77741
78201
  };
77742
78202
 
77743
78203
  // ../api/src/navigation/contracts.ts
77744
- import { z as z61 } from "zod";
77745
- var portalLinkPayloadSchema = z61.object({
77746
- kind: z61.literal("portal"),
77747
- path: z61.string().trim().startsWith("/").optional(),
77748
- labels: z61.object({
77749
- loggedOut: z61.string().trim().min(1).optional(),
77750
- loggedIn: z61.string().trim().min(1).optional()
78204
+ import { z as z62 } from "zod";
78205
+ var portalLinkPayloadSchema = z62.object({
78206
+ kind: z62.literal("portal"),
78207
+ path: z62.string().trim().startsWith("/").optional(),
78208
+ labels: z62.object({
78209
+ loggedOut: z62.string().trim().min(1).optional(),
78210
+ loggedIn: z62.string().trim().min(1).optional()
77751
78211
  }).optional()
77752
78212
  });
77753
- var cartLinkLabelConfigSchema = z61.discriminatedUnion("kind", [
77754
- z61.object({
77755
- kind: z61.literal("icon-only")
78213
+ var cartLinkLabelConfigSchema = z62.discriminatedUnion("kind", [
78214
+ z62.object({
78215
+ kind: z62.literal("icon-only")
77756
78216
  }),
77757
- z61.object({
77758
- kind: z61.literal("icon-with-label"),
77759
- label: z61.string().trim().min(1)
78217
+ z62.object({
78218
+ kind: z62.literal("icon-with-label"),
78219
+ label: z62.string().trim().min(1)
77760
78220
  })
77761
78221
  ]);
77762
- var cartLinkPayloadSchema = z61.object({
77763
- kind: z61.literal("cart"),
77764
- badge: z61.enum(["show-count", "hidden"]),
78222
+ var cartLinkPayloadSchema = z62.object({
78223
+ kind: z62.literal("cart"),
78224
+ badge: z62.enum(["show-count", "hidden"]),
77765
78225
  label: cartLinkLabelConfigSchema
77766
78226
  });
77767
- var internalLinkPayloadSchema = z61.object({
77768
- kind: z61.literal("internal"),
77769
- routeId: z61.string().uuid(),
77770
- entityId: z61.string().uuid(),
77771
- entityType: z61.enum(["page", "content"]),
77772
- href: z61.string().min(1),
77773
- title: z61.string().min(1),
77774
- typeLabel: z61.string().min(1),
77775
- contentTypeKey: z61.string().nullable().optional(),
77776
- contentTypeName: z61.string().nullable().optional(),
77777
- updatedAt: z61.string().nullable().optional()
78227
+ var internalLinkPayloadSchema = z62.object({
78228
+ kind: z62.literal("internal"),
78229
+ routeId: z62.string().uuid(),
78230
+ entityId: z62.string().uuid(),
78231
+ entityType: z62.enum(["page", "content"]),
78232
+ href: z62.string().min(1),
78233
+ title: z62.string().min(1),
78234
+ typeLabel: z62.string().min(1),
78235
+ contentTypeKey: z62.string().nullable().optional(),
78236
+ contentTypeName: z62.string().nullable().optional(),
78237
+ updatedAt: z62.string().nullable().optional()
77778
78238
  }).passthrough();
77779
- var externalLinkSchema2 = z61.object({
77780
- kind: z61.literal("external"),
78239
+ var externalLinkSchema2 = z62.object({
78240
+ kind: z62.literal("external"),
77781
78241
  // Navigation external links are expected to be absolute URLs.
77782
- href: z61.string().url()
78242
+ href: z62.string().url()
77783
78243
  });
77784
- var customLinkSchema2 = z61.object({
77785
- kind: z61.literal("url"),
77786
- href: z61.string().min(1)
78244
+ var customLinkSchema2 = z62.object({
78245
+ kind: z62.literal("url"),
78246
+ href: z62.string().min(1)
77787
78247
  });
77788
- var pageLinkSchema2 = z61.object({
77789
- kind: z61.literal("page"),
77790
- identifier: z61.string().min(1)
78248
+ var pageLinkSchema2 = z62.object({
78249
+ kind: z62.literal("page"),
78250
+ identifier: z62.string().min(1)
77791
78251
  });
77792
- var entryLinkSchema2 = z61.object({
77793
- kind: z61.literal("entry"),
77794
- contentType: z61.string().min(1),
77795
- identifier: z61.string().min(1)
78252
+ var entryLinkSchema2 = z62.object({
78253
+ kind: z62.literal("entry"),
78254
+ contentType: z62.string().min(1),
78255
+ identifier: z62.string().min(1)
77796
78256
  });
77797
- var linkPayloadSchema = z61.discriminatedUnion("kind", [
78257
+ var linkPayloadSchema = z62.discriminatedUnion("kind", [
77798
78258
  internalLinkPayloadSchema,
77799
78259
  pageLinkSchema2,
77800
78260
  entryLinkSchema2,
@@ -77811,7 +78271,7 @@ var navigationLinkInputSchemaOptions = [
77811
78271
  portalLinkPayloadSchema,
77812
78272
  cartLinkPayloadSchema
77813
78273
  ];
77814
- var navigationLinkInputSchema = z61.discriminatedUnion(
78274
+ var navigationLinkInputSchema = z62.discriminatedUnion(
77815
78275
  "kind",
77816
78276
  navigationLinkInputSchemaOptions
77817
78277
  );
@@ -77819,21 +78279,21 @@ var navigationLinkInputSchema = z61.discriminatedUnion(
77819
78279
  // ../api/src/sdkConfig/contracts.ts
77820
78280
  init_schema2();
77821
78281
  init_schema();
77822
- import { z as z62 } from "zod";
78282
+ import { z as z63 } from "zod";
77823
78283
  function unsafeRetypeZodSchema(schema) {
77824
78284
  return schema;
77825
78285
  }
77826
- var navIdListSchema = z62.preprocess((value) => {
78286
+ var navIdListSchema = z63.preprocess((value) => {
77827
78287
  if (!Array.isArray(value)) return void 0;
77828
78288
  const filtered = value.filter((v) => typeof v === "string" && v.trim().length > 0);
77829
78289
  return filtered.length > 0 ? filtered : void 0;
77830
- }, z62.array(z62.string()).max(200).optional());
77831
- var dashboardNavVisibilityBaseSchema = z62.object({
77832
- mode: z62.enum(["augment", "restrict"]).optional(),
78290
+ }, z63.array(z63.string()).max(200).optional());
78291
+ var dashboardNavVisibilityBaseSchema = z63.object({
78292
+ mode: z63.enum(["augment", "restrict"]).optional(),
77833
78293
  allowIds: navIdListSchema,
77834
78294
  denyIds: navIdListSchema
77835
78295
  }).strip();
77836
- var dashboardNavVisibilityRolesSchema = z62.object({
78296
+ var dashboardNavVisibilityRolesSchema = z63.object({
77837
78297
  administrator: dashboardNavVisibilityBaseSchema.optional(),
77838
78298
  editor: dashboardNavVisibilityBaseSchema.optional(),
77839
78299
  team_member: dashboardNavVisibilityBaseSchema.optional(),
@@ -77842,57 +78302,57 @@ var dashboardNavVisibilityRolesSchema = z62.object({
77842
78302
  var dashboardNavVisibilitySchema = dashboardNavVisibilityBaseSchema.extend({
77843
78303
  roles: dashboardNavVisibilityRolesSchema
77844
78304
  }).strip();
77845
- var dashboardNavigationConfigSchema = z62.object({
78305
+ var dashboardNavigationConfigSchema = z63.object({
77846
78306
  siteNav: dashboardNavVisibilitySchema.optional(),
77847
78307
  settingsNav: dashboardNavVisibilitySchema.optional()
77848
78308
  }).strip();
77849
- var dashboardConfigSchema = z62.object({
77850
- previewEditingEnabled: z62.boolean().optional(),
78309
+ var dashboardConfigSchema = z63.object({
78310
+ previewEditingEnabled: z63.boolean().optional(),
77851
78311
  navigation: dashboardNavigationConfigSchema.optional()
77852
78312
  }).strip();
77853
78313
  var fieldDefinitionInputSchema = unsafeRetypeZodSchema(fieldSchema);
77854
78314
  var nodeDefinitionSchema = unsafeRetypeZodSchema(NodeSchema);
77855
- var sdkLoaderEndpointSchema = z62.enum(SUPPORTED_LOADER_ENDPOINTS);
77856
- var loaderParamBindingSchema = z62.object({
77857
- $bind: z62.object({
77858
- from: z62.string().min(1, "Binding path is required"),
77859
- fallback: z62.string().optional()
78315
+ var sdkLoaderEndpointSchema = z63.enum(SUPPORTED_LOADER_ENDPOINTS);
78316
+ var loaderParamBindingSchema = z63.object({
78317
+ $bind: z63.object({
78318
+ from: z63.string().min(1, "Binding path is required"),
78319
+ fallback: z63.string().optional()
77860
78320
  })
77861
78321
  });
77862
- var loaderParamValueSchema = z62.union([
77863
- z62.string(),
77864
- z62.number(),
77865
- z62.boolean(),
78322
+ var loaderParamValueSchema = z63.union([
78323
+ z63.string(),
78324
+ z63.number(),
78325
+ z63.boolean(),
77866
78326
  loaderParamBindingSchema
77867
78327
  ]);
77868
- var sdkConfigLoaderSchema = z62.object({
78328
+ var sdkConfigLoaderSchema = z63.object({
77869
78329
  endpoint: sdkLoaderEndpointSchema,
77870
- params: z62.record(z62.string(), loaderParamValueSchema),
77871
- mode: z62.enum(["server", "client"]).default("server")
78330
+ params: z63.record(z63.string(), loaderParamValueSchema),
78331
+ mode: z63.enum(["server", "client"]).default("server")
77872
78332
  });
77873
- var sdkDataLoadersSchema = z62.record(z62.string(), sdkConfigLoaderSchema).refine((loaders) => Object.keys(loaders).length <= 5, { message: "Maximum 5 data loaders per block" }).optional();
77874
- var sdkCustomBlockIdSchema = z62.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
78333
+ var sdkDataLoadersSchema = z63.record(z63.string(), sdkConfigLoaderSchema).refine((loaders) => Object.keys(loaders).length <= 5, { message: "Maximum 5 data loaders per block" }).optional();
78334
+ var sdkCustomBlockIdSchema = z63.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
77875
78335
  message: "Block ID must start with 'custom.' followed by lowercase letters, numbers, or hyphens"
77876
78336
  }).transform((value) => value);
77877
- var sdkCustomBlockInputSchema = z62.object({
78337
+ var sdkCustomBlockInputSchema = z63.object({
77878
78338
  id: sdkCustomBlockIdSchema,
77879
- title: z62.string().min(1),
77880
- titleSource: z62.union([z62.string().min(1), z62.array(z62.string().min(1)).min(1)]).optional(),
77881
- description: z62.string().optional(),
78339
+ title: z63.string().min(1),
78340
+ titleSource: z63.union([z63.string().min(1), z63.array(z63.string().min(1)).min(1)]).optional(),
78341
+ description: z63.string().optional(),
77882
78342
  category: blockCategoryEnum,
77883
- icon: z62.string().optional(),
77884
- tags: z62.array(z62.string()).optional(),
78343
+ icon: z63.string().optional(),
78344
+ tags: z63.array(z63.string()).optional(),
77885
78345
  fields: fieldDefinitionInputSchema.array().min(1),
77886
78346
  dataLoaders: sdkDataLoadersSchema,
77887
78347
  layout: NodeSchema.optional(),
77888
- variants: z62.record(z62.string().min(1), NodeSchema).optional(),
77889
- defaultVariant: z62.string().min(1).optional(),
77890
- variantOptions: z62.record(
77891
- z62.string().min(1),
77892
- z62.object({
77893
- label: z62.string().min(1).optional(),
77894
- description: z62.string().min(1).optional(),
77895
- icon: z62.string().min(1).optional()
78348
+ variants: z63.record(z63.string().min(1), NodeSchema).optional(),
78349
+ defaultVariant: z63.string().min(1).optional(),
78350
+ variantOptions: z63.record(
78351
+ z63.string().min(1),
78352
+ z63.object({
78353
+ label: z63.string().min(1).optional(),
78354
+ description: z63.string().min(1).optional(),
78355
+ icon: z63.string().min(1).optional()
77896
78356
  })
77897
78357
  ).optional()
77898
78358
  }).superRefine((data, ctx) => {
@@ -77902,7 +78362,7 @@ var sdkCustomBlockInputSchema = z62.object({
77902
78362
  const exists = data.fields.some((field) => field.id === source);
77903
78363
  if (!exists) {
77904
78364
  ctx.addIssue({
77905
- code: z62.ZodIssueCode.custom,
78365
+ code: z63.ZodIssueCode.custom,
77906
78366
  message: `titleSource must reference a valid field ID (got "${source}")`,
77907
78367
  path: Array.isArray(data.titleSource) ? ["titleSource", index] : ["titleSource"]
77908
78368
  });
@@ -77911,7 +78371,7 @@ var sdkCustomBlockInputSchema = z62.object({
77911
78371
  }
77912
78372
  if (data.layout && data.variants) {
77913
78373
  ctx.addIssue({
77914
- code: z62.ZodIssueCode.custom,
78374
+ code: z63.ZodIssueCode.custom,
77915
78375
  message: "Custom block must define either `layout` or `variants`, not both",
77916
78376
  path: ["variants"]
77917
78377
  });
@@ -77920,14 +78380,14 @@ var sdkCustomBlockInputSchema = z62.object({
77920
78380
  const keys = Object.keys(data.variants);
77921
78381
  if (keys.length === 0) {
77922
78382
  ctx.addIssue({
77923
- code: z62.ZodIssueCode.custom,
78383
+ code: z63.ZodIssueCode.custom,
77924
78384
  message: "`variants` must contain at least one variant key",
77925
78385
  path: ["variants"]
77926
78386
  });
77927
78387
  }
77928
78388
  if (data.defaultVariant && !Object.prototype.hasOwnProperty.call(data.variants, data.defaultVariant)) {
77929
78389
  ctx.addIssue({
77930
- code: z62.ZodIssueCode.custom,
78390
+ code: z63.ZodIssueCode.custom,
77931
78391
  message: "`defaultVariant` must be a key present in `variants`",
77932
78392
  path: ["defaultVariant"]
77933
78393
  });
@@ -77936,7 +78396,7 @@ var sdkCustomBlockInputSchema = z62.object({
77936
78396
  for (const key of Object.keys(data.variantOptions)) {
77937
78397
  if (!Object.prototype.hasOwnProperty.call(data.variants, key)) {
77938
78398
  ctx.addIssue({
77939
- code: z62.ZodIssueCode.custom,
78399
+ code: z63.ZodIssueCode.custom,
77940
78400
  message: "`variantOptions` key must exist in `variants`",
77941
78401
  path: ["variantOptions", key]
77942
78402
  });
@@ -77945,74 +78405,74 @@ var sdkCustomBlockInputSchema = z62.object({
77945
78405
  }
77946
78406
  }
77947
78407
  });
77948
- var sdkBlockFieldExtensionInputSchema = z62.object({
78408
+ var sdkBlockFieldExtensionInputSchema = z63.object({
77949
78409
  fields: fieldDefinitionInputSchema.array().min(1)
77950
78410
  });
77951
- var sdkBlockFieldExtensionsInputSchema = z62.record(
77952
- z62.string().min(1),
78411
+ var sdkBlockFieldExtensionsInputSchema = z63.record(
78412
+ z63.string().min(1),
77953
78413
  sdkBlockFieldExtensionInputSchema
77954
78414
  );
77955
- var sdkThemePaletteSchema = z62.record(z62.string(), z62.string());
77956
- var sdkThemeConfigSchema = z62.object({
78415
+ var sdkThemePaletteSchema = z63.record(z63.string(), z63.string());
78416
+ var sdkThemeConfigSchema = z63.object({
77957
78417
  palette: sdkThemePaletteSchema
77958
78418
  });
77959
- var sdkSectionBackgroundSchema = z62.object({
77960
- id: z62.string().min(1),
77961
- label: z62.string().min(1),
77962
- token: z62.string().min(1)
78419
+ var sdkSectionBackgroundSchema = z63.object({
78420
+ id: z63.string().min(1),
78421
+ label: z63.string().min(1),
78422
+ token: z63.string().min(1)
77963
78423
  });
77964
- var sdkSectionOptionsConfigSchema = z62.object({
77965
- backgroundColor: z62.boolean().optional(),
77966
- backgroundImage: z62.boolean().optional(),
77967
- backgroundGradient: z62.boolean().optional(),
77968
- spacing: z62.union([z62.array(z62.enum(["compact", "default", "spacious"])), z62.boolean()]).optional(),
77969
- textColor: z62.boolean().optional()
78424
+ var sdkSectionOptionsConfigSchema = z63.object({
78425
+ backgroundColor: z63.boolean().optional(),
78426
+ backgroundImage: z63.boolean().optional(),
78427
+ backgroundGradient: z63.boolean().optional(),
78428
+ spacing: z63.union([z63.array(z63.enum(["compact", "default", "spacious"])), z63.boolean()]).optional(),
78429
+ textColor: z63.boolean().optional()
77970
78430
  });
77971
- var sdkContainerOptionsConfigSchema = z62.object({
77972
- maxWidth: z62.union([z62.array(z62.enum(["narrow", "default", "wide", "full"])), z62.boolean()]).optional(),
77973
- alignment: z62.union([z62.array(z62.enum(["left", "center", "right"])), z62.boolean()]).optional()
78431
+ var sdkContainerOptionsConfigSchema = z63.object({
78432
+ maxWidth: z63.union([z63.array(z63.enum(["narrow", "default", "wide", "full"])), z63.boolean()]).optional(),
78433
+ alignment: z63.union([z63.array(z63.enum(["left", "center", "right"])), z63.boolean()]).optional()
77974
78434
  });
77975
- var sdkSiteStyleConfigSchema = z62.object({
77976
- sectionBackgrounds: z62.array(sdkSectionBackgroundSchema).optional(),
78435
+ var sdkSiteStyleConfigSchema = z63.object({
78436
+ sectionBackgrounds: z63.array(sdkSectionBackgroundSchema).optional(),
77977
78437
  sectionOptions: sdkSectionOptionsConfigSchema.optional(),
77978
78438
  containerOptions: sdkContainerOptionsConfigSchema.optional()
77979
78439
  });
77980
- var sdkSiteLayoutConfigSchema = z62.object({
77981
- footerBlocks: z62.array(
77982
- z62.object({
77983
- id: z62.string().min(1).optional(),
77984
- kind: z62.string().min(1),
77985
- content: z62.record(z62.string(), z62.unknown()).optional()
78440
+ var sdkSiteLayoutConfigSchema = z63.object({
78441
+ footerBlocks: z63.array(
78442
+ z63.object({
78443
+ id: z63.string().min(1).optional(),
78444
+ kind: z63.string().min(1),
78445
+ content: z63.record(z63.string(), z63.unknown()).optional()
77986
78446
  })
77987
78447
  ).optional()
77988
78448
  });
77989
- var sdkFieldSelectOptionSchema = z62.object({
77990
- value: z62.string(),
77991
- label: z62.string()
78449
+ var sdkFieldSelectOptionSchema = z63.object({
78450
+ value: z63.string(),
78451
+ label: z63.string()
77992
78452
  });
77993
- var sdkBlockFieldConfigSchema = z62.object({
77994
- options: z62.array(sdkFieldSelectOptionSchema).optional()
78453
+ var sdkBlockFieldConfigSchema = z63.object({
78454
+ options: z63.array(sdkFieldSelectOptionSchema).optional()
77995
78455
  });
77996
- var sdkBlockFieldOptionsMapSchema = z62.record(
77997
- z62.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
78456
+ var sdkBlockFieldOptionsMapSchema = z63.record(
78457
+ z63.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
77998
78458
  message: "Block ID must be 'block.*' or 'custom.*' format"
77999
78459
  }),
78000
- z62.record(z62.string().min(1), sdkBlockFieldConfigSchema)
78460
+ z63.record(z63.string().min(1), sdkBlockFieldConfigSchema)
78001
78461
  ).optional();
78002
- var sdkContentTypeTemplateConfigSchema = z62.object({
78003
- blocks: z62.array(z62.unknown())
78462
+ var sdkContentTypeTemplateConfigSchema = z63.object({
78463
+ blocks: z63.array(z63.unknown())
78004
78464
  }).passthrough();
78005
- var sdkContentTypeConfigSchema = z62.object({
78006
- key: z62.string().min(1),
78007
- fields: z62.array(z62.unknown()),
78465
+ var sdkContentTypeConfigSchema = z63.object({
78466
+ key: z63.string().min(1),
78467
+ fields: z63.array(z63.unknown()),
78008
78468
  template: sdkContentTypeTemplateConfigSchema.nullable().optional()
78009
78469
  }).passthrough();
78010
- var sdkContentConfigSchema = z62.object({
78011
- contentTypes: z62.array(sdkContentTypeConfigSchema).optional(),
78012
- pages: z62.array(z62.unknown()).optional(),
78013
- entries: z62.array(z62.unknown()).optional(),
78014
- navigationMenus: z62.array(z62.unknown()).optional(),
78015
- settings: z62.unknown().optional()
78470
+ var sdkContentConfigSchema = z63.object({
78471
+ contentTypes: z63.array(sdkContentTypeConfigSchema).optional(),
78472
+ pages: z63.array(z63.unknown()).optional(),
78473
+ entries: z63.array(z63.unknown()).optional(),
78474
+ navigationMenus: z63.array(z63.unknown()).optional(),
78475
+ settings: z63.unknown().optional()
78016
78476
  }).passthrough();
78017
78477
  var SDK_WORKFLOW_ID_MAX_LENGTH = 120;
78018
78478
  var SDK_WORKFLOW_TITLE_MAX_LENGTH = 120;
@@ -78025,41 +78485,41 @@ var SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH = 120;
78025
78485
  var SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH = 500;
78026
78486
  var SDK_WORKFLOW_ID_PATTERN = /^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/;
78027
78487
  var SDK_WORKFLOW_ENDPOINT_PATTERN = /^\//;
78028
- var sdkWorkflowIdSchema = z62.string().min(1).max(SDK_WORKFLOW_ID_MAX_LENGTH).regex(SDK_WORKFLOW_ID_PATTERN, {
78488
+ var sdkWorkflowIdSchema = z63.string().min(1).max(SDK_WORKFLOW_ID_MAX_LENGTH).regex(SDK_WORKFLOW_ID_PATTERN, {
78029
78489
  message: "Workflow ID must start with a lowercase letter and use lowercase letters, numbers, dots, underscores, or hyphens"
78030
78490
  });
78031
- 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 "/"' });
78032
- var sdkWorkflowManualTriggerSchema = z62.object({
78033
- type: z62.literal("manual")
78491
+ var sdkWorkflowEndpointSchema = z63.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 "/"' });
78492
+ var sdkWorkflowManualTriggerSchema = z63.object({
78493
+ type: z63.literal("manual")
78034
78494
  }).strict();
78035
- var sdkWorkflowTriggerSchema = z62.discriminatedUnion("type", [
78495
+ var sdkWorkflowTriggerSchema = z63.discriminatedUnion("type", [
78036
78496
  sdkWorkflowManualTriggerSchema
78037
78497
  ]);
78038
- var sdkWorkflowConfirmationSchema = z62.object({
78039
- title: z62.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH),
78040
- body: z62.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH).optional()
78498
+ var sdkWorkflowConfirmationSchema = z63.object({
78499
+ title: z63.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH),
78500
+ body: z63.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH).optional()
78041
78501
  }).strict();
78042
- var sdkWorkflowConfigSchema = z62.object({
78502
+ var sdkWorkflowConfigSchema = z63.object({
78043
78503
  id: sdkWorkflowIdSchema,
78044
- title: z62.string().trim().min(1).max(SDK_WORKFLOW_TITLE_MAX_LENGTH),
78045
- description: z62.string().trim().min(1).max(SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH).optional(),
78046
- contentType: z62.string().trim().min(1).max(SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH),
78504
+ title: z63.string().trim().min(1).max(SDK_WORKFLOW_TITLE_MAX_LENGTH),
78505
+ description: z63.string().trim().min(1).max(SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH).optional(),
78506
+ contentType: z63.string().trim().min(1).max(SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH),
78047
78507
  endpoint: sdkWorkflowEndpointSchema,
78048
- triggers: z62.array(sdkWorkflowTriggerSchema).min(1).max(SDK_WORKFLOW_TRIGGER_MAX_COUNT),
78508
+ triggers: z63.array(sdkWorkflowTriggerSchema).min(1).max(SDK_WORKFLOW_TRIGGER_MAX_COUNT),
78049
78509
  confirmation: sdkWorkflowConfirmationSchema.optional()
78050
78510
  }).strict();
78051
- var sdkWorkflowsSchema = z62.array(sdkWorkflowConfigSchema).max(SDK_WORKFLOW_MAX_COUNT, "Maximum 50 workflows per site").refine((workflows) => {
78511
+ var sdkWorkflowsSchema = z63.array(sdkWorkflowConfigSchema).max(SDK_WORKFLOW_MAX_COUNT, "Maximum 50 workflows per site").refine((workflows) => {
78052
78512
  const ids = workflows.map((workflow) => workflow.id);
78053
78513
  return ids.length === new Set(ids).size;
78054
78514
  }, { message: "Workflow IDs must be unique" }).optional();
78055
- var riverbankSiteConfigInputSchema = z62.object({
78056
- siteId: z62.string().uuid(),
78057
- previewUrl: z62.string().url().optional(),
78058
- liveUrl: z62.string().url().optional(),
78515
+ var riverbankSiteConfigInputSchema = z63.object({
78516
+ siteId: z63.string().uuid(),
78517
+ previewUrl: z63.string().url().optional(),
78518
+ liveUrl: z63.string().url().optional(),
78059
78519
  theme: sdkThemeConfigSchema.optional(),
78060
78520
  styles: sdkSiteStyleConfigSchema.optional(),
78061
78521
  layout: sdkSiteLayoutConfigSchema.optional(),
78062
- customBlocks: z62.array(sdkCustomBlockInputSchema).max(100, "Maximum 100 custom blocks per site").refine((blocks) => {
78522
+ customBlocks: z63.array(sdkCustomBlockInputSchema).max(100, "Maximum 100 custom blocks per site").refine((blocks) => {
78063
78523
  const ids = blocks.map((b2) => b2.id);
78064
78524
  return ids.length === new Set(ids).size;
78065
78525
  }, { message: "Block IDs must be unique" }).optional(),
@@ -78067,43 +78527,43 @@ var riverbankSiteConfigInputSchema = z62.object({
78067
78527
  blockFieldExtensions: sdkBlockFieldExtensionsInputSchema.optional(),
78068
78528
  workflows: sdkWorkflowsSchema,
78069
78529
  content: sdkContentConfigSchema.optional(),
78070
- contentDir: z62.string().optional(),
78071
- sync: z62.object({
78072
- existingEntries: z62.enum(["skip", "update"]).optional()
78530
+ contentDir: z63.string().optional(),
78531
+ sync: z63.object({
78532
+ existingEntries: z63.enum(["skip", "update"]).optional()
78073
78533
  }).optional(),
78074
- deploy: z62.object({
78075
- verifyCommand: z62.string().optional(),
78076
- prebuildOutput: z62.string().optional()
78534
+ deploy: z63.object({
78535
+ verifyCommand: z63.string().optional(),
78536
+ prebuildOutput: z63.string().optional()
78077
78537
  }).optional(),
78078
- themeSource: z62.enum(["local", "cms"]).optional(),
78079
- activeTheme: z62.string().optional(),
78080
- enablePortal: z62.boolean().optional(),
78538
+ themeSource: z63.enum(["local", "cms"]).optional(),
78539
+ activeTheme: z63.string().optional(),
78540
+ enablePortal: z63.boolean().optional(),
78081
78541
  dashboard: dashboardConfigSchema.optional()
78082
78542
  }).strict();
78083
- var pushSdkConfigBodySchema = z62.object({
78543
+ var pushSdkConfigBodySchema = z63.object({
78084
78544
  config: riverbankSiteConfigInputSchema,
78085
- forceContentTypes: z62.boolean().optional()
78545
+ forceContentTypes: z63.boolean().optional()
78086
78546
  }).strict();
78087
78547
 
78088
78548
  // ../api/src/siteOnboarding.ts
78089
- import { z as z63 } from "zod";
78549
+ import { z as z64 } from "zod";
78090
78550
  var LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS = {
78091
78551
  configure_appointments: {
78092
78552
  requirementId: "configure_appointments",
78093
78553
  reason: "launch_anyway"
78094
78554
  }
78095
78555
  };
78096
- var acknowledgeLaunchRequirementRequestSchema = z63.discriminatedUnion(
78556
+ var acknowledgeLaunchRequirementRequestSchema = z64.discriminatedUnion(
78097
78557
  "requirementId",
78098
78558
  [
78099
- z63.object({
78100
- requirementId: z63.literal("review_generated_site")
78559
+ z64.object({
78560
+ requirementId: z64.literal("review_generated_site")
78101
78561
  }),
78102
- z63.object({
78103
- requirementId: z63.literal(
78562
+ z64.object({
78563
+ requirementId: z64.literal(
78104
78564
  LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS.configure_appointments.requirementId
78105
78565
  ),
78106
- overrideReason: z63.literal(
78566
+ overrideReason: z64.literal(
78107
78567
  LAUNCH_REQUIREMENT_OVERRIDE_DEFINITIONS.configure_appointments.reason
78108
78568
  )
78109
78569
  })
@@ -78279,79 +78739,79 @@ function isRecord4(value) {
78279
78739
  }
78280
78740
 
78281
78741
  // ../api/src/appointmentSetup.ts
78282
- import { z as z64 } from "zod";
78283
- var appointmentSetupRefSchema = z64.discriminatedUnion("kind", [
78284
- z64.object({ kind: z64.literal("existing"), id: z64.string().min(1) }),
78285
- z64.object({ kind: z64.literal("new"), draftId: z64.string().min(1) })
78742
+ import { z as z65 } from "zod";
78743
+ var appointmentSetupRefSchema = z65.discriminatedUnion("kind", [
78744
+ z65.object({ kind: z65.literal("existing"), id: z65.string().min(1) }),
78745
+ z65.object({ kind: z65.literal("new"), draftId: z65.string().min(1) })
78286
78746
  ]);
78287
- var appointmentSetupVenueChoiceSchema = z64.discriminatedUnion("kind", [
78288
- z64.object({ kind: z64.literal("none") }),
78289
- z64.object({ kind: z64.literal("existing"), venueId: z64.string().min(1) }),
78290
- z64.object({
78291
- kind: z64.literal("create"),
78292
- draftId: z64.string().min(1),
78293
- title: z64.string().trim().min(1),
78294
- description: z64.string().nullable(),
78295
- timezone: z64.string().trim().min(1).nullable(),
78296
- addressJson: z64.record(z64.string(), z64.unknown()),
78297
- locationJson: z64.object({ lat: z64.number(), lng: z64.number() }).nullable()
78747
+ var appointmentSetupVenueChoiceSchema = z65.discriminatedUnion("kind", [
78748
+ z65.object({ kind: z65.literal("none") }),
78749
+ z65.object({ kind: z65.literal("existing"), venueId: z65.string().min(1) }),
78750
+ z65.object({
78751
+ kind: z65.literal("create"),
78752
+ draftId: z65.string().min(1),
78753
+ title: z65.string().trim().min(1),
78754
+ description: z65.string().nullable(),
78755
+ timezone: z65.string().trim().min(1).nullable(),
78756
+ addressJson: z65.record(z65.string(), z65.unknown()),
78757
+ locationJson: z65.object({ lat: z65.number(), lng: z65.number() }).nullable()
78298
78758
  })
78299
78759
  ]);
78300
- var appointmentSetupPaymentDraftSchema = z64.object({
78301
- priceType: z64.union([z64.literal("free"), z64.literal("paid")])
78302
- });
78303
- var appointmentSetupServiceAssignmentDraftSchema = z64.discriminatedUnion("kind", [
78304
- z64.object({ kind: z64.literal("all_practitioners") }),
78305
- z64.object({
78306
- kind: z64.literal("selected_practitioners"),
78307
- resourceRefs: z64.array(appointmentSetupRefSchema)
78760
+ var appointmentSetupPaymentDraftSchema = z65.object({
78761
+ priceType: z65.union([z65.literal("free"), z65.literal("paid")])
78762
+ });
78763
+ var appointmentSetupServiceAssignmentDraftSchema = z65.discriminatedUnion("kind", [
78764
+ z65.object({ kind: z65.literal("all_practitioners") }),
78765
+ z65.object({
78766
+ kind: z65.literal("selected_practitioners"),
78767
+ resourceRefs: z65.array(appointmentSetupRefSchema)
78308
78768
  })
78309
78769
  ]);
78310
- var appointmentSetupServiceDraftSchema = z64.object({
78770
+ var appointmentSetupServiceDraftSchema = z65.object({
78311
78771
  ref: appointmentSetupRefSchema,
78312
- title: z64.string().trim().min(1),
78313
- description: z64.string().nullable(),
78314
- durationMinutes: z64.number().int().positive(),
78315
- priceAmount: z64.number().int().nonnegative().nullable(),
78316
- isActive: z64.boolean(),
78317
- locationType: z64.union([
78318
- z64.literal("virtual"),
78319
- z64.literal("in_person"),
78320
- z64.literal("hybrid")
78772
+ title: z65.string().trim().min(1),
78773
+ description: z65.string().nullable(),
78774
+ durationMinutes: z65.number().int().positive(),
78775
+ priceAmount: z65.number().int().nonnegative().nullable(),
78776
+ isActive: z65.boolean(),
78777
+ locationType: z65.union([
78778
+ z65.literal("virtual"),
78779
+ z65.literal("in_person"),
78780
+ z65.literal("hybrid")
78321
78781
  ]),
78322
78782
  venue: appointmentSetupVenueChoiceSchema,
78323
- timezone: z64.string().trim().min(1).nullable(),
78783
+ timezone: z65.string().trim().min(1).nullable(),
78324
78784
  payment: appointmentSetupPaymentDraftSchema,
78325
78785
  assignment: appointmentSetupServiceAssignmentDraftSchema
78326
78786
  });
78327
- var appointmentSetupPractitionerDraftSchema = z64.object({
78787
+ var appointmentSetupPractitionerDraftSchema = z65.object({
78328
78788
  ref: appointmentSetupRefSchema,
78329
- displayName: z64.string().trim().min(1),
78330
- bio: z64.string().nullable(),
78331
- timezone: z64.string().trim().min(1),
78332
- colorHex: z64.string().nullable()
78333
- });
78334
- var appointmentSetupWeeklyWindowDraftSchema = z64.object({
78335
- weekday: z64.number().int().min(0).max(6),
78336
- startTime: z64.string(),
78337
- endTime: z64.string()
78338
- });
78339
- var appointmentSetupAvailabilityDraftSchema = z64.object({
78340
- kind: z64.literal("weekly_windows"),
78789
+ displayName: z65.string().trim().min(1),
78790
+ bio: z65.string().nullable(),
78791
+ timezone: z65.string().trim().min(1),
78792
+ colorHex: z65.string().nullable()
78793
+ });
78794
+ var appointmentSetupWeeklyWindowDraftSchema = z65.object({
78795
+ weekday: z65.number().int().min(0).max(6),
78796
+ startTime: z65.string(),
78797
+ endTime: z65.string()
78798
+ });
78799
+ var appointmentSetupAvailabilityDraftSchema = z65.object({
78800
+ kind: z65.literal("weekly_windows"),
78341
78801
  resourceRef: appointmentSetupRefSchema,
78342
78802
  serviceRef: appointmentSetupRefSchema.nullable(),
78343
- windows: z64.array(appointmentSetupWeeklyWindowDraftSchema)
78803
+ windows: z65.array(appointmentSetupWeeklyWindowDraftSchema)
78344
78804
  });
78345
78805
  var APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX = 28 * 24 * 60;
78346
78806
  var APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX = 10 * 365 * 24 * 60;
78347
- var appointmentSetupBookingNoticeSchema = z64.object({
78348
- minLeadMinutes: z64.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
78349
- maxBookingNoticeMinutes: z64.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
78350
- });
78351
- var applyAppointmentSetupRequestSchema = z64.object({
78352
- services: z64.array(appointmentSetupServiceDraftSchema),
78353
- practitioners: z64.array(appointmentSetupPractitionerDraftSchema),
78354
- availability: z64.array(appointmentSetupAvailabilityDraftSchema),
78807
+ var appointmentSetupBookingNoticeSchema = z65.object({
78808
+ minLeadMinutes: z65.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MIN_LEAD_MINUTES_MAX),
78809
+ maxBookingNoticeMinutes: z65.number().int().nonnegative().max(APPOINTMENT_DEFAULT_MAX_BOOKING_NOTICE_MINUTES_MAX)
78810
+ });
78811
+ var applyAppointmentSetupRequestSchema = z65.object({
78812
+ services: z65.array(appointmentSetupServiceDraftSchema),
78813
+ practitioners: z65.array(appointmentSetupPractitionerDraftSchema),
78814
+ availability: z65.array(appointmentSetupAvailabilityDraftSchema),
78355
78815
  bookingNotice: appointmentSetupBookingNoticeSchema
78356
78816
  });
78357
78817
 
@@ -78370,24 +78830,24 @@ var STAFF_CANCELLATION_CONTEXT_CATEGORIES = [
78370
78830
  ];
78371
78831
 
78372
78832
  // ../api/src/siteBanner.ts
78373
- import { z as z65 } from "zod";
78833
+ import { z as z66 } from "zod";
78374
78834
  var SITE_BANNER_SCOPE_VALUES = ["homepage", "all-pages"];
78375
78835
  var SITE_BANNER_TONE_VALUES = ["announcement", "promotion", "notice", "warning"];
78376
78836
  var SITE_BANNER_MAX_TEXT_LENGTH = 320;
78377
78837
  var SITE_BANNER_MAX_PARAGRAPHS = 2;
78378
- var siteBannerScopeSchema = z65.enum(SITE_BANNER_SCOPE_VALUES);
78379
- var siteBannerToneSchema = z65.enum(SITE_BANNER_TONE_VALUES);
78380
- var siteBannerBodySchema = z65.unknown().transform(unwrapRichTextValue);
78381
- var siteBannerCtaSchema = z65.object({
78382
- label: z65.string().trim().min(1),
78838
+ var siteBannerScopeSchema = z66.enum(SITE_BANNER_SCOPE_VALUES);
78839
+ var siteBannerToneSchema = z66.enum(SITE_BANNER_TONE_VALUES);
78840
+ var siteBannerBodySchema = z66.unknown().transform(unwrapRichTextValue);
78841
+ var siteBannerCtaSchema = z66.object({
78842
+ label: z66.string().trim().min(1),
78383
78843
  link: linkPayloadSchema
78384
78844
  });
78385
- var siteBannerSettingsSchema = z65.discriminatedUnion("enabled", [
78386
- z65.object({
78387
- enabled: z65.literal(false)
78845
+ var siteBannerSettingsSchema = z66.discriminatedUnion("enabled", [
78846
+ z66.object({
78847
+ enabled: z66.literal(false)
78388
78848
  }),
78389
- z65.object({
78390
- enabled: z65.literal(true),
78849
+ z66.object({
78850
+ enabled: z66.literal(true),
78391
78851
  scope: siteBannerScopeSchema,
78392
78852
  tone: siteBannerToneSchema,
78393
78853
  body: siteBannerBodySchema,
@@ -78401,7 +78861,7 @@ var siteBannerSettingsInputSchema = siteBannerSettingsSchema.superRefine((value,
78401
78861
  const analysis = analyzeSiteBannerBody(value.body);
78402
78862
  for (const issue of analysis.issues) {
78403
78863
  ctx.addIssue({
78404
- code: z65.ZodIssueCode.custom,
78864
+ code: z66.ZodIssueCode.custom,
78405
78865
  path: ["body"],
78406
78866
  message: siteBannerBodyIssueMessage(issue)
78407
78867
  });
@@ -78625,71 +79085,71 @@ function parsePublicProductCategorySelector(value) {
78625
79085
  }
78626
79086
 
78627
79087
  // ../api/src/aiPlayground.ts
78628
- import { z as z66 } from "zod";
78629
- var Rfc6902PatchOp = z66.discriminatedUnion("op", [
79088
+ import { z as z67 } from "zod";
79089
+ var Rfc6902PatchOp = z67.discriminatedUnion("op", [
78630
79090
  // Standard RFC-6902 operations
78631
- z66.object({
78632
- op: z66.literal("add"),
78633
- path: z66.string(),
78634
- value: z66.unknown()
79091
+ z67.object({
79092
+ op: z67.literal("add"),
79093
+ path: z67.string(),
79094
+ value: z67.unknown()
78635
79095
  }),
78636
- z66.object({
78637
- op: z66.literal("remove"),
78638
- path: z66.string()
79096
+ z67.object({
79097
+ op: z67.literal("remove"),
79098
+ path: z67.string()
78639
79099
  }),
78640
- z66.object({
78641
- op: z66.literal("replace"),
78642
- path: z66.string(),
78643
- value: z66.unknown()
79100
+ z67.object({
79101
+ op: z67.literal("replace"),
79102
+ path: z67.string(),
79103
+ value: z67.unknown()
78644
79104
  }),
78645
- z66.object({
78646
- op: z66.literal("move"),
78647
- from: z66.string(),
78648
- path: z66.string()
79105
+ z67.object({
79106
+ op: z67.literal("move"),
79107
+ from: z67.string(),
79108
+ path: z67.string()
78649
79109
  }),
78650
- z66.object({
78651
- op: z66.literal("copy"),
78652
- from: z66.string(),
78653
- path: z66.string()
79110
+ z67.object({
79111
+ op: z67.literal("copy"),
79112
+ from: z67.string(),
79113
+ path: z67.string()
78654
79114
  }),
78655
79115
  // Block-level operations (Phase 2)
78656
- z66.object({
78657
- op: z66.literal("add_block"),
78658
- blockKind: z66.string(),
78659
- afterBlockId: z66.string().nullable(),
78660
- content: z66.record(z66.string(), z66.unknown()),
78661
- rationale: z66.string()
79116
+ z67.object({
79117
+ op: z67.literal("add_block"),
79118
+ blockKind: z67.string(),
79119
+ afterBlockId: z67.string().nullable(),
79120
+ content: z67.record(z67.string(), z67.unknown()),
79121
+ rationale: z67.string()
78662
79122
  }),
78663
- z66.object({
78664
- op: z66.literal("delete_block"),
78665
- blockId: z66.string(),
78666
- rationale: z66.string()
79123
+ z67.object({
79124
+ op: z67.literal("delete_block"),
79125
+ blockId: z67.string(),
79126
+ rationale: z67.string()
78667
79127
  }),
78668
- z66.object({
78669
- op: z66.literal("reorder_block"),
78670
- blockId: z66.string(),
78671
- afterBlockId: z66.string().nullable(),
78672
- rationale: z66.string()
79128
+ z67.object({
79129
+ op: z67.literal("reorder_block"),
79130
+ blockId: z67.string(),
79131
+ afterBlockId: z67.string().nullable(),
79132
+ rationale: z67.string()
78673
79133
  })
78674
79134
  ]);
78675
- var PlaygroundProposeRequest = z66.object({
78676
- request: z66.string().min(1).max(2e3)
79135
+ var PlaygroundProposeRequest = z67.object({
79136
+ request: z67.string().min(1).max(2e3)
78677
79137
  });
78678
- var MultiPagePatchEnvelope = z66.object({
78679
- pageId: z66.string(),
78680
- blockId: z66.string().optional(),
79138
+ var MultiPagePatchEnvelope = z67.object({
79139
+ pageId: z67.string(),
79140
+ blockId: z67.string().optional(),
78681
79141
  // Not present for page-level ops
78682
- blockKind: z66.string().optional(),
78683
- blockPurpose: z66.string().optional().nullable(),
78684
- ops: z66.array(Rfc6902PatchOp),
78685
- rationale: z66.string(),
78686
- currentContent: z66.record(z66.string(), z66.unknown()).optional()
79142
+ blockKind: z67.string().optional(),
79143
+ blockPurpose: z67.string().optional().nullable(),
79144
+ ops: z67.array(Rfc6902PatchOp),
79145
+ rationale: z67.string(),
79146
+ currentContent: z67.record(z67.string(), z67.unknown()).optional()
78687
79147
  });
78688
- var MultiPageUpdateResponse = z66.object({
78689
- patches: z66.array(MultiPagePatchEnvelope),
78690
- assistantMessage: z66.string(),
78691
- pagesModified: z66.number(),
78692
- toolCallsUsed: z66.number()
79148
+ var MultiPageUpdateResponse = z67.object({
79149
+ patches: z67.array(MultiPagePatchEnvelope),
79150
+ assistantMessage: z67.string(),
79151
+ pagesModified: z67.number(),
79152
+ toolCallsUsed: z67.number()
78693
79153
  });
78694
79154
 
78695
79155
  // src/data/prefetchBlockData.ts
@@ -78698,6 +79158,7 @@ var SUPPORTED_LOADER_ENDPOINTS2 = [
78698
79158
  "getPublishedEntryPreview",
78699
79159
  "listPublicEvents",
78700
79160
  "listPublicCourses",
79161
+ "listPublicTeamMembers",
78701
79162
  "listPublicProducts",
78702
79163
  "listPublicPasses",
78703
79164
  "listPublicMemberships",
@@ -78862,6 +79323,16 @@ async function prefetchBlockData2(page, context, client, options) {
78862
79323
  const parsedLimit = typeof limit === "string" ? Number.parseInt(limit, 10) : typeof limit === "number" ? limit : void 0;
78863
79324
  return await client.listPublicCourses({ siteId, limit: parsedLimit, stage });
78864
79325
  }
79326
+ case "listPublicTeamMembers": {
79327
+ const { siteId, stage } = resolvedParams ?? {};
79328
+ if (!siteId) {
79329
+ throw new Error("listPublicTeamMembers requires siteId param");
79330
+ }
79331
+ return await client.listPublicTeamMembers({
79332
+ siteId,
79333
+ stage: typeof stage === "string" ? stage : void 0
79334
+ });
79335
+ }
78865
79336
  case "listPublicProducts": {
78866
79337
  const { siteId, stage, categorySelector } = resolvedParams ?? {};
78867
79338
  if (!siteId) {