@riverbankcms/sdk 0.60.3 → 0.60.6

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 (60) hide show
  1. package/dist/_dts/api/src/bookingVerticals.d.ts +1 -0
  2. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +3 -39
  3. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +2 -0
  4. package/dist/_dts/blocks/src/system/node/fragments/ctaButton.d.ts +2 -0
  5. package/dist/_dts/blocks/src/system/runtime/shared/themedButtonClass.d.ts +11 -0
  6. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +10 -2
  7. package/dist/_dts/core/src/participants.d.ts +32 -1
  8. package/dist/_dts/core/src/rectification.d.ts +79 -0
  9. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +6 -6
  10. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +17 -15
  11. package/dist/_dts/sdk/src/client/types.d.ts +1 -0
  12. package/dist/_dts/sdk/src/version.d.ts +1 -1
  13. package/dist/_dts/theme-core/src/buttons/personalities/brushed-wash.d.ts +7 -2
  14. package/dist/_dts/theme-core/src/buttons/personalities/confident-chip.d.ts +7 -2
  15. package/dist/_dts/theme-core/src/buttons/personalities/editorial-link.d.ts +7 -2
  16. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +86 -5
  17. package/dist/_dts/theme-core/src/buttons/personalities/ink-stamp.d.ts +7 -2
  18. package/dist/_dts/theme-core/src/buttons/personalities/pebble.d.ts +7 -2
  19. package/dist/_dts/theme-core/src/buttons/personalities/soft-pill.d.ts +7 -2
  20. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +10 -10
  21. package/dist/_dts/theme-core/src/palette/variants/brand-led.d.ts +33 -9
  22. package/dist/_dts/theme-core/src/palette/variants/high-contrast.d.ts +33 -9
  23. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +200 -4
  24. package/dist/_dts/theme-core/src/palette/variants/soft-natural.d.ts +33 -9
  25. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +10 -10
  26. package/dist/_dts/theme-core/src/palette/variants/warm-neutral.d.ts +33 -9
  27. package/dist/_dts/theme-core/src/site-styles/curatedChoices.d.ts +27 -0
  28. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +48 -194
  29. package/dist/_dts/theme-core/src/site-styles/index.d.ts +2 -1
  30. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +12 -14
  31. package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +46 -0
  32. package/dist/_dts/ui/src/palette/ColorChooserDialog.d.ts +47 -0
  33. package/dist/_dts/ui/src/palette/ColorSlotButton.d.ts +15 -0
  34. package/dist/_dts/ui/src/palette/ColorSwatchButton.d.ts +15 -0
  35. package/dist/_dts/ui/src/palette/PaletteTokenEditor.d.ts +50 -0
  36. package/dist/_dts/ui/src/palette/hex.d.ts +23 -0
  37. package/dist/_dts/ui/src/palette/index.d.ts +14 -0
  38. package/dist/cli/index.mjs +1023 -923
  39. package/dist/client/client.mjs +3410 -3221
  40. package/dist/client/hooks.mjs +1625 -1564
  41. package/dist/client/rendering/client.mjs +132 -37
  42. package/dist/client/rendering/islands.mjs +91 -30
  43. package/dist/client/rendering.mjs +1237 -1049
  44. package/dist/preview-next/client/runtime.mjs +3095 -2736
  45. package/dist/server/components.mjs +2381 -2255
  46. package/dist/server/config-validation.mjs +1625 -1564
  47. package/dist/server/config.mjs +1625 -1564
  48. package/dist/server/data.mjs +1625 -1564
  49. package/dist/server/index.mjs +4 -3
  50. package/dist/server/next.mjs +3233 -3106
  51. package/dist/server/page-converter.mjs +1625 -1564
  52. package/dist/server/prebuild.mjs +1 -1
  53. package/dist/server/rendering/server.mjs +2381 -2255
  54. package/dist/server/rendering.mjs +2381 -2255
  55. package/dist/server/routing.mjs +2340 -2271
  56. package/dist/server/server.mjs +1629 -1567
  57. package/dist/server/theme-bridge.mjs +130 -126
  58. package/dist/server/theme.mjs +131 -129
  59. package/package.json +1 -1
  60. 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
  }
@@ -11518,6 +11534,7 @@ var init_EventCard = __esm({
11518
11534
  init_EventCardIcons();
11519
11535
  init_eventCapacity();
11520
11536
  init_utils();
11537
+ init_themedButtonClass();
11521
11538
  EventCard = ({
11522
11539
  event,
11523
11540
  cardVariant = "default",
@@ -11543,7 +11560,7 @@ var init_EventCard = __esm({
11543
11560
  const isSoldOut = cta.hidden;
11544
11561
  const { available: spotsLeft } = getEventAvailability(event);
11545
11562
  const cardClass = `card-${cardVariant}`;
11546
- const buttonClass = `${buttonVariant} button-${buttonVariant}`;
11563
+ const buttonClass = themedButtonClass({ variant: buttonVariant, size: "md" });
11547
11564
  const title = event.title;
11548
11565
  const summary = event.presentation?.summary ?? event.description;
11549
11566
  const image = event.presentation?.image ?? null;
@@ -11625,6 +11642,7 @@ var init_EventCompactRow = __esm({
11625
11642
  "use strict";
11626
11643
  init_utils();
11627
11644
  init_EventCardIcons();
11645
+ init_themedButtonClass();
11628
11646
  EventCompactRow = ({
11629
11647
  event,
11630
11648
  buttonVariant = "primary",
@@ -11636,7 +11654,7 @@ var init_EventCompactRow = __esm({
11636
11654
  const price = formatEventPrice(event);
11637
11655
  const teacherLine = formatEventTeacherLine(event);
11638
11656
  const cta = resolveEventCta(event, buttonText);
11639
- const buttonClass = `${buttonVariant} button-${buttonVariant}`;
11657
+ const buttonClass = themedButtonClass({ variant: buttonVariant, size: "sm" });
11640
11658
  return /* @__PURE__ */ jsxs17("div", { className: "event-compact-row", children: [
11641
11659
  /* @__PURE__ */ jsxs17("div", { className: "event-compact-row-content", children: [
11642
11660
  /* @__PURE__ */ jsxs17("div", { className: "event-compact-row-top", children: [
@@ -11708,6 +11726,7 @@ var init_EventSpotlight = __esm({
11708
11726
  "../blocks/src/system/runtime/nodes/events/EventSpotlight.tsx"() {
11709
11727
  "use strict";
11710
11728
  init_shared3();
11729
+ init_themedButtonClass();
11711
11730
  EventSpotlight = ({
11712
11731
  events,
11713
11732
  layout = "grid",
@@ -11729,7 +11748,7 @@ var init_EventSpotlight = __esm({
11729
11748
  }
11730
11749
  const containerClass = getContainerClass(layout, columns);
11731
11750
  const cardOrientation = getCardOrientation(layout);
11732
- const buttonClass = `${buttonVariant} button-${buttonVariant}`;
11751
+ const buttonClass = themedButtonClass({ variant: buttonVariant, size: "md" });
11733
11752
  return /* @__PURE__ */ jsxs19("div", { className: `event-spotlight-section ${className || ""}`, "data-block": "event-spotlight", children: [
11734
11753
  /* @__PURE__ */ jsx33("div", { className: `event-spotlight ${containerClass}`, children: normalizedEvents.map((event) => /* @__PURE__ */ jsx33(
11735
11754
  EventCard,
@@ -13151,7 +13170,8 @@ function ctaButton(opts) {
13151
13170
  },
13152
13171
  size: {
13153
13172
  $bind: {
13154
- from: sizePath
13173
+ from: sizePath,
13174
+ fallback: opts?.sizeFallback ?? "md"
13155
13175
  }
13156
13176
  },
13157
13177
  ...opts?.className ? { className: opts.className } : {},
@@ -24039,7 +24059,10 @@ function renderCalendarGrid(display) {
24039
24059
  "button",
24040
24060
  {
24041
24061
  type: "button",
24042
- className: `${display.buttonVariant} button-${display.buttonVariant} rb-px-3 rb-py-1`,
24062
+ className: themedButtonClass({
24063
+ variant: display.buttonVariant,
24064
+ size: "sm"
24065
+ }),
24043
24066
  children: "Today"
24044
24067
  }
24045
24068
  )
@@ -24122,7 +24145,10 @@ function renderTimetableSsr(display) {
24122
24145
  "button",
24123
24146
  {
24124
24147
  type: "button",
24125
- className: `${display.buttonVariant} button-${display.buttonVariant} rb-px-3 rb-py-1`,
24148
+ className: themedButtonClass({
24149
+ variant: display.buttonVariant,
24150
+ size: "sm"
24151
+ }),
24126
24152
  children: "Today"
24127
24153
  }
24128
24154
  )
@@ -24247,6 +24273,7 @@ var init_EventCalendar_server = __esm({
24247
24273
  init_renderEventListItem();
24248
24274
  init_utils();
24249
24275
  init_timetableModel();
24276
+ init_themedButtonClass();
24250
24277
  EventCalendarSSR = (props2) => {
24251
24278
  const islandProps = buildEventCalendarInteractiveIslandProps(props2);
24252
24279
  const display = islandProps.render.display;
@@ -24377,6 +24404,7 @@ var init_form_server = __esm({
24377
24404
  "use strict";
24378
24405
  init_clsx();
24379
24406
  init_ssr();
24407
+ init_themedButtonClass();
24380
24408
  init_form_interactive();
24381
24409
  FormNodeSSR = ({
24382
24410
  blockId,
@@ -24510,7 +24538,18 @@ var init_form_server = __esm({
24510
24538
  }
24511
24539
  return renderField(group.field);
24512
24540
  }),
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 }) }) })
24541
+ /* @__PURE__ */ jsx46("div", { className: "fb-actions", children: /* @__PURE__ */ jsx46("div", { className: "fb-actions-inner", children: /* @__PURE__ */ jsx46(
24542
+ "button",
24543
+ {
24544
+ type: "submit",
24545
+ className: themedButtonClass({
24546
+ variant: "primary",
24547
+ size: "md",
24548
+ extraClassName: "rb-w-full rb-sm-w-auto"
24549
+ }),
24550
+ children: display.submitLabel
24551
+ }
24552
+ ) }) })
24514
24553
  ]
24515
24554
  }
24516
24555
  )
@@ -24592,7 +24631,14 @@ function NewsletterFormSSR({
24592
24631
  ),
24593
24632
  /* @__PURE__ */ jsxs32("div", { className: "newsletter-form-fields", children: [
24594
24633
  fields3.map(renderField),
24595
- /* @__PURE__ */ jsx47("div", { className: "newsletter-submit", children: /* @__PURE__ */ jsx47("button", { type: "submit", className: "primary button-primary", children: display.buttonLabel }) })
24634
+ /* @__PURE__ */ jsx47("div", { className: "newsletter-submit", children: /* @__PURE__ */ jsx47(
24635
+ "button",
24636
+ {
24637
+ type: "submit",
24638
+ className: themedButtonClass({ variant: "primary", size: "md" }),
24639
+ children: display.buttonLabel
24640
+ }
24641
+ ) })
24596
24642
  ] }),
24597
24643
  display.privacyNote && /* @__PURE__ */ jsx47("p", { className: "newsletter-privacy-note", children: display.privacyNote })
24598
24644
  ] })
@@ -24606,6 +24652,7 @@ var init_newsletter_form_server = __esm({
24606
24652
  "use strict";
24607
24653
  init_clsx();
24608
24654
  init_ssr();
24655
+ init_themedButtonClass();
24609
24656
  init_newsletter_form_interactive();
24610
24657
  newsletter_form_server_default = NewsletterFormSSR;
24611
24658
  }
@@ -32894,6 +32941,7 @@ var init_PaymentSelectionStep = __esm({
32894
32941
  init_lucide_react();
32895
32942
  init_utils3();
32896
32943
  init_spinner();
32944
+ init_themedButtonClass();
32897
32945
  init_CheckIcon2();
32898
32946
  init_SelectableOptionCard();
32899
32947
  PaymentSelectionStep = ({
@@ -32994,7 +33042,7 @@ var init_PaymentSelectionStep = __esm({
32994
33042
  "button",
32995
33043
  {
32996
33044
  type: "button",
32997
- className: "primary button-primary",
33045
+ className: themedButtonClass({ variant: "primary", size: "md" }),
32998
33046
  disabled: !email.trim(),
32999
33047
  onClick: onRequestLogin,
33000
33048
  children: "Email me a login link"
@@ -34718,7 +34766,7 @@ function EventRegistrationWizard(props2) {
34718
34766
  } = props2;
34719
34767
  const maxTicketsNum = parseInt(maxTickets, 10) || 5;
34720
34768
  const showSpamProtection = spamProtectionEnabled ?? isSpamProtectionEnabled();
34721
- const buttonClass = `${buttonVariant} button-${buttonVariant}`;
34769
+ const buttonClass = themedButtonClass({ variant: buttonVariant, size: "md" });
34722
34770
  const wizard = useEventRegistrationWizard({
34723
34771
  anchorId: EVENT_REGISTRATION_ANCHOR_ID,
34724
34772
  occurrenceContext: occurrenceContext ?? null,
@@ -34855,6 +34903,7 @@ var init_EventRegistrationWizard = __esm({
34855
34903
  init_useEventRegistrationWizard();
34856
34904
  init_MagicLinkForm();
34857
34905
  init_spinner();
34906
+ init_themedButtonClass();
34858
34907
  init_event_registration2();
34859
34908
  EVENT_REGISTRATION_ANCHOR_ID = "event-registration";
34860
34909
  EVENT_PORTAL_AUTH_COPY = {
@@ -35300,7 +35349,7 @@ function ErrorStep2({
35300
35349
  buttonVariant = "primary",
35301
35350
  onRetry
35302
35351
  }) {
35303
- const buttonClass = `${buttonVariant} button-${buttonVariant}`;
35352
+ const buttonClass = themedButtonClass({ variant: buttonVariant, size: "md" });
35304
35353
  return /* @__PURE__ */ jsxs73("div", { className: "cr-error", role: "alert", children: [
35305
35354
  /* @__PURE__ */ jsx100(StateIcon, { variant: "error", children: /* @__PURE__ */ jsx100(CrossIcon, {}) }),
35306
35355
  /* @__PURE__ */ jsx100("h3", { className: "cr-error__title", children: "Enrollment Failed" }),
@@ -35312,6 +35361,7 @@ var init_ErrorStep2 = __esm({
35312
35361
  "../blocks/src/system/runtime/nodes/course-registration/ErrorStep.tsx"() {
35313
35362
  "use strict";
35314
35363
  init_shared6();
35364
+ init_themedButtonClass();
35315
35365
  }
35316
35366
  });
35317
35367
 
@@ -35323,7 +35373,7 @@ function VerifyingTimeoutStep2({
35323
35373
  onCheckAgain,
35324
35374
  supportEmail
35325
35375
  }) {
35326
- const buttonClass = `${buttonVariant} button-${buttonVariant}`;
35376
+ const buttonClass = themedButtonClass({ variant: buttonVariant, size: "md" });
35327
35377
  return /* @__PURE__ */ jsxs74("div", { className: "cr-error", role: "alert", children: [
35328
35378
  /* @__PURE__ */ jsx101(StateIcon, { variant: "warning", children: /* @__PURE__ */ jsx101(ClockIcon, {}) }),
35329
35379
  /* @__PURE__ */ jsx101("h3", { className: "cr-error__title", children: "Payment Verification Taking Longer" }),
@@ -35340,6 +35390,7 @@ var init_VerifyingTimeoutStep2 = __esm({
35340
35390
  "../blocks/src/system/runtime/nodes/course-registration/VerifyingTimeoutStep.tsx"() {
35341
35391
  "use strict";
35342
35392
  init_shared6();
35393
+ init_themedButtonClass();
35343
35394
  }
35344
35395
  });
35345
35396
 
@@ -35351,7 +35402,7 @@ function PaymentFailedStep2({
35351
35402
  buttonVariant = "primary",
35352
35403
  onRetry
35353
35404
  }) {
35354
- const buttonClass = `${buttonVariant} button-${buttonVariant}`;
35405
+ const buttonClass = themedButtonClass({ variant: buttonVariant, size: "md" });
35355
35406
  return /* @__PURE__ */ jsxs75("div", { className: "cr-payment-failed", role: "alert", children: [
35356
35407
  /* @__PURE__ */ jsx102(StateIcon, { variant: "error", children: /* @__PURE__ */ jsx102(CrossIcon, {}) }),
35357
35408
  /* @__PURE__ */ jsx102("h3", { className: "cr-payment-failed__title", children: "Payment Failed" }),
@@ -35363,6 +35414,7 @@ var init_PaymentFailedStep2 = __esm({
35363
35414
  "../blocks/src/system/runtime/nodes/course-registration/PaymentFailedStep.tsx"() {
35364
35415
  "use strict";
35365
35416
  init_shared6();
35417
+ init_themedButtonClass();
35366
35418
  }
35367
35419
  });
35368
35420
 
@@ -36355,7 +36407,7 @@ function CourseRegistrationWizard(props2) {
36355
36407
  handleRetry,
36356
36408
  handleBookingModeChange
36357
36409
  } = useCourseRegistrationWizard(props2);
36358
- const buttonClass = `${buttonVariant} button-${buttonVariant}`;
36410
+ const buttonClass = themedButtonClass({ variant: buttonVariant, size: "md" });
36359
36411
  if (scopedCourses.length === 0) {
36360
36412
  return /* @__PURE__ */ jsx106(
36361
36413
  "div",
@@ -36765,6 +36817,7 @@ var init_CourseRegistrationWizard = __esm({
36765
36817
  init_PaymentFailedStep2();
36766
36818
  init_VerifyingTimeoutStep2();
36767
36819
  init_spinner();
36820
+ init_themedButtonClass();
36768
36821
  }
36769
36822
  });
36770
36823
 
@@ -41154,6 +41207,7 @@ var init_EventPaginatedListView_client = __esm({
41154
41207
  init_EventCompactRow();
41155
41208
  init_EmptyState();
41156
41209
  init_EventListing_view();
41210
+ init_themedButtonClass();
41157
41211
  EventPaginatedListView = ({
41158
41212
  filters,
41159
41213
  display,
@@ -41196,7 +41250,10 @@ var init_EventPaginatedListView_client = __esm({
41196
41250
  {
41197
41251
  type: "button",
41198
41252
  onClick: loadMore,
41199
- className: `${display.buttonVariant} button-${display.buttonVariant}`,
41253
+ className: themedButtonClass({
41254
+ variant: display.buttonVariant,
41255
+ size: "md"
41256
+ }),
41200
41257
  children: "Try again"
41201
41258
  }
41202
41259
  )
@@ -41207,11 +41264,25 @@ var init_EventPaginatedListView_client = __esm({
41207
41264
  type: "button",
41208
41265
  onClick: loadMore,
41209
41266
  disabled: loading,
41210
- className: `${display.buttonVariant} button-${display.buttonVariant} ${loading ? "rb-opacity-50 rb-cursor-wait" : ""}`,
41267
+ className: themedButtonClass({
41268
+ variant: display.buttonVariant,
41269
+ size: "md",
41270
+ extraClassName: loading ? "rb-opacity-50 rb-cursor-wait" : null
41271
+ }),
41211
41272
  children: loading ? "Loading..." : loadMoreText
41212
41273
  }
41213
41274
  ) }) : 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
41275
+ paginationMode === "seeAllLink" && seeAllUrl && hasMore ? /* @__PURE__ */ jsx124("div", { className: "rb-mt-8 rb-text-center", children: /* @__PURE__ */ jsx124(
41276
+ "a",
41277
+ {
41278
+ href: seeAllUrl,
41279
+ className: themedButtonClass({
41280
+ variant: display.buttonVariant,
41281
+ size: "md"
41282
+ }),
41283
+ children: loadMoreText
41284
+ }
41285
+ ) }) : null
41215
41286
  ] }),
41216
41287
  renderEventCard: (event) => display.listLayout === "compact" ? /* @__PURE__ */ jsx124(
41217
41288
  EventCompactRow,
@@ -42555,6 +42626,7 @@ var init_EventCombined_client = __esm({
42555
42626
  init_EventModalContext();
42556
42627
  init_EventModals();
42557
42628
  init_utils();
42629
+ init_themedButtonClass();
42558
42630
  EventCombinedClient = ({
42559
42631
  events: initialEvents,
42560
42632
  siteId,
@@ -42880,7 +42952,7 @@ var init_EventCombined_client = __esm({
42880
42952
  {
42881
42953
  type: "button",
42882
42954
  onClick: goToToday,
42883
- className: `${buttonVariant} button-${buttonVariant} rb-px-3 rb-py-1`,
42955
+ className: themedButtonClass({ variant: buttonVariant, size: "sm" }),
42884
42956
  children: "Today"
42885
42957
  }
42886
42958
  )
@@ -43197,6 +43269,7 @@ var init_EventCalendar_client = __esm({
43197
43269
  init_EventModalContext();
43198
43270
  init_EventModals();
43199
43271
  init_WeekTimetableView();
43272
+ init_themedButtonClass();
43200
43273
  EventCalendarClient = ({
43201
43274
  render
43202
43275
  }) => {
@@ -43485,7 +43558,10 @@ var init_EventCalendar_client = __esm({
43485
43558
  {
43486
43559
  type: "button",
43487
43560
  onClick: onToday,
43488
- className: `${display.buttonVariant} button-${display.buttonVariant} rb-px-3 rb-py-1`,
43561
+ className: themedButtonClass({
43562
+ variant: display.buttonVariant,
43563
+ size: "sm"
43564
+ }),
43489
43565
  children: "Today"
43490
43566
  }
43491
43567
  )
@@ -43498,7 +43574,10 @@ var init_EventCalendar_client = __esm({
43498
43574
  {
43499
43575
  type: "button",
43500
43576
  onClick: onToday,
43501
- className: `${display.buttonVariant} button-${display.buttonVariant} rb-px-3 rb-py-1`,
43577
+ className: themedButtonClass({
43578
+ variant: display.buttonVariant,
43579
+ size: "sm"
43580
+ }),
43502
43581
  children: "Try again"
43503
43582
  }
43504
43583
  )
@@ -43593,6 +43672,7 @@ var init_form_client = __esm({
43593
43672
  init_client2();
43594
43673
  init_src3();
43595
43674
  init_useFormSubmission();
43675
+ init_themedButtonClass();
43596
43676
  FormNodeClient = ({
43597
43677
  render
43598
43678
  }) => {
@@ -43730,7 +43810,19 @@ var init_form_client = __esm({
43730
43810
  return renderField(group.field);
43731
43811
  }),
43732
43812
  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 }) }) })
43813
+ /* @__PURE__ */ jsx137("div", { className: "fb-actions", children: /* @__PURE__ */ jsx137("div", { className: "fb-actions-inner", children: /* @__PURE__ */ jsx137(
43814
+ "button",
43815
+ {
43816
+ type: "submit",
43817
+ className: themedButtonClass({
43818
+ variant: "primary",
43819
+ size: "md",
43820
+ extraClassName: "rb-w-full rb-sm-w-auto"
43821
+ }),
43822
+ disabled: state.tag === "submitting",
43823
+ children: state.tag === "submitting" ? "Submitting..." : render.display.submitLabel
43824
+ }
43825
+ ) }) })
43734
43826
  ] });
43735
43827
  };
43736
43828
  }
@@ -43849,7 +43941,7 @@ function NewsletterFormClient({
43849
43941
  "button",
43850
43942
  {
43851
43943
  type: "submit",
43852
- className: "primary button-primary",
43944
+ className: themedButtonClass({ variant: "primary", size: "md" }),
43853
43945
  disabled: isSubmitting,
43854
43946
  children: isSubmitting ? "Subscribing..." : render.display.buttonLabel
43855
43947
  }
@@ -43867,6 +43959,7 @@ var init_newsletter_form_client = __esm({
43867
43959
  init_client2();
43868
43960
  init_src3();
43869
43961
  init_api();
43962
+ init_themedButtonClass();
43870
43963
  }
43871
43964
  });
43872
43965
 
@@ -58788,35 +58881,61 @@ function buildFieldSchema(field, allowNull, allowIncomplete = false) {
58788
58881
  }
58789
58882
  return finalizeSchema(schema, required, allowNull, allowIncomplete);
58790
58883
  }
58884
+ function buildFriendlyStringSchema(field) {
58885
+ return z40.string({
58886
+ error: (issue) => issue.input === void 0 || issue.input === null ? "This field is required" : `${field.label} needs text`
58887
+ });
58888
+ }
58791
58889
  function buildTextSchema(field) {
58792
58890
  const ui = field.ui ?? {};
58793
58891
  const inputType = ui?.inputType;
58794
58892
  let schema;
58795
58893
  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);
58894
+ schema = z40.coerce.number({
58895
+ error: (issue) => issue.input === void 0 ? `${field.label} is required` : `${field.label} needs a number`
58896
+ });
58897
+ if (typeof ui?.min === "number") {
58898
+ schema = schema.min(
58899
+ ui.min,
58900
+ `${field.label} must be ${ui.min} or more`
58901
+ );
58902
+ }
58903
+ if (typeof ui?.max === "number") {
58904
+ schema = schema.max(
58905
+ ui.max,
58906
+ `${field.label} must be ${ui.max} or less`
58907
+ );
58908
+ }
58799
58909
  } else {
58800
- schema = z40.string();
58910
+ schema = buildFriendlyStringSchema(field);
58801
58911
  if (inputType === "email") {
58802
- schema = schema.email(`${field.label} must be a valid email`);
58912
+ schema = schema.email("Enter a valid email address");
58803
58913
  }
58804
58914
  if (inputType === "tel") {
58805
58915
  const TEL_RE = /^[+()0-9\s\-]{3,}$/;
58806
- schema = schema.regex(TEL_RE, `${field.label} must be a valid phone number`);
58916
+ schema = schema.regex(
58917
+ TEL_RE,
58918
+ "Enter a valid phone number"
58919
+ );
58807
58920
  }
58808
58921
  if (ui?.pattern) {
58809
58922
  try {
58810
58923
  const re = new RegExp(ui.pattern);
58811
- schema = schema.regex(re, `${field.label} is not in the correct format`);
58924
+ schema = schema.regex(
58925
+ re,
58926
+ `${field.label} is not in the right format`
58927
+ );
58812
58928
  } catch {
58813
58929
  }
58814
58930
  }
58815
58931
  if (field.maxLength) {
58816
- schema = schema.max(field.maxLength, `${field.label} must have at most ${field.maxLength} characters`);
58932
+ schema = schema.max(
58933
+ field.maxLength,
58934
+ `${field.label} must be ${field.maxLength} characters or less`
58935
+ );
58817
58936
  }
58818
58937
  if (field.required) {
58819
- schema = schema.min(1, `${field.label} is required`).refine((v) => v.trim().length > 0, { message: `${field.label} is required` });
58938
+ schema = schema.min(1, { message: `${field.label} is required` }).refine((v) => v.trim().length > 0, { message: `${field.label} is required` });
58820
58939
  }
58821
58940
  }
58822
58941
  return schema;
@@ -58826,19 +58945,22 @@ function buildRichTextSchema2() {
58826
58945
  }
58827
58946
  var SLUG_PATTERN = /^(?:[a-z0-9]+(?:-[a-z0-9]+)*)(?:\/(?:[a-z0-9]+(?:-[a-z0-9]+)*))*$/;
58828
58947
  function buildSlugSchema(field) {
58829
- const message = `${field.label} must contain lowercase letters, numbers, and dashes`;
58830
- let schema = z40.string().regex(SLUG_PATTERN, message);
58948
+ const message = `${field.label} can only use lowercase letters, numbers, and dashes`;
58949
+ let schema = buildFriendlyStringSchema(field).regex(SLUG_PATTERN, message);
58831
58950
  if (field.maxLength) {
58832
- schema = schema.max(field.maxLength, `${field.label} must be at most ${field.maxLength} characters`);
58951
+ schema = schema.max(
58952
+ field.maxLength,
58953
+ `${field.label} must be ${field.maxLength} characters or less`
58954
+ );
58833
58955
  }
58834
58956
  if (field.required) {
58835
- schema = schema.min(1, `${field.label} is required`);
58957
+ schema = schema.min(1, { message: `${field.label} is required` });
58836
58958
  }
58837
58959
  return schema;
58838
58960
  }
58839
58961
  var ALLOWED_URL_PROTOCOLS = ["http:", "https:"];
58840
58962
  function buildUrlSchema(field) {
58841
- const message = `${field.label} must be a valid URL`;
58963
+ const message = "Enter a valid web address";
58842
58964
  const validate = (value) => {
58843
58965
  if (!value) {
58844
58966
  return !field.required;
@@ -58848,14 +58970,16 @@ function buildUrlSchema(field) {
58848
58970
  }
58849
58971
  try {
58850
58972
  const parsed = new URL(value);
58851
- return ALLOWED_URL_PROTOCOLS.includes(parsed.protocol);
58973
+ return ALLOWED_URL_PROTOCOLS.includes(
58974
+ parsed.protocol
58975
+ );
58852
58976
  } catch {
58853
58977
  return false;
58854
58978
  }
58855
58979
  };
58856
- let schema = z40.string().trim().refine(validate, message);
58980
+ let schema = buildFriendlyStringSchema(field).trim().refine(validate, message);
58857
58981
  if (field.required) {
58858
- schema = schema.min(1, `${field.label} is required`);
58982
+ schema = schema.min(1, { message: `${field.label} is required` });
58859
58983
  }
58860
58984
  return schema;
58861
58985
  }
@@ -58908,10 +59032,13 @@ function buildSelectSchema(field) {
58908
59032
  switch (source.kind) {
58909
59033
  case "sdk":
58910
59034
  case "site":
58911
- return z40.string();
59035
+ return buildFriendlyStringSchema(field);
58912
59036
  case "static": {
58913
59037
  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(", ")}`);
59038
+ return buildFriendlyStringSchema(field).refine(
59039
+ (value) => values.includes(value),
59040
+ `Choose one of the available options for ${field.label}`
59041
+ );
58915
59042
  }
58916
59043
  default:
58917
59044
  return assertNeverSelectSource2(source);
@@ -58919,14 +59046,16 @@ function buildSelectSchema(field) {
58919
59046
  })();
58920
59047
  if (field.multiple) {
58921
59048
  const arraySchema = z40.array(singleValueSchema);
58922
- return field.required ? arraySchema : arraySchema.nullable();
59049
+ return field.required ? arraySchema.min(1, { message: "This field is required" }) : arraySchema.nullable();
58923
59050
  }
58924
59051
  return field.required ? singleValueSchema : singleValueSchema.nullable();
58925
59052
  }
58926
59053
  function buildReferenceSchema(field) {
58927
- let schema = z40.string();
59054
+ let schema = z40.string({
59055
+ error: (issue) => issue.input === void 0 || issue.input === null ? "This field is required" : `${field.label} needs text`
59056
+ });
58928
59057
  if (field.required) {
58929
- schema = schema.min(1, `${field.label} is required`);
59058
+ schema = schema.min(1, { message: `${field.label} is required` });
58930
59059
  }
58931
59060
  return schema;
58932
59061
  }
@@ -59301,649 +59430,56 @@ function assertUniqueLayoutProfileKeys(profiles) {
59301
59430
  }
59302
59431
  }
59303
59432
 
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
59433
  // ../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
- );
59617
-
59618
- // ../theme-core/src/site-styles/designState.ts
59619
- import { z as z41 } from "zod";
59620
-
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
- );
59642
-
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();
59730
-
59731
- // ../theme-core/src/site-styles/generatedSchemas.ts
59732
- 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"
59805
- ]);
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();
59434
+ init_personalities();
59828
59435
 
59829
- // ../theme-core/src/site-styles/pageDesignIntent.ts
59830
- 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
- }
59436
+ // ../theme-core/src/palette/variants/types.ts
59437
+ init_styleTags();
59438
+ import { z as z45 } from "zod";
59903
59439
 
59904
59440
  // ../theme-core/src/schema.ts
59905
- import { z as z47 } from "zod";
59441
+ import { z as z44 } from "zod";
59906
59442
 
59907
59443
  // ../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) => {
59444
+ import z41 from "zod";
59445
+ var hotspotSchema2 = z41.object({
59446
+ x: z41.number().min(0).max(1),
59447
+ y: z41.number().min(0).max(1),
59448
+ radius: z41.number().optional()
59449
+ });
59450
+ var rotationSchema2 = z41.union([z41.literal(0), z41.literal(90), z41.literal(180), z41.literal(270)]);
59451
+ var rectSchema2 = z41.tuple([z41.number(), z41.number(), z41.number(), z41.number()]);
59452
+ var aspectCropSchema2 = z41.object({
59453
+ aspect: z41.preprocess((value) => value == null ? void 0 : value, z41.string().optional()),
59454
+ rect: z41.preprocess((value) => value == null ? void 0 : value, rectSchema2.optional()),
59455
+ hotspot: z41.preprocess((value) => value == null ? void 0 : value, hotspotSchema2.optional()),
59456
+ rotation: z41.preprocess((value) => value == null ? void 0 : value, rotationSchema2.optional())
59457
+ });
59458
+ var transformSchema2 = z41.object({
59459
+ aspectCrops: z41.preprocess((value) => {
59924
59460
  if (!value || typeof value !== "object" || Array.isArray(value)) {
59925
59461
  return void 0;
59926
59462
  }
59927
59463
  return value;
59928
- }, z44.record(z44.string(), aspectCropSchema2.catch({}))).optional(),
59464
+ }, z41.record(z41.string(), aspectCropSchema2.catch({}))).optional(),
59929
59465
  rect: rectSchema2.optional(),
59930
59466
  hotspot: hotspotSchema2.optional(),
59931
59467
  rotation: rotationSchema2.optional()
59932
59468
  });
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(),
59469
+ var mediaSchema2 = z41.object({
59470
+ type: z41.enum(["image", "video", "audio", "document", "spreadsheet", "archive"]),
59471
+ purpose: z41.string().optional(),
59472
+ placeholder: z41.boolean().default(true).optional(),
59473
+ assetId: z41.string().optional(),
59474
+ identifier: z41.string().optional(),
59475
+ src: z41.string().optional(),
59476
+ alt: z41.string().optional(),
59477
+ filename: z41.string().optional(),
59478
+ mimeType: z41.string().optional(),
59479
+ width: z41.number().optional(),
59480
+ height: z41.number().optional(),
59481
+ storageBucket: z41.string().optional(),
59482
+ storagePath: z41.string().optional(),
59947
59483
  transform: transformSchema2.optional()
59948
59484
  });
59949
59485
 
@@ -59951,43 +59487,43 @@ var mediaSchema2 = z44.object({
59951
59487
  init_buttons();
59952
59488
 
59953
59489
  // ../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(),
59490
+ import { z as z42 } from "zod";
59491
+ var cardSpacingSchema = z42.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
59492
+ var gradientDirectionSchema2 = z42.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
59493
+ var cardBackgroundSchema = z42.discriminatedUnion("type", [
59494
+ z42.object({ type: z42.literal("solid"), colorToken: z42.string() }),
59495
+ z42.object({
59496
+ type: z42.literal("gradient"),
59497
+ fromToken: z42.string(),
59498
+ toToken: z42.string(),
59963
59499
  direction: gradientDirectionSchema2
59964
59500
  }),
59965
- z45.object({ type: z45.literal("transparent") })
59501
+ z42.object({ type: z42.literal("transparent") })
59966
59502
  ]);
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)]),
59503
+ var cardBorderSchema = z42.object({
59504
+ widthClass: z42.string(),
59505
+ colorToken: z42.string()
59506
+ });
59507
+ var cardVariantSchema2 = z42.object({
59508
+ id: z42.string(),
59509
+ name: z42.string().min(1).max(20),
59510
+ enabled: z42.boolean(),
59511
+ priority: z42.union([z42.literal(1), z42.literal(2), z42.literal(3)]),
59976
59512
  // Appearance (token-based)
59977
59513
  background: cardBackgroundSchema,
59978
59514
  spacing: cardSpacingSchema,
59979
59515
  // 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")
59516
+ shadow: z42.object({
59517
+ elevation: z42.enum(["none", "low", "medium", "high"]),
59518
+ softness: z42.enum(["crisp", "soft", "hard"]).nullable(),
59519
+ position: z42.enum(["bottom", "bottom-right"]).default("bottom")
59984
59520
  }).optional(),
59985
- corners: z45.enum(["square", "soft", "rounded", "pill"]).optional(),
59521
+ corners: z42.enum(["square", "soft", "rounded", "pill"]).optional(),
59986
59522
  // Border (optional)
59987
59523
  border: cardBorderSchema.optional()
59988
59524
  });
59989
- var cardSystemSchema = z45.object({
59990
- variants: z45.array(cardVariantSchema2).min(1).max(3)
59525
+ var cardSystemSchema = z42.object({
59526
+ variants: z42.array(cardVariantSchema2).min(1).max(3)
59991
59527
  });
59992
59528
 
59993
59529
  // ../theme-core/src/cards/index.ts
@@ -60000,20 +59536,20 @@ init_types5();
60000
59536
  init_types12();
60001
59537
 
60002
59538
  // ../theme-core/src/gradients/types.ts
60003
- import { z as z46 } from "zod";
60004
- var gradientStopSchema = z46.object({
60005
- color: z46.string(),
59539
+ import { z as z43 } from "zod";
59540
+ var gradientStopSchema = z43.object({
59541
+ color: z43.string(),
60006
59542
  // Theme color token name (e.g., 'primary-500')
60007
- position: z46.number().min(0).max(100)
59543
+ position: z43.number().min(0).max(100)
60008
59544
  // Percentage 0-100
60009
59545
  });
60010
- var gradientConfigSchema = z46.object({
60011
- type: z46.enum(["linear", "radial"]),
60012
- angle: z46.number().min(0).max(360).optional(),
59546
+ var gradientConfigSchema = z43.object({
59547
+ type: z43.enum(["linear", "radial"]),
59548
+ angle: z43.number().min(0).max(360).optional(),
60013
59549
  // For linear gradients (degrees)
60014
- position: z46.string().optional(),
59550
+ position: z43.string().optional(),
60015
59551
  // For radial gradients ('center', 'top left', etc.)
60016
- stops: z46.array(gradientStopSchema).min(2)
59552
+ stops: z43.array(gradientStopSchema).min(2)
60017
59553
  });
60018
59554
 
60019
59555
  // ../theme-core/src/schema.ts
@@ -60021,65 +59557,65 @@ init_types13();
60021
59557
  init_validation3();
60022
59558
  init_atRuleValidation();
60023
59559
  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),
59560
+ var axesSchema = z44.object({
59561
+ tone: z44.enum(["minimal", "classic", "bold"]),
59562
+ energy: z44.enum(["calm", "vibrant"]),
59563
+ density: z44.enum(["airy", "regular", "compact"]),
59564
+ mediaBias: z44.enum(["text", "media", "mixed"]),
59565
+ conversionBias: z44.enum(["low", "med", "high"]),
59566
+ motion: z44.enum(["subtle", "standard", "expressive"])
59567
+ });
59568
+ var colourHexString = z44.string().regex(/^#([0-9A-Fa-f]{3}){1,2}$/);
59569
+ var paletteColorSchema = z44.object({
59570
+ name: z44.string().min(1),
60035
59571
  hex: colourHexString
60036
59572
  });
60037
- var paletteMetaSchema = z47.object({
60038
- mode: z47.enum(["light", "dark"])
59573
+ var paletteMetaSchema = z44.object({
59574
+ mode: z44.enum(["light", "dark"])
60039
59575
  });
60040
- var paletteSchema = z47.object({
60041
- colors: z47.array(paletteColorSchema),
59576
+ var paletteSchema = z44.object({
59577
+ colors: z44.array(paletteColorSchema),
60042
59578
  meta: paletteMetaSchema
60043
59579
  });
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"])
59580
+ var typographyStyleSchema = z44.object({
59581
+ family: z44.string().min(1),
59582
+ weight: z44.enum(["light", "regular", "medium", "semibold", "bold"]),
59583
+ letterSpacing: z44.enum(["tight", "normal", "loose"]),
59584
+ lineHeight: z44.enum(["normal", "relaxed", "loose"])
60049
59585
  });
60050
59586
  var bodyTypographyStyleSchema = typographyStyleSchema.extend({
60051
- size: z47.enum(["md", "lg", "xl"])
59587
+ size: z44.enum(["md", "lg", "xl"])
60052
59588
  });
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(),
59589
+ var headingSizeSchema = z44.enum(["xs", "sm", "md", "lg", "xl", "2xl"]);
59590
+ var headingTypographyOverridesSchema = z44.object({
59591
+ weight: z44.enum(["light", "regular", "medium", "semibold", "bold"]).nullable().optional(),
59592
+ letterSpacing: z44.enum(["tight", "normal", "loose"]).nullable().optional(),
60057
59593
  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()
59594
+ lineHeight: z44.enum(["normal", "relaxed", "loose"]).nullable().optional(),
59595
+ italic: z44.boolean().nullable().optional(),
59596
+ colorToken: z44.string().min(1).nullable().optional()
60061
59597
  // Palette token name for heading color
60062
59598
  });
60063
59599
  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()
59600
+ case: z44.enum(["uppercase", "normal", "smallCaps"]).nullable(),
59601
+ italic: z44.boolean().nullable(),
59602
+ colorToken: z44.string().min(1).nullable().optional()
60067
59603
  // Palette token name for heading color
60068
59604
  });
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(),
59605
+ var proseLinkUnderlineStyleSchema = z44.enum(["solid", "dotted", "dashed"]);
59606
+ var proseLinkUnderlineThicknessSchema = z44.enum(["auto", "fromFont", "thin", "medium", "thick"]);
59607
+ var proseLinkUnderlineOffsetSchema = z44.enum(["auto", "tight", "normal", "loose"]);
59608
+ var proseLinkStyleSchema = z44.object({
59609
+ colorToken: z44.string().min(1).optional(),
59610
+ hoverColorToken: z44.string().min(1).optional(),
59611
+ underline: z44.boolean().optional(),
59612
+ decorationColorToken: z44.string().min(1).optional(),
59613
+ hoverDecorationColorToken: z44.string().min(1).optional(),
60078
59614
  underlineStyle: proseLinkUnderlineStyleSchema.optional(),
60079
59615
  underlineThickness: proseLinkUnderlineThicknessSchema.optional(),
60080
59616
  underlineOffset: proseLinkUnderlineOffsetSchema.optional()
60081
59617
  });
60082
- var semanticSpacingSchema = z47.enum([
59618
+ var semanticSpacingSchema = z44.enum([
60083
59619
  "none",
60084
59620
  "compact",
60085
59621
  "cozy",
@@ -60087,62 +59623,62 @@ var semanticSpacingSchema = z47.enum([
60087
59623
  "comfortable",
60088
59624
  "spacious"
60089
59625
  ]);
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(),
59626
+ var boxRoundedSchema = z44.enum(["none", "sm", "md", "lg", "xl", "2xl", "full"]);
59627
+ var boxBackgroundOverlaySchema = z44.object({
59628
+ type: z44.enum(["none", "color", "gradient"]).nullable().optional(),
59629
+ color: z44.string().nullable().optional(),
59630
+ gradient: z44.string().nullable().optional(),
59631
+ opacity: z44.number().min(0).max(1).nullable().optional()
59632
+ });
59633
+ var boxBackgroundSchema = z44.object({
59634
+ type: z44.enum(["color", "gradient", "image"]).optional(),
59635
+ color: z44.string().nullable().optional(),
59636
+ gradient: z44.string().nullable().optional(),
60101
59637
  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(),
59638
+ objectFit: z44.enum(["fill", "fit", "original", "custom"]).nullable().optional(),
59639
+ scale: z44.string().nullable().optional(),
59640
+ position: z44.string().nullable().optional(),
59641
+ opacity: z44.number().min(0).max(1).nullable().optional(),
60106
59642
  overlay: boxBackgroundOverlaySchema.nullable().optional(),
60107
- textColor: z47.string().nullable().optional(),
60108
- headingColor: z47.string().nullable().optional()
59643
+ textColor: z44.string().nullable().optional(),
59644
+ headingColor: z44.string().nullable().optional()
60109
59645
  });
60110
- var sectionStylesOverrideSchema = z47.object({
59646
+ var sectionStylesOverrideSchema = z44.object({
60111
59647
  background: boxBackgroundSchema.nullable().optional(),
60112
59648
  spacing: semanticSpacingSchema.nullable().optional(),
60113
- minHeight: z47.enum(["none", "hero", "immersive"]).nullable().optional()
59649
+ minHeight: z44.enum(["none", "hero", "immersive"]).nullable().optional()
60114
59650
  });
60115
- var containerStylesOverrideSchema = z47.object({
59651
+ var containerStylesOverrideSchema = z44.object({
60116
59652
  background: boxBackgroundSchema.nullable().optional(),
60117
59653
  spacing: semanticSpacingSchema.nullable().optional(),
60118
- raised: z47.boolean().nullable().optional(),
59654
+ raised: z44.boolean().nullable().optional(),
60119
59655
  rounded: boxRoundedSchema.nullable().optional(),
60120
- fullWidth: z47.boolean().nullable().optional()
59656
+ fullWidth: z44.boolean().nullable().optional()
60121
59657
  });
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()
59658
+ var cardBorderOverrideSchema = z44.object({
59659
+ enabled: z44.boolean().nullable().optional(),
59660
+ width: z44.enum(["none", "1", "2", "3"]).nullable().optional(),
59661
+ colorToken: z44.string().nullable().optional()
60126
59662
  });
60127
- var cardStylesOverrideSchema = z47.object({
59663
+ var cardStylesOverrideSchema = z44.object({
60128
59664
  background: boxBackgroundSchema.nullable().optional(),
60129
59665
  border: cardBorderOverrideSchema.nullable().optional(),
60130
59666
  spacing: semanticSpacingSchema.nullable().optional(),
60131
- raised: z47.boolean().nullable().optional(),
59667
+ raised: z44.boolean().nullable().optional(),
60132
59668
  rounded: boxRoundedSchema.nullable().optional()
60133
59669
  });
60134
- var blockStyleOverridesSchema = z47.object({
59670
+ var blockStyleOverridesSchema = z44.object({
60135
59671
  sectionStyles: sectionStylesOverrideSchema.nullable().optional(),
60136
59672
  containerStyles: containerStylesOverrideSchema.nullable().optional(),
60137
59673
  cardStyles: cardStylesOverrideSchema.nullable().optional()
60138
59674
  });
60139
- var blockThemeOverrideSchema = z47.object({
60140
- typography: z47.object({
59675
+ var blockThemeOverrideSchema = z44.object({
59676
+ typography: z44.object({
60141
59677
  proseLinkStyle: proseLinkStyleSchema.optional()
60142
59678
  }).optional(),
60143
59679
  styles: blockStyleOverridesSchema.optional()
60144
59680
  });
60145
- var typographyScaleSchema = z47.enum([
59681
+ var typographyScaleSchema = z44.enum([
60146
59682
  // New intuitive names
60147
59683
  "compact",
60148
59684
  // ratio 1.2 (was minorThird)
@@ -60155,9 +59691,9 @@ var typographyScaleSchema = z47.enum([
60155
59691
  "majorThird",
60156
59692
  "perfectFourth"
60157
59693
  ]);
60158
- var typographySchema = z47.object({
59694
+ var typographySchema = z44.object({
60159
59695
  body: bodyTypographyStyleSchema,
60160
- headings: z47.object({
59696
+ headings: z44.object({
60161
59697
  default: headingTypographyStyleSchema,
60162
59698
  h1: headingTypographyOverridesSchema,
60163
59699
  h2: headingTypographyOverridesSchema,
@@ -60170,41 +59706,41 @@ var typographySchema = z47.object({
60170
59706
  scale: typographyScaleSchema,
60171
59707
  proseLinkStyle: proseLinkStyleSchema.optional()
60172
59708
  });
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")
59709
+ var spaceSchema = z44.enum(["comfortable", "standard", "dense"]);
59710
+ var corners = z44.enum(["square", "soft", "rounded", "pill"]);
59711
+ var shadow = z44.object({
59712
+ elevation: z44.enum(["none", "low", "medium", "high"]),
59713
+ softness: z44.enum(["crisp", "soft", "hard"]).nullable(),
59714
+ position: z44.enum(["bottom", "bottom-right"]).default("bottom")
60179
59715
  });
60180
- var border = z47.object({
60181
- width: z47.enum(["none", "hairline", "thin", "thick"]),
60182
- style: z47.enum(["solid", "dashed"])
59716
+ var border = z44.object({
59717
+ width: z44.enum(["none", "hairline", "thin", "thick"]),
59718
+ style: z44.enum(["solid", "dashed"])
60183
59719
  });
60184
- var motion = z47.object({
60185
- level: z47.enum(["off", "low", "medium", "high"]),
60186
- easing: z47.enum(["standard", "snappy", "gentle"]).nullable()
59720
+ var motion = z44.object({
59721
+ level: z44.enum(["off", "low", "medium", "high"]),
59722
+ easing: z44.enum(["standard", "snappy", "gentle"]).nullable()
60187
59723
  });
60188
- var buttonStyle = z47.object({
59724
+ var buttonStyle = z44.object({
60189
59725
  shape: corners
60190
59726
  // Used for --radius-control CSS variable
60191
59727
  });
60192
- var cardStyle = z47.object({
60193
- elevation: z47.enum(["none", "low", "medium", "high"]),
60194
- border: z47.enum(["none", "subtle", "defined"]),
59728
+ var cardStyle = z44.object({
59729
+ elevation: z44.enum(["none", "low", "medium", "high"]),
59730
+ border: z44.enum(["none", "subtle", "defined"]),
60195
59731
  shape: corners,
60196
- headerStyle: z47.enum(["plain", "accentBar", "subtleBg"]).nullable(),
60197
- mediaTreatment: z47.enum(["square", "rounded", "bleed"]).nullable()
59732
+ headerStyle: z44.enum(["plain", "accentBar", "subtleBg"]).nullable(),
59733
+ mediaTreatment: z44.enum(["square", "rounded", "bleed"]).nullable()
60198
59734
  });
60199
- var inputStyle = z47.object({
59735
+ var inputStyle = z44.object({
60200
59736
  shape: corners,
60201
- border: z47.enum(["subtle", "defined", "underline"]),
60202
- focus: z47.enum(["glow", "ring", "underline"]),
60203
- label: z47.enum(["inside", "above"])
59737
+ border: z44.enum(["subtle", "defined", "underline"]),
59738
+ focus: z44.enum(["glow", "ring", "underline"]),
59739
+ label: z44.enum(["inside", "above"])
60204
59740
  });
60205
- var headerVariant = z47.enum(["classic", "centered", "transparent", "floating", "editorial"]);
60206
- var headerPositioning = z47.enum(["static", "sticky", "fixed"]);
60207
- var headerNavStyle = z47.enum([
59741
+ var headerVariant = z44.enum(["classic", "centered", "transparent", "floating", "editorial"]);
59742
+ var headerPositioning = z44.enum(["static", "sticky", "fixed"]);
59743
+ var headerNavStyle = z44.enum([
60208
59744
  "minimal",
60209
59745
  "underline",
60210
59746
  "underline-grow",
@@ -60213,82 +59749,82 @@ var headerNavStyle = z47.enum([
60213
59749
  "frosted",
60214
59750
  "solid"
60215
59751
  ]);
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)
59752
+ var navFontWeight = z44.enum(["regular", "medium", "semibold", "bold"]);
59753
+ var headerMaxWidth = z44.enum(["container", "full"]);
59754
+ var headerContainerSchema = z44.object({
59755
+ rounded: z44.enum(["none", "sm", "md", "lg", "xl", "2xl"]).default("xl"),
59756
+ border: z44.boolean().default(true),
59757
+ shadow: z44.boolean().default(true),
59758
+ padding: z44.enum(["sm", "md", "lg"]).default("md"),
59759
+ tint: z44.string().nullable().optional(),
59760
+ opacity: z44.number().min(0).max(1).default(0.12)
60225
59761
  }).optional();
60226
59762
  var headerBorderSchema = componentBorderSchema.extend({
60227
- position: z47.enum(["bottom", "top", "both", "none"]).default("bottom")
59763
+ position: z44.enum(["bottom", "top", "both", "none"]).default("bottom")
60228
59764
  }).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)
59765
+ var logoStyleSchema = z44.object({
59766
+ fontFamily: z44.enum(["heading", "body"]).default("heading"),
59767
+ letterSpacing: z44.enum(["normal", "wide", "wider", "widest"]).default("normal"),
59768
+ gradient: z44.boolean().default(false)
60233
59769
  }).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()
59770
+ var headerLogoTextSchema = z44.object({
59771
+ mobileWrapLines: z44.union([z44.literal(1), z44.literal(2)]).optional(),
59772
+ mobileMaxWidth: z44.enum(["xs", "sm", "md"]).optional(),
59773
+ hideOnShrink: z44.boolean().optional()
60238
59774
  }).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)
59775
+ var navEffectsSchema = z44.object({
59776
+ underlineGradient: z44.boolean().default(false),
59777
+ glow: z44.boolean().default(false),
59778
+ glowColor: z44.string().optional(),
59779
+ neumorphic: z44.boolean().default(false)
60244
59780
  }).optional();
60245
- var dropdownStyleSchema = z47.object({
59781
+ var dropdownStyleSchema = z44.object({
60246
59782
  // Container styling
60247
- background: z47.string().default("surface"),
59783
+ background: z44.string().default("surface"),
60248
59784
  // color token
60249
- textColor: z47.string().default("text"),
59785
+ textColor: z44.string().default("text"),
60250
59786
  // color token
60251
- borderColor: z47.string().nullable().default("border"),
59787
+ borderColor: z44.string().nullable().default("border"),
60252
59788
  // null = no border
60253
- shadow: z47.enum(["none", "sm", "md", "lg"]).default("md"),
60254
- borderRadius: z47.enum(["none", "sm", "md", "lg"]).default("md"),
59789
+ shadow: z44.enum(["none", "sm", "md", "lg"]).default("md"),
59790
+ borderRadius: z44.enum(["none", "sm", "md", "lg"]).default("md"),
60255
59791
  // Link hover states (explicit control)
60256
- hoverBackground: z47.string().nullable().optional(),
59792
+ hoverBackground: z44.string().nullable().optional(),
60257
59793
  // color token, null = transparent
60258
- hoverTextColor: z47.string().nullable().optional(),
59794
+ hoverTextColor: z44.string().nullable().optional(),
60259
59795
  // color token, null = inherit
60260
59796
  // 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(),
59797
+ textTransform: z44.enum(["none", "uppercase", "capitalize"]).default("none"),
59798
+ letterSpacing: z44.enum(["normal", "wide", "wider"]).default("normal"),
59799
+ fontWeight: z44.enum(["regular", "medium", "semibold", "bold"]).optional(),
60264
59800
  // optional = inherit from navWeight
60265
- textSize: z47.enum(["xs", "sm", "base", "lg"]).optional()
59801
+ textSize: z44.enum(["xs", "sm", "base", "lg"]).optional()
60266
59802
  // optional = no override (browser default)
60267
59803
  }).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)
59804
+ var headerCtaGapSchema = z44.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
59805
+ var navContainerSchema = z44.object({
59806
+ type: z44.enum(["none", "pill", "glass"]).default("none"),
59807
+ tint: z44.string().nullable().optional(),
59808
+ opacity: z44.number().min(0).max(1).default(0.15)
60273
59809
  }).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(),
59810
+ var headerBackgroundSchema = z44.object({
59811
+ type: z44.enum(["color", "gradient", "image"]),
59812
+ color: z44.string().nullable().optional(),
60277
59813
  gradient: gradientConfigSchema.nullable().optional(),
60278
59814
  image: mediaSchema2.nullable().optional(),
60279
- textColor: z47.string().nullable().optional()
59815
+ textColor: z44.string().nullable().optional()
60280
59816
  });
60281
- var headerSchema = z47.object({
59817
+ var headerSchema = z44.object({
60282
59818
  variant: headerVariant,
60283
59819
  positioning: headerPositioning,
60284
- shrinkOnScroll: z47.boolean(),
59820
+ shrinkOnScroll: z44.boolean(),
60285
59821
  maxWidth: headerMaxWidth,
60286
59822
  logoOverride: mediaSchema2.nullable().optional(),
60287
59823
  background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
60288
- textColor: z47.string().nullable().optional(),
59824
+ textColor: z44.string().nullable().optional(),
60289
59825
  // Site title and general header text
60290
59826
  navStyle: headerNavStyle,
60291
- navColor: z47.string().nullable().optional(),
59827
+ navColor: z44.string().nullable().optional(),
60292
59828
  // Nav links (inherits textColor if not set)
60293
59829
  navWeight: navFontWeight.default("medium"),
60294
59830
  // New fields for header system enhancement
@@ -60307,50 +59843,50 @@ var headerSchema = z47.object({
60307
59843
  // Dropdown menu styling (nav dropdowns and mobile drawer)
60308
59844
  dropdownStyle: dropdownStyleSchema
60309
59845
  });
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(),
59846
+ var footerVariant = z44.enum(["simple", "columns", "split"]);
59847
+ var footerMaxWidth = z44.enum(["container", "full"]);
59848
+ var footerMode = z44.enum(["default", "blocks", "default+blocks", "none"]);
59849
+ var footerNavLayoutMode = z44.enum(["stack", "inline", "inline-wrap"]);
59850
+ var footerNavLayoutAlign = z44.enum(["start", "center", "end", "space-between"]);
59851
+ var footerSpacing = z44.enum(["none", "tight", "compact", "default", "relaxed", "spacious"]);
59852
+ var footerLogoPlacement = z44.enum(["left", "right", "above", "below"]);
59853
+ var footerLogoSize = z44.enum(["sm", "md", "lg", "xl"]);
59854
+ var footerLogoMaxHeight = z44.enum(["sm", "md", "lg", "xl"]);
59855
+ var footerBottomTextLinkStyleSchema = z44.object({
59856
+ colorToken: z44.string().optional(),
59857
+ hoverColorToken: z44.string().nullable().optional(),
59858
+ decorationColorToken: z44.string().nullable().optional(),
59859
+ underline: z44.boolean().optional()
59860
+ });
59861
+ var footerBottomBarSchema = z44.object({
59862
+ enabled: z44.boolean().optional(),
59863
+ fullBleed: z44.boolean().optional(),
60328
59864
  background: headerBackgroundSchema.optional(),
60329
- textColor: z47.string().nullable().optional(),
60330
- textAlign: z47.enum(["left", "center", "right"]).optional(),
59865
+ textColor: z44.string().nullable().optional(),
59866
+ textAlign: z44.enum(["left", "center", "right"]).optional(),
60331
59867
  paddingY: footerSpacing.optional(),
60332
59868
  paddingX: footerSpacing.optional(),
60333
- borderTop: z47.object({
60334
- colorToken: z47.string().nullable().optional(),
60335
- width: z47.enum(["none", "thin", "medium", "thick"]).optional()
59869
+ borderTop: z44.object({
59870
+ colorToken: z44.string().nullable().optional(),
59871
+ width: z44.enum(["none", "thin", "medium", "thick"]).optional()
60336
59872
  }).optional()
60337
59873
  });
60338
- var footerNavLayoutSchema = z47.object({
59874
+ var footerNavLayoutSchema = z44.object({
60339
59875
  layout: footerNavLayoutMode.optional(),
60340
59876
  align: footerNavLayoutAlign.optional(),
60341
59877
  gapX: footerSpacing.optional(),
60342
59878
  gapY: footerSpacing.optional(),
60343
- columns: z47.number().int().min(1).max(6).optional()
59879
+ columns: z44.number().int().min(1).max(6).optional()
60344
59880
  });
60345
- var footerLogoSchema = z47.object({
60346
- showLogo: z47.boolean().default(true),
60347
- showLogoText: z47.boolean().optional(),
59881
+ var footerLogoSchema = z44.object({
59882
+ showLogo: z44.boolean().default(true),
59883
+ showLogoText: z44.boolean().optional(),
60348
59884
  placement: footerLogoPlacement.optional(),
60349
59885
  size: footerLogoSize.optional(),
60350
59886
  maxHeight: footerLogoMaxHeight.optional(),
60351
- align: z47.enum(["start", "center", "end"]).optional()
59887
+ align: z44.enum(["start", "center", "end"]).optional()
60352
59888
  });
60353
- var footerSchema = z47.object({
59889
+ var footerSchema = z44.object({
60354
59890
  /**
60355
59891
  * SDK-only footer rendering mode.
60356
59892
  *
@@ -60359,11 +59895,11 @@ var footerSchema = z47.object({
60359
59895
  mode: footerMode.optional(),
60360
59896
  variant: footerVariant,
60361
59897
  maxWidth: footerMaxWidth,
60362
- showLogoText: z47.boolean().optional(),
59898
+ showLogoText: z44.boolean().optional(),
60363
59899
  background: headerBackgroundSchema.default({ type: "color", color: "surface" }),
60364
59900
  // Footer nav styling (independent from header)
60365
59901
  navStyle: headerNavStyle.default("minimal"),
60366
- navColor: z47.string().nullable().optional(),
59902
+ navColor: z44.string().nullable().optional(),
60367
59903
  navWeight: navFontWeight.default("medium"),
60368
59904
  // Full nav link customization (overrides navStyle if set)
60369
59905
  navLinkStyle: navLinkStyleSchema.optional(),
@@ -60374,15 +59910,15 @@ var footerSchema = z47.object({
60374
59910
  logo: footerLogoSchema.optional(),
60375
59911
  bottomBar: footerBottomBarSchema.optional()
60376
59912
  });
60377
- var containerPaddingPresetSchema = z47.enum(["tight", "compact", "default", "relaxed"]);
60378
- var layoutSchema = z47.object({
60379
- containerPadding: z47.object({
59913
+ var containerPaddingPresetSchema = z44.enum(["tight", "compact", "default", "relaxed"]);
59914
+ var layoutSchema = z44.object({
59915
+ containerPadding: z44.object({
60380
59916
  mobile: containerPaddingPresetSchema.optional(),
60381
59917
  tablet: containerPaddingPresetSchema.optional(),
60382
59918
  desktop: containerPaddingPresetSchema.optional()
60383
59919
  }).optional()
60384
59920
  }).optional();
60385
- var heroTypographySizeSchema = z47.enum([
59921
+ var heroTypographySizeSchema = z44.enum([
60386
59922
  "sm",
60387
59923
  "base",
60388
59924
  "lg",
@@ -60393,14 +59929,14 @@ var heroTypographySizeSchema = z47.enum([
60393
59929
  "5xl",
60394
59930
  "6xl"
60395
59931
  ]);
60396
- var heroTypographyLineHeightSchema = z47.enum(["tight", "snug", "normal", "relaxed"]);
60397
- var heroResponsiveTypographySchema = z47.object({
59932
+ var heroTypographyLineHeightSchema = z44.enum(["tight", "snug", "normal", "relaxed"]);
59933
+ var heroResponsiveTypographySchema = z44.object({
60398
59934
  headlineSize: heroTypographySizeSchema.optional(),
60399
59935
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
60400
59936
  subheadlineSize: heroTypographySizeSchema.optional(),
60401
59937
  subheadlineLineHeight: heroTypographyLineHeightSchema.optional()
60402
59938
  });
60403
- var heroTypographySchema = z47.object({
59939
+ var heroTypographySchema = z44.object({
60404
59940
  headlineSize: heroTypographySizeSchema.optional(),
60405
59941
  headlineLineHeight: heroTypographyLineHeightSchema.optional(),
60406
59942
  subheadlineSize: heroTypographySizeSchema.optional(),
@@ -60409,24 +59945,24 @@ var heroTypographySchema = z47.object({
60409
59945
  microHeadlineLineHeight: heroTypographyLineHeightSchema.optional(),
60410
59946
  microSubheadlineSize: heroTypographySizeSchema.optional(),
60411
59947
  microSubheadlineLineHeight: heroTypographyLineHeightSchema.optional(),
60412
- responsive: z47.object({
59948
+ responsive: z44.object({
60413
59949
  tablet: heroResponsiveTypographySchema.optional(),
60414
59950
  mobile: heroResponsiveTypographySchema.optional()
60415
59951
  }).optional()
60416
59952
  });
60417
- var heroSchema = z47.object({
59953
+ var heroSchema = z44.object({
60418
59954
  typography: heroTypographySchema.optional()
60419
59955
  }).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(),
59956
+ var gradientsSchema = z44.object({
59957
+ button: z44.string().min(1).nullable().optional(),
59958
+ hero: z44.string().min(1).nullable().optional(),
59959
+ background: z44.string().min(1).nullable().optional()
59960
+ });
59961
+ var themeSchema = z44.object({
59962
+ name: z44.string().min(1).max(30),
59963
+ description: z44.string().min(1).max(400),
59964
+ rationale: z44.string().min(1).max(400),
59965
+ siteStyleId: z44.string().min(1).transform((value) => asSiteStyleId(value)).optional(),
60430
59966
  axes: axesSchema,
60431
59967
  palette: paletteSchema,
60432
59968
  typography: typographySchema,
@@ -60453,16 +59989,16 @@ var themeSchema = z47.object({
60453
59989
  // Block-specific customization (Tier 3)
60454
59990
  // blockCustomVars: Per-block CSS variable overrides as bare values
60455
59991
  // Example: { "event-registration": { "--step-color": "#6d28d9" } }
60456
- blockCustomVars: z47.record(
60457
- z47.string(),
59992
+ blockCustomVars: z44.record(
59993
+ z44.string(),
60458
59994
  // block kind (matches data-block attribute)
60459
- z47.record(z47.string(), z47.string())
59995
+ z44.record(z44.string(), z44.string())
60460
59996
  // { '--var-name': 'value' }
60461
59997
  ).optional(),
60462
59998
  // Structured block-kind theme overrides (v1: typography prose-link style only)
60463
59999
  // Keyed by block kind (usually data-block value like "hero"; "block.hero" also accepted)
60464
- blockOverrides: z47.record(
60465
- z47.string(),
60000
+ blockOverrides: z44.record(
60001
+ z44.string(),
60466
60002
  blockThemeOverrideSchema
60467
60003
  ).optional(),
60468
60004
  // Structured custom CSS rules
@@ -60498,130 +60034,21 @@ var themeSchema = z47.object({
60498
60034
  * }
60499
60035
  * ```
60500
60036
  */
60501
- styleGroups: z47.record(z47.string(), z47.array(z47.string())).optional()
60037
+ styleGroups: z44.record(z44.string(), z44.array(z44.string())).optional()
60502
60038
  });
60503
- var themesTurnSchema = z47.object({
60504
- message: z47.string().min(1),
60505
- themes: z47.array(themeSchema).length(3)
60039
+ var themesTurnSchema = z44.object({
60040
+ message: z44.string().min(1),
60041
+ themes: z44.array(themeSchema).length(3)
60506
60042
  });
60507
60043
 
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
60044
  // ../theme-core/src/palette/variants/types.ts
60616
- init_compatibility();
60617
- import { z as z48 } from "zod";
60618
60045
  function asPaletteVariantId(value) {
60619
60046
  if (value.length === 0) {
60620
60047
  throw new Error("PaletteVariantId must be a non-empty string");
60621
60048
  }
60622
60049
  return value;
60623
60050
  }
60624
- var paletteVariantIdSchema = z48.string().min(1).transform((value) => asPaletteVariantId(value));
60051
+ var paletteVariantIdSchema = z45.string().min(1).transform((value) => asPaletteVariantId(value));
60625
60052
  var PALETTE_TOKEN_NAMES = [
60626
60053
  "primary",
60627
60054
  "primaryForeground",
@@ -60637,19 +60064,19 @@ var PALETTE_TOKEN_NAMES = [
60637
60064
  "text",
60638
60065
  "border"
60639
60066
  ];
60640
- var paletteTokenNameSchema = z48.enum(PALETTE_TOKEN_NAMES);
60067
+ var paletteTokenNameSchema = z45.enum(PALETTE_TOKEN_NAMES);
60641
60068
  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);
60069
+ var hexColorSchema = z45.string().regex(HEX_COLOR_REGEX, "Hex must be #RRGGBB (lowercase)").transform((value) => value);
60643
60070
  var variantPaletteColorSchema = paletteColorSchema.extend({
60644
60071
  name: paletteTokenNameSchema
60645
60072
  });
60646
- var paletteVariantSchema = z48.object({
60073
+ var paletteVariantSchema = z45.object({
60647
60074
  id: paletteVariantIdSchema,
60648
- name: z48.string().min(1),
60649
- description: z48.string().min(1),
60075
+ name: z45.string().min(1),
60076
+ description: z45.string().min(1),
60650
60077
  tags: styleTagsSchema,
60651
- mode: z48.enum(["light", "dark"]),
60652
- colors: z48.array(variantPaletteColorSchema).min(1)
60078
+ mode: z45.enum(["light", "dark"]),
60079
+ colors: z45.array(variantPaletteColorSchema).min(1)
60653
60080
  });
60654
60081
  function definePaletteVariant(input) {
60655
60082
  return {
@@ -60661,7 +60088,7 @@ function definePaletteVariant(input) {
60661
60088
  colors: input.colors
60662
60089
  };
60663
60090
  }
60664
- var paletteOverridesSchema = z48.object({
60091
+ var paletteOverridesSchema = z45.object({
60665
60092
  primary: hexColorSchema.optional(),
60666
60093
  primaryForeground: hexColorSchema.optional(),
60667
60094
  secondary: hexColorSchema.optional(),
@@ -60972,7 +60399,763 @@ var paletteVariantsById = new Map(
60972
60399
  paletteVariants.map((v) => [v.id, v])
60973
60400
  );
60974
60401
 
60402
+ // ../theme-core/src/site-styles/sourceCatalogs.ts
60403
+ var generatedContentFrames = [
60404
+ plainFrame,
60405
+ panelFrame("inset"),
60406
+ panelFrame("raised"),
60407
+ flushPanelFrame({ bleed: "start" })
60408
+ ];
60409
+ var userContentFrames = [
60410
+ ...generatedContentFrames,
60411
+ panelFrame("editorial"),
60412
+ flushPanelFrame({ bleed: "end" }),
60413
+ flushPanelFrame({ bleed: "both" })
60414
+ ];
60415
+ var generatedDesignOptionCatalog = {
60416
+ source: "generated",
60417
+ sectionSurfaces: ["base", "muted-band", "accent-band", "hero-image"],
60418
+ contentFrames: generatedContentFrames,
60419
+ itemSurfaces: ["none", "default", "flat", "outlined", "raised"],
60420
+ transitions: ["none", "soft-fade-short", "soft-fade-long"],
60421
+ emphases: ["low", "medium", "high"],
60422
+ detachedCustom: false
60423
+ };
60424
+ var userDesignOptionCatalog = {
60425
+ source: "user",
60426
+ sectionSurfaces: generatedDesignOptionCatalog.sectionSurfaces,
60427
+ contentFrames: userContentFrames,
60428
+ itemSurfaces: [
60429
+ ...generatedDesignOptionCatalog.itemSurfaces,
60430
+ "inset",
60431
+ "editorial"
60432
+ ],
60433
+ transitions: [
60434
+ ...generatedDesignOptionCatalog.transitions,
60435
+ "wave-edge",
60436
+ "angle-edge"
60437
+ ],
60438
+ emphases: generatedDesignOptionCatalog.emphases,
60439
+ detachedCustom: false
60440
+ };
60441
+ var advancedDesignOptionCatalog = {
60442
+ source: "advanced",
60443
+ sectionSurfaces: userDesignOptionCatalog.sectionSurfaces,
60444
+ contentFrames: userDesignOptionCatalog.contentFrames,
60445
+ itemSurfaces: userDesignOptionCatalog.itemSurfaces,
60446
+ transitions: userDesignOptionCatalog.transitions,
60447
+ emphases: userDesignOptionCatalog.emphases,
60448
+ detachedCustom: true
60449
+ };
60450
+
60451
+ // ../theme-core/src/site-styles/curatedSiteStyles.ts
60452
+ var curatedSiteStyleIdValues = [
60453
+ "site-style:calm-studio",
60454
+ "site-style:clear-professional",
60455
+ "site-style:warm-editorial",
60456
+ "site-style:bright-community",
60457
+ "site-style:quiet-luxury",
60458
+ "site-style:practical-services",
60459
+ "site-style:modern-wellness",
60460
+ "site-style:bold-launch"
60461
+ ];
60462
+ var quietBudget = {
60463
+ accentDensity: "low",
60464
+ panelDensity: "medium",
60465
+ transitionMix: "quiet",
60466
+ primaryCtaLimit: 2,
60467
+ mediaDensity: "medium",
60468
+ decorativeRepetition: "low"
60469
+ };
60470
+ var balancedBudget = {
60471
+ accentDensity: "medium",
60472
+ panelDensity: "medium",
60473
+ transitionMix: "balanced",
60474
+ primaryCtaLimit: 3,
60475
+ mediaDensity: "medium",
60476
+ decorativeRepetition: "medium"
60477
+ };
60478
+ var expressiveBudget = {
60479
+ accentDensity: "high",
60480
+ panelDensity: "high",
60481
+ transitionMix: "expressive",
60482
+ primaryCtaLimit: 3,
60483
+ mediaDensity: "high",
60484
+ decorativeRepetition: "medium"
60485
+ };
60486
+ function uniqueContentFrameKinds() {
60487
+ const kinds = [...new Set(
60488
+ generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
60489
+ )];
60490
+ const firstKind = kinds[0];
60491
+ if (!firstKind) {
60492
+ throw new Error("Expected generated design option catalog to expose at least one content frame kind.");
60493
+ }
60494
+ return [firstKind, ...kinds.slice(1)];
60495
+ }
60496
+ var generatedContentFrameKinds = uniqueContentFrameKinds();
60497
+ function defineCuratedSiteStyle(input) {
60498
+ return {
60499
+ id: asSiteStyleId(input.id),
60500
+ name: input.name,
60501
+ description: input.description,
60502
+ generationBrief: input.generationBrief,
60503
+ selectionKeywords: input.selectionKeywords ?? [],
60504
+ template: {
60505
+ id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
60506
+ name: input.name,
60507
+ version: 1,
60508
+ tokenRecipes: input.tokenRecipes,
60509
+ compositionBudget: input.compositionBudget,
60510
+ supportedSectionSurfaces: generatedDesignOptionCatalog.sectionSurfaces,
60511
+ supportedContentFrames: generatedContentFrameKinds,
60512
+ supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
60513
+ supportedTransitions: generatedDesignOptionCatalog.transitions
60514
+ },
60515
+ buttonPersonalityChoices: input.buttonPersonalityChoices,
60516
+ paletteVariantChoices: input.paletteVariantChoices
60517
+ };
60518
+ }
60519
+ function buttonChoice(id, note) {
60520
+ return note ? { id: asButtonPersonalityId(id), note } : { id: asButtonPersonalityId(id) };
60521
+ }
60522
+ function paletteChoice(id, note) {
60523
+ return note ? { id: asPaletteVariantId(id), note } : { id: asPaletteVariantId(id) };
60524
+ }
60525
+ var curatedSiteStyles = [
60526
+ defineCuratedSiteStyle({
60527
+ id: "site-style:calm-studio",
60528
+ name: "Calm Studio",
60529
+ description: "Soft, measured, and spacious for intimate appointment or class businesses.",
60530
+ generationBrief: "Use calm pacing, concise copy, generous breathing room, and natural imagery. Keep calls to action steady rather than urgent.",
60531
+ tokenRecipes: {
60532
+ palette: "soft-natural",
60533
+ contrast: "standard",
60534
+ radius: "soft",
60535
+ shadow: "subtle",
60536
+ typography: "friendly-sans",
60537
+ spacing: "airy",
60538
+ motion: "subtle"
60539
+ },
60540
+ compositionBudget: quietBudget,
60541
+ buttonPersonalityChoices: [
60542
+ buttonChoice("soft-pill"),
60543
+ buttonChoice("pebble"),
60544
+ buttonChoice("editorial-link"),
60545
+ buttonChoice("brushed-wash")
60546
+ ],
60547
+ paletteVariantChoices: [
60548
+ paletteChoice("soft-natural-sage"),
60549
+ paletteChoice("soft-natural-stone"),
60550
+ paletteChoice("warm-neutral-clay"),
60551
+ paletteChoice("soft-natural-watercolor")
60552
+ ]
60553
+ }),
60554
+ defineCuratedSiteStyle({
60555
+ id: "site-style:clear-professional",
60556
+ name: "Clear Professional",
60557
+ description: "Crisp, trustworthy, and direct for local services and consultancies.",
60558
+ generationBrief: "Prioritize clarity, proof, service detail, and easy next steps. Keep visuals polished and specific, with restrained decorative treatment.",
60559
+ tokenRecipes: {
60560
+ palette: "brand-led",
60561
+ contrast: "strong",
60562
+ radius: "soft",
60563
+ shadow: "subtle",
60564
+ typography: "clean-sans",
60565
+ spacing: "regular",
60566
+ motion: "subtle"
60567
+ },
60568
+ compositionBudget: balancedBudget,
60569
+ buttonPersonalityChoices: [
60570
+ buttonChoice("confident-chip"),
60571
+ buttonChoice("soft-pill"),
60572
+ buttonChoice("editorial-link")
60573
+ ],
60574
+ paletteVariantChoices: [
60575
+ paletteChoice("brand-led-cool"),
60576
+ paletteChoice("high-contrast-ink"),
60577
+ paletteChoice("brand-led-jewel")
60578
+ ]
60579
+ }),
60580
+ defineCuratedSiteStyle({
60581
+ id: "site-style:warm-editorial",
60582
+ name: "Warm Editorial",
60583
+ description: "Story-led and textured for educators, makers, venues, and retreats.",
60584
+ generationBrief: "Let the copy feel thoughtful and grounded. Favor narrative sections, supporting media, and a small number of editorial panels.",
60585
+ tokenRecipes: {
60586
+ palette: "warm-neutral",
60587
+ contrast: "standard",
60588
+ radius: "square",
60589
+ shadow: "none",
60590
+ typography: "serif-editorial",
60591
+ spacing: "airy",
60592
+ motion: "subtle"
60593
+ },
60594
+ compositionBudget: balancedBudget,
60595
+ buttonPersonalityChoices: [
60596
+ buttonChoice("editorial-link"),
60597
+ buttonChoice("soft-pill"),
60598
+ buttonChoice("brushed-wash")
60599
+ ],
60600
+ paletteVariantChoices: [
60601
+ paletteChoice("warm-neutral-cream"),
60602
+ paletteChoice("warm-neutral-clay"),
60603
+ paletteChoice("warm-neutral-forest"),
60604
+ paletteChoice("soft-natural-stone")
60605
+ ]
60606
+ }),
60607
+ defineCuratedSiteStyle({
60608
+ id: "site-style:bright-community",
60609
+ name: "Bright Community",
60610
+ description: "Friendly, welcoming, and active for groups, classes, and neighborhood offers.",
60611
+ generationBrief: "Use welcoming language, clear event or booking routes, and optimistic imagery. Let accents appear, but avoid noisy decoration.",
60612
+ tokenRecipes: {
60613
+ palette: "brand-led",
60614
+ contrast: "standard",
60615
+ radius: "rounded",
60616
+ shadow: "subtle",
60617
+ typography: "friendly-sans",
60618
+ spacing: "regular",
60619
+ motion: "expressive"
60620
+ },
60621
+ compositionBudget: balancedBudget,
60622
+ buttonPersonalityChoices: [
60623
+ buttonChoice("pebble"),
60624
+ buttonChoice("brushed-wash"),
60625
+ buttonChoice("confident-chip")
60626
+ ],
60627
+ paletteVariantChoices: [
60628
+ paletteChoice("brand-led-warm"),
60629
+ paletteChoice("brand-led-jewel"),
60630
+ paletteChoice("soft-natural-watercolor")
60631
+ ]
60632
+ }),
60633
+ defineCuratedSiteStyle({
60634
+ id: "site-style:quiet-luxury",
60635
+ name: "Quiet Luxury",
60636
+ description: "Minimal, confident, and refined for premium experiences and private services.",
60637
+ generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
60638
+ selectionKeywords: [
60639
+ "luxury",
60640
+ "premium",
60641
+ "boutique",
60642
+ "bespoke",
60643
+ "exclusive"
60644
+ ],
60645
+ tokenRecipes: {
60646
+ palette: "high-contrast",
60647
+ contrast: "strong",
60648
+ radius: "square",
60649
+ shadow: "none",
60650
+ typography: "classic-serif",
60651
+ spacing: "airy",
60652
+ motion: "none"
60653
+ },
60654
+ compositionBudget: quietBudget,
60655
+ buttonPersonalityChoices: [
60656
+ buttonChoice("editorial-link"),
60657
+ buttonChoice("confident-chip"),
60658
+ buttonChoice("soft-pill")
60659
+ ],
60660
+ paletteVariantChoices: [
60661
+ paletteChoice("high-contrast-charcoal"),
60662
+ paletteChoice("high-contrast-ink"),
60663
+ paletteChoice("warm-neutral-cream")
60664
+ ]
60665
+ }),
60666
+ defineCuratedSiteStyle({
60667
+ id: "site-style:practical-services",
60668
+ name: "Practical Services",
60669
+ description: "Efficient, plainspoken, and conversion-focused for trades and everyday services.",
60670
+ generationBrief: "Make services, location, trust signals, and contact paths obvious. Keep copy brief and avoid ornate visual treatments.",
60671
+ selectionKeywords: [
60672
+ "repair",
60673
+ "plumb",
60674
+ "electric",
60675
+ "cleaning",
60676
+ "landscap",
60677
+ "contractor"
60678
+ ],
60679
+ tokenRecipes: {
60680
+ palette: "brand-led",
60681
+ contrast: "maximum",
60682
+ radius: "soft",
60683
+ shadow: "subtle",
60684
+ typography: "clean-sans",
60685
+ spacing: "compact",
60686
+ motion: "none"
60687
+ },
60688
+ compositionBudget: quietBudget,
60689
+ buttonPersonalityChoices: [
60690
+ buttonChoice("confident-chip"),
60691
+ buttonChoice("pebble"),
60692
+ buttonChoice("ink-stamp")
60693
+ ],
60694
+ paletteVariantChoices: [
60695
+ paletteChoice("brand-led-cool"),
60696
+ paletteChoice("high-contrast-ink"),
60697
+ paletteChoice("brand-led-warm")
60698
+ ]
60699
+ }),
60700
+ defineCuratedSiteStyle({
60701
+ id: "site-style:modern-wellness",
60702
+ name: "Modern Wellness",
60703
+ description: "Natural, current, and reassuring for practitioners, studios, and wellbeing offers.",
60704
+ generationBrief: "Keep the tone warm and practical. Use gentle section variation, natural materials, and inclusive copy without making medical claims.",
60705
+ tokenRecipes: {
60706
+ palette: "soft-natural",
60707
+ contrast: "standard",
60708
+ radius: "rounded",
60709
+ shadow: "subtle",
60710
+ typography: "clean-sans",
60711
+ spacing: "airy",
60712
+ motion: "subtle"
60713
+ },
60714
+ compositionBudget: balancedBudget,
60715
+ buttonPersonalityChoices: [
60716
+ buttonChoice("soft-pill"),
60717
+ buttonChoice("pebble"),
60718
+ buttonChoice("confident-chip")
60719
+ ],
60720
+ paletteVariantChoices: [
60721
+ paletteChoice("soft-natural-sage"),
60722
+ paletteChoice("soft-natural-stone"),
60723
+ paletteChoice("warm-neutral-forest")
60724
+ ]
60725
+ }),
60726
+ defineCuratedSiteStyle({
60727
+ id: "site-style:bold-launch",
60728
+ name: "Bold Launch",
60729
+ description: "High-energy and punchy for launches, campaigns, and creative offers.",
60730
+ generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
60731
+ selectionKeywords: [
60732
+ "launch",
60733
+ "campaign",
60734
+ "preorder",
60735
+ "pre-order",
60736
+ "waitlist",
60737
+ "drop"
60738
+ ],
60739
+ tokenRecipes: {
60740
+ palette: "high-contrast",
60741
+ contrast: "maximum",
60742
+ radius: "pill",
60743
+ shadow: "layered",
60744
+ typography: "clean-sans",
60745
+ spacing: "regular",
60746
+ motion: "expressive"
60747
+ },
60748
+ compositionBudget: expressiveBudget,
60749
+ buttonPersonalityChoices: [
60750
+ buttonChoice("ink-stamp"),
60751
+ buttonChoice("confident-chip"),
60752
+ buttonChoice("brushed-wash"),
60753
+ buttonChoice("pebble")
60754
+ ],
60755
+ paletteVariantChoices: [
60756
+ paletteChoice("high-contrast-monochrome"),
60757
+ paletteChoice("high-contrast-ink"),
60758
+ paletteChoice("brand-led-jewel"),
60759
+ paletteChoice("brand-led-warm")
60760
+ ]
60761
+ })
60762
+ ];
60763
+ var curatedSiteStylesById = new Map(
60764
+ curatedSiteStyles.map((style) => [style.id, style])
60765
+ );
60766
+
60767
+ // ../theme-core/src/site-styles/designState.ts
60768
+ import { z as z46 } from "zod";
60769
+
60770
+ // ../theme-core/src/site-styles/rawStyleFields.ts
60771
+ var themeV2RuntimeStyleFieldNames = [
60772
+ "_frameStyles",
60773
+ "_sectionStyles",
60774
+ "_containerStyles",
60775
+ "_cardStyles",
60776
+ // styleGroup is legacy runtime transition wiring rather than a nested
60777
+ // override object, but normal editors should still never see it directly.
60778
+ "styleGroup"
60779
+ ];
60780
+ var themeV2BlockSpecificRawStyleFieldNames = [
60781
+ "_contentCardStyles",
60782
+ "_textCardStyles"
60783
+ ];
60784
+ var themeV2NormalEditorRawStyleFieldNames = [
60785
+ ...themeV2RuntimeStyleFieldNames,
60786
+ ...themeV2BlockSpecificRawStyleFieldNames
60787
+ ];
60788
+ var themeV2NormalEditorRawStyleFieldNameSet = new Set(
60789
+ themeV2NormalEditorRawStyleFieldNames
60790
+ );
60791
+
60792
+ // ../theme-core/src/site-styles/designState.ts
60793
+ var themeV2DesignStateSchemaVersion = 1;
60794
+ var designResolutionPolicySchema = z46.enum(["generated", "user", "admin", "sdk"]);
60795
+ var runtimeStyleFieldNameSchema = z46.enum(themeV2RuntimeStyleFieldNames);
60796
+ var nonEmptyRuntimeStyleFieldNamesSchema = z46.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
60797
+ fields3[0],
60798
+ ...fields3.slice(1)
60799
+ ]);
60800
+ var heroLegibilityStrategySchema = z46.enum([
60801
+ "none",
60802
+ "scrim-gradient",
60803
+ "solid-panel"
60804
+ ]);
60805
+ function uniqueNonEmpty(values) {
60806
+ const uniqueValues = [...new Set(values)];
60807
+ const firstValue = uniqueValues[0];
60808
+ if (!firstValue) {
60809
+ throw new Error("Expected at least one Theme V2 design state option.");
60810
+ }
60811
+ return [firstValue, ...uniqueValues.slice(1)];
60812
+ }
60813
+ var userPanelTreatments = uniqueNonEmpty(
60814
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
60815
+ );
60816
+ var userFlushTreatments = uniqueNonEmpty(
60817
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
60818
+ );
60819
+ var userFlushBleeds = uniqueNonEmpty(
60820
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
60821
+ );
60822
+ var contentFrameIntentSchema = z46.discriminatedUnion("kind", [
60823
+ z46.object({ kind: z46.literal("plain") }).strict(),
60824
+ z46.object({
60825
+ kind: z46.literal("panel"),
60826
+ treatment: z46.enum(userPanelTreatments)
60827
+ }).strict(),
60828
+ z46.object({
60829
+ kind: z46.literal("flush-panel"),
60830
+ treatment: z46.enum(userFlushTreatments),
60831
+ bleed: z46.enum(userFlushBleeds)
60832
+ }).strict()
60833
+ ]);
60834
+ var blockDesignPlanSchema = z46.object({
60835
+ blockId: z46.string().min(1).transform(asDesignBlockId),
60836
+ blockKind: z46.string().min(1),
60837
+ purpose: z46.string().min(1),
60838
+ sectionSurface: z46.enum(userDesignOptionCatalog.sectionSurfaces),
60839
+ contentFrame: contentFrameIntentSchema,
60840
+ itemSurface: z46.enum(userDesignOptionCatalog.itemSurfaces),
60841
+ transitionAfter: z46.enum(userDesignOptionCatalog.transitions),
60842
+ emphasis: z46.enum(userDesignOptionCatalog.emphases),
60843
+ heroLegibility: heroLegibilityStrategySchema.optional()
60844
+ }).strict();
60845
+ var styleAuthoritySchema = z46.discriminatedUnion("kind", [
60846
+ z46.object({
60847
+ kind: z46.literal("theme-v2"),
60848
+ source: designResolutionPolicySchema,
60849
+ siteStyleId: z46.string().min(1).transform(asSiteStyleId),
60850
+ templateId: z46.string().min(1).transform(asDesignSystemTemplateId),
60851
+ templateVersion: z46.number().int().nonnegative(),
60852
+ resolverVersion: z46.number().int().nonnegative()
60853
+ }).strict(),
60854
+ z46.object({
60855
+ kind: z46.literal("legacy-raw"),
60856
+ reason: z46.enum(["pre-theme-v2", "manual-runtime-fields"])
60857
+ }).strict(),
60858
+ z46.object({
60859
+ kind: z46.literal("advanced-detached"),
60860
+ reason: z46.literal("detached-custom-runtime-fields")
60861
+ }).strict()
60862
+ ]);
60863
+ var blockRuntimeStyleAuthoritySchema = z46.object({
60864
+ unit: z46.literal("block-runtime-fields"),
60865
+ blockId: z46.string().min(1).transform(asDesignBlockId),
60866
+ fields: nonEmptyRuntimeStyleFieldNamesSchema,
60867
+ authority: styleAuthoritySchema
60868
+ }).strict();
60869
+ var persistedPageDesignStateV1Schema = z46.object({
60870
+ schemaVersion: z46.literal(themeV2DesignStateSchemaVersion),
60871
+ siteStyleId: z46.string().min(1).transform(asSiteStyleId),
60872
+ templateId: z46.string().min(1).transform(asDesignSystemTemplateId),
60873
+ templateVersion: z46.number().int().nonnegative(),
60874
+ resolverVersion: z46.number().int().nonnegative(),
60875
+ rhythmPresetId: z46.string().min(1),
60876
+ blocks: z46.array(blockDesignPlanSchema),
60877
+ styleAuthorities: z46.array(blockRuntimeStyleAuthoritySchema)
60878
+ }).strict();
60879
+
60880
+ // ../theme-core/src/site-styles/generatedSchemas.ts
60881
+ import { z as z47 } from "zod";
60882
+ function uniqueNonEmpty2(values) {
60883
+ const uniqueValues = [...new Set(values)];
60884
+ const firstValue = uniqueValues[0];
60885
+ if (!firstValue) {
60886
+ throw new Error("Expected at least one generated schema option.");
60887
+ }
60888
+ return [firstValue, ...uniqueValues.slice(1)];
60889
+ }
60890
+ var generatedPanelTreatments = uniqueNonEmpty2(
60891
+ generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
60892
+ );
60893
+ var generatedFlushTreatments = uniqueNonEmpty2(
60894
+ generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
60895
+ );
60896
+ var generatedFlushBleeds = uniqueNonEmpty2(
60897
+ generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
60898
+ );
60899
+ var generatedPanelFrameSchema = z47.object({
60900
+ kind: z47.literal("panel"),
60901
+ treatment: z47.enum(generatedPanelTreatments)
60902
+ }).strict();
60903
+ var generatedFlushPanelFrameSchema = z47.object({
60904
+ kind: z47.literal("flush-panel"),
60905
+ treatment: z47.enum(generatedFlushTreatments),
60906
+ bleed: z47.enum(generatedFlushBleeds)
60907
+ }).strict();
60908
+ var generatedContentFrameIntentSchema = z47.discriminatedUnion("kind", [
60909
+ z47.object({ kind: z47.literal("plain") }).strict(),
60910
+ generatedPanelFrameSchema,
60911
+ generatedFlushPanelFrameSchema
60912
+ ]);
60913
+ var generatedSiteStyleIdSchema = z47.enum(curatedSiteStyleIdValues).transform(asSiteStyleId);
60914
+ function generatedChoiceSchema(valueSchema) {
60915
+ return z47.discriminatedUnion("kind", [
60916
+ z47.object({
60917
+ source: z47.literal("generated"),
60918
+ kind: z47.literal("auto")
60919
+ }).strict(),
60920
+ z47.object({
60921
+ source: z47.literal("generated"),
60922
+ kind: z47.literal("explicit"),
60923
+ value: valueSchema
60924
+ }).strict()
60925
+ ]);
60926
+ }
60927
+ var generatedBlockDesignIntentSchema = z47.object({
60928
+ sectionSurface: generatedChoiceSchema(
60929
+ z47.enum(generatedDesignOptionCatalog.sectionSurfaces)
60930
+ ),
60931
+ contentFrame: generatedChoiceSchema(generatedContentFrameIntentSchema),
60932
+ itemSurface: generatedChoiceSchema(
60933
+ z47.enum(generatedDesignOptionCatalog.itemSurfaces)
60934
+ ),
60935
+ transitionAfter: generatedChoiceSchema(
60936
+ z47.enum(generatedDesignOptionCatalog.transitions)
60937
+ ),
60938
+ emphasis: generatedChoiceSchema(
60939
+ z47.enum(generatedDesignOptionCatalog.emphases)
60940
+ )
60941
+ }).strict();
60942
+ var generatedMediaCompositionIntentSchema = z47.enum([
60943
+ "none",
60944
+ "supporting",
60945
+ "dominant"
60946
+ ]);
60947
+ var generatedDecorativeCompositionIntentSchema = z47.enum([
60948
+ "none",
60949
+ "supporting"
60950
+ ]);
60951
+ var generatedHeroLegibilityStrategySchema = z47.enum([
60952
+ "none",
60953
+ "scrim-gradient"
60954
+ ]);
60955
+ var generatedBlockMediaIntentSchema = z47.object({
60956
+ media: generatedMediaCompositionIntentSchema,
60957
+ decorative: generatedDecorativeCompositionIntentSchema,
60958
+ heroLegibility: generatedChoiceSchema(generatedHeroLegibilityStrategySchema)
60959
+ }).strict();
60960
+ var generatedBoundaryIntentSchema = z47.object({
60961
+ transitionAfter: generatedChoiceSchema(
60962
+ z47.enum(generatedDesignOptionCatalog.transitions)
60963
+ )
60964
+ }).strict();
60965
+ var generatedPageDesignBlockIntentSchema = z47.object({
60966
+ blockId: z47.string().min(1),
60967
+ blockKind: z47.string().min(1),
60968
+ purpose: z47.string().min(1),
60969
+ design: generatedBlockDesignIntentSchema,
60970
+ mediaIntent: generatedBlockMediaIntentSchema,
60971
+ boundaryIntent: generatedBoundaryIntentSchema
60972
+ }).strict();
60973
+ var generatedPageDesignIntentSchema = z47.object({
60974
+ siteStyleId: generatedSiteStyleIdSchema,
60975
+ blocks: z47.array(generatedPageDesignBlockIntentSchema)
60976
+ }).strict();
60977
+
60978
+ // ../theme-core/src/site-styles/pageDesignIntent.ts
60979
+ import { z as z48 } from "zod";
60980
+ var pageDesignIntentSchemaVersion = 1;
60981
+ var pageDesignUserPinnedAppearanceChoiceSchema = z48.object({
60982
+ kind: z48.literal("user-pinned"),
60983
+ value: z48.string().min(1).transform(asAppearancePresetId)
60984
+ }).strict();
60985
+ var pageDesignUserPinnedBoundaryChoiceSchema = z48.object({
60986
+ kind: z48.literal("user-pinned"),
60987
+ value: z48.string().min(1).transform(asBoundaryOptionId)
60988
+ }).strict();
60989
+ var pageDesignBlockLookPinSchema = z48.object({
60990
+ blockId: z48.string().min(1).transform(asDesignBlockId),
60991
+ blockKind: z48.string().min(1),
60992
+ choice: pageDesignUserPinnedAppearanceChoiceSchema
60993
+ }).strict();
60994
+ var pageDesignBoundaryPinSchema = z48.object({
60995
+ boundaryId: z48.string().min(1).transform(asDesignBoundaryId),
60996
+ previousBlockId: z48.string().min(1).transform(asDesignBlockId),
60997
+ nextBlockId: z48.string().min(1).transform(asDesignBlockId),
60998
+ choice: pageDesignUserPinnedBoundaryChoiceSchema
60999
+ }).strict().superRefine((pin, ctx) => {
61000
+ const expectedBoundaryId = makeBoundaryId(
61001
+ pin.previousBlockId,
61002
+ pin.nextBlockId
61003
+ );
61004
+ if (pin.boundaryId !== expectedBoundaryId) {
61005
+ ctx.addIssue({
61006
+ code: z48.ZodIssueCode.custom,
61007
+ path: ["boundaryId"],
61008
+ message: `Boundary id must match previousBlockId and nextBlockId. Expected ${expectedBoundaryId}.`
61009
+ });
61010
+ }
61011
+ });
61012
+ var pageDesignIntentV1Schema = z48.object({
61013
+ schemaVersion: z48.literal(pageDesignIntentSchemaVersion),
61014
+ siteStyleId: z48.string().min(1).transform(asSiteStyleId),
61015
+ pageFlowPresetId: z48.string().min(1).transform(asPageFlowPresetId),
61016
+ blockLookPins: z48.array(pageDesignBlockLookPinSchema),
61017
+ boundaryPins: z48.array(pageDesignBoundaryPinSchema)
61018
+ }).strict().superRefine((intent, ctx) => {
61019
+ addDuplicateStringIssues(ctx, {
61020
+ values: intent.blockLookPins.map((pin) => pin.blockId),
61021
+ path: ["blockLookPins"],
61022
+ label: "block Look pin"
61023
+ });
61024
+ addDuplicateStringIssues(ctx, {
61025
+ values: intent.boundaryPins.map(
61026
+ (pin) => boundaryKey(pin.previousBlockId, pin.nextBlockId)
61027
+ ),
61028
+ path: ["boundaryPins"],
61029
+ label: "boundary pin"
61030
+ });
61031
+ });
61032
+ function addDuplicateStringIssues(ctx, input) {
61033
+ const seen = /* @__PURE__ */ new Set();
61034
+ const duplicates = /* @__PURE__ */ new Set();
61035
+ for (const value of input.values) {
61036
+ if (seen.has(value)) {
61037
+ duplicates.add(value);
61038
+ }
61039
+ seen.add(value);
61040
+ }
61041
+ for (const duplicate of duplicates) {
61042
+ ctx.addIssue({
61043
+ code: z48.ZodIssueCode.custom,
61044
+ path: [...input.path],
61045
+ message: `Duplicate ${input.label}: ${duplicate}.`
61046
+ });
61047
+ }
61048
+ }
61049
+ function boundaryKey(previousBlockId, nextBlockId) {
61050
+ return makeBoundaryId(previousBlockId, nextBlockId);
61051
+ }
61052
+
61053
+ // ../theme-core/src/mock-themes/modern-minimal.ts
61054
+ var modernMinimalTheme = {
61055
+ name: "Modern Minimal",
61056
+ description: "Clean, monochromatic design with subtle styling and modern typography",
61057
+ rationale: "Perfect for professional services, portfolios, and content-focused sites that need a clean, trustworthy appearance",
61058
+ axes: {
61059
+ tone: "minimal",
61060
+ energy: "calm",
61061
+ density: "airy",
61062
+ mediaBias: "text",
61063
+ conversionBias: "low",
61064
+ motion: "subtle"
61065
+ },
61066
+ palette: {
61067
+ colors: [
61068
+ { name: "primary", hex: "#1f2937" },
61069
+ { name: "secondary", hex: "#6b7280" },
61070
+ { name: "accent", hex: "#3b82f6" },
61071
+ { name: "success", hex: "#10b981" },
61072
+ { name: "warning", hex: "#f59e0b" },
61073
+ { name: "destructive", hex: "#ef4444" },
61074
+ { name: "background", hex: "#ffffff" },
61075
+ { name: "surface", hex: "#ffffff" },
61076
+ { name: "text", hex: "#1f2937" },
61077
+ { name: "border", hex: "#e5e7eb" }
61078
+ ],
61079
+ meta: { mode: "light" }
61080
+ },
61081
+ typography: {
61082
+ headings: {
61083
+ default: {
61084
+ family: "Inter, system-ui, sans-serif",
61085
+ weight: "medium",
61086
+ letterSpacing: "tight",
61087
+ lineHeight: "normal",
61088
+ case: "normal",
61089
+ italic: null
61090
+ },
61091
+ h1: {
61092
+ weight: "semibold",
61093
+ letterSpacing: "tight",
61094
+ size: "xl",
61095
+ lineHeight: "normal",
61096
+ italic: null
61097
+ },
61098
+ h2: {
61099
+ weight: "medium",
61100
+ letterSpacing: "normal",
61101
+ size: "lg",
61102
+ lineHeight: "normal",
61103
+ italic: null
61104
+ },
61105
+ h3: {
61106
+ weight: "medium",
61107
+ letterSpacing: "normal",
61108
+ size: "md",
61109
+ lineHeight: "normal",
61110
+ italic: null
61111
+ }
61112
+ },
61113
+ body: {
61114
+ family: "Inter, system-ui, sans-serif",
61115
+ weight: "regular",
61116
+ size: "md",
61117
+ letterSpacing: "normal",
61118
+ lineHeight: "relaxed"
61119
+ },
61120
+ scale: "minorThird"
61121
+ },
61122
+ space: "comfortable",
61123
+ corners: "rounded",
61124
+ border: {
61125
+ width: "hairline",
61126
+ style: "solid"
61127
+ },
61128
+ shadow: {
61129
+ elevation: "low",
61130
+ softness: "soft",
61131
+ position: "bottom"
61132
+ },
61133
+ motion: {
61134
+ level: "low",
61135
+ easing: "standard"
61136
+ },
61137
+ header: {
61138
+ variant: "classic",
61139
+ positioning: "static",
61140
+ shrinkOnScroll: false,
61141
+ maxWidth: "container",
61142
+ logoOverride: null,
61143
+ background: { type: "color", color: "surface" },
61144
+ navStyle: "minimal",
61145
+ navWeight: "medium",
61146
+ navContainer: { type: "none", opacity: 0, tint: null }
61147
+ },
61148
+ footer: {
61149
+ variant: "simple",
61150
+ maxWidth: "container",
61151
+ background: { type: "color", color: "surface" },
61152
+ navStyle: "minimal",
61153
+ navWeight: "medium"
61154
+ }
61155
+ };
61156
+
60975
61157
  // ../theme-core/src/site-styles/runtimeCompiler.ts
61158
+ init_personalities();
60976
61159
  function defineDesignRuntimeRules(rules) {
60977
61160
  return rules;
60978
61161
  }
@@ -61268,6 +61451,9 @@ var pageFlowPresets = [
61268
61451
  }
61269
61452
  ];
61270
61453
 
61454
+ // ../theme-core/src/site-styles/index.ts
61455
+ init_styleTags();
61456
+
61271
61457
  // ../theme-core/src/site-styles/tokenRecipes.ts
61272
61458
  import { z as z50 } from "zod";
61273
61459
  var themeTokenRecipeOptions = {
@@ -63293,14 +63479,16 @@ var headerCta = ctaButton({
63293
63479
  whenPath: "menu.ctaItem.label",
63294
63480
  variantPath: "menu.ctaItem.variant",
63295
63481
  linkPath: "menu.ctaItem.link",
63296
- className: `header-cta btn-sm ${desktopOnlyDisplay("inline-flex")} rb-ml-6`
63482
+ sizeFallback: "sm",
63483
+ className: `header-cta ${desktopOnlyDisplay("inline-flex")} rb-ml-6`
63297
63484
  });
63298
63485
  var mobileCta = ctaButton({
63299
63486
  basePath: "menu.ctaItem",
63300
63487
  whenPath: "menu.ctaItem.label",
63301
63488
  variantPath: "menu.ctaItem.variant",
63302
63489
  linkPath: "menu.ctaItem.link",
63303
- className: "nav-mobile-cta btn-md rb-w-full"
63490
+ sizeFallback: "md",
63491
+ className: "nav-mobile-cta rb-w-full"
63304
63492
  });
63305
63493
  var mobileToggleIcon = stack({ gap: "xs", className: "nav-mobile-icon" }, [
63306
63494
  {