@riverbankcms/sdk 0.78.0 → 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 (222) hide show
  1. package/README.md +125 -43
  2. package/dist/{PreviewEditorSidebar-RIKFQ72L.mjs → PreviewEditorSidebar-56NMJMIK.mjs} +750 -65
  3. package/dist/{PreviewEditorUI-XO7TUWKK.mjs → PreviewEditorUI-27KJVEET.mjs} +4 -4
  4. package/dist/SdkPreviewModeRuntime-H4BSP6E7.mjs +8 -0
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +72 -0
  6. package/dist/_dts/api/src/contentRuntime.d.ts +1 -0
  7. package/dist/_dts/api/src/endpoints.d.ts +64 -0
  8. package/dist/_dts/api/src/index.d.ts +8 -6
  9. package/dist/_dts/api/src/media.d.ts +8 -1
  10. package/dist/_dts/api/src/navigation/dashboardSettingsNav.d.ts +1 -1
  11. package/dist/_dts/api/src/navigation/dashboardSiteNav.d.ts +8 -8
  12. package/dist/_dts/api/src/navigation/identity.d.ts +59 -0
  13. package/dist/_dts/api/src/navigation.d.ts +2 -0
  14. package/dist/_dts/api/src/public/types.d.ts +1 -1
  15. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +4 -0
  16. package/dist/_dts/api/src/request.d.ts +3 -11
  17. package/dist/_dts/api/src/sdkConfig/contracts.d.ts +1 -0
  18. package/dist/_dts/api/src/sdkContracts.d.ts +8 -1
  19. package/dist/_dts/api/src/siteIcons.d.ts +128 -0
  20. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +26 -0
  21. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +8 -0
  22. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +21 -20
  23. package/dist/_dts/api/src/types.d.ts +12 -27
  24. package/dist/_dts/api/src/webhooks.d.ts +239 -0
  25. package/dist/_dts/block-form/src/fields/types.d.ts +6 -0
  26. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterList.d.ts +3 -2
  27. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterRow.d.ts +6 -3
  28. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterRowActions.d.ts +8 -3
  29. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/index.d.ts +1 -1
  30. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useLinearRepeaterDnd.d.ts +1 -0
  31. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useRepeaterPointerDragCapability.d.ts +1 -0
  32. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useResolvedItemLabel.d.ts +7 -0
  33. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/buildSummary.d.ts +1 -0
  34. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/index.d.ts +3 -1
  35. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/repeaterDndDomain.d.ts +1 -1
  36. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/repeaterLabelSource.d.ts +15 -0
  37. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/repeaterRowActionsDomain.d.ts +50 -0
  38. package/dist/_dts/blocks/src/index.d.ts +4 -0
  39. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +879 -288
  40. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +879 -288
  41. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +879 -288
  42. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +879 -288
  43. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +879 -288
  44. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +885 -289
  45. package/dist/_dts/blocks/src/system/blocks/feature-card-icons.d.ts +57 -0
  46. package/dist/_dts/blocks/src/system/blocks/feature-cards.d.ts +4 -0
  47. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +879 -288
  48. package/dist/_dts/blocks/src/system/blocks/index.d.ts +1 -0
  49. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +3 -1
  50. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +69 -22
  51. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +879 -288
  52. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +879 -288
  53. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +879 -288
  54. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +3 -0
  55. package/dist/_dts/blocks/src/system/blocks/testimonials.d.ts +7 -1
  56. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +170 -0
  57. package/dist/_dts/blocks/src/system/fragments/library/testimonialsCarousel.d.ts +5 -0
  58. package/dist/_dts/blocks/src/system/helpers/resolveBackground.d.ts +3 -1
  59. package/dist/_dts/blocks/src/system/icons/ids.d.ts +13 -0
  60. package/dist/_dts/blocks/src/system/icons/index.d.ts +6 -0
  61. package/dist/_dts/blocks/src/system/icons/presets.d.ts +4 -0
  62. package/dist/_dts/blocks/src/system/icons/registry.d.ts +18 -0
  63. package/dist/_dts/blocks/src/system/icons/semantic.d.ts +239 -0
  64. package/dist/_dts/blocks/src/system/icons/value.d.ts +94 -0
  65. package/dist/_dts/blocks/src/system/index.d.ts +1 -0
  66. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +4 -1
  67. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +187 -0
  68. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.state.d.ts +1 -1
  69. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +1 -1
  70. package/dist/_dts/blocks/src/system/runtime/nodes/feature-card-icon.d.ts +13 -0
  71. package/dist/_dts/content-editor/src/index.d.ts +1 -1
  72. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +2 -2
  73. package/dist/_dts/content-model/src/content-types/schema.d.ts +14 -0
  74. package/dist/_dts/content-model/src/contentManifest.d.ts +3 -1
  75. package/dist/_dts/content-model/src/templates/bindingTypeCompatibility.d.ts +3 -1
  76. package/dist/_dts/content-model/src/templates/bindingValidation.d.ts +10 -4
  77. package/dist/_dts/content-model/src/templates/fieldPaths.d.ts +20 -0
  78. package/dist/_dts/content-model/src/templates/manifestAdapter.d.ts +5 -2
  79. package/dist/_dts/core/src/branded.d.ts +114 -85
  80. package/dist/_dts/core/src/csv-types.d.ts +2 -2
  81. package/dist/_dts/core/src/editor-state.d.ts +7 -7
  82. package/dist/_dts/core/src/participants.d.ts +2 -2
  83. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +202 -0
  84. package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +12 -1
  85. package/dist/_dts/editor-blocks/src/block-editor/BlockCardBody.d.ts +12 -1
  86. package/dist/_dts/editor-blocks/src/block-editor/BlockCardHeader.d.ts +12 -2
  87. package/dist/_dts/editor-blocks/src/block-editor/FeatureCardIconsPanel.d.ts +21 -0
  88. package/dist/_dts/editor-blocks/src/block-editor/GeneratedIconSetDialog.d.ts +40 -0
  89. package/dist/_dts/editor-blocks/src/block-editor/SortableBlockItem.d.ts +11 -1
  90. package/dist/_dts/editor-blocks/src/block-editor/featureCardIconActions.d.ts +82 -0
  91. package/dist/_dts/editor-blocks/src/blockPayload.d.ts +1 -1
  92. package/dist/_dts/editor-blocks/src/widgets/icon-picker/IconPickerField.d.ts +1 -1
  93. package/dist/_dts/media-core/src/fileDomain.d.ts +8 -1
  94. package/dist/_dts/media-editor/src/MediaEditor.d.ts +5 -2
  95. package/dist/_dts/media-editor/src/MediaPreview.d.ts +3 -1
  96. package/dist/_dts/media-editor/src/fieldUi.d.ts +5 -0
  97. package/dist/_dts/media-editor/src/index.d.ts +1 -1
  98. package/dist/_dts/media-react/src/components/MediaLibrary.d.ts +2 -1
  99. package/dist/_dts/media-react/src/components/MediaPickerMini.d.ts +2 -1
  100. package/dist/_dts/preview-next/src/client/blocks/previewCustomizeActions.d.ts +17 -0
  101. package/dist/_dts/preview-next/src/client/preview/PageDesignEditorStateContext.d.ts +4 -0
  102. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +3 -2
  103. package/dist/_dts/preview-next/src/client/preview/previewCustomizeHistory.d.ts +6 -0
  104. package/dist/_dts/sdk/src/cli/commands/push/consts.d.ts +1 -1
  105. package/dist/_dts/sdk/src/cli/commands/push/metadata.d.ts +2 -0
  106. package/dist/_dts/sdk/src/cli/commands/push/stale.d.ts +3 -3
  107. package/dist/_dts/sdk/src/cli/commands/push-execute.d.ts +7 -0
  108. package/dist/_dts/sdk/src/cli/commands/push.d.ts +2 -0
  109. package/dist/_dts/sdk/src/cli/content/reader.d.ts +13 -0
  110. package/dist/_dts/sdk/src/cli/content/writer.d.ts +2 -1
  111. package/dist/_dts/sdk/src/cli/helpers.d.ts +2 -0
  112. package/dist/_dts/sdk/src/cli/navigationIdentity.d.ts +11 -0
  113. package/dist/_dts/sdk/src/cli/site-commands/commandKeys.d.ts +6 -6
  114. package/dist/_dts/sdk/src/cli/site-commands/commandRuntime.d.ts +5 -0
  115. package/dist/_dts/sdk/src/cli/site-commands/commandSurfaceDispatch.d.ts +4 -0
  116. package/dist/_dts/sdk/src/cli/site-commands/navigationCommands.d.ts +4 -0
  117. package/dist/_dts/sdk/src/cli/site-commands/oneOffCommands.d.ts +1 -0
  118. package/dist/_dts/sdk/src/cli/site-commands/pageCommands.d.ts +5 -2
  119. package/dist/_dts/sdk/src/cli/site-commands/pushExecution.d.ts +10 -1
  120. package/dist/_dts/sdk/src/cli/site-commands/pushExecutionTypes.d.ts +1 -1
  121. package/dist/_dts/sdk/src/cli/sync/diff.d.ts +9 -0
  122. package/dist/_dts/sdk/src/client/management/types.d.ts +8 -0
  123. package/dist/_dts/sdk/src/client/types.d.ts +2 -2
  124. package/dist/_dts/sdk/src/config/content-types.d.ts +7 -0
  125. package/dist/_dts/sdk/src/config/field-definitions.d.ts +5 -1
  126. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  127. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +19 -2
  128. package/dist/_dts/sdk/src/next/index.d.ts +1 -1
  129. package/dist/_dts/sdk/src/next/revalidate.d.ts +26 -5
  130. package/dist/_dts/sdk/src/next/static-params.d.ts +28 -3
  131. package/dist/_dts/sdk/src/public-api/contracts.d.ts +5 -1
  132. package/dist/_dts/sdk/src/public-api/runtime.d.ts +1 -1
  133. package/dist/_dts/sdk/src/version.d.ts +1 -1
  134. package/dist/_dts/sdk/src/webhooks/index.d.ts +1 -1
  135. package/dist/_dts/sdk/src/webhooks/verify.d.ts +6 -102
  136. package/dist/_dts/site-commands/src/commands.d.ts +6 -0
  137. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  138. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +3 -3
  139. package/dist/_dts/theme-core/src/schema.d.ts +5 -5
  140. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +25 -2
  141. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +5 -5
  142. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
  143. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +4 -4
  144. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +2 -0
  145. package/dist/_dts/ui/src/combobox.d.ts +1 -0
  146. package/dist/{altcha-B5XGSXP5.mjs → altcha-EKUEQ4RP.mjs} +1 -1
  147. package/dist/{chunk-F7RTCZYN.mjs → chunk-4HCW7FHJ.mjs} +504 -63
  148. package/dist/{chunk-SXOLGNMX.mjs → chunk-A3HHFKVT.mjs} +1 -1
  149. package/dist/{chunk-TXDES5P2.mjs → chunk-GP555I66.mjs} +180 -10
  150. package/dist/{chunk-SVMMM2NA.mjs → chunk-K2IIF34C.mjs} +79 -5
  151. package/dist/{chunk-NIDXI46P.mjs → chunk-LCY32PXF.mjs} +1 -1
  152. package/dist/{chunk-XGB3TDIC.mjs → chunk-R7POPVJR.mjs} +2 -8
  153. package/dist/{chunk-OECWLDHN.mjs → chunk-V47ZU33I.mjs} +2762 -732
  154. package/dist/cli/index.mjs +1799 -345
  155. package/dist/cli/init-docs/content/cli-reference.md +3 -2
  156. package/dist/cli/init-docs/content/content-management.md +2 -2
  157. package/dist/cli/init-docs/content/workflow-editor-workflows.md +2 -0
  158. package/dist/cli/init-docs/content/workflow-isr-revalidation.md +138 -0
  159. package/dist/cli/init-docs/content/workflow-preview-mode.md +68 -2
  160. package/dist/client/{accordion-EVDEOUPR.mjs → accordion-QLA7KBYO.mjs} +2 -2
  161. package/dist/client/analytics.mjs +1 -1
  162. package/dist/client/{bookingForm-DIHBLC64.mjs → bookingForm-PYZIPA5G.mjs} +55 -48
  163. package/dist/client/bookings.mjs +172 -57
  164. package/dist/client/{carousel-FEBQHIWI.mjs → carousel-5EIULWBI.mjs} +3 -3
  165. package/dist/client/{cart-7CKSXAE4.mjs → cart-DOP3FNI4.mjs} +7 -7
  166. package/dist/client/{checkout-WKYCANLV.mjs → checkout-BVMF6FBV.mjs} +7 -7
  167. package/dist/client/{chunk-GUK2FPXQ.mjs → chunk-44K2U3QI.mjs} +37 -15
  168. package/dist/client/{chunk-IVNCUVAV.mjs → chunk-AUJ5DBZJ.mjs} +18 -18
  169. package/dist/client/{chunk-VPPMNXCF.mjs → chunk-CCNTDRCF.mjs} +2 -2
  170. package/dist/client/{chunk-36WJCERQ.mjs → chunk-CE7IBGVW.mjs} +3 -1
  171. package/dist/client/{chunk-2SAVKN2M.mjs → chunk-GG4M2NP6.mjs} +2 -2
  172. package/dist/client/{chunk-65F47D7Y.mjs → chunk-R5ESWNKX.mjs} +49 -39
  173. package/dist/client/{chunk-RZDWX7QW.mjs → chunk-TYONZMST.mjs} +1 -1
  174. package/dist/client/{chunk-OFMSCGNY.mjs → chunk-UDS3NTWA.mjs} +2 -2
  175. package/dist/client/{chunk-YDSEG6GZ.mjs → chunk-V6M5FCR5.mjs} +2 -2
  176. package/dist/client/{chunk-F7LHOKEH.mjs → chunk-XSV6KW4D.mjs} +1 -1
  177. package/dist/client/{chunk-RV6FX7UH.mjs → chunk-YLDYVRZL.mjs} +9 -9
  178. package/dist/client/{chunk-PD6NBCEY.mjs → chunk-ZFHRN6W2.mjs} +1 -1
  179. package/dist/client/client.mjs +21501 -19812
  180. package/dist/client/{courseRegistration-5QF2PHKM.mjs → courseRegistration-E6EAA6NL.mjs} +10 -10
  181. package/dist/client/{eventCalendar-4ZOSETDU.mjs → eventCalendar-HBG3HAK6.mjs} +9 -9
  182. package/dist/client/{eventCombined-WQGU7JUX.mjs → eventCombined-6K5ZZWAK.mjs} +9 -9
  183. package/dist/client/{eventDetails-AYWVUJ5Y.mjs → eventDetails-Q75ICXLT.mjs} +9 -9
  184. package/dist/client/{eventListing-NT7C6UT5.mjs → eventListing-27P5F7DZ.mjs} +9 -9
  185. package/dist/client/{eventRegistration-OH24F4ZJ.mjs → eventRegistration-IQ7AMASR.mjs} +9 -9
  186. package/dist/client/{form-7L42SRBB.mjs → form-JRTD65FN.mjs} +6 -3
  187. package/dist/client/{headerSection-OZRZNZ52.mjs → headerSection-7FPSSZHS.mjs} +3 -3
  188. package/dist/client/hooks.mjs +428 -83
  189. package/dist/client/{locationMap-ZBXRPQ7C.mjs → locationMap-7NGFNYBH.mjs} +3 -3
  190. package/dist/client/{newsletterForm-SNAGFF2I.mjs → newsletterForm-F3BADCI2.mjs} +2 -2
  191. package/dist/client/{productDetail-I46BOFGV.mjs → productDetail-V3HP7ITJ.mjs} +7 -7
  192. package/dist/client/{productList-BOYHTYI6.mjs → productList-L3EGJUF2.mjs} +7 -7
  193. package/dist/client/rendering/client.mjs +2886 -1513
  194. package/dist/client/rendering/islands.mjs +19 -19
  195. package/dist/client/rendering.mjs +2244 -564
  196. package/dist/client/{shop-XTXPZTKR.mjs → shop-DQUB5E2C.mjs} +7 -7
  197. package/dist/preview-next/before-render.mjs +65 -1
  198. package/dist/preview-next/client/runtime.mjs +6 -6
  199. package/dist/preview-next/middleware.mjs +65 -1
  200. package/dist/preview-next/tailwind-sources.css +1 -0
  201. package/dist/sdk-runtime-AF6KXJU4.mjs +8 -0
  202. package/dist/server/components.mjs +2270 -835
  203. package/dist/server/config-template-validation.mjs +221 -15
  204. package/dist/server/config-validation.mjs +426 -77
  205. package/dist/server/config.mjs +426 -77
  206. package/dist/server/data.mjs +427 -82
  207. package/dist/server/index.mjs +94 -10
  208. package/dist/server/next/revalidate.mjs +229 -34
  209. package/dist/server/next.mjs +2439 -888
  210. package/dist/server/page-converter.mjs +335 -74
  211. package/dist/server/prebuild.mjs +1 -1
  212. package/dist/server/rendering/server.mjs +2281 -846
  213. package/dist/server/rendering.mjs +2298 -860
  214. package/dist/server/routing.mjs +860 -113
  215. package/dist/server/server.mjs +452 -92
  216. package/dist/server/theme-bridge.mjs +164 -2
  217. package/dist/server/theme.mjs +2 -2
  218. package/dist/server/webhooks.mjs +129 -25
  219. package/dist/styles/index.css +55 -0
  220. package/package.json +2 -1
  221. package/dist/SdkPreviewModeRuntime-LAGYMPNF.mjs +0 -8
  222. package/dist/sdk-runtime-ZJLKC6DR.mjs +0 -8
@@ -1803,7 +1803,16 @@ var ENDPOINT_DEFINITIONS = {
1803
1803
  revalidate: 60,
1804
1804
  tags: ["site-{siteId}", "content-{siteId}-{type}"],
1805
1805
  auth: "user",
1806
- responseKind: "json"
1806
+ responseKind: "json",
1807
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
1808
+ },
1809
+ reorderContentEntries: {
1810
+ path: "/sites/{siteId}/content/{type}/order",
1811
+ method: "POST",
1812
+ tags: ["site-{siteId}", "content-{siteId}-{type}"],
1813
+ auth: "user",
1814
+ responseKind: "json",
1815
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
1807
1816
  },
1808
1817
  getContentTemplate: {
1809
1818
  path: "/sites/{siteId}/content/types/{type}/template",
@@ -2195,6 +2204,46 @@ var ENDPOINT_DEFINITIONS = {
2195
2204
  auth: "user",
2196
2205
  responseKind: "json"
2197
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
+ },
2198
2247
  getSiteAiProfile: {
2199
2248
  path: "/sites/{siteId}/settings/ai-site-profile",
2200
2249
  method: "GET",
@@ -3970,6 +4019,14 @@ var ENDPOINT_DEFINITIONS = {
3970
4019
  auth: "public",
3971
4020
  responseKind: "json"
3972
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
+ },
3973
4030
  // Resolve entry subroute by kind and URL segment
3974
4031
  resolveEntrySubroute: {
3975
4032
  path: "/public/sites/{siteId}/routing/subroutes/resolve",
@@ -5674,6 +5731,13 @@ var ENDPOINT_DEFINITIONS = {
5674
5731
  auth: "service",
5675
5732
  responseKind: "json"
5676
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
+ },
5677
5741
  sdkUpsertTheme: {
5678
5742
  path: "/sdk/{siteId}/theme",
5679
5743
  method: "POST",
@@ -6416,18 +6480,21 @@ function buildEndpointURL(baseURL, endpoint) {
6416
6480
  function isFormDataBody(value) {
6417
6481
  return typeof FormData !== "undefined" && value instanceof FormData;
6418
6482
  }
6483
+ function isUnknownArray(value) {
6484
+ return Array.isArray(value);
6485
+ }
6419
6486
  function appendQueryParam(queryParams, key, value) {
6420
6487
  if (value === void 0 || value === null) {
6421
6488
  return;
6422
6489
  }
6423
- if (Array.isArray(value)) {
6490
+ if (isUnknownArray(value)) {
6424
6491
  const stack2 = [...value].reverse();
6425
6492
  while (stack2.length > 0) {
6426
6493
  const item = stack2.pop();
6427
6494
  if (item === void 0 || item === null) {
6428
6495
  continue;
6429
6496
  }
6430
- if (Array.isArray(item)) {
6497
+ if (isUnknownArray(item)) {
6431
6498
  stack2.push(...[...item].reverse());
6432
6499
  continue;
6433
6500
  }
@@ -6437,6 +6504,12 @@ function appendQueryParam(queryParams, key, value) {
6437
6504
  }
6438
6505
  queryParams.append(key, String(value));
6439
6506
  }
6507
+ function serializePathParam(endpoint, key, value) {
6508
+ if (typeof value === "string") {
6509
+ return value;
6510
+ }
6511
+ throw new Error(`Invalid path param for endpoint ${String(endpoint)}: ${key} must be a string`);
6512
+ }
6440
6513
  function invalidateCacheTags(tags2, params) {
6441
6514
  const resolved = getRevalidateTag();
6442
6515
  if (typeof window !== "undefined" || !resolved || !tags2) return;
@@ -6575,8 +6648,9 @@ function createRawCMSClient(headers = {}, baseUrl) {
6575
6648
  const bracePlaceholder = `{${key}}`;
6576
6649
  const colonPlaceholder = `:${key}`;
6577
6650
  if (originalPath.includes(bracePlaceholder) || originalPath.includes(colonPlaceholder)) {
6578
- url = url.replace(bracePlaceholder, value);
6579
- url = url.replace(colonPlaceholder, value);
6651
+ const stringValue = serializePathParam(endpoint, key, value);
6652
+ url = url.replace(bracePlaceholder, stringValue);
6653
+ url = url.replace(colonPlaceholder, stringValue);
6580
6654
  } else {
6581
6655
  unusedParams[key] = value;
6582
6656
  }
@@ -6850,7 +6924,7 @@ var SimpleCache = class {
6850
6924
  };
6851
6925
 
6852
6926
  // src/version.ts
6853
- var SDK_VERSION = "0.78.0";
6927
+ var SDK_VERSION = "0.79.0";
6854
6928
 
6855
6929
  // src/client/error.ts
6856
6930
  var RiverbankApiError = class _RiverbankApiError extends Error {
@@ -7263,9 +7337,10 @@ var CircuitOpenError = class extends Error {
7263
7337
  var prebuildModule = null;
7264
7338
  function tryRequire(modulePath) {
7265
7339
  try {
7266
- const req = Function(
7340
+ const getRequire = new Function(
7267
7341
  'return typeof require === "function" ? require : null'
7268
- )();
7342
+ );
7343
+ const req = getRequire();
7269
7344
  return req ? req(modulePath) : null;
7270
7345
  } catch {
7271
7346
  return null;
@@ -7778,8 +7853,7 @@ function createRiverbankClient(config) {
7778
7853
  async (sig) => {
7779
7854
  return await apiClient({
7780
7855
  endpoint: "getContentByPath",
7781
- params: { siteId },
7782
- body: { path, preview },
7856
+ params: { siteId, path, preview: String(preview) },
7783
7857
  options: { signal: sig }
7784
7858
  });
7785
7859
  },
@@ -7829,6 +7903,8 @@ function createRiverbankClient(config) {
7829
7903
  orderParam = "published_at.asc";
7830
7904
  } else if (order === "title") {
7831
7905
  orderParam = "title.asc";
7906
+ } else if (order === "manual") {
7907
+ orderParam = "manual.asc";
7832
7908
  }
7833
7909
  const apiParams = {
7834
7910
  siteId,
@@ -8318,6 +8394,20 @@ var managedDomainAddOnPricingSnapshotSchema = z.object({
8318
8394
  monthlyCurrency: z.literal("gbp")
8319
8395
  });
8320
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
+
8321
8411
  // ../api/src/navigation/contracts.ts
8322
8412
  import { z as z2 } from "zod";
8323
8413
  var portalLinkPayloadSchema = z2.object({
@@ -8529,14 +8619,14 @@ function rotateNormalizedPoint(point, rotation) {
8529
8619
  const x = point.x;
8530
8620
  const y = point.y;
8531
8621
  switch (rotation) {
8622
+ case 0:
8623
+ return { x, y };
8532
8624
  case 90:
8533
8625
  return { x: 1 - y, y: x };
8534
8626
  case 180:
8535
8627
  return { x: 1 - x, y: 1 - y };
8536
8628
  case 270:
8537
8629
  return { x: y, y: 1 - x };
8538
- default:
8539
- return { x, y };
8540
8630
  }
8541
8631
  }
8542
8632
 
@@ -8651,6 +8741,9 @@ function resolveRepeaterGridColumnFieldId(options) {
8651
8741
  return asNonEmptyString(options?.id) ?? DEFAULT_REPEATER_GRID_COLUMN_FIELD_ID;
8652
8742
  }
8653
8743
 
8744
+ // ../blocks/src/system/icons/presets.ts
8745
+ var ICON_PICKER_PRESETS = ["cta", "feature"];
8746
+
8654
8747
  // ../blocks/src/system/manifest/schema.ts
8655
8748
  var visibilityLevels = ["admin", "designer", "author"];
8656
8749
  var MEDIA_KINDS = [
@@ -8729,6 +8822,8 @@ var uiSchema = z4.object({
8729
8822
  mediaPickerAutoOpen: z4.boolean().optional(),
8730
8823
  showMediaPreview: z4.boolean().optional(),
8731
8824
  showMediaOverlayActions: z4.boolean().optional(),
8825
+ mediaPreviewMaxWidth: z4.enum(["xs", "sm", "md", "none"]).optional(),
8826
+ preventMediaPreviewUpscale: z4.boolean().optional(),
8732
8827
  mediaDelivery: mediaDeliverySchema.optional(),
8733
8828
  mediaDeliveryByVariant: z4.record(z4.string(), mediaDeliverySchema).optional(),
8734
8829
  // Optional input hints for validators/widgets
@@ -8807,7 +8902,7 @@ var uiSchema = z4.object({
8807
8902
  layoutGridColumnField: z4.string().optional(),
8808
8903
  layoutGridMaxRows: z4.number().int().positive().optional(),
8809
8904
  // Icon picker configuration (used when ui.widget === 'iconPicker')
8810
- iconPickerPreset: z4.enum(["cta"]).optional(),
8905
+ iconPickerPreset: z4.enum(ICON_PICKER_PRESETS).optional(),
8811
8906
  // Entry picker configuration
8812
8907
  contentTypeField: z4.string().optional(),
8813
8908
  fixedContentType: z4.string().optional(),
@@ -8978,6 +9073,9 @@ var repeaterFieldSchema = baseFieldSchema.extend({
8978
9073
  type: z4.literal("repeater"),
8979
9074
  itemLabel: z4.string().default("Item"),
8980
9075
  itemLabelSource: z4.string().optional(),
9076
+ showSummary: z4.boolean().optional(),
9077
+ summaryFields: z4.string().array().optional(),
9078
+ summaryMaxChars: z4.number().int().positive().optional(),
8981
9079
  minItems: z4.number().int().min(0).default(0),
8982
9080
  maxItems: z4.number().int().positive().optional(),
8983
9081
  // Monomorphic mode
@@ -10470,7 +10568,7 @@ var themeColorBaseTokenNames = [
10470
10568
  "accentForeground"
10471
10569
  ];
10472
10570
  var themeColorBaseTokenSet = new Set(themeColorBaseTokenNames);
10473
- var SHADE_STEPS = [
10571
+ var themeColorShadeSteps = [
10474
10572
  "50",
10475
10573
  "100",
10476
10574
  "200",
@@ -10483,7 +10581,7 @@ var SHADE_STEPS = [
10483
10581
  "900",
10484
10582
  "950"
10485
10583
  ];
10486
- var shadeStepSet = new Set(SHADE_STEPS);
10584
+ var shadeStepSet = new Set(themeColorShadeSteps);
10487
10585
  function isKnownBaseToken(value) {
10488
10586
  return themeColorBaseTokenSet.has(value);
10489
10587
  }
@@ -14184,6 +14282,7 @@ var curatedSiteStyleIdValues = [
14184
14282
  "site-style:personal-retreat-journal",
14185
14283
  "site-style:tactile-workshop",
14186
14284
  "site-style:modern-wellness",
14285
+ "site-style:clarity-zen-blue",
14187
14286
  SOFT_EARTH_SITE_STYLE_ID_VALUE,
14188
14287
  "site-style:bold-launch",
14189
14288
  "site-style:south-west-twerk-school"
@@ -14769,6 +14868,114 @@ var curatedSiteStyles = [
14769
14868
  paletteChoice("warm-neutral-clay")
14770
14869
  ]
14771
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
+ }),
14772
14979
  defineCuratedSiteStyle({
14773
14980
  id: "site-style:personal-retreat-journal",
14774
14981
  name: "Personal Retreat Journal",
@@ -18033,47 +18240,48 @@ function validateFieldDefinitions(fields3, fragmentId) {
18033
18240
  function prefixFieldId(field, scope) {
18034
18241
  const cloned = cloneFieldDefinition2(field);
18035
18242
  cloned.id = `${scope}.${field.id}`;
18036
- cloned.defaultValue = cloneUnknown(cloned.defaultValue);
18243
+ const defaultValue = cloned.defaultValue;
18244
+ cloned.defaultValue = cloneUnknown(defaultValue);
18037
18245
  cloned.visibleRoles = cloned.visibleRoles ? [...cloned.visibleRoles] : void 0;
18038
18246
  cloned.ui = cloneUnknown(cloned.ui);
18039
18247
  return cloned;
18040
18248
  }
18041
18249
  function cloneFieldDefinition2(field) {
18042
- switch (field.type) {
18043
- case "repeater":
18044
- if (field.polymorphic && field.itemTypes) {
18045
- return {
18046
- ...field,
18047
- polymorphic: true,
18048
- itemTypes: Object.fromEntries(
18049
- Object.entries(field.itemTypes).map(([key, itemType]) => [
18050
- key,
18051
- {
18052
- ...itemType,
18053
- fields: itemType.fields.map(cloneFieldDefinition2)
18054
- }
18055
- ])
18056
- )
18057
- };
18058
- } else if (field.schema) {
18059
- return {
18060
- ...field,
18061
- schema: {
18062
- fields: field.schema.fields.map(cloneFieldDefinition2)
18063
- }
18064
- };
18065
- }
18066
- return { ...field };
18067
- case "group":
18250
+ if (field.type === "repeater") {
18251
+ if (field.polymorphic && field.itemTypes) {
18252
+ return {
18253
+ ...field,
18254
+ polymorphic: true,
18255
+ itemTypes: Object.fromEntries(
18256
+ Object.entries(field.itemTypes).map(([key, itemType]) => [
18257
+ key,
18258
+ {
18259
+ ...itemType,
18260
+ fields: itemType.fields.map(cloneFieldDefinition2)
18261
+ }
18262
+ ])
18263
+ )
18264
+ };
18265
+ }
18266
+ if (field.schema) {
18068
18267
  return {
18069
18268
  ...field,
18070
18269
  schema: {
18071
18270
  fields: field.schema.fields.map(cloneFieldDefinition2)
18072
18271
  }
18073
18272
  };
18074
- default:
18075
- return { ...field };
18273
+ }
18274
+ return { ...field };
18076
18275
  }
18276
+ if (field.type === "group") {
18277
+ return {
18278
+ ...field,
18279
+ schema: {
18280
+ fields: field.schema.fields.map(cloneFieldDefinition2)
18281
+ }
18282
+ };
18283
+ }
18284
+ return { ...field };
18077
18285
  }
18078
18286
  function cloneUnknown(value) {
18079
18287
  if (value == null || typeof value !== "object") {
@@ -18842,36 +19050,46 @@ function buildCarouselLayout() {
18842
19050
  [buildTestimonialCard(repeat("data.entries", "testimonial"))]
18843
19051
  );
18844
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
+ }
18845
19081
  function buildGridLayout() {
18846
19082
  return el(
18847
19083
  "div",
18848
19084
  { className: "rb-mt-12 rb-testimonials-carousel" },
18849
- [
18850
- // 2 columns
18851
- grid(
18852
- { gap: "lg", cols: { base: 1, sm: 2 } },
18853
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
18854
- when("gridColumns", { equals: "2" })
18855
- ),
18856
- // 3 columns (default when unset)
18857
- grid(
18858
- { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
18859
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
18860
- when("gridColumns", { equals: "3" })
18861
- ),
18862
- // 4 columns
18863
- grid(
18864
- { gap: "lg", cols: { base: 1, sm: 2, lg: 3, xl: 4 } },
18865
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
18866
- when("gridColumns", { equals: "4" })
18867
- ),
18868
- // Fallback to 3 columns when gridColumns is not set
18869
- grid(
18870
- { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
18871
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
18872
- when("gridColumns", { not: true })
18873
- )
18874
- ]
19085
+ buildResponsiveGridCards()
19086
+ );
19087
+ }
19088
+ function buildGridCardsLayout(className) {
19089
+ return el(
19090
+ "div",
19091
+ { className },
19092
+ buildResponsiveGridCards()
18875
19093
  );
18876
19094
  }
18877
19095
  var testimonialsCarouselFragment = defineFragment({
@@ -20416,7 +20634,8 @@ function createBlockManifestWithContentShape(config, _contentShape) {
20416
20634
  return createBlockManifest(config);
20417
20635
  }
20418
20636
  function normalizeBlockLayout(layout) {
20419
- return Array.isArray(layout) ? [...layout] : layout;
20637
+ const rawLayout = layout;
20638
+ return Array.isArray(rawLayout) ? rawLayout : rawLayout;
20420
20639
  }
20421
20640
  function deriveComponentName(id) {
20422
20641
  const base = id.replace(/^block\./, "");
@@ -21839,6 +22058,24 @@ var questionColumnsLayout = styledSection({
21839
22058
  }),
21840
22059
  baseClass: ""
21841
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
+ });
21842
22079
  var faqManifest = createBlockManifest({
21843
22080
  id: "block.faq",
21844
22081
  title: "FAQ",
@@ -21859,7 +22096,8 @@ var faqManifest = createBlockManifest({
21859
22096
  variants: {
21860
22097
  default: defaultLayout,
21861
22098
  "two-column": twoColumnLayout,
21862
- "question-columns": questionColumnsLayout
22099
+ "question-columns": questionColumnsLayout,
22100
+ "split-heading-columns": splitHeadingColumnsLayout
21863
22101
  },
21864
22102
  defaultVariant: "default",
21865
22103
  variantOptions: {
@@ -21874,6 +22112,10 @@ var faqManifest = createBlockManifest({
21874
22112
  "question-columns": {
21875
22113
  label: "Question columns",
21876
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."
21877
22119
  }
21878
22120
  },
21879
22121
  description: "Accordion of frequently asked questions and answers.",
@@ -21962,16 +22204,20 @@ var marqueeLoopTransform = {
21962
22204
  summary: "Repeat an array to a minimum length, then duplicate it for seamless marquee looping",
21963
22205
  schema: marqueeLoopOptionsSchema,
21964
22206
  run: (value, options) => {
21965
- if (!Array.isArray(value) || value.length === 0) return [];
22207
+ const items = toUnknownArray(value);
22208
+ if (items.length === 0) return [];
21966
22209
  const minItems = options?.minItems ?? 10;
21967
22210
  const base = [];
21968
22211
  while (base.length < minItems) {
21969
- base.push(...value);
22212
+ base.push(...items);
21970
22213
  if (base.length > 1e3) break;
21971
22214
  }
21972
22215
  return [...base, ...base];
21973
22216
  }
21974
22217
  };
22218
+ function toUnknownArray(value) {
22219
+ return Array.isArray(value) ? value : [];
22220
+ }
21975
22221
  var formattingTransforms = [
21976
22222
  uppercaseTransform,
21977
22223
  fallbackTransform,
@@ -23954,6 +24200,7 @@ var siteFooterBlockDefinition = {
23954
24200
  };
23955
24201
 
23956
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";
23957
24204
  var wrapVariant = (variantLayout) => styledSection({
23958
24205
  children: styledContainer({
23959
24206
  children: stack(
@@ -23967,10 +24214,53 @@ var wrapVariant = (variantLayout) => styledSection({
23967
24214
  // styledContainer (rb-container) already provides horizontal padding
23968
24215
  baseClass: "",
23969
24216
  spacing: "comfortable",
23970
- 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
23971
24218
  });
23972
24219
  var carouselLayout = wrapVariant(buildCarouselLayout());
23973
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
+ });
23974
24264
  var additionalFields = parseFieldDefinitions([
23975
24265
  // Heading fields from fragment
23976
24266
  ...testimonialsHeadingFragment.fields,
@@ -24002,7 +24292,7 @@ var additionalFields = parseFieldDefinitions([
24002
24292
  ],
24003
24293
  ui: {
24004
24294
  intent: "display",
24005
- visibleWhen: { field: "variant", equals: "grid" }
24295
+ visibleWhen: { field: "variant", oneOf: ["grid", "split-grid"] }
24006
24296
  }
24007
24297
  },
24008
24298
  // Carousel-specific fields (from fragment)
@@ -24036,7 +24326,8 @@ var testimonialsManifest = createBlockManifest({
24036
24326
  // Variant system - enables the variant switcher control in the editor
24037
24327
  variants: {
24038
24328
  carousel: carouselLayout,
24039
- grid: gridLayout2
24329
+ grid: gridLayout2,
24330
+ "split-grid": splitGridLayout
24040
24331
  },
24041
24332
  defaultVariant: "carousel",
24042
24333
  variantOptions: {
@@ -24049,6 +24340,11 @@ var testimonialsManifest = createBlockManifest({
24049
24340
  label: "Grid",
24050
24341
  description: "Responsive grid layout",
24051
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"
24052
24348
  }
24053
24349
  },
24054
24350
  // Fields (variant field is auto-generated by augmentManifest)
@@ -24441,6 +24737,13 @@ var collectionBlockDefinition = {
24441
24737
  manifest: collectionManifest
24442
24738
  };
24443
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
+
24444
24747
  // ../blocks/src/system/blocks/feature-cards.ts
24445
24748
  function grid3(props2, children) {
24446
24749
  return el("grid", props2 ?? void 0, children ?? void 0);
@@ -24483,6 +24786,15 @@ var featureCard = styledCard(
24483
24786
  bind("card.media")
24484
24787
  ),
24485
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
+ ),
24486
24798
  text(
24487
24799
  {
24488
24800
  as: "h3",
@@ -24604,6 +24916,16 @@ var featureCardsConfig = {
24604
24916
  defaultValue: "4/3",
24605
24917
  visibleWhen: { field: "media", notEquals: null }
24606
24918
  }),
24919
+ {
24920
+ id: "icon",
24921
+ type: "text",
24922
+ label: "Icon",
24923
+ required: false,
24924
+ ui: {
24925
+ widget: "iconPicker",
24926
+ iconPickerPreset: "feature"
24927
+ }
24928
+ },
24607
24929
  {
24608
24930
  id: "title",
24609
24931
  type: "text",
@@ -24639,6 +24961,19 @@ var featureCardsConfig = {
24639
24961
  ]
24640
24962
  }
24641
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
+ },
24642
24977
  cardStylesField({
24643
24978
  id: "_cardStyles",
24644
24979
  label: "Card styles"
@@ -25641,8 +25976,8 @@ var eventSurfaceScopeValues = [
25641
25976
  "custom"
25642
25977
  ];
25643
25978
  var eventScheduleScopeValues = ["any", "recurring", "oneOff"];
25644
- var asEventCategoryId = (value) => value;
25645
- var asVenueId = (value) => value;
25979
+ var unsafeAsEventCategoryId = (value) => value;
25980
+ var unsafeAsVenueId = (value) => value;
25646
25981
  function normalizeEventBlockKind(value) {
25647
25982
  return value === "courses" || value === "events" ? value : "all";
25648
25983
  }
@@ -25668,10 +26003,10 @@ function normalizeEventCategoryIds(value) {
25668
26003
  if (Array.isArray(value)) {
25669
26004
  return normalizeIdList(
25670
26005
  value.filter((entry) => typeof entry === "string")
25671
- ).map(asEventCategoryId);
26006
+ ).map(unsafeAsEventCategoryId);
25672
26007
  }
25673
26008
  if (typeof value === "string") {
25674
- return normalizeIdList(value.split(",")).map(asEventCategoryId);
26009
+ return normalizeIdList(value.split(",")).map(unsafeAsEventCategoryId);
25675
26010
  }
25676
26011
  return [];
25677
26012
  }
@@ -25684,7 +26019,7 @@ function normalizeEventVenueId(value) {
25684
26019
  return null;
25685
26020
  }
25686
26021
  const trimmed = value.trim();
25687
- return trimmed ? asVenueId(trimmed) : null;
26022
+ return trimmed ? unsafeAsVenueId(trimmed) : null;
25688
26023
  }
25689
26024
  function normalizeEventStaffMemberId(value) {
25690
26025
  if (typeof value !== "string") {
@@ -32456,7 +32791,8 @@ var systemBlockDefinitionsRaw = [
32456
32791
  layoutProfiles: [
32457
32792
  layoutProfile({ variantKey: "default", family: "stack", weight: "standard" }),
32458
32793
  layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" }),
32459
- 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" })
32460
32796
  ]
32461
32797
  })),
32462
32798
  withDesignCapability("block.site-header", siteHeaderBlockDefinition, declareNoBlockDesignCapability("site-chrome"), defineBlockDesignMetadata({
@@ -32487,6 +32823,12 @@ var systemBlockDefinitionsRaw = [
32487
32823
  family: "grid",
32488
32824
  weight: "standard",
32489
32825
  bias: "soft"
32826
+ }),
32827
+ layoutProfile({
32828
+ variantKey: "split-grid",
32829
+ family: "split",
32830
+ weight: "featured",
32831
+ bias: "soft"
32490
32832
  })
32491
32833
  ]
32492
32834
  })),
@@ -35343,11 +35685,11 @@ function normalizeContent(block) {
35343
35685
  }
35344
35686
  function normalizeParams(input) {
35345
35687
  if (!input || typeof input !== "object") return {};
35346
- const entries = Object.entries(input).map(([key, value]) => [
35347
- key,
35348
- coerceToString(value)
35349
- ]);
35350
- return Object.fromEntries(entries);
35688
+ const output = {};
35689
+ for (const [key, value] of Object.entries(input)) {
35690
+ output[key] = coerceToString(value);
35691
+ }
35692
+ return output;
35351
35693
  }
35352
35694
  function isNonArrayObject(value) {
35353
35695
  return typeof value === "object" && value !== null && !Array.isArray(value);
@@ -35563,10 +35905,16 @@ var dashboardConfigSchema = z62.object({
35563
35905
  var fieldDefinitionInputSchema = unsafeRetypeZodSchema(fieldSchema);
35564
35906
  var nodeDefinitionSchema = unsafeRetypeZodSchema(NodeSchema);
35565
35907
  var sdkLoaderEndpointSchema = z62.enum(SUPPORTED_LOADER_ENDPOINTS);
35908
+ var loaderFallbackScalarSchema = z62.union([
35909
+ z62.string(),
35910
+ z62.number(),
35911
+ z62.boolean(),
35912
+ z62.null()
35913
+ ]);
35566
35914
  var loaderParamBindingSchema = z62.object({
35567
35915
  $bind: z62.object({
35568
35916
  from: z62.string().min(1, "Binding path is required"),
35569
- fallback: z62.string().optional()
35917
+ fallback: loaderFallbackScalarSchema.optional()
35570
35918
  })
35571
35919
  });
35572
35920
  var loaderParamValueSchema = z62.union([
@@ -35712,9 +36060,13 @@ var sdkBlockFieldOptionsMapSchema = z62.record(
35712
36060
  var sdkContentTypeTemplateConfigSchema = z62.object({
35713
36061
  blocks: z62.array(z62.unknown())
35714
36062
  }).passthrough();
36063
+ var sdkContentTypeOrderingConfigSchema = z62.object({
36064
+ mode: z62.enum(["default", "manual"]).optional()
36065
+ }).optional();
35715
36066
  var sdkContentTypeConfigSchema = z62.object({
35716
36067
  key: z62.string().min(1),
35717
36068
  fields: z62.array(z62.unknown()),
36069
+ ordering: sdkContentTypeOrderingConfigSchema,
35718
36070
  template: sdkContentTypeTemplateConfigSchema.nullable().optional()
35719
36071
  }).passthrough();
35720
36072
  var sdkContentConfigSchema = z62.object({
@@ -36513,7 +36865,6 @@ var websiteSurfaceIds = [
36513
36865
  "site.footerBlocks",
36514
36866
  "site.navigation",
36515
36867
  "site.media",
36516
- "site.style",
36517
36868
  "site.performance"
36518
36869
  ];
36519
36870
  var websiteSurfaceIdSet = new Set(
@@ -36534,6 +36885,12 @@ var hiddenDemoSettingsNavSurfaceIds = [
36534
36885
  ];
36535
36886
  var hiddenDemoSettingsNavIds = new Set(hiddenDemoSettingsNavSurfaceIds);
36536
36887
 
36888
+ // ../api/src/navigation/identity.ts
36889
+ function unsafeAsNavigationMenuIdentifier(identifier) {
36890
+ return identifier;
36891
+ }
36892
+ var MAIN_NAVIGATION_MENU_IDENTIFIER = unsafeAsNavigationMenuIdentifier("main");
36893
+
36537
36894
  // ../api/src/aiPlayground.ts
36538
36895
  import { z as z67 } from "zod";
36539
36896
  var Rfc6902PatchOp = z67.discriminatedUnion("op", [
@@ -36672,7 +37029,7 @@ async function prefetchBlockData2(page, context, client, options) {
36672
37029
  throw new Error("listPublishedEntries requires siteId and type params");
36673
37030
  }
36674
37031
  const parsedLimit = typeof limit === "string" ? Number.parseInt(limit, 10) : typeof limit === "number" ? limit : void 0;
36675
- const order = orderBy === "newest" || orderBy === "oldest" || orderBy === "title" || orderBy === "order" ? orderBy : void 0;
37032
+ const order = orderBy === "order" ? "manual" : orderBy === "newest" || orderBy === "oldest" || orderBy === "title" ? orderBy : void 0;
36676
37033
  const parsedEntryIds = mode === "manual" ? parseManualEntryIds(entryIds) : void 0;
36677
37034
  if (mode === "manual" && (!parsedEntryIds || parsedEntryIds.length === 0)) {
36678
37035
  return { entries: [] };
@@ -37234,6 +37591,9 @@ function isContentLoadNotFoundError(error) {
37234
37591
  }
37235
37592
  return Reflect.get(error, "status") === 404;
37236
37593
  }
37594
+ function getRejectedReason(result) {
37595
+ return result.reason;
37596
+ }
37237
37597
  async function loadContent(params) {
37238
37598
  const { client, siteId, path, preview = false, forceSite } = params;
37239
37599
  const [siteResult, contentResult] = await Promise.allSettled([
@@ -37241,7 +37601,7 @@ async function loadContent(params) {
37241
37601
  client.getPage({ siteId, path, preview })
37242
37602
  ]);
37243
37603
  if (siteResult.status === "rejected" || contentResult.status === "rejected") {
37244
- const failures = [siteResult, contentResult].filter((result) => result.status === "rejected").map((result) => result.reason);
37604
+ const failures = [siteResult, contentResult].filter((result) => result.status === "rejected").map(getRejectedReason);
37245
37605
  const upstreamFailure = failures.find((error) => !isContentLoadNotFoundError(error));
37246
37606
  throw upstreamFailure ?? failures[0];
37247
37607
  }