@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
@@ -1796,7 +1796,16 @@ var ENDPOINT_DEFINITIONS = {
1796
1796
  revalidate: 60,
1797
1797
  tags: ["site-{siteId}", "content-{siteId}-{type}"],
1798
1798
  auth: "user",
1799
- responseKind: "json"
1799
+ responseKind: "json",
1800
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
1801
+ },
1802
+ reorderContentEntries: {
1803
+ path: "/sites/{siteId}/content/{type}/order",
1804
+ method: "POST",
1805
+ tags: ["site-{siteId}", "content-{siteId}-{type}"],
1806
+ auth: "user",
1807
+ responseKind: "json",
1808
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
1800
1809
  },
1801
1810
  getContentTemplate: {
1802
1811
  path: "/sites/{siteId}/content/types/{type}/template",
@@ -2188,6 +2197,46 @@ var ENDPOINT_DEFINITIONS = {
2188
2197
  auth: "user",
2189
2198
  responseKind: "json"
2190
2199
  },
2200
+ getSiteIconStyleGuide: {
2201
+ path: "/sites/{siteId}/settings/icon-style-guide",
2202
+ method: "GET",
2203
+ revalidate: 120,
2204
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2205
+ auth: "user",
2206
+ responseKind: "json",
2207
+ errors: []
2208
+ },
2209
+ updateSiteIconStyleGuide: {
2210
+ path: "/sites/{siteId}/settings/icon-style-guide",
2211
+ method: "POST",
2212
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2213
+ auth: "user",
2214
+ responseKind: "json",
2215
+ errors: []
2216
+ },
2217
+ regenerateSiteIconStyleGuide: {
2218
+ path: "/sites/{siteId}/settings/icon-style-guide/regenerate",
2219
+ method: "POST",
2220
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2221
+ auth: "user",
2222
+ responseKind: "json",
2223
+ errors: []
2224
+ },
2225
+ generateGeneratedIconSet: {
2226
+ path: "/sites/{siteId}/ai/generated-icons/generate",
2227
+ method: "POST",
2228
+ auth: "user",
2229
+ responseKind: "json",
2230
+ errors: []
2231
+ },
2232
+ applyGeneratedIconSet: {
2233
+ path: "/sites/{siteId}/ai/generated-icons/apply",
2234
+ method: "POST",
2235
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2236
+ auth: "user",
2237
+ responseKind: "json",
2238
+ errors: []
2239
+ },
2191
2240
  getSiteAiProfile: {
2192
2241
  path: "/sites/{siteId}/settings/ai-site-profile",
2193
2242
  method: "GET",
@@ -3963,6 +4012,14 @@ var ENDPOINT_DEFINITIONS = {
3963
4012
  auth: "public",
3964
4013
  responseKind: "json"
3965
4014
  },
4015
+ getGeneratedIconRenderAssets: {
4016
+ path: "/public/sites/{siteId}/generated-icon-assets",
4017
+ method: "POST",
4018
+ tags: [TAG_TEMPLATES.siteRoutableContent],
4019
+ auth: "public",
4020
+ responseKind: "json",
4021
+ errors: []
4022
+ },
3966
4023
  // Resolve entry subroute by kind and URL segment
3967
4024
  resolveEntrySubroute: {
3968
4025
  path: "/public/sites/{siteId}/routing/subroutes/resolve",
@@ -5667,6 +5724,13 @@ var ENDPOINT_DEFINITIONS = {
5667
5724
  auth: "service",
5668
5725
  responseKind: "json"
5669
5726
  },
5727
+ sdkDeleteNavigationMenu: {
5728
+ path: "/sdk/{siteId}/navigation/{menuId}",
5729
+ method: "DELETE",
5730
+ auth: "service",
5731
+ responseKind: "json",
5732
+ errors: ["resource:not_found", "server:internal_error"]
5733
+ },
5670
5734
  sdkUpsertTheme: {
5671
5735
  path: "/sdk/{siteId}/theme",
5672
5736
  method: "POST",
@@ -6329,6 +6393,20 @@ var managedDomainAddOnPricingSnapshotSchema = z.object({
6329
6393
  monthlyCurrency: z.literal("gbp")
6330
6394
  });
6331
6395
 
6396
+ // ../api/src/media.ts
6397
+ var AMBIENT_BACKGROUND_ROLES = [
6398
+ "light-texture",
6399
+ "proof-band-dark",
6400
+ "cta-wash",
6401
+ "footer-detail",
6402
+ "style-atmosphere-1",
6403
+ "style-atmosphere-2"
6404
+ ];
6405
+ var SITE_BACKGROUND_ASSET_USES = [
6406
+ "selected-background",
6407
+ ...AMBIENT_BACKGROUND_ROLES
6408
+ ];
6409
+
6332
6410
  // ../api/src/navigation/contracts.ts
6333
6411
  import { z as z2 } from "zod";
6334
6412
  var portalLinkPayloadSchema = z2.object({
@@ -6540,14 +6618,14 @@ function rotateNormalizedPoint(point, rotation) {
6540
6618
  const x = point.x;
6541
6619
  const y = point.y;
6542
6620
  switch (rotation) {
6621
+ case 0:
6622
+ return { x, y };
6543
6623
  case 90:
6544
6624
  return { x: 1 - y, y: x };
6545
6625
  case 180:
6546
6626
  return { x: 1 - x, y: 1 - y };
6547
6627
  case 270:
6548
6628
  return { x: y, y: 1 - x };
6549
- default:
6550
- return { x, y };
6551
6629
  }
6552
6630
  }
6553
6631
 
@@ -6762,6 +6840,9 @@ function resolveRepeaterGridColumnFieldId(options) {
6762
6840
  return asNonEmptyString(options?.id) ?? DEFAULT_REPEATER_GRID_COLUMN_FIELD_ID;
6763
6841
  }
6764
6842
 
6843
+ // ../blocks/src/system/icons/presets.ts
6844
+ var ICON_PICKER_PRESETS = ["cta", "feature"];
6845
+
6765
6846
  // ../blocks/src/system/manifest/schema.ts
6766
6847
  var visibilityLevels = ["admin", "designer", "author"];
6767
6848
  var MEDIA_KINDS = [
@@ -6840,6 +6921,8 @@ var uiSchema = z4.object({
6840
6921
  mediaPickerAutoOpen: z4.boolean().optional(),
6841
6922
  showMediaPreview: z4.boolean().optional(),
6842
6923
  showMediaOverlayActions: z4.boolean().optional(),
6924
+ mediaPreviewMaxWidth: z4.enum(["xs", "sm", "md", "none"]).optional(),
6925
+ preventMediaPreviewUpscale: z4.boolean().optional(),
6843
6926
  mediaDelivery: mediaDeliverySchema.optional(),
6844
6927
  mediaDeliveryByVariant: z4.record(z4.string(), mediaDeliverySchema).optional(),
6845
6928
  // Optional input hints for validators/widgets
@@ -6918,7 +7001,7 @@ var uiSchema = z4.object({
6918
7001
  layoutGridColumnField: z4.string().optional(),
6919
7002
  layoutGridMaxRows: z4.number().int().positive().optional(),
6920
7003
  // Icon picker configuration (used when ui.widget === 'iconPicker')
6921
- iconPickerPreset: z4.enum(["cta"]).optional(),
7004
+ iconPickerPreset: z4.enum(ICON_PICKER_PRESETS).optional(),
6922
7005
  // Entry picker configuration
6923
7006
  contentTypeField: z4.string().optional(),
6924
7007
  fixedContentType: z4.string().optional(),
@@ -7089,6 +7172,9 @@ var repeaterFieldSchema = baseFieldSchema.extend({
7089
7172
  type: z4.literal("repeater"),
7090
7173
  itemLabel: z4.string().default("Item"),
7091
7174
  itemLabelSource: z4.string().optional(),
7175
+ showSummary: z4.boolean().optional(),
7176
+ summaryFields: z4.string().array().optional(),
7177
+ summaryMaxChars: z4.number().int().positive().optional(),
7092
7178
  minItems: z4.number().int().min(0).default(0),
7093
7179
  maxItems: z4.number().int().positive().optional(),
7094
7180
  // Monomorphic mode
@@ -8581,7 +8667,7 @@ var themeColorBaseTokenNames = [
8581
8667
  "accentForeground"
8582
8668
  ];
8583
8669
  var themeColorBaseTokenSet = new Set(themeColorBaseTokenNames);
8584
- var SHADE_STEPS = [
8670
+ var themeColorShadeSteps = [
8585
8671
  "50",
8586
8672
  "100",
8587
8673
  "200",
@@ -8594,7 +8680,7 @@ var SHADE_STEPS = [
8594
8680
  "900",
8595
8681
  "950"
8596
8682
  ];
8597
- var shadeStepSet = new Set(SHADE_STEPS);
8683
+ var shadeStepSet = new Set(themeColorShadeSteps);
8598
8684
  function isKnownBaseToken(value) {
8599
8685
  return themeColorBaseTokenSet.has(value);
8600
8686
  }
@@ -12295,6 +12381,7 @@ var curatedSiteStyleIdValues = [
12295
12381
  "site-style:personal-retreat-journal",
12296
12382
  "site-style:tactile-workshop",
12297
12383
  "site-style:modern-wellness",
12384
+ "site-style:clarity-zen-blue",
12298
12385
  SOFT_EARTH_SITE_STYLE_ID_VALUE,
12299
12386
  "site-style:bold-launch",
12300
12387
  "site-style:south-west-twerk-school"
@@ -12880,6 +12967,114 @@ var curatedSiteStyles = [
12880
12967
  paletteChoice("warm-neutral-clay")
12881
12968
  ]
12882
12969
  }),
12970
+ defineCuratedSiteStyle({
12971
+ id: "site-style:clarity-zen-blue",
12972
+ name: "Clarity Zen",
12973
+ description: "Calm, editorial, and reassuring for therapy, counselling, and wellbeing support practices.",
12974
+ 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.",
12975
+ siteCreatorSelection: {
12976
+ kind: "site_creator_keyword_heuristic",
12977
+ priority: 25
12978
+ },
12979
+ selectionKeywordRules: [
12980
+ { kind: "substring", value: "psychotherap" },
12981
+ { kind: "phrase", value: "mental health" },
12982
+ { kind: "phrase", value: "talk therapy" },
12983
+ { kind: "phrase", value: "therapy and wellbeing" }
12984
+ ],
12985
+ tokenRecipes: {
12986
+ palette: "brand-led",
12987
+ contrast: "standard",
12988
+ radius: "rounded",
12989
+ shadow: "subtle",
12990
+ typography: "serif-editorial",
12991
+ spacing: "airy",
12992
+ motion: "subtle"
12993
+ },
12994
+ compositionBudget: balancedBudget,
12995
+ themeOverrides: {
12996
+ typography: {
12997
+ body: {
12998
+ family: "Inter, system-ui, sans-serif",
12999
+ size: "md",
13000
+ weight: "regular",
13001
+ lineHeight: "relaxed",
13002
+ letterSpacing: "normal"
13003
+ },
13004
+ headings: {
13005
+ default: {
13006
+ family: '"Cormorant Garamond", Georgia, serif',
13007
+ weight: "regular",
13008
+ lineHeight: "normal",
13009
+ letterSpacing: "normal",
13010
+ colorToken: "text",
13011
+ italic: null,
13012
+ case: null
13013
+ },
13014
+ h1: {
13015
+ size: "xl",
13016
+ weight: "regular",
13017
+ lineHeight: "normal",
13018
+ letterSpacing: "normal",
13019
+ italic: null
13020
+ },
13021
+ h2: {
13022
+ size: "lg",
13023
+ weight: "regular",
13024
+ lineHeight: "normal",
13025
+ letterSpacing: "normal",
13026
+ italic: null
13027
+ },
13028
+ h3: {
13029
+ size: "md",
13030
+ weight: "regular",
13031
+ lineHeight: "normal",
13032
+ letterSpacing: "normal",
13033
+ italic: null
13034
+ }
13035
+ },
13036
+ scale: "majorThird"
13037
+ },
13038
+ bodyText: {
13039
+ intro: {
13040
+ paragraphSize: "default",
13041
+ headingSize: "editorial"
13042
+ }
13043
+ }
13044
+ },
13045
+ defaultBlockVariants: {
13046
+ "block.faq": "split-heading-columns"
13047
+ },
13048
+ recommendedAppearancePresetIds: [
13049
+ "hero-split-editorial",
13050
+ "intro-organic-statement",
13051
+ "feature-cards-raised-rule",
13052
+ "media-text-quiet-story",
13053
+ "testimonials-brand-background-quotes",
13054
+ "faq-contained-help",
13055
+ "contact-form-panel"
13056
+ ],
13057
+ recommendedHeaderLookIds: [
13058
+ "centered-calm",
13059
+ "serif-line",
13060
+ "minimal-transparent"
13061
+ ],
13062
+ recommendedFooterLookIds: [
13063
+ "footer-muted-grounding",
13064
+ "site-footer-brand-two-band"
13065
+ ],
13066
+ buttonPersonalityChoices: [
13067
+ buttonChoice("soft-pill"),
13068
+ buttonChoice("pebble"),
13069
+ buttonChoice("editorial-link")
13070
+ ],
13071
+ paletteVariantChoices: [
13072
+ paletteChoice("brand-led-cool"),
13073
+ paletteChoice("soft-natural-watercolor"),
13074
+ paletteChoice("soft-natural-stone"),
13075
+ paletteChoice("warm-neutral-cream")
13076
+ ]
13077
+ }),
12883
13078
  defineCuratedSiteStyle({
12884
13079
  id: "site-style:personal-retreat-journal",
12885
13080
  name: "Personal Retreat Journal",
@@ -16133,47 +16328,48 @@ function validateFieldDefinitions(fields3, fragmentId) {
16133
16328
  function prefixFieldId(field, scope) {
16134
16329
  const cloned = cloneFieldDefinition2(field);
16135
16330
  cloned.id = `${scope}.${field.id}`;
16136
- cloned.defaultValue = cloneUnknown(cloned.defaultValue);
16331
+ const defaultValue = cloned.defaultValue;
16332
+ cloned.defaultValue = cloneUnknown(defaultValue);
16137
16333
  cloned.visibleRoles = cloned.visibleRoles ? [...cloned.visibleRoles] : void 0;
16138
16334
  cloned.ui = cloneUnknown(cloned.ui);
16139
16335
  return cloned;
16140
16336
  }
16141
16337
  function cloneFieldDefinition2(field) {
16142
- switch (field.type) {
16143
- case "repeater":
16144
- if (field.polymorphic && field.itemTypes) {
16145
- return {
16146
- ...field,
16147
- polymorphic: true,
16148
- itemTypes: Object.fromEntries(
16149
- Object.entries(field.itemTypes).map(([key, itemType]) => [
16150
- key,
16151
- {
16152
- ...itemType,
16153
- fields: itemType.fields.map(cloneFieldDefinition2)
16154
- }
16155
- ])
16156
- )
16157
- };
16158
- } else if (field.schema) {
16159
- return {
16160
- ...field,
16161
- schema: {
16162
- fields: field.schema.fields.map(cloneFieldDefinition2)
16163
- }
16164
- };
16165
- }
16166
- return { ...field };
16167
- case "group":
16338
+ if (field.type === "repeater") {
16339
+ if (field.polymorphic && field.itemTypes) {
16340
+ return {
16341
+ ...field,
16342
+ polymorphic: true,
16343
+ itemTypes: Object.fromEntries(
16344
+ Object.entries(field.itemTypes).map(([key, itemType]) => [
16345
+ key,
16346
+ {
16347
+ ...itemType,
16348
+ fields: itemType.fields.map(cloneFieldDefinition2)
16349
+ }
16350
+ ])
16351
+ )
16352
+ };
16353
+ }
16354
+ if (field.schema) {
16168
16355
  return {
16169
16356
  ...field,
16170
16357
  schema: {
16171
16358
  fields: field.schema.fields.map(cloneFieldDefinition2)
16172
16359
  }
16173
16360
  };
16174
- default:
16175
- return { ...field };
16361
+ }
16362
+ return { ...field };
16176
16363
  }
16364
+ if (field.type === "group") {
16365
+ return {
16366
+ ...field,
16367
+ schema: {
16368
+ fields: field.schema.fields.map(cloneFieldDefinition2)
16369
+ }
16370
+ };
16371
+ }
16372
+ return { ...field };
16177
16373
  }
16178
16374
  function cloneUnknown(value) {
16179
16375
  if (value == null || typeof value !== "object") {
@@ -16942,36 +17138,46 @@ function buildCarouselLayout() {
16942
17138
  [buildTestimonialCard(repeat("data.entries", "testimonial"))]
16943
17139
  );
16944
17140
  }
17141
+ function buildResponsiveGridCards() {
17142
+ return [
17143
+ // 2 columns
17144
+ grid(
17145
+ { gap: "lg", cols: { base: 1, sm: 2 } },
17146
+ [buildTestimonialCard(repeat("data.entries", "testimonial"))],
17147
+ when("gridColumns", { equals: "2" })
17148
+ ),
17149
+ // 3 columns (default when unset)
17150
+ grid(
17151
+ { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
17152
+ [buildTestimonialCard(repeat("data.entries", "testimonial"))],
17153
+ when("gridColumns", { equals: "3" })
17154
+ ),
17155
+ // 4 columns
17156
+ grid(
17157
+ { gap: "lg", cols: { base: 1, sm: 2, lg: 3, xl: 4 } },
17158
+ [buildTestimonialCard(repeat("data.entries", "testimonial"))],
17159
+ when("gridColumns", { equals: "4" })
17160
+ ),
17161
+ // Fallback to 3 columns when gridColumns is not set
17162
+ grid(
17163
+ { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
17164
+ [buildTestimonialCard(repeat("data.entries", "testimonial"))],
17165
+ when("gridColumns", { not: true })
17166
+ )
17167
+ ];
17168
+ }
16945
17169
  function buildGridLayout() {
16946
17170
  return el(
16947
17171
  "div",
16948
17172
  { className: "rb-mt-12 rb-testimonials-carousel" },
16949
- [
16950
- // 2 columns
16951
- grid(
16952
- { gap: "lg", cols: { base: 1, sm: 2 } },
16953
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
16954
- when("gridColumns", { equals: "2" })
16955
- ),
16956
- // 3 columns (default when unset)
16957
- grid(
16958
- { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
16959
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
16960
- when("gridColumns", { equals: "3" })
16961
- ),
16962
- // 4 columns
16963
- grid(
16964
- { gap: "lg", cols: { base: 1, sm: 2, lg: 3, xl: 4 } },
16965
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
16966
- when("gridColumns", { equals: "4" })
16967
- ),
16968
- // Fallback to 3 columns when gridColumns is not set
16969
- grid(
16970
- { gap: "lg", cols: { base: 1, sm: 2, lg: 3 } },
16971
- [buildTestimonialCard(repeat("data.entries", "testimonial"))],
16972
- when("gridColumns", { not: true })
16973
- )
16974
- ]
17173
+ buildResponsiveGridCards()
17174
+ );
17175
+ }
17176
+ function buildGridCardsLayout(className) {
17177
+ return el(
17178
+ "div",
17179
+ { className },
17180
+ buildResponsiveGridCards()
16975
17181
  );
16976
17182
  }
16977
17183
  var testimonialsCarouselFragment = defineFragment({
@@ -18516,7 +18722,8 @@ function createBlockManifestWithContentShape(config, _contentShape) {
18516
18722
  return createBlockManifest(config);
18517
18723
  }
18518
18724
  function normalizeBlockLayout(layout) {
18519
- return Array.isArray(layout) ? [...layout] : layout;
18725
+ const rawLayout = layout;
18726
+ return Array.isArray(rawLayout) ? rawLayout : rawLayout;
18520
18727
  }
18521
18728
  function deriveComponentName(id) {
18522
18729
  const base = id.replace(/^block\./, "");
@@ -19939,6 +20146,24 @@ var questionColumnsLayout = styledSection({
19939
20146
  }),
19940
20147
  baseClass: ""
19941
20148
  });
20149
+ var splitHeadingColumnsLayout = styledSection({
20150
+ children: styledContainer({
20151
+ baseClassName: "rb-relative rb-isolate",
20152
+ children: el(
20153
+ "div",
20154
+ {
20155
+ className: "rb-faq-split-heading-columns rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
20156
+ },
20157
+ [
20158
+ el("div", { className: "rb-faq-split-heading-columns-copy" }, [headingLayout]),
20159
+ el("div", { className: "rb-faq-split-heading-columns-accordion" }, [
20160
+ questionColumnsAccordionLayout
20161
+ ])
20162
+ ]
20163
+ )
20164
+ }),
20165
+ baseClass: ""
20166
+ });
19942
20167
  var faqManifest = createBlockManifest({
19943
20168
  id: "block.faq",
19944
20169
  title: "FAQ",
@@ -19959,7 +20184,8 @@ var faqManifest = createBlockManifest({
19959
20184
  variants: {
19960
20185
  default: defaultLayout,
19961
20186
  "two-column": twoColumnLayout,
19962
- "question-columns": questionColumnsLayout
20187
+ "question-columns": questionColumnsLayout,
20188
+ "split-heading-columns": splitHeadingColumnsLayout
19963
20189
  },
19964
20190
  defaultVariant: "default",
19965
20191
  variantOptions: {
@@ -19974,6 +20200,10 @@ var faqManifest = createBlockManifest({
19974
20200
  "question-columns": {
19975
20201
  label: "Question columns",
19976
20202
  description: "A full-width heading above FAQ items split into two columns."
20203
+ },
20204
+ "split-heading-columns": {
20205
+ label: "Split heading columns",
20206
+ description: "A left heading column with FAQ items split into two columns on the right."
19977
20207
  }
19978
20208
  },
19979
20209
  description: "Accordion of frequently asked questions and answers.",
@@ -20062,16 +20292,20 @@ var marqueeLoopTransform = {
20062
20292
  summary: "Repeat an array to a minimum length, then duplicate it for seamless marquee looping",
20063
20293
  schema: marqueeLoopOptionsSchema,
20064
20294
  run: (value, options) => {
20065
- if (!Array.isArray(value) || value.length === 0) return [];
20295
+ const items = toUnknownArray(value);
20296
+ if (items.length === 0) return [];
20066
20297
  const minItems = options?.minItems ?? 10;
20067
20298
  const base = [];
20068
20299
  while (base.length < minItems) {
20069
- base.push(...value);
20300
+ base.push(...items);
20070
20301
  if (base.length > 1e3) break;
20071
20302
  }
20072
20303
  return [...base, ...base];
20073
20304
  }
20074
20305
  };
20306
+ function toUnknownArray(value) {
20307
+ return Array.isArray(value) ? value : [];
20308
+ }
20075
20309
  var formattingTransforms = [
20076
20310
  uppercaseTransform,
20077
20311
  fallbackTransform,
@@ -22051,6 +22285,7 @@ var siteFooterBlockDefinition = {
22051
22285
  };
22052
22286
 
22053
22287
  // ../blocks/src/system/blocks/testimonials.tsx
22288
+ var backgroundImageClassName = "rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-object-cover rb-opacity-50";
22054
22289
  var wrapVariant = (variantLayout) => styledSection({
22055
22290
  children: styledContainer({
22056
22291
  children: stack(
@@ -22064,10 +22299,53 @@ var wrapVariant = (variantLayout) => styledSection({
22064
22299
  // styledContainer (rb-container) already provides horizontal padding
22065
22300
  baseClass: "",
22066
22301
  spacing: "comfortable",
22067
- imageClassName: "rb-absolute rb-inset-0 rb-z-neg-10 rb-h-full rb-w-full rb-object-cover rb-opacity-50"
22302
+ imageClassName: backgroundImageClassName
22068
22303
  });
22069
22304
  var carouselLayout = wrapVariant(buildCarouselLayout());
22070
22305
  var gridLayout2 = wrapVariant(buildGridLayout());
22306
+ var splitHeading = stack(
22307
+ { gap: "md", className: "rb-testimonials-split-heading-copy rb-max-w-xl" },
22308
+ [
22309
+ text(
22310
+ { as: "h2" },
22311
+ when("content.heading"),
22312
+ bind("content.heading")
22313
+ ),
22314
+ headingDecoration({
22315
+ family: "short-center-rule",
22316
+ placement: "after-heading"
22317
+ }),
22318
+ text(
22319
+ {
22320
+ as: "p",
22321
+ className: "rb-prose",
22322
+ style: textColorStyle("mutedText")
22323
+ },
22324
+ when("content.subheading"),
22325
+ bind("content.subheading")
22326
+ )
22327
+ ]
22328
+ );
22329
+ var splitGridLayout = styledSection({
22330
+ children: styledContainer({
22331
+ baseClassName: "rb-relative rb-isolate",
22332
+ children: el(
22333
+ "div",
22334
+ {
22335
+ className: "rb-testimonials-split-grid rb-grid rb-grid-cols-1 rb-gap-8 rb-lg-grid-cols-2 rb-lg-items-start"
22336
+ },
22337
+ [
22338
+ el("div", { className: "rb-testimonials-split-grid-heading" }, [splitHeading]),
22339
+ el("div", { className: "rb-testimonials-split-grid-cards" }, [
22340
+ buildGridCardsLayout("rb-testimonials-split-grid-card-list")
22341
+ ])
22342
+ ]
22343
+ )
22344
+ }),
22345
+ baseClass: "",
22346
+ spacing: "comfortable",
22347
+ imageClassName: backgroundImageClassName
22348
+ });
22071
22349
  var additionalFields = parseFieldDefinitions([
22072
22350
  // Heading fields from fragment
22073
22351
  ...testimonialsHeadingFragment.fields,
@@ -22099,7 +22377,7 @@ var additionalFields = parseFieldDefinitions([
22099
22377
  ],
22100
22378
  ui: {
22101
22379
  intent: "display",
22102
- visibleWhen: { field: "variant", equals: "grid" }
22380
+ visibleWhen: { field: "variant", oneOf: ["grid", "split-grid"] }
22103
22381
  }
22104
22382
  },
22105
22383
  // Carousel-specific fields (from fragment)
@@ -22133,7 +22411,8 @@ var testimonialsManifest = createBlockManifest({
22133
22411
  // Variant system - enables the variant switcher control in the editor
22134
22412
  variants: {
22135
22413
  carousel: carouselLayout,
22136
- grid: gridLayout2
22414
+ grid: gridLayout2,
22415
+ "split-grid": splitGridLayout
22137
22416
  },
22138
22417
  defaultVariant: "carousel",
22139
22418
  variantOptions: {
@@ -22146,6 +22425,11 @@ var testimonialsManifest = createBlockManifest({
22146
22425
  label: "Grid",
22147
22426
  description: "Responsive grid layout",
22148
22427
  icon: "Grid"
22428
+ },
22429
+ "split-grid": {
22430
+ label: "Split grid",
22431
+ description: "Heading on the left with testimonial cards on the right",
22432
+ icon: "PanelLeft"
22149
22433
  }
22150
22434
  },
22151
22435
  // Fields (variant field is auto-generated by augmentManifest)
@@ -22538,6 +22822,13 @@ var collectionBlockDefinition = {
22538
22822
  manifest: collectionManifest
22539
22823
  };
22540
22824
 
22825
+ // ../blocks/src/system/blocks/feature-card-icons.ts
22826
+ var FEATURE_CARD_ICON_TREATMENTS = [
22827
+ "plain",
22828
+ "soft-badge",
22829
+ "utility-badge"
22830
+ ];
22831
+
22541
22832
  // ../blocks/src/system/blocks/feature-cards.ts
22542
22833
  function grid3(props2, children) {
22543
22834
  return el("grid", props2 ?? void 0, children ?? void 0);
@@ -22580,6 +22871,15 @@ var featureCard = styledCard(
22580
22871
  bind("card.media")
22581
22872
  ),
22582
22873
  stack({ gap: "sm", className: "rb-feature-card-content rb-flex-1 rb-p-6" }, [
22874
+ el(
22875
+ "feature-card-icon",
22876
+ {
22877
+ treatment: { $bind: { from: "content._iconTreatment", fallback: "soft-badge" } },
22878
+ generatedAssets: { $bind: { from: "data.generatedIconAssets" } }
22879
+ },
22880
+ null,
22881
+ bind("card.icon")
22882
+ ),
22583
22883
  text(
22584
22884
  {
22585
22885
  as: "h3",
@@ -22701,6 +23001,16 @@ var featureCardsConfig = {
22701
23001
  defaultValue: "4/3",
22702
23002
  visibleWhen: { field: "media", notEquals: null }
22703
23003
  }),
23004
+ {
23005
+ id: "icon",
23006
+ type: "text",
23007
+ label: "Icon",
23008
+ required: false,
23009
+ ui: {
23010
+ widget: "iconPicker",
23011
+ iconPickerPreset: "feature"
23012
+ }
23013
+ },
22704
23014
  {
22705
23015
  id: "title",
22706
23016
  type: "text",
@@ -22736,6 +23046,19 @@ var featureCardsConfig = {
22736
23046
  ]
22737
23047
  }
22738
23048
  },
23049
+ {
23050
+ id: "_iconTreatment",
23051
+ type: "select",
23052
+ label: "Icon style",
23053
+ required: false,
23054
+ defaultValue: "soft-badge",
23055
+ multiple: false,
23056
+ options: FEATURE_CARD_ICON_TREATMENTS.map((value) => ({
23057
+ value,
23058
+ label: value === "plain" ? "Plain" : value === "soft-badge" ? "Soft badge" : "Utility badge"
23059
+ })),
23060
+ ui: { intent: "display" }
23061
+ },
22739
23062
  cardStylesField({
22740
23063
  id: "_cardStyles",
22741
23064
  label: "Card styles"
@@ -23738,8 +24061,8 @@ var eventSurfaceScopeValues = [
23738
24061
  "custom"
23739
24062
  ];
23740
24063
  var eventScheduleScopeValues = ["any", "recurring", "oneOff"];
23741
- var asEventCategoryId = (value) => value;
23742
- var asVenueId = (value) => value;
24064
+ var unsafeAsEventCategoryId = (value) => value;
24065
+ var unsafeAsVenueId = (value) => value;
23743
24066
  function normalizeEventBlockKind(value) {
23744
24067
  return value === "courses" || value === "events" ? value : "all";
23745
24068
  }
@@ -23765,10 +24088,10 @@ function normalizeEventCategoryIds(value) {
23765
24088
  if (Array.isArray(value)) {
23766
24089
  return normalizeIdList(
23767
24090
  value.filter((entry) => typeof entry === "string")
23768
- ).map(asEventCategoryId);
24091
+ ).map(unsafeAsEventCategoryId);
23769
24092
  }
23770
24093
  if (typeof value === "string") {
23771
- return normalizeIdList(value.split(",")).map(asEventCategoryId);
24094
+ return normalizeIdList(value.split(",")).map(unsafeAsEventCategoryId);
23772
24095
  }
23773
24096
  return [];
23774
24097
  }
@@ -23781,7 +24104,7 @@ function normalizeEventVenueId(value) {
23781
24104
  return null;
23782
24105
  }
23783
24106
  const trimmed = value.trim();
23784
- return trimmed ? asVenueId(trimmed) : null;
24107
+ return trimmed ? unsafeAsVenueId(trimmed) : null;
23785
24108
  }
23786
24109
  function normalizeEventStaffMemberId(value) {
23787
24110
  if (typeof value !== "string") {
@@ -30553,7 +30876,8 @@ var systemBlockDefinitionsRaw = [
30553
30876
  layoutProfiles: [
30554
30877
  layoutProfile({ variantKey: "default", family: "stack", weight: "standard" }),
30555
30878
  layoutProfile({ variantKey: "two-column", family: "split", weight: "standard" }),
30556
- layoutProfile({ variantKey: "question-columns", family: "grid", weight: "standard" })
30879
+ layoutProfile({ variantKey: "question-columns", family: "grid", weight: "standard" }),
30880
+ layoutProfile({ variantKey: "split-heading-columns", family: "split", weight: "standard" })
30557
30881
  ]
30558
30882
  })),
30559
30883
  withDesignCapability("block.site-header", siteHeaderBlockDefinition, declareNoBlockDesignCapability("site-chrome"), defineBlockDesignMetadata({
@@ -30584,6 +30908,12 @@ var systemBlockDefinitionsRaw = [
30584
30908
  family: "grid",
30585
30909
  weight: "standard",
30586
30910
  bias: "soft"
30911
+ }),
30912
+ layoutProfile({
30913
+ variantKey: "split-grid",
30914
+ family: "split",
30915
+ weight: "featured",
30916
+ bias: "soft"
30587
30917
  })
30588
30918
  ]
30589
30919
  })),
@@ -33266,10 +33596,16 @@ var dashboardConfigSchema = z61.object({
33266
33596
  var fieldDefinitionInputSchema = unsafeRetypeZodSchema(fieldSchema);
33267
33597
  var nodeDefinitionSchema = unsafeRetypeZodSchema(NodeSchema);
33268
33598
  var sdkLoaderEndpointSchema = z61.enum(SUPPORTED_LOADER_ENDPOINTS);
33599
+ var loaderFallbackScalarSchema = z61.union([
33600
+ z61.string(),
33601
+ z61.number(),
33602
+ z61.boolean(),
33603
+ z61.null()
33604
+ ]);
33269
33605
  var loaderParamBindingSchema = z61.object({
33270
33606
  $bind: z61.object({
33271
33607
  from: z61.string().min(1, "Binding path is required"),
33272
- fallback: z61.string().optional()
33608
+ fallback: loaderFallbackScalarSchema.optional()
33273
33609
  })
33274
33610
  });
33275
33611
  var loaderParamValueSchema = z61.union([
@@ -33415,9 +33751,13 @@ var sdkBlockFieldOptionsMapSchema = z61.record(
33415
33751
  var sdkContentTypeTemplateConfigSchema = z61.object({
33416
33752
  blocks: z61.array(z61.unknown())
33417
33753
  }).passthrough();
33754
+ var sdkContentTypeOrderingConfigSchema = z61.object({
33755
+ mode: z61.enum(["default", "manual"]).optional()
33756
+ }).optional();
33418
33757
  var sdkContentTypeConfigSchema = z61.object({
33419
33758
  key: z61.string().min(1),
33420
33759
  fields: z61.array(z61.unknown()),
33760
+ ordering: sdkContentTypeOrderingConfigSchema,
33421
33761
  template: sdkContentTypeTemplateConfigSchema.nullable().optional()
33422
33762
  }).passthrough();
33423
33763
  var sdkContentConfigSchema = z61.object({
@@ -34303,7 +34643,6 @@ var websiteSurfaceIds = [
34303
34643
  "site.footerBlocks",
34304
34644
  "site.navigation",
34305
34645
  "site.media",
34306
- "site.style",
34307
34646
  "site.performance"
34308
34647
  ];
34309
34648
  var websiteSurfaceIdSet = new Set(
@@ -34324,6 +34663,12 @@ var hiddenDemoSettingsNavSurfaceIds = [
34324
34663
  ];
34325
34664
  var hiddenDemoSettingsNavIds = new Set(hiddenDemoSettingsNavSurfaceIds);
34326
34665
 
34666
+ // ../api/src/navigation/identity.ts
34667
+ function unsafeAsNavigationMenuIdentifier(identifier) {
34668
+ return identifier;
34669
+ }
34670
+ var MAIN_NAVIGATION_MENU_IDENTIFIER = unsafeAsNavigationMenuIdentifier("main");
34671
+
34327
34672
  // ../api/src/aiPlayground.ts
34328
34673
  import { z as z66 } from "zod";
34329
34674
  var Rfc6902PatchOp = z66.discriminatedUnion("op", [
@@ -34551,6 +34896,9 @@ var templateConfigSchemaForward = z67.object({
34551
34896
  })
34552
34897
  )
34553
34898
  }).optional();
34899
+ var contentTypeOrderingSchema = z67.object({
34900
+ mode: z67.enum(["default", "manual"]).optional()
34901
+ }).optional();
34554
34902
  var contentTypeConfigSchema = z67.object({
34555
34903
  key: contentTypeKeySchema,
34556
34904
  name: z67.string().min(1),
@@ -34560,6 +34908,7 @@ var contentTypeConfigSchema = z67.object({
34560
34908
  // Fields are validated as unknown[] here - deep field validation happens in @riverbankcms/blocks
34561
34909
  fields: z67.array(z67.any()).min(1, "At least one field is required"),
34562
34910
  titleField: z67.string().optional(),
34911
+ ordering: contentTypeOrderingSchema,
34563
34912
  isSingleton: z67.boolean().optional().default(false),
34564
34913
  template: templateConfigSchemaForward
34565
34914
  }).refine(
@@ -35091,7 +35440,7 @@ var loaderParamBindingSchema2 = z70.object({
35091
35440
  // Loader params are ultimately string-normalized for query strings, so fallbacks should
35092
35441
  // stay scalar. Use transforms (e.g. `value.jsonArray`) when you need to serialize
35093
35442
  // more complex values into a string.
35094
- fallback: z70.union([z70.string(), z70.number(), z70.boolean(), z70.null()]).optional(),
35443
+ fallback: loaderFallbackScalarSchema.optional(),
35095
35444
  transforms: z70.array(loaderTransformStepSchema).default([]),
35096
35445
  pick: z70.enum(["value", "collection", "context"]).default("value"),
35097
35446
  coerce: z70.enum(["number", "boolean", "string"]).optional()