@riverbankcms/sdk 0.78.2 → 0.79.0

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 (159) hide show
  1. package/README.md +80 -0
  2. package/dist/{PreviewEditorSidebar-4DXLYX2V.mjs → PreviewEditorSidebar-56NMJMIK.mjs} +724 -47
  3. package/dist/{PreviewEditorUI-CS5P4N3P.mjs → PreviewEditorUI-27KJVEET.mjs} +3 -3
  4. package/dist/SdkPreviewModeRuntime-H4BSP6E7.mjs +8 -0
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +36 -0
  6. package/dist/_dts/api/src/endpoints.d.ts +55 -0
  7. package/dist/_dts/api/src/index.d.ts +5 -3
  8. package/dist/_dts/api/src/media.d.ts +8 -1
  9. package/dist/_dts/api/src/navigation/dashboardSettingsNav.d.ts +1 -1
  10. package/dist/_dts/api/src/navigation/dashboardSiteNav.d.ts +8 -8
  11. package/dist/_dts/api/src/navigation/identity.d.ts +59 -0
  12. package/dist/_dts/api/src/navigation.d.ts +2 -0
  13. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +4 -0
  14. package/dist/_dts/api/src/sdkContracts.d.ts +1 -0
  15. package/dist/_dts/api/src/siteIcons.d.ts +128 -0
  16. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +16 -0
  17. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +7 -0
  18. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +6 -1
  19. package/dist/_dts/api/src/types.d.ts +1 -1
  20. package/dist/_dts/api/src/webhooks.d.ts +239 -0
  21. package/dist/_dts/blocks/src/index.d.ts +4 -0
  22. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +288 -288
  23. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +288 -288
  24. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +288 -288
  25. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +288 -288
  26. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +288 -288
  27. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +294 -289
  28. package/dist/_dts/blocks/src/system/blocks/feature-card-icons.d.ts +57 -0
  29. package/dist/_dts/blocks/src/system/blocks/feature-cards.d.ts +4 -0
  30. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +288 -288
  31. package/dist/_dts/blocks/src/system/blocks/index.d.ts +1 -0
  32. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +1 -1
  33. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +22 -22
  34. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +288 -288
  35. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +288 -288
  36. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +288 -288
  37. package/dist/_dts/blocks/src/system/blocks/testimonials.d.ts +7 -1
  38. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +170 -0
  39. package/dist/_dts/blocks/src/system/fragments/library/testimonialsCarousel.d.ts +5 -0
  40. package/dist/_dts/blocks/src/system/helpers/resolveBackground.d.ts +3 -1
  41. package/dist/_dts/blocks/src/system/icons/ids.d.ts +13 -0
  42. package/dist/_dts/blocks/src/system/icons/index.d.ts +6 -0
  43. package/dist/_dts/blocks/src/system/icons/presets.d.ts +4 -0
  44. package/dist/_dts/blocks/src/system/icons/registry.d.ts +18 -0
  45. package/dist/_dts/blocks/src/system/icons/semantic.d.ts +239 -0
  46. package/dist/_dts/blocks/src/system/icons/value.d.ts +94 -0
  47. package/dist/_dts/blocks/src/system/index.d.ts +1 -0
  48. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +4 -1
  49. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +23 -0
  50. package/dist/_dts/blocks/src/system/runtime/nodes/feature-card-icon.d.ts +13 -0
  51. package/dist/_dts/content-model/src/contentManifest.d.ts +3 -1
  52. package/dist/_dts/core/src/branded.d.ts +6 -0
  53. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +191 -0
  54. package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +12 -1
  55. package/dist/_dts/editor-blocks/src/block-editor/BlockCardBody.d.ts +12 -1
  56. package/dist/_dts/editor-blocks/src/block-editor/BlockCardHeader.d.ts +12 -2
  57. package/dist/_dts/editor-blocks/src/block-editor/FeatureCardIconsPanel.d.ts +21 -0
  58. package/dist/_dts/editor-blocks/src/block-editor/GeneratedIconSetDialog.d.ts +40 -0
  59. package/dist/_dts/editor-blocks/src/block-editor/SortableBlockItem.d.ts +11 -1
  60. package/dist/_dts/editor-blocks/src/block-editor/featureCardIconActions.d.ts +82 -0
  61. package/dist/_dts/editor-blocks/src/widgets/icon-picker/IconPickerField.d.ts +1 -1
  62. package/dist/_dts/media-core/src/fileDomain.d.ts +8 -1
  63. package/dist/_dts/media-editor/src/MediaEditor.d.ts +3 -2
  64. package/dist/_dts/media-react/src/components/MediaLibrary.d.ts +2 -1
  65. package/dist/_dts/media-react/src/components/MediaPickerMini.d.ts +2 -1
  66. package/dist/_dts/preview-next/src/client/blocks/previewCustomizeActions.d.ts +17 -0
  67. package/dist/_dts/preview-next/src/client/preview/PageDesignEditorStateContext.d.ts +4 -0
  68. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +3 -2
  69. package/dist/_dts/preview-next/src/client/preview/previewCustomizeHistory.d.ts +6 -0
  70. package/dist/_dts/sdk/src/cli/navigationIdentity.d.ts +11 -0
  71. package/dist/_dts/sdk/src/cli/site-commands/navigationCommands.d.ts +4 -0
  72. package/dist/_dts/sdk/src/cli/site-commands/oneOffCommands.d.ts +1 -0
  73. package/dist/_dts/sdk/src/cli/sync/diff.d.ts +9 -0
  74. package/dist/_dts/sdk/src/client/management/types.d.ts +2 -0
  75. package/dist/_dts/sdk/src/config/field-definitions.d.ts +3 -1
  76. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  77. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +19 -2
  78. package/dist/_dts/sdk/src/next/index.d.ts +1 -1
  79. package/dist/_dts/sdk/src/next/revalidate.d.ts +26 -5
  80. package/dist/_dts/sdk/src/next/static-params.d.ts +28 -3
  81. package/dist/_dts/sdk/src/public-api/contracts.d.ts +5 -1
  82. package/dist/_dts/sdk/src/public-api/runtime.d.ts +1 -1
  83. package/dist/_dts/sdk/src/version.d.ts +1 -1
  84. package/dist/_dts/sdk/src/webhooks/index.d.ts +1 -1
  85. package/dist/_dts/sdk/src/webhooks/verify.d.ts +6 -102
  86. package/dist/_dts/site-commands/src/commands.d.ts +3 -0
  87. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  88. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +3 -3
  89. package/dist/_dts/theme-core/src/schema.d.ts +5 -5
  90. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +25 -2
  91. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +5 -5
  92. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
  93. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +4 -4
  94. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +2 -0
  95. package/dist/_dts/ui/src/combobox.d.ts +1 -0
  96. package/dist/{chunk-RGTOD4AJ.mjs → chunk-4HCW7FHJ.mjs} +491 -56
  97. package/dist/{chunk-OKMBEAXY.mjs → chunk-A3HHFKVT.mjs} +1 -1
  98. package/dist/{chunk-6HYXHRAI.mjs → chunk-GP555I66.mjs} +177 -7
  99. package/dist/{chunk-CR5HKAGU.mjs → chunk-K2IIF34C.mjs} +55 -0
  100. package/dist/{chunk-4QEGTLK6.mjs → chunk-LCY32PXF.mjs} +1 -1
  101. package/dist/{chunk-MCRQMPET.mjs → chunk-V47ZU33I.mjs} +1745 -157
  102. package/dist/cli/index.mjs +1169 -171
  103. package/dist/cli/init-docs/content/workflow-editor-workflows.md +2 -0
  104. package/dist/cli/init-docs/content/workflow-isr-revalidation.md +138 -0
  105. package/dist/client/{accordion-PLYNJIIM.mjs → accordion-QLA7KBYO.mjs} +1 -1
  106. package/dist/client/{bookingForm-BXAP6AO7.mjs → bookingForm-PYZIPA5G.mjs} +3 -3
  107. package/dist/client/bookings.mjs +110 -2
  108. package/dist/client/{carousel-TRBXDHGF.mjs → carousel-5EIULWBI.mjs} +2 -2
  109. package/dist/client/{cart-Z7H3HJRS.mjs → cart-DOP3FNI4.mjs} +5 -5
  110. package/dist/client/{checkout-WAFCUBIX.mjs → checkout-BVMF6FBV.mjs} +5 -5
  111. package/dist/client/{chunk-JRDUHZCT.mjs → chunk-44K2U3QI.mjs} +4 -4
  112. package/dist/client/{chunk-UVQEJJTN.mjs → chunk-CCNTDRCF.mjs} +1 -1
  113. package/dist/client/{chunk-ZI3LLBPZ.mjs → chunk-GG4M2NP6.mjs} +1 -1
  114. package/dist/client/{chunk-JGXPTEI2.mjs → chunk-R5ESWNKX.mjs} +6 -3
  115. package/dist/client/{chunk-CWGTG37I.mjs → chunk-TYONZMST.mjs} +1 -1
  116. package/dist/client/{chunk-75OUS5MT.mjs → chunk-UDS3NTWA.mjs} +1 -1
  117. package/dist/client/{chunk-DNRGY432.mjs → chunk-V6M5FCR5.mjs} +1 -1
  118. package/dist/client/{chunk-FUXW6VW2.mjs → chunk-YLDYVRZL.mjs} +4 -4
  119. package/dist/client/client.mjs +21329 -19729
  120. package/dist/client/{courseRegistration-AHFQHWIJ.mjs → courseRegistration-E6EAA6NL.mjs} +3 -3
  121. package/dist/client/{eventCalendar-LDXTV5R7.mjs → eventCalendar-HBG3HAK6.mjs} +5 -5
  122. package/dist/client/{eventCombined-A4JGTNJO.mjs → eventCombined-6K5ZZWAK.mjs} +5 -5
  123. package/dist/client/{eventDetails-4YXTZ7EG.mjs → eventDetails-Q75ICXLT.mjs} +5 -5
  124. package/dist/client/{eventListing-P72TPFFM.mjs → eventListing-27P5F7DZ.mjs} +5 -5
  125. package/dist/client/{eventRegistration-LSYJHGMT.mjs → eventRegistration-IQ7AMASR.mjs} +5 -5
  126. package/dist/client/{form-AOPYOKOW.mjs → form-JRTD65FN.mjs} +1 -1
  127. package/dist/client/{headerSection-5TFYDFVQ.mjs → headerSection-7FPSSZHS.mjs} +2 -2
  128. package/dist/client/hooks.mjs +350 -35
  129. package/dist/client/{locationMap-QSZ3ZVAZ.mjs → locationMap-7NGFNYBH.mjs} +1 -1
  130. package/dist/client/{newsletterForm-KTRHZY52.mjs → newsletterForm-F3BADCI2.mjs} +1 -1
  131. package/dist/client/{productDetail-N4E775RG.mjs → productDetail-V3HP7ITJ.mjs} +5 -5
  132. package/dist/client/{productList-UGUQ2S45.mjs → productList-L3EGJUF2.mjs} +5 -5
  133. package/dist/client/rendering/client.mjs +2713 -1382
  134. package/dist/client/rendering/islands.mjs +18 -18
  135. package/dist/client/rendering.mjs +2014 -414
  136. package/dist/client/{shop-VHSZEEQ2.mjs → shop-DQUB5E2C.mjs} +5 -5
  137. package/dist/preview-next/before-render.mjs +55 -0
  138. package/dist/preview-next/client/runtime.mjs +5 -5
  139. package/dist/preview-next/middleware.mjs +55 -0
  140. package/dist/{sdk-runtime-WHPJEF5G.mjs → sdk-runtime-AF6KXJU4.mjs} +6 -6
  141. package/dist/server/components.mjs +2169 -781
  142. package/dist/server/config-validation.mjs +350 -35
  143. package/dist/server/config.mjs +350 -35
  144. package/dist/server/data.mjs +350 -35
  145. package/dist/server/index.mjs +64 -1
  146. package/dist/server/next/revalidate.mjs +229 -34
  147. package/dist/server/next.mjs +2307 -818
  148. package/dist/server/page-converter.mjs +275 -34
  149. package/dist/server/prebuild.mjs +1 -1
  150. package/dist/server/rendering/server.mjs +2174 -786
  151. package/dist/server/rendering.mjs +2187 -799
  152. package/dist/server/routing.mjs +767 -50
  153. package/dist/server/server.mjs +351 -36
  154. package/dist/server/theme-bridge.mjs +164 -2
  155. package/dist/server/theme.mjs +2 -2
  156. package/dist/server/webhooks.mjs +129 -25
  157. package/dist/styles/index.css +55 -0
  158. package/package.json +2 -1
  159. package/dist/SdkPreviewModeRuntime-IJDHTW4W.mjs +0 -8
@@ -2204,6 +2204,46 @@ var ENDPOINT_DEFINITIONS = {
2204
2204
  auth: "user",
2205
2205
  responseKind: "json"
2206
2206
  },
2207
+ getSiteIconStyleGuide: {
2208
+ path: "/sites/{siteId}/settings/icon-style-guide",
2209
+ method: "GET",
2210
+ revalidate: 120,
2211
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2212
+ auth: "user",
2213
+ responseKind: "json",
2214
+ errors: []
2215
+ },
2216
+ updateSiteIconStyleGuide: {
2217
+ path: "/sites/{siteId}/settings/icon-style-guide",
2218
+ method: "POST",
2219
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2220
+ auth: "user",
2221
+ responseKind: "json",
2222
+ errors: []
2223
+ },
2224
+ regenerateSiteIconStyleGuide: {
2225
+ path: "/sites/{siteId}/settings/icon-style-guide/regenerate",
2226
+ method: "POST",
2227
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2228
+ auth: "user",
2229
+ responseKind: "json",
2230
+ errors: []
2231
+ },
2232
+ generateGeneratedIconSet: {
2233
+ path: "/sites/{siteId}/ai/generated-icons/generate",
2234
+ method: "POST",
2235
+ auth: "user",
2236
+ responseKind: "json",
2237
+ errors: []
2238
+ },
2239
+ applyGeneratedIconSet: {
2240
+ path: "/sites/{siteId}/ai/generated-icons/apply",
2241
+ method: "POST",
2242
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2243
+ auth: "user",
2244
+ responseKind: "json",
2245
+ errors: []
2246
+ },
2207
2247
  getSiteAiProfile: {
2208
2248
  path: "/sites/{siteId}/settings/ai-site-profile",
2209
2249
  method: "GET",
@@ -3979,6 +4019,14 @@ var ENDPOINT_DEFINITIONS = {
3979
4019
  auth: "public",
3980
4020
  responseKind: "json"
3981
4021
  },
4022
+ getGeneratedIconRenderAssets: {
4023
+ path: "/public/sites/{siteId}/generated-icon-assets",
4024
+ method: "POST",
4025
+ tags: [TAG_TEMPLATES.siteRoutableContent],
4026
+ auth: "public",
4027
+ responseKind: "json",
4028
+ errors: []
4029
+ },
3982
4030
  // Resolve entry subroute by kind and URL segment
3983
4031
  resolveEntrySubroute: {
3984
4032
  path: "/public/sites/{siteId}/routing/subroutes/resolve",
@@ -5683,6 +5731,13 @@ var ENDPOINT_DEFINITIONS = {
5683
5731
  auth: "service",
5684
5732
  responseKind: "json"
5685
5733
  },
5734
+ sdkDeleteNavigationMenu: {
5735
+ path: "/sdk/{siteId}/navigation/{menuId}",
5736
+ method: "DELETE",
5737
+ auth: "service",
5738
+ responseKind: "json",
5739
+ errors: ["resource:not_found", "server:internal_error"]
5740
+ },
5686
5741
  sdkUpsertTheme: {
5687
5742
  path: "/sdk/{siteId}/theme",
5688
5743
  method: "POST",
@@ -6869,7 +6924,7 @@ var SimpleCache = class {
6869
6924
  };
6870
6925
 
6871
6926
  // src/version.ts
6872
- var SDK_VERSION = "0.78.2";
6927
+ var SDK_VERSION = "0.79.0";
6873
6928
 
6874
6929
  // src/client/error.ts
6875
6930
  var RiverbankApiError = class _RiverbankApiError extends Error {
@@ -8339,6 +8394,20 @@ var managedDomainAddOnPricingSnapshotSchema = z.object({
8339
8394
  monthlyCurrency: z.literal("gbp")
8340
8395
  });
8341
8396
 
8397
+ // ../api/src/media.ts
8398
+ var AMBIENT_BACKGROUND_ROLES = [
8399
+ "light-texture",
8400
+ "proof-band-dark",
8401
+ "cta-wash",
8402
+ "footer-detail",
8403
+ "style-atmosphere-1",
8404
+ "style-atmosphere-2"
8405
+ ];
8406
+ var SITE_BACKGROUND_ASSET_USES = [
8407
+ "selected-background",
8408
+ ...AMBIENT_BACKGROUND_ROLES
8409
+ ];
8410
+
8342
8411
  // ../api/src/navigation/contracts.ts
8343
8412
  import { z as z2 } from "zod";
8344
8413
  var portalLinkPayloadSchema = z2.object({
@@ -8672,6 +8741,9 @@ function resolveRepeaterGridColumnFieldId(options) {
8672
8741
  return asNonEmptyString(options?.id) ?? DEFAULT_REPEATER_GRID_COLUMN_FIELD_ID;
8673
8742
  }
8674
8743
 
8744
+ // ../blocks/src/system/icons/presets.ts
8745
+ var ICON_PICKER_PRESETS = ["cta", "feature"];
8746
+
8675
8747
  // ../blocks/src/system/manifest/schema.ts
8676
8748
  var visibilityLevels = ["admin", "designer", "author"];
8677
8749
  var MEDIA_KINDS = [
@@ -8830,7 +8902,7 @@ var uiSchema = z4.object({
8830
8902
  layoutGridColumnField: z4.string().optional(),
8831
8903
  layoutGridMaxRows: z4.number().int().positive().optional(),
8832
8904
  // Icon picker configuration (used when ui.widget === 'iconPicker')
8833
- iconPickerPreset: z4.enum(["cta"]).optional(),
8905
+ iconPickerPreset: z4.enum(ICON_PICKER_PRESETS).optional(),
8834
8906
  // Entry picker configuration
8835
8907
  contentTypeField: z4.string().optional(),
8836
8908
  fixedContentType: z4.string().optional(),
@@ -10496,7 +10568,7 @@ var themeColorBaseTokenNames = [
10496
10568
  "accentForeground"
10497
10569
  ];
10498
10570
  var themeColorBaseTokenSet = new Set(themeColorBaseTokenNames);
10499
- var SHADE_STEPS = [
10571
+ var themeColorShadeSteps = [
10500
10572
  "50",
10501
10573
  "100",
10502
10574
  "200",
@@ -10509,7 +10581,7 @@ var SHADE_STEPS = [
10509
10581
  "900",
10510
10582
  "950"
10511
10583
  ];
10512
- var shadeStepSet = new Set(SHADE_STEPS);
10584
+ var shadeStepSet = new Set(themeColorShadeSteps);
10513
10585
  function isKnownBaseToken(value) {
10514
10586
  return themeColorBaseTokenSet.has(value);
10515
10587
  }
@@ -14210,6 +14282,7 @@ var curatedSiteStyleIdValues = [
14210
14282
  "site-style:personal-retreat-journal",
14211
14283
  "site-style:tactile-workshop",
14212
14284
  "site-style:modern-wellness",
14285
+ "site-style:clarity-zen-blue",
14213
14286
  SOFT_EARTH_SITE_STYLE_ID_VALUE,
14214
14287
  "site-style:bold-launch",
14215
14288
  "site-style:south-west-twerk-school"
@@ -14795,6 +14868,114 @@ var curatedSiteStyles = [
14795
14868
  paletteChoice("warm-neutral-clay")
14796
14869
  ]
14797
14870
  }),
14871
+ defineCuratedSiteStyle({
14872
+ id: "site-style:clarity-zen-blue",
14873
+ name: "Clarity Zen",
14874
+ description: "Calm, editorial, and reassuring for therapy, counselling, and wellbeing support practices.",
14875
+ generationBrief: "Use a calm, soft palette, editorial serif headings, warm grounded copy, rounded cards, calm proof sections, and clear booking routes. Keep the tone compassionate and straightforward, with professional trust rather than hard-sell wellness language.",
14876
+ siteCreatorSelection: {
14877
+ kind: "site_creator_keyword_heuristic",
14878
+ priority: 25
14879
+ },
14880
+ selectionKeywordRules: [
14881
+ { kind: "substring", value: "psychotherap" },
14882
+ { kind: "phrase", value: "mental health" },
14883
+ { kind: "phrase", value: "talk therapy" },
14884
+ { kind: "phrase", value: "therapy and wellbeing" }
14885
+ ],
14886
+ tokenRecipes: {
14887
+ palette: "brand-led",
14888
+ contrast: "standard",
14889
+ radius: "rounded",
14890
+ shadow: "subtle",
14891
+ typography: "serif-editorial",
14892
+ spacing: "airy",
14893
+ motion: "subtle"
14894
+ },
14895
+ compositionBudget: balancedBudget,
14896
+ themeOverrides: {
14897
+ typography: {
14898
+ body: {
14899
+ family: "Inter, system-ui, sans-serif",
14900
+ size: "md",
14901
+ weight: "regular",
14902
+ lineHeight: "relaxed",
14903
+ letterSpacing: "normal"
14904
+ },
14905
+ headings: {
14906
+ default: {
14907
+ family: '"Cormorant Garamond", Georgia, serif',
14908
+ weight: "regular",
14909
+ lineHeight: "normal",
14910
+ letterSpacing: "normal",
14911
+ colorToken: "text",
14912
+ italic: null,
14913
+ case: null
14914
+ },
14915
+ h1: {
14916
+ size: "xl",
14917
+ weight: "regular",
14918
+ lineHeight: "normal",
14919
+ letterSpacing: "normal",
14920
+ italic: null
14921
+ },
14922
+ h2: {
14923
+ size: "lg",
14924
+ weight: "regular",
14925
+ lineHeight: "normal",
14926
+ letterSpacing: "normal",
14927
+ italic: null
14928
+ },
14929
+ h3: {
14930
+ size: "md",
14931
+ weight: "regular",
14932
+ lineHeight: "normal",
14933
+ letterSpacing: "normal",
14934
+ italic: null
14935
+ }
14936
+ },
14937
+ scale: "majorThird"
14938
+ },
14939
+ bodyText: {
14940
+ intro: {
14941
+ paragraphSize: "default",
14942
+ headingSize: "editorial"
14943
+ }
14944
+ }
14945
+ },
14946
+ defaultBlockVariants: {
14947
+ "block.faq": "split-heading-columns"
14948
+ },
14949
+ recommendedAppearancePresetIds: [
14950
+ "hero-split-editorial",
14951
+ "intro-organic-statement",
14952
+ "feature-cards-raised-rule",
14953
+ "media-text-quiet-story",
14954
+ "testimonials-brand-background-quotes",
14955
+ "faq-contained-help",
14956
+ "contact-form-panel"
14957
+ ],
14958
+ recommendedHeaderLookIds: [
14959
+ "centered-calm",
14960
+ "serif-line",
14961
+ "minimal-transparent"
14962
+ ],
14963
+ recommendedFooterLookIds: [
14964
+ "footer-muted-grounding",
14965
+ "site-footer-brand-two-band"
14966
+ ],
14967
+ buttonPersonalityChoices: [
14968
+ buttonChoice("soft-pill"),
14969
+ buttonChoice("pebble"),
14970
+ buttonChoice("editorial-link")
14971
+ ],
14972
+ paletteVariantChoices: [
14973
+ paletteChoice("brand-led-cool"),
14974
+ paletteChoice("soft-natural-watercolor"),
14975
+ paletteChoice("soft-natural-stone"),
14976
+ paletteChoice("warm-neutral-cream")
14977
+ ]
14978
+ }),
14798
14979
  defineCuratedSiteStyle({
14799
14980
  id: "site-style:personal-retreat-journal",
14800
14981
  name: "Personal Retreat Journal",
@@ -18869,36 +19050,46 @@ function buildCarouselLayout() {
18869
19050
  [buildTestimonialCard(repeat("data.entries", "testimonial"))]
18870
19051
  );
18871
19052
  }
19053
+ function buildResponsiveGridCards() {
19054
+ return [
19055
+ // 2 columns
19056
+ grid(
19057
+ { gap: "lg", cols: { base: 1, sm: 2 } },
19058
+ [buildTestimonialCard(repeat("data.entries", "testimonial"))],
19059
+ when("gridColumns", { equals: "2" })
19060
+ ),
19061
+ // 3 columns (default when unset)
19062
+ grid(
19063
+ { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
19064
+ [buildTestimonialCard(repeat("data.entries", "testimonial"))],
19065
+ when("gridColumns", { equals: "3" })
19066
+ ),
19067
+ // 4 columns
19068
+ grid(
19069
+ { gap: "lg", cols: { base: 1, sm: 2, lg: 3, xl: 4 } },
19070
+ [buildTestimonialCard(repeat("data.entries", "testimonial"))],
19071
+ when("gridColumns", { equals: "4" })
19072
+ ),
19073
+ // Fallback to 3 columns when gridColumns is not set
19074
+ grid(
19075
+ { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
19076
+ [buildTestimonialCard(repeat("data.entries", "testimonial"))],
19077
+ when("gridColumns", { not: true })
19078
+ )
19079
+ ];
19080
+ }
18872
19081
  function buildGridLayout() {
18873
19082
  return el(
18874
19083
  "div",
18875
19084
  { className: "rb-mt-12 rb-testimonials-carousel" },
18876
- [
18877
- // 2 columns
18878
- grid(
18879
- { gap: "lg", cols: { base: 1, sm: 2 } },
18880
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
18881
- when("gridColumns", { equals: "2" })
18882
- ),
18883
- // 3 columns (default when unset)
18884
- grid(
18885
- { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
18886
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
18887
- when("gridColumns", { equals: "3" })
18888
- ),
18889
- // 4 columns
18890
- grid(
18891
- { gap: "lg", cols: { base: 1, sm: 2, lg: 3, xl: 4 } },
18892
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
18893
- when("gridColumns", { equals: "4" })
18894
- ),
18895
- // Fallback to 3 columns when gridColumns is not set
18896
- grid(
18897
- { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
18898
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
18899
- when("gridColumns", { not: true })
18900
- )
18901
- ]
19085
+ buildResponsiveGridCards()
19086
+ );
19087
+ }
19088
+ function buildGridCardsLayout(className) {
19089
+ return el(
19090
+ "div",
19091
+ { className },
19092
+ buildResponsiveGridCards()
18902
19093
  );
18903
19094
  }
18904
19095
  var testimonialsCarouselFragment = defineFragment({
@@ -21867,6 +22058,24 @@ var questionColumnsLayout = styledSection({
21867
22058
  }),
21868
22059
  baseClass: ""
21869
22060
  });
22061
+ var splitHeadingColumnsLayout = styledSection({
22062
+ children: styledContainer({
22063
+ baseClassName: "rb-relative rb-isolate",
22064
+ children: el(
22065
+ "div",
22066
+ {
22067
+ className: "rb-faq-split-heading-columns rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
22068
+ },
22069
+ [
22070
+ el("div", { className: "rb-faq-split-heading-columns-copy" }, [headingLayout]),
22071
+ el("div", { className: "rb-faq-split-heading-columns-accordion" }, [
22072
+ questionColumnsAccordionLayout
22073
+ ])
22074
+ ]
22075
+ )
22076
+ }),
22077
+ baseClass: ""
22078
+ });
21870
22079
  var faqManifest = createBlockManifest({
21871
22080
  id: "block.faq",
21872
22081
  title: "FAQ",
@@ -21887,7 +22096,8 @@ var faqManifest = createBlockManifest({
21887
22096
  variants: {
21888
22097
  default: defaultLayout,
21889
22098
  "two-column": twoColumnLayout,
21890
- "question-columns": questionColumnsLayout
22099
+ "question-columns": questionColumnsLayout,
22100
+ "split-heading-columns": splitHeadingColumnsLayout
21891
22101
  },
21892
22102
  defaultVariant: "default",
21893
22103
  variantOptions: {
@@ -21902,6 +22112,10 @@ var faqManifest = createBlockManifest({
21902
22112
  "question-columns": {
21903
22113
  label: "Question columns",
21904
22114
  description: "A full-width heading above FAQ items split into two columns."
22115
+ },
22116
+ "split-heading-columns": {
22117
+ label: "Split heading columns",
22118
+ description: "A left heading column with FAQ items split into two columns on the right."
21905
22119
  }
21906
22120
  },
21907
22121
  description: "Accordion of frequently asked questions and answers.",
@@ -23986,6 +24200,7 @@ var siteFooterBlockDefinition = {
23986
24200
  };
23987
24201
 
23988
24202
  // ../blocks/src/system/blocks/testimonials.tsx
24203
+ var backgroundImageClassName = "rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-object-cover rb-opacity-50";
23989
24204
  var wrapVariant = (variantLayout) => styledSection({
23990
24205
  children: styledContainer({
23991
24206
  children: stack(
@@ -23999,10 +24214,53 @@ var wrapVariant = (variantLayout) => styledSection({
23999
24214
  // styledContainer (rb-container) already provides horizontal padding
24000
24215
  baseClass: "",
24001
24216
  spacing: "comfortable",
24002
- imageClassName: "rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-object-cover rb-opacity-50"
24217
+ imageClassName: backgroundImageClassName
24003
24218
  });
24004
24219
  var carouselLayout = wrapVariant(buildCarouselLayout());
24005
24220
  var gridLayout2 = wrapVariant(buildGridLayout());
24221
+ var splitHeading = stack(
24222
+ { gap: "md", className: "rb-testimonials-split-heading-copy rb-max-w-xl" },
24223
+ [
24224
+ text(
24225
+ { as: "h2" },
24226
+ when("content.heading"),
24227
+ bind("content.heading")
24228
+ ),
24229
+ headingDecoration({
24230
+ family: "short-center-rule",
24231
+ placement: "after-heading"
24232
+ }),
24233
+ text(
24234
+ {
24235
+ as: "p",
24236
+ className: "rb-prose",
24237
+ style: textColorStyle("mutedText")
24238
+ },
24239
+ when("content.subheading"),
24240
+ bind("content.subheading")
24241
+ )
24242
+ ]
24243
+ );
24244
+ var splitGridLayout = styledSection({
24245
+ children: styledContainer({
24246
+ baseClassName: "rb-relative rb-isolate",
24247
+ children: el(
24248
+ "div",
24249
+ {
24250
+ className: "rb-testimonials-split-grid rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
24251
+ },
24252
+ [
24253
+ el("div", { className: "rb-testimonials-split-grid-heading" }, [splitHeading]),
24254
+ el("div", { className: "rb-testimonials-split-grid-cards" }, [
24255
+ buildGridCardsLayout("rb-testimonials-split-grid-card-list")
24256
+ ])
24257
+ ]
24258
+ )
24259
+ }),
24260
+ baseClass: "",
24261
+ spacing: "comfortable",
24262
+ imageClassName: backgroundImageClassName
24263
+ });
24006
24264
  var additionalFields = parseFieldDefinitions([
24007
24265
  // Heading fields from fragment
24008
24266
  ...testimonialsHeadingFragment.fields,
@@ -24034,7 +24292,7 @@ var additionalFields = parseFieldDefinitions([
24034
24292
  ],
24035
24293
  ui: {
24036
24294
  intent: "display",
24037
- visibleWhen: { field: "variant", equals: "grid" }
24295
+ visibleWhen: { field: "variant", oneOf: ["grid", "split-grid"] }
24038
24296
  }
24039
24297
  },
24040
24298
  // Carousel-specific fields (from fragment)
@@ -24068,7 +24326,8 @@ var testimonialsManifest = createBlockManifest({
24068
24326
  // Variant system - enables the variant switcher control in the editor
24069
24327
  variants: {
24070
24328
  carousel: carouselLayout,
24071
- grid: gridLayout2
24329
+ grid: gridLayout2,
24330
+ "split-grid": splitGridLayout
24072
24331
  },
24073
24332
  defaultVariant: "carousel",
24074
24333
  variantOptions: {
@@ -24081,6 +24340,11 @@ var testimonialsManifest = createBlockManifest({
24081
24340
  label: "Grid",
24082
24341
  description: "Responsive grid layout",
24083
24342
  icon: "Grid"
24343
+ },
24344
+ "split-grid": {
24345
+ label: "Split grid",
24346
+ description: "Heading on the left with testimonial cards on the right",
24347
+ icon: "PanelLeft"
24084
24348
  }
24085
24349
  },
24086
24350
  // Fields (variant field is auto-generated by augmentManifest)
@@ -24473,6 +24737,13 @@ var collectionBlockDefinition = {
24473
24737
  manifest: collectionManifest
24474
24738
  };
24475
24739
 
24740
+ // ../blocks/src/system/blocks/feature-card-icons.ts
24741
+ var FEATURE_CARD_ICON_TREATMENTS = [
24742
+ "plain",
24743
+ "soft-badge",
24744
+ "utility-badge"
24745
+ ];
24746
+
24476
24747
  // ../blocks/src/system/blocks/feature-cards.ts
24477
24748
  function grid3(props2, children) {
24478
24749
  return el("grid", props2 ?? void 0, children ?? void 0);
@@ -24515,6 +24786,15 @@ var featureCard = styledCard(
24515
24786
  bind("card.media")
24516
24787
  ),
24517
24788
  stack({ gap: "sm", className: "rb-feature-card-content rb-flex-1 rb-p-6" }, [
24789
+ el(
24790
+ "feature-card-icon",
24791
+ {
24792
+ treatment: { $bind: { from: "content._iconTreatment", fallback: "soft-badge" } },
24793
+ generatedAssets: { $bind: { from: "data.generatedIconAssets" } }
24794
+ },
24795
+ null,
24796
+ bind("card.icon")
24797
+ ),
24518
24798
  text(
24519
24799
  {
24520
24800
  as: "h3",
@@ -24636,6 +24916,16 @@ var featureCardsConfig = {
24636
24916
  defaultValue: "4/3",
24637
24917
  visibleWhen: { field: "media", notEquals: null }
24638
24918
  }),
24919
+ {
24920
+ id: "icon",
24921
+ type: "text",
24922
+ label: "Icon",
24923
+ required: false,
24924
+ ui: {
24925
+ widget: "iconPicker",
24926
+ iconPickerPreset: "feature"
24927
+ }
24928
+ },
24639
24929
  {
24640
24930
  id: "title",
24641
24931
  type: "text",
@@ -24671,6 +24961,19 @@ var featureCardsConfig = {
24671
24961
  ]
24672
24962
  }
24673
24963
  },
24964
+ {
24965
+ id: "_iconTreatment",
24966
+ type: "select",
24967
+ label: "Icon style",
24968
+ required: false,
24969
+ defaultValue: "soft-badge",
24970
+ multiple: false,
24971
+ options: FEATURE_CARD_ICON_TREATMENTS.map((value) => ({
24972
+ value,
24973
+ label: value === "plain" ? "Plain" : value === "soft-badge" ? "Soft badge" : "Utility badge"
24974
+ })),
24975
+ ui: { intent: "display" }
24976
+ },
24674
24977
  cardStylesField({
24675
24978
  id: "_cardStyles",
24676
24979
  label: "Card styles"
@@ -32488,7 +32791,8 @@ var systemBlockDefinitionsRaw = [
32488
32791
  layoutProfiles: [
32489
32792
  layoutProfile({ variantKey: "default", family: "stack", weight: "standard" }),
32490
32793
  layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" }),
32491
- layoutProfile({ variantKey: "question-columns", family: "grid", weight: "standard" })
32794
+ layoutProfile({ variantKey: "question-columns", family: "grid", weight: "standard" }),
32795
+ layoutProfile({ variantKey: "split-heading-columns", family: "split", weight: "standard" })
32492
32796
  ]
32493
32797
  })),
32494
32798
  withDesignCapability("block.site-header", siteHeaderBlockDefinition, declareNoBlockDesignCapability("site-chrome"), defineBlockDesignMetadata({
@@ -32519,6 +32823,12 @@ var systemBlockDefinitionsRaw = [
32519
32823
  family: "grid",
32520
32824
  weight: "standard",
32521
32825
  bias: "soft"
32826
+ }),
32827
+ layoutProfile({
32828
+ variantKey: "split-grid",
32829
+ family: "split",
32830
+ weight: "featured",
32831
+ bias: "soft"
32522
32832
  })
32523
32833
  ]
32524
32834
  })),
@@ -36555,7 +36865,6 @@ var websiteSurfaceIds = [
36555
36865
  "site.footerBlocks",
36556
36866
  "site.navigation",
36557
36867
  "site.media",
36558
- "site.style",
36559
36868
  "site.performance"
36560
36869
  ];
36561
36870
  var websiteSurfaceIdSet = new Set(
@@ -36576,6 +36885,12 @@ var hiddenDemoSettingsNavSurfaceIds = [
36576
36885
  ];
36577
36886
  var hiddenDemoSettingsNavIds = new Set(hiddenDemoSettingsNavSurfaceIds);
36578
36887
 
36888
+ // ../api/src/navigation/identity.ts
36889
+ function unsafeAsNavigationMenuIdentifier(identifier) {
36890
+ return identifier;
36891
+ }
36892
+ var MAIN_NAVIGATION_MENU_IDENTIFIER = unsafeAsNavigationMenuIdentifier("main");
36893
+
36579
36894
  // ../api/src/aiPlayground.ts
36580
36895
  import { z as z67 } from "zod";
36581
36896
  var Rfc6902PatchOp = z67.discriminatedUnion("op", [