@riverbankcms/sdk 0.60.3 → 0.60.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/dist/_dts/api/src/appointmentSetup.d.ts +2 -2
  2. package/dist/_dts/api/src/bookingConfig.d.ts +6 -0
  3. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +45 -3
  4. package/dist/_dts/api/src/bookingOperations.d.ts +40 -3
  5. package/dist/_dts/api/src/bookingVerticals.d.ts +1 -0
  6. package/dist/_dts/api/src/courses.d.ts +1 -5
  7. package/dist/_dts/api/src/endpoints.d.ts +80 -1
  8. package/dist/_dts/api/src/index.d.ts +3 -2
  9. package/dist/_dts/api/src/navigation/contracts.d.ts +9 -9
  10. package/dist/_dts/api/src/public/endpoints.d.ts +1 -1
  11. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +15 -1
  12. package/dist/_dts/api/src/resources.d.ts +1 -1
  13. package/dist/_dts/api/src/siteBanner.d.ts +8 -8
  14. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +3 -39
  15. package/dist/_dts/api/src/siteOnboarding.d.ts +1 -0
  16. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +2 -0
  17. package/dist/_dts/api/src/teamMembers.d.ts +27 -0
  18. package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +35 -29
  19. package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +1 -5
  20. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +40 -34
  21. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +1 -5
  22. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +1 -1
  23. package/dist/_dts/blocks/src/system/blocks/products/shared.d.ts +2 -2
  24. package/dist/_dts/blocks/src/system/blocks/shared/bookingPaymentTerms.d.ts +9 -9
  25. package/dist/_dts/blocks/src/system/blocks/shared/teamMembers.d.ts +24 -0
  26. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +18 -8
  27. package/dist/_dts/blocks/src/system/constants/background.d.ts +1 -1
  28. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  29. package/dist/_dts/blocks/src/system/data/utils.d.ts +1 -1
  30. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +201 -201
  31. package/dist/_dts/blocks/src/system/manifest/validation.d.ts +2 -2
  32. package/dist/_dts/blocks/src/system/node/fragments/ctaButton.d.ts +2 -0
  33. package/dist/_dts/blocks/src/system/node/schema.d.ts +5 -5
  34. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +1 -1
  35. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +4 -4
  36. package/dist/_dts/blocks/src/system/runtime/shared/themedButtonClass.d.ts +11 -0
  37. package/dist/_dts/blocks/src/system/transforms/registry/ui.d.ts +1 -1
  38. package/dist/_dts/blocks/src/system/transforms/typed.d.ts +3 -3
  39. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +10 -2
  40. package/dist/_dts/content-model/src/content-types/schema.d.ts +8 -8
  41. package/dist/_dts/content-model/src/metadataConfig.d.ts +1 -0
  42. package/dist/_dts/core/src/branded.d.ts +2 -0
  43. package/dist/_dts/core/src/participants.d.ts +32 -1
  44. package/dist/_dts/core/src/rectification.d.ts +79 -0
  45. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +130 -14
  46. package/dist/_dts/db/src/schemas/forms.d.ts +61 -61
  47. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +17 -15
  48. package/dist/_dts/sdk/src/client/types.d.ts +10 -2
  49. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  50. package/dist/_dts/sdk/src/config/validation.d.ts +40 -37
  51. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +17 -8
  52. package/dist/_dts/sdk/src/data/prefetchBlockData.d.ts +1 -1
  53. package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +19 -19
  54. package/dist/_dts/sdk/src/public-api/contracts.d.ts +87 -69
  55. package/dist/_dts/sdk/src/public-api/runtime.d.ts +1 -1
  56. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +2 -5
  57. package/dist/_dts/sdk/src/version.d.ts +1 -1
  58. package/dist/_dts/theme-core/src/accordions/types.d.ts +11 -11
  59. package/dist/_dts/theme-core/src/buttons/personalities/brushed-wash.d.ts +7 -2
  60. package/dist/_dts/theme-core/src/buttons/personalities/confident-chip.d.ts +7 -2
  61. package/dist/_dts/theme-core/src/buttons/personalities/editorial-link.d.ts +7 -2
  62. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +86 -5
  63. package/dist/_dts/theme-core/src/buttons/personalities/ink-stamp.d.ts +7 -2
  64. package/dist/_dts/theme-core/src/buttons/personalities/pebble.d.ts +7 -2
  65. package/dist/_dts/theme-core/src/buttons/personalities/soft-pill.d.ts +7 -2
  66. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +20 -20
  67. package/dist/_dts/theme-core/src/buttons/types.d.ts +27 -27
  68. package/dist/_dts/theme-core/src/cards/types.d.ts +17 -17
  69. package/dist/_dts/theme-core/src/inputs/types.d.ts +14 -14
  70. package/dist/_dts/theme-core/src/interactive/baseSchema.d.ts +2 -2
  71. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +438 -438
  72. package/dist/_dts/theme-core/src/navigation/types.d.ts +16 -16
  73. package/dist/_dts/theme-core/src/palette/variants/brand-led.d.ts +33 -9
  74. package/dist/_dts/theme-core/src/palette/variants/high-contrast.d.ts +33 -9
  75. package/dist/_dts/theme-core/src/palette/variants/index.d.ts +200 -4
  76. package/dist/_dts/theme-core/src/palette/variants/soft-natural.d.ts +33 -9
  77. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +25 -25
  78. package/dist/_dts/theme-core/src/palette/variants/warm-neutral.d.ts +33 -9
  79. package/dist/_dts/theme-core/src/schema.d.ts +662 -662
  80. package/dist/_dts/theme-core/src/shared/componentStyles.d.ts +4 -4
  81. package/dist/_dts/theme-core/src/site-styles/curatedChoices.d.ts +27 -0
  82. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +48 -194
  83. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +15 -15
  84. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +7 -7
  85. package/dist/_dts/theme-core/src/site-styles/index.d.ts +2 -1
  86. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +12 -14
  87. package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +46 -0
  88. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +5 -5
  89. package/dist/_dts/ui/src/badge.d.ts +1 -1
  90. package/dist/_dts/ui/src/button-group.d.ts +1 -1
  91. package/dist/_dts/ui/src/button.d.ts +2 -2
  92. package/dist/_dts/ui/src/callout.d.ts +1 -1
  93. package/dist/_dts/ui/src/card.d.ts +1 -1
  94. package/dist/_dts/ui/src/palette/ColorChooserDialog.d.ts +47 -0
  95. package/dist/_dts/ui/src/palette/ColorSlotButton.d.ts +15 -0
  96. package/dist/_dts/ui/src/palette/ColorSwatchButton.d.ts +15 -0
  97. package/dist/_dts/ui/src/palette/PaletteTokenEditor.d.ts +50 -0
  98. package/dist/_dts/ui/src/palette/hex.d.ts +23 -0
  99. package/dist/_dts/ui/src/palette/index.d.ts +14 -0
  100. package/dist/_dts/ui/src/surface.d.ts +2 -2
  101. package/dist/_dts/ui/src/toggle.d.ts +4 -4
  102. package/dist/cli/index.mjs +1535 -1183
  103. package/dist/client/client.mjs +3944 -3454
  104. package/dist/client/hooks.mjs +2053 -1743
  105. package/dist/client/rendering/client.mjs +311 -167
  106. package/dist/client/rendering/islands.mjs +159 -73
  107. package/dist/client/rendering.mjs +1918 -1447
  108. package/dist/preview-next/before-render.mjs +147 -1
  109. package/dist/preview-next/client/runtime.mjs +2828 -2174
  110. package/dist/preview-next/middleware.mjs +147 -1
  111. package/dist/server/components.mjs +4311 -3928
  112. package/dist/server/config-validation.mjs +2201 -1906
  113. package/dist/server/config.mjs +2201 -1906
  114. package/dist/server/data.mjs +2053 -1743
  115. package/dist/server/index.mjs +171 -4
  116. package/dist/server/next.mjs +3442 -3024
  117. package/dist/server/page-converter.mjs +2109 -1962
  118. package/dist/server/prebuild.mjs +1 -1
  119. package/dist/server/rendering/server.mjs +4021 -3622
  120. package/dist/server/rendering.mjs +4021 -3622
  121. package/dist/server/routing.mjs +2377 -2058
  122. package/dist/server/server.mjs +2244 -1915
  123. package/dist/server/theme-bridge.mjs +130 -126
  124. package/dist/server/theme.mjs +131 -129
  125. package/package.json +1 -1
  126. package/dist/_dts/theme-core/src/site-styles/compatibility.d.ts +0 -109
@@ -191,6 +191,7 @@ var init_assertNever = __esm({
191
191
  // ../core/src/participants.ts
192
192
  var init_participants = __esm({
193
193
  "../core/src/participants.ts"() {
194
+ init_branded();
194
195
  init_result();
195
196
  }
196
197
  });
@@ -1530,23 +1531,6 @@ var init_typeGuards = __esm({
1530
1531
  "../blocks/src/lib/typeGuards.ts"() {
1531
1532
  }
1532
1533
  });
1533
- var STYLE_AXIS_VALUES, styleTagsSchema;
1534
- var init_compatibility = __esm({
1535
- "../theme-core/src/site-styles/compatibility.ts"() {
1536
- STYLE_AXIS_VALUES = {
1537
- tone: ["minimal", "classic", "bold"],
1538
- energy: ["calm", "vibrant"],
1539
- motion: ["subtle", "standard", "expressive"],
1540
- era: ["editorial", "modern", "organic", "technical", "retro"]
1541
- };
1542
- styleTagsSchema = z.object({
1543
- tone: z.enum(STYLE_AXIS_VALUES.tone).optional(),
1544
- energy: z.enum(STYLE_AXIS_VALUES.energy).optional(),
1545
- motion: z.enum(STYLE_AXIS_VALUES.motion).optional(),
1546
- era: z.enum(STYLE_AXIS_VALUES.era).optional()
1547
- });
1548
- }
1549
- });
1550
1534
  var VARIANT_ROLES, cornerStyleSchema, shadowSizeSchema, textTransformSchema, fontWeightSchema, buttonTypographySchema, letterSpacingSchema, hoverTransformSchema, hoverColorSchema, buttonPaddingPresetSchema, gradientStyleSchema, gradientSharpnessSchema, prioritySchema, buttonSizeNameSchema, PADDING_TOKEN_PATTERN, paddingShorthandSchema, buttonSizeConfigSchema, buttonSizesSchema, buttonGlobalSettingsSchema, gradientDirectionSchema, buttonBackgroundSchema, effectApplicationSchema, buttonBorderSchema, variantShadowSchema, variantEffectsSchema, variantSizeOverridesSchema, buttonVariantSchema, buttonSystemSchema;
1551
1535
  var init_types2 = __esm({
1552
1536
  "../theme-core/src/buttons/types.ts"() {
@@ -1696,136 +1680,21 @@ var init_types2 = __esm({
1696
1680
  });
1697
1681
  }
1698
1682
  });
1699
-
1700
- // ../theme-core/src/tokens/resolver.ts
1701
- var init_resolver = __esm({
1702
- "../theme-core/src/tokens/resolver.ts"() {
1703
- }
1704
- });
1705
-
1706
- // ../theme-core/src/buttons/effects/presets/background.ts
1707
- var init_background = __esm({
1708
- "../theme-core/src/buttons/effects/presets/background.ts"() {
1709
- }
1710
- });
1711
-
1712
- // ../theme-core/src/buttons/effects/cssUtils.ts
1713
- var init_cssUtils = __esm({
1714
- "../theme-core/src/buttons/effects/cssUtils.ts"() {
1715
- }
1716
- });
1717
-
1718
- // ../theme-core/src/buttons/effects/presets/shadow.ts
1719
- var init_shadow = __esm({
1720
- "../theme-core/src/buttons/effects/presets/shadow.ts"() {
1721
- init_cssUtils();
1722
- }
1723
- });
1724
-
1725
- // ../theme-core/src/buttons/effects/presets/transform.ts
1726
- var init_transform = __esm({
1727
- "../theme-core/src/buttons/effects/presets/transform.ts"() {
1728
- init_cssUtils();
1729
- }
1730
- });
1731
-
1732
- // ../theme-core/src/buttons/effects/presets/overlay.ts
1733
- var init_overlay = __esm({
1734
- "../theme-core/src/buttons/effects/presets/overlay.ts"() {
1735
- }
1736
- });
1737
-
1738
- // ../theme-core/src/buttons/effects/presets/text.ts
1739
- var init_text = __esm({
1740
- "../theme-core/src/buttons/effects/presets/text.ts"() {
1741
- }
1742
- });
1743
-
1744
- // ../theme-core/src/buttons/effects/presets/border.ts
1745
- var init_border = __esm({
1746
- "../theme-core/src/buttons/effects/presets/border.ts"() {
1747
- }
1748
- });
1749
-
1750
- // ../theme-core/src/buttons/effects/presets/animation.ts
1751
- var init_animation = __esm({
1752
- "../theme-core/src/buttons/effects/presets/animation.ts"() {
1753
- }
1754
- });
1755
-
1756
- // ../theme-core/src/interactive/effects/nav-underline.ts
1757
- var init_nav_underline = __esm({
1758
- "../theme-core/src/interactive/effects/nav-underline.ts"() {
1759
- }
1760
- });
1761
-
1762
- // ../theme-core/src/interactive/effects/nav-frosted.ts
1763
- var init_nav_frosted = __esm({
1764
- "../theme-core/src/interactive/effects/nav-frosted.ts"() {
1765
- }
1766
- });
1767
-
1768
- // ../theme-core/src/interactive/effects/index.ts
1769
- var init_effects = __esm({
1770
- "../theme-core/src/interactive/effects/index.ts"() {
1771
- init_nav_underline();
1772
- init_nav_frosted();
1773
- }
1774
- });
1775
-
1776
- // ../theme-core/src/buttons/effects/registry.ts
1777
- var init_registry = __esm({
1778
- "../theme-core/src/buttons/effects/registry.ts"() {
1779
- init_background();
1780
- init_shadow();
1781
- init_transform();
1782
- init_overlay();
1783
- init_text();
1784
- init_border();
1785
- init_animation();
1786
- init_effects();
1787
- }
1788
- });
1789
-
1790
- // ../theme-core/src/interactive/generateEffectsCSS.ts
1791
- var init_generateEffectsCSS = __esm({
1792
- "../theme-core/src/interactive/generateEffectsCSS.ts"() {
1793
- init_registry();
1794
- }
1795
- });
1796
-
1797
- // ../theme-core/src/buttons/constants.ts
1798
- var init_constants = __esm({
1799
- "../theme-core/src/buttons/constants.ts"() {
1800
- }
1801
- });
1802
-
1803
- // ../theme-core/src/buttons/utils/contrast.ts
1804
- var init_contrast = __esm({
1805
- "../theme-core/src/buttons/utils/contrast.ts"() {
1806
- }
1807
- });
1808
-
1809
- // ../theme-core/src/buttons/generateDefaultButtonSystem.ts
1810
- var init_generateDefaultButtonSystem = __esm({
1811
- "../theme-core/src/buttons/generateDefaultButtonSystem.ts"() {
1812
- init_contrast();
1813
- }
1814
- });
1815
- var init_generateButtonCss = __esm({
1816
- "../theme-core/src/buttons/generateButtonCss.ts"() {
1817
- init_types2();
1818
- init_resolver();
1819
- init_generateEffectsCSS();
1820
- init_constants();
1821
- init_generateDefaultButtonSystem();
1822
- buttonSizeNameSchema.options;
1823
- }
1824
- });
1825
-
1826
- // ../theme-core/src/buttons/presets.ts
1827
- var init_presets = __esm({
1828
- "../theme-core/src/buttons/presets.ts"() {
1683
+ var STYLE_AXIS_VALUES, styleTagsSchema;
1684
+ var init_styleTags = __esm({
1685
+ "../theme-core/src/site-styles/styleTags.ts"() {
1686
+ STYLE_AXIS_VALUES = {
1687
+ tone: ["minimal", "classic", "bold"],
1688
+ energy: ["calm", "vibrant"],
1689
+ motion: ["subtle", "standard", "expressive"],
1690
+ era: ["editorial", "modern", "organic", "technical", "retro"]
1691
+ };
1692
+ styleTagsSchema = z.object({
1693
+ tone: z.enum(STYLE_AXIS_VALUES.tone).optional(),
1694
+ energy: z.enum(STYLE_AXIS_VALUES.energy).optional(),
1695
+ motion: z.enum(STYLE_AXIS_VALUES.motion).optional(),
1696
+ era: z.enum(STYLE_AXIS_VALUES.era).optional()
1697
+ });
1829
1698
  }
1830
1699
  });
1831
1700
  function asButtonPersonalityId(value) {
@@ -1847,7 +1716,7 @@ var buttonPersonalityIdSchema;
1847
1716
  var init_types3 = __esm({
1848
1717
  "../theme-core/src/buttons/personalities/types.ts"() {
1849
1718
  init_types2();
1850
- init_compatibility();
1719
+ init_styleTags();
1851
1720
  buttonPersonalityIdSchema = z.string().min(1).transform((value) => asButtonPersonalityId(value));
1852
1721
  z.object({
1853
1722
  id: buttonPersonalityIdSchema,
@@ -2431,6 +2300,138 @@ var init_personalities = __esm({
2431
2300
  }
2432
2301
  });
2433
2302
 
2303
+ // ../theme-core/src/tokens/resolver.ts
2304
+ var init_resolver = __esm({
2305
+ "../theme-core/src/tokens/resolver.ts"() {
2306
+ }
2307
+ });
2308
+
2309
+ // ../theme-core/src/buttons/effects/presets/background.ts
2310
+ var init_background = __esm({
2311
+ "../theme-core/src/buttons/effects/presets/background.ts"() {
2312
+ }
2313
+ });
2314
+
2315
+ // ../theme-core/src/buttons/effects/cssUtils.ts
2316
+ var init_cssUtils = __esm({
2317
+ "../theme-core/src/buttons/effects/cssUtils.ts"() {
2318
+ }
2319
+ });
2320
+
2321
+ // ../theme-core/src/buttons/effects/presets/shadow.ts
2322
+ var init_shadow = __esm({
2323
+ "../theme-core/src/buttons/effects/presets/shadow.ts"() {
2324
+ init_cssUtils();
2325
+ }
2326
+ });
2327
+
2328
+ // ../theme-core/src/buttons/effects/presets/transform.ts
2329
+ var init_transform = __esm({
2330
+ "../theme-core/src/buttons/effects/presets/transform.ts"() {
2331
+ init_cssUtils();
2332
+ }
2333
+ });
2334
+
2335
+ // ../theme-core/src/buttons/effects/presets/overlay.ts
2336
+ var init_overlay = __esm({
2337
+ "../theme-core/src/buttons/effects/presets/overlay.ts"() {
2338
+ }
2339
+ });
2340
+
2341
+ // ../theme-core/src/buttons/effects/presets/text.ts
2342
+ var init_text = __esm({
2343
+ "../theme-core/src/buttons/effects/presets/text.ts"() {
2344
+ }
2345
+ });
2346
+
2347
+ // ../theme-core/src/buttons/effects/presets/border.ts
2348
+ var init_border = __esm({
2349
+ "../theme-core/src/buttons/effects/presets/border.ts"() {
2350
+ }
2351
+ });
2352
+
2353
+ // ../theme-core/src/buttons/effects/presets/animation.ts
2354
+ var init_animation = __esm({
2355
+ "../theme-core/src/buttons/effects/presets/animation.ts"() {
2356
+ }
2357
+ });
2358
+
2359
+ // ../theme-core/src/interactive/effects/nav-underline.ts
2360
+ var init_nav_underline = __esm({
2361
+ "../theme-core/src/interactive/effects/nav-underline.ts"() {
2362
+ }
2363
+ });
2364
+
2365
+ // ../theme-core/src/interactive/effects/nav-frosted.ts
2366
+ var init_nav_frosted = __esm({
2367
+ "../theme-core/src/interactive/effects/nav-frosted.ts"() {
2368
+ }
2369
+ });
2370
+
2371
+ // ../theme-core/src/interactive/effects/index.ts
2372
+ var init_effects = __esm({
2373
+ "../theme-core/src/interactive/effects/index.ts"() {
2374
+ init_nav_underline();
2375
+ init_nav_frosted();
2376
+ }
2377
+ });
2378
+
2379
+ // ../theme-core/src/buttons/effects/registry.ts
2380
+ var init_registry = __esm({
2381
+ "../theme-core/src/buttons/effects/registry.ts"() {
2382
+ init_background();
2383
+ init_shadow();
2384
+ init_transform();
2385
+ init_overlay();
2386
+ init_text();
2387
+ init_border();
2388
+ init_animation();
2389
+ init_effects();
2390
+ }
2391
+ });
2392
+
2393
+ // ../theme-core/src/interactive/generateEffectsCSS.ts
2394
+ var init_generateEffectsCSS = __esm({
2395
+ "../theme-core/src/interactive/generateEffectsCSS.ts"() {
2396
+ init_registry();
2397
+ }
2398
+ });
2399
+
2400
+ // ../theme-core/src/buttons/constants.ts
2401
+ var init_constants = __esm({
2402
+ "../theme-core/src/buttons/constants.ts"() {
2403
+ }
2404
+ });
2405
+
2406
+ // ../theme-core/src/buttons/utils/contrast.ts
2407
+ var init_contrast = __esm({
2408
+ "../theme-core/src/buttons/utils/contrast.ts"() {
2409
+ }
2410
+ });
2411
+
2412
+ // ../theme-core/src/buttons/generateDefaultButtonSystem.ts
2413
+ var init_generateDefaultButtonSystem = __esm({
2414
+ "../theme-core/src/buttons/generateDefaultButtonSystem.ts"() {
2415
+ init_contrast();
2416
+ }
2417
+ });
2418
+ var init_generateButtonCss = __esm({
2419
+ "../theme-core/src/buttons/generateButtonCss.ts"() {
2420
+ init_types2();
2421
+ init_resolver();
2422
+ init_generateEffectsCSS();
2423
+ init_constants();
2424
+ init_generateDefaultButtonSystem();
2425
+ buttonSizeNameSchema.options;
2426
+ }
2427
+ });
2428
+
2429
+ // ../theme-core/src/buttons/presets.ts
2430
+ var init_presets = __esm({
2431
+ "../theme-core/src/buttons/presets.ts"() {
2432
+ }
2433
+ });
2434
+
2434
2435
  // ../theme-core/src/buttons/effects/types.ts
2435
2436
  var init_types4 = __esm({
2436
2437
  "../theme-core/src/buttons/effects/types.ts"() {
@@ -3942,7 +3943,8 @@ function ctaButton(opts) {
3942
3943
  },
3943
3944
  size: {
3944
3945
  $bind: {
3945
- from: sizePath
3946
+ from: sizePath,
3947
+ fallback: opts?.sizeFallback ?? "md"
3946
3948
  }
3947
3949
  },
3948
3950
  ...opts?.className ? { className: opts.className } : {},
@@ -8161,7 +8163,19 @@ var init_teamMember = __esm({
8161
8163
  bind("photo")
8162
8164
  )
8163
8165
  ]),
8164
- text({ as: "h3" }, bind("name")),
8166
+ link(
8167
+ {
8168
+ href: { $bind: { from: "profilePath" } },
8169
+ className: "rb-team-member-name-link"
8170
+ },
8171
+ [text({ as: "h3" }, bind("name"))],
8172
+ when("profilePath")
8173
+ ),
8174
+ text(
8175
+ { as: "h3" },
8176
+ when("profilePath", { not: true }),
8177
+ bind("name")
8178
+ ),
8165
8179
  text({ as: "p", className: "rb-team-member-role" }, when("role"), bind("role")),
8166
8180
  richText(
8167
8181
  { className: "rb-prose rb-max-w-none" },
@@ -8798,7 +8812,9 @@ var init_schemas = __esm({
8798
8812
  courseTeamMemberSummarySchema = z.object({
8799
8813
  id: z.string(),
8800
8814
  name: z.string(),
8801
- summary: z.string().nullable()
8815
+ roleLabel: z.string().nullable(),
8816
+ summary: z.string().nullable(),
8817
+ profilePath: z.string().nullable()
8802
8818
  });
8803
8819
  coursePricingOptionSchema = z.object({
8804
8820
  id: z.string(),
@@ -8909,7 +8925,9 @@ var init_schemas2 = __esm({
8909
8925
  publicTeamMemberSummarySchema = z.object({
8910
8926
  id: z.string(),
8911
8927
  name: z.string(),
8912
- summary: z.string().nullable()
8928
+ roleLabel: z.string().nullable(),
8929
+ summary: z.string().nullable(),
8930
+ profilePath: z.string().nullable()
8913
8931
  });
8914
8932
  publicEventSchema = z.object({
8915
8933
  kind: z.enum(["event", "course_session"]).optional(),
@@ -14946,13 +14964,150 @@ var ENDPOINT_DEFINITIONS = {
14946
14964
  "server:internal_error"
14947
14965
  ]
14948
14966
  },
14949
- deleteAppointmentResource: {
14967
+ removeAppointmentResource: {
14950
14968
  path: "/sites/{siteId}/bookings/resources/{resourceId}",
14951
14969
  method: "DELETE",
14952
14970
  auth: "user",
14953
14971
  responseKind: "json",
14954
14972
  errors: ["resource:not_found", "server:internal_error"]
14955
14973
  },
14974
+ createTeamMemberProfile: {
14975
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile",
14976
+ method: "POST",
14977
+ auth: "user",
14978
+ responseKind: "json",
14979
+ errors: [
14980
+ "validation:invalid_input",
14981
+ "resource:not_found",
14982
+ "resource:conflict",
14983
+ "server:internal_error"
14984
+ ]
14985
+ },
14986
+ updateTeamMemberProfilePolicy: {
14987
+ path: "/sites/{siteId}/bookings/resources/profile-policy",
14988
+ method: "PUT",
14989
+ auth: "user",
14990
+ responseKind: "json",
14991
+ errors: ["validation:invalid_input", "server:internal_error"]
14992
+ },
14993
+ updateTeamMemberProfileContent: {
14994
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/content",
14995
+ method: "PUT",
14996
+ tags: [
14997
+ "site-{siteId}",
14998
+ "content-{siteId}-team-member",
14999
+ "content-entry-{entryId}"
15000
+ ],
15001
+ auth: "user",
15002
+ responseKind: "json",
15003
+ errors: [
15004
+ "validation:invalid_input",
15005
+ "resource:not_found",
15006
+ "resource:conflict",
15007
+ "server:internal_error"
15008
+ ]
15009
+ },
15010
+ publishTeamMemberProfile: {
15011
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/publish",
15012
+ method: "POST",
15013
+ tags: [
15014
+ "site-{siteId}",
15015
+ "content-{siteId}-team-member",
15016
+ "content-entry-{entryId}"
15017
+ ],
15018
+ auth: "user",
15019
+ responseKind: "json",
15020
+ errors: [
15021
+ "validation:invalid_input",
15022
+ "resource:not_found",
15023
+ "server:internal_error"
15024
+ ]
15025
+ },
15026
+ discardTeamMemberProfileDraft: {
15027
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/discard",
15028
+ method: "POST",
15029
+ tags: [
15030
+ "site-{siteId}",
15031
+ "content-{siteId}-team-member",
15032
+ "content-entry-{entryId}"
15033
+ ],
15034
+ auth: "user",
15035
+ responseKind: "json",
15036
+ errors: [
15037
+ "validation:invalid_input",
15038
+ "resource:not_found",
15039
+ "resource:conflict",
15040
+ "server:internal_error"
15041
+ ]
15042
+ },
15043
+ unpublishTeamMemberProfile: {
15044
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/unpublish",
15045
+ method: "POST",
15046
+ tags: [
15047
+ "site-{siteId}",
15048
+ "content-{siteId}-team-member",
15049
+ "content-entry-{entryId}"
15050
+ ],
15051
+ auth: "user",
15052
+ responseKind: "json",
15053
+ errors: [
15054
+ "validation:invalid_input",
15055
+ "resource:not_found",
15056
+ "resource:conflict",
15057
+ "server:internal_error"
15058
+ ]
15059
+ },
15060
+ scheduleTeamMemberProfile: {
15061
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/schedule",
15062
+ method: "POST",
15063
+ tags: [
15064
+ "site-{siteId}",
15065
+ "content-{siteId}-team-member",
15066
+ "content-entry-{entryId}"
15067
+ ],
15068
+ auth: "user",
15069
+ responseKind: "json",
15070
+ errors: [
15071
+ "validation:invalid_input",
15072
+ "resource:not_found",
15073
+ "resource:conflict",
15074
+ "server:internal_error"
15075
+ ]
15076
+ },
15077
+ cancelScheduledTeamMemberProfile: {
15078
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/schedule",
15079
+ method: "DELETE",
15080
+ tags: [
15081
+ "site-{siteId}",
15082
+ "content-{siteId}-team-member",
15083
+ "content-entry-{entryId}"
15084
+ ],
15085
+ auth: "user",
15086
+ responseKind: "json",
15087
+ errors: [
15088
+ "validation:invalid_input",
15089
+ "resource:not_found",
15090
+ "resource:conflict",
15091
+ "server:internal_error"
15092
+ ]
15093
+ },
15094
+ updateTeamMemberProfileRouteMetadata: {
15095
+ path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/routes/{routeId}/metadata",
15096
+ method: "PATCH",
15097
+ tags: [
15098
+ TAG_TEMPLATES.siteCollection,
15099
+ TAG_TEMPLATES.siteRoutableContent,
15100
+ TAG_TEMPLATES.routeById
15101
+ ],
15102
+ auth: "user",
15103
+ responseKind: "json",
15104
+ errors: [
15105
+ "validation:invalid_input",
15106
+ "resource:not_found",
15107
+ "resource:conflict",
15108
+ "server:internal_error"
15109
+ ]
15110
+ },
14956
15111
  listAppointmentServices: {
14957
15112
  path: "/sites/{siteId}/bookings/services",
14958
15113
  method: "GET",
@@ -17326,6 +17481,15 @@ var ENDPOINT_DEFINITIONS = {
17326
17481
  auth: "public",
17327
17482
  responseKind: "json"
17328
17483
  },
17484
+ listPublicTeamMembers: {
17485
+ path: "/public/sites/{siteId}/team-members",
17486
+ method: "GET",
17487
+ revalidate: 60,
17488
+ tags: ["public-team-members-{siteId}"],
17489
+ errors: [],
17490
+ auth: "public",
17491
+ responseKind: "json"
17492
+ },
17329
17493
  getPublicCourse: {
17330
17494
  path: "/public/sites/{siteId}/courses/{courseId}",
17331
17495
  method: "GET",
@@ -19701,6 +19865,7 @@ var SUPPORTED_LOADER_ENDPOINTS = [
19701
19865
  "listPublicEvents",
19702
19866
  "getPublicEventDetails",
19703
19867
  "listPublicCourses",
19868
+ "listPublicTeamMembers",
19704
19869
  "listPublicProducts",
19705
19870
  "listPublicPasses",
19706
19871
  "listPublicMemberships",
@@ -21121,35 +21286,61 @@ function buildFieldSchema(field, allowNull, allowIncomplete = false) {
21121
21286
  }
21122
21287
  return finalizeSchema(schema, required, allowNull, allowIncomplete);
21123
21288
  }
21289
+ function buildFriendlyStringSchema(field) {
21290
+ return z.string({
21291
+ error: (issue) => issue.input === void 0 || issue.input === null ? "This field is required" : `${field.label} needs text`
21292
+ });
21293
+ }
21124
21294
  function buildTextSchema(field) {
21125
21295
  const ui = field.ui ?? {};
21126
21296
  const inputType = ui?.inputType;
21127
21297
  let schema;
21128
21298
  if (inputType === "number") {
21129
- schema = z.coerce.number();
21130
- if (typeof ui?.min === "number") schema = schema.min(ui.min);
21131
- if (typeof ui?.max === "number") schema = schema.max(ui.max);
21299
+ schema = z.coerce.number({
21300
+ error: (issue) => issue.input === void 0 ? `${field.label} is required` : `${field.label} needs a number`
21301
+ });
21302
+ if (typeof ui?.min === "number") {
21303
+ schema = schema.min(
21304
+ ui.min,
21305
+ `${field.label} must be ${ui.min} or more`
21306
+ );
21307
+ }
21308
+ if (typeof ui?.max === "number") {
21309
+ schema = schema.max(
21310
+ ui.max,
21311
+ `${field.label} must be ${ui.max} or less`
21312
+ );
21313
+ }
21132
21314
  } else {
21133
- schema = z.string();
21315
+ schema = buildFriendlyStringSchema(field);
21134
21316
  if (inputType === "email") {
21135
- schema = schema.email(`${field.label} must be a valid email`);
21317
+ schema = schema.email("Enter a valid email address");
21136
21318
  }
21137
21319
  if (inputType === "tel") {
21138
21320
  const TEL_RE = /^[+()0-9\s\-]{3,}$/;
21139
- schema = schema.regex(TEL_RE, `${field.label} must be a valid phone number`);
21321
+ schema = schema.regex(
21322
+ TEL_RE,
21323
+ "Enter a valid phone number"
21324
+ );
21140
21325
  }
21141
21326
  if (ui?.pattern) {
21142
21327
  try {
21143
21328
  const re = new RegExp(ui.pattern);
21144
- schema = schema.regex(re, `${field.label} is not in the correct format`);
21329
+ schema = schema.regex(
21330
+ re,
21331
+ `${field.label} is not in the right format`
21332
+ );
21145
21333
  } catch {
21146
21334
  }
21147
21335
  }
21148
21336
  if (field.maxLength) {
21149
- schema = schema.max(field.maxLength, `${field.label} must have at most ${field.maxLength} characters`);
21337
+ schema = schema.max(
21338
+ field.maxLength,
21339
+ `${field.label} must be ${field.maxLength} characters or less`
21340
+ );
21150
21341
  }
21151
21342
  if (field.required) {
21152
- schema = schema.min(1, `${field.label} is required`).refine((v) => v.trim().length > 0, { message: `${field.label} is required` });
21343
+ schema = schema.min(1, { message: `${field.label} is required` }).refine((v) => v.trim().length > 0, { message: `${field.label} is required` });
21153
21344
  }
21154
21345
  }
21155
21346
  return schema;
@@ -21159,19 +21350,22 @@ function buildRichTextSchema2() {
21159
21350
  }
21160
21351
  var SLUG_PATTERN = /^(?:[a-z0-9]+(?:-[a-z0-9]+)*)(?:\/(?:[a-z0-9]+(?:-[a-z0-9]+)*))*$/;
21161
21352
  function buildSlugSchema(field) {
21162
- const message = `${field.label} must contain lowercase letters, numbers, and dashes`;
21163
- let schema = z.string().regex(SLUG_PATTERN, message);
21353
+ const message = `${field.label} can only use lowercase letters, numbers, and dashes`;
21354
+ let schema = buildFriendlyStringSchema(field).regex(SLUG_PATTERN, message);
21164
21355
  if (field.maxLength) {
21165
- schema = schema.max(field.maxLength, `${field.label} must be at most ${field.maxLength} characters`);
21356
+ schema = schema.max(
21357
+ field.maxLength,
21358
+ `${field.label} must be ${field.maxLength} characters or less`
21359
+ );
21166
21360
  }
21167
21361
  if (field.required) {
21168
- schema = schema.min(1, `${field.label} is required`);
21362
+ schema = schema.min(1, { message: `${field.label} is required` });
21169
21363
  }
21170
21364
  return schema;
21171
21365
  }
21172
21366
  var ALLOWED_URL_PROTOCOLS = ["http:", "https:"];
21173
21367
  function buildUrlSchema(field) {
21174
- const message = `${field.label} must be a valid URL`;
21368
+ const message = "Enter a valid web address";
21175
21369
  const validate = (value) => {
21176
21370
  if (!value) {
21177
21371
  return !field.required;
@@ -21181,14 +21375,16 @@ function buildUrlSchema(field) {
21181
21375
  }
21182
21376
  try {
21183
21377
  const parsed = new URL(value);
21184
- return ALLOWED_URL_PROTOCOLS.includes(parsed.protocol);
21378
+ return ALLOWED_URL_PROTOCOLS.includes(
21379
+ parsed.protocol
21380
+ );
21185
21381
  } catch {
21186
21382
  return false;
21187
21383
  }
21188
21384
  };
21189
- let schema = z.string().trim().refine(validate, message);
21385
+ let schema = buildFriendlyStringSchema(field).trim().refine(validate, message);
21190
21386
  if (field.required) {
21191
- schema = schema.min(1, `${field.label} is required`);
21387
+ schema = schema.min(1, { message: `${field.label} is required` });
21192
21388
  }
21193
21389
  return schema;
21194
21390
  }
@@ -21241,10 +21437,13 @@ function buildSelectSchema(field) {
21241
21437
  switch (source.kind) {
21242
21438
  case "sdk":
21243
21439
  case "site":
21244
- return z.string();
21440
+ return buildFriendlyStringSchema(field);
21245
21441
  case "static": {
21246
21442
  const values = field.options.map((option) => option.value);
21247
- return z.string().refine((value) => values.includes(value), `${field.label} must be one of: ${values.join(", ")}`);
21443
+ return buildFriendlyStringSchema(field).refine(
21444
+ (value) => values.includes(value),
21445
+ `Choose one of the available options for ${field.label}`
21446
+ );
21248
21447
  }
21249
21448
  default:
21250
21449
  return assertNeverSelectSource2(source);
@@ -21252,14 +21451,16 @@ function buildSelectSchema(field) {
21252
21451
  })();
21253
21452
  if (field.multiple) {
21254
21453
  const arraySchema = z.array(singleValueSchema);
21255
- return field.required ? arraySchema : arraySchema.nullable();
21454
+ return field.required ? arraySchema.min(1, { message: "This field is required" }) : arraySchema.nullable();
21256
21455
  }
21257
21456
  return field.required ? singleValueSchema : singleValueSchema.nullable();
21258
21457
  }
21259
21458
  function buildReferenceSchema(field) {
21260
- let schema = z.string();
21459
+ let schema = z.string({
21460
+ error: (issue) => issue.input === void 0 || issue.input === null ? "This field is required" : `${field.label} needs text`
21461
+ });
21261
21462
  if (field.required) {
21262
- schema = schema.min(1, `${field.label} is required`);
21463
+ schema = schema.min(1, { message: `${field.label} is required` });
21263
21464
  }
21264
21465
  return schema;
21265
21466
  }
@@ -21607,635 +21808,65 @@ function assertUniqueLayoutProfileKeys(profiles) {
21607
21808
  }
21608
21809
  }
21609
21810
 
21610
- // ../theme-core/src/site-styles/index.ts
21611
- init_compatibility();
21612
-
21613
- // ../theme-core/src/site-styles/sourceCatalogs.ts
21614
- var generatedContentFrames = [
21615
- plainFrame,
21616
- panelFrame("inset"),
21617
- panelFrame("raised"),
21618
- flushPanelFrame({ bleed: "start" })
21619
- ];
21620
- var userContentFrames = [
21621
- ...generatedContentFrames,
21622
- panelFrame("editorial"),
21623
- flushPanelFrame({ bleed: "end" }),
21624
- flushPanelFrame({ bleed: "both" })
21625
- ];
21626
- var generatedDesignOptionCatalog = {
21627
- sectionSurfaces: ["base", "muted-band", "accent-band", "hero-image"],
21628
- contentFrames: generatedContentFrames,
21629
- itemSurfaces: ["none", "default", "flat", "outlined", "raised"],
21630
- transitions: ["none", "soft-fade-short", "soft-fade-long"],
21631
- emphases: ["low", "medium", "high"]};
21632
- var userDesignOptionCatalog = {
21633
- sectionSurfaces: generatedDesignOptionCatalog.sectionSurfaces,
21634
- contentFrames: userContentFrames,
21635
- itemSurfaces: [
21636
- ...generatedDesignOptionCatalog.itemSurfaces,
21637
- "inset",
21638
- "editorial"
21639
- ],
21640
- transitions: [
21641
- ...generatedDesignOptionCatalog.transitions,
21642
- "wave-edge",
21643
- "angle-edge"
21644
- ],
21645
- emphases: generatedDesignOptionCatalog.emphases};
21646
-
21647
21811
  // ../theme-core/src/site-styles/curatedSiteStyles.ts
21648
- var curatedSiteStyleIdValues = [
21649
- "site-style:calm-studio",
21650
- "site-style:clear-professional",
21651
- "site-style:warm-editorial",
21652
- "site-style:bright-community",
21653
- "site-style:quiet-luxury",
21654
- "site-style:practical-services",
21655
- "site-style:modern-wellness",
21656
- "site-style:bold-launch"
21657
- ];
21658
- var quietBudget = {
21659
- accentDensity: "low",
21660
- panelDensity: "medium",
21661
- transitionMix: "quiet",
21662
- primaryCtaLimit: 2,
21663
- mediaDensity: "medium",
21664
- decorativeRepetition: "low"
21665
- };
21666
- var balancedBudget = {
21667
- accentDensity: "medium",
21668
- panelDensity: "medium",
21669
- transitionMix: "balanced",
21670
- primaryCtaLimit: 3,
21671
- mediaDensity: "medium",
21672
- decorativeRepetition: "medium"
21673
- };
21674
- var expressiveBudget = {
21675
- accentDensity: "high",
21676
- panelDensity: "high",
21677
- transitionMix: "expressive",
21678
- primaryCtaLimit: 3,
21679
- mediaDensity: "high",
21680
- decorativeRepetition: "medium"
21681
- };
21682
- function uniqueContentFrameKinds() {
21683
- const kinds = [...new Set(
21684
- generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
21685
- )];
21686
- const firstKind = kinds[0];
21687
- if (!firstKind) {
21688
- throw new Error("Expected generated design option catalog to expose at least one content frame kind.");
21689
- }
21690
- return [firstKind, ...kinds.slice(1)];
21691
- }
21692
- var generatedContentFrameKinds = uniqueContentFrameKinds();
21693
- function defineCuratedSiteStyle(input) {
21694
- return {
21695
- id: asSiteStyleId(input.id),
21696
- name: input.name,
21697
- description: input.description,
21698
- generationBrief: input.generationBrief,
21699
- selectionKeywords: input.selectionKeywords ?? [],
21700
- template: {
21701
- id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
21702
- name: input.name,
21703
- version: 1,
21704
- tokenRecipes: input.tokenRecipes,
21705
- compositionBudget: input.compositionBudget,
21706
- supportedSectionSurfaces: generatedDesignOptionCatalog.sectionSurfaces,
21707
- supportedContentFrames: generatedContentFrameKinds,
21708
- supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
21709
- supportedTransitions: generatedDesignOptionCatalog.transitions
21710
- },
21711
- // The library IDs are already branded at construction (`asButtonPersonalityId`
21712
- // / `asPaletteVariantId`); the closed-union input type guarantees only
21713
- // shipped IDs reach this branch.
21714
- defaultButtonPersonalityId: input.defaultButtonPersonalityId,
21715
- acceptedButtons: input.acceptedButtons,
21716
- defaultPaletteVariantId: input.defaultPaletteVariantId,
21717
- acceptedPalettes: input.acceptedPalettes
21718
- };
21719
- }
21720
- var curatedSiteStyles = [
21721
- defineCuratedSiteStyle({
21722
- id: "site-style:calm-studio",
21723
- name: "Calm Studio",
21724
- description: "Soft, measured, and spacious for intimate appointment or class businesses.",
21725
- generationBrief: "Use calm pacing, concise copy, generous breathing room, and natural imagery. Keep calls to action steady rather than urgent.",
21726
- tokenRecipes: {
21727
- palette: "soft-natural",
21728
- contrast: "standard",
21729
- radius: "soft",
21730
- shadow: "subtle",
21731
- typography: "friendly-sans",
21732
- spacing: "airy",
21733
- motion: "subtle"
21734
- },
21735
- compositionBudget: quietBudget,
21736
- defaultButtonPersonalityId: "soft-pill",
21737
- acceptedButtons: { tone: ["minimal", "classic"], era: ["organic", "editorial"] },
21738
- defaultPaletteVariantId: "soft-natural-sage",
21739
- acceptedPalettes: { tone: ["minimal", "classic"], era: ["organic"] }
21740
- }),
21741
- defineCuratedSiteStyle({
21742
- id: "site-style:clear-professional",
21743
- name: "Clear Professional",
21744
- description: "Crisp, trustworthy, and direct for local services and consultancies.",
21745
- generationBrief: "Prioritize clarity, proof, service detail, and easy next steps. Keep visuals polished and specific, with restrained decorative treatment.",
21746
- tokenRecipes: {
21747
- palette: "brand-led",
21748
- contrast: "strong",
21749
- radius: "soft",
21750
- shadow: "subtle",
21751
- typography: "clean-sans",
21752
- spacing: "regular",
21753
- motion: "subtle"
21754
- },
21755
- compositionBudget: balancedBudget,
21756
- defaultButtonPersonalityId: "confident-chip",
21757
- acceptedButtons: { tone: ["minimal", "classic"], era: ["modern", "editorial"] },
21758
- defaultPaletteVariantId: "brand-led-cool",
21759
- acceptedPalettes: { tone: ["minimal", "classic"], era: ["modern", "editorial"] }
21760
- }),
21761
- defineCuratedSiteStyle({
21762
- id: "site-style:warm-editorial",
21763
- name: "Warm Editorial",
21764
- description: "Story-led and textured for educators, makers, venues, and retreats.",
21765
- generationBrief: "Let the copy feel thoughtful and grounded. Favor narrative sections, supporting media, and a small number of editorial panels.",
21766
- tokenRecipes: {
21767
- palette: "warm-neutral",
21768
- contrast: "standard",
21769
- radius: "square",
21770
- shadow: "none",
21771
- typography: "serif-editorial",
21772
- spacing: "airy",
21773
- motion: "subtle"
21774
- },
21775
- compositionBudget: balancedBudget,
21776
- defaultButtonPersonalityId: "editorial-link",
21777
- acceptedButtons: { tone: ["minimal", "classic"], era: ["editorial", "organic"] },
21778
- defaultPaletteVariantId: "warm-neutral-cream",
21779
- acceptedPalettes: { tone: ["minimal", "classic"], era: ["editorial", "organic"] }
21780
- }),
21781
- defineCuratedSiteStyle({
21782
- id: "site-style:bright-community",
21783
- name: "Bright Community",
21784
- description: "Friendly, welcoming, and active for groups, classes, and neighborhood offers.",
21785
- generationBrief: "Use welcoming language, clear event or booking routes, and optimistic imagery. Let accents appear, but avoid noisy decoration.",
21786
- tokenRecipes: {
21787
- palette: "brand-led",
21788
- contrast: "standard",
21789
- radius: "rounded",
21790
- shadow: "subtle",
21791
- typography: "friendly-sans",
21792
- spacing: "regular",
21793
- motion: "expressive"
21794
- },
21795
- compositionBudget: balancedBudget,
21796
- defaultButtonPersonalityId: "pebble",
21797
- acceptedButtons: { tone: ["classic", "bold"], era: ["organic", "modern"] },
21798
- defaultPaletteVariantId: "brand-led-warm",
21799
- acceptedPalettes: { tone: ["classic", "bold"], era: ["modern", "organic"] }
21800
- }),
21801
- defineCuratedSiteStyle({
21802
- id: "site-style:quiet-luxury",
21803
- name: "Quiet Luxury",
21804
- description: "Minimal, confident, and refined for premium experiences and private services.",
21805
- generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
21806
- selectionKeywords: [
21807
- "luxury",
21808
- "premium",
21809
- "boutique",
21810
- "bespoke",
21811
- "exclusive"
21812
- ],
21813
- tokenRecipes: {
21814
- palette: "high-contrast",
21815
- contrast: "strong",
21816
- radius: "square",
21817
- shadow: "none",
21818
- typography: "classic-serif",
21819
- spacing: "airy",
21820
- motion: "none"
21821
- },
21822
- compositionBudget: quietBudget,
21823
- defaultButtonPersonalityId: "editorial-link",
21824
- acceptedButtons: { tone: ["minimal", "classic"], era: ["editorial", "organic"] },
21825
- defaultPaletteVariantId: "high-contrast-charcoal",
21826
- acceptedPalettes: { tone: ["minimal", "classic"], era: ["editorial", "organic"] }
21827
- }),
21828
- defineCuratedSiteStyle({
21829
- id: "site-style:practical-services",
21830
- name: "Practical Services",
21831
- description: "Efficient, plainspoken, and conversion-focused for trades and everyday services.",
21832
- generationBrief: "Make services, location, trust signals, and contact paths obvious. Keep copy brief and avoid ornate visual treatments.",
21833
- selectionKeywords: [
21834
- "repair",
21835
- "plumb",
21836
- "electric",
21837
- "cleaning",
21838
- "landscap",
21839
- "contractor"
21840
- ],
21841
- tokenRecipes: {
21842
- palette: "brand-led",
21843
- contrast: "maximum",
21844
- radius: "soft",
21845
- shadow: "subtle",
21846
- typography: "clean-sans",
21847
- spacing: "compact",
21848
- motion: "none"
21849
- },
21850
- compositionBudget: quietBudget,
21851
- defaultButtonPersonalityId: "confident-chip",
21852
- acceptedButtons: { tone: ["minimal", "classic", "bold"], era: ["modern", "editorial"] },
21853
- defaultPaletteVariantId: "brand-led-cool",
21854
- acceptedPalettes: { tone: ["minimal", "classic", "bold"], era: ["modern", "editorial"] }
21855
- }),
21856
- defineCuratedSiteStyle({
21857
- id: "site-style:modern-wellness",
21858
- name: "Modern Wellness",
21859
- description: "Natural, current, and reassuring for practitioners, studios, and wellbeing offers.",
21860
- generationBrief: "Keep the tone warm and practical. Use gentle section variation, natural materials, and inclusive copy without making medical claims.",
21861
- tokenRecipes: {
21862
- palette: "soft-natural",
21863
- contrast: "standard",
21864
- radius: "rounded",
21865
- shadow: "subtle",
21866
- typography: "clean-sans",
21867
- spacing: "airy",
21868
- motion: "subtle"
21869
- },
21870
- compositionBudget: balancedBudget,
21871
- defaultButtonPersonalityId: "soft-pill",
21872
- acceptedButtons: { tone: ["minimal", "classic"], era: ["organic", "modern"] },
21873
- defaultPaletteVariantId: "soft-natural-sage",
21874
- acceptedPalettes: { tone: ["minimal", "classic"], era: ["organic"] }
21875
- }),
21876
- defineCuratedSiteStyle({
21877
- id: "site-style:bold-launch",
21878
- name: "Bold Launch",
21879
- description: "High-energy and punchy for launches, campaigns, and creative offers.",
21880
- generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
21881
- selectionKeywords: [
21882
- "launch",
21883
- "campaign",
21884
- "preorder",
21885
- "pre-order",
21886
- "waitlist",
21887
- "drop"
21888
- ],
21889
- tokenRecipes: {
21890
- palette: "high-contrast",
21891
- contrast: "maximum",
21892
- radius: "pill",
21893
- shadow: "layered",
21894
- typography: "clean-sans",
21895
- spacing: "regular",
21896
- motion: "expressive"
21897
- },
21898
- compositionBudget: expressiveBudget,
21899
- defaultButtonPersonalityId: "ink-stamp",
21900
- acceptedButtons: { tone: ["classic", "bold"], era: ["editorial", "organic", "modern"] },
21901
- defaultPaletteVariantId: "high-contrast-monochrome",
21902
- acceptedPalettes: { tone: ["bold"], era: ["editorial", "modern"] }
21903
- })
21904
- ];
21905
- new Map(
21906
- curatedSiteStyles.map((style) => [style.id, style])
21907
- );
21812
+ init_personalities();
21908
21813
 
21909
- // ../theme-core/src/site-styles/rawStyleFields.ts
21910
- var themeV2RuntimeStyleFieldNames = [
21911
- "_frameStyles",
21912
- "_sectionStyles",
21913
- "_containerStyles",
21914
- "_cardStyles",
21915
- // styleGroup is legacy runtime transition wiring rather than a nested
21916
- // override object, but normal editors should still never see it directly.
21917
- "styleGroup"
21918
- ];
21919
- var themeV2BlockSpecificRawStyleFieldNames = [
21920
- "_contentCardStyles",
21921
- "_textCardStyles"
21922
- ];
21923
- var themeV2NormalEditorRawStyleFieldNames = [
21924
- ...themeV2RuntimeStyleFieldNames,
21925
- ...themeV2BlockSpecificRawStyleFieldNames
21926
- ];
21927
- new Set(
21928
- themeV2NormalEditorRawStyleFieldNames
21929
- );
21814
+ // ../theme-core/src/palette/variants/types.ts
21815
+ init_styleTags();
21816
+ var hotspotSchema = z42.object({
21817
+ x: z42.number().min(0).max(1),
21818
+ y: z42.number().min(0).max(1),
21819
+ radius: z42.number().optional()
21820
+ });
21821
+ var rotationSchema = z42.union([z42.literal(0), z42.literal(90), z42.literal(180), z42.literal(270)]);
21822
+ var rectSchema = z42.tuple([z42.number(), z42.number(), z42.number(), z42.number()]);
21823
+ var aspectCropSchema = z42.object({
21824
+ aspect: z42.preprocess((value) => value == null ? void 0 : value, z42.string().optional()),
21825
+ rect: z42.preprocess((value) => value == null ? void 0 : value, rectSchema.optional()),
21826
+ hotspot: z42.preprocess((value) => value == null ? void 0 : value, hotspotSchema.optional()),
21827
+ rotation: z42.preprocess((value) => value == null ? void 0 : value, rotationSchema.optional())
21828
+ });
21829
+ var transformSchema = z42.object({
21830
+ aspectCrops: z42.preprocess((value) => {
21831
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
21832
+ return void 0;
21833
+ }
21834
+ return value;
21835
+ }, z42.record(z42.string(), aspectCropSchema.catch({}))).optional(),
21836
+ rect: rectSchema.optional(),
21837
+ hotspot: hotspotSchema.optional(),
21838
+ rotation: rotationSchema.optional()
21839
+ });
21840
+ var mediaSchema = z42.object({
21841
+ type: z42.enum(["image", "video", "audio", "document", "spreadsheet", "archive"]),
21842
+ purpose: z42.string().optional(),
21843
+ placeholder: z42.boolean().default(true).optional(),
21844
+ assetId: z42.string().optional(),
21845
+ identifier: z42.string().optional(),
21846
+ src: z42.string().optional(),
21847
+ alt: z42.string().optional(),
21848
+ filename: z42.string().optional(),
21849
+ mimeType: z42.string().optional(),
21850
+ width: z42.number().optional(),
21851
+ height: z42.number().optional(),
21852
+ storageBucket: z42.string().optional(),
21853
+ storagePath: z42.string().optional(),
21854
+ transform: transformSchema.optional()
21855
+ });
21930
21856
 
21931
- // ../theme-core/src/site-styles/designState.ts
21932
- var themeV2DesignStateSchemaVersion = 1;
21933
- var designResolutionPolicySchema = z.enum(["generated", "user", "admin", "sdk"]);
21934
- var runtimeStyleFieldNameSchema = z.enum(themeV2RuntimeStyleFieldNames);
21935
- var nonEmptyRuntimeStyleFieldNamesSchema = z.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
21936
- fields3[0],
21937
- ...fields3.slice(1)
21938
- ]);
21939
- var heroLegibilityStrategySchema = z.enum([
21940
- "none",
21941
- "scrim-gradient",
21942
- "solid-panel"
21943
- ]);
21944
- function uniqueNonEmpty(values) {
21945
- const uniqueValues = [...new Set(values)];
21946
- const firstValue = uniqueValues[0];
21947
- if (!firstValue) {
21948
- throw new Error("Expected at least one Theme V2 design state option.");
21949
- }
21950
- return [firstValue, ...uniqueValues.slice(1)];
21951
- }
21952
- var userPanelTreatments = uniqueNonEmpty(
21953
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
21954
- );
21955
- var userFlushTreatments = uniqueNonEmpty(
21956
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
21957
- );
21958
- var userFlushBleeds = uniqueNonEmpty(
21959
- userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
21960
- );
21961
- var contentFrameIntentSchema = z.discriminatedUnion("kind", [
21962
- z.object({ kind: z.literal("plain") }).strict(),
21963
- z.object({
21964
- kind: z.literal("panel"),
21965
- treatment: z.enum(userPanelTreatments)
21966
- }).strict(),
21857
+ // ../theme-core/src/schema.ts
21858
+ init_buttons();
21859
+ var cardSpacingSchema = z.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
21860
+ var gradientDirectionSchema2 = z.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
21861
+ var cardBackgroundSchema = z.discriminatedUnion("type", [
21862
+ z.object({ type: z.literal("solid"), colorToken: z.string() }),
21967
21863
  z.object({
21968
- kind: z.literal("flush-panel"),
21969
- treatment: z.enum(userFlushTreatments),
21970
- bleed: z.enum(userFlushBleeds)
21971
- }).strict()
21972
- ]);
21973
- var blockDesignPlanSchema = z.object({
21974
- blockId: z.string().min(1).transform(asDesignBlockId),
21975
- blockKind: z.string().min(1),
21976
- purpose: z.string().min(1),
21977
- sectionSurface: z.enum(userDesignOptionCatalog.sectionSurfaces),
21978
- contentFrame: contentFrameIntentSchema,
21979
- itemSurface: z.enum(userDesignOptionCatalog.itemSurfaces),
21980
- transitionAfter: z.enum(userDesignOptionCatalog.transitions),
21981
- emphasis: z.enum(userDesignOptionCatalog.emphases),
21982
- heroLegibility: heroLegibilityStrategySchema.optional()
21983
- }).strict();
21984
- var styleAuthoritySchema = z.discriminatedUnion("kind", [
21985
- z.object({
21986
- kind: z.literal("theme-v2"),
21987
- source: designResolutionPolicySchema,
21988
- siteStyleId: z.string().min(1).transform(asSiteStyleId),
21989
- templateId: z.string().min(1).transform(asDesignSystemTemplateId),
21990
- templateVersion: z.number().int().nonnegative(),
21991
- resolverVersion: z.number().int().nonnegative()
21992
- }).strict(),
21993
- z.object({
21994
- kind: z.literal("legacy-raw"),
21995
- reason: z.enum(["pre-theme-v2", "manual-runtime-fields"])
21996
- }).strict(),
21997
- z.object({
21998
- kind: z.literal("advanced-detached"),
21999
- reason: z.literal("detached-custom-runtime-fields")
22000
- }).strict()
22001
- ]);
22002
- var blockRuntimeStyleAuthoritySchema = z.object({
22003
- unit: z.literal("block-runtime-fields"),
22004
- blockId: z.string().min(1).transform(asDesignBlockId),
22005
- fields: nonEmptyRuntimeStyleFieldNamesSchema,
22006
- authority: styleAuthoritySchema
22007
- }).strict();
22008
- z.object({
22009
- schemaVersion: z.literal(themeV2DesignStateSchemaVersion),
22010
- siteStyleId: z.string().min(1).transform(asSiteStyleId),
22011
- templateId: z.string().min(1).transform(asDesignSystemTemplateId),
22012
- templateVersion: z.number().int().nonnegative(),
22013
- resolverVersion: z.number().int().nonnegative(),
22014
- rhythmPresetId: z.string().min(1),
22015
- blocks: z.array(blockDesignPlanSchema),
22016
- styleAuthorities: z.array(blockRuntimeStyleAuthoritySchema)
22017
- }).strict();
22018
- function uniqueNonEmpty2(values) {
22019
- const uniqueValues = [...new Set(values)];
22020
- const firstValue = uniqueValues[0];
22021
- if (!firstValue) {
22022
- throw new Error("Expected at least one generated schema option.");
22023
- }
22024
- return [firstValue, ...uniqueValues.slice(1)];
22025
- }
22026
- var generatedPanelTreatments = uniqueNonEmpty2(
22027
- generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
22028
- );
22029
- var generatedFlushTreatments = uniqueNonEmpty2(
22030
- generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
22031
- );
22032
- var generatedFlushBleeds = uniqueNonEmpty2(
22033
- generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
22034
- );
22035
- var generatedPanelFrameSchema = z.object({
22036
- kind: z.literal("panel"),
22037
- treatment: z.enum(generatedPanelTreatments)
22038
- }).strict();
22039
- var generatedFlushPanelFrameSchema = z.object({
22040
- kind: z.literal("flush-panel"),
22041
- treatment: z.enum(generatedFlushTreatments),
22042
- bleed: z.enum(generatedFlushBleeds)
22043
- }).strict();
22044
- var generatedContentFrameIntentSchema = z.discriminatedUnion("kind", [
22045
- z.object({ kind: z.literal("plain") }).strict(),
22046
- generatedPanelFrameSchema,
22047
- generatedFlushPanelFrameSchema
22048
- ]);
22049
- var generatedSiteStyleIdSchema = z.enum(curatedSiteStyleIdValues).transform(asSiteStyleId);
22050
- function generatedChoiceSchema(valueSchema) {
22051
- return z.discriminatedUnion("kind", [
22052
- z.object({
22053
- source: z.literal("generated"),
22054
- kind: z.literal("auto")
22055
- }).strict(),
22056
- z.object({
22057
- source: z.literal("generated"),
22058
- kind: z.literal("explicit"),
22059
- value: valueSchema
22060
- }).strict()
22061
- ]);
22062
- }
22063
- var generatedBlockDesignIntentSchema = z.object({
22064
- sectionSurface: generatedChoiceSchema(
22065
- z.enum(generatedDesignOptionCatalog.sectionSurfaces)
22066
- ),
22067
- contentFrame: generatedChoiceSchema(generatedContentFrameIntentSchema),
22068
- itemSurface: generatedChoiceSchema(
22069
- z.enum(generatedDesignOptionCatalog.itemSurfaces)
22070
- ),
22071
- transitionAfter: generatedChoiceSchema(
22072
- z.enum(generatedDesignOptionCatalog.transitions)
22073
- ),
22074
- emphasis: generatedChoiceSchema(
22075
- z.enum(generatedDesignOptionCatalog.emphases)
22076
- )
22077
- }).strict();
22078
- var generatedMediaCompositionIntentSchema = z.enum([
22079
- "none",
22080
- "supporting",
22081
- "dominant"
22082
- ]);
22083
- var generatedDecorativeCompositionIntentSchema = z.enum([
22084
- "none",
22085
- "supporting"
22086
- ]);
22087
- var generatedHeroLegibilityStrategySchema = z.enum([
22088
- "none",
22089
- "scrim-gradient"
22090
- ]);
22091
- var generatedBlockMediaIntentSchema = z.object({
22092
- media: generatedMediaCompositionIntentSchema,
22093
- decorative: generatedDecorativeCompositionIntentSchema,
22094
- heroLegibility: generatedChoiceSchema(generatedHeroLegibilityStrategySchema)
22095
- }).strict();
22096
- var generatedBoundaryIntentSchema = z.object({
22097
- transitionAfter: generatedChoiceSchema(
22098
- z.enum(generatedDesignOptionCatalog.transitions)
22099
- )
22100
- }).strict();
22101
- var generatedPageDesignBlockIntentSchema = z.object({
22102
- blockId: z.string().min(1),
22103
- blockKind: z.string().min(1),
22104
- purpose: z.string().min(1),
22105
- design: generatedBlockDesignIntentSchema,
22106
- mediaIntent: generatedBlockMediaIntentSchema,
22107
- boundaryIntent: generatedBoundaryIntentSchema
22108
- }).strict();
22109
- z.object({
22110
- siteStyleId: generatedSiteStyleIdSchema,
22111
- blocks: z.array(generatedPageDesignBlockIntentSchema)
22112
- }).strict();
22113
- var pageDesignIntentSchemaVersion = 1;
22114
- var pageDesignUserPinnedAppearanceChoiceSchema = z.object({
22115
- kind: z.literal("user-pinned"),
22116
- value: z.string().min(1).transform(asAppearancePresetId)
22117
- }).strict();
22118
- var pageDesignUserPinnedBoundaryChoiceSchema = z.object({
22119
- kind: z.literal("user-pinned"),
22120
- value: z.string().min(1).transform(asBoundaryOptionId)
22121
- }).strict();
22122
- var pageDesignBlockLookPinSchema = z.object({
22123
- blockId: z.string().min(1).transform(asDesignBlockId),
22124
- blockKind: z.string().min(1),
22125
- choice: pageDesignUserPinnedAppearanceChoiceSchema
22126
- }).strict();
22127
- var pageDesignBoundaryPinSchema = z.object({
22128
- boundaryId: z.string().min(1).transform(asDesignBoundaryId),
22129
- previousBlockId: z.string().min(1).transform(asDesignBlockId),
22130
- nextBlockId: z.string().min(1).transform(asDesignBlockId),
22131
- choice: pageDesignUserPinnedBoundaryChoiceSchema
22132
- }).strict().superRefine((pin, ctx) => {
22133
- const expectedBoundaryId = makeBoundaryId(
22134
- pin.previousBlockId,
22135
- pin.nextBlockId
22136
- );
22137
- if (pin.boundaryId !== expectedBoundaryId) {
22138
- ctx.addIssue({
22139
- code: z.ZodIssueCode.custom,
22140
- path: ["boundaryId"],
22141
- message: `Boundary id must match previousBlockId and nextBlockId. Expected ${expectedBoundaryId}.`
22142
- });
22143
- }
22144
- });
22145
- z.object({
22146
- schemaVersion: z.literal(pageDesignIntentSchemaVersion),
22147
- siteStyleId: z.string().min(1).transform(asSiteStyleId),
22148
- pageFlowPresetId: z.string().min(1).transform(asPageFlowPresetId),
22149
- blockLookPins: z.array(pageDesignBlockLookPinSchema),
22150
- boundaryPins: z.array(pageDesignBoundaryPinSchema)
22151
- }).strict().superRefine((intent, ctx) => {
22152
- addDuplicateStringIssues(ctx, {
22153
- values: intent.blockLookPins.map((pin) => pin.blockId),
22154
- path: ["blockLookPins"],
22155
- label: "block Look pin"
22156
- });
22157
- addDuplicateStringIssues(ctx, {
22158
- values: intent.boundaryPins.map(
22159
- (pin) => boundaryKey(pin.previousBlockId, pin.nextBlockId)
22160
- ),
22161
- path: ["boundaryPins"],
22162
- label: "boundary pin"
22163
- });
22164
- });
22165
- function addDuplicateStringIssues(ctx, input) {
22166
- const seen = /* @__PURE__ */ new Set();
22167
- const duplicates = /* @__PURE__ */ new Set();
22168
- for (const value of input.values) {
22169
- if (seen.has(value)) {
22170
- duplicates.add(value);
22171
- }
22172
- seen.add(value);
22173
- }
22174
- for (const duplicate of duplicates) {
22175
- ctx.addIssue({
22176
- code: z.ZodIssueCode.custom,
22177
- path: [...input.path],
22178
- message: `Duplicate ${input.label}: ${duplicate}.`
22179
- });
22180
- }
22181
- }
22182
- function boundaryKey(previousBlockId, nextBlockId) {
22183
- return makeBoundaryId(previousBlockId, nextBlockId);
22184
- }
22185
- var hotspotSchema = z42.object({
22186
- x: z42.number().min(0).max(1),
22187
- y: z42.number().min(0).max(1),
22188
- radius: z42.number().optional()
22189
- });
22190
- var rotationSchema = z42.union([z42.literal(0), z42.literal(90), z42.literal(180), z42.literal(270)]);
22191
- var rectSchema = z42.tuple([z42.number(), z42.number(), z42.number(), z42.number()]);
22192
- var aspectCropSchema = z42.object({
22193
- aspect: z42.preprocess((value) => value == null ? void 0 : value, z42.string().optional()),
22194
- rect: z42.preprocess((value) => value == null ? void 0 : value, rectSchema.optional()),
22195
- hotspot: z42.preprocess((value) => value == null ? void 0 : value, hotspotSchema.optional()),
22196
- rotation: z42.preprocess((value) => value == null ? void 0 : value, rotationSchema.optional())
22197
- });
22198
- var transformSchema = z42.object({
22199
- aspectCrops: z42.preprocess((value) => {
22200
- if (!value || typeof value !== "object" || Array.isArray(value)) {
22201
- return void 0;
22202
- }
22203
- return value;
22204
- }, z42.record(z42.string(), aspectCropSchema.catch({}))).optional(),
22205
- rect: rectSchema.optional(),
22206
- hotspot: hotspotSchema.optional(),
22207
- rotation: rotationSchema.optional()
22208
- });
22209
- var mediaSchema = z42.object({
22210
- type: z42.enum(["image", "video", "audio", "document", "spreadsheet", "archive"]),
22211
- purpose: z42.string().optional(),
22212
- placeholder: z42.boolean().default(true).optional(),
22213
- assetId: z42.string().optional(),
22214
- identifier: z42.string().optional(),
22215
- src: z42.string().optional(),
22216
- alt: z42.string().optional(),
22217
- filename: z42.string().optional(),
22218
- mimeType: z42.string().optional(),
22219
- width: z42.number().optional(),
22220
- height: z42.number().optional(),
22221
- storageBucket: z42.string().optional(),
22222
- storagePath: z42.string().optional(),
22223
- transform: transformSchema.optional()
22224
- });
22225
-
22226
- // ../theme-core/src/schema.ts
22227
- init_buttons();
22228
- var cardSpacingSchema = z.enum(["none", "compact", "cozy", "medium", "comfortable", "spacious"]);
22229
- var gradientDirectionSchema2 = z.enum(["to-r", "to-l", "to-t", "to-b", "to-tr", "to-tl", "to-br", "to-bl"]);
22230
- var cardBackgroundSchema = z.discriminatedUnion("type", [
22231
- z.object({ type: z.literal("solid"), colorToken: z.string() }),
22232
- z.object({
22233
- type: z.literal("gradient"),
22234
- fromToken: z.string(),
22235
- toToken: z.string(),
22236
- direction: gradientDirectionSchema2
22237
- }),
22238
- z.object({ type: z.literal("transparent") })
21864
+ type: z.literal("gradient"),
21865
+ fromToken: z.string(),
21866
+ toToken: z.string(),
21867
+ direction: gradientDirectionSchema2
21868
+ }),
21869
+ z.object({ type: z.literal("transparent") })
22239
21870
  ]);
22240
21871
  var cardBorderSchema = z.object({
22241
21872
  widthClass: z.string(),
@@ -22771,371 +22402,997 @@ var themeSchema = z.object({
22771
22402
  styleGroups: z.record(z.string(), z.array(z.string())).optional()
22772
22403
  });
22773
22404
  z.object({
22774
- message: z.string().min(1),
22775
- themes: z.array(themeSchema).length(3)
22776
- });
22777
-
22778
- // ../theme-core/src/site-styles/runtimeCompiler.ts
22779
- init_personalities();
22780
-
22781
- // ../theme-core/src/palette/variants/types.ts
22782
- init_compatibility();
22783
- function asPaletteVariantId(value) {
22784
- if (value.length === 0) {
22785
- throw new Error("PaletteVariantId must be a non-empty string");
22405
+ message: z.string().min(1),
22406
+ themes: z.array(themeSchema).length(3)
22407
+ });
22408
+
22409
+ // ../theme-core/src/palette/variants/types.ts
22410
+ function asPaletteVariantId(value) {
22411
+ if (value.length === 0) {
22412
+ throw new Error("PaletteVariantId must be a non-empty string");
22413
+ }
22414
+ return value;
22415
+ }
22416
+ var paletteVariantIdSchema = z.string().min(1).transform((value) => asPaletteVariantId(value));
22417
+ var PALETTE_TOKEN_NAMES = [
22418
+ "primary",
22419
+ "primaryForeground",
22420
+ "secondary",
22421
+ "accent",
22422
+ "success",
22423
+ "warning",
22424
+ "destructive",
22425
+ "background",
22426
+ "surface",
22427
+ "surfaceAlt",
22428
+ "muted",
22429
+ "text",
22430
+ "border"
22431
+ ];
22432
+ var paletteTokenNameSchema = z.enum(PALETTE_TOKEN_NAMES);
22433
+ var HEX_COLOR_REGEX = /^#[0-9a-f]{6}$/;
22434
+ var hexColorSchema = z.string().regex(HEX_COLOR_REGEX, "Hex must be #RRGGBB (lowercase)").transform((value) => value);
22435
+ var variantPaletteColorSchema = paletteColorSchema.extend({
22436
+ name: paletteTokenNameSchema
22437
+ });
22438
+ z.object({
22439
+ id: paletteVariantIdSchema,
22440
+ name: z.string().min(1),
22441
+ description: z.string().min(1),
22442
+ tags: styleTagsSchema,
22443
+ mode: z.enum(["light", "dark"]),
22444
+ colors: z.array(variantPaletteColorSchema).min(1)
22445
+ });
22446
+ function definePaletteVariant(input) {
22447
+ return {
22448
+ id: asPaletteVariantId(input.id),
22449
+ name: input.name,
22450
+ description: input.description,
22451
+ tags: input.tags,
22452
+ mode: input.mode,
22453
+ colors: input.colors
22454
+ };
22455
+ }
22456
+ z.object({
22457
+ primary: hexColorSchema.optional(),
22458
+ primaryForeground: hexColorSchema.optional(),
22459
+ secondary: hexColorSchema.optional(),
22460
+ accent: hexColorSchema.optional(),
22461
+ success: hexColorSchema.optional(),
22462
+ warning: hexColorSchema.optional(),
22463
+ destructive: hexColorSchema.optional(),
22464
+ background: hexColorSchema.optional(),
22465
+ surface: hexColorSchema.optional(),
22466
+ surfaceAlt: hexColorSchema.optional(),
22467
+ muted: hexColorSchema.optional(),
22468
+ text: hexColorSchema.optional(),
22469
+ border: hexColorSchema.optional()
22470
+ }).strict().transform((value) => value);
22471
+
22472
+ // ../theme-core/src/palette/variants/brand-led.ts
22473
+ var brandLedCool = definePaletteVariant({
22474
+ id: "brand-led-cool",
22475
+ name: "Brand-led \u2014 Cool",
22476
+ description: "Confident blue primary with slate neutrals.",
22477
+ tags: { tone: "classic", energy: "calm", era: "modern" },
22478
+ mode: "light",
22479
+ colors: [
22480
+ { name: "primary", hex: "#2563eb" },
22481
+ { name: "secondary", hex: "#64748b" },
22482
+ { name: "accent", hex: "#0f766e" },
22483
+ { name: "success", hex: "#16a34a" },
22484
+ { name: "warning", hex: "#d97706" },
22485
+ { name: "destructive", hex: "#dc2626" },
22486
+ { name: "background", hex: "#ffffff" },
22487
+ { name: "surface", hex: "#ffffff" },
22488
+ { name: "surfaceAlt", hex: "#f8fafc" },
22489
+ { name: "muted", hex: "#f1f5f9" },
22490
+ { name: "text", hex: "#0f172a" },
22491
+ { name: "primaryForeground", hex: "#ffffff" },
22492
+ { name: "border", hex: "#cbd5e1" }
22493
+ ]
22494
+ });
22495
+ var brandLedWarm = definePaletteVariant({
22496
+ id: "brand-led-warm",
22497
+ name: "Brand-led \u2014 Warm",
22498
+ description: "Sunset orange primary with warm grey neutrals.",
22499
+ tags: { tone: "classic", energy: "vibrant", era: "modern" },
22500
+ mode: "light",
22501
+ colors: [
22502
+ { name: "primary", hex: "#ea580c" },
22503
+ { name: "secondary", hex: "#78716c" },
22504
+ { name: "accent", hex: "#a16207" },
22505
+ { name: "success", hex: "#16a34a" },
22506
+ { name: "warning", hex: "#d97706" },
22507
+ { name: "destructive", hex: "#b91c1c" },
22508
+ { name: "background", hex: "#fffaf3" },
22509
+ { name: "surface", hex: "#ffffff" },
22510
+ { name: "surfaceAlt", hex: "#fbeee0" },
22511
+ { name: "muted", hex: "#f4e2cd" },
22512
+ { name: "text", hex: "#1c1917" },
22513
+ { name: "primaryForeground", hex: "#fffaf3" },
22514
+ { name: "border", hex: "#d6c4ad" }
22515
+ ]
22516
+ });
22517
+ var brandLedJewel = definePaletteVariant({
22518
+ id: "brand-led-jewel",
22519
+ name: "Brand-led \u2014 Jewel",
22520
+ description: "Deep emerald primary with rich neutrals.",
22521
+ tags: { tone: "bold", energy: "vibrant", era: "modern" },
22522
+ mode: "light",
22523
+ colors: [
22524
+ { name: "primary", hex: "#047857" },
22525
+ { name: "secondary", hex: "#4b5563" },
22526
+ { name: "accent", hex: "#7c3aed" },
22527
+ { name: "success", hex: "#15803d" },
22528
+ { name: "warning", hex: "#b45309" },
22529
+ { name: "destructive", hex: "#b91c1c" },
22530
+ { name: "background", hex: "#ffffff" },
22531
+ { name: "surface", hex: "#ffffff" },
22532
+ { name: "surfaceAlt", hex: "#f5f5f4" },
22533
+ { name: "muted", hex: "#e7e5e4" },
22534
+ { name: "text", hex: "#0c0a09" },
22535
+ { name: "primaryForeground", hex: "#ffffff" },
22536
+ { name: "border", hex: "#a8a29e" }
22537
+ ]
22538
+ });
22539
+
22540
+ // ../theme-core/src/palette/variants/high-contrast.ts
22541
+ var highContrastInk = definePaletteVariant({
22542
+ id: "high-contrast-ink",
22543
+ name: "High Contrast \u2014 Ink",
22544
+ description: "Near-black primary with cool greys.",
22545
+ tags: { tone: "bold", energy: "calm", era: "editorial" },
22546
+ mode: "light",
22547
+ colors: [
22548
+ { name: "primary", hex: "#111827" },
22549
+ { name: "secondary", hex: "#374151" },
22550
+ { name: "accent", hex: "#1d4ed8" },
22551
+ { name: "success", hex: "#047857" },
22552
+ { name: "warning", hex: "#b45309" },
22553
+ { name: "destructive", hex: "#b91c1c" },
22554
+ { name: "background", hex: "#ffffff" },
22555
+ { name: "surface", hex: "#ffffff" },
22556
+ { name: "surfaceAlt", hex: "#f3f4f6" },
22557
+ { name: "muted", hex: "#e5e7eb" },
22558
+ { name: "text", hex: "#030712" },
22559
+ { name: "primaryForeground", hex: "#ffffff" },
22560
+ { name: "border", hex: "#6b7280" }
22561
+ ]
22562
+ });
22563
+ var highContrastCharcoal = definePaletteVariant({
22564
+ id: "high-contrast-charcoal",
22565
+ name: "High Contrast \u2014 Charcoal",
22566
+ description: "Warm charcoal primary on a soft cream ground.",
22567
+ tags: { tone: "minimal", energy: "calm", era: "editorial" },
22568
+ mode: "light",
22569
+ colors: [
22570
+ { name: "primary", hex: "#1f2937" },
22571
+ { name: "secondary", hex: "#52525b" },
22572
+ { name: "accent", hex: "#a16207" },
22573
+ { name: "success", hex: "#15803d" },
22574
+ { name: "warning", hex: "#b45309" },
22575
+ { name: "destructive", hex: "#991b1b" },
22576
+ { name: "background", hex: "#fafaf9" },
22577
+ { name: "surface", hex: "#ffffff" },
22578
+ { name: "surfaceAlt", hex: "#f5f5f4" },
22579
+ { name: "muted", hex: "#e7e5e4" },
22580
+ { name: "text", hex: "#0c0a09" },
22581
+ { name: "primaryForeground", hex: "#fafaf9" },
22582
+ { name: "border", hex: "#a8a29e" }
22583
+ ]
22584
+ });
22585
+ var highContrastMonochrome = definePaletteVariant({
22586
+ id: "high-contrast-monochrome",
22587
+ name: "High Contrast \u2014 Monochrome",
22588
+ description: "Pure black-on-white with a single saturated accent.",
22589
+ tags: { tone: "bold", energy: "vibrant", era: "editorial" },
22590
+ mode: "light",
22591
+ colors: [
22592
+ { name: "primary", hex: "#000000" },
22593
+ { name: "secondary", hex: "#404040" },
22594
+ { name: "accent", hex: "#dc2626" },
22595
+ { name: "success", hex: "#000000" },
22596
+ { name: "warning", hex: "#000000" },
22597
+ { name: "destructive", hex: "#dc2626" },
22598
+ { name: "background", hex: "#ffffff" },
22599
+ { name: "surface", hex: "#ffffff" },
22600
+ { name: "surfaceAlt", hex: "#f5f5f5" },
22601
+ { name: "muted", hex: "#e5e5e5" },
22602
+ { name: "text", hex: "#000000" },
22603
+ { name: "primaryForeground", hex: "#ffffff" },
22604
+ { name: "border", hex: "#525252" }
22605
+ ]
22606
+ });
22607
+
22608
+ // ../theme-core/src/palette/variants/soft-natural.ts
22609
+ var softNaturalSage = definePaletteVariant({
22610
+ id: "soft-natural-sage",
22611
+ name: "Soft Natural \u2014 Sage",
22612
+ description: "Olive sage primary on an off-white ground.",
22613
+ tags: { tone: "classic", energy: "calm", era: "organic" },
22614
+ mode: "light",
22615
+ colors: [
22616
+ { name: "primary", hex: "#3f6212" },
22617
+ { name: "secondary", hex: "#6b7280" },
22618
+ { name: "accent", hex: "#0f766e" },
22619
+ { name: "success", hex: "#15803d" },
22620
+ { name: "warning", hex: "#a16207" },
22621
+ { name: "destructive", hex: "#b91c1c" },
22622
+ { name: "background", hex: "#fbfdf7" },
22623
+ { name: "surface", hex: "#ffffff" },
22624
+ { name: "surfaceAlt", hex: "#eef5e8" },
22625
+ { name: "muted", hex: "#e7efdf" },
22626
+ { name: "text", hex: "#1f2a1d" },
22627
+ { name: "primaryForeground", hex: "#ffffff" },
22628
+ { name: "border", hex: "#cbd8c0" }
22629
+ ]
22630
+ });
22631
+ var softNaturalStone = definePaletteVariant({
22632
+ id: "soft-natural-stone",
22633
+ name: "Soft Natural \u2014 Stone",
22634
+ description: "River-stone grey-green primary with cool neutrals.",
22635
+ tags: { tone: "minimal", energy: "calm", era: "organic" },
22636
+ mode: "light",
22637
+ colors: [
22638
+ { name: "primary", hex: "#5a7a5d" },
22639
+ { name: "secondary", hex: "#8a9a8c" },
22640
+ { name: "accent", hex: "#c9b88f" },
22641
+ { name: "success", hex: "#5a7a5d" },
22642
+ { name: "warning", hex: "#a89466" },
22643
+ { name: "destructive", hex: "#a3503e" },
22644
+ { name: "background", hex: "#faf6ec" },
22645
+ { name: "surface", hex: "#ffffff" },
22646
+ { name: "surfaceAlt", hex: "#f0ecdf" },
22647
+ { name: "muted", hex: "#e6e1d0" },
22648
+ { name: "text", hex: "#2f3d31" },
22649
+ { name: "primaryForeground", hex: "#faf6ec" },
22650
+ { name: "border", hex: "#c9c1ad" }
22651
+ ]
22652
+ });
22653
+ var softNaturalWatercolor = definePaletteVariant({
22654
+ id: "soft-natural-watercolor",
22655
+ name: "Soft Natural \u2014 Watercolor",
22656
+ description: "Soft sand primary with watercolour sage accents.",
22657
+ tags: { tone: "classic", energy: "vibrant", era: "organic" },
22658
+ mode: "light",
22659
+ colors: [
22660
+ { name: "primary", hex: "#a8825f" },
22661
+ { name: "secondary", hex: "#88a888" },
22662
+ { name: "accent", hex: "#c8a78e" },
22663
+ { name: "success", hex: "#7d8a5f" },
22664
+ { name: "warning", hex: "#c89a4d" },
22665
+ { name: "destructive", hex: "#a3503e" },
22666
+ { name: "background", hex: "#fefdfa" },
22667
+ { name: "surface", hex: "#ffffff" },
22668
+ { name: "surfaceAlt", hex: "#f6f1e6" },
22669
+ { name: "muted", hex: "#eee7d1" },
22670
+ { name: "text", hex: "#4a3d30" },
22671
+ { name: "primaryForeground", hex: "#fefdfa" },
22672
+ { name: "border", hex: "#d8c9a8" }
22673
+ ]
22674
+ });
22675
+
22676
+ // ../theme-core/src/palette/variants/warm-neutral.ts
22677
+ var warmNeutralClay = definePaletteVariant({
22678
+ id: "warm-neutral-clay",
22679
+ name: "Warm Neutral \u2014 Clay",
22680
+ description: "Terracotta primary on a cream ground.",
22681
+ tags: { tone: "classic", energy: "calm", era: "organic" },
22682
+ mode: "light",
22683
+ colors: [
22684
+ { name: "primary", hex: "#8b5e34" },
22685
+ { name: "secondary", hex: "#7c6f64" },
22686
+ { name: "accent", hex: "#a15c38" },
22687
+ { name: "success", hex: "#527853" },
22688
+ { name: "warning", hex: "#b7791f" },
22689
+ { name: "destructive", hex: "#b91c1c" },
22690
+ { name: "background", hex: "#fffaf3" },
22691
+ { name: "surface", hex: "#ffffff" },
22692
+ { name: "surfaceAlt", hex: "#f5eadc" },
22693
+ { name: "muted", hex: "#efe2d0" },
22694
+ { name: "text", hex: "#2f241c" },
22695
+ { name: "primaryForeground", hex: "#fffaf3" },
22696
+ { name: "border", hex: "#d8c6b3" }
22697
+ ]
22698
+ });
22699
+ var warmNeutralCream = definePaletteVariant({
22700
+ id: "warm-neutral-cream",
22701
+ name: "Warm Neutral \u2014 Cream",
22702
+ description: "Soft sand primary with pale cream surfaces.",
22703
+ tags: { tone: "minimal", energy: "calm", era: "organic" },
22704
+ mode: "light",
22705
+ colors: [
22706
+ { name: "primary", hex: "#b08864" },
22707
+ { name: "secondary", hex: "#9a8c7e" },
22708
+ { name: "accent", hex: "#c2956a" },
22709
+ { name: "success", hex: "#7d8a5f" },
22710
+ { name: "warning", hex: "#c89a4d" },
22711
+ { name: "destructive", hex: "#a3503e" },
22712
+ { name: "background", hex: "#fdf8ee" },
22713
+ { name: "surface", hex: "#ffffff" },
22714
+ { name: "surfaceAlt", hex: "#f4ebd9" },
22715
+ { name: "muted", hex: "#ede3cf" },
22716
+ { name: "text", hex: "#3b2f24" },
22717
+ { name: "primaryForeground", hex: "#fdf8ee" },
22718
+ { name: "border", hex: "#e0d2b8" }
22719
+ ]
22720
+ });
22721
+ var warmNeutralForest = definePaletteVariant({
22722
+ id: "warm-neutral-forest",
22723
+ name: "Warm Neutral \u2014 Forest",
22724
+ description: "Deep forest green primary with earthy neutrals.",
22725
+ tags: { tone: "classic", energy: "calm", era: "organic" },
22726
+ mode: "light",
22727
+ colors: [
22728
+ { name: "primary", hex: "#3d5840" },
22729
+ { name: "secondary", hex: "#7a6f5d" },
22730
+ { name: "accent", hex: "#b06b50" },
22731
+ { name: "success", hex: "#5a7a5d" },
22732
+ { name: "warning", hex: "#b7791f" },
22733
+ { name: "destructive", hex: "#b91c1c" },
22734
+ { name: "background", hex: "#fbf8f0" },
22735
+ { name: "surface", hex: "#ffffff" },
22736
+ { name: "surfaceAlt", hex: "#f2ecdb" },
22737
+ { name: "muted", hex: "#ebe3cc" },
22738
+ { name: "text", hex: "#2a2a2a" },
22739
+ { name: "primaryForeground", hex: "#fbf8f0" },
22740
+ { name: "border", hex: "#cdc1a4" }
22741
+ ]
22742
+ });
22743
+
22744
+ // ../theme-core/src/palette/variants/index.ts
22745
+ var paletteVariants = [
22746
+ // Brand-led family
22747
+ brandLedCool,
22748
+ brandLedWarm,
22749
+ brandLedJewel,
22750
+ // Warm-neutral family
22751
+ warmNeutralClay,
22752
+ warmNeutralCream,
22753
+ warmNeutralForest,
22754
+ // High-contrast family
22755
+ highContrastInk,
22756
+ highContrastCharcoal,
22757
+ highContrastMonochrome,
22758
+ // Soft-natural family
22759
+ softNaturalSage,
22760
+ softNaturalStone,
22761
+ softNaturalWatercolor
22762
+ ];
22763
+ new Map(
22764
+ paletteVariants.map((v) => [v.id, v])
22765
+ );
22766
+
22767
+ // ../theme-core/src/site-styles/sourceCatalogs.ts
22768
+ var generatedContentFrames = [
22769
+ plainFrame,
22770
+ panelFrame("inset"),
22771
+ panelFrame("raised"),
22772
+ flushPanelFrame({ bleed: "start" })
22773
+ ];
22774
+ var userContentFrames = [
22775
+ ...generatedContentFrames,
22776
+ panelFrame("editorial"),
22777
+ flushPanelFrame({ bleed: "end" }),
22778
+ flushPanelFrame({ bleed: "both" })
22779
+ ];
22780
+ var generatedDesignOptionCatalog = {
22781
+ sectionSurfaces: ["base", "muted-band", "accent-band", "hero-image"],
22782
+ contentFrames: generatedContentFrames,
22783
+ itemSurfaces: ["none", "default", "flat", "outlined", "raised"],
22784
+ transitions: ["none", "soft-fade-short", "soft-fade-long"],
22785
+ emphases: ["low", "medium", "high"]};
22786
+ var userDesignOptionCatalog = {
22787
+ sectionSurfaces: generatedDesignOptionCatalog.sectionSurfaces,
22788
+ contentFrames: userContentFrames,
22789
+ itemSurfaces: [
22790
+ ...generatedDesignOptionCatalog.itemSurfaces,
22791
+ "inset",
22792
+ "editorial"
22793
+ ],
22794
+ transitions: [
22795
+ ...generatedDesignOptionCatalog.transitions,
22796
+ "wave-edge",
22797
+ "angle-edge"
22798
+ ],
22799
+ emphases: generatedDesignOptionCatalog.emphases};
22800
+
22801
+ // ../theme-core/src/site-styles/curatedSiteStyles.ts
22802
+ var curatedSiteStyleIdValues = [
22803
+ "site-style:calm-studio",
22804
+ "site-style:clear-professional",
22805
+ "site-style:warm-editorial",
22806
+ "site-style:bright-community",
22807
+ "site-style:quiet-luxury",
22808
+ "site-style:practical-services",
22809
+ "site-style:modern-wellness",
22810
+ "site-style:bold-launch"
22811
+ ];
22812
+ var quietBudget = {
22813
+ accentDensity: "low",
22814
+ panelDensity: "medium",
22815
+ transitionMix: "quiet",
22816
+ primaryCtaLimit: 2,
22817
+ mediaDensity: "medium",
22818
+ decorativeRepetition: "low"
22819
+ };
22820
+ var balancedBudget = {
22821
+ accentDensity: "medium",
22822
+ panelDensity: "medium",
22823
+ transitionMix: "balanced",
22824
+ primaryCtaLimit: 3,
22825
+ mediaDensity: "medium",
22826
+ decorativeRepetition: "medium"
22827
+ };
22828
+ var expressiveBudget = {
22829
+ accentDensity: "high",
22830
+ panelDensity: "high",
22831
+ transitionMix: "expressive",
22832
+ primaryCtaLimit: 3,
22833
+ mediaDensity: "high",
22834
+ decorativeRepetition: "medium"
22835
+ };
22836
+ function uniqueContentFrameKinds() {
22837
+ const kinds = [...new Set(
22838
+ generatedDesignOptionCatalog.contentFrames.map((frame) => frame.kind)
22839
+ )];
22840
+ const firstKind = kinds[0];
22841
+ if (!firstKind) {
22842
+ throw new Error("Expected generated design option catalog to expose at least one content frame kind.");
22843
+ }
22844
+ return [firstKind, ...kinds.slice(1)];
22845
+ }
22846
+ var generatedContentFrameKinds = uniqueContentFrameKinds();
22847
+ function defineCuratedSiteStyle(input) {
22848
+ return {
22849
+ id: asSiteStyleId(input.id),
22850
+ name: input.name,
22851
+ description: input.description,
22852
+ generationBrief: input.generationBrief,
22853
+ selectionKeywords: input.selectionKeywords ?? [],
22854
+ template: {
22855
+ id: asDesignSystemTemplateId(`template:${input.id.replace("site-style:", "")}`),
22856
+ name: input.name,
22857
+ version: 1,
22858
+ tokenRecipes: input.tokenRecipes,
22859
+ compositionBudget: input.compositionBudget,
22860
+ supportedSectionSurfaces: generatedDesignOptionCatalog.sectionSurfaces,
22861
+ supportedContentFrames: generatedContentFrameKinds,
22862
+ supportedItemSurfaces: generatedDesignOptionCatalog.itemSurfaces,
22863
+ supportedTransitions: generatedDesignOptionCatalog.transitions
22864
+ },
22865
+ buttonPersonalityChoices: input.buttonPersonalityChoices,
22866
+ paletteVariantChoices: input.paletteVariantChoices
22867
+ };
22868
+ }
22869
+ function buttonChoice(id, note) {
22870
+ return { id: asButtonPersonalityId(id) };
22871
+ }
22872
+ function paletteChoice(id, note) {
22873
+ return { id: asPaletteVariantId(id) };
22874
+ }
22875
+ var curatedSiteStyles = [
22876
+ defineCuratedSiteStyle({
22877
+ id: "site-style:calm-studio",
22878
+ name: "Calm Studio",
22879
+ description: "Soft, measured, and spacious for intimate appointment or class businesses.",
22880
+ generationBrief: "Use calm pacing, concise copy, generous breathing room, and natural imagery. Keep calls to action steady rather than urgent.",
22881
+ tokenRecipes: {
22882
+ palette: "soft-natural",
22883
+ contrast: "standard",
22884
+ radius: "soft",
22885
+ shadow: "subtle",
22886
+ typography: "friendly-sans",
22887
+ spacing: "airy",
22888
+ motion: "subtle"
22889
+ },
22890
+ compositionBudget: quietBudget,
22891
+ buttonPersonalityChoices: [
22892
+ buttonChoice("soft-pill"),
22893
+ buttonChoice("pebble"),
22894
+ buttonChoice("editorial-link"),
22895
+ buttonChoice("brushed-wash")
22896
+ ],
22897
+ paletteVariantChoices: [
22898
+ paletteChoice("soft-natural-sage"),
22899
+ paletteChoice("soft-natural-stone"),
22900
+ paletteChoice("warm-neutral-clay"),
22901
+ paletteChoice("soft-natural-watercolor")
22902
+ ]
22903
+ }),
22904
+ defineCuratedSiteStyle({
22905
+ id: "site-style:clear-professional",
22906
+ name: "Clear Professional",
22907
+ description: "Crisp, trustworthy, and direct for local services and consultancies.",
22908
+ generationBrief: "Prioritize clarity, proof, service detail, and easy next steps. Keep visuals polished and specific, with restrained decorative treatment.",
22909
+ tokenRecipes: {
22910
+ palette: "brand-led",
22911
+ contrast: "strong",
22912
+ radius: "soft",
22913
+ shadow: "subtle",
22914
+ typography: "clean-sans",
22915
+ spacing: "regular",
22916
+ motion: "subtle"
22917
+ },
22918
+ compositionBudget: balancedBudget,
22919
+ buttonPersonalityChoices: [
22920
+ buttonChoice("confident-chip"),
22921
+ buttonChoice("soft-pill"),
22922
+ buttonChoice("editorial-link")
22923
+ ],
22924
+ paletteVariantChoices: [
22925
+ paletteChoice("brand-led-cool"),
22926
+ paletteChoice("high-contrast-ink"),
22927
+ paletteChoice("brand-led-jewel")
22928
+ ]
22929
+ }),
22930
+ defineCuratedSiteStyle({
22931
+ id: "site-style:warm-editorial",
22932
+ name: "Warm Editorial",
22933
+ description: "Story-led and textured for educators, makers, venues, and retreats.",
22934
+ generationBrief: "Let the copy feel thoughtful and grounded. Favor narrative sections, supporting media, and a small number of editorial panels.",
22935
+ tokenRecipes: {
22936
+ palette: "warm-neutral",
22937
+ contrast: "standard",
22938
+ radius: "square",
22939
+ shadow: "none",
22940
+ typography: "serif-editorial",
22941
+ spacing: "airy",
22942
+ motion: "subtle"
22943
+ },
22944
+ compositionBudget: balancedBudget,
22945
+ buttonPersonalityChoices: [
22946
+ buttonChoice("editorial-link"),
22947
+ buttonChoice("soft-pill"),
22948
+ buttonChoice("brushed-wash")
22949
+ ],
22950
+ paletteVariantChoices: [
22951
+ paletteChoice("warm-neutral-cream"),
22952
+ paletteChoice("warm-neutral-clay"),
22953
+ paletteChoice("warm-neutral-forest"),
22954
+ paletteChoice("soft-natural-stone")
22955
+ ]
22956
+ }),
22957
+ defineCuratedSiteStyle({
22958
+ id: "site-style:bright-community",
22959
+ name: "Bright Community",
22960
+ description: "Friendly, welcoming, and active for groups, classes, and neighborhood offers.",
22961
+ generationBrief: "Use welcoming language, clear event or booking routes, and optimistic imagery. Let accents appear, but avoid noisy decoration.",
22962
+ tokenRecipes: {
22963
+ palette: "brand-led",
22964
+ contrast: "standard",
22965
+ radius: "rounded",
22966
+ shadow: "subtle",
22967
+ typography: "friendly-sans",
22968
+ spacing: "regular",
22969
+ motion: "expressive"
22970
+ },
22971
+ compositionBudget: balancedBudget,
22972
+ buttonPersonalityChoices: [
22973
+ buttonChoice("pebble"),
22974
+ buttonChoice("brushed-wash"),
22975
+ buttonChoice("confident-chip")
22976
+ ],
22977
+ paletteVariantChoices: [
22978
+ paletteChoice("brand-led-warm"),
22979
+ paletteChoice("brand-led-jewel"),
22980
+ paletteChoice("soft-natural-watercolor")
22981
+ ]
22982
+ }),
22983
+ defineCuratedSiteStyle({
22984
+ id: "site-style:quiet-luxury",
22985
+ name: "Quiet Luxury",
22986
+ description: "Minimal, confident, and refined for premium experiences and private services.",
22987
+ generationBrief: "Use fewer claims, more specificity, and restrained sensory detail. Favor elegant media and low repetition over dense panels.",
22988
+ selectionKeywords: [
22989
+ "luxury",
22990
+ "premium",
22991
+ "boutique",
22992
+ "bespoke",
22993
+ "exclusive"
22994
+ ],
22995
+ tokenRecipes: {
22996
+ palette: "high-contrast",
22997
+ contrast: "strong",
22998
+ radius: "square",
22999
+ shadow: "none",
23000
+ typography: "classic-serif",
23001
+ spacing: "airy",
23002
+ motion: "none"
23003
+ },
23004
+ compositionBudget: quietBudget,
23005
+ buttonPersonalityChoices: [
23006
+ buttonChoice("editorial-link"),
23007
+ buttonChoice("confident-chip"),
23008
+ buttonChoice("soft-pill")
23009
+ ],
23010
+ paletteVariantChoices: [
23011
+ paletteChoice("high-contrast-charcoal"),
23012
+ paletteChoice("high-contrast-ink"),
23013
+ paletteChoice("warm-neutral-cream")
23014
+ ]
23015
+ }),
23016
+ defineCuratedSiteStyle({
23017
+ id: "site-style:practical-services",
23018
+ name: "Practical Services",
23019
+ description: "Efficient, plainspoken, and conversion-focused for trades and everyday services.",
23020
+ generationBrief: "Make services, location, trust signals, and contact paths obvious. Keep copy brief and avoid ornate visual treatments.",
23021
+ selectionKeywords: [
23022
+ "repair",
23023
+ "plumb",
23024
+ "electric",
23025
+ "cleaning",
23026
+ "landscap",
23027
+ "contractor"
23028
+ ],
23029
+ tokenRecipes: {
23030
+ palette: "brand-led",
23031
+ contrast: "maximum",
23032
+ radius: "soft",
23033
+ shadow: "subtle",
23034
+ typography: "clean-sans",
23035
+ spacing: "compact",
23036
+ motion: "none"
23037
+ },
23038
+ compositionBudget: quietBudget,
23039
+ buttonPersonalityChoices: [
23040
+ buttonChoice("confident-chip"),
23041
+ buttonChoice("pebble"),
23042
+ buttonChoice("ink-stamp")
23043
+ ],
23044
+ paletteVariantChoices: [
23045
+ paletteChoice("brand-led-cool"),
23046
+ paletteChoice("high-contrast-ink"),
23047
+ paletteChoice("brand-led-warm")
23048
+ ]
23049
+ }),
23050
+ defineCuratedSiteStyle({
23051
+ id: "site-style:modern-wellness",
23052
+ name: "Modern Wellness",
23053
+ description: "Natural, current, and reassuring for practitioners, studios, and wellbeing offers.",
23054
+ generationBrief: "Keep the tone warm and practical. Use gentle section variation, natural materials, and inclusive copy without making medical claims.",
23055
+ tokenRecipes: {
23056
+ palette: "soft-natural",
23057
+ contrast: "standard",
23058
+ radius: "rounded",
23059
+ shadow: "subtle",
23060
+ typography: "clean-sans",
23061
+ spacing: "airy",
23062
+ motion: "subtle"
23063
+ },
23064
+ compositionBudget: balancedBudget,
23065
+ buttonPersonalityChoices: [
23066
+ buttonChoice("soft-pill"),
23067
+ buttonChoice("pebble"),
23068
+ buttonChoice("confident-chip")
23069
+ ],
23070
+ paletteVariantChoices: [
23071
+ paletteChoice("soft-natural-sage"),
23072
+ paletteChoice("soft-natural-stone"),
23073
+ paletteChoice("warm-neutral-forest")
23074
+ ]
23075
+ }),
23076
+ defineCuratedSiteStyle({
23077
+ id: "site-style:bold-launch",
23078
+ name: "Bold Launch",
23079
+ description: "High-energy and punchy for launches, campaigns, and creative offers.",
23080
+ generationBrief: "Use crisp positioning, bold hero structure, strong calls to action, and confident visual rhythm. Keep it precise, not shouty.",
23081
+ selectionKeywords: [
23082
+ "launch",
23083
+ "campaign",
23084
+ "preorder",
23085
+ "pre-order",
23086
+ "waitlist",
23087
+ "drop"
23088
+ ],
23089
+ tokenRecipes: {
23090
+ palette: "high-contrast",
23091
+ contrast: "maximum",
23092
+ radius: "pill",
23093
+ shadow: "layered",
23094
+ typography: "clean-sans",
23095
+ spacing: "regular",
23096
+ motion: "expressive"
23097
+ },
23098
+ compositionBudget: expressiveBudget,
23099
+ buttonPersonalityChoices: [
23100
+ buttonChoice("ink-stamp"),
23101
+ buttonChoice("confident-chip"),
23102
+ buttonChoice("brushed-wash"),
23103
+ buttonChoice("pebble")
23104
+ ],
23105
+ paletteVariantChoices: [
23106
+ paletteChoice("high-contrast-monochrome"),
23107
+ paletteChoice("high-contrast-ink"),
23108
+ paletteChoice("brand-led-jewel"),
23109
+ paletteChoice("brand-led-warm")
23110
+ ]
23111
+ })
23112
+ ];
23113
+ new Map(
23114
+ curatedSiteStyles.map((style) => [style.id, style])
23115
+ );
23116
+
23117
+ // ../theme-core/src/site-styles/rawStyleFields.ts
23118
+ var themeV2RuntimeStyleFieldNames = [
23119
+ "_frameStyles",
23120
+ "_sectionStyles",
23121
+ "_containerStyles",
23122
+ "_cardStyles",
23123
+ // styleGroup is legacy runtime transition wiring rather than a nested
23124
+ // override object, but normal editors should still never see it directly.
23125
+ "styleGroup"
23126
+ ];
23127
+ var themeV2BlockSpecificRawStyleFieldNames = [
23128
+ "_contentCardStyles",
23129
+ "_textCardStyles"
23130
+ ];
23131
+ var themeV2NormalEditorRawStyleFieldNames = [
23132
+ ...themeV2RuntimeStyleFieldNames,
23133
+ ...themeV2BlockSpecificRawStyleFieldNames
23134
+ ];
23135
+ new Set(
23136
+ themeV2NormalEditorRawStyleFieldNames
23137
+ );
23138
+
23139
+ // ../theme-core/src/site-styles/designState.ts
23140
+ var themeV2DesignStateSchemaVersion = 1;
23141
+ var designResolutionPolicySchema = z.enum(["generated", "user", "admin", "sdk"]);
23142
+ var runtimeStyleFieldNameSchema = z.enum(themeV2RuntimeStyleFieldNames);
23143
+ var nonEmptyRuntimeStyleFieldNamesSchema = z.array(runtimeStyleFieldNameSchema).min(1).transform((fields3) => [
23144
+ fields3[0],
23145
+ ...fields3.slice(1)
23146
+ ]);
23147
+ var heroLegibilityStrategySchema = z.enum([
23148
+ "none",
23149
+ "scrim-gradient",
23150
+ "solid-panel"
23151
+ ]);
23152
+ function uniqueNonEmpty(values) {
23153
+ const uniqueValues = [...new Set(values)];
23154
+ const firstValue = uniqueValues[0];
23155
+ if (!firstValue) {
23156
+ throw new Error("Expected at least one Theme V2 design state option.");
23157
+ }
23158
+ return [firstValue, ...uniqueValues.slice(1)];
23159
+ }
23160
+ var userPanelTreatments = uniqueNonEmpty(
23161
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
23162
+ );
23163
+ var userFlushTreatments = uniqueNonEmpty(
23164
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
23165
+ );
23166
+ var userFlushBleeds = uniqueNonEmpty(
23167
+ userDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
23168
+ );
23169
+ var contentFrameIntentSchema = z.discriminatedUnion("kind", [
23170
+ z.object({ kind: z.literal("plain") }).strict(),
23171
+ z.object({
23172
+ kind: z.literal("panel"),
23173
+ treatment: z.enum(userPanelTreatments)
23174
+ }).strict(),
23175
+ z.object({
23176
+ kind: z.literal("flush-panel"),
23177
+ treatment: z.enum(userFlushTreatments),
23178
+ bleed: z.enum(userFlushBleeds)
23179
+ }).strict()
23180
+ ]);
23181
+ var blockDesignPlanSchema = z.object({
23182
+ blockId: z.string().min(1).transform(asDesignBlockId),
23183
+ blockKind: z.string().min(1),
23184
+ purpose: z.string().min(1),
23185
+ sectionSurface: z.enum(userDesignOptionCatalog.sectionSurfaces),
23186
+ contentFrame: contentFrameIntentSchema,
23187
+ itemSurface: z.enum(userDesignOptionCatalog.itemSurfaces),
23188
+ transitionAfter: z.enum(userDesignOptionCatalog.transitions),
23189
+ emphasis: z.enum(userDesignOptionCatalog.emphases),
23190
+ heroLegibility: heroLegibilityStrategySchema.optional()
23191
+ }).strict();
23192
+ var styleAuthoritySchema = z.discriminatedUnion("kind", [
23193
+ z.object({
23194
+ kind: z.literal("theme-v2"),
23195
+ source: designResolutionPolicySchema,
23196
+ siteStyleId: z.string().min(1).transform(asSiteStyleId),
23197
+ templateId: z.string().min(1).transform(asDesignSystemTemplateId),
23198
+ templateVersion: z.number().int().nonnegative(),
23199
+ resolverVersion: z.number().int().nonnegative()
23200
+ }).strict(),
23201
+ z.object({
23202
+ kind: z.literal("legacy-raw"),
23203
+ reason: z.enum(["pre-theme-v2", "manual-runtime-fields"])
23204
+ }).strict(),
23205
+ z.object({
23206
+ kind: z.literal("advanced-detached"),
23207
+ reason: z.literal("detached-custom-runtime-fields")
23208
+ }).strict()
23209
+ ]);
23210
+ var blockRuntimeStyleAuthoritySchema = z.object({
23211
+ unit: z.literal("block-runtime-fields"),
23212
+ blockId: z.string().min(1).transform(asDesignBlockId),
23213
+ fields: nonEmptyRuntimeStyleFieldNamesSchema,
23214
+ authority: styleAuthoritySchema
23215
+ }).strict();
23216
+ z.object({
23217
+ schemaVersion: z.literal(themeV2DesignStateSchemaVersion),
23218
+ siteStyleId: z.string().min(1).transform(asSiteStyleId),
23219
+ templateId: z.string().min(1).transform(asDesignSystemTemplateId),
23220
+ templateVersion: z.number().int().nonnegative(),
23221
+ resolverVersion: z.number().int().nonnegative(),
23222
+ rhythmPresetId: z.string().min(1),
23223
+ blocks: z.array(blockDesignPlanSchema),
23224
+ styleAuthorities: z.array(blockRuntimeStyleAuthoritySchema)
23225
+ }).strict();
23226
+ function uniqueNonEmpty2(values) {
23227
+ const uniqueValues = [...new Set(values)];
23228
+ const firstValue = uniqueValues[0];
23229
+ if (!firstValue) {
23230
+ throw new Error("Expected at least one generated schema option.");
23231
+ }
23232
+ return [firstValue, ...uniqueValues.slice(1)];
23233
+ }
23234
+ var generatedPanelTreatments = uniqueNonEmpty2(
23235
+ generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "panel").map((frame) => frame.treatment)
23236
+ );
23237
+ var generatedFlushTreatments = uniqueNonEmpty2(
23238
+ generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.treatment)
23239
+ );
23240
+ var generatedFlushBleeds = uniqueNonEmpty2(
23241
+ generatedDesignOptionCatalog.contentFrames.filter((frame) => frame.kind === "flush-panel").map((frame) => frame.bleed)
23242
+ );
23243
+ var generatedPanelFrameSchema = z.object({
23244
+ kind: z.literal("panel"),
23245
+ treatment: z.enum(generatedPanelTreatments)
23246
+ }).strict();
23247
+ var generatedFlushPanelFrameSchema = z.object({
23248
+ kind: z.literal("flush-panel"),
23249
+ treatment: z.enum(generatedFlushTreatments),
23250
+ bleed: z.enum(generatedFlushBleeds)
23251
+ }).strict();
23252
+ var generatedContentFrameIntentSchema = z.discriminatedUnion("kind", [
23253
+ z.object({ kind: z.literal("plain") }).strict(),
23254
+ generatedPanelFrameSchema,
23255
+ generatedFlushPanelFrameSchema
23256
+ ]);
23257
+ var generatedSiteStyleIdSchema = z.enum(curatedSiteStyleIdValues).transform(asSiteStyleId);
23258
+ function generatedChoiceSchema(valueSchema) {
23259
+ return z.discriminatedUnion("kind", [
23260
+ z.object({
23261
+ source: z.literal("generated"),
23262
+ kind: z.literal("auto")
23263
+ }).strict(),
23264
+ z.object({
23265
+ source: z.literal("generated"),
23266
+ kind: z.literal("explicit"),
23267
+ value: valueSchema
23268
+ }).strict()
23269
+ ]);
23270
+ }
23271
+ var generatedBlockDesignIntentSchema = z.object({
23272
+ sectionSurface: generatedChoiceSchema(
23273
+ z.enum(generatedDesignOptionCatalog.sectionSurfaces)
23274
+ ),
23275
+ contentFrame: generatedChoiceSchema(generatedContentFrameIntentSchema),
23276
+ itemSurface: generatedChoiceSchema(
23277
+ z.enum(generatedDesignOptionCatalog.itemSurfaces)
23278
+ ),
23279
+ transitionAfter: generatedChoiceSchema(
23280
+ z.enum(generatedDesignOptionCatalog.transitions)
23281
+ ),
23282
+ emphasis: generatedChoiceSchema(
23283
+ z.enum(generatedDesignOptionCatalog.emphases)
23284
+ )
23285
+ }).strict();
23286
+ var generatedMediaCompositionIntentSchema = z.enum([
23287
+ "none",
23288
+ "supporting",
23289
+ "dominant"
23290
+ ]);
23291
+ var generatedDecorativeCompositionIntentSchema = z.enum([
23292
+ "none",
23293
+ "supporting"
23294
+ ]);
23295
+ var generatedHeroLegibilityStrategySchema = z.enum([
23296
+ "none",
23297
+ "scrim-gradient"
23298
+ ]);
23299
+ var generatedBlockMediaIntentSchema = z.object({
23300
+ media: generatedMediaCompositionIntentSchema,
23301
+ decorative: generatedDecorativeCompositionIntentSchema,
23302
+ heroLegibility: generatedChoiceSchema(generatedHeroLegibilityStrategySchema)
23303
+ }).strict();
23304
+ var generatedBoundaryIntentSchema = z.object({
23305
+ transitionAfter: generatedChoiceSchema(
23306
+ z.enum(generatedDesignOptionCatalog.transitions)
23307
+ )
23308
+ }).strict();
23309
+ var generatedPageDesignBlockIntentSchema = z.object({
23310
+ blockId: z.string().min(1),
23311
+ blockKind: z.string().min(1),
23312
+ purpose: z.string().min(1),
23313
+ design: generatedBlockDesignIntentSchema,
23314
+ mediaIntent: generatedBlockMediaIntentSchema,
23315
+ boundaryIntent: generatedBoundaryIntentSchema
23316
+ }).strict();
23317
+ z.object({
23318
+ siteStyleId: generatedSiteStyleIdSchema,
23319
+ blocks: z.array(generatedPageDesignBlockIntentSchema)
23320
+ }).strict();
23321
+ var pageDesignIntentSchemaVersion = 1;
23322
+ var pageDesignUserPinnedAppearanceChoiceSchema = z.object({
23323
+ kind: z.literal("user-pinned"),
23324
+ value: z.string().min(1).transform(asAppearancePresetId)
23325
+ }).strict();
23326
+ var pageDesignUserPinnedBoundaryChoiceSchema = z.object({
23327
+ kind: z.literal("user-pinned"),
23328
+ value: z.string().min(1).transform(asBoundaryOptionId)
23329
+ }).strict();
23330
+ var pageDesignBlockLookPinSchema = z.object({
23331
+ blockId: z.string().min(1).transform(asDesignBlockId),
23332
+ blockKind: z.string().min(1),
23333
+ choice: pageDesignUserPinnedAppearanceChoiceSchema
23334
+ }).strict();
23335
+ var pageDesignBoundaryPinSchema = z.object({
23336
+ boundaryId: z.string().min(1).transform(asDesignBoundaryId),
23337
+ previousBlockId: z.string().min(1).transform(asDesignBlockId),
23338
+ nextBlockId: z.string().min(1).transform(asDesignBlockId),
23339
+ choice: pageDesignUserPinnedBoundaryChoiceSchema
23340
+ }).strict().superRefine((pin, ctx) => {
23341
+ const expectedBoundaryId = makeBoundaryId(
23342
+ pin.previousBlockId,
23343
+ pin.nextBlockId
23344
+ );
23345
+ if (pin.boundaryId !== expectedBoundaryId) {
23346
+ ctx.addIssue({
23347
+ code: z.ZodIssueCode.custom,
23348
+ path: ["boundaryId"],
23349
+ message: `Boundary id must match previousBlockId and nextBlockId. Expected ${expectedBoundaryId}.`
23350
+ });
22786
23351
  }
22787
- return value;
22788
- }
22789
- var paletteVariantIdSchema = z.string().min(1).transform((value) => asPaletteVariantId(value));
22790
- var PALETTE_TOKEN_NAMES = [
22791
- "primary",
22792
- "primaryForeground",
22793
- "secondary",
22794
- "accent",
22795
- "success",
22796
- "warning",
22797
- "destructive",
22798
- "background",
22799
- "surface",
22800
- "surfaceAlt",
22801
- "muted",
22802
- "text",
22803
- "border"
22804
- ];
22805
- var paletteTokenNameSchema = z.enum(PALETTE_TOKEN_NAMES);
22806
- var HEX_COLOR_REGEX = /^#[0-9a-f]{6}$/;
22807
- var hexColorSchema = z.string().regex(HEX_COLOR_REGEX, "Hex must be #RRGGBB (lowercase)").transform((value) => value);
22808
- var variantPaletteColorSchema = paletteColorSchema.extend({
22809
- name: paletteTokenNameSchema
22810
23352
  });
22811
23353
  z.object({
22812
- id: paletteVariantIdSchema,
22813
- name: z.string().min(1),
22814
- description: z.string().min(1),
22815
- tags: styleTagsSchema,
22816
- mode: z.enum(["light", "dark"]),
22817
- colors: z.array(variantPaletteColorSchema).min(1)
23354
+ schemaVersion: z.literal(pageDesignIntentSchemaVersion),
23355
+ siteStyleId: z.string().min(1).transform(asSiteStyleId),
23356
+ pageFlowPresetId: z.string().min(1).transform(asPageFlowPresetId),
23357
+ blockLookPins: z.array(pageDesignBlockLookPinSchema),
23358
+ boundaryPins: z.array(pageDesignBoundaryPinSchema)
23359
+ }).strict().superRefine((intent, ctx) => {
23360
+ addDuplicateStringIssues(ctx, {
23361
+ values: intent.blockLookPins.map((pin) => pin.blockId),
23362
+ path: ["blockLookPins"],
23363
+ label: "block Look pin"
23364
+ });
23365
+ addDuplicateStringIssues(ctx, {
23366
+ values: intent.boundaryPins.map(
23367
+ (pin) => boundaryKey(pin.previousBlockId, pin.nextBlockId)
23368
+ ),
23369
+ path: ["boundaryPins"],
23370
+ label: "boundary pin"
23371
+ });
22818
23372
  });
22819
- function definePaletteVariant(input) {
22820
- return {
22821
- id: asPaletteVariantId(input.id),
22822
- name: input.name,
22823
- description: input.description,
22824
- tags: input.tags,
22825
- mode: input.mode,
22826
- colors: input.colors
22827
- };
23373
+ function addDuplicateStringIssues(ctx, input) {
23374
+ const seen = /* @__PURE__ */ new Set();
23375
+ const duplicates = /* @__PURE__ */ new Set();
23376
+ for (const value of input.values) {
23377
+ if (seen.has(value)) {
23378
+ duplicates.add(value);
23379
+ }
23380
+ seen.add(value);
23381
+ }
23382
+ for (const duplicate of duplicates) {
23383
+ ctx.addIssue({
23384
+ code: z.ZodIssueCode.custom,
23385
+ path: [...input.path],
23386
+ message: `Duplicate ${input.label}: ${duplicate}.`
23387
+ });
23388
+ }
23389
+ }
23390
+ function boundaryKey(previousBlockId, nextBlockId) {
23391
+ return makeBoundaryId(previousBlockId, nextBlockId);
22828
23392
  }
22829
- z.object({
22830
- primary: hexColorSchema.optional(),
22831
- primaryForeground: hexColorSchema.optional(),
22832
- secondary: hexColorSchema.optional(),
22833
- accent: hexColorSchema.optional(),
22834
- success: hexColorSchema.optional(),
22835
- warning: hexColorSchema.optional(),
22836
- destructive: hexColorSchema.optional(),
22837
- background: hexColorSchema.optional(),
22838
- surface: hexColorSchema.optional(),
22839
- surfaceAlt: hexColorSchema.optional(),
22840
- muted: hexColorSchema.optional(),
22841
- text: hexColorSchema.optional(),
22842
- border: hexColorSchema.optional()
22843
- }).strict().transform((value) => value);
22844
-
22845
- // ../theme-core/src/palette/variants/brand-led.ts
22846
- var brandLedCool = definePaletteVariant({
22847
- id: "brand-led-cool",
22848
- name: "Brand-led \u2014 Cool",
22849
- description: "Confident blue primary with slate neutrals.",
22850
- tags: { tone: "classic", energy: "calm", era: "modern" },
22851
- mode: "light",
22852
- colors: [
22853
- { name: "primary", hex: "#2563eb" },
22854
- { name: "secondary", hex: "#64748b" },
22855
- { name: "accent", hex: "#0f766e" },
22856
- { name: "success", hex: "#16a34a" },
22857
- { name: "warning", hex: "#d97706" },
22858
- { name: "destructive", hex: "#dc2626" },
22859
- { name: "background", hex: "#ffffff" },
22860
- { name: "surface", hex: "#ffffff" },
22861
- { name: "surfaceAlt", hex: "#f8fafc" },
22862
- { name: "muted", hex: "#f1f5f9" },
22863
- { name: "text", hex: "#0f172a" },
22864
- { name: "primaryForeground", hex: "#ffffff" },
22865
- { name: "border", hex: "#cbd5e1" }
22866
- ]
22867
- });
22868
- var brandLedWarm = definePaletteVariant({
22869
- id: "brand-led-warm",
22870
- name: "Brand-led \u2014 Warm",
22871
- description: "Sunset orange primary with warm grey neutrals.",
22872
- tags: { tone: "classic", energy: "vibrant", era: "modern" },
22873
- mode: "light",
22874
- colors: [
22875
- { name: "primary", hex: "#ea580c" },
22876
- { name: "secondary", hex: "#78716c" },
22877
- { name: "accent", hex: "#a16207" },
22878
- { name: "success", hex: "#16a34a" },
22879
- { name: "warning", hex: "#d97706" },
22880
- { name: "destructive", hex: "#b91c1c" },
22881
- { name: "background", hex: "#fffaf3" },
22882
- { name: "surface", hex: "#ffffff" },
22883
- { name: "surfaceAlt", hex: "#fbeee0" },
22884
- { name: "muted", hex: "#f4e2cd" },
22885
- { name: "text", hex: "#1c1917" },
22886
- { name: "primaryForeground", hex: "#fffaf3" },
22887
- { name: "border", hex: "#d6c4ad" }
22888
- ]
22889
- });
22890
- var brandLedJewel = definePaletteVariant({
22891
- id: "brand-led-jewel",
22892
- name: "Brand-led \u2014 Jewel",
22893
- description: "Deep emerald primary with rich neutrals.",
22894
- tags: { tone: "bold", energy: "vibrant", era: "modern" },
22895
- mode: "light",
22896
- colors: [
22897
- { name: "primary", hex: "#047857" },
22898
- { name: "secondary", hex: "#4b5563" },
22899
- { name: "accent", hex: "#7c3aed" },
22900
- { name: "success", hex: "#15803d" },
22901
- { name: "warning", hex: "#b45309" },
22902
- { name: "destructive", hex: "#b91c1c" },
22903
- { name: "background", hex: "#ffffff" },
22904
- { name: "surface", hex: "#ffffff" },
22905
- { name: "surfaceAlt", hex: "#f5f5f4" },
22906
- { name: "muted", hex: "#e7e5e4" },
22907
- { name: "text", hex: "#0c0a09" },
22908
- { name: "primaryForeground", hex: "#ffffff" },
22909
- { name: "border", hex: "#a8a29e" }
22910
- ]
22911
- });
22912
-
22913
- // ../theme-core/src/palette/variants/high-contrast.ts
22914
- var highContrastInk = definePaletteVariant({
22915
- id: "high-contrast-ink",
22916
- name: "High Contrast \u2014 Ink",
22917
- description: "Near-black primary with cool greys.",
22918
- tags: { tone: "bold", energy: "calm", era: "editorial" },
22919
- mode: "light",
22920
- colors: [
22921
- { name: "primary", hex: "#111827" },
22922
- { name: "secondary", hex: "#374151" },
22923
- { name: "accent", hex: "#1d4ed8" },
22924
- { name: "success", hex: "#047857" },
22925
- { name: "warning", hex: "#b45309" },
22926
- { name: "destructive", hex: "#b91c1c" },
22927
- { name: "background", hex: "#ffffff" },
22928
- { name: "surface", hex: "#ffffff" },
22929
- { name: "surfaceAlt", hex: "#f3f4f6" },
22930
- { name: "muted", hex: "#e5e7eb" },
22931
- { name: "text", hex: "#030712" },
22932
- { name: "primaryForeground", hex: "#ffffff" },
22933
- { name: "border", hex: "#6b7280" }
22934
- ]
22935
- });
22936
- var highContrastCharcoal = definePaletteVariant({
22937
- id: "high-contrast-charcoal",
22938
- name: "High Contrast \u2014 Charcoal",
22939
- description: "Warm charcoal primary on a soft cream ground.",
22940
- tags: { tone: "minimal", energy: "calm", era: "editorial" },
22941
- mode: "light",
22942
- colors: [
22943
- { name: "primary", hex: "#1f2937" },
22944
- { name: "secondary", hex: "#52525b" },
22945
- { name: "accent", hex: "#a16207" },
22946
- { name: "success", hex: "#15803d" },
22947
- { name: "warning", hex: "#b45309" },
22948
- { name: "destructive", hex: "#991b1b" },
22949
- { name: "background", hex: "#fafaf9" },
22950
- { name: "surface", hex: "#ffffff" },
22951
- { name: "surfaceAlt", hex: "#f5f5f4" },
22952
- { name: "muted", hex: "#e7e5e4" },
22953
- { name: "text", hex: "#0c0a09" },
22954
- { name: "primaryForeground", hex: "#fafaf9" },
22955
- { name: "border", hex: "#a8a29e" }
22956
- ]
22957
- });
22958
- var highContrastMonochrome = definePaletteVariant({
22959
- id: "high-contrast-monochrome",
22960
- name: "High Contrast \u2014 Monochrome",
22961
- description: "Pure black-on-white with a single saturated accent.",
22962
- tags: { tone: "bold", energy: "vibrant", era: "editorial" },
22963
- mode: "light",
22964
- colors: [
22965
- { name: "primary", hex: "#000000" },
22966
- { name: "secondary", hex: "#404040" },
22967
- { name: "accent", hex: "#dc2626" },
22968
- { name: "success", hex: "#000000" },
22969
- { name: "warning", hex: "#000000" },
22970
- { name: "destructive", hex: "#dc2626" },
22971
- { name: "background", hex: "#ffffff" },
22972
- { name: "surface", hex: "#ffffff" },
22973
- { name: "surfaceAlt", hex: "#f5f5f5" },
22974
- { name: "muted", hex: "#e5e5e5" },
22975
- { name: "text", hex: "#000000" },
22976
- { name: "primaryForeground", hex: "#ffffff" },
22977
- { name: "border", hex: "#525252" }
22978
- ]
22979
- });
22980
-
22981
- // ../theme-core/src/palette/variants/soft-natural.ts
22982
- var softNaturalSage = definePaletteVariant({
22983
- id: "soft-natural-sage",
22984
- name: "Soft Natural \u2014 Sage",
22985
- description: "Olive sage primary on an off-white ground.",
22986
- tags: { tone: "classic", energy: "calm", era: "organic" },
22987
- mode: "light",
22988
- colors: [
22989
- { name: "primary", hex: "#3f6212" },
22990
- { name: "secondary", hex: "#6b7280" },
22991
- { name: "accent", hex: "#0f766e" },
22992
- { name: "success", hex: "#15803d" },
22993
- { name: "warning", hex: "#a16207" },
22994
- { name: "destructive", hex: "#b91c1c" },
22995
- { name: "background", hex: "#fbfdf7" },
22996
- { name: "surface", hex: "#ffffff" },
22997
- { name: "surfaceAlt", hex: "#eef5e8" },
22998
- { name: "muted", hex: "#e7efdf" },
22999
- { name: "text", hex: "#1f2a1d" },
23000
- { name: "primaryForeground", hex: "#ffffff" },
23001
- { name: "border", hex: "#cbd8c0" }
23002
- ]
23003
- });
23004
- var softNaturalStone = definePaletteVariant({
23005
- id: "soft-natural-stone",
23006
- name: "Soft Natural \u2014 Stone",
23007
- description: "River-stone grey-green primary with cool neutrals.",
23008
- tags: { tone: "minimal", energy: "calm", era: "organic" },
23009
- mode: "light",
23010
- colors: [
23011
- { name: "primary", hex: "#5a7a5d" },
23012
- { name: "secondary", hex: "#8a9a8c" },
23013
- { name: "accent", hex: "#c9b88f" },
23014
- { name: "success", hex: "#5a7a5d" },
23015
- { name: "warning", hex: "#a89466" },
23016
- { name: "destructive", hex: "#a3503e" },
23017
- { name: "background", hex: "#faf6ec" },
23018
- { name: "surface", hex: "#ffffff" },
23019
- { name: "surfaceAlt", hex: "#f0ecdf" },
23020
- { name: "muted", hex: "#e6e1d0" },
23021
- { name: "text", hex: "#2f3d31" },
23022
- { name: "primaryForeground", hex: "#faf6ec" },
23023
- { name: "border", hex: "#c9c1ad" }
23024
- ]
23025
- });
23026
- var softNaturalWatercolor = definePaletteVariant({
23027
- id: "soft-natural-watercolor",
23028
- name: "Soft Natural \u2014 Watercolor",
23029
- description: "Soft sand primary with watercolour sage accents.",
23030
- tags: { tone: "classic", energy: "vibrant", era: "organic" },
23031
- mode: "light",
23032
- colors: [
23033
- { name: "primary", hex: "#a8825f" },
23034
- { name: "secondary", hex: "#88a888" },
23035
- { name: "accent", hex: "#c8a78e" },
23036
- { name: "success", hex: "#7d8a5f" },
23037
- { name: "warning", hex: "#c89a4d" },
23038
- { name: "destructive", hex: "#a3503e" },
23039
- { name: "background", hex: "#fefdfa" },
23040
- { name: "surface", hex: "#ffffff" },
23041
- { name: "surfaceAlt", hex: "#f6f1e6" },
23042
- { name: "muted", hex: "#eee7d1" },
23043
- { name: "text", hex: "#4a3d30" },
23044
- { name: "primaryForeground", hex: "#fefdfa" },
23045
- { name: "border", hex: "#d8c9a8" }
23046
- ]
23047
- });
23048
-
23049
- // ../theme-core/src/palette/variants/warm-neutral.ts
23050
- var warmNeutralClay = definePaletteVariant({
23051
- id: "warm-neutral-clay",
23052
- name: "Warm Neutral \u2014 Clay",
23053
- description: "Terracotta primary on a cream ground.",
23054
- tags: { tone: "classic", energy: "calm", era: "organic" },
23055
- mode: "light",
23056
- colors: [
23057
- { name: "primary", hex: "#8b5e34" },
23058
- { name: "secondary", hex: "#7c6f64" },
23059
- { name: "accent", hex: "#a15c38" },
23060
- { name: "success", hex: "#527853" },
23061
- { name: "warning", hex: "#b7791f" },
23062
- { name: "destructive", hex: "#b91c1c" },
23063
- { name: "background", hex: "#fffaf3" },
23064
- { name: "surface", hex: "#ffffff" },
23065
- { name: "surfaceAlt", hex: "#f5eadc" },
23066
- { name: "muted", hex: "#efe2d0" },
23067
- { name: "text", hex: "#2f241c" },
23068
- { name: "primaryForeground", hex: "#fffaf3" },
23069
- { name: "border", hex: "#d8c6b3" }
23070
- ]
23071
- });
23072
- var warmNeutralCream = definePaletteVariant({
23073
- id: "warm-neutral-cream",
23074
- name: "Warm Neutral \u2014 Cream",
23075
- description: "Soft sand primary with pale cream surfaces.",
23076
- tags: { tone: "minimal", energy: "calm", era: "organic" },
23077
- mode: "light",
23078
- colors: [
23079
- { name: "primary", hex: "#b08864" },
23080
- { name: "secondary", hex: "#9a8c7e" },
23081
- { name: "accent", hex: "#c2956a" },
23082
- { name: "success", hex: "#7d8a5f" },
23083
- { name: "warning", hex: "#c89a4d" },
23084
- { name: "destructive", hex: "#a3503e" },
23085
- { name: "background", hex: "#fdf8ee" },
23086
- { name: "surface", hex: "#ffffff" },
23087
- { name: "surfaceAlt", hex: "#f4ebd9" },
23088
- { name: "muted", hex: "#ede3cf" },
23089
- { name: "text", hex: "#3b2f24" },
23090
- { name: "primaryForeground", hex: "#fdf8ee" },
23091
- { name: "border", hex: "#e0d2b8" }
23092
- ]
23093
- });
23094
- var warmNeutralForest = definePaletteVariant({
23095
- id: "warm-neutral-forest",
23096
- name: "Warm Neutral \u2014 Forest",
23097
- description: "Deep forest green primary with earthy neutrals.",
23098
- tags: { tone: "classic", energy: "calm", era: "organic" },
23099
- mode: "light",
23100
- colors: [
23101
- { name: "primary", hex: "#3d5840" },
23102
- { name: "secondary", hex: "#7a6f5d" },
23103
- { name: "accent", hex: "#b06b50" },
23104
- { name: "success", hex: "#5a7a5d" },
23105
- { name: "warning", hex: "#b7791f" },
23106
- { name: "destructive", hex: "#b91c1c" },
23107
- { name: "background", hex: "#fbf8f0" },
23108
- { name: "surface", hex: "#ffffff" },
23109
- { name: "surfaceAlt", hex: "#f2ecdb" },
23110
- { name: "muted", hex: "#ebe3cc" },
23111
- { name: "text", hex: "#2a2a2a" },
23112
- { name: "primaryForeground", hex: "#fbf8f0" },
23113
- { name: "border", hex: "#cdc1a4" }
23114
- ]
23115
- });
23116
23393
 
23117
- // ../theme-core/src/palette/variants/index.ts
23118
- var paletteVariants = [
23119
- // Brand-led family
23120
- brandLedCool,
23121
- brandLedWarm,
23122
- brandLedJewel,
23123
- // Warm-neutral family
23124
- warmNeutralClay,
23125
- warmNeutralCream,
23126
- warmNeutralForest,
23127
- // High-contrast family
23128
- highContrastInk,
23129
- highContrastCharcoal,
23130
- highContrastMonochrome,
23131
- // Soft-natural family
23132
- softNaturalSage,
23133
- softNaturalStone,
23134
- softNaturalWatercolor
23135
- ];
23136
- new Map(
23137
- paletteVariants.map((v) => [v.id, v])
23138
- );
23394
+ // ../theme-core/src/site-styles/runtimeCompiler.ts
23395
+ init_personalities();
23139
23396
  var nonEmptyStringSchema = z.string().min(1);
23140
23397
  var blockContentVersionIdSchema = nonEmptyStringSchema.transform(asBlockContentVersionId);
23141
23398
  var designBlockIdSchema = nonEmptyStringSchema.transform(asDesignBlockId);
@@ -23276,6 +23533,9 @@ var spaciousBoundaryOption = {
23276
23533
  defaultBoundaryOptionId: spaciousBoundaryOption.id
23277
23534
  }
23278
23535
  ];
23536
+
23537
+ // ../theme-core/src/site-styles/index.ts
23538
+ init_styleTags();
23279
23539
  var themeTokenRecipeOptions = {
23280
23540
  palette: ["brand-led", "warm-neutral", "high-contrast", "soft-natural"],
23281
23541
  contrast: ["standard", "strong", "maximum"],
@@ -25288,14 +25548,16 @@ var headerCta = ctaButton({
25288
25548
  whenPath: "menu.ctaItem.label",
25289
25549
  variantPath: "menu.ctaItem.variant",
25290
25550
  linkPath: "menu.ctaItem.link",
25291
- className: `header-cta btn-sm ${desktopOnlyDisplay("inline-flex")} rb-ml-6`
25551
+ sizeFallback: "sm",
25552
+ className: `header-cta ${desktopOnlyDisplay("inline-flex")} rb-ml-6`
25292
25553
  });
25293
25554
  var mobileCta = ctaButton({
25294
25555
  basePath: "menu.ctaItem",
25295
25556
  whenPath: "menu.ctaItem.label",
25296
25557
  variantPath: "menu.ctaItem.variant",
25297
25558
  linkPath: "menu.ctaItem.link",
25298
- className: "nav-mobile-cta btn-md rb-w-full"
25559
+ sizeFallback: "md",
25560
+ className: "nav-mobile-cta rb-w-full"
25299
25561
  });
25300
25562
  var mobileToggleIcon = stack({ gap: "xs", className: "nav-mobile-icon" }, [
25301
25563
  {
@@ -28978,7 +29240,25 @@ init_schema2();
28978
29240
  init_defineBlock();
28979
29241
  init_builder();
28980
29242
  init_fragments();
29243
+ init_media();
28981
29244
  var ITEM_NAME2 = "member";
29245
+ var teamMemberPhotoSchema = mediaSchema2.refine((media2) => media2.type === "image", {
29246
+ message: "Team member photos must be image media"
29247
+ }).nullable();
29248
+ var teamMemberDataSchema = z.object({
29249
+ _type: z.literal("teamMember"),
29250
+ id: z.string(),
29251
+ name: z.string(),
29252
+ role: z.string().nullable(),
29253
+ roleLabel: z.string().nullable(),
29254
+ bio: z.string().nullable(),
29255
+ summary: z.string().nullable(),
29256
+ photo: teamMemberPhotoSchema,
29257
+ profilePath: z.string().nullable()
29258
+ });
29259
+ var teamMembersDataSchema = z.array(teamMemberDataSchema);
29260
+ var dynamicSourceWhen = { equals: "site_staff" };
29261
+ var manualSourceWhen = { equals: "site_staff", not: true };
28982
29262
  var headingNode = text(
28983
29263
  { as: "h2" },
28984
29264
  bind("content.heading"),
@@ -29068,7 +29348,15 @@ var teamMemberStackLayout = el(
29068
29348
  ]
29069
29349
  ),
29070
29350
  stack({ gap: "sm", className: "rb-team-member-body rb-flex-1 rb-min-w-0" }, [
29071
- text({ as: "h3" }, bind("name")),
29351
+ link(
29352
+ {
29353
+ href: { $bind: { from: "profilePath" } },
29354
+ className: "rb-team-member-name-link"
29355
+ },
29356
+ [text({ as: "h3" }, bind("name"))],
29357
+ when("profilePath")
29358
+ ),
29359
+ text({ as: "h3" }, when("profilePath", { not: true }), bind("name")),
29072
29360
  text(
29073
29361
  { as: "p", className: "rb-team-member-role" },
29074
29362
  when("role"),
@@ -29082,12 +29370,18 @@ var teamMemberStackLayout = el(
29082
29370
  ])
29083
29371
  ]
29084
29372
  );
29085
- var gridMembersNode = repeaterFragmentLayout({
29373
+ var manualGridMembersNode = when("content.source", manualSourceWhen)(repeaterFragmentLayout({
29086
29374
  collectionPath: "content.members",
29087
29375
  itemName: ITEM_NAME2,
29088
29376
  fragments: { teamMember: teamMemberFragment },
29089
29377
  itemGap: "sm"
29090
- });
29378
+ }));
29379
+ var dynamicGridMembersNode = when("content.source", dynamicSourceWhen)(repeaterFragmentLayout({
29380
+ collectionPath: "data.members",
29381
+ itemName: ITEM_NAME2,
29382
+ fragments: { teamMember: teamMemberFragment },
29383
+ itemGap: "sm"
29384
+ }));
29091
29385
  var gridVariant = wrapVariant3(
29092
29386
  el(
29093
29387
  "grid",
@@ -29101,22 +29395,29 @@ var gridVariant = wrapVariant3(
29101
29395
  },
29102
29396
  gap: { $bind: { from: "content.gap", fallback: "medium" } }
29103
29397
  },
29104
- [gridMembersNode]
29398
+ [manualGridMembersNode, dynamicGridMembersNode]
29105
29399
  )
29106
29400
  );
29107
- var stackMembersNode = repeaterFragmentLayout({
29401
+ var manualStackMembersNode = when("content.source", manualSourceWhen)(repeaterFragmentLayout({
29108
29402
  collectionPath: "content.members",
29109
29403
  itemName: ITEM_NAME2,
29110
29404
  fragments: { teamMember: teamMemberFragment },
29111
29405
  layoutOverrides: { teamMember: teamMemberStackLayout },
29112
29406
  itemGap: "sm"
29113
- });
29407
+ }));
29408
+ var dynamicStackMembersNode = when("content.source", dynamicSourceWhen)(repeaterFragmentLayout({
29409
+ collectionPath: "data.members",
29410
+ itemName: ITEM_NAME2,
29411
+ fragments: { teamMember: teamMemberFragment },
29412
+ layoutOverrides: { teamMember: teamMemberStackLayout },
29413
+ itemGap: "sm"
29414
+ }));
29114
29415
  var stackVariant = wrapVariant3({
29115
29416
  type: "stack",
29116
29417
  props: {
29117
29418
  gap: { $bind: { from: "content.gap", fallback: "medium" } }
29118
29419
  },
29119
- children: [stackMembersNode]
29420
+ children: [manualStackMembersNode, dynamicStackMembersNode]
29120
29421
  });
29121
29422
  var teamMembersManifest = createBlockManifest({
29122
29423
  id: "block.team-members",
@@ -29131,6 +29432,18 @@ var teamMembersManifest = createBlockManifest({
29131
29432
  required: false,
29132
29433
  maxLength: 120
29133
29434
  }),
29435
+ parseFieldDefinition({
29436
+ id: "source",
29437
+ type: "select",
29438
+ label: "Team members",
29439
+ description: "Choose whether to use the site-wide team or a hand-picked list.",
29440
+ defaultValue: "manual",
29441
+ options: [
29442
+ { value: "manual", label: "Choose manually" },
29443
+ { value: "site_staff", label: "Use all site team members" }
29444
+ ],
29445
+ ui: { intent: "behavior" }
29446
+ }),
29134
29447
  parseFieldDefinition({
29135
29448
  id: "layoutAlign",
29136
29449
  type: "select",
@@ -29233,18 +29546,24 @@ var teamMembersManifest = createBlockManifest({
29233
29546
  ],
29234
29547
  ui: { intent: "display" }
29235
29548
  }),
29236
- fragmentsToRepeaterField(
29237
- "members",
29238
- "Team members",
29239
- { teamMember: teamMemberFragment },
29240
- {
29241
- minItems: 0,
29242
- maxItems: 50,
29243
- itemLabel: "Team member",
29244
- itemLabelSource: "name",
29245
- description: "Add people to this section."
29549
+ {
29550
+ ...fragmentsToRepeaterField(
29551
+ "members",
29552
+ "Team members",
29553
+ { teamMember: teamMemberFragment },
29554
+ {
29555
+ minItems: 0,
29556
+ maxItems: 50,
29557
+ itemLabel: "Team member",
29558
+ itemLabelSource: "name",
29559
+ description: "Add people to this section."
29560
+ }
29561
+ ),
29562
+ ui: {
29563
+ intent: "content",
29564
+ visibleWhen: { field: "source", equals: "manual" }
29246
29565
  }
29247
- )
29566
+ }
29248
29567
  ],
29249
29568
  layout: gridVariant,
29250
29569
  variants: {
@@ -29270,7 +29589,20 @@ var teamMembersManifest = createBlockManifest({
29270
29589
  styleTokens: { spacing: "lg" }
29271
29590
  });
29272
29591
  var teamMembersBlockDefinition = {
29273
- manifest: teamMembersManifest
29592
+ manifest: teamMembersManifest,
29593
+ dataSchemas: {
29594
+ members: teamMembersDataSchema
29595
+ },
29596
+ dataLoaders: {
29597
+ members: {
29598
+ endpoint: "listPublicTeamMembers",
29599
+ params: {
29600
+ siteId: { $bind: { from: "$root.siteId" } },
29601
+ stage: { $bind: { from: "$root.previewStage", fallback: "published" } }
29602
+ },
29603
+ mode: "server"
29604
+ }
29605
+ }
29274
29606
  };
29275
29607
 
29276
29608
  // ../blocks/src/system/blocks/location-map.ts
@@ -32313,6 +32645,7 @@ var SUPPORTED_LOADER_ENDPOINTS2 = [
32313
32645
  "getPublishedEntryPreview",
32314
32646
  "listPublicEvents",
32315
32647
  "listPublicCourses",
32648
+ "listPublicTeamMembers",
32316
32649
  "listPublicProducts",
32317
32650
  "listPublicPasses",
32318
32651
  "listPublicMemberships",
@@ -44777,7 +45110,7 @@ var SimpleCache = class {
44777
45110
  };
44778
45111
 
44779
45112
  // src/version.ts
44780
- var SDK_VERSION = "0.60.3";
45113
+ var SDK_VERSION = "0.60.7";
44781
45114
 
44782
45115
  // src/client/error.ts
44783
45116
  var RiverbankApiError = class _RiverbankApiError extends Error {
@@ -45571,19 +45904,20 @@ function createRiverbankClient(config2) {
45571
45904
  }
45572
45905
  return {
45573
45906
  async getSite(params) {
45574
- const { slug, domain, id, signal, force } = params;
45907
+ const { slug, domain, id, signal, force, currentPath } = params;
45575
45908
  if (!slug && !domain && !id) {
45576
45909
  throw new Error(
45577
45910
  `getSite() requires at least one identifier: slug, domain, or id. Received: ${JSON.stringify(params)}`
45578
45911
  );
45579
45912
  }
45580
- const cacheKey = `site:${slug || domain || id}`;
45913
+ const cacheKey = `site:${slug || domain || id}:${currentPath ?? ""}`;
45581
45914
  const siteId = id || slug || domain;
45582
45915
  return resilientFetch(cacheKey, async (sig) => {
45583
45916
  const apiParams = {};
45584
45917
  if (params.slug) apiParams.slug = params.slug;
45585
45918
  if (params.domain) apiParams.domain = params.domain;
45586
45919
  if (params.id) apiParams.id = params.id;
45920
+ if (currentPath) apiParams.currentPath = currentPath;
45587
45921
  if (force) apiParams.force = "true";
45588
45922
  return await apiClient({
45589
45923
  endpoint: "getSite",
@@ -45815,6 +46149,24 @@ function createRiverbankClient(config2) {
45815
46149
  return await apiClient({ endpoint: "listPublicCourses", params: apiParams, options: { signal: sig } });
45816
46150
  }, { signal });
45817
46151
  },
46152
+ async listPublicTeamMembers(params) {
46153
+ const { siteId, stage, signal } = params;
46154
+ if (!siteId) {
46155
+ throw new Error("listPublicTeamMembers() requires siteId");
46156
+ }
46157
+ const cacheKey = `public-team-members:${siteId}:${stage ?? ""}`;
46158
+ return resilientFetch(cacheKey, async (sig) => {
46159
+ const apiParams = {
46160
+ siteId,
46161
+ ...stage && { stage }
46162
+ };
46163
+ return await apiClient({
46164
+ endpoint: "listPublicTeamMembers",
46165
+ params: apiParams,
46166
+ options: { signal: sig }
46167
+ });
46168
+ }, { signal });
46169
+ },
45818
46170
  async listPublicProducts(params) {
45819
46171
  const { siteId, stage, categorySelector, signal } = params;
45820
46172
  if (!siteId) {